# Path: mozz/location.py
# class Base(object):
# class Register(Base):
# class Memory(Base):
# class RegOffset(Memory):
# class StackOffset(RegOffset):
# class Absolute(Memory):
# 	def size(self):
# 	def value(self, host):
# 	def set(self, host, data):
# 	def __init__(self, name, size):
# 	def name(self):
# 	def size(self):
# 	def __str__(self):
# 	def value(self, host):
# 	def set(self, host, data):
# 	def value(self, host):
# 	def set(self, host, data):
# 	def __init__(self, name, offset, size):
# 	def size(self):
# 	def addr(self, host):
# 	def __str__(self):
# 	def __init__(self, offset, size, stack_grows_down=True):
# 	def addr(self, host):
# 	def __str__(self):
# 	def __init__(self, addr, size):
# 	def size(self):
# 	def addr(self, host):
# 	def __str__(self):
# def offset(name, offset, n):
# def abs(addr, n):


import os
import struct
import mozz.err
import mozz.log
import mozz.abi.endian
from collections import namedtuple
from mozz.cb import *
from mozz import location
			break # we can only do one mockup per address

		#skips and function mockups have lower precedence than mockups
		if not mockup_handled: 
			for (_, (fn, proto_args, options)) in self.find_addrs(self.function_mockups, addr, host.inferior()):
				if not callable(fn):
					continue

				mockup_handled = True
				self.do_function_mockup(host, addr, fn, proto_args, options, *args, **kwargs)
				break # only one mockup per address

		if not mockup_handled:
			for (_, (jmp, _, options)) in self.find_addrs(self.skip_map, addr, host.inferior()):
				skip_handled = True 
				self.do_jmp(host, jmp, **options)
				break # one skip per address

		self.inc_break_count(addr)
		
		return handled or mockup_handled or skip_handled

	def make_addr_ext_args(self, host, **kwargs):
		locargs = []
		if 'locs' in kwargs:
			for loc in kwargs['locs']:
				if isinstance(loc, str):
					locargs.append(host.inferior().reg(loc))
				elif isinstance(loc, location.Register):
					locargs.append(host.inferior().reg(loc.name()))

# Path: mozz/location.py
# class Base(object):
# class Register(Base):
# class Memory(Base):
# class RegOffset(Memory):
# class StackOffset(RegOffset):
# class Absolute(Memory):
# 	def size(self):
# 	def value(self, host):
# 	def set(self, host, data):
# 	def __init__(self, name, size):
# 	def name(self):
# 	def size(self):
# 	def __str__(self):
# 	def value(self, host):
# 	def set(self, host, data):
# 	def value(self, host):
# 	def set(self, host, data):
# 	def __init__(self, name, offset, size):
# 	def size(self):
# 	def addr(self, host):
# 	def __str__(self):
# 	def __init__(self, offset, size, stack_grows_down=True):
# 	def addr(self, host):
# 	def __str__(self):
# 	def __init__(self, addr, size):
# 	def size(self):
# 	def addr(self, host):
# 	def __str__(self):
# def offset(name, offset, n):
# def abs(addr, n):


# Path: mozz/session.py
import os
import struct
import mozz.err
import mozz.log
import mozz.abi.endian
from collections import namedtuple
from mozz.cb import *
from mozz import location

			break # we can only do one mockup per address

		#skips and function mockups have lower precedence than mockups
		if not mockup_handled: 
			for (_, (fn, proto_args, options)) in self.find_addrs(self.function_mockups, addr, host.inferior()):
				if not callable(fn):
					continue

				mockup_handled = True
				self.do_function_mockup(host, addr, fn, proto_args, options, *args, **kwargs)
				break # only one mockup per address

		if not mockup_handled:
			for (_, (jmp, _, options)) in self.find_addrs(self.skip_map, addr, host.inferior()):
				skip_handled = True 
				self.do_jmp(host, jmp, **options)
				break # one skip per address

		self.inc_break_count(addr)
		
		return handled or mockup_handled or skip_handled

	def make_addr_ext_args(self, host, **kwargs):
		locargs = []
		if 'locs' in kwargs:
			for loc in kwargs['locs']:
				if isinstance(loc, str):
					locargs.append(host.inferior().reg(loc))
				elif isinstance(loc, location.Register):
					locargs.append(host.inferior().reg(loc.name()))

				elif isinstance(loc, location.RegOffset):