Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- noc-node1:/opt/noc$ sudo ./noc script --debug --pretty get_config "Cisco Catalyst 2960XR - RTU Switch (EQ.88754)"
- 2017-04-27 13:44:16,526 [root] Loading PeriodicRegistry
- 2017-04-27 13:44:16,599 [noc.lib.nosql] Connecting to MongoDB {'username': 'noc', 'authentication_source': 'noc', 'replicaSet': 'noc'
- , 'db': 'noc', 'socketKeepAlive': True, 'host': 'mongodb://noc:noc@192.168.110.75:27017/noc', 'password': '********', 'slave_okay': T
- rue}
- 2017-04-27 13:44:16,616 [noc.core.cache.base] Using cache backend: noc.core.cache.memcached.MemcachedCache
- 2017-04-27 13:44:16,621 [noc.core.cache.memcached] Starting memcached pool: hosts=192.168.110.75:11211, pool size=8
- 2017-04-27 13:44:16,644 [noc.main.models.doccategory] Registering Capability
- 2017-04-27 13:44:16,645 [noc.main.models.doccategory] Registering MetricType
- 2017-04-27 13:44:16,861 [noc.main.models.doccategory] Registering ConnectionType
- 2017-04-27 13:44:16,864 [noc.main.models.doccategory] Registering ObjectModel
- 2017-04-27 13:44:16,876 [noc.main.models.textindex] Adding FTS index for sa.managedobject
- 2017-04-27 13:44:16,896 [noc.main.models.textindex] Adding FTS index for ip.vrf
- 2017-04-27 13:44:16,900 [noc.main.models.textindex] Adding FTS index for vc.vc
- 2017-04-27 13:44:16,903 [noc.main.models.textindex] Adding FTS index for ip.prefix
- 2017-04-27 13:44:16,905 [noc.main.models.textindex] Adding FTS index for ip.address
- 2017-04-27 13:44:16,930 [noc.core.script.loader] Loading script Cisco.IOS.get_config
- 2017-04-27 13:44:16,954 [noc.core.profile.loader] Loading profile Cisco.IOS
- 2017-04-27 13:44:16,954 [script] [Cisco.IOS.get_config|192.168.110.56] Filling get_version cache with {'platform': u'C2960X', 'versio
- n': u'15.0(2)EX5', 'vendor': u'Cisco'}
- 2017-04-27 13:44:16,954 [script] [Cisco.IOS.get_config|192.168.110.56] Running. Input arguments: {}, timeout 3600
- 2017-04-27 13:44:16,955 [script] [Cisco.IOS.get_config|192.168.110.56] Open ssh CLI
- 2017-04-27 13:44:16,960 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Setup session
- 2017-04-27 13:44:16,960 [script] [Cisco.IOS.get_config|192.168.110.56] Disable paging
- 2017-04-27 13:44:16,960 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Creating IOLoop
- 2017-04-27 13:44:16,961 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Connecting (u'192.168.110.56', 22)
- 2017-04-27 13:44:16,962 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Connected
- 2017-04-27 13:44:16,963 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Startup ssh session for user 'rancid'
- 2017-04-27 13:44:17,514 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Connected. Host fingerprint is c3edcac7c84f28aee2522d741755d9e16740070c
- 2017-04-27 13:44:17,516 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Supported authentication methods: publickey, keyboard-interactive, password
- 2017-04-27 13:44:17,516 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Trying publickey authentication
- 2017-04-27 13:44:17,516 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] public_key=var/etc/ssh/default/id_rsa.pub private_key=var/etc/ssh/default/id_rsa
- 2017-04-27 13:44:19,516 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Failed: Username/PublicKey combination invalid (Code: -18)
- 2017-04-27 13:44:19,516 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Trying keyboard-interactive
- 2017-04-27 13:44:19,523 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Success
- 2017-04-27 13:44:19,523 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] User is authenticated
- 2017-04-27 13:44:19,523 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Open channel
- 2017-04-27 13:44:19,527 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] State: <START>
- 2017-04-27 13:44:19,527 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Setting timeout: 60s
- 2017-04-27 13:44:19,528 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Received: 'CC\r\n=== RTU Switch - Catalyst 2960 EQ.88754 ===\r\n'
- 2017-04-27 13:44:19,529 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Received: '\r\nRTU_switch/EQ.88754>'
- 2017-04-27 13:44:19,529 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Match: ^\S+?>
- 2017-04-27 13:44:19,529 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] State: <UNPRIVILEGED_PROMPT>
- 2017-04-27 13:44:19,529 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Send: 'enable\n'
- 2017-04-27 13:44:19,530 [tornado.application] Future exception was never retrieved: Traceback (most recent call last):
- File "/opt/noc/local/lib/python2.7/site-packages/tornado/gen.py", line 307, in wrapper
- yielded = next(result)
- File "/opt/noc/core/script/cli/base.py", line 217, in send
- yield self.iostream.write(cmd)
- File "/opt/noc/local/lib/python2.7/site-packages/tornado/iostream.py", line 406, in write
- self._handle_write()
- File "/opt/noc/local/lib/python2.7/site-packages/tornado/iostream.py", line 862, in _handle_write
- memoryview(self._write_buffer)[start:start + size])
- File "/opt/noc/core/script/cli/ssh.py", line 89, in write_to_fd
- return self.channel.write(data)
- File "/opt/noc/local/lib/python2.7/site-packages/libssh2/channel.py", line 255, in write
- return self._channel.write(message)
- TypeError: must be string or read-only buffer, not memoryview
- 2017-04-27 13:44:19,530 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Setting timeout: 10s
- 2017-04-27 13:44:29,540 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Timeout error
- 2017-04-27 13:44:29,540 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Closing channel
- 2017-04-27 13:44:29,642 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Cannot close channel clearly: Unable to close the channel.
- 2017-04-27 13:44:29,642 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Closing ssh session
- 2017-04-27 13:44:29,643 [tornado.application] Exception in Future <tornado.concurrent.Future object at 0x7f6338031090> after timeout
- Traceback (most recent call last):
- File "/opt/noc/local/lib/python2.7/site-packages/tornado/gen.py", line 910, in error_callback
- future.result()
- File "/opt/noc/local/lib/python2.7/site-packages/tornado/concurrent.py", line 238, in result
- raise_exc_info(self._exc_info)
- File "<string>", line 3, in raise_exc_info
- StreamClosedError: Stream is closed
- 2017-04-27 13:44:29,643 [script] [Cisco.IOS.get_config|192.168.110.56] [ssh] Closing IOLoop
- 2017-04-27 13:44:29,693 [noc.lib.debug] UNHANDLED EXCEPTION (2017-04-27 13:44:29.644311)
- BRANCH: feature/microservices TIP: 832fe316629a
- PROCESS: ./commands/script.py
- ERROR FINGERPRINT: 90c09177-9ed2-5979-bd36-f5fdd980b553
- WORKING DIRECTORY: /opt/noc
- EXCEPTION: <class 'tornado.gen.TimeoutError'> Timeout
- START OF TRACEBACK
- ------------------------------------------------------------------------
- File: core/script/cli/base.py (Line: 262)
- Function: read_until_prompt
- 255 if not connect_retries:
- 256 raise tornado.iostream.StreamClosedError()
- 257 continue
- 258 else:
- 259 raise tornado.iostream.StreamClosedError()
- 260 except tornado.gen.TimeoutError:
- 261 self.logger.info("Timeout error")
- 262 ==> raise tornado.gen.TimeoutError("Timeout")
- 263 self.logger.debug("Received: %r", r)
- 264 # Clean input
- 265 if self.buffer.find(
- 266 "\x1b",
- 267 -self.MATCH_MISSED_CONTROL_TAIL) != -1:
- 268 self.buffer = self.cleaned_input(self.buffer + r)
- Variables:
- f = <tornado.concurrent.Future object at 0x7f6338031090>
- handler =
- <bound method SSHCLI.on_unprivileged_prompt of <noc.core.script.cli.ssh.SSHCLI object at 0x7f63262a0810>>
- self = <noc.core.script.cli.ssh.SSHCLI object at 0x7f63262a0810>
- rx = <_sre.SRE_Pattern object at 0x7f6326248570>
- connect_retries = 3
- r = None
- offset = 0
- match = <_sre.SRE_Match object at 0x7f6325feb030>
- matched = 'CC\n=== RTU Switch - Catalyst 2960 EQ.88754 ===\n\n'
- ------------------------------------------------------------------------
- File: local/lib/python2.7/site-packages/tornado/gen.py (Line: 1063)
- Function: run
- 1056 except Exception:
- 1057 self.had_exception = True
- 1058 exc_info = sys.exc_info()
- 1059 future = None
- 1060
- 1061 if exc_info is not None:
- 1062 try:
- 1063 ==> yielded = self.gen.throw(*exc_info)
- 1064 finally:
- 1065 # Break up a reference to itself
- 1066 # for faster GC on CPython.
- 1067 exc_info = None
- 1068 else:
- 1069 yielded = self.gen.send(value)
- Variables:
- exc_info = None
- self = <tornado.gen.Runner object at 0x7f6338028fd0>
- future = None
- orig_stack_contexts = ((), None)
- ------------------------------------------------------------------------
- File: local/lib/python2.7/site-packages/tornado/concurrent.py (Line: 238)
- Function: result
- 231 before the `Future` is done, so the ``timeout`` is never used.
- 232 """
- 233 self._clear_tb_log()
- 234 if self._result is not None:
- 235 return self._result
- 236 if self._exc_info is not None:
- 237 try:
- 238 ==> raise_exc_info(self._exc_info)
- 239 finally:
- 240 self = None
- 241 self._check_done()
- 242 return self._result
- 243
- 244 def exception(self, timeout=None):
- Variables:
- self = None
- timeout = None
- ------------------------------------------------------------------------
- File: local/lib/python2.7/site-packages/tornado/gen.py (Line: 1055)
- Function: run
- 1048 return
- 1049 self.future = None
- 1050 try:
- 1051 orig_stack_contexts = stack_context._state.contexts
- 1052 exc_info = None
- 1053
- 1054 try:
- 1055 ==> value = future.result()
- 1056 except Exception:
- 1057 self.had_exception = True
- 1058 exc_info = sys.exc_info()
- 1059 future = None
- 1060
- 1061 if exc_info is not None:
- Variables:
- exc_info = None
- self = <tornado.gen.Runner object at 0x7f632625b350>
- future = None
- orig_stack_contexts = ((), None)
- ------------------------------------------------------------------------
- File: core/script/cli/base.py (Line: 185)
- Function: submit
- 178 self.error = self.CLIError("Connection refused")
- 179 raise tornado.gen.Return(None)
- 180 self.logger.debug("Connected")
- 181 yield self.iostream.startup()
- 182 # Perform all necessary login procedures
- 183 if not self.is_started:
- 184 self.on_start()
- 185 ==> self.motd = yield self.read_until_prompt()
- 186 self.script.set_motd(self.motd)
- 187 self.is_started = True
- 188 # Send command
- 189 # @todo: encode to object's encoding
- 190 self.send(self.command)
- 191 parser = parser or self.read_until_prompt
- Variables:
- self = <noc.core.script.cli.ssh.SSHCLI object at 0x7f63262a0810>
- parser =
- <bound method SSHCLI.read_until_prompt of <noc.core.script.cli.ssh.SSHCLI object at 0x7f63262a0810>>
- address = (u'192.168.110.56', 22)
- ------------------------------------------------------------------------
- File: local/lib/python2.7/site-packages/tornado/gen.py (Line: 1063)
- Function: run
- 1056 except Exception:
- 1057 self.had_exception = True
- 1058 exc_info = sys.exc_info()
- 1059 future = None
- 1060
- 1061 if exc_info is not None:
- 1062 try:
- 1063 ==> yielded = self.gen.throw(*exc_info)
- 1064 finally:
- 1065 # Break up a reference to itself
- 1066 # for faster GC on CPython.
- 1067 exc_info = None
- 1068 else:
- 1069 yielded = self.gen.send(value)
- Variables:
- exc_info = None
- self = <tornado.gen.Runner object at 0x7f632625b350>
- future = None
- orig_stack_contexts = ((), None)
- ------------------------------------------------------------------------
- File: local/lib/python2.7/site-packages/tornado/concurrent.py (Line: 238)
- Function: result
- 231 before the `Future` is done, so the ``timeout`` is never used.
- 232 """
- 233 self._clear_tb_log()
- 234 if self._result is not None:
- 235 return self._result
- 236 if self._exc_info is not None:
- 237 try:
- 238 ==> raise_exc_info(self._exc_info)
- 239 finally:
- 240 self = None
- 241 self._check_done()
- 242 return self._result
- 243
- 244 def exception(self, timeout=None):
- Variables:
- self = None
- timeout = None
- ------------------------------------------------------------------------
- File: local/lib/python2.7/site-packages/tornado/ioloop.py (Line: 458)
- Function: run_sync
- 451 if timeout is not None:
- 452 timeout_handle = self.add_timeout(self.time() + timeout, self.stop)
- 453 self.start()
- 454 if timeout is not None:
- 455 self.remove_timeout(timeout_handle)
- 456 if not future_cell[0].done():
- 457 raise TimeoutError('Operation timed out after %s seconds' % timeout)
- 458 ==> return future_cell[0].result()
- 459
- 460 def time(self):
- 461 """Returns the current time according to the `IOLoop`'s clock.
- 462
- 463 The return value is a floating-point number relative to an
- 464 unspecified time in the past.
- Variables:
- self = <tornado.platform.epoll.EPollIOLoop object at 0x7f632625b8d0>
- run = <function run at 0x7f6326267ed8>
- func = <functools.partial object at 0x7f63262ad3c0>
- timeout = None
- future_cell = [<tornado.concurrent.Future object at 0x7f632625b650>]
- ------------------------------------------------------------------------
- File: core/script/cli/base.py (Line: 158)
- Function: execute
- 151 if obj_parser:
- 152 parser = functools.partial(
- 153 self.parse_object_stream,
- 154 obj_parser, cmd_next, cmd_stop
- 155 )
- 156 else:
- 157 parser = self.read_until_prompt
- 158 ==> self.ioloop.run_sync(functools.partial(self.submit, parser))
- 159 if self.error:
- 160 raise self.error
- 161 else:
- 162 return self.result
- 163
- 164 @tornado.gen.coroutine
- Variables:
- cmd = 'terminal length 0\n'
- obj_parser = None
- self = <noc.core.script.cli.ssh.SSHCLI object at 0x7f63262a0810>
- parser =
- <bound method SSHCLI.read_until_prompt of <noc.core.script.cli.ssh.SSHCLI object at 0x7f63262a0810>>
- cmd_stop = None
- cmd_next = None
- ------------------------------------------------------------------------
- File: core/script/base.py (Line: 657)
- Function: cli
- 650 r = self.root.cli_cache.get(cmd)
- 651 if r is not None:
- 652 self.logger.debug("Use cached result")
- 653 return format_result(r)
- 654 command_submit = command_submit or self.profile.command_submit
- 655 stream = self.get_cli_stream()
- 656 r = stream.execute(cmd + command_submit, obj_parser=obj_parser,
- 657 ==> cmd_next=cmd_next, cmd_stop=cmd_stop)
- 658 if isinstance(r, basestring):
- 659 if self.beef:
- 660 self.beef.set_cli(cmd, r)
- 661 # Check for syntax errors
- 662 if not ignore_errors:
- 663 # Check for syntax error
- Variables:
- command_submit = '\n'
- format_result = <function format_result at 0x7f632625d848>
- nowait = False
- stream = <noc.core.script.cli.ssh.SSHCLI object at 0x7f63262a0810>
- cached = False
- obj_parser = None
- bulk_lines = None
- cmd = 'terminal length 0'
- cmd_stop = None
- cmd_next = None
- file = None
- list_re = None
- ignore_errors = True
- self = <noc.sa.profiles.Cisco.IOS.get_config.Script object at 0x7f632627cc50>
- ------------------------------------------------------------------------
- File: core/script/base.py (Line: 722)
- Function: get_cli_stream
- 715 # @todo: Move to CLI
- 716 if self.to_disable_pager:
- 717 self.logger.debug("Disable paging")
- 718 self.to_disable_pager = False
- 719 if isinstance(self.profile.command_disable_pager, basestring):
- 720 self.cli(
- 721 self.profile.command_disable_pager,
- 722 ==> ignore_errors=True
- 723 )
- 724 elif isinstance(self.profile.command_disable_pager, list):
- 725 for cmd in self.profile.command_disable_pager:
- 726 self.cli(cmd, ignore_errors=True)
- 727 else:
- 728 raise self.UnexpectedResultError
- Variables:
- self = <noc.sa.profiles.Cisco.IOS.get_config.Script object at 0x7f632627cc50>
- protocol = 'ssh'
- ------------------------------------------------------------------------
- File: core/script/base.py (Line: 655)
- Function: cli
- 648 return format_result(f.read())
- 649 if cached:
- 650 r = self.root.cli_cache.get(cmd)
- 651 if r is not None:
- 652 self.logger.debug("Use cached result")
- 653 return format_result(r)
- 654 command_submit = command_submit or self.profile.command_submit
- 655 ==> stream = self.get_cli_stream()
- 656 r = stream.execute(cmd + command_submit, obj_parser=obj_parser,
- 657 cmd_next=cmd_next, cmd_stop=cmd_stop)
- 658 if isinstance(r, basestring):
- 659 if self.beef:
- 660 self.beef.set_cli(cmd, r)
- 661 # Check for syntax errors
- Variables:
- command_submit = '\n'
- format_result = <function format_result at 0x7f63262926e0>
- nowait = False
- cached = False
- obj_parser = None
- bulk_lines = None
- cmd = 'show running-config'
- cmd_stop = None
- cmd_next = None
- file = None
- list_re = None
- ignore_errors = False
- self = <noc.sa.profiles.Cisco.IOS.get_config.Script object at 0x7f632627cc50>
- ------------------------------------------------------------------------
- File: sa/profiles/Cisco/IOS/get_config.py (Line: 19)
- Function: execute
- 12
- 13
- 14 class Script(BaseScript):
- 15 name = "Cisco.IOS.get_config"
- 16 interface = IGetConfig
- 17
- 18 def execute(self):
- 19 ==> config = self.cli("show running-config")
- 20 config = self.strip_first_lines(config, 3)
- 21 return self.cleaned_config(config)
- Variables:
- self = <noc.sa.profiles.Cisco.IOS.get_config.Script object at 0x7f632627cc50>
- ------------------------------------------------------------------------
- File: core/script/base.py (Line: 216)
- Function: run
- 209 self.logger.info("Using cached result")
- 210 cache_hit = True
- 211 except KeyError:
- 212 pass
- 213 # Execute script
- 214 if not cache_hit:
- 215 try:
- 216 ==> result = self.execute(**self.args)
- 217 if self.cache and self.parent and result:
- 218 self.logger.info("Caching result")
- 219 self.set_cache(self.name, self.args, result)
- 220 finally:
- 221 if not self.parent:
- 222 # Close SNMP socket when necessary
- Variables:
- cache_hit = False
- self = <noc.sa.profiles.Cisco.IOS.get_config.Script object at 0x7f632627cc50>
- ------------------------------------------------------------------------
- File: commands/script.py (Line: 119)
- Function: handle
- 112 capabilities=caps,
- 113 args=args,
- 114 version=version,
- 115 timeout=3600,
- 116 name=script,
- 117 collect_beef=bool(beef)
- 118 )
- 119 ==> result = scr.run()
- 120 if pretty:
- 121 pprint.pprint(result)
- 122 elif yaml:
- 123 import yaml
- 124 import sys
- 125 yaml.dump(result, sys.stdout)
- Variables:
- obj = <ManagedObject: Cisco Catalyst 2960XR - RTU Switch (EQ.88754)>
- beef = None
- service = <__main__.ServiceStub object at 0x7f632627ced0>
- script = u'Cisco.IOS.get_config'
- script_class = <class 'noc.sa.profiles.Cisco.IOS.get_config.Script'>
- self = <__main__.Command object at 0x7f6336045f90>
- args = {}
- use_snmp = True
- caps =
- {u'DB | Interfaces': 31,
- u'Network | CDP': True,
- u'Network | IPv6': True,
- u'Network | LLDP': True,
- u'Network | STP': True,
- u'SNMP': True,
- u'SNMP | Bulk': True,
- u'SNMP | IF-MIB': True,
- u'SNMP | IF-MIB | HC': True,
- u'SNMP | v1': True,
- u'SNMP | v2c': True,
- u'SNMP | v3': False}
- yaml = False
- object_name = ['Cisco Catalyst 2960XR - RTU Switch (EQ.88754)']
- version = {'platform': u'C2960X', 'version': u'15.0(2)EX5', 'vendor': u'Cisco'}
- arguments = []
- pretty = True
- v =
- Version(profile=u'Cisco.IOS', vendor=u'Cisco', platform=u'C2960X', version=u'15.0(2)EX5')
- credentials =
- {'address': u'192.168.110.56',
- 'cli_port': 22,
- 'cli_protocol': 'ssh',
- 'password': u'hfywbl22',
- 'path': None,
- 'snmp_ro': u'snss-iskranet',
- 'snmp_version': 'v2c',
- 'super_password': u'c2960t',
- 'user': u'rancid'}
- config = 'etc/noc.yml'
- options = {}
- scr = <noc.sa.profiles.Cisco.IOS.get_config.Script object at 0x7f632627cc50>
- ------------------------------------------------------------------------
- File: core/management/base.py (Line: 55)
- Function: run_from_argv
- 48 options = parser.parse_args(argv)
- 49 cmd_options = vars(options)
- 50 args = cmd_options.pop("args", ())
- 51 loglevel = cmd_options.pop("loglevel")
- 52 if loglevel:
- 53 self.setup_logging(loglevel)
- 54 try:
- 55 ==> return self.handle(*args, **cmd_options) or 0
- 56 except CommandError, why:
- 57 self.stderr.write(str(why))
- 58 self.stderr.write("\n")
- 59 self.stderr.flush()
- 60 return 1
- 61 except Exception:
- Variables:
- args = ()
- loglevel = 'debug'
- self = <__main__.Command object at 0x7f6336045f90>
- parser =
- ArgumentParser(prog='script.py', usage=None, description=None, version=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
- cmd_options =
- {'arguments': [],
- 'beef': None,
- 'config': 'etc/noc.yml',
- 'object_name': ['Cisco Catalyst 2960XR - RTU Switch (EQ.88754)'],
- 'pretty': True,
- 'script': ['get_config'],
- 'use_snmp': True,
- 'yaml': False}
- argv =
- ['--debug',
- '--pretty',
- 'get_config',
- 'Cisco Catalyst 2960XR - RTU Switch (EQ.88754)']
- options =
- Namespace(arguments=[], beef=None, config='etc/noc.yml', object_name=['Cisco Catalyst 2960XR - RTU Switch (EQ.88754)'], pretty=True, script=['get_config'], use_snmp=True, yaml=False)
- ------------------------------------------------------------------------
- END OF TRACEBACK
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement