From 28a5c1a51565a9c30c82290eb420e9854d588882 Mon Sep 17 00:00:00 2001 From: Andrew Spielberg Date: Tue, 23 Feb 2021 14:38:29 -0500 Subject: [PATCH 1/2] start of physics with MPM --- tensorflow_graphics/physics/CMakeLists.txt | 55 + tensorflow_graphics/physics/README.md | 17 + tensorflow_graphics/physics/arm.py | 377 +++ .../physics/data/images/comparison.jpg | Bin 0 -> 279153 bytes .../physics/demos/accuracy_collision_3d.py | 110 + .../physics/demos/arm_3d_v3.py | 238 ++ .../physics/demos/basketball.py | 98 + tensorflow_graphics/physics/demos/bridge.py | 116 + .../physics/demos/collision_2d.py | 102 + .../physics/demos/collision_3d.py | 119 + .../physics/demos/collision_grad_2d.py | 128 ++ .../physics/demos/collision_grad_3d.py | 144 ++ .../physics/demos/collision_mass.py | 108 + .../physics/demos/crawler_3d.py | 288 +++ tensorflow_graphics/physics/demos/export.py | 39 + .../physics/demos/finger/__init__.py | 8 + .../physics/demos/finger/finger_env.py | 143 ++ .../physics/demos/finger/finger_sim.py | 183 ++ .../physics/demos/finger_plot.py | 225 ++ tensorflow_graphics/physics/demos/model.py | 52 + .../physics/demos/multireach.py | 223 ++ tensorflow_graphics/physics/demos/rolling.py | 114 + .../physics/demos/rolling_boundary.py | 259 +++ .../physics/demos/rotating_muscle.py | 158 ++ .../physics/demos/test_finger.py | 3 + .../physics/demos/test_walker.py | 3 + .../physics/demos/visualize_training_curve.py | 13 + .../physics/demos/walker/__init__.py | 8 + .../physics/demos/walker/walker_env.py | 107 + .../physics/demos/walker/walker_sim.py | 175 ++ .../physics/demos/walker_2d.py | 219 ++ .../physics/demos/walker_3d.py | 293 +++ tensorflow_graphics/physics/docs/API.rst | 76 + tensorflow_graphics/physics/docs/README.md | 0 .../physics/docs/_static/.gitkeep | 0 tensorflow_graphics/physics/docs/conf.py | 177 ++ tensorflow_graphics/physics/docs/index.rst | 10 + .../physics/docs/installation.rst | 21 + tensorflow_graphics/physics/docs/make.bat | 36 + .../physics/external/partio/CMakeLists.txt | 39 + .../physics/external/partio/include/Partio.h | 275 +++ .../external/partio/include/PartioAttribute.h | 116 + .../external/partio/include/PartioIterator.h | 222 ++ .../physics/external/partio/src/Partio.h | 275 +++ .../external/partio/src/PartioAttribute.h | 116 + .../external/partio/src/PartioIterator.h | 222 ++ .../physics/external/partio/src/core/KdTree.h | 432 ++++ .../physics/external/partio/src/core/Mutex.h | 136 ++ .../external/partio/src/core/Particle.cpp | 125 + .../partio/src/core/ParticleCaching.cpp | 112 + .../partio/src/core/ParticleCaching.h | 44 + .../partio/src/core/ParticleHeaders.cpp | 190 ++ .../partio/src/core/ParticleHeaders.h | 91 + .../partio/src/core/ParticleSimple.cpp | 344 +++ .../external/partio/src/core/ParticleSimple.h | 109 + .../src/core/ParticleSimpleInterleave.cpp | 344 +++ .../src/core/ParticleSimpleInterleave.h | 114 + .../physics/external/partio/src/io/BGEO.cpp | 197 ++ .../external/partio/src/io/ParticleIO.cpp | 140 ++ .../external/partio/src/io/PartioEndian.h | 129 ++ .../physics/external/partio/src/io/ZIP.cpp | 619 +++++ .../physics/external/partio/src/io/ZIP.h | 87 + .../external/partio/src/io/half2float.h | 2048 +++++++++++++++++ .../physics/external/partio/src/io/pdb.h | 162 ++ .../physics/external/partio/src/io/readers.h | 65 + tensorflow_graphics/physics/memo.py | 51 + tensorflow_graphics/physics/mpm3d.py | 66 + tensorflow_graphics/physics/simulation.py | 874 +++++++ tensorflow_graphics/physics/src/backward.cu | 565 +++++ tensorflow_graphics/physics/src/config.h | 1 + tensorflow_graphics/physics/src/forward.cu | 366 +++ tensorflow_graphics/physics/src/g2pop.cc | 199 ++ tensorflow_graphics/physics/src/kernels.h | 28 + tensorflow_graphics/physics/src/linalg.h | 233 ++ tensorflow_graphics/physics/src/misc.cu | 142 ++ tensorflow_graphics/physics/src/mpmgradop.cc | 188 ++ tensorflow_graphics/physics/src/mpmop.cc | 295 +++ tensorflow_graphics/physics/src/p2gop.cc | 264 +++ tensorflow_graphics/physics/src/simulator.cpp | 804 +++++++ tensorflow_graphics/physics/src/state.cuh | 473 ++++ tensorflow_graphics/physics/src/state_base.h | 63 + tensorflow_graphics/physics/src/svd.cuh | 1084 +++++++++ tensorflow_graphics/physics/test_tf_speed.py | 48 + tensorflow_graphics/physics/tests_2d.py | 450 ++++ tensorflow_graphics/physics/tests_3d.py | 361 +++ .../physics/time_integration.py | 513 +++++ tensorflow_graphics/physics/vector_math.py | 383 +++ 87 files changed, 18649 insertions(+) create mode 100644 tensorflow_graphics/physics/CMakeLists.txt create mode 100644 tensorflow_graphics/physics/README.md create mode 100644 tensorflow_graphics/physics/arm.py create mode 100644 tensorflow_graphics/physics/data/images/comparison.jpg create mode 100644 tensorflow_graphics/physics/demos/accuracy_collision_3d.py create mode 100644 tensorflow_graphics/physics/demos/arm_3d_v3.py create mode 100644 tensorflow_graphics/physics/demos/basketball.py create mode 100644 tensorflow_graphics/physics/demos/bridge.py create mode 100644 tensorflow_graphics/physics/demos/collision_2d.py create mode 100644 tensorflow_graphics/physics/demos/collision_3d.py create mode 100644 tensorflow_graphics/physics/demos/collision_grad_2d.py create mode 100644 tensorflow_graphics/physics/demos/collision_grad_3d.py create mode 100644 tensorflow_graphics/physics/demos/collision_mass.py create mode 100644 tensorflow_graphics/physics/demos/crawler_3d.py create mode 100644 tensorflow_graphics/physics/demos/export.py create mode 100644 tensorflow_graphics/physics/demos/finger/__init__.py create mode 100644 tensorflow_graphics/physics/demos/finger/finger_env.py create mode 100644 tensorflow_graphics/physics/demos/finger/finger_sim.py create mode 100644 tensorflow_graphics/physics/demos/finger_plot.py create mode 100644 tensorflow_graphics/physics/demos/model.py create mode 100644 tensorflow_graphics/physics/demos/multireach.py create mode 100644 tensorflow_graphics/physics/demos/rolling.py create mode 100644 tensorflow_graphics/physics/demos/rolling_boundary.py create mode 100644 tensorflow_graphics/physics/demos/rotating_muscle.py create mode 100644 tensorflow_graphics/physics/demos/test_finger.py create mode 100644 tensorflow_graphics/physics/demos/test_walker.py create mode 100644 tensorflow_graphics/physics/demos/visualize_training_curve.py create mode 100644 tensorflow_graphics/physics/demos/walker/__init__.py create mode 100644 tensorflow_graphics/physics/demos/walker/walker_env.py create mode 100644 tensorflow_graphics/physics/demos/walker/walker_sim.py create mode 100644 tensorflow_graphics/physics/demos/walker_2d.py create mode 100644 tensorflow_graphics/physics/demos/walker_3d.py create mode 100644 tensorflow_graphics/physics/docs/API.rst create mode 100644 tensorflow_graphics/physics/docs/README.md create mode 100644 tensorflow_graphics/physics/docs/_static/.gitkeep create mode 100644 tensorflow_graphics/physics/docs/conf.py create mode 100644 tensorflow_graphics/physics/docs/index.rst create mode 100644 tensorflow_graphics/physics/docs/installation.rst create mode 100644 tensorflow_graphics/physics/docs/make.bat create mode 100644 tensorflow_graphics/physics/external/partio/CMakeLists.txt create mode 100644 tensorflow_graphics/physics/external/partio/include/Partio.h create mode 100644 tensorflow_graphics/physics/external/partio/include/PartioAttribute.h create mode 100644 tensorflow_graphics/physics/external/partio/include/PartioIterator.h create mode 100644 tensorflow_graphics/physics/external/partio/src/Partio.h create mode 100644 tensorflow_graphics/physics/external/partio/src/PartioAttribute.h create mode 100644 tensorflow_graphics/physics/external/partio/src/PartioIterator.h create mode 100644 tensorflow_graphics/physics/external/partio/src/core/KdTree.h create mode 100644 tensorflow_graphics/physics/external/partio/src/core/Mutex.h create mode 100644 tensorflow_graphics/physics/external/partio/src/core/Particle.cpp create mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.cpp create mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.h create mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.cpp create mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.h create mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.cpp create mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.h create mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.cpp create mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.h create mode 100644 tensorflow_graphics/physics/external/partio/src/io/BGEO.cpp create mode 100644 tensorflow_graphics/physics/external/partio/src/io/ParticleIO.cpp create mode 100644 tensorflow_graphics/physics/external/partio/src/io/PartioEndian.h create mode 100644 tensorflow_graphics/physics/external/partio/src/io/ZIP.cpp create mode 100644 tensorflow_graphics/physics/external/partio/src/io/ZIP.h create mode 100644 tensorflow_graphics/physics/external/partio/src/io/half2float.h create mode 100644 tensorflow_graphics/physics/external/partio/src/io/pdb.h create mode 100644 tensorflow_graphics/physics/external/partio/src/io/readers.h create mode 100644 tensorflow_graphics/physics/memo.py create mode 100644 tensorflow_graphics/physics/mpm3d.py create mode 100644 tensorflow_graphics/physics/simulation.py create mode 100644 tensorflow_graphics/physics/src/backward.cu create mode 100644 tensorflow_graphics/physics/src/config.h create mode 100644 tensorflow_graphics/physics/src/forward.cu create mode 100644 tensorflow_graphics/physics/src/g2pop.cc create mode 100644 tensorflow_graphics/physics/src/kernels.h create mode 100644 tensorflow_graphics/physics/src/linalg.h create mode 100644 tensorflow_graphics/physics/src/misc.cu create mode 100644 tensorflow_graphics/physics/src/mpmgradop.cc create mode 100644 tensorflow_graphics/physics/src/mpmop.cc create mode 100644 tensorflow_graphics/physics/src/p2gop.cc create mode 100644 tensorflow_graphics/physics/src/simulator.cpp create mode 100644 tensorflow_graphics/physics/src/state.cuh create mode 100644 tensorflow_graphics/physics/src/state_base.h create mode 100644 tensorflow_graphics/physics/src/svd.cuh create mode 100644 tensorflow_graphics/physics/test_tf_speed.py create mode 100644 tensorflow_graphics/physics/tests_2d.py create mode 100644 tensorflow_graphics/physics/tests_3d.py create mode 100644 tensorflow_graphics/physics/time_integration.py create mode 100644 tensorflow_graphics/physics/vector_math.py diff --git a/tensorflow_graphics/physics/CMakeLists.txt b/tensorflow_graphics/physics/CMakeLists.txt new file mode 100644 index 000000000..a0359538b --- /dev/null +++ b/tensorflow_graphics/physics/CMakeLists.txt @@ -0,0 +1,55 @@ +set(TAICHI_PROJECT_NAME "differentiable_mpm") + +file(GLOB_RECURSE PROJECT_SOURCES "src/*.cpp" "src/*.h" "src/*/*.h" "src/*/*.cpp" "src/*.cuh") +file(GLOB_RECURSE PROJECT_OP_SOURCES "src/*.cc") +file(GLOB_RECURSE PROJECT_SOURCES_CUDA "src/*.cu") + +set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") + +set(TAICHI_PROJECT_LIBRARIES ${TAICHI_PROJECT_LIBRARIES} ${TAICHI_PROJECT_NAME} PARENT_SCOPE) + +execute_process(COMMAND ${PYTHON_EXECUTABLE} -c + "import tensorflow as tf; import sys;\ + sys.stdout.write(tf.sysconfig.get_include())" + OUTPUT_VARIABLE TF_INCLUDE_DIRS) + +execute_process(COMMAND ${PYTHON_EXECUTABLE} -c + "import tensorflow as tf; import sys;\ + sys.stdout.write(tf.sysconfig.get_lib())" + OUTPUT_VARIABLE TF_LIBRARY_DIR) + + + +message("Including tensorflow include dir: ${TF_INCLUDE_DIRS}") +message(" tensorflow library dir: ${TF_LIBRARY_DIR}") +include_directories(${TF_INCLUDE_DIRS}) + +include_directories(external/partio/include) + +if (NOT $ENV{CUDA_ARCH}) + set(${CUDA_ARCH} 61) +else() + set(${CUDA_ARCH} $ENV{CUDA_ARCH}) +endif() + +message("CUDA Arch: ${CUDA_ARCH}") +find_package(CUDA 8.0 REQUIRED) +set(CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER}) +#set(CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS} ${CUDA_NVCC_FLAGS} -arch=compute_$ENV{CUDA_ARCH} -code=sm_$ENV{CUDA_ARCH} -Xcompiler "-fPIC" --maxrregcount 64 --use_fast_math --ptxas-options=-allow-expensive-optimizations=true,-O3) +set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -Xcompiler "-fPIC" --use_fast_math --ptxas-options=-allow-expensive-optimizations=true,-O3) +set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -D__CUDA_ARCH___=${CUDA_ARCH}0 -std=c++14) +message("NVCC Flags: ${CUDA_NVCC_FLAGS}") +set(CUDA_PROPAGATE_HOST_FLAGS ON) +cuda_add_library(cudmpm SHARED ${PROJECT_SOURCES_CUDA}) + +add_subdirectory(external/partio) + +add_library(taichi_tf_${TAICHI_PROJECT_NAME} SHARED ${PROJECT_OP_SOURCES}) +add_library(taichi_${TAICHI_PROJECT_NAME} SHARED ${PROJECT_SOURCES}) + +target_link_libraries(taichi_${TAICHI_PROJECT_NAME} ${CORE_LIBRARY_NAME} ${SHARED_LIBS} partio cudmpm) +target_link_libraries(taichi_tf_${TAICHI_PROJECT_NAME} cudmpm ${TF_LIBRARY_DIR}/libtensorflow_framework.so) +find_package(ZLIB) +if (ZLIB_FOUND) + target_link_libraries(taichi_${TAICHI_PROJECT_NAME} z) +endif(ZLIB_FOUND) diff --git a/tensorflow_graphics/physics/README.md b/tensorflow_graphics/physics/README.md new file mode 100644 index 000000000..6036fbbf1 --- /dev/null +++ b/tensorflow_graphics/physics/README.md @@ -0,0 +1,17 @@ +# Differentiable MPM for TensorFlow / PyTorch +## Installing the CUDA solver + +- Install `taichi` by executing: + ``` + wget https://raw.githubusercontent.com/yuanming-hu/taichi/master/install.py + python3 install.py + ``` +- Make sure you are using `gcc-6`. If not, `export CXX=g++-6 CC=gcc-6`. +- Put this repo in `taichi/projects/` +- ```ti build``` +- Email Yuanming when you run into any problems! + + +## Discretization Cheatsheet +(Assuming quadratic B-spline) + diff --git a/tensorflow_graphics/physics/arm.py b/tensorflow_graphics/physics/arm.py new file mode 100644 index 000000000..a2e28589f --- /dev/null +++ b/tensorflow_graphics/physics/arm.py @@ -0,0 +1,377 @@ +import random +import os +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import IPython +import copy + +import pygmo as pg +import pygmo_plugins_nonfree as ppnf + +np.random.seed(326) + +def flatten_vectors(vectors): + return tf.concat([tf.squeeze(ly.flatten(vector)) for vector in vectors], 0) + +lr = 1.0 + + +goal_range = 0.0 +batch_size = 1 +actuation_strength = 8 + + +use_pygmo = True + + +num_steps = 800 + +iter_ = 0 + +# Finger +num_links = 2 +num_acts = int(num_steps // num_links) #TBH this is just to keep the number of variables tame +sample_density = int(20 // (np.sqrt(num_links))) +group_num_particles = sample_density**2 +group_sizes = [] +group_offsets = [] +actuations = [] +group_size = [(0.5, 2.0 / num_links), (0.5, 2.0 / num_links), (1, 1.0 / num_links)] +for i in range(num_links): + group_offsets += [(1, (group_size[0][1] + group_size[2][1])*i ), (1.5, (group_size[1][1] + group_size[2][1])*i), (1, (group_size[0][1] + group_size[2][1])*i + group_size[0][1] )] + group_sizes += copy.deepcopy(group_size) + actuations += [0 + 3*i, 1 + 3*i] +num_groups = len(group_sizes) + + +head = num_groups - 1 +gravity = (0, 0) + + +num_particles = group_num_particles * num_groups +num_actuators = len(actuations) + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + + +actuation_seq = tf.Variable(1.0 * tf.random.normal(shape=(1, num_acts, num_actuators), dtype=np.float32), trainable=True) + +def step_callback(dec_vec): + pass + + + + +def main(sess): + t = time.time() + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + # Define your controller here + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + accel = tf.reduce_sum(input_tensor=mask * state.acceleration, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + controller_inputs.append(goal) + controller_inputs.append(accel) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, 8 * num_groups), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, 8 * num_groups, 1) + + actuation = tf.expand_dims(actuation_seq[0, (state.step_count - 1) // (num_steps // num_acts), :], 0) + debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation, 'acceleration': state.acceleration, 'velocity' : state.velocity} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + # First PK stress here + act = make_matrix2d(zeros, zeros, zeros, act) + # Convert to Kirchhoff stress + total_actuation = total_actuation + act + return total_actuation, debug + + res = (30, 30) + bc = get_bounding_box_bc(res) + + + bc[0][:, :, :5] = -1 # Sticky + bc[1][:, :, :5] = 0 # Sticky + + sim = Simulation( + dt=0.0025, + num_particles=num_particles, + grid_res=res, + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess) + print("Building time: {:.4f}s".format(time.time() - t)) + + final_state = sim.initial_state['debug']['controller_inputs'] + final_acceleration = sim.initial_state['debug']['acceleration'] + final_velocity_all = sim.initial_state['debug']['velocity'] + s = head * 8 + + final_position = final_state[:, s:s+2] + final_velocity = final_state[:, s + 2: s + 4] + final_accel = final_state[:, s + 6: s + 8] + gamma = 0.0 + loss_position = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + loss_velocity = tf.reduce_mean(input_tensor=final_velocity_all ** 2) / 10.0 + loss_act = tf.reduce_sum(input_tensor=actuation_seq ** 2.0) / 10000.0 + loss_zero = tf.Variable(0.0, trainable=False) + + #loss_accel = tf.reduce_mean(final_acceleration ** 2.0) / 10000.0 + loss_accel = loss_zero + #IPython.embed() + + + + #acceleration_constraint = tf.reduce_sum(final_acceleration, axis=1) + + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + scale = 0.2 + u = ((x +0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + initial_positions[b].append([u, v]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + youngs_modulus =tf.Variable(10.0 * tf.ones(shape = [1, 1, num_particles], dtype = tf.float32), trainable=True) + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=tf.identity(youngs_modulus)) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + + + + sess.run(tf.compat.v1.global_variables_initializer()) + + sim.set_initial_state(initial_state=initial_state) + + sym_pos = sim.gradients_sym(loss_position, variables=trainables) + sym_vel = sim.gradients_sym(loss_velocity, variables=trainables) + sym_act = sim.gradients_sym(loss_act, variables=trainables) + sym_zero = sim.gradients_sym(loss_zero, variables=trainables) + sym_accel = sim.gradients_sym(loss_accel, variables=trainables) + + + #sym_acc = [sim.gradients_sym(acceleration, variables=trainables) for acceleration in acceleration_constraint] + #sym_acc = tf.map_fn(lambda x : sim.gradients_sym(x, variables=trainables), acceleration_constraint) + #acc_flat = flatten_vectors([final_acceleration]) + #sym_acc = tf.map_fn((lambda x : sim.gradients_sym(x, variables=trainables)), acc_flat) + #IPython.embed() + + sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) + sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) + + sim.add_point_visualization(pos=final_position, color=(1, 0, 0), radius=3) + + + + goal_input = np.array( + [[0.7 + (random.random() - 0.5) * goal_range * 2, + 0.5 + (random.random() - 0.5) * goal_range] for _ in range(batch_size)], + dtype=np.float32) + + + + def eval_sim(loss_tensor, sym_, need_grad=True): + memo = sim.run( + initial_state=initial_state, + num_steps=num_steps, + iteration_feed_dict={goal: goal_input}, + loss=loss_tensor) + if need_grad: + grad = sim.eval_gradients(sym=sym_, memo=memo) + else: + grad = None + return memo.loss, grad, memo + + def flatten_trainables(): + return tf.concat([tf.squeeze(ly.flatten(trainable)) for trainable in trainables], 0) + + + + def assignment_run(xs): + sess.run([trainable.assign(x) for x, trainable in zip(xs, trainables)]) + + + + + + t = time.time() + + #loss_val, grad, memo = eval_sim(loss_position, sym_pos) + + #IPython.embed() + + + #Begin optimization + + + def assignment_helper(x): + assignments = [] + idx = 0 + x = x.astype(np.float32) + for v in trainables: + #first, get count: + var_cnt = tf.size(input=v).eval() + assignments += [v.assign(tf.reshape(x[idx:idx+var_cnt],v.shape))] + idx += var_cnt + sess.run(assignments) + + class RobotProblem: + def __init__(self, use_act): + self.use_act = use_act + + goal_ball = 0.0001 + def fitness(self, x): + assignment_helper(x) + if self.use_act: + loss_act_val, _, _ = eval_sim(loss_act, sym_act, need_grad=False) + else: + loss_act_val, _, _ = eval_sim(loss_zero, sym_zero, need_grad=False) + loss_pos_val, _, _ = eval_sim(loss_position, sym_pos, need_grad=False) + loss_accel_val, _, _ = eval_sim(loss_accel, sym_accel, need_grad=False) + c1, _, memo = eval_sim(loss_velocity, sym_vel, need_grad=False) + global iter_ + sim.visualize(memo, show = False, folder = "arm_log/it{:04d}".format(iter_)) + iter_ += 1 + print('loss pos', loss_pos_val) + print('loss vel', c1) + print('loss accel', loss_accel_val) + #IPython.embed() + return [loss_act_val.astype(np.float64), loss_pos_val.astype(np.float64) - self.goal_ball, c1.astype(np.float64) - self.goal_ball, loss_accel_val.astype(np.float64) - self.goal_ball] + + + def get_nic(self): + return 3 + def get_nec(self): + return 0 + + def gradient(self, x): + assignment_helper(x) + _, grad_position, _ = eval_sim(loss_position, sym_pos) + _, grad_velocity, _ = eval_sim(loss_velocity, sym_vel) + _, grad_accel, _ = eval_sim(loss_accel, sym_accel) + if self.use_act: + _, grad_act, _ = eval_sim(loss_act, sym_act) + else: + _, grad_act, _ = eval_sim(loss_zero, sym_zero) + return np.concatenate([flatten_vectors(grad_act).eval().astype(np.float64), + flatten_vectors(grad_position).eval().astype(np.float64), + flatten_vectors(grad_velocity).eval().astype(np.float64), + flatten_vectors(grad_accel).eval().astype(np.float64)]) + #return flatten_vectors(grad).eval().astype(np.float64) + + def get_bounds(self): + #actuation + lb = [] + ub = [] + acts = trainables[0] + lb += [-1.0 / num_links] * tf.size(input=acts).eval() + ub += [1.0 / num_links] * tf.size(input=acts).eval() + designs = trainables[1] + lb += [3] * tf.size(input=designs).eval() + ub += [40] * tf.size(input=designs).eval() + + return (lb, ub) + + + #IPython.embed() + uda = pg.nlopt("slsqp") + #uda = ppnf.snopt7(screen_output = False, library = "/home/aespielberg/snopt/lib/libsnopt7.so") + algo = pg.algorithm(uda) + #algo.extract(pg.nlopt).local_optimizer = pg.nlopt('lbfgs') + + algo.extract(pg.nlopt).maxeval = 50 + algo.set_verbosity(1) + udp = RobotProblem(False) + bounds = udp.get_bounds() + mean = (np.array(bounds[0]) + np.array(bounds[1])) / 2.0 + num_vars = len(mean) + prob = pg.problem(udp) + pop = pg.population(prob, size = 1) + + #TODO: initialize both parts different here + acts = trainables[0] + designs = trainables[1] + + std_act = np.ones(tf.size(input=acts).eval()) * 0.1 + std_young = np.ones(tf.size(input=designs).eval()) * 0.0 + #IPython.embed() + std = np.concatenate([std_act, std_young]) + #act_part = np.random.normal(scale=0.1, loc=mean, size=(tf.size(acts).eval(),)) + #young_part = 10.0 * tf.size(designs).eval() + + + pop.set_x(0,np.random.normal(scale=std, loc=mean, size=(num_vars,))) + #IPython.embed() + + pop.problem.c_tol = [1e-6] * prob.get_nc() + #pop.problem.c_tol = [1e-4] * prob.get_nc() + pop.problem.f_tol_rel = [100000.0] + #IPython.embed() + pop = algo.evolve(pop) + IPython.embed() + + #IPython.embed() #We need to refactor this for real + old_x = pop.champion_x + assert False + udp = RobotProblem(True) + prob = pg.problem(udp) + pop = pg.population(prob, size = 1) + pop.set_x(0,old_x) + pop.problem.c_tol = [1e-6] * prob.get_nc() + #pop.problem.f_tol = [1e-6] + pop.problem.f_tol_rel = [1e-4] + pop = algo.evolve(pop) + + #now a second time + + + _, _, memo = eval_sim(loss) + sim.visualize(memo) + + + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/data/images/comparison.jpg b/tensorflow_graphics/physics/data/images/comparison.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7f9ae3cef6b93402e6443bff43f1ead3ae8bbe8 GIT binary patch literal 279153 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𝔚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

Bq{?N~4#-02Eg;MR&sV_SoR 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 z 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

!vRgOK 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 1: + velocity_2 = tf.zeros(shape=[batch_size, 3, group_particles], dtype=tf.float32) + velocity = tf.concat([velocity_1, velocity_2], axis=2) + else: + velocity = velocity_1 + + for b in range(batch_size): + for i in range(group_particles): + x, y, z = 0, 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: + x, y, z = random.random(), random.random(), random.random() + position[b, :, i] = ((x * 2 - 1) / 30 + 0.2, + (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) + velocity_delta[b, :, i] = (y - 0.5, -x + 0.5, 0) + + if num_balls > 1: + for i in range(group_particles): + x, y, z = 0, 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: + x, y, z = random.random(), random.random(), random.random() + position[b, :, i + group_particles] = ((x * 2 - 1) / 30 + 0.4, + (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) + + velocity += velocity_delta + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=position, velocity=velocity, deformation_gradient=F) + + if num_balls == 2: + final_position = sim.initial_state.center_of_mass(group_particles, None) + else: + final_position = sim.initial_state.center_of_mass(None, group_particles) + loss = tf.reduce_mean(input_tensor=final_position[:, 0]) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = trainables) + + goal_input = np.array([[0.6, 0.43, 0.4]], dtype=np.float32) + + t = time.time() + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + grad = sim.eval_gradients(sym, memo)[0][0] + grad_gt = dt * steps + print(grad, grad_gt) + print('grad error relative: ', (grad_gt - grad) / grad_gt) + sim.visualize(memo, interval=30, export=False) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/arm_3d_v3.py b/tensorflow_graphics/physics/demos/arm_3d_v3.py new file mode 100644 index 000000000..33f475014 --- /dev/null +++ b/tensorflow_graphics/physics/demos/arm_3d_v3.py @@ -0,0 +1,238 @@ +import sys +sys.path.append('..') + +import random +import os +import numpy as np +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export +import IPython + +lr = 1 +gamma = 0.0 + +sample_density = 15 +group_num_particles = sample_density**3 +goal_pos = np.array([1, 1.17, 1]) +goal_range = np.array([0.6, 0.0, 0.6]) +batch_size = 1 + +actuation_strength = 40 + + +config = 'C' + +act_x = 0.5 +act_y = 1 +act_z = 0.5 + +x = 1 +z = 1 + + +group_offsets = [] +num_links = 3 + +for i in range(num_links): + y = act_y * 2 * i + group_offsets += [(0, y, 0)] + group_offsets += [(0 + act_x, y, 0)] + group_offsets += [(0, y, act_z)] + group_offsets += [(0 + act_x, y, act_z)] + +for i in range(num_links): + group_offsets += [(0, act_y * (2 * i + 1), 0)] + +num_groups = len(group_offsets) + +num_particles = group_num_particles * num_groups + +group_sizes = [(act_x, act_y, act_z)] * 4 * num_links + +for i in range(num_links): + group_sizes += [(1, 1, 1)] + +actuations = list(range(4 * num_links)) +gravity = (0, 0, 0) +head = len(group_offsets) - 1 + +num_particles = group_num_particles * num_groups + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), 9 * len(group_sizes))), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +def main(sess): + t = time.time() + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') + + # Define your controller here + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + controller_inputs.append((goal - goal_pos) / np.maximum(goal_range, 1e-5)) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, 9 * num_groups), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, 9 * num_groups, 1) + # Batch, 6 * num_groups, 1 + intermediate = tf.matmul(W1[None, :, :] + + tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) + # Batch, #actuations, 1 + assert intermediate.shape == (batch_size, len(actuations), 1) + assert intermediate.shape[2] == 1 + intermediate = intermediate[:, :, 0] + # Batch, #actuations + actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength + debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + act = make_matrix3d(zeros, zeros, zeros, zeros, act, zeros, zeros, zeros, zeros) + total_actuation = total_actuation + act + return total_actuation, debug + + res = (60, 90, 60) + bc = get_bounding_box_bc(res) + # stick it to the ground + bc[0][:, :, :5, :] = -1 + + sim = Simulation( + dt=0.0015, + num_particles=num_particles, + grid_res=res, + dx=1.0 / 30, + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess, + E=150) + print("Building time: {:.4f}s".format(time.time() - t)) + + final_state = sim.initial_state['debug']['controller_inputs'] + s = head * 9 + + final_position = final_state[:, s:s+3] + final_velocity = final_state[:, s + 3: s + 6] + loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) + loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) + + loss = loss1 + gamma * loss2 + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + for z in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.9 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + w = ((z + 0.5) / sample_density * group_sizes[i][2] + offset[2] + ) * scale + 0.9 + initial_positions[b].append([u, v, w]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state=initial_state) + + sym = sim.gradients_sym(loss, variables=trainables) + + gx, gy, gz = goal_range + pos_x, pos_y, pos_z = goal_pos + + vis_id = list(range(batch_size)) + random.shuffle(vis_id) + + # Optimization loop + for e in range(100000): + t = time.time() + goal_train = [np.array( + [[pos_x + (random.random() - 0.5) * gx, + pos_y + (random.random() - 0.5) * gy, + pos_z + (random.random() - 0.5) * gz + ] for _ in range(batch_size)], + dtype=np.float32) for __ in range(10)] + print('goal', goal_train) + print('Epoch {:5d}, learning rate {}'.format(e, lr)) + + loss_cal = 0. + print('train...') + for it, goal_input in enumerate(goal_train): + tt = time.time() + memo = sim.run( + initial_state=initial_state, + num_steps=200, + iteration_feed_dict={goal: goal_input}, + loss=loss) + tt = time.time() + grad = sim.eval_gradients(sym=sym, memo=memo) + + for i, g in enumerate(grad): + print(i, np.mean(np.abs(g))) + grad = [np.clip(g, -1, 1) for g in grad] + + + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + sess.run(gradient_descent) + print('Iter {:5d} time {:.3f} loss {}'.format( + it, time.time() - t, memo.loss)) + loss_cal = loss_cal + memo.loss + folder = 'arm3d_demo/{:04d}/'.format(e * len(goal_train) + it) + sim.visualize(memo, batch=random.randrange(batch_size), export=None, + show=True, interval=3, folder=folder) + with open(os.path.join(folder, 'target.txt'), 'w') as f: + goal_input = goal_input[0] + print(goal_input[0], goal_input[1], goal_input[2], file=f) + #exp.export() + print('train loss {}'.format(loss_cal / len(goal_train))) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/basketball.py b/tensorflow_graphics/physics/demos/basketball.py new file mode 100644 index 000000000..af1cce45c --- /dev/null +++ b/tensorflow_graphics/physics/demos/basketball.py @@ -0,0 +1,98 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_bounding_box_bc +from time_integration import UpdatedSimulationState +import tensorflow as tf +import numpy as np +from IPython import embed + + +def main(sess): + batch_size = 1 + gravity = (0, -1) + N = 10 + num_particles = N * N + steps = 150 + dt = 1e-2 + goal_range = 0.15 + res = (30, 30) + bc = get_bounding_box_bc(res) + + lr = 1e-2 + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + m_p=1, + V_p=1, + E = 10, + nu = 0.3, + sess=sess) + position = np.zeros(shape=(batch_size, num_particles, 2)) + + velocity_ph = tf.Variable([0.2, 0.3], trainable = True) + velocity = velocity_ph[None, :, None] + tf.zeros( + shape=[batch_size, 2, num_particles], dtype=tf.float32) + for b in range(batch_size): + for i in range(N): + for j in range(N): + position[b, i * N + j] = ((i * 0.5 + 3) / 30, + (j * 0.5 + 12.75) / 30) + position = np.array(position).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=position, velocity=velocity) + + final_position = sim.initial_state.center_of_mass() + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) + sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = trainables) + + goal_input = np.array([[0.7, 0.3]], dtype=np.float32) + + + for i in range(100): + # if i > 10: + # lr = 1e-1 + # elif i > 20: + # lr = 1e-2 + t = time.time() + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + + + #if i % 1 == 0: + # sim.visualize(memo) + grad = sim.eval_gradients(sym, memo) + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + sess.run(gradient_descent) + print('iter {:5d} time {:.3f} loss {:.4f}'.format( + i, time.time() - t, memo.loss)) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/bridge.py b/tensorflow_graphics/physics/demos/bridge.py new file mode 100644 index 000000000..4ba915e76 --- /dev/null +++ b/tensorflow_graphics/physics/demos/bridge.py @@ -0,0 +1,116 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_bounding_box_bc +from time_integration import UpdatedSimulationState +import tensorflow as tf +import numpy as np +from IPython import embed + +batch_size = 1 +gravity = (0, -1) +N = 10 +group_size = np.array([[10, 20], [10, 20], [90, 10], [10, 10]]) +group_position = np.array([[5, 2.5], [20, 2.5], [2.5, 8.5], [12.5, 12]]) +num_particles = (group_size[:, 0] * group_size[:, 1]).sum() +steps = 200 +dt = 5e-3 +goal_range = 0.15 +res = (30, 30) +bc = get_bounding_box_bc(res) + +lr = 10 + +def main(sess): + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + sess=sess) + + ''' + youngs_modulus = np.ones(shape=(batch_size, num_particles, 1)) + youngs_modulus[:, : 400] = 100 + youngs_modulus[:, 400: -100] = 10 + youngs_modulus[:, -100: ] = 10 + ''' + ym_var = tf.Variable([5.], trainable = True) + ym_1 = tf.constant(100., shape = [1, 1, 400], dtype = tf.float32) + ym_2 = ym_var + tf.zeros(shape = [1, 1, 900], dtype = tf.float32) + ym_3 = tf.constant(10., shape = [1, 1, 100], dtype = tf.float32) + youngs_modulus = tf.concat([ym_1, ym_2, ym_3], axis = 2) + + + velocity = np.zeros(shape = (batch_size, 2, num_particles)) + position = np.zeros(shape = (batch_size, num_particles, 2)) #swap axis later + + for b in range(batch_size): + cnt = 0 + for group, pos in zip(group_size, group_position): + n, m = group + x, y = pos + for i in range(n): + for j in range(m): + position[b][cnt] = ((i * 0.25 + x) / res[0], + (j * 0.25 + y) / res[1]) + cnt += 1 + position = np.swapaxes(position, 1, 2) + + mass = np.ones(shape = (batch_size, 1, num_particles)) + mass[:, :, :400] = 20 + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=position, velocity=velocity, + particle_mass=mass, youngs_modulus=youngs_modulus) + + final_position = sim.initial_state.center_of_mass(-100, None) + loss = tf.reduce_sum(input_tensor=tf.abs(final_position - goal)[:, 1]) + # loss = tf.reduce_sum(tf.abs(final_position - goal)) + sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) + sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = trainables) + + goal_input = np.array( + [[0.5, 0.4]], + dtype=np.float32) + + log = tf.compat.v1.Print(ym_var, [ym_var], 'youngs_modulus:') + + for i in range(1000000): + t = time.time() + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + grad = sim.eval_gradients(sym, memo) + #if i % 5 == 0: # True: # memo.loss < 0.01: + sim.visualize(memo, interval = 2, show=True) + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + sess.run(gradient_descent) + print('iter {:5d} time {:.3f} loss {:.4f}'.format( + i, time.time() - t, memo.loss)) + log.eval() + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_2d.py b/tensorflow_graphics/physics/demos/collision_2d.py new file mode 100644 index 000000000..da3402bec --- /dev/null +++ b/tensorflow_graphics/physics/demos/collision_2d.py @@ -0,0 +1,102 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_bounding_box_bc +import tensorflow as tf +import numpy as np +from IPython import embed + +batch_size = 1 +gravity = (0, 0) +N = 10 +group_particles = N * N * 2 +num_particles = group_particles * 2 +steps = 100 +dt = 5e-3 +goal_range = 0.15 +res = (100, 100) +bc = get_bounding_box_bc(res) + +lr = 5e-1 + +def main(sess): + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + E=1, + m_p=1, + V_p=1, + sess=sess) + position = np.zeros(shape=(batch_size, 2, num_particles)) + + velocity_ph = tf.Variable([0.4, 0.05], trainable = True) + velocity_1 = velocity_ph[None, :, None] + tf.zeros( + shape=[batch_size, 2, group_particles], dtype=tf.float32) + velocity_2 = tf.zeros(shape=[batch_size, 2, group_particles], dtype=tf.float32) + velocity = tf.concat([velocity_1, velocity_2], axis = 2) + + for b in range(batch_size): + for i in range(group_particles): + x, y = 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: + x, y = random.random(), random.random() + position[b, :, i] = ((x * 2 + 3) / 30, + (y * 2 + 12.75) / 30) + + for i in range(group_particles): + x, y = 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: + x, y = random.random(), random.random() + position[b, :, i + group_particles] = ((x * 2 + 10) / 30, + (y * 2 + 12.75) / 30) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state(position=position, velocity=velocity) + + final_position = sim.initial_state.center_of_mass(group_particles, None) + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + # loss = tf.reduce_sum(tf.abs(final_position - goal)) + sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) + sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = trainables) + + goal_input = np.array([[0.7, 0.3]], dtype=np.float32) + + for i in range(1000000): + t = time.time() + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + grad = sim.eval_gradients(sym, memo) + print('grad', grad) + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + sess.run(gradient_descent) + print('iter {:5d} time {:.3f} loss {:.4f}'.format( + i, time.time() - t, memo.loss)) + if i % 5 == 0: # True: # memo.loss < 0.01: + sim.visualize(memo) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_3d.py b/tensorflow_graphics/physics/demos/collision_3d.py new file mode 100644 index 000000000..6fb62aba4 --- /dev/null +++ b/tensorflow_graphics/physics/demos/collision_3d.py @@ -0,0 +1,119 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_bounding_box_bc +import tensorflow as tf +import numpy as np +from IPython import embed + +batch_size = 1 +gravity = (0, 0, 0) +N = 15 +group_particles = N * N * N +num_balls = 2 +num_particles = group_particles * num_balls +steps = 100 +dt = 5e-3 +res = (100, 100, 100) +bc = get_bounding_box_bc(res) + +lr = 1e3 + + +def main(sess): + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + E=1, + sess=sess) + position = np.zeros(shape=(batch_size, 3, num_particles)) + velocity_delta = np.zeros(shape=(batch_size, 3, num_particles)) + + F = np.zeros(shape=(batch_size, 3, 3, num_particles)) + scale = 1.00 + F[:, 0, 0, :] = scale + F[:, 1, 1, :] = scale + F[:, 2, 2, :] = scale + + #velocity_ph = tf.Variable([0.4, 0.00, 0.0], trainable = True) + delta = np.zeros(shape=(batch_size, 3, group_particles), dtype=np.float32) + delta[:, 0, :] = 0.2 + velocity_ph = tf.Variable(delta, trainable=True) + velocity_1 = velocity_ph + delta + if num_balls > 1: + velocity_2 = tf.zeros(shape=[batch_size, 3, group_particles], dtype=tf.float32) + velocity = tf.concat([velocity_1, velocity_2], axis=2) + else: + velocity = velocity_1 + + for b in range(batch_size): + for i in range(group_particles): + x, y, z = 0, 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: + x, y, z = random.random(), random.random(), random.random() + position[b, :, i] = ((x * 2 - 1) / 30 + 0.2, + (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) + velocity_delta[b, :, i] = (y - 0.5, -x + 0.5, 0) + + if num_balls > 1: + for i in range(group_particles): + x, y, z = 0, 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: + x, y, z = random.random(), random.random(), random.random() + position[b, :, i + group_particles] = ((x * 2 - 1) / 30 + 0.4, + (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) + + velocity += velocity_delta + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=position, velocity=velocity, deformation_gradient=F) + + if num_balls == 2: + final_position = sim.initial_state.center_of_mass(group_particles, None) + else: + final_position = sim.initial_state.center_of_mass(None, group_particles) + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = trainables) + + goal_input = np.array([[0.6, 0.43, 0.4]], dtype=np.float32) + + for i in range(1000000): + t = time.time() + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + grad = sim.eval_gradients(sym, memo) + print('grad', grad[0]) + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + print(sess.run(velocity_ph)) + sess.run(gradient_descent) + print('iter {:5d} time {:.3f} loss {:.4f}'.format( + i, time.time() - t, memo.loss)) + if i % 5 == 0: # True: # memo.loss < 0.01: + sim.visualize(memo, interval=3, export=True) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_grad_2d.py b/tensorflow_graphics/physics/demos/collision_grad_2d.py new file mode 100644 index 000000000..425b489b3 --- /dev/null +++ b/tensorflow_graphics/physics/demos/collision_grad_2d.py @@ -0,0 +1,128 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_bounding_box_bc +from simulation import tf_precision, np_precision +import tensorflow as tf +import numpy as np +from IPython import embed + +batch_size = 1 +gravity = (0, 0) +N = 10 +group_particles = N * N * 2 +num_particles = group_particles * 2 +steps = 100 +dt = 5e-3 +goal_range = 0.15 +res = (100, 100) +bc = get_bounding_box_bc(res) + +lr = 5e-1 + +def main(sess): + + random.seed(100) + + goal = tf.compat.v1.placeholder(dtype=tf_precision, shape=[batch_size, 2], name='goal') + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + E=1, + m_p=1, + V_p=1, + sess=sess, + part_size = 20) + position = np.zeros(shape=(batch_size, 2, num_particles), dtype = np_precision) + velocity_delta = np.zeros(shape=(batch_size, 2, num_particles), dtype = np_precision) + + # velocity_ph = tf.Variable([0.4, 0.05], trainable = True) + velocity_ph = tf.compat.v1.placeholder(dtype = tf_precision, shape = [batch_size, 2], name = 'velocity') + velocity_1 = velocity_ph[:, :, None] + tf.zeros( + shape=[batch_size, 2, group_particles], dtype=tf_precision) + velocity_2 = tf.zeros(shape=[batch_size, 2, group_particles], dtype=tf_precision) + velocity = tf.concat([velocity_1, velocity_2], axis = 2) + + for b in range(batch_size): + for i in range(group_particles): + x, y = 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: + x, y = random.random(), random.random() + position[b, :, i] = ((x * 2 + 3) / 30, + (y * 2 + 12.75) / 30) + velocity_delta[b, :, i] = (y - 0.5, -x + 0.5) + + for i in range(group_particles): + x, y = 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: + x, y = random.random(), random.random() + position[b, :, i + group_particles] = ((x * 2 + 10) / 30, + (y * 2 + 12.75) / 30) + + + velocity += velocity_delta + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state(position=position, velocity=velocity) + + final_position = sim.initial_state.center_of_mass(group_particles, None) + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + # loss = tf.reduce_sum(tf.abs(final_position - goal)) + sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) + sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = [velocity_ph]) + + goal_input = np.array([[0.7, 0.3]], dtype=np_precision) + v = np.array([[0.4, 0.05]], dtype = np_precision) + + delta = 1e-3 + for i in range(1000000): + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: v}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + print(memo.loss) + sim.visualize(memo, interval=10) + grad = sim.eval_gradients(sym, memo) + print('grad', grad) + for d in range(2): + v[:, d] += delta + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: v}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + loss1 = memo.loss + v[:, d] -= 2 * delta + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: v}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + loss2 = memo.loss + v[:, d] += delta + print((loss1 - loss2) / 2.0 / delta) + break + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_grad_3d.py b/tensorflow_graphics/physics/demos/collision_grad_3d.py new file mode 100644 index 000000000..0751317ab --- /dev/null +++ b/tensorflow_graphics/physics/demos/collision_grad_3d.py @@ -0,0 +1,144 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_bounding_box_bc +import tensorflow as tf +import numpy as np +from IPython import embed + +batch_size = 1 +gravity = (0, 0, 0) +N = 15 +group_particles = N * N * N +num_balls = 2 +num_particles = group_particles * num_balls +steps = 200 +dt = 5e-3 +res = (100, 100, 100) +bc = get_bounding_box_bc(res) + +lr = 1e3 + + +def main(sess): + + random.seed(123) + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + E=1, + sess=sess, + part_size = 20) + position = np.zeros(shape=(batch_size, 3, num_particles)) + velocity_delta = np.zeros(shape=(batch_size, 3, num_particles)) + + F = np.zeros(shape=(batch_size, 3, 3, num_particles)) + scale = 1.00 + F[:, 0, 0, :] = scale + F[:, 1, 1, :] = scale + F[:, 2, 2, :] = scale + + #velocity_ph = tf.Variable([0.4, 0.00, 0.0], trainable = True) + # velocity_ph = tf.Variable(delta, trainable=True) + velocity_ph = tf.compat.v1.placeholder(dtype = tf.float32, shape = [batch_size, 3], name = 'velocity') + velocity_1 = velocity_ph[:, :, None] + tf.zeros( + shape=[batch_size, 3, group_particles], dtype=tf.float32) + if num_balls > 1: + velocity_2 = tf.zeros(shape=[batch_size, 3, group_particles], dtype=tf.float32) + velocity = tf.concat([velocity_1, velocity_2], axis=2) + else: + velocity = velocity_1 + + for b in range(batch_size): + for i in range(group_particles): + x, y, z = 0, 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: + x, y, z = random.random(), random.random(), random.random() + position[b, :, i] = ((x * 2 - 1) / 30 + 0.2, + (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) + velocity_delta[b, :, i] = (y - 0.5, -x + 0.5, 0) + + if num_balls > 1: + for i in range(group_particles): + x, y, z = 0, 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: + x, y, z = random.random(), random.random(), random.random() + position[b, :, i + group_particles] = ((x * 2 - 1) / 30 + 0.4, + (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) + + velocity += velocity_delta + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=position, velocity=velocity, deformation_gradient=F) + + if num_balls == 2: + final_position = sim.initial_state.center_of_mass(group_particles, None) + else: + final_position = sim.initial_state.center_of_mass(None, group_particles) + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = [velocity_ph]) + + goal_input = np.array([[0.6, 0.43, 0.4]], dtype=np.float32) + v = np.array([[0.5, 0.05, -0.05]], dtype=np.float32) + + delta = 1e-4 + for i in range(1000000): + t = time.time() + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: v}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + grad = sim.eval_gradients(sym, memo) + print('grad', grad[0]) + # sim.visualize(memo, interval=3, export=True) + for d in range(3): + v[:, d] += delta + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: v}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + loss1 = memo.loss + v[:, d] -= 2 * delta + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: v}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + loss2 = memo.loss + v[:, d] += delta + print((loss1 - loss2) / 2.0 / delta) + break + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + print(sess.run(velocity_ph)) + sess.run(gradient_descent) + print('iter {:5d} time {:.3f} loss {:.4f}'.format( + i, time.time() - t, memo.loss)) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_mass.py b/tensorflow_graphics/physics/demos/collision_mass.py new file mode 100644 index 000000000..340e1e4c6 --- /dev/null +++ b/tensorflow_graphics/physics/demos/collision_mass.py @@ -0,0 +1,108 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_bounding_box_bc +from time_integration import UpdatedSimulationState +import tensorflow as tf +import numpy as np +from IPython import embed + +batch_size = 1 +gravity = (0, 0) +N = 40 +group_particles = N * N +num_particles = group_particles * 2 +steps = 300 +dt = 3e-3 +goal_range = 0.15 +res = (100, 100) +bc = get_bounding_box_bc(res) + +lr = 1 + +def main(sess): + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + sess=sess) + position = np.zeros(shape=(batch_size, num_particles, 2)) + + velocity_ph = tf.compat.v1.placeholder(shape = (2, ), dtype = tf.float32) + velocity_1 = velocity_ph[None, :, None] + tf.zeros( + shape=[batch_size, 2, group_particles], dtype=tf.float32) + velocity_2 = tf.zeros(shape=[batch_size, 2, group_particles], dtype=tf.float32) + velocity = tf.concat([velocity_1, velocity_2], axis = 2) + + mass_ph = tf.Variable([1.], trainable = True) + mass_1 = mass_ph[None, None, :] + tf.zeros( + shape = [batch_size, 1, group_particles], dtype = tf.float32) + mass_2 = tf.ones(shape = [batch_size, 1, group_particles], dtype = tf.float32) + mass = tf.concat([mass_1, mass_2], axis = 2) + + for b in range(batch_size): + for i in range(group_particles): + x, y = 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: + x, y = random.random(), random.random() + position[b, i] = ((x * 2 + 3) / 30, + (y * 2 + 12.25) / 30) + + for i in range(group_particles): + x, y = 0, 0 + while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: + x, y = random.random(), random.random() + position[b, i + group_particles] = ((x * 2 + 10) / 30, + (y * 2 + 12.75) / 30) + position = np.array(position).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=position, velocity=velocity, particle_mass = mass) + + final_position = sim.initial_state.center_of_mass(group_particles, None) + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) ** 0.5 + # loss = tf.reduce_sum(tf.abs(final_position - goal)) + sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) + sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) + + trainables = [mass_ph] + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = trainables) + + goal_input = np.array( + [[0.68, 0.52]], + dtype=np.float32) + + for i in range(1000000): + t = time.time() + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: [0.5, 0]}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + grad = sim.eval_gradients(sym, memo) + sim.visualize(memo, interval=5, folder='sysid_demo/iteration{:04d}'.format(i)) + print('mass', mass_ph.eval()) + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + sess.run(gradient_descent) + print('iter {:5d} time {:.3f} loss {:.4f}'.format( + i, time.time() - t, memo.loss)) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/crawler_3d.py b/tensorflow_graphics/physics/demos/crawler_3d.py new file mode 100644 index 000000000..af46cbe7f --- /dev/null +++ b/tensorflow_graphics/physics/demos/crawler_3d.py @@ -0,0 +1,288 @@ +import sys +import math +sys.path.append('..') + +import random +import os +import numpy as np +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export +import IPython + +evaluate = False +lr = 10 +gamma = 0.0 + +sample_density = 15 +group_num_particles = sample_density**3 +goal_pos = np.array([1.4, 0.4, 0.5]) +goal_range = np.array([0.0, 0.0, 0.0]) +batch_size = 1 + +actuation_strength = 4 + + +config = 'C' + +exp = export.Export('crawler3d') + +# Robot B +if config == 'B': + num_groups = 7 + group_offsets = [(0, 0, 0), (0.5, 0, 0), (0, 1, 0), (1, 1, 0), (2, 1, 0), (2, 0, 0), (2.5, 0, 0)] + group_sizes = [(0.5, 1, 1), (0.5, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (0.5, 1, 1), (0.5, 1, 1)] + actuations = [0, 1, 5, 6] + fixed_groups = [] + head = 3 + gravity = (0, -2, 0) + + + +#TODO: N-Ped +#Robot C +else: + + num_leg_pairs = 2 + + x = 3 + z = 3 + act_x = 0.5 + act_y = 0.35 + act_z = 1 + + group_offsets = [] + for x_i in np.linspace(0, x - 2*act_x, num_leg_pairs): + + group_offsets += [(x_i, 0, 0)] + group_offsets += [(x_i + act_x, 0, 0)] + group_offsets += [(x_i, act_y, 0)] + group_offsets += [(x_i + act_x, act_y, 0)] + + group_offsets += [(x_i + act_x, 0, act_z * 2)] + group_offsets += [(x_i, 0, act_z * 2)] + group_offsets += [(x_i + act_x, act_y, act_z * 2)] + group_offsets += [(x_i, act_y, act_z * 2)] + + + for i in range(3): + group_offsets += [(i, 0, act_z)] + num_groups = len(group_offsets) + + #group_offsets += [(0.0, 1.0, 0.0)] + num_particles = group_num_particles * num_groups + group_sizes = [(act_x, act_y, act_z)] * num_leg_pairs * 2 * 4 + [(1.0, 0.8, 1.0)] * int(x) + actuations = list(range(8 * num_leg_pairs)) + fixed_groups = [] + head = 2 * 8 + 2 + gravity = (0, -2, 0) + +#IPython.embed() + + +num_particles = group_num_particles * num_groups + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + +K = 8 + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), K)), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +def main(sess): + t = time.time() + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') + + # Define your controller here + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + controller_inputs.append((goal - goal_pos) / np.maximum(goal_range, 1e-5)) + controller_inputs_backup = controller_inputs + controller_inputs = [] + t = tf.ones(shape=(1, 1)) * 0.06 * tf.cast(state.step_count, dtype=tf.float32) + for k in range(8): + controller_inputs.append(tf.sin(t + 2 / K * k * math.pi)) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, K), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, K, 1) + # Batch, 6 * num_groups, 1 + intermediate = tf.matmul(W1[None, :, :] + + tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) + # Batch, #actuations, 1 + assert intermediate.shape == (batch_size, len(actuations), 1) + assert intermediate.shape[2] == 1 + intermediate = intermediate[:, :, 0] + # Batch, #actuations + actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength + + controller_inputs_backup = tf.concat(controller_inputs_backup, axis=1) + controller_inputs_backup = controller_inputs_backup[:, :, None] + + debug = {'controller_inputs': controller_inputs_backup[:, :, 0], 'actuation': actuation} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + act = make_matrix3d(zeros, zeros, zeros, zeros, zeros, zeros, zeros, zeros, act) + total_actuation = total_actuation + act + return total_actuation, debug + + + res = (60 + 100 * int(evaluate), 30, 30) + bc = get_bounding_box_bc(res) + + sim = Simulation( + dt=0.005, + num_particles=num_particles, + grid_res=res, + dx=1.0 / res[1], + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess, + E=25, damping=0.001 * evaluate) + print("Building time: {:.4f}s".format(time.time() - t)) + + final_state = sim.initial_state['debug']['controller_inputs'] + s = head * 9 + + final_position = final_state[:, s:s+3] + final_velocity = final_state[:, s + 3: s + 6] + loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) + loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) + + loss = loss1 + gamma * loss2 + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + for z in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + w = ((z + 0.5) / sample_density * group_sizes[i][2] + offset[2] + ) * scale + 0.1 + initial_positions[b].append([u, v, w]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state=initial_state) + + sym = sim.gradients_sym(loss, variables=trainables) + + gx, gy, gz = goal_range + pos_x, pos_y, pos_z = goal_pos + goal_train = [np.array( + [[pos_x + (random.random() - 0.5) * gx, + pos_y + (random.random() - 0.5) * gy, + pos_z + (random.random() - 0.5) * gz + ] for _ in range(batch_size)], + dtype=np.float32) for __ in range(1)] + + vis_id = list(range(batch_size)) + random.shuffle(vis_id) + + # Optimization loop + saver = tf.compat.v1.train.Saver() + + if evaluate: + '''evaluate''' + saver.restore(sess, "crawler3d_demo/0014/data.ckpt") + tt = time.time() + memo = sim.run( + initial_state=initial_state, + num_steps=1800, + iteration_feed_dict={goal: goal_train[0]}, + loss=loss) + print('forward', time.time() - tt) + + fn = 'crawler3d_demo/eval' + sim.visualize(memo, batch=random.randrange(batch_size), export=None, + show=True, interval=5, folder=fn) + return + + for e in range(100000): + t = time.time() + print('Epoch {:5d}, learning rate {}'.format(e, lr)) + + loss_cal = 0. + print('train...') + for it, goal_input in enumerate(goal_train): + tt = time.time() + memo = sim.run( + initial_state=initial_state, + num_steps=400, + iteration_feed_dict={goal: goal_input}, + loss=loss) + print('forward', time.time() - tt) + tt = time.time() + grad = sim.eval_gradients(sym=sym, memo=memo) + print('backward', time.time() - tt) + + for i, g in enumerate(grad): + print(i, np.mean(np.abs(g))) + grad = [np.clip(g, -1, 1) for g in grad] + + + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + sess.run(gradient_descent) + print('Iter {:5d} time {:.3f} loss {}'.format( + it, time.time() - t, memo.loss)) + loss_cal = loss_cal + memo.loss + fn = 'crawler3d_demo/{:04d}/'.format(e) + saver.save(sess, "{}/data.ckpt".format(fn)) + sim.visualize(memo, batch=random.randrange(batch_size), export=None, + show=True, interval=5, folder=fn) + +#exp.export() + print('train loss {}'.format(loss_cal / len(goal_train))) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/export.py b/tensorflow_graphics/physics/demos/export.py new file mode 100644 index 000000000..b534744be --- /dev/null +++ b/tensorflow_graphics/physics/demos/export.py @@ -0,0 +1,39 @@ +import cv2 +import os +class Export: + def __init__(self, directory, fps = 60, delete = True): + self.cnt = 0 + self.dir = directory + if os.path.exists(directory): + import shutil + shutil.rmtree(directory, ignore_errors = True) + os.makedirs(directory) + self.last = None + self.fps = fps + self.delete = delete + + def __call__(self, img): + if img.max() <= 1: + img = img * 255 + img = img.astype('uint8') + name = '{:0=8}.png'.format(self.cnt) + cv2.imwrite(os.path.join(self.dir, name), img) + self.cnt += 1 + self.last = img.copy() + + def wait(self, sec = 0.4): + frame = int(sec * self.fps) + for i in range(frame): + self(self.last) + + def __del__(self): + fps, d = self.fps, self.dir + if self.cnt > 0: + os.system('cd {}\nti video {}'.format(d, fps)) + os.system('mv {} ./{}.mp4'.format(os.path.join(d, 'video.mp4'), d)) + if self.delete: + import shutil + shutil.rmtree(d, ignore_errors = True) + +if __name__ == '__main__': + pass diff --git a/tensorflow_graphics/physics/demos/finger/__init__.py b/tensorflow_graphics/physics/demos/finger/__init__.py new file mode 100644 index 000000000..1ec60b1f3 --- /dev/null +++ b/tensorflow_graphics/physics/demos/finger/__init__.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + +from gym.envs.registration import register + +register( + id='FingerEnv-v0', + entry_point='finger.finger_env:FingerEnv', +) diff --git a/tensorflow_graphics/physics/demos/finger/finger_env.py b/tensorflow_graphics/physics/demos/finger/finger_env.py new file mode 100644 index 000000000..50444c200 --- /dev/null +++ b/tensorflow_graphics/physics/demos/finger/finger_env.py @@ -0,0 +1,143 @@ +import math +import gym +from gym import spaces, logger +from gym.utils import seeding +import numpy as np +import finger_sim as f_s +import IPython + +goal_ball = 0.001 +class FingerEnv(gym.Env): + def __init__(self): + ''' + max_act = m-d array, where m is number of actuators + max_obs is n-d array, where n is the state space of the robot. Assumes 0 is the minimum observation + init_state is the initial state of the entire robot + ''' + max_act = np.ones(2) * 4.0 + max_obs = np.ones(18) * 2.0 + + + self.multi_target = f_s.multi_target + + self.action_space = spaces.Box(-max_act, max_act) + self.observation_space = spaces.Box(np.zeros(18), max_obs) + self.seed() + + self.iter_ = 0 + + self.state = None + if not self.multi_target: + self.goal_pos = np.array([0.6, 0.6]) + else: + self.goal_pos = f_s.goal_pos + if not self.multi_target: + self.goal_range = np.zeros((2, ), dtype = np.float32) + else: + self.goal_range = f_s.goal_range + + self.init_state, self.sim, self.loss, self.obs = f_s.generate_sim() + self.sim.set_initial_state(initial_state=self.init_state) + self.epoch_ = 0 + import time + self.tt1 = time.time() + if self.multi_target: + print('Multi target!!!!!!!!!!!!!!!!') + self.fout = open('multi_target_simple.log', 'w') + else: + print('Single target!!!!!!!!!!!!!!!!') + self.fout = open('single_target_simple.log', 'w') + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def reset(self): + import time + tt2 = time.time() + print(tt2 - self.tt1) + self.tt1 = tt2 + self.epoch_ += 1 + self.state = self.init_state + self.sim.set_initial_state(initial_state = self.init_state) + zero_act = np.expand_dims(np.zeros(self.action_space.shape), axis=0) + #We need to step forward and get the observation + # IPython.embed() + self.goal_input = ((np.random.random(2) - 0.5) * self.goal_range + self.goal_pos)[None, :] + memo_obs = self.sim.run( + initial_state=self.state, + num_steps=1, + iteration_feed_dict={f_s.goal: self.goal_input, f_s.actuation: zero_act}, + loss=self.obs) + + print('reset') + return memo_obs.loss + + def step(self, action): + action_ = np.expand_dims(action, axis=0) + #1. sim forward + pre_point = self.state[0][:, :, -f_s.group_num_particles:].mean(axis = 2) + ''' + memo = self.sim.run( + initial_state=self.state, + num_steps=1, + iteration_feed_dict={f_s.goal: self.goal_input, f_s.actuation: action_}, + loss=self.loss) + ''' + + memo_obs = self.sim.run( + initial_state=self.state, + num_steps=1, + iteration_feed_dict={f_s.goal: self.goal_input, f_s.actuation: action_}, + loss=self.obs) + + # if self.epoch_ % 100 <= 5 and self.iter_ % 5 == 1: + # self.sim.visualize(memo_obs, show=True) + + + #2. update state + #TODO: update state + self.state = memo_obs.steps[-1] + # IPython.embed() + now_point = self.state[0][:, :, -f_s.group_num_particles:].mean(axis = 2) + + obs = memo_obs.loss.flatten() + + + #3. calculate reward as velocity toward the goal + # print(now_point, self.goal_input) + pre_dist = (((pre_point - self.goal_input) ** 2).sum(axis = 1) ** 0.5).sum(axis = 0) + now_dist = (((now_point - self.goal_input) ** 2).sum(axis = 1) ** 0.5).sum(axis = 0) + reward = (pre_dist - now_dist) * 10.# memo.loss + # print('{:.8f}'.format(reward)) + + #TODO: 4. return if we're exactly at the goal and give a bonus to reward if we are + # success = np.linalg.norm(obs[12:14] - self.goal_input) < goal_ball #TODO: unhardcode + + self.iter_ += 1 + + if self.iter_ == 80: + self.iter_ = 0 + done = True + print(self.epoch_, 'L2 distance: ', now_dist) + print(self.epoch_, now_dist, file = self.fout) + else: + done = False + # fail = True + # else: + # fail = False + + # if success: + # reward += 1 + # elif fail: + # reward -= 1 + + # done = fail or success + + self.memo = memo_obs + + #print(reward) + return obs, reward, done, {} + + def render(self): + sim.visualize(self.memo, 1,show=True, export=f_s.exp, interval=1) diff --git a/tensorflow_graphics/physics/demos/finger/finger_sim.py b/tensorflow_graphics/physics/demos/finger/finger_sim.py new file mode 100644 index 000000000..265a10d26 --- /dev/null +++ b/tensorflow_graphics/physics/demos/finger/finger_sim.py @@ -0,0 +1,183 @@ +import sys +sys.path.append('..') + +import random +import os +import numpy as np +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export +import IPython + + +lr = 0.03 +gamma = 0.0 + +sample_density = 40 +group_num_particles = sample_density**2 +goal_pos = np.array([0.5, 0.6]) +goal_range = np.array([0.1, 0.1]) +batch_size = 1 +actuation_strength = 4 +multi_target = True + +config = 'B' + +exp = export.Export('finger_data') + +# Robot B +num_groups = 3 +group_offsets = [(1, 0), (1.5, 0), (1, 2)] +group_sizes = [(0.5, 2), (0.5, 2), (1, 1)] +actuations = [0, 1] +head = 2 +gravity = (0, 0) + +num_particles = group_num_particles * num_groups + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) +sess_config.gpu_options.allow_growth = True +sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + +sess = tf.compat.v1.Session(config=sess_config) + +goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') +actuation = tf.compat.v1.placeholder(dtype=tf.float32, shape=[1, len(actuations)], name='act') + +def generate_sim(): + #utility function for ppo + t = time.time() + + + + # Define your controller here + + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + in_goal = goal + if multi_target: + in_goal = (goal - goal_pos) / goal_range + controller_inputs.append((goal - 0.5)) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) + # Batch, 6 * num_groups, 1 + #IPython.embed() + + debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + # First PK stress here + act = make_matrix2d(zeros, zeros, zeros, act) + # Convert to Kirchhoff stress + total_actuation = total_actuation + act + return total_actuation, debug + + + res = (40, 40) + bc = get_bounding_box_bc(res) + bc[0][:, :, :7] = -1 # Sticky + bc[1][:, :, :7] = 0 # Sticky + dt = 0.005 + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + dx=1.0 / res[1], + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess, + scale=20) + print("Building time: {:.4f}s".format(time.time() - t)) + + final_state = sim.initial_state['debug']['controller_inputs'] + s = head * 6 + + final_position = final_state[:, s:s+2] + final_velocity = final_state[:, s + 2: s + 4] + loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) + loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) + + + loss_x = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_position[0, 0])) + loss_y = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_position[0, 1])) + + + loss_obs = final_state + loss_fwd = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_state[:, s+2:s + 3], axis=1)) * dt + + #loss = loss_fwd + vel = tf.squeeze(ly.flatten(final_velocity)) + dire = tf.squeeze(ly.flatten(goal - final_position)) + loss = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=tf.tensordot(vel, dire / tf.norm(tensor=dire), 1))) * dt + + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + initial_positions[b].append([u, v]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10) + + #trainables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES) + + sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) + sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) + + + return initial_state, sim, loss, loss_obs + +#if __name__ == '__main__': + diff --git a/tensorflow_graphics/physics/demos/finger_plot.py b/tensorflow_graphics/physics/demos/finger_plot.py new file mode 100644 index 000000000..1e7f6cbe1 --- /dev/null +++ b/tensorflow_graphics/physics/demos/finger_plot.py @@ -0,0 +1,225 @@ +import sys +sys.path.append('..') + +import random +import os +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export + +lr = 2 +gamma = 0.0 + +sample_density = 40 +multi_target = True +group_num_particles = sample_density**2 +goal_pos = np.array([0.5, 0.6]) +goal_range = np.array([0.15, 0.15]) +if not multi_target: + goal_pos = np.array([0.6, 0.6]) + goal_range = np.zeros((2,), dtype = np.float32) +batch_size = 1 +actuation_strength = 4 + +config = 'B' + +if config == 'B': + # Finger + num_groups = 3 + group_offsets = [(1, 0), (1.5, 0), (1, 2)] + group_sizes = [(0.5, 2), (0.5, 2), (1, 1)] + actuations = [0, 1] + head = 2 + gravity = (0, 0) +else: + print('Unknown config {}'.format(config)) + +num_particles = group_num_particles * num_groups + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +def main(sess): + t = time.time() + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + # Define your controller here + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + if multi_target: + controller_inputs.append((goal - goal_pos) / goal_range) + else: + controller_inputs.append(goal) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) + # Batch, 6 * num_groups, 1 + intermediate = tf.matmul(W1[None, :, :] + + tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) + # Batch, #actuations, 1 + assert intermediate.shape == (batch_size, len(actuations), 1) + assert intermediate.shape[2] == 1 + intermediate = intermediate[:, :, 0] + # Batch, #actuations + actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength + debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + # First PK stress here + act = make_matrix2d(zeros, zeros, zeros, act) + # Convert to Kirchhoff stress + total_actuation = total_actuation + act + return total_actuation, debug + + res = (40, 40) + bc = get_bounding_box_bc(res) + + if config == 'B': + bc[0][:, :, :7] = -1 # Sticky + bc[1][:, :, :7] = 0 # Sticky + + sim = Simulation( + dt=0.005, + num_particles=num_particles, + grid_res=res, + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess) + print("Building time: {:.4f}s".format(time.time() - t)) + + final_state = sim.initial_state['debug']['controller_inputs'] + s = head * 6 + + final_position = final_state[:, s:s+2] + final_velocity = final_state[:, s + 2: s + 4] + loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) + loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) + + loss = loss1 + gamma * loss2 + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + initial_positions[b].append([u, v]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state=initial_state) + + sym = sim.gradients_sym(loss, variables=trainables) + sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) + sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) + + sim.add_point_visualization(pos=final_position, color=(1, 0, 0), radius=3) + + if multi_target: + fout = open('multi_target_{}.log'.format(lr), 'w') + else: + fout = open('single_target_{}.log'.format(lr), 'w') + + # Optimization loop + for it in range(100000): + t = time.time() + + goal_input = ((np.random.random([batch_size, 2]) - 0.5) * goal_range + goal_pos) + + print('train...') + memo = sim.run( + initial_state=initial_state, + num_steps=150, + iteration_feed_dict={goal: goal_input}, + loss=loss) + grad = sim.eval_gradients(sym=sym, memo=memo) + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + sess.run(gradient_descent) + print('Iter {:5d} time {:.3f} loss {}'.format( + it, time.time() - t, memo.loss)) + loss_cal = memo.loss + if False: #i % 5 == 0: + sim.visualize(memo, batch = 0, interval = 5) + # sim.visualize(memo, batch = 1) + + print('L2:', loss_cal ** 0.5) + print(it, 'L2 distance: ', loss_cal ** 0.5, file = fout) + + ''' + print('valid...') + + loss_cal = 0 + for goal_input in goal_valid: + memo = sim.run( + initial_state=initial_state, + num_steps=80, + iteration_feed_dict={goal: goal_input}, + loss=loss) + print('time {:.3f} loss {:.4f}'.format( + time.time() - t, memo.loss)) + loss_cal = loss_cal + memo.loss + if i == 0:# memo.loss < 1e-4: + for b in vis_id: + sim.visualize(memo, batch = b, export = exp) + exp.export() + + print('valid loss {}'.format(loss_cal / len(goal_valid))) + print('==============================================') + ''' + + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/model.py b/tensorflow_graphics/physics/demos/model.py new file mode 100644 index 000000000..b11b08b2c --- /dev/null +++ b/tensorflow_graphics/physics/demos/model.py @@ -0,0 +1,52 @@ +import tensorflow as tf +import numpy as np + +class BatchNormalize: + def __init__(self, shape, alpha = 0.9): + self.mean = tf.Variable(np.zeros(shape, dtype = np.float32), trainable = False) + self.norm = tf.Variable(np.ones(shape, dtype = np.float32), trainable = False) + + self.mean_ph = tf.compat.v1.placeholder(shape = shape, dtype = tf.float32) + self.norm_ph = tf.compat.v1.placeholder(shape = shape, dtype = tf.float32) + self.update_sym = [ + self.norm.assign(self.norm * alpha + self.norm_ph * (1 - alpha)), + self.mean.assign(self.mean * alpha + self.mean_ph * (1 - alpha)) + ] + + def __call__(self, input_layer): + return (input_layer - self.mean) / (self.norm ** 0.5) + + def get_mean(self): + return self.mean + + def update(self, mean, norm, sess): + sess.run(self.update_sym, feed_dict = {self.mean_ph: mean, self.norm_ph: norm}) + +class SimpleModel: + def __init__(self, input_channel, output_channel, hidden_layer = 16, batch_normalize = False): + if batch_normalize: + self.bn = BatchNormalize(input_channel) + else: + self.bn = None + self.W1 = tf.Variable( + 0.2 * tf.random.normal(shape=(input_channel, hidden_layer)), + trainable=True) + self.b1 = tf.Variable(np.random.random(hidden_layer) * 0.2, trainable=True, dtype = tf.float32) + + self.W2 = tf.Variable( + 0.2 * tf.random.normal(shape=(hidden_layer, output_channel)), + trainable=True) + self.b2 = tf.Variable(np.random.random(output_channel) * 0.2, trainable=True, dtype = tf.float32) + + def __call__(self, input_layer): + if self.bn is not None: + input_layer = self.bn(input_layer) + hidden_layer = tf.tanh(tf.matmul(input_layer, self.W1) + self.b1) + output_layer = tf.tanh(tf.matmul(hidden_layer, self.W2) + self.b2) + return output_layer + + def update_bn(self, mean, norm, sess): + self.bn.update(mean, norm, sess) + + def get_bn_mean(self): + return self.bn.get_mean() diff --git a/tensorflow_graphics/physics/demos/multireach.py b/tensorflow_graphics/physics/demos/multireach.py new file mode 100644 index 000000000..4bbcb3891 --- /dev/null +++ b/tensorflow_graphics/physics/demos/multireach.py @@ -0,0 +1,223 @@ +import sys +sys.path.append('..') + +import random +import os +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export + +lr = 2 +gamma = 0.0 + +sample_density = 20 +group_num_particles = sample_density**2 +goal_pos = np.array([0.5, 0.6]) +goal_range = np.array([0.1, 0.1]) +batch_size = 1 +actuation_strength = 3 + +config = 'B' + +exp = export.Export('multireach') + +if config == 'A': + # Robot A + num_groups = 5 + group_offsets = [(0, 0), (0, 1), (1, 1), (2, 1), (2, 0)] + group_sizes = [(1, 1), (1, 1), (1, 1), (1, 1), (1, 1)] + actuations = [0, 4] + head = 2 + gravity = (0, -2) +elif config == 'B': + # Finger + num_groups = 3 + group_offsets = [(1, 0), (1.5, 0), (1, 2)] + group_sizes = [(0.5, 2), (0.5, 2), (1, 1)] + actuations = [0, 1] + head = 2 + gravity = (0, 0) +elif config == 'C': + # Robot B + num_groups = 7 + group_offsets = [(0, 0), (0.5, 0), (0, 1), (1, 1), (2, 1), (2, 0), (2.5, 0)] + group_sizes = [(0.5, 1), (0.5, 1), (1, 1), (1, 1), (1, 1), (0.5, 1), (0.5, 1)] + actuations = [0, 1, 5, 6] + fixed_groups = [] + head = 3 + gravity = (0, -2) +else: + print('Unknown config {}'.format(config)) + +num_particles = group_num_particles * num_groups + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +def main(sess): + t = time.time() + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + # Define your controller here + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + controller_inputs.append((goal - goal_pos) / goal_range) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) + # Batch, 6 * num_groups, 1 + intermediate = tf.matmul(W1[None, :, :] + + tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) + # Batch, #actuations, 1 + assert intermediate.shape == (batch_size, len(actuations), 1) + assert intermediate.shape[2] == 1 + intermediate = intermediate[:, :, 0] + # Batch, #actuations + actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength + debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + # First PK stress here + act = make_matrix2d(zeros, zeros, zeros, act) + # Convert to Kirchhoff stress + total_actuation = total_actuation + act + return total_actuation, debug + + res = (40, 40) + bc = get_bounding_box_bc(res) + + if config == 'B': + bc[0][:, :, :7] = -1 # Sticky + bc[1][:, :, :7] = 0 # Sticky + + sim = Simulation( + dt=0.005, + num_particles=num_particles, + grid_res=res, + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess) + print("Building time: {:.4f}s".format(time.time() - t)) + + final_state = sim.initial_state['debug']['controller_inputs'] + s = head * 6 + + final_position = final_state[:, s:s+2] + final_velocity = final_state[:, s + 2: s + 4] + loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) + loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) + + loss = loss1 + gamma * loss2 + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + initial_positions[b].append([u, v]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state=initial_state) + + sym = sim.gradients_sym(loss, variables=trainables) + sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) + sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) + + sim.add_point_visualization(pos=final_position, color=(1, 0, 0), radius=3) + + gx, gy = goal_range + pos_x, pos_y = goal_pos + + vis_id = list(range(batch_size)) + random.shuffle(vis_id) + vis_id = vis_id[:20] + + # Optimization loop + for i in range(100000): + t = time.time() + print('Epoch {:5d}, learning rate {}'.format(i, lr)) + + goal_train = [np.array( + [[pos_x + (random.random() - 0.5) * gx, + pos_y + (random.random() - 0.5) * gy] for _ in range(batch_size)], + dtype=np.float32) for __ in range(10)] + + + loss_cal = 0. + print('train...') + for it, goal_input in enumerate(goal_train): + memo = sim.run( + initial_state=initial_state, + num_steps=80, + iteration_feed_dict={goal: goal_input}, + loss=loss) + grad = sim.eval_gradients(sym=sym, memo=memo) + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad) + ] + sess.run(gradient_descent) + print('Iter {:5d} time {:.3f} loss {}'.format( + it, time.time() - t, memo.loss)) + loss_cal = loss_cal + memo.loss + if it % 5 == 0: + sim.visualize(memo, batch = 0) + # sim.visualize(memo, batch = 1) + + print('train loss {}'.format(loss_cal / len(goal_train))) + + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/rolling.py b/tensorflow_graphics/physics/demos/rolling.py new file mode 100644 index 000000000..8abd64bb4 --- /dev/null +++ b/tensorflow_graphics/physics/demos/rolling.py @@ -0,0 +1,114 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_bounding_box_bc +from time_integration import UpdatedSimulationState +import tensorflow as tf +import numpy as np +from IPython import embed +import export + +exp = export.Export('rolling_acc') + +def main(sess): + batch_size = 1 + gravity = (0, -1) + # gravity = (0, 0) + N = 5 + dR = 0.2 + R = (N - 1) * dR + dC = 1.6 + num_particles = int(((N - 1) * dC + 1) ** 2) + steps = 1000 + dt = 5e-3 + goal_range = 0.15 + res = (45, 30) + bc = get_bounding_box_bc(res) + + lr = 1e-2 + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + def F_controller(state): + F = state.position - state.center_of_mass()[:, :, None] + F = tf.stack([F[:, 1], -F[:, 0]], axis = 1) + # T = tf.cast(state.step_count // 100 % 2, dtype = tf.float32) * 2 - 1 + return F * 10# * T + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + m_p=1, + V_p=1, + E = 10, + nu = 0.3, + sess=sess, + use_visualize = True, + F_controller = F_controller) + position = np.zeros(shape=(batch_size, num_particles, 2)) + + # velocity_ph = tf.constant([0.2, 0.3]) + velocity_ph = tf.constant([0, 0], dtype = tf.float32) + velocity = velocity_ph[None, :, None] + tf.zeros( + shape=[batch_size, 2, num_particles], dtype=tf.float32) + random.seed(123) + for b in range(batch_size): + dx, dy = 5, 4 + cnt = 0 + las = 0 + for i in range(N): + l = int((dC * i + 1) ** 2) + l, las = l - las, l + print(l) + dth = 2 * np.pi / l + dr = R / (N - 1) * i + theta = np.pi * 2 * np.random.random() + for j in range(l): + theta += dth + x, y = np.cos(theta) * dr, np.sin(theta) * dr + position[b, cnt] = ((dx + x) / 30, (dy + y) / 30) + cnt += 1 + + position = np.array(position).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=position, velocity=velocity) + + final_position = sim.initial_state.center_of_mass() + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) + sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = trainables) + + goal_input = np.array([[0.7, 0.3]], dtype=np.float32) + + + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + + if True: + sim.visualize(memo, show = True, interval = 2) + else: + sim.visualize(memo, show = False, interval = 1, export = exp) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/rolling_boundary.py b/tensorflow_graphics/physics/demos/rolling_boundary.py new file mode 100644 index 000000000..1da318438 --- /dev/null +++ b/tensorflow_graphics/physics/demos/rolling_boundary.py @@ -0,0 +1,259 @@ +import sys +sys.path.append('..') + +import random +import time +from simulation import Simulation, get_new_bc +from time_integration import UpdatedSimulationState +import tensorflow as tf +import numpy as np +from IPython import embed +import export +from model import SimpleModel + + +difficulty = 0.6 + +tf.compat.v1.set_random_seed(1234) +np.random.seed(0) +# NN + +model = SimpleModel(8, 1, batch_normalize = True) + +def main(sess): + batch_size = 1 + gravity = (0, -1.) + # gravity = (0, 0) + N = 10 + dR = 0.1 + R = (N - 1) * dR + dC = 1.6 + num_particles = int(((N - 1) * dC + 1) ** 2) + steps = 1000 + dt = 1e-2 + goal_range = 0.15 + res = (90, 60) + dx = 1. / res[0] + max_speed = 0.3 + exp = export.Export('rolling_acc_{}'.format(max_speed)) + + lef = 2.36 + rig = 9. + + temp_f = lambda x: 2 * x - 1 if x > 0.5 else -2 * x + 1 + temp_f_ = lambda x: 2 if x > 0.5 else -2 + boundary = lambda x: ((temp_f(x / res[0]) - 0.5) * difficulty + 0.5) * res[1] + boundary_ = lambda x: temp_f_(x / res[0]) / res[0] * res[1] * difficulty + + boundary = lambda x: (np.sin((rig - lef) * x / res[0] + lef) * difficulty + 1) * res[1] / 2 + boundary_ = lambda x: (rig - lef) / 2 * difficulty * res[1] * np.cos((rig - lef) * x / res[0] + lef) / res[0] + tf_boundary = lambda x: (tf.sin((rig - lef) * x + lef) * difficulty + 1) * res[1] / 2 + tf_boundary_ = lambda x: (rig - lef) / 2 * difficulty * res[1] * tf.cos((rig - lef) * x + lef) / res[0] + + bc = get_new_bc(res, boundary = boundary, boundary_ = boundary_) + + lr = 1 + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + def state_tensor(state): + cm = state.center_of_mass() + mv = tf.reduce_mean(input_tensor=state.velocity, axis = 2) + time1 = tf.sin(tf.cast(state.step_count, dtype = tf.float32) / 100) + time2 = tf.sin(tf.cast(state.step_count, dtype = tf.float32) / 31) + time3 = tf.sin(tf.cast(state.step_count, dtype = tf.float32) / 57) + time4 = tf.sin(tf.cast(state.step_count, dtype = tf.float32) / 7) + lis = [mv, cm, time1, time2, time3, time4] + tensor = tf.concat([tf.reshape(t, shape = [batch_size, -1]) + for t in lis], + axis = 1) + return tensor + + def norm_tensor(state): + return (state_tensor(state) - model.get_bn_mean()) ** 2 + + def F_controller(state): + # F = state.position - state.center_of_mass()[:, :, None] + # F = tf.stack([F[:, 1], -F[:, 0]], axis = 1) + # F = tf.constant([1, 2 / res[0] * res[1]])[None, :, None] + + # accelerate + cm = state.center_of_mass() + k = tf_boundary_(cm[:, 0]) + L = (k ** 2 + 1) ** 0.5 + dx = tf.math.reciprocal(L) + dy = k / L + F = tf.stack([dx, dy], axis = 1) * max_speed + + # inputs + inputs = state_tensor(state) + + # network + direction = model(inputs) + ''' + direction = thb[state.step_count] + ''' + + ''' + # best solution + vx = tf.reduce_mean(state.velocity, axis = 2)[:, 0] + direction = tf.cast(vx > 0, dtype = tf.float32) * 2 - 1 + ''' + + + return (F * direction)[:, :, None] + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + bc=bc, + gravity=gravity, + m_p=0.5, + V_p=0.5, + E = 1, + nu = 0.3, + dx = dx, + sess=sess, + use_visualize = True, + F_controller = F_controller, + part_size = 10) + position = np.zeros(shape=(batch_size, num_particles, 2)) + + # velocity_ph = tf.constant([0.2, 0.3]) + velocity_ph = tf.constant([0, 0], dtype = tf.float32) + velocity = velocity_ph[None, :, None] + tf.zeros( + shape=[batch_size, 2, num_particles], dtype=tf.float32) + for b in range(batch_size): + dx, dy = 15.81, 7.2 + cnt = 0 + las = 0 + for i in range(N): + l = int((dC * i + 1) ** 2) + l, las = l - las, l + print(l) + dth = 2 * np.pi / l + dr = R / (N - 1) * i + theta = np.pi * 2 * np.random.random() + for j in range(l): + theta += dth + x, y = np.cos(theta) * dr, np.sin(theta) * dr + position[b, cnt] = ((dx + x) / 45, (dy + y) / 45) + cnt += 1 + + position = np.array(position).swapaxes(1, 2) + + + initial_state = sim.get_initial_state( + position=position, velocity=velocity) + state_sum = tf.reduce_mean(input_tensor=sim.stepwise_sym(state_tensor), axis = 0) + state_norm = tf.reduce_mean(input_tensor=sim.stepwise_sym(norm_tensor), axis = 0) + + final_position = sim.initial_state.center_of_mass() + final_velocity = tf.reduce_mean(input_tensor=sim.initial_state.velocity, axis = 2) + final_F = tf.reduce_mean(input_tensor=sim.updated_state.F, axis = 2) + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) + sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) + sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) + sim.add_vector_visualization(pos=final_position, vector=final_F, color=(1, 0, 1), scale=500) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = trainables) + + goal_input = np.array([[37.39 / 45, 25. / 45]], dtype=np.float32) + grad_ph = [ + tf.compat.v1.placeholder(shape = v.shape, dtype = tf.float32) for v in trainables + ] + velocity = [ + tf.Variable(np.zeros(shape = v.shape, dtype = np.float32), + trainable=False) for v in trainables + ] + + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad_ph) + ] + + + momentum_beta = 0.9 + momentum = [ + v.assign(v * momentum_beta + g * (1 - momentum_beta)) + for v, g in zip(velocity, grad_ph) + ] + [ + v.assign(v - lr * g) for v, g in zip(trainables, velocity) + ] + + sess.run(tf.compat.v1.global_variables_initializer()) + + flog = open('rolling_{}.log'.format(max_speed), 'w') + for i in range(100000): + t = time.time() + print('Epoch {:5d}, learning rate {}'.format(i, lr)) + + tt = time.time() + memo = sim.run( + initial_state = initial_state, + num_steps = steps, + iteration_feed_dict = {goal: goal_input}, + loss = loss, + stepwise_loss = [state_sum, state_norm]) + print('forward', time.time() - tt) + + + if False:# i % 10 == 0: + tt = time.time() + sim.visualize(memo, show = False, interval = 1, export = exp) + print('visualize', time.time() - tt) + if memo.loss < 1e-3: + break + + tt = time.time() + grad = sim.eval_gradients(sym=sym, memo=memo) + print('eval_gradients', time.time() - tt) + + tt = time.time() + grad_feed_dict = {} + tot = 0. + for gp, g in zip(grad_ph, grad): + grad_feed_dict[gp] = g * (np.random.random(g.shape) < 0.8).astype('float32') + tot += (g ** 2).sum() + # if i % 10 == 0: + # grad_feed_dict[gp] += (np.random.random(g.shape) - 0.5) * 0.01 + print('gradient norm', tot ** 0.5) + sess.run(momentum, feed_dict = grad_feed_dict) + print('gradient_descent', time.time() - tt) + # log1 = tf.Print(W1, [W1], 'W1:') + # log2 = tf.Print(b1, [b1], 'b1:') + # sess.run(log1) + # sess.run(log2) + + mean, norm = memo.stepwise_loss + mean /= steps + norm /= steps + model.update_bn(mean, norm, sess) + + # if i % 10 == 0: + if tot ** 0.5 > 100:# i % 10 == 0: + embed() + tt = time.time() + sim.visualize(memo, show = True, interval = 1, export = exp) + sim.visualize(memo, show = False, interval = 1, export = exp) + print('visualize', time.time() - tt) + if memo.loss < 1e-3: + break + + print('Iter {:5d} time {:.3f} loss {}'.format( + i, time.time() - t, memo.loss)) + print(i, memo.loss, file = flog) + flog.flush() + + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/rotating_muscle.py b/tensorflow_graphics/physics/demos/rotating_muscle.py new file mode 100644 index 000000000..400ad25ea --- /dev/null +++ b/tensorflow_graphics/physics/demos/rotating_muscle.py @@ -0,0 +1,158 @@ +import sys +sys.path.append('..') + +import random +import os +import numpy as np +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export +import IPython + +lr = 0.03 +gamma = 0.0 + +sample_density = 20 +group_num_particles = sample_density**2 +goal_pos = np.array([1.4, 0.4]) +goal_range = np.array([0.0, 0.00]) +batch_size = 1 + +config = 'B' + +exp = export.Export('walker_video') + +# Robot B +num_groups = 1 +group_offsets = [(1, 1)] +group_sizes = [(0.5, 1)] +actuations = [0] +fixed_groups = [] +head = 0 +gravity = (0, 0) + +num_particles = group_num_particles * num_groups + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +def main(sess): + t = time.time() + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + # Define your controller here + def controller(state): + actuation = 2 * np.ones(shape=(batch_size, num_groups)) * tf.sin(0.1 * tf.cast(state.get_evaluated()['step_count'], tf.float32)) + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] * 2 + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + # First PK stress here + act = make_matrix2d(zeros, zeros, zeros, act) + # Convert to Kirchhoff stress + total_actuation = total_actuation + act + return total_actuation, 1 + + res = (80, 40) + bc = get_bounding_box_bc(res) + + sim = Simulation( + dt=0.005, + num_particles=num_particles, + grid_res=res, + dx=1.0 / res[1], + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess, + scale=20) + print("Building time: {:.4f}s".format(time.time() - t)) + + s = head * 6 + + initial_positions = [[] for _ in range(batch_size)] + initial_velocity = np.zeros(shape=(batch_size, 2, num_particles)) + for b in range(batch_size): + c = 0 + for i, offset in enumerate(group_offsets): + c += 1 + for x in range(sample_density): + for y in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + initial_positions[b].append([u, v]) + initial_velocity[0, :, c] = (2 * (y - sample_density / 2), -2 * (x - sample_density / 2)) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10, velocity=initial_velocity) + + sim.set_initial_state(initial_state=initial_state) + + gx, gy = goal_range + pos_x, pos_y = goal_pos + goal_train = [np.array( + [[pos_x + (random.random() - 0.5) * gx, + pos_y + (random.random() - 0.5) * gy] for _ in range(batch_size)], + dtype=np.float32) for __ in range(1)] + + vis_id = list(range(batch_size)) + random.shuffle(vis_id) + + # Optimization loop + for i in range(100000): + t = time.time() + print('Epoch {:5d}, learning rate {}'.format(i, lr)) + + print('train...') + for it, goal_input in enumerate(goal_train): + tt = time.time() + memo = sim.run( + initial_state=initial_state, + num_steps=400, + iteration_feed_dict={goal: goal_input}, + ) + print('forward', time.time() - tt) + tt = time.time() + print('backward', time.time() - tt) + + sim.visualize(memo, batch=random.randrange(batch_size), export=exp, + show=True, interval=4) + #exp.export() + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/test_finger.py b/tensorflow_graphics/physics/demos/test_finger.py new file mode 100644 index 000000000..a83bfd1ef --- /dev/null +++ b/tensorflow_graphics/physics/demos/test_finger.py @@ -0,0 +1,3 @@ +import gym +import walker +env = gym.make('FingerEnv-v0') diff --git a/tensorflow_graphics/physics/demos/test_walker.py b/tensorflow_graphics/physics/demos/test_walker.py new file mode 100644 index 000000000..4e9ee2a29 --- /dev/null +++ b/tensorflow_graphics/physics/demos/test_walker.py @@ -0,0 +1,3 @@ +import gym +import walker +env = gym.make('WalkerEnv-v0') diff --git a/tensorflow_graphics/physics/demos/visualize_training_curve.py b/tensorflow_graphics/physics/demos/visualize_training_curve.py new file mode 100644 index 000000000..067f6494e --- /dev/null +++ b/tensorflow_graphics/physics/demos/visualize_training_curve.py @@ -0,0 +1,13 @@ +import matplotlib.pyplot as plt + +file_name = 'rolling_0.3.log' +fin = open(file_name, 'r') + +x, y = [], [] +for line in fin: + xx, yy = line[:-1].split(' ') + x.append(int(xx)) + y.append(float(yy)) + +plt.plot(x, y) +plt.show() diff --git a/tensorflow_graphics/physics/demos/walker/__init__.py b/tensorflow_graphics/physics/demos/walker/__init__.py new file mode 100644 index 000000000..97d0daaa1 --- /dev/null +++ b/tensorflow_graphics/physics/demos/walker/__init__.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + +from gym.envs.registration import register + +register( + id='WalkerEnv-v0', + entry_point='walker.walker_env:WalkerEnv', +) diff --git a/tensorflow_graphics/physics/demos/walker/walker_env.py b/tensorflow_graphics/physics/demos/walker/walker_env.py new file mode 100644 index 000000000..9bd1ceb12 --- /dev/null +++ b/tensorflow_graphics/physics/demos/walker/walker_env.py @@ -0,0 +1,107 @@ +import math +import gym +from gym import spaces, logger +from gym.utils import seeding +import numpy as np +import walker_sim as w_s +import IPython + +goal_ball = 0.001 +class WalkerEnv(gym.Env): + def __init__(self): + ''' + max_act = m-d array, where m is number of actuators + max_obs is n-d array, where n is the state space of the robot. Assumes 0 is the minimum observation + init_state is the initial state of the entire robot + ''' + max_act = np.ones(4) * 1000.0 + max_obs = np.ones(42) * 2.0 + goal_input = np.expand_dims(w_s.goal_pos, axis=0) + + + + self.action_space = spaces.Box(-max_act, max_act) + self.observation_space = spaces.Box(np.zeros(42), max_obs) + self.seed() + + self.iter_ = 0 + + self.state = None + self.goal_input = goal_input + + self.init_state, self.sim, self.loss, self.obs = w_s.generate_sim() + self.sim.set_initial_state(initial_state=self.init_state) + + def seed(self, seed=None): + self.np_random, seed = seeding.np_random(seed) + return [seed] + + def reset(self): + self.state = self.init_state + self.sim.set_initial_state(initial_state = self.init_state) + zero_act = np.expand_dims(np.zeros(self.action_space.shape), axis=0) + #We need to step forward and get the observation + #IPython.embed() + memo_obs = self.sim.run( + initial_state=self.state, + num_steps=1, + iteration_feed_dict={w_s.goal: self.goal_input, w_s.actuation: zero_act}, + loss=self.obs) + + print('reset') + return memo_obs.loss + + def step(self, action): + action_ = np.expand_dims(action, axis=0) + #1. sim forward + memo = self.sim.run( + initial_state=self.state, + num_steps=1, + iteration_feed_dict={w_s.goal: self.goal_input, w_s.actuation: action_}, + loss=self.loss) + + memo_obs = self.sim.run( + initial_state=self.state, + num_steps=1, + iteration_feed_dict={w_s.goal: self.goal_input, w_s.actuation: action_}, + loss=self.obs) + + if self.iter_ % 10 == 0: + self.sim.visualize(memo, show=True) + + + #2. update state + #TODO: update state + self.state = memo.steps[-1] + + obs = memo_obs.loss.flatten() + + + #3. calculate reward as velocity toward the goal + reward = memo.loss + #print(reward) + + #TODO: 4. return if we're exactly at the goal and give a bonus to reward if we are + success = np.linalg.norm(obs[18:20] - self.goal_input) < goal_ball #TODO: unhardcode + if self.iter_ == 799: + self.iter_ = -1 + fail = True + else: + fail = False + + if success: + reward += 1 + elif fail: + reward -= 1 + + self.iter_ += 1 + + done = fail or success + + self.memo = memo + + #print(reward) + return obs, reward, done, {} + + def render(self): + sim.visualize(self.memo, 1,show=True, export=w_s.exp, interval=1) diff --git a/tensorflow_graphics/physics/demos/walker/walker_sim.py b/tensorflow_graphics/physics/demos/walker/walker_sim.py new file mode 100644 index 000000000..6e1e3cf27 --- /dev/null +++ b/tensorflow_graphics/physics/demos/walker/walker_sim.py @@ -0,0 +1,175 @@ +import sys +sys.path.append('..') + +import random +import os +import numpy as np +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export +import IPython + + +lr = 0.03 +gamma = 0.0 + +sample_density = 20 +group_num_particles = sample_density**2 +goal_pos = np.array([1.4, 0.4]) +goal_range = np.array([0.0, 0.00]) +batch_size = 1 +actuation_strength = 4 + +config = 'B' + +exp = export.Export('walker_data') + +# Robot B +num_groups = 7 +group_offsets = [(0, 0), (0.5, 0), (0, 1), (1, 1), (2, 1), (2, 0), (2.5, 0)] +group_sizes = [(0.5, 1), (0.5, 1), (1, 1), (1, 1), (1, 1), (0.5, 1), (0.5, 1)] +actuations = [0, 1, 5, 6] +fixed_groups = [] +head = 3 +gravity = (0, -2) + +num_particles = group_num_particles * num_groups + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) +sess_config.gpu_options.allow_growth = True +sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + +sess = tf.compat.v1.Session(config=sess_config) + +goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') +actuation = tf.compat.v1.placeholder(dtype=tf.float32, shape=[1, len(actuations)], name='act') + +def generate_sim(): + #utility function for ppo + t = time.time() + + + + # Define your controller here + + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + controller_inputs.append(goal) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) + # Batch, 6 * num_groups, 1 + #IPython.embed() + + debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + # First PK stress here + act = make_matrix2d(zeros, zeros, zeros, act) + # Convert to Kirchhoff stress + total_actuation = total_actuation + act + return total_actuation, debug + + + res = (80, 40) + bc = get_bounding_box_bc(res) + dt = 0.005 + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + dx=1.0 / res[1], + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess, + scale=20) + print("Building time: {:.4f}s".format(time.time() - t)) + + final_state = sim.initial_state['debug']['controller_inputs'] + s = head * 6 + + final_position = final_state[:, s:s+2] + final_velocity = final_state[:, s + 2: s + 4] + loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) + loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) + + + loss_x = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_position[0, 0])) + loss_y = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_position[0, 1])) + + + loss_obs = final_state + loss_fwd = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_state[:, s+2:s + 3], axis=1)) * dt + + loss = loss_fwd #really, the reward forward + + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + initial_positions[b].append([u, v]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10) + + #trainables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES) + + sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) + sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) + + + return initial_state, sim, loss, loss_obs + +#if __name__ == '__main__': + diff --git a/tensorflow_graphics/physics/demos/walker_2d.py b/tensorflow_graphics/physics/demos/walker_2d.py new file mode 100644 index 000000000..19efd44f0 --- /dev/null +++ b/tensorflow_graphics/physics/demos/walker_2d.py @@ -0,0 +1,219 @@ +import sys +sys.path.append('..') + +import random +import os +import numpy as np +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export +import IPython + +lr = 0.03 +gamma = 0.0 + +sample_density = 20 +group_num_particles = sample_density**2 +goal_pos = np.array([1.4, 0.4]) +goal_range = np.array([0.0, 0.00]) +batch_size = 1 +actuation_strength = 3 + +config = 'B' + +exp = export.Export('walker_2d') + +# Robot B +num_groups = 7 +group_offsets = [(0, 0), (0.5, 0), (0, 1), (1, 1), (2, 1), (2, 0), (2.5, 0)] +group_sizes = [(0.5, 1), (0.5, 1), (1, 1), (1, 1), (1, 1), (0.5, 1), (0.5, 1)] +actuations = [0, 1, 5, 6] +fixed_groups = [] +head = 3 +gravity = (0, -2) + +num_particles = group_num_particles * num_groups + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +def main(sess): + t = time.time() + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + + # Define your controller here + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + controller_inputs.append((goal - goal_pos) / np.maximum(goal_range, 1e-5)) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) + # Batch, 6 * num_groups, 1 + intermediate = tf.matmul(W1[None, :, :] + + tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) + # Batch, #actuations, 1 + assert intermediate.shape == (batch_size, len(actuations), 1) + assert intermediate.shape[2] == 1 + intermediate = intermediate[:, :, 0] + # Batch, #actuations + actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength + debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + # First PK stress here + act = make_matrix2d(zeros, zeros, zeros, act) + # Convert to Kirchhoff stress + F = state['deformation_gradient'] + total_actuation = total_actuation + act + return total_actuation, debug + + res = (80, 40) + bc = get_bounding_box_bc(res) + + sim = Simulation( + dt=0.005, + num_particles=num_particles, + grid_res=res, + dx=1.0 / res[1], + gravity=gravity, + controller=controller, + batch_size=batch_size, + bc=bc, + sess=sess, + scale=20, + part_size = 10) + print("Building time: {:.4f}s".format(time.time() - t)) + + final_state = sim.initial_state['debug']['controller_inputs'] + s = head * 6 + + final_position = final_state[:, s:s+2] + final_velocity = final_state[:, s + 2: s + 4] + loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=-final_position[:, 0])) + loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) + + saver = tf.compat.v1.train.Saver() + + loss = loss1 + gamma * loss2 + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + initial_positions[b].append([u, v]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state=initial_state) + + tt = time.time() + sym = sim.gradients_sym(loss, variables=trainables) + print('sym', time.time() - tt) + #sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) + sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) + + sim.add_point_visualization(pos=final_position, color=(1, 0, 0), radius=3) + + gx, gy = goal_range + pos_x, pos_y = goal_pos + goal_train = [np.array( + [[pos_x + (random.random() - 0.5) * gx, + pos_y + (random.random() - 0.5) * gy] for _ in range(batch_size)], + dtype=np.float32) for __ in range(1)] + + vis_id = list(range(batch_size)) + random.shuffle(vis_id) + grad_ph = [ + tf.compat.v1.placeholder(shape = v.shape, dtype = tf.float32) for v in trainables + ] + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad_ph) + ] + + # Optimization loop + for e in range(200): + t = time.time() + print('Epoch {:5d}, learning rate {}'.format(e, lr)) + + loss_cal = 0. + print('train...') + for it, goal_input in enumerate(goal_train): + tt = time.time() + memo = sim.run( + initial_state=initial_state, + num_steps=800, + iteration_feed_dict={goal: goal_input}, + loss=loss) + print('forward', time.time() - tt) + tt = time.time() + grad = sim.eval_gradients(sym=sym, memo=memo) + print('eval_gradients', time.time() - tt) + tt = time.time() + + grad_feed_dict = {} + for gp, g in zip(grad_ph, grad): + grad_feed_dict[gp] = g + sess.run(gradient_descent, feed_dict = grad_feed_dict) + print('gradient_descent', time.time() - tt) + print('Iter {:5d} time {:.3f} loss {}'.format( + it, time.time() - t, memo.loss)) + loss_cal = loss_cal + memo.loss + save_path = saver.save(sess, "./models/walker_2d.ckpt") + print("Model saved in path: %s" % save_path) + sim.visualize(memo, batch=random.randrange(batch_size), export=None, + show=True, interval=4) + print('train loss {}'.format(loss_cal / len(goal_train))) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/walker_3d.py b/tensorflow_graphics/physics/demos/walker_3d.py new file mode 100644 index 000000000..552a940c4 --- /dev/null +++ b/tensorflow_graphics/physics/demos/walker_3d.py @@ -0,0 +1,293 @@ +import sys +sys.path.append('..') + +import random +import os +import numpy as np +from simulation import Simulation, get_bounding_box_bc +import time +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' +import tensorflow as tf +import tensorflow.contrib.layers as ly +from vector_math import * +import export +import IPython + +lr = 1 +gamma = 0.0 + +sample_density = 30 +group_num_particles = sample_density**3 +goal_pos = np.array([1.4, 0.4, 0.5]) +goal_range = np.array([0.0, 0.0, 0.0]) +batch_size = 1 + +actuation_strength = 2 + + +config = 'C' + +exp = export.Export('walker3d') + +# Robot B +if config == 'B': + num_groups = 7 + group_offsets = [(0, 0, 0), (0.5, 0, 0), (0, 1, 0), (1, 1, 0), (2, 1, 0), (2, 0, 0), (2.5, 0, 0)] + group_sizes = [(0.5, 1, 1), (0.5, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (0.5, 1, 1), (0.5, 1, 1)] + actuations = [0, 1, 5, 6] + fixed_groups = [] + head = 3 + gravity = (0, -2, 0) + + + +#TODO: N-Ped +#Robot C +else: + + num_leg_pairs = 2 + + act_x = 0.5 + act_y = 0.7 + act_z = 0.5 + + x = 3 + z = 3 + thick = 0.5 + + + group_offsets = [] + for x_i in np.linspace(0, x - 2*act_x, num_leg_pairs): + + group_offsets += [(x_i, 0, 0)] + group_offsets += [(x_i + act_x, 0, 0)] + group_offsets += [(x_i, 0, act_z)] + group_offsets += [(x_i + act_x, 0, act_z)] + + group_offsets += [(x_i + act_x, 0, z - act_z)] + group_offsets += [(x_i, 0, z - 2 * act_z)] + group_offsets += [(x_i + act_x, 0, z - 2 * act_z)] + group_offsets += [(x_i, 0, z - act_z)] + + ''' + group_offsets += [(x - 2 * act_x, 0, 0)] + group_offsets += [(x - act_x, 0, 0)] + group_offsets += [(x - 2 * act_x, 0, act_z)] + group_offsets += [(x - act_x, 0, act_z)] + + group_offsets += [(x - 2 * act_x, 0, z - act_z)] + group_offsets += [(x - act_x, 0, z - 2 * act_z)] + group_offsets += [(x - 2 * act_x, 0, z - 2 * act_z)] + group_offsets += [(x - act_x, 0, z - act_z)] + ''' + + + + for i in range(int(z)): + for j in range(int(x)): + group_offsets += [(j, act_y, i)] + num_groups = len(group_offsets) + + #group_offsets += [(0.0, 1.0, 0.0)] + num_particles = group_num_particles * num_groups + group_sizes = [(act_x, act_y, act_z)] * num_leg_pairs * 2 * 4 + [(1.0, 1.0, 1.0)] * int(x) * int(z) + actuations = list(range(8 * num_leg_pairs)) + fixed_groups = [] + head = int(8 * num_leg_pairs + x / 2 * z + z/2) + gravity = (0, -2, 0) + +#IPython.embed() + + +num_particles = group_num_particles * num_groups +print(num_particles) + + +def particle_mask(start, end): + r = tf.range(0, num_particles) + return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] + + +def particle_mask_from_group(g): + return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) + + +# NN weights +W1 = tf.Variable( + 0.02 * tf.random.normal(shape=(len(actuations), 9 * len(group_sizes))), + trainable=True) +b1 = tf.Variable([0.0] * len(actuations), trainable=True) + + +def main(sess): + t = time.time() + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') + + # Define your controller here + def controller(state): + controller_inputs = [] + for i in range(num_groups): + mask = particle_mask(i * group_num_particles, + (i + 1) * group_num_particles)[:, None, :] * ( + 1.0 / group_num_particles) + pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) + vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) + controller_inputs.append(pos) + controller_inputs.append(vel) + controller_inputs.append((goal - goal_pos) / np.maximum(goal_range, 1e-5)) + # Batch, dim + controller_inputs = tf.concat(controller_inputs, axis=1) + assert controller_inputs.shape == (batch_size, 9 * num_groups), controller_inputs.shape + controller_inputs = controller_inputs[:, :, None] + assert controller_inputs.shape == (batch_size, 9 * num_groups, 1) + # Batch, 6 * num_groups, 1 + intermediate = tf.matmul(W1[None, :, :] + + tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) + # Batch, #actuations, 1 + assert intermediate.shape == (batch_size, len(actuations), 1) + assert intermediate.shape[2] == 1 + intermediate = intermediate[:, :, 0] + # Batch, #actuations + actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength + debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} + total_actuation = 0 + zeros = tf.zeros(shape=(batch_size, num_particles)) + for i, group in enumerate(actuations): + act = actuation[:, i:i+1] + assert len(act.shape) == 2 + mask = particle_mask_from_group(group) + act = act * mask + act = make_matrix3d(zeros, zeros, zeros, zeros, act, zeros, zeros, zeros, zeros) + total_actuation = total_actuation + act + return total_actuation, debug + + res = (60, 30, 30) + bc = get_bounding_box_bc(res) + + sim = Simulation( + dt=0.007, + num_particles=num_particles, + grid_res=res, + dx=1.0 / res[1], + gravity=gravity, + controller=None, #controller, + batch_size=batch_size, + bc=bc, + sess=sess, + E=15, + part_size = 10) + print("Building time: {:.4f}s".format(time.time() - t)) + tt = time.time() + memo = sim.run( + initial_state=initial_state, + num_steps=400, + iteration_feed_dict={goal: goal_input}, + loss=loss) + print('forward', time.time() - tt) + tt = time.time() + + final_state = sim.initial_state['debug']['controller_inputs'] + s = head * 9 + + final_position = final_state[:, s:s+3] + final_velocity = final_state[:, s + 3: s + 6] + loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) + loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) + + loss = loss1 + gamma * loss2 + + initial_positions = [[] for _ in range(batch_size)] + for b in range(batch_size): + for i, offset in enumerate(group_offsets): + for x in range(sample_density): + for y in range(sample_density): + for z in range(sample_density): + scale = 0.2 + u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] + ) * scale + 0.2 + v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] + ) * scale + 0.1 + w = ((z + 0.5) / sample_density * group_sizes[i][2] + offset[2] + ) * scale + 0.1 + initial_positions[b].append([u, v, w]) + assert len(initial_positions[0]) == num_particles + initial_positions = np.array(initial_positions).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=np.array(initial_positions), youngs_modulus=10) + + trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) + sim.set_initial_state(initial_state=initial_state) + + tt = time.time() + sym = sim.gradients_sym(loss, variables=trainables) + print('sym', time.time() - tt) + + gx, gy, gz = goal_range + pos_x, pos_y, pos_z = goal_pos + goal_train = [np.array( + [[pos_x + (random.random() - 0.5) * gx, + pos_y + (random.random() - 0.5) * gy, + pos_z + (random.random() - 0.5) * gz + ] for _ in range(batch_size)], + dtype=np.float32) for __ in range(1)] + + vis_id = list(range(batch_size)) + random.shuffle(vis_id) + grad_ph = [ + tf.compat.v1.placeholder(shape = v.shape, dtype = tf.float32) for v in trainables + ] + gradient_descent = [ + v.assign(v - lr * g) for v, g in zip(trainables, grad_ph) + ] + + # Optimization loop + for e in range(200): + t = time.time() + print('Epoch {:5d}, learning rate {}'.format(e, lr)) + + loss_cal = 0. + print('train...') + for it, goal_input in enumerate(goal_train): + tt = time.time() + memo = sim.run( + initial_state=initial_state, + num_steps=400, + iteration_feed_dict={goal: goal_input}, + loss=loss) + print('forward', time.time() - tt) + tt = time.time() + grad = sim.eval_gradients(sym=sym, memo=memo) + print('backward', time.time() - tt) + + for i, g in enumerate(grad): + print(i, np.mean(np.abs(g))) + grad = [np.clip(g, -1, 1) for g in grad] + + + grad_feed_dict = {} + for gp, g in zip(grad_ph, grad): + grad_feed_dict[gp] = g + sess.run(gradient_descent, feed_dict = grad_feed_dict) + print('Iter {:5d} time {:.3f} loss {}'.format( + it, time.time() - t, memo.loss)) + loss_cal = loss_cal + memo.loss + ''' + if e % 1 == 0: + sim.visualize(memo, batch=random.randrange(batch_size), export=None, + show=True, interval=5, folder='walker3d_demo/{:04d}/'.format(e)) + ''' + +#exp.export() + print('train loss {}'.format(loss_cal / len(goal_train))) + +if __name__ == '__main__': + sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) + sess_config.gpu_options.allow_growth = True + sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 + + with tf.compat.v1.Session(config=sess_config) as sess: + main(sess=sess) diff --git a/tensorflow_graphics/physics/docs/API.rst b/tensorflow_graphics/physics/docs/API.rst new file mode 100644 index 000000000..b7b2fbad9 --- /dev/null +++ b/tensorflow_graphics/physics/docs/API.rst @@ -0,0 +1,76 @@ +API +================================== + +Initialization +--------------------- +Initial states of a simulation consist of particle positions and velocities (by default, zero). +You will need to feed these values to `tensorflow` as inputs, e.g.: + +.. code-block:: python + + initial_velocity = np.zeros(shape=[1, num_particles, 2]) + initial_position = # Initial positions of your particles + + feed_dict = { + sim.initial_state.velocity: + initial_velocity, + sim.initial_state.position: + initial_positions, + sim.initial_state.deformation_gradient: + identity_matrix + + np.zeros(shape=(sim.batch_size, num_particles, 1, 1)), + } + loss_evaluated, _ = sess.run([loss, opt], feed_dict=feed_dict) + + +Defining a controller based on simulation states +--------------------------------------------------------- + +A simulation consists of a series of states, one per time step. + +You can get the (symbolic) simulation from `sim.states` to define the loss. + +.. code-block:: python + + # This piece of code is for illustration only. I've never tested it. + # See jump.py for a working example. + + from simulation import Simulation + + # The controller takes previous states as input and generates an actuation + # and debug information + def controller(previous_state): + average_y = tf.reduce_sum(previous_state.position[:, :, 1], axis=(1,), keepdims=False) + # A stupid controller that actuates according to the average y-coord of particles + act = 5 * average_y - 1 + debug = {'actuation': act} + zeros = tf.zeros(shape=(1, num_particles)) + act = act[None, None] + # kirchhoff_stress stress + act = E * make_matrix2d(zeros, zeros, zeros, act) + # Convert to Kirchhoff stress + actuation = matmatmul( + act, transpose(previous_state['deformation_gradient'])) + return actuation, debug + + sim = Simulation( + num_particles=num_particles, + num_time_steps=12, + grid_res=(25, 25), + controller=controller, + gravity=(0, -9.8), + E=E) # Particle Young's modulus + + # Fetch, i.e. the final state + state = sim.states[-1] + # Particle Positions + # Array of float32[batch, particle, dimension=0,1] + state['position'] + + # Particle Velocity + # Array of float32[batch, particle, dimension=0,1] + state['velocity'] # Array of float32[batch, particle, dimension=0,1] + + # Particle Deformation Gradients + # Array of float32[batch, particle, matrix dimension0=0,1, matrix dimension1=0,1] + state['deformation_gradient'] diff --git a/tensorflow_graphics/physics/docs/README.md b/tensorflow_graphics/physics/docs/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/tensorflow_graphics/physics/docs/_static/.gitkeep b/tensorflow_graphics/physics/docs/_static/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/tensorflow_graphics/physics/docs/conf.py b/tensorflow_graphics/physics/docs/conf.py new file mode 100644 index 000000000..4eb8c60fc --- /dev/null +++ b/tensorflow_graphics/physics/docs/conf.py @@ -0,0 +1,177 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/stable/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'Differentiable MPM' +copyright = '2018, Yuanming Hu' +author = 'Yuanming Hu' + +# The short X.Y version +version = '' +# The full version, including alpha/beta/rc tags +release = '0.0.1' + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.intersphinx', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinx.ext.githubpages', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'taichidoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'taichi.tex', 'taichi Documentation', + 'Yuanming Hu', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'taichi', 'taichi Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'taichi', 'taichi Documentation', + author, 'taichi', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Extension configuration ------------------------------------------------- + +# -- Options for intersphinx extension --------------------------------------- + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} + +# -- Options for todo extension ---------------------------------------------- + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True \ No newline at end of file diff --git a/tensorflow_graphics/physics/docs/index.rst b/tensorflow_graphics/physics/docs/index.rst new file mode 100644 index 000000000..cf91d4a6f --- /dev/null +++ b/tensorflow_graphics/physics/docs/index.rst @@ -0,0 +1,10 @@ +Differentiable MPM +========================================================= + +.. toctree:: + :caption: GETTING STARTED + :maxdepth: 2 + + installation + API + diff --git a/tensorflow_graphics/physics/docs/installation.rst b/tensorflow_graphics/physics/docs/installation.rst new file mode 100644 index 000000000..9ee3774fb --- /dev/null +++ b/tensorflow_graphics/physics/docs/installation.rst @@ -0,0 +1,21 @@ +Dependency +------------------------------------------------------------------- +`Differentiable MPM` depends on `Python 3` with packages: + - `tensorflow` + - `cv2` + - `numpy` + +We will add CUDA support later. For now the dependency is simple. + +Examples +------------------------------ +Please see `jump.py` + + +Building the documentation +------------------------------------- + +.. code-block:: bash + + sudo pip3 install Sphinx sphinx_rtd_theme + sphinx-build . build diff --git a/tensorflow_graphics/physics/docs/make.bat b/tensorflow_graphics/physics/docs/make.bat new file mode 100644 index 000000000..7c3f11fb7 --- /dev/null +++ b/tensorflow_graphics/physics/docs/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=build +set SPHINXPROJ=Differentiable MPM + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/tensorflow_graphics/physics/external/partio/CMakeLists.txt b/tensorflow_graphics/physics/external/partio/CMakeLists.txt new file mode 100644 index 000000000..6f6ec3232 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/CMakeLists.txt @@ -0,0 +1,39 @@ +# PARTIO SOFTWARE +# Copyright 2010 Disney Enterprises, Inc. All rights reserved +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# * The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +# Studios" or the names of its contributors may NOT be used to +# endorse or promote products derived from this software without +# specific prior written permission from Walt Disney Pictures. +# +# Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +# IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +FILE(GLOB io_cpp "src/io/*.cpp") +FILE(GLOB core_cpp "src/core/*.cpp") +ADD_LIBRARY (partio SHARED ${io_cpp} ${core_cpp}) + +FILE(GLOB public_includes "*.h") + diff --git a/tensorflow_graphics/physics/external/partio/include/Partio.h b/tensorflow_graphics/physics/external/partio/include/Partio.h new file mode 100644 index 000000000..b715835ff --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/include/Partio.h @@ -0,0 +1,275 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +/*! + The interface of the particle API (Partio) + what type the primitive is, how many instances of the primitive there, name of + the attribute and an index which speeds lookups of data +*/ +#ifndef _Partioh_ +#define _Partioh_ + +#include +#include +#include +#include +#include "PartioAttribute.h" +#include "PartioIterator.h" + +namespace Partio{ + +//! Opaque random access method to a single particle. No number is implied or guaranteed. +typedef uint64_t ParticleIndex; + +class ParticlesData; +// Particle Collection Interface +//! Particle Collection Interface +/*! + This class provides ways of accessing basic information about particles, + the number in the set, the attribute names and types, etc. No actual + data can be read or written. +*/ +class ParticlesInfo +{ +protected: + virtual ~ParticlesInfo() {} +public: + friend void freeCached(ParticlesData* particles); + + //! Frees the memory if this particle set was created with create() or release() + //! Reduces reference count if it was obtained with readCached() + //! and if the ref count hits zero, frees the memory + virtual void release() const=0; + + //! Number of particles in the structure. + virtual int numAttributes() const=0; + + //! Number of per-particle attributes. + virtual int numParticles() const=0; + + //! Lookup an attribute by name and store a handle to the attribute. + virtual bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const=0; + + //! Lookup an attribute by index and store a handle to the attribute. + virtual bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const=0; +}; + +// Particle Data Interface +//! Particle Data Interface +/*! + This interface provides the ability to read data attributes for given particles + and search for nearest neighbors using KD-Trees. +*/ +class ParticlesData:public ParticlesInfo +{ +protected: + virtual ~ParticlesData() {} +public: + + typedef ParticleIterator const_iterator; + + //! Fill the user supplied values array with data corresponding to the given + //! list of particles. Specify whether or not your indices are sorted. + //! note if T is void, then type checking is disabled. + template inline void data(const ParticleAttribute& attribute, + const int indexCount,const ParticleIndex* particleIndices,const bool sorted,T* values) + { + assert(typeCheck(attribute.type)); + dataInternalMultiple(attribute,indexCount,particleIndices,sorted,(char*)values); + } + + template inline const T* data(const ParticleAttribute& attribute, + const ParticleIndex particleIndex) const + { + // TODO: add type checking + return static_cast(dataInternal(attribute,particleIndex)); + } + + /// All indexed strings for an attribute + virtual const std::vector& indexedStrs(const ParticleAttribute& attr) const=0; + + /// Looks up the index for a given string for a given attribute, returns -1 if not found + virtual int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const=0; + + //! Fill the user supplied values array with data corresponding to the given + //! list of particles. Specify whether or not your indices are sorted. Attributes + //! that are not floating types are automatically casted before being placed + //! in values. + virtual void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,float* values) const=0; + + //! Find the points within the bounding box specified. + //! Must call sort() before using this function + //! NOTE: points array is not pre-cleared. + virtual void findPoints(const float bboxMin[3],const float bboxMax[3], + std::vector& points) const=0; + + //! Find the N nearest neighbors that are within maxRadius distance using STL types + //! (measured in standard 2-norm). If less than N are found within the + //! radius, the search radius is not increased. + //! NOTE: points/pointsDistancesSquared are cleared before use. + //! Must call sort() before using this function + virtual float findNPoints(const float center[3],int nPoints,const float maxRadius, + std::vector& points,std::vector& pointDistancesSquared) const=0; + + //! Find the N nearest neighbors that are within maxRadius distance using POD types + //! NOTE: returns the number of found points and leaves in finalRadius2 the + //! square of the final search radius used + virtual int findNPoints(const float center[3],int nPoints,const float maxRadius, + ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const=0; + + //! Produce a const iterator + virtual const_iterator setupConstIterator() const=0; + + //! Produce a beginning iterator for the particles + const_iterator begin() const + {return setupConstIterator();} + + //! Produce a ending iterator for the particles + const_iterator end() const + {return const_iterator();} + +private: + virtual void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const=0; + virtual void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,char* values) const=0; +}; + +// Particle Mutable Data Interface +//! Particle Mutable Data Interface +/*! + This interface provides the ability to write data attributes, add attributes, + add particles, etc. +*/ +class ParticlesDataMutable:public ParticlesData +{ +protected: + virtual ~ParticlesDataMutable(){} + +public: + + typedef ParticleIterator iterator; + + //! Get a pointer to the data corresponding to the given particleIndex and + //! attribute given by the attribute handle. + template inline T* dataWrite(const ParticleAttribute& attribute, + const ParticleIndex particleIndex) const + { + // TODO: add type checking + return static_cast(dataInternal(attribute,particleIndex)); + } + + /// Returns a token for the given string. This allows efficient storage of string data + virtual int registerIndexedStr(const ParticleAttribute& attribute,const char* str)=0; + + //! Preprocess the data for finding nearest neighbors by sorting into a + //! KD-Tree. Note: all particle pointers are invalid after this call. + virtual void sort()=0; + + //! Adds an attribute to the particle with the provided name, type and count + virtual ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type, + const int count)=0; + + //! Add a particle to the particle set. Returns the offset to the particle + virtual ParticleIndex addParticle()=0; + + //! Add a set of particles to the particle set. Returns the offset to the + //! first particle + virtual iterator addParticles(const int count)=0; + + //! Produce a beginning iterator for the particles + iterator begin() + {return setupIterator();} + + //! Produce a ending iterator for the particles + iterator end() + {return iterator();} + + //! Produce a const iterator + virtual iterator setupIterator()=0; + +private: + virtual void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const=0; +}; + +//! Provides an empty particle instance, freed with p->release() +ParticlesDataMutable* create(); + +ParticlesDataMutable* createInterleave(); + +//! Provides read/write access to a particle set stored in a file +//! freed with p->release() +ParticlesDataMutable* read(const char* filename); + +//! Provides read access to a particle headers (number of particles +//! and attribute information, much cheapeer +ParticlesInfo* readHeaders(const char* filename); + +//! Provides access to a particle set stored in a file +//! if filename ends with .gz or forceCompressed is true, the file is compressed. +void write(const char* filename,const ParticlesData&,const bool forceCompressed=false); + + +//! Cached (only one copy) read only way to read a particle file +/*! + Loads a file read-only if not already in memory, otherwise returns + already loaded item. Pointer is owned by Partio and must be releasedwith + p->release(); (will not be deleted if others are also holding). + If you want to do finding neighbors give true to sort +*/ +ParticlesData* readCached(const char* filename,const bool sort); + +//! Begin accessing data in a cached file +/*! + Indicates to Partio that data access from a cached particle set will + start. The sent in particles pointer must be from a readCached() + call, not from read() or create(). Attributes can be read before this call. +*/ +void beginCachedAccess(ParticlesData* particles); + +//! End accessing data in a cached file +/*! + Indicates to Partio that data from a cached particle read will + end. The sent in particles pointer must be from a readCached() + call, not from read() or create(). This allows the particle API + to free all data pages, if they are needed. +*/ +void endCachedAccess(ParticlesData* particles); + +//! Prints a subset of particle data in a textual form +void print(const ParticlesData* particles); + +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/include/PartioAttribute.h b/tensorflow_graphics/physics/external/partio/include/PartioAttribute.h new file mode 100644 index 000000000..2026c878f --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/include/PartioAttribute.h @@ -0,0 +1,116 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +/*! + The interface of the particle API (Partio) + what type the primitive is, how many instances of the primitive there, name of + the attribute and an index which speeds lookups of data +*/ + +#ifndef _PartioParticleAttribute_h_ +#define _PartioParticleAttribute_h_ +namespace Partio{ + +// Particle Types +enum ParticleAttributeType {NONE=0,VECTOR=1,FLOAT=2,INT=3,INDEXEDSTR=4}; + +template struct ETYPE_TO_TYPE +{struct UNUSABLE;typedef UNUSABLE TYPE;}; +template<> struct ETYPE_TO_TYPE{typedef float TYPE;}; +template<> struct ETYPE_TO_TYPE{typedef float TYPE;}; +template<> struct ETYPE_TO_TYPE{typedef int TYPE;}; +template<> struct ETYPE_TO_TYPE{typedef int TYPE;}; + +template struct +IS_SAME{static const bool value=false;}; +template struct IS_SAME{static const bool value=true;}; + +template bool +typeCheck(const ParticleAttributeType& type) +{ + // if T is void, don't bother checking what we passed in + if (IS_SAME::value) return true; + switch(type){ + case VECTOR: return IS_SAME::TYPE,T>::value; + case FLOAT: return IS_SAME::TYPE,T>::value; + case INT: return IS_SAME::TYPE,T>::value; + case INDEXEDSTR: return IS_SAME::TYPE,T>::value; + default: return false; // unknown type + } +} + +inline +int TypeSize(ParticleAttributeType attrType) +{ + switch(attrType){ + case NONE: return 0; + case VECTOR: return sizeof(float); + case FLOAT: return sizeof(float); + case INT: return sizeof(int); + case INDEXEDSTR: return sizeof(int); + default: return 0; + } +} + +std::string TypeName(ParticleAttributeType attrType); + +// Particle Attribute Specifier +//! Particle Collection Interface +/*! + This class provides a handle and description of an attribute. This includes + what type the primitive is, how many instances of the primitive there, name of + the attribute and an index which speeds lookups of data +*/ +class ParticleAttribute +{ +public: + //! Type of attribute + ParticleAttributeType type; + + //! Number of entries, should be 3 if type is VECTOR + int count; + + //! Name of attribute + std::string name; + + //! Internal method of fast access, user should not use or change + int attributeIndex; + + //! Comment used by various data/readers for extra attribute information + //! for example for a PTC file to read and write this could be "color" or "point" + // std::string comment; +}; +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/include/PartioIterator.h b/tensorflow_graphics/physics/external/partio/include/PartioIterator.h new file mode 100644 index 000000000..03fa67d33 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/include/PartioIterator.h @@ -0,0 +1,222 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _PartioParticleIterator_h_ +#define _PartioParticleIterator_h_ + +#include +#include +#include +#include "PartioAttribute.h" + +namespace Partio{ + +class ParticlesData; +struct ParticleAccessor; + +//! Data +/*! + This class represents a piece of data stored in a particle attribute. + The only allowed values are float and d +*/ +template +struct Data +{ + T x[d]; + + const T& operator[](const int i) const {return x[i];} + T& operator[](const int i) {return x[i];} +}; +typedef Data DataI; +typedef Data DataF; +typedef Data DataV; + + +template class ParticleIterator; + +struct Provider +{ + virtual void setupIteratorNextBlock(ParticleIterator& iterator) const=0; + virtual void setupIteratorNextBlock(ParticleIterator& iterator)=0; + virtual void setupAccessor(ParticleIterator& iterator,ParticleAccessor& accessor) const=0; + virtual void setupAccessor(ParticleIterator& iterator,ParticleAccessor& accessor)=0; + virtual ~Provider(){} +}; + +template +struct PROVIDER +{ + typedef Provider TYPE; +}; +template<> +struct PROVIDER +{ + typedef const Provider TYPE; +}; + +// TODO: non copyable +struct ParticleAccessor +{ + int stride; + char* basePointer; + int attributeIndex; // index of attribute opaque, do not touch + int count; +private: + ParticleAttributeType type; + + ParticleAccessor* next; + +public: + ParticleAccessor(const ParticleAttribute& attr) + :stride(0),basePointer(0),attributeIndex(attr.attributeIndex), + count(attr.count),type(attr.type),next(0) + {} + + template TDATA* raw(const TITERATOR& it) + {return reinterpret_cast(basePointer+it.index*stride);} + + template const TDATA* raw(const TITERATOR& it) const + {return reinterpret_cast(basePointer+it.index*stride);} + + template TDATA& data(const TITERATOR& it) + {return *reinterpret_cast(basePointer+it.index*stride);} + + template const TDATA& data(const TITERATOR& it) const + {return *reinterpret_cast(basePointer+it.index*stride);} + + friend class ParticleIterator; + friend class ParticleIterator; +}; + + +template +class ParticleIterator +{ +public: +private: + typedef typename PROVIDER::TYPE PROVIDER; + + //! Delegate, null if the iterator is false + PROVIDER* particles; + +public: + //! Start of non-interleaved index of contiguous block + size_t index; +private: + + //! End of non-interleaved index of contiguous block + size_t indexEnd; + + //! This is used for both non-interleaved and interleaved particle attributes + ParticleAccessor* accessors; + +public: + //! Construct an invalid iterator + ParticleIterator() + :particles(0),index(0),indexEnd(0),accessors(0) + {} + + //! Copy constructor. NOTE: Invalidates any accessors that have been registered with it + ParticleIterator(const ParticleIterator& other) + :particles(other.particles),index(other.index),indexEnd(other.indexEnd),accessors(0) + {} + + //! Construct an iterator with iteration parameters. This is typically only + //! called by implementations of Particle (not by users). For users, use + //! begin() and end() on the particle type + ParticleIterator(PROVIDER* particles,size_t index,size_t indexEnd) + :particles(particles),index(index),indexEnd(indexEnd) + {} + + //! Whether the iterator is valid + bool valid() const + {return particles;} + + //! Increment the iterator (postfix). Prefer the prefix form below to this one. + ParticleIterator operator++(int) + { + ParticleIterator newIt(*this); + index++; + return newIt; + } + + //! Increment the iterator (prefix). + ParticleIterator& operator++() + { + index++; + // TODO: make particles==0 check unnecessary by using indexEnd=0 to signify invalid iterator + if((index>indexEnd) && particles) particles->setupIteratorNextBlock(*this); + return *this; + } + + //! Iterator comparison equals + bool operator==(const ParticleIterator& other) + { + // TODO: this is really really expensive + // TODO: this needs a block or somethingt o say which segment it is + return particles==other.particles && index==other.index; + } + + //! Iterator comparison not-equals + bool operator!=(const ParticleIterator& other) + { + if(other.particles!=particles) return true; // if not same delegate + else if(particles==0) return false; // if both are invalid iterators + else return !(*this==other); + } + + void addAccessor(ParticleAccessor& newAccessor) + { + newAccessor.next=accessors; + accessors=&newAccessor; + if(particles) particles->setupAccessor(*this,newAccessor); + } + + + // TODO: add copy constructor that wipes out accessor linked list + +}; + +template +std::ostream& operator<<(std::ostream& output,const Data& v) +{ + output< +#include +#include +#include +#include "PartioAttribute.h" +#include "PartioIterator.h" + +namespace Partio{ + +//! Opaque random access method to a single particle. No number is implied or guaranteed. +typedef uint64_t ParticleIndex; + +class ParticlesData; +// Particle Collection Interface +//! Particle Collection Interface +/*! + This class provides ways of accessing basic information about particles, + the number in the set, the attribute names and types, etc. No actual + data can be read or written. +*/ +class ParticlesInfo +{ +protected: + virtual ~ParticlesInfo() {} +public: + friend void freeCached(ParticlesData* particles); + + //! Frees the memory if this particle set was created with create() or release() + //! Reduces reference count if it was obtained with readCached() + //! and if the ref count hits zero, frees the memory + virtual void release() const=0; + + //! Number of particles in the structure. + virtual int numAttributes() const=0; + + //! Number of per-particle attributes. + virtual int numParticles() const=0; + + //! Lookup an attribute by name and store a handle to the attribute. + virtual bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const=0; + + //! Lookup an attribute by index and store a handle to the attribute. + virtual bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const=0; +}; + +// Particle Data Interface +//! Particle Data Interface +/*! + This interface provides the ability to read data attributes for given particles + and search for nearest neighbors using KD-Trees. +*/ +class ParticlesData:public ParticlesInfo +{ +protected: + virtual ~ParticlesData() {} +public: + + typedef ParticleIterator const_iterator; + + //! Fill the user supplied values array with data corresponding to the given + //! list of particles. Specify whether or not your indices are sorted. + //! note if T is void, then type checking is disabled. + template inline void data(const ParticleAttribute& attribute, + const int indexCount,const ParticleIndex* particleIndices,const bool sorted,T* values) + { + assert(typeCheck(attribute.type)); + dataInternalMultiple(attribute,indexCount,particleIndices,sorted,(char*)values); + } + + template inline const T* data(const ParticleAttribute& attribute, + const ParticleIndex particleIndex) const + { + // TODO: add type checking + return static_cast(dataInternal(attribute,particleIndex)); + } + + /// All indexed strings for an attribute + virtual const std::vector& indexedStrs(const ParticleAttribute& attr) const=0; + + /// Looks up the index for a given string for a given attribute, returns -1 if not found + virtual int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const=0; + + //! Fill the user supplied values array with data corresponding to the given + //! list of particles. Specify whether or not your indices are sorted. Attributes + //! that are not floating types are automatically casted before being placed + //! in values. + virtual void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,float* values) const=0; + + //! Find the points within the bounding box specified. + //! Must call sort() before using this function + //! NOTE: points array is not pre-cleared. + virtual void findPoints(const float bboxMin[3],const float bboxMax[3], + std::vector& points) const=0; + + //! Find the N nearest neighbors that are within maxRadius distance using STL types + //! (measured in standard 2-norm). If less than N are found within the + //! radius, the search radius is not increased. + //! NOTE: points/pointsDistancesSquared are cleared before use. + //! Must call sort() before using this function + virtual float findNPoints(const float center[3],int nPoints,const float maxRadius, + std::vector& points,std::vector& pointDistancesSquared) const=0; + + //! Find the N nearest neighbors that are within maxRadius distance using POD types + //! NOTE: returns the number of found points and leaves in finalRadius2 the + //! square of the final search radius used + virtual int findNPoints(const float center[3],int nPoints,const float maxRadius, + ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const=0; + + //! Produce a const iterator + virtual const_iterator setupConstIterator() const=0; + + //! Produce a beginning iterator for the particles + const_iterator begin() const + {return setupConstIterator();} + + //! Produce a ending iterator for the particles + const_iterator end() const + {return const_iterator();} + +private: + virtual void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const=0; + virtual void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,char* values) const=0; +}; + +// Particle Mutable Data Interface +//! Particle Mutable Data Interface +/*! + This interface provides the ability to write data attributes, add attributes, + add particles, etc. +*/ +class ParticlesDataMutable:public ParticlesData +{ +protected: + virtual ~ParticlesDataMutable(){} + +public: + + typedef ParticleIterator iterator; + + //! Get a pointer to the data corresponding to the given particleIndex and + //! attribute given by the attribute handle. + template inline T* dataWrite(const ParticleAttribute& attribute, + const ParticleIndex particleIndex) const + { + // TODO: add type checking + return static_cast(dataInternal(attribute,particleIndex)); + } + + /// Returns a token for the given string. This allows efficient storage of string data + virtual int registerIndexedStr(const ParticleAttribute& attribute,const char* str)=0; + + //! Preprocess the data for finding nearest neighbors by sorting into a + //! KD-Tree. Note: all particle pointers are invalid after this call. + virtual void sort()=0; + + //! Adds an attribute to the particle with the provided name, type and count + virtual ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type, + const int count)=0; + + //! Add a particle to the particle set. Returns the offset to the particle + virtual ParticleIndex addParticle()=0; + + //! Add a set of particles to the particle set. Returns the offset to the + //! first particle + virtual iterator addParticles(const int count)=0; + + //! Produce a beginning iterator for the particles + iterator begin() + {return setupIterator();} + + //! Produce a ending iterator for the particles + iterator end() + {return iterator();} + + //! Produce a const iterator + virtual iterator setupIterator()=0; + +private: + virtual void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const=0; +}; + +//! Provides an empty particle instance, freed with p->release() +ParticlesDataMutable* create(); + +ParticlesDataMutable* createInterleave(); + +//! Provides read/write access to a particle set stored in a file +//! freed with p->release() +ParticlesDataMutable* read(const char* filename); + +//! Provides read access to a particle headers (number of particles +//! and attribute information, much cheapeer +ParticlesInfo* readHeaders(const char* filename); + +//! Provides access to a particle set stored in a file +//! if filename ends with .gz or forceCompressed is true, the file is compressed. +void write(const char* filename,const ParticlesData&,const bool forceCompressed=false); + + +//! Cached (only one copy) read only way to read a particle file +/*! + Loads a file read-only if not already in memory, otherwise returns + already loaded item. Pointer is owned by Partio and must be releasedwith + p->release(); (will not be deleted if others are also holding). + If you want to do finding neighbors give true to sort +*/ +ParticlesData* readCached(const char* filename,const bool sort); + +//! Begin accessing data in a cached file +/*! + Indicates to Partio that data access from a cached particle set will + start. The sent in particles pointer must be from a readCached() + call, not from read() or create(). Attributes can be read before this call. +*/ +void beginCachedAccess(ParticlesData* particles); + +//! End accessing data in a cached file +/*! + Indicates to Partio that data from a cached particle read will + end. The sent in particles pointer must be from a readCached() + call, not from read() or create(). This allows the particle API + to free all data pages, if they are needed. +*/ +void endCachedAccess(ParticlesData* particles); + +//! Prints a subset of particle data in a textual form +void print(const ParticlesData* particles); + +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/src/PartioAttribute.h b/tensorflow_graphics/physics/external/partio/src/PartioAttribute.h new file mode 100644 index 000000000..2026c878f --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/PartioAttribute.h @@ -0,0 +1,116 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +/*! + The interface of the particle API (Partio) + what type the primitive is, how many instances of the primitive there, name of + the attribute and an index which speeds lookups of data +*/ + +#ifndef _PartioParticleAttribute_h_ +#define _PartioParticleAttribute_h_ +namespace Partio{ + +// Particle Types +enum ParticleAttributeType {NONE=0,VECTOR=1,FLOAT=2,INT=3,INDEXEDSTR=4}; + +template struct ETYPE_TO_TYPE +{struct UNUSABLE;typedef UNUSABLE TYPE;}; +template<> struct ETYPE_TO_TYPE{typedef float TYPE;}; +template<> struct ETYPE_TO_TYPE{typedef float TYPE;}; +template<> struct ETYPE_TO_TYPE{typedef int TYPE;}; +template<> struct ETYPE_TO_TYPE{typedef int TYPE;}; + +template struct +IS_SAME{static const bool value=false;}; +template struct IS_SAME{static const bool value=true;}; + +template bool +typeCheck(const ParticleAttributeType& type) +{ + // if T is void, don't bother checking what we passed in + if (IS_SAME::value) return true; + switch(type){ + case VECTOR: return IS_SAME::TYPE,T>::value; + case FLOAT: return IS_SAME::TYPE,T>::value; + case INT: return IS_SAME::TYPE,T>::value; + case INDEXEDSTR: return IS_SAME::TYPE,T>::value; + default: return false; // unknown type + } +} + +inline +int TypeSize(ParticleAttributeType attrType) +{ + switch(attrType){ + case NONE: return 0; + case VECTOR: return sizeof(float); + case FLOAT: return sizeof(float); + case INT: return sizeof(int); + case INDEXEDSTR: return sizeof(int); + default: return 0; + } +} + +std::string TypeName(ParticleAttributeType attrType); + +// Particle Attribute Specifier +//! Particle Collection Interface +/*! + This class provides a handle and description of an attribute. This includes + what type the primitive is, how many instances of the primitive there, name of + the attribute and an index which speeds lookups of data +*/ +class ParticleAttribute +{ +public: + //! Type of attribute + ParticleAttributeType type; + + //! Number of entries, should be 3 if type is VECTOR + int count; + + //! Name of attribute + std::string name; + + //! Internal method of fast access, user should not use or change + int attributeIndex; + + //! Comment used by various data/readers for extra attribute information + //! for example for a PTC file to read and write this could be "color" or "point" + // std::string comment; +}; +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/src/PartioIterator.h b/tensorflow_graphics/physics/external/partio/src/PartioIterator.h new file mode 100644 index 000000000..03fa67d33 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/PartioIterator.h @@ -0,0 +1,222 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _PartioParticleIterator_h_ +#define _PartioParticleIterator_h_ + +#include +#include +#include +#include "PartioAttribute.h" + +namespace Partio{ + +class ParticlesData; +struct ParticleAccessor; + +//! Data +/*! + This class represents a piece of data stored in a particle attribute. + The only allowed values are float and d +*/ +template +struct Data +{ + T x[d]; + + const T& operator[](const int i) const {return x[i];} + T& operator[](const int i) {return x[i];} +}; +typedef Data DataI; +typedef Data DataF; +typedef Data DataV; + + +template class ParticleIterator; + +struct Provider +{ + virtual void setupIteratorNextBlock(ParticleIterator& iterator) const=0; + virtual void setupIteratorNextBlock(ParticleIterator& iterator)=0; + virtual void setupAccessor(ParticleIterator& iterator,ParticleAccessor& accessor) const=0; + virtual void setupAccessor(ParticleIterator& iterator,ParticleAccessor& accessor)=0; + virtual ~Provider(){} +}; + +template +struct PROVIDER +{ + typedef Provider TYPE; +}; +template<> +struct PROVIDER +{ + typedef const Provider TYPE; +}; + +// TODO: non copyable +struct ParticleAccessor +{ + int stride; + char* basePointer; + int attributeIndex; // index of attribute opaque, do not touch + int count; +private: + ParticleAttributeType type; + + ParticleAccessor* next; + +public: + ParticleAccessor(const ParticleAttribute& attr) + :stride(0),basePointer(0),attributeIndex(attr.attributeIndex), + count(attr.count),type(attr.type),next(0) + {} + + template TDATA* raw(const TITERATOR& it) + {return reinterpret_cast(basePointer+it.index*stride);} + + template const TDATA* raw(const TITERATOR& it) const + {return reinterpret_cast(basePointer+it.index*stride);} + + template TDATA& data(const TITERATOR& it) + {return *reinterpret_cast(basePointer+it.index*stride);} + + template const TDATA& data(const TITERATOR& it) const + {return *reinterpret_cast(basePointer+it.index*stride);} + + friend class ParticleIterator; + friend class ParticleIterator; +}; + + +template +class ParticleIterator +{ +public: +private: + typedef typename PROVIDER::TYPE PROVIDER; + + //! Delegate, null if the iterator is false + PROVIDER* particles; + +public: + //! Start of non-interleaved index of contiguous block + size_t index; +private: + + //! End of non-interleaved index of contiguous block + size_t indexEnd; + + //! This is used for both non-interleaved and interleaved particle attributes + ParticleAccessor* accessors; + +public: + //! Construct an invalid iterator + ParticleIterator() + :particles(0),index(0),indexEnd(0),accessors(0) + {} + + //! Copy constructor. NOTE: Invalidates any accessors that have been registered with it + ParticleIterator(const ParticleIterator& other) + :particles(other.particles),index(other.index),indexEnd(other.indexEnd),accessors(0) + {} + + //! Construct an iterator with iteration parameters. This is typically only + //! called by implementations of Particle (not by users). For users, use + //! begin() and end() on the particle type + ParticleIterator(PROVIDER* particles,size_t index,size_t indexEnd) + :particles(particles),index(index),indexEnd(indexEnd) + {} + + //! Whether the iterator is valid + bool valid() const + {return particles;} + + //! Increment the iterator (postfix). Prefer the prefix form below to this one. + ParticleIterator operator++(int) + { + ParticleIterator newIt(*this); + index++; + return newIt; + } + + //! Increment the iterator (prefix). + ParticleIterator& operator++() + { + index++; + // TODO: make particles==0 check unnecessary by using indexEnd=0 to signify invalid iterator + if((index>indexEnd) && particles) particles->setupIteratorNextBlock(*this); + return *this; + } + + //! Iterator comparison equals + bool operator==(const ParticleIterator& other) + { + // TODO: this is really really expensive + // TODO: this needs a block or somethingt o say which segment it is + return particles==other.particles && index==other.index; + } + + //! Iterator comparison not-equals + bool operator!=(const ParticleIterator& other) + { + if(other.particles!=particles) return true; // if not same delegate + else if(particles==0) return false; // if both are invalid iterators + else return !(*this==other); + } + + void addAccessor(ParticleAccessor& newAccessor) + { + newAccessor.next=accessors; + accessors=&newAccessor; + if(particles) particles->setupAccessor(*this,newAccessor); + } + + + // TODO: add copy constructor that wipes out accessor linked list + +}; + +template +std::ostream& operator<<(std::ostream& output,const Data& v) +{ + output< +#include +#include +#include +#include + +template class BBox +{ + public: + float min[k]; + float max[k]; + + BBox() { clear(); } + BBox(const float p[k]) { set(p); } + + void set(const float p[k]) + { + for (int i = 0; i < k; i++) { + min[i] = max[i] = p[i]; + } + } + + void clear() + { + for (int i = 0; i < k; i++) { + min[i] = FLT_MAX; + max[i] = FLT_MIN; + } + } + + + void grow(const float p[k]) + { + for (int i = 0; i < k; i++) { + if (p[i] < min[i]) min[i] = p[i]; + if (p[i] > max[i]) max[i] = p[i]; + } + } + + void grow(float R) + { + for (int i = 0; i < k; i++) { + min[i] -= R; + max[i] += R; + } + } + + void grow(const BBox& b) + { + for (int i = 0; i < k; i++) { + if (b.min[i] < min[i]) min[i] = b.min[i]; + if (b.max[i] > max[i]) max[i] = b.max[i]; + } + } + + bool intersects(const BBox& b) const + { + for (int i = 0; i < k; i++) { + if (b.max[i] < min[i] || b.min[i] > max[i]) return 0; + } + return 1; + } + + bool inside(const float p[k]) const + { + for (int i = 0; i < k; i++) { + if (p[i] < min[i] || p[i] > max[i]) return 0; + } + return 1; + } +}; + + +// MAKE-heap on a binary (array based) heap +// loosely based on Henrik Wann Jensen's Photon Mapping book, but made 0-indexed +// and commented +inline float buildHeap(uint64_t *result, float *distance_squared,int heap_size) +{ + int max_non_leaf_index=heap_size/2-1; // 0 to max_non_leaf_index is indices of parents + + // go from bottom of tree scanning right to left in each height of the tree + for(int subtreeParent=max_non_leaf_index;subtreeParent>=0;subtreeParent--){ + int current_parent=subtreeParent; + while(current_parent<=max_non_leaf_index){ + int left_index=2*current_parent+1;int right_index=2*current_parent+2; + // find largest element + int largest_index=current_parent; + if(left_indexdistance_squared[largest_index]) + largest_index=left_index; + if(right_indexdistance_squared[largest_index]) + largest_index=right_index; + // subtree parented at current_parent satisfies heap property because parent has largest + if(largest_index==current_parent) break; + // pull large value up and descend to tree to see if new that subtree is invalid + std::swap(result[largest_index],result[current_parent]); + std::swap(distance_squared[largest_index],distance_squared[current_parent]); + current_parent=largest_index; + } + } + return distance_squared[0]; // return max distance +} + +// Inserts smaller element into heap (does not check so caller must) +inline float insertToHeap(uint64_t *result,float*distance_squared,int heap_size,int new_id,float new_distance_squared) +{ + assert(new_distance_squared=heap_size) break; + else if(right>=heap_size || distance_squared[left]>distance_squared[right]) index_of_largest=left; + else index_of_largest=right; + // new element is largest + if(new_distance_squared>distance_squared[index_of_largest]) break; + // pull the biggest element up and recurse to where it came from + std::swap(result[index_of_largest],result[current_parent]); + std::swap(distance_squared[index_of_largest],distance_squared[current_parent]); + current_parent=index_of_largest; + } + // overwrite current node in tree + distance_squared[current_parent]=new_distance_squared; + result[current_parent]=new_id; + return distance_squared[0]; // return max distance +} + + +template class KdTree +{ + + struct NearestQuery + { + NearestQuery(uint64_t *result,float *distanceSquared,const float pquery_in[k], + int maxPoints,float maxRadiusSquared) + :result(result),distanceSquared(distanceSquared),maxPoints(maxPoints), + foundPoints(0),maxRadiusSquared(maxRadiusSquared) + + {for(int i=0;i& bbox() const { return _bbox; } + const float* point(int i) const { return _points[i].p; } + uint64_t id(int i) const { return _ids[i]; } + void setPoints(const float* p, int n); + void sort(); + void findPoints(std::vector& points, const BBox& bbox) const; + float findNPoints(std::vector& result,std::vector& distanceSquared, + const float p[k],int nPoints,float maxRadius) const; + int findNPoints(uint64_t *result,float *distanceSquared, float *finalSearchRadius2, + const float p[k], int nPoints, float maxRadius) const; + + + private: + void sortSubtree(int n, int count, int j); + struct ComparePointsById { + float* points; + ComparePointsById(float* p) : points(p) {} + bool operator() (int a, int b) { return points[a*k] < points[b*k]; } + }; + void findPoints(std::vector& result, const BBox& bbox, + int n, int size, int j) const; + void findNPoints(NearestQuery& query,int n,int size,int j) const; + + static inline void ComputeSubtreeSizes(int size, int& left, int& right) + { + // if (size+1) is a power of two, then subtree is balanced + bool balanced = ((size+1) & size) == 0; + if (balanced) { + // subtree size = (size-1)/2 + left = right = size>>1; // ignore -1 since size is always odd + } + else if (size == 2) { + // special case + left = 1; + right = 0; + } + else { + // left subtree size = (smallest power of 2 > half size)-1 + int i = 0; + for (int c = size; c != 1; c >>= 1) i++; + left = (1< _bbox; + struct Point { float p[k]; }; + std::vector _points; + std::vector _ids; + bool _sorted; +}; + +template +KdTree::KdTree() + : _sorted(0) +{} + +template +KdTree::~KdTree() +{} + +// TODO: this should take an array of ids in +template +void KdTree::setPoints(const float* p, int n) +{ + // copy points + _points.resize(n); + memcpy(&_points[0], p, sizeof(Point)*n); + + // compute bbox + if (n) { + _bbox.set(p); + for (int i = 1; i < n; i++) + _bbox.grow(_points[i].p); + } else _bbox.clear(); + + // assign sequential ids + _ids.reserve(n); + while ((int)_ids.size() < n) _ids.push_back(_ids.size()); + _sorted = 0; +} + +template +void KdTree::sort() +{ + if (_sorted) return; + _sorted = 1; + + // reorder ids to sort points + int np = _points.size(); + if (!np) return; + if (np > 1) sortSubtree(0, np, 0); + + // reorder points to match id order + std::vector newpoints(np); + for (int i = 0; i < np; i++) + newpoints[i] = _points[_ids[i]]; + std::swap(_points, newpoints); +} + +template +void KdTree::sortSubtree(int n, int size, int j) +{ + int left, right; ComputeSubtreeSizes(size, left, right); + + // partition range [n, n+size) along axis j into two subranges: + // [n, n+leftSize+1) and [n+leftSize+1, n+size) + std::nth_element(&_ids[n], &_ids[n+left], &_ids[n+size], + ComparePointsById(&_points[0].p[j])); + // move median value (nth element) to front as root node of subtree + std::swap(_ids[n], _ids[n+left]); + + // sort left and right subtrees using next discriminant + if (left <= 1) return; + if (k > 1) j = (j+1)%k; + sortSubtree(n+1, left, j); + if (right <= 1) return; + sortSubtree(n+left+1, right, j); +} + + + +template +float KdTree::findNPoints(std::vector& result, + std::vector& distanceSquared,const float p[k],int nPoints,float maxRadius) const +{ + result.resize(nPoints); + distanceSquared.resize (nPoints); + float finalRadius2 = maxRadius; + int size = findNPoints (&result[0], &distanceSquared[0], &finalRadius2, p, nPoints, maxRadius); + result.resize(size); + distanceSquared.resize(size); + return maxRadius; +} + +template +int KdTree::findNPoints(uint64_t *result, float *distanceSquared, float *finalSearchRadius2, + const float p[k],int nPoints,float maxRadius) const +{ + float radius_squared=maxRadius*maxRadius; + + if (!size() || !_sorted || nPoints<1) return (int)radius_squared; + + NearestQuery query(result,distanceSquared,p,nPoints,radius_squared); + findNPoints(query,0,size(),0); + *finalSearchRadius2=query.maxRadiusSquared; + return query.foundPoints; +} + +template +void KdTree::findNPoints(typename KdTree::NearestQuery& query,int n,int size,int j) const +{ + const float* p=&_points[n].p[0]; + + if(size>1){ + float axis_distance=query.pquery[j]-p[j]; + int left,right;ComputeSubtreeSizes(size,left,right); + int nextj=(j+1)%k; + + if(axis_distance>0){ // visit right definitely, and left if within distance + if(right) findNPoints(query,n+left+1,right,nextj); + if(axis_distance*axis_distance +void KdTree::findPoints(std::vector& result, const BBox& bbox) const +{ + if (!size() || !_sorted) return; + if (!bbox.intersects(_bbox)) return; + findPoints(result, bbox, 0, size(), 0); +} + +template +void KdTree::findPoints(std::vector& result, const BBox& bbox, + int n, int size, int j) const +{ + // check point at n for inclusion + const float* p = &_points[n].p[0]; + if (bbox.inside(p)) + result.push_back(n); + + if (size == 1) return; + + // visit left subtree + int left, right; ComputeSubtreeSizes(size, left, right); + int nextj = (k > 1)? (j+1)%k : j; + if (p[j] >= bbox.min[j]) + findPoints(result, bbox, n+1, left, nextj); + + // visit right subtree + if (right && p[j] <= bbox.max[j]) + findPoints(result, bbox, n+left+1, right, nextj); +} + +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/src/core/Mutex.h b/tensorflow_graphics/physics/external/partio/src/core/Mutex.h new file mode 100644 index 000000000..c32f31e1b --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/Mutex.h @@ -0,0 +1,136 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +#ifndef _Mutex_ +#define _Mutex_ + +#ifndef PARTIO_WIN32 + +#include + +namespace Partio +{ + +#ifndef PARTIO_USE_SPINLOCK + + class PartioMutex + { + pthread_mutex_t CacheLock; + + public: + inline PartioMutex() + { + pthread_mutex_init(&CacheLock,0); + } + + inline ~PartioMutex() + { + pthread_mutex_destroy(&CacheLock); + } + + inline void lock() + { + pthread_mutex_lock(&CacheLock); + } + + inline void unlock() + { + pthread_mutex_unlock(&CacheLock); + } + }; + +#else + + class PartioMutex + { + pthread_spinlock_t CacheLock; + + public: + inline PartioMutex() + { + pthread_spinlock_init(&CacheLock,PTHREAD_PROCESS_PRIVATE); + } + + inline ~PartioMutex() + { + pthread_spinlock_destroy(&CacheLock); + } + + inline void lock() + { + pthread_spinlock_lock(&CacheLock); + } + + inline void unlock() + { + pthread_spinlock_unlock(&CacheLock); + } + }; + +#endif // USE_PTHREAD_SPINLOCK +} + +#else +#include + namespace Partio{ + + class PartioMutex + { + HANDLE CacheLock; + + public: + inline PartioMutex() + { + CacheLock=CreateMutex(0,FALSE,"partiocache"); + } + + inline ~PartioMutex() + { + CloseHandle(CacheLock); + } + + inline void lock() + { + WaitForSingleObject(CacheLock,INFINITE); + } + + inline void unlock() + { + ReleaseMutex(CacheLock); + } + }; + } +#endif // USE_PTHREADS +#endif // Header guard diff --git a/tensorflow_graphics/physics/external/partio/src/core/Particle.cpp b/tensorflow_graphics/physics/external/partio/src/core/Particle.cpp new file mode 100644 index 000000000..760733605 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/Particle.cpp @@ -0,0 +1,125 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#ifdef PARTIO_WIN32 +# define NOMINMAX +#endif +#include "ParticleSimple.h" +#include "ParticleSimpleInterleave.h" +#include +#include +#include +namespace Partio{ + +std::string +TypeName(ParticleAttributeType attrType) +{ + switch(attrType){ + case NONE: return "NONE"; + case VECTOR: return "VECTOR"; + case FLOAT: return "FLOAT"; + case INT: return "INT"; + case INDEXEDSTR: return "INDEXEDSTR"; + default: return 0; + } +} + +ParticlesDataMutable* +create() +{ + return new ParticlesSimple; +} + +ParticlesDataMutable* +createInterleave() +{ + return new ParticlesSimpleInterleave; +} + + + + +template void +printAttr(const ParticlesData* p,const ParticleAttribute& attr,const int particleIndex) +{ + typedef typename ETYPE_TO_TYPE::TYPE TYPE; + const TYPE* data=p->data(attr,particleIndex); + for(int k=0;knumParticles()<numAttributes()< attrs; + for(int i=0;inumAttributes();i++){ + ParticleAttribute attr; + particles->attributeInfo(i,attr); + attrs.push_back(attr); + std::cout<<"attribute "<numParticles()); + std::cout<<"num to print "<begin(),end=particles->end(); + std::vector accessors; + for(size_t k=0;k(it)[c]; + break; + case INT: + for(int c=0;c(it)[c]; + break; + case INDEXEDSTR: + for(int c=0;c(it)[c]; + break; + } + } + std::cout< +#include +#include "Mutex.h" +#include "../Partio.h" + +//##################################################################### +namespace Partio{ + +namespace +{ + static PartioMutex mutex; +} + +// cached read write +std::map cachedParticlesCount; +std::map cachedParticles; + +ParticlesData* readCached(const char* filename,const bool sort) +{ + mutex.lock(); + std::map::iterator i=cachedParticles.find(filename); + + ParticlesData* p=0; + if(i!=cachedParticles.end()){ + p=i->second; + cachedParticlesCount[p]++; + }else{ + ParticlesDataMutable* p_rw=read(filename); + if(p_rw){ + if(sort) p_rw->sort(); + p=p_rw; + cachedParticles[filename]=p; + cachedParticlesCount[p]=1; + } + } + mutex.unlock(); + return p; +} + +void freeCached(ParticlesData* particles) +{ + if(!particles) return; + + mutex.lock(); + + std::map::iterator i=cachedParticlesCount.find(particles); + if(i==cachedParticlesCount.end()){ // Not found in cache, just free + delete (ParticlesInfo*)particles; + }else{ // found in cache + i->second--; // decrement ref count + if(i->second==0){ // ref count is now zero, remove from structure + delete (ParticlesInfo*)particles; + cachedParticlesCount.erase(i); + for(std::map::iterator i2=cachedParticles.begin(); + i2!=cachedParticles.end();++i2){ + if(i2->second==particles){ + cachedParticles.erase(i2); + goto exit_and_release; + } + } + assert(false); + } + } + exit_and_release: + mutex.unlock(); +} + +void beginCachedAccess(ParticlesData* particles) +{ + // TODO: for future use +} + +void endCachedAccess(ParticlesData* particles) +{ + // TODO: for future use +} + +} // namespace Partio diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.h b/tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.h new file mode 100644 index 000000000..139ffacee --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.h @@ -0,0 +1,44 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +#ifndef _ParticleCaching_h_ +#define _ParticleCaching_h_ + +namespace Partio{ +class Particles; +void freeCached(ParticlesInfo* particles); +} + +#endif diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.cpp b/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.cpp new file mode 100644 index 000000000..4d4f3f105 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.cpp @@ -0,0 +1,190 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#include "ParticleHeaders.h" +#include +#include +#include +#include + +using namespace Partio; + +ParticleHeaders:: +ParticleHeaders() + :particleCount(0) +{ +} + +ParticleHeaders:: +~ParticleHeaders() +{} + +void ParticleHeaders:: +release() const +{ + delete this; +} + +int ParticleHeaders:: +numParticles() const +{ + return particleCount; +} + +int ParticleHeaders:: +numAttributes() const +{ + return attributes.size(); +} + +bool ParticleHeaders:: +attributeInfo(const int attributeIndex,ParticleAttribute& attribute) const +{ + if(attributeIndex<0 || attributeIndex>=(int)attributes.size()) return false; + attribute=attributes[attributeIndex]; + return true; +} + +bool ParticleHeaders:: +attributeInfo(const char* attributeName,ParticleAttribute& attribute) const +{ + std::map::const_iterator it=nameToAttribute.find(attributeName); + if(it!=nameToAttribute.end()){ + attribute=attributes[it->second]; + return true; + } + return false; +} + +void ParticleHeaders:: +sort() +{ + assert(false); +} + + +int ParticleHeaders:: +registerIndexedStr(const ParticleAttribute& attribute,const char* str) +{ + assert(false); + return -1; +} + +int ParticleHeaders:: +lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const +{ + assert(false); + return -1; +} + +const std::vector& ParticleHeaders:: +indexedStrs(const ParticleAttribute& attr) const +{ + static std::vector dummy; + assert(false); + return dummy; +} + +void ParticleHeaders:: +findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const +{ + assert(false); +} + +float ParticleHeaders:: +findNPoints(const float center[3],const int nPoints,const float maxRadius,std::vector& points, + std::vector& pointDistancesSquared) const +{ + assert(false); + return 0; +} + +int ParticleHeaders:: +findNPoints(const float center[3],int nPoints,const float maxRadius, ParticleIndex *points, + float *pointDistancesSquared, float *finalRadius2) const +{ + assert(false); + return 0; +} + +ParticleAttribute ParticleHeaders:: +addAttribute(const char* attribute,ParticleAttributeType type,const int count) +{ + // TODO: check if attribute already exists and if so what data type + ParticleAttribute attr; + attr.name=attribute; + attr.type=type; + attr.attributeIndex=attributes.size(); // all arrays separate so we don't use this here! + attr.count=count; + attributes.push_back(attr); + nameToAttribute[attribute]=attributes.size()-1; + return attr; +} + +ParticleIndex ParticleHeaders:: +addParticle() +{ + ParticleIndex index=particleCount; + particleCount++; + return index; +} + +ParticlesDataMutable::iterator ParticleHeaders:: +addParticles(const int countToAdd) +{ + particleCount+=countToAdd; + return iterator(); +} + +void* ParticleHeaders:: +dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const +{ + assert(false); + return 0; +} + +void ParticleHeaders:: +dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,char* values) const +{ + assert(false); +} + +void ParticleHeaders:: +dataAsFloat(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,float* values) const +{ + assert(false); +} + diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.h b/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.h new file mode 100644 index 000000000..0f0abe130 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.h @@ -0,0 +1,91 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _ParticlesHeaders_h_ +#define _ParticlesHeaders_h_ + +#include "../Partio.h" +namespace Partio{ + +class ParticleHeaders:public ParticlesDataMutable +{ +public: + ParticleHeaders(); + void release() const; +protected: + virtual ~ParticleHeaders(); + + int numAttributes() const; + int numParticles() const; + bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const; + bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const; + + int registerIndexedStr(const ParticleAttribute& attribute,const char* str); + int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const; + const std::vector& indexedStrs(const ParticleAttribute& attr) const; + + virtual void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,float* values) const; + + void sort(); + + void findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const; + float findNPoints(const float center[3],int nPoints,const float maxRadius, + std::vector& points,std::vector& pointDistancesSquared) const; + int findNPoints(const float center[3],int nPoints,const float maxRadius, + ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const; + + ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type,const int count); + ParticleIndex addParticle(); + iterator addParticles(const int count); + + const_iterator setupConstIterator() const + {return const_iterator();} + + iterator setupIterator() + {return iterator();} + +private: + void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const; + void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,char* values) const; + +private: + int particleCount; + std::vector attributes; + std::map nameToAttribute; + +}; +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.cpp b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.cpp new file mode 100644 index 000000000..9c678ab17 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.cpp @@ -0,0 +1,344 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +#ifdef PARTIO_WIN32 +# define NOMINMAX +#endif + +#include "ParticleSimple.h" +#include "ParticleCaching.h" +#include +#include +#include +#include + +#include "KdTree.h" + + +using namespace Partio; + +ParticlesSimple:: +ParticlesSimple() + :particleCount(0),allocatedCount(0),kdtree(0) +{ +} + +ParticlesSimple:: +~ParticlesSimple() +{ + for(unsigned int i=0;i(this)); +} + +int ParticlesSimple:: +numParticles() const +{ + return particleCount; +} + +int ParticlesSimple:: +numAttributes() const +{ + return attributes.size(); +} + +bool ParticlesSimple:: +attributeInfo(const int attributeIndex,ParticleAttribute& attribute) const +{ + if(attributeIndex<0 || attributeIndex>=(int)attributes.size()) return false; + attribute=attributes[attributeIndex]; + return true; +} + +bool ParticlesSimple:: +attributeInfo(const char* attributeName,ParticleAttribute& attribute) const +{ + std::map::const_iterator it=nameToAttribute.find(attributeName); + if(it!=nameToAttribute.end()){ + attribute=attributes[it->second]; + return true; + } + return false; +} + + +void ParticlesSimple:: +sort() +{ + ParticleAttribute attr; + bool foundPosition=attributeInfo("position",attr); + if(!foundPosition){ + std::cerr<<"Partio: sort, Failed to find position in particle"<data(attr,baseParticleIndex); // contiguous assumption used here + KdTree<3>* kdtree_temp=new KdTree<3>(); + kdtree_temp->setPoints(data,numParticles()); + kdtree_temp->sort(); + + kdtree_mutex.lock(); + // TODO: this is not threadsafe! + if(kdtree) delete kdtree; + kdtree=kdtree_temp; + kdtree_mutex.unlock(); +} + +void ParticlesSimple:: +findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const +{ + if(!kdtree){ + std::cerr<<"Partio: findPoints without first calling sort()"< box(bboxMin);box.grow(bboxMax); + + int startIndex=points.size(); + kdtree->findPoints(points,box); + // remap points found in findPoints to original index space + for(unsigned int i=startIndex;iid(points[i]); + } +} + +float ParticlesSimple:: +findNPoints(const float center[3],const int nPoints,const float maxRadius,std::vector& points, + std::vector& pointDistancesSquared) const +{ + if(!kdtree){ + std::cerr<<"Partio: findNPoints without first calling sort()"<& rawPoints=points; + float maxDistance=kdtree->findNPoints(points,pointDistancesSquared,center,nPoints,maxRadius); + // remap all points since findNPoints clears array + for(unsigned int i=0;iid(points[i]); + points[i]=index; + } + return maxDistance; +} + +int ParticlesSimple:: +findNPoints(const float center[3],int nPoints,const float maxRadius, ParticleIndex *points, + float *pointDistancesSquared, float *finalRadius2) const +{ + if(!kdtree){ + std::cerr<<"Partio: findNPoints without first calling sort()"<findNPoints (points, pointDistancesSquared, finalRadius2, center, nPoints, maxRadius); + // remap all points since findNPoints clears array + for(int i=0; i < count; i++){ + ParticleIndex index = kdtree->id(points[i]); + points[i]=index; + } + return count; +} + +ParticleAttribute ParticlesSimple:: +addAttribute(const char* attribute,ParticleAttributeType type,const int count) +{ + if(nameToAttribute.find(attribute) != nameToAttribute.end()){ + std::cerr<<"Partio: addAttribute failed because attr '"<allocatedCount){ + // TODO: this should follow 2/3 rule + allocatedCount=allocatedCount+countToAdd; + for(unsigned int i=0;i& iterator) +{ + iterator=end(); +} + +void ParticlesSimple:: +setupIteratorNextBlock(Partio::ParticleIterator& iterator) const +{ + iterator=ParticlesData::end(); +} + + +void ParticlesSimple:: +setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) +{ + accessor.stride=accessor.count*sizeof(float); + accessor.basePointer=attributeData[accessor.attributeIndex]; +} + +void ParticlesSimple:: +setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) const +{ + accessor.stride=accessor.count*sizeof(float); + accessor.basePointer=attributeData[accessor.attributeIndex]; +} + +void* ParticlesSimple:: +dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const +{ + assert(attribute.attributeIndex>=0 && attribute.attributeIndex<(int)attributes.size()); + return attributeData[attribute.attributeIndex]+attributeStrides[attribute.attributeIndex]*particleIndex; +} + +void ParticlesSimple:: +dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,char* values) const +{ + assert(attribute.attributeIndex>=0 && attribute.attributeIndex<(int)attributes.size()); + + char* base=attributeData[attribute.attributeIndex]; + int bytes=attributeStrides[attribute.attributeIndex]; + for(int i=0;i=0 && attribute.attributeIndex<(int)attributes.size()); + + if(attribute.type==FLOAT || attribute.type==VECTOR) dataInternalMultiple(attribute,indexCount,particleIndices,sorted,(char*)values); + else if(attribute.type==INT || attribute.type==INDEXEDSTR){ + char* attrrawbase=attributeData[attribute.attributeIndex]; + int* attrbase=(int*)attrrawbase; + int count=attribute.count; + for(int i=0;i::const_iterator it=table.stringToIndex.find(str); + if(it!=table.stringToIndex.end()) return it->second; + int newIndex=table.strings.size(); + table.strings.push_back(str); + table.stringToIndex[str]=newIndex; + return newIndex; +} + +int ParticlesSimple:: +lookupIndexedStr(Partio::ParticleAttribute const &attribute, char const *str) const +{ + const IndexedStrTable& table=attributeIndexedStrs[attribute.attributeIndex]; + std::map::const_iterator it=table.stringToIndex.find(str); + if(it!=table.stringToIndex.end()) return it->second; + return -1; +} + +const std::vector& ParticlesSimple:: +indexedStrs(const ParticleAttribute& attr) const +{ + const IndexedStrTable& table=attributeIndexedStrs[attr.attributeIndex]; + return table.strings; +} + diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.h b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.h new file mode 100644 index 000000000..94a0f526e --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.h @@ -0,0 +1,109 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#include +#include +#include +#include +#include "Mutex.h" +#include "../Partio.h" + +namespace Partio{ + +template class KdTree; + +class ParticlesSimple:public ParticlesDataMutable, + public Provider +{ +protected: + virtual ~ParticlesSimple(); +public: + using ParticlesDataMutable::iterator; + using ParticlesData::const_iterator; + + void release() const; + + ParticlesSimple(); + + int numAttributes() const; + int numParticles() const; + bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const; + bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const; + void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,float* values) const; + int registerIndexedStr(const ParticleAttribute& attribute,const char* str); + int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const; + const std::vector& indexedStrs(const ParticleAttribute& attr) const; + void sort(); + void findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const; + float findNPoints(const float center[3],int nPoints,const float maxRadius, + std::vector& points,std::vector& pointDistancesSquared) const; + int findNPoints(const float center[3],int nPoints,const float maxRadius, + ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const; + + ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type,const int count); + ParticleIndex addParticle(); + iterator addParticles(const int count); + + + iterator setupIterator(); + const_iterator setupConstIterator() const; + void setupIteratorNextBlock(Partio::ParticleIterator& iterator); + void setupIteratorNextBlock(Partio::ParticleIterator& iterator) const; + void setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor); + void setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) const; +private: + void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const; + void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,char* values) const; + +private: + int particleCount; + int allocatedCount; + std::vector attributeData; // Inside is data of appropriate type + std::vector attributeOffsets; // Inside is data of appropriate type + struct IndexedStrTable{ + std::map stringToIndex; // TODO: this should be a hash table unordered_map + std::vector strings; + }; + std::vector attributeIndexedStrs; + std::vector attributes; + std::vector attributeStrides; + std::map nameToAttribute; + + PartioMutex kdtree_mutex; + KdTree<3>* kdtree; +}; + +} diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.cpp b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.cpp new file mode 100644 index 000000000..605d344f2 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.cpp @@ -0,0 +1,344 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#ifdef PARTIO_WIN32 +# define NOMINMAX +#endif + +#include "ParticleSimpleInterleave.h" +#include "ParticleCaching.h" +#include +#include +#include +#include + +#include "KdTree.h" + + +using namespace Partio; + +ParticlesSimpleInterleave:: +ParticlesSimpleInterleave() + :particleCount(0),allocatedCount(0),data(0),stride(0),kdtree(0) +{ +} + +ParticlesSimpleInterleave:: +~ParticlesSimpleInterleave() +{ + free(data); + delete kdtree; +} + +void ParticlesSimpleInterleave:: +release() const +{ + freeCached(const_cast(this)); +} + + +int ParticlesSimpleInterleave:: +numParticles() const +{ + return particleCount; +} + +int ParticlesSimpleInterleave:: +numAttributes() const +{ + return attributes.size(); +} + + +bool ParticlesSimpleInterleave:: +attributeInfo(const int attributeIndex,ParticleAttribute& attribute) const +{ + if(attributeIndex<0 || attributeIndex>=(int)attributes.size()) return false; + attribute=attributes[attributeIndex]; + return true; +} + +bool ParticlesSimpleInterleave:: +attributeInfo(const char* attributeName,ParticleAttribute& attribute) const +{ + std::map::const_iterator it=nameToAttribute.find(attributeName); + if(it!=nameToAttribute.end()){ + attribute=attributes[it->second]; + return true; + } + return false; +} + +void ParticlesSimpleInterleave:: +sort() +{ +#if 0 + ParticleAttribute attr; + bool foundPosition=attributeInfo("position",attr); + if(!foundPosition){ + std::cerr<<"Partio: sort, Failed to find position in particle"<data(attr,0); // contiguous assumption used here + KdTree<3>* kdtree_temp=new KdTree<3>(); + kdtree_temp->setPoints(data,numParticles()); + kdtree_temp->sort(); + + kdtree_mutex.lock(); + // TODO: this is not threadsafe! + if(kdtree) delete kdtree; + kdtree=kdtree_temp; + kdtree_mutex.unlock(); +#endif +} + +void ParticlesSimpleInterleave:: +findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const +{ +#if 0 + if(!kdtree){ + std::cerr<<"Partio: findPoints without first calling sort()"< box(bboxMin);box.grow(bboxMax); + + int startIndex=points.size(); + kdtree->findPoints(points,box); + // remap points found in findPoints to original index spac + for(unsigned int i=startIndex;iid(points[i]); +#endif +} + +float ParticlesSimpleInterleave:: +findNPoints(const float center[3],const int nPoints,const float maxRadius,std::vector& points, + std::vector& pointDistancesSquared) const +{ +#if 0 + if(!kdtree){ + std::cerr<<"Partio: findNPoints without first calling sort()"<findNPoints(points,pointDistancesSquared,center,nPoints,maxRadius); + // remap all points since findNPoints clears array + for(unsigned int i=0;iid(points[i]); + return maxDistance; +#endif + return 0; +} + +int ParticlesSimpleInterleave:: +findNPoints(const float center[3],int nPoints,const float maxRadius, ParticleIndex *points, + float *pointDistancesSquared, float *finalRadius2) const +{ + // TODO: I guess they don't support this lookup here + return 0; +} + + +ParticleAttribute ParticlesSimpleInterleave:: +addAttribute(const char* attribute,ParticleAttributeType type,const int count) +{ + //std::cerr<< "AddAttribute interleave" << std::endl; + if(nameToAttribute.find(attribute) != nameToAttribute.end()){ + std::cerr<<"Partio: addAttribute failed because attr '"<allocatedCount){ + while(allocatedCount& iterator) +{ + iterator=end(); +} + +void ParticlesSimpleInterleave:: +setupIteratorNextBlock(Partio::ParticleIterator& iterator) const +{ + iterator=ParticlesData::end(); +} + +void ParticlesSimpleInterleave:: +setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) +{ + accessor.stride=stride; + accessor.basePointer=data+attributeOffsets[accessor.attributeIndex]; +} + +void ParticlesSimpleInterleave:: +setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) const +{ + accessor.stride=stride; + accessor.basePointer=data+attributeOffsets[accessor.attributeIndex]; +} + + +void* ParticlesSimpleInterleave:: +dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const +{ + return data+particleIndex*stride+attributeOffsets[attribute.attributeIndex]; +} + +void ParticlesSimpleInterleave:: +dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,char* values) const +{ +#if 0 + assert(attribute.attributeIndex>=0 && attribute.attributeIndex<(int)attributes.size()); + + char* base=attributeData[attribute.attributeIndex]; + int bytes=attributeStrides[attribute.attributeIndex]; + for(int i=0;i=0 && attribute.attributeIndex<(int)attributes.size()); + + if(attribute.type==FLOAT || attribute.type==VECTOR) dataInternalMultiple(attribute,indexCount,particleIndices,sorted,(char*)values); + else if(attribute.type==INT){ + char* attrrawbase=attributeData[attribute.attributeIndex]; + int* attrbase=(int*)attrrawbase; + int count=attribute.count; + for(int i=0;i::const_iterator it=table.stringToIndex.find(str); + if(it!=table.stringToIndex.end()) return it->second; + int newIndex=table.strings.size(); + table.strings.push_back(str); + table.stringToIndex[str]=newIndex; + return newIndex; +} + +int ParticlesSimpleInterleave:: +lookupIndexedStr(Partio::ParticleAttribute const &attribute, char const *str) const +{ + const IndexedStrTable& table=attributeIndexedStrs[attribute.attributeIndex]; + std::map::const_iterator it=table.stringToIndex.find(str); + if(it!=table.stringToIndex.end()) return it->second; + return -1; +} + +const std::vector& ParticlesSimpleInterleave:: +indexedStrs(const ParticleAttribute& attr) const +{ + const IndexedStrTable& table=attributeIndexedStrs[attr.attributeIndex]; + return table.strings; +} + diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.h b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.h new file mode 100644 index 000000000..f05329f16 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.h @@ -0,0 +1,114 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _ParticleSimpleInterleave_h_ +#define _ParticleSimpleInterleave_h_ + +#include +#include +#include +#include "Mutex.h" +#include "../Partio.h" + +namespace Partio{ + +template class KdTree; + +class ParticlesSimpleInterleave:public ParticlesDataMutable, + public Provider +{ +protected: + virtual ~ParticlesSimpleInterleave(); +public: + using ParticlesDataMutable::iterator; + using ParticlesData::const_iterator; + + void release() const; + + ParticlesSimpleInterleave(); + + int numAttributes() const; + int numParticles() const; + bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const; + bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const; + + virtual void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,float* values) const; + int registerIndexedStr(const ParticleAttribute& attribute,const char* str); + int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const; + const std::vector& indexedStrs(const ParticleAttribute& attr) const; + + void sort(); + void findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const; + float findNPoints(const float center[3],int nPoints,const float maxRadius, + std::vector& points,std::vector& pointDistancesSquared) const; + int findNPoints(const float center[3],int nPoints,const float maxRadius, + ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const; + + ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type,const int count); + ParticleIndex addParticle(); + iterator addParticles(const int count); + + + iterator setupIterator(); + const_iterator setupConstIterator() const; + void setupIteratorNextBlock(Partio::ParticleIterator& iterator); + void setupIteratorNextBlock(Partio::ParticleIterator& iterator) const; + void setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor); + void setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) const; +private: + void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const; + void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, + const ParticleIndex* particleIndices,const bool sorted,char* values) const; + +private: + int particleCount; + int allocatedCount; + char* data; + int stride; + struct IndexedStrTable{ + std::map stringToIndex; // TODO: this should be a hash table unordered_map + std::vector strings; + }; + std::vector attributeIndexedStrs; + std::vector attributeOffsets; // Inside is data of appropriate type + std::vector attributes; + std::map nameToAttribute; + + PartioMutex kdtree_mutex; + KdTree<3>* kdtree; +}; + +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/src/io/BGEO.cpp b/tensorflow_graphics/physics/external/partio/src/io/BGEO.cpp new file mode 100644 index 000000000..d9255f399 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/io/BGEO.cpp @@ -0,0 +1,197 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +#include "../Partio.h" +#include "PartioEndian.h" +#include "../core/ParticleHeaders.h" +#include "ZIP.h" + +#include +#include +#include +#include + +namespace Partio { + +using namespace std; + +void writeHoudiniStr(ostream &ostream, const string &s) { + write(ostream, (short)s.size()); + ostream.write(s.c_str(), s.size()); +} + +ParticlesDataMutable *readBGEO(const char *filename, const bool headersOnly) { +} + +bool writeBGEO(const char *filename, + const ParticlesData &p, + const bool compressed) { + auto_ptr output( + compressed ? Gzip_Out(filename, ios::out | ios::binary) + : new ofstream(filename, ios::out | ios::binary)); + + if (!*output) { + cerr << "Partio Unable to open file " << filename << endl; + return false; + } + + int magic = ((((('B' << 8) | 'g') << 8) | 'e') << 8) | 'o'; + char versionChar = 'V'; + int version = 5; + int nPoints = p.numParticles(); + int nPrims = 1; + int nPointGroups = 0; + int nPrimGroups = 0; + int nPointAttrib = p.numAttributes() - 1; + int nVertexAttrib = 0; + int nPrimAttrib = 1; + int nAttrib = 0; + + write(*output, magic, versionChar, version, nPoints, nPrims, + nPointGroups); + write(*output, nPrimGroups, nPointAttrib, nVertexAttrib, nPrimAttrib, + nAttrib); + + vector handles; + vector accessors; + vector attrOffsets; + bool foundPosition = false; + int particleSize = 4; + for (int i = 0; i < p.numAttributes(); i++) { + ParticleAttribute attr; + p.attributeInfo(i, attr); + if (attr.name == "position") { + attrOffsets.push_back(0); + foundPosition = true; + } else { + writeHoudiniStr(*output, attr.name); + if (attr.type == INDEXEDSTR) { + int houdiniType = 4; + unsigned short size = attr.count; + const std::vector &indexTable = p.indexedStrs(attr); + int numIndexes = indexTable.size(); + write(*output, size, houdiniType, numIndexes); + for (int i = 0; i < numIndexes; i++) + writeHoudiniStr(*output, indexTable[i]); + } else { + int houdiniType = 0; + switch (attr.type) { + case FLOAT: + houdiniType = 0; + break; + case INT: + houdiniType = 1; + break; + case VECTOR: + houdiniType = 5; + break; + case INDEXEDSTR: + case NONE: + assert(false); + houdiniType = 0; + break; + } + unsigned short size = attr.count; + write(*output, size, houdiniType); + for (int i = 0; i < attr.count; i++) { + int defaultValue = 0; + write(*output, defaultValue); + } + } + attrOffsets.push_back(particleSize); + particleSize += attr.count; + } + handles.push_back(attr); + accessors.push_back(ParticleAccessor(handles.back())); + } + if (!foundPosition) { + cerr << "Partio: didn't find attr 'position' while trying to write GEO" + << endl; + return false; + } + + ParticlesData::const_iterator iterator = p.begin(); + for (size_t i = 0; i < accessors.size(); i++) + iterator.addAccessor(accessors[i]); + + int *buffer = new int[particleSize]; + for (ParticlesData::const_iterator end = p.end(); iterator != end; + ++iterator) { + for (unsigned int attrIndex = 0; attrIndex < handles.size(); attrIndex++) { + ParticleAttribute &handle = handles[attrIndex]; + ParticleAccessor &accessor = accessors[attrIndex]; + // TODO: this violates strict aliasing, we could just go to char* and make + // a different endian swapper + const int *data = accessor.raw(iterator); + for (int k = 0; k < handle.count; k++) { + buffer[attrOffsets[attrIndex] + k] = data[k]; + BIGEND::swap(buffer[attrOffsets[attrIndex] + k]); + } + } + // set homogeneous coordinate + float *w = (float *)&buffer[3]; + *w = 1.; + BIGEND::swap(*w); + output->write((char *)buffer, particleSize * sizeof(int)); + } + delete[] buffer; + + // Write primitive attribs + writeHoudiniStr(*output, "generator"); + write(*output, (short)0x1); // count 1 + write(*output, (int)0x4); // type 4 index + write(*output, (int)0x1); // type 4 index + writeHoudiniStr(*output, "papi"); + + // Write the primitive + write(*output, (int)0x8000); + write(*output, (int)nPoints); + if (nPoints > (int)1 << 16) + for (int i = 0; i < nPoints; i++) + write(*output, (int)i); + else + for (int i = 0; i < nPoints; i++) + write(*output, (unsigned short)i); + write(*output, (int)0); + + // Write extra + write(*output, (char)0x00); + write(*output, (char)0xff); + + // success + return true; +} + +} // namespace Partio diff --git a/tensorflow_graphics/physics/external/partio/src/io/ParticleIO.cpp b/tensorflow_graphics/physics/external/partio/src/io/ParticleIO.cpp new file mode 100644 index 000000000..9adb7e9cc --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/io/ParticleIO.cpp @@ -0,0 +1,140 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +#include +#include "../Partio.h" +#include "readers.h" + +namespace Partio{ +using namespace std; + +// reader and writer code +typedef ParticlesDataMutable* (*READER_FUNCTION)(const char*,const bool); +typedef bool (*WRITER_FUNCTION)(const char*,const ParticlesData&,const bool); + +map& +readers() +{ + static map data; + static bool initialized=false; + if(!initialized){ + data["bgeo"]=readBGEO; + } + return data; +} + +map& +writers() +{ + static map data; + static bool initialized=false; + if(!initialized){ + data["bgeo"]=writeBGEO; + } + return data; +} + +//! Gives extension of a file ignoring any trailing .gz +//! i.e. for 'foo.pdb.gz' it gives 'pdb', for 'foo.pdb' it gives 'pdb' +bool extensionIgnoringGz(const string& filename,string& ret,bool &endsWithGz) +{ + size_t period=filename.rfind('.'); + endsWithGz=false; + if(period==string::npos){ + cerr<<"Partio: No extension detected in filename"<::iterator i=readers().find(extension); + if(i==readers().end()){ + cerr<<"Partio: No reader defined for extension "<second)(c_filename,false); +} + +ParticlesInfo* +readHeaders(const char* c_filename) +{ + string filename(c_filename); + string extension; + bool endsWithGz; + if(!extensionIgnoringGz(filename,extension,endsWithGz)) return 0; + map::iterator i=readers().find(extension); + if(i==readers().end()){ + cerr<<"Partio: No reader defined for extension "<second)(c_filename,true); +} + +void +write(const char* c_filename,const ParticlesData& particles,const bool forceCompressed) +{ + string filename(c_filename); + string extension; + bool endsWithGz; + if(!extensionIgnoringGz(filename,extension,endsWithGz)) return; + map::iterator i=writers().find(extension); + if(i==writers().end()){ + cerr<<"Partio: No writer defined for extension "<second)(c_filename,particles,forceCompressed || endsWithGz); +} + +} // namespace Partio diff --git a/tensorflow_graphics/physics/external/partio/src/io/PartioEndian.h b/tensorflow_graphics/physics/external/partio/src/io/PartioEndian.h new file mode 100644 index 000000000..b8758735d --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/io/PartioEndian.h @@ -0,0 +1,129 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +#ifndef _partioendian_h_ +#define _partioendian_h_ + +#include +#include + +namespace Partio{ + +#ifdef PartioBIG_ENDIAN +static const bool big_endian=true; +#else +static const bool big_endian=false; +#endif + +template +void endianSwap(T& value) +{ + T temp=value; + char* src=(char*)&temp; + char* dest=(char*)&value; + for(unsigned int i=0;i static void swap(T& x){ + if(!big_endian) endianSwap(x); + } +}; + +struct LITEND { + template static void swap(T& x){ + if(big_endian) endianSwap(x); + } +}; + +template inline void +read(std::istream& input,T& d) +{ + input.read((char*)&d,sizeof(T)); + E::swap(d); +} + +template inline void +write(std::ostream& output,const T& d) +{ + T copy=d; + E::swap(copy); + output.write((char*)©,sizeof(T)); +} + +template +void read(std::istream& input,T1& d1,T2& d2) +{read(input,d1);read(input,d2);} + +template +void read(std::istream& input,T1& d1,T2& d2,T3& d3) +{read(input,d1);read(input,d2,d3);} + +template +void read(std::istream& input,T1& d1,T2& d2,T3& d3,T4& d4) +{read(input,d1);read(input,d2,d3,d4);} + +template +void read(std::istream& input,T1& d1,T2& d2,T3& d3,T4& d4,T5& d5) +{read(input,d1);read(input,d2,d3,d4,d5);} + +template +void read(std::istream& input,T1& d1,T2& d2,T3& d3,T4& d4,T5& d5,T6& d6) +{read(input,d1);read(input,d2,d3,d4,d5,d6);} + +template +void write(std::ostream& output,const T1& d1,const T2& d2) +{write(output,d1);write(output,d2);} + +template +void write(std::ostream& output,const T1& d1,const T2& d2,const T3& d3) +{write(output,d1);write(output,d2,d3);} + +template +void write(std::ostream& output,const T1& d1,const T2& d2,const T3& d3,const T4& d4) +{write(output,d1);write(output,d2,d3,d4);} + +template +void write(std::ostream& output,const T1& d1,const T2& d2,const T3& d3,const T4& d4,const T5& d5) +{write(output,d1);write(output,d2,d3,d4,d5);} + +template +void write(std::ostream& output,const T1& d1,const T2& d2,const T3& d3,const T4& d4,const T5& d5,const T6& d6) +{write(output,d1);write(output,d2,d3,d4,d5,d6);} + +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/src/io/ZIP.cpp b/tensorflow_graphics/physics/external/partio/src/io/ZIP.cpp new file mode 100644 index 000000000..d06be09ff --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/io/ZIP.cpp @@ -0,0 +1,619 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +#ifdef PARTIO_USE_ZLIB +extern "C"{ +# include +} +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "ZIP.h" + +namespace Partio{ + + + +template +inline void Swap_Endianity(T& x) +{ + assert(sizeof(T)<=8); + if(sizeof(T)>1) { + T old=x; + for(unsigned int k=1;k<=sizeof(T);k++) ((char*)&x)[k-1]=((char*)&old)[sizeof(T)-k]; + } +} + +template +inline void Read_Primitive(std::istream& stream,T& x) +{ + stream.read(&(char&)x,sizeof(T)); +} + +template +inline void Write_Primitive(std::ostream& stream,const T& x) +{ + stream.write(&(char&)x,sizeof(T)); +} + + +//##################################################################### +// class GZipFileHeader +//##################################################################### +struct GZipFileHeader +{ + unsigned char magic0,magic1; // magic should be 0x8b,0x1f + unsigned char cm; // compression method 0x8 is gzip + unsigned char flags; // flags + unsigned int modtime; // 4 byte modification time + unsigned char flags2; // secondary flags + unsigned char os; // operating system 0xff for unknown + unsigned short crc16; // crc check + unsigned int crc32; + + GZipFileHeader() + :magic0(0),magic1(0),flags(0),modtime(0),flags2(0),os(0),crc16(0),crc32(0) + {} + + bool Read(std::istream& istream) + {Read_Primitive(istream,magic0); + Read_Primitive(istream,magic1); + if(magic0 != 0x1f || magic1 != 0x8b){//std::cerr<<"gzip: did not find gzip magic 0x1f 0x8b"<4) put_back_count=4; + std::memmove(out+(4-put_back_count),gptr()-put_back_count,put_back_count); + int num=process(); + setg((char*)(out+4-put_back_count),(char*)(out+4),(char*)(out+4+num)); + if(num<=0) return EOF; + return traits_type::to_int_type(*gptr());} + + virtual int overflow(int c=EOF) + {assert(false);return EOF;} + +//##################################################################### +}; + +//##################################################################### +// class ZipStreambufCompress +//##################################################################### +class ZipStreambufCompress:public std::streambuf +{ + static const int buffer_size=512; + std::ostream& ostream; // owned when header==0 (when not part of zip file) + + z_stream strm; + unsigned char in[buffer_size],out[buffer_size]; + + ZipFileHeader* header; + GZipFileHeader gzip_header; + unsigned int header_offset; + unsigned int uncompressed_size; + unsigned int crc; + + bool valid; + +public: + ZipStreambufCompress(ZipFileHeader* header,std::ostream& stream) + :ostream(stream),header(header),valid(true) + { + strm.zalloc=Z_NULL;strm.zfree=Z_NULL;strm.opaque=Z_NULL; + int ret=deflateInit2(&strm,Z_DEFAULT_COMPRESSION,Z_DEFLATED,-MAX_WBITS,8,Z_DEFAULT_STRATEGY); + if(ret != Z_OK){std::cerr<<"libz: failed to deflateInit"<header_offset=stream.tellp();header->Write(ostream,false);} + else{header_offset=stream.tellp();gzip_header.Write(ostream);} + uncompressed_size=crc=0; + } + + virtual ~ZipStreambufCompress() + {if(valid){ + process(true); + deflateEnd(&strm); + if(header){ + std::ios::streampos final_position=ostream.tellp(); + header->uncompressed_size=uncompressed_size; + header->crc=crc; + ostream.seekp(header->header_offset); + header->Write(ostream,false); + ostream.seekp(final_position);} + else{Write_Primitive(ostream,crc);Write_Primitive(ostream,uncompressed_size);}} + if(!header) delete &ostream;} + +protected: + int process(bool flush) + {if(!valid) return -1; + strm.next_in=(Bytef*)pbase(); + strm.avail_in=pptr()-pbase(); + while(strm.avail_in!=0 || flush){ + strm.avail_out=buffer_size; + strm.next_out=(Bytef*)out; + int ret=deflate(&strm,flush?Z_FINISH:Z_NO_FLUSH); + if(!(ret!=Z_BUF_ERROR && ret!=Z_STREAM_ERROR)){ + valid=false; + std::cerr<<"gzip: gzip error "<compressed_size+=generated_output; + if(ret==Z_STREAM_END) break;} + // update counts, crc's and buffers + int consumed_input=pptr()-pbase(); + uncompressed_size+=consumed_input; + crc=crc32(crc,(Bytef*)in,consumed_input); + setp(pbase(),pbase()+buffer_size-4);return 1;} + + virtual int sync() + {if(pptr() && pptr()>pbase()) return process(false);return 0;} + + virtual int underflow() + {std::runtime_error("Attempt to read write only ostream");return 0;} + + virtual int overflow(int c=EOF) + {if(c!=EOF){*pptr()=c;pbump(1);} + if(process(false)==EOF) return EOF; + return c;} + +//##################################################################### +}; +//##################################################################### +// Class ZIP_FILE_ISTREAM +//##################################################################### +// Class needed because istream cannot own its streambuf +class ZIP_FILE_ISTREAM:public std::istream +{ + ZipStreambufDecompress buf; +public: + ZIP_FILE_ISTREAM(std::istream& istream,bool part_of_zip_file) + :std::istream(&buf),buf(istream,part_of_zip_file) + {} + + virtual ~ZIP_FILE_ISTREAM() + {} + +//##################################################################### +}; +//##################################################################### +// Class ZIP_FILE_OSTREAM +//##################################################################### +// Class needed because ostream cannot own its streambuf +class ZIP_FILE_OSTREAM:public std::ostream +{ + ZipStreambufCompress buf; +public: + ZIP_FILE_OSTREAM(ZipFileHeader* header,std::ostream& ostream) + :std::ostream(&buf),buf(header,ostream) + {} + + virtual ~ZIP_FILE_OSTREAM() + {} + +//##################################################################### +}; +//##################################################################### +// Function ZipFileWriter +//##################################################################### +ZipFileWriter:: +ZipFileWriter(const std::string& filename) +{ + ostream.open(filename.c_str(),std::ios::out|std::ios::binary); + if(!ostream) throw std::runtime_error("ZIP: Invalid file handle"); +} +//##################################################################### +// Function ZipFileWriter +//##################################################################### +ZipFileWriter:: +~ZipFileWriter() +{ + // Write all file headers + std::ios::streampos final_position=ostream.tellp(); + for(unsigned int i=0;iWrite(ostream,true);delete files[i];} + std::ios::streampos central_end=ostream.tellp(); + // Write end of central + Write_Primitive(ostream,(unsigned int)0x06054b50); // end of central + Write_Primitive(ostream,(unsigned short)0); // this disk number + Write_Primitive(ostream,(unsigned short)0); // this disk number + Write_Primitive(ostream,(unsigned short)files.size()); // one entry in center in this disk + Write_Primitive(ostream,(unsigned short)files.size()); // one entry in center + Write_Primitive(ostream,(unsigned int)(central_end-final_position)); // size of header + Write_Primitive(ostream,(unsigned int)final_position); // offset to header + Write_Primitive(ostream,(unsigned short)0); // zip comment +} +//##################################################################### +// Function ZipFileWriter +//##################################################################### +std::ostream* ZipFileWriter:: +Add_File(const std::string& filename,const bool binary) +{ + files.push_back(new ZipFileHeader(filename)); + return new ZIP_FILE_OSTREAM(files.back(),ostream); +} +//##################################################################### +// Function ZipFileReader +//##################################################################### +ZipFileReader:: +ZipFileReader(const std::string& filename) +{ + istream.open(filename.c_str(),std::ios::in|std::ios::binary); + if(!istream) throw std::runtime_error("ZIP: Invalid file handle"); + Find_And_Read_Central_Header(); +} +//##################################################################### +// Function ZipFileReader +//##################################################################### +ZipFileReader:: +~ZipFileReader() +{ + std::map::iterator i=filename_to_header.begin(); + for(;i!=filename_to_header.end();++i) + delete i->second; +} +//##################################################################### +// Function Find_And_Read_Central_Header +//##################################################################### +bool ZipFileReader:: +Find_And_Read_Central_Header() +{ + // Find the header + // NOTE: this assumes the zip file header is the last thing written to file... + istream.seekg(0,std::ios_base::end); + std::ios::streampos end_position=istream.tellg(); + unsigned int max_comment_size=0xffff; // max size of header + unsigned int read_size_before_comment=22; + std::ios::streamoff read_start=max_comment_size+read_size_before_comment; + if(read_start>end_position) read_start=end_position; + istream.seekg(end_position-read_start); + char *buf=new char[read_start]; + if(read_start<=0){std::cerr<<"ZIP: Invalid read buffer size"<Read(istream,true); + if(valid) filename_to_header[header->filename]=header;} + return true; +} +//##################################################################### +// Function Get_File +//##################################################################### +std::istream* ZipFileReader::Get_File(const std::string& filename,const bool binary) +{ + std::map::iterator i=filename_to_header.find(filename); + if(i!=filename_to_header.end()){ + ZipFileHeader* header=i->second; + istream.seekg((*header).header_offset);return new ZIP_FILE_ISTREAM(istream,true); + } + return 0; +} +//##################################################################### +// Function Get_File_List +//##################################################################### +void ZipFileReader::Get_File_List(std::vector& filenames) const +{ + filenames.clear(); + std::map::const_iterator i=filename_to_header.begin(); + for(;i!=filename_to_header.end();++i) + filenames.push_back(i->first); +} +//##################################################################### +// Function Gzip_In +//##################################################################### +std::istream* +Gzip_In(const std::string& filename,std::ios::openmode mode) +{ + std::ifstream* infile=new std::ifstream(filename.c_str(),mode | std::ios::binary); + GZipFileHeader header; + bool zipped=header.Read(*infile); + infile->seekg(0); + if(!zipped) return infile; + else return new ZIP_FILE_ISTREAM(*infile,false); +} +//##################################################################### +// Function Gzip_Out +//##################################################################### +std::ostream* +Gzip_Out(const std::string& filename,std::ios::openmode mode) +{ + std::ofstream* outfile=new std::ofstream(filename.c_str(),mode); + return new ZIP_FILE_OSTREAM(0,*outfile); +} +//##################################################################### + +#else + +//##################################################################### +// Function Gzip_In +//##################################################################### +std::istream* +Gzip_In(const std::string& filename,std::ios::openmode mode) +{ + std::ifstream* infile=new std::ifstream(filename.c_str(),mode | std::ios::binary); + GZipFileHeader header; + bool zipped=header.Read(*infile); + + infile->seekg(0); + if(!zipped) return infile; + + delete infile; + std::cerr<<"Partio: encountered gz file '"< +#include +#include +#include +#include + +namespace Partio{ +struct ZipFileHeader; +//##################################################################### +// Functions Gzip_Out/Gzip_In - Create streams that read/write .gz +//##################################################################### +std::istream* Gzip_In(const std::string& filename,std::ios::openmode mode); +std::ostream* Gzip_Out(const std::string& filename,std::ios::openmode mode); +//##################################################################### +// Class ZipFileWriter +//##################################################################### +class ZipFileWriter +{ + std::ofstream ostream; + std::vector files; +public: + +//##################################################################### + ZipFileWriter(const std::string& filename); + virtual ~ZipFileWriter(); + std::ostream* Add_File(const std::string& filename,const bool binary=true); +//##################################################################### +}; + +//##################################################################### +// Class ZipFileReader +//##################################################################### +class ZipFileReader +{ + std::ifstream istream; +public: + std::map filename_to_header; + +//##################################################################### + ZipFileReader(const std::string& filename); + virtual ~ZipFileReader(); + std::istream* Get_File(const std::string& filename,const bool binary=true); + void Get_File_List(std::vector& filenames) const; +private: + bool Find_And_Read_Central_Header(); +//##################################################################### +}; +} +#endif diff --git a/tensorflow_graphics/physics/external/partio/src/io/half2float.h b/tensorflow_graphics/physics/external/partio/src/io/half2float.h new file mode 100644 index 000000000..610139ec1 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/io/half2float.h @@ -0,0 +1,2048 @@ +{ 0},{0x33800000},{0x34000000},{0x34400000},{0x34800000},{0x34a00000},{0x34c00000},{0x34e00000},{0x35000000},{0x35100000},{0x35200000},{0x35300000},{0x35400000},{0x35500000},{0x35600000},{0x35700000},{0x35800000},{0x35880000},{0x35900000},{0x35980000},{0x35a00000},{0x35a80000},{0x35b00000},{0x35b80000},{0x35c00000},{0x35c80000},{0x35d00000},{0x35d80000},{0x35e00000},{0x35e80000},{0x35f00000},{0x35f80000}, +{0x36000000},{0x36040000},{0x36080000},{0x360c0000},{0x36100000},{0x36140000},{0x36180000},{0x361c0000},{0x36200000},{0x36240000},{0x36280000},{0x362c0000},{0x36300000},{0x36340000},{0x36380000},{0x363c0000},{0x36400000},{0x36440000},{0x36480000},{0x364c0000},{0x36500000},{0x36540000},{0x36580000},{0x365c0000},{0x36600000},{0x36640000},{0x36680000},{0x366c0000},{0x36700000},{0x36740000},{0x36780000},{0x367c0000}, +{0x36800000},{0x36820000},{0x36840000},{0x36860000},{0x36880000},{0x368a0000},{0x368c0000},{0x368e0000},{0x36900000},{0x36920000},{0x36940000},{0x36960000},{0x36980000},{0x369a0000},{0x369c0000},{0x369e0000},{0x36a00000},{0x36a20000},{0x36a40000},{0x36a60000},{0x36a80000},{0x36aa0000},{0x36ac0000},{0x36ae0000},{0x36b00000},{0x36b20000},{0x36b40000},{0x36b60000},{0x36b80000},{0x36ba0000},{0x36bc0000},{0x36be0000}, +{0x36c00000},{0x36c20000},{0x36c40000},{0x36c60000},{0x36c80000},{0x36ca0000},{0x36cc0000},{0x36ce0000},{0x36d00000},{0x36d20000},{0x36d40000},{0x36d60000},{0x36d80000},{0x36da0000},{0x36dc0000},{0x36de0000},{0x36e00000},{0x36e20000},{0x36e40000},{0x36e60000},{0x36e80000},{0x36ea0000},{0x36ec0000},{0x36ee0000},{0x36f00000},{0x36f20000},{0x36f40000},{0x36f60000},{0x36f80000},{0x36fa0000},{0x36fc0000},{0x36fe0000}, +{0x37000000},{0x37010000},{0x37020000},{0x37030000},{0x37040000},{0x37050000},{0x37060000},{0x37070000},{0x37080000},{0x37090000},{0x370a0000},{0x370b0000},{0x370c0000},{0x370d0000},{0x370e0000},{0x370f0000},{0x37100000},{0x37110000},{0x37120000},{0x37130000},{0x37140000},{0x37150000},{0x37160000},{0x37170000},{0x37180000},{0x37190000},{0x371a0000},{0x371b0000},{0x371c0000},{0x371d0000},{0x371e0000},{0x371f0000}, +{0x37200000},{0x37210000},{0x37220000},{0x37230000},{0x37240000},{0x37250000},{0x37260000},{0x37270000},{0x37280000},{0x37290000},{0x372a0000},{0x372b0000},{0x372c0000},{0x372d0000},{0x372e0000},{0x372f0000},{0x37300000},{0x37310000},{0x37320000},{0x37330000},{0x37340000},{0x37350000},{0x37360000},{0x37370000},{0x37380000},{0x37390000},{0x373a0000},{0x373b0000},{0x373c0000},{0x373d0000},{0x373e0000},{0x373f0000}, +{0x37400000},{0x37410000},{0x37420000},{0x37430000},{0x37440000},{0x37450000},{0x37460000},{0x37470000},{0x37480000},{0x37490000},{0x374a0000},{0x374b0000},{0x374c0000},{0x374d0000},{0x374e0000},{0x374f0000},{0x37500000},{0x37510000},{0x37520000},{0x37530000},{0x37540000},{0x37550000},{0x37560000},{0x37570000},{0x37580000},{0x37590000},{0x375a0000},{0x375b0000},{0x375c0000},{0x375d0000},{0x375e0000},{0x375f0000}, +{0x37600000},{0x37610000},{0x37620000},{0x37630000},{0x37640000},{0x37650000},{0x37660000},{0x37670000},{0x37680000},{0x37690000},{0x376a0000},{0x376b0000},{0x376c0000},{0x376d0000},{0x376e0000},{0x376f0000},{0x37700000},{0x37710000},{0x37720000},{0x37730000},{0x37740000},{0x37750000},{0x37760000},{0x37770000},{0x37780000},{0x37790000},{0x377a0000},{0x377b0000},{0x377c0000},{0x377d0000},{0x377e0000},{0x377f0000}, +{0x37800000},{0x37808000},{0x37810000},{0x37818000},{0x37820000},{0x37828000},{0x37830000},{0x37838000},{0x37840000},{0x37848000},{0x37850000},{0x37858000},{0x37860000},{0x37868000},{0x37870000},{0x37878000},{0x37880000},{0x37888000},{0x37890000},{0x37898000},{0x378a0000},{0x378a8000},{0x378b0000},{0x378b8000},{0x378c0000},{0x378c8000},{0x378d0000},{0x378d8000},{0x378e0000},{0x378e8000},{0x378f0000},{0x378f8000}, +{0x37900000},{0x37908000},{0x37910000},{0x37918000},{0x37920000},{0x37928000},{0x37930000},{0x37938000},{0x37940000},{0x37948000},{0x37950000},{0x37958000},{0x37960000},{0x37968000},{0x37970000},{0x37978000},{0x37980000},{0x37988000},{0x37990000},{0x37998000},{0x379a0000},{0x379a8000},{0x379b0000},{0x379b8000},{0x379c0000},{0x379c8000},{0x379d0000},{0x379d8000},{0x379e0000},{0x379e8000},{0x379f0000},{0x379f8000}, +{0x37a00000},{0x37a08000},{0x37a10000},{0x37a18000},{0x37a20000},{0x37a28000},{0x37a30000},{0x37a38000},{0x37a40000},{0x37a48000},{0x37a50000},{0x37a58000},{0x37a60000},{0x37a68000},{0x37a70000},{0x37a78000},{0x37a80000},{0x37a88000},{0x37a90000},{0x37a98000},{0x37aa0000},{0x37aa8000},{0x37ab0000},{0x37ab8000},{0x37ac0000},{0x37ac8000},{0x37ad0000},{0x37ad8000},{0x37ae0000},{0x37ae8000},{0x37af0000},{0x37af8000}, +{0x37b00000},{0x37b08000},{0x37b10000},{0x37b18000},{0x37b20000},{0x37b28000},{0x37b30000},{0x37b38000},{0x37b40000},{0x37b48000},{0x37b50000},{0x37b58000},{0x37b60000},{0x37b68000},{0x37b70000},{0x37b78000},{0x37b80000},{0x37b88000},{0x37b90000},{0x37b98000},{0x37ba0000},{0x37ba8000},{0x37bb0000},{0x37bb8000},{0x37bc0000},{0x37bc8000},{0x37bd0000},{0x37bd8000},{0x37be0000},{0x37be8000},{0x37bf0000},{0x37bf8000}, +{0x37c00000},{0x37c08000},{0x37c10000},{0x37c18000},{0x37c20000},{0x37c28000},{0x37c30000},{0x37c38000},{0x37c40000},{0x37c48000},{0x37c50000},{0x37c58000},{0x37c60000},{0x37c68000},{0x37c70000},{0x37c78000},{0x37c80000},{0x37c88000},{0x37c90000},{0x37c98000},{0x37ca0000},{0x37ca8000},{0x37cb0000},{0x37cb8000},{0x37cc0000},{0x37cc8000},{0x37cd0000},{0x37cd8000},{0x37ce0000},{0x37ce8000},{0x37cf0000},{0x37cf8000}, +{0x37d00000},{0x37d08000},{0x37d10000},{0x37d18000},{0x37d20000},{0x37d28000},{0x37d30000},{0x37d38000},{0x37d40000},{0x37d48000},{0x37d50000},{0x37d58000},{0x37d60000},{0x37d68000},{0x37d70000},{0x37d78000},{0x37d80000},{0x37d88000},{0x37d90000},{0x37d98000},{0x37da0000},{0x37da8000},{0x37db0000},{0x37db8000},{0x37dc0000},{0x37dc8000},{0x37dd0000},{0x37dd8000},{0x37de0000},{0x37de8000},{0x37df0000},{0x37df8000}, +{0x37e00000},{0x37e08000},{0x37e10000},{0x37e18000},{0x37e20000},{0x37e28000},{0x37e30000},{0x37e38000},{0x37e40000},{0x37e48000},{0x37e50000},{0x37e58000},{0x37e60000},{0x37e68000},{0x37e70000},{0x37e78000},{0x37e80000},{0x37e88000},{0x37e90000},{0x37e98000},{0x37ea0000},{0x37ea8000},{0x37eb0000},{0x37eb8000},{0x37ec0000},{0x37ec8000},{0x37ed0000},{0x37ed8000},{0x37ee0000},{0x37ee8000},{0x37ef0000},{0x37ef8000}, +{0x37f00000},{0x37f08000},{0x37f10000},{0x37f18000},{0x37f20000},{0x37f28000},{0x37f30000},{0x37f38000},{0x37f40000},{0x37f48000},{0x37f50000},{0x37f58000},{0x37f60000},{0x37f68000},{0x37f70000},{0x37f78000},{0x37f80000},{0x37f88000},{0x37f90000},{0x37f98000},{0x37fa0000},{0x37fa8000},{0x37fb0000},{0x37fb8000},{0x37fc0000},{0x37fc8000},{0x37fd0000},{0x37fd8000},{0x37fe0000},{0x37fe8000},{0x37ff0000},{0x37ff8000}, +{0x38000000},{0x38004000},{0x38008000},{0x3800c000},{0x38010000},{0x38014000},{0x38018000},{0x3801c000},{0x38020000},{0x38024000},{0x38028000},{0x3802c000},{0x38030000},{0x38034000},{0x38038000},{0x3803c000},{0x38040000},{0x38044000},{0x38048000},{0x3804c000},{0x38050000},{0x38054000},{0x38058000},{0x3805c000},{0x38060000},{0x38064000},{0x38068000},{0x3806c000},{0x38070000},{0x38074000},{0x38078000},{0x3807c000}, +{0x38080000},{0x38084000},{0x38088000},{0x3808c000},{0x38090000},{0x38094000},{0x38098000},{0x3809c000},{0x380a0000},{0x380a4000},{0x380a8000},{0x380ac000},{0x380b0000},{0x380b4000},{0x380b8000},{0x380bc000},{0x380c0000},{0x380c4000},{0x380c8000},{0x380cc000},{0x380d0000},{0x380d4000},{0x380d8000},{0x380dc000},{0x380e0000},{0x380e4000},{0x380e8000},{0x380ec000},{0x380f0000},{0x380f4000},{0x380f8000},{0x380fc000}, +{0x38100000},{0x38104000},{0x38108000},{0x3810c000},{0x38110000},{0x38114000},{0x38118000},{0x3811c000},{0x38120000},{0x38124000},{0x38128000},{0x3812c000},{0x38130000},{0x38134000},{0x38138000},{0x3813c000},{0x38140000},{0x38144000},{0x38148000},{0x3814c000},{0x38150000},{0x38154000},{0x38158000},{0x3815c000},{0x38160000},{0x38164000},{0x38168000},{0x3816c000},{0x38170000},{0x38174000},{0x38178000},{0x3817c000}, +{0x38180000},{0x38184000},{0x38188000},{0x3818c000},{0x38190000},{0x38194000},{0x38198000},{0x3819c000},{0x381a0000},{0x381a4000},{0x381a8000},{0x381ac000},{0x381b0000},{0x381b4000},{0x381b8000},{0x381bc000},{0x381c0000},{0x381c4000},{0x381c8000},{0x381cc000},{0x381d0000},{0x381d4000},{0x381d8000},{0x381dc000},{0x381e0000},{0x381e4000},{0x381e8000},{0x381ec000},{0x381f0000},{0x381f4000},{0x381f8000},{0x381fc000}, +{0x38200000},{0x38204000},{0x38208000},{0x3820c000},{0x38210000},{0x38214000},{0x38218000},{0x3821c000},{0x38220000},{0x38224000},{0x38228000},{0x3822c000},{0x38230000},{0x38234000},{0x38238000},{0x3823c000},{0x38240000},{0x38244000},{0x38248000},{0x3824c000},{0x38250000},{0x38254000},{0x38258000},{0x3825c000},{0x38260000},{0x38264000},{0x38268000},{0x3826c000},{0x38270000},{0x38274000},{0x38278000},{0x3827c000}, +{0x38280000},{0x38284000},{0x38288000},{0x3828c000},{0x38290000},{0x38294000},{0x38298000},{0x3829c000},{0x382a0000},{0x382a4000},{0x382a8000},{0x382ac000},{0x382b0000},{0x382b4000},{0x382b8000},{0x382bc000},{0x382c0000},{0x382c4000},{0x382c8000},{0x382cc000},{0x382d0000},{0x382d4000},{0x382d8000},{0x382dc000},{0x382e0000},{0x382e4000},{0x382e8000},{0x382ec000},{0x382f0000},{0x382f4000},{0x382f8000},{0x382fc000}, +{0x38300000},{0x38304000},{0x38308000},{0x3830c000},{0x38310000},{0x38314000},{0x38318000},{0x3831c000},{0x38320000},{0x38324000},{0x38328000},{0x3832c000},{0x38330000},{0x38334000},{0x38338000},{0x3833c000},{0x38340000},{0x38344000},{0x38348000},{0x3834c000},{0x38350000},{0x38354000},{0x38358000},{0x3835c000},{0x38360000},{0x38364000},{0x38368000},{0x3836c000},{0x38370000},{0x38374000},{0x38378000},{0x3837c000}, +{0x38380000},{0x38384000},{0x38388000},{0x3838c000},{0x38390000},{0x38394000},{0x38398000},{0x3839c000},{0x383a0000},{0x383a4000},{0x383a8000},{0x383ac000},{0x383b0000},{0x383b4000},{0x383b8000},{0x383bc000},{0x383c0000},{0x383c4000},{0x383c8000},{0x383cc000},{0x383d0000},{0x383d4000},{0x383d8000},{0x383dc000},{0x383e0000},{0x383e4000},{0x383e8000},{0x383ec000},{0x383f0000},{0x383f4000},{0x383f8000},{0x383fc000}, +{0x38400000},{0x38404000},{0x38408000},{0x3840c000},{0x38410000},{0x38414000},{0x38418000},{0x3841c000},{0x38420000},{0x38424000},{0x38428000},{0x3842c000},{0x38430000},{0x38434000},{0x38438000},{0x3843c000},{0x38440000},{0x38444000},{0x38448000},{0x3844c000},{0x38450000},{0x38454000},{0x38458000},{0x3845c000},{0x38460000},{0x38464000},{0x38468000},{0x3846c000},{0x38470000},{0x38474000},{0x38478000},{0x3847c000}, +{0x38480000},{0x38484000},{0x38488000},{0x3848c000},{0x38490000},{0x38494000},{0x38498000},{0x3849c000},{0x384a0000},{0x384a4000},{0x384a8000},{0x384ac000},{0x384b0000},{0x384b4000},{0x384b8000},{0x384bc000},{0x384c0000},{0x384c4000},{0x384c8000},{0x384cc000},{0x384d0000},{0x384d4000},{0x384d8000},{0x384dc000},{0x384e0000},{0x384e4000},{0x384e8000},{0x384ec000},{0x384f0000},{0x384f4000},{0x384f8000},{0x384fc000}, +{0x38500000},{0x38504000},{0x38508000},{0x3850c000},{0x38510000},{0x38514000},{0x38518000},{0x3851c000},{0x38520000},{0x38524000},{0x38528000},{0x3852c000},{0x38530000},{0x38534000},{0x38538000},{0x3853c000},{0x38540000},{0x38544000},{0x38548000},{0x3854c000},{0x38550000},{0x38554000},{0x38558000},{0x3855c000},{0x38560000},{0x38564000},{0x38568000},{0x3856c000},{0x38570000},{0x38574000},{0x38578000},{0x3857c000}, +{0x38580000},{0x38584000},{0x38588000},{0x3858c000},{0x38590000},{0x38594000},{0x38598000},{0x3859c000},{0x385a0000},{0x385a4000},{0x385a8000},{0x385ac000},{0x385b0000},{0x385b4000},{0x385b8000},{0x385bc000},{0x385c0000},{0x385c4000},{0x385c8000},{0x385cc000},{0x385d0000},{0x385d4000},{0x385d8000},{0x385dc000},{0x385e0000},{0x385e4000},{0x385e8000},{0x385ec000},{0x385f0000},{0x385f4000},{0x385f8000},{0x385fc000}, +{0x38600000},{0x38604000},{0x38608000},{0x3860c000},{0x38610000},{0x38614000},{0x38618000},{0x3861c000},{0x38620000},{0x38624000},{0x38628000},{0x3862c000},{0x38630000},{0x38634000},{0x38638000},{0x3863c000},{0x38640000},{0x38644000},{0x38648000},{0x3864c000},{0x38650000},{0x38654000},{0x38658000},{0x3865c000},{0x38660000},{0x38664000},{0x38668000},{0x3866c000},{0x38670000},{0x38674000},{0x38678000},{0x3867c000}, +{0x38680000},{0x38684000},{0x38688000},{0x3868c000},{0x38690000},{0x38694000},{0x38698000},{0x3869c000},{0x386a0000},{0x386a4000},{0x386a8000},{0x386ac000},{0x386b0000},{0x386b4000},{0x386b8000},{0x386bc000},{0x386c0000},{0x386c4000},{0x386c8000},{0x386cc000},{0x386d0000},{0x386d4000},{0x386d8000},{0x386dc000},{0x386e0000},{0x386e4000},{0x386e8000},{0x386ec000},{0x386f0000},{0x386f4000},{0x386f8000},{0x386fc000}, +{0x38700000},{0x38704000},{0x38708000},{0x3870c000},{0x38710000},{0x38714000},{0x38718000},{0x3871c000},{0x38720000},{0x38724000},{0x38728000},{0x3872c000},{0x38730000},{0x38734000},{0x38738000},{0x3873c000},{0x38740000},{0x38744000},{0x38748000},{0x3874c000},{0x38750000},{0x38754000},{0x38758000},{0x3875c000},{0x38760000},{0x38764000},{0x38768000},{0x3876c000},{0x38770000},{0x38774000},{0x38778000},{0x3877c000}, +{0x38780000},{0x38784000},{0x38788000},{0x3878c000},{0x38790000},{0x38794000},{0x38798000},{0x3879c000},{0x387a0000},{0x387a4000},{0x387a8000},{0x387ac000},{0x387b0000},{0x387b4000},{0x387b8000},{0x387bc000},{0x387c0000},{0x387c4000},{0x387c8000},{0x387cc000},{0x387d0000},{0x387d4000},{0x387d8000},{0x387dc000},{0x387e0000},{0x387e4000},{0x387e8000},{0x387ec000},{0x387f0000},{0x387f4000},{0x387f8000},{0x387fc000}, +{0x38800000},{0x38802000},{0x38804000},{0x38806000},{0x38808000},{0x3880a000},{0x3880c000},{0x3880e000},{0x38810000},{0x38812000},{0x38814000},{0x38816000},{0x38818000},{0x3881a000},{0x3881c000},{0x3881e000},{0x38820000},{0x38822000},{0x38824000},{0x38826000},{0x38828000},{0x3882a000},{0x3882c000},{0x3882e000},{0x38830000},{0x38832000},{0x38834000},{0x38836000},{0x38838000},{0x3883a000},{0x3883c000},{0x3883e000}, +{0x38840000},{0x38842000},{0x38844000},{0x38846000},{0x38848000},{0x3884a000},{0x3884c000},{0x3884e000},{0x38850000},{0x38852000},{0x38854000},{0x38856000},{0x38858000},{0x3885a000},{0x3885c000},{0x3885e000},{0x38860000},{0x38862000},{0x38864000},{0x38866000},{0x38868000},{0x3886a000},{0x3886c000},{0x3886e000},{0x38870000},{0x38872000},{0x38874000},{0x38876000},{0x38878000},{0x3887a000},{0x3887c000},{0x3887e000}, +{0x38880000},{0x38882000},{0x38884000},{0x38886000},{0x38888000},{0x3888a000},{0x3888c000},{0x3888e000},{0x38890000},{0x38892000},{0x38894000},{0x38896000},{0x38898000},{0x3889a000},{0x3889c000},{0x3889e000},{0x388a0000},{0x388a2000},{0x388a4000},{0x388a6000},{0x388a8000},{0x388aa000},{0x388ac000},{0x388ae000},{0x388b0000},{0x388b2000},{0x388b4000},{0x388b6000},{0x388b8000},{0x388ba000},{0x388bc000},{0x388be000}, +{0x388c0000},{0x388c2000},{0x388c4000},{0x388c6000},{0x388c8000},{0x388ca000},{0x388cc000},{0x388ce000},{0x388d0000},{0x388d2000},{0x388d4000},{0x388d6000},{0x388d8000},{0x388da000},{0x388dc000},{0x388de000},{0x388e0000},{0x388e2000},{0x388e4000},{0x388e6000},{0x388e8000},{0x388ea000},{0x388ec000},{0x388ee000},{0x388f0000},{0x388f2000},{0x388f4000},{0x388f6000},{0x388f8000},{0x388fa000},{0x388fc000},{0x388fe000}, +{0x38900000},{0x38902000},{0x38904000},{0x38906000},{0x38908000},{0x3890a000},{0x3890c000},{0x3890e000},{0x38910000},{0x38912000},{0x38914000},{0x38916000},{0x38918000},{0x3891a000},{0x3891c000},{0x3891e000},{0x38920000},{0x38922000},{0x38924000},{0x38926000},{0x38928000},{0x3892a000},{0x3892c000},{0x3892e000},{0x38930000},{0x38932000},{0x38934000},{0x38936000},{0x38938000},{0x3893a000},{0x3893c000},{0x3893e000}, +{0x38940000},{0x38942000},{0x38944000},{0x38946000},{0x38948000},{0x3894a000},{0x3894c000},{0x3894e000},{0x38950000},{0x38952000},{0x38954000},{0x38956000},{0x38958000},{0x3895a000},{0x3895c000},{0x3895e000},{0x38960000},{0x38962000},{0x38964000},{0x38966000},{0x38968000},{0x3896a000},{0x3896c000},{0x3896e000},{0x38970000},{0x38972000},{0x38974000},{0x38976000},{0x38978000},{0x3897a000},{0x3897c000},{0x3897e000}, +{0x38980000},{0x38982000},{0x38984000},{0x38986000},{0x38988000},{0x3898a000},{0x3898c000},{0x3898e000},{0x38990000},{0x38992000},{0x38994000},{0x38996000},{0x38998000},{0x3899a000},{0x3899c000},{0x3899e000},{0x389a0000},{0x389a2000},{0x389a4000},{0x389a6000},{0x389a8000},{0x389aa000},{0x389ac000},{0x389ae000},{0x389b0000},{0x389b2000},{0x389b4000},{0x389b6000},{0x389b8000},{0x389ba000},{0x389bc000},{0x389be000}, +{0x389c0000},{0x389c2000},{0x389c4000},{0x389c6000},{0x389c8000},{0x389ca000},{0x389cc000},{0x389ce000},{0x389d0000},{0x389d2000},{0x389d4000},{0x389d6000},{0x389d8000},{0x389da000},{0x389dc000},{0x389de000},{0x389e0000},{0x389e2000},{0x389e4000},{0x389e6000},{0x389e8000},{0x389ea000},{0x389ec000},{0x389ee000},{0x389f0000},{0x389f2000},{0x389f4000},{0x389f6000},{0x389f8000},{0x389fa000},{0x389fc000},{0x389fe000}, +{0x38a00000},{0x38a02000},{0x38a04000},{0x38a06000},{0x38a08000},{0x38a0a000},{0x38a0c000},{0x38a0e000},{0x38a10000},{0x38a12000},{0x38a14000},{0x38a16000},{0x38a18000},{0x38a1a000},{0x38a1c000},{0x38a1e000},{0x38a20000},{0x38a22000},{0x38a24000},{0x38a26000},{0x38a28000},{0x38a2a000},{0x38a2c000},{0x38a2e000},{0x38a30000},{0x38a32000},{0x38a34000},{0x38a36000},{0x38a38000},{0x38a3a000},{0x38a3c000},{0x38a3e000}, +{0x38a40000},{0x38a42000},{0x38a44000},{0x38a46000},{0x38a48000},{0x38a4a000},{0x38a4c000},{0x38a4e000},{0x38a50000},{0x38a52000},{0x38a54000},{0x38a56000},{0x38a58000},{0x38a5a000},{0x38a5c000},{0x38a5e000},{0x38a60000},{0x38a62000},{0x38a64000},{0x38a66000},{0x38a68000},{0x38a6a000},{0x38a6c000},{0x38a6e000},{0x38a70000},{0x38a72000},{0x38a74000},{0x38a76000},{0x38a78000},{0x38a7a000},{0x38a7c000},{0x38a7e000}, +{0x38a80000},{0x38a82000},{0x38a84000},{0x38a86000},{0x38a88000},{0x38a8a000},{0x38a8c000},{0x38a8e000},{0x38a90000},{0x38a92000},{0x38a94000},{0x38a96000},{0x38a98000},{0x38a9a000},{0x38a9c000},{0x38a9e000},{0x38aa0000},{0x38aa2000},{0x38aa4000},{0x38aa6000},{0x38aa8000},{0x38aaa000},{0x38aac000},{0x38aae000},{0x38ab0000},{0x38ab2000},{0x38ab4000},{0x38ab6000},{0x38ab8000},{0x38aba000},{0x38abc000},{0x38abe000}, +{0x38ac0000},{0x38ac2000},{0x38ac4000},{0x38ac6000},{0x38ac8000},{0x38aca000},{0x38acc000},{0x38ace000},{0x38ad0000},{0x38ad2000},{0x38ad4000},{0x38ad6000},{0x38ad8000},{0x38ada000},{0x38adc000},{0x38ade000},{0x38ae0000},{0x38ae2000},{0x38ae4000},{0x38ae6000},{0x38ae8000},{0x38aea000},{0x38aec000},{0x38aee000},{0x38af0000},{0x38af2000},{0x38af4000},{0x38af6000},{0x38af8000},{0x38afa000},{0x38afc000},{0x38afe000}, +{0x38b00000},{0x38b02000},{0x38b04000},{0x38b06000},{0x38b08000},{0x38b0a000},{0x38b0c000},{0x38b0e000},{0x38b10000},{0x38b12000},{0x38b14000},{0x38b16000},{0x38b18000},{0x38b1a000},{0x38b1c000},{0x38b1e000},{0x38b20000},{0x38b22000},{0x38b24000},{0x38b26000},{0x38b28000},{0x38b2a000},{0x38b2c000},{0x38b2e000},{0x38b30000},{0x38b32000},{0x38b34000},{0x38b36000},{0x38b38000},{0x38b3a000},{0x38b3c000},{0x38b3e000}, +{0x38b40000},{0x38b42000},{0x38b44000},{0x38b46000},{0x38b48000},{0x38b4a000},{0x38b4c000},{0x38b4e000},{0x38b50000},{0x38b52000},{0x38b54000},{0x38b56000},{0x38b58000},{0x38b5a000},{0x38b5c000},{0x38b5e000},{0x38b60000},{0x38b62000},{0x38b64000},{0x38b66000},{0x38b68000},{0x38b6a000},{0x38b6c000},{0x38b6e000},{0x38b70000},{0x38b72000},{0x38b74000},{0x38b76000},{0x38b78000},{0x38b7a000},{0x38b7c000},{0x38b7e000}, +{0x38b80000},{0x38b82000},{0x38b84000},{0x38b86000},{0x38b88000},{0x38b8a000},{0x38b8c000},{0x38b8e000},{0x38b90000},{0x38b92000},{0x38b94000},{0x38b96000},{0x38b98000},{0x38b9a000},{0x38b9c000},{0x38b9e000},{0x38ba0000},{0x38ba2000},{0x38ba4000},{0x38ba6000},{0x38ba8000},{0x38baa000},{0x38bac000},{0x38bae000},{0x38bb0000},{0x38bb2000},{0x38bb4000},{0x38bb6000},{0x38bb8000},{0x38bba000},{0x38bbc000},{0x38bbe000}, +{0x38bc0000},{0x38bc2000},{0x38bc4000},{0x38bc6000},{0x38bc8000},{0x38bca000},{0x38bcc000},{0x38bce000},{0x38bd0000},{0x38bd2000},{0x38bd4000},{0x38bd6000},{0x38bd8000},{0x38bda000},{0x38bdc000},{0x38bde000},{0x38be0000},{0x38be2000},{0x38be4000},{0x38be6000},{0x38be8000},{0x38bea000},{0x38bec000},{0x38bee000},{0x38bf0000},{0x38bf2000},{0x38bf4000},{0x38bf6000},{0x38bf8000},{0x38bfa000},{0x38bfc000},{0x38bfe000}, +{0x38c00000},{0x38c02000},{0x38c04000},{0x38c06000},{0x38c08000},{0x38c0a000},{0x38c0c000},{0x38c0e000},{0x38c10000},{0x38c12000},{0x38c14000},{0x38c16000},{0x38c18000},{0x38c1a000},{0x38c1c000},{0x38c1e000},{0x38c20000},{0x38c22000},{0x38c24000},{0x38c26000},{0x38c28000},{0x38c2a000},{0x38c2c000},{0x38c2e000},{0x38c30000},{0x38c32000},{0x38c34000},{0x38c36000},{0x38c38000},{0x38c3a000},{0x38c3c000},{0x38c3e000}, +{0x38c40000},{0x38c42000},{0x38c44000},{0x38c46000},{0x38c48000},{0x38c4a000},{0x38c4c000},{0x38c4e000},{0x38c50000},{0x38c52000},{0x38c54000},{0x38c56000},{0x38c58000},{0x38c5a000},{0x38c5c000},{0x38c5e000},{0x38c60000},{0x38c62000},{0x38c64000},{0x38c66000},{0x38c68000},{0x38c6a000},{0x38c6c000},{0x38c6e000},{0x38c70000},{0x38c72000},{0x38c74000},{0x38c76000},{0x38c78000},{0x38c7a000},{0x38c7c000},{0x38c7e000}, +{0x38c80000},{0x38c82000},{0x38c84000},{0x38c86000},{0x38c88000},{0x38c8a000},{0x38c8c000},{0x38c8e000},{0x38c90000},{0x38c92000},{0x38c94000},{0x38c96000},{0x38c98000},{0x38c9a000},{0x38c9c000},{0x38c9e000},{0x38ca0000},{0x38ca2000},{0x38ca4000},{0x38ca6000},{0x38ca8000},{0x38caa000},{0x38cac000},{0x38cae000},{0x38cb0000},{0x38cb2000},{0x38cb4000},{0x38cb6000},{0x38cb8000},{0x38cba000},{0x38cbc000},{0x38cbe000}, +{0x38cc0000},{0x38cc2000},{0x38cc4000},{0x38cc6000},{0x38cc8000},{0x38cca000},{0x38ccc000},{0x38cce000},{0x38cd0000},{0x38cd2000},{0x38cd4000},{0x38cd6000},{0x38cd8000},{0x38cda000},{0x38cdc000},{0x38cde000},{0x38ce0000},{0x38ce2000},{0x38ce4000},{0x38ce6000},{0x38ce8000},{0x38cea000},{0x38cec000},{0x38cee000},{0x38cf0000},{0x38cf2000},{0x38cf4000},{0x38cf6000},{0x38cf8000},{0x38cfa000},{0x38cfc000},{0x38cfe000}, +{0x38d00000},{0x38d02000},{0x38d04000},{0x38d06000},{0x38d08000},{0x38d0a000},{0x38d0c000},{0x38d0e000},{0x38d10000},{0x38d12000},{0x38d14000},{0x38d16000},{0x38d18000},{0x38d1a000},{0x38d1c000},{0x38d1e000},{0x38d20000},{0x38d22000},{0x38d24000},{0x38d26000},{0x38d28000},{0x38d2a000},{0x38d2c000},{0x38d2e000},{0x38d30000},{0x38d32000},{0x38d34000},{0x38d36000},{0x38d38000},{0x38d3a000},{0x38d3c000},{0x38d3e000}, +{0x38d40000},{0x38d42000},{0x38d44000},{0x38d46000},{0x38d48000},{0x38d4a000},{0x38d4c000},{0x38d4e000},{0x38d50000},{0x38d52000},{0x38d54000},{0x38d56000},{0x38d58000},{0x38d5a000},{0x38d5c000},{0x38d5e000},{0x38d60000},{0x38d62000},{0x38d64000},{0x38d66000},{0x38d68000},{0x38d6a000},{0x38d6c000},{0x38d6e000},{0x38d70000},{0x38d72000},{0x38d74000},{0x38d76000},{0x38d78000},{0x38d7a000},{0x38d7c000},{0x38d7e000}, +{0x38d80000},{0x38d82000},{0x38d84000},{0x38d86000},{0x38d88000},{0x38d8a000},{0x38d8c000},{0x38d8e000},{0x38d90000},{0x38d92000},{0x38d94000},{0x38d96000},{0x38d98000},{0x38d9a000},{0x38d9c000},{0x38d9e000},{0x38da0000},{0x38da2000},{0x38da4000},{0x38da6000},{0x38da8000},{0x38daa000},{0x38dac000},{0x38dae000},{0x38db0000},{0x38db2000},{0x38db4000},{0x38db6000},{0x38db8000},{0x38dba000},{0x38dbc000},{0x38dbe000}, +{0x38dc0000},{0x38dc2000},{0x38dc4000},{0x38dc6000},{0x38dc8000},{0x38dca000},{0x38dcc000},{0x38dce000},{0x38dd0000},{0x38dd2000},{0x38dd4000},{0x38dd6000},{0x38dd8000},{0x38dda000},{0x38ddc000},{0x38dde000},{0x38de0000},{0x38de2000},{0x38de4000},{0x38de6000},{0x38de8000},{0x38dea000},{0x38dec000},{0x38dee000},{0x38df0000},{0x38df2000},{0x38df4000},{0x38df6000},{0x38df8000},{0x38dfa000},{0x38dfc000},{0x38dfe000}, +{0x38e00000},{0x38e02000},{0x38e04000},{0x38e06000},{0x38e08000},{0x38e0a000},{0x38e0c000},{0x38e0e000},{0x38e10000},{0x38e12000},{0x38e14000},{0x38e16000},{0x38e18000},{0x38e1a000},{0x38e1c000},{0x38e1e000},{0x38e20000},{0x38e22000},{0x38e24000},{0x38e26000},{0x38e28000},{0x38e2a000},{0x38e2c000},{0x38e2e000},{0x38e30000},{0x38e32000},{0x38e34000},{0x38e36000},{0x38e38000},{0x38e3a000},{0x38e3c000},{0x38e3e000}, +{0x38e40000},{0x38e42000},{0x38e44000},{0x38e46000},{0x38e48000},{0x38e4a000},{0x38e4c000},{0x38e4e000},{0x38e50000},{0x38e52000},{0x38e54000},{0x38e56000},{0x38e58000},{0x38e5a000},{0x38e5c000},{0x38e5e000},{0x38e60000},{0x38e62000},{0x38e64000},{0x38e66000},{0x38e68000},{0x38e6a000},{0x38e6c000},{0x38e6e000},{0x38e70000},{0x38e72000},{0x38e74000},{0x38e76000},{0x38e78000},{0x38e7a000},{0x38e7c000},{0x38e7e000}, +{0x38e80000},{0x38e82000},{0x38e84000},{0x38e86000},{0x38e88000},{0x38e8a000},{0x38e8c000},{0x38e8e000},{0x38e90000},{0x38e92000},{0x38e94000},{0x38e96000},{0x38e98000},{0x38e9a000},{0x38e9c000},{0x38e9e000},{0x38ea0000},{0x38ea2000},{0x38ea4000},{0x38ea6000},{0x38ea8000},{0x38eaa000},{0x38eac000},{0x38eae000},{0x38eb0000},{0x38eb2000},{0x38eb4000},{0x38eb6000},{0x38eb8000},{0x38eba000},{0x38ebc000},{0x38ebe000}, +{0x38ec0000},{0x38ec2000},{0x38ec4000},{0x38ec6000},{0x38ec8000},{0x38eca000},{0x38ecc000},{0x38ece000},{0x38ed0000},{0x38ed2000},{0x38ed4000},{0x38ed6000},{0x38ed8000},{0x38eda000},{0x38edc000},{0x38ede000},{0x38ee0000},{0x38ee2000},{0x38ee4000},{0x38ee6000},{0x38ee8000},{0x38eea000},{0x38eec000},{0x38eee000},{0x38ef0000},{0x38ef2000},{0x38ef4000},{0x38ef6000},{0x38ef8000},{0x38efa000},{0x38efc000},{0x38efe000}, +{0x38f00000},{0x38f02000},{0x38f04000},{0x38f06000},{0x38f08000},{0x38f0a000},{0x38f0c000},{0x38f0e000},{0x38f10000},{0x38f12000},{0x38f14000},{0x38f16000},{0x38f18000},{0x38f1a000},{0x38f1c000},{0x38f1e000},{0x38f20000},{0x38f22000},{0x38f24000},{0x38f26000},{0x38f28000},{0x38f2a000},{0x38f2c000},{0x38f2e000},{0x38f30000},{0x38f32000},{0x38f34000},{0x38f36000},{0x38f38000},{0x38f3a000},{0x38f3c000},{0x38f3e000}, +{0x38f40000},{0x38f42000},{0x38f44000},{0x38f46000},{0x38f48000},{0x38f4a000},{0x38f4c000},{0x38f4e000},{0x38f50000},{0x38f52000},{0x38f54000},{0x38f56000},{0x38f58000},{0x38f5a000},{0x38f5c000},{0x38f5e000},{0x38f60000},{0x38f62000},{0x38f64000},{0x38f66000},{0x38f68000},{0x38f6a000},{0x38f6c000},{0x38f6e000},{0x38f70000},{0x38f72000},{0x38f74000},{0x38f76000},{0x38f78000},{0x38f7a000},{0x38f7c000},{0x38f7e000}, +{0x38f80000},{0x38f82000},{0x38f84000},{0x38f86000},{0x38f88000},{0x38f8a000},{0x38f8c000},{0x38f8e000},{0x38f90000},{0x38f92000},{0x38f94000},{0x38f96000},{0x38f98000},{0x38f9a000},{0x38f9c000},{0x38f9e000},{0x38fa0000},{0x38fa2000},{0x38fa4000},{0x38fa6000},{0x38fa8000},{0x38faa000},{0x38fac000},{0x38fae000},{0x38fb0000},{0x38fb2000},{0x38fb4000},{0x38fb6000},{0x38fb8000},{0x38fba000},{0x38fbc000},{0x38fbe000}, +{0x38fc0000},{0x38fc2000},{0x38fc4000},{0x38fc6000},{0x38fc8000},{0x38fca000},{0x38fcc000},{0x38fce000},{0x38fd0000},{0x38fd2000},{0x38fd4000},{0x38fd6000},{0x38fd8000},{0x38fda000},{0x38fdc000},{0x38fde000},{0x38fe0000},{0x38fe2000},{0x38fe4000},{0x38fe6000},{0x38fe8000},{0x38fea000},{0x38fec000},{0x38fee000},{0x38ff0000},{0x38ff2000},{0x38ff4000},{0x38ff6000},{0x38ff8000},{0x38ffa000},{0x38ffc000},{0x38ffe000}, +{0x39000000},{0x39002000},{0x39004000},{0x39006000},{0x39008000},{0x3900a000},{0x3900c000},{0x3900e000},{0x39010000},{0x39012000},{0x39014000},{0x39016000},{0x39018000},{0x3901a000},{0x3901c000},{0x3901e000},{0x39020000},{0x39022000},{0x39024000},{0x39026000},{0x39028000},{0x3902a000},{0x3902c000},{0x3902e000},{0x39030000},{0x39032000},{0x39034000},{0x39036000},{0x39038000},{0x3903a000},{0x3903c000},{0x3903e000}, +{0x39040000},{0x39042000},{0x39044000},{0x39046000},{0x39048000},{0x3904a000},{0x3904c000},{0x3904e000},{0x39050000},{0x39052000},{0x39054000},{0x39056000},{0x39058000},{0x3905a000},{0x3905c000},{0x3905e000},{0x39060000},{0x39062000},{0x39064000},{0x39066000},{0x39068000},{0x3906a000},{0x3906c000},{0x3906e000},{0x39070000},{0x39072000},{0x39074000},{0x39076000},{0x39078000},{0x3907a000},{0x3907c000},{0x3907e000}, +{0x39080000},{0x39082000},{0x39084000},{0x39086000},{0x39088000},{0x3908a000},{0x3908c000},{0x3908e000},{0x39090000},{0x39092000},{0x39094000},{0x39096000},{0x39098000},{0x3909a000},{0x3909c000},{0x3909e000},{0x390a0000},{0x390a2000},{0x390a4000},{0x390a6000},{0x390a8000},{0x390aa000},{0x390ac000},{0x390ae000},{0x390b0000},{0x390b2000},{0x390b4000},{0x390b6000},{0x390b8000},{0x390ba000},{0x390bc000},{0x390be000}, +{0x390c0000},{0x390c2000},{0x390c4000},{0x390c6000},{0x390c8000},{0x390ca000},{0x390cc000},{0x390ce000},{0x390d0000},{0x390d2000},{0x390d4000},{0x390d6000},{0x390d8000},{0x390da000},{0x390dc000},{0x390de000},{0x390e0000},{0x390e2000},{0x390e4000},{0x390e6000},{0x390e8000},{0x390ea000},{0x390ec000},{0x390ee000},{0x390f0000},{0x390f2000},{0x390f4000},{0x390f6000},{0x390f8000},{0x390fa000},{0x390fc000},{0x390fe000}, +{0x39100000},{0x39102000},{0x39104000},{0x39106000},{0x39108000},{0x3910a000},{0x3910c000},{0x3910e000},{0x39110000},{0x39112000},{0x39114000},{0x39116000},{0x39118000},{0x3911a000},{0x3911c000},{0x3911e000},{0x39120000},{0x39122000},{0x39124000},{0x39126000},{0x39128000},{0x3912a000},{0x3912c000},{0x3912e000},{0x39130000},{0x39132000},{0x39134000},{0x39136000},{0x39138000},{0x3913a000},{0x3913c000},{0x3913e000}, +{0x39140000},{0x39142000},{0x39144000},{0x39146000},{0x39148000},{0x3914a000},{0x3914c000},{0x3914e000},{0x39150000},{0x39152000},{0x39154000},{0x39156000},{0x39158000},{0x3915a000},{0x3915c000},{0x3915e000},{0x39160000},{0x39162000},{0x39164000},{0x39166000},{0x39168000},{0x3916a000},{0x3916c000},{0x3916e000},{0x39170000},{0x39172000},{0x39174000},{0x39176000},{0x39178000},{0x3917a000},{0x3917c000},{0x3917e000}, +{0x39180000},{0x39182000},{0x39184000},{0x39186000},{0x39188000},{0x3918a000},{0x3918c000},{0x3918e000},{0x39190000},{0x39192000},{0x39194000},{0x39196000},{0x39198000},{0x3919a000},{0x3919c000},{0x3919e000},{0x391a0000},{0x391a2000},{0x391a4000},{0x391a6000},{0x391a8000},{0x391aa000},{0x391ac000},{0x391ae000},{0x391b0000},{0x391b2000},{0x391b4000},{0x391b6000},{0x391b8000},{0x391ba000},{0x391bc000},{0x391be000}, +{0x391c0000},{0x391c2000},{0x391c4000},{0x391c6000},{0x391c8000},{0x391ca000},{0x391cc000},{0x391ce000},{0x391d0000},{0x391d2000},{0x391d4000},{0x391d6000},{0x391d8000},{0x391da000},{0x391dc000},{0x391de000},{0x391e0000},{0x391e2000},{0x391e4000},{0x391e6000},{0x391e8000},{0x391ea000},{0x391ec000},{0x391ee000},{0x391f0000},{0x391f2000},{0x391f4000},{0x391f6000},{0x391f8000},{0x391fa000},{0x391fc000},{0x391fe000}, +{0x39200000},{0x39202000},{0x39204000},{0x39206000},{0x39208000},{0x3920a000},{0x3920c000},{0x3920e000},{0x39210000},{0x39212000},{0x39214000},{0x39216000},{0x39218000},{0x3921a000},{0x3921c000},{0x3921e000},{0x39220000},{0x39222000},{0x39224000},{0x39226000},{0x39228000},{0x3922a000},{0x3922c000},{0x3922e000},{0x39230000},{0x39232000},{0x39234000},{0x39236000},{0x39238000},{0x3923a000},{0x3923c000},{0x3923e000}, +{0x39240000},{0x39242000},{0x39244000},{0x39246000},{0x39248000},{0x3924a000},{0x3924c000},{0x3924e000},{0x39250000},{0x39252000},{0x39254000},{0x39256000},{0x39258000},{0x3925a000},{0x3925c000},{0x3925e000},{0x39260000},{0x39262000},{0x39264000},{0x39266000},{0x39268000},{0x3926a000},{0x3926c000},{0x3926e000},{0x39270000},{0x39272000},{0x39274000},{0x39276000},{0x39278000},{0x3927a000},{0x3927c000},{0x3927e000}, +{0x39280000},{0x39282000},{0x39284000},{0x39286000},{0x39288000},{0x3928a000},{0x3928c000},{0x3928e000},{0x39290000},{0x39292000},{0x39294000},{0x39296000},{0x39298000},{0x3929a000},{0x3929c000},{0x3929e000},{0x392a0000},{0x392a2000},{0x392a4000},{0x392a6000},{0x392a8000},{0x392aa000},{0x392ac000},{0x392ae000},{0x392b0000},{0x392b2000},{0x392b4000},{0x392b6000},{0x392b8000},{0x392ba000},{0x392bc000},{0x392be000}, +{0x392c0000},{0x392c2000},{0x392c4000},{0x392c6000},{0x392c8000},{0x392ca000},{0x392cc000},{0x392ce000},{0x392d0000},{0x392d2000},{0x392d4000},{0x392d6000},{0x392d8000},{0x392da000},{0x392dc000},{0x392de000},{0x392e0000},{0x392e2000},{0x392e4000},{0x392e6000},{0x392e8000},{0x392ea000},{0x392ec000},{0x392ee000},{0x392f0000},{0x392f2000},{0x392f4000},{0x392f6000},{0x392f8000},{0x392fa000},{0x392fc000},{0x392fe000}, +{0x39300000},{0x39302000},{0x39304000},{0x39306000},{0x39308000},{0x3930a000},{0x3930c000},{0x3930e000},{0x39310000},{0x39312000},{0x39314000},{0x39316000},{0x39318000},{0x3931a000},{0x3931c000},{0x3931e000},{0x39320000},{0x39322000},{0x39324000},{0x39326000},{0x39328000},{0x3932a000},{0x3932c000},{0x3932e000},{0x39330000},{0x39332000},{0x39334000},{0x39336000},{0x39338000},{0x3933a000},{0x3933c000},{0x3933e000}, +{0x39340000},{0x39342000},{0x39344000},{0x39346000},{0x39348000},{0x3934a000},{0x3934c000},{0x3934e000},{0x39350000},{0x39352000},{0x39354000},{0x39356000},{0x39358000},{0x3935a000},{0x3935c000},{0x3935e000},{0x39360000},{0x39362000},{0x39364000},{0x39366000},{0x39368000},{0x3936a000},{0x3936c000},{0x3936e000},{0x39370000},{0x39372000},{0x39374000},{0x39376000},{0x39378000},{0x3937a000},{0x3937c000},{0x3937e000}, +{0x39380000},{0x39382000},{0x39384000},{0x39386000},{0x39388000},{0x3938a000},{0x3938c000},{0x3938e000},{0x39390000},{0x39392000},{0x39394000},{0x39396000},{0x39398000},{0x3939a000},{0x3939c000},{0x3939e000},{0x393a0000},{0x393a2000},{0x393a4000},{0x393a6000},{0x393a8000},{0x393aa000},{0x393ac000},{0x393ae000},{0x393b0000},{0x393b2000},{0x393b4000},{0x393b6000},{0x393b8000},{0x393ba000},{0x393bc000},{0x393be000}, +{0x393c0000},{0x393c2000},{0x393c4000},{0x393c6000},{0x393c8000},{0x393ca000},{0x393cc000},{0x393ce000},{0x393d0000},{0x393d2000},{0x393d4000},{0x393d6000},{0x393d8000},{0x393da000},{0x393dc000},{0x393de000},{0x393e0000},{0x393e2000},{0x393e4000},{0x393e6000},{0x393e8000},{0x393ea000},{0x393ec000},{0x393ee000},{0x393f0000},{0x393f2000},{0x393f4000},{0x393f6000},{0x393f8000},{0x393fa000},{0x393fc000},{0x393fe000}, +{0x39400000},{0x39402000},{0x39404000},{0x39406000},{0x39408000},{0x3940a000},{0x3940c000},{0x3940e000},{0x39410000},{0x39412000},{0x39414000},{0x39416000},{0x39418000},{0x3941a000},{0x3941c000},{0x3941e000},{0x39420000},{0x39422000},{0x39424000},{0x39426000},{0x39428000},{0x3942a000},{0x3942c000},{0x3942e000},{0x39430000},{0x39432000},{0x39434000},{0x39436000},{0x39438000},{0x3943a000},{0x3943c000},{0x3943e000}, +{0x39440000},{0x39442000},{0x39444000},{0x39446000},{0x39448000},{0x3944a000},{0x3944c000},{0x3944e000},{0x39450000},{0x39452000},{0x39454000},{0x39456000},{0x39458000},{0x3945a000},{0x3945c000},{0x3945e000},{0x39460000},{0x39462000},{0x39464000},{0x39466000},{0x39468000},{0x3946a000},{0x3946c000},{0x3946e000},{0x39470000},{0x39472000},{0x39474000},{0x39476000},{0x39478000},{0x3947a000},{0x3947c000},{0x3947e000}, +{0x39480000},{0x39482000},{0x39484000},{0x39486000},{0x39488000},{0x3948a000},{0x3948c000},{0x3948e000},{0x39490000},{0x39492000},{0x39494000},{0x39496000},{0x39498000},{0x3949a000},{0x3949c000},{0x3949e000},{0x394a0000},{0x394a2000},{0x394a4000},{0x394a6000},{0x394a8000},{0x394aa000},{0x394ac000},{0x394ae000},{0x394b0000},{0x394b2000},{0x394b4000},{0x394b6000},{0x394b8000},{0x394ba000},{0x394bc000},{0x394be000}, +{0x394c0000},{0x394c2000},{0x394c4000},{0x394c6000},{0x394c8000},{0x394ca000},{0x394cc000},{0x394ce000},{0x394d0000},{0x394d2000},{0x394d4000},{0x394d6000},{0x394d8000},{0x394da000},{0x394dc000},{0x394de000},{0x394e0000},{0x394e2000},{0x394e4000},{0x394e6000},{0x394e8000},{0x394ea000},{0x394ec000},{0x394ee000},{0x394f0000},{0x394f2000},{0x394f4000},{0x394f6000},{0x394f8000},{0x394fa000},{0x394fc000},{0x394fe000}, +{0x39500000},{0x39502000},{0x39504000},{0x39506000},{0x39508000},{0x3950a000},{0x3950c000},{0x3950e000},{0x39510000},{0x39512000},{0x39514000},{0x39516000},{0x39518000},{0x3951a000},{0x3951c000},{0x3951e000},{0x39520000},{0x39522000},{0x39524000},{0x39526000},{0x39528000},{0x3952a000},{0x3952c000},{0x3952e000},{0x39530000},{0x39532000},{0x39534000},{0x39536000},{0x39538000},{0x3953a000},{0x3953c000},{0x3953e000}, +{0x39540000},{0x39542000},{0x39544000},{0x39546000},{0x39548000},{0x3954a000},{0x3954c000},{0x3954e000},{0x39550000},{0x39552000},{0x39554000},{0x39556000},{0x39558000},{0x3955a000},{0x3955c000},{0x3955e000},{0x39560000},{0x39562000},{0x39564000},{0x39566000},{0x39568000},{0x3956a000},{0x3956c000},{0x3956e000},{0x39570000},{0x39572000},{0x39574000},{0x39576000},{0x39578000},{0x3957a000},{0x3957c000},{0x3957e000}, +{0x39580000},{0x39582000},{0x39584000},{0x39586000},{0x39588000},{0x3958a000},{0x3958c000},{0x3958e000},{0x39590000},{0x39592000},{0x39594000},{0x39596000},{0x39598000},{0x3959a000},{0x3959c000},{0x3959e000},{0x395a0000},{0x395a2000},{0x395a4000},{0x395a6000},{0x395a8000},{0x395aa000},{0x395ac000},{0x395ae000},{0x395b0000},{0x395b2000},{0x395b4000},{0x395b6000},{0x395b8000},{0x395ba000},{0x395bc000},{0x395be000}, +{0x395c0000},{0x395c2000},{0x395c4000},{0x395c6000},{0x395c8000},{0x395ca000},{0x395cc000},{0x395ce000},{0x395d0000},{0x395d2000},{0x395d4000},{0x395d6000},{0x395d8000},{0x395da000},{0x395dc000},{0x395de000},{0x395e0000},{0x395e2000},{0x395e4000},{0x395e6000},{0x395e8000},{0x395ea000},{0x395ec000},{0x395ee000},{0x395f0000},{0x395f2000},{0x395f4000},{0x395f6000},{0x395f8000},{0x395fa000},{0x395fc000},{0x395fe000}, +{0x39600000},{0x39602000},{0x39604000},{0x39606000},{0x39608000},{0x3960a000},{0x3960c000},{0x3960e000},{0x39610000},{0x39612000},{0x39614000},{0x39616000},{0x39618000},{0x3961a000},{0x3961c000},{0x3961e000},{0x39620000},{0x39622000},{0x39624000},{0x39626000},{0x39628000},{0x3962a000},{0x3962c000},{0x3962e000},{0x39630000},{0x39632000},{0x39634000},{0x39636000},{0x39638000},{0x3963a000},{0x3963c000},{0x3963e000}, +{0x39640000},{0x39642000},{0x39644000},{0x39646000},{0x39648000},{0x3964a000},{0x3964c000},{0x3964e000},{0x39650000},{0x39652000},{0x39654000},{0x39656000},{0x39658000},{0x3965a000},{0x3965c000},{0x3965e000},{0x39660000},{0x39662000},{0x39664000},{0x39666000},{0x39668000},{0x3966a000},{0x3966c000},{0x3966e000},{0x39670000},{0x39672000},{0x39674000},{0x39676000},{0x39678000},{0x3967a000},{0x3967c000},{0x3967e000}, +{0x39680000},{0x39682000},{0x39684000},{0x39686000},{0x39688000},{0x3968a000},{0x3968c000},{0x3968e000},{0x39690000},{0x39692000},{0x39694000},{0x39696000},{0x39698000},{0x3969a000},{0x3969c000},{0x3969e000},{0x396a0000},{0x396a2000},{0x396a4000},{0x396a6000},{0x396a8000},{0x396aa000},{0x396ac000},{0x396ae000},{0x396b0000},{0x396b2000},{0x396b4000},{0x396b6000},{0x396b8000},{0x396ba000},{0x396bc000},{0x396be000}, +{0x396c0000},{0x396c2000},{0x396c4000},{0x396c6000},{0x396c8000},{0x396ca000},{0x396cc000},{0x396ce000},{0x396d0000},{0x396d2000},{0x396d4000},{0x396d6000},{0x396d8000},{0x396da000},{0x396dc000},{0x396de000},{0x396e0000},{0x396e2000},{0x396e4000},{0x396e6000},{0x396e8000},{0x396ea000},{0x396ec000},{0x396ee000},{0x396f0000},{0x396f2000},{0x396f4000},{0x396f6000},{0x396f8000},{0x396fa000},{0x396fc000},{0x396fe000}, +{0x39700000},{0x39702000},{0x39704000},{0x39706000},{0x39708000},{0x3970a000},{0x3970c000},{0x3970e000},{0x39710000},{0x39712000},{0x39714000},{0x39716000},{0x39718000},{0x3971a000},{0x3971c000},{0x3971e000},{0x39720000},{0x39722000},{0x39724000},{0x39726000},{0x39728000},{0x3972a000},{0x3972c000},{0x3972e000},{0x39730000},{0x39732000},{0x39734000},{0x39736000},{0x39738000},{0x3973a000},{0x3973c000},{0x3973e000}, +{0x39740000},{0x39742000},{0x39744000},{0x39746000},{0x39748000},{0x3974a000},{0x3974c000},{0x3974e000},{0x39750000},{0x39752000},{0x39754000},{0x39756000},{0x39758000},{0x3975a000},{0x3975c000},{0x3975e000},{0x39760000},{0x39762000},{0x39764000},{0x39766000},{0x39768000},{0x3976a000},{0x3976c000},{0x3976e000},{0x39770000},{0x39772000},{0x39774000},{0x39776000},{0x39778000},{0x3977a000},{0x3977c000},{0x3977e000}, +{0x39780000},{0x39782000},{0x39784000},{0x39786000},{0x39788000},{0x3978a000},{0x3978c000},{0x3978e000},{0x39790000},{0x39792000},{0x39794000},{0x39796000},{0x39798000},{0x3979a000},{0x3979c000},{0x3979e000},{0x397a0000},{0x397a2000},{0x397a4000},{0x397a6000},{0x397a8000},{0x397aa000},{0x397ac000},{0x397ae000},{0x397b0000},{0x397b2000},{0x397b4000},{0x397b6000},{0x397b8000},{0x397ba000},{0x397bc000},{0x397be000}, +{0x397c0000},{0x397c2000},{0x397c4000},{0x397c6000},{0x397c8000},{0x397ca000},{0x397cc000},{0x397ce000},{0x397d0000},{0x397d2000},{0x397d4000},{0x397d6000},{0x397d8000},{0x397da000},{0x397dc000},{0x397de000},{0x397e0000},{0x397e2000},{0x397e4000},{0x397e6000},{0x397e8000},{0x397ea000},{0x397ec000},{0x397ee000},{0x397f0000},{0x397f2000},{0x397f4000},{0x397f6000},{0x397f8000},{0x397fa000},{0x397fc000},{0x397fe000}, +{0x39800000},{0x39802000},{0x39804000},{0x39806000},{0x39808000},{0x3980a000},{0x3980c000},{0x3980e000},{0x39810000},{0x39812000},{0x39814000},{0x39816000},{0x39818000},{0x3981a000},{0x3981c000},{0x3981e000},{0x39820000},{0x39822000},{0x39824000},{0x39826000},{0x39828000},{0x3982a000},{0x3982c000},{0x3982e000},{0x39830000},{0x39832000},{0x39834000},{0x39836000},{0x39838000},{0x3983a000},{0x3983c000},{0x3983e000}, +{0x39840000},{0x39842000},{0x39844000},{0x39846000},{0x39848000},{0x3984a000},{0x3984c000},{0x3984e000},{0x39850000},{0x39852000},{0x39854000},{0x39856000},{0x39858000},{0x3985a000},{0x3985c000},{0x3985e000},{0x39860000},{0x39862000},{0x39864000},{0x39866000},{0x39868000},{0x3986a000},{0x3986c000},{0x3986e000},{0x39870000},{0x39872000},{0x39874000},{0x39876000},{0x39878000},{0x3987a000},{0x3987c000},{0x3987e000}, +{0x39880000},{0x39882000},{0x39884000},{0x39886000},{0x39888000},{0x3988a000},{0x3988c000},{0x3988e000},{0x39890000},{0x39892000},{0x39894000},{0x39896000},{0x39898000},{0x3989a000},{0x3989c000},{0x3989e000},{0x398a0000},{0x398a2000},{0x398a4000},{0x398a6000},{0x398a8000},{0x398aa000},{0x398ac000},{0x398ae000},{0x398b0000},{0x398b2000},{0x398b4000},{0x398b6000},{0x398b8000},{0x398ba000},{0x398bc000},{0x398be000}, +{0x398c0000},{0x398c2000},{0x398c4000},{0x398c6000},{0x398c8000},{0x398ca000},{0x398cc000},{0x398ce000},{0x398d0000},{0x398d2000},{0x398d4000},{0x398d6000},{0x398d8000},{0x398da000},{0x398dc000},{0x398de000},{0x398e0000},{0x398e2000},{0x398e4000},{0x398e6000},{0x398e8000},{0x398ea000},{0x398ec000},{0x398ee000},{0x398f0000},{0x398f2000},{0x398f4000},{0x398f6000},{0x398f8000},{0x398fa000},{0x398fc000},{0x398fe000}, +{0x39900000},{0x39902000},{0x39904000},{0x39906000},{0x39908000},{0x3990a000},{0x3990c000},{0x3990e000},{0x39910000},{0x39912000},{0x39914000},{0x39916000},{0x39918000},{0x3991a000},{0x3991c000},{0x3991e000},{0x39920000},{0x39922000},{0x39924000},{0x39926000},{0x39928000},{0x3992a000},{0x3992c000},{0x3992e000},{0x39930000},{0x39932000},{0x39934000},{0x39936000},{0x39938000},{0x3993a000},{0x3993c000},{0x3993e000}, +{0x39940000},{0x39942000},{0x39944000},{0x39946000},{0x39948000},{0x3994a000},{0x3994c000},{0x3994e000},{0x39950000},{0x39952000},{0x39954000},{0x39956000},{0x39958000},{0x3995a000},{0x3995c000},{0x3995e000},{0x39960000},{0x39962000},{0x39964000},{0x39966000},{0x39968000},{0x3996a000},{0x3996c000},{0x3996e000},{0x39970000},{0x39972000},{0x39974000},{0x39976000},{0x39978000},{0x3997a000},{0x3997c000},{0x3997e000}, +{0x39980000},{0x39982000},{0x39984000},{0x39986000},{0x39988000},{0x3998a000},{0x3998c000},{0x3998e000},{0x39990000},{0x39992000},{0x39994000},{0x39996000},{0x39998000},{0x3999a000},{0x3999c000},{0x3999e000},{0x399a0000},{0x399a2000},{0x399a4000},{0x399a6000},{0x399a8000},{0x399aa000},{0x399ac000},{0x399ae000},{0x399b0000},{0x399b2000},{0x399b4000},{0x399b6000},{0x399b8000},{0x399ba000},{0x399bc000},{0x399be000}, +{0x399c0000},{0x399c2000},{0x399c4000},{0x399c6000},{0x399c8000},{0x399ca000},{0x399cc000},{0x399ce000},{0x399d0000},{0x399d2000},{0x399d4000},{0x399d6000},{0x399d8000},{0x399da000},{0x399dc000},{0x399de000},{0x399e0000},{0x399e2000},{0x399e4000},{0x399e6000},{0x399e8000},{0x399ea000},{0x399ec000},{0x399ee000},{0x399f0000},{0x399f2000},{0x399f4000},{0x399f6000},{0x399f8000},{0x399fa000},{0x399fc000},{0x399fe000}, +{0x39a00000},{0x39a02000},{0x39a04000},{0x39a06000},{0x39a08000},{0x39a0a000},{0x39a0c000},{0x39a0e000},{0x39a10000},{0x39a12000},{0x39a14000},{0x39a16000},{0x39a18000},{0x39a1a000},{0x39a1c000},{0x39a1e000},{0x39a20000},{0x39a22000},{0x39a24000},{0x39a26000},{0x39a28000},{0x39a2a000},{0x39a2c000},{0x39a2e000},{0x39a30000},{0x39a32000},{0x39a34000},{0x39a36000},{0x39a38000},{0x39a3a000},{0x39a3c000},{0x39a3e000}, +{0x39a40000},{0x39a42000},{0x39a44000},{0x39a46000},{0x39a48000},{0x39a4a000},{0x39a4c000},{0x39a4e000},{0x39a50000},{0x39a52000},{0x39a54000},{0x39a56000},{0x39a58000},{0x39a5a000},{0x39a5c000},{0x39a5e000},{0x39a60000},{0x39a62000},{0x39a64000},{0x39a66000},{0x39a68000},{0x39a6a000},{0x39a6c000},{0x39a6e000},{0x39a70000},{0x39a72000},{0x39a74000},{0x39a76000},{0x39a78000},{0x39a7a000},{0x39a7c000},{0x39a7e000}, +{0x39a80000},{0x39a82000},{0x39a84000},{0x39a86000},{0x39a88000},{0x39a8a000},{0x39a8c000},{0x39a8e000},{0x39a90000},{0x39a92000},{0x39a94000},{0x39a96000},{0x39a98000},{0x39a9a000},{0x39a9c000},{0x39a9e000},{0x39aa0000},{0x39aa2000},{0x39aa4000},{0x39aa6000},{0x39aa8000},{0x39aaa000},{0x39aac000},{0x39aae000},{0x39ab0000},{0x39ab2000},{0x39ab4000},{0x39ab6000},{0x39ab8000},{0x39aba000},{0x39abc000},{0x39abe000}, +{0x39ac0000},{0x39ac2000},{0x39ac4000},{0x39ac6000},{0x39ac8000},{0x39aca000},{0x39acc000},{0x39ace000},{0x39ad0000},{0x39ad2000},{0x39ad4000},{0x39ad6000},{0x39ad8000},{0x39ada000},{0x39adc000},{0x39ade000},{0x39ae0000},{0x39ae2000},{0x39ae4000},{0x39ae6000},{0x39ae8000},{0x39aea000},{0x39aec000},{0x39aee000},{0x39af0000},{0x39af2000},{0x39af4000},{0x39af6000},{0x39af8000},{0x39afa000},{0x39afc000},{0x39afe000}, +{0x39b00000},{0x39b02000},{0x39b04000},{0x39b06000},{0x39b08000},{0x39b0a000},{0x39b0c000},{0x39b0e000},{0x39b10000},{0x39b12000},{0x39b14000},{0x39b16000},{0x39b18000},{0x39b1a000},{0x39b1c000},{0x39b1e000},{0x39b20000},{0x39b22000},{0x39b24000},{0x39b26000},{0x39b28000},{0x39b2a000},{0x39b2c000},{0x39b2e000},{0x39b30000},{0x39b32000},{0x39b34000},{0x39b36000},{0x39b38000},{0x39b3a000},{0x39b3c000},{0x39b3e000}, +{0x39b40000},{0x39b42000},{0x39b44000},{0x39b46000},{0x39b48000},{0x39b4a000},{0x39b4c000},{0x39b4e000},{0x39b50000},{0x39b52000},{0x39b54000},{0x39b56000},{0x39b58000},{0x39b5a000},{0x39b5c000},{0x39b5e000},{0x39b60000},{0x39b62000},{0x39b64000},{0x39b66000},{0x39b68000},{0x39b6a000},{0x39b6c000},{0x39b6e000},{0x39b70000},{0x39b72000},{0x39b74000},{0x39b76000},{0x39b78000},{0x39b7a000},{0x39b7c000},{0x39b7e000}, +{0x39b80000},{0x39b82000},{0x39b84000},{0x39b86000},{0x39b88000},{0x39b8a000},{0x39b8c000},{0x39b8e000},{0x39b90000},{0x39b92000},{0x39b94000},{0x39b96000},{0x39b98000},{0x39b9a000},{0x39b9c000},{0x39b9e000},{0x39ba0000},{0x39ba2000},{0x39ba4000},{0x39ba6000},{0x39ba8000},{0x39baa000},{0x39bac000},{0x39bae000},{0x39bb0000},{0x39bb2000},{0x39bb4000},{0x39bb6000},{0x39bb8000},{0x39bba000},{0x39bbc000},{0x39bbe000}, +{0x39bc0000},{0x39bc2000},{0x39bc4000},{0x39bc6000},{0x39bc8000},{0x39bca000},{0x39bcc000},{0x39bce000},{0x39bd0000},{0x39bd2000},{0x39bd4000},{0x39bd6000},{0x39bd8000},{0x39bda000},{0x39bdc000},{0x39bde000},{0x39be0000},{0x39be2000},{0x39be4000},{0x39be6000},{0x39be8000},{0x39bea000},{0x39bec000},{0x39bee000},{0x39bf0000},{0x39bf2000},{0x39bf4000},{0x39bf6000},{0x39bf8000},{0x39bfa000},{0x39bfc000},{0x39bfe000}, +{0x39c00000},{0x39c02000},{0x39c04000},{0x39c06000},{0x39c08000},{0x39c0a000},{0x39c0c000},{0x39c0e000},{0x39c10000},{0x39c12000},{0x39c14000},{0x39c16000},{0x39c18000},{0x39c1a000},{0x39c1c000},{0x39c1e000},{0x39c20000},{0x39c22000},{0x39c24000},{0x39c26000},{0x39c28000},{0x39c2a000},{0x39c2c000},{0x39c2e000},{0x39c30000},{0x39c32000},{0x39c34000},{0x39c36000},{0x39c38000},{0x39c3a000},{0x39c3c000},{0x39c3e000}, +{0x39c40000},{0x39c42000},{0x39c44000},{0x39c46000},{0x39c48000},{0x39c4a000},{0x39c4c000},{0x39c4e000},{0x39c50000},{0x39c52000},{0x39c54000},{0x39c56000},{0x39c58000},{0x39c5a000},{0x39c5c000},{0x39c5e000},{0x39c60000},{0x39c62000},{0x39c64000},{0x39c66000},{0x39c68000},{0x39c6a000},{0x39c6c000},{0x39c6e000},{0x39c70000},{0x39c72000},{0x39c74000},{0x39c76000},{0x39c78000},{0x39c7a000},{0x39c7c000},{0x39c7e000}, +{0x39c80000},{0x39c82000},{0x39c84000},{0x39c86000},{0x39c88000},{0x39c8a000},{0x39c8c000},{0x39c8e000},{0x39c90000},{0x39c92000},{0x39c94000},{0x39c96000},{0x39c98000},{0x39c9a000},{0x39c9c000},{0x39c9e000},{0x39ca0000},{0x39ca2000},{0x39ca4000},{0x39ca6000},{0x39ca8000},{0x39caa000},{0x39cac000},{0x39cae000},{0x39cb0000},{0x39cb2000},{0x39cb4000},{0x39cb6000},{0x39cb8000},{0x39cba000},{0x39cbc000},{0x39cbe000}, +{0x39cc0000},{0x39cc2000},{0x39cc4000},{0x39cc6000},{0x39cc8000},{0x39cca000},{0x39ccc000},{0x39cce000},{0x39cd0000},{0x39cd2000},{0x39cd4000},{0x39cd6000},{0x39cd8000},{0x39cda000},{0x39cdc000},{0x39cde000},{0x39ce0000},{0x39ce2000},{0x39ce4000},{0x39ce6000},{0x39ce8000},{0x39cea000},{0x39cec000},{0x39cee000},{0x39cf0000},{0x39cf2000},{0x39cf4000},{0x39cf6000},{0x39cf8000},{0x39cfa000},{0x39cfc000},{0x39cfe000}, +{0x39d00000},{0x39d02000},{0x39d04000},{0x39d06000},{0x39d08000},{0x39d0a000},{0x39d0c000},{0x39d0e000},{0x39d10000},{0x39d12000},{0x39d14000},{0x39d16000},{0x39d18000},{0x39d1a000},{0x39d1c000},{0x39d1e000},{0x39d20000},{0x39d22000},{0x39d24000},{0x39d26000},{0x39d28000},{0x39d2a000},{0x39d2c000},{0x39d2e000},{0x39d30000},{0x39d32000},{0x39d34000},{0x39d36000},{0x39d38000},{0x39d3a000},{0x39d3c000},{0x39d3e000}, +{0x39d40000},{0x39d42000},{0x39d44000},{0x39d46000},{0x39d48000},{0x39d4a000},{0x39d4c000},{0x39d4e000},{0x39d50000},{0x39d52000},{0x39d54000},{0x39d56000},{0x39d58000},{0x39d5a000},{0x39d5c000},{0x39d5e000},{0x39d60000},{0x39d62000},{0x39d64000},{0x39d66000},{0x39d68000},{0x39d6a000},{0x39d6c000},{0x39d6e000},{0x39d70000},{0x39d72000},{0x39d74000},{0x39d76000},{0x39d78000},{0x39d7a000},{0x39d7c000},{0x39d7e000}, +{0x39d80000},{0x39d82000},{0x39d84000},{0x39d86000},{0x39d88000},{0x39d8a000},{0x39d8c000},{0x39d8e000},{0x39d90000},{0x39d92000},{0x39d94000},{0x39d96000},{0x39d98000},{0x39d9a000},{0x39d9c000},{0x39d9e000},{0x39da0000},{0x39da2000},{0x39da4000},{0x39da6000},{0x39da8000},{0x39daa000},{0x39dac000},{0x39dae000},{0x39db0000},{0x39db2000},{0x39db4000},{0x39db6000},{0x39db8000},{0x39dba000},{0x39dbc000},{0x39dbe000}, +{0x39dc0000},{0x39dc2000},{0x39dc4000},{0x39dc6000},{0x39dc8000},{0x39dca000},{0x39dcc000},{0x39dce000},{0x39dd0000},{0x39dd2000},{0x39dd4000},{0x39dd6000},{0x39dd8000},{0x39dda000},{0x39ddc000},{0x39dde000},{0x39de0000},{0x39de2000},{0x39de4000},{0x39de6000},{0x39de8000},{0x39dea000},{0x39dec000},{0x39dee000},{0x39df0000},{0x39df2000},{0x39df4000},{0x39df6000},{0x39df8000},{0x39dfa000},{0x39dfc000},{0x39dfe000}, +{0x39e00000},{0x39e02000},{0x39e04000},{0x39e06000},{0x39e08000},{0x39e0a000},{0x39e0c000},{0x39e0e000},{0x39e10000},{0x39e12000},{0x39e14000},{0x39e16000},{0x39e18000},{0x39e1a000},{0x39e1c000},{0x39e1e000},{0x39e20000},{0x39e22000},{0x39e24000},{0x39e26000},{0x39e28000},{0x39e2a000},{0x39e2c000},{0x39e2e000},{0x39e30000},{0x39e32000},{0x39e34000},{0x39e36000},{0x39e38000},{0x39e3a000},{0x39e3c000},{0x39e3e000}, +{0x39e40000},{0x39e42000},{0x39e44000},{0x39e46000},{0x39e48000},{0x39e4a000},{0x39e4c000},{0x39e4e000},{0x39e50000},{0x39e52000},{0x39e54000},{0x39e56000},{0x39e58000},{0x39e5a000},{0x39e5c000},{0x39e5e000},{0x39e60000},{0x39e62000},{0x39e64000},{0x39e66000},{0x39e68000},{0x39e6a000},{0x39e6c000},{0x39e6e000},{0x39e70000},{0x39e72000},{0x39e74000},{0x39e76000},{0x39e78000},{0x39e7a000},{0x39e7c000},{0x39e7e000}, +{0x39e80000},{0x39e82000},{0x39e84000},{0x39e86000},{0x39e88000},{0x39e8a000},{0x39e8c000},{0x39e8e000},{0x39e90000},{0x39e92000},{0x39e94000},{0x39e96000},{0x39e98000},{0x39e9a000},{0x39e9c000},{0x39e9e000},{0x39ea0000},{0x39ea2000},{0x39ea4000},{0x39ea6000},{0x39ea8000},{0x39eaa000},{0x39eac000},{0x39eae000},{0x39eb0000},{0x39eb2000},{0x39eb4000},{0x39eb6000},{0x39eb8000},{0x39eba000},{0x39ebc000},{0x39ebe000}, +{0x39ec0000},{0x39ec2000},{0x39ec4000},{0x39ec6000},{0x39ec8000},{0x39eca000},{0x39ecc000},{0x39ece000},{0x39ed0000},{0x39ed2000},{0x39ed4000},{0x39ed6000},{0x39ed8000},{0x39eda000},{0x39edc000},{0x39ede000},{0x39ee0000},{0x39ee2000},{0x39ee4000},{0x39ee6000},{0x39ee8000},{0x39eea000},{0x39eec000},{0x39eee000},{0x39ef0000},{0x39ef2000},{0x39ef4000},{0x39ef6000},{0x39ef8000},{0x39efa000},{0x39efc000},{0x39efe000}, +{0x39f00000},{0x39f02000},{0x39f04000},{0x39f06000},{0x39f08000},{0x39f0a000},{0x39f0c000},{0x39f0e000},{0x39f10000},{0x39f12000},{0x39f14000},{0x39f16000},{0x39f18000},{0x39f1a000},{0x39f1c000},{0x39f1e000},{0x39f20000},{0x39f22000},{0x39f24000},{0x39f26000},{0x39f28000},{0x39f2a000},{0x39f2c000},{0x39f2e000},{0x39f30000},{0x39f32000},{0x39f34000},{0x39f36000},{0x39f38000},{0x39f3a000},{0x39f3c000},{0x39f3e000}, +{0x39f40000},{0x39f42000},{0x39f44000},{0x39f46000},{0x39f48000},{0x39f4a000},{0x39f4c000},{0x39f4e000},{0x39f50000},{0x39f52000},{0x39f54000},{0x39f56000},{0x39f58000},{0x39f5a000},{0x39f5c000},{0x39f5e000},{0x39f60000},{0x39f62000},{0x39f64000},{0x39f66000},{0x39f68000},{0x39f6a000},{0x39f6c000},{0x39f6e000},{0x39f70000},{0x39f72000},{0x39f74000},{0x39f76000},{0x39f78000},{0x39f7a000},{0x39f7c000},{0x39f7e000}, +{0x39f80000},{0x39f82000},{0x39f84000},{0x39f86000},{0x39f88000},{0x39f8a000},{0x39f8c000},{0x39f8e000},{0x39f90000},{0x39f92000},{0x39f94000},{0x39f96000},{0x39f98000},{0x39f9a000},{0x39f9c000},{0x39f9e000},{0x39fa0000},{0x39fa2000},{0x39fa4000},{0x39fa6000},{0x39fa8000},{0x39faa000},{0x39fac000},{0x39fae000},{0x39fb0000},{0x39fb2000},{0x39fb4000},{0x39fb6000},{0x39fb8000},{0x39fba000},{0x39fbc000},{0x39fbe000}, +{0x39fc0000},{0x39fc2000},{0x39fc4000},{0x39fc6000},{0x39fc8000},{0x39fca000},{0x39fcc000},{0x39fce000},{0x39fd0000},{0x39fd2000},{0x39fd4000},{0x39fd6000},{0x39fd8000},{0x39fda000},{0x39fdc000},{0x39fde000},{0x39fe0000},{0x39fe2000},{0x39fe4000},{0x39fe6000},{0x39fe8000},{0x39fea000},{0x39fec000},{0x39fee000},{0x39ff0000},{0x39ff2000},{0x39ff4000},{0x39ff6000},{0x39ff8000},{0x39ffa000},{0x39ffc000},{0x39ffe000}, +{0x3a000000},{0x3a002000},{0x3a004000},{0x3a006000},{0x3a008000},{0x3a00a000},{0x3a00c000},{0x3a00e000},{0x3a010000},{0x3a012000},{0x3a014000},{0x3a016000},{0x3a018000},{0x3a01a000},{0x3a01c000},{0x3a01e000},{0x3a020000},{0x3a022000},{0x3a024000},{0x3a026000},{0x3a028000},{0x3a02a000},{0x3a02c000},{0x3a02e000},{0x3a030000},{0x3a032000},{0x3a034000},{0x3a036000},{0x3a038000},{0x3a03a000},{0x3a03c000},{0x3a03e000}, +{0x3a040000},{0x3a042000},{0x3a044000},{0x3a046000},{0x3a048000},{0x3a04a000},{0x3a04c000},{0x3a04e000},{0x3a050000},{0x3a052000},{0x3a054000},{0x3a056000},{0x3a058000},{0x3a05a000},{0x3a05c000},{0x3a05e000},{0x3a060000},{0x3a062000},{0x3a064000},{0x3a066000},{0x3a068000},{0x3a06a000},{0x3a06c000},{0x3a06e000},{0x3a070000},{0x3a072000},{0x3a074000},{0x3a076000},{0x3a078000},{0x3a07a000},{0x3a07c000},{0x3a07e000}, +{0x3a080000},{0x3a082000},{0x3a084000},{0x3a086000},{0x3a088000},{0x3a08a000},{0x3a08c000},{0x3a08e000},{0x3a090000},{0x3a092000},{0x3a094000},{0x3a096000},{0x3a098000},{0x3a09a000},{0x3a09c000},{0x3a09e000},{0x3a0a0000},{0x3a0a2000},{0x3a0a4000},{0x3a0a6000},{0x3a0a8000},{0x3a0aa000},{0x3a0ac000},{0x3a0ae000},{0x3a0b0000},{0x3a0b2000},{0x3a0b4000},{0x3a0b6000},{0x3a0b8000},{0x3a0ba000},{0x3a0bc000},{0x3a0be000}, +{0x3a0c0000},{0x3a0c2000},{0x3a0c4000},{0x3a0c6000},{0x3a0c8000},{0x3a0ca000},{0x3a0cc000},{0x3a0ce000},{0x3a0d0000},{0x3a0d2000},{0x3a0d4000},{0x3a0d6000},{0x3a0d8000},{0x3a0da000},{0x3a0dc000},{0x3a0de000},{0x3a0e0000},{0x3a0e2000},{0x3a0e4000},{0x3a0e6000},{0x3a0e8000},{0x3a0ea000},{0x3a0ec000},{0x3a0ee000},{0x3a0f0000},{0x3a0f2000},{0x3a0f4000},{0x3a0f6000},{0x3a0f8000},{0x3a0fa000},{0x3a0fc000},{0x3a0fe000}, +{0x3a100000},{0x3a102000},{0x3a104000},{0x3a106000},{0x3a108000},{0x3a10a000},{0x3a10c000},{0x3a10e000},{0x3a110000},{0x3a112000},{0x3a114000},{0x3a116000},{0x3a118000},{0x3a11a000},{0x3a11c000},{0x3a11e000},{0x3a120000},{0x3a122000},{0x3a124000},{0x3a126000},{0x3a128000},{0x3a12a000},{0x3a12c000},{0x3a12e000},{0x3a130000},{0x3a132000},{0x3a134000},{0x3a136000},{0x3a138000},{0x3a13a000},{0x3a13c000},{0x3a13e000}, +{0x3a140000},{0x3a142000},{0x3a144000},{0x3a146000},{0x3a148000},{0x3a14a000},{0x3a14c000},{0x3a14e000},{0x3a150000},{0x3a152000},{0x3a154000},{0x3a156000},{0x3a158000},{0x3a15a000},{0x3a15c000},{0x3a15e000},{0x3a160000},{0x3a162000},{0x3a164000},{0x3a166000},{0x3a168000},{0x3a16a000},{0x3a16c000},{0x3a16e000},{0x3a170000},{0x3a172000},{0x3a174000},{0x3a176000},{0x3a178000},{0x3a17a000},{0x3a17c000},{0x3a17e000}, +{0x3a180000},{0x3a182000},{0x3a184000},{0x3a186000},{0x3a188000},{0x3a18a000},{0x3a18c000},{0x3a18e000},{0x3a190000},{0x3a192000},{0x3a194000},{0x3a196000},{0x3a198000},{0x3a19a000},{0x3a19c000},{0x3a19e000},{0x3a1a0000},{0x3a1a2000},{0x3a1a4000},{0x3a1a6000},{0x3a1a8000},{0x3a1aa000},{0x3a1ac000},{0x3a1ae000},{0x3a1b0000},{0x3a1b2000},{0x3a1b4000},{0x3a1b6000},{0x3a1b8000},{0x3a1ba000},{0x3a1bc000},{0x3a1be000}, +{0x3a1c0000},{0x3a1c2000},{0x3a1c4000},{0x3a1c6000},{0x3a1c8000},{0x3a1ca000},{0x3a1cc000},{0x3a1ce000},{0x3a1d0000},{0x3a1d2000},{0x3a1d4000},{0x3a1d6000},{0x3a1d8000},{0x3a1da000},{0x3a1dc000},{0x3a1de000},{0x3a1e0000},{0x3a1e2000},{0x3a1e4000},{0x3a1e6000},{0x3a1e8000},{0x3a1ea000},{0x3a1ec000},{0x3a1ee000},{0x3a1f0000},{0x3a1f2000},{0x3a1f4000},{0x3a1f6000},{0x3a1f8000},{0x3a1fa000},{0x3a1fc000},{0x3a1fe000}, +{0x3a200000},{0x3a202000},{0x3a204000},{0x3a206000},{0x3a208000},{0x3a20a000},{0x3a20c000},{0x3a20e000},{0x3a210000},{0x3a212000},{0x3a214000},{0x3a216000},{0x3a218000},{0x3a21a000},{0x3a21c000},{0x3a21e000},{0x3a220000},{0x3a222000},{0x3a224000},{0x3a226000},{0x3a228000},{0x3a22a000},{0x3a22c000},{0x3a22e000},{0x3a230000},{0x3a232000},{0x3a234000},{0x3a236000},{0x3a238000},{0x3a23a000},{0x3a23c000},{0x3a23e000}, +{0x3a240000},{0x3a242000},{0x3a244000},{0x3a246000},{0x3a248000},{0x3a24a000},{0x3a24c000},{0x3a24e000},{0x3a250000},{0x3a252000},{0x3a254000},{0x3a256000},{0x3a258000},{0x3a25a000},{0x3a25c000},{0x3a25e000},{0x3a260000},{0x3a262000},{0x3a264000},{0x3a266000},{0x3a268000},{0x3a26a000},{0x3a26c000},{0x3a26e000},{0x3a270000},{0x3a272000},{0x3a274000},{0x3a276000},{0x3a278000},{0x3a27a000},{0x3a27c000},{0x3a27e000}, +{0x3a280000},{0x3a282000},{0x3a284000},{0x3a286000},{0x3a288000},{0x3a28a000},{0x3a28c000},{0x3a28e000},{0x3a290000},{0x3a292000},{0x3a294000},{0x3a296000},{0x3a298000},{0x3a29a000},{0x3a29c000},{0x3a29e000},{0x3a2a0000},{0x3a2a2000},{0x3a2a4000},{0x3a2a6000},{0x3a2a8000},{0x3a2aa000},{0x3a2ac000},{0x3a2ae000},{0x3a2b0000},{0x3a2b2000},{0x3a2b4000},{0x3a2b6000},{0x3a2b8000},{0x3a2ba000},{0x3a2bc000},{0x3a2be000}, +{0x3a2c0000},{0x3a2c2000},{0x3a2c4000},{0x3a2c6000},{0x3a2c8000},{0x3a2ca000},{0x3a2cc000},{0x3a2ce000},{0x3a2d0000},{0x3a2d2000},{0x3a2d4000},{0x3a2d6000},{0x3a2d8000},{0x3a2da000},{0x3a2dc000},{0x3a2de000},{0x3a2e0000},{0x3a2e2000},{0x3a2e4000},{0x3a2e6000},{0x3a2e8000},{0x3a2ea000},{0x3a2ec000},{0x3a2ee000},{0x3a2f0000},{0x3a2f2000},{0x3a2f4000},{0x3a2f6000},{0x3a2f8000},{0x3a2fa000},{0x3a2fc000},{0x3a2fe000}, +{0x3a300000},{0x3a302000},{0x3a304000},{0x3a306000},{0x3a308000},{0x3a30a000},{0x3a30c000},{0x3a30e000},{0x3a310000},{0x3a312000},{0x3a314000},{0x3a316000},{0x3a318000},{0x3a31a000},{0x3a31c000},{0x3a31e000},{0x3a320000},{0x3a322000},{0x3a324000},{0x3a326000},{0x3a328000},{0x3a32a000},{0x3a32c000},{0x3a32e000},{0x3a330000},{0x3a332000},{0x3a334000},{0x3a336000},{0x3a338000},{0x3a33a000},{0x3a33c000},{0x3a33e000}, +{0x3a340000},{0x3a342000},{0x3a344000},{0x3a346000},{0x3a348000},{0x3a34a000},{0x3a34c000},{0x3a34e000},{0x3a350000},{0x3a352000},{0x3a354000},{0x3a356000},{0x3a358000},{0x3a35a000},{0x3a35c000},{0x3a35e000},{0x3a360000},{0x3a362000},{0x3a364000},{0x3a366000},{0x3a368000},{0x3a36a000},{0x3a36c000},{0x3a36e000},{0x3a370000},{0x3a372000},{0x3a374000},{0x3a376000},{0x3a378000},{0x3a37a000},{0x3a37c000},{0x3a37e000}, +{0x3a380000},{0x3a382000},{0x3a384000},{0x3a386000},{0x3a388000},{0x3a38a000},{0x3a38c000},{0x3a38e000},{0x3a390000},{0x3a392000},{0x3a394000},{0x3a396000},{0x3a398000},{0x3a39a000},{0x3a39c000},{0x3a39e000},{0x3a3a0000},{0x3a3a2000},{0x3a3a4000},{0x3a3a6000},{0x3a3a8000},{0x3a3aa000},{0x3a3ac000},{0x3a3ae000},{0x3a3b0000},{0x3a3b2000},{0x3a3b4000},{0x3a3b6000},{0x3a3b8000},{0x3a3ba000},{0x3a3bc000},{0x3a3be000}, +{0x3a3c0000},{0x3a3c2000},{0x3a3c4000},{0x3a3c6000},{0x3a3c8000},{0x3a3ca000},{0x3a3cc000},{0x3a3ce000},{0x3a3d0000},{0x3a3d2000},{0x3a3d4000},{0x3a3d6000},{0x3a3d8000},{0x3a3da000},{0x3a3dc000},{0x3a3de000},{0x3a3e0000},{0x3a3e2000},{0x3a3e4000},{0x3a3e6000},{0x3a3e8000},{0x3a3ea000},{0x3a3ec000},{0x3a3ee000},{0x3a3f0000},{0x3a3f2000},{0x3a3f4000},{0x3a3f6000},{0x3a3f8000},{0x3a3fa000},{0x3a3fc000},{0x3a3fe000}, +{0x3a400000},{0x3a402000},{0x3a404000},{0x3a406000},{0x3a408000},{0x3a40a000},{0x3a40c000},{0x3a40e000},{0x3a410000},{0x3a412000},{0x3a414000},{0x3a416000},{0x3a418000},{0x3a41a000},{0x3a41c000},{0x3a41e000},{0x3a420000},{0x3a422000},{0x3a424000},{0x3a426000},{0x3a428000},{0x3a42a000},{0x3a42c000},{0x3a42e000},{0x3a430000},{0x3a432000},{0x3a434000},{0x3a436000},{0x3a438000},{0x3a43a000},{0x3a43c000},{0x3a43e000}, +{0x3a440000},{0x3a442000},{0x3a444000},{0x3a446000},{0x3a448000},{0x3a44a000},{0x3a44c000},{0x3a44e000},{0x3a450000},{0x3a452000},{0x3a454000},{0x3a456000},{0x3a458000},{0x3a45a000},{0x3a45c000},{0x3a45e000},{0x3a460000},{0x3a462000},{0x3a464000},{0x3a466000},{0x3a468000},{0x3a46a000},{0x3a46c000},{0x3a46e000},{0x3a470000},{0x3a472000},{0x3a474000},{0x3a476000},{0x3a478000},{0x3a47a000},{0x3a47c000},{0x3a47e000}, +{0x3a480000},{0x3a482000},{0x3a484000},{0x3a486000},{0x3a488000},{0x3a48a000},{0x3a48c000},{0x3a48e000},{0x3a490000},{0x3a492000},{0x3a494000},{0x3a496000},{0x3a498000},{0x3a49a000},{0x3a49c000},{0x3a49e000},{0x3a4a0000},{0x3a4a2000},{0x3a4a4000},{0x3a4a6000},{0x3a4a8000},{0x3a4aa000},{0x3a4ac000},{0x3a4ae000},{0x3a4b0000},{0x3a4b2000},{0x3a4b4000},{0x3a4b6000},{0x3a4b8000},{0x3a4ba000},{0x3a4bc000},{0x3a4be000}, +{0x3a4c0000},{0x3a4c2000},{0x3a4c4000},{0x3a4c6000},{0x3a4c8000},{0x3a4ca000},{0x3a4cc000},{0x3a4ce000},{0x3a4d0000},{0x3a4d2000},{0x3a4d4000},{0x3a4d6000},{0x3a4d8000},{0x3a4da000},{0x3a4dc000},{0x3a4de000},{0x3a4e0000},{0x3a4e2000},{0x3a4e4000},{0x3a4e6000},{0x3a4e8000},{0x3a4ea000},{0x3a4ec000},{0x3a4ee000},{0x3a4f0000},{0x3a4f2000},{0x3a4f4000},{0x3a4f6000},{0x3a4f8000},{0x3a4fa000},{0x3a4fc000},{0x3a4fe000}, +{0x3a500000},{0x3a502000},{0x3a504000},{0x3a506000},{0x3a508000},{0x3a50a000},{0x3a50c000},{0x3a50e000},{0x3a510000},{0x3a512000},{0x3a514000},{0x3a516000},{0x3a518000},{0x3a51a000},{0x3a51c000},{0x3a51e000},{0x3a520000},{0x3a522000},{0x3a524000},{0x3a526000},{0x3a528000},{0x3a52a000},{0x3a52c000},{0x3a52e000},{0x3a530000},{0x3a532000},{0x3a534000},{0x3a536000},{0x3a538000},{0x3a53a000},{0x3a53c000},{0x3a53e000}, +{0x3a540000},{0x3a542000},{0x3a544000},{0x3a546000},{0x3a548000},{0x3a54a000},{0x3a54c000},{0x3a54e000},{0x3a550000},{0x3a552000},{0x3a554000},{0x3a556000},{0x3a558000},{0x3a55a000},{0x3a55c000},{0x3a55e000},{0x3a560000},{0x3a562000},{0x3a564000},{0x3a566000},{0x3a568000},{0x3a56a000},{0x3a56c000},{0x3a56e000},{0x3a570000},{0x3a572000},{0x3a574000},{0x3a576000},{0x3a578000},{0x3a57a000},{0x3a57c000},{0x3a57e000}, +{0x3a580000},{0x3a582000},{0x3a584000},{0x3a586000},{0x3a588000},{0x3a58a000},{0x3a58c000},{0x3a58e000},{0x3a590000},{0x3a592000},{0x3a594000},{0x3a596000},{0x3a598000},{0x3a59a000},{0x3a59c000},{0x3a59e000},{0x3a5a0000},{0x3a5a2000},{0x3a5a4000},{0x3a5a6000},{0x3a5a8000},{0x3a5aa000},{0x3a5ac000},{0x3a5ae000},{0x3a5b0000},{0x3a5b2000},{0x3a5b4000},{0x3a5b6000},{0x3a5b8000},{0x3a5ba000},{0x3a5bc000},{0x3a5be000}, +{0x3a5c0000},{0x3a5c2000},{0x3a5c4000},{0x3a5c6000},{0x3a5c8000},{0x3a5ca000},{0x3a5cc000},{0x3a5ce000},{0x3a5d0000},{0x3a5d2000},{0x3a5d4000},{0x3a5d6000},{0x3a5d8000},{0x3a5da000},{0x3a5dc000},{0x3a5de000},{0x3a5e0000},{0x3a5e2000},{0x3a5e4000},{0x3a5e6000},{0x3a5e8000},{0x3a5ea000},{0x3a5ec000},{0x3a5ee000},{0x3a5f0000},{0x3a5f2000},{0x3a5f4000},{0x3a5f6000},{0x3a5f8000},{0x3a5fa000},{0x3a5fc000},{0x3a5fe000}, +{0x3a600000},{0x3a602000},{0x3a604000},{0x3a606000},{0x3a608000},{0x3a60a000},{0x3a60c000},{0x3a60e000},{0x3a610000},{0x3a612000},{0x3a614000},{0x3a616000},{0x3a618000},{0x3a61a000},{0x3a61c000},{0x3a61e000},{0x3a620000},{0x3a622000},{0x3a624000},{0x3a626000},{0x3a628000},{0x3a62a000},{0x3a62c000},{0x3a62e000},{0x3a630000},{0x3a632000},{0x3a634000},{0x3a636000},{0x3a638000},{0x3a63a000},{0x3a63c000},{0x3a63e000}, +{0x3a640000},{0x3a642000},{0x3a644000},{0x3a646000},{0x3a648000},{0x3a64a000},{0x3a64c000},{0x3a64e000},{0x3a650000},{0x3a652000},{0x3a654000},{0x3a656000},{0x3a658000},{0x3a65a000},{0x3a65c000},{0x3a65e000},{0x3a660000},{0x3a662000},{0x3a664000},{0x3a666000},{0x3a668000},{0x3a66a000},{0x3a66c000},{0x3a66e000},{0x3a670000},{0x3a672000},{0x3a674000},{0x3a676000},{0x3a678000},{0x3a67a000},{0x3a67c000},{0x3a67e000}, +{0x3a680000},{0x3a682000},{0x3a684000},{0x3a686000},{0x3a688000},{0x3a68a000},{0x3a68c000},{0x3a68e000},{0x3a690000},{0x3a692000},{0x3a694000},{0x3a696000},{0x3a698000},{0x3a69a000},{0x3a69c000},{0x3a69e000},{0x3a6a0000},{0x3a6a2000},{0x3a6a4000},{0x3a6a6000},{0x3a6a8000},{0x3a6aa000},{0x3a6ac000},{0x3a6ae000},{0x3a6b0000},{0x3a6b2000},{0x3a6b4000},{0x3a6b6000},{0x3a6b8000},{0x3a6ba000},{0x3a6bc000},{0x3a6be000}, +{0x3a6c0000},{0x3a6c2000},{0x3a6c4000},{0x3a6c6000},{0x3a6c8000},{0x3a6ca000},{0x3a6cc000},{0x3a6ce000},{0x3a6d0000},{0x3a6d2000},{0x3a6d4000},{0x3a6d6000},{0x3a6d8000},{0x3a6da000},{0x3a6dc000},{0x3a6de000},{0x3a6e0000},{0x3a6e2000},{0x3a6e4000},{0x3a6e6000},{0x3a6e8000},{0x3a6ea000},{0x3a6ec000},{0x3a6ee000},{0x3a6f0000},{0x3a6f2000},{0x3a6f4000},{0x3a6f6000},{0x3a6f8000},{0x3a6fa000},{0x3a6fc000},{0x3a6fe000}, +{0x3a700000},{0x3a702000},{0x3a704000},{0x3a706000},{0x3a708000},{0x3a70a000},{0x3a70c000},{0x3a70e000},{0x3a710000},{0x3a712000},{0x3a714000},{0x3a716000},{0x3a718000},{0x3a71a000},{0x3a71c000},{0x3a71e000},{0x3a720000},{0x3a722000},{0x3a724000},{0x3a726000},{0x3a728000},{0x3a72a000},{0x3a72c000},{0x3a72e000},{0x3a730000},{0x3a732000},{0x3a734000},{0x3a736000},{0x3a738000},{0x3a73a000},{0x3a73c000},{0x3a73e000}, +{0x3a740000},{0x3a742000},{0x3a744000},{0x3a746000},{0x3a748000},{0x3a74a000},{0x3a74c000},{0x3a74e000},{0x3a750000},{0x3a752000},{0x3a754000},{0x3a756000},{0x3a758000},{0x3a75a000},{0x3a75c000},{0x3a75e000},{0x3a760000},{0x3a762000},{0x3a764000},{0x3a766000},{0x3a768000},{0x3a76a000},{0x3a76c000},{0x3a76e000},{0x3a770000},{0x3a772000},{0x3a774000},{0x3a776000},{0x3a778000},{0x3a77a000},{0x3a77c000},{0x3a77e000}, +{0x3a780000},{0x3a782000},{0x3a784000},{0x3a786000},{0x3a788000},{0x3a78a000},{0x3a78c000},{0x3a78e000},{0x3a790000},{0x3a792000},{0x3a794000},{0x3a796000},{0x3a798000},{0x3a79a000},{0x3a79c000},{0x3a79e000},{0x3a7a0000},{0x3a7a2000},{0x3a7a4000},{0x3a7a6000},{0x3a7a8000},{0x3a7aa000},{0x3a7ac000},{0x3a7ae000},{0x3a7b0000},{0x3a7b2000},{0x3a7b4000},{0x3a7b6000},{0x3a7b8000},{0x3a7ba000},{0x3a7bc000},{0x3a7be000}, +{0x3a7c0000},{0x3a7c2000},{0x3a7c4000},{0x3a7c6000},{0x3a7c8000},{0x3a7ca000},{0x3a7cc000},{0x3a7ce000},{0x3a7d0000},{0x3a7d2000},{0x3a7d4000},{0x3a7d6000},{0x3a7d8000},{0x3a7da000},{0x3a7dc000},{0x3a7de000},{0x3a7e0000},{0x3a7e2000},{0x3a7e4000},{0x3a7e6000},{0x3a7e8000},{0x3a7ea000},{0x3a7ec000},{0x3a7ee000},{0x3a7f0000},{0x3a7f2000},{0x3a7f4000},{0x3a7f6000},{0x3a7f8000},{0x3a7fa000},{0x3a7fc000},{0x3a7fe000}, +{0x3a800000},{0x3a802000},{0x3a804000},{0x3a806000},{0x3a808000},{0x3a80a000},{0x3a80c000},{0x3a80e000},{0x3a810000},{0x3a812000},{0x3a814000},{0x3a816000},{0x3a818000},{0x3a81a000},{0x3a81c000},{0x3a81e000},{0x3a820000},{0x3a822000},{0x3a824000},{0x3a826000},{0x3a828000},{0x3a82a000},{0x3a82c000},{0x3a82e000},{0x3a830000},{0x3a832000},{0x3a834000},{0x3a836000},{0x3a838000},{0x3a83a000},{0x3a83c000},{0x3a83e000}, +{0x3a840000},{0x3a842000},{0x3a844000},{0x3a846000},{0x3a848000},{0x3a84a000},{0x3a84c000},{0x3a84e000},{0x3a850000},{0x3a852000},{0x3a854000},{0x3a856000},{0x3a858000},{0x3a85a000},{0x3a85c000},{0x3a85e000},{0x3a860000},{0x3a862000},{0x3a864000},{0x3a866000},{0x3a868000},{0x3a86a000},{0x3a86c000},{0x3a86e000},{0x3a870000},{0x3a872000},{0x3a874000},{0x3a876000},{0x3a878000},{0x3a87a000},{0x3a87c000},{0x3a87e000}, +{0x3a880000},{0x3a882000},{0x3a884000},{0x3a886000},{0x3a888000},{0x3a88a000},{0x3a88c000},{0x3a88e000},{0x3a890000},{0x3a892000},{0x3a894000},{0x3a896000},{0x3a898000},{0x3a89a000},{0x3a89c000},{0x3a89e000},{0x3a8a0000},{0x3a8a2000},{0x3a8a4000},{0x3a8a6000},{0x3a8a8000},{0x3a8aa000},{0x3a8ac000},{0x3a8ae000},{0x3a8b0000},{0x3a8b2000},{0x3a8b4000},{0x3a8b6000},{0x3a8b8000},{0x3a8ba000},{0x3a8bc000},{0x3a8be000}, +{0x3a8c0000},{0x3a8c2000},{0x3a8c4000},{0x3a8c6000},{0x3a8c8000},{0x3a8ca000},{0x3a8cc000},{0x3a8ce000},{0x3a8d0000},{0x3a8d2000},{0x3a8d4000},{0x3a8d6000},{0x3a8d8000},{0x3a8da000},{0x3a8dc000},{0x3a8de000},{0x3a8e0000},{0x3a8e2000},{0x3a8e4000},{0x3a8e6000},{0x3a8e8000},{0x3a8ea000},{0x3a8ec000},{0x3a8ee000},{0x3a8f0000},{0x3a8f2000},{0x3a8f4000},{0x3a8f6000},{0x3a8f8000},{0x3a8fa000},{0x3a8fc000},{0x3a8fe000}, +{0x3a900000},{0x3a902000},{0x3a904000},{0x3a906000},{0x3a908000},{0x3a90a000},{0x3a90c000},{0x3a90e000},{0x3a910000},{0x3a912000},{0x3a914000},{0x3a916000},{0x3a918000},{0x3a91a000},{0x3a91c000},{0x3a91e000},{0x3a920000},{0x3a922000},{0x3a924000},{0x3a926000},{0x3a928000},{0x3a92a000},{0x3a92c000},{0x3a92e000},{0x3a930000},{0x3a932000},{0x3a934000},{0x3a936000},{0x3a938000},{0x3a93a000},{0x3a93c000},{0x3a93e000}, +{0x3a940000},{0x3a942000},{0x3a944000},{0x3a946000},{0x3a948000},{0x3a94a000},{0x3a94c000},{0x3a94e000},{0x3a950000},{0x3a952000},{0x3a954000},{0x3a956000},{0x3a958000},{0x3a95a000},{0x3a95c000},{0x3a95e000},{0x3a960000},{0x3a962000},{0x3a964000},{0x3a966000},{0x3a968000},{0x3a96a000},{0x3a96c000},{0x3a96e000},{0x3a970000},{0x3a972000},{0x3a974000},{0x3a976000},{0x3a978000},{0x3a97a000},{0x3a97c000},{0x3a97e000}, +{0x3a980000},{0x3a982000},{0x3a984000},{0x3a986000},{0x3a988000},{0x3a98a000},{0x3a98c000},{0x3a98e000},{0x3a990000},{0x3a992000},{0x3a994000},{0x3a996000},{0x3a998000},{0x3a99a000},{0x3a99c000},{0x3a99e000},{0x3a9a0000},{0x3a9a2000},{0x3a9a4000},{0x3a9a6000},{0x3a9a8000},{0x3a9aa000},{0x3a9ac000},{0x3a9ae000},{0x3a9b0000},{0x3a9b2000},{0x3a9b4000},{0x3a9b6000},{0x3a9b8000},{0x3a9ba000},{0x3a9bc000},{0x3a9be000}, +{0x3a9c0000},{0x3a9c2000},{0x3a9c4000},{0x3a9c6000},{0x3a9c8000},{0x3a9ca000},{0x3a9cc000},{0x3a9ce000},{0x3a9d0000},{0x3a9d2000},{0x3a9d4000},{0x3a9d6000},{0x3a9d8000},{0x3a9da000},{0x3a9dc000},{0x3a9de000},{0x3a9e0000},{0x3a9e2000},{0x3a9e4000},{0x3a9e6000},{0x3a9e8000},{0x3a9ea000},{0x3a9ec000},{0x3a9ee000},{0x3a9f0000},{0x3a9f2000},{0x3a9f4000},{0x3a9f6000},{0x3a9f8000},{0x3a9fa000},{0x3a9fc000},{0x3a9fe000}, +{0x3aa00000},{0x3aa02000},{0x3aa04000},{0x3aa06000},{0x3aa08000},{0x3aa0a000},{0x3aa0c000},{0x3aa0e000},{0x3aa10000},{0x3aa12000},{0x3aa14000},{0x3aa16000},{0x3aa18000},{0x3aa1a000},{0x3aa1c000},{0x3aa1e000},{0x3aa20000},{0x3aa22000},{0x3aa24000},{0x3aa26000},{0x3aa28000},{0x3aa2a000},{0x3aa2c000},{0x3aa2e000},{0x3aa30000},{0x3aa32000},{0x3aa34000},{0x3aa36000},{0x3aa38000},{0x3aa3a000},{0x3aa3c000},{0x3aa3e000}, +{0x3aa40000},{0x3aa42000},{0x3aa44000},{0x3aa46000},{0x3aa48000},{0x3aa4a000},{0x3aa4c000},{0x3aa4e000},{0x3aa50000},{0x3aa52000},{0x3aa54000},{0x3aa56000},{0x3aa58000},{0x3aa5a000},{0x3aa5c000},{0x3aa5e000},{0x3aa60000},{0x3aa62000},{0x3aa64000},{0x3aa66000},{0x3aa68000},{0x3aa6a000},{0x3aa6c000},{0x3aa6e000},{0x3aa70000},{0x3aa72000},{0x3aa74000},{0x3aa76000},{0x3aa78000},{0x3aa7a000},{0x3aa7c000},{0x3aa7e000}, +{0x3aa80000},{0x3aa82000},{0x3aa84000},{0x3aa86000},{0x3aa88000},{0x3aa8a000},{0x3aa8c000},{0x3aa8e000},{0x3aa90000},{0x3aa92000},{0x3aa94000},{0x3aa96000},{0x3aa98000},{0x3aa9a000},{0x3aa9c000},{0x3aa9e000},{0x3aaa0000},{0x3aaa2000},{0x3aaa4000},{0x3aaa6000},{0x3aaa8000},{0x3aaaa000},{0x3aaac000},{0x3aaae000},{0x3aab0000},{0x3aab2000},{0x3aab4000},{0x3aab6000},{0x3aab8000},{0x3aaba000},{0x3aabc000},{0x3aabe000}, +{0x3aac0000},{0x3aac2000},{0x3aac4000},{0x3aac6000},{0x3aac8000},{0x3aaca000},{0x3aacc000},{0x3aace000},{0x3aad0000},{0x3aad2000},{0x3aad4000},{0x3aad6000},{0x3aad8000},{0x3aada000},{0x3aadc000},{0x3aade000},{0x3aae0000},{0x3aae2000},{0x3aae4000},{0x3aae6000},{0x3aae8000},{0x3aaea000},{0x3aaec000},{0x3aaee000},{0x3aaf0000},{0x3aaf2000},{0x3aaf4000},{0x3aaf6000},{0x3aaf8000},{0x3aafa000},{0x3aafc000},{0x3aafe000}, +{0x3ab00000},{0x3ab02000},{0x3ab04000},{0x3ab06000},{0x3ab08000},{0x3ab0a000},{0x3ab0c000},{0x3ab0e000},{0x3ab10000},{0x3ab12000},{0x3ab14000},{0x3ab16000},{0x3ab18000},{0x3ab1a000},{0x3ab1c000},{0x3ab1e000},{0x3ab20000},{0x3ab22000},{0x3ab24000},{0x3ab26000},{0x3ab28000},{0x3ab2a000},{0x3ab2c000},{0x3ab2e000},{0x3ab30000},{0x3ab32000},{0x3ab34000},{0x3ab36000},{0x3ab38000},{0x3ab3a000},{0x3ab3c000},{0x3ab3e000}, +{0x3ab40000},{0x3ab42000},{0x3ab44000},{0x3ab46000},{0x3ab48000},{0x3ab4a000},{0x3ab4c000},{0x3ab4e000},{0x3ab50000},{0x3ab52000},{0x3ab54000},{0x3ab56000},{0x3ab58000},{0x3ab5a000},{0x3ab5c000},{0x3ab5e000},{0x3ab60000},{0x3ab62000},{0x3ab64000},{0x3ab66000},{0x3ab68000},{0x3ab6a000},{0x3ab6c000},{0x3ab6e000},{0x3ab70000},{0x3ab72000},{0x3ab74000},{0x3ab76000},{0x3ab78000},{0x3ab7a000},{0x3ab7c000},{0x3ab7e000}, +{0x3ab80000},{0x3ab82000},{0x3ab84000},{0x3ab86000},{0x3ab88000},{0x3ab8a000},{0x3ab8c000},{0x3ab8e000},{0x3ab90000},{0x3ab92000},{0x3ab94000},{0x3ab96000},{0x3ab98000},{0x3ab9a000},{0x3ab9c000},{0x3ab9e000},{0x3aba0000},{0x3aba2000},{0x3aba4000},{0x3aba6000},{0x3aba8000},{0x3abaa000},{0x3abac000},{0x3abae000},{0x3abb0000},{0x3abb2000},{0x3abb4000},{0x3abb6000},{0x3abb8000},{0x3abba000},{0x3abbc000},{0x3abbe000}, +{0x3abc0000},{0x3abc2000},{0x3abc4000},{0x3abc6000},{0x3abc8000},{0x3abca000},{0x3abcc000},{0x3abce000},{0x3abd0000},{0x3abd2000},{0x3abd4000},{0x3abd6000},{0x3abd8000},{0x3abda000},{0x3abdc000},{0x3abde000},{0x3abe0000},{0x3abe2000},{0x3abe4000},{0x3abe6000},{0x3abe8000},{0x3abea000},{0x3abec000},{0x3abee000},{0x3abf0000},{0x3abf2000},{0x3abf4000},{0x3abf6000},{0x3abf8000},{0x3abfa000},{0x3abfc000},{0x3abfe000}, +{0x3ac00000},{0x3ac02000},{0x3ac04000},{0x3ac06000},{0x3ac08000},{0x3ac0a000},{0x3ac0c000},{0x3ac0e000},{0x3ac10000},{0x3ac12000},{0x3ac14000},{0x3ac16000},{0x3ac18000},{0x3ac1a000},{0x3ac1c000},{0x3ac1e000},{0x3ac20000},{0x3ac22000},{0x3ac24000},{0x3ac26000},{0x3ac28000},{0x3ac2a000},{0x3ac2c000},{0x3ac2e000},{0x3ac30000},{0x3ac32000},{0x3ac34000},{0x3ac36000},{0x3ac38000},{0x3ac3a000},{0x3ac3c000},{0x3ac3e000}, +{0x3ac40000},{0x3ac42000},{0x3ac44000},{0x3ac46000},{0x3ac48000},{0x3ac4a000},{0x3ac4c000},{0x3ac4e000},{0x3ac50000},{0x3ac52000},{0x3ac54000},{0x3ac56000},{0x3ac58000},{0x3ac5a000},{0x3ac5c000},{0x3ac5e000},{0x3ac60000},{0x3ac62000},{0x3ac64000},{0x3ac66000},{0x3ac68000},{0x3ac6a000},{0x3ac6c000},{0x3ac6e000},{0x3ac70000},{0x3ac72000},{0x3ac74000},{0x3ac76000},{0x3ac78000},{0x3ac7a000},{0x3ac7c000},{0x3ac7e000}, +{0x3ac80000},{0x3ac82000},{0x3ac84000},{0x3ac86000},{0x3ac88000},{0x3ac8a000},{0x3ac8c000},{0x3ac8e000},{0x3ac90000},{0x3ac92000},{0x3ac94000},{0x3ac96000},{0x3ac98000},{0x3ac9a000},{0x3ac9c000},{0x3ac9e000},{0x3aca0000},{0x3aca2000},{0x3aca4000},{0x3aca6000},{0x3aca8000},{0x3acaa000},{0x3acac000},{0x3acae000},{0x3acb0000},{0x3acb2000},{0x3acb4000},{0x3acb6000},{0x3acb8000},{0x3acba000},{0x3acbc000},{0x3acbe000}, +{0x3acc0000},{0x3acc2000},{0x3acc4000},{0x3acc6000},{0x3acc8000},{0x3acca000},{0x3accc000},{0x3acce000},{0x3acd0000},{0x3acd2000},{0x3acd4000},{0x3acd6000},{0x3acd8000},{0x3acda000},{0x3acdc000},{0x3acde000},{0x3ace0000},{0x3ace2000},{0x3ace4000},{0x3ace6000},{0x3ace8000},{0x3acea000},{0x3acec000},{0x3acee000},{0x3acf0000},{0x3acf2000},{0x3acf4000},{0x3acf6000},{0x3acf8000},{0x3acfa000},{0x3acfc000},{0x3acfe000}, +{0x3ad00000},{0x3ad02000},{0x3ad04000},{0x3ad06000},{0x3ad08000},{0x3ad0a000},{0x3ad0c000},{0x3ad0e000},{0x3ad10000},{0x3ad12000},{0x3ad14000},{0x3ad16000},{0x3ad18000},{0x3ad1a000},{0x3ad1c000},{0x3ad1e000},{0x3ad20000},{0x3ad22000},{0x3ad24000},{0x3ad26000},{0x3ad28000},{0x3ad2a000},{0x3ad2c000},{0x3ad2e000},{0x3ad30000},{0x3ad32000},{0x3ad34000},{0x3ad36000},{0x3ad38000},{0x3ad3a000},{0x3ad3c000},{0x3ad3e000}, +{0x3ad40000},{0x3ad42000},{0x3ad44000},{0x3ad46000},{0x3ad48000},{0x3ad4a000},{0x3ad4c000},{0x3ad4e000},{0x3ad50000},{0x3ad52000},{0x3ad54000},{0x3ad56000},{0x3ad58000},{0x3ad5a000},{0x3ad5c000},{0x3ad5e000},{0x3ad60000},{0x3ad62000},{0x3ad64000},{0x3ad66000},{0x3ad68000},{0x3ad6a000},{0x3ad6c000},{0x3ad6e000},{0x3ad70000},{0x3ad72000},{0x3ad74000},{0x3ad76000},{0x3ad78000},{0x3ad7a000},{0x3ad7c000},{0x3ad7e000}, +{0x3ad80000},{0x3ad82000},{0x3ad84000},{0x3ad86000},{0x3ad88000},{0x3ad8a000},{0x3ad8c000},{0x3ad8e000},{0x3ad90000},{0x3ad92000},{0x3ad94000},{0x3ad96000},{0x3ad98000},{0x3ad9a000},{0x3ad9c000},{0x3ad9e000},{0x3ada0000},{0x3ada2000},{0x3ada4000},{0x3ada6000},{0x3ada8000},{0x3adaa000},{0x3adac000},{0x3adae000},{0x3adb0000},{0x3adb2000},{0x3adb4000},{0x3adb6000},{0x3adb8000},{0x3adba000},{0x3adbc000},{0x3adbe000}, +{0x3adc0000},{0x3adc2000},{0x3adc4000},{0x3adc6000},{0x3adc8000},{0x3adca000},{0x3adcc000},{0x3adce000},{0x3add0000},{0x3add2000},{0x3add4000},{0x3add6000},{0x3add8000},{0x3adda000},{0x3addc000},{0x3adde000},{0x3ade0000},{0x3ade2000},{0x3ade4000},{0x3ade6000},{0x3ade8000},{0x3adea000},{0x3adec000},{0x3adee000},{0x3adf0000},{0x3adf2000},{0x3adf4000},{0x3adf6000},{0x3adf8000},{0x3adfa000},{0x3adfc000},{0x3adfe000}, +{0x3ae00000},{0x3ae02000},{0x3ae04000},{0x3ae06000},{0x3ae08000},{0x3ae0a000},{0x3ae0c000},{0x3ae0e000},{0x3ae10000},{0x3ae12000},{0x3ae14000},{0x3ae16000},{0x3ae18000},{0x3ae1a000},{0x3ae1c000},{0x3ae1e000},{0x3ae20000},{0x3ae22000},{0x3ae24000},{0x3ae26000},{0x3ae28000},{0x3ae2a000},{0x3ae2c000},{0x3ae2e000},{0x3ae30000},{0x3ae32000},{0x3ae34000},{0x3ae36000},{0x3ae38000},{0x3ae3a000},{0x3ae3c000},{0x3ae3e000}, +{0x3ae40000},{0x3ae42000},{0x3ae44000},{0x3ae46000},{0x3ae48000},{0x3ae4a000},{0x3ae4c000},{0x3ae4e000},{0x3ae50000},{0x3ae52000},{0x3ae54000},{0x3ae56000},{0x3ae58000},{0x3ae5a000},{0x3ae5c000},{0x3ae5e000},{0x3ae60000},{0x3ae62000},{0x3ae64000},{0x3ae66000},{0x3ae68000},{0x3ae6a000},{0x3ae6c000},{0x3ae6e000},{0x3ae70000},{0x3ae72000},{0x3ae74000},{0x3ae76000},{0x3ae78000},{0x3ae7a000},{0x3ae7c000},{0x3ae7e000}, +{0x3ae80000},{0x3ae82000},{0x3ae84000},{0x3ae86000},{0x3ae88000},{0x3ae8a000},{0x3ae8c000},{0x3ae8e000},{0x3ae90000},{0x3ae92000},{0x3ae94000},{0x3ae96000},{0x3ae98000},{0x3ae9a000},{0x3ae9c000},{0x3ae9e000},{0x3aea0000},{0x3aea2000},{0x3aea4000},{0x3aea6000},{0x3aea8000},{0x3aeaa000},{0x3aeac000},{0x3aeae000},{0x3aeb0000},{0x3aeb2000},{0x3aeb4000},{0x3aeb6000},{0x3aeb8000},{0x3aeba000},{0x3aebc000},{0x3aebe000}, +{0x3aec0000},{0x3aec2000},{0x3aec4000},{0x3aec6000},{0x3aec8000},{0x3aeca000},{0x3aecc000},{0x3aece000},{0x3aed0000},{0x3aed2000},{0x3aed4000},{0x3aed6000},{0x3aed8000},{0x3aeda000},{0x3aedc000},{0x3aede000},{0x3aee0000},{0x3aee2000},{0x3aee4000},{0x3aee6000},{0x3aee8000},{0x3aeea000},{0x3aeec000},{0x3aeee000},{0x3aef0000},{0x3aef2000},{0x3aef4000},{0x3aef6000},{0x3aef8000},{0x3aefa000},{0x3aefc000},{0x3aefe000}, +{0x3af00000},{0x3af02000},{0x3af04000},{0x3af06000},{0x3af08000},{0x3af0a000},{0x3af0c000},{0x3af0e000},{0x3af10000},{0x3af12000},{0x3af14000},{0x3af16000},{0x3af18000},{0x3af1a000},{0x3af1c000},{0x3af1e000},{0x3af20000},{0x3af22000},{0x3af24000},{0x3af26000},{0x3af28000},{0x3af2a000},{0x3af2c000},{0x3af2e000},{0x3af30000},{0x3af32000},{0x3af34000},{0x3af36000},{0x3af38000},{0x3af3a000},{0x3af3c000},{0x3af3e000}, +{0x3af40000},{0x3af42000},{0x3af44000},{0x3af46000},{0x3af48000},{0x3af4a000},{0x3af4c000},{0x3af4e000},{0x3af50000},{0x3af52000},{0x3af54000},{0x3af56000},{0x3af58000},{0x3af5a000},{0x3af5c000},{0x3af5e000},{0x3af60000},{0x3af62000},{0x3af64000},{0x3af66000},{0x3af68000},{0x3af6a000},{0x3af6c000},{0x3af6e000},{0x3af70000},{0x3af72000},{0x3af74000},{0x3af76000},{0x3af78000},{0x3af7a000},{0x3af7c000},{0x3af7e000}, +{0x3af80000},{0x3af82000},{0x3af84000},{0x3af86000},{0x3af88000},{0x3af8a000},{0x3af8c000},{0x3af8e000},{0x3af90000},{0x3af92000},{0x3af94000},{0x3af96000},{0x3af98000},{0x3af9a000},{0x3af9c000},{0x3af9e000},{0x3afa0000},{0x3afa2000},{0x3afa4000},{0x3afa6000},{0x3afa8000},{0x3afaa000},{0x3afac000},{0x3afae000},{0x3afb0000},{0x3afb2000},{0x3afb4000},{0x3afb6000},{0x3afb8000},{0x3afba000},{0x3afbc000},{0x3afbe000}, +{0x3afc0000},{0x3afc2000},{0x3afc4000},{0x3afc6000},{0x3afc8000},{0x3afca000},{0x3afcc000},{0x3afce000},{0x3afd0000},{0x3afd2000},{0x3afd4000},{0x3afd6000},{0x3afd8000},{0x3afda000},{0x3afdc000},{0x3afde000},{0x3afe0000},{0x3afe2000},{0x3afe4000},{0x3afe6000},{0x3afe8000},{0x3afea000},{0x3afec000},{0x3afee000},{0x3aff0000},{0x3aff2000},{0x3aff4000},{0x3aff6000},{0x3aff8000},{0x3affa000},{0x3affc000},{0x3affe000}, +{0x3b000000},{0x3b002000},{0x3b004000},{0x3b006000},{0x3b008000},{0x3b00a000},{0x3b00c000},{0x3b00e000},{0x3b010000},{0x3b012000},{0x3b014000},{0x3b016000},{0x3b018000},{0x3b01a000},{0x3b01c000},{0x3b01e000},{0x3b020000},{0x3b022000},{0x3b024000},{0x3b026000},{0x3b028000},{0x3b02a000},{0x3b02c000},{0x3b02e000},{0x3b030000},{0x3b032000},{0x3b034000},{0x3b036000},{0x3b038000},{0x3b03a000},{0x3b03c000},{0x3b03e000}, +{0x3b040000},{0x3b042000},{0x3b044000},{0x3b046000},{0x3b048000},{0x3b04a000},{0x3b04c000},{0x3b04e000},{0x3b050000},{0x3b052000},{0x3b054000},{0x3b056000},{0x3b058000},{0x3b05a000},{0x3b05c000},{0x3b05e000},{0x3b060000},{0x3b062000},{0x3b064000},{0x3b066000},{0x3b068000},{0x3b06a000},{0x3b06c000},{0x3b06e000},{0x3b070000},{0x3b072000},{0x3b074000},{0x3b076000},{0x3b078000},{0x3b07a000},{0x3b07c000},{0x3b07e000}, +{0x3b080000},{0x3b082000},{0x3b084000},{0x3b086000},{0x3b088000},{0x3b08a000},{0x3b08c000},{0x3b08e000},{0x3b090000},{0x3b092000},{0x3b094000},{0x3b096000},{0x3b098000},{0x3b09a000},{0x3b09c000},{0x3b09e000},{0x3b0a0000},{0x3b0a2000},{0x3b0a4000},{0x3b0a6000},{0x3b0a8000},{0x3b0aa000},{0x3b0ac000},{0x3b0ae000},{0x3b0b0000},{0x3b0b2000},{0x3b0b4000},{0x3b0b6000},{0x3b0b8000},{0x3b0ba000},{0x3b0bc000},{0x3b0be000}, +{0x3b0c0000},{0x3b0c2000},{0x3b0c4000},{0x3b0c6000},{0x3b0c8000},{0x3b0ca000},{0x3b0cc000},{0x3b0ce000},{0x3b0d0000},{0x3b0d2000},{0x3b0d4000},{0x3b0d6000},{0x3b0d8000},{0x3b0da000},{0x3b0dc000},{0x3b0de000},{0x3b0e0000},{0x3b0e2000},{0x3b0e4000},{0x3b0e6000},{0x3b0e8000},{0x3b0ea000},{0x3b0ec000},{0x3b0ee000},{0x3b0f0000},{0x3b0f2000},{0x3b0f4000},{0x3b0f6000},{0x3b0f8000},{0x3b0fa000},{0x3b0fc000},{0x3b0fe000}, +{0x3b100000},{0x3b102000},{0x3b104000},{0x3b106000},{0x3b108000},{0x3b10a000},{0x3b10c000},{0x3b10e000},{0x3b110000},{0x3b112000},{0x3b114000},{0x3b116000},{0x3b118000},{0x3b11a000},{0x3b11c000},{0x3b11e000},{0x3b120000},{0x3b122000},{0x3b124000},{0x3b126000},{0x3b128000},{0x3b12a000},{0x3b12c000},{0x3b12e000},{0x3b130000},{0x3b132000},{0x3b134000},{0x3b136000},{0x3b138000},{0x3b13a000},{0x3b13c000},{0x3b13e000}, +{0x3b140000},{0x3b142000},{0x3b144000},{0x3b146000},{0x3b148000},{0x3b14a000},{0x3b14c000},{0x3b14e000},{0x3b150000},{0x3b152000},{0x3b154000},{0x3b156000},{0x3b158000},{0x3b15a000},{0x3b15c000},{0x3b15e000},{0x3b160000},{0x3b162000},{0x3b164000},{0x3b166000},{0x3b168000},{0x3b16a000},{0x3b16c000},{0x3b16e000},{0x3b170000},{0x3b172000},{0x3b174000},{0x3b176000},{0x3b178000},{0x3b17a000},{0x3b17c000},{0x3b17e000}, +{0x3b180000},{0x3b182000},{0x3b184000},{0x3b186000},{0x3b188000},{0x3b18a000},{0x3b18c000},{0x3b18e000},{0x3b190000},{0x3b192000},{0x3b194000},{0x3b196000},{0x3b198000},{0x3b19a000},{0x3b19c000},{0x3b19e000},{0x3b1a0000},{0x3b1a2000},{0x3b1a4000},{0x3b1a6000},{0x3b1a8000},{0x3b1aa000},{0x3b1ac000},{0x3b1ae000},{0x3b1b0000},{0x3b1b2000},{0x3b1b4000},{0x3b1b6000},{0x3b1b8000},{0x3b1ba000},{0x3b1bc000},{0x3b1be000}, +{0x3b1c0000},{0x3b1c2000},{0x3b1c4000},{0x3b1c6000},{0x3b1c8000},{0x3b1ca000},{0x3b1cc000},{0x3b1ce000},{0x3b1d0000},{0x3b1d2000},{0x3b1d4000},{0x3b1d6000},{0x3b1d8000},{0x3b1da000},{0x3b1dc000},{0x3b1de000},{0x3b1e0000},{0x3b1e2000},{0x3b1e4000},{0x3b1e6000},{0x3b1e8000},{0x3b1ea000},{0x3b1ec000},{0x3b1ee000},{0x3b1f0000},{0x3b1f2000},{0x3b1f4000},{0x3b1f6000},{0x3b1f8000},{0x3b1fa000},{0x3b1fc000},{0x3b1fe000}, +{0x3b200000},{0x3b202000},{0x3b204000},{0x3b206000},{0x3b208000},{0x3b20a000},{0x3b20c000},{0x3b20e000},{0x3b210000},{0x3b212000},{0x3b214000},{0x3b216000},{0x3b218000},{0x3b21a000},{0x3b21c000},{0x3b21e000},{0x3b220000},{0x3b222000},{0x3b224000},{0x3b226000},{0x3b228000},{0x3b22a000},{0x3b22c000},{0x3b22e000},{0x3b230000},{0x3b232000},{0x3b234000},{0x3b236000},{0x3b238000},{0x3b23a000},{0x3b23c000},{0x3b23e000}, +{0x3b240000},{0x3b242000},{0x3b244000},{0x3b246000},{0x3b248000},{0x3b24a000},{0x3b24c000},{0x3b24e000},{0x3b250000},{0x3b252000},{0x3b254000},{0x3b256000},{0x3b258000},{0x3b25a000},{0x3b25c000},{0x3b25e000},{0x3b260000},{0x3b262000},{0x3b264000},{0x3b266000},{0x3b268000},{0x3b26a000},{0x3b26c000},{0x3b26e000},{0x3b270000},{0x3b272000},{0x3b274000},{0x3b276000},{0x3b278000},{0x3b27a000},{0x3b27c000},{0x3b27e000}, +{0x3b280000},{0x3b282000},{0x3b284000},{0x3b286000},{0x3b288000},{0x3b28a000},{0x3b28c000},{0x3b28e000},{0x3b290000},{0x3b292000},{0x3b294000},{0x3b296000},{0x3b298000},{0x3b29a000},{0x3b29c000},{0x3b29e000},{0x3b2a0000},{0x3b2a2000},{0x3b2a4000},{0x3b2a6000},{0x3b2a8000},{0x3b2aa000},{0x3b2ac000},{0x3b2ae000},{0x3b2b0000},{0x3b2b2000},{0x3b2b4000},{0x3b2b6000},{0x3b2b8000},{0x3b2ba000},{0x3b2bc000},{0x3b2be000}, +{0x3b2c0000},{0x3b2c2000},{0x3b2c4000},{0x3b2c6000},{0x3b2c8000},{0x3b2ca000},{0x3b2cc000},{0x3b2ce000},{0x3b2d0000},{0x3b2d2000},{0x3b2d4000},{0x3b2d6000},{0x3b2d8000},{0x3b2da000},{0x3b2dc000},{0x3b2de000},{0x3b2e0000},{0x3b2e2000},{0x3b2e4000},{0x3b2e6000},{0x3b2e8000},{0x3b2ea000},{0x3b2ec000},{0x3b2ee000},{0x3b2f0000},{0x3b2f2000},{0x3b2f4000},{0x3b2f6000},{0x3b2f8000},{0x3b2fa000},{0x3b2fc000},{0x3b2fe000}, +{0x3b300000},{0x3b302000},{0x3b304000},{0x3b306000},{0x3b308000},{0x3b30a000},{0x3b30c000},{0x3b30e000},{0x3b310000},{0x3b312000},{0x3b314000},{0x3b316000},{0x3b318000},{0x3b31a000},{0x3b31c000},{0x3b31e000},{0x3b320000},{0x3b322000},{0x3b324000},{0x3b326000},{0x3b328000},{0x3b32a000},{0x3b32c000},{0x3b32e000},{0x3b330000},{0x3b332000},{0x3b334000},{0x3b336000},{0x3b338000},{0x3b33a000},{0x3b33c000},{0x3b33e000}, +{0x3b340000},{0x3b342000},{0x3b344000},{0x3b346000},{0x3b348000},{0x3b34a000},{0x3b34c000},{0x3b34e000},{0x3b350000},{0x3b352000},{0x3b354000},{0x3b356000},{0x3b358000},{0x3b35a000},{0x3b35c000},{0x3b35e000},{0x3b360000},{0x3b362000},{0x3b364000},{0x3b366000},{0x3b368000},{0x3b36a000},{0x3b36c000},{0x3b36e000},{0x3b370000},{0x3b372000},{0x3b374000},{0x3b376000},{0x3b378000},{0x3b37a000},{0x3b37c000},{0x3b37e000}, +{0x3b380000},{0x3b382000},{0x3b384000},{0x3b386000},{0x3b388000},{0x3b38a000},{0x3b38c000},{0x3b38e000},{0x3b390000},{0x3b392000},{0x3b394000},{0x3b396000},{0x3b398000},{0x3b39a000},{0x3b39c000},{0x3b39e000},{0x3b3a0000},{0x3b3a2000},{0x3b3a4000},{0x3b3a6000},{0x3b3a8000},{0x3b3aa000},{0x3b3ac000},{0x3b3ae000},{0x3b3b0000},{0x3b3b2000},{0x3b3b4000},{0x3b3b6000},{0x3b3b8000},{0x3b3ba000},{0x3b3bc000},{0x3b3be000}, +{0x3b3c0000},{0x3b3c2000},{0x3b3c4000},{0x3b3c6000},{0x3b3c8000},{0x3b3ca000},{0x3b3cc000},{0x3b3ce000},{0x3b3d0000},{0x3b3d2000},{0x3b3d4000},{0x3b3d6000},{0x3b3d8000},{0x3b3da000},{0x3b3dc000},{0x3b3de000},{0x3b3e0000},{0x3b3e2000},{0x3b3e4000},{0x3b3e6000},{0x3b3e8000},{0x3b3ea000},{0x3b3ec000},{0x3b3ee000},{0x3b3f0000},{0x3b3f2000},{0x3b3f4000},{0x3b3f6000},{0x3b3f8000},{0x3b3fa000},{0x3b3fc000},{0x3b3fe000}, +{0x3b400000},{0x3b402000},{0x3b404000},{0x3b406000},{0x3b408000},{0x3b40a000},{0x3b40c000},{0x3b40e000},{0x3b410000},{0x3b412000},{0x3b414000},{0x3b416000},{0x3b418000},{0x3b41a000},{0x3b41c000},{0x3b41e000},{0x3b420000},{0x3b422000},{0x3b424000},{0x3b426000},{0x3b428000},{0x3b42a000},{0x3b42c000},{0x3b42e000},{0x3b430000},{0x3b432000},{0x3b434000},{0x3b436000},{0x3b438000},{0x3b43a000},{0x3b43c000},{0x3b43e000}, +{0x3b440000},{0x3b442000},{0x3b444000},{0x3b446000},{0x3b448000},{0x3b44a000},{0x3b44c000},{0x3b44e000},{0x3b450000},{0x3b452000},{0x3b454000},{0x3b456000},{0x3b458000},{0x3b45a000},{0x3b45c000},{0x3b45e000},{0x3b460000},{0x3b462000},{0x3b464000},{0x3b466000},{0x3b468000},{0x3b46a000},{0x3b46c000},{0x3b46e000},{0x3b470000},{0x3b472000},{0x3b474000},{0x3b476000},{0x3b478000},{0x3b47a000},{0x3b47c000},{0x3b47e000}, +{0x3b480000},{0x3b482000},{0x3b484000},{0x3b486000},{0x3b488000},{0x3b48a000},{0x3b48c000},{0x3b48e000},{0x3b490000},{0x3b492000},{0x3b494000},{0x3b496000},{0x3b498000},{0x3b49a000},{0x3b49c000},{0x3b49e000},{0x3b4a0000},{0x3b4a2000},{0x3b4a4000},{0x3b4a6000},{0x3b4a8000},{0x3b4aa000},{0x3b4ac000},{0x3b4ae000},{0x3b4b0000},{0x3b4b2000},{0x3b4b4000},{0x3b4b6000},{0x3b4b8000},{0x3b4ba000},{0x3b4bc000},{0x3b4be000}, +{0x3b4c0000},{0x3b4c2000},{0x3b4c4000},{0x3b4c6000},{0x3b4c8000},{0x3b4ca000},{0x3b4cc000},{0x3b4ce000},{0x3b4d0000},{0x3b4d2000},{0x3b4d4000},{0x3b4d6000},{0x3b4d8000},{0x3b4da000},{0x3b4dc000},{0x3b4de000},{0x3b4e0000},{0x3b4e2000},{0x3b4e4000},{0x3b4e6000},{0x3b4e8000},{0x3b4ea000},{0x3b4ec000},{0x3b4ee000},{0x3b4f0000},{0x3b4f2000},{0x3b4f4000},{0x3b4f6000},{0x3b4f8000},{0x3b4fa000},{0x3b4fc000},{0x3b4fe000}, +{0x3b500000},{0x3b502000},{0x3b504000},{0x3b506000},{0x3b508000},{0x3b50a000},{0x3b50c000},{0x3b50e000},{0x3b510000},{0x3b512000},{0x3b514000},{0x3b516000},{0x3b518000},{0x3b51a000},{0x3b51c000},{0x3b51e000},{0x3b520000},{0x3b522000},{0x3b524000},{0x3b526000},{0x3b528000},{0x3b52a000},{0x3b52c000},{0x3b52e000},{0x3b530000},{0x3b532000},{0x3b534000},{0x3b536000},{0x3b538000},{0x3b53a000},{0x3b53c000},{0x3b53e000}, +{0x3b540000},{0x3b542000},{0x3b544000},{0x3b546000},{0x3b548000},{0x3b54a000},{0x3b54c000},{0x3b54e000},{0x3b550000},{0x3b552000},{0x3b554000},{0x3b556000},{0x3b558000},{0x3b55a000},{0x3b55c000},{0x3b55e000},{0x3b560000},{0x3b562000},{0x3b564000},{0x3b566000},{0x3b568000},{0x3b56a000},{0x3b56c000},{0x3b56e000},{0x3b570000},{0x3b572000},{0x3b574000},{0x3b576000},{0x3b578000},{0x3b57a000},{0x3b57c000},{0x3b57e000}, +{0x3b580000},{0x3b582000},{0x3b584000},{0x3b586000},{0x3b588000},{0x3b58a000},{0x3b58c000},{0x3b58e000},{0x3b590000},{0x3b592000},{0x3b594000},{0x3b596000},{0x3b598000},{0x3b59a000},{0x3b59c000},{0x3b59e000},{0x3b5a0000},{0x3b5a2000},{0x3b5a4000},{0x3b5a6000},{0x3b5a8000},{0x3b5aa000},{0x3b5ac000},{0x3b5ae000},{0x3b5b0000},{0x3b5b2000},{0x3b5b4000},{0x3b5b6000},{0x3b5b8000},{0x3b5ba000},{0x3b5bc000},{0x3b5be000}, +{0x3b5c0000},{0x3b5c2000},{0x3b5c4000},{0x3b5c6000},{0x3b5c8000},{0x3b5ca000},{0x3b5cc000},{0x3b5ce000},{0x3b5d0000},{0x3b5d2000},{0x3b5d4000},{0x3b5d6000},{0x3b5d8000},{0x3b5da000},{0x3b5dc000},{0x3b5de000},{0x3b5e0000},{0x3b5e2000},{0x3b5e4000},{0x3b5e6000},{0x3b5e8000},{0x3b5ea000},{0x3b5ec000},{0x3b5ee000},{0x3b5f0000},{0x3b5f2000},{0x3b5f4000},{0x3b5f6000},{0x3b5f8000},{0x3b5fa000},{0x3b5fc000},{0x3b5fe000}, +{0x3b600000},{0x3b602000},{0x3b604000},{0x3b606000},{0x3b608000},{0x3b60a000},{0x3b60c000},{0x3b60e000},{0x3b610000},{0x3b612000},{0x3b614000},{0x3b616000},{0x3b618000},{0x3b61a000},{0x3b61c000},{0x3b61e000},{0x3b620000},{0x3b622000},{0x3b624000},{0x3b626000},{0x3b628000},{0x3b62a000},{0x3b62c000},{0x3b62e000},{0x3b630000},{0x3b632000},{0x3b634000},{0x3b636000},{0x3b638000},{0x3b63a000},{0x3b63c000},{0x3b63e000}, +{0x3b640000},{0x3b642000},{0x3b644000},{0x3b646000},{0x3b648000},{0x3b64a000},{0x3b64c000},{0x3b64e000},{0x3b650000},{0x3b652000},{0x3b654000},{0x3b656000},{0x3b658000},{0x3b65a000},{0x3b65c000},{0x3b65e000},{0x3b660000},{0x3b662000},{0x3b664000},{0x3b666000},{0x3b668000},{0x3b66a000},{0x3b66c000},{0x3b66e000},{0x3b670000},{0x3b672000},{0x3b674000},{0x3b676000},{0x3b678000},{0x3b67a000},{0x3b67c000},{0x3b67e000}, +{0x3b680000},{0x3b682000},{0x3b684000},{0x3b686000},{0x3b688000},{0x3b68a000},{0x3b68c000},{0x3b68e000},{0x3b690000},{0x3b692000},{0x3b694000},{0x3b696000},{0x3b698000},{0x3b69a000},{0x3b69c000},{0x3b69e000},{0x3b6a0000},{0x3b6a2000},{0x3b6a4000},{0x3b6a6000},{0x3b6a8000},{0x3b6aa000},{0x3b6ac000},{0x3b6ae000},{0x3b6b0000},{0x3b6b2000},{0x3b6b4000},{0x3b6b6000},{0x3b6b8000},{0x3b6ba000},{0x3b6bc000},{0x3b6be000}, +{0x3b6c0000},{0x3b6c2000},{0x3b6c4000},{0x3b6c6000},{0x3b6c8000},{0x3b6ca000},{0x3b6cc000},{0x3b6ce000},{0x3b6d0000},{0x3b6d2000},{0x3b6d4000},{0x3b6d6000},{0x3b6d8000},{0x3b6da000},{0x3b6dc000},{0x3b6de000},{0x3b6e0000},{0x3b6e2000},{0x3b6e4000},{0x3b6e6000},{0x3b6e8000},{0x3b6ea000},{0x3b6ec000},{0x3b6ee000},{0x3b6f0000},{0x3b6f2000},{0x3b6f4000},{0x3b6f6000},{0x3b6f8000},{0x3b6fa000},{0x3b6fc000},{0x3b6fe000}, +{0x3b700000},{0x3b702000},{0x3b704000},{0x3b706000},{0x3b708000},{0x3b70a000},{0x3b70c000},{0x3b70e000},{0x3b710000},{0x3b712000},{0x3b714000},{0x3b716000},{0x3b718000},{0x3b71a000},{0x3b71c000},{0x3b71e000},{0x3b720000},{0x3b722000},{0x3b724000},{0x3b726000},{0x3b728000},{0x3b72a000},{0x3b72c000},{0x3b72e000},{0x3b730000},{0x3b732000},{0x3b734000},{0x3b736000},{0x3b738000},{0x3b73a000},{0x3b73c000},{0x3b73e000}, +{0x3b740000},{0x3b742000},{0x3b744000},{0x3b746000},{0x3b748000},{0x3b74a000},{0x3b74c000},{0x3b74e000},{0x3b750000},{0x3b752000},{0x3b754000},{0x3b756000},{0x3b758000},{0x3b75a000},{0x3b75c000},{0x3b75e000},{0x3b760000},{0x3b762000},{0x3b764000},{0x3b766000},{0x3b768000},{0x3b76a000},{0x3b76c000},{0x3b76e000},{0x3b770000},{0x3b772000},{0x3b774000},{0x3b776000},{0x3b778000},{0x3b77a000},{0x3b77c000},{0x3b77e000}, +{0x3b780000},{0x3b782000},{0x3b784000},{0x3b786000},{0x3b788000},{0x3b78a000},{0x3b78c000},{0x3b78e000},{0x3b790000},{0x3b792000},{0x3b794000},{0x3b796000},{0x3b798000},{0x3b79a000},{0x3b79c000},{0x3b79e000},{0x3b7a0000},{0x3b7a2000},{0x3b7a4000},{0x3b7a6000},{0x3b7a8000},{0x3b7aa000},{0x3b7ac000},{0x3b7ae000},{0x3b7b0000},{0x3b7b2000},{0x3b7b4000},{0x3b7b6000},{0x3b7b8000},{0x3b7ba000},{0x3b7bc000},{0x3b7be000}, +{0x3b7c0000},{0x3b7c2000},{0x3b7c4000},{0x3b7c6000},{0x3b7c8000},{0x3b7ca000},{0x3b7cc000},{0x3b7ce000},{0x3b7d0000},{0x3b7d2000},{0x3b7d4000},{0x3b7d6000},{0x3b7d8000},{0x3b7da000},{0x3b7dc000},{0x3b7de000},{0x3b7e0000},{0x3b7e2000},{0x3b7e4000},{0x3b7e6000},{0x3b7e8000},{0x3b7ea000},{0x3b7ec000},{0x3b7ee000},{0x3b7f0000},{0x3b7f2000},{0x3b7f4000},{0x3b7f6000},{0x3b7f8000},{0x3b7fa000},{0x3b7fc000},{0x3b7fe000}, +{0x3b800000},{0x3b802000},{0x3b804000},{0x3b806000},{0x3b808000},{0x3b80a000},{0x3b80c000},{0x3b80e000},{0x3b810000},{0x3b812000},{0x3b814000},{0x3b816000},{0x3b818000},{0x3b81a000},{0x3b81c000},{0x3b81e000},{0x3b820000},{0x3b822000},{0x3b824000},{0x3b826000},{0x3b828000},{0x3b82a000},{0x3b82c000},{0x3b82e000},{0x3b830000},{0x3b832000},{0x3b834000},{0x3b836000},{0x3b838000},{0x3b83a000},{0x3b83c000},{0x3b83e000}, +{0x3b840000},{0x3b842000},{0x3b844000},{0x3b846000},{0x3b848000},{0x3b84a000},{0x3b84c000},{0x3b84e000},{0x3b850000},{0x3b852000},{0x3b854000},{0x3b856000},{0x3b858000},{0x3b85a000},{0x3b85c000},{0x3b85e000},{0x3b860000},{0x3b862000},{0x3b864000},{0x3b866000},{0x3b868000},{0x3b86a000},{0x3b86c000},{0x3b86e000},{0x3b870000},{0x3b872000},{0x3b874000},{0x3b876000},{0x3b878000},{0x3b87a000},{0x3b87c000},{0x3b87e000}, +{0x3b880000},{0x3b882000},{0x3b884000},{0x3b886000},{0x3b888000},{0x3b88a000},{0x3b88c000},{0x3b88e000},{0x3b890000},{0x3b892000},{0x3b894000},{0x3b896000},{0x3b898000},{0x3b89a000},{0x3b89c000},{0x3b89e000},{0x3b8a0000},{0x3b8a2000},{0x3b8a4000},{0x3b8a6000},{0x3b8a8000},{0x3b8aa000},{0x3b8ac000},{0x3b8ae000},{0x3b8b0000},{0x3b8b2000},{0x3b8b4000},{0x3b8b6000},{0x3b8b8000},{0x3b8ba000},{0x3b8bc000},{0x3b8be000}, +{0x3b8c0000},{0x3b8c2000},{0x3b8c4000},{0x3b8c6000},{0x3b8c8000},{0x3b8ca000},{0x3b8cc000},{0x3b8ce000},{0x3b8d0000},{0x3b8d2000},{0x3b8d4000},{0x3b8d6000},{0x3b8d8000},{0x3b8da000},{0x3b8dc000},{0x3b8de000},{0x3b8e0000},{0x3b8e2000},{0x3b8e4000},{0x3b8e6000},{0x3b8e8000},{0x3b8ea000},{0x3b8ec000},{0x3b8ee000},{0x3b8f0000},{0x3b8f2000},{0x3b8f4000},{0x3b8f6000},{0x3b8f8000},{0x3b8fa000},{0x3b8fc000},{0x3b8fe000}, +{0x3b900000},{0x3b902000},{0x3b904000},{0x3b906000},{0x3b908000},{0x3b90a000},{0x3b90c000},{0x3b90e000},{0x3b910000},{0x3b912000},{0x3b914000},{0x3b916000},{0x3b918000},{0x3b91a000},{0x3b91c000},{0x3b91e000},{0x3b920000},{0x3b922000},{0x3b924000},{0x3b926000},{0x3b928000},{0x3b92a000},{0x3b92c000},{0x3b92e000},{0x3b930000},{0x3b932000},{0x3b934000},{0x3b936000},{0x3b938000},{0x3b93a000},{0x3b93c000},{0x3b93e000}, +{0x3b940000},{0x3b942000},{0x3b944000},{0x3b946000},{0x3b948000},{0x3b94a000},{0x3b94c000},{0x3b94e000},{0x3b950000},{0x3b952000},{0x3b954000},{0x3b956000},{0x3b958000},{0x3b95a000},{0x3b95c000},{0x3b95e000},{0x3b960000},{0x3b962000},{0x3b964000},{0x3b966000},{0x3b968000},{0x3b96a000},{0x3b96c000},{0x3b96e000},{0x3b970000},{0x3b972000},{0x3b974000},{0x3b976000},{0x3b978000},{0x3b97a000},{0x3b97c000},{0x3b97e000}, +{0x3b980000},{0x3b982000},{0x3b984000},{0x3b986000},{0x3b988000},{0x3b98a000},{0x3b98c000},{0x3b98e000},{0x3b990000},{0x3b992000},{0x3b994000},{0x3b996000},{0x3b998000},{0x3b99a000},{0x3b99c000},{0x3b99e000},{0x3b9a0000},{0x3b9a2000},{0x3b9a4000},{0x3b9a6000},{0x3b9a8000},{0x3b9aa000},{0x3b9ac000},{0x3b9ae000},{0x3b9b0000},{0x3b9b2000},{0x3b9b4000},{0x3b9b6000},{0x3b9b8000},{0x3b9ba000},{0x3b9bc000},{0x3b9be000}, +{0x3b9c0000},{0x3b9c2000},{0x3b9c4000},{0x3b9c6000},{0x3b9c8000},{0x3b9ca000},{0x3b9cc000},{0x3b9ce000},{0x3b9d0000},{0x3b9d2000},{0x3b9d4000},{0x3b9d6000},{0x3b9d8000},{0x3b9da000},{0x3b9dc000},{0x3b9de000},{0x3b9e0000},{0x3b9e2000},{0x3b9e4000},{0x3b9e6000},{0x3b9e8000},{0x3b9ea000},{0x3b9ec000},{0x3b9ee000},{0x3b9f0000},{0x3b9f2000},{0x3b9f4000},{0x3b9f6000},{0x3b9f8000},{0x3b9fa000},{0x3b9fc000},{0x3b9fe000}, +{0x3ba00000},{0x3ba02000},{0x3ba04000},{0x3ba06000},{0x3ba08000},{0x3ba0a000},{0x3ba0c000},{0x3ba0e000},{0x3ba10000},{0x3ba12000},{0x3ba14000},{0x3ba16000},{0x3ba18000},{0x3ba1a000},{0x3ba1c000},{0x3ba1e000},{0x3ba20000},{0x3ba22000},{0x3ba24000},{0x3ba26000},{0x3ba28000},{0x3ba2a000},{0x3ba2c000},{0x3ba2e000},{0x3ba30000},{0x3ba32000},{0x3ba34000},{0x3ba36000},{0x3ba38000},{0x3ba3a000},{0x3ba3c000},{0x3ba3e000}, +{0x3ba40000},{0x3ba42000},{0x3ba44000},{0x3ba46000},{0x3ba48000},{0x3ba4a000},{0x3ba4c000},{0x3ba4e000},{0x3ba50000},{0x3ba52000},{0x3ba54000},{0x3ba56000},{0x3ba58000},{0x3ba5a000},{0x3ba5c000},{0x3ba5e000},{0x3ba60000},{0x3ba62000},{0x3ba64000},{0x3ba66000},{0x3ba68000},{0x3ba6a000},{0x3ba6c000},{0x3ba6e000},{0x3ba70000},{0x3ba72000},{0x3ba74000},{0x3ba76000},{0x3ba78000},{0x3ba7a000},{0x3ba7c000},{0x3ba7e000}, +{0x3ba80000},{0x3ba82000},{0x3ba84000},{0x3ba86000},{0x3ba88000},{0x3ba8a000},{0x3ba8c000},{0x3ba8e000},{0x3ba90000},{0x3ba92000},{0x3ba94000},{0x3ba96000},{0x3ba98000},{0x3ba9a000},{0x3ba9c000},{0x3ba9e000},{0x3baa0000},{0x3baa2000},{0x3baa4000},{0x3baa6000},{0x3baa8000},{0x3baaa000},{0x3baac000},{0x3baae000},{0x3bab0000},{0x3bab2000},{0x3bab4000},{0x3bab6000},{0x3bab8000},{0x3baba000},{0x3babc000},{0x3babe000}, +{0x3bac0000},{0x3bac2000},{0x3bac4000},{0x3bac6000},{0x3bac8000},{0x3baca000},{0x3bacc000},{0x3bace000},{0x3bad0000},{0x3bad2000},{0x3bad4000},{0x3bad6000},{0x3bad8000},{0x3bada000},{0x3badc000},{0x3bade000},{0x3bae0000},{0x3bae2000},{0x3bae4000},{0x3bae6000},{0x3bae8000},{0x3baea000},{0x3baec000},{0x3baee000},{0x3baf0000},{0x3baf2000},{0x3baf4000},{0x3baf6000},{0x3baf8000},{0x3bafa000},{0x3bafc000},{0x3bafe000}, +{0x3bb00000},{0x3bb02000},{0x3bb04000},{0x3bb06000},{0x3bb08000},{0x3bb0a000},{0x3bb0c000},{0x3bb0e000},{0x3bb10000},{0x3bb12000},{0x3bb14000},{0x3bb16000},{0x3bb18000},{0x3bb1a000},{0x3bb1c000},{0x3bb1e000},{0x3bb20000},{0x3bb22000},{0x3bb24000},{0x3bb26000},{0x3bb28000},{0x3bb2a000},{0x3bb2c000},{0x3bb2e000},{0x3bb30000},{0x3bb32000},{0x3bb34000},{0x3bb36000},{0x3bb38000},{0x3bb3a000},{0x3bb3c000},{0x3bb3e000}, +{0x3bb40000},{0x3bb42000},{0x3bb44000},{0x3bb46000},{0x3bb48000},{0x3bb4a000},{0x3bb4c000},{0x3bb4e000},{0x3bb50000},{0x3bb52000},{0x3bb54000},{0x3bb56000},{0x3bb58000},{0x3bb5a000},{0x3bb5c000},{0x3bb5e000},{0x3bb60000},{0x3bb62000},{0x3bb64000},{0x3bb66000},{0x3bb68000},{0x3bb6a000},{0x3bb6c000},{0x3bb6e000},{0x3bb70000},{0x3bb72000},{0x3bb74000},{0x3bb76000},{0x3bb78000},{0x3bb7a000},{0x3bb7c000},{0x3bb7e000}, +{0x3bb80000},{0x3bb82000},{0x3bb84000},{0x3bb86000},{0x3bb88000},{0x3bb8a000},{0x3bb8c000},{0x3bb8e000},{0x3bb90000},{0x3bb92000},{0x3bb94000},{0x3bb96000},{0x3bb98000},{0x3bb9a000},{0x3bb9c000},{0x3bb9e000},{0x3bba0000},{0x3bba2000},{0x3bba4000},{0x3bba6000},{0x3bba8000},{0x3bbaa000},{0x3bbac000},{0x3bbae000},{0x3bbb0000},{0x3bbb2000},{0x3bbb4000},{0x3bbb6000},{0x3bbb8000},{0x3bbba000},{0x3bbbc000},{0x3bbbe000}, +{0x3bbc0000},{0x3bbc2000},{0x3bbc4000},{0x3bbc6000},{0x3bbc8000},{0x3bbca000},{0x3bbcc000},{0x3bbce000},{0x3bbd0000},{0x3bbd2000},{0x3bbd4000},{0x3bbd6000},{0x3bbd8000},{0x3bbda000},{0x3bbdc000},{0x3bbde000},{0x3bbe0000},{0x3bbe2000},{0x3bbe4000},{0x3bbe6000},{0x3bbe8000},{0x3bbea000},{0x3bbec000},{0x3bbee000},{0x3bbf0000},{0x3bbf2000},{0x3bbf4000},{0x3bbf6000},{0x3bbf8000},{0x3bbfa000},{0x3bbfc000},{0x3bbfe000}, +{0x3bc00000},{0x3bc02000},{0x3bc04000},{0x3bc06000},{0x3bc08000},{0x3bc0a000},{0x3bc0c000},{0x3bc0e000},{0x3bc10000},{0x3bc12000},{0x3bc14000},{0x3bc16000},{0x3bc18000},{0x3bc1a000},{0x3bc1c000},{0x3bc1e000},{0x3bc20000},{0x3bc22000},{0x3bc24000},{0x3bc26000},{0x3bc28000},{0x3bc2a000},{0x3bc2c000},{0x3bc2e000},{0x3bc30000},{0x3bc32000},{0x3bc34000},{0x3bc36000},{0x3bc38000},{0x3bc3a000},{0x3bc3c000},{0x3bc3e000}, +{0x3bc40000},{0x3bc42000},{0x3bc44000},{0x3bc46000},{0x3bc48000},{0x3bc4a000},{0x3bc4c000},{0x3bc4e000},{0x3bc50000},{0x3bc52000},{0x3bc54000},{0x3bc56000},{0x3bc58000},{0x3bc5a000},{0x3bc5c000},{0x3bc5e000},{0x3bc60000},{0x3bc62000},{0x3bc64000},{0x3bc66000},{0x3bc68000},{0x3bc6a000},{0x3bc6c000},{0x3bc6e000},{0x3bc70000},{0x3bc72000},{0x3bc74000},{0x3bc76000},{0x3bc78000},{0x3bc7a000},{0x3bc7c000},{0x3bc7e000}, +{0x3bc80000},{0x3bc82000},{0x3bc84000},{0x3bc86000},{0x3bc88000},{0x3bc8a000},{0x3bc8c000},{0x3bc8e000},{0x3bc90000},{0x3bc92000},{0x3bc94000},{0x3bc96000},{0x3bc98000},{0x3bc9a000},{0x3bc9c000},{0x3bc9e000},{0x3bca0000},{0x3bca2000},{0x3bca4000},{0x3bca6000},{0x3bca8000},{0x3bcaa000},{0x3bcac000},{0x3bcae000},{0x3bcb0000},{0x3bcb2000},{0x3bcb4000},{0x3bcb6000},{0x3bcb8000},{0x3bcba000},{0x3bcbc000},{0x3bcbe000}, +{0x3bcc0000},{0x3bcc2000},{0x3bcc4000},{0x3bcc6000},{0x3bcc8000},{0x3bcca000},{0x3bccc000},{0x3bcce000},{0x3bcd0000},{0x3bcd2000},{0x3bcd4000},{0x3bcd6000},{0x3bcd8000},{0x3bcda000},{0x3bcdc000},{0x3bcde000},{0x3bce0000},{0x3bce2000},{0x3bce4000},{0x3bce6000},{0x3bce8000},{0x3bcea000},{0x3bcec000},{0x3bcee000},{0x3bcf0000},{0x3bcf2000},{0x3bcf4000},{0x3bcf6000},{0x3bcf8000},{0x3bcfa000},{0x3bcfc000},{0x3bcfe000}, +{0x3bd00000},{0x3bd02000},{0x3bd04000},{0x3bd06000},{0x3bd08000},{0x3bd0a000},{0x3bd0c000},{0x3bd0e000},{0x3bd10000},{0x3bd12000},{0x3bd14000},{0x3bd16000},{0x3bd18000},{0x3bd1a000},{0x3bd1c000},{0x3bd1e000},{0x3bd20000},{0x3bd22000},{0x3bd24000},{0x3bd26000},{0x3bd28000},{0x3bd2a000},{0x3bd2c000},{0x3bd2e000},{0x3bd30000},{0x3bd32000},{0x3bd34000},{0x3bd36000},{0x3bd38000},{0x3bd3a000},{0x3bd3c000},{0x3bd3e000}, +{0x3bd40000},{0x3bd42000},{0x3bd44000},{0x3bd46000},{0x3bd48000},{0x3bd4a000},{0x3bd4c000},{0x3bd4e000},{0x3bd50000},{0x3bd52000},{0x3bd54000},{0x3bd56000},{0x3bd58000},{0x3bd5a000},{0x3bd5c000},{0x3bd5e000},{0x3bd60000},{0x3bd62000},{0x3bd64000},{0x3bd66000},{0x3bd68000},{0x3bd6a000},{0x3bd6c000},{0x3bd6e000},{0x3bd70000},{0x3bd72000},{0x3bd74000},{0x3bd76000},{0x3bd78000},{0x3bd7a000},{0x3bd7c000},{0x3bd7e000}, +{0x3bd80000},{0x3bd82000},{0x3bd84000},{0x3bd86000},{0x3bd88000},{0x3bd8a000},{0x3bd8c000},{0x3bd8e000},{0x3bd90000},{0x3bd92000},{0x3bd94000},{0x3bd96000},{0x3bd98000},{0x3bd9a000},{0x3bd9c000},{0x3bd9e000},{0x3bda0000},{0x3bda2000},{0x3bda4000},{0x3bda6000},{0x3bda8000},{0x3bdaa000},{0x3bdac000},{0x3bdae000},{0x3bdb0000},{0x3bdb2000},{0x3bdb4000},{0x3bdb6000},{0x3bdb8000},{0x3bdba000},{0x3bdbc000},{0x3bdbe000}, +{0x3bdc0000},{0x3bdc2000},{0x3bdc4000},{0x3bdc6000},{0x3bdc8000},{0x3bdca000},{0x3bdcc000},{0x3bdce000},{0x3bdd0000},{0x3bdd2000},{0x3bdd4000},{0x3bdd6000},{0x3bdd8000},{0x3bdda000},{0x3bddc000},{0x3bdde000},{0x3bde0000},{0x3bde2000},{0x3bde4000},{0x3bde6000},{0x3bde8000},{0x3bdea000},{0x3bdec000},{0x3bdee000},{0x3bdf0000},{0x3bdf2000},{0x3bdf4000},{0x3bdf6000},{0x3bdf8000},{0x3bdfa000},{0x3bdfc000},{0x3bdfe000}, +{0x3be00000},{0x3be02000},{0x3be04000},{0x3be06000},{0x3be08000},{0x3be0a000},{0x3be0c000},{0x3be0e000},{0x3be10000},{0x3be12000},{0x3be14000},{0x3be16000},{0x3be18000},{0x3be1a000},{0x3be1c000},{0x3be1e000},{0x3be20000},{0x3be22000},{0x3be24000},{0x3be26000},{0x3be28000},{0x3be2a000},{0x3be2c000},{0x3be2e000},{0x3be30000},{0x3be32000},{0x3be34000},{0x3be36000},{0x3be38000},{0x3be3a000},{0x3be3c000},{0x3be3e000}, +{0x3be40000},{0x3be42000},{0x3be44000},{0x3be46000},{0x3be48000},{0x3be4a000},{0x3be4c000},{0x3be4e000},{0x3be50000},{0x3be52000},{0x3be54000},{0x3be56000},{0x3be58000},{0x3be5a000},{0x3be5c000},{0x3be5e000},{0x3be60000},{0x3be62000},{0x3be64000},{0x3be66000},{0x3be68000},{0x3be6a000},{0x3be6c000},{0x3be6e000},{0x3be70000},{0x3be72000},{0x3be74000},{0x3be76000},{0x3be78000},{0x3be7a000},{0x3be7c000},{0x3be7e000}, +{0x3be80000},{0x3be82000},{0x3be84000},{0x3be86000},{0x3be88000},{0x3be8a000},{0x3be8c000},{0x3be8e000},{0x3be90000},{0x3be92000},{0x3be94000},{0x3be96000},{0x3be98000},{0x3be9a000},{0x3be9c000},{0x3be9e000},{0x3bea0000},{0x3bea2000},{0x3bea4000},{0x3bea6000},{0x3bea8000},{0x3beaa000},{0x3beac000},{0x3beae000},{0x3beb0000},{0x3beb2000},{0x3beb4000},{0x3beb6000},{0x3beb8000},{0x3beba000},{0x3bebc000},{0x3bebe000}, +{0x3bec0000},{0x3bec2000},{0x3bec4000},{0x3bec6000},{0x3bec8000},{0x3beca000},{0x3becc000},{0x3bece000},{0x3bed0000},{0x3bed2000},{0x3bed4000},{0x3bed6000},{0x3bed8000},{0x3beda000},{0x3bedc000},{0x3bede000},{0x3bee0000},{0x3bee2000},{0x3bee4000},{0x3bee6000},{0x3bee8000},{0x3beea000},{0x3beec000},{0x3beee000},{0x3bef0000},{0x3bef2000},{0x3bef4000},{0x3bef6000},{0x3bef8000},{0x3befa000},{0x3befc000},{0x3befe000}, +{0x3bf00000},{0x3bf02000},{0x3bf04000},{0x3bf06000},{0x3bf08000},{0x3bf0a000},{0x3bf0c000},{0x3bf0e000},{0x3bf10000},{0x3bf12000},{0x3bf14000},{0x3bf16000},{0x3bf18000},{0x3bf1a000},{0x3bf1c000},{0x3bf1e000},{0x3bf20000},{0x3bf22000},{0x3bf24000},{0x3bf26000},{0x3bf28000},{0x3bf2a000},{0x3bf2c000},{0x3bf2e000},{0x3bf30000},{0x3bf32000},{0x3bf34000},{0x3bf36000},{0x3bf38000},{0x3bf3a000},{0x3bf3c000},{0x3bf3e000}, +{0x3bf40000},{0x3bf42000},{0x3bf44000},{0x3bf46000},{0x3bf48000},{0x3bf4a000},{0x3bf4c000},{0x3bf4e000},{0x3bf50000},{0x3bf52000},{0x3bf54000},{0x3bf56000},{0x3bf58000},{0x3bf5a000},{0x3bf5c000},{0x3bf5e000},{0x3bf60000},{0x3bf62000},{0x3bf64000},{0x3bf66000},{0x3bf68000},{0x3bf6a000},{0x3bf6c000},{0x3bf6e000},{0x3bf70000},{0x3bf72000},{0x3bf74000},{0x3bf76000},{0x3bf78000},{0x3bf7a000},{0x3bf7c000},{0x3bf7e000}, +{0x3bf80000},{0x3bf82000},{0x3bf84000},{0x3bf86000},{0x3bf88000},{0x3bf8a000},{0x3bf8c000},{0x3bf8e000},{0x3bf90000},{0x3bf92000},{0x3bf94000},{0x3bf96000},{0x3bf98000},{0x3bf9a000},{0x3bf9c000},{0x3bf9e000},{0x3bfa0000},{0x3bfa2000},{0x3bfa4000},{0x3bfa6000},{0x3bfa8000},{0x3bfaa000},{0x3bfac000},{0x3bfae000},{0x3bfb0000},{0x3bfb2000},{0x3bfb4000},{0x3bfb6000},{0x3bfb8000},{0x3bfba000},{0x3bfbc000},{0x3bfbe000}, +{0x3bfc0000},{0x3bfc2000},{0x3bfc4000},{0x3bfc6000},{0x3bfc8000},{0x3bfca000},{0x3bfcc000},{0x3bfce000},{0x3bfd0000},{0x3bfd2000},{0x3bfd4000},{0x3bfd6000},{0x3bfd8000},{0x3bfda000},{0x3bfdc000},{0x3bfde000},{0x3bfe0000},{0x3bfe2000},{0x3bfe4000},{0x3bfe6000},{0x3bfe8000},{0x3bfea000},{0x3bfec000},{0x3bfee000},{0x3bff0000},{0x3bff2000},{0x3bff4000},{0x3bff6000},{0x3bff8000},{0x3bffa000},{0x3bffc000},{0x3bffe000}, +{0x3c000000},{0x3c002000},{0x3c004000},{0x3c006000},{0x3c008000},{0x3c00a000},{0x3c00c000},{0x3c00e000},{0x3c010000},{0x3c012000},{0x3c014000},{0x3c016000},{0x3c018000},{0x3c01a000},{0x3c01c000},{0x3c01e000},{0x3c020000},{0x3c022000},{0x3c024000},{0x3c026000},{0x3c028000},{0x3c02a000},{0x3c02c000},{0x3c02e000},{0x3c030000},{0x3c032000},{0x3c034000},{0x3c036000},{0x3c038000},{0x3c03a000},{0x3c03c000},{0x3c03e000}, +{0x3c040000},{0x3c042000},{0x3c044000},{0x3c046000},{0x3c048000},{0x3c04a000},{0x3c04c000},{0x3c04e000},{0x3c050000},{0x3c052000},{0x3c054000},{0x3c056000},{0x3c058000},{0x3c05a000},{0x3c05c000},{0x3c05e000},{0x3c060000},{0x3c062000},{0x3c064000},{0x3c066000},{0x3c068000},{0x3c06a000},{0x3c06c000},{0x3c06e000},{0x3c070000},{0x3c072000},{0x3c074000},{0x3c076000},{0x3c078000},{0x3c07a000},{0x3c07c000},{0x3c07e000}, +{0x3c080000},{0x3c082000},{0x3c084000},{0x3c086000},{0x3c088000},{0x3c08a000},{0x3c08c000},{0x3c08e000},{0x3c090000},{0x3c092000},{0x3c094000},{0x3c096000},{0x3c098000},{0x3c09a000},{0x3c09c000},{0x3c09e000},{0x3c0a0000},{0x3c0a2000},{0x3c0a4000},{0x3c0a6000},{0x3c0a8000},{0x3c0aa000},{0x3c0ac000},{0x3c0ae000},{0x3c0b0000},{0x3c0b2000},{0x3c0b4000},{0x3c0b6000},{0x3c0b8000},{0x3c0ba000},{0x3c0bc000},{0x3c0be000}, +{0x3c0c0000},{0x3c0c2000},{0x3c0c4000},{0x3c0c6000},{0x3c0c8000},{0x3c0ca000},{0x3c0cc000},{0x3c0ce000},{0x3c0d0000},{0x3c0d2000},{0x3c0d4000},{0x3c0d6000},{0x3c0d8000},{0x3c0da000},{0x3c0dc000},{0x3c0de000},{0x3c0e0000},{0x3c0e2000},{0x3c0e4000},{0x3c0e6000},{0x3c0e8000},{0x3c0ea000},{0x3c0ec000},{0x3c0ee000},{0x3c0f0000},{0x3c0f2000},{0x3c0f4000},{0x3c0f6000},{0x3c0f8000},{0x3c0fa000},{0x3c0fc000},{0x3c0fe000}, +{0x3c100000},{0x3c102000},{0x3c104000},{0x3c106000},{0x3c108000},{0x3c10a000},{0x3c10c000},{0x3c10e000},{0x3c110000},{0x3c112000},{0x3c114000},{0x3c116000},{0x3c118000},{0x3c11a000},{0x3c11c000},{0x3c11e000},{0x3c120000},{0x3c122000},{0x3c124000},{0x3c126000},{0x3c128000},{0x3c12a000},{0x3c12c000},{0x3c12e000},{0x3c130000},{0x3c132000},{0x3c134000},{0x3c136000},{0x3c138000},{0x3c13a000},{0x3c13c000},{0x3c13e000}, +{0x3c140000},{0x3c142000},{0x3c144000},{0x3c146000},{0x3c148000},{0x3c14a000},{0x3c14c000},{0x3c14e000},{0x3c150000},{0x3c152000},{0x3c154000},{0x3c156000},{0x3c158000},{0x3c15a000},{0x3c15c000},{0x3c15e000},{0x3c160000},{0x3c162000},{0x3c164000},{0x3c166000},{0x3c168000},{0x3c16a000},{0x3c16c000},{0x3c16e000},{0x3c170000},{0x3c172000},{0x3c174000},{0x3c176000},{0x3c178000},{0x3c17a000},{0x3c17c000},{0x3c17e000}, +{0x3c180000},{0x3c182000},{0x3c184000},{0x3c186000},{0x3c188000},{0x3c18a000},{0x3c18c000},{0x3c18e000},{0x3c190000},{0x3c192000},{0x3c194000},{0x3c196000},{0x3c198000},{0x3c19a000},{0x3c19c000},{0x3c19e000},{0x3c1a0000},{0x3c1a2000},{0x3c1a4000},{0x3c1a6000},{0x3c1a8000},{0x3c1aa000},{0x3c1ac000},{0x3c1ae000},{0x3c1b0000},{0x3c1b2000},{0x3c1b4000},{0x3c1b6000},{0x3c1b8000},{0x3c1ba000},{0x3c1bc000},{0x3c1be000}, +{0x3c1c0000},{0x3c1c2000},{0x3c1c4000},{0x3c1c6000},{0x3c1c8000},{0x3c1ca000},{0x3c1cc000},{0x3c1ce000},{0x3c1d0000},{0x3c1d2000},{0x3c1d4000},{0x3c1d6000},{0x3c1d8000},{0x3c1da000},{0x3c1dc000},{0x3c1de000},{0x3c1e0000},{0x3c1e2000},{0x3c1e4000},{0x3c1e6000},{0x3c1e8000},{0x3c1ea000},{0x3c1ec000},{0x3c1ee000},{0x3c1f0000},{0x3c1f2000},{0x3c1f4000},{0x3c1f6000},{0x3c1f8000},{0x3c1fa000},{0x3c1fc000},{0x3c1fe000}, +{0x3c200000},{0x3c202000},{0x3c204000},{0x3c206000},{0x3c208000},{0x3c20a000},{0x3c20c000},{0x3c20e000},{0x3c210000},{0x3c212000},{0x3c214000},{0x3c216000},{0x3c218000},{0x3c21a000},{0x3c21c000},{0x3c21e000},{0x3c220000},{0x3c222000},{0x3c224000},{0x3c226000},{0x3c228000},{0x3c22a000},{0x3c22c000},{0x3c22e000},{0x3c230000},{0x3c232000},{0x3c234000},{0x3c236000},{0x3c238000},{0x3c23a000},{0x3c23c000},{0x3c23e000}, +{0x3c240000},{0x3c242000},{0x3c244000},{0x3c246000},{0x3c248000},{0x3c24a000},{0x3c24c000},{0x3c24e000},{0x3c250000},{0x3c252000},{0x3c254000},{0x3c256000},{0x3c258000},{0x3c25a000},{0x3c25c000},{0x3c25e000},{0x3c260000},{0x3c262000},{0x3c264000},{0x3c266000},{0x3c268000},{0x3c26a000},{0x3c26c000},{0x3c26e000},{0x3c270000},{0x3c272000},{0x3c274000},{0x3c276000},{0x3c278000},{0x3c27a000},{0x3c27c000},{0x3c27e000}, +{0x3c280000},{0x3c282000},{0x3c284000},{0x3c286000},{0x3c288000},{0x3c28a000},{0x3c28c000},{0x3c28e000},{0x3c290000},{0x3c292000},{0x3c294000},{0x3c296000},{0x3c298000},{0x3c29a000},{0x3c29c000},{0x3c29e000},{0x3c2a0000},{0x3c2a2000},{0x3c2a4000},{0x3c2a6000},{0x3c2a8000},{0x3c2aa000},{0x3c2ac000},{0x3c2ae000},{0x3c2b0000},{0x3c2b2000},{0x3c2b4000},{0x3c2b6000},{0x3c2b8000},{0x3c2ba000},{0x3c2bc000},{0x3c2be000}, +{0x3c2c0000},{0x3c2c2000},{0x3c2c4000},{0x3c2c6000},{0x3c2c8000},{0x3c2ca000},{0x3c2cc000},{0x3c2ce000},{0x3c2d0000},{0x3c2d2000},{0x3c2d4000},{0x3c2d6000},{0x3c2d8000},{0x3c2da000},{0x3c2dc000},{0x3c2de000},{0x3c2e0000},{0x3c2e2000},{0x3c2e4000},{0x3c2e6000},{0x3c2e8000},{0x3c2ea000},{0x3c2ec000},{0x3c2ee000},{0x3c2f0000},{0x3c2f2000},{0x3c2f4000},{0x3c2f6000},{0x3c2f8000},{0x3c2fa000},{0x3c2fc000},{0x3c2fe000}, +{0x3c300000},{0x3c302000},{0x3c304000},{0x3c306000},{0x3c308000},{0x3c30a000},{0x3c30c000},{0x3c30e000},{0x3c310000},{0x3c312000},{0x3c314000},{0x3c316000},{0x3c318000},{0x3c31a000},{0x3c31c000},{0x3c31e000},{0x3c320000},{0x3c322000},{0x3c324000},{0x3c326000},{0x3c328000},{0x3c32a000},{0x3c32c000},{0x3c32e000},{0x3c330000},{0x3c332000},{0x3c334000},{0x3c336000},{0x3c338000},{0x3c33a000},{0x3c33c000},{0x3c33e000}, +{0x3c340000},{0x3c342000},{0x3c344000},{0x3c346000},{0x3c348000},{0x3c34a000},{0x3c34c000},{0x3c34e000},{0x3c350000},{0x3c352000},{0x3c354000},{0x3c356000},{0x3c358000},{0x3c35a000},{0x3c35c000},{0x3c35e000},{0x3c360000},{0x3c362000},{0x3c364000},{0x3c366000},{0x3c368000},{0x3c36a000},{0x3c36c000},{0x3c36e000},{0x3c370000},{0x3c372000},{0x3c374000},{0x3c376000},{0x3c378000},{0x3c37a000},{0x3c37c000},{0x3c37e000}, +{0x3c380000},{0x3c382000},{0x3c384000},{0x3c386000},{0x3c388000},{0x3c38a000},{0x3c38c000},{0x3c38e000},{0x3c390000},{0x3c392000},{0x3c394000},{0x3c396000},{0x3c398000},{0x3c39a000},{0x3c39c000},{0x3c39e000},{0x3c3a0000},{0x3c3a2000},{0x3c3a4000},{0x3c3a6000},{0x3c3a8000},{0x3c3aa000},{0x3c3ac000},{0x3c3ae000},{0x3c3b0000},{0x3c3b2000},{0x3c3b4000},{0x3c3b6000},{0x3c3b8000},{0x3c3ba000},{0x3c3bc000},{0x3c3be000}, +{0x3c3c0000},{0x3c3c2000},{0x3c3c4000},{0x3c3c6000},{0x3c3c8000},{0x3c3ca000},{0x3c3cc000},{0x3c3ce000},{0x3c3d0000},{0x3c3d2000},{0x3c3d4000},{0x3c3d6000},{0x3c3d8000},{0x3c3da000},{0x3c3dc000},{0x3c3de000},{0x3c3e0000},{0x3c3e2000},{0x3c3e4000},{0x3c3e6000},{0x3c3e8000},{0x3c3ea000},{0x3c3ec000},{0x3c3ee000},{0x3c3f0000},{0x3c3f2000},{0x3c3f4000},{0x3c3f6000},{0x3c3f8000},{0x3c3fa000},{0x3c3fc000},{0x3c3fe000}, +{0x3c400000},{0x3c402000},{0x3c404000},{0x3c406000},{0x3c408000},{0x3c40a000},{0x3c40c000},{0x3c40e000},{0x3c410000},{0x3c412000},{0x3c414000},{0x3c416000},{0x3c418000},{0x3c41a000},{0x3c41c000},{0x3c41e000},{0x3c420000},{0x3c422000},{0x3c424000},{0x3c426000},{0x3c428000},{0x3c42a000},{0x3c42c000},{0x3c42e000},{0x3c430000},{0x3c432000},{0x3c434000},{0x3c436000},{0x3c438000},{0x3c43a000},{0x3c43c000},{0x3c43e000}, +{0x3c440000},{0x3c442000},{0x3c444000},{0x3c446000},{0x3c448000},{0x3c44a000},{0x3c44c000},{0x3c44e000},{0x3c450000},{0x3c452000},{0x3c454000},{0x3c456000},{0x3c458000},{0x3c45a000},{0x3c45c000},{0x3c45e000},{0x3c460000},{0x3c462000},{0x3c464000},{0x3c466000},{0x3c468000},{0x3c46a000},{0x3c46c000},{0x3c46e000},{0x3c470000},{0x3c472000},{0x3c474000},{0x3c476000},{0x3c478000},{0x3c47a000},{0x3c47c000},{0x3c47e000}, +{0x3c480000},{0x3c482000},{0x3c484000},{0x3c486000},{0x3c488000},{0x3c48a000},{0x3c48c000},{0x3c48e000},{0x3c490000},{0x3c492000},{0x3c494000},{0x3c496000},{0x3c498000},{0x3c49a000},{0x3c49c000},{0x3c49e000},{0x3c4a0000},{0x3c4a2000},{0x3c4a4000},{0x3c4a6000},{0x3c4a8000},{0x3c4aa000},{0x3c4ac000},{0x3c4ae000},{0x3c4b0000},{0x3c4b2000},{0x3c4b4000},{0x3c4b6000},{0x3c4b8000},{0x3c4ba000},{0x3c4bc000},{0x3c4be000}, +{0x3c4c0000},{0x3c4c2000},{0x3c4c4000},{0x3c4c6000},{0x3c4c8000},{0x3c4ca000},{0x3c4cc000},{0x3c4ce000},{0x3c4d0000},{0x3c4d2000},{0x3c4d4000},{0x3c4d6000},{0x3c4d8000},{0x3c4da000},{0x3c4dc000},{0x3c4de000},{0x3c4e0000},{0x3c4e2000},{0x3c4e4000},{0x3c4e6000},{0x3c4e8000},{0x3c4ea000},{0x3c4ec000},{0x3c4ee000},{0x3c4f0000},{0x3c4f2000},{0x3c4f4000},{0x3c4f6000},{0x3c4f8000},{0x3c4fa000},{0x3c4fc000},{0x3c4fe000}, +{0x3c500000},{0x3c502000},{0x3c504000},{0x3c506000},{0x3c508000},{0x3c50a000},{0x3c50c000},{0x3c50e000},{0x3c510000},{0x3c512000},{0x3c514000},{0x3c516000},{0x3c518000},{0x3c51a000},{0x3c51c000},{0x3c51e000},{0x3c520000},{0x3c522000},{0x3c524000},{0x3c526000},{0x3c528000},{0x3c52a000},{0x3c52c000},{0x3c52e000},{0x3c530000},{0x3c532000},{0x3c534000},{0x3c536000},{0x3c538000},{0x3c53a000},{0x3c53c000},{0x3c53e000}, +{0x3c540000},{0x3c542000},{0x3c544000},{0x3c546000},{0x3c548000},{0x3c54a000},{0x3c54c000},{0x3c54e000},{0x3c550000},{0x3c552000},{0x3c554000},{0x3c556000},{0x3c558000},{0x3c55a000},{0x3c55c000},{0x3c55e000},{0x3c560000},{0x3c562000},{0x3c564000},{0x3c566000},{0x3c568000},{0x3c56a000},{0x3c56c000},{0x3c56e000},{0x3c570000},{0x3c572000},{0x3c574000},{0x3c576000},{0x3c578000},{0x3c57a000},{0x3c57c000},{0x3c57e000}, +{0x3c580000},{0x3c582000},{0x3c584000},{0x3c586000},{0x3c588000},{0x3c58a000},{0x3c58c000},{0x3c58e000},{0x3c590000},{0x3c592000},{0x3c594000},{0x3c596000},{0x3c598000},{0x3c59a000},{0x3c59c000},{0x3c59e000},{0x3c5a0000},{0x3c5a2000},{0x3c5a4000},{0x3c5a6000},{0x3c5a8000},{0x3c5aa000},{0x3c5ac000},{0x3c5ae000},{0x3c5b0000},{0x3c5b2000},{0x3c5b4000},{0x3c5b6000},{0x3c5b8000},{0x3c5ba000},{0x3c5bc000},{0x3c5be000}, +{0x3c5c0000},{0x3c5c2000},{0x3c5c4000},{0x3c5c6000},{0x3c5c8000},{0x3c5ca000},{0x3c5cc000},{0x3c5ce000},{0x3c5d0000},{0x3c5d2000},{0x3c5d4000},{0x3c5d6000},{0x3c5d8000},{0x3c5da000},{0x3c5dc000},{0x3c5de000},{0x3c5e0000},{0x3c5e2000},{0x3c5e4000},{0x3c5e6000},{0x3c5e8000},{0x3c5ea000},{0x3c5ec000},{0x3c5ee000},{0x3c5f0000},{0x3c5f2000},{0x3c5f4000},{0x3c5f6000},{0x3c5f8000},{0x3c5fa000},{0x3c5fc000},{0x3c5fe000}, +{0x3c600000},{0x3c602000},{0x3c604000},{0x3c606000},{0x3c608000},{0x3c60a000},{0x3c60c000},{0x3c60e000},{0x3c610000},{0x3c612000},{0x3c614000},{0x3c616000},{0x3c618000},{0x3c61a000},{0x3c61c000},{0x3c61e000},{0x3c620000},{0x3c622000},{0x3c624000},{0x3c626000},{0x3c628000},{0x3c62a000},{0x3c62c000},{0x3c62e000},{0x3c630000},{0x3c632000},{0x3c634000},{0x3c636000},{0x3c638000},{0x3c63a000},{0x3c63c000},{0x3c63e000}, +{0x3c640000},{0x3c642000},{0x3c644000},{0x3c646000},{0x3c648000},{0x3c64a000},{0x3c64c000},{0x3c64e000},{0x3c650000},{0x3c652000},{0x3c654000},{0x3c656000},{0x3c658000},{0x3c65a000},{0x3c65c000},{0x3c65e000},{0x3c660000},{0x3c662000},{0x3c664000},{0x3c666000},{0x3c668000},{0x3c66a000},{0x3c66c000},{0x3c66e000},{0x3c670000},{0x3c672000},{0x3c674000},{0x3c676000},{0x3c678000},{0x3c67a000},{0x3c67c000},{0x3c67e000}, +{0x3c680000},{0x3c682000},{0x3c684000},{0x3c686000},{0x3c688000},{0x3c68a000},{0x3c68c000},{0x3c68e000},{0x3c690000},{0x3c692000},{0x3c694000},{0x3c696000},{0x3c698000},{0x3c69a000},{0x3c69c000},{0x3c69e000},{0x3c6a0000},{0x3c6a2000},{0x3c6a4000},{0x3c6a6000},{0x3c6a8000},{0x3c6aa000},{0x3c6ac000},{0x3c6ae000},{0x3c6b0000},{0x3c6b2000},{0x3c6b4000},{0x3c6b6000},{0x3c6b8000},{0x3c6ba000},{0x3c6bc000},{0x3c6be000}, +{0x3c6c0000},{0x3c6c2000},{0x3c6c4000},{0x3c6c6000},{0x3c6c8000},{0x3c6ca000},{0x3c6cc000},{0x3c6ce000},{0x3c6d0000},{0x3c6d2000},{0x3c6d4000},{0x3c6d6000},{0x3c6d8000},{0x3c6da000},{0x3c6dc000},{0x3c6de000},{0x3c6e0000},{0x3c6e2000},{0x3c6e4000},{0x3c6e6000},{0x3c6e8000},{0x3c6ea000},{0x3c6ec000},{0x3c6ee000},{0x3c6f0000},{0x3c6f2000},{0x3c6f4000},{0x3c6f6000},{0x3c6f8000},{0x3c6fa000},{0x3c6fc000},{0x3c6fe000}, +{0x3c700000},{0x3c702000},{0x3c704000},{0x3c706000},{0x3c708000},{0x3c70a000},{0x3c70c000},{0x3c70e000},{0x3c710000},{0x3c712000},{0x3c714000},{0x3c716000},{0x3c718000},{0x3c71a000},{0x3c71c000},{0x3c71e000},{0x3c720000},{0x3c722000},{0x3c724000},{0x3c726000},{0x3c728000},{0x3c72a000},{0x3c72c000},{0x3c72e000},{0x3c730000},{0x3c732000},{0x3c734000},{0x3c736000},{0x3c738000},{0x3c73a000},{0x3c73c000},{0x3c73e000}, +{0x3c740000},{0x3c742000},{0x3c744000},{0x3c746000},{0x3c748000},{0x3c74a000},{0x3c74c000},{0x3c74e000},{0x3c750000},{0x3c752000},{0x3c754000},{0x3c756000},{0x3c758000},{0x3c75a000},{0x3c75c000},{0x3c75e000},{0x3c760000},{0x3c762000},{0x3c764000},{0x3c766000},{0x3c768000},{0x3c76a000},{0x3c76c000},{0x3c76e000},{0x3c770000},{0x3c772000},{0x3c774000},{0x3c776000},{0x3c778000},{0x3c77a000},{0x3c77c000},{0x3c77e000}, +{0x3c780000},{0x3c782000},{0x3c784000},{0x3c786000},{0x3c788000},{0x3c78a000},{0x3c78c000},{0x3c78e000},{0x3c790000},{0x3c792000},{0x3c794000},{0x3c796000},{0x3c798000},{0x3c79a000},{0x3c79c000},{0x3c79e000},{0x3c7a0000},{0x3c7a2000},{0x3c7a4000},{0x3c7a6000},{0x3c7a8000},{0x3c7aa000},{0x3c7ac000},{0x3c7ae000},{0x3c7b0000},{0x3c7b2000},{0x3c7b4000},{0x3c7b6000},{0x3c7b8000},{0x3c7ba000},{0x3c7bc000},{0x3c7be000}, +{0x3c7c0000},{0x3c7c2000},{0x3c7c4000},{0x3c7c6000},{0x3c7c8000},{0x3c7ca000},{0x3c7cc000},{0x3c7ce000},{0x3c7d0000},{0x3c7d2000},{0x3c7d4000},{0x3c7d6000},{0x3c7d8000},{0x3c7da000},{0x3c7dc000},{0x3c7de000},{0x3c7e0000},{0x3c7e2000},{0x3c7e4000},{0x3c7e6000},{0x3c7e8000},{0x3c7ea000},{0x3c7ec000},{0x3c7ee000},{0x3c7f0000},{0x3c7f2000},{0x3c7f4000},{0x3c7f6000},{0x3c7f8000},{0x3c7fa000},{0x3c7fc000},{0x3c7fe000}, +{0x3c800000},{0x3c802000},{0x3c804000},{0x3c806000},{0x3c808000},{0x3c80a000},{0x3c80c000},{0x3c80e000},{0x3c810000},{0x3c812000},{0x3c814000},{0x3c816000},{0x3c818000},{0x3c81a000},{0x3c81c000},{0x3c81e000},{0x3c820000},{0x3c822000},{0x3c824000},{0x3c826000},{0x3c828000},{0x3c82a000},{0x3c82c000},{0x3c82e000},{0x3c830000},{0x3c832000},{0x3c834000},{0x3c836000},{0x3c838000},{0x3c83a000},{0x3c83c000},{0x3c83e000}, +{0x3c840000},{0x3c842000},{0x3c844000},{0x3c846000},{0x3c848000},{0x3c84a000},{0x3c84c000},{0x3c84e000},{0x3c850000},{0x3c852000},{0x3c854000},{0x3c856000},{0x3c858000},{0x3c85a000},{0x3c85c000},{0x3c85e000},{0x3c860000},{0x3c862000},{0x3c864000},{0x3c866000},{0x3c868000},{0x3c86a000},{0x3c86c000},{0x3c86e000},{0x3c870000},{0x3c872000},{0x3c874000},{0x3c876000},{0x3c878000},{0x3c87a000},{0x3c87c000},{0x3c87e000}, +{0x3c880000},{0x3c882000},{0x3c884000},{0x3c886000},{0x3c888000},{0x3c88a000},{0x3c88c000},{0x3c88e000},{0x3c890000},{0x3c892000},{0x3c894000},{0x3c896000},{0x3c898000},{0x3c89a000},{0x3c89c000},{0x3c89e000},{0x3c8a0000},{0x3c8a2000},{0x3c8a4000},{0x3c8a6000},{0x3c8a8000},{0x3c8aa000},{0x3c8ac000},{0x3c8ae000},{0x3c8b0000},{0x3c8b2000},{0x3c8b4000},{0x3c8b6000},{0x3c8b8000},{0x3c8ba000},{0x3c8bc000},{0x3c8be000}, +{0x3c8c0000},{0x3c8c2000},{0x3c8c4000},{0x3c8c6000},{0x3c8c8000},{0x3c8ca000},{0x3c8cc000},{0x3c8ce000},{0x3c8d0000},{0x3c8d2000},{0x3c8d4000},{0x3c8d6000},{0x3c8d8000},{0x3c8da000},{0x3c8dc000},{0x3c8de000},{0x3c8e0000},{0x3c8e2000},{0x3c8e4000},{0x3c8e6000},{0x3c8e8000},{0x3c8ea000},{0x3c8ec000},{0x3c8ee000},{0x3c8f0000},{0x3c8f2000},{0x3c8f4000},{0x3c8f6000},{0x3c8f8000},{0x3c8fa000},{0x3c8fc000},{0x3c8fe000}, +{0x3c900000},{0x3c902000},{0x3c904000},{0x3c906000},{0x3c908000},{0x3c90a000},{0x3c90c000},{0x3c90e000},{0x3c910000},{0x3c912000},{0x3c914000},{0x3c916000},{0x3c918000},{0x3c91a000},{0x3c91c000},{0x3c91e000},{0x3c920000},{0x3c922000},{0x3c924000},{0x3c926000},{0x3c928000},{0x3c92a000},{0x3c92c000},{0x3c92e000},{0x3c930000},{0x3c932000},{0x3c934000},{0x3c936000},{0x3c938000},{0x3c93a000},{0x3c93c000},{0x3c93e000}, +{0x3c940000},{0x3c942000},{0x3c944000},{0x3c946000},{0x3c948000},{0x3c94a000},{0x3c94c000},{0x3c94e000},{0x3c950000},{0x3c952000},{0x3c954000},{0x3c956000},{0x3c958000},{0x3c95a000},{0x3c95c000},{0x3c95e000},{0x3c960000},{0x3c962000},{0x3c964000},{0x3c966000},{0x3c968000},{0x3c96a000},{0x3c96c000},{0x3c96e000},{0x3c970000},{0x3c972000},{0x3c974000},{0x3c976000},{0x3c978000},{0x3c97a000},{0x3c97c000},{0x3c97e000}, +{0x3c980000},{0x3c982000},{0x3c984000},{0x3c986000},{0x3c988000},{0x3c98a000},{0x3c98c000},{0x3c98e000},{0x3c990000},{0x3c992000},{0x3c994000},{0x3c996000},{0x3c998000},{0x3c99a000},{0x3c99c000},{0x3c99e000},{0x3c9a0000},{0x3c9a2000},{0x3c9a4000},{0x3c9a6000},{0x3c9a8000},{0x3c9aa000},{0x3c9ac000},{0x3c9ae000},{0x3c9b0000},{0x3c9b2000},{0x3c9b4000},{0x3c9b6000},{0x3c9b8000},{0x3c9ba000},{0x3c9bc000},{0x3c9be000}, +{0x3c9c0000},{0x3c9c2000},{0x3c9c4000},{0x3c9c6000},{0x3c9c8000},{0x3c9ca000},{0x3c9cc000},{0x3c9ce000},{0x3c9d0000},{0x3c9d2000},{0x3c9d4000},{0x3c9d6000},{0x3c9d8000},{0x3c9da000},{0x3c9dc000},{0x3c9de000},{0x3c9e0000},{0x3c9e2000},{0x3c9e4000},{0x3c9e6000},{0x3c9e8000},{0x3c9ea000},{0x3c9ec000},{0x3c9ee000},{0x3c9f0000},{0x3c9f2000},{0x3c9f4000},{0x3c9f6000},{0x3c9f8000},{0x3c9fa000},{0x3c9fc000},{0x3c9fe000}, +{0x3ca00000},{0x3ca02000},{0x3ca04000},{0x3ca06000},{0x3ca08000},{0x3ca0a000},{0x3ca0c000},{0x3ca0e000},{0x3ca10000},{0x3ca12000},{0x3ca14000},{0x3ca16000},{0x3ca18000},{0x3ca1a000},{0x3ca1c000},{0x3ca1e000},{0x3ca20000},{0x3ca22000},{0x3ca24000},{0x3ca26000},{0x3ca28000},{0x3ca2a000},{0x3ca2c000},{0x3ca2e000},{0x3ca30000},{0x3ca32000},{0x3ca34000},{0x3ca36000},{0x3ca38000},{0x3ca3a000},{0x3ca3c000},{0x3ca3e000}, +{0x3ca40000},{0x3ca42000},{0x3ca44000},{0x3ca46000},{0x3ca48000},{0x3ca4a000},{0x3ca4c000},{0x3ca4e000},{0x3ca50000},{0x3ca52000},{0x3ca54000},{0x3ca56000},{0x3ca58000},{0x3ca5a000},{0x3ca5c000},{0x3ca5e000},{0x3ca60000},{0x3ca62000},{0x3ca64000},{0x3ca66000},{0x3ca68000},{0x3ca6a000},{0x3ca6c000},{0x3ca6e000},{0x3ca70000},{0x3ca72000},{0x3ca74000},{0x3ca76000},{0x3ca78000},{0x3ca7a000},{0x3ca7c000},{0x3ca7e000}, +{0x3ca80000},{0x3ca82000},{0x3ca84000},{0x3ca86000},{0x3ca88000},{0x3ca8a000},{0x3ca8c000},{0x3ca8e000},{0x3ca90000},{0x3ca92000},{0x3ca94000},{0x3ca96000},{0x3ca98000},{0x3ca9a000},{0x3ca9c000},{0x3ca9e000},{0x3caa0000},{0x3caa2000},{0x3caa4000},{0x3caa6000},{0x3caa8000},{0x3caaa000},{0x3caac000},{0x3caae000},{0x3cab0000},{0x3cab2000},{0x3cab4000},{0x3cab6000},{0x3cab8000},{0x3caba000},{0x3cabc000},{0x3cabe000}, +{0x3cac0000},{0x3cac2000},{0x3cac4000},{0x3cac6000},{0x3cac8000},{0x3caca000},{0x3cacc000},{0x3cace000},{0x3cad0000},{0x3cad2000},{0x3cad4000},{0x3cad6000},{0x3cad8000},{0x3cada000},{0x3cadc000},{0x3cade000},{0x3cae0000},{0x3cae2000},{0x3cae4000},{0x3cae6000},{0x3cae8000},{0x3caea000},{0x3caec000},{0x3caee000},{0x3caf0000},{0x3caf2000},{0x3caf4000},{0x3caf6000},{0x3caf8000},{0x3cafa000},{0x3cafc000},{0x3cafe000}, +{0x3cb00000},{0x3cb02000},{0x3cb04000},{0x3cb06000},{0x3cb08000},{0x3cb0a000},{0x3cb0c000},{0x3cb0e000},{0x3cb10000},{0x3cb12000},{0x3cb14000},{0x3cb16000},{0x3cb18000},{0x3cb1a000},{0x3cb1c000},{0x3cb1e000},{0x3cb20000},{0x3cb22000},{0x3cb24000},{0x3cb26000},{0x3cb28000},{0x3cb2a000},{0x3cb2c000},{0x3cb2e000},{0x3cb30000},{0x3cb32000},{0x3cb34000},{0x3cb36000},{0x3cb38000},{0x3cb3a000},{0x3cb3c000},{0x3cb3e000}, +{0x3cb40000},{0x3cb42000},{0x3cb44000},{0x3cb46000},{0x3cb48000},{0x3cb4a000},{0x3cb4c000},{0x3cb4e000},{0x3cb50000},{0x3cb52000},{0x3cb54000},{0x3cb56000},{0x3cb58000},{0x3cb5a000},{0x3cb5c000},{0x3cb5e000},{0x3cb60000},{0x3cb62000},{0x3cb64000},{0x3cb66000},{0x3cb68000},{0x3cb6a000},{0x3cb6c000},{0x3cb6e000},{0x3cb70000},{0x3cb72000},{0x3cb74000},{0x3cb76000},{0x3cb78000},{0x3cb7a000},{0x3cb7c000},{0x3cb7e000}, +{0x3cb80000},{0x3cb82000},{0x3cb84000},{0x3cb86000},{0x3cb88000},{0x3cb8a000},{0x3cb8c000},{0x3cb8e000},{0x3cb90000},{0x3cb92000},{0x3cb94000},{0x3cb96000},{0x3cb98000},{0x3cb9a000},{0x3cb9c000},{0x3cb9e000},{0x3cba0000},{0x3cba2000},{0x3cba4000},{0x3cba6000},{0x3cba8000},{0x3cbaa000},{0x3cbac000},{0x3cbae000},{0x3cbb0000},{0x3cbb2000},{0x3cbb4000},{0x3cbb6000},{0x3cbb8000},{0x3cbba000},{0x3cbbc000},{0x3cbbe000}, +{0x3cbc0000},{0x3cbc2000},{0x3cbc4000},{0x3cbc6000},{0x3cbc8000},{0x3cbca000},{0x3cbcc000},{0x3cbce000},{0x3cbd0000},{0x3cbd2000},{0x3cbd4000},{0x3cbd6000},{0x3cbd8000},{0x3cbda000},{0x3cbdc000},{0x3cbde000},{0x3cbe0000},{0x3cbe2000},{0x3cbe4000},{0x3cbe6000},{0x3cbe8000},{0x3cbea000},{0x3cbec000},{0x3cbee000},{0x3cbf0000},{0x3cbf2000},{0x3cbf4000},{0x3cbf6000},{0x3cbf8000},{0x3cbfa000},{0x3cbfc000},{0x3cbfe000}, +{0x3cc00000},{0x3cc02000},{0x3cc04000},{0x3cc06000},{0x3cc08000},{0x3cc0a000},{0x3cc0c000},{0x3cc0e000},{0x3cc10000},{0x3cc12000},{0x3cc14000},{0x3cc16000},{0x3cc18000},{0x3cc1a000},{0x3cc1c000},{0x3cc1e000},{0x3cc20000},{0x3cc22000},{0x3cc24000},{0x3cc26000},{0x3cc28000},{0x3cc2a000},{0x3cc2c000},{0x3cc2e000},{0x3cc30000},{0x3cc32000},{0x3cc34000},{0x3cc36000},{0x3cc38000},{0x3cc3a000},{0x3cc3c000},{0x3cc3e000}, +{0x3cc40000},{0x3cc42000},{0x3cc44000},{0x3cc46000},{0x3cc48000},{0x3cc4a000},{0x3cc4c000},{0x3cc4e000},{0x3cc50000},{0x3cc52000},{0x3cc54000},{0x3cc56000},{0x3cc58000},{0x3cc5a000},{0x3cc5c000},{0x3cc5e000},{0x3cc60000},{0x3cc62000},{0x3cc64000},{0x3cc66000},{0x3cc68000},{0x3cc6a000},{0x3cc6c000},{0x3cc6e000},{0x3cc70000},{0x3cc72000},{0x3cc74000},{0x3cc76000},{0x3cc78000},{0x3cc7a000},{0x3cc7c000},{0x3cc7e000}, +{0x3cc80000},{0x3cc82000},{0x3cc84000},{0x3cc86000},{0x3cc88000},{0x3cc8a000},{0x3cc8c000},{0x3cc8e000},{0x3cc90000},{0x3cc92000},{0x3cc94000},{0x3cc96000},{0x3cc98000},{0x3cc9a000},{0x3cc9c000},{0x3cc9e000},{0x3cca0000},{0x3cca2000},{0x3cca4000},{0x3cca6000},{0x3cca8000},{0x3ccaa000},{0x3ccac000},{0x3ccae000},{0x3ccb0000},{0x3ccb2000},{0x3ccb4000},{0x3ccb6000},{0x3ccb8000},{0x3ccba000},{0x3ccbc000},{0x3ccbe000}, +{0x3ccc0000},{0x3ccc2000},{0x3ccc4000},{0x3ccc6000},{0x3ccc8000},{0x3ccca000},{0x3cccc000},{0x3ccce000},{0x3ccd0000},{0x3ccd2000},{0x3ccd4000},{0x3ccd6000},{0x3ccd8000},{0x3ccda000},{0x3ccdc000},{0x3ccde000},{0x3cce0000},{0x3cce2000},{0x3cce4000},{0x3cce6000},{0x3cce8000},{0x3ccea000},{0x3ccec000},{0x3ccee000},{0x3ccf0000},{0x3ccf2000},{0x3ccf4000},{0x3ccf6000},{0x3ccf8000},{0x3ccfa000},{0x3ccfc000},{0x3ccfe000}, +{0x3cd00000},{0x3cd02000},{0x3cd04000},{0x3cd06000},{0x3cd08000},{0x3cd0a000},{0x3cd0c000},{0x3cd0e000},{0x3cd10000},{0x3cd12000},{0x3cd14000},{0x3cd16000},{0x3cd18000},{0x3cd1a000},{0x3cd1c000},{0x3cd1e000},{0x3cd20000},{0x3cd22000},{0x3cd24000},{0x3cd26000},{0x3cd28000},{0x3cd2a000},{0x3cd2c000},{0x3cd2e000},{0x3cd30000},{0x3cd32000},{0x3cd34000},{0x3cd36000},{0x3cd38000},{0x3cd3a000},{0x3cd3c000},{0x3cd3e000}, +{0x3cd40000},{0x3cd42000},{0x3cd44000},{0x3cd46000},{0x3cd48000},{0x3cd4a000},{0x3cd4c000},{0x3cd4e000},{0x3cd50000},{0x3cd52000},{0x3cd54000},{0x3cd56000},{0x3cd58000},{0x3cd5a000},{0x3cd5c000},{0x3cd5e000},{0x3cd60000},{0x3cd62000},{0x3cd64000},{0x3cd66000},{0x3cd68000},{0x3cd6a000},{0x3cd6c000},{0x3cd6e000},{0x3cd70000},{0x3cd72000},{0x3cd74000},{0x3cd76000},{0x3cd78000},{0x3cd7a000},{0x3cd7c000},{0x3cd7e000}, +{0x3cd80000},{0x3cd82000},{0x3cd84000},{0x3cd86000},{0x3cd88000},{0x3cd8a000},{0x3cd8c000},{0x3cd8e000},{0x3cd90000},{0x3cd92000},{0x3cd94000},{0x3cd96000},{0x3cd98000},{0x3cd9a000},{0x3cd9c000},{0x3cd9e000},{0x3cda0000},{0x3cda2000},{0x3cda4000},{0x3cda6000},{0x3cda8000},{0x3cdaa000},{0x3cdac000},{0x3cdae000},{0x3cdb0000},{0x3cdb2000},{0x3cdb4000},{0x3cdb6000},{0x3cdb8000},{0x3cdba000},{0x3cdbc000},{0x3cdbe000}, +{0x3cdc0000},{0x3cdc2000},{0x3cdc4000},{0x3cdc6000},{0x3cdc8000},{0x3cdca000},{0x3cdcc000},{0x3cdce000},{0x3cdd0000},{0x3cdd2000},{0x3cdd4000},{0x3cdd6000},{0x3cdd8000},{0x3cdda000},{0x3cddc000},{0x3cdde000},{0x3cde0000},{0x3cde2000},{0x3cde4000},{0x3cde6000},{0x3cde8000},{0x3cdea000},{0x3cdec000},{0x3cdee000},{0x3cdf0000},{0x3cdf2000},{0x3cdf4000},{0x3cdf6000},{0x3cdf8000},{0x3cdfa000},{0x3cdfc000},{0x3cdfe000}, +{0x3ce00000},{0x3ce02000},{0x3ce04000},{0x3ce06000},{0x3ce08000},{0x3ce0a000},{0x3ce0c000},{0x3ce0e000},{0x3ce10000},{0x3ce12000},{0x3ce14000},{0x3ce16000},{0x3ce18000},{0x3ce1a000},{0x3ce1c000},{0x3ce1e000},{0x3ce20000},{0x3ce22000},{0x3ce24000},{0x3ce26000},{0x3ce28000},{0x3ce2a000},{0x3ce2c000},{0x3ce2e000},{0x3ce30000},{0x3ce32000},{0x3ce34000},{0x3ce36000},{0x3ce38000},{0x3ce3a000},{0x3ce3c000},{0x3ce3e000}, +{0x3ce40000},{0x3ce42000},{0x3ce44000},{0x3ce46000},{0x3ce48000},{0x3ce4a000},{0x3ce4c000},{0x3ce4e000},{0x3ce50000},{0x3ce52000},{0x3ce54000},{0x3ce56000},{0x3ce58000},{0x3ce5a000},{0x3ce5c000},{0x3ce5e000},{0x3ce60000},{0x3ce62000},{0x3ce64000},{0x3ce66000},{0x3ce68000},{0x3ce6a000},{0x3ce6c000},{0x3ce6e000},{0x3ce70000},{0x3ce72000},{0x3ce74000},{0x3ce76000},{0x3ce78000},{0x3ce7a000},{0x3ce7c000},{0x3ce7e000}, +{0x3ce80000},{0x3ce82000},{0x3ce84000},{0x3ce86000},{0x3ce88000},{0x3ce8a000},{0x3ce8c000},{0x3ce8e000},{0x3ce90000},{0x3ce92000},{0x3ce94000},{0x3ce96000},{0x3ce98000},{0x3ce9a000},{0x3ce9c000},{0x3ce9e000},{0x3cea0000},{0x3cea2000},{0x3cea4000},{0x3cea6000},{0x3cea8000},{0x3ceaa000},{0x3ceac000},{0x3ceae000},{0x3ceb0000},{0x3ceb2000},{0x3ceb4000},{0x3ceb6000},{0x3ceb8000},{0x3ceba000},{0x3cebc000},{0x3cebe000}, +{0x3cec0000},{0x3cec2000},{0x3cec4000},{0x3cec6000},{0x3cec8000},{0x3ceca000},{0x3cecc000},{0x3cece000},{0x3ced0000},{0x3ced2000},{0x3ced4000},{0x3ced6000},{0x3ced8000},{0x3ceda000},{0x3cedc000},{0x3cede000},{0x3cee0000},{0x3cee2000},{0x3cee4000},{0x3cee6000},{0x3cee8000},{0x3ceea000},{0x3ceec000},{0x3ceee000},{0x3cef0000},{0x3cef2000},{0x3cef4000},{0x3cef6000},{0x3cef8000},{0x3cefa000},{0x3cefc000},{0x3cefe000}, +{0x3cf00000},{0x3cf02000},{0x3cf04000},{0x3cf06000},{0x3cf08000},{0x3cf0a000},{0x3cf0c000},{0x3cf0e000},{0x3cf10000},{0x3cf12000},{0x3cf14000},{0x3cf16000},{0x3cf18000},{0x3cf1a000},{0x3cf1c000},{0x3cf1e000},{0x3cf20000},{0x3cf22000},{0x3cf24000},{0x3cf26000},{0x3cf28000},{0x3cf2a000},{0x3cf2c000},{0x3cf2e000},{0x3cf30000},{0x3cf32000},{0x3cf34000},{0x3cf36000},{0x3cf38000},{0x3cf3a000},{0x3cf3c000},{0x3cf3e000}, +{0x3cf40000},{0x3cf42000},{0x3cf44000},{0x3cf46000},{0x3cf48000},{0x3cf4a000},{0x3cf4c000},{0x3cf4e000},{0x3cf50000},{0x3cf52000},{0x3cf54000},{0x3cf56000},{0x3cf58000},{0x3cf5a000},{0x3cf5c000},{0x3cf5e000},{0x3cf60000},{0x3cf62000},{0x3cf64000},{0x3cf66000},{0x3cf68000},{0x3cf6a000},{0x3cf6c000},{0x3cf6e000},{0x3cf70000},{0x3cf72000},{0x3cf74000},{0x3cf76000},{0x3cf78000},{0x3cf7a000},{0x3cf7c000},{0x3cf7e000}, +{0x3cf80000},{0x3cf82000},{0x3cf84000},{0x3cf86000},{0x3cf88000},{0x3cf8a000},{0x3cf8c000},{0x3cf8e000},{0x3cf90000},{0x3cf92000},{0x3cf94000},{0x3cf96000},{0x3cf98000},{0x3cf9a000},{0x3cf9c000},{0x3cf9e000},{0x3cfa0000},{0x3cfa2000},{0x3cfa4000},{0x3cfa6000},{0x3cfa8000},{0x3cfaa000},{0x3cfac000},{0x3cfae000},{0x3cfb0000},{0x3cfb2000},{0x3cfb4000},{0x3cfb6000},{0x3cfb8000},{0x3cfba000},{0x3cfbc000},{0x3cfbe000}, +{0x3cfc0000},{0x3cfc2000},{0x3cfc4000},{0x3cfc6000},{0x3cfc8000},{0x3cfca000},{0x3cfcc000},{0x3cfce000},{0x3cfd0000},{0x3cfd2000},{0x3cfd4000},{0x3cfd6000},{0x3cfd8000},{0x3cfda000},{0x3cfdc000},{0x3cfde000},{0x3cfe0000},{0x3cfe2000},{0x3cfe4000},{0x3cfe6000},{0x3cfe8000},{0x3cfea000},{0x3cfec000},{0x3cfee000},{0x3cff0000},{0x3cff2000},{0x3cff4000},{0x3cff6000},{0x3cff8000},{0x3cffa000},{0x3cffc000},{0x3cffe000}, +{0x3d000000},{0x3d002000},{0x3d004000},{0x3d006000},{0x3d008000},{0x3d00a000},{0x3d00c000},{0x3d00e000},{0x3d010000},{0x3d012000},{0x3d014000},{0x3d016000},{0x3d018000},{0x3d01a000},{0x3d01c000},{0x3d01e000},{0x3d020000},{0x3d022000},{0x3d024000},{0x3d026000},{0x3d028000},{0x3d02a000},{0x3d02c000},{0x3d02e000},{0x3d030000},{0x3d032000},{0x3d034000},{0x3d036000},{0x3d038000},{0x3d03a000},{0x3d03c000},{0x3d03e000}, +{0x3d040000},{0x3d042000},{0x3d044000},{0x3d046000},{0x3d048000},{0x3d04a000},{0x3d04c000},{0x3d04e000},{0x3d050000},{0x3d052000},{0x3d054000},{0x3d056000},{0x3d058000},{0x3d05a000},{0x3d05c000},{0x3d05e000},{0x3d060000},{0x3d062000},{0x3d064000},{0x3d066000},{0x3d068000},{0x3d06a000},{0x3d06c000},{0x3d06e000},{0x3d070000},{0x3d072000},{0x3d074000},{0x3d076000},{0x3d078000},{0x3d07a000},{0x3d07c000},{0x3d07e000}, +{0x3d080000},{0x3d082000},{0x3d084000},{0x3d086000},{0x3d088000},{0x3d08a000},{0x3d08c000},{0x3d08e000},{0x3d090000},{0x3d092000},{0x3d094000},{0x3d096000},{0x3d098000},{0x3d09a000},{0x3d09c000},{0x3d09e000},{0x3d0a0000},{0x3d0a2000},{0x3d0a4000},{0x3d0a6000},{0x3d0a8000},{0x3d0aa000},{0x3d0ac000},{0x3d0ae000},{0x3d0b0000},{0x3d0b2000},{0x3d0b4000},{0x3d0b6000},{0x3d0b8000},{0x3d0ba000},{0x3d0bc000},{0x3d0be000}, +{0x3d0c0000},{0x3d0c2000},{0x3d0c4000},{0x3d0c6000},{0x3d0c8000},{0x3d0ca000},{0x3d0cc000},{0x3d0ce000},{0x3d0d0000},{0x3d0d2000},{0x3d0d4000},{0x3d0d6000},{0x3d0d8000},{0x3d0da000},{0x3d0dc000},{0x3d0de000},{0x3d0e0000},{0x3d0e2000},{0x3d0e4000},{0x3d0e6000},{0x3d0e8000},{0x3d0ea000},{0x3d0ec000},{0x3d0ee000},{0x3d0f0000},{0x3d0f2000},{0x3d0f4000},{0x3d0f6000},{0x3d0f8000},{0x3d0fa000},{0x3d0fc000},{0x3d0fe000}, +{0x3d100000},{0x3d102000},{0x3d104000},{0x3d106000},{0x3d108000},{0x3d10a000},{0x3d10c000},{0x3d10e000},{0x3d110000},{0x3d112000},{0x3d114000},{0x3d116000},{0x3d118000},{0x3d11a000},{0x3d11c000},{0x3d11e000},{0x3d120000},{0x3d122000},{0x3d124000},{0x3d126000},{0x3d128000},{0x3d12a000},{0x3d12c000},{0x3d12e000},{0x3d130000},{0x3d132000},{0x3d134000},{0x3d136000},{0x3d138000},{0x3d13a000},{0x3d13c000},{0x3d13e000}, +{0x3d140000},{0x3d142000},{0x3d144000},{0x3d146000},{0x3d148000},{0x3d14a000},{0x3d14c000},{0x3d14e000},{0x3d150000},{0x3d152000},{0x3d154000},{0x3d156000},{0x3d158000},{0x3d15a000},{0x3d15c000},{0x3d15e000},{0x3d160000},{0x3d162000},{0x3d164000},{0x3d166000},{0x3d168000},{0x3d16a000},{0x3d16c000},{0x3d16e000},{0x3d170000},{0x3d172000},{0x3d174000},{0x3d176000},{0x3d178000},{0x3d17a000},{0x3d17c000},{0x3d17e000}, +{0x3d180000},{0x3d182000},{0x3d184000},{0x3d186000},{0x3d188000},{0x3d18a000},{0x3d18c000},{0x3d18e000},{0x3d190000},{0x3d192000},{0x3d194000},{0x3d196000},{0x3d198000},{0x3d19a000},{0x3d19c000},{0x3d19e000},{0x3d1a0000},{0x3d1a2000},{0x3d1a4000},{0x3d1a6000},{0x3d1a8000},{0x3d1aa000},{0x3d1ac000},{0x3d1ae000},{0x3d1b0000},{0x3d1b2000},{0x3d1b4000},{0x3d1b6000},{0x3d1b8000},{0x3d1ba000},{0x3d1bc000},{0x3d1be000}, +{0x3d1c0000},{0x3d1c2000},{0x3d1c4000},{0x3d1c6000},{0x3d1c8000},{0x3d1ca000},{0x3d1cc000},{0x3d1ce000},{0x3d1d0000},{0x3d1d2000},{0x3d1d4000},{0x3d1d6000},{0x3d1d8000},{0x3d1da000},{0x3d1dc000},{0x3d1de000},{0x3d1e0000},{0x3d1e2000},{0x3d1e4000},{0x3d1e6000},{0x3d1e8000},{0x3d1ea000},{0x3d1ec000},{0x3d1ee000},{0x3d1f0000},{0x3d1f2000},{0x3d1f4000},{0x3d1f6000},{0x3d1f8000},{0x3d1fa000},{0x3d1fc000},{0x3d1fe000}, +{0x3d200000},{0x3d202000},{0x3d204000},{0x3d206000},{0x3d208000},{0x3d20a000},{0x3d20c000},{0x3d20e000},{0x3d210000},{0x3d212000},{0x3d214000},{0x3d216000},{0x3d218000},{0x3d21a000},{0x3d21c000},{0x3d21e000},{0x3d220000},{0x3d222000},{0x3d224000},{0x3d226000},{0x3d228000},{0x3d22a000},{0x3d22c000},{0x3d22e000},{0x3d230000},{0x3d232000},{0x3d234000},{0x3d236000},{0x3d238000},{0x3d23a000},{0x3d23c000},{0x3d23e000}, +{0x3d240000},{0x3d242000},{0x3d244000},{0x3d246000},{0x3d248000},{0x3d24a000},{0x3d24c000},{0x3d24e000},{0x3d250000},{0x3d252000},{0x3d254000},{0x3d256000},{0x3d258000},{0x3d25a000},{0x3d25c000},{0x3d25e000},{0x3d260000},{0x3d262000},{0x3d264000},{0x3d266000},{0x3d268000},{0x3d26a000},{0x3d26c000},{0x3d26e000},{0x3d270000},{0x3d272000},{0x3d274000},{0x3d276000},{0x3d278000},{0x3d27a000},{0x3d27c000},{0x3d27e000}, +{0x3d280000},{0x3d282000},{0x3d284000},{0x3d286000},{0x3d288000},{0x3d28a000},{0x3d28c000},{0x3d28e000},{0x3d290000},{0x3d292000},{0x3d294000},{0x3d296000},{0x3d298000},{0x3d29a000},{0x3d29c000},{0x3d29e000},{0x3d2a0000},{0x3d2a2000},{0x3d2a4000},{0x3d2a6000},{0x3d2a8000},{0x3d2aa000},{0x3d2ac000},{0x3d2ae000},{0x3d2b0000},{0x3d2b2000},{0x3d2b4000},{0x3d2b6000},{0x3d2b8000},{0x3d2ba000},{0x3d2bc000},{0x3d2be000}, +{0x3d2c0000},{0x3d2c2000},{0x3d2c4000},{0x3d2c6000},{0x3d2c8000},{0x3d2ca000},{0x3d2cc000},{0x3d2ce000},{0x3d2d0000},{0x3d2d2000},{0x3d2d4000},{0x3d2d6000},{0x3d2d8000},{0x3d2da000},{0x3d2dc000},{0x3d2de000},{0x3d2e0000},{0x3d2e2000},{0x3d2e4000},{0x3d2e6000},{0x3d2e8000},{0x3d2ea000},{0x3d2ec000},{0x3d2ee000},{0x3d2f0000},{0x3d2f2000},{0x3d2f4000},{0x3d2f6000},{0x3d2f8000},{0x3d2fa000},{0x3d2fc000},{0x3d2fe000}, +{0x3d300000},{0x3d302000},{0x3d304000},{0x3d306000},{0x3d308000},{0x3d30a000},{0x3d30c000},{0x3d30e000},{0x3d310000},{0x3d312000},{0x3d314000},{0x3d316000},{0x3d318000},{0x3d31a000},{0x3d31c000},{0x3d31e000},{0x3d320000},{0x3d322000},{0x3d324000},{0x3d326000},{0x3d328000},{0x3d32a000},{0x3d32c000},{0x3d32e000},{0x3d330000},{0x3d332000},{0x3d334000},{0x3d336000},{0x3d338000},{0x3d33a000},{0x3d33c000},{0x3d33e000}, +{0x3d340000},{0x3d342000},{0x3d344000},{0x3d346000},{0x3d348000},{0x3d34a000},{0x3d34c000},{0x3d34e000},{0x3d350000},{0x3d352000},{0x3d354000},{0x3d356000},{0x3d358000},{0x3d35a000},{0x3d35c000},{0x3d35e000},{0x3d360000},{0x3d362000},{0x3d364000},{0x3d366000},{0x3d368000},{0x3d36a000},{0x3d36c000},{0x3d36e000},{0x3d370000},{0x3d372000},{0x3d374000},{0x3d376000},{0x3d378000},{0x3d37a000},{0x3d37c000},{0x3d37e000}, +{0x3d380000},{0x3d382000},{0x3d384000},{0x3d386000},{0x3d388000},{0x3d38a000},{0x3d38c000},{0x3d38e000},{0x3d390000},{0x3d392000},{0x3d394000},{0x3d396000},{0x3d398000},{0x3d39a000},{0x3d39c000},{0x3d39e000},{0x3d3a0000},{0x3d3a2000},{0x3d3a4000},{0x3d3a6000},{0x3d3a8000},{0x3d3aa000},{0x3d3ac000},{0x3d3ae000},{0x3d3b0000},{0x3d3b2000},{0x3d3b4000},{0x3d3b6000},{0x3d3b8000},{0x3d3ba000},{0x3d3bc000},{0x3d3be000}, +{0x3d3c0000},{0x3d3c2000},{0x3d3c4000},{0x3d3c6000},{0x3d3c8000},{0x3d3ca000},{0x3d3cc000},{0x3d3ce000},{0x3d3d0000},{0x3d3d2000},{0x3d3d4000},{0x3d3d6000},{0x3d3d8000},{0x3d3da000},{0x3d3dc000},{0x3d3de000},{0x3d3e0000},{0x3d3e2000},{0x3d3e4000},{0x3d3e6000},{0x3d3e8000},{0x3d3ea000},{0x3d3ec000},{0x3d3ee000},{0x3d3f0000},{0x3d3f2000},{0x3d3f4000},{0x3d3f6000},{0x3d3f8000},{0x3d3fa000},{0x3d3fc000},{0x3d3fe000}, +{0x3d400000},{0x3d402000},{0x3d404000},{0x3d406000},{0x3d408000},{0x3d40a000},{0x3d40c000},{0x3d40e000},{0x3d410000},{0x3d412000},{0x3d414000},{0x3d416000},{0x3d418000},{0x3d41a000},{0x3d41c000},{0x3d41e000},{0x3d420000},{0x3d422000},{0x3d424000},{0x3d426000},{0x3d428000},{0x3d42a000},{0x3d42c000},{0x3d42e000},{0x3d430000},{0x3d432000},{0x3d434000},{0x3d436000},{0x3d438000},{0x3d43a000},{0x3d43c000},{0x3d43e000}, +{0x3d440000},{0x3d442000},{0x3d444000},{0x3d446000},{0x3d448000},{0x3d44a000},{0x3d44c000},{0x3d44e000},{0x3d450000},{0x3d452000},{0x3d454000},{0x3d456000},{0x3d458000},{0x3d45a000},{0x3d45c000},{0x3d45e000},{0x3d460000},{0x3d462000},{0x3d464000},{0x3d466000},{0x3d468000},{0x3d46a000},{0x3d46c000},{0x3d46e000},{0x3d470000},{0x3d472000},{0x3d474000},{0x3d476000},{0x3d478000},{0x3d47a000},{0x3d47c000},{0x3d47e000}, +{0x3d480000},{0x3d482000},{0x3d484000},{0x3d486000},{0x3d488000},{0x3d48a000},{0x3d48c000},{0x3d48e000},{0x3d490000},{0x3d492000},{0x3d494000},{0x3d496000},{0x3d498000},{0x3d49a000},{0x3d49c000},{0x3d49e000},{0x3d4a0000},{0x3d4a2000},{0x3d4a4000},{0x3d4a6000},{0x3d4a8000},{0x3d4aa000},{0x3d4ac000},{0x3d4ae000},{0x3d4b0000},{0x3d4b2000},{0x3d4b4000},{0x3d4b6000},{0x3d4b8000},{0x3d4ba000},{0x3d4bc000},{0x3d4be000}, +{0x3d4c0000},{0x3d4c2000},{0x3d4c4000},{0x3d4c6000},{0x3d4c8000},{0x3d4ca000},{0x3d4cc000},{0x3d4ce000},{0x3d4d0000},{0x3d4d2000},{0x3d4d4000},{0x3d4d6000},{0x3d4d8000},{0x3d4da000},{0x3d4dc000},{0x3d4de000},{0x3d4e0000},{0x3d4e2000},{0x3d4e4000},{0x3d4e6000},{0x3d4e8000},{0x3d4ea000},{0x3d4ec000},{0x3d4ee000},{0x3d4f0000},{0x3d4f2000},{0x3d4f4000},{0x3d4f6000},{0x3d4f8000},{0x3d4fa000},{0x3d4fc000},{0x3d4fe000}, +{0x3d500000},{0x3d502000},{0x3d504000},{0x3d506000},{0x3d508000},{0x3d50a000},{0x3d50c000},{0x3d50e000},{0x3d510000},{0x3d512000},{0x3d514000},{0x3d516000},{0x3d518000},{0x3d51a000},{0x3d51c000},{0x3d51e000},{0x3d520000},{0x3d522000},{0x3d524000},{0x3d526000},{0x3d528000},{0x3d52a000},{0x3d52c000},{0x3d52e000},{0x3d530000},{0x3d532000},{0x3d534000},{0x3d536000},{0x3d538000},{0x3d53a000},{0x3d53c000},{0x3d53e000}, +{0x3d540000},{0x3d542000},{0x3d544000},{0x3d546000},{0x3d548000},{0x3d54a000},{0x3d54c000},{0x3d54e000},{0x3d550000},{0x3d552000},{0x3d554000},{0x3d556000},{0x3d558000},{0x3d55a000},{0x3d55c000},{0x3d55e000},{0x3d560000},{0x3d562000},{0x3d564000},{0x3d566000},{0x3d568000},{0x3d56a000},{0x3d56c000},{0x3d56e000},{0x3d570000},{0x3d572000},{0x3d574000},{0x3d576000},{0x3d578000},{0x3d57a000},{0x3d57c000},{0x3d57e000}, +{0x3d580000},{0x3d582000},{0x3d584000},{0x3d586000},{0x3d588000},{0x3d58a000},{0x3d58c000},{0x3d58e000},{0x3d590000},{0x3d592000},{0x3d594000},{0x3d596000},{0x3d598000},{0x3d59a000},{0x3d59c000},{0x3d59e000},{0x3d5a0000},{0x3d5a2000},{0x3d5a4000},{0x3d5a6000},{0x3d5a8000},{0x3d5aa000},{0x3d5ac000},{0x3d5ae000},{0x3d5b0000},{0x3d5b2000},{0x3d5b4000},{0x3d5b6000},{0x3d5b8000},{0x3d5ba000},{0x3d5bc000},{0x3d5be000}, +{0x3d5c0000},{0x3d5c2000},{0x3d5c4000},{0x3d5c6000},{0x3d5c8000},{0x3d5ca000},{0x3d5cc000},{0x3d5ce000},{0x3d5d0000},{0x3d5d2000},{0x3d5d4000},{0x3d5d6000},{0x3d5d8000},{0x3d5da000},{0x3d5dc000},{0x3d5de000},{0x3d5e0000},{0x3d5e2000},{0x3d5e4000},{0x3d5e6000},{0x3d5e8000},{0x3d5ea000},{0x3d5ec000},{0x3d5ee000},{0x3d5f0000},{0x3d5f2000},{0x3d5f4000},{0x3d5f6000},{0x3d5f8000},{0x3d5fa000},{0x3d5fc000},{0x3d5fe000}, +{0x3d600000},{0x3d602000},{0x3d604000},{0x3d606000},{0x3d608000},{0x3d60a000},{0x3d60c000},{0x3d60e000},{0x3d610000},{0x3d612000},{0x3d614000},{0x3d616000},{0x3d618000},{0x3d61a000},{0x3d61c000},{0x3d61e000},{0x3d620000},{0x3d622000},{0x3d624000},{0x3d626000},{0x3d628000},{0x3d62a000},{0x3d62c000},{0x3d62e000},{0x3d630000},{0x3d632000},{0x3d634000},{0x3d636000},{0x3d638000},{0x3d63a000},{0x3d63c000},{0x3d63e000}, +{0x3d640000},{0x3d642000},{0x3d644000},{0x3d646000},{0x3d648000},{0x3d64a000},{0x3d64c000},{0x3d64e000},{0x3d650000},{0x3d652000},{0x3d654000},{0x3d656000},{0x3d658000},{0x3d65a000},{0x3d65c000},{0x3d65e000},{0x3d660000},{0x3d662000},{0x3d664000},{0x3d666000},{0x3d668000},{0x3d66a000},{0x3d66c000},{0x3d66e000},{0x3d670000},{0x3d672000},{0x3d674000},{0x3d676000},{0x3d678000},{0x3d67a000},{0x3d67c000},{0x3d67e000}, +{0x3d680000},{0x3d682000},{0x3d684000},{0x3d686000},{0x3d688000},{0x3d68a000},{0x3d68c000},{0x3d68e000},{0x3d690000},{0x3d692000},{0x3d694000},{0x3d696000},{0x3d698000},{0x3d69a000},{0x3d69c000},{0x3d69e000},{0x3d6a0000},{0x3d6a2000},{0x3d6a4000},{0x3d6a6000},{0x3d6a8000},{0x3d6aa000},{0x3d6ac000},{0x3d6ae000},{0x3d6b0000},{0x3d6b2000},{0x3d6b4000},{0x3d6b6000},{0x3d6b8000},{0x3d6ba000},{0x3d6bc000},{0x3d6be000}, +{0x3d6c0000},{0x3d6c2000},{0x3d6c4000},{0x3d6c6000},{0x3d6c8000},{0x3d6ca000},{0x3d6cc000},{0x3d6ce000},{0x3d6d0000},{0x3d6d2000},{0x3d6d4000},{0x3d6d6000},{0x3d6d8000},{0x3d6da000},{0x3d6dc000},{0x3d6de000},{0x3d6e0000},{0x3d6e2000},{0x3d6e4000},{0x3d6e6000},{0x3d6e8000},{0x3d6ea000},{0x3d6ec000},{0x3d6ee000},{0x3d6f0000},{0x3d6f2000},{0x3d6f4000},{0x3d6f6000},{0x3d6f8000},{0x3d6fa000},{0x3d6fc000},{0x3d6fe000}, +{0x3d700000},{0x3d702000},{0x3d704000},{0x3d706000},{0x3d708000},{0x3d70a000},{0x3d70c000},{0x3d70e000},{0x3d710000},{0x3d712000},{0x3d714000},{0x3d716000},{0x3d718000},{0x3d71a000},{0x3d71c000},{0x3d71e000},{0x3d720000},{0x3d722000},{0x3d724000},{0x3d726000},{0x3d728000},{0x3d72a000},{0x3d72c000},{0x3d72e000},{0x3d730000},{0x3d732000},{0x3d734000},{0x3d736000},{0x3d738000},{0x3d73a000},{0x3d73c000},{0x3d73e000}, +{0x3d740000},{0x3d742000},{0x3d744000},{0x3d746000},{0x3d748000},{0x3d74a000},{0x3d74c000},{0x3d74e000},{0x3d750000},{0x3d752000},{0x3d754000},{0x3d756000},{0x3d758000},{0x3d75a000},{0x3d75c000},{0x3d75e000},{0x3d760000},{0x3d762000},{0x3d764000},{0x3d766000},{0x3d768000},{0x3d76a000},{0x3d76c000},{0x3d76e000},{0x3d770000},{0x3d772000},{0x3d774000},{0x3d776000},{0x3d778000},{0x3d77a000},{0x3d77c000},{0x3d77e000}, +{0x3d780000},{0x3d782000},{0x3d784000},{0x3d786000},{0x3d788000},{0x3d78a000},{0x3d78c000},{0x3d78e000},{0x3d790000},{0x3d792000},{0x3d794000},{0x3d796000},{0x3d798000},{0x3d79a000},{0x3d79c000},{0x3d79e000},{0x3d7a0000},{0x3d7a2000},{0x3d7a4000},{0x3d7a6000},{0x3d7a8000},{0x3d7aa000},{0x3d7ac000},{0x3d7ae000},{0x3d7b0000},{0x3d7b2000},{0x3d7b4000},{0x3d7b6000},{0x3d7b8000},{0x3d7ba000},{0x3d7bc000},{0x3d7be000}, +{0x3d7c0000},{0x3d7c2000},{0x3d7c4000},{0x3d7c6000},{0x3d7c8000},{0x3d7ca000},{0x3d7cc000},{0x3d7ce000},{0x3d7d0000},{0x3d7d2000},{0x3d7d4000},{0x3d7d6000},{0x3d7d8000},{0x3d7da000},{0x3d7dc000},{0x3d7de000},{0x3d7e0000},{0x3d7e2000},{0x3d7e4000},{0x3d7e6000},{0x3d7e8000},{0x3d7ea000},{0x3d7ec000},{0x3d7ee000},{0x3d7f0000},{0x3d7f2000},{0x3d7f4000},{0x3d7f6000},{0x3d7f8000},{0x3d7fa000},{0x3d7fc000},{0x3d7fe000}, +{0x3d800000},{0x3d802000},{0x3d804000},{0x3d806000},{0x3d808000},{0x3d80a000},{0x3d80c000},{0x3d80e000},{0x3d810000},{0x3d812000},{0x3d814000},{0x3d816000},{0x3d818000},{0x3d81a000},{0x3d81c000},{0x3d81e000},{0x3d820000},{0x3d822000},{0x3d824000},{0x3d826000},{0x3d828000},{0x3d82a000},{0x3d82c000},{0x3d82e000},{0x3d830000},{0x3d832000},{0x3d834000},{0x3d836000},{0x3d838000},{0x3d83a000},{0x3d83c000},{0x3d83e000}, +{0x3d840000},{0x3d842000},{0x3d844000},{0x3d846000},{0x3d848000},{0x3d84a000},{0x3d84c000},{0x3d84e000},{0x3d850000},{0x3d852000},{0x3d854000},{0x3d856000},{0x3d858000},{0x3d85a000},{0x3d85c000},{0x3d85e000},{0x3d860000},{0x3d862000},{0x3d864000},{0x3d866000},{0x3d868000},{0x3d86a000},{0x3d86c000},{0x3d86e000},{0x3d870000},{0x3d872000},{0x3d874000},{0x3d876000},{0x3d878000},{0x3d87a000},{0x3d87c000},{0x3d87e000}, +{0x3d880000},{0x3d882000},{0x3d884000},{0x3d886000},{0x3d888000},{0x3d88a000},{0x3d88c000},{0x3d88e000},{0x3d890000},{0x3d892000},{0x3d894000},{0x3d896000},{0x3d898000},{0x3d89a000},{0x3d89c000},{0x3d89e000},{0x3d8a0000},{0x3d8a2000},{0x3d8a4000},{0x3d8a6000},{0x3d8a8000},{0x3d8aa000},{0x3d8ac000},{0x3d8ae000},{0x3d8b0000},{0x3d8b2000},{0x3d8b4000},{0x3d8b6000},{0x3d8b8000},{0x3d8ba000},{0x3d8bc000},{0x3d8be000}, +{0x3d8c0000},{0x3d8c2000},{0x3d8c4000},{0x3d8c6000},{0x3d8c8000},{0x3d8ca000},{0x3d8cc000},{0x3d8ce000},{0x3d8d0000},{0x3d8d2000},{0x3d8d4000},{0x3d8d6000},{0x3d8d8000},{0x3d8da000},{0x3d8dc000},{0x3d8de000},{0x3d8e0000},{0x3d8e2000},{0x3d8e4000},{0x3d8e6000},{0x3d8e8000},{0x3d8ea000},{0x3d8ec000},{0x3d8ee000},{0x3d8f0000},{0x3d8f2000},{0x3d8f4000},{0x3d8f6000},{0x3d8f8000},{0x3d8fa000},{0x3d8fc000},{0x3d8fe000}, +{0x3d900000},{0x3d902000},{0x3d904000},{0x3d906000},{0x3d908000},{0x3d90a000},{0x3d90c000},{0x3d90e000},{0x3d910000},{0x3d912000},{0x3d914000},{0x3d916000},{0x3d918000},{0x3d91a000},{0x3d91c000},{0x3d91e000},{0x3d920000},{0x3d922000},{0x3d924000},{0x3d926000},{0x3d928000},{0x3d92a000},{0x3d92c000},{0x3d92e000},{0x3d930000},{0x3d932000},{0x3d934000},{0x3d936000},{0x3d938000},{0x3d93a000},{0x3d93c000},{0x3d93e000}, +{0x3d940000},{0x3d942000},{0x3d944000},{0x3d946000},{0x3d948000},{0x3d94a000},{0x3d94c000},{0x3d94e000},{0x3d950000},{0x3d952000},{0x3d954000},{0x3d956000},{0x3d958000},{0x3d95a000},{0x3d95c000},{0x3d95e000},{0x3d960000},{0x3d962000},{0x3d964000},{0x3d966000},{0x3d968000},{0x3d96a000},{0x3d96c000},{0x3d96e000},{0x3d970000},{0x3d972000},{0x3d974000},{0x3d976000},{0x3d978000},{0x3d97a000},{0x3d97c000},{0x3d97e000}, +{0x3d980000},{0x3d982000},{0x3d984000},{0x3d986000},{0x3d988000},{0x3d98a000},{0x3d98c000},{0x3d98e000},{0x3d990000},{0x3d992000},{0x3d994000},{0x3d996000},{0x3d998000},{0x3d99a000},{0x3d99c000},{0x3d99e000},{0x3d9a0000},{0x3d9a2000},{0x3d9a4000},{0x3d9a6000},{0x3d9a8000},{0x3d9aa000},{0x3d9ac000},{0x3d9ae000},{0x3d9b0000},{0x3d9b2000},{0x3d9b4000},{0x3d9b6000},{0x3d9b8000},{0x3d9ba000},{0x3d9bc000},{0x3d9be000}, +{0x3d9c0000},{0x3d9c2000},{0x3d9c4000},{0x3d9c6000},{0x3d9c8000},{0x3d9ca000},{0x3d9cc000},{0x3d9ce000},{0x3d9d0000},{0x3d9d2000},{0x3d9d4000},{0x3d9d6000},{0x3d9d8000},{0x3d9da000},{0x3d9dc000},{0x3d9de000},{0x3d9e0000},{0x3d9e2000},{0x3d9e4000},{0x3d9e6000},{0x3d9e8000},{0x3d9ea000},{0x3d9ec000},{0x3d9ee000},{0x3d9f0000},{0x3d9f2000},{0x3d9f4000},{0x3d9f6000},{0x3d9f8000},{0x3d9fa000},{0x3d9fc000},{0x3d9fe000}, +{0x3da00000},{0x3da02000},{0x3da04000},{0x3da06000},{0x3da08000},{0x3da0a000},{0x3da0c000},{0x3da0e000},{0x3da10000},{0x3da12000},{0x3da14000},{0x3da16000},{0x3da18000},{0x3da1a000},{0x3da1c000},{0x3da1e000},{0x3da20000},{0x3da22000},{0x3da24000},{0x3da26000},{0x3da28000},{0x3da2a000},{0x3da2c000},{0x3da2e000},{0x3da30000},{0x3da32000},{0x3da34000},{0x3da36000},{0x3da38000},{0x3da3a000},{0x3da3c000},{0x3da3e000}, +{0x3da40000},{0x3da42000},{0x3da44000},{0x3da46000},{0x3da48000},{0x3da4a000},{0x3da4c000},{0x3da4e000},{0x3da50000},{0x3da52000},{0x3da54000},{0x3da56000},{0x3da58000},{0x3da5a000},{0x3da5c000},{0x3da5e000},{0x3da60000},{0x3da62000},{0x3da64000},{0x3da66000},{0x3da68000},{0x3da6a000},{0x3da6c000},{0x3da6e000},{0x3da70000},{0x3da72000},{0x3da74000},{0x3da76000},{0x3da78000},{0x3da7a000},{0x3da7c000},{0x3da7e000}, +{0x3da80000},{0x3da82000},{0x3da84000},{0x3da86000},{0x3da88000},{0x3da8a000},{0x3da8c000},{0x3da8e000},{0x3da90000},{0x3da92000},{0x3da94000},{0x3da96000},{0x3da98000},{0x3da9a000},{0x3da9c000},{0x3da9e000},{0x3daa0000},{0x3daa2000},{0x3daa4000},{0x3daa6000},{0x3daa8000},{0x3daaa000},{0x3daac000},{0x3daae000},{0x3dab0000},{0x3dab2000},{0x3dab4000},{0x3dab6000},{0x3dab8000},{0x3daba000},{0x3dabc000},{0x3dabe000}, +{0x3dac0000},{0x3dac2000},{0x3dac4000},{0x3dac6000},{0x3dac8000},{0x3daca000},{0x3dacc000},{0x3dace000},{0x3dad0000},{0x3dad2000},{0x3dad4000},{0x3dad6000},{0x3dad8000},{0x3dada000},{0x3dadc000},{0x3dade000},{0x3dae0000},{0x3dae2000},{0x3dae4000},{0x3dae6000},{0x3dae8000},{0x3daea000},{0x3daec000},{0x3daee000},{0x3daf0000},{0x3daf2000},{0x3daf4000},{0x3daf6000},{0x3daf8000},{0x3dafa000},{0x3dafc000},{0x3dafe000}, +{0x3db00000},{0x3db02000},{0x3db04000},{0x3db06000},{0x3db08000},{0x3db0a000},{0x3db0c000},{0x3db0e000},{0x3db10000},{0x3db12000},{0x3db14000},{0x3db16000},{0x3db18000},{0x3db1a000},{0x3db1c000},{0x3db1e000},{0x3db20000},{0x3db22000},{0x3db24000},{0x3db26000},{0x3db28000},{0x3db2a000},{0x3db2c000},{0x3db2e000},{0x3db30000},{0x3db32000},{0x3db34000},{0x3db36000},{0x3db38000},{0x3db3a000},{0x3db3c000},{0x3db3e000}, +{0x3db40000},{0x3db42000},{0x3db44000},{0x3db46000},{0x3db48000},{0x3db4a000},{0x3db4c000},{0x3db4e000},{0x3db50000},{0x3db52000},{0x3db54000},{0x3db56000},{0x3db58000},{0x3db5a000},{0x3db5c000},{0x3db5e000},{0x3db60000},{0x3db62000},{0x3db64000},{0x3db66000},{0x3db68000},{0x3db6a000},{0x3db6c000},{0x3db6e000},{0x3db70000},{0x3db72000},{0x3db74000},{0x3db76000},{0x3db78000},{0x3db7a000},{0x3db7c000},{0x3db7e000}, +{0x3db80000},{0x3db82000},{0x3db84000},{0x3db86000},{0x3db88000},{0x3db8a000},{0x3db8c000},{0x3db8e000},{0x3db90000},{0x3db92000},{0x3db94000},{0x3db96000},{0x3db98000},{0x3db9a000},{0x3db9c000},{0x3db9e000},{0x3dba0000},{0x3dba2000},{0x3dba4000},{0x3dba6000},{0x3dba8000},{0x3dbaa000},{0x3dbac000},{0x3dbae000},{0x3dbb0000},{0x3dbb2000},{0x3dbb4000},{0x3dbb6000},{0x3dbb8000},{0x3dbba000},{0x3dbbc000},{0x3dbbe000}, +{0x3dbc0000},{0x3dbc2000},{0x3dbc4000},{0x3dbc6000},{0x3dbc8000},{0x3dbca000},{0x3dbcc000},{0x3dbce000},{0x3dbd0000},{0x3dbd2000},{0x3dbd4000},{0x3dbd6000},{0x3dbd8000},{0x3dbda000},{0x3dbdc000},{0x3dbde000},{0x3dbe0000},{0x3dbe2000},{0x3dbe4000},{0x3dbe6000},{0x3dbe8000},{0x3dbea000},{0x3dbec000},{0x3dbee000},{0x3dbf0000},{0x3dbf2000},{0x3dbf4000},{0x3dbf6000},{0x3dbf8000},{0x3dbfa000},{0x3dbfc000},{0x3dbfe000}, +{0x3dc00000},{0x3dc02000},{0x3dc04000},{0x3dc06000},{0x3dc08000},{0x3dc0a000},{0x3dc0c000},{0x3dc0e000},{0x3dc10000},{0x3dc12000},{0x3dc14000},{0x3dc16000},{0x3dc18000},{0x3dc1a000},{0x3dc1c000},{0x3dc1e000},{0x3dc20000},{0x3dc22000},{0x3dc24000},{0x3dc26000},{0x3dc28000},{0x3dc2a000},{0x3dc2c000},{0x3dc2e000},{0x3dc30000},{0x3dc32000},{0x3dc34000},{0x3dc36000},{0x3dc38000},{0x3dc3a000},{0x3dc3c000},{0x3dc3e000}, +{0x3dc40000},{0x3dc42000},{0x3dc44000},{0x3dc46000},{0x3dc48000},{0x3dc4a000},{0x3dc4c000},{0x3dc4e000},{0x3dc50000},{0x3dc52000},{0x3dc54000},{0x3dc56000},{0x3dc58000},{0x3dc5a000},{0x3dc5c000},{0x3dc5e000},{0x3dc60000},{0x3dc62000},{0x3dc64000},{0x3dc66000},{0x3dc68000},{0x3dc6a000},{0x3dc6c000},{0x3dc6e000},{0x3dc70000},{0x3dc72000},{0x3dc74000},{0x3dc76000},{0x3dc78000},{0x3dc7a000},{0x3dc7c000},{0x3dc7e000}, +{0x3dc80000},{0x3dc82000},{0x3dc84000},{0x3dc86000},{0x3dc88000},{0x3dc8a000},{0x3dc8c000},{0x3dc8e000},{0x3dc90000},{0x3dc92000},{0x3dc94000},{0x3dc96000},{0x3dc98000},{0x3dc9a000},{0x3dc9c000},{0x3dc9e000},{0x3dca0000},{0x3dca2000},{0x3dca4000},{0x3dca6000},{0x3dca8000},{0x3dcaa000},{0x3dcac000},{0x3dcae000},{0x3dcb0000},{0x3dcb2000},{0x3dcb4000},{0x3dcb6000},{0x3dcb8000},{0x3dcba000},{0x3dcbc000},{0x3dcbe000}, +{0x3dcc0000},{0x3dcc2000},{0x3dcc4000},{0x3dcc6000},{0x3dcc8000},{0x3dcca000},{0x3dccc000},{0x3dcce000},{0x3dcd0000},{0x3dcd2000},{0x3dcd4000},{0x3dcd6000},{0x3dcd8000},{0x3dcda000},{0x3dcdc000},{0x3dcde000},{0x3dce0000},{0x3dce2000},{0x3dce4000},{0x3dce6000},{0x3dce8000},{0x3dcea000},{0x3dcec000},{0x3dcee000},{0x3dcf0000},{0x3dcf2000},{0x3dcf4000},{0x3dcf6000},{0x3dcf8000},{0x3dcfa000},{0x3dcfc000},{0x3dcfe000}, +{0x3dd00000},{0x3dd02000},{0x3dd04000},{0x3dd06000},{0x3dd08000},{0x3dd0a000},{0x3dd0c000},{0x3dd0e000},{0x3dd10000},{0x3dd12000},{0x3dd14000},{0x3dd16000},{0x3dd18000},{0x3dd1a000},{0x3dd1c000},{0x3dd1e000},{0x3dd20000},{0x3dd22000},{0x3dd24000},{0x3dd26000},{0x3dd28000},{0x3dd2a000},{0x3dd2c000},{0x3dd2e000},{0x3dd30000},{0x3dd32000},{0x3dd34000},{0x3dd36000},{0x3dd38000},{0x3dd3a000},{0x3dd3c000},{0x3dd3e000}, +{0x3dd40000},{0x3dd42000},{0x3dd44000},{0x3dd46000},{0x3dd48000},{0x3dd4a000},{0x3dd4c000},{0x3dd4e000},{0x3dd50000},{0x3dd52000},{0x3dd54000},{0x3dd56000},{0x3dd58000},{0x3dd5a000},{0x3dd5c000},{0x3dd5e000},{0x3dd60000},{0x3dd62000},{0x3dd64000},{0x3dd66000},{0x3dd68000},{0x3dd6a000},{0x3dd6c000},{0x3dd6e000},{0x3dd70000},{0x3dd72000},{0x3dd74000},{0x3dd76000},{0x3dd78000},{0x3dd7a000},{0x3dd7c000},{0x3dd7e000}, +{0x3dd80000},{0x3dd82000},{0x3dd84000},{0x3dd86000},{0x3dd88000},{0x3dd8a000},{0x3dd8c000},{0x3dd8e000},{0x3dd90000},{0x3dd92000},{0x3dd94000},{0x3dd96000},{0x3dd98000},{0x3dd9a000},{0x3dd9c000},{0x3dd9e000},{0x3dda0000},{0x3dda2000},{0x3dda4000},{0x3dda6000},{0x3dda8000},{0x3ddaa000},{0x3ddac000},{0x3ddae000},{0x3ddb0000},{0x3ddb2000},{0x3ddb4000},{0x3ddb6000},{0x3ddb8000},{0x3ddba000},{0x3ddbc000},{0x3ddbe000}, +{0x3ddc0000},{0x3ddc2000},{0x3ddc4000},{0x3ddc6000},{0x3ddc8000},{0x3ddca000},{0x3ddcc000},{0x3ddce000},{0x3ddd0000},{0x3ddd2000},{0x3ddd4000},{0x3ddd6000},{0x3ddd8000},{0x3ddda000},{0x3dddc000},{0x3ddde000},{0x3dde0000},{0x3dde2000},{0x3dde4000},{0x3dde6000},{0x3dde8000},{0x3ddea000},{0x3ddec000},{0x3ddee000},{0x3ddf0000},{0x3ddf2000},{0x3ddf4000},{0x3ddf6000},{0x3ddf8000},{0x3ddfa000},{0x3ddfc000},{0x3ddfe000}, +{0x3de00000},{0x3de02000},{0x3de04000},{0x3de06000},{0x3de08000},{0x3de0a000},{0x3de0c000},{0x3de0e000},{0x3de10000},{0x3de12000},{0x3de14000},{0x3de16000},{0x3de18000},{0x3de1a000},{0x3de1c000},{0x3de1e000},{0x3de20000},{0x3de22000},{0x3de24000},{0x3de26000},{0x3de28000},{0x3de2a000},{0x3de2c000},{0x3de2e000},{0x3de30000},{0x3de32000},{0x3de34000},{0x3de36000},{0x3de38000},{0x3de3a000},{0x3de3c000},{0x3de3e000}, +{0x3de40000},{0x3de42000},{0x3de44000},{0x3de46000},{0x3de48000},{0x3de4a000},{0x3de4c000},{0x3de4e000},{0x3de50000},{0x3de52000},{0x3de54000},{0x3de56000},{0x3de58000},{0x3de5a000},{0x3de5c000},{0x3de5e000},{0x3de60000},{0x3de62000},{0x3de64000},{0x3de66000},{0x3de68000},{0x3de6a000},{0x3de6c000},{0x3de6e000},{0x3de70000},{0x3de72000},{0x3de74000},{0x3de76000},{0x3de78000},{0x3de7a000},{0x3de7c000},{0x3de7e000}, +{0x3de80000},{0x3de82000},{0x3de84000},{0x3de86000},{0x3de88000},{0x3de8a000},{0x3de8c000},{0x3de8e000},{0x3de90000},{0x3de92000},{0x3de94000},{0x3de96000},{0x3de98000},{0x3de9a000},{0x3de9c000},{0x3de9e000},{0x3dea0000},{0x3dea2000},{0x3dea4000},{0x3dea6000},{0x3dea8000},{0x3deaa000},{0x3deac000},{0x3deae000},{0x3deb0000},{0x3deb2000},{0x3deb4000},{0x3deb6000},{0x3deb8000},{0x3deba000},{0x3debc000},{0x3debe000}, +{0x3dec0000},{0x3dec2000},{0x3dec4000},{0x3dec6000},{0x3dec8000},{0x3deca000},{0x3decc000},{0x3dece000},{0x3ded0000},{0x3ded2000},{0x3ded4000},{0x3ded6000},{0x3ded8000},{0x3deda000},{0x3dedc000},{0x3dede000},{0x3dee0000},{0x3dee2000},{0x3dee4000},{0x3dee6000},{0x3dee8000},{0x3deea000},{0x3deec000},{0x3deee000},{0x3def0000},{0x3def2000},{0x3def4000},{0x3def6000},{0x3def8000},{0x3defa000},{0x3defc000},{0x3defe000}, +{0x3df00000},{0x3df02000},{0x3df04000},{0x3df06000},{0x3df08000},{0x3df0a000},{0x3df0c000},{0x3df0e000},{0x3df10000},{0x3df12000},{0x3df14000},{0x3df16000},{0x3df18000},{0x3df1a000},{0x3df1c000},{0x3df1e000},{0x3df20000},{0x3df22000},{0x3df24000},{0x3df26000},{0x3df28000},{0x3df2a000},{0x3df2c000},{0x3df2e000},{0x3df30000},{0x3df32000},{0x3df34000},{0x3df36000},{0x3df38000},{0x3df3a000},{0x3df3c000},{0x3df3e000}, +{0x3df40000},{0x3df42000},{0x3df44000},{0x3df46000},{0x3df48000},{0x3df4a000},{0x3df4c000},{0x3df4e000},{0x3df50000},{0x3df52000},{0x3df54000},{0x3df56000},{0x3df58000},{0x3df5a000},{0x3df5c000},{0x3df5e000},{0x3df60000},{0x3df62000},{0x3df64000},{0x3df66000},{0x3df68000},{0x3df6a000},{0x3df6c000},{0x3df6e000},{0x3df70000},{0x3df72000},{0x3df74000},{0x3df76000},{0x3df78000},{0x3df7a000},{0x3df7c000},{0x3df7e000}, +{0x3df80000},{0x3df82000},{0x3df84000},{0x3df86000},{0x3df88000},{0x3df8a000},{0x3df8c000},{0x3df8e000},{0x3df90000},{0x3df92000},{0x3df94000},{0x3df96000},{0x3df98000},{0x3df9a000},{0x3df9c000},{0x3df9e000},{0x3dfa0000},{0x3dfa2000},{0x3dfa4000},{0x3dfa6000},{0x3dfa8000},{0x3dfaa000},{0x3dfac000},{0x3dfae000},{0x3dfb0000},{0x3dfb2000},{0x3dfb4000},{0x3dfb6000},{0x3dfb8000},{0x3dfba000},{0x3dfbc000},{0x3dfbe000}, +{0x3dfc0000},{0x3dfc2000},{0x3dfc4000},{0x3dfc6000},{0x3dfc8000},{0x3dfca000},{0x3dfcc000},{0x3dfce000},{0x3dfd0000},{0x3dfd2000},{0x3dfd4000},{0x3dfd6000},{0x3dfd8000},{0x3dfda000},{0x3dfdc000},{0x3dfde000},{0x3dfe0000},{0x3dfe2000},{0x3dfe4000},{0x3dfe6000},{0x3dfe8000},{0x3dfea000},{0x3dfec000},{0x3dfee000},{0x3dff0000},{0x3dff2000},{0x3dff4000},{0x3dff6000},{0x3dff8000},{0x3dffa000},{0x3dffc000},{0x3dffe000}, +{0x3e000000},{0x3e002000},{0x3e004000},{0x3e006000},{0x3e008000},{0x3e00a000},{0x3e00c000},{0x3e00e000},{0x3e010000},{0x3e012000},{0x3e014000},{0x3e016000},{0x3e018000},{0x3e01a000},{0x3e01c000},{0x3e01e000},{0x3e020000},{0x3e022000},{0x3e024000},{0x3e026000},{0x3e028000},{0x3e02a000},{0x3e02c000},{0x3e02e000},{0x3e030000},{0x3e032000},{0x3e034000},{0x3e036000},{0x3e038000},{0x3e03a000},{0x3e03c000},{0x3e03e000}, +{0x3e040000},{0x3e042000},{0x3e044000},{0x3e046000},{0x3e048000},{0x3e04a000},{0x3e04c000},{0x3e04e000},{0x3e050000},{0x3e052000},{0x3e054000},{0x3e056000},{0x3e058000},{0x3e05a000},{0x3e05c000},{0x3e05e000},{0x3e060000},{0x3e062000},{0x3e064000},{0x3e066000},{0x3e068000},{0x3e06a000},{0x3e06c000},{0x3e06e000},{0x3e070000},{0x3e072000},{0x3e074000},{0x3e076000},{0x3e078000},{0x3e07a000},{0x3e07c000},{0x3e07e000}, +{0x3e080000},{0x3e082000},{0x3e084000},{0x3e086000},{0x3e088000},{0x3e08a000},{0x3e08c000},{0x3e08e000},{0x3e090000},{0x3e092000},{0x3e094000},{0x3e096000},{0x3e098000},{0x3e09a000},{0x3e09c000},{0x3e09e000},{0x3e0a0000},{0x3e0a2000},{0x3e0a4000},{0x3e0a6000},{0x3e0a8000},{0x3e0aa000},{0x3e0ac000},{0x3e0ae000},{0x3e0b0000},{0x3e0b2000},{0x3e0b4000},{0x3e0b6000},{0x3e0b8000},{0x3e0ba000},{0x3e0bc000},{0x3e0be000}, +{0x3e0c0000},{0x3e0c2000},{0x3e0c4000},{0x3e0c6000},{0x3e0c8000},{0x3e0ca000},{0x3e0cc000},{0x3e0ce000},{0x3e0d0000},{0x3e0d2000},{0x3e0d4000},{0x3e0d6000},{0x3e0d8000},{0x3e0da000},{0x3e0dc000},{0x3e0de000},{0x3e0e0000},{0x3e0e2000},{0x3e0e4000},{0x3e0e6000},{0x3e0e8000},{0x3e0ea000},{0x3e0ec000},{0x3e0ee000},{0x3e0f0000},{0x3e0f2000},{0x3e0f4000},{0x3e0f6000},{0x3e0f8000},{0x3e0fa000},{0x3e0fc000},{0x3e0fe000}, +{0x3e100000},{0x3e102000},{0x3e104000},{0x3e106000},{0x3e108000},{0x3e10a000},{0x3e10c000},{0x3e10e000},{0x3e110000},{0x3e112000},{0x3e114000},{0x3e116000},{0x3e118000},{0x3e11a000},{0x3e11c000},{0x3e11e000},{0x3e120000},{0x3e122000},{0x3e124000},{0x3e126000},{0x3e128000},{0x3e12a000},{0x3e12c000},{0x3e12e000},{0x3e130000},{0x3e132000},{0x3e134000},{0x3e136000},{0x3e138000},{0x3e13a000},{0x3e13c000},{0x3e13e000}, +{0x3e140000},{0x3e142000},{0x3e144000},{0x3e146000},{0x3e148000},{0x3e14a000},{0x3e14c000},{0x3e14e000},{0x3e150000},{0x3e152000},{0x3e154000},{0x3e156000},{0x3e158000},{0x3e15a000},{0x3e15c000},{0x3e15e000},{0x3e160000},{0x3e162000},{0x3e164000},{0x3e166000},{0x3e168000},{0x3e16a000},{0x3e16c000},{0x3e16e000},{0x3e170000},{0x3e172000},{0x3e174000},{0x3e176000},{0x3e178000},{0x3e17a000},{0x3e17c000},{0x3e17e000}, +{0x3e180000},{0x3e182000},{0x3e184000},{0x3e186000},{0x3e188000},{0x3e18a000},{0x3e18c000},{0x3e18e000},{0x3e190000},{0x3e192000},{0x3e194000},{0x3e196000},{0x3e198000},{0x3e19a000},{0x3e19c000},{0x3e19e000},{0x3e1a0000},{0x3e1a2000},{0x3e1a4000},{0x3e1a6000},{0x3e1a8000},{0x3e1aa000},{0x3e1ac000},{0x3e1ae000},{0x3e1b0000},{0x3e1b2000},{0x3e1b4000},{0x3e1b6000},{0x3e1b8000},{0x3e1ba000},{0x3e1bc000},{0x3e1be000}, +{0x3e1c0000},{0x3e1c2000},{0x3e1c4000},{0x3e1c6000},{0x3e1c8000},{0x3e1ca000},{0x3e1cc000},{0x3e1ce000},{0x3e1d0000},{0x3e1d2000},{0x3e1d4000},{0x3e1d6000},{0x3e1d8000},{0x3e1da000},{0x3e1dc000},{0x3e1de000},{0x3e1e0000},{0x3e1e2000},{0x3e1e4000},{0x3e1e6000},{0x3e1e8000},{0x3e1ea000},{0x3e1ec000},{0x3e1ee000},{0x3e1f0000},{0x3e1f2000},{0x3e1f4000},{0x3e1f6000},{0x3e1f8000},{0x3e1fa000},{0x3e1fc000},{0x3e1fe000}, +{0x3e200000},{0x3e202000},{0x3e204000},{0x3e206000},{0x3e208000},{0x3e20a000},{0x3e20c000},{0x3e20e000},{0x3e210000},{0x3e212000},{0x3e214000},{0x3e216000},{0x3e218000},{0x3e21a000},{0x3e21c000},{0x3e21e000},{0x3e220000},{0x3e222000},{0x3e224000},{0x3e226000},{0x3e228000},{0x3e22a000},{0x3e22c000},{0x3e22e000},{0x3e230000},{0x3e232000},{0x3e234000},{0x3e236000},{0x3e238000},{0x3e23a000},{0x3e23c000},{0x3e23e000}, +{0x3e240000},{0x3e242000},{0x3e244000},{0x3e246000},{0x3e248000},{0x3e24a000},{0x3e24c000},{0x3e24e000},{0x3e250000},{0x3e252000},{0x3e254000},{0x3e256000},{0x3e258000},{0x3e25a000},{0x3e25c000},{0x3e25e000},{0x3e260000},{0x3e262000},{0x3e264000},{0x3e266000},{0x3e268000},{0x3e26a000},{0x3e26c000},{0x3e26e000},{0x3e270000},{0x3e272000},{0x3e274000},{0x3e276000},{0x3e278000},{0x3e27a000},{0x3e27c000},{0x3e27e000}, +{0x3e280000},{0x3e282000},{0x3e284000},{0x3e286000},{0x3e288000},{0x3e28a000},{0x3e28c000},{0x3e28e000},{0x3e290000},{0x3e292000},{0x3e294000},{0x3e296000},{0x3e298000},{0x3e29a000},{0x3e29c000},{0x3e29e000},{0x3e2a0000},{0x3e2a2000},{0x3e2a4000},{0x3e2a6000},{0x3e2a8000},{0x3e2aa000},{0x3e2ac000},{0x3e2ae000},{0x3e2b0000},{0x3e2b2000},{0x3e2b4000},{0x3e2b6000},{0x3e2b8000},{0x3e2ba000},{0x3e2bc000},{0x3e2be000}, +{0x3e2c0000},{0x3e2c2000},{0x3e2c4000},{0x3e2c6000},{0x3e2c8000},{0x3e2ca000},{0x3e2cc000},{0x3e2ce000},{0x3e2d0000},{0x3e2d2000},{0x3e2d4000},{0x3e2d6000},{0x3e2d8000},{0x3e2da000},{0x3e2dc000},{0x3e2de000},{0x3e2e0000},{0x3e2e2000},{0x3e2e4000},{0x3e2e6000},{0x3e2e8000},{0x3e2ea000},{0x3e2ec000},{0x3e2ee000},{0x3e2f0000},{0x3e2f2000},{0x3e2f4000},{0x3e2f6000},{0x3e2f8000},{0x3e2fa000},{0x3e2fc000},{0x3e2fe000}, +{0x3e300000},{0x3e302000},{0x3e304000},{0x3e306000},{0x3e308000},{0x3e30a000},{0x3e30c000},{0x3e30e000},{0x3e310000},{0x3e312000},{0x3e314000},{0x3e316000},{0x3e318000},{0x3e31a000},{0x3e31c000},{0x3e31e000},{0x3e320000},{0x3e322000},{0x3e324000},{0x3e326000},{0x3e328000},{0x3e32a000},{0x3e32c000},{0x3e32e000},{0x3e330000},{0x3e332000},{0x3e334000},{0x3e336000},{0x3e338000},{0x3e33a000},{0x3e33c000},{0x3e33e000}, +{0x3e340000},{0x3e342000},{0x3e344000},{0x3e346000},{0x3e348000},{0x3e34a000},{0x3e34c000},{0x3e34e000},{0x3e350000},{0x3e352000},{0x3e354000},{0x3e356000},{0x3e358000},{0x3e35a000},{0x3e35c000},{0x3e35e000},{0x3e360000},{0x3e362000},{0x3e364000},{0x3e366000},{0x3e368000},{0x3e36a000},{0x3e36c000},{0x3e36e000},{0x3e370000},{0x3e372000},{0x3e374000},{0x3e376000},{0x3e378000},{0x3e37a000},{0x3e37c000},{0x3e37e000}, +{0x3e380000},{0x3e382000},{0x3e384000},{0x3e386000},{0x3e388000},{0x3e38a000},{0x3e38c000},{0x3e38e000},{0x3e390000},{0x3e392000},{0x3e394000},{0x3e396000},{0x3e398000},{0x3e39a000},{0x3e39c000},{0x3e39e000},{0x3e3a0000},{0x3e3a2000},{0x3e3a4000},{0x3e3a6000},{0x3e3a8000},{0x3e3aa000},{0x3e3ac000},{0x3e3ae000},{0x3e3b0000},{0x3e3b2000},{0x3e3b4000},{0x3e3b6000},{0x3e3b8000},{0x3e3ba000},{0x3e3bc000},{0x3e3be000}, +{0x3e3c0000},{0x3e3c2000},{0x3e3c4000},{0x3e3c6000},{0x3e3c8000},{0x3e3ca000},{0x3e3cc000},{0x3e3ce000},{0x3e3d0000},{0x3e3d2000},{0x3e3d4000},{0x3e3d6000},{0x3e3d8000},{0x3e3da000},{0x3e3dc000},{0x3e3de000},{0x3e3e0000},{0x3e3e2000},{0x3e3e4000},{0x3e3e6000},{0x3e3e8000},{0x3e3ea000},{0x3e3ec000},{0x3e3ee000},{0x3e3f0000},{0x3e3f2000},{0x3e3f4000},{0x3e3f6000},{0x3e3f8000},{0x3e3fa000},{0x3e3fc000},{0x3e3fe000}, +{0x3e400000},{0x3e402000},{0x3e404000},{0x3e406000},{0x3e408000},{0x3e40a000},{0x3e40c000},{0x3e40e000},{0x3e410000},{0x3e412000},{0x3e414000},{0x3e416000},{0x3e418000},{0x3e41a000},{0x3e41c000},{0x3e41e000},{0x3e420000},{0x3e422000},{0x3e424000},{0x3e426000},{0x3e428000},{0x3e42a000},{0x3e42c000},{0x3e42e000},{0x3e430000},{0x3e432000},{0x3e434000},{0x3e436000},{0x3e438000},{0x3e43a000},{0x3e43c000},{0x3e43e000}, +{0x3e440000},{0x3e442000},{0x3e444000},{0x3e446000},{0x3e448000},{0x3e44a000},{0x3e44c000},{0x3e44e000},{0x3e450000},{0x3e452000},{0x3e454000},{0x3e456000},{0x3e458000},{0x3e45a000},{0x3e45c000},{0x3e45e000},{0x3e460000},{0x3e462000},{0x3e464000},{0x3e466000},{0x3e468000},{0x3e46a000},{0x3e46c000},{0x3e46e000},{0x3e470000},{0x3e472000},{0x3e474000},{0x3e476000},{0x3e478000},{0x3e47a000},{0x3e47c000},{0x3e47e000}, +{0x3e480000},{0x3e482000},{0x3e484000},{0x3e486000},{0x3e488000},{0x3e48a000},{0x3e48c000},{0x3e48e000},{0x3e490000},{0x3e492000},{0x3e494000},{0x3e496000},{0x3e498000},{0x3e49a000},{0x3e49c000},{0x3e49e000},{0x3e4a0000},{0x3e4a2000},{0x3e4a4000},{0x3e4a6000},{0x3e4a8000},{0x3e4aa000},{0x3e4ac000},{0x3e4ae000},{0x3e4b0000},{0x3e4b2000},{0x3e4b4000},{0x3e4b6000},{0x3e4b8000},{0x3e4ba000},{0x3e4bc000},{0x3e4be000}, +{0x3e4c0000},{0x3e4c2000},{0x3e4c4000},{0x3e4c6000},{0x3e4c8000},{0x3e4ca000},{0x3e4cc000},{0x3e4ce000},{0x3e4d0000},{0x3e4d2000},{0x3e4d4000},{0x3e4d6000},{0x3e4d8000},{0x3e4da000},{0x3e4dc000},{0x3e4de000},{0x3e4e0000},{0x3e4e2000},{0x3e4e4000},{0x3e4e6000},{0x3e4e8000},{0x3e4ea000},{0x3e4ec000},{0x3e4ee000},{0x3e4f0000},{0x3e4f2000},{0x3e4f4000},{0x3e4f6000},{0x3e4f8000},{0x3e4fa000},{0x3e4fc000},{0x3e4fe000}, +{0x3e500000},{0x3e502000},{0x3e504000},{0x3e506000},{0x3e508000},{0x3e50a000},{0x3e50c000},{0x3e50e000},{0x3e510000},{0x3e512000},{0x3e514000},{0x3e516000},{0x3e518000},{0x3e51a000},{0x3e51c000},{0x3e51e000},{0x3e520000},{0x3e522000},{0x3e524000},{0x3e526000},{0x3e528000},{0x3e52a000},{0x3e52c000},{0x3e52e000},{0x3e530000},{0x3e532000},{0x3e534000},{0x3e536000},{0x3e538000},{0x3e53a000},{0x3e53c000},{0x3e53e000}, +{0x3e540000},{0x3e542000},{0x3e544000},{0x3e546000},{0x3e548000},{0x3e54a000},{0x3e54c000},{0x3e54e000},{0x3e550000},{0x3e552000},{0x3e554000},{0x3e556000},{0x3e558000},{0x3e55a000},{0x3e55c000},{0x3e55e000},{0x3e560000},{0x3e562000},{0x3e564000},{0x3e566000},{0x3e568000},{0x3e56a000},{0x3e56c000},{0x3e56e000},{0x3e570000},{0x3e572000},{0x3e574000},{0x3e576000},{0x3e578000},{0x3e57a000},{0x3e57c000},{0x3e57e000}, +{0x3e580000},{0x3e582000},{0x3e584000},{0x3e586000},{0x3e588000},{0x3e58a000},{0x3e58c000},{0x3e58e000},{0x3e590000},{0x3e592000},{0x3e594000},{0x3e596000},{0x3e598000},{0x3e59a000},{0x3e59c000},{0x3e59e000},{0x3e5a0000},{0x3e5a2000},{0x3e5a4000},{0x3e5a6000},{0x3e5a8000},{0x3e5aa000},{0x3e5ac000},{0x3e5ae000},{0x3e5b0000},{0x3e5b2000},{0x3e5b4000},{0x3e5b6000},{0x3e5b8000},{0x3e5ba000},{0x3e5bc000},{0x3e5be000}, +{0x3e5c0000},{0x3e5c2000},{0x3e5c4000},{0x3e5c6000},{0x3e5c8000},{0x3e5ca000},{0x3e5cc000},{0x3e5ce000},{0x3e5d0000},{0x3e5d2000},{0x3e5d4000},{0x3e5d6000},{0x3e5d8000},{0x3e5da000},{0x3e5dc000},{0x3e5de000},{0x3e5e0000},{0x3e5e2000},{0x3e5e4000},{0x3e5e6000},{0x3e5e8000},{0x3e5ea000},{0x3e5ec000},{0x3e5ee000},{0x3e5f0000},{0x3e5f2000},{0x3e5f4000},{0x3e5f6000},{0x3e5f8000},{0x3e5fa000},{0x3e5fc000},{0x3e5fe000}, +{0x3e600000},{0x3e602000},{0x3e604000},{0x3e606000},{0x3e608000},{0x3e60a000},{0x3e60c000},{0x3e60e000},{0x3e610000},{0x3e612000},{0x3e614000},{0x3e616000},{0x3e618000},{0x3e61a000},{0x3e61c000},{0x3e61e000},{0x3e620000},{0x3e622000},{0x3e624000},{0x3e626000},{0x3e628000},{0x3e62a000},{0x3e62c000},{0x3e62e000},{0x3e630000},{0x3e632000},{0x3e634000},{0x3e636000},{0x3e638000},{0x3e63a000},{0x3e63c000},{0x3e63e000}, +{0x3e640000},{0x3e642000},{0x3e644000},{0x3e646000},{0x3e648000},{0x3e64a000},{0x3e64c000},{0x3e64e000},{0x3e650000},{0x3e652000},{0x3e654000},{0x3e656000},{0x3e658000},{0x3e65a000},{0x3e65c000},{0x3e65e000},{0x3e660000},{0x3e662000},{0x3e664000},{0x3e666000},{0x3e668000},{0x3e66a000},{0x3e66c000},{0x3e66e000},{0x3e670000},{0x3e672000},{0x3e674000},{0x3e676000},{0x3e678000},{0x3e67a000},{0x3e67c000},{0x3e67e000}, +{0x3e680000},{0x3e682000},{0x3e684000},{0x3e686000},{0x3e688000},{0x3e68a000},{0x3e68c000},{0x3e68e000},{0x3e690000},{0x3e692000},{0x3e694000},{0x3e696000},{0x3e698000},{0x3e69a000},{0x3e69c000},{0x3e69e000},{0x3e6a0000},{0x3e6a2000},{0x3e6a4000},{0x3e6a6000},{0x3e6a8000},{0x3e6aa000},{0x3e6ac000},{0x3e6ae000},{0x3e6b0000},{0x3e6b2000},{0x3e6b4000},{0x3e6b6000},{0x3e6b8000},{0x3e6ba000},{0x3e6bc000},{0x3e6be000}, +{0x3e6c0000},{0x3e6c2000},{0x3e6c4000},{0x3e6c6000},{0x3e6c8000},{0x3e6ca000},{0x3e6cc000},{0x3e6ce000},{0x3e6d0000},{0x3e6d2000},{0x3e6d4000},{0x3e6d6000},{0x3e6d8000},{0x3e6da000},{0x3e6dc000},{0x3e6de000},{0x3e6e0000},{0x3e6e2000},{0x3e6e4000},{0x3e6e6000},{0x3e6e8000},{0x3e6ea000},{0x3e6ec000},{0x3e6ee000},{0x3e6f0000},{0x3e6f2000},{0x3e6f4000},{0x3e6f6000},{0x3e6f8000},{0x3e6fa000},{0x3e6fc000},{0x3e6fe000}, +{0x3e700000},{0x3e702000},{0x3e704000},{0x3e706000},{0x3e708000},{0x3e70a000},{0x3e70c000},{0x3e70e000},{0x3e710000},{0x3e712000},{0x3e714000},{0x3e716000},{0x3e718000},{0x3e71a000},{0x3e71c000},{0x3e71e000},{0x3e720000},{0x3e722000},{0x3e724000},{0x3e726000},{0x3e728000},{0x3e72a000},{0x3e72c000},{0x3e72e000},{0x3e730000},{0x3e732000},{0x3e734000},{0x3e736000},{0x3e738000},{0x3e73a000},{0x3e73c000},{0x3e73e000}, +{0x3e740000},{0x3e742000},{0x3e744000},{0x3e746000},{0x3e748000},{0x3e74a000},{0x3e74c000},{0x3e74e000},{0x3e750000},{0x3e752000},{0x3e754000},{0x3e756000},{0x3e758000},{0x3e75a000},{0x3e75c000},{0x3e75e000},{0x3e760000},{0x3e762000},{0x3e764000},{0x3e766000},{0x3e768000},{0x3e76a000},{0x3e76c000},{0x3e76e000},{0x3e770000},{0x3e772000},{0x3e774000},{0x3e776000},{0x3e778000},{0x3e77a000},{0x3e77c000},{0x3e77e000}, +{0x3e780000},{0x3e782000},{0x3e784000},{0x3e786000},{0x3e788000},{0x3e78a000},{0x3e78c000},{0x3e78e000},{0x3e790000},{0x3e792000},{0x3e794000},{0x3e796000},{0x3e798000},{0x3e79a000},{0x3e79c000},{0x3e79e000},{0x3e7a0000},{0x3e7a2000},{0x3e7a4000},{0x3e7a6000},{0x3e7a8000},{0x3e7aa000},{0x3e7ac000},{0x3e7ae000},{0x3e7b0000},{0x3e7b2000},{0x3e7b4000},{0x3e7b6000},{0x3e7b8000},{0x3e7ba000},{0x3e7bc000},{0x3e7be000}, +{0x3e7c0000},{0x3e7c2000},{0x3e7c4000},{0x3e7c6000},{0x3e7c8000},{0x3e7ca000},{0x3e7cc000},{0x3e7ce000},{0x3e7d0000},{0x3e7d2000},{0x3e7d4000},{0x3e7d6000},{0x3e7d8000},{0x3e7da000},{0x3e7dc000},{0x3e7de000},{0x3e7e0000},{0x3e7e2000},{0x3e7e4000},{0x3e7e6000},{0x3e7e8000},{0x3e7ea000},{0x3e7ec000},{0x3e7ee000},{0x3e7f0000},{0x3e7f2000},{0x3e7f4000},{0x3e7f6000},{0x3e7f8000},{0x3e7fa000},{0x3e7fc000},{0x3e7fe000}, +{0x3e800000},{0x3e802000},{0x3e804000},{0x3e806000},{0x3e808000},{0x3e80a000},{0x3e80c000},{0x3e80e000},{0x3e810000},{0x3e812000},{0x3e814000},{0x3e816000},{0x3e818000},{0x3e81a000},{0x3e81c000},{0x3e81e000},{0x3e820000},{0x3e822000},{0x3e824000},{0x3e826000},{0x3e828000},{0x3e82a000},{0x3e82c000},{0x3e82e000},{0x3e830000},{0x3e832000},{0x3e834000},{0x3e836000},{0x3e838000},{0x3e83a000},{0x3e83c000},{0x3e83e000}, +{0x3e840000},{0x3e842000},{0x3e844000},{0x3e846000},{0x3e848000},{0x3e84a000},{0x3e84c000},{0x3e84e000},{0x3e850000},{0x3e852000},{0x3e854000},{0x3e856000},{0x3e858000},{0x3e85a000},{0x3e85c000},{0x3e85e000},{0x3e860000},{0x3e862000},{0x3e864000},{0x3e866000},{0x3e868000},{0x3e86a000},{0x3e86c000},{0x3e86e000},{0x3e870000},{0x3e872000},{0x3e874000},{0x3e876000},{0x3e878000},{0x3e87a000},{0x3e87c000},{0x3e87e000}, +{0x3e880000},{0x3e882000},{0x3e884000},{0x3e886000},{0x3e888000},{0x3e88a000},{0x3e88c000},{0x3e88e000},{0x3e890000},{0x3e892000},{0x3e894000},{0x3e896000},{0x3e898000},{0x3e89a000},{0x3e89c000},{0x3e89e000},{0x3e8a0000},{0x3e8a2000},{0x3e8a4000},{0x3e8a6000},{0x3e8a8000},{0x3e8aa000},{0x3e8ac000},{0x3e8ae000},{0x3e8b0000},{0x3e8b2000},{0x3e8b4000},{0x3e8b6000},{0x3e8b8000},{0x3e8ba000},{0x3e8bc000},{0x3e8be000}, +{0x3e8c0000},{0x3e8c2000},{0x3e8c4000},{0x3e8c6000},{0x3e8c8000},{0x3e8ca000},{0x3e8cc000},{0x3e8ce000},{0x3e8d0000},{0x3e8d2000},{0x3e8d4000},{0x3e8d6000},{0x3e8d8000},{0x3e8da000},{0x3e8dc000},{0x3e8de000},{0x3e8e0000},{0x3e8e2000},{0x3e8e4000},{0x3e8e6000},{0x3e8e8000},{0x3e8ea000},{0x3e8ec000},{0x3e8ee000},{0x3e8f0000},{0x3e8f2000},{0x3e8f4000},{0x3e8f6000},{0x3e8f8000},{0x3e8fa000},{0x3e8fc000},{0x3e8fe000}, +{0x3e900000},{0x3e902000},{0x3e904000},{0x3e906000},{0x3e908000},{0x3e90a000},{0x3e90c000},{0x3e90e000},{0x3e910000},{0x3e912000},{0x3e914000},{0x3e916000},{0x3e918000},{0x3e91a000},{0x3e91c000},{0x3e91e000},{0x3e920000},{0x3e922000},{0x3e924000},{0x3e926000},{0x3e928000},{0x3e92a000},{0x3e92c000},{0x3e92e000},{0x3e930000},{0x3e932000},{0x3e934000},{0x3e936000},{0x3e938000},{0x3e93a000},{0x3e93c000},{0x3e93e000}, +{0x3e940000},{0x3e942000},{0x3e944000},{0x3e946000},{0x3e948000},{0x3e94a000},{0x3e94c000},{0x3e94e000},{0x3e950000},{0x3e952000},{0x3e954000},{0x3e956000},{0x3e958000},{0x3e95a000},{0x3e95c000},{0x3e95e000},{0x3e960000},{0x3e962000},{0x3e964000},{0x3e966000},{0x3e968000},{0x3e96a000},{0x3e96c000},{0x3e96e000},{0x3e970000},{0x3e972000},{0x3e974000},{0x3e976000},{0x3e978000},{0x3e97a000},{0x3e97c000},{0x3e97e000}, +{0x3e980000},{0x3e982000},{0x3e984000},{0x3e986000},{0x3e988000},{0x3e98a000},{0x3e98c000},{0x3e98e000},{0x3e990000},{0x3e992000},{0x3e994000},{0x3e996000},{0x3e998000},{0x3e99a000},{0x3e99c000},{0x3e99e000},{0x3e9a0000},{0x3e9a2000},{0x3e9a4000},{0x3e9a6000},{0x3e9a8000},{0x3e9aa000},{0x3e9ac000},{0x3e9ae000},{0x3e9b0000},{0x3e9b2000},{0x3e9b4000},{0x3e9b6000},{0x3e9b8000},{0x3e9ba000},{0x3e9bc000},{0x3e9be000}, +{0x3e9c0000},{0x3e9c2000},{0x3e9c4000},{0x3e9c6000},{0x3e9c8000},{0x3e9ca000},{0x3e9cc000},{0x3e9ce000},{0x3e9d0000},{0x3e9d2000},{0x3e9d4000},{0x3e9d6000},{0x3e9d8000},{0x3e9da000},{0x3e9dc000},{0x3e9de000},{0x3e9e0000},{0x3e9e2000},{0x3e9e4000},{0x3e9e6000},{0x3e9e8000},{0x3e9ea000},{0x3e9ec000},{0x3e9ee000},{0x3e9f0000},{0x3e9f2000},{0x3e9f4000},{0x3e9f6000},{0x3e9f8000},{0x3e9fa000},{0x3e9fc000},{0x3e9fe000}, +{0x3ea00000},{0x3ea02000},{0x3ea04000},{0x3ea06000},{0x3ea08000},{0x3ea0a000},{0x3ea0c000},{0x3ea0e000},{0x3ea10000},{0x3ea12000},{0x3ea14000},{0x3ea16000},{0x3ea18000},{0x3ea1a000},{0x3ea1c000},{0x3ea1e000},{0x3ea20000},{0x3ea22000},{0x3ea24000},{0x3ea26000},{0x3ea28000},{0x3ea2a000},{0x3ea2c000},{0x3ea2e000},{0x3ea30000},{0x3ea32000},{0x3ea34000},{0x3ea36000},{0x3ea38000},{0x3ea3a000},{0x3ea3c000},{0x3ea3e000}, +{0x3ea40000},{0x3ea42000},{0x3ea44000},{0x3ea46000},{0x3ea48000},{0x3ea4a000},{0x3ea4c000},{0x3ea4e000},{0x3ea50000},{0x3ea52000},{0x3ea54000},{0x3ea56000},{0x3ea58000},{0x3ea5a000},{0x3ea5c000},{0x3ea5e000},{0x3ea60000},{0x3ea62000},{0x3ea64000},{0x3ea66000},{0x3ea68000},{0x3ea6a000},{0x3ea6c000},{0x3ea6e000},{0x3ea70000},{0x3ea72000},{0x3ea74000},{0x3ea76000},{0x3ea78000},{0x3ea7a000},{0x3ea7c000},{0x3ea7e000}, +{0x3ea80000},{0x3ea82000},{0x3ea84000},{0x3ea86000},{0x3ea88000},{0x3ea8a000},{0x3ea8c000},{0x3ea8e000},{0x3ea90000},{0x3ea92000},{0x3ea94000},{0x3ea96000},{0x3ea98000},{0x3ea9a000},{0x3ea9c000},{0x3ea9e000},{0x3eaa0000},{0x3eaa2000},{0x3eaa4000},{0x3eaa6000},{0x3eaa8000},{0x3eaaa000},{0x3eaac000},{0x3eaae000},{0x3eab0000},{0x3eab2000},{0x3eab4000},{0x3eab6000},{0x3eab8000},{0x3eaba000},{0x3eabc000},{0x3eabe000}, +{0x3eac0000},{0x3eac2000},{0x3eac4000},{0x3eac6000},{0x3eac8000},{0x3eaca000},{0x3eacc000},{0x3eace000},{0x3ead0000},{0x3ead2000},{0x3ead4000},{0x3ead6000},{0x3ead8000},{0x3eada000},{0x3eadc000},{0x3eade000},{0x3eae0000},{0x3eae2000},{0x3eae4000},{0x3eae6000},{0x3eae8000},{0x3eaea000},{0x3eaec000},{0x3eaee000},{0x3eaf0000},{0x3eaf2000},{0x3eaf4000},{0x3eaf6000},{0x3eaf8000},{0x3eafa000},{0x3eafc000},{0x3eafe000}, +{0x3eb00000},{0x3eb02000},{0x3eb04000},{0x3eb06000},{0x3eb08000},{0x3eb0a000},{0x3eb0c000},{0x3eb0e000},{0x3eb10000},{0x3eb12000},{0x3eb14000},{0x3eb16000},{0x3eb18000},{0x3eb1a000},{0x3eb1c000},{0x3eb1e000},{0x3eb20000},{0x3eb22000},{0x3eb24000},{0x3eb26000},{0x3eb28000},{0x3eb2a000},{0x3eb2c000},{0x3eb2e000},{0x3eb30000},{0x3eb32000},{0x3eb34000},{0x3eb36000},{0x3eb38000},{0x3eb3a000},{0x3eb3c000},{0x3eb3e000}, +{0x3eb40000},{0x3eb42000},{0x3eb44000},{0x3eb46000},{0x3eb48000},{0x3eb4a000},{0x3eb4c000},{0x3eb4e000},{0x3eb50000},{0x3eb52000},{0x3eb54000},{0x3eb56000},{0x3eb58000},{0x3eb5a000},{0x3eb5c000},{0x3eb5e000},{0x3eb60000},{0x3eb62000},{0x3eb64000},{0x3eb66000},{0x3eb68000},{0x3eb6a000},{0x3eb6c000},{0x3eb6e000},{0x3eb70000},{0x3eb72000},{0x3eb74000},{0x3eb76000},{0x3eb78000},{0x3eb7a000},{0x3eb7c000},{0x3eb7e000}, +{0x3eb80000},{0x3eb82000},{0x3eb84000},{0x3eb86000},{0x3eb88000},{0x3eb8a000},{0x3eb8c000},{0x3eb8e000},{0x3eb90000},{0x3eb92000},{0x3eb94000},{0x3eb96000},{0x3eb98000},{0x3eb9a000},{0x3eb9c000},{0x3eb9e000},{0x3eba0000},{0x3eba2000},{0x3eba4000},{0x3eba6000},{0x3eba8000},{0x3ebaa000},{0x3ebac000},{0x3ebae000},{0x3ebb0000},{0x3ebb2000},{0x3ebb4000},{0x3ebb6000},{0x3ebb8000},{0x3ebba000},{0x3ebbc000},{0x3ebbe000}, +{0x3ebc0000},{0x3ebc2000},{0x3ebc4000},{0x3ebc6000},{0x3ebc8000},{0x3ebca000},{0x3ebcc000},{0x3ebce000},{0x3ebd0000},{0x3ebd2000},{0x3ebd4000},{0x3ebd6000},{0x3ebd8000},{0x3ebda000},{0x3ebdc000},{0x3ebde000},{0x3ebe0000},{0x3ebe2000},{0x3ebe4000},{0x3ebe6000},{0x3ebe8000},{0x3ebea000},{0x3ebec000},{0x3ebee000},{0x3ebf0000},{0x3ebf2000},{0x3ebf4000},{0x3ebf6000},{0x3ebf8000},{0x3ebfa000},{0x3ebfc000},{0x3ebfe000}, +{0x3ec00000},{0x3ec02000},{0x3ec04000},{0x3ec06000},{0x3ec08000},{0x3ec0a000},{0x3ec0c000},{0x3ec0e000},{0x3ec10000},{0x3ec12000},{0x3ec14000},{0x3ec16000},{0x3ec18000},{0x3ec1a000},{0x3ec1c000},{0x3ec1e000},{0x3ec20000},{0x3ec22000},{0x3ec24000},{0x3ec26000},{0x3ec28000},{0x3ec2a000},{0x3ec2c000},{0x3ec2e000},{0x3ec30000},{0x3ec32000},{0x3ec34000},{0x3ec36000},{0x3ec38000},{0x3ec3a000},{0x3ec3c000},{0x3ec3e000}, +{0x3ec40000},{0x3ec42000},{0x3ec44000},{0x3ec46000},{0x3ec48000},{0x3ec4a000},{0x3ec4c000},{0x3ec4e000},{0x3ec50000},{0x3ec52000},{0x3ec54000},{0x3ec56000},{0x3ec58000},{0x3ec5a000},{0x3ec5c000},{0x3ec5e000},{0x3ec60000},{0x3ec62000},{0x3ec64000},{0x3ec66000},{0x3ec68000},{0x3ec6a000},{0x3ec6c000},{0x3ec6e000},{0x3ec70000},{0x3ec72000},{0x3ec74000},{0x3ec76000},{0x3ec78000},{0x3ec7a000},{0x3ec7c000},{0x3ec7e000}, +{0x3ec80000},{0x3ec82000},{0x3ec84000},{0x3ec86000},{0x3ec88000},{0x3ec8a000},{0x3ec8c000},{0x3ec8e000},{0x3ec90000},{0x3ec92000},{0x3ec94000},{0x3ec96000},{0x3ec98000},{0x3ec9a000},{0x3ec9c000},{0x3ec9e000},{0x3eca0000},{0x3eca2000},{0x3eca4000},{0x3eca6000},{0x3eca8000},{0x3ecaa000},{0x3ecac000},{0x3ecae000},{0x3ecb0000},{0x3ecb2000},{0x3ecb4000},{0x3ecb6000},{0x3ecb8000},{0x3ecba000},{0x3ecbc000},{0x3ecbe000}, +{0x3ecc0000},{0x3ecc2000},{0x3ecc4000},{0x3ecc6000},{0x3ecc8000},{0x3ecca000},{0x3eccc000},{0x3ecce000},{0x3ecd0000},{0x3ecd2000},{0x3ecd4000},{0x3ecd6000},{0x3ecd8000},{0x3ecda000},{0x3ecdc000},{0x3ecde000},{0x3ece0000},{0x3ece2000},{0x3ece4000},{0x3ece6000},{0x3ece8000},{0x3ecea000},{0x3ecec000},{0x3ecee000},{0x3ecf0000},{0x3ecf2000},{0x3ecf4000},{0x3ecf6000},{0x3ecf8000},{0x3ecfa000},{0x3ecfc000},{0x3ecfe000}, +{0x3ed00000},{0x3ed02000},{0x3ed04000},{0x3ed06000},{0x3ed08000},{0x3ed0a000},{0x3ed0c000},{0x3ed0e000},{0x3ed10000},{0x3ed12000},{0x3ed14000},{0x3ed16000},{0x3ed18000},{0x3ed1a000},{0x3ed1c000},{0x3ed1e000},{0x3ed20000},{0x3ed22000},{0x3ed24000},{0x3ed26000},{0x3ed28000},{0x3ed2a000},{0x3ed2c000},{0x3ed2e000},{0x3ed30000},{0x3ed32000},{0x3ed34000},{0x3ed36000},{0x3ed38000},{0x3ed3a000},{0x3ed3c000},{0x3ed3e000}, +{0x3ed40000},{0x3ed42000},{0x3ed44000},{0x3ed46000},{0x3ed48000},{0x3ed4a000},{0x3ed4c000},{0x3ed4e000},{0x3ed50000},{0x3ed52000},{0x3ed54000},{0x3ed56000},{0x3ed58000},{0x3ed5a000},{0x3ed5c000},{0x3ed5e000},{0x3ed60000},{0x3ed62000},{0x3ed64000},{0x3ed66000},{0x3ed68000},{0x3ed6a000},{0x3ed6c000},{0x3ed6e000},{0x3ed70000},{0x3ed72000},{0x3ed74000},{0x3ed76000},{0x3ed78000},{0x3ed7a000},{0x3ed7c000},{0x3ed7e000}, +{0x3ed80000},{0x3ed82000},{0x3ed84000},{0x3ed86000},{0x3ed88000},{0x3ed8a000},{0x3ed8c000},{0x3ed8e000},{0x3ed90000},{0x3ed92000},{0x3ed94000},{0x3ed96000},{0x3ed98000},{0x3ed9a000},{0x3ed9c000},{0x3ed9e000},{0x3eda0000},{0x3eda2000},{0x3eda4000},{0x3eda6000},{0x3eda8000},{0x3edaa000},{0x3edac000},{0x3edae000},{0x3edb0000},{0x3edb2000},{0x3edb4000},{0x3edb6000},{0x3edb8000},{0x3edba000},{0x3edbc000},{0x3edbe000}, +{0x3edc0000},{0x3edc2000},{0x3edc4000},{0x3edc6000},{0x3edc8000},{0x3edca000},{0x3edcc000},{0x3edce000},{0x3edd0000},{0x3edd2000},{0x3edd4000},{0x3edd6000},{0x3edd8000},{0x3edda000},{0x3eddc000},{0x3edde000},{0x3ede0000},{0x3ede2000},{0x3ede4000},{0x3ede6000},{0x3ede8000},{0x3edea000},{0x3edec000},{0x3edee000},{0x3edf0000},{0x3edf2000},{0x3edf4000},{0x3edf6000},{0x3edf8000},{0x3edfa000},{0x3edfc000},{0x3edfe000}, +{0x3ee00000},{0x3ee02000},{0x3ee04000},{0x3ee06000},{0x3ee08000},{0x3ee0a000},{0x3ee0c000},{0x3ee0e000},{0x3ee10000},{0x3ee12000},{0x3ee14000},{0x3ee16000},{0x3ee18000},{0x3ee1a000},{0x3ee1c000},{0x3ee1e000},{0x3ee20000},{0x3ee22000},{0x3ee24000},{0x3ee26000},{0x3ee28000},{0x3ee2a000},{0x3ee2c000},{0x3ee2e000},{0x3ee30000},{0x3ee32000},{0x3ee34000},{0x3ee36000},{0x3ee38000},{0x3ee3a000},{0x3ee3c000},{0x3ee3e000}, +{0x3ee40000},{0x3ee42000},{0x3ee44000},{0x3ee46000},{0x3ee48000},{0x3ee4a000},{0x3ee4c000},{0x3ee4e000},{0x3ee50000},{0x3ee52000},{0x3ee54000},{0x3ee56000},{0x3ee58000},{0x3ee5a000},{0x3ee5c000},{0x3ee5e000},{0x3ee60000},{0x3ee62000},{0x3ee64000},{0x3ee66000},{0x3ee68000},{0x3ee6a000},{0x3ee6c000},{0x3ee6e000},{0x3ee70000},{0x3ee72000},{0x3ee74000},{0x3ee76000},{0x3ee78000},{0x3ee7a000},{0x3ee7c000},{0x3ee7e000}, +{0x3ee80000},{0x3ee82000},{0x3ee84000},{0x3ee86000},{0x3ee88000},{0x3ee8a000},{0x3ee8c000},{0x3ee8e000},{0x3ee90000},{0x3ee92000},{0x3ee94000},{0x3ee96000},{0x3ee98000},{0x3ee9a000},{0x3ee9c000},{0x3ee9e000},{0x3eea0000},{0x3eea2000},{0x3eea4000},{0x3eea6000},{0x3eea8000},{0x3eeaa000},{0x3eeac000},{0x3eeae000},{0x3eeb0000},{0x3eeb2000},{0x3eeb4000},{0x3eeb6000},{0x3eeb8000},{0x3eeba000},{0x3eebc000},{0x3eebe000}, +{0x3eec0000},{0x3eec2000},{0x3eec4000},{0x3eec6000},{0x3eec8000},{0x3eeca000},{0x3eecc000},{0x3eece000},{0x3eed0000},{0x3eed2000},{0x3eed4000},{0x3eed6000},{0x3eed8000},{0x3eeda000},{0x3eedc000},{0x3eede000},{0x3eee0000},{0x3eee2000},{0x3eee4000},{0x3eee6000},{0x3eee8000},{0x3eeea000},{0x3eeec000},{0x3eeee000},{0x3eef0000},{0x3eef2000},{0x3eef4000},{0x3eef6000},{0x3eef8000},{0x3eefa000},{0x3eefc000},{0x3eefe000}, +{0x3ef00000},{0x3ef02000},{0x3ef04000},{0x3ef06000},{0x3ef08000},{0x3ef0a000},{0x3ef0c000},{0x3ef0e000},{0x3ef10000},{0x3ef12000},{0x3ef14000},{0x3ef16000},{0x3ef18000},{0x3ef1a000},{0x3ef1c000},{0x3ef1e000},{0x3ef20000},{0x3ef22000},{0x3ef24000},{0x3ef26000},{0x3ef28000},{0x3ef2a000},{0x3ef2c000},{0x3ef2e000},{0x3ef30000},{0x3ef32000},{0x3ef34000},{0x3ef36000},{0x3ef38000},{0x3ef3a000},{0x3ef3c000},{0x3ef3e000}, +{0x3ef40000},{0x3ef42000},{0x3ef44000},{0x3ef46000},{0x3ef48000},{0x3ef4a000},{0x3ef4c000},{0x3ef4e000},{0x3ef50000},{0x3ef52000},{0x3ef54000},{0x3ef56000},{0x3ef58000},{0x3ef5a000},{0x3ef5c000},{0x3ef5e000},{0x3ef60000},{0x3ef62000},{0x3ef64000},{0x3ef66000},{0x3ef68000},{0x3ef6a000},{0x3ef6c000},{0x3ef6e000},{0x3ef70000},{0x3ef72000},{0x3ef74000},{0x3ef76000},{0x3ef78000},{0x3ef7a000},{0x3ef7c000},{0x3ef7e000}, +{0x3ef80000},{0x3ef82000},{0x3ef84000},{0x3ef86000},{0x3ef88000},{0x3ef8a000},{0x3ef8c000},{0x3ef8e000},{0x3ef90000},{0x3ef92000},{0x3ef94000},{0x3ef96000},{0x3ef98000},{0x3ef9a000},{0x3ef9c000},{0x3ef9e000},{0x3efa0000},{0x3efa2000},{0x3efa4000},{0x3efa6000},{0x3efa8000},{0x3efaa000},{0x3efac000},{0x3efae000},{0x3efb0000},{0x3efb2000},{0x3efb4000},{0x3efb6000},{0x3efb8000},{0x3efba000},{0x3efbc000},{0x3efbe000}, +{0x3efc0000},{0x3efc2000},{0x3efc4000},{0x3efc6000},{0x3efc8000},{0x3efca000},{0x3efcc000},{0x3efce000},{0x3efd0000},{0x3efd2000},{0x3efd4000},{0x3efd6000},{0x3efd8000},{0x3efda000},{0x3efdc000},{0x3efde000},{0x3efe0000},{0x3efe2000},{0x3efe4000},{0x3efe6000},{0x3efe8000},{0x3efea000},{0x3efec000},{0x3efee000},{0x3eff0000},{0x3eff2000},{0x3eff4000},{0x3eff6000},{0x3eff8000},{0x3effa000},{0x3effc000},{0x3effe000}, +{0x3f000000},{0x3f002000},{0x3f004000},{0x3f006000},{0x3f008000},{0x3f00a000},{0x3f00c000},{0x3f00e000},{0x3f010000},{0x3f012000},{0x3f014000},{0x3f016000},{0x3f018000},{0x3f01a000},{0x3f01c000},{0x3f01e000},{0x3f020000},{0x3f022000},{0x3f024000},{0x3f026000},{0x3f028000},{0x3f02a000},{0x3f02c000},{0x3f02e000},{0x3f030000},{0x3f032000},{0x3f034000},{0x3f036000},{0x3f038000},{0x3f03a000},{0x3f03c000},{0x3f03e000}, +{0x3f040000},{0x3f042000},{0x3f044000},{0x3f046000},{0x3f048000},{0x3f04a000},{0x3f04c000},{0x3f04e000},{0x3f050000},{0x3f052000},{0x3f054000},{0x3f056000},{0x3f058000},{0x3f05a000},{0x3f05c000},{0x3f05e000},{0x3f060000},{0x3f062000},{0x3f064000},{0x3f066000},{0x3f068000},{0x3f06a000},{0x3f06c000},{0x3f06e000},{0x3f070000},{0x3f072000},{0x3f074000},{0x3f076000},{0x3f078000},{0x3f07a000},{0x3f07c000},{0x3f07e000}, +{0x3f080000},{0x3f082000},{0x3f084000},{0x3f086000},{0x3f088000},{0x3f08a000},{0x3f08c000},{0x3f08e000},{0x3f090000},{0x3f092000},{0x3f094000},{0x3f096000},{0x3f098000},{0x3f09a000},{0x3f09c000},{0x3f09e000},{0x3f0a0000},{0x3f0a2000},{0x3f0a4000},{0x3f0a6000},{0x3f0a8000},{0x3f0aa000},{0x3f0ac000},{0x3f0ae000},{0x3f0b0000},{0x3f0b2000},{0x3f0b4000},{0x3f0b6000},{0x3f0b8000},{0x3f0ba000},{0x3f0bc000},{0x3f0be000}, +{0x3f0c0000},{0x3f0c2000},{0x3f0c4000},{0x3f0c6000},{0x3f0c8000},{0x3f0ca000},{0x3f0cc000},{0x3f0ce000},{0x3f0d0000},{0x3f0d2000},{0x3f0d4000},{0x3f0d6000},{0x3f0d8000},{0x3f0da000},{0x3f0dc000},{0x3f0de000},{0x3f0e0000},{0x3f0e2000},{0x3f0e4000},{0x3f0e6000},{0x3f0e8000},{0x3f0ea000},{0x3f0ec000},{0x3f0ee000},{0x3f0f0000},{0x3f0f2000},{0x3f0f4000},{0x3f0f6000},{0x3f0f8000},{0x3f0fa000},{0x3f0fc000},{0x3f0fe000}, +{0x3f100000},{0x3f102000},{0x3f104000},{0x3f106000},{0x3f108000},{0x3f10a000},{0x3f10c000},{0x3f10e000},{0x3f110000},{0x3f112000},{0x3f114000},{0x3f116000},{0x3f118000},{0x3f11a000},{0x3f11c000},{0x3f11e000},{0x3f120000},{0x3f122000},{0x3f124000},{0x3f126000},{0x3f128000},{0x3f12a000},{0x3f12c000},{0x3f12e000},{0x3f130000},{0x3f132000},{0x3f134000},{0x3f136000},{0x3f138000},{0x3f13a000},{0x3f13c000},{0x3f13e000}, +{0x3f140000},{0x3f142000},{0x3f144000},{0x3f146000},{0x3f148000},{0x3f14a000},{0x3f14c000},{0x3f14e000},{0x3f150000},{0x3f152000},{0x3f154000},{0x3f156000},{0x3f158000},{0x3f15a000},{0x3f15c000},{0x3f15e000},{0x3f160000},{0x3f162000},{0x3f164000},{0x3f166000},{0x3f168000},{0x3f16a000},{0x3f16c000},{0x3f16e000},{0x3f170000},{0x3f172000},{0x3f174000},{0x3f176000},{0x3f178000},{0x3f17a000},{0x3f17c000},{0x3f17e000}, +{0x3f180000},{0x3f182000},{0x3f184000},{0x3f186000},{0x3f188000},{0x3f18a000},{0x3f18c000},{0x3f18e000},{0x3f190000},{0x3f192000},{0x3f194000},{0x3f196000},{0x3f198000},{0x3f19a000},{0x3f19c000},{0x3f19e000},{0x3f1a0000},{0x3f1a2000},{0x3f1a4000},{0x3f1a6000},{0x3f1a8000},{0x3f1aa000},{0x3f1ac000},{0x3f1ae000},{0x3f1b0000},{0x3f1b2000},{0x3f1b4000},{0x3f1b6000},{0x3f1b8000},{0x3f1ba000},{0x3f1bc000},{0x3f1be000}, +{0x3f1c0000},{0x3f1c2000},{0x3f1c4000},{0x3f1c6000},{0x3f1c8000},{0x3f1ca000},{0x3f1cc000},{0x3f1ce000},{0x3f1d0000},{0x3f1d2000},{0x3f1d4000},{0x3f1d6000},{0x3f1d8000},{0x3f1da000},{0x3f1dc000},{0x3f1de000},{0x3f1e0000},{0x3f1e2000},{0x3f1e4000},{0x3f1e6000},{0x3f1e8000},{0x3f1ea000},{0x3f1ec000},{0x3f1ee000},{0x3f1f0000},{0x3f1f2000},{0x3f1f4000},{0x3f1f6000},{0x3f1f8000},{0x3f1fa000},{0x3f1fc000},{0x3f1fe000}, +{0x3f200000},{0x3f202000},{0x3f204000},{0x3f206000},{0x3f208000},{0x3f20a000},{0x3f20c000},{0x3f20e000},{0x3f210000},{0x3f212000},{0x3f214000},{0x3f216000},{0x3f218000},{0x3f21a000},{0x3f21c000},{0x3f21e000},{0x3f220000},{0x3f222000},{0x3f224000},{0x3f226000},{0x3f228000},{0x3f22a000},{0x3f22c000},{0x3f22e000},{0x3f230000},{0x3f232000},{0x3f234000},{0x3f236000},{0x3f238000},{0x3f23a000},{0x3f23c000},{0x3f23e000}, +{0x3f240000},{0x3f242000},{0x3f244000},{0x3f246000},{0x3f248000},{0x3f24a000},{0x3f24c000},{0x3f24e000},{0x3f250000},{0x3f252000},{0x3f254000},{0x3f256000},{0x3f258000},{0x3f25a000},{0x3f25c000},{0x3f25e000},{0x3f260000},{0x3f262000},{0x3f264000},{0x3f266000},{0x3f268000},{0x3f26a000},{0x3f26c000},{0x3f26e000},{0x3f270000},{0x3f272000},{0x3f274000},{0x3f276000},{0x3f278000},{0x3f27a000},{0x3f27c000},{0x3f27e000}, +{0x3f280000},{0x3f282000},{0x3f284000},{0x3f286000},{0x3f288000},{0x3f28a000},{0x3f28c000},{0x3f28e000},{0x3f290000},{0x3f292000},{0x3f294000},{0x3f296000},{0x3f298000},{0x3f29a000},{0x3f29c000},{0x3f29e000},{0x3f2a0000},{0x3f2a2000},{0x3f2a4000},{0x3f2a6000},{0x3f2a8000},{0x3f2aa000},{0x3f2ac000},{0x3f2ae000},{0x3f2b0000},{0x3f2b2000},{0x3f2b4000},{0x3f2b6000},{0x3f2b8000},{0x3f2ba000},{0x3f2bc000},{0x3f2be000}, +{0x3f2c0000},{0x3f2c2000},{0x3f2c4000},{0x3f2c6000},{0x3f2c8000},{0x3f2ca000},{0x3f2cc000},{0x3f2ce000},{0x3f2d0000},{0x3f2d2000},{0x3f2d4000},{0x3f2d6000},{0x3f2d8000},{0x3f2da000},{0x3f2dc000},{0x3f2de000},{0x3f2e0000},{0x3f2e2000},{0x3f2e4000},{0x3f2e6000},{0x3f2e8000},{0x3f2ea000},{0x3f2ec000},{0x3f2ee000},{0x3f2f0000},{0x3f2f2000},{0x3f2f4000},{0x3f2f6000},{0x3f2f8000},{0x3f2fa000},{0x3f2fc000},{0x3f2fe000}, +{0x3f300000},{0x3f302000},{0x3f304000},{0x3f306000},{0x3f308000},{0x3f30a000},{0x3f30c000},{0x3f30e000},{0x3f310000},{0x3f312000},{0x3f314000},{0x3f316000},{0x3f318000},{0x3f31a000},{0x3f31c000},{0x3f31e000},{0x3f320000},{0x3f322000},{0x3f324000},{0x3f326000},{0x3f328000},{0x3f32a000},{0x3f32c000},{0x3f32e000},{0x3f330000},{0x3f332000},{0x3f334000},{0x3f336000},{0x3f338000},{0x3f33a000},{0x3f33c000},{0x3f33e000}, +{0x3f340000},{0x3f342000},{0x3f344000},{0x3f346000},{0x3f348000},{0x3f34a000},{0x3f34c000},{0x3f34e000},{0x3f350000},{0x3f352000},{0x3f354000},{0x3f356000},{0x3f358000},{0x3f35a000},{0x3f35c000},{0x3f35e000},{0x3f360000},{0x3f362000},{0x3f364000},{0x3f366000},{0x3f368000},{0x3f36a000},{0x3f36c000},{0x3f36e000},{0x3f370000},{0x3f372000},{0x3f374000},{0x3f376000},{0x3f378000},{0x3f37a000},{0x3f37c000},{0x3f37e000}, +{0x3f380000},{0x3f382000},{0x3f384000},{0x3f386000},{0x3f388000},{0x3f38a000},{0x3f38c000},{0x3f38e000},{0x3f390000},{0x3f392000},{0x3f394000},{0x3f396000},{0x3f398000},{0x3f39a000},{0x3f39c000},{0x3f39e000},{0x3f3a0000},{0x3f3a2000},{0x3f3a4000},{0x3f3a6000},{0x3f3a8000},{0x3f3aa000},{0x3f3ac000},{0x3f3ae000},{0x3f3b0000},{0x3f3b2000},{0x3f3b4000},{0x3f3b6000},{0x3f3b8000},{0x3f3ba000},{0x3f3bc000},{0x3f3be000}, +{0x3f3c0000},{0x3f3c2000},{0x3f3c4000},{0x3f3c6000},{0x3f3c8000},{0x3f3ca000},{0x3f3cc000},{0x3f3ce000},{0x3f3d0000},{0x3f3d2000},{0x3f3d4000},{0x3f3d6000},{0x3f3d8000},{0x3f3da000},{0x3f3dc000},{0x3f3de000},{0x3f3e0000},{0x3f3e2000},{0x3f3e4000},{0x3f3e6000},{0x3f3e8000},{0x3f3ea000},{0x3f3ec000},{0x3f3ee000},{0x3f3f0000},{0x3f3f2000},{0x3f3f4000},{0x3f3f6000},{0x3f3f8000},{0x3f3fa000},{0x3f3fc000},{0x3f3fe000}, +{0x3f400000},{0x3f402000},{0x3f404000},{0x3f406000},{0x3f408000},{0x3f40a000},{0x3f40c000},{0x3f40e000},{0x3f410000},{0x3f412000},{0x3f414000},{0x3f416000},{0x3f418000},{0x3f41a000},{0x3f41c000},{0x3f41e000},{0x3f420000},{0x3f422000},{0x3f424000},{0x3f426000},{0x3f428000},{0x3f42a000},{0x3f42c000},{0x3f42e000},{0x3f430000},{0x3f432000},{0x3f434000},{0x3f436000},{0x3f438000},{0x3f43a000},{0x3f43c000},{0x3f43e000}, +{0x3f440000},{0x3f442000},{0x3f444000},{0x3f446000},{0x3f448000},{0x3f44a000},{0x3f44c000},{0x3f44e000},{0x3f450000},{0x3f452000},{0x3f454000},{0x3f456000},{0x3f458000},{0x3f45a000},{0x3f45c000},{0x3f45e000},{0x3f460000},{0x3f462000},{0x3f464000},{0x3f466000},{0x3f468000},{0x3f46a000},{0x3f46c000},{0x3f46e000},{0x3f470000},{0x3f472000},{0x3f474000},{0x3f476000},{0x3f478000},{0x3f47a000},{0x3f47c000},{0x3f47e000}, +{0x3f480000},{0x3f482000},{0x3f484000},{0x3f486000},{0x3f488000},{0x3f48a000},{0x3f48c000},{0x3f48e000},{0x3f490000},{0x3f492000},{0x3f494000},{0x3f496000},{0x3f498000},{0x3f49a000},{0x3f49c000},{0x3f49e000},{0x3f4a0000},{0x3f4a2000},{0x3f4a4000},{0x3f4a6000},{0x3f4a8000},{0x3f4aa000},{0x3f4ac000},{0x3f4ae000},{0x3f4b0000},{0x3f4b2000},{0x3f4b4000},{0x3f4b6000},{0x3f4b8000},{0x3f4ba000},{0x3f4bc000},{0x3f4be000}, +{0x3f4c0000},{0x3f4c2000},{0x3f4c4000},{0x3f4c6000},{0x3f4c8000},{0x3f4ca000},{0x3f4cc000},{0x3f4ce000},{0x3f4d0000},{0x3f4d2000},{0x3f4d4000},{0x3f4d6000},{0x3f4d8000},{0x3f4da000},{0x3f4dc000},{0x3f4de000},{0x3f4e0000},{0x3f4e2000},{0x3f4e4000},{0x3f4e6000},{0x3f4e8000},{0x3f4ea000},{0x3f4ec000},{0x3f4ee000},{0x3f4f0000},{0x3f4f2000},{0x3f4f4000},{0x3f4f6000},{0x3f4f8000},{0x3f4fa000},{0x3f4fc000},{0x3f4fe000}, +{0x3f500000},{0x3f502000},{0x3f504000},{0x3f506000},{0x3f508000},{0x3f50a000},{0x3f50c000},{0x3f50e000},{0x3f510000},{0x3f512000},{0x3f514000},{0x3f516000},{0x3f518000},{0x3f51a000},{0x3f51c000},{0x3f51e000},{0x3f520000},{0x3f522000},{0x3f524000},{0x3f526000},{0x3f528000},{0x3f52a000},{0x3f52c000},{0x3f52e000},{0x3f530000},{0x3f532000},{0x3f534000},{0x3f536000},{0x3f538000},{0x3f53a000},{0x3f53c000},{0x3f53e000}, +{0x3f540000},{0x3f542000},{0x3f544000},{0x3f546000},{0x3f548000},{0x3f54a000},{0x3f54c000},{0x3f54e000},{0x3f550000},{0x3f552000},{0x3f554000},{0x3f556000},{0x3f558000},{0x3f55a000},{0x3f55c000},{0x3f55e000},{0x3f560000},{0x3f562000},{0x3f564000},{0x3f566000},{0x3f568000},{0x3f56a000},{0x3f56c000},{0x3f56e000},{0x3f570000},{0x3f572000},{0x3f574000},{0x3f576000},{0x3f578000},{0x3f57a000},{0x3f57c000},{0x3f57e000}, +{0x3f580000},{0x3f582000},{0x3f584000},{0x3f586000},{0x3f588000},{0x3f58a000},{0x3f58c000},{0x3f58e000},{0x3f590000},{0x3f592000},{0x3f594000},{0x3f596000},{0x3f598000},{0x3f59a000},{0x3f59c000},{0x3f59e000},{0x3f5a0000},{0x3f5a2000},{0x3f5a4000},{0x3f5a6000},{0x3f5a8000},{0x3f5aa000},{0x3f5ac000},{0x3f5ae000},{0x3f5b0000},{0x3f5b2000},{0x3f5b4000},{0x3f5b6000},{0x3f5b8000},{0x3f5ba000},{0x3f5bc000},{0x3f5be000}, +{0x3f5c0000},{0x3f5c2000},{0x3f5c4000},{0x3f5c6000},{0x3f5c8000},{0x3f5ca000},{0x3f5cc000},{0x3f5ce000},{0x3f5d0000},{0x3f5d2000},{0x3f5d4000},{0x3f5d6000},{0x3f5d8000},{0x3f5da000},{0x3f5dc000},{0x3f5de000},{0x3f5e0000},{0x3f5e2000},{0x3f5e4000},{0x3f5e6000},{0x3f5e8000},{0x3f5ea000},{0x3f5ec000},{0x3f5ee000},{0x3f5f0000},{0x3f5f2000},{0x3f5f4000},{0x3f5f6000},{0x3f5f8000},{0x3f5fa000},{0x3f5fc000},{0x3f5fe000}, +{0x3f600000},{0x3f602000},{0x3f604000},{0x3f606000},{0x3f608000},{0x3f60a000},{0x3f60c000},{0x3f60e000},{0x3f610000},{0x3f612000},{0x3f614000},{0x3f616000},{0x3f618000},{0x3f61a000},{0x3f61c000},{0x3f61e000},{0x3f620000},{0x3f622000},{0x3f624000},{0x3f626000},{0x3f628000},{0x3f62a000},{0x3f62c000},{0x3f62e000},{0x3f630000},{0x3f632000},{0x3f634000},{0x3f636000},{0x3f638000},{0x3f63a000},{0x3f63c000},{0x3f63e000}, +{0x3f640000},{0x3f642000},{0x3f644000},{0x3f646000},{0x3f648000},{0x3f64a000},{0x3f64c000},{0x3f64e000},{0x3f650000},{0x3f652000},{0x3f654000},{0x3f656000},{0x3f658000},{0x3f65a000},{0x3f65c000},{0x3f65e000},{0x3f660000},{0x3f662000},{0x3f664000},{0x3f666000},{0x3f668000},{0x3f66a000},{0x3f66c000},{0x3f66e000},{0x3f670000},{0x3f672000},{0x3f674000},{0x3f676000},{0x3f678000},{0x3f67a000},{0x3f67c000},{0x3f67e000}, +{0x3f680000},{0x3f682000},{0x3f684000},{0x3f686000},{0x3f688000},{0x3f68a000},{0x3f68c000},{0x3f68e000},{0x3f690000},{0x3f692000},{0x3f694000},{0x3f696000},{0x3f698000},{0x3f69a000},{0x3f69c000},{0x3f69e000},{0x3f6a0000},{0x3f6a2000},{0x3f6a4000},{0x3f6a6000},{0x3f6a8000},{0x3f6aa000},{0x3f6ac000},{0x3f6ae000},{0x3f6b0000},{0x3f6b2000},{0x3f6b4000},{0x3f6b6000},{0x3f6b8000},{0x3f6ba000},{0x3f6bc000},{0x3f6be000}, +{0x3f6c0000},{0x3f6c2000},{0x3f6c4000},{0x3f6c6000},{0x3f6c8000},{0x3f6ca000},{0x3f6cc000},{0x3f6ce000},{0x3f6d0000},{0x3f6d2000},{0x3f6d4000},{0x3f6d6000},{0x3f6d8000},{0x3f6da000},{0x3f6dc000},{0x3f6de000},{0x3f6e0000},{0x3f6e2000},{0x3f6e4000},{0x3f6e6000},{0x3f6e8000},{0x3f6ea000},{0x3f6ec000},{0x3f6ee000},{0x3f6f0000},{0x3f6f2000},{0x3f6f4000},{0x3f6f6000},{0x3f6f8000},{0x3f6fa000},{0x3f6fc000},{0x3f6fe000}, +{0x3f700000},{0x3f702000},{0x3f704000},{0x3f706000},{0x3f708000},{0x3f70a000},{0x3f70c000},{0x3f70e000},{0x3f710000},{0x3f712000},{0x3f714000},{0x3f716000},{0x3f718000},{0x3f71a000},{0x3f71c000},{0x3f71e000},{0x3f720000},{0x3f722000},{0x3f724000},{0x3f726000},{0x3f728000},{0x3f72a000},{0x3f72c000},{0x3f72e000},{0x3f730000},{0x3f732000},{0x3f734000},{0x3f736000},{0x3f738000},{0x3f73a000},{0x3f73c000},{0x3f73e000}, +{0x3f740000},{0x3f742000},{0x3f744000},{0x3f746000},{0x3f748000},{0x3f74a000},{0x3f74c000},{0x3f74e000},{0x3f750000},{0x3f752000},{0x3f754000},{0x3f756000},{0x3f758000},{0x3f75a000},{0x3f75c000},{0x3f75e000},{0x3f760000},{0x3f762000},{0x3f764000},{0x3f766000},{0x3f768000},{0x3f76a000},{0x3f76c000},{0x3f76e000},{0x3f770000},{0x3f772000},{0x3f774000},{0x3f776000},{0x3f778000},{0x3f77a000},{0x3f77c000},{0x3f77e000}, +{0x3f780000},{0x3f782000},{0x3f784000},{0x3f786000},{0x3f788000},{0x3f78a000},{0x3f78c000},{0x3f78e000},{0x3f790000},{0x3f792000},{0x3f794000},{0x3f796000},{0x3f798000},{0x3f79a000},{0x3f79c000},{0x3f79e000},{0x3f7a0000},{0x3f7a2000},{0x3f7a4000},{0x3f7a6000},{0x3f7a8000},{0x3f7aa000},{0x3f7ac000},{0x3f7ae000},{0x3f7b0000},{0x3f7b2000},{0x3f7b4000},{0x3f7b6000},{0x3f7b8000},{0x3f7ba000},{0x3f7bc000},{0x3f7be000}, +{0x3f7c0000},{0x3f7c2000},{0x3f7c4000},{0x3f7c6000},{0x3f7c8000},{0x3f7ca000},{0x3f7cc000},{0x3f7ce000},{0x3f7d0000},{0x3f7d2000},{0x3f7d4000},{0x3f7d6000},{0x3f7d8000},{0x3f7da000},{0x3f7dc000},{0x3f7de000},{0x3f7e0000},{0x3f7e2000},{0x3f7e4000},{0x3f7e6000},{0x3f7e8000},{0x3f7ea000},{0x3f7ec000},{0x3f7ee000},{0x3f7f0000},{0x3f7f2000},{0x3f7f4000},{0x3f7f6000},{0x3f7f8000},{0x3f7fa000},{0x3f7fc000},{0x3f7fe000}, +{0x3f800000},{0x3f802000},{0x3f804000},{0x3f806000},{0x3f808000},{0x3f80a000},{0x3f80c000},{0x3f80e000},{0x3f810000},{0x3f812000},{0x3f814000},{0x3f816000},{0x3f818000},{0x3f81a000},{0x3f81c000},{0x3f81e000},{0x3f820000},{0x3f822000},{0x3f824000},{0x3f826000},{0x3f828000},{0x3f82a000},{0x3f82c000},{0x3f82e000},{0x3f830000},{0x3f832000},{0x3f834000},{0x3f836000},{0x3f838000},{0x3f83a000},{0x3f83c000},{0x3f83e000}, +{0x3f840000},{0x3f842000},{0x3f844000},{0x3f846000},{0x3f848000},{0x3f84a000},{0x3f84c000},{0x3f84e000},{0x3f850000},{0x3f852000},{0x3f854000},{0x3f856000},{0x3f858000},{0x3f85a000},{0x3f85c000},{0x3f85e000},{0x3f860000},{0x3f862000},{0x3f864000},{0x3f866000},{0x3f868000},{0x3f86a000},{0x3f86c000},{0x3f86e000},{0x3f870000},{0x3f872000},{0x3f874000},{0x3f876000},{0x3f878000},{0x3f87a000},{0x3f87c000},{0x3f87e000}, +{0x3f880000},{0x3f882000},{0x3f884000},{0x3f886000},{0x3f888000},{0x3f88a000},{0x3f88c000},{0x3f88e000},{0x3f890000},{0x3f892000},{0x3f894000},{0x3f896000},{0x3f898000},{0x3f89a000},{0x3f89c000},{0x3f89e000},{0x3f8a0000},{0x3f8a2000},{0x3f8a4000},{0x3f8a6000},{0x3f8a8000},{0x3f8aa000},{0x3f8ac000},{0x3f8ae000},{0x3f8b0000},{0x3f8b2000},{0x3f8b4000},{0x3f8b6000},{0x3f8b8000},{0x3f8ba000},{0x3f8bc000},{0x3f8be000}, +{0x3f8c0000},{0x3f8c2000},{0x3f8c4000},{0x3f8c6000},{0x3f8c8000},{0x3f8ca000},{0x3f8cc000},{0x3f8ce000},{0x3f8d0000},{0x3f8d2000},{0x3f8d4000},{0x3f8d6000},{0x3f8d8000},{0x3f8da000},{0x3f8dc000},{0x3f8de000},{0x3f8e0000},{0x3f8e2000},{0x3f8e4000},{0x3f8e6000},{0x3f8e8000},{0x3f8ea000},{0x3f8ec000},{0x3f8ee000},{0x3f8f0000},{0x3f8f2000},{0x3f8f4000},{0x3f8f6000},{0x3f8f8000},{0x3f8fa000},{0x3f8fc000},{0x3f8fe000}, +{0x3f900000},{0x3f902000},{0x3f904000},{0x3f906000},{0x3f908000},{0x3f90a000},{0x3f90c000},{0x3f90e000},{0x3f910000},{0x3f912000},{0x3f914000},{0x3f916000},{0x3f918000},{0x3f91a000},{0x3f91c000},{0x3f91e000},{0x3f920000},{0x3f922000},{0x3f924000},{0x3f926000},{0x3f928000},{0x3f92a000},{0x3f92c000},{0x3f92e000},{0x3f930000},{0x3f932000},{0x3f934000},{0x3f936000},{0x3f938000},{0x3f93a000},{0x3f93c000},{0x3f93e000}, +{0x3f940000},{0x3f942000},{0x3f944000},{0x3f946000},{0x3f948000},{0x3f94a000},{0x3f94c000},{0x3f94e000},{0x3f950000},{0x3f952000},{0x3f954000},{0x3f956000},{0x3f958000},{0x3f95a000},{0x3f95c000},{0x3f95e000},{0x3f960000},{0x3f962000},{0x3f964000},{0x3f966000},{0x3f968000},{0x3f96a000},{0x3f96c000},{0x3f96e000},{0x3f970000},{0x3f972000},{0x3f974000},{0x3f976000},{0x3f978000},{0x3f97a000},{0x3f97c000},{0x3f97e000}, +{0x3f980000},{0x3f982000},{0x3f984000},{0x3f986000},{0x3f988000},{0x3f98a000},{0x3f98c000},{0x3f98e000},{0x3f990000},{0x3f992000},{0x3f994000},{0x3f996000},{0x3f998000},{0x3f99a000},{0x3f99c000},{0x3f99e000},{0x3f9a0000},{0x3f9a2000},{0x3f9a4000},{0x3f9a6000},{0x3f9a8000},{0x3f9aa000},{0x3f9ac000},{0x3f9ae000},{0x3f9b0000},{0x3f9b2000},{0x3f9b4000},{0x3f9b6000},{0x3f9b8000},{0x3f9ba000},{0x3f9bc000},{0x3f9be000}, +{0x3f9c0000},{0x3f9c2000},{0x3f9c4000},{0x3f9c6000},{0x3f9c8000},{0x3f9ca000},{0x3f9cc000},{0x3f9ce000},{0x3f9d0000},{0x3f9d2000},{0x3f9d4000},{0x3f9d6000},{0x3f9d8000},{0x3f9da000},{0x3f9dc000},{0x3f9de000},{0x3f9e0000},{0x3f9e2000},{0x3f9e4000},{0x3f9e6000},{0x3f9e8000},{0x3f9ea000},{0x3f9ec000},{0x3f9ee000},{0x3f9f0000},{0x3f9f2000},{0x3f9f4000},{0x3f9f6000},{0x3f9f8000},{0x3f9fa000},{0x3f9fc000},{0x3f9fe000}, +{0x3fa00000},{0x3fa02000},{0x3fa04000},{0x3fa06000},{0x3fa08000},{0x3fa0a000},{0x3fa0c000},{0x3fa0e000},{0x3fa10000},{0x3fa12000},{0x3fa14000},{0x3fa16000},{0x3fa18000},{0x3fa1a000},{0x3fa1c000},{0x3fa1e000},{0x3fa20000},{0x3fa22000},{0x3fa24000},{0x3fa26000},{0x3fa28000},{0x3fa2a000},{0x3fa2c000},{0x3fa2e000},{0x3fa30000},{0x3fa32000},{0x3fa34000},{0x3fa36000},{0x3fa38000},{0x3fa3a000},{0x3fa3c000},{0x3fa3e000}, +{0x3fa40000},{0x3fa42000},{0x3fa44000},{0x3fa46000},{0x3fa48000},{0x3fa4a000},{0x3fa4c000},{0x3fa4e000},{0x3fa50000},{0x3fa52000},{0x3fa54000},{0x3fa56000},{0x3fa58000},{0x3fa5a000},{0x3fa5c000},{0x3fa5e000},{0x3fa60000},{0x3fa62000},{0x3fa64000},{0x3fa66000},{0x3fa68000},{0x3fa6a000},{0x3fa6c000},{0x3fa6e000},{0x3fa70000},{0x3fa72000},{0x3fa74000},{0x3fa76000},{0x3fa78000},{0x3fa7a000},{0x3fa7c000},{0x3fa7e000}, +{0x3fa80000},{0x3fa82000},{0x3fa84000},{0x3fa86000},{0x3fa88000},{0x3fa8a000},{0x3fa8c000},{0x3fa8e000},{0x3fa90000},{0x3fa92000},{0x3fa94000},{0x3fa96000},{0x3fa98000},{0x3fa9a000},{0x3fa9c000},{0x3fa9e000},{0x3faa0000},{0x3faa2000},{0x3faa4000},{0x3faa6000},{0x3faa8000},{0x3faaa000},{0x3faac000},{0x3faae000},{0x3fab0000},{0x3fab2000},{0x3fab4000},{0x3fab6000},{0x3fab8000},{0x3faba000},{0x3fabc000},{0x3fabe000}, +{0x3fac0000},{0x3fac2000},{0x3fac4000},{0x3fac6000},{0x3fac8000},{0x3faca000},{0x3facc000},{0x3face000},{0x3fad0000},{0x3fad2000},{0x3fad4000},{0x3fad6000},{0x3fad8000},{0x3fada000},{0x3fadc000},{0x3fade000},{0x3fae0000},{0x3fae2000},{0x3fae4000},{0x3fae6000},{0x3fae8000},{0x3faea000},{0x3faec000},{0x3faee000},{0x3faf0000},{0x3faf2000},{0x3faf4000},{0x3faf6000},{0x3faf8000},{0x3fafa000},{0x3fafc000},{0x3fafe000}, +{0x3fb00000},{0x3fb02000},{0x3fb04000},{0x3fb06000},{0x3fb08000},{0x3fb0a000},{0x3fb0c000},{0x3fb0e000},{0x3fb10000},{0x3fb12000},{0x3fb14000},{0x3fb16000},{0x3fb18000},{0x3fb1a000},{0x3fb1c000},{0x3fb1e000},{0x3fb20000},{0x3fb22000},{0x3fb24000},{0x3fb26000},{0x3fb28000},{0x3fb2a000},{0x3fb2c000},{0x3fb2e000},{0x3fb30000},{0x3fb32000},{0x3fb34000},{0x3fb36000},{0x3fb38000},{0x3fb3a000},{0x3fb3c000},{0x3fb3e000}, +{0x3fb40000},{0x3fb42000},{0x3fb44000},{0x3fb46000},{0x3fb48000},{0x3fb4a000},{0x3fb4c000},{0x3fb4e000},{0x3fb50000},{0x3fb52000},{0x3fb54000},{0x3fb56000},{0x3fb58000},{0x3fb5a000},{0x3fb5c000},{0x3fb5e000},{0x3fb60000},{0x3fb62000},{0x3fb64000},{0x3fb66000},{0x3fb68000},{0x3fb6a000},{0x3fb6c000},{0x3fb6e000},{0x3fb70000},{0x3fb72000},{0x3fb74000},{0x3fb76000},{0x3fb78000},{0x3fb7a000},{0x3fb7c000},{0x3fb7e000}, +{0x3fb80000},{0x3fb82000},{0x3fb84000},{0x3fb86000},{0x3fb88000},{0x3fb8a000},{0x3fb8c000},{0x3fb8e000},{0x3fb90000},{0x3fb92000},{0x3fb94000},{0x3fb96000},{0x3fb98000},{0x3fb9a000},{0x3fb9c000},{0x3fb9e000},{0x3fba0000},{0x3fba2000},{0x3fba4000},{0x3fba6000},{0x3fba8000},{0x3fbaa000},{0x3fbac000},{0x3fbae000},{0x3fbb0000},{0x3fbb2000},{0x3fbb4000},{0x3fbb6000},{0x3fbb8000},{0x3fbba000},{0x3fbbc000},{0x3fbbe000}, +{0x3fbc0000},{0x3fbc2000},{0x3fbc4000},{0x3fbc6000},{0x3fbc8000},{0x3fbca000},{0x3fbcc000},{0x3fbce000},{0x3fbd0000},{0x3fbd2000},{0x3fbd4000},{0x3fbd6000},{0x3fbd8000},{0x3fbda000},{0x3fbdc000},{0x3fbde000},{0x3fbe0000},{0x3fbe2000},{0x3fbe4000},{0x3fbe6000},{0x3fbe8000},{0x3fbea000},{0x3fbec000},{0x3fbee000},{0x3fbf0000},{0x3fbf2000},{0x3fbf4000},{0x3fbf6000},{0x3fbf8000},{0x3fbfa000},{0x3fbfc000},{0x3fbfe000}, +{0x3fc00000},{0x3fc02000},{0x3fc04000},{0x3fc06000},{0x3fc08000},{0x3fc0a000},{0x3fc0c000},{0x3fc0e000},{0x3fc10000},{0x3fc12000},{0x3fc14000},{0x3fc16000},{0x3fc18000},{0x3fc1a000},{0x3fc1c000},{0x3fc1e000},{0x3fc20000},{0x3fc22000},{0x3fc24000},{0x3fc26000},{0x3fc28000},{0x3fc2a000},{0x3fc2c000},{0x3fc2e000},{0x3fc30000},{0x3fc32000},{0x3fc34000},{0x3fc36000},{0x3fc38000},{0x3fc3a000},{0x3fc3c000},{0x3fc3e000}, +{0x3fc40000},{0x3fc42000},{0x3fc44000},{0x3fc46000},{0x3fc48000},{0x3fc4a000},{0x3fc4c000},{0x3fc4e000},{0x3fc50000},{0x3fc52000},{0x3fc54000},{0x3fc56000},{0x3fc58000},{0x3fc5a000},{0x3fc5c000},{0x3fc5e000},{0x3fc60000},{0x3fc62000},{0x3fc64000},{0x3fc66000},{0x3fc68000},{0x3fc6a000},{0x3fc6c000},{0x3fc6e000},{0x3fc70000},{0x3fc72000},{0x3fc74000},{0x3fc76000},{0x3fc78000},{0x3fc7a000},{0x3fc7c000},{0x3fc7e000}, +{0x3fc80000},{0x3fc82000},{0x3fc84000},{0x3fc86000},{0x3fc88000},{0x3fc8a000},{0x3fc8c000},{0x3fc8e000},{0x3fc90000},{0x3fc92000},{0x3fc94000},{0x3fc96000},{0x3fc98000},{0x3fc9a000},{0x3fc9c000},{0x3fc9e000},{0x3fca0000},{0x3fca2000},{0x3fca4000},{0x3fca6000},{0x3fca8000},{0x3fcaa000},{0x3fcac000},{0x3fcae000},{0x3fcb0000},{0x3fcb2000},{0x3fcb4000},{0x3fcb6000},{0x3fcb8000},{0x3fcba000},{0x3fcbc000},{0x3fcbe000}, +{0x3fcc0000},{0x3fcc2000},{0x3fcc4000},{0x3fcc6000},{0x3fcc8000},{0x3fcca000},{0x3fccc000},{0x3fcce000},{0x3fcd0000},{0x3fcd2000},{0x3fcd4000},{0x3fcd6000},{0x3fcd8000},{0x3fcda000},{0x3fcdc000},{0x3fcde000},{0x3fce0000},{0x3fce2000},{0x3fce4000},{0x3fce6000},{0x3fce8000},{0x3fcea000},{0x3fcec000},{0x3fcee000},{0x3fcf0000},{0x3fcf2000},{0x3fcf4000},{0x3fcf6000},{0x3fcf8000},{0x3fcfa000},{0x3fcfc000},{0x3fcfe000}, +{0x3fd00000},{0x3fd02000},{0x3fd04000},{0x3fd06000},{0x3fd08000},{0x3fd0a000},{0x3fd0c000},{0x3fd0e000},{0x3fd10000},{0x3fd12000},{0x3fd14000},{0x3fd16000},{0x3fd18000},{0x3fd1a000},{0x3fd1c000},{0x3fd1e000},{0x3fd20000},{0x3fd22000},{0x3fd24000},{0x3fd26000},{0x3fd28000},{0x3fd2a000},{0x3fd2c000},{0x3fd2e000},{0x3fd30000},{0x3fd32000},{0x3fd34000},{0x3fd36000},{0x3fd38000},{0x3fd3a000},{0x3fd3c000},{0x3fd3e000}, +{0x3fd40000},{0x3fd42000},{0x3fd44000},{0x3fd46000},{0x3fd48000},{0x3fd4a000},{0x3fd4c000},{0x3fd4e000},{0x3fd50000},{0x3fd52000},{0x3fd54000},{0x3fd56000},{0x3fd58000},{0x3fd5a000},{0x3fd5c000},{0x3fd5e000},{0x3fd60000},{0x3fd62000},{0x3fd64000},{0x3fd66000},{0x3fd68000},{0x3fd6a000},{0x3fd6c000},{0x3fd6e000},{0x3fd70000},{0x3fd72000},{0x3fd74000},{0x3fd76000},{0x3fd78000},{0x3fd7a000},{0x3fd7c000},{0x3fd7e000}, +{0x3fd80000},{0x3fd82000},{0x3fd84000},{0x3fd86000},{0x3fd88000},{0x3fd8a000},{0x3fd8c000},{0x3fd8e000},{0x3fd90000},{0x3fd92000},{0x3fd94000},{0x3fd96000},{0x3fd98000},{0x3fd9a000},{0x3fd9c000},{0x3fd9e000},{0x3fda0000},{0x3fda2000},{0x3fda4000},{0x3fda6000},{0x3fda8000},{0x3fdaa000},{0x3fdac000},{0x3fdae000},{0x3fdb0000},{0x3fdb2000},{0x3fdb4000},{0x3fdb6000},{0x3fdb8000},{0x3fdba000},{0x3fdbc000},{0x3fdbe000}, +{0x3fdc0000},{0x3fdc2000},{0x3fdc4000},{0x3fdc6000},{0x3fdc8000},{0x3fdca000},{0x3fdcc000},{0x3fdce000},{0x3fdd0000},{0x3fdd2000},{0x3fdd4000},{0x3fdd6000},{0x3fdd8000},{0x3fdda000},{0x3fddc000},{0x3fdde000},{0x3fde0000},{0x3fde2000},{0x3fde4000},{0x3fde6000},{0x3fde8000},{0x3fdea000},{0x3fdec000},{0x3fdee000},{0x3fdf0000},{0x3fdf2000},{0x3fdf4000},{0x3fdf6000},{0x3fdf8000},{0x3fdfa000},{0x3fdfc000},{0x3fdfe000}, +{0x3fe00000},{0x3fe02000},{0x3fe04000},{0x3fe06000},{0x3fe08000},{0x3fe0a000},{0x3fe0c000},{0x3fe0e000},{0x3fe10000},{0x3fe12000},{0x3fe14000},{0x3fe16000},{0x3fe18000},{0x3fe1a000},{0x3fe1c000},{0x3fe1e000},{0x3fe20000},{0x3fe22000},{0x3fe24000},{0x3fe26000},{0x3fe28000},{0x3fe2a000},{0x3fe2c000},{0x3fe2e000},{0x3fe30000},{0x3fe32000},{0x3fe34000},{0x3fe36000},{0x3fe38000},{0x3fe3a000},{0x3fe3c000},{0x3fe3e000}, +{0x3fe40000},{0x3fe42000},{0x3fe44000},{0x3fe46000},{0x3fe48000},{0x3fe4a000},{0x3fe4c000},{0x3fe4e000},{0x3fe50000},{0x3fe52000},{0x3fe54000},{0x3fe56000},{0x3fe58000},{0x3fe5a000},{0x3fe5c000},{0x3fe5e000},{0x3fe60000},{0x3fe62000},{0x3fe64000},{0x3fe66000},{0x3fe68000},{0x3fe6a000},{0x3fe6c000},{0x3fe6e000},{0x3fe70000},{0x3fe72000},{0x3fe74000},{0x3fe76000},{0x3fe78000},{0x3fe7a000},{0x3fe7c000},{0x3fe7e000}, +{0x3fe80000},{0x3fe82000},{0x3fe84000},{0x3fe86000},{0x3fe88000},{0x3fe8a000},{0x3fe8c000},{0x3fe8e000},{0x3fe90000},{0x3fe92000},{0x3fe94000},{0x3fe96000},{0x3fe98000},{0x3fe9a000},{0x3fe9c000},{0x3fe9e000},{0x3fea0000},{0x3fea2000},{0x3fea4000},{0x3fea6000},{0x3fea8000},{0x3feaa000},{0x3feac000},{0x3feae000},{0x3feb0000},{0x3feb2000},{0x3feb4000},{0x3feb6000},{0x3feb8000},{0x3feba000},{0x3febc000},{0x3febe000}, +{0x3fec0000},{0x3fec2000},{0x3fec4000},{0x3fec6000},{0x3fec8000},{0x3feca000},{0x3fecc000},{0x3fece000},{0x3fed0000},{0x3fed2000},{0x3fed4000},{0x3fed6000},{0x3fed8000},{0x3feda000},{0x3fedc000},{0x3fede000},{0x3fee0000},{0x3fee2000},{0x3fee4000},{0x3fee6000},{0x3fee8000},{0x3feea000},{0x3feec000},{0x3feee000},{0x3fef0000},{0x3fef2000},{0x3fef4000},{0x3fef6000},{0x3fef8000},{0x3fefa000},{0x3fefc000},{0x3fefe000}, +{0x3ff00000},{0x3ff02000},{0x3ff04000},{0x3ff06000},{0x3ff08000},{0x3ff0a000},{0x3ff0c000},{0x3ff0e000},{0x3ff10000},{0x3ff12000},{0x3ff14000},{0x3ff16000},{0x3ff18000},{0x3ff1a000},{0x3ff1c000},{0x3ff1e000},{0x3ff20000},{0x3ff22000},{0x3ff24000},{0x3ff26000},{0x3ff28000},{0x3ff2a000},{0x3ff2c000},{0x3ff2e000},{0x3ff30000},{0x3ff32000},{0x3ff34000},{0x3ff36000},{0x3ff38000},{0x3ff3a000},{0x3ff3c000},{0x3ff3e000}, +{0x3ff40000},{0x3ff42000},{0x3ff44000},{0x3ff46000},{0x3ff48000},{0x3ff4a000},{0x3ff4c000},{0x3ff4e000},{0x3ff50000},{0x3ff52000},{0x3ff54000},{0x3ff56000},{0x3ff58000},{0x3ff5a000},{0x3ff5c000},{0x3ff5e000},{0x3ff60000},{0x3ff62000},{0x3ff64000},{0x3ff66000},{0x3ff68000},{0x3ff6a000},{0x3ff6c000},{0x3ff6e000},{0x3ff70000},{0x3ff72000},{0x3ff74000},{0x3ff76000},{0x3ff78000},{0x3ff7a000},{0x3ff7c000},{0x3ff7e000}, +{0x3ff80000},{0x3ff82000},{0x3ff84000},{0x3ff86000},{0x3ff88000},{0x3ff8a000},{0x3ff8c000},{0x3ff8e000},{0x3ff90000},{0x3ff92000},{0x3ff94000},{0x3ff96000},{0x3ff98000},{0x3ff9a000},{0x3ff9c000},{0x3ff9e000},{0x3ffa0000},{0x3ffa2000},{0x3ffa4000},{0x3ffa6000},{0x3ffa8000},{0x3ffaa000},{0x3ffac000},{0x3ffae000},{0x3ffb0000},{0x3ffb2000},{0x3ffb4000},{0x3ffb6000},{0x3ffb8000},{0x3ffba000},{0x3ffbc000},{0x3ffbe000}, +{0x3ffc0000},{0x3ffc2000},{0x3ffc4000},{0x3ffc6000},{0x3ffc8000},{0x3ffca000},{0x3ffcc000},{0x3ffce000},{0x3ffd0000},{0x3ffd2000},{0x3ffd4000},{0x3ffd6000},{0x3ffd8000},{0x3ffda000},{0x3ffdc000},{0x3ffde000},{0x3ffe0000},{0x3ffe2000},{0x3ffe4000},{0x3ffe6000},{0x3ffe8000},{0x3ffea000},{0x3ffec000},{0x3ffee000},{0x3fff0000},{0x3fff2000},{0x3fff4000},{0x3fff6000},{0x3fff8000},{0x3fffa000},{0x3fffc000},{0x3fffe000}, +{0x40000000},{0x40002000},{0x40004000},{0x40006000},{0x40008000},{0x4000a000},{0x4000c000},{0x4000e000},{0x40010000},{0x40012000},{0x40014000},{0x40016000},{0x40018000},{0x4001a000},{0x4001c000},{0x4001e000},{0x40020000},{0x40022000},{0x40024000},{0x40026000},{0x40028000},{0x4002a000},{0x4002c000},{0x4002e000},{0x40030000},{0x40032000},{0x40034000},{0x40036000},{0x40038000},{0x4003a000},{0x4003c000},{0x4003e000}, +{0x40040000},{0x40042000},{0x40044000},{0x40046000},{0x40048000},{0x4004a000},{0x4004c000},{0x4004e000},{0x40050000},{0x40052000},{0x40054000},{0x40056000},{0x40058000},{0x4005a000},{0x4005c000},{0x4005e000},{0x40060000},{0x40062000},{0x40064000},{0x40066000},{0x40068000},{0x4006a000},{0x4006c000},{0x4006e000},{0x40070000},{0x40072000},{0x40074000},{0x40076000},{0x40078000},{0x4007a000},{0x4007c000},{0x4007e000}, +{0x40080000},{0x40082000},{0x40084000},{0x40086000},{0x40088000},{0x4008a000},{0x4008c000},{0x4008e000},{0x40090000},{0x40092000},{0x40094000},{0x40096000},{0x40098000},{0x4009a000},{0x4009c000},{0x4009e000},{0x400a0000},{0x400a2000},{0x400a4000},{0x400a6000},{0x400a8000},{0x400aa000},{0x400ac000},{0x400ae000},{0x400b0000},{0x400b2000},{0x400b4000},{0x400b6000},{0x400b8000},{0x400ba000},{0x400bc000},{0x400be000}, +{0x400c0000},{0x400c2000},{0x400c4000},{0x400c6000},{0x400c8000},{0x400ca000},{0x400cc000},{0x400ce000},{0x400d0000},{0x400d2000},{0x400d4000},{0x400d6000},{0x400d8000},{0x400da000},{0x400dc000},{0x400de000},{0x400e0000},{0x400e2000},{0x400e4000},{0x400e6000},{0x400e8000},{0x400ea000},{0x400ec000},{0x400ee000},{0x400f0000},{0x400f2000},{0x400f4000},{0x400f6000},{0x400f8000},{0x400fa000},{0x400fc000},{0x400fe000}, +{0x40100000},{0x40102000},{0x40104000},{0x40106000},{0x40108000},{0x4010a000},{0x4010c000},{0x4010e000},{0x40110000},{0x40112000},{0x40114000},{0x40116000},{0x40118000},{0x4011a000},{0x4011c000},{0x4011e000},{0x40120000},{0x40122000},{0x40124000},{0x40126000},{0x40128000},{0x4012a000},{0x4012c000},{0x4012e000},{0x40130000},{0x40132000},{0x40134000},{0x40136000},{0x40138000},{0x4013a000},{0x4013c000},{0x4013e000}, +{0x40140000},{0x40142000},{0x40144000},{0x40146000},{0x40148000},{0x4014a000},{0x4014c000},{0x4014e000},{0x40150000},{0x40152000},{0x40154000},{0x40156000},{0x40158000},{0x4015a000},{0x4015c000},{0x4015e000},{0x40160000},{0x40162000},{0x40164000},{0x40166000},{0x40168000},{0x4016a000},{0x4016c000},{0x4016e000},{0x40170000},{0x40172000},{0x40174000},{0x40176000},{0x40178000},{0x4017a000},{0x4017c000},{0x4017e000}, +{0x40180000},{0x40182000},{0x40184000},{0x40186000},{0x40188000},{0x4018a000},{0x4018c000},{0x4018e000},{0x40190000},{0x40192000},{0x40194000},{0x40196000},{0x40198000},{0x4019a000},{0x4019c000},{0x4019e000},{0x401a0000},{0x401a2000},{0x401a4000},{0x401a6000},{0x401a8000},{0x401aa000},{0x401ac000},{0x401ae000},{0x401b0000},{0x401b2000},{0x401b4000},{0x401b6000},{0x401b8000},{0x401ba000},{0x401bc000},{0x401be000}, +{0x401c0000},{0x401c2000},{0x401c4000},{0x401c6000},{0x401c8000},{0x401ca000},{0x401cc000},{0x401ce000},{0x401d0000},{0x401d2000},{0x401d4000},{0x401d6000},{0x401d8000},{0x401da000},{0x401dc000},{0x401de000},{0x401e0000},{0x401e2000},{0x401e4000},{0x401e6000},{0x401e8000},{0x401ea000},{0x401ec000},{0x401ee000},{0x401f0000},{0x401f2000},{0x401f4000},{0x401f6000},{0x401f8000},{0x401fa000},{0x401fc000},{0x401fe000}, +{0x40200000},{0x40202000},{0x40204000},{0x40206000},{0x40208000},{0x4020a000},{0x4020c000},{0x4020e000},{0x40210000},{0x40212000},{0x40214000},{0x40216000},{0x40218000},{0x4021a000},{0x4021c000},{0x4021e000},{0x40220000},{0x40222000},{0x40224000},{0x40226000},{0x40228000},{0x4022a000},{0x4022c000},{0x4022e000},{0x40230000},{0x40232000},{0x40234000},{0x40236000},{0x40238000},{0x4023a000},{0x4023c000},{0x4023e000}, +{0x40240000},{0x40242000},{0x40244000},{0x40246000},{0x40248000},{0x4024a000},{0x4024c000},{0x4024e000},{0x40250000},{0x40252000},{0x40254000},{0x40256000},{0x40258000},{0x4025a000},{0x4025c000},{0x4025e000},{0x40260000},{0x40262000},{0x40264000},{0x40266000},{0x40268000},{0x4026a000},{0x4026c000},{0x4026e000},{0x40270000},{0x40272000},{0x40274000},{0x40276000},{0x40278000},{0x4027a000},{0x4027c000},{0x4027e000}, +{0x40280000},{0x40282000},{0x40284000},{0x40286000},{0x40288000},{0x4028a000},{0x4028c000},{0x4028e000},{0x40290000},{0x40292000},{0x40294000},{0x40296000},{0x40298000},{0x4029a000},{0x4029c000},{0x4029e000},{0x402a0000},{0x402a2000},{0x402a4000},{0x402a6000},{0x402a8000},{0x402aa000},{0x402ac000},{0x402ae000},{0x402b0000},{0x402b2000},{0x402b4000},{0x402b6000},{0x402b8000},{0x402ba000},{0x402bc000},{0x402be000}, +{0x402c0000},{0x402c2000},{0x402c4000},{0x402c6000},{0x402c8000},{0x402ca000},{0x402cc000},{0x402ce000},{0x402d0000},{0x402d2000},{0x402d4000},{0x402d6000},{0x402d8000},{0x402da000},{0x402dc000},{0x402de000},{0x402e0000},{0x402e2000},{0x402e4000},{0x402e6000},{0x402e8000},{0x402ea000},{0x402ec000},{0x402ee000},{0x402f0000},{0x402f2000},{0x402f4000},{0x402f6000},{0x402f8000},{0x402fa000},{0x402fc000},{0x402fe000}, +{0x40300000},{0x40302000},{0x40304000},{0x40306000},{0x40308000},{0x4030a000},{0x4030c000},{0x4030e000},{0x40310000},{0x40312000},{0x40314000},{0x40316000},{0x40318000},{0x4031a000},{0x4031c000},{0x4031e000},{0x40320000},{0x40322000},{0x40324000},{0x40326000},{0x40328000},{0x4032a000},{0x4032c000},{0x4032e000},{0x40330000},{0x40332000},{0x40334000},{0x40336000},{0x40338000},{0x4033a000},{0x4033c000},{0x4033e000}, +{0x40340000},{0x40342000},{0x40344000},{0x40346000},{0x40348000},{0x4034a000},{0x4034c000},{0x4034e000},{0x40350000},{0x40352000},{0x40354000},{0x40356000},{0x40358000},{0x4035a000},{0x4035c000},{0x4035e000},{0x40360000},{0x40362000},{0x40364000},{0x40366000},{0x40368000},{0x4036a000},{0x4036c000},{0x4036e000},{0x40370000},{0x40372000},{0x40374000},{0x40376000},{0x40378000},{0x4037a000},{0x4037c000},{0x4037e000}, +{0x40380000},{0x40382000},{0x40384000},{0x40386000},{0x40388000},{0x4038a000},{0x4038c000},{0x4038e000},{0x40390000},{0x40392000},{0x40394000},{0x40396000},{0x40398000},{0x4039a000},{0x4039c000},{0x4039e000},{0x403a0000},{0x403a2000},{0x403a4000},{0x403a6000},{0x403a8000},{0x403aa000},{0x403ac000},{0x403ae000},{0x403b0000},{0x403b2000},{0x403b4000},{0x403b6000},{0x403b8000},{0x403ba000},{0x403bc000},{0x403be000}, +{0x403c0000},{0x403c2000},{0x403c4000},{0x403c6000},{0x403c8000},{0x403ca000},{0x403cc000},{0x403ce000},{0x403d0000},{0x403d2000},{0x403d4000},{0x403d6000},{0x403d8000},{0x403da000},{0x403dc000},{0x403de000},{0x403e0000},{0x403e2000},{0x403e4000},{0x403e6000},{0x403e8000},{0x403ea000},{0x403ec000},{0x403ee000},{0x403f0000},{0x403f2000},{0x403f4000},{0x403f6000},{0x403f8000},{0x403fa000},{0x403fc000},{0x403fe000}, +{0x40400000},{0x40402000},{0x40404000},{0x40406000},{0x40408000},{0x4040a000},{0x4040c000},{0x4040e000},{0x40410000},{0x40412000},{0x40414000},{0x40416000},{0x40418000},{0x4041a000},{0x4041c000},{0x4041e000},{0x40420000},{0x40422000},{0x40424000},{0x40426000},{0x40428000},{0x4042a000},{0x4042c000},{0x4042e000},{0x40430000},{0x40432000},{0x40434000},{0x40436000},{0x40438000},{0x4043a000},{0x4043c000},{0x4043e000}, +{0x40440000},{0x40442000},{0x40444000},{0x40446000},{0x40448000},{0x4044a000},{0x4044c000},{0x4044e000},{0x40450000},{0x40452000},{0x40454000},{0x40456000},{0x40458000},{0x4045a000},{0x4045c000},{0x4045e000},{0x40460000},{0x40462000},{0x40464000},{0x40466000},{0x40468000},{0x4046a000},{0x4046c000},{0x4046e000},{0x40470000},{0x40472000},{0x40474000},{0x40476000},{0x40478000},{0x4047a000},{0x4047c000},{0x4047e000}, +{0x40480000},{0x40482000},{0x40484000},{0x40486000},{0x40488000},{0x4048a000},{0x4048c000},{0x4048e000},{0x40490000},{0x40492000},{0x40494000},{0x40496000},{0x40498000},{0x4049a000},{0x4049c000},{0x4049e000},{0x404a0000},{0x404a2000},{0x404a4000},{0x404a6000},{0x404a8000},{0x404aa000},{0x404ac000},{0x404ae000},{0x404b0000},{0x404b2000},{0x404b4000},{0x404b6000},{0x404b8000},{0x404ba000},{0x404bc000},{0x404be000}, +{0x404c0000},{0x404c2000},{0x404c4000},{0x404c6000},{0x404c8000},{0x404ca000},{0x404cc000},{0x404ce000},{0x404d0000},{0x404d2000},{0x404d4000},{0x404d6000},{0x404d8000},{0x404da000},{0x404dc000},{0x404de000},{0x404e0000},{0x404e2000},{0x404e4000},{0x404e6000},{0x404e8000},{0x404ea000},{0x404ec000},{0x404ee000},{0x404f0000},{0x404f2000},{0x404f4000},{0x404f6000},{0x404f8000},{0x404fa000},{0x404fc000},{0x404fe000}, +{0x40500000},{0x40502000},{0x40504000},{0x40506000},{0x40508000},{0x4050a000},{0x4050c000},{0x4050e000},{0x40510000},{0x40512000},{0x40514000},{0x40516000},{0x40518000},{0x4051a000},{0x4051c000},{0x4051e000},{0x40520000},{0x40522000},{0x40524000},{0x40526000},{0x40528000},{0x4052a000},{0x4052c000},{0x4052e000},{0x40530000},{0x40532000},{0x40534000},{0x40536000},{0x40538000},{0x4053a000},{0x4053c000},{0x4053e000}, +{0x40540000},{0x40542000},{0x40544000},{0x40546000},{0x40548000},{0x4054a000},{0x4054c000},{0x4054e000},{0x40550000},{0x40552000},{0x40554000},{0x40556000},{0x40558000},{0x4055a000},{0x4055c000},{0x4055e000},{0x40560000},{0x40562000},{0x40564000},{0x40566000},{0x40568000},{0x4056a000},{0x4056c000},{0x4056e000},{0x40570000},{0x40572000},{0x40574000},{0x40576000},{0x40578000},{0x4057a000},{0x4057c000},{0x4057e000}, +{0x40580000},{0x40582000},{0x40584000},{0x40586000},{0x40588000},{0x4058a000},{0x4058c000},{0x4058e000},{0x40590000},{0x40592000},{0x40594000},{0x40596000},{0x40598000},{0x4059a000},{0x4059c000},{0x4059e000},{0x405a0000},{0x405a2000},{0x405a4000},{0x405a6000},{0x405a8000},{0x405aa000},{0x405ac000},{0x405ae000},{0x405b0000},{0x405b2000},{0x405b4000},{0x405b6000},{0x405b8000},{0x405ba000},{0x405bc000},{0x405be000}, +{0x405c0000},{0x405c2000},{0x405c4000},{0x405c6000},{0x405c8000},{0x405ca000},{0x405cc000},{0x405ce000},{0x405d0000},{0x405d2000},{0x405d4000},{0x405d6000},{0x405d8000},{0x405da000},{0x405dc000},{0x405de000},{0x405e0000},{0x405e2000},{0x405e4000},{0x405e6000},{0x405e8000},{0x405ea000},{0x405ec000},{0x405ee000},{0x405f0000},{0x405f2000},{0x405f4000},{0x405f6000},{0x405f8000},{0x405fa000},{0x405fc000},{0x405fe000}, +{0x40600000},{0x40602000},{0x40604000},{0x40606000},{0x40608000},{0x4060a000},{0x4060c000},{0x4060e000},{0x40610000},{0x40612000},{0x40614000},{0x40616000},{0x40618000},{0x4061a000},{0x4061c000},{0x4061e000},{0x40620000},{0x40622000},{0x40624000},{0x40626000},{0x40628000},{0x4062a000},{0x4062c000},{0x4062e000},{0x40630000},{0x40632000},{0x40634000},{0x40636000},{0x40638000},{0x4063a000},{0x4063c000},{0x4063e000}, +{0x40640000},{0x40642000},{0x40644000},{0x40646000},{0x40648000},{0x4064a000},{0x4064c000},{0x4064e000},{0x40650000},{0x40652000},{0x40654000},{0x40656000},{0x40658000},{0x4065a000},{0x4065c000},{0x4065e000},{0x40660000},{0x40662000},{0x40664000},{0x40666000},{0x40668000},{0x4066a000},{0x4066c000},{0x4066e000},{0x40670000},{0x40672000},{0x40674000},{0x40676000},{0x40678000},{0x4067a000},{0x4067c000},{0x4067e000}, +{0x40680000},{0x40682000},{0x40684000},{0x40686000},{0x40688000},{0x4068a000},{0x4068c000},{0x4068e000},{0x40690000},{0x40692000},{0x40694000},{0x40696000},{0x40698000},{0x4069a000},{0x4069c000},{0x4069e000},{0x406a0000},{0x406a2000},{0x406a4000},{0x406a6000},{0x406a8000},{0x406aa000},{0x406ac000},{0x406ae000},{0x406b0000},{0x406b2000},{0x406b4000},{0x406b6000},{0x406b8000},{0x406ba000},{0x406bc000},{0x406be000}, +{0x406c0000},{0x406c2000},{0x406c4000},{0x406c6000},{0x406c8000},{0x406ca000},{0x406cc000},{0x406ce000},{0x406d0000},{0x406d2000},{0x406d4000},{0x406d6000},{0x406d8000},{0x406da000},{0x406dc000},{0x406de000},{0x406e0000},{0x406e2000},{0x406e4000},{0x406e6000},{0x406e8000},{0x406ea000},{0x406ec000},{0x406ee000},{0x406f0000},{0x406f2000},{0x406f4000},{0x406f6000},{0x406f8000},{0x406fa000},{0x406fc000},{0x406fe000}, +{0x40700000},{0x40702000},{0x40704000},{0x40706000},{0x40708000},{0x4070a000},{0x4070c000},{0x4070e000},{0x40710000},{0x40712000},{0x40714000},{0x40716000},{0x40718000},{0x4071a000},{0x4071c000},{0x4071e000},{0x40720000},{0x40722000},{0x40724000},{0x40726000},{0x40728000},{0x4072a000},{0x4072c000},{0x4072e000},{0x40730000},{0x40732000},{0x40734000},{0x40736000},{0x40738000},{0x4073a000},{0x4073c000},{0x4073e000}, +{0x40740000},{0x40742000},{0x40744000},{0x40746000},{0x40748000},{0x4074a000},{0x4074c000},{0x4074e000},{0x40750000},{0x40752000},{0x40754000},{0x40756000},{0x40758000},{0x4075a000},{0x4075c000},{0x4075e000},{0x40760000},{0x40762000},{0x40764000},{0x40766000},{0x40768000},{0x4076a000},{0x4076c000},{0x4076e000},{0x40770000},{0x40772000},{0x40774000},{0x40776000},{0x40778000},{0x4077a000},{0x4077c000},{0x4077e000}, +{0x40780000},{0x40782000},{0x40784000},{0x40786000},{0x40788000},{0x4078a000},{0x4078c000},{0x4078e000},{0x40790000},{0x40792000},{0x40794000},{0x40796000},{0x40798000},{0x4079a000},{0x4079c000},{0x4079e000},{0x407a0000},{0x407a2000},{0x407a4000},{0x407a6000},{0x407a8000},{0x407aa000},{0x407ac000},{0x407ae000},{0x407b0000},{0x407b2000},{0x407b4000},{0x407b6000},{0x407b8000},{0x407ba000},{0x407bc000},{0x407be000}, +{0x407c0000},{0x407c2000},{0x407c4000},{0x407c6000},{0x407c8000},{0x407ca000},{0x407cc000},{0x407ce000},{0x407d0000},{0x407d2000},{0x407d4000},{0x407d6000},{0x407d8000},{0x407da000},{0x407dc000},{0x407de000},{0x407e0000},{0x407e2000},{0x407e4000},{0x407e6000},{0x407e8000},{0x407ea000},{0x407ec000},{0x407ee000},{0x407f0000},{0x407f2000},{0x407f4000},{0x407f6000},{0x407f8000},{0x407fa000},{0x407fc000},{0x407fe000}, +{0x40800000},{0x40802000},{0x40804000},{0x40806000},{0x40808000},{0x4080a000},{0x4080c000},{0x4080e000},{0x40810000},{0x40812000},{0x40814000},{0x40816000},{0x40818000},{0x4081a000},{0x4081c000},{0x4081e000},{0x40820000},{0x40822000},{0x40824000},{0x40826000},{0x40828000},{0x4082a000},{0x4082c000},{0x4082e000},{0x40830000},{0x40832000},{0x40834000},{0x40836000},{0x40838000},{0x4083a000},{0x4083c000},{0x4083e000}, +{0x40840000},{0x40842000},{0x40844000},{0x40846000},{0x40848000},{0x4084a000},{0x4084c000},{0x4084e000},{0x40850000},{0x40852000},{0x40854000},{0x40856000},{0x40858000},{0x4085a000},{0x4085c000},{0x4085e000},{0x40860000},{0x40862000},{0x40864000},{0x40866000},{0x40868000},{0x4086a000},{0x4086c000},{0x4086e000},{0x40870000},{0x40872000},{0x40874000},{0x40876000},{0x40878000},{0x4087a000},{0x4087c000},{0x4087e000}, +{0x40880000},{0x40882000},{0x40884000},{0x40886000},{0x40888000},{0x4088a000},{0x4088c000},{0x4088e000},{0x40890000},{0x40892000},{0x40894000},{0x40896000},{0x40898000},{0x4089a000},{0x4089c000},{0x4089e000},{0x408a0000},{0x408a2000},{0x408a4000},{0x408a6000},{0x408a8000},{0x408aa000},{0x408ac000},{0x408ae000},{0x408b0000},{0x408b2000},{0x408b4000},{0x408b6000},{0x408b8000},{0x408ba000},{0x408bc000},{0x408be000}, +{0x408c0000},{0x408c2000},{0x408c4000},{0x408c6000},{0x408c8000},{0x408ca000},{0x408cc000},{0x408ce000},{0x408d0000},{0x408d2000},{0x408d4000},{0x408d6000},{0x408d8000},{0x408da000},{0x408dc000},{0x408de000},{0x408e0000},{0x408e2000},{0x408e4000},{0x408e6000},{0x408e8000},{0x408ea000},{0x408ec000},{0x408ee000},{0x408f0000},{0x408f2000},{0x408f4000},{0x408f6000},{0x408f8000},{0x408fa000},{0x408fc000},{0x408fe000}, +{0x40900000},{0x40902000},{0x40904000},{0x40906000},{0x40908000},{0x4090a000},{0x4090c000},{0x4090e000},{0x40910000},{0x40912000},{0x40914000},{0x40916000},{0x40918000},{0x4091a000},{0x4091c000},{0x4091e000},{0x40920000},{0x40922000},{0x40924000},{0x40926000},{0x40928000},{0x4092a000},{0x4092c000},{0x4092e000},{0x40930000},{0x40932000},{0x40934000},{0x40936000},{0x40938000},{0x4093a000},{0x4093c000},{0x4093e000}, +{0x40940000},{0x40942000},{0x40944000},{0x40946000},{0x40948000},{0x4094a000},{0x4094c000},{0x4094e000},{0x40950000},{0x40952000},{0x40954000},{0x40956000},{0x40958000},{0x4095a000},{0x4095c000},{0x4095e000},{0x40960000},{0x40962000},{0x40964000},{0x40966000},{0x40968000},{0x4096a000},{0x4096c000},{0x4096e000},{0x40970000},{0x40972000},{0x40974000},{0x40976000},{0x40978000},{0x4097a000},{0x4097c000},{0x4097e000}, +{0x40980000},{0x40982000},{0x40984000},{0x40986000},{0x40988000},{0x4098a000},{0x4098c000},{0x4098e000},{0x40990000},{0x40992000},{0x40994000},{0x40996000},{0x40998000},{0x4099a000},{0x4099c000},{0x4099e000},{0x409a0000},{0x409a2000},{0x409a4000},{0x409a6000},{0x409a8000},{0x409aa000},{0x409ac000},{0x409ae000},{0x409b0000},{0x409b2000},{0x409b4000},{0x409b6000},{0x409b8000},{0x409ba000},{0x409bc000},{0x409be000}, +{0x409c0000},{0x409c2000},{0x409c4000},{0x409c6000},{0x409c8000},{0x409ca000},{0x409cc000},{0x409ce000},{0x409d0000},{0x409d2000},{0x409d4000},{0x409d6000},{0x409d8000},{0x409da000},{0x409dc000},{0x409de000},{0x409e0000},{0x409e2000},{0x409e4000},{0x409e6000},{0x409e8000},{0x409ea000},{0x409ec000},{0x409ee000},{0x409f0000},{0x409f2000},{0x409f4000},{0x409f6000},{0x409f8000},{0x409fa000},{0x409fc000},{0x409fe000}, +{0x40a00000},{0x40a02000},{0x40a04000},{0x40a06000},{0x40a08000},{0x40a0a000},{0x40a0c000},{0x40a0e000},{0x40a10000},{0x40a12000},{0x40a14000},{0x40a16000},{0x40a18000},{0x40a1a000},{0x40a1c000},{0x40a1e000},{0x40a20000},{0x40a22000},{0x40a24000},{0x40a26000},{0x40a28000},{0x40a2a000},{0x40a2c000},{0x40a2e000},{0x40a30000},{0x40a32000},{0x40a34000},{0x40a36000},{0x40a38000},{0x40a3a000},{0x40a3c000},{0x40a3e000}, +{0x40a40000},{0x40a42000},{0x40a44000},{0x40a46000},{0x40a48000},{0x40a4a000},{0x40a4c000},{0x40a4e000},{0x40a50000},{0x40a52000},{0x40a54000},{0x40a56000},{0x40a58000},{0x40a5a000},{0x40a5c000},{0x40a5e000},{0x40a60000},{0x40a62000},{0x40a64000},{0x40a66000},{0x40a68000},{0x40a6a000},{0x40a6c000},{0x40a6e000},{0x40a70000},{0x40a72000},{0x40a74000},{0x40a76000},{0x40a78000},{0x40a7a000},{0x40a7c000},{0x40a7e000}, +{0x40a80000},{0x40a82000},{0x40a84000},{0x40a86000},{0x40a88000},{0x40a8a000},{0x40a8c000},{0x40a8e000},{0x40a90000},{0x40a92000},{0x40a94000},{0x40a96000},{0x40a98000},{0x40a9a000},{0x40a9c000},{0x40a9e000},{0x40aa0000},{0x40aa2000},{0x40aa4000},{0x40aa6000},{0x40aa8000},{0x40aaa000},{0x40aac000},{0x40aae000},{0x40ab0000},{0x40ab2000},{0x40ab4000},{0x40ab6000},{0x40ab8000},{0x40aba000},{0x40abc000},{0x40abe000}, +{0x40ac0000},{0x40ac2000},{0x40ac4000},{0x40ac6000},{0x40ac8000},{0x40aca000},{0x40acc000},{0x40ace000},{0x40ad0000},{0x40ad2000},{0x40ad4000},{0x40ad6000},{0x40ad8000},{0x40ada000},{0x40adc000},{0x40ade000},{0x40ae0000},{0x40ae2000},{0x40ae4000},{0x40ae6000},{0x40ae8000},{0x40aea000},{0x40aec000},{0x40aee000},{0x40af0000},{0x40af2000},{0x40af4000},{0x40af6000},{0x40af8000},{0x40afa000},{0x40afc000},{0x40afe000}, +{0x40b00000},{0x40b02000},{0x40b04000},{0x40b06000},{0x40b08000},{0x40b0a000},{0x40b0c000},{0x40b0e000},{0x40b10000},{0x40b12000},{0x40b14000},{0x40b16000},{0x40b18000},{0x40b1a000},{0x40b1c000},{0x40b1e000},{0x40b20000},{0x40b22000},{0x40b24000},{0x40b26000},{0x40b28000},{0x40b2a000},{0x40b2c000},{0x40b2e000},{0x40b30000},{0x40b32000},{0x40b34000},{0x40b36000},{0x40b38000},{0x40b3a000},{0x40b3c000},{0x40b3e000}, +{0x40b40000},{0x40b42000},{0x40b44000},{0x40b46000},{0x40b48000},{0x40b4a000},{0x40b4c000},{0x40b4e000},{0x40b50000},{0x40b52000},{0x40b54000},{0x40b56000},{0x40b58000},{0x40b5a000},{0x40b5c000},{0x40b5e000},{0x40b60000},{0x40b62000},{0x40b64000},{0x40b66000},{0x40b68000},{0x40b6a000},{0x40b6c000},{0x40b6e000},{0x40b70000},{0x40b72000},{0x40b74000},{0x40b76000},{0x40b78000},{0x40b7a000},{0x40b7c000},{0x40b7e000}, +{0x40b80000},{0x40b82000},{0x40b84000},{0x40b86000},{0x40b88000},{0x40b8a000},{0x40b8c000},{0x40b8e000},{0x40b90000},{0x40b92000},{0x40b94000},{0x40b96000},{0x40b98000},{0x40b9a000},{0x40b9c000},{0x40b9e000},{0x40ba0000},{0x40ba2000},{0x40ba4000},{0x40ba6000},{0x40ba8000},{0x40baa000},{0x40bac000},{0x40bae000},{0x40bb0000},{0x40bb2000},{0x40bb4000},{0x40bb6000},{0x40bb8000},{0x40bba000},{0x40bbc000},{0x40bbe000}, +{0x40bc0000},{0x40bc2000},{0x40bc4000},{0x40bc6000},{0x40bc8000},{0x40bca000},{0x40bcc000},{0x40bce000},{0x40bd0000},{0x40bd2000},{0x40bd4000},{0x40bd6000},{0x40bd8000},{0x40bda000},{0x40bdc000},{0x40bde000},{0x40be0000},{0x40be2000},{0x40be4000},{0x40be6000},{0x40be8000},{0x40bea000},{0x40bec000},{0x40bee000},{0x40bf0000},{0x40bf2000},{0x40bf4000},{0x40bf6000},{0x40bf8000},{0x40bfa000},{0x40bfc000},{0x40bfe000}, +{0x40c00000},{0x40c02000},{0x40c04000},{0x40c06000},{0x40c08000},{0x40c0a000},{0x40c0c000},{0x40c0e000},{0x40c10000},{0x40c12000},{0x40c14000},{0x40c16000},{0x40c18000},{0x40c1a000},{0x40c1c000},{0x40c1e000},{0x40c20000},{0x40c22000},{0x40c24000},{0x40c26000},{0x40c28000},{0x40c2a000},{0x40c2c000},{0x40c2e000},{0x40c30000},{0x40c32000},{0x40c34000},{0x40c36000},{0x40c38000},{0x40c3a000},{0x40c3c000},{0x40c3e000}, +{0x40c40000},{0x40c42000},{0x40c44000},{0x40c46000},{0x40c48000},{0x40c4a000},{0x40c4c000},{0x40c4e000},{0x40c50000},{0x40c52000},{0x40c54000},{0x40c56000},{0x40c58000},{0x40c5a000},{0x40c5c000},{0x40c5e000},{0x40c60000},{0x40c62000},{0x40c64000},{0x40c66000},{0x40c68000},{0x40c6a000},{0x40c6c000},{0x40c6e000},{0x40c70000},{0x40c72000},{0x40c74000},{0x40c76000},{0x40c78000},{0x40c7a000},{0x40c7c000},{0x40c7e000}, +{0x40c80000},{0x40c82000},{0x40c84000},{0x40c86000},{0x40c88000},{0x40c8a000},{0x40c8c000},{0x40c8e000},{0x40c90000},{0x40c92000},{0x40c94000},{0x40c96000},{0x40c98000},{0x40c9a000},{0x40c9c000},{0x40c9e000},{0x40ca0000},{0x40ca2000},{0x40ca4000},{0x40ca6000},{0x40ca8000},{0x40caa000},{0x40cac000},{0x40cae000},{0x40cb0000},{0x40cb2000},{0x40cb4000},{0x40cb6000},{0x40cb8000},{0x40cba000},{0x40cbc000},{0x40cbe000}, +{0x40cc0000},{0x40cc2000},{0x40cc4000},{0x40cc6000},{0x40cc8000},{0x40cca000},{0x40ccc000},{0x40cce000},{0x40cd0000},{0x40cd2000},{0x40cd4000},{0x40cd6000},{0x40cd8000},{0x40cda000},{0x40cdc000},{0x40cde000},{0x40ce0000},{0x40ce2000},{0x40ce4000},{0x40ce6000},{0x40ce8000},{0x40cea000},{0x40cec000},{0x40cee000},{0x40cf0000},{0x40cf2000},{0x40cf4000},{0x40cf6000},{0x40cf8000},{0x40cfa000},{0x40cfc000},{0x40cfe000}, +{0x40d00000},{0x40d02000},{0x40d04000},{0x40d06000},{0x40d08000},{0x40d0a000},{0x40d0c000},{0x40d0e000},{0x40d10000},{0x40d12000},{0x40d14000},{0x40d16000},{0x40d18000},{0x40d1a000},{0x40d1c000},{0x40d1e000},{0x40d20000},{0x40d22000},{0x40d24000},{0x40d26000},{0x40d28000},{0x40d2a000},{0x40d2c000},{0x40d2e000},{0x40d30000},{0x40d32000},{0x40d34000},{0x40d36000},{0x40d38000},{0x40d3a000},{0x40d3c000},{0x40d3e000}, +{0x40d40000},{0x40d42000},{0x40d44000},{0x40d46000},{0x40d48000},{0x40d4a000},{0x40d4c000},{0x40d4e000},{0x40d50000},{0x40d52000},{0x40d54000},{0x40d56000},{0x40d58000},{0x40d5a000},{0x40d5c000},{0x40d5e000},{0x40d60000},{0x40d62000},{0x40d64000},{0x40d66000},{0x40d68000},{0x40d6a000},{0x40d6c000},{0x40d6e000},{0x40d70000},{0x40d72000},{0x40d74000},{0x40d76000},{0x40d78000},{0x40d7a000},{0x40d7c000},{0x40d7e000}, +{0x40d80000},{0x40d82000},{0x40d84000},{0x40d86000},{0x40d88000},{0x40d8a000},{0x40d8c000},{0x40d8e000},{0x40d90000},{0x40d92000},{0x40d94000},{0x40d96000},{0x40d98000},{0x40d9a000},{0x40d9c000},{0x40d9e000},{0x40da0000},{0x40da2000},{0x40da4000},{0x40da6000},{0x40da8000},{0x40daa000},{0x40dac000},{0x40dae000},{0x40db0000},{0x40db2000},{0x40db4000},{0x40db6000},{0x40db8000},{0x40dba000},{0x40dbc000},{0x40dbe000}, +{0x40dc0000},{0x40dc2000},{0x40dc4000},{0x40dc6000},{0x40dc8000},{0x40dca000},{0x40dcc000},{0x40dce000},{0x40dd0000},{0x40dd2000},{0x40dd4000},{0x40dd6000},{0x40dd8000},{0x40dda000},{0x40ddc000},{0x40dde000},{0x40de0000},{0x40de2000},{0x40de4000},{0x40de6000},{0x40de8000},{0x40dea000},{0x40dec000},{0x40dee000},{0x40df0000},{0x40df2000},{0x40df4000},{0x40df6000},{0x40df8000},{0x40dfa000},{0x40dfc000},{0x40dfe000}, +{0x40e00000},{0x40e02000},{0x40e04000},{0x40e06000},{0x40e08000},{0x40e0a000},{0x40e0c000},{0x40e0e000},{0x40e10000},{0x40e12000},{0x40e14000},{0x40e16000},{0x40e18000},{0x40e1a000},{0x40e1c000},{0x40e1e000},{0x40e20000},{0x40e22000},{0x40e24000},{0x40e26000},{0x40e28000},{0x40e2a000},{0x40e2c000},{0x40e2e000},{0x40e30000},{0x40e32000},{0x40e34000},{0x40e36000},{0x40e38000},{0x40e3a000},{0x40e3c000},{0x40e3e000}, +{0x40e40000},{0x40e42000},{0x40e44000},{0x40e46000},{0x40e48000},{0x40e4a000},{0x40e4c000},{0x40e4e000},{0x40e50000},{0x40e52000},{0x40e54000},{0x40e56000},{0x40e58000},{0x40e5a000},{0x40e5c000},{0x40e5e000},{0x40e60000},{0x40e62000},{0x40e64000},{0x40e66000},{0x40e68000},{0x40e6a000},{0x40e6c000},{0x40e6e000},{0x40e70000},{0x40e72000},{0x40e74000},{0x40e76000},{0x40e78000},{0x40e7a000},{0x40e7c000},{0x40e7e000}, +{0x40e80000},{0x40e82000},{0x40e84000},{0x40e86000},{0x40e88000},{0x40e8a000},{0x40e8c000},{0x40e8e000},{0x40e90000},{0x40e92000},{0x40e94000},{0x40e96000},{0x40e98000},{0x40e9a000},{0x40e9c000},{0x40e9e000},{0x40ea0000},{0x40ea2000},{0x40ea4000},{0x40ea6000},{0x40ea8000},{0x40eaa000},{0x40eac000},{0x40eae000},{0x40eb0000},{0x40eb2000},{0x40eb4000},{0x40eb6000},{0x40eb8000},{0x40eba000},{0x40ebc000},{0x40ebe000}, +{0x40ec0000},{0x40ec2000},{0x40ec4000},{0x40ec6000},{0x40ec8000},{0x40eca000},{0x40ecc000},{0x40ece000},{0x40ed0000},{0x40ed2000},{0x40ed4000},{0x40ed6000},{0x40ed8000},{0x40eda000},{0x40edc000},{0x40ede000},{0x40ee0000},{0x40ee2000},{0x40ee4000},{0x40ee6000},{0x40ee8000},{0x40eea000},{0x40eec000},{0x40eee000},{0x40ef0000},{0x40ef2000},{0x40ef4000},{0x40ef6000},{0x40ef8000},{0x40efa000},{0x40efc000},{0x40efe000}, +{0x40f00000},{0x40f02000},{0x40f04000},{0x40f06000},{0x40f08000},{0x40f0a000},{0x40f0c000},{0x40f0e000},{0x40f10000},{0x40f12000},{0x40f14000},{0x40f16000},{0x40f18000},{0x40f1a000},{0x40f1c000},{0x40f1e000},{0x40f20000},{0x40f22000},{0x40f24000},{0x40f26000},{0x40f28000},{0x40f2a000},{0x40f2c000},{0x40f2e000},{0x40f30000},{0x40f32000},{0x40f34000},{0x40f36000},{0x40f38000},{0x40f3a000},{0x40f3c000},{0x40f3e000}, +{0x40f40000},{0x40f42000},{0x40f44000},{0x40f46000},{0x40f48000},{0x40f4a000},{0x40f4c000},{0x40f4e000},{0x40f50000},{0x40f52000},{0x40f54000},{0x40f56000},{0x40f58000},{0x40f5a000},{0x40f5c000},{0x40f5e000},{0x40f60000},{0x40f62000},{0x40f64000},{0x40f66000},{0x40f68000},{0x40f6a000},{0x40f6c000},{0x40f6e000},{0x40f70000},{0x40f72000},{0x40f74000},{0x40f76000},{0x40f78000},{0x40f7a000},{0x40f7c000},{0x40f7e000}, +{0x40f80000},{0x40f82000},{0x40f84000},{0x40f86000},{0x40f88000},{0x40f8a000},{0x40f8c000},{0x40f8e000},{0x40f90000},{0x40f92000},{0x40f94000},{0x40f96000},{0x40f98000},{0x40f9a000},{0x40f9c000},{0x40f9e000},{0x40fa0000},{0x40fa2000},{0x40fa4000},{0x40fa6000},{0x40fa8000},{0x40faa000},{0x40fac000},{0x40fae000},{0x40fb0000},{0x40fb2000},{0x40fb4000},{0x40fb6000},{0x40fb8000},{0x40fba000},{0x40fbc000},{0x40fbe000}, +{0x40fc0000},{0x40fc2000},{0x40fc4000},{0x40fc6000},{0x40fc8000},{0x40fca000},{0x40fcc000},{0x40fce000},{0x40fd0000},{0x40fd2000},{0x40fd4000},{0x40fd6000},{0x40fd8000},{0x40fda000},{0x40fdc000},{0x40fde000},{0x40fe0000},{0x40fe2000},{0x40fe4000},{0x40fe6000},{0x40fe8000},{0x40fea000},{0x40fec000},{0x40fee000},{0x40ff0000},{0x40ff2000},{0x40ff4000},{0x40ff6000},{0x40ff8000},{0x40ffa000},{0x40ffc000},{0x40ffe000}, +{0x41000000},{0x41002000},{0x41004000},{0x41006000},{0x41008000},{0x4100a000},{0x4100c000},{0x4100e000},{0x41010000},{0x41012000},{0x41014000},{0x41016000},{0x41018000},{0x4101a000},{0x4101c000},{0x4101e000},{0x41020000},{0x41022000},{0x41024000},{0x41026000},{0x41028000},{0x4102a000},{0x4102c000},{0x4102e000},{0x41030000},{0x41032000},{0x41034000},{0x41036000},{0x41038000},{0x4103a000},{0x4103c000},{0x4103e000}, +{0x41040000},{0x41042000},{0x41044000},{0x41046000},{0x41048000},{0x4104a000},{0x4104c000},{0x4104e000},{0x41050000},{0x41052000},{0x41054000},{0x41056000},{0x41058000},{0x4105a000},{0x4105c000},{0x4105e000},{0x41060000},{0x41062000},{0x41064000},{0x41066000},{0x41068000},{0x4106a000},{0x4106c000},{0x4106e000},{0x41070000},{0x41072000},{0x41074000},{0x41076000},{0x41078000},{0x4107a000},{0x4107c000},{0x4107e000}, +{0x41080000},{0x41082000},{0x41084000},{0x41086000},{0x41088000},{0x4108a000},{0x4108c000},{0x4108e000},{0x41090000},{0x41092000},{0x41094000},{0x41096000},{0x41098000},{0x4109a000},{0x4109c000},{0x4109e000},{0x410a0000},{0x410a2000},{0x410a4000},{0x410a6000},{0x410a8000},{0x410aa000},{0x410ac000},{0x410ae000},{0x410b0000},{0x410b2000},{0x410b4000},{0x410b6000},{0x410b8000},{0x410ba000},{0x410bc000},{0x410be000}, +{0x410c0000},{0x410c2000},{0x410c4000},{0x410c6000},{0x410c8000},{0x410ca000},{0x410cc000},{0x410ce000},{0x410d0000},{0x410d2000},{0x410d4000},{0x410d6000},{0x410d8000},{0x410da000},{0x410dc000},{0x410de000},{0x410e0000},{0x410e2000},{0x410e4000},{0x410e6000},{0x410e8000},{0x410ea000},{0x410ec000},{0x410ee000},{0x410f0000},{0x410f2000},{0x410f4000},{0x410f6000},{0x410f8000},{0x410fa000},{0x410fc000},{0x410fe000}, +{0x41100000},{0x41102000},{0x41104000},{0x41106000},{0x41108000},{0x4110a000},{0x4110c000},{0x4110e000},{0x41110000},{0x41112000},{0x41114000},{0x41116000},{0x41118000},{0x4111a000},{0x4111c000},{0x4111e000},{0x41120000},{0x41122000},{0x41124000},{0x41126000},{0x41128000},{0x4112a000},{0x4112c000},{0x4112e000},{0x41130000},{0x41132000},{0x41134000},{0x41136000},{0x41138000},{0x4113a000},{0x4113c000},{0x4113e000}, +{0x41140000},{0x41142000},{0x41144000},{0x41146000},{0x41148000},{0x4114a000},{0x4114c000},{0x4114e000},{0x41150000},{0x41152000},{0x41154000},{0x41156000},{0x41158000},{0x4115a000},{0x4115c000},{0x4115e000},{0x41160000},{0x41162000},{0x41164000},{0x41166000},{0x41168000},{0x4116a000},{0x4116c000},{0x4116e000},{0x41170000},{0x41172000},{0x41174000},{0x41176000},{0x41178000},{0x4117a000},{0x4117c000},{0x4117e000}, +{0x41180000},{0x41182000},{0x41184000},{0x41186000},{0x41188000},{0x4118a000},{0x4118c000},{0x4118e000},{0x41190000},{0x41192000},{0x41194000},{0x41196000},{0x41198000},{0x4119a000},{0x4119c000},{0x4119e000},{0x411a0000},{0x411a2000},{0x411a4000},{0x411a6000},{0x411a8000},{0x411aa000},{0x411ac000},{0x411ae000},{0x411b0000},{0x411b2000},{0x411b4000},{0x411b6000},{0x411b8000},{0x411ba000},{0x411bc000},{0x411be000}, +{0x411c0000},{0x411c2000},{0x411c4000},{0x411c6000},{0x411c8000},{0x411ca000},{0x411cc000},{0x411ce000},{0x411d0000},{0x411d2000},{0x411d4000},{0x411d6000},{0x411d8000},{0x411da000},{0x411dc000},{0x411de000},{0x411e0000},{0x411e2000},{0x411e4000},{0x411e6000},{0x411e8000},{0x411ea000},{0x411ec000},{0x411ee000},{0x411f0000},{0x411f2000},{0x411f4000},{0x411f6000},{0x411f8000},{0x411fa000},{0x411fc000},{0x411fe000}, +{0x41200000},{0x41202000},{0x41204000},{0x41206000},{0x41208000},{0x4120a000},{0x4120c000},{0x4120e000},{0x41210000},{0x41212000},{0x41214000},{0x41216000},{0x41218000},{0x4121a000},{0x4121c000},{0x4121e000},{0x41220000},{0x41222000},{0x41224000},{0x41226000},{0x41228000},{0x4122a000},{0x4122c000},{0x4122e000},{0x41230000},{0x41232000},{0x41234000},{0x41236000},{0x41238000},{0x4123a000},{0x4123c000},{0x4123e000}, +{0x41240000},{0x41242000},{0x41244000},{0x41246000},{0x41248000},{0x4124a000},{0x4124c000},{0x4124e000},{0x41250000},{0x41252000},{0x41254000},{0x41256000},{0x41258000},{0x4125a000},{0x4125c000},{0x4125e000},{0x41260000},{0x41262000},{0x41264000},{0x41266000},{0x41268000},{0x4126a000},{0x4126c000},{0x4126e000},{0x41270000},{0x41272000},{0x41274000},{0x41276000},{0x41278000},{0x4127a000},{0x4127c000},{0x4127e000}, +{0x41280000},{0x41282000},{0x41284000},{0x41286000},{0x41288000},{0x4128a000},{0x4128c000},{0x4128e000},{0x41290000},{0x41292000},{0x41294000},{0x41296000},{0x41298000},{0x4129a000},{0x4129c000},{0x4129e000},{0x412a0000},{0x412a2000},{0x412a4000},{0x412a6000},{0x412a8000},{0x412aa000},{0x412ac000},{0x412ae000},{0x412b0000},{0x412b2000},{0x412b4000},{0x412b6000},{0x412b8000},{0x412ba000},{0x412bc000},{0x412be000}, +{0x412c0000},{0x412c2000},{0x412c4000},{0x412c6000},{0x412c8000},{0x412ca000},{0x412cc000},{0x412ce000},{0x412d0000},{0x412d2000},{0x412d4000},{0x412d6000},{0x412d8000},{0x412da000},{0x412dc000},{0x412de000},{0x412e0000},{0x412e2000},{0x412e4000},{0x412e6000},{0x412e8000},{0x412ea000},{0x412ec000},{0x412ee000},{0x412f0000},{0x412f2000},{0x412f4000},{0x412f6000},{0x412f8000},{0x412fa000},{0x412fc000},{0x412fe000}, +{0x41300000},{0x41302000},{0x41304000},{0x41306000},{0x41308000},{0x4130a000},{0x4130c000},{0x4130e000},{0x41310000},{0x41312000},{0x41314000},{0x41316000},{0x41318000},{0x4131a000},{0x4131c000},{0x4131e000},{0x41320000},{0x41322000},{0x41324000},{0x41326000},{0x41328000},{0x4132a000},{0x4132c000},{0x4132e000},{0x41330000},{0x41332000},{0x41334000},{0x41336000},{0x41338000},{0x4133a000},{0x4133c000},{0x4133e000}, +{0x41340000},{0x41342000},{0x41344000},{0x41346000},{0x41348000},{0x4134a000},{0x4134c000},{0x4134e000},{0x41350000},{0x41352000},{0x41354000},{0x41356000},{0x41358000},{0x4135a000},{0x4135c000},{0x4135e000},{0x41360000},{0x41362000},{0x41364000},{0x41366000},{0x41368000},{0x4136a000},{0x4136c000},{0x4136e000},{0x41370000},{0x41372000},{0x41374000},{0x41376000},{0x41378000},{0x4137a000},{0x4137c000},{0x4137e000}, +{0x41380000},{0x41382000},{0x41384000},{0x41386000},{0x41388000},{0x4138a000},{0x4138c000},{0x4138e000},{0x41390000},{0x41392000},{0x41394000},{0x41396000},{0x41398000},{0x4139a000},{0x4139c000},{0x4139e000},{0x413a0000},{0x413a2000},{0x413a4000},{0x413a6000},{0x413a8000},{0x413aa000},{0x413ac000},{0x413ae000},{0x413b0000},{0x413b2000},{0x413b4000},{0x413b6000},{0x413b8000},{0x413ba000},{0x413bc000},{0x413be000}, +{0x413c0000},{0x413c2000},{0x413c4000},{0x413c6000},{0x413c8000},{0x413ca000},{0x413cc000},{0x413ce000},{0x413d0000},{0x413d2000},{0x413d4000},{0x413d6000},{0x413d8000},{0x413da000},{0x413dc000},{0x413de000},{0x413e0000},{0x413e2000},{0x413e4000},{0x413e6000},{0x413e8000},{0x413ea000},{0x413ec000},{0x413ee000},{0x413f0000},{0x413f2000},{0x413f4000},{0x413f6000},{0x413f8000},{0x413fa000},{0x413fc000},{0x413fe000}, +{0x41400000},{0x41402000},{0x41404000},{0x41406000},{0x41408000},{0x4140a000},{0x4140c000},{0x4140e000},{0x41410000},{0x41412000},{0x41414000},{0x41416000},{0x41418000},{0x4141a000},{0x4141c000},{0x4141e000},{0x41420000},{0x41422000},{0x41424000},{0x41426000},{0x41428000},{0x4142a000},{0x4142c000},{0x4142e000},{0x41430000},{0x41432000},{0x41434000},{0x41436000},{0x41438000},{0x4143a000},{0x4143c000},{0x4143e000}, +{0x41440000},{0x41442000},{0x41444000},{0x41446000},{0x41448000},{0x4144a000},{0x4144c000},{0x4144e000},{0x41450000},{0x41452000},{0x41454000},{0x41456000},{0x41458000},{0x4145a000},{0x4145c000},{0x4145e000},{0x41460000},{0x41462000},{0x41464000},{0x41466000},{0x41468000},{0x4146a000},{0x4146c000},{0x4146e000},{0x41470000},{0x41472000},{0x41474000},{0x41476000},{0x41478000},{0x4147a000},{0x4147c000},{0x4147e000}, +{0x41480000},{0x41482000},{0x41484000},{0x41486000},{0x41488000},{0x4148a000},{0x4148c000},{0x4148e000},{0x41490000},{0x41492000},{0x41494000},{0x41496000},{0x41498000},{0x4149a000},{0x4149c000},{0x4149e000},{0x414a0000},{0x414a2000},{0x414a4000},{0x414a6000},{0x414a8000},{0x414aa000},{0x414ac000},{0x414ae000},{0x414b0000},{0x414b2000},{0x414b4000},{0x414b6000},{0x414b8000},{0x414ba000},{0x414bc000},{0x414be000}, +{0x414c0000},{0x414c2000},{0x414c4000},{0x414c6000},{0x414c8000},{0x414ca000},{0x414cc000},{0x414ce000},{0x414d0000},{0x414d2000},{0x414d4000},{0x414d6000},{0x414d8000},{0x414da000},{0x414dc000},{0x414de000},{0x414e0000},{0x414e2000},{0x414e4000},{0x414e6000},{0x414e8000},{0x414ea000},{0x414ec000},{0x414ee000},{0x414f0000},{0x414f2000},{0x414f4000},{0x414f6000},{0x414f8000},{0x414fa000},{0x414fc000},{0x414fe000}, +{0x41500000},{0x41502000},{0x41504000},{0x41506000},{0x41508000},{0x4150a000},{0x4150c000},{0x4150e000},{0x41510000},{0x41512000},{0x41514000},{0x41516000},{0x41518000},{0x4151a000},{0x4151c000},{0x4151e000},{0x41520000},{0x41522000},{0x41524000},{0x41526000},{0x41528000},{0x4152a000},{0x4152c000},{0x4152e000},{0x41530000},{0x41532000},{0x41534000},{0x41536000},{0x41538000},{0x4153a000},{0x4153c000},{0x4153e000}, +{0x41540000},{0x41542000},{0x41544000},{0x41546000},{0x41548000},{0x4154a000},{0x4154c000},{0x4154e000},{0x41550000},{0x41552000},{0x41554000},{0x41556000},{0x41558000},{0x4155a000},{0x4155c000},{0x4155e000},{0x41560000},{0x41562000},{0x41564000},{0x41566000},{0x41568000},{0x4156a000},{0x4156c000},{0x4156e000},{0x41570000},{0x41572000},{0x41574000},{0x41576000},{0x41578000},{0x4157a000},{0x4157c000},{0x4157e000}, +{0x41580000},{0x41582000},{0x41584000},{0x41586000},{0x41588000},{0x4158a000},{0x4158c000},{0x4158e000},{0x41590000},{0x41592000},{0x41594000},{0x41596000},{0x41598000},{0x4159a000},{0x4159c000},{0x4159e000},{0x415a0000},{0x415a2000},{0x415a4000},{0x415a6000},{0x415a8000},{0x415aa000},{0x415ac000},{0x415ae000},{0x415b0000},{0x415b2000},{0x415b4000},{0x415b6000},{0x415b8000},{0x415ba000},{0x415bc000},{0x415be000}, +{0x415c0000},{0x415c2000},{0x415c4000},{0x415c6000},{0x415c8000},{0x415ca000},{0x415cc000},{0x415ce000},{0x415d0000},{0x415d2000},{0x415d4000},{0x415d6000},{0x415d8000},{0x415da000},{0x415dc000},{0x415de000},{0x415e0000},{0x415e2000},{0x415e4000},{0x415e6000},{0x415e8000},{0x415ea000},{0x415ec000},{0x415ee000},{0x415f0000},{0x415f2000},{0x415f4000},{0x415f6000},{0x415f8000},{0x415fa000},{0x415fc000},{0x415fe000}, +{0x41600000},{0x41602000},{0x41604000},{0x41606000},{0x41608000},{0x4160a000},{0x4160c000},{0x4160e000},{0x41610000},{0x41612000},{0x41614000},{0x41616000},{0x41618000},{0x4161a000},{0x4161c000},{0x4161e000},{0x41620000},{0x41622000},{0x41624000},{0x41626000},{0x41628000},{0x4162a000},{0x4162c000},{0x4162e000},{0x41630000},{0x41632000},{0x41634000},{0x41636000},{0x41638000},{0x4163a000},{0x4163c000},{0x4163e000}, +{0x41640000},{0x41642000},{0x41644000},{0x41646000},{0x41648000},{0x4164a000},{0x4164c000},{0x4164e000},{0x41650000},{0x41652000},{0x41654000},{0x41656000},{0x41658000},{0x4165a000},{0x4165c000},{0x4165e000},{0x41660000},{0x41662000},{0x41664000},{0x41666000},{0x41668000},{0x4166a000},{0x4166c000},{0x4166e000},{0x41670000},{0x41672000},{0x41674000},{0x41676000},{0x41678000},{0x4167a000},{0x4167c000},{0x4167e000}, +{0x41680000},{0x41682000},{0x41684000},{0x41686000},{0x41688000},{0x4168a000},{0x4168c000},{0x4168e000},{0x41690000},{0x41692000},{0x41694000},{0x41696000},{0x41698000},{0x4169a000},{0x4169c000},{0x4169e000},{0x416a0000},{0x416a2000},{0x416a4000},{0x416a6000},{0x416a8000},{0x416aa000},{0x416ac000},{0x416ae000},{0x416b0000},{0x416b2000},{0x416b4000},{0x416b6000},{0x416b8000},{0x416ba000},{0x416bc000},{0x416be000}, +{0x416c0000},{0x416c2000},{0x416c4000},{0x416c6000},{0x416c8000},{0x416ca000},{0x416cc000},{0x416ce000},{0x416d0000},{0x416d2000},{0x416d4000},{0x416d6000},{0x416d8000},{0x416da000},{0x416dc000},{0x416de000},{0x416e0000},{0x416e2000},{0x416e4000},{0x416e6000},{0x416e8000},{0x416ea000},{0x416ec000},{0x416ee000},{0x416f0000},{0x416f2000},{0x416f4000},{0x416f6000},{0x416f8000},{0x416fa000},{0x416fc000},{0x416fe000}, +{0x41700000},{0x41702000},{0x41704000},{0x41706000},{0x41708000},{0x4170a000},{0x4170c000},{0x4170e000},{0x41710000},{0x41712000},{0x41714000},{0x41716000},{0x41718000},{0x4171a000},{0x4171c000},{0x4171e000},{0x41720000},{0x41722000},{0x41724000},{0x41726000},{0x41728000},{0x4172a000},{0x4172c000},{0x4172e000},{0x41730000},{0x41732000},{0x41734000},{0x41736000},{0x41738000},{0x4173a000},{0x4173c000},{0x4173e000}, +{0x41740000},{0x41742000},{0x41744000},{0x41746000},{0x41748000},{0x4174a000},{0x4174c000},{0x4174e000},{0x41750000},{0x41752000},{0x41754000},{0x41756000},{0x41758000},{0x4175a000},{0x4175c000},{0x4175e000},{0x41760000},{0x41762000},{0x41764000},{0x41766000},{0x41768000},{0x4176a000},{0x4176c000},{0x4176e000},{0x41770000},{0x41772000},{0x41774000},{0x41776000},{0x41778000},{0x4177a000},{0x4177c000},{0x4177e000}, +{0x41780000},{0x41782000},{0x41784000},{0x41786000},{0x41788000},{0x4178a000},{0x4178c000},{0x4178e000},{0x41790000},{0x41792000},{0x41794000},{0x41796000},{0x41798000},{0x4179a000},{0x4179c000},{0x4179e000},{0x417a0000},{0x417a2000},{0x417a4000},{0x417a6000},{0x417a8000},{0x417aa000},{0x417ac000},{0x417ae000},{0x417b0000},{0x417b2000},{0x417b4000},{0x417b6000},{0x417b8000},{0x417ba000},{0x417bc000},{0x417be000}, +{0x417c0000},{0x417c2000},{0x417c4000},{0x417c6000},{0x417c8000},{0x417ca000},{0x417cc000},{0x417ce000},{0x417d0000},{0x417d2000},{0x417d4000},{0x417d6000},{0x417d8000},{0x417da000},{0x417dc000},{0x417de000},{0x417e0000},{0x417e2000},{0x417e4000},{0x417e6000},{0x417e8000},{0x417ea000},{0x417ec000},{0x417ee000},{0x417f0000},{0x417f2000},{0x417f4000},{0x417f6000},{0x417f8000},{0x417fa000},{0x417fc000},{0x417fe000}, +{0x41800000},{0x41802000},{0x41804000},{0x41806000},{0x41808000},{0x4180a000},{0x4180c000},{0x4180e000},{0x41810000},{0x41812000},{0x41814000},{0x41816000},{0x41818000},{0x4181a000},{0x4181c000},{0x4181e000},{0x41820000},{0x41822000},{0x41824000},{0x41826000},{0x41828000},{0x4182a000},{0x4182c000},{0x4182e000},{0x41830000},{0x41832000},{0x41834000},{0x41836000},{0x41838000},{0x4183a000},{0x4183c000},{0x4183e000}, +{0x41840000},{0x41842000},{0x41844000},{0x41846000},{0x41848000},{0x4184a000},{0x4184c000},{0x4184e000},{0x41850000},{0x41852000},{0x41854000},{0x41856000},{0x41858000},{0x4185a000},{0x4185c000},{0x4185e000},{0x41860000},{0x41862000},{0x41864000},{0x41866000},{0x41868000},{0x4186a000},{0x4186c000},{0x4186e000},{0x41870000},{0x41872000},{0x41874000},{0x41876000},{0x41878000},{0x4187a000},{0x4187c000},{0x4187e000}, +{0x41880000},{0x41882000},{0x41884000},{0x41886000},{0x41888000},{0x4188a000},{0x4188c000},{0x4188e000},{0x41890000},{0x41892000},{0x41894000},{0x41896000},{0x41898000},{0x4189a000},{0x4189c000},{0x4189e000},{0x418a0000},{0x418a2000},{0x418a4000},{0x418a6000},{0x418a8000},{0x418aa000},{0x418ac000},{0x418ae000},{0x418b0000},{0x418b2000},{0x418b4000},{0x418b6000},{0x418b8000},{0x418ba000},{0x418bc000},{0x418be000}, +{0x418c0000},{0x418c2000},{0x418c4000},{0x418c6000},{0x418c8000},{0x418ca000},{0x418cc000},{0x418ce000},{0x418d0000},{0x418d2000},{0x418d4000},{0x418d6000},{0x418d8000},{0x418da000},{0x418dc000},{0x418de000},{0x418e0000},{0x418e2000},{0x418e4000},{0x418e6000},{0x418e8000},{0x418ea000},{0x418ec000},{0x418ee000},{0x418f0000},{0x418f2000},{0x418f4000},{0x418f6000},{0x418f8000},{0x418fa000},{0x418fc000},{0x418fe000}, +{0x41900000},{0x41902000},{0x41904000},{0x41906000},{0x41908000},{0x4190a000},{0x4190c000},{0x4190e000},{0x41910000},{0x41912000},{0x41914000},{0x41916000},{0x41918000},{0x4191a000},{0x4191c000},{0x4191e000},{0x41920000},{0x41922000},{0x41924000},{0x41926000},{0x41928000},{0x4192a000},{0x4192c000},{0x4192e000},{0x41930000},{0x41932000},{0x41934000},{0x41936000},{0x41938000},{0x4193a000},{0x4193c000},{0x4193e000}, +{0x41940000},{0x41942000},{0x41944000},{0x41946000},{0x41948000},{0x4194a000},{0x4194c000},{0x4194e000},{0x41950000},{0x41952000},{0x41954000},{0x41956000},{0x41958000},{0x4195a000},{0x4195c000},{0x4195e000},{0x41960000},{0x41962000},{0x41964000},{0x41966000},{0x41968000},{0x4196a000},{0x4196c000},{0x4196e000},{0x41970000},{0x41972000},{0x41974000},{0x41976000},{0x41978000},{0x4197a000},{0x4197c000},{0x4197e000}, +{0x41980000},{0x41982000},{0x41984000},{0x41986000},{0x41988000},{0x4198a000},{0x4198c000},{0x4198e000},{0x41990000},{0x41992000},{0x41994000},{0x41996000},{0x41998000},{0x4199a000},{0x4199c000},{0x4199e000},{0x419a0000},{0x419a2000},{0x419a4000},{0x419a6000},{0x419a8000},{0x419aa000},{0x419ac000},{0x419ae000},{0x419b0000},{0x419b2000},{0x419b4000},{0x419b6000},{0x419b8000},{0x419ba000},{0x419bc000},{0x419be000}, +{0x419c0000},{0x419c2000},{0x419c4000},{0x419c6000},{0x419c8000},{0x419ca000},{0x419cc000},{0x419ce000},{0x419d0000},{0x419d2000},{0x419d4000},{0x419d6000},{0x419d8000},{0x419da000},{0x419dc000},{0x419de000},{0x419e0000},{0x419e2000},{0x419e4000},{0x419e6000},{0x419e8000},{0x419ea000},{0x419ec000},{0x419ee000},{0x419f0000},{0x419f2000},{0x419f4000},{0x419f6000},{0x419f8000},{0x419fa000},{0x419fc000},{0x419fe000}, +{0x41a00000},{0x41a02000},{0x41a04000},{0x41a06000},{0x41a08000},{0x41a0a000},{0x41a0c000},{0x41a0e000},{0x41a10000},{0x41a12000},{0x41a14000},{0x41a16000},{0x41a18000},{0x41a1a000},{0x41a1c000},{0x41a1e000},{0x41a20000},{0x41a22000},{0x41a24000},{0x41a26000},{0x41a28000},{0x41a2a000},{0x41a2c000},{0x41a2e000},{0x41a30000},{0x41a32000},{0x41a34000},{0x41a36000},{0x41a38000},{0x41a3a000},{0x41a3c000},{0x41a3e000}, +{0x41a40000},{0x41a42000},{0x41a44000},{0x41a46000},{0x41a48000},{0x41a4a000},{0x41a4c000},{0x41a4e000},{0x41a50000},{0x41a52000},{0x41a54000},{0x41a56000},{0x41a58000},{0x41a5a000},{0x41a5c000},{0x41a5e000},{0x41a60000},{0x41a62000},{0x41a64000},{0x41a66000},{0x41a68000},{0x41a6a000},{0x41a6c000},{0x41a6e000},{0x41a70000},{0x41a72000},{0x41a74000},{0x41a76000},{0x41a78000},{0x41a7a000},{0x41a7c000},{0x41a7e000}, +{0x41a80000},{0x41a82000},{0x41a84000},{0x41a86000},{0x41a88000},{0x41a8a000},{0x41a8c000},{0x41a8e000},{0x41a90000},{0x41a92000},{0x41a94000},{0x41a96000},{0x41a98000},{0x41a9a000},{0x41a9c000},{0x41a9e000},{0x41aa0000},{0x41aa2000},{0x41aa4000},{0x41aa6000},{0x41aa8000},{0x41aaa000},{0x41aac000},{0x41aae000},{0x41ab0000},{0x41ab2000},{0x41ab4000},{0x41ab6000},{0x41ab8000},{0x41aba000},{0x41abc000},{0x41abe000}, +{0x41ac0000},{0x41ac2000},{0x41ac4000},{0x41ac6000},{0x41ac8000},{0x41aca000},{0x41acc000},{0x41ace000},{0x41ad0000},{0x41ad2000},{0x41ad4000},{0x41ad6000},{0x41ad8000},{0x41ada000},{0x41adc000},{0x41ade000},{0x41ae0000},{0x41ae2000},{0x41ae4000},{0x41ae6000},{0x41ae8000},{0x41aea000},{0x41aec000},{0x41aee000},{0x41af0000},{0x41af2000},{0x41af4000},{0x41af6000},{0x41af8000},{0x41afa000},{0x41afc000},{0x41afe000}, +{0x41b00000},{0x41b02000},{0x41b04000},{0x41b06000},{0x41b08000},{0x41b0a000},{0x41b0c000},{0x41b0e000},{0x41b10000},{0x41b12000},{0x41b14000},{0x41b16000},{0x41b18000},{0x41b1a000},{0x41b1c000},{0x41b1e000},{0x41b20000},{0x41b22000},{0x41b24000},{0x41b26000},{0x41b28000},{0x41b2a000},{0x41b2c000},{0x41b2e000},{0x41b30000},{0x41b32000},{0x41b34000},{0x41b36000},{0x41b38000},{0x41b3a000},{0x41b3c000},{0x41b3e000}, +{0x41b40000},{0x41b42000},{0x41b44000},{0x41b46000},{0x41b48000},{0x41b4a000},{0x41b4c000},{0x41b4e000},{0x41b50000},{0x41b52000},{0x41b54000},{0x41b56000},{0x41b58000},{0x41b5a000},{0x41b5c000},{0x41b5e000},{0x41b60000},{0x41b62000},{0x41b64000},{0x41b66000},{0x41b68000},{0x41b6a000},{0x41b6c000},{0x41b6e000},{0x41b70000},{0x41b72000},{0x41b74000},{0x41b76000},{0x41b78000},{0x41b7a000},{0x41b7c000},{0x41b7e000}, +{0x41b80000},{0x41b82000},{0x41b84000},{0x41b86000},{0x41b88000},{0x41b8a000},{0x41b8c000},{0x41b8e000},{0x41b90000},{0x41b92000},{0x41b94000},{0x41b96000},{0x41b98000},{0x41b9a000},{0x41b9c000},{0x41b9e000},{0x41ba0000},{0x41ba2000},{0x41ba4000},{0x41ba6000},{0x41ba8000},{0x41baa000},{0x41bac000},{0x41bae000},{0x41bb0000},{0x41bb2000},{0x41bb4000},{0x41bb6000},{0x41bb8000},{0x41bba000},{0x41bbc000},{0x41bbe000}, +{0x41bc0000},{0x41bc2000},{0x41bc4000},{0x41bc6000},{0x41bc8000},{0x41bca000},{0x41bcc000},{0x41bce000},{0x41bd0000},{0x41bd2000},{0x41bd4000},{0x41bd6000},{0x41bd8000},{0x41bda000},{0x41bdc000},{0x41bde000},{0x41be0000},{0x41be2000},{0x41be4000},{0x41be6000},{0x41be8000},{0x41bea000},{0x41bec000},{0x41bee000},{0x41bf0000},{0x41bf2000},{0x41bf4000},{0x41bf6000},{0x41bf8000},{0x41bfa000},{0x41bfc000},{0x41bfe000}, +{0x41c00000},{0x41c02000},{0x41c04000},{0x41c06000},{0x41c08000},{0x41c0a000},{0x41c0c000},{0x41c0e000},{0x41c10000},{0x41c12000},{0x41c14000},{0x41c16000},{0x41c18000},{0x41c1a000},{0x41c1c000},{0x41c1e000},{0x41c20000},{0x41c22000},{0x41c24000},{0x41c26000},{0x41c28000},{0x41c2a000},{0x41c2c000},{0x41c2e000},{0x41c30000},{0x41c32000},{0x41c34000},{0x41c36000},{0x41c38000},{0x41c3a000},{0x41c3c000},{0x41c3e000}, +{0x41c40000},{0x41c42000},{0x41c44000},{0x41c46000},{0x41c48000},{0x41c4a000},{0x41c4c000},{0x41c4e000},{0x41c50000},{0x41c52000},{0x41c54000},{0x41c56000},{0x41c58000},{0x41c5a000},{0x41c5c000},{0x41c5e000},{0x41c60000},{0x41c62000},{0x41c64000},{0x41c66000},{0x41c68000},{0x41c6a000},{0x41c6c000},{0x41c6e000},{0x41c70000},{0x41c72000},{0x41c74000},{0x41c76000},{0x41c78000},{0x41c7a000},{0x41c7c000},{0x41c7e000}, +{0x41c80000},{0x41c82000},{0x41c84000},{0x41c86000},{0x41c88000},{0x41c8a000},{0x41c8c000},{0x41c8e000},{0x41c90000},{0x41c92000},{0x41c94000},{0x41c96000},{0x41c98000},{0x41c9a000},{0x41c9c000},{0x41c9e000},{0x41ca0000},{0x41ca2000},{0x41ca4000},{0x41ca6000},{0x41ca8000},{0x41caa000},{0x41cac000},{0x41cae000},{0x41cb0000},{0x41cb2000},{0x41cb4000},{0x41cb6000},{0x41cb8000},{0x41cba000},{0x41cbc000},{0x41cbe000}, +{0x41cc0000},{0x41cc2000},{0x41cc4000},{0x41cc6000},{0x41cc8000},{0x41cca000},{0x41ccc000},{0x41cce000},{0x41cd0000},{0x41cd2000},{0x41cd4000},{0x41cd6000},{0x41cd8000},{0x41cda000},{0x41cdc000},{0x41cde000},{0x41ce0000},{0x41ce2000},{0x41ce4000},{0x41ce6000},{0x41ce8000},{0x41cea000},{0x41cec000},{0x41cee000},{0x41cf0000},{0x41cf2000},{0x41cf4000},{0x41cf6000},{0x41cf8000},{0x41cfa000},{0x41cfc000},{0x41cfe000}, +{0x41d00000},{0x41d02000},{0x41d04000},{0x41d06000},{0x41d08000},{0x41d0a000},{0x41d0c000},{0x41d0e000},{0x41d10000},{0x41d12000},{0x41d14000},{0x41d16000},{0x41d18000},{0x41d1a000},{0x41d1c000},{0x41d1e000},{0x41d20000},{0x41d22000},{0x41d24000},{0x41d26000},{0x41d28000},{0x41d2a000},{0x41d2c000},{0x41d2e000},{0x41d30000},{0x41d32000},{0x41d34000},{0x41d36000},{0x41d38000},{0x41d3a000},{0x41d3c000},{0x41d3e000}, +{0x41d40000},{0x41d42000},{0x41d44000},{0x41d46000},{0x41d48000},{0x41d4a000},{0x41d4c000},{0x41d4e000},{0x41d50000},{0x41d52000},{0x41d54000},{0x41d56000},{0x41d58000},{0x41d5a000},{0x41d5c000},{0x41d5e000},{0x41d60000},{0x41d62000},{0x41d64000},{0x41d66000},{0x41d68000},{0x41d6a000},{0x41d6c000},{0x41d6e000},{0x41d70000},{0x41d72000},{0x41d74000},{0x41d76000},{0x41d78000},{0x41d7a000},{0x41d7c000},{0x41d7e000}, +{0x41d80000},{0x41d82000},{0x41d84000},{0x41d86000},{0x41d88000},{0x41d8a000},{0x41d8c000},{0x41d8e000},{0x41d90000},{0x41d92000},{0x41d94000},{0x41d96000},{0x41d98000},{0x41d9a000},{0x41d9c000},{0x41d9e000},{0x41da0000},{0x41da2000},{0x41da4000},{0x41da6000},{0x41da8000},{0x41daa000},{0x41dac000},{0x41dae000},{0x41db0000},{0x41db2000},{0x41db4000},{0x41db6000},{0x41db8000},{0x41dba000},{0x41dbc000},{0x41dbe000}, +{0x41dc0000},{0x41dc2000},{0x41dc4000},{0x41dc6000},{0x41dc8000},{0x41dca000},{0x41dcc000},{0x41dce000},{0x41dd0000},{0x41dd2000},{0x41dd4000},{0x41dd6000},{0x41dd8000},{0x41dda000},{0x41ddc000},{0x41dde000},{0x41de0000},{0x41de2000},{0x41de4000},{0x41de6000},{0x41de8000},{0x41dea000},{0x41dec000},{0x41dee000},{0x41df0000},{0x41df2000},{0x41df4000},{0x41df6000},{0x41df8000},{0x41dfa000},{0x41dfc000},{0x41dfe000}, +{0x41e00000},{0x41e02000},{0x41e04000},{0x41e06000},{0x41e08000},{0x41e0a000},{0x41e0c000},{0x41e0e000},{0x41e10000},{0x41e12000},{0x41e14000},{0x41e16000},{0x41e18000},{0x41e1a000},{0x41e1c000},{0x41e1e000},{0x41e20000},{0x41e22000},{0x41e24000},{0x41e26000},{0x41e28000},{0x41e2a000},{0x41e2c000},{0x41e2e000},{0x41e30000},{0x41e32000},{0x41e34000},{0x41e36000},{0x41e38000},{0x41e3a000},{0x41e3c000},{0x41e3e000}, +{0x41e40000},{0x41e42000},{0x41e44000},{0x41e46000},{0x41e48000},{0x41e4a000},{0x41e4c000},{0x41e4e000},{0x41e50000},{0x41e52000},{0x41e54000},{0x41e56000},{0x41e58000},{0x41e5a000},{0x41e5c000},{0x41e5e000},{0x41e60000},{0x41e62000},{0x41e64000},{0x41e66000},{0x41e68000},{0x41e6a000},{0x41e6c000},{0x41e6e000},{0x41e70000},{0x41e72000},{0x41e74000},{0x41e76000},{0x41e78000},{0x41e7a000},{0x41e7c000},{0x41e7e000}, +{0x41e80000},{0x41e82000},{0x41e84000},{0x41e86000},{0x41e88000},{0x41e8a000},{0x41e8c000},{0x41e8e000},{0x41e90000},{0x41e92000},{0x41e94000},{0x41e96000},{0x41e98000},{0x41e9a000},{0x41e9c000},{0x41e9e000},{0x41ea0000},{0x41ea2000},{0x41ea4000},{0x41ea6000},{0x41ea8000},{0x41eaa000},{0x41eac000},{0x41eae000},{0x41eb0000},{0x41eb2000},{0x41eb4000},{0x41eb6000},{0x41eb8000},{0x41eba000},{0x41ebc000},{0x41ebe000}, +{0x41ec0000},{0x41ec2000},{0x41ec4000},{0x41ec6000},{0x41ec8000},{0x41eca000},{0x41ecc000},{0x41ece000},{0x41ed0000},{0x41ed2000},{0x41ed4000},{0x41ed6000},{0x41ed8000},{0x41eda000},{0x41edc000},{0x41ede000},{0x41ee0000},{0x41ee2000},{0x41ee4000},{0x41ee6000},{0x41ee8000},{0x41eea000},{0x41eec000},{0x41eee000},{0x41ef0000},{0x41ef2000},{0x41ef4000},{0x41ef6000},{0x41ef8000},{0x41efa000},{0x41efc000},{0x41efe000}, +{0x41f00000},{0x41f02000},{0x41f04000},{0x41f06000},{0x41f08000},{0x41f0a000},{0x41f0c000},{0x41f0e000},{0x41f10000},{0x41f12000},{0x41f14000},{0x41f16000},{0x41f18000},{0x41f1a000},{0x41f1c000},{0x41f1e000},{0x41f20000},{0x41f22000},{0x41f24000},{0x41f26000},{0x41f28000},{0x41f2a000},{0x41f2c000},{0x41f2e000},{0x41f30000},{0x41f32000},{0x41f34000},{0x41f36000},{0x41f38000},{0x41f3a000},{0x41f3c000},{0x41f3e000}, +{0x41f40000},{0x41f42000},{0x41f44000},{0x41f46000},{0x41f48000},{0x41f4a000},{0x41f4c000},{0x41f4e000},{0x41f50000},{0x41f52000},{0x41f54000},{0x41f56000},{0x41f58000},{0x41f5a000},{0x41f5c000},{0x41f5e000},{0x41f60000},{0x41f62000},{0x41f64000},{0x41f66000},{0x41f68000},{0x41f6a000},{0x41f6c000},{0x41f6e000},{0x41f70000},{0x41f72000},{0x41f74000},{0x41f76000},{0x41f78000},{0x41f7a000},{0x41f7c000},{0x41f7e000}, +{0x41f80000},{0x41f82000},{0x41f84000},{0x41f86000},{0x41f88000},{0x41f8a000},{0x41f8c000},{0x41f8e000},{0x41f90000},{0x41f92000},{0x41f94000},{0x41f96000},{0x41f98000},{0x41f9a000},{0x41f9c000},{0x41f9e000},{0x41fa0000},{0x41fa2000},{0x41fa4000},{0x41fa6000},{0x41fa8000},{0x41faa000},{0x41fac000},{0x41fae000},{0x41fb0000},{0x41fb2000},{0x41fb4000},{0x41fb6000},{0x41fb8000},{0x41fba000},{0x41fbc000},{0x41fbe000}, +{0x41fc0000},{0x41fc2000},{0x41fc4000},{0x41fc6000},{0x41fc8000},{0x41fca000},{0x41fcc000},{0x41fce000},{0x41fd0000},{0x41fd2000},{0x41fd4000},{0x41fd6000},{0x41fd8000},{0x41fda000},{0x41fdc000},{0x41fde000},{0x41fe0000},{0x41fe2000},{0x41fe4000},{0x41fe6000},{0x41fe8000},{0x41fea000},{0x41fec000},{0x41fee000},{0x41ff0000},{0x41ff2000},{0x41ff4000},{0x41ff6000},{0x41ff8000},{0x41ffa000},{0x41ffc000},{0x41ffe000}, +{0x42000000},{0x42002000},{0x42004000},{0x42006000},{0x42008000},{0x4200a000},{0x4200c000},{0x4200e000},{0x42010000},{0x42012000},{0x42014000},{0x42016000},{0x42018000},{0x4201a000},{0x4201c000},{0x4201e000},{0x42020000},{0x42022000},{0x42024000},{0x42026000},{0x42028000},{0x4202a000},{0x4202c000},{0x4202e000},{0x42030000},{0x42032000},{0x42034000},{0x42036000},{0x42038000},{0x4203a000},{0x4203c000},{0x4203e000}, +{0x42040000},{0x42042000},{0x42044000},{0x42046000},{0x42048000},{0x4204a000},{0x4204c000},{0x4204e000},{0x42050000},{0x42052000},{0x42054000},{0x42056000},{0x42058000},{0x4205a000},{0x4205c000},{0x4205e000},{0x42060000},{0x42062000},{0x42064000},{0x42066000},{0x42068000},{0x4206a000},{0x4206c000},{0x4206e000},{0x42070000},{0x42072000},{0x42074000},{0x42076000},{0x42078000},{0x4207a000},{0x4207c000},{0x4207e000}, +{0x42080000},{0x42082000},{0x42084000},{0x42086000},{0x42088000},{0x4208a000},{0x4208c000},{0x4208e000},{0x42090000},{0x42092000},{0x42094000},{0x42096000},{0x42098000},{0x4209a000},{0x4209c000},{0x4209e000},{0x420a0000},{0x420a2000},{0x420a4000},{0x420a6000},{0x420a8000},{0x420aa000},{0x420ac000},{0x420ae000},{0x420b0000},{0x420b2000},{0x420b4000},{0x420b6000},{0x420b8000},{0x420ba000},{0x420bc000},{0x420be000}, +{0x420c0000},{0x420c2000},{0x420c4000},{0x420c6000},{0x420c8000},{0x420ca000},{0x420cc000},{0x420ce000},{0x420d0000},{0x420d2000},{0x420d4000},{0x420d6000},{0x420d8000},{0x420da000},{0x420dc000},{0x420de000},{0x420e0000},{0x420e2000},{0x420e4000},{0x420e6000},{0x420e8000},{0x420ea000},{0x420ec000},{0x420ee000},{0x420f0000},{0x420f2000},{0x420f4000},{0x420f6000},{0x420f8000},{0x420fa000},{0x420fc000},{0x420fe000}, +{0x42100000},{0x42102000},{0x42104000},{0x42106000},{0x42108000},{0x4210a000},{0x4210c000},{0x4210e000},{0x42110000},{0x42112000},{0x42114000},{0x42116000},{0x42118000},{0x4211a000},{0x4211c000},{0x4211e000},{0x42120000},{0x42122000},{0x42124000},{0x42126000},{0x42128000},{0x4212a000},{0x4212c000},{0x4212e000},{0x42130000},{0x42132000},{0x42134000},{0x42136000},{0x42138000},{0x4213a000},{0x4213c000},{0x4213e000}, +{0x42140000},{0x42142000},{0x42144000},{0x42146000},{0x42148000},{0x4214a000},{0x4214c000},{0x4214e000},{0x42150000},{0x42152000},{0x42154000},{0x42156000},{0x42158000},{0x4215a000},{0x4215c000},{0x4215e000},{0x42160000},{0x42162000},{0x42164000},{0x42166000},{0x42168000},{0x4216a000},{0x4216c000},{0x4216e000},{0x42170000},{0x42172000},{0x42174000},{0x42176000},{0x42178000},{0x4217a000},{0x4217c000},{0x4217e000}, +{0x42180000},{0x42182000},{0x42184000},{0x42186000},{0x42188000},{0x4218a000},{0x4218c000},{0x4218e000},{0x42190000},{0x42192000},{0x42194000},{0x42196000},{0x42198000},{0x4219a000},{0x4219c000},{0x4219e000},{0x421a0000},{0x421a2000},{0x421a4000},{0x421a6000},{0x421a8000},{0x421aa000},{0x421ac000},{0x421ae000},{0x421b0000},{0x421b2000},{0x421b4000},{0x421b6000},{0x421b8000},{0x421ba000},{0x421bc000},{0x421be000}, +{0x421c0000},{0x421c2000},{0x421c4000},{0x421c6000},{0x421c8000},{0x421ca000},{0x421cc000},{0x421ce000},{0x421d0000},{0x421d2000},{0x421d4000},{0x421d6000},{0x421d8000},{0x421da000},{0x421dc000},{0x421de000},{0x421e0000},{0x421e2000},{0x421e4000},{0x421e6000},{0x421e8000},{0x421ea000},{0x421ec000},{0x421ee000},{0x421f0000},{0x421f2000},{0x421f4000},{0x421f6000},{0x421f8000},{0x421fa000},{0x421fc000},{0x421fe000}, +{0x42200000},{0x42202000},{0x42204000},{0x42206000},{0x42208000},{0x4220a000},{0x4220c000},{0x4220e000},{0x42210000},{0x42212000},{0x42214000},{0x42216000},{0x42218000},{0x4221a000},{0x4221c000},{0x4221e000},{0x42220000},{0x42222000},{0x42224000},{0x42226000},{0x42228000},{0x4222a000},{0x4222c000},{0x4222e000},{0x42230000},{0x42232000},{0x42234000},{0x42236000},{0x42238000},{0x4223a000},{0x4223c000},{0x4223e000}, +{0x42240000},{0x42242000},{0x42244000},{0x42246000},{0x42248000},{0x4224a000},{0x4224c000},{0x4224e000},{0x42250000},{0x42252000},{0x42254000},{0x42256000},{0x42258000},{0x4225a000},{0x4225c000},{0x4225e000},{0x42260000},{0x42262000},{0x42264000},{0x42266000},{0x42268000},{0x4226a000},{0x4226c000},{0x4226e000},{0x42270000},{0x42272000},{0x42274000},{0x42276000},{0x42278000},{0x4227a000},{0x4227c000},{0x4227e000}, +{0x42280000},{0x42282000},{0x42284000},{0x42286000},{0x42288000},{0x4228a000},{0x4228c000},{0x4228e000},{0x42290000},{0x42292000},{0x42294000},{0x42296000},{0x42298000},{0x4229a000},{0x4229c000},{0x4229e000},{0x422a0000},{0x422a2000},{0x422a4000},{0x422a6000},{0x422a8000},{0x422aa000},{0x422ac000},{0x422ae000},{0x422b0000},{0x422b2000},{0x422b4000},{0x422b6000},{0x422b8000},{0x422ba000},{0x422bc000},{0x422be000}, +{0x422c0000},{0x422c2000},{0x422c4000},{0x422c6000},{0x422c8000},{0x422ca000},{0x422cc000},{0x422ce000},{0x422d0000},{0x422d2000},{0x422d4000},{0x422d6000},{0x422d8000},{0x422da000},{0x422dc000},{0x422de000},{0x422e0000},{0x422e2000},{0x422e4000},{0x422e6000},{0x422e8000},{0x422ea000},{0x422ec000},{0x422ee000},{0x422f0000},{0x422f2000},{0x422f4000},{0x422f6000},{0x422f8000},{0x422fa000},{0x422fc000},{0x422fe000}, +{0x42300000},{0x42302000},{0x42304000},{0x42306000},{0x42308000},{0x4230a000},{0x4230c000},{0x4230e000},{0x42310000},{0x42312000},{0x42314000},{0x42316000},{0x42318000},{0x4231a000},{0x4231c000},{0x4231e000},{0x42320000},{0x42322000},{0x42324000},{0x42326000},{0x42328000},{0x4232a000},{0x4232c000},{0x4232e000},{0x42330000},{0x42332000},{0x42334000},{0x42336000},{0x42338000},{0x4233a000},{0x4233c000},{0x4233e000}, +{0x42340000},{0x42342000},{0x42344000},{0x42346000},{0x42348000},{0x4234a000},{0x4234c000},{0x4234e000},{0x42350000},{0x42352000},{0x42354000},{0x42356000},{0x42358000},{0x4235a000},{0x4235c000},{0x4235e000},{0x42360000},{0x42362000},{0x42364000},{0x42366000},{0x42368000},{0x4236a000},{0x4236c000},{0x4236e000},{0x42370000},{0x42372000},{0x42374000},{0x42376000},{0x42378000},{0x4237a000},{0x4237c000},{0x4237e000}, +{0x42380000},{0x42382000},{0x42384000},{0x42386000},{0x42388000},{0x4238a000},{0x4238c000},{0x4238e000},{0x42390000},{0x42392000},{0x42394000},{0x42396000},{0x42398000},{0x4239a000},{0x4239c000},{0x4239e000},{0x423a0000},{0x423a2000},{0x423a4000},{0x423a6000},{0x423a8000},{0x423aa000},{0x423ac000},{0x423ae000},{0x423b0000},{0x423b2000},{0x423b4000},{0x423b6000},{0x423b8000},{0x423ba000},{0x423bc000},{0x423be000}, +{0x423c0000},{0x423c2000},{0x423c4000},{0x423c6000},{0x423c8000},{0x423ca000},{0x423cc000},{0x423ce000},{0x423d0000},{0x423d2000},{0x423d4000},{0x423d6000},{0x423d8000},{0x423da000},{0x423dc000},{0x423de000},{0x423e0000},{0x423e2000},{0x423e4000},{0x423e6000},{0x423e8000},{0x423ea000},{0x423ec000},{0x423ee000},{0x423f0000},{0x423f2000},{0x423f4000},{0x423f6000},{0x423f8000},{0x423fa000},{0x423fc000},{0x423fe000}, +{0x42400000},{0x42402000},{0x42404000},{0x42406000},{0x42408000},{0x4240a000},{0x4240c000},{0x4240e000},{0x42410000},{0x42412000},{0x42414000},{0x42416000},{0x42418000},{0x4241a000},{0x4241c000},{0x4241e000},{0x42420000},{0x42422000},{0x42424000},{0x42426000},{0x42428000},{0x4242a000},{0x4242c000},{0x4242e000},{0x42430000},{0x42432000},{0x42434000},{0x42436000},{0x42438000},{0x4243a000},{0x4243c000},{0x4243e000}, +{0x42440000},{0x42442000},{0x42444000},{0x42446000},{0x42448000},{0x4244a000},{0x4244c000},{0x4244e000},{0x42450000},{0x42452000},{0x42454000},{0x42456000},{0x42458000},{0x4245a000},{0x4245c000},{0x4245e000},{0x42460000},{0x42462000},{0x42464000},{0x42466000},{0x42468000},{0x4246a000},{0x4246c000},{0x4246e000},{0x42470000},{0x42472000},{0x42474000},{0x42476000},{0x42478000},{0x4247a000},{0x4247c000},{0x4247e000}, +{0x42480000},{0x42482000},{0x42484000},{0x42486000},{0x42488000},{0x4248a000},{0x4248c000},{0x4248e000},{0x42490000},{0x42492000},{0x42494000},{0x42496000},{0x42498000},{0x4249a000},{0x4249c000},{0x4249e000},{0x424a0000},{0x424a2000},{0x424a4000},{0x424a6000},{0x424a8000},{0x424aa000},{0x424ac000},{0x424ae000},{0x424b0000},{0x424b2000},{0x424b4000},{0x424b6000},{0x424b8000},{0x424ba000},{0x424bc000},{0x424be000}, +{0x424c0000},{0x424c2000},{0x424c4000},{0x424c6000},{0x424c8000},{0x424ca000},{0x424cc000},{0x424ce000},{0x424d0000},{0x424d2000},{0x424d4000},{0x424d6000},{0x424d8000},{0x424da000},{0x424dc000},{0x424de000},{0x424e0000},{0x424e2000},{0x424e4000},{0x424e6000},{0x424e8000},{0x424ea000},{0x424ec000},{0x424ee000},{0x424f0000},{0x424f2000},{0x424f4000},{0x424f6000},{0x424f8000},{0x424fa000},{0x424fc000},{0x424fe000}, +{0x42500000},{0x42502000},{0x42504000},{0x42506000},{0x42508000},{0x4250a000},{0x4250c000},{0x4250e000},{0x42510000},{0x42512000},{0x42514000},{0x42516000},{0x42518000},{0x4251a000},{0x4251c000},{0x4251e000},{0x42520000},{0x42522000},{0x42524000},{0x42526000},{0x42528000},{0x4252a000},{0x4252c000},{0x4252e000},{0x42530000},{0x42532000},{0x42534000},{0x42536000},{0x42538000},{0x4253a000},{0x4253c000},{0x4253e000}, +{0x42540000},{0x42542000},{0x42544000},{0x42546000},{0x42548000},{0x4254a000},{0x4254c000},{0x4254e000},{0x42550000},{0x42552000},{0x42554000},{0x42556000},{0x42558000},{0x4255a000},{0x4255c000},{0x4255e000},{0x42560000},{0x42562000},{0x42564000},{0x42566000},{0x42568000},{0x4256a000},{0x4256c000},{0x4256e000},{0x42570000},{0x42572000},{0x42574000},{0x42576000},{0x42578000},{0x4257a000},{0x4257c000},{0x4257e000}, +{0x42580000},{0x42582000},{0x42584000},{0x42586000},{0x42588000},{0x4258a000},{0x4258c000},{0x4258e000},{0x42590000},{0x42592000},{0x42594000},{0x42596000},{0x42598000},{0x4259a000},{0x4259c000},{0x4259e000},{0x425a0000},{0x425a2000},{0x425a4000},{0x425a6000},{0x425a8000},{0x425aa000},{0x425ac000},{0x425ae000},{0x425b0000},{0x425b2000},{0x425b4000},{0x425b6000},{0x425b8000},{0x425ba000},{0x425bc000},{0x425be000}, +{0x425c0000},{0x425c2000},{0x425c4000},{0x425c6000},{0x425c8000},{0x425ca000},{0x425cc000},{0x425ce000},{0x425d0000},{0x425d2000},{0x425d4000},{0x425d6000},{0x425d8000},{0x425da000},{0x425dc000},{0x425de000},{0x425e0000},{0x425e2000},{0x425e4000},{0x425e6000},{0x425e8000},{0x425ea000},{0x425ec000},{0x425ee000},{0x425f0000},{0x425f2000},{0x425f4000},{0x425f6000},{0x425f8000},{0x425fa000},{0x425fc000},{0x425fe000}, +{0x42600000},{0x42602000},{0x42604000},{0x42606000},{0x42608000},{0x4260a000},{0x4260c000},{0x4260e000},{0x42610000},{0x42612000},{0x42614000},{0x42616000},{0x42618000},{0x4261a000},{0x4261c000},{0x4261e000},{0x42620000},{0x42622000},{0x42624000},{0x42626000},{0x42628000},{0x4262a000},{0x4262c000},{0x4262e000},{0x42630000},{0x42632000},{0x42634000},{0x42636000},{0x42638000},{0x4263a000},{0x4263c000},{0x4263e000}, +{0x42640000},{0x42642000},{0x42644000},{0x42646000},{0x42648000},{0x4264a000},{0x4264c000},{0x4264e000},{0x42650000},{0x42652000},{0x42654000},{0x42656000},{0x42658000},{0x4265a000},{0x4265c000},{0x4265e000},{0x42660000},{0x42662000},{0x42664000},{0x42666000},{0x42668000},{0x4266a000},{0x4266c000},{0x4266e000},{0x42670000},{0x42672000},{0x42674000},{0x42676000},{0x42678000},{0x4267a000},{0x4267c000},{0x4267e000}, +{0x42680000},{0x42682000},{0x42684000},{0x42686000},{0x42688000},{0x4268a000},{0x4268c000},{0x4268e000},{0x42690000},{0x42692000},{0x42694000},{0x42696000},{0x42698000},{0x4269a000},{0x4269c000},{0x4269e000},{0x426a0000},{0x426a2000},{0x426a4000},{0x426a6000},{0x426a8000},{0x426aa000},{0x426ac000},{0x426ae000},{0x426b0000},{0x426b2000},{0x426b4000},{0x426b6000},{0x426b8000},{0x426ba000},{0x426bc000},{0x426be000}, +{0x426c0000},{0x426c2000},{0x426c4000},{0x426c6000},{0x426c8000},{0x426ca000},{0x426cc000},{0x426ce000},{0x426d0000},{0x426d2000},{0x426d4000},{0x426d6000},{0x426d8000},{0x426da000},{0x426dc000},{0x426de000},{0x426e0000},{0x426e2000},{0x426e4000},{0x426e6000},{0x426e8000},{0x426ea000},{0x426ec000},{0x426ee000},{0x426f0000},{0x426f2000},{0x426f4000},{0x426f6000},{0x426f8000},{0x426fa000},{0x426fc000},{0x426fe000}, +{0x42700000},{0x42702000},{0x42704000},{0x42706000},{0x42708000},{0x4270a000},{0x4270c000},{0x4270e000},{0x42710000},{0x42712000},{0x42714000},{0x42716000},{0x42718000},{0x4271a000},{0x4271c000},{0x4271e000},{0x42720000},{0x42722000},{0x42724000},{0x42726000},{0x42728000},{0x4272a000},{0x4272c000},{0x4272e000},{0x42730000},{0x42732000},{0x42734000},{0x42736000},{0x42738000},{0x4273a000},{0x4273c000},{0x4273e000}, +{0x42740000},{0x42742000},{0x42744000},{0x42746000},{0x42748000},{0x4274a000},{0x4274c000},{0x4274e000},{0x42750000},{0x42752000},{0x42754000},{0x42756000},{0x42758000},{0x4275a000},{0x4275c000},{0x4275e000},{0x42760000},{0x42762000},{0x42764000},{0x42766000},{0x42768000},{0x4276a000},{0x4276c000},{0x4276e000},{0x42770000},{0x42772000},{0x42774000},{0x42776000},{0x42778000},{0x4277a000},{0x4277c000},{0x4277e000}, +{0x42780000},{0x42782000},{0x42784000},{0x42786000},{0x42788000},{0x4278a000},{0x4278c000},{0x4278e000},{0x42790000},{0x42792000},{0x42794000},{0x42796000},{0x42798000},{0x4279a000},{0x4279c000},{0x4279e000},{0x427a0000},{0x427a2000},{0x427a4000},{0x427a6000},{0x427a8000},{0x427aa000},{0x427ac000},{0x427ae000},{0x427b0000},{0x427b2000},{0x427b4000},{0x427b6000},{0x427b8000},{0x427ba000},{0x427bc000},{0x427be000}, +{0x427c0000},{0x427c2000},{0x427c4000},{0x427c6000},{0x427c8000},{0x427ca000},{0x427cc000},{0x427ce000},{0x427d0000},{0x427d2000},{0x427d4000},{0x427d6000},{0x427d8000},{0x427da000},{0x427dc000},{0x427de000},{0x427e0000},{0x427e2000},{0x427e4000},{0x427e6000},{0x427e8000},{0x427ea000},{0x427ec000},{0x427ee000},{0x427f0000},{0x427f2000},{0x427f4000},{0x427f6000},{0x427f8000},{0x427fa000},{0x427fc000},{0x427fe000}, +{0x42800000},{0x42802000},{0x42804000},{0x42806000},{0x42808000},{0x4280a000},{0x4280c000},{0x4280e000},{0x42810000},{0x42812000},{0x42814000},{0x42816000},{0x42818000},{0x4281a000},{0x4281c000},{0x4281e000},{0x42820000},{0x42822000},{0x42824000},{0x42826000},{0x42828000},{0x4282a000},{0x4282c000},{0x4282e000},{0x42830000},{0x42832000},{0x42834000},{0x42836000},{0x42838000},{0x4283a000},{0x4283c000},{0x4283e000}, +{0x42840000},{0x42842000},{0x42844000},{0x42846000},{0x42848000},{0x4284a000},{0x4284c000},{0x4284e000},{0x42850000},{0x42852000},{0x42854000},{0x42856000},{0x42858000},{0x4285a000},{0x4285c000},{0x4285e000},{0x42860000},{0x42862000},{0x42864000},{0x42866000},{0x42868000},{0x4286a000},{0x4286c000},{0x4286e000},{0x42870000},{0x42872000},{0x42874000},{0x42876000},{0x42878000},{0x4287a000},{0x4287c000},{0x4287e000}, +{0x42880000},{0x42882000},{0x42884000},{0x42886000},{0x42888000},{0x4288a000},{0x4288c000},{0x4288e000},{0x42890000},{0x42892000},{0x42894000},{0x42896000},{0x42898000},{0x4289a000},{0x4289c000},{0x4289e000},{0x428a0000},{0x428a2000},{0x428a4000},{0x428a6000},{0x428a8000},{0x428aa000},{0x428ac000},{0x428ae000},{0x428b0000},{0x428b2000},{0x428b4000},{0x428b6000},{0x428b8000},{0x428ba000},{0x428bc000},{0x428be000}, +{0x428c0000},{0x428c2000},{0x428c4000},{0x428c6000},{0x428c8000},{0x428ca000},{0x428cc000},{0x428ce000},{0x428d0000},{0x428d2000},{0x428d4000},{0x428d6000},{0x428d8000},{0x428da000},{0x428dc000},{0x428de000},{0x428e0000},{0x428e2000},{0x428e4000},{0x428e6000},{0x428e8000},{0x428ea000},{0x428ec000},{0x428ee000},{0x428f0000},{0x428f2000},{0x428f4000},{0x428f6000},{0x428f8000},{0x428fa000},{0x428fc000},{0x428fe000}, +{0x42900000},{0x42902000},{0x42904000},{0x42906000},{0x42908000},{0x4290a000},{0x4290c000},{0x4290e000},{0x42910000},{0x42912000},{0x42914000},{0x42916000},{0x42918000},{0x4291a000},{0x4291c000},{0x4291e000},{0x42920000},{0x42922000},{0x42924000},{0x42926000},{0x42928000},{0x4292a000},{0x4292c000},{0x4292e000},{0x42930000},{0x42932000},{0x42934000},{0x42936000},{0x42938000},{0x4293a000},{0x4293c000},{0x4293e000}, +{0x42940000},{0x42942000},{0x42944000},{0x42946000},{0x42948000},{0x4294a000},{0x4294c000},{0x4294e000},{0x42950000},{0x42952000},{0x42954000},{0x42956000},{0x42958000},{0x4295a000},{0x4295c000},{0x4295e000},{0x42960000},{0x42962000},{0x42964000},{0x42966000},{0x42968000},{0x4296a000},{0x4296c000},{0x4296e000},{0x42970000},{0x42972000},{0x42974000},{0x42976000},{0x42978000},{0x4297a000},{0x4297c000},{0x4297e000}, +{0x42980000},{0x42982000},{0x42984000},{0x42986000},{0x42988000},{0x4298a000},{0x4298c000},{0x4298e000},{0x42990000},{0x42992000},{0x42994000},{0x42996000},{0x42998000},{0x4299a000},{0x4299c000},{0x4299e000},{0x429a0000},{0x429a2000},{0x429a4000},{0x429a6000},{0x429a8000},{0x429aa000},{0x429ac000},{0x429ae000},{0x429b0000},{0x429b2000},{0x429b4000},{0x429b6000},{0x429b8000},{0x429ba000},{0x429bc000},{0x429be000}, +{0x429c0000},{0x429c2000},{0x429c4000},{0x429c6000},{0x429c8000},{0x429ca000},{0x429cc000},{0x429ce000},{0x429d0000},{0x429d2000},{0x429d4000},{0x429d6000},{0x429d8000},{0x429da000},{0x429dc000},{0x429de000},{0x429e0000},{0x429e2000},{0x429e4000},{0x429e6000},{0x429e8000},{0x429ea000},{0x429ec000},{0x429ee000},{0x429f0000},{0x429f2000},{0x429f4000},{0x429f6000},{0x429f8000},{0x429fa000},{0x429fc000},{0x429fe000}, +{0x42a00000},{0x42a02000},{0x42a04000},{0x42a06000},{0x42a08000},{0x42a0a000},{0x42a0c000},{0x42a0e000},{0x42a10000},{0x42a12000},{0x42a14000},{0x42a16000},{0x42a18000},{0x42a1a000},{0x42a1c000},{0x42a1e000},{0x42a20000},{0x42a22000},{0x42a24000},{0x42a26000},{0x42a28000},{0x42a2a000},{0x42a2c000},{0x42a2e000},{0x42a30000},{0x42a32000},{0x42a34000},{0x42a36000},{0x42a38000},{0x42a3a000},{0x42a3c000},{0x42a3e000}, +{0x42a40000},{0x42a42000},{0x42a44000},{0x42a46000},{0x42a48000},{0x42a4a000},{0x42a4c000},{0x42a4e000},{0x42a50000},{0x42a52000},{0x42a54000},{0x42a56000},{0x42a58000},{0x42a5a000},{0x42a5c000},{0x42a5e000},{0x42a60000},{0x42a62000},{0x42a64000},{0x42a66000},{0x42a68000},{0x42a6a000},{0x42a6c000},{0x42a6e000},{0x42a70000},{0x42a72000},{0x42a74000},{0x42a76000},{0x42a78000},{0x42a7a000},{0x42a7c000},{0x42a7e000}, +{0x42a80000},{0x42a82000},{0x42a84000},{0x42a86000},{0x42a88000},{0x42a8a000},{0x42a8c000},{0x42a8e000},{0x42a90000},{0x42a92000},{0x42a94000},{0x42a96000},{0x42a98000},{0x42a9a000},{0x42a9c000},{0x42a9e000},{0x42aa0000},{0x42aa2000},{0x42aa4000},{0x42aa6000},{0x42aa8000},{0x42aaa000},{0x42aac000},{0x42aae000},{0x42ab0000},{0x42ab2000},{0x42ab4000},{0x42ab6000},{0x42ab8000},{0x42aba000},{0x42abc000},{0x42abe000}, +{0x42ac0000},{0x42ac2000},{0x42ac4000},{0x42ac6000},{0x42ac8000},{0x42aca000},{0x42acc000},{0x42ace000},{0x42ad0000},{0x42ad2000},{0x42ad4000},{0x42ad6000},{0x42ad8000},{0x42ada000},{0x42adc000},{0x42ade000},{0x42ae0000},{0x42ae2000},{0x42ae4000},{0x42ae6000},{0x42ae8000},{0x42aea000},{0x42aec000},{0x42aee000},{0x42af0000},{0x42af2000},{0x42af4000},{0x42af6000},{0x42af8000},{0x42afa000},{0x42afc000},{0x42afe000}, +{0x42b00000},{0x42b02000},{0x42b04000},{0x42b06000},{0x42b08000},{0x42b0a000},{0x42b0c000},{0x42b0e000},{0x42b10000},{0x42b12000},{0x42b14000},{0x42b16000},{0x42b18000},{0x42b1a000},{0x42b1c000},{0x42b1e000},{0x42b20000},{0x42b22000},{0x42b24000},{0x42b26000},{0x42b28000},{0x42b2a000},{0x42b2c000},{0x42b2e000},{0x42b30000},{0x42b32000},{0x42b34000},{0x42b36000},{0x42b38000},{0x42b3a000},{0x42b3c000},{0x42b3e000}, +{0x42b40000},{0x42b42000},{0x42b44000},{0x42b46000},{0x42b48000},{0x42b4a000},{0x42b4c000},{0x42b4e000},{0x42b50000},{0x42b52000},{0x42b54000},{0x42b56000},{0x42b58000},{0x42b5a000},{0x42b5c000},{0x42b5e000},{0x42b60000},{0x42b62000},{0x42b64000},{0x42b66000},{0x42b68000},{0x42b6a000},{0x42b6c000},{0x42b6e000},{0x42b70000},{0x42b72000},{0x42b74000},{0x42b76000},{0x42b78000},{0x42b7a000},{0x42b7c000},{0x42b7e000}, +{0x42b80000},{0x42b82000},{0x42b84000},{0x42b86000},{0x42b88000},{0x42b8a000},{0x42b8c000},{0x42b8e000},{0x42b90000},{0x42b92000},{0x42b94000},{0x42b96000},{0x42b98000},{0x42b9a000},{0x42b9c000},{0x42b9e000},{0x42ba0000},{0x42ba2000},{0x42ba4000},{0x42ba6000},{0x42ba8000},{0x42baa000},{0x42bac000},{0x42bae000},{0x42bb0000},{0x42bb2000},{0x42bb4000},{0x42bb6000},{0x42bb8000},{0x42bba000},{0x42bbc000},{0x42bbe000}, +{0x42bc0000},{0x42bc2000},{0x42bc4000},{0x42bc6000},{0x42bc8000},{0x42bca000},{0x42bcc000},{0x42bce000},{0x42bd0000},{0x42bd2000},{0x42bd4000},{0x42bd6000},{0x42bd8000},{0x42bda000},{0x42bdc000},{0x42bde000},{0x42be0000},{0x42be2000},{0x42be4000},{0x42be6000},{0x42be8000},{0x42bea000},{0x42bec000},{0x42bee000},{0x42bf0000},{0x42bf2000},{0x42bf4000},{0x42bf6000},{0x42bf8000},{0x42bfa000},{0x42bfc000},{0x42bfe000}, +{0x42c00000},{0x42c02000},{0x42c04000},{0x42c06000},{0x42c08000},{0x42c0a000},{0x42c0c000},{0x42c0e000},{0x42c10000},{0x42c12000},{0x42c14000},{0x42c16000},{0x42c18000},{0x42c1a000},{0x42c1c000},{0x42c1e000},{0x42c20000},{0x42c22000},{0x42c24000},{0x42c26000},{0x42c28000},{0x42c2a000},{0x42c2c000},{0x42c2e000},{0x42c30000},{0x42c32000},{0x42c34000},{0x42c36000},{0x42c38000},{0x42c3a000},{0x42c3c000},{0x42c3e000}, +{0x42c40000},{0x42c42000},{0x42c44000},{0x42c46000},{0x42c48000},{0x42c4a000},{0x42c4c000},{0x42c4e000},{0x42c50000},{0x42c52000},{0x42c54000},{0x42c56000},{0x42c58000},{0x42c5a000},{0x42c5c000},{0x42c5e000},{0x42c60000},{0x42c62000},{0x42c64000},{0x42c66000},{0x42c68000},{0x42c6a000},{0x42c6c000},{0x42c6e000},{0x42c70000},{0x42c72000},{0x42c74000},{0x42c76000},{0x42c78000},{0x42c7a000},{0x42c7c000},{0x42c7e000}, +{0x42c80000},{0x42c82000},{0x42c84000},{0x42c86000},{0x42c88000},{0x42c8a000},{0x42c8c000},{0x42c8e000},{0x42c90000},{0x42c92000},{0x42c94000},{0x42c96000},{0x42c98000},{0x42c9a000},{0x42c9c000},{0x42c9e000},{0x42ca0000},{0x42ca2000},{0x42ca4000},{0x42ca6000},{0x42ca8000},{0x42caa000},{0x42cac000},{0x42cae000},{0x42cb0000},{0x42cb2000},{0x42cb4000},{0x42cb6000},{0x42cb8000},{0x42cba000},{0x42cbc000},{0x42cbe000}, +{0x42cc0000},{0x42cc2000},{0x42cc4000},{0x42cc6000},{0x42cc8000},{0x42cca000},{0x42ccc000},{0x42cce000},{0x42cd0000},{0x42cd2000},{0x42cd4000},{0x42cd6000},{0x42cd8000},{0x42cda000},{0x42cdc000},{0x42cde000},{0x42ce0000},{0x42ce2000},{0x42ce4000},{0x42ce6000},{0x42ce8000},{0x42cea000},{0x42cec000},{0x42cee000},{0x42cf0000},{0x42cf2000},{0x42cf4000},{0x42cf6000},{0x42cf8000},{0x42cfa000},{0x42cfc000},{0x42cfe000}, +{0x42d00000},{0x42d02000},{0x42d04000},{0x42d06000},{0x42d08000},{0x42d0a000},{0x42d0c000},{0x42d0e000},{0x42d10000},{0x42d12000},{0x42d14000},{0x42d16000},{0x42d18000},{0x42d1a000},{0x42d1c000},{0x42d1e000},{0x42d20000},{0x42d22000},{0x42d24000},{0x42d26000},{0x42d28000},{0x42d2a000},{0x42d2c000},{0x42d2e000},{0x42d30000},{0x42d32000},{0x42d34000},{0x42d36000},{0x42d38000},{0x42d3a000},{0x42d3c000},{0x42d3e000}, +{0x42d40000},{0x42d42000},{0x42d44000},{0x42d46000},{0x42d48000},{0x42d4a000},{0x42d4c000},{0x42d4e000},{0x42d50000},{0x42d52000},{0x42d54000},{0x42d56000},{0x42d58000},{0x42d5a000},{0x42d5c000},{0x42d5e000},{0x42d60000},{0x42d62000},{0x42d64000},{0x42d66000},{0x42d68000},{0x42d6a000},{0x42d6c000},{0x42d6e000},{0x42d70000},{0x42d72000},{0x42d74000},{0x42d76000},{0x42d78000},{0x42d7a000},{0x42d7c000},{0x42d7e000}, +{0x42d80000},{0x42d82000},{0x42d84000},{0x42d86000},{0x42d88000},{0x42d8a000},{0x42d8c000},{0x42d8e000},{0x42d90000},{0x42d92000},{0x42d94000},{0x42d96000},{0x42d98000},{0x42d9a000},{0x42d9c000},{0x42d9e000},{0x42da0000},{0x42da2000},{0x42da4000},{0x42da6000},{0x42da8000},{0x42daa000},{0x42dac000},{0x42dae000},{0x42db0000},{0x42db2000},{0x42db4000},{0x42db6000},{0x42db8000},{0x42dba000},{0x42dbc000},{0x42dbe000}, +{0x42dc0000},{0x42dc2000},{0x42dc4000},{0x42dc6000},{0x42dc8000},{0x42dca000},{0x42dcc000},{0x42dce000},{0x42dd0000},{0x42dd2000},{0x42dd4000},{0x42dd6000},{0x42dd8000},{0x42dda000},{0x42ddc000},{0x42dde000},{0x42de0000},{0x42de2000},{0x42de4000},{0x42de6000},{0x42de8000},{0x42dea000},{0x42dec000},{0x42dee000},{0x42df0000},{0x42df2000},{0x42df4000},{0x42df6000},{0x42df8000},{0x42dfa000},{0x42dfc000},{0x42dfe000}, +{0x42e00000},{0x42e02000},{0x42e04000},{0x42e06000},{0x42e08000},{0x42e0a000},{0x42e0c000},{0x42e0e000},{0x42e10000},{0x42e12000},{0x42e14000},{0x42e16000},{0x42e18000},{0x42e1a000},{0x42e1c000},{0x42e1e000},{0x42e20000},{0x42e22000},{0x42e24000},{0x42e26000},{0x42e28000},{0x42e2a000},{0x42e2c000},{0x42e2e000},{0x42e30000},{0x42e32000},{0x42e34000},{0x42e36000},{0x42e38000},{0x42e3a000},{0x42e3c000},{0x42e3e000}, +{0x42e40000},{0x42e42000},{0x42e44000},{0x42e46000},{0x42e48000},{0x42e4a000},{0x42e4c000},{0x42e4e000},{0x42e50000},{0x42e52000},{0x42e54000},{0x42e56000},{0x42e58000},{0x42e5a000},{0x42e5c000},{0x42e5e000},{0x42e60000},{0x42e62000},{0x42e64000},{0x42e66000},{0x42e68000},{0x42e6a000},{0x42e6c000},{0x42e6e000},{0x42e70000},{0x42e72000},{0x42e74000},{0x42e76000},{0x42e78000},{0x42e7a000},{0x42e7c000},{0x42e7e000}, +{0x42e80000},{0x42e82000},{0x42e84000},{0x42e86000},{0x42e88000},{0x42e8a000},{0x42e8c000},{0x42e8e000},{0x42e90000},{0x42e92000},{0x42e94000},{0x42e96000},{0x42e98000},{0x42e9a000},{0x42e9c000},{0x42e9e000},{0x42ea0000},{0x42ea2000},{0x42ea4000},{0x42ea6000},{0x42ea8000},{0x42eaa000},{0x42eac000},{0x42eae000},{0x42eb0000},{0x42eb2000},{0x42eb4000},{0x42eb6000},{0x42eb8000},{0x42eba000},{0x42ebc000},{0x42ebe000}, +{0x42ec0000},{0x42ec2000},{0x42ec4000},{0x42ec6000},{0x42ec8000},{0x42eca000},{0x42ecc000},{0x42ece000},{0x42ed0000},{0x42ed2000},{0x42ed4000},{0x42ed6000},{0x42ed8000},{0x42eda000},{0x42edc000},{0x42ede000},{0x42ee0000},{0x42ee2000},{0x42ee4000},{0x42ee6000},{0x42ee8000},{0x42eea000},{0x42eec000},{0x42eee000},{0x42ef0000},{0x42ef2000},{0x42ef4000},{0x42ef6000},{0x42ef8000},{0x42efa000},{0x42efc000},{0x42efe000}, +{0x42f00000},{0x42f02000},{0x42f04000},{0x42f06000},{0x42f08000},{0x42f0a000},{0x42f0c000},{0x42f0e000},{0x42f10000},{0x42f12000},{0x42f14000},{0x42f16000},{0x42f18000},{0x42f1a000},{0x42f1c000},{0x42f1e000},{0x42f20000},{0x42f22000},{0x42f24000},{0x42f26000},{0x42f28000},{0x42f2a000},{0x42f2c000},{0x42f2e000},{0x42f30000},{0x42f32000},{0x42f34000},{0x42f36000},{0x42f38000},{0x42f3a000},{0x42f3c000},{0x42f3e000}, +{0x42f40000},{0x42f42000},{0x42f44000},{0x42f46000},{0x42f48000},{0x42f4a000},{0x42f4c000},{0x42f4e000},{0x42f50000},{0x42f52000},{0x42f54000},{0x42f56000},{0x42f58000},{0x42f5a000},{0x42f5c000},{0x42f5e000},{0x42f60000},{0x42f62000},{0x42f64000},{0x42f66000},{0x42f68000},{0x42f6a000},{0x42f6c000},{0x42f6e000},{0x42f70000},{0x42f72000},{0x42f74000},{0x42f76000},{0x42f78000},{0x42f7a000},{0x42f7c000},{0x42f7e000}, +{0x42f80000},{0x42f82000},{0x42f84000},{0x42f86000},{0x42f88000},{0x42f8a000},{0x42f8c000},{0x42f8e000},{0x42f90000},{0x42f92000},{0x42f94000},{0x42f96000},{0x42f98000},{0x42f9a000},{0x42f9c000},{0x42f9e000},{0x42fa0000},{0x42fa2000},{0x42fa4000},{0x42fa6000},{0x42fa8000},{0x42faa000},{0x42fac000},{0x42fae000},{0x42fb0000},{0x42fb2000},{0x42fb4000},{0x42fb6000},{0x42fb8000},{0x42fba000},{0x42fbc000},{0x42fbe000}, +{0x42fc0000},{0x42fc2000},{0x42fc4000},{0x42fc6000},{0x42fc8000},{0x42fca000},{0x42fcc000},{0x42fce000},{0x42fd0000},{0x42fd2000},{0x42fd4000},{0x42fd6000},{0x42fd8000},{0x42fda000},{0x42fdc000},{0x42fde000},{0x42fe0000},{0x42fe2000},{0x42fe4000},{0x42fe6000},{0x42fe8000},{0x42fea000},{0x42fec000},{0x42fee000},{0x42ff0000},{0x42ff2000},{0x42ff4000},{0x42ff6000},{0x42ff8000},{0x42ffa000},{0x42ffc000},{0x42ffe000}, +{0x43000000},{0x43002000},{0x43004000},{0x43006000},{0x43008000},{0x4300a000},{0x4300c000},{0x4300e000},{0x43010000},{0x43012000},{0x43014000},{0x43016000},{0x43018000},{0x4301a000},{0x4301c000},{0x4301e000},{0x43020000},{0x43022000},{0x43024000},{0x43026000},{0x43028000},{0x4302a000},{0x4302c000},{0x4302e000},{0x43030000},{0x43032000},{0x43034000},{0x43036000},{0x43038000},{0x4303a000},{0x4303c000},{0x4303e000}, +{0x43040000},{0x43042000},{0x43044000},{0x43046000},{0x43048000},{0x4304a000},{0x4304c000},{0x4304e000},{0x43050000},{0x43052000},{0x43054000},{0x43056000},{0x43058000},{0x4305a000},{0x4305c000},{0x4305e000},{0x43060000},{0x43062000},{0x43064000},{0x43066000},{0x43068000},{0x4306a000},{0x4306c000},{0x4306e000},{0x43070000},{0x43072000},{0x43074000},{0x43076000},{0x43078000},{0x4307a000},{0x4307c000},{0x4307e000}, +{0x43080000},{0x43082000},{0x43084000},{0x43086000},{0x43088000},{0x4308a000},{0x4308c000},{0x4308e000},{0x43090000},{0x43092000},{0x43094000},{0x43096000},{0x43098000},{0x4309a000},{0x4309c000},{0x4309e000},{0x430a0000},{0x430a2000},{0x430a4000},{0x430a6000},{0x430a8000},{0x430aa000},{0x430ac000},{0x430ae000},{0x430b0000},{0x430b2000},{0x430b4000},{0x430b6000},{0x430b8000},{0x430ba000},{0x430bc000},{0x430be000}, +{0x430c0000},{0x430c2000},{0x430c4000},{0x430c6000},{0x430c8000},{0x430ca000},{0x430cc000},{0x430ce000},{0x430d0000},{0x430d2000},{0x430d4000},{0x430d6000},{0x430d8000},{0x430da000},{0x430dc000},{0x430de000},{0x430e0000},{0x430e2000},{0x430e4000},{0x430e6000},{0x430e8000},{0x430ea000},{0x430ec000},{0x430ee000},{0x430f0000},{0x430f2000},{0x430f4000},{0x430f6000},{0x430f8000},{0x430fa000},{0x430fc000},{0x430fe000}, +{0x43100000},{0x43102000},{0x43104000},{0x43106000},{0x43108000},{0x4310a000},{0x4310c000},{0x4310e000},{0x43110000},{0x43112000},{0x43114000},{0x43116000},{0x43118000},{0x4311a000},{0x4311c000},{0x4311e000},{0x43120000},{0x43122000},{0x43124000},{0x43126000},{0x43128000},{0x4312a000},{0x4312c000},{0x4312e000},{0x43130000},{0x43132000},{0x43134000},{0x43136000},{0x43138000},{0x4313a000},{0x4313c000},{0x4313e000}, +{0x43140000},{0x43142000},{0x43144000},{0x43146000},{0x43148000},{0x4314a000},{0x4314c000},{0x4314e000},{0x43150000},{0x43152000},{0x43154000},{0x43156000},{0x43158000},{0x4315a000},{0x4315c000},{0x4315e000},{0x43160000},{0x43162000},{0x43164000},{0x43166000},{0x43168000},{0x4316a000},{0x4316c000},{0x4316e000},{0x43170000},{0x43172000},{0x43174000},{0x43176000},{0x43178000},{0x4317a000},{0x4317c000},{0x4317e000}, +{0x43180000},{0x43182000},{0x43184000},{0x43186000},{0x43188000},{0x4318a000},{0x4318c000},{0x4318e000},{0x43190000},{0x43192000},{0x43194000},{0x43196000},{0x43198000},{0x4319a000},{0x4319c000},{0x4319e000},{0x431a0000},{0x431a2000},{0x431a4000},{0x431a6000},{0x431a8000},{0x431aa000},{0x431ac000},{0x431ae000},{0x431b0000},{0x431b2000},{0x431b4000},{0x431b6000},{0x431b8000},{0x431ba000},{0x431bc000},{0x431be000}, +{0x431c0000},{0x431c2000},{0x431c4000},{0x431c6000},{0x431c8000},{0x431ca000},{0x431cc000},{0x431ce000},{0x431d0000},{0x431d2000},{0x431d4000},{0x431d6000},{0x431d8000},{0x431da000},{0x431dc000},{0x431de000},{0x431e0000},{0x431e2000},{0x431e4000},{0x431e6000},{0x431e8000},{0x431ea000},{0x431ec000},{0x431ee000},{0x431f0000},{0x431f2000},{0x431f4000},{0x431f6000},{0x431f8000},{0x431fa000},{0x431fc000},{0x431fe000}, +{0x43200000},{0x43202000},{0x43204000},{0x43206000},{0x43208000},{0x4320a000},{0x4320c000},{0x4320e000},{0x43210000},{0x43212000},{0x43214000},{0x43216000},{0x43218000},{0x4321a000},{0x4321c000},{0x4321e000},{0x43220000},{0x43222000},{0x43224000},{0x43226000},{0x43228000},{0x4322a000},{0x4322c000},{0x4322e000},{0x43230000},{0x43232000},{0x43234000},{0x43236000},{0x43238000},{0x4323a000},{0x4323c000},{0x4323e000}, +{0x43240000},{0x43242000},{0x43244000},{0x43246000},{0x43248000},{0x4324a000},{0x4324c000},{0x4324e000},{0x43250000},{0x43252000},{0x43254000},{0x43256000},{0x43258000},{0x4325a000},{0x4325c000},{0x4325e000},{0x43260000},{0x43262000},{0x43264000},{0x43266000},{0x43268000},{0x4326a000},{0x4326c000},{0x4326e000},{0x43270000},{0x43272000},{0x43274000},{0x43276000},{0x43278000},{0x4327a000},{0x4327c000},{0x4327e000}, +{0x43280000},{0x43282000},{0x43284000},{0x43286000},{0x43288000},{0x4328a000},{0x4328c000},{0x4328e000},{0x43290000},{0x43292000},{0x43294000},{0x43296000},{0x43298000},{0x4329a000},{0x4329c000},{0x4329e000},{0x432a0000},{0x432a2000},{0x432a4000},{0x432a6000},{0x432a8000},{0x432aa000},{0x432ac000},{0x432ae000},{0x432b0000},{0x432b2000},{0x432b4000},{0x432b6000},{0x432b8000},{0x432ba000},{0x432bc000},{0x432be000}, +{0x432c0000},{0x432c2000},{0x432c4000},{0x432c6000},{0x432c8000},{0x432ca000},{0x432cc000},{0x432ce000},{0x432d0000},{0x432d2000},{0x432d4000},{0x432d6000},{0x432d8000},{0x432da000},{0x432dc000},{0x432de000},{0x432e0000},{0x432e2000},{0x432e4000},{0x432e6000},{0x432e8000},{0x432ea000},{0x432ec000},{0x432ee000},{0x432f0000},{0x432f2000},{0x432f4000},{0x432f6000},{0x432f8000},{0x432fa000},{0x432fc000},{0x432fe000}, +{0x43300000},{0x43302000},{0x43304000},{0x43306000},{0x43308000},{0x4330a000},{0x4330c000},{0x4330e000},{0x43310000},{0x43312000},{0x43314000},{0x43316000},{0x43318000},{0x4331a000},{0x4331c000},{0x4331e000},{0x43320000},{0x43322000},{0x43324000},{0x43326000},{0x43328000},{0x4332a000},{0x4332c000},{0x4332e000},{0x43330000},{0x43332000},{0x43334000},{0x43336000},{0x43338000},{0x4333a000},{0x4333c000},{0x4333e000}, +{0x43340000},{0x43342000},{0x43344000},{0x43346000},{0x43348000},{0x4334a000},{0x4334c000},{0x4334e000},{0x43350000},{0x43352000},{0x43354000},{0x43356000},{0x43358000},{0x4335a000},{0x4335c000},{0x4335e000},{0x43360000},{0x43362000},{0x43364000},{0x43366000},{0x43368000},{0x4336a000},{0x4336c000},{0x4336e000},{0x43370000},{0x43372000},{0x43374000},{0x43376000},{0x43378000},{0x4337a000},{0x4337c000},{0x4337e000}, +{0x43380000},{0x43382000},{0x43384000},{0x43386000},{0x43388000},{0x4338a000},{0x4338c000},{0x4338e000},{0x43390000},{0x43392000},{0x43394000},{0x43396000},{0x43398000},{0x4339a000},{0x4339c000},{0x4339e000},{0x433a0000},{0x433a2000},{0x433a4000},{0x433a6000},{0x433a8000},{0x433aa000},{0x433ac000},{0x433ae000},{0x433b0000},{0x433b2000},{0x433b4000},{0x433b6000},{0x433b8000},{0x433ba000},{0x433bc000},{0x433be000}, +{0x433c0000},{0x433c2000},{0x433c4000},{0x433c6000},{0x433c8000},{0x433ca000},{0x433cc000},{0x433ce000},{0x433d0000},{0x433d2000},{0x433d4000},{0x433d6000},{0x433d8000},{0x433da000},{0x433dc000},{0x433de000},{0x433e0000},{0x433e2000},{0x433e4000},{0x433e6000},{0x433e8000},{0x433ea000},{0x433ec000},{0x433ee000},{0x433f0000},{0x433f2000},{0x433f4000},{0x433f6000},{0x433f8000},{0x433fa000},{0x433fc000},{0x433fe000}, +{0x43400000},{0x43402000},{0x43404000},{0x43406000},{0x43408000},{0x4340a000},{0x4340c000},{0x4340e000},{0x43410000},{0x43412000},{0x43414000},{0x43416000},{0x43418000},{0x4341a000},{0x4341c000},{0x4341e000},{0x43420000},{0x43422000},{0x43424000},{0x43426000},{0x43428000},{0x4342a000},{0x4342c000},{0x4342e000},{0x43430000},{0x43432000},{0x43434000},{0x43436000},{0x43438000},{0x4343a000},{0x4343c000},{0x4343e000}, +{0x43440000},{0x43442000},{0x43444000},{0x43446000},{0x43448000},{0x4344a000},{0x4344c000},{0x4344e000},{0x43450000},{0x43452000},{0x43454000},{0x43456000},{0x43458000},{0x4345a000},{0x4345c000},{0x4345e000},{0x43460000},{0x43462000},{0x43464000},{0x43466000},{0x43468000},{0x4346a000},{0x4346c000},{0x4346e000},{0x43470000},{0x43472000},{0x43474000},{0x43476000},{0x43478000},{0x4347a000},{0x4347c000},{0x4347e000}, +{0x43480000},{0x43482000},{0x43484000},{0x43486000},{0x43488000},{0x4348a000},{0x4348c000},{0x4348e000},{0x43490000},{0x43492000},{0x43494000},{0x43496000},{0x43498000},{0x4349a000},{0x4349c000},{0x4349e000},{0x434a0000},{0x434a2000},{0x434a4000},{0x434a6000},{0x434a8000},{0x434aa000},{0x434ac000},{0x434ae000},{0x434b0000},{0x434b2000},{0x434b4000},{0x434b6000},{0x434b8000},{0x434ba000},{0x434bc000},{0x434be000}, +{0x434c0000},{0x434c2000},{0x434c4000},{0x434c6000},{0x434c8000},{0x434ca000},{0x434cc000},{0x434ce000},{0x434d0000},{0x434d2000},{0x434d4000},{0x434d6000},{0x434d8000},{0x434da000},{0x434dc000},{0x434de000},{0x434e0000},{0x434e2000},{0x434e4000},{0x434e6000},{0x434e8000},{0x434ea000},{0x434ec000},{0x434ee000},{0x434f0000},{0x434f2000},{0x434f4000},{0x434f6000},{0x434f8000},{0x434fa000},{0x434fc000},{0x434fe000}, +{0x43500000},{0x43502000},{0x43504000},{0x43506000},{0x43508000},{0x4350a000},{0x4350c000},{0x4350e000},{0x43510000},{0x43512000},{0x43514000},{0x43516000},{0x43518000},{0x4351a000},{0x4351c000},{0x4351e000},{0x43520000},{0x43522000},{0x43524000},{0x43526000},{0x43528000},{0x4352a000},{0x4352c000},{0x4352e000},{0x43530000},{0x43532000},{0x43534000},{0x43536000},{0x43538000},{0x4353a000},{0x4353c000},{0x4353e000}, +{0x43540000},{0x43542000},{0x43544000},{0x43546000},{0x43548000},{0x4354a000},{0x4354c000},{0x4354e000},{0x43550000},{0x43552000},{0x43554000},{0x43556000},{0x43558000},{0x4355a000},{0x4355c000},{0x4355e000},{0x43560000},{0x43562000},{0x43564000},{0x43566000},{0x43568000},{0x4356a000},{0x4356c000},{0x4356e000},{0x43570000},{0x43572000},{0x43574000},{0x43576000},{0x43578000},{0x4357a000},{0x4357c000},{0x4357e000}, +{0x43580000},{0x43582000},{0x43584000},{0x43586000},{0x43588000},{0x4358a000},{0x4358c000},{0x4358e000},{0x43590000},{0x43592000},{0x43594000},{0x43596000},{0x43598000},{0x4359a000},{0x4359c000},{0x4359e000},{0x435a0000},{0x435a2000},{0x435a4000},{0x435a6000},{0x435a8000},{0x435aa000},{0x435ac000},{0x435ae000},{0x435b0000},{0x435b2000},{0x435b4000},{0x435b6000},{0x435b8000},{0x435ba000},{0x435bc000},{0x435be000}, +{0x435c0000},{0x435c2000},{0x435c4000},{0x435c6000},{0x435c8000},{0x435ca000},{0x435cc000},{0x435ce000},{0x435d0000},{0x435d2000},{0x435d4000},{0x435d6000},{0x435d8000},{0x435da000},{0x435dc000},{0x435de000},{0x435e0000},{0x435e2000},{0x435e4000},{0x435e6000},{0x435e8000},{0x435ea000},{0x435ec000},{0x435ee000},{0x435f0000},{0x435f2000},{0x435f4000},{0x435f6000},{0x435f8000},{0x435fa000},{0x435fc000},{0x435fe000}, +{0x43600000},{0x43602000},{0x43604000},{0x43606000},{0x43608000},{0x4360a000},{0x4360c000},{0x4360e000},{0x43610000},{0x43612000},{0x43614000},{0x43616000},{0x43618000},{0x4361a000},{0x4361c000},{0x4361e000},{0x43620000},{0x43622000},{0x43624000},{0x43626000},{0x43628000},{0x4362a000},{0x4362c000},{0x4362e000},{0x43630000},{0x43632000},{0x43634000},{0x43636000},{0x43638000},{0x4363a000},{0x4363c000},{0x4363e000}, +{0x43640000},{0x43642000},{0x43644000},{0x43646000},{0x43648000},{0x4364a000},{0x4364c000},{0x4364e000},{0x43650000},{0x43652000},{0x43654000},{0x43656000},{0x43658000},{0x4365a000},{0x4365c000},{0x4365e000},{0x43660000},{0x43662000},{0x43664000},{0x43666000},{0x43668000},{0x4366a000},{0x4366c000},{0x4366e000},{0x43670000},{0x43672000},{0x43674000},{0x43676000},{0x43678000},{0x4367a000},{0x4367c000},{0x4367e000}, +{0x43680000},{0x43682000},{0x43684000},{0x43686000},{0x43688000},{0x4368a000},{0x4368c000},{0x4368e000},{0x43690000},{0x43692000},{0x43694000},{0x43696000},{0x43698000},{0x4369a000},{0x4369c000},{0x4369e000},{0x436a0000},{0x436a2000},{0x436a4000},{0x436a6000},{0x436a8000},{0x436aa000},{0x436ac000},{0x436ae000},{0x436b0000},{0x436b2000},{0x436b4000},{0x436b6000},{0x436b8000},{0x436ba000},{0x436bc000},{0x436be000}, +{0x436c0000},{0x436c2000},{0x436c4000},{0x436c6000},{0x436c8000},{0x436ca000},{0x436cc000},{0x436ce000},{0x436d0000},{0x436d2000},{0x436d4000},{0x436d6000},{0x436d8000},{0x436da000},{0x436dc000},{0x436de000},{0x436e0000},{0x436e2000},{0x436e4000},{0x436e6000},{0x436e8000},{0x436ea000},{0x436ec000},{0x436ee000},{0x436f0000},{0x436f2000},{0x436f4000},{0x436f6000},{0x436f8000},{0x436fa000},{0x436fc000},{0x436fe000}, +{0x43700000},{0x43702000},{0x43704000},{0x43706000},{0x43708000},{0x4370a000},{0x4370c000},{0x4370e000},{0x43710000},{0x43712000},{0x43714000},{0x43716000},{0x43718000},{0x4371a000},{0x4371c000},{0x4371e000},{0x43720000},{0x43722000},{0x43724000},{0x43726000},{0x43728000},{0x4372a000},{0x4372c000},{0x4372e000},{0x43730000},{0x43732000},{0x43734000},{0x43736000},{0x43738000},{0x4373a000},{0x4373c000},{0x4373e000}, +{0x43740000},{0x43742000},{0x43744000},{0x43746000},{0x43748000},{0x4374a000},{0x4374c000},{0x4374e000},{0x43750000},{0x43752000},{0x43754000},{0x43756000},{0x43758000},{0x4375a000},{0x4375c000},{0x4375e000},{0x43760000},{0x43762000},{0x43764000},{0x43766000},{0x43768000},{0x4376a000},{0x4376c000},{0x4376e000},{0x43770000},{0x43772000},{0x43774000},{0x43776000},{0x43778000},{0x4377a000},{0x4377c000},{0x4377e000}, +{0x43780000},{0x43782000},{0x43784000},{0x43786000},{0x43788000},{0x4378a000},{0x4378c000},{0x4378e000},{0x43790000},{0x43792000},{0x43794000},{0x43796000},{0x43798000},{0x4379a000},{0x4379c000},{0x4379e000},{0x437a0000},{0x437a2000},{0x437a4000},{0x437a6000},{0x437a8000},{0x437aa000},{0x437ac000},{0x437ae000},{0x437b0000},{0x437b2000},{0x437b4000},{0x437b6000},{0x437b8000},{0x437ba000},{0x437bc000},{0x437be000}, +{0x437c0000},{0x437c2000},{0x437c4000},{0x437c6000},{0x437c8000},{0x437ca000},{0x437cc000},{0x437ce000},{0x437d0000},{0x437d2000},{0x437d4000},{0x437d6000},{0x437d8000},{0x437da000},{0x437dc000},{0x437de000},{0x437e0000},{0x437e2000},{0x437e4000},{0x437e6000},{0x437e8000},{0x437ea000},{0x437ec000},{0x437ee000},{0x437f0000},{0x437f2000},{0x437f4000},{0x437f6000},{0x437f8000},{0x437fa000},{0x437fc000},{0x437fe000}, +{0x43800000},{0x43802000},{0x43804000},{0x43806000},{0x43808000},{0x4380a000},{0x4380c000},{0x4380e000},{0x43810000},{0x43812000},{0x43814000},{0x43816000},{0x43818000},{0x4381a000},{0x4381c000},{0x4381e000},{0x43820000},{0x43822000},{0x43824000},{0x43826000},{0x43828000},{0x4382a000},{0x4382c000},{0x4382e000},{0x43830000},{0x43832000},{0x43834000},{0x43836000},{0x43838000},{0x4383a000},{0x4383c000},{0x4383e000}, +{0x43840000},{0x43842000},{0x43844000},{0x43846000},{0x43848000},{0x4384a000},{0x4384c000},{0x4384e000},{0x43850000},{0x43852000},{0x43854000},{0x43856000},{0x43858000},{0x4385a000},{0x4385c000},{0x4385e000},{0x43860000},{0x43862000},{0x43864000},{0x43866000},{0x43868000},{0x4386a000},{0x4386c000},{0x4386e000},{0x43870000},{0x43872000},{0x43874000},{0x43876000},{0x43878000},{0x4387a000},{0x4387c000},{0x4387e000}, +{0x43880000},{0x43882000},{0x43884000},{0x43886000},{0x43888000},{0x4388a000},{0x4388c000},{0x4388e000},{0x43890000},{0x43892000},{0x43894000},{0x43896000},{0x43898000},{0x4389a000},{0x4389c000},{0x4389e000},{0x438a0000},{0x438a2000},{0x438a4000},{0x438a6000},{0x438a8000},{0x438aa000},{0x438ac000},{0x438ae000},{0x438b0000},{0x438b2000},{0x438b4000},{0x438b6000},{0x438b8000},{0x438ba000},{0x438bc000},{0x438be000}, +{0x438c0000},{0x438c2000},{0x438c4000},{0x438c6000},{0x438c8000},{0x438ca000},{0x438cc000},{0x438ce000},{0x438d0000},{0x438d2000},{0x438d4000},{0x438d6000},{0x438d8000},{0x438da000},{0x438dc000},{0x438de000},{0x438e0000},{0x438e2000},{0x438e4000},{0x438e6000},{0x438e8000},{0x438ea000},{0x438ec000},{0x438ee000},{0x438f0000},{0x438f2000},{0x438f4000},{0x438f6000},{0x438f8000},{0x438fa000},{0x438fc000},{0x438fe000}, +{0x43900000},{0x43902000},{0x43904000},{0x43906000},{0x43908000},{0x4390a000},{0x4390c000},{0x4390e000},{0x43910000},{0x43912000},{0x43914000},{0x43916000},{0x43918000},{0x4391a000},{0x4391c000},{0x4391e000},{0x43920000},{0x43922000},{0x43924000},{0x43926000},{0x43928000},{0x4392a000},{0x4392c000},{0x4392e000},{0x43930000},{0x43932000},{0x43934000},{0x43936000},{0x43938000},{0x4393a000},{0x4393c000},{0x4393e000}, +{0x43940000},{0x43942000},{0x43944000},{0x43946000},{0x43948000},{0x4394a000},{0x4394c000},{0x4394e000},{0x43950000},{0x43952000},{0x43954000},{0x43956000},{0x43958000},{0x4395a000},{0x4395c000},{0x4395e000},{0x43960000},{0x43962000},{0x43964000},{0x43966000},{0x43968000},{0x4396a000},{0x4396c000},{0x4396e000},{0x43970000},{0x43972000},{0x43974000},{0x43976000},{0x43978000},{0x4397a000},{0x4397c000},{0x4397e000}, +{0x43980000},{0x43982000},{0x43984000},{0x43986000},{0x43988000},{0x4398a000},{0x4398c000},{0x4398e000},{0x43990000},{0x43992000},{0x43994000},{0x43996000},{0x43998000},{0x4399a000},{0x4399c000},{0x4399e000},{0x439a0000},{0x439a2000},{0x439a4000},{0x439a6000},{0x439a8000},{0x439aa000},{0x439ac000},{0x439ae000},{0x439b0000},{0x439b2000},{0x439b4000},{0x439b6000},{0x439b8000},{0x439ba000},{0x439bc000},{0x439be000}, +{0x439c0000},{0x439c2000},{0x439c4000},{0x439c6000},{0x439c8000},{0x439ca000},{0x439cc000},{0x439ce000},{0x439d0000},{0x439d2000},{0x439d4000},{0x439d6000},{0x439d8000},{0x439da000},{0x439dc000},{0x439de000},{0x439e0000},{0x439e2000},{0x439e4000},{0x439e6000},{0x439e8000},{0x439ea000},{0x439ec000},{0x439ee000},{0x439f0000},{0x439f2000},{0x439f4000},{0x439f6000},{0x439f8000},{0x439fa000},{0x439fc000},{0x439fe000}, +{0x43a00000},{0x43a02000},{0x43a04000},{0x43a06000},{0x43a08000},{0x43a0a000},{0x43a0c000},{0x43a0e000},{0x43a10000},{0x43a12000},{0x43a14000},{0x43a16000},{0x43a18000},{0x43a1a000},{0x43a1c000},{0x43a1e000},{0x43a20000},{0x43a22000},{0x43a24000},{0x43a26000},{0x43a28000},{0x43a2a000},{0x43a2c000},{0x43a2e000},{0x43a30000},{0x43a32000},{0x43a34000},{0x43a36000},{0x43a38000},{0x43a3a000},{0x43a3c000},{0x43a3e000}, +{0x43a40000},{0x43a42000},{0x43a44000},{0x43a46000},{0x43a48000},{0x43a4a000},{0x43a4c000},{0x43a4e000},{0x43a50000},{0x43a52000},{0x43a54000},{0x43a56000},{0x43a58000},{0x43a5a000},{0x43a5c000},{0x43a5e000},{0x43a60000},{0x43a62000},{0x43a64000},{0x43a66000},{0x43a68000},{0x43a6a000},{0x43a6c000},{0x43a6e000},{0x43a70000},{0x43a72000},{0x43a74000},{0x43a76000},{0x43a78000},{0x43a7a000},{0x43a7c000},{0x43a7e000}, +{0x43a80000},{0x43a82000},{0x43a84000},{0x43a86000},{0x43a88000},{0x43a8a000},{0x43a8c000},{0x43a8e000},{0x43a90000},{0x43a92000},{0x43a94000},{0x43a96000},{0x43a98000},{0x43a9a000},{0x43a9c000},{0x43a9e000},{0x43aa0000},{0x43aa2000},{0x43aa4000},{0x43aa6000},{0x43aa8000},{0x43aaa000},{0x43aac000},{0x43aae000},{0x43ab0000},{0x43ab2000},{0x43ab4000},{0x43ab6000},{0x43ab8000},{0x43aba000},{0x43abc000},{0x43abe000}, +{0x43ac0000},{0x43ac2000},{0x43ac4000},{0x43ac6000},{0x43ac8000},{0x43aca000},{0x43acc000},{0x43ace000},{0x43ad0000},{0x43ad2000},{0x43ad4000},{0x43ad6000},{0x43ad8000},{0x43ada000},{0x43adc000},{0x43ade000},{0x43ae0000},{0x43ae2000},{0x43ae4000},{0x43ae6000},{0x43ae8000},{0x43aea000},{0x43aec000},{0x43aee000},{0x43af0000},{0x43af2000},{0x43af4000},{0x43af6000},{0x43af8000},{0x43afa000},{0x43afc000},{0x43afe000}, +{0x43b00000},{0x43b02000},{0x43b04000},{0x43b06000},{0x43b08000},{0x43b0a000},{0x43b0c000},{0x43b0e000},{0x43b10000},{0x43b12000},{0x43b14000},{0x43b16000},{0x43b18000},{0x43b1a000},{0x43b1c000},{0x43b1e000},{0x43b20000},{0x43b22000},{0x43b24000},{0x43b26000},{0x43b28000},{0x43b2a000},{0x43b2c000},{0x43b2e000},{0x43b30000},{0x43b32000},{0x43b34000},{0x43b36000},{0x43b38000},{0x43b3a000},{0x43b3c000},{0x43b3e000}, +{0x43b40000},{0x43b42000},{0x43b44000},{0x43b46000},{0x43b48000},{0x43b4a000},{0x43b4c000},{0x43b4e000},{0x43b50000},{0x43b52000},{0x43b54000},{0x43b56000},{0x43b58000},{0x43b5a000},{0x43b5c000},{0x43b5e000},{0x43b60000},{0x43b62000},{0x43b64000},{0x43b66000},{0x43b68000},{0x43b6a000},{0x43b6c000},{0x43b6e000},{0x43b70000},{0x43b72000},{0x43b74000},{0x43b76000},{0x43b78000},{0x43b7a000},{0x43b7c000},{0x43b7e000}, +{0x43b80000},{0x43b82000},{0x43b84000},{0x43b86000},{0x43b88000},{0x43b8a000},{0x43b8c000},{0x43b8e000},{0x43b90000},{0x43b92000},{0x43b94000},{0x43b96000},{0x43b98000},{0x43b9a000},{0x43b9c000},{0x43b9e000},{0x43ba0000},{0x43ba2000},{0x43ba4000},{0x43ba6000},{0x43ba8000},{0x43baa000},{0x43bac000},{0x43bae000},{0x43bb0000},{0x43bb2000},{0x43bb4000},{0x43bb6000},{0x43bb8000},{0x43bba000},{0x43bbc000},{0x43bbe000}, +{0x43bc0000},{0x43bc2000},{0x43bc4000},{0x43bc6000},{0x43bc8000},{0x43bca000},{0x43bcc000},{0x43bce000},{0x43bd0000},{0x43bd2000},{0x43bd4000},{0x43bd6000},{0x43bd8000},{0x43bda000},{0x43bdc000},{0x43bde000},{0x43be0000},{0x43be2000},{0x43be4000},{0x43be6000},{0x43be8000},{0x43bea000},{0x43bec000},{0x43bee000},{0x43bf0000},{0x43bf2000},{0x43bf4000},{0x43bf6000},{0x43bf8000},{0x43bfa000},{0x43bfc000},{0x43bfe000}, +{0x43c00000},{0x43c02000},{0x43c04000},{0x43c06000},{0x43c08000},{0x43c0a000},{0x43c0c000},{0x43c0e000},{0x43c10000},{0x43c12000},{0x43c14000},{0x43c16000},{0x43c18000},{0x43c1a000},{0x43c1c000},{0x43c1e000},{0x43c20000},{0x43c22000},{0x43c24000},{0x43c26000},{0x43c28000},{0x43c2a000},{0x43c2c000},{0x43c2e000},{0x43c30000},{0x43c32000},{0x43c34000},{0x43c36000},{0x43c38000},{0x43c3a000},{0x43c3c000},{0x43c3e000}, +{0x43c40000},{0x43c42000},{0x43c44000},{0x43c46000},{0x43c48000},{0x43c4a000},{0x43c4c000},{0x43c4e000},{0x43c50000},{0x43c52000},{0x43c54000},{0x43c56000},{0x43c58000},{0x43c5a000},{0x43c5c000},{0x43c5e000},{0x43c60000},{0x43c62000},{0x43c64000},{0x43c66000},{0x43c68000},{0x43c6a000},{0x43c6c000},{0x43c6e000},{0x43c70000},{0x43c72000},{0x43c74000},{0x43c76000},{0x43c78000},{0x43c7a000},{0x43c7c000},{0x43c7e000}, +{0x43c80000},{0x43c82000},{0x43c84000},{0x43c86000},{0x43c88000},{0x43c8a000},{0x43c8c000},{0x43c8e000},{0x43c90000},{0x43c92000},{0x43c94000},{0x43c96000},{0x43c98000},{0x43c9a000},{0x43c9c000},{0x43c9e000},{0x43ca0000},{0x43ca2000},{0x43ca4000},{0x43ca6000},{0x43ca8000},{0x43caa000},{0x43cac000},{0x43cae000},{0x43cb0000},{0x43cb2000},{0x43cb4000},{0x43cb6000},{0x43cb8000},{0x43cba000},{0x43cbc000},{0x43cbe000}, +{0x43cc0000},{0x43cc2000},{0x43cc4000},{0x43cc6000},{0x43cc8000},{0x43cca000},{0x43ccc000},{0x43cce000},{0x43cd0000},{0x43cd2000},{0x43cd4000},{0x43cd6000},{0x43cd8000},{0x43cda000},{0x43cdc000},{0x43cde000},{0x43ce0000},{0x43ce2000},{0x43ce4000},{0x43ce6000},{0x43ce8000},{0x43cea000},{0x43cec000},{0x43cee000},{0x43cf0000},{0x43cf2000},{0x43cf4000},{0x43cf6000},{0x43cf8000},{0x43cfa000},{0x43cfc000},{0x43cfe000}, +{0x43d00000},{0x43d02000},{0x43d04000},{0x43d06000},{0x43d08000},{0x43d0a000},{0x43d0c000},{0x43d0e000},{0x43d10000},{0x43d12000},{0x43d14000},{0x43d16000},{0x43d18000},{0x43d1a000},{0x43d1c000},{0x43d1e000},{0x43d20000},{0x43d22000},{0x43d24000},{0x43d26000},{0x43d28000},{0x43d2a000},{0x43d2c000},{0x43d2e000},{0x43d30000},{0x43d32000},{0x43d34000},{0x43d36000},{0x43d38000},{0x43d3a000},{0x43d3c000},{0x43d3e000}, +{0x43d40000},{0x43d42000},{0x43d44000},{0x43d46000},{0x43d48000},{0x43d4a000},{0x43d4c000},{0x43d4e000},{0x43d50000},{0x43d52000},{0x43d54000},{0x43d56000},{0x43d58000},{0x43d5a000},{0x43d5c000},{0x43d5e000},{0x43d60000},{0x43d62000},{0x43d64000},{0x43d66000},{0x43d68000},{0x43d6a000},{0x43d6c000},{0x43d6e000},{0x43d70000},{0x43d72000},{0x43d74000},{0x43d76000},{0x43d78000},{0x43d7a000},{0x43d7c000},{0x43d7e000}, +{0x43d80000},{0x43d82000},{0x43d84000},{0x43d86000},{0x43d88000},{0x43d8a000},{0x43d8c000},{0x43d8e000},{0x43d90000},{0x43d92000},{0x43d94000},{0x43d96000},{0x43d98000},{0x43d9a000},{0x43d9c000},{0x43d9e000},{0x43da0000},{0x43da2000},{0x43da4000},{0x43da6000},{0x43da8000},{0x43daa000},{0x43dac000},{0x43dae000},{0x43db0000},{0x43db2000},{0x43db4000},{0x43db6000},{0x43db8000},{0x43dba000},{0x43dbc000},{0x43dbe000}, +{0x43dc0000},{0x43dc2000},{0x43dc4000},{0x43dc6000},{0x43dc8000},{0x43dca000},{0x43dcc000},{0x43dce000},{0x43dd0000},{0x43dd2000},{0x43dd4000},{0x43dd6000},{0x43dd8000},{0x43dda000},{0x43ddc000},{0x43dde000},{0x43de0000},{0x43de2000},{0x43de4000},{0x43de6000},{0x43de8000},{0x43dea000},{0x43dec000},{0x43dee000},{0x43df0000},{0x43df2000},{0x43df4000},{0x43df6000},{0x43df8000},{0x43dfa000},{0x43dfc000},{0x43dfe000}, +{0x43e00000},{0x43e02000},{0x43e04000},{0x43e06000},{0x43e08000},{0x43e0a000},{0x43e0c000},{0x43e0e000},{0x43e10000},{0x43e12000},{0x43e14000},{0x43e16000},{0x43e18000},{0x43e1a000},{0x43e1c000},{0x43e1e000},{0x43e20000},{0x43e22000},{0x43e24000},{0x43e26000},{0x43e28000},{0x43e2a000},{0x43e2c000},{0x43e2e000},{0x43e30000},{0x43e32000},{0x43e34000},{0x43e36000},{0x43e38000},{0x43e3a000},{0x43e3c000},{0x43e3e000}, +{0x43e40000},{0x43e42000},{0x43e44000},{0x43e46000},{0x43e48000},{0x43e4a000},{0x43e4c000},{0x43e4e000},{0x43e50000},{0x43e52000},{0x43e54000},{0x43e56000},{0x43e58000},{0x43e5a000},{0x43e5c000},{0x43e5e000},{0x43e60000},{0x43e62000},{0x43e64000},{0x43e66000},{0x43e68000},{0x43e6a000},{0x43e6c000},{0x43e6e000},{0x43e70000},{0x43e72000},{0x43e74000},{0x43e76000},{0x43e78000},{0x43e7a000},{0x43e7c000},{0x43e7e000}, +{0x43e80000},{0x43e82000},{0x43e84000},{0x43e86000},{0x43e88000},{0x43e8a000},{0x43e8c000},{0x43e8e000},{0x43e90000},{0x43e92000},{0x43e94000},{0x43e96000},{0x43e98000},{0x43e9a000},{0x43e9c000},{0x43e9e000},{0x43ea0000},{0x43ea2000},{0x43ea4000},{0x43ea6000},{0x43ea8000},{0x43eaa000},{0x43eac000},{0x43eae000},{0x43eb0000},{0x43eb2000},{0x43eb4000},{0x43eb6000},{0x43eb8000},{0x43eba000},{0x43ebc000},{0x43ebe000}, +{0x43ec0000},{0x43ec2000},{0x43ec4000},{0x43ec6000},{0x43ec8000},{0x43eca000},{0x43ecc000},{0x43ece000},{0x43ed0000},{0x43ed2000},{0x43ed4000},{0x43ed6000},{0x43ed8000},{0x43eda000},{0x43edc000},{0x43ede000},{0x43ee0000},{0x43ee2000},{0x43ee4000},{0x43ee6000},{0x43ee8000},{0x43eea000},{0x43eec000},{0x43eee000},{0x43ef0000},{0x43ef2000},{0x43ef4000},{0x43ef6000},{0x43ef8000},{0x43efa000},{0x43efc000},{0x43efe000}, +{0x43f00000},{0x43f02000},{0x43f04000},{0x43f06000},{0x43f08000},{0x43f0a000},{0x43f0c000},{0x43f0e000},{0x43f10000},{0x43f12000},{0x43f14000},{0x43f16000},{0x43f18000},{0x43f1a000},{0x43f1c000},{0x43f1e000},{0x43f20000},{0x43f22000},{0x43f24000},{0x43f26000},{0x43f28000},{0x43f2a000},{0x43f2c000},{0x43f2e000},{0x43f30000},{0x43f32000},{0x43f34000},{0x43f36000},{0x43f38000},{0x43f3a000},{0x43f3c000},{0x43f3e000}, +{0x43f40000},{0x43f42000},{0x43f44000},{0x43f46000},{0x43f48000},{0x43f4a000},{0x43f4c000},{0x43f4e000},{0x43f50000},{0x43f52000},{0x43f54000},{0x43f56000},{0x43f58000},{0x43f5a000},{0x43f5c000},{0x43f5e000},{0x43f60000},{0x43f62000},{0x43f64000},{0x43f66000},{0x43f68000},{0x43f6a000},{0x43f6c000},{0x43f6e000},{0x43f70000},{0x43f72000},{0x43f74000},{0x43f76000},{0x43f78000},{0x43f7a000},{0x43f7c000},{0x43f7e000}, +{0x43f80000},{0x43f82000},{0x43f84000},{0x43f86000},{0x43f88000},{0x43f8a000},{0x43f8c000},{0x43f8e000},{0x43f90000},{0x43f92000},{0x43f94000},{0x43f96000},{0x43f98000},{0x43f9a000},{0x43f9c000},{0x43f9e000},{0x43fa0000},{0x43fa2000},{0x43fa4000},{0x43fa6000},{0x43fa8000},{0x43faa000},{0x43fac000},{0x43fae000},{0x43fb0000},{0x43fb2000},{0x43fb4000},{0x43fb6000},{0x43fb8000},{0x43fba000},{0x43fbc000},{0x43fbe000}, +{0x43fc0000},{0x43fc2000},{0x43fc4000},{0x43fc6000},{0x43fc8000},{0x43fca000},{0x43fcc000},{0x43fce000},{0x43fd0000},{0x43fd2000},{0x43fd4000},{0x43fd6000},{0x43fd8000},{0x43fda000},{0x43fdc000},{0x43fde000},{0x43fe0000},{0x43fe2000},{0x43fe4000},{0x43fe6000},{0x43fe8000},{0x43fea000},{0x43fec000},{0x43fee000},{0x43ff0000},{0x43ff2000},{0x43ff4000},{0x43ff6000},{0x43ff8000},{0x43ffa000},{0x43ffc000},{0x43ffe000}, +{0x44000000},{0x44002000},{0x44004000},{0x44006000},{0x44008000},{0x4400a000},{0x4400c000},{0x4400e000},{0x44010000},{0x44012000},{0x44014000},{0x44016000},{0x44018000},{0x4401a000},{0x4401c000},{0x4401e000},{0x44020000},{0x44022000},{0x44024000},{0x44026000},{0x44028000},{0x4402a000},{0x4402c000},{0x4402e000},{0x44030000},{0x44032000},{0x44034000},{0x44036000},{0x44038000},{0x4403a000},{0x4403c000},{0x4403e000}, +{0x44040000},{0x44042000},{0x44044000},{0x44046000},{0x44048000},{0x4404a000},{0x4404c000},{0x4404e000},{0x44050000},{0x44052000},{0x44054000},{0x44056000},{0x44058000},{0x4405a000},{0x4405c000},{0x4405e000},{0x44060000},{0x44062000},{0x44064000},{0x44066000},{0x44068000},{0x4406a000},{0x4406c000},{0x4406e000},{0x44070000},{0x44072000},{0x44074000},{0x44076000},{0x44078000},{0x4407a000},{0x4407c000},{0x4407e000}, +{0x44080000},{0x44082000},{0x44084000},{0x44086000},{0x44088000},{0x4408a000},{0x4408c000},{0x4408e000},{0x44090000},{0x44092000},{0x44094000},{0x44096000},{0x44098000},{0x4409a000},{0x4409c000},{0x4409e000},{0x440a0000},{0x440a2000},{0x440a4000},{0x440a6000},{0x440a8000},{0x440aa000},{0x440ac000},{0x440ae000},{0x440b0000},{0x440b2000},{0x440b4000},{0x440b6000},{0x440b8000},{0x440ba000},{0x440bc000},{0x440be000}, +{0x440c0000},{0x440c2000},{0x440c4000},{0x440c6000},{0x440c8000},{0x440ca000},{0x440cc000},{0x440ce000},{0x440d0000},{0x440d2000},{0x440d4000},{0x440d6000},{0x440d8000},{0x440da000},{0x440dc000},{0x440de000},{0x440e0000},{0x440e2000},{0x440e4000},{0x440e6000},{0x440e8000},{0x440ea000},{0x440ec000},{0x440ee000},{0x440f0000},{0x440f2000},{0x440f4000},{0x440f6000},{0x440f8000},{0x440fa000},{0x440fc000},{0x440fe000}, +{0x44100000},{0x44102000},{0x44104000},{0x44106000},{0x44108000},{0x4410a000},{0x4410c000},{0x4410e000},{0x44110000},{0x44112000},{0x44114000},{0x44116000},{0x44118000},{0x4411a000},{0x4411c000},{0x4411e000},{0x44120000},{0x44122000},{0x44124000},{0x44126000},{0x44128000},{0x4412a000},{0x4412c000},{0x4412e000},{0x44130000},{0x44132000},{0x44134000},{0x44136000},{0x44138000},{0x4413a000},{0x4413c000},{0x4413e000}, +{0x44140000},{0x44142000},{0x44144000},{0x44146000},{0x44148000},{0x4414a000},{0x4414c000},{0x4414e000},{0x44150000},{0x44152000},{0x44154000},{0x44156000},{0x44158000},{0x4415a000},{0x4415c000},{0x4415e000},{0x44160000},{0x44162000},{0x44164000},{0x44166000},{0x44168000},{0x4416a000},{0x4416c000},{0x4416e000},{0x44170000},{0x44172000},{0x44174000},{0x44176000},{0x44178000},{0x4417a000},{0x4417c000},{0x4417e000}, +{0x44180000},{0x44182000},{0x44184000},{0x44186000},{0x44188000},{0x4418a000},{0x4418c000},{0x4418e000},{0x44190000},{0x44192000},{0x44194000},{0x44196000},{0x44198000},{0x4419a000},{0x4419c000},{0x4419e000},{0x441a0000},{0x441a2000},{0x441a4000},{0x441a6000},{0x441a8000},{0x441aa000},{0x441ac000},{0x441ae000},{0x441b0000},{0x441b2000},{0x441b4000},{0x441b6000},{0x441b8000},{0x441ba000},{0x441bc000},{0x441be000}, +{0x441c0000},{0x441c2000},{0x441c4000},{0x441c6000},{0x441c8000},{0x441ca000},{0x441cc000},{0x441ce000},{0x441d0000},{0x441d2000},{0x441d4000},{0x441d6000},{0x441d8000},{0x441da000},{0x441dc000},{0x441de000},{0x441e0000},{0x441e2000},{0x441e4000},{0x441e6000},{0x441e8000},{0x441ea000},{0x441ec000},{0x441ee000},{0x441f0000},{0x441f2000},{0x441f4000},{0x441f6000},{0x441f8000},{0x441fa000},{0x441fc000},{0x441fe000}, +{0x44200000},{0x44202000},{0x44204000},{0x44206000},{0x44208000},{0x4420a000},{0x4420c000},{0x4420e000},{0x44210000},{0x44212000},{0x44214000},{0x44216000},{0x44218000},{0x4421a000},{0x4421c000},{0x4421e000},{0x44220000},{0x44222000},{0x44224000},{0x44226000},{0x44228000},{0x4422a000},{0x4422c000},{0x4422e000},{0x44230000},{0x44232000},{0x44234000},{0x44236000},{0x44238000},{0x4423a000},{0x4423c000},{0x4423e000}, +{0x44240000},{0x44242000},{0x44244000},{0x44246000},{0x44248000},{0x4424a000},{0x4424c000},{0x4424e000},{0x44250000},{0x44252000},{0x44254000},{0x44256000},{0x44258000},{0x4425a000},{0x4425c000},{0x4425e000},{0x44260000},{0x44262000},{0x44264000},{0x44266000},{0x44268000},{0x4426a000},{0x4426c000},{0x4426e000},{0x44270000},{0x44272000},{0x44274000},{0x44276000},{0x44278000},{0x4427a000},{0x4427c000},{0x4427e000}, +{0x44280000},{0x44282000},{0x44284000},{0x44286000},{0x44288000},{0x4428a000},{0x4428c000},{0x4428e000},{0x44290000},{0x44292000},{0x44294000},{0x44296000},{0x44298000},{0x4429a000},{0x4429c000},{0x4429e000},{0x442a0000},{0x442a2000},{0x442a4000},{0x442a6000},{0x442a8000},{0x442aa000},{0x442ac000},{0x442ae000},{0x442b0000},{0x442b2000},{0x442b4000},{0x442b6000},{0x442b8000},{0x442ba000},{0x442bc000},{0x442be000}, +{0x442c0000},{0x442c2000},{0x442c4000},{0x442c6000},{0x442c8000},{0x442ca000},{0x442cc000},{0x442ce000},{0x442d0000},{0x442d2000},{0x442d4000},{0x442d6000},{0x442d8000},{0x442da000},{0x442dc000},{0x442de000},{0x442e0000},{0x442e2000},{0x442e4000},{0x442e6000},{0x442e8000},{0x442ea000},{0x442ec000},{0x442ee000},{0x442f0000},{0x442f2000},{0x442f4000},{0x442f6000},{0x442f8000},{0x442fa000},{0x442fc000},{0x442fe000}, +{0x44300000},{0x44302000},{0x44304000},{0x44306000},{0x44308000},{0x4430a000},{0x4430c000},{0x4430e000},{0x44310000},{0x44312000},{0x44314000},{0x44316000},{0x44318000},{0x4431a000},{0x4431c000},{0x4431e000},{0x44320000},{0x44322000},{0x44324000},{0x44326000},{0x44328000},{0x4432a000},{0x4432c000},{0x4432e000},{0x44330000},{0x44332000},{0x44334000},{0x44336000},{0x44338000},{0x4433a000},{0x4433c000},{0x4433e000}, +{0x44340000},{0x44342000},{0x44344000},{0x44346000},{0x44348000},{0x4434a000},{0x4434c000},{0x4434e000},{0x44350000},{0x44352000},{0x44354000},{0x44356000},{0x44358000},{0x4435a000},{0x4435c000},{0x4435e000},{0x44360000},{0x44362000},{0x44364000},{0x44366000},{0x44368000},{0x4436a000},{0x4436c000},{0x4436e000},{0x44370000},{0x44372000},{0x44374000},{0x44376000},{0x44378000},{0x4437a000},{0x4437c000},{0x4437e000}, +{0x44380000},{0x44382000},{0x44384000},{0x44386000},{0x44388000},{0x4438a000},{0x4438c000},{0x4438e000},{0x44390000},{0x44392000},{0x44394000},{0x44396000},{0x44398000},{0x4439a000},{0x4439c000},{0x4439e000},{0x443a0000},{0x443a2000},{0x443a4000},{0x443a6000},{0x443a8000},{0x443aa000},{0x443ac000},{0x443ae000},{0x443b0000},{0x443b2000},{0x443b4000},{0x443b6000},{0x443b8000},{0x443ba000},{0x443bc000},{0x443be000}, +{0x443c0000},{0x443c2000},{0x443c4000},{0x443c6000},{0x443c8000},{0x443ca000},{0x443cc000},{0x443ce000},{0x443d0000},{0x443d2000},{0x443d4000},{0x443d6000},{0x443d8000},{0x443da000},{0x443dc000},{0x443de000},{0x443e0000},{0x443e2000},{0x443e4000},{0x443e6000},{0x443e8000},{0x443ea000},{0x443ec000},{0x443ee000},{0x443f0000},{0x443f2000},{0x443f4000},{0x443f6000},{0x443f8000},{0x443fa000},{0x443fc000},{0x443fe000}, +{0x44400000},{0x44402000},{0x44404000},{0x44406000},{0x44408000},{0x4440a000},{0x4440c000},{0x4440e000},{0x44410000},{0x44412000},{0x44414000},{0x44416000},{0x44418000},{0x4441a000},{0x4441c000},{0x4441e000},{0x44420000},{0x44422000},{0x44424000},{0x44426000},{0x44428000},{0x4442a000},{0x4442c000},{0x4442e000},{0x44430000},{0x44432000},{0x44434000},{0x44436000},{0x44438000},{0x4443a000},{0x4443c000},{0x4443e000}, +{0x44440000},{0x44442000},{0x44444000},{0x44446000},{0x44448000},{0x4444a000},{0x4444c000},{0x4444e000},{0x44450000},{0x44452000},{0x44454000},{0x44456000},{0x44458000},{0x4445a000},{0x4445c000},{0x4445e000},{0x44460000},{0x44462000},{0x44464000},{0x44466000},{0x44468000},{0x4446a000},{0x4446c000},{0x4446e000},{0x44470000},{0x44472000},{0x44474000},{0x44476000},{0x44478000},{0x4447a000},{0x4447c000},{0x4447e000}, +{0x44480000},{0x44482000},{0x44484000},{0x44486000},{0x44488000},{0x4448a000},{0x4448c000},{0x4448e000},{0x44490000},{0x44492000},{0x44494000},{0x44496000},{0x44498000},{0x4449a000},{0x4449c000},{0x4449e000},{0x444a0000},{0x444a2000},{0x444a4000},{0x444a6000},{0x444a8000},{0x444aa000},{0x444ac000},{0x444ae000},{0x444b0000},{0x444b2000},{0x444b4000},{0x444b6000},{0x444b8000},{0x444ba000},{0x444bc000},{0x444be000}, +{0x444c0000},{0x444c2000},{0x444c4000},{0x444c6000},{0x444c8000},{0x444ca000},{0x444cc000},{0x444ce000},{0x444d0000},{0x444d2000},{0x444d4000},{0x444d6000},{0x444d8000},{0x444da000},{0x444dc000},{0x444de000},{0x444e0000},{0x444e2000},{0x444e4000},{0x444e6000},{0x444e8000},{0x444ea000},{0x444ec000},{0x444ee000},{0x444f0000},{0x444f2000},{0x444f4000},{0x444f6000},{0x444f8000},{0x444fa000},{0x444fc000},{0x444fe000}, +{0x44500000},{0x44502000},{0x44504000},{0x44506000},{0x44508000},{0x4450a000},{0x4450c000},{0x4450e000},{0x44510000},{0x44512000},{0x44514000},{0x44516000},{0x44518000},{0x4451a000},{0x4451c000},{0x4451e000},{0x44520000},{0x44522000},{0x44524000},{0x44526000},{0x44528000},{0x4452a000},{0x4452c000},{0x4452e000},{0x44530000},{0x44532000},{0x44534000},{0x44536000},{0x44538000},{0x4453a000},{0x4453c000},{0x4453e000}, +{0x44540000},{0x44542000},{0x44544000},{0x44546000},{0x44548000},{0x4454a000},{0x4454c000},{0x4454e000},{0x44550000},{0x44552000},{0x44554000},{0x44556000},{0x44558000},{0x4455a000},{0x4455c000},{0x4455e000},{0x44560000},{0x44562000},{0x44564000},{0x44566000},{0x44568000},{0x4456a000},{0x4456c000},{0x4456e000},{0x44570000},{0x44572000},{0x44574000},{0x44576000},{0x44578000},{0x4457a000},{0x4457c000},{0x4457e000}, +{0x44580000},{0x44582000},{0x44584000},{0x44586000},{0x44588000},{0x4458a000},{0x4458c000},{0x4458e000},{0x44590000},{0x44592000},{0x44594000},{0x44596000},{0x44598000},{0x4459a000},{0x4459c000},{0x4459e000},{0x445a0000},{0x445a2000},{0x445a4000},{0x445a6000},{0x445a8000},{0x445aa000},{0x445ac000},{0x445ae000},{0x445b0000},{0x445b2000},{0x445b4000},{0x445b6000},{0x445b8000},{0x445ba000},{0x445bc000},{0x445be000}, +{0x445c0000},{0x445c2000},{0x445c4000},{0x445c6000},{0x445c8000},{0x445ca000},{0x445cc000},{0x445ce000},{0x445d0000},{0x445d2000},{0x445d4000},{0x445d6000},{0x445d8000},{0x445da000},{0x445dc000},{0x445de000},{0x445e0000},{0x445e2000},{0x445e4000},{0x445e6000},{0x445e8000},{0x445ea000},{0x445ec000},{0x445ee000},{0x445f0000},{0x445f2000},{0x445f4000},{0x445f6000},{0x445f8000},{0x445fa000},{0x445fc000},{0x445fe000}, +{0x44600000},{0x44602000},{0x44604000},{0x44606000},{0x44608000},{0x4460a000},{0x4460c000},{0x4460e000},{0x44610000},{0x44612000},{0x44614000},{0x44616000},{0x44618000},{0x4461a000},{0x4461c000},{0x4461e000},{0x44620000},{0x44622000},{0x44624000},{0x44626000},{0x44628000},{0x4462a000},{0x4462c000},{0x4462e000},{0x44630000},{0x44632000},{0x44634000},{0x44636000},{0x44638000},{0x4463a000},{0x4463c000},{0x4463e000}, +{0x44640000},{0x44642000},{0x44644000},{0x44646000},{0x44648000},{0x4464a000},{0x4464c000},{0x4464e000},{0x44650000},{0x44652000},{0x44654000},{0x44656000},{0x44658000},{0x4465a000},{0x4465c000},{0x4465e000},{0x44660000},{0x44662000},{0x44664000},{0x44666000},{0x44668000},{0x4466a000},{0x4466c000},{0x4466e000},{0x44670000},{0x44672000},{0x44674000},{0x44676000},{0x44678000},{0x4467a000},{0x4467c000},{0x4467e000}, +{0x44680000},{0x44682000},{0x44684000},{0x44686000},{0x44688000},{0x4468a000},{0x4468c000},{0x4468e000},{0x44690000},{0x44692000},{0x44694000},{0x44696000},{0x44698000},{0x4469a000},{0x4469c000},{0x4469e000},{0x446a0000},{0x446a2000},{0x446a4000},{0x446a6000},{0x446a8000},{0x446aa000},{0x446ac000},{0x446ae000},{0x446b0000},{0x446b2000},{0x446b4000},{0x446b6000},{0x446b8000},{0x446ba000},{0x446bc000},{0x446be000}, +{0x446c0000},{0x446c2000},{0x446c4000},{0x446c6000},{0x446c8000},{0x446ca000},{0x446cc000},{0x446ce000},{0x446d0000},{0x446d2000},{0x446d4000},{0x446d6000},{0x446d8000},{0x446da000},{0x446dc000},{0x446de000},{0x446e0000},{0x446e2000},{0x446e4000},{0x446e6000},{0x446e8000},{0x446ea000},{0x446ec000},{0x446ee000},{0x446f0000},{0x446f2000},{0x446f4000},{0x446f6000},{0x446f8000},{0x446fa000},{0x446fc000},{0x446fe000}, +{0x44700000},{0x44702000},{0x44704000},{0x44706000},{0x44708000},{0x4470a000},{0x4470c000},{0x4470e000},{0x44710000},{0x44712000},{0x44714000},{0x44716000},{0x44718000},{0x4471a000},{0x4471c000},{0x4471e000},{0x44720000},{0x44722000},{0x44724000},{0x44726000},{0x44728000},{0x4472a000},{0x4472c000},{0x4472e000},{0x44730000},{0x44732000},{0x44734000},{0x44736000},{0x44738000},{0x4473a000},{0x4473c000},{0x4473e000}, +{0x44740000},{0x44742000},{0x44744000},{0x44746000},{0x44748000},{0x4474a000},{0x4474c000},{0x4474e000},{0x44750000},{0x44752000},{0x44754000},{0x44756000},{0x44758000},{0x4475a000},{0x4475c000},{0x4475e000},{0x44760000},{0x44762000},{0x44764000},{0x44766000},{0x44768000},{0x4476a000},{0x4476c000},{0x4476e000},{0x44770000},{0x44772000},{0x44774000},{0x44776000},{0x44778000},{0x4477a000},{0x4477c000},{0x4477e000}, +{0x44780000},{0x44782000},{0x44784000},{0x44786000},{0x44788000},{0x4478a000},{0x4478c000},{0x4478e000},{0x44790000},{0x44792000},{0x44794000},{0x44796000},{0x44798000},{0x4479a000},{0x4479c000},{0x4479e000},{0x447a0000},{0x447a2000},{0x447a4000},{0x447a6000},{0x447a8000},{0x447aa000},{0x447ac000},{0x447ae000},{0x447b0000},{0x447b2000},{0x447b4000},{0x447b6000},{0x447b8000},{0x447ba000},{0x447bc000},{0x447be000}, +{0x447c0000},{0x447c2000},{0x447c4000},{0x447c6000},{0x447c8000},{0x447ca000},{0x447cc000},{0x447ce000},{0x447d0000},{0x447d2000},{0x447d4000},{0x447d6000},{0x447d8000},{0x447da000},{0x447dc000},{0x447de000},{0x447e0000},{0x447e2000},{0x447e4000},{0x447e6000},{0x447e8000},{0x447ea000},{0x447ec000},{0x447ee000},{0x447f0000},{0x447f2000},{0x447f4000},{0x447f6000},{0x447f8000},{0x447fa000},{0x447fc000},{0x447fe000}, +{0x44800000},{0x44802000},{0x44804000},{0x44806000},{0x44808000},{0x4480a000},{0x4480c000},{0x4480e000},{0x44810000},{0x44812000},{0x44814000},{0x44816000},{0x44818000},{0x4481a000},{0x4481c000},{0x4481e000},{0x44820000},{0x44822000},{0x44824000},{0x44826000},{0x44828000},{0x4482a000},{0x4482c000},{0x4482e000},{0x44830000},{0x44832000},{0x44834000},{0x44836000},{0x44838000},{0x4483a000},{0x4483c000},{0x4483e000}, +{0x44840000},{0x44842000},{0x44844000},{0x44846000},{0x44848000},{0x4484a000},{0x4484c000},{0x4484e000},{0x44850000},{0x44852000},{0x44854000},{0x44856000},{0x44858000},{0x4485a000},{0x4485c000},{0x4485e000},{0x44860000},{0x44862000},{0x44864000},{0x44866000},{0x44868000},{0x4486a000},{0x4486c000},{0x4486e000},{0x44870000},{0x44872000},{0x44874000},{0x44876000},{0x44878000},{0x4487a000},{0x4487c000},{0x4487e000}, +{0x44880000},{0x44882000},{0x44884000},{0x44886000},{0x44888000},{0x4488a000},{0x4488c000},{0x4488e000},{0x44890000},{0x44892000},{0x44894000},{0x44896000},{0x44898000},{0x4489a000},{0x4489c000},{0x4489e000},{0x448a0000},{0x448a2000},{0x448a4000},{0x448a6000},{0x448a8000},{0x448aa000},{0x448ac000},{0x448ae000},{0x448b0000},{0x448b2000},{0x448b4000},{0x448b6000},{0x448b8000},{0x448ba000},{0x448bc000},{0x448be000}, +{0x448c0000},{0x448c2000},{0x448c4000},{0x448c6000},{0x448c8000},{0x448ca000},{0x448cc000},{0x448ce000},{0x448d0000},{0x448d2000},{0x448d4000},{0x448d6000},{0x448d8000},{0x448da000},{0x448dc000},{0x448de000},{0x448e0000},{0x448e2000},{0x448e4000},{0x448e6000},{0x448e8000},{0x448ea000},{0x448ec000},{0x448ee000},{0x448f0000},{0x448f2000},{0x448f4000},{0x448f6000},{0x448f8000},{0x448fa000},{0x448fc000},{0x448fe000}, +{0x44900000},{0x44902000},{0x44904000},{0x44906000},{0x44908000},{0x4490a000},{0x4490c000},{0x4490e000},{0x44910000},{0x44912000},{0x44914000},{0x44916000},{0x44918000},{0x4491a000},{0x4491c000},{0x4491e000},{0x44920000},{0x44922000},{0x44924000},{0x44926000},{0x44928000},{0x4492a000},{0x4492c000},{0x4492e000},{0x44930000},{0x44932000},{0x44934000},{0x44936000},{0x44938000},{0x4493a000},{0x4493c000},{0x4493e000}, +{0x44940000},{0x44942000},{0x44944000},{0x44946000},{0x44948000},{0x4494a000},{0x4494c000},{0x4494e000},{0x44950000},{0x44952000},{0x44954000},{0x44956000},{0x44958000},{0x4495a000},{0x4495c000},{0x4495e000},{0x44960000},{0x44962000},{0x44964000},{0x44966000},{0x44968000},{0x4496a000},{0x4496c000},{0x4496e000},{0x44970000},{0x44972000},{0x44974000},{0x44976000},{0x44978000},{0x4497a000},{0x4497c000},{0x4497e000}, +{0x44980000},{0x44982000},{0x44984000},{0x44986000},{0x44988000},{0x4498a000},{0x4498c000},{0x4498e000},{0x44990000},{0x44992000},{0x44994000},{0x44996000},{0x44998000},{0x4499a000},{0x4499c000},{0x4499e000},{0x449a0000},{0x449a2000},{0x449a4000},{0x449a6000},{0x449a8000},{0x449aa000},{0x449ac000},{0x449ae000},{0x449b0000},{0x449b2000},{0x449b4000},{0x449b6000},{0x449b8000},{0x449ba000},{0x449bc000},{0x449be000}, +{0x449c0000},{0x449c2000},{0x449c4000},{0x449c6000},{0x449c8000},{0x449ca000},{0x449cc000},{0x449ce000},{0x449d0000},{0x449d2000},{0x449d4000},{0x449d6000},{0x449d8000},{0x449da000},{0x449dc000},{0x449de000},{0x449e0000},{0x449e2000},{0x449e4000},{0x449e6000},{0x449e8000},{0x449ea000},{0x449ec000},{0x449ee000},{0x449f0000},{0x449f2000},{0x449f4000},{0x449f6000},{0x449f8000},{0x449fa000},{0x449fc000},{0x449fe000}, +{0x44a00000},{0x44a02000},{0x44a04000},{0x44a06000},{0x44a08000},{0x44a0a000},{0x44a0c000},{0x44a0e000},{0x44a10000},{0x44a12000},{0x44a14000},{0x44a16000},{0x44a18000},{0x44a1a000},{0x44a1c000},{0x44a1e000},{0x44a20000},{0x44a22000},{0x44a24000},{0x44a26000},{0x44a28000},{0x44a2a000},{0x44a2c000},{0x44a2e000},{0x44a30000},{0x44a32000},{0x44a34000},{0x44a36000},{0x44a38000},{0x44a3a000},{0x44a3c000},{0x44a3e000}, +{0x44a40000},{0x44a42000},{0x44a44000},{0x44a46000},{0x44a48000},{0x44a4a000},{0x44a4c000},{0x44a4e000},{0x44a50000},{0x44a52000},{0x44a54000},{0x44a56000},{0x44a58000},{0x44a5a000},{0x44a5c000},{0x44a5e000},{0x44a60000},{0x44a62000},{0x44a64000},{0x44a66000},{0x44a68000},{0x44a6a000},{0x44a6c000},{0x44a6e000},{0x44a70000},{0x44a72000},{0x44a74000},{0x44a76000},{0x44a78000},{0x44a7a000},{0x44a7c000},{0x44a7e000}, +{0x44a80000},{0x44a82000},{0x44a84000},{0x44a86000},{0x44a88000},{0x44a8a000},{0x44a8c000},{0x44a8e000},{0x44a90000},{0x44a92000},{0x44a94000},{0x44a96000},{0x44a98000},{0x44a9a000},{0x44a9c000},{0x44a9e000},{0x44aa0000},{0x44aa2000},{0x44aa4000},{0x44aa6000},{0x44aa8000},{0x44aaa000},{0x44aac000},{0x44aae000},{0x44ab0000},{0x44ab2000},{0x44ab4000},{0x44ab6000},{0x44ab8000},{0x44aba000},{0x44abc000},{0x44abe000}, +{0x44ac0000},{0x44ac2000},{0x44ac4000},{0x44ac6000},{0x44ac8000},{0x44aca000},{0x44acc000},{0x44ace000},{0x44ad0000},{0x44ad2000},{0x44ad4000},{0x44ad6000},{0x44ad8000},{0x44ada000},{0x44adc000},{0x44ade000},{0x44ae0000},{0x44ae2000},{0x44ae4000},{0x44ae6000},{0x44ae8000},{0x44aea000},{0x44aec000},{0x44aee000},{0x44af0000},{0x44af2000},{0x44af4000},{0x44af6000},{0x44af8000},{0x44afa000},{0x44afc000},{0x44afe000}, +{0x44b00000},{0x44b02000},{0x44b04000},{0x44b06000},{0x44b08000},{0x44b0a000},{0x44b0c000},{0x44b0e000},{0x44b10000},{0x44b12000},{0x44b14000},{0x44b16000},{0x44b18000},{0x44b1a000},{0x44b1c000},{0x44b1e000},{0x44b20000},{0x44b22000},{0x44b24000},{0x44b26000},{0x44b28000},{0x44b2a000},{0x44b2c000},{0x44b2e000},{0x44b30000},{0x44b32000},{0x44b34000},{0x44b36000},{0x44b38000},{0x44b3a000},{0x44b3c000},{0x44b3e000}, +{0x44b40000},{0x44b42000},{0x44b44000},{0x44b46000},{0x44b48000},{0x44b4a000},{0x44b4c000},{0x44b4e000},{0x44b50000},{0x44b52000},{0x44b54000},{0x44b56000},{0x44b58000},{0x44b5a000},{0x44b5c000},{0x44b5e000},{0x44b60000},{0x44b62000},{0x44b64000},{0x44b66000},{0x44b68000},{0x44b6a000},{0x44b6c000},{0x44b6e000},{0x44b70000},{0x44b72000},{0x44b74000},{0x44b76000},{0x44b78000},{0x44b7a000},{0x44b7c000},{0x44b7e000}, +{0x44b80000},{0x44b82000},{0x44b84000},{0x44b86000},{0x44b88000},{0x44b8a000},{0x44b8c000},{0x44b8e000},{0x44b90000},{0x44b92000},{0x44b94000},{0x44b96000},{0x44b98000},{0x44b9a000},{0x44b9c000},{0x44b9e000},{0x44ba0000},{0x44ba2000},{0x44ba4000},{0x44ba6000},{0x44ba8000},{0x44baa000},{0x44bac000},{0x44bae000},{0x44bb0000},{0x44bb2000},{0x44bb4000},{0x44bb6000},{0x44bb8000},{0x44bba000},{0x44bbc000},{0x44bbe000}, +{0x44bc0000},{0x44bc2000},{0x44bc4000},{0x44bc6000},{0x44bc8000},{0x44bca000},{0x44bcc000},{0x44bce000},{0x44bd0000},{0x44bd2000},{0x44bd4000},{0x44bd6000},{0x44bd8000},{0x44bda000},{0x44bdc000},{0x44bde000},{0x44be0000},{0x44be2000},{0x44be4000},{0x44be6000},{0x44be8000},{0x44bea000},{0x44bec000},{0x44bee000},{0x44bf0000},{0x44bf2000},{0x44bf4000},{0x44bf6000},{0x44bf8000},{0x44bfa000},{0x44bfc000},{0x44bfe000}, +{0x44c00000},{0x44c02000},{0x44c04000},{0x44c06000},{0x44c08000},{0x44c0a000},{0x44c0c000},{0x44c0e000},{0x44c10000},{0x44c12000},{0x44c14000},{0x44c16000},{0x44c18000},{0x44c1a000},{0x44c1c000},{0x44c1e000},{0x44c20000},{0x44c22000},{0x44c24000},{0x44c26000},{0x44c28000},{0x44c2a000},{0x44c2c000},{0x44c2e000},{0x44c30000},{0x44c32000},{0x44c34000},{0x44c36000},{0x44c38000},{0x44c3a000},{0x44c3c000},{0x44c3e000}, +{0x44c40000},{0x44c42000},{0x44c44000},{0x44c46000},{0x44c48000},{0x44c4a000},{0x44c4c000},{0x44c4e000},{0x44c50000},{0x44c52000},{0x44c54000},{0x44c56000},{0x44c58000},{0x44c5a000},{0x44c5c000},{0x44c5e000},{0x44c60000},{0x44c62000},{0x44c64000},{0x44c66000},{0x44c68000},{0x44c6a000},{0x44c6c000},{0x44c6e000},{0x44c70000},{0x44c72000},{0x44c74000},{0x44c76000},{0x44c78000},{0x44c7a000},{0x44c7c000},{0x44c7e000}, +{0x44c80000},{0x44c82000},{0x44c84000},{0x44c86000},{0x44c88000},{0x44c8a000},{0x44c8c000},{0x44c8e000},{0x44c90000},{0x44c92000},{0x44c94000},{0x44c96000},{0x44c98000},{0x44c9a000},{0x44c9c000},{0x44c9e000},{0x44ca0000},{0x44ca2000},{0x44ca4000},{0x44ca6000},{0x44ca8000},{0x44caa000},{0x44cac000},{0x44cae000},{0x44cb0000},{0x44cb2000},{0x44cb4000},{0x44cb6000},{0x44cb8000},{0x44cba000},{0x44cbc000},{0x44cbe000}, +{0x44cc0000},{0x44cc2000},{0x44cc4000},{0x44cc6000},{0x44cc8000},{0x44cca000},{0x44ccc000},{0x44cce000},{0x44cd0000},{0x44cd2000},{0x44cd4000},{0x44cd6000},{0x44cd8000},{0x44cda000},{0x44cdc000},{0x44cde000},{0x44ce0000},{0x44ce2000},{0x44ce4000},{0x44ce6000},{0x44ce8000},{0x44cea000},{0x44cec000},{0x44cee000},{0x44cf0000},{0x44cf2000},{0x44cf4000},{0x44cf6000},{0x44cf8000},{0x44cfa000},{0x44cfc000},{0x44cfe000}, +{0x44d00000},{0x44d02000},{0x44d04000},{0x44d06000},{0x44d08000},{0x44d0a000},{0x44d0c000},{0x44d0e000},{0x44d10000},{0x44d12000},{0x44d14000},{0x44d16000},{0x44d18000},{0x44d1a000},{0x44d1c000},{0x44d1e000},{0x44d20000},{0x44d22000},{0x44d24000},{0x44d26000},{0x44d28000},{0x44d2a000},{0x44d2c000},{0x44d2e000},{0x44d30000},{0x44d32000},{0x44d34000},{0x44d36000},{0x44d38000},{0x44d3a000},{0x44d3c000},{0x44d3e000}, +{0x44d40000},{0x44d42000},{0x44d44000},{0x44d46000},{0x44d48000},{0x44d4a000},{0x44d4c000},{0x44d4e000},{0x44d50000},{0x44d52000},{0x44d54000},{0x44d56000},{0x44d58000},{0x44d5a000},{0x44d5c000},{0x44d5e000},{0x44d60000},{0x44d62000},{0x44d64000},{0x44d66000},{0x44d68000},{0x44d6a000},{0x44d6c000},{0x44d6e000},{0x44d70000},{0x44d72000},{0x44d74000},{0x44d76000},{0x44d78000},{0x44d7a000},{0x44d7c000},{0x44d7e000}, +{0x44d80000},{0x44d82000},{0x44d84000},{0x44d86000},{0x44d88000},{0x44d8a000},{0x44d8c000},{0x44d8e000},{0x44d90000},{0x44d92000},{0x44d94000},{0x44d96000},{0x44d98000},{0x44d9a000},{0x44d9c000},{0x44d9e000},{0x44da0000},{0x44da2000},{0x44da4000},{0x44da6000},{0x44da8000},{0x44daa000},{0x44dac000},{0x44dae000},{0x44db0000},{0x44db2000},{0x44db4000},{0x44db6000},{0x44db8000},{0x44dba000},{0x44dbc000},{0x44dbe000}, +{0x44dc0000},{0x44dc2000},{0x44dc4000},{0x44dc6000},{0x44dc8000},{0x44dca000},{0x44dcc000},{0x44dce000},{0x44dd0000},{0x44dd2000},{0x44dd4000},{0x44dd6000},{0x44dd8000},{0x44dda000},{0x44ddc000},{0x44dde000},{0x44de0000},{0x44de2000},{0x44de4000},{0x44de6000},{0x44de8000},{0x44dea000},{0x44dec000},{0x44dee000},{0x44df0000},{0x44df2000},{0x44df4000},{0x44df6000},{0x44df8000},{0x44dfa000},{0x44dfc000},{0x44dfe000}, +{0x44e00000},{0x44e02000},{0x44e04000},{0x44e06000},{0x44e08000},{0x44e0a000},{0x44e0c000},{0x44e0e000},{0x44e10000},{0x44e12000},{0x44e14000},{0x44e16000},{0x44e18000},{0x44e1a000},{0x44e1c000},{0x44e1e000},{0x44e20000},{0x44e22000},{0x44e24000},{0x44e26000},{0x44e28000},{0x44e2a000},{0x44e2c000},{0x44e2e000},{0x44e30000},{0x44e32000},{0x44e34000},{0x44e36000},{0x44e38000},{0x44e3a000},{0x44e3c000},{0x44e3e000}, +{0x44e40000},{0x44e42000},{0x44e44000},{0x44e46000},{0x44e48000},{0x44e4a000},{0x44e4c000},{0x44e4e000},{0x44e50000},{0x44e52000},{0x44e54000},{0x44e56000},{0x44e58000},{0x44e5a000},{0x44e5c000},{0x44e5e000},{0x44e60000},{0x44e62000},{0x44e64000},{0x44e66000},{0x44e68000},{0x44e6a000},{0x44e6c000},{0x44e6e000},{0x44e70000},{0x44e72000},{0x44e74000},{0x44e76000},{0x44e78000},{0x44e7a000},{0x44e7c000},{0x44e7e000}, +{0x44e80000},{0x44e82000},{0x44e84000},{0x44e86000},{0x44e88000},{0x44e8a000},{0x44e8c000},{0x44e8e000},{0x44e90000},{0x44e92000},{0x44e94000},{0x44e96000},{0x44e98000},{0x44e9a000},{0x44e9c000},{0x44e9e000},{0x44ea0000},{0x44ea2000},{0x44ea4000},{0x44ea6000},{0x44ea8000},{0x44eaa000},{0x44eac000},{0x44eae000},{0x44eb0000},{0x44eb2000},{0x44eb4000},{0x44eb6000},{0x44eb8000},{0x44eba000},{0x44ebc000},{0x44ebe000}, +{0x44ec0000},{0x44ec2000},{0x44ec4000},{0x44ec6000},{0x44ec8000},{0x44eca000},{0x44ecc000},{0x44ece000},{0x44ed0000},{0x44ed2000},{0x44ed4000},{0x44ed6000},{0x44ed8000},{0x44eda000},{0x44edc000},{0x44ede000},{0x44ee0000},{0x44ee2000},{0x44ee4000},{0x44ee6000},{0x44ee8000},{0x44eea000},{0x44eec000},{0x44eee000},{0x44ef0000},{0x44ef2000},{0x44ef4000},{0x44ef6000},{0x44ef8000},{0x44efa000},{0x44efc000},{0x44efe000}, +{0x44f00000},{0x44f02000},{0x44f04000},{0x44f06000},{0x44f08000},{0x44f0a000},{0x44f0c000},{0x44f0e000},{0x44f10000},{0x44f12000},{0x44f14000},{0x44f16000},{0x44f18000},{0x44f1a000},{0x44f1c000},{0x44f1e000},{0x44f20000},{0x44f22000},{0x44f24000},{0x44f26000},{0x44f28000},{0x44f2a000},{0x44f2c000},{0x44f2e000},{0x44f30000},{0x44f32000},{0x44f34000},{0x44f36000},{0x44f38000},{0x44f3a000},{0x44f3c000},{0x44f3e000}, +{0x44f40000},{0x44f42000},{0x44f44000},{0x44f46000},{0x44f48000},{0x44f4a000},{0x44f4c000},{0x44f4e000},{0x44f50000},{0x44f52000},{0x44f54000},{0x44f56000},{0x44f58000},{0x44f5a000},{0x44f5c000},{0x44f5e000},{0x44f60000},{0x44f62000},{0x44f64000},{0x44f66000},{0x44f68000},{0x44f6a000},{0x44f6c000},{0x44f6e000},{0x44f70000},{0x44f72000},{0x44f74000},{0x44f76000},{0x44f78000},{0x44f7a000},{0x44f7c000},{0x44f7e000}, +{0x44f80000},{0x44f82000},{0x44f84000},{0x44f86000},{0x44f88000},{0x44f8a000},{0x44f8c000},{0x44f8e000},{0x44f90000},{0x44f92000},{0x44f94000},{0x44f96000},{0x44f98000},{0x44f9a000},{0x44f9c000},{0x44f9e000},{0x44fa0000},{0x44fa2000},{0x44fa4000},{0x44fa6000},{0x44fa8000},{0x44faa000},{0x44fac000},{0x44fae000},{0x44fb0000},{0x44fb2000},{0x44fb4000},{0x44fb6000},{0x44fb8000},{0x44fba000},{0x44fbc000},{0x44fbe000}, +{0x44fc0000},{0x44fc2000},{0x44fc4000},{0x44fc6000},{0x44fc8000},{0x44fca000},{0x44fcc000},{0x44fce000},{0x44fd0000},{0x44fd2000},{0x44fd4000},{0x44fd6000},{0x44fd8000},{0x44fda000},{0x44fdc000},{0x44fde000},{0x44fe0000},{0x44fe2000},{0x44fe4000},{0x44fe6000},{0x44fe8000},{0x44fea000},{0x44fec000},{0x44fee000},{0x44ff0000},{0x44ff2000},{0x44ff4000},{0x44ff6000},{0x44ff8000},{0x44ffa000},{0x44ffc000},{0x44ffe000}, +{0x45000000},{0x45002000},{0x45004000},{0x45006000},{0x45008000},{0x4500a000},{0x4500c000},{0x4500e000},{0x45010000},{0x45012000},{0x45014000},{0x45016000},{0x45018000},{0x4501a000},{0x4501c000},{0x4501e000},{0x45020000},{0x45022000},{0x45024000},{0x45026000},{0x45028000},{0x4502a000},{0x4502c000},{0x4502e000},{0x45030000},{0x45032000},{0x45034000},{0x45036000},{0x45038000},{0x4503a000},{0x4503c000},{0x4503e000}, +{0x45040000},{0x45042000},{0x45044000},{0x45046000},{0x45048000},{0x4504a000},{0x4504c000},{0x4504e000},{0x45050000},{0x45052000},{0x45054000},{0x45056000},{0x45058000},{0x4505a000},{0x4505c000},{0x4505e000},{0x45060000},{0x45062000},{0x45064000},{0x45066000},{0x45068000},{0x4506a000},{0x4506c000},{0x4506e000},{0x45070000},{0x45072000},{0x45074000},{0x45076000},{0x45078000},{0x4507a000},{0x4507c000},{0x4507e000}, +{0x45080000},{0x45082000},{0x45084000},{0x45086000},{0x45088000},{0x4508a000},{0x4508c000},{0x4508e000},{0x45090000},{0x45092000},{0x45094000},{0x45096000},{0x45098000},{0x4509a000},{0x4509c000},{0x4509e000},{0x450a0000},{0x450a2000},{0x450a4000},{0x450a6000},{0x450a8000},{0x450aa000},{0x450ac000},{0x450ae000},{0x450b0000},{0x450b2000},{0x450b4000},{0x450b6000},{0x450b8000},{0x450ba000},{0x450bc000},{0x450be000}, +{0x450c0000},{0x450c2000},{0x450c4000},{0x450c6000},{0x450c8000},{0x450ca000},{0x450cc000},{0x450ce000},{0x450d0000},{0x450d2000},{0x450d4000},{0x450d6000},{0x450d8000},{0x450da000},{0x450dc000},{0x450de000},{0x450e0000},{0x450e2000},{0x450e4000},{0x450e6000},{0x450e8000},{0x450ea000},{0x450ec000},{0x450ee000},{0x450f0000},{0x450f2000},{0x450f4000},{0x450f6000},{0x450f8000},{0x450fa000},{0x450fc000},{0x450fe000}, +{0x45100000},{0x45102000},{0x45104000},{0x45106000},{0x45108000},{0x4510a000},{0x4510c000},{0x4510e000},{0x45110000},{0x45112000},{0x45114000},{0x45116000},{0x45118000},{0x4511a000},{0x4511c000},{0x4511e000},{0x45120000},{0x45122000},{0x45124000},{0x45126000},{0x45128000},{0x4512a000},{0x4512c000},{0x4512e000},{0x45130000},{0x45132000},{0x45134000},{0x45136000},{0x45138000},{0x4513a000},{0x4513c000},{0x4513e000}, +{0x45140000},{0x45142000},{0x45144000},{0x45146000},{0x45148000},{0x4514a000},{0x4514c000},{0x4514e000},{0x45150000},{0x45152000},{0x45154000},{0x45156000},{0x45158000},{0x4515a000},{0x4515c000},{0x4515e000},{0x45160000},{0x45162000},{0x45164000},{0x45166000},{0x45168000},{0x4516a000},{0x4516c000},{0x4516e000},{0x45170000},{0x45172000},{0x45174000},{0x45176000},{0x45178000},{0x4517a000},{0x4517c000},{0x4517e000}, +{0x45180000},{0x45182000},{0x45184000},{0x45186000},{0x45188000},{0x4518a000},{0x4518c000},{0x4518e000},{0x45190000},{0x45192000},{0x45194000},{0x45196000},{0x45198000},{0x4519a000},{0x4519c000},{0x4519e000},{0x451a0000},{0x451a2000},{0x451a4000},{0x451a6000},{0x451a8000},{0x451aa000},{0x451ac000},{0x451ae000},{0x451b0000},{0x451b2000},{0x451b4000},{0x451b6000},{0x451b8000},{0x451ba000},{0x451bc000},{0x451be000}, +{0x451c0000},{0x451c2000},{0x451c4000},{0x451c6000},{0x451c8000},{0x451ca000},{0x451cc000},{0x451ce000},{0x451d0000},{0x451d2000},{0x451d4000},{0x451d6000},{0x451d8000},{0x451da000},{0x451dc000},{0x451de000},{0x451e0000},{0x451e2000},{0x451e4000},{0x451e6000},{0x451e8000},{0x451ea000},{0x451ec000},{0x451ee000},{0x451f0000},{0x451f2000},{0x451f4000},{0x451f6000},{0x451f8000},{0x451fa000},{0x451fc000},{0x451fe000}, +{0x45200000},{0x45202000},{0x45204000},{0x45206000},{0x45208000},{0x4520a000},{0x4520c000},{0x4520e000},{0x45210000},{0x45212000},{0x45214000},{0x45216000},{0x45218000},{0x4521a000},{0x4521c000},{0x4521e000},{0x45220000},{0x45222000},{0x45224000},{0x45226000},{0x45228000},{0x4522a000},{0x4522c000},{0x4522e000},{0x45230000},{0x45232000},{0x45234000},{0x45236000},{0x45238000},{0x4523a000},{0x4523c000},{0x4523e000}, +{0x45240000},{0x45242000},{0x45244000},{0x45246000},{0x45248000},{0x4524a000},{0x4524c000},{0x4524e000},{0x45250000},{0x45252000},{0x45254000},{0x45256000},{0x45258000},{0x4525a000},{0x4525c000},{0x4525e000},{0x45260000},{0x45262000},{0x45264000},{0x45266000},{0x45268000},{0x4526a000},{0x4526c000},{0x4526e000},{0x45270000},{0x45272000},{0x45274000},{0x45276000},{0x45278000},{0x4527a000},{0x4527c000},{0x4527e000}, +{0x45280000},{0x45282000},{0x45284000},{0x45286000},{0x45288000},{0x4528a000},{0x4528c000},{0x4528e000},{0x45290000},{0x45292000},{0x45294000},{0x45296000},{0x45298000},{0x4529a000},{0x4529c000},{0x4529e000},{0x452a0000},{0x452a2000},{0x452a4000},{0x452a6000},{0x452a8000},{0x452aa000},{0x452ac000},{0x452ae000},{0x452b0000},{0x452b2000},{0x452b4000},{0x452b6000},{0x452b8000},{0x452ba000},{0x452bc000},{0x452be000}, +{0x452c0000},{0x452c2000},{0x452c4000},{0x452c6000},{0x452c8000},{0x452ca000},{0x452cc000},{0x452ce000},{0x452d0000},{0x452d2000},{0x452d4000},{0x452d6000},{0x452d8000},{0x452da000},{0x452dc000},{0x452de000},{0x452e0000},{0x452e2000},{0x452e4000},{0x452e6000},{0x452e8000},{0x452ea000},{0x452ec000},{0x452ee000},{0x452f0000},{0x452f2000},{0x452f4000},{0x452f6000},{0x452f8000},{0x452fa000},{0x452fc000},{0x452fe000}, +{0x45300000},{0x45302000},{0x45304000},{0x45306000},{0x45308000},{0x4530a000},{0x4530c000},{0x4530e000},{0x45310000},{0x45312000},{0x45314000},{0x45316000},{0x45318000},{0x4531a000},{0x4531c000},{0x4531e000},{0x45320000},{0x45322000},{0x45324000},{0x45326000},{0x45328000},{0x4532a000},{0x4532c000},{0x4532e000},{0x45330000},{0x45332000},{0x45334000},{0x45336000},{0x45338000},{0x4533a000},{0x4533c000},{0x4533e000}, +{0x45340000},{0x45342000},{0x45344000},{0x45346000},{0x45348000},{0x4534a000},{0x4534c000},{0x4534e000},{0x45350000},{0x45352000},{0x45354000},{0x45356000},{0x45358000},{0x4535a000},{0x4535c000},{0x4535e000},{0x45360000},{0x45362000},{0x45364000},{0x45366000},{0x45368000},{0x4536a000},{0x4536c000},{0x4536e000},{0x45370000},{0x45372000},{0x45374000},{0x45376000},{0x45378000},{0x4537a000},{0x4537c000},{0x4537e000}, +{0x45380000},{0x45382000},{0x45384000},{0x45386000},{0x45388000},{0x4538a000},{0x4538c000},{0x4538e000},{0x45390000},{0x45392000},{0x45394000},{0x45396000},{0x45398000},{0x4539a000},{0x4539c000},{0x4539e000},{0x453a0000},{0x453a2000},{0x453a4000},{0x453a6000},{0x453a8000},{0x453aa000},{0x453ac000},{0x453ae000},{0x453b0000},{0x453b2000},{0x453b4000},{0x453b6000},{0x453b8000},{0x453ba000},{0x453bc000},{0x453be000}, +{0x453c0000},{0x453c2000},{0x453c4000},{0x453c6000},{0x453c8000},{0x453ca000},{0x453cc000},{0x453ce000},{0x453d0000},{0x453d2000},{0x453d4000},{0x453d6000},{0x453d8000},{0x453da000},{0x453dc000},{0x453de000},{0x453e0000},{0x453e2000},{0x453e4000},{0x453e6000},{0x453e8000},{0x453ea000},{0x453ec000},{0x453ee000},{0x453f0000},{0x453f2000},{0x453f4000},{0x453f6000},{0x453f8000},{0x453fa000},{0x453fc000},{0x453fe000}, +{0x45400000},{0x45402000},{0x45404000},{0x45406000},{0x45408000},{0x4540a000},{0x4540c000},{0x4540e000},{0x45410000},{0x45412000},{0x45414000},{0x45416000},{0x45418000},{0x4541a000},{0x4541c000},{0x4541e000},{0x45420000},{0x45422000},{0x45424000},{0x45426000},{0x45428000},{0x4542a000},{0x4542c000},{0x4542e000},{0x45430000},{0x45432000},{0x45434000},{0x45436000},{0x45438000},{0x4543a000},{0x4543c000},{0x4543e000}, +{0x45440000},{0x45442000},{0x45444000},{0x45446000},{0x45448000},{0x4544a000},{0x4544c000},{0x4544e000},{0x45450000},{0x45452000},{0x45454000},{0x45456000},{0x45458000},{0x4545a000},{0x4545c000},{0x4545e000},{0x45460000},{0x45462000},{0x45464000},{0x45466000},{0x45468000},{0x4546a000},{0x4546c000},{0x4546e000},{0x45470000},{0x45472000},{0x45474000},{0x45476000},{0x45478000},{0x4547a000},{0x4547c000},{0x4547e000}, +{0x45480000},{0x45482000},{0x45484000},{0x45486000},{0x45488000},{0x4548a000},{0x4548c000},{0x4548e000},{0x45490000},{0x45492000},{0x45494000},{0x45496000},{0x45498000},{0x4549a000},{0x4549c000},{0x4549e000},{0x454a0000},{0x454a2000},{0x454a4000},{0x454a6000},{0x454a8000},{0x454aa000},{0x454ac000},{0x454ae000},{0x454b0000},{0x454b2000},{0x454b4000},{0x454b6000},{0x454b8000},{0x454ba000},{0x454bc000},{0x454be000}, +{0x454c0000},{0x454c2000},{0x454c4000},{0x454c6000},{0x454c8000},{0x454ca000},{0x454cc000},{0x454ce000},{0x454d0000},{0x454d2000},{0x454d4000},{0x454d6000},{0x454d8000},{0x454da000},{0x454dc000},{0x454de000},{0x454e0000},{0x454e2000},{0x454e4000},{0x454e6000},{0x454e8000},{0x454ea000},{0x454ec000},{0x454ee000},{0x454f0000},{0x454f2000},{0x454f4000},{0x454f6000},{0x454f8000},{0x454fa000},{0x454fc000},{0x454fe000}, +{0x45500000},{0x45502000},{0x45504000},{0x45506000},{0x45508000},{0x4550a000},{0x4550c000},{0x4550e000},{0x45510000},{0x45512000},{0x45514000},{0x45516000},{0x45518000},{0x4551a000},{0x4551c000},{0x4551e000},{0x45520000},{0x45522000},{0x45524000},{0x45526000},{0x45528000},{0x4552a000},{0x4552c000},{0x4552e000},{0x45530000},{0x45532000},{0x45534000},{0x45536000},{0x45538000},{0x4553a000},{0x4553c000},{0x4553e000}, +{0x45540000},{0x45542000},{0x45544000},{0x45546000},{0x45548000},{0x4554a000},{0x4554c000},{0x4554e000},{0x45550000},{0x45552000},{0x45554000},{0x45556000},{0x45558000},{0x4555a000},{0x4555c000},{0x4555e000},{0x45560000},{0x45562000},{0x45564000},{0x45566000},{0x45568000},{0x4556a000},{0x4556c000},{0x4556e000},{0x45570000},{0x45572000},{0x45574000},{0x45576000},{0x45578000},{0x4557a000},{0x4557c000},{0x4557e000}, +{0x45580000},{0x45582000},{0x45584000},{0x45586000},{0x45588000},{0x4558a000},{0x4558c000},{0x4558e000},{0x45590000},{0x45592000},{0x45594000},{0x45596000},{0x45598000},{0x4559a000},{0x4559c000},{0x4559e000},{0x455a0000},{0x455a2000},{0x455a4000},{0x455a6000},{0x455a8000},{0x455aa000},{0x455ac000},{0x455ae000},{0x455b0000},{0x455b2000},{0x455b4000},{0x455b6000},{0x455b8000},{0x455ba000},{0x455bc000},{0x455be000}, +{0x455c0000},{0x455c2000},{0x455c4000},{0x455c6000},{0x455c8000},{0x455ca000},{0x455cc000},{0x455ce000},{0x455d0000},{0x455d2000},{0x455d4000},{0x455d6000},{0x455d8000},{0x455da000},{0x455dc000},{0x455de000},{0x455e0000},{0x455e2000},{0x455e4000},{0x455e6000},{0x455e8000},{0x455ea000},{0x455ec000},{0x455ee000},{0x455f0000},{0x455f2000},{0x455f4000},{0x455f6000},{0x455f8000},{0x455fa000},{0x455fc000},{0x455fe000}, +{0x45600000},{0x45602000},{0x45604000},{0x45606000},{0x45608000},{0x4560a000},{0x4560c000},{0x4560e000},{0x45610000},{0x45612000},{0x45614000},{0x45616000},{0x45618000},{0x4561a000},{0x4561c000},{0x4561e000},{0x45620000},{0x45622000},{0x45624000},{0x45626000},{0x45628000},{0x4562a000},{0x4562c000},{0x4562e000},{0x45630000},{0x45632000},{0x45634000},{0x45636000},{0x45638000},{0x4563a000},{0x4563c000},{0x4563e000}, +{0x45640000},{0x45642000},{0x45644000},{0x45646000},{0x45648000},{0x4564a000},{0x4564c000},{0x4564e000},{0x45650000},{0x45652000},{0x45654000},{0x45656000},{0x45658000},{0x4565a000},{0x4565c000},{0x4565e000},{0x45660000},{0x45662000},{0x45664000},{0x45666000},{0x45668000},{0x4566a000},{0x4566c000},{0x4566e000},{0x45670000},{0x45672000},{0x45674000},{0x45676000},{0x45678000},{0x4567a000},{0x4567c000},{0x4567e000}, +{0x45680000},{0x45682000},{0x45684000},{0x45686000},{0x45688000},{0x4568a000},{0x4568c000},{0x4568e000},{0x45690000},{0x45692000},{0x45694000},{0x45696000},{0x45698000},{0x4569a000},{0x4569c000},{0x4569e000},{0x456a0000},{0x456a2000},{0x456a4000},{0x456a6000},{0x456a8000},{0x456aa000},{0x456ac000},{0x456ae000},{0x456b0000},{0x456b2000},{0x456b4000},{0x456b6000},{0x456b8000},{0x456ba000},{0x456bc000},{0x456be000}, +{0x456c0000},{0x456c2000},{0x456c4000},{0x456c6000},{0x456c8000},{0x456ca000},{0x456cc000},{0x456ce000},{0x456d0000},{0x456d2000},{0x456d4000},{0x456d6000},{0x456d8000},{0x456da000},{0x456dc000},{0x456de000},{0x456e0000},{0x456e2000},{0x456e4000},{0x456e6000},{0x456e8000},{0x456ea000},{0x456ec000},{0x456ee000},{0x456f0000},{0x456f2000},{0x456f4000},{0x456f6000},{0x456f8000},{0x456fa000},{0x456fc000},{0x456fe000}, +{0x45700000},{0x45702000},{0x45704000},{0x45706000},{0x45708000},{0x4570a000},{0x4570c000},{0x4570e000},{0x45710000},{0x45712000},{0x45714000},{0x45716000},{0x45718000},{0x4571a000},{0x4571c000},{0x4571e000},{0x45720000},{0x45722000},{0x45724000},{0x45726000},{0x45728000},{0x4572a000},{0x4572c000},{0x4572e000},{0x45730000},{0x45732000},{0x45734000},{0x45736000},{0x45738000},{0x4573a000},{0x4573c000},{0x4573e000}, +{0x45740000},{0x45742000},{0x45744000},{0x45746000},{0x45748000},{0x4574a000},{0x4574c000},{0x4574e000},{0x45750000},{0x45752000},{0x45754000},{0x45756000},{0x45758000},{0x4575a000},{0x4575c000},{0x4575e000},{0x45760000},{0x45762000},{0x45764000},{0x45766000},{0x45768000},{0x4576a000},{0x4576c000},{0x4576e000},{0x45770000},{0x45772000},{0x45774000},{0x45776000},{0x45778000},{0x4577a000},{0x4577c000},{0x4577e000}, +{0x45780000},{0x45782000},{0x45784000},{0x45786000},{0x45788000},{0x4578a000},{0x4578c000},{0x4578e000},{0x45790000},{0x45792000},{0x45794000},{0x45796000},{0x45798000},{0x4579a000},{0x4579c000},{0x4579e000},{0x457a0000},{0x457a2000},{0x457a4000},{0x457a6000},{0x457a8000},{0x457aa000},{0x457ac000},{0x457ae000},{0x457b0000},{0x457b2000},{0x457b4000},{0x457b6000},{0x457b8000},{0x457ba000},{0x457bc000},{0x457be000}, +{0x457c0000},{0x457c2000},{0x457c4000},{0x457c6000},{0x457c8000},{0x457ca000},{0x457cc000},{0x457ce000},{0x457d0000},{0x457d2000},{0x457d4000},{0x457d6000},{0x457d8000},{0x457da000},{0x457dc000},{0x457de000},{0x457e0000},{0x457e2000},{0x457e4000},{0x457e6000},{0x457e8000},{0x457ea000},{0x457ec000},{0x457ee000},{0x457f0000},{0x457f2000},{0x457f4000},{0x457f6000},{0x457f8000},{0x457fa000},{0x457fc000},{0x457fe000}, +{0x45800000},{0x45802000},{0x45804000},{0x45806000},{0x45808000},{0x4580a000},{0x4580c000},{0x4580e000},{0x45810000},{0x45812000},{0x45814000},{0x45816000},{0x45818000},{0x4581a000},{0x4581c000},{0x4581e000},{0x45820000},{0x45822000},{0x45824000},{0x45826000},{0x45828000},{0x4582a000},{0x4582c000},{0x4582e000},{0x45830000},{0x45832000},{0x45834000},{0x45836000},{0x45838000},{0x4583a000},{0x4583c000},{0x4583e000}, +{0x45840000},{0x45842000},{0x45844000},{0x45846000},{0x45848000},{0x4584a000},{0x4584c000},{0x4584e000},{0x45850000},{0x45852000},{0x45854000},{0x45856000},{0x45858000},{0x4585a000},{0x4585c000},{0x4585e000},{0x45860000},{0x45862000},{0x45864000},{0x45866000},{0x45868000},{0x4586a000},{0x4586c000},{0x4586e000},{0x45870000},{0x45872000},{0x45874000},{0x45876000},{0x45878000},{0x4587a000},{0x4587c000},{0x4587e000}, +{0x45880000},{0x45882000},{0x45884000},{0x45886000},{0x45888000},{0x4588a000},{0x4588c000},{0x4588e000},{0x45890000},{0x45892000},{0x45894000},{0x45896000},{0x45898000},{0x4589a000},{0x4589c000},{0x4589e000},{0x458a0000},{0x458a2000},{0x458a4000},{0x458a6000},{0x458a8000},{0x458aa000},{0x458ac000},{0x458ae000},{0x458b0000},{0x458b2000},{0x458b4000},{0x458b6000},{0x458b8000},{0x458ba000},{0x458bc000},{0x458be000}, +{0x458c0000},{0x458c2000},{0x458c4000},{0x458c6000},{0x458c8000},{0x458ca000},{0x458cc000},{0x458ce000},{0x458d0000},{0x458d2000},{0x458d4000},{0x458d6000},{0x458d8000},{0x458da000},{0x458dc000},{0x458de000},{0x458e0000},{0x458e2000},{0x458e4000},{0x458e6000},{0x458e8000},{0x458ea000},{0x458ec000},{0x458ee000},{0x458f0000},{0x458f2000},{0x458f4000},{0x458f6000},{0x458f8000},{0x458fa000},{0x458fc000},{0x458fe000}, +{0x45900000},{0x45902000},{0x45904000},{0x45906000},{0x45908000},{0x4590a000},{0x4590c000},{0x4590e000},{0x45910000},{0x45912000},{0x45914000},{0x45916000},{0x45918000},{0x4591a000},{0x4591c000},{0x4591e000},{0x45920000},{0x45922000},{0x45924000},{0x45926000},{0x45928000},{0x4592a000},{0x4592c000},{0x4592e000},{0x45930000},{0x45932000},{0x45934000},{0x45936000},{0x45938000},{0x4593a000},{0x4593c000},{0x4593e000}, +{0x45940000},{0x45942000},{0x45944000},{0x45946000},{0x45948000},{0x4594a000},{0x4594c000},{0x4594e000},{0x45950000},{0x45952000},{0x45954000},{0x45956000},{0x45958000},{0x4595a000},{0x4595c000},{0x4595e000},{0x45960000},{0x45962000},{0x45964000},{0x45966000},{0x45968000},{0x4596a000},{0x4596c000},{0x4596e000},{0x45970000},{0x45972000},{0x45974000},{0x45976000},{0x45978000},{0x4597a000},{0x4597c000},{0x4597e000}, +{0x45980000},{0x45982000},{0x45984000},{0x45986000},{0x45988000},{0x4598a000},{0x4598c000},{0x4598e000},{0x45990000},{0x45992000},{0x45994000},{0x45996000},{0x45998000},{0x4599a000},{0x4599c000},{0x4599e000},{0x459a0000},{0x459a2000},{0x459a4000},{0x459a6000},{0x459a8000},{0x459aa000},{0x459ac000},{0x459ae000},{0x459b0000},{0x459b2000},{0x459b4000},{0x459b6000},{0x459b8000},{0x459ba000},{0x459bc000},{0x459be000}, +{0x459c0000},{0x459c2000},{0x459c4000},{0x459c6000},{0x459c8000},{0x459ca000},{0x459cc000},{0x459ce000},{0x459d0000},{0x459d2000},{0x459d4000},{0x459d6000},{0x459d8000},{0x459da000},{0x459dc000},{0x459de000},{0x459e0000},{0x459e2000},{0x459e4000},{0x459e6000},{0x459e8000},{0x459ea000},{0x459ec000},{0x459ee000},{0x459f0000},{0x459f2000},{0x459f4000},{0x459f6000},{0x459f8000},{0x459fa000},{0x459fc000},{0x459fe000}, +{0x45a00000},{0x45a02000},{0x45a04000},{0x45a06000},{0x45a08000},{0x45a0a000},{0x45a0c000},{0x45a0e000},{0x45a10000},{0x45a12000},{0x45a14000},{0x45a16000},{0x45a18000},{0x45a1a000},{0x45a1c000},{0x45a1e000},{0x45a20000},{0x45a22000},{0x45a24000},{0x45a26000},{0x45a28000},{0x45a2a000},{0x45a2c000},{0x45a2e000},{0x45a30000},{0x45a32000},{0x45a34000},{0x45a36000},{0x45a38000},{0x45a3a000},{0x45a3c000},{0x45a3e000}, +{0x45a40000},{0x45a42000},{0x45a44000},{0x45a46000},{0x45a48000},{0x45a4a000},{0x45a4c000},{0x45a4e000},{0x45a50000},{0x45a52000},{0x45a54000},{0x45a56000},{0x45a58000},{0x45a5a000},{0x45a5c000},{0x45a5e000},{0x45a60000},{0x45a62000},{0x45a64000},{0x45a66000},{0x45a68000},{0x45a6a000},{0x45a6c000},{0x45a6e000},{0x45a70000},{0x45a72000},{0x45a74000},{0x45a76000},{0x45a78000},{0x45a7a000},{0x45a7c000},{0x45a7e000}, +{0x45a80000},{0x45a82000},{0x45a84000},{0x45a86000},{0x45a88000},{0x45a8a000},{0x45a8c000},{0x45a8e000},{0x45a90000},{0x45a92000},{0x45a94000},{0x45a96000},{0x45a98000},{0x45a9a000},{0x45a9c000},{0x45a9e000},{0x45aa0000},{0x45aa2000},{0x45aa4000},{0x45aa6000},{0x45aa8000},{0x45aaa000},{0x45aac000},{0x45aae000},{0x45ab0000},{0x45ab2000},{0x45ab4000},{0x45ab6000},{0x45ab8000},{0x45aba000},{0x45abc000},{0x45abe000}, +{0x45ac0000},{0x45ac2000},{0x45ac4000},{0x45ac6000},{0x45ac8000},{0x45aca000},{0x45acc000},{0x45ace000},{0x45ad0000},{0x45ad2000},{0x45ad4000},{0x45ad6000},{0x45ad8000},{0x45ada000},{0x45adc000},{0x45ade000},{0x45ae0000},{0x45ae2000},{0x45ae4000},{0x45ae6000},{0x45ae8000},{0x45aea000},{0x45aec000},{0x45aee000},{0x45af0000},{0x45af2000},{0x45af4000},{0x45af6000},{0x45af8000},{0x45afa000},{0x45afc000},{0x45afe000}, +{0x45b00000},{0x45b02000},{0x45b04000},{0x45b06000},{0x45b08000},{0x45b0a000},{0x45b0c000},{0x45b0e000},{0x45b10000},{0x45b12000},{0x45b14000},{0x45b16000},{0x45b18000},{0x45b1a000},{0x45b1c000},{0x45b1e000},{0x45b20000},{0x45b22000},{0x45b24000},{0x45b26000},{0x45b28000},{0x45b2a000},{0x45b2c000},{0x45b2e000},{0x45b30000},{0x45b32000},{0x45b34000},{0x45b36000},{0x45b38000},{0x45b3a000},{0x45b3c000},{0x45b3e000}, +{0x45b40000},{0x45b42000},{0x45b44000},{0x45b46000},{0x45b48000},{0x45b4a000},{0x45b4c000},{0x45b4e000},{0x45b50000},{0x45b52000},{0x45b54000},{0x45b56000},{0x45b58000},{0x45b5a000},{0x45b5c000},{0x45b5e000},{0x45b60000},{0x45b62000},{0x45b64000},{0x45b66000},{0x45b68000},{0x45b6a000},{0x45b6c000},{0x45b6e000},{0x45b70000},{0x45b72000},{0x45b74000},{0x45b76000},{0x45b78000},{0x45b7a000},{0x45b7c000},{0x45b7e000}, +{0x45b80000},{0x45b82000},{0x45b84000},{0x45b86000},{0x45b88000},{0x45b8a000},{0x45b8c000},{0x45b8e000},{0x45b90000},{0x45b92000},{0x45b94000},{0x45b96000},{0x45b98000},{0x45b9a000},{0x45b9c000},{0x45b9e000},{0x45ba0000},{0x45ba2000},{0x45ba4000},{0x45ba6000},{0x45ba8000},{0x45baa000},{0x45bac000},{0x45bae000},{0x45bb0000},{0x45bb2000},{0x45bb4000},{0x45bb6000},{0x45bb8000},{0x45bba000},{0x45bbc000},{0x45bbe000}, +{0x45bc0000},{0x45bc2000},{0x45bc4000},{0x45bc6000},{0x45bc8000},{0x45bca000},{0x45bcc000},{0x45bce000},{0x45bd0000},{0x45bd2000},{0x45bd4000},{0x45bd6000},{0x45bd8000},{0x45bda000},{0x45bdc000},{0x45bde000},{0x45be0000},{0x45be2000},{0x45be4000},{0x45be6000},{0x45be8000},{0x45bea000},{0x45bec000},{0x45bee000},{0x45bf0000},{0x45bf2000},{0x45bf4000},{0x45bf6000},{0x45bf8000},{0x45bfa000},{0x45bfc000},{0x45bfe000}, +{0x45c00000},{0x45c02000},{0x45c04000},{0x45c06000},{0x45c08000},{0x45c0a000},{0x45c0c000},{0x45c0e000},{0x45c10000},{0x45c12000},{0x45c14000},{0x45c16000},{0x45c18000},{0x45c1a000},{0x45c1c000},{0x45c1e000},{0x45c20000},{0x45c22000},{0x45c24000},{0x45c26000},{0x45c28000},{0x45c2a000},{0x45c2c000},{0x45c2e000},{0x45c30000},{0x45c32000},{0x45c34000},{0x45c36000},{0x45c38000},{0x45c3a000},{0x45c3c000},{0x45c3e000}, +{0x45c40000},{0x45c42000},{0x45c44000},{0x45c46000},{0x45c48000},{0x45c4a000},{0x45c4c000},{0x45c4e000},{0x45c50000},{0x45c52000},{0x45c54000},{0x45c56000},{0x45c58000},{0x45c5a000},{0x45c5c000},{0x45c5e000},{0x45c60000},{0x45c62000},{0x45c64000},{0x45c66000},{0x45c68000},{0x45c6a000},{0x45c6c000},{0x45c6e000},{0x45c70000},{0x45c72000},{0x45c74000},{0x45c76000},{0x45c78000},{0x45c7a000},{0x45c7c000},{0x45c7e000}, +{0x45c80000},{0x45c82000},{0x45c84000},{0x45c86000},{0x45c88000},{0x45c8a000},{0x45c8c000},{0x45c8e000},{0x45c90000},{0x45c92000},{0x45c94000},{0x45c96000},{0x45c98000},{0x45c9a000},{0x45c9c000},{0x45c9e000},{0x45ca0000},{0x45ca2000},{0x45ca4000},{0x45ca6000},{0x45ca8000},{0x45caa000},{0x45cac000},{0x45cae000},{0x45cb0000},{0x45cb2000},{0x45cb4000},{0x45cb6000},{0x45cb8000},{0x45cba000},{0x45cbc000},{0x45cbe000}, +{0x45cc0000},{0x45cc2000},{0x45cc4000},{0x45cc6000},{0x45cc8000},{0x45cca000},{0x45ccc000},{0x45cce000},{0x45cd0000},{0x45cd2000},{0x45cd4000},{0x45cd6000},{0x45cd8000},{0x45cda000},{0x45cdc000},{0x45cde000},{0x45ce0000},{0x45ce2000},{0x45ce4000},{0x45ce6000},{0x45ce8000},{0x45cea000},{0x45cec000},{0x45cee000},{0x45cf0000},{0x45cf2000},{0x45cf4000},{0x45cf6000},{0x45cf8000},{0x45cfa000},{0x45cfc000},{0x45cfe000}, +{0x45d00000},{0x45d02000},{0x45d04000},{0x45d06000},{0x45d08000},{0x45d0a000},{0x45d0c000},{0x45d0e000},{0x45d10000},{0x45d12000},{0x45d14000},{0x45d16000},{0x45d18000},{0x45d1a000},{0x45d1c000},{0x45d1e000},{0x45d20000},{0x45d22000},{0x45d24000},{0x45d26000},{0x45d28000},{0x45d2a000},{0x45d2c000},{0x45d2e000},{0x45d30000},{0x45d32000},{0x45d34000},{0x45d36000},{0x45d38000},{0x45d3a000},{0x45d3c000},{0x45d3e000}, +{0x45d40000},{0x45d42000},{0x45d44000},{0x45d46000},{0x45d48000},{0x45d4a000},{0x45d4c000},{0x45d4e000},{0x45d50000},{0x45d52000},{0x45d54000},{0x45d56000},{0x45d58000},{0x45d5a000},{0x45d5c000},{0x45d5e000},{0x45d60000},{0x45d62000},{0x45d64000},{0x45d66000},{0x45d68000},{0x45d6a000},{0x45d6c000},{0x45d6e000},{0x45d70000},{0x45d72000},{0x45d74000},{0x45d76000},{0x45d78000},{0x45d7a000},{0x45d7c000},{0x45d7e000}, +{0x45d80000},{0x45d82000},{0x45d84000},{0x45d86000},{0x45d88000},{0x45d8a000},{0x45d8c000},{0x45d8e000},{0x45d90000},{0x45d92000},{0x45d94000},{0x45d96000},{0x45d98000},{0x45d9a000},{0x45d9c000},{0x45d9e000},{0x45da0000},{0x45da2000},{0x45da4000},{0x45da6000},{0x45da8000},{0x45daa000},{0x45dac000},{0x45dae000},{0x45db0000},{0x45db2000},{0x45db4000},{0x45db6000},{0x45db8000},{0x45dba000},{0x45dbc000},{0x45dbe000}, +{0x45dc0000},{0x45dc2000},{0x45dc4000},{0x45dc6000},{0x45dc8000},{0x45dca000},{0x45dcc000},{0x45dce000},{0x45dd0000},{0x45dd2000},{0x45dd4000},{0x45dd6000},{0x45dd8000},{0x45dda000},{0x45ddc000},{0x45dde000},{0x45de0000},{0x45de2000},{0x45de4000},{0x45de6000},{0x45de8000},{0x45dea000},{0x45dec000},{0x45dee000},{0x45df0000},{0x45df2000},{0x45df4000},{0x45df6000},{0x45df8000},{0x45dfa000},{0x45dfc000},{0x45dfe000}, +{0x45e00000},{0x45e02000},{0x45e04000},{0x45e06000},{0x45e08000},{0x45e0a000},{0x45e0c000},{0x45e0e000},{0x45e10000},{0x45e12000},{0x45e14000},{0x45e16000},{0x45e18000},{0x45e1a000},{0x45e1c000},{0x45e1e000},{0x45e20000},{0x45e22000},{0x45e24000},{0x45e26000},{0x45e28000},{0x45e2a000},{0x45e2c000},{0x45e2e000},{0x45e30000},{0x45e32000},{0x45e34000},{0x45e36000},{0x45e38000},{0x45e3a000},{0x45e3c000},{0x45e3e000}, +{0x45e40000},{0x45e42000},{0x45e44000},{0x45e46000},{0x45e48000},{0x45e4a000},{0x45e4c000},{0x45e4e000},{0x45e50000},{0x45e52000},{0x45e54000},{0x45e56000},{0x45e58000},{0x45e5a000},{0x45e5c000},{0x45e5e000},{0x45e60000},{0x45e62000},{0x45e64000},{0x45e66000},{0x45e68000},{0x45e6a000},{0x45e6c000},{0x45e6e000},{0x45e70000},{0x45e72000},{0x45e74000},{0x45e76000},{0x45e78000},{0x45e7a000},{0x45e7c000},{0x45e7e000}, +{0x45e80000},{0x45e82000},{0x45e84000},{0x45e86000},{0x45e88000},{0x45e8a000},{0x45e8c000},{0x45e8e000},{0x45e90000},{0x45e92000},{0x45e94000},{0x45e96000},{0x45e98000},{0x45e9a000},{0x45e9c000},{0x45e9e000},{0x45ea0000},{0x45ea2000},{0x45ea4000},{0x45ea6000},{0x45ea8000},{0x45eaa000},{0x45eac000},{0x45eae000},{0x45eb0000},{0x45eb2000},{0x45eb4000},{0x45eb6000},{0x45eb8000},{0x45eba000},{0x45ebc000},{0x45ebe000}, +{0x45ec0000},{0x45ec2000},{0x45ec4000},{0x45ec6000},{0x45ec8000},{0x45eca000},{0x45ecc000},{0x45ece000},{0x45ed0000},{0x45ed2000},{0x45ed4000},{0x45ed6000},{0x45ed8000},{0x45eda000},{0x45edc000},{0x45ede000},{0x45ee0000},{0x45ee2000},{0x45ee4000},{0x45ee6000},{0x45ee8000},{0x45eea000},{0x45eec000},{0x45eee000},{0x45ef0000},{0x45ef2000},{0x45ef4000},{0x45ef6000},{0x45ef8000},{0x45efa000},{0x45efc000},{0x45efe000}, +{0x45f00000},{0x45f02000},{0x45f04000},{0x45f06000},{0x45f08000},{0x45f0a000},{0x45f0c000},{0x45f0e000},{0x45f10000},{0x45f12000},{0x45f14000},{0x45f16000},{0x45f18000},{0x45f1a000},{0x45f1c000},{0x45f1e000},{0x45f20000},{0x45f22000},{0x45f24000},{0x45f26000},{0x45f28000},{0x45f2a000},{0x45f2c000},{0x45f2e000},{0x45f30000},{0x45f32000},{0x45f34000},{0x45f36000},{0x45f38000},{0x45f3a000},{0x45f3c000},{0x45f3e000}, +{0x45f40000},{0x45f42000},{0x45f44000},{0x45f46000},{0x45f48000},{0x45f4a000},{0x45f4c000},{0x45f4e000},{0x45f50000},{0x45f52000},{0x45f54000},{0x45f56000},{0x45f58000},{0x45f5a000},{0x45f5c000},{0x45f5e000},{0x45f60000},{0x45f62000},{0x45f64000},{0x45f66000},{0x45f68000},{0x45f6a000},{0x45f6c000},{0x45f6e000},{0x45f70000},{0x45f72000},{0x45f74000},{0x45f76000},{0x45f78000},{0x45f7a000},{0x45f7c000},{0x45f7e000}, +{0x45f80000},{0x45f82000},{0x45f84000},{0x45f86000},{0x45f88000},{0x45f8a000},{0x45f8c000},{0x45f8e000},{0x45f90000},{0x45f92000},{0x45f94000},{0x45f96000},{0x45f98000},{0x45f9a000},{0x45f9c000},{0x45f9e000},{0x45fa0000},{0x45fa2000},{0x45fa4000},{0x45fa6000},{0x45fa8000},{0x45faa000},{0x45fac000},{0x45fae000},{0x45fb0000},{0x45fb2000},{0x45fb4000},{0x45fb6000},{0x45fb8000},{0x45fba000},{0x45fbc000},{0x45fbe000}, +{0x45fc0000},{0x45fc2000},{0x45fc4000},{0x45fc6000},{0x45fc8000},{0x45fca000},{0x45fcc000},{0x45fce000},{0x45fd0000},{0x45fd2000},{0x45fd4000},{0x45fd6000},{0x45fd8000},{0x45fda000},{0x45fdc000},{0x45fde000},{0x45fe0000},{0x45fe2000},{0x45fe4000},{0x45fe6000},{0x45fe8000},{0x45fea000},{0x45fec000},{0x45fee000},{0x45ff0000},{0x45ff2000},{0x45ff4000},{0x45ff6000},{0x45ff8000},{0x45ffa000},{0x45ffc000},{0x45ffe000}, +{0x46000000},{0x46002000},{0x46004000},{0x46006000},{0x46008000},{0x4600a000},{0x4600c000},{0x4600e000},{0x46010000},{0x46012000},{0x46014000},{0x46016000},{0x46018000},{0x4601a000},{0x4601c000},{0x4601e000},{0x46020000},{0x46022000},{0x46024000},{0x46026000},{0x46028000},{0x4602a000},{0x4602c000},{0x4602e000},{0x46030000},{0x46032000},{0x46034000},{0x46036000},{0x46038000},{0x4603a000},{0x4603c000},{0x4603e000}, +{0x46040000},{0x46042000},{0x46044000},{0x46046000},{0x46048000},{0x4604a000},{0x4604c000},{0x4604e000},{0x46050000},{0x46052000},{0x46054000},{0x46056000},{0x46058000},{0x4605a000},{0x4605c000},{0x4605e000},{0x46060000},{0x46062000},{0x46064000},{0x46066000},{0x46068000},{0x4606a000},{0x4606c000},{0x4606e000},{0x46070000},{0x46072000},{0x46074000},{0x46076000},{0x46078000},{0x4607a000},{0x4607c000},{0x4607e000}, +{0x46080000},{0x46082000},{0x46084000},{0x46086000},{0x46088000},{0x4608a000},{0x4608c000},{0x4608e000},{0x46090000},{0x46092000},{0x46094000},{0x46096000},{0x46098000},{0x4609a000},{0x4609c000},{0x4609e000},{0x460a0000},{0x460a2000},{0x460a4000},{0x460a6000},{0x460a8000},{0x460aa000},{0x460ac000},{0x460ae000},{0x460b0000},{0x460b2000},{0x460b4000},{0x460b6000},{0x460b8000},{0x460ba000},{0x460bc000},{0x460be000}, +{0x460c0000},{0x460c2000},{0x460c4000},{0x460c6000},{0x460c8000},{0x460ca000},{0x460cc000},{0x460ce000},{0x460d0000},{0x460d2000},{0x460d4000},{0x460d6000},{0x460d8000},{0x460da000},{0x460dc000},{0x460de000},{0x460e0000},{0x460e2000},{0x460e4000},{0x460e6000},{0x460e8000},{0x460ea000},{0x460ec000},{0x460ee000},{0x460f0000},{0x460f2000},{0x460f4000},{0x460f6000},{0x460f8000},{0x460fa000},{0x460fc000},{0x460fe000}, +{0x46100000},{0x46102000},{0x46104000},{0x46106000},{0x46108000},{0x4610a000},{0x4610c000},{0x4610e000},{0x46110000},{0x46112000},{0x46114000},{0x46116000},{0x46118000},{0x4611a000},{0x4611c000},{0x4611e000},{0x46120000},{0x46122000},{0x46124000},{0x46126000},{0x46128000},{0x4612a000},{0x4612c000},{0x4612e000},{0x46130000},{0x46132000},{0x46134000},{0x46136000},{0x46138000},{0x4613a000},{0x4613c000},{0x4613e000}, +{0x46140000},{0x46142000},{0x46144000},{0x46146000},{0x46148000},{0x4614a000},{0x4614c000},{0x4614e000},{0x46150000},{0x46152000},{0x46154000},{0x46156000},{0x46158000},{0x4615a000},{0x4615c000},{0x4615e000},{0x46160000},{0x46162000},{0x46164000},{0x46166000},{0x46168000},{0x4616a000},{0x4616c000},{0x4616e000},{0x46170000},{0x46172000},{0x46174000},{0x46176000},{0x46178000},{0x4617a000},{0x4617c000},{0x4617e000}, +{0x46180000},{0x46182000},{0x46184000},{0x46186000},{0x46188000},{0x4618a000},{0x4618c000},{0x4618e000},{0x46190000},{0x46192000},{0x46194000},{0x46196000},{0x46198000},{0x4619a000},{0x4619c000},{0x4619e000},{0x461a0000},{0x461a2000},{0x461a4000},{0x461a6000},{0x461a8000},{0x461aa000},{0x461ac000},{0x461ae000},{0x461b0000},{0x461b2000},{0x461b4000},{0x461b6000},{0x461b8000},{0x461ba000},{0x461bc000},{0x461be000}, +{0x461c0000},{0x461c2000},{0x461c4000},{0x461c6000},{0x461c8000},{0x461ca000},{0x461cc000},{0x461ce000},{0x461d0000},{0x461d2000},{0x461d4000},{0x461d6000},{0x461d8000},{0x461da000},{0x461dc000},{0x461de000},{0x461e0000},{0x461e2000},{0x461e4000},{0x461e6000},{0x461e8000},{0x461ea000},{0x461ec000},{0x461ee000},{0x461f0000},{0x461f2000},{0x461f4000},{0x461f6000},{0x461f8000},{0x461fa000},{0x461fc000},{0x461fe000}, +{0x46200000},{0x46202000},{0x46204000},{0x46206000},{0x46208000},{0x4620a000},{0x4620c000},{0x4620e000},{0x46210000},{0x46212000},{0x46214000},{0x46216000},{0x46218000},{0x4621a000},{0x4621c000},{0x4621e000},{0x46220000},{0x46222000},{0x46224000},{0x46226000},{0x46228000},{0x4622a000},{0x4622c000},{0x4622e000},{0x46230000},{0x46232000},{0x46234000},{0x46236000},{0x46238000},{0x4623a000},{0x4623c000},{0x4623e000}, +{0x46240000},{0x46242000},{0x46244000},{0x46246000},{0x46248000},{0x4624a000},{0x4624c000},{0x4624e000},{0x46250000},{0x46252000},{0x46254000},{0x46256000},{0x46258000},{0x4625a000},{0x4625c000},{0x4625e000},{0x46260000},{0x46262000},{0x46264000},{0x46266000},{0x46268000},{0x4626a000},{0x4626c000},{0x4626e000},{0x46270000},{0x46272000},{0x46274000},{0x46276000},{0x46278000},{0x4627a000},{0x4627c000},{0x4627e000}, +{0x46280000},{0x46282000},{0x46284000},{0x46286000},{0x46288000},{0x4628a000},{0x4628c000},{0x4628e000},{0x46290000},{0x46292000},{0x46294000},{0x46296000},{0x46298000},{0x4629a000},{0x4629c000},{0x4629e000},{0x462a0000},{0x462a2000},{0x462a4000},{0x462a6000},{0x462a8000},{0x462aa000},{0x462ac000},{0x462ae000},{0x462b0000},{0x462b2000},{0x462b4000},{0x462b6000},{0x462b8000},{0x462ba000},{0x462bc000},{0x462be000}, +{0x462c0000},{0x462c2000},{0x462c4000},{0x462c6000},{0x462c8000},{0x462ca000},{0x462cc000},{0x462ce000},{0x462d0000},{0x462d2000},{0x462d4000},{0x462d6000},{0x462d8000},{0x462da000},{0x462dc000},{0x462de000},{0x462e0000},{0x462e2000},{0x462e4000},{0x462e6000},{0x462e8000},{0x462ea000},{0x462ec000},{0x462ee000},{0x462f0000},{0x462f2000},{0x462f4000},{0x462f6000},{0x462f8000},{0x462fa000},{0x462fc000},{0x462fe000}, +{0x46300000},{0x46302000},{0x46304000},{0x46306000},{0x46308000},{0x4630a000},{0x4630c000},{0x4630e000},{0x46310000},{0x46312000},{0x46314000},{0x46316000},{0x46318000},{0x4631a000},{0x4631c000},{0x4631e000},{0x46320000},{0x46322000},{0x46324000},{0x46326000},{0x46328000},{0x4632a000},{0x4632c000},{0x4632e000},{0x46330000},{0x46332000},{0x46334000},{0x46336000},{0x46338000},{0x4633a000},{0x4633c000},{0x4633e000}, +{0x46340000},{0x46342000},{0x46344000},{0x46346000},{0x46348000},{0x4634a000},{0x4634c000},{0x4634e000},{0x46350000},{0x46352000},{0x46354000},{0x46356000},{0x46358000},{0x4635a000},{0x4635c000},{0x4635e000},{0x46360000},{0x46362000},{0x46364000},{0x46366000},{0x46368000},{0x4636a000},{0x4636c000},{0x4636e000},{0x46370000},{0x46372000},{0x46374000},{0x46376000},{0x46378000},{0x4637a000},{0x4637c000},{0x4637e000}, +{0x46380000},{0x46382000},{0x46384000},{0x46386000},{0x46388000},{0x4638a000},{0x4638c000},{0x4638e000},{0x46390000},{0x46392000},{0x46394000},{0x46396000},{0x46398000},{0x4639a000},{0x4639c000},{0x4639e000},{0x463a0000},{0x463a2000},{0x463a4000},{0x463a6000},{0x463a8000},{0x463aa000},{0x463ac000},{0x463ae000},{0x463b0000},{0x463b2000},{0x463b4000},{0x463b6000},{0x463b8000},{0x463ba000},{0x463bc000},{0x463be000}, +{0x463c0000},{0x463c2000},{0x463c4000},{0x463c6000},{0x463c8000},{0x463ca000},{0x463cc000},{0x463ce000},{0x463d0000},{0x463d2000},{0x463d4000},{0x463d6000},{0x463d8000},{0x463da000},{0x463dc000},{0x463de000},{0x463e0000},{0x463e2000},{0x463e4000},{0x463e6000},{0x463e8000},{0x463ea000},{0x463ec000},{0x463ee000},{0x463f0000},{0x463f2000},{0x463f4000},{0x463f6000},{0x463f8000},{0x463fa000},{0x463fc000},{0x463fe000}, +{0x46400000},{0x46402000},{0x46404000},{0x46406000},{0x46408000},{0x4640a000},{0x4640c000},{0x4640e000},{0x46410000},{0x46412000},{0x46414000},{0x46416000},{0x46418000},{0x4641a000},{0x4641c000},{0x4641e000},{0x46420000},{0x46422000},{0x46424000},{0x46426000},{0x46428000},{0x4642a000},{0x4642c000},{0x4642e000},{0x46430000},{0x46432000},{0x46434000},{0x46436000},{0x46438000},{0x4643a000},{0x4643c000},{0x4643e000}, +{0x46440000},{0x46442000},{0x46444000},{0x46446000},{0x46448000},{0x4644a000},{0x4644c000},{0x4644e000},{0x46450000},{0x46452000},{0x46454000},{0x46456000},{0x46458000},{0x4645a000},{0x4645c000},{0x4645e000},{0x46460000},{0x46462000},{0x46464000},{0x46466000},{0x46468000},{0x4646a000},{0x4646c000},{0x4646e000},{0x46470000},{0x46472000},{0x46474000},{0x46476000},{0x46478000},{0x4647a000},{0x4647c000},{0x4647e000}, +{0x46480000},{0x46482000},{0x46484000},{0x46486000},{0x46488000},{0x4648a000},{0x4648c000},{0x4648e000},{0x46490000},{0x46492000},{0x46494000},{0x46496000},{0x46498000},{0x4649a000},{0x4649c000},{0x4649e000},{0x464a0000},{0x464a2000},{0x464a4000},{0x464a6000},{0x464a8000},{0x464aa000},{0x464ac000},{0x464ae000},{0x464b0000},{0x464b2000},{0x464b4000},{0x464b6000},{0x464b8000},{0x464ba000},{0x464bc000},{0x464be000}, +{0x464c0000},{0x464c2000},{0x464c4000},{0x464c6000},{0x464c8000},{0x464ca000},{0x464cc000},{0x464ce000},{0x464d0000},{0x464d2000},{0x464d4000},{0x464d6000},{0x464d8000},{0x464da000},{0x464dc000},{0x464de000},{0x464e0000},{0x464e2000},{0x464e4000},{0x464e6000},{0x464e8000},{0x464ea000},{0x464ec000},{0x464ee000},{0x464f0000},{0x464f2000},{0x464f4000},{0x464f6000},{0x464f8000},{0x464fa000},{0x464fc000},{0x464fe000}, +{0x46500000},{0x46502000},{0x46504000},{0x46506000},{0x46508000},{0x4650a000},{0x4650c000},{0x4650e000},{0x46510000},{0x46512000},{0x46514000},{0x46516000},{0x46518000},{0x4651a000},{0x4651c000},{0x4651e000},{0x46520000},{0x46522000},{0x46524000},{0x46526000},{0x46528000},{0x4652a000},{0x4652c000},{0x4652e000},{0x46530000},{0x46532000},{0x46534000},{0x46536000},{0x46538000},{0x4653a000},{0x4653c000},{0x4653e000}, +{0x46540000},{0x46542000},{0x46544000},{0x46546000},{0x46548000},{0x4654a000},{0x4654c000},{0x4654e000},{0x46550000},{0x46552000},{0x46554000},{0x46556000},{0x46558000},{0x4655a000},{0x4655c000},{0x4655e000},{0x46560000},{0x46562000},{0x46564000},{0x46566000},{0x46568000},{0x4656a000},{0x4656c000},{0x4656e000},{0x46570000},{0x46572000},{0x46574000},{0x46576000},{0x46578000},{0x4657a000},{0x4657c000},{0x4657e000}, +{0x46580000},{0x46582000},{0x46584000},{0x46586000},{0x46588000},{0x4658a000},{0x4658c000},{0x4658e000},{0x46590000},{0x46592000},{0x46594000},{0x46596000},{0x46598000},{0x4659a000},{0x4659c000},{0x4659e000},{0x465a0000},{0x465a2000},{0x465a4000},{0x465a6000},{0x465a8000},{0x465aa000},{0x465ac000},{0x465ae000},{0x465b0000},{0x465b2000},{0x465b4000},{0x465b6000},{0x465b8000},{0x465ba000},{0x465bc000},{0x465be000}, +{0x465c0000},{0x465c2000},{0x465c4000},{0x465c6000},{0x465c8000},{0x465ca000},{0x465cc000},{0x465ce000},{0x465d0000},{0x465d2000},{0x465d4000},{0x465d6000},{0x465d8000},{0x465da000},{0x465dc000},{0x465de000},{0x465e0000},{0x465e2000},{0x465e4000},{0x465e6000},{0x465e8000},{0x465ea000},{0x465ec000},{0x465ee000},{0x465f0000},{0x465f2000},{0x465f4000},{0x465f6000},{0x465f8000},{0x465fa000},{0x465fc000},{0x465fe000}, +{0x46600000},{0x46602000},{0x46604000},{0x46606000},{0x46608000},{0x4660a000},{0x4660c000},{0x4660e000},{0x46610000},{0x46612000},{0x46614000},{0x46616000},{0x46618000},{0x4661a000},{0x4661c000},{0x4661e000},{0x46620000},{0x46622000},{0x46624000},{0x46626000},{0x46628000},{0x4662a000},{0x4662c000},{0x4662e000},{0x46630000},{0x46632000},{0x46634000},{0x46636000},{0x46638000},{0x4663a000},{0x4663c000},{0x4663e000}, +{0x46640000},{0x46642000},{0x46644000},{0x46646000},{0x46648000},{0x4664a000},{0x4664c000},{0x4664e000},{0x46650000},{0x46652000},{0x46654000},{0x46656000},{0x46658000},{0x4665a000},{0x4665c000},{0x4665e000},{0x46660000},{0x46662000},{0x46664000},{0x46666000},{0x46668000},{0x4666a000},{0x4666c000},{0x4666e000},{0x46670000},{0x46672000},{0x46674000},{0x46676000},{0x46678000},{0x4667a000},{0x4667c000},{0x4667e000}, +{0x46680000},{0x46682000},{0x46684000},{0x46686000},{0x46688000},{0x4668a000},{0x4668c000},{0x4668e000},{0x46690000},{0x46692000},{0x46694000},{0x46696000},{0x46698000},{0x4669a000},{0x4669c000},{0x4669e000},{0x466a0000},{0x466a2000},{0x466a4000},{0x466a6000},{0x466a8000},{0x466aa000},{0x466ac000},{0x466ae000},{0x466b0000},{0x466b2000},{0x466b4000},{0x466b6000},{0x466b8000},{0x466ba000},{0x466bc000},{0x466be000}, +{0x466c0000},{0x466c2000},{0x466c4000},{0x466c6000},{0x466c8000},{0x466ca000},{0x466cc000},{0x466ce000},{0x466d0000},{0x466d2000},{0x466d4000},{0x466d6000},{0x466d8000},{0x466da000},{0x466dc000},{0x466de000},{0x466e0000},{0x466e2000},{0x466e4000},{0x466e6000},{0x466e8000},{0x466ea000},{0x466ec000},{0x466ee000},{0x466f0000},{0x466f2000},{0x466f4000},{0x466f6000},{0x466f8000},{0x466fa000},{0x466fc000},{0x466fe000}, +{0x46700000},{0x46702000},{0x46704000},{0x46706000},{0x46708000},{0x4670a000},{0x4670c000},{0x4670e000},{0x46710000},{0x46712000},{0x46714000},{0x46716000},{0x46718000},{0x4671a000},{0x4671c000},{0x4671e000},{0x46720000},{0x46722000},{0x46724000},{0x46726000},{0x46728000},{0x4672a000},{0x4672c000},{0x4672e000},{0x46730000},{0x46732000},{0x46734000},{0x46736000},{0x46738000},{0x4673a000},{0x4673c000},{0x4673e000}, +{0x46740000},{0x46742000},{0x46744000},{0x46746000},{0x46748000},{0x4674a000},{0x4674c000},{0x4674e000},{0x46750000},{0x46752000},{0x46754000},{0x46756000},{0x46758000},{0x4675a000},{0x4675c000},{0x4675e000},{0x46760000},{0x46762000},{0x46764000},{0x46766000},{0x46768000},{0x4676a000},{0x4676c000},{0x4676e000},{0x46770000},{0x46772000},{0x46774000},{0x46776000},{0x46778000},{0x4677a000},{0x4677c000},{0x4677e000}, +{0x46780000},{0x46782000},{0x46784000},{0x46786000},{0x46788000},{0x4678a000},{0x4678c000},{0x4678e000},{0x46790000},{0x46792000},{0x46794000},{0x46796000},{0x46798000},{0x4679a000},{0x4679c000},{0x4679e000},{0x467a0000},{0x467a2000},{0x467a4000},{0x467a6000},{0x467a8000},{0x467aa000},{0x467ac000},{0x467ae000},{0x467b0000},{0x467b2000},{0x467b4000},{0x467b6000},{0x467b8000},{0x467ba000},{0x467bc000},{0x467be000}, +{0x467c0000},{0x467c2000},{0x467c4000},{0x467c6000},{0x467c8000},{0x467ca000},{0x467cc000},{0x467ce000},{0x467d0000},{0x467d2000},{0x467d4000},{0x467d6000},{0x467d8000},{0x467da000},{0x467dc000},{0x467de000},{0x467e0000},{0x467e2000},{0x467e4000},{0x467e6000},{0x467e8000},{0x467ea000},{0x467ec000},{0x467ee000},{0x467f0000},{0x467f2000},{0x467f4000},{0x467f6000},{0x467f8000},{0x467fa000},{0x467fc000},{0x467fe000}, +{0x46800000},{0x46802000},{0x46804000},{0x46806000},{0x46808000},{0x4680a000},{0x4680c000},{0x4680e000},{0x46810000},{0x46812000},{0x46814000},{0x46816000},{0x46818000},{0x4681a000},{0x4681c000},{0x4681e000},{0x46820000},{0x46822000},{0x46824000},{0x46826000},{0x46828000},{0x4682a000},{0x4682c000},{0x4682e000},{0x46830000},{0x46832000},{0x46834000},{0x46836000},{0x46838000},{0x4683a000},{0x4683c000},{0x4683e000}, +{0x46840000},{0x46842000},{0x46844000},{0x46846000},{0x46848000},{0x4684a000},{0x4684c000},{0x4684e000},{0x46850000},{0x46852000},{0x46854000},{0x46856000},{0x46858000},{0x4685a000},{0x4685c000},{0x4685e000},{0x46860000},{0x46862000},{0x46864000},{0x46866000},{0x46868000},{0x4686a000},{0x4686c000},{0x4686e000},{0x46870000},{0x46872000},{0x46874000},{0x46876000},{0x46878000},{0x4687a000},{0x4687c000},{0x4687e000}, +{0x46880000},{0x46882000},{0x46884000},{0x46886000},{0x46888000},{0x4688a000},{0x4688c000},{0x4688e000},{0x46890000},{0x46892000},{0x46894000},{0x46896000},{0x46898000},{0x4689a000},{0x4689c000},{0x4689e000},{0x468a0000},{0x468a2000},{0x468a4000},{0x468a6000},{0x468a8000},{0x468aa000},{0x468ac000},{0x468ae000},{0x468b0000},{0x468b2000},{0x468b4000},{0x468b6000},{0x468b8000},{0x468ba000},{0x468bc000},{0x468be000}, +{0x468c0000},{0x468c2000},{0x468c4000},{0x468c6000},{0x468c8000},{0x468ca000},{0x468cc000},{0x468ce000},{0x468d0000},{0x468d2000},{0x468d4000},{0x468d6000},{0x468d8000},{0x468da000},{0x468dc000},{0x468de000},{0x468e0000},{0x468e2000},{0x468e4000},{0x468e6000},{0x468e8000},{0x468ea000},{0x468ec000},{0x468ee000},{0x468f0000},{0x468f2000},{0x468f4000},{0x468f6000},{0x468f8000},{0x468fa000},{0x468fc000},{0x468fe000}, +{0x46900000},{0x46902000},{0x46904000},{0x46906000},{0x46908000},{0x4690a000},{0x4690c000},{0x4690e000},{0x46910000},{0x46912000},{0x46914000},{0x46916000},{0x46918000},{0x4691a000},{0x4691c000},{0x4691e000},{0x46920000},{0x46922000},{0x46924000},{0x46926000},{0x46928000},{0x4692a000},{0x4692c000},{0x4692e000},{0x46930000},{0x46932000},{0x46934000},{0x46936000},{0x46938000},{0x4693a000},{0x4693c000},{0x4693e000}, +{0x46940000},{0x46942000},{0x46944000},{0x46946000},{0x46948000},{0x4694a000},{0x4694c000},{0x4694e000},{0x46950000},{0x46952000},{0x46954000},{0x46956000},{0x46958000},{0x4695a000},{0x4695c000},{0x4695e000},{0x46960000},{0x46962000},{0x46964000},{0x46966000},{0x46968000},{0x4696a000},{0x4696c000},{0x4696e000},{0x46970000},{0x46972000},{0x46974000},{0x46976000},{0x46978000},{0x4697a000},{0x4697c000},{0x4697e000}, +{0x46980000},{0x46982000},{0x46984000},{0x46986000},{0x46988000},{0x4698a000},{0x4698c000},{0x4698e000},{0x46990000},{0x46992000},{0x46994000},{0x46996000},{0x46998000},{0x4699a000},{0x4699c000},{0x4699e000},{0x469a0000},{0x469a2000},{0x469a4000},{0x469a6000},{0x469a8000},{0x469aa000},{0x469ac000},{0x469ae000},{0x469b0000},{0x469b2000},{0x469b4000},{0x469b6000},{0x469b8000},{0x469ba000},{0x469bc000},{0x469be000}, +{0x469c0000},{0x469c2000},{0x469c4000},{0x469c6000},{0x469c8000},{0x469ca000},{0x469cc000},{0x469ce000},{0x469d0000},{0x469d2000},{0x469d4000},{0x469d6000},{0x469d8000},{0x469da000},{0x469dc000},{0x469de000},{0x469e0000},{0x469e2000},{0x469e4000},{0x469e6000},{0x469e8000},{0x469ea000},{0x469ec000},{0x469ee000},{0x469f0000},{0x469f2000},{0x469f4000},{0x469f6000},{0x469f8000},{0x469fa000},{0x469fc000},{0x469fe000}, +{0x46a00000},{0x46a02000},{0x46a04000},{0x46a06000},{0x46a08000},{0x46a0a000},{0x46a0c000},{0x46a0e000},{0x46a10000},{0x46a12000},{0x46a14000},{0x46a16000},{0x46a18000},{0x46a1a000},{0x46a1c000},{0x46a1e000},{0x46a20000},{0x46a22000},{0x46a24000},{0x46a26000},{0x46a28000},{0x46a2a000},{0x46a2c000},{0x46a2e000},{0x46a30000},{0x46a32000},{0x46a34000},{0x46a36000},{0x46a38000},{0x46a3a000},{0x46a3c000},{0x46a3e000}, +{0x46a40000},{0x46a42000},{0x46a44000},{0x46a46000},{0x46a48000},{0x46a4a000},{0x46a4c000},{0x46a4e000},{0x46a50000},{0x46a52000},{0x46a54000},{0x46a56000},{0x46a58000},{0x46a5a000},{0x46a5c000},{0x46a5e000},{0x46a60000},{0x46a62000},{0x46a64000},{0x46a66000},{0x46a68000},{0x46a6a000},{0x46a6c000},{0x46a6e000},{0x46a70000},{0x46a72000},{0x46a74000},{0x46a76000},{0x46a78000},{0x46a7a000},{0x46a7c000},{0x46a7e000}, +{0x46a80000},{0x46a82000},{0x46a84000},{0x46a86000},{0x46a88000},{0x46a8a000},{0x46a8c000},{0x46a8e000},{0x46a90000},{0x46a92000},{0x46a94000},{0x46a96000},{0x46a98000},{0x46a9a000},{0x46a9c000},{0x46a9e000},{0x46aa0000},{0x46aa2000},{0x46aa4000},{0x46aa6000},{0x46aa8000},{0x46aaa000},{0x46aac000},{0x46aae000},{0x46ab0000},{0x46ab2000},{0x46ab4000},{0x46ab6000},{0x46ab8000},{0x46aba000},{0x46abc000},{0x46abe000}, +{0x46ac0000},{0x46ac2000},{0x46ac4000},{0x46ac6000},{0x46ac8000},{0x46aca000},{0x46acc000},{0x46ace000},{0x46ad0000},{0x46ad2000},{0x46ad4000},{0x46ad6000},{0x46ad8000},{0x46ada000},{0x46adc000},{0x46ade000},{0x46ae0000},{0x46ae2000},{0x46ae4000},{0x46ae6000},{0x46ae8000},{0x46aea000},{0x46aec000},{0x46aee000},{0x46af0000},{0x46af2000},{0x46af4000},{0x46af6000},{0x46af8000},{0x46afa000},{0x46afc000},{0x46afe000}, +{0x46b00000},{0x46b02000},{0x46b04000},{0x46b06000},{0x46b08000},{0x46b0a000},{0x46b0c000},{0x46b0e000},{0x46b10000},{0x46b12000},{0x46b14000},{0x46b16000},{0x46b18000},{0x46b1a000},{0x46b1c000},{0x46b1e000},{0x46b20000},{0x46b22000},{0x46b24000},{0x46b26000},{0x46b28000},{0x46b2a000},{0x46b2c000},{0x46b2e000},{0x46b30000},{0x46b32000},{0x46b34000},{0x46b36000},{0x46b38000},{0x46b3a000},{0x46b3c000},{0x46b3e000}, +{0x46b40000},{0x46b42000},{0x46b44000},{0x46b46000},{0x46b48000},{0x46b4a000},{0x46b4c000},{0x46b4e000},{0x46b50000},{0x46b52000},{0x46b54000},{0x46b56000},{0x46b58000},{0x46b5a000},{0x46b5c000},{0x46b5e000},{0x46b60000},{0x46b62000},{0x46b64000},{0x46b66000},{0x46b68000},{0x46b6a000},{0x46b6c000},{0x46b6e000},{0x46b70000},{0x46b72000},{0x46b74000},{0x46b76000},{0x46b78000},{0x46b7a000},{0x46b7c000},{0x46b7e000}, +{0x46b80000},{0x46b82000},{0x46b84000},{0x46b86000},{0x46b88000},{0x46b8a000},{0x46b8c000},{0x46b8e000},{0x46b90000},{0x46b92000},{0x46b94000},{0x46b96000},{0x46b98000},{0x46b9a000},{0x46b9c000},{0x46b9e000},{0x46ba0000},{0x46ba2000},{0x46ba4000},{0x46ba6000},{0x46ba8000},{0x46baa000},{0x46bac000},{0x46bae000},{0x46bb0000},{0x46bb2000},{0x46bb4000},{0x46bb6000},{0x46bb8000},{0x46bba000},{0x46bbc000},{0x46bbe000}, +{0x46bc0000},{0x46bc2000},{0x46bc4000},{0x46bc6000},{0x46bc8000},{0x46bca000},{0x46bcc000},{0x46bce000},{0x46bd0000},{0x46bd2000},{0x46bd4000},{0x46bd6000},{0x46bd8000},{0x46bda000},{0x46bdc000},{0x46bde000},{0x46be0000},{0x46be2000},{0x46be4000},{0x46be6000},{0x46be8000},{0x46bea000},{0x46bec000},{0x46bee000},{0x46bf0000},{0x46bf2000},{0x46bf4000},{0x46bf6000},{0x46bf8000},{0x46bfa000},{0x46bfc000},{0x46bfe000}, +{0x46c00000},{0x46c02000},{0x46c04000},{0x46c06000},{0x46c08000},{0x46c0a000},{0x46c0c000},{0x46c0e000},{0x46c10000},{0x46c12000},{0x46c14000},{0x46c16000},{0x46c18000},{0x46c1a000},{0x46c1c000},{0x46c1e000},{0x46c20000},{0x46c22000},{0x46c24000},{0x46c26000},{0x46c28000},{0x46c2a000},{0x46c2c000},{0x46c2e000},{0x46c30000},{0x46c32000},{0x46c34000},{0x46c36000},{0x46c38000},{0x46c3a000},{0x46c3c000},{0x46c3e000}, +{0x46c40000},{0x46c42000},{0x46c44000},{0x46c46000},{0x46c48000},{0x46c4a000},{0x46c4c000},{0x46c4e000},{0x46c50000},{0x46c52000},{0x46c54000},{0x46c56000},{0x46c58000},{0x46c5a000},{0x46c5c000},{0x46c5e000},{0x46c60000},{0x46c62000},{0x46c64000},{0x46c66000},{0x46c68000},{0x46c6a000},{0x46c6c000},{0x46c6e000},{0x46c70000},{0x46c72000},{0x46c74000},{0x46c76000},{0x46c78000},{0x46c7a000},{0x46c7c000},{0x46c7e000}, +{0x46c80000},{0x46c82000},{0x46c84000},{0x46c86000},{0x46c88000},{0x46c8a000},{0x46c8c000},{0x46c8e000},{0x46c90000},{0x46c92000},{0x46c94000},{0x46c96000},{0x46c98000},{0x46c9a000},{0x46c9c000},{0x46c9e000},{0x46ca0000},{0x46ca2000},{0x46ca4000},{0x46ca6000},{0x46ca8000},{0x46caa000},{0x46cac000},{0x46cae000},{0x46cb0000},{0x46cb2000},{0x46cb4000},{0x46cb6000},{0x46cb8000},{0x46cba000},{0x46cbc000},{0x46cbe000}, +{0x46cc0000},{0x46cc2000},{0x46cc4000},{0x46cc6000},{0x46cc8000},{0x46cca000},{0x46ccc000},{0x46cce000},{0x46cd0000},{0x46cd2000},{0x46cd4000},{0x46cd6000},{0x46cd8000},{0x46cda000},{0x46cdc000},{0x46cde000},{0x46ce0000},{0x46ce2000},{0x46ce4000},{0x46ce6000},{0x46ce8000},{0x46cea000},{0x46cec000},{0x46cee000},{0x46cf0000},{0x46cf2000},{0x46cf4000},{0x46cf6000},{0x46cf8000},{0x46cfa000},{0x46cfc000},{0x46cfe000}, +{0x46d00000},{0x46d02000},{0x46d04000},{0x46d06000},{0x46d08000},{0x46d0a000},{0x46d0c000},{0x46d0e000},{0x46d10000},{0x46d12000},{0x46d14000},{0x46d16000},{0x46d18000},{0x46d1a000},{0x46d1c000},{0x46d1e000},{0x46d20000},{0x46d22000},{0x46d24000},{0x46d26000},{0x46d28000},{0x46d2a000},{0x46d2c000},{0x46d2e000},{0x46d30000},{0x46d32000},{0x46d34000},{0x46d36000},{0x46d38000},{0x46d3a000},{0x46d3c000},{0x46d3e000}, +{0x46d40000},{0x46d42000},{0x46d44000},{0x46d46000},{0x46d48000},{0x46d4a000},{0x46d4c000},{0x46d4e000},{0x46d50000},{0x46d52000},{0x46d54000},{0x46d56000},{0x46d58000},{0x46d5a000},{0x46d5c000},{0x46d5e000},{0x46d60000},{0x46d62000},{0x46d64000},{0x46d66000},{0x46d68000},{0x46d6a000},{0x46d6c000},{0x46d6e000},{0x46d70000},{0x46d72000},{0x46d74000},{0x46d76000},{0x46d78000},{0x46d7a000},{0x46d7c000},{0x46d7e000}, +{0x46d80000},{0x46d82000},{0x46d84000},{0x46d86000},{0x46d88000},{0x46d8a000},{0x46d8c000},{0x46d8e000},{0x46d90000},{0x46d92000},{0x46d94000},{0x46d96000},{0x46d98000},{0x46d9a000},{0x46d9c000},{0x46d9e000},{0x46da0000},{0x46da2000},{0x46da4000},{0x46da6000},{0x46da8000},{0x46daa000},{0x46dac000},{0x46dae000},{0x46db0000},{0x46db2000},{0x46db4000},{0x46db6000},{0x46db8000},{0x46dba000},{0x46dbc000},{0x46dbe000}, +{0x46dc0000},{0x46dc2000},{0x46dc4000},{0x46dc6000},{0x46dc8000},{0x46dca000},{0x46dcc000},{0x46dce000},{0x46dd0000},{0x46dd2000},{0x46dd4000},{0x46dd6000},{0x46dd8000},{0x46dda000},{0x46ddc000},{0x46dde000},{0x46de0000},{0x46de2000},{0x46de4000},{0x46de6000},{0x46de8000},{0x46dea000},{0x46dec000},{0x46dee000},{0x46df0000},{0x46df2000},{0x46df4000},{0x46df6000},{0x46df8000},{0x46dfa000},{0x46dfc000},{0x46dfe000}, +{0x46e00000},{0x46e02000},{0x46e04000},{0x46e06000},{0x46e08000},{0x46e0a000},{0x46e0c000},{0x46e0e000},{0x46e10000},{0x46e12000},{0x46e14000},{0x46e16000},{0x46e18000},{0x46e1a000},{0x46e1c000},{0x46e1e000},{0x46e20000},{0x46e22000},{0x46e24000},{0x46e26000},{0x46e28000},{0x46e2a000},{0x46e2c000},{0x46e2e000},{0x46e30000},{0x46e32000},{0x46e34000},{0x46e36000},{0x46e38000},{0x46e3a000},{0x46e3c000},{0x46e3e000}, +{0x46e40000},{0x46e42000},{0x46e44000},{0x46e46000},{0x46e48000},{0x46e4a000},{0x46e4c000},{0x46e4e000},{0x46e50000},{0x46e52000},{0x46e54000},{0x46e56000},{0x46e58000},{0x46e5a000},{0x46e5c000},{0x46e5e000},{0x46e60000},{0x46e62000},{0x46e64000},{0x46e66000},{0x46e68000},{0x46e6a000},{0x46e6c000},{0x46e6e000},{0x46e70000},{0x46e72000},{0x46e74000},{0x46e76000},{0x46e78000},{0x46e7a000},{0x46e7c000},{0x46e7e000}, +{0x46e80000},{0x46e82000},{0x46e84000},{0x46e86000},{0x46e88000},{0x46e8a000},{0x46e8c000},{0x46e8e000},{0x46e90000},{0x46e92000},{0x46e94000},{0x46e96000},{0x46e98000},{0x46e9a000},{0x46e9c000},{0x46e9e000},{0x46ea0000},{0x46ea2000},{0x46ea4000},{0x46ea6000},{0x46ea8000},{0x46eaa000},{0x46eac000},{0x46eae000},{0x46eb0000},{0x46eb2000},{0x46eb4000},{0x46eb6000},{0x46eb8000},{0x46eba000},{0x46ebc000},{0x46ebe000}, +{0x46ec0000},{0x46ec2000},{0x46ec4000},{0x46ec6000},{0x46ec8000},{0x46eca000},{0x46ecc000},{0x46ece000},{0x46ed0000},{0x46ed2000},{0x46ed4000},{0x46ed6000},{0x46ed8000},{0x46eda000},{0x46edc000},{0x46ede000},{0x46ee0000},{0x46ee2000},{0x46ee4000},{0x46ee6000},{0x46ee8000},{0x46eea000},{0x46eec000},{0x46eee000},{0x46ef0000},{0x46ef2000},{0x46ef4000},{0x46ef6000},{0x46ef8000},{0x46efa000},{0x46efc000},{0x46efe000}, +{0x46f00000},{0x46f02000},{0x46f04000},{0x46f06000},{0x46f08000},{0x46f0a000},{0x46f0c000},{0x46f0e000},{0x46f10000},{0x46f12000},{0x46f14000},{0x46f16000},{0x46f18000},{0x46f1a000},{0x46f1c000},{0x46f1e000},{0x46f20000},{0x46f22000},{0x46f24000},{0x46f26000},{0x46f28000},{0x46f2a000},{0x46f2c000},{0x46f2e000},{0x46f30000},{0x46f32000},{0x46f34000},{0x46f36000},{0x46f38000},{0x46f3a000},{0x46f3c000},{0x46f3e000}, +{0x46f40000},{0x46f42000},{0x46f44000},{0x46f46000},{0x46f48000},{0x46f4a000},{0x46f4c000},{0x46f4e000},{0x46f50000},{0x46f52000},{0x46f54000},{0x46f56000},{0x46f58000},{0x46f5a000},{0x46f5c000},{0x46f5e000},{0x46f60000},{0x46f62000},{0x46f64000},{0x46f66000},{0x46f68000},{0x46f6a000},{0x46f6c000},{0x46f6e000},{0x46f70000},{0x46f72000},{0x46f74000},{0x46f76000},{0x46f78000},{0x46f7a000},{0x46f7c000},{0x46f7e000}, +{0x46f80000},{0x46f82000},{0x46f84000},{0x46f86000},{0x46f88000},{0x46f8a000},{0x46f8c000},{0x46f8e000},{0x46f90000},{0x46f92000},{0x46f94000},{0x46f96000},{0x46f98000},{0x46f9a000},{0x46f9c000},{0x46f9e000},{0x46fa0000},{0x46fa2000},{0x46fa4000},{0x46fa6000},{0x46fa8000},{0x46faa000},{0x46fac000},{0x46fae000},{0x46fb0000},{0x46fb2000},{0x46fb4000},{0x46fb6000},{0x46fb8000},{0x46fba000},{0x46fbc000},{0x46fbe000}, +{0x46fc0000},{0x46fc2000},{0x46fc4000},{0x46fc6000},{0x46fc8000},{0x46fca000},{0x46fcc000},{0x46fce000},{0x46fd0000},{0x46fd2000},{0x46fd4000},{0x46fd6000},{0x46fd8000},{0x46fda000},{0x46fdc000},{0x46fde000},{0x46fe0000},{0x46fe2000},{0x46fe4000},{0x46fe6000},{0x46fe8000},{0x46fea000},{0x46fec000},{0x46fee000},{0x46ff0000},{0x46ff2000},{0x46ff4000},{0x46ff6000},{0x46ff8000},{0x46ffa000},{0x46ffc000},{0x46ffe000}, +{0x47000000},{0x47002000},{0x47004000},{0x47006000},{0x47008000},{0x4700a000},{0x4700c000},{0x4700e000},{0x47010000},{0x47012000},{0x47014000},{0x47016000},{0x47018000},{0x4701a000},{0x4701c000},{0x4701e000},{0x47020000},{0x47022000},{0x47024000},{0x47026000},{0x47028000},{0x4702a000},{0x4702c000},{0x4702e000},{0x47030000},{0x47032000},{0x47034000},{0x47036000},{0x47038000},{0x4703a000},{0x4703c000},{0x4703e000}, +{0x47040000},{0x47042000},{0x47044000},{0x47046000},{0x47048000},{0x4704a000},{0x4704c000},{0x4704e000},{0x47050000},{0x47052000},{0x47054000},{0x47056000},{0x47058000},{0x4705a000},{0x4705c000},{0x4705e000},{0x47060000},{0x47062000},{0x47064000},{0x47066000},{0x47068000},{0x4706a000},{0x4706c000},{0x4706e000},{0x47070000},{0x47072000},{0x47074000},{0x47076000},{0x47078000},{0x4707a000},{0x4707c000},{0x4707e000}, +{0x47080000},{0x47082000},{0x47084000},{0x47086000},{0x47088000},{0x4708a000},{0x4708c000},{0x4708e000},{0x47090000},{0x47092000},{0x47094000},{0x47096000},{0x47098000},{0x4709a000},{0x4709c000},{0x4709e000},{0x470a0000},{0x470a2000},{0x470a4000},{0x470a6000},{0x470a8000},{0x470aa000},{0x470ac000},{0x470ae000},{0x470b0000},{0x470b2000},{0x470b4000},{0x470b6000},{0x470b8000},{0x470ba000},{0x470bc000},{0x470be000}, +{0x470c0000},{0x470c2000},{0x470c4000},{0x470c6000},{0x470c8000},{0x470ca000},{0x470cc000},{0x470ce000},{0x470d0000},{0x470d2000},{0x470d4000},{0x470d6000},{0x470d8000},{0x470da000},{0x470dc000},{0x470de000},{0x470e0000},{0x470e2000},{0x470e4000},{0x470e6000},{0x470e8000},{0x470ea000},{0x470ec000},{0x470ee000},{0x470f0000},{0x470f2000},{0x470f4000},{0x470f6000},{0x470f8000},{0x470fa000},{0x470fc000},{0x470fe000}, +{0x47100000},{0x47102000},{0x47104000},{0x47106000},{0x47108000},{0x4710a000},{0x4710c000},{0x4710e000},{0x47110000},{0x47112000},{0x47114000},{0x47116000},{0x47118000},{0x4711a000},{0x4711c000},{0x4711e000},{0x47120000},{0x47122000},{0x47124000},{0x47126000},{0x47128000},{0x4712a000},{0x4712c000},{0x4712e000},{0x47130000},{0x47132000},{0x47134000},{0x47136000},{0x47138000},{0x4713a000},{0x4713c000},{0x4713e000}, +{0x47140000},{0x47142000},{0x47144000},{0x47146000},{0x47148000},{0x4714a000},{0x4714c000},{0x4714e000},{0x47150000},{0x47152000},{0x47154000},{0x47156000},{0x47158000},{0x4715a000},{0x4715c000},{0x4715e000},{0x47160000},{0x47162000},{0x47164000},{0x47166000},{0x47168000},{0x4716a000},{0x4716c000},{0x4716e000},{0x47170000},{0x47172000},{0x47174000},{0x47176000},{0x47178000},{0x4717a000},{0x4717c000},{0x4717e000}, +{0x47180000},{0x47182000},{0x47184000},{0x47186000},{0x47188000},{0x4718a000},{0x4718c000},{0x4718e000},{0x47190000},{0x47192000},{0x47194000},{0x47196000},{0x47198000},{0x4719a000},{0x4719c000},{0x4719e000},{0x471a0000},{0x471a2000},{0x471a4000},{0x471a6000},{0x471a8000},{0x471aa000},{0x471ac000},{0x471ae000},{0x471b0000},{0x471b2000},{0x471b4000},{0x471b6000},{0x471b8000},{0x471ba000},{0x471bc000},{0x471be000}, +{0x471c0000},{0x471c2000},{0x471c4000},{0x471c6000},{0x471c8000},{0x471ca000},{0x471cc000},{0x471ce000},{0x471d0000},{0x471d2000},{0x471d4000},{0x471d6000},{0x471d8000},{0x471da000},{0x471dc000},{0x471de000},{0x471e0000},{0x471e2000},{0x471e4000},{0x471e6000},{0x471e8000},{0x471ea000},{0x471ec000},{0x471ee000},{0x471f0000},{0x471f2000},{0x471f4000},{0x471f6000},{0x471f8000},{0x471fa000},{0x471fc000},{0x471fe000}, +{0x47200000},{0x47202000},{0x47204000},{0x47206000},{0x47208000},{0x4720a000},{0x4720c000},{0x4720e000},{0x47210000},{0x47212000},{0x47214000},{0x47216000},{0x47218000},{0x4721a000},{0x4721c000},{0x4721e000},{0x47220000},{0x47222000},{0x47224000},{0x47226000},{0x47228000},{0x4722a000},{0x4722c000},{0x4722e000},{0x47230000},{0x47232000},{0x47234000},{0x47236000},{0x47238000},{0x4723a000},{0x4723c000},{0x4723e000}, +{0x47240000},{0x47242000},{0x47244000},{0x47246000},{0x47248000},{0x4724a000},{0x4724c000},{0x4724e000},{0x47250000},{0x47252000},{0x47254000},{0x47256000},{0x47258000},{0x4725a000},{0x4725c000},{0x4725e000},{0x47260000},{0x47262000},{0x47264000},{0x47266000},{0x47268000},{0x4726a000},{0x4726c000},{0x4726e000},{0x47270000},{0x47272000},{0x47274000},{0x47276000},{0x47278000},{0x4727a000},{0x4727c000},{0x4727e000}, +{0x47280000},{0x47282000},{0x47284000},{0x47286000},{0x47288000},{0x4728a000},{0x4728c000},{0x4728e000},{0x47290000},{0x47292000},{0x47294000},{0x47296000},{0x47298000},{0x4729a000},{0x4729c000},{0x4729e000},{0x472a0000},{0x472a2000},{0x472a4000},{0x472a6000},{0x472a8000},{0x472aa000},{0x472ac000},{0x472ae000},{0x472b0000},{0x472b2000},{0x472b4000},{0x472b6000},{0x472b8000},{0x472ba000},{0x472bc000},{0x472be000}, +{0x472c0000},{0x472c2000},{0x472c4000},{0x472c6000},{0x472c8000},{0x472ca000},{0x472cc000},{0x472ce000},{0x472d0000},{0x472d2000},{0x472d4000},{0x472d6000},{0x472d8000},{0x472da000},{0x472dc000},{0x472de000},{0x472e0000},{0x472e2000},{0x472e4000},{0x472e6000},{0x472e8000},{0x472ea000},{0x472ec000},{0x472ee000},{0x472f0000},{0x472f2000},{0x472f4000},{0x472f6000},{0x472f8000},{0x472fa000},{0x472fc000},{0x472fe000}, +{0x47300000},{0x47302000},{0x47304000},{0x47306000},{0x47308000},{0x4730a000},{0x4730c000},{0x4730e000},{0x47310000},{0x47312000},{0x47314000},{0x47316000},{0x47318000},{0x4731a000},{0x4731c000},{0x4731e000},{0x47320000},{0x47322000},{0x47324000},{0x47326000},{0x47328000},{0x4732a000},{0x4732c000},{0x4732e000},{0x47330000},{0x47332000},{0x47334000},{0x47336000},{0x47338000},{0x4733a000},{0x4733c000},{0x4733e000}, +{0x47340000},{0x47342000},{0x47344000},{0x47346000},{0x47348000},{0x4734a000},{0x4734c000},{0x4734e000},{0x47350000},{0x47352000},{0x47354000},{0x47356000},{0x47358000},{0x4735a000},{0x4735c000},{0x4735e000},{0x47360000},{0x47362000},{0x47364000},{0x47366000},{0x47368000},{0x4736a000},{0x4736c000},{0x4736e000},{0x47370000},{0x47372000},{0x47374000},{0x47376000},{0x47378000},{0x4737a000},{0x4737c000},{0x4737e000}, +{0x47380000},{0x47382000},{0x47384000},{0x47386000},{0x47388000},{0x4738a000},{0x4738c000},{0x4738e000},{0x47390000},{0x47392000},{0x47394000},{0x47396000},{0x47398000},{0x4739a000},{0x4739c000},{0x4739e000},{0x473a0000},{0x473a2000},{0x473a4000},{0x473a6000},{0x473a8000},{0x473aa000},{0x473ac000},{0x473ae000},{0x473b0000},{0x473b2000},{0x473b4000},{0x473b6000},{0x473b8000},{0x473ba000},{0x473bc000},{0x473be000}, +{0x473c0000},{0x473c2000},{0x473c4000},{0x473c6000},{0x473c8000},{0x473ca000},{0x473cc000},{0x473ce000},{0x473d0000},{0x473d2000},{0x473d4000},{0x473d6000},{0x473d8000},{0x473da000},{0x473dc000},{0x473de000},{0x473e0000},{0x473e2000},{0x473e4000},{0x473e6000},{0x473e8000},{0x473ea000},{0x473ec000},{0x473ee000},{0x473f0000},{0x473f2000},{0x473f4000},{0x473f6000},{0x473f8000},{0x473fa000},{0x473fc000},{0x473fe000}, +{0x47400000},{0x47402000},{0x47404000},{0x47406000},{0x47408000},{0x4740a000},{0x4740c000},{0x4740e000},{0x47410000},{0x47412000},{0x47414000},{0x47416000},{0x47418000},{0x4741a000},{0x4741c000},{0x4741e000},{0x47420000},{0x47422000},{0x47424000},{0x47426000},{0x47428000},{0x4742a000},{0x4742c000},{0x4742e000},{0x47430000},{0x47432000},{0x47434000},{0x47436000},{0x47438000},{0x4743a000},{0x4743c000},{0x4743e000}, +{0x47440000},{0x47442000},{0x47444000},{0x47446000},{0x47448000},{0x4744a000},{0x4744c000},{0x4744e000},{0x47450000},{0x47452000},{0x47454000},{0x47456000},{0x47458000},{0x4745a000},{0x4745c000},{0x4745e000},{0x47460000},{0x47462000},{0x47464000},{0x47466000},{0x47468000},{0x4746a000},{0x4746c000},{0x4746e000},{0x47470000},{0x47472000},{0x47474000},{0x47476000},{0x47478000},{0x4747a000},{0x4747c000},{0x4747e000}, +{0x47480000},{0x47482000},{0x47484000},{0x47486000},{0x47488000},{0x4748a000},{0x4748c000},{0x4748e000},{0x47490000},{0x47492000},{0x47494000},{0x47496000},{0x47498000},{0x4749a000},{0x4749c000},{0x4749e000},{0x474a0000},{0x474a2000},{0x474a4000},{0x474a6000},{0x474a8000},{0x474aa000},{0x474ac000},{0x474ae000},{0x474b0000},{0x474b2000},{0x474b4000},{0x474b6000},{0x474b8000},{0x474ba000},{0x474bc000},{0x474be000}, +{0x474c0000},{0x474c2000},{0x474c4000},{0x474c6000},{0x474c8000},{0x474ca000},{0x474cc000},{0x474ce000},{0x474d0000},{0x474d2000},{0x474d4000},{0x474d6000},{0x474d8000},{0x474da000},{0x474dc000},{0x474de000},{0x474e0000},{0x474e2000},{0x474e4000},{0x474e6000},{0x474e8000},{0x474ea000},{0x474ec000},{0x474ee000},{0x474f0000},{0x474f2000},{0x474f4000},{0x474f6000},{0x474f8000},{0x474fa000},{0x474fc000},{0x474fe000}, +{0x47500000},{0x47502000},{0x47504000},{0x47506000},{0x47508000},{0x4750a000},{0x4750c000},{0x4750e000},{0x47510000},{0x47512000},{0x47514000},{0x47516000},{0x47518000},{0x4751a000},{0x4751c000},{0x4751e000},{0x47520000},{0x47522000},{0x47524000},{0x47526000},{0x47528000},{0x4752a000},{0x4752c000},{0x4752e000},{0x47530000},{0x47532000},{0x47534000},{0x47536000},{0x47538000},{0x4753a000},{0x4753c000},{0x4753e000}, +{0x47540000},{0x47542000},{0x47544000},{0x47546000},{0x47548000},{0x4754a000},{0x4754c000},{0x4754e000},{0x47550000},{0x47552000},{0x47554000},{0x47556000},{0x47558000},{0x4755a000},{0x4755c000},{0x4755e000},{0x47560000},{0x47562000},{0x47564000},{0x47566000},{0x47568000},{0x4756a000},{0x4756c000},{0x4756e000},{0x47570000},{0x47572000},{0x47574000},{0x47576000},{0x47578000},{0x4757a000},{0x4757c000},{0x4757e000}, +{0x47580000},{0x47582000},{0x47584000},{0x47586000},{0x47588000},{0x4758a000},{0x4758c000},{0x4758e000},{0x47590000},{0x47592000},{0x47594000},{0x47596000},{0x47598000},{0x4759a000},{0x4759c000},{0x4759e000},{0x475a0000},{0x475a2000},{0x475a4000},{0x475a6000},{0x475a8000},{0x475aa000},{0x475ac000},{0x475ae000},{0x475b0000},{0x475b2000},{0x475b4000},{0x475b6000},{0x475b8000},{0x475ba000},{0x475bc000},{0x475be000}, +{0x475c0000},{0x475c2000},{0x475c4000},{0x475c6000},{0x475c8000},{0x475ca000},{0x475cc000},{0x475ce000},{0x475d0000},{0x475d2000},{0x475d4000},{0x475d6000},{0x475d8000},{0x475da000},{0x475dc000},{0x475de000},{0x475e0000},{0x475e2000},{0x475e4000},{0x475e6000},{0x475e8000},{0x475ea000},{0x475ec000},{0x475ee000},{0x475f0000},{0x475f2000},{0x475f4000},{0x475f6000},{0x475f8000},{0x475fa000},{0x475fc000},{0x475fe000}, +{0x47600000},{0x47602000},{0x47604000},{0x47606000},{0x47608000},{0x4760a000},{0x4760c000},{0x4760e000},{0x47610000},{0x47612000},{0x47614000},{0x47616000},{0x47618000},{0x4761a000},{0x4761c000},{0x4761e000},{0x47620000},{0x47622000},{0x47624000},{0x47626000},{0x47628000},{0x4762a000},{0x4762c000},{0x4762e000},{0x47630000},{0x47632000},{0x47634000},{0x47636000},{0x47638000},{0x4763a000},{0x4763c000},{0x4763e000}, +{0x47640000},{0x47642000},{0x47644000},{0x47646000},{0x47648000},{0x4764a000},{0x4764c000},{0x4764e000},{0x47650000},{0x47652000},{0x47654000},{0x47656000},{0x47658000},{0x4765a000},{0x4765c000},{0x4765e000},{0x47660000},{0x47662000},{0x47664000},{0x47666000},{0x47668000},{0x4766a000},{0x4766c000},{0x4766e000},{0x47670000},{0x47672000},{0x47674000},{0x47676000},{0x47678000},{0x4767a000},{0x4767c000},{0x4767e000}, +{0x47680000},{0x47682000},{0x47684000},{0x47686000},{0x47688000},{0x4768a000},{0x4768c000},{0x4768e000},{0x47690000},{0x47692000},{0x47694000},{0x47696000},{0x47698000},{0x4769a000},{0x4769c000},{0x4769e000},{0x476a0000},{0x476a2000},{0x476a4000},{0x476a6000},{0x476a8000},{0x476aa000},{0x476ac000},{0x476ae000},{0x476b0000},{0x476b2000},{0x476b4000},{0x476b6000},{0x476b8000},{0x476ba000},{0x476bc000},{0x476be000}, +{0x476c0000},{0x476c2000},{0x476c4000},{0x476c6000},{0x476c8000},{0x476ca000},{0x476cc000},{0x476ce000},{0x476d0000},{0x476d2000},{0x476d4000},{0x476d6000},{0x476d8000},{0x476da000},{0x476dc000},{0x476de000},{0x476e0000},{0x476e2000},{0x476e4000},{0x476e6000},{0x476e8000},{0x476ea000},{0x476ec000},{0x476ee000},{0x476f0000},{0x476f2000},{0x476f4000},{0x476f6000},{0x476f8000},{0x476fa000},{0x476fc000},{0x476fe000}, +{0x47700000},{0x47702000},{0x47704000},{0x47706000},{0x47708000},{0x4770a000},{0x4770c000},{0x4770e000},{0x47710000},{0x47712000},{0x47714000},{0x47716000},{0x47718000},{0x4771a000},{0x4771c000},{0x4771e000},{0x47720000},{0x47722000},{0x47724000},{0x47726000},{0x47728000},{0x4772a000},{0x4772c000},{0x4772e000},{0x47730000},{0x47732000},{0x47734000},{0x47736000},{0x47738000},{0x4773a000},{0x4773c000},{0x4773e000}, +{0x47740000},{0x47742000},{0x47744000},{0x47746000},{0x47748000},{0x4774a000},{0x4774c000},{0x4774e000},{0x47750000},{0x47752000},{0x47754000},{0x47756000},{0x47758000},{0x4775a000},{0x4775c000},{0x4775e000},{0x47760000},{0x47762000},{0x47764000},{0x47766000},{0x47768000},{0x4776a000},{0x4776c000},{0x4776e000},{0x47770000},{0x47772000},{0x47774000},{0x47776000},{0x47778000},{0x4777a000},{0x4777c000},{0x4777e000}, +{0x47780000},{0x47782000},{0x47784000},{0x47786000},{0x47788000},{0x4778a000},{0x4778c000},{0x4778e000},{0x47790000},{0x47792000},{0x47794000},{0x47796000},{0x47798000},{0x4779a000},{0x4779c000},{0x4779e000},{0x477a0000},{0x477a2000},{0x477a4000},{0x477a6000},{0x477a8000},{0x477aa000},{0x477ac000},{0x477ae000},{0x477b0000},{0x477b2000},{0x477b4000},{0x477b6000},{0x477b8000},{0x477ba000},{0x477bc000},{0x477be000}, +{0x477c0000},{0x477c2000},{0x477c4000},{0x477c6000},{0x477c8000},{0x477ca000},{0x477cc000},{0x477ce000},{0x477d0000},{0x477d2000},{0x477d4000},{0x477d6000},{0x477d8000},{0x477da000},{0x477dc000},{0x477de000},{0x477e0000},{0x477e2000},{0x477e4000},{0x477e6000},{0x477e8000},{0x477ea000},{0x477ec000},{0x477ee000},{0x477f0000},{0x477f2000},{0x477f4000},{0x477f6000},{0x477f8000},{0x477fa000},{0x477fc000},{0x477fe000}, +{0x7f800000},{0x7fc02000},{0x7fc04000},{0x7fc06000},{0x7fc08000},{0x7fc0a000},{0x7fc0c000},{0x7fc0e000},{0x7fc10000},{0x7fc12000},{0x7fc14000},{0x7fc16000},{0x7fc18000},{0x7fc1a000},{0x7fc1c000},{0x7fc1e000},{0x7fc20000},{0x7fc22000},{0x7fc24000},{0x7fc26000},{0x7fc28000},{0x7fc2a000},{0x7fc2c000},{0x7fc2e000},{0x7fc30000},{0x7fc32000},{0x7fc34000},{0x7fc36000},{0x7fc38000},{0x7fc3a000},{0x7fc3c000},{0x7fc3e000}, +{0x7fc40000},{0x7fc42000},{0x7fc44000},{0x7fc46000},{0x7fc48000},{0x7fc4a000},{0x7fc4c000},{0x7fc4e000},{0x7fc50000},{0x7fc52000},{0x7fc54000},{0x7fc56000},{0x7fc58000},{0x7fc5a000},{0x7fc5c000},{0x7fc5e000},{0x7fc60000},{0x7fc62000},{0x7fc64000},{0x7fc66000},{0x7fc68000},{0x7fc6a000},{0x7fc6c000},{0x7fc6e000},{0x7fc70000},{0x7fc72000},{0x7fc74000},{0x7fc76000},{0x7fc78000},{0x7fc7a000},{0x7fc7c000},{0x7fc7e000}, +{0x7fc80000},{0x7fc82000},{0x7fc84000},{0x7fc86000},{0x7fc88000},{0x7fc8a000},{0x7fc8c000},{0x7fc8e000},{0x7fc90000},{0x7fc92000},{0x7fc94000},{0x7fc96000},{0x7fc98000},{0x7fc9a000},{0x7fc9c000},{0x7fc9e000},{0x7fca0000},{0x7fca2000},{0x7fca4000},{0x7fca6000},{0x7fca8000},{0x7fcaa000},{0x7fcac000},{0x7fcae000},{0x7fcb0000},{0x7fcb2000},{0x7fcb4000},{0x7fcb6000},{0x7fcb8000},{0x7fcba000},{0x7fcbc000},{0x7fcbe000}, +{0x7fcc0000},{0x7fcc2000},{0x7fcc4000},{0x7fcc6000},{0x7fcc8000},{0x7fcca000},{0x7fccc000},{0x7fcce000},{0x7fcd0000},{0x7fcd2000},{0x7fcd4000},{0x7fcd6000},{0x7fcd8000},{0x7fcda000},{0x7fcdc000},{0x7fcde000},{0x7fce0000},{0x7fce2000},{0x7fce4000},{0x7fce6000},{0x7fce8000},{0x7fcea000},{0x7fcec000},{0x7fcee000},{0x7fcf0000},{0x7fcf2000},{0x7fcf4000},{0x7fcf6000},{0x7fcf8000},{0x7fcfa000},{0x7fcfc000},{0x7fcfe000}, +{0x7fd00000},{0x7fd02000},{0x7fd04000},{0x7fd06000},{0x7fd08000},{0x7fd0a000},{0x7fd0c000},{0x7fd0e000},{0x7fd10000},{0x7fd12000},{0x7fd14000},{0x7fd16000},{0x7fd18000},{0x7fd1a000},{0x7fd1c000},{0x7fd1e000},{0x7fd20000},{0x7fd22000},{0x7fd24000},{0x7fd26000},{0x7fd28000},{0x7fd2a000},{0x7fd2c000},{0x7fd2e000},{0x7fd30000},{0x7fd32000},{0x7fd34000},{0x7fd36000},{0x7fd38000},{0x7fd3a000},{0x7fd3c000},{0x7fd3e000}, +{0x7fd40000},{0x7fd42000},{0x7fd44000},{0x7fd46000},{0x7fd48000},{0x7fd4a000},{0x7fd4c000},{0x7fd4e000},{0x7fd50000},{0x7fd52000},{0x7fd54000},{0x7fd56000},{0x7fd58000},{0x7fd5a000},{0x7fd5c000},{0x7fd5e000},{0x7fd60000},{0x7fd62000},{0x7fd64000},{0x7fd66000},{0x7fd68000},{0x7fd6a000},{0x7fd6c000},{0x7fd6e000},{0x7fd70000},{0x7fd72000},{0x7fd74000},{0x7fd76000},{0x7fd78000},{0x7fd7a000},{0x7fd7c000},{0x7fd7e000}, +{0x7fd80000},{0x7fd82000},{0x7fd84000},{0x7fd86000},{0x7fd88000},{0x7fd8a000},{0x7fd8c000},{0x7fd8e000},{0x7fd90000},{0x7fd92000},{0x7fd94000},{0x7fd96000},{0x7fd98000},{0x7fd9a000},{0x7fd9c000},{0x7fd9e000},{0x7fda0000},{0x7fda2000},{0x7fda4000},{0x7fda6000},{0x7fda8000},{0x7fdaa000},{0x7fdac000},{0x7fdae000},{0x7fdb0000},{0x7fdb2000},{0x7fdb4000},{0x7fdb6000},{0x7fdb8000},{0x7fdba000},{0x7fdbc000},{0x7fdbe000}, +{0x7fdc0000},{0x7fdc2000},{0x7fdc4000},{0x7fdc6000},{0x7fdc8000},{0x7fdca000},{0x7fdcc000},{0x7fdce000},{0x7fdd0000},{0x7fdd2000},{0x7fdd4000},{0x7fdd6000},{0x7fdd8000},{0x7fdda000},{0x7fddc000},{0x7fdde000},{0x7fde0000},{0x7fde2000},{0x7fde4000},{0x7fde6000},{0x7fde8000},{0x7fdea000},{0x7fdec000},{0x7fdee000},{0x7fdf0000},{0x7fdf2000},{0x7fdf4000},{0x7fdf6000},{0x7fdf8000},{0x7fdfa000},{0x7fdfc000},{0x7fdfe000}, +{0x7fe00000},{0x7fe02000},{0x7fe04000},{0x7fe06000},{0x7fe08000},{0x7fe0a000},{0x7fe0c000},{0x7fe0e000},{0x7fe10000},{0x7fe12000},{0x7fe14000},{0x7fe16000},{0x7fe18000},{0x7fe1a000},{0x7fe1c000},{0x7fe1e000},{0x7fe20000},{0x7fe22000},{0x7fe24000},{0x7fe26000},{0x7fe28000},{0x7fe2a000},{0x7fe2c000},{0x7fe2e000},{0x7fe30000},{0x7fe32000},{0x7fe34000},{0x7fe36000},{0x7fe38000},{0x7fe3a000},{0x7fe3c000},{0x7fe3e000}, +{0x7fe40000},{0x7fe42000},{0x7fe44000},{0x7fe46000},{0x7fe48000},{0x7fe4a000},{0x7fe4c000},{0x7fe4e000},{0x7fe50000},{0x7fe52000},{0x7fe54000},{0x7fe56000},{0x7fe58000},{0x7fe5a000},{0x7fe5c000},{0x7fe5e000},{0x7fe60000},{0x7fe62000},{0x7fe64000},{0x7fe66000},{0x7fe68000},{0x7fe6a000},{0x7fe6c000},{0x7fe6e000},{0x7fe70000},{0x7fe72000},{0x7fe74000},{0x7fe76000},{0x7fe78000},{0x7fe7a000},{0x7fe7c000},{0x7fe7e000}, +{0x7fe80000},{0x7fe82000},{0x7fe84000},{0x7fe86000},{0x7fe88000},{0x7fe8a000},{0x7fe8c000},{0x7fe8e000},{0x7fe90000},{0x7fe92000},{0x7fe94000},{0x7fe96000},{0x7fe98000},{0x7fe9a000},{0x7fe9c000},{0x7fe9e000},{0x7fea0000},{0x7fea2000},{0x7fea4000},{0x7fea6000},{0x7fea8000},{0x7feaa000},{0x7feac000},{0x7feae000},{0x7feb0000},{0x7feb2000},{0x7feb4000},{0x7feb6000},{0x7feb8000},{0x7feba000},{0x7febc000},{0x7febe000}, +{0x7fec0000},{0x7fec2000},{0x7fec4000},{0x7fec6000},{0x7fec8000},{0x7feca000},{0x7fecc000},{0x7fece000},{0x7fed0000},{0x7fed2000},{0x7fed4000},{0x7fed6000},{0x7fed8000},{0x7feda000},{0x7fedc000},{0x7fede000},{0x7fee0000},{0x7fee2000},{0x7fee4000},{0x7fee6000},{0x7fee8000},{0x7feea000},{0x7feec000},{0x7feee000},{0x7fef0000},{0x7fef2000},{0x7fef4000},{0x7fef6000},{0x7fef8000},{0x7fefa000},{0x7fefc000},{0x7fefe000}, +{0x7ff00000},{0x7ff02000},{0x7ff04000},{0x7ff06000},{0x7ff08000},{0x7ff0a000},{0x7ff0c000},{0x7ff0e000},{0x7ff10000},{0x7ff12000},{0x7ff14000},{0x7ff16000},{0x7ff18000},{0x7ff1a000},{0x7ff1c000},{0x7ff1e000},{0x7ff20000},{0x7ff22000},{0x7ff24000},{0x7ff26000},{0x7ff28000},{0x7ff2a000},{0x7ff2c000},{0x7ff2e000},{0x7ff30000},{0x7ff32000},{0x7ff34000},{0x7ff36000},{0x7ff38000},{0x7ff3a000},{0x7ff3c000},{0x7ff3e000}, +{0x7ff40000},{0x7ff42000},{0x7ff44000},{0x7ff46000},{0x7ff48000},{0x7ff4a000},{0x7ff4c000},{0x7ff4e000},{0x7ff50000},{0x7ff52000},{0x7ff54000},{0x7ff56000},{0x7ff58000},{0x7ff5a000},{0x7ff5c000},{0x7ff5e000},{0x7ff60000},{0x7ff62000},{0x7ff64000},{0x7ff66000},{0x7ff68000},{0x7ff6a000},{0x7ff6c000},{0x7ff6e000},{0x7ff70000},{0x7ff72000},{0x7ff74000},{0x7ff76000},{0x7ff78000},{0x7ff7a000},{0x7ff7c000},{0x7ff7e000}, +{0x7ff80000},{0x7ff82000},{0x7ff84000},{0x7ff86000},{0x7ff88000},{0x7ff8a000},{0x7ff8c000},{0x7ff8e000},{0x7ff90000},{0x7ff92000},{0x7ff94000},{0x7ff96000},{0x7ff98000},{0x7ff9a000},{0x7ff9c000},{0x7ff9e000},{0x7ffa0000},{0x7ffa2000},{0x7ffa4000},{0x7ffa6000},{0x7ffa8000},{0x7ffaa000},{0x7ffac000},{0x7ffae000},{0x7ffb0000},{0x7ffb2000},{0x7ffb4000},{0x7ffb6000},{0x7ffb8000},{0x7ffba000},{0x7ffbc000},{0x7ffbe000}, +{0x7ffc0000},{0x7ffc2000},{0x7ffc4000},{0x7ffc6000},{0x7ffc8000},{0x7ffca000},{0x7ffcc000},{0x7ffce000},{0x7ffd0000},{0x7ffd2000},{0x7ffd4000},{0x7ffd6000},{0x7ffd8000},{0x7ffda000},{0x7ffdc000},{0x7ffde000},{0x7ffe0000},{0x7ffe2000},{0x7ffe4000},{0x7ffe6000},{0x7ffe8000},{0x7ffea000},{0x7ffec000},{0x7ffee000},{0x7fff0000},{0x7fff2000},{0x7fff4000},{0x7fff6000},{0x7fff8000},{0x7fffa000},{0x7fffc000},{0x7fffe000}, +{0x7fc00000},{0x7fc02000},{0x7fc04000},{0x7fc06000},{0x7fc08000},{0x7fc0a000},{0x7fc0c000},{0x7fc0e000},{0x7fc10000},{0x7fc12000},{0x7fc14000},{0x7fc16000},{0x7fc18000},{0x7fc1a000},{0x7fc1c000},{0x7fc1e000},{0x7fc20000},{0x7fc22000},{0x7fc24000},{0x7fc26000},{0x7fc28000},{0x7fc2a000},{0x7fc2c000},{0x7fc2e000},{0x7fc30000},{0x7fc32000},{0x7fc34000},{0x7fc36000},{0x7fc38000},{0x7fc3a000},{0x7fc3c000},{0x7fc3e000}, +{0x7fc40000},{0x7fc42000},{0x7fc44000},{0x7fc46000},{0x7fc48000},{0x7fc4a000},{0x7fc4c000},{0x7fc4e000},{0x7fc50000},{0x7fc52000},{0x7fc54000},{0x7fc56000},{0x7fc58000},{0x7fc5a000},{0x7fc5c000},{0x7fc5e000},{0x7fc60000},{0x7fc62000},{0x7fc64000},{0x7fc66000},{0x7fc68000},{0x7fc6a000},{0x7fc6c000},{0x7fc6e000},{0x7fc70000},{0x7fc72000},{0x7fc74000},{0x7fc76000},{0x7fc78000},{0x7fc7a000},{0x7fc7c000},{0x7fc7e000}, +{0x7fc80000},{0x7fc82000},{0x7fc84000},{0x7fc86000},{0x7fc88000},{0x7fc8a000},{0x7fc8c000},{0x7fc8e000},{0x7fc90000},{0x7fc92000},{0x7fc94000},{0x7fc96000},{0x7fc98000},{0x7fc9a000},{0x7fc9c000},{0x7fc9e000},{0x7fca0000},{0x7fca2000},{0x7fca4000},{0x7fca6000},{0x7fca8000},{0x7fcaa000},{0x7fcac000},{0x7fcae000},{0x7fcb0000},{0x7fcb2000},{0x7fcb4000},{0x7fcb6000},{0x7fcb8000},{0x7fcba000},{0x7fcbc000},{0x7fcbe000}, +{0x7fcc0000},{0x7fcc2000},{0x7fcc4000},{0x7fcc6000},{0x7fcc8000},{0x7fcca000},{0x7fccc000},{0x7fcce000},{0x7fcd0000},{0x7fcd2000},{0x7fcd4000},{0x7fcd6000},{0x7fcd8000},{0x7fcda000},{0x7fcdc000},{0x7fcde000},{0x7fce0000},{0x7fce2000},{0x7fce4000},{0x7fce6000},{0x7fce8000},{0x7fcea000},{0x7fcec000},{0x7fcee000},{0x7fcf0000},{0x7fcf2000},{0x7fcf4000},{0x7fcf6000},{0x7fcf8000},{0x7fcfa000},{0x7fcfc000},{0x7fcfe000}, +{0x7fd00000},{0x7fd02000},{0x7fd04000},{0x7fd06000},{0x7fd08000},{0x7fd0a000},{0x7fd0c000},{0x7fd0e000},{0x7fd10000},{0x7fd12000},{0x7fd14000},{0x7fd16000},{0x7fd18000},{0x7fd1a000},{0x7fd1c000},{0x7fd1e000},{0x7fd20000},{0x7fd22000},{0x7fd24000},{0x7fd26000},{0x7fd28000},{0x7fd2a000},{0x7fd2c000},{0x7fd2e000},{0x7fd30000},{0x7fd32000},{0x7fd34000},{0x7fd36000},{0x7fd38000},{0x7fd3a000},{0x7fd3c000},{0x7fd3e000}, +{0x7fd40000},{0x7fd42000},{0x7fd44000},{0x7fd46000},{0x7fd48000},{0x7fd4a000},{0x7fd4c000},{0x7fd4e000},{0x7fd50000},{0x7fd52000},{0x7fd54000},{0x7fd56000},{0x7fd58000},{0x7fd5a000},{0x7fd5c000},{0x7fd5e000},{0x7fd60000},{0x7fd62000},{0x7fd64000},{0x7fd66000},{0x7fd68000},{0x7fd6a000},{0x7fd6c000},{0x7fd6e000},{0x7fd70000},{0x7fd72000},{0x7fd74000},{0x7fd76000},{0x7fd78000},{0x7fd7a000},{0x7fd7c000},{0x7fd7e000}, +{0x7fd80000},{0x7fd82000},{0x7fd84000},{0x7fd86000},{0x7fd88000},{0x7fd8a000},{0x7fd8c000},{0x7fd8e000},{0x7fd90000},{0x7fd92000},{0x7fd94000},{0x7fd96000},{0x7fd98000},{0x7fd9a000},{0x7fd9c000},{0x7fd9e000},{0x7fda0000},{0x7fda2000},{0x7fda4000},{0x7fda6000},{0x7fda8000},{0x7fdaa000},{0x7fdac000},{0x7fdae000},{0x7fdb0000},{0x7fdb2000},{0x7fdb4000},{0x7fdb6000},{0x7fdb8000},{0x7fdba000},{0x7fdbc000},{0x7fdbe000}, +{0x7fdc0000},{0x7fdc2000},{0x7fdc4000},{0x7fdc6000},{0x7fdc8000},{0x7fdca000},{0x7fdcc000},{0x7fdce000},{0x7fdd0000},{0x7fdd2000},{0x7fdd4000},{0x7fdd6000},{0x7fdd8000},{0x7fdda000},{0x7fddc000},{0x7fdde000},{0x7fde0000},{0x7fde2000},{0x7fde4000},{0x7fde6000},{0x7fde8000},{0x7fdea000},{0x7fdec000},{0x7fdee000},{0x7fdf0000},{0x7fdf2000},{0x7fdf4000},{0x7fdf6000},{0x7fdf8000},{0x7fdfa000},{0x7fdfc000},{0x7fdfe000}, +{0x7fe00000},{0x7fe02000},{0x7fe04000},{0x7fe06000},{0x7fe08000},{0x7fe0a000},{0x7fe0c000},{0x7fe0e000},{0x7fe10000},{0x7fe12000},{0x7fe14000},{0x7fe16000},{0x7fe18000},{0x7fe1a000},{0x7fe1c000},{0x7fe1e000},{0x7fe20000},{0x7fe22000},{0x7fe24000},{0x7fe26000},{0x7fe28000},{0x7fe2a000},{0x7fe2c000},{0x7fe2e000},{0x7fe30000},{0x7fe32000},{0x7fe34000},{0x7fe36000},{0x7fe38000},{0x7fe3a000},{0x7fe3c000},{0x7fe3e000}, +{0x7fe40000},{0x7fe42000},{0x7fe44000},{0x7fe46000},{0x7fe48000},{0x7fe4a000},{0x7fe4c000},{0x7fe4e000},{0x7fe50000},{0x7fe52000},{0x7fe54000},{0x7fe56000},{0x7fe58000},{0x7fe5a000},{0x7fe5c000},{0x7fe5e000},{0x7fe60000},{0x7fe62000},{0x7fe64000},{0x7fe66000},{0x7fe68000},{0x7fe6a000},{0x7fe6c000},{0x7fe6e000},{0x7fe70000},{0x7fe72000},{0x7fe74000},{0x7fe76000},{0x7fe78000},{0x7fe7a000},{0x7fe7c000},{0x7fe7e000}, +{0x7fe80000},{0x7fe82000},{0x7fe84000},{0x7fe86000},{0x7fe88000},{0x7fe8a000},{0x7fe8c000},{0x7fe8e000},{0x7fe90000},{0x7fe92000},{0x7fe94000},{0x7fe96000},{0x7fe98000},{0x7fe9a000},{0x7fe9c000},{0x7fe9e000},{0x7fea0000},{0x7fea2000},{0x7fea4000},{0x7fea6000},{0x7fea8000},{0x7feaa000},{0x7feac000},{0x7feae000},{0x7feb0000},{0x7feb2000},{0x7feb4000},{0x7feb6000},{0x7feb8000},{0x7feba000},{0x7febc000},{0x7febe000}, +{0x7fec0000},{0x7fec2000},{0x7fec4000},{0x7fec6000},{0x7fec8000},{0x7feca000},{0x7fecc000},{0x7fece000},{0x7fed0000},{0x7fed2000},{0x7fed4000},{0x7fed6000},{0x7fed8000},{0x7feda000},{0x7fedc000},{0x7fede000},{0x7fee0000},{0x7fee2000},{0x7fee4000},{0x7fee6000},{0x7fee8000},{0x7feea000},{0x7feec000},{0x7feee000},{0x7fef0000},{0x7fef2000},{0x7fef4000},{0x7fef6000},{0x7fef8000},{0x7fefa000},{0x7fefc000},{0x7fefe000}, +{0x7ff00000},{0x7ff02000},{0x7ff04000},{0x7ff06000},{0x7ff08000},{0x7ff0a000},{0x7ff0c000},{0x7ff0e000},{0x7ff10000},{0x7ff12000},{0x7ff14000},{0x7ff16000},{0x7ff18000},{0x7ff1a000},{0x7ff1c000},{0x7ff1e000},{0x7ff20000},{0x7ff22000},{0x7ff24000},{0x7ff26000},{0x7ff28000},{0x7ff2a000},{0x7ff2c000},{0x7ff2e000},{0x7ff30000},{0x7ff32000},{0x7ff34000},{0x7ff36000},{0x7ff38000},{0x7ff3a000},{0x7ff3c000},{0x7ff3e000}, +{0x7ff40000},{0x7ff42000},{0x7ff44000},{0x7ff46000},{0x7ff48000},{0x7ff4a000},{0x7ff4c000},{0x7ff4e000},{0x7ff50000},{0x7ff52000},{0x7ff54000},{0x7ff56000},{0x7ff58000},{0x7ff5a000},{0x7ff5c000},{0x7ff5e000},{0x7ff60000},{0x7ff62000},{0x7ff64000},{0x7ff66000},{0x7ff68000},{0x7ff6a000},{0x7ff6c000},{0x7ff6e000},{0x7ff70000},{0x7ff72000},{0x7ff74000},{0x7ff76000},{0x7ff78000},{0x7ff7a000},{0x7ff7c000},{0x7ff7e000}, +{0x7ff80000},{0x7ff82000},{0x7ff84000},{0x7ff86000},{0x7ff88000},{0x7ff8a000},{0x7ff8c000},{0x7ff8e000},{0x7ff90000},{0x7ff92000},{0x7ff94000},{0x7ff96000},{0x7ff98000},{0x7ff9a000},{0x7ff9c000},{0x7ff9e000},{0x7ffa0000},{0x7ffa2000},{0x7ffa4000},{0x7ffa6000},{0x7ffa8000},{0x7ffaa000},{0x7ffac000},{0x7ffae000},{0x7ffb0000},{0x7ffb2000},{0x7ffb4000},{0x7ffb6000},{0x7ffb8000},{0x7ffba000},{0x7ffbc000},{0x7ffbe000}, +{0x7ffc0000},{0x7ffc2000},{0x7ffc4000},{0x7ffc6000},{0x7ffc8000},{0x7ffca000},{0x7ffcc000},{0x7ffce000},{0x7ffd0000},{0x7ffd2000},{0x7ffd4000},{0x7ffd6000},{0x7ffd8000},{0x7ffda000},{0x7ffdc000},{0x7ffde000},{0x7ffe0000},{0x7ffe2000},{0x7ffe4000},{0x7ffe6000},{0x7ffe8000},{0x7ffea000},{0x7ffec000},{0x7ffee000},{0x7fff0000},{0x7fff2000},{0x7fff4000},{0x7fff6000},{0x7fff8000},{0x7fffa000},{0x7fffc000},{0x7fffe000}, +{0x80000000},{0xb3800000},{0xb4000000},{0xb4400000},{0xb4800000},{0xb4a00000},{0xb4c00000},{0xb4e00000},{0xb5000000},{0xb5100000},{0xb5200000},{0xb5300000},{0xb5400000},{0xb5500000},{0xb5600000},{0xb5700000},{0xb5800000},{0xb5880000},{0xb5900000},{0xb5980000},{0xb5a00000},{0xb5a80000},{0xb5b00000},{0xb5b80000},{0xb5c00000},{0xb5c80000},{0xb5d00000},{0xb5d80000},{0xb5e00000},{0xb5e80000},{0xb5f00000},{0xb5f80000}, +{0xb6000000},{0xb6040000},{0xb6080000},{0xb60c0000},{0xb6100000},{0xb6140000},{0xb6180000},{0xb61c0000},{0xb6200000},{0xb6240000},{0xb6280000},{0xb62c0000},{0xb6300000},{0xb6340000},{0xb6380000},{0xb63c0000},{0xb6400000},{0xb6440000},{0xb6480000},{0xb64c0000},{0xb6500000},{0xb6540000},{0xb6580000},{0xb65c0000},{0xb6600000},{0xb6640000},{0xb6680000},{0xb66c0000},{0xb6700000},{0xb6740000},{0xb6780000},{0xb67c0000}, +{0xb6800000},{0xb6820000},{0xb6840000},{0xb6860000},{0xb6880000},{0xb68a0000},{0xb68c0000},{0xb68e0000},{0xb6900000},{0xb6920000},{0xb6940000},{0xb6960000},{0xb6980000},{0xb69a0000},{0xb69c0000},{0xb69e0000},{0xb6a00000},{0xb6a20000},{0xb6a40000},{0xb6a60000},{0xb6a80000},{0xb6aa0000},{0xb6ac0000},{0xb6ae0000},{0xb6b00000},{0xb6b20000},{0xb6b40000},{0xb6b60000},{0xb6b80000},{0xb6ba0000},{0xb6bc0000},{0xb6be0000}, +{0xb6c00000},{0xb6c20000},{0xb6c40000},{0xb6c60000},{0xb6c80000},{0xb6ca0000},{0xb6cc0000},{0xb6ce0000},{0xb6d00000},{0xb6d20000},{0xb6d40000},{0xb6d60000},{0xb6d80000},{0xb6da0000},{0xb6dc0000},{0xb6de0000},{0xb6e00000},{0xb6e20000},{0xb6e40000},{0xb6e60000},{0xb6e80000},{0xb6ea0000},{0xb6ec0000},{0xb6ee0000},{0xb6f00000},{0xb6f20000},{0xb6f40000},{0xb6f60000},{0xb6f80000},{0xb6fa0000},{0xb6fc0000},{0xb6fe0000}, +{0xb7000000},{0xb7010000},{0xb7020000},{0xb7030000},{0xb7040000},{0xb7050000},{0xb7060000},{0xb7070000},{0xb7080000},{0xb7090000},{0xb70a0000},{0xb70b0000},{0xb70c0000},{0xb70d0000},{0xb70e0000},{0xb70f0000},{0xb7100000},{0xb7110000},{0xb7120000},{0xb7130000},{0xb7140000},{0xb7150000},{0xb7160000},{0xb7170000},{0xb7180000},{0xb7190000},{0xb71a0000},{0xb71b0000},{0xb71c0000},{0xb71d0000},{0xb71e0000},{0xb71f0000}, +{0xb7200000},{0xb7210000},{0xb7220000},{0xb7230000},{0xb7240000},{0xb7250000},{0xb7260000},{0xb7270000},{0xb7280000},{0xb7290000},{0xb72a0000},{0xb72b0000},{0xb72c0000},{0xb72d0000},{0xb72e0000},{0xb72f0000},{0xb7300000},{0xb7310000},{0xb7320000},{0xb7330000},{0xb7340000},{0xb7350000},{0xb7360000},{0xb7370000},{0xb7380000},{0xb7390000},{0xb73a0000},{0xb73b0000},{0xb73c0000},{0xb73d0000},{0xb73e0000},{0xb73f0000}, +{0xb7400000},{0xb7410000},{0xb7420000},{0xb7430000},{0xb7440000},{0xb7450000},{0xb7460000},{0xb7470000},{0xb7480000},{0xb7490000},{0xb74a0000},{0xb74b0000},{0xb74c0000},{0xb74d0000},{0xb74e0000},{0xb74f0000},{0xb7500000},{0xb7510000},{0xb7520000},{0xb7530000},{0xb7540000},{0xb7550000},{0xb7560000},{0xb7570000},{0xb7580000},{0xb7590000},{0xb75a0000},{0xb75b0000},{0xb75c0000},{0xb75d0000},{0xb75e0000},{0xb75f0000}, +{0xb7600000},{0xb7610000},{0xb7620000},{0xb7630000},{0xb7640000},{0xb7650000},{0xb7660000},{0xb7670000},{0xb7680000},{0xb7690000},{0xb76a0000},{0xb76b0000},{0xb76c0000},{0xb76d0000},{0xb76e0000},{0xb76f0000},{0xb7700000},{0xb7710000},{0xb7720000},{0xb7730000},{0xb7740000},{0xb7750000},{0xb7760000},{0xb7770000},{0xb7780000},{0xb7790000},{0xb77a0000},{0xb77b0000},{0xb77c0000},{0xb77d0000},{0xb77e0000},{0xb77f0000}, +{0xb7800000},{0xb7808000},{0xb7810000},{0xb7818000},{0xb7820000},{0xb7828000},{0xb7830000},{0xb7838000},{0xb7840000},{0xb7848000},{0xb7850000},{0xb7858000},{0xb7860000},{0xb7868000},{0xb7870000},{0xb7878000},{0xb7880000},{0xb7888000},{0xb7890000},{0xb7898000},{0xb78a0000},{0xb78a8000},{0xb78b0000},{0xb78b8000},{0xb78c0000},{0xb78c8000},{0xb78d0000},{0xb78d8000},{0xb78e0000},{0xb78e8000},{0xb78f0000},{0xb78f8000}, +{0xb7900000},{0xb7908000},{0xb7910000},{0xb7918000},{0xb7920000},{0xb7928000},{0xb7930000},{0xb7938000},{0xb7940000},{0xb7948000},{0xb7950000},{0xb7958000},{0xb7960000},{0xb7968000},{0xb7970000},{0xb7978000},{0xb7980000},{0xb7988000},{0xb7990000},{0xb7998000},{0xb79a0000},{0xb79a8000},{0xb79b0000},{0xb79b8000},{0xb79c0000},{0xb79c8000},{0xb79d0000},{0xb79d8000},{0xb79e0000},{0xb79e8000},{0xb79f0000},{0xb79f8000}, +{0xb7a00000},{0xb7a08000},{0xb7a10000},{0xb7a18000},{0xb7a20000},{0xb7a28000},{0xb7a30000},{0xb7a38000},{0xb7a40000},{0xb7a48000},{0xb7a50000},{0xb7a58000},{0xb7a60000},{0xb7a68000},{0xb7a70000},{0xb7a78000},{0xb7a80000},{0xb7a88000},{0xb7a90000},{0xb7a98000},{0xb7aa0000},{0xb7aa8000},{0xb7ab0000},{0xb7ab8000},{0xb7ac0000},{0xb7ac8000},{0xb7ad0000},{0xb7ad8000},{0xb7ae0000},{0xb7ae8000},{0xb7af0000},{0xb7af8000}, +{0xb7b00000},{0xb7b08000},{0xb7b10000},{0xb7b18000},{0xb7b20000},{0xb7b28000},{0xb7b30000},{0xb7b38000},{0xb7b40000},{0xb7b48000},{0xb7b50000},{0xb7b58000},{0xb7b60000},{0xb7b68000},{0xb7b70000},{0xb7b78000},{0xb7b80000},{0xb7b88000},{0xb7b90000},{0xb7b98000},{0xb7ba0000},{0xb7ba8000},{0xb7bb0000},{0xb7bb8000},{0xb7bc0000},{0xb7bc8000},{0xb7bd0000},{0xb7bd8000},{0xb7be0000},{0xb7be8000},{0xb7bf0000},{0xb7bf8000}, +{0xb7c00000},{0xb7c08000},{0xb7c10000},{0xb7c18000},{0xb7c20000},{0xb7c28000},{0xb7c30000},{0xb7c38000},{0xb7c40000},{0xb7c48000},{0xb7c50000},{0xb7c58000},{0xb7c60000},{0xb7c68000},{0xb7c70000},{0xb7c78000},{0xb7c80000},{0xb7c88000},{0xb7c90000},{0xb7c98000},{0xb7ca0000},{0xb7ca8000},{0xb7cb0000},{0xb7cb8000},{0xb7cc0000},{0xb7cc8000},{0xb7cd0000},{0xb7cd8000},{0xb7ce0000},{0xb7ce8000},{0xb7cf0000},{0xb7cf8000}, +{0xb7d00000},{0xb7d08000},{0xb7d10000},{0xb7d18000},{0xb7d20000},{0xb7d28000},{0xb7d30000},{0xb7d38000},{0xb7d40000},{0xb7d48000},{0xb7d50000},{0xb7d58000},{0xb7d60000},{0xb7d68000},{0xb7d70000},{0xb7d78000},{0xb7d80000},{0xb7d88000},{0xb7d90000},{0xb7d98000},{0xb7da0000},{0xb7da8000},{0xb7db0000},{0xb7db8000},{0xb7dc0000},{0xb7dc8000},{0xb7dd0000},{0xb7dd8000},{0xb7de0000},{0xb7de8000},{0xb7df0000},{0xb7df8000}, +{0xb7e00000},{0xb7e08000},{0xb7e10000},{0xb7e18000},{0xb7e20000},{0xb7e28000},{0xb7e30000},{0xb7e38000},{0xb7e40000},{0xb7e48000},{0xb7e50000},{0xb7e58000},{0xb7e60000},{0xb7e68000},{0xb7e70000},{0xb7e78000},{0xb7e80000},{0xb7e88000},{0xb7e90000},{0xb7e98000},{0xb7ea0000},{0xb7ea8000},{0xb7eb0000},{0xb7eb8000},{0xb7ec0000},{0xb7ec8000},{0xb7ed0000},{0xb7ed8000},{0xb7ee0000},{0xb7ee8000},{0xb7ef0000},{0xb7ef8000}, +{0xb7f00000},{0xb7f08000},{0xb7f10000},{0xb7f18000},{0xb7f20000},{0xb7f28000},{0xb7f30000},{0xb7f38000},{0xb7f40000},{0xb7f48000},{0xb7f50000},{0xb7f58000},{0xb7f60000},{0xb7f68000},{0xb7f70000},{0xb7f78000},{0xb7f80000},{0xb7f88000},{0xb7f90000},{0xb7f98000},{0xb7fa0000},{0xb7fa8000},{0xb7fb0000},{0xb7fb8000},{0xb7fc0000},{0xb7fc8000},{0xb7fd0000},{0xb7fd8000},{0xb7fe0000},{0xb7fe8000},{0xb7ff0000},{0xb7ff8000}, +{0xb8000000},{0xb8004000},{0xb8008000},{0xb800c000},{0xb8010000},{0xb8014000},{0xb8018000},{0xb801c000},{0xb8020000},{0xb8024000},{0xb8028000},{0xb802c000},{0xb8030000},{0xb8034000},{0xb8038000},{0xb803c000},{0xb8040000},{0xb8044000},{0xb8048000},{0xb804c000},{0xb8050000},{0xb8054000},{0xb8058000},{0xb805c000},{0xb8060000},{0xb8064000},{0xb8068000},{0xb806c000},{0xb8070000},{0xb8074000},{0xb8078000},{0xb807c000}, +{0xb8080000},{0xb8084000},{0xb8088000},{0xb808c000},{0xb8090000},{0xb8094000},{0xb8098000},{0xb809c000},{0xb80a0000},{0xb80a4000},{0xb80a8000},{0xb80ac000},{0xb80b0000},{0xb80b4000},{0xb80b8000},{0xb80bc000},{0xb80c0000},{0xb80c4000},{0xb80c8000},{0xb80cc000},{0xb80d0000},{0xb80d4000},{0xb80d8000},{0xb80dc000},{0xb80e0000},{0xb80e4000},{0xb80e8000},{0xb80ec000},{0xb80f0000},{0xb80f4000},{0xb80f8000},{0xb80fc000}, +{0xb8100000},{0xb8104000},{0xb8108000},{0xb810c000},{0xb8110000},{0xb8114000},{0xb8118000},{0xb811c000},{0xb8120000},{0xb8124000},{0xb8128000},{0xb812c000},{0xb8130000},{0xb8134000},{0xb8138000},{0xb813c000},{0xb8140000},{0xb8144000},{0xb8148000},{0xb814c000},{0xb8150000},{0xb8154000},{0xb8158000},{0xb815c000},{0xb8160000},{0xb8164000},{0xb8168000},{0xb816c000},{0xb8170000},{0xb8174000},{0xb8178000},{0xb817c000}, +{0xb8180000},{0xb8184000},{0xb8188000},{0xb818c000},{0xb8190000},{0xb8194000},{0xb8198000},{0xb819c000},{0xb81a0000},{0xb81a4000},{0xb81a8000},{0xb81ac000},{0xb81b0000},{0xb81b4000},{0xb81b8000},{0xb81bc000},{0xb81c0000},{0xb81c4000},{0xb81c8000},{0xb81cc000},{0xb81d0000},{0xb81d4000},{0xb81d8000},{0xb81dc000},{0xb81e0000},{0xb81e4000},{0xb81e8000},{0xb81ec000},{0xb81f0000},{0xb81f4000},{0xb81f8000},{0xb81fc000}, +{0xb8200000},{0xb8204000},{0xb8208000},{0xb820c000},{0xb8210000},{0xb8214000},{0xb8218000},{0xb821c000},{0xb8220000},{0xb8224000},{0xb8228000},{0xb822c000},{0xb8230000},{0xb8234000},{0xb8238000},{0xb823c000},{0xb8240000},{0xb8244000},{0xb8248000},{0xb824c000},{0xb8250000},{0xb8254000},{0xb8258000},{0xb825c000},{0xb8260000},{0xb8264000},{0xb8268000},{0xb826c000},{0xb8270000},{0xb8274000},{0xb8278000},{0xb827c000}, +{0xb8280000},{0xb8284000},{0xb8288000},{0xb828c000},{0xb8290000},{0xb8294000},{0xb8298000},{0xb829c000},{0xb82a0000},{0xb82a4000},{0xb82a8000},{0xb82ac000},{0xb82b0000},{0xb82b4000},{0xb82b8000},{0xb82bc000},{0xb82c0000},{0xb82c4000},{0xb82c8000},{0xb82cc000},{0xb82d0000},{0xb82d4000},{0xb82d8000},{0xb82dc000},{0xb82e0000},{0xb82e4000},{0xb82e8000},{0xb82ec000},{0xb82f0000},{0xb82f4000},{0xb82f8000},{0xb82fc000}, +{0xb8300000},{0xb8304000},{0xb8308000},{0xb830c000},{0xb8310000},{0xb8314000},{0xb8318000},{0xb831c000},{0xb8320000},{0xb8324000},{0xb8328000},{0xb832c000},{0xb8330000},{0xb8334000},{0xb8338000},{0xb833c000},{0xb8340000},{0xb8344000},{0xb8348000},{0xb834c000},{0xb8350000},{0xb8354000},{0xb8358000},{0xb835c000},{0xb8360000},{0xb8364000},{0xb8368000},{0xb836c000},{0xb8370000},{0xb8374000},{0xb8378000},{0xb837c000}, +{0xb8380000},{0xb8384000},{0xb8388000},{0xb838c000},{0xb8390000},{0xb8394000},{0xb8398000},{0xb839c000},{0xb83a0000},{0xb83a4000},{0xb83a8000},{0xb83ac000},{0xb83b0000},{0xb83b4000},{0xb83b8000},{0xb83bc000},{0xb83c0000},{0xb83c4000},{0xb83c8000},{0xb83cc000},{0xb83d0000},{0xb83d4000},{0xb83d8000},{0xb83dc000},{0xb83e0000},{0xb83e4000},{0xb83e8000},{0xb83ec000},{0xb83f0000},{0xb83f4000},{0xb83f8000},{0xb83fc000}, +{0xb8400000},{0xb8404000},{0xb8408000},{0xb840c000},{0xb8410000},{0xb8414000},{0xb8418000},{0xb841c000},{0xb8420000},{0xb8424000},{0xb8428000},{0xb842c000},{0xb8430000},{0xb8434000},{0xb8438000},{0xb843c000},{0xb8440000},{0xb8444000},{0xb8448000},{0xb844c000},{0xb8450000},{0xb8454000},{0xb8458000},{0xb845c000},{0xb8460000},{0xb8464000},{0xb8468000},{0xb846c000},{0xb8470000},{0xb8474000},{0xb8478000},{0xb847c000}, +{0xb8480000},{0xb8484000},{0xb8488000},{0xb848c000},{0xb8490000},{0xb8494000},{0xb8498000},{0xb849c000},{0xb84a0000},{0xb84a4000},{0xb84a8000},{0xb84ac000},{0xb84b0000},{0xb84b4000},{0xb84b8000},{0xb84bc000},{0xb84c0000},{0xb84c4000},{0xb84c8000},{0xb84cc000},{0xb84d0000},{0xb84d4000},{0xb84d8000},{0xb84dc000},{0xb84e0000},{0xb84e4000},{0xb84e8000},{0xb84ec000},{0xb84f0000},{0xb84f4000},{0xb84f8000},{0xb84fc000}, +{0xb8500000},{0xb8504000},{0xb8508000},{0xb850c000},{0xb8510000},{0xb8514000},{0xb8518000},{0xb851c000},{0xb8520000},{0xb8524000},{0xb8528000},{0xb852c000},{0xb8530000},{0xb8534000},{0xb8538000},{0xb853c000},{0xb8540000},{0xb8544000},{0xb8548000},{0xb854c000},{0xb8550000},{0xb8554000},{0xb8558000},{0xb855c000},{0xb8560000},{0xb8564000},{0xb8568000},{0xb856c000},{0xb8570000},{0xb8574000},{0xb8578000},{0xb857c000}, +{0xb8580000},{0xb8584000},{0xb8588000},{0xb858c000},{0xb8590000},{0xb8594000},{0xb8598000},{0xb859c000},{0xb85a0000},{0xb85a4000},{0xb85a8000},{0xb85ac000},{0xb85b0000},{0xb85b4000},{0xb85b8000},{0xb85bc000},{0xb85c0000},{0xb85c4000},{0xb85c8000},{0xb85cc000},{0xb85d0000},{0xb85d4000},{0xb85d8000},{0xb85dc000},{0xb85e0000},{0xb85e4000},{0xb85e8000},{0xb85ec000},{0xb85f0000},{0xb85f4000},{0xb85f8000},{0xb85fc000}, +{0xb8600000},{0xb8604000},{0xb8608000},{0xb860c000},{0xb8610000},{0xb8614000},{0xb8618000},{0xb861c000},{0xb8620000},{0xb8624000},{0xb8628000},{0xb862c000},{0xb8630000},{0xb8634000},{0xb8638000},{0xb863c000},{0xb8640000},{0xb8644000},{0xb8648000},{0xb864c000},{0xb8650000},{0xb8654000},{0xb8658000},{0xb865c000},{0xb8660000},{0xb8664000},{0xb8668000},{0xb866c000},{0xb8670000},{0xb8674000},{0xb8678000},{0xb867c000}, +{0xb8680000},{0xb8684000},{0xb8688000},{0xb868c000},{0xb8690000},{0xb8694000},{0xb8698000},{0xb869c000},{0xb86a0000},{0xb86a4000},{0xb86a8000},{0xb86ac000},{0xb86b0000},{0xb86b4000},{0xb86b8000},{0xb86bc000},{0xb86c0000},{0xb86c4000},{0xb86c8000},{0xb86cc000},{0xb86d0000},{0xb86d4000},{0xb86d8000},{0xb86dc000},{0xb86e0000},{0xb86e4000},{0xb86e8000},{0xb86ec000},{0xb86f0000},{0xb86f4000},{0xb86f8000},{0xb86fc000}, +{0xb8700000},{0xb8704000},{0xb8708000},{0xb870c000},{0xb8710000},{0xb8714000},{0xb8718000},{0xb871c000},{0xb8720000},{0xb8724000},{0xb8728000},{0xb872c000},{0xb8730000},{0xb8734000},{0xb8738000},{0xb873c000},{0xb8740000},{0xb8744000},{0xb8748000},{0xb874c000},{0xb8750000},{0xb8754000},{0xb8758000},{0xb875c000},{0xb8760000},{0xb8764000},{0xb8768000},{0xb876c000},{0xb8770000},{0xb8774000},{0xb8778000},{0xb877c000}, +{0xb8780000},{0xb8784000},{0xb8788000},{0xb878c000},{0xb8790000},{0xb8794000},{0xb8798000},{0xb879c000},{0xb87a0000},{0xb87a4000},{0xb87a8000},{0xb87ac000},{0xb87b0000},{0xb87b4000},{0xb87b8000},{0xb87bc000},{0xb87c0000},{0xb87c4000},{0xb87c8000},{0xb87cc000},{0xb87d0000},{0xb87d4000},{0xb87d8000},{0xb87dc000},{0xb87e0000},{0xb87e4000},{0xb87e8000},{0xb87ec000},{0xb87f0000},{0xb87f4000},{0xb87f8000},{0xb87fc000}, +{0xb8800000},{0xb8802000},{0xb8804000},{0xb8806000},{0xb8808000},{0xb880a000},{0xb880c000},{0xb880e000},{0xb8810000},{0xb8812000},{0xb8814000},{0xb8816000},{0xb8818000},{0xb881a000},{0xb881c000},{0xb881e000},{0xb8820000},{0xb8822000},{0xb8824000},{0xb8826000},{0xb8828000},{0xb882a000},{0xb882c000},{0xb882e000},{0xb8830000},{0xb8832000},{0xb8834000},{0xb8836000},{0xb8838000},{0xb883a000},{0xb883c000},{0xb883e000}, +{0xb8840000},{0xb8842000},{0xb8844000},{0xb8846000},{0xb8848000},{0xb884a000},{0xb884c000},{0xb884e000},{0xb8850000},{0xb8852000},{0xb8854000},{0xb8856000},{0xb8858000},{0xb885a000},{0xb885c000},{0xb885e000},{0xb8860000},{0xb8862000},{0xb8864000},{0xb8866000},{0xb8868000},{0xb886a000},{0xb886c000},{0xb886e000},{0xb8870000},{0xb8872000},{0xb8874000},{0xb8876000},{0xb8878000},{0xb887a000},{0xb887c000},{0xb887e000}, +{0xb8880000},{0xb8882000},{0xb8884000},{0xb8886000},{0xb8888000},{0xb888a000},{0xb888c000},{0xb888e000},{0xb8890000},{0xb8892000},{0xb8894000},{0xb8896000},{0xb8898000},{0xb889a000},{0xb889c000},{0xb889e000},{0xb88a0000},{0xb88a2000},{0xb88a4000},{0xb88a6000},{0xb88a8000},{0xb88aa000},{0xb88ac000},{0xb88ae000},{0xb88b0000},{0xb88b2000},{0xb88b4000},{0xb88b6000},{0xb88b8000},{0xb88ba000},{0xb88bc000},{0xb88be000}, +{0xb88c0000},{0xb88c2000},{0xb88c4000},{0xb88c6000},{0xb88c8000},{0xb88ca000},{0xb88cc000},{0xb88ce000},{0xb88d0000},{0xb88d2000},{0xb88d4000},{0xb88d6000},{0xb88d8000},{0xb88da000},{0xb88dc000},{0xb88de000},{0xb88e0000},{0xb88e2000},{0xb88e4000},{0xb88e6000},{0xb88e8000},{0xb88ea000},{0xb88ec000},{0xb88ee000},{0xb88f0000},{0xb88f2000},{0xb88f4000},{0xb88f6000},{0xb88f8000},{0xb88fa000},{0xb88fc000},{0xb88fe000}, +{0xb8900000},{0xb8902000},{0xb8904000},{0xb8906000},{0xb8908000},{0xb890a000},{0xb890c000},{0xb890e000},{0xb8910000},{0xb8912000},{0xb8914000},{0xb8916000},{0xb8918000},{0xb891a000},{0xb891c000},{0xb891e000},{0xb8920000},{0xb8922000},{0xb8924000},{0xb8926000},{0xb8928000},{0xb892a000},{0xb892c000},{0xb892e000},{0xb8930000},{0xb8932000},{0xb8934000},{0xb8936000},{0xb8938000},{0xb893a000},{0xb893c000},{0xb893e000}, +{0xb8940000},{0xb8942000},{0xb8944000},{0xb8946000},{0xb8948000},{0xb894a000},{0xb894c000},{0xb894e000},{0xb8950000},{0xb8952000},{0xb8954000},{0xb8956000},{0xb8958000},{0xb895a000},{0xb895c000},{0xb895e000},{0xb8960000},{0xb8962000},{0xb8964000},{0xb8966000},{0xb8968000},{0xb896a000},{0xb896c000},{0xb896e000},{0xb8970000},{0xb8972000},{0xb8974000},{0xb8976000},{0xb8978000},{0xb897a000},{0xb897c000},{0xb897e000}, +{0xb8980000},{0xb8982000},{0xb8984000},{0xb8986000},{0xb8988000},{0xb898a000},{0xb898c000},{0xb898e000},{0xb8990000},{0xb8992000},{0xb8994000},{0xb8996000},{0xb8998000},{0xb899a000},{0xb899c000},{0xb899e000},{0xb89a0000},{0xb89a2000},{0xb89a4000},{0xb89a6000},{0xb89a8000},{0xb89aa000},{0xb89ac000},{0xb89ae000},{0xb89b0000},{0xb89b2000},{0xb89b4000},{0xb89b6000},{0xb89b8000},{0xb89ba000},{0xb89bc000},{0xb89be000}, +{0xb89c0000},{0xb89c2000},{0xb89c4000},{0xb89c6000},{0xb89c8000},{0xb89ca000},{0xb89cc000},{0xb89ce000},{0xb89d0000},{0xb89d2000},{0xb89d4000},{0xb89d6000},{0xb89d8000},{0xb89da000},{0xb89dc000},{0xb89de000},{0xb89e0000},{0xb89e2000},{0xb89e4000},{0xb89e6000},{0xb89e8000},{0xb89ea000},{0xb89ec000},{0xb89ee000},{0xb89f0000},{0xb89f2000},{0xb89f4000},{0xb89f6000},{0xb89f8000},{0xb89fa000},{0xb89fc000},{0xb89fe000}, +{0xb8a00000},{0xb8a02000},{0xb8a04000},{0xb8a06000},{0xb8a08000},{0xb8a0a000},{0xb8a0c000},{0xb8a0e000},{0xb8a10000},{0xb8a12000},{0xb8a14000},{0xb8a16000},{0xb8a18000},{0xb8a1a000},{0xb8a1c000},{0xb8a1e000},{0xb8a20000},{0xb8a22000},{0xb8a24000},{0xb8a26000},{0xb8a28000},{0xb8a2a000},{0xb8a2c000},{0xb8a2e000},{0xb8a30000},{0xb8a32000},{0xb8a34000},{0xb8a36000},{0xb8a38000},{0xb8a3a000},{0xb8a3c000},{0xb8a3e000}, +{0xb8a40000},{0xb8a42000},{0xb8a44000},{0xb8a46000},{0xb8a48000},{0xb8a4a000},{0xb8a4c000},{0xb8a4e000},{0xb8a50000},{0xb8a52000},{0xb8a54000},{0xb8a56000},{0xb8a58000},{0xb8a5a000},{0xb8a5c000},{0xb8a5e000},{0xb8a60000},{0xb8a62000},{0xb8a64000},{0xb8a66000},{0xb8a68000},{0xb8a6a000},{0xb8a6c000},{0xb8a6e000},{0xb8a70000},{0xb8a72000},{0xb8a74000},{0xb8a76000},{0xb8a78000},{0xb8a7a000},{0xb8a7c000},{0xb8a7e000}, +{0xb8a80000},{0xb8a82000},{0xb8a84000},{0xb8a86000},{0xb8a88000},{0xb8a8a000},{0xb8a8c000},{0xb8a8e000},{0xb8a90000},{0xb8a92000},{0xb8a94000},{0xb8a96000},{0xb8a98000},{0xb8a9a000},{0xb8a9c000},{0xb8a9e000},{0xb8aa0000},{0xb8aa2000},{0xb8aa4000},{0xb8aa6000},{0xb8aa8000},{0xb8aaa000},{0xb8aac000},{0xb8aae000},{0xb8ab0000},{0xb8ab2000},{0xb8ab4000},{0xb8ab6000},{0xb8ab8000},{0xb8aba000},{0xb8abc000},{0xb8abe000}, +{0xb8ac0000},{0xb8ac2000},{0xb8ac4000},{0xb8ac6000},{0xb8ac8000},{0xb8aca000},{0xb8acc000},{0xb8ace000},{0xb8ad0000},{0xb8ad2000},{0xb8ad4000},{0xb8ad6000},{0xb8ad8000},{0xb8ada000},{0xb8adc000},{0xb8ade000},{0xb8ae0000},{0xb8ae2000},{0xb8ae4000},{0xb8ae6000},{0xb8ae8000},{0xb8aea000},{0xb8aec000},{0xb8aee000},{0xb8af0000},{0xb8af2000},{0xb8af4000},{0xb8af6000},{0xb8af8000},{0xb8afa000},{0xb8afc000},{0xb8afe000}, +{0xb8b00000},{0xb8b02000},{0xb8b04000},{0xb8b06000},{0xb8b08000},{0xb8b0a000},{0xb8b0c000},{0xb8b0e000},{0xb8b10000},{0xb8b12000},{0xb8b14000},{0xb8b16000},{0xb8b18000},{0xb8b1a000},{0xb8b1c000},{0xb8b1e000},{0xb8b20000},{0xb8b22000},{0xb8b24000},{0xb8b26000},{0xb8b28000},{0xb8b2a000},{0xb8b2c000},{0xb8b2e000},{0xb8b30000},{0xb8b32000},{0xb8b34000},{0xb8b36000},{0xb8b38000},{0xb8b3a000},{0xb8b3c000},{0xb8b3e000}, +{0xb8b40000},{0xb8b42000},{0xb8b44000},{0xb8b46000},{0xb8b48000},{0xb8b4a000},{0xb8b4c000},{0xb8b4e000},{0xb8b50000},{0xb8b52000},{0xb8b54000},{0xb8b56000},{0xb8b58000},{0xb8b5a000},{0xb8b5c000},{0xb8b5e000},{0xb8b60000},{0xb8b62000},{0xb8b64000},{0xb8b66000},{0xb8b68000},{0xb8b6a000},{0xb8b6c000},{0xb8b6e000},{0xb8b70000},{0xb8b72000},{0xb8b74000},{0xb8b76000},{0xb8b78000},{0xb8b7a000},{0xb8b7c000},{0xb8b7e000}, +{0xb8b80000},{0xb8b82000},{0xb8b84000},{0xb8b86000},{0xb8b88000},{0xb8b8a000},{0xb8b8c000},{0xb8b8e000},{0xb8b90000},{0xb8b92000},{0xb8b94000},{0xb8b96000},{0xb8b98000},{0xb8b9a000},{0xb8b9c000},{0xb8b9e000},{0xb8ba0000},{0xb8ba2000},{0xb8ba4000},{0xb8ba6000},{0xb8ba8000},{0xb8baa000},{0xb8bac000},{0xb8bae000},{0xb8bb0000},{0xb8bb2000},{0xb8bb4000},{0xb8bb6000},{0xb8bb8000},{0xb8bba000},{0xb8bbc000},{0xb8bbe000}, +{0xb8bc0000},{0xb8bc2000},{0xb8bc4000},{0xb8bc6000},{0xb8bc8000},{0xb8bca000},{0xb8bcc000},{0xb8bce000},{0xb8bd0000},{0xb8bd2000},{0xb8bd4000},{0xb8bd6000},{0xb8bd8000},{0xb8bda000},{0xb8bdc000},{0xb8bde000},{0xb8be0000},{0xb8be2000},{0xb8be4000},{0xb8be6000},{0xb8be8000},{0xb8bea000},{0xb8bec000},{0xb8bee000},{0xb8bf0000},{0xb8bf2000},{0xb8bf4000},{0xb8bf6000},{0xb8bf8000},{0xb8bfa000},{0xb8bfc000},{0xb8bfe000}, +{0xb8c00000},{0xb8c02000},{0xb8c04000},{0xb8c06000},{0xb8c08000},{0xb8c0a000},{0xb8c0c000},{0xb8c0e000},{0xb8c10000},{0xb8c12000},{0xb8c14000},{0xb8c16000},{0xb8c18000},{0xb8c1a000},{0xb8c1c000},{0xb8c1e000},{0xb8c20000},{0xb8c22000},{0xb8c24000},{0xb8c26000},{0xb8c28000},{0xb8c2a000},{0xb8c2c000},{0xb8c2e000},{0xb8c30000},{0xb8c32000},{0xb8c34000},{0xb8c36000},{0xb8c38000},{0xb8c3a000},{0xb8c3c000},{0xb8c3e000}, +{0xb8c40000},{0xb8c42000},{0xb8c44000},{0xb8c46000},{0xb8c48000},{0xb8c4a000},{0xb8c4c000},{0xb8c4e000},{0xb8c50000},{0xb8c52000},{0xb8c54000},{0xb8c56000},{0xb8c58000},{0xb8c5a000},{0xb8c5c000},{0xb8c5e000},{0xb8c60000},{0xb8c62000},{0xb8c64000},{0xb8c66000},{0xb8c68000},{0xb8c6a000},{0xb8c6c000},{0xb8c6e000},{0xb8c70000},{0xb8c72000},{0xb8c74000},{0xb8c76000},{0xb8c78000},{0xb8c7a000},{0xb8c7c000},{0xb8c7e000}, +{0xb8c80000},{0xb8c82000},{0xb8c84000},{0xb8c86000},{0xb8c88000},{0xb8c8a000},{0xb8c8c000},{0xb8c8e000},{0xb8c90000},{0xb8c92000},{0xb8c94000},{0xb8c96000},{0xb8c98000},{0xb8c9a000},{0xb8c9c000},{0xb8c9e000},{0xb8ca0000},{0xb8ca2000},{0xb8ca4000},{0xb8ca6000},{0xb8ca8000},{0xb8caa000},{0xb8cac000},{0xb8cae000},{0xb8cb0000},{0xb8cb2000},{0xb8cb4000},{0xb8cb6000},{0xb8cb8000},{0xb8cba000},{0xb8cbc000},{0xb8cbe000}, +{0xb8cc0000},{0xb8cc2000},{0xb8cc4000},{0xb8cc6000},{0xb8cc8000},{0xb8cca000},{0xb8ccc000},{0xb8cce000},{0xb8cd0000},{0xb8cd2000},{0xb8cd4000},{0xb8cd6000},{0xb8cd8000},{0xb8cda000},{0xb8cdc000},{0xb8cde000},{0xb8ce0000},{0xb8ce2000},{0xb8ce4000},{0xb8ce6000},{0xb8ce8000},{0xb8cea000},{0xb8cec000},{0xb8cee000},{0xb8cf0000},{0xb8cf2000},{0xb8cf4000},{0xb8cf6000},{0xb8cf8000},{0xb8cfa000},{0xb8cfc000},{0xb8cfe000}, +{0xb8d00000},{0xb8d02000},{0xb8d04000},{0xb8d06000},{0xb8d08000},{0xb8d0a000},{0xb8d0c000},{0xb8d0e000},{0xb8d10000},{0xb8d12000},{0xb8d14000},{0xb8d16000},{0xb8d18000},{0xb8d1a000},{0xb8d1c000},{0xb8d1e000},{0xb8d20000},{0xb8d22000},{0xb8d24000},{0xb8d26000},{0xb8d28000},{0xb8d2a000},{0xb8d2c000},{0xb8d2e000},{0xb8d30000},{0xb8d32000},{0xb8d34000},{0xb8d36000},{0xb8d38000},{0xb8d3a000},{0xb8d3c000},{0xb8d3e000}, +{0xb8d40000},{0xb8d42000},{0xb8d44000},{0xb8d46000},{0xb8d48000},{0xb8d4a000},{0xb8d4c000},{0xb8d4e000},{0xb8d50000},{0xb8d52000},{0xb8d54000},{0xb8d56000},{0xb8d58000},{0xb8d5a000},{0xb8d5c000},{0xb8d5e000},{0xb8d60000},{0xb8d62000},{0xb8d64000},{0xb8d66000},{0xb8d68000},{0xb8d6a000},{0xb8d6c000},{0xb8d6e000},{0xb8d70000},{0xb8d72000},{0xb8d74000},{0xb8d76000},{0xb8d78000},{0xb8d7a000},{0xb8d7c000},{0xb8d7e000}, +{0xb8d80000},{0xb8d82000},{0xb8d84000},{0xb8d86000},{0xb8d88000},{0xb8d8a000},{0xb8d8c000},{0xb8d8e000},{0xb8d90000},{0xb8d92000},{0xb8d94000},{0xb8d96000},{0xb8d98000},{0xb8d9a000},{0xb8d9c000},{0xb8d9e000},{0xb8da0000},{0xb8da2000},{0xb8da4000},{0xb8da6000},{0xb8da8000},{0xb8daa000},{0xb8dac000},{0xb8dae000},{0xb8db0000},{0xb8db2000},{0xb8db4000},{0xb8db6000},{0xb8db8000},{0xb8dba000},{0xb8dbc000},{0xb8dbe000}, +{0xb8dc0000},{0xb8dc2000},{0xb8dc4000},{0xb8dc6000},{0xb8dc8000},{0xb8dca000},{0xb8dcc000},{0xb8dce000},{0xb8dd0000},{0xb8dd2000},{0xb8dd4000},{0xb8dd6000},{0xb8dd8000},{0xb8dda000},{0xb8ddc000},{0xb8dde000},{0xb8de0000},{0xb8de2000},{0xb8de4000},{0xb8de6000},{0xb8de8000},{0xb8dea000},{0xb8dec000},{0xb8dee000},{0xb8df0000},{0xb8df2000},{0xb8df4000},{0xb8df6000},{0xb8df8000},{0xb8dfa000},{0xb8dfc000},{0xb8dfe000}, +{0xb8e00000},{0xb8e02000},{0xb8e04000},{0xb8e06000},{0xb8e08000},{0xb8e0a000},{0xb8e0c000},{0xb8e0e000},{0xb8e10000},{0xb8e12000},{0xb8e14000},{0xb8e16000},{0xb8e18000},{0xb8e1a000},{0xb8e1c000},{0xb8e1e000},{0xb8e20000},{0xb8e22000},{0xb8e24000},{0xb8e26000},{0xb8e28000},{0xb8e2a000},{0xb8e2c000},{0xb8e2e000},{0xb8e30000},{0xb8e32000},{0xb8e34000},{0xb8e36000},{0xb8e38000},{0xb8e3a000},{0xb8e3c000},{0xb8e3e000}, +{0xb8e40000},{0xb8e42000},{0xb8e44000},{0xb8e46000},{0xb8e48000},{0xb8e4a000},{0xb8e4c000},{0xb8e4e000},{0xb8e50000},{0xb8e52000},{0xb8e54000},{0xb8e56000},{0xb8e58000},{0xb8e5a000},{0xb8e5c000},{0xb8e5e000},{0xb8e60000},{0xb8e62000},{0xb8e64000},{0xb8e66000},{0xb8e68000},{0xb8e6a000},{0xb8e6c000},{0xb8e6e000},{0xb8e70000},{0xb8e72000},{0xb8e74000},{0xb8e76000},{0xb8e78000},{0xb8e7a000},{0xb8e7c000},{0xb8e7e000}, +{0xb8e80000},{0xb8e82000},{0xb8e84000},{0xb8e86000},{0xb8e88000},{0xb8e8a000},{0xb8e8c000},{0xb8e8e000},{0xb8e90000},{0xb8e92000},{0xb8e94000},{0xb8e96000},{0xb8e98000},{0xb8e9a000},{0xb8e9c000},{0xb8e9e000},{0xb8ea0000},{0xb8ea2000},{0xb8ea4000},{0xb8ea6000},{0xb8ea8000},{0xb8eaa000},{0xb8eac000},{0xb8eae000},{0xb8eb0000},{0xb8eb2000},{0xb8eb4000},{0xb8eb6000},{0xb8eb8000},{0xb8eba000},{0xb8ebc000},{0xb8ebe000}, +{0xb8ec0000},{0xb8ec2000},{0xb8ec4000},{0xb8ec6000},{0xb8ec8000},{0xb8eca000},{0xb8ecc000},{0xb8ece000},{0xb8ed0000},{0xb8ed2000},{0xb8ed4000},{0xb8ed6000},{0xb8ed8000},{0xb8eda000},{0xb8edc000},{0xb8ede000},{0xb8ee0000},{0xb8ee2000},{0xb8ee4000},{0xb8ee6000},{0xb8ee8000},{0xb8eea000},{0xb8eec000},{0xb8eee000},{0xb8ef0000},{0xb8ef2000},{0xb8ef4000},{0xb8ef6000},{0xb8ef8000},{0xb8efa000},{0xb8efc000},{0xb8efe000}, +{0xb8f00000},{0xb8f02000},{0xb8f04000},{0xb8f06000},{0xb8f08000},{0xb8f0a000},{0xb8f0c000},{0xb8f0e000},{0xb8f10000},{0xb8f12000},{0xb8f14000},{0xb8f16000},{0xb8f18000},{0xb8f1a000},{0xb8f1c000},{0xb8f1e000},{0xb8f20000},{0xb8f22000},{0xb8f24000},{0xb8f26000},{0xb8f28000},{0xb8f2a000},{0xb8f2c000},{0xb8f2e000},{0xb8f30000},{0xb8f32000},{0xb8f34000},{0xb8f36000},{0xb8f38000},{0xb8f3a000},{0xb8f3c000},{0xb8f3e000}, +{0xb8f40000},{0xb8f42000},{0xb8f44000},{0xb8f46000},{0xb8f48000},{0xb8f4a000},{0xb8f4c000},{0xb8f4e000},{0xb8f50000},{0xb8f52000},{0xb8f54000},{0xb8f56000},{0xb8f58000},{0xb8f5a000},{0xb8f5c000},{0xb8f5e000},{0xb8f60000},{0xb8f62000},{0xb8f64000},{0xb8f66000},{0xb8f68000},{0xb8f6a000},{0xb8f6c000},{0xb8f6e000},{0xb8f70000},{0xb8f72000},{0xb8f74000},{0xb8f76000},{0xb8f78000},{0xb8f7a000},{0xb8f7c000},{0xb8f7e000}, +{0xb8f80000},{0xb8f82000},{0xb8f84000},{0xb8f86000},{0xb8f88000},{0xb8f8a000},{0xb8f8c000},{0xb8f8e000},{0xb8f90000},{0xb8f92000},{0xb8f94000},{0xb8f96000},{0xb8f98000},{0xb8f9a000},{0xb8f9c000},{0xb8f9e000},{0xb8fa0000},{0xb8fa2000},{0xb8fa4000},{0xb8fa6000},{0xb8fa8000},{0xb8faa000},{0xb8fac000},{0xb8fae000},{0xb8fb0000},{0xb8fb2000},{0xb8fb4000},{0xb8fb6000},{0xb8fb8000},{0xb8fba000},{0xb8fbc000},{0xb8fbe000}, +{0xb8fc0000},{0xb8fc2000},{0xb8fc4000},{0xb8fc6000},{0xb8fc8000},{0xb8fca000},{0xb8fcc000},{0xb8fce000},{0xb8fd0000},{0xb8fd2000},{0xb8fd4000},{0xb8fd6000},{0xb8fd8000},{0xb8fda000},{0xb8fdc000},{0xb8fde000},{0xb8fe0000},{0xb8fe2000},{0xb8fe4000},{0xb8fe6000},{0xb8fe8000},{0xb8fea000},{0xb8fec000},{0xb8fee000},{0xb8ff0000},{0xb8ff2000},{0xb8ff4000},{0xb8ff6000},{0xb8ff8000},{0xb8ffa000},{0xb8ffc000},{0xb8ffe000}, +{0xb9000000},{0xb9002000},{0xb9004000},{0xb9006000},{0xb9008000},{0xb900a000},{0xb900c000},{0xb900e000},{0xb9010000},{0xb9012000},{0xb9014000},{0xb9016000},{0xb9018000},{0xb901a000},{0xb901c000},{0xb901e000},{0xb9020000},{0xb9022000},{0xb9024000},{0xb9026000},{0xb9028000},{0xb902a000},{0xb902c000},{0xb902e000},{0xb9030000},{0xb9032000},{0xb9034000},{0xb9036000},{0xb9038000},{0xb903a000},{0xb903c000},{0xb903e000}, +{0xb9040000},{0xb9042000},{0xb9044000},{0xb9046000},{0xb9048000},{0xb904a000},{0xb904c000},{0xb904e000},{0xb9050000},{0xb9052000},{0xb9054000},{0xb9056000},{0xb9058000},{0xb905a000},{0xb905c000},{0xb905e000},{0xb9060000},{0xb9062000},{0xb9064000},{0xb9066000},{0xb9068000},{0xb906a000},{0xb906c000},{0xb906e000},{0xb9070000},{0xb9072000},{0xb9074000},{0xb9076000},{0xb9078000},{0xb907a000},{0xb907c000},{0xb907e000}, +{0xb9080000},{0xb9082000},{0xb9084000},{0xb9086000},{0xb9088000},{0xb908a000},{0xb908c000},{0xb908e000},{0xb9090000},{0xb9092000},{0xb9094000},{0xb9096000},{0xb9098000},{0xb909a000},{0xb909c000},{0xb909e000},{0xb90a0000},{0xb90a2000},{0xb90a4000},{0xb90a6000},{0xb90a8000},{0xb90aa000},{0xb90ac000},{0xb90ae000},{0xb90b0000},{0xb90b2000},{0xb90b4000},{0xb90b6000},{0xb90b8000},{0xb90ba000},{0xb90bc000},{0xb90be000}, +{0xb90c0000},{0xb90c2000},{0xb90c4000},{0xb90c6000},{0xb90c8000},{0xb90ca000},{0xb90cc000},{0xb90ce000},{0xb90d0000},{0xb90d2000},{0xb90d4000},{0xb90d6000},{0xb90d8000},{0xb90da000},{0xb90dc000},{0xb90de000},{0xb90e0000},{0xb90e2000},{0xb90e4000},{0xb90e6000},{0xb90e8000},{0xb90ea000},{0xb90ec000},{0xb90ee000},{0xb90f0000},{0xb90f2000},{0xb90f4000},{0xb90f6000},{0xb90f8000},{0xb90fa000},{0xb90fc000},{0xb90fe000}, +{0xb9100000},{0xb9102000},{0xb9104000},{0xb9106000},{0xb9108000},{0xb910a000},{0xb910c000},{0xb910e000},{0xb9110000},{0xb9112000},{0xb9114000},{0xb9116000},{0xb9118000},{0xb911a000},{0xb911c000},{0xb911e000},{0xb9120000},{0xb9122000},{0xb9124000},{0xb9126000},{0xb9128000},{0xb912a000},{0xb912c000},{0xb912e000},{0xb9130000},{0xb9132000},{0xb9134000},{0xb9136000},{0xb9138000},{0xb913a000},{0xb913c000},{0xb913e000}, +{0xb9140000},{0xb9142000},{0xb9144000},{0xb9146000},{0xb9148000},{0xb914a000},{0xb914c000},{0xb914e000},{0xb9150000},{0xb9152000},{0xb9154000},{0xb9156000},{0xb9158000},{0xb915a000},{0xb915c000},{0xb915e000},{0xb9160000},{0xb9162000},{0xb9164000},{0xb9166000},{0xb9168000},{0xb916a000},{0xb916c000},{0xb916e000},{0xb9170000},{0xb9172000},{0xb9174000},{0xb9176000},{0xb9178000},{0xb917a000},{0xb917c000},{0xb917e000}, +{0xb9180000},{0xb9182000},{0xb9184000},{0xb9186000},{0xb9188000},{0xb918a000},{0xb918c000},{0xb918e000},{0xb9190000},{0xb9192000},{0xb9194000},{0xb9196000},{0xb9198000},{0xb919a000},{0xb919c000},{0xb919e000},{0xb91a0000},{0xb91a2000},{0xb91a4000},{0xb91a6000},{0xb91a8000},{0xb91aa000},{0xb91ac000},{0xb91ae000},{0xb91b0000},{0xb91b2000},{0xb91b4000},{0xb91b6000},{0xb91b8000},{0xb91ba000},{0xb91bc000},{0xb91be000}, +{0xb91c0000},{0xb91c2000},{0xb91c4000},{0xb91c6000},{0xb91c8000},{0xb91ca000},{0xb91cc000},{0xb91ce000},{0xb91d0000},{0xb91d2000},{0xb91d4000},{0xb91d6000},{0xb91d8000},{0xb91da000},{0xb91dc000},{0xb91de000},{0xb91e0000},{0xb91e2000},{0xb91e4000},{0xb91e6000},{0xb91e8000},{0xb91ea000},{0xb91ec000},{0xb91ee000},{0xb91f0000},{0xb91f2000},{0xb91f4000},{0xb91f6000},{0xb91f8000},{0xb91fa000},{0xb91fc000},{0xb91fe000}, +{0xb9200000},{0xb9202000},{0xb9204000},{0xb9206000},{0xb9208000},{0xb920a000},{0xb920c000},{0xb920e000},{0xb9210000},{0xb9212000},{0xb9214000},{0xb9216000},{0xb9218000},{0xb921a000},{0xb921c000},{0xb921e000},{0xb9220000},{0xb9222000},{0xb9224000},{0xb9226000},{0xb9228000},{0xb922a000},{0xb922c000},{0xb922e000},{0xb9230000},{0xb9232000},{0xb9234000},{0xb9236000},{0xb9238000},{0xb923a000},{0xb923c000},{0xb923e000}, +{0xb9240000},{0xb9242000},{0xb9244000},{0xb9246000},{0xb9248000},{0xb924a000},{0xb924c000},{0xb924e000},{0xb9250000},{0xb9252000},{0xb9254000},{0xb9256000},{0xb9258000},{0xb925a000},{0xb925c000},{0xb925e000},{0xb9260000},{0xb9262000},{0xb9264000},{0xb9266000},{0xb9268000},{0xb926a000},{0xb926c000},{0xb926e000},{0xb9270000},{0xb9272000},{0xb9274000},{0xb9276000},{0xb9278000},{0xb927a000},{0xb927c000},{0xb927e000}, +{0xb9280000},{0xb9282000},{0xb9284000},{0xb9286000},{0xb9288000},{0xb928a000},{0xb928c000},{0xb928e000},{0xb9290000},{0xb9292000},{0xb9294000},{0xb9296000},{0xb9298000},{0xb929a000},{0xb929c000},{0xb929e000},{0xb92a0000},{0xb92a2000},{0xb92a4000},{0xb92a6000},{0xb92a8000},{0xb92aa000},{0xb92ac000},{0xb92ae000},{0xb92b0000},{0xb92b2000},{0xb92b4000},{0xb92b6000},{0xb92b8000},{0xb92ba000},{0xb92bc000},{0xb92be000}, +{0xb92c0000},{0xb92c2000},{0xb92c4000},{0xb92c6000},{0xb92c8000},{0xb92ca000},{0xb92cc000},{0xb92ce000},{0xb92d0000},{0xb92d2000},{0xb92d4000},{0xb92d6000},{0xb92d8000},{0xb92da000},{0xb92dc000},{0xb92de000},{0xb92e0000},{0xb92e2000},{0xb92e4000},{0xb92e6000},{0xb92e8000},{0xb92ea000},{0xb92ec000},{0xb92ee000},{0xb92f0000},{0xb92f2000},{0xb92f4000},{0xb92f6000},{0xb92f8000},{0xb92fa000},{0xb92fc000},{0xb92fe000}, +{0xb9300000},{0xb9302000},{0xb9304000},{0xb9306000},{0xb9308000},{0xb930a000},{0xb930c000},{0xb930e000},{0xb9310000},{0xb9312000},{0xb9314000},{0xb9316000},{0xb9318000},{0xb931a000},{0xb931c000},{0xb931e000},{0xb9320000},{0xb9322000},{0xb9324000},{0xb9326000},{0xb9328000},{0xb932a000},{0xb932c000},{0xb932e000},{0xb9330000},{0xb9332000},{0xb9334000},{0xb9336000},{0xb9338000},{0xb933a000},{0xb933c000},{0xb933e000}, +{0xb9340000},{0xb9342000},{0xb9344000},{0xb9346000},{0xb9348000},{0xb934a000},{0xb934c000},{0xb934e000},{0xb9350000},{0xb9352000},{0xb9354000},{0xb9356000},{0xb9358000},{0xb935a000},{0xb935c000},{0xb935e000},{0xb9360000},{0xb9362000},{0xb9364000},{0xb9366000},{0xb9368000},{0xb936a000},{0xb936c000},{0xb936e000},{0xb9370000},{0xb9372000},{0xb9374000},{0xb9376000},{0xb9378000},{0xb937a000},{0xb937c000},{0xb937e000}, +{0xb9380000},{0xb9382000},{0xb9384000},{0xb9386000},{0xb9388000},{0xb938a000},{0xb938c000},{0xb938e000},{0xb9390000},{0xb9392000},{0xb9394000},{0xb9396000},{0xb9398000},{0xb939a000},{0xb939c000},{0xb939e000},{0xb93a0000},{0xb93a2000},{0xb93a4000},{0xb93a6000},{0xb93a8000},{0xb93aa000},{0xb93ac000},{0xb93ae000},{0xb93b0000},{0xb93b2000},{0xb93b4000},{0xb93b6000},{0xb93b8000},{0xb93ba000},{0xb93bc000},{0xb93be000}, +{0xb93c0000},{0xb93c2000},{0xb93c4000},{0xb93c6000},{0xb93c8000},{0xb93ca000},{0xb93cc000},{0xb93ce000},{0xb93d0000},{0xb93d2000},{0xb93d4000},{0xb93d6000},{0xb93d8000},{0xb93da000},{0xb93dc000},{0xb93de000},{0xb93e0000},{0xb93e2000},{0xb93e4000},{0xb93e6000},{0xb93e8000},{0xb93ea000},{0xb93ec000},{0xb93ee000},{0xb93f0000},{0xb93f2000},{0xb93f4000},{0xb93f6000},{0xb93f8000},{0xb93fa000},{0xb93fc000},{0xb93fe000}, +{0xb9400000},{0xb9402000},{0xb9404000},{0xb9406000},{0xb9408000},{0xb940a000},{0xb940c000},{0xb940e000},{0xb9410000},{0xb9412000},{0xb9414000},{0xb9416000},{0xb9418000},{0xb941a000},{0xb941c000},{0xb941e000},{0xb9420000},{0xb9422000},{0xb9424000},{0xb9426000},{0xb9428000},{0xb942a000},{0xb942c000},{0xb942e000},{0xb9430000},{0xb9432000},{0xb9434000},{0xb9436000},{0xb9438000},{0xb943a000},{0xb943c000},{0xb943e000}, +{0xb9440000},{0xb9442000},{0xb9444000},{0xb9446000},{0xb9448000},{0xb944a000},{0xb944c000},{0xb944e000},{0xb9450000},{0xb9452000},{0xb9454000},{0xb9456000},{0xb9458000},{0xb945a000},{0xb945c000},{0xb945e000},{0xb9460000},{0xb9462000},{0xb9464000},{0xb9466000},{0xb9468000},{0xb946a000},{0xb946c000},{0xb946e000},{0xb9470000},{0xb9472000},{0xb9474000},{0xb9476000},{0xb9478000},{0xb947a000},{0xb947c000},{0xb947e000}, +{0xb9480000},{0xb9482000},{0xb9484000},{0xb9486000},{0xb9488000},{0xb948a000},{0xb948c000},{0xb948e000},{0xb9490000},{0xb9492000},{0xb9494000},{0xb9496000},{0xb9498000},{0xb949a000},{0xb949c000},{0xb949e000},{0xb94a0000},{0xb94a2000},{0xb94a4000},{0xb94a6000},{0xb94a8000},{0xb94aa000},{0xb94ac000},{0xb94ae000},{0xb94b0000},{0xb94b2000},{0xb94b4000},{0xb94b6000},{0xb94b8000},{0xb94ba000},{0xb94bc000},{0xb94be000}, +{0xb94c0000},{0xb94c2000},{0xb94c4000},{0xb94c6000},{0xb94c8000},{0xb94ca000},{0xb94cc000},{0xb94ce000},{0xb94d0000},{0xb94d2000},{0xb94d4000},{0xb94d6000},{0xb94d8000},{0xb94da000},{0xb94dc000},{0xb94de000},{0xb94e0000},{0xb94e2000},{0xb94e4000},{0xb94e6000},{0xb94e8000},{0xb94ea000},{0xb94ec000},{0xb94ee000},{0xb94f0000},{0xb94f2000},{0xb94f4000},{0xb94f6000},{0xb94f8000},{0xb94fa000},{0xb94fc000},{0xb94fe000}, +{0xb9500000},{0xb9502000},{0xb9504000},{0xb9506000},{0xb9508000},{0xb950a000},{0xb950c000},{0xb950e000},{0xb9510000},{0xb9512000},{0xb9514000},{0xb9516000},{0xb9518000},{0xb951a000},{0xb951c000},{0xb951e000},{0xb9520000},{0xb9522000},{0xb9524000},{0xb9526000},{0xb9528000},{0xb952a000},{0xb952c000},{0xb952e000},{0xb9530000},{0xb9532000},{0xb9534000},{0xb9536000},{0xb9538000},{0xb953a000},{0xb953c000},{0xb953e000}, +{0xb9540000},{0xb9542000},{0xb9544000},{0xb9546000},{0xb9548000},{0xb954a000},{0xb954c000},{0xb954e000},{0xb9550000},{0xb9552000},{0xb9554000},{0xb9556000},{0xb9558000},{0xb955a000},{0xb955c000},{0xb955e000},{0xb9560000},{0xb9562000},{0xb9564000},{0xb9566000},{0xb9568000},{0xb956a000},{0xb956c000},{0xb956e000},{0xb9570000},{0xb9572000},{0xb9574000},{0xb9576000},{0xb9578000},{0xb957a000},{0xb957c000},{0xb957e000}, +{0xb9580000},{0xb9582000},{0xb9584000},{0xb9586000},{0xb9588000},{0xb958a000},{0xb958c000},{0xb958e000},{0xb9590000},{0xb9592000},{0xb9594000},{0xb9596000},{0xb9598000},{0xb959a000},{0xb959c000},{0xb959e000},{0xb95a0000},{0xb95a2000},{0xb95a4000},{0xb95a6000},{0xb95a8000},{0xb95aa000},{0xb95ac000},{0xb95ae000},{0xb95b0000},{0xb95b2000},{0xb95b4000},{0xb95b6000},{0xb95b8000},{0xb95ba000},{0xb95bc000},{0xb95be000}, +{0xb95c0000},{0xb95c2000},{0xb95c4000},{0xb95c6000},{0xb95c8000},{0xb95ca000},{0xb95cc000},{0xb95ce000},{0xb95d0000},{0xb95d2000},{0xb95d4000},{0xb95d6000},{0xb95d8000},{0xb95da000},{0xb95dc000},{0xb95de000},{0xb95e0000},{0xb95e2000},{0xb95e4000},{0xb95e6000},{0xb95e8000},{0xb95ea000},{0xb95ec000},{0xb95ee000},{0xb95f0000},{0xb95f2000},{0xb95f4000},{0xb95f6000},{0xb95f8000},{0xb95fa000},{0xb95fc000},{0xb95fe000}, +{0xb9600000},{0xb9602000},{0xb9604000},{0xb9606000},{0xb9608000},{0xb960a000},{0xb960c000},{0xb960e000},{0xb9610000},{0xb9612000},{0xb9614000},{0xb9616000},{0xb9618000},{0xb961a000},{0xb961c000},{0xb961e000},{0xb9620000},{0xb9622000},{0xb9624000},{0xb9626000},{0xb9628000},{0xb962a000},{0xb962c000},{0xb962e000},{0xb9630000},{0xb9632000},{0xb9634000},{0xb9636000},{0xb9638000},{0xb963a000},{0xb963c000},{0xb963e000}, +{0xb9640000},{0xb9642000},{0xb9644000},{0xb9646000},{0xb9648000},{0xb964a000},{0xb964c000},{0xb964e000},{0xb9650000},{0xb9652000},{0xb9654000},{0xb9656000},{0xb9658000},{0xb965a000},{0xb965c000},{0xb965e000},{0xb9660000},{0xb9662000},{0xb9664000},{0xb9666000},{0xb9668000},{0xb966a000},{0xb966c000},{0xb966e000},{0xb9670000},{0xb9672000},{0xb9674000},{0xb9676000},{0xb9678000},{0xb967a000},{0xb967c000},{0xb967e000}, +{0xb9680000},{0xb9682000},{0xb9684000},{0xb9686000},{0xb9688000},{0xb968a000},{0xb968c000},{0xb968e000},{0xb9690000},{0xb9692000},{0xb9694000},{0xb9696000},{0xb9698000},{0xb969a000},{0xb969c000},{0xb969e000},{0xb96a0000},{0xb96a2000},{0xb96a4000},{0xb96a6000},{0xb96a8000},{0xb96aa000},{0xb96ac000},{0xb96ae000},{0xb96b0000},{0xb96b2000},{0xb96b4000},{0xb96b6000},{0xb96b8000},{0xb96ba000},{0xb96bc000},{0xb96be000}, +{0xb96c0000},{0xb96c2000},{0xb96c4000},{0xb96c6000},{0xb96c8000},{0xb96ca000},{0xb96cc000},{0xb96ce000},{0xb96d0000},{0xb96d2000},{0xb96d4000},{0xb96d6000},{0xb96d8000},{0xb96da000},{0xb96dc000},{0xb96de000},{0xb96e0000},{0xb96e2000},{0xb96e4000},{0xb96e6000},{0xb96e8000},{0xb96ea000},{0xb96ec000},{0xb96ee000},{0xb96f0000},{0xb96f2000},{0xb96f4000},{0xb96f6000},{0xb96f8000},{0xb96fa000},{0xb96fc000},{0xb96fe000}, +{0xb9700000},{0xb9702000},{0xb9704000},{0xb9706000},{0xb9708000},{0xb970a000},{0xb970c000},{0xb970e000},{0xb9710000},{0xb9712000},{0xb9714000},{0xb9716000},{0xb9718000},{0xb971a000},{0xb971c000},{0xb971e000},{0xb9720000},{0xb9722000},{0xb9724000},{0xb9726000},{0xb9728000},{0xb972a000},{0xb972c000},{0xb972e000},{0xb9730000},{0xb9732000},{0xb9734000},{0xb9736000},{0xb9738000},{0xb973a000},{0xb973c000},{0xb973e000}, +{0xb9740000},{0xb9742000},{0xb9744000},{0xb9746000},{0xb9748000},{0xb974a000},{0xb974c000},{0xb974e000},{0xb9750000},{0xb9752000},{0xb9754000},{0xb9756000},{0xb9758000},{0xb975a000},{0xb975c000},{0xb975e000},{0xb9760000},{0xb9762000},{0xb9764000},{0xb9766000},{0xb9768000},{0xb976a000},{0xb976c000},{0xb976e000},{0xb9770000},{0xb9772000},{0xb9774000},{0xb9776000},{0xb9778000},{0xb977a000},{0xb977c000},{0xb977e000}, +{0xb9780000},{0xb9782000},{0xb9784000},{0xb9786000},{0xb9788000},{0xb978a000},{0xb978c000},{0xb978e000},{0xb9790000},{0xb9792000},{0xb9794000},{0xb9796000},{0xb9798000},{0xb979a000},{0xb979c000},{0xb979e000},{0xb97a0000},{0xb97a2000},{0xb97a4000},{0xb97a6000},{0xb97a8000},{0xb97aa000},{0xb97ac000},{0xb97ae000},{0xb97b0000},{0xb97b2000},{0xb97b4000},{0xb97b6000},{0xb97b8000},{0xb97ba000},{0xb97bc000},{0xb97be000}, +{0xb97c0000},{0xb97c2000},{0xb97c4000},{0xb97c6000},{0xb97c8000},{0xb97ca000},{0xb97cc000},{0xb97ce000},{0xb97d0000},{0xb97d2000},{0xb97d4000},{0xb97d6000},{0xb97d8000},{0xb97da000},{0xb97dc000},{0xb97de000},{0xb97e0000},{0xb97e2000},{0xb97e4000},{0xb97e6000},{0xb97e8000},{0xb97ea000},{0xb97ec000},{0xb97ee000},{0xb97f0000},{0xb97f2000},{0xb97f4000},{0xb97f6000},{0xb97f8000},{0xb97fa000},{0xb97fc000},{0xb97fe000}, +{0xb9800000},{0xb9802000},{0xb9804000},{0xb9806000},{0xb9808000},{0xb980a000},{0xb980c000},{0xb980e000},{0xb9810000},{0xb9812000},{0xb9814000},{0xb9816000},{0xb9818000},{0xb981a000},{0xb981c000},{0xb981e000},{0xb9820000},{0xb9822000},{0xb9824000},{0xb9826000},{0xb9828000},{0xb982a000},{0xb982c000},{0xb982e000},{0xb9830000},{0xb9832000},{0xb9834000},{0xb9836000},{0xb9838000},{0xb983a000},{0xb983c000},{0xb983e000}, +{0xb9840000},{0xb9842000},{0xb9844000},{0xb9846000},{0xb9848000},{0xb984a000},{0xb984c000},{0xb984e000},{0xb9850000},{0xb9852000},{0xb9854000},{0xb9856000},{0xb9858000},{0xb985a000},{0xb985c000},{0xb985e000},{0xb9860000},{0xb9862000},{0xb9864000},{0xb9866000},{0xb9868000},{0xb986a000},{0xb986c000},{0xb986e000},{0xb9870000},{0xb9872000},{0xb9874000},{0xb9876000},{0xb9878000},{0xb987a000},{0xb987c000},{0xb987e000}, +{0xb9880000},{0xb9882000},{0xb9884000},{0xb9886000},{0xb9888000},{0xb988a000},{0xb988c000},{0xb988e000},{0xb9890000},{0xb9892000},{0xb9894000},{0xb9896000},{0xb9898000},{0xb989a000},{0xb989c000},{0xb989e000},{0xb98a0000},{0xb98a2000},{0xb98a4000},{0xb98a6000},{0xb98a8000},{0xb98aa000},{0xb98ac000},{0xb98ae000},{0xb98b0000},{0xb98b2000},{0xb98b4000},{0xb98b6000},{0xb98b8000},{0xb98ba000},{0xb98bc000},{0xb98be000}, +{0xb98c0000},{0xb98c2000},{0xb98c4000},{0xb98c6000},{0xb98c8000},{0xb98ca000},{0xb98cc000},{0xb98ce000},{0xb98d0000},{0xb98d2000},{0xb98d4000},{0xb98d6000},{0xb98d8000},{0xb98da000},{0xb98dc000},{0xb98de000},{0xb98e0000},{0xb98e2000},{0xb98e4000},{0xb98e6000},{0xb98e8000},{0xb98ea000},{0xb98ec000},{0xb98ee000},{0xb98f0000},{0xb98f2000},{0xb98f4000},{0xb98f6000},{0xb98f8000},{0xb98fa000},{0xb98fc000},{0xb98fe000}, +{0xb9900000},{0xb9902000},{0xb9904000},{0xb9906000},{0xb9908000},{0xb990a000},{0xb990c000},{0xb990e000},{0xb9910000},{0xb9912000},{0xb9914000},{0xb9916000},{0xb9918000},{0xb991a000},{0xb991c000},{0xb991e000},{0xb9920000},{0xb9922000},{0xb9924000},{0xb9926000},{0xb9928000},{0xb992a000},{0xb992c000},{0xb992e000},{0xb9930000},{0xb9932000},{0xb9934000},{0xb9936000},{0xb9938000},{0xb993a000},{0xb993c000},{0xb993e000}, +{0xb9940000},{0xb9942000},{0xb9944000},{0xb9946000},{0xb9948000},{0xb994a000},{0xb994c000},{0xb994e000},{0xb9950000},{0xb9952000},{0xb9954000},{0xb9956000},{0xb9958000},{0xb995a000},{0xb995c000},{0xb995e000},{0xb9960000},{0xb9962000},{0xb9964000},{0xb9966000},{0xb9968000},{0xb996a000},{0xb996c000},{0xb996e000},{0xb9970000},{0xb9972000},{0xb9974000},{0xb9976000},{0xb9978000},{0xb997a000},{0xb997c000},{0xb997e000}, +{0xb9980000},{0xb9982000},{0xb9984000},{0xb9986000},{0xb9988000},{0xb998a000},{0xb998c000},{0xb998e000},{0xb9990000},{0xb9992000},{0xb9994000},{0xb9996000},{0xb9998000},{0xb999a000},{0xb999c000},{0xb999e000},{0xb99a0000},{0xb99a2000},{0xb99a4000},{0xb99a6000},{0xb99a8000},{0xb99aa000},{0xb99ac000},{0xb99ae000},{0xb99b0000},{0xb99b2000},{0xb99b4000},{0xb99b6000},{0xb99b8000},{0xb99ba000},{0xb99bc000},{0xb99be000}, +{0xb99c0000},{0xb99c2000},{0xb99c4000},{0xb99c6000},{0xb99c8000},{0xb99ca000},{0xb99cc000},{0xb99ce000},{0xb99d0000},{0xb99d2000},{0xb99d4000},{0xb99d6000},{0xb99d8000},{0xb99da000},{0xb99dc000},{0xb99de000},{0xb99e0000},{0xb99e2000},{0xb99e4000},{0xb99e6000},{0xb99e8000},{0xb99ea000},{0xb99ec000},{0xb99ee000},{0xb99f0000},{0xb99f2000},{0xb99f4000},{0xb99f6000},{0xb99f8000},{0xb99fa000},{0xb99fc000},{0xb99fe000}, +{0xb9a00000},{0xb9a02000},{0xb9a04000},{0xb9a06000},{0xb9a08000},{0xb9a0a000},{0xb9a0c000},{0xb9a0e000},{0xb9a10000},{0xb9a12000},{0xb9a14000},{0xb9a16000},{0xb9a18000},{0xb9a1a000},{0xb9a1c000},{0xb9a1e000},{0xb9a20000},{0xb9a22000},{0xb9a24000},{0xb9a26000},{0xb9a28000},{0xb9a2a000},{0xb9a2c000},{0xb9a2e000},{0xb9a30000},{0xb9a32000},{0xb9a34000},{0xb9a36000},{0xb9a38000},{0xb9a3a000},{0xb9a3c000},{0xb9a3e000}, +{0xb9a40000},{0xb9a42000},{0xb9a44000},{0xb9a46000},{0xb9a48000},{0xb9a4a000},{0xb9a4c000},{0xb9a4e000},{0xb9a50000},{0xb9a52000},{0xb9a54000},{0xb9a56000},{0xb9a58000},{0xb9a5a000},{0xb9a5c000},{0xb9a5e000},{0xb9a60000},{0xb9a62000},{0xb9a64000},{0xb9a66000},{0xb9a68000},{0xb9a6a000},{0xb9a6c000},{0xb9a6e000},{0xb9a70000},{0xb9a72000},{0xb9a74000},{0xb9a76000},{0xb9a78000},{0xb9a7a000},{0xb9a7c000},{0xb9a7e000}, +{0xb9a80000},{0xb9a82000},{0xb9a84000},{0xb9a86000},{0xb9a88000},{0xb9a8a000},{0xb9a8c000},{0xb9a8e000},{0xb9a90000},{0xb9a92000},{0xb9a94000},{0xb9a96000},{0xb9a98000},{0xb9a9a000},{0xb9a9c000},{0xb9a9e000},{0xb9aa0000},{0xb9aa2000},{0xb9aa4000},{0xb9aa6000},{0xb9aa8000},{0xb9aaa000},{0xb9aac000},{0xb9aae000},{0xb9ab0000},{0xb9ab2000},{0xb9ab4000},{0xb9ab6000},{0xb9ab8000},{0xb9aba000},{0xb9abc000},{0xb9abe000}, +{0xb9ac0000},{0xb9ac2000},{0xb9ac4000},{0xb9ac6000},{0xb9ac8000},{0xb9aca000},{0xb9acc000},{0xb9ace000},{0xb9ad0000},{0xb9ad2000},{0xb9ad4000},{0xb9ad6000},{0xb9ad8000},{0xb9ada000},{0xb9adc000},{0xb9ade000},{0xb9ae0000},{0xb9ae2000},{0xb9ae4000},{0xb9ae6000},{0xb9ae8000},{0xb9aea000},{0xb9aec000},{0xb9aee000},{0xb9af0000},{0xb9af2000},{0xb9af4000},{0xb9af6000},{0xb9af8000},{0xb9afa000},{0xb9afc000},{0xb9afe000}, +{0xb9b00000},{0xb9b02000},{0xb9b04000},{0xb9b06000},{0xb9b08000},{0xb9b0a000},{0xb9b0c000},{0xb9b0e000},{0xb9b10000},{0xb9b12000},{0xb9b14000},{0xb9b16000},{0xb9b18000},{0xb9b1a000},{0xb9b1c000},{0xb9b1e000},{0xb9b20000},{0xb9b22000},{0xb9b24000},{0xb9b26000},{0xb9b28000},{0xb9b2a000},{0xb9b2c000},{0xb9b2e000},{0xb9b30000},{0xb9b32000},{0xb9b34000},{0xb9b36000},{0xb9b38000},{0xb9b3a000},{0xb9b3c000},{0xb9b3e000}, +{0xb9b40000},{0xb9b42000},{0xb9b44000},{0xb9b46000},{0xb9b48000},{0xb9b4a000},{0xb9b4c000},{0xb9b4e000},{0xb9b50000},{0xb9b52000},{0xb9b54000},{0xb9b56000},{0xb9b58000},{0xb9b5a000},{0xb9b5c000},{0xb9b5e000},{0xb9b60000},{0xb9b62000},{0xb9b64000},{0xb9b66000},{0xb9b68000},{0xb9b6a000},{0xb9b6c000},{0xb9b6e000},{0xb9b70000},{0xb9b72000},{0xb9b74000},{0xb9b76000},{0xb9b78000},{0xb9b7a000},{0xb9b7c000},{0xb9b7e000}, +{0xb9b80000},{0xb9b82000},{0xb9b84000},{0xb9b86000},{0xb9b88000},{0xb9b8a000},{0xb9b8c000},{0xb9b8e000},{0xb9b90000},{0xb9b92000},{0xb9b94000},{0xb9b96000},{0xb9b98000},{0xb9b9a000},{0xb9b9c000},{0xb9b9e000},{0xb9ba0000},{0xb9ba2000},{0xb9ba4000},{0xb9ba6000},{0xb9ba8000},{0xb9baa000},{0xb9bac000},{0xb9bae000},{0xb9bb0000},{0xb9bb2000},{0xb9bb4000},{0xb9bb6000},{0xb9bb8000},{0xb9bba000},{0xb9bbc000},{0xb9bbe000}, +{0xb9bc0000},{0xb9bc2000},{0xb9bc4000},{0xb9bc6000},{0xb9bc8000},{0xb9bca000},{0xb9bcc000},{0xb9bce000},{0xb9bd0000},{0xb9bd2000},{0xb9bd4000},{0xb9bd6000},{0xb9bd8000},{0xb9bda000},{0xb9bdc000},{0xb9bde000},{0xb9be0000},{0xb9be2000},{0xb9be4000},{0xb9be6000},{0xb9be8000},{0xb9bea000},{0xb9bec000},{0xb9bee000},{0xb9bf0000},{0xb9bf2000},{0xb9bf4000},{0xb9bf6000},{0xb9bf8000},{0xb9bfa000},{0xb9bfc000},{0xb9bfe000}, +{0xb9c00000},{0xb9c02000},{0xb9c04000},{0xb9c06000},{0xb9c08000},{0xb9c0a000},{0xb9c0c000},{0xb9c0e000},{0xb9c10000},{0xb9c12000},{0xb9c14000},{0xb9c16000},{0xb9c18000},{0xb9c1a000},{0xb9c1c000},{0xb9c1e000},{0xb9c20000},{0xb9c22000},{0xb9c24000},{0xb9c26000},{0xb9c28000},{0xb9c2a000},{0xb9c2c000},{0xb9c2e000},{0xb9c30000},{0xb9c32000},{0xb9c34000},{0xb9c36000},{0xb9c38000},{0xb9c3a000},{0xb9c3c000},{0xb9c3e000}, +{0xb9c40000},{0xb9c42000},{0xb9c44000},{0xb9c46000},{0xb9c48000},{0xb9c4a000},{0xb9c4c000},{0xb9c4e000},{0xb9c50000},{0xb9c52000},{0xb9c54000},{0xb9c56000},{0xb9c58000},{0xb9c5a000},{0xb9c5c000},{0xb9c5e000},{0xb9c60000},{0xb9c62000},{0xb9c64000},{0xb9c66000},{0xb9c68000},{0xb9c6a000},{0xb9c6c000},{0xb9c6e000},{0xb9c70000},{0xb9c72000},{0xb9c74000},{0xb9c76000},{0xb9c78000},{0xb9c7a000},{0xb9c7c000},{0xb9c7e000}, +{0xb9c80000},{0xb9c82000},{0xb9c84000},{0xb9c86000},{0xb9c88000},{0xb9c8a000},{0xb9c8c000},{0xb9c8e000},{0xb9c90000},{0xb9c92000},{0xb9c94000},{0xb9c96000},{0xb9c98000},{0xb9c9a000},{0xb9c9c000},{0xb9c9e000},{0xb9ca0000},{0xb9ca2000},{0xb9ca4000},{0xb9ca6000},{0xb9ca8000},{0xb9caa000},{0xb9cac000},{0xb9cae000},{0xb9cb0000},{0xb9cb2000},{0xb9cb4000},{0xb9cb6000},{0xb9cb8000},{0xb9cba000},{0xb9cbc000},{0xb9cbe000}, +{0xb9cc0000},{0xb9cc2000},{0xb9cc4000},{0xb9cc6000},{0xb9cc8000},{0xb9cca000},{0xb9ccc000},{0xb9cce000},{0xb9cd0000},{0xb9cd2000},{0xb9cd4000},{0xb9cd6000},{0xb9cd8000},{0xb9cda000},{0xb9cdc000},{0xb9cde000},{0xb9ce0000},{0xb9ce2000},{0xb9ce4000},{0xb9ce6000},{0xb9ce8000},{0xb9cea000},{0xb9cec000},{0xb9cee000},{0xb9cf0000},{0xb9cf2000},{0xb9cf4000},{0xb9cf6000},{0xb9cf8000},{0xb9cfa000},{0xb9cfc000},{0xb9cfe000}, +{0xb9d00000},{0xb9d02000},{0xb9d04000},{0xb9d06000},{0xb9d08000},{0xb9d0a000},{0xb9d0c000},{0xb9d0e000},{0xb9d10000},{0xb9d12000},{0xb9d14000},{0xb9d16000},{0xb9d18000},{0xb9d1a000},{0xb9d1c000},{0xb9d1e000},{0xb9d20000},{0xb9d22000},{0xb9d24000},{0xb9d26000},{0xb9d28000},{0xb9d2a000},{0xb9d2c000},{0xb9d2e000},{0xb9d30000},{0xb9d32000},{0xb9d34000},{0xb9d36000},{0xb9d38000},{0xb9d3a000},{0xb9d3c000},{0xb9d3e000}, +{0xb9d40000},{0xb9d42000},{0xb9d44000},{0xb9d46000},{0xb9d48000},{0xb9d4a000},{0xb9d4c000},{0xb9d4e000},{0xb9d50000},{0xb9d52000},{0xb9d54000},{0xb9d56000},{0xb9d58000},{0xb9d5a000},{0xb9d5c000},{0xb9d5e000},{0xb9d60000},{0xb9d62000},{0xb9d64000},{0xb9d66000},{0xb9d68000},{0xb9d6a000},{0xb9d6c000},{0xb9d6e000},{0xb9d70000},{0xb9d72000},{0xb9d74000},{0xb9d76000},{0xb9d78000},{0xb9d7a000},{0xb9d7c000},{0xb9d7e000}, +{0xb9d80000},{0xb9d82000},{0xb9d84000},{0xb9d86000},{0xb9d88000},{0xb9d8a000},{0xb9d8c000},{0xb9d8e000},{0xb9d90000},{0xb9d92000},{0xb9d94000},{0xb9d96000},{0xb9d98000},{0xb9d9a000},{0xb9d9c000},{0xb9d9e000},{0xb9da0000},{0xb9da2000},{0xb9da4000},{0xb9da6000},{0xb9da8000},{0xb9daa000},{0xb9dac000},{0xb9dae000},{0xb9db0000},{0xb9db2000},{0xb9db4000},{0xb9db6000},{0xb9db8000},{0xb9dba000},{0xb9dbc000},{0xb9dbe000}, +{0xb9dc0000},{0xb9dc2000},{0xb9dc4000},{0xb9dc6000},{0xb9dc8000},{0xb9dca000},{0xb9dcc000},{0xb9dce000},{0xb9dd0000},{0xb9dd2000},{0xb9dd4000},{0xb9dd6000},{0xb9dd8000},{0xb9dda000},{0xb9ddc000},{0xb9dde000},{0xb9de0000},{0xb9de2000},{0xb9de4000},{0xb9de6000},{0xb9de8000},{0xb9dea000},{0xb9dec000},{0xb9dee000},{0xb9df0000},{0xb9df2000},{0xb9df4000},{0xb9df6000},{0xb9df8000},{0xb9dfa000},{0xb9dfc000},{0xb9dfe000}, +{0xb9e00000},{0xb9e02000},{0xb9e04000},{0xb9e06000},{0xb9e08000},{0xb9e0a000},{0xb9e0c000},{0xb9e0e000},{0xb9e10000},{0xb9e12000},{0xb9e14000},{0xb9e16000},{0xb9e18000},{0xb9e1a000},{0xb9e1c000},{0xb9e1e000},{0xb9e20000},{0xb9e22000},{0xb9e24000},{0xb9e26000},{0xb9e28000},{0xb9e2a000},{0xb9e2c000},{0xb9e2e000},{0xb9e30000},{0xb9e32000},{0xb9e34000},{0xb9e36000},{0xb9e38000},{0xb9e3a000},{0xb9e3c000},{0xb9e3e000}, +{0xb9e40000},{0xb9e42000},{0xb9e44000},{0xb9e46000},{0xb9e48000},{0xb9e4a000},{0xb9e4c000},{0xb9e4e000},{0xb9e50000},{0xb9e52000},{0xb9e54000},{0xb9e56000},{0xb9e58000},{0xb9e5a000},{0xb9e5c000},{0xb9e5e000},{0xb9e60000},{0xb9e62000},{0xb9e64000},{0xb9e66000},{0xb9e68000},{0xb9e6a000},{0xb9e6c000},{0xb9e6e000},{0xb9e70000},{0xb9e72000},{0xb9e74000},{0xb9e76000},{0xb9e78000},{0xb9e7a000},{0xb9e7c000},{0xb9e7e000}, +{0xb9e80000},{0xb9e82000},{0xb9e84000},{0xb9e86000},{0xb9e88000},{0xb9e8a000},{0xb9e8c000},{0xb9e8e000},{0xb9e90000},{0xb9e92000},{0xb9e94000},{0xb9e96000},{0xb9e98000},{0xb9e9a000},{0xb9e9c000},{0xb9e9e000},{0xb9ea0000},{0xb9ea2000},{0xb9ea4000},{0xb9ea6000},{0xb9ea8000},{0xb9eaa000},{0xb9eac000},{0xb9eae000},{0xb9eb0000},{0xb9eb2000},{0xb9eb4000},{0xb9eb6000},{0xb9eb8000},{0xb9eba000},{0xb9ebc000},{0xb9ebe000}, +{0xb9ec0000},{0xb9ec2000},{0xb9ec4000},{0xb9ec6000},{0xb9ec8000},{0xb9eca000},{0xb9ecc000},{0xb9ece000},{0xb9ed0000},{0xb9ed2000},{0xb9ed4000},{0xb9ed6000},{0xb9ed8000},{0xb9eda000},{0xb9edc000},{0xb9ede000},{0xb9ee0000},{0xb9ee2000},{0xb9ee4000},{0xb9ee6000},{0xb9ee8000},{0xb9eea000},{0xb9eec000},{0xb9eee000},{0xb9ef0000},{0xb9ef2000},{0xb9ef4000},{0xb9ef6000},{0xb9ef8000},{0xb9efa000},{0xb9efc000},{0xb9efe000}, +{0xb9f00000},{0xb9f02000},{0xb9f04000},{0xb9f06000},{0xb9f08000},{0xb9f0a000},{0xb9f0c000},{0xb9f0e000},{0xb9f10000},{0xb9f12000},{0xb9f14000},{0xb9f16000},{0xb9f18000},{0xb9f1a000},{0xb9f1c000},{0xb9f1e000},{0xb9f20000},{0xb9f22000},{0xb9f24000},{0xb9f26000},{0xb9f28000},{0xb9f2a000},{0xb9f2c000},{0xb9f2e000},{0xb9f30000},{0xb9f32000},{0xb9f34000},{0xb9f36000},{0xb9f38000},{0xb9f3a000},{0xb9f3c000},{0xb9f3e000}, +{0xb9f40000},{0xb9f42000},{0xb9f44000},{0xb9f46000},{0xb9f48000},{0xb9f4a000},{0xb9f4c000},{0xb9f4e000},{0xb9f50000},{0xb9f52000},{0xb9f54000},{0xb9f56000},{0xb9f58000},{0xb9f5a000},{0xb9f5c000},{0xb9f5e000},{0xb9f60000},{0xb9f62000},{0xb9f64000},{0xb9f66000},{0xb9f68000},{0xb9f6a000},{0xb9f6c000},{0xb9f6e000},{0xb9f70000},{0xb9f72000},{0xb9f74000},{0xb9f76000},{0xb9f78000},{0xb9f7a000},{0xb9f7c000},{0xb9f7e000}, +{0xb9f80000},{0xb9f82000},{0xb9f84000},{0xb9f86000},{0xb9f88000},{0xb9f8a000},{0xb9f8c000},{0xb9f8e000},{0xb9f90000},{0xb9f92000},{0xb9f94000},{0xb9f96000},{0xb9f98000},{0xb9f9a000},{0xb9f9c000},{0xb9f9e000},{0xb9fa0000},{0xb9fa2000},{0xb9fa4000},{0xb9fa6000},{0xb9fa8000},{0xb9faa000},{0xb9fac000},{0xb9fae000},{0xb9fb0000},{0xb9fb2000},{0xb9fb4000},{0xb9fb6000},{0xb9fb8000},{0xb9fba000},{0xb9fbc000},{0xb9fbe000}, +{0xb9fc0000},{0xb9fc2000},{0xb9fc4000},{0xb9fc6000},{0xb9fc8000},{0xb9fca000},{0xb9fcc000},{0xb9fce000},{0xb9fd0000},{0xb9fd2000},{0xb9fd4000},{0xb9fd6000},{0xb9fd8000},{0xb9fda000},{0xb9fdc000},{0xb9fde000},{0xb9fe0000},{0xb9fe2000},{0xb9fe4000},{0xb9fe6000},{0xb9fe8000},{0xb9fea000},{0xb9fec000},{0xb9fee000},{0xb9ff0000},{0xb9ff2000},{0xb9ff4000},{0xb9ff6000},{0xb9ff8000},{0xb9ffa000},{0xb9ffc000},{0xb9ffe000}, +{0xba000000},{0xba002000},{0xba004000},{0xba006000},{0xba008000},{0xba00a000},{0xba00c000},{0xba00e000},{0xba010000},{0xba012000},{0xba014000},{0xba016000},{0xba018000},{0xba01a000},{0xba01c000},{0xba01e000},{0xba020000},{0xba022000},{0xba024000},{0xba026000},{0xba028000},{0xba02a000},{0xba02c000},{0xba02e000},{0xba030000},{0xba032000},{0xba034000},{0xba036000},{0xba038000},{0xba03a000},{0xba03c000},{0xba03e000}, +{0xba040000},{0xba042000},{0xba044000},{0xba046000},{0xba048000},{0xba04a000},{0xba04c000},{0xba04e000},{0xba050000},{0xba052000},{0xba054000},{0xba056000},{0xba058000},{0xba05a000},{0xba05c000},{0xba05e000},{0xba060000},{0xba062000},{0xba064000},{0xba066000},{0xba068000},{0xba06a000},{0xba06c000},{0xba06e000},{0xba070000},{0xba072000},{0xba074000},{0xba076000},{0xba078000},{0xba07a000},{0xba07c000},{0xba07e000}, +{0xba080000},{0xba082000},{0xba084000},{0xba086000},{0xba088000},{0xba08a000},{0xba08c000},{0xba08e000},{0xba090000},{0xba092000},{0xba094000},{0xba096000},{0xba098000},{0xba09a000},{0xba09c000},{0xba09e000},{0xba0a0000},{0xba0a2000},{0xba0a4000},{0xba0a6000},{0xba0a8000},{0xba0aa000},{0xba0ac000},{0xba0ae000},{0xba0b0000},{0xba0b2000},{0xba0b4000},{0xba0b6000},{0xba0b8000},{0xba0ba000},{0xba0bc000},{0xba0be000}, +{0xba0c0000},{0xba0c2000},{0xba0c4000},{0xba0c6000},{0xba0c8000},{0xba0ca000},{0xba0cc000},{0xba0ce000},{0xba0d0000},{0xba0d2000},{0xba0d4000},{0xba0d6000},{0xba0d8000},{0xba0da000},{0xba0dc000},{0xba0de000},{0xba0e0000},{0xba0e2000},{0xba0e4000},{0xba0e6000},{0xba0e8000},{0xba0ea000},{0xba0ec000},{0xba0ee000},{0xba0f0000},{0xba0f2000},{0xba0f4000},{0xba0f6000},{0xba0f8000},{0xba0fa000},{0xba0fc000},{0xba0fe000}, +{0xba100000},{0xba102000},{0xba104000},{0xba106000},{0xba108000},{0xba10a000},{0xba10c000},{0xba10e000},{0xba110000},{0xba112000},{0xba114000},{0xba116000},{0xba118000},{0xba11a000},{0xba11c000},{0xba11e000},{0xba120000},{0xba122000},{0xba124000},{0xba126000},{0xba128000},{0xba12a000},{0xba12c000},{0xba12e000},{0xba130000},{0xba132000},{0xba134000},{0xba136000},{0xba138000},{0xba13a000},{0xba13c000},{0xba13e000}, +{0xba140000},{0xba142000},{0xba144000},{0xba146000},{0xba148000},{0xba14a000},{0xba14c000},{0xba14e000},{0xba150000},{0xba152000},{0xba154000},{0xba156000},{0xba158000},{0xba15a000},{0xba15c000},{0xba15e000},{0xba160000},{0xba162000},{0xba164000},{0xba166000},{0xba168000},{0xba16a000},{0xba16c000},{0xba16e000},{0xba170000},{0xba172000},{0xba174000},{0xba176000},{0xba178000},{0xba17a000},{0xba17c000},{0xba17e000}, +{0xba180000},{0xba182000},{0xba184000},{0xba186000},{0xba188000},{0xba18a000},{0xba18c000},{0xba18e000},{0xba190000},{0xba192000},{0xba194000},{0xba196000},{0xba198000},{0xba19a000},{0xba19c000},{0xba19e000},{0xba1a0000},{0xba1a2000},{0xba1a4000},{0xba1a6000},{0xba1a8000},{0xba1aa000},{0xba1ac000},{0xba1ae000},{0xba1b0000},{0xba1b2000},{0xba1b4000},{0xba1b6000},{0xba1b8000},{0xba1ba000},{0xba1bc000},{0xba1be000}, +{0xba1c0000},{0xba1c2000},{0xba1c4000},{0xba1c6000},{0xba1c8000},{0xba1ca000},{0xba1cc000},{0xba1ce000},{0xba1d0000},{0xba1d2000},{0xba1d4000},{0xba1d6000},{0xba1d8000},{0xba1da000},{0xba1dc000},{0xba1de000},{0xba1e0000},{0xba1e2000},{0xba1e4000},{0xba1e6000},{0xba1e8000},{0xba1ea000},{0xba1ec000},{0xba1ee000},{0xba1f0000},{0xba1f2000},{0xba1f4000},{0xba1f6000},{0xba1f8000},{0xba1fa000},{0xba1fc000},{0xba1fe000}, +{0xba200000},{0xba202000},{0xba204000},{0xba206000},{0xba208000},{0xba20a000},{0xba20c000},{0xba20e000},{0xba210000},{0xba212000},{0xba214000},{0xba216000},{0xba218000},{0xba21a000},{0xba21c000},{0xba21e000},{0xba220000},{0xba222000},{0xba224000},{0xba226000},{0xba228000},{0xba22a000},{0xba22c000},{0xba22e000},{0xba230000},{0xba232000},{0xba234000},{0xba236000},{0xba238000},{0xba23a000},{0xba23c000},{0xba23e000}, +{0xba240000},{0xba242000},{0xba244000},{0xba246000},{0xba248000},{0xba24a000},{0xba24c000},{0xba24e000},{0xba250000},{0xba252000},{0xba254000},{0xba256000},{0xba258000},{0xba25a000},{0xba25c000},{0xba25e000},{0xba260000},{0xba262000},{0xba264000},{0xba266000},{0xba268000},{0xba26a000},{0xba26c000},{0xba26e000},{0xba270000},{0xba272000},{0xba274000},{0xba276000},{0xba278000},{0xba27a000},{0xba27c000},{0xba27e000}, +{0xba280000},{0xba282000},{0xba284000},{0xba286000},{0xba288000},{0xba28a000},{0xba28c000},{0xba28e000},{0xba290000},{0xba292000},{0xba294000},{0xba296000},{0xba298000},{0xba29a000},{0xba29c000},{0xba29e000},{0xba2a0000},{0xba2a2000},{0xba2a4000},{0xba2a6000},{0xba2a8000},{0xba2aa000},{0xba2ac000},{0xba2ae000},{0xba2b0000},{0xba2b2000},{0xba2b4000},{0xba2b6000},{0xba2b8000},{0xba2ba000},{0xba2bc000},{0xba2be000}, +{0xba2c0000},{0xba2c2000},{0xba2c4000},{0xba2c6000},{0xba2c8000},{0xba2ca000},{0xba2cc000},{0xba2ce000},{0xba2d0000},{0xba2d2000},{0xba2d4000},{0xba2d6000},{0xba2d8000},{0xba2da000},{0xba2dc000},{0xba2de000},{0xba2e0000},{0xba2e2000},{0xba2e4000},{0xba2e6000},{0xba2e8000},{0xba2ea000},{0xba2ec000},{0xba2ee000},{0xba2f0000},{0xba2f2000},{0xba2f4000},{0xba2f6000},{0xba2f8000},{0xba2fa000},{0xba2fc000},{0xba2fe000}, +{0xba300000},{0xba302000},{0xba304000},{0xba306000},{0xba308000},{0xba30a000},{0xba30c000},{0xba30e000},{0xba310000},{0xba312000},{0xba314000},{0xba316000},{0xba318000},{0xba31a000},{0xba31c000},{0xba31e000},{0xba320000},{0xba322000},{0xba324000},{0xba326000},{0xba328000},{0xba32a000},{0xba32c000},{0xba32e000},{0xba330000},{0xba332000},{0xba334000},{0xba336000},{0xba338000},{0xba33a000},{0xba33c000},{0xba33e000}, +{0xba340000},{0xba342000},{0xba344000},{0xba346000},{0xba348000},{0xba34a000},{0xba34c000},{0xba34e000},{0xba350000},{0xba352000},{0xba354000},{0xba356000},{0xba358000},{0xba35a000},{0xba35c000},{0xba35e000},{0xba360000},{0xba362000},{0xba364000},{0xba366000},{0xba368000},{0xba36a000},{0xba36c000},{0xba36e000},{0xba370000},{0xba372000},{0xba374000},{0xba376000},{0xba378000},{0xba37a000},{0xba37c000},{0xba37e000}, +{0xba380000},{0xba382000},{0xba384000},{0xba386000},{0xba388000},{0xba38a000},{0xba38c000},{0xba38e000},{0xba390000},{0xba392000},{0xba394000},{0xba396000},{0xba398000},{0xba39a000},{0xba39c000},{0xba39e000},{0xba3a0000},{0xba3a2000},{0xba3a4000},{0xba3a6000},{0xba3a8000},{0xba3aa000},{0xba3ac000},{0xba3ae000},{0xba3b0000},{0xba3b2000},{0xba3b4000},{0xba3b6000},{0xba3b8000},{0xba3ba000},{0xba3bc000},{0xba3be000}, +{0xba3c0000},{0xba3c2000},{0xba3c4000},{0xba3c6000},{0xba3c8000},{0xba3ca000},{0xba3cc000},{0xba3ce000},{0xba3d0000},{0xba3d2000},{0xba3d4000},{0xba3d6000},{0xba3d8000},{0xba3da000},{0xba3dc000},{0xba3de000},{0xba3e0000},{0xba3e2000},{0xba3e4000},{0xba3e6000},{0xba3e8000},{0xba3ea000},{0xba3ec000},{0xba3ee000},{0xba3f0000},{0xba3f2000},{0xba3f4000},{0xba3f6000},{0xba3f8000},{0xba3fa000},{0xba3fc000},{0xba3fe000}, +{0xba400000},{0xba402000},{0xba404000},{0xba406000},{0xba408000},{0xba40a000},{0xba40c000},{0xba40e000},{0xba410000},{0xba412000},{0xba414000},{0xba416000},{0xba418000},{0xba41a000},{0xba41c000},{0xba41e000},{0xba420000},{0xba422000},{0xba424000},{0xba426000},{0xba428000},{0xba42a000},{0xba42c000},{0xba42e000},{0xba430000},{0xba432000},{0xba434000},{0xba436000},{0xba438000},{0xba43a000},{0xba43c000},{0xba43e000}, +{0xba440000},{0xba442000},{0xba444000},{0xba446000},{0xba448000},{0xba44a000},{0xba44c000},{0xba44e000},{0xba450000},{0xba452000},{0xba454000},{0xba456000},{0xba458000},{0xba45a000},{0xba45c000},{0xba45e000},{0xba460000},{0xba462000},{0xba464000},{0xba466000},{0xba468000},{0xba46a000},{0xba46c000},{0xba46e000},{0xba470000},{0xba472000},{0xba474000},{0xba476000},{0xba478000},{0xba47a000},{0xba47c000},{0xba47e000}, +{0xba480000},{0xba482000},{0xba484000},{0xba486000},{0xba488000},{0xba48a000},{0xba48c000},{0xba48e000},{0xba490000},{0xba492000},{0xba494000},{0xba496000},{0xba498000},{0xba49a000},{0xba49c000},{0xba49e000},{0xba4a0000},{0xba4a2000},{0xba4a4000},{0xba4a6000},{0xba4a8000},{0xba4aa000},{0xba4ac000},{0xba4ae000},{0xba4b0000},{0xba4b2000},{0xba4b4000},{0xba4b6000},{0xba4b8000},{0xba4ba000},{0xba4bc000},{0xba4be000}, +{0xba4c0000},{0xba4c2000},{0xba4c4000},{0xba4c6000},{0xba4c8000},{0xba4ca000},{0xba4cc000},{0xba4ce000},{0xba4d0000},{0xba4d2000},{0xba4d4000},{0xba4d6000},{0xba4d8000},{0xba4da000},{0xba4dc000},{0xba4de000},{0xba4e0000},{0xba4e2000},{0xba4e4000},{0xba4e6000},{0xba4e8000},{0xba4ea000},{0xba4ec000},{0xba4ee000},{0xba4f0000},{0xba4f2000},{0xba4f4000},{0xba4f6000},{0xba4f8000},{0xba4fa000},{0xba4fc000},{0xba4fe000}, +{0xba500000},{0xba502000},{0xba504000},{0xba506000},{0xba508000},{0xba50a000},{0xba50c000},{0xba50e000},{0xba510000},{0xba512000},{0xba514000},{0xba516000},{0xba518000},{0xba51a000},{0xba51c000},{0xba51e000},{0xba520000},{0xba522000},{0xba524000},{0xba526000},{0xba528000},{0xba52a000},{0xba52c000},{0xba52e000},{0xba530000},{0xba532000},{0xba534000},{0xba536000},{0xba538000},{0xba53a000},{0xba53c000},{0xba53e000}, +{0xba540000},{0xba542000},{0xba544000},{0xba546000},{0xba548000},{0xba54a000},{0xba54c000},{0xba54e000},{0xba550000},{0xba552000},{0xba554000},{0xba556000},{0xba558000},{0xba55a000},{0xba55c000},{0xba55e000},{0xba560000},{0xba562000},{0xba564000},{0xba566000},{0xba568000},{0xba56a000},{0xba56c000},{0xba56e000},{0xba570000},{0xba572000},{0xba574000},{0xba576000},{0xba578000},{0xba57a000},{0xba57c000},{0xba57e000}, +{0xba580000},{0xba582000},{0xba584000},{0xba586000},{0xba588000},{0xba58a000},{0xba58c000},{0xba58e000},{0xba590000},{0xba592000},{0xba594000},{0xba596000},{0xba598000},{0xba59a000},{0xba59c000},{0xba59e000},{0xba5a0000},{0xba5a2000},{0xba5a4000},{0xba5a6000},{0xba5a8000},{0xba5aa000},{0xba5ac000},{0xba5ae000},{0xba5b0000},{0xba5b2000},{0xba5b4000},{0xba5b6000},{0xba5b8000},{0xba5ba000},{0xba5bc000},{0xba5be000}, +{0xba5c0000},{0xba5c2000},{0xba5c4000},{0xba5c6000},{0xba5c8000},{0xba5ca000},{0xba5cc000},{0xba5ce000},{0xba5d0000},{0xba5d2000},{0xba5d4000},{0xba5d6000},{0xba5d8000},{0xba5da000},{0xba5dc000},{0xba5de000},{0xba5e0000},{0xba5e2000},{0xba5e4000},{0xba5e6000},{0xba5e8000},{0xba5ea000},{0xba5ec000},{0xba5ee000},{0xba5f0000},{0xba5f2000},{0xba5f4000},{0xba5f6000},{0xba5f8000},{0xba5fa000},{0xba5fc000},{0xba5fe000}, +{0xba600000},{0xba602000},{0xba604000},{0xba606000},{0xba608000},{0xba60a000},{0xba60c000},{0xba60e000},{0xba610000},{0xba612000},{0xba614000},{0xba616000},{0xba618000},{0xba61a000},{0xba61c000},{0xba61e000},{0xba620000},{0xba622000},{0xba624000},{0xba626000},{0xba628000},{0xba62a000},{0xba62c000},{0xba62e000},{0xba630000},{0xba632000},{0xba634000},{0xba636000},{0xba638000},{0xba63a000},{0xba63c000},{0xba63e000}, +{0xba640000},{0xba642000},{0xba644000},{0xba646000},{0xba648000},{0xba64a000},{0xba64c000},{0xba64e000},{0xba650000},{0xba652000},{0xba654000},{0xba656000},{0xba658000},{0xba65a000},{0xba65c000},{0xba65e000},{0xba660000},{0xba662000},{0xba664000},{0xba666000},{0xba668000},{0xba66a000},{0xba66c000},{0xba66e000},{0xba670000},{0xba672000},{0xba674000},{0xba676000},{0xba678000},{0xba67a000},{0xba67c000},{0xba67e000}, +{0xba680000},{0xba682000},{0xba684000},{0xba686000},{0xba688000},{0xba68a000},{0xba68c000},{0xba68e000},{0xba690000},{0xba692000},{0xba694000},{0xba696000},{0xba698000},{0xba69a000},{0xba69c000},{0xba69e000},{0xba6a0000},{0xba6a2000},{0xba6a4000},{0xba6a6000},{0xba6a8000},{0xba6aa000},{0xba6ac000},{0xba6ae000},{0xba6b0000},{0xba6b2000},{0xba6b4000},{0xba6b6000},{0xba6b8000},{0xba6ba000},{0xba6bc000},{0xba6be000}, +{0xba6c0000},{0xba6c2000},{0xba6c4000},{0xba6c6000},{0xba6c8000},{0xba6ca000},{0xba6cc000},{0xba6ce000},{0xba6d0000},{0xba6d2000},{0xba6d4000},{0xba6d6000},{0xba6d8000},{0xba6da000},{0xba6dc000},{0xba6de000},{0xba6e0000},{0xba6e2000},{0xba6e4000},{0xba6e6000},{0xba6e8000},{0xba6ea000},{0xba6ec000},{0xba6ee000},{0xba6f0000},{0xba6f2000},{0xba6f4000},{0xba6f6000},{0xba6f8000},{0xba6fa000},{0xba6fc000},{0xba6fe000}, +{0xba700000},{0xba702000},{0xba704000},{0xba706000},{0xba708000},{0xba70a000},{0xba70c000},{0xba70e000},{0xba710000},{0xba712000},{0xba714000},{0xba716000},{0xba718000},{0xba71a000},{0xba71c000},{0xba71e000},{0xba720000},{0xba722000},{0xba724000},{0xba726000},{0xba728000},{0xba72a000},{0xba72c000},{0xba72e000},{0xba730000},{0xba732000},{0xba734000},{0xba736000},{0xba738000},{0xba73a000},{0xba73c000},{0xba73e000}, +{0xba740000},{0xba742000},{0xba744000},{0xba746000},{0xba748000},{0xba74a000},{0xba74c000},{0xba74e000},{0xba750000},{0xba752000},{0xba754000},{0xba756000},{0xba758000},{0xba75a000},{0xba75c000},{0xba75e000},{0xba760000},{0xba762000},{0xba764000},{0xba766000},{0xba768000},{0xba76a000},{0xba76c000},{0xba76e000},{0xba770000},{0xba772000},{0xba774000},{0xba776000},{0xba778000},{0xba77a000},{0xba77c000},{0xba77e000}, +{0xba780000},{0xba782000},{0xba784000},{0xba786000},{0xba788000},{0xba78a000},{0xba78c000},{0xba78e000},{0xba790000},{0xba792000},{0xba794000},{0xba796000},{0xba798000},{0xba79a000},{0xba79c000},{0xba79e000},{0xba7a0000},{0xba7a2000},{0xba7a4000},{0xba7a6000},{0xba7a8000},{0xba7aa000},{0xba7ac000},{0xba7ae000},{0xba7b0000},{0xba7b2000},{0xba7b4000},{0xba7b6000},{0xba7b8000},{0xba7ba000},{0xba7bc000},{0xba7be000}, +{0xba7c0000},{0xba7c2000},{0xba7c4000},{0xba7c6000},{0xba7c8000},{0xba7ca000},{0xba7cc000},{0xba7ce000},{0xba7d0000},{0xba7d2000},{0xba7d4000},{0xba7d6000},{0xba7d8000},{0xba7da000},{0xba7dc000},{0xba7de000},{0xba7e0000},{0xba7e2000},{0xba7e4000},{0xba7e6000},{0xba7e8000},{0xba7ea000},{0xba7ec000},{0xba7ee000},{0xba7f0000},{0xba7f2000},{0xba7f4000},{0xba7f6000},{0xba7f8000},{0xba7fa000},{0xba7fc000},{0xba7fe000}, +{0xba800000},{0xba802000},{0xba804000},{0xba806000},{0xba808000},{0xba80a000},{0xba80c000},{0xba80e000},{0xba810000},{0xba812000},{0xba814000},{0xba816000},{0xba818000},{0xba81a000},{0xba81c000},{0xba81e000},{0xba820000},{0xba822000},{0xba824000},{0xba826000},{0xba828000},{0xba82a000},{0xba82c000},{0xba82e000},{0xba830000},{0xba832000},{0xba834000},{0xba836000},{0xba838000},{0xba83a000},{0xba83c000},{0xba83e000}, +{0xba840000},{0xba842000},{0xba844000},{0xba846000},{0xba848000},{0xba84a000},{0xba84c000},{0xba84e000},{0xba850000},{0xba852000},{0xba854000},{0xba856000},{0xba858000},{0xba85a000},{0xba85c000},{0xba85e000},{0xba860000},{0xba862000},{0xba864000},{0xba866000},{0xba868000},{0xba86a000},{0xba86c000},{0xba86e000},{0xba870000},{0xba872000},{0xba874000},{0xba876000},{0xba878000},{0xba87a000},{0xba87c000},{0xba87e000}, +{0xba880000},{0xba882000},{0xba884000},{0xba886000},{0xba888000},{0xba88a000},{0xba88c000},{0xba88e000},{0xba890000},{0xba892000},{0xba894000},{0xba896000},{0xba898000},{0xba89a000},{0xba89c000},{0xba89e000},{0xba8a0000},{0xba8a2000},{0xba8a4000},{0xba8a6000},{0xba8a8000},{0xba8aa000},{0xba8ac000},{0xba8ae000},{0xba8b0000},{0xba8b2000},{0xba8b4000},{0xba8b6000},{0xba8b8000},{0xba8ba000},{0xba8bc000},{0xba8be000}, +{0xba8c0000},{0xba8c2000},{0xba8c4000},{0xba8c6000},{0xba8c8000},{0xba8ca000},{0xba8cc000},{0xba8ce000},{0xba8d0000},{0xba8d2000},{0xba8d4000},{0xba8d6000},{0xba8d8000},{0xba8da000},{0xba8dc000},{0xba8de000},{0xba8e0000},{0xba8e2000},{0xba8e4000},{0xba8e6000},{0xba8e8000},{0xba8ea000},{0xba8ec000},{0xba8ee000},{0xba8f0000},{0xba8f2000},{0xba8f4000},{0xba8f6000},{0xba8f8000},{0xba8fa000},{0xba8fc000},{0xba8fe000}, +{0xba900000},{0xba902000},{0xba904000},{0xba906000},{0xba908000},{0xba90a000},{0xba90c000},{0xba90e000},{0xba910000},{0xba912000},{0xba914000},{0xba916000},{0xba918000},{0xba91a000},{0xba91c000},{0xba91e000},{0xba920000},{0xba922000},{0xba924000},{0xba926000},{0xba928000},{0xba92a000},{0xba92c000},{0xba92e000},{0xba930000},{0xba932000},{0xba934000},{0xba936000},{0xba938000},{0xba93a000},{0xba93c000},{0xba93e000}, +{0xba940000},{0xba942000},{0xba944000},{0xba946000},{0xba948000},{0xba94a000},{0xba94c000},{0xba94e000},{0xba950000},{0xba952000},{0xba954000},{0xba956000},{0xba958000},{0xba95a000},{0xba95c000},{0xba95e000},{0xba960000},{0xba962000},{0xba964000},{0xba966000},{0xba968000},{0xba96a000},{0xba96c000},{0xba96e000},{0xba970000},{0xba972000},{0xba974000},{0xba976000},{0xba978000},{0xba97a000},{0xba97c000},{0xba97e000}, +{0xba980000},{0xba982000},{0xba984000},{0xba986000},{0xba988000},{0xba98a000},{0xba98c000},{0xba98e000},{0xba990000},{0xba992000},{0xba994000},{0xba996000},{0xba998000},{0xba99a000},{0xba99c000},{0xba99e000},{0xba9a0000},{0xba9a2000},{0xba9a4000},{0xba9a6000},{0xba9a8000},{0xba9aa000},{0xba9ac000},{0xba9ae000},{0xba9b0000},{0xba9b2000},{0xba9b4000},{0xba9b6000},{0xba9b8000},{0xba9ba000},{0xba9bc000},{0xba9be000}, +{0xba9c0000},{0xba9c2000},{0xba9c4000},{0xba9c6000},{0xba9c8000},{0xba9ca000},{0xba9cc000},{0xba9ce000},{0xba9d0000},{0xba9d2000},{0xba9d4000},{0xba9d6000},{0xba9d8000},{0xba9da000},{0xba9dc000},{0xba9de000},{0xba9e0000},{0xba9e2000},{0xba9e4000},{0xba9e6000},{0xba9e8000},{0xba9ea000},{0xba9ec000},{0xba9ee000},{0xba9f0000},{0xba9f2000},{0xba9f4000},{0xba9f6000},{0xba9f8000},{0xba9fa000},{0xba9fc000},{0xba9fe000}, +{0xbaa00000},{0xbaa02000},{0xbaa04000},{0xbaa06000},{0xbaa08000},{0xbaa0a000},{0xbaa0c000},{0xbaa0e000},{0xbaa10000},{0xbaa12000},{0xbaa14000},{0xbaa16000},{0xbaa18000},{0xbaa1a000},{0xbaa1c000},{0xbaa1e000},{0xbaa20000},{0xbaa22000},{0xbaa24000},{0xbaa26000},{0xbaa28000},{0xbaa2a000},{0xbaa2c000},{0xbaa2e000},{0xbaa30000},{0xbaa32000},{0xbaa34000},{0xbaa36000},{0xbaa38000},{0xbaa3a000},{0xbaa3c000},{0xbaa3e000}, +{0xbaa40000},{0xbaa42000},{0xbaa44000},{0xbaa46000},{0xbaa48000},{0xbaa4a000},{0xbaa4c000},{0xbaa4e000},{0xbaa50000},{0xbaa52000},{0xbaa54000},{0xbaa56000},{0xbaa58000},{0xbaa5a000},{0xbaa5c000},{0xbaa5e000},{0xbaa60000},{0xbaa62000},{0xbaa64000},{0xbaa66000},{0xbaa68000},{0xbaa6a000},{0xbaa6c000},{0xbaa6e000},{0xbaa70000},{0xbaa72000},{0xbaa74000},{0xbaa76000},{0xbaa78000},{0xbaa7a000},{0xbaa7c000},{0xbaa7e000}, +{0xbaa80000},{0xbaa82000},{0xbaa84000},{0xbaa86000},{0xbaa88000},{0xbaa8a000},{0xbaa8c000},{0xbaa8e000},{0xbaa90000},{0xbaa92000},{0xbaa94000},{0xbaa96000},{0xbaa98000},{0xbaa9a000},{0xbaa9c000},{0xbaa9e000},{0xbaaa0000},{0xbaaa2000},{0xbaaa4000},{0xbaaa6000},{0xbaaa8000},{0xbaaaa000},{0xbaaac000},{0xbaaae000},{0xbaab0000},{0xbaab2000},{0xbaab4000},{0xbaab6000},{0xbaab8000},{0xbaaba000},{0xbaabc000},{0xbaabe000}, +{0xbaac0000},{0xbaac2000},{0xbaac4000},{0xbaac6000},{0xbaac8000},{0xbaaca000},{0xbaacc000},{0xbaace000},{0xbaad0000},{0xbaad2000},{0xbaad4000},{0xbaad6000},{0xbaad8000},{0xbaada000},{0xbaadc000},{0xbaade000},{0xbaae0000},{0xbaae2000},{0xbaae4000},{0xbaae6000},{0xbaae8000},{0xbaaea000},{0xbaaec000},{0xbaaee000},{0xbaaf0000},{0xbaaf2000},{0xbaaf4000},{0xbaaf6000},{0xbaaf8000},{0xbaafa000},{0xbaafc000},{0xbaafe000}, +{0xbab00000},{0xbab02000},{0xbab04000},{0xbab06000},{0xbab08000},{0xbab0a000},{0xbab0c000},{0xbab0e000},{0xbab10000},{0xbab12000},{0xbab14000},{0xbab16000},{0xbab18000},{0xbab1a000},{0xbab1c000},{0xbab1e000},{0xbab20000},{0xbab22000},{0xbab24000},{0xbab26000},{0xbab28000},{0xbab2a000},{0xbab2c000},{0xbab2e000},{0xbab30000},{0xbab32000},{0xbab34000},{0xbab36000},{0xbab38000},{0xbab3a000},{0xbab3c000},{0xbab3e000}, +{0xbab40000},{0xbab42000},{0xbab44000},{0xbab46000},{0xbab48000},{0xbab4a000},{0xbab4c000},{0xbab4e000},{0xbab50000},{0xbab52000},{0xbab54000},{0xbab56000},{0xbab58000},{0xbab5a000},{0xbab5c000},{0xbab5e000},{0xbab60000},{0xbab62000},{0xbab64000},{0xbab66000},{0xbab68000},{0xbab6a000},{0xbab6c000},{0xbab6e000},{0xbab70000},{0xbab72000},{0xbab74000},{0xbab76000},{0xbab78000},{0xbab7a000},{0xbab7c000},{0xbab7e000}, +{0xbab80000},{0xbab82000},{0xbab84000},{0xbab86000},{0xbab88000},{0xbab8a000},{0xbab8c000},{0xbab8e000},{0xbab90000},{0xbab92000},{0xbab94000},{0xbab96000},{0xbab98000},{0xbab9a000},{0xbab9c000},{0xbab9e000},{0xbaba0000},{0xbaba2000},{0xbaba4000},{0xbaba6000},{0xbaba8000},{0xbabaa000},{0xbabac000},{0xbabae000},{0xbabb0000},{0xbabb2000},{0xbabb4000},{0xbabb6000},{0xbabb8000},{0xbabba000},{0xbabbc000},{0xbabbe000}, +{0xbabc0000},{0xbabc2000},{0xbabc4000},{0xbabc6000},{0xbabc8000},{0xbabca000},{0xbabcc000},{0xbabce000},{0xbabd0000},{0xbabd2000},{0xbabd4000},{0xbabd6000},{0xbabd8000},{0xbabda000},{0xbabdc000},{0xbabde000},{0xbabe0000},{0xbabe2000},{0xbabe4000},{0xbabe6000},{0xbabe8000},{0xbabea000},{0xbabec000},{0xbabee000},{0xbabf0000},{0xbabf2000},{0xbabf4000},{0xbabf6000},{0xbabf8000},{0xbabfa000},{0xbabfc000},{0xbabfe000}, +{0xbac00000},{0xbac02000},{0xbac04000},{0xbac06000},{0xbac08000},{0xbac0a000},{0xbac0c000},{0xbac0e000},{0xbac10000},{0xbac12000},{0xbac14000},{0xbac16000},{0xbac18000},{0xbac1a000},{0xbac1c000},{0xbac1e000},{0xbac20000},{0xbac22000},{0xbac24000},{0xbac26000},{0xbac28000},{0xbac2a000},{0xbac2c000},{0xbac2e000},{0xbac30000},{0xbac32000},{0xbac34000},{0xbac36000},{0xbac38000},{0xbac3a000},{0xbac3c000},{0xbac3e000}, +{0xbac40000},{0xbac42000},{0xbac44000},{0xbac46000},{0xbac48000},{0xbac4a000},{0xbac4c000},{0xbac4e000},{0xbac50000},{0xbac52000},{0xbac54000},{0xbac56000},{0xbac58000},{0xbac5a000},{0xbac5c000},{0xbac5e000},{0xbac60000},{0xbac62000},{0xbac64000},{0xbac66000},{0xbac68000},{0xbac6a000},{0xbac6c000},{0xbac6e000},{0xbac70000},{0xbac72000},{0xbac74000},{0xbac76000},{0xbac78000},{0xbac7a000},{0xbac7c000},{0xbac7e000}, +{0xbac80000},{0xbac82000},{0xbac84000},{0xbac86000},{0xbac88000},{0xbac8a000},{0xbac8c000},{0xbac8e000},{0xbac90000},{0xbac92000},{0xbac94000},{0xbac96000},{0xbac98000},{0xbac9a000},{0xbac9c000},{0xbac9e000},{0xbaca0000},{0xbaca2000},{0xbaca4000},{0xbaca6000},{0xbaca8000},{0xbacaa000},{0xbacac000},{0xbacae000},{0xbacb0000},{0xbacb2000},{0xbacb4000},{0xbacb6000},{0xbacb8000},{0xbacba000},{0xbacbc000},{0xbacbe000}, +{0xbacc0000},{0xbacc2000},{0xbacc4000},{0xbacc6000},{0xbacc8000},{0xbacca000},{0xbaccc000},{0xbacce000},{0xbacd0000},{0xbacd2000},{0xbacd4000},{0xbacd6000},{0xbacd8000},{0xbacda000},{0xbacdc000},{0xbacde000},{0xbace0000},{0xbace2000},{0xbace4000},{0xbace6000},{0xbace8000},{0xbacea000},{0xbacec000},{0xbacee000},{0xbacf0000},{0xbacf2000},{0xbacf4000},{0xbacf6000},{0xbacf8000},{0xbacfa000},{0xbacfc000},{0xbacfe000}, +{0xbad00000},{0xbad02000},{0xbad04000},{0xbad06000},{0xbad08000},{0xbad0a000},{0xbad0c000},{0xbad0e000},{0xbad10000},{0xbad12000},{0xbad14000},{0xbad16000},{0xbad18000},{0xbad1a000},{0xbad1c000},{0xbad1e000},{0xbad20000},{0xbad22000},{0xbad24000},{0xbad26000},{0xbad28000},{0xbad2a000},{0xbad2c000},{0xbad2e000},{0xbad30000},{0xbad32000},{0xbad34000},{0xbad36000},{0xbad38000},{0xbad3a000},{0xbad3c000},{0xbad3e000}, +{0xbad40000},{0xbad42000},{0xbad44000},{0xbad46000},{0xbad48000},{0xbad4a000},{0xbad4c000},{0xbad4e000},{0xbad50000},{0xbad52000},{0xbad54000},{0xbad56000},{0xbad58000},{0xbad5a000},{0xbad5c000},{0xbad5e000},{0xbad60000},{0xbad62000},{0xbad64000},{0xbad66000},{0xbad68000},{0xbad6a000},{0xbad6c000},{0xbad6e000},{0xbad70000},{0xbad72000},{0xbad74000},{0xbad76000},{0xbad78000},{0xbad7a000},{0xbad7c000},{0xbad7e000}, +{0xbad80000},{0xbad82000},{0xbad84000},{0xbad86000},{0xbad88000},{0xbad8a000},{0xbad8c000},{0xbad8e000},{0xbad90000},{0xbad92000},{0xbad94000},{0xbad96000},{0xbad98000},{0xbad9a000},{0xbad9c000},{0xbad9e000},{0xbada0000},{0xbada2000},{0xbada4000},{0xbada6000},{0xbada8000},{0xbadaa000},{0xbadac000},{0xbadae000},{0xbadb0000},{0xbadb2000},{0xbadb4000},{0xbadb6000},{0xbadb8000},{0xbadba000},{0xbadbc000},{0xbadbe000}, +{0xbadc0000},{0xbadc2000},{0xbadc4000},{0xbadc6000},{0xbadc8000},{0xbadca000},{0xbadcc000},{0xbadce000},{0xbadd0000},{0xbadd2000},{0xbadd4000},{0xbadd6000},{0xbadd8000},{0xbadda000},{0xbaddc000},{0xbadde000},{0xbade0000},{0xbade2000},{0xbade4000},{0xbade6000},{0xbade8000},{0xbadea000},{0xbadec000},{0xbadee000},{0xbadf0000},{0xbadf2000},{0xbadf4000},{0xbadf6000},{0xbadf8000},{0xbadfa000},{0xbadfc000},{0xbadfe000}, +{0xbae00000},{0xbae02000},{0xbae04000},{0xbae06000},{0xbae08000},{0xbae0a000},{0xbae0c000},{0xbae0e000},{0xbae10000},{0xbae12000},{0xbae14000},{0xbae16000},{0xbae18000},{0xbae1a000},{0xbae1c000},{0xbae1e000},{0xbae20000},{0xbae22000},{0xbae24000},{0xbae26000},{0xbae28000},{0xbae2a000},{0xbae2c000},{0xbae2e000},{0xbae30000},{0xbae32000},{0xbae34000},{0xbae36000},{0xbae38000},{0xbae3a000},{0xbae3c000},{0xbae3e000}, +{0xbae40000},{0xbae42000},{0xbae44000},{0xbae46000},{0xbae48000},{0xbae4a000},{0xbae4c000},{0xbae4e000},{0xbae50000},{0xbae52000},{0xbae54000},{0xbae56000},{0xbae58000},{0xbae5a000},{0xbae5c000},{0xbae5e000},{0xbae60000},{0xbae62000},{0xbae64000},{0xbae66000},{0xbae68000},{0xbae6a000},{0xbae6c000},{0xbae6e000},{0xbae70000},{0xbae72000},{0xbae74000},{0xbae76000},{0xbae78000},{0xbae7a000},{0xbae7c000},{0xbae7e000}, +{0xbae80000},{0xbae82000},{0xbae84000},{0xbae86000},{0xbae88000},{0xbae8a000},{0xbae8c000},{0xbae8e000},{0xbae90000},{0xbae92000},{0xbae94000},{0xbae96000},{0xbae98000},{0xbae9a000},{0xbae9c000},{0xbae9e000},{0xbaea0000},{0xbaea2000},{0xbaea4000},{0xbaea6000},{0xbaea8000},{0xbaeaa000},{0xbaeac000},{0xbaeae000},{0xbaeb0000},{0xbaeb2000},{0xbaeb4000},{0xbaeb6000},{0xbaeb8000},{0xbaeba000},{0xbaebc000},{0xbaebe000}, +{0xbaec0000},{0xbaec2000},{0xbaec4000},{0xbaec6000},{0xbaec8000},{0xbaeca000},{0xbaecc000},{0xbaece000},{0xbaed0000},{0xbaed2000},{0xbaed4000},{0xbaed6000},{0xbaed8000},{0xbaeda000},{0xbaedc000},{0xbaede000},{0xbaee0000},{0xbaee2000},{0xbaee4000},{0xbaee6000},{0xbaee8000},{0xbaeea000},{0xbaeec000},{0xbaeee000},{0xbaef0000},{0xbaef2000},{0xbaef4000},{0xbaef6000},{0xbaef8000},{0xbaefa000},{0xbaefc000},{0xbaefe000}, +{0xbaf00000},{0xbaf02000},{0xbaf04000},{0xbaf06000},{0xbaf08000},{0xbaf0a000},{0xbaf0c000},{0xbaf0e000},{0xbaf10000},{0xbaf12000},{0xbaf14000},{0xbaf16000},{0xbaf18000},{0xbaf1a000},{0xbaf1c000},{0xbaf1e000},{0xbaf20000},{0xbaf22000},{0xbaf24000},{0xbaf26000},{0xbaf28000},{0xbaf2a000},{0xbaf2c000},{0xbaf2e000},{0xbaf30000},{0xbaf32000},{0xbaf34000},{0xbaf36000},{0xbaf38000},{0xbaf3a000},{0xbaf3c000},{0xbaf3e000}, +{0xbaf40000},{0xbaf42000},{0xbaf44000},{0xbaf46000},{0xbaf48000},{0xbaf4a000},{0xbaf4c000},{0xbaf4e000},{0xbaf50000},{0xbaf52000},{0xbaf54000},{0xbaf56000},{0xbaf58000},{0xbaf5a000},{0xbaf5c000},{0xbaf5e000},{0xbaf60000},{0xbaf62000},{0xbaf64000},{0xbaf66000},{0xbaf68000},{0xbaf6a000},{0xbaf6c000},{0xbaf6e000},{0xbaf70000},{0xbaf72000},{0xbaf74000},{0xbaf76000},{0xbaf78000},{0xbaf7a000},{0xbaf7c000},{0xbaf7e000}, +{0xbaf80000},{0xbaf82000},{0xbaf84000},{0xbaf86000},{0xbaf88000},{0xbaf8a000},{0xbaf8c000},{0xbaf8e000},{0xbaf90000},{0xbaf92000},{0xbaf94000},{0xbaf96000},{0xbaf98000},{0xbaf9a000},{0xbaf9c000},{0xbaf9e000},{0xbafa0000},{0xbafa2000},{0xbafa4000},{0xbafa6000},{0xbafa8000},{0xbafaa000},{0xbafac000},{0xbafae000},{0xbafb0000},{0xbafb2000},{0xbafb4000},{0xbafb6000},{0xbafb8000},{0xbafba000},{0xbafbc000},{0xbafbe000}, +{0xbafc0000},{0xbafc2000},{0xbafc4000},{0xbafc6000},{0xbafc8000},{0xbafca000},{0xbafcc000},{0xbafce000},{0xbafd0000},{0xbafd2000},{0xbafd4000},{0xbafd6000},{0xbafd8000},{0xbafda000},{0xbafdc000},{0xbafde000},{0xbafe0000},{0xbafe2000},{0xbafe4000},{0xbafe6000},{0xbafe8000},{0xbafea000},{0xbafec000},{0xbafee000},{0xbaff0000},{0xbaff2000},{0xbaff4000},{0xbaff6000},{0xbaff8000},{0xbaffa000},{0xbaffc000},{0xbaffe000}, +{0xbb000000},{0xbb002000},{0xbb004000},{0xbb006000},{0xbb008000},{0xbb00a000},{0xbb00c000},{0xbb00e000},{0xbb010000},{0xbb012000},{0xbb014000},{0xbb016000},{0xbb018000},{0xbb01a000},{0xbb01c000},{0xbb01e000},{0xbb020000},{0xbb022000},{0xbb024000},{0xbb026000},{0xbb028000},{0xbb02a000},{0xbb02c000},{0xbb02e000},{0xbb030000},{0xbb032000},{0xbb034000},{0xbb036000},{0xbb038000},{0xbb03a000},{0xbb03c000},{0xbb03e000}, +{0xbb040000},{0xbb042000},{0xbb044000},{0xbb046000},{0xbb048000},{0xbb04a000},{0xbb04c000},{0xbb04e000},{0xbb050000},{0xbb052000},{0xbb054000},{0xbb056000},{0xbb058000},{0xbb05a000},{0xbb05c000},{0xbb05e000},{0xbb060000},{0xbb062000},{0xbb064000},{0xbb066000},{0xbb068000},{0xbb06a000},{0xbb06c000},{0xbb06e000},{0xbb070000},{0xbb072000},{0xbb074000},{0xbb076000},{0xbb078000},{0xbb07a000},{0xbb07c000},{0xbb07e000}, +{0xbb080000},{0xbb082000},{0xbb084000},{0xbb086000},{0xbb088000},{0xbb08a000},{0xbb08c000},{0xbb08e000},{0xbb090000},{0xbb092000},{0xbb094000},{0xbb096000},{0xbb098000},{0xbb09a000},{0xbb09c000},{0xbb09e000},{0xbb0a0000},{0xbb0a2000},{0xbb0a4000},{0xbb0a6000},{0xbb0a8000},{0xbb0aa000},{0xbb0ac000},{0xbb0ae000},{0xbb0b0000},{0xbb0b2000},{0xbb0b4000},{0xbb0b6000},{0xbb0b8000},{0xbb0ba000},{0xbb0bc000},{0xbb0be000}, +{0xbb0c0000},{0xbb0c2000},{0xbb0c4000},{0xbb0c6000},{0xbb0c8000},{0xbb0ca000},{0xbb0cc000},{0xbb0ce000},{0xbb0d0000},{0xbb0d2000},{0xbb0d4000},{0xbb0d6000},{0xbb0d8000},{0xbb0da000},{0xbb0dc000},{0xbb0de000},{0xbb0e0000},{0xbb0e2000},{0xbb0e4000},{0xbb0e6000},{0xbb0e8000},{0xbb0ea000},{0xbb0ec000},{0xbb0ee000},{0xbb0f0000},{0xbb0f2000},{0xbb0f4000},{0xbb0f6000},{0xbb0f8000},{0xbb0fa000},{0xbb0fc000},{0xbb0fe000}, +{0xbb100000},{0xbb102000},{0xbb104000},{0xbb106000},{0xbb108000},{0xbb10a000},{0xbb10c000},{0xbb10e000},{0xbb110000},{0xbb112000},{0xbb114000},{0xbb116000},{0xbb118000},{0xbb11a000},{0xbb11c000},{0xbb11e000},{0xbb120000},{0xbb122000},{0xbb124000},{0xbb126000},{0xbb128000},{0xbb12a000},{0xbb12c000},{0xbb12e000},{0xbb130000},{0xbb132000},{0xbb134000},{0xbb136000},{0xbb138000},{0xbb13a000},{0xbb13c000},{0xbb13e000}, +{0xbb140000},{0xbb142000},{0xbb144000},{0xbb146000},{0xbb148000},{0xbb14a000},{0xbb14c000},{0xbb14e000},{0xbb150000},{0xbb152000},{0xbb154000},{0xbb156000},{0xbb158000},{0xbb15a000},{0xbb15c000},{0xbb15e000},{0xbb160000},{0xbb162000},{0xbb164000},{0xbb166000},{0xbb168000},{0xbb16a000},{0xbb16c000},{0xbb16e000},{0xbb170000},{0xbb172000},{0xbb174000},{0xbb176000},{0xbb178000},{0xbb17a000},{0xbb17c000},{0xbb17e000}, +{0xbb180000},{0xbb182000},{0xbb184000},{0xbb186000},{0xbb188000},{0xbb18a000},{0xbb18c000},{0xbb18e000},{0xbb190000},{0xbb192000},{0xbb194000},{0xbb196000},{0xbb198000},{0xbb19a000},{0xbb19c000},{0xbb19e000},{0xbb1a0000},{0xbb1a2000},{0xbb1a4000},{0xbb1a6000},{0xbb1a8000},{0xbb1aa000},{0xbb1ac000},{0xbb1ae000},{0xbb1b0000},{0xbb1b2000},{0xbb1b4000},{0xbb1b6000},{0xbb1b8000},{0xbb1ba000},{0xbb1bc000},{0xbb1be000}, +{0xbb1c0000},{0xbb1c2000},{0xbb1c4000},{0xbb1c6000},{0xbb1c8000},{0xbb1ca000},{0xbb1cc000},{0xbb1ce000},{0xbb1d0000},{0xbb1d2000},{0xbb1d4000},{0xbb1d6000},{0xbb1d8000},{0xbb1da000},{0xbb1dc000},{0xbb1de000},{0xbb1e0000},{0xbb1e2000},{0xbb1e4000},{0xbb1e6000},{0xbb1e8000},{0xbb1ea000},{0xbb1ec000},{0xbb1ee000},{0xbb1f0000},{0xbb1f2000},{0xbb1f4000},{0xbb1f6000},{0xbb1f8000},{0xbb1fa000},{0xbb1fc000},{0xbb1fe000}, +{0xbb200000},{0xbb202000},{0xbb204000},{0xbb206000},{0xbb208000},{0xbb20a000},{0xbb20c000},{0xbb20e000},{0xbb210000},{0xbb212000},{0xbb214000},{0xbb216000},{0xbb218000},{0xbb21a000},{0xbb21c000},{0xbb21e000},{0xbb220000},{0xbb222000},{0xbb224000},{0xbb226000},{0xbb228000},{0xbb22a000},{0xbb22c000},{0xbb22e000},{0xbb230000},{0xbb232000},{0xbb234000},{0xbb236000},{0xbb238000},{0xbb23a000},{0xbb23c000},{0xbb23e000}, +{0xbb240000},{0xbb242000},{0xbb244000},{0xbb246000},{0xbb248000},{0xbb24a000},{0xbb24c000},{0xbb24e000},{0xbb250000},{0xbb252000},{0xbb254000},{0xbb256000},{0xbb258000},{0xbb25a000},{0xbb25c000},{0xbb25e000},{0xbb260000},{0xbb262000},{0xbb264000},{0xbb266000},{0xbb268000},{0xbb26a000},{0xbb26c000},{0xbb26e000},{0xbb270000},{0xbb272000},{0xbb274000},{0xbb276000},{0xbb278000},{0xbb27a000},{0xbb27c000},{0xbb27e000}, +{0xbb280000},{0xbb282000},{0xbb284000},{0xbb286000},{0xbb288000},{0xbb28a000},{0xbb28c000},{0xbb28e000},{0xbb290000},{0xbb292000},{0xbb294000},{0xbb296000},{0xbb298000},{0xbb29a000},{0xbb29c000},{0xbb29e000},{0xbb2a0000},{0xbb2a2000},{0xbb2a4000},{0xbb2a6000},{0xbb2a8000},{0xbb2aa000},{0xbb2ac000},{0xbb2ae000},{0xbb2b0000},{0xbb2b2000},{0xbb2b4000},{0xbb2b6000},{0xbb2b8000},{0xbb2ba000},{0xbb2bc000},{0xbb2be000}, +{0xbb2c0000},{0xbb2c2000},{0xbb2c4000},{0xbb2c6000},{0xbb2c8000},{0xbb2ca000},{0xbb2cc000},{0xbb2ce000},{0xbb2d0000},{0xbb2d2000},{0xbb2d4000},{0xbb2d6000},{0xbb2d8000},{0xbb2da000},{0xbb2dc000},{0xbb2de000},{0xbb2e0000},{0xbb2e2000},{0xbb2e4000},{0xbb2e6000},{0xbb2e8000},{0xbb2ea000},{0xbb2ec000},{0xbb2ee000},{0xbb2f0000},{0xbb2f2000},{0xbb2f4000},{0xbb2f6000},{0xbb2f8000},{0xbb2fa000},{0xbb2fc000},{0xbb2fe000}, +{0xbb300000},{0xbb302000},{0xbb304000},{0xbb306000},{0xbb308000},{0xbb30a000},{0xbb30c000},{0xbb30e000},{0xbb310000},{0xbb312000},{0xbb314000},{0xbb316000},{0xbb318000},{0xbb31a000},{0xbb31c000},{0xbb31e000},{0xbb320000},{0xbb322000},{0xbb324000},{0xbb326000},{0xbb328000},{0xbb32a000},{0xbb32c000},{0xbb32e000},{0xbb330000},{0xbb332000},{0xbb334000},{0xbb336000},{0xbb338000},{0xbb33a000},{0xbb33c000},{0xbb33e000}, +{0xbb340000},{0xbb342000},{0xbb344000},{0xbb346000},{0xbb348000},{0xbb34a000},{0xbb34c000},{0xbb34e000},{0xbb350000},{0xbb352000},{0xbb354000},{0xbb356000},{0xbb358000},{0xbb35a000},{0xbb35c000},{0xbb35e000},{0xbb360000},{0xbb362000},{0xbb364000},{0xbb366000},{0xbb368000},{0xbb36a000},{0xbb36c000},{0xbb36e000},{0xbb370000},{0xbb372000},{0xbb374000},{0xbb376000},{0xbb378000},{0xbb37a000},{0xbb37c000},{0xbb37e000}, +{0xbb380000},{0xbb382000},{0xbb384000},{0xbb386000},{0xbb388000},{0xbb38a000},{0xbb38c000},{0xbb38e000},{0xbb390000},{0xbb392000},{0xbb394000},{0xbb396000},{0xbb398000},{0xbb39a000},{0xbb39c000},{0xbb39e000},{0xbb3a0000},{0xbb3a2000},{0xbb3a4000},{0xbb3a6000},{0xbb3a8000},{0xbb3aa000},{0xbb3ac000},{0xbb3ae000},{0xbb3b0000},{0xbb3b2000},{0xbb3b4000},{0xbb3b6000},{0xbb3b8000},{0xbb3ba000},{0xbb3bc000},{0xbb3be000}, +{0xbb3c0000},{0xbb3c2000},{0xbb3c4000},{0xbb3c6000},{0xbb3c8000},{0xbb3ca000},{0xbb3cc000},{0xbb3ce000},{0xbb3d0000},{0xbb3d2000},{0xbb3d4000},{0xbb3d6000},{0xbb3d8000},{0xbb3da000},{0xbb3dc000},{0xbb3de000},{0xbb3e0000},{0xbb3e2000},{0xbb3e4000},{0xbb3e6000},{0xbb3e8000},{0xbb3ea000},{0xbb3ec000},{0xbb3ee000},{0xbb3f0000},{0xbb3f2000},{0xbb3f4000},{0xbb3f6000},{0xbb3f8000},{0xbb3fa000},{0xbb3fc000},{0xbb3fe000}, +{0xbb400000},{0xbb402000},{0xbb404000},{0xbb406000},{0xbb408000},{0xbb40a000},{0xbb40c000},{0xbb40e000},{0xbb410000},{0xbb412000},{0xbb414000},{0xbb416000},{0xbb418000},{0xbb41a000},{0xbb41c000},{0xbb41e000},{0xbb420000},{0xbb422000},{0xbb424000},{0xbb426000},{0xbb428000},{0xbb42a000},{0xbb42c000},{0xbb42e000},{0xbb430000},{0xbb432000},{0xbb434000},{0xbb436000},{0xbb438000},{0xbb43a000},{0xbb43c000},{0xbb43e000}, +{0xbb440000},{0xbb442000},{0xbb444000},{0xbb446000},{0xbb448000},{0xbb44a000},{0xbb44c000},{0xbb44e000},{0xbb450000},{0xbb452000},{0xbb454000},{0xbb456000},{0xbb458000},{0xbb45a000},{0xbb45c000},{0xbb45e000},{0xbb460000},{0xbb462000},{0xbb464000},{0xbb466000},{0xbb468000},{0xbb46a000},{0xbb46c000},{0xbb46e000},{0xbb470000},{0xbb472000},{0xbb474000},{0xbb476000},{0xbb478000},{0xbb47a000},{0xbb47c000},{0xbb47e000}, +{0xbb480000},{0xbb482000},{0xbb484000},{0xbb486000},{0xbb488000},{0xbb48a000},{0xbb48c000},{0xbb48e000},{0xbb490000},{0xbb492000},{0xbb494000},{0xbb496000},{0xbb498000},{0xbb49a000},{0xbb49c000},{0xbb49e000},{0xbb4a0000},{0xbb4a2000},{0xbb4a4000},{0xbb4a6000},{0xbb4a8000},{0xbb4aa000},{0xbb4ac000},{0xbb4ae000},{0xbb4b0000},{0xbb4b2000},{0xbb4b4000},{0xbb4b6000},{0xbb4b8000},{0xbb4ba000},{0xbb4bc000},{0xbb4be000}, +{0xbb4c0000},{0xbb4c2000},{0xbb4c4000},{0xbb4c6000},{0xbb4c8000},{0xbb4ca000},{0xbb4cc000},{0xbb4ce000},{0xbb4d0000},{0xbb4d2000},{0xbb4d4000},{0xbb4d6000},{0xbb4d8000},{0xbb4da000},{0xbb4dc000},{0xbb4de000},{0xbb4e0000},{0xbb4e2000},{0xbb4e4000},{0xbb4e6000},{0xbb4e8000},{0xbb4ea000},{0xbb4ec000},{0xbb4ee000},{0xbb4f0000},{0xbb4f2000},{0xbb4f4000},{0xbb4f6000},{0xbb4f8000},{0xbb4fa000},{0xbb4fc000},{0xbb4fe000}, +{0xbb500000},{0xbb502000},{0xbb504000},{0xbb506000},{0xbb508000},{0xbb50a000},{0xbb50c000},{0xbb50e000},{0xbb510000},{0xbb512000},{0xbb514000},{0xbb516000},{0xbb518000},{0xbb51a000},{0xbb51c000},{0xbb51e000},{0xbb520000},{0xbb522000},{0xbb524000},{0xbb526000},{0xbb528000},{0xbb52a000},{0xbb52c000},{0xbb52e000},{0xbb530000},{0xbb532000},{0xbb534000},{0xbb536000},{0xbb538000},{0xbb53a000},{0xbb53c000},{0xbb53e000}, +{0xbb540000},{0xbb542000},{0xbb544000},{0xbb546000},{0xbb548000},{0xbb54a000},{0xbb54c000},{0xbb54e000},{0xbb550000},{0xbb552000},{0xbb554000},{0xbb556000},{0xbb558000},{0xbb55a000},{0xbb55c000},{0xbb55e000},{0xbb560000},{0xbb562000},{0xbb564000},{0xbb566000},{0xbb568000},{0xbb56a000},{0xbb56c000},{0xbb56e000},{0xbb570000},{0xbb572000},{0xbb574000},{0xbb576000},{0xbb578000},{0xbb57a000},{0xbb57c000},{0xbb57e000}, +{0xbb580000},{0xbb582000},{0xbb584000},{0xbb586000},{0xbb588000},{0xbb58a000},{0xbb58c000},{0xbb58e000},{0xbb590000},{0xbb592000},{0xbb594000},{0xbb596000},{0xbb598000},{0xbb59a000},{0xbb59c000},{0xbb59e000},{0xbb5a0000},{0xbb5a2000},{0xbb5a4000},{0xbb5a6000},{0xbb5a8000},{0xbb5aa000},{0xbb5ac000},{0xbb5ae000},{0xbb5b0000},{0xbb5b2000},{0xbb5b4000},{0xbb5b6000},{0xbb5b8000},{0xbb5ba000},{0xbb5bc000},{0xbb5be000}, +{0xbb5c0000},{0xbb5c2000},{0xbb5c4000},{0xbb5c6000},{0xbb5c8000},{0xbb5ca000},{0xbb5cc000},{0xbb5ce000},{0xbb5d0000},{0xbb5d2000},{0xbb5d4000},{0xbb5d6000},{0xbb5d8000},{0xbb5da000},{0xbb5dc000},{0xbb5de000},{0xbb5e0000},{0xbb5e2000},{0xbb5e4000},{0xbb5e6000},{0xbb5e8000},{0xbb5ea000},{0xbb5ec000},{0xbb5ee000},{0xbb5f0000},{0xbb5f2000},{0xbb5f4000},{0xbb5f6000},{0xbb5f8000},{0xbb5fa000},{0xbb5fc000},{0xbb5fe000}, +{0xbb600000},{0xbb602000},{0xbb604000},{0xbb606000},{0xbb608000},{0xbb60a000},{0xbb60c000},{0xbb60e000},{0xbb610000},{0xbb612000},{0xbb614000},{0xbb616000},{0xbb618000},{0xbb61a000},{0xbb61c000},{0xbb61e000},{0xbb620000},{0xbb622000},{0xbb624000},{0xbb626000},{0xbb628000},{0xbb62a000},{0xbb62c000},{0xbb62e000},{0xbb630000},{0xbb632000},{0xbb634000},{0xbb636000},{0xbb638000},{0xbb63a000},{0xbb63c000},{0xbb63e000}, +{0xbb640000},{0xbb642000},{0xbb644000},{0xbb646000},{0xbb648000},{0xbb64a000},{0xbb64c000},{0xbb64e000},{0xbb650000},{0xbb652000},{0xbb654000},{0xbb656000},{0xbb658000},{0xbb65a000},{0xbb65c000},{0xbb65e000},{0xbb660000},{0xbb662000},{0xbb664000},{0xbb666000},{0xbb668000},{0xbb66a000},{0xbb66c000},{0xbb66e000},{0xbb670000},{0xbb672000},{0xbb674000},{0xbb676000},{0xbb678000},{0xbb67a000},{0xbb67c000},{0xbb67e000}, +{0xbb680000},{0xbb682000},{0xbb684000},{0xbb686000},{0xbb688000},{0xbb68a000},{0xbb68c000},{0xbb68e000},{0xbb690000},{0xbb692000},{0xbb694000},{0xbb696000},{0xbb698000},{0xbb69a000},{0xbb69c000},{0xbb69e000},{0xbb6a0000},{0xbb6a2000},{0xbb6a4000},{0xbb6a6000},{0xbb6a8000},{0xbb6aa000},{0xbb6ac000},{0xbb6ae000},{0xbb6b0000},{0xbb6b2000},{0xbb6b4000},{0xbb6b6000},{0xbb6b8000},{0xbb6ba000},{0xbb6bc000},{0xbb6be000}, +{0xbb6c0000},{0xbb6c2000},{0xbb6c4000},{0xbb6c6000},{0xbb6c8000},{0xbb6ca000},{0xbb6cc000},{0xbb6ce000},{0xbb6d0000},{0xbb6d2000},{0xbb6d4000},{0xbb6d6000},{0xbb6d8000},{0xbb6da000},{0xbb6dc000},{0xbb6de000},{0xbb6e0000},{0xbb6e2000},{0xbb6e4000},{0xbb6e6000},{0xbb6e8000},{0xbb6ea000},{0xbb6ec000},{0xbb6ee000},{0xbb6f0000},{0xbb6f2000},{0xbb6f4000},{0xbb6f6000},{0xbb6f8000},{0xbb6fa000},{0xbb6fc000},{0xbb6fe000}, +{0xbb700000},{0xbb702000},{0xbb704000},{0xbb706000},{0xbb708000},{0xbb70a000},{0xbb70c000},{0xbb70e000},{0xbb710000},{0xbb712000},{0xbb714000},{0xbb716000},{0xbb718000},{0xbb71a000},{0xbb71c000},{0xbb71e000},{0xbb720000},{0xbb722000},{0xbb724000},{0xbb726000},{0xbb728000},{0xbb72a000},{0xbb72c000},{0xbb72e000},{0xbb730000},{0xbb732000},{0xbb734000},{0xbb736000},{0xbb738000},{0xbb73a000},{0xbb73c000},{0xbb73e000}, +{0xbb740000},{0xbb742000},{0xbb744000},{0xbb746000},{0xbb748000},{0xbb74a000},{0xbb74c000},{0xbb74e000},{0xbb750000},{0xbb752000},{0xbb754000},{0xbb756000},{0xbb758000},{0xbb75a000},{0xbb75c000},{0xbb75e000},{0xbb760000},{0xbb762000},{0xbb764000},{0xbb766000},{0xbb768000},{0xbb76a000},{0xbb76c000},{0xbb76e000},{0xbb770000},{0xbb772000},{0xbb774000},{0xbb776000},{0xbb778000},{0xbb77a000},{0xbb77c000},{0xbb77e000}, +{0xbb780000},{0xbb782000},{0xbb784000},{0xbb786000},{0xbb788000},{0xbb78a000},{0xbb78c000},{0xbb78e000},{0xbb790000},{0xbb792000},{0xbb794000},{0xbb796000},{0xbb798000},{0xbb79a000},{0xbb79c000},{0xbb79e000},{0xbb7a0000},{0xbb7a2000},{0xbb7a4000},{0xbb7a6000},{0xbb7a8000},{0xbb7aa000},{0xbb7ac000},{0xbb7ae000},{0xbb7b0000},{0xbb7b2000},{0xbb7b4000},{0xbb7b6000},{0xbb7b8000},{0xbb7ba000},{0xbb7bc000},{0xbb7be000}, +{0xbb7c0000},{0xbb7c2000},{0xbb7c4000},{0xbb7c6000},{0xbb7c8000},{0xbb7ca000},{0xbb7cc000},{0xbb7ce000},{0xbb7d0000},{0xbb7d2000},{0xbb7d4000},{0xbb7d6000},{0xbb7d8000},{0xbb7da000},{0xbb7dc000},{0xbb7de000},{0xbb7e0000},{0xbb7e2000},{0xbb7e4000},{0xbb7e6000},{0xbb7e8000},{0xbb7ea000},{0xbb7ec000},{0xbb7ee000},{0xbb7f0000},{0xbb7f2000},{0xbb7f4000},{0xbb7f6000},{0xbb7f8000},{0xbb7fa000},{0xbb7fc000},{0xbb7fe000}, +{0xbb800000},{0xbb802000},{0xbb804000},{0xbb806000},{0xbb808000},{0xbb80a000},{0xbb80c000},{0xbb80e000},{0xbb810000},{0xbb812000},{0xbb814000},{0xbb816000},{0xbb818000},{0xbb81a000},{0xbb81c000},{0xbb81e000},{0xbb820000},{0xbb822000},{0xbb824000},{0xbb826000},{0xbb828000},{0xbb82a000},{0xbb82c000},{0xbb82e000},{0xbb830000},{0xbb832000},{0xbb834000},{0xbb836000},{0xbb838000},{0xbb83a000},{0xbb83c000},{0xbb83e000}, +{0xbb840000},{0xbb842000},{0xbb844000},{0xbb846000},{0xbb848000},{0xbb84a000},{0xbb84c000},{0xbb84e000},{0xbb850000},{0xbb852000},{0xbb854000},{0xbb856000},{0xbb858000},{0xbb85a000},{0xbb85c000},{0xbb85e000},{0xbb860000},{0xbb862000},{0xbb864000},{0xbb866000},{0xbb868000},{0xbb86a000},{0xbb86c000},{0xbb86e000},{0xbb870000},{0xbb872000},{0xbb874000},{0xbb876000},{0xbb878000},{0xbb87a000},{0xbb87c000},{0xbb87e000}, +{0xbb880000},{0xbb882000},{0xbb884000},{0xbb886000},{0xbb888000},{0xbb88a000},{0xbb88c000},{0xbb88e000},{0xbb890000},{0xbb892000},{0xbb894000},{0xbb896000},{0xbb898000},{0xbb89a000},{0xbb89c000},{0xbb89e000},{0xbb8a0000},{0xbb8a2000},{0xbb8a4000},{0xbb8a6000},{0xbb8a8000},{0xbb8aa000},{0xbb8ac000},{0xbb8ae000},{0xbb8b0000},{0xbb8b2000},{0xbb8b4000},{0xbb8b6000},{0xbb8b8000},{0xbb8ba000},{0xbb8bc000},{0xbb8be000}, +{0xbb8c0000},{0xbb8c2000},{0xbb8c4000},{0xbb8c6000},{0xbb8c8000},{0xbb8ca000},{0xbb8cc000},{0xbb8ce000},{0xbb8d0000},{0xbb8d2000},{0xbb8d4000},{0xbb8d6000},{0xbb8d8000},{0xbb8da000},{0xbb8dc000},{0xbb8de000},{0xbb8e0000},{0xbb8e2000},{0xbb8e4000},{0xbb8e6000},{0xbb8e8000},{0xbb8ea000},{0xbb8ec000},{0xbb8ee000},{0xbb8f0000},{0xbb8f2000},{0xbb8f4000},{0xbb8f6000},{0xbb8f8000},{0xbb8fa000},{0xbb8fc000},{0xbb8fe000}, +{0xbb900000},{0xbb902000},{0xbb904000},{0xbb906000},{0xbb908000},{0xbb90a000},{0xbb90c000},{0xbb90e000},{0xbb910000},{0xbb912000},{0xbb914000},{0xbb916000},{0xbb918000},{0xbb91a000},{0xbb91c000},{0xbb91e000},{0xbb920000},{0xbb922000},{0xbb924000},{0xbb926000},{0xbb928000},{0xbb92a000},{0xbb92c000},{0xbb92e000},{0xbb930000},{0xbb932000},{0xbb934000},{0xbb936000},{0xbb938000},{0xbb93a000},{0xbb93c000},{0xbb93e000}, +{0xbb940000},{0xbb942000},{0xbb944000},{0xbb946000},{0xbb948000},{0xbb94a000},{0xbb94c000},{0xbb94e000},{0xbb950000},{0xbb952000},{0xbb954000},{0xbb956000},{0xbb958000},{0xbb95a000},{0xbb95c000},{0xbb95e000},{0xbb960000},{0xbb962000},{0xbb964000},{0xbb966000},{0xbb968000},{0xbb96a000},{0xbb96c000},{0xbb96e000},{0xbb970000},{0xbb972000},{0xbb974000},{0xbb976000},{0xbb978000},{0xbb97a000},{0xbb97c000},{0xbb97e000}, +{0xbb980000},{0xbb982000},{0xbb984000},{0xbb986000},{0xbb988000},{0xbb98a000},{0xbb98c000},{0xbb98e000},{0xbb990000},{0xbb992000},{0xbb994000},{0xbb996000},{0xbb998000},{0xbb99a000},{0xbb99c000},{0xbb99e000},{0xbb9a0000},{0xbb9a2000},{0xbb9a4000},{0xbb9a6000},{0xbb9a8000},{0xbb9aa000},{0xbb9ac000},{0xbb9ae000},{0xbb9b0000},{0xbb9b2000},{0xbb9b4000},{0xbb9b6000},{0xbb9b8000},{0xbb9ba000},{0xbb9bc000},{0xbb9be000}, +{0xbb9c0000},{0xbb9c2000},{0xbb9c4000},{0xbb9c6000},{0xbb9c8000},{0xbb9ca000},{0xbb9cc000},{0xbb9ce000},{0xbb9d0000},{0xbb9d2000},{0xbb9d4000},{0xbb9d6000},{0xbb9d8000},{0xbb9da000},{0xbb9dc000},{0xbb9de000},{0xbb9e0000},{0xbb9e2000},{0xbb9e4000},{0xbb9e6000},{0xbb9e8000},{0xbb9ea000},{0xbb9ec000},{0xbb9ee000},{0xbb9f0000},{0xbb9f2000},{0xbb9f4000},{0xbb9f6000},{0xbb9f8000},{0xbb9fa000},{0xbb9fc000},{0xbb9fe000}, +{0xbba00000},{0xbba02000},{0xbba04000},{0xbba06000},{0xbba08000},{0xbba0a000},{0xbba0c000},{0xbba0e000},{0xbba10000},{0xbba12000},{0xbba14000},{0xbba16000},{0xbba18000},{0xbba1a000},{0xbba1c000},{0xbba1e000},{0xbba20000},{0xbba22000},{0xbba24000},{0xbba26000},{0xbba28000},{0xbba2a000},{0xbba2c000},{0xbba2e000},{0xbba30000},{0xbba32000},{0xbba34000},{0xbba36000},{0xbba38000},{0xbba3a000},{0xbba3c000},{0xbba3e000}, +{0xbba40000},{0xbba42000},{0xbba44000},{0xbba46000},{0xbba48000},{0xbba4a000},{0xbba4c000},{0xbba4e000},{0xbba50000},{0xbba52000},{0xbba54000},{0xbba56000},{0xbba58000},{0xbba5a000},{0xbba5c000},{0xbba5e000},{0xbba60000},{0xbba62000},{0xbba64000},{0xbba66000},{0xbba68000},{0xbba6a000},{0xbba6c000},{0xbba6e000},{0xbba70000},{0xbba72000},{0xbba74000},{0xbba76000},{0xbba78000},{0xbba7a000},{0xbba7c000},{0xbba7e000}, +{0xbba80000},{0xbba82000},{0xbba84000},{0xbba86000},{0xbba88000},{0xbba8a000},{0xbba8c000},{0xbba8e000},{0xbba90000},{0xbba92000},{0xbba94000},{0xbba96000},{0xbba98000},{0xbba9a000},{0xbba9c000},{0xbba9e000},{0xbbaa0000},{0xbbaa2000},{0xbbaa4000},{0xbbaa6000},{0xbbaa8000},{0xbbaaa000},{0xbbaac000},{0xbbaae000},{0xbbab0000},{0xbbab2000},{0xbbab4000},{0xbbab6000},{0xbbab8000},{0xbbaba000},{0xbbabc000},{0xbbabe000}, +{0xbbac0000},{0xbbac2000},{0xbbac4000},{0xbbac6000},{0xbbac8000},{0xbbaca000},{0xbbacc000},{0xbbace000},{0xbbad0000},{0xbbad2000},{0xbbad4000},{0xbbad6000},{0xbbad8000},{0xbbada000},{0xbbadc000},{0xbbade000},{0xbbae0000},{0xbbae2000},{0xbbae4000},{0xbbae6000},{0xbbae8000},{0xbbaea000},{0xbbaec000},{0xbbaee000},{0xbbaf0000},{0xbbaf2000},{0xbbaf4000},{0xbbaf6000},{0xbbaf8000},{0xbbafa000},{0xbbafc000},{0xbbafe000}, +{0xbbb00000},{0xbbb02000},{0xbbb04000},{0xbbb06000},{0xbbb08000},{0xbbb0a000},{0xbbb0c000},{0xbbb0e000},{0xbbb10000},{0xbbb12000},{0xbbb14000},{0xbbb16000},{0xbbb18000},{0xbbb1a000},{0xbbb1c000},{0xbbb1e000},{0xbbb20000},{0xbbb22000},{0xbbb24000},{0xbbb26000},{0xbbb28000},{0xbbb2a000},{0xbbb2c000},{0xbbb2e000},{0xbbb30000},{0xbbb32000},{0xbbb34000},{0xbbb36000},{0xbbb38000},{0xbbb3a000},{0xbbb3c000},{0xbbb3e000}, +{0xbbb40000},{0xbbb42000},{0xbbb44000},{0xbbb46000},{0xbbb48000},{0xbbb4a000},{0xbbb4c000},{0xbbb4e000},{0xbbb50000},{0xbbb52000},{0xbbb54000},{0xbbb56000},{0xbbb58000},{0xbbb5a000},{0xbbb5c000},{0xbbb5e000},{0xbbb60000},{0xbbb62000},{0xbbb64000},{0xbbb66000},{0xbbb68000},{0xbbb6a000},{0xbbb6c000},{0xbbb6e000},{0xbbb70000},{0xbbb72000},{0xbbb74000},{0xbbb76000},{0xbbb78000},{0xbbb7a000},{0xbbb7c000},{0xbbb7e000}, +{0xbbb80000},{0xbbb82000},{0xbbb84000},{0xbbb86000},{0xbbb88000},{0xbbb8a000},{0xbbb8c000},{0xbbb8e000},{0xbbb90000},{0xbbb92000},{0xbbb94000},{0xbbb96000},{0xbbb98000},{0xbbb9a000},{0xbbb9c000},{0xbbb9e000},{0xbbba0000},{0xbbba2000},{0xbbba4000},{0xbbba6000},{0xbbba8000},{0xbbbaa000},{0xbbbac000},{0xbbbae000},{0xbbbb0000},{0xbbbb2000},{0xbbbb4000},{0xbbbb6000},{0xbbbb8000},{0xbbbba000},{0xbbbbc000},{0xbbbbe000}, +{0xbbbc0000},{0xbbbc2000},{0xbbbc4000},{0xbbbc6000},{0xbbbc8000},{0xbbbca000},{0xbbbcc000},{0xbbbce000},{0xbbbd0000},{0xbbbd2000},{0xbbbd4000},{0xbbbd6000},{0xbbbd8000},{0xbbbda000},{0xbbbdc000},{0xbbbde000},{0xbbbe0000},{0xbbbe2000},{0xbbbe4000},{0xbbbe6000},{0xbbbe8000},{0xbbbea000},{0xbbbec000},{0xbbbee000},{0xbbbf0000},{0xbbbf2000},{0xbbbf4000},{0xbbbf6000},{0xbbbf8000},{0xbbbfa000},{0xbbbfc000},{0xbbbfe000}, +{0xbbc00000},{0xbbc02000},{0xbbc04000},{0xbbc06000},{0xbbc08000},{0xbbc0a000},{0xbbc0c000},{0xbbc0e000},{0xbbc10000},{0xbbc12000},{0xbbc14000},{0xbbc16000},{0xbbc18000},{0xbbc1a000},{0xbbc1c000},{0xbbc1e000},{0xbbc20000},{0xbbc22000},{0xbbc24000},{0xbbc26000},{0xbbc28000},{0xbbc2a000},{0xbbc2c000},{0xbbc2e000},{0xbbc30000},{0xbbc32000},{0xbbc34000},{0xbbc36000},{0xbbc38000},{0xbbc3a000},{0xbbc3c000},{0xbbc3e000}, +{0xbbc40000},{0xbbc42000},{0xbbc44000},{0xbbc46000},{0xbbc48000},{0xbbc4a000},{0xbbc4c000},{0xbbc4e000},{0xbbc50000},{0xbbc52000},{0xbbc54000},{0xbbc56000},{0xbbc58000},{0xbbc5a000},{0xbbc5c000},{0xbbc5e000},{0xbbc60000},{0xbbc62000},{0xbbc64000},{0xbbc66000},{0xbbc68000},{0xbbc6a000},{0xbbc6c000},{0xbbc6e000},{0xbbc70000},{0xbbc72000},{0xbbc74000},{0xbbc76000},{0xbbc78000},{0xbbc7a000},{0xbbc7c000},{0xbbc7e000}, +{0xbbc80000},{0xbbc82000},{0xbbc84000},{0xbbc86000},{0xbbc88000},{0xbbc8a000},{0xbbc8c000},{0xbbc8e000},{0xbbc90000},{0xbbc92000},{0xbbc94000},{0xbbc96000},{0xbbc98000},{0xbbc9a000},{0xbbc9c000},{0xbbc9e000},{0xbbca0000},{0xbbca2000},{0xbbca4000},{0xbbca6000},{0xbbca8000},{0xbbcaa000},{0xbbcac000},{0xbbcae000},{0xbbcb0000},{0xbbcb2000},{0xbbcb4000},{0xbbcb6000},{0xbbcb8000},{0xbbcba000},{0xbbcbc000},{0xbbcbe000}, +{0xbbcc0000},{0xbbcc2000},{0xbbcc4000},{0xbbcc6000},{0xbbcc8000},{0xbbcca000},{0xbbccc000},{0xbbcce000},{0xbbcd0000},{0xbbcd2000},{0xbbcd4000},{0xbbcd6000},{0xbbcd8000},{0xbbcda000},{0xbbcdc000},{0xbbcde000},{0xbbce0000},{0xbbce2000},{0xbbce4000},{0xbbce6000},{0xbbce8000},{0xbbcea000},{0xbbcec000},{0xbbcee000},{0xbbcf0000},{0xbbcf2000},{0xbbcf4000},{0xbbcf6000},{0xbbcf8000},{0xbbcfa000},{0xbbcfc000},{0xbbcfe000}, +{0xbbd00000},{0xbbd02000},{0xbbd04000},{0xbbd06000},{0xbbd08000},{0xbbd0a000},{0xbbd0c000},{0xbbd0e000},{0xbbd10000},{0xbbd12000},{0xbbd14000},{0xbbd16000},{0xbbd18000},{0xbbd1a000},{0xbbd1c000},{0xbbd1e000},{0xbbd20000},{0xbbd22000},{0xbbd24000},{0xbbd26000},{0xbbd28000},{0xbbd2a000},{0xbbd2c000},{0xbbd2e000},{0xbbd30000},{0xbbd32000},{0xbbd34000},{0xbbd36000},{0xbbd38000},{0xbbd3a000},{0xbbd3c000},{0xbbd3e000}, +{0xbbd40000},{0xbbd42000},{0xbbd44000},{0xbbd46000},{0xbbd48000},{0xbbd4a000},{0xbbd4c000},{0xbbd4e000},{0xbbd50000},{0xbbd52000},{0xbbd54000},{0xbbd56000},{0xbbd58000},{0xbbd5a000},{0xbbd5c000},{0xbbd5e000},{0xbbd60000},{0xbbd62000},{0xbbd64000},{0xbbd66000},{0xbbd68000},{0xbbd6a000},{0xbbd6c000},{0xbbd6e000},{0xbbd70000},{0xbbd72000},{0xbbd74000},{0xbbd76000},{0xbbd78000},{0xbbd7a000},{0xbbd7c000},{0xbbd7e000}, +{0xbbd80000},{0xbbd82000},{0xbbd84000},{0xbbd86000},{0xbbd88000},{0xbbd8a000},{0xbbd8c000},{0xbbd8e000},{0xbbd90000},{0xbbd92000},{0xbbd94000},{0xbbd96000},{0xbbd98000},{0xbbd9a000},{0xbbd9c000},{0xbbd9e000},{0xbbda0000},{0xbbda2000},{0xbbda4000},{0xbbda6000},{0xbbda8000},{0xbbdaa000},{0xbbdac000},{0xbbdae000},{0xbbdb0000},{0xbbdb2000},{0xbbdb4000},{0xbbdb6000},{0xbbdb8000},{0xbbdba000},{0xbbdbc000},{0xbbdbe000}, +{0xbbdc0000},{0xbbdc2000},{0xbbdc4000},{0xbbdc6000},{0xbbdc8000},{0xbbdca000},{0xbbdcc000},{0xbbdce000},{0xbbdd0000},{0xbbdd2000},{0xbbdd4000},{0xbbdd6000},{0xbbdd8000},{0xbbdda000},{0xbbddc000},{0xbbdde000},{0xbbde0000},{0xbbde2000},{0xbbde4000},{0xbbde6000},{0xbbde8000},{0xbbdea000},{0xbbdec000},{0xbbdee000},{0xbbdf0000},{0xbbdf2000},{0xbbdf4000},{0xbbdf6000},{0xbbdf8000},{0xbbdfa000},{0xbbdfc000},{0xbbdfe000}, +{0xbbe00000},{0xbbe02000},{0xbbe04000},{0xbbe06000},{0xbbe08000},{0xbbe0a000},{0xbbe0c000},{0xbbe0e000},{0xbbe10000},{0xbbe12000},{0xbbe14000},{0xbbe16000},{0xbbe18000},{0xbbe1a000},{0xbbe1c000},{0xbbe1e000},{0xbbe20000},{0xbbe22000},{0xbbe24000},{0xbbe26000},{0xbbe28000},{0xbbe2a000},{0xbbe2c000},{0xbbe2e000},{0xbbe30000},{0xbbe32000},{0xbbe34000},{0xbbe36000},{0xbbe38000},{0xbbe3a000},{0xbbe3c000},{0xbbe3e000}, +{0xbbe40000},{0xbbe42000},{0xbbe44000},{0xbbe46000},{0xbbe48000},{0xbbe4a000},{0xbbe4c000},{0xbbe4e000},{0xbbe50000},{0xbbe52000},{0xbbe54000},{0xbbe56000},{0xbbe58000},{0xbbe5a000},{0xbbe5c000},{0xbbe5e000},{0xbbe60000},{0xbbe62000},{0xbbe64000},{0xbbe66000},{0xbbe68000},{0xbbe6a000},{0xbbe6c000},{0xbbe6e000},{0xbbe70000},{0xbbe72000},{0xbbe74000},{0xbbe76000},{0xbbe78000},{0xbbe7a000},{0xbbe7c000},{0xbbe7e000}, +{0xbbe80000},{0xbbe82000},{0xbbe84000},{0xbbe86000},{0xbbe88000},{0xbbe8a000},{0xbbe8c000},{0xbbe8e000},{0xbbe90000},{0xbbe92000},{0xbbe94000},{0xbbe96000},{0xbbe98000},{0xbbe9a000},{0xbbe9c000},{0xbbe9e000},{0xbbea0000},{0xbbea2000},{0xbbea4000},{0xbbea6000},{0xbbea8000},{0xbbeaa000},{0xbbeac000},{0xbbeae000},{0xbbeb0000},{0xbbeb2000},{0xbbeb4000},{0xbbeb6000},{0xbbeb8000},{0xbbeba000},{0xbbebc000},{0xbbebe000}, +{0xbbec0000},{0xbbec2000},{0xbbec4000},{0xbbec6000},{0xbbec8000},{0xbbeca000},{0xbbecc000},{0xbbece000},{0xbbed0000},{0xbbed2000},{0xbbed4000},{0xbbed6000},{0xbbed8000},{0xbbeda000},{0xbbedc000},{0xbbede000},{0xbbee0000},{0xbbee2000},{0xbbee4000},{0xbbee6000},{0xbbee8000},{0xbbeea000},{0xbbeec000},{0xbbeee000},{0xbbef0000},{0xbbef2000},{0xbbef4000},{0xbbef6000},{0xbbef8000},{0xbbefa000},{0xbbefc000},{0xbbefe000}, +{0xbbf00000},{0xbbf02000},{0xbbf04000},{0xbbf06000},{0xbbf08000},{0xbbf0a000},{0xbbf0c000},{0xbbf0e000},{0xbbf10000},{0xbbf12000},{0xbbf14000},{0xbbf16000},{0xbbf18000},{0xbbf1a000},{0xbbf1c000},{0xbbf1e000},{0xbbf20000},{0xbbf22000},{0xbbf24000},{0xbbf26000},{0xbbf28000},{0xbbf2a000},{0xbbf2c000},{0xbbf2e000},{0xbbf30000},{0xbbf32000},{0xbbf34000},{0xbbf36000},{0xbbf38000},{0xbbf3a000},{0xbbf3c000},{0xbbf3e000}, +{0xbbf40000},{0xbbf42000},{0xbbf44000},{0xbbf46000},{0xbbf48000},{0xbbf4a000},{0xbbf4c000},{0xbbf4e000},{0xbbf50000},{0xbbf52000},{0xbbf54000},{0xbbf56000},{0xbbf58000},{0xbbf5a000},{0xbbf5c000},{0xbbf5e000},{0xbbf60000},{0xbbf62000},{0xbbf64000},{0xbbf66000},{0xbbf68000},{0xbbf6a000},{0xbbf6c000},{0xbbf6e000},{0xbbf70000},{0xbbf72000},{0xbbf74000},{0xbbf76000},{0xbbf78000},{0xbbf7a000},{0xbbf7c000},{0xbbf7e000}, +{0xbbf80000},{0xbbf82000},{0xbbf84000},{0xbbf86000},{0xbbf88000},{0xbbf8a000},{0xbbf8c000},{0xbbf8e000},{0xbbf90000},{0xbbf92000},{0xbbf94000},{0xbbf96000},{0xbbf98000},{0xbbf9a000},{0xbbf9c000},{0xbbf9e000},{0xbbfa0000},{0xbbfa2000},{0xbbfa4000},{0xbbfa6000},{0xbbfa8000},{0xbbfaa000},{0xbbfac000},{0xbbfae000},{0xbbfb0000},{0xbbfb2000},{0xbbfb4000},{0xbbfb6000},{0xbbfb8000},{0xbbfba000},{0xbbfbc000},{0xbbfbe000}, +{0xbbfc0000},{0xbbfc2000},{0xbbfc4000},{0xbbfc6000},{0xbbfc8000},{0xbbfca000},{0xbbfcc000},{0xbbfce000},{0xbbfd0000},{0xbbfd2000},{0xbbfd4000},{0xbbfd6000},{0xbbfd8000},{0xbbfda000},{0xbbfdc000},{0xbbfde000},{0xbbfe0000},{0xbbfe2000},{0xbbfe4000},{0xbbfe6000},{0xbbfe8000},{0xbbfea000},{0xbbfec000},{0xbbfee000},{0xbbff0000},{0xbbff2000},{0xbbff4000},{0xbbff6000},{0xbbff8000},{0xbbffa000},{0xbbffc000},{0xbbffe000}, +{0xbc000000},{0xbc002000},{0xbc004000},{0xbc006000},{0xbc008000},{0xbc00a000},{0xbc00c000},{0xbc00e000},{0xbc010000},{0xbc012000},{0xbc014000},{0xbc016000},{0xbc018000},{0xbc01a000},{0xbc01c000},{0xbc01e000},{0xbc020000},{0xbc022000},{0xbc024000},{0xbc026000},{0xbc028000},{0xbc02a000},{0xbc02c000},{0xbc02e000},{0xbc030000},{0xbc032000},{0xbc034000},{0xbc036000},{0xbc038000},{0xbc03a000},{0xbc03c000},{0xbc03e000}, +{0xbc040000},{0xbc042000},{0xbc044000},{0xbc046000},{0xbc048000},{0xbc04a000},{0xbc04c000},{0xbc04e000},{0xbc050000},{0xbc052000},{0xbc054000},{0xbc056000},{0xbc058000},{0xbc05a000},{0xbc05c000},{0xbc05e000},{0xbc060000},{0xbc062000},{0xbc064000},{0xbc066000},{0xbc068000},{0xbc06a000},{0xbc06c000},{0xbc06e000},{0xbc070000},{0xbc072000},{0xbc074000},{0xbc076000},{0xbc078000},{0xbc07a000},{0xbc07c000},{0xbc07e000}, +{0xbc080000},{0xbc082000},{0xbc084000},{0xbc086000},{0xbc088000},{0xbc08a000},{0xbc08c000},{0xbc08e000},{0xbc090000},{0xbc092000},{0xbc094000},{0xbc096000},{0xbc098000},{0xbc09a000},{0xbc09c000},{0xbc09e000},{0xbc0a0000},{0xbc0a2000},{0xbc0a4000},{0xbc0a6000},{0xbc0a8000},{0xbc0aa000},{0xbc0ac000},{0xbc0ae000},{0xbc0b0000},{0xbc0b2000},{0xbc0b4000},{0xbc0b6000},{0xbc0b8000},{0xbc0ba000},{0xbc0bc000},{0xbc0be000}, +{0xbc0c0000},{0xbc0c2000},{0xbc0c4000},{0xbc0c6000},{0xbc0c8000},{0xbc0ca000},{0xbc0cc000},{0xbc0ce000},{0xbc0d0000},{0xbc0d2000},{0xbc0d4000},{0xbc0d6000},{0xbc0d8000},{0xbc0da000},{0xbc0dc000},{0xbc0de000},{0xbc0e0000},{0xbc0e2000},{0xbc0e4000},{0xbc0e6000},{0xbc0e8000},{0xbc0ea000},{0xbc0ec000},{0xbc0ee000},{0xbc0f0000},{0xbc0f2000},{0xbc0f4000},{0xbc0f6000},{0xbc0f8000},{0xbc0fa000},{0xbc0fc000},{0xbc0fe000}, +{0xbc100000},{0xbc102000},{0xbc104000},{0xbc106000},{0xbc108000},{0xbc10a000},{0xbc10c000},{0xbc10e000},{0xbc110000},{0xbc112000},{0xbc114000},{0xbc116000},{0xbc118000},{0xbc11a000},{0xbc11c000},{0xbc11e000},{0xbc120000},{0xbc122000},{0xbc124000},{0xbc126000},{0xbc128000},{0xbc12a000},{0xbc12c000},{0xbc12e000},{0xbc130000},{0xbc132000},{0xbc134000},{0xbc136000},{0xbc138000},{0xbc13a000},{0xbc13c000},{0xbc13e000}, +{0xbc140000},{0xbc142000},{0xbc144000},{0xbc146000},{0xbc148000},{0xbc14a000},{0xbc14c000},{0xbc14e000},{0xbc150000},{0xbc152000},{0xbc154000},{0xbc156000},{0xbc158000},{0xbc15a000},{0xbc15c000},{0xbc15e000},{0xbc160000},{0xbc162000},{0xbc164000},{0xbc166000},{0xbc168000},{0xbc16a000},{0xbc16c000},{0xbc16e000},{0xbc170000},{0xbc172000},{0xbc174000},{0xbc176000},{0xbc178000},{0xbc17a000},{0xbc17c000},{0xbc17e000}, +{0xbc180000},{0xbc182000},{0xbc184000},{0xbc186000},{0xbc188000},{0xbc18a000},{0xbc18c000},{0xbc18e000},{0xbc190000},{0xbc192000},{0xbc194000},{0xbc196000},{0xbc198000},{0xbc19a000},{0xbc19c000},{0xbc19e000},{0xbc1a0000},{0xbc1a2000},{0xbc1a4000},{0xbc1a6000},{0xbc1a8000},{0xbc1aa000},{0xbc1ac000},{0xbc1ae000},{0xbc1b0000},{0xbc1b2000},{0xbc1b4000},{0xbc1b6000},{0xbc1b8000},{0xbc1ba000},{0xbc1bc000},{0xbc1be000}, +{0xbc1c0000},{0xbc1c2000},{0xbc1c4000},{0xbc1c6000},{0xbc1c8000},{0xbc1ca000},{0xbc1cc000},{0xbc1ce000},{0xbc1d0000},{0xbc1d2000},{0xbc1d4000},{0xbc1d6000},{0xbc1d8000},{0xbc1da000},{0xbc1dc000},{0xbc1de000},{0xbc1e0000},{0xbc1e2000},{0xbc1e4000},{0xbc1e6000},{0xbc1e8000},{0xbc1ea000},{0xbc1ec000},{0xbc1ee000},{0xbc1f0000},{0xbc1f2000},{0xbc1f4000},{0xbc1f6000},{0xbc1f8000},{0xbc1fa000},{0xbc1fc000},{0xbc1fe000}, +{0xbc200000},{0xbc202000},{0xbc204000},{0xbc206000},{0xbc208000},{0xbc20a000},{0xbc20c000},{0xbc20e000},{0xbc210000},{0xbc212000},{0xbc214000},{0xbc216000},{0xbc218000},{0xbc21a000},{0xbc21c000},{0xbc21e000},{0xbc220000},{0xbc222000},{0xbc224000},{0xbc226000},{0xbc228000},{0xbc22a000},{0xbc22c000},{0xbc22e000},{0xbc230000},{0xbc232000},{0xbc234000},{0xbc236000},{0xbc238000},{0xbc23a000},{0xbc23c000},{0xbc23e000}, +{0xbc240000},{0xbc242000},{0xbc244000},{0xbc246000},{0xbc248000},{0xbc24a000},{0xbc24c000},{0xbc24e000},{0xbc250000},{0xbc252000},{0xbc254000},{0xbc256000},{0xbc258000},{0xbc25a000},{0xbc25c000},{0xbc25e000},{0xbc260000},{0xbc262000},{0xbc264000},{0xbc266000},{0xbc268000},{0xbc26a000},{0xbc26c000},{0xbc26e000},{0xbc270000},{0xbc272000},{0xbc274000},{0xbc276000},{0xbc278000},{0xbc27a000},{0xbc27c000},{0xbc27e000}, +{0xbc280000},{0xbc282000},{0xbc284000},{0xbc286000},{0xbc288000},{0xbc28a000},{0xbc28c000},{0xbc28e000},{0xbc290000},{0xbc292000},{0xbc294000},{0xbc296000},{0xbc298000},{0xbc29a000},{0xbc29c000},{0xbc29e000},{0xbc2a0000},{0xbc2a2000},{0xbc2a4000},{0xbc2a6000},{0xbc2a8000},{0xbc2aa000},{0xbc2ac000},{0xbc2ae000},{0xbc2b0000},{0xbc2b2000},{0xbc2b4000},{0xbc2b6000},{0xbc2b8000},{0xbc2ba000},{0xbc2bc000},{0xbc2be000}, +{0xbc2c0000},{0xbc2c2000},{0xbc2c4000},{0xbc2c6000},{0xbc2c8000},{0xbc2ca000},{0xbc2cc000},{0xbc2ce000},{0xbc2d0000},{0xbc2d2000},{0xbc2d4000},{0xbc2d6000},{0xbc2d8000},{0xbc2da000},{0xbc2dc000},{0xbc2de000},{0xbc2e0000},{0xbc2e2000},{0xbc2e4000},{0xbc2e6000},{0xbc2e8000},{0xbc2ea000},{0xbc2ec000},{0xbc2ee000},{0xbc2f0000},{0xbc2f2000},{0xbc2f4000},{0xbc2f6000},{0xbc2f8000},{0xbc2fa000},{0xbc2fc000},{0xbc2fe000}, +{0xbc300000},{0xbc302000},{0xbc304000},{0xbc306000},{0xbc308000},{0xbc30a000},{0xbc30c000},{0xbc30e000},{0xbc310000},{0xbc312000},{0xbc314000},{0xbc316000},{0xbc318000},{0xbc31a000},{0xbc31c000},{0xbc31e000},{0xbc320000},{0xbc322000},{0xbc324000},{0xbc326000},{0xbc328000},{0xbc32a000},{0xbc32c000},{0xbc32e000},{0xbc330000},{0xbc332000},{0xbc334000},{0xbc336000},{0xbc338000},{0xbc33a000},{0xbc33c000},{0xbc33e000}, +{0xbc340000},{0xbc342000},{0xbc344000},{0xbc346000},{0xbc348000},{0xbc34a000},{0xbc34c000},{0xbc34e000},{0xbc350000},{0xbc352000},{0xbc354000},{0xbc356000},{0xbc358000},{0xbc35a000},{0xbc35c000},{0xbc35e000},{0xbc360000},{0xbc362000},{0xbc364000},{0xbc366000},{0xbc368000},{0xbc36a000},{0xbc36c000},{0xbc36e000},{0xbc370000},{0xbc372000},{0xbc374000},{0xbc376000},{0xbc378000},{0xbc37a000},{0xbc37c000},{0xbc37e000}, +{0xbc380000},{0xbc382000},{0xbc384000},{0xbc386000},{0xbc388000},{0xbc38a000},{0xbc38c000},{0xbc38e000},{0xbc390000},{0xbc392000},{0xbc394000},{0xbc396000},{0xbc398000},{0xbc39a000},{0xbc39c000},{0xbc39e000},{0xbc3a0000},{0xbc3a2000},{0xbc3a4000},{0xbc3a6000},{0xbc3a8000},{0xbc3aa000},{0xbc3ac000},{0xbc3ae000},{0xbc3b0000},{0xbc3b2000},{0xbc3b4000},{0xbc3b6000},{0xbc3b8000},{0xbc3ba000},{0xbc3bc000},{0xbc3be000}, +{0xbc3c0000},{0xbc3c2000},{0xbc3c4000},{0xbc3c6000},{0xbc3c8000},{0xbc3ca000},{0xbc3cc000},{0xbc3ce000},{0xbc3d0000},{0xbc3d2000},{0xbc3d4000},{0xbc3d6000},{0xbc3d8000},{0xbc3da000},{0xbc3dc000},{0xbc3de000},{0xbc3e0000},{0xbc3e2000},{0xbc3e4000},{0xbc3e6000},{0xbc3e8000},{0xbc3ea000},{0xbc3ec000},{0xbc3ee000},{0xbc3f0000},{0xbc3f2000},{0xbc3f4000},{0xbc3f6000},{0xbc3f8000},{0xbc3fa000},{0xbc3fc000},{0xbc3fe000}, +{0xbc400000},{0xbc402000},{0xbc404000},{0xbc406000},{0xbc408000},{0xbc40a000},{0xbc40c000},{0xbc40e000},{0xbc410000},{0xbc412000},{0xbc414000},{0xbc416000},{0xbc418000},{0xbc41a000},{0xbc41c000},{0xbc41e000},{0xbc420000},{0xbc422000},{0xbc424000},{0xbc426000},{0xbc428000},{0xbc42a000},{0xbc42c000},{0xbc42e000},{0xbc430000},{0xbc432000},{0xbc434000},{0xbc436000},{0xbc438000},{0xbc43a000},{0xbc43c000},{0xbc43e000}, +{0xbc440000},{0xbc442000},{0xbc444000},{0xbc446000},{0xbc448000},{0xbc44a000},{0xbc44c000},{0xbc44e000},{0xbc450000},{0xbc452000},{0xbc454000},{0xbc456000},{0xbc458000},{0xbc45a000},{0xbc45c000},{0xbc45e000},{0xbc460000},{0xbc462000},{0xbc464000},{0xbc466000},{0xbc468000},{0xbc46a000},{0xbc46c000},{0xbc46e000},{0xbc470000},{0xbc472000},{0xbc474000},{0xbc476000},{0xbc478000},{0xbc47a000},{0xbc47c000},{0xbc47e000}, +{0xbc480000},{0xbc482000},{0xbc484000},{0xbc486000},{0xbc488000},{0xbc48a000},{0xbc48c000},{0xbc48e000},{0xbc490000},{0xbc492000},{0xbc494000},{0xbc496000},{0xbc498000},{0xbc49a000},{0xbc49c000},{0xbc49e000},{0xbc4a0000},{0xbc4a2000},{0xbc4a4000},{0xbc4a6000},{0xbc4a8000},{0xbc4aa000},{0xbc4ac000},{0xbc4ae000},{0xbc4b0000},{0xbc4b2000},{0xbc4b4000},{0xbc4b6000},{0xbc4b8000},{0xbc4ba000},{0xbc4bc000},{0xbc4be000}, +{0xbc4c0000},{0xbc4c2000},{0xbc4c4000},{0xbc4c6000},{0xbc4c8000},{0xbc4ca000},{0xbc4cc000},{0xbc4ce000},{0xbc4d0000},{0xbc4d2000},{0xbc4d4000},{0xbc4d6000},{0xbc4d8000},{0xbc4da000},{0xbc4dc000},{0xbc4de000},{0xbc4e0000},{0xbc4e2000},{0xbc4e4000},{0xbc4e6000},{0xbc4e8000},{0xbc4ea000},{0xbc4ec000},{0xbc4ee000},{0xbc4f0000},{0xbc4f2000},{0xbc4f4000},{0xbc4f6000},{0xbc4f8000},{0xbc4fa000},{0xbc4fc000},{0xbc4fe000}, +{0xbc500000},{0xbc502000},{0xbc504000},{0xbc506000},{0xbc508000},{0xbc50a000},{0xbc50c000},{0xbc50e000},{0xbc510000},{0xbc512000},{0xbc514000},{0xbc516000},{0xbc518000},{0xbc51a000},{0xbc51c000},{0xbc51e000},{0xbc520000},{0xbc522000},{0xbc524000},{0xbc526000},{0xbc528000},{0xbc52a000},{0xbc52c000},{0xbc52e000},{0xbc530000},{0xbc532000},{0xbc534000},{0xbc536000},{0xbc538000},{0xbc53a000},{0xbc53c000},{0xbc53e000}, +{0xbc540000},{0xbc542000},{0xbc544000},{0xbc546000},{0xbc548000},{0xbc54a000},{0xbc54c000},{0xbc54e000},{0xbc550000},{0xbc552000},{0xbc554000},{0xbc556000},{0xbc558000},{0xbc55a000},{0xbc55c000},{0xbc55e000},{0xbc560000},{0xbc562000},{0xbc564000},{0xbc566000},{0xbc568000},{0xbc56a000},{0xbc56c000},{0xbc56e000},{0xbc570000},{0xbc572000},{0xbc574000},{0xbc576000},{0xbc578000},{0xbc57a000},{0xbc57c000},{0xbc57e000}, +{0xbc580000},{0xbc582000},{0xbc584000},{0xbc586000},{0xbc588000},{0xbc58a000},{0xbc58c000},{0xbc58e000},{0xbc590000},{0xbc592000},{0xbc594000},{0xbc596000},{0xbc598000},{0xbc59a000},{0xbc59c000},{0xbc59e000},{0xbc5a0000},{0xbc5a2000},{0xbc5a4000},{0xbc5a6000},{0xbc5a8000},{0xbc5aa000},{0xbc5ac000},{0xbc5ae000},{0xbc5b0000},{0xbc5b2000},{0xbc5b4000},{0xbc5b6000},{0xbc5b8000},{0xbc5ba000},{0xbc5bc000},{0xbc5be000}, +{0xbc5c0000},{0xbc5c2000},{0xbc5c4000},{0xbc5c6000},{0xbc5c8000},{0xbc5ca000},{0xbc5cc000},{0xbc5ce000},{0xbc5d0000},{0xbc5d2000},{0xbc5d4000},{0xbc5d6000},{0xbc5d8000},{0xbc5da000},{0xbc5dc000},{0xbc5de000},{0xbc5e0000},{0xbc5e2000},{0xbc5e4000},{0xbc5e6000},{0xbc5e8000},{0xbc5ea000},{0xbc5ec000},{0xbc5ee000},{0xbc5f0000},{0xbc5f2000},{0xbc5f4000},{0xbc5f6000},{0xbc5f8000},{0xbc5fa000},{0xbc5fc000},{0xbc5fe000}, +{0xbc600000},{0xbc602000},{0xbc604000},{0xbc606000},{0xbc608000},{0xbc60a000},{0xbc60c000},{0xbc60e000},{0xbc610000},{0xbc612000},{0xbc614000},{0xbc616000},{0xbc618000},{0xbc61a000},{0xbc61c000},{0xbc61e000},{0xbc620000},{0xbc622000},{0xbc624000},{0xbc626000},{0xbc628000},{0xbc62a000},{0xbc62c000},{0xbc62e000},{0xbc630000},{0xbc632000},{0xbc634000},{0xbc636000},{0xbc638000},{0xbc63a000},{0xbc63c000},{0xbc63e000}, +{0xbc640000},{0xbc642000},{0xbc644000},{0xbc646000},{0xbc648000},{0xbc64a000},{0xbc64c000},{0xbc64e000},{0xbc650000},{0xbc652000},{0xbc654000},{0xbc656000},{0xbc658000},{0xbc65a000},{0xbc65c000},{0xbc65e000},{0xbc660000},{0xbc662000},{0xbc664000},{0xbc666000},{0xbc668000},{0xbc66a000},{0xbc66c000},{0xbc66e000},{0xbc670000},{0xbc672000},{0xbc674000},{0xbc676000},{0xbc678000},{0xbc67a000},{0xbc67c000},{0xbc67e000}, +{0xbc680000},{0xbc682000},{0xbc684000},{0xbc686000},{0xbc688000},{0xbc68a000},{0xbc68c000},{0xbc68e000},{0xbc690000},{0xbc692000},{0xbc694000},{0xbc696000},{0xbc698000},{0xbc69a000},{0xbc69c000},{0xbc69e000},{0xbc6a0000},{0xbc6a2000},{0xbc6a4000},{0xbc6a6000},{0xbc6a8000},{0xbc6aa000},{0xbc6ac000},{0xbc6ae000},{0xbc6b0000},{0xbc6b2000},{0xbc6b4000},{0xbc6b6000},{0xbc6b8000},{0xbc6ba000},{0xbc6bc000},{0xbc6be000}, +{0xbc6c0000},{0xbc6c2000},{0xbc6c4000},{0xbc6c6000},{0xbc6c8000},{0xbc6ca000},{0xbc6cc000},{0xbc6ce000},{0xbc6d0000},{0xbc6d2000},{0xbc6d4000},{0xbc6d6000},{0xbc6d8000},{0xbc6da000},{0xbc6dc000},{0xbc6de000},{0xbc6e0000},{0xbc6e2000},{0xbc6e4000},{0xbc6e6000},{0xbc6e8000},{0xbc6ea000},{0xbc6ec000},{0xbc6ee000},{0xbc6f0000},{0xbc6f2000},{0xbc6f4000},{0xbc6f6000},{0xbc6f8000},{0xbc6fa000},{0xbc6fc000},{0xbc6fe000}, +{0xbc700000},{0xbc702000},{0xbc704000},{0xbc706000},{0xbc708000},{0xbc70a000},{0xbc70c000},{0xbc70e000},{0xbc710000},{0xbc712000},{0xbc714000},{0xbc716000},{0xbc718000},{0xbc71a000},{0xbc71c000},{0xbc71e000},{0xbc720000},{0xbc722000},{0xbc724000},{0xbc726000},{0xbc728000},{0xbc72a000},{0xbc72c000},{0xbc72e000},{0xbc730000},{0xbc732000},{0xbc734000},{0xbc736000},{0xbc738000},{0xbc73a000},{0xbc73c000},{0xbc73e000}, +{0xbc740000},{0xbc742000},{0xbc744000},{0xbc746000},{0xbc748000},{0xbc74a000},{0xbc74c000},{0xbc74e000},{0xbc750000},{0xbc752000},{0xbc754000},{0xbc756000},{0xbc758000},{0xbc75a000},{0xbc75c000},{0xbc75e000},{0xbc760000},{0xbc762000},{0xbc764000},{0xbc766000},{0xbc768000},{0xbc76a000},{0xbc76c000},{0xbc76e000},{0xbc770000},{0xbc772000},{0xbc774000},{0xbc776000},{0xbc778000},{0xbc77a000},{0xbc77c000},{0xbc77e000}, +{0xbc780000},{0xbc782000},{0xbc784000},{0xbc786000},{0xbc788000},{0xbc78a000},{0xbc78c000},{0xbc78e000},{0xbc790000},{0xbc792000},{0xbc794000},{0xbc796000},{0xbc798000},{0xbc79a000},{0xbc79c000},{0xbc79e000},{0xbc7a0000},{0xbc7a2000},{0xbc7a4000},{0xbc7a6000},{0xbc7a8000},{0xbc7aa000},{0xbc7ac000},{0xbc7ae000},{0xbc7b0000},{0xbc7b2000},{0xbc7b4000},{0xbc7b6000},{0xbc7b8000},{0xbc7ba000},{0xbc7bc000},{0xbc7be000}, +{0xbc7c0000},{0xbc7c2000},{0xbc7c4000},{0xbc7c6000},{0xbc7c8000},{0xbc7ca000},{0xbc7cc000},{0xbc7ce000},{0xbc7d0000},{0xbc7d2000},{0xbc7d4000},{0xbc7d6000},{0xbc7d8000},{0xbc7da000},{0xbc7dc000},{0xbc7de000},{0xbc7e0000},{0xbc7e2000},{0xbc7e4000},{0xbc7e6000},{0xbc7e8000},{0xbc7ea000},{0xbc7ec000},{0xbc7ee000},{0xbc7f0000},{0xbc7f2000},{0xbc7f4000},{0xbc7f6000},{0xbc7f8000},{0xbc7fa000},{0xbc7fc000},{0xbc7fe000}, +{0xbc800000},{0xbc802000},{0xbc804000},{0xbc806000},{0xbc808000},{0xbc80a000},{0xbc80c000},{0xbc80e000},{0xbc810000},{0xbc812000},{0xbc814000},{0xbc816000},{0xbc818000},{0xbc81a000},{0xbc81c000},{0xbc81e000},{0xbc820000},{0xbc822000},{0xbc824000},{0xbc826000},{0xbc828000},{0xbc82a000},{0xbc82c000},{0xbc82e000},{0xbc830000},{0xbc832000},{0xbc834000},{0xbc836000},{0xbc838000},{0xbc83a000},{0xbc83c000},{0xbc83e000}, +{0xbc840000},{0xbc842000},{0xbc844000},{0xbc846000},{0xbc848000},{0xbc84a000},{0xbc84c000},{0xbc84e000},{0xbc850000},{0xbc852000},{0xbc854000},{0xbc856000},{0xbc858000},{0xbc85a000},{0xbc85c000},{0xbc85e000},{0xbc860000},{0xbc862000},{0xbc864000},{0xbc866000},{0xbc868000},{0xbc86a000},{0xbc86c000},{0xbc86e000},{0xbc870000},{0xbc872000},{0xbc874000},{0xbc876000},{0xbc878000},{0xbc87a000},{0xbc87c000},{0xbc87e000}, +{0xbc880000},{0xbc882000},{0xbc884000},{0xbc886000},{0xbc888000},{0xbc88a000},{0xbc88c000},{0xbc88e000},{0xbc890000},{0xbc892000},{0xbc894000},{0xbc896000},{0xbc898000},{0xbc89a000},{0xbc89c000},{0xbc89e000},{0xbc8a0000},{0xbc8a2000},{0xbc8a4000},{0xbc8a6000},{0xbc8a8000},{0xbc8aa000},{0xbc8ac000},{0xbc8ae000},{0xbc8b0000},{0xbc8b2000},{0xbc8b4000},{0xbc8b6000},{0xbc8b8000},{0xbc8ba000},{0xbc8bc000},{0xbc8be000}, +{0xbc8c0000},{0xbc8c2000},{0xbc8c4000},{0xbc8c6000},{0xbc8c8000},{0xbc8ca000},{0xbc8cc000},{0xbc8ce000},{0xbc8d0000},{0xbc8d2000},{0xbc8d4000},{0xbc8d6000},{0xbc8d8000},{0xbc8da000},{0xbc8dc000},{0xbc8de000},{0xbc8e0000},{0xbc8e2000},{0xbc8e4000},{0xbc8e6000},{0xbc8e8000},{0xbc8ea000},{0xbc8ec000},{0xbc8ee000},{0xbc8f0000},{0xbc8f2000},{0xbc8f4000},{0xbc8f6000},{0xbc8f8000},{0xbc8fa000},{0xbc8fc000},{0xbc8fe000}, +{0xbc900000},{0xbc902000},{0xbc904000},{0xbc906000},{0xbc908000},{0xbc90a000},{0xbc90c000},{0xbc90e000},{0xbc910000},{0xbc912000},{0xbc914000},{0xbc916000},{0xbc918000},{0xbc91a000},{0xbc91c000},{0xbc91e000},{0xbc920000},{0xbc922000},{0xbc924000},{0xbc926000},{0xbc928000},{0xbc92a000},{0xbc92c000},{0xbc92e000},{0xbc930000},{0xbc932000},{0xbc934000},{0xbc936000},{0xbc938000},{0xbc93a000},{0xbc93c000},{0xbc93e000}, +{0xbc940000},{0xbc942000},{0xbc944000},{0xbc946000},{0xbc948000},{0xbc94a000},{0xbc94c000},{0xbc94e000},{0xbc950000},{0xbc952000},{0xbc954000},{0xbc956000},{0xbc958000},{0xbc95a000},{0xbc95c000},{0xbc95e000},{0xbc960000},{0xbc962000},{0xbc964000},{0xbc966000},{0xbc968000},{0xbc96a000},{0xbc96c000},{0xbc96e000},{0xbc970000},{0xbc972000},{0xbc974000},{0xbc976000},{0xbc978000},{0xbc97a000},{0xbc97c000},{0xbc97e000}, +{0xbc980000},{0xbc982000},{0xbc984000},{0xbc986000},{0xbc988000},{0xbc98a000},{0xbc98c000},{0xbc98e000},{0xbc990000},{0xbc992000},{0xbc994000},{0xbc996000},{0xbc998000},{0xbc99a000},{0xbc99c000},{0xbc99e000},{0xbc9a0000},{0xbc9a2000},{0xbc9a4000},{0xbc9a6000},{0xbc9a8000},{0xbc9aa000},{0xbc9ac000},{0xbc9ae000},{0xbc9b0000},{0xbc9b2000},{0xbc9b4000},{0xbc9b6000},{0xbc9b8000},{0xbc9ba000},{0xbc9bc000},{0xbc9be000}, +{0xbc9c0000},{0xbc9c2000},{0xbc9c4000},{0xbc9c6000},{0xbc9c8000},{0xbc9ca000},{0xbc9cc000},{0xbc9ce000},{0xbc9d0000},{0xbc9d2000},{0xbc9d4000},{0xbc9d6000},{0xbc9d8000},{0xbc9da000},{0xbc9dc000},{0xbc9de000},{0xbc9e0000},{0xbc9e2000},{0xbc9e4000},{0xbc9e6000},{0xbc9e8000},{0xbc9ea000},{0xbc9ec000},{0xbc9ee000},{0xbc9f0000},{0xbc9f2000},{0xbc9f4000},{0xbc9f6000},{0xbc9f8000},{0xbc9fa000},{0xbc9fc000},{0xbc9fe000}, +{0xbca00000},{0xbca02000},{0xbca04000},{0xbca06000},{0xbca08000},{0xbca0a000},{0xbca0c000},{0xbca0e000},{0xbca10000},{0xbca12000},{0xbca14000},{0xbca16000},{0xbca18000},{0xbca1a000},{0xbca1c000},{0xbca1e000},{0xbca20000},{0xbca22000},{0xbca24000},{0xbca26000},{0xbca28000},{0xbca2a000},{0xbca2c000},{0xbca2e000},{0xbca30000},{0xbca32000},{0xbca34000},{0xbca36000},{0xbca38000},{0xbca3a000},{0xbca3c000},{0xbca3e000}, +{0xbca40000},{0xbca42000},{0xbca44000},{0xbca46000},{0xbca48000},{0xbca4a000},{0xbca4c000},{0xbca4e000},{0xbca50000},{0xbca52000},{0xbca54000},{0xbca56000},{0xbca58000},{0xbca5a000},{0xbca5c000},{0xbca5e000},{0xbca60000},{0xbca62000},{0xbca64000},{0xbca66000},{0xbca68000},{0xbca6a000},{0xbca6c000},{0xbca6e000},{0xbca70000},{0xbca72000},{0xbca74000},{0xbca76000},{0xbca78000},{0xbca7a000},{0xbca7c000},{0xbca7e000}, +{0xbca80000},{0xbca82000},{0xbca84000},{0xbca86000},{0xbca88000},{0xbca8a000},{0xbca8c000},{0xbca8e000},{0xbca90000},{0xbca92000},{0xbca94000},{0xbca96000},{0xbca98000},{0xbca9a000},{0xbca9c000},{0xbca9e000},{0xbcaa0000},{0xbcaa2000},{0xbcaa4000},{0xbcaa6000},{0xbcaa8000},{0xbcaaa000},{0xbcaac000},{0xbcaae000},{0xbcab0000},{0xbcab2000},{0xbcab4000},{0xbcab6000},{0xbcab8000},{0xbcaba000},{0xbcabc000},{0xbcabe000}, +{0xbcac0000},{0xbcac2000},{0xbcac4000},{0xbcac6000},{0xbcac8000},{0xbcaca000},{0xbcacc000},{0xbcace000},{0xbcad0000},{0xbcad2000},{0xbcad4000},{0xbcad6000},{0xbcad8000},{0xbcada000},{0xbcadc000},{0xbcade000},{0xbcae0000},{0xbcae2000},{0xbcae4000},{0xbcae6000},{0xbcae8000},{0xbcaea000},{0xbcaec000},{0xbcaee000},{0xbcaf0000},{0xbcaf2000},{0xbcaf4000},{0xbcaf6000},{0xbcaf8000},{0xbcafa000},{0xbcafc000},{0xbcafe000}, +{0xbcb00000},{0xbcb02000},{0xbcb04000},{0xbcb06000},{0xbcb08000},{0xbcb0a000},{0xbcb0c000},{0xbcb0e000},{0xbcb10000},{0xbcb12000},{0xbcb14000},{0xbcb16000},{0xbcb18000},{0xbcb1a000},{0xbcb1c000},{0xbcb1e000},{0xbcb20000},{0xbcb22000},{0xbcb24000},{0xbcb26000},{0xbcb28000},{0xbcb2a000},{0xbcb2c000},{0xbcb2e000},{0xbcb30000},{0xbcb32000},{0xbcb34000},{0xbcb36000},{0xbcb38000},{0xbcb3a000},{0xbcb3c000},{0xbcb3e000}, +{0xbcb40000},{0xbcb42000},{0xbcb44000},{0xbcb46000},{0xbcb48000},{0xbcb4a000},{0xbcb4c000},{0xbcb4e000},{0xbcb50000},{0xbcb52000},{0xbcb54000},{0xbcb56000},{0xbcb58000},{0xbcb5a000},{0xbcb5c000},{0xbcb5e000},{0xbcb60000},{0xbcb62000},{0xbcb64000},{0xbcb66000},{0xbcb68000},{0xbcb6a000},{0xbcb6c000},{0xbcb6e000},{0xbcb70000},{0xbcb72000},{0xbcb74000},{0xbcb76000},{0xbcb78000},{0xbcb7a000},{0xbcb7c000},{0xbcb7e000}, +{0xbcb80000},{0xbcb82000},{0xbcb84000},{0xbcb86000},{0xbcb88000},{0xbcb8a000},{0xbcb8c000},{0xbcb8e000},{0xbcb90000},{0xbcb92000},{0xbcb94000},{0xbcb96000},{0xbcb98000},{0xbcb9a000},{0xbcb9c000},{0xbcb9e000},{0xbcba0000},{0xbcba2000},{0xbcba4000},{0xbcba6000},{0xbcba8000},{0xbcbaa000},{0xbcbac000},{0xbcbae000},{0xbcbb0000},{0xbcbb2000},{0xbcbb4000},{0xbcbb6000},{0xbcbb8000},{0xbcbba000},{0xbcbbc000},{0xbcbbe000}, +{0xbcbc0000},{0xbcbc2000},{0xbcbc4000},{0xbcbc6000},{0xbcbc8000},{0xbcbca000},{0xbcbcc000},{0xbcbce000},{0xbcbd0000},{0xbcbd2000},{0xbcbd4000},{0xbcbd6000},{0xbcbd8000},{0xbcbda000},{0xbcbdc000},{0xbcbde000},{0xbcbe0000},{0xbcbe2000},{0xbcbe4000},{0xbcbe6000},{0xbcbe8000},{0xbcbea000},{0xbcbec000},{0xbcbee000},{0xbcbf0000},{0xbcbf2000},{0xbcbf4000},{0xbcbf6000},{0xbcbf8000},{0xbcbfa000},{0xbcbfc000},{0xbcbfe000}, +{0xbcc00000},{0xbcc02000},{0xbcc04000},{0xbcc06000},{0xbcc08000},{0xbcc0a000},{0xbcc0c000},{0xbcc0e000},{0xbcc10000},{0xbcc12000},{0xbcc14000},{0xbcc16000},{0xbcc18000},{0xbcc1a000},{0xbcc1c000},{0xbcc1e000},{0xbcc20000},{0xbcc22000},{0xbcc24000},{0xbcc26000},{0xbcc28000},{0xbcc2a000},{0xbcc2c000},{0xbcc2e000},{0xbcc30000},{0xbcc32000},{0xbcc34000},{0xbcc36000},{0xbcc38000},{0xbcc3a000},{0xbcc3c000},{0xbcc3e000}, +{0xbcc40000},{0xbcc42000},{0xbcc44000},{0xbcc46000},{0xbcc48000},{0xbcc4a000},{0xbcc4c000},{0xbcc4e000},{0xbcc50000},{0xbcc52000},{0xbcc54000},{0xbcc56000},{0xbcc58000},{0xbcc5a000},{0xbcc5c000},{0xbcc5e000},{0xbcc60000},{0xbcc62000},{0xbcc64000},{0xbcc66000},{0xbcc68000},{0xbcc6a000},{0xbcc6c000},{0xbcc6e000},{0xbcc70000},{0xbcc72000},{0xbcc74000},{0xbcc76000},{0xbcc78000},{0xbcc7a000},{0xbcc7c000},{0xbcc7e000}, +{0xbcc80000},{0xbcc82000},{0xbcc84000},{0xbcc86000},{0xbcc88000},{0xbcc8a000},{0xbcc8c000},{0xbcc8e000},{0xbcc90000},{0xbcc92000},{0xbcc94000},{0xbcc96000},{0xbcc98000},{0xbcc9a000},{0xbcc9c000},{0xbcc9e000},{0xbcca0000},{0xbcca2000},{0xbcca4000},{0xbcca6000},{0xbcca8000},{0xbccaa000},{0xbccac000},{0xbccae000},{0xbccb0000},{0xbccb2000},{0xbccb4000},{0xbccb6000},{0xbccb8000},{0xbccba000},{0xbccbc000},{0xbccbe000}, +{0xbccc0000},{0xbccc2000},{0xbccc4000},{0xbccc6000},{0xbccc8000},{0xbccca000},{0xbcccc000},{0xbccce000},{0xbccd0000},{0xbccd2000},{0xbccd4000},{0xbccd6000},{0xbccd8000},{0xbccda000},{0xbccdc000},{0xbccde000},{0xbcce0000},{0xbcce2000},{0xbcce4000},{0xbcce6000},{0xbcce8000},{0xbccea000},{0xbccec000},{0xbccee000},{0xbccf0000},{0xbccf2000},{0xbccf4000},{0xbccf6000},{0xbccf8000},{0xbccfa000},{0xbccfc000},{0xbccfe000}, +{0xbcd00000},{0xbcd02000},{0xbcd04000},{0xbcd06000},{0xbcd08000},{0xbcd0a000},{0xbcd0c000},{0xbcd0e000},{0xbcd10000},{0xbcd12000},{0xbcd14000},{0xbcd16000},{0xbcd18000},{0xbcd1a000},{0xbcd1c000},{0xbcd1e000},{0xbcd20000},{0xbcd22000},{0xbcd24000},{0xbcd26000},{0xbcd28000},{0xbcd2a000},{0xbcd2c000},{0xbcd2e000},{0xbcd30000},{0xbcd32000},{0xbcd34000},{0xbcd36000},{0xbcd38000},{0xbcd3a000},{0xbcd3c000},{0xbcd3e000}, +{0xbcd40000},{0xbcd42000},{0xbcd44000},{0xbcd46000},{0xbcd48000},{0xbcd4a000},{0xbcd4c000},{0xbcd4e000},{0xbcd50000},{0xbcd52000},{0xbcd54000},{0xbcd56000},{0xbcd58000},{0xbcd5a000},{0xbcd5c000},{0xbcd5e000},{0xbcd60000},{0xbcd62000},{0xbcd64000},{0xbcd66000},{0xbcd68000},{0xbcd6a000},{0xbcd6c000},{0xbcd6e000},{0xbcd70000},{0xbcd72000},{0xbcd74000},{0xbcd76000},{0xbcd78000},{0xbcd7a000},{0xbcd7c000},{0xbcd7e000}, +{0xbcd80000},{0xbcd82000},{0xbcd84000},{0xbcd86000},{0xbcd88000},{0xbcd8a000},{0xbcd8c000},{0xbcd8e000},{0xbcd90000},{0xbcd92000},{0xbcd94000},{0xbcd96000},{0xbcd98000},{0xbcd9a000},{0xbcd9c000},{0xbcd9e000},{0xbcda0000},{0xbcda2000},{0xbcda4000},{0xbcda6000},{0xbcda8000},{0xbcdaa000},{0xbcdac000},{0xbcdae000},{0xbcdb0000},{0xbcdb2000},{0xbcdb4000},{0xbcdb6000},{0xbcdb8000},{0xbcdba000},{0xbcdbc000},{0xbcdbe000}, +{0xbcdc0000},{0xbcdc2000},{0xbcdc4000},{0xbcdc6000},{0xbcdc8000},{0xbcdca000},{0xbcdcc000},{0xbcdce000},{0xbcdd0000},{0xbcdd2000},{0xbcdd4000},{0xbcdd6000},{0xbcdd8000},{0xbcdda000},{0xbcddc000},{0xbcdde000},{0xbcde0000},{0xbcde2000},{0xbcde4000},{0xbcde6000},{0xbcde8000},{0xbcdea000},{0xbcdec000},{0xbcdee000},{0xbcdf0000},{0xbcdf2000},{0xbcdf4000},{0xbcdf6000},{0xbcdf8000},{0xbcdfa000},{0xbcdfc000},{0xbcdfe000}, +{0xbce00000},{0xbce02000},{0xbce04000},{0xbce06000},{0xbce08000},{0xbce0a000},{0xbce0c000},{0xbce0e000},{0xbce10000},{0xbce12000},{0xbce14000},{0xbce16000},{0xbce18000},{0xbce1a000},{0xbce1c000},{0xbce1e000},{0xbce20000},{0xbce22000},{0xbce24000},{0xbce26000},{0xbce28000},{0xbce2a000},{0xbce2c000},{0xbce2e000},{0xbce30000},{0xbce32000},{0xbce34000},{0xbce36000},{0xbce38000},{0xbce3a000},{0xbce3c000},{0xbce3e000}, +{0xbce40000},{0xbce42000},{0xbce44000},{0xbce46000},{0xbce48000},{0xbce4a000},{0xbce4c000},{0xbce4e000},{0xbce50000},{0xbce52000},{0xbce54000},{0xbce56000},{0xbce58000},{0xbce5a000},{0xbce5c000},{0xbce5e000},{0xbce60000},{0xbce62000},{0xbce64000},{0xbce66000},{0xbce68000},{0xbce6a000},{0xbce6c000},{0xbce6e000},{0xbce70000},{0xbce72000},{0xbce74000},{0xbce76000},{0xbce78000},{0xbce7a000},{0xbce7c000},{0xbce7e000}, +{0xbce80000},{0xbce82000},{0xbce84000},{0xbce86000},{0xbce88000},{0xbce8a000},{0xbce8c000},{0xbce8e000},{0xbce90000},{0xbce92000},{0xbce94000},{0xbce96000},{0xbce98000},{0xbce9a000},{0xbce9c000},{0xbce9e000},{0xbcea0000},{0xbcea2000},{0xbcea4000},{0xbcea6000},{0xbcea8000},{0xbceaa000},{0xbceac000},{0xbceae000},{0xbceb0000},{0xbceb2000},{0xbceb4000},{0xbceb6000},{0xbceb8000},{0xbceba000},{0xbcebc000},{0xbcebe000}, +{0xbcec0000},{0xbcec2000},{0xbcec4000},{0xbcec6000},{0xbcec8000},{0xbceca000},{0xbcecc000},{0xbcece000},{0xbced0000},{0xbced2000},{0xbced4000},{0xbced6000},{0xbced8000},{0xbceda000},{0xbcedc000},{0xbcede000},{0xbcee0000},{0xbcee2000},{0xbcee4000},{0xbcee6000},{0xbcee8000},{0xbceea000},{0xbceec000},{0xbceee000},{0xbcef0000},{0xbcef2000},{0xbcef4000},{0xbcef6000},{0xbcef8000},{0xbcefa000},{0xbcefc000},{0xbcefe000}, +{0xbcf00000},{0xbcf02000},{0xbcf04000},{0xbcf06000},{0xbcf08000},{0xbcf0a000},{0xbcf0c000},{0xbcf0e000},{0xbcf10000},{0xbcf12000},{0xbcf14000},{0xbcf16000},{0xbcf18000},{0xbcf1a000},{0xbcf1c000},{0xbcf1e000},{0xbcf20000},{0xbcf22000},{0xbcf24000},{0xbcf26000},{0xbcf28000},{0xbcf2a000},{0xbcf2c000},{0xbcf2e000},{0xbcf30000},{0xbcf32000},{0xbcf34000},{0xbcf36000},{0xbcf38000},{0xbcf3a000},{0xbcf3c000},{0xbcf3e000}, +{0xbcf40000},{0xbcf42000},{0xbcf44000},{0xbcf46000},{0xbcf48000},{0xbcf4a000},{0xbcf4c000},{0xbcf4e000},{0xbcf50000},{0xbcf52000},{0xbcf54000},{0xbcf56000},{0xbcf58000},{0xbcf5a000},{0xbcf5c000},{0xbcf5e000},{0xbcf60000},{0xbcf62000},{0xbcf64000},{0xbcf66000},{0xbcf68000},{0xbcf6a000},{0xbcf6c000},{0xbcf6e000},{0xbcf70000},{0xbcf72000},{0xbcf74000},{0xbcf76000},{0xbcf78000},{0xbcf7a000},{0xbcf7c000},{0xbcf7e000}, +{0xbcf80000},{0xbcf82000},{0xbcf84000},{0xbcf86000},{0xbcf88000},{0xbcf8a000},{0xbcf8c000},{0xbcf8e000},{0xbcf90000},{0xbcf92000},{0xbcf94000},{0xbcf96000},{0xbcf98000},{0xbcf9a000},{0xbcf9c000},{0xbcf9e000},{0xbcfa0000},{0xbcfa2000},{0xbcfa4000},{0xbcfa6000},{0xbcfa8000},{0xbcfaa000},{0xbcfac000},{0xbcfae000},{0xbcfb0000},{0xbcfb2000},{0xbcfb4000},{0xbcfb6000},{0xbcfb8000},{0xbcfba000},{0xbcfbc000},{0xbcfbe000}, +{0xbcfc0000},{0xbcfc2000},{0xbcfc4000},{0xbcfc6000},{0xbcfc8000},{0xbcfca000},{0xbcfcc000},{0xbcfce000},{0xbcfd0000},{0xbcfd2000},{0xbcfd4000},{0xbcfd6000},{0xbcfd8000},{0xbcfda000},{0xbcfdc000},{0xbcfde000},{0xbcfe0000},{0xbcfe2000},{0xbcfe4000},{0xbcfe6000},{0xbcfe8000},{0xbcfea000},{0xbcfec000},{0xbcfee000},{0xbcff0000},{0xbcff2000},{0xbcff4000},{0xbcff6000},{0xbcff8000},{0xbcffa000},{0xbcffc000},{0xbcffe000}, +{0xbd000000},{0xbd002000},{0xbd004000},{0xbd006000},{0xbd008000},{0xbd00a000},{0xbd00c000},{0xbd00e000},{0xbd010000},{0xbd012000},{0xbd014000},{0xbd016000},{0xbd018000},{0xbd01a000},{0xbd01c000},{0xbd01e000},{0xbd020000},{0xbd022000},{0xbd024000},{0xbd026000},{0xbd028000},{0xbd02a000},{0xbd02c000},{0xbd02e000},{0xbd030000},{0xbd032000},{0xbd034000},{0xbd036000},{0xbd038000},{0xbd03a000},{0xbd03c000},{0xbd03e000}, +{0xbd040000},{0xbd042000},{0xbd044000},{0xbd046000},{0xbd048000},{0xbd04a000},{0xbd04c000},{0xbd04e000},{0xbd050000},{0xbd052000},{0xbd054000},{0xbd056000},{0xbd058000},{0xbd05a000},{0xbd05c000},{0xbd05e000},{0xbd060000},{0xbd062000},{0xbd064000},{0xbd066000},{0xbd068000},{0xbd06a000},{0xbd06c000},{0xbd06e000},{0xbd070000},{0xbd072000},{0xbd074000},{0xbd076000},{0xbd078000},{0xbd07a000},{0xbd07c000},{0xbd07e000}, +{0xbd080000},{0xbd082000},{0xbd084000},{0xbd086000},{0xbd088000},{0xbd08a000},{0xbd08c000},{0xbd08e000},{0xbd090000},{0xbd092000},{0xbd094000},{0xbd096000},{0xbd098000},{0xbd09a000},{0xbd09c000},{0xbd09e000},{0xbd0a0000},{0xbd0a2000},{0xbd0a4000},{0xbd0a6000},{0xbd0a8000},{0xbd0aa000},{0xbd0ac000},{0xbd0ae000},{0xbd0b0000},{0xbd0b2000},{0xbd0b4000},{0xbd0b6000},{0xbd0b8000},{0xbd0ba000},{0xbd0bc000},{0xbd0be000}, +{0xbd0c0000},{0xbd0c2000},{0xbd0c4000},{0xbd0c6000},{0xbd0c8000},{0xbd0ca000},{0xbd0cc000},{0xbd0ce000},{0xbd0d0000},{0xbd0d2000},{0xbd0d4000},{0xbd0d6000},{0xbd0d8000},{0xbd0da000},{0xbd0dc000},{0xbd0de000},{0xbd0e0000},{0xbd0e2000},{0xbd0e4000},{0xbd0e6000},{0xbd0e8000},{0xbd0ea000},{0xbd0ec000},{0xbd0ee000},{0xbd0f0000},{0xbd0f2000},{0xbd0f4000},{0xbd0f6000},{0xbd0f8000},{0xbd0fa000},{0xbd0fc000},{0xbd0fe000}, +{0xbd100000},{0xbd102000},{0xbd104000},{0xbd106000},{0xbd108000},{0xbd10a000},{0xbd10c000},{0xbd10e000},{0xbd110000},{0xbd112000},{0xbd114000},{0xbd116000},{0xbd118000},{0xbd11a000},{0xbd11c000},{0xbd11e000},{0xbd120000},{0xbd122000},{0xbd124000},{0xbd126000},{0xbd128000},{0xbd12a000},{0xbd12c000},{0xbd12e000},{0xbd130000},{0xbd132000},{0xbd134000},{0xbd136000},{0xbd138000},{0xbd13a000},{0xbd13c000},{0xbd13e000}, +{0xbd140000},{0xbd142000},{0xbd144000},{0xbd146000},{0xbd148000},{0xbd14a000},{0xbd14c000},{0xbd14e000},{0xbd150000},{0xbd152000},{0xbd154000},{0xbd156000},{0xbd158000},{0xbd15a000},{0xbd15c000},{0xbd15e000},{0xbd160000},{0xbd162000},{0xbd164000},{0xbd166000},{0xbd168000},{0xbd16a000},{0xbd16c000},{0xbd16e000},{0xbd170000},{0xbd172000},{0xbd174000},{0xbd176000},{0xbd178000},{0xbd17a000},{0xbd17c000},{0xbd17e000}, +{0xbd180000},{0xbd182000},{0xbd184000},{0xbd186000},{0xbd188000},{0xbd18a000},{0xbd18c000},{0xbd18e000},{0xbd190000},{0xbd192000},{0xbd194000},{0xbd196000},{0xbd198000},{0xbd19a000},{0xbd19c000},{0xbd19e000},{0xbd1a0000},{0xbd1a2000},{0xbd1a4000},{0xbd1a6000},{0xbd1a8000},{0xbd1aa000},{0xbd1ac000},{0xbd1ae000},{0xbd1b0000},{0xbd1b2000},{0xbd1b4000},{0xbd1b6000},{0xbd1b8000},{0xbd1ba000},{0xbd1bc000},{0xbd1be000}, +{0xbd1c0000},{0xbd1c2000},{0xbd1c4000},{0xbd1c6000},{0xbd1c8000},{0xbd1ca000},{0xbd1cc000},{0xbd1ce000},{0xbd1d0000},{0xbd1d2000},{0xbd1d4000},{0xbd1d6000},{0xbd1d8000},{0xbd1da000},{0xbd1dc000},{0xbd1de000},{0xbd1e0000},{0xbd1e2000},{0xbd1e4000},{0xbd1e6000},{0xbd1e8000},{0xbd1ea000},{0xbd1ec000},{0xbd1ee000},{0xbd1f0000},{0xbd1f2000},{0xbd1f4000},{0xbd1f6000},{0xbd1f8000},{0xbd1fa000},{0xbd1fc000},{0xbd1fe000}, +{0xbd200000},{0xbd202000},{0xbd204000},{0xbd206000},{0xbd208000},{0xbd20a000},{0xbd20c000},{0xbd20e000},{0xbd210000},{0xbd212000},{0xbd214000},{0xbd216000},{0xbd218000},{0xbd21a000},{0xbd21c000},{0xbd21e000},{0xbd220000},{0xbd222000},{0xbd224000},{0xbd226000},{0xbd228000},{0xbd22a000},{0xbd22c000},{0xbd22e000},{0xbd230000},{0xbd232000},{0xbd234000},{0xbd236000},{0xbd238000},{0xbd23a000},{0xbd23c000},{0xbd23e000}, +{0xbd240000},{0xbd242000},{0xbd244000},{0xbd246000},{0xbd248000},{0xbd24a000},{0xbd24c000},{0xbd24e000},{0xbd250000},{0xbd252000},{0xbd254000},{0xbd256000},{0xbd258000},{0xbd25a000},{0xbd25c000},{0xbd25e000},{0xbd260000},{0xbd262000},{0xbd264000},{0xbd266000},{0xbd268000},{0xbd26a000},{0xbd26c000},{0xbd26e000},{0xbd270000},{0xbd272000},{0xbd274000},{0xbd276000},{0xbd278000},{0xbd27a000},{0xbd27c000},{0xbd27e000}, +{0xbd280000},{0xbd282000},{0xbd284000},{0xbd286000},{0xbd288000},{0xbd28a000},{0xbd28c000},{0xbd28e000},{0xbd290000},{0xbd292000},{0xbd294000},{0xbd296000},{0xbd298000},{0xbd29a000},{0xbd29c000},{0xbd29e000},{0xbd2a0000},{0xbd2a2000},{0xbd2a4000},{0xbd2a6000},{0xbd2a8000},{0xbd2aa000},{0xbd2ac000},{0xbd2ae000},{0xbd2b0000},{0xbd2b2000},{0xbd2b4000},{0xbd2b6000},{0xbd2b8000},{0xbd2ba000},{0xbd2bc000},{0xbd2be000}, +{0xbd2c0000},{0xbd2c2000},{0xbd2c4000},{0xbd2c6000},{0xbd2c8000},{0xbd2ca000},{0xbd2cc000},{0xbd2ce000},{0xbd2d0000},{0xbd2d2000},{0xbd2d4000},{0xbd2d6000},{0xbd2d8000},{0xbd2da000},{0xbd2dc000},{0xbd2de000},{0xbd2e0000},{0xbd2e2000},{0xbd2e4000},{0xbd2e6000},{0xbd2e8000},{0xbd2ea000},{0xbd2ec000},{0xbd2ee000},{0xbd2f0000},{0xbd2f2000},{0xbd2f4000},{0xbd2f6000},{0xbd2f8000},{0xbd2fa000},{0xbd2fc000},{0xbd2fe000}, +{0xbd300000},{0xbd302000},{0xbd304000},{0xbd306000},{0xbd308000},{0xbd30a000},{0xbd30c000},{0xbd30e000},{0xbd310000},{0xbd312000},{0xbd314000},{0xbd316000},{0xbd318000},{0xbd31a000},{0xbd31c000},{0xbd31e000},{0xbd320000},{0xbd322000},{0xbd324000},{0xbd326000},{0xbd328000},{0xbd32a000},{0xbd32c000},{0xbd32e000},{0xbd330000},{0xbd332000},{0xbd334000},{0xbd336000},{0xbd338000},{0xbd33a000},{0xbd33c000},{0xbd33e000}, +{0xbd340000},{0xbd342000},{0xbd344000},{0xbd346000},{0xbd348000},{0xbd34a000},{0xbd34c000},{0xbd34e000},{0xbd350000},{0xbd352000},{0xbd354000},{0xbd356000},{0xbd358000},{0xbd35a000},{0xbd35c000},{0xbd35e000},{0xbd360000},{0xbd362000},{0xbd364000},{0xbd366000},{0xbd368000},{0xbd36a000},{0xbd36c000},{0xbd36e000},{0xbd370000},{0xbd372000},{0xbd374000},{0xbd376000},{0xbd378000},{0xbd37a000},{0xbd37c000},{0xbd37e000}, +{0xbd380000},{0xbd382000},{0xbd384000},{0xbd386000},{0xbd388000},{0xbd38a000},{0xbd38c000},{0xbd38e000},{0xbd390000},{0xbd392000},{0xbd394000},{0xbd396000},{0xbd398000},{0xbd39a000},{0xbd39c000},{0xbd39e000},{0xbd3a0000},{0xbd3a2000},{0xbd3a4000},{0xbd3a6000},{0xbd3a8000},{0xbd3aa000},{0xbd3ac000},{0xbd3ae000},{0xbd3b0000},{0xbd3b2000},{0xbd3b4000},{0xbd3b6000},{0xbd3b8000},{0xbd3ba000},{0xbd3bc000},{0xbd3be000}, +{0xbd3c0000},{0xbd3c2000},{0xbd3c4000},{0xbd3c6000},{0xbd3c8000},{0xbd3ca000},{0xbd3cc000},{0xbd3ce000},{0xbd3d0000},{0xbd3d2000},{0xbd3d4000},{0xbd3d6000},{0xbd3d8000},{0xbd3da000},{0xbd3dc000},{0xbd3de000},{0xbd3e0000},{0xbd3e2000},{0xbd3e4000},{0xbd3e6000},{0xbd3e8000},{0xbd3ea000},{0xbd3ec000},{0xbd3ee000},{0xbd3f0000},{0xbd3f2000},{0xbd3f4000},{0xbd3f6000},{0xbd3f8000},{0xbd3fa000},{0xbd3fc000},{0xbd3fe000}, +{0xbd400000},{0xbd402000},{0xbd404000},{0xbd406000},{0xbd408000},{0xbd40a000},{0xbd40c000},{0xbd40e000},{0xbd410000},{0xbd412000},{0xbd414000},{0xbd416000},{0xbd418000},{0xbd41a000},{0xbd41c000},{0xbd41e000},{0xbd420000},{0xbd422000},{0xbd424000},{0xbd426000},{0xbd428000},{0xbd42a000},{0xbd42c000},{0xbd42e000},{0xbd430000},{0xbd432000},{0xbd434000},{0xbd436000},{0xbd438000},{0xbd43a000},{0xbd43c000},{0xbd43e000}, +{0xbd440000},{0xbd442000},{0xbd444000},{0xbd446000},{0xbd448000},{0xbd44a000},{0xbd44c000},{0xbd44e000},{0xbd450000},{0xbd452000},{0xbd454000},{0xbd456000},{0xbd458000},{0xbd45a000},{0xbd45c000},{0xbd45e000},{0xbd460000},{0xbd462000},{0xbd464000},{0xbd466000},{0xbd468000},{0xbd46a000},{0xbd46c000},{0xbd46e000},{0xbd470000},{0xbd472000},{0xbd474000},{0xbd476000},{0xbd478000},{0xbd47a000},{0xbd47c000},{0xbd47e000}, +{0xbd480000},{0xbd482000},{0xbd484000},{0xbd486000},{0xbd488000},{0xbd48a000},{0xbd48c000},{0xbd48e000},{0xbd490000},{0xbd492000},{0xbd494000},{0xbd496000},{0xbd498000},{0xbd49a000},{0xbd49c000},{0xbd49e000},{0xbd4a0000},{0xbd4a2000},{0xbd4a4000},{0xbd4a6000},{0xbd4a8000},{0xbd4aa000},{0xbd4ac000},{0xbd4ae000},{0xbd4b0000},{0xbd4b2000},{0xbd4b4000},{0xbd4b6000},{0xbd4b8000},{0xbd4ba000},{0xbd4bc000},{0xbd4be000}, +{0xbd4c0000},{0xbd4c2000},{0xbd4c4000},{0xbd4c6000},{0xbd4c8000},{0xbd4ca000},{0xbd4cc000},{0xbd4ce000},{0xbd4d0000},{0xbd4d2000},{0xbd4d4000},{0xbd4d6000},{0xbd4d8000},{0xbd4da000},{0xbd4dc000},{0xbd4de000},{0xbd4e0000},{0xbd4e2000},{0xbd4e4000},{0xbd4e6000},{0xbd4e8000},{0xbd4ea000},{0xbd4ec000},{0xbd4ee000},{0xbd4f0000},{0xbd4f2000},{0xbd4f4000},{0xbd4f6000},{0xbd4f8000},{0xbd4fa000},{0xbd4fc000},{0xbd4fe000}, +{0xbd500000},{0xbd502000},{0xbd504000},{0xbd506000},{0xbd508000},{0xbd50a000},{0xbd50c000},{0xbd50e000},{0xbd510000},{0xbd512000},{0xbd514000},{0xbd516000},{0xbd518000},{0xbd51a000},{0xbd51c000},{0xbd51e000},{0xbd520000},{0xbd522000},{0xbd524000},{0xbd526000},{0xbd528000},{0xbd52a000},{0xbd52c000},{0xbd52e000},{0xbd530000},{0xbd532000},{0xbd534000},{0xbd536000},{0xbd538000},{0xbd53a000},{0xbd53c000},{0xbd53e000}, +{0xbd540000},{0xbd542000},{0xbd544000},{0xbd546000},{0xbd548000},{0xbd54a000},{0xbd54c000},{0xbd54e000},{0xbd550000},{0xbd552000},{0xbd554000},{0xbd556000},{0xbd558000},{0xbd55a000},{0xbd55c000},{0xbd55e000},{0xbd560000},{0xbd562000},{0xbd564000},{0xbd566000},{0xbd568000},{0xbd56a000},{0xbd56c000},{0xbd56e000},{0xbd570000},{0xbd572000},{0xbd574000},{0xbd576000},{0xbd578000},{0xbd57a000},{0xbd57c000},{0xbd57e000}, +{0xbd580000},{0xbd582000},{0xbd584000},{0xbd586000},{0xbd588000},{0xbd58a000},{0xbd58c000},{0xbd58e000},{0xbd590000},{0xbd592000},{0xbd594000},{0xbd596000},{0xbd598000},{0xbd59a000},{0xbd59c000},{0xbd59e000},{0xbd5a0000},{0xbd5a2000},{0xbd5a4000},{0xbd5a6000},{0xbd5a8000},{0xbd5aa000},{0xbd5ac000},{0xbd5ae000},{0xbd5b0000},{0xbd5b2000},{0xbd5b4000},{0xbd5b6000},{0xbd5b8000},{0xbd5ba000},{0xbd5bc000},{0xbd5be000}, +{0xbd5c0000},{0xbd5c2000},{0xbd5c4000},{0xbd5c6000},{0xbd5c8000},{0xbd5ca000},{0xbd5cc000},{0xbd5ce000},{0xbd5d0000},{0xbd5d2000},{0xbd5d4000},{0xbd5d6000},{0xbd5d8000},{0xbd5da000},{0xbd5dc000},{0xbd5de000},{0xbd5e0000},{0xbd5e2000},{0xbd5e4000},{0xbd5e6000},{0xbd5e8000},{0xbd5ea000},{0xbd5ec000},{0xbd5ee000},{0xbd5f0000},{0xbd5f2000},{0xbd5f4000},{0xbd5f6000},{0xbd5f8000},{0xbd5fa000},{0xbd5fc000},{0xbd5fe000}, +{0xbd600000},{0xbd602000},{0xbd604000},{0xbd606000},{0xbd608000},{0xbd60a000},{0xbd60c000},{0xbd60e000},{0xbd610000},{0xbd612000},{0xbd614000},{0xbd616000},{0xbd618000},{0xbd61a000},{0xbd61c000},{0xbd61e000},{0xbd620000},{0xbd622000},{0xbd624000},{0xbd626000},{0xbd628000},{0xbd62a000},{0xbd62c000},{0xbd62e000},{0xbd630000},{0xbd632000},{0xbd634000},{0xbd636000},{0xbd638000},{0xbd63a000},{0xbd63c000},{0xbd63e000}, +{0xbd640000},{0xbd642000},{0xbd644000},{0xbd646000},{0xbd648000},{0xbd64a000},{0xbd64c000},{0xbd64e000},{0xbd650000},{0xbd652000},{0xbd654000},{0xbd656000},{0xbd658000},{0xbd65a000},{0xbd65c000},{0xbd65e000},{0xbd660000},{0xbd662000},{0xbd664000},{0xbd666000},{0xbd668000},{0xbd66a000},{0xbd66c000},{0xbd66e000},{0xbd670000},{0xbd672000},{0xbd674000},{0xbd676000},{0xbd678000},{0xbd67a000},{0xbd67c000},{0xbd67e000}, +{0xbd680000},{0xbd682000},{0xbd684000},{0xbd686000},{0xbd688000},{0xbd68a000},{0xbd68c000},{0xbd68e000},{0xbd690000},{0xbd692000},{0xbd694000},{0xbd696000},{0xbd698000},{0xbd69a000},{0xbd69c000},{0xbd69e000},{0xbd6a0000},{0xbd6a2000},{0xbd6a4000},{0xbd6a6000},{0xbd6a8000},{0xbd6aa000},{0xbd6ac000},{0xbd6ae000},{0xbd6b0000},{0xbd6b2000},{0xbd6b4000},{0xbd6b6000},{0xbd6b8000},{0xbd6ba000},{0xbd6bc000},{0xbd6be000}, +{0xbd6c0000},{0xbd6c2000},{0xbd6c4000},{0xbd6c6000},{0xbd6c8000},{0xbd6ca000},{0xbd6cc000},{0xbd6ce000},{0xbd6d0000},{0xbd6d2000},{0xbd6d4000},{0xbd6d6000},{0xbd6d8000},{0xbd6da000},{0xbd6dc000},{0xbd6de000},{0xbd6e0000},{0xbd6e2000},{0xbd6e4000},{0xbd6e6000},{0xbd6e8000},{0xbd6ea000},{0xbd6ec000},{0xbd6ee000},{0xbd6f0000},{0xbd6f2000},{0xbd6f4000},{0xbd6f6000},{0xbd6f8000},{0xbd6fa000},{0xbd6fc000},{0xbd6fe000}, +{0xbd700000},{0xbd702000},{0xbd704000},{0xbd706000},{0xbd708000},{0xbd70a000},{0xbd70c000},{0xbd70e000},{0xbd710000},{0xbd712000},{0xbd714000},{0xbd716000},{0xbd718000},{0xbd71a000},{0xbd71c000},{0xbd71e000},{0xbd720000},{0xbd722000},{0xbd724000},{0xbd726000},{0xbd728000},{0xbd72a000},{0xbd72c000},{0xbd72e000},{0xbd730000},{0xbd732000},{0xbd734000},{0xbd736000},{0xbd738000},{0xbd73a000},{0xbd73c000},{0xbd73e000}, +{0xbd740000},{0xbd742000},{0xbd744000},{0xbd746000},{0xbd748000},{0xbd74a000},{0xbd74c000},{0xbd74e000},{0xbd750000},{0xbd752000},{0xbd754000},{0xbd756000},{0xbd758000},{0xbd75a000},{0xbd75c000},{0xbd75e000},{0xbd760000},{0xbd762000},{0xbd764000},{0xbd766000},{0xbd768000},{0xbd76a000},{0xbd76c000},{0xbd76e000},{0xbd770000},{0xbd772000},{0xbd774000},{0xbd776000},{0xbd778000},{0xbd77a000},{0xbd77c000},{0xbd77e000}, +{0xbd780000},{0xbd782000},{0xbd784000},{0xbd786000},{0xbd788000},{0xbd78a000},{0xbd78c000},{0xbd78e000},{0xbd790000},{0xbd792000},{0xbd794000},{0xbd796000},{0xbd798000},{0xbd79a000},{0xbd79c000},{0xbd79e000},{0xbd7a0000},{0xbd7a2000},{0xbd7a4000},{0xbd7a6000},{0xbd7a8000},{0xbd7aa000},{0xbd7ac000},{0xbd7ae000},{0xbd7b0000},{0xbd7b2000},{0xbd7b4000},{0xbd7b6000},{0xbd7b8000},{0xbd7ba000},{0xbd7bc000},{0xbd7be000}, +{0xbd7c0000},{0xbd7c2000},{0xbd7c4000},{0xbd7c6000},{0xbd7c8000},{0xbd7ca000},{0xbd7cc000},{0xbd7ce000},{0xbd7d0000},{0xbd7d2000},{0xbd7d4000},{0xbd7d6000},{0xbd7d8000},{0xbd7da000},{0xbd7dc000},{0xbd7de000},{0xbd7e0000},{0xbd7e2000},{0xbd7e4000},{0xbd7e6000},{0xbd7e8000},{0xbd7ea000},{0xbd7ec000},{0xbd7ee000},{0xbd7f0000},{0xbd7f2000},{0xbd7f4000},{0xbd7f6000},{0xbd7f8000},{0xbd7fa000},{0xbd7fc000},{0xbd7fe000}, +{0xbd800000},{0xbd802000},{0xbd804000},{0xbd806000},{0xbd808000},{0xbd80a000},{0xbd80c000},{0xbd80e000},{0xbd810000},{0xbd812000},{0xbd814000},{0xbd816000},{0xbd818000},{0xbd81a000},{0xbd81c000},{0xbd81e000},{0xbd820000},{0xbd822000},{0xbd824000},{0xbd826000},{0xbd828000},{0xbd82a000},{0xbd82c000},{0xbd82e000},{0xbd830000},{0xbd832000},{0xbd834000},{0xbd836000},{0xbd838000},{0xbd83a000},{0xbd83c000},{0xbd83e000}, +{0xbd840000},{0xbd842000},{0xbd844000},{0xbd846000},{0xbd848000},{0xbd84a000},{0xbd84c000},{0xbd84e000},{0xbd850000},{0xbd852000},{0xbd854000},{0xbd856000},{0xbd858000},{0xbd85a000},{0xbd85c000},{0xbd85e000},{0xbd860000},{0xbd862000},{0xbd864000},{0xbd866000},{0xbd868000},{0xbd86a000},{0xbd86c000},{0xbd86e000},{0xbd870000},{0xbd872000},{0xbd874000},{0xbd876000},{0xbd878000},{0xbd87a000},{0xbd87c000},{0xbd87e000}, +{0xbd880000},{0xbd882000},{0xbd884000},{0xbd886000},{0xbd888000},{0xbd88a000},{0xbd88c000},{0xbd88e000},{0xbd890000},{0xbd892000},{0xbd894000},{0xbd896000},{0xbd898000},{0xbd89a000},{0xbd89c000},{0xbd89e000},{0xbd8a0000},{0xbd8a2000},{0xbd8a4000},{0xbd8a6000},{0xbd8a8000},{0xbd8aa000},{0xbd8ac000},{0xbd8ae000},{0xbd8b0000},{0xbd8b2000},{0xbd8b4000},{0xbd8b6000},{0xbd8b8000},{0xbd8ba000},{0xbd8bc000},{0xbd8be000}, +{0xbd8c0000},{0xbd8c2000},{0xbd8c4000},{0xbd8c6000},{0xbd8c8000},{0xbd8ca000},{0xbd8cc000},{0xbd8ce000},{0xbd8d0000},{0xbd8d2000},{0xbd8d4000},{0xbd8d6000},{0xbd8d8000},{0xbd8da000},{0xbd8dc000},{0xbd8de000},{0xbd8e0000},{0xbd8e2000},{0xbd8e4000},{0xbd8e6000},{0xbd8e8000},{0xbd8ea000},{0xbd8ec000},{0xbd8ee000},{0xbd8f0000},{0xbd8f2000},{0xbd8f4000},{0xbd8f6000},{0xbd8f8000},{0xbd8fa000},{0xbd8fc000},{0xbd8fe000}, +{0xbd900000},{0xbd902000},{0xbd904000},{0xbd906000},{0xbd908000},{0xbd90a000},{0xbd90c000},{0xbd90e000},{0xbd910000},{0xbd912000},{0xbd914000},{0xbd916000},{0xbd918000},{0xbd91a000},{0xbd91c000},{0xbd91e000},{0xbd920000},{0xbd922000},{0xbd924000},{0xbd926000},{0xbd928000},{0xbd92a000},{0xbd92c000},{0xbd92e000},{0xbd930000},{0xbd932000},{0xbd934000},{0xbd936000},{0xbd938000},{0xbd93a000},{0xbd93c000},{0xbd93e000}, +{0xbd940000},{0xbd942000},{0xbd944000},{0xbd946000},{0xbd948000},{0xbd94a000},{0xbd94c000},{0xbd94e000},{0xbd950000},{0xbd952000},{0xbd954000},{0xbd956000},{0xbd958000},{0xbd95a000},{0xbd95c000},{0xbd95e000},{0xbd960000},{0xbd962000},{0xbd964000},{0xbd966000},{0xbd968000},{0xbd96a000},{0xbd96c000},{0xbd96e000},{0xbd970000},{0xbd972000},{0xbd974000},{0xbd976000},{0xbd978000},{0xbd97a000},{0xbd97c000},{0xbd97e000}, +{0xbd980000},{0xbd982000},{0xbd984000},{0xbd986000},{0xbd988000},{0xbd98a000},{0xbd98c000},{0xbd98e000},{0xbd990000},{0xbd992000},{0xbd994000},{0xbd996000},{0xbd998000},{0xbd99a000},{0xbd99c000},{0xbd99e000},{0xbd9a0000},{0xbd9a2000},{0xbd9a4000},{0xbd9a6000},{0xbd9a8000},{0xbd9aa000},{0xbd9ac000},{0xbd9ae000},{0xbd9b0000},{0xbd9b2000},{0xbd9b4000},{0xbd9b6000},{0xbd9b8000},{0xbd9ba000},{0xbd9bc000},{0xbd9be000}, +{0xbd9c0000},{0xbd9c2000},{0xbd9c4000},{0xbd9c6000},{0xbd9c8000},{0xbd9ca000},{0xbd9cc000},{0xbd9ce000},{0xbd9d0000},{0xbd9d2000},{0xbd9d4000},{0xbd9d6000},{0xbd9d8000},{0xbd9da000},{0xbd9dc000},{0xbd9de000},{0xbd9e0000},{0xbd9e2000},{0xbd9e4000},{0xbd9e6000},{0xbd9e8000},{0xbd9ea000},{0xbd9ec000},{0xbd9ee000},{0xbd9f0000},{0xbd9f2000},{0xbd9f4000},{0xbd9f6000},{0xbd9f8000},{0xbd9fa000},{0xbd9fc000},{0xbd9fe000}, +{0xbda00000},{0xbda02000},{0xbda04000},{0xbda06000},{0xbda08000},{0xbda0a000},{0xbda0c000},{0xbda0e000},{0xbda10000},{0xbda12000},{0xbda14000},{0xbda16000},{0xbda18000},{0xbda1a000},{0xbda1c000},{0xbda1e000},{0xbda20000},{0xbda22000},{0xbda24000},{0xbda26000},{0xbda28000},{0xbda2a000},{0xbda2c000},{0xbda2e000},{0xbda30000},{0xbda32000},{0xbda34000},{0xbda36000},{0xbda38000},{0xbda3a000},{0xbda3c000},{0xbda3e000}, +{0xbda40000},{0xbda42000},{0xbda44000},{0xbda46000},{0xbda48000},{0xbda4a000},{0xbda4c000},{0xbda4e000},{0xbda50000},{0xbda52000},{0xbda54000},{0xbda56000},{0xbda58000},{0xbda5a000},{0xbda5c000},{0xbda5e000},{0xbda60000},{0xbda62000},{0xbda64000},{0xbda66000},{0xbda68000},{0xbda6a000},{0xbda6c000},{0xbda6e000},{0xbda70000},{0xbda72000},{0xbda74000},{0xbda76000},{0xbda78000},{0xbda7a000},{0xbda7c000},{0xbda7e000}, +{0xbda80000},{0xbda82000},{0xbda84000},{0xbda86000},{0xbda88000},{0xbda8a000},{0xbda8c000},{0xbda8e000},{0xbda90000},{0xbda92000},{0xbda94000},{0xbda96000},{0xbda98000},{0xbda9a000},{0xbda9c000},{0xbda9e000},{0xbdaa0000},{0xbdaa2000},{0xbdaa4000},{0xbdaa6000},{0xbdaa8000},{0xbdaaa000},{0xbdaac000},{0xbdaae000},{0xbdab0000},{0xbdab2000},{0xbdab4000},{0xbdab6000},{0xbdab8000},{0xbdaba000},{0xbdabc000},{0xbdabe000}, +{0xbdac0000},{0xbdac2000},{0xbdac4000},{0xbdac6000},{0xbdac8000},{0xbdaca000},{0xbdacc000},{0xbdace000},{0xbdad0000},{0xbdad2000},{0xbdad4000},{0xbdad6000},{0xbdad8000},{0xbdada000},{0xbdadc000},{0xbdade000},{0xbdae0000},{0xbdae2000},{0xbdae4000},{0xbdae6000},{0xbdae8000},{0xbdaea000},{0xbdaec000},{0xbdaee000},{0xbdaf0000},{0xbdaf2000},{0xbdaf4000},{0xbdaf6000},{0xbdaf8000},{0xbdafa000},{0xbdafc000},{0xbdafe000}, +{0xbdb00000},{0xbdb02000},{0xbdb04000},{0xbdb06000},{0xbdb08000},{0xbdb0a000},{0xbdb0c000},{0xbdb0e000},{0xbdb10000},{0xbdb12000},{0xbdb14000},{0xbdb16000},{0xbdb18000},{0xbdb1a000},{0xbdb1c000},{0xbdb1e000},{0xbdb20000},{0xbdb22000},{0xbdb24000},{0xbdb26000},{0xbdb28000},{0xbdb2a000},{0xbdb2c000},{0xbdb2e000},{0xbdb30000},{0xbdb32000},{0xbdb34000},{0xbdb36000},{0xbdb38000},{0xbdb3a000},{0xbdb3c000},{0xbdb3e000}, +{0xbdb40000},{0xbdb42000},{0xbdb44000},{0xbdb46000},{0xbdb48000},{0xbdb4a000},{0xbdb4c000},{0xbdb4e000},{0xbdb50000},{0xbdb52000},{0xbdb54000},{0xbdb56000},{0xbdb58000},{0xbdb5a000},{0xbdb5c000},{0xbdb5e000},{0xbdb60000},{0xbdb62000},{0xbdb64000},{0xbdb66000},{0xbdb68000},{0xbdb6a000},{0xbdb6c000},{0xbdb6e000},{0xbdb70000},{0xbdb72000},{0xbdb74000},{0xbdb76000},{0xbdb78000},{0xbdb7a000},{0xbdb7c000},{0xbdb7e000}, +{0xbdb80000},{0xbdb82000},{0xbdb84000},{0xbdb86000},{0xbdb88000},{0xbdb8a000},{0xbdb8c000},{0xbdb8e000},{0xbdb90000},{0xbdb92000},{0xbdb94000},{0xbdb96000},{0xbdb98000},{0xbdb9a000},{0xbdb9c000},{0xbdb9e000},{0xbdba0000},{0xbdba2000},{0xbdba4000},{0xbdba6000},{0xbdba8000},{0xbdbaa000},{0xbdbac000},{0xbdbae000},{0xbdbb0000},{0xbdbb2000},{0xbdbb4000},{0xbdbb6000},{0xbdbb8000},{0xbdbba000},{0xbdbbc000},{0xbdbbe000}, +{0xbdbc0000},{0xbdbc2000},{0xbdbc4000},{0xbdbc6000},{0xbdbc8000},{0xbdbca000},{0xbdbcc000},{0xbdbce000},{0xbdbd0000},{0xbdbd2000},{0xbdbd4000},{0xbdbd6000},{0xbdbd8000},{0xbdbda000},{0xbdbdc000},{0xbdbde000},{0xbdbe0000},{0xbdbe2000},{0xbdbe4000},{0xbdbe6000},{0xbdbe8000},{0xbdbea000},{0xbdbec000},{0xbdbee000},{0xbdbf0000},{0xbdbf2000},{0xbdbf4000},{0xbdbf6000},{0xbdbf8000},{0xbdbfa000},{0xbdbfc000},{0xbdbfe000}, +{0xbdc00000},{0xbdc02000},{0xbdc04000},{0xbdc06000},{0xbdc08000},{0xbdc0a000},{0xbdc0c000},{0xbdc0e000},{0xbdc10000},{0xbdc12000},{0xbdc14000},{0xbdc16000},{0xbdc18000},{0xbdc1a000},{0xbdc1c000},{0xbdc1e000},{0xbdc20000},{0xbdc22000},{0xbdc24000},{0xbdc26000},{0xbdc28000},{0xbdc2a000},{0xbdc2c000},{0xbdc2e000},{0xbdc30000},{0xbdc32000},{0xbdc34000},{0xbdc36000},{0xbdc38000},{0xbdc3a000},{0xbdc3c000},{0xbdc3e000}, +{0xbdc40000},{0xbdc42000},{0xbdc44000},{0xbdc46000},{0xbdc48000},{0xbdc4a000},{0xbdc4c000},{0xbdc4e000},{0xbdc50000},{0xbdc52000},{0xbdc54000},{0xbdc56000},{0xbdc58000},{0xbdc5a000},{0xbdc5c000},{0xbdc5e000},{0xbdc60000},{0xbdc62000},{0xbdc64000},{0xbdc66000},{0xbdc68000},{0xbdc6a000},{0xbdc6c000},{0xbdc6e000},{0xbdc70000},{0xbdc72000},{0xbdc74000},{0xbdc76000},{0xbdc78000},{0xbdc7a000},{0xbdc7c000},{0xbdc7e000}, +{0xbdc80000},{0xbdc82000},{0xbdc84000},{0xbdc86000},{0xbdc88000},{0xbdc8a000},{0xbdc8c000},{0xbdc8e000},{0xbdc90000},{0xbdc92000},{0xbdc94000},{0xbdc96000},{0xbdc98000},{0xbdc9a000},{0xbdc9c000},{0xbdc9e000},{0xbdca0000},{0xbdca2000},{0xbdca4000},{0xbdca6000},{0xbdca8000},{0xbdcaa000},{0xbdcac000},{0xbdcae000},{0xbdcb0000},{0xbdcb2000},{0xbdcb4000},{0xbdcb6000},{0xbdcb8000},{0xbdcba000},{0xbdcbc000},{0xbdcbe000}, +{0xbdcc0000},{0xbdcc2000},{0xbdcc4000},{0xbdcc6000},{0xbdcc8000},{0xbdcca000},{0xbdccc000},{0xbdcce000},{0xbdcd0000},{0xbdcd2000},{0xbdcd4000},{0xbdcd6000},{0xbdcd8000},{0xbdcda000},{0xbdcdc000},{0xbdcde000},{0xbdce0000},{0xbdce2000},{0xbdce4000},{0xbdce6000},{0xbdce8000},{0xbdcea000},{0xbdcec000},{0xbdcee000},{0xbdcf0000},{0xbdcf2000},{0xbdcf4000},{0xbdcf6000},{0xbdcf8000},{0xbdcfa000},{0xbdcfc000},{0xbdcfe000}, +{0xbdd00000},{0xbdd02000},{0xbdd04000},{0xbdd06000},{0xbdd08000},{0xbdd0a000},{0xbdd0c000},{0xbdd0e000},{0xbdd10000},{0xbdd12000},{0xbdd14000},{0xbdd16000},{0xbdd18000},{0xbdd1a000},{0xbdd1c000},{0xbdd1e000},{0xbdd20000},{0xbdd22000},{0xbdd24000},{0xbdd26000},{0xbdd28000},{0xbdd2a000},{0xbdd2c000},{0xbdd2e000},{0xbdd30000},{0xbdd32000},{0xbdd34000},{0xbdd36000},{0xbdd38000},{0xbdd3a000},{0xbdd3c000},{0xbdd3e000}, +{0xbdd40000},{0xbdd42000},{0xbdd44000},{0xbdd46000},{0xbdd48000},{0xbdd4a000},{0xbdd4c000},{0xbdd4e000},{0xbdd50000},{0xbdd52000},{0xbdd54000},{0xbdd56000},{0xbdd58000},{0xbdd5a000},{0xbdd5c000},{0xbdd5e000},{0xbdd60000},{0xbdd62000},{0xbdd64000},{0xbdd66000},{0xbdd68000},{0xbdd6a000},{0xbdd6c000},{0xbdd6e000},{0xbdd70000},{0xbdd72000},{0xbdd74000},{0xbdd76000},{0xbdd78000},{0xbdd7a000},{0xbdd7c000},{0xbdd7e000}, +{0xbdd80000},{0xbdd82000},{0xbdd84000},{0xbdd86000},{0xbdd88000},{0xbdd8a000},{0xbdd8c000},{0xbdd8e000},{0xbdd90000},{0xbdd92000},{0xbdd94000},{0xbdd96000},{0xbdd98000},{0xbdd9a000},{0xbdd9c000},{0xbdd9e000},{0xbdda0000},{0xbdda2000},{0xbdda4000},{0xbdda6000},{0xbdda8000},{0xbddaa000},{0xbddac000},{0xbddae000},{0xbddb0000},{0xbddb2000},{0xbddb4000},{0xbddb6000},{0xbddb8000},{0xbddba000},{0xbddbc000},{0xbddbe000}, +{0xbddc0000},{0xbddc2000},{0xbddc4000},{0xbddc6000},{0xbddc8000},{0xbddca000},{0xbddcc000},{0xbddce000},{0xbddd0000},{0xbddd2000},{0xbddd4000},{0xbddd6000},{0xbddd8000},{0xbddda000},{0xbdddc000},{0xbddde000},{0xbdde0000},{0xbdde2000},{0xbdde4000},{0xbdde6000},{0xbdde8000},{0xbddea000},{0xbddec000},{0xbddee000},{0xbddf0000},{0xbddf2000},{0xbddf4000},{0xbddf6000},{0xbddf8000},{0xbddfa000},{0xbddfc000},{0xbddfe000}, +{0xbde00000},{0xbde02000},{0xbde04000},{0xbde06000},{0xbde08000},{0xbde0a000},{0xbde0c000},{0xbde0e000},{0xbde10000},{0xbde12000},{0xbde14000},{0xbde16000},{0xbde18000},{0xbde1a000},{0xbde1c000},{0xbde1e000},{0xbde20000},{0xbde22000},{0xbde24000},{0xbde26000},{0xbde28000},{0xbde2a000},{0xbde2c000},{0xbde2e000},{0xbde30000},{0xbde32000},{0xbde34000},{0xbde36000},{0xbde38000},{0xbde3a000},{0xbde3c000},{0xbde3e000}, +{0xbde40000},{0xbde42000},{0xbde44000},{0xbde46000},{0xbde48000},{0xbde4a000},{0xbde4c000},{0xbde4e000},{0xbde50000},{0xbde52000},{0xbde54000},{0xbde56000},{0xbde58000},{0xbde5a000},{0xbde5c000},{0xbde5e000},{0xbde60000},{0xbde62000},{0xbde64000},{0xbde66000},{0xbde68000},{0xbde6a000},{0xbde6c000},{0xbde6e000},{0xbde70000},{0xbde72000},{0xbde74000},{0xbde76000},{0xbde78000},{0xbde7a000},{0xbde7c000},{0xbde7e000}, +{0xbde80000},{0xbde82000},{0xbde84000},{0xbde86000},{0xbde88000},{0xbde8a000},{0xbde8c000},{0xbde8e000},{0xbde90000},{0xbde92000},{0xbde94000},{0xbde96000},{0xbde98000},{0xbde9a000},{0xbde9c000},{0xbde9e000},{0xbdea0000},{0xbdea2000},{0xbdea4000},{0xbdea6000},{0xbdea8000},{0xbdeaa000},{0xbdeac000},{0xbdeae000},{0xbdeb0000},{0xbdeb2000},{0xbdeb4000},{0xbdeb6000},{0xbdeb8000},{0xbdeba000},{0xbdebc000},{0xbdebe000}, +{0xbdec0000},{0xbdec2000},{0xbdec4000},{0xbdec6000},{0xbdec8000},{0xbdeca000},{0xbdecc000},{0xbdece000},{0xbded0000},{0xbded2000},{0xbded4000},{0xbded6000},{0xbded8000},{0xbdeda000},{0xbdedc000},{0xbdede000},{0xbdee0000},{0xbdee2000},{0xbdee4000},{0xbdee6000},{0xbdee8000},{0xbdeea000},{0xbdeec000},{0xbdeee000},{0xbdef0000},{0xbdef2000},{0xbdef4000},{0xbdef6000},{0xbdef8000},{0xbdefa000},{0xbdefc000},{0xbdefe000}, +{0xbdf00000},{0xbdf02000},{0xbdf04000},{0xbdf06000},{0xbdf08000},{0xbdf0a000},{0xbdf0c000},{0xbdf0e000},{0xbdf10000},{0xbdf12000},{0xbdf14000},{0xbdf16000},{0xbdf18000},{0xbdf1a000},{0xbdf1c000},{0xbdf1e000},{0xbdf20000},{0xbdf22000},{0xbdf24000},{0xbdf26000},{0xbdf28000},{0xbdf2a000},{0xbdf2c000},{0xbdf2e000},{0xbdf30000},{0xbdf32000},{0xbdf34000},{0xbdf36000},{0xbdf38000},{0xbdf3a000},{0xbdf3c000},{0xbdf3e000}, +{0xbdf40000},{0xbdf42000},{0xbdf44000},{0xbdf46000},{0xbdf48000},{0xbdf4a000},{0xbdf4c000},{0xbdf4e000},{0xbdf50000},{0xbdf52000},{0xbdf54000},{0xbdf56000},{0xbdf58000},{0xbdf5a000},{0xbdf5c000},{0xbdf5e000},{0xbdf60000},{0xbdf62000},{0xbdf64000},{0xbdf66000},{0xbdf68000},{0xbdf6a000},{0xbdf6c000},{0xbdf6e000},{0xbdf70000},{0xbdf72000},{0xbdf74000},{0xbdf76000},{0xbdf78000},{0xbdf7a000},{0xbdf7c000},{0xbdf7e000}, +{0xbdf80000},{0xbdf82000},{0xbdf84000},{0xbdf86000},{0xbdf88000},{0xbdf8a000},{0xbdf8c000},{0xbdf8e000},{0xbdf90000},{0xbdf92000},{0xbdf94000},{0xbdf96000},{0xbdf98000},{0xbdf9a000},{0xbdf9c000},{0xbdf9e000},{0xbdfa0000},{0xbdfa2000},{0xbdfa4000},{0xbdfa6000},{0xbdfa8000},{0xbdfaa000},{0xbdfac000},{0xbdfae000},{0xbdfb0000},{0xbdfb2000},{0xbdfb4000},{0xbdfb6000},{0xbdfb8000},{0xbdfba000},{0xbdfbc000},{0xbdfbe000}, +{0xbdfc0000},{0xbdfc2000},{0xbdfc4000},{0xbdfc6000},{0xbdfc8000},{0xbdfca000},{0xbdfcc000},{0xbdfce000},{0xbdfd0000},{0xbdfd2000},{0xbdfd4000},{0xbdfd6000},{0xbdfd8000},{0xbdfda000},{0xbdfdc000},{0xbdfde000},{0xbdfe0000},{0xbdfe2000},{0xbdfe4000},{0xbdfe6000},{0xbdfe8000},{0xbdfea000},{0xbdfec000},{0xbdfee000},{0xbdff0000},{0xbdff2000},{0xbdff4000},{0xbdff6000},{0xbdff8000},{0xbdffa000},{0xbdffc000},{0xbdffe000}, +{0xbe000000},{0xbe002000},{0xbe004000},{0xbe006000},{0xbe008000},{0xbe00a000},{0xbe00c000},{0xbe00e000},{0xbe010000},{0xbe012000},{0xbe014000},{0xbe016000},{0xbe018000},{0xbe01a000},{0xbe01c000},{0xbe01e000},{0xbe020000},{0xbe022000},{0xbe024000},{0xbe026000},{0xbe028000},{0xbe02a000},{0xbe02c000},{0xbe02e000},{0xbe030000},{0xbe032000},{0xbe034000},{0xbe036000},{0xbe038000},{0xbe03a000},{0xbe03c000},{0xbe03e000}, +{0xbe040000},{0xbe042000},{0xbe044000},{0xbe046000},{0xbe048000},{0xbe04a000},{0xbe04c000},{0xbe04e000},{0xbe050000},{0xbe052000},{0xbe054000},{0xbe056000},{0xbe058000},{0xbe05a000},{0xbe05c000},{0xbe05e000},{0xbe060000},{0xbe062000},{0xbe064000},{0xbe066000},{0xbe068000},{0xbe06a000},{0xbe06c000},{0xbe06e000},{0xbe070000},{0xbe072000},{0xbe074000},{0xbe076000},{0xbe078000},{0xbe07a000},{0xbe07c000},{0xbe07e000}, +{0xbe080000},{0xbe082000},{0xbe084000},{0xbe086000},{0xbe088000},{0xbe08a000},{0xbe08c000},{0xbe08e000},{0xbe090000},{0xbe092000},{0xbe094000},{0xbe096000},{0xbe098000},{0xbe09a000},{0xbe09c000},{0xbe09e000},{0xbe0a0000},{0xbe0a2000},{0xbe0a4000},{0xbe0a6000},{0xbe0a8000},{0xbe0aa000},{0xbe0ac000},{0xbe0ae000},{0xbe0b0000},{0xbe0b2000},{0xbe0b4000},{0xbe0b6000},{0xbe0b8000},{0xbe0ba000},{0xbe0bc000},{0xbe0be000}, +{0xbe0c0000},{0xbe0c2000},{0xbe0c4000},{0xbe0c6000},{0xbe0c8000},{0xbe0ca000},{0xbe0cc000},{0xbe0ce000},{0xbe0d0000},{0xbe0d2000},{0xbe0d4000},{0xbe0d6000},{0xbe0d8000},{0xbe0da000},{0xbe0dc000},{0xbe0de000},{0xbe0e0000},{0xbe0e2000},{0xbe0e4000},{0xbe0e6000},{0xbe0e8000},{0xbe0ea000},{0xbe0ec000},{0xbe0ee000},{0xbe0f0000},{0xbe0f2000},{0xbe0f4000},{0xbe0f6000},{0xbe0f8000},{0xbe0fa000},{0xbe0fc000},{0xbe0fe000}, +{0xbe100000},{0xbe102000},{0xbe104000},{0xbe106000},{0xbe108000},{0xbe10a000},{0xbe10c000},{0xbe10e000},{0xbe110000},{0xbe112000},{0xbe114000},{0xbe116000},{0xbe118000},{0xbe11a000},{0xbe11c000},{0xbe11e000},{0xbe120000},{0xbe122000},{0xbe124000},{0xbe126000},{0xbe128000},{0xbe12a000},{0xbe12c000},{0xbe12e000},{0xbe130000},{0xbe132000},{0xbe134000},{0xbe136000},{0xbe138000},{0xbe13a000},{0xbe13c000},{0xbe13e000}, +{0xbe140000},{0xbe142000},{0xbe144000},{0xbe146000},{0xbe148000},{0xbe14a000},{0xbe14c000},{0xbe14e000},{0xbe150000},{0xbe152000},{0xbe154000},{0xbe156000},{0xbe158000},{0xbe15a000},{0xbe15c000},{0xbe15e000},{0xbe160000},{0xbe162000},{0xbe164000},{0xbe166000},{0xbe168000},{0xbe16a000},{0xbe16c000},{0xbe16e000},{0xbe170000},{0xbe172000},{0xbe174000},{0xbe176000},{0xbe178000},{0xbe17a000},{0xbe17c000},{0xbe17e000}, +{0xbe180000},{0xbe182000},{0xbe184000},{0xbe186000},{0xbe188000},{0xbe18a000},{0xbe18c000},{0xbe18e000},{0xbe190000},{0xbe192000},{0xbe194000},{0xbe196000},{0xbe198000},{0xbe19a000},{0xbe19c000},{0xbe19e000},{0xbe1a0000},{0xbe1a2000},{0xbe1a4000},{0xbe1a6000},{0xbe1a8000},{0xbe1aa000},{0xbe1ac000},{0xbe1ae000},{0xbe1b0000},{0xbe1b2000},{0xbe1b4000},{0xbe1b6000},{0xbe1b8000},{0xbe1ba000},{0xbe1bc000},{0xbe1be000}, +{0xbe1c0000},{0xbe1c2000},{0xbe1c4000},{0xbe1c6000},{0xbe1c8000},{0xbe1ca000},{0xbe1cc000},{0xbe1ce000},{0xbe1d0000},{0xbe1d2000},{0xbe1d4000},{0xbe1d6000},{0xbe1d8000},{0xbe1da000},{0xbe1dc000},{0xbe1de000},{0xbe1e0000},{0xbe1e2000},{0xbe1e4000},{0xbe1e6000},{0xbe1e8000},{0xbe1ea000},{0xbe1ec000},{0xbe1ee000},{0xbe1f0000},{0xbe1f2000},{0xbe1f4000},{0xbe1f6000},{0xbe1f8000},{0xbe1fa000},{0xbe1fc000},{0xbe1fe000}, +{0xbe200000},{0xbe202000},{0xbe204000},{0xbe206000},{0xbe208000},{0xbe20a000},{0xbe20c000},{0xbe20e000},{0xbe210000},{0xbe212000},{0xbe214000},{0xbe216000},{0xbe218000},{0xbe21a000},{0xbe21c000},{0xbe21e000},{0xbe220000},{0xbe222000},{0xbe224000},{0xbe226000},{0xbe228000},{0xbe22a000},{0xbe22c000},{0xbe22e000},{0xbe230000},{0xbe232000},{0xbe234000},{0xbe236000},{0xbe238000},{0xbe23a000},{0xbe23c000},{0xbe23e000}, +{0xbe240000},{0xbe242000},{0xbe244000},{0xbe246000},{0xbe248000},{0xbe24a000},{0xbe24c000},{0xbe24e000},{0xbe250000},{0xbe252000},{0xbe254000},{0xbe256000},{0xbe258000},{0xbe25a000},{0xbe25c000},{0xbe25e000},{0xbe260000},{0xbe262000},{0xbe264000},{0xbe266000},{0xbe268000},{0xbe26a000},{0xbe26c000},{0xbe26e000},{0xbe270000},{0xbe272000},{0xbe274000},{0xbe276000},{0xbe278000},{0xbe27a000},{0xbe27c000},{0xbe27e000}, +{0xbe280000},{0xbe282000},{0xbe284000},{0xbe286000},{0xbe288000},{0xbe28a000},{0xbe28c000},{0xbe28e000},{0xbe290000},{0xbe292000},{0xbe294000},{0xbe296000},{0xbe298000},{0xbe29a000},{0xbe29c000},{0xbe29e000},{0xbe2a0000},{0xbe2a2000},{0xbe2a4000},{0xbe2a6000},{0xbe2a8000},{0xbe2aa000},{0xbe2ac000},{0xbe2ae000},{0xbe2b0000},{0xbe2b2000},{0xbe2b4000},{0xbe2b6000},{0xbe2b8000},{0xbe2ba000},{0xbe2bc000},{0xbe2be000}, +{0xbe2c0000},{0xbe2c2000},{0xbe2c4000},{0xbe2c6000},{0xbe2c8000},{0xbe2ca000},{0xbe2cc000},{0xbe2ce000},{0xbe2d0000},{0xbe2d2000},{0xbe2d4000},{0xbe2d6000},{0xbe2d8000},{0xbe2da000},{0xbe2dc000},{0xbe2de000},{0xbe2e0000},{0xbe2e2000},{0xbe2e4000},{0xbe2e6000},{0xbe2e8000},{0xbe2ea000},{0xbe2ec000},{0xbe2ee000},{0xbe2f0000},{0xbe2f2000},{0xbe2f4000},{0xbe2f6000},{0xbe2f8000},{0xbe2fa000},{0xbe2fc000},{0xbe2fe000}, +{0xbe300000},{0xbe302000},{0xbe304000},{0xbe306000},{0xbe308000},{0xbe30a000},{0xbe30c000},{0xbe30e000},{0xbe310000},{0xbe312000},{0xbe314000},{0xbe316000},{0xbe318000},{0xbe31a000},{0xbe31c000},{0xbe31e000},{0xbe320000},{0xbe322000},{0xbe324000},{0xbe326000},{0xbe328000},{0xbe32a000},{0xbe32c000},{0xbe32e000},{0xbe330000},{0xbe332000},{0xbe334000},{0xbe336000},{0xbe338000},{0xbe33a000},{0xbe33c000},{0xbe33e000}, +{0xbe340000},{0xbe342000},{0xbe344000},{0xbe346000},{0xbe348000},{0xbe34a000},{0xbe34c000},{0xbe34e000},{0xbe350000},{0xbe352000},{0xbe354000},{0xbe356000},{0xbe358000},{0xbe35a000},{0xbe35c000},{0xbe35e000},{0xbe360000},{0xbe362000},{0xbe364000},{0xbe366000},{0xbe368000},{0xbe36a000},{0xbe36c000},{0xbe36e000},{0xbe370000},{0xbe372000},{0xbe374000},{0xbe376000},{0xbe378000},{0xbe37a000},{0xbe37c000},{0xbe37e000}, +{0xbe380000},{0xbe382000},{0xbe384000},{0xbe386000},{0xbe388000},{0xbe38a000},{0xbe38c000},{0xbe38e000},{0xbe390000},{0xbe392000},{0xbe394000},{0xbe396000},{0xbe398000},{0xbe39a000},{0xbe39c000},{0xbe39e000},{0xbe3a0000},{0xbe3a2000},{0xbe3a4000},{0xbe3a6000},{0xbe3a8000},{0xbe3aa000},{0xbe3ac000},{0xbe3ae000},{0xbe3b0000},{0xbe3b2000},{0xbe3b4000},{0xbe3b6000},{0xbe3b8000},{0xbe3ba000},{0xbe3bc000},{0xbe3be000}, +{0xbe3c0000},{0xbe3c2000},{0xbe3c4000},{0xbe3c6000},{0xbe3c8000},{0xbe3ca000},{0xbe3cc000},{0xbe3ce000},{0xbe3d0000},{0xbe3d2000},{0xbe3d4000},{0xbe3d6000},{0xbe3d8000},{0xbe3da000},{0xbe3dc000},{0xbe3de000},{0xbe3e0000},{0xbe3e2000},{0xbe3e4000},{0xbe3e6000},{0xbe3e8000},{0xbe3ea000},{0xbe3ec000},{0xbe3ee000},{0xbe3f0000},{0xbe3f2000},{0xbe3f4000},{0xbe3f6000},{0xbe3f8000},{0xbe3fa000},{0xbe3fc000},{0xbe3fe000}, +{0xbe400000},{0xbe402000},{0xbe404000},{0xbe406000},{0xbe408000},{0xbe40a000},{0xbe40c000},{0xbe40e000},{0xbe410000},{0xbe412000},{0xbe414000},{0xbe416000},{0xbe418000},{0xbe41a000},{0xbe41c000},{0xbe41e000},{0xbe420000},{0xbe422000},{0xbe424000},{0xbe426000},{0xbe428000},{0xbe42a000},{0xbe42c000},{0xbe42e000},{0xbe430000},{0xbe432000},{0xbe434000},{0xbe436000},{0xbe438000},{0xbe43a000},{0xbe43c000},{0xbe43e000}, +{0xbe440000},{0xbe442000},{0xbe444000},{0xbe446000},{0xbe448000},{0xbe44a000},{0xbe44c000},{0xbe44e000},{0xbe450000},{0xbe452000},{0xbe454000},{0xbe456000},{0xbe458000},{0xbe45a000},{0xbe45c000},{0xbe45e000},{0xbe460000},{0xbe462000},{0xbe464000},{0xbe466000},{0xbe468000},{0xbe46a000},{0xbe46c000},{0xbe46e000},{0xbe470000},{0xbe472000},{0xbe474000},{0xbe476000},{0xbe478000},{0xbe47a000},{0xbe47c000},{0xbe47e000}, +{0xbe480000},{0xbe482000},{0xbe484000},{0xbe486000},{0xbe488000},{0xbe48a000},{0xbe48c000},{0xbe48e000},{0xbe490000},{0xbe492000},{0xbe494000},{0xbe496000},{0xbe498000},{0xbe49a000},{0xbe49c000},{0xbe49e000},{0xbe4a0000},{0xbe4a2000},{0xbe4a4000},{0xbe4a6000},{0xbe4a8000},{0xbe4aa000},{0xbe4ac000},{0xbe4ae000},{0xbe4b0000},{0xbe4b2000},{0xbe4b4000},{0xbe4b6000},{0xbe4b8000},{0xbe4ba000},{0xbe4bc000},{0xbe4be000}, +{0xbe4c0000},{0xbe4c2000},{0xbe4c4000},{0xbe4c6000},{0xbe4c8000},{0xbe4ca000},{0xbe4cc000},{0xbe4ce000},{0xbe4d0000},{0xbe4d2000},{0xbe4d4000},{0xbe4d6000},{0xbe4d8000},{0xbe4da000},{0xbe4dc000},{0xbe4de000},{0xbe4e0000},{0xbe4e2000},{0xbe4e4000},{0xbe4e6000},{0xbe4e8000},{0xbe4ea000},{0xbe4ec000},{0xbe4ee000},{0xbe4f0000},{0xbe4f2000},{0xbe4f4000},{0xbe4f6000},{0xbe4f8000},{0xbe4fa000},{0xbe4fc000},{0xbe4fe000}, +{0xbe500000},{0xbe502000},{0xbe504000},{0xbe506000},{0xbe508000},{0xbe50a000},{0xbe50c000},{0xbe50e000},{0xbe510000},{0xbe512000},{0xbe514000},{0xbe516000},{0xbe518000},{0xbe51a000},{0xbe51c000},{0xbe51e000},{0xbe520000},{0xbe522000},{0xbe524000},{0xbe526000},{0xbe528000},{0xbe52a000},{0xbe52c000},{0xbe52e000},{0xbe530000},{0xbe532000},{0xbe534000},{0xbe536000},{0xbe538000},{0xbe53a000},{0xbe53c000},{0xbe53e000}, +{0xbe540000},{0xbe542000},{0xbe544000},{0xbe546000},{0xbe548000},{0xbe54a000},{0xbe54c000},{0xbe54e000},{0xbe550000},{0xbe552000},{0xbe554000},{0xbe556000},{0xbe558000},{0xbe55a000},{0xbe55c000},{0xbe55e000},{0xbe560000},{0xbe562000},{0xbe564000},{0xbe566000},{0xbe568000},{0xbe56a000},{0xbe56c000},{0xbe56e000},{0xbe570000},{0xbe572000},{0xbe574000},{0xbe576000},{0xbe578000},{0xbe57a000},{0xbe57c000},{0xbe57e000}, +{0xbe580000},{0xbe582000},{0xbe584000},{0xbe586000},{0xbe588000},{0xbe58a000},{0xbe58c000},{0xbe58e000},{0xbe590000},{0xbe592000},{0xbe594000},{0xbe596000},{0xbe598000},{0xbe59a000},{0xbe59c000},{0xbe59e000},{0xbe5a0000},{0xbe5a2000},{0xbe5a4000},{0xbe5a6000},{0xbe5a8000},{0xbe5aa000},{0xbe5ac000},{0xbe5ae000},{0xbe5b0000},{0xbe5b2000},{0xbe5b4000},{0xbe5b6000},{0xbe5b8000},{0xbe5ba000},{0xbe5bc000},{0xbe5be000}, +{0xbe5c0000},{0xbe5c2000},{0xbe5c4000},{0xbe5c6000},{0xbe5c8000},{0xbe5ca000},{0xbe5cc000},{0xbe5ce000},{0xbe5d0000},{0xbe5d2000},{0xbe5d4000},{0xbe5d6000},{0xbe5d8000},{0xbe5da000},{0xbe5dc000},{0xbe5de000},{0xbe5e0000},{0xbe5e2000},{0xbe5e4000},{0xbe5e6000},{0xbe5e8000},{0xbe5ea000},{0xbe5ec000},{0xbe5ee000},{0xbe5f0000},{0xbe5f2000},{0xbe5f4000},{0xbe5f6000},{0xbe5f8000},{0xbe5fa000},{0xbe5fc000},{0xbe5fe000}, +{0xbe600000},{0xbe602000},{0xbe604000},{0xbe606000},{0xbe608000},{0xbe60a000},{0xbe60c000},{0xbe60e000},{0xbe610000},{0xbe612000},{0xbe614000},{0xbe616000},{0xbe618000},{0xbe61a000},{0xbe61c000},{0xbe61e000},{0xbe620000},{0xbe622000},{0xbe624000},{0xbe626000},{0xbe628000},{0xbe62a000},{0xbe62c000},{0xbe62e000},{0xbe630000},{0xbe632000},{0xbe634000},{0xbe636000},{0xbe638000},{0xbe63a000},{0xbe63c000},{0xbe63e000}, +{0xbe640000},{0xbe642000},{0xbe644000},{0xbe646000},{0xbe648000},{0xbe64a000},{0xbe64c000},{0xbe64e000},{0xbe650000},{0xbe652000},{0xbe654000},{0xbe656000},{0xbe658000},{0xbe65a000},{0xbe65c000},{0xbe65e000},{0xbe660000},{0xbe662000},{0xbe664000},{0xbe666000},{0xbe668000},{0xbe66a000},{0xbe66c000},{0xbe66e000},{0xbe670000},{0xbe672000},{0xbe674000},{0xbe676000},{0xbe678000},{0xbe67a000},{0xbe67c000},{0xbe67e000}, +{0xbe680000},{0xbe682000},{0xbe684000},{0xbe686000},{0xbe688000},{0xbe68a000},{0xbe68c000},{0xbe68e000},{0xbe690000},{0xbe692000},{0xbe694000},{0xbe696000},{0xbe698000},{0xbe69a000},{0xbe69c000},{0xbe69e000},{0xbe6a0000},{0xbe6a2000},{0xbe6a4000},{0xbe6a6000},{0xbe6a8000},{0xbe6aa000},{0xbe6ac000},{0xbe6ae000},{0xbe6b0000},{0xbe6b2000},{0xbe6b4000},{0xbe6b6000},{0xbe6b8000},{0xbe6ba000},{0xbe6bc000},{0xbe6be000}, +{0xbe6c0000},{0xbe6c2000},{0xbe6c4000},{0xbe6c6000},{0xbe6c8000},{0xbe6ca000},{0xbe6cc000},{0xbe6ce000},{0xbe6d0000},{0xbe6d2000},{0xbe6d4000},{0xbe6d6000},{0xbe6d8000},{0xbe6da000},{0xbe6dc000},{0xbe6de000},{0xbe6e0000},{0xbe6e2000},{0xbe6e4000},{0xbe6e6000},{0xbe6e8000},{0xbe6ea000},{0xbe6ec000},{0xbe6ee000},{0xbe6f0000},{0xbe6f2000},{0xbe6f4000},{0xbe6f6000},{0xbe6f8000},{0xbe6fa000},{0xbe6fc000},{0xbe6fe000}, +{0xbe700000},{0xbe702000},{0xbe704000},{0xbe706000},{0xbe708000},{0xbe70a000},{0xbe70c000},{0xbe70e000},{0xbe710000},{0xbe712000},{0xbe714000},{0xbe716000},{0xbe718000},{0xbe71a000},{0xbe71c000},{0xbe71e000},{0xbe720000},{0xbe722000},{0xbe724000},{0xbe726000},{0xbe728000},{0xbe72a000},{0xbe72c000},{0xbe72e000},{0xbe730000},{0xbe732000},{0xbe734000},{0xbe736000},{0xbe738000},{0xbe73a000},{0xbe73c000},{0xbe73e000}, +{0xbe740000},{0xbe742000},{0xbe744000},{0xbe746000},{0xbe748000},{0xbe74a000},{0xbe74c000},{0xbe74e000},{0xbe750000},{0xbe752000},{0xbe754000},{0xbe756000},{0xbe758000},{0xbe75a000},{0xbe75c000},{0xbe75e000},{0xbe760000},{0xbe762000},{0xbe764000},{0xbe766000},{0xbe768000},{0xbe76a000},{0xbe76c000},{0xbe76e000},{0xbe770000},{0xbe772000},{0xbe774000},{0xbe776000},{0xbe778000},{0xbe77a000},{0xbe77c000},{0xbe77e000}, +{0xbe780000},{0xbe782000},{0xbe784000},{0xbe786000},{0xbe788000},{0xbe78a000},{0xbe78c000},{0xbe78e000},{0xbe790000},{0xbe792000},{0xbe794000},{0xbe796000},{0xbe798000},{0xbe79a000},{0xbe79c000},{0xbe79e000},{0xbe7a0000},{0xbe7a2000},{0xbe7a4000},{0xbe7a6000},{0xbe7a8000},{0xbe7aa000},{0xbe7ac000},{0xbe7ae000},{0xbe7b0000},{0xbe7b2000},{0xbe7b4000},{0xbe7b6000},{0xbe7b8000},{0xbe7ba000},{0xbe7bc000},{0xbe7be000}, +{0xbe7c0000},{0xbe7c2000},{0xbe7c4000},{0xbe7c6000},{0xbe7c8000},{0xbe7ca000},{0xbe7cc000},{0xbe7ce000},{0xbe7d0000},{0xbe7d2000},{0xbe7d4000},{0xbe7d6000},{0xbe7d8000},{0xbe7da000},{0xbe7dc000},{0xbe7de000},{0xbe7e0000},{0xbe7e2000},{0xbe7e4000},{0xbe7e6000},{0xbe7e8000},{0xbe7ea000},{0xbe7ec000},{0xbe7ee000},{0xbe7f0000},{0xbe7f2000},{0xbe7f4000},{0xbe7f6000},{0xbe7f8000},{0xbe7fa000},{0xbe7fc000},{0xbe7fe000}, +{0xbe800000},{0xbe802000},{0xbe804000},{0xbe806000},{0xbe808000},{0xbe80a000},{0xbe80c000},{0xbe80e000},{0xbe810000},{0xbe812000},{0xbe814000},{0xbe816000},{0xbe818000},{0xbe81a000},{0xbe81c000},{0xbe81e000},{0xbe820000},{0xbe822000},{0xbe824000},{0xbe826000},{0xbe828000},{0xbe82a000},{0xbe82c000},{0xbe82e000},{0xbe830000},{0xbe832000},{0xbe834000},{0xbe836000},{0xbe838000},{0xbe83a000},{0xbe83c000},{0xbe83e000}, +{0xbe840000},{0xbe842000},{0xbe844000},{0xbe846000},{0xbe848000},{0xbe84a000},{0xbe84c000},{0xbe84e000},{0xbe850000},{0xbe852000},{0xbe854000},{0xbe856000},{0xbe858000},{0xbe85a000},{0xbe85c000},{0xbe85e000},{0xbe860000},{0xbe862000},{0xbe864000},{0xbe866000},{0xbe868000},{0xbe86a000},{0xbe86c000},{0xbe86e000},{0xbe870000},{0xbe872000},{0xbe874000},{0xbe876000},{0xbe878000},{0xbe87a000},{0xbe87c000},{0xbe87e000}, +{0xbe880000},{0xbe882000},{0xbe884000},{0xbe886000},{0xbe888000},{0xbe88a000},{0xbe88c000},{0xbe88e000},{0xbe890000},{0xbe892000},{0xbe894000},{0xbe896000},{0xbe898000},{0xbe89a000},{0xbe89c000},{0xbe89e000},{0xbe8a0000},{0xbe8a2000},{0xbe8a4000},{0xbe8a6000},{0xbe8a8000},{0xbe8aa000},{0xbe8ac000},{0xbe8ae000},{0xbe8b0000},{0xbe8b2000},{0xbe8b4000},{0xbe8b6000},{0xbe8b8000},{0xbe8ba000},{0xbe8bc000},{0xbe8be000}, +{0xbe8c0000},{0xbe8c2000},{0xbe8c4000},{0xbe8c6000},{0xbe8c8000},{0xbe8ca000},{0xbe8cc000},{0xbe8ce000},{0xbe8d0000},{0xbe8d2000},{0xbe8d4000},{0xbe8d6000},{0xbe8d8000},{0xbe8da000},{0xbe8dc000},{0xbe8de000},{0xbe8e0000},{0xbe8e2000},{0xbe8e4000},{0xbe8e6000},{0xbe8e8000},{0xbe8ea000},{0xbe8ec000},{0xbe8ee000},{0xbe8f0000},{0xbe8f2000},{0xbe8f4000},{0xbe8f6000},{0xbe8f8000},{0xbe8fa000},{0xbe8fc000},{0xbe8fe000}, +{0xbe900000},{0xbe902000},{0xbe904000},{0xbe906000},{0xbe908000},{0xbe90a000},{0xbe90c000},{0xbe90e000},{0xbe910000},{0xbe912000},{0xbe914000},{0xbe916000},{0xbe918000},{0xbe91a000},{0xbe91c000},{0xbe91e000},{0xbe920000},{0xbe922000},{0xbe924000},{0xbe926000},{0xbe928000},{0xbe92a000},{0xbe92c000},{0xbe92e000},{0xbe930000},{0xbe932000},{0xbe934000},{0xbe936000},{0xbe938000},{0xbe93a000},{0xbe93c000},{0xbe93e000}, +{0xbe940000},{0xbe942000},{0xbe944000},{0xbe946000},{0xbe948000},{0xbe94a000},{0xbe94c000},{0xbe94e000},{0xbe950000},{0xbe952000},{0xbe954000},{0xbe956000},{0xbe958000},{0xbe95a000},{0xbe95c000},{0xbe95e000},{0xbe960000},{0xbe962000},{0xbe964000},{0xbe966000},{0xbe968000},{0xbe96a000},{0xbe96c000},{0xbe96e000},{0xbe970000},{0xbe972000},{0xbe974000},{0xbe976000},{0xbe978000},{0xbe97a000},{0xbe97c000},{0xbe97e000}, +{0xbe980000},{0xbe982000},{0xbe984000},{0xbe986000},{0xbe988000},{0xbe98a000},{0xbe98c000},{0xbe98e000},{0xbe990000},{0xbe992000},{0xbe994000},{0xbe996000},{0xbe998000},{0xbe99a000},{0xbe99c000},{0xbe99e000},{0xbe9a0000},{0xbe9a2000},{0xbe9a4000},{0xbe9a6000},{0xbe9a8000},{0xbe9aa000},{0xbe9ac000},{0xbe9ae000},{0xbe9b0000},{0xbe9b2000},{0xbe9b4000},{0xbe9b6000},{0xbe9b8000},{0xbe9ba000},{0xbe9bc000},{0xbe9be000}, +{0xbe9c0000},{0xbe9c2000},{0xbe9c4000},{0xbe9c6000},{0xbe9c8000},{0xbe9ca000},{0xbe9cc000},{0xbe9ce000},{0xbe9d0000},{0xbe9d2000},{0xbe9d4000},{0xbe9d6000},{0xbe9d8000},{0xbe9da000},{0xbe9dc000},{0xbe9de000},{0xbe9e0000},{0xbe9e2000},{0xbe9e4000},{0xbe9e6000},{0xbe9e8000},{0xbe9ea000},{0xbe9ec000},{0xbe9ee000},{0xbe9f0000},{0xbe9f2000},{0xbe9f4000},{0xbe9f6000},{0xbe9f8000},{0xbe9fa000},{0xbe9fc000},{0xbe9fe000}, +{0xbea00000},{0xbea02000},{0xbea04000},{0xbea06000},{0xbea08000},{0xbea0a000},{0xbea0c000},{0xbea0e000},{0xbea10000},{0xbea12000},{0xbea14000},{0xbea16000},{0xbea18000},{0xbea1a000},{0xbea1c000},{0xbea1e000},{0xbea20000},{0xbea22000},{0xbea24000},{0xbea26000},{0xbea28000},{0xbea2a000},{0xbea2c000},{0xbea2e000},{0xbea30000},{0xbea32000},{0xbea34000},{0xbea36000},{0xbea38000},{0xbea3a000},{0xbea3c000},{0xbea3e000}, +{0xbea40000},{0xbea42000},{0xbea44000},{0xbea46000},{0xbea48000},{0xbea4a000},{0xbea4c000},{0xbea4e000},{0xbea50000},{0xbea52000},{0xbea54000},{0xbea56000},{0xbea58000},{0xbea5a000},{0xbea5c000},{0xbea5e000},{0xbea60000},{0xbea62000},{0xbea64000},{0xbea66000},{0xbea68000},{0xbea6a000},{0xbea6c000},{0xbea6e000},{0xbea70000},{0xbea72000},{0xbea74000},{0xbea76000},{0xbea78000},{0xbea7a000},{0xbea7c000},{0xbea7e000}, +{0xbea80000},{0xbea82000},{0xbea84000},{0xbea86000},{0xbea88000},{0xbea8a000},{0xbea8c000},{0xbea8e000},{0xbea90000},{0xbea92000},{0xbea94000},{0xbea96000},{0xbea98000},{0xbea9a000},{0xbea9c000},{0xbea9e000},{0xbeaa0000},{0xbeaa2000},{0xbeaa4000},{0xbeaa6000},{0xbeaa8000},{0xbeaaa000},{0xbeaac000},{0xbeaae000},{0xbeab0000},{0xbeab2000},{0xbeab4000},{0xbeab6000},{0xbeab8000},{0xbeaba000},{0xbeabc000},{0xbeabe000}, +{0xbeac0000},{0xbeac2000},{0xbeac4000},{0xbeac6000},{0xbeac8000},{0xbeaca000},{0xbeacc000},{0xbeace000},{0xbead0000},{0xbead2000},{0xbead4000},{0xbead6000},{0xbead8000},{0xbeada000},{0xbeadc000},{0xbeade000},{0xbeae0000},{0xbeae2000},{0xbeae4000},{0xbeae6000},{0xbeae8000},{0xbeaea000},{0xbeaec000},{0xbeaee000},{0xbeaf0000},{0xbeaf2000},{0xbeaf4000},{0xbeaf6000},{0xbeaf8000},{0xbeafa000},{0xbeafc000},{0xbeafe000}, +{0xbeb00000},{0xbeb02000},{0xbeb04000},{0xbeb06000},{0xbeb08000},{0xbeb0a000},{0xbeb0c000},{0xbeb0e000},{0xbeb10000},{0xbeb12000},{0xbeb14000},{0xbeb16000},{0xbeb18000},{0xbeb1a000},{0xbeb1c000},{0xbeb1e000},{0xbeb20000},{0xbeb22000},{0xbeb24000},{0xbeb26000},{0xbeb28000},{0xbeb2a000},{0xbeb2c000},{0xbeb2e000},{0xbeb30000},{0xbeb32000},{0xbeb34000},{0xbeb36000},{0xbeb38000},{0xbeb3a000},{0xbeb3c000},{0xbeb3e000}, +{0xbeb40000},{0xbeb42000},{0xbeb44000},{0xbeb46000},{0xbeb48000},{0xbeb4a000},{0xbeb4c000},{0xbeb4e000},{0xbeb50000},{0xbeb52000},{0xbeb54000},{0xbeb56000},{0xbeb58000},{0xbeb5a000},{0xbeb5c000},{0xbeb5e000},{0xbeb60000},{0xbeb62000},{0xbeb64000},{0xbeb66000},{0xbeb68000},{0xbeb6a000},{0xbeb6c000},{0xbeb6e000},{0xbeb70000},{0xbeb72000},{0xbeb74000},{0xbeb76000},{0xbeb78000},{0xbeb7a000},{0xbeb7c000},{0xbeb7e000}, +{0xbeb80000},{0xbeb82000},{0xbeb84000},{0xbeb86000},{0xbeb88000},{0xbeb8a000},{0xbeb8c000},{0xbeb8e000},{0xbeb90000},{0xbeb92000},{0xbeb94000},{0xbeb96000},{0xbeb98000},{0xbeb9a000},{0xbeb9c000},{0xbeb9e000},{0xbeba0000},{0xbeba2000},{0xbeba4000},{0xbeba6000},{0xbeba8000},{0xbebaa000},{0xbebac000},{0xbebae000},{0xbebb0000},{0xbebb2000},{0xbebb4000},{0xbebb6000},{0xbebb8000},{0xbebba000},{0xbebbc000},{0xbebbe000}, +{0xbebc0000},{0xbebc2000},{0xbebc4000},{0xbebc6000},{0xbebc8000},{0xbebca000},{0xbebcc000},{0xbebce000},{0xbebd0000},{0xbebd2000},{0xbebd4000},{0xbebd6000},{0xbebd8000},{0xbebda000},{0xbebdc000},{0xbebde000},{0xbebe0000},{0xbebe2000},{0xbebe4000},{0xbebe6000},{0xbebe8000},{0xbebea000},{0xbebec000},{0xbebee000},{0xbebf0000},{0xbebf2000},{0xbebf4000},{0xbebf6000},{0xbebf8000},{0xbebfa000},{0xbebfc000},{0xbebfe000}, +{0xbec00000},{0xbec02000},{0xbec04000},{0xbec06000},{0xbec08000},{0xbec0a000},{0xbec0c000},{0xbec0e000},{0xbec10000},{0xbec12000},{0xbec14000},{0xbec16000},{0xbec18000},{0xbec1a000},{0xbec1c000},{0xbec1e000},{0xbec20000},{0xbec22000},{0xbec24000},{0xbec26000},{0xbec28000},{0xbec2a000},{0xbec2c000},{0xbec2e000},{0xbec30000},{0xbec32000},{0xbec34000},{0xbec36000},{0xbec38000},{0xbec3a000},{0xbec3c000},{0xbec3e000}, +{0xbec40000},{0xbec42000},{0xbec44000},{0xbec46000},{0xbec48000},{0xbec4a000},{0xbec4c000},{0xbec4e000},{0xbec50000},{0xbec52000},{0xbec54000},{0xbec56000},{0xbec58000},{0xbec5a000},{0xbec5c000},{0xbec5e000},{0xbec60000},{0xbec62000},{0xbec64000},{0xbec66000},{0xbec68000},{0xbec6a000},{0xbec6c000},{0xbec6e000},{0xbec70000},{0xbec72000},{0xbec74000},{0xbec76000},{0xbec78000},{0xbec7a000},{0xbec7c000},{0xbec7e000}, +{0xbec80000},{0xbec82000},{0xbec84000},{0xbec86000},{0xbec88000},{0xbec8a000},{0xbec8c000},{0xbec8e000},{0xbec90000},{0xbec92000},{0xbec94000},{0xbec96000},{0xbec98000},{0xbec9a000},{0xbec9c000},{0xbec9e000},{0xbeca0000},{0xbeca2000},{0xbeca4000},{0xbeca6000},{0xbeca8000},{0xbecaa000},{0xbecac000},{0xbecae000},{0xbecb0000},{0xbecb2000},{0xbecb4000},{0xbecb6000},{0xbecb8000},{0xbecba000},{0xbecbc000},{0xbecbe000}, +{0xbecc0000},{0xbecc2000},{0xbecc4000},{0xbecc6000},{0xbecc8000},{0xbecca000},{0xbeccc000},{0xbecce000},{0xbecd0000},{0xbecd2000},{0xbecd4000},{0xbecd6000},{0xbecd8000},{0xbecda000},{0xbecdc000},{0xbecde000},{0xbece0000},{0xbece2000},{0xbece4000},{0xbece6000},{0xbece8000},{0xbecea000},{0xbecec000},{0xbecee000},{0xbecf0000},{0xbecf2000},{0xbecf4000},{0xbecf6000},{0xbecf8000},{0xbecfa000},{0xbecfc000},{0xbecfe000}, +{0xbed00000},{0xbed02000},{0xbed04000},{0xbed06000},{0xbed08000},{0xbed0a000},{0xbed0c000},{0xbed0e000},{0xbed10000},{0xbed12000},{0xbed14000},{0xbed16000},{0xbed18000},{0xbed1a000},{0xbed1c000},{0xbed1e000},{0xbed20000},{0xbed22000},{0xbed24000},{0xbed26000},{0xbed28000},{0xbed2a000},{0xbed2c000},{0xbed2e000},{0xbed30000},{0xbed32000},{0xbed34000},{0xbed36000},{0xbed38000},{0xbed3a000},{0xbed3c000},{0xbed3e000}, +{0xbed40000},{0xbed42000},{0xbed44000},{0xbed46000},{0xbed48000},{0xbed4a000},{0xbed4c000},{0xbed4e000},{0xbed50000},{0xbed52000},{0xbed54000},{0xbed56000},{0xbed58000},{0xbed5a000},{0xbed5c000},{0xbed5e000},{0xbed60000},{0xbed62000},{0xbed64000},{0xbed66000},{0xbed68000},{0xbed6a000},{0xbed6c000},{0xbed6e000},{0xbed70000},{0xbed72000},{0xbed74000},{0xbed76000},{0xbed78000},{0xbed7a000},{0xbed7c000},{0xbed7e000}, +{0xbed80000},{0xbed82000},{0xbed84000},{0xbed86000},{0xbed88000},{0xbed8a000},{0xbed8c000},{0xbed8e000},{0xbed90000},{0xbed92000},{0xbed94000},{0xbed96000},{0xbed98000},{0xbed9a000},{0xbed9c000},{0xbed9e000},{0xbeda0000},{0xbeda2000},{0xbeda4000},{0xbeda6000},{0xbeda8000},{0xbedaa000},{0xbedac000},{0xbedae000},{0xbedb0000},{0xbedb2000},{0xbedb4000},{0xbedb6000},{0xbedb8000},{0xbedba000},{0xbedbc000},{0xbedbe000}, +{0xbedc0000},{0xbedc2000},{0xbedc4000},{0xbedc6000},{0xbedc8000},{0xbedca000},{0xbedcc000},{0xbedce000},{0xbedd0000},{0xbedd2000},{0xbedd4000},{0xbedd6000},{0xbedd8000},{0xbedda000},{0xbeddc000},{0xbedde000},{0xbede0000},{0xbede2000},{0xbede4000},{0xbede6000},{0xbede8000},{0xbedea000},{0xbedec000},{0xbedee000},{0xbedf0000},{0xbedf2000},{0xbedf4000},{0xbedf6000},{0xbedf8000},{0xbedfa000},{0xbedfc000},{0xbedfe000}, +{0xbee00000},{0xbee02000},{0xbee04000},{0xbee06000},{0xbee08000},{0xbee0a000},{0xbee0c000},{0xbee0e000},{0xbee10000},{0xbee12000},{0xbee14000},{0xbee16000},{0xbee18000},{0xbee1a000},{0xbee1c000},{0xbee1e000},{0xbee20000},{0xbee22000},{0xbee24000},{0xbee26000},{0xbee28000},{0xbee2a000},{0xbee2c000},{0xbee2e000},{0xbee30000},{0xbee32000},{0xbee34000},{0xbee36000},{0xbee38000},{0xbee3a000},{0xbee3c000},{0xbee3e000}, +{0xbee40000},{0xbee42000},{0xbee44000},{0xbee46000},{0xbee48000},{0xbee4a000},{0xbee4c000},{0xbee4e000},{0xbee50000},{0xbee52000},{0xbee54000},{0xbee56000},{0xbee58000},{0xbee5a000},{0xbee5c000},{0xbee5e000},{0xbee60000},{0xbee62000},{0xbee64000},{0xbee66000},{0xbee68000},{0xbee6a000},{0xbee6c000},{0xbee6e000},{0xbee70000},{0xbee72000},{0xbee74000},{0xbee76000},{0xbee78000},{0xbee7a000},{0xbee7c000},{0xbee7e000}, +{0xbee80000},{0xbee82000},{0xbee84000},{0xbee86000},{0xbee88000},{0xbee8a000},{0xbee8c000},{0xbee8e000},{0xbee90000},{0xbee92000},{0xbee94000},{0xbee96000},{0xbee98000},{0xbee9a000},{0xbee9c000},{0xbee9e000},{0xbeea0000},{0xbeea2000},{0xbeea4000},{0xbeea6000},{0xbeea8000},{0xbeeaa000},{0xbeeac000},{0xbeeae000},{0xbeeb0000},{0xbeeb2000},{0xbeeb4000},{0xbeeb6000},{0xbeeb8000},{0xbeeba000},{0xbeebc000},{0xbeebe000}, +{0xbeec0000},{0xbeec2000},{0xbeec4000},{0xbeec6000},{0xbeec8000},{0xbeeca000},{0xbeecc000},{0xbeece000},{0xbeed0000},{0xbeed2000},{0xbeed4000},{0xbeed6000},{0xbeed8000},{0xbeeda000},{0xbeedc000},{0xbeede000},{0xbeee0000},{0xbeee2000},{0xbeee4000},{0xbeee6000},{0xbeee8000},{0xbeeea000},{0xbeeec000},{0xbeeee000},{0xbeef0000},{0xbeef2000},{0xbeef4000},{0xbeef6000},{0xbeef8000},{0xbeefa000},{0xbeefc000},{0xbeefe000}, +{0xbef00000},{0xbef02000},{0xbef04000},{0xbef06000},{0xbef08000},{0xbef0a000},{0xbef0c000},{0xbef0e000},{0xbef10000},{0xbef12000},{0xbef14000},{0xbef16000},{0xbef18000},{0xbef1a000},{0xbef1c000},{0xbef1e000},{0xbef20000},{0xbef22000},{0xbef24000},{0xbef26000},{0xbef28000},{0xbef2a000},{0xbef2c000},{0xbef2e000},{0xbef30000},{0xbef32000},{0xbef34000},{0xbef36000},{0xbef38000},{0xbef3a000},{0xbef3c000},{0xbef3e000}, +{0xbef40000},{0xbef42000},{0xbef44000},{0xbef46000},{0xbef48000},{0xbef4a000},{0xbef4c000},{0xbef4e000},{0xbef50000},{0xbef52000},{0xbef54000},{0xbef56000},{0xbef58000},{0xbef5a000},{0xbef5c000},{0xbef5e000},{0xbef60000},{0xbef62000},{0xbef64000},{0xbef66000},{0xbef68000},{0xbef6a000},{0xbef6c000},{0xbef6e000},{0xbef70000},{0xbef72000},{0xbef74000},{0xbef76000},{0xbef78000},{0xbef7a000},{0xbef7c000},{0xbef7e000}, +{0xbef80000},{0xbef82000},{0xbef84000},{0xbef86000},{0xbef88000},{0xbef8a000},{0xbef8c000},{0xbef8e000},{0xbef90000},{0xbef92000},{0xbef94000},{0xbef96000},{0xbef98000},{0xbef9a000},{0xbef9c000},{0xbef9e000},{0xbefa0000},{0xbefa2000},{0xbefa4000},{0xbefa6000},{0xbefa8000},{0xbefaa000},{0xbefac000},{0xbefae000},{0xbefb0000},{0xbefb2000},{0xbefb4000},{0xbefb6000},{0xbefb8000},{0xbefba000},{0xbefbc000},{0xbefbe000}, +{0xbefc0000},{0xbefc2000},{0xbefc4000},{0xbefc6000},{0xbefc8000},{0xbefca000},{0xbefcc000},{0xbefce000},{0xbefd0000},{0xbefd2000},{0xbefd4000},{0xbefd6000},{0xbefd8000},{0xbefda000},{0xbefdc000},{0xbefde000},{0xbefe0000},{0xbefe2000},{0xbefe4000},{0xbefe6000},{0xbefe8000},{0xbefea000},{0xbefec000},{0xbefee000},{0xbeff0000},{0xbeff2000},{0xbeff4000},{0xbeff6000},{0xbeff8000},{0xbeffa000},{0xbeffc000},{0xbeffe000}, +{0xbf000000},{0xbf002000},{0xbf004000},{0xbf006000},{0xbf008000},{0xbf00a000},{0xbf00c000},{0xbf00e000},{0xbf010000},{0xbf012000},{0xbf014000},{0xbf016000},{0xbf018000},{0xbf01a000},{0xbf01c000},{0xbf01e000},{0xbf020000},{0xbf022000},{0xbf024000},{0xbf026000},{0xbf028000},{0xbf02a000},{0xbf02c000},{0xbf02e000},{0xbf030000},{0xbf032000},{0xbf034000},{0xbf036000},{0xbf038000},{0xbf03a000},{0xbf03c000},{0xbf03e000}, +{0xbf040000},{0xbf042000},{0xbf044000},{0xbf046000},{0xbf048000},{0xbf04a000},{0xbf04c000},{0xbf04e000},{0xbf050000},{0xbf052000},{0xbf054000},{0xbf056000},{0xbf058000},{0xbf05a000},{0xbf05c000},{0xbf05e000},{0xbf060000},{0xbf062000},{0xbf064000},{0xbf066000},{0xbf068000},{0xbf06a000},{0xbf06c000},{0xbf06e000},{0xbf070000},{0xbf072000},{0xbf074000},{0xbf076000},{0xbf078000},{0xbf07a000},{0xbf07c000},{0xbf07e000}, +{0xbf080000},{0xbf082000},{0xbf084000},{0xbf086000},{0xbf088000},{0xbf08a000},{0xbf08c000},{0xbf08e000},{0xbf090000},{0xbf092000},{0xbf094000},{0xbf096000},{0xbf098000},{0xbf09a000},{0xbf09c000},{0xbf09e000},{0xbf0a0000},{0xbf0a2000},{0xbf0a4000},{0xbf0a6000},{0xbf0a8000},{0xbf0aa000},{0xbf0ac000},{0xbf0ae000},{0xbf0b0000},{0xbf0b2000},{0xbf0b4000},{0xbf0b6000},{0xbf0b8000},{0xbf0ba000},{0xbf0bc000},{0xbf0be000}, +{0xbf0c0000},{0xbf0c2000},{0xbf0c4000},{0xbf0c6000},{0xbf0c8000},{0xbf0ca000},{0xbf0cc000},{0xbf0ce000},{0xbf0d0000},{0xbf0d2000},{0xbf0d4000},{0xbf0d6000},{0xbf0d8000},{0xbf0da000},{0xbf0dc000},{0xbf0de000},{0xbf0e0000},{0xbf0e2000},{0xbf0e4000},{0xbf0e6000},{0xbf0e8000},{0xbf0ea000},{0xbf0ec000},{0xbf0ee000},{0xbf0f0000},{0xbf0f2000},{0xbf0f4000},{0xbf0f6000},{0xbf0f8000},{0xbf0fa000},{0xbf0fc000},{0xbf0fe000}, +{0xbf100000},{0xbf102000},{0xbf104000},{0xbf106000},{0xbf108000},{0xbf10a000},{0xbf10c000},{0xbf10e000},{0xbf110000},{0xbf112000},{0xbf114000},{0xbf116000},{0xbf118000},{0xbf11a000},{0xbf11c000},{0xbf11e000},{0xbf120000},{0xbf122000},{0xbf124000},{0xbf126000},{0xbf128000},{0xbf12a000},{0xbf12c000},{0xbf12e000},{0xbf130000},{0xbf132000},{0xbf134000},{0xbf136000},{0xbf138000},{0xbf13a000},{0xbf13c000},{0xbf13e000}, +{0xbf140000},{0xbf142000},{0xbf144000},{0xbf146000},{0xbf148000},{0xbf14a000},{0xbf14c000},{0xbf14e000},{0xbf150000},{0xbf152000},{0xbf154000},{0xbf156000},{0xbf158000},{0xbf15a000},{0xbf15c000},{0xbf15e000},{0xbf160000},{0xbf162000},{0xbf164000},{0xbf166000},{0xbf168000},{0xbf16a000},{0xbf16c000},{0xbf16e000},{0xbf170000},{0xbf172000},{0xbf174000},{0xbf176000},{0xbf178000},{0xbf17a000},{0xbf17c000},{0xbf17e000}, +{0xbf180000},{0xbf182000},{0xbf184000},{0xbf186000},{0xbf188000},{0xbf18a000},{0xbf18c000},{0xbf18e000},{0xbf190000},{0xbf192000},{0xbf194000},{0xbf196000},{0xbf198000},{0xbf19a000},{0xbf19c000},{0xbf19e000},{0xbf1a0000},{0xbf1a2000},{0xbf1a4000},{0xbf1a6000},{0xbf1a8000},{0xbf1aa000},{0xbf1ac000},{0xbf1ae000},{0xbf1b0000},{0xbf1b2000},{0xbf1b4000},{0xbf1b6000},{0xbf1b8000},{0xbf1ba000},{0xbf1bc000},{0xbf1be000}, +{0xbf1c0000},{0xbf1c2000},{0xbf1c4000},{0xbf1c6000},{0xbf1c8000},{0xbf1ca000},{0xbf1cc000},{0xbf1ce000},{0xbf1d0000},{0xbf1d2000},{0xbf1d4000},{0xbf1d6000},{0xbf1d8000},{0xbf1da000},{0xbf1dc000},{0xbf1de000},{0xbf1e0000},{0xbf1e2000},{0xbf1e4000},{0xbf1e6000},{0xbf1e8000},{0xbf1ea000},{0xbf1ec000},{0xbf1ee000},{0xbf1f0000},{0xbf1f2000},{0xbf1f4000},{0xbf1f6000},{0xbf1f8000},{0xbf1fa000},{0xbf1fc000},{0xbf1fe000}, +{0xbf200000},{0xbf202000},{0xbf204000},{0xbf206000},{0xbf208000},{0xbf20a000},{0xbf20c000},{0xbf20e000},{0xbf210000},{0xbf212000},{0xbf214000},{0xbf216000},{0xbf218000},{0xbf21a000},{0xbf21c000},{0xbf21e000},{0xbf220000},{0xbf222000},{0xbf224000},{0xbf226000},{0xbf228000},{0xbf22a000},{0xbf22c000},{0xbf22e000},{0xbf230000},{0xbf232000},{0xbf234000},{0xbf236000},{0xbf238000},{0xbf23a000},{0xbf23c000},{0xbf23e000}, +{0xbf240000},{0xbf242000},{0xbf244000},{0xbf246000},{0xbf248000},{0xbf24a000},{0xbf24c000},{0xbf24e000},{0xbf250000},{0xbf252000},{0xbf254000},{0xbf256000},{0xbf258000},{0xbf25a000},{0xbf25c000},{0xbf25e000},{0xbf260000},{0xbf262000},{0xbf264000},{0xbf266000},{0xbf268000},{0xbf26a000},{0xbf26c000},{0xbf26e000},{0xbf270000},{0xbf272000},{0xbf274000},{0xbf276000},{0xbf278000},{0xbf27a000},{0xbf27c000},{0xbf27e000}, +{0xbf280000},{0xbf282000},{0xbf284000},{0xbf286000},{0xbf288000},{0xbf28a000},{0xbf28c000},{0xbf28e000},{0xbf290000},{0xbf292000},{0xbf294000},{0xbf296000},{0xbf298000},{0xbf29a000},{0xbf29c000},{0xbf29e000},{0xbf2a0000},{0xbf2a2000},{0xbf2a4000},{0xbf2a6000},{0xbf2a8000},{0xbf2aa000},{0xbf2ac000},{0xbf2ae000},{0xbf2b0000},{0xbf2b2000},{0xbf2b4000},{0xbf2b6000},{0xbf2b8000},{0xbf2ba000},{0xbf2bc000},{0xbf2be000}, +{0xbf2c0000},{0xbf2c2000},{0xbf2c4000},{0xbf2c6000},{0xbf2c8000},{0xbf2ca000},{0xbf2cc000},{0xbf2ce000},{0xbf2d0000},{0xbf2d2000},{0xbf2d4000},{0xbf2d6000},{0xbf2d8000},{0xbf2da000},{0xbf2dc000},{0xbf2de000},{0xbf2e0000},{0xbf2e2000},{0xbf2e4000},{0xbf2e6000},{0xbf2e8000},{0xbf2ea000},{0xbf2ec000},{0xbf2ee000},{0xbf2f0000},{0xbf2f2000},{0xbf2f4000},{0xbf2f6000},{0xbf2f8000},{0xbf2fa000},{0xbf2fc000},{0xbf2fe000}, +{0xbf300000},{0xbf302000},{0xbf304000},{0xbf306000},{0xbf308000},{0xbf30a000},{0xbf30c000},{0xbf30e000},{0xbf310000},{0xbf312000},{0xbf314000},{0xbf316000},{0xbf318000},{0xbf31a000},{0xbf31c000},{0xbf31e000},{0xbf320000},{0xbf322000},{0xbf324000},{0xbf326000},{0xbf328000},{0xbf32a000},{0xbf32c000},{0xbf32e000},{0xbf330000},{0xbf332000},{0xbf334000},{0xbf336000},{0xbf338000},{0xbf33a000},{0xbf33c000},{0xbf33e000}, +{0xbf340000},{0xbf342000},{0xbf344000},{0xbf346000},{0xbf348000},{0xbf34a000},{0xbf34c000},{0xbf34e000},{0xbf350000},{0xbf352000},{0xbf354000},{0xbf356000},{0xbf358000},{0xbf35a000},{0xbf35c000},{0xbf35e000},{0xbf360000},{0xbf362000},{0xbf364000},{0xbf366000},{0xbf368000},{0xbf36a000},{0xbf36c000},{0xbf36e000},{0xbf370000},{0xbf372000},{0xbf374000},{0xbf376000},{0xbf378000},{0xbf37a000},{0xbf37c000},{0xbf37e000}, +{0xbf380000},{0xbf382000},{0xbf384000},{0xbf386000},{0xbf388000},{0xbf38a000},{0xbf38c000},{0xbf38e000},{0xbf390000},{0xbf392000},{0xbf394000},{0xbf396000},{0xbf398000},{0xbf39a000},{0xbf39c000},{0xbf39e000},{0xbf3a0000},{0xbf3a2000},{0xbf3a4000},{0xbf3a6000},{0xbf3a8000},{0xbf3aa000},{0xbf3ac000},{0xbf3ae000},{0xbf3b0000},{0xbf3b2000},{0xbf3b4000},{0xbf3b6000},{0xbf3b8000},{0xbf3ba000},{0xbf3bc000},{0xbf3be000}, +{0xbf3c0000},{0xbf3c2000},{0xbf3c4000},{0xbf3c6000},{0xbf3c8000},{0xbf3ca000},{0xbf3cc000},{0xbf3ce000},{0xbf3d0000},{0xbf3d2000},{0xbf3d4000},{0xbf3d6000},{0xbf3d8000},{0xbf3da000},{0xbf3dc000},{0xbf3de000},{0xbf3e0000},{0xbf3e2000},{0xbf3e4000},{0xbf3e6000},{0xbf3e8000},{0xbf3ea000},{0xbf3ec000},{0xbf3ee000},{0xbf3f0000},{0xbf3f2000},{0xbf3f4000},{0xbf3f6000},{0xbf3f8000},{0xbf3fa000},{0xbf3fc000},{0xbf3fe000}, +{0xbf400000},{0xbf402000},{0xbf404000},{0xbf406000},{0xbf408000},{0xbf40a000},{0xbf40c000},{0xbf40e000},{0xbf410000},{0xbf412000},{0xbf414000},{0xbf416000},{0xbf418000},{0xbf41a000},{0xbf41c000},{0xbf41e000},{0xbf420000},{0xbf422000},{0xbf424000},{0xbf426000},{0xbf428000},{0xbf42a000},{0xbf42c000},{0xbf42e000},{0xbf430000},{0xbf432000},{0xbf434000},{0xbf436000},{0xbf438000},{0xbf43a000},{0xbf43c000},{0xbf43e000}, +{0xbf440000},{0xbf442000},{0xbf444000},{0xbf446000},{0xbf448000},{0xbf44a000},{0xbf44c000},{0xbf44e000},{0xbf450000},{0xbf452000},{0xbf454000},{0xbf456000},{0xbf458000},{0xbf45a000},{0xbf45c000},{0xbf45e000},{0xbf460000},{0xbf462000},{0xbf464000},{0xbf466000},{0xbf468000},{0xbf46a000},{0xbf46c000},{0xbf46e000},{0xbf470000},{0xbf472000},{0xbf474000},{0xbf476000},{0xbf478000},{0xbf47a000},{0xbf47c000},{0xbf47e000}, +{0xbf480000},{0xbf482000},{0xbf484000},{0xbf486000},{0xbf488000},{0xbf48a000},{0xbf48c000},{0xbf48e000},{0xbf490000},{0xbf492000},{0xbf494000},{0xbf496000},{0xbf498000},{0xbf49a000},{0xbf49c000},{0xbf49e000},{0xbf4a0000},{0xbf4a2000},{0xbf4a4000},{0xbf4a6000},{0xbf4a8000},{0xbf4aa000},{0xbf4ac000},{0xbf4ae000},{0xbf4b0000},{0xbf4b2000},{0xbf4b4000},{0xbf4b6000},{0xbf4b8000},{0xbf4ba000},{0xbf4bc000},{0xbf4be000}, +{0xbf4c0000},{0xbf4c2000},{0xbf4c4000},{0xbf4c6000},{0xbf4c8000},{0xbf4ca000},{0xbf4cc000},{0xbf4ce000},{0xbf4d0000},{0xbf4d2000},{0xbf4d4000},{0xbf4d6000},{0xbf4d8000},{0xbf4da000},{0xbf4dc000},{0xbf4de000},{0xbf4e0000},{0xbf4e2000},{0xbf4e4000},{0xbf4e6000},{0xbf4e8000},{0xbf4ea000},{0xbf4ec000},{0xbf4ee000},{0xbf4f0000},{0xbf4f2000},{0xbf4f4000},{0xbf4f6000},{0xbf4f8000},{0xbf4fa000},{0xbf4fc000},{0xbf4fe000}, +{0xbf500000},{0xbf502000},{0xbf504000},{0xbf506000},{0xbf508000},{0xbf50a000},{0xbf50c000},{0xbf50e000},{0xbf510000},{0xbf512000},{0xbf514000},{0xbf516000},{0xbf518000},{0xbf51a000},{0xbf51c000},{0xbf51e000},{0xbf520000},{0xbf522000},{0xbf524000},{0xbf526000},{0xbf528000},{0xbf52a000},{0xbf52c000},{0xbf52e000},{0xbf530000},{0xbf532000},{0xbf534000},{0xbf536000},{0xbf538000},{0xbf53a000},{0xbf53c000},{0xbf53e000}, +{0xbf540000},{0xbf542000},{0xbf544000},{0xbf546000},{0xbf548000},{0xbf54a000},{0xbf54c000},{0xbf54e000},{0xbf550000},{0xbf552000},{0xbf554000},{0xbf556000},{0xbf558000},{0xbf55a000},{0xbf55c000},{0xbf55e000},{0xbf560000},{0xbf562000},{0xbf564000},{0xbf566000},{0xbf568000},{0xbf56a000},{0xbf56c000},{0xbf56e000},{0xbf570000},{0xbf572000},{0xbf574000},{0xbf576000},{0xbf578000},{0xbf57a000},{0xbf57c000},{0xbf57e000}, +{0xbf580000},{0xbf582000},{0xbf584000},{0xbf586000},{0xbf588000},{0xbf58a000},{0xbf58c000},{0xbf58e000},{0xbf590000},{0xbf592000},{0xbf594000},{0xbf596000},{0xbf598000},{0xbf59a000},{0xbf59c000},{0xbf59e000},{0xbf5a0000},{0xbf5a2000},{0xbf5a4000},{0xbf5a6000},{0xbf5a8000},{0xbf5aa000},{0xbf5ac000},{0xbf5ae000},{0xbf5b0000},{0xbf5b2000},{0xbf5b4000},{0xbf5b6000},{0xbf5b8000},{0xbf5ba000},{0xbf5bc000},{0xbf5be000}, +{0xbf5c0000},{0xbf5c2000},{0xbf5c4000},{0xbf5c6000},{0xbf5c8000},{0xbf5ca000},{0xbf5cc000},{0xbf5ce000},{0xbf5d0000},{0xbf5d2000},{0xbf5d4000},{0xbf5d6000},{0xbf5d8000},{0xbf5da000},{0xbf5dc000},{0xbf5de000},{0xbf5e0000},{0xbf5e2000},{0xbf5e4000},{0xbf5e6000},{0xbf5e8000},{0xbf5ea000},{0xbf5ec000},{0xbf5ee000},{0xbf5f0000},{0xbf5f2000},{0xbf5f4000},{0xbf5f6000},{0xbf5f8000},{0xbf5fa000},{0xbf5fc000},{0xbf5fe000}, +{0xbf600000},{0xbf602000},{0xbf604000},{0xbf606000},{0xbf608000},{0xbf60a000},{0xbf60c000},{0xbf60e000},{0xbf610000},{0xbf612000},{0xbf614000},{0xbf616000},{0xbf618000},{0xbf61a000},{0xbf61c000},{0xbf61e000},{0xbf620000},{0xbf622000},{0xbf624000},{0xbf626000},{0xbf628000},{0xbf62a000},{0xbf62c000},{0xbf62e000},{0xbf630000},{0xbf632000},{0xbf634000},{0xbf636000},{0xbf638000},{0xbf63a000},{0xbf63c000},{0xbf63e000}, +{0xbf640000},{0xbf642000},{0xbf644000},{0xbf646000},{0xbf648000},{0xbf64a000},{0xbf64c000},{0xbf64e000},{0xbf650000},{0xbf652000},{0xbf654000},{0xbf656000},{0xbf658000},{0xbf65a000},{0xbf65c000},{0xbf65e000},{0xbf660000},{0xbf662000},{0xbf664000},{0xbf666000},{0xbf668000},{0xbf66a000},{0xbf66c000},{0xbf66e000},{0xbf670000},{0xbf672000},{0xbf674000},{0xbf676000},{0xbf678000},{0xbf67a000},{0xbf67c000},{0xbf67e000}, +{0xbf680000},{0xbf682000},{0xbf684000},{0xbf686000},{0xbf688000},{0xbf68a000},{0xbf68c000},{0xbf68e000},{0xbf690000},{0xbf692000},{0xbf694000},{0xbf696000},{0xbf698000},{0xbf69a000},{0xbf69c000},{0xbf69e000},{0xbf6a0000},{0xbf6a2000},{0xbf6a4000},{0xbf6a6000},{0xbf6a8000},{0xbf6aa000},{0xbf6ac000},{0xbf6ae000},{0xbf6b0000},{0xbf6b2000},{0xbf6b4000},{0xbf6b6000},{0xbf6b8000},{0xbf6ba000},{0xbf6bc000},{0xbf6be000}, +{0xbf6c0000},{0xbf6c2000},{0xbf6c4000},{0xbf6c6000},{0xbf6c8000},{0xbf6ca000},{0xbf6cc000},{0xbf6ce000},{0xbf6d0000},{0xbf6d2000},{0xbf6d4000},{0xbf6d6000},{0xbf6d8000},{0xbf6da000},{0xbf6dc000},{0xbf6de000},{0xbf6e0000},{0xbf6e2000},{0xbf6e4000},{0xbf6e6000},{0xbf6e8000},{0xbf6ea000},{0xbf6ec000},{0xbf6ee000},{0xbf6f0000},{0xbf6f2000},{0xbf6f4000},{0xbf6f6000},{0xbf6f8000},{0xbf6fa000},{0xbf6fc000},{0xbf6fe000}, +{0xbf700000},{0xbf702000},{0xbf704000},{0xbf706000},{0xbf708000},{0xbf70a000},{0xbf70c000},{0xbf70e000},{0xbf710000},{0xbf712000},{0xbf714000},{0xbf716000},{0xbf718000},{0xbf71a000},{0xbf71c000},{0xbf71e000},{0xbf720000},{0xbf722000},{0xbf724000},{0xbf726000},{0xbf728000},{0xbf72a000},{0xbf72c000},{0xbf72e000},{0xbf730000},{0xbf732000},{0xbf734000},{0xbf736000},{0xbf738000},{0xbf73a000},{0xbf73c000},{0xbf73e000}, +{0xbf740000},{0xbf742000},{0xbf744000},{0xbf746000},{0xbf748000},{0xbf74a000},{0xbf74c000},{0xbf74e000},{0xbf750000},{0xbf752000},{0xbf754000},{0xbf756000},{0xbf758000},{0xbf75a000},{0xbf75c000},{0xbf75e000},{0xbf760000},{0xbf762000},{0xbf764000},{0xbf766000},{0xbf768000},{0xbf76a000},{0xbf76c000},{0xbf76e000},{0xbf770000},{0xbf772000},{0xbf774000},{0xbf776000},{0xbf778000},{0xbf77a000},{0xbf77c000},{0xbf77e000}, +{0xbf780000},{0xbf782000},{0xbf784000},{0xbf786000},{0xbf788000},{0xbf78a000},{0xbf78c000},{0xbf78e000},{0xbf790000},{0xbf792000},{0xbf794000},{0xbf796000},{0xbf798000},{0xbf79a000},{0xbf79c000},{0xbf79e000},{0xbf7a0000},{0xbf7a2000},{0xbf7a4000},{0xbf7a6000},{0xbf7a8000},{0xbf7aa000},{0xbf7ac000},{0xbf7ae000},{0xbf7b0000},{0xbf7b2000},{0xbf7b4000},{0xbf7b6000},{0xbf7b8000},{0xbf7ba000},{0xbf7bc000},{0xbf7be000}, +{0xbf7c0000},{0xbf7c2000},{0xbf7c4000},{0xbf7c6000},{0xbf7c8000},{0xbf7ca000},{0xbf7cc000},{0xbf7ce000},{0xbf7d0000},{0xbf7d2000},{0xbf7d4000},{0xbf7d6000},{0xbf7d8000},{0xbf7da000},{0xbf7dc000},{0xbf7de000},{0xbf7e0000},{0xbf7e2000},{0xbf7e4000},{0xbf7e6000},{0xbf7e8000},{0xbf7ea000},{0xbf7ec000},{0xbf7ee000},{0xbf7f0000},{0xbf7f2000},{0xbf7f4000},{0xbf7f6000},{0xbf7f8000},{0xbf7fa000},{0xbf7fc000},{0xbf7fe000}, +{0xbf800000},{0xbf802000},{0xbf804000},{0xbf806000},{0xbf808000},{0xbf80a000},{0xbf80c000},{0xbf80e000},{0xbf810000},{0xbf812000},{0xbf814000},{0xbf816000},{0xbf818000},{0xbf81a000},{0xbf81c000},{0xbf81e000},{0xbf820000},{0xbf822000},{0xbf824000},{0xbf826000},{0xbf828000},{0xbf82a000},{0xbf82c000},{0xbf82e000},{0xbf830000},{0xbf832000},{0xbf834000},{0xbf836000},{0xbf838000},{0xbf83a000},{0xbf83c000},{0xbf83e000}, +{0xbf840000},{0xbf842000},{0xbf844000},{0xbf846000},{0xbf848000},{0xbf84a000},{0xbf84c000},{0xbf84e000},{0xbf850000},{0xbf852000},{0xbf854000},{0xbf856000},{0xbf858000},{0xbf85a000},{0xbf85c000},{0xbf85e000},{0xbf860000},{0xbf862000},{0xbf864000},{0xbf866000},{0xbf868000},{0xbf86a000},{0xbf86c000},{0xbf86e000},{0xbf870000},{0xbf872000},{0xbf874000},{0xbf876000},{0xbf878000},{0xbf87a000},{0xbf87c000},{0xbf87e000}, +{0xbf880000},{0xbf882000},{0xbf884000},{0xbf886000},{0xbf888000},{0xbf88a000},{0xbf88c000},{0xbf88e000},{0xbf890000},{0xbf892000},{0xbf894000},{0xbf896000},{0xbf898000},{0xbf89a000},{0xbf89c000},{0xbf89e000},{0xbf8a0000},{0xbf8a2000},{0xbf8a4000},{0xbf8a6000},{0xbf8a8000},{0xbf8aa000},{0xbf8ac000},{0xbf8ae000},{0xbf8b0000},{0xbf8b2000},{0xbf8b4000},{0xbf8b6000},{0xbf8b8000},{0xbf8ba000},{0xbf8bc000},{0xbf8be000}, +{0xbf8c0000},{0xbf8c2000},{0xbf8c4000},{0xbf8c6000},{0xbf8c8000},{0xbf8ca000},{0xbf8cc000},{0xbf8ce000},{0xbf8d0000},{0xbf8d2000},{0xbf8d4000},{0xbf8d6000},{0xbf8d8000},{0xbf8da000},{0xbf8dc000},{0xbf8de000},{0xbf8e0000},{0xbf8e2000},{0xbf8e4000},{0xbf8e6000},{0xbf8e8000},{0xbf8ea000},{0xbf8ec000},{0xbf8ee000},{0xbf8f0000},{0xbf8f2000},{0xbf8f4000},{0xbf8f6000},{0xbf8f8000},{0xbf8fa000},{0xbf8fc000},{0xbf8fe000}, +{0xbf900000},{0xbf902000},{0xbf904000},{0xbf906000},{0xbf908000},{0xbf90a000},{0xbf90c000},{0xbf90e000},{0xbf910000},{0xbf912000},{0xbf914000},{0xbf916000},{0xbf918000},{0xbf91a000},{0xbf91c000},{0xbf91e000},{0xbf920000},{0xbf922000},{0xbf924000},{0xbf926000},{0xbf928000},{0xbf92a000},{0xbf92c000},{0xbf92e000},{0xbf930000},{0xbf932000},{0xbf934000},{0xbf936000},{0xbf938000},{0xbf93a000},{0xbf93c000},{0xbf93e000}, +{0xbf940000},{0xbf942000},{0xbf944000},{0xbf946000},{0xbf948000},{0xbf94a000},{0xbf94c000},{0xbf94e000},{0xbf950000},{0xbf952000},{0xbf954000},{0xbf956000},{0xbf958000},{0xbf95a000},{0xbf95c000},{0xbf95e000},{0xbf960000},{0xbf962000},{0xbf964000},{0xbf966000},{0xbf968000},{0xbf96a000},{0xbf96c000},{0xbf96e000},{0xbf970000},{0xbf972000},{0xbf974000},{0xbf976000},{0xbf978000},{0xbf97a000},{0xbf97c000},{0xbf97e000}, +{0xbf980000},{0xbf982000},{0xbf984000},{0xbf986000},{0xbf988000},{0xbf98a000},{0xbf98c000},{0xbf98e000},{0xbf990000},{0xbf992000},{0xbf994000},{0xbf996000},{0xbf998000},{0xbf99a000},{0xbf99c000},{0xbf99e000},{0xbf9a0000},{0xbf9a2000},{0xbf9a4000},{0xbf9a6000},{0xbf9a8000},{0xbf9aa000},{0xbf9ac000},{0xbf9ae000},{0xbf9b0000},{0xbf9b2000},{0xbf9b4000},{0xbf9b6000},{0xbf9b8000},{0xbf9ba000},{0xbf9bc000},{0xbf9be000}, +{0xbf9c0000},{0xbf9c2000},{0xbf9c4000},{0xbf9c6000},{0xbf9c8000},{0xbf9ca000},{0xbf9cc000},{0xbf9ce000},{0xbf9d0000},{0xbf9d2000},{0xbf9d4000},{0xbf9d6000},{0xbf9d8000},{0xbf9da000},{0xbf9dc000},{0xbf9de000},{0xbf9e0000},{0xbf9e2000},{0xbf9e4000},{0xbf9e6000},{0xbf9e8000},{0xbf9ea000},{0xbf9ec000},{0xbf9ee000},{0xbf9f0000},{0xbf9f2000},{0xbf9f4000},{0xbf9f6000},{0xbf9f8000},{0xbf9fa000},{0xbf9fc000},{0xbf9fe000}, +{0xbfa00000},{0xbfa02000},{0xbfa04000},{0xbfa06000},{0xbfa08000},{0xbfa0a000},{0xbfa0c000},{0xbfa0e000},{0xbfa10000},{0xbfa12000},{0xbfa14000},{0xbfa16000},{0xbfa18000},{0xbfa1a000},{0xbfa1c000},{0xbfa1e000},{0xbfa20000},{0xbfa22000},{0xbfa24000},{0xbfa26000},{0xbfa28000},{0xbfa2a000},{0xbfa2c000},{0xbfa2e000},{0xbfa30000},{0xbfa32000},{0xbfa34000},{0xbfa36000},{0xbfa38000},{0xbfa3a000},{0xbfa3c000},{0xbfa3e000}, +{0xbfa40000},{0xbfa42000},{0xbfa44000},{0xbfa46000},{0xbfa48000},{0xbfa4a000},{0xbfa4c000},{0xbfa4e000},{0xbfa50000},{0xbfa52000},{0xbfa54000},{0xbfa56000},{0xbfa58000},{0xbfa5a000},{0xbfa5c000},{0xbfa5e000},{0xbfa60000},{0xbfa62000},{0xbfa64000},{0xbfa66000},{0xbfa68000},{0xbfa6a000},{0xbfa6c000},{0xbfa6e000},{0xbfa70000},{0xbfa72000},{0xbfa74000},{0xbfa76000},{0xbfa78000},{0xbfa7a000},{0xbfa7c000},{0xbfa7e000}, +{0xbfa80000},{0xbfa82000},{0xbfa84000},{0xbfa86000},{0xbfa88000},{0xbfa8a000},{0xbfa8c000},{0xbfa8e000},{0xbfa90000},{0xbfa92000},{0xbfa94000},{0xbfa96000},{0xbfa98000},{0xbfa9a000},{0xbfa9c000},{0xbfa9e000},{0xbfaa0000},{0xbfaa2000},{0xbfaa4000},{0xbfaa6000},{0xbfaa8000},{0xbfaaa000},{0xbfaac000},{0xbfaae000},{0xbfab0000},{0xbfab2000},{0xbfab4000},{0xbfab6000},{0xbfab8000},{0xbfaba000},{0xbfabc000},{0xbfabe000}, +{0xbfac0000},{0xbfac2000},{0xbfac4000},{0xbfac6000},{0xbfac8000},{0xbfaca000},{0xbfacc000},{0xbface000},{0xbfad0000},{0xbfad2000},{0xbfad4000},{0xbfad6000},{0xbfad8000},{0xbfada000},{0xbfadc000},{0xbfade000},{0xbfae0000},{0xbfae2000},{0xbfae4000},{0xbfae6000},{0xbfae8000},{0xbfaea000},{0xbfaec000},{0xbfaee000},{0xbfaf0000},{0xbfaf2000},{0xbfaf4000},{0xbfaf6000},{0xbfaf8000},{0xbfafa000},{0xbfafc000},{0xbfafe000}, +{0xbfb00000},{0xbfb02000},{0xbfb04000},{0xbfb06000},{0xbfb08000},{0xbfb0a000},{0xbfb0c000},{0xbfb0e000},{0xbfb10000},{0xbfb12000},{0xbfb14000},{0xbfb16000},{0xbfb18000},{0xbfb1a000},{0xbfb1c000},{0xbfb1e000},{0xbfb20000},{0xbfb22000},{0xbfb24000},{0xbfb26000},{0xbfb28000},{0xbfb2a000},{0xbfb2c000},{0xbfb2e000},{0xbfb30000},{0xbfb32000},{0xbfb34000},{0xbfb36000},{0xbfb38000},{0xbfb3a000},{0xbfb3c000},{0xbfb3e000}, +{0xbfb40000},{0xbfb42000},{0xbfb44000},{0xbfb46000},{0xbfb48000},{0xbfb4a000},{0xbfb4c000},{0xbfb4e000},{0xbfb50000},{0xbfb52000},{0xbfb54000},{0xbfb56000},{0xbfb58000},{0xbfb5a000},{0xbfb5c000},{0xbfb5e000},{0xbfb60000},{0xbfb62000},{0xbfb64000},{0xbfb66000},{0xbfb68000},{0xbfb6a000},{0xbfb6c000},{0xbfb6e000},{0xbfb70000},{0xbfb72000},{0xbfb74000},{0xbfb76000},{0xbfb78000},{0xbfb7a000},{0xbfb7c000},{0xbfb7e000}, +{0xbfb80000},{0xbfb82000},{0xbfb84000},{0xbfb86000},{0xbfb88000},{0xbfb8a000},{0xbfb8c000},{0xbfb8e000},{0xbfb90000},{0xbfb92000},{0xbfb94000},{0xbfb96000},{0xbfb98000},{0xbfb9a000},{0xbfb9c000},{0xbfb9e000},{0xbfba0000},{0xbfba2000},{0xbfba4000},{0xbfba6000},{0xbfba8000},{0xbfbaa000},{0xbfbac000},{0xbfbae000},{0xbfbb0000},{0xbfbb2000},{0xbfbb4000},{0xbfbb6000},{0xbfbb8000},{0xbfbba000},{0xbfbbc000},{0xbfbbe000}, +{0xbfbc0000},{0xbfbc2000},{0xbfbc4000},{0xbfbc6000},{0xbfbc8000},{0xbfbca000},{0xbfbcc000},{0xbfbce000},{0xbfbd0000},{0xbfbd2000},{0xbfbd4000},{0xbfbd6000},{0xbfbd8000},{0xbfbda000},{0xbfbdc000},{0xbfbde000},{0xbfbe0000},{0xbfbe2000},{0xbfbe4000},{0xbfbe6000},{0xbfbe8000},{0xbfbea000},{0xbfbec000},{0xbfbee000},{0xbfbf0000},{0xbfbf2000},{0xbfbf4000},{0xbfbf6000},{0xbfbf8000},{0xbfbfa000},{0xbfbfc000},{0xbfbfe000}, +{0xbfc00000},{0xbfc02000},{0xbfc04000},{0xbfc06000},{0xbfc08000},{0xbfc0a000},{0xbfc0c000},{0xbfc0e000},{0xbfc10000},{0xbfc12000},{0xbfc14000},{0xbfc16000},{0xbfc18000},{0xbfc1a000},{0xbfc1c000},{0xbfc1e000},{0xbfc20000},{0xbfc22000},{0xbfc24000},{0xbfc26000},{0xbfc28000},{0xbfc2a000},{0xbfc2c000},{0xbfc2e000},{0xbfc30000},{0xbfc32000},{0xbfc34000},{0xbfc36000},{0xbfc38000},{0xbfc3a000},{0xbfc3c000},{0xbfc3e000}, +{0xbfc40000},{0xbfc42000},{0xbfc44000},{0xbfc46000},{0xbfc48000},{0xbfc4a000},{0xbfc4c000},{0xbfc4e000},{0xbfc50000},{0xbfc52000},{0xbfc54000},{0xbfc56000},{0xbfc58000},{0xbfc5a000},{0xbfc5c000},{0xbfc5e000},{0xbfc60000},{0xbfc62000},{0xbfc64000},{0xbfc66000},{0xbfc68000},{0xbfc6a000},{0xbfc6c000},{0xbfc6e000},{0xbfc70000},{0xbfc72000},{0xbfc74000},{0xbfc76000},{0xbfc78000},{0xbfc7a000},{0xbfc7c000},{0xbfc7e000}, +{0xbfc80000},{0xbfc82000},{0xbfc84000},{0xbfc86000},{0xbfc88000},{0xbfc8a000},{0xbfc8c000},{0xbfc8e000},{0xbfc90000},{0xbfc92000},{0xbfc94000},{0xbfc96000},{0xbfc98000},{0xbfc9a000},{0xbfc9c000},{0xbfc9e000},{0xbfca0000},{0xbfca2000},{0xbfca4000},{0xbfca6000},{0xbfca8000},{0xbfcaa000},{0xbfcac000},{0xbfcae000},{0xbfcb0000},{0xbfcb2000},{0xbfcb4000},{0xbfcb6000},{0xbfcb8000},{0xbfcba000},{0xbfcbc000},{0xbfcbe000}, +{0xbfcc0000},{0xbfcc2000},{0xbfcc4000},{0xbfcc6000},{0xbfcc8000},{0xbfcca000},{0xbfccc000},{0xbfcce000},{0xbfcd0000},{0xbfcd2000},{0xbfcd4000},{0xbfcd6000},{0xbfcd8000},{0xbfcda000},{0xbfcdc000},{0xbfcde000},{0xbfce0000},{0xbfce2000},{0xbfce4000},{0xbfce6000},{0xbfce8000},{0xbfcea000},{0xbfcec000},{0xbfcee000},{0xbfcf0000},{0xbfcf2000},{0xbfcf4000},{0xbfcf6000},{0xbfcf8000},{0xbfcfa000},{0xbfcfc000},{0xbfcfe000}, +{0xbfd00000},{0xbfd02000},{0xbfd04000},{0xbfd06000},{0xbfd08000},{0xbfd0a000},{0xbfd0c000},{0xbfd0e000},{0xbfd10000},{0xbfd12000},{0xbfd14000},{0xbfd16000},{0xbfd18000},{0xbfd1a000},{0xbfd1c000},{0xbfd1e000},{0xbfd20000},{0xbfd22000},{0xbfd24000},{0xbfd26000},{0xbfd28000},{0xbfd2a000},{0xbfd2c000},{0xbfd2e000},{0xbfd30000},{0xbfd32000},{0xbfd34000},{0xbfd36000},{0xbfd38000},{0xbfd3a000},{0xbfd3c000},{0xbfd3e000}, +{0xbfd40000},{0xbfd42000},{0xbfd44000},{0xbfd46000},{0xbfd48000},{0xbfd4a000},{0xbfd4c000},{0xbfd4e000},{0xbfd50000},{0xbfd52000},{0xbfd54000},{0xbfd56000},{0xbfd58000},{0xbfd5a000},{0xbfd5c000},{0xbfd5e000},{0xbfd60000},{0xbfd62000},{0xbfd64000},{0xbfd66000},{0xbfd68000},{0xbfd6a000},{0xbfd6c000},{0xbfd6e000},{0xbfd70000},{0xbfd72000},{0xbfd74000},{0xbfd76000},{0xbfd78000},{0xbfd7a000},{0xbfd7c000},{0xbfd7e000}, +{0xbfd80000},{0xbfd82000},{0xbfd84000},{0xbfd86000},{0xbfd88000},{0xbfd8a000},{0xbfd8c000},{0xbfd8e000},{0xbfd90000},{0xbfd92000},{0xbfd94000},{0xbfd96000},{0xbfd98000},{0xbfd9a000},{0xbfd9c000},{0xbfd9e000},{0xbfda0000},{0xbfda2000},{0xbfda4000},{0xbfda6000},{0xbfda8000},{0xbfdaa000},{0xbfdac000},{0xbfdae000},{0xbfdb0000},{0xbfdb2000},{0xbfdb4000},{0xbfdb6000},{0xbfdb8000},{0xbfdba000},{0xbfdbc000},{0xbfdbe000}, +{0xbfdc0000},{0xbfdc2000},{0xbfdc4000},{0xbfdc6000},{0xbfdc8000},{0xbfdca000},{0xbfdcc000},{0xbfdce000},{0xbfdd0000},{0xbfdd2000},{0xbfdd4000},{0xbfdd6000},{0xbfdd8000},{0xbfdda000},{0xbfddc000},{0xbfdde000},{0xbfde0000},{0xbfde2000},{0xbfde4000},{0xbfde6000},{0xbfde8000},{0xbfdea000},{0xbfdec000},{0xbfdee000},{0xbfdf0000},{0xbfdf2000},{0xbfdf4000},{0xbfdf6000},{0xbfdf8000},{0xbfdfa000},{0xbfdfc000},{0xbfdfe000}, +{0xbfe00000},{0xbfe02000},{0xbfe04000},{0xbfe06000},{0xbfe08000},{0xbfe0a000},{0xbfe0c000},{0xbfe0e000},{0xbfe10000},{0xbfe12000},{0xbfe14000},{0xbfe16000},{0xbfe18000},{0xbfe1a000},{0xbfe1c000},{0xbfe1e000},{0xbfe20000},{0xbfe22000},{0xbfe24000},{0xbfe26000},{0xbfe28000},{0xbfe2a000},{0xbfe2c000},{0xbfe2e000},{0xbfe30000},{0xbfe32000},{0xbfe34000},{0xbfe36000},{0xbfe38000},{0xbfe3a000},{0xbfe3c000},{0xbfe3e000}, +{0xbfe40000},{0xbfe42000},{0xbfe44000},{0xbfe46000},{0xbfe48000},{0xbfe4a000},{0xbfe4c000},{0xbfe4e000},{0xbfe50000},{0xbfe52000},{0xbfe54000},{0xbfe56000},{0xbfe58000},{0xbfe5a000},{0xbfe5c000},{0xbfe5e000},{0xbfe60000},{0xbfe62000},{0xbfe64000},{0xbfe66000},{0xbfe68000},{0xbfe6a000},{0xbfe6c000},{0xbfe6e000},{0xbfe70000},{0xbfe72000},{0xbfe74000},{0xbfe76000},{0xbfe78000},{0xbfe7a000},{0xbfe7c000},{0xbfe7e000}, +{0xbfe80000},{0xbfe82000},{0xbfe84000},{0xbfe86000},{0xbfe88000},{0xbfe8a000},{0xbfe8c000},{0xbfe8e000},{0xbfe90000},{0xbfe92000},{0xbfe94000},{0xbfe96000},{0xbfe98000},{0xbfe9a000},{0xbfe9c000},{0xbfe9e000},{0xbfea0000},{0xbfea2000},{0xbfea4000},{0xbfea6000},{0xbfea8000},{0xbfeaa000},{0xbfeac000},{0xbfeae000},{0xbfeb0000},{0xbfeb2000},{0xbfeb4000},{0xbfeb6000},{0xbfeb8000},{0xbfeba000},{0xbfebc000},{0xbfebe000}, +{0xbfec0000},{0xbfec2000},{0xbfec4000},{0xbfec6000},{0xbfec8000},{0xbfeca000},{0xbfecc000},{0xbfece000},{0xbfed0000},{0xbfed2000},{0xbfed4000},{0xbfed6000},{0xbfed8000},{0xbfeda000},{0xbfedc000},{0xbfede000},{0xbfee0000},{0xbfee2000},{0xbfee4000},{0xbfee6000},{0xbfee8000},{0xbfeea000},{0xbfeec000},{0xbfeee000},{0xbfef0000},{0xbfef2000},{0xbfef4000},{0xbfef6000},{0xbfef8000},{0xbfefa000},{0xbfefc000},{0xbfefe000}, +{0xbff00000},{0xbff02000},{0xbff04000},{0xbff06000},{0xbff08000},{0xbff0a000},{0xbff0c000},{0xbff0e000},{0xbff10000},{0xbff12000},{0xbff14000},{0xbff16000},{0xbff18000},{0xbff1a000},{0xbff1c000},{0xbff1e000},{0xbff20000},{0xbff22000},{0xbff24000},{0xbff26000},{0xbff28000},{0xbff2a000},{0xbff2c000},{0xbff2e000},{0xbff30000},{0xbff32000},{0xbff34000},{0xbff36000},{0xbff38000},{0xbff3a000},{0xbff3c000},{0xbff3e000}, +{0xbff40000},{0xbff42000},{0xbff44000},{0xbff46000},{0xbff48000},{0xbff4a000},{0xbff4c000},{0xbff4e000},{0xbff50000},{0xbff52000},{0xbff54000},{0xbff56000},{0xbff58000},{0xbff5a000},{0xbff5c000},{0xbff5e000},{0xbff60000},{0xbff62000},{0xbff64000},{0xbff66000},{0xbff68000},{0xbff6a000},{0xbff6c000},{0xbff6e000},{0xbff70000},{0xbff72000},{0xbff74000},{0xbff76000},{0xbff78000},{0xbff7a000},{0xbff7c000},{0xbff7e000}, +{0xbff80000},{0xbff82000},{0xbff84000},{0xbff86000},{0xbff88000},{0xbff8a000},{0xbff8c000},{0xbff8e000},{0xbff90000},{0xbff92000},{0xbff94000},{0xbff96000},{0xbff98000},{0xbff9a000},{0xbff9c000},{0xbff9e000},{0xbffa0000},{0xbffa2000},{0xbffa4000},{0xbffa6000},{0xbffa8000},{0xbffaa000},{0xbffac000},{0xbffae000},{0xbffb0000},{0xbffb2000},{0xbffb4000},{0xbffb6000},{0xbffb8000},{0xbffba000},{0xbffbc000},{0xbffbe000}, +{0xbffc0000},{0xbffc2000},{0xbffc4000},{0xbffc6000},{0xbffc8000},{0xbffca000},{0xbffcc000},{0xbffce000},{0xbffd0000},{0xbffd2000},{0xbffd4000},{0xbffd6000},{0xbffd8000},{0xbffda000},{0xbffdc000},{0xbffde000},{0xbffe0000},{0xbffe2000},{0xbffe4000},{0xbffe6000},{0xbffe8000},{0xbffea000},{0xbffec000},{0xbffee000},{0xbfff0000},{0xbfff2000},{0xbfff4000},{0xbfff6000},{0xbfff8000},{0xbfffa000},{0xbfffc000},{0xbfffe000}, +{0xc0000000},{0xc0002000},{0xc0004000},{0xc0006000},{0xc0008000},{0xc000a000},{0xc000c000},{0xc000e000},{0xc0010000},{0xc0012000},{0xc0014000},{0xc0016000},{0xc0018000},{0xc001a000},{0xc001c000},{0xc001e000},{0xc0020000},{0xc0022000},{0xc0024000},{0xc0026000},{0xc0028000},{0xc002a000},{0xc002c000},{0xc002e000},{0xc0030000},{0xc0032000},{0xc0034000},{0xc0036000},{0xc0038000},{0xc003a000},{0xc003c000},{0xc003e000}, +{0xc0040000},{0xc0042000},{0xc0044000},{0xc0046000},{0xc0048000},{0xc004a000},{0xc004c000},{0xc004e000},{0xc0050000},{0xc0052000},{0xc0054000},{0xc0056000},{0xc0058000},{0xc005a000},{0xc005c000},{0xc005e000},{0xc0060000},{0xc0062000},{0xc0064000},{0xc0066000},{0xc0068000},{0xc006a000},{0xc006c000},{0xc006e000},{0xc0070000},{0xc0072000},{0xc0074000},{0xc0076000},{0xc0078000},{0xc007a000},{0xc007c000},{0xc007e000}, +{0xc0080000},{0xc0082000},{0xc0084000},{0xc0086000},{0xc0088000},{0xc008a000},{0xc008c000},{0xc008e000},{0xc0090000},{0xc0092000},{0xc0094000},{0xc0096000},{0xc0098000},{0xc009a000},{0xc009c000},{0xc009e000},{0xc00a0000},{0xc00a2000},{0xc00a4000},{0xc00a6000},{0xc00a8000},{0xc00aa000},{0xc00ac000},{0xc00ae000},{0xc00b0000},{0xc00b2000},{0xc00b4000},{0xc00b6000},{0xc00b8000},{0xc00ba000},{0xc00bc000},{0xc00be000}, +{0xc00c0000},{0xc00c2000},{0xc00c4000},{0xc00c6000},{0xc00c8000},{0xc00ca000},{0xc00cc000},{0xc00ce000},{0xc00d0000},{0xc00d2000},{0xc00d4000},{0xc00d6000},{0xc00d8000},{0xc00da000},{0xc00dc000},{0xc00de000},{0xc00e0000},{0xc00e2000},{0xc00e4000},{0xc00e6000},{0xc00e8000},{0xc00ea000},{0xc00ec000},{0xc00ee000},{0xc00f0000},{0xc00f2000},{0xc00f4000},{0xc00f6000},{0xc00f8000},{0xc00fa000},{0xc00fc000},{0xc00fe000}, +{0xc0100000},{0xc0102000},{0xc0104000},{0xc0106000},{0xc0108000},{0xc010a000},{0xc010c000},{0xc010e000},{0xc0110000},{0xc0112000},{0xc0114000},{0xc0116000},{0xc0118000},{0xc011a000},{0xc011c000},{0xc011e000},{0xc0120000},{0xc0122000},{0xc0124000},{0xc0126000},{0xc0128000},{0xc012a000},{0xc012c000},{0xc012e000},{0xc0130000},{0xc0132000},{0xc0134000},{0xc0136000},{0xc0138000},{0xc013a000},{0xc013c000},{0xc013e000}, +{0xc0140000},{0xc0142000},{0xc0144000},{0xc0146000},{0xc0148000},{0xc014a000},{0xc014c000},{0xc014e000},{0xc0150000},{0xc0152000},{0xc0154000},{0xc0156000},{0xc0158000},{0xc015a000},{0xc015c000},{0xc015e000},{0xc0160000},{0xc0162000},{0xc0164000},{0xc0166000},{0xc0168000},{0xc016a000},{0xc016c000},{0xc016e000},{0xc0170000},{0xc0172000},{0xc0174000},{0xc0176000},{0xc0178000},{0xc017a000},{0xc017c000},{0xc017e000}, +{0xc0180000},{0xc0182000},{0xc0184000},{0xc0186000},{0xc0188000},{0xc018a000},{0xc018c000},{0xc018e000},{0xc0190000},{0xc0192000},{0xc0194000},{0xc0196000},{0xc0198000},{0xc019a000},{0xc019c000},{0xc019e000},{0xc01a0000},{0xc01a2000},{0xc01a4000},{0xc01a6000},{0xc01a8000},{0xc01aa000},{0xc01ac000},{0xc01ae000},{0xc01b0000},{0xc01b2000},{0xc01b4000},{0xc01b6000},{0xc01b8000},{0xc01ba000},{0xc01bc000},{0xc01be000}, +{0xc01c0000},{0xc01c2000},{0xc01c4000},{0xc01c6000},{0xc01c8000},{0xc01ca000},{0xc01cc000},{0xc01ce000},{0xc01d0000},{0xc01d2000},{0xc01d4000},{0xc01d6000},{0xc01d8000},{0xc01da000},{0xc01dc000},{0xc01de000},{0xc01e0000},{0xc01e2000},{0xc01e4000},{0xc01e6000},{0xc01e8000},{0xc01ea000},{0xc01ec000},{0xc01ee000},{0xc01f0000},{0xc01f2000},{0xc01f4000},{0xc01f6000},{0xc01f8000},{0xc01fa000},{0xc01fc000},{0xc01fe000}, +{0xc0200000},{0xc0202000},{0xc0204000},{0xc0206000},{0xc0208000},{0xc020a000},{0xc020c000},{0xc020e000},{0xc0210000},{0xc0212000},{0xc0214000},{0xc0216000},{0xc0218000},{0xc021a000},{0xc021c000},{0xc021e000},{0xc0220000},{0xc0222000},{0xc0224000},{0xc0226000},{0xc0228000},{0xc022a000},{0xc022c000},{0xc022e000},{0xc0230000},{0xc0232000},{0xc0234000},{0xc0236000},{0xc0238000},{0xc023a000},{0xc023c000},{0xc023e000}, +{0xc0240000},{0xc0242000},{0xc0244000},{0xc0246000},{0xc0248000},{0xc024a000},{0xc024c000},{0xc024e000},{0xc0250000},{0xc0252000},{0xc0254000},{0xc0256000},{0xc0258000},{0xc025a000},{0xc025c000},{0xc025e000},{0xc0260000},{0xc0262000},{0xc0264000},{0xc0266000},{0xc0268000},{0xc026a000},{0xc026c000},{0xc026e000},{0xc0270000},{0xc0272000},{0xc0274000},{0xc0276000},{0xc0278000},{0xc027a000},{0xc027c000},{0xc027e000}, +{0xc0280000},{0xc0282000},{0xc0284000},{0xc0286000},{0xc0288000},{0xc028a000},{0xc028c000},{0xc028e000},{0xc0290000},{0xc0292000},{0xc0294000},{0xc0296000},{0xc0298000},{0xc029a000},{0xc029c000},{0xc029e000},{0xc02a0000},{0xc02a2000},{0xc02a4000},{0xc02a6000},{0xc02a8000},{0xc02aa000},{0xc02ac000},{0xc02ae000},{0xc02b0000},{0xc02b2000},{0xc02b4000},{0xc02b6000},{0xc02b8000},{0xc02ba000},{0xc02bc000},{0xc02be000}, +{0xc02c0000},{0xc02c2000},{0xc02c4000},{0xc02c6000},{0xc02c8000},{0xc02ca000},{0xc02cc000},{0xc02ce000},{0xc02d0000},{0xc02d2000},{0xc02d4000},{0xc02d6000},{0xc02d8000},{0xc02da000},{0xc02dc000},{0xc02de000},{0xc02e0000},{0xc02e2000},{0xc02e4000},{0xc02e6000},{0xc02e8000},{0xc02ea000},{0xc02ec000},{0xc02ee000},{0xc02f0000},{0xc02f2000},{0xc02f4000},{0xc02f6000},{0xc02f8000},{0xc02fa000},{0xc02fc000},{0xc02fe000}, +{0xc0300000},{0xc0302000},{0xc0304000},{0xc0306000},{0xc0308000},{0xc030a000},{0xc030c000},{0xc030e000},{0xc0310000},{0xc0312000},{0xc0314000},{0xc0316000},{0xc0318000},{0xc031a000},{0xc031c000},{0xc031e000},{0xc0320000},{0xc0322000},{0xc0324000},{0xc0326000},{0xc0328000},{0xc032a000},{0xc032c000},{0xc032e000},{0xc0330000},{0xc0332000},{0xc0334000},{0xc0336000},{0xc0338000},{0xc033a000},{0xc033c000},{0xc033e000}, +{0xc0340000},{0xc0342000},{0xc0344000},{0xc0346000},{0xc0348000},{0xc034a000},{0xc034c000},{0xc034e000},{0xc0350000},{0xc0352000},{0xc0354000},{0xc0356000},{0xc0358000},{0xc035a000},{0xc035c000},{0xc035e000},{0xc0360000},{0xc0362000},{0xc0364000},{0xc0366000},{0xc0368000},{0xc036a000},{0xc036c000},{0xc036e000},{0xc0370000},{0xc0372000},{0xc0374000},{0xc0376000},{0xc0378000},{0xc037a000},{0xc037c000},{0xc037e000}, +{0xc0380000},{0xc0382000},{0xc0384000},{0xc0386000},{0xc0388000},{0xc038a000},{0xc038c000},{0xc038e000},{0xc0390000},{0xc0392000},{0xc0394000},{0xc0396000},{0xc0398000},{0xc039a000},{0xc039c000},{0xc039e000},{0xc03a0000},{0xc03a2000},{0xc03a4000},{0xc03a6000},{0xc03a8000},{0xc03aa000},{0xc03ac000},{0xc03ae000},{0xc03b0000},{0xc03b2000},{0xc03b4000},{0xc03b6000},{0xc03b8000},{0xc03ba000},{0xc03bc000},{0xc03be000}, +{0xc03c0000},{0xc03c2000},{0xc03c4000},{0xc03c6000},{0xc03c8000},{0xc03ca000},{0xc03cc000},{0xc03ce000},{0xc03d0000},{0xc03d2000},{0xc03d4000},{0xc03d6000},{0xc03d8000},{0xc03da000},{0xc03dc000},{0xc03de000},{0xc03e0000},{0xc03e2000},{0xc03e4000},{0xc03e6000},{0xc03e8000},{0xc03ea000},{0xc03ec000},{0xc03ee000},{0xc03f0000},{0xc03f2000},{0xc03f4000},{0xc03f6000},{0xc03f8000},{0xc03fa000},{0xc03fc000},{0xc03fe000}, +{0xc0400000},{0xc0402000},{0xc0404000},{0xc0406000},{0xc0408000},{0xc040a000},{0xc040c000},{0xc040e000},{0xc0410000},{0xc0412000},{0xc0414000},{0xc0416000},{0xc0418000},{0xc041a000},{0xc041c000},{0xc041e000},{0xc0420000},{0xc0422000},{0xc0424000},{0xc0426000},{0xc0428000},{0xc042a000},{0xc042c000},{0xc042e000},{0xc0430000},{0xc0432000},{0xc0434000},{0xc0436000},{0xc0438000},{0xc043a000},{0xc043c000},{0xc043e000}, +{0xc0440000},{0xc0442000},{0xc0444000},{0xc0446000},{0xc0448000},{0xc044a000},{0xc044c000},{0xc044e000},{0xc0450000},{0xc0452000},{0xc0454000},{0xc0456000},{0xc0458000},{0xc045a000},{0xc045c000},{0xc045e000},{0xc0460000},{0xc0462000},{0xc0464000},{0xc0466000},{0xc0468000},{0xc046a000},{0xc046c000},{0xc046e000},{0xc0470000},{0xc0472000},{0xc0474000},{0xc0476000},{0xc0478000},{0xc047a000},{0xc047c000},{0xc047e000}, +{0xc0480000},{0xc0482000},{0xc0484000},{0xc0486000},{0xc0488000},{0xc048a000},{0xc048c000},{0xc048e000},{0xc0490000},{0xc0492000},{0xc0494000},{0xc0496000},{0xc0498000},{0xc049a000},{0xc049c000},{0xc049e000},{0xc04a0000},{0xc04a2000},{0xc04a4000},{0xc04a6000},{0xc04a8000},{0xc04aa000},{0xc04ac000},{0xc04ae000},{0xc04b0000},{0xc04b2000},{0xc04b4000},{0xc04b6000},{0xc04b8000},{0xc04ba000},{0xc04bc000},{0xc04be000}, +{0xc04c0000},{0xc04c2000},{0xc04c4000},{0xc04c6000},{0xc04c8000},{0xc04ca000},{0xc04cc000},{0xc04ce000},{0xc04d0000},{0xc04d2000},{0xc04d4000},{0xc04d6000},{0xc04d8000},{0xc04da000},{0xc04dc000},{0xc04de000},{0xc04e0000},{0xc04e2000},{0xc04e4000},{0xc04e6000},{0xc04e8000},{0xc04ea000},{0xc04ec000},{0xc04ee000},{0xc04f0000},{0xc04f2000},{0xc04f4000},{0xc04f6000},{0xc04f8000},{0xc04fa000},{0xc04fc000},{0xc04fe000}, +{0xc0500000},{0xc0502000},{0xc0504000},{0xc0506000},{0xc0508000},{0xc050a000},{0xc050c000},{0xc050e000},{0xc0510000},{0xc0512000},{0xc0514000},{0xc0516000},{0xc0518000},{0xc051a000},{0xc051c000},{0xc051e000},{0xc0520000},{0xc0522000},{0xc0524000},{0xc0526000},{0xc0528000},{0xc052a000},{0xc052c000},{0xc052e000},{0xc0530000},{0xc0532000},{0xc0534000},{0xc0536000},{0xc0538000},{0xc053a000},{0xc053c000},{0xc053e000}, +{0xc0540000},{0xc0542000},{0xc0544000},{0xc0546000},{0xc0548000},{0xc054a000},{0xc054c000},{0xc054e000},{0xc0550000},{0xc0552000},{0xc0554000},{0xc0556000},{0xc0558000},{0xc055a000},{0xc055c000},{0xc055e000},{0xc0560000},{0xc0562000},{0xc0564000},{0xc0566000},{0xc0568000},{0xc056a000},{0xc056c000},{0xc056e000},{0xc0570000},{0xc0572000},{0xc0574000},{0xc0576000},{0xc0578000},{0xc057a000},{0xc057c000},{0xc057e000}, +{0xc0580000},{0xc0582000},{0xc0584000},{0xc0586000},{0xc0588000},{0xc058a000},{0xc058c000},{0xc058e000},{0xc0590000},{0xc0592000},{0xc0594000},{0xc0596000},{0xc0598000},{0xc059a000},{0xc059c000},{0xc059e000},{0xc05a0000},{0xc05a2000},{0xc05a4000},{0xc05a6000},{0xc05a8000},{0xc05aa000},{0xc05ac000},{0xc05ae000},{0xc05b0000},{0xc05b2000},{0xc05b4000},{0xc05b6000},{0xc05b8000},{0xc05ba000},{0xc05bc000},{0xc05be000}, +{0xc05c0000},{0xc05c2000},{0xc05c4000},{0xc05c6000},{0xc05c8000},{0xc05ca000},{0xc05cc000},{0xc05ce000},{0xc05d0000},{0xc05d2000},{0xc05d4000},{0xc05d6000},{0xc05d8000},{0xc05da000},{0xc05dc000},{0xc05de000},{0xc05e0000},{0xc05e2000},{0xc05e4000},{0xc05e6000},{0xc05e8000},{0xc05ea000},{0xc05ec000},{0xc05ee000},{0xc05f0000},{0xc05f2000},{0xc05f4000},{0xc05f6000},{0xc05f8000},{0xc05fa000},{0xc05fc000},{0xc05fe000}, +{0xc0600000},{0xc0602000},{0xc0604000},{0xc0606000},{0xc0608000},{0xc060a000},{0xc060c000},{0xc060e000},{0xc0610000},{0xc0612000},{0xc0614000},{0xc0616000},{0xc0618000},{0xc061a000},{0xc061c000},{0xc061e000},{0xc0620000},{0xc0622000},{0xc0624000},{0xc0626000},{0xc0628000},{0xc062a000},{0xc062c000},{0xc062e000},{0xc0630000},{0xc0632000},{0xc0634000},{0xc0636000},{0xc0638000},{0xc063a000},{0xc063c000},{0xc063e000}, +{0xc0640000},{0xc0642000},{0xc0644000},{0xc0646000},{0xc0648000},{0xc064a000},{0xc064c000},{0xc064e000},{0xc0650000},{0xc0652000},{0xc0654000},{0xc0656000},{0xc0658000},{0xc065a000},{0xc065c000},{0xc065e000},{0xc0660000},{0xc0662000},{0xc0664000},{0xc0666000},{0xc0668000},{0xc066a000},{0xc066c000},{0xc066e000},{0xc0670000},{0xc0672000},{0xc0674000},{0xc0676000},{0xc0678000},{0xc067a000},{0xc067c000},{0xc067e000}, +{0xc0680000},{0xc0682000},{0xc0684000},{0xc0686000},{0xc0688000},{0xc068a000},{0xc068c000},{0xc068e000},{0xc0690000},{0xc0692000},{0xc0694000},{0xc0696000},{0xc0698000},{0xc069a000},{0xc069c000},{0xc069e000},{0xc06a0000},{0xc06a2000},{0xc06a4000},{0xc06a6000},{0xc06a8000},{0xc06aa000},{0xc06ac000},{0xc06ae000},{0xc06b0000},{0xc06b2000},{0xc06b4000},{0xc06b6000},{0xc06b8000},{0xc06ba000},{0xc06bc000},{0xc06be000}, +{0xc06c0000},{0xc06c2000},{0xc06c4000},{0xc06c6000},{0xc06c8000},{0xc06ca000},{0xc06cc000},{0xc06ce000},{0xc06d0000},{0xc06d2000},{0xc06d4000},{0xc06d6000},{0xc06d8000},{0xc06da000},{0xc06dc000},{0xc06de000},{0xc06e0000},{0xc06e2000},{0xc06e4000},{0xc06e6000},{0xc06e8000},{0xc06ea000},{0xc06ec000},{0xc06ee000},{0xc06f0000},{0xc06f2000},{0xc06f4000},{0xc06f6000},{0xc06f8000},{0xc06fa000},{0xc06fc000},{0xc06fe000}, +{0xc0700000},{0xc0702000},{0xc0704000},{0xc0706000},{0xc0708000},{0xc070a000},{0xc070c000},{0xc070e000},{0xc0710000},{0xc0712000},{0xc0714000},{0xc0716000},{0xc0718000},{0xc071a000},{0xc071c000},{0xc071e000},{0xc0720000},{0xc0722000},{0xc0724000},{0xc0726000},{0xc0728000},{0xc072a000},{0xc072c000},{0xc072e000},{0xc0730000},{0xc0732000},{0xc0734000},{0xc0736000},{0xc0738000},{0xc073a000},{0xc073c000},{0xc073e000}, +{0xc0740000},{0xc0742000},{0xc0744000},{0xc0746000},{0xc0748000},{0xc074a000},{0xc074c000},{0xc074e000},{0xc0750000},{0xc0752000},{0xc0754000},{0xc0756000},{0xc0758000},{0xc075a000},{0xc075c000},{0xc075e000},{0xc0760000},{0xc0762000},{0xc0764000},{0xc0766000},{0xc0768000},{0xc076a000},{0xc076c000},{0xc076e000},{0xc0770000},{0xc0772000},{0xc0774000},{0xc0776000},{0xc0778000},{0xc077a000},{0xc077c000},{0xc077e000}, +{0xc0780000},{0xc0782000},{0xc0784000},{0xc0786000},{0xc0788000},{0xc078a000},{0xc078c000},{0xc078e000},{0xc0790000},{0xc0792000},{0xc0794000},{0xc0796000},{0xc0798000},{0xc079a000},{0xc079c000},{0xc079e000},{0xc07a0000},{0xc07a2000},{0xc07a4000},{0xc07a6000},{0xc07a8000},{0xc07aa000},{0xc07ac000},{0xc07ae000},{0xc07b0000},{0xc07b2000},{0xc07b4000},{0xc07b6000},{0xc07b8000},{0xc07ba000},{0xc07bc000},{0xc07be000}, +{0xc07c0000},{0xc07c2000},{0xc07c4000},{0xc07c6000},{0xc07c8000},{0xc07ca000},{0xc07cc000},{0xc07ce000},{0xc07d0000},{0xc07d2000},{0xc07d4000},{0xc07d6000},{0xc07d8000},{0xc07da000},{0xc07dc000},{0xc07de000},{0xc07e0000},{0xc07e2000},{0xc07e4000},{0xc07e6000},{0xc07e8000},{0xc07ea000},{0xc07ec000},{0xc07ee000},{0xc07f0000},{0xc07f2000},{0xc07f4000},{0xc07f6000},{0xc07f8000},{0xc07fa000},{0xc07fc000},{0xc07fe000}, +{0xc0800000},{0xc0802000},{0xc0804000},{0xc0806000},{0xc0808000},{0xc080a000},{0xc080c000},{0xc080e000},{0xc0810000},{0xc0812000},{0xc0814000},{0xc0816000},{0xc0818000},{0xc081a000},{0xc081c000},{0xc081e000},{0xc0820000},{0xc0822000},{0xc0824000},{0xc0826000},{0xc0828000},{0xc082a000},{0xc082c000},{0xc082e000},{0xc0830000},{0xc0832000},{0xc0834000},{0xc0836000},{0xc0838000},{0xc083a000},{0xc083c000},{0xc083e000}, +{0xc0840000},{0xc0842000},{0xc0844000},{0xc0846000},{0xc0848000},{0xc084a000},{0xc084c000},{0xc084e000},{0xc0850000},{0xc0852000},{0xc0854000},{0xc0856000},{0xc0858000},{0xc085a000},{0xc085c000},{0xc085e000},{0xc0860000},{0xc0862000},{0xc0864000},{0xc0866000},{0xc0868000},{0xc086a000},{0xc086c000},{0xc086e000},{0xc0870000},{0xc0872000},{0xc0874000},{0xc0876000},{0xc0878000},{0xc087a000},{0xc087c000},{0xc087e000}, +{0xc0880000},{0xc0882000},{0xc0884000},{0xc0886000},{0xc0888000},{0xc088a000},{0xc088c000},{0xc088e000},{0xc0890000},{0xc0892000},{0xc0894000},{0xc0896000},{0xc0898000},{0xc089a000},{0xc089c000},{0xc089e000},{0xc08a0000},{0xc08a2000},{0xc08a4000},{0xc08a6000},{0xc08a8000},{0xc08aa000},{0xc08ac000},{0xc08ae000},{0xc08b0000},{0xc08b2000},{0xc08b4000},{0xc08b6000},{0xc08b8000},{0xc08ba000},{0xc08bc000},{0xc08be000}, +{0xc08c0000},{0xc08c2000},{0xc08c4000},{0xc08c6000},{0xc08c8000},{0xc08ca000},{0xc08cc000},{0xc08ce000},{0xc08d0000},{0xc08d2000},{0xc08d4000},{0xc08d6000},{0xc08d8000},{0xc08da000},{0xc08dc000},{0xc08de000},{0xc08e0000},{0xc08e2000},{0xc08e4000},{0xc08e6000},{0xc08e8000},{0xc08ea000},{0xc08ec000},{0xc08ee000},{0xc08f0000},{0xc08f2000},{0xc08f4000},{0xc08f6000},{0xc08f8000},{0xc08fa000},{0xc08fc000},{0xc08fe000}, +{0xc0900000},{0xc0902000},{0xc0904000},{0xc0906000},{0xc0908000},{0xc090a000},{0xc090c000},{0xc090e000},{0xc0910000},{0xc0912000},{0xc0914000},{0xc0916000},{0xc0918000},{0xc091a000},{0xc091c000},{0xc091e000},{0xc0920000},{0xc0922000},{0xc0924000},{0xc0926000},{0xc0928000},{0xc092a000},{0xc092c000},{0xc092e000},{0xc0930000},{0xc0932000},{0xc0934000},{0xc0936000},{0xc0938000},{0xc093a000},{0xc093c000},{0xc093e000}, +{0xc0940000},{0xc0942000},{0xc0944000},{0xc0946000},{0xc0948000},{0xc094a000},{0xc094c000},{0xc094e000},{0xc0950000},{0xc0952000},{0xc0954000},{0xc0956000},{0xc0958000},{0xc095a000},{0xc095c000},{0xc095e000},{0xc0960000},{0xc0962000},{0xc0964000},{0xc0966000},{0xc0968000},{0xc096a000},{0xc096c000},{0xc096e000},{0xc0970000},{0xc0972000},{0xc0974000},{0xc0976000},{0xc0978000},{0xc097a000},{0xc097c000},{0xc097e000}, +{0xc0980000},{0xc0982000},{0xc0984000},{0xc0986000},{0xc0988000},{0xc098a000},{0xc098c000},{0xc098e000},{0xc0990000},{0xc0992000},{0xc0994000},{0xc0996000},{0xc0998000},{0xc099a000},{0xc099c000},{0xc099e000},{0xc09a0000},{0xc09a2000},{0xc09a4000},{0xc09a6000},{0xc09a8000},{0xc09aa000},{0xc09ac000},{0xc09ae000},{0xc09b0000},{0xc09b2000},{0xc09b4000},{0xc09b6000},{0xc09b8000},{0xc09ba000},{0xc09bc000},{0xc09be000}, +{0xc09c0000},{0xc09c2000},{0xc09c4000},{0xc09c6000},{0xc09c8000},{0xc09ca000},{0xc09cc000},{0xc09ce000},{0xc09d0000},{0xc09d2000},{0xc09d4000},{0xc09d6000},{0xc09d8000},{0xc09da000},{0xc09dc000},{0xc09de000},{0xc09e0000},{0xc09e2000},{0xc09e4000},{0xc09e6000},{0xc09e8000},{0xc09ea000},{0xc09ec000},{0xc09ee000},{0xc09f0000},{0xc09f2000},{0xc09f4000},{0xc09f6000},{0xc09f8000},{0xc09fa000},{0xc09fc000},{0xc09fe000}, +{0xc0a00000},{0xc0a02000},{0xc0a04000},{0xc0a06000},{0xc0a08000},{0xc0a0a000},{0xc0a0c000},{0xc0a0e000},{0xc0a10000},{0xc0a12000},{0xc0a14000},{0xc0a16000},{0xc0a18000},{0xc0a1a000},{0xc0a1c000},{0xc0a1e000},{0xc0a20000},{0xc0a22000},{0xc0a24000},{0xc0a26000},{0xc0a28000},{0xc0a2a000},{0xc0a2c000},{0xc0a2e000},{0xc0a30000},{0xc0a32000},{0xc0a34000},{0xc0a36000},{0xc0a38000},{0xc0a3a000},{0xc0a3c000},{0xc0a3e000}, +{0xc0a40000},{0xc0a42000},{0xc0a44000},{0xc0a46000},{0xc0a48000},{0xc0a4a000},{0xc0a4c000},{0xc0a4e000},{0xc0a50000},{0xc0a52000},{0xc0a54000},{0xc0a56000},{0xc0a58000},{0xc0a5a000},{0xc0a5c000},{0xc0a5e000},{0xc0a60000},{0xc0a62000},{0xc0a64000},{0xc0a66000},{0xc0a68000},{0xc0a6a000},{0xc0a6c000},{0xc0a6e000},{0xc0a70000},{0xc0a72000},{0xc0a74000},{0xc0a76000},{0xc0a78000},{0xc0a7a000},{0xc0a7c000},{0xc0a7e000}, +{0xc0a80000},{0xc0a82000},{0xc0a84000},{0xc0a86000},{0xc0a88000},{0xc0a8a000},{0xc0a8c000},{0xc0a8e000},{0xc0a90000},{0xc0a92000},{0xc0a94000},{0xc0a96000},{0xc0a98000},{0xc0a9a000},{0xc0a9c000},{0xc0a9e000},{0xc0aa0000},{0xc0aa2000},{0xc0aa4000},{0xc0aa6000},{0xc0aa8000},{0xc0aaa000},{0xc0aac000},{0xc0aae000},{0xc0ab0000},{0xc0ab2000},{0xc0ab4000},{0xc0ab6000},{0xc0ab8000},{0xc0aba000},{0xc0abc000},{0xc0abe000}, +{0xc0ac0000},{0xc0ac2000},{0xc0ac4000},{0xc0ac6000},{0xc0ac8000},{0xc0aca000},{0xc0acc000},{0xc0ace000},{0xc0ad0000},{0xc0ad2000},{0xc0ad4000},{0xc0ad6000},{0xc0ad8000},{0xc0ada000},{0xc0adc000},{0xc0ade000},{0xc0ae0000},{0xc0ae2000},{0xc0ae4000},{0xc0ae6000},{0xc0ae8000},{0xc0aea000},{0xc0aec000},{0xc0aee000},{0xc0af0000},{0xc0af2000},{0xc0af4000},{0xc0af6000},{0xc0af8000},{0xc0afa000},{0xc0afc000},{0xc0afe000}, +{0xc0b00000},{0xc0b02000},{0xc0b04000},{0xc0b06000},{0xc0b08000},{0xc0b0a000},{0xc0b0c000},{0xc0b0e000},{0xc0b10000},{0xc0b12000},{0xc0b14000},{0xc0b16000},{0xc0b18000},{0xc0b1a000},{0xc0b1c000},{0xc0b1e000},{0xc0b20000},{0xc0b22000},{0xc0b24000},{0xc0b26000},{0xc0b28000},{0xc0b2a000},{0xc0b2c000},{0xc0b2e000},{0xc0b30000},{0xc0b32000},{0xc0b34000},{0xc0b36000},{0xc0b38000},{0xc0b3a000},{0xc0b3c000},{0xc0b3e000}, +{0xc0b40000},{0xc0b42000},{0xc0b44000},{0xc0b46000},{0xc0b48000},{0xc0b4a000},{0xc0b4c000},{0xc0b4e000},{0xc0b50000},{0xc0b52000},{0xc0b54000},{0xc0b56000},{0xc0b58000},{0xc0b5a000},{0xc0b5c000},{0xc0b5e000},{0xc0b60000},{0xc0b62000},{0xc0b64000},{0xc0b66000},{0xc0b68000},{0xc0b6a000},{0xc0b6c000},{0xc0b6e000},{0xc0b70000},{0xc0b72000},{0xc0b74000},{0xc0b76000},{0xc0b78000},{0xc0b7a000},{0xc0b7c000},{0xc0b7e000}, +{0xc0b80000},{0xc0b82000},{0xc0b84000},{0xc0b86000},{0xc0b88000},{0xc0b8a000},{0xc0b8c000},{0xc0b8e000},{0xc0b90000},{0xc0b92000},{0xc0b94000},{0xc0b96000},{0xc0b98000},{0xc0b9a000},{0xc0b9c000},{0xc0b9e000},{0xc0ba0000},{0xc0ba2000},{0xc0ba4000},{0xc0ba6000},{0xc0ba8000},{0xc0baa000},{0xc0bac000},{0xc0bae000},{0xc0bb0000},{0xc0bb2000},{0xc0bb4000},{0xc0bb6000},{0xc0bb8000},{0xc0bba000},{0xc0bbc000},{0xc0bbe000}, +{0xc0bc0000},{0xc0bc2000},{0xc0bc4000},{0xc0bc6000},{0xc0bc8000},{0xc0bca000},{0xc0bcc000},{0xc0bce000},{0xc0bd0000},{0xc0bd2000},{0xc0bd4000},{0xc0bd6000},{0xc0bd8000},{0xc0bda000},{0xc0bdc000},{0xc0bde000},{0xc0be0000},{0xc0be2000},{0xc0be4000},{0xc0be6000},{0xc0be8000},{0xc0bea000},{0xc0bec000},{0xc0bee000},{0xc0bf0000},{0xc0bf2000},{0xc0bf4000},{0xc0bf6000},{0xc0bf8000},{0xc0bfa000},{0xc0bfc000},{0xc0bfe000}, +{0xc0c00000},{0xc0c02000},{0xc0c04000},{0xc0c06000},{0xc0c08000},{0xc0c0a000},{0xc0c0c000},{0xc0c0e000},{0xc0c10000},{0xc0c12000},{0xc0c14000},{0xc0c16000},{0xc0c18000},{0xc0c1a000},{0xc0c1c000},{0xc0c1e000},{0xc0c20000},{0xc0c22000},{0xc0c24000},{0xc0c26000},{0xc0c28000},{0xc0c2a000},{0xc0c2c000},{0xc0c2e000},{0xc0c30000},{0xc0c32000},{0xc0c34000},{0xc0c36000},{0xc0c38000},{0xc0c3a000},{0xc0c3c000},{0xc0c3e000}, +{0xc0c40000},{0xc0c42000},{0xc0c44000},{0xc0c46000},{0xc0c48000},{0xc0c4a000},{0xc0c4c000},{0xc0c4e000},{0xc0c50000},{0xc0c52000},{0xc0c54000},{0xc0c56000},{0xc0c58000},{0xc0c5a000},{0xc0c5c000},{0xc0c5e000},{0xc0c60000},{0xc0c62000},{0xc0c64000},{0xc0c66000},{0xc0c68000},{0xc0c6a000},{0xc0c6c000},{0xc0c6e000},{0xc0c70000},{0xc0c72000},{0xc0c74000},{0xc0c76000},{0xc0c78000},{0xc0c7a000},{0xc0c7c000},{0xc0c7e000}, +{0xc0c80000},{0xc0c82000},{0xc0c84000},{0xc0c86000},{0xc0c88000},{0xc0c8a000},{0xc0c8c000},{0xc0c8e000},{0xc0c90000},{0xc0c92000},{0xc0c94000},{0xc0c96000},{0xc0c98000},{0xc0c9a000},{0xc0c9c000},{0xc0c9e000},{0xc0ca0000},{0xc0ca2000},{0xc0ca4000},{0xc0ca6000},{0xc0ca8000},{0xc0caa000},{0xc0cac000},{0xc0cae000},{0xc0cb0000},{0xc0cb2000},{0xc0cb4000},{0xc0cb6000},{0xc0cb8000},{0xc0cba000},{0xc0cbc000},{0xc0cbe000}, +{0xc0cc0000},{0xc0cc2000},{0xc0cc4000},{0xc0cc6000},{0xc0cc8000},{0xc0cca000},{0xc0ccc000},{0xc0cce000},{0xc0cd0000},{0xc0cd2000},{0xc0cd4000},{0xc0cd6000},{0xc0cd8000},{0xc0cda000},{0xc0cdc000},{0xc0cde000},{0xc0ce0000},{0xc0ce2000},{0xc0ce4000},{0xc0ce6000},{0xc0ce8000},{0xc0cea000},{0xc0cec000},{0xc0cee000},{0xc0cf0000},{0xc0cf2000},{0xc0cf4000},{0xc0cf6000},{0xc0cf8000},{0xc0cfa000},{0xc0cfc000},{0xc0cfe000}, +{0xc0d00000},{0xc0d02000},{0xc0d04000},{0xc0d06000},{0xc0d08000},{0xc0d0a000},{0xc0d0c000},{0xc0d0e000},{0xc0d10000},{0xc0d12000},{0xc0d14000},{0xc0d16000},{0xc0d18000},{0xc0d1a000},{0xc0d1c000},{0xc0d1e000},{0xc0d20000},{0xc0d22000},{0xc0d24000},{0xc0d26000},{0xc0d28000},{0xc0d2a000},{0xc0d2c000},{0xc0d2e000},{0xc0d30000},{0xc0d32000},{0xc0d34000},{0xc0d36000},{0xc0d38000},{0xc0d3a000},{0xc0d3c000},{0xc0d3e000}, +{0xc0d40000},{0xc0d42000},{0xc0d44000},{0xc0d46000},{0xc0d48000},{0xc0d4a000},{0xc0d4c000},{0xc0d4e000},{0xc0d50000},{0xc0d52000},{0xc0d54000},{0xc0d56000},{0xc0d58000},{0xc0d5a000},{0xc0d5c000},{0xc0d5e000},{0xc0d60000},{0xc0d62000},{0xc0d64000},{0xc0d66000},{0xc0d68000},{0xc0d6a000},{0xc0d6c000},{0xc0d6e000},{0xc0d70000},{0xc0d72000},{0xc0d74000},{0xc0d76000},{0xc0d78000},{0xc0d7a000},{0xc0d7c000},{0xc0d7e000}, +{0xc0d80000},{0xc0d82000},{0xc0d84000},{0xc0d86000},{0xc0d88000},{0xc0d8a000},{0xc0d8c000},{0xc0d8e000},{0xc0d90000},{0xc0d92000},{0xc0d94000},{0xc0d96000},{0xc0d98000},{0xc0d9a000},{0xc0d9c000},{0xc0d9e000},{0xc0da0000},{0xc0da2000},{0xc0da4000},{0xc0da6000},{0xc0da8000},{0xc0daa000},{0xc0dac000},{0xc0dae000},{0xc0db0000},{0xc0db2000},{0xc0db4000},{0xc0db6000},{0xc0db8000},{0xc0dba000},{0xc0dbc000},{0xc0dbe000}, +{0xc0dc0000},{0xc0dc2000},{0xc0dc4000},{0xc0dc6000},{0xc0dc8000},{0xc0dca000},{0xc0dcc000},{0xc0dce000},{0xc0dd0000},{0xc0dd2000},{0xc0dd4000},{0xc0dd6000},{0xc0dd8000},{0xc0dda000},{0xc0ddc000},{0xc0dde000},{0xc0de0000},{0xc0de2000},{0xc0de4000},{0xc0de6000},{0xc0de8000},{0xc0dea000},{0xc0dec000},{0xc0dee000},{0xc0df0000},{0xc0df2000},{0xc0df4000},{0xc0df6000},{0xc0df8000},{0xc0dfa000},{0xc0dfc000},{0xc0dfe000}, +{0xc0e00000},{0xc0e02000},{0xc0e04000},{0xc0e06000},{0xc0e08000},{0xc0e0a000},{0xc0e0c000},{0xc0e0e000},{0xc0e10000},{0xc0e12000},{0xc0e14000},{0xc0e16000},{0xc0e18000},{0xc0e1a000},{0xc0e1c000},{0xc0e1e000},{0xc0e20000},{0xc0e22000},{0xc0e24000},{0xc0e26000},{0xc0e28000},{0xc0e2a000},{0xc0e2c000},{0xc0e2e000},{0xc0e30000},{0xc0e32000},{0xc0e34000},{0xc0e36000},{0xc0e38000},{0xc0e3a000},{0xc0e3c000},{0xc0e3e000}, +{0xc0e40000},{0xc0e42000},{0xc0e44000},{0xc0e46000},{0xc0e48000},{0xc0e4a000},{0xc0e4c000},{0xc0e4e000},{0xc0e50000},{0xc0e52000},{0xc0e54000},{0xc0e56000},{0xc0e58000},{0xc0e5a000},{0xc0e5c000},{0xc0e5e000},{0xc0e60000},{0xc0e62000},{0xc0e64000},{0xc0e66000},{0xc0e68000},{0xc0e6a000},{0xc0e6c000},{0xc0e6e000},{0xc0e70000},{0xc0e72000},{0xc0e74000},{0xc0e76000},{0xc0e78000},{0xc0e7a000},{0xc0e7c000},{0xc0e7e000}, +{0xc0e80000},{0xc0e82000},{0xc0e84000},{0xc0e86000},{0xc0e88000},{0xc0e8a000},{0xc0e8c000},{0xc0e8e000},{0xc0e90000},{0xc0e92000},{0xc0e94000},{0xc0e96000},{0xc0e98000},{0xc0e9a000},{0xc0e9c000},{0xc0e9e000},{0xc0ea0000},{0xc0ea2000},{0xc0ea4000},{0xc0ea6000},{0xc0ea8000},{0xc0eaa000},{0xc0eac000},{0xc0eae000},{0xc0eb0000},{0xc0eb2000},{0xc0eb4000},{0xc0eb6000},{0xc0eb8000},{0xc0eba000},{0xc0ebc000},{0xc0ebe000}, +{0xc0ec0000},{0xc0ec2000},{0xc0ec4000},{0xc0ec6000},{0xc0ec8000},{0xc0eca000},{0xc0ecc000},{0xc0ece000},{0xc0ed0000},{0xc0ed2000},{0xc0ed4000},{0xc0ed6000},{0xc0ed8000},{0xc0eda000},{0xc0edc000},{0xc0ede000},{0xc0ee0000},{0xc0ee2000},{0xc0ee4000},{0xc0ee6000},{0xc0ee8000},{0xc0eea000},{0xc0eec000},{0xc0eee000},{0xc0ef0000},{0xc0ef2000},{0xc0ef4000},{0xc0ef6000},{0xc0ef8000},{0xc0efa000},{0xc0efc000},{0xc0efe000}, +{0xc0f00000},{0xc0f02000},{0xc0f04000},{0xc0f06000},{0xc0f08000},{0xc0f0a000},{0xc0f0c000},{0xc0f0e000},{0xc0f10000},{0xc0f12000},{0xc0f14000},{0xc0f16000},{0xc0f18000},{0xc0f1a000},{0xc0f1c000},{0xc0f1e000},{0xc0f20000},{0xc0f22000},{0xc0f24000},{0xc0f26000},{0xc0f28000},{0xc0f2a000},{0xc0f2c000},{0xc0f2e000},{0xc0f30000},{0xc0f32000},{0xc0f34000},{0xc0f36000},{0xc0f38000},{0xc0f3a000},{0xc0f3c000},{0xc0f3e000}, +{0xc0f40000},{0xc0f42000},{0xc0f44000},{0xc0f46000},{0xc0f48000},{0xc0f4a000},{0xc0f4c000},{0xc0f4e000},{0xc0f50000},{0xc0f52000},{0xc0f54000},{0xc0f56000},{0xc0f58000},{0xc0f5a000},{0xc0f5c000},{0xc0f5e000},{0xc0f60000},{0xc0f62000},{0xc0f64000},{0xc0f66000},{0xc0f68000},{0xc0f6a000},{0xc0f6c000},{0xc0f6e000},{0xc0f70000},{0xc0f72000},{0xc0f74000},{0xc0f76000},{0xc0f78000},{0xc0f7a000},{0xc0f7c000},{0xc0f7e000}, +{0xc0f80000},{0xc0f82000},{0xc0f84000},{0xc0f86000},{0xc0f88000},{0xc0f8a000},{0xc0f8c000},{0xc0f8e000},{0xc0f90000},{0xc0f92000},{0xc0f94000},{0xc0f96000},{0xc0f98000},{0xc0f9a000},{0xc0f9c000},{0xc0f9e000},{0xc0fa0000},{0xc0fa2000},{0xc0fa4000},{0xc0fa6000},{0xc0fa8000},{0xc0faa000},{0xc0fac000},{0xc0fae000},{0xc0fb0000},{0xc0fb2000},{0xc0fb4000},{0xc0fb6000},{0xc0fb8000},{0xc0fba000},{0xc0fbc000},{0xc0fbe000}, +{0xc0fc0000},{0xc0fc2000},{0xc0fc4000},{0xc0fc6000},{0xc0fc8000},{0xc0fca000},{0xc0fcc000},{0xc0fce000},{0xc0fd0000},{0xc0fd2000},{0xc0fd4000},{0xc0fd6000},{0xc0fd8000},{0xc0fda000},{0xc0fdc000},{0xc0fde000},{0xc0fe0000},{0xc0fe2000},{0xc0fe4000},{0xc0fe6000},{0xc0fe8000},{0xc0fea000},{0xc0fec000},{0xc0fee000},{0xc0ff0000},{0xc0ff2000},{0xc0ff4000},{0xc0ff6000},{0xc0ff8000},{0xc0ffa000},{0xc0ffc000},{0xc0ffe000}, +{0xc1000000},{0xc1002000},{0xc1004000},{0xc1006000},{0xc1008000},{0xc100a000},{0xc100c000},{0xc100e000},{0xc1010000},{0xc1012000},{0xc1014000},{0xc1016000},{0xc1018000},{0xc101a000},{0xc101c000},{0xc101e000},{0xc1020000},{0xc1022000},{0xc1024000},{0xc1026000},{0xc1028000},{0xc102a000},{0xc102c000},{0xc102e000},{0xc1030000},{0xc1032000},{0xc1034000},{0xc1036000},{0xc1038000},{0xc103a000},{0xc103c000},{0xc103e000}, +{0xc1040000},{0xc1042000},{0xc1044000},{0xc1046000},{0xc1048000},{0xc104a000},{0xc104c000},{0xc104e000},{0xc1050000},{0xc1052000},{0xc1054000},{0xc1056000},{0xc1058000},{0xc105a000},{0xc105c000},{0xc105e000},{0xc1060000},{0xc1062000},{0xc1064000},{0xc1066000},{0xc1068000},{0xc106a000},{0xc106c000},{0xc106e000},{0xc1070000},{0xc1072000},{0xc1074000},{0xc1076000},{0xc1078000},{0xc107a000},{0xc107c000},{0xc107e000}, +{0xc1080000},{0xc1082000},{0xc1084000},{0xc1086000},{0xc1088000},{0xc108a000},{0xc108c000},{0xc108e000},{0xc1090000},{0xc1092000},{0xc1094000},{0xc1096000},{0xc1098000},{0xc109a000},{0xc109c000},{0xc109e000},{0xc10a0000},{0xc10a2000},{0xc10a4000},{0xc10a6000},{0xc10a8000},{0xc10aa000},{0xc10ac000},{0xc10ae000},{0xc10b0000},{0xc10b2000},{0xc10b4000},{0xc10b6000},{0xc10b8000},{0xc10ba000},{0xc10bc000},{0xc10be000}, +{0xc10c0000},{0xc10c2000},{0xc10c4000},{0xc10c6000},{0xc10c8000},{0xc10ca000},{0xc10cc000},{0xc10ce000},{0xc10d0000},{0xc10d2000},{0xc10d4000},{0xc10d6000},{0xc10d8000},{0xc10da000},{0xc10dc000},{0xc10de000},{0xc10e0000},{0xc10e2000},{0xc10e4000},{0xc10e6000},{0xc10e8000},{0xc10ea000},{0xc10ec000},{0xc10ee000},{0xc10f0000},{0xc10f2000},{0xc10f4000},{0xc10f6000},{0xc10f8000},{0xc10fa000},{0xc10fc000},{0xc10fe000}, +{0xc1100000},{0xc1102000},{0xc1104000},{0xc1106000},{0xc1108000},{0xc110a000},{0xc110c000},{0xc110e000},{0xc1110000},{0xc1112000},{0xc1114000},{0xc1116000},{0xc1118000},{0xc111a000},{0xc111c000},{0xc111e000},{0xc1120000},{0xc1122000},{0xc1124000},{0xc1126000},{0xc1128000},{0xc112a000},{0xc112c000},{0xc112e000},{0xc1130000},{0xc1132000},{0xc1134000},{0xc1136000},{0xc1138000},{0xc113a000},{0xc113c000},{0xc113e000}, +{0xc1140000},{0xc1142000},{0xc1144000},{0xc1146000},{0xc1148000},{0xc114a000},{0xc114c000},{0xc114e000},{0xc1150000},{0xc1152000},{0xc1154000},{0xc1156000},{0xc1158000},{0xc115a000},{0xc115c000},{0xc115e000},{0xc1160000},{0xc1162000},{0xc1164000},{0xc1166000},{0xc1168000},{0xc116a000},{0xc116c000},{0xc116e000},{0xc1170000},{0xc1172000},{0xc1174000},{0xc1176000},{0xc1178000},{0xc117a000},{0xc117c000},{0xc117e000}, +{0xc1180000},{0xc1182000},{0xc1184000},{0xc1186000},{0xc1188000},{0xc118a000},{0xc118c000},{0xc118e000},{0xc1190000},{0xc1192000},{0xc1194000},{0xc1196000},{0xc1198000},{0xc119a000},{0xc119c000},{0xc119e000},{0xc11a0000},{0xc11a2000},{0xc11a4000},{0xc11a6000},{0xc11a8000},{0xc11aa000},{0xc11ac000},{0xc11ae000},{0xc11b0000},{0xc11b2000},{0xc11b4000},{0xc11b6000},{0xc11b8000},{0xc11ba000},{0xc11bc000},{0xc11be000}, +{0xc11c0000},{0xc11c2000},{0xc11c4000},{0xc11c6000},{0xc11c8000},{0xc11ca000},{0xc11cc000},{0xc11ce000},{0xc11d0000},{0xc11d2000},{0xc11d4000},{0xc11d6000},{0xc11d8000},{0xc11da000},{0xc11dc000},{0xc11de000},{0xc11e0000},{0xc11e2000},{0xc11e4000},{0xc11e6000},{0xc11e8000},{0xc11ea000},{0xc11ec000},{0xc11ee000},{0xc11f0000},{0xc11f2000},{0xc11f4000},{0xc11f6000},{0xc11f8000},{0xc11fa000},{0xc11fc000},{0xc11fe000}, +{0xc1200000},{0xc1202000},{0xc1204000},{0xc1206000},{0xc1208000},{0xc120a000},{0xc120c000},{0xc120e000},{0xc1210000},{0xc1212000},{0xc1214000},{0xc1216000},{0xc1218000},{0xc121a000},{0xc121c000},{0xc121e000},{0xc1220000},{0xc1222000},{0xc1224000},{0xc1226000},{0xc1228000},{0xc122a000},{0xc122c000},{0xc122e000},{0xc1230000},{0xc1232000},{0xc1234000},{0xc1236000},{0xc1238000},{0xc123a000},{0xc123c000},{0xc123e000}, +{0xc1240000},{0xc1242000},{0xc1244000},{0xc1246000},{0xc1248000},{0xc124a000},{0xc124c000},{0xc124e000},{0xc1250000},{0xc1252000},{0xc1254000},{0xc1256000},{0xc1258000},{0xc125a000},{0xc125c000},{0xc125e000},{0xc1260000},{0xc1262000},{0xc1264000},{0xc1266000},{0xc1268000},{0xc126a000},{0xc126c000},{0xc126e000},{0xc1270000},{0xc1272000},{0xc1274000},{0xc1276000},{0xc1278000},{0xc127a000},{0xc127c000},{0xc127e000}, +{0xc1280000},{0xc1282000},{0xc1284000},{0xc1286000},{0xc1288000},{0xc128a000},{0xc128c000},{0xc128e000},{0xc1290000},{0xc1292000},{0xc1294000},{0xc1296000},{0xc1298000},{0xc129a000},{0xc129c000},{0xc129e000},{0xc12a0000},{0xc12a2000},{0xc12a4000},{0xc12a6000},{0xc12a8000},{0xc12aa000},{0xc12ac000},{0xc12ae000},{0xc12b0000},{0xc12b2000},{0xc12b4000},{0xc12b6000},{0xc12b8000},{0xc12ba000},{0xc12bc000},{0xc12be000}, +{0xc12c0000},{0xc12c2000},{0xc12c4000},{0xc12c6000},{0xc12c8000},{0xc12ca000},{0xc12cc000},{0xc12ce000},{0xc12d0000},{0xc12d2000},{0xc12d4000},{0xc12d6000},{0xc12d8000},{0xc12da000},{0xc12dc000},{0xc12de000},{0xc12e0000},{0xc12e2000},{0xc12e4000},{0xc12e6000},{0xc12e8000},{0xc12ea000},{0xc12ec000},{0xc12ee000},{0xc12f0000},{0xc12f2000},{0xc12f4000},{0xc12f6000},{0xc12f8000},{0xc12fa000},{0xc12fc000},{0xc12fe000}, +{0xc1300000},{0xc1302000},{0xc1304000},{0xc1306000},{0xc1308000},{0xc130a000},{0xc130c000},{0xc130e000},{0xc1310000},{0xc1312000},{0xc1314000},{0xc1316000},{0xc1318000},{0xc131a000},{0xc131c000},{0xc131e000},{0xc1320000},{0xc1322000},{0xc1324000},{0xc1326000},{0xc1328000},{0xc132a000},{0xc132c000},{0xc132e000},{0xc1330000},{0xc1332000},{0xc1334000},{0xc1336000},{0xc1338000},{0xc133a000},{0xc133c000},{0xc133e000}, +{0xc1340000},{0xc1342000},{0xc1344000},{0xc1346000},{0xc1348000},{0xc134a000},{0xc134c000},{0xc134e000},{0xc1350000},{0xc1352000},{0xc1354000},{0xc1356000},{0xc1358000},{0xc135a000},{0xc135c000},{0xc135e000},{0xc1360000},{0xc1362000},{0xc1364000},{0xc1366000},{0xc1368000},{0xc136a000},{0xc136c000},{0xc136e000},{0xc1370000},{0xc1372000},{0xc1374000},{0xc1376000},{0xc1378000},{0xc137a000},{0xc137c000},{0xc137e000}, +{0xc1380000},{0xc1382000},{0xc1384000},{0xc1386000},{0xc1388000},{0xc138a000},{0xc138c000},{0xc138e000},{0xc1390000},{0xc1392000},{0xc1394000},{0xc1396000},{0xc1398000},{0xc139a000},{0xc139c000},{0xc139e000},{0xc13a0000},{0xc13a2000},{0xc13a4000},{0xc13a6000},{0xc13a8000},{0xc13aa000},{0xc13ac000},{0xc13ae000},{0xc13b0000},{0xc13b2000},{0xc13b4000},{0xc13b6000},{0xc13b8000},{0xc13ba000},{0xc13bc000},{0xc13be000}, +{0xc13c0000},{0xc13c2000},{0xc13c4000},{0xc13c6000},{0xc13c8000},{0xc13ca000},{0xc13cc000},{0xc13ce000},{0xc13d0000},{0xc13d2000},{0xc13d4000},{0xc13d6000},{0xc13d8000},{0xc13da000},{0xc13dc000},{0xc13de000},{0xc13e0000},{0xc13e2000},{0xc13e4000},{0xc13e6000},{0xc13e8000},{0xc13ea000},{0xc13ec000},{0xc13ee000},{0xc13f0000},{0xc13f2000},{0xc13f4000},{0xc13f6000},{0xc13f8000},{0xc13fa000},{0xc13fc000},{0xc13fe000}, +{0xc1400000},{0xc1402000},{0xc1404000},{0xc1406000},{0xc1408000},{0xc140a000},{0xc140c000},{0xc140e000},{0xc1410000},{0xc1412000},{0xc1414000},{0xc1416000},{0xc1418000},{0xc141a000},{0xc141c000},{0xc141e000},{0xc1420000},{0xc1422000},{0xc1424000},{0xc1426000},{0xc1428000},{0xc142a000},{0xc142c000},{0xc142e000},{0xc1430000},{0xc1432000},{0xc1434000},{0xc1436000},{0xc1438000},{0xc143a000},{0xc143c000},{0xc143e000}, +{0xc1440000},{0xc1442000},{0xc1444000},{0xc1446000},{0xc1448000},{0xc144a000},{0xc144c000},{0xc144e000},{0xc1450000},{0xc1452000},{0xc1454000},{0xc1456000},{0xc1458000},{0xc145a000},{0xc145c000},{0xc145e000},{0xc1460000},{0xc1462000},{0xc1464000},{0xc1466000},{0xc1468000},{0xc146a000},{0xc146c000},{0xc146e000},{0xc1470000},{0xc1472000},{0xc1474000},{0xc1476000},{0xc1478000},{0xc147a000},{0xc147c000},{0xc147e000}, +{0xc1480000},{0xc1482000},{0xc1484000},{0xc1486000},{0xc1488000},{0xc148a000},{0xc148c000},{0xc148e000},{0xc1490000},{0xc1492000},{0xc1494000},{0xc1496000},{0xc1498000},{0xc149a000},{0xc149c000},{0xc149e000},{0xc14a0000},{0xc14a2000},{0xc14a4000},{0xc14a6000},{0xc14a8000},{0xc14aa000},{0xc14ac000},{0xc14ae000},{0xc14b0000},{0xc14b2000},{0xc14b4000},{0xc14b6000},{0xc14b8000},{0xc14ba000},{0xc14bc000},{0xc14be000}, +{0xc14c0000},{0xc14c2000},{0xc14c4000},{0xc14c6000},{0xc14c8000},{0xc14ca000},{0xc14cc000},{0xc14ce000},{0xc14d0000},{0xc14d2000},{0xc14d4000},{0xc14d6000},{0xc14d8000},{0xc14da000},{0xc14dc000},{0xc14de000},{0xc14e0000},{0xc14e2000},{0xc14e4000},{0xc14e6000},{0xc14e8000},{0xc14ea000},{0xc14ec000},{0xc14ee000},{0xc14f0000},{0xc14f2000},{0xc14f4000},{0xc14f6000},{0xc14f8000},{0xc14fa000},{0xc14fc000},{0xc14fe000}, +{0xc1500000},{0xc1502000},{0xc1504000},{0xc1506000},{0xc1508000},{0xc150a000},{0xc150c000},{0xc150e000},{0xc1510000},{0xc1512000},{0xc1514000},{0xc1516000},{0xc1518000},{0xc151a000},{0xc151c000},{0xc151e000},{0xc1520000},{0xc1522000},{0xc1524000},{0xc1526000},{0xc1528000},{0xc152a000},{0xc152c000},{0xc152e000},{0xc1530000},{0xc1532000},{0xc1534000},{0xc1536000},{0xc1538000},{0xc153a000},{0xc153c000},{0xc153e000}, +{0xc1540000},{0xc1542000},{0xc1544000},{0xc1546000},{0xc1548000},{0xc154a000},{0xc154c000},{0xc154e000},{0xc1550000},{0xc1552000},{0xc1554000},{0xc1556000},{0xc1558000},{0xc155a000},{0xc155c000},{0xc155e000},{0xc1560000},{0xc1562000},{0xc1564000},{0xc1566000},{0xc1568000},{0xc156a000},{0xc156c000},{0xc156e000},{0xc1570000},{0xc1572000},{0xc1574000},{0xc1576000},{0xc1578000},{0xc157a000},{0xc157c000},{0xc157e000}, +{0xc1580000},{0xc1582000},{0xc1584000},{0xc1586000},{0xc1588000},{0xc158a000},{0xc158c000},{0xc158e000},{0xc1590000},{0xc1592000},{0xc1594000},{0xc1596000},{0xc1598000},{0xc159a000},{0xc159c000},{0xc159e000},{0xc15a0000},{0xc15a2000},{0xc15a4000},{0xc15a6000},{0xc15a8000},{0xc15aa000},{0xc15ac000},{0xc15ae000},{0xc15b0000},{0xc15b2000},{0xc15b4000},{0xc15b6000},{0xc15b8000},{0xc15ba000},{0xc15bc000},{0xc15be000}, +{0xc15c0000},{0xc15c2000},{0xc15c4000},{0xc15c6000},{0xc15c8000},{0xc15ca000},{0xc15cc000},{0xc15ce000},{0xc15d0000},{0xc15d2000},{0xc15d4000},{0xc15d6000},{0xc15d8000},{0xc15da000},{0xc15dc000},{0xc15de000},{0xc15e0000},{0xc15e2000},{0xc15e4000},{0xc15e6000},{0xc15e8000},{0xc15ea000},{0xc15ec000},{0xc15ee000},{0xc15f0000},{0xc15f2000},{0xc15f4000},{0xc15f6000},{0xc15f8000},{0xc15fa000},{0xc15fc000},{0xc15fe000}, +{0xc1600000},{0xc1602000},{0xc1604000},{0xc1606000},{0xc1608000},{0xc160a000},{0xc160c000},{0xc160e000},{0xc1610000},{0xc1612000},{0xc1614000},{0xc1616000},{0xc1618000},{0xc161a000},{0xc161c000},{0xc161e000},{0xc1620000},{0xc1622000},{0xc1624000},{0xc1626000},{0xc1628000},{0xc162a000},{0xc162c000},{0xc162e000},{0xc1630000},{0xc1632000},{0xc1634000},{0xc1636000},{0xc1638000},{0xc163a000},{0xc163c000},{0xc163e000}, +{0xc1640000},{0xc1642000},{0xc1644000},{0xc1646000},{0xc1648000},{0xc164a000},{0xc164c000},{0xc164e000},{0xc1650000},{0xc1652000},{0xc1654000},{0xc1656000},{0xc1658000},{0xc165a000},{0xc165c000},{0xc165e000},{0xc1660000},{0xc1662000},{0xc1664000},{0xc1666000},{0xc1668000},{0xc166a000},{0xc166c000},{0xc166e000},{0xc1670000},{0xc1672000},{0xc1674000},{0xc1676000},{0xc1678000},{0xc167a000},{0xc167c000},{0xc167e000}, +{0xc1680000},{0xc1682000},{0xc1684000},{0xc1686000},{0xc1688000},{0xc168a000},{0xc168c000},{0xc168e000},{0xc1690000},{0xc1692000},{0xc1694000},{0xc1696000},{0xc1698000},{0xc169a000},{0xc169c000},{0xc169e000},{0xc16a0000},{0xc16a2000},{0xc16a4000},{0xc16a6000},{0xc16a8000},{0xc16aa000},{0xc16ac000},{0xc16ae000},{0xc16b0000},{0xc16b2000},{0xc16b4000},{0xc16b6000},{0xc16b8000},{0xc16ba000},{0xc16bc000},{0xc16be000}, +{0xc16c0000},{0xc16c2000},{0xc16c4000},{0xc16c6000},{0xc16c8000},{0xc16ca000},{0xc16cc000},{0xc16ce000},{0xc16d0000},{0xc16d2000},{0xc16d4000},{0xc16d6000},{0xc16d8000},{0xc16da000},{0xc16dc000},{0xc16de000},{0xc16e0000},{0xc16e2000},{0xc16e4000},{0xc16e6000},{0xc16e8000},{0xc16ea000},{0xc16ec000},{0xc16ee000},{0xc16f0000},{0xc16f2000},{0xc16f4000},{0xc16f6000},{0xc16f8000},{0xc16fa000},{0xc16fc000},{0xc16fe000}, +{0xc1700000},{0xc1702000},{0xc1704000},{0xc1706000},{0xc1708000},{0xc170a000},{0xc170c000},{0xc170e000},{0xc1710000},{0xc1712000},{0xc1714000},{0xc1716000},{0xc1718000},{0xc171a000},{0xc171c000},{0xc171e000},{0xc1720000},{0xc1722000},{0xc1724000},{0xc1726000},{0xc1728000},{0xc172a000},{0xc172c000},{0xc172e000},{0xc1730000},{0xc1732000},{0xc1734000},{0xc1736000},{0xc1738000},{0xc173a000},{0xc173c000},{0xc173e000}, +{0xc1740000},{0xc1742000},{0xc1744000},{0xc1746000},{0xc1748000},{0xc174a000},{0xc174c000},{0xc174e000},{0xc1750000},{0xc1752000},{0xc1754000},{0xc1756000},{0xc1758000},{0xc175a000},{0xc175c000},{0xc175e000},{0xc1760000},{0xc1762000},{0xc1764000},{0xc1766000},{0xc1768000},{0xc176a000},{0xc176c000},{0xc176e000},{0xc1770000},{0xc1772000},{0xc1774000},{0xc1776000},{0xc1778000},{0xc177a000},{0xc177c000},{0xc177e000}, +{0xc1780000},{0xc1782000},{0xc1784000},{0xc1786000},{0xc1788000},{0xc178a000},{0xc178c000},{0xc178e000},{0xc1790000},{0xc1792000},{0xc1794000},{0xc1796000},{0xc1798000},{0xc179a000},{0xc179c000},{0xc179e000},{0xc17a0000},{0xc17a2000},{0xc17a4000},{0xc17a6000},{0xc17a8000},{0xc17aa000},{0xc17ac000},{0xc17ae000},{0xc17b0000},{0xc17b2000},{0xc17b4000},{0xc17b6000},{0xc17b8000},{0xc17ba000},{0xc17bc000},{0xc17be000}, +{0xc17c0000},{0xc17c2000},{0xc17c4000},{0xc17c6000},{0xc17c8000},{0xc17ca000},{0xc17cc000},{0xc17ce000},{0xc17d0000},{0xc17d2000},{0xc17d4000},{0xc17d6000},{0xc17d8000},{0xc17da000},{0xc17dc000},{0xc17de000},{0xc17e0000},{0xc17e2000},{0xc17e4000},{0xc17e6000},{0xc17e8000},{0xc17ea000},{0xc17ec000},{0xc17ee000},{0xc17f0000},{0xc17f2000},{0xc17f4000},{0xc17f6000},{0xc17f8000},{0xc17fa000},{0xc17fc000},{0xc17fe000}, +{0xc1800000},{0xc1802000},{0xc1804000},{0xc1806000},{0xc1808000},{0xc180a000},{0xc180c000},{0xc180e000},{0xc1810000},{0xc1812000},{0xc1814000},{0xc1816000},{0xc1818000},{0xc181a000},{0xc181c000},{0xc181e000},{0xc1820000},{0xc1822000},{0xc1824000},{0xc1826000},{0xc1828000},{0xc182a000},{0xc182c000},{0xc182e000},{0xc1830000},{0xc1832000},{0xc1834000},{0xc1836000},{0xc1838000},{0xc183a000},{0xc183c000},{0xc183e000}, +{0xc1840000},{0xc1842000},{0xc1844000},{0xc1846000},{0xc1848000},{0xc184a000},{0xc184c000},{0xc184e000},{0xc1850000},{0xc1852000},{0xc1854000},{0xc1856000},{0xc1858000},{0xc185a000},{0xc185c000},{0xc185e000},{0xc1860000},{0xc1862000},{0xc1864000},{0xc1866000},{0xc1868000},{0xc186a000},{0xc186c000},{0xc186e000},{0xc1870000},{0xc1872000},{0xc1874000},{0xc1876000},{0xc1878000},{0xc187a000},{0xc187c000},{0xc187e000}, +{0xc1880000},{0xc1882000},{0xc1884000},{0xc1886000},{0xc1888000},{0xc188a000},{0xc188c000},{0xc188e000},{0xc1890000},{0xc1892000},{0xc1894000},{0xc1896000},{0xc1898000},{0xc189a000},{0xc189c000},{0xc189e000},{0xc18a0000},{0xc18a2000},{0xc18a4000},{0xc18a6000},{0xc18a8000},{0xc18aa000},{0xc18ac000},{0xc18ae000},{0xc18b0000},{0xc18b2000},{0xc18b4000},{0xc18b6000},{0xc18b8000},{0xc18ba000},{0xc18bc000},{0xc18be000}, +{0xc18c0000},{0xc18c2000},{0xc18c4000},{0xc18c6000},{0xc18c8000},{0xc18ca000},{0xc18cc000},{0xc18ce000},{0xc18d0000},{0xc18d2000},{0xc18d4000},{0xc18d6000},{0xc18d8000},{0xc18da000},{0xc18dc000},{0xc18de000},{0xc18e0000},{0xc18e2000},{0xc18e4000},{0xc18e6000},{0xc18e8000},{0xc18ea000},{0xc18ec000},{0xc18ee000},{0xc18f0000},{0xc18f2000},{0xc18f4000},{0xc18f6000},{0xc18f8000},{0xc18fa000},{0xc18fc000},{0xc18fe000}, +{0xc1900000},{0xc1902000},{0xc1904000},{0xc1906000},{0xc1908000},{0xc190a000},{0xc190c000},{0xc190e000},{0xc1910000},{0xc1912000},{0xc1914000},{0xc1916000},{0xc1918000},{0xc191a000},{0xc191c000},{0xc191e000},{0xc1920000},{0xc1922000},{0xc1924000},{0xc1926000},{0xc1928000},{0xc192a000},{0xc192c000},{0xc192e000},{0xc1930000},{0xc1932000},{0xc1934000},{0xc1936000},{0xc1938000},{0xc193a000},{0xc193c000},{0xc193e000}, +{0xc1940000},{0xc1942000},{0xc1944000},{0xc1946000},{0xc1948000},{0xc194a000},{0xc194c000},{0xc194e000},{0xc1950000},{0xc1952000},{0xc1954000},{0xc1956000},{0xc1958000},{0xc195a000},{0xc195c000},{0xc195e000},{0xc1960000},{0xc1962000},{0xc1964000},{0xc1966000},{0xc1968000},{0xc196a000},{0xc196c000},{0xc196e000},{0xc1970000},{0xc1972000},{0xc1974000},{0xc1976000},{0xc1978000},{0xc197a000},{0xc197c000},{0xc197e000}, +{0xc1980000},{0xc1982000},{0xc1984000},{0xc1986000},{0xc1988000},{0xc198a000},{0xc198c000},{0xc198e000},{0xc1990000},{0xc1992000},{0xc1994000},{0xc1996000},{0xc1998000},{0xc199a000},{0xc199c000},{0xc199e000},{0xc19a0000},{0xc19a2000},{0xc19a4000},{0xc19a6000},{0xc19a8000},{0xc19aa000},{0xc19ac000},{0xc19ae000},{0xc19b0000},{0xc19b2000},{0xc19b4000},{0xc19b6000},{0xc19b8000},{0xc19ba000},{0xc19bc000},{0xc19be000}, +{0xc19c0000},{0xc19c2000},{0xc19c4000},{0xc19c6000},{0xc19c8000},{0xc19ca000},{0xc19cc000},{0xc19ce000},{0xc19d0000},{0xc19d2000},{0xc19d4000},{0xc19d6000},{0xc19d8000},{0xc19da000},{0xc19dc000},{0xc19de000},{0xc19e0000},{0xc19e2000},{0xc19e4000},{0xc19e6000},{0xc19e8000},{0xc19ea000},{0xc19ec000},{0xc19ee000},{0xc19f0000},{0xc19f2000},{0xc19f4000},{0xc19f6000},{0xc19f8000},{0xc19fa000},{0xc19fc000},{0xc19fe000}, +{0xc1a00000},{0xc1a02000},{0xc1a04000},{0xc1a06000},{0xc1a08000},{0xc1a0a000},{0xc1a0c000},{0xc1a0e000},{0xc1a10000},{0xc1a12000},{0xc1a14000},{0xc1a16000},{0xc1a18000},{0xc1a1a000},{0xc1a1c000},{0xc1a1e000},{0xc1a20000},{0xc1a22000},{0xc1a24000},{0xc1a26000},{0xc1a28000},{0xc1a2a000},{0xc1a2c000},{0xc1a2e000},{0xc1a30000},{0xc1a32000},{0xc1a34000},{0xc1a36000},{0xc1a38000},{0xc1a3a000},{0xc1a3c000},{0xc1a3e000}, +{0xc1a40000},{0xc1a42000},{0xc1a44000},{0xc1a46000},{0xc1a48000},{0xc1a4a000},{0xc1a4c000},{0xc1a4e000},{0xc1a50000},{0xc1a52000},{0xc1a54000},{0xc1a56000},{0xc1a58000},{0xc1a5a000},{0xc1a5c000},{0xc1a5e000},{0xc1a60000},{0xc1a62000},{0xc1a64000},{0xc1a66000},{0xc1a68000},{0xc1a6a000},{0xc1a6c000},{0xc1a6e000},{0xc1a70000},{0xc1a72000},{0xc1a74000},{0xc1a76000},{0xc1a78000},{0xc1a7a000},{0xc1a7c000},{0xc1a7e000}, +{0xc1a80000},{0xc1a82000},{0xc1a84000},{0xc1a86000},{0xc1a88000},{0xc1a8a000},{0xc1a8c000},{0xc1a8e000},{0xc1a90000},{0xc1a92000},{0xc1a94000},{0xc1a96000},{0xc1a98000},{0xc1a9a000},{0xc1a9c000},{0xc1a9e000},{0xc1aa0000},{0xc1aa2000},{0xc1aa4000},{0xc1aa6000},{0xc1aa8000},{0xc1aaa000},{0xc1aac000},{0xc1aae000},{0xc1ab0000},{0xc1ab2000},{0xc1ab4000},{0xc1ab6000},{0xc1ab8000},{0xc1aba000},{0xc1abc000},{0xc1abe000}, +{0xc1ac0000},{0xc1ac2000},{0xc1ac4000},{0xc1ac6000},{0xc1ac8000},{0xc1aca000},{0xc1acc000},{0xc1ace000},{0xc1ad0000},{0xc1ad2000},{0xc1ad4000},{0xc1ad6000},{0xc1ad8000},{0xc1ada000},{0xc1adc000},{0xc1ade000},{0xc1ae0000},{0xc1ae2000},{0xc1ae4000},{0xc1ae6000},{0xc1ae8000},{0xc1aea000},{0xc1aec000},{0xc1aee000},{0xc1af0000},{0xc1af2000},{0xc1af4000},{0xc1af6000},{0xc1af8000},{0xc1afa000},{0xc1afc000},{0xc1afe000}, +{0xc1b00000},{0xc1b02000},{0xc1b04000},{0xc1b06000},{0xc1b08000},{0xc1b0a000},{0xc1b0c000},{0xc1b0e000},{0xc1b10000},{0xc1b12000},{0xc1b14000},{0xc1b16000},{0xc1b18000},{0xc1b1a000},{0xc1b1c000},{0xc1b1e000},{0xc1b20000},{0xc1b22000},{0xc1b24000},{0xc1b26000},{0xc1b28000},{0xc1b2a000},{0xc1b2c000},{0xc1b2e000},{0xc1b30000},{0xc1b32000},{0xc1b34000},{0xc1b36000},{0xc1b38000},{0xc1b3a000},{0xc1b3c000},{0xc1b3e000}, +{0xc1b40000},{0xc1b42000},{0xc1b44000},{0xc1b46000},{0xc1b48000},{0xc1b4a000},{0xc1b4c000},{0xc1b4e000},{0xc1b50000},{0xc1b52000},{0xc1b54000},{0xc1b56000},{0xc1b58000},{0xc1b5a000},{0xc1b5c000},{0xc1b5e000},{0xc1b60000},{0xc1b62000},{0xc1b64000},{0xc1b66000},{0xc1b68000},{0xc1b6a000},{0xc1b6c000},{0xc1b6e000},{0xc1b70000},{0xc1b72000},{0xc1b74000},{0xc1b76000},{0xc1b78000},{0xc1b7a000},{0xc1b7c000},{0xc1b7e000}, +{0xc1b80000},{0xc1b82000},{0xc1b84000},{0xc1b86000},{0xc1b88000},{0xc1b8a000},{0xc1b8c000},{0xc1b8e000},{0xc1b90000},{0xc1b92000},{0xc1b94000},{0xc1b96000},{0xc1b98000},{0xc1b9a000},{0xc1b9c000},{0xc1b9e000},{0xc1ba0000},{0xc1ba2000},{0xc1ba4000},{0xc1ba6000},{0xc1ba8000},{0xc1baa000},{0xc1bac000},{0xc1bae000},{0xc1bb0000},{0xc1bb2000},{0xc1bb4000},{0xc1bb6000},{0xc1bb8000},{0xc1bba000},{0xc1bbc000},{0xc1bbe000}, +{0xc1bc0000},{0xc1bc2000},{0xc1bc4000},{0xc1bc6000},{0xc1bc8000},{0xc1bca000},{0xc1bcc000},{0xc1bce000},{0xc1bd0000},{0xc1bd2000},{0xc1bd4000},{0xc1bd6000},{0xc1bd8000},{0xc1bda000},{0xc1bdc000},{0xc1bde000},{0xc1be0000},{0xc1be2000},{0xc1be4000},{0xc1be6000},{0xc1be8000},{0xc1bea000},{0xc1bec000},{0xc1bee000},{0xc1bf0000},{0xc1bf2000},{0xc1bf4000},{0xc1bf6000},{0xc1bf8000},{0xc1bfa000},{0xc1bfc000},{0xc1bfe000}, +{0xc1c00000},{0xc1c02000},{0xc1c04000},{0xc1c06000},{0xc1c08000},{0xc1c0a000},{0xc1c0c000},{0xc1c0e000},{0xc1c10000},{0xc1c12000},{0xc1c14000},{0xc1c16000},{0xc1c18000},{0xc1c1a000},{0xc1c1c000},{0xc1c1e000},{0xc1c20000},{0xc1c22000},{0xc1c24000},{0xc1c26000},{0xc1c28000},{0xc1c2a000},{0xc1c2c000},{0xc1c2e000},{0xc1c30000},{0xc1c32000},{0xc1c34000},{0xc1c36000},{0xc1c38000},{0xc1c3a000},{0xc1c3c000},{0xc1c3e000}, +{0xc1c40000},{0xc1c42000},{0xc1c44000},{0xc1c46000},{0xc1c48000},{0xc1c4a000},{0xc1c4c000},{0xc1c4e000},{0xc1c50000},{0xc1c52000},{0xc1c54000},{0xc1c56000},{0xc1c58000},{0xc1c5a000},{0xc1c5c000},{0xc1c5e000},{0xc1c60000},{0xc1c62000},{0xc1c64000},{0xc1c66000},{0xc1c68000},{0xc1c6a000},{0xc1c6c000},{0xc1c6e000},{0xc1c70000},{0xc1c72000},{0xc1c74000},{0xc1c76000},{0xc1c78000},{0xc1c7a000},{0xc1c7c000},{0xc1c7e000}, +{0xc1c80000},{0xc1c82000},{0xc1c84000},{0xc1c86000},{0xc1c88000},{0xc1c8a000},{0xc1c8c000},{0xc1c8e000},{0xc1c90000},{0xc1c92000},{0xc1c94000},{0xc1c96000},{0xc1c98000},{0xc1c9a000},{0xc1c9c000},{0xc1c9e000},{0xc1ca0000},{0xc1ca2000},{0xc1ca4000},{0xc1ca6000},{0xc1ca8000},{0xc1caa000},{0xc1cac000},{0xc1cae000},{0xc1cb0000},{0xc1cb2000},{0xc1cb4000},{0xc1cb6000},{0xc1cb8000},{0xc1cba000},{0xc1cbc000},{0xc1cbe000}, +{0xc1cc0000},{0xc1cc2000},{0xc1cc4000},{0xc1cc6000},{0xc1cc8000},{0xc1cca000},{0xc1ccc000},{0xc1cce000},{0xc1cd0000},{0xc1cd2000},{0xc1cd4000},{0xc1cd6000},{0xc1cd8000},{0xc1cda000},{0xc1cdc000},{0xc1cde000},{0xc1ce0000},{0xc1ce2000},{0xc1ce4000},{0xc1ce6000},{0xc1ce8000},{0xc1cea000},{0xc1cec000},{0xc1cee000},{0xc1cf0000},{0xc1cf2000},{0xc1cf4000},{0xc1cf6000},{0xc1cf8000},{0xc1cfa000},{0xc1cfc000},{0xc1cfe000}, +{0xc1d00000},{0xc1d02000},{0xc1d04000},{0xc1d06000},{0xc1d08000},{0xc1d0a000},{0xc1d0c000},{0xc1d0e000},{0xc1d10000},{0xc1d12000},{0xc1d14000},{0xc1d16000},{0xc1d18000},{0xc1d1a000},{0xc1d1c000},{0xc1d1e000},{0xc1d20000},{0xc1d22000},{0xc1d24000},{0xc1d26000},{0xc1d28000},{0xc1d2a000},{0xc1d2c000},{0xc1d2e000},{0xc1d30000},{0xc1d32000},{0xc1d34000},{0xc1d36000},{0xc1d38000},{0xc1d3a000},{0xc1d3c000},{0xc1d3e000}, +{0xc1d40000},{0xc1d42000},{0xc1d44000},{0xc1d46000},{0xc1d48000},{0xc1d4a000},{0xc1d4c000},{0xc1d4e000},{0xc1d50000},{0xc1d52000},{0xc1d54000},{0xc1d56000},{0xc1d58000},{0xc1d5a000},{0xc1d5c000},{0xc1d5e000},{0xc1d60000},{0xc1d62000},{0xc1d64000},{0xc1d66000},{0xc1d68000},{0xc1d6a000},{0xc1d6c000},{0xc1d6e000},{0xc1d70000},{0xc1d72000},{0xc1d74000},{0xc1d76000},{0xc1d78000},{0xc1d7a000},{0xc1d7c000},{0xc1d7e000}, +{0xc1d80000},{0xc1d82000},{0xc1d84000},{0xc1d86000},{0xc1d88000},{0xc1d8a000},{0xc1d8c000},{0xc1d8e000},{0xc1d90000},{0xc1d92000},{0xc1d94000},{0xc1d96000},{0xc1d98000},{0xc1d9a000},{0xc1d9c000},{0xc1d9e000},{0xc1da0000},{0xc1da2000},{0xc1da4000},{0xc1da6000},{0xc1da8000},{0xc1daa000},{0xc1dac000},{0xc1dae000},{0xc1db0000},{0xc1db2000},{0xc1db4000},{0xc1db6000},{0xc1db8000},{0xc1dba000},{0xc1dbc000},{0xc1dbe000}, +{0xc1dc0000},{0xc1dc2000},{0xc1dc4000},{0xc1dc6000},{0xc1dc8000},{0xc1dca000},{0xc1dcc000},{0xc1dce000},{0xc1dd0000},{0xc1dd2000},{0xc1dd4000},{0xc1dd6000},{0xc1dd8000},{0xc1dda000},{0xc1ddc000},{0xc1dde000},{0xc1de0000},{0xc1de2000},{0xc1de4000},{0xc1de6000},{0xc1de8000},{0xc1dea000},{0xc1dec000},{0xc1dee000},{0xc1df0000},{0xc1df2000},{0xc1df4000},{0xc1df6000},{0xc1df8000},{0xc1dfa000},{0xc1dfc000},{0xc1dfe000}, +{0xc1e00000},{0xc1e02000},{0xc1e04000},{0xc1e06000},{0xc1e08000},{0xc1e0a000},{0xc1e0c000},{0xc1e0e000},{0xc1e10000},{0xc1e12000},{0xc1e14000},{0xc1e16000},{0xc1e18000},{0xc1e1a000},{0xc1e1c000},{0xc1e1e000},{0xc1e20000},{0xc1e22000},{0xc1e24000},{0xc1e26000},{0xc1e28000},{0xc1e2a000},{0xc1e2c000},{0xc1e2e000},{0xc1e30000},{0xc1e32000},{0xc1e34000},{0xc1e36000},{0xc1e38000},{0xc1e3a000},{0xc1e3c000},{0xc1e3e000}, +{0xc1e40000},{0xc1e42000},{0xc1e44000},{0xc1e46000},{0xc1e48000},{0xc1e4a000},{0xc1e4c000},{0xc1e4e000},{0xc1e50000},{0xc1e52000},{0xc1e54000},{0xc1e56000},{0xc1e58000},{0xc1e5a000},{0xc1e5c000},{0xc1e5e000},{0xc1e60000},{0xc1e62000},{0xc1e64000},{0xc1e66000},{0xc1e68000},{0xc1e6a000},{0xc1e6c000},{0xc1e6e000},{0xc1e70000},{0xc1e72000},{0xc1e74000},{0xc1e76000},{0xc1e78000},{0xc1e7a000},{0xc1e7c000},{0xc1e7e000}, +{0xc1e80000},{0xc1e82000},{0xc1e84000},{0xc1e86000},{0xc1e88000},{0xc1e8a000},{0xc1e8c000},{0xc1e8e000},{0xc1e90000},{0xc1e92000},{0xc1e94000},{0xc1e96000},{0xc1e98000},{0xc1e9a000},{0xc1e9c000},{0xc1e9e000},{0xc1ea0000},{0xc1ea2000},{0xc1ea4000},{0xc1ea6000},{0xc1ea8000},{0xc1eaa000},{0xc1eac000},{0xc1eae000},{0xc1eb0000},{0xc1eb2000},{0xc1eb4000},{0xc1eb6000},{0xc1eb8000},{0xc1eba000},{0xc1ebc000},{0xc1ebe000}, +{0xc1ec0000},{0xc1ec2000},{0xc1ec4000},{0xc1ec6000},{0xc1ec8000},{0xc1eca000},{0xc1ecc000},{0xc1ece000},{0xc1ed0000},{0xc1ed2000},{0xc1ed4000},{0xc1ed6000},{0xc1ed8000},{0xc1eda000},{0xc1edc000},{0xc1ede000},{0xc1ee0000},{0xc1ee2000},{0xc1ee4000},{0xc1ee6000},{0xc1ee8000},{0xc1eea000},{0xc1eec000},{0xc1eee000},{0xc1ef0000},{0xc1ef2000},{0xc1ef4000},{0xc1ef6000},{0xc1ef8000},{0xc1efa000},{0xc1efc000},{0xc1efe000}, +{0xc1f00000},{0xc1f02000},{0xc1f04000},{0xc1f06000},{0xc1f08000},{0xc1f0a000},{0xc1f0c000},{0xc1f0e000},{0xc1f10000},{0xc1f12000},{0xc1f14000},{0xc1f16000},{0xc1f18000},{0xc1f1a000},{0xc1f1c000},{0xc1f1e000},{0xc1f20000},{0xc1f22000},{0xc1f24000},{0xc1f26000},{0xc1f28000},{0xc1f2a000},{0xc1f2c000},{0xc1f2e000},{0xc1f30000},{0xc1f32000},{0xc1f34000},{0xc1f36000},{0xc1f38000},{0xc1f3a000},{0xc1f3c000},{0xc1f3e000}, +{0xc1f40000},{0xc1f42000},{0xc1f44000},{0xc1f46000},{0xc1f48000},{0xc1f4a000},{0xc1f4c000},{0xc1f4e000},{0xc1f50000},{0xc1f52000},{0xc1f54000},{0xc1f56000},{0xc1f58000},{0xc1f5a000},{0xc1f5c000},{0xc1f5e000},{0xc1f60000},{0xc1f62000},{0xc1f64000},{0xc1f66000},{0xc1f68000},{0xc1f6a000},{0xc1f6c000},{0xc1f6e000},{0xc1f70000},{0xc1f72000},{0xc1f74000},{0xc1f76000},{0xc1f78000},{0xc1f7a000},{0xc1f7c000},{0xc1f7e000}, +{0xc1f80000},{0xc1f82000},{0xc1f84000},{0xc1f86000},{0xc1f88000},{0xc1f8a000},{0xc1f8c000},{0xc1f8e000},{0xc1f90000},{0xc1f92000},{0xc1f94000},{0xc1f96000},{0xc1f98000},{0xc1f9a000},{0xc1f9c000},{0xc1f9e000},{0xc1fa0000},{0xc1fa2000},{0xc1fa4000},{0xc1fa6000},{0xc1fa8000},{0xc1faa000},{0xc1fac000},{0xc1fae000},{0xc1fb0000},{0xc1fb2000},{0xc1fb4000},{0xc1fb6000},{0xc1fb8000},{0xc1fba000},{0xc1fbc000},{0xc1fbe000}, +{0xc1fc0000},{0xc1fc2000},{0xc1fc4000},{0xc1fc6000},{0xc1fc8000},{0xc1fca000},{0xc1fcc000},{0xc1fce000},{0xc1fd0000},{0xc1fd2000},{0xc1fd4000},{0xc1fd6000},{0xc1fd8000},{0xc1fda000},{0xc1fdc000},{0xc1fde000},{0xc1fe0000},{0xc1fe2000},{0xc1fe4000},{0xc1fe6000},{0xc1fe8000},{0xc1fea000},{0xc1fec000},{0xc1fee000},{0xc1ff0000},{0xc1ff2000},{0xc1ff4000},{0xc1ff6000},{0xc1ff8000},{0xc1ffa000},{0xc1ffc000},{0xc1ffe000}, +{0xc2000000},{0xc2002000},{0xc2004000},{0xc2006000},{0xc2008000},{0xc200a000},{0xc200c000},{0xc200e000},{0xc2010000},{0xc2012000},{0xc2014000},{0xc2016000},{0xc2018000},{0xc201a000},{0xc201c000},{0xc201e000},{0xc2020000},{0xc2022000},{0xc2024000},{0xc2026000},{0xc2028000},{0xc202a000},{0xc202c000},{0xc202e000},{0xc2030000},{0xc2032000},{0xc2034000},{0xc2036000},{0xc2038000},{0xc203a000},{0xc203c000},{0xc203e000}, +{0xc2040000},{0xc2042000},{0xc2044000},{0xc2046000},{0xc2048000},{0xc204a000},{0xc204c000},{0xc204e000},{0xc2050000},{0xc2052000},{0xc2054000},{0xc2056000},{0xc2058000},{0xc205a000},{0xc205c000},{0xc205e000},{0xc2060000},{0xc2062000},{0xc2064000},{0xc2066000},{0xc2068000},{0xc206a000},{0xc206c000},{0xc206e000},{0xc2070000},{0xc2072000},{0xc2074000},{0xc2076000},{0xc2078000},{0xc207a000},{0xc207c000},{0xc207e000}, +{0xc2080000},{0xc2082000},{0xc2084000},{0xc2086000},{0xc2088000},{0xc208a000},{0xc208c000},{0xc208e000},{0xc2090000},{0xc2092000},{0xc2094000},{0xc2096000},{0xc2098000},{0xc209a000},{0xc209c000},{0xc209e000},{0xc20a0000},{0xc20a2000},{0xc20a4000},{0xc20a6000},{0xc20a8000},{0xc20aa000},{0xc20ac000},{0xc20ae000},{0xc20b0000},{0xc20b2000},{0xc20b4000},{0xc20b6000},{0xc20b8000},{0xc20ba000},{0xc20bc000},{0xc20be000}, +{0xc20c0000},{0xc20c2000},{0xc20c4000},{0xc20c6000},{0xc20c8000},{0xc20ca000},{0xc20cc000},{0xc20ce000},{0xc20d0000},{0xc20d2000},{0xc20d4000},{0xc20d6000},{0xc20d8000},{0xc20da000},{0xc20dc000},{0xc20de000},{0xc20e0000},{0xc20e2000},{0xc20e4000},{0xc20e6000},{0xc20e8000},{0xc20ea000},{0xc20ec000},{0xc20ee000},{0xc20f0000},{0xc20f2000},{0xc20f4000},{0xc20f6000},{0xc20f8000},{0xc20fa000},{0xc20fc000},{0xc20fe000}, +{0xc2100000},{0xc2102000},{0xc2104000},{0xc2106000},{0xc2108000},{0xc210a000},{0xc210c000},{0xc210e000},{0xc2110000},{0xc2112000},{0xc2114000},{0xc2116000},{0xc2118000},{0xc211a000},{0xc211c000},{0xc211e000},{0xc2120000},{0xc2122000},{0xc2124000},{0xc2126000},{0xc2128000},{0xc212a000},{0xc212c000},{0xc212e000},{0xc2130000},{0xc2132000},{0xc2134000},{0xc2136000},{0xc2138000},{0xc213a000},{0xc213c000},{0xc213e000}, +{0xc2140000},{0xc2142000},{0xc2144000},{0xc2146000},{0xc2148000},{0xc214a000},{0xc214c000},{0xc214e000},{0xc2150000},{0xc2152000},{0xc2154000},{0xc2156000},{0xc2158000},{0xc215a000},{0xc215c000},{0xc215e000},{0xc2160000},{0xc2162000},{0xc2164000},{0xc2166000},{0xc2168000},{0xc216a000},{0xc216c000},{0xc216e000},{0xc2170000},{0xc2172000},{0xc2174000},{0xc2176000},{0xc2178000},{0xc217a000},{0xc217c000},{0xc217e000}, +{0xc2180000},{0xc2182000},{0xc2184000},{0xc2186000},{0xc2188000},{0xc218a000},{0xc218c000},{0xc218e000},{0xc2190000},{0xc2192000},{0xc2194000},{0xc2196000},{0xc2198000},{0xc219a000},{0xc219c000},{0xc219e000},{0xc21a0000},{0xc21a2000},{0xc21a4000},{0xc21a6000},{0xc21a8000},{0xc21aa000},{0xc21ac000},{0xc21ae000},{0xc21b0000},{0xc21b2000},{0xc21b4000},{0xc21b6000},{0xc21b8000},{0xc21ba000},{0xc21bc000},{0xc21be000}, +{0xc21c0000},{0xc21c2000},{0xc21c4000},{0xc21c6000},{0xc21c8000},{0xc21ca000},{0xc21cc000},{0xc21ce000},{0xc21d0000},{0xc21d2000},{0xc21d4000},{0xc21d6000},{0xc21d8000},{0xc21da000},{0xc21dc000},{0xc21de000},{0xc21e0000},{0xc21e2000},{0xc21e4000},{0xc21e6000},{0xc21e8000},{0xc21ea000},{0xc21ec000},{0xc21ee000},{0xc21f0000},{0xc21f2000},{0xc21f4000},{0xc21f6000},{0xc21f8000},{0xc21fa000},{0xc21fc000},{0xc21fe000}, +{0xc2200000},{0xc2202000},{0xc2204000},{0xc2206000},{0xc2208000},{0xc220a000},{0xc220c000},{0xc220e000},{0xc2210000},{0xc2212000},{0xc2214000},{0xc2216000},{0xc2218000},{0xc221a000},{0xc221c000},{0xc221e000},{0xc2220000},{0xc2222000},{0xc2224000},{0xc2226000},{0xc2228000},{0xc222a000},{0xc222c000},{0xc222e000},{0xc2230000},{0xc2232000},{0xc2234000},{0xc2236000},{0xc2238000},{0xc223a000},{0xc223c000},{0xc223e000}, +{0xc2240000},{0xc2242000},{0xc2244000},{0xc2246000},{0xc2248000},{0xc224a000},{0xc224c000},{0xc224e000},{0xc2250000},{0xc2252000},{0xc2254000},{0xc2256000},{0xc2258000},{0xc225a000},{0xc225c000},{0xc225e000},{0xc2260000},{0xc2262000},{0xc2264000},{0xc2266000},{0xc2268000},{0xc226a000},{0xc226c000},{0xc226e000},{0xc2270000},{0xc2272000},{0xc2274000},{0xc2276000},{0xc2278000},{0xc227a000},{0xc227c000},{0xc227e000}, +{0xc2280000},{0xc2282000},{0xc2284000},{0xc2286000},{0xc2288000},{0xc228a000},{0xc228c000},{0xc228e000},{0xc2290000},{0xc2292000},{0xc2294000},{0xc2296000},{0xc2298000},{0xc229a000},{0xc229c000},{0xc229e000},{0xc22a0000},{0xc22a2000},{0xc22a4000},{0xc22a6000},{0xc22a8000},{0xc22aa000},{0xc22ac000},{0xc22ae000},{0xc22b0000},{0xc22b2000},{0xc22b4000},{0xc22b6000},{0xc22b8000},{0xc22ba000},{0xc22bc000},{0xc22be000}, +{0xc22c0000},{0xc22c2000},{0xc22c4000},{0xc22c6000},{0xc22c8000},{0xc22ca000},{0xc22cc000},{0xc22ce000},{0xc22d0000},{0xc22d2000},{0xc22d4000},{0xc22d6000},{0xc22d8000},{0xc22da000},{0xc22dc000},{0xc22de000},{0xc22e0000},{0xc22e2000},{0xc22e4000},{0xc22e6000},{0xc22e8000},{0xc22ea000},{0xc22ec000},{0xc22ee000},{0xc22f0000},{0xc22f2000},{0xc22f4000},{0xc22f6000},{0xc22f8000},{0xc22fa000},{0xc22fc000},{0xc22fe000}, +{0xc2300000},{0xc2302000},{0xc2304000},{0xc2306000},{0xc2308000},{0xc230a000},{0xc230c000},{0xc230e000},{0xc2310000},{0xc2312000},{0xc2314000},{0xc2316000},{0xc2318000},{0xc231a000},{0xc231c000},{0xc231e000},{0xc2320000},{0xc2322000},{0xc2324000},{0xc2326000},{0xc2328000},{0xc232a000},{0xc232c000},{0xc232e000},{0xc2330000},{0xc2332000},{0xc2334000},{0xc2336000},{0xc2338000},{0xc233a000},{0xc233c000},{0xc233e000}, +{0xc2340000},{0xc2342000},{0xc2344000},{0xc2346000},{0xc2348000},{0xc234a000},{0xc234c000},{0xc234e000},{0xc2350000},{0xc2352000},{0xc2354000},{0xc2356000},{0xc2358000},{0xc235a000},{0xc235c000},{0xc235e000},{0xc2360000},{0xc2362000},{0xc2364000},{0xc2366000},{0xc2368000},{0xc236a000},{0xc236c000},{0xc236e000},{0xc2370000},{0xc2372000},{0xc2374000},{0xc2376000},{0xc2378000},{0xc237a000},{0xc237c000},{0xc237e000}, +{0xc2380000},{0xc2382000},{0xc2384000},{0xc2386000},{0xc2388000},{0xc238a000},{0xc238c000},{0xc238e000},{0xc2390000},{0xc2392000},{0xc2394000},{0xc2396000},{0xc2398000},{0xc239a000},{0xc239c000},{0xc239e000},{0xc23a0000},{0xc23a2000},{0xc23a4000},{0xc23a6000},{0xc23a8000},{0xc23aa000},{0xc23ac000},{0xc23ae000},{0xc23b0000},{0xc23b2000},{0xc23b4000},{0xc23b6000},{0xc23b8000},{0xc23ba000},{0xc23bc000},{0xc23be000}, +{0xc23c0000},{0xc23c2000},{0xc23c4000},{0xc23c6000},{0xc23c8000},{0xc23ca000},{0xc23cc000},{0xc23ce000},{0xc23d0000},{0xc23d2000},{0xc23d4000},{0xc23d6000},{0xc23d8000},{0xc23da000},{0xc23dc000},{0xc23de000},{0xc23e0000},{0xc23e2000},{0xc23e4000},{0xc23e6000},{0xc23e8000},{0xc23ea000},{0xc23ec000},{0xc23ee000},{0xc23f0000},{0xc23f2000},{0xc23f4000},{0xc23f6000},{0xc23f8000},{0xc23fa000},{0xc23fc000},{0xc23fe000}, +{0xc2400000},{0xc2402000},{0xc2404000},{0xc2406000},{0xc2408000},{0xc240a000},{0xc240c000},{0xc240e000},{0xc2410000},{0xc2412000},{0xc2414000},{0xc2416000},{0xc2418000},{0xc241a000},{0xc241c000},{0xc241e000},{0xc2420000},{0xc2422000},{0xc2424000},{0xc2426000},{0xc2428000},{0xc242a000},{0xc242c000},{0xc242e000},{0xc2430000},{0xc2432000},{0xc2434000},{0xc2436000},{0xc2438000},{0xc243a000},{0xc243c000},{0xc243e000}, +{0xc2440000},{0xc2442000},{0xc2444000},{0xc2446000},{0xc2448000},{0xc244a000},{0xc244c000},{0xc244e000},{0xc2450000},{0xc2452000},{0xc2454000},{0xc2456000},{0xc2458000},{0xc245a000},{0xc245c000},{0xc245e000},{0xc2460000},{0xc2462000},{0xc2464000},{0xc2466000},{0xc2468000},{0xc246a000},{0xc246c000},{0xc246e000},{0xc2470000},{0xc2472000},{0xc2474000},{0xc2476000},{0xc2478000},{0xc247a000},{0xc247c000},{0xc247e000}, +{0xc2480000},{0xc2482000},{0xc2484000},{0xc2486000},{0xc2488000},{0xc248a000},{0xc248c000},{0xc248e000},{0xc2490000},{0xc2492000},{0xc2494000},{0xc2496000},{0xc2498000},{0xc249a000},{0xc249c000},{0xc249e000},{0xc24a0000},{0xc24a2000},{0xc24a4000},{0xc24a6000},{0xc24a8000},{0xc24aa000},{0xc24ac000},{0xc24ae000},{0xc24b0000},{0xc24b2000},{0xc24b4000},{0xc24b6000},{0xc24b8000},{0xc24ba000},{0xc24bc000},{0xc24be000}, +{0xc24c0000},{0xc24c2000},{0xc24c4000},{0xc24c6000},{0xc24c8000},{0xc24ca000},{0xc24cc000},{0xc24ce000},{0xc24d0000},{0xc24d2000},{0xc24d4000},{0xc24d6000},{0xc24d8000},{0xc24da000},{0xc24dc000},{0xc24de000},{0xc24e0000},{0xc24e2000},{0xc24e4000},{0xc24e6000},{0xc24e8000},{0xc24ea000},{0xc24ec000},{0xc24ee000},{0xc24f0000},{0xc24f2000},{0xc24f4000},{0xc24f6000},{0xc24f8000},{0xc24fa000},{0xc24fc000},{0xc24fe000}, +{0xc2500000},{0xc2502000},{0xc2504000},{0xc2506000},{0xc2508000},{0xc250a000},{0xc250c000},{0xc250e000},{0xc2510000},{0xc2512000},{0xc2514000},{0xc2516000},{0xc2518000},{0xc251a000},{0xc251c000},{0xc251e000},{0xc2520000},{0xc2522000},{0xc2524000},{0xc2526000},{0xc2528000},{0xc252a000},{0xc252c000},{0xc252e000},{0xc2530000},{0xc2532000},{0xc2534000},{0xc2536000},{0xc2538000},{0xc253a000},{0xc253c000},{0xc253e000}, +{0xc2540000},{0xc2542000},{0xc2544000},{0xc2546000},{0xc2548000},{0xc254a000},{0xc254c000},{0xc254e000},{0xc2550000},{0xc2552000},{0xc2554000},{0xc2556000},{0xc2558000},{0xc255a000},{0xc255c000},{0xc255e000},{0xc2560000},{0xc2562000},{0xc2564000},{0xc2566000},{0xc2568000},{0xc256a000},{0xc256c000},{0xc256e000},{0xc2570000},{0xc2572000},{0xc2574000},{0xc2576000},{0xc2578000},{0xc257a000},{0xc257c000},{0xc257e000}, +{0xc2580000},{0xc2582000},{0xc2584000},{0xc2586000},{0xc2588000},{0xc258a000},{0xc258c000},{0xc258e000},{0xc2590000},{0xc2592000},{0xc2594000},{0xc2596000},{0xc2598000},{0xc259a000},{0xc259c000},{0xc259e000},{0xc25a0000},{0xc25a2000},{0xc25a4000},{0xc25a6000},{0xc25a8000},{0xc25aa000},{0xc25ac000},{0xc25ae000},{0xc25b0000},{0xc25b2000},{0xc25b4000},{0xc25b6000},{0xc25b8000},{0xc25ba000},{0xc25bc000},{0xc25be000}, +{0xc25c0000},{0xc25c2000},{0xc25c4000},{0xc25c6000},{0xc25c8000},{0xc25ca000},{0xc25cc000},{0xc25ce000},{0xc25d0000},{0xc25d2000},{0xc25d4000},{0xc25d6000},{0xc25d8000},{0xc25da000},{0xc25dc000},{0xc25de000},{0xc25e0000},{0xc25e2000},{0xc25e4000},{0xc25e6000},{0xc25e8000},{0xc25ea000},{0xc25ec000},{0xc25ee000},{0xc25f0000},{0xc25f2000},{0xc25f4000},{0xc25f6000},{0xc25f8000},{0xc25fa000},{0xc25fc000},{0xc25fe000}, +{0xc2600000},{0xc2602000},{0xc2604000},{0xc2606000},{0xc2608000},{0xc260a000},{0xc260c000},{0xc260e000},{0xc2610000},{0xc2612000},{0xc2614000},{0xc2616000},{0xc2618000},{0xc261a000},{0xc261c000},{0xc261e000},{0xc2620000},{0xc2622000},{0xc2624000},{0xc2626000},{0xc2628000},{0xc262a000},{0xc262c000},{0xc262e000},{0xc2630000},{0xc2632000},{0xc2634000},{0xc2636000},{0xc2638000},{0xc263a000},{0xc263c000},{0xc263e000}, +{0xc2640000},{0xc2642000},{0xc2644000},{0xc2646000},{0xc2648000},{0xc264a000},{0xc264c000},{0xc264e000},{0xc2650000},{0xc2652000},{0xc2654000},{0xc2656000},{0xc2658000},{0xc265a000},{0xc265c000},{0xc265e000},{0xc2660000},{0xc2662000},{0xc2664000},{0xc2666000},{0xc2668000},{0xc266a000},{0xc266c000},{0xc266e000},{0xc2670000},{0xc2672000},{0xc2674000},{0xc2676000},{0xc2678000},{0xc267a000},{0xc267c000},{0xc267e000}, +{0xc2680000},{0xc2682000},{0xc2684000},{0xc2686000},{0xc2688000},{0xc268a000},{0xc268c000},{0xc268e000},{0xc2690000},{0xc2692000},{0xc2694000},{0xc2696000},{0xc2698000},{0xc269a000},{0xc269c000},{0xc269e000},{0xc26a0000},{0xc26a2000},{0xc26a4000},{0xc26a6000},{0xc26a8000},{0xc26aa000},{0xc26ac000},{0xc26ae000},{0xc26b0000},{0xc26b2000},{0xc26b4000},{0xc26b6000},{0xc26b8000},{0xc26ba000},{0xc26bc000},{0xc26be000}, +{0xc26c0000},{0xc26c2000},{0xc26c4000},{0xc26c6000},{0xc26c8000},{0xc26ca000},{0xc26cc000},{0xc26ce000},{0xc26d0000},{0xc26d2000},{0xc26d4000},{0xc26d6000},{0xc26d8000},{0xc26da000},{0xc26dc000},{0xc26de000},{0xc26e0000},{0xc26e2000},{0xc26e4000},{0xc26e6000},{0xc26e8000},{0xc26ea000},{0xc26ec000},{0xc26ee000},{0xc26f0000},{0xc26f2000},{0xc26f4000},{0xc26f6000},{0xc26f8000},{0xc26fa000},{0xc26fc000},{0xc26fe000}, +{0xc2700000},{0xc2702000},{0xc2704000},{0xc2706000},{0xc2708000},{0xc270a000},{0xc270c000},{0xc270e000},{0xc2710000},{0xc2712000},{0xc2714000},{0xc2716000},{0xc2718000},{0xc271a000},{0xc271c000},{0xc271e000},{0xc2720000},{0xc2722000},{0xc2724000},{0xc2726000},{0xc2728000},{0xc272a000},{0xc272c000},{0xc272e000},{0xc2730000},{0xc2732000},{0xc2734000},{0xc2736000},{0xc2738000},{0xc273a000},{0xc273c000},{0xc273e000}, +{0xc2740000},{0xc2742000},{0xc2744000},{0xc2746000},{0xc2748000},{0xc274a000},{0xc274c000},{0xc274e000},{0xc2750000},{0xc2752000},{0xc2754000},{0xc2756000},{0xc2758000},{0xc275a000},{0xc275c000},{0xc275e000},{0xc2760000},{0xc2762000},{0xc2764000},{0xc2766000},{0xc2768000},{0xc276a000},{0xc276c000},{0xc276e000},{0xc2770000},{0xc2772000},{0xc2774000},{0xc2776000},{0xc2778000},{0xc277a000},{0xc277c000},{0xc277e000}, +{0xc2780000},{0xc2782000},{0xc2784000},{0xc2786000},{0xc2788000},{0xc278a000},{0xc278c000},{0xc278e000},{0xc2790000},{0xc2792000},{0xc2794000},{0xc2796000},{0xc2798000},{0xc279a000},{0xc279c000},{0xc279e000},{0xc27a0000},{0xc27a2000},{0xc27a4000},{0xc27a6000},{0xc27a8000},{0xc27aa000},{0xc27ac000},{0xc27ae000},{0xc27b0000},{0xc27b2000},{0xc27b4000},{0xc27b6000},{0xc27b8000},{0xc27ba000},{0xc27bc000},{0xc27be000}, +{0xc27c0000},{0xc27c2000},{0xc27c4000},{0xc27c6000},{0xc27c8000},{0xc27ca000},{0xc27cc000},{0xc27ce000},{0xc27d0000},{0xc27d2000},{0xc27d4000},{0xc27d6000},{0xc27d8000},{0xc27da000},{0xc27dc000},{0xc27de000},{0xc27e0000},{0xc27e2000},{0xc27e4000},{0xc27e6000},{0xc27e8000},{0xc27ea000},{0xc27ec000},{0xc27ee000},{0xc27f0000},{0xc27f2000},{0xc27f4000},{0xc27f6000},{0xc27f8000},{0xc27fa000},{0xc27fc000},{0xc27fe000}, +{0xc2800000},{0xc2802000},{0xc2804000},{0xc2806000},{0xc2808000},{0xc280a000},{0xc280c000},{0xc280e000},{0xc2810000},{0xc2812000},{0xc2814000},{0xc2816000},{0xc2818000},{0xc281a000},{0xc281c000},{0xc281e000},{0xc2820000},{0xc2822000},{0xc2824000},{0xc2826000},{0xc2828000},{0xc282a000},{0xc282c000},{0xc282e000},{0xc2830000},{0xc2832000},{0xc2834000},{0xc2836000},{0xc2838000},{0xc283a000},{0xc283c000},{0xc283e000}, +{0xc2840000},{0xc2842000},{0xc2844000},{0xc2846000},{0xc2848000},{0xc284a000},{0xc284c000},{0xc284e000},{0xc2850000},{0xc2852000},{0xc2854000},{0xc2856000},{0xc2858000},{0xc285a000},{0xc285c000},{0xc285e000},{0xc2860000},{0xc2862000},{0xc2864000},{0xc2866000},{0xc2868000},{0xc286a000},{0xc286c000},{0xc286e000},{0xc2870000},{0xc2872000},{0xc2874000},{0xc2876000},{0xc2878000},{0xc287a000},{0xc287c000},{0xc287e000}, +{0xc2880000},{0xc2882000},{0xc2884000},{0xc2886000},{0xc2888000},{0xc288a000},{0xc288c000},{0xc288e000},{0xc2890000},{0xc2892000},{0xc2894000},{0xc2896000},{0xc2898000},{0xc289a000},{0xc289c000},{0xc289e000},{0xc28a0000},{0xc28a2000},{0xc28a4000},{0xc28a6000},{0xc28a8000},{0xc28aa000},{0xc28ac000},{0xc28ae000},{0xc28b0000},{0xc28b2000},{0xc28b4000},{0xc28b6000},{0xc28b8000},{0xc28ba000},{0xc28bc000},{0xc28be000}, +{0xc28c0000},{0xc28c2000},{0xc28c4000},{0xc28c6000},{0xc28c8000},{0xc28ca000},{0xc28cc000},{0xc28ce000},{0xc28d0000},{0xc28d2000},{0xc28d4000},{0xc28d6000},{0xc28d8000},{0xc28da000},{0xc28dc000},{0xc28de000},{0xc28e0000},{0xc28e2000},{0xc28e4000},{0xc28e6000},{0xc28e8000},{0xc28ea000},{0xc28ec000},{0xc28ee000},{0xc28f0000},{0xc28f2000},{0xc28f4000},{0xc28f6000},{0xc28f8000},{0xc28fa000},{0xc28fc000},{0xc28fe000}, +{0xc2900000},{0xc2902000},{0xc2904000},{0xc2906000},{0xc2908000},{0xc290a000},{0xc290c000},{0xc290e000},{0xc2910000},{0xc2912000},{0xc2914000},{0xc2916000},{0xc2918000},{0xc291a000},{0xc291c000},{0xc291e000},{0xc2920000},{0xc2922000},{0xc2924000},{0xc2926000},{0xc2928000},{0xc292a000},{0xc292c000},{0xc292e000},{0xc2930000},{0xc2932000},{0xc2934000},{0xc2936000},{0xc2938000},{0xc293a000},{0xc293c000},{0xc293e000}, +{0xc2940000},{0xc2942000},{0xc2944000},{0xc2946000},{0xc2948000},{0xc294a000},{0xc294c000},{0xc294e000},{0xc2950000},{0xc2952000},{0xc2954000},{0xc2956000},{0xc2958000},{0xc295a000},{0xc295c000},{0xc295e000},{0xc2960000},{0xc2962000},{0xc2964000},{0xc2966000},{0xc2968000},{0xc296a000},{0xc296c000},{0xc296e000},{0xc2970000},{0xc2972000},{0xc2974000},{0xc2976000},{0xc2978000},{0xc297a000},{0xc297c000},{0xc297e000}, +{0xc2980000},{0xc2982000},{0xc2984000},{0xc2986000},{0xc2988000},{0xc298a000},{0xc298c000},{0xc298e000},{0xc2990000},{0xc2992000},{0xc2994000},{0xc2996000},{0xc2998000},{0xc299a000},{0xc299c000},{0xc299e000},{0xc29a0000},{0xc29a2000},{0xc29a4000},{0xc29a6000},{0xc29a8000},{0xc29aa000},{0xc29ac000},{0xc29ae000},{0xc29b0000},{0xc29b2000},{0xc29b4000},{0xc29b6000},{0xc29b8000},{0xc29ba000},{0xc29bc000},{0xc29be000}, +{0xc29c0000},{0xc29c2000},{0xc29c4000},{0xc29c6000},{0xc29c8000},{0xc29ca000},{0xc29cc000},{0xc29ce000},{0xc29d0000},{0xc29d2000},{0xc29d4000},{0xc29d6000},{0xc29d8000},{0xc29da000},{0xc29dc000},{0xc29de000},{0xc29e0000},{0xc29e2000},{0xc29e4000},{0xc29e6000},{0xc29e8000},{0xc29ea000},{0xc29ec000},{0xc29ee000},{0xc29f0000},{0xc29f2000},{0xc29f4000},{0xc29f6000},{0xc29f8000},{0xc29fa000},{0xc29fc000},{0xc29fe000}, +{0xc2a00000},{0xc2a02000},{0xc2a04000},{0xc2a06000},{0xc2a08000},{0xc2a0a000},{0xc2a0c000},{0xc2a0e000},{0xc2a10000},{0xc2a12000},{0xc2a14000},{0xc2a16000},{0xc2a18000},{0xc2a1a000},{0xc2a1c000},{0xc2a1e000},{0xc2a20000},{0xc2a22000},{0xc2a24000},{0xc2a26000},{0xc2a28000},{0xc2a2a000},{0xc2a2c000},{0xc2a2e000},{0xc2a30000},{0xc2a32000},{0xc2a34000},{0xc2a36000},{0xc2a38000},{0xc2a3a000},{0xc2a3c000},{0xc2a3e000}, +{0xc2a40000},{0xc2a42000},{0xc2a44000},{0xc2a46000},{0xc2a48000},{0xc2a4a000},{0xc2a4c000},{0xc2a4e000},{0xc2a50000},{0xc2a52000},{0xc2a54000},{0xc2a56000},{0xc2a58000},{0xc2a5a000},{0xc2a5c000},{0xc2a5e000},{0xc2a60000},{0xc2a62000},{0xc2a64000},{0xc2a66000},{0xc2a68000},{0xc2a6a000},{0xc2a6c000},{0xc2a6e000},{0xc2a70000},{0xc2a72000},{0xc2a74000},{0xc2a76000},{0xc2a78000},{0xc2a7a000},{0xc2a7c000},{0xc2a7e000}, +{0xc2a80000},{0xc2a82000},{0xc2a84000},{0xc2a86000},{0xc2a88000},{0xc2a8a000},{0xc2a8c000},{0xc2a8e000},{0xc2a90000},{0xc2a92000},{0xc2a94000},{0xc2a96000},{0xc2a98000},{0xc2a9a000},{0xc2a9c000},{0xc2a9e000},{0xc2aa0000},{0xc2aa2000},{0xc2aa4000},{0xc2aa6000},{0xc2aa8000},{0xc2aaa000},{0xc2aac000},{0xc2aae000},{0xc2ab0000},{0xc2ab2000},{0xc2ab4000},{0xc2ab6000},{0xc2ab8000},{0xc2aba000},{0xc2abc000},{0xc2abe000}, +{0xc2ac0000},{0xc2ac2000},{0xc2ac4000},{0xc2ac6000},{0xc2ac8000},{0xc2aca000},{0xc2acc000},{0xc2ace000},{0xc2ad0000},{0xc2ad2000},{0xc2ad4000},{0xc2ad6000},{0xc2ad8000},{0xc2ada000},{0xc2adc000},{0xc2ade000},{0xc2ae0000},{0xc2ae2000},{0xc2ae4000},{0xc2ae6000},{0xc2ae8000},{0xc2aea000},{0xc2aec000},{0xc2aee000},{0xc2af0000},{0xc2af2000},{0xc2af4000},{0xc2af6000},{0xc2af8000},{0xc2afa000},{0xc2afc000},{0xc2afe000}, +{0xc2b00000},{0xc2b02000},{0xc2b04000},{0xc2b06000},{0xc2b08000},{0xc2b0a000},{0xc2b0c000},{0xc2b0e000},{0xc2b10000},{0xc2b12000},{0xc2b14000},{0xc2b16000},{0xc2b18000},{0xc2b1a000},{0xc2b1c000},{0xc2b1e000},{0xc2b20000},{0xc2b22000},{0xc2b24000},{0xc2b26000},{0xc2b28000},{0xc2b2a000},{0xc2b2c000},{0xc2b2e000},{0xc2b30000},{0xc2b32000},{0xc2b34000},{0xc2b36000},{0xc2b38000},{0xc2b3a000},{0xc2b3c000},{0xc2b3e000}, +{0xc2b40000},{0xc2b42000},{0xc2b44000},{0xc2b46000},{0xc2b48000},{0xc2b4a000},{0xc2b4c000},{0xc2b4e000},{0xc2b50000},{0xc2b52000},{0xc2b54000},{0xc2b56000},{0xc2b58000},{0xc2b5a000},{0xc2b5c000},{0xc2b5e000},{0xc2b60000},{0xc2b62000},{0xc2b64000},{0xc2b66000},{0xc2b68000},{0xc2b6a000},{0xc2b6c000},{0xc2b6e000},{0xc2b70000},{0xc2b72000},{0xc2b74000},{0xc2b76000},{0xc2b78000},{0xc2b7a000},{0xc2b7c000},{0xc2b7e000}, +{0xc2b80000},{0xc2b82000},{0xc2b84000},{0xc2b86000},{0xc2b88000},{0xc2b8a000},{0xc2b8c000},{0xc2b8e000},{0xc2b90000},{0xc2b92000},{0xc2b94000},{0xc2b96000},{0xc2b98000},{0xc2b9a000},{0xc2b9c000},{0xc2b9e000},{0xc2ba0000},{0xc2ba2000},{0xc2ba4000},{0xc2ba6000},{0xc2ba8000},{0xc2baa000},{0xc2bac000},{0xc2bae000},{0xc2bb0000},{0xc2bb2000},{0xc2bb4000},{0xc2bb6000},{0xc2bb8000},{0xc2bba000},{0xc2bbc000},{0xc2bbe000}, +{0xc2bc0000},{0xc2bc2000},{0xc2bc4000},{0xc2bc6000},{0xc2bc8000},{0xc2bca000},{0xc2bcc000},{0xc2bce000},{0xc2bd0000},{0xc2bd2000},{0xc2bd4000},{0xc2bd6000},{0xc2bd8000},{0xc2bda000},{0xc2bdc000},{0xc2bde000},{0xc2be0000},{0xc2be2000},{0xc2be4000},{0xc2be6000},{0xc2be8000},{0xc2bea000},{0xc2bec000},{0xc2bee000},{0xc2bf0000},{0xc2bf2000},{0xc2bf4000},{0xc2bf6000},{0xc2bf8000},{0xc2bfa000},{0xc2bfc000},{0xc2bfe000}, +{0xc2c00000},{0xc2c02000},{0xc2c04000},{0xc2c06000},{0xc2c08000},{0xc2c0a000},{0xc2c0c000},{0xc2c0e000},{0xc2c10000},{0xc2c12000},{0xc2c14000},{0xc2c16000},{0xc2c18000},{0xc2c1a000},{0xc2c1c000},{0xc2c1e000},{0xc2c20000},{0xc2c22000},{0xc2c24000},{0xc2c26000},{0xc2c28000},{0xc2c2a000},{0xc2c2c000},{0xc2c2e000},{0xc2c30000},{0xc2c32000},{0xc2c34000},{0xc2c36000},{0xc2c38000},{0xc2c3a000},{0xc2c3c000},{0xc2c3e000}, +{0xc2c40000},{0xc2c42000},{0xc2c44000},{0xc2c46000},{0xc2c48000},{0xc2c4a000},{0xc2c4c000},{0xc2c4e000},{0xc2c50000},{0xc2c52000},{0xc2c54000},{0xc2c56000},{0xc2c58000},{0xc2c5a000},{0xc2c5c000},{0xc2c5e000},{0xc2c60000},{0xc2c62000},{0xc2c64000},{0xc2c66000},{0xc2c68000},{0xc2c6a000},{0xc2c6c000},{0xc2c6e000},{0xc2c70000},{0xc2c72000},{0xc2c74000},{0xc2c76000},{0xc2c78000},{0xc2c7a000},{0xc2c7c000},{0xc2c7e000}, +{0xc2c80000},{0xc2c82000},{0xc2c84000},{0xc2c86000},{0xc2c88000},{0xc2c8a000},{0xc2c8c000},{0xc2c8e000},{0xc2c90000},{0xc2c92000},{0xc2c94000},{0xc2c96000},{0xc2c98000},{0xc2c9a000},{0xc2c9c000},{0xc2c9e000},{0xc2ca0000},{0xc2ca2000},{0xc2ca4000},{0xc2ca6000},{0xc2ca8000},{0xc2caa000},{0xc2cac000},{0xc2cae000},{0xc2cb0000},{0xc2cb2000},{0xc2cb4000},{0xc2cb6000},{0xc2cb8000},{0xc2cba000},{0xc2cbc000},{0xc2cbe000}, +{0xc2cc0000},{0xc2cc2000},{0xc2cc4000},{0xc2cc6000},{0xc2cc8000},{0xc2cca000},{0xc2ccc000},{0xc2cce000},{0xc2cd0000},{0xc2cd2000},{0xc2cd4000},{0xc2cd6000},{0xc2cd8000},{0xc2cda000},{0xc2cdc000},{0xc2cde000},{0xc2ce0000},{0xc2ce2000},{0xc2ce4000},{0xc2ce6000},{0xc2ce8000},{0xc2cea000},{0xc2cec000},{0xc2cee000},{0xc2cf0000},{0xc2cf2000},{0xc2cf4000},{0xc2cf6000},{0xc2cf8000},{0xc2cfa000},{0xc2cfc000},{0xc2cfe000}, +{0xc2d00000},{0xc2d02000},{0xc2d04000},{0xc2d06000},{0xc2d08000},{0xc2d0a000},{0xc2d0c000},{0xc2d0e000},{0xc2d10000},{0xc2d12000},{0xc2d14000},{0xc2d16000},{0xc2d18000},{0xc2d1a000},{0xc2d1c000},{0xc2d1e000},{0xc2d20000},{0xc2d22000},{0xc2d24000},{0xc2d26000},{0xc2d28000},{0xc2d2a000},{0xc2d2c000},{0xc2d2e000},{0xc2d30000},{0xc2d32000},{0xc2d34000},{0xc2d36000},{0xc2d38000},{0xc2d3a000},{0xc2d3c000},{0xc2d3e000}, +{0xc2d40000},{0xc2d42000},{0xc2d44000},{0xc2d46000},{0xc2d48000},{0xc2d4a000},{0xc2d4c000},{0xc2d4e000},{0xc2d50000},{0xc2d52000},{0xc2d54000},{0xc2d56000},{0xc2d58000},{0xc2d5a000},{0xc2d5c000},{0xc2d5e000},{0xc2d60000},{0xc2d62000},{0xc2d64000},{0xc2d66000},{0xc2d68000},{0xc2d6a000},{0xc2d6c000},{0xc2d6e000},{0xc2d70000},{0xc2d72000},{0xc2d74000},{0xc2d76000},{0xc2d78000},{0xc2d7a000},{0xc2d7c000},{0xc2d7e000}, +{0xc2d80000},{0xc2d82000},{0xc2d84000},{0xc2d86000},{0xc2d88000},{0xc2d8a000},{0xc2d8c000},{0xc2d8e000},{0xc2d90000},{0xc2d92000},{0xc2d94000},{0xc2d96000},{0xc2d98000},{0xc2d9a000},{0xc2d9c000},{0xc2d9e000},{0xc2da0000},{0xc2da2000},{0xc2da4000},{0xc2da6000},{0xc2da8000},{0xc2daa000},{0xc2dac000},{0xc2dae000},{0xc2db0000},{0xc2db2000},{0xc2db4000},{0xc2db6000},{0xc2db8000},{0xc2dba000},{0xc2dbc000},{0xc2dbe000}, +{0xc2dc0000},{0xc2dc2000},{0xc2dc4000},{0xc2dc6000},{0xc2dc8000},{0xc2dca000},{0xc2dcc000},{0xc2dce000},{0xc2dd0000},{0xc2dd2000},{0xc2dd4000},{0xc2dd6000},{0xc2dd8000},{0xc2dda000},{0xc2ddc000},{0xc2dde000},{0xc2de0000},{0xc2de2000},{0xc2de4000},{0xc2de6000},{0xc2de8000},{0xc2dea000},{0xc2dec000},{0xc2dee000},{0xc2df0000},{0xc2df2000},{0xc2df4000},{0xc2df6000},{0xc2df8000},{0xc2dfa000},{0xc2dfc000},{0xc2dfe000}, +{0xc2e00000},{0xc2e02000},{0xc2e04000},{0xc2e06000},{0xc2e08000},{0xc2e0a000},{0xc2e0c000},{0xc2e0e000},{0xc2e10000},{0xc2e12000},{0xc2e14000},{0xc2e16000},{0xc2e18000},{0xc2e1a000},{0xc2e1c000},{0xc2e1e000},{0xc2e20000},{0xc2e22000},{0xc2e24000},{0xc2e26000},{0xc2e28000},{0xc2e2a000},{0xc2e2c000},{0xc2e2e000},{0xc2e30000},{0xc2e32000},{0xc2e34000},{0xc2e36000},{0xc2e38000},{0xc2e3a000},{0xc2e3c000},{0xc2e3e000}, +{0xc2e40000},{0xc2e42000},{0xc2e44000},{0xc2e46000},{0xc2e48000},{0xc2e4a000},{0xc2e4c000},{0xc2e4e000},{0xc2e50000},{0xc2e52000},{0xc2e54000},{0xc2e56000},{0xc2e58000},{0xc2e5a000},{0xc2e5c000},{0xc2e5e000},{0xc2e60000},{0xc2e62000},{0xc2e64000},{0xc2e66000},{0xc2e68000},{0xc2e6a000},{0xc2e6c000},{0xc2e6e000},{0xc2e70000},{0xc2e72000},{0xc2e74000},{0xc2e76000},{0xc2e78000},{0xc2e7a000},{0xc2e7c000},{0xc2e7e000}, +{0xc2e80000},{0xc2e82000},{0xc2e84000},{0xc2e86000},{0xc2e88000},{0xc2e8a000},{0xc2e8c000},{0xc2e8e000},{0xc2e90000},{0xc2e92000},{0xc2e94000},{0xc2e96000},{0xc2e98000},{0xc2e9a000},{0xc2e9c000},{0xc2e9e000},{0xc2ea0000},{0xc2ea2000},{0xc2ea4000},{0xc2ea6000},{0xc2ea8000},{0xc2eaa000},{0xc2eac000},{0xc2eae000},{0xc2eb0000},{0xc2eb2000},{0xc2eb4000},{0xc2eb6000},{0xc2eb8000},{0xc2eba000},{0xc2ebc000},{0xc2ebe000}, +{0xc2ec0000},{0xc2ec2000},{0xc2ec4000},{0xc2ec6000},{0xc2ec8000},{0xc2eca000},{0xc2ecc000},{0xc2ece000},{0xc2ed0000},{0xc2ed2000},{0xc2ed4000},{0xc2ed6000},{0xc2ed8000},{0xc2eda000},{0xc2edc000},{0xc2ede000},{0xc2ee0000},{0xc2ee2000},{0xc2ee4000},{0xc2ee6000},{0xc2ee8000},{0xc2eea000},{0xc2eec000},{0xc2eee000},{0xc2ef0000},{0xc2ef2000},{0xc2ef4000},{0xc2ef6000},{0xc2ef8000},{0xc2efa000},{0xc2efc000},{0xc2efe000}, +{0xc2f00000},{0xc2f02000},{0xc2f04000},{0xc2f06000},{0xc2f08000},{0xc2f0a000},{0xc2f0c000},{0xc2f0e000},{0xc2f10000},{0xc2f12000},{0xc2f14000},{0xc2f16000},{0xc2f18000},{0xc2f1a000},{0xc2f1c000},{0xc2f1e000},{0xc2f20000},{0xc2f22000},{0xc2f24000},{0xc2f26000},{0xc2f28000},{0xc2f2a000},{0xc2f2c000},{0xc2f2e000},{0xc2f30000},{0xc2f32000},{0xc2f34000},{0xc2f36000},{0xc2f38000},{0xc2f3a000},{0xc2f3c000},{0xc2f3e000}, +{0xc2f40000},{0xc2f42000},{0xc2f44000},{0xc2f46000},{0xc2f48000},{0xc2f4a000},{0xc2f4c000},{0xc2f4e000},{0xc2f50000},{0xc2f52000},{0xc2f54000},{0xc2f56000},{0xc2f58000},{0xc2f5a000},{0xc2f5c000},{0xc2f5e000},{0xc2f60000},{0xc2f62000},{0xc2f64000},{0xc2f66000},{0xc2f68000},{0xc2f6a000},{0xc2f6c000},{0xc2f6e000},{0xc2f70000},{0xc2f72000},{0xc2f74000},{0xc2f76000},{0xc2f78000},{0xc2f7a000},{0xc2f7c000},{0xc2f7e000}, +{0xc2f80000},{0xc2f82000},{0xc2f84000},{0xc2f86000},{0xc2f88000},{0xc2f8a000},{0xc2f8c000},{0xc2f8e000},{0xc2f90000},{0xc2f92000},{0xc2f94000},{0xc2f96000},{0xc2f98000},{0xc2f9a000},{0xc2f9c000},{0xc2f9e000},{0xc2fa0000},{0xc2fa2000},{0xc2fa4000},{0xc2fa6000},{0xc2fa8000},{0xc2faa000},{0xc2fac000},{0xc2fae000},{0xc2fb0000},{0xc2fb2000},{0xc2fb4000},{0xc2fb6000},{0xc2fb8000},{0xc2fba000},{0xc2fbc000},{0xc2fbe000}, +{0xc2fc0000},{0xc2fc2000},{0xc2fc4000},{0xc2fc6000},{0xc2fc8000},{0xc2fca000},{0xc2fcc000},{0xc2fce000},{0xc2fd0000},{0xc2fd2000},{0xc2fd4000},{0xc2fd6000},{0xc2fd8000},{0xc2fda000},{0xc2fdc000},{0xc2fde000},{0xc2fe0000},{0xc2fe2000},{0xc2fe4000},{0xc2fe6000},{0xc2fe8000},{0xc2fea000},{0xc2fec000},{0xc2fee000},{0xc2ff0000},{0xc2ff2000},{0xc2ff4000},{0xc2ff6000},{0xc2ff8000},{0xc2ffa000},{0xc2ffc000},{0xc2ffe000}, +{0xc3000000},{0xc3002000},{0xc3004000},{0xc3006000},{0xc3008000},{0xc300a000},{0xc300c000},{0xc300e000},{0xc3010000},{0xc3012000},{0xc3014000},{0xc3016000},{0xc3018000},{0xc301a000},{0xc301c000},{0xc301e000},{0xc3020000},{0xc3022000},{0xc3024000},{0xc3026000},{0xc3028000},{0xc302a000},{0xc302c000},{0xc302e000},{0xc3030000},{0xc3032000},{0xc3034000},{0xc3036000},{0xc3038000},{0xc303a000},{0xc303c000},{0xc303e000}, +{0xc3040000},{0xc3042000},{0xc3044000},{0xc3046000},{0xc3048000},{0xc304a000},{0xc304c000},{0xc304e000},{0xc3050000},{0xc3052000},{0xc3054000},{0xc3056000},{0xc3058000},{0xc305a000},{0xc305c000},{0xc305e000},{0xc3060000},{0xc3062000},{0xc3064000},{0xc3066000},{0xc3068000},{0xc306a000},{0xc306c000},{0xc306e000},{0xc3070000},{0xc3072000},{0xc3074000},{0xc3076000},{0xc3078000},{0xc307a000},{0xc307c000},{0xc307e000}, +{0xc3080000},{0xc3082000},{0xc3084000},{0xc3086000},{0xc3088000},{0xc308a000},{0xc308c000},{0xc308e000},{0xc3090000},{0xc3092000},{0xc3094000},{0xc3096000},{0xc3098000},{0xc309a000},{0xc309c000},{0xc309e000},{0xc30a0000},{0xc30a2000},{0xc30a4000},{0xc30a6000},{0xc30a8000},{0xc30aa000},{0xc30ac000},{0xc30ae000},{0xc30b0000},{0xc30b2000},{0xc30b4000},{0xc30b6000},{0xc30b8000},{0xc30ba000},{0xc30bc000},{0xc30be000}, +{0xc30c0000},{0xc30c2000},{0xc30c4000},{0xc30c6000},{0xc30c8000},{0xc30ca000},{0xc30cc000},{0xc30ce000},{0xc30d0000},{0xc30d2000},{0xc30d4000},{0xc30d6000},{0xc30d8000},{0xc30da000},{0xc30dc000},{0xc30de000},{0xc30e0000},{0xc30e2000},{0xc30e4000},{0xc30e6000},{0xc30e8000},{0xc30ea000},{0xc30ec000},{0xc30ee000},{0xc30f0000},{0xc30f2000},{0xc30f4000},{0xc30f6000},{0xc30f8000},{0xc30fa000},{0xc30fc000},{0xc30fe000}, +{0xc3100000},{0xc3102000},{0xc3104000},{0xc3106000},{0xc3108000},{0xc310a000},{0xc310c000},{0xc310e000},{0xc3110000},{0xc3112000},{0xc3114000},{0xc3116000},{0xc3118000},{0xc311a000},{0xc311c000},{0xc311e000},{0xc3120000},{0xc3122000},{0xc3124000},{0xc3126000},{0xc3128000},{0xc312a000},{0xc312c000},{0xc312e000},{0xc3130000},{0xc3132000},{0xc3134000},{0xc3136000},{0xc3138000},{0xc313a000},{0xc313c000},{0xc313e000}, +{0xc3140000},{0xc3142000},{0xc3144000},{0xc3146000},{0xc3148000},{0xc314a000},{0xc314c000},{0xc314e000},{0xc3150000},{0xc3152000},{0xc3154000},{0xc3156000},{0xc3158000},{0xc315a000},{0xc315c000},{0xc315e000},{0xc3160000},{0xc3162000},{0xc3164000},{0xc3166000},{0xc3168000},{0xc316a000},{0xc316c000},{0xc316e000},{0xc3170000},{0xc3172000},{0xc3174000},{0xc3176000},{0xc3178000},{0xc317a000},{0xc317c000},{0xc317e000}, +{0xc3180000},{0xc3182000},{0xc3184000},{0xc3186000},{0xc3188000},{0xc318a000},{0xc318c000},{0xc318e000},{0xc3190000},{0xc3192000},{0xc3194000},{0xc3196000},{0xc3198000},{0xc319a000},{0xc319c000},{0xc319e000},{0xc31a0000},{0xc31a2000},{0xc31a4000},{0xc31a6000},{0xc31a8000},{0xc31aa000},{0xc31ac000},{0xc31ae000},{0xc31b0000},{0xc31b2000},{0xc31b4000},{0xc31b6000},{0xc31b8000},{0xc31ba000},{0xc31bc000},{0xc31be000}, +{0xc31c0000},{0xc31c2000},{0xc31c4000},{0xc31c6000},{0xc31c8000},{0xc31ca000},{0xc31cc000},{0xc31ce000},{0xc31d0000},{0xc31d2000},{0xc31d4000},{0xc31d6000},{0xc31d8000},{0xc31da000},{0xc31dc000},{0xc31de000},{0xc31e0000},{0xc31e2000},{0xc31e4000},{0xc31e6000},{0xc31e8000},{0xc31ea000},{0xc31ec000},{0xc31ee000},{0xc31f0000},{0xc31f2000},{0xc31f4000},{0xc31f6000},{0xc31f8000},{0xc31fa000},{0xc31fc000},{0xc31fe000}, +{0xc3200000},{0xc3202000},{0xc3204000},{0xc3206000},{0xc3208000},{0xc320a000},{0xc320c000},{0xc320e000},{0xc3210000},{0xc3212000},{0xc3214000},{0xc3216000},{0xc3218000},{0xc321a000},{0xc321c000},{0xc321e000},{0xc3220000},{0xc3222000},{0xc3224000},{0xc3226000},{0xc3228000},{0xc322a000},{0xc322c000},{0xc322e000},{0xc3230000},{0xc3232000},{0xc3234000},{0xc3236000},{0xc3238000},{0xc323a000},{0xc323c000},{0xc323e000}, +{0xc3240000},{0xc3242000},{0xc3244000},{0xc3246000},{0xc3248000},{0xc324a000},{0xc324c000},{0xc324e000},{0xc3250000},{0xc3252000},{0xc3254000},{0xc3256000},{0xc3258000},{0xc325a000},{0xc325c000},{0xc325e000},{0xc3260000},{0xc3262000},{0xc3264000},{0xc3266000},{0xc3268000},{0xc326a000},{0xc326c000},{0xc326e000},{0xc3270000},{0xc3272000},{0xc3274000},{0xc3276000},{0xc3278000},{0xc327a000},{0xc327c000},{0xc327e000}, +{0xc3280000},{0xc3282000},{0xc3284000},{0xc3286000},{0xc3288000},{0xc328a000},{0xc328c000},{0xc328e000},{0xc3290000},{0xc3292000},{0xc3294000},{0xc3296000},{0xc3298000},{0xc329a000},{0xc329c000},{0xc329e000},{0xc32a0000},{0xc32a2000},{0xc32a4000},{0xc32a6000},{0xc32a8000},{0xc32aa000},{0xc32ac000},{0xc32ae000},{0xc32b0000},{0xc32b2000},{0xc32b4000},{0xc32b6000},{0xc32b8000},{0xc32ba000},{0xc32bc000},{0xc32be000}, +{0xc32c0000},{0xc32c2000},{0xc32c4000},{0xc32c6000},{0xc32c8000},{0xc32ca000},{0xc32cc000},{0xc32ce000},{0xc32d0000},{0xc32d2000},{0xc32d4000},{0xc32d6000},{0xc32d8000},{0xc32da000},{0xc32dc000},{0xc32de000},{0xc32e0000},{0xc32e2000},{0xc32e4000},{0xc32e6000},{0xc32e8000},{0xc32ea000},{0xc32ec000},{0xc32ee000},{0xc32f0000},{0xc32f2000},{0xc32f4000},{0xc32f6000},{0xc32f8000},{0xc32fa000},{0xc32fc000},{0xc32fe000}, +{0xc3300000},{0xc3302000},{0xc3304000},{0xc3306000},{0xc3308000},{0xc330a000},{0xc330c000},{0xc330e000},{0xc3310000},{0xc3312000},{0xc3314000},{0xc3316000},{0xc3318000},{0xc331a000},{0xc331c000},{0xc331e000},{0xc3320000},{0xc3322000},{0xc3324000},{0xc3326000},{0xc3328000},{0xc332a000},{0xc332c000},{0xc332e000},{0xc3330000},{0xc3332000},{0xc3334000},{0xc3336000},{0xc3338000},{0xc333a000},{0xc333c000},{0xc333e000}, +{0xc3340000},{0xc3342000},{0xc3344000},{0xc3346000},{0xc3348000},{0xc334a000},{0xc334c000},{0xc334e000},{0xc3350000},{0xc3352000},{0xc3354000},{0xc3356000},{0xc3358000},{0xc335a000},{0xc335c000},{0xc335e000},{0xc3360000},{0xc3362000},{0xc3364000},{0xc3366000},{0xc3368000},{0xc336a000},{0xc336c000},{0xc336e000},{0xc3370000},{0xc3372000},{0xc3374000},{0xc3376000},{0xc3378000},{0xc337a000},{0xc337c000},{0xc337e000}, +{0xc3380000},{0xc3382000},{0xc3384000},{0xc3386000},{0xc3388000},{0xc338a000},{0xc338c000},{0xc338e000},{0xc3390000},{0xc3392000},{0xc3394000},{0xc3396000},{0xc3398000},{0xc339a000},{0xc339c000},{0xc339e000},{0xc33a0000},{0xc33a2000},{0xc33a4000},{0xc33a6000},{0xc33a8000},{0xc33aa000},{0xc33ac000},{0xc33ae000},{0xc33b0000},{0xc33b2000},{0xc33b4000},{0xc33b6000},{0xc33b8000},{0xc33ba000},{0xc33bc000},{0xc33be000}, +{0xc33c0000},{0xc33c2000},{0xc33c4000},{0xc33c6000},{0xc33c8000},{0xc33ca000},{0xc33cc000},{0xc33ce000},{0xc33d0000},{0xc33d2000},{0xc33d4000},{0xc33d6000},{0xc33d8000},{0xc33da000},{0xc33dc000},{0xc33de000},{0xc33e0000},{0xc33e2000},{0xc33e4000},{0xc33e6000},{0xc33e8000},{0xc33ea000},{0xc33ec000},{0xc33ee000},{0xc33f0000},{0xc33f2000},{0xc33f4000},{0xc33f6000},{0xc33f8000},{0xc33fa000},{0xc33fc000},{0xc33fe000}, +{0xc3400000},{0xc3402000},{0xc3404000},{0xc3406000},{0xc3408000},{0xc340a000},{0xc340c000},{0xc340e000},{0xc3410000},{0xc3412000},{0xc3414000},{0xc3416000},{0xc3418000},{0xc341a000},{0xc341c000},{0xc341e000},{0xc3420000},{0xc3422000},{0xc3424000},{0xc3426000},{0xc3428000},{0xc342a000},{0xc342c000},{0xc342e000},{0xc3430000},{0xc3432000},{0xc3434000},{0xc3436000},{0xc3438000},{0xc343a000},{0xc343c000},{0xc343e000}, +{0xc3440000},{0xc3442000},{0xc3444000},{0xc3446000},{0xc3448000},{0xc344a000},{0xc344c000},{0xc344e000},{0xc3450000},{0xc3452000},{0xc3454000},{0xc3456000},{0xc3458000},{0xc345a000},{0xc345c000},{0xc345e000},{0xc3460000},{0xc3462000},{0xc3464000},{0xc3466000},{0xc3468000},{0xc346a000},{0xc346c000},{0xc346e000},{0xc3470000},{0xc3472000},{0xc3474000},{0xc3476000},{0xc3478000},{0xc347a000},{0xc347c000},{0xc347e000}, +{0xc3480000},{0xc3482000},{0xc3484000},{0xc3486000},{0xc3488000},{0xc348a000},{0xc348c000},{0xc348e000},{0xc3490000},{0xc3492000},{0xc3494000},{0xc3496000},{0xc3498000},{0xc349a000},{0xc349c000},{0xc349e000},{0xc34a0000},{0xc34a2000},{0xc34a4000},{0xc34a6000},{0xc34a8000},{0xc34aa000},{0xc34ac000},{0xc34ae000},{0xc34b0000},{0xc34b2000},{0xc34b4000},{0xc34b6000},{0xc34b8000},{0xc34ba000},{0xc34bc000},{0xc34be000}, +{0xc34c0000},{0xc34c2000},{0xc34c4000},{0xc34c6000},{0xc34c8000},{0xc34ca000},{0xc34cc000},{0xc34ce000},{0xc34d0000},{0xc34d2000},{0xc34d4000},{0xc34d6000},{0xc34d8000},{0xc34da000},{0xc34dc000},{0xc34de000},{0xc34e0000},{0xc34e2000},{0xc34e4000},{0xc34e6000},{0xc34e8000},{0xc34ea000},{0xc34ec000},{0xc34ee000},{0xc34f0000},{0xc34f2000},{0xc34f4000},{0xc34f6000},{0xc34f8000},{0xc34fa000},{0xc34fc000},{0xc34fe000}, +{0xc3500000},{0xc3502000},{0xc3504000},{0xc3506000},{0xc3508000},{0xc350a000},{0xc350c000},{0xc350e000},{0xc3510000},{0xc3512000},{0xc3514000},{0xc3516000},{0xc3518000},{0xc351a000},{0xc351c000},{0xc351e000},{0xc3520000},{0xc3522000},{0xc3524000},{0xc3526000},{0xc3528000},{0xc352a000},{0xc352c000},{0xc352e000},{0xc3530000},{0xc3532000},{0xc3534000},{0xc3536000},{0xc3538000},{0xc353a000},{0xc353c000},{0xc353e000}, +{0xc3540000},{0xc3542000},{0xc3544000},{0xc3546000},{0xc3548000},{0xc354a000},{0xc354c000},{0xc354e000},{0xc3550000},{0xc3552000},{0xc3554000},{0xc3556000},{0xc3558000},{0xc355a000},{0xc355c000},{0xc355e000},{0xc3560000},{0xc3562000},{0xc3564000},{0xc3566000},{0xc3568000},{0xc356a000},{0xc356c000},{0xc356e000},{0xc3570000},{0xc3572000},{0xc3574000},{0xc3576000},{0xc3578000},{0xc357a000},{0xc357c000},{0xc357e000}, +{0xc3580000},{0xc3582000},{0xc3584000},{0xc3586000},{0xc3588000},{0xc358a000},{0xc358c000},{0xc358e000},{0xc3590000},{0xc3592000},{0xc3594000},{0xc3596000},{0xc3598000},{0xc359a000},{0xc359c000},{0xc359e000},{0xc35a0000},{0xc35a2000},{0xc35a4000},{0xc35a6000},{0xc35a8000},{0xc35aa000},{0xc35ac000},{0xc35ae000},{0xc35b0000},{0xc35b2000},{0xc35b4000},{0xc35b6000},{0xc35b8000},{0xc35ba000},{0xc35bc000},{0xc35be000}, +{0xc35c0000},{0xc35c2000},{0xc35c4000},{0xc35c6000},{0xc35c8000},{0xc35ca000},{0xc35cc000},{0xc35ce000},{0xc35d0000},{0xc35d2000},{0xc35d4000},{0xc35d6000},{0xc35d8000},{0xc35da000},{0xc35dc000},{0xc35de000},{0xc35e0000},{0xc35e2000},{0xc35e4000},{0xc35e6000},{0xc35e8000},{0xc35ea000},{0xc35ec000},{0xc35ee000},{0xc35f0000},{0xc35f2000},{0xc35f4000},{0xc35f6000},{0xc35f8000},{0xc35fa000},{0xc35fc000},{0xc35fe000}, +{0xc3600000},{0xc3602000},{0xc3604000},{0xc3606000},{0xc3608000},{0xc360a000},{0xc360c000},{0xc360e000},{0xc3610000},{0xc3612000},{0xc3614000},{0xc3616000},{0xc3618000},{0xc361a000},{0xc361c000},{0xc361e000},{0xc3620000},{0xc3622000},{0xc3624000},{0xc3626000},{0xc3628000},{0xc362a000},{0xc362c000},{0xc362e000},{0xc3630000},{0xc3632000},{0xc3634000},{0xc3636000},{0xc3638000},{0xc363a000},{0xc363c000},{0xc363e000}, +{0xc3640000},{0xc3642000},{0xc3644000},{0xc3646000},{0xc3648000},{0xc364a000},{0xc364c000},{0xc364e000},{0xc3650000},{0xc3652000},{0xc3654000},{0xc3656000},{0xc3658000},{0xc365a000},{0xc365c000},{0xc365e000},{0xc3660000},{0xc3662000},{0xc3664000},{0xc3666000},{0xc3668000},{0xc366a000},{0xc366c000},{0xc366e000},{0xc3670000},{0xc3672000},{0xc3674000},{0xc3676000},{0xc3678000},{0xc367a000},{0xc367c000},{0xc367e000}, +{0xc3680000},{0xc3682000},{0xc3684000},{0xc3686000},{0xc3688000},{0xc368a000},{0xc368c000},{0xc368e000},{0xc3690000},{0xc3692000},{0xc3694000},{0xc3696000},{0xc3698000},{0xc369a000},{0xc369c000},{0xc369e000},{0xc36a0000},{0xc36a2000},{0xc36a4000},{0xc36a6000},{0xc36a8000},{0xc36aa000},{0xc36ac000},{0xc36ae000},{0xc36b0000},{0xc36b2000},{0xc36b4000},{0xc36b6000},{0xc36b8000},{0xc36ba000},{0xc36bc000},{0xc36be000}, +{0xc36c0000},{0xc36c2000},{0xc36c4000},{0xc36c6000},{0xc36c8000},{0xc36ca000},{0xc36cc000},{0xc36ce000},{0xc36d0000},{0xc36d2000},{0xc36d4000},{0xc36d6000},{0xc36d8000},{0xc36da000},{0xc36dc000},{0xc36de000},{0xc36e0000},{0xc36e2000},{0xc36e4000},{0xc36e6000},{0xc36e8000},{0xc36ea000},{0xc36ec000},{0xc36ee000},{0xc36f0000},{0xc36f2000},{0xc36f4000},{0xc36f6000},{0xc36f8000},{0xc36fa000},{0xc36fc000},{0xc36fe000}, +{0xc3700000},{0xc3702000},{0xc3704000},{0xc3706000},{0xc3708000},{0xc370a000},{0xc370c000},{0xc370e000},{0xc3710000},{0xc3712000},{0xc3714000},{0xc3716000},{0xc3718000},{0xc371a000},{0xc371c000},{0xc371e000},{0xc3720000},{0xc3722000},{0xc3724000},{0xc3726000},{0xc3728000},{0xc372a000},{0xc372c000},{0xc372e000},{0xc3730000},{0xc3732000},{0xc3734000},{0xc3736000},{0xc3738000},{0xc373a000},{0xc373c000},{0xc373e000}, +{0xc3740000},{0xc3742000},{0xc3744000},{0xc3746000},{0xc3748000},{0xc374a000},{0xc374c000},{0xc374e000},{0xc3750000},{0xc3752000},{0xc3754000},{0xc3756000},{0xc3758000},{0xc375a000},{0xc375c000},{0xc375e000},{0xc3760000},{0xc3762000},{0xc3764000},{0xc3766000},{0xc3768000},{0xc376a000},{0xc376c000},{0xc376e000},{0xc3770000},{0xc3772000},{0xc3774000},{0xc3776000},{0xc3778000},{0xc377a000},{0xc377c000},{0xc377e000}, +{0xc3780000},{0xc3782000},{0xc3784000},{0xc3786000},{0xc3788000},{0xc378a000},{0xc378c000},{0xc378e000},{0xc3790000},{0xc3792000},{0xc3794000},{0xc3796000},{0xc3798000},{0xc379a000},{0xc379c000},{0xc379e000},{0xc37a0000},{0xc37a2000},{0xc37a4000},{0xc37a6000},{0xc37a8000},{0xc37aa000},{0xc37ac000},{0xc37ae000},{0xc37b0000},{0xc37b2000},{0xc37b4000},{0xc37b6000},{0xc37b8000},{0xc37ba000},{0xc37bc000},{0xc37be000}, +{0xc37c0000},{0xc37c2000},{0xc37c4000},{0xc37c6000},{0xc37c8000},{0xc37ca000},{0xc37cc000},{0xc37ce000},{0xc37d0000},{0xc37d2000},{0xc37d4000},{0xc37d6000},{0xc37d8000},{0xc37da000},{0xc37dc000},{0xc37de000},{0xc37e0000},{0xc37e2000},{0xc37e4000},{0xc37e6000},{0xc37e8000},{0xc37ea000},{0xc37ec000},{0xc37ee000},{0xc37f0000},{0xc37f2000},{0xc37f4000},{0xc37f6000},{0xc37f8000},{0xc37fa000},{0xc37fc000},{0xc37fe000}, +{0xc3800000},{0xc3802000},{0xc3804000},{0xc3806000},{0xc3808000},{0xc380a000},{0xc380c000},{0xc380e000},{0xc3810000},{0xc3812000},{0xc3814000},{0xc3816000},{0xc3818000},{0xc381a000},{0xc381c000},{0xc381e000},{0xc3820000},{0xc3822000},{0xc3824000},{0xc3826000},{0xc3828000},{0xc382a000},{0xc382c000},{0xc382e000},{0xc3830000},{0xc3832000},{0xc3834000},{0xc3836000},{0xc3838000},{0xc383a000},{0xc383c000},{0xc383e000}, +{0xc3840000},{0xc3842000},{0xc3844000},{0xc3846000},{0xc3848000},{0xc384a000},{0xc384c000},{0xc384e000},{0xc3850000},{0xc3852000},{0xc3854000},{0xc3856000},{0xc3858000},{0xc385a000},{0xc385c000},{0xc385e000},{0xc3860000},{0xc3862000},{0xc3864000},{0xc3866000},{0xc3868000},{0xc386a000},{0xc386c000},{0xc386e000},{0xc3870000},{0xc3872000},{0xc3874000},{0xc3876000},{0xc3878000},{0xc387a000},{0xc387c000},{0xc387e000}, +{0xc3880000},{0xc3882000},{0xc3884000},{0xc3886000},{0xc3888000},{0xc388a000},{0xc388c000},{0xc388e000},{0xc3890000},{0xc3892000},{0xc3894000},{0xc3896000},{0xc3898000},{0xc389a000},{0xc389c000},{0xc389e000},{0xc38a0000},{0xc38a2000},{0xc38a4000},{0xc38a6000},{0xc38a8000},{0xc38aa000},{0xc38ac000},{0xc38ae000},{0xc38b0000},{0xc38b2000},{0xc38b4000},{0xc38b6000},{0xc38b8000},{0xc38ba000},{0xc38bc000},{0xc38be000}, +{0xc38c0000},{0xc38c2000},{0xc38c4000},{0xc38c6000},{0xc38c8000},{0xc38ca000},{0xc38cc000},{0xc38ce000},{0xc38d0000},{0xc38d2000},{0xc38d4000},{0xc38d6000},{0xc38d8000},{0xc38da000},{0xc38dc000},{0xc38de000},{0xc38e0000},{0xc38e2000},{0xc38e4000},{0xc38e6000},{0xc38e8000},{0xc38ea000},{0xc38ec000},{0xc38ee000},{0xc38f0000},{0xc38f2000},{0xc38f4000},{0xc38f6000},{0xc38f8000},{0xc38fa000},{0xc38fc000},{0xc38fe000}, +{0xc3900000},{0xc3902000},{0xc3904000},{0xc3906000},{0xc3908000},{0xc390a000},{0xc390c000},{0xc390e000},{0xc3910000},{0xc3912000},{0xc3914000},{0xc3916000},{0xc3918000},{0xc391a000},{0xc391c000},{0xc391e000},{0xc3920000},{0xc3922000},{0xc3924000},{0xc3926000},{0xc3928000},{0xc392a000},{0xc392c000},{0xc392e000},{0xc3930000},{0xc3932000},{0xc3934000},{0xc3936000},{0xc3938000},{0xc393a000},{0xc393c000},{0xc393e000}, +{0xc3940000},{0xc3942000},{0xc3944000},{0xc3946000},{0xc3948000},{0xc394a000},{0xc394c000},{0xc394e000},{0xc3950000},{0xc3952000},{0xc3954000},{0xc3956000},{0xc3958000},{0xc395a000},{0xc395c000},{0xc395e000},{0xc3960000},{0xc3962000},{0xc3964000},{0xc3966000},{0xc3968000},{0xc396a000},{0xc396c000},{0xc396e000},{0xc3970000},{0xc3972000},{0xc3974000},{0xc3976000},{0xc3978000},{0xc397a000},{0xc397c000},{0xc397e000}, +{0xc3980000},{0xc3982000},{0xc3984000},{0xc3986000},{0xc3988000},{0xc398a000},{0xc398c000},{0xc398e000},{0xc3990000},{0xc3992000},{0xc3994000},{0xc3996000},{0xc3998000},{0xc399a000},{0xc399c000},{0xc399e000},{0xc39a0000},{0xc39a2000},{0xc39a4000},{0xc39a6000},{0xc39a8000},{0xc39aa000},{0xc39ac000},{0xc39ae000},{0xc39b0000},{0xc39b2000},{0xc39b4000},{0xc39b6000},{0xc39b8000},{0xc39ba000},{0xc39bc000},{0xc39be000}, +{0xc39c0000},{0xc39c2000},{0xc39c4000},{0xc39c6000},{0xc39c8000},{0xc39ca000},{0xc39cc000},{0xc39ce000},{0xc39d0000},{0xc39d2000},{0xc39d4000},{0xc39d6000},{0xc39d8000},{0xc39da000},{0xc39dc000},{0xc39de000},{0xc39e0000},{0xc39e2000},{0xc39e4000},{0xc39e6000},{0xc39e8000},{0xc39ea000},{0xc39ec000},{0xc39ee000},{0xc39f0000},{0xc39f2000},{0xc39f4000},{0xc39f6000},{0xc39f8000},{0xc39fa000},{0xc39fc000},{0xc39fe000}, +{0xc3a00000},{0xc3a02000},{0xc3a04000},{0xc3a06000},{0xc3a08000},{0xc3a0a000},{0xc3a0c000},{0xc3a0e000},{0xc3a10000},{0xc3a12000},{0xc3a14000},{0xc3a16000},{0xc3a18000},{0xc3a1a000},{0xc3a1c000},{0xc3a1e000},{0xc3a20000},{0xc3a22000},{0xc3a24000},{0xc3a26000},{0xc3a28000},{0xc3a2a000},{0xc3a2c000},{0xc3a2e000},{0xc3a30000},{0xc3a32000},{0xc3a34000},{0xc3a36000},{0xc3a38000},{0xc3a3a000},{0xc3a3c000},{0xc3a3e000}, +{0xc3a40000},{0xc3a42000},{0xc3a44000},{0xc3a46000},{0xc3a48000},{0xc3a4a000},{0xc3a4c000},{0xc3a4e000},{0xc3a50000},{0xc3a52000},{0xc3a54000},{0xc3a56000},{0xc3a58000},{0xc3a5a000},{0xc3a5c000},{0xc3a5e000},{0xc3a60000},{0xc3a62000},{0xc3a64000},{0xc3a66000},{0xc3a68000},{0xc3a6a000},{0xc3a6c000},{0xc3a6e000},{0xc3a70000},{0xc3a72000},{0xc3a74000},{0xc3a76000},{0xc3a78000},{0xc3a7a000},{0xc3a7c000},{0xc3a7e000}, +{0xc3a80000},{0xc3a82000},{0xc3a84000},{0xc3a86000},{0xc3a88000},{0xc3a8a000},{0xc3a8c000},{0xc3a8e000},{0xc3a90000},{0xc3a92000},{0xc3a94000},{0xc3a96000},{0xc3a98000},{0xc3a9a000},{0xc3a9c000},{0xc3a9e000},{0xc3aa0000},{0xc3aa2000},{0xc3aa4000},{0xc3aa6000},{0xc3aa8000},{0xc3aaa000},{0xc3aac000},{0xc3aae000},{0xc3ab0000},{0xc3ab2000},{0xc3ab4000},{0xc3ab6000},{0xc3ab8000},{0xc3aba000},{0xc3abc000},{0xc3abe000}, +{0xc3ac0000},{0xc3ac2000},{0xc3ac4000},{0xc3ac6000},{0xc3ac8000},{0xc3aca000},{0xc3acc000},{0xc3ace000},{0xc3ad0000},{0xc3ad2000},{0xc3ad4000},{0xc3ad6000},{0xc3ad8000},{0xc3ada000},{0xc3adc000},{0xc3ade000},{0xc3ae0000},{0xc3ae2000},{0xc3ae4000},{0xc3ae6000},{0xc3ae8000},{0xc3aea000},{0xc3aec000},{0xc3aee000},{0xc3af0000},{0xc3af2000},{0xc3af4000},{0xc3af6000},{0xc3af8000},{0xc3afa000},{0xc3afc000},{0xc3afe000}, +{0xc3b00000},{0xc3b02000},{0xc3b04000},{0xc3b06000},{0xc3b08000},{0xc3b0a000},{0xc3b0c000},{0xc3b0e000},{0xc3b10000},{0xc3b12000},{0xc3b14000},{0xc3b16000},{0xc3b18000},{0xc3b1a000},{0xc3b1c000},{0xc3b1e000},{0xc3b20000},{0xc3b22000},{0xc3b24000},{0xc3b26000},{0xc3b28000},{0xc3b2a000},{0xc3b2c000},{0xc3b2e000},{0xc3b30000},{0xc3b32000},{0xc3b34000},{0xc3b36000},{0xc3b38000},{0xc3b3a000},{0xc3b3c000},{0xc3b3e000}, +{0xc3b40000},{0xc3b42000},{0xc3b44000},{0xc3b46000},{0xc3b48000},{0xc3b4a000},{0xc3b4c000},{0xc3b4e000},{0xc3b50000},{0xc3b52000},{0xc3b54000},{0xc3b56000},{0xc3b58000},{0xc3b5a000},{0xc3b5c000},{0xc3b5e000},{0xc3b60000},{0xc3b62000},{0xc3b64000},{0xc3b66000},{0xc3b68000},{0xc3b6a000},{0xc3b6c000},{0xc3b6e000},{0xc3b70000},{0xc3b72000},{0xc3b74000},{0xc3b76000},{0xc3b78000},{0xc3b7a000},{0xc3b7c000},{0xc3b7e000}, +{0xc3b80000},{0xc3b82000},{0xc3b84000},{0xc3b86000},{0xc3b88000},{0xc3b8a000},{0xc3b8c000},{0xc3b8e000},{0xc3b90000},{0xc3b92000},{0xc3b94000},{0xc3b96000},{0xc3b98000},{0xc3b9a000},{0xc3b9c000},{0xc3b9e000},{0xc3ba0000},{0xc3ba2000},{0xc3ba4000},{0xc3ba6000},{0xc3ba8000},{0xc3baa000},{0xc3bac000},{0xc3bae000},{0xc3bb0000},{0xc3bb2000},{0xc3bb4000},{0xc3bb6000},{0xc3bb8000},{0xc3bba000},{0xc3bbc000},{0xc3bbe000}, +{0xc3bc0000},{0xc3bc2000},{0xc3bc4000},{0xc3bc6000},{0xc3bc8000},{0xc3bca000},{0xc3bcc000},{0xc3bce000},{0xc3bd0000},{0xc3bd2000},{0xc3bd4000},{0xc3bd6000},{0xc3bd8000},{0xc3bda000},{0xc3bdc000},{0xc3bde000},{0xc3be0000},{0xc3be2000},{0xc3be4000},{0xc3be6000},{0xc3be8000},{0xc3bea000},{0xc3bec000},{0xc3bee000},{0xc3bf0000},{0xc3bf2000},{0xc3bf4000},{0xc3bf6000},{0xc3bf8000},{0xc3bfa000},{0xc3bfc000},{0xc3bfe000}, +{0xc3c00000},{0xc3c02000},{0xc3c04000},{0xc3c06000},{0xc3c08000},{0xc3c0a000},{0xc3c0c000},{0xc3c0e000},{0xc3c10000},{0xc3c12000},{0xc3c14000},{0xc3c16000},{0xc3c18000},{0xc3c1a000},{0xc3c1c000},{0xc3c1e000},{0xc3c20000},{0xc3c22000},{0xc3c24000},{0xc3c26000},{0xc3c28000},{0xc3c2a000},{0xc3c2c000},{0xc3c2e000},{0xc3c30000},{0xc3c32000},{0xc3c34000},{0xc3c36000},{0xc3c38000},{0xc3c3a000},{0xc3c3c000},{0xc3c3e000}, +{0xc3c40000},{0xc3c42000},{0xc3c44000},{0xc3c46000},{0xc3c48000},{0xc3c4a000},{0xc3c4c000},{0xc3c4e000},{0xc3c50000},{0xc3c52000},{0xc3c54000},{0xc3c56000},{0xc3c58000},{0xc3c5a000},{0xc3c5c000},{0xc3c5e000},{0xc3c60000},{0xc3c62000},{0xc3c64000},{0xc3c66000},{0xc3c68000},{0xc3c6a000},{0xc3c6c000},{0xc3c6e000},{0xc3c70000},{0xc3c72000},{0xc3c74000},{0xc3c76000},{0xc3c78000},{0xc3c7a000},{0xc3c7c000},{0xc3c7e000}, +{0xc3c80000},{0xc3c82000},{0xc3c84000},{0xc3c86000},{0xc3c88000},{0xc3c8a000},{0xc3c8c000},{0xc3c8e000},{0xc3c90000},{0xc3c92000},{0xc3c94000},{0xc3c96000},{0xc3c98000},{0xc3c9a000},{0xc3c9c000},{0xc3c9e000},{0xc3ca0000},{0xc3ca2000},{0xc3ca4000},{0xc3ca6000},{0xc3ca8000},{0xc3caa000},{0xc3cac000},{0xc3cae000},{0xc3cb0000},{0xc3cb2000},{0xc3cb4000},{0xc3cb6000},{0xc3cb8000},{0xc3cba000},{0xc3cbc000},{0xc3cbe000}, +{0xc3cc0000},{0xc3cc2000},{0xc3cc4000},{0xc3cc6000},{0xc3cc8000},{0xc3cca000},{0xc3ccc000},{0xc3cce000},{0xc3cd0000},{0xc3cd2000},{0xc3cd4000},{0xc3cd6000},{0xc3cd8000},{0xc3cda000},{0xc3cdc000},{0xc3cde000},{0xc3ce0000},{0xc3ce2000},{0xc3ce4000},{0xc3ce6000},{0xc3ce8000},{0xc3cea000},{0xc3cec000},{0xc3cee000},{0xc3cf0000},{0xc3cf2000},{0xc3cf4000},{0xc3cf6000},{0xc3cf8000},{0xc3cfa000},{0xc3cfc000},{0xc3cfe000}, +{0xc3d00000},{0xc3d02000},{0xc3d04000},{0xc3d06000},{0xc3d08000},{0xc3d0a000},{0xc3d0c000},{0xc3d0e000},{0xc3d10000},{0xc3d12000},{0xc3d14000},{0xc3d16000},{0xc3d18000},{0xc3d1a000},{0xc3d1c000},{0xc3d1e000},{0xc3d20000},{0xc3d22000},{0xc3d24000},{0xc3d26000},{0xc3d28000},{0xc3d2a000},{0xc3d2c000},{0xc3d2e000},{0xc3d30000},{0xc3d32000},{0xc3d34000},{0xc3d36000},{0xc3d38000},{0xc3d3a000},{0xc3d3c000},{0xc3d3e000}, +{0xc3d40000},{0xc3d42000},{0xc3d44000},{0xc3d46000},{0xc3d48000},{0xc3d4a000},{0xc3d4c000},{0xc3d4e000},{0xc3d50000},{0xc3d52000},{0xc3d54000},{0xc3d56000},{0xc3d58000},{0xc3d5a000},{0xc3d5c000},{0xc3d5e000},{0xc3d60000},{0xc3d62000},{0xc3d64000},{0xc3d66000},{0xc3d68000},{0xc3d6a000},{0xc3d6c000},{0xc3d6e000},{0xc3d70000},{0xc3d72000},{0xc3d74000},{0xc3d76000},{0xc3d78000},{0xc3d7a000},{0xc3d7c000},{0xc3d7e000}, +{0xc3d80000},{0xc3d82000},{0xc3d84000},{0xc3d86000},{0xc3d88000},{0xc3d8a000},{0xc3d8c000},{0xc3d8e000},{0xc3d90000},{0xc3d92000},{0xc3d94000},{0xc3d96000},{0xc3d98000},{0xc3d9a000},{0xc3d9c000},{0xc3d9e000},{0xc3da0000},{0xc3da2000},{0xc3da4000},{0xc3da6000},{0xc3da8000},{0xc3daa000},{0xc3dac000},{0xc3dae000},{0xc3db0000},{0xc3db2000},{0xc3db4000},{0xc3db6000},{0xc3db8000},{0xc3dba000},{0xc3dbc000},{0xc3dbe000}, +{0xc3dc0000},{0xc3dc2000},{0xc3dc4000},{0xc3dc6000},{0xc3dc8000},{0xc3dca000},{0xc3dcc000},{0xc3dce000},{0xc3dd0000},{0xc3dd2000},{0xc3dd4000},{0xc3dd6000},{0xc3dd8000},{0xc3dda000},{0xc3ddc000},{0xc3dde000},{0xc3de0000},{0xc3de2000},{0xc3de4000},{0xc3de6000},{0xc3de8000},{0xc3dea000},{0xc3dec000},{0xc3dee000},{0xc3df0000},{0xc3df2000},{0xc3df4000},{0xc3df6000},{0xc3df8000},{0xc3dfa000},{0xc3dfc000},{0xc3dfe000}, +{0xc3e00000},{0xc3e02000},{0xc3e04000},{0xc3e06000},{0xc3e08000},{0xc3e0a000},{0xc3e0c000},{0xc3e0e000},{0xc3e10000},{0xc3e12000},{0xc3e14000},{0xc3e16000},{0xc3e18000},{0xc3e1a000},{0xc3e1c000},{0xc3e1e000},{0xc3e20000},{0xc3e22000},{0xc3e24000},{0xc3e26000},{0xc3e28000},{0xc3e2a000},{0xc3e2c000},{0xc3e2e000},{0xc3e30000},{0xc3e32000},{0xc3e34000},{0xc3e36000},{0xc3e38000},{0xc3e3a000},{0xc3e3c000},{0xc3e3e000}, +{0xc3e40000},{0xc3e42000},{0xc3e44000},{0xc3e46000},{0xc3e48000},{0xc3e4a000},{0xc3e4c000},{0xc3e4e000},{0xc3e50000},{0xc3e52000},{0xc3e54000},{0xc3e56000},{0xc3e58000},{0xc3e5a000},{0xc3e5c000},{0xc3e5e000},{0xc3e60000},{0xc3e62000},{0xc3e64000},{0xc3e66000},{0xc3e68000},{0xc3e6a000},{0xc3e6c000},{0xc3e6e000},{0xc3e70000},{0xc3e72000},{0xc3e74000},{0xc3e76000},{0xc3e78000},{0xc3e7a000},{0xc3e7c000},{0xc3e7e000}, +{0xc3e80000},{0xc3e82000},{0xc3e84000},{0xc3e86000},{0xc3e88000},{0xc3e8a000},{0xc3e8c000},{0xc3e8e000},{0xc3e90000},{0xc3e92000},{0xc3e94000},{0xc3e96000},{0xc3e98000},{0xc3e9a000},{0xc3e9c000},{0xc3e9e000},{0xc3ea0000},{0xc3ea2000},{0xc3ea4000},{0xc3ea6000},{0xc3ea8000},{0xc3eaa000},{0xc3eac000},{0xc3eae000},{0xc3eb0000},{0xc3eb2000},{0xc3eb4000},{0xc3eb6000},{0xc3eb8000},{0xc3eba000},{0xc3ebc000},{0xc3ebe000}, +{0xc3ec0000},{0xc3ec2000},{0xc3ec4000},{0xc3ec6000},{0xc3ec8000},{0xc3eca000},{0xc3ecc000},{0xc3ece000},{0xc3ed0000},{0xc3ed2000},{0xc3ed4000},{0xc3ed6000},{0xc3ed8000},{0xc3eda000},{0xc3edc000},{0xc3ede000},{0xc3ee0000},{0xc3ee2000},{0xc3ee4000},{0xc3ee6000},{0xc3ee8000},{0xc3eea000},{0xc3eec000},{0xc3eee000},{0xc3ef0000},{0xc3ef2000},{0xc3ef4000},{0xc3ef6000},{0xc3ef8000},{0xc3efa000},{0xc3efc000},{0xc3efe000}, +{0xc3f00000},{0xc3f02000},{0xc3f04000},{0xc3f06000},{0xc3f08000},{0xc3f0a000},{0xc3f0c000},{0xc3f0e000},{0xc3f10000},{0xc3f12000},{0xc3f14000},{0xc3f16000},{0xc3f18000},{0xc3f1a000},{0xc3f1c000},{0xc3f1e000},{0xc3f20000},{0xc3f22000},{0xc3f24000},{0xc3f26000},{0xc3f28000},{0xc3f2a000},{0xc3f2c000},{0xc3f2e000},{0xc3f30000},{0xc3f32000},{0xc3f34000},{0xc3f36000},{0xc3f38000},{0xc3f3a000},{0xc3f3c000},{0xc3f3e000}, +{0xc3f40000},{0xc3f42000},{0xc3f44000},{0xc3f46000},{0xc3f48000},{0xc3f4a000},{0xc3f4c000},{0xc3f4e000},{0xc3f50000},{0xc3f52000},{0xc3f54000},{0xc3f56000},{0xc3f58000},{0xc3f5a000},{0xc3f5c000},{0xc3f5e000},{0xc3f60000},{0xc3f62000},{0xc3f64000},{0xc3f66000},{0xc3f68000},{0xc3f6a000},{0xc3f6c000},{0xc3f6e000},{0xc3f70000},{0xc3f72000},{0xc3f74000},{0xc3f76000},{0xc3f78000},{0xc3f7a000},{0xc3f7c000},{0xc3f7e000}, +{0xc3f80000},{0xc3f82000},{0xc3f84000},{0xc3f86000},{0xc3f88000},{0xc3f8a000},{0xc3f8c000},{0xc3f8e000},{0xc3f90000},{0xc3f92000},{0xc3f94000},{0xc3f96000},{0xc3f98000},{0xc3f9a000},{0xc3f9c000},{0xc3f9e000},{0xc3fa0000},{0xc3fa2000},{0xc3fa4000},{0xc3fa6000},{0xc3fa8000},{0xc3faa000},{0xc3fac000},{0xc3fae000},{0xc3fb0000},{0xc3fb2000},{0xc3fb4000},{0xc3fb6000},{0xc3fb8000},{0xc3fba000},{0xc3fbc000},{0xc3fbe000}, +{0xc3fc0000},{0xc3fc2000},{0xc3fc4000},{0xc3fc6000},{0xc3fc8000},{0xc3fca000},{0xc3fcc000},{0xc3fce000},{0xc3fd0000},{0xc3fd2000},{0xc3fd4000},{0xc3fd6000},{0xc3fd8000},{0xc3fda000},{0xc3fdc000},{0xc3fde000},{0xc3fe0000},{0xc3fe2000},{0xc3fe4000},{0xc3fe6000},{0xc3fe8000},{0xc3fea000},{0xc3fec000},{0xc3fee000},{0xc3ff0000},{0xc3ff2000},{0xc3ff4000},{0xc3ff6000},{0xc3ff8000},{0xc3ffa000},{0xc3ffc000},{0xc3ffe000}, +{0xc4000000},{0xc4002000},{0xc4004000},{0xc4006000},{0xc4008000},{0xc400a000},{0xc400c000},{0xc400e000},{0xc4010000},{0xc4012000},{0xc4014000},{0xc4016000},{0xc4018000},{0xc401a000},{0xc401c000},{0xc401e000},{0xc4020000},{0xc4022000},{0xc4024000},{0xc4026000},{0xc4028000},{0xc402a000},{0xc402c000},{0xc402e000},{0xc4030000},{0xc4032000},{0xc4034000},{0xc4036000},{0xc4038000},{0xc403a000},{0xc403c000},{0xc403e000}, +{0xc4040000},{0xc4042000},{0xc4044000},{0xc4046000},{0xc4048000},{0xc404a000},{0xc404c000},{0xc404e000},{0xc4050000},{0xc4052000},{0xc4054000},{0xc4056000},{0xc4058000},{0xc405a000},{0xc405c000},{0xc405e000},{0xc4060000},{0xc4062000},{0xc4064000},{0xc4066000},{0xc4068000},{0xc406a000},{0xc406c000},{0xc406e000},{0xc4070000},{0xc4072000},{0xc4074000},{0xc4076000},{0xc4078000},{0xc407a000},{0xc407c000},{0xc407e000}, +{0xc4080000},{0xc4082000},{0xc4084000},{0xc4086000},{0xc4088000},{0xc408a000},{0xc408c000},{0xc408e000},{0xc4090000},{0xc4092000},{0xc4094000},{0xc4096000},{0xc4098000},{0xc409a000},{0xc409c000},{0xc409e000},{0xc40a0000},{0xc40a2000},{0xc40a4000},{0xc40a6000},{0xc40a8000},{0xc40aa000},{0xc40ac000},{0xc40ae000},{0xc40b0000},{0xc40b2000},{0xc40b4000},{0xc40b6000},{0xc40b8000},{0xc40ba000},{0xc40bc000},{0xc40be000}, +{0xc40c0000},{0xc40c2000},{0xc40c4000},{0xc40c6000},{0xc40c8000},{0xc40ca000},{0xc40cc000},{0xc40ce000},{0xc40d0000},{0xc40d2000},{0xc40d4000},{0xc40d6000},{0xc40d8000},{0xc40da000},{0xc40dc000},{0xc40de000},{0xc40e0000},{0xc40e2000},{0xc40e4000},{0xc40e6000},{0xc40e8000},{0xc40ea000},{0xc40ec000},{0xc40ee000},{0xc40f0000},{0xc40f2000},{0xc40f4000},{0xc40f6000},{0xc40f8000},{0xc40fa000},{0xc40fc000},{0xc40fe000}, +{0xc4100000},{0xc4102000},{0xc4104000},{0xc4106000},{0xc4108000},{0xc410a000},{0xc410c000},{0xc410e000},{0xc4110000},{0xc4112000},{0xc4114000},{0xc4116000},{0xc4118000},{0xc411a000},{0xc411c000},{0xc411e000},{0xc4120000},{0xc4122000},{0xc4124000},{0xc4126000},{0xc4128000},{0xc412a000},{0xc412c000},{0xc412e000},{0xc4130000},{0xc4132000},{0xc4134000},{0xc4136000},{0xc4138000},{0xc413a000},{0xc413c000},{0xc413e000}, +{0xc4140000},{0xc4142000},{0xc4144000},{0xc4146000},{0xc4148000},{0xc414a000},{0xc414c000},{0xc414e000},{0xc4150000},{0xc4152000},{0xc4154000},{0xc4156000},{0xc4158000},{0xc415a000},{0xc415c000},{0xc415e000},{0xc4160000},{0xc4162000},{0xc4164000},{0xc4166000},{0xc4168000},{0xc416a000},{0xc416c000},{0xc416e000},{0xc4170000},{0xc4172000},{0xc4174000},{0xc4176000},{0xc4178000},{0xc417a000},{0xc417c000},{0xc417e000}, +{0xc4180000},{0xc4182000},{0xc4184000},{0xc4186000},{0xc4188000},{0xc418a000},{0xc418c000},{0xc418e000},{0xc4190000},{0xc4192000},{0xc4194000},{0xc4196000},{0xc4198000},{0xc419a000},{0xc419c000},{0xc419e000},{0xc41a0000},{0xc41a2000},{0xc41a4000},{0xc41a6000},{0xc41a8000},{0xc41aa000},{0xc41ac000},{0xc41ae000},{0xc41b0000},{0xc41b2000},{0xc41b4000},{0xc41b6000},{0xc41b8000},{0xc41ba000},{0xc41bc000},{0xc41be000}, +{0xc41c0000},{0xc41c2000},{0xc41c4000},{0xc41c6000},{0xc41c8000},{0xc41ca000},{0xc41cc000},{0xc41ce000},{0xc41d0000},{0xc41d2000},{0xc41d4000},{0xc41d6000},{0xc41d8000},{0xc41da000},{0xc41dc000},{0xc41de000},{0xc41e0000},{0xc41e2000},{0xc41e4000},{0xc41e6000},{0xc41e8000},{0xc41ea000},{0xc41ec000},{0xc41ee000},{0xc41f0000},{0xc41f2000},{0xc41f4000},{0xc41f6000},{0xc41f8000},{0xc41fa000},{0xc41fc000},{0xc41fe000}, +{0xc4200000},{0xc4202000},{0xc4204000},{0xc4206000},{0xc4208000},{0xc420a000},{0xc420c000},{0xc420e000},{0xc4210000},{0xc4212000},{0xc4214000},{0xc4216000},{0xc4218000},{0xc421a000},{0xc421c000},{0xc421e000},{0xc4220000},{0xc4222000},{0xc4224000},{0xc4226000},{0xc4228000},{0xc422a000},{0xc422c000},{0xc422e000},{0xc4230000},{0xc4232000},{0xc4234000},{0xc4236000},{0xc4238000},{0xc423a000},{0xc423c000},{0xc423e000}, +{0xc4240000},{0xc4242000},{0xc4244000},{0xc4246000},{0xc4248000},{0xc424a000},{0xc424c000},{0xc424e000},{0xc4250000},{0xc4252000},{0xc4254000},{0xc4256000},{0xc4258000},{0xc425a000},{0xc425c000},{0xc425e000},{0xc4260000},{0xc4262000},{0xc4264000},{0xc4266000},{0xc4268000},{0xc426a000},{0xc426c000},{0xc426e000},{0xc4270000},{0xc4272000},{0xc4274000},{0xc4276000},{0xc4278000},{0xc427a000},{0xc427c000},{0xc427e000}, +{0xc4280000},{0xc4282000},{0xc4284000},{0xc4286000},{0xc4288000},{0xc428a000},{0xc428c000},{0xc428e000},{0xc4290000},{0xc4292000},{0xc4294000},{0xc4296000},{0xc4298000},{0xc429a000},{0xc429c000},{0xc429e000},{0xc42a0000},{0xc42a2000},{0xc42a4000},{0xc42a6000},{0xc42a8000},{0xc42aa000},{0xc42ac000},{0xc42ae000},{0xc42b0000},{0xc42b2000},{0xc42b4000},{0xc42b6000},{0xc42b8000},{0xc42ba000},{0xc42bc000},{0xc42be000}, +{0xc42c0000},{0xc42c2000},{0xc42c4000},{0xc42c6000},{0xc42c8000},{0xc42ca000},{0xc42cc000},{0xc42ce000},{0xc42d0000},{0xc42d2000},{0xc42d4000},{0xc42d6000},{0xc42d8000},{0xc42da000},{0xc42dc000},{0xc42de000},{0xc42e0000},{0xc42e2000},{0xc42e4000},{0xc42e6000},{0xc42e8000},{0xc42ea000},{0xc42ec000},{0xc42ee000},{0xc42f0000},{0xc42f2000},{0xc42f4000},{0xc42f6000},{0xc42f8000},{0xc42fa000},{0xc42fc000},{0xc42fe000}, +{0xc4300000},{0xc4302000},{0xc4304000},{0xc4306000},{0xc4308000},{0xc430a000},{0xc430c000},{0xc430e000},{0xc4310000},{0xc4312000},{0xc4314000},{0xc4316000},{0xc4318000},{0xc431a000},{0xc431c000},{0xc431e000},{0xc4320000},{0xc4322000},{0xc4324000},{0xc4326000},{0xc4328000},{0xc432a000},{0xc432c000},{0xc432e000},{0xc4330000},{0xc4332000},{0xc4334000},{0xc4336000},{0xc4338000},{0xc433a000},{0xc433c000},{0xc433e000}, +{0xc4340000},{0xc4342000},{0xc4344000},{0xc4346000},{0xc4348000},{0xc434a000},{0xc434c000},{0xc434e000},{0xc4350000},{0xc4352000},{0xc4354000},{0xc4356000},{0xc4358000},{0xc435a000},{0xc435c000},{0xc435e000},{0xc4360000},{0xc4362000},{0xc4364000},{0xc4366000},{0xc4368000},{0xc436a000},{0xc436c000},{0xc436e000},{0xc4370000},{0xc4372000},{0xc4374000},{0xc4376000},{0xc4378000},{0xc437a000},{0xc437c000},{0xc437e000}, +{0xc4380000},{0xc4382000},{0xc4384000},{0xc4386000},{0xc4388000},{0xc438a000},{0xc438c000},{0xc438e000},{0xc4390000},{0xc4392000},{0xc4394000},{0xc4396000},{0xc4398000},{0xc439a000},{0xc439c000},{0xc439e000},{0xc43a0000},{0xc43a2000},{0xc43a4000},{0xc43a6000},{0xc43a8000},{0xc43aa000},{0xc43ac000},{0xc43ae000},{0xc43b0000},{0xc43b2000},{0xc43b4000},{0xc43b6000},{0xc43b8000},{0xc43ba000},{0xc43bc000},{0xc43be000}, +{0xc43c0000},{0xc43c2000},{0xc43c4000},{0xc43c6000},{0xc43c8000},{0xc43ca000},{0xc43cc000},{0xc43ce000},{0xc43d0000},{0xc43d2000},{0xc43d4000},{0xc43d6000},{0xc43d8000},{0xc43da000},{0xc43dc000},{0xc43de000},{0xc43e0000},{0xc43e2000},{0xc43e4000},{0xc43e6000},{0xc43e8000},{0xc43ea000},{0xc43ec000},{0xc43ee000},{0xc43f0000},{0xc43f2000},{0xc43f4000},{0xc43f6000},{0xc43f8000},{0xc43fa000},{0xc43fc000},{0xc43fe000}, +{0xc4400000},{0xc4402000},{0xc4404000},{0xc4406000},{0xc4408000},{0xc440a000},{0xc440c000},{0xc440e000},{0xc4410000},{0xc4412000},{0xc4414000},{0xc4416000},{0xc4418000},{0xc441a000},{0xc441c000},{0xc441e000},{0xc4420000},{0xc4422000},{0xc4424000},{0xc4426000},{0xc4428000},{0xc442a000},{0xc442c000},{0xc442e000},{0xc4430000},{0xc4432000},{0xc4434000},{0xc4436000},{0xc4438000},{0xc443a000},{0xc443c000},{0xc443e000}, +{0xc4440000},{0xc4442000},{0xc4444000},{0xc4446000},{0xc4448000},{0xc444a000},{0xc444c000},{0xc444e000},{0xc4450000},{0xc4452000},{0xc4454000},{0xc4456000},{0xc4458000},{0xc445a000},{0xc445c000},{0xc445e000},{0xc4460000},{0xc4462000},{0xc4464000},{0xc4466000},{0xc4468000},{0xc446a000},{0xc446c000},{0xc446e000},{0xc4470000},{0xc4472000},{0xc4474000},{0xc4476000},{0xc4478000},{0xc447a000},{0xc447c000},{0xc447e000}, +{0xc4480000},{0xc4482000},{0xc4484000},{0xc4486000},{0xc4488000},{0xc448a000},{0xc448c000},{0xc448e000},{0xc4490000},{0xc4492000},{0xc4494000},{0xc4496000},{0xc4498000},{0xc449a000},{0xc449c000},{0xc449e000},{0xc44a0000},{0xc44a2000},{0xc44a4000},{0xc44a6000},{0xc44a8000},{0xc44aa000},{0xc44ac000},{0xc44ae000},{0xc44b0000},{0xc44b2000},{0xc44b4000},{0xc44b6000},{0xc44b8000},{0xc44ba000},{0xc44bc000},{0xc44be000}, +{0xc44c0000},{0xc44c2000},{0xc44c4000},{0xc44c6000},{0xc44c8000},{0xc44ca000},{0xc44cc000},{0xc44ce000},{0xc44d0000},{0xc44d2000},{0xc44d4000},{0xc44d6000},{0xc44d8000},{0xc44da000},{0xc44dc000},{0xc44de000},{0xc44e0000},{0xc44e2000},{0xc44e4000},{0xc44e6000},{0xc44e8000},{0xc44ea000},{0xc44ec000},{0xc44ee000},{0xc44f0000},{0xc44f2000},{0xc44f4000},{0xc44f6000},{0xc44f8000},{0xc44fa000},{0xc44fc000},{0xc44fe000}, +{0xc4500000},{0xc4502000},{0xc4504000},{0xc4506000},{0xc4508000},{0xc450a000},{0xc450c000},{0xc450e000},{0xc4510000},{0xc4512000},{0xc4514000},{0xc4516000},{0xc4518000},{0xc451a000},{0xc451c000},{0xc451e000},{0xc4520000},{0xc4522000},{0xc4524000},{0xc4526000},{0xc4528000},{0xc452a000},{0xc452c000},{0xc452e000},{0xc4530000},{0xc4532000},{0xc4534000},{0xc4536000},{0xc4538000},{0xc453a000},{0xc453c000},{0xc453e000}, +{0xc4540000},{0xc4542000},{0xc4544000},{0xc4546000},{0xc4548000},{0xc454a000},{0xc454c000},{0xc454e000},{0xc4550000},{0xc4552000},{0xc4554000},{0xc4556000},{0xc4558000},{0xc455a000},{0xc455c000},{0xc455e000},{0xc4560000},{0xc4562000},{0xc4564000},{0xc4566000},{0xc4568000},{0xc456a000},{0xc456c000},{0xc456e000},{0xc4570000},{0xc4572000},{0xc4574000},{0xc4576000},{0xc4578000},{0xc457a000},{0xc457c000},{0xc457e000}, +{0xc4580000},{0xc4582000},{0xc4584000},{0xc4586000},{0xc4588000},{0xc458a000},{0xc458c000},{0xc458e000},{0xc4590000},{0xc4592000},{0xc4594000},{0xc4596000},{0xc4598000},{0xc459a000},{0xc459c000},{0xc459e000},{0xc45a0000},{0xc45a2000},{0xc45a4000},{0xc45a6000},{0xc45a8000},{0xc45aa000},{0xc45ac000},{0xc45ae000},{0xc45b0000},{0xc45b2000},{0xc45b4000},{0xc45b6000},{0xc45b8000},{0xc45ba000},{0xc45bc000},{0xc45be000}, +{0xc45c0000},{0xc45c2000},{0xc45c4000},{0xc45c6000},{0xc45c8000},{0xc45ca000},{0xc45cc000},{0xc45ce000},{0xc45d0000},{0xc45d2000},{0xc45d4000},{0xc45d6000},{0xc45d8000},{0xc45da000},{0xc45dc000},{0xc45de000},{0xc45e0000},{0xc45e2000},{0xc45e4000},{0xc45e6000},{0xc45e8000},{0xc45ea000},{0xc45ec000},{0xc45ee000},{0xc45f0000},{0xc45f2000},{0xc45f4000},{0xc45f6000},{0xc45f8000},{0xc45fa000},{0xc45fc000},{0xc45fe000}, +{0xc4600000},{0xc4602000},{0xc4604000},{0xc4606000},{0xc4608000},{0xc460a000},{0xc460c000},{0xc460e000},{0xc4610000},{0xc4612000},{0xc4614000},{0xc4616000},{0xc4618000},{0xc461a000},{0xc461c000},{0xc461e000},{0xc4620000},{0xc4622000},{0xc4624000},{0xc4626000},{0xc4628000},{0xc462a000},{0xc462c000},{0xc462e000},{0xc4630000},{0xc4632000},{0xc4634000},{0xc4636000},{0xc4638000},{0xc463a000},{0xc463c000},{0xc463e000}, +{0xc4640000},{0xc4642000},{0xc4644000},{0xc4646000},{0xc4648000},{0xc464a000},{0xc464c000},{0xc464e000},{0xc4650000},{0xc4652000},{0xc4654000},{0xc4656000},{0xc4658000},{0xc465a000},{0xc465c000},{0xc465e000},{0xc4660000},{0xc4662000},{0xc4664000},{0xc4666000},{0xc4668000},{0xc466a000},{0xc466c000},{0xc466e000},{0xc4670000},{0xc4672000},{0xc4674000},{0xc4676000},{0xc4678000},{0xc467a000},{0xc467c000},{0xc467e000}, +{0xc4680000},{0xc4682000},{0xc4684000},{0xc4686000},{0xc4688000},{0xc468a000},{0xc468c000},{0xc468e000},{0xc4690000},{0xc4692000},{0xc4694000},{0xc4696000},{0xc4698000},{0xc469a000},{0xc469c000},{0xc469e000},{0xc46a0000},{0xc46a2000},{0xc46a4000},{0xc46a6000},{0xc46a8000},{0xc46aa000},{0xc46ac000},{0xc46ae000},{0xc46b0000},{0xc46b2000},{0xc46b4000},{0xc46b6000},{0xc46b8000},{0xc46ba000},{0xc46bc000},{0xc46be000}, +{0xc46c0000},{0xc46c2000},{0xc46c4000},{0xc46c6000},{0xc46c8000},{0xc46ca000},{0xc46cc000},{0xc46ce000},{0xc46d0000},{0xc46d2000},{0xc46d4000},{0xc46d6000},{0xc46d8000},{0xc46da000},{0xc46dc000},{0xc46de000},{0xc46e0000},{0xc46e2000},{0xc46e4000},{0xc46e6000},{0xc46e8000},{0xc46ea000},{0xc46ec000},{0xc46ee000},{0xc46f0000},{0xc46f2000},{0xc46f4000},{0xc46f6000},{0xc46f8000},{0xc46fa000},{0xc46fc000},{0xc46fe000}, +{0xc4700000},{0xc4702000},{0xc4704000},{0xc4706000},{0xc4708000},{0xc470a000},{0xc470c000},{0xc470e000},{0xc4710000},{0xc4712000},{0xc4714000},{0xc4716000},{0xc4718000},{0xc471a000},{0xc471c000},{0xc471e000},{0xc4720000},{0xc4722000},{0xc4724000},{0xc4726000},{0xc4728000},{0xc472a000},{0xc472c000},{0xc472e000},{0xc4730000},{0xc4732000},{0xc4734000},{0xc4736000},{0xc4738000},{0xc473a000},{0xc473c000},{0xc473e000}, +{0xc4740000},{0xc4742000},{0xc4744000},{0xc4746000},{0xc4748000},{0xc474a000},{0xc474c000},{0xc474e000},{0xc4750000},{0xc4752000},{0xc4754000},{0xc4756000},{0xc4758000},{0xc475a000},{0xc475c000},{0xc475e000},{0xc4760000},{0xc4762000},{0xc4764000},{0xc4766000},{0xc4768000},{0xc476a000},{0xc476c000},{0xc476e000},{0xc4770000},{0xc4772000},{0xc4774000},{0xc4776000},{0xc4778000},{0xc477a000},{0xc477c000},{0xc477e000}, +{0xc4780000},{0xc4782000},{0xc4784000},{0xc4786000},{0xc4788000},{0xc478a000},{0xc478c000},{0xc478e000},{0xc4790000},{0xc4792000},{0xc4794000},{0xc4796000},{0xc4798000},{0xc479a000},{0xc479c000},{0xc479e000},{0xc47a0000},{0xc47a2000},{0xc47a4000},{0xc47a6000},{0xc47a8000},{0xc47aa000},{0xc47ac000},{0xc47ae000},{0xc47b0000},{0xc47b2000},{0xc47b4000},{0xc47b6000},{0xc47b8000},{0xc47ba000},{0xc47bc000},{0xc47be000}, +{0xc47c0000},{0xc47c2000},{0xc47c4000},{0xc47c6000},{0xc47c8000},{0xc47ca000},{0xc47cc000},{0xc47ce000},{0xc47d0000},{0xc47d2000},{0xc47d4000},{0xc47d6000},{0xc47d8000},{0xc47da000},{0xc47dc000},{0xc47de000},{0xc47e0000},{0xc47e2000},{0xc47e4000},{0xc47e6000},{0xc47e8000},{0xc47ea000},{0xc47ec000},{0xc47ee000},{0xc47f0000},{0xc47f2000},{0xc47f4000},{0xc47f6000},{0xc47f8000},{0xc47fa000},{0xc47fc000},{0xc47fe000}, +{0xc4800000},{0xc4802000},{0xc4804000},{0xc4806000},{0xc4808000},{0xc480a000},{0xc480c000},{0xc480e000},{0xc4810000},{0xc4812000},{0xc4814000},{0xc4816000},{0xc4818000},{0xc481a000},{0xc481c000},{0xc481e000},{0xc4820000},{0xc4822000},{0xc4824000},{0xc4826000},{0xc4828000},{0xc482a000},{0xc482c000},{0xc482e000},{0xc4830000},{0xc4832000},{0xc4834000},{0xc4836000},{0xc4838000},{0xc483a000},{0xc483c000},{0xc483e000}, +{0xc4840000},{0xc4842000},{0xc4844000},{0xc4846000},{0xc4848000},{0xc484a000},{0xc484c000},{0xc484e000},{0xc4850000},{0xc4852000},{0xc4854000},{0xc4856000},{0xc4858000},{0xc485a000},{0xc485c000},{0xc485e000},{0xc4860000},{0xc4862000},{0xc4864000},{0xc4866000},{0xc4868000},{0xc486a000},{0xc486c000},{0xc486e000},{0xc4870000},{0xc4872000},{0xc4874000},{0xc4876000},{0xc4878000},{0xc487a000},{0xc487c000},{0xc487e000}, +{0xc4880000},{0xc4882000},{0xc4884000},{0xc4886000},{0xc4888000},{0xc488a000},{0xc488c000},{0xc488e000},{0xc4890000},{0xc4892000},{0xc4894000},{0xc4896000},{0xc4898000},{0xc489a000},{0xc489c000},{0xc489e000},{0xc48a0000},{0xc48a2000},{0xc48a4000},{0xc48a6000},{0xc48a8000},{0xc48aa000},{0xc48ac000},{0xc48ae000},{0xc48b0000},{0xc48b2000},{0xc48b4000},{0xc48b6000},{0xc48b8000},{0xc48ba000},{0xc48bc000},{0xc48be000}, +{0xc48c0000},{0xc48c2000},{0xc48c4000},{0xc48c6000},{0xc48c8000},{0xc48ca000},{0xc48cc000},{0xc48ce000},{0xc48d0000},{0xc48d2000},{0xc48d4000},{0xc48d6000},{0xc48d8000},{0xc48da000},{0xc48dc000},{0xc48de000},{0xc48e0000},{0xc48e2000},{0xc48e4000},{0xc48e6000},{0xc48e8000},{0xc48ea000},{0xc48ec000},{0xc48ee000},{0xc48f0000},{0xc48f2000},{0xc48f4000},{0xc48f6000},{0xc48f8000},{0xc48fa000},{0xc48fc000},{0xc48fe000}, +{0xc4900000},{0xc4902000},{0xc4904000},{0xc4906000},{0xc4908000},{0xc490a000},{0xc490c000},{0xc490e000},{0xc4910000},{0xc4912000},{0xc4914000},{0xc4916000},{0xc4918000},{0xc491a000},{0xc491c000},{0xc491e000},{0xc4920000},{0xc4922000},{0xc4924000},{0xc4926000},{0xc4928000},{0xc492a000},{0xc492c000},{0xc492e000},{0xc4930000},{0xc4932000},{0xc4934000},{0xc4936000},{0xc4938000},{0xc493a000},{0xc493c000},{0xc493e000}, +{0xc4940000},{0xc4942000},{0xc4944000},{0xc4946000},{0xc4948000},{0xc494a000},{0xc494c000},{0xc494e000},{0xc4950000},{0xc4952000},{0xc4954000},{0xc4956000},{0xc4958000},{0xc495a000},{0xc495c000},{0xc495e000},{0xc4960000},{0xc4962000},{0xc4964000},{0xc4966000},{0xc4968000},{0xc496a000},{0xc496c000},{0xc496e000},{0xc4970000},{0xc4972000},{0xc4974000},{0xc4976000},{0xc4978000},{0xc497a000},{0xc497c000},{0xc497e000}, +{0xc4980000},{0xc4982000},{0xc4984000},{0xc4986000},{0xc4988000},{0xc498a000},{0xc498c000},{0xc498e000},{0xc4990000},{0xc4992000},{0xc4994000},{0xc4996000},{0xc4998000},{0xc499a000},{0xc499c000},{0xc499e000},{0xc49a0000},{0xc49a2000},{0xc49a4000},{0xc49a6000},{0xc49a8000},{0xc49aa000},{0xc49ac000},{0xc49ae000},{0xc49b0000},{0xc49b2000},{0xc49b4000},{0xc49b6000},{0xc49b8000},{0xc49ba000},{0xc49bc000},{0xc49be000}, +{0xc49c0000},{0xc49c2000},{0xc49c4000},{0xc49c6000},{0xc49c8000},{0xc49ca000},{0xc49cc000},{0xc49ce000},{0xc49d0000},{0xc49d2000},{0xc49d4000},{0xc49d6000},{0xc49d8000},{0xc49da000},{0xc49dc000},{0xc49de000},{0xc49e0000},{0xc49e2000},{0xc49e4000},{0xc49e6000},{0xc49e8000},{0xc49ea000},{0xc49ec000},{0xc49ee000},{0xc49f0000},{0xc49f2000},{0xc49f4000},{0xc49f6000},{0xc49f8000},{0xc49fa000},{0xc49fc000},{0xc49fe000}, +{0xc4a00000},{0xc4a02000},{0xc4a04000},{0xc4a06000},{0xc4a08000},{0xc4a0a000},{0xc4a0c000},{0xc4a0e000},{0xc4a10000},{0xc4a12000},{0xc4a14000},{0xc4a16000},{0xc4a18000},{0xc4a1a000},{0xc4a1c000},{0xc4a1e000},{0xc4a20000},{0xc4a22000},{0xc4a24000},{0xc4a26000},{0xc4a28000},{0xc4a2a000},{0xc4a2c000},{0xc4a2e000},{0xc4a30000},{0xc4a32000},{0xc4a34000},{0xc4a36000},{0xc4a38000},{0xc4a3a000},{0xc4a3c000},{0xc4a3e000}, +{0xc4a40000},{0xc4a42000},{0xc4a44000},{0xc4a46000},{0xc4a48000},{0xc4a4a000},{0xc4a4c000},{0xc4a4e000},{0xc4a50000},{0xc4a52000},{0xc4a54000},{0xc4a56000},{0xc4a58000},{0xc4a5a000},{0xc4a5c000},{0xc4a5e000},{0xc4a60000},{0xc4a62000},{0xc4a64000},{0xc4a66000},{0xc4a68000},{0xc4a6a000},{0xc4a6c000},{0xc4a6e000},{0xc4a70000},{0xc4a72000},{0xc4a74000},{0xc4a76000},{0xc4a78000},{0xc4a7a000},{0xc4a7c000},{0xc4a7e000}, +{0xc4a80000},{0xc4a82000},{0xc4a84000},{0xc4a86000},{0xc4a88000},{0xc4a8a000},{0xc4a8c000},{0xc4a8e000},{0xc4a90000},{0xc4a92000},{0xc4a94000},{0xc4a96000},{0xc4a98000},{0xc4a9a000},{0xc4a9c000},{0xc4a9e000},{0xc4aa0000},{0xc4aa2000},{0xc4aa4000},{0xc4aa6000},{0xc4aa8000},{0xc4aaa000},{0xc4aac000},{0xc4aae000},{0xc4ab0000},{0xc4ab2000},{0xc4ab4000},{0xc4ab6000},{0xc4ab8000},{0xc4aba000},{0xc4abc000},{0xc4abe000}, +{0xc4ac0000},{0xc4ac2000},{0xc4ac4000},{0xc4ac6000},{0xc4ac8000},{0xc4aca000},{0xc4acc000},{0xc4ace000},{0xc4ad0000},{0xc4ad2000},{0xc4ad4000},{0xc4ad6000},{0xc4ad8000},{0xc4ada000},{0xc4adc000},{0xc4ade000},{0xc4ae0000},{0xc4ae2000},{0xc4ae4000},{0xc4ae6000},{0xc4ae8000},{0xc4aea000},{0xc4aec000},{0xc4aee000},{0xc4af0000},{0xc4af2000},{0xc4af4000},{0xc4af6000},{0xc4af8000},{0xc4afa000},{0xc4afc000},{0xc4afe000}, +{0xc4b00000},{0xc4b02000},{0xc4b04000},{0xc4b06000},{0xc4b08000},{0xc4b0a000},{0xc4b0c000},{0xc4b0e000},{0xc4b10000},{0xc4b12000},{0xc4b14000},{0xc4b16000},{0xc4b18000},{0xc4b1a000},{0xc4b1c000},{0xc4b1e000},{0xc4b20000},{0xc4b22000},{0xc4b24000},{0xc4b26000},{0xc4b28000},{0xc4b2a000},{0xc4b2c000},{0xc4b2e000},{0xc4b30000},{0xc4b32000},{0xc4b34000},{0xc4b36000},{0xc4b38000},{0xc4b3a000},{0xc4b3c000},{0xc4b3e000}, +{0xc4b40000},{0xc4b42000},{0xc4b44000},{0xc4b46000},{0xc4b48000},{0xc4b4a000},{0xc4b4c000},{0xc4b4e000},{0xc4b50000},{0xc4b52000},{0xc4b54000},{0xc4b56000},{0xc4b58000},{0xc4b5a000},{0xc4b5c000},{0xc4b5e000},{0xc4b60000},{0xc4b62000},{0xc4b64000},{0xc4b66000},{0xc4b68000},{0xc4b6a000},{0xc4b6c000},{0xc4b6e000},{0xc4b70000},{0xc4b72000},{0xc4b74000},{0xc4b76000},{0xc4b78000},{0xc4b7a000},{0xc4b7c000},{0xc4b7e000}, +{0xc4b80000},{0xc4b82000},{0xc4b84000},{0xc4b86000},{0xc4b88000},{0xc4b8a000},{0xc4b8c000},{0xc4b8e000},{0xc4b90000},{0xc4b92000},{0xc4b94000},{0xc4b96000},{0xc4b98000},{0xc4b9a000},{0xc4b9c000},{0xc4b9e000},{0xc4ba0000},{0xc4ba2000},{0xc4ba4000},{0xc4ba6000},{0xc4ba8000},{0xc4baa000},{0xc4bac000},{0xc4bae000},{0xc4bb0000},{0xc4bb2000},{0xc4bb4000},{0xc4bb6000},{0xc4bb8000},{0xc4bba000},{0xc4bbc000},{0xc4bbe000}, +{0xc4bc0000},{0xc4bc2000},{0xc4bc4000},{0xc4bc6000},{0xc4bc8000},{0xc4bca000},{0xc4bcc000},{0xc4bce000},{0xc4bd0000},{0xc4bd2000},{0xc4bd4000},{0xc4bd6000},{0xc4bd8000},{0xc4bda000},{0xc4bdc000},{0xc4bde000},{0xc4be0000},{0xc4be2000},{0xc4be4000},{0xc4be6000},{0xc4be8000},{0xc4bea000},{0xc4bec000},{0xc4bee000},{0xc4bf0000},{0xc4bf2000},{0xc4bf4000},{0xc4bf6000},{0xc4bf8000},{0xc4bfa000},{0xc4bfc000},{0xc4bfe000}, +{0xc4c00000},{0xc4c02000},{0xc4c04000},{0xc4c06000},{0xc4c08000},{0xc4c0a000},{0xc4c0c000},{0xc4c0e000},{0xc4c10000},{0xc4c12000},{0xc4c14000},{0xc4c16000},{0xc4c18000},{0xc4c1a000},{0xc4c1c000},{0xc4c1e000},{0xc4c20000},{0xc4c22000},{0xc4c24000},{0xc4c26000},{0xc4c28000},{0xc4c2a000},{0xc4c2c000},{0xc4c2e000},{0xc4c30000},{0xc4c32000},{0xc4c34000},{0xc4c36000},{0xc4c38000},{0xc4c3a000},{0xc4c3c000},{0xc4c3e000}, +{0xc4c40000},{0xc4c42000},{0xc4c44000},{0xc4c46000},{0xc4c48000},{0xc4c4a000},{0xc4c4c000},{0xc4c4e000},{0xc4c50000},{0xc4c52000},{0xc4c54000},{0xc4c56000},{0xc4c58000},{0xc4c5a000},{0xc4c5c000},{0xc4c5e000},{0xc4c60000},{0xc4c62000},{0xc4c64000},{0xc4c66000},{0xc4c68000},{0xc4c6a000},{0xc4c6c000},{0xc4c6e000},{0xc4c70000},{0xc4c72000},{0xc4c74000},{0xc4c76000},{0xc4c78000},{0xc4c7a000},{0xc4c7c000},{0xc4c7e000}, +{0xc4c80000},{0xc4c82000},{0xc4c84000},{0xc4c86000},{0xc4c88000},{0xc4c8a000},{0xc4c8c000},{0xc4c8e000},{0xc4c90000},{0xc4c92000},{0xc4c94000},{0xc4c96000},{0xc4c98000},{0xc4c9a000},{0xc4c9c000},{0xc4c9e000},{0xc4ca0000},{0xc4ca2000},{0xc4ca4000},{0xc4ca6000},{0xc4ca8000},{0xc4caa000},{0xc4cac000},{0xc4cae000},{0xc4cb0000},{0xc4cb2000},{0xc4cb4000},{0xc4cb6000},{0xc4cb8000},{0xc4cba000},{0xc4cbc000},{0xc4cbe000}, +{0xc4cc0000},{0xc4cc2000},{0xc4cc4000},{0xc4cc6000},{0xc4cc8000},{0xc4cca000},{0xc4ccc000},{0xc4cce000},{0xc4cd0000},{0xc4cd2000},{0xc4cd4000},{0xc4cd6000},{0xc4cd8000},{0xc4cda000},{0xc4cdc000},{0xc4cde000},{0xc4ce0000},{0xc4ce2000},{0xc4ce4000},{0xc4ce6000},{0xc4ce8000},{0xc4cea000},{0xc4cec000},{0xc4cee000},{0xc4cf0000},{0xc4cf2000},{0xc4cf4000},{0xc4cf6000},{0xc4cf8000},{0xc4cfa000},{0xc4cfc000},{0xc4cfe000}, +{0xc4d00000},{0xc4d02000},{0xc4d04000},{0xc4d06000},{0xc4d08000},{0xc4d0a000},{0xc4d0c000},{0xc4d0e000},{0xc4d10000},{0xc4d12000},{0xc4d14000},{0xc4d16000},{0xc4d18000},{0xc4d1a000},{0xc4d1c000},{0xc4d1e000},{0xc4d20000},{0xc4d22000},{0xc4d24000},{0xc4d26000},{0xc4d28000},{0xc4d2a000},{0xc4d2c000},{0xc4d2e000},{0xc4d30000},{0xc4d32000},{0xc4d34000},{0xc4d36000},{0xc4d38000},{0xc4d3a000},{0xc4d3c000},{0xc4d3e000}, +{0xc4d40000},{0xc4d42000},{0xc4d44000},{0xc4d46000},{0xc4d48000},{0xc4d4a000},{0xc4d4c000},{0xc4d4e000},{0xc4d50000},{0xc4d52000},{0xc4d54000},{0xc4d56000},{0xc4d58000},{0xc4d5a000},{0xc4d5c000},{0xc4d5e000},{0xc4d60000},{0xc4d62000},{0xc4d64000},{0xc4d66000},{0xc4d68000},{0xc4d6a000},{0xc4d6c000},{0xc4d6e000},{0xc4d70000},{0xc4d72000},{0xc4d74000},{0xc4d76000},{0xc4d78000},{0xc4d7a000},{0xc4d7c000},{0xc4d7e000}, +{0xc4d80000},{0xc4d82000},{0xc4d84000},{0xc4d86000},{0xc4d88000},{0xc4d8a000},{0xc4d8c000},{0xc4d8e000},{0xc4d90000},{0xc4d92000},{0xc4d94000},{0xc4d96000},{0xc4d98000},{0xc4d9a000},{0xc4d9c000},{0xc4d9e000},{0xc4da0000},{0xc4da2000},{0xc4da4000},{0xc4da6000},{0xc4da8000},{0xc4daa000},{0xc4dac000},{0xc4dae000},{0xc4db0000},{0xc4db2000},{0xc4db4000},{0xc4db6000},{0xc4db8000},{0xc4dba000},{0xc4dbc000},{0xc4dbe000}, +{0xc4dc0000},{0xc4dc2000},{0xc4dc4000},{0xc4dc6000},{0xc4dc8000},{0xc4dca000},{0xc4dcc000},{0xc4dce000},{0xc4dd0000},{0xc4dd2000},{0xc4dd4000},{0xc4dd6000},{0xc4dd8000},{0xc4dda000},{0xc4ddc000},{0xc4dde000},{0xc4de0000},{0xc4de2000},{0xc4de4000},{0xc4de6000},{0xc4de8000},{0xc4dea000},{0xc4dec000},{0xc4dee000},{0xc4df0000},{0xc4df2000},{0xc4df4000},{0xc4df6000},{0xc4df8000},{0xc4dfa000},{0xc4dfc000},{0xc4dfe000}, +{0xc4e00000},{0xc4e02000},{0xc4e04000},{0xc4e06000},{0xc4e08000},{0xc4e0a000},{0xc4e0c000},{0xc4e0e000},{0xc4e10000},{0xc4e12000},{0xc4e14000},{0xc4e16000},{0xc4e18000},{0xc4e1a000},{0xc4e1c000},{0xc4e1e000},{0xc4e20000},{0xc4e22000},{0xc4e24000},{0xc4e26000},{0xc4e28000},{0xc4e2a000},{0xc4e2c000},{0xc4e2e000},{0xc4e30000},{0xc4e32000},{0xc4e34000},{0xc4e36000},{0xc4e38000},{0xc4e3a000},{0xc4e3c000},{0xc4e3e000}, +{0xc4e40000},{0xc4e42000},{0xc4e44000},{0xc4e46000},{0xc4e48000},{0xc4e4a000},{0xc4e4c000},{0xc4e4e000},{0xc4e50000},{0xc4e52000},{0xc4e54000},{0xc4e56000},{0xc4e58000},{0xc4e5a000},{0xc4e5c000},{0xc4e5e000},{0xc4e60000},{0xc4e62000},{0xc4e64000},{0xc4e66000},{0xc4e68000},{0xc4e6a000},{0xc4e6c000},{0xc4e6e000},{0xc4e70000},{0xc4e72000},{0xc4e74000},{0xc4e76000},{0xc4e78000},{0xc4e7a000},{0xc4e7c000},{0xc4e7e000}, +{0xc4e80000},{0xc4e82000},{0xc4e84000},{0xc4e86000},{0xc4e88000},{0xc4e8a000},{0xc4e8c000},{0xc4e8e000},{0xc4e90000},{0xc4e92000},{0xc4e94000},{0xc4e96000},{0xc4e98000},{0xc4e9a000},{0xc4e9c000},{0xc4e9e000},{0xc4ea0000},{0xc4ea2000},{0xc4ea4000},{0xc4ea6000},{0xc4ea8000},{0xc4eaa000},{0xc4eac000},{0xc4eae000},{0xc4eb0000},{0xc4eb2000},{0xc4eb4000},{0xc4eb6000},{0xc4eb8000},{0xc4eba000},{0xc4ebc000},{0xc4ebe000}, +{0xc4ec0000},{0xc4ec2000},{0xc4ec4000},{0xc4ec6000},{0xc4ec8000},{0xc4eca000},{0xc4ecc000},{0xc4ece000},{0xc4ed0000},{0xc4ed2000},{0xc4ed4000},{0xc4ed6000},{0xc4ed8000},{0xc4eda000},{0xc4edc000},{0xc4ede000},{0xc4ee0000},{0xc4ee2000},{0xc4ee4000},{0xc4ee6000},{0xc4ee8000},{0xc4eea000},{0xc4eec000},{0xc4eee000},{0xc4ef0000},{0xc4ef2000},{0xc4ef4000},{0xc4ef6000},{0xc4ef8000},{0xc4efa000},{0xc4efc000},{0xc4efe000}, +{0xc4f00000},{0xc4f02000},{0xc4f04000},{0xc4f06000},{0xc4f08000},{0xc4f0a000},{0xc4f0c000},{0xc4f0e000},{0xc4f10000},{0xc4f12000},{0xc4f14000},{0xc4f16000},{0xc4f18000},{0xc4f1a000},{0xc4f1c000},{0xc4f1e000},{0xc4f20000},{0xc4f22000},{0xc4f24000},{0xc4f26000},{0xc4f28000},{0xc4f2a000},{0xc4f2c000},{0xc4f2e000},{0xc4f30000},{0xc4f32000},{0xc4f34000},{0xc4f36000},{0xc4f38000},{0xc4f3a000},{0xc4f3c000},{0xc4f3e000}, +{0xc4f40000},{0xc4f42000},{0xc4f44000},{0xc4f46000},{0xc4f48000},{0xc4f4a000},{0xc4f4c000},{0xc4f4e000},{0xc4f50000},{0xc4f52000},{0xc4f54000},{0xc4f56000},{0xc4f58000},{0xc4f5a000},{0xc4f5c000},{0xc4f5e000},{0xc4f60000},{0xc4f62000},{0xc4f64000},{0xc4f66000},{0xc4f68000},{0xc4f6a000},{0xc4f6c000},{0xc4f6e000},{0xc4f70000},{0xc4f72000},{0xc4f74000},{0xc4f76000},{0xc4f78000},{0xc4f7a000},{0xc4f7c000},{0xc4f7e000}, +{0xc4f80000},{0xc4f82000},{0xc4f84000},{0xc4f86000},{0xc4f88000},{0xc4f8a000},{0xc4f8c000},{0xc4f8e000},{0xc4f90000},{0xc4f92000},{0xc4f94000},{0xc4f96000},{0xc4f98000},{0xc4f9a000},{0xc4f9c000},{0xc4f9e000},{0xc4fa0000},{0xc4fa2000},{0xc4fa4000},{0xc4fa6000},{0xc4fa8000},{0xc4faa000},{0xc4fac000},{0xc4fae000},{0xc4fb0000},{0xc4fb2000},{0xc4fb4000},{0xc4fb6000},{0xc4fb8000},{0xc4fba000},{0xc4fbc000},{0xc4fbe000}, +{0xc4fc0000},{0xc4fc2000},{0xc4fc4000},{0xc4fc6000},{0xc4fc8000},{0xc4fca000},{0xc4fcc000},{0xc4fce000},{0xc4fd0000},{0xc4fd2000},{0xc4fd4000},{0xc4fd6000},{0xc4fd8000},{0xc4fda000},{0xc4fdc000},{0xc4fde000},{0xc4fe0000},{0xc4fe2000},{0xc4fe4000},{0xc4fe6000},{0xc4fe8000},{0xc4fea000},{0xc4fec000},{0xc4fee000},{0xc4ff0000},{0xc4ff2000},{0xc4ff4000},{0xc4ff6000},{0xc4ff8000},{0xc4ffa000},{0xc4ffc000},{0xc4ffe000}, +{0xc5000000},{0xc5002000},{0xc5004000},{0xc5006000},{0xc5008000},{0xc500a000},{0xc500c000},{0xc500e000},{0xc5010000},{0xc5012000},{0xc5014000},{0xc5016000},{0xc5018000},{0xc501a000},{0xc501c000},{0xc501e000},{0xc5020000},{0xc5022000},{0xc5024000},{0xc5026000},{0xc5028000},{0xc502a000},{0xc502c000},{0xc502e000},{0xc5030000},{0xc5032000},{0xc5034000},{0xc5036000},{0xc5038000},{0xc503a000},{0xc503c000},{0xc503e000}, +{0xc5040000},{0xc5042000},{0xc5044000},{0xc5046000},{0xc5048000},{0xc504a000},{0xc504c000},{0xc504e000},{0xc5050000},{0xc5052000},{0xc5054000},{0xc5056000},{0xc5058000},{0xc505a000},{0xc505c000},{0xc505e000},{0xc5060000},{0xc5062000},{0xc5064000},{0xc5066000},{0xc5068000},{0xc506a000},{0xc506c000},{0xc506e000},{0xc5070000},{0xc5072000},{0xc5074000},{0xc5076000},{0xc5078000},{0xc507a000},{0xc507c000},{0xc507e000}, +{0xc5080000},{0xc5082000},{0xc5084000},{0xc5086000},{0xc5088000},{0xc508a000},{0xc508c000},{0xc508e000},{0xc5090000},{0xc5092000},{0xc5094000},{0xc5096000},{0xc5098000},{0xc509a000},{0xc509c000},{0xc509e000},{0xc50a0000},{0xc50a2000},{0xc50a4000},{0xc50a6000},{0xc50a8000},{0xc50aa000},{0xc50ac000},{0xc50ae000},{0xc50b0000},{0xc50b2000},{0xc50b4000},{0xc50b6000},{0xc50b8000},{0xc50ba000},{0xc50bc000},{0xc50be000}, +{0xc50c0000},{0xc50c2000},{0xc50c4000},{0xc50c6000},{0xc50c8000},{0xc50ca000},{0xc50cc000},{0xc50ce000},{0xc50d0000},{0xc50d2000},{0xc50d4000},{0xc50d6000},{0xc50d8000},{0xc50da000},{0xc50dc000},{0xc50de000},{0xc50e0000},{0xc50e2000},{0xc50e4000},{0xc50e6000},{0xc50e8000},{0xc50ea000},{0xc50ec000},{0xc50ee000},{0xc50f0000},{0xc50f2000},{0xc50f4000},{0xc50f6000},{0xc50f8000},{0xc50fa000},{0xc50fc000},{0xc50fe000}, +{0xc5100000},{0xc5102000},{0xc5104000},{0xc5106000},{0xc5108000},{0xc510a000},{0xc510c000},{0xc510e000},{0xc5110000},{0xc5112000},{0xc5114000},{0xc5116000},{0xc5118000},{0xc511a000},{0xc511c000},{0xc511e000},{0xc5120000},{0xc5122000},{0xc5124000},{0xc5126000},{0xc5128000},{0xc512a000},{0xc512c000},{0xc512e000},{0xc5130000},{0xc5132000},{0xc5134000},{0xc5136000},{0xc5138000},{0xc513a000},{0xc513c000},{0xc513e000}, +{0xc5140000},{0xc5142000},{0xc5144000},{0xc5146000},{0xc5148000},{0xc514a000},{0xc514c000},{0xc514e000},{0xc5150000},{0xc5152000},{0xc5154000},{0xc5156000},{0xc5158000},{0xc515a000},{0xc515c000},{0xc515e000},{0xc5160000},{0xc5162000},{0xc5164000},{0xc5166000},{0xc5168000},{0xc516a000},{0xc516c000},{0xc516e000},{0xc5170000},{0xc5172000},{0xc5174000},{0xc5176000},{0xc5178000},{0xc517a000},{0xc517c000},{0xc517e000}, +{0xc5180000},{0xc5182000},{0xc5184000},{0xc5186000},{0xc5188000},{0xc518a000},{0xc518c000},{0xc518e000},{0xc5190000},{0xc5192000},{0xc5194000},{0xc5196000},{0xc5198000},{0xc519a000},{0xc519c000},{0xc519e000},{0xc51a0000},{0xc51a2000},{0xc51a4000},{0xc51a6000},{0xc51a8000},{0xc51aa000},{0xc51ac000},{0xc51ae000},{0xc51b0000},{0xc51b2000},{0xc51b4000},{0xc51b6000},{0xc51b8000},{0xc51ba000},{0xc51bc000},{0xc51be000}, +{0xc51c0000},{0xc51c2000},{0xc51c4000},{0xc51c6000},{0xc51c8000},{0xc51ca000},{0xc51cc000},{0xc51ce000},{0xc51d0000},{0xc51d2000},{0xc51d4000},{0xc51d6000},{0xc51d8000},{0xc51da000},{0xc51dc000},{0xc51de000},{0xc51e0000},{0xc51e2000},{0xc51e4000},{0xc51e6000},{0xc51e8000},{0xc51ea000},{0xc51ec000},{0xc51ee000},{0xc51f0000},{0xc51f2000},{0xc51f4000},{0xc51f6000},{0xc51f8000},{0xc51fa000},{0xc51fc000},{0xc51fe000}, +{0xc5200000},{0xc5202000},{0xc5204000},{0xc5206000},{0xc5208000},{0xc520a000},{0xc520c000},{0xc520e000},{0xc5210000},{0xc5212000},{0xc5214000},{0xc5216000},{0xc5218000},{0xc521a000},{0xc521c000},{0xc521e000},{0xc5220000},{0xc5222000},{0xc5224000},{0xc5226000},{0xc5228000},{0xc522a000},{0xc522c000},{0xc522e000},{0xc5230000},{0xc5232000},{0xc5234000},{0xc5236000},{0xc5238000},{0xc523a000},{0xc523c000},{0xc523e000}, +{0xc5240000},{0xc5242000},{0xc5244000},{0xc5246000},{0xc5248000},{0xc524a000},{0xc524c000},{0xc524e000},{0xc5250000},{0xc5252000},{0xc5254000},{0xc5256000},{0xc5258000},{0xc525a000},{0xc525c000},{0xc525e000},{0xc5260000},{0xc5262000},{0xc5264000},{0xc5266000},{0xc5268000},{0xc526a000},{0xc526c000},{0xc526e000},{0xc5270000},{0xc5272000},{0xc5274000},{0xc5276000},{0xc5278000},{0xc527a000},{0xc527c000},{0xc527e000}, +{0xc5280000},{0xc5282000},{0xc5284000},{0xc5286000},{0xc5288000},{0xc528a000},{0xc528c000},{0xc528e000},{0xc5290000},{0xc5292000},{0xc5294000},{0xc5296000},{0xc5298000},{0xc529a000},{0xc529c000},{0xc529e000},{0xc52a0000},{0xc52a2000},{0xc52a4000},{0xc52a6000},{0xc52a8000},{0xc52aa000},{0xc52ac000},{0xc52ae000},{0xc52b0000},{0xc52b2000},{0xc52b4000},{0xc52b6000},{0xc52b8000},{0xc52ba000},{0xc52bc000},{0xc52be000}, +{0xc52c0000},{0xc52c2000},{0xc52c4000},{0xc52c6000},{0xc52c8000},{0xc52ca000},{0xc52cc000},{0xc52ce000},{0xc52d0000},{0xc52d2000},{0xc52d4000},{0xc52d6000},{0xc52d8000},{0xc52da000},{0xc52dc000},{0xc52de000},{0xc52e0000},{0xc52e2000},{0xc52e4000},{0xc52e6000},{0xc52e8000},{0xc52ea000},{0xc52ec000},{0xc52ee000},{0xc52f0000},{0xc52f2000},{0xc52f4000},{0xc52f6000},{0xc52f8000},{0xc52fa000},{0xc52fc000},{0xc52fe000}, +{0xc5300000},{0xc5302000},{0xc5304000},{0xc5306000},{0xc5308000},{0xc530a000},{0xc530c000},{0xc530e000},{0xc5310000},{0xc5312000},{0xc5314000},{0xc5316000},{0xc5318000},{0xc531a000},{0xc531c000},{0xc531e000},{0xc5320000},{0xc5322000},{0xc5324000},{0xc5326000},{0xc5328000},{0xc532a000},{0xc532c000},{0xc532e000},{0xc5330000},{0xc5332000},{0xc5334000},{0xc5336000},{0xc5338000},{0xc533a000},{0xc533c000},{0xc533e000}, +{0xc5340000},{0xc5342000},{0xc5344000},{0xc5346000},{0xc5348000},{0xc534a000},{0xc534c000},{0xc534e000},{0xc5350000},{0xc5352000},{0xc5354000},{0xc5356000},{0xc5358000},{0xc535a000},{0xc535c000},{0xc535e000},{0xc5360000},{0xc5362000},{0xc5364000},{0xc5366000},{0xc5368000},{0xc536a000},{0xc536c000},{0xc536e000},{0xc5370000},{0xc5372000},{0xc5374000},{0xc5376000},{0xc5378000},{0xc537a000},{0xc537c000},{0xc537e000}, +{0xc5380000},{0xc5382000},{0xc5384000},{0xc5386000},{0xc5388000},{0xc538a000},{0xc538c000},{0xc538e000},{0xc5390000},{0xc5392000},{0xc5394000},{0xc5396000},{0xc5398000},{0xc539a000},{0xc539c000},{0xc539e000},{0xc53a0000},{0xc53a2000},{0xc53a4000},{0xc53a6000},{0xc53a8000},{0xc53aa000},{0xc53ac000},{0xc53ae000},{0xc53b0000},{0xc53b2000},{0xc53b4000},{0xc53b6000},{0xc53b8000},{0xc53ba000},{0xc53bc000},{0xc53be000}, +{0xc53c0000},{0xc53c2000},{0xc53c4000},{0xc53c6000},{0xc53c8000},{0xc53ca000},{0xc53cc000},{0xc53ce000},{0xc53d0000},{0xc53d2000},{0xc53d4000},{0xc53d6000},{0xc53d8000},{0xc53da000},{0xc53dc000},{0xc53de000},{0xc53e0000},{0xc53e2000},{0xc53e4000},{0xc53e6000},{0xc53e8000},{0xc53ea000},{0xc53ec000},{0xc53ee000},{0xc53f0000},{0xc53f2000},{0xc53f4000},{0xc53f6000},{0xc53f8000},{0xc53fa000},{0xc53fc000},{0xc53fe000}, +{0xc5400000},{0xc5402000},{0xc5404000},{0xc5406000},{0xc5408000},{0xc540a000},{0xc540c000},{0xc540e000},{0xc5410000},{0xc5412000},{0xc5414000},{0xc5416000},{0xc5418000},{0xc541a000},{0xc541c000},{0xc541e000},{0xc5420000},{0xc5422000},{0xc5424000},{0xc5426000},{0xc5428000},{0xc542a000},{0xc542c000},{0xc542e000},{0xc5430000},{0xc5432000},{0xc5434000},{0xc5436000},{0xc5438000},{0xc543a000},{0xc543c000},{0xc543e000}, +{0xc5440000},{0xc5442000},{0xc5444000},{0xc5446000},{0xc5448000},{0xc544a000},{0xc544c000},{0xc544e000},{0xc5450000},{0xc5452000},{0xc5454000},{0xc5456000},{0xc5458000},{0xc545a000},{0xc545c000},{0xc545e000},{0xc5460000},{0xc5462000},{0xc5464000},{0xc5466000},{0xc5468000},{0xc546a000},{0xc546c000},{0xc546e000},{0xc5470000},{0xc5472000},{0xc5474000},{0xc5476000},{0xc5478000},{0xc547a000},{0xc547c000},{0xc547e000}, +{0xc5480000},{0xc5482000},{0xc5484000},{0xc5486000},{0xc5488000},{0xc548a000},{0xc548c000},{0xc548e000},{0xc5490000},{0xc5492000},{0xc5494000},{0xc5496000},{0xc5498000},{0xc549a000},{0xc549c000},{0xc549e000},{0xc54a0000},{0xc54a2000},{0xc54a4000},{0xc54a6000},{0xc54a8000},{0xc54aa000},{0xc54ac000},{0xc54ae000},{0xc54b0000},{0xc54b2000},{0xc54b4000},{0xc54b6000},{0xc54b8000},{0xc54ba000},{0xc54bc000},{0xc54be000}, +{0xc54c0000},{0xc54c2000},{0xc54c4000},{0xc54c6000},{0xc54c8000},{0xc54ca000},{0xc54cc000},{0xc54ce000},{0xc54d0000},{0xc54d2000},{0xc54d4000},{0xc54d6000},{0xc54d8000},{0xc54da000},{0xc54dc000},{0xc54de000},{0xc54e0000},{0xc54e2000},{0xc54e4000},{0xc54e6000},{0xc54e8000},{0xc54ea000},{0xc54ec000},{0xc54ee000},{0xc54f0000},{0xc54f2000},{0xc54f4000},{0xc54f6000},{0xc54f8000},{0xc54fa000},{0xc54fc000},{0xc54fe000}, +{0xc5500000},{0xc5502000},{0xc5504000},{0xc5506000},{0xc5508000},{0xc550a000},{0xc550c000},{0xc550e000},{0xc5510000},{0xc5512000},{0xc5514000},{0xc5516000},{0xc5518000},{0xc551a000},{0xc551c000},{0xc551e000},{0xc5520000},{0xc5522000},{0xc5524000},{0xc5526000},{0xc5528000},{0xc552a000},{0xc552c000},{0xc552e000},{0xc5530000},{0xc5532000},{0xc5534000},{0xc5536000},{0xc5538000},{0xc553a000},{0xc553c000},{0xc553e000}, +{0xc5540000},{0xc5542000},{0xc5544000},{0xc5546000},{0xc5548000},{0xc554a000},{0xc554c000},{0xc554e000},{0xc5550000},{0xc5552000},{0xc5554000},{0xc5556000},{0xc5558000},{0xc555a000},{0xc555c000},{0xc555e000},{0xc5560000},{0xc5562000},{0xc5564000},{0xc5566000},{0xc5568000},{0xc556a000},{0xc556c000},{0xc556e000},{0xc5570000},{0xc5572000},{0xc5574000},{0xc5576000},{0xc5578000},{0xc557a000},{0xc557c000},{0xc557e000}, +{0xc5580000},{0xc5582000},{0xc5584000},{0xc5586000},{0xc5588000},{0xc558a000},{0xc558c000},{0xc558e000},{0xc5590000},{0xc5592000},{0xc5594000},{0xc5596000},{0xc5598000},{0xc559a000},{0xc559c000},{0xc559e000},{0xc55a0000},{0xc55a2000},{0xc55a4000},{0xc55a6000},{0xc55a8000},{0xc55aa000},{0xc55ac000},{0xc55ae000},{0xc55b0000},{0xc55b2000},{0xc55b4000},{0xc55b6000},{0xc55b8000},{0xc55ba000},{0xc55bc000},{0xc55be000}, +{0xc55c0000},{0xc55c2000},{0xc55c4000},{0xc55c6000},{0xc55c8000},{0xc55ca000},{0xc55cc000},{0xc55ce000},{0xc55d0000},{0xc55d2000},{0xc55d4000},{0xc55d6000},{0xc55d8000},{0xc55da000},{0xc55dc000},{0xc55de000},{0xc55e0000},{0xc55e2000},{0xc55e4000},{0xc55e6000},{0xc55e8000},{0xc55ea000},{0xc55ec000},{0xc55ee000},{0xc55f0000},{0xc55f2000},{0xc55f4000},{0xc55f6000},{0xc55f8000},{0xc55fa000},{0xc55fc000},{0xc55fe000}, +{0xc5600000},{0xc5602000},{0xc5604000},{0xc5606000},{0xc5608000},{0xc560a000},{0xc560c000},{0xc560e000},{0xc5610000},{0xc5612000},{0xc5614000},{0xc5616000},{0xc5618000},{0xc561a000},{0xc561c000},{0xc561e000},{0xc5620000},{0xc5622000},{0xc5624000},{0xc5626000},{0xc5628000},{0xc562a000},{0xc562c000},{0xc562e000},{0xc5630000},{0xc5632000},{0xc5634000},{0xc5636000},{0xc5638000},{0xc563a000},{0xc563c000},{0xc563e000}, +{0xc5640000},{0xc5642000},{0xc5644000},{0xc5646000},{0xc5648000},{0xc564a000},{0xc564c000},{0xc564e000},{0xc5650000},{0xc5652000},{0xc5654000},{0xc5656000},{0xc5658000},{0xc565a000},{0xc565c000},{0xc565e000},{0xc5660000},{0xc5662000},{0xc5664000},{0xc5666000},{0xc5668000},{0xc566a000},{0xc566c000},{0xc566e000},{0xc5670000},{0xc5672000},{0xc5674000},{0xc5676000},{0xc5678000},{0xc567a000},{0xc567c000},{0xc567e000}, +{0xc5680000},{0xc5682000},{0xc5684000},{0xc5686000},{0xc5688000},{0xc568a000},{0xc568c000},{0xc568e000},{0xc5690000},{0xc5692000},{0xc5694000},{0xc5696000},{0xc5698000},{0xc569a000},{0xc569c000},{0xc569e000},{0xc56a0000},{0xc56a2000},{0xc56a4000},{0xc56a6000},{0xc56a8000},{0xc56aa000},{0xc56ac000},{0xc56ae000},{0xc56b0000},{0xc56b2000},{0xc56b4000},{0xc56b6000},{0xc56b8000},{0xc56ba000},{0xc56bc000},{0xc56be000}, +{0xc56c0000},{0xc56c2000},{0xc56c4000},{0xc56c6000},{0xc56c8000},{0xc56ca000},{0xc56cc000},{0xc56ce000},{0xc56d0000},{0xc56d2000},{0xc56d4000},{0xc56d6000},{0xc56d8000},{0xc56da000},{0xc56dc000},{0xc56de000},{0xc56e0000},{0xc56e2000},{0xc56e4000},{0xc56e6000},{0xc56e8000},{0xc56ea000},{0xc56ec000},{0xc56ee000},{0xc56f0000},{0xc56f2000},{0xc56f4000},{0xc56f6000},{0xc56f8000},{0xc56fa000},{0xc56fc000},{0xc56fe000}, +{0xc5700000},{0xc5702000},{0xc5704000},{0xc5706000},{0xc5708000},{0xc570a000},{0xc570c000},{0xc570e000},{0xc5710000},{0xc5712000},{0xc5714000},{0xc5716000},{0xc5718000},{0xc571a000},{0xc571c000},{0xc571e000},{0xc5720000},{0xc5722000},{0xc5724000},{0xc5726000},{0xc5728000},{0xc572a000},{0xc572c000},{0xc572e000},{0xc5730000},{0xc5732000},{0xc5734000},{0xc5736000},{0xc5738000},{0xc573a000},{0xc573c000},{0xc573e000}, +{0xc5740000},{0xc5742000},{0xc5744000},{0xc5746000},{0xc5748000},{0xc574a000},{0xc574c000},{0xc574e000},{0xc5750000},{0xc5752000},{0xc5754000},{0xc5756000},{0xc5758000},{0xc575a000},{0xc575c000},{0xc575e000},{0xc5760000},{0xc5762000},{0xc5764000},{0xc5766000},{0xc5768000},{0xc576a000},{0xc576c000},{0xc576e000},{0xc5770000},{0xc5772000},{0xc5774000},{0xc5776000},{0xc5778000},{0xc577a000},{0xc577c000},{0xc577e000}, +{0xc5780000},{0xc5782000},{0xc5784000},{0xc5786000},{0xc5788000},{0xc578a000},{0xc578c000},{0xc578e000},{0xc5790000},{0xc5792000},{0xc5794000},{0xc5796000},{0xc5798000},{0xc579a000},{0xc579c000},{0xc579e000},{0xc57a0000},{0xc57a2000},{0xc57a4000},{0xc57a6000},{0xc57a8000},{0xc57aa000},{0xc57ac000},{0xc57ae000},{0xc57b0000},{0xc57b2000},{0xc57b4000},{0xc57b6000},{0xc57b8000},{0xc57ba000},{0xc57bc000},{0xc57be000}, +{0xc57c0000},{0xc57c2000},{0xc57c4000},{0xc57c6000},{0xc57c8000},{0xc57ca000},{0xc57cc000},{0xc57ce000},{0xc57d0000},{0xc57d2000},{0xc57d4000},{0xc57d6000},{0xc57d8000},{0xc57da000},{0xc57dc000},{0xc57de000},{0xc57e0000},{0xc57e2000},{0xc57e4000},{0xc57e6000},{0xc57e8000},{0xc57ea000},{0xc57ec000},{0xc57ee000},{0xc57f0000},{0xc57f2000},{0xc57f4000},{0xc57f6000},{0xc57f8000},{0xc57fa000},{0xc57fc000},{0xc57fe000}, +{0xc5800000},{0xc5802000},{0xc5804000},{0xc5806000},{0xc5808000},{0xc580a000},{0xc580c000},{0xc580e000},{0xc5810000},{0xc5812000},{0xc5814000},{0xc5816000},{0xc5818000},{0xc581a000},{0xc581c000},{0xc581e000},{0xc5820000},{0xc5822000},{0xc5824000},{0xc5826000},{0xc5828000},{0xc582a000},{0xc582c000},{0xc582e000},{0xc5830000},{0xc5832000},{0xc5834000},{0xc5836000},{0xc5838000},{0xc583a000},{0xc583c000},{0xc583e000}, +{0xc5840000},{0xc5842000},{0xc5844000},{0xc5846000},{0xc5848000},{0xc584a000},{0xc584c000},{0xc584e000},{0xc5850000},{0xc5852000},{0xc5854000},{0xc5856000},{0xc5858000},{0xc585a000},{0xc585c000},{0xc585e000},{0xc5860000},{0xc5862000},{0xc5864000},{0xc5866000},{0xc5868000},{0xc586a000},{0xc586c000},{0xc586e000},{0xc5870000},{0xc5872000},{0xc5874000},{0xc5876000},{0xc5878000},{0xc587a000},{0xc587c000},{0xc587e000}, +{0xc5880000},{0xc5882000},{0xc5884000},{0xc5886000},{0xc5888000},{0xc588a000},{0xc588c000},{0xc588e000},{0xc5890000},{0xc5892000},{0xc5894000},{0xc5896000},{0xc5898000},{0xc589a000},{0xc589c000},{0xc589e000},{0xc58a0000},{0xc58a2000},{0xc58a4000},{0xc58a6000},{0xc58a8000},{0xc58aa000},{0xc58ac000},{0xc58ae000},{0xc58b0000},{0xc58b2000},{0xc58b4000},{0xc58b6000},{0xc58b8000},{0xc58ba000},{0xc58bc000},{0xc58be000}, +{0xc58c0000},{0xc58c2000},{0xc58c4000},{0xc58c6000},{0xc58c8000},{0xc58ca000},{0xc58cc000},{0xc58ce000},{0xc58d0000},{0xc58d2000},{0xc58d4000},{0xc58d6000},{0xc58d8000},{0xc58da000},{0xc58dc000},{0xc58de000},{0xc58e0000},{0xc58e2000},{0xc58e4000},{0xc58e6000},{0xc58e8000},{0xc58ea000},{0xc58ec000},{0xc58ee000},{0xc58f0000},{0xc58f2000},{0xc58f4000},{0xc58f6000},{0xc58f8000},{0xc58fa000},{0xc58fc000},{0xc58fe000}, +{0xc5900000},{0xc5902000},{0xc5904000},{0xc5906000},{0xc5908000},{0xc590a000},{0xc590c000},{0xc590e000},{0xc5910000},{0xc5912000},{0xc5914000},{0xc5916000},{0xc5918000},{0xc591a000},{0xc591c000},{0xc591e000},{0xc5920000},{0xc5922000},{0xc5924000},{0xc5926000},{0xc5928000},{0xc592a000},{0xc592c000},{0xc592e000},{0xc5930000},{0xc5932000},{0xc5934000},{0xc5936000},{0xc5938000},{0xc593a000},{0xc593c000},{0xc593e000}, +{0xc5940000},{0xc5942000},{0xc5944000},{0xc5946000},{0xc5948000},{0xc594a000},{0xc594c000},{0xc594e000},{0xc5950000},{0xc5952000},{0xc5954000},{0xc5956000},{0xc5958000},{0xc595a000},{0xc595c000},{0xc595e000},{0xc5960000},{0xc5962000},{0xc5964000},{0xc5966000},{0xc5968000},{0xc596a000},{0xc596c000},{0xc596e000},{0xc5970000},{0xc5972000},{0xc5974000},{0xc5976000},{0xc5978000},{0xc597a000},{0xc597c000},{0xc597e000}, +{0xc5980000},{0xc5982000},{0xc5984000},{0xc5986000},{0xc5988000},{0xc598a000},{0xc598c000},{0xc598e000},{0xc5990000},{0xc5992000},{0xc5994000},{0xc5996000},{0xc5998000},{0xc599a000},{0xc599c000},{0xc599e000},{0xc59a0000},{0xc59a2000},{0xc59a4000},{0xc59a6000},{0xc59a8000},{0xc59aa000},{0xc59ac000},{0xc59ae000},{0xc59b0000},{0xc59b2000},{0xc59b4000},{0xc59b6000},{0xc59b8000},{0xc59ba000},{0xc59bc000},{0xc59be000}, +{0xc59c0000},{0xc59c2000},{0xc59c4000},{0xc59c6000},{0xc59c8000},{0xc59ca000},{0xc59cc000},{0xc59ce000},{0xc59d0000},{0xc59d2000},{0xc59d4000},{0xc59d6000},{0xc59d8000},{0xc59da000},{0xc59dc000},{0xc59de000},{0xc59e0000},{0xc59e2000},{0xc59e4000},{0xc59e6000},{0xc59e8000},{0xc59ea000},{0xc59ec000},{0xc59ee000},{0xc59f0000},{0xc59f2000},{0xc59f4000},{0xc59f6000},{0xc59f8000},{0xc59fa000},{0xc59fc000},{0xc59fe000}, +{0xc5a00000},{0xc5a02000},{0xc5a04000},{0xc5a06000},{0xc5a08000},{0xc5a0a000},{0xc5a0c000},{0xc5a0e000},{0xc5a10000},{0xc5a12000},{0xc5a14000},{0xc5a16000},{0xc5a18000},{0xc5a1a000},{0xc5a1c000},{0xc5a1e000},{0xc5a20000},{0xc5a22000},{0xc5a24000},{0xc5a26000},{0xc5a28000},{0xc5a2a000},{0xc5a2c000},{0xc5a2e000},{0xc5a30000},{0xc5a32000},{0xc5a34000},{0xc5a36000},{0xc5a38000},{0xc5a3a000},{0xc5a3c000},{0xc5a3e000}, +{0xc5a40000},{0xc5a42000},{0xc5a44000},{0xc5a46000},{0xc5a48000},{0xc5a4a000},{0xc5a4c000},{0xc5a4e000},{0xc5a50000},{0xc5a52000},{0xc5a54000},{0xc5a56000},{0xc5a58000},{0xc5a5a000},{0xc5a5c000},{0xc5a5e000},{0xc5a60000},{0xc5a62000},{0xc5a64000},{0xc5a66000},{0xc5a68000},{0xc5a6a000},{0xc5a6c000},{0xc5a6e000},{0xc5a70000},{0xc5a72000},{0xc5a74000},{0xc5a76000},{0xc5a78000},{0xc5a7a000},{0xc5a7c000},{0xc5a7e000}, +{0xc5a80000},{0xc5a82000},{0xc5a84000},{0xc5a86000},{0xc5a88000},{0xc5a8a000},{0xc5a8c000},{0xc5a8e000},{0xc5a90000},{0xc5a92000},{0xc5a94000},{0xc5a96000},{0xc5a98000},{0xc5a9a000},{0xc5a9c000},{0xc5a9e000},{0xc5aa0000},{0xc5aa2000},{0xc5aa4000},{0xc5aa6000},{0xc5aa8000},{0xc5aaa000},{0xc5aac000},{0xc5aae000},{0xc5ab0000},{0xc5ab2000},{0xc5ab4000},{0xc5ab6000},{0xc5ab8000},{0xc5aba000},{0xc5abc000},{0xc5abe000}, +{0xc5ac0000},{0xc5ac2000},{0xc5ac4000},{0xc5ac6000},{0xc5ac8000},{0xc5aca000},{0xc5acc000},{0xc5ace000},{0xc5ad0000},{0xc5ad2000},{0xc5ad4000},{0xc5ad6000},{0xc5ad8000},{0xc5ada000},{0xc5adc000},{0xc5ade000},{0xc5ae0000},{0xc5ae2000},{0xc5ae4000},{0xc5ae6000},{0xc5ae8000},{0xc5aea000},{0xc5aec000},{0xc5aee000},{0xc5af0000},{0xc5af2000},{0xc5af4000},{0xc5af6000},{0xc5af8000},{0xc5afa000},{0xc5afc000},{0xc5afe000}, +{0xc5b00000},{0xc5b02000},{0xc5b04000},{0xc5b06000},{0xc5b08000},{0xc5b0a000},{0xc5b0c000},{0xc5b0e000},{0xc5b10000},{0xc5b12000},{0xc5b14000},{0xc5b16000},{0xc5b18000},{0xc5b1a000},{0xc5b1c000},{0xc5b1e000},{0xc5b20000},{0xc5b22000},{0xc5b24000},{0xc5b26000},{0xc5b28000},{0xc5b2a000},{0xc5b2c000},{0xc5b2e000},{0xc5b30000},{0xc5b32000},{0xc5b34000},{0xc5b36000},{0xc5b38000},{0xc5b3a000},{0xc5b3c000},{0xc5b3e000}, +{0xc5b40000},{0xc5b42000},{0xc5b44000},{0xc5b46000},{0xc5b48000},{0xc5b4a000},{0xc5b4c000},{0xc5b4e000},{0xc5b50000},{0xc5b52000},{0xc5b54000},{0xc5b56000},{0xc5b58000},{0xc5b5a000},{0xc5b5c000},{0xc5b5e000},{0xc5b60000},{0xc5b62000},{0xc5b64000},{0xc5b66000},{0xc5b68000},{0xc5b6a000},{0xc5b6c000},{0xc5b6e000},{0xc5b70000},{0xc5b72000},{0xc5b74000},{0xc5b76000},{0xc5b78000},{0xc5b7a000},{0xc5b7c000},{0xc5b7e000}, +{0xc5b80000},{0xc5b82000},{0xc5b84000},{0xc5b86000},{0xc5b88000},{0xc5b8a000},{0xc5b8c000},{0xc5b8e000},{0xc5b90000},{0xc5b92000},{0xc5b94000},{0xc5b96000},{0xc5b98000},{0xc5b9a000},{0xc5b9c000},{0xc5b9e000},{0xc5ba0000},{0xc5ba2000},{0xc5ba4000},{0xc5ba6000},{0xc5ba8000},{0xc5baa000},{0xc5bac000},{0xc5bae000},{0xc5bb0000},{0xc5bb2000},{0xc5bb4000},{0xc5bb6000},{0xc5bb8000},{0xc5bba000},{0xc5bbc000},{0xc5bbe000}, +{0xc5bc0000},{0xc5bc2000},{0xc5bc4000},{0xc5bc6000},{0xc5bc8000},{0xc5bca000},{0xc5bcc000},{0xc5bce000},{0xc5bd0000},{0xc5bd2000},{0xc5bd4000},{0xc5bd6000},{0xc5bd8000},{0xc5bda000},{0xc5bdc000},{0xc5bde000},{0xc5be0000},{0xc5be2000},{0xc5be4000},{0xc5be6000},{0xc5be8000},{0xc5bea000},{0xc5bec000},{0xc5bee000},{0xc5bf0000},{0xc5bf2000},{0xc5bf4000},{0xc5bf6000},{0xc5bf8000},{0xc5bfa000},{0xc5bfc000},{0xc5bfe000}, +{0xc5c00000},{0xc5c02000},{0xc5c04000},{0xc5c06000},{0xc5c08000},{0xc5c0a000},{0xc5c0c000},{0xc5c0e000},{0xc5c10000},{0xc5c12000},{0xc5c14000},{0xc5c16000},{0xc5c18000},{0xc5c1a000},{0xc5c1c000},{0xc5c1e000},{0xc5c20000},{0xc5c22000},{0xc5c24000},{0xc5c26000},{0xc5c28000},{0xc5c2a000},{0xc5c2c000},{0xc5c2e000},{0xc5c30000},{0xc5c32000},{0xc5c34000},{0xc5c36000},{0xc5c38000},{0xc5c3a000},{0xc5c3c000},{0xc5c3e000}, +{0xc5c40000},{0xc5c42000},{0xc5c44000},{0xc5c46000},{0xc5c48000},{0xc5c4a000},{0xc5c4c000},{0xc5c4e000},{0xc5c50000},{0xc5c52000},{0xc5c54000},{0xc5c56000},{0xc5c58000},{0xc5c5a000},{0xc5c5c000},{0xc5c5e000},{0xc5c60000},{0xc5c62000},{0xc5c64000},{0xc5c66000},{0xc5c68000},{0xc5c6a000},{0xc5c6c000},{0xc5c6e000},{0xc5c70000},{0xc5c72000},{0xc5c74000},{0xc5c76000},{0xc5c78000},{0xc5c7a000},{0xc5c7c000},{0xc5c7e000}, +{0xc5c80000},{0xc5c82000},{0xc5c84000},{0xc5c86000},{0xc5c88000},{0xc5c8a000},{0xc5c8c000},{0xc5c8e000},{0xc5c90000},{0xc5c92000},{0xc5c94000},{0xc5c96000},{0xc5c98000},{0xc5c9a000},{0xc5c9c000},{0xc5c9e000},{0xc5ca0000},{0xc5ca2000},{0xc5ca4000},{0xc5ca6000},{0xc5ca8000},{0xc5caa000},{0xc5cac000},{0xc5cae000},{0xc5cb0000},{0xc5cb2000},{0xc5cb4000},{0xc5cb6000},{0xc5cb8000},{0xc5cba000},{0xc5cbc000},{0xc5cbe000}, +{0xc5cc0000},{0xc5cc2000},{0xc5cc4000},{0xc5cc6000},{0xc5cc8000},{0xc5cca000},{0xc5ccc000},{0xc5cce000},{0xc5cd0000},{0xc5cd2000},{0xc5cd4000},{0xc5cd6000},{0xc5cd8000},{0xc5cda000},{0xc5cdc000},{0xc5cde000},{0xc5ce0000},{0xc5ce2000},{0xc5ce4000},{0xc5ce6000},{0xc5ce8000},{0xc5cea000},{0xc5cec000},{0xc5cee000},{0xc5cf0000},{0xc5cf2000},{0xc5cf4000},{0xc5cf6000},{0xc5cf8000},{0xc5cfa000},{0xc5cfc000},{0xc5cfe000}, +{0xc5d00000},{0xc5d02000},{0xc5d04000},{0xc5d06000},{0xc5d08000},{0xc5d0a000},{0xc5d0c000},{0xc5d0e000},{0xc5d10000},{0xc5d12000},{0xc5d14000},{0xc5d16000},{0xc5d18000},{0xc5d1a000},{0xc5d1c000},{0xc5d1e000},{0xc5d20000},{0xc5d22000},{0xc5d24000},{0xc5d26000},{0xc5d28000},{0xc5d2a000},{0xc5d2c000},{0xc5d2e000},{0xc5d30000},{0xc5d32000},{0xc5d34000},{0xc5d36000},{0xc5d38000},{0xc5d3a000},{0xc5d3c000},{0xc5d3e000}, +{0xc5d40000},{0xc5d42000},{0xc5d44000},{0xc5d46000},{0xc5d48000},{0xc5d4a000},{0xc5d4c000},{0xc5d4e000},{0xc5d50000},{0xc5d52000},{0xc5d54000},{0xc5d56000},{0xc5d58000},{0xc5d5a000},{0xc5d5c000},{0xc5d5e000},{0xc5d60000},{0xc5d62000},{0xc5d64000},{0xc5d66000},{0xc5d68000},{0xc5d6a000},{0xc5d6c000},{0xc5d6e000},{0xc5d70000},{0xc5d72000},{0xc5d74000},{0xc5d76000},{0xc5d78000},{0xc5d7a000},{0xc5d7c000},{0xc5d7e000}, +{0xc5d80000},{0xc5d82000},{0xc5d84000},{0xc5d86000},{0xc5d88000},{0xc5d8a000},{0xc5d8c000},{0xc5d8e000},{0xc5d90000},{0xc5d92000},{0xc5d94000},{0xc5d96000},{0xc5d98000},{0xc5d9a000},{0xc5d9c000},{0xc5d9e000},{0xc5da0000},{0xc5da2000},{0xc5da4000},{0xc5da6000},{0xc5da8000},{0xc5daa000},{0xc5dac000},{0xc5dae000},{0xc5db0000},{0xc5db2000},{0xc5db4000},{0xc5db6000},{0xc5db8000},{0xc5dba000},{0xc5dbc000},{0xc5dbe000}, +{0xc5dc0000},{0xc5dc2000},{0xc5dc4000},{0xc5dc6000},{0xc5dc8000},{0xc5dca000},{0xc5dcc000},{0xc5dce000},{0xc5dd0000},{0xc5dd2000},{0xc5dd4000},{0xc5dd6000},{0xc5dd8000},{0xc5dda000},{0xc5ddc000},{0xc5dde000},{0xc5de0000},{0xc5de2000},{0xc5de4000},{0xc5de6000},{0xc5de8000},{0xc5dea000},{0xc5dec000},{0xc5dee000},{0xc5df0000},{0xc5df2000},{0xc5df4000},{0xc5df6000},{0xc5df8000},{0xc5dfa000},{0xc5dfc000},{0xc5dfe000}, +{0xc5e00000},{0xc5e02000},{0xc5e04000},{0xc5e06000},{0xc5e08000},{0xc5e0a000},{0xc5e0c000},{0xc5e0e000},{0xc5e10000},{0xc5e12000},{0xc5e14000},{0xc5e16000},{0xc5e18000},{0xc5e1a000},{0xc5e1c000},{0xc5e1e000},{0xc5e20000},{0xc5e22000},{0xc5e24000},{0xc5e26000},{0xc5e28000},{0xc5e2a000},{0xc5e2c000},{0xc5e2e000},{0xc5e30000},{0xc5e32000},{0xc5e34000},{0xc5e36000},{0xc5e38000},{0xc5e3a000},{0xc5e3c000},{0xc5e3e000}, +{0xc5e40000},{0xc5e42000},{0xc5e44000},{0xc5e46000},{0xc5e48000},{0xc5e4a000},{0xc5e4c000},{0xc5e4e000},{0xc5e50000},{0xc5e52000},{0xc5e54000},{0xc5e56000},{0xc5e58000},{0xc5e5a000},{0xc5e5c000},{0xc5e5e000},{0xc5e60000},{0xc5e62000},{0xc5e64000},{0xc5e66000},{0xc5e68000},{0xc5e6a000},{0xc5e6c000},{0xc5e6e000},{0xc5e70000},{0xc5e72000},{0xc5e74000},{0xc5e76000},{0xc5e78000},{0xc5e7a000},{0xc5e7c000},{0xc5e7e000}, +{0xc5e80000},{0xc5e82000},{0xc5e84000},{0xc5e86000},{0xc5e88000},{0xc5e8a000},{0xc5e8c000},{0xc5e8e000},{0xc5e90000},{0xc5e92000},{0xc5e94000},{0xc5e96000},{0xc5e98000},{0xc5e9a000},{0xc5e9c000},{0xc5e9e000},{0xc5ea0000},{0xc5ea2000},{0xc5ea4000},{0xc5ea6000},{0xc5ea8000},{0xc5eaa000},{0xc5eac000},{0xc5eae000},{0xc5eb0000},{0xc5eb2000},{0xc5eb4000},{0xc5eb6000},{0xc5eb8000},{0xc5eba000},{0xc5ebc000},{0xc5ebe000}, +{0xc5ec0000},{0xc5ec2000},{0xc5ec4000},{0xc5ec6000},{0xc5ec8000},{0xc5eca000},{0xc5ecc000},{0xc5ece000},{0xc5ed0000},{0xc5ed2000},{0xc5ed4000},{0xc5ed6000},{0xc5ed8000},{0xc5eda000},{0xc5edc000},{0xc5ede000},{0xc5ee0000},{0xc5ee2000},{0xc5ee4000},{0xc5ee6000},{0xc5ee8000},{0xc5eea000},{0xc5eec000},{0xc5eee000},{0xc5ef0000},{0xc5ef2000},{0xc5ef4000},{0xc5ef6000},{0xc5ef8000},{0xc5efa000},{0xc5efc000},{0xc5efe000}, +{0xc5f00000},{0xc5f02000},{0xc5f04000},{0xc5f06000},{0xc5f08000},{0xc5f0a000},{0xc5f0c000},{0xc5f0e000},{0xc5f10000},{0xc5f12000},{0xc5f14000},{0xc5f16000},{0xc5f18000},{0xc5f1a000},{0xc5f1c000},{0xc5f1e000},{0xc5f20000},{0xc5f22000},{0xc5f24000},{0xc5f26000},{0xc5f28000},{0xc5f2a000},{0xc5f2c000},{0xc5f2e000},{0xc5f30000},{0xc5f32000},{0xc5f34000},{0xc5f36000},{0xc5f38000},{0xc5f3a000},{0xc5f3c000},{0xc5f3e000}, +{0xc5f40000},{0xc5f42000},{0xc5f44000},{0xc5f46000},{0xc5f48000},{0xc5f4a000},{0xc5f4c000},{0xc5f4e000},{0xc5f50000},{0xc5f52000},{0xc5f54000},{0xc5f56000},{0xc5f58000},{0xc5f5a000},{0xc5f5c000},{0xc5f5e000},{0xc5f60000},{0xc5f62000},{0xc5f64000},{0xc5f66000},{0xc5f68000},{0xc5f6a000},{0xc5f6c000},{0xc5f6e000},{0xc5f70000},{0xc5f72000},{0xc5f74000},{0xc5f76000},{0xc5f78000},{0xc5f7a000},{0xc5f7c000},{0xc5f7e000}, +{0xc5f80000},{0xc5f82000},{0xc5f84000},{0xc5f86000},{0xc5f88000},{0xc5f8a000},{0xc5f8c000},{0xc5f8e000},{0xc5f90000},{0xc5f92000},{0xc5f94000},{0xc5f96000},{0xc5f98000},{0xc5f9a000},{0xc5f9c000},{0xc5f9e000},{0xc5fa0000},{0xc5fa2000},{0xc5fa4000},{0xc5fa6000},{0xc5fa8000},{0xc5faa000},{0xc5fac000},{0xc5fae000},{0xc5fb0000},{0xc5fb2000},{0xc5fb4000},{0xc5fb6000},{0xc5fb8000},{0xc5fba000},{0xc5fbc000},{0xc5fbe000}, +{0xc5fc0000},{0xc5fc2000},{0xc5fc4000},{0xc5fc6000},{0xc5fc8000},{0xc5fca000},{0xc5fcc000},{0xc5fce000},{0xc5fd0000},{0xc5fd2000},{0xc5fd4000},{0xc5fd6000},{0xc5fd8000},{0xc5fda000},{0xc5fdc000},{0xc5fde000},{0xc5fe0000},{0xc5fe2000},{0xc5fe4000},{0xc5fe6000},{0xc5fe8000},{0xc5fea000},{0xc5fec000},{0xc5fee000},{0xc5ff0000},{0xc5ff2000},{0xc5ff4000},{0xc5ff6000},{0xc5ff8000},{0xc5ffa000},{0xc5ffc000},{0xc5ffe000}, +{0xc6000000},{0xc6002000},{0xc6004000},{0xc6006000},{0xc6008000},{0xc600a000},{0xc600c000},{0xc600e000},{0xc6010000},{0xc6012000},{0xc6014000},{0xc6016000},{0xc6018000},{0xc601a000},{0xc601c000},{0xc601e000},{0xc6020000},{0xc6022000},{0xc6024000},{0xc6026000},{0xc6028000},{0xc602a000},{0xc602c000},{0xc602e000},{0xc6030000},{0xc6032000},{0xc6034000},{0xc6036000},{0xc6038000},{0xc603a000},{0xc603c000},{0xc603e000}, +{0xc6040000},{0xc6042000},{0xc6044000},{0xc6046000},{0xc6048000},{0xc604a000},{0xc604c000},{0xc604e000},{0xc6050000},{0xc6052000},{0xc6054000},{0xc6056000},{0xc6058000},{0xc605a000},{0xc605c000},{0xc605e000},{0xc6060000},{0xc6062000},{0xc6064000},{0xc6066000},{0xc6068000},{0xc606a000},{0xc606c000},{0xc606e000},{0xc6070000},{0xc6072000},{0xc6074000},{0xc6076000},{0xc6078000},{0xc607a000},{0xc607c000},{0xc607e000}, +{0xc6080000},{0xc6082000},{0xc6084000},{0xc6086000},{0xc6088000},{0xc608a000},{0xc608c000},{0xc608e000},{0xc6090000},{0xc6092000},{0xc6094000},{0xc6096000},{0xc6098000},{0xc609a000},{0xc609c000},{0xc609e000},{0xc60a0000},{0xc60a2000},{0xc60a4000},{0xc60a6000},{0xc60a8000},{0xc60aa000},{0xc60ac000},{0xc60ae000},{0xc60b0000},{0xc60b2000},{0xc60b4000},{0xc60b6000},{0xc60b8000},{0xc60ba000},{0xc60bc000},{0xc60be000}, +{0xc60c0000},{0xc60c2000},{0xc60c4000},{0xc60c6000},{0xc60c8000},{0xc60ca000},{0xc60cc000},{0xc60ce000},{0xc60d0000},{0xc60d2000},{0xc60d4000},{0xc60d6000},{0xc60d8000},{0xc60da000},{0xc60dc000},{0xc60de000},{0xc60e0000},{0xc60e2000},{0xc60e4000},{0xc60e6000},{0xc60e8000},{0xc60ea000},{0xc60ec000},{0xc60ee000},{0xc60f0000},{0xc60f2000},{0xc60f4000},{0xc60f6000},{0xc60f8000},{0xc60fa000},{0xc60fc000},{0xc60fe000}, +{0xc6100000},{0xc6102000},{0xc6104000},{0xc6106000},{0xc6108000},{0xc610a000},{0xc610c000},{0xc610e000},{0xc6110000},{0xc6112000},{0xc6114000},{0xc6116000},{0xc6118000},{0xc611a000},{0xc611c000},{0xc611e000},{0xc6120000},{0xc6122000},{0xc6124000},{0xc6126000},{0xc6128000},{0xc612a000},{0xc612c000},{0xc612e000},{0xc6130000},{0xc6132000},{0xc6134000},{0xc6136000},{0xc6138000},{0xc613a000},{0xc613c000},{0xc613e000}, +{0xc6140000},{0xc6142000},{0xc6144000},{0xc6146000},{0xc6148000},{0xc614a000},{0xc614c000},{0xc614e000},{0xc6150000},{0xc6152000},{0xc6154000},{0xc6156000},{0xc6158000},{0xc615a000},{0xc615c000},{0xc615e000},{0xc6160000},{0xc6162000},{0xc6164000},{0xc6166000},{0xc6168000},{0xc616a000},{0xc616c000},{0xc616e000},{0xc6170000},{0xc6172000},{0xc6174000},{0xc6176000},{0xc6178000},{0xc617a000},{0xc617c000},{0xc617e000}, +{0xc6180000},{0xc6182000},{0xc6184000},{0xc6186000},{0xc6188000},{0xc618a000},{0xc618c000},{0xc618e000},{0xc6190000},{0xc6192000},{0xc6194000},{0xc6196000},{0xc6198000},{0xc619a000},{0xc619c000},{0xc619e000},{0xc61a0000},{0xc61a2000},{0xc61a4000},{0xc61a6000},{0xc61a8000},{0xc61aa000},{0xc61ac000},{0xc61ae000},{0xc61b0000},{0xc61b2000},{0xc61b4000},{0xc61b6000},{0xc61b8000},{0xc61ba000},{0xc61bc000},{0xc61be000}, +{0xc61c0000},{0xc61c2000},{0xc61c4000},{0xc61c6000},{0xc61c8000},{0xc61ca000},{0xc61cc000},{0xc61ce000},{0xc61d0000},{0xc61d2000},{0xc61d4000},{0xc61d6000},{0xc61d8000},{0xc61da000},{0xc61dc000},{0xc61de000},{0xc61e0000},{0xc61e2000},{0xc61e4000},{0xc61e6000},{0xc61e8000},{0xc61ea000},{0xc61ec000},{0xc61ee000},{0xc61f0000},{0xc61f2000},{0xc61f4000},{0xc61f6000},{0xc61f8000},{0xc61fa000},{0xc61fc000},{0xc61fe000}, +{0xc6200000},{0xc6202000},{0xc6204000},{0xc6206000},{0xc6208000},{0xc620a000},{0xc620c000},{0xc620e000},{0xc6210000},{0xc6212000},{0xc6214000},{0xc6216000},{0xc6218000},{0xc621a000},{0xc621c000},{0xc621e000},{0xc6220000},{0xc6222000},{0xc6224000},{0xc6226000},{0xc6228000},{0xc622a000},{0xc622c000},{0xc622e000},{0xc6230000},{0xc6232000},{0xc6234000},{0xc6236000},{0xc6238000},{0xc623a000},{0xc623c000},{0xc623e000}, +{0xc6240000},{0xc6242000},{0xc6244000},{0xc6246000},{0xc6248000},{0xc624a000},{0xc624c000},{0xc624e000},{0xc6250000},{0xc6252000},{0xc6254000},{0xc6256000},{0xc6258000},{0xc625a000},{0xc625c000},{0xc625e000},{0xc6260000},{0xc6262000},{0xc6264000},{0xc6266000},{0xc6268000},{0xc626a000},{0xc626c000},{0xc626e000},{0xc6270000},{0xc6272000},{0xc6274000},{0xc6276000},{0xc6278000},{0xc627a000},{0xc627c000},{0xc627e000}, +{0xc6280000},{0xc6282000},{0xc6284000},{0xc6286000},{0xc6288000},{0xc628a000},{0xc628c000},{0xc628e000},{0xc6290000},{0xc6292000},{0xc6294000},{0xc6296000},{0xc6298000},{0xc629a000},{0xc629c000},{0xc629e000},{0xc62a0000},{0xc62a2000},{0xc62a4000},{0xc62a6000},{0xc62a8000},{0xc62aa000},{0xc62ac000},{0xc62ae000},{0xc62b0000},{0xc62b2000},{0xc62b4000},{0xc62b6000},{0xc62b8000},{0xc62ba000},{0xc62bc000},{0xc62be000}, +{0xc62c0000},{0xc62c2000},{0xc62c4000},{0xc62c6000},{0xc62c8000},{0xc62ca000},{0xc62cc000},{0xc62ce000},{0xc62d0000},{0xc62d2000},{0xc62d4000},{0xc62d6000},{0xc62d8000},{0xc62da000},{0xc62dc000},{0xc62de000},{0xc62e0000},{0xc62e2000},{0xc62e4000},{0xc62e6000},{0xc62e8000},{0xc62ea000},{0xc62ec000},{0xc62ee000},{0xc62f0000},{0xc62f2000},{0xc62f4000},{0xc62f6000},{0xc62f8000},{0xc62fa000},{0xc62fc000},{0xc62fe000}, +{0xc6300000},{0xc6302000},{0xc6304000},{0xc6306000},{0xc6308000},{0xc630a000},{0xc630c000},{0xc630e000},{0xc6310000},{0xc6312000},{0xc6314000},{0xc6316000},{0xc6318000},{0xc631a000},{0xc631c000},{0xc631e000},{0xc6320000},{0xc6322000},{0xc6324000},{0xc6326000},{0xc6328000},{0xc632a000},{0xc632c000},{0xc632e000},{0xc6330000},{0xc6332000},{0xc6334000},{0xc6336000},{0xc6338000},{0xc633a000},{0xc633c000},{0xc633e000}, +{0xc6340000},{0xc6342000},{0xc6344000},{0xc6346000},{0xc6348000},{0xc634a000},{0xc634c000},{0xc634e000},{0xc6350000},{0xc6352000},{0xc6354000},{0xc6356000},{0xc6358000},{0xc635a000},{0xc635c000},{0xc635e000},{0xc6360000},{0xc6362000},{0xc6364000},{0xc6366000},{0xc6368000},{0xc636a000},{0xc636c000},{0xc636e000},{0xc6370000},{0xc6372000},{0xc6374000},{0xc6376000},{0xc6378000},{0xc637a000},{0xc637c000},{0xc637e000}, +{0xc6380000},{0xc6382000},{0xc6384000},{0xc6386000},{0xc6388000},{0xc638a000},{0xc638c000},{0xc638e000},{0xc6390000},{0xc6392000},{0xc6394000},{0xc6396000},{0xc6398000},{0xc639a000},{0xc639c000},{0xc639e000},{0xc63a0000},{0xc63a2000},{0xc63a4000},{0xc63a6000},{0xc63a8000},{0xc63aa000},{0xc63ac000},{0xc63ae000},{0xc63b0000},{0xc63b2000},{0xc63b4000},{0xc63b6000},{0xc63b8000},{0xc63ba000},{0xc63bc000},{0xc63be000}, +{0xc63c0000},{0xc63c2000},{0xc63c4000},{0xc63c6000},{0xc63c8000},{0xc63ca000},{0xc63cc000},{0xc63ce000},{0xc63d0000},{0xc63d2000},{0xc63d4000},{0xc63d6000},{0xc63d8000},{0xc63da000},{0xc63dc000},{0xc63de000},{0xc63e0000},{0xc63e2000},{0xc63e4000},{0xc63e6000},{0xc63e8000},{0xc63ea000},{0xc63ec000},{0xc63ee000},{0xc63f0000},{0xc63f2000},{0xc63f4000},{0xc63f6000},{0xc63f8000},{0xc63fa000},{0xc63fc000},{0xc63fe000}, +{0xc6400000},{0xc6402000},{0xc6404000},{0xc6406000},{0xc6408000},{0xc640a000},{0xc640c000},{0xc640e000},{0xc6410000},{0xc6412000},{0xc6414000},{0xc6416000},{0xc6418000},{0xc641a000},{0xc641c000},{0xc641e000},{0xc6420000},{0xc6422000},{0xc6424000},{0xc6426000},{0xc6428000},{0xc642a000},{0xc642c000},{0xc642e000},{0xc6430000},{0xc6432000},{0xc6434000},{0xc6436000},{0xc6438000},{0xc643a000},{0xc643c000},{0xc643e000}, +{0xc6440000},{0xc6442000},{0xc6444000},{0xc6446000},{0xc6448000},{0xc644a000},{0xc644c000},{0xc644e000},{0xc6450000},{0xc6452000},{0xc6454000},{0xc6456000},{0xc6458000},{0xc645a000},{0xc645c000},{0xc645e000},{0xc6460000},{0xc6462000},{0xc6464000},{0xc6466000},{0xc6468000},{0xc646a000},{0xc646c000},{0xc646e000},{0xc6470000},{0xc6472000},{0xc6474000},{0xc6476000},{0xc6478000},{0xc647a000},{0xc647c000},{0xc647e000}, +{0xc6480000},{0xc6482000},{0xc6484000},{0xc6486000},{0xc6488000},{0xc648a000},{0xc648c000},{0xc648e000},{0xc6490000},{0xc6492000},{0xc6494000},{0xc6496000},{0xc6498000},{0xc649a000},{0xc649c000},{0xc649e000},{0xc64a0000},{0xc64a2000},{0xc64a4000},{0xc64a6000},{0xc64a8000},{0xc64aa000},{0xc64ac000},{0xc64ae000},{0xc64b0000},{0xc64b2000},{0xc64b4000},{0xc64b6000},{0xc64b8000},{0xc64ba000},{0xc64bc000},{0xc64be000}, +{0xc64c0000},{0xc64c2000},{0xc64c4000},{0xc64c6000},{0xc64c8000},{0xc64ca000},{0xc64cc000},{0xc64ce000},{0xc64d0000},{0xc64d2000},{0xc64d4000},{0xc64d6000},{0xc64d8000},{0xc64da000},{0xc64dc000},{0xc64de000},{0xc64e0000},{0xc64e2000},{0xc64e4000},{0xc64e6000},{0xc64e8000},{0xc64ea000},{0xc64ec000},{0xc64ee000},{0xc64f0000},{0xc64f2000},{0xc64f4000},{0xc64f6000},{0xc64f8000},{0xc64fa000},{0xc64fc000},{0xc64fe000}, +{0xc6500000},{0xc6502000},{0xc6504000},{0xc6506000},{0xc6508000},{0xc650a000},{0xc650c000},{0xc650e000},{0xc6510000},{0xc6512000},{0xc6514000},{0xc6516000},{0xc6518000},{0xc651a000},{0xc651c000},{0xc651e000},{0xc6520000},{0xc6522000},{0xc6524000},{0xc6526000},{0xc6528000},{0xc652a000},{0xc652c000},{0xc652e000},{0xc6530000},{0xc6532000},{0xc6534000},{0xc6536000},{0xc6538000},{0xc653a000},{0xc653c000},{0xc653e000}, +{0xc6540000},{0xc6542000},{0xc6544000},{0xc6546000},{0xc6548000},{0xc654a000},{0xc654c000},{0xc654e000},{0xc6550000},{0xc6552000},{0xc6554000},{0xc6556000},{0xc6558000},{0xc655a000},{0xc655c000},{0xc655e000},{0xc6560000},{0xc6562000},{0xc6564000},{0xc6566000},{0xc6568000},{0xc656a000},{0xc656c000},{0xc656e000},{0xc6570000},{0xc6572000},{0xc6574000},{0xc6576000},{0xc6578000},{0xc657a000},{0xc657c000},{0xc657e000}, +{0xc6580000},{0xc6582000},{0xc6584000},{0xc6586000},{0xc6588000},{0xc658a000},{0xc658c000},{0xc658e000},{0xc6590000},{0xc6592000},{0xc6594000},{0xc6596000},{0xc6598000},{0xc659a000},{0xc659c000},{0xc659e000},{0xc65a0000},{0xc65a2000},{0xc65a4000},{0xc65a6000},{0xc65a8000},{0xc65aa000},{0xc65ac000},{0xc65ae000},{0xc65b0000},{0xc65b2000},{0xc65b4000},{0xc65b6000},{0xc65b8000},{0xc65ba000},{0xc65bc000},{0xc65be000}, +{0xc65c0000},{0xc65c2000},{0xc65c4000},{0xc65c6000},{0xc65c8000},{0xc65ca000},{0xc65cc000},{0xc65ce000},{0xc65d0000},{0xc65d2000},{0xc65d4000},{0xc65d6000},{0xc65d8000},{0xc65da000},{0xc65dc000},{0xc65de000},{0xc65e0000},{0xc65e2000},{0xc65e4000},{0xc65e6000},{0xc65e8000},{0xc65ea000},{0xc65ec000},{0xc65ee000},{0xc65f0000},{0xc65f2000},{0xc65f4000},{0xc65f6000},{0xc65f8000},{0xc65fa000},{0xc65fc000},{0xc65fe000}, +{0xc6600000},{0xc6602000},{0xc6604000},{0xc6606000},{0xc6608000},{0xc660a000},{0xc660c000},{0xc660e000},{0xc6610000},{0xc6612000},{0xc6614000},{0xc6616000},{0xc6618000},{0xc661a000},{0xc661c000},{0xc661e000},{0xc6620000},{0xc6622000},{0xc6624000},{0xc6626000},{0xc6628000},{0xc662a000},{0xc662c000},{0xc662e000},{0xc6630000},{0xc6632000},{0xc6634000},{0xc6636000},{0xc6638000},{0xc663a000},{0xc663c000},{0xc663e000}, +{0xc6640000},{0xc6642000},{0xc6644000},{0xc6646000},{0xc6648000},{0xc664a000},{0xc664c000},{0xc664e000},{0xc6650000},{0xc6652000},{0xc6654000},{0xc6656000},{0xc6658000},{0xc665a000},{0xc665c000},{0xc665e000},{0xc6660000},{0xc6662000},{0xc6664000},{0xc6666000},{0xc6668000},{0xc666a000},{0xc666c000},{0xc666e000},{0xc6670000},{0xc6672000},{0xc6674000},{0xc6676000},{0xc6678000},{0xc667a000},{0xc667c000},{0xc667e000}, +{0xc6680000},{0xc6682000},{0xc6684000},{0xc6686000},{0xc6688000},{0xc668a000},{0xc668c000},{0xc668e000},{0xc6690000},{0xc6692000},{0xc6694000},{0xc6696000},{0xc6698000},{0xc669a000},{0xc669c000},{0xc669e000},{0xc66a0000},{0xc66a2000},{0xc66a4000},{0xc66a6000},{0xc66a8000},{0xc66aa000},{0xc66ac000},{0xc66ae000},{0xc66b0000},{0xc66b2000},{0xc66b4000},{0xc66b6000},{0xc66b8000},{0xc66ba000},{0xc66bc000},{0xc66be000}, +{0xc66c0000},{0xc66c2000},{0xc66c4000},{0xc66c6000},{0xc66c8000},{0xc66ca000},{0xc66cc000},{0xc66ce000},{0xc66d0000},{0xc66d2000},{0xc66d4000},{0xc66d6000},{0xc66d8000},{0xc66da000},{0xc66dc000},{0xc66de000},{0xc66e0000},{0xc66e2000},{0xc66e4000},{0xc66e6000},{0xc66e8000},{0xc66ea000},{0xc66ec000},{0xc66ee000},{0xc66f0000},{0xc66f2000},{0xc66f4000},{0xc66f6000},{0xc66f8000},{0xc66fa000},{0xc66fc000},{0xc66fe000}, +{0xc6700000},{0xc6702000},{0xc6704000},{0xc6706000},{0xc6708000},{0xc670a000},{0xc670c000},{0xc670e000},{0xc6710000},{0xc6712000},{0xc6714000},{0xc6716000},{0xc6718000},{0xc671a000},{0xc671c000},{0xc671e000},{0xc6720000},{0xc6722000},{0xc6724000},{0xc6726000},{0xc6728000},{0xc672a000},{0xc672c000},{0xc672e000},{0xc6730000},{0xc6732000},{0xc6734000},{0xc6736000},{0xc6738000},{0xc673a000},{0xc673c000},{0xc673e000}, +{0xc6740000},{0xc6742000},{0xc6744000},{0xc6746000},{0xc6748000},{0xc674a000},{0xc674c000},{0xc674e000},{0xc6750000},{0xc6752000},{0xc6754000},{0xc6756000},{0xc6758000},{0xc675a000},{0xc675c000},{0xc675e000},{0xc6760000},{0xc6762000},{0xc6764000},{0xc6766000},{0xc6768000},{0xc676a000},{0xc676c000},{0xc676e000},{0xc6770000},{0xc6772000},{0xc6774000},{0xc6776000},{0xc6778000},{0xc677a000},{0xc677c000},{0xc677e000}, +{0xc6780000},{0xc6782000},{0xc6784000},{0xc6786000},{0xc6788000},{0xc678a000},{0xc678c000},{0xc678e000},{0xc6790000},{0xc6792000},{0xc6794000},{0xc6796000},{0xc6798000},{0xc679a000},{0xc679c000},{0xc679e000},{0xc67a0000},{0xc67a2000},{0xc67a4000},{0xc67a6000},{0xc67a8000},{0xc67aa000},{0xc67ac000},{0xc67ae000},{0xc67b0000},{0xc67b2000},{0xc67b4000},{0xc67b6000},{0xc67b8000},{0xc67ba000},{0xc67bc000},{0xc67be000}, +{0xc67c0000},{0xc67c2000},{0xc67c4000},{0xc67c6000},{0xc67c8000},{0xc67ca000},{0xc67cc000},{0xc67ce000},{0xc67d0000},{0xc67d2000},{0xc67d4000},{0xc67d6000},{0xc67d8000},{0xc67da000},{0xc67dc000},{0xc67de000},{0xc67e0000},{0xc67e2000},{0xc67e4000},{0xc67e6000},{0xc67e8000},{0xc67ea000},{0xc67ec000},{0xc67ee000},{0xc67f0000},{0xc67f2000},{0xc67f4000},{0xc67f6000},{0xc67f8000},{0xc67fa000},{0xc67fc000},{0xc67fe000}, +{0xc6800000},{0xc6802000},{0xc6804000},{0xc6806000},{0xc6808000},{0xc680a000},{0xc680c000},{0xc680e000},{0xc6810000},{0xc6812000},{0xc6814000},{0xc6816000},{0xc6818000},{0xc681a000},{0xc681c000},{0xc681e000},{0xc6820000},{0xc6822000},{0xc6824000},{0xc6826000},{0xc6828000},{0xc682a000},{0xc682c000},{0xc682e000},{0xc6830000},{0xc6832000},{0xc6834000},{0xc6836000},{0xc6838000},{0xc683a000},{0xc683c000},{0xc683e000}, +{0xc6840000},{0xc6842000},{0xc6844000},{0xc6846000},{0xc6848000},{0xc684a000},{0xc684c000},{0xc684e000},{0xc6850000},{0xc6852000},{0xc6854000},{0xc6856000},{0xc6858000},{0xc685a000},{0xc685c000},{0xc685e000},{0xc6860000},{0xc6862000},{0xc6864000},{0xc6866000},{0xc6868000},{0xc686a000},{0xc686c000},{0xc686e000},{0xc6870000},{0xc6872000},{0xc6874000},{0xc6876000},{0xc6878000},{0xc687a000},{0xc687c000},{0xc687e000}, +{0xc6880000},{0xc6882000},{0xc6884000},{0xc6886000},{0xc6888000},{0xc688a000},{0xc688c000},{0xc688e000},{0xc6890000},{0xc6892000},{0xc6894000},{0xc6896000},{0xc6898000},{0xc689a000},{0xc689c000},{0xc689e000},{0xc68a0000},{0xc68a2000},{0xc68a4000},{0xc68a6000},{0xc68a8000},{0xc68aa000},{0xc68ac000},{0xc68ae000},{0xc68b0000},{0xc68b2000},{0xc68b4000},{0xc68b6000},{0xc68b8000},{0xc68ba000},{0xc68bc000},{0xc68be000}, +{0xc68c0000},{0xc68c2000},{0xc68c4000},{0xc68c6000},{0xc68c8000},{0xc68ca000},{0xc68cc000},{0xc68ce000},{0xc68d0000},{0xc68d2000},{0xc68d4000},{0xc68d6000},{0xc68d8000},{0xc68da000},{0xc68dc000},{0xc68de000},{0xc68e0000},{0xc68e2000},{0xc68e4000},{0xc68e6000},{0xc68e8000},{0xc68ea000},{0xc68ec000},{0xc68ee000},{0xc68f0000},{0xc68f2000},{0xc68f4000},{0xc68f6000},{0xc68f8000},{0xc68fa000},{0xc68fc000},{0xc68fe000}, +{0xc6900000},{0xc6902000},{0xc6904000},{0xc6906000},{0xc6908000},{0xc690a000},{0xc690c000},{0xc690e000},{0xc6910000},{0xc6912000},{0xc6914000},{0xc6916000},{0xc6918000},{0xc691a000},{0xc691c000},{0xc691e000},{0xc6920000},{0xc6922000},{0xc6924000},{0xc6926000},{0xc6928000},{0xc692a000},{0xc692c000},{0xc692e000},{0xc6930000},{0xc6932000},{0xc6934000},{0xc6936000},{0xc6938000},{0xc693a000},{0xc693c000},{0xc693e000}, +{0xc6940000},{0xc6942000},{0xc6944000},{0xc6946000},{0xc6948000},{0xc694a000},{0xc694c000},{0xc694e000},{0xc6950000},{0xc6952000},{0xc6954000},{0xc6956000},{0xc6958000},{0xc695a000},{0xc695c000},{0xc695e000},{0xc6960000},{0xc6962000},{0xc6964000},{0xc6966000},{0xc6968000},{0xc696a000},{0xc696c000},{0xc696e000},{0xc6970000},{0xc6972000},{0xc6974000},{0xc6976000},{0xc6978000},{0xc697a000},{0xc697c000},{0xc697e000}, +{0xc6980000},{0xc6982000},{0xc6984000},{0xc6986000},{0xc6988000},{0xc698a000},{0xc698c000},{0xc698e000},{0xc6990000},{0xc6992000},{0xc6994000},{0xc6996000},{0xc6998000},{0xc699a000},{0xc699c000},{0xc699e000},{0xc69a0000},{0xc69a2000},{0xc69a4000},{0xc69a6000},{0xc69a8000},{0xc69aa000},{0xc69ac000},{0xc69ae000},{0xc69b0000},{0xc69b2000},{0xc69b4000},{0xc69b6000},{0xc69b8000},{0xc69ba000},{0xc69bc000},{0xc69be000}, +{0xc69c0000},{0xc69c2000},{0xc69c4000},{0xc69c6000},{0xc69c8000},{0xc69ca000},{0xc69cc000},{0xc69ce000},{0xc69d0000},{0xc69d2000},{0xc69d4000},{0xc69d6000},{0xc69d8000},{0xc69da000},{0xc69dc000},{0xc69de000},{0xc69e0000},{0xc69e2000},{0xc69e4000},{0xc69e6000},{0xc69e8000},{0xc69ea000},{0xc69ec000},{0xc69ee000},{0xc69f0000},{0xc69f2000},{0xc69f4000},{0xc69f6000},{0xc69f8000},{0xc69fa000},{0xc69fc000},{0xc69fe000}, +{0xc6a00000},{0xc6a02000},{0xc6a04000},{0xc6a06000},{0xc6a08000},{0xc6a0a000},{0xc6a0c000},{0xc6a0e000},{0xc6a10000},{0xc6a12000},{0xc6a14000},{0xc6a16000},{0xc6a18000},{0xc6a1a000},{0xc6a1c000},{0xc6a1e000},{0xc6a20000},{0xc6a22000},{0xc6a24000},{0xc6a26000},{0xc6a28000},{0xc6a2a000},{0xc6a2c000},{0xc6a2e000},{0xc6a30000},{0xc6a32000},{0xc6a34000},{0xc6a36000},{0xc6a38000},{0xc6a3a000},{0xc6a3c000},{0xc6a3e000}, +{0xc6a40000},{0xc6a42000},{0xc6a44000},{0xc6a46000},{0xc6a48000},{0xc6a4a000},{0xc6a4c000},{0xc6a4e000},{0xc6a50000},{0xc6a52000},{0xc6a54000},{0xc6a56000},{0xc6a58000},{0xc6a5a000},{0xc6a5c000},{0xc6a5e000},{0xc6a60000},{0xc6a62000},{0xc6a64000},{0xc6a66000},{0xc6a68000},{0xc6a6a000},{0xc6a6c000},{0xc6a6e000},{0xc6a70000},{0xc6a72000},{0xc6a74000},{0xc6a76000},{0xc6a78000},{0xc6a7a000},{0xc6a7c000},{0xc6a7e000}, +{0xc6a80000},{0xc6a82000},{0xc6a84000},{0xc6a86000},{0xc6a88000},{0xc6a8a000},{0xc6a8c000},{0xc6a8e000},{0xc6a90000},{0xc6a92000},{0xc6a94000},{0xc6a96000},{0xc6a98000},{0xc6a9a000},{0xc6a9c000},{0xc6a9e000},{0xc6aa0000},{0xc6aa2000},{0xc6aa4000},{0xc6aa6000},{0xc6aa8000},{0xc6aaa000},{0xc6aac000},{0xc6aae000},{0xc6ab0000},{0xc6ab2000},{0xc6ab4000},{0xc6ab6000},{0xc6ab8000},{0xc6aba000},{0xc6abc000},{0xc6abe000}, +{0xc6ac0000},{0xc6ac2000},{0xc6ac4000},{0xc6ac6000},{0xc6ac8000},{0xc6aca000},{0xc6acc000},{0xc6ace000},{0xc6ad0000},{0xc6ad2000},{0xc6ad4000},{0xc6ad6000},{0xc6ad8000},{0xc6ada000},{0xc6adc000},{0xc6ade000},{0xc6ae0000},{0xc6ae2000},{0xc6ae4000},{0xc6ae6000},{0xc6ae8000},{0xc6aea000},{0xc6aec000},{0xc6aee000},{0xc6af0000},{0xc6af2000},{0xc6af4000},{0xc6af6000},{0xc6af8000},{0xc6afa000},{0xc6afc000},{0xc6afe000}, +{0xc6b00000},{0xc6b02000},{0xc6b04000},{0xc6b06000},{0xc6b08000},{0xc6b0a000},{0xc6b0c000},{0xc6b0e000},{0xc6b10000},{0xc6b12000},{0xc6b14000},{0xc6b16000},{0xc6b18000},{0xc6b1a000},{0xc6b1c000},{0xc6b1e000},{0xc6b20000},{0xc6b22000},{0xc6b24000},{0xc6b26000},{0xc6b28000},{0xc6b2a000},{0xc6b2c000},{0xc6b2e000},{0xc6b30000},{0xc6b32000},{0xc6b34000},{0xc6b36000},{0xc6b38000},{0xc6b3a000},{0xc6b3c000},{0xc6b3e000}, +{0xc6b40000},{0xc6b42000},{0xc6b44000},{0xc6b46000},{0xc6b48000},{0xc6b4a000},{0xc6b4c000},{0xc6b4e000},{0xc6b50000},{0xc6b52000},{0xc6b54000},{0xc6b56000},{0xc6b58000},{0xc6b5a000},{0xc6b5c000},{0xc6b5e000},{0xc6b60000},{0xc6b62000},{0xc6b64000},{0xc6b66000},{0xc6b68000},{0xc6b6a000},{0xc6b6c000},{0xc6b6e000},{0xc6b70000},{0xc6b72000},{0xc6b74000},{0xc6b76000},{0xc6b78000},{0xc6b7a000},{0xc6b7c000},{0xc6b7e000}, +{0xc6b80000},{0xc6b82000},{0xc6b84000},{0xc6b86000},{0xc6b88000},{0xc6b8a000},{0xc6b8c000},{0xc6b8e000},{0xc6b90000},{0xc6b92000},{0xc6b94000},{0xc6b96000},{0xc6b98000},{0xc6b9a000},{0xc6b9c000},{0xc6b9e000},{0xc6ba0000},{0xc6ba2000},{0xc6ba4000},{0xc6ba6000},{0xc6ba8000},{0xc6baa000},{0xc6bac000},{0xc6bae000},{0xc6bb0000},{0xc6bb2000},{0xc6bb4000},{0xc6bb6000},{0xc6bb8000},{0xc6bba000},{0xc6bbc000},{0xc6bbe000}, +{0xc6bc0000},{0xc6bc2000},{0xc6bc4000},{0xc6bc6000},{0xc6bc8000},{0xc6bca000},{0xc6bcc000},{0xc6bce000},{0xc6bd0000},{0xc6bd2000},{0xc6bd4000},{0xc6bd6000},{0xc6bd8000},{0xc6bda000},{0xc6bdc000},{0xc6bde000},{0xc6be0000},{0xc6be2000},{0xc6be4000},{0xc6be6000},{0xc6be8000},{0xc6bea000},{0xc6bec000},{0xc6bee000},{0xc6bf0000},{0xc6bf2000},{0xc6bf4000},{0xc6bf6000},{0xc6bf8000},{0xc6bfa000},{0xc6bfc000},{0xc6bfe000}, +{0xc6c00000},{0xc6c02000},{0xc6c04000},{0xc6c06000},{0xc6c08000},{0xc6c0a000},{0xc6c0c000},{0xc6c0e000},{0xc6c10000},{0xc6c12000},{0xc6c14000},{0xc6c16000},{0xc6c18000},{0xc6c1a000},{0xc6c1c000},{0xc6c1e000},{0xc6c20000},{0xc6c22000},{0xc6c24000},{0xc6c26000},{0xc6c28000},{0xc6c2a000},{0xc6c2c000},{0xc6c2e000},{0xc6c30000},{0xc6c32000},{0xc6c34000},{0xc6c36000},{0xc6c38000},{0xc6c3a000},{0xc6c3c000},{0xc6c3e000}, +{0xc6c40000},{0xc6c42000},{0xc6c44000},{0xc6c46000},{0xc6c48000},{0xc6c4a000},{0xc6c4c000},{0xc6c4e000},{0xc6c50000},{0xc6c52000},{0xc6c54000},{0xc6c56000},{0xc6c58000},{0xc6c5a000},{0xc6c5c000},{0xc6c5e000},{0xc6c60000},{0xc6c62000},{0xc6c64000},{0xc6c66000},{0xc6c68000},{0xc6c6a000},{0xc6c6c000},{0xc6c6e000},{0xc6c70000},{0xc6c72000},{0xc6c74000},{0xc6c76000},{0xc6c78000},{0xc6c7a000},{0xc6c7c000},{0xc6c7e000}, +{0xc6c80000},{0xc6c82000},{0xc6c84000},{0xc6c86000},{0xc6c88000},{0xc6c8a000},{0xc6c8c000},{0xc6c8e000},{0xc6c90000},{0xc6c92000},{0xc6c94000},{0xc6c96000},{0xc6c98000},{0xc6c9a000},{0xc6c9c000},{0xc6c9e000},{0xc6ca0000},{0xc6ca2000},{0xc6ca4000},{0xc6ca6000},{0xc6ca8000},{0xc6caa000},{0xc6cac000},{0xc6cae000},{0xc6cb0000},{0xc6cb2000},{0xc6cb4000},{0xc6cb6000},{0xc6cb8000},{0xc6cba000},{0xc6cbc000},{0xc6cbe000}, +{0xc6cc0000},{0xc6cc2000},{0xc6cc4000},{0xc6cc6000},{0xc6cc8000},{0xc6cca000},{0xc6ccc000},{0xc6cce000},{0xc6cd0000},{0xc6cd2000},{0xc6cd4000},{0xc6cd6000},{0xc6cd8000},{0xc6cda000},{0xc6cdc000},{0xc6cde000},{0xc6ce0000},{0xc6ce2000},{0xc6ce4000},{0xc6ce6000},{0xc6ce8000},{0xc6cea000},{0xc6cec000},{0xc6cee000},{0xc6cf0000},{0xc6cf2000},{0xc6cf4000},{0xc6cf6000},{0xc6cf8000},{0xc6cfa000},{0xc6cfc000},{0xc6cfe000}, +{0xc6d00000},{0xc6d02000},{0xc6d04000},{0xc6d06000},{0xc6d08000},{0xc6d0a000},{0xc6d0c000},{0xc6d0e000},{0xc6d10000},{0xc6d12000},{0xc6d14000},{0xc6d16000},{0xc6d18000},{0xc6d1a000},{0xc6d1c000},{0xc6d1e000},{0xc6d20000},{0xc6d22000},{0xc6d24000},{0xc6d26000},{0xc6d28000},{0xc6d2a000},{0xc6d2c000},{0xc6d2e000},{0xc6d30000},{0xc6d32000},{0xc6d34000},{0xc6d36000},{0xc6d38000},{0xc6d3a000},{0xc6d3c000},{0xc6d3e000}, +{0xc6d40000},{0xc6d42000},{0xc6d44000},{0xc6d46000},{0xc6d48000},{0xc6d4a000},{0xc6d4c000},{0xc6d4e000},{0xc6d50000},{0xc6d52000},{0xc6d54000},{0xc6d56000},{0xc6d58000},{0xc6d5a000},{0xc6d5c000},{0xc6d5e000},{0xc6d60000},{0xc6d62000},{0xc6d64000},{0xc6d66000},{0xc6d68000},{0xc6d6a000},{0xc6d6c000},{0xc6d6e000},{0xc6d70000},{0xc6d72000},{0xc6d74000},{0xc6d76000},{0xc6d78000},{0xc6d7a000},{0xc6d7c000},{0xc6d7e000}, +{0xc6d80000},{0xc6d82000},{0xc6d84000},{0xc6d86000},{0xc6d88000},{0xc6d8a000},{0xc6d8c000},{0xc6d8e000},{0xc6d90000},{0xc6d92000},{0xc6d94000},{0xc6d96000},{0xc6d98000},{0xc6d9a000},{0xc6d9c000},{0xc6d9e000},{0xc6da0000},{0xc6da2000},{0xc6da4000},{0xc6da6000},{0xc6da8000},{0xc6daa000},{0xc6dac000},{0xc6dae000},{0xc6db0000},{0xc6db2000},{0xc6db4000},{0xc6db6000},{0xc6db8000},{0xc6dba000},{0xc6dbc000},{0xc6dbe000}, +{0xc6dc0000},{0xc6dc2000},{0xc6dc4000},{0xc6dc6000},{0xc6dc8000},{0xc6dca000},{0xc6dcc000},{0xc6dce000},{0xc6dd0000},{0xc6dd2000},{0xc6dd4000},{0xc6dd6000},{0xc6dd8000},{0xc6dda000},{0xc6ddc000},{0xc6dde000},{0xc6de0000},{0xc6de2000},{0xc6de4000},{0xc6de6000},{0xc6de8000},{0xc6dea000},{0xc6dec000},{0xc6dee000},{0xc6df0000},{0xc6df2000},{0xc6df4000},{0xc6df6000},{0xc6df8000},{0xc6dfa000},{0xc6dfc000},{0xc6dfe000}, +{0xc6e00000},{0xc6e02000},{0xc6e04000},{0xc6e06000},{0xc6e08000},{0xc6e0a000},{0xc6e0c000},{0xc6e0e000},{0xc6e10000},{0xc6e12000},{0xc6e14000},{0xc6e16000},{0xc6e18000},{0xc6e1a000},{0xc6e1c000},{0xc6e1e000},{0xc6e20000},{0xc6e22000},{0xc6e24000},{0xc6e26000},{0xc6e28000},{0xc6e2a000},{0xc6e2c000},{0xc6e2e000},{0xc6e30000},{0xc6e32000},{0xc6e34000},{0xc6e36000},{0xc6e38000},{0xc6e3a000},{0xc6e3c000},{0xc6e3e000}, +{0xc6e40000},{0xc6e42000},{0xc6e44000},{0xc6e46000},{0xc6e48000},{0xc6e4a000},{0xc6e4c000},{0xc6e4e000},{0xc6e50000},{0xc6e52000},{0xc6e54000},{0xc6e56000},{0xc6e58000},{0xc6e5a000},{0xc6e5c000},{0xc6e5e000},{0xc6e60000},{0xc6e62000},{0xc6e64000},{0xc6e66000},{0xc6e68000},{0xc6e6a000},{0xc6e6c000},{0xc6e6e000},{0xc6e70000},{0xc6e72000},{0xc6e74000},{0xc6e76000},{0xc6e78000},{0xc6e7a000},{0xc6e7c000},{0xc6e7e000}, +{0xc6e80000},{0xc6e82000},{0xc6e84000},{0xc6e86000},{0xc6e88000},{0xc6e8a000},{0xc6e8c000},{0xc6e8e000},{0xc6e90000},{0xc6e92000},{0xc6e94000},{0xc6e96000},{0xc6e98000},{0xc6e9a000},{0xc6e9c000},{0xc6e9e000},{0xc6ea0000},{0xc6ea2000},{0xc6ea4000},{0xc6ea6000},{0xc6ea8000},{0xc6eaa000},{0xc6eac000},{0xc6eae000},{0xc6eb0000},{0xc6eb2000},{0xc6eb4000},{0xc6eb6000},{0xc6eb8000},{0xc6eba000},{0xc6ebc000},{0xc6ebe000}, +{0xc6ec0000},{0xc6ec2000},{0xc6ec4000},{0xc6ec6000},{0xc6ec8000},{0xc6eca000},{0xc6ecc000},{0xc6ece000},{0xc6ed0000},{0xc6ed2000},{0xc6ed4000},{0xc6ed6000},{0xc6ed8000},{0xc6eda000},{0xc6edc000},{0xc6ede000},{0xc6ee0000},{0xc6ee2000},{0xc6ee4000},{0xc6ee6000},{0xc6ee8000},{0xc6eea000},{0xc6eec000},{0xc6eee000},{0xc6ef0000},{0xc6ef2000},{0xc6ef4000},{0xc6ef6000},{0xc6ef8000},{0xc6efa000},{0xc6efc000},{0xc6efe000}, +{0xc6f00000},{0xc6f02000},{0xc6f04000},{0xc6f06000},{0xc6f08000},{0xc6f0a000},{0xc6f0c000},{0xc6f0e000},{0xc6f10000},{0xc6f12000},{0xc6f14000},{0xc6f16000},{0xc6f18000},{0xc6f1a000},{0xc6f1c000},{0xc6f1e000},{0xc6f20000},{0xc6f22000},{0xc6f24000},{0xc6f26000},{0xc6f28000},{0xc6f2a000},{0xc6f2c000},{0xc6f2e000},{0xc6f30000},{0xc6f32000},{0xc6f34000},{0xc6f36000},{0xc6f38000},{0xc6f3a000},{0xc6f3c000},{0xc6f3e000}, +{0xc6f40000},{0xc6f42000},{0xc6f44000},{0xc6f46000},{0xc6f48000},{0xc6f4a000},{0xc6f4c000},{0xc6f4e000},{0xc6f50000},{0xc6f52000},{0xc6f54000},{0xc6f56000},{0xc6f58000},{0xc6f5a000},{0xc6f5c000},{0xc6f5e000},{0xc6f60000},{0xc6f62000},{0xc6f64000},{0xc6f66000},{0xc6f68000},{0xc6f6a000},{0xc6f6c000},{0xc6f6e000},{0xc6f70000},{0xc6f72000},{0xc6f74000},{0xc6f76000},{0xc6f78000},{0xc6f7a000},{0xc6f7c000},{0xc6f7e000}, +{0xc6f80000},{0xc6f82000},{0xc6f84000},{0xc6f86000},{0xc6f88000},{0xc6f8a000},{0xc6f8c000},{0xc6f8e000},{0xc6f90000},{0xc6f92000},{0xc6f94000},{0xc6f96000},{0xc6f98000},{0xc6f9a000},{0xc6f9c000},{0xc6f9e000},{0xc6fa0000},{0xc6fa2000},{0xc6fa4000},{0xc6fa6000},{0xc6fa8000},{0xc6faa000},{0xc6fac000},{0xc6fae000},{0xc6fb0000},{0xc6fb2000},{0xc6fb4000},{0xc6fb6000},{0xc6fb8000},{0xc6fba000},{0xc6fbc000},{0xc6fbe000}, +{0xc6fc0000},{0xc6fc2000},{0xc6fc4000},{0xc6fc6000},{0xc6fc8000},{0xc6fca000},{0xc6fcc000},{0xc6fce000},{0xc6fd0000},{0xc6fd2000},{0xc6fd4000},{0xc6fd6000},{0xc6fd8000},{0xc6fda000},{0xc6fdc000},{0xc6fde000},{0xc6fe0000},{0xc6fe2000},{0xc6fe4000},{0xc6fe6000},{0xc6fe8000},{0xc6fea000},{0xc6fec000},{0xc6fee000},{0xc6ff0000},{0xc6ff2000},{0xc6ff4000},{0xc6ff6000},{0xc6ff8000},{0xc6ffa000},{0xc6ffc000},{0xc6ffe000}, +{0xc7000000},{0xc7002000},{0xc7004000},{0xc7006000},{0xc7008000},{0xc700a000},{0xc700c000},{0xc700e000},{0xc7010000},{0xc7012000},{0xc7014000},{0xc7016000},{0xc7018000},{0xc701a000},{0xc701c000},{0xc701e000},{0xc7020000},{0xc7022000},{0xc7024000},{0xc7026000},{0xc7028000},{0xc702a000},{0xc702c000},{0xc702e000},{0xc7030000},{0xc7032000},{0xc7034000},{0xc7036000},{0xc7038000},{0xc703a000},{0xc703c000},{0xc703e000}, +{0xc7040000},{0xc7042000},{0xc7044000},{0xc7046000},{0xc7048000},{0xc704a000},{0xc704c000},{0xc704e000},{0xc7050000},{0xc7052000},{0xc7054000},{0xc7056000},{0xc7058000},{0xc705a000},{0xc705c000},{0xc705e000},{0xc7060000},{0xc7062000},{0xc7064000},{0xc7066000},{0xc7068000},{0xc706a000},{0xc706c000},{0xc706e000},{0xc7070000},{0xc7072000},{0xc7074000},{0xc7076000},{0xc7078000},{0xc707a000},{0xc707c000},{0xc707e000}, +{0xc7080000},{0xc7082000},{0xc7084000},{0xc7086000},{0xc7088000},{0xc708a000},{0xc708c000},{0xc708e000},{0xc7090000},{0xc7092000},{0xc7094000},{0xc7096000},{0xc7098000},{0xc709a000},{0xc709c000},{0xc709e000},{0xc70a0000},{0xc70a2000},{0xc70a4000},{0xc70a6000},{0xc70a8000},{0xc70aa000},{0xc70ac000},{0xc70ae000},{0xc70b0000},{0xc70b2000},{0xc70b4000},{0xc70b6000},{0xc70b8000},{0xc70ba000},{0xc70bc000},{0xc70be000}, +{0xc70c0000},{0xc70c2000},{0xc70c4000},{0xc70c6000},{0xc70c8000},{0xc70ca000},{0xc70cc000},{0xc70ce000},{0xc70d0000},{0xc70d2000},{0xc70d4000},{0xc70d6000},{0xc70d8000},{0xc70da000},{0xc70dc000},{0xc70de000},{0xc70e0000},{0xc70e2000},{0xc70e4000},{0xc70e6000},{0xc70e8000},{0xc70ea000},{0xc70ec000},{0xc70ee000},{0xc70f0000},{0xc70f2000},{0xc70f4000},{0xc70f6000},{0xc70f8000},{0xc70fa000},{0xc70fc000},{0xc70fe000}, +{0xc7100000},{0xc7102000},{0xc7104000},{0xc7106000},{0xc7108000},{0xc710a000},{0xc710c000},{0xc710e000},{0xc7110000},{0xc7112000},{0xc7114000},{0xc7116000},{0xc7118000},{0xc711a000},{0xc711c000},{0xc711e000},{0xc7120000},{0xc7122000},{0xc7124000},{0xc7126000},{0xc7128000},{0xc712a000},{0xc712c000},{0xc712e000},{0xc7130000},{0xc7132000},{0xc7134000},{0xc7136000},{0xc7138000},{0xc713a000},{0xc713c000},{0xc713e000}, +{0xc7140000},{0xc7142000},{0xc7144000},{0xc7146000},{0xc7148000},{0xc714a000},{0xc714c000},{0xc714e000},{0xc7150000},{0xc7152000},{0xc7154000},{0xc7156000},{0xc7158000},{0xc715a000},{0xc715c000},{0xc715e000},{0xc7160000},{0xc7162000},{0xc7164000},{0xc7166000},{0xc7168000},{0xc716a000},{0xc716c000},{0xc716e000},{0xc7170000},{0xc7172000},{0xc7174000},{0xc7176000},{0xc7178000},{0xc717a000},{0xc717c000},{0xc717e000}, +{0xc7180000},{0xc7182000},{0xc7184000},{0xc7186000},{0xc7188000},{0xc718a000},{0xc718c000},{0xc718e000},{0xc7190000},{0xc7192000},{0xc7194000},{0xc7196000},{0xc7198000},{0xc719a000},{0xc719c000},{0xc719e000},{0xc71a0000},{0xc71a2000},{0xc71a4000},{0xc71a6000},{0xc71a8000},{0xc71aa000},{0xc71ac000},{0xc71ae000},{0xc71b0000},{0xc71b2000},{0xc71b4000},{0xc71b6000},{0xc71b8000},{0xc71ba000},{0xc71bc000},{0xc71be000}, +{0xc71c0000},{0xc71c2000},{0xc71c4000},{0xc71c6000},{0xc71c8000},{0xc71ca000},{0xc71cc000},{0xc71ce000},{0xc71d0000},{0xc71d2000},{0xc71d4000},{0xc71d6000},{0xc71d8000},{0xc71da000},{0xc71dc000},{0xc71de000},{0xc71e0000},{0xc71e2000},{0xc71e4000},{0xc71e6000},{0xc71e8000},{0xc71ea000},{0xc71ec000},{0xc71ee000},{0xc71f0000},{0xc71f2000},{0xc71f4000},{0xc71f6000},{0xc71f8000},{0xc71fa000},{0xc71fc000},{0xc71fe000}, +{0xc7200000},{0xc7202000},{0xc7204000},{0xc7206000},{0xc7208000},{0xc720a000},{0xc720c000},{0xc720e000},{0xc7210000},{0xc7212000},{0xc7214000},{0xc7216000},{0xc7218000},{0xc721a000},{0xc721c000},{0xc721e000},{0xc7220000},{0xc7222000},{0xc7224000},{0xc7226000},{0xc7228000},{0xc722a000},{0xc722c000},{0xc722e000},{0xc7230000},{0xc7232000},{0xc7234000},{0xc7236000},{0xc7238000},{0xc723a000},{0xc723c000},{0xc723e000}, +{0xc7240000},{0xc7242000},{0xc7244000},{0xc7246000},{0xc7248000},{0xc724a000},{0xc724c000},{0xc724e000},{0xc7250000},{0xc7252000},{0xc7254000},{0xc7256000},{0xc7258000},{0xc725a000},{0xc725c000},{0xc725e000},{0xc7260000},{0xc7262000},{0xc7264000},{0xc7266000},{0xc7268000},{0xc726a000},{0xc726c000},{0xc726e000},{0xc7270000},{0xc7272000},{0xc7274000},{0xc7276000},{0xc7278000},{0xc727a000},{0xc727c000},{0xc727e000}, +{0xc7280000},{0xc7282000},{0xc7284000},{0xc7286000},{0xc7288000},{0xc728a000},{0xc728c000},{0xc728e000},{0xc7290000},{0xc7292000},{0xc7294000},{0xc7296000},{0xc7298000},{0xc729a000},{0xc729c000},{0xc729e000},{0xc72a0000},{0xc72a2000},{0xc72a4000},{0xc72a6000},{0xc72a8000},{0xc72aa000},{0xc72ac000},{0xc72ae000},{0xc72b0000},{0xc72b2000},{0xc72b4000},{0xc72b6000},{0xc72b8000},{0xc72ba000},{0xc72bc000},{0xc72be000}, +{0xc72c0000},{0xc72c2000},{0xc72c4000},{0xc72c6000},{0xc72c8000},{0xc72ca000},{0xc72cc000},{0xc72ce000},{0xc72d0000},{0xc72d2000},{0xc72d4000},{0xc72d6000},{0xc72d8000},{0xc72da000},{0xc72dc000},{0xc72de000},{0xc72e0000},{0xc72e2000},{0xc72e4000},{0xc72e6000},{0xc72e8000},{0xc72ea000},{0xc72ec000},{0xc72ee000},{0xc72f0000},{0xc72f2000},{0xc72f4000},{0xc72f6000},{0xc72f8000},{0xc72fa000},{0xc72fc000},{0xc72fe000}, +{0xc7300000},{0xc7302000},{0xc7304000},{0xc7306000},{0xc7308000},{0xc730a000},{0xc730c000},{0xc730e000},{0xc7310000},{0xc7312000},{0xc7314000},{0xc7316000},{0xc7318000},{0xc731a000},{0xc731c000},{0xc731e000},{0xc7320000},{0xc7322000},{0xc7324000},{0xc7326000},{0xc7328000},{0xc732a000},{0xc732c000},{0xc732e000},{0xc7330000},{0xc7332000},{0xc7334000},{0xc7336000},{0xc7338000},{0xc733a000},{0xc733c000},{0xc733e000}, +{0xc7340000},{0xc7342000},{0xc7344000},{0xc7346000},{0xc7348000},{0xc734a000},{0xc734c000},{0xc734e000},{0xc7350000},{0xc7352000},{0xc7354000},{0xc7356000},{0xc7358000},{0xc735a000},{0xc735c000},{0xc735e000},{0xc7360000},{0xc7362000},{0xc7364000},{0xc7366000},{0xc7368000},{0xc736a000},{0xc736c000},{0xc736e000},{0xc7370000},{0xc7372000},{0xc7374000},{0xc7376000},{0xc7378000},{0xc737a000},{0xc737c000},{0xc737e000}, +{0xc7380000},{0xc7382000},{0xc7384000},{0xc7386000},{0xc7388000},{0xc738a000},{0xc738c000},{0xc738e000},{0xc7390000},{0xc7392000},{0xc7394000},{0xc7396000},{0xc7398000},{0xc739a000},{0xc739c000},{0xc739e000},{0xc73a0000},{0xc73a2000},{0xc73a4000},{0xc73a6000},{0xc73a8000},{0xc73aa000},{0xc73ac000},{0xc73ae000},{0xc73b0000},{0xc73b2000},{0xc73b4000},{0xc73b6000},{0xc73b8000},{0xc73ba000},{0xc73bc000},{0xc73be000}, +{0xc73c0000},{0xc73c2000},{0xc73c4000},{0xc73c6000},{0xc73c8000},{0xc73ca000},{0xc73cc000},{0xc73ce000},{0xc73d0000},{0xc73d2000},{0xc73d4000},{0xc73d6000},{0xc73d8000},{0xc73da000},{0xc73dc000},{0xc73de000},{0xc73e0000},{0xc73e2000},{0xc73e4000},{0xc73e6000},{0xc73e8000},{0xc73ea000},{0xc73ec000},{0xc73ee000},{0xc73f0000},{0xc73f2000},{0xc73f4000},{0xc73f6000},{0xc73f8000},{0xc73fa000},{0xc73fc000},{0xc73fe000}, +{0xc7400000},{0xc7402000},{0xc7404000},{0xc7406000},{0xc7408000},{0xc740a000},{0xc740c000},{0xc740e000},{0xc7410000},{0xc7412000},{0xc7414000},{0xc7416000},{0xc7418000},{0xc741a000},{0xc741c000},{0xc741e000},{0xc7420000},{0xc7422000},{0xc7424000},{0xc7426000},{0xc7428000},{0xc742a000},{0xc742c000},{0xc742e000},{0xc7430000},{0xc7432000},{0xc7434000},{0xc7436000},{0xc7438000},{0xc743a000},{0xc743c000},{0xc743e000}, +{0xc7440000},{0xc7442000},{0xc7444000},{0xc7446000},{0xc7448000},{0xc744a000},{0xc744c000},{0xc744e000},{0xc7450000},{0xc7452000},{0xc7454000},{0xc7456000},{0xc7458000},{0xc745a000},{0xc745c000},{0xc745e000},{0xc7460000},{0xc7462000},{0xc7464000},{0xc7466000},{0xc7468000},{0xc746a000},{0xc746c000},{0xc746e000},{0xc7470000},{0xc7472000},{0xc7474000},{0xc7476000},{0xc7478000},{0xc747a000},{0xc747c000},{0xc747e000}, +{0xc7480000},{0xc7482000},{0xc7484000},{0xc7486000},{0xc7488000},{0xc748a000},{0xc748c000},{0xc748e000},{0xc7490000},{0xc7492000},{0xc7494000},{0xc7496000},{0xc7498000},{0xc749a000},{0xc749c000},{0xc749e000},{0xc74a0000},{0xc74a2000},{0xc74a4000},{0xc74a6000},{0xc74a8000},{0xc74aa000},{0xc74ac000},{0xc74ae000},{0xc74b0000},{0xc74b2000},{0xc74b4000},{0xc74b6000},{0xc74b8000},{0xc74ba000},{0xc74bc000},{0xc74be000}, +{0xc74c0000},{0xc74c2000},{0xc74c4000},{0xc74c6000},{0xc74c8000},{0xc74ca000},{0xc74cc000},{0xc74ce000},{0xc74d0000},{0xc74d2000},{0xc74d4000},{0xc74d6000},{0xc74d8000},{0xc74da000},{0xc74dc000},{0xc74de000},{0xc74e0000},{0xc74e2000},{0xc74e4000},{0xc74e6000},{0xc74e8000},{0xc74ea000},{0xc74ec000},{0xc74ee000},{0xc74f0000},{0xc74f2000},{0xc74f4000},{0xc74f6000},{0xc74f8000},{0xc74fa000},{0xc74fc000},{0xc74fe000}, +{0xc7500000},{0xc7502000},{0xc7504000},{0xc7506000},{0xc7508000},{0xc750a000},{0xc750c000},{0xc750e000},{0xc7510000},{0xc7512000},{0xc7514000},{0xc7516000},{0xc7518000},{0xc751a000},{0xc751c000},{0xc751e000},{0xc7520000},{0xc7522000},{0xc7524000},{0xc7526000},{0xc7528000},{0xc752a000},{0xc752c000},{0xc752e000},{0xc7530000},{0xc7532000},{0xc7534000},{0xc7536000},{0xc7538000},{0xc753a000},{0xc753c000},{0xc753e000}, +{0xc7540000},{0xc7542000},{0xc7544000},{0xc7546000},{0xc7548000},{0xc754a000},{0xc754c000},{0xc754e000},{0xc7550000},{0xc7552000},{0xc7554000},{0xc7556000},{0xc7558000},{0xc755a000},{0xc755c000},{0xc755e000},{0xc7560000},{0xc7562000},{0xc7564000},{0xc7566000},{0xc7568000},{0xc756a000},{0xc756c000},{0xc756e000},{0xc7570000},{0xc7572000},{0xc7574000},{0xc7576000},{0xc7578000},{0xc757a000},{0xc757c000},{0xc757e000}, +{0xc7580000},{0xc7582000},{0xc7584000},{0xc7586000},{0xc7588000},{0xc758a000},{0xc758c000},{0xc758e000},{0xc7590000},{0xc7592000},{0xc7594000},{0xc7596000},{0xc7598000},{0xc759a000},{0xc759c000},{0xc759e000},{0xc75a0000},{0xc75a2000},{0xc75a4000},{0xc75a6000},{0xc75a8000},{0xc75aa000},{0xc75ac000},{0xc75ae000},{0xc75b0000},{0xc75b2000},{0xc75b4000},{0xc75b6000},{0xc75b8000},{0xc75ba000},{0xc75bc000},{0xc75be000}, +{0xc75c0000},{0xc75c2000},{0xc75c4000},{0xc75c6000},{0xc75c8000},{0xc75ca000},{0xc75cc000},{0xc75ce000},{0xc75d0000},{0xc75d2000},{0xc75d4000},{0xc75d6000},{0xc75d8000},{0xc75da000},{0xc75dc000},{0xc75de000},{0xc75e0000},{0xc75e2000},{0xc75e4000},{0xc75e6000},{0xc75e8000},{0xc75ea000},{0xc75ec000},{0xc75ee000},{0xc75f0000},{0xc75f2000},{0xc75f4000},{0xc75f6000},{0xc75f8000},{0xc75fa000},{0xc75fc000},{0xc75fe000}, +{0xc7600000},{0xc7602000},{0xc7604000},{0xc7606000},{0xc7608000},{0xc760a000},{0xc760c000},{0xc760e000},{0xc7610000},{0xc7612000},{0xc7614000},{0xc7616000},{0xc7618000},{0xc761a000},{0xc761c000},{0xc761e000},{0xc7620000},{0xc7622000},{0xc7624000},{0xc7626000},{0xc7628000},{0xc762a000},{0xc762c000},{0xc762e000},{0xc7630000},{0xc7632000},{0xc7634000},{0xc7636000},{0xc7638000},{0xc763a000},{0xc763c000},{0xc763e000}, +{0xc7640000},{0xc7642000},{0xc7644000},{0xc7646000},{0xc7648000},{0xc764a000},{0xc764c000},{0xc764e000},{0xc7650000},{0xc7652000},{0xc7654000},{0xc7656000},{0xc7658000},{0xc765a000},{0xc765c000},{0xc765e000},{0xc7660000},{0xc7662000},{0xc7664000},{0xc7666000},{0xc7668000},{0xc766a000},{0xc766c000},{0xc766e000},{0xc7670000},{0xc7672000},{0xc7674000},{0xc7676000},{0xc7678000},{0xc767a000},{0xc767c000},{0xc767e000}, +{0xc7680000},{0xc7682000},{0xc7684000},{0xc7686000},{0xc7688000},{0xc768a000},{0xc768c000},{0xc768e000},{0xc7690000},{0xc7692000},{0xc7694000},{0xc7696000},{0xc7698000},{0xc769a000},{0xc769c000},{0xc769e000},{0xc76a0000},{0xc76a2000},{0xc76a4000},{0xc76a6000},{0xc76a8000},{0xc76aa000},{0xc76ac000},{0xc76ae000},{0xc76b0000},{0xc76b2000},{0xc76b4000},{0xc76b6000},{0xc76b8000},{0xc76ba000},{0xc76bc000},{0xc76be000}, +{0xc76c0000},{0xc76c2000},{0xc76c4000},{0xc76c6000},{0xc76c8000},{0xc76ca000},{0xc76cc000},{0xc76ce000},{0xc76d0000},{0xc76d2000},{0xc76d4000},{0xc76d6000},{0xc76d8000},{0xc76da000},{0xc76dc000},{0xc76de000},{0xc76e0000},{0xc76e2000},{0xc76e4000},{0xc76e6000},{0xc76e8000},{0xc76ea000},{0xc76ec000},{0xc76ee000},{0xc76f0000},{0xc76f2000},{0xc76f4000},{0xc76f6000},{0xc76f8000},{0xc76fa000},{0xc76fc000},{0xc76fe000}, +{0xc7700000},{0xc7702000},{0xc7704000},{0xc7706000},{0xc7708000},{0xc770a000},{0xc770c000},{0xc770e000},{0xc7710000},{0xc7712000},{0xc7714000},{0xc7716000},{0xc7718000},{0xc771a000},{0xc771c000},{0xc771e000},{0xc7720000},{0xc7722000},{0xc7724000},{0xc7726000},{0xc7728000},{0xc772a000},{0xc772c000},{0xc772e000},{0xc7730000},{0xc7732000},{0xc7734000},{0xc7736000},{0xc7738000},{0xc773a000},{0xc773c000},{0xc773e000}, +{0xc7740000},{0xc7742000},{0xc7744000},{0xc7746000},{0xc7748000},{0xc774a000},{0xc774c000},{0xc774e000},{0xc7750000},{0xc7752000},{0xc7754000},{0xc7756000},{0xc7758000},{0xc775a000},{0xc775c000},{0xc775e000},{0xc7760000},{0xc7762000},{0xc7764000},{0xc7766000},{0xc7768000},{0xc776a000},{0xc776c000},{0xc776e000},{0xc7770000},{0xc7772000},{0xc7774000},{0xc7776000},{0xc7778000},{0xc777a000},{0xc777c000},{0xc777e000}, +{0xc7780000},{0xc7782000},{0xc7784000},{0xc7786000},{0xc7788000},{0xc778a000},{0xc778c000},{0xc778e000},{0xc7790000},{0xc7792000},{0xc7794000},{0xc7796000},{0xc7798000},{0xc779a000},{0xc779c000},{0xc779e000},{0xc77a0000},{0xc77a2000},{0xc77a4000},{0xc77a6000},{0xc77a8000},{0xc77aa000},{0xc77ac000},{0xc77ae000},{0xc77b0000},{0xc77b2000},{0xc77b4000},{0xc77b6000},{0xc77b8000},{0xc77ba000},{0xc77bc000},{0xc77be000}, +{0xc77c0000},{0xc77c2000},{0xc77c4000},{0xc77c6000},{0xc77c8000},{0xc77ca000},{0xc77cc000},{0xc77ce000},{0xc77d0000},{0xc77d2000},{0xc77d4000},{0xc77d6000},{0xc77d8000},{0xc77da000},{0xc77dc000},{0xc77de000},{0xc77e0000},{0xc77e2000},{0xc77e4000},{0xc77e6000},{0xc77e8000},{0xc77ea000},{0xc77ec000},{0xc77ee000},{0xc77f0000},{0xc77f2000},{0xc77f4000},{0xc77f6000},{0xc77f8000},{0xc77fa000},{0xc77fc000},{0xc77fe000}, +{0xff800000},{0xffc02000},{0xffc04000},{0xffc06000},{0xffc08000},{0xffc0a000},{0xffc0c000},{0xffc0e000},{0xffc10000},{0xffc12000},{0xffc14000},{0xffc16000},{0xffc18000},{0xffc1a000},{0xffc1c000},{0xffc1e000},{0xffc20000},{0xffc22000},{0xffc24000},{0xffc26000},{0xffc28000},{0xffc2a000},{0xffc2c000},{0xffc2e000},{0xffc30000},{0xffc32000},{0xffc34000},{0xffc36000},{0xffc38000},{0xffc3a000},{0xffc3c000},{0xffc3e000}, +{0xffc40000},{0xffc42000},{0xffc44000},{0xffc46000},{0xffc48000},{0xffc4a000},{0xffc4c000},{0xffc4e000},{0xffc50000},{0xffc52000},{0xffc54000},{0xffc56000},{0xffc58000},{0xffc5a000},{0xffc5c000},{0xffc5e000},{0xffc60000},{0xffc62000},{0xffc64000},{0xffc66000},{0xffc68000},{0xffc6a000},{0xffc6c000},{0xffc6e000},{0xffc70000},{0xffc72000},{0xffc74000},{0xffc76000},{0xffc78000},{0xffc7a000},{0xffc7c000},{0xffc7e000}, +{0xffc80000},{0xffc82000},{0xffc84000},{0xffc86000},{0xffc88000},{0xffc8a000},{0xffc8c000},{0xffc8e000},{0xffc90000},{0xffc92000},{0xffc94000},{0xffc96000},{0xffc98000},{0xffc9a000},{0xffc9c000},{0xffc9e000},{0xffca0000},{0xffca2000},{0xffca4000},{0xffca6000},{0xffca8000},{0xffcaa000},{0xffcac000},{0xffcae000},{0xffcb0000},{0xffcb2000},{0xffcb4000},{0xffcb6000},{0xffcb8000},{0xffcba000},{0xffcbc000},{0xffcbe000}, +{0xffcc0000},{0xffcc2000},{0xffcc4000},{0xffcc6000},{0xffcc8000},{0xffcca000},{0xffccc000},{0xffcce000},{0xffcd0000},{0xffcd2000},{0xffcd4000},{0xffcd6000},{0xffcd8000},{0xffcda000},{0xffcdc000},{0xffcde000},{0xffce0000},{0xffce2000},{0xffce4000},{0xffce6000},{0xffce8000},{0xffcea000},{0xffcec000},{0xffcee000},{0xffcf0000},{0xffcf2000},{0xffcf4000},{0xffcf6000},{0xffcf8000},{0xffcfa000},{0xffcfc000},{0xffcfe000}, +{0xffd00000},{0xffd02000},{0xffd04000},{0xffd06000},{0xffd08000},{0xffd0a000},{0xffd0c000},{0xffd0e000},{0xffd10000},{0xffd12000},{0xffd14000},{0xffd16000},{0xffd18000},{0xffd1a000},{0xffd1c000},{0xffd1e000},{0xffd20000},{0xffd22000},{0xffd24000},{0xffd26000},{0xffd28000},{0xffd2a000},{0xffd2c000},{0xffd2e000},{0xffd30000},{0xffd32000},{0xffd34000},{0xffd36000},{0xffd38000},{0xffd3a000},{0xffd3c000},{0xffd3e000}, +{0xffd40000},{0xffd42000},{0xffd44000},{0xffd46000},{0xffd48000},{0xffd4a000},{0xffd4c000},{0xffd4e000},{0xffd50000},{0xffd52000},{0xffd54000},{0xffd56000},{0xffd58000},{0xffd5a000},{0xffd5c000},{0xffd5e000},{0xffd60000},{0xffd62000},{0xffd64000},{0xffd66000},{0xffd68000},{0xffd6a000},{0xffd6c000},{0xffd6e000},{0xffd70000},{0xffd72000},{0xffd74000},{0xffd76000},{0xffd78000},{0xffd7a000},{0xffd7c000},{0xffd7e000}, +{0xffd80000},{0xffd82000},{0xffd84000},{0xffd86000},{0xffd88000},{0xffd8a000},{0xffd8c000},{0xffd8e000},{0xffd90000},{0xffd92000},{0xffd94000},{0xffd96000},{0xffd98000},{0xffd9a000},{0xffd9c000},{0xffd9e000},{0xffda0000},{0xffda2000},{0xffda4000},{0xffda6000},{0xffda8000},{0xffdaa000},{0xffdac000},{0xffdae000},{0xffdb0000},{0xffdb2000},{0xffdb4000},{0xffdb6000},{0xffdb8000},{0xffdba000},{0xffdbc000},{0xffdbe000}, +{0xffdc0000},{0xffdc2000},{0xffdc4000},{0xffdc6000},{0xffdc8000},{0xffdca000},{0xffdcc000},{0xffdce000},{0xffdd0000},{0xffdd2000},{0xffdd4000},{0xffdd6000},{0xffdd8000},{0xffdda000},{0xffddc000},{0xffdde000},{0xffde0000},{0xffde2000},{0xffde4000},{0xffde6000},{0xffde8000},{0xffdea000},{0xffdec000},{0xffdee000},{0xffdf0000},{0xffdf2000},{0xffdf4000},{0xffdf6000},{0xffdf8000},{0xffdfa000},{0xffdfc000},{0xffdfe000}, +{0xffe00000},{0xffe02000},{0xffe04000},{0xffe06000},{0xffe08000},{0xffe0a000},{0xffe0c000},{0xffe0e000},{0xffe10000},{0xffe12000},{0xffe14000},{0xffe16000},{0xffe18000},{0xffe1a000},{0xffe1c000},{0xffe1e000},{0xffe20000},{0xffe22000},{0xffe24000},{0xffe26000},{0xffe28000},{0xffe2a000},{0xffe2c000},{0xffe2e000},{0xffe30000},{0xffe32000},{0xffe34000},{0xffe36000},{0xffe38000},{0xffe3a000},{0xffe3c000},{0xffe3e000}, +{0xffe40000},{0xffe42000},{0xffe44000},{0xffe46000},{0xffe48000},{0xffe4a000},{0xffe4c000},{0xffe4e000},{0xffe50000},{0xffe52000},{0xffe54000},{0xffe56000},{0xffe58000},{0xffe5a000},{0xffe5c000},{0xffe5e000},{0xffe60000},{0xffe62000},{0xffe64000},{0xffe66000},{0xffe68000},{0xffe6a000},{0xffe6c000},{0xffe6e000},{0xffe70000},{0xffe72000},{0xffe74000},{0xffe76000},{0xffe78000},{0xffe7a000},{0xffe7c000},{0xffe7e000}, +{0xffe80000},{0xffe82000},{0xffe84000},{0xffe86000},{0xffe88000},{0xffe8a000},{0xffe8c000},{0xffe8e000},{0xffe90000},{0xffe92000},{0xffe94000},{0xffe96000},{0xffe98000},{0xffe9a000},{0xffe9c000},{0xffe9e000},{0xffea0000},{0xffea2000},{0xffea4000},{0xffea6000},{0xffea8000},{0xffeaa000},{0xffeac000},{0xffeae000},{0xffeb0000},{0xffeb2000},{0xffeb4000},{0xffeb6000},{0xffeb8000},{0xffeba000},{0xffebc000},{0xffebe000}, +{0xffec0000},{0xffec2000},{0xffec4000},{0xffec6000},{0xffec8000},{0xffeca000},{0xffecc000},{0xffece000},{0xffed0000},{0xffed2000},{0xffed4000},{0xffed6000},{0xffed8000},{0xffeda000},{0xffedc000},{0xffede000},{0xffee0000},{0xffee2000},{0xffee4000},{0xffee6000},{0xffee8000},{0xffeea000},{0xffeec000},{0xffeee000},{0xffef0000},{0xffef2000},{0xffef4000},{0xffef6000},{0xffef8000},{0xffefa000},{0xffefc000},{0xffefe000}, +{0xfff00000},{0xfff02000},{0xfff04000},{0xfff06000},{0xfff08000},{0xfff0a000},{0xfff0c000},{0xfff0e000},{0xfff10000},{0xfff12000},{0xfff14000},{0xfff16000},{0xfff18000},{0xfff1a000},{0xfff1c000},{0xfff1e000},{0xfff20000},{0xfff22000},{0xfff24000},{0xfff26000},{0xfff28000},{0xfff2a000},{0xfff2c000},{0xfff2e000},{0xfff30000},{0xfff32000},{0xfff34000},{0xfff36000},{0xfff38000},{0xfff3a000},{0xfff3c000},{0xfff3e000}, +{0xfff40000},{0xfff42000},{0xfff44000},{0xfff46000},{0xfff48000},{0xfff4a000},{0xfff4c000},{0xfff4e000},{0xfff50000},{0xfff52000},{0xfff54000},{0xfff56000},{0xfff58000},{0xfff5a000},{0xfff5c000},{0xfff5e000},{0xfff60000},{0xfff62000},{0xfff64000},{0xfff66000},{0xfff68000},{0xfff6a000},{0xfff6c000},{0xfff6e000},{0xfff70000},{0xfff72000},{0xfff74000},{0xfff76000},{0xfff78000},{0xfff7a000},{0xfff7c000},{0xfff7e000}, +{0xfff80000},{0xfff82000},{0xfff84000},{0xfff86000},{0xfff88000},{0xfff8a000},{0xfff8c000},{0xfff8e000},{0xfff90000},{0xfff92000},{0xfff94000},{0xfff96000},{0xfff98000},{0xfff9a000},{0xfff9c000},{0xfff9e000},{0xfffa0000},{0xfffa2000},{0xfffa4000},{0xfffa6000},{0xfffa8000},{0xfffaa000},{0xfffac000},{0xfffae000},{0xfffb0000},{0xfffb2000},{0xfffb4000},{0xfffb6000},{0xfffb8000},{0xfffba000},{0xfffbc000},{0xfffbe000}, +{0xfffc0000},{0xfffc2000},{0xfffc4000},{0xfffc6000},{0xfffc8000},{0xfffca000},{0xfffcc000},{0xfffce000},{0xfffd0000},{0xfffd2000},{0xfffd4000},{0xfffd6000},{0xfffd8000},{0xfffda000},{0xfffdc000},{0xfffde000},{0xfffe0000},{0xfffe2000},{0xfffe4000},{0xfffe6000},{0xfffe8000},{0xfffea000},{0xfffec000},{0xfffee000},{0xffff0000},{0xffff2000},{0xffff4000},{0xffff6000},{0xffff8000},{0xffffa000},{0xffffc000},{0xffffe000}, +{0xffc00000},{0xffc02000},{0xffc04000},{0xffc06000},{0xffc08000},{0xffc0a000},{0xffc0c000},{0xffc0e000},{0xffc10000},{0xffc12000},{0xffc14000},{0xffc16000},{0xffc18000},{0xffc1a000},{0xffc1c000},{0xffc1e000},{0xffc20000},{0xffc22000},{0xffc24000},{0xffc26000},{0xffc28000},{0xffc2a000},{0xffc2c000},{0xffc2e000},{0xffc30000},{0xffc32000},{0xffc34000},{0xffc36000},{0xffc38000},{0xffc3a000},{0xffc3c000},{0xffc3e000}, +{0xffc40000},{0xffc42000},{0xffc44000},{0xffc46000},{0xffc48000},{0xffc4a000},{0xffc4c000},{0xffc4e000},{0xffc50000},{0xffc52000},{0xffc54000},{0xffc56000},{0xffc58000},{0xffc5a000},{0xffc5c000},{0xffc5e000},{0xffc60000},{0xffc62000},{0xffc64000},{0xffc66000},{0xffc68000},{0xffc6a000},{0xffc6c000},{0xffc6e000},{0xffc70000},{0xffc72000},{0xffc74000},{0xffc76000},{0xffc78000},{0xffc7a000},{0xffc7c000},{0xffc7e000}, +{0xffc80000},{0xffc82000},{0xffc84000},{0xffc86000},{0xffc88000},{0xffc8a000},{0xffc8c000},{0xffc8e000},{0xffc90000},{0xffc92000},{0xffc94000},{0xffc96000},{0xffc98000},{0xffc9a000},{0xffc9c000},{0xffc9e000},{0xffca0000},{0xffca2000},{0xffca4000},{0xffca6000},{0xffca8000},{0xffcaa000},{0xffcac000},{0xffcae000},{0xffcb0000},{0xffcb2000},{0xffcb4000},{0xffcb6000},{0xffcb8000},{0xffcba000},{0xffcbc000},{0xffcbe000}, +{0xffcc0000},{0xffcc2000},{0xffcc4000},{0xffcc6000},{0xffcc8000},{0xffcca000},{0xffccc000},{0xffcce000},{0xffcd0000},{0xffcd2000},{0xffcd4000},{0xffcd6000},{0xffcd8000},{0xffcda000},{0xffcdc000},{0xffcde000},{0xffce0000},{0xffce2000},{0xffce4000},{0xffce6000},{0xffce8000},{0xffcea000},{0xffcec000},{0xffcee000},{0xffcf0000},{0xffcf2000},{0xffcf4000},{0xffcf6000},{0xffcf8000},{0xffcfa000},{0xffcfc000},{0xffcfe000}, +{0xffd00000},{0xffd02000},{0xffd04000},{0xffd06000},{0xffd08000},{0xffd0a000},{0xffd0c000},{0xffd0e000},{0xffd10000},{0xffd12000},{0xffd14000},{0xffd16000},{0xffd18000},{0xffd1a000},{0xffd1c000},{0xffd1e000},{0xffd20000},{0xffd22000},{0xffd24000},{0xffd26000},{0xffd28000},{0xffd2a000},{0xffd2c000},{0xffd2e000},{0xffd30000},{0xffd32000},{0xffd34000},{0xffd36000},{0xffd38000},{0xffd3a000},{0xffd3c000},{0xffd3e000}, +{0xffd40000},{0xffd42000},{0xffd44000},{0xffd46000},{0xffd48000},{0xffd4a000},{0xffd4c000},{0xffd4e000},{0xffd50000},{0xffd52000},{0xffd54000},{0xffd56000},{0xffd58000},{0xffd5a000},{0xffd5c000},{0xffd5e000},{0xffd60000},{0xffd62000},{0xffd64000},{0xffd66000},{0xffd68000},{0xffd6a000},{0xffd6c000},{0xffd6e000},{0xffd70000},{0xffd72000},{0xffd74000},{0xffd76000},{0xffd78000},{0xffd7a000},{0xffd7c000},{0xffd7e000}, +{0xffd80000},{0xffd82000},{0xffd84000},{0xffd86000},{0xffd88000},{0xffd8a000},{0xffd8c000},{0xffd8e000},{0xffd90000},{0xffd92000},{0xffd94000},{0xffd96000},{0xffd98000},{0xffd9a000},{0xffd9c000},{0xffd9e000},{0xffda0000},{0xffda2000},{0xffda4000},{0xffda6000},{0xffda8000},{0xffdaa000},{0xffdac000},{0xffdae000},{0xffdb0000},{0xffdb2000},{0xffdb4000},{0xffdb6000},{0xffdb8000},{0xffdba000},{0xffdbc000},{0xffdbe000}, +{0xffdc0000},{0xffdc2000},{0xffdc4000},{0xffdc6000},{0xffdc8000},{0xffdca000},{0xffdcc000},{0xffdce000},{0xffdd0000},{0xffdd2000},{0xffdd4000},{0xffdd6000},{0xffdd8000},{0xffdda000},{0xffddc000},{0xffdde000},{0xffde0000},{0xffde2000},{0xffde4000},{0xffde6000},{0xffde8000},{0xffdea000},{0xffdec000},{0xffdee000},{0xffdf0000},{0xffdf2000},{0xffdf4000},{0xffdf6000},{0xffdf8000},{0xffdfa000},{0xffdfc000},{0xffdfe000}, +{0xffe00000},{0xffe02000},{0xffe04000},{0xffe06000},{0xffe08000},{0xffe0a000},{0xffe0c000},{0xffe0e000},{0xffe10000},{0xffe12000},{0xffe14000},{0xffe16000},{0xffe18000},{0xffe1a000},{0xffe1c000},{0xffe1e000},{0xffe20000},{0xffe22000},{0xffe24000},{0xffe26000},{0xffe28000},{0xffe2a000},{0xffe2c000},{0xffe2e000},{0xffe30000},{0xffe32000},{0xffe34000},{0xffe36000},{0xffe38000},{0xffe3a000},{0xffe3c000},{0xffe3e000}, +{0xffe40000},{0xffe42000},{0xffe44000},{0xffe46000},{0xffe48000},{0xffe4a000},{0xffe4c000},{0xffe4e000},{0xffe50000},{0xffe52000},{0xffe54000},{0xffe56000},{0xffe58000},{0xffe5a000},{0xffe5c000},{0xffe5e000},{0xffe60000},{0xffe62000},{0xffe64000},{0xffe66000},{0xffe68000},{0xffe6a000},{0xffe6c000},{0xffe6e000},{0xffe70000},{0xffe72000},{0xffe74000},{0xffe76000},{0xffe78000},{0xffe7a000},{0xffe7c000},{0xffe7e000}, +{0xffe80000},{0xffe82000},{0xffe84000},{0xffe86000},{0xffe88000},{0xffe8a000},{0xffe8c000},{0xffe8e000},{0xffe90000},{0xffe92000},{0xffe94000},{0xffe96000},{0xffe98000},{0xffe9a000},{0xffe9c000},{0xffe9e000},{0xffea0000},{0xffea2000},{0xffea4000},{0xffea6000},{0xffea8000},{0xffeaa000},{0xffeac000},{0xffeae000},{0xffeb0000},{0xffeb2000},{0xffeb4000},{0xffeb6000},{0xffeb8000},{0xffeba000},{0xffebc000},{0xffebe000}, +{0xffec0000},{0xffec2000},{0xffec4000},{0xffec6000},{0xffec8000},{0xffeca000},{0xffecc000},{0xffece000},{0xffed0000},{0xffed2000},{0xffed4000},{0xffed6000},{0xffed8000},{0xffeda000},{0xffedc000},{0xffede000},{0xffee0000},{0xffee2000},{0xffee4000},{0xffee6000},{0xffee8000},{0xffeea000},{0xffeec000},{0xffeee000},{0xffef0000},{0xffef2000},{0xffef4000},{0xffef6000},{0xffef8000},{0xffefa000},{0xffefc000},{0xffefe000}, +{0xfff00000},{0xfff02000},{0xfff04000},{0xfff06000},{0xfff08000},{0xfff0a000},{0xfff0c000},{0xfff0e000},{0xfff10000},{0xfff12000},{0xfff14000},{0xfff16000},{0xfff18000},{0xfff1a000},{0xfff1c000},{0xfff1e000},{0xfff20000},{0xfff22000},{0xfff24000},{0xfff26000},{0xfff28000},{0xfff2a000},{0xfff2c000},{0xfff2e000},{0xfff30000},{0xfff32000},{0xfff34000},{0xfff36000},{0xfff38000},{0xfff3a000},{0xfff3c000},{0xfff3e000}, +{0xfff40000},{0xfff42000},{0xfff44000},{0xfff46000},{0xfff48000},{0xfff4a000},{0xfff4c000},{0xfff4e000},{0xfff50000},{0xfff52000},{0xfff54000},{0xfff56000},{0xfff58000},{0xfff5a000},{0xfff5c000},{0xfff5e000},{0xfff60000},{0xfff62000},{0xfff64000},{0xfff66000},{0xfff68000},{0xfff6a000},{0xfff6c000},{0xfff6e000},{0xfff70000},{0xfff72000},{0xfff74000},{0xfff76000},{0xfff78000},{0xfff7a000},{0xfff7c000},{0xfff7e000}, +{0xfff80000},{0xfff82000},{0xfff84000},{0xfff86000},{0xfff88000},{0xfff8a000},{0xfff8c000},{0xfff8e000},{0xfff90000},{0xfff92000},{0xfff94000},{0xfff96000},{0xfff98000},{0xfff9a000},{0xfff9c000},{0xfff9e000},{0xfffa0000},{0xfffa2000},{0xfffa4000},{0xfffa6000},{0xfffa8000},{0xfffaa000},{0xfffac000},{0xfffae000},{0xfffb0000},{0xfffb2000},{0xfffb4000},{0xfffb6000},{0xfffb8000},{0xfffba000},{0xfffbc000},{0xfffbe000}, +{0xfffc0000},{0xfffc2000},{0xfffc4000},{0xfffc6000},{0xfffc8000},{0xfffca000},{0xfffcc000},{0xfffce000},{0xfffd0000},{0xfffd2000},{0xfffd4000},{0xfffd6000},{0xfffd8000},{0xfffda000},{0xfffdc000},{0xfffde000},{0xfffe0000},{0xfffe2000},{0xfffe4000},{0xfffe6000},{0xfffe8000},{0xfffea000},{0xfffec000},{0xfffee000},{0xffff0000},{0xffff2000},{0xffff4000},{0xffff6000},{0xffff8000},{0xffffa000},{0xffffc000},{0xffffe000}, diff --git a/tensorflow_graphics/physics/external/partio/src/io/pdb.h b/tensorflow_graphics/physics/external/partio/src/io/pdb.h new file mode 100644 index 000000000..b48a9aece --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/io/pdb.h @@ -0,0 +1,162 @@ +/* +PARTIO SOFTWARE +Copyright 2010 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +This code is based on the Gifts/readpdb directory of Autodesk Maya + +NOTE: some modifications were made and "32-bit" versions of the +structures were created to allow us to assume the pointers were +32-bit integers instead of system dependent pointers. As originally +defined, this format would be architecture dependent (behave +differently on 32-bit and 64-bit architectures). Maya's writers +may or may not also be doing this. If you have any files that +don't work, please let me know. But in general, it would be +difficult/error prone to detect what type the PDB file is. + +*/ + + +#define PDB_VECTOR 1 +#define PDB_REAL 2 +#define PDB_LONG 3 +#define PDB_CHAR 4 +#define PDB_POINTERT 5 + +typedef float Real; + +typedef struct { Real x,y,z; } Vector; + + +typedef struct Channel_Data32 { + int type; + unsigned int datasize; + unsigned int blocksize; + int num_blocks; + unsigned int block; //was void **block; +} Channel_Data32; + +typedef struct { + int type; + unsigned int datasize; + unsigned int blocksize; + int num_blocks; + void **block; +} Channel_Data; + +typedef struct Channel { + + char *name; + int type; + unsigned int size; + unsigned int active_start; + unsigned int active_end; + + char hide; + char disconnect; + Channel_Data *data; + + struct Channel *link; + struct Channel *next; } Channel; + +typedef struct Channel32 { + unsigned int name; + int type; + unsigned int size; + unsigned int active_start; + unsigned int active_end; + + char hide; + char disconnect; + unsigned int data; + + unsigned int link; + unsigned int next; +} Channel32; + + + +typedef struct { + + char magic; + unsigned short swap; + char encoding; + char type; } Channel_io_Header; + +typedef struct { + + int numAttributes; + int numParticles; + float time; + short *types; + char **names; + void **data; } PDBdata; + +typedef struct { + + int numAttributes; + int numParticles; + float time; + short *types; + char **names; + unsigned int data; } PDBdata32; +#define PDB_MAGIC 670 + + +typedef struct { + + int magic; + unsigned short swap; + float version; + float time; + unsigned data_size; + unsigned num_data; + + char padding[32]; + + Channel **data; + } PDB_Header; + + +typedef struct { + int magic; + unsigned short swap; + float version; + float time; + unsigned data_size; + unsigned num_data; + + char padding[32]; + + unsigned int data; +} PDB_Header32; + diff --git a/tensorflow_graphics/physics/external/partio/src/io/readers.h b/tensorflow_graphics/physics/external/partio/src/io/readers.h new file mode 100644 index 000000000..69e11be23 --- /dev/null +++ b/tensorflow_graphics/physics/external/partio/src/io/readers.h @@ -0,0 +1,65 @@ +/* +PARTIO SOFTWARE +Copyright 2011 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation +Studios" or the names of its contributors may NOT be used to +endorse or promote products derived from this software without +specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _READERS_h_ +#define _READERS_h_ + +namespace Partio{ +ParticlesDataMutable* readBGEO( const char* filename,const bool headersOnly); +ParticlesDataMutable* readGEO( const char* filename,const bool headersOnly); +ParticlesDataMutable* readPDB( const char* filename,const bool headersOnly); +ParticlesDataMutable* readPDB32(const char* filename,const bool headersOnly); +ParticlesDataMutable* readPDB64(const char* filename,const bool headersOnly); +ParticlesDataMutable* readPDA( const char* filename,const bool headersOnly); +ParticlesDataMutable* readMC( const char* filename,const bool headersOnly); +ParticlesDataMutable* readPTC( const char* filename,const bool headersOnly); +ParticlesDataMutable* readPDC( const char* filename,const bool headersOnly); +ParticlesDataMutable* readPRT( const char* filename,const bool headersOnly); +ParticlesDataMutable* readBIN( const char* filename,const bool headersOnly); +ParticlesDataMutable* readPTS( const char* filename,const bool headersOnly); + +bool writeBGEO(const char* filename,const ParticlesData& p,const bool compressed); +bool writeGEO(const char* filename,const ParticlesData& p,const bool compressed); +bool writePDB(const char* filename,const ParticlesData& p,const bool compressed); +bool writePDB32(const char* filename,const ParticlesData& p,const bool compressed); +bool writePDB64(const char* filename,const ParticlesData& p,const bool compressed); +bool writePDA(const char* filename,const ParticlesData& p,const bool compressed); +bool writePTC(const char* filename,const ParticlesData& p,const bool compressed); +bool writeRIB(const char* filename,const ParticlesData& p,const bool compressed); +bool writePDC(const char* filename,const ParticlesData& p,const bool compressed); +bool writePRT(const char* filename,const ParticlesData& p,const bool compressed); +bool writeBIN(const char* filename,const ParticlesData& p,const bool compressed); +} + +#endif diff --git a/tensorflow_graphics/physics/memo.py b/tensorflow_graphics/physics/memo.py new file mode 100644 index 000000000..e519838b7 --- /dev/null +++ b/tensorflow_graphics/physics/memo.py @@ -0,0 +1,51 @@ +class Memo: + """ + The :class:`Memo` is the data structure that records the result of each + timestep of simulation and returns it to be interpreted by a higher-level algorithm. + The key part of the Memo that is of most interest to a user is :attr:`steps`, which + is a list of Tuples as defined in :mod:`time_integration` in the method :func:`get_name_states`. + Please note that data from simulation substeps will NOT be returned. + Other data saved in the Memo includes actuation sequences, simulation initializations, running losses, + and information for visualization. + + :param steps: A list of tuples representing the computed results of each step of a simulation. If simulated for n timesteps, steps will be of length n+1, where the first entry is the initial state of the simulation. + :param actuations: A list of the actuation signal at each step of the simulation. + :param initial_state: An object of type :class:\`InitialState` which represents the state of the system prior to simulation. + :param iteration_feed_dict: An optional dictionary to be used for evaluating tensors in the simulation. + :param point_visualization: An optional list of tuples, each containing a numpy array of points to be visualized followed by color and radius information. Typically filled in automatically depending on how :meth:`Simulation.add_point_visualization` is called. + :param vector_visualization: An optional list of tuples, each containing a numpy array of vector directions to be visualized followed by color and and length information. Typically filled in automatically depending on how :meth:`Simulation.add_vector_visualization` is called. + """ + #DOCTODO: stepwise loss and return loss if released. + + def __init__(self) -> None: + """Create a new empty Memo.""" + self.steps = [] + self.actuations = [] + self.initial_state = None + self.initial_feed_dict = {} + self.iteration_feed_dict = {} + self.point_visualization = [] + self.vector_visualization = [] + self.stepwise_loss = None + self.return_losses = None + + def update_stepwise_loss(self, step): + #DOCTODO: update if released. + from IPython import embed + if step is None: + return + if self.stepwise_loss is None: + self.stepwise_loss = step + return + if not isinstance(step, list): + self.stepwise_loss += step + return + + def add(a, b): + if isinstance(a, list): + for x, y in zip(a, b): + add(x, y) + else: + a += b + + add(self.stepwise_loss, step) diff --git a/tensorflow_graphics/physics/mpm3d.py b/tensorflow_graphics/physics/mpm3d.py new file mode 100644 index 000000000..93c052bec --- /dev/null +++ b/tensorflow_graphics/physics/mpm3d.py @@ -0,0 +1,66 @@ +import tensorflow as tf +from tensorflow.python.framework import ops +from tensorflow.python.ops import array_ops +from tensorflow.python.ops import sparse_ops +import os +import numpy as np + +file_dir = os.path.dirname(os.path.realpath(__file__)) +MPM_module = tf.load_op_library(os.path.join(file_dir, '../../build/libtaichi_tf_differentiable_mpm.so')) + +mpm = MPM_module.mpm + +def normalize_grid(grid, res, gravity, dt): + np_res = np.array(res) + dim = np_res.shape[0] + assert len(grid.shape) == 3 + assert dim in [2, 3], 'Dimension must be 2 or 3!' + batch_size, num_cells, dim_1 = grid.shape + assert dim_1 == dim + 1, dim_1 + assert num_cells == np_res.prod() + + grid_v = grid[:, :, :dim] + grid_m = grid[:, :, dim:] + grid_v += grid_m * np.array(gravity)[None, None, :] * dt + grid_v = grid_v / tf.maximum(1e-30, grid_m) + + ''' + + sticky_mask = tf.cast(bc_parameter == -1, tf.float32) + grid_v *= (1 - sticky_mask) + + mask = tf.cast( + tf.reduce_sum(bc_normal**2, axis=3, keepdims=True) != 0, + tf.float32) + normal_component_length = tf.reduce_sum( + grid_v * bc_normal, axis=3, keepdims=True) + perpendicular_component = grid_v - bc_normal * normal_component_length + perpendicular_component_length = tf.sqrt( + tf.reduce_sum(perpendicular_component**2, axis=3, keepdims=True) + 1e-7) + normalized_perpendicular_component = perpendicular_component / tf.maximum( + perpendicular_component_length, 1e-7) + perpendicular_component_length = tf.sign(perpendicular_component_length) * \ + tf.maximum(tf.abs(perpendicular_component_length) + + tf.minimum(normal_component_length, 0) * bc_parameter, 0) + projected_velocity = bc_normal * tf.maximum( + normal_component_length, + 0) + perpendicular_component_length * normalized_perpendicular_component + grid_v = grid_v * ( + 1 - mask) + mask * projected_velocity + ''' + + grid = tf.concat([grid_v, grid_m], axis = 2) + + return grid + +@ops.RegisterGradient("Mpm") +def _mpm_grad_cc(op, *grads): + """The gradient of the MPM function, as defined by the kernel described in the src directory, for :func:`mpm`""" + attr_labels = ['dt', 'dx', 'gravity', 'resolution', 'V_p', 'material_model', 'incompressibility_exp'] + attrs = {} + for st in attr_labels: + attrs[st] = op.get_attr(st) + + + tensors = list(op.inputs) + list(op.outputs) + list(grads) + return MPM_module.mpm_grad(*tensors, **attrs) diff --git a/tensorflow_graphics/physics/simulation.py b/tensorflow_graphics/physics/simulation.py new file mode 100644 index 000000000..9663ffdd3 --- /dev/null +++ b/tensorflow_graphics/physics/simulation.py @@ -0,0 +1,874 @@ +import tensorflow as tf +from vector_math import * +import numpy as np +from time_integration import InitialSimulationState, UpdatedSimulationState +from time_integration import tf_precision, np_precision +from memo import Memo +import IPython +import os +from typing import Iterable, Callable, Union, List + +generate_timeline = False + +try: + import ctypes +except: + print("Warning: cannot import taichi or CUDA solver.") + +def get_new_bc(res, boundary_thickness=4, boundary = None, boundary_ = None): + if len(res) == 2: + bc_parameter = np.zeros( + shape=(1,) + res + (1,), dtype=np_precision) + bc_parameter += 0.0 # Coefficient of friction + bc_normal = np.zeros(shape=(1,) + res + (len(res),), dtype=np_precision) + bc_normal[:, :boundary_thickness] = (1, 0) + bc_normal[:, res[0] - boundary_thickness - 1:] = (-1, 0) + bc_normal[:, :, :boundary_thickness] = (0, 1) + bc_normal[:, :, res[1] - boundary_thickness - 1:] = (0, -1) + for i in range(res[0]): + ry = boundary(i) + x, iy = i, int(np.round(ry)) + k = boundary_(i) + L = (k ** 2 + 1) ** 0.5 + dx, dy = (-k / L, 1 / L) + for y in range(iy - 5, iy + 1): + bc_normal[:, x, y] = (dx, dy) + bc_parameter[:, x, y] = 0 + return bc_parameter, bc_normal + +def get_bounding_box_bc(res : Iterable, friction : float=0.5, boundary_thickness : int=3) -> np.ndarray: + """ + Create a box around the entire world with specified friction and box thickness. Useful for making sure particles don't "escape." The resulting tuple can be passed into the simulation constructor. + + :param res: The resolution of the world in terms of grid cell count. + :type res: tuple of ints. + :param friction: The dynamic friction coefficient of the bounding box + :type friction: float, optional + :param boundary_thickness: The number of grid cells thickness to make non-penetrable on each side of the world. + :type boundary_thickness: int, optional + :return bc_parameter: The friction of the boundary condition, uniform, batch_size x res x 1. Rank 4 or 5 total depending on rank of res (2 or 3). + :rtype bc_paramter: np.array + :return bc_normal: The normal of the boundary condition at each grid cell, uniform, batch_size x res x dim. Rank 4 or 5 total depending on rank of res (2 or 3). + :rtype bc_normal: np.array + """ + if len(res) == 2: + bc_parameter = np.zeros( + shape=(1,) + res + (1,), dtype=np_precision) + bc_parameter += friction # Coefficient of friction + bc_normal = np.zeros(shape=(1,) + res + (len(res),), dtype=np_precision) + # len([:boundary_thickness]) = boundary_thickness. + # len([res[0]:]) = [] + # len([res[0] - boundary_thickness:]) = boundary_thickness. + bc_normal[:, :boundary_thickness] = (1, 0) + bc_normal[:, res[0] - boundary_thickness:] = (-1, 0) + bc_normal[:, :, :boundary_thickness] = (0, 1) + bc_normal[:, :, res[1] - boundary_thickness:] = (0, -1) + else: + assert len(res) == 3 + bc_parameter = np.zeros( + shape=(1,) + res + (1,), dtype=np_precision) + bc_parameter += friction # Coefficient of friction + bc_normal = np.zeros(shape=(1,) + res + (len(res),), dtype=np_precision) + bc_normal[:, :boundary_thickness] = (1, 0, 0) + bc_normal[:, res[0] - boundary_thickness - 1:] = (-1, 0, 0) + bc_normal[:, :, :boundary_thickness] = (0, 1, 0) + bc_normal[:, :, res[1] - boundary_thickness - 1:] = (0, -1, 0) + bc_normal[:, :, :boundary_thickness] = (0, 1, 0) + bc_normal[:, :, res[1] - boundary_thickness - 1:] = (0, -1, 0) + bc_normal[:, :, :, :boundary_thickness] = (0, 0, 1) + bc_normal[:, :, :, res[2] - boundary_thickness - 1:] = (0, 0, -1) + return bc_parameter, bc_normal + +class Simulation: + """The simulation class. In order to simulate a robot, the simulator must be created, then its run and eval_gradients methods may be called. Once initialized, the simulation should be treated as immutable. The simulation takes in the world deformation (boundary condition, gravity, etc.), the robot configuration, and simulator settings. Constructor parameters: + + :param sess: The current tensorflow session. + :type sess: tf.session + :param grid_res: The grid resolution of the world, in terms of the grid node count. Length dim. + :type grid_res: tuple + :param num_particles: The total number of particles to simulate. + :type num_particles: int + :param controller: A function which takes as input a :class:`SimulationState` and returns the actuation that state should produce (closed loop control) and returns the stress actuation matrix (batch_size x dim x dim x num_particles) to apply to each particle and optional debug information. + :type controller: function, optional + :param F_controller: A function which takes as input a :class:`SimulationState` and returns the actuation that state should produce (closed loop control) and returns a global force vector (batch_size x dim x num_particles) to apply to each particle and optional debug information. + :type F_controller: function, optional + :param gravity: an indexible type of length dim of floats, denoting the world gravity. + :type gravity: indexible type, optional + :param dt: The simulation timestep. + :type dt: float, optional. + :param dx: The (uniform) length of each grid cell (in all directions) + :type dx: float, optional + :param bc: The boundary condition of the world. tuple of length 2 of form friction (batch_size, res, 1), normals (batch_size, res, dim). + :type bc: tuple, optional. + :param E: The Young's modulus of the particles. Can either be a scalar (uniform stiffness) or a tensor (spatially varying) of size batch_size x 1 x num_particles. + :type E: float or tf.tensor, optional + :param nu: The Poisson's ratio of the particles. Can either be a scalar (uniform stiffness) or a tensor (spatially varying) of size batch_size x 1 x num_particles. + :type nu: float or tf.tensor, optional + :param m_p: The mass of the particles. Can either be a scalar (uniform stiffness) or a tensor (spatially varying) of size batch_size x 1 x num_particles. + :type m_p: float or tf.tensor, optional + :param V_p: The volume of the particles. Can either be a scalar (uniform stiffness) or a tensor (spatially varying) of size batch_size x 1 x num_particles. + :type V_p: float or tf.tensor, optional + :param batch_size: The batch size. + :type batch_size: int, optional + :param scale: An amount to scale the visualization by. + :type scale: int, optional + :param damping: A Rayleigh damping parameter. + :type damping: float, optional + :param part_size: Number of steps to simulate sequentially on the GPU before returning any results to the CPU. + :type part_size: int, optional + :param use_visualize: Should we store data for visualization purposes? + :type use_visualize: bool, optional + :param use_cuda: Simulate on GPU? If not, CPU + :type use_cuda: bool, optional + :param substeps: Number of steps to simulate sequentially on the GPU before returning any results to the CPU (for recording the memo or applying controller input), This is similar to part_size, but will not call the controller while applying substeps. + :type substeps: int, optional + """ + + def __init__(self, + sess : tf.compat.v1.Session, + # Let's use grid_res to represent the number of grid nodes along each direction. + # So grid_res = (3, 3) means 2 x 2 voxels. + grid_res : Iterable, + num_particles : int, + controller : Callable[['SimulationState'], tf.Tensor]=None, + F_controller : Callable[['SimulationState'], tf.Tensor]=None, + gravity : Iterable=(0, -9.8), + dt : float=0.01, + dx : float=None, + bc : np.ndarray=None, + E : Union[float, tf.Tensor]=10, # E can be either a scalar or a tensor. + nu : Union[float, tf.Tensor]=0.3, + m_p : Union[float, tf.Tensor]=1, # m_p can be either a scalar or a tensor. + V_p : Union[float, tf.Tensor]=1, + batch_size : int=1, + scale : int=None, + damping : float=0, + part_size : int=1, + use_visualize : bool=True, + use_cuda : bool=True, + substeps : int=1, + use_neohookean=False, + incompressibility_exp=-1.0) -> None: + # Set up the constraints for the dynamic mode: + self.substeps = substeps + self.use_cuda = use_cuda + self.use_neohookean = use_neohookean + self.incompressibility_exp = incompressibility_exp + + self.dim = len(grid_res) + self.InitialSimulationState = InitialSimulationState + self.UpdatedSimulationState = UpdatedSimulationState + if self.dim == 2: + self.identity_matrix = identity_matrix + else: + self.identity_matrix = identity_matrix_3d + + assert batch_size == 1, "Only batch_size = 1 is supported." + + self.sess = sess + self.num_particles = num_particles + if scale is None: + self.scale = 900 // grid_res[0] + else: + self.scale = scale + if (self.scale * grid_res[0]) % 2 != 0 or (self.scale * grid_res[1]) % 2 != 0: + self.scale += 1 #keep it even + + self.grid_res = grid_res + self.dim = len(self.grid_res) + if dx is None: + # grid_res[0] - 1 because grid_res is the number of nodes, not cells. + # This way, Node 0 is at 0 and Node[grid_res[0] - 1] is at 1.0. + # We have grid_res[0] - 1 cells that fully covers [0, 1]. + dx = 1.0 / (grid_res[0] - 1) + self.batch_size = batch_size + self.damping = damping + + if bc is None and self.dim == 2: + bc = get_bounding_box_bc(grid_res) + + if bc is not None: + self.bc_parameter, self.bc_normal = bc + self.initial_state = self.InitialSimulationState(self, controller, F_controller) + self.grad_state = self.InitialSimulationState(self, controller, F_controller) + self.gravity = gravity + self.dx = dx + self.dt = dt + if type(E) in [int, float]: + self.youngs_modulus = np.full((batch_size, 1, num_particles), E) + else: + self.youngs_modulus = E + assert self.youngs_modulus.shape == (batch_size, 1, num_particles) + # nu has to be a scalar. + if type(nu) in [int, float]: + self.nu = np.full((batch_size, 1, num_particles), nu) + else: + self.nu = nu + assert self.nu.shape == (batch_size, 1, num_particles) + # We allow m_p to be a scalar or a Tensor. + if type(m_p) in [int, float]: + self.m_p = np.full((batch_size, 1, num_particles), m_p) + else: + self.m_p = m_p + assert self.m_p.shape == (batch_size, 1, num_particles) + # V_p has to be a scalar + if type(V_p) not in [int, float]: + print("Error: V_p must be a scalar.") + raise NotImplementedError + self.V_p = V_p + self.inv_dx = 1.0 / dx + + self.part_size = part_size + self.states = [self.initial_state] + for i in range(part_size): + self.states.append(self.UpdatedSimulationState(self, previous_state = self.states[-1], controller = controller, F_controller = F_controller)) + + self.updated_state = self.states[-1] + self.controller = controller + self.parameterized_initial_state = None + self.point_visualization = [] + self.vector_visualization = [] + self.frame_counter = 0 + self.use_visualize = use_visualize + + def stepwise_sym(self, expr): + temp = tf.stack([expr(state) for state in self.states[1:]], axis = 0) + return tf.reduce_sum(input_tensor=temp, axis = 0) + + def visualize_2d(self, memo : 'Memo', interval : int=1, batch : int=0, export : 'Export'=None, show : bool=False, folder : str=None, youngs_to_color : Callable[[float], float]=None) -> None: + """ + Visualize a simulation in 2D. Uses a built-in visualizer using OpenCV. + + :param memo: The memo returned by the simulation to visualize + :type memo: :class:`Memo` + :param interval: The number of steps to skip in visualization between frames. + :type interval: int, optional + :param batch: The batch num + :type batch: int, optional + :param export: An export object providing information for saving the visualization. Set as None if saving is not desired. + :type export: :class:`Export`, optional + :param show: Whether or not we should show the visualization to the screen + :type show: bool, optional + :param folder: A directory of where to save the visualization + :type folder: str, optional + :param youngs_to_color: A float to float mapping from Youngs modulus to between 0 and 1 for the visualizing Young's modulus in the blue color channel. Set to None if visualizing youngs modulus is not desired. + :type youngs_to_color: func, optional + """ + import math + import cv2 + scale = self.scale + + b = batch + # Pure-white background + background = 0.5 * np.ones( + (self.grid_res[0], self.grid_res[1], 3), dtype=np_precision) + background[:,:,2]=1.0 + + for i in range(self.grid_res[0]): + for j in range(self.grid_res[1]): + if self.bc_parameter[0][i][j] == -1: + background[i][j][0] = 0 + normal = self.bc_normal[0][i][j] + if np.linalg.norm(normal) != 0: + background[i][j] *= 0.7 + background = cv2.resize( + background, (0, 0), fx=scale, fy=scale, interpolation=cv2.INTER_NEAREST) + + alpha = 0.50 + last_image = background + + if folder: + os.makedirs(folder, exist_ok=True) + + + for i, (s, act, points, vectors) in enumerate(zip(memo.steps, memo.actuations, memo.point_visualization, memo.vector_visualization)): + if i % interval != 0: + continue + + particles = [] + pos = s[0][b] * self.inv_dx + 0.5 + pos = np.transpose(pos) + youngs = np.ndarray.flatten(s[6][b]) + + scale = self.scale + + img = background.copy() + for j, (young, p) in enumerate(zip(youngs, pos)): + x, y = tuple(map(lambda t: math.floor(t * scale), p)) + if youngs_to_color is None: + intensity = 0.2 + else: + intensity = youngs_to_color(young) + if act is not None: + a = act[0, :, :, j] + max_act = 2.0 #TODO: pass this in. Right now overriding the max. + else: + a = np.array([[0, 0], [0, 0]]) + max_act = 1.0 + + red = a[0, 0] / max_act/ 2.0 + 0.5 + green = a[1, 1] / max_act / 2.0 + 0.5 + #red = np.sqrt(a[0, 0]**2 + a[1, 1]**2) / max_act / 2.0 + #green = 0.5 + color = (red, green, intensity) + cv2.circle(img, (y, x), radius=3, color=color, thickness=-1) + particles.append((p[0], p[1]) + (young, color[1], color[2], a[0][0], a[0][1], a[1][0], a[1][1])) + + dots = [] + for dot in points: + coord, color, radius = dot + #handle a whole bunch of points here: + for pt in coord: + pt = np.int32((pt * self.inv_dx + 0.5) * scale) + cv2.circle(img, (pt[1], pt[0]), color=color, radius=radius, thickness=-1) + dots.append(tuple(pt) + tuple(color)) + + for line in vectors: + pos, vec, color, gamma = line + pos = (pos * self.inv_dx + 0.5) * scale + vec = vec * gamma + pos + cv2.line(img, (pos[b][1], pos[b][0]), (vec[b][1], vec[b][0]), color = color, thickness = 1) + + last_image = 1 - (1 - last_image) * (1 - alpha) + last_image = np.minimum(last_image, img) + img = last_image.copy() + img = img.swapaxes(0, 1)[::-1, :, ::-1] + + if show: + cv2.imshow('Differentiable MPM Simulator', img) + cv2.waitKey(1) + if export is not None: + export(img) + + if folder: + with open(os.path.join(folder, 'frame{:05d}.txt'.format(i)), 'w') as f: + for p in particles: + print('part ', end=' ', file=f) + for x in p: + print(x, end=' ', file=f) + print(file=f) + for d in dots: + print('vis ', end=' ', file=f) + for x in d: + print(x, end=' ', file=f) + print(file=f) + + if export is not None: + export.wait() + + def visualize_3d(self, memo, interval=1, batch=0, export=None, show=False, folder=None): + if export: + frame_count_delta = self.frame_counter + else: + frame_count_delta = 0 + print(folder) + print("Warning: skipping the 0th frame..") + for i, (s, act, points, vectors) in enumerate(zip(memo.steps, memo.actuations, memo.point_visualization, memo.vector_visualization)): + if i % interval != 0 or i == 0: + continue + pos = s[0][batch].copy() + if output_bgeo: + task = Task('write_partio_c') + #print(np.mean(pos, axis=(0))) + ptr = pos.ctypes.data_as(ctypes.c_void_p).value + suffix = 'bgeo' + else: + task = Task('write_tcb_c') + #print(np.mean(pos, axis=(0))) + act = np.mean(act, axis=(1, 2), keepdims=True)[0, :, 0] * 9 + pos = np.concatenate([pos, act], axis=0).copy() + ptr = pos.ctypes.data_as(ctypes.c_void_p).value + suffix = 'tcb' + if folder is not None: + os.makedirs(folder, exist_ok=True) + else: + folder = '.' + task.run(str(self.num_particles), + str(ptr), '{}/{:04d}.{}'.format(folder, i // interval + frame_count_delta, suffix)) + self.frame_counter += 1 + + def visualize(self, memo, interval=1, batch=0, export=None, show=False, folder=None): + if self.dim == 2: + self.visualize_2d(memo, interval, batch, export, show, folder) + else: + self.visualize_3d(memo, interval, batch, export, show, folder) + + + def initial_state_place_holder(self): + return self.initial_state.to_tuple() + + def evaluate_points(self, state, extra={}): + if self.point_visualization is None: + return [] + pos_tensors = [p[0] for p in self.point_visualization] + feed_dict = {self.initial_state.to_tuple(): state} + feed_dict.update(extra) + + pos = self.sess.run(pos_tensors, feed_dict=feed_dict) + return [(p,) + tuple(list(r)[1:]) + for p, r in zip(pos, self.point_visualization)] + + def evaluate_vectors(self, state, extra = {}): + if self.vector_visualization is None: + return [] + pos_tensors = [v[0] for v in self.vector_visualization] + vec_tensors = [v[1] for v in self.vector_visualization] + feed_dict = {self.initial_state.to_tuple(): state} + feed_dict.update(extra) + pos = self.sess.run(pos_tensors, feed_dict=feed_dict) + vec = self.sess.run(vec_tensors, feed_dict=feed_dict) + return [(p,v) + tuple(list(r)[2:]) for p, v, r in zip(pos, vec, self.vector_visualization)] + + def run(self, + num_steps : int, + initial_state : 'SimulationState'=None, + initial_feed_dict : dict={}, + iteration_feed_dict : dict={}, + loss : Callable[['SimulationState'], tf.Tensor]=None, + stepwise_loss=None, + skip_states : bool=True, + freq : int=1) -> 'Memo': + + """Runs forward simulation for a specified numer of time steps from a specified initial state. + + :param num_steps: The number of steps to simulate forward for. + :type num_steps: int + :param initial_feed_dict: An optional tf.session feed dictionary mapping iniital state placeholder tensors to values to be evaluated during simulation. Useful if parts of the simulation should be represented parametrically. + :type initial_feed_dict: dict, optional + :param iteration_feed_dict: An optional tf.session feed dictionary mapping non-initial state placeholder tensors to values to be evaluated during simulation. Useful if parts of the simulation should be represented parametrically. + :type iteration_feed_dict: dict, optional + :param loss: A loss function that takes in a :class:`SimulationState` and returns a tensor scalar loss. Gradients will be computed with respect to this loss. + :type loss: func, optional + :return: A memo for the simulation. + :rtype: :class:`Memo` + """ + #DOCTODO: other params + + assert num_steps % self.part_size == 0 + if callable(iteration_feed_dict) and stepwise_loss is not None and not skip_states: + print('ERROR: this case is not implemented yet.') + sys.exit(-1) + memo = Memo() + memo.initial_feed_dict = initial_feed_dict + iter_feed_dict_eval = iteration_feed_dict + if callable(iteration_feed_dict): + iter_feed_dict_eval = iteration_feed_dict(0) + memo.iteration_feed_dict = iteration_feed_dict + if initial_state is None: + initial_state = self.initial_state + memo.initial_state = initial_state + + initial_evaluated = [] + for t in initial_state: + if isinstance(t, tf.Tensor): + initial_evaluated.append(self.sess.run(t, initial_feed_dict)) + else: + initial_evaluated.append(t) + + memo.steps = [initial_evaluated] + memo.actuations = [None] + if self.use_visualize: + memo.point_visualization.append(self.evaluate_points(memo.steps[0], iter_feed_dict_eval)) + memo.vector_visualization.append(self.evaluate_vectors(memo.steps[0], iter_feed_dict_eval)) + rest_steps = num_steps + t = 0 + idx = 0 + while rest_steps > 0: + now_step = min(rest_steps, self.part_size) + memo.last_step = now_step + rest_steps -= now_step + feed_dict = {self.initial_state.to_tuple(): memo.steps[-1]} + feed_dict.update(iter_feed_dict_eval) + # Update time and iter_feed_dict_eval. + t += self.dt * self.part_size + if callable(iteration_feed_dict): + iter_feed_dict_eval = iteration_feed_dict(t) + + if generate_timeline: + options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) + run_metadata = tf.RunMetadata() + + timeline_options = { + 'options': options, + 'run_metadata': run_metadata + } + else: + timeline_options = {} + + has_act = self.updated_state.controller is not None + + if stepwise_loss is None: + ret_ph = [self.states[now_step].to_tuple()] + if has_act: + ret_ph += [self.states[now_step].actuation] + ret = self.sess.run(ret_ph, feed_dict=feed_dict, **timeline_options) + '''ANDY DEBUG''' + ''' + with tf.variable_scope("globals", reuse=tf.AUTO_REUSE): + first_time = tf.get_variable("first_time", initializer = tf.constant(1.0), dtype=tf.float32) + first_time = self.sess.run(first_time) + ''' + if False: #Uncomment me for debug info + tmp = self.sess.run("image_test:0", feed_dict=feed_dict, **timeline_options) + recon_scalar = self.sess.run("recon_diff/Squeeze:0", feed_dict=feed_dict, **timeline_options) + recon_image = self.sess.run("recon_image:0", feed_dict=feed_dict, **timeline_options) + feed_dict[self.run_image] = tmp + feed_dict[self.recon_error] = recon_scalar + feed_dict[self.recon_image] = recon_image + summary = self.merged_summary_op.eval(feed_dict=feed_dict) + self.summary_writer.add_summary(summary, self.summary_iter) + self.summary_iter += 1 + inp = self.sess.run("inputs:0", feed_dict=feed_dict, **timeline_options) + f=open('pca.txt','ab') + #print('write') + np.savetxt(f,inp[0, :, 0]) + f.flush() + ''' + import matplotlib.pyplot as plt + plt.imshow(tmp[0]) + plt.show() + ''' + '''END ANDY DEBUG''' + + memo.steps.append(ret[0]) + if has_act: + memo.actuations.append(ret[1]) + else: + if skip_states: + ret_ph = [self.states[now_step].to_tuple()] + if has_act: + ret_ph += [self.states[now_step].actuation] + ret = self.sess.run(ret_ph, feed_dict=feed_dict, **timeline_options) + s = [ret[0]] + a = [ret[1] if has_act else None] + # Compute the loss. + loss_feed_dict = { self.initial_state.to_tuple(): s } + loss_feed_dict.update(iter_feed_dict_eval) + swl = self.sess.run(loss, feed_dict=loss_feed_dict, **timeline_options) + else: + ret_states = [s.to_tuple() for s in self.states] + s, swl = self.sess.run((ret_states[1:], stepwise_loss), + feed_dict=feed_dict, **timeline_options) + if has_act: + ret_actuations = [s.actuation for s in self.states] + a = self.sess.run(ret_actuations[1:], + feed_dict=feed_dict, **timeline_options) + else: + a = [None] * len(s) + memo.steps += s + memo.actuations += a + # It seems that update_stepwise_loss(swl) did not work when swl is a scalar. + memo.update_stepwise_loss(swl) + + if self.use_visualize: + if stepwise_loss is None or skip_states: + memo.point_visualization.append(self.evaluate_points(memo.steps[-1], iter_feed_dict_eval)) + memo.vector_visualization.append(self.evaluate_vectors(memo.steps[-1], iter_feed_dict_eval)) + else: + for s in memo.steps[-now_step:]: + memo.point_visualization.append(self.evaluate_points(s, iter_feed_dict_eval)) + memo.vector_visualization.append(self.evaluate_vectors(s, iter_feed_dict_eval)) + + # Create the Timeline object, and write it to a json file + if generate_timeline: + fetched_timeline = timeline.Timeline(run_metadata.step_stats) + chrome_trace = fetched_timeline.generate_chrome_trace_format() + with open('timeline.json', 'w') as f: + f.write(chrome_trace) + IPython.embed() + + if loss is not None and stepwise_loss is None: + feed_dict = {self.initial_state.to_tuple(): memo.steps[-1]} + feed_dict.update(iter_feed_dict_eval) + memo.loss = self.sess.run(loss, feed_dict=feed_dict) + + return memo + + @staticmethod + def replace_none_with_zero(grads, data): + ret = [] + for g, t in zip(grads, data): + if g is None: + ret.append(tf.zeros_like(t)) + else: + ret.append(g) + return tuple(ret) + + def set_initial_state(self, initial_state): + self.parameterized_initial_state = initial_state + + ''' + def gradients_step_sym(self, loss, variables, steps): + step_grad_variables = tf.gradients( + ys = self.states[steps].to_tuple(), + xs = self.initial_state.to_tuple(), + grad_ys = self.grad_state.to_tuple()) + + step_grad_variables = self.replace_none_with_zero(step_grad_variables, + variables) + + step_grad_states = tf.gradients( + ys=self.states[steps].to_tuple(), + xs=self.initial_state.to_tuple(), + grad_ys=self.grad_state.to_tuple()) + + step_grad_states = self.replace_none_with_zero( + step_grad_states, self.initial_state.to_tuple()) + + return {'steps_grad_variables': } + ''' + + def gradients_sym(self, loss : Callable[[float], float], variables : Iterable[tf.Variable], use_stepwise_loss : bool=False, skip_states : bool=True) -> dict: + """ + Computes a sym dictionary with all the information needed to efficiently compute gradients. This must be called once for a problem and the resulting dictionary must be pased in to any eval_gradients calls. + + :param loss: A loss function that takes in a :class:`SimulationState` and returns a tensor scalar loss. Gradients will be computed with respect to this loss. + :type loss: func, optional + :param variables: A collection of tf.Variables with respect to which gradients are computed. + :type variables: collection + :return: A dict to be passed into eval_gradients. + :rtype: :class:`dict` + + """ + # loss = loss(initial_state) + variables = tuple(variables) + + last_grad_sym = tf.gradients(ys=loss, xs=self.initial_state.to_tuple()) + + last_grad_sym_valid = self.replace_none_with_zero( + last_grad_sym, self.initial_state.to_tuple()) + + for v in variables: + assert tf.convert_to_tensor(v).dtype == tf_precision, v + + # partial S / partial var + step_grad_variables = tf.gradients( + ys=self.updated_state.to_tuple(), + xs=variables, + grad_ys=self.grad_state.to_tuple()) + + step_grad_variables = self.replace_none_with_zero(step_grad_variables, + variables) + + # partial S / partial S' + if use_stepwise_loss and not skip_states: + updated_state = self.states[1] + else: + updated_state = self.updated_state + step_grad_states = tf.gradients( + ys=updated_state.to_tuple(), + xs=self.initial_state.to_tuple(), + grad_ys=self.grad_state.to_tuple()) + + step_grad_states = self.replace_none_with_zero( + step_grad_states, self.initial_state.to_tuple()) + + parameterized_initial_state = tuple([ + v for v in self.parameterized_initial_state if isinstance(v, tf.Tensor) + ]) + parameterized_initial_state_indices = [ + i for i, v in enumerate(self.parameterized_initial_state) + if isinstance(v, tf.Tensor) + ] + + def pick(l): + return tuple(l[i] for i in parameterized_initial_state_indices) + + initial_grad_sym = tf.gradients( + ys=parameterized_initial_state, + xs=variables, + grad_ys=pick(self.grad_state.to_tuple())) + + initial_grad_sym_valid = self.replace_none_with_zero( + initial_grad_sym, variables) + + sym = {} + sym['last_grad_sym_valid'] = last_grad_sym_valid + sym['initial_grad_sym_valid'] = initial_grad_sym_valid + sym['step_grad_variables'] = step_grad_variables + sym['step_grad_states'] = step_grad_states + sym['parameterized_initial_state'] = parameterized_initial_state + sym['pick'] = pick + sym['variables'] = variables + + return sym + + def eval_gradients(self, sym : dict, memo : 'Memo', use_stepwise_loss : bool=False, skip_states : bool=True) -> List[np.ndarray]: + """Compute the gradients of a completed simulation. + :param sym: The symbolic dictionary returned by :meth:`gradients_sym` + :type sym: dict + :param memo: The memo returned by a simulation from :meth:`run` + :type memo: :class:`Memo` + :return: A collection of np.array with the same structure as the variables passed into :meth:`gradient_sym`; a tuple of np.arrays + :rtype: tuple + """ + if use_stepwise_loss and not skip_states: + print('ERROR: this case is not implemented yet.') + sys.exit(0) + last_grad_sym_valid = sym['last_grad_sym_valid'] + initial_grad_sym_valid = sym['initial_grad_sym_valid'] + step_grad_variables = sym['step_grad_variables'] + step_grad_states = sym['step_grad_states'] + parameterized_initial_state = sym['parameterized_initial_state'] + pick = sym['pick'] + variables = sym['variables'] + + grad = [np.zeros(shape=v.shape, dtype=np_precision) for v in variables] + feed_dict = {self.initial_state.to_tuple(): memo.steps[-1]} + t = self.dt * self.part_size * (len(memo.steps) - 1) + iter_feed_dict_eval = memo.iteration_feed_dict + if callable(memo.iteration_feed_dict): + iter_feed_dict_eval = memo.iteration_feed_dict(t) + feed_dict.update(iter_feed_dict_eval) + last_grad_valid = self.sess.run(last_grad_sym_valid, feed_dict=feed_dict) + + + last_step_flag = memo.last_step != self.part_size + if last_step_flag: + raise Exception("Unfinished step") + + if use_stepwise_loss and not skip_states: + updated_state = self.states[1] + else: + updated_state = self.updated_state + + for i in reversed(range(1, len(memo.steps))): + if any(v is not None for v in step_grad_variables): + feed_dict = { + self.initial_state.to_tuple(): memo.steps[i - 1], + updated_state.to_tuple(): memo.steps[i], + self.grad_state.to_tuple(): last_grad_valid + } + feed_dict.update(iter_feed_dict_eval) + grad_acc = self.sess.run(step_grad_variables, feed_dict=feed_dict) + for g, a in zip(grad, grad_acc): + g += a + + feed_dict = { + self.initial_state.to_tuple(): memo.steps[i - 1], + updated_state.to_tuple(): memo.steps[i], + self.grad_state.to_tuple(): last_grad_valid + } + feed_dict.update(iter_feed_dict_eval) + last_grad_valid = self.sess.run(step_grad_states, feed_dict=feed_dict) + # Update iter_feed_dict_eval. + t -= self.dt * self.part_size + if callable(memo.iteration_feed_dict): + iter_feed_dict_eval = memo.iteration_feed_dict(t) + # We define stepwise loss on memo.steps[1:], not the whole memo.steps. + if use_stepwise_loss and i != 1: + feed_dict = {self.initial_state.to_tuple(): memo.steps[i - 1]} + feed_dict.update(iter_feed_dict_eval) + last_step_grad_valid = self.sess.run(last_grad_sym_valid, feed_dict=feed_dict) + for g, a in zip(last_grad_valid, last_step_grad_valid): + g += a + + assert np.isclose(t, 0) + + if any(v is not None for v in initial_grad_sym_valid): + feed_dict = {} + feed_dict[parameterized_initial_state] = pick(memo.steps[0]) + feed_dict[pick(self.grad_state.to_tuple())] = pick(last_grad_valid) + grad_acc = self.sess.run(initial_grad_sym_valid, feed_dict=feed_dict) + for g, a in zip(grad, grad_acc): + g += a + + return grad + + def get_initial_state(self, + position : Union[tf.Tensor, np.ndarray], + velocity : Union[tf.Tensor, np.ndarray]=None, + particle_mass : Union[tf.Tensor, np.ndarray]=None, + particle_volume : Union[tf.Tensor, np.ndarray]=None, + youngs_modulus : Union[tf.Tensor, np.ndarray]=None, + poissons_ratio : Union[tf.Tensor, np.ndarray]=None, + deformation_gradient : Union[tf.Tensor, np.ndarray]=None) -> 'SimulationSate': + + """Gets an :class:`InitialSimulationState` object to pass into sim.run's initial state. Defines the initial state of a simulation. Users may specify the configuration; initial particle position must at least be provided. Defaults to simulation constructor values. + + :param position: batch_size x dim x num_particles representing the initial particle positions. + :type position: np.array or tf.tensor + :param velocity: batch_size x dim x num_particles represneting the initial particle velocities. + :type velocity: np.array or tf.tensor + :param velocity: batch_size x 1 x num_particles represneting the initial particle young's moduluses. + :type velocity: np.array or tf.tensor + :param velocity: batch_size x 1 x num_particles represneting the initial poissons' ratios. + :type velocity: np.array or tf.tensor + :param velocity: batch_size x 1 x num_particles represneting the initial particle masses. + :type velocity: np.array or tf.tensor + :param velocity: batch_size x 1 x num_particles represneting the initial particle volumes. + :type velocity: np.array or tf.tensor + :param velocity: batch_size x dim x dim x num_particles represneting the initial particle deformation_gradient. + :type velocity: np.array or tf.tensor + :return: :class:`InitialSimulationState` representing the initial state of the MPM system. Most useful for passing into :meth:`run` + :rtype: :class:`InitialSimulationState` + """ + acceleration = np.zeros( + shape=[self.batch_size, self.dim, self.num_particles], dtype = np_precision) + if velocity is not None: + initial_velocity = velocity + else: + initial_velocity = np.zeros( + shape=[self.batch_size, self.dim, self.num_particles], dtype = np_precision) + if deformation_gradient is None: + deformation_gradient = self.identity_matrix +\ + np.zeros(shape=(self.batch_size, 1, 1, self.num_particles), dtype = np_precision), + affine = self.identity_matrix * 0 + \ + np.zeros(shape=(self.batch_size, 1, 1, self.num_particles), dtype = np_precision), + batch_size = self.batch_size + num_particles = self.num_particles + + if type(particle_mass) in [int, float]: + self.m_p = np.ones(shape=(batch_size, 1, num_particles), dtype=np_precision) * particle_mass + elif particle_mass is not None: + self.m_p = particle_mass + assert self.m_p.shape == (batch_size, 1, num_particles) + particle_mass = self.m_p + + # For now, we require particle_Volume to be scalars. + if type(particle_volume) in [int, float]: + self.V_p = particle_volume + elif particle_volume is not None: + print("ERROR: particle_volume has to be a scalar.") + raise NotImplementedError + particle_volume = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * self.V_p + + if type(youngs_modulus) in [int, float]: + self.youngs_modulus = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * youngs_modulus + elif youngs_modulus is not None: + self.youngs_modulus = youngs_modulus + else: + self.youngs_modulus = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * self.youngs_modulus + assert self.youngs_modulus.shape == (batch_size, 1, num_particles) + youngs_modulus = self.youngs_modulus + + if type(poissons_ratio) in [int, float]: + self.nu = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * poissons_ratio + elif poissons_ratio is not None: + self.nu = poissons_ratio + else: + self.nu = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * self.nu + assert self.nu.shape == (batch_size, 1, num_particles) + poissons_ratio = self.nu + + #TODO: should this be more general? + #IPython.embed() + grid_mass = np.zeros( + shape=[self.batch_size, *self.grid_res, 1], dtype = np_precision) + grid_velocity = np.zeros( + shape=[self.batch_size, *self.grid_res, self.dim], dtype = np_precision) + + + + + + + return (position, initial_velocity, deformation_gradient, affine, + particle_mass, particle_volume, youngs_modulus, poissons_ratio, + 0, acceleration, grid_mass, grid_velocity) + + def add_point_visualization(self, pos, color=(1, 0, 0), radius=3): + self.point_visualization.append((pos, color, radius)) + + def add_vector_visualization(self, pos, vector, color=(1, 0, 0), scale=10): + self.vector_visualization.append((pos, vector, color, scale)) diff --git a/tensorflow_graphics/physics/src/backward.cu b/tensorflow_graphics/physics/src/backward.cu new file mode 100644 index 000000000..0a1f11977 --- /dev/null +++ b/tensorflow_graphics/physics/src/backward.cu @@ -0,0 +1,565 @@ +#include "kernels.h" +#include "linalg.h" +#include "state.cuh" +#include +#include + +template +__global__ void P2G_backward(TState state, TState next_state) { + // Scatter particle gradients to grid nodes + // P2G part of back-propagation + int part_id = blockIdx.x * blockDim.x + threadIdx.x; + if (part_id >= state.num_particles) { + return; + } + + auto x = state.get_x(part_id); + auto v = state.get_v(part_id); + auto F = state.get_F(part_id); + auto C = state.get_C(part_id); + + auto grad_x_next = next_state.get_grad_x(part_id); + auto grad_v_next = next_state.get_grad_v(part_id); + auto grad_F_next = next_state.get_grad_F(part_id); + auto grad_C_next = next_state.get_grad_C(part_id); + + // (A) v_p^n+1, accumulate + grad_v_next = grad_v_next + state.dt * grad_x_next; + + // (B) C_p^n+1, accumulate + for (int alpha = 0; alpha < dim; alpha++) { + for (int beta = 0; beta < dim; beta++) { + for (int gamma = 0; gamma < dim; gamma++) { + grad_C_next[alpha][beta] += + state.dt * grad_F_next[alpha][gamma] * F[beta][gamma]; + } + } + } + + // Accumulate to grad_v and grad_C + // next_state.set_grad_v(part_id, grad_v_next); + // next_state.set_grad_C(part_id, grad_C_next); + + TransferCommon tc(state, x); + + for (int i = 0; i < kernel_volume(); i++) { + real N = tc.w(i); + auto dpos = tc.dpos(i); + + // (C) v_i^n + real grad_v_i[dim]; + for (int alpha = 0; alpha < dim; alpha++) { + grad_v_i[alpha] = grad_v_next[alpha] * N; + for (int beta = 0; beta < dim; beta++) { + grad_v_i[alpha] += + state.invD * N * grad_C_next[alpha][beta] * dpos[beta]; + } + } + auto grad_n = + state.grad_grid_node(tc.base_coord + offset_from_scalar(i)); + for (int d = 0; d < dim; d++) { + // printf("grad_v_i %d %f\n", d, grad_v_i[d]); + atomicAdd(&grad_n[d], grad_v_i[d]); + } + } +} + +TC_FORCE_INLINE __device__ real H(real x) { + return x >= 0 ? 1 : 0; +} + +template +__global__ void grid_backward(TState state) { + // Scatter particle gradients to grid nodes + // P2G part of back-propagation + + using Vector = typename TState::Vector; + int id = blockIdx.x * blockDim.x + threadIdx.x; + if (id < state.num_cells) { + auto node = state.grid_node(id); + auto grad_node = state.grad_grid_node(id); + if (node[dim] > 0) { + // (D) + // Convert grad_v to grad_p + // grad_p = grad_v / m + auto m = node[dim]; + real inv_m = 1.0f / m; + + auto grad_v_i = Vector(grad_node); + auto v_i = Vector(state.grid_star_node(id)); + auto v_i_with_g = v_i; + for (int i = 0; i < dim; i++) { + v_i_with_g[i] += state.gravity[i] * state.dt; + } + auto v_i_star = Vector(state.grid_node(id)); + + auto bc = state.grid_node_bc(id); + auto normal = Vector(bc); + auto lin = v_i_with_g.dot(normal); + + real coeff = bc[dim]; + + if (coeff == -1) { + // sticky + grad_v_i = Vector(0.0f); + } else if (normal.length2() > 0) { + auto vit = v_i_with_g - lin * normal; + auto lit = sqrt(vit.length2() + 1e-7); + auto vithat = (1.0f / lit) * vit; + auto R = lit + coeff * min(lin, 0.0f); + auto litstar = max(R, 0.0f); + auto vistar = litstar * vithat + max(lin, 0.0f) * normal; + + auto r = vistar - v_i_star; + for (int i = 0; i < dim; i++) { + if (fabs(r[i]) > 1e-6) + printf("mismatch r %f\n", r[i]); + } + auto grad_v_i_star = grad_v_i; + + auto grad_litstar = 0.0f; + for (int i = 0; i < dim; i++) { + grad_litstar += grad_v_i_star[i] * vithat[i]; + } + Vector grad_vithat = litstar * grad_v_i_star; + + auto grad_lit = grad_litstar * H(R); + for (int i = 0; i < dim; i++) { + grad_lit += -1 / (lit * lit) * vit[i] * grad_vithat[i]; + } + auto grad_vit = (1 / lit) * (grad_lit * vit + grad_vithat); + auto grad_lin = grad_litstar * H(R) * coeff * H(-lin); + + for (int i = 0; i < dim; i++) { + grad_lin -= grad_vit[i] * normal[i]; + grad_lin += H(lin) * normal[i] * grad_v_i_star[i]; + } + auto new_grad_v_i = grad_lin * normal + grad_vit; + grad_v_i = new_grad_v_i; + } + + auto grad_p = inv_m * grad_v_i; + // (E) + real grad_m = 0; + for (int alpha = 0; alpha < dim; alpha++) { + grad_m -= inv_m * v_i[alpha] * grad_v_i[alpha]; + grad_node[alpha] = grad_p[alpha]; + } + grad_node[dim] = grad_m; + } + } +} + +// (F), (G), (H), (I), (J) +template +__global__ void G2P_backward(TState state, TState next_state) { + // Scatter particle gradients to grid nodes + // P2G part of back-propagation + int part_id = blockIdx.x * blockDim.x + threadIdx.x; + if (part_id >= state.num_particles) { + return; + } + + auto x = state.get_x(part_id); + auto v = state.get_v(part_id); + auto F = state.get_F(part_id); + auto C = state.get_C(part_id); + auto P = state.get_P(part_id); + auto A = state.get_A(part_id); + + auto grad_F_next = next_state.get_grad_F(part_id); + auto grad_C_next = next_state.get_grad_C(part_id); + auto grad_P_next = next_state.get_grad_P(part_id); + auto grad_v_next = next_state.get_grad_v(part_id); + auto grad_x_next = next_state.get_grad_x(part_id); + + auto C_next = next_state.get_C(part_id); + // (A) v_p^n+1, accumulate + grad_v_next = grad_v_next + state.dt * grad_x_next; + + // (B) C_p^n+1, accumulate + for (int alpha = 0; alpha < dim; alpha++) { + for (int beta = 0; beta < dim; beta++) { + for (int gamma = 0; gamma < dim; gamma++) { + grad_C_next[alpha][beta] += + state.dt * grad_F_next[alpha][gamma] * F[beta][gamma]; + } + } + } + + TMatrix grad_P, grad_F, grad_C; + + TransferCommon tc(state, x); + { + /* + real dx = 1e-4f; + TransferCommon tc2(state, x + Vector(0, 0, dx)); + for (int i = 0; i < dim; i++) { + for (int j = 0; j < dim; j++) { + for (int k = 0; k < dim; k++) { + auto d = tc.dw(i, j, k); + printf("%f %f\n", d[2], (tc2.w(i, j, k) - tc.w(i, j, k))/ dx); + } + } + } + */ + } + + TVector grad_v; + real grad_P_scale = state.dt * state.invD * state.V_p; + + // (G) Compute grad_P + for (int i = 0; i < kernel_volume(); i++) { + real N = tc.w(i); + auto dpos = tc.dpos(i); + auto grad_p = state.get_grad_grid_velocity(tc.base_coord + + offset_from_scalar(i)); + auto grad_N = tc.dw(i); + for (int alpha = 0; alpha < dim; alpha++) { + for (int beta = 0; beta < dim; beta++) { + // (G) P_p^n + for (int gamma = 0; gamma < dim; gamma++) { + grad_P[alpha][beta] += + -N * grad_P_scale * grad_p[alpha] * F[gamma][beta] * dpos[gamma]; + } + // (I) C_p^n + if (mpm_enalbe_apic) + grad_C[alpha][beta] += N * grad_p[alpha] * state.m_p * dpos[beta]; + } + } + } + + // (H) term 2 + if (mpm_enalbe_force) { + Times_Rotated_dP_dF_FixedCorotated(state.mu, state.lambda, F, grad_P, + grad_F); + /* + TMatrix grad_F2; + for (int i = 0; i < dim; i++) { + for (int j = 0; j < dim; j++) { + auto inc = F, dec = F; + real delta = 1e-4f; + inc[i][j] += delta; + dec[i][j] -= delta; + auto diff = (1 / (2 * delta)) * (PK1(state.mu, state.lambda, inc) - + PK1(state.mu, state.lambda, dec)); + grad_F2 = grad_F2 + grad_P[i][j] * diff; + } + } + for (int i = 0; i < dim; i++) { + for (int j = 0; j < dim; j++) { + printf("%d %d: %f %f\n", i, j, grad_F2[i][j] * 1e8, + grad_F[i][j] * 1e8); + } + } + + grad_F = grad_F2; + */ + } + + for (int alpha = 0; alpha < dim; alpha++) { + for (int beta = 0; beta < dim; beta++) { + // (H) term 1 + for (int gamma = 0; gamma < dim; gamma++) { + grad_F[alpha][beta] += + grad_F_next[gamma][beta] * + (real(gamma == alpha) + state.dt * C_next[gamma][alpha]) + + grad_P[alpha][gamma] * A[beta][gamma]; + } + } + } + + typename TState::Matrix grad_A; + for (int alpha = 0; alpha < dim; alpha++) { + for (int beta = 0; beta < dim; beta++) { + for (int gamma = 0; gamma < dim; gamma++) { + grad_A[alpha][beta] += + grad_P[gamma][beta] * F[gamma][alpha]; + } + } + } + state.set_grad_A(part_id, grad_A); + + // (J) term 1 + auto grad_x = next_state.get_grad_x(part_id); + // printf("grad_x %f\n", grad_x[0]); + auto G = (mpm_enalbe_force) * -state.invD * state.dt * state.V_p * P * + transposed(F); + if (mpm_enalbe_apic) { + G = G + state.m_p * C; + } + + for (int i = 0; i < kernel_volume(); i++) { + real N = tc.w(i); + auto dpos = tc.dpos(i); + auto grid_coord = tc.base_coord + offset_from_scalar(i); + auto grad_p = state.get_grad_grid_velocity(grid_coord); + + for (int d = 0; d < dim; d++) { + // printf("grad p[%d] %.10f\n", d, grad_p[d]); + } + + auto grad_N = tc.dw(i); + auto n = state.grid_node(grid_coord); + auto mi = state.get_grid_mass(grid_coord); + // printf(" m m %f %f\n", mi, n[dim]); + auto vi = state.get_grid_velocity(grid_coord); + auto grad_mi = state.grad_grid_node(grid_coord)[dim]; + + // printf("%.10f\n", grad_p[0]); + // printf("%.10f\n", grad_p[1]); + // printf("%.10f\n", grad_p[2]); + // printf("\n"); + for (int alpha = 0; alpha < dim; alpha++) { + // (F) v_p^n + grad_v[alpha] += N * state.m_p * grad_p[alpha]; + + // (J) term 5 + grad_x[alpha] += grad_N[alpha] * grad_mi * state.m_p; + + for (int beta = 0; beta < dim; beta++) { + for (int gamma = 0; gamma < dim; gamma++) { + // (H), term 3 + grad_F[alpha][beta] += + -N * grad_p[gamma] * grad_P_scale * P[gamma][beta] * dpos[alpha]; + } + + // (J), term 2 + grad_x[alpha] += grad_v_next[beta] * grad_N[alpha] * vi[beta]; + // (J), term 3 + auto tmp = -grad_C_next[beta][alpha] * N * vi[beta]; + for (int gamma = 0; gamma < dim; gamma++) { + tmp += + grad_C_next[beta][gamma] * grad_N[alpha] * vi[beta] * dpos[gamma]; + } + grad_x[alpha] += state.invD * tmp; + // auto tmp = grad_N[alpha] * vi[beta] * dpos[alpha] - N * vi[beta]; + // grad_x[alpha] += state.invD * grad_C_next[beta][alpha] * tmp; + // (J), term 4 + grad_x[alpha] += + grad_p[beta] * + (grad_N[alpha] * (state.m_p * v[beta] + (G * dpos)[beta]) - + N * G[beta][alpha]); + } + } + } + state.set_grad_x(part_id, grad_x); + /* + for (int i = 0; i < dim; i++) { + printf("v %d %f %f\n", i, grad_v[i], grad_x[i]); + } + for (int i = 0; i < dim; i++) { + for (int j = 0; j < dim; j++) { + printf("m %d %d %f %f %f %f\n", i, j, grad_F[i][j], grad_C[i][j], F[i][j], + grad_P[i][j]); + } + } + */ + state.set_grad_v(part_id, grad_v); + if (mpm_enalbe_force) + state.set_grad_F(part_id, grad_F); + state.set_grad_C(part_id, grad_C); +} + +__device__ real rand_real(int i) { + real t = sinf(i) * 100.0; + return t - floor(t); +} + +__global__ void check2d(int k_) { + constexpr int dim = 2; + int k = k_; + auto rand = [&]() { return rand_real(k++); }; + using Vector = TVector; + auto grad_v_i = Vector(rand(), rand()); + auto v_i = Vector(rand() * 2 - 1, rand() * 2 - 1); + // auto v_i = Vector(-0.5, 0.0); + + auto angle = rand() * 2 * 3.14f; + auto normal = Vector(sinf(angle), cosf(angle)); + // auto normal = Vector(1, 0); + auto coeff = rand(); + // auto coeff = 0; + + auto forward = [&](Vector v_i) { + auto lin = v_i.dot(normal); + auto vit = v_i - lin * normal; + auto lit = sqrt(vit.length2() + 1e-7); + auto vithat = (1.0f / lit) * vit; + auto R = lit + coeff * min(lin, 0.0f); + auto litstar = max(R, 0.0f); + auto vistar = litstar * vithat + max(lin, 0.0f) * normal; + return vistar.dot(grad_v_i); + }; + + auto lin = v_i.dot(normal); + auto vit = v_i - lin * normal; + auto lit = sqrt(vit.length2() + 1e-7); + auto vithat = (1.0f / lit) * vit; + auto R = lit + coeff * min(lin, 0.0f); + auto litstar = max(R, 0.0f); + auto vistar = litstar * vithat + max(lin, 0.0f) * normal; + + auto grad_v_i_star = grad_v_i; + + auto grad_litstar = 0.0f; + for (int i = 0; i < dim; i++) { + grad_litstar += grad_v_i_star[i] * vithat[i]; + } + Vector grad_vithat = litstar * grad_v_i_star; + + auto grad_lit = grad_litstar * H(R); + for (int i = 0; i < dim; i++) { + grad_lit += -1 / (lit * lit) * vit[i] * grad_vithat[i]; + } + auto grad_vit = (1 / lit) * (grad_lit * vit + grad_vithat); + auto grad_lin = grad_litstar * H(R) * coeff * H(-lin); + /* + printf("lit %f\n", lit); + for (int i = 0; i < dim; i++) { + printf("gradlitstar %f\n", grad_litstar); + } + printf("gradlin %f\n", grad_lin); + */ + + for (int i = 0; i < dim; i++) { + // printf("normal [%d] %f\n", i, normal[i]); + grad_lin -= grad_vit[i] * normal[i]; + grad_lin += H(lin) * normal[i] * grad_v_i_star[i]; + } + auto new_grad_v_i = grad_lin * normal + grad_vit; + + real dx = 1e-4f; + for (int d = 0; d < dim; d++) { + Vector delta; + delta[d] = dx; + real f0 = forward(v_i + delta); + real f1 = forward(v_i - delta); + real grad = (f0 - f1) / (2 * dx); + // printf("f0, 1 = %f %f\n", f0, f1); + if (fabs(grad - new_grad_v_i[d]) > 1e-3f) { + printf("errr %d %f %f\n", d, grad, new_grad_v_i[d]); + } else { + // printf("pass %d %f %f\n", d, grad, new_grad_v_i[d]); + } + } +} + +template +void backward(TState &state, TState &next) { + state.clear_gradients(); + int num_blocks = + (state.num_particles + particle_block_dim - 1) / particle_block_dim; + int num_blocks_grid = state.grid_size(); + P2G_backward<<>>(state, next); + auto err = cudaThreadSynchronize(); + grid_backward + <<>>(state); + G2P_backward<<>>(state, next); + if (err) { + printf("Launch: %s\n", cudaGetErrorString(err)); + exit(-1); + } +} + +void MPMGradKernelLauncher(int dim, + int *res, + int num_particles, + real dx, + real dt, + real E, + real nu, + real m_p, + real V_p, + real *gravity, + const real *inx, + const real *inv, + const real *inF, + const real *inC, + const real *inA, + const real *ingrid, + const real *outx, + const real *outv, + const real *outF, + const real *outC, + const real *outP, + const real *outgrid, + const real *outgrid_star, + real *grad_inx, + real *grad_inv, + real *grad_inF, + real *grad_inC, + real *grad_inA, + real *grad_ingrid, + const real *grad_outx, + const real *grad_outv, + const real *grad_outF, + const real *grad_outC, + const real *grad_outP, + const real *grad_outgrid, + const real *grad_outgrid_star) { + if (dim == 2) { + /* + for (int i = 0; i < 10000; i++) { + check2d<<<1, 1>>>(i * 100); + } + exit(-1); + */ + constexpr int dim = 2; + auto current = new TState( + res, num_particles, dx, dt, gravity, (real *)inx, (real *)inv, + (real *)inF, (real *)inC, (real *)outP, (real *)inA, (real *)outgrid, + grad_inx, grad_inv, grad_inF, grad_inC, grad_inA, (real *)grad_outP, + (real *)grad_outgrid); + current->grid_bc = const_cast(ingrid); + current->grid_star_storage = const_cast(outgrid_star); + current->set(V_p, m_p, E, nu); + auto next = new TState( + res, num_particles, dx, dt, gravity, (real *)outx, (real *)outv, + (real *)outF, (real *)outC, nullptr, nullptr, nullptr, + (real *)grad_outx, (real *)grad_outv, (real *)grad_outF, + (real *)grad_outC, nullptr, nullptr, nullptr); + next->set(V_p, m_p, E, nu); + backward(*current, *next); + } else { + constexpr int dim = 3; + auto current = new TState( + res, num_particles, dx, dt, gravity, (real *)inx, (real *)inv, + (real *)inF, (real *)inC, (real *)outP, (real *)inA, (real *)outgrid, + grad_inx, grad_inv, grad_inF, grad_inC, grad_inA, (real *)grad_outP, + (real *)grad_outgrid); + current->grid_bc = const_cast(ingrid); + current->grid_star_storage = const_cast(outgrid_star); + current->set(V_p, m_p, E, nu); + auto next = new TState( + res, num_particles, dx, dt, gravity, (real *)outx, (real *)outv, + (real *)outF, (real *)outC, nullptr, nullptr, nullptr, + (real *)grad_outx, (real *)grad_outv, (real *)grad_outF, + (real *)grad_outC, nullptr, nullptr, nullptr); + next->set(V_p, m_p, E, nu); + backward(*current, *next); + } +} + +template +void backward_mpm_state(void *state_, void *next_state_) { + TState *state = reinterpret_cast *>(state_); + TState *next_state = reinterpret_cast *>(next_state_); + backward(*state, *next_state); +} + +template void backward_mpm_state<2>(void *state_, void *next_state_); +template void backward_mpm_state<3>(void *state_, void *next_state_); + +void set_grad_loss(void *state_) { + constexpr int dim = 3; + TState<3> *state = reinterpret_cast *>(state_); + state->clear_gradients(); + int num_particles = state->num_particles; + std::vector grad_x_host(num_particles * dim); + for (int i = 0; i < num_particles; i++) { + grad_x_host[i] = 1.0f / num_particles; + } + cudaMemcpy(state->grad_x_storage, grad_x_host.data(), + sizeof(real) * dim * num_particles, cudaMemcpyHostToDevice); +} diff --git a/tensorflow_graphics/physics/src/config.h b/tensorflow_graphics/physics/src/config.h new file mode 100644 index 000000000..ea391a416 --- /dev/null +++ b/tensorflow_graphics/physics/src/config.h @@ -0,0 +1 @@ +// #define TC_DMPM_DIM 2 diff --git a/tensorflow_graphics/physics/src/forward.cu b/tensorflow_graphics/physics/src/forward.cu new file mode 100644 index 000000000..97fce6e24 --- /dev/null +++ b/tensorflow_graphics/physics/src/forward.cu @@ -0,0 +1,366 @@ +#include "kernels.h" +#include "linalg.h" +#include "state.cuh" +#include +#include + +// Gather data from SOA +// Ensure coalesced global memory access + +// Do not consider sorting for now. Use atomics instead. + +// One particle per thread +template +__global__ void P2G(TState state) { + // constexpr int scratch_size = 8; + //__shared__ real scratch[dim + 1][scratch_size][scratch_size][scratch_size]; + + int part_id = blockIdx.x * blockDim.x + threadIdx.x; + if (part_id >= state.num_particles) { + return; + } + + real dt = state.dt; + + auto x = state.get_x(part_id); + for (int i = 0; i < dim; i++) { + x[i] = max(2 * state.dx, min(x[i], (state.res[i] - 2) * state.dx)); + } + state.set_x(part_id, x); + auto v = state.get_v(part_id); + auto F = state.get_F(part_id); + auto C = state.get_C(part_id); + + TransferCommon tc(state, x); + + auto A = state.get_A(part_id); + + // Fixed corotated + auto P = PK1(state.mu, state.lambda, F) + F * A; + state.set_P(part_id, P); + auto stress = -state.invD * dt * state.V_p * P * transposed(F); + + auto affine = + real(mpm_enalbe_force) * stress + real(mpm_enalbe_apic) * state.m_p * C; + +#pragma unroll + for (int i = 0; i < kernel_volume(); i++) { + auto dpos = tc.dpos(i); + + real contrib[dim + 1]; + + auto tmp = affine * dpos + state.m_p * v; + + auto w = tc.w(i); + for (int d = 0; d < dim; d++) { + contrib[d] = tmp[d] * w; + } + contrib[dim] = state.m_p * w; + + auto node = state.grid_node(tc.base_coord + offset_from_scalar(i)); + for (int p = 0; p < dim + 1; p++) { + atomicAdd(&node[p], contrib[p]); + } + } + for (int i = 0; i < dim; i++) { + for (int j = 0; j < dim; j++) { + // printf("forward A[%d][%d] %f\n", i, j, A[i][j]); + } + } +} + +template +__global__ void grid_forward(TState state) { + int id = blockIdx.x * blockDim.x + threadIdx.x; + using Vector = TVector; + if (id < state.num_cells) { + auto node = state.grid_node(id); + auto v_i = Vector(node); + if (node[dim] > 0) { + real inv_m = 1.0f / node[dim]; + v_i = inv_m * v_i; + auto grid_backup = state.grid_star_node(id); + for (int i = 0; i < dim; i++) { + grid_backup[i] = v_i[i]; + } + for (int i = 0; i < dim; i++) { + v_i[i] += state.gravity[i] * state.dt; + } + auto bc = state.grid_node_bc(id); + auto normal = Vector(bc); + real coeff = bc[dim]; + if (coeff == -1) { + v_i = Vector(0.0f); + } else if (normal.length2() > 0) { + auto lin = v_i.dot(normal); + auto vit = v_i - lin * normal; + auto lit = sqrt(vit.length2() + 1e-7); + auto vithat = (1 / lit) * vit; + auto litstar = max(lit + coeff * min(lin, 0.0f), 0.0f); + auto vistar = litstar * vithat + max(lin, 0.0f) * normal; + v_i = vistar; + } + + for (int i = 0; i < dim; i++) { + node[i] = v_i[i]; + } + } + } +} + +template +__global__ void G2P(TState state, TState next_state) { + int part_id = blockIdx.x * blockDim.x + threadIdx.x; + if (part_id >= state.num_particles) { + return; + } + + real dt = state.dt; + auto x = state.get_x(part_id); + typename TState::Vector v; + auto F = state.get_F(part_id); + typename TState::Matrix C; + + TransferCommon tc(state, x); + + for (int i = 0; i < kernel_volume(); i++) { + auto dpos = tc.dpos(i); + auto node = state.grid_node(tc.base_coord + offset_from_scalar(i)); + auto node_v = TState::Vector(node); + auto w = tc.w(i); + v = v + w * node_v; + C = C + TState::Matrix::outer_product(w * node_v, state.invD * dpos); + } + next_state.set_x(part_id, x + state.dt * v); + next_state.set_v(part_id, v); + next_state.set_F(part_id, (typename TState::Matrix(1) + dt * C) * F); + next_state.set_C(part_id, C); +} + +template +void advance(TState &state, TState &new_state) { + cudaMemset(state.grid_storage, 0, + state.num_cells * (state.dim + 1) * sizeof(real)); + int num_blocks = + (state.num_particles + particle_block_dim - 1) / particle_block_dim; + P2G<<>>(state); + + grid_forward<<<(state.grid_size() + grid_block_dim - 1) / grid_block_dim, + grid_block_dim>>>(state); + G2P<<>>(state, new_state); + auto err = cudaThreadSynchronize(); + if (err) { + printf("Launch: %s\n", cudaGetErrorString(err)); + exit(-1); + } +} + +// compability +void MPMKernelLauncher(int dim_, + int *res, + int num_particles, + real dx, + real dt, + real E, + real nu, + real m_p, + real V_p, + real *gravity, + const real *inx, + const real *inv, + const real *inF, + const real *inC, + const real *inA, + const real *ingrid, + real *outx, + real *outv, + real *outF, + real *outC, + real *outP, + real *outgrid, + real *outgrid_star) { + if (dim_ == 3) { + constexpr int dim = 3; + auto instate = new TState(res, num_particles, dx, dt, gravity, + (real *)inx, (real *)inv, (real *)inF, + (real *)inC, (real *)inA, outP, outgrid); + instate->grid_bc = const_cast(ingrid); + instate->grid_star_storage = outgrid_star; + instate->set(V_p, m_p, E, nu); + auto outstate = + new TState(res, num_particles, dx, dt, gravity, outx, outv, outF, + outC, nullptr, nullptr, nullptr); + outstate->set(V_p, m_p, E, nu); + advance(*instate, *outstate); + } else { + constexpr int dim = 2; + auto instate = new TState(res, num_particles, dx, dt, gravity, + (real *)inx, (real *)inv, (real *)inF, + (real *)inC, (real *)inA, outP, outgrid); + instate->grid_bc = const_cast(ingrid); + instate->grid_star_storage = outgrid_star; + instate->set(V_p, m_p, E, nu); + auto outstate = + new TState(res, num_particles, dx, dt, gravity, outx, outv, outF, + outC, nullptr, nullptr, nullptr); + outstate->set(V_p, m_p, E, nu); + advance(*instate, *outstate); + } +} +void P2GKernelLauncher(int dim_, + int *res, + int num_particles, + real dx, + real dt, + real E, + real nu, + real m_p, + real V_p, + real *gravity, + const real *inx, + const real *inv, + const real *inF, + const real *inC, + const real *inA, + real *outP, + real *outgrid) { + if (dim_ == 3) { + constexpr int dim = 3; + auto state = new TState(res, num_particles, dx, dt, gravity, + (real *)inx, (real *)inv, (real *)inF, + (real *)inC, (real *)inA, outP, outgrid); + int num_blocks = + (num_particles + particle_block_dim - 1) / particle_block_dim; + cudaMemset(outgrid, 0, state->num_cells * (dim + 1) * sizeof(real)); + state->set(V_p, m_p, E, nu); + P2G<<>>(*state); + } else { + constexpr int dim = 2; + auto state = new TState(res, num_particles, dx, dt, gravity, + (real *)inx, (real *)inv, (real *)inF, + (real *)inC, (real *)inA, outP, outgrid); + int num_blocks = + (num_particles + particle_block_dim - 1) / particle_block_dim; + cudaMemset(outgrid, 0, state->num_cells * (dim + 1) * sizeof(real)); + state->set(V_p, m_p, E, nu); + P2G<<>>(*state); + } +} +/* +void G2PKernelLauncher(int dim_, + int *res, + int num_particles, + real dx, + real dt, + real E, + real nu, + real m_p, + real V_p, + real *gravity, + const real *inx, + const real *inv, + const real *inF, + const real *inC, + const real *inP, + const real *ingrid, + real *outx, + real *outv, + real *outF, + real *outC) { + auto instate = new TState(res, num_particles, dx, dt, gravity, + (real *)inx, (real *)inv, (real *)inF, + (real *)inC, (real *)inP, (real *)ingrid); + auto outstate = new TState(res, num_particles, dx, dt, gravity, outx, + outv, outF, outC, nullptr, nullptr); + int num_blocks = + (num_particles + particle_block_dim - 1) / particle_block_dim; + G2P<<>>(*instate, *outstate); +} +*/ + +template +void initialize_mpm_state(int *res, + int num_particles, + float *gravity, + void *&state_, + float dx, + float dt, + float *initial_positions) { + // State(int res[dim], int num_particles, real dx, real dt, real + auto state = new TState(res, num_particles, dx, dt, gravity); + state_ = state; + cudaMemcpy(state->x_storage, initial_positions, + sizeof(TVector) * num_particles, + cudaMemcpyHostToDevice); +} + +template +void forward_mpm_state(void *state_, void *new_state_) { + auto *state = reinterpret_cast *>(state_); + auto *new_state = reinterpret_cast *>(new_state_); + advance(*state, *new_state); +} + +template void initialize_mpm_state<2>(int *res, + int num_particles, + float *gravity, + void *&state_, + float dx, + float dt, + float *initial_positions); +template void initialize_mpm_state<3>(int *res, + int num_particles, + float *gravity, + void *&state_, + float dx, + float dt, + float *initial_positions); +template void forward_mpm_state<2>(void *, void *); +template void forward_mpm_state<3>(void *, void *); +/* +constexpr int dim = 3; +void P2GKernelLauncher(int res[dim], + int num_particles, + real dx, + real dt, + real gravity[dim], + const real *inx, + const real *inv, + const real *inF, + const real *inC, + real *outP, + real *outgrid) { + auto state = + new TState(res, num_particles, dx, dt, gravity, (real *)inx, + (real *)inv, (real *)inF, (real *)inC, outP, outgrid); + cudaMemset(outgrid, 0, state->num_cells * (dim + 1) * sizeof(real)); + int num_blocks = + (num_particles + particle_block_dim - 1) / particle_block_dim; + P2G<<>>(*state); +} + +void G2PKernelLauncher(int res[dim], + int num_particles, + real dx, + real dt, + real gravity[dim], + const real *inx, + const real *inv, + const real *inF, + const real *inC, + const real *inP, + const real *ingrid, + real *outx, + real *outv, + real *outF, + real *outC) { + auto instate = new TState(res, num_particles, dx, dt, gravity, + (real *)inx, (real *)inv, (real *)inF, + (real *)inC, (real *)inP, (real *)ingrid); + auto outstate = new TState(res, num_particles, dx, dt, gravity, outx, + outv, outF, outC, nullptr, nullptr); + int num_blocks = + (num_particles + particle_block_dim - 1) / particle_block_dim; + G2P<<>>(*instate, *outstate); +} +*/ diff --git a/tensorflow_graphics/physics/src/g2pop.cc b/tensorflow_graphics/physics/src/g2pop.cc new file mode 100644 index 000000000..209749a69 --- /dev/null +++ b/tensorflow_graphics/physics/src/g2pop.cc @@ -0,0 +1,199 @@ +#if(0) +#include "tensorflow/core/framework/op_kernel.h" +#include "tensorflow/core/framework/tensor_shape.h" +#include "tensorflow/core/platform/default/logging.h" +#include "tensorflow/core/framework/shape_inference.h" + +using namespace tensorflow; + +/* + Register MPM operation +*/ + + + +REGISTER_OP("G2p") + .Input("position: float") //(batch_size, dim, particles) + .Input("velocity: float") //(batch_size, dim, particles) + .Input("affine: float") //(batch_size, dim, dim, particles) + .Input("deformation: float") //(batch_size, dim, dim, particles) + .Input("poly: float") //(batch_size, dim, dim, particles) + .Input("grid: float") //(batch_size, dim + 1, num_cells) + .Output("position_out: float") + .Output("velocity_out: float") + .Output("affine_out: float") + .Output("deformation_out: float") + .SetShapeFn([](::tensorflow::shape_inference::InferenceContext* c) { + + shape_inference::ShapeHandle x_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(0), 3, &x_shape)); + shape_inference::ShapeHandle v_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(1), 3, &v_shape)); + shape_inference::ShapeHandle F_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(2), 4, &F_shape)); + shape_inference::ShapeHandle C_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(3), 4, &C_shape)); + shape_inference::ShapeHandle P_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(4), 4, &P_shape)); + shape_inference::ShapeHandle grid_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(5), 3, &grid_shape)); + + shape_inference::DimensionHandle temp; + + shape_inference::DimensionHandle batch_size = c->Dim(x_shape, 0); + shape_inference::DimensionHandle batch_sizev = c->Dim(v_shape, 0); + shape_inference::DimensionHandle batch_sizeF = c->Dim(F_shape, 0); + shape_inference::DimensionHandle batch_sizeC = c->Dim(C_shape, 0); + shape_inference::DimensionHandle batch_sizeP = c->Dim(P_shape, 0); + shape_inference::DimensionHandle batch_sizegrid = c->Dim(grid_shape, 0); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizev, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeF, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeC, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeP, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizegrid, &temp)); + + shape_inference::DimensionHandle dim = c->Dim(x_shape, 1); + shape_inference::DimensionHandle dimv = c->Dim(v_shape, 1); + shape_inference::DimensionHandle dimF1 = c->Dim(F_shape, 1); + shape_inference::DimensionHandle dimF2 = c->Dim(F_shape, 2); + shape_inference::DimensionHandle dimC1 = c->Dim(C_shape, 1); + shape_inference::DimensionHandle dimC2 = c->Dim(C_shape, 2); + shape_inference::DimensionHandle dimP1 = c->Dim(P_shape, 1); + shape_inference::DimensionHandle dimP2 = c->Dim(P_shape, 2); + shape_inference::DimensionHandle dimgrid = c->Dim(grid_shape, 2); + TF_RETURN_IF_ERROR(c->Merge(dim, dimv, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimF1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimF2, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimC1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimC2, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimP1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimP2, &temp)); + // TF_RETURN_IF_ERROR(c->Merge(dim + 1, dimgrid, &temp)); TODO + + shape_inference::DimensionHandle particle = c->Dim(x_shape, 2); + shape_inference::DimensionHandle particlev = c->Dim(v_shape, 2); + shape_inference::DimensionHandle particleF = c->Dim(F_shape, 3); + shape_inference::DimensionHandle particleC = c->Dim(C_shape, 3); + shape_inference::DimensionHandle particleP = c->Dim(P_shape, 3); + TF_RETURN_IF_ERROR(c->Merge(particle, particlev, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleF, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleC, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleP, &temp)); + + return Status::OK(); + }); + +/* + MPM Operation GPU +*/ + +void G2PKernelLauncher( + int res[3], int num_particles, float dx, float dt, float gravity[3], + const float *inx, const float *inv, const float *inF, const float *inC, + const float *inP, const float *ingrid, + float *outx, float *outv, float *outF, float *outC); + +class G2POpGPU : public OpKernel { +public: + explicit G2POpGPU(OpKernelConstruction* context) : OpKernel(context) { + } + + void Compute(OpKernelContext* context) override { + + int res[3] = {100, 100, 100}; + float gravity[3] = {0, -0, 0}; + float dx = 1.0f / res[0]; + float dt = 1e-2f; + int num_cells = res[0] * res[1] * res[2]; + + // get the x + const Tensor& inx = context->input(0); + const Tensor& inv = context->input(1); + const Tensor& inF = context->input(2); + const Tensor& inC = context->input(3); + const Tensor& inP = context->input(4); + const Tensor& ingrid = context->input(5); + + // check shapes of input and weights + const TensorShape& x_shape = inx.shape(); + const TensorShape& v_shape = inv.shape(); + const TensorShape& F_shape = inF.shape(); + const TensorShape& C_shape = inC.shape(); + const TensorShape& P_shape = inP.shape(); + const TensorShape& grid_shape = ingrid.shape(); + + //Check that inputs' dimensional + DCHECK_EQ(x_shape.dims(), 3); + DCHECK_EQ(v_shape.dims(), 3); + DCHECK_EQ(F_shape.dims(), 4); + DCHECK_EQ(C_shape.dims(), 4); + DCHECK_EQ(P_shape.dims(), 4); + DCHECK_EQ(grid_shape.dims(), 4); + + const int batch_size = x_shape.dim_size(0); + const int dim = x_shape.dim_size(1); + const int particles = x_shape.dim_size(2); + + //Check input batch_size + DCHECK_EQ(batch_size, v_shape.dim_size(0)); + DCHECK_EQ(batch_size, F_shape.dim_size(0)); + DCHECK_EQ(batch_size, C_shape.dim_size(0)); + DCHECK_EQ(batch_size, P_shape.dim_size(0)); + DCHECK_EQ(batch_size, grid_shape.dim_size(0)); + + //Check input dim + DCHECK_EQ(dim, v_shape.dim_size(1)); + DCHECK_EQ(dim, F_shape.dim_size(1)); + DCHECK_EQ(dim, F_shape.dim_size(2)); + DCHECK_EQ(dim, C_shape.dim_size(1)); + DCHECK_EQ(dim, C_shape.dim_size(2)); + DCHECK_EQ(dim, P_shape.dim_size(1)); + DCHECK_EQ(dim, P_shape.dim_size(2)); + DCHECK_EQ(dim + 1, grid_shape.dim_size(2)); + + //Check input particles + DCHECK_EQ(particles, v_shape.dim_size(2)); + DCHECK_EQ(particles, F_shape.dim_size(3)); + DCHECK_EQ(particles, C_shape.dim_size(3)); + DCHECK_EQ(particles, P_shape.dim_size(3)); + + // create output tensor + Tensor* outx = NULL; + Tensor* outv = NULL; + Tensor* outF = NULL; + Tensor* outC = NULL; + OP_REQUIRES_OK(context, context->allocate_output(0, x_shape, &outx)); + OP_REQUIRES_OK(context, context->allocate_output(1, v_shape, &outv)); + OP_REQUIRES_OK(context, context->allocate_output(2, F_shape, &outF)); + OP_REQUIRES_OK(context, context->allocate_output(3, C_shape, &outC)); + + auto f_inx = inx.flat(); + auto f_inv = inv.flat(); + auto f_inF = inF.flat(); + auto f_inC = inC.flat(); + auto f_inP = inP.flat(); + auto f_ingrid = ingrid.flat(); + auto f_outx = outx->template flat(); + auto f_outv = outv->template flat(); + auto f_outF = outF->template flat(); + auto f_outC = outC->template flat(); + + + G2PKernelLauncher( + res, particles, dx, dt, gravity, + f_inx.data(), + f_inv.data(), + f_inF.data(), + f_inC.data(), + f_inP.data(), + f_ingrid.data(), + f_outx.data(), + f_outv.data(), + f_outF.data(), + f_outC.data()); + } +}; + +REGISTER_KERNEL_BUILDER(Name("G2p").Device(DEVICE_GPU), G2POpGPU); + +#endif diff --git a/tensorflow_graphics/physics/src/kernels.h b/tensorflow_graphics/physics/src/kernels.h new file mode 100644 index 000000000..34e1c391e --- /dev/null +++ b/tensorflow_graphics/physics/src/kernels.h @@ -0,0 +1,28 @@ +#pragma once +#include + +void saxpy_cuda(int n, float alpha, float *x, float *y); +void test_svd_cuda(int n, float *, float *, float *, float *); +template +void initialize_mpm_state(int *, + int, + float *, + void *&, + float dx, + float dt, + float *initial_positions + ); + +template +void forward_mpm_state(void *, void *); + +template +void backward_mpm_state(void *, void *); + +void set_grad_loss(void *); + +template +void set_mpm_bc(void *state_, float *bc); + +template +void set_mpm_actuation(void *state_, float *act); diff --git a/tensorflow_graphics/physics/src/linalg.h b/tensorflow_graphics/physics/src/linalg.h new file mode 100644 index 000000000..2d03e2a50 --- /dev/null +++ b/tensorflow_graphics/physics/src/linalg.h @@ -0,0 +1,233 @@ +#pragma once + +#include +#include "svd.cuh" +#include + +TC_FORCE_INLINE __device__ void svd(Matrix3 &A, + Matrix3 &U, + Matrix3 &sig, + Matrix3 &V) { + // clang-format off + sig[0][1] = sig[0][2] = sig[1][0] = sig[1][2] = sig[2][0] = sig[2][1] = 0; + svd( + A[0][0], A[0][1], A[0][2], + A[1][0], A[1][1], A[1][2], + A[2][0], A[2][1], A[2][2], + U[0][0], U[0][1], U[0][2], + U[1][0], U[1][1], U[1][2], + U[2][0], U[2][1], U[2][2], + sig[0][0], sig[1][1], sig[2][2], + V[0][0], V[0][1], V[0][2], + V[1][0], V[1][1], V[1][2], + V[2][0], V[2][1], V[2][2] + ); + // clang-format on +} + + +TC_FORCE_INLINE __device__ void polar_decomp(TMatrix &A, + TMatrix &R, + TMatrix &S) { + TMatrix U, sig, V; + svd(A, U, sig, V); + R = U * transposed(V); + S = V * sig * transposed(V); +} + +TC_FORCE_INLINE __device__ real Clamp_Small_Magnitude(const real input) { + real magnitude = input > 0 ? input : -input; + real sign = input > 0 ? 1.f : -1.f; + real output = magnitude > 1e-6 ? magnitude : 1e-6; + return output * sign; +} + +template +__device__ void Times_Rotated_dP_dF_FixedCorotated(const real mu, + const real lambda, + TMatrix &F_, + TMatrix &dF_, + TMatrix &dP_); + +TC_FORCE_INLINE __device__ TMatrix dR_from_dF(TMatrix &F, + TMatrix &R, + TMatrix &S, + TMatrix &dF) { + using Matrix = TMatrix; + using Vector = TVector; + // set W = R^T dR = [ 0 x ] + // [ -x 0 ] + // + // R^T dF - dF^T R = WS + SW + // + // WS + SW = [ x(s21 - s12) x(s11 + s22) ] + // [ -x[s11 + s22] x(s21 - s12) ] + // ---------------------------------------------------- + Matrix lhs = transposed(R) * dF - transposed(dF) * R; + real x = lhs(0, 1) / (S(0, 0) + S(1, 1)); + Matrix W = Matrix(0, x, -x, 0); + return R * W; +} + +template <> +inline void __device__ +Times_Rotated_dP_dF_FixedCorotated<2>(real mu, + real lambda, + TMatrix &F, + TMatrix &dF, + TMatrix &dP) { + using Matrix = TMatrix; + using Vector = TVector; + + const auto j = determinant(F); + Matrix r, s; + polar_decomp(F, r, s); + Matrix dR = dR_from_dF(F, r, s, dF); + Matrix JFmT = Matrix(F(1, 1), -F(1, 0), -F(0, 1), F(0, 0)); + Matrix dJFmT = Matrix(dF(1, 1), -dF(1, 0), -dF(0, 1), dF(0, 0)); + dP = 2.0f * mu * (dF - dR) + lambda * JFmT.elementwise_dot(dF) * JFmT + + lambda * (j - 1) * dJFmT; +} + +template <> +inline __device__ void Times_Rotated_dP_dF_FixedCorotated<3>( + const real mu, + const real lambda, + TMatrix &F_, + TMatrix &dF_, + TMatrix &dP_) { + real *F = F_.data(); + real *dF = dF_.data(); + real *dP = dP_.data(); + real U[9]; + real S[3]; + real V[9]; + svd(F[0], F[3], F[6], F[1], F[4], F[7], F[2], F[5], F[8], U[0], U[3], U[6], + U[1], U[4], U[7], U[2], U[5], U[8], S[0], S[1], S[2], V[0], V[3], V[6], + V[1], V[4], V[7], V[2], V[5], V[8]); + + // + real J = S[0] * S[1] * S[2]; + real scaled_mu = 2.f * mu; + real scaled_lambda = lambda * (J - 1.f); + real P_hat[3]; + P_hat[0] = scaled_mu * (S[0] - 1.f) + scaled_lambda * (S[1] * S[2]); + P_hat[1] = scaled_mu * (S[1] - 1.f) + scaled_lambda * (S[0] * S[2]); + P_hat[2] = scaled_mu * (S[2] - 1.f) + scaled_lambda * (S[0] * S[1]); + + real dP_hat_dSigma_upper[6]; + scaled_lambda = lambda * (2.f * J - 1.f) * J; + for (int i = 0; i < 3; ++i) + dP_hat_dSigma_upper[i] = scaled_mu + lambda * J * J / (S[i] * S[i]); + dP_hat_dSigma_upper[3] = scaled_lambda / (S[0] * S[1]); + dP_hat_dSigma_upper[4] = scaled_lambda / (S[0] * S[2]); + dP_hat_dSigma_upper[5] = scaled_lambda / (S[1] * S[2]); + + scaled_lambda = -lambda * (J - 1.f) * J; + real M[3]; + M[0] = 0.5f * (2.f * mu + scaled_lambda / (S[0] * S[1])); + M[1] = 0.5f * (2.f * mu + scaled_lambda / (S[0] * S[2])); + M[2] = 0.5f * (2.f * mu + scaled_lambda / (S[2] * S[2])); + // + + real P[3]; + P[0] = 0.5f * (P_hat[0] + P_hat[1]) / Clamp_Small_Magnitude(S[0] + S[1]); + P[1] = 0.5f * (P_hat[0] + P_hat[2]) / Clamp_Small_Magnitude(S[0] + S[2]); + P[2] = 0.5f * (P_hat[1] + P_hat[2]) / Clamp_Small_Magnitude(S[1] + S[2]); + + real dF_hat[9]; + dF_hat[0] = (dF[0] * U[0] + dF[1] * U[1] + dF[2] * U[2]) * V[0] + + (dF[3] * U[0] + dF[4] * U[1] + dF[5] * U[2]) * V[1] + + (dF[6] * U[0] + dF[7] * U[1] + dF[8] * U[2]) * V[2]; + dF_hat[1] = (dF[0] * U[3] + dF[1] * U[4] + dF[2] * U[5]) * V[0] + + (dF[3] * U[3] + dF[4] * U[4] + dF[5] * U[5]) * V[1] + + (dF[6] * U[3] + dF[7] * U[4] + dF[8] * U[5]) * V[2]; + dF_hat[2] = (dF[0] * U[6] + dF[1] * U[7] + dF[2] * U[8]) * V[0] + + (dF[3] * U[6] + dF[4] * U[7] + dF[5] * U[8]) * V[1] + + (dF[6] * U[6] + dF[7] * U[7] + dF[8] * U[8]) * V[2]; + dF_hat[3] = (dF[0] * U[0] + dF[1] * U[1] + dF[2] * U[2]) * V[3] + + (dF[3] * U[0] + dF[4] * U[1] + dF[5] * U[2]) * V[4] + + (dF[6] * U[0] + dF[7] * U[1] + dF[8] * U[2]) * V[5]; + dF_hat[4] = (dF[0] * U[3] + dF[1] * U[4] + dF[2] * U[5]) * V[3] + + (dF[3] * U[3] + dF[4] * U[4] + dF[5] * U[5]) * V[4] + + (dF[6] * U[3] + dF[7] * U[4] + dF[8] * U[5]) * V[5]; + dF_hat[5] = (dF[0] * U[6] + dF[1] * U[7] + dF[2] * U[8]) * V[3] + + (dF[3] * U[6] + dF[4] * U[7] + dF[5] * U[8]) * V[4] + + (dF[6] * U[6] + dF[7] * U[7] + dF[8] * U[8]) * V[5]; + dF_hat[6] = (dF[0] * U[0] + dF[1] * U[1] + dF[2] * U[2]) * V[6] + + (dF[3] * U[0] + dF[4] * U[1] + dF[5] * U[2]) * V[7] + + (dF[6] * U[0] + dF[7] * U[1] + dF[8] * U[2]) * V[8]; + dF_hat[7] = (dF[0] * U[3] + dF[1] * U[4] + dF[2] * U[5]) * V[6] + + (dF[3] * U[3] + dF[4] * U[4] + dF[5] * U[5]) * V[7] + + (dF[6] * U[3] + dF[7] * U[4] + dF[8] * U[5]) * V[8]; + dF_hat[8] = (dF[0] * U[6] + dF[1] * U[7] + dF[2] * U[8]) * V[6] + + (dF[3] * U[6] + dF[4] * U[7] + dF[5] * U[8]) * V[7] + + (dF[6] * U[6] + dF[7] * U[7] + dF[8] * U[8]) * V[8]; + + real dP_hat[9]; + dP_hat[0] = dP_hat_dSigma_upper[0] * dF_hat[0] + + dP_hat_dSigma_upper[3] * dF_hat[4] + + dP_hat_dSigma_upper[4] * dF_hat[8]; + dP_hat[4] = dP_hat_dSigma_upper[3] * dF_hat[0] + + dP_hat_dSigma_upper[1] * dF_hat[4] + + dP_hat_dSigma_upper[5] * dF_hat[8]; + dP_hat[8] = dP_hat_dSigma_upper[4] * dF_hat[0] + + dP_hat_dSigma_upper[5] * dF_hat[4] + + dP_hat_dSigma_upper[2] * dF_hat[8]; + dP_hat[3] = ((M[0] + P[0]) * dF_hat[3] + (M[0] - P[0]) * dF_hat[1]); + dP_hat[1] = ((M[0] - P[0]) * dF_hat[3] + (M[0] + P[0]) * dF_hat[1]); + dP_hat[6] = ((M[1] + P[1]) * dF_hat[6] + (M[1] - P[1]) * dF_hat[2]); + dP_hat[2] = ((M[1] - P[1]) * dF_hat[6] + (M[1] + P[1]) * dF_hat[2]); + dP_hat[7] = ((M[2] + P[2]) * dF_hat[7] + (M[2] - P[2]) * dF_hat[5]); + dP_hat[5] = ((M[2] - P[2]) * dF_hat[7] + (M[2] + P[2]) * dF_hat[5]); + + dP[0] = (dP_hat[0] * U[0] + dP_hat[1] * U[3] + dP_hat[2] * U[6]) * V[0] + + (dP_hat[3] * U[0] + dP_hat[4] * U[3] + dP_hat[5] * U[6]) * V[3] + + (dP_hat[6] * U[0] + dP_hat[7] * U[3] + dP_hat[8] * U[6]) * V[6]; + dP[1] = (dP_hat[0] * U[1] + dP_hat[1] * U[4] + dP_hat[2] * U[7]) * V[0] + + (dP_hat[3] * U[1] + dP_hat[4] * U[4] + dP_hat[5] * U[7]) * V[3] + + (dP_hat[6] * U[1] + dP_hat[7] * U[4] + dP_hat[8] * U[7]) * V[6]; + dP[2] = (dP_hat[0] * U[2] + dP_hat[1] * U[5] + dP_hat[2] * U[8]) * V[0] + + (dP_hat[3] * U[2] + dP_hat[4] * U[5] + dP_hat[5] * U[8]) * V[3] + + (dP_hat[6] * U[2] + dP_hat[7] * U[5] + dP_hat[8] * U[8]) * V[6]; + dP[3] = (dP_hat[0] * U[0] + dP_hat[1] * U[3] + dP_hat[2] * U[6]) * V[1] + + (dP_hat[3] * U[0] + dP_hat[4] * U[3] + dP_hat[5] * U[6]) * V[4] + + (dP_hat[6] * U[0] + dP_hat[7] * U[3] + dP_hat[8] * U[6]) * V[7]; + dP[4] = (dP_hat[0] * U[1] + dP_hat[1] * U[4] + dP_hat[2] * U[7]) * V[1] + + (dP_hat[3] * U[1] + dP_hat[4] * U[4] + dP_hat[5] * U[7]) * V[4] + + (dP_hat[6] * U[1] + dP_hat[7] * U[4] + dP_hat[8] * U[7]) * V[7]; + dP[5] = (dP_hat[0] * U[2] + dP_hat[1] * U[5] + dP_hat[2] * U[8]) * V[1] + + (dP_hat[3] * U[2] + dP_hat[4] * U[5] + dP_hat[5] * U[8]) * V[4] + + (dP_hat[6] * U[2] + dP_hat[7] * U[5] + dP_hat[8] * U[8]) * V[7]; + dP[6] = (dP_hat[0] * U[0] + dP_hat[1] * U[3] + dP_hat[2] * U[6]) * V[2] + + (dP_hat[3] * U[0] + dP_hat[4] * U[3] + dP_hat[5] * U[6]) * V[5] + + (dP_hat[6] * U[0] + dP_hat[7] * U[3] + dP_hat[8] * U[6]) * V[8]; + dP[7] = (dP_hat[0] * U[1] + dP_hat[1] * U[4] + dP_hat[2] * U[7]) * V[2] + + (dP_hat[3] * U[1] + dP_hat[4] * U[4] + dP_hat[5] * U[7]) * V[5] + + (dP_hat[6] * U[1] + dP_hat[7] * U[4] + dP_hat[8] * U[7]) * V[8]; + dP[8] = (dP_hat[0] * U[2] + dP_hat[1] * U[5] + dP_hat[2] * U[8]) * V[2] + + (dP_hat[3] * U[2] + dP_hat[4] * U[5] + dP_hat[5] * U[8]) * V[5] + + (dP_hat[6] * U[2] + dP_hat[7] * U[5] + dP_hat[8] * U[8]) * V[8]; +}; + +template +TC_FORCE_INLINE __device__ TMatrix PK1(real mu, + real lambda, + TMatrix F) { + real J = determinant(F); + TMatrix r, s; + polar_decomp(F, r, s); + return 2 * mu * (F - r) + + TMatrix(lambda * (J - 1) * J) * transposed(inversed(F)); +} + +template +TC_FORCE_INLINE __device__ TMatrix +kirchhoff_stress(real mu, real lambda, TMatrix F) { + real J = determinant(F); + TMatrix r, s; + polar_decomp(F, r, s); + return 2 * mu * (F - r) * transposed(F) + + TMatrix(lambda * (J - 1) * J); +} + diff --git a/tensorflow_graphics/physics/src/misc.cu b/tensorflow_graphics/physics/src/misc.cu new file mode 100644 index 000000000..913c95eee --- /dev/null +++ b/tensorflow_graphics/physics/src/misc.cu @@ -0,0 +1,142 @@ +#include "kernels.h" +#include "linalg.h" +#include "state.cuh" +#include +#include + +__global__ void saxpy(int n, real a, real *x, real *y) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + y[i] = a * x[i] + y[i]; + } +} + +void saxpy_cuda(int N, real alpha, real *x, real *y) { + real *d_x, *d_y; + + cudaMalloc(&d_x, N * sizeof(real)); + cudaMalloc(&d_y, N * sizeof(real)); + + cudaMemcpy(d_x, x, N * sizeof(real), cudaMemcpyHostToDevice); + cudaMemcpy(d_y, y, N * sizeof(real), cudaMemcpyHostToDevice); + + saxpy<<<(N + 255) / 256, 256>>>(N, alpha, d_x, d_y); + + cudaMemcpy(y, d_y, N * sizeof(real), cudaMemcpyDeviceToHost); + + cudaFree(d_x); + cudaFree(d_y); +} + +__global__ void test_svd(int n, + Matrix3 *A, + Matrix3 *U, + Matrix3 *sig, + Matrix3 *V) { + int id = blockIdx.x * blockDim.x + threadIdx.x; + if (id < n) { + svd(A[id], U[id], sig[id], V[id]); + } +} + +// 3D only.. +void test_svd_cuda(int n, real *A, real *U, real *sig, real *V) { + Matrix3 *d_A, *d_U, *d_sig, *d_V; + + cudaMalloc(&d_A, sizeof(Matrix3) * (unsigned int)(n)); + cudaMemcpy(d_A, A, sizeof(Matrix3) * n, cudaMemcpyHostToDevice); + + cudaMalloc(&d_U, sizeof(Matrix3) * (unsigned int)(n)); + cudaMalloc(&d_sig, sizeof(Matrix3) * (unsigned int)(n)); + cudaMalloc(&d_V, sizeof(Matrix3) * (unsigned int)(n)); + + test_svd<<<(n + 127) / 128, 128>>>(n, d_A, d_U, d_sig, d_V); + + std::vector h_U(n), h_sig(n), h_V(n); + cudaMemcpy(h_U.data(), d_U, sizeof(Matrix3) * n, cudaMemcpyDeviceToHost); + cudaMemcpy(h_sig.data(), d_sig, sizeof(Matrix3) * n, cudaMemcpyDeviceToHost); + cudaMemcpy(h_V.data(), d_V, sizeof(Matrix3) * n, cudaMemcpyDeviceToHost); + + // Taichi uses column-first storage + for (int p = 0; p < n; p++) { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + U[p * 12 + 4 * i + j] = h_U[p][j][i]; + sig[p * 12 + 4 * i + j] = h_sig[p][j][i]; + V[p * 12 + 4 * i + j] = h_V[p][j][i]; + } + } + } +} + +template +__host__ std::vector TStateBase::fetch_x() { + std::vector host_x(dim * num_particles); + cudaMemcpy(host_x.data(), x_storage, + sizeof(TVector) * num_particles, + cudaMemcpyDeviceToHost); + return host_x; +} + +template +__host__ std::vector TStateBase::fetch_grad_v() { + std::vector host_grad_v(dim * num_particles); + cudaMemcpy(host_grad_v.data(), grad_v_storage, + sizeof(TVector) * num_particles, + cudaMemcpyDeviceToHost); + return host_grad_v; +} + +template +__host__ std::vector TStateBase::fetch_grad_x() { + std::vector host_grad_x(dim * num_particles); + cudaMemcpy(host_grad_x.data(), grad_x_storage, + sizeof(TVector) * num_particles, + cudaMemcpyDeviceToHost); + return host_grad_x; +} + +template +void TStateBase::set_initial_v(float *v) { + cudaMemcpy(v_storage, v, sizeof(real) * dim * num_particles, + cudaMemcpyHostToDevice); +} + +template +void TStateBase::set_initial_F(float *F) { + cudaMemcpy(F_storage, F, sizeof(real) * dim * dim * num_particles, + cudaMemcpyHostToDevice); +} + +template std::vector TStateBase<2>::fetch_x(); +template std::vector TStateBase<3>::fetch_x(); +template std::vector TStateBase<2>::fetch_grad_x(); +template std::vector TStateBase<3>::fetch_grad_x(); +template std::vector TStateBase<2>::fetch_grad_v(); +template std::vector TStateBase<3>::fetch_grad_v(); +template void TStateBase<2>::set_initial_F(float *); +template void TStateBase<3>::set_initial_F(float *); +template void TStateBase<2>::set_initial_v(float *); +template void TStateBase<3>::set_initial_v(float *); + +template +void set_mpm_bc(void *state_, float *bc) { + auto state = reinterpret_cast *>(state_); + cudaMemcpy(state->grid_bc, bc, + sizeof(TVector) * state->num_cells, + cudaMemcpyHostToDevice); +} + +template void set_mpm_bc<2>(void *state_, float *bc); +template void set_mpm_bc<3>(void *state_, float *bc); + +template +void set_mpm_actuation(void *state_, float *act) { + auto state = reinterpret_cast *>(state_); + cudaMemcpy(state->A_storage, act, + sizeof(real) * dim * dim * state->num_particles, + cudaMemcpyHostToDevice); +} + +template void set_mpm_actuation<2>(void *state_, float *); +template void set_mpm_actuation<3>(void *state_, float *); diff --git a/tensorflow_graphics/physics/src/mpmgradop.cc b/tensorflow_graphics/physics/src/mpmgradop.cc new file mode 100644 index 000000000..3835b4877 --- /dev/null +++ b/tensorflow_graphics/physics/src/mpmgradop.cc @@ -0,0 +1,188 @@ +#include "tensorflow/core/framework/op_kernel.h" +#include "tensorflow/core/framework/tensor_shape.h" +#include "tensorflow/core/platform/default/logging.h" +#include "tensorflow/core/framework/shape_inference.h" + +using namespace tensorflow; + +REGISTER_OP("MpmGrad") + .Input("position: float") //(batch_size, dim, particles) + .Input("velocity: float") //(batch_size, dim, particles) + .Input("affine: float") //(batch_size, dim, dim, particles) + .Input("deformation: float") //(batch_size, dim, dim, particles) + .Input("actuation: float") //(batch_size, dim, dim, particles + .Input("grid_normal: float") //(batch_size, num_cells, dim + 1) + .Input("position_out: float") //(batch_size, dim, particles) + .Input("velocity_out: float") //(batch_size, dim, particles) + .Input("affine_out: float") //(batch_size, dim, dim, particles) + .Input("deformation_out: float") //(batch_size, dim, dim, particles) + .Input("poly_out: float") //(batch_size, dim, dim, particles) + .Input("grid_out: float") //(batch_size, num_cells, dim + 1) + .Input("grid_star_out: float") //(batch_size, num_cells, dim + 1) + .Input("position_out_grad: float") //(batch_size, dim, particles) + .Input("velocity_out_grad: float") //(batch_size, dim, particles) + .Input("affine_out_grad: float") //(batch_size, dim, dim, particles) + .Input("deformation_out_grad: float") //(batch_size, dim, dim, particles) + .Input("poly_out_grad: float") //(batch_size, dim, dim, particles) + .Input("grid_out_grad: float") //(batch_size, num_cells, dim + 1) + .Input("grid_out_star_grad: float") //(batch_size, num_cells, dim + 1) + .Attr("dt: float") + .Attr("dx: float") + .Attr("E: float") + .Attr("nu: float") + .Attr("m_p: float") + .Attr("V_p: float") + .Attr("gravity: list(float)") + .Attr("resolution: list(int)") + .Output("position_grad: float") //(batch_size, dim, particles) + .Output("velocity_grad: float") //(batch_size, dim, particles) + .Output("affine_grad: float") //(batch_size, dim, dim, particles) + .Output("deformation_grad: float") //(batch_size, dim, dim, particles) + .Output("actuation_grad: float") //(batch_size, dim, dim, particles) + .Output("grid_normal_grad: float"); //(batch_size, num_cells, dim + 1) + + +void MPMGradKernelLauncher( + int dim, int *res, int num_particles, float dx, float dt, float E, float nu, + float m_p, float V_p, + float *gravity, + const float *inx, const float *inv, const float *inF, const float *inC, + const float *inA, const float *ingrid, + const float *outx, const float *outv, const float *outF, const float *outC, + const float *outP, const float *outgrid, const float *outgrid_star, + float *grad_inx, float *grad_inv, float *grad_inF, float *grad_inC, + float *grad_inA, float *grad_ingrid, + const float *grad_outx, const float *grad_outv, + const float *grad_outF, const float *grad_outC, + const float *grad_outP, const float *grad_outgrid, + const float *grad_outgrid_star); + +class MPMGradOpGPU : public OpKernel { + private: + float dt_; + float dx_; + float E_, nu_, m_p_, V_p_; + std::vector gravity_; + std::vector res_; + public: + explicit MPMGradOpGPU(OpKernelConstruction* context) : OpKernel(context) { + OP_REQUIRES_OK(context, + context->GetAttr("dt", &dt_)); + OP_REQUIRES_OK(context, + context->GetAttr("dx", &dx_)); + OP_REQUIRES_OK(context, + context->GetAttr("E", &E_)); + OP_REQUIRES_OK(context, + context->GetAttr("nu", &nu_)); + OP_REQUIRES_OK(context, + context->GetAttr("m_p", &m_p_)); + OP_REQUIRES_OK(context, + context->GetAttr("V_p", &V_p_)); + OP_REQUIRES_OK(context, + context->GetAttr("gravity", &gravity_)); + OP_REQUIRES_OK(context, + context->GetAttr("resolution", &res_)); + } + + void Compute(OpKernelContext* context) override { + //printf("MPMOpGPU\n"); + + // get the x + int cnt = 0; + const Tensor& inx = context->input(cnt++); + const Tensor& inv = context->input(cnt++); + const Tensor& inF = context->input(cnt++); + const Tensor& inC = context->input(cnt++); + const Tensor& inA = context->input(cnt++); + const Tensor& ingrid = context->input(cnt++); + const Tensor& outx = context->input(cnt++); + const Tensor& outv = context->input(cnt++); + const Tensor& outF = context->input(cnt++); + const Tensor& outC = context->input(cnt++); + const Tensor& outP = context->input(cnt++); + const Tensor& outgrid = context->input(cnt++); + const Tensor& outgrid_star = context->input(cnt++); + const Tensor& grad_outx = context->input(cnt++); + const Tensor& grad_outv = context->input(cnt++); + const Tensor& grad_outF = context->input(cnt++); + const Tensor& grad_outC = context->input(cnt++); + const Tensor& grad_outP = context->input(cnt++); + const Tensor& grad_outgrid = context->input(cnt++); + const Tensor& grad_outgrid_star = context->input(cnt++); + + const TensorShape& x_shape = inx.shape(); + const TensorShape& v_shape = inv.shape(); + const TensorShape& F_shape = inF.shape(); + const TensorShape& C_shape = inC.shape(); + const TensorShape& A_shape = inA.shape(); + const TensorShape& grid_shape = ingrid.shape(); + + const int particles = x_shape.dim_size(2); + + const int dim = x_shape.dim_size(1); + int res[dim]; + float gravity[dim]; + int num_cells = 1; + for (int i = 0; i < dim; i++) { + res[i] = res_[i]; + num_cells *= res[i]; + gravity[i] = gravity_[i]; + } + + // create output tensor + Tensor* grad_inx= NULL; + Tensor* grad_inv= NULL; + Tensor* grad_inF= NULL; + Tensor* grad_inC= NULL; + Tensor* grad_inA= NULL; + Tensor* grad_ingrid= NULL; + OP_REQUIRES_OK(context, context->allocate_output(0, x_shape, &grad_inx)); + OP_REQUIRES_OK(context, context->allocate_output(1, v_shape, &grad_inv)); + OP_REQUIRES_OK(context, context->allocate_output(2, F_shape, &grad_inF)); + OP_REQUIRES_OK(context, context->allocate_output(3, C_shape, &grad_inC)); + OP_REQUIRES_OK(context, context->allocate_output(4, A_shape, &grad_inA)); + OP_REQUIRES_OK(context, context->allocate_output(5, grid_shape, &grad_ingrid)); + + auto f_inx = inx.flat(); + auto f_inv = inv.flat(); + auto f_inF = inF.flat(); + auto f_inC = inC.flat(); + auto f_inA = inA.flat(); + auto f_ingrid = ingrid.flat(); + auto f_outx = outx.flat(); + auto f_outv = outv.flat(); + auto f_outF = outF.flat(); + auto f_outC = outC.flat(); + auto f_outP = outP.flat(); + auto f_outgrid = outgrid.flat(); + auto f_outgrid_star = outgrid_star.flat(); + auto f_grad_outx = grad_outx.flat(); + auto f_grad_outv = grad_outv.flat(); + auto f_grad_outF = grad_outF.flat(); + auto f_grad_outC = grad_outC.flat(); + auto f_grad_outP = grad_outP.flat(); + auto f_grad_outgrid = grad_outgrid.flat(); + auto f_grad_outgrid_star = grad_outgrid_star.flat(); + auto f_grad_inx = grad_inx->template flat(); + auto f_grad_inv = grad_inv->template flat(); + auto f_grad_inF = grad_inF->template flat(); + auto f_grad_inC = grad_inC->template flat(); + auto f_grad_inA = grad_inA->template flat(); + auto f_grad_ingrid = grad_ingrid->template flat(); + + + MPMGradKernelLauncher(dim, res, particles, dx_, dt_, E_, nu_, m_p_, V_p_, gravity, + f_inx.data(), f_inv.data(), f_inF.data(), f_inC.data(), f_inA.data(), f_ingrid.data(), + f_outx.data(), f_outv.data(), f_outF.data(), f_outC.data(), + f_outP.data(), f_outgrid.data(), f_outgrid_star.data(), + f_grad_inx.data(), f_grad_inv.data(), + f_grad_inF.data(), f_grad_inC.data(), + f_grad_inA.data(), f_grad_ingrid.data(), + f_grad_outx.data(), f_grad_outv.data(), + f_grad_outF.data(), f_grad_outC.data(), + f_grad_outP.data(), f_grad_outgrid.data(), + f_grad_outgrid_star.data()); + } +}; + +REGISTER_KERNEL_BUILDER(Name("MpmGrad").Device(DEVICE_GPU), MPMGradOpGPU); diff --git a/tensorflow_graphics/physics/src/mpmop.cc b/tensorflow_graphics/physics/src/mpmop.cc new file mode 100644 index 000000000..6d6f271fb --- /dev/null +++ b/tensorflow_graphics/physics/src/mpmop.cc @@ -0,0 +1,295 @@ +#include "tensorflow/core/framework/op_kernel.h" +#include "tensorflow/core/framework/tensor_shape.h" +#include "tensorflow/core/platform/default/logging.h" +#include "tensorflow/core/framework/shape_inference.h" +#include "config.h" + +using namespace tensorflow; + +/* + Register MPM operation +*/ + +REGISTER_OP("Mpm") + .Input("position: float") //(batch_size, dim, particles) + .Input("velocity: float") //(batch_size, dim, particles) + .Input("affine: float") //(batch_size, dim, dim, particles) + .Input("deformation: float") //(batch_size, dim, dim, particles) + .Input("actuation: float") //(batch_size, dim, dim, particles) + .Input("grid_bc: float") //(batch_size, num_cells, dim + 1) + .Attr("dt: float = 0.01") + .Attr("dx: float = 0.01") + .Attr("E: float = 50") + .Attr("nu: float = 0.3") + .Attr("m_p: float = 100") + .Attr("V_p: float = 10") + .Attr("gravity: list(float) = [0, 0, 0]") + .Attr("resolution: list(int) = [100, 100, 100]") + .Output("position_out: float") + .Output("velocity_out: float") + .Output("affine_out: float") + .Output("deformation_out: float") + .Output("poly_out: float") //(batch_size, dim, dim, particles) + .Output("grid_out: float") //(batch_size, num_cells, dim + 1) + .Output("grid_star: float") //(batch_size, dim, dim, particles) + .SetShapeFn([](::tensorflow::shape_inference::InferenceContext *c) { + + shape_inference::ShapeHandle x_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(0), 3, &x_shape)); + shape_inference::ShapeHandle v_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(1), 3, &v_shape)); + shape_inference::ShapeHandle F_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(2), 4, &F_shape)); + shape_inference::ShapeHandle C_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(3), 4, &C_shape)); + shape_inference::ShapeHandle A_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(4), 4, &A_shape)); + shape_inference::ShapeHandle grid_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(5), 3, &grid_shape)); + + shape_inference::DimensionHandle temp; + + shape_inference::DimensionHandle batch_size = c->Dim(x_shape, 0); + shape_inference::DimensionHandle batch_sizev = c->Dim(v_shape, 0); + shape_inference::DimensionHandle batch_sizeF = c->Dim(F_shape, 0); + shape_inference::DimensionHandle batch_sizeC = c->Dim(C_shape, 0); + shape_inference::DimensionHandle batch_sizeA = c->Dim(A_shape, 0); + shape_inference::DimensionHandle batch_sizegrid = c->Dim(grid_shape, 0); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizev, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeF, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeC, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeA, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizegrid, &temp)); + + shape_inference::DimensionHandle dim = c->Dim(x_shape, 1); + shape_inference::DimensionHandle dimv = c->Dim(v_shape, 1); + shape_inference::DimensionHandle dimF1 = c->Dim(F_shape, 1); + shape_inference::DimensionHandle dimF2 = c->Dim(F_shape, 2); + shape_inference::DimensionHandle dimC1 = c->Dim(C_shape, 1); + shape_inference::DimensionHandle dimC2 = c->Dim(C_shape, 2); + shape_inference::DimensionHandle dimA1 = c->Dim(A_shape, 1); + shape_inference::DimensionHandle dimA2 = c->Dim(A_shape, 2); + shape_inference::DimensionHandle dimgrid = c->Dim(grid_shape, 2); + TF_RETURN_IF_ERROR(c->Merge(dim, dimv, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimF1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimF2, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimC1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimC2, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimA1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimA2, &temp)); + auto dim_ = *((int *)dim.Handle()); + auto dim_1 = c->MakeDim(shape_inference::DimensionOrConstant(dim_ + 1)); + TF_RETURN_IF_ERROR(c->Merge(dim_1, dimgrid, &temp)); + + shape_inference::DimensionHandle particle = c->Dim(x_shape, 2); + shape_inference::DimensionHandle particlev = c->Dim(v_shape, 2); + shape_inference::DimensionHandle particleF = c->Dim(F_shape, 3); + shape_inference::DimensionHandle particleC = c->Dim(C_shape, 3); + shape_inference::DimensionHandle particleA = c->Dim(A_shape, 3); + TF_RETURN_IF_ERROR(c->Merge(particle, particlev, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleF, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleC, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleA, &temp)); + + + std::vector res_; + TF_RETURN_IF_ERROR(c->GetAttr("resolution", &res_)); + std::vector gravity_; + TF_RETURN_IF_ERROR(c->GetAttr("gravity", &gravity_)); + + if ((int)gravity_.size() != dim_) + return errors::InvalidArgument("Gravity length must be equal to ", dim_, + ", but is ", gravity_.size()); + if ((int)res_.size() != dim_) + return errors::InvalidArgument("Resolution length must be equal to ", + dim_, ", but is ", res_.size()); + + + int res[3]; + int num_cells = 1; + for (int i = 0; i < dim_; i++) { + res[i] = res_[i]; + num_cells *= res[i]; + } + auto num_cells_ = c->MakeDim(shape_inference::DimensionOrConstant(num_cells)); + + shape_inference::DimensionHandle num_cells_grid = c->Dim(grid_shape, 1); + TF_RETURN_IF_ERROR(c->Merge(num_cells_, num_cells_grid, &temp)); + + c->set_output(0, x_shape); + c->set_output(1, v_shape); + c->set_output(2, F_shape); + c->set_output(3, C_shape); + c->set_output(4, C_shape); + c->set_output(5, grid_shape); + c->set_output(6, grid_shape); + + return Status::OK(); + }); + +/* + MPM Operation GPU +*/ + +void MPMKernelLauncher(int dim, + int *res, + int num_particles, + float dx, + float dt, + float E, + float nu, + float m_p, + float V_p, + float *gravity, + const float *inx, + const float *inv, + const float *inF, + const float *inC, + const float *inA, + const float *ingrid, + float *outx, + float *outv, + float *outF, + float *outC, + float *outP, + float *outgrid, + float *outgrid_star); + +class MPMOpGPU : public OpKernel { + private: + float dt_; + float dx_; + float m_p_, V_p_, E_, nu_; + std::vector gravity_; + std::vector res_; + + public: + explicit MPMOpGPU(OpKernelConstruction *context) : OpKernel(context) { + OP_REQUIRES_OK(context, context->GetAttr("dt", &dt_)); + OP_REQUIRES(context, dt_ > 0, + errors::InvalidArgument("Need dt > 0, got ", dt_)); + OP_REQUIRES_OK(context, context->GetAttr("dx", &dx_)); + OP_REQUIRES(context, dx_ > 0, + errors::InvalidArgument("Need dx > 0, got ", dx_)); + OP_REQUIRES_OK(context, context->GetAttr("gravity", &gravity_)); + OP_REQUIRES_OK(context, context->GetAttr("resolution", &res_)); + OP_REQUIRES_OK(context, context->GetAttr("E", &E_)); + OP_REQUIRES_OK(context, context->GetAttr("nu", &nu_)); + OP_REQUIRES_OK(context, context->GetAttr("m_p", &m_p_)); + OP_REQUIRES_OK(context, context->GetAttr("V_p", &V_p_)); + OP_REQUIRES(context, E_ >= 0, + errors::InvalidArgument("Need E >= 0, got ", E_)); + OP_REQUIRES(context, nu_ > 0, + errors::InvalidArgument("Need nu_p > 0, got ", nu_)); + OP_REQUIRES(context, m_p_ > 0, + errors::InvalidArgument("Need m_p > 0, got ", m_p_)); + OP_REQUIRES(context, V_p_ > 0, + errors::InvalidArgument("Need V_p > 0, got ", V_p_)); + } + + void Compute(OpKernelContext *context) override { + const Tensor &inx = context->input(0); + const Tensor &inv = context->input(1); + const Tensor &inF = context->input(2); + const Tensor &inC = context->input(3); + const Tensor &inA = context->input(4); + const Tensor &ingrid = context->input(5); + const TensorShape &x_shape = inx.shape(); + const TensorShape &v_shape = inv.shape(); + const TensorShape &F_shape = inF.shape(); + const TensorShape &C_shape = inC.shape(); + const TensorShape &A_shape = inA.shape(); + const TensorShape &grid_shape = ingrid.shape(); + const TensorShape &P_shape = inA.shape(); + + // Check inputs' dimensional + DCHECK_EQ(x_shape.dims(), 3); + DCHECK_EQ(v_shape.dims(), 3); + DCHECK_EQ(F_shape.dims(), 4); + DCHECK_EQ(C_shape.dims(), 4); + DCHECK_EQ(A_shape.dims(), 4); + DCHECK_EQ(grid_shape.dims(), 3); + + const int batch_size = x_shape.dim_size(0); + + const int dim = x_shape.dim_size(1); + + // Check gravity + int res[dim]; + float gravity[dim]; + int num_cells = 1; + for (int i = 0; i < dim; i++) { + res[i] = res_[i]; + num_cells *= res[i]; + gravity[i] = gravity_[i]; + } + + const int particles = x_shape.dim_size(2); + // printf("particles %d\n", particles); + + // Check input batch_size + DCHECK_EQ(batch_size, v_shape.dim_size(0)); + DCHECK_EQ(batch_size, F_shape.dim_size(0)); + DCHECK_EQ(batch_size, C_shape.dim_size(0)); + DCHECK_EQ(batch_size, A_shape.dim_size(0)); + DCHECK_EQ(batch_size, grid_shape.dim_size(0)); + + // Check input dim + DCHECK_EQ(dim, v_shape.dim_size(1)); + DCHECK_EQ(dim, F_shape.dim_size(1)); + DCHECK_EQ(dim, F_shape.dim_size(2)); + DCHECK_EQ(dim, C_shape.dim_size(1)); + DCHECK_EQ(dim, C_shape.dim_size(2)); + DCHECK_EQ(dim, A_shape.dim_size(1)); + DCHECK_EQ(dim, A_shape.dim_size(2)); + DCHECK_EQ(dim + 1, grid_shape.dim_size(2)); + + // Check input particles + DCHECK_EQ(particles, v_shape.dim_size(2)); + DCHECK_EQ(particles, F_shape.dim_size(3)); + DCHECK_EQ(particles, C_shape.dim_size(3)); + DCHECK_EQ(particles, A_shape.dim_size(3)); + + // Check input num_cells + DCHECK_EQ(num_cells, grid_shape.dim_size(1)); + + // create output tensor + Tensor *outx = NULL; + Tensor *outv = NULL; + Tensor *outF = NULL; + Tensor *outC = NULL; + Tensor *outP = NULL; + Tensor *outgrid = NULL; + Tensor *outgrid_star = NULL; + OP_REQUIRES_OK(context, context->allocate_output(0, x_shape, &outx)); + OP_REQUIRES_OK(context, context->allocate_output(1, v_shape, &outv)); + OP_REQUIRES_OK(context, context->allocate_output(2, F_shape, &outF)); + OP_REQUIRES_OK(context, context->allocate_output(3, C_shape, &outC)); + OP_REQUIRES_OK(context, context->allocate_output(4, P_shape, &outP)); + OP_REQUIRES_OK(context, context->allocate_output(5, grid_shape, &outgrid)); + OP_REQUIRES_OK(context, context->allocate_output(6, grid_shape, &outgrid_star)); + + auto f_inx = inx.flat(); + auto f_inv = inv.flat(); + auto f_inF = inF.flat(); + auto f_inC = inC.flat(); + auto f_inA = inA.flat(); + auto f_ingrid = ingrid.flat(); + auto f_outx = outx->template flat(); + auto f_outv = outv->template flat(); + auto f_outF = outF->template flat(); + auto f_outC = outC->template flat(); + auto f_outP = outP->template flat(); + auto f_outgrid = outgrid->template flat(); + auto f_outgrid_star = outgrid_star->template flat(); + + MPMKernelLauncher(dim, res, particles, dx_, dt_, E_, nu_, m_p_, V_p_, gravity, + f_inx.data(), f_inv.data(), f_inF.data(), f_inC.data(), + f_inA.data(), f_ingrid.data(), + f_outx.data(), f_outv.data(), f_outF.data(), + f_outC.data(), f_outP.data(), f_outgrid.data(), + f_outgrid_star.data()); + } +}; + +REGISTER_KERNEL_BUILDER(Name("Mpm").Device(DEVICE_GPU), MPMOpGPU); diff --git a/tensorflow_graphics/physics/src/p2gop.cc b/tensorflow_graphics/physics/src/p2gop.cc new file mode 100644 index 000000000..eb1075c3b --- /dev/null +++ b/tensorflow_graphics/physics/src/p2gop.cc @@ -0,0 +1,264 @@ +#include "tensorflow/core/framework/op_kernel.h" +#include "tensorflow/core/framework/tensor_shape.h" +#include "tensorflow/core/platform/default/logging.h" +#include "tensorflow/core/framework/shape_inference.h" +#include "config.h" + +using namespace tensorflow; + +/* + Register P2G operation +*/ + +REGISTER_OP("P2g") + .Input("position: float") //(batch_size, dim, particles) + .Input("velocity: float") //(batch_size, dim, particles) + .Input("affine: float") //(batch_size, dim, dim, particles) + .Input("deformation: float") //(batch_size, dim, dim, particles) + .Input("actuation: float") //(batch_size, dim, dim, particles) + .Attr("dt: float = 0.01") + .Attr("dx: float = 0.01") + .Attr("E: float = 50") + .Attr("nu: float = 0.3") + .Attr("m_p: float = 100") + .Attr("V_p: float = 10") + .Attr("gravity: list(float) = [0, 0, 0]") + .Attr("resolution: list(int) = [100, 100, 100]") + .Output("poly_out: float") //(batch_size, dim, dim, particles) + .Output("grid_out: float") //(batch_size, num_cells, dim + 1) + .SetShapeFn([](::tensorflow::shape_inference::InferenceContext *c) { + + shape_inference::ShapeHandle x_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(0), 3, &x_shape)); + shape_inference::ShapeHandle v_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(1), 3, &v_shape)); + shape_inference::ShapeHandle F_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(2), 4, &F_shape)); + shape_inference::ShapeHandle C_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(3), 4, &C_shape)); + shape_inference::ShapeHandle A_shape; + TF_RETURN_IF_ERROR(c->WithRank(c->input(4), 4, &A_shape)); + + shape_inference::DimensionHandle temp; + + shape_inference::DimensionHandle batch_size = c->Dim(x_shape, 0); + shape_inference::DimensionHandle batch_sizev = c->Dim(v_shape, 0); + shape_inference::DimensionHandle batch_sizeF = c->Dim(F_shape, 0); + shape_inference::DimensionHandle batch_sizeC = c->Dim(C_shape, 0); + shape_inference::DimensionHandle batch_sizeA = c->Dim(A_shape, 0); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizev, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeF, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeC, &temp)); + TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeA, &temp)); + + shape_inference::DimensionHandle dim = c->Dim(x_shape, 1); + shape_inference::DimensionHandle dimv = c->Dim(v_shape, 1); + shape_inference::DimensionHandle dimF1 = c->Dim(F_shape, 1); + shape_inference::DimensionHandle dimF2 = c->Dim(F_shape, 2); + shape_inference::DimensionHandle dimC1 = c->Dim(C_shape, 1); + shape_inference::DimensionHandle dimC2 = c->Dim(C_shape, 2); + shape_inference::DimensionHandle dimA1 = c->Dim(A_shape, 1); + shape_inference::DimensionHandle dimA2 = c->Dim(A_shape, 2); + TF_RETURN_IF_ERROR(c->Merge(dim, dimv, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimF1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimF2, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimC1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimC2, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimA1, &temp)); + TF_RETURN_IF_ERROR(c->Merge(dim, dimA2, &temp)); + + shape_inference::DimensionHandle particle = c->Dim(x_shape, 2); + shape_inference::DimensionHandle particlev = c->Dim(v_shape, 2); + shape_inference::DimensionHandle particleF = c->Dim(F_shape, 3); + shape_inference::DimensionHandle particleC = c->Dim(C_shape, 3); + shape_inference::DimensionHandle particleA = c->Dim(A_shape, 3); + TF_RETURN_IF_ERROR(c->Merge(particle, particlev, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleF, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleC, &temp)); + TF_RETURN_IF_ERROR(c->Merge(particle, particleA, &temp)); + + c->set_output(0, C_shape); + auto dim_ = *((int *)dim.Handle()); + + std::vector res_; + TF_RETURN_IF_ERROR(c->GetAttr("resolution", &res_)); + std::vector gravity_; + TF_RETURN_IF_ERROR(c->GetAttr("gravity", &gravity_)); + + if ((int)gravity_.size() != dim_) + return errors::InvalidArgument("Gravity length must be equal to ", dim_, + ", but is ", gravity_.size()); + if ((int)res_.size() != dim_) + return errors::InvalidArgument("Resolution length must be equal to ", + dim_, ", but is ", res_.size()); + + int res[3]; + int num_cells = 1; + for (int i = 0; i < dim_; i++) { + res[i] = res_[i]; + num_cells *= res[i]; + } + std::vector new_shape; + new_shape.clear(); + new_shape.push_back(batch_size); + new_shape.push_back( + c->MakeDim(shape_inference::DimensionOrConstant(num_cells))); + new_shape.push_back( + c->MakeDim(shape_inference::DimensionOrConstant(dim_ + 1))); + c->set_output(1, c->MakeShape(new_shape)); + + return Status::OK(); + }); + +/* + P2G Operation GPU +*/ + +void P2GKernelLauncher(int dim, + int *res, + int num_particles, + float dx, + float dt, + float E, + float nu, + float m_p, + float V_p, + float *gravity, + const float *inx, + const float *inv, + const float *inF, + const float *inC, + const float *inA, + float *outP, + float *outgrid); + +class P2GOpGPU : public OpKernel { + private: + float dt_; + float dx_; + float m_p_, V_p_, E_, nu_; + std::vector gravity_; + std::vector res_; + + public: + explicit P2GOpGPU(OpKernelConstruction *context) : OpKernel(context) { + OP_REQUIRES_OK(context, context->GetAttr("dt", &dt_)); + OP_REQUIRES(context, dt_ > 0, + errors::InvalidArgument("Need dt > 0, got ", dt_)); + OP_REQUIRES_OK(context, context->GetAttr("dx", &dx_)); + OP_REQUIRES(context, dx_ > 0, + errors::InvalidArgument("Need dx > 0, got ", dx_)); + OP_REQUIRES_OK(context, context->GetAttr("gravity", &gravity_)); + OP_REQUIRES_OK(context, context->GetAttr("resolution", &res_)); + OP_REQUIRES_OK(context, context->GetAttr("E", &E_)); + OP_REQUIRES_OK(context, context->GetAttr("nu", &nu_)); + OP_REQUIRES_OK(context, context->GetAttr("m_p", &m_p_)); + OP_REQUIRES_OK(context, context->GetAttr("V_p", &V_p_)); + OP_REQUIRES(context, E_ > 0, + errors::InvalidArgument("Need E > 0, got ", E_)); + OP_REQUIRES(context, nu_ > 0, + errors::InvalidArgument("Need nu_p > 0, got ", nu_)); + OP_REQUIRES(context, m_p_ > 0, + errors::InvalidArgument("Need m_p > 0, got ", m_p_)); + OP_REQUIRES(context, V_p_ > 0, + errors::InvalidArgument("Need V_p > 0, got ", V_p_)); + } + + void Compute(OpKernelContext *context) override { + // get the x + const Tensor &inx = context->input(0); + + // get the v tensor + const Tensor &inv = context->input(1); + + // get the F tensor + const Tensor &inF = context->input(2); + + // get the C tensor + const Tensor &inC = context->input(3); + + // get the A tensor + const Tensor &inA = context->input(4); + + // check shapes of input and weights + const TensorShape &x_shape = inx.shape(); + const TensorShape &v_shape = inv.shape(); + const TensorShape &F_shape = inF.shape(); + const TensorShape &C_shape = inC.shape(); + const TensorShape &A_shape = inA.shape(); + TensorShape P_shape = inC.shape(); + TensorShape grid_shape = inx.shape(); + + // Check that inputs' dimensional + DCHECK_EQ(x_shape.dims(), 3); + DCHECK_EQ(v_shape.dims(), 3); + DCHECK_EQ(F_shape.dims(), 4); + DCHECK_EQ(C_shape.dims(), 4); + DCHECK_EQ(A_shape.dims(), 4); + + const int batch_size = x_shape.dim_size(0); + // printf("batch_size %d\n", batch_size); + + const int dim = x_shape.dim_size(1); + // printf("dim %d\n", dim); + + // Check gravity + int res[dim]; + float gravity[dim]; + int num_cells = 1; + for (int i = 0; i < dim; i++) { + res[i] = res_[i]; + num_cells *= res[i]; + gravity[i] = gravity_[i]; + } + int grid_shape2 = dim + 1; + // printf("P2GOpGPU\n"); + // float dx = 1.0f / res[0]; + + const int particles = x_shape.dim_size(2); + // printf("particles %d\n", particles); + + // Check input batch_size + DCHECK_EQ(batch_size, v_shape.dim_size(0)); + DCHECK_EQ(batch_size, F_shape.dim_size(0)); + DCHECK_EQ(batch_size, C_shape.dim_size(0)); + DCHECK_EQ(batch_size, A_shape.dim_size(0)); + + // Check input dim + DCHECK_EQ(dim, v_shape.dim_size(1)); + DCHECK_EQ(dim, F_shape.dim_size(1)); + DCHECK_EQ(dim, F_shape.dim_size(2)); + DCHECK_EQ(dim, C_shape.dim_size(1)); + DCHECK_EQ(dim, C_shape.dim_size(2)); + DCHECK_EQ(dim, A_shape.dim_size(1)); + DCHECK_EQ(dim, A_shape.dim_size(2)); + + // Check input particles + DCHECK_EQ(particles, v_shape.dim_size(2)); + DCHECK_EQ(particles, F_shape.dim_size(3)); + DCHECK_EQ(particles, C_shape.dim_size(3)); + DCHECK_EQ(particles, A_shape.dim_size(3)); + + // create output tensor + Tensor *outP = NULL; + Tensor *outgrid = NULL; + OP_REQUIRES_OK(context, context->allocate_output(0, P_shape, &outP)); + grid_shape.set_dim(1, num_cells); + grid_shape.set_dim(2, grid_shape2); + OP_REQUIRES_OK(context, context->allocate_output(1, grid_shape, &outgrid)); + + auto f_inx = inx.flat(); + auto f_inv = inv.flat(); + auto f_inF = inF.flat(); + auto f_inC = inC.flat(); + auto f_inA = inA.flat(); + auto f_outP = outP->template flat(); + auto f_outgrid = outgrid->template flat(); + + P2GKernelLauncher(dim, res, particles, dx_, dt_, E_, nu_, m_p_, V_p_, gravity, + f_inx.data(), f_inv.data(), f_inF.data(), f_inC.data(), + f_inA.data(), f_outP.data(), f_outgrid.data()); + } +}; + +REGISTER_KERNEL_BUILDER(Name("P2g").Device(DEVICE_GPU), P2GOpGPU); diff --git a/tensorflow_graphics/physics/src/simulator.cpp b/tensorflow_graphics/physics/src/simulator.cpp new file mode 100644 index 000000000..a393e513f --- /dev/null +++ b/tensorflow_graphics/physics/src/simulator.cpp @@ -0,0 +1,804 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "config.h" +#include "kernels.h" +#include "state_base.h" + +TC_NAMESPACE_BEGIN + +void write_partio(std::vector positions, + const std::string &file_name) { + Partio::ParticlesDataMutable *parts = Partio::create(); + Partio::ParticleAttribute posH, vH, mH, typeH, normH, statH, boundH, distH, + debugH, indexH, limitH, apicH; + + bool verbose = false; + + posH = parts->addAttribute("position", Partio::VECTOR, 3); + // typeH = parts->addAttribute("type", Partio::INT, 1); + // indexH = parts->addAttribute("index", Partio::INT, 1); + // limitH = parts->addAttribute("limit", Partio::INT, 3); + // vH = parts->addAttribute("v", Partio::VECTOR, 3); + + if (verbose) { + mH = parts->addAttribute("m", Partio::VECTOR, 1); + normH = parts->addAttribute("boundary_normal", Partio::VECTOR, 3); + debugH = parts->addAttribute("debug", Partio::VECTOR, 3); + statH = parts->addAttribute("states", Partio::INT, 1); + distH = parts->addAttribute("boundary_distance", Partio::FLOAT, 1); + boundH = parts->addAttribute("near_boundary", Partio::INT, 1); + apicH = parts->addAttribute("apic_frobenius_norm", Partio::FLOAT, 1); + } + for (auto p : positions) { + // const Particle *p = allocator.get_const(p_i); + int idx = parts->addParticle(); + // Vector vel = p->get_velocity(); + // float32 *v_p = parts->dataWrite(vH, idx); + // for (int k = 0; k < 3; k++) + // v_p[k] = vel[k]; + // int *type_p = parts->dataWrite(typeH, idx); + // int *index_p = parts->dataWrite(indexH, idx); + // int *limit_p = parts->dataWrite(limitH, idx); + float32 *p_p = parts->dataWrite(posH, idx); + + // Vector pos = p->pos; + + for (int k = 0; k < 3; k++) + p_p[k] = 0.f; + + for (int k = 0; k < 3; k++) + p_p[k] = p[k]; + // type_p[0] = int(p->is_rigid()); + // index_p[0] = p->id; + // limit_p[0] = p->dt_limit; + // limit_p[1] = p->stiffness_limit; + // limit_p[2] = p->cfl_limit; + } + Partio::write(file_name.c_str(), *parts); + parts->release(); +} + +auto gpu_mpm3d = []() { + constexpr int dim = 3; + int n = 16; + int num_particles = n * n * n; + std::vector initial_positions; + std::vector initial_velocities; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + for (int k = 0; k < n; k++) { + bool right = (i / (n / 2)); + // initial_positions.push_back(i * 0.025_f + 0.2123_f); + initial_positions.push_back(i * 0.025_f + 0.2123_f + 0.2 * right); + initial_velocities.push_back(1 - 1 * right); + // initial_velocities.push_back(0.0); + } + } + } + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + for (int k = 0; k < n; k++) { + initial_positions.push_back(j * 0.025_f + 0.4344_f); + initial_velocities.push_back(0); + } + } + } + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + for (int k = 0; k < n; k++) { + initial_positions.push_back(k * 0.025_f + 0.9854_f); + initial_velocities.push_back(0); + } + } + } + std::vector initial_F; + for (int a = 0; a < 3; a++) { + for (int b = 0; b < 3; b++) { + for (int i = 0; i < num_particles; i++) { + initial_F.push_back(real(a == b) * 1.1); + } + } + } + TC_P(initial_F.size()); + int num_steps = 80; + std::vector *> states((uint32)num_steps + 1, nullptr); + Vector3i res(20); + // Differentiate gravity is not supported + Vector3 gravity(0, 0, 0); + for (int i = 0; i < num_steps + 1; i++) { + initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], + (void *&)states[i], 1.0_f / res[0], 5e-3_f, + initial_positions.data()); + std::fill(initial_positions.begin(), initial_positions.end(), 0); + if (i == 0) { + states[i]->set_initial_v(initial_velocities.data()); + states[i]->set_initial_F(initial_F.data()); + } + } + + for (int i = 0; i < num_steps; i++) { + TC_INFO("forward step {}", i); + auto x = states[i]->fetch_x(); + OptiXScene scene; + for (int p = 0; p < (int)initial_positions.size() / 3; p++) { + OptiXParticle particle; + auto scale = 5_f; + particle.position_and_radius = + Vector4(x[p] * scale, (x[p + num_particles] - 0.02f) * scale, + x[p + 2 * num_particles] * scale, 0.03); + scene.particles.push_back(particle); + if (p == 0) + TC_P(particle.position_and_radius); + } + int interval = 3; + if (i % interval == 0) { + write_to_binary_file(scene, fmt::format("{:05d}.tcb", i / interval)); + } + forward_mpm_state(states[i], states[i + 1]); + } + + set_grad_loss(states[num_steps]); + for (int i = num_steps - 1; i >= 0; i--) { + TC_INFO("backward step {}", i); + backward_mpm_state(states[i], states[i + 1]); + auto grad_x = states[i]->fetch_grad_x(); + auto grad_v = states[i]->fetch_grad_v(); + Vector3f vgrad_v, vgrad_x; + for (int j = 0; j < num_particles; j++) { + for (int k = 0; k < 3; k++) { + vgrad_v[k] += grad_v[k * num_particles + j]; + vgrad_x[k] += grad_x[k * num_particles + j]; + } + } + TC_P(vgrad_v); + TC_P(vgrad_x); + } +}; + +TC_REGISTER_TASK(gpu_mpm3d); + +auto gpu_mpm3d_falling_leg = []() { + // Actuation or falling test? + bool actuation = true; + constexpr int dim = 3; + // The cube has size 2 * 2 * 2, with height 5m, falling time = 1s, g=-10 + int n = 20; + real dx = 0.4; + real sample_density = 0.1; + Vector3 corner(20, 15 * (!actuation) + 20 * dx, 20); + + using Vector = Vector3; + + std::vector particle_positions; + + std::vector actuator_indices; + + auto add_cube = [&](Vector corner, Vector size) { + actuator_indices.clear(); + real d = sample_density; + auto sizeI = (size / sample_density).template cast(); + int padding = 3; + int counter = 0; + for (auto i : TRegion<3>(Vector3i(0), sizeI)) { + counter++; + particle_positions.push_back(Vector( + corner[0] + d * i.i, corner[1] + d * i.j, corner[2] + d * i.k)); + if (padding <= i.i && padding <= i.j && padding <= i.k && + i.i + padding < sizeI[0] && i.j + padding < sizeI[1] && + i.k + padding < sizeI[2]) { + actuator_indices.push_back(counter); + } + } + }; + + Vector chamber_size(2, 14.5, 2); + add_cube(corner + chamber_size * Vector(1, 0, 0), chamber_size); + add_cube(corner + chamber_size * Vector(0, 0, 1), chamber_size); + add_cube(corner + chamber_size * Vector(1, 0, 1), chamber_size); + add_cube(corner + chamber_size * Vector(2, 0, 1), chamber_size); + add_cube(corner + chamber_size * Vector(1, 0, 2), chamber_size); + + int num_particles = particle_positions.size(); + std::vector initial_positions; + initial_positions.resize(particle_positions.size() * 3); + for (int i = 0; i < particle_positions.size(); i++) { + initial_positions[i] = particle_positions[i].x; + initial_positions[i + particle_positions.size()] = particle_positions[i].y; + initial_positions[i + 2 * particle_positions.size()] = + particle_positions[i].z; + } + + int num_frames = 200; + Vector3i res(200, 120, 200); + Array3D bc(res); + TC_WARN("Should run without APIC."); + TC_WARN("Should use damping 2e-4 on grid."); + for (int i = 0; i < res[0]; i++) { + for (int j = 0; j < 22; j++) { + for (int k = 0; k < res[2]; k++) { + bc[i][j][k] = Vector4(0, 1, 0, -1); + } + } + } + // cm/s^2 + Vector3 gravity(0, -980.0, 0); + TStateBase *state; + TStateBase *state2; + int substep = 160; + real dt = 1.0_f / 120 / substep; + initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], (void *&)state, + dx, dt, initial_positions.data()); + set_mpm_bc<3>(state, &bc[0][0][0][0]); + reinterpret_cast *>(state)->set(10, 100, 50000000, 0.3); + initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], (void *&)state2, + dx, dt, initial_positions.data()); + set_mpm_bc<3>(state2, &bc[0][0][0][0]); + reinterpret_cast *>(state2)->set(10, 100, 50000000, 0.3); + + std::vector A(num_particles * 9); + + for (int i = 0; i < num_frames; i++) { + TC_INFO("forward step {}", i); + auto x = state->fetch_x(); + auto fn = fmt::format("{:04d}.bgeo", i); + TC_INFO(fn); + std::vector parts; + for (int p = 0; p < (int)initial_positions.size() / 3; p++) { + auto pos = Vector3(x[p], x[p + num_particles], x[p + 2 * num_particles]); + parts.push_back(pos); + } + write_partio(parts, fn); + + if (actuation) { + for (int j = 0; j < actuator_indices.size(); j++) { + real alpha = 500000; + A[j + 0 * num_particles] = alpha * i; + A[j + 4 * num_particles] = alpha * i; + A[j + 8 * num_particles] = alpha * i; + } + set_mpm_actuation(state, A.data()); + } + + { + TC_PROFILER("simulate one frame"); + for (int j = 0; j < substep; j++) + forward_mpm_state(state, state); + } + // taichi::print_profile_info(); + } +}; + +TC_REGISTER_TASK(gpu_mpm3d_falling_leg); + +auto gpu_mpm3d_falling_cube = []() { + constexpr int dim = 3; + // The cube has size 2 * 2 * 2, with height 5m, falling time = 1s, g=-10 + int n = 80; + real dx = 0.2; + real sample_density = 0.1; + Vector3 corner(2, 5 + 2 * dx, 2); + int num_particles = n * n * n; + std::vector initial_positions; + std::vector initial_velocities; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + for (int k = 0; k < n; k++) { + // initial_positions.push_back(i * 0.025_f + 0.2123_f); + initial_positions.push_back(i * sample_density + corner[0]); + initial_velocities.push_back(0); + } + } + } + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + for (int k = 0; k < n; k++) { + initial_positions.push_back(j * sample_density + corner[1]); + initial_velocities.push_back(0); + } + } + } + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + for (int k = 0; k < n; k++) { + initial_positions.push_back(k * sample_density + corner[2]); + initial_velocities.push_back(0); + } + } + } + std::vector initial_F; + for (int a = 0; a < 3; a++) { + for (int b = 0; b < 3; b++) { + for (int i = 0; i < num_particles; i++) { + initial_F.push_back(real(a == b) * 1.1); + } + } + } + int num_frames = 300; + Vector3i res(100, 120, 100); + Vector3 gravity(0, -10, 0); + TStateBase *state; + TStateBase *state2; + int substep = 3; + real dt = 1.0_f / 60 / substep; + initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], (void *&)state, + dx, dt, initial_positions.data()); + reinterpret_cast *>(state)->set(10, 100, 5000, 0.3); + initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], (void *&)state2, + dx, dt, initial_positions.data()); + reinterpret_cast *>(state2)->set(10, 100, 5000, 0.3); + state->set_initial_v(initial_velocities.data()); + + for (int i = 0; i < num_frames; i++) { + TC_INFO("forward step {}", i); + auto x = state->fetch_x(); + auto fn = fmt::format("{:04d}.bgeo", i); + TC_INFO(fn); + std::vector parts; + for (int p = 0; p < (int)initial_positions.size() / 3; p++) { + auto pos = Vector3(x[p], x[p + num_particles], x[p + 2 * num_particles]); + parts.push_back(pos); + } + write_partio(parts, fn); + + { + TC_PROFILER("simulate one frame"); + for (int j = 0; j < substep; j++) + forward_mpm_state(state, state); + } + taichi::print_profile_info(); + } + while (true) { + TC_PROFILER("backward"); + for (int j = 0; j < substep; j++) + backward_mpm_state(state2, state); + taichi::print_profile_info(); + } +}; + +TC_REGISTER_TASK(gpu_mpm3d_falling_cube); + +auto gpu_mpm2d_falling_cube = []() { + constexpr int dim = 2; + // The cube has size 2 * 2 * 2, with height 5m, falling time = 1s, g=-10 + int n = 80; + real dx = 0.2; + real sample_density = 0.1; + Vector2 corner(2, 5 + 2 * dx); + int num_particles = n * n; + std::vector initial_positions; + std::vector initial_velocities; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + initial_positions.push_back(i * sample_density + corner[0]); + initial_velocities.push_back(0); + } + } + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + initial_positions.push_back(j * sample_density + corner[1]); + initial_velocities.push_back(0); + } + } + std::vector initial_F; + int num_frames = 3; + Vector2i res(100, 120); + Vector2 gravity(0, -10); + TStateBase *state; + TStateBase *state2; + int substep = 3; + real dt = 1.0_f / 60 / substep; + initialize_mpm_state<2>(&res[0], num_particles, &gravity[0], (void *&)state, + dx, dt, initial_positions.data()); + reinterpret_cast *>(state)->set(10, 100, 5000, 0.3); + initialize_mpm_state<2>(&res[0], num_particles, &gravity[0], (void *&)state2, + dx, dt, initial_positions.data()); + reinterpret_cast *>(state2)->set(10, 100, 5000, 0.3); + state->set_initial_v(initial_velocities.data()); + + for (int i = 0; i < num_frames; i++) { + TC_INFO("forward step {}", i); + auto x = state->fetch_x(); + auto fn = fmt::format("{:04d}.bgeo", i); + TC_INFO(fn); + std::vector parts; + for (int p = 0; p < (int)initial_positions.size() / dim; p++) { + auto pos = Vector3(x[p], x[p + num_particles], 0); + parts.push_back(pos); + } + write_partio(parts, fn); + + { + TC_PROFILER("simulate one frame"); + for (int j = 0; j < substep; j++) + forward_mpm_state(state, state); + } + taichi::print_profile_info(); + } + while (true) { + TC_PROFILER("backward"); + for (int j = 0; j < substep; j++) + backward_mpm_state(state2, state); + taichi::print_profile_info(); + } +}; + +TC_REGISTER_TASK(gpu_mpm2d_falling_cube); + +auto test_cuda = []() { + int N = 10; + std::vector a(N), b(N); + for (int i = 0; i < N; i++) { + a[i] = i; + b[i] = i * 2; + } + saxpy_cuda(N, 2.0_f, a.data(), b.data()); + for (int i = 0; i < N; i++) { + TC_ASSERT_EQUAL(b[i], i * 4.0_f, 1e-5_f); + } +}; + +TC_REGISTER_TASK(test_cuda); + +auto test_cuda_svd = []() { + int N = 12800; + using Matrix = Matrix3f; + std::vector A, U, sig, V; + A.resize(N); + U.resize(N); + sig.resize(N); + V.resize(N); + + std::vector A_flattened; + for (int p = 0; p < N; p++) { + auto matA = Matrix(1) + 0.5_f * Matrix::rand(); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + A_flattened.push_back(matA(i, j)); + } + } + A[p] = matA; + } + + test_svd_cuda(N, (real *)A_flattened.data(), (real *)U.data(), + (real *)sig.data(), (real *)V.data()); + + constexpr real tolerance = 3e-5_f32; + for (int i = 0; i < N; i++) { + auto matA = A[i]; + auto matU = U[i]; + auto matV = V[i]; + auto matSig = sig[i]; + + TC_ASSERT_EQUAL(matSig, Matrix(matSig.diag()), tolerance); + TC_ASSERT_EQUAL(Matrix(1), matU * transposed(matU), tolerance); + TC_ASSERT_EQUAL(Matrix(1), matV * transposed(matV), tolerance); + TC_ASSERT_EQUAL(matA, matU * matSig * transposed(matV), tolerance); + + /* + polar_decomp(m, R, S); + TC_CHECK_EQUAL(m, R * S, tolerance); + TC_CHECK_EQUAL(Matrix(1), R * transposed(R), tolerance); + TC_CHECK_EQUAL(S, transposed(S), tolerance); + */ + } +}; + +TC_REGISTER_TASK(test_cuda_svd); + +auto test_partio = []() { + real dx = 0.01_f; + for (int f = 0; f < 100; f++) { + std::vector positions; + for (int i = 0; i < 10; i++) { + for (int j = 0; j < 10; j++) { + for (int k = 0; k < 10; k++) { + positions.push_back(dx * Vector3(i + f, j, k)); + } + } + } + auto fn = fmt::format("{:04d}.bgeo", f); + TC_INFO(fn); + write_partio(positions, fn); + } +}; + +TC_REGISTER_TASK(test_partio); + +auto write_partio_c = [](const std::vector ¶meters) { + auto n = (int)std::atoi(parameters[0].c_str()); + float *pos_ = reinterpret_cast(std::atol(parameters[1].c_str())); + auto fn = parameters[2]; + using namespace taichi; + std::vector pos; + for (int i = 0; i < n; i++) { + auto p = Vector3(pos_[i], pos_[i + n], pos_[i + 2 * n]); + pos.push_back(p); + } + taichi::write_partio(pos, fn); +}; + +TC_REGISTER_TASK(write_partio_c); + +auto write_tcb_c = [](const std::vector ¶meters) { + auto n = (int)std::atoi(parameters[0].c_str()); + float *pos_ = reinterpret_cast(std::atol(parameters[1].c_str())); + auto fn = parameters[2]; + using namespace taichi; + std::vector pos; + for (int i = 0; i < n; i++) { + auto p = Vector4(pos_[i], pos_[i + n], pos_[i + 2 * n], pos_[i + 3 * n]); + pos.push_back(p); + } + write_to_binary_file(pos, fn); +}; + +TC_REGISTER_TASK(write_tcb_c); + +TC_FORCE_INLINE void polar_decomp_simple(const TMatrix &m, + TMatrix &R, + TMatrix &S) { + /* + x = m[:, 0, 0, :] + m[:, 1, 1, :] + y = m[:, 1, 0, :] - m[:, 0, 1, :] + scale = 1.0 / tf.sqrt(x**2 + y**2) + c = x * scale + s = y * scale + r = make_matrix2d(c, -s, s, c) + return r, matmatmul(transpose(r), m) + */ + + auto x = m(0, 0) + m(1, 1); + auto y = m(1, 0) - m(0, 1); + auto scale = 1.0_f / std::sqrt(x * x + y * y); + auto c = x * scale; + auto s = y * scale; + R = Matrix2(Vector2(c, s), Vector2(-s, c)); + S = transposed(R) * m; +} + +TC_FORCE_INLINE TMatrix dR_from_dF(const TMatrix &F, + const TMatrix &R, + const TMatrix &S, + const TMatrix &dF) { + using Matrix = TMatrix; + using Vector = TVector; + // set W = R^T dR = [ 0 x ] + // [ -x 0 ] + // + // R^T dF - dF^T R = WS + SW + // + // WS + SW = [ x(s21 - s12) x(s11 + s22) ] + // [ -x[s11 + s22] x(s21 - s12) ] + // ---------------------------------------------------- + Matrix lhs = transposed(R) * dF - transposed(dF) * R; + real x = lhs(0, 1) / (S(0, 0) + S(1, 1)); + Matrix W = Matrix(Vector(0, -x), Vector(x, 0)); + return R * W; +}; + +void Times_Rotated_dP_dF_FixedCorotated(real mu, + real lambda, + const Matrix2 &F, + const TMatrix &dF, + TMatrix &dP) { + using Matrix = TMatrix; + using Vector = TVector; + + const auto j = determinant(F); + Matrix r, s; + polar_decomp_simple(F, r, s); + Matrix dR = dR_from_dF(F, r, s, dF); + Matrix JFmT = Matrix(Vector(F(1, 1), -F(0, 1)), Vector(-F(1, 0), F(0, 0))); + Matrix dJFmT = + Matrix(Vector(dF(1, 1), -dF(0, 1)), Vector(-dF(1, 0), dF(0, 0))); + dP = 2.0_f * mu * (dF - dR) + + lambda * JFmT * (JFmT.elementwise_product(dF)).sum() + + lambda * (j - 1) * dJFmT; +} + +Matrix2 stress(real mu, real lambda, const Matrix2 &F) { + Matrix2 r, s; + polar_decomp(F, r, s); + auto j = determinant(F); + return 2.0_f * mu * (F - r) + lambda * j * (j - 1) * inverse(transposed(F)); +} + +auto test_2d_differential = []() { + using Matrix = TMatrix; + real mu = 13, lambda = 32; + for (int r = 0; r < 10000; r++) { + TC_INFO("{}", r); + Matrix F = Matrix::rand(); + if (determinant(F) < 0.1_f) { + // Assuming no negative + continue; + } + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + Matrix dF, dP; + dF(i, j) = 1; + real s_delta = 1e-3; + Matrix delta; + delta(i, j) = s_delta; + Times_Rotated_dP_dF_FixedCorotated(mu, lambda, F, dF, dP); + auto dP_numerical = + 1.0_f / (s_delta * 2) * + (stress(mu, lambda, F + delta) - stress(mu, lambda, F - delta)); + auto ratio = (dP - dP_numerical).frobenius_norm() / dP.frobenius_norm(); + TC_P(determinant(F)); + TC_P(dP); + TC_P(dP_numerical); + TC_ASSERT(ratio < 1e-3); + } + } + } +}; + +TC_REGISTER_TASK(test_2d_differential); + +auto view_txt = [](const std::vector ¶meters) { + std::FILE *f = std::fopen(parameters[0].c_str(), "r"); + int window_size = 800; + int scale = 10; + GUI ui("particles", window_size, window_size); + while (true) { + char type[100]; + if (std::feof(f)) { + break; + } + fscanf(f, "%s", type); + printf("reading...\n"); + if (type[0] == 'p') { + real x, y, r, g, b, a00, a01, a10, a11; + fscanf(f, "%f %f %f %f %f %f %f %f %f", &x, &y, &r, &g, &b, &a00, &a01, + &a10, &a11); + ui.get_canvas().img[Vector2i(x * scale, y * scale)] = + Vector3f(r, g, a11 * 2); + } + } + while (1) + ui.update(); +}; + +TC_REGISTER_TASK(view_txt); + +auto convert_obj = [](const std::vector ¶meters) { + for (auto fn : parameters) { + std::FILE *f = std::fopen(fn.c_str(), "r"); + char s[1000], type[100]; + std::vector vec; + while (std::fgets(s, 1000, f)) { + real x, y, z; + sscanf(s, "%s %f %f %f", type, &x, &y, &z); + if (type[0] == 'v') { + vec.push_back(Vector3(x, y, z)); + } + } + TC_P(vec.size()); + write_to_binary_file(vec, fn + ".tcb"); + } +}; + +TC_REGISTER_TASK(convert_obj); + +auto fuse_frames = [](const std::vector ¶meters) { + TC_ASSERT(parameters.size() == 4); + int iterations = std::atoi(parameters[0].c_str()); + int iteration_interval = std::atoi(parameters[1].c_str()); + int iteration_offset = 0; + if (iteration_interval == 0) { + iteration_offset = iterations; + iterations = 1; + } + int frames = std::atoi(parameters[2].c_str()); + int frame_interval = std::atoi(parameters[3].c_str()); + for (int i = 0; i < frames; i++) { + auto frame_fn = fmt::format("frame{:05d}.txt", i * frame_interval); + std::vector vec; + for (int j = 0; j < iterations; j++) { + auto iteration_fn = fmt::format( + "iteration{:04d}", j * iteration_interval + iteration_offset); + std::FILE *f = std::fopen((iteration_fn + "/" + frame_fn).c_str(), "r"); + char s[1000], type[100]; + while (std::fgets(s, 1000, f)) { + real x, y, a, _; + sscanf(s, "%s %f %f %f %f %f %f %f %f %f", type, &x, &y, &_, &_, &_, &_, + &_, &_, &a); + if (type[0] == 'p') { + x = x / 40; + y = y / 40; + vec.push_back(Vector3(x, y, -j * 0.09, a)); + } + } + fclose(f); + } + TC_P(vec.size()); + std::string prefix; + if (iteration_interval == 0) { + prefix = fmt::format("iteration{:04d}", iteration_offset); + } + write_to_binary_file(vec, prefix + frame_fn + ".tcb"); + } +}; + +TC_REGISTER_TASK(fuse_frames); + +auto fuse_frames_ppo = [](const std::vector ¶meters) { + TC_ASSERT(parameters.size() == 4); + int iterations = std::atoi(parameters[0].c_str()); + int iteration_interval = std::atoi(parameters[1].c_str()); + int iteration_offset = 0; + if (iteration_interval == 0) { + iteration_offset = iterations; + iterations = 1; + } + + int frames = std::atoi(parameters[2].c_str()); + int frame_interval = std::atoi(parameters[3].c_str()); + + /* + auto fn = [&](int iteration, int frame) { + auto frame_fn = fmt::format("frame{:05d}.txt", frame * frame_interval); + auto iteration_fn = + fmt::format("it{:04d}", iteration * iteration_interval + iteration_offset); + return iteration_fn + "/" + frame_fn; + }; + */ + auto fn = [&](int iteration, int frame) { + // PPO + auto frame_fn = fmt::format("it{:04d}/frame00001.txt", frame * frame_interval); + auto iteration_fn = + fmt::format("ep{:04d}", (iteration * iteration_interval + iteration_offset + 1) * 10); + return iteration_fn + "/" + frame_fn; + }; + + for (int i = 0; i < frames; i++) { + std::vector vec; + for (int j = 0; j < iterations; j++) { + auto fname = fn(j, i).c_str(); + // TC_P(fname); + std::FILE *f = std::fopen(fname, "r"); + TC_ASSERT(f != nullptr); + char s[1000], type[100]; + real c = -20.7_f; + while (std::fgets(s, 1000, f)) { + real x, y, a, _; + sscanf(s, "%s %f %f %f %f %f %f %f %f %f", type, &x, &y, &_, &_, &_, &_, + &_, &_, &a); + Vector4 position_offset = Vector4(j * 0.1, 0, -j * 0.19, 0); + if (type[0] == 'p') { + x = x / 40; + y = y / 40; + vec.push_back(Vector4(x, y, 0, a) + position_offset); + } else if (type[0] == 'v') { + x /= 900; + y /= 900; + for (auto o : TRegion<3>(Vector3i(-2), Vector3i(3))) { + real delta = 0.005; + vec.push_back( + Vector4(x + delta * o.i, y + delta * o.j, delta * o.k, c) + + position_offset); + } + c = 20.7; + } + } + fclose(f); + } + TC_P(vec.size()); + std::string prefix; + if (iteration_interval == 0) { + prefix = fmt::format("iteration{:04d}", iteration_offset); + } + write_to_binary_file(vec, prefix + fmt::format("frame{:04d}.tcb", i)); + } +}; + +TC_REGISTER_TASK(fuse_frames_ppo); + +TC_NAMESPACE_END diff --git a/tensorflow_graphics/physics/src/state.cuh b/tensorflow_graphics/physics/src/state.cuh new file mode 100644 index 000000000..8c765bae6 --- /dev/null +++ b/tensorflow_graphics/physics/src/state.cuh @@ -0,0 +1,473 @@ +#pragma once + +#include "state_base.h" + +static constexpr int mpm_enalbe_apic = true; +static constexpr int mpm_enalbe_force = true; +static constexpr int particle_block_dim = 128; +static constexpr int grid_block_dim = 128; + +template +__device__ constexpr int kernel_volume(); + +template <> +__device__ constexpr int kernel_volume<2>() { + return 9; +} + +template <> +__device__ constexpr int kernel_volume<3>() { + return 27; +} + +template +__device__ TC_FORCE_INLINE TVector offset_from_scalar(int i); + +template <> +__device__ TC_FORCE_INLINE TVector offset_from_scalar<2>(int i) { + return TVector(i / 3, i % 3); +}; + +template <> +__device__ TC_FORCE_INLINE TVector offset_from_scalar<3>(int i) { + return TVector(i / 9, i / 3 % 3, i % 3); +}; + +template +__device__ TC_FORCE_INLINE TVector offset_from_scalar_f(int i); + +template <> +__device__ TC_FORCE_INLINE TVector offset_from_scalar_f<2>(int i) { + return TVector(i / 3, i % 3); +}; + +template <> +__device__ TC_FORCE_INLINE TVector offset_from_scalar_f<3>(int i) { + return TVector(i / 9, i / 3 % 3, i % 3); +}; + +template +struct TState : public TStateBase { + static constexpr int dim = dim_; + using Base = TStateBase; + + using Base::C_storage; + using Base::E; + using Base::F_storage; + using Base::P_storage; + using Base::A_storage; + using Base::V_p; + using Base::dt; + using Base::dx; + using Base::grad_C_storage; + using Base::grad_F_storage; + using Base::grad_A_storage; + using Base::grad_P_storage; + using Base::grad_grid_storage; + using Base::grad_v_storage; + using Base::grad_x_storage; + using Base::gravity; + using Base::grid_storage; + using Base::grid_star_storage; + using Base::invD; + using Base::inv_dx; + using Base::lambda; + using Base::m_p; + using Base::mu; + using Base::nu; + using Base::num_cells; + using Base::num_particles; + using Base::res; + using Base::v_storage; + using Base::x_storage; + using Base::grid_bc; + + using VectorI = TVector; + using Vector = TVector; + using Matrix = TMatrix; + + TState() { + num_cells = 1; + for (int i = 0; i < dim; i++) { + num_cells *= res[i]; + } + } + + TC_FORCE_INLINE __host__ __device__ int grid_size() const { + return num_cells; + } + + TC_FORCE_INLINE __device__ int linearized_offset(VectorI x) const { + int ret = x[0]; +#pragma unroll + for (int i = 1; i < dim; i++) { + ret *= res[i]; + ret += x[i]; + } + return ret; + } + + TC_FORCE_INLINE __device__ real *grid_node(int offset) const { + return grid_storage + (dim + 1) * offset; + } + + TC_FORCE_INLINE __device__ real *grid_star_node(int offset) const { + return grid_star_storage + (dim + 1) * offset; + } + + TC_FORCE_INLINE __device__ real *grad_grid_node(int offset) const { + return grad_grid_storage + (dim + 1) * offset; + } + + TC_FORCE_INLINE __device__ real *grid_node(VectorI x) const { + return grid_node(linearized_offset(x)); + } + + TC_FORCE_INLINE __device__ real *grid_node_bc(int offset) const { + return grid_bc + (dim + 1) * offset; + } + + TC_FORCE_INLINE __device__ real *grad_grid_node(VectorI x) const { + return grad_grid_node(linearized_offset(x)); + } + + template = 0> + TC_FORCE_INLINE __device__ Matrix get_matrix(real *p, int part_id) const { + return Matrix( + p[part_id + 0 * num_particles], p[part_id + 1 * num_particles], + p[part_id + 2 * num_particles], p[part_id + 3 * num_particles]); + } + + template = 0> + TC_FORCE_INLINE __device__ Matrix get_matrix(real *p, int part_id) const { + return Matrix( + p[part_id + 0 * num_particles], p[part_id + 1 * num_particles], + p[part_id + 2 * num_particles], p[part_id + 3 * num_particles], + p[part_id + 4 * num_particles], p[part_id + 5 * num_particles], + p[part_id + 6 * num_particles], p[part_id + 7 * num_particles], + p[part_id + 8 * num_particles]); + } + + TC_FORCE_INLINE __device__ void set_matrix(real *p, + int part_id, + Matrix m) const { + for (int i = 0; i < dim; i++) { + for (int j = 0; j < dim; j++) { + p[part_id + (i * dim + j) * num_particles] = m[i][j]; + } + } + } + + template = 0> + TC_FORCE_INLINE __device__ Vector get_vector(real *p, int part_id) { + return Vector(p[part_id], p[part_id + num_particles]); + } + + template = 0> + TC_FORCE_INLINE __device__ Vector get_vector(real *p, int part_id) { + return Vector(p[part_id], p[part_id + num_particles], + p[part_id + num_particles * 2]); + } + + TC_FORCE_INLINE __device__ void set_vector(real *p, int part_id, Vector v) { + for (int i = 0; i < dim; i++) { + p[part_id + num_particles * i] = v[i]; + } + } + + TC_FORCE_INLINE __device__ Vector get_grid_velocity(VectorI i) { + auto g = grid_node(i); + return Vector(g); + } + + TC_FORCE_INLINE __device__ Vector get_grid_star_velocity(VectorI i) { + return Vector(grid_star_node(linearized_offset(i))); + } + + TC_FORCE_INLINE __device__ Vector get_grad_grid_velocity(VectorI i) { + auto g = grad_grid_node(i); + return Vector(g); + } + + TC_FORCE_INLINE __device__ void set_grid_velocity(VectorI i, Vector v) { + auto g = grid_node(i); + for (int d = 0; d < dim; d++) { + g[d] = v[d]; + } + } + + TC_FORCE_INLINE __device__ void set_grad_grid_velocity(int i, + int j, + int k, + Vector v) { + auto g = grad_grid_node(i, j, k); + for (int d = 0; d < dim; d++) { + g[d] = v[d]; + } + } + + TC_FORCE_INLINE __device__ real get_grid_mass(VectorI i) { + auto g = grid_node(i); + return g[dim]; + } + +#define TC_MPM_VECTOR(x) \ + TC_FORCE_INLINE __device__ Vector get_##x(int part_id) { \ + return get_vector(x##_storage, part_id); \ + } \ + TC_FORCE_INLINE __device__ void set_##x(int part_id, Vector x) { \ + return set_vector(x##_storage, part_id, x); \ + } \ + TC_FORCE_INLINE __device__ Vector get_grad_##x(int part_id) { \ + return get_vector(grad_##x##_storage, part_id); \ + } \ + TC_FORCE_INLINE __device__ void set_grad_##x(int part_id, Vector x) { \ + return set_vector(grad_##x##_storage, part_id, x); \ + } + + TC_MPM_VECTOR(x); + TC_MPM_VECTOR(v); + +#define TC_MPM_MATRIX(F) \ + TC_FORCE_INLINE __device__ Matrix get_##F(int part_id) { \ + return get_matrix(F##_storage, part_id); \ + } \ + TC_FORCE_INLINE __device__ void set_##F(int part_id, Matrix m) { \ + return set_matrix(F##_storage, part_id, m); \ + } \ + TC_FORCE_INLINE __device__ Matrix get_grad_##F(int part_id) { \ + return get_matrix(grad_##F##_storage, part_id); \ + } \ + TC_FORCE_INLINE __device__ void set_grad_##F(int part_id, Matrix m) { \ + return set_matrix(grad_##F##_storage, part_id, m); \ + } + + TC_MPM_MATRIX(F); + TC_MPM_MATRIX(P); + TC_MPM_MATRIX(C); + TC_MPM_MATRIX(A); + + TState(int res[dim], + int num_particles, + real dx, + real dt, + real gravity[dim], + real *x_storage, + real *v_storage, + real *F_storage, + real *C_storage, + real *A_storage, + real *P_storage, + real *grid_storage) + : Base() { + this->num_cells = 1; + for (int i = 0; i < dim; i++) { + this->res[i] = res[i]; + this->num_cells *= res[i]; + this->gravity[i] = gravity[i]; + } + this->num_particles = num_particles; + this->dx = dx; + this->inv_dx = 1.0f / dx; + this->dt = dt; + this->invD = 4 * inv_dx * inv_dx; + + this->x_storage = x_storage; + this->v_storage = v_storage; + this->F_storage = F_storage; + this->C_storage = C_storage; + this->A_storage = A_storage; + this->P_storage = P_storage; + this->grid_storage = grid_storage; + } + + TState(int res[dim], + int num_particles, + real dx, + real dt, + real gravity[dim], + real *x_storage, + real *v_storage, + real *F_storage, + real *C_storage, + real *P_storage, + real *A_storage, + real *grid_storage, + real *grad_x_storage, + real *grad_v_storage, + real *grad_F_storage, + real *grad_C_storage, + real *grad_A_storage, + real *grad_P_storage, + real *grad_grid_storage) + : TState(res, + num_particles, + dx, + dt, + gravity, + x_storage, + v_storage, + F_storage, + C_storage, + A_storage, + P_storage, + grid_storage) { + this->grad_x_storage = grad_x_storage; + this->grad_v_storage = grad_v_storage; + this->grad_F_storage = grad_F_storage; + this->grad_C_storage = grad_C_storage; + this->grad_A_storage = grad_A_storage; + this->grad_P_storage = grad_P_storage; + this->grad_grid_storage = grad_grid_storage; + // cudaMalloc(&this->grad_P_storage, sizeof(real) * dim * dim * + // num_particles); + // cudaMalloc(&this->grad_grid_storage, sizeof(real) * (dim + 1) * res[0] * + // res[1] * res[2]); + } + + TState(int res[dim], int num_particles, real dx, real dt, real gravity[dim]) + : TState(res, + num_particles, + dx, + dt, + gravity, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL) { + cudaMalloc(&x_storage, sizeof(real) * dim * num_particles); + cudaMalloc(&v_storage, sizeof(real) * dim * num_particles); + cudaMalloc(&F_storage, sizeof(real) * dim * dim * num_particles); + cudaMalloc(&C_storage, sizeof(real) * dim * dim * num_particles); + cudaMalloc(&P_storage, sizeof(real) * dim * dim * num_particles); + cudaMalloc(&A_storage, sizeof(real) * dim * dim * num_particles); + cudaMalloc(&grid_storage, sizeof(real) * (dim + 1) * num_cells); + cudaMalloc(&grid_star_storage, sizeof(real) * (dim + 1) * num_cells); + cudaMalloc(&grid_bc, sizeof(real) * (dim + 1) * num_cells); + + cudaMalloc(&grad_x_storage, sizeof(real) * dim * num_particles); + cudaMalloc(&grad_v_storage, sizeof(real) * dim * num_particles); + cudaMalloc(&grad_F_storage, sizeof(real) * dim * dim * num_particles); + cudaMalloc(&grad_C_storage, sizeof(real) * dim * dim * num_particles); + cudaMalloc(&grad_P_storage, sizeof(real) * dim * dim * num_particles); + cudaMalloc(&grad_A_storage, sizeof(real) * dim * dim * num_particles); + cudaMalloc(&grad_grid_storage, sizeof(real) * (dim + 1) * num_cells); + + std::vector F_initial(num_particles * dim * dim, 0); + for (int i = 0; i < num_particles; i++) { + if (dim == 2) { + F_initial[i] = 1; + F_initial[i + num_particles * 3] = 1; + } else { + F_initial[i] = 1; + F_initial[i + num_particles * 4] = 1; + F_initial[i + num_particles * 8] = 1; + } + } + cudaMemcpy(F_storage, F_initial.data(), sizeof(Matrix) * num_particles, + cudaMemcpyHostToDevice); + + cudaMemset(x_storage, 0, sizeof(real) * dim * num_particles); + cudaMemset(v_storage, 0, sizeof(real) * dim * num_particles); + cudaMemset(C_storage, 0, sizeof(real) * dim * dim * num_particles); + cudaMemset(P_storage, 0, sizeof(real) * dim * dim * num_particles); + cudaMemset(A_storage, 0, sizeof(real) * dim * dim * num_particles); + cudaMemset(grid_bc, 0, num_cells * (dim + 1) * sizeof(real)); + } + + void clear_gradients() { + cudaMemset(grad_v_storage, 0, sizeof(real) * dim * num_particles); + cudaMemset(grad_x_storage, 0, sizeof(real) * dim * num_particles); + cudaMemset(grad_F_storage, 0, sizeof(real) * dim * dim * num_particles); + cudaMemset(grad_C_storage, 0, sizeof(real) * dim * dim * num_particles); + cudaMemset(grad_P_storage, 0, sizeof(real) * dim * dim * num_particles); + cudaMemset(grad_A_storage, 0, sizeof(real) * dim * dim * num_particles); + cudaMemset(grad_grid_storage, 0, num_cells * (dim + 1) * sizeof(real)); + } +}; + +constexpr int spline_size = 3; + +template +struct TransferCommon { + using VectorI = TVector; + using Vector = TVector; + using Matrix = TMatrix; + + TVector base_coord; + Vector fx; + real dx, inv_dx; + using BSplineWeights = real[dim][spline_size]; + BSplineWeights weights[1 + (int)with_grad]; + + TC_FORCE_INLINE __device__ TransferCommon(const TState &state, + Vector x) { + dx = state.dx; + inv_dx = state.inv_dx; + for (int i = 0; i < dim; i++) { + base_coord[i] = int(x[i] * inv_dx - 0.5); + real f = (real)base_coord[i] - x[i] * inv_dx; + static_assert(std::is_same, real>::value, + ""); + fx[i] = f; + } + + // B-Spline weights + for (int i = 0; i < dim; ++i) { + weights[0][i][0] = 0.5f * sqr(1.5f + fx[i]); + weights[0][i][1] = 0.75f - sqr(fx[i] + 1); + weights[0][i][2] = 0.5f * sqr(fx[i] + 0.5f); + // printf("%f\n", weights[0][i][0] + weights[0][i][1] + + // weights[0][i][2]); + } + + if (with_grad) { + // N(x_i - x_p) + for (int i = 0; i < dim; ++i) { + weights[1][i][0] = -inv_dx * (1.5f + fx[i]); + weights[1][i][1] = inv_dx * (2 * fx[i] + 2); + weights[1][i][2] = -inv_dx * (fx[i] + 0.5f); + // printf("%f\n", weights[1][i][0] + weights[1][i][1] + + // weights[1][i][2]); + } + } + } + + template + TC_FORCE_INLINE __device__ std::enable_if_t w(int i) { + return weights[0][0][i / 3] * weights[0][1][i % 3]; + } + + template + TC_FORCE_INLINE __device__ std::enable_if_t w(int i) { + return weights[0][0][i / 9] * weights[0][1][i / 3 % 3] * + weights[0][2][i % 3]; + } + + template + TC_FORCE_INLINE __device__ std::enable_if_t<_with_grad && (dim == 2), Vector> + dw(int i) { + int j = i % 3; + i = i / 3; + return Vector(weights[1][0][i] * weights[0][1][j], + weights[0][0][i] * weights[1][1][j]); + } + + template + TC_FORCE_INLINE __device__ std::enable_if_t<_with_grad && (dim == 3), Vector> + dw(int i) { + int j = i / 3 % 3, k = i % 3; + i = i / 9; + return Vector(weights[1][0][i] * weights[0][1][j] * weights[0][2][k], + weights[0][0][i] * weights[1][1][j] * weights[0][2][k], + weights[0][0][i] * weights[0][1][j] * weights[1][2][k]); + } + + TC_FORCE_INLINE __device__ Vector dpos(int i) { + return dx * (fx + offset_from_scalar_f(i)); + } +}; + diff --git a/tensorflow_graphics/physics/src/state_base.h b/tensorflow_graphics/physics/src/state_base.h new file mode 100644 index 000000000..617953e36 --- /dev/null +++ b/tensorflow_graphics/physics/src/state_base.h @@ -0,0 +1,63 @@ +#pragma once + +template +struct TStateBase { + using real = float; + + static constexpr int dim = dim_; + int num_particles; + int res[dim]; + + real V_p = 10; // TODO: variable vol + real m_p = 100; // TODO: variable m_p + real E = 500; // TODO: variable E + real nu = 0.3; // TODO: variable nu + real mu = E / (2 * (1 + nu)), lambda = E * nu / ((1 + nu) * (1 - 2 * nu)); + + TStateBase() { + set(10, 100, 5, 0.3); + } + + void set(real V_p, real m_p, real E, real nu) { + this->V_p = V_p; + this->m_p = m_p; + this->E = E; + this->nu = nu; + this->mu = E / (2 * (1 + nu)); + this->lambda = E * nu / ((1 + nu) * (1 - 2 * nu)); + } + + real *x_storage; + real *v_storage; + real *F_storage; + real *A_storage; + real *P_storage; + real *C_storage; + real *grid_storage; + real *grid_star_storage; + + real *grid_bc; + + real *grad_x_storage; + real *grad_v_storage; + real *grad_F_storage; + real *grad_A_storage; + real *grad_P_storage; + real *grad_C_storage; + real *grad_grid_storage; + + int num_cells; + + real gravity[dim]; + real dx, inv_dx, invD; + real dt; + + std::vector fetch_x(); + std::vector fetch_grad_v(); + std::vector fetch_grad_x(); + void set_initial_v(float *); + void set_initial_F(float *F); +}; + +template +void advance(TStateBase &state); diff --git a/tensorflow_graphics/physics/src/svd.cuh b/tensorflow_graphics/physics/src/svd.cuh new file mode 100644 index 000000000..8c5ebc5a7 --- /dev/null +++ b/tensorflow_graphics/physics/src/svd.cuh @@ -0,0 +1,1084 @@ +#pragma once + +#include "math.h" // CUDA math library +#include + +#define gone 1065353216 +#define gsine_pi_over_eight 1053028117 +#define gcosine_pi_over_eight 1064076127 +#define gone_half 0.5f +#define gsmall_number 1.e-12f +#define gtiny_number 1.e-20f +#define gfour_gamma_squared 5.8284273147583007813f + +union un { + float f; + unsigned int ui; +}; + +__device__ __forceinline__ void svd(float a11, + float a12, + float a13, + float a21, + float a22, + float a23, + float a31, + float a32, + float a33, // input A + float &u11, + float &u12, + float &u13, + float &u21, + float &u22, + float &u23, + float &u31, + float &u32, + float &u33, // output U + float &s11, + // float &s12, float &s13, float &s21, + float &s22, + // float &s23, float &s31, float &s32, + float &s33, // output S + float &v11, + float &v12, + float &v13, + float &v21, + float &v22, + float &v23, + float &v31, + float &v32, + float &v33 // output V +) { + un Sa11, Sa21, Sa31, Sa12, Sa22, Sa32, Sa13, Sa23, Sa33; + un Su11, Su21, Su31, Su12, Su22, Su32, Su13, Su23, Su33; + un Sv11, Sv21, Sv31, Sv12, Sv22, Sv32, Sv13, Sv23, Sv33; + un Sc, Ss, Sch, Ssh; + un Stmp1, Stmp2, Stmp3, Stmp4, Stmp5; + un Ss11, Ss21, Ss31, Ss22, Ss32, Ss33; + un Sqvs, Sqvvx, Sqvvy, Sqvvz; + + Sa11.f = a11; + Sa12.f = a12; + Sa13.f = a13; + Sa21.f = a21; + Sa22.f = a22; + Sa23.f = a23; + Sa31.f = a31; + Sa32.f = a32; + Sa33.f = a33; + + //########################################################### + // Compute normal equations matrix + //########################################################### + + Ss11.f = Sa11.f * Sa11.f; + Stmp1.f = Sa21.f * Sa21.f; + Ss11.f = __fadd_rn(Stmp1.f, Ss11.f); + Stmp1.f = Sa31.f * Sa31.f; + Ss11.f = __fadd_rn(Stmp1.f, Ss11.f); + + Ss21.f = Sa12.f * Sa11.f; + Stmp1.f = Sa22.f * Sa21.f; + Ss21.f = __fadd_rn(Stmp1.f, Ss21.f); + Stmp1.f = Sa32.f * Sa31.f; + Ss21.f = __fadd_rn(Stmp1.f, Ss21.f); + + Ss31.f = Sa13.f * Sa11.f; + Stmp1.f = Sa23.f * Sa21.f; + Ss31.f = __fadd_rn(Stmp1.f, Ss31.f); + Stmp1.f = Sa33.f * Sa31.f; + Ss31.f = __fadd_rn(Stmp1.f, Ss31.f); + + Ss22.f = Sa12.f * Sa12.f; + Stmp1.f = Sa22.f * Sa22.f; + Ss22.f = __fadd_rn(Stmp1.f, Ss22.f); + Stmp1.f = Sa32.f * Sa32.f; + Ss22.f = __fadd_rn(Stmp1.f, Ss22.f); + + Ss32.f = Sa13.f * Sa12.f; + Stmp1.f = Sa23.f * Sa22.f; + Ss32.f = __fadd_rn(Stmp1.f, Ss32.f); + Stmp1.f = Sa33.f * Sa32.f; + Ss32.f = __fadd_rn(Stmp1.f, Ss32.f); + + Ss33.f = Sa13.f * Sa13.f; + Stmp1.f = Sa23.f * Sa23.f; + Ss33.f = __fadd_rn(Stmp1.f, Ss33.f); + Stmp1.f = Sa33.f * Sa33.f; + Ss33.f = __fadd_rn(Stmp1.f, Ss33.f); + + Sqvs.f = 1.f; + Sqvvx.f = 0.f; + Sqvvy.f = 0.f; + Sqvvz.f = 0.f; + + //########################################################### + // Solve symmetric eigenproblem using Jacobi iteration + //########################################################### + for (int i = 0; i < 6; i++) { + Ssh.f = Ss21.f * 0.5f; + Stmp5.f = __fsub_rn(Ss11.f, Ss22.f); + + Stmp2.f = Ssh.f * Ssh.f; + Stmp1.ui = (Stmp2.f >= gtiny_number) ? 0xffffffff : 0; + Ssh.ui = Stmp1.ui & Ssh.ui; + Sch.ui = Stmp1.ui & Stmp5.ui; + Stmp2.ui = ~Stmp1.ui & gone; + Sch.ui = Sch.ui | Stmp2.ui; + + Stmp1.f = Ssh.f * Ssh.f; + Stmp2.f = Sch.f * Sch.f; + Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp4.f = __frsqrt_rn(Stmp3.f); + + Ssh.f = Stmp4.f * Ssh.f; + Sch.f = Stmp4.f * Sch.f; + Stmp1.f = gfour_gamma_squared * Stmp1.f; + Stmp1.ui = (Stmp2.f <= Stmp1.f) ? 0xffffffff : 0; + + Stmp2.ui = gsine_pi_over_eight & Stmp1.ui; + Ssh.ui = ~Stmp1.ui & Ssh.ui; + Ssh.ui = Ssh.ui | Stmp2.ui; + Stmp2.ui = gcosine_pi_over_eight & Stmp1.ui; + Sch.ui = ~Stmp1.ui & Sch.ui; + Sch.ui = Sch.ui | Stmp2.ui; + + Stmp1.f = Ssh.f * Ssh.f; + Stmp2.f = Sch.f * Sch.f; + Sc.f = __fsub_rn(Stmp2.f, Stmp1.f); + Ss.f = Sch.f * Ssh.f; + Ss.f = __fadd_rn(Ss.f, Ss.f); + +#ifdef DEBUG_JACOBI_CONJUGATE + printf("GPU s %.20g, c %.20g, sh %.20g, ch %.20g\n", Ss.f, Sc.f, Ssh.f, + Sch.f); +#endif + //########################################################### + // Perform the actual Givens conjugation + //########################################################### + + Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); + Ss33.f = Ss33.f * Stmp3.f; + Ss31.f = Ss31.f * Stmp3.f; + Ss32.f = Ss32.f * Stmp3.f; + Ss33.f = Ss33.f * Stmp3.f; + + Stmp1.f = Ss.f * Ss31.f; + Stmp2.f = Ss.f * Ss32.f; + Ss31.f = Sc.f * Ss31.f; + Ss32.f = Sc.f * Ss32.f; + Ss31.f = __fadd_rn(Stmp2.f, Ss31.f); + Ss32.f = __fsub_rn(Ss32.f, Stmp1.f); + + Stmp2.f = Ss.f * Ss.f; + Stmp1.f = Ss22.f * Stmp2.f; + Stmp3.f = Ss11.f * Stmp2.f; + Stmp4.f = Sc.f * Sc.f; + Ss11.f = Ss11.f * Stmp4.f; + Ss22.f = Ss22.f * Stmp4.f; + Ss11.f = __fadd_rn(Ss11.f, Stmp1.f); + Ss22.f = __fadd_rn(Ss22.f, Stmp3.f); + Stmp4.f = __fsub_rn(Stmp4.f, Stmp2.f); + Stmp2.f = __fadd_rn(Ss21.f, Ss21.f); + Ss21.f = Ss21.f * Stmp4.f; + Stmp4.f = Sc.f * Ss.f; + Stmp2.f = Stmp2.f * Stmp4.f; + Stmp5.f = Stmp5.f * Stmp4.f; + Ss11.f = __fadd_rn(Ss11.f, Stmp2.f); + Ss21.f = __fsub_rn(Ss21.f, Stmp5.f); + Ss22.f = __fsub_rn(Ss22.f, Stmp2.f); + +#ifdef DEBUG_JACOBI_CONJUGATE + printf("%.20g\n", Ss11.f); + printf("%.20g %.20g\n", Ss21.f, Ss22.f); + printf("%.20g %.20g %.20g\n", Ss31.f, Ss32.f, Ss33.f); +#endif + + //########################################################### + // Compute the cumulative rotation, in quaternion form + //########################################################### + + Stmp1.f = Ssh.f * Sqvvx.f; + Stmp2.f = Ssh.f * Sqvvy.f; + Stmp3.f = Ssh.f * Sqvvz.f; + Ssh.f = Ssh.f * Sqvs.f; + + Sqvs.f = Sch.f * Sqvs.f; + Sqvvx.f = Sch.f * Sqvvx.f; + Sqvvy.f = Sch.f * Sqvvy.f; + Sqvvz.f = Sch.f * Sqvvz.f; + + Sqvvz.f = __fadd_rn(Sqvvz.f, Ssh.f); + Sqvs.f = __fsub_rn(Sqvs.f, Stmp3.f); + Sqvvx.f = __fadd_rn(Sqvvx.f, Stmp2.f); + Sqvvy.f = __fsub_rn(Sqvvy.f, Stmp1.f); + +#ifdef DEBUG_JACOBI_CONJUGATE + printf("GPU q %.20g %.20g %.20g %.20g\n", Sqvvx.f, Sqvvy.f, Sqvvz.f, + Sqvs.f); +#endif + + ////////////////////////////////////////////////////////////////////////// + // (1->3) + ////////////////////////////////////////////////////////////////////////// + Ssh.f = Ss32.f * 0.5f; + Stmp5.f = __fsub_rn(Ss22.f, Ss33.f); + + Stmp2.f = Ssh.f * Ssh.f; + Stmp1.ui = (Stmp2.f >= gtiny_number) ? 0xffffffff : 0; + Ssh.ui = Stmp1.ui & Ssh.ui; + Sch.ui = Stmp1.ui & Stmp5.ui; + Stmp2.ui = ~Stmp1.ui & gone; + Sch.ui = Sch.ui | Stmp2.ui; + + Stmp1.f = Ssh.f * Ssh.f; + Stmp2.f = Sch.f * Sch.f; + Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp4.f = __frsqrt_rn(Stmp3.f); + + Ssh.f = Stmp4.f * Ssh.f; + Sch.f = Stmp4.f * Sch.f; + Stmp1.f = gfour_gamma_squared * Stmp1.f; + Stmp1.ui = (Stmp2.f <= Stmp1.f) ? 0xffffffff : 0; + + Stmp2.ui = gsine_pi_over_eight & Stmp1.ui; + Ssh.ui = ~Stmp1.ui & Ssh.ui; + Ssh.ui = Ssh.ui | Stmp2.ui; + Stmp2.ui = gcosine_pi_over_eight & Stmp1.ui; + Sch.ui = ~Stmp1.ui & Sch.ui; + Sch.ui = Sch.ui | Stmp2.ui; + + Stmp1.f = Ssh.f * Ssh.f; + Stmp2.f = Sch.f * Sch.f; + Sc.f = __fsub_rn(Stmp2.f, Stmp1.f); + Ss.f = Sch.f * Ssh.f; + Ss.f = __fadd_rn(Ss.f, Ss.f); + +#ifdef DEBUG_JACOBI_CONJUGATE + printf("GPU s %.20g, c %.20g, sh %.20g, ch %.20g\n", Ss.f, Sc.f, Ssh.f, + Sch.f); +#endif + + //########################################################### + // Perform the actual Givens conjugation + //########################################################### + + Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); + Ss11.f = Ss11.f * Stmp3.f; + Ss21.f = Ss21.f * Stmp3.f; + Ss31.f = Ss31.f * Stmp3.f; + Ss11.f = Ss11.f * Stmp3.f; + + Stmp1.f = Ss.f * Ss21.f; + Stmp2.f = Ss.f * Ss31.f; + Ss21.f = Sc.f * Ss21.f; + Ss31.f = Sc.f * Ss31.f; + Ss21.f = __fadd_rn(Stmp2.f, Ss21.f); + Ss31.f = __fsub_rn(Ss31.f, Stmp1.f); + + Stmp2.f = Ss.f * Ss.f; + Stmp1.f = Ss33.f * Stmp2.f; + Stmp3.f = Ss22.f * Stmp2.f; + Stmp4.f = Sc.f * Sc.f; + Ss22.f = Ss22.f * Stmp4.f; + Ss33.f = Ss33.f * Stmp4.f; + Ss22.f = __fadd_rn(Ss22.f, Stmp1.f); + Ss33.f = __fadd_rn(Ss33.f, Stmp3.f); + Stmp4.f = __fsub_rn(Stmp4.f, Stmp2.f); + Stmp2.f = __fadd_rn(Ss32.f, Ss32.f); + Ss32.f = Ss32.f * Stmp4.f; + Stmp4.f = Sc.f * Ss.f; + Stmp2.f = Stmp2.f * Stmp4.f; + Stmp5.f = Stmp5.f * Stmp4.f; + Ss22.f = __fadd_rn(Ss22.f, Stmp2.f); + Ss32.f = __fsub_rn(Ss32.f, Stmp5.f); + Ss33.f = __fsub_rn(Ss33.f, Stmp2.f); + +#ifdef DEBUG_JACOBI_CONJUGATE + printf("%.20g\n", Ss11.f); + printf("%.20g %.20g\n", Ss21.f, Ss22.f); + printf("%.20g %.20g %.20g\n", Ss31.f, Ss32.f, Ss33.f); +#endif + + //########################################################### + // Compute the cumulative rotation, in quaternion form + //########################################################### + + Stmp1.f = Ssh.f * Sqvvx.f; + Stmp2.f = Ssh.f * Sqvvy.f; + Stmp3.f = Ssh.f * Sqvvz.f; + Ssh.f = Ssh.f * Sqvs.f; + + Sqvs.f = Sch.f * Sqvs.f; + Sqvvx.f = Sch.f * Sqvvx.f; + Sqvvy.f = Sch.f * Sqvvy.f; + Sqvvz.f = Sch.f * Sqvvz.f; + + Sqvvx.f = __fadd_rn(Sqvvx.f, Ssh.f); + Sqvs.f = __fsub_rn(Sqvs.f, Stmp1.f); + Sqvvy.f = __fadd_rn(Sqvvy.f, Stmp3.f); + Sqvvz.f = __fsub_rn(Sqvvz.f, Stmp2.f); + +#ifdef DEBUG_JACOBI_CONJUGATE + printf("GPU q %.20g %.20g %.20g %.20g\n", Sqvvx.f, Sqvvy.f, Sqvvz.f, + Sqvs.f); +#endif +#if 1 + ////////////////////////////////////////////////////////////////////////// + // 1 -> 2 + ////////////////////////////////////////////////////////////////////////// + + Ssh.f = Ss31.f * 0.5f; + Stmp5.f = __fsub_rn(Ss33.f, Ss11.f); + + Stmp2.f = Ssh.f * Ssh.f; + Stmp1.ui = (Stmp2.f >= gtiny_number) ? 0xffffffff : 0; + Ssh.ui = Stmp1.ui & Ssh.ui; + Sch.ui = Stmp1.ui & Stmp5.ui; + Stmp2.ui = ~Stmp1.ui & gone; + Sch.ui = Sch.ui | Stmp2.ui; + + Stmp1.f = Ssh.f * Ssh.f; + Stmp2.f = Sch.f * Sch.f; + Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp4.f = __frsqrt_rn(Stmp3.f); + + Ssh.f = Stmp4.f * Ssh.f; + Sch.f = Stmp4.f * Sch.f; + Stmp1.f = gfour_gamma_squared * Stmp1.f; + Stmp1.ui = (Stmp2.f <= Stmp1.f) ? 0xffffffff : 0; + + Stmp2.ui = gsine_pi_over_eight & Stmp1.ui; + Ssh.ui = ~Stmp1.ui & Ssh.ui; + Ssh.ui = Ssh.ui | Stmp2.ui; + Stmp2.ui = gcosine_pi_over_eight & Stmp1.ui; + Sch.ui = ~Stmp1.ui & Sch.ui; + Sch.ui = Sch.ui | Stmp2.ui; + + Stmp1.f = Ssh.f * Ssh.f; + Stmp2.f = Sch.f * Sch.f; + Sc.f = __fsub_rn(Stmp2.f, Stmp1.f); + Ss.f = Sch.f * Ssh.f; + Ss.f = __fadd_rn(Ss.f, Ss.f); + +#ifdef DEBUG_JACOBI_CONJUGATE + printf("GPU s %.20g, c %.20g, sh %.20g, ch %.20g\n", Ss.f, Sc.f, Ssh.f, + Sch.f); +#endif + + //########################################################### + // Perform the actual Givens conjugation + //########################################################### + + Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); + Ss22.f = Ss22.f * Stmp3.f; + Ss32.f = Ss32.f * Stmp3.f; + Ss21.f = Ss21.f * Stmp3.f; + Ss22.f = Ss22.f * Stmp3.f; + + Stmp1.f = Ss.f * Ss32.f; + Stmp2.f = Ss.f * Ss21.f; + Ss32.f = Sc.f * Ss32.f; + Ss21.f = Sc.f * Ss21.f; + Ss32.f = __fadd_rn(Stmp2.f, Ss32.f); + Ss21.f = __fsub_rn(Ss21.f, Stmp1.f); + + Stmp2.f = Ss.f * Ss.f; + Stmp1.f = Ss11.f * Stmp2.f; + Stmp3.f = Ss33.f * Stmp2.f; + Stmp4.f = Sc.f * Sc.f; + Ss33.f = Ss33.f * Stmp4.f; + Ss11.f = Ss11.f * Stmp4.f; + Ss33.f = __fadd_rn(Ss33.f, Stmp1.f); + Ss11.f = __fadd_rn(Ss11.f, Stmp3.f); + Stmp4.f = __fsub_rn(Stmp4.f, Stmp2.f); + Stmp2.f = __fadd_rn(Ss31.f, Ss31.f); + Ss31.f = Ss31.f * Stmp4.f; + Stmp4.f = Sc.f * Ss.f; + Stmp2.f = Stmp2.f * Stmp4.f; + Stmp5.f = Stmp5.f * Stmp4.f; + Ss33.f = __fadd_rn(Ss33.f, Stmp2.f); + Ss31.f = __fsub_rn(Ss31.f, Stmp5.f); + Ss11.f = __fsub_rn(Ss11.f, Stmp2.f); + +#ifdef DEBUG_JACOBI_CONJUGATE + printf("%.20g\n", Ss11.f); + printf("%.20g %.20g\n", Ss21.f, Ss22.f); + printf("%.20g %.20g %.20g\n", Ss31.f, Ss32.f, Ss33.f); +#endif + + //########################################################### + // Compute the cumulative rotation, in quaternion form + //########################################################### + + Stmp1.f = Ssh.f * Sqvvx.f; + Stmp2.f = Ssh.f * Sqvvy.f; + Stmp3.f = Ssh.f * Sqvvz.f; + Ssh.f = Ssh.f * Sqvs.f; + + Sqvs.f = Sch.f * Sqvs.f; + Sqvvx.f = Sch.f * Sqvvx.f; + Sqvvy.f = Sch.f * Sqvvy.f; + Sqvvz.f = Sch.f * Sqvvz.f; + + Sqvvy.f = __fadd_rn(Sqvvy.f, Ssh.f); + Sqvs.f = __fsub_rn(Sqvs.f, Stmp2.f); + Sqvvz.f = __fadd_rn(Sqvvz.f, Stmp1.f); + Sqvvx.f = __fsub_rn(Sqvvx.f, Stmp3.f); +#endif + } + + //########################################################### + // Normalize quaternion for matrix V + //########################################################### + + Stmp2.f = Sqvs.f * Sqvs.f; + Stmp1.f = Sqvvx.f * Sqvvx.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp1.f = Sqvvy.f * Sqvvy.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp1.f = Sqvvz.f * Sqvvz.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + + Stmp1.f = __frsqrt_rn(Stmp2.f); + Stmp4.f = Stmp1.f * 0.5f; + Stmp3.f = Stmp1.f * Stmp4.f; + Stmp3.f = Stmp1.f * Stmp3.f; + Stmp3.f = Stmp2.f * Stmp3.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); + + Sqvs.f = Sqvs.f * Stmp1.f; + Sqvvx.f = Sqvvx.f * Stmp1.f; + Sqvvy.f = Sqvvy.f * Stmp1.f; + Sqvvz.f = Sqvvz.f * Stmp1.f; + + //########################################################### + // Transform quaternion to matrix V + //########################################################### + + Stmp1.f = Sqvvx.f * Sqvvx.f; + Stmp2.f = Sqvvy.f * Sqvvy.f; + Stmp3.f = Sqvvz.f * Sqvvz.f; + Sv11.f = Sqvs.f * Sqvs.f; + Sv22.f = __fsub_rn(Sv11.f, Stmp1.f); + Sv33.f = __fsub_rn(Sv22.f, Stmp2.f); + Sv33.f = __fadd_rn(Sv33.f, Stmp3.f); + Sv22.f = __fadd_rn(Sv22.f, Stmp2.f); + Sv22.f = __fsub_rn(Sv22.f, Stmp3.f); + Sv11.f = __fadd_rn(Sv11.f, Stmp1.f); + Sv11.f = __fsub_rn(Sv11.f, Stmp2.f); + Sv11.f = __fsub_rn(Sv11.f, Stmp3.f); + Stmp1.f = __fadd_rn(Sqvvx.f, Sqvvx.f); + Stmp2.f = __fadd_rn(Sqvvy.f, Sqvvy.f); + Stmp3.f = __fadd_rn(Sqvvz.f, Sqvvz.f); + Sv32.f = Sqvs.f * Stmp1.f; + Sv13.f = Sqvs.f * Stmp2.f; + Sv21.f = Sqvs.f * Stmp3.f; + Stmp1.f = Sqvvy.f * Stmp1.f; + Stmp2.f = Sqvvz.f * Stmp2.f; + Stmp3.f = Sqvvx.f * Stmp3.f; + Sv12.f = __fsub_rn(Stmp1.f, Sv21.f); + Sv23.f = __fsub_rn(Stmp2.f, Sv32.f); + Sv31.f = __fsub_rn(Stmp3.f, Sv13.f); + Sv21.f = __fadd_rn(Stmp1.f, Sv21.f); + Sv32.f = __fadd_rn(Stmp2.f, Sv32.f); + Sv13.f = __fadd_rn(Stmp3.f, Sv13.f); + + ///########################################################### + // Multiply (from the right) with V + //########################################################### + + Stmp2.f = Sa12.f; + Stmp3.f = Sa13.f; + Sa12.f = Sv12.f * Sa11.f; + Sa13.f = Sv13.f * Sa11.f; + Sa11.f = Sv11.f * Sa11.f; + Stmp1.f = Sv21.f * Stmp2.f; + Sa11.f = __fadd_rn(Sa11.f, Stmp1.f); + Stmp1.f = Sv31.f * Stmp3.f; + Sa11.f = __fadd_rn(Sa11.f, Stmp1.f); + Stmp1.f = Sv22.f * Stmp2.f; + Sa12.f = __fadd_rn(Sa12.f, Stmp1.f); + Stmp1.f = Sv32.f * Stmp3.f; + Sa12.f = __fadd_rn(Sa12.f, Stmp1.f); + Stmp1.f = Sv23.f * Stmp2.f; + Sa13.f = __fadd_rn(Sa13.f, Stmp1.f); + Stmp1.f = Sv33.f * Stmp3.f; + Sa13.f = __fadd_rn(Sa13.f, Stmp1.f); + + Stmp2.f = Sa22.f; + Stmp3.f = Sa23.f; + Sa22.f = Sv12.f * Sa21.f; + Sa23.f = Sv13.f * Sa21.f; + Sa21.f = Sv11.f * Sa21.f; + Stmp1.f = Sv21.f * Stmp2.f; + Sa21.f = __fadd_rn(Sa21.f, Stmp1.f); + Stmp1.f = Sv31.f * Stmp3.f; + Sa21.f = __fadd_rn(Sa21.f, Stmp1.f); + Stmp1.f = Sv22.f * Stmp2.f; + Sa22.f = __fadd_rn(Sa22.f, Stmp1.f); + Stmp1.f = Sv32.f * Stmp3.f; + Sa22.f = __fadd_rn(Sa22.f, Stmp1.f); + Stmp1.f = Sv23.f * Stmp2.f; + Sa23.f = __fadd_rn(Sa23.f, Stmp1.f); + Stmp1.f = Sv33.f * Stmp3.f; + Sa23.f = __fadd_rn(Sa23.f, Stmp1.f); + + Stmp2.f = Sa32.f; + Stmp3.f = Sa33.f; + Sa32.f = Sv12.f * Sa31.f; + Sa33.f = Sv13.f * Sa31.f; + Sa31.f = Sv11.f * Sa31.f; + Stmp1.f = Sv21.f * Stmp2.f; + Sa31.f = __fadd_rn(Sa31.f, Stmp1.f); + Stmp1.f = Sv31.f * Stmp3.f; + Sa31.f = __fadd_rn(Sa31.f, Stmp1.f); + Stmp1.f = Sv22.f * Stmp2.f; + Sa32.f = __fadd_rn(Sa32.f, Stmp1.f); + Stmp1.f = Sv32.f * Stmp3.f; + Sa32.f = __fadd_rn(Sa32.f, Stmp1.f); + Stmp1.f = Sv23.f * Stmp2.f; + Sa33.f = __fadd_rn(Sa33.f, Stmp1.f); + Stmp1.f = Sv33.f * Stmp3.f; + Sa33.f = __fadd_rn(Sa33.f, Stmp1.f); + + //########################################################### + // Permute columns such that the singular values are sorted + //########################################################### + + Stmp1.f = Sa11.f * Sa11.f; + Stmp4.f = Sa21.f * Sa21.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + Stmp4.f = Sa31.f * Sa31.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + + Stmp2.f = Sa12.f * Sa12.f; + Stmp4.f = Sa22.f * Sa22.f; + Stmp2.f = __fadd_rn(Stmp2.f, Stmp4.f); + Stmp4.f = Sa32.f * Sa32.f; + Stmp2.f = __fadd_rn(Stmp2.f, Stmp4.f); + + Stmp3.f = Sa13.f * Sa13.f; + Stmp4.f = Sa23.f * Sa23.f; + Stmp3.f = __fadd_rn(Stmp3.f, Stmp4.f); + Stmp4.f = Sa33.f * Sa33.f; + Stmp3.f = __fadd_rn(Stmp3.f, Stmp4.f); + + // Swap columns 1-2 if necessary + + Stmp4.ui = (Stmp1.f < Stmp2.f) ? 0xffffffff : 0; + Stmp5.ui = Sa11.ui ^ Sa12.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa11.ui = Sa11.ui ^ Stmp5.ui; + Sa12.ui = Sa12.ui ^ Stmp5.ui; + + Stmp5.ui = Sa21.ui ^ Sa22.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa21.ui = Sa21.ui ^ Stmp5.ui; + Sa22.ui = Sa22.ui ^ Stmp5.ui; + + Stmp5.ui = Sa31.ui ^ Sa32.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa31.ui = Sa31.ui ^ Stmp5.ui; + Sa32.ui = Sa32.ui ^ Stmp5.ui; + + Stmp5.ui = Sv11.ui ^ Sv12.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv11.ui = Sv11.ui ^ Stmp5.ui; + Sv12.ui = Sv12.ui ^ Stmp5.ui; + + Stmp5.ui = Sv21.ui ^ Sv22.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv21.ui = Sv21.ui ^ Stmp5.ui; + Sv22.ui = Sv22.ui ^ Stmp5.ui; + + Stmp5.ui = Sv31.ui ^ Sv32.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv31.ui = Sv31.ui ^ Stmp5.ui; + Sv32.ui = Sv32.ui ^ Stmp5.ui; + + Stmp5.ui = Stmp1.ui ^ Stmp2.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Stmp1.ui = Stmp1.ui ^ Stmp5.ui; + Stmp2.ui = Stmp2.ui ^ Stmp5.ui; + + // If columns 1-2 have been swapped, negate 2nd column of A and V so that V is + // still a rotation + + Stmp5.f = -2.f; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Stmp4.f = 1.f; + Stmp4.f = __fadd_rn(Stmp4.f, Stmp5.f); + + Sa12.f = Sa12.f * Stmp4.f; + Sa22.f = Sa22.f * Stmp4.f; + Sa32.f = Sa32.f * Stmp4.f; + + Sv12.f = Sv12.f * Stmp4.f; + Sv22.f = Sv22.f * Stmp4.f; + Sv32.f = Sv32.f * Stmp4.f; + + // Swap columns 1-3 if necessary + + Stmp4.ui = (Stmp1.f < Stmp3.f) ? 0xffffffff : 0; + Stmp5.ui = Sa11.ui ^ Sa13.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa11.ui = Sa11.ui ^ Stmp5.ui; + Sa13.ui = Sa13.ui ^ Stmp5.ui; + + Stmp5.ui = Sa21.ui ^ Sa23.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa21.ui = Sa21.ui ^ Stmp5.ui; + Sa23.ui = Sa23.ui ^ Stmp5.ui; + + Stmp5.ui = Sa31.ui ^ Sa33.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa31.ui = Sa31.ui ^ Stmp5.ui; + Sa33.ui = Sa33.ui ^ Stmp5.ui; + + Stmp5.ui = Sv11.ui ^ Sv13.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv11.ui = Sv11.ui ^ Stmp5.ui; + Sv13.ui = Sv13.ui ^ Stmp5.ui; + + Stmp5.ui = Sv21.ui ^ Sv23.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv21.ui = Sv21.ui ^ Stmp5.ui; + Sv23.ui = Sv23.ui ^ Stmp5.ui; + + Stmp5.ui = Sv31.ui ^ Sv33.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv31.ui = Sv31.ui ^ Stmp5.ui; + Sv33.ui = Sv33.ui ^ Stmp5.ui; + + Stmp5.ui = Stmp1.ui ^ Stmp3.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Stmp1.ui = Stmp1.ui ^ Stmp5.ui; + Stmp3.ui = Stmp3.ui ^ Stmp5.ui; + + // If columns 1-3 have been swapped, negate 1st column of A and V so that V is + // still a rotation + + Stmp5.f = -2.f; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Stmp4.f = 1.f; + Stmp4.f = __fadd_rn(Stmp4.f, Stmp5.f); + + Sa11.f = Sa11.f * Stmp4.f; + Sa21.f = Sa21.f * Stmp4.f; + Sa31.f = Sa31.f * Stmp4.f; + + Sv11.f = Sv11.f * Stmp4.f; + Sv21.f = Sv21.f * Stmp4.f; + Sv31.f = Sv31.f * Stmp4.f; + + // Swap columns 2-3 if necessary + + Stmp4.ui = (Stmp2.f < Stmp3.f) ? 0xffffffff : 0; + Stmp5.ui = Sa12.ui ^ Sa13.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa12.ui = Sa12.ui ^ Stmp5.ui; + Sa13.ui = Sa13.ui ^ Stmp5.ui; + + Stmp5.ui = Sa22.ui ^ Sa23.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa22.ui = Sa22.ui ^ Stmp5.ui; + Sa23.ui = Sa23.ui ^ Stmp5.ui; + + Stmp5.ui = Sa32.ui ^ Sa33.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sa32.ui = Sa32.ui ^ Stmp5.ui; + Sa33.ui = Sa33.ui ^ Stmp5.ui; + + Stmp5.ui = Sv12.ui ^ Sv13.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv12.ui = Sv12.ui ^ Stmp5.ui; + Sv13.ui = Sv13.ui ^ Stmp5.ui; + + Stmp5.ui = Sv22.ui ^ Sv23.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv22.ui = Sv22.ui ^ Stmp5.ui; + Sv23.ui = Sv23.ui ^ Stmp5.ui; + + Stmp5.ui = Sv32.ui ^ Sv33.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Sv32.ui = Sv32.ui ^ Stmp5.ui; + Sv33.ui = Sv33.ui ^ Stmp5.ui; + + Stmp5.ui = Stmp2.ui ^ Stmp3.ui; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Stmp2.ui = Stmp2.ui ^ Stmp5.ui; + Stmp3.ui = Stmp3.ui ^ Stmp5.ui; + + // If columns 2-3 have been swapped, negate 3rd column of A and V so that V is + // still a rotation + + Stmp5.f = -2.f; + Stmp5.ui = Stmp5.ui & Stmp4.ui; + Stmp4.f = 1.f; + Stmp4.f = __fadd_rn(Stmp4.f, Stmp5.f); + + Sa13.f = Sa13.f * Stmp4.f; + Sa23.f = Sa23.f * Stmp4.f; + Sa33.f = Sa33.f * Stmp4.f; + + Sv13.f = Sv13.f * Stmp4.f; + Sv23.f = Sv23.f * Stmp4.f; + Sv33.f = Sv33.f * Stmp4.f; + + //########################################################### + // Construct QR factorization of A*V (=U*D) using Givens rotations + //########################################################### + + Su11.f = 1.f; + Su12.f = 0.f; + Su13.f = 0.f; + Su21.f = 0.f; + Su22.f = 1.f; + Su23.f = 0.f; + Su31.f = 0.f; + Su32.f = 0.f; + Su33.f = 1.f; + + Ssh.f = Sa21.f * Sa21.f; + Ssh.ui = (Ssh.f >= gsmall_number) ? 0xffffffff : 0; + Ssh.ui = Ssh.ui & Sa21.ui; + + Stmp5.f = 0.f; + Sch.f = __fsub_rn(Stmp5.f, Sa11.f); + Sch.f = max(Sch.f, Sa11.f); + Sch.f = max(Sch.f, gsmall_number); + Stmp5.ui = (Sa11.f >= Stmp5.f) ? 0xffffffff : 0; + + Stmp1.f = Sch.f * Sch.f; + Stmp2.f = Ssh.f * Ssh.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp1.f = __frsqrt_rn(Stmp2.f); + + Stmp4.f = Stmp1.f * 0.5f; + Stmp3.f = Stmp1.f * Stmp4.f; + Stmp3.f = Stmp1.f * Stmp3.f; + Stmp3.f = Stmp2.f * Stmp3.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); + Stmp1.f = Stmp1.f * Stmp2.f; + + Sch.f = __fadd_rn(Sch.f, Stmp1.f); + + Stmp1.ui = ~Stmp5.ui & Ssh.ui; + Stmp2.ui = ~Stmp5.ui & Sch.ui; + Sch.ui = Stmp5.ui & Sch.ui; + Ssh.ui = Stmp5.ui & Ssh.ui; + Sch.ui = Sch.ui | Stmp1.ui; + Ssh.ui = Ssh.ui | Stmp2.ui; + + Stmp1.f = Sch.f * Sch.f; + Stmp2.f = Ssh.f * Ssh.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp1.f = __frsqrt_rn(Stmp2.f); + + Stmp4.f = Stmp1.f * 0.5f; + Stmp3.f = Stmp1.f * Stmp4.f; + Stmp3.f = Stmp1.f * Stmp3.f; + Stmp3.f = Stmp2.f * Stmp3.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); + + Sch.f = Sch.f * Stmp1.f; + Ssh.f = Ssh.f * Stmp1.f; + + Sc.f = Sch.f * Sch.f; + Ss.f = Ssh.f * Ssh.f; + Sc.f = __fsub_rn(Sc.f, Ss.f); + Ss.f = Ssh.f * Sch.f; + Ss.f = __fadd_rn(Ss.f, Ss.f); + + //########################################################### + // Rotate matrix A + //########################################################### + + Stmp1.f = Ss.f * Sa11.f; + Stmp2.f = Ss.f * Sa21.f; + Sa11.f = Sc.f * Sa11.f; + Sa21.f = Sc.f * Sa21.f; + Sa11.f = __fadd_rn(Sa11.f, Stmp2.f); + Sa21.f = __fsub_rn(Sa21.f, Stmp1.f); + + Stmp1.f = Ss.f * Sa12.f; + Stmp2.f = Ss.f * Sa22.f; + Sa12.f = Sc.f * Sa12.f; + Sa22.f = Sc.f * Sa22.f; + Sa12.f = __fadd_rn(Sa12.f, Stmp2.f); + Sa22.f = __fsub_rn(Sa22.f, Stmp1.f); + + Stmp1.f = Ss.f * Sa13.f; + Stmp2.f = Ss.f * Sa23.f; + Sa13.f = Sc.f * Sa13.f; + Sa23.f = Sc.f * Sa23.f; + Sa13.f = __fadd_rn(Sa13.f, Stmp2.f); + Sa23.f = __fsub_rn(Sa23.f, Stmp1.f); + + //########################################################### + // Update matrix U + //########################################################### + + Stmp1.f = Ss.f * Su11.f; + Stmp2.f = Ss.f * Su12.f; + Su11.f = Sc.f * Su11.f; + Su12.f = Sc.f * Su12.f; + Su11.f = __fadd_rn(Su11.f, Stmp2.f); + Su12.f = __fsub_rn(Su12.f, Stmp1.f); + + Stmp1.f = Ss.f * Su21.f; + Stmp2.f = Ss.f * Su22.f; + Su21.f = Sc.f * Su21.f; + Su22.f = Sc.f * Su22.f; + Su21.f = __fadd_rn(Su21.f, Stmp2.f); + Su22.f = __fsub_rn(Su22.f, Stmp1.f); + + Stmp1.f = Ss.f * Su31.f; + Stmp2.f = Ss.f * Su32.f; + Su31.f = Sc.f * Su31.f; + Su32.f = Sc.f * Su32.f; + Su31.f = __fadd_rn(Su31.f, Stmp2.f); + Su32.f = __fsub_rn(Su32.f, Stmp1.f); + + // Second Givens rotation + + Ssh.f = Sa31.f * Sa31.f; + Ssh.ui = (Ssh.f >= gsmall_number) ? 0xffffffff : 0; + Ssh.ui = Ssh.ui & Sa31.ui; + + Stmp5.f = 0.f; + Sch.f = __fsub_rn(Stmp5.f, Sa11.f); + Sch.f = max(Sch.f, Sa11.f); + Sch.f = max(Sch.f, gsmall_number); + Stmp5.ui = (Sa11.f >= Stmp5.f) ? 0xffffffff : 0; + + Stmp1.f = Sch.f * Sch.f; + Stmp2.f = Ssh.f * Ssh.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp1.f = __frsqrt_rn(Stmp2.f); + + Stmp4.f = Stmp1.f * 0.5; + Stmp3.f = Stmp1.f * Stmp4.f; + Stmp3.f = Stmp1.f * Stmp3.f; + Stmp3.f = Stmp2.f * Stmp3.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); + Stmp1.f = Stmp1.f * Stmp2.f; + + Sch.f = __fadd_rn(Sch.f, Stmp1.f); + + Stmp1.ui = ~Stmp5.ui & Ssh.ui; + Stmp2.ui = ~Stmp5.ui & Sch.ui; + Sch.ui = Stmp5.ui & Sch.ui; + Ssh.ui = Stmp5.ui & Ssh.ui; + Sch.ui = Sch.ui | Stmp1.ui; + Ssh.ui = Ssh.ui | Stmp2.ui; + + Stmp1.f = Sch.f * Sch.f; + Stmp2.f = Ssh.f * Ssh.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp1.f = __frsqrt_rn(Stmp2.f); + + Stmp4.f = Stmp1.f * 0.5f; + Stmp3.f = Stmp1.f * Stmp4.f; + Stmp3.f = Stmp1.f * Stmp3.f; + Stmp3.f = Stmp2.f * Stmp3.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); + + Sch.f = Sch.f * Stmp1.f; + Ssh.f = Ssh.f * Stmp1.f; + + Sc.f = Sch.f * Sch.f; + Ss.f = Ssh.f * Ssh.f; + Sc.f = __fsub_rn(Sc.f, Ss.f); + Ss.f = Ssh.f * Sch.f; + Ss.f = __fadd_rn(Ss.f, Ss.f); + + //########################################################### + // Rotate matrix A + //########################################################### + + Stmp1.f = Ss.f * Sa11.f; + Stmp2.f = Ss.f * Sa31.f; + Sa11.f = Sc.f * Sa11.f; + Sa31.f = Sc.f * Sa31.f; + Sa11.f = __fadd_rn(Sa11.f, Stmp2.f); + Sa31.f = __fsub_rn(Sa31.f, Stmp1.f); + + Stmp1.f = Ss.f * Sa12.f; + Stmp2.f = Ss.f * Sa32.f; + Sa12.f = Sc.f * Sa12.f; + Sa32.f = Sc.f * Sa32.f; + Sa12.f = __fadd_rn(Sa12.f, Stmp2.f); + Sa32.f = __fsub_rn(Sa32.f, Stmp1.f); + + Stmp1.f = Ss.f * Sa13.f; + Stmp2.f = Ss.f * Sa33.f; + Sa13.f = Sc.f * Sa13.f; + Sa33.f = Sc.f * Sa33.f; + Sa13.f = __fadd_rn(Sa13.f, Stmp2.f); + Sa33.f = __fsub_rn(Sa33.f, Stmp1.f); + + //########################################################### + // Update matrix U + //########################################################### + + Stmp1.f = Ss.f * Su11.f; + Stmp2.f = Ss.f * Su13.f; + Su11.f = Sc.f * Su11.f; + Su13.f = Sc.f * Su13.f; + Su11.f = __fadd_rn(Su11.f, Stmp2.f); + Su13.f = __fsub_rn(Su13.f, Stmp1.f); + + Stmp1.f = Ss.f * Su21.f; + Stmp2.f = Ss.f * Su23.f; + Su21.f = Sc.f * Su21.f; + Su23.f = Sc.f * Su23.f; + Su21.f = __fadd_rn(Su21.f, Stmp2.f); + Su23.f = __fsub_rn(Su23.f, Stmp1.f); + + Stmp1.f = Ss.f * Su31.f; + Stmp2.f = Ss.f * Su33.f; + Su31.f = Sc.f * Su31.f; + Su33.f = Sc.f * Su33.f; + Su31.f = __fadd_rn(Su31.f, Stmp2.f); + Su33.f = __fsub_rn(Su33.f, Stmp1.f); + + // Third Givens Rotation + + Ssh.f = Sa32.f * Sa32.f; + Ssh.ui = (Ssh.f >= gsmall_number) ? 0xffffffff : 0; + Ssh.ui = Ssh.ui & Sa32.ui; + + Stmp5.f = 0.f; + Sch.f = __fsub_rn(Stmp5.f, Sa22.f); + Sch.f = max(Sch.f, Sa22.f); + Sch.f = max(Sch.f, gsmall_number); + Stmp5.ui = (Sa22.f >= Stmp5.f) ? 0xffffffff : 0; + + Stmp1.f = Sch.f * Sch.f; + Stmp2.f = Ssh.f * Ssh.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp1.f = __frsqrt_rn(Stmp2.f); + + Stmp4.f = Stmp1.f * 0.5f; + Stmp3.f = Stmp1.f * Stmp4.f; + Stmp3.f = Stmp1.f * Stmp3.f; + Stmp3.f = Stmp2.f * Stmp3.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); + Stmp1.f = Stmp1.f * Stmp2.f; + + Sch.f = __fadd_rn(Sch.f, Stmp1.f); + + Stmp1.ui = ~Stmp5.ui & Ssh.ui; + Stmp2.ui = ~Stmp5.ui & Sch.ui; + Sch.ui = Stmp5.ui & Sch.ui; + Ssh.ui = Stmp5.ui & Ssh.ui; + Sch.ui = Sch.ui | Stmp1.ui; + Ssh.ui = Ssh.ui | Stmp2.ui; + + Stmp1.f = Sch.f * Sch.f; + Stmp2.f = Ssh.f * Ssh.f; + Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); + Stmp1.f = __frsqrt_rn(Stmp2.f); + + Stmp4.f = Stmp1.f * 0.5f; + Stmp3.f = Stmp1.f * Stmp4.f; + Stmp3.f = Stmp1.f * Stmp3.f; + Stmp3.f = Stmp2.f * Stmp3.f; + Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); + Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); + + Sch.f = Sch.f * Stmp1.f; + Ssh.f = Ssh.f * Stmp1.f; + + Sc.f = Sch.f * Sch.f; + Ss.f = Ssh.f * Ssh.f; + Sc.f = __fsub_rn(Sc.f, Ss.f); + Ss.f = Ssh.f * Sch.f; + Ss.f = __fadd_rn(Ss.f, Ss.f); + + //########################################################### + // Rotate matrix A + //########################################################### + + Stmp1.f = Ss.f * Sa21.f; + Stmp2.f = Ss.f * Sa31.f; + Sa21.f = Sc.f * Sa21.f; + Sa31.f = Sc.f * Sa31.f; + Sa21.f = __fadd_rn(Sa21.f, Stmp2.f); + Sa31.f = __fsub_rn(Sa31.f, Stmp1.f); + + Stmp1.f = Ss.f * Sa22.f; + Stmp2.f = Ss.f * Sa32.f; + Sa22.f = Sc.f * Sa22.f; + Sa32.f = Sc.f * Sa32.f; + Sa22.f = __fadd_rn(Sa22.f, Stmp2.f); + Sa32.f = __fsub_rn(Sa32.f, Stmp1.f); + + Stmp1.f = Ss.f * Sa23.f; + Stmp2.f = Ss.f * Sa33.f; + Sa23.f = Sc.f * Sa23.f; + Sa33.f = Sc.f * Sa33.f; + Sa23.f = __fadd_rn(Sa23.f, Stmp2.f); + Sa33.f = __fsub_rn(Sa33.f, Stmp1.f); + + //########################################################### + // Update matrix U + //########################################################### + + Stmp1.f = Ss.f * Su12.f; + Stmp2.f = Ss.f * Su13.f; + Su12.f = Sc.f * Su12.f; + Su13.f = Sc.f * Su13.f; + Su12.f = __fadd_rn(Su12.f, Stmp2.f); + Su13.f = __fsub_rn(Su13.f, Stmp1.f); + + Stmp1.f = Ss.f * Su22.f; + Stmp2.f = Ss.f * Su23.f; + Su22.f = Sc.f * Su22.f; + Su23.f = Sc.f * Su23.f; + Su22.f = __fadd_rn(Su22.f, Stmp2.f); + Su23.f = __fsub_rn(Su23.f, Stmp1.f); + + Stmp1.f = Ss.f * Su32.f; + Stmp2.f = Ss.f * Su33.f; + Su32.f = Sc.f * Su32.f; + Su33.f = Sc.f * Su33.f; + Su32.f = __fadd_rn(Su32.f, Stmp2.f); + Su33.f = __fsub_rn(Su33.f, Stmp1.f); + + v11 = Sv11.f; + v12 = Sv12.f; + v13 = Sv13.f; + v21 = Sv21.f; + v22 = Sv22.f; + v23 = Sv23.f; + v31 = Sv31.f; + v32 = Sv32.f; + v33 = Sv33.f; + + u11 = Su11.f; + u12 = Su12.f; + u13 = Su13.f; + u21 = Su21.f; + u22 = Su22.f; + u23 = Su23.f; + u31 = Su31.f; + u32 = Su32.f; + u33 = Su33.f; + + s11 = Sa11.f; + // s12 = Sa12.f; s13 = Sa13.f; s21 = Sa21.f; + s22 = Sa22.f; + // s23 = Sa23.f; s31 = Sa31.f; s32 = Sa32.f; + s33 = Sa33.f; +} + + diff --git a/tensorflow_graphics/physics/test_tf_speed.py b/tensorflow_graphics/physics/test_tf_speed.py new file mode 100644 index 000000000..0c90410c3 --- /dev/null +++ b/tensorflow_graphics/physics/test_tf_speed.py @@ -0,0 +1,48 @@ +import os +import time +import unittest +import numpy as np +import tensorflow as tf +import tensorflow.contrib.slim as slim +import sys +from IPython import embed +import mpm3d +from simulation import Simulation + +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' + +sess = tf.compat.v1.Session() + +# Memory bandwidth of 1070 = 256 GB/s + +def main(): + #shape = (1024, 1024, 256) + shape = (1024, 256, 256) # size = 0.256 GB, walkthrough time = 1ms + ones = np.ones(shape=shape) + + a = tf.Variable(ones, dtype=tf.float32) + b = tf.Variable(ones, dtype=tf.float32) + + sess.run(tf.compat.v1.global_variables_initializer()) + # op = tf.reduce_max(tf.assign(a, a + b)) + # op = tf.assign(a, b) + op = tf.reduce_max(input_tensor=a + b) + #op = tf.assign(a, a) + + total_time = 0 + N = 1000 + for i in range(N): + t = time.time() + ret = sess.run(op) + t = time.time() - t + print(t) + total_time += t + print(total_time / N * 1000, 'ms') + +if __name__ == '__main__': + main() + + +# Reduce max a (1) : 1.61 ms +# Reduce max a + b (4): 5.57 ms +# a=b, fetch : 23 ms diff --git a/tensorflow_graphics/physics/tests_2d.py b/tensorflow_graphics/physics/tests_2d.py new file mode 100644 index 000000000..c023b1f60 --- /dev/null +++ b/tensorflow_graphics/physics/tests_2d.py @@ -0,0 +1,450 @@ +import unittest +import time +from simulation import Simulation +from time_integration import UpdatedSimulationState +import tensorflow as tf +import numpy as np +from vector_math import * + +sess = tf.compat.v1.Session() + + +class TestSimulator2D(unittest.TestCase): + + def assertAlmostEqualFloat32(self, a, b, relative_tol=1e-5, clip=1e-3): + if abs(a - b) > relative_tol * max(max(abs(a), abs(b)), clip): + self.assertEqual(a, b) + + def motion_test(self, + gravity=(0, -10), + initial_velocity=(0, 0), + batch_size=1, + dx=1.0, + num_steps=10): + # Zero gravity, 1-batched, translating block + num_particles = 100 + sim = Simulation( + sess=sess, + grid_res=(30, 30), + dx=dx, + num_particles=num_particles, + gravity=gravity, + batch_size=batch_size) + initial = sim.initial_state + next_state = UpdatedSimulationState(sim, initial) + position = np.zeros(shape=(batch_size, 2, num_particles)) + velocity = np.zeros(shape=(batch_size, 2, num_particles)) + for b in range(batch_size): + for i in range(10): + for j in range(10): + position[b, :, i * 10 + j] = ((i * 0.5 + 12.75) * dx, + (j * 0.5 + 12.75) * dx) + velocity[b, :, i * 10 + j] = initial_velocity + input_state = sim.get_initial_state(position=position, velocity=velocity) + + def center_of_mass(): + return np.mean(input_state[0][:, 0, :]), np.mean(input_state[0][:, 1, :]) + + x, y = 15.0 * dx, 15.0 * dx + vx, vy = initial_velocity + + self.assertAlmostEqual(center_of_mass()[0], x) + self.assertAlmostEqual(center_of_mass()[1], y) + for i in range(num_steps): + input_state = sess.run( + next_state.to_tuple(), + feed_dict={sim.initial_state_place_holder(): input_state}) + + # This will work if we use Verlet + # self.assertAlmostEqual(center_of_mass()[1], 15.0 - t * t * 0.5 * g) + + # Symplectic Euler version + vx += sim.dt * gravity[0] + x += sim.dt * vx + vy += sim.dt * gravity[1] + y += sim.dt * vy + self.assertAlmostEqualFloat32(center_of_mass()[0], x) + self.assertAlmostEqualFloat32(center_of_mass()[1], y) + + def test_translation_x(self): + self.motion_test(initial_velocity=(1, 0)) + + def test_translation_x_batched(self): + self.motion_test(initial_velocity=(1, 0), batch_size=1) + + def test_translation_y(self): + self.motion_test(initial_velocity=(0, 1)) + + def test_falling_translation(self): + self.motion_test(initial_velocity=(2, -1), gravity=(-4, 6)) + + def test_falling_translation_dx(self): + self.motion_test(initial_velocity=(2, -1), gravity=(-4, 6), dx=0.05) + self.motion_test( + initial_velocity=(0.02, -0.01), gravity=(-0.04, 0.06), dx=0.1) + self.motion_test(initial_velocity=(2, -1), gravity=(-4, 6), dx=10) + + def test_free_fall(self): + self.motion_test(gravity=(0, -10)) + + ''' + def test_recursive_placeholder(self): + a = tf.placeholder(dtype=tf_precision) + b = tf.placeholder(dtype=tf_precision) + self.assertAlmostEqual(sess.run(a + b, feed_dict={(a, b): [1, 2]}), 3) + # The following will not work + # print(sess.run(a + b, feed_dict={{'a':a, 'b':b}: {'a':1, 'b':2}})) + ''' + + def test_bouncing_cube(self): + #gravity = (0, -10) + gravity = (0, -10) + batch_size = 1 + dx = 0.03 + num_particles = 100 + sim = Simulation( + grid_res=(30, 30), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=1e-3, + E=100, + nu=0.45, + batch_size=batch_size, + sess=sess) + position = np.zeros(shape=(batch_size, 2, num_particles)) + initial_velocity = tf.compat.v1.placeholder(shape=(2,), dtype=tf_precision) + velocity = tf.broadcast_to( + initial_velocity[None, :, None], shape=(batch_size, 2, num_particles)) + + for b in range(batch_size): + for i in range(10): + for j in range(10): + position[b, :, i * 10 + j] = (((i + b * 3) * 0.5 + 12.75) * dx, + (j * 0.5 + 12.75) * dx) + input_state = sim.get_initial_state( + position=position, + velocity=velocity, + ) + + memo = sim.run( + num_steps=1000, + initial_state=input_state, + initial_feed_dict={initial_velocity: [1, -2]}) + sim.visualize(memo, interval=5) + + def test_bouncing_cube_benchmark(self): + gravity = (0, -10) + batch_size = 1 + dx = 0.2 + sample_density = 0.1 + N = 80 + num_particles = N * N + sim = Simulation( + grid_res=(100, 120), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=1 / 60 / 3, + batch_size=batch_size, + sess=sess) + position = np.zeros(shape=(batch_size, 2, num_particles)) + poissons_ratio = np.ones(shape=(batch_size, 1, num_particles)) * 0.3 + velocity_ph = tf.compat.v1.placeholder(shape=(2,), dtype=tf_precision) + for b in range(batch_size): + for i in range(N): + for j in range(N): + position[b, :, i * N + j] = (i * sample_density + 2, j * sample_density + 5 + 2 * dx) + + + loss = tf.reduce_mean(input_tensor=sim.initial_state.center_of_mass()[:, 0]) + + velocity_ph = tf.compat.v1.placeholder(shape=(2,), dtype=tf_precision) + velocity = velocity_ph[None, :, None] + tf.zeros( + shape=[batch_size, 2, num_particles], dtype=tf_precision) + input_state = sim.get_initial_state( + position=position, + velocity=velocity, + poissons_ratio=poissons_ratio, + youngs_modulus=1000) + + sim.set_initial_state(initial_state=input_state) + import time + memo = sim.run( + num_steps=100, + initial_state=input_state, + initial_feed_dict={velocity_ph: [0, 0]}) + sym = sim.gradients_sym(loss=loss, variables=[velocity_ph]) + while True: + t = time.time() + grad = sim.eval_gradients(sym, memo) + print((time.time() - t) / 100 * 3) + sim.visualize(memo, interval=5) + + def test_rotating_cube(self): + gravity = (0, 0) + batch_size = 1 + dx = 0.03 + num_particles = 100 + sim = Simulation( + grid_res=(30, 30), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=1e-4, + E=1, + sess=sess) + position = np.zeros(shape=(batch_size, 2, num_particles)) + velocity = np.zeros(shape=(batch_size, 2, num_particles)) + for b in range(batch_size): + for i in range(10): + for j in range(10): + position[b, :, i * 10 + j] = ((i * 0.5 + 12.75) * dx, + (j * 0.5 + 12.75) * dx) + velocity[b, :, i * 10 + j] = (1 * (j - 4.5), -1 * (i - 4.5)) + input_state = sim.get_initial_state(position=position, velocity=velocity) + + memo = sim.run(1000, input_state) + sim.visualize(memo, interval=5) + + def test_dilating_cube(self): + gravity = (0, 0) + batch_size = 1 + dx = 0.03 + num_particles = 100 + sim = Simulation( + grid_res=(30, 30), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=1e-3, + sess=sess, + E=0.01) + position = np.zeros(shape=(batch_size, 2, num_particles)) + velocity = np.zeros(shape=(batch_size, 2, num_particles)) + for b in range(batch_size): + for i in range(10): + for j in range(10): + position[b, :, i * 10 + j] = ((i * 0.5 + 12.75) * dx, + (j * 0.5 + 12.75) * dx) + velocity[b, :, i * 10 + j] = (0.5 * (i - 4.5), 0) + input_state = sim.get_initial_state(position=position, velocity=velocity) + + memo = sim.run(100, input_state) + sim.visualize(memo) + + def test_initial_gradients(self): + gravity = (0, 0) + batch_size = 1 + dx = 0.03 + N = 10 + num_particles = N * N + steps = 10 + dt = 1e-3 + sim = Simulation( + grid_res=(30, 30), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=dt, + sess=sess) + position = np.zeros(shape=(batch_size, 2, num_particles)) + youngs_modulus = np.zeros(shape=(batch_size, 1, num_particles)) + velocity_ph = tf.compat.v1.placeholder(shape=(2,), dtype=tf_precision) + velocity = velocity_ph[None, :, None] + tf.zeros( + shape=[batch_size, 2, num_particles], dtype=tf_precision) + for b in range(batch_size): + for i in range(N): + for j in range(N): + position[b, :, i * N + j] = ((i * 0.5 + 12.75) * dx, + (j * 0.5 + 12.75) * dx) + input_state = sim.get_initial_state( + position=position, velocity=velocity, youngs_modulus=youngs_modulus) + + loss = tf.reduce_mean(input_tensor=sim.initial_state.center_of_mass()[:, 0]) + memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: [3, 2]}) + + sim.set_initial_state(input_state) + sym = sim.gradients_sym(loss=loss, variables=[velocity_ph]) + grad = sim.eval_gradients(sym, memo) + self.assertAlmostEqualFloat32(grad[0][0], steps * dt) + self.assertAlmostEqualFloat32(grad[0][1], 0) + + def test_gradients(self): + gravity = (0, 0) + batch_size = 1 + dx = 0.03 + N = 2 + num_particles = N * N + steps = 30 + dt = 1e-2 + sim = Simulation( + grid_res=(30, 30), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=dt, + batch_size=batch_size, + E=1, + sess=sess) + + position_ph = tf.compat.v1.placeholder(shape=(batch_size, 2, num_particles), dtype=tf.float32) + velocity_ph = tf.compat.v1.placeholder(shape=(batch_size, 2, num_particles), dtype=tf.float32) + + position_val = np.zeros(shape=(batch_size, 2, num_particles)) + velocity_val = np.zeros(shape=(batch_size, 2, num_particles)) + + F_val = np.zeros(shape=(batch_size, 2, 2, num_particles)) + F_val[:, 0, 0, :] = 0.5 + F_val[:, 0, 1, :] = 0.5 + F_val[:, 1, 0, :] = -0.5 + F_val[:, 1, 1, :] = 1 + + for b in range(batch_size): + for i in range(N): + for j in range(N): + position_val[b, :, i * N + j] = (0.5 + i * dx * 0.3, 0.5 + j * dx * 0.2) + + input_state = sim.get_initial_state(position=position_ph, velocity=velocity_ph, deformation_gradient=F_val) + + # loss = sim.initial_state.velocity[:, 1, 0] + #loss = sim.initial_state.deformation_gradient[:, 1, 1, 0] + loss = sim.initial_state.affine[:, 1, 0, 0] + + sim.set_initial_state(input_state) + sym = sim.gradients_sym(loss=loss, variables=[position_ph, velocity_ph]) + + def forward(pos, vel): + memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: vel, position_ph: pos}, loss=loss) + return memo.loss[0] + + memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: velocity_val, position_ph: position_val}) + sim.visualize(memo) + grad = sim.eval_gradients(sym, memo) + delta = 1e-3 + dim = 2 + + for i in range(dim): + for j in range(num_particles): + position_val[0, i, j] += delta + v1 = forward(position_val, velocity_val) + + position_val[0, i, j] -= 2 * delta + v2 = forward(position_val, velocity_val) + + position_val[0, i, j] += delta + + g = (v1 - v2) / (2 * delta) + print(g, grad[0][0, i, j]) + self.assertAlmostEqualFloat32(g, grad[0][0, i, j], clip=1e-2, relative_tol=4e-2) + + for i in range(dim): + for j in range(num_particles): + velocity_val[0, i, j] += delta + v1 = forward(position_val, velocity_val) + + velocity_val[0, i, j] -= 2 * delta + v2 = forward(position_val, velocity_val) + + velocity_val[0, i, j] += delta + + g = (v1 - v2) / (2 * delta) + print(g, grad[1][0, i, j]) + self.assertAlmostEqualFloat32(g, grad[1][0, i, j], clip=1e-2, relative_tol=4e-2) + + + def test_bc_gradients(self): + batch_size = 1 + gravity = (0, -0) + N = 10 + num_particles = N * N + steps = 70 + dt = 1e-2 + res = (30, 30) + + goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') + velocity_delta = np.zeros([batch_size, 2, num_particles]) + + sim = Simulation( + dt=dt, + num_particles=num_particles, + grid_res=res, + gravity=gravity, + m_p=1, + V_p=1, + E = 5, + nu = 0.3, + sess=sess) + + position = np.zeros(shape=(batch_size, num_particles, 2)) + + velocity_ph = tf.compat.v1.placeholder(shape=(2,), dtype=tf.float32) + velocity = velocity_ph[None, :, None] + tf.zeros( + shape=[batch_size, 2, num_particles], dtype=tf.float32) + + part_size = N * N // 2 + velocity_part = tf.compat.v1.placeholder(shape = (2, ), dtype = tf.float32) + velocity_p = velocity_part[None, :, None] + tf.zeros(shape = (batch_size, 2, part_size), dtype = tf.float32) + velocity_2 = tf.concat([velocity_p, + tf.zeros(shape = (batch_size, 2, num_particles - part_size), dtype = tf.float32)], + axis = 2) + velocity = velocity + velocity_2 + + for b in range(batch_size): + for i in range(N): + for j in range(N): + position[b, i * N + j] = ((i * 0.5 + 5) / 30, + (j * 0.5 + 12.75) / 30) + velocity_delta[b, :, i * N + j] = (float(j) / N - 0.5, 0.5 - float(i) / N) + + velocity = velocity + velocity_delta + position = np.array(position).swapaxes(1, 2) + + sess.run(tf.compat.v1.global_variables_initializer()) + + initial_state = sim.get_initial_state( + position=position, velocity=velocity) + + final_position = sim.initial_state.center_of_mass() + loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) + sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) + sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) + + sim.set_initial_state(initial_state = initial_state) + + sym = sim.gradients_sym(loss, variables = [velocity_part]) + + goal_input = np.array([[0.7, 0.3]], dtype=np.float32) + + def forward(in_v, d_v): + memo = sim.run( + initial_state=initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: in_v, velocity_part : d_v}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + return memo.loss + + in_v = [0.2, -1] + d_v = [0, 0] + memo = sim.run( + initial_state=initial_state, + num_steps = steps, + initial_feed_dict = {velocity_ph: in_v, velocity_part : d_v}, + iteration_feed_dict = {goal: goal_input}, + loss = loss) + + grad = sim.eval_gradients(sym, memo) + sim.visualize(memo) + print(grad) + delta = 1e-4 + for i in range(2): + d_v[i] += delta + f1 = forward(in_v, d_v) + d_v[i] -= 2 * delta + f2 = forward(in_v, d_v) + d_v[i] += delta + print((f1 - f2) / (2 * delta)) + +if __name__ == '__main__': + unittest.main() diff --git a/tensorflow_graphics/physics/tests_3d.py b/tensorflow_graphics/physics/tests_3d.py new file mode 100644 index 000000000..8b82cbd01 --- /dev/null +++ b/tensorflow_graphics/physics/tests_3d.py @@ -0,0 +1,361 @@ +import os +import unittest +import numpy as np +import tensorflow as tf +import tensorflow.contrib.slim as slim +import sys +from IPython import embed +import mpm3d +from simulation import Simulation + +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' + +sess = tf.compat.v1.Session() + +class TestSimulator3D(unittest.TestCase): + + def assertAlmostEqualFloat32(self, a, b, relative_tol=1e-3, clip=1e-3): + if abs(a - b) > relative_tol * max(max(abs(a), abs(b)), clip): + self.assertEqual(a, b) + ''' + def test_g2p(self): + # print('\n==============\ntest_forward start') + x = tf.placeholder(tf.float32, shape=(1, 3, 1)) + v = tf.placeholder(tf.float32, shape=(1, 3, 1)) + C = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) + f = np.zeros([1, 3, 3, 1]).astype(np.float32) + f[0, 0, 0, 0] = 1 + f[0, 1, 1, 0] = 1 + f[0, 2, 2, 0] = 1 + F = tf.constant(f) + P, G = mpm3d.p2g(x, v, F, C) + + res = [100] * 3 + gravity = [0.] * 3 + dt = 1e-2 + G = mpm3d.normalize_grid(G, res, gravity, dt) + + step_p2g2p = mpm3d.g2p(x, v, F, C, P, G) + step_mpm = mpm3d.mpm(x, v, F, C, dt = 1e-2, gravity = gravity) + feed_dict = { + x: np.array([[[0.5], [0.5], [0.5]]]).astype(np.float32), + v: np.array([[[0.1], [0.1], [0.1]]]).astype(np.float32) + } + output_p2g2p = sess.run(step_p2g2p, feed_dict=feed_dict) + output_mpm = sess.run(step_mpm, feed_dict=feed_dict) + + for i in range(4): + diff = np.abs(output_p2g2p[i] - output_mpm[i]) + self.assertAlmostEqualFloat32(diff.max(), 0) + ''' + + + def test_p2g(self): + # print('\n==============\ntest_forward start') + x = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) + v = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) + C = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) + A = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) + f = np.zeros([1, 3, 3, 1]).astype(np.float32) + f[0, 0, 0, 0] = 1 + f[0, 1, 1, 0] = 1 + f[0, 2, 2, 0] = 1 + F = tf.constant(f) + + dt = 1e-2 + dx = 3e-2 + gravity = [0, -1, 0] + res = [100, 100, 100] + + P, G = mpm3d.p2g(position = x, velocity = v, affine = F, deformation = C, actuation = A, dt = dt, dx = dx, gravity = gravity, resolution = res) + feed_dict = { + x: np.array([[[0.5], [0.5], [0.5]]]).astype(np.float32), + v: np.array([[[0.1], [0.1], [0.1]]]).astype(np.float32) + } + res = [100] * 3 + gravity = [0.] * 3 + dt = 1e-2 + G_p2g = mpm3d.normalize_grid(G, res, gravity, dt) + mpm_output = mpm3d.mpm(position = x, velocity = v, affine = F, deformation = C, actuation = A, dt = dt, dx = dx, gravity = gravity, resolution = res) + G_mpm = mpm_output[5] + G1 = sess.run(G_p2g, feed_dict=feed_dict) + G2 = sess.run(G_mpm, feed_dict=feed_dict) + + for i in range(G1.shape[0]): + for j in range(G1.shape[1]): + for k in range(G1.shape[2]): + self.assertAlmostEqualFloat32(G1[i, j, k], G2[i, j, k]) + + def test_forward(self): + # print('\n==============\ntest_forward start') + x = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) + v = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) + C = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) + A = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) + f = np.zeros([1, 3, 3, 1]).astype(np.float32) + f[0, 0, 0, 0] = 1 + f[0, 1, 1, 0] = 1 + f[0, 2, 2, 0] = 1 + F = tf.constant(f) + grid_bc = tf.constant(np.zeros([1, 1000, 4]).astype(np.float32)) + dt = 1e-2 + dx = 1e-1 + gravity = [0, -1, 0] + res = [10, 10, 10] + xx, vv, FF, CC, PP, grid, grid_star = mpm3d.mpm(position = x, velocity = v, affine = F, deformation = C, actuation = A, grid_bc = grid_bc, dt = dt, dx = dx, gravity = gravity, resolution = res) + # print(grid.shape) + step = mpm3d.mpm(position = xx, velocity = vv, affine = FF, deformation = CC, actuation = A, grid_bc = grid_bc, dt = dt, dx = dx, gravity = gravity, resolution = res) + feed_dict = { + x: np.array([[[0.5], [0.5], [0.5]]]).astype(np.float32), + v: np.array([[[0.1], [0.1], [0.1]]]).astype(np.float32) + } + o = sess.run(step, feed_dict=feed_dict) + xout, vout, cout, fout, pout, gout, gsout = o + print(o) + print(gout.shape) + + def test_backward(self): + # print('\n==============\ntest_backward start') + x = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) + v = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) + C = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) + A = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) + f = np.zeros([1, 3, 3, 1]).astype(np.float32) + f[0, 0, 0, 0] = 1 + f[0, 1, 1, 0] = 1 + f[0, 2, 2, 0] = 1 + F = tf.constant(f) + gravity = [0, -1, 0] + xx, vv, FF, CC, PP, grid = mpm3d.mpm(x, v, F, C, A, dt = 1e-3, gravity = gravity) + feed_dict = { + x: np.array([[[0.5], [0.5], [0.5]]]).astype(np.float32), + v: np.array([[[0.1], [0.1], [0.1]]]).astype(np.float32) + } + dimsum = tf.reduce_sum(input_tensor=xx) + dydx = tf.gradients(ys=dimsum, xs=x) + dydv = tf.gradients(ys=dimsum, xs=v) + print('dydx', dydx) + print('dydv', dydv) + + y0 = sess.run(dydx, feed_dict=feed_dict) + y1 = sess.run(dydv, feed_dict=feed_dict) + print(y0) + print(y1) + + def test_bouncing_cube(self): + gravity = (0, -10, 0) + batch_size = 1 + dx = 0.03 + N = 10 + num_particles = N ** 3 + steps = 1 + dt = 1e-2 + sim = Simulation( + grid_res=(30, 30, 30), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=dt, + batch_size=batch_size, + sess=sess) + position = np.zeros(shape=(batch_size, 3, num_particles)) + initial_velocity = tf.compat.v1.placeholder(shape=(3,), dtype=tf.float32) + velocity = initial_velocity[None, :, None] + tf.zeros(shape=(batch_size, 3, num_particles)) + for b in range(batch_size): + for i in range(N): + for j in range(N): + for k in range(N): + position[b, :, i * N * N + j * N + k] =\ + (((i + b * 3) * 0.5 + 12.75) * dx, (j * 0.5 + 12.75) * dx, + (k * 0.5 + 12.75) * dx) + input_state = sim.get_initial_state( + position=position, + velocity=velocity) + + loss = tf.reduce_mean(input_tensor=sim.initial_state.center_of_mass()[:, 0]) + memo = sim.run(steps, input_state, initial_feed_dict={initial_velocity: [1, 0, 2]}) + + sim.set_initial_state(input_state) + sym = sim.gradients_sym(loss=loss, variables=[initial_velocity]) + + sim.visualize(memo) + grad = sim.eval_gradients(sym, memo) + print(grad) + self.assertAlmostEqualFloat32(grad[0][0], steps * dt) + self.assertAlmostEqualFloat32(grad[0][1], 0) + self.assertAlmostEqualFloat32(grad[0][2], 0) + + def test_gradients(self): + gravity = (0, 0, 0) + batch_size = 1 + dx = 0.03 + N = 2 + num_particles = N ** 3 + steps = 3 + dt = 1e-2 + sim = Simulation( + grid_res=(20, 20, 20), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=dt, + batch_size=batch_size, + sess=sess) + + position_ph = tf.compat.v1.placeholder(shape=(batch_size, 3, num_particles), dtype=tf.float32) + velocity_ph = tf.compat.v1.placeholder(shape=(batch_size, 3, num_particles), dtype=tf.float32) + + position_val = np.zeros(shape=(batch_size, 3, num_particles)) + velocity_val = np.zeros(shape=(batch_size, 3, num_particles)) + + F_val = np.zeros(shape=(batch_size, 3, 3, num_particles)) + ''' + F_val[:, 0, 0, :] = 0.8 + F_val[:, 0, 1, :] = 0.2 + F_val[:, 1, 1, :] = 1 + F_val[:, 1, 0, :] = 0.3 + F_val[:, 2, 2, :] = 0.8 + F_val[:, 2, 1, :] = 0.1 + F_val[:, 1, 2, :] = 0.3 + ''' + F_val[:, 0, 0, :] = 1 + F_val[:, 1, 1, :] = 1 + F_val[:, 2, 2, :] = 1 + + for b in range(batch_size): + for i in range(N): + for j in range(N): + for k in range(N): + position_val[b, :, i * N * N + j * N + k] = \ + (((i + b * 3) * 0.5 + 12.75) * dx, (j * 0.5 + 12.75) * dx, + (k * 0.5 + 12.75) * dx) + + input_state = sim.get_initial_state(position=position_ph, velocity=velocity_ph, deformation_gradient=F_val) + + loss = sim.initial_state.position[:, 0, 0] + + sim.set_initial_state(input_state) + sym = sim.gradients_sym(loss=loss, variables=[position_ph, velocity_ph]) + + def forward(pos, vel): + memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: vel, position_ph: pos}, loss=loss) + return memo.loss[0] + + #sim.visualize(memo) + memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: velocity_val, position_ph: position_val}) + grad = sim.eval_gradients(sym, memo) + delta = 1e-2 + dim = 3 + + for i in range(dim): + for j in range(num_particles): + position_val[0, i, j] += delta + v1 = forward(position_val, velocity_val) + + position_val[0, i, j] -= 2 * delta + v2 = forward(position_val, velocity_val) + + position_val[0, i, j] += delta + + g = (v1 - v2) / (2 * delta) + print(g, grad[0][0, i, j]) + self.assertAlmostEqualFloat32(g, grad[0][0, i, j], clip=1e-2, relative_tol=5e-2) + + for i in range(dim): + for j in range(num_particles): + velocity_val[0, i, j] += delta + v1 = forward(position_val, velocity_val) + + velocity_val[0, i, j] -= 2 * delta + v2 = forward(position_val, velocity_val) + + velocity_val[0, i, j] += delta + + g = (v1 - v2) / (2 * delta) + print(g, grad[1][0, i, j]) + self.assertAlmostEqualFloat32(g, grad[1][0, i, j], clip=1e-2, relative_tol=5e-2) + + def test_gradients2(self): + gravity = (0, -0, 0) + batch_size = 1 + dx = 0.03 + N = 2 + num_particles = N + steps = 4 + dt = 1e-2 + sim = Simulation( + grid_res=(30, 30, 30), + dx=dx, + num_particles=num_particles, + gravity=gravity, + dt=dt, + batch_size=batch_size, + E=0.01, + sess=sess) + + position_ph = tf.compat.v1.placeholder(shape=(batch_size, 3, num_particles), dtype=tf.float32) + velocity_ph = tf.compat.v1.placeholder(shape=(batch_size, 3, num_particles), dtype=tf.float32) + + position_val = np.zeros(shape=(batch_size, 3, num_particles)) + velocity_val = np.zeros(shape=(batch_size, 3, num_particles)) + + F_val = np.zeros(shape=(batch_size, 3, 3, num_particles)) + F_val[:, 0, 0, :] = 0.5 + F_val[:, 0, 1, :] = 0 + F_val[:, 1, 1, :] = 1 + F_val[:, 1, 0, :] = 0 + F_val[:, 2, 2, :] = 1 + F_val[:, 2, 1, :] = 0 + F_val[:, 1, 2, :] = 0 + + for b in range(batch_size): + for i in range(N): + position_val[b, :, i] = (0.5, 0.5, 0.5) + + input_state = sim.get_initial_state(position=position_ph, velocity=velocity_ph, deformation_gradient=F_val) + + loss = sim.initial_state.position[:, 0, 0] + + sim.set_initial_state(input_state) + sym = sim.gradients_sym(loss=loss, variables=[position_ph, velocity_ph]) + + def forward(pos, vel): + memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: vel, position_ph: pos}, loss=loss) + return memo.loss[0] + + #sim.visualize(memo) + memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: velocity_val, position_ph: position_val}) + grad = sim.eval_gradients(sym, memo) + delta = 1e-3 + dim = 3 + + for i in range(dim): + for j in range(num_particles): + position_val[0, i, j] += delta + v1 = forward(position_val, velocity_val) + + position_val[0, i, j] -= 2 * delta + v2 = forward(position_val, velocity_val) + + position_val[0, i, j] += delta + + g = (v1 - v2) / (2 * delta) + print(g, grad[0][0, i, j]) + self.assertAlmostEqualFloat32(g, grad[0][0, i, j], clip=1e-2, relative_tol=4e-2) + + for i in range(dim): + for j in range(num_particles): + velocity_val[0, i, j] += delta + v1 = forward(position_val, velocity_val) + + velocity_val[0, i, j] -= 2 * delta + v2 = forward(position_val, velocity_val) + + velocity_val[0, i, j] += delta + + g = (v1 - v2) / (2 * delta) + print(g, grad[1][0, i, j]) + self.assertAlmostEqualFloat32(g, grad[1][0, i, j], clip=1e-2, relative_tol=4e-2) + +if __name__ == '__main__': + unittest.main() diff --git a/tensorflow_graphics/physics/time_integration.py b/tensorflow_graphics/physics/time_integration.py new file mode 100644 index 000000000..252a689dd --- /dev/null +++ b/tensorflow_graphics/physics/time_integration.py @@ -0,0 +1,513 @@ +import numpy as np +import tensorflow as tf +from vector_math import * +from typing import List, Callable + + +use_cuda = False +use_apic = True + +if use_float64: + use_cuda = False + +try: + import mpm3d + cuda_imported = True +except: + cuda_imported = False +if not cuda_imported: + print("***Warning: NOT using CUDA") + +kernel_size = 3 + +class SimulationState: + """An object which represents the state of a single step of the simulation. Used both to specify an initial state for running simulation and also for defining a loss on the final state. ChainQueen handles most of the work of taking tensorflow tensors from SimulationStates and manually chaining together gradients from kernel calls for efficiency reasons. Most of this work happens behind the scenes from the users. SimulationState provides a number of useful members that can be helpful for defining a tensor-based loss function. In general, most members should be thought of as being tensors that are functions of the initial state of a simulation. SimulationStates have two subclasses, class:`InitialSimulationState` for the initial state only (which initializes a lot of the problem) and class:`UpdatedSimulationState` which denotes any other simulation state. Each SimulationState keeps track of the sim itself. + + :param sim: The simulation that will be used to populate these states. + :type sim: class:`Simulation` + :param position: batch_size x dim x num_particles, the position of the particles in the system. + :type position: np.array or tf.tensor + :param velocity: batch_size x dim x num_particles, the velocity of the particles in the system. + :type velocity: np.array or tf.tensor + :param deformation_gradient: batch_size x dim x dim num_particles, the deformation gradient of the particles in the system. + :type deformation_gradient: np.array or tf.tensor + :param affine: batch_size x dim x dim num_particles, the affine matrix of the particles in the system. + :type affine: np.array or tf.tensor + :param particle_mass: batch_size x 1 x num_particles, the mass of every particle. + :type particle_mass: np.array or tf.tensor + :param particle_volume: batch_size x 1 x num_particles, the volume of each particle. + :type particle_volume: np.array or tf.tensor + :param youngs_modulus: batch_size x 1 x num_particles, the youngs modulus of each particle. + :type youngs_modulus: np.array or tf.tensor + :param poissons_ratio: batch_size x 1 x num_particles, the poissons ratio of each particle. + :type poissons_ratio: np.array or tf.tensor + :param step_count: The step number this simulation state corresponds to. Can be useful for indexing into actuation sequences of an open-loop controller. + :type step_count: int + :param acceleration: batch_size x dim x num_particles, the acceleration of the particles in the system. + :type acceleration: np.array or tf.tensor + :param grid_mass: batch_size x res x 1, the rasterized mass of each grid cell + :type grid_mas: np.array or tf.tensor + :param grid_velocity: batch_size x res x dim, the rasterized gelocity of each grid cell + :type grid_velocity: np.array or tf.tensor + :param strain: batch_size x dim x dim x num_particles, the green strain matrix for each particle + :type strain: np.array or tf.tensor + :param d_strain_dt: batch_size x dim x dim x num_particles, the finite difference strain per time + :type d_strain_dt: np.array or tf.tensor + :param pressure: batch_size x dim x dim x num_particles, the pressure matrix for each particle (piola stress plus actuation contributions) + :type pressure: np.array or tf.tensor + :param d_pressure_dt: batch_size x dim x dim x num_particles, the finite difference pressure per time + :type d_pressure_dt: np.array or tf.tensor + """ + + def __init__(self, sim : 'Simulation') -> None: + self.sim = sim + self.dim = sim.dim + dim = self.dim + self.grid_shape = (self.sim.batch_size,) + self.sim.grid_res + (1,) + self.affine = tf.zeros(shape=(self.sim.batch_size, dim, dim, sim.num_particles), dtype=tf_precision) + self.acceleration = tf.zeros(shape=(self.sim.batch_size, dim, sim.num_particles), dtype=tf_precision) + self.position = None + self.particle_mass = None + self.particle_volume = None + self.youngs_modulus = None + self.poissons_ratio = None + self.velocity = None + self.deformation_gradient = None + self.controller_states = None + self.grid_mass = None + self.grid_velocity = None + self.step_count = None + self.kernels = None + self.debug = None + self.actuation = None + self.F = None + self.use_cuda = sim.use_cuda + self.use_neohookean = sim.use_neohookean + self.incompressibility_exp = sim.incompressibility_exp + if not cuda_imported: + self.use_cuda = False + if not self.use_cuda: + print("***Warning: NOT using CUDA") + + def center_of_mass(self, left = None, right = None): + return tf.reduce_sum(input_tensor=self.position[:, :, left:right] * self.particle_mass[:, :, left:right], axis=2) *\ + (1 / tf.reduce_sum(input_tensor=self.particle_mass[:, :, left:right], axis=2)) + + def get_state_names(self) -> List[str]: + """ + An ordered list of the returned data of a simulation class:`Memo` at each time step. Here we document what each of these fields are. + + :return: A list of strings of all the field names that are in the memo, in order. + :rtype: list + + """ + return [ + 'position', 'velocity', 'deformation_gradient', 'affine', + 'particle_mass', 'particle_volume', 'youngs_modulus', 'poissons_ratio', 'step_count', 'acceleration', + 'grid_mass', 'grid_velocity', + ] + + def get_state_component_id(self, name : str) -> int: + """gets the index of a field name in the :class:`Memo` + + :param name: The field name + :type name: str + :return: The index of the name in the Memo. + :rtype: int + """ + assert name in self.get_state_names() + return self.get_state_names().index(name) + + def get_evaluated(self): + # # batch, particle, dimension + # assert len(self.position.shape) == 3 + # assert len(self.position.shape) == 3 + # # batch, particle, matrix dimension1, matrix dimension2 + # assert len(self.deformation_gradient.shape) == 4 + # # batch, x, y, dimension + # assert len(self.grid_mass.shape) == 4 + # assert len(self.grid_velocity.shape) == 4 + + ret = { + 'affine': self.affine, + 'position': self.position, + 'velocity': self.velocity, + 'deformation_gradient': self.deformation_gradient, + 'acceleration': self.acceleration, + 'controller_states': self.controller_states, + 'grid_mass': self.grid_mass, + 'grid_velocity': self.grid_velocity, + 'kernels': self.kernels, + 'particle_mass': self.particle_mass, + 'particle_volume': self.particle_volume, + 'youngs_modulus': self.youngs_modulus, + 'poissons_ratio': self.poissons_ratio, + 'step_count': self.step_count, + 'debug': self.debug, + } + ret_filtered = {} + for k, v in ret.items(): + if v is not None: + ret_filtered[k] = v + return ret_filtered + + def to_tuple(self): + evaluated = self.get_evaluated() + return tuple([evaluated[k] for k in self.get_state_names()]) + + def __getitem__(self, item): + return self.get_evaluated()[item] + + def compute_kernels(self, positions): + # (x, y, dim) + grid_node_coord = [[(i, j) for j in range(3)] for i in range(3)] + grid_node_coord = np.array(grid_node_coord, dtype = np_precision)[None, :, :, :, None] + frac = (positions - tf.floor(positions - 0.5))[:, None, None, :, :] + assert frac.shape[3] == self.dim + #print('frac', frac.shape) + #print('grid_node_coord', grid_node_coord.shape) + + # (batch, x, y, dim, p) - (?, x, y, dim, ?) + x = tf.abs(frac - grid_node_coord) + #print('x', x.shape) + + mask = tf.cast(x < 0.5, tf_precision) + y = mask * (0.75 - x * x) + (1 - mask) * (0.5 * (1.5 - x)**2) + #print('y', y.shape) + y = tf.reduce_prod(input_tensor=y, axis=3, keepdims=True) + return y + + +class InitialSimulationState(SimulationState): + """The subclass of :class:`SimulationState` that's used to represent the InitialState + + :param controller: a function mapping a class:`SimulationState` to a control actuation pressure matrix of batch_size x dim x dim x num_particles, applied at each state + :type controller: function + :param F_controller: a function mapping a class:`SimulationState` to a control force vector of batch_size x dim x num_particles, applied at each state + :type F_controller: function + """ + + def __init__(self, sim, controller=None, F_controller = None): + super().__init__(sim) + dim = self.dim + self.t = 0 + num_particles = sim.num_particles + self.position = tf.compat.v1.placeholder( + tf_precision, [self.sim.batch_size, dim, num_particles], name='position') + + self.velocity = tf.compat.v1.placeholder( + tf_precision, [self.sim.batch_size, dim, num_particles], name='velocity') + self.deformation_gradient = tf.compat.v1.placeholder( + tf_precision, [self.sim.batch_size, dim, dim, num_particles], name='dg') + self.particle_mass = tf.compat.v1.placeholder( + tf_precision, [self.sim.batch_size, 1, num_particles], + name='particle_mass') + self.particle_volume = tf.compat.v1.placeholder( + tf_precision, [self.sim.batch_size, 1, num_particles], + name='particle_volume') + self.youngs_modulus = tf.compat.v1.placeholder( + tf_precision, [self.sim.batch_size, 1, num_particles], + name='youngs_modulus') + self.poissons_ratio = tf.compat.v1.placeholder( + tf_precision, [self.sim.batch_size, 1, num_particles], + name='poissons_ratio') + self.grid_mass = tf.zeros(shape=self.grid_shape, dtype=tf_precision) + self.grid_velocity = tf.zeros(shape=(*self.grid_shape[0:-1], dim), dtype=tf_precision) #TODO: this is a weird line + if self.dim == 2: + self.kernels = tf.zeros(shape=(self.sim.batch_size, + kernel_size, kernel_size, 1, num_particles), dtype=tf_precision) + self.step_count = tf.zeros(shape=(), dtype=np.int32) + + self.controller = controller + self.F_controller = F_controller + if controller is not None: + self.actuation, self.debug = controller(self) + self.actuation = matmatmul(self.deformation_gradient, matmatmul(self.actuation, transpose(self.deformation_gradient))) + + +class UpdatedSimulationState(SimulationState): + """The subclass of :class:`SimulationState` that's used to represent the state after the first time step. This class also contains a CPU, pure TF implementation of the ChainQueen simulator. + + :param controller: a function mapping a class:`SimulationState` to a control actuation pressure matrix of batch_size x dim x dim x num_particles, applied at each state + :type controller: function + :param F_controller: a function mapping a class:`SimulationState` to a control force vector of batch_size x dim x num_particles, applied at each state + :type F_controller: function + """ + + def cuda(self, sim, previous_state, controller, F_controller): + """Calls the GPU simulator and handles substepping, and computes any other useful values to be returned in the memo. Chains together steps. +> +> :param sim: The simulator object being used. +> :type sim: :class:`Simulation` +> :param previous_state: The state to be updated +> :type previous_state: :class:`SimulationState` +> :param controller: The pressure controller being used. +> :type controller: function +> :param F_controller: The force controller being used. +> :type F_controller: function +> """ + + + self.position = previous_state.position + self.velocity = previous_state.velocity + self.deformation_gradient = previous_state.deformation_gradient + self.affine = previous_state.affine + self.particle_mass = tf.identity(previous_state.particle_mass) + self.particle_volume = tf.identity(previous_state.particle_volume) + self.youngs_modulus = tf.identity(previous_state.youngs_modulus) + self.acceleration = previous_state.acceleration + self.poissons_ratio = tf.identity(previous_state.poissons_ratio) + self.step_count = previous_state.step_count + 1 + + self.grid_mass = tf.identity(previous_state.grid_mass) + self.grid_velocity = tf.identity(previous_state.grid_velocity) + + #for i in range(self.dim): + # assert self.sim.gravity[i] == 0, "Non-zero gravity not supported" + if controller: + self.controller = controller + self.actuation, self.debug = controller(self) + else: + self.controller = None + self.actuation = np.zeros(shape=(self.sim.batch_size, self.dim, self.dim, self.sim.num_particles)) + + self.t = previous_state.t + self.sim.dt + + num_cells = 1 + for i in range(self.dim): + num_cells *= sim.grid_res[i] + bc_normal = self.sim.bc_normal / (np.linalg.norm(self.sim.bc_normal, axis=self.dim + 1, keepdims=True) + 1e-10) + bc = np.concatenate([bc_normal, self.sim.bc_parameter], axis=self.dim + 1).reshape(1, num_cells, self.dim + 1) + bc = tf.constant(bc, dtype=tf_precision) + + if self.use_neohookean: + neohookean_flag = 1 + else: + neohookean_flag = 0 + + self.position, self.velocity, self.deformation_gradient, self.affine, pressure, grid, grid_star = \ + mpm3d.mpm(position=self.position, velocity=self.velocity, + deformation=self.deformation_gradient, affine=self.affine, dx=sim.dx, + dt=sim.dt/sim.substeps, gravity=sim.gravity, resolution=sim.grid_res, + youngsmodulus=self.youngs_modulus[:, 0], nu=self.poissons_ratio[:, 0], mass=self.particle_mass[:, 0], + V_p=sim.V_p, actuation=self.actuation, grid_bc=bc, + material_model=neohookean_flag, incompressibility_exp=self.incompressibility_exp) + + + grid_reshaped = tf.reshape(grid, shape=(1, *sim.grid_res, self.dim + 1)) + if self.sim.dim == 2: + self.grid_velocity = grid_reshaped[:, :, :, :-1] + self.grid_mass = grid_reshaped[:, :, :, -1:] + else: + assert self.sim.dim == 3 + self.grid_velocity = grid_reshaped[:, :, :, :, :-1] + self.grid_mass = grid_reshaped[:, :, :, :, -1:] + + + if sim.damping != 0: + self.velocity *= np.exp(-sim.damping * sim.dt) + + if F_controller: + self.F = F_controller(self) + self.velocity += self.F * sim.dt + + self.acceleration = (self.velocity - previous_state.velocity) * (1.0 / self.sim.dt) + + + def __init__(self, sim, previous_state, controller=None, F_controller = None): + """Contains an implementation for pure CPU, pure TF simulation""" + super().__init__(sim) + dim = self.dim + if dim == 3 or self.use_cuda: + # print("Running with cuda") + self.cuda(sim, previous_state, controller=controller, F_controller = F_controller) + return + + if F_controller is not None: + raise Exception('F_controller is not defined with out cuda') + + + self.controller = controller + # 2D time integration + self.particle_mass = tf.identity(previous_state.particle_mass) + self.particle_volume = tf.identity(previous_state.particle_volume) + self.youngs_modulus = tf.identity(previous_state.youngs_modulus) + self.poissons_ratio = tf.identity(previous_state.poissons_ratio) + self.step_count = previous_state.step_count + 1 + + self.actuation = previous_state.actuation + + self.t = previous_state.t + self.sim.dt + self.grid_velocity = tf.zeros( + shape=(self.sim.batch_size, self.sim.grid_res[0], self.sim.grid_res[1], + dim), dtype = tf_precision) + + position = previous_state.position + + minimum_positions = np.zeros(shape=previous_state.position.shape, dtype=np_precision) + minimum_positions[:, :, :] = self.sim.dx * 2 + maximum_positions = np.zeros(shape=previous_state.position.shape, dtype=np_precision) + for i in range(dim): + maximum_positions[:, i, :] = (self.sim.grid_res[i] - 2) * self.sim.dx + # Safe guard + position = tf.clip_by_value(position, minimum_positions, maximum_positions) + + # Rasterize mass and velocity + base_indices = tf.cast( + tf.floor(position * sim.inv_dx - 0.5), tf.int32) + base_indices = tf.transpose(a=base_indices, perm=[0, 2, 1]) + batch_size = self.sim.batch_size + num_particles = sim.num_particles + + # Add the batch size indices + base_indices = tf.concat( + [ + tf.zeros(shape=(batch_size, num_particles, 1), dtype=tf.int32), + base_indices, + ], + axis=2) + + # print('base indices', base_indices.shape) + self.grid_mass = tf.zeros(dtype = tf_precision, shape=(batch_size, self.sim.grid_res[0], + self.sim.grid_res[1], 1)) + + # Compute stress tensor (Kirchhoff stress instead of First Piola-Kirchhoff stress) + self.deformation_gradient = previous_state.deformation_gradient + + # Lame parameters + mu = self.youngs_modulus / (2 * (1 + self.poissons_ratio)) + lam = self.youngs_modulus * self.poissons_ratio / (( + 1 + self.poissons_ratio) * (1 - 2 * self.poissons_ratio)) + # (b, 1, p) -> (b, 1, 1, p) + mu = mu[:, :, None, :] + lam = lam[:, :, None, :] + # Corotated elasticity + # P(F) = dPhi/dF(F) = 2 mu (F-R) + lambda (J-1)JF^-T + + r, s = polar_decomposition(self.deformation_gradient) + j = determinant(self.deformation_gradient)[:, None, None, :] + + # Note: stress_tensor here is right-multiplied by F^T + self.stress_tensor1 = 2 * mu * matmatmul( + self.deformation_gradient - r, transpose(self.deformation_gradient)) + + if previous_state.controller: + self.stress_tensor1 += previous_state.actuation + + self.stress_tensor2 = lam * (j - 1) * j * identity_matrix + + self.stress_tensor = self.stress_tensor1 + self.stress_tensor2 + + # Rasterize momentum and velocity + # ... and apply gravity + + self.grid_velocity = tf.zeros(shape=(batch_size, self.sim.grid_res[0], + self.sim.grid_res[1], dim), dtype = tf_precision) + + self.kernels = self.compute_kernels(position * sim.inv_dx) + assert self.kernels.shape == (batch_size, kernel_size, kernel_size, 1, num_particles) + + self.velocity = previous_state.velocity + + # Quadratic B-spline kernel + for i in range(kernel_size): + for j in range(kernel_size): + delta_indices = np.zeros( + shape=(self.sim.batch_size, 1, dim + 1), dtype=np.int32) + + for b in range(batch_size): + delta_indices[b, 0, :] = [b, i, j] + self.grid_mass = self.grid_mass + tf.scatter_nd( + shape=(batch_size, self.sim.grid_res[0], self.sim.grid_res[1], 1), + indices=base_indices + delta_indices, + updates=tf.transpose(a=(self.particle_mass * self.kernels[:, i, j, :, :]), perm=[0, 2, 1])) + + # (b, dim, p) + delta_node_position = np.array([i, j], dtype = np_precision)[None, :, None] + # xi - xp + offset = (tf.floor(position * sim.inv_dx - 0.5) + + tf.cast(delta_node_position, tf_precision) - + position * sim.inv_dx) * sim.dx + + grid_velocity_contributions = self.particle_mass * self.kernels[:, i, j, :] * ( + self.velocity + matvecmul(previous_state.affine, offset)) + grid_force_contributions = self.particle_volume * self.kernels[:, i, j, :] * ( + matvecmul(self.stress_tensor, offset) * + (-4 * self.sim.dt * self.sim.inv_dx * self.sim.inv_dx)) + self.grid_velocity = self.grid_velocity + tf.scatter_nd( + shape=(batch_size, self.sim.grid_res[0], self.sim.grid_res[1], dim), + indices=base_indices + delta_indices, + updates=tf.transpose(a=grid_velocity_contributions + grid_force_contributions, perm=[0, 2, 1])) + assert self.grid_mass.shape == (batch_size, self.sim.grid_res[0], + self.sim.grid_res[1], + 1), 'shape={}'.format(self.grid_mass.shape) + + self.grid_velocity += self.grid_mass * np.array( + self.sim.gravity, dtype = np_precision)[None, None, None, :] * self.sim.dt + self.grid_velocity = self.grid_velocity / tf.maximum(np_precision(1e-30), self.grid_mass) + + sticky_mask = tf.cast(self.sim.bc_parameter == -1, tf_precision) + self.grid_velocity *= (1 - sticky_mask) + + mask = tf.cast( + tf.reduce_sum(input_tensor=self.sim.bc_normal**2, axis=3, keepdims=True) != 0, + tf_precision) + normal_component_length = tf.reduce_sum( + input_tensor=self.grid_velocity * self.sim.bc_normal, axis=3, keepdims=True) + perpendicular_component = self.grid_velocity - self.sim.bc_normal * normal_component_length + perpendicular_component_length = tf.sqrt( + tf.reduce_sum(input_tensor=perpendicular_component**2, axis=3, keepdims=True) + 1e-7) + normalized_perpendicular_component = perpendicular_component / perpendicular_component_length + perpendicular_component_length = tf.maximum(perpendicular_component_length + + tf.minimum(normal_component_length, 0) * self.sim.bc_parameter, 0) + projected_velocity = sim.bc_normal * tf.maximum( + normal_component_length, + 0) + perpendicular_component_length * normalized_perpendicular_component + self.grid_velocity = self.grid_velocity * ( + 1 - mask) + mask * projected_velocity + + # Resample velocity and local affine velocity field + self.velocity *= 0 + for i in range(kernel_size): + for j in range(kernel_size): + delta_indices = np.zeros( + shape=(self.sim.batch_size, 1, dim + 1), dtype=np.int32) + for b in range(batch_size): + delta_indices[b, 0, :] = [b, i, j] + + + #print('indices', (base_indices + delta_indices).shape) + grid_v = tf.transpose(a=tf.gather_nd( + params=self.grid_velocity, + indices=base_indices + delta_indices), perm=[0, 2, 1]) + self.velocity = self.velocity + grid_v * self.kernels[:, i, j, :] + + delta_node_position = np.array([i, j], dtype = np_precision)[None, :, None] + + # xi - xp + offset = (tf.floor(position * sim.inv_dx - 0.5) + + tf.cast(delta_node_position, tf_precision) - + position * sim.inv_dx) * sim.dx + assert offset.shape == position.shape + weighted_node_velocity = grid_v * self.kernels[:, i, j, :] + # weighted_node_velocity = tf.transpose(weighted_node_velocity, perm=[0, 2, 1]) + self.affine += outer_product(weighted_node_velocity, offset) + + self.affine *= 4 * sim.inv_dx * sim.inv_dx + dg_change = identity_matrix + self.sim.dt * self.affine + if not use_apic: + self.affine *= 0 + #print(dg_change.shape) + #print(previous_state.deformation_gradient) + self.deformation_gradient = matmatmul(dg_change, + previous_state.deformation_gradient) + + # Advection + self.position = position + self.velocity * self.sim.dt + assert self.position.shape == previous_state.position.shape + assert self.velocity.shape == previous_state.velocity.shape + self.acceleration = (self.velocity - previous_state.velocity) * (1 / self.sim.dt) + + if sim.damping != 0: + self.velocity *= np.exp(-sim.damping * sim.dt) + diff --git a/tensorflow_graphics/physics/vector_math.py b/tensorflow_graphics/physics/vector_math.py new file mode 100644 index 000000000..680864990 --- /dev/null +++ b/tensorflow_graphics/physics/vector_math.py @@ -0,0 +1,383 @@ +import tensorflow as tf +import numpy as np +from typing import Tuple +import IPython + +use_float64 = False + +if not use_float64: + np_precision = np.float32 + tf_precision = tf.float32 +else: + np_precision = np.float64 + tf_precision = tf.float64 + +# (b, X, Y, p) +identity_matrix = np.array([[1, 0], [0, 1]], dtype=np_precision)[None, :, :, None] +identity_matrix_3d = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=np_precision)[None, :, :, None] + + +def make_matrix2d_from_scalar(m00 : float, m01 : float, m10 : float, m11 : float) -> tf.Tensor: + """ + Create a 2D matrix from four scalars + + :return: The 2D matrix + :rtype: tf.Tensor + """ + m00 = tf.ones(shape=(1, 1), dtype=tf_precision) * m00 + m01 = tf.ones(shape=(1, 1), dtype=tf_precision) * m01 + m10 = tf.ones(shape=(1, 1), dtype=tf_precision) * m10 + m11 = tf.ones(shape=(1, 1), dtype=tf_precision) * m11 + return make_matrix2d(m00, m01, m10, m11) + + +def make_matrix2d(m00 : tf.Tensor, m01 : tf.Tensor, m10 : tf.Tensor, m11 : tf.Tensor) -> tf.Tensor: + """ + Create a matrix of size batch x 2 x 2 x num_particles from four tensors of size batch_size x num_particles + + :return: The 2D matrix + :rtype: tf.Tensor + """ + assert len(m00.shape) == 2 # Batch, particles + assert len(m01.shape) == 2 # Batch, particles + assert len(m10.shape) == 2 # Batch, particles + assert len(m11.shape) == 2 # Batch, particles + row0 = tf.stack([m00, m01], axis=1) + row1 = tf.stack([m10, m11], axis=1) + return tf.stack([row0, row1], axis=1) + + +def make_matrix3d(m00 : tf.Tensor, m01 : tf.Tensor, m02 : tf.Tensor, + m10 : tf.Tensor, m11 : tf.Tensor, m12 : tf.Tensor, + m20 : tf.Tensor, m21 : tf.Tensor, m22 : tf.Tensor) -> tf.Tensor: + """ + Create a matrix of size batch x 3 x 3 x num_particles from nine tensors of size batch_size x num_particles + + :return: The 3D matrix + :rtype: tf.Tensor + """ + assert len(m00.shape) == 2 # Batch, particles + assert len(m01.shape) == 2 # Batch, particles + assert len(m10.shape) == 2 # Batch, particles + assert len(m11.shape) == 2 # Batch, particles + row0 = tf.stack([m00, m01, m02], axis=1) + row1 = tf.stack([m10, m11, m12], axis=1) + row2 = tf.stack([m20, m21, m22], axis=1) + return tf.stack([row0, row1, row2], axis=1) + +def polar_decomposition(m: tf.Tensor) -> Tuple[tf.Tensor, tf.Tensor]: + """ + Reference: http://www.cs.cornell.edu/courses/cs4620/2014fa/lectures/polarnotes.pdf + Return the 2D Polar Decomposition of the input matrix m. + + :param m: Matrix of batch_size x 2 x 2 x num_particles + :type m: tf.Tensor + :return r: Rotation Matrix of size batch x 2 x 2 x num_particles + :rtype r: tf.Tensor + :return s: Scaling Matrix of size batch x 2 x 2 x num_particles + :rtype s: tf.Tensor + """ + # + assert len(m.shape) == 4 # Batch, row, column, particles + x = m[:, 0, 0, :] + m[:, 1, 1, :] + y = m[:, 1, 0, :] - m[:, 0, 1, :] + scale = 1.0 / tf.sqrt(x**2 + y**2) + c = x * scale + s = y * scale + r = make_matrix2d(c, -s, s, c) + return r, matmatmul(transpose(r), m) + + +def inverse(m : tf.Tensor) -> tf.Tensor: + """ + Reference: http://www.cs.cornell.edu/courses/cs4620/2014fa/lectures/polarnotes.pdf + Return the 2D Inverse of the input matrix m. + + :param m: Matrix of batch_size x 2 x 2 x num_particles + :type m: tf.Tensor + :return: Inverse Matrix of size batch x 2 x 2 x num_particles + :rtype: tf.Tensor + """ + assert len(m.shape) == 4 # Batch, row, column, particles + Jinv = 1.0 / determinant(m) + return Jinv[:, None, None, :] * make_matrix2d(m[:, 1, 1, :], -m[:, 0, 1, :], + -m[:, 1, 0, :], m[:, 0, 0, :]) + + +def matmatmul(a : tf.Tensor, b : tf.Tensor) -> tf.Tensor: + """ + Perform the matrix multiplication of two 2-D input matrices a @ b + + :param a: Matrix of batch_size x 2 x 2 x num_particles + :type a: tf.Tensor + :param b: Matrix of batch_size x 2 x 2 x num_particles + :type b: tf.Tensor + :return: Matrix multiplication of size batch x 2 x 2 x num_particles + :rtype: tf.Tensor + """ + assert len(a.shape) == 4 # Batch, row, column, particles + assert len(b.shape) == 4 # Batch, row, column, particles + dim = a.shape[1] + assert a.shape[2] == b.shape[1] + c = [[None for i in range(dim)] for j in range(dim)] + for i in range(dim): + for j in range(dim): + for k in range(dim): + if k == 0: + c[i][j] = a[:, i, k, :] * b[:, k, j, :] + else: + c[i][j] += a[:, i, k, :] * b[:, k, j, :] + if dim == 2: + return make_matrix2d(c[0][0], c[0][1], c[1][0], c[1][1]) + else: + return make_matrix3d(c[0][0], c[0][1], c[0][2], c[1][0], c[1][1], c[1][2], c[2][0], c[2][1], c[2][2]) + +def at_b(a, b): + assert len(a.shape) == 4 # Batch, row, column, particles + assert len(b.shape) == 4 + assert a.shape[1] == a.shape[2] + assert b.shape[1] == b.shape[2] + assert a.shape[1] == b.shape[1] + dim = a.shape[1] + c = [[None for i in range(dim)] for j in range(dim)] + for i in range(dim): + for j in range(dim): + for k in range(dim): + if k == 0: + c[i][j] = a[:, k, i, :] * b[:, k, j, :] + else: + c[i][j] += a[:, k, i, :] * b[:, k, j, :] + if dim == 2: + return make_matrix2d(c[0][0], c[0][1], c[1][0], c[1][1]) + else: + return make_matrix3d(c[0][0], c[0][1], c[0][2], c[1][0], c[1][1], c[1][2], c[2][0], c[2][1], c[2][2]) + +def Mt_M(a : tf.Tensor) -> tf.Tensor: + """ + Perform the operation matmul(transpose(a) , a) for an input matrix a + + :param a: Matrix of batch_size x dim x dim x num_particles + :type m: tf.Tensor + :return: matmul(transpose(a) , a) of size batch x dim x dim x num_particles + :rtype: tf.Tensor + """ + assert len(a.shape) == 4 # Batch, row, column, particles + assert a.shape[1] == a.shape[2] + dim = a.shape[1] + c = [[None for i in range(dim)] for j in range(dim)] + for i in range(dim): + for j in range(dim): + for k in range(dim): + if k == 0: + c[i][j] = a[:, k, i, :] * a[:, k, j, :] + else: + c[i][j] += a[:, k, i, :] * a[:, k, j, :] + if dim == 2: + return make_matrix2d(c[0][0], c[0][1], c[1][0], c[1][1]) + else: + return make_matrix3d(c[0][0], c[0][1], c[0][2], c[1][0], c[1][1], c[1][2], c[2][0], c[2][1], c[2][2]) + + +def transpose(a : tf.Tensor) -> tf.Tensor: + """ + Compute transpose(a) + + :param a: Matrix of batch_size x dim x dim x num_particles + :type a: tf.Tensor + :return: transpose(a) of batch_sixe x dim x dim x num_particles + :rtype: tf.Tensor + """ + assert len(a.shape) == 4 # Batch, row, column, particles + dim = a.shape[1] + c = [[None for i in range(dim)] for j in range(dim)] + for i in range(dim): + for j in range(dim): + c[i][j] = a[:, j, i, :] + #c[0][1], c[1][0] = c[1][0], c[0][1] + #row0 = tf.stack([c[0][0], c[0][1]], axis=1) + #row1 = tf.stack([c[1][0], c[1][1]], axis=1) + #C = tf.stack([row0, row1], axis=1) + if dim == 2: + return make_matrix2d(c[0][0], c[0][1], c[1][0], c[1][1]) + else: + return make_matrix3d(c[0][0], c[0][1], c[0][2], c[1][0], c[1][1], c[1][2], c[2][0], c[2][1], c[2][2]) + +def M_plus_Mt(a): + assert len(a.shape) == 4 # Batch, row, column, particles + assert a.shape[1] == a.shape[2] + dim = a.shape[1] + c = [[None for i in range(dim)] for j in range(dim)] + for i in range(dim): + for j in range(dim): + c[i][j] = a[:, i, j, :] + a[:, j, i, :] + if dim == 2: + return make_matrix2d(c[0][0], c[0][1], c[1][0], c[1][1]) + else: + return make_matrix3d(c[0][0], c[0][1], c[0][2], c[1][0], c[1][1], c[1][2], c[2][0], c[2][1], c[2][2]) + + +def matvecmul(a : tf.Tensor, b : tf.Tensor) -> tf.Tensor: + """ + Compute matrix-vector product for matrix a and vector b + + :param a: Matrix of batch_size x row x col x num_particles + :type a: tf.Tensor + :param b: Vector of batch_size x col x num_particles + :type b: tf.Tensor + :return: a * b of batch_sixe x row x num_particles + :rtype: tf.Tensor + """ + + assert len(a.shape) == 4 # Batch, row, column, particles + assert len(b.shape) == 3 # Batch, column, particles + row, col = a.shape[1:3] + c = [None for i in range(row)] + for i in range(row): + for k in range(col): + if k == 0: + c[i] = a[:, i, k, :] * b[:, k, :] + else: + c[i] += a[:, i, k, :] * b[:, k, :] + return tf.stack(c, axis=1) + + +def matvecmul_grid(a, b): + """ + Compute matrix-vector product for matrix a and vector b. Essentially rank 3 batching. + + :param a: Matrix of batch_size x grid_x x grid_y row x col + :type a: tf.Tensor + :param b: Vector of batch_size x grid_x x grid_y x col + :type b: tf.Tensor + :return: a * b of batch_size x grid_x x grid_y x row + :rtype: tf.Tensor + """ + assert len(a.shape) == 5 # Batch, grid_x, grid_y, row, column + assert len(b.shape) == 4 # Batch, grid_x, grid_y, column + row, col = a.shape[3:] + c = [None for i in range(row)] + for i in range(row): + for k in range(col): + if k == 0: + c[i] = a[:, :, :, i, k] * b[:, :, :, k] + else: + c[i] += a[:, :, :, i, k] * b[:, :, :, k] + return tf.stack(c, axis=3) + +# a is column, b is row +def outer_product(a : tf.Tensor, b : tf.Tensor) -> tf.Tensor: + """ + Compute outer product of column vector a and row vector b. + + :param a: vector of batch_size x dim x num_particles + :type a: tf.Tensor + :param b: vector of batch_size x dim x num_particles + :type b: tf.Tensor + :return: outer product of size batch_size x dim x dim x num_particles + :rtype: tf.Tensor + """ + assert len(a.shape) == 3 # Batch, row, particles + assert len(b.shape) == 3 # Batch, row, particles + dim = 2 + c = [[None for i in range(dim)] for j in range(dim)] + for i in range(dim): + for j in range(dim): + c[i][j] = a[:, i, :] * b[:, j, :] + row0 = tf.stack([c[0][0], c[0][1]], axis=1) + row1 = tf.stack([c[1][0], c[1][1]], axis=1) + C = tf.stack([row0, row1], axis=1) + return C + + +def determinant(a : tf.Tensor) -> tf.Tensor: + """ + Compute determinant of a 2-D matrix a. + + :param a: vector of batch_size x 2 x 2 x num_particles + :type a: tf.Tensor + :return: determinant of size batch_size x num_particles + :rtype: tf.Tensor + """ + assert len(a.shape) == 4 # Batch, row, column, particles + return a[:, 0, 0, :] * a[:, 1, 1, :] - a[:, 1, 0, :] * a[:, 0, 1, :] + + +# returns (b, p) +def trace(a : tf.Tensor) -> tf.Tensor: + """ + Compute trace of a 2-D matrix a. + + :param a: vector of batch_size x 2 x 2 x num_particles + :type a: tf.Tensor + :return: trace of size batch_size x num_particles + :rtype: tf.Tensor + """ + assert len(a.shape) == 4 # Batch, row, column, particles + return a[:, 0, 0, :] + a[:, 1, 1, :] + + +if __name__ == '__main__': + a = np.random.randn(2, 2) + b = np.random.randn(2, 2) + c = np.random.randn(2, 1) + d = np.random.randn(2, 1) + with tf.Session() as sess: + # Polar decomposition + R, S = polar_decomposition(tf.constant(a[None, :, :, None])) + r, s = sess.run([R, S]) + r = r[0, :, :, 0] + s = s[0, :, :, 0] + np.testing.assert_array_almost_equal(np.matmul(r, s), a) + np.testing.assert_array_almost_equal( + np.matmul(r, np.transpose(r)), [[1, 0], [0, 1]]) + np.testing.assert_array_almost_equal(s, np.transpose(s)) + + # Inverse + prod2 = inverse(tf.constant(a[None, :, :, None])) + prod2 = sess.run(prod2)[0, :, :, 0] + np.testing.assert_array_almost_equal(np.matmul(prod2, a), [[1, 0], [0, 1]]) + + # Matmatmul + prod1 = np.matmul(a, b) + prod2 = matmatmul( + tf.constant(a[None, :, :, None]), tf.constant(b[None, :, :, None])) + prod2 = sess.run(prod2)[0, :, :, 0] + np.testing.assert_array_almost_equal(prod1, prod2) + + # Matvecmul + prod1 = np.matmul(a, c) + prod2 = matvecmul( + tf.constant(a[None, :, :, None]), tf.constant(c[None, :, 0, None])) + prod2 = sess.run(prod2)[0, :, 0] + np.testing.assert_array_almost_equal(prod1[:, 0], prod2) + + # Matvecmul on grid. + batch_size = 1 + nx, ny = 10, 6 + dx, dy = 3, 2 + grid_R = np.random.rand(batch_size, nx, ny, dx, dy) + grid_vel = np.random.rand(batch_size, nx, ny, dy) + grid_result1 = matvecmul_grid(tf.constant(grid_R), tf.constant(grid_vel)) + grid_result1 = sess.run(grid_result1) + assert grid_result1.shape == (batch_size, nx, ny, dx) + grid_result2 = np.zeros((batch_size, nx, ny, dx)) + for i in range(batch_size): + for j in range(nx): + for k in range(ny): + grid_result2[i, j, k, :] = np.matmul(grid_R[i, j, k, :, :], grid_vel[i, j, k, :]) + np.testing.assert_array_almost_equal(grid_result1, grid_result2) + + # transpose + prod1 = np.transpose(a) + prod2 = transpose(tf.constant(a[None, :, :, None])) + prod2 = sess.run(prod2)[0, :, :, 0] + np.testing.assert_array_almost_equal(prod1, prod2) + + # outer_product + prod2 = outer_product( + tf.constant(c[None, :, 0, None]), tf.constant(d[None, :, 0, None])) + prod2 = sess.run(prod2)[0, :, :, 0] + for i in range(2): + for j in range(2): + np.testing.assert_array_almost_equal(c[i] * d[j], prod2[i, j]) + print("All tests passed.") From 0e4678a2b5a1a4857595ce34c588d840e165cf1d Mon Sep 17 00:00:00 2001 From: Andrew Spielberg Date: Thu, 29 Jul 2021 21:38:20 -0400 Subject: [PATCH 2/2] simple pr --- tensorflow_graphics/physics/arm.py | 377 --- .../physics/data/images/comparison.jpg | Bin 279153 -> 0 bytes .../physics/demos/accuracy_collision_3d.py | 110 - .../physics/demos/arm_3d_v3.py | 238 -- .../physics/demos/basketball.py | 98 - tensorflow_graphics/physics/demos/bridge.py | 116 - .../physics/demos/collision_2d.py | 102 - .../physics/demos/collision_3d.py | 119 - .../physics/demos/collision_grad_2d.py | 128 -- .../physics/demos/collision_grad_3d.py | 144 -- .../physics/demos/collision_mass.py | 108 - .../physics/demos/crawler_3d.py | 288 --- tensorflow_graphics/physics/demos/export.py | 39 - .../physics/demos/finger/__init__.py | 8 - .../physics/demos/finger/finger_env.py | 143 -- .../physics/demos/finger/finger_sim.py | 183 -- .../physics/demos/finger_plot.py | 225 -- tensorflow_graphics/physics/demos/model.py | 52 - .../physics/demos/multireach.py | 223 -- tensorflow_graphics/physics/demos/rolling.py | 114 - .../physics/demos/rolling_boundary.py | 259 --- .../physics/demos/rotating_muscle.py | 158 -- .../physics/demos/test_finger.py | 3 - .../physics/demos/test_walker.py | 3 - .../physics/demos/visualize_training_curve.py | 13 - .../physics/demos/walker/__init__.py | 8 - .../physics/demos/walker/walker_env.py | 107 - .../physics/demos/walker/walker_sim.py | 175 -- .../physics/demos/walker_2d.py | 219 -- .../physics/demos/walker_3d.py | 293 --- tensorflow_graphics/physics/docs/API.rst | 76 - tensorflow_graphics/physics/docs/README.md | 0 .../physics/docs/_static/.gitkeep | 0 tensorflow_graphics/physics/docs/conf.py | 177 -- tensorflow_graphics/physics/docs/index.rst | 10 - .../physics/docs/installation.rst | 21 - tensorflow_graphics/physics/docs/make.bat | 36 - .../physics/external/partio/CMakeLists.txt | 39 - .../physics/external/partio/include/Partio.h | 275 --- .../external/partio/include/PartioAttribute.h | 116 - .../external/partio/include/PartioIterator.h | 222 -- .../physics/external/partio/src/Partio.h | 275 --- .../external/partio/src/PartioAttribute.h | 116 - .../external/partio/src/PartioIterator.h | 222 -- .../physics/external/partio/src/core/KdTree.h | 432 ---- .../physics/external/partio/src/core/Mutex.h | 136 -- .../external/partio/src/core/Particle.cpp | 125 - .../partio/src/core/ParticleCaching.cpp | 112 - .../partio/src/core/ParticleCaching.h | 44 - .../partio/src/core/ParticleHeaders.cpp | 190 -- .../partio/src/core/ParticleHeaders.h | 91 - .../partio/src/core/ParticleSimple.cpp | 344 --- .../external/partio/src/core/ParticleSimple.h | 109 - .../src/core/ParticleSimpleInterleave.cpp | 344 --- .../src/core/ParticleSimpleInterleave.h | 114 - .../physics/external/partio/src/io/BGEO.cpp | 197 -- .../external/partio/src/io/ParticleIO.cpp | 140 -- .../external/partio/src/io/PartioEndian.h | 129 -- .../physics/external/partio/src/io/ZIP.cpp | 619 ----- .../physics/external/partio/src/io/ZIP.h | 87 - .../external/partio/src/io/half2float.h | 2048 ----------------- .../physics/external/partio/src/io/pdb.h | 162 -- .../physics/external/partio/src/io/readers.h | 65 - tensorflow_graphics/physics/memo.py | 51 - tensorflow_graphics/physics/mpm3d.py | 66 - tensorflow_graphics/physics/simulation.py | 874 ------- tensorflow_graphics/physics/src/backward.cu | 565 ----- tensorflow_graphics/physics/src/config.h | 1 - tensorflow_graphics/physics/src/forward.cu | 366 --- tensorflow_graphics/physics/src/g2pop.cc | 199 -- tensorflow_graphics/physics/src/kernels.h | 28 - tensorflow_graphics/physics/src/linalg.h | 233 -- tensorflow_graphics/physics/src/misc.cu | 142 -- tensorflow_graphics/physics/src/mpmgradop.cc | 188 -- tensorflow_graphics/physics/src/mpmop.cc | 295 --- tensorflow_graphics/physics/src/p2gop.cc | 264 --- tensorflow_graphics/physics/src/simulator.cpp | 804 ------- tensorflow_graphics/physics/src/state.cuh | 473 ---- tensorflow_graphics/physics/src/state_base.h | 63 - tensorflow_graphics/physics/src/svd.cuh | 1084 --------- tensorflow_graphics/physics/test_tf_speed.py | 48 - tensorflow_graphics/physics/tests_2d.py | 450 ---- tensorflow_graphics/physics/tests_3d.py | 361 --- .../physics/time_integration.py | 513 ----- 84 files changed, 18194 deletions(-) delete mode 100644 tensorflow_graphics/physics/arm.py delete mode 100644 tensorflow_graphics/physics/data/images/comparison.jpg delete mode 100644 tensorflow_graphics/physics/demos/accuracy_collision_3d.py delete mode 100644 tensorflow_graphics/physics/demos/arm_3d_v3.py delete mode 100644 tensorflow_graphics/physics/demos/basketball.py delete mode 100644 tensorflow_graphics/physics/demos/bridge.py delete mode 100644 tensorflow_graphics/physics/demos/collision_2d.py delete mode 100644 tensorflow_graphics/physics/demos/collision_3d.py delete mode 100644 tensorflow_graphics/physics/demos/collision_grad_2d.py delete mode 100644 tensorflow_graphics/physics/demos/collision_grad_3d.py delete mode 100644 tensorflow_graphics/physics/demos/collision_mass.py delete mode 100644 tensorflow_graphics/physics/demos/crawler_3d.py delete mode 100644 tensorflow_graphics/physics/demos/export.py delete mode 100644 tensorflow_graphics/physics/demos/finger/__init__.py delete mode 100644 tensorflow_graphics/physics/demos/finger/finger_env.py delete mode 100644 tensorflow_graphics/physics/demos/finger/finger_sim.py delete mode 100644 tensorflow_graphics/physics/demos/finger_plot.py delete mode 100644 tensorflow_graphics/physics/demos/model.py delete mode 100644 tensorflow_graphics/physics/demos/multireach.py delete mode 100644 tensorflow_graphics/physics/demos/rolling.py delete mode 100644 tensorflow_graphics/physics/demos/rolling_boundary.py delete mode 100644 tensorflow_graphics/physics/demos/rotating_muscle.py delete mode 100644 tensorflow_graphics/physics/demos/test_finger.py delete mode 100644 tensorflow_graphics/physics/demos/test_walker.py delete mode 100644 tensorflow_graphics/physics/demos/visualize_training_curve.py delete mode 100644 tensorflow_graphics/physics/demos/walker/__init__.py delete mode 100644 tensorflow_graphics/physics/demos/walker/walker_env.py delete mode 100644 tensorflow_graphics/physics/demos/walker/walker_sim.py delete mode 100644 tensorflow_graphics/physics/demos/walker_2d.py delete mode 100644 tensorflow_graphics/physics/demos/walker_3d.py delete mode 100644 tensorflow_graphics/physics/docs/API.rst delete mode 100644 tensorflow_graphics/physics/docs/README.md delete mode 100644 tensorflow_graphics/physics/docs/_static/.gitkeep delete mode 100644 tensorflow_graphics/physics/docs/conf.py delete mode 100644 tensorflow_graphics/physics/docs/index.rst delete mode 100644 tensorflow_graphics/physics/docs/installation.rst delete mode 100644 tensorflow_graphics/physics/docs/make.bat delete mode 100644 tensorflow_graphics/physics/external/partio/CMakeLists.txt delete mode 100644 tensorflow_graphics/physics/external/partio/include/Partio.h delete mode 100644 tensorflow_graphics/physics/external/partio/include/PartioAttribute.h delete mode 100644 tensorflow_graphics/physics/external/partio/include/PartioIterator.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/Partio.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/PartioAttribute.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/PartioIterator.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/KdTree.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/Mutex.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/Particle.cpp delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.cpp delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.cpp delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.cpp delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.cpp delete mode 100644 tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/io/BGEO.cpp delete mode 100644 tensorflow_graphics/physics/external/partio/src/io/ParticleIO.cpp delete mode 100644 tensorflow_graphics/physics/external/partio/src/io/PartioEndian.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/io/ZIP.cpp delete mode 100644 tensorflow_graphics/physics/external/partio/src/io/ZIP.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/io/half2float.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/io/pdb.h delete mode 100644 tensorflow_graphics/physics/external/partio/src/io/readers.h delete mode 100644 tensorflow_graphics/physics/memo.py delete mode 100644 tensorflow_graphics/physics/mpm3d.py delete mode 100644 tensorflow_graphics/physics/simulation.py delete mode 100644 tensorflow_graphics/physics/src/backward.cu delete mode 100644 tensorflow_graphics/physics/src/config.h delete mode 100644 tensorflow_graphics/physics/src/forward.cu delete mode 100644 tensorflow_graphics/physics/src/g2pop.cc delete mode 100644 tensorflow_graphics/physics/src/kernels.h delete mode 100644 tensorflow_graphics/physics/src/linalg.h delete mode 100644 tensorflow_graphics/physics/src/misc.cu delete mode 100644 tensorflow_graphics/physics/src/mpmgradop.cc delete mode 100644 tensorflow_graphics/physics/src/mpmop.cc delete mode 100644 tensorflow_graphics/physics/src/p2gop.cc delete mode 100644 tensorflow_graphics/physics/src/simulator.cpp delete mode 100644 tensorflow_graphics/physics/src/state.cuh delete mode 100644 tensorflow_graphics/physics/src/state_base.h delete mode 100644 tensorflow_graphics/physics/src/svd.cuh delete mode 100644 tensorflow_graphics/physics/test_tf_speed.py delete mode 100644 tensorflow_graphics/physics/tests_2d.py delete mode 100644 tensorflow_graphics/physics/tests_3d.py delete mode 100644 tensorflow_graphics/physics/time_integration.py diff --git a/tensorflow_graphics/physics/arm.py b/tensorflow_graphics/physics/arm.py deleted file mode 100644 index a2e28589f..000000000 --- a/tensorflow_graphics/physics/arm.py +++ /dev/null @@ -1,377 +0,0 @@ -import random -import os -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import IPython -import copy - -import pygmo as pg -import pygmo_plugins_nonfree as ppnf - -np.random.seed(326) - -def flatten_vectors(vectors): - return tf.concat([tf.squeeze(ly.flatten(vector)) for vector in vectors], 0) - -lr = 1.0 - - -goal_range = 0.0 -batch_size = 1 -actuation_strength = 8 - - -use_pygmo = True - - -num_steps = 800 - -iter_ = 0 - -# Finger -num_links = 2 -num_acts = int(num_steps // num_links) #TBH this is just to keep the number of variables tame -sample_density = int(20 // (np.sqrt(num_links))) -group_num_particles = sample_density**2 -group_sizes = [] -group_offsets = [] -actuations = [] -group_size = [(0.5, 2.0 / num_links), (0.5, 2.0 / num_links), (1, 1.0 / num_links)] -for i in range(num_links): - group_offsets += [(1, (group_size[0][1] + group_size[2][1])*i ), (1.5, (group_size[1][1] + group_size[2][1])*i), (1, (group_size[0][1] + group_size[2][1])*i + group_size[0][1] )] - group_sizes += copy.deepcopy(group_size) - actuations += [0 + 3*i, 1 + 3*i] -num_groups = len(group_sizes) - - -head = num_groups - 1 -gravity = (0, 0) - - -num_particles = group_num_particles * num_groups -num_actuators = len(actuations) - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - - -actuation_seq = tf.Variable(1.0 * tf.random.normal(shape=(1, num_acts, num_actuators), dtype=np.float32), trainable=True) - -def step_callback(dec_vec): - pass - - - - -def main(sess): - t = time.time() - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - # Define your controller here - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - accel = tf.reduce_sum(input_tensor=mask * state.acceleration, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - controller_inputs.append(goal) - controller_inputs.append(accel) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, 8 * num_groups), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, 8 * num_groups, 1) - - actuation = tf.expand_dims(actuation_seq[0, (state.step_count - 1) // (num_steps // num_acts), :], 0) - debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation, 'acceleration': state.acceleration, 'velocity' : state.velocity} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - # First PK stress here - act = make_matrix2d(zeros, zeros, zeros, act) - # Convert to Kirchhoff stress - total_actuation = total_actuation + act - return total_actuation, debug - - res = (30, 30) - bc = get_bounding_box_bc(res) - - - bc[0][:, :, :5] = -1 # Sticky - bc[1][:, :, :5] = 0 # Sticky - - sim = Simulation( - dt=0.0025, - num_particles=num_particles, - grid_res=res, - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess) - print("Building time: {:.4f}s".format(time.time() - t)) - - final_state = sim.initial_state['debug']['controller_inputs'] - final_acceleration = sim.initial_state['debug']['acceleration'] - final_velocity_all = sim.initial_state['debug']['velocity'] - s = head * 8 - - final_position = final_state[:, s:s+2] - final_velocity = final_state[:, s + 2: s + 4] - final_accel = final_state[:, s + 6: s + 8] - gamma = 0.0 - loss_position = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - loss_velocity = tf.reduce_mean(input_tensor=final_velocity_all ** 2) / 10.0 - loss_act = tf.reduce_sum(input_tensor=actuation_seq ** 2.0) / 10000.0 - loss_zero = tf.Variable(0.0, trainable=False) - - #loss_accel = tf.reduce_mean(final_acceleration ** 2.0) / 10000.0 - loss_accel = loss_zero - #IPython.embed() - - - - #acceleration_constraint = tf.reduce_sum(final_acceleration, axis=1) - - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - scale = 0.2 - u = ((x +0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - initial_positions[b].append([u, v]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - youngs_modulus =tf.Variable(10.0 * tf.ones(shape = [1, 1, num_particles], dtype = tf.float32), trainable=True) - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=tf.identity(youngs_modulus)) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - - - - sess.run(tf.compat.v1.global_variables_initializer()) - - sim.set_initial_state(initial_state=initial_state) - - sym_pos = sim.gradients_sym(loss_position, variables=trainables) - sym_vel = sim.gradients_sym(loss_velocity, variables=trainables) - sym_act = sim.gradients_sym(loss_act, variables=trainables) - sym_zero = sim.gradients_sym(loss_zero, variables=trainables) - sym_accel = sim.gradients_sym(loss_accel, variables=trainables) - - - #sym_acc = [sim.gradients_sym(acceleration, variables=trainables) for acceleration in acceleration_constraint] - #sym_acc = tf.map_fn(lambda x : sim.gradients_sym(x, variables=trainables), acceleration_constraint) - #acc_flat = flatten_vectors([final_acceleration]) - #sym_acc = tf.map_fn((lambda x : sim.gradients_sym(x, variables=trainables)), acc_flat) - #IPython.embed() - - sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) - sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) - - sim.add_point_visualization(pos=final_position, color=(1, 0, 0), radius=3) - - - - goal_input = np.array( - [[0.7 + (random.random() - 0.5) * goal_range * 2, - 0.5 + (random.random() - 0.5) * goal_range] for _ in range(batch_size)], - dtype=np.float32) - - - - def eval_sim(loss_tensor, sym_, need_grad=True): - memo = sim.run( - initial_state=initial_state, - num_steps=num_steps, - iteration_feed_dict={goal: goal_input}, - loss=loss_tensor) - if need_grad: - grad = sim.eval_gradients(sym=sym_, memo=memo) - else: - grad = None - return memo.loss, grad, memo - - def flatten_trainables(): - return tf.concat([tf.squeeze(ly.flatten(trainable)) for trainable in trainables], 0) - - - - def assignment_run(xs): - sess.run([trainable.assign(x) for x, trainable in zip(xs, trainables)]) - - - - - - t = time.time() - - #loss_val, grad, memo = eval_sim(loss_position, sym_pos) - - #IPython.embed() - - - #Begin optimization - - - def assignment_helper(x): - assignments = [] - idx = 0 - x = x.astype(np.float32) - for v in trainables: - #first, get count: - var_cnt = tf.size(input=v).eval() - assignments += [v.assign(tf.reshape(x[idx:idx+var_cnt],v.shape))] - idx += var_cnt - sess.run(assignments) - - class RobotProblem: - def __init__(self, use_act): - self.use_act = use_act - - goal_ball = 0.0001 - def fitness(self, x): - assignment_helper(x) - if self.use_act: - loss_act_val, _, _ = eval_sim(loss_act, sym_act, need_grad=False) - else: - loss_act_val, _, _ = eval_sim(loss_zero, sym_zero, need_grad=False) - loss_pos_val, _, _ = eval_sim(loss_position, sym_pos, need_grad=False) - loss_accel_val, _, _ = eval_sim(loss_accel, sym_accel, need_grad=False) - c1, _, memo = eval_sim(loss_velocity, sym_vel, need_grad=False) - global iter_ - sim.visualize(memo, show = False, folder = "arm_log/it{:04d}".format(iter_)) - iter_ += 1 - print('loss pos', loss_pos_val) - print('loss vel', c1) - print('loss accel', loss_accel_val) - #IPython.embed() - return [loss_act_val.astype(np.float64), loss_pos_val.astype(np.float64) - self.goal_ball, c1.astype(np.float64) - self.goal_ball, loss_accel_val.astype(np.float64) - self.goal_ball] - - - def get_nic(self): - return 3 - def get_nec(self): - return 0 - - def gradient(self, x): - assignment_helper(x) - _, grad_position, _ = eval_sim(loss_position, sym_pos) - _, grad_velocity, _ = eval_sim(loss_velocity, sym_vel) - _, grad_accel, _ = eval_sim(loss_accel, sym_accel) - if self.use_act: - _, grad_act, _ = eval_sim(loss_act, sym_act) - else: - _, grad_act, _ = eval_sim(loss_zero, sym_zero) - return np.concatenate([flatten_vectors(grad_act).eval().astype(np.float64), - flatten_vectors(grad_position).eval().astype(np.float64), - flatten_vectors(grad_velocity).eval().astype(np.float64), - flatten_vectors(grad_accel).eval().astype(np.float64)]) - #return flatten_vectors(grad).eval().astype(np.float64) - - def get_bounds(self): - #actuation - lb = [] - ub = [] - acts = trainables[0] - lb += [-1.0 / num_links] * tf.size(input=acts).eval() - ub += [1.0 / num_links] * tf.size(input=acts).eval() - designs = trainables[1] - lb += [3] * tf.size(input=designs).eval() - ub += [40] * tf.size(input=designs).eval() - - return (lb, ub) - - - #IPython.embed() - uda = pg.nlopt("slsqp") - #uda = ppnf.snopt7(screen_output = False, library = "/home/aespielberg/snopt/lib/libsnopt7.so") - algo = pg.algorithm(uda) - #algo.extract(pg.nlopt).local_optimizer = pg.nlopt('lbfgs') - - algo.extract(pg.nlopt).maxeval = 50 - algo.set_verbosity(1) - udp = RobotProblem(False) - bounds = udp.get_bounds() - mean = (np.array(bounds[0]) + np.array(bounds[1])) / 2.0 - num_vars = len(mean) - prob = pg.problem(udp) - pop = pg.population(prob, size = 1) - - #TODO: initialize both parts different here - acts = trainables[0] - designs = trainables[1] - - std_act = np.ones(tf.size(input=acts).eval()) * 0.1 - std_young = np.ones(tf.size(input=designs).eval()) * 0.0 - #IPython.embed() - std = np.concatenate([std_act, std_young]) - #act_part = np.random.normal(scale=0.1, loc=mean, size=(tf.size(acts).eval(),)) - #young_part = 10.0 * tf.size(designs).eval() - - - pop.set_x(0,np.random.normal(scale=std, loc=mean, size=(num_vars,))) - #IPython.embed() - - pop.problem.c_tol = [1e-6] * prob.get_nc() - #pop.problem.c_tol = [1e-4] * prob.get_nc() - pop.problem.f_tol_rel = [100000.0] - #IPython.embed() - pop = algo.evolve(pop) - IPython.embed() - - #IPython.embed() #We need to refactor this for real - old_x = pop.champion_x - assert False - udp = RobotProblem(True) - prob = pg.problem(udp) - pop = pg.population(prob, size = 1) - pop.set_x(0,old_x) - pop.problem.c_tol = [1e-6] * prob.get_nc() - #pop.problem.f_tol = [1e-6] - pop.problem.f_tol_rel = [1e-4] - pop = algo.evolve(pop) - - #now a second time - - - _, _, memo = eval_sim(loss) - sim.visualize(memo) - - - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/data/images/comparison.jpg b/tensorflow_graphics/physics/data/images/comparison.jpg deleted file mode 100644 index e7f9ae3cef6b93402e6443bff43f1ead3ae8bbe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279153 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𝔚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

Bq{?N~4#-02Eg;MR&sV_SoR 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 z z;hA}XFxmdu+zM-#=r(cit)MXjP{*%L%pB4_`r&Y%1?w5X4)G zQ$Khgla{FE$1hM=+uz*sycs9;IC3SR`Zmm(&X#<#UD^6+Z3@*$psQ3L7oTQfK+HezA_j>2f5ghl}YBHCuTVo)xyX zDy^N{In0t4yiblfHsY2{OSF?B&q0JBOJ+N1SVebYZAI%IhqWv@sOtFnGmk{}b3AEO zzKFZZda-c$7}JuhL8K1mdPdGgRZbbZ`ty_o8A^XRz!_6eBpN$BZW{>liU47|mVLw5tz*iec)K?rUQYwA{Ih2M4DUHQj#g55)UfJ0La!p+98C ziGFwzJRLceP8;4cDC9dKAJ&QMKW z9LF$Yut{l~vNVdC-LG*Kk{-LPz%BW8yVgun0<0`WtlC~Xu7;0WQmR){1$7Oy6tZ1} zC!;NfL820h^^&XA;v1LqoQOVI(M&#TR#1{kHj*`akeC@qhq?X+_UVi}!NsL-^3jra zc<}tiILQQww!PM^Kz^tl%X+)Y>NV}9$f?me>4UVimMn>88cE3nuXCsT!nsWWtGkwW z(+sC)HH^f5*7`iS{rS=RXV-9BM7EC_13w^L#lD3Zut0k)G2NynY5HZSw*umWA{;+1 zrF}p9=&om`ZQ`(&(sS*%anq#ZfIs@5wC}2aO-)!Q7;q#Q>{(7|VKQwEBimozS?1st zvK^lxm$f{&GLdZTRwG&9@45W`_A}ko)W^NCqag@et9?=FJ8|I&%}hFFfTX$XK@2YZ zB@cC1Eu)ZeAH19fMkDJ=TCV1FA2RDmcz22{n|7{WR5J<|22LrLx1s0Irx?c7u>J*1 z->L9@VeHKi!UA%NcNwV~sGtmZ8uqn~_B|X)^Z$Igd#qanFC~MU0p_d#rVO)lF|a@< zAXOAv-;(%oC+g-Vj%Rd1jLcmCDa3;RM(7)bnfWBg|kJq;% z-~1t-=|st61_71eEruPyaz24Kx8J%-3!38gu`QLs4`{z_X{iLm|*US z&q3jUUn8yVCj`m@vdcdOyRd!Q*}fG(obUs#EJHb#+u+Tp=_Jf-SwTJF-JR2}srUG` zV}AL>s#njyd}kHI4v%5op%HsYJ)WZaP-nD<@t+lP|FyZUFBgs7J$&AFpQ@NSQDo9F zoIXDP_B_ZB%vP{MjVCh2ChmJyO`X?1_1r=`e|=Aaa;F99r*Il+xxWlEA_iyPkXik| z{}<1h1hsm|INB|#^7NnLG%&VFO-&g)sy%izaIbTDzXv(QG?V8Hb6;%Tns1W1*Da&n z$rCw`O5CGM1L|LW>_|&9FFvooyV$oJVWz>c|E+U{LRL#zQ83*Y+spQ;equ4=b^We~ zeG0EGP0jXLQf~YS#H}CuWw3?k?uowKhv4AY$Fb*Cr;`?o>PgM!mV?v0v2rG}WeNS= z*>XdQ91b?NgPo1B8MsR+`}5&^!n_roD4-)23D3H018fKluIpoPx=7e~_@SmB&E*~; zC9Ak)*Ou|vj1z!;50 z1%uO_f!X8_l^~Trty)5doqoWMc6xh@#7TWdro@sQ5Jc91Fzc;8glF&-v8Gu(wAKK? zmO9t4b$gRBBVE6~*IP_!Kh@?1^^CK@K4&TYWs*POghHd-d11uD;HjPoip}W#b^dtP ziSw2CFQ2NBAX*=AVrzr6j42f$uSsh!+A3(F($3=$DVY4IVf@_k5d8cBvvIe~2ytuu zTa6$ywBxf_v)-&<3!pkLXkUDG?daBpzAa^Zm$9J!*)F$F2jIp zT_7sR?OsylIFeEq!*=g9w|24}Ui%dJ18|z{XQa*;9p@>E2#M(3McEO~|2hak$@+{u zYz5HMZM$I&ls)sphwm`OKc&TpKg&q4Neyt()jg)YtZKHrI#%6ji-G9-7El1?%7CYW zgB&TXH(j6&OS2bNUJ)7cEMA%lQ4+mo1$)`z_a@e8Kb}8--DLs4j+k|}6niQoC6?sI zA!u|F&&+0!O})X6FbL*=E*5hVBaczI)eJO1QiL%#Kxt_8vc}WUUvBB44{sq73SSlJ z`yv-_6cyQc9DISFdiSt8&rtHk?SrPiJp!i@=YTRU3sbh3&Ap|!^Tw9p@awNfoVQ9- zyInWaHJ}Wd-mivtRly~aGj4H9XiWN4ctM{i# z;cBuHPWjtnq0dk{DjSsC?%W=|ndOq;Ac|@Q_YDA3A8| zciZY5>_w*&3)DxaQ@vR|3KAb#bTT@ZmRNpfo#175QtpSS=vYHzY*hO>`HMA)WBctY ztYu#R;g)yTuqs_OepOeWQ=ubvUPO)est9gZ$(3oCWecM%w*2~J!LJCwL4o`q4%Q5Yo_=_Ooc>R{g*Q(YiR?oUY+4Mg%wa-bay}i z&c){jYI+_<4iFfE)sQ3dn$=VVc~&r?s?yu;MAKN^wzk_3Z}|_A3y6jWnV-{ROkYte z8Qe?6*4h7S*T(T~y`Qv17Li?cfN>{%i1?GtSoMXSS6=|GOxGO*;M-SiEs zf+T*PQ!maWA~;6!J)HWo5+2jr8UvwGWzu&VVrR=aV9p1WIY3DeFkE=feUb#6 zF08p(xj6C5PGuldBJ-d8oRDi3G56sI8D2AB7ON)RQx{bYr_pXwAl(^wxV zdPvXR>5O&iMf^N*M+gFyg;5WCksmDFtE!fj7o(81mf6yOr|g4(Lw`|+V;N5fQQ(4X zh!@T#>{?m9%%C#nQg8!<#2^ija!6Sl!ymPZ?c(Z67G=mLYByfj=+;)dT9}t$491dQ zd=}44lsV3e|4d=MZ>IFelf7Bp&%-KMn1xGAVJo!Y((&5w0iiLd;ejSxL6q5>y9vFA z%zsuoOP;H)Aa+>EY=c8`jt;oIc0w5&sG%AnRyS__$iD*)P*yEvJieh9%|#=>;c$uh zE1i6G_i_+xKS2HV|J+USUs);jxp+0O(Xc~VxR(5pWU>IPdd2j{gmo_Zg*6a%_>E*z z?*bqr3^RaO!eT=-y-$DwK%P|p=Y^I_Mb}o=KOaYr`SGtFy>FkaPx|LRVv`f1k}~4y zlq}6MU@@qL(3*`rHyh|3ZJKOAETEE+M~-Ub#x6W^(HE@fIi3u=1-70Il$0H?vHKfa zRtNT_J*rsZwQuK*G%T`KeU97zR)*ZceYo1{1_&iEoY3c|=zt;WoiR@8dg_Zz?ykz4 zab2!^z4*iQi+lnF6|IoamKu2j@PWU!WmbGFl=IqYrTfWFiI5XNV%no#2rH;ooMd~ur zo|){E>32D%$VwB#K8PkM{^hvzy#n0i5LB;pB~sGh-#?@XTt%UauoqGJ=B ziScmykcLV<*w-)q@h-P3telE#sBpOPmcw>9iN|s-258vKqnIo$Aqp~vQOZ?pt+X;3 z&{ark&ajUX7VSV%qe=JQ9^74?e+mR6phe6)p`io}B9+y?j(WVSh;jk9CchctEA}VJ zW}Y~GAMp#EJGgrTcY2xR1Ton!N(z#`C>LNl{H1Sc26~$wdw;9}oq?x=7F&avggRo6 zV&Qb7n!x4ea{KGK-8j)kONNMJ{BzNInVnM1XwrT#pl~_{bP>3TzRpGlM{MOeJYQ^( zm_q$n2yL~~%du=sl>7P;sz$C#$Uvun>2?py=`t}uRFaa`6V;c76o@KQ@)YGdNsx@- zz8x&=&Dj2hB!Mn))D$(K)2r1oS_WWH!$}<&I+|^`Sl{LVH8av4m5Ow`yB4@7=;C%q zRNRjM3hN6bXkji_5M+M4sp8)wcm@ND?TpmTwL9;QiHiN6P~l?mYJGJRKx(sSu0T|6@RzGo0x5m-E z+G!h+fgJUSDTmF5or;h}QSS==LVh2Rfq-AZx_6ymlG%Q$*w-}YBI=g01v>+$2fn^e zHGvPpnW-Rc$VNAf&BkCfU( zNtui*!e1@O{>A;iPonuvO=?aYX%V-J_)Sj35*C7iwx1qo8Dt6G)eA={_iu(w=m4wy z^b+yAIe%X=8-0P0R|=OiSQ8!w?)vR~MK{D&oIpvTot6mfAIyjPdE`Ar$TOPcT#fw7 z3C%;dF!W0#bsK+ybJ&+tz8CQWB>LwIq+B2%O_IRKw!95DmDhb}pX{ly>8CYE5E+o3 zF--f_g|@+OCd1H&!IUjXVno2+6wmY~-`1fS%jO!4W~wGezMM#Y%UPot-vHSHoH_yw zRByR=kB3r7yt4ZOW<+ZU(B3df0&>K3xO_`VzWej)DcePj+dR04d>Q*Qr?`d6VCd_Z zfg4N1AjBC6Wm`CXEGM$AFW+jDe8AI6@>*mMjRzkIJ->` zqB1AxQMB>&RIhyIx3pe{`xId&UE>ZR#X{`7!RdM)!r*ziuZb@cF#gMt5{dJ~VUFF= zpj(0c&QduJKd-r24&DH4ZU#=60g36^eh-%H!V{Ir%$v1YHewT!uM$Or?)aO{Wz9Bq zR6pY=_H!uCD=S)(*>;@(>7bTm0!!&DsoT zj-bdFauzs%62squFrc{yv(XC{VDeHl0n2y|gwAZiO3>jB)y!c&)`mjl4&urrv!DhN9Ae@j$ni3zU`L1*ukSTsLaPuQ`WnCn18;5 zC|Rb2pZJgY|4Cu>^zRvT@@5=)y@37Dvo<)|M9rPZ@TxOj`u6p8^fKqm8U33Ljqc*w z278O0Nj#XSm>pga{V-e->SP^eAq&}N!9OOAqnTGPbRXYx{I;1mbAaj*mHBdGcv&l6|c9>{wQ zmS9++RP*d$pUgft!`0~K9#H3M0ad?F*M}O0YWw$?=DGOFwWYfrE;f}$Xn#w)J$e8j5&6KhikYwNL{$}04gL^~uUqn~hlOEgOj{&;?;{UoTO7hPY44iQN|a&JYG zP`=3bm?Z3af^at48O(6Po9)dMh`1gv6?{IqSKSUIZv3WRhSmsM-;^s%Ki0$dxpKE+LMhP^@HBxLv&LDE zD$rKJffi#e)eG^mdbcEA-Q9`SQHIQ=g-|5Bd0bybux59zA!Dtlx=(u`O9Z zzK$u%#1EpFFPcnq)@?Cznplibk$+Xlx2+ErM`Ojkmj!vsTn~#2+=9LCs*&~sqS0_x zJK#GEa-TulvG7h{9BN*VRVl1BXE)C(b>1;Cwn!R~#n=`;?-q-_aAD#iVnOM`5s4=+ zWZL$|u>DL2E{8Bz*gotqv{5kKDch(C^RqNM%m3qOZ8?Xi2d}N{Z3^=A%)RdWn&;sl%~jKEMy5RQq1nbk1i6u*Jafqj z@z{((ez*7eB9SpXS5ATx4gg0lPO^N9Kyg#ZEMN|nzMu&zjm*JJ^yfxA7E5a5m&xan z-j3*xXh_Q6>x_Oy?Zg!zCw4IAZVEFCNR8SBLi6y1!5o1(ErY(Plv1+pXzuUIhSSE% zH4!=)w~j0M%*Kd?CG-d)oKdNuh6nA;%!@ja1E))eeW<$E=0EOYpZV>6ooo!3;JKbB z+d@;P40I1YezY)C`zX_}N(O3&Mw0vU{J=PMK@H&F`{P9F#4R9kak!3+EuS^&{ox@Q zH*M?R=x3^aCR+5w1%p&`+cr@P{5LoY>Sh~;azh7e|8i_aHg%$SfV16)Mx(vhrhuaL zl5NhmbqL127j$NS_b*>{Ui+LgH7%<@A-XN%eO>Co5>L(oWQ z7MI6!il^OV0Yc1=3yiLw=9YGAvL=MnT2V{r{{yYlM0xgD)>BEve^+8kYva2Ii4`od&9hQ=&Tl>cbPd6~8>$(;2 z8Mlc-5_bCW?bvtGBz?^&mgxe8yzdQ)JbSR+VCySqqiVp?v1@Pl?dy%M^@9urdKHoj({%7BRjDOtw zjUkK?Bw?*N=X&4gZO@~V&wDc9U|y)Q6r$mLcp>C&Pz$m`$z^txLt?X9;$>y;HIEx* zzbJvdX8~=(1%D(@O6BRhdaMYEG6$xDx*LT0Q)*m}gjnCGPC9uz^JD14Mg0ZtBEos0 zlH+I2rC||hH%#AQuqA?4SLcGZ0WW3@ZJ9l@a70p8bXm=kOCBFMwu0Jcb;|KpNu0)Q z?VX{kT`0t>l5K+_-w8eLQC?B)P$hRI-=pmZVMmW@UMac2(r)yJLn&{!Sb0bmKhfPE zBA@hC{43I=!F_4Si@RfKQW|y&`IPfsQFcP}ar@H9KR3#A1R(AJwUNLeU862s5=HFg zo=zlhY4gA0_D@|`$Lgj$%W(2fViOeGH54PU>*+a^X(Cb&^3kmy@Fm%ZnhMyziQK)vnEL_(0aDI}fF4*1apP}Nu31182V_pbTtG$~t(AGx{fzxcwaVVP zqnN{q>$g0I6&1x|WQ;GG-Yz>rkhl&%rvvK)PysH1AseGKbs6=Mh^A3--yoOLWlygp z&J^pnp$fUGkG*sDVUM3tjxiIQCFuN7r@{QW3^v*V(_bl@NN?|;3R6PmrOKJNkPY(4 zsSE1@yFQ4$X1{}2i(!DX`lS>@PvCo=)*n|oYfk4(Vo9$=JmxEO-A!?@eZCP4ydlT!uqPG7l;6=LsWKi8Ab<{ytK8`n2vp5@~PdH z3}A`i08t;z_(4B<_NRPZmI$vKA!MiE>ZQ!Fn114#iadQ4nBaaIzNhD1A7#S&y+oeQ ziD%kAmjufEsoXlx5?8Wk|6s}yWxP%XGX#DZs2vbcq2R5fhKtGaS(bF6*_7(^pF*=| zWE#Ata!v2Qv3YnVSMk~B_xTbKw;|qmFX71^M&L^a*-LxbH zrOQGty7MdT`S}(P19WNq&`;`IT~>7pl^)&9p3p?v`FyzABPcQNM^(Y#SyvWKPQn@C zI6hZS;4o^KrkFl;S7PSodOHE6OYf0VY54n+Z(Yj~$2ixvvq8*_&niAXQ zxFdleStvgbGPvlf_C<;kAOJZ!L>I(X)RS)0Kly+pD1^zn^^Dd341lmaY z`1*>EkAx-Vo&>U8@;|)mCN*H&_3fsf;u>rtDvW0gl>Dg@8RS85%tFrOa- zy$rIySonj#-)eZ506ipc`HFVs3==*Ntq4rq{bnO$EUv_m*=V;=Edx8*J69Iaqlh6B z=LF^9DYo{_&9$|!60S#)hkSnu#hK}*H-0KOdfLTuK8(aUt8?!Vwuy&{24GczMCn(Y zfee`UFf_%Hbv{*S|KhkqL0d*%V{Kji390)!^3G3eHHSE*1!Fp94a@Nh{bzwQ@@C#Z zOF)WmuLhOA-tyA183cH|D!Mt1;?{v7~D zFERJ&o7IiT&X}{|0b>&4;|j9w1e@DgO46TBIXv$;uKwUf-aQq!0X%FC@Vf4qwPtF# z%6&zP#>jo(k6FL73bJ@@fZ)u0jy&t8dX-k5!&d4uZ*{vQSZ(~B=2AN{o=A_|(1kOo zfYeGxaQW~f&+u)B^98L;!QVP0^dEq04IRt~ZBj+lB++bm5S1gI_78Q5Be|CRac`qK z4NR2`fn1sY?%6-oseacZlNb$*NgDk59Y!5R4`v{B(^c-JZf<&~8B-}e=$7-d2`-NK z4Bis1uoJ_(!Fcdzc7TlYl9@i2=zX#Rak^>jKRbf<<6g}Y#&05i#(*Mw`>1^j17L)V z2W#WRn`7JyD#LE(6CgaeiY)~{U899lgww!NBTSU2!F8$Z_XsklMMrp0*s`xxwDCVO z%F^f1AsZc>j*HrH%O;8oMETKHU`L#oH+at&NV#X-9bB{YNZ!75V}z=!qCa@`M^4&1 zV+k(A+2|cSaeS=jt|5YtfqnlDIa7e=UWGc-`=LG{F_?VcfXqzXS4+EdqHDfCu;QIv zw9hH!$7&gX?aVQb^VA3rrxRE~_HMWw)Y@%p3MBHXE0RH|5sp`3jK0?x>^_@3A}$Ml0e$FG$Jm$4*yar;<|vsrz!;>sh!oajF>+H4t)-EHV`A^RgH$r&Znr`O%lb(?t&Zt! zZGrv5^dZqh&(2IQ$PY+1UiB+1=KEH-(ryd#vT%@|1JaPrnS>^gO9#z?d~TcJxZp59 z52>LS`o=aBSMN#KuRWN`I)&o9VcMX@Knv|(Y{>vb5LCXoj?8KyI#({GS&~%uUDHNQ zYpne9OJZfB!KrgeY#*)TIbT9z2233Q&DS|>&N zM;|g<8Z-an88S9GZp5_{8`lY#8%ps5a4LNx!V5Z;Z(Z@TT>0ZItg2Z+G-g%-zm`k$ z{4UFP7G-Yuc=Ym`xHLlb+_Hnf`YfT#3+m#@$1#1jXlWe&;a6+bm=y^ocAM{D+ZBI6 zo`2wL`LA9wKpq6=?J5U`JcwB{S-3=IK;W|S7oU=eDT@g`^>|9BL4Z^m_eyt{O4DP% z*?HG0Z^RmvK`ms=>7sN=moR= zgG8Aj1HcXpQD#7g0ZBy{m?XNi?uikCa(hs5;qZCa+#@nvKjw9%&#%s(VkzicAVt#D z5g-ZE=fk{TIM+e`G$>PMHl{^4$ROOJO~(ZVT*QjXH{VK_(fRyH&@7HCwtEMgaDJyz z1!5*~1_ufixaYP;14OZ=T<8%wa4m|XTU0?5Z*|X`dms-jwj*8x-)J)H@3e|7I1>UM zsVMN}&*-L2mjM>088~G1MPszI@MYsOcdqUmCOI0jZx%~;l)Rj>dL|DZ(;#Mu0W{$S z=|VUP4r)_Tv#1-XKBU9^VZ&-vt6a7sdB-hYSxD{h3I72$&NO|2_v-q35{pDzWzZ#b zITAurW-g(qo%hXhlmQ9+%gIUiu}kAkW&`=@G6Cw20<&wp`)jVz3NJKY-xEr}5~)KQ zW-ZRNKjvU+n+85E+IrH%mfvOD{A}GV_kH_ru-=uOHD5EWSCNdEo|fxPEB%RbW~9N5N>hXE)!4-qw*7@Kqjv^`8mK|M5UQLf!v@ z1PheRcvwX@tk(|Bc3d6kvFRyyvCJdj#d)Jh|18+HAc;QSw2<@9JtAl0Jl$AyMz&!U)djQ8Wj6bxmjelp)4g}-~Jk&21M(rpO93-jW1+Y306yYqM zO20E?g|Zr*lPpSexe%$e-~Y*l?1(peMx5M^$DJ&R1P^)7&9@l-(sLl4`HO|q^^@c| zWA(C+*}U4>Wy+%1BGAxZfR*el(>w2LJbj0F_R?XTNflr%THu?T0pkEkzg}4>X2<#IjLD(b9@u8hKMzFzUp*oJ@s|m|hPR-<7xRB-TK`Ap z(WF zvn=J56nrWt^8;(`mkv%FZ1wR&ufH?A&A$I$6${%6$cro~b(2@KhkI{gh`*MD?8q~Y zE~A-*9NA58GlRl~+O+FzcKO!r?(S#0j_<2@!AQKai&JB^_;4=St?#C*p<{`xlH6X{`T<9i(+{LCo&_W~DpyaI=;fiDHQ#e<%ZRHE zb`{9RPFy{$-XD4QxAH>9zTq=huYij=^Qwe_I5*r>_G0N+M+kmlG{78ehuDwror{<* zr`<8RoCbf))*4=5`LF|9pJ=_z;`#+!%VNl>&N44$h80nM%K5$U3G9Dj{{Q9h{;5}P z1AQ?7Se}N95mg@RK{ezkC979;h-jYTToFHRQLcT-QpZzG;)EaEt&z?5MtF6D#s>@u z+4+hbLrW(q`bUT@8oQ_Pll@>^kHXibjP1lX$v#7(ayj>9v zot^fzc7=`v5 zx;uBgw=a41uU79L4i3s3fYju8BD@I@d@#lbK^Dy^P3dve)R%aXTmqYY(s@gPyKJ^v zt?`!x5WLSzzJZ{ax;yw`$)pttO2?zB`pvjb9G&{OkmWwMQgdLRQ*;w@u`Tc3ky68m z$JowxizE85ExGAwQLXsF0j>-Dh7sH>B_%H&u*dJQdX@A%=Hg|x4C`>iX?smezVyhw))pQ|5~BHPQqW$%3n6&FRS^N zclgVH{)H3%LQ?++A;wK0PI4E|M1#&}wMWz_HQEs46q9!|I#QLeP8|HjVnbcHIq_!U zJ_Zq*xDMT;xW3Ck!@`h-zuRyA9nAlm+_VGJm6jDw&6L21qQ-7ig7RhgndaymFW%m! zmh^~Y8OC@4Z$C4uM;eB$ccsi@G4Bh}S{QOQ%^9dE1#BDrmQuNv37rEutD!F3PXpJP zbxk0fvOi!hoM~-v9`jkH5HoTbXrzeD#PdNO%Anl*_y<7qrrtmS{jZPuYpwn|41Ya1 ze_4jVtmt2E;xCu_7iRbi6#WGt|3b)rMHBxQhD&B(khqJTL?Br&$j*>(7f_fh!}(!l zc@2Zrc-_lcT#o)xc~4~Q!{RK8WrR!zfk>a>Kh`~wzsCNocj2F}WBo(u{Qr}ewAEg~ ze>;Y@1J%zmS`5%+B!^9El9KK%UWBqfbBVOnpm?9rB2Dc}9k>YGo6n-lov6q59KGoG zH`2NSC#*}|4aCDB{Y9n4)5?KZJ{P<0TSB*e$kzs7JGL*nB>^U-(1&@`2KHm z8=@n!z4B^TXt5)p6 z2)aDuizb6ih$B)(OV@48X%&7)y>dxjhq{P$7VMWtQm+|JSMNvpE`xEiLhpawlbrRU z5U=9<5$n-s3iCUCK3m=UGMYHvEQ-bd)6ENia@qe`V_lahpv%6 z7j?{to}B8$HLjoNsmX*GW;-5(=_{|;dNIPwCVI+G8A*>>#V?%TP!m+7q{4J}J$I8YN|%mxQ3F$wpk;&AAr21u z`Xz12rt6%*(gCmL6N5!jI9G1}qXOz`0nl ze7?`!ZQYBB&vc1bid0B|3?K^)hCKUg7!L{7+7tt*qe}uV9=z=tR_Z6dpAzK4eYGKP zKx1v6e*240OJiRSye`?==o(k2Ca)b5y*er}H!S(J)T69i^1MCmrtWc_7}1Ixv9AX> z?kD^IrX!R%DCN9!>o7P zV~)eR^L~?SJg8;5SJ%-y7?kLWBD5W}NH#;2u6j9g>pjZc<_WT}6!6>~+ZLl8y}+>! zYfb>d)eqqG7_?iZ2W+ELQN1K_wsPTn&GYV{i%C;)CF~KZ>pb?QCz#%NrnhE4A3d5c z#p(qhLqd$fg{ea)T^m%3?>VQ9t{3QtQ1Sx>?Orw6CQA?d{zNGfz%*kar-Us=J||0#CcWwpPaRE@&xqU$K^99Vfx; z-p-SSTZ}K5aN<_CdZ`s$HCP%w#Y<1cKbNgm* z9&MH~ADISf>NH#;SC?{C&O$9;uASTujq$;gX!q)AskANEjdnkwb9+=_r(}iR>!ro-QBS^%fc;HLIB;m8NV$F zasUp;h=CC+U~vfFYH32GD-<~c={bG4`*1mLx8A60Wf4L}uCP1p&7`i{+7aEoA zwmYq^`1a1W9{suI`iKu%rM+XEArn|YlyS)(9JvhOZ8BbiMs#w1#vtxI+GGJ=>aNT4 zGTP=EIo={0EgZR1y~YTSi1q`j_nW!RJa00lIP_BK0B|A-eyt+1&uod@`$Y24k{WxY4wz(O~yP{x=X@-#IcBF#Kv{*WCLWJP6~go^bv6eJveBqpAt?6+8|z}83iVNo2_$$UdSfB1% zHBqL){4 z#Z${AVsc$=tkUZT_x)`vYw+*Uz0IA5C31PaHbD4KjSTdx6G)EgI((2*V*)bm|eB(#f&Bg|6m*_>@ zi)#958G??%*39~%xA~g<-;CiWBK!YJX4%4 zmS-@-)X?e+g3SK((tW>J@4j$CK_g=)df9 zI(A&6{K=FBsY^@Xsm_?^EBq(P9;EmZP$DGu#fUH2>JLeZ!3CP0tI0JNS(7|vr3AZ# zURPUkT0VOr6SarE0KZ6TYiL8Dzk|jDBo0YWzQosuQ-;9s@T&fKU0!=KkoF;)RL+@3PO9XNq4oEMsVmoZA-PiM9o}(Wz^~}!s^Bx(&Un`7X6p@?^aQ}Cwh89KFViUmd8Q6{ z`{fxZp|i!V9!FZ#5lBvQ{{lM3gqh|{dsk#Sn8L$c zQU;tTR^(?V-m~rDHAC#qjqZ6;GF5U&6kEl6?d=4j2B$mxLVH=lKF|q!6%jZE1Ugl& z?gq+Cp8!dfdN0tNMKb0(0L=z_(;Lz9n6gX#FRBZ-I%-Y4-Ck$n#WSLMqAN9ufiUI< zYd_O(2qVs@Dn;Ky#ciuds=ursmarxkdYy`U@ZEmT@c_Yti0^>Lxr#f#CwWMs}NL61_?`gP-`aq9T#?>*i#TJz*bhj2Z(7#(*BCg7O>43(}-05iX$h zQRmgpsX$o;DI7(2eHrN?{rL`Xbg`- zwKeXG$_L%-vV>g47wy+VhC%$KJ!vVC!I{00uokIVOcs0|NRl5Zj)z z4N6Cb@Dl~A@7%f}isQ~wWo;$R7O_3qBSr!!LE|RGi1Q{`yYqP2$3Ey=XgBmNH?(8m zo2(xl)**5q&kM}Dh%JxUnG!x~n^_%1q+$BxnMkG^`X)S8xf$xE3{kdEN!tBlIb=Jj zc03^T{X46x_XZwzwZ6P!RrpD4pZPwZ2pLKD>8CP%YLQ*76rP!HCx`a@9Dri*wC%%6 z#?|XYl+IAr&yo{N^yfK(^d!@Cu_Z9FH{c>(OJgfPG^P5|Qzv!gf%iB3 zo}YU(sGLDm#;o()4CQd*oPn^LsvVBgenq80FlvdAfkASKl~W`fWmczW42eU=D#d zG7bce zWb@>Hs#zHd4-GOW-MF9Cm06y1f50ogaJ6F~277V!tp9c?VlC@`ouls`(u3K4hxGfk zpH3~-9ksrq*wj}<3_1dYTE=k<3j17ili=cL&k%%Y3>2_HL15F zZa>6!=RY4Tdi?}Q`NC1wOdll8r?(-D66HWqD9h@5>tQ}d#OmszzS_lo2}*Y@KxltH z#KZ7TGG;yNihZFB$g3_#L3R`yj3(`Rz($f{atb0{Loo~I=XmHB3)cZ=l-TzdIu>zl zB0?o1*p^%%R!b2a1R6&+uj>4xfp(rHFPoX!5vkorU!7eO;6wpxPxa+@`H&D4P~>(= z+uIMG=!+6cbCy_Hc0DE5(-yD2sNIfKvnRYEKwB|$PT_NsBwd4^1ER}dV%K~m_-hzZ zdolThp>>C!YmjoB_3Pz@>ks3uh1u$q9G4YEAe$a#|9LK1ZEE~#(N*yC+6~fLD8o1=47>^@+E~R#qZGysUNm3 z2y>#30L`R3=$lJOdLr78F;62tFTc&e56aAc^*fS<4E&s=8NFbODM@+geJV?(`<`lY ztCa+7`x_&Y{+j{xVsIHB2&#p}bE|3V?QM$!x_e)$R_iTvTJ6>P!1vhGeAenHVA`$t zmp(~G7;sAYn7-reeK8V5Y9YBM4X5nFHMe-A?ZW00+z~T`W-n zPW=FCGORS79ulMkMFpC7p0Rsnw7YU8&5!XI)`k4|#3Kp$QR9o`+udP_7?b^P9yrRf z-qnCj|8b=0$;^98%#fiuB-DA}06`YTHOel=ba-2)QjmMQ<(c`hVrkgq3qwRkT2HnP z+g$t4uy&*YrcVm(#bZKnVwvIiXvdZakc?B`*HO)hS71|I??i9uVH_%$p_fF=83tKtrkO+R`r;d6e9{ zA8@fZ_kX0J3;j-F#kC!F4QGvLQ|!!3?LL}b67??PY_}czF9P}|0zHAQjMj&oyny_W zfZ?dj#3={GP}irGy&f(GtDessA1U9B!CpP-%x1R#S`DX@sv+G!hC0R7(PwMe1W493 zhO>1ety3(dwRy0i`xu%I745dCz%$}7XK;z>jygnyDMwcdqMe3IWqO@xBDqmt*HGu# zF|Y`^d+&4AUL#`gU%k!5p(T&GRWRn?iIa0zRU52c<`~j=?~Hw8SE~=V4rG?O+!o}D zOLKm9>9Ui(TU)$7>{|@94kvRa#{-MUw^kNlT%}e770~DwxUmS`O(z5V>mB_0+$YV{ zdEtRtAfY|a-o@To$EXIVW{lBZJ>*f{%iimQ3IPblOi+7IROErw5C!HN6y@#+OQVR7 zEdth3`>*@*_wfB6OxOR~%Rgh_D(;o>|6bGH3cHTAoO-&yWREt`8|DSTD-fjIlLm-X z<)$er90dLFX?L@R(+zR7jf8i}MS8bpUQ{pQyRBeSmSj&yclB89Wk9`3*JNxVX+u5Z zi0N>jGSus`9?2u?j8>HQNqbd}0j>6%yVTmS-1dY740RBhnud$_lLX+ikDF;%ms7emCCDc!+@4QN(368IdW!0P{N_znJYH zd&PSKLNbg5is?=4I&-s0$fJh+yv0WyjXAMe z`}6!QZLCyoYgeMj3MJ>Z{^E@j&G6|pfvx3*%~lfN1@=W=xN<4Q$B8{f0F-yFeZQT|S=@Ge{EQygP|p#u4R)K@DR6E6Z4=&~LtNkihDb|jMCPkV?4ymTG zH*$uIfRCO(3gRi?z1m)LZnIwI{Jtk}`&|m2>;<(KNqz?JV+&m4Bp36Epqk6VeFP?v zl|$2oUZ7Z8$k-&%TKjD8g2`yV7*c;vnQnJdF-7!MdG&;fs7`~LLT#;TaXgLfHeSQf zxJi>Y%pKdZ!2k=Cp#nIHPb5nc!SKvQj6%(_8fiTKg^g9_vFlH@1mbQR+8(f&G#W8@ z+gbqI)Ma`DZpr&&G*;R#mg|h{AxY}+vW!;#6Q#yPM7(;ubMoEB!^%Ig;DiQ&I|hjh zTosDlgi$}%1l;T8^tt1oOHn?CbuU}|_J$9|PJXN!`f-`f{vP^$yv#x^Y=a1h6?+=h$zx|saH-m5E@5~%_#(7pr6iJU+5>!1^yV189{w@ zxmD{@Y&&DVusn1JvDFV4)Zt3ICNceO!3liHD4w?3mz!gUdiUhF>RS145|N&b_9gcd zWQhz$?Fgfl^gez{Bg?AkimH|4ae|l0Fb{efw!H-W5AkGn;r4M`FTQWDw|=o`O2B@2 zL0g&qIpETli`$vZk?L2>1#n02Ug1~RJ8vIlT0&AMUO+xtyXLE6IMK!+Y4h5*3;4)W zaAl$-oT?Dqch}Y=qS600@NWqKr#c^eJq7;m1gP!G z!h4YyOD6SLc|sIBiMs-VE~q{~yK?12V=SA+$oP}z?Z|%WoH-!)kpVZf0LIVnKgow` zD58-D{PQ^TbfdZ&C*8nNjo3FH9(w}s$Gp4dh`#ZZO%SKIpD-~a1eT%&b2d1}DGiOA zBZ=1U);*pq-z(Hs`Th7@d-_v{$r1vIGguTH|6H)TLh@jCJ&w@|0nR3c@M1Sxt6FTg zCY?RGOoFmmHWhk7y6cFT?>Z$c&@IH{+dm>Wx!DU%rd@KC6#e?NXg z4YtNF|0?CX>_LxLuV7lRs#S>O91cYP?zPg?XzuC<$IymZ7}-UW!nT+1D%E{Xdl^(3 z44ZQQVj<=hj<+KNps^mNCu4+WhNBRnwz42nuPm7=JM3psP+yrg2sabCZoiWUS6Z?w zBu#V+2&XW)@G%?e3h^eVlFIXwDfzg?I~?UJEbXey{AI zVkp4)RlwtgW%5?gQ_drM*RQ|0=cfIoBL+f%)Se31*L4geD8tS;_!YB~i2-!h;a9PB z{{@EqI}C$R;QapfR>xzyB&GQJ*-1gyBRgAey~-b{W^0#O+9-w{4;DQ*QSFhQPUr08ov0}be3FTTGvc~R0Mtqqaak4xN+m8Ml zBz(`}`|pA(x)ReTpx68tOS)|U%^WE9JTK3${>5_Y@`&ilb zRoht#JKS~}0r^44inYN}1$mOohswbkoY%Ju4yU>l(9IJJD@0tCSc4`mbf`yHbk9G! zZEDikqYv8#^xAPV^q)v&n{l)SgrWJ6diqOIW5~LP9)^g*y6U_zP2#BSXbOI9gErG; zMg*kg?}?H!1(MF$3;tHO#ilI9&sikK)E_We#a8`|*!G`qhr#?A+fj=yc&H|ah|JE+51|0MR}aT9E_HSGYca*U=+ zqmtl>R)MyP=hOF8mu3pS`qDjX04-cn!uhw`He-pW{-EOp=@U8SGO&X1Y@o6R7Eu-o zT#_>uFWvllbjH$(%XjZ6HKgrO)V@R7mzBJ3Al8H#j4_%)KZYL5_q_Iu1|xHj z$9yzA<<9E)+RfgY3f;iva<$7r5dvzOw~rsR4hh?F&U_fuGtQWgHpKv;wHP62@WaQY z2F>K^UezCyo$>cgtgZ8IG<|W>$gwSH3p|Zj2Aa4A5F|WD%_OQ2h0|$Uv`AgWmU_7g z2PNys$e{abM`EjdUd79N_&$*s0E*(iV6AS@Jc$qrQkv`MhiLCVxNqvm?a3rp#9t1P z$KpFOZp=^YXaLnkD$oq`g5L5Fdx&zNm>f3~%iV@HX3P$Z%SF@F&kr&*nm9c}@kb`% z{>Wz!XSavrD!*UA3)6ro2ad9uB%YuHQpK6{U2YXcW-YYGql)>7Z+PxU^4#nY1Km0T zK6cn56oDQ?2fke5ST;ZkH}%K{rRe3RR%#?(%WRl8QnPTJ^|yAUUBAM8ZSU)fJw?jirbC>;z(QU21IPUlSrQ@m@T|$FN$0$vUPrt zEqy&J5>^U7#=5)WqsRaP3H2$#p)SeZOnY{cK{xwZSx~c#%KO$^QoZ>O=eim2@UX{p zop KKcYQR6BscnU658W&B2$vqK&^L%x_UNzw7~iFdKB2k*B(jaC5UQ0g}7*Ge9+ z?7Aff3daUeJ5CwXcLnMWL1Cz{CR`q5%wy-gdD1nZH>sOmqZLfPVPfhCr?_K*HZkOR=xegQ6hI^HjaJrf#1@RefZ#XsW%*cbz>ugweny zyP~hna}yFVVok|pjGT44jh7yc66cKZv^m}GvnRv5J0rGI{)92C6!ZtjVVfO54en=~FrYva-24jKOw^aFTz$C{zEvb*ht@v64jJNb)FJ`a%jfG{6I zCK8i3F=T^;HA#{U%MQC7*U|A{jpq_)pPlnzn#5Yh_zTXK(mB!6%-fhg3G^K%U`Oq< z`Un(8&{t5ti_=CUH;yfRZw+zqFeu&Sg*h2b2~7Q%sNNmBKQ+b6=n5Wq9~{{3K1H-6 z_^!5)r9JeEMW|Y>OgnD|IXSZ{CWT<+6ePoWf8oM zX^zG)Jwejh-X&b0HkL-H5siX%-Sb<`h<7Sa$i8S)RoK$GPcyRa<{U>7=Rk}1SX7$L@&IX=?Fr6N=~VyL|) zzbNTKvxaLzEcKG0yZY{t6d1kHPu-j3%9GZOzw z+arEVn`dv-@YkLTE&%}k^P!NSsf-@Pyo>2i>rV%O&lm5dgf@fHzKpfdN|WP0Oj~e@ z8BXXb?VA`nh_EVMc^<7rf|0N-*?gHZS!d8SHj*?tt>6pk{r=&%b%NC){-Pk`{Kglz4Xw>*H3cI z%2~a?BW1e58Q1}Iqsg3wKwGFT6(iy&an@Zi_~k_BHh+VTwucDl6!L+=2W}uB5K^iF z%$9ML(Z)z@90`VgKO(n(SoLOxx}348PFk5>S{x7R+ej8V$f5JJQh)YQ?5z+hERZ97 zseq@M100@V&KLmSjTj>%f8d-WVq#70Wca05iq!ZO3FG$Bvc(fMX&OhOC2qD`oqQa{ z(ZSD~7$OYdJ~TpELJqX(F*1mQeuZAzD-06e;!VML#l*0KmtdXzzGj{F{Ymqu?#~j6 zm17E_aCO>LRB{$!c2t>koU^&H?y+^d%v_S)X}_OGjr@Mz(j!WRzVWs66&if}AWKda=PhoUGVPwEF z4S4lCPL+cCp-gattB)(%O3A}&%J3b3fI-E%h^#Xj55G7XFD&5g2_|rQJYNbfmsv`T zXLxP`-{Kd|veGWP9nPZvfxL^i^I*3d?TraP_o=GnG8OPO>iQg+X{|tTf1+oIC~!LlC6H&Eaw^7 zdjMAPL26GC%-b}X=`Bh>*8dG_)bRG^3P@VmS}X+uuOlRqwF`}x7= zz|ORgqJix4cX0CGFbYP3(;+=qD4E*jSWnkXU;diUag)1AQT^G@3EeurIk8+o=6D3A~6lx zU?pk0nBI?c8DVr`9An$D*r0fE8Z#z1vNG+v@2r~GV8>3ww8yS9I&6<|VliaZ=vn%~@@D`1`TSjqZEPXTMZQeZ-?*%uA(?{eKOZ)jf6 zWpHO*ti0lti#==8L3a$_#0KRh$7)b%_dMU7kt3DCa{}Zx(zg+D~IC`npyR^>=3K!+tzNh>po3-d9ib z-m@sk6k8_0a`AZIB^D|uVJ5>To*tQ?bE`^{pZzVkh1QHLJ0{nnA0f}bD)#SFo7C*y}R57YrJFKth_^|!hG;wy6yfYQ2N)g2N0ZJR1SZEc0u`=Fk0v}CARZvHC5wN zS3Y@0O&%L~J`mS{XKD4u5@V44GhIYQuu%J$UYZX1(*}n|Q@zg=leg_2drZmzB+}mFGG|9XZS*kC!fW8`+O~ zQYPPyYyk~$4U`(PR~JzZ!go#EAw?I*ZJrYUANJk@s;PBb8%D(jDmG9-1Syu#1SwJj zC|x?C3K0;c2uL@SL{UJ3^d?0D(g_einzUHxp;x7d0wENYO+s-&$o^l>Irlr~-n-Af z=iK{!|M|W#_82TjaIjX^de{5TIo~;-`8;7Jci7&Jw^y7Fj(J=8HE8e23l%Kx*rpwS z#WVaJxI$2RTP?x?S&kVrfU9j553~0`aJ%DcUm` z=@W}+^qY~ulERCuL6)rMW+Csfl~?!hyq~Jf&lYj2D{DdCM&TJ=Ec?I^C{)vX1{5}9 z7`8h3W9DiF!Z0`TNR~IMgh9Bz(q6RK+xAR-t=iJAAR20clQ2+cubdU+LNf*%o`b8~ zoK_Jo3zY{&>^Ga&AAdMK$9Lt#uu9)KZ7%<_h)t5h%2?}$jA;1>&SXE&-9-h30xuu! zDQq$Cjib|mckQxZ%^ByuLv`yIUT=`v|P_PYqIkW*Gg20JZa+ zM=jA#kk(UWW;fD!IyRf-p88!y3J8fOP1+`M0)Ep=J@ac|J5~x~U=+XySuj~;MSvmr z4iRl3TWF12iOl4Xj`FoZ)=9Ft^}8lX2}oE8y>t5u;xYhi;u~-5bJ+-4Ad|N+SIB&!wFy( zx2kb{7%|j2Y`&>Zb3&`R`g>?C4jhX#Ixa%CzrdYK^Wk25+iUxdMit zYmQLs*tJx}cVUm8zAP!3)q+f)dND;?j=q9+MMYevzXkizxzh3gQ2YAoR*Bk|;v746 zvmz&J;7apx8_A1_F3r9zNNUtMiXW;HY!^WIN!ytM?M8c-mg&QxRcI?J2{=3Zk zOx>)}av*__h;0&~6X;_=-ie3eo+i>zBm4ku2%VGZ6ZB$78jijZy7eGt)k;}Wde3^p zbvmr6zW^{b2ZB&Yc4@A+i^#{&a{(oRCq7}f2DPnidRr{bz2}Ehr_B*XthwxwDmk{@ z(k(VG!BD=YMBbx`Q6oCgL9|%5lEpfa+~JAG4>#lFSUU737$f8EpsFz_g1Mql6Evqo zAVnw|jUXj0EOWp2q{r>?V6TtC^ItT`so0)rwk!VdKWd1={Dn#MH+}hkk+}M+J^rVo zg#UGAGzOSXXQ+z41_+ZG4+cAF5=-zG$=ETH>QDeubW8^CKO0?f&wT9k((A{tk;)=M z<9%U~)p|$oZfSwwficO@)7iTW`IXrb%JWQ2yZ+L3_}`-K{n-ynQmOQWp@tO*lZke7 zJk|mKskAsJ|1;ZY;{MvMqfU`BIY!q{E3uxpuSiFPV0sfUGLnV#{JH23);DpA&Z8#V zvaVcZhZP&Uj$P-C^v7v^+50Qg3~ZV((S>-98tswOApdw$0L^sQh<}>jL{!%J8MnWM zX>bm${qWy46vs3%O?W}1FvF!3zC)iN`5d$(+RY!C=i?IbiSNpXdAyZ|yc*Yo&xv0& z;gyxPAo26#B4z2P? zERHhlYiY=ISMrc(e*Ht&succE=@e2zQGbD*rhUD-^c%{K~Y!oecEq z!EdVKpSA`h&wg8r zyRO>Ik-5%fSKRieH3>z733ZFQL2fO9M0^U-PSzz!MEmm?VXf1LJwzbnk7NEXatyVi zZx{$HVp$0MAakLE=@CGMQ3KQ(=~UX%#K$Qpuk)JlYM9{ePc#c7)C~N`DF4RoAF;17 zM4%8+@#5bg4Md=>Lccf5{8@{Z0lroCGFj45#Ak*(DOXs^m?PIYG1x{m!O2#e#oLk9 z=RRV=2EdNev9;hEpUqDt;D8dKRm#AIjrTD8$`}h__{+ffbF3rFV|jl4({P8#GJp-+ z8qQttO%+V6j>u6>8sT`*=I+j{&CZXNVtJN%pWS3fcCLvJToinJdI&vy_|*`G4^TW;I{HTMR??=`(Hk*&$x|RRoEPj6Td3^$tXRZ^rX@E*eu3WyfAbrk+I$3Aw zBo_$$ASi2~K;ws~9Mz5-Ea`OD*CPI&<=8`nl}vWjG`D zG5@ZCqcj(iC|0u-Jw05MCS6(f(5BXc+6F%m7G zGm|ZKhkJ5u^T#^8SDZq)1yjFh=;a;%6`o$6&Jqj_sar8X$5BL#JCZqSE}-1JYo}u=sv$u# z$61&T9yXk?Bc#ITb$?}&AW}D>dPb}(9JG#Xp1^bw=uJ&-0HtoFzktmf+fSd?m^&9+ zWWG2$^%CvUR9#gUjB<6TsXQpB{x$UiugQLjn zy-5OGM$FwdqSJTedg9DxTv1PHwwD{paK&};mzmo82neKFl)ljWfmx-T{*_5?P3%0d z_1B#)>d}s5o#Yg0$}Tj~&FOkNaDsFP`_d6I8OMEUO|5%s7=G?kY17-p>rA9i(dSyRS;g=j<=SN_-HV#F zb;OGD(H~=Nn#0TY9iHemrXOWL|K`C-n!tk#k2fP9U&Akf8w9}zY ztJZ>)1rK(3J_$r_W^tnTbJi%s-UU@@OQGj8Tqf0P%tXJ*)!_N}Shp|%oDaI1CJfNt zJhW7bM!!!XPMHoe9aWQ&jUAiy&VI&{_bXcSBP3cps|pl2rMRSF8_`hra#sKnfZvxg zkk3TgQWUuKFAJ2H%1Zlfrh6xb!uY7?Y#Tw zt)t~yd%r2YxM4mU9?nv-=D^NnEmU+MqsJNfu;7VS57eZLoFVE)3o_^*m%P^-v9 z8^f?}D%wpW#|ra2w{kOLF+{6&llWmPvpH4ly)=^_<8Bc_<$nN2E3jJPay1%rl`#qz z6%plk%nL;vii*0_+3CysM3v1DOJv7L!zn|S0OvmdikKMMGo^bNVdoVc!QpD0kVKBC zGT*fe*6%q8A9x)QuYQ1D2R0Zq#qe?`aXh(6LnbKX&#_j)mn|0$yBm(-PiN(OVY8&* zp#IQzZ zzgb-Y@Hwo~Dr`_P%^@>p%qo6w-LAn{gbJ+%8DD+Q1EdDQT`Eb6L2W^-J<$Pp7aN0` zk-$%atA@Sq*^{~o6}N))1ou3;A%2~uoPS2$?I-?I;2;#aBP2xZ6(b=#zw31SMAQd3fp`be{rU#es)<)*r)4eh4bLUC9AxAw>nLwjr&1?9o81pZkr6fYQStDbuO zhO#-%_6_i7Q!!|NS`D2N6;g!0kMimrW#|lu_ym;5^=b@=*h!4%Xhxo?OEn0x;68Il zL0OIRHYgnd;A7Wb0|zezg*!o{Id|v-K(wMv55sf!yArtQYX0TfUa^TlEm-!D-n{P}X3x8PaUFvjjxhXs z0n2^yzwQWr0kEQ9ncByBp!O*e{0iD=QIH>JSS@1zV8&6*Rw=ik-d%<7(duNjD6tCL z1W*OI9sOAsBrSsD^KDw#+$&3*tn+v7gxw>C5-PUrXCL$KLFMq)=DokPy<)Z)1)~F# zoBo_$G7vZg;UFh4Dtl*>l9sPq+t7M5ylc~Gsa^^LUEe)mec|V%Q}&B(tkuq+Vn=tQ zczWed&8dgGQuGCE+6o+#Lk-=1*dJ;wX!pxnKGHn$T!WQH zPtjaDXBH!yh4~H3%|D!X`*wUdtu3*W4Inh~G6I6oVj_!F2C|L0>7Es9(!fle+m*(T zkBOoO_?4Fb55tOq!D&Gm{vA83|SB+jS^^7y=HR^Q&`e0yFC_T1wI zmi3yMS?-l59P-u>8)kGm7sI0stfQSr4Wn*Q2ek)&RQ>c3vJlB@^4LFA(kD~YcWvME zcSaJpJK5Ytcr_$DF#cdTdt|_Y-1+=TpUeY;CleZKg1pXlI|T*a(J>Rz5_r0|V79(4 z^2HGb5hFxpx>D!KWiX40`$C7WOtN70W zD1jGMNQ*iZ*MN6|6ld{6jr#oWoXA_PHh8bYIT9H`Z|XGTu5hysmVU&4`rAq24z*iF zcSpF3jRA^;pr%BxxeHB*H`bQ=dV-bWS{*}u!_65l@*gXm#sk3i4ts$aZCMRG{S!DX z7D3fAcyv<>>~#>+~$ z6xwJZRr1Q1lk1VJ0{sWPZ)#t3J`@NJOKstdIy^e#Aiwt&ArPE!oeGQ_8@V`@hull? zPQ8#d8zegR5NT+YE&a;SFr?BaliX4prAy4KlmhD+Yyg1l@8wFasUDv8W$1kn%*kC6 zGf-EPzD90R%0~KcoUoC78NwWPjJb#U4qTpjeCW36Z*}*oz*sE=YDgAi9@j+qzge$k1(%3*cd^bJROAg zNco{8Hdtd@dQ}sXg4Rj5Xt#=}iHz|lZWqn!(bcU+R%07qziR6E zOiL@gDuFA&l=#FK^T}mOivheBc3P1*1k)k&fe-wlFO;cFL8J0PZDF}wN%RO zbYD5X5B3}&$|w`?G#*+sXIL^(8bdiw?{p7bv&Wg1jaTi%b3NMsKbGUlt3F!QtCOQr}OqQ`f^C-xYtGjM?MSeB^wH{$8$d z_(Q8ZuLxxr3ZM5fY~J4$N9mor+PTh?w1Amo4N(4aU8Jw-VfJ11Pq{Yt%N}ZeiCn-o zfq)Ws&uSb(lHwSSXh-WdwmC5hx~kB{w~yT+Ai{;mNELBOwJ7Dn3+}Ld$=e{w1A=1N z^N?=lXCO)p*7u18V;xjBBXPKaLJ(P5=}J!1>r;F3=Sgn}q{U0d;{|Juq4lP;_U82CX}z&<8d5=J|sT+ud5+bq9}&8R_ZeHpw7^ zuPir<=ROoF+NAwANBEyYI1xVZK&|kem**%9&wI20+E$ORS(_TM4yaY>Ro!z@94^XB z?>`^jxYzfvq=8j?exw|hZVq6{zz&Nj0Mjq4vt#yM!9QV?#tTcN&+63Nc&8?#!766) z&o*Uin86EAmyc6ZK3>j7*c-1ObU+sUUL5?Bhv8*rO{Blaf!bFXTI=Q45zLiRRu{9Q zxF`~-`l;e-4tC{gp9;_UR_*qez?=KgXNhrnV6Aw7o;_3m4M!d58i!6GY<&)=b7{;Q z+78`U)0&F#j~xYlw0SGjgatS$!xlgday~+M((96u#6qj&Y1U*D28C za5c!Zmy~hKDy%NR<_?xWz`NNbFg?C# z-!bWEJSuOGYnG!Ci;l}}(s4C`?Q0$Ls?YG{S$+@B1Q!v8g@L%6Az^9LFVTCPD1nNa z6A}?^JyrXrHl;SlLtXZ&_%BRAwX;!fvJe4PoVu-$Odi8xP#PivUTA)Jw2=FlEU=UE<~=roR>+O9e-4&#k>u4Jfta1LXRPr zY_uKP@xb&*VDoF|m9gf>rX!s{Op|)pI4-;OQ$f$ne%2;OOF7E`Gx-(h1? zt)t7MU4`u#V4jb?k!2F_O-8YY!X5|`gtEYfT-)%0R>(qD1VOzz%-qF9cl!}Kq2NT@ zKvT{6r*4zkY0pd-_b_|1vDg)lGCX=|g&+YyCv56i59akNOy%lq%6G}By_ZnT$l{DP zG)o?fTV9IC!ApFQBmpThMyWUo8aS`Y7u7DrvDof|c)?GNmo#YenZB^B6WzrqLl zjg(ikSyCUE8V{QT(MDG4J!+T^J&8I`Esa!c*&c4`8Vk)Y{4671qRN;J%~}hEY<21A9_1@#346*P>{KfeyAGDaE2J( zZ<=aM=jvRa+a*;Wd%3WXi8KoHWY==PDUR4U^0&|2@S0Xbjn|~FQ>AMlt+|>ck*ikK zs{%>8nPV&JI?hH|hikE0hS_TaMM|oEM>NzLd6lZ|f|NqVBj1d=RUY2QCbrk9OyZ$^wk!rXlFhYZ2kOL7Tv3OueYfol2wsEU+za8ajS$y6kC* zqP*3^w^2%^s9mHP*G)SD{%>N--%AesMpEGKaUuT3Wm*8LH1iZP0gbM*HN2SU)6Bo^ zaz-6S{{bgOna~7E_afgc|QGA5?Qc3i-?9a7+!2tzn-x!C7l6< zVORG#)?oaRmqjXGdDfa;jzzIZwLP!J=QBAJAGaX2^c8%|8@oxx4_b2p2?YYdE)ZYF zdC7MPj zJS|llB2Y<|6(g%jb{UNcBwjOa!?!6@h1%l_2Rp8zU?>iWdb~v4xm*+5p&+B zTW^$<)Z|$c4BBj5IoAi)dk&J0?$7t|Vt!C7@EG9))o~Ct%n?7hP?ylOu=a}HYPMSGEZCsZjPX^ zP?tZaxQXoWaPY&ocodN&lao)x3b^y@nX97=LsZ#zVVjyk&Hn2wd?g1Lf6?akIbW=p zrS7Hj6UFFfxRjHb$eW=hPWnORrc#hCm@kSD66&AhHfzTuX4ut?N=0&rOHs$vJ_?E-OZ}J>Id<{VSFPO*=0}5CVUIyFe~jur`y-igf!;SN?5!x3HmK!(*L+)p zVLtj@bMj}Vz3#$I#Fqu|AXCt3P96dZzZ!T-^f>EF9o?b(t_~L=QBl{Kkg!@$Y5D0w z9N0`!mXnF1aG2Dxj3eXzKxN}S1L_aF4>=&Oz8Ze3KD0k4Y%#q<>*JefYyny=+5Q%S zDn{QjW_Th=n}9qv3J1NRY_axsDSFv7usY#gjw$6{?dDTsb~#kxU+KK-_};uPym_## zXxbARKQ*kwzc(2~96h8G&cmJ-&o>VYi;P%2eK#PnUfkXyFxw7$Dm}vsrE}YG^a8V)L=+B4EYybf*$&(FSQGOmfDZ z%EpnB(e%3eB$3?3f<<(RXRNN;HsQ(F@kE%oS;dlE3of~Gs}Wqe~jy?5d zwIl+|FvawEpw-ddE|+JQNd#F78yDl_Wn=n>yA$HCY`;*OF!V2(fO*=%oRmGxhJP>g z{SEW{r=aQ|Dfj}H-NTAgvVuHqq026Llc-dUV{MzJ_pk?I6W{2VFu%S$qc$Iqj-Xzo zZ_R+Vsa`O;&(S7BL?NPhiR2So!EdQKmLVZS@w#4K*EA=zqcSgPPAli?txoyJ;aA0e zXCq?3S&F}xWpQiCziVY|Vf{gehlfHj$F*1CI`Xf%gNuT-6q#C(`@!v%&|785o7_N4jKx3O`VKStlp(JKdN_#%A{TXWof!RGJUG{728C0N!Z zR<_^BxHr(Y;CeK=(ye4@8_`Ja?<9y1k?O1HnRp6Nblw5;H79|ZRCp@OQ26+Z; zOhkP0!r7WP?+*kzHT}voPm?;VM-q14dx9O^;e0A0-?FzrP9cI>|FY(2e3{w>tbDv~ zSQPB1J{3TLrw3^f>HyhGOXM{1?@ezQJT;PhbBH~4T)iwoX1Lh(i}Qg`eEvPn{*glP z3qRG^(P)4fs|}0*5=*BrbI<7GK0$>HJxI)=Homh?G)stdfAmxr`Ork9!)Eb;5PSck z4%wI^=J@Y$XajiD{eabX=DCtLkv>0k|Hob0VR98H)#0vcF<%g~Ajdiv6fR1>Q-wWZ zw)ZkrL!O0Rg8@pfq+#Z~7!RNbsEfq{>LW#Z%P-Lp3cDIesh^x7shAGh=@I zOFsKJdk{#}T>D-E04``ZwA)9J9QV}e&;mVVVvrYUte6wf3vymwcK;##ZtbM*c{{%F zpF@Uzd7$U%=8BmeVa|$y2ALJvMO+%g&b=LT{#F+;Y0P>$ugc@j*9*gfSpCn!ZYqX{ zy!o!En8j~Iol#}Nj}S#Ml;zLL^nB{)mr%egoFq>=%%=1Bc6Ern6_E+JKxM2?GLfk84Db1_h$5rvT21IyLnx(}bSbW;Ql+8BX~rrxh8Bn`O;S z!W~RDQmxw9&Ff*-d(IcU|9-Tyi-G>V*-2LQev9ZIZVx*=U~E3I&+q)o1U3LX49i|h zFVxG{Llgl~x4e17@a%Ba-pz5X%Lm;dsfJ7#-)CTgeUy4N4Fj;o3Bak4sI+*{3SE~ z8@usb%O7F3b3xL}B=qf?sO6i)U@I#;O3ldJ!6@pve5jGidW($)83;W`clPo+uQ$0; z%@QhKidj^wDG~f!+{!z63c1u*`CGUXwoYIh+t{y9SgQDaSn?2PiVr`L8alnyAL4)P zW8{j7`rk&yJ5{GdmpbmSl+|&f2o(HTzEOg4(ABMk%&ujds4aKp#~H2tWoH8}E{aHXA2P>e>X*Ij&rN(ICWZmm7pRN}rk;Su^U+r=BHp9ou6sYic1UepAtw(0ljO#>Lp*D>FCXamga{gi`& zA0@4l_H>wz#4e28O@4Sl@M5@)g=k{JJ}vIHg0LqhUe96Mej{sENSM>9)XDcx%LiQr zYkibY3O`UceCDSXwkxDatoR1n=T(z7x9s8W`x~sg# z=U&XX$cMrM1s%-yGd&P7CdmL+vP`Gj0}m-fOQzaeglW)-iBde*<};G=Gt;>3Is=+( zqfFM0A3K@bi$5g@Yt-k+x>Sj%B~qjsK9C8}`$j;lbOB{b>6PKYW!=s|6u7L`$B~vK z_84^WhnF7M5}kg^g!SAWW6-#4W74&M#-=bLL!EL2ni0wPH5VkZZyMt zd~Nw?HXWN1iROfDodWly-+@b$@#lC=DS@$eYmodCtMR#$?7JN=*2HLLD#GmT_FwCL zKg1lRodctnf|Z!caB#^80((hdbkljMlj9$qG9J_omP);uE9#S;E8a0y!8ZNuZ|H|EgW2hoyWll17Zo{&cjen8S-lQDlf1;?Cmkmo zQ~v>xdi=n22j3+JL2m6hakC`wpsn;buRb$WAi(*XfxD-ae=oPl%9_ONE~)Ut?qrnu z-nbk_$7wu<_6Rggn!ct-(;H~2j;W5LN20mgMj82RBdE?>No%#V!o%95d6VL16#cmk za^(~lcUnfxR5H>kgQPj)t@Cg#zuGQdE59@~T7hN8`_wLu{SN1!dMY0FF#CohyVGaF z$hg^;6Pq<;jih34p?dtC$_$+=iw;=n*{sE8@%?CZ!t_TxO^gu~#;q=?si^vpQ^h512s1fNhr*ibifGfr{;wkN9^O%Ex5s9fU`3VijrbtLy1e(K%<+ zaE^SR_H7nGav%n6d;yg`8JblOhL${)ekFHxOr)g=M}Dc~v8a;2pUf+M`RDZyoSBEU zQv~9yap5h<*BQQ4^(RpDD;r3tS1ynBVg6eB zC-C$EbD5hA+uD%EA*53p=EGUU1{&ugB*U3hIx6LbFRFQWL8_dNs^4=*IctJ zJRv%q6;r?Fg)N6en=)i>+zU7?pT5$kF%$^R%6|6|xr(SM_Pcy){z|cHC@vFvKka*tlO^>?bMp*va-tuI*gBacL*f zl6a9$@}uaVhpc+!%J*%V_N|U@1@GOD_qZRYG}(0F8ouA-uZ7+JNd*2+o(q8pTy_bH zbimgnf-UXwFC!(DR=6&qx~1g7Ne$OExY(Gf)rUoSCW6=7cSmoVDqpycZ7S^p;AYI_ zhN^r^l%FaMndIs{&ib&#)pdIK{xDyt;DKkET4e};6wSj?8$o^^zUW0=-fsE!D-)pC zWq89W{A=GYG9G|Tf0`bcSx@Q7L#x|Xotxe7hD${%>)S6HTy)nruJqs{@)*bKoN-{u zQ~Pr8S-;t80G{CnU00#%(@P_fh)_1cZB_1@&LX5i>A|8(J*K_UR~FfoXLWXI0}Rl8 z`W(1+IW+-Ti>S{#SiBJW>*0_d+@=JzSGVrQ9ovGN=t8D1U!;uujC{9vYjju4QZc;+ zM6oO&aWT^xU3}%v8=ByEMwM5uvnjHuO`FjX`dJ#-P(9e@GL@eeC)R7dZ>!f*H@vDZ z*Drq-Ow0A9?TxC6iZLJ-3Y=Y3$r+5rF)&>0PG03&Fc#;s-uuwO)E$_n@ zIK-fQcEA5{_9=VvOP-qv)(dq(xebd4j;k>{zU7Wu+%?6n2ZHDSR($kN&ZpnoSb|V% z;J3sZelyf+0kcuyA_p;{Dd>&83QwX>&Bbl2Gl2IA%p%+sNk3eyB{^r2aGK^rcYD5T zujTvp7?nj}@wBi6D5P%*aWN zl4a<#7_u0he6H|B^hFhq+=b1MffCbGubbkW_MB_^J}0;F>%>ePf!+1P{<#V-{6$^_~KRgBvxvkuVIGa>@HK=Drbi`AAno|=-RFHv{RS*Wr6 z?$0*W`jT~Lg!4c@HSrLj3WHO2D*yn)wGU)_VD{v}r>}+1O6J3oTwChWI=)ocCQVp# zz2ePUZ2!dZV(LCUO9Ng#`q)U6Iy?UIy&er^#1HmBgVRXkkP>Ba#7#9XD z-J}9w2dGCQ&0q545QBFHil+s`A!RsTLk73V7m9GZ``hq=U;IU zI9hqzG2krX>lAH~R8R^UmFQWAgwK3QGmlbc`($4@(a5&NVZ1s`0AUHbnoo8qUlpv&7X9REc;=yCdZaAX5lEn+sL8yGm6X?JIh~q zK$*GEZbwc7hek0z&`#`dU9{JQCSHoIoV>uzNruU4D5WcvcE0r%G`wY2BvBKHcnaP? zPs6WFwx9~q7A-lB>^x4hwsPg`l*5vQX+qa{7T?E#fiq**CQ{gbWfGP`cJx9mtnQ+y zru~(}-7Yx|Q#&cN z&$`?!4aLIDQer&EIW$dzVJ{>BpfeB z!{R*5#+8s%MjBaHVvwX{SsB`<1=wa>tgO6`wHz`mFu8%qWMKm2e0t)4>rdy1={8O@ zp18o|VhB%NzTqy8it8Neu+J?HzN(NL{78%6f%y$n=A{ZuLn_Am-n2k-ZwmK&I{2h@oTXmK!uPk zdAY|O=8Q|SL06yhKSyxu(@WcDvmkI^Wk%rso^0cC>i{`Hxrpq;qem7I4Ptv<-gfvNZ z!8-%F4K-!eZz8tWd`BL%c*x<#_TA>H1%z|IGO6@=FAF&(p)IK7VpB^~oI86-Zt;N~ zjRsW#$L!lhnM?}eX3dsu^sTKAkr0ZqCY?GfXYH!8$gp}w|nIfPY zt)?0qIiDynO;GNGQ;ti%kqTgwLA#@}yKFE+t8cRF$|J1n!o9a#3L=fBg}5{`p9~wX zTOtw&2;RPFLIAyuUPW!2TTcE#e*(qkso>{Ny}Pkq!?Yr(FX-TKK6VI;FElj)^URWEV!Q7llUftafg&Qa;j4brs_9Au0kGu( z!+G3U}?5Ge>~HoG&#$Ig=U{ zo(CDVYTd0K6#oA0Rh-?Ss2KHfysSZHIjgbqUVl(|^P&0Cr^ON)C{PD@VLisq{-JC#lIo%0I>Glg=1ya& z7M4zhUOXFK9WD;cd?;h|g}bqS?qML^M#u<^&qm)t1sGFLrI(n}ZVZ2ScwPTE{Ook% z!_;GSfT!eu!|gMgymo{n%y|sum=7S6F#k#=#t_97-hWoBu9q>Gmr2^ZznGP?cJBOx z^;Sfbs=oM{=Rdk~tt0G;OU1y#f?bEkL3sCSk+bG!g_X*k5p*$+!D>iZ_13v)ybX-A zsY=#2?<0Qk7UCBG38a5v12{rCg{e~%_3)x4o164^(a|FJNTW7S<0>xZmGH%&rBvDy zT)8CZqUJ_e!XR+ud+7BAPN^>mbA(j-AjR6taDd?b(8t;tx*M+-yvcuP?)~x5(|5cj zoz4h&N)wKo6m7EYcxx*B23S3wRM9jDK3ktQ-pHlnk`!#MHXZk6`|j5tr?0A=)pQ&< zdg+O?DPTvRgJ(?9LV1#>GB&&O=gwt<%{_|xw$(MTgS>?+Ts*jN|1mBi`;qkCm|A3r zwK}YA2dJtzELD%}gQsFr(S9`1$CgT|Zr_XfYM-rP7p*ky-z1*C|6xS$x;?h3V37WV z+$}`Xf?V>QlKLPEVZGEkXLV*C#2xX;?Tuon<{v(WKEn!tOOD0Uv0u>bv?nng43dv z>_IJ~)JNm^)JG>CMD0MSpyhyic|+(O^(_7k^(*^7?O`|DfzOCiH(n_8+Cs_D62S%j zB6U3uwNO}+=2*FPS$3ad(-Hy4w_WsZ2+7LsFN75pdz{*I+QxlL$XiURUv3IS{0iRxQ(Ke$Pxxn%QHj#OMWa?;VlT}}-Wc$5%o1_u6OtQ>z zZB7tJ4b++|@@REt+D*I!ym=1>D7AI3YwCt)OMT4}0WxV&$f6`m&vCk$bX*f zaIK`J-*JS>IP>uZU#3z6_7}@oH|&7K8K(WipnpgYXwHnz;S^C<^=Zj-dU4(&_QnDD zoIwHAc*{>69_K5fzUqiuMHg+V`zSo@wAMa{xA-ISj#{B!XJ+EkC5Px80n9o@sIHM zkNv_QJEQ++c1BG*EoJ_g-bT1MhH?Tf?gQ^~?{d{AZPdAfGKhD<%s{Cd`Gu~?WN~NL zYs;NH=G&O&A;Jgk82tKw%D!R#i5~L*KNA)IYNXHqrZnR}l_Vto6YYk7dKU&Yqh$-# zgU&J~?>~Q*Nz%wtFx+)llKsLXKw)43X+SHpV!aXajYw*=)f21NWr@6Rl9&@sWw}vB zIKvZY`R|sX7Fqv~7ibI7B}JC=zA|znc;3*?o-?8sV}eyRjwktMGN&@>y|2ahU@j9C z6e6Le{7IKznG))TI6vd=U8~9n@QFnTUgCMY#_s&EO#b0C;osr@|8?oWzcb06mNz{y zs)=H>G$&D`G?)6rp0yZ0#Q$G1`~M-VKiUb?+m9jJK`zv4vF_*&q`31K_f)dz=xVyZ zYgbHov0G*~@K~iM>E~}14S4%6w*Fzsu%Nr{% z9Q@R9=y^r~Pv;W0=~WBz1sX#G)ewvfks?yb1BhZt-ChQR3Td;}mt2(YTd{_Ph~7eqWoaE22h(njUQYu!msY|FeJKEPcQ2>RJk@+Q$Zc`&Qm)=8yun{YLT7G(vyA| z31HqHRXhR!vyb@ou)kId2+wv%pnAI%_-t8WJ$e zYO(k?AzW~?J=)+<2NJU$0Ua{Pl%_ymZ*`7!X~Uxz8tWfuU+4B^XR&zk?OE}7-){W0 zSO*ct2m*>w3uO#fh9^{SM6ahF$!n^PCKE50y>3b!-q0!)OR+?lS+eu|Xi*rpJ=BmG zuuY+V(T^$R6>^$mQ}{HM$iMUp>b0>9dtUcehmBkm(Jtd7z8fP7-)TnWCkkMsBo+6u zDc*u8RHUH`4u}A}(l7YvZy?`FxXfoJam_^QSf>fji2Wz3Xd3`u{+AipLm!MDp(0;Q z!>h6vSvSU;V06%Xfx9#w0!ZY!CuJ})lY*F`!Ee!Y&>36=$_MFz^uZ?#Pq`V|I!3YU zSEeLS^UZ@~oTdN1&4Q;IfHbJ#D~J2)W8Q5b-5B`^OQ>1->xzd0XoC#T(GE;Z#vN)6 znUIp*R8NyhTXrp89oM<0f}ENVtWC1GRRj}i`oe)>UdA?M{mrfZ7faIg>Ksyb-bPQ( z6Gbqr9*iPjjwIWzrI^BtZS+pJFb6&(^FMWi$vC@WEAAusX%|x}qc1wWhLXE$*6VCy zo!Rpn8dG?KdAm-Yic@7*v12M+R0cA_5bKUOBJ~5Hem>&f!9&uu_WABSelrbGTVJ-@ z>c9+E)BcO7$_#%^agM*uE2dKJ;YUXJg|2_!;6pbALmCRE%pC>>({mZn+>dq|%ztQ? z>n`?mI(7Avy|* zfWEb7c-1iS;GN4rQwsA*8dkoezAZbE89T?*xvsRETjS^WA;fHx2aShL7whc8sLy{k z9KDUW>*U?5`iPDBO~%2~8Sf0z5x>*`PTB<`EuNS-Mz=gQmlu}5Fe*(|6X{9ADlA|1X(B*+Gi8=2vw(YX4ha~S$*7x~O0ON<3oJTK3LQoHkE?6H99pq8 z@Y`?S1nc+@Z~4qQufFIPR@7gdrKhGH$~dzIgAkj&Lu1AVaDxOf{h__GM(Nc{JFoN+ zYJ+Cgfk}*c=LaRuaSJJjE)8*fFZ_JnW$E-=QT{axRN^d*Bj00M+>{mCF%suzd!Y_j z88ey;`R1sMrBZB>QrxKV+uIgoO}-ZmFbb&Us*b3s&zAhMGTnv$?D5xm{2SrIjX^IU zUL*_ofD3J)klo<;aSPGFj?;Se$? zRwbxYk#zDTAr*5~gh=73BJhKfc!on=InKyJDj;BQ)n+9>in+|XyIW`Aiapy(4Cj+r zmZq09({i5VO4sYwFN52hTqM6WuQ2hQFbW78m@mc_a+gKl-WK&7>dATK5`vdVG-d`vE9aI9)PfCzG6+1VA5~Gvsi>9n5^4YWn z2NjPvubnSq)XpfQd$v8yitGvk-gFlqpD1=0k37@t@yPlocEv!GU2(7G6tGM6I}C=n zr>K1Jp!5bR=y-Q8ndh+ap&c$w82#)~!x48Nvg_Eb1HxZZawzY8E(`Q>hAy1UPG(0I zzW6Wwc_PD;;bM-~K{?Q&lCfTtbMlyLICea&kYvz^?Kk&=T`IX`PgKD+?$9^wteSMN zGI39#e5wpdW^6egKrh$k1#5<*o~II0T}OI#uQFDWH0`nWibHN?Z%mQua_sJ=xrT}8 zO!J;m>Ar~$f3P7W(>dcIO`s_%G5gak7nJdOKOGBlLQX*PQi}#r?`!?K8}yDoPiWQX86HIPgi$xpc4( zJ0!#7iL{uQkJ4GTP#g2uPgRnO2iaQDyX^st|2*4>q1MNaCD}cgo3S?$fZ;0rCOF>J z(w9aW-a$gp>)dx_VmINk_KLHd_lYwiKe8i(6jg^FGW^gp3hr-74Cr16%{pi;}@$aF@9meR)Br}vB)+TZ2(@l z%A)DPLKKeX&keVUG3X3 z9{Oxab>iCgMPrWCyScgiE$4EbZ7tAc_IGdB*XlnN;kITOmX#nRH|#hrDJTMfYkTaL zh_vT2H5~Wa>l_|6VWp}JJv0VgDNH2G7{M3o1ZN<;%0}M?fau*wl1{`(eLtLhtF6H4 zsnuywxc0VZh1hv9xW>TLw_ijUrm#%{AZJ#l|E!^!KFNb{rqm!}Qd>ev$!dJwMcosHKDefWgaKec3oD=af_n)&&WE$)pLWS@0a zrL;lYy?dN3%$ntGoJ>VUuO6F#Yu*0;IQ#CXCckuR>oqBQlV(1`a;5f^f zP9L1%Y2?MmdBRgbwN0A_6R!$9nSgv9XfB8xB17fw8Viurd9f4_c%uH{U3U6 z){*JwBm{g+(&32&IDA)zR!RFXjF4~2dyc&gxhM|H0Tr@eEc!>Z(huAXH1|>0uRC@D zu*qcGgYBPHP3zj50oud}@P;|S!)$9bd`G1oO;aOts$ayMy%zC^zxMExRs*ZCre+HZ zk@tMk(l5RYltaKuD(;dD(O{9&XFS2@P}GLkc*icdRJmSG$vm5IR^e`xrAu+RfJ#wJ zye@C~B`NjumcUjGq&jW@-3_?_I!*!Iu&ZRvJQrE>h8gN2^xDQjy_vI6yRfI|Z-%#$ zR!j>|YzSjQ_evJ?GU|%Q&Nb){&s9iS4il*F z3Mwz%ccbZviV4bk`d0&tV}F}@*$;g8ENEQm*T=d+ZUa=df!Q?q7JZ=mszs`NScnPi zUl!3V{55Zo?#0x-`Zm@j=DbEjiLPQ9ko)~f_j%JN0ad&Jzs?OF9krX>_}WhsEBd1w zB$o=mDEs|RyoW_^W)5D-V{F47vxvO;YZQZ{EfQ#pUI11>=0IF-idkr88-7KxsB!l4 zF0t0ST{F`^zh*U~?9X?KQldM;`G|eQ)7!$2jNk*`a2xZ!-|I5wW`B+~CFVzTp9je{ zMtz$?%Z`zYjBv4lCrkf1d zxS!~Y7bHjdd^I0RD+GVK#>=p%wZxU_`sjM=ij@lm$$=~`jc-t^PM#a7b4)Sk?U0598X{8r2&F+NR|7HNxayr(ihsF&exCGGZGUHXbI%?W7AzK(db2O*9#9Ewf1vW3?8SH8red{8p)17Q z+spsOcf*74czsd(((U<#_^x8b-6C5EZD=O2H@to`G$WF@p$3(P-weh-)5_PPQTxhV zEkJ`@qjsIg2~y1a?-?`maw)=W?-CwbaJ4!TdVrL>>sBKg5F-f1@UjCsWCZMt}3;myPT6%fC?V43P+%kVFM0ZD6U5##vSLvIdnq3@2icp?yuZe z(JvCJ%v!g7%BWh;2`f~J7uBn0HYdku2q#O6P|DO9%{{~87MP$oq3gt`%cA*L{sY~G z6UWXfmJk2&?d-LnQ3$qxhdL4Bh6~6(J2edv)6IT=2>B zOu{JYENxCALFF^VR)mS7d)M@PU!QiFF&$C$5_3nMw(`1{t=Y764jUeX(JYtVFfs`% z^L8v>`#Z%1ArfpaJ|bCklex>v^MM&eA1IcV(@O z%Hx&MHiF5`$_~7e*4bE5)EYpO#vt%EmVjWAG?N6qBTZW0xiO+S*yF4$qIYnMQfqqg z7T@VE%*9XD(p4zF64d&+^11tn&FV@b)npPkjlF~VsSQtZYq1;h`z%%|_lC)~3-ISx z7L|{$U0nuNhAao?V<3#a{1&qJT*` z14~Y+adi$TUzWE~@##&m7%aagw#=@b`2Xlk+X2P1n_w@3 zV^bRXlRjrj+%$mQYPkmdkPNyy^qT=aM2jJXxNUv08k6w&COW^%cE4%yRlN3tq*Dw& z4yOJGeCy#mKwohWQpg+-aN;q`tbJ#d?H((k(mvE#R9ezU1~_Oo?R*11GHDWnwxg^z zEFMXcW0DZX%pzZn1eXRlDU5rq-#lqC=u~Aj`rQ59he0O3TIsgsyJ(Yq)KZQo7+*cL zfuvo!0O2mHJmh*xLMyp@e>JvySMk9QbJP27t8IwSC(VQsze5X>Q`dM=H}tUZ?iOmB z>8`!VWE4kzq3nKn zU?GAGE3Axx>PTUF65m$&Zr2iP0*`KTfUbKE+b)wXo9e5*mr|m&P(dA_IcHtv2T3fT zD^Nan+mKEuvbRzz(Jq`BGk9Vnmu@bdIGD0<<>ISlDf1|!;l1EYkqX_bm)93lDP5R8 zo%XAuBJ8!Z|D{zabJ5k&v=rqm6a;dSS3)SG^wNcO6)X-@JmTToPj^aQOb=tdRd-ke z9wgV+_a1+*_zoZ-41(;(iRq02WYN^wH^WVDN?c4n1)|FBrzfw=(g|WEVxf2Eh;Yh8 zn1uq^IjAyh7%++bW%80P?2jJ(6~dageG>kQKo4HOy)_#zFt5iHg_m5GE)hjClpYVh zs(Q#cgP9$8dSzDsCQ2ndM3AKrWaT@cz0WU%Tc3(Z-sChh8e8ShnV^qZS;&Y=d#A7~ zo#=w)`?#v}ovmPxY|)9J;|xeq&(2IjO!kTL73aBFPMnbE`88ig+^}93$B~HCBeb*V zaah1EYfuj!@}dDC<{`GtHhbcpHv}#p1Za2zy$F)`@LjVKkcd?+aU}W$b%0MrY%WqD zf#hxTW1s7q?*4)YC~Wck-}36%z4l_z9MSIuX!lSqGT>k87*8?IrqGuAsojCMqXIlG zz8>)qeZ1rsC_dz-wT$$Ds~_isd;1^9vZ2=Lw`lKZG~m8T{6U2tJGd>FSlg^@&^)$5 z6nD$G)6hV0c0X{9SRl@_$RBErQaYEfv!U@gK)gcBehG~F5j2ehlg|ceknsJS*dY;4 zGmG#!&%6e)rNFUN>4`TT-35Fxr~OQ=ay<{F5qQgIW1EYF;p6phW1h$eZnmL0vA5kX z2jTj)>8Rd@yXS_%9e4aaDpznL1nyqv;%)f}U%WwtJnDZlBy{b1oA)cRqO2WnbiRe% za677c6!ck3(6P3FC_;hmJ^7pAfD?!t`w%efo4-%bKVgB<=W+ddV0!M;&2jybuZL7t zO1f~1(oN$!L!-`(`|~mIo(rhM<;#se`(BNJHe7u`nnA-+-KjnnMA|c2>}Xw_gx)3o zmVDKf4;+W+{;UHmcn6W-9~OQfYj@L@Ry~qG3@kp#NYoK8E;X<`xiLC-d*lwrTNKmS zasK<+C;9<1k6^cQ)PSjogDj~5)Gxq^%DPJ{f4M92{CdZI0qW_j4h}yE@wZ>s94=- zmvl-C%lUk<*7caxF=o+{P{)#L_EtvJQ6eUC@JhuK#=;rZypMsJTOxo|l zf&mF0=?IMu3^|`_1pSZ=ZdZNUkuVw}xH|{7MYPl(=9RSnn6}_QY*M6wUR-?q*9IcE zRdW!jv(!v`)36qT7$E%YZfhvzuTF+{K$UkgbafttzbgNRfco$Xg5<*yAg$Ow+p{u& z0y(`+4(E);skI#Yx?>p3-QotJ_lGJDl=}T>L%U#pAVD}Iu~|R~d-Y`LGVIgv>fBkT z%^-`7n@C1)V=2oyJZ;-uo%T7i6YDgF;P*ocTiX~^K9RUNUc0mMCgpyG<1Ht5_q4M* zdPf;TrygYh_j$vT8U?zJd?cvFT@xK7uk@ylg`@XkJVz_U?T58SS)8f1VW&Qg_Lq|jAtRO0y+}PG>t&L8Ek{LM;oQJO@q=sVOMccb1Y`K{5z=cIy6Y> zA+3O_9>C@HYTd=? z&$RNNco_CLrd}J!bS&5?L-&59&?jImnx7;+ShTR_E1H@iI}d^!%Vp0`f-4)JI2$M3 zAS}CsIfIP($;hT=`cQ4@`hrJLfpO0PL(ms8Z6S*Z{A>W&ncjf9 ztjpG66DNS#HA*H({<<0K$Z~9Y>80@%g5Ui5+2W8NmY)&SXa0K75)`&ai)+G7Tki!;pM7<&4mN2J!tJS?Wbl}FPy-^Mvq0unhl$#(3q|8!R%uO2)M(Dgr zv0*<`gvJ%}2PH6R<37hUp>P_;NX`*G-#aUO(n9y{T})06Q#*J^jq@bDJd(%-JV7u< z(27o4hx)uOVNG0G9EkOl+ZE0Z-T{R={9+5TjU-g@YM_A)=MqTd6Uh_=bP=>Oe-{`g zF0{47cUfpD!xbBGJ+s0~Hi1W1D{48V&&4wy(yWWQx)TluAyYpA>P3ptQ5YhU7EkF< zF2#JHDxlQ(TOQ><`Jf$Ln7me;o+xyxEQK${2{|ME;+7POl1d}D7enKV$WDX;8bj2h zbR^Si>&FNfSJ-ZUMXBy{3YQSyDO=lCgCC+ggzqE5ph^2D68f+LbS>!K3OzPCiMlQI zK<2COHD?Iw%w@CPWGTxIGT;AAzoT0jX-P}A-d-?;&T?)J^r|QsyyN}RHV$|`Qa&E9ad97=xuq8O+ z>+|hAuvs)V=&_&{Dh+m7tK3!%nb^%Nj9nHvUnz0iXZo=FP1$kzgod&*H76}btNqMu zvOr>D=-0hCsQc8jR5YzY;>$LZ72>BicR4KhJDwU2+(=j2E`>-VSuP^eY4u*RM-#_v z4cU-Q^=E9$j0%|TUE}1>R43YGxi&-+K;ebH3I9x2KOjkaS0}Ra~NH-*8q&nm^(Ss?A!0wz%;e$fC|d9V=((E6viw zK4Lz{CT@B;*{)HZ_6$sb!EM01>KDY+DHohms<_JaErnc!5>O`gv!&R zs;`bN8&7H`3jOd`wVEg7;K&DYGB_;-KpQHgvf|+hHo6>>+w2XV_`F5 z%5f{vM1;FKrEaQv)bgtWnVB{ZSZTW!nSaFm%nqjJ_H5o?r5BS{{l19_pBKazlzhmv zoOfGS1A@L+KwJqYl26pGU+RM#Q*yAhcOwWx>`j+IjcjDE^!3bJuOdkq^J7(U`XohD zB`y8K9x>jQW853aW{%$s;O8 zzY%kj1u1+Wi=h7|UP($2lz@5$<(iccWL3YX_G=7rkWYO1d5dr)Xu{k_n3z9S3?zX^ ztrqmm_0AmDcm;Q39{%q=PlTRX2*T6mz+TCUrr>BVaJ-W;bO-46jCQD^S<*7Afn|^l z^V0$|%h2R(8RSzBrwW@#Zhubi zL@`OT=zZGPvM^8RAwb)yBS7xTI)FsvUrGVeqTGF)IL$$EzA%)hXIq|(MpwP~sn+-s zWuX*&t+!=8uHSrRi<|lsL5*f_Pg>ZJs!Yy(M{1S`gS9rm>s{qs)tCB;9kIj0m1G#W zH2Y7f5*EgjoA&OrOus{|Gj7AQk{Rc*A}zB+(HSvI31YYJ;#zK}ptN9Rwl$ouM$IR$ zgULNL%KoW5tuu(7R^A?!cMM#Wb80 zQF{H>u$S1n#n?_S#n4?UR4ZObMO%_f@JriJeqti9nst>DJT({ANV?C)!afO260V~l z;J{sJ7!y4i0pUG1OF}GZ?PL7rn`{X>u?#N`xoMno2?A_A!9qa0R`V{dY&iFtS)kq3DB=6J{&RZ6|Ty@U&H=7R9<%XD@gadfjO6; z8@@W3qeiJRg&!UK_Em=#)nT}n|pTafS)b`ZuV2_)LM^eHpxP$}>O z-r+Vmj^(T0ibgy&lkSs5 zDW|AUAj`jEb)q5a^;iBTEH79ho+!E*AJ|{$u5ahH<&WA{g%qGd2WXhY!Q4B&e{6YJ zf0Ui{V(f>i5?`puQ{GstoUGpH!K!gzj#3^=SRkmyf|wN_IWdbxUWY`021=Kd(wItI znMU!7FdJ-p<|&rO7j7E(@Y2C(&(oFc$lBa6bWw(Xo=5qFTG>*y=vb-=-}mnDvLBs! z$q(0#@}@GU&_ z9({3=ZiUssaCd%}6VDyYZEAY*(m8gSmich2}_OBR{zhMsA(bOCqHC6&cT!t758S7B;=K-}OFj(k+5aW;K|oJl0h)~!gnOJs|m z%p|29ca*QEY({N+b6v`xY79&~Fb#Y510?rG*E4GEa^NKzhfnCiX{g=E6$QfRtPP zkWWLysHebHu?NMI*)e_Zj%&aVexk~v-o!yak+d(HBh_}-F}f<%ZB%X@47bH4^ zpiC6{Nxy4GG1I4Q0H~M|o@UDjDvy6* z+y=%U>v zZMOqU*RMtQDIGkeDV6`K1b%B{wEhn27btvO=>xyvRR{hkq>YTwzCe}L%iBj%^Vnna zHcQzxFgU-9r})-7G7oJj=?XPGB`BWh;rBlBieSD-|V3Pdc4^=4@ zR3#Lt;MoRTV8G2$k)7?{VNJ1PRjf0ZhP$>*e!jkB$$U=GQ(Kg@?-g!m`p_Q9hm=1{m6QPbatk92QCU#)OkWsW8WW z_hRLAfu7vErZ;hk??YwxT}n1L0fl6O*=xSCUw{dZnSK{ZL3ZL&YM`j@E4JGy&*ktE z6HgN58zB{zS00&gep?yWud)ex7V4S*EGVc6lNR+>P zi!EjSzRKuLD^ry8N!D?PvfL5lZ~g#|QH;^(-A1Ic6bFS$qELzWb+C+yBQo{wchm|3exG2u=4jqbTC~)j?Z&CS`5nqWDV>LwZu371{>7 z1w%8NhO^*OwA;`iSq&&^1#pt|8egae807=SZh;}|DYf@ivPnUPjzhNA&#PGEM*6FI z%cgV`=VPxb82=cb1GKqAtx5T6(h)HulN$uxRwWRadx)2^$+AFVyWtJ}m#sC584Zls!OSN0ClSwLO} zjK9y)@@rBxUk!`RWxjmV(qy&zmoawuaC~fc#~sv0Ww!Ss^1J>tG{fY*m|s|%I=1bl z#ABO(+Bx#w(I2O(YMrT%`t(I!FKkQOn)yalqoEc;UF|;?X+y^WSE4 zXU1ejqogl7nCJ24!;nPs#l2Ey@DgMOeJR52Rr&f=T%|FgW*i!e1LE)C9o~M&9$y`r zJpB1n``NUPwiV6TGTLk;q0kdYmZ!yM1YNgs$?G=?WqbNHpC<4RN8OHezaZ&3@i#J?U{kg+)y5 ze)l$xeQ-2LFd4j$stU2(R>yS_c?tT>pi4y-up6GHRpGo5C0B-8e`uSGaK+AKYaL_y z2;V+J@$GN9PkU=;(AyG1>A{$3Cg-yAhkff3C>msF*CUt;xXekIA3J*c-uz5H>H#BB zk(RxHR|KY4>F1(XuR)x+`)NphUC&m?FLij0_1%mr{Nt$xe$`9Xmz>Ue)inSVk^+s^ zK|%HsbMT3lE%vmg+9cz#jXv#Ri^y(H(koq!4qk0y?Hs>2Tebpg{brIqa)!S9xaZUq<14`;_*)Pj*(0f(WYRC%F6~ot zWfO^P;BiGZLrur<(zOQGdJzqq^Xkn#FDEo4eMBOO+Mu*fNCil8BAIoMDptvP0fPgm zz>C!*6${&ANu|$ygA8&DHDD!Vjz{gf%Sz&ZMVLFGzK<_N0M_~j+FWJkk%e{ILUDp0 zK>?$zht|-iB9k32XX?0fzkjM?puO?Y_>$h&&L{i7C(T{790lO8?}%>YwvBHC>HNgW zT}Fh+$_Z7Z8R@C=h}6j5rTC{x%f zWxkq^rE6Kb=Gy)+(~)11C111HR6RDK&;rkYYuJloby7b`G$TsQpJ>tnJ% z&!{+Hszs01apn0N!-529e+d+q;JPzEBE*BINqxRO+p{Sz%#2zZ#x}aX4QVs;oH%f; ztmcwXsjzX=1J8U|uq~vw;04NE0}Vvkraou-g)x;65cA@aMUcTR%b1~hh`8=k7kbTc zwL(2zM~HtZndUCeeL9bg|awSmr1rR3QI==0R}*f8D1^Pcn`; z9W06Gh24c$YiEX$B42uej7%R<5`)yMr8v__=y=*}F4W&DmffD`{QUYdyMG>^8{1f@ zyXIXR(_`?5AJ2S$efXi};A|=)3+qGsMCC)~V`NMzKS`UlW*i`QGRVQP)3v0VIP^9N zu6=A_*yv3BFB1{7$QEWWu1*RvOKukGVeZ1qLGC>n?S-V>iyOnZQtPFkXC`a|8*0;uN4gV5S@fXE7{mXF>nXu;I768rI4> z?jol!|Iv^au6thSZ9Y4pRlW@cOyE2^wZ&%;Cqo3_BeD=JDQ^}NrArCfaDQRr8ejWU z>V2x70{>GrN6zC>J>T*Vk*|7NE&thV2L@YPW`T5na~7`RpAj9;QXQhLhtZI{ zp>}v?u6|xbFa7C$71YlT+8mm;pvg^5!aduTSmdjWuzQNoS@GsSQe0wN!ji+2BO)Xs zeX@%;Hh2ET5xQ?gUtn>X>?(jq*;2OsBl_?eY+gkMDmPfG2OaipDnCEj9zP~oP>S_< zOSz8P0#fLuh0q!G;ou~a%c07+0vkX}wm(tx?%PmVo9w=`j7hJT0crhXZtBJW^uAA` zlWzYSELbwFlr4V7;KkH+C>yw{_9M@%f`MZ)B}bFqpY zyn2iePIL*rRxIxTNjxH%4F@7oxSUl}-vWp*ZkE`Jb=yc~U=l~{6oly&7ltmYE#vDQ z%|+n_KlmI8*funjs)Ws8xu^kB1N%soz7wI1B770r*eK6XUd_Oh^ z{CuI5g#;NX-~uR$m8UCh_Gh3krSvP5`meZOxjIhdl|6y(A}`}oDUg4W5_!=>Y)pXd zRF7ETTg`;mg!jh74nWhINS+3@4D2=9*oa&l)Fq~W!iZVe29sAvk$c>5yf*axLTA!7 z#i6U`bl5*e%9=j1i-qr&P=79TBq3zwkP=YlK!$l>Y%$4pu;eRMmm*yM`gkngzVjMf zCVBbc+(#!XP)LL%QJnS~svzwQ@X#HWez;{E&Mj+@Px4`;UAUZ4dYrL3lrdiITp1Gb zfK*A$-HKi}C?_-OecYrA#v51+#M;_Ew1+D0T9X5k-}B5z+D0<|*k4rEECUN3XCtvz z1Gu*gHsn0dZw6*!!bQr*xP(o5ZAL+=)2pE@Rr&pO1o3HaOHd*0M#uv6C@mQpJyD2X z^i1&*-$ zv9)!xFENh@JOcR)Z@EMnbH2brTqB7BIP$QMM5YQ6%7%#dBjw_xF+Yvn8xGeUI~xEO zQ8VUR(+>tBnPYeUAYc#%U?BnSCz%ZCAu{g?sUl?|kA2^uc!1kdoM#ZT{$U9L4DqtHQ@?1G-px?j{fV4TNJw3At z6RO{~a&#%j{jna@>nTaKhQ2|3(f4`|-?|v_(?hxRbNZyMaWHMo?rK8^V>l=`yYML!<7rLgg>1O;3HQDL1I&x5{LVf%M#!ZXK${A*`zy=b?a{XqA$MM;$A-h+3T+#Nr z`PmkWi%w2Ys;;uS@|iPr?#2@zwApt>w&;P~_`TT>0r1LH#(C62u}02i(>I-{BU84p z;71@ebUm9yiypg#t6|GrAH-_6cM+`>%QuJrpyEFLcP|3U0Uy^($teeK$q76Nh5SEv z5BjZHPsZlt^3p-v@jKt{yZJl6WI4t}aN10LvO5E(#{p%`K8b-0)=V;5#HhjMN`>o* z)q%1$8|W7c1*dpZ~o@t*&KHRV`-f|HchlQMuthmP_97FHf&)hjrh@Yk3<)(Yn z&AM^COGA=pNqng%UFR&GWjGQXXyvqU3fn^5cm&D*>EUR(iwupYR9^70(snQEafXI% za%H)0H30d90I>6ZDWGZXU_(^Yk4ktnHAB9nsBCfN^u!^I+!{0AzRsA>_k;OU9>;>r z3y8#%)4@)}fUenrZsITCH}s{I6G^vm{q{Ig4TV5Ii=f_yuS3>&YAPPOLjzkkjG6X1 zvV}H$t1)G0#?DkWa`U-{igyFQ9%HOq#nb^~=3o>@Byk^(4AtlYnsHCg$Jc^edy`cR zB))z>#tGjit6CQ9ZD9s>ifU+Aa252>_sqC)h`}|z#AaSACn@%z8a-+;Ku!+=N1&>d zmYF;4Zj6~AU#m&#W&N0WU+&1m6TRMCD9vZF`o)=dm{%2^wpop5-~^j8$zIYfxU?3x zA+hzQHd1|ZZRTqXYrU&$X9rXoD z4^Ho6%w;@|TDcFLFQ^;cW9LkD?qtEpbc=8-OO$_Ac%VNoxACIR);&G$(v%j*DdhyU z*KKIcJq(Np^oV{piK5&Wm`qNibuIL8OzYF<-QT2>6X((wvwIWeDaJmIdJOwkBWn;n zKtj-~hr27r2q}%VgnTBoM{d^zDWuHkJ&{x{h|aS6tYvpL@sR(@I4r30KTkf6{>Nf6 zf3lVTEqVF3|Na6}%g%knP$IV&FlPdg_FO(yaM9y?Rg(*HUF_aDL{RBekWZKm|A`t( zVmM%Co*vwYQr-W4Tx~E9q-DAR>?SwbN5@f8{|cG^Uq}-EO~>os$5;TA z4f@l`b{xhOTzbXWitea~V0F{O6+NEp<37Sg^JTgvQ$V|_f1Ngm%aS0H58%jrO>Mx` z5uv1jC5)wAmW@V$^1-N4W2fQDWhCrOD?RBU{oB3cI6pu>OC+<1-KKq~;xiFsS-BCf zQg>0hE#;QaepRuO|@xjeZ z;cuS#Yd6ywrOZBuxfO3&?N>Ng4k^$wX@5~IX*<5u)V>+pk=2Y}6Yp^O(-SPF$`L4O z*PlG>!Th^Q`*!RfS9`qKyhMI5MzY)lWCpmH6N?l<`~Vm-P6f5GH+ zuAJ_GfZ5jVL>s?0bif}E{$D6TfUY)a5#NUtwOtwl`FvX=s%q=dHHjqSk+263&q@>- zCwn?Qb&DMVU|?lj_a|Ug03@IXNg~pOQ|YC9!9;Quuph3#e&Bm>zsw|d&Gs}bL;$jD zcu%$pI11m3(A&k4E#nletv97#**){fK<#Tlvd@EK_Oor@O54GOV3))PN+rsNi++_0 z|5^L{ptn&XLnVU5+(VRfo6RxwqBFV+-x%S2HD#0-yZ@}o581>s?UF<`I4lpwNIV5p zWQsQ>H#cU@I!3n*Jql0) zr1k`W1wO$>>F9R-p#SlkLv?uWVVt4Mkg5<<=V*ZHblT50Yr*t7*Lx?pjmJGi7e@rE zYjYNrm2Vs$KXKNn)#OoCz@^BYgvh2hbZ;_Muos2eI$?DKh_Q`B_-Oi zD5YNtj6cE2;L(9Qj#^FoXD@`73S4HbNnChS0!S132A8vzKgUo_Vi!--S1Rh7c+5UL zJ9(rBhOKohw`0{3`b+v{-jTb2-n{P?S21k|N%#5s7GsOG!c>$fTuF2dpwI+;wC;Ga zKF)X@DKk9UhAsj7Komh1z#-)D{jZPWJMqc$UwXK#dB&7u9R0Wp*4a9S)a#eAd^a$q z#{pOO$-fB-!=V+uvEK|b0MNH#u&Apt$(H5ldLt>acRQHfqpl)9X1Qx8{V3h|ZH5mh zMFJ~>!G_T7FjT4;C7=0l510D0w8Oy^D3t1!`=quXCHvqoi zImlne6R8Pw6R^_06ua?7MCRI;_@hh3*6Pc{=qbhB5#y36imL6mveBoxK*Aep_2O9u zg10Y+@~Mq*h|an+YXm;i6??|uFa(7K4oCBvJ}cEsRngTOee>Y zQt)0retk+`1Qyoa|MQQ7@Q)%@JD!>YnrndT3kv!=<&ch1*e$Aj7DE4P3^HoPe;HZ8{P?Sl1cSBJ zo?7!h@XhLAMT{p67Iu9p%+$j_JZ@8-S+ci1ZV+n~&#+A%lJX3lG3y=Qaw`5D2Mh59 zN5-;n2J5v#2UWJLG3q^O9fd4`%a+Nx*)Cf-c2)5&%#ZjfNSCIleM~-C6cy)T8ElWz!|`G8ezD2nz5U&7vAge*Lgq zHTw4#D7hgGq#Nafm-5`kxA_|uIx@X3*1XA?QBGTUz}Iy)%tDLfqvC}J-xbS1I!t4l z97n67-vus2{hroVz%Fw@4uaAF9BJ*z-wfAK!1q_0CdVJ+PN3fv{4m-;2Owp%QKS2c zu7uOm)ftyW?QnhH=;}~ZX`Mywm0x8tFzhX0Wk!hP3+qHxgs^2V*0fH+-ihM(Vfn5W zduocULR`$0$-~!L6U*JgS^@6Ao6sOzd##{zfIh3`gaWC*#!ryc5g%MX*4XO5#@>L@+(Cb*-Tuec`@enA4_mKJ3E_88Is)Wc ztER7Gx;R-tP8FmgBu`%CCq9Z zrPYv`C6*;!w%aod!wXdsQe~FD(Z*vC)A3b455CRhn}3tC{Oa{AxV#Wz(->|_B?bA_ z4Q^!WidOL0Cw$m{Q0wROho%9lM(|GHzYszZ2(Za!uV{eJeoX88NK^^#^OkEK%iMGt zxx@RE{e+>|Ei!wr;W;kE8%MZ}WO>8s$d;}BnJ53K;q|JD*p8;GTaOnuRnsad#n1d! zv2+8b4<2G`WeIm{>dRp9N8=5Icz(FDOS)e}QTGzm3;xZ}CM5Noego8;Fa-3-q1CYI z`UH2_Mm^57#@hbuE9dBP17-M;SRGN;D;!dyK>ikN#7e~F;6CUxq~u+S+1@fV+R+?e zzvm)ROy3T2nG2m4c=prj%rgSz`B+gg3>){q&$=M>NSf>{+%*;JMCBi`ut7yjc>DS) zABq+F0=w-Pv@eo)rgqXUfR0UvGTGAVM1r!F>E0i@8ay`dlSmxyY_4_pf4$s6ucyT^ zZYQ$CcbkT5SM0ckP6+CUE4zzWC7!zoM1j0>8B5CK8FLvJzDk+@Q*j=B5PJ>0ON&Yv zBn&mb0472M^2Zdu9yu}jX(>@N>TuT280(C~c1x{|JiJdilFyZ|2csb1D=L8_t|Ue# z^1UNZqbZB-s?0sV8B*n0i+-Ape4F^o?Q#XpoxeGzdQ=C-@?lxeO#7Jx2-ACM@zlPb zivgtdWTI5v8?~Fb%CBRWpKW#PSyV*-@0+Rj$37{!dfvJOg-9%dZbQqxI8d4H`-Oh@Gmb3L zR9LhW$UoYWz1Yn1eZT>8w=n*LB$M|6?Zuo}|4%P&hw1J0iNeMpfDJ$*1F}Z|C-uetnebAq|CCf2_lGx<7>I%fN%prhhbV z#0YOJAoaZcf^>B?Me}OUU?c@}x7i`cW5j2(lowtIAwdNhceV!M5`#r+^}62-q_?jT9zG(|vuWo{V}@hXL+l@J-54EmNqUE^5qa=VQZuaXi6=sRWmDbeux`3tc3 zlq52m%1L+?`dui>vSsKbK8Uo-Oxfn(c+F#WNmd~vY~<n@}OEGlH6fCSUmtp+wHw#cS7p|vA77JT+f3m_pzr5f6U?LfBy2>bbf zM8>YgxZVn%u}|$f5<1AL1W&bj?ae3IIiVsu`jfEwGM;0b*W6xk<%A~JpvTCz6%Habk6oeLtRJLa6-ASt0~+$x7=gQOllo2 z_@AEkF*FsJ#k$yQ8mXM?zVx*q4E<3erRjAs1_6eNPgxxr)*BXcsHts;HsK9Dc#K`> z`(Ajc3@#huWg>YVOhPy~64Vr|$N$ zZ+rz|L7?CWR3F`N{h*y=37@JEeqQCBOiNzHbv4sO`vD_0s|VJOTDs3Z`W)+iPz4ly zmK6qF{cDy3Zaop3#}vSsxP%I07^X5#J_1BFd-ZuMES8R*#hO6`qnrWbQKG!KMB$^Z zaf{BBE&rOX{YzEpA4Qkv#9@X02-l;^hsy|9VA7va@njrrew;)@P~+JfvR-WVR3MCN z*!v%E2cNR)@$!|78>(~Sdg&yJKcmF20n#9x6t9dsP1Iahd;dWtPGzgA`Vq0$kqU*r zEZxbRajdX5Yk`07uKY2%M8JGN7Q~T9xRA8zu}YlOZw6sG0ZK&rS`i!Qhz~CpT)~aYO7si}O?ABAa1o`>bZ0%dKlbtY9Mc9R{19NKMOAf$-K`fvI>QzdIKwBQC zAXS2D(8>ND!u8-&Q*Ew971=gtnQ_{hGzK|0VN{(;B8AoxPF>8q<^T04yji4koSPbt z$eK+xfX2(A=O4NP!}Iftit}CSEu;+ZJj|1B|5-g15&u-@u#;&^M&f0_2MLyj13U?M z&`U@u`atEj4&xd3SQ8wU(|mfr-Lv9XgDe*_NBhFP*>85g;m;xLihPvkqS=k93DwzZ))3@PFDs32bslBQ176eQA5cIA6+D z0Rr2Llq*ld4Ut{=w7U=BA!yMaZkmzSx$;%+9z-t_b01Q~6`huGoXw&UOSscutPyf9 zat>Cm#(VfiMg5nAB6$BFtFY(XVQsOFVBN0KZ$d$IU#4!LxZ7w*JGS8A*v;{JHDieN z+0fXc&VI+Hw_-p*oy13-x%%|b z`*(=Z1()tO(nI!9y!q1cBPC8KwEh3?IQ)JNBnzc-MC*bPyQ;?l|%QRfiC6Y`lSG+9k=OV)3*#hF3XnD zbsN6nJJ0JM*cxEYF1HoP@XCD9I{sp%$2+nG7~(8ohO@AsJNZ09yq3@%vagk5Q;x(1 zw1+QKJQknD?RP0r)-GwTvix}ee=(I60ahbj7a7Zr@ntX^@df@4@T_(hy`Wzmi=qG+ zhD%IEI)KXG&SRV$6fV~GrG0isMzj`++;gk1 z8P}P-JQ)2^%e^?)w9)j~Z>?FVj6ZYPM5Y>0-Mev#+lM-G5YlzJvdsdY^(15%h7_(Q z6i)>3J=h=Ts|LUwd(osYZImiOTTtQJ3)LQv&CHK?+pLw;b6E@(79SOr9d*f>&-dkT zUFS)9+otxi4ej&y<-%UW4fIxU57>3G^Cj-U5A9$c?OnF3gr%?54Xs=%n`l+(@T^`TkqjKla z1~E(9zSdS#B08=fJp4uO?-gW?pNf6p>})eZQ>m&q&8a^Z6-aEfFC9rQ&e#z>)W7su zHi}3hE3|GDw1&mL)jJzd3cNua)OCW5Dns|x9zfC_Q)W};xCNlYTL$g}vMWHoF6nHj z8t;US`u}6^J>#0%+Pq<`D2mts1qEq>p-ERjA|PF)hERkEs5Aiq5hIY;P(l5VEuOUe~(Hzm$%B zFpOwv-{mCy;s`G$M?m$yE96Sk@Rfyh-W&8+aVyA{UUNRy)@!f(UMeB0^tH~t+gWu) z8i>iHHqd<;$5PQ?@$vyg-?lYtB?Xt8J1h0Zuu4|KHlfyFQL~z+w1<`;{J7#@1ztc8 zdq1AqdI*4G@Px;g$TO;M3ddJB0Yg3nh!G(m{KO$aFYr~z5BBVa0>*~;>i=2A|Da%e zwuS5H>lVyoEg#l!a>y)*6`VcF@=BQ3&R3?(cyD}CKb^9}r~2@Mc&exl?qK{+#V7WB zaoZw2TeMLzcxsF0TQJEuZ9q5MIKcMej1>k{uqw7I7$v7s9CN~?Hq1$aU#2j8YEHBK zX$Lk>sya^ZB5Hk&7A+U*FzdtqU(yO>x$jp>~!5XnF487)Q+eL-m zFSfrt!2HG0=~+xa(bf#5Y1H0e(3~jey{o>$O#N|YgZ&si)*;jGi0DkRj@}v`h?F3#nKgsL5UQ--+ z!&d+56*p^{O&p2(qE%&@el`{~g5oUBzwcVeM_O>vVpXW|xOAgQim9dT74x>akR8Vs z$x(<{wln(*7Q;-}OYSD53gp*BKhqVrFbcXc=E@_zRqw+AOS4DhvwkSNGR_(6)h=)V zJKue~tROyH+(X(4(^0du%@4J;y>-&(F0NN&6R=0_R7b)vP)eA%IOxLcO3wOX$-Ier z{MCC=w(LX2y6WgS#LyZ9_x>7VzQZJ2JAu{; zIoT(&6JHD>3lKkj;aBim<^;{@kskx!dB&JqQm5KIE|_xfoL_35ZGS9BfBXwle?)b4EkwG_A{b6D@&c&-HO+U9> z!=T``f2RO#u$Qa#tf#KwJpyevYRoI%0EZBoSYASCYar(3EboIWnQT;cz=G)Us?08${ zobP=huDor-q_g$l{@^;YOcNy+3M<{Jzqo7)^JhhuQTkVQ%Z*{b`KZjl>n}jO#>@q=Wn~xh){^XTIYC$UZ6_T4 z^s*^wPIG76Bars%K?hj7D9F_Hb6P$yVE3+M3gEwfEiJHfEt<gA=A3OjD=jvH?7L zkma3~PUJX+KpRPv?JDzrBY}yB}@y;w|dncZ-O%Q^Z9u#(7<0Kg-8A?vW*3=BZ)3e|>UX z>4@bRVw3dy2XQ4-OQO};vn^Jo{~kN+_v;}G;2AR*FkML*;v<3lbqV6nnU6cO%r)|r zGZLG}6jYY&sQaGqv0Q`V)5(%Ov<1n1=0l7h;kmBU{{wocQ z$)EI8=0Sc(2t*tS#qRPL(B&UEHNSMRuRUV>9cHf4RF)+xtV`{o(=y z`!(`75IgyTJl+%uFs>b4T#;@$9z(05XLCZ)ksNWB+sE>8mTJ&>KXm@T-Z3Kp#PZO( z{Mb9>t*bYlOHJ7%#S&$+wCQzDiwtV_$Q`-S~*_Huu8a>@BaRNaK5B9ctpn6V&}~${s-;wb6+)JY&Z1 z)5?oW{Hr75GX{cg=wqPwB&}mx`zFl1$?XGW(cfAyVCXC%zxX;6JIq<;6As zqv!8mud{;Z3^Zj7*Y(PUe5T{ea8cC?kF^Tj0)iD38{X$!s)@3*FMTB><*s%7**zW7 zdnEK~LS_b^G9C!`05Kkh2wYec>B~Ccs2=$+mIU2gH59F?#eRL8o_fja*34CFbEXK5 zYb#N4GjUZH1WdL$OsYvXh3k8&7WNEHn%TH7&)b#_8A)+UE)V#7av*{}xRfsbfy~6K zF4CmhJv;ua(dY*sKlEp}48Z-!XL|!I<&1EKlY6gb8&X=cGDj=ZH4rEwJ4U}joOtLtC#Q=2o#Uih@1QFMpS}E(t;%Wp%|-?$zuDZ@HkMMoM;TPilnvs z!iU$+K0l+0C$7%~DUeTU0Y;lI;TMMloD1a=XM`@ZRWqu7QalBx zroTQ@tcZA_B=X&;#nKmAVPvS7fgshbj&<@q*|~OLmWlD`H4)=;-S(1FiZEI@65?v{ zaUbB@7P4GHPAmy|1A_s;$y?c0GD*tAGiH~6apYWOCEi|7Q_;fbd;6imVby)uUN(6e zNo$gl66|O=PdJ}c!~jfH=o3hZ&(=6lyOF>?+hA5cCI2Z5Ai1U>ziwrTF@G4qL(J}c zD2Tq2WXf;zXl^a`t;pkX(N`}59A8~Jm1f?Pwl}E7oL>k`(qfxR*w*BV-erku zw`A0gYv+#KN(j8IZ(Wo_8vuxbXdv-m>iJe19*1dg5!}%1FhQx4pKk8`dE%w*W&^Ca zLX&Bo&-Db$sUNQej=nln5(q9&mx)OprV`>T>^*Lt9P`3?$NEl3jYtG%5Azv^Ugg@I zNcZY^X$F9@51EWO&HCxpR5(A+W8LB6g9GV;wq>1nrCSLFL`t-n@p5tDMbvi)v>(4e zj{-_Gi%^@#zOyIFoJxM|RB=cW`*x^=haE7{y-r}%G8SX-jO`0PLZj_#L8|J}DSXE- z2bZ5`R-NzgdarSdBI#>$!L-R;hxCyuhxIjKK1}wY`AUC$>zrq+leAh>GqYdnnYJFv z;yH&4=^deK!5rVc2iyin$oC@LaIS)BK)-FTTRv;CxrW^|tUqqor|^xa-x*(Q@6(sP z>Eb;i=xPy0MjyfrOz*ykwk+pZeosPFpRQS9cnc<9H~~vs2*@MCwM~Kn1kbU;OcRVdFn5 z=l-fk^F1Ck(lP6N;1RLHFAMsvN8aZRX#_VH^^2ojn1uiBO6V_+8}qwS>wi_)|Mg+^ zhc5fScb$LnrO3bf{+W&)j7XXW^K+zh6k<^*%L1w(|-_XJZ9-F~4kYu#X-IJzoUj}Jku0;SO3XkpYWnUF#74lBBp zldKg>9v$3xFu~GL*@SD<<9Y0dZ#FTpmFp1$Ef@uSH=6BDi{e9a3c%4sR1)y}` z$WWi;w5IjT3m$>E^Gaif!rt@_soI`Hl(;*7AdBurkaCfXV|a$}FAgcZ1X3J%vYI3V zxt{A=6k`@t?6wE0$P!a#DjBgl+|w`vE2NLIZ?ns|qa_wmL4}sTI3pQ?O-*lC7pt!# zm(!224-pw=U6dBgMoBdOi^G+&un&5fln*#QE~F9=@&p3A!SwW0KZCczlFrvx7;Atr zRgv~@{Tco}`uQp15T3yqGF*s#%j99QEP4uza%z}g35CYy!w*(ZmQ}TdaJ38Knji7v zJn_``@LK*nk`+gYZPt69dHiKhHD%Y6K^?(fuLa|tJl_k^Z}!qId_F3W5Ga8jBD0ox zpf;*1zFPx_vY)`&b`GhJlS^9jBlXOc?B6)Yc?c-JDoT9dd@vSe`K2n*hU=vo(|~<_ zkx4nnWXICYPI>e|6J0?zHf!kHK%n{1-0*=e8P5fA@0*ux2jai&cmpdJUnTNl_TZ^a zayJ$Lf6t8ts7;hIpLMt4LKB;6g!9Qree;Kkgq_AxQ>~tsDJ8++Nil5VL#7F{qWOai z!ZNhn>yzyEbmaIdSJp3_-3hq4w#20%b||DyhBt_YI(rHo8h&v+7?iu)VhecN-O0%5 zAejD$wgH<;v3SPB)ePOV^xSGG<+f8Ifg*M^`GKXuiQ|bnV_vT-&|hDvjJc5B_(I*X za(Jjs9-?dj3-J=Uj#OIPf_!!IQ-23T`vo62MWGh&DgE(84>9eflZS|EAixb@r~tgb zlWITD=d;7AlE@@pTyG%wZ7seE&%vQZh@9E-lAL^5*r>03!=8loAsD z`}OVJ3oxcLPv3@X<{F>ODIw)*RsuDN4gsJhft1&&S$9hI+Lo9n-FNDe_7P7l<7^jF zA{k)O7+g)sAaW`cd1wU=%B#rBV~2GbI3wpi6^$avs_Hl!o2&Pq?(5h&^~3ViSen21WU*Q* znXyMRhfeB_lxF+a{Nk`25@R{V9=tv}qNh?>&@-eN^`NvH z6simqF{05WZC;x+G&gdEcI0_S{?S80yYucxkWVY~K&ua9p@5=KR7ebpWe_B0(5%Dd z%9-*O82voUaJ!vFg3@ggF+3xuh&?Lc_O1odqUw?H)x3?vvZSW;lCE-to5`_V0mT@q zY}Jd4o=RhSGVvOMwk@dKXM;BP!%-MR+->%`4O+5NhZ-gcnL1P!kT<4oD)??ZW0lqF zbU`rs`LlALhX${ zKX5#B3)U3NlKA{>6TqY=Ko0Ed_%>uRA>{>t7oa}Pv8|iyqYeRCX(6v$Rm7s4&xX^r zw~mz57M$LZrPRoaum!UXeD?(~*~O}{{VOR+Y%}=n`e0KHzpz99$}UdZuVq)K-X&bM zu`E@+aphR=h0c=KHder&&Vx>(e83emqjO!Mn z#|DxtC-$P~fFS^sR4m|d)>=C9G)ye^;=etdQBY5?c*yn&szui|sGWDV{Vj4R>fN3T zfUjboxrDC9UBj7Uby=;HN@xqq%=i(ySMo~CTX~7gvD&-D{YB7`1N*n+ZqE^|0@Ol6 z)rQoZDptcZx;@JP{=^E6P7=|3DCiKboIV;ZVxbo$SpQ`Ng|bI5>8P_gElyz&FW7c3 zf#_muKfVO3zAK%oIKTVyVD*AcKwvROLrvAA;26iQ5It9G9h_)WZHp}f2Gf{Hkc)yn z)+I?Hr;I!#IeX=fQ35$KA{l)3MBD9t#CWQ4%`)04hk~D=F45V_KU)~bHh*gNM#osi)#?; zg@2&5{=3-qpXRQl2S|pD=3Dv`!AJ+I!Rn(X6l4P1oY~aC&Mlf%BUrv13^a%{T(~jg zcJS8Vxe&sW;y9zvPX{j`I`9k*xSxU1!0AG|U6}M*F!i{%I*#4eH5iI5(|h;COT0Ab z<}IC*0gc6I7uz^gXyjiGnf|F<6f$84q@VY8Wpc8(-Yc||&weuIgk3h9y^TVAfBUa< z5->#keNHm;2j?XJ^(Ff!E*<{|#Yz6=4Eev{pJa7BgFbG|0vH;aPvSH|d~^;i0K$5j zavn=^hG-=3Bi5JDMwK7@j84*vaNZr}s_*$M&5suGlFasNv}7G`)T%7z7M-VH5|j4M zj_}7VJL+_P91nFcH4@8OwH3F}ROoIItBrEvnR)f1%4qIhM|0sn*RJ`C8)>}KwI7@} z-i&0G5Buj$2V`kg4fo6{Wt2pW_7#6jh{4?=zD6?mfxSypCD{1{nhBXgp!{eADn=~p zy1~ow7Pqo2#Cu!$_qs+Yw77M(U70{9U8xzd+{{Nbb(U+_!tu z9^g5&lYY22|B0zrQP}7+((x;IYKyGpro*xYCrgw6Tirt!DuW=~TFP_0z0_l#RFT~u zIVL(2FHF?tk+=F1f_M7@JF2zV{ReE{|BuEr|7ol9pXl5DkBz@K#$W%KwZdv-<6NON z1_^3Kb}YzKCldIVX4k8lU8|qh#hJMK@RsFQHQaPk61%(9dbo%KOk^`q$Kfm{0Sq$f zwQ+!#5gQ7<&Yv}*b02TDF}c-5@bF)fnBJ+Ft6{cRLidiLQ(cLCCmu+qrfOM4IAYo{ zsZMsRkRBVo{%Xg~vdR}Yer#HxSVU{v?M0VHsI{0ASP@9pHxa0jJ_@dhN_E@?ABHMi zm^#-e3N?*!yfo34&ZNjU_vXU#(9u&-=-CLe@$dHlvjO2j;e0Q$&$BUO^J!aS_2_48 zm=v8}`zyPj;EOtsMd({q${ed|F&o*J2uzFTnU6Narlx?#t|}p;L1w)>hmn#~XVQhX z91xJVW2AS1gv;Iq8|} z7g2fs|3#*fxm7gwNy0GULPm5&e$~WxF#87b_BlvanmU@%Tt+*p&I7$Op#&op<%)M< zQn_EW4c!&|qSE7j@A0Xsdl?_~_;TYENyQ=MX{Gk6nZoH#hXY$GYxx&_xZVwmD$E~x zJtlHHQRrZc)!4s%sO@lu=F~GBW@b3cpH=;{IXP!`X}uPmd||&-QugL|-{Uxrn(XBe zzZ;QMND$Lg9cp>rnx z|BelRcL4lFH~W7y2>p={`bU%nCZ3I#JcMs^ut8SPLr*_~!|R1xc{h%~Q*HO;+b1X= zTJ@Mo547fY_@V1uNQ^=@ep5~@4N1puU@FYwJ-p~U-!;*nnx`&fvy*lTze`LH3(j-C z@XCcWHlfD8h7D-bGOULuSz*+Hrdqecf?Unc(Vz3CK#D< zvL@KTk31Qm^@1sYze|cK$g*8dC#VRH66e29N`zW$OMe$Db`oI}TbH)9|884JJ6;xy z?5dw2yTrf+1Ip`Zk!SW$Fg3_L)K{;$Urs1g8g+*#@TMPOA~-0%>4?zzr`6o=)Jb7v z#+PwFxVzt5v%5QQ7_gxrxte4j4kp zkQsZcWHqc`FsIA*km%HtX3Dp9&hNC~eqsMG>2u0G)P2#Iyq^z^xQJvW(3l50FJOxC zg`c&H)kqn~u+T9gv0?+HCc;Xi*Zfw0j?@KtA?vu4?@mmqf7N!mUqY%0xy$I{VIe6E zzI4twxxODdgJp4ZeV^48kuK`Q6D19V$F{tec8KxfY_MC{xGQvwdh{vC%amz3#}4jW zIoGFIpW~s}!JJS}k1ib>a4PpC%=os4^2#}6z%(A2> z47^N1S&(<0!NH!_vSo=S7oK+ZpU1?mY>HEx^fKtku~O!01;WOj&y3jbOg$Dk;ZZIpp|`TzV(If?wCj>oi@DH6@D3P|Lo(s_l^dEo z8Fc3RL|Wotd=`N&E98MR*k`{TZ)1epJhAIkto`w+ZaLXb#0rlRI}qP(iJkligINa< zN(|1n$6CY>JvUQz>_{uf;X%cEKTG1RS=l~+WU>1JUyi0u=@Xza20Uok50hjAI<)+I z$!`fMPUr-^5|7uZxz1g=iuy-5b>dDKiMh1!2uIdmBYp%o2d~!jdHSc75!?W0G83|{ zvV5wyb#<5qA_tX;yMp~o`o=GAyIJgJam27G?|Tu&bTH&TL;;T_fE1iQ0j{jVjgyW6 zdZe0}BsM10<&f_*v#bjay6IH0qd*t??YW!|amV*c3)}aO7Z5*2CRoQY>THZIR0t_} z2&ae-EYDPPiw*0@UyE|SUx zCJg#qKUCBwNnno-m6QociKIwfz23&_OGN@F>$r*dbxk1Bsdc#r&Sc0QFpHiSh{~k( z7k%_J+Po;{@bgMxRDi%>o2crg9oFTDbzz{hGX=m$aYCk*a4%e&Io&V!q(w$4%;Aa0 z)Q{`k5uLn4*z_PvgzD>)$VNqJoxQ;= z_8oxjuYlpbRcfm1&2ZG4xa>7$;N79Zw!~Arn;1~bH02{4JFPrKRw^XNQH^_Uv;%9D z+J}d-yyia&WF>GhOQa-14Zd%QP(qNZ0So3AhbH-?GO68zdl;%R{6nI9M|R%krgE`+j-sw^2pZs7$s@injgVX|-P(V-r)iWnpHMlpoO*+gza@~h6?_88Lm#!!6 z71XIb4uKDyME5G z{%@R-E1^h?PG zz4=VD6gjP2Uph%fr9;>2M$k^I#|_6A-rXxkS>dJVR2%aR8wHAR_Yd&!w^BR2gIGig zpUrx8cZ|$s6OZXD5w>4_MQUBU)IMI3*#S5(GHeXcKLB_oAf2Ooeh7S+pk{L3*qpbo zpqF}0ZIF!mnfy^0V^wRNw`M8ItN0?(Fy(=Gg$T-ZA`#r~Ea4O_D|i%0=w)01uU2MF zChZg6UO_ItWQN&xtq|L8$az@Eg`#}t{R>O)~H9Y-jL>1k+7}rKqsNBn{i`bKQ#p~7n~ameMN$U!-p>K+3$XN(^RZ>ZZ1dL zpd~`Vdg`CB3I_{lP* zt=m%Wa1;aQx9^Wwg>0Mz#0yClmgff3gE0!@9k28Xu~)r9jcK*!EfL1g-yKwwpD;Om ziKpObm;!oq3fT9?;jXZ6K}aUvyhoYP89dxK1!S0#RQdb0B?rR#!md2@iYbs1GB*l0 z?hyYhdEncT4YAYzovsCFHT3?+aC?wD<3(TLbR6zabdFpXW*+}-lGI3M9KL7-A)!#w zuVu6|JECKsKjIC>A=r4Z6Ip9a>?kF|?k6ty~eV_L> z17-_b)iW{EK?!)d<6SUTA(Acp&+9 z*z?dX+!=97&$AsFsbj^pc1vZW(1-@FI~VsDOlri}&qp--g6;eWz6bui^ZVaA;d=O^ zujCBQKDk{zfq%adPl^phe=PSoBe1$wtbcj@$&x?)b`T1jGK8Kwj3jm|exjrGYwaoG zGABF0p>vIW0e%d6bScXG?xfrvpUJ3mALEBH=Ne*rO6rfTiUJ=01hg!f{G|%e`6;G0 z?RziIHFW0(+@P$cPQ^Ho#JkFT@}8nwl0_BeKP*bx42IO z@ys%>fj}VrOk#)R(u04RFv*>4^vj#UN9CRN+cU?G)z|8Z%HNsJD2BVuLQtaMQq8gc zEo22CQZ_7ZJn~e1%;sc=!Mm9DpkVO`p8HjPamY5nuLmdlX{Q{rI9V}aS<95g^RvI8 z1tX59=2m%mD*-xG&9I~R_m$qgx9vG{AIT6te?jzxq`_RbyYDmdD zNPtW#A0Mecs}kiQbN|Gu@*(0XussG6H{C}aZX;Rgr*pgHa`v(5Ds6S zL;PN5j+Tp)20)0IJ ztvGgOnZsW|rIXids#)t5_4S51$a{gKmVzevL`e2f~@znssVYb*8Yn`D*R$z_I;A4qfq> z7tfEa9-Ab!Pe9DO@oekGRP2FS{1cy3QLldLbdzx(h^uP6I5)r}9f8XN>44G}X}SJ- zSEQhIf8gOeb7Cu|^~#H8wg-OObf&@vkb|_kSyu{y?(UJMw4nA>slmA=IvUfI*PWhou(?C3x>nW_m+ zk^;c`db7$&P&|YNpm!eCwzzrqp+~Moj!lMQy0Y)2#r(9N^J)O?FhJeYGG@{u$#L)! zy>1fIr=~u}CoiiduRlI!_yn`ZN&yi5pRgtfO^uLq&L?P!#c5g7r!0Mt$1mu{XEAfr zgSRRbL{QdzS4FJ%1AdnZ6vXxi!PdCV3mG$hmW51HZuj)Ab|_k?@>UIG-=dS#PJfdA zVKHhn;ThpVx`SkV%}A;mf8JF`|Qh~OoZ3gEhpm!iJs7P{Y5 zH-O=*bVmgXfi=oPka~9hac>oi$6Fe=?Kblt1PX3x;4aM$2)8Zl%^LTs5M#&4KSZq8 zvi);A*KkH)6|b@`H0El?erlyD_#TXjJIdX8f>TB8y0uY9Zoc#=Z^%)weqDpVI8-%L zp%X3>Nyy|ht@>Qgw5XihBZ<`1WV1968w~OJt!)XkTRU_j>Pzm7ZaI(o0#qoG$v`U$ z$x6g0_v5ThAZ)ffjpR*oc?pb6cGX1wCYg8jJ@-euq^6cFLN67p=h^o@LG_@YHZ7@I4;YO=StUGpW+0eyzeO z%ByZymASG_ErGxDFz*#)hH!cV&vbNB0c$wDrL(8>`G~#k2OS@IUy|GrgKhbF9QS2d zr@6v+9JPyhR=EwMG%L*dM(Svv=v0?XN82zbGBoQ$_oS;Osc5)Q*fxQPACn*UGOt$H zLGkpCGkiW8Mv^-m#jjXVfR!FzZkFxO9HzO^eG@|lr!%d(xscja(#XfM>Vf=3zKMaV z#(ITryWaDbh!_0Yl024L#?74ohTFWC$p}OpCgtxEBAdrtyA-ko)wpbKg*?LD>8>mZc)PB`)G!n9e)4{FX4yqkg1u7T` zb&%SH1ITiT(-W|i@-L3{vJIH+FcS$BuF>)MZ`u97IOb{q_1dHH$CsP31 zy>A9=K0go#Ly|#LOa^z^RxJf7uTrMw)Hh^vx4f#c&gb*~qHQtlyA&U8N=Pg_du;6x zQSNuJwu=ysMGu3VXU&KF3dEXAEt7Zg3$wJKc*Sc7dv67jUd<69DlM z$!s`kWyvJd-wCwRhKL2Td%f;WbPe^4v-Wrx4&RO|8E;B%L=T+=+I&_o6mgN@-% z;|sWn$&Sw+ZKr=fJk?h!`(^O)^TuM)gJ-?8F#4e1FoD8@46?_Nv z%vrbI!1SxN>CwWLsy{5c4qtkG`SF`}!M*Nt1&<04-_6+9d03U5J)Ty!M1nqqjR`&K&6iAZ)HXeapsOt)WV4W=APWWyJGL&a5imq=$?<-c09V*Zs(JE zq3CQ!ac7Z;6XGZX_p;kXf2H_p1t>hI6KiX(YYwc_J`2t;V$@PBY!hy@H4O%e3$e6;`^D7QDQDp ztazqFA3^;eD5?G-TbZfE#_Qe$<%O7XxCWIzzx78c3By)taf$>Xt_AG+cA(0_w!{ij zv|L!-$*!dyT6TRh^4{h4hFK>TN~a>uX~tMTv_w>MR-7W9W^Je?F+Z1%%eOn2`mzK& z6;ZM`7UezA<X?Df~n zX7X=~?MzFP_G?$c(F6?WQt=MYlSV|XWV z2L6Z=Z@8ysruX3spY8OGtueeE8X*WEurSZ|1D@u!6rl^u?o3D+ywgsmSr-^AwNwdQ zd3Sq2ek;G@qObL7DU6LIJf49pEL z;}x623fLZynFCzQ5|-~x`$`BXym+us#U#9g-*{lVJ=1DKMTzOlzD}kp;k&uo%K&u^ zd|ivS8%L!)Yx&1*St=uks?xvbaS5r^BO4>B`=ks!Nor^WY71ih0HCk? zBghP4l^r2VP%7Qw^m3Ql1?FhMvu~kSl?2B+d-x6e4!R7wuGS4)pY9;`;2E2N0oz7p zgN941nKv8eB~w?7Ms0?;_S$Hqx}MuBwui_iTIQ*XRC7#mAw2<0(zj;hN2gMe=kJ-N zEQqfQ1+NPi0M<2lWV$g<64BFc^z+QLEwrQlBCMniYvCumQ9!SL{lXG3;ybeJzIR~M z^LDA}7gLJSdWH)LFfka5>Lqqq5>tP>MtLpXfBenq<)!ZfKS3QZ&x;eockjcr;=x@@ zhGs?6o~tLgvTx1#=}-6_BJ#o$tRug(EHl2bgK)tu%33-@*TiaiR~|i{uC10W%&#aE zx@dg<#m<8v#xK@eZUL2Ca9FTF1w>GnXH3vI)A2HRhM-t7HLZ-E(Kk+gc3(C>taNu} z8*|L6-y_rY1aH-~{5yk_v3$=9J^Gghuik%vIkvw2^SQ^ADNbI*cA z71|{Ni!W`BP3aN_cFR}r)Yl=ObFufqBTE%>XTHzzDxOtSO{&nvUeOGAEux;VS7^V! zoqaS)S>xofuL?FMAbJg@MY~c6=+@Cdv#2qtaZ zlZmHmqAl1)(0kkCy)bpADk;h8J#|(WE4pP?!A{`#)sLxSF&s~6yrB%J5Uh6>WHIfy z-PEK*$hp61g6@z~oIB%$sgJg3YOV`?7U@#scExhSBQ3#vfXI=Leu$@5;~BhQ3L}{_ zPfo{V?5jei2x05^(Kq9^@px=*7mpxai0fb~$H{+*HZ|N+s(`-3KJTRfz5$X4ZkfcB zd&URxLl1{96oEs_jThH~WzX0`7>AcWF|)OC!mB4MfPMgz$POuNWm^}fc&w7&t0h9X zC_pv-dB4RLq>%af*fpJjrg%Cru(5Z=%c!*cH(d1YHjCDZoDY$&$G|S!gO|O5>5_+5 zlGCdrl~BEb@~7En=h53|<^-&rs#bSv@n+e!Z1sP@70>zkV2(v@j3Vgf7HENJlfeWp zJgYj+GtG^@{gG#RwSs4mbYW*f`opOCKF_H1%{(rC=+|Tx6W}nA6jC=3cmhK+u&*Rk z>fi~+t_9=w?q6<5T_tN}DDvG@JR2!|XG^l^g;$FJY68|x82~7xaVF3%9hPkA2rl25 zmMOQZ(II8zgmawqq+ z#X{a@zonOPb_;}lsonSRzF{ri3Z0}cs4bLHUGHJ^U8nSF;Y+m^%to%mf=XEIfI(n) zoa%Gqr>|4**Og5L8ry?+dB_~HA8G3_PIaw~LZYMJ&LwZInnndvVfKq9F*upI@)+5a z+_hTH2`S93WwT{~IDZ#4ZkgI0-Jv~g>XCVatO$8(oW2~D(JQyG`SJehBgrvW$_Kab z;;cc`6USYjz*C#^27V{v$(EHX`^snPPqHXDH;15P)4C|#AMX^;9V&9!8X;w`BqlRX zcniF;hLMcZc$uqDJ@5%ZBv3u>u^F6ulk8Qrd1}D&I@ME}f@YumqWZLqQKv>^a z%z4Z9!!R0%m4U5h*bWH05n8YXlH{mImC<5yn9(ps;PLN_-VL>pb zP{wT?@S2*jbCMS8KUsv*aZiQYi?f;wdl_?DW2Z>+54gAxFjzMN9*2S)SVR^T=tT>s zHryJ38$hWQFSa`resPqSs8ayre)ucvXcOv)3XfL`_izx@la*g{(!W+FI(BOPow zeeq?Ww|EBVi{KgK_853dC9;rVFkQ7~It`Wg_5HX|e>Kff3wv5wu~h{zw9wiwYSn%E z7LJLrk43PX6-9zDBWmPpjxm>(Y zI|x^z5TM-a#$ckmf&DVI9pAPncMuDw`?19a=(}yt?XGZYQryO?fAYh7>v$a>v02AK zTp>iU8*XZ+ov~bG?*GN1Q_oUYt{GCAGn06qQES6mw`#fW?J%&7%SdpWW^RH-!qR0# zGjhEUW(dPoY_rgjHMlpT*^rr-4Abs{DEX8XJR3wv-a-}YXfPbGL=7VK1a*}{FTT+U zy?h}Lsb$cgyDS;K4dd|BiX9Nmw#Q30F9fsQTQJ!I*Bkj_xNYD0z7${S-1I=-NsPep z?zt0c%F-0bakqlb)dbs&1idG~yU^^p+fIm|fY$l9W2xq?;8v&LZcrd;h?{hA*8fm- zw4yTZV#W3Ry7a+->z+FhdZhsgw_(NW8p|zC_d%j723c@UGp5mTaA|DHVtLhvYH&UK z&B{E*<`rcUHW$d7>+GC(;K_3ywLk#Pk~p>jJX2NOM^?EZEqk-C!zOE7`U6zzuec=h zEY}~1T(<-MXaI8!jG)K_oC^~}`Sl?hx|fE%dq2u2ku z$1G{GQg&aZ*sZXuW%FjV_TMr(eC3&RyryxO=yV4etU$YPSEeMZzb%c2KAafNCqPRG z(jv&|9}Y6gzM4(cMKqm1TPP0Z^uG&SLP|7ws6)Op8niOIWDS@~?ITrNn3Wwv$-34R zQ6rnLdIf7ADF@H+n{xw_QR)Vwk~{85Tf&2(;5aChn4T@yT~mPcvQn8Ysc;oA6!o0(LU{y zu}75U#l7aFCR_Bjlq296IEHx>G?GqhfL8?+3)Rv!oI`VP7mcUUFp-zgNuOrCbceh&m>_LnpAn?cmu>oHu zneDG-3aW?5tzKriWp6&jW3k?|yW$=?mKB7n$(w2oBdk8>o1*YS6Rh|w3t&GA)iUtn zkp2g|nKZK$6+sQ@>t83OL^2ciDu<=?p5?tN`EHUl^MeU=d;liv)B=5x;(Ht-cRHDv zWI9+gSK~vmrw3M4RwT3fPK)~!{rCFcJRXr_aF%0~*OfrPvu1od%uZo_7Vu);`AkB3 z&g1Edn=cz0USwI+MbPA&+^ju$89S{G`&vE72|bRA#8WfUd?9Nf&sjZ?Hf1(+V^P_$ z>FDZNAs9xn{)`uXVUn>dq*j6M(HK?!rvk8r^pqpc2+PHc!Dyd7~-|>s5D! zCOhj_@^40>aL=798~r;|x+c+L>WR<=oi<1PGTIo0$XnL`*CpnViISZmNy$M6c_0*B*^;+y6Pc zsb1~cIavd(JB<%d8`_J#cvvWc!uWvw@^=T!zsW!S!QKr1A80O>4C#6LbMy?LD_ZPt z^=TU&Jh{f(f<}aGvNq?wbBG8=>eeJwukyle;o|wEn`<>Iq{4vx#??!czdc0>Z{27A zzGk(p;@us@Gmet%n;h4+BbuJoeAzUow$_4nDe`JOB|qt9G85;1#3DCV_k_@I14mF> z^00UlCVX{N`$bJfcv?bDn5ZSrkfX&a1m*dx@B>H4L&T_*b4!@^7eDm2U8`q#C$6Eq zM9HHZt79(2C7XM9>x7U|h&zMIPmcP3s`}|Uw2NZ%=~-RmWnDAgOZtfL>Z*J14_3Z- zEOJkwMJ!UMB${Iz$DtB2UZa(0xmhRYbB{0;)y+{#?R;|w6HaUh*^cs_cdmXoE>T?@ zx&I&s0&%B=^DM^)D_$EEmsB=zIW3D*PCai~blF*_6tUw>c#EZ@bjP~tBk^Q`g z*Tu`PCGUGJ(D937{?w-EK0oWJd&8NW@&djQ^|1~M93GPjHm^9$!JW$u@aCR2^}-66 z?21q~%t?H7m(w*ON4ZSUtS6gKT_TU~=Boic-~I0r&wK|?DCg~Tuf5v07*TI6^(+G5 zr3&=CKWt$gD*1vEiS8JYQClGC7TT2;OnAxZ{t+AqfA?hZ(aQPX*s&C9UZP z=&TM2uUXUrztmRv2fAy7Cl=2T(InBMH9c$8RU^IklpF^$bk~|%-QxuHV;)x!5q2q3 z#k}I1>Osj=0)~bZB;!;_Q?nD35wkJ5{eGEsZvE5Cl?6s(wWzDfj>$Bo-L*EP_b-fR z#$#MO4l8ckb{g^15bWVtIOhN9?z_X9+|qrqS2l`96a-X2F_fTGX%UbvRYK@d5NQGe zQbI`-1q7t`8mg3l*+`X^t%#IRqzDQ^5J(~*APL1_h;oV#wOYaKRLfmU63xWxu*|#w{yY@fV;aNkjy1u}T>&s^$XVG4KJEB@pkl?ek zuq`)K4;O1^Gw~;f$uWCE(~4Piui!JRhAVuESca3@GMriUoa4GNkF#Fw&tHqv-^fiX z>lpsL@{Pa`+FC$lsDz~*C(iVEl+vrsu9 zh{I2gRXJh;NCA5{14rXODpsHvImQMFUrIMfiXP|1f@^zUvU z5>CzB=t(0dlas$0eX(#0to+fVQ@ZxZ%K9~p_**rJL5U)IW#UNv6@)OBqsgjfXT!-bt%eb zp)e^;3>kB7-Q#kvT}bNRq~ad!yK4DGogt!e7r!#Y4r#$M+wkbL{%uF)DqS**3j7Z# zvVoItkblMb^fL_&=_uO{?iYG}&j;0ejTKh(q=T4#ZCHY&WYfzT6z#@Zb}g^GUm1TNDu#AVFNPa1lh~!oGyQi^PywuI?RPlsL)J zfF;?5Fu|gww33aBZ+VY&&df93yn5J_sQt+Pq7!}$e}Ay>uAFs(1@d0F=h!|S_H}fY3F`%@RHP-<01=<_

!vRgOK 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 1: - velocity_2 = tf.zeros(shape=[batch_size, 3, group_particles], dtype=tf.float32) - velocity = tf.concat([velocity_1, velocity_2], axis=2) - else: - velocity = velocity_1 - - for b in range(batch_size): - for i in range(group_particles): - x, y, z = 0, 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: - x, y, z = random.random(), random.random(), random.random() - position[b, :, i] = ((x * 2 - 1) / 30 + 0.2, - (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) - velocity_delta[b, :, i] = (y - 0.5, -x + 0.5, 0) - - if num_balls > 1: - for i in range(group_particles): - x, y, z = 0, 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: - x, y, z = random.random(), random.random(), random.random() - position[b, :, i + group_particles] = ((x * 2 - 1) / 30 + 0.4, - (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) - - velocity += velocity_delta - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=position, velocity=velocity, deformation_gradient=F) - - if num_balls == 2: - final_position = sim.initial_state.center_of_mass(group_particles, None) - else: - final_position = sim.initial_state.center_of_mass(None, group_particles) - loss = tf.reduce_mean(input_tensor=final_position[:, 0]) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = trainables) - - goal_input = np.array([[0.6, 0.43, 0.4]], dtype=np.float32) - - t = time.time() - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - grad = sim.eval_gradients(sym, memo)[0][0] - grad_gt = dt * steps - print(grad, grad_gt) - print('grad error relative: ', (grad_gt - grad) / grad_gt) - sim.visualize(memo, interval=30, export=False) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/arm_3d_v3.py b/tensorflow_graphics/physics/demos/arm_3d_v3.py deleted file mode 100644 index 33f475014..000000000 --- a/tensorflow_graphics/physics/demos/arm_3d_v3.py +++ /dev/null @@ -1,238 +0,0 @@ -import sys -sys.path.append('..') - -import random -import os -import numpy as np -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export -import IPython - -lr = 1 -gamma = 0.0 - -sample_density = 15 -group_num_particles = sample_density**3 -goal_pos = np.array([1, 1.17, 1]) -goal_range = np.array([0.6, 0.0, 0.6]) -batch_size = 1 - -actuation_strength = 40 - - -config = 'C' - -act_x = 0.5 -act_y = 1 -act_z = 0.5 - -x = 1 -z = 1 - - -group_offsets = [] -num_links = 3 - -for i in range(num_links): - y = act_y * 2 * i - group_offsets += [(0, y, 0)] - group_offsets += [(0 + act_x, y, 0)] - group_offsets += [(0, y, act_z)] - group_offsets += [(0 + act_x, y, act_z)] - -for i in range(num_links): - group_offsets += [(0, act_y * (2 * i + 1), 0)] - -num_groups = len(group_offsets) - -num_particles = group_num_particles * num_groups - -group_sizes = [(act_x, act_y, act_z)] * 4 * num_links - -for i in range(num_links): - group_sizes += [(1, 1, 1)] - -actuations = list(range(4 * num_links)) -gravity = (0, 0, 0) -head = len(group_offsets) - 1 - -num_particles = group_num_particles * num_groups - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), 9 * len(group_sizes))), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -def main(sess): - t = time.time() - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') - - # Define your controller here - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - controller_inputs.append((goal - goal_pos) / np.maximum(goal_range, 1e-5)) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, 9 * num_groups), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, 9 * num_groups, 1) - # Batch, 6 * num_groups, 1 - intermediate = tf.matmul(W1[None, :, :] + - tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) - # Batch, #actuations, 1 - assert intermediate.shape == (batch_size, len(actuations), 1) - assert intermediate.shape[2] == 1 - intermediate = intermediate[:, :, 0] - # Batch, #actuations - actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength - debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - act = make_matrix3d(zeros, zeros, zeros, zeros, act, zeros, zeros, zeros, zeros) - total_actuation = total_actuation + act - return total_actuation, debug - - res = (60, 90, 60) - bc = get_bounding_box_bc(res) - # stick it to the ground - bc[0][:, :, :5, :] = -1 - - sim = Simulation( - dt=0.0015, - num_particles=num_particles, - grid_res=res, - dx=1.0 / 30, - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess, - E=150) - print("Building time: {:.4f}s".format(time.time() - t)) - - final_state = sim.initial_state['debug']['controller_inputs'] - s = head * 9 - - final_position = final_state[:, s:s+3] - final_velocity = final_state[:, s + 3: s + 6] - loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) - loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) - - loss = loss1 + gamma * loss2 - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - for z in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.9 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - w = ((z + 0.5) / sample_density * group_sizes[i][2] + offset[2] - ) * scale + 0.9 - initial_positions[b].append([u, v, w]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state=initial_state) - - sym = sim.gradients_sym(loss, variables=trainables) - - gx, gy, gz = goal_range - pos_x, pos_y, pos_z = goal_pos - - vis_id = list(range(batch_size)) - random.shuffle(vis_id) - - # Optimization loop - for e in range(100000): - t = time.time() - goal_train = [np.array( - [[pos_x + (random.random() - 0.5) * gx, - pos_y + (random.random() - 0.5) * gy, - pos_z + (random.random() - 0.5) * gz - ] for _ in range(batch_size)], - dtype=np.float32) for __ in range(10)] - print('goal', goal_train) - print('Epoch {:5d}, learning rate {}'.format(e, lr)) - - loss_cal = 0. - print('train...') - for it, goal_input in enumerate(goal_train): - tt = time.time() - memo = sim.run( - initial_state=initial_state, - num_steps=200, - iteration_feed_dict={goal: goal_input}, - loss=loss) - tt = time.time() - grad = sim.eval_gradients(sym=sym, memo=memo) - - for i, g in enumerate(grad): - print(i, np.mean(np.abs(g))) - grad = [np.clip(g, -1, 1) for g in grad] - - - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - sess.run(gradient_descent) - print('Iter {:5d} time {:.3f} loss {}'.format( - it, time.time() - t, memo.loss)) - loss_cal = loss_cal + memo.loss - folder = 'arm3d_demo/{:04d}/'.format(e * len(goal_train) + it) - sim.visualize(memo, batch=random.randrange(batch_size), export=None, - show=True, interval=3, folder=folder) - with open(os.path.join(folder, 'target.txt'), 'w') as f: - goal_input = goal_input[0] - print(goal_input[0], goal_input[1], goal_input[2], file=f) - #exp.export() - print('train loss {}'.format(loss_cal / len(goal_train))) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/basketball.py b/tensorflow_graphics/physics/demos/basketball.py deleted file mode 100644 index af1cce45c..000000000 --- a/tensorflow_graphics/physics/demos/basketball.py +++ /dev/null @@ -1,98 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_bounding_box_bc -from time_integration import UpdatedSimulationState -import tensorflow as tf -import numpy as np -from IPython import embed - - -def main(sess): - batch_size = 1 - gravity = (0, -1) - N = 10 - num_particles = N * N - steps = 150 - dt = 1e-2 - goal_range = 0.15 - res = (30, 30) - bc = get_bounding_box_bc(res) - - lr = 1e-2 - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - m_p=1, - V_p=1, - E = 10, - nu = 0.3, - sess=sess) - position = np.zeros(shape=(batch_size, num_particles, 2)) - - velocity_ph = tf.Variable([0.2, 0.3], trainable = True) - velocity = velocity_ph[None, :, None] + tf.zeros( - shape=[batch_size, 2, num_particles], dtype=tf.float32) - for b in range(batch_size): - for i in range(N): - for j in range(N): - position[b, i * N + j] = ((i * 0.5 + 3) / 30, - (j * 0.5 + 12.75) / 30) - position = np.array(position).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=position, velocity=velocity) - - final_position = sim.initial_state.center_of_mass() - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) - sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = trainables) - - goal_input = np.array([[0.7, 0.3]], dtype=np.float32) - - - for i in range(100): - # if i > 10: - # lr = 1e-1 - # elif i > 20: - # lr = 1e-2 - t = time.time() - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - - - #if i % 1 == 0: - # sim.visualize(memo) - grad = sim.eval_gradients(sym, memo) - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - sess.run(gradient_descent) - print('iter {:5d} time {:.3f} loss {:.4f}'.format( - i, time.time() - t, memo.loss)) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/bridge.py b/tensorflow_graphics/physics/demos/bridge.py deleted file mode 100644 index 4ba915e76..000000000 --- a/tensorflow_graphics/physics/demos/bridge.py +++ /dev/null @@ -1,116 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_bounding_box_bc -from time_integration import UpdatedSimulationState -import tensorflow as tf -import numpy as np -from IPython import embed - -batch_size = 1 -gravity = (0, -1) -N = 10 -group_size = np.array([[10, 20], [10, 20], [90, 10], [10, 10]]) -group_position = np.array([[5, 2.5], [20, 2.5], [2.5, 8.5], [12.5, 12]]) -num_particles = (group_size[:, 0] * group_size[:, 1]).sum() -steps = 200 -dt = 5e-3 -goal_range = 0.15 -res = (30, 30) -bc = get_bounding_box_bc(res) - -lr = 10 - -def main(sess): - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - sess=sess) - - ''' - youngs_modulus = np.ones(shape=(batch_size, num_particles, 1)) - youngs_modulus[:, : 400] = 100 - youngs_modulus[:, 400: -100] = 10 - youngs_modulus[:, -100: ] = 10 - ''' - ym_var = tf.Variable([5.], trainable = True) - ym_1 = tf.constant(100., shape = [1, 1, 400], dtype = tf.float32) - ym_2 = ym_var + tf.zeros(shape = [1, 1, 900], dtype = tf.float32) - ym_3 = tf.constant(10., shape = [1, 1, 100], dtype = tf.float32) - youngs_modulus = tf.concat([ym_1, ym_2, ym_3], axis = 2) - - - velocity = np.zeros(shape = (batch_size, 2, num_particles)) - position = np.zeros(shape = (batch_size, num_particles, 2)) #swap axis later - - for b in range(batch_size): - cnt = 0 - for group, pos in zip(group_size, group_position): - n, m = group - x, y = pos - for i in range(n): - for j in range(m): - position[b][cnt] = ((i * 0.25 + x) / res[0], - (j * 0.25 + y) / res[1]) - cnt += 1 - position = np.swapaxes(position, 1, 2) - - mass = np.ones(shape = (batch_size, 1, num_particles)) - mass[:, :, :400] = 20 - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=position, velocity=velocity, - particle_mass=mass, youngs_modulus=youngs_modulus) - - final_position = sim.initial_state.center_of_mass(-100, None) - loss = tf.reduce_sum(input_tensor=tf.abs(final_position - goal)[:, 1]) - # loss = tf.reduce_sum(tf.abs(final_position - goal)) - sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) - sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = trainables) - - goal_input = np.array( - [[0.5, 0.4]], - dtype=np.float32) - - log = tf.compat.v1.Print(ym_var, [ym_var], 'youngs_modulus:') - - for i in range(1000000): - t = time.time() - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - grad = sim.eval_gradients(sym, memo) - #if i % 5 == 0: # True: # memo.loss < 0.01: - sim.visualize(memo, interval = 2, show=True) - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - sess.run(gradient_descent) - print('iter {:5d} time {:.3f} loss {:.4f}'.format( - i, time.time() - t, memo.loss)) - log.eval() - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_2d.py b/tensorflow_graphics/physics/demos/collision_2d.py deleted file mode 100644 index da3402bec..000000000 --- a/tensorflow_graphics/physics/demos/collision_2d.py +++ /dev/null @@ -1,102 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_bounding_box_bc -import tensorflow as tf -import numpy as np -from IPython import embed - -batch_size = 1 -gravity = (0, 0) -N = 10 -group_particles = N * N * 2 -num_particles = group_particles * 2 -steps = 100 -dt = 5e-3 -goal_range = 0.15 -res = (100, 100) -bc = get_bounding_box_bc(res) - -lr = 5e-1 - -def main(sess): - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - E=1, - m_p=1, - V_p=1, - sess=sess) - position = np.zeros(shape=(batch_size, 2, num_particles)) - - velocity_ph = tf.Variable([0.4, 0.05], trainable = True) - velocity_1 = velocity_ph[None, :, None] + tf.zeros( - shape=[batch_size, 2, group_particles], dtype=tf.float32) - velocity_2 = tf.zeros(shape=[batch_size, 2, group_particles], dtype=tf.float32) - velocity = tf.concat([velocity_1, velocity_2], axis = 2) - - for b in range(batch_size): - for i in range(group_particles): - x, y = 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: - x, y = random.random(), random.random() - position[b, :, i] = ((x * 2 + 3) / 30, - (y * 2 + 12.75) / 30) - - for i in range(group_particles): - x, y = 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: - x, y = random.random(), random.random() - position[b, :, i + group_particles] = ((x * 2 + 10) / 30, - (y * 2 + 12.75) / 30) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state(position=position, velocity=velocity) - - final_position = sim.initial_state.center_of_mass(group_particles, None) - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - # loss = tf.reduce_sum(tf.abs(final_position - goal)) - sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) - sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = trainables) - - goal_input = np.array([[0.7, 0.3]], dtype=np.float32) - - for i in range(1000000): - t = time.time() - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - grad = sim.eval_gradients(sym, memo) - print('grad', grad) - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - sess.run(gradient_descent) - print('iter {:5d} time {:.3f} loss {:.4f}'.format( - i, time.time() - t, memo.loss)) - if i % 5 == 0: # True: # memo.loss < 0.01: - sim.visualize(memo) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_3d.py b/tensorflow_graphics/physics/demos/collision_3d.py deleted file mode 100644 index 6fb62aba4..000000000 --- a/tensorflow_graphics/physics/demos/collision_3d.py +++ /dev/null @@ -1,119 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_bounding_box_bc -import tensorflow as tf -import numpy as np -from IPython import embed - -batch_size = 1 -gravity = (0, 0, 0) -N = 15 -group_particles = N * N * N -num_balls = 2 -num_particles = group_particles * num_balls -steps = 100 -dt = 5e-3 -res = (100, 100, 100) -bc = get_bounding_box_bc(res) - -lr = 1e3 - - -def main(sess): - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - E=1, - sess=sess) - position = np.zeros(shape=(batch_size, 3, num_particles)) - velocity_delta = np.zeros(shape=(batch_size, 3, num_particles)) - - F = np.zeros(shape=(batch_size, 3, 3, num_particles)) - scale = 1.00 - F[:, 0, 0, :] = scale - F[:, 1, 1, :] = scale - F[:, 2, 2, :] = scale - - #velocity_ph = tf.Variable([0.4, 0.00, 0.0], trainable = True) - delta = np.zeros(shape=(batch_size, 3, group_particles), dtype=np.float32) - delta[:, 0, :] = 0.2 - velocity_ph = tf.Variable(delta, trainable=True) - velocity_1 = velocity_ph + delta - if num_balls > 1: - velocity_2 = tf.zeros(shape=[batch_size, 3, group_particles], dtype=tf.float32) - velocity = tf.concat([velocity_1, velocity_2], axis=2) - else: - velocity = velocity_1 - - for b in range(batch_size): - for i in range(group_particles): - x, y, z = 0, 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: - x, y, z = random.random(), random.random(), random.random() - position[b, :, i] = ((x * 2 - 1) / 30 + 0.2, - (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) - velocity_delta[b, :, i] = (y - 0.5, -x + 0.5, 0) - - if num_balls > 1: - for i in range(group_particles): - x, y, z = 0, 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: - x, y, z = random.random(), random.random(), random.random() - position[b, :, i + group_particles] = ((x * 2 - 1) / 30 + 0.4, - (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) - - velocity += velocity_delta - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=position, velocity=velocity, deformation_gradient=F) - - if num_balls == 2: - final_position = sim.initial_state.center_of_mass(group_particles, None) - else: - final_position = sim.initial_state.center_of_mass(None, group_particles) - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = trainables) - - goal_input = np.array([[0.6, 0.43, 0.4]], dtype=np.float32) - - for i in range(1000000): - t = time.time() - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - grad = sim.eval_gradients(sym, memo) - print('grad', grad[0]) - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - print(sess.run(velocity_ph)) - sess.run(gradient_descent) - print('iter {:5d} time {:.3f} loss {:.4f}'.format( - i, time.time() - t, memo.loss)) - if i % 5 == 0: # True: # memo.loss < 0.01: - sim.visualize(memo, interval=3, export=True) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_grad_2d.py b/tensorflow_graphics/physics/demos/collision_grad_2d.py deleted file mode 100644 index 425b489b3..000000000 --- a/tensorflow_graphics/physics/demos/collision_grad_2d.py +++ /dev/null @@ -1,128 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_bounding_box_bc -from simulation import tf_precision, np_precision -import tensorflow as tf -import numpy as np -from IPython import embed - -batch_size = 1 -gravity = (0, 0) -N = 10 -group_particles = N * N * 2 -num_particles = group_particles * 2 -steps = 100 -dt = 5e-3 -goal_range = 0.15 -res = (100, 100) -bc = get_bounding_box_bc(res) - -lr = 5e-1 - -def main(sess): - - random.seed(100) - - goal = tf.compat.v1.placeholder(dtype=tf_precision, shape=[batch_size, 2], name='goal') - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - E=1, - m_p=1, - V_p=1, - sess=sess, - part_size = 20) - position = np.zeros(shape=(batch_size, 2, num_particles), dtype = np_precision) - velocity_delta = np.zeros(shape=(batch_size, 2, num_particles), dtype = np_precision) - - # velocity_ph = tf.Variable([0.4, 0.05], trainable = True) - velocity_ph = tf.compat.v1.placeholder(dtype = tf_precision, shape = [batch_size, 2], name = 'velocity') - velocity_1 = velocity_ph[:, :, None] + tf.zeros( - shape=[batch_size, 2, group_particles], dtype=tf_precision) - velocity_2 = tf.zeros(shape=[batch_size, 2, group_particles], dtype=tf_precision) - velocity = tf.concat([velocity_1, velocity_2], axis = 2) - - for b in range(batch_size): - for i in range(group_particles): - x, y = 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: - x, y = random.random(), random.random() - position[b, :, i] = ((x * 2 + 3) / 30, - (y * 2 + 12.75) / 30) - velocity_delta[b, :, i] = (y - 0.5, -x + 0.5) - - for i in range(group_particles): - x, y = 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: - x, y = random.random(), random.random() - position[b, :, i + group_particles] = ((x * 2 + 10) / 30, - (y * 2 + 12.75) / 30) - - - velocity += velocity_delta - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state(position=position, velocity=velocity) - - final_position = sim.initial_state.center_of_mass(group_particles, None) - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - # loss = tf.reduce_sum(tf.abs(final_position - goal)) - sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) - sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = [velocity_ph]) - - goal_input = np.array([[0.7, 0.3]], dtype=np_precision) - v = np.array([[0.4, 0.05]], dtype = np_precision) - - delta = 1e-3 - for i in range(1000000): - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: v}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - print(memo.loss) - sim.visualize(memo, interval=10) - grad = sim.eval_gradients(sym, memo) - print('grad', grad) - for d in range(2): - v[:, d] += delta - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: v}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - loss1 = memo.loss - v[:, d] -= 2 * delta - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: v}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - loss2 = memo.loss - v[:, d] += delta - print((loss1 - loss2) / 2.0 / delta) - break - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_grad_3d.py b/tensorflow_graphics/physics/demos/collision_grad_3d.py deleted file mode 100644 index 0751317ab..000000000 --- a/tensorflow_graphics/physics/demos/collision_grad_3d.py +++ /dev/null @@ -1,144 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_bounding_box_bc -import tensorflow as tf -import numpy as np -from IPython import embed - -batch_size = 1 -gravity = (0, 0, 0) -N = 15 -group_particles = N * N * N -num_balls = 2 -num_particles = group_particles * num_balls -steps = 200 -dt = 5e-3 -res = (100, 100, 100) -bc = get_bounding_box_bc(res) - -lr = 1e3 - - -def main(sess): - - random.seed(123) - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - E=1, - sess=sess, - part_size = 20) - position = np.zeros(shape=(batch_size, 3, num_particles)) - velocity_delta = np.zeros(shape=(batch_size, 3, num_particles)) - - F = np.zeros(shape=(batch_size, 3, 3, num_particles)) - scale = 1.00 - F[:, 0, 0, :] = scale - F[:, 1, 1, :] = scale - F[:, 2, 2, :] = scale - - #velocity_ph = tf.Variable([0.4, 0.00, 0.0], trainable = True) - # velocity_ph = tf.Variable(delta, trainable=True) - velocity_ph = tf.compat.v1.placeholder(dtype = tf.float32, shape = [batch_size, 3], name = 'velocity') - velocity_1 = velocity_ph[:, :, None] + tf.zeros( - shape=[batch_size, 3, group_particles], dtype=tf.float32) - if num_balls > 1: - velocity_2 = tf.zeros(shape=[batch_size, 3, group_particles], dtype=tf.float32) - velocity = tf.concat([velocity_1, velocity_2], axis=2) - else: - velocity = velocity_1 - - for b in range(batch_size): - for i in range(group_particles): - x, y, z = 0, 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: - x, y, z = random.random(), random.random(), random.random() - position[b, :, i] = ((x * 2 - 1) / 30 + 0.2, - (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) - velocity_delta[b, :, i] = (y - 0.5, -x + 0.5, 0) - - if num_balls > 1: - for i in range(group_particles): - x, y, z = 0, 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 + (z - 0.5) ** 2 > 0.25: - x, y, z = random.random(), random.random(), random.random() - position[b, :, i + group_particles] = ((x * 2 - 1) / 30 + 0.4, - (y * 2 - 1) / 30 + 0.4, (z * 2 - 1) / 30 + 0.4) - - velocity += velocity_delta - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=position, velocity=velocity, deformation_gradient=F) - - if num_balls == 2: - final_position = sim.initial_state.center_of_mass(group_particles, None) - else: - final_position = sim.initial_state.center_of_mass(None, group_particles) - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = [velocity_ph]) - - goal_input = np.array([[0.6, 0.43, 0.4]], dtype=np.float32) - v = np.array([[0.5, 0.05, -0.05]], dtype=np.float32) - - delta = 1e-4 - for i in range(1000000): - t = time.time() - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: v}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - grad = sim.eval_gradients(sym, memo) - print('grad', grad[0]) - # sim.visualize(memo, interval=3, export=True) - for d in range(3): - v[:, d] += delta - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: v}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - loss1 = memo.loss - v[:, d] -= 2 * delta - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: v}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - loss2 = memo.loss - v[:, d] += delta - print((loss1 - loss2) / 2.0 / delta) - break - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - print(sess.run(velocity_ph)) - sess.run(gradient_descent) - print('iter {:5d} time {:.3f} loss {:.4f}'.format( - i, time.time() - t, memo.loss)) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/collision_mass.py b/tensorflow_graphics/physics/demos/collision_mass.py deleted file mode 100644 index 340e1e4c6..000000000 --- a/tensorflow_graphics/physics/demos/collision_mass.py +++ /dev/null @@ -1,108 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_bounding_box_bc -from time_integration import UpdatedSimulationState -import tensorflow as tf -import numpy as np -from IPython import embed - -batch_size = 1 -gravity = (0, 0) -N = 40 -group_particles = N * N -num_particles = group_particles * 2 -steps = 300 -dt = 3e-3 -goal_range = 0.15 -res = (100, 100) -bc = get_bounding_box_bc(res) - -lr = 1 - -def main(sess): - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - sess=sess) - position = np.zeros(shape=(batch_size, num_particles, 2)) - - velocity_ph = tf.compat.v1.placeholder(shape = (2, ), dtype = tf.float32) - velocity_1 = velocity_ph[None, :, None] + tf.zeros( - shape=[batch_size, 2, group_particles], dtype=tf.float32) - velocity_2 = tf.zeros(shape=[batch_size, 2, group_particles], dtype=tf.float32) - velocity = tf.concat([velocity_1, velocity_2], axis = 2) - - mass_ph = tf.Variable([1.], trainable = True) - mass_1 = mass_ph[None, None, :] + tf.zeros( - shape = [batch_size, 1, group_particles], dtype = tf.float32) - mass_2 = tf.ones(shape = [batch_size, 1, group_particles], dtype = tf.float32) - mass = tf.concat([mass_1, mass_2], axis = 2) - - for b in range(batch_size): - for i in range(group_particles): - x, y = 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: - x, y = random.random(), random.random() - position[b, i] = ((x * 2 + 3) / 30, - (y * 2 + 12.25) / 30) - - for i in range(group_particles): - x, y = 0, 0 - while (x - 0.5) ** 2 + (y - 0.5) ** 2 > 0.25: - x, y = random.random(), random.random() - position[b, i + group_particles] = ((x * 2 + 10) / 30, - (y * 2 + 12.75) / 30) - position = np.array(position).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=position, velocity=velocity, particle_mass = mass) - - final_position = sim.initial_state.center_of_mass(group_particles, None) - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) ** 0.5 - # loss = tf.reduce_sum(tf.abs(final_position - goal)) - sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) - sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) - - trainables = [mass_ph] - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = trainables) - - goal_input = np.array( - [[0.68, 0.52]], - dtype=np.float32) - - for i in range(1000000): - t = time.time() - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: [0.5, 0]}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - grad = sim.eval_gradients(sym, memo) - sim.visualize(memo, interval=5, folder='sysid_demo/iteration{:04d}'.format(i)) - print('mass', mass_ph.eval()) - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - sess.run(gradient_descent) - print('iter {:5d} time {:.3f} loss {:.4f}'.format( - i, time.time() - t, memo.loss)) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/crawler_3d.py b/tensorflow_graphics/physics/demos/crawler_3d.py deleted file mode 100644 index af46cbe7f..000000000 --- a/tensorflow_graphics/physics/demos/crawler_3d.py +++ /dev/null @@ -1,288 +0,0 @@ -import sys -import math -sys.path.append('..') - -import random -import os -import numpy as np -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export -import IPython - -evaluate = False -lr = 10 -gamma = 0.0 - -sample_density = 15 -group_num_particles = sample_density**3 -goal_pos = np.array([1.4, 0.4, 0.5]) -goal_range = np.array([0.0, 0.0, 0.0]) -batch_size = 1 - -actuation_strength = 4 - - -config = 'C' - -exp = export.Export('crawler3d') - -# Robot B -if config == 'B': - num_groups = 7 - group_offsets = [(0, 0, 0), (0.5, 0, 0), (0, 1, 0), (1, 1, 0), (2, 1, 0), (2, 0, 0), (2.5, 0, 0)] - group_sizes = [(0.5, 1, 1), (0.5, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (0.5, 1, 1), (0.5, 1, 1)] - actuations = [0, 1, 5, 6] - fixed_groups = [] - head = 3 - gravity = (0, -2, 0) - - - -#TODO: N-Ped -#Robot C -else: - - num_leg_pairs = 2 - - x = 3 - z = 3 - act_x = 0.5 - act_y = 0.35 - act_z = 1 - - group_offsets = [] - for x_i in np.linspace(0, x - 2*act_x, num_leg_pairs): - - group_offsets += [(x_i, 0, 0)] - group_offsets += [(x_i + act_x, 0, 0)] - group_offsets += [(x_i, act_y, 0)] - group_offsets += [(x_i + act_x, act_y, 0)] - - group_offsets += [(x_i + act_x, 0, act_z * 2)] - group_offsets += [(x_i, 0, act_z * 2)] - group_offsets += [(x_i + act_x, act_y, act_z * 2)] - group_offsets += [(x_i, act_y, act_z * 2)] - - - for i in range(3): - group_offsets += [(i, 0, act_z)] - num_groups = len(group_offsets) - - #group_offsets += [(0.0, 1.0, 0.0)] - num_particles = group_num_particles * num_groups - group_sizes = [(act_x, act_y, act_z)] * num_leg_pairs * 2 * 4 + [(1.0, 0.8, 1.0)] * int(x) - actuations = list(range(8 * num_leg_pairs)) - fixed_groups = [] - head = 2 * 8 + 2 - gravity = (0, -2, 0) - -#IPython.embed() - - -num_particles = group_num_particles * num_groups - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - -K = 8 - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), K)), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -def main(sess): - t = time.time() - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') - - # Define your controller here - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - controller_inputs.append((goal - goal_pos) / np.maximum(goal_range, 1e-5)) - controller_inputs_backup = controller_inputs - controller_inputs = [] - t = tf.ones(shape=(1, 1)) * 0.06 * tf.cast(state.step_count, dtype=tf.float32) - for k in range(8): - controller_inputs.append(tf.sin(t + 2 / K * k * math.pi)) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, K), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, K, 1) - # Batch, 6 * num_groups, 1 - intermediate = tf.matmul(W1[None, :, :] + - tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) - # Batch, #actuations, 1 - assert intermediate.shape == (batch_size, len(actuations), 1) - assert intermediate.shape[2] == 1 - intermediate = intermediate[:, :, 0] - # Batch, #actuations - actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength - - controller_inputs_backup = tf.concat(controller_inputs_backup, axis=1) - controller_inputs_backup = controller_inputs_backup[:, :, None] - - debug = {'controller_inputs': controller_inputs_backup[:, :, 0], 'actuation': actuation} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - act = make_matrix3d(zeros, zeros, zeros, zeros, zeros, zeros, zeros, zeros, act) - total_actuation = total_actuation + act - return total_actuation, debug - - - res = (60 + 100 * int(evaluate), 30, 30) - bc = get_bounding_box_bc(res) - - sim = Simulation( - dt=0.005, - num_particles=num_particles, - grid_res=res, - dx=1.0 / res[1], - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess, - E=25, damping=0.001 * evaluate) - print("Building time: {:.4f}s".format(time.time() - t)) - - final_state = sim.initial_state['debug']['controller_inputs'] - s = head * 9 - - final_position = final_state[:, s:s+3] - final_velocity = final_state[:, s + 3: s + 6] - loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) - loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) - - loss = loss1 + gamma * loss2 - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - for z in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - w = ((z + 0.5) / sample_density * group_sizes[i][2] + offset[2] - ) * scale + 0.1 - initial_positions[b].append([u, v, w]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state=initial_state) - - sym = sim.gradients_sym(loss, variables=trainables) - - gx, gy, gz = goal_range - pos_x, pos_y, pos_z = goal_pos - goal_train = [np.array( - [[pos_x + (random.random() - 0.5) * gx, - pos_y + (random.random() - 0.5) * gy, - pos_z + (random.random() - 0.5) * gz - ] for _ in range(batch_size)], - dtype=np.float32) for __ in range(1)] - - vis_id = list(range(batch_size)) - random.shuffle(vis_id) - - # Optimization loop - saver = tf.compat.v1.train.Saver() - - if evaluate: - '''evaluate''' - saver.restore(sess, "crawler3d_demo/0014/data.ckpt") - tt = time.time() - memo = sim.run( - initial_state=initial_state, - num_steps=1800, - iteration_feed_dict={goal: goal_train[0]}, - loss=loss) - print('forward', time.time() - tt) - - fn = 'crawler3d_demo/eval' - sim.visualize(memo, batch=random.randrange(batch_size), export=None, - show=True, interval=5, folder=fn) - return - - for e in range(100000): - t = time.time() - print('Epoch {:5d}, learning rate {}'.format(e, lr)) - - loss_cal = 0. - print('train...') - for it, goal_input in enumerate(goal_train): - tt = time.time() - memo = sim.run( - initial_state=initial_state, - num_steps=400, - iteration_feed_dict={goal: goal_input}, - loss=loss) - print('forward', time.time() - tt) - tt = time.time() - grad = sim.eval_gradients(sym=sym, memo=memo) - print('backward', time.time() - tt) - - for i, g in enumerate(grad): - print(i, np.mean(np.abs(g))) - grad = [np.clip(g, -1, 1) for g in grad] - - - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - sess.run(gradient_descent) - print('Iter {:5d} time {:.3f} loss {}'.format( - it, time.time() - t, memo.loss)) - loss_cal = loss_cal + memo.loss - fn = 'crawler3d_demo/{:04d}/'.format(e) - saver.save(sess, "{}/data.ckpt".format(fn)) - sim.visualize(memo, batch=random.randrange(batch_size), export=None, - show=True, interval=5, folder=fn) - -#exp.export() - print('train loss {}'.format(loss_cal / len(goal_train))) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/export.py b/tensorflow_graphics/physics/demos/export.py deleted file mode 100644 index b534744be..000000000 --- a/tensorflow_graphics/physics/demos/export.py +++ /dev/null @@ -1,39 +0,0 @@ -import cv2 -import os -class Export: - def __init__(self, directory, fps = 60, delete = True): - self.cnt = 0 - self.dir = directory - if os.path.exists(directory): - import shutil - shutil.rmtree(directory, ignore_errors = True) - os.makedirs(directory) - self.last = None - self.fps = fps - self.delete = delete - - def __call__(self, img): - if img.max() <= 1: - img = img * 255 - img = img.astype('uint8') - name = '{:0=8}.png'.format(self.cnt) - cv2.imwrite(os.path.join(self.dir, name), img) - self.cnt += 1 - self.last = img.copy() - - def wait(self, sec = 0.4): - frame = int(sec * self.fps) - for i in range(frame): - self(self.last) - - def __del__(self): - fps, d = self.fps, self.dir - if self.cnt > 0: - os.system('cd {}\nti video {}'.format(d, fps)) - os.system('mv {} ./{}.mp4'.format(os.path.join(d, 'video.mp4'), d)) - if self.delete: - import shutil - shutil.rmtree(d, ignore_errors = True) - -if __name__ == '__main__': - pass diff --git a/tensorflow_graphics/physics/demos/finger/__init__.py b/tensorflow_graphics/physics/demos/finger/__init__.py deleted file mode 100644 index 1ec60b1f3..000000000 --- a/tensorflow_graphics/physics/demos/finger/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python3 - -from gym.envs.registration import register - -register( - id='FingerEnv-v0', - entry_point='finger.finger_env:FingerEnv', -) diff --git a/tensorflow_graphics/physics/demos/finger/finger_env.py b/tensorflow_graphics/physics/demos/finger/finger_env.py deleted file mode 100644 index 50444c200..000000000 --- a/tensorflow_graphics/physics/demos/finger/finger_env.py +++ /dev/null @@ -1,143 +0,0 @@ -import math -import gym -from gym import spaces, logger -from gym.utils import seeding -import numpy as np -import finger_sim as f_s -import IPython - -goal_ball = 0.001 -class FingerEnv(gym.Env): - def __init__(self): - ''' - max_act = m-d array, where m is number of actuators - max_obs is n-d array, where n is the state space of the robot. Assumes 0 is the minimum observation - init_state is the initial state of the entire robot - ''' - max_act = np.ones(2) * 4.0 - max_obs = np.ones(18) * 2.0 - - - self.multi_target = f_s.multi_target - - self.action_space = spaces.Box(-max_act, max_act) - self.observation_space = spaces.Box(np.zeros(18), max_obs) - self.seed() - - self.iter_ = 0 - - self.state = None - if not self.multi_target: - self.goal_pos = np.array([0.6, 0.6]) - else: - self.goal_pos = f_s.goal_pos - if not self.multi_target: - self.goal_range = np.zeros((2, ), dtype = np.float32) - else: - self.goal_range = f_s.goal_range - - self.init_state, self.sim, self.loss, self.obs = f_s.generate_sim() - self.sim.set_initial_state(initial_state=self.init_state) - self.epoch_ = 0 - import time - self.tt1 = time.time() - if self.multi_target: - print('Multi target!!!!!!!!!!!!!!!!') - self.fout = open('multi_target_simple.log', 'w') - else: - print('Single target!!!!!!!!!!!!!!!!') - self.fout = open('single_target_simple.log', 'w') - - def seed(self, seed=None): - self.np_random, seed = seeding.np_random(seed) - return [seed] - - def reset(self): - import time - tt2 = time.time() - print(tt2 - self.tt1) - self.tt1 = tt2 - self.epoch_ += 1 - self.state = self.init_state - self.sim.set_initial_state(initial_state = self.init_state) - zero_act = np.expand_dims(np.zeros(self.action_space.shape), axis=0) - #We need to step forward and get the observation - # IPython.embed() - self.goal_input = ((np.random.random(2) - 0.5) * self.goal_range + self.goal_pos)[None, :] - memo_obs = self.sim.run( - initial_state=self.state, - num_steps=1, - iteration_feed_dict={f_s.goal: self.goal_input, f_s.actuation: zero_act}, - loss=self.obs) - - print('reset') - return memo_obs.loss - - def step(self, action): - action_ = np.expand_dims(action, axis=0) - #1. sim forward - pre_point = self.state[0][:, :, -f_s.group_num_particles:].mean(axis = 2) - ''' - memo = self.sim.run( - initial_state=self.state, - num_steps=1, - iteration_feed_dict={f_s.goal: self.goal_input, f_s.actuation: action_}, - loss=self.loss) - ''' - - memo_obs = self.sim.run( - initial_state=self.state, - num_steps=1, - iteration_feed_dict={f_s.goal: self.goal_input, f_s.actuation: action_}, - loss=self.obs) - - # if self.epoch_ % 100 <= 5 and self.iter_ % 5 == 1: - # self.sim.visualize(memo_obs, show=True) - - - #2. update state - #TODO: update state - self.state = memo_obs.steps[-1] - # IPython.embed() - now_point = self.state[0][:, :, -f_s.group_num_particles:].mean(axis = 2) - - obs = memo_obs.loss.flatten() - - - #3. calculate reward as velocity toward the goal - # print(now_point, self.goal_input) - pre_dist = (((pre_point - self.goal_input) ** 2).sum(axis = 1) ** 0.5).sum(axis = 0) - now_dist = (((now_point - self.goal_input) ** 2).sum(axis = 1) ** 0.5).sum(axis = 0) - reward = (pre_dist - now_dist) * 10.# memo.loss - # print('{:.8f}'.format(reward)) - - #TODO: 4. return if we're exactly at the goal and give a bonus to reward if we are - # success = np.linalg.norm(obs[12:14] - self.goal_input) < goal_ball #TODO: unhardcode - - self.iter_ += 1 - - if self.iter_ == 80: - self.iter_ = 0 - done = True - print(self.epoch_, 'L2 distance: ', now_dist) - print(self.epoch_, now_dist, file = self.fout) - else: - done = False - # fail = True - # else: - # fail = False - - # if success: - # reward += 1 - # elif fail: - # reward -= 1 - - # done = fail or success - - self.memo = memo_obs - - #print(reward) - return obs, reward, done, {} - - def render(self): - sim.visualize(self.memo, 1,show=True, export=f_s.exp, interval=1) diff --git a/tensorflow_graphics/physics/demos/finger/finger_sim.py b/tensorflow_graphics/physics/demos/finger/finger_sim.py deleted file mode 100644 index 265a10d26..000000000 --- a/tensorflow_graphics/physics/demos/finger/finger_sim.py +++ /dev/null @@ -1,183 +0,0 @@ -import sys -sys.path.append('..') - -import random -import os -import numpy as np -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export -import IPython - - -lr = 0.03 -gamma = 0.0 - -sample_density = 40 -group_num_particles = sample_density**2 -goal_pos = np.array([0.5, 0.6]) -goal_range = np.array([0.1, 0.1]) -batch_size = 1 -actuation_strength = 4 -multi_target = True - -config = 'B' - -exp = export.Export('finger_data') - -# Robot B -num_groups = 3 -group_offsets = [(1, 0), (1.5, 0), (1, 2)] -group_sizes = [(0.5, 2), (0.5, 2), (1, 1)] -actuations = [0, 1] -head = 2 -gravity = (0, 0) - -num_particles = group_num_particles * num_groups - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) -sess_config.gpu_options.allow_growth = True -sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - -sess = tf.compat.v1.Session(config=sess_config) - -goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') -actuation = tf.compat.v1.placeholder(dtype=tf.float32, shape=[1, len(actuations)], name='act') - -def generate_sim(): - #utility function for ppo - t = time.time() - - - - # Define your controller here - - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - in_goal = goal - if multi_target: - in_goal = (goal - goal_pos) / goal_range - controller_inputs.append((goal - 0.5)) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) - # Batch, 6 * num_groups, 1 - #IPython.embed() - - debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - # First PK stress here - act = make_matrix2d(zeros, zeros, zeros, act) - # Convert to Kirchhoff stress - total_actuation = total_actuation + act - return total_actuation, debug - - - res = (40, 40) - bc = get_bounding_box_bc(res) - bc[0][:, :, :7] = -1 # Sticky - bc[1][:, :, :7] = 0 # Sticky - dt = 0.005 - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - dx=1.0 / res[1], - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess, - scale=20) - print("Building time: {:.4f}s".format(time.time() - t)) - - final_state = sim.initial_state['debug']['controller_inputs'] - s = head * 6 - - final_position = final_state[:, s:s+2] - final_velocity = final_state[:, s + 2: s + 4] - loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) - loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) - - - loss_x = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_position[0, 0])) - loss_y = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_position[0, 1])) - - - loss_obs = final_state - loss_fwd = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_state[:, s+2:s + 3], axis=1)) * dt - - #loss = loss_fwd - vel = tf.squeeze(ly.flatten(final_velocity)) - dire = tf.squeeze(ly.flatten(goal - final_position)) - loss = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=tf.tensordot(vel, dire / tf.norm(tensor=dire), 1))) * dt - - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - initial_positions[b].append([u, v]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10) - - #trainables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES) - - sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) - sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) - - - return initial_state, sim, loss, loss_obs - -#if __name__ == '__main__': - diff --git a/tensorflow_graphics/physics/demos/finger_plot.py b/tensorflow_graphics/physics/demos/finger_plot.py deleted file mode 100644 index 1e7f6cbe1..000000000 --- a/tensorflow_graphics/physics/demos/finger_plot.py +++ /dev/null @@ -1,225 +0,0 @@ -import sys -sys.path.append('..') - -import random -import os -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export - -lr = 2 -gamma = 0.0 - -sample_density = 40 -multi_target = True -group_num_particles = sample_density**2 -goal_pos = np.array([0.5, 0.6]) -goal_range = np.array([0.15, 0.15]) -if not multi_target: - goal_pos = np.array([0.6, 0.6]) - goal_range = np.zeros((2,), dtype = np.float32) -batch_size = 1 -actuation_strength = 4 - -config = 'B' - -if config == 'B': - # Finger - num_groups = 3 - group_offsets = [(1, 0), (1.5, 0), (1, 2)] - group_sizes = [(0.5, 2), (0.5, 2), (1, 1)] - actuations = [0, 1] - head = 2 - gravity = (0, 0) -else: - print('Unknown config {}'.format(config)) - -num_particles = group_num_particles * num_groups - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -def main(sess): - t = time.time() - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - # Define your controller here - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - if multi_target: - controller_inputs.append((goal - goal_pos) / goal_range) - else: - controller_inputs.append(goal) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) - # Batch, 6 * num_groups, 1 - intermediate = tf.matmul(W1[None, :, :] + - tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) - # Batch, #actuations, 1 - assert intermediate.shape == (batch_size, len(actuations), 1) - assert intermediate.shape[2] == 1 - intermediate = intermediate[:, :, 0] - # Batch, #actuations - actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength - debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - # First PK stress here - act = make_matrix2d(zeros, zeros, zeros, act) - # Convert to Kirchhoff stress - total_actuation = total_actuation + act - return total_actuation, debug - - res = (40, 40) - bc = get_bounding_box_bc(res) - - if config == 'B': - bc[0][:, :, :7] = -1 # Sticky - bc[1][:, :, :7] = 0 # Sticky - - sim = Simulation( - dt=0.005, - num_particles=num_particles, - grid_res=res, - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess) - print("Building time: {:.4f}s".format(time.time() - t)) - - final_state = sim.initial_state['debug']['controller_inputs'] - s = head * 6 - - final_position = final_state[:, s:s+2] - final_velocity = final_state[:, s + 2: s + 4] - loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) - loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) - - loss = loss1 + gamma * loss2 - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - initial_positions[b].append([u, v]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state=initial_state) - - sym = sim.gradients_sym(loss, variables=trainables) - sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) - sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) - - sim.add_point_visualization(pos=final_position, color=(1, 0, 0), radius=3) - - if multi_target: - fout = open('multi_target_{}.log'.format(lr), 'w') - else: - fout = open('single_target_{}.log'.format(lr), 'w') - - # Optimization loop - for it in range(100000): - t = time.time() - - goal_input = ((np.random.random([batch_size, 2]) - 0.5) * goal_range + goal_pos) - - print('train...') - memo = sim.run( - initial_state=initial_state, - num_steps=150, - iteration_feed_dict={goal: goal_input}, - loss=loss) - grad = sim.eval_gradients(sym=sym, memo=memo) - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - sess.run(gradient_descent) - print('Iter {:5d} time {:.3f} loss {}'.format( - it, time.time() - t, memo.loss)) - loss_cal = memo.loss - if False: #i % 5 == 0: - sim.visualize(memo, batch = 0, interval = 5) - # sim.visualize(memo, batch = 1) - - print('L2:', loss_cal ** 0.5) - print(it, 'L2 distance: ', loss_cal ** 0.5, file = fout) - - ''' - print('valid...') - - loss_cal = 0 - for goal_input in goal_valid: - memo = sim.run( - initial_state=initial_state, - num_steps=80, - iteration_feed_dict={goal: goal_input}, - loss=loss) - print('time {:.3f} loss {:.4f}'.format( - time.time() - t, memo.loss)) - loss_cal = loss_cal + memo.loss - if i == 0:# memo.loss < 1e-4: - for b in vis_id: - sim.visualize(memo, batch = b, export = exp) - exp.export() - - print('valid loss {}'.format(loss_cal / len(goal_valid))) - print('==============================================') - ''' - - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/model.py b/tensorflow_graphics/physics/demos/model.py deleted file mode 100644 index b11b08b2c..000000000 --- a/tensorflow_graphics/physics/demos/model.py +++ /dev/null @@ -1,52 +0,0 @@ -import tensorflow as tf -import numpy as np - -class BatchNormalize: - def __init__(self, shape, alpha = 0.9): - self.mean = tf.Variable(np.zeros(shape, dtype = np.float32), trainable = False) - self.norm = tf.Variable(np.ones(shape, dtype = np.float32), trainable = False) - - self.mean_ph = tf.compat.v1.placeholder(shape = shape, dtype = tf.float32) - self.norm_ph = tf.compat.v1.placeholder(shape = shape, dtype = tf.float32) - self.update_sym = [ - self.norm.assign(self.norm * alpha + self.norm_ph * (1 - alpha)), - self.mean.assign(self.mean * alpha + self.mean_ph * (1 - alpha)) - ] - - def __call__(self, input_layer): - return (input_layer - self.mean) / (self.norm ** 0.5) - - def get_mean(self): - return self.mean - - def update(self, mean, norm, sess): - sess.run(self.update_sym, feed_dict = {self.mean_ph: mean, self.norm_ph: norm}) - -class SimpleModel: - def __init__(self, input_channel, output_channel, hidden_layer = 16, batch_normalize = False): - if batch_normalize: - self.bn = BatchNormalize(input_channel) - else: - self.bn = None - self.W1 = tf.Variable( - 0.2 * tf.random.normal(shape=(input_channel, hidden_layer)), - trainable=True) - self.b1 = tf.Variable(np.random.random(hidden_layer) * 0.2, trainable=True, dtype = tf.float32) - - self.W2 = tf.Variable( - 0.2 * tf.random.normal(shape=(hidden_layer, output_channel)), - trainable=True) - self.b2 = tf.Variable(np.random.random(output_channel) * 0.2, trainable=True, dtype = tf.float32) - - def __call__(self, input_layer): - if self.bn is not None: - input_layer = self.bn(input_layer) - hidden_layer = tf.tanh(tf.matmul(input_layer, self.W1) + self.b1) - output_layer = tf.tanh(tf.matmul(hidden_layer, self.W2) + self.b2) - return output_layer - - def update_bn(self, mean, norm, sess): - self.bn.update(mean, norm, sess) - - def get_bn_mean(self): - return self.bn.get_mean() diff --git a/tensorflow_graphics/physics/demos/multireach.py b/tensorflow_graphics/physics/demos/multireach.py deleted file mode 100644 index 4bbcb3891..000000000 --- a/tensorflow_graphics/physics/demos/multireach.py +++ /dev/null @@ -1,223 +0,0 @@ -import sys -sys.path.append('..') - -import random -import os -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export - -lr = 2 -gamma = 0.0 - -sample_density = 20 -group_num_particles = sample_density**2 -goal_pos = np.array([0.5, 0.6]) -goal_range = np.array([0.1, 0.1]) -batch_size = 1 -actuation_strength = 3 - -config = 'B' - -exp = export.Export('multireach') - -if config == 'A': - # Robot A - num_groups = 5 - group_offsets = [(0, 0), (0, 1), (1, 1), (2, 1), (2, 0)] - group_sizes = [(1, 1), (1, 1), (1, 1), (1, 1), (1, 1)] - actuations = [0, 4] - head = 2 - gravity = (0, -2) -elif config == 'B': - # Finger - num_groups = 3 - group_offsets = [(1, 0), (1.5, 0), (1, 2)] - group_sizes = [(0.5, 2), (0.5, 2), (1, 1)] - actuations = [0, 1] - head = 2 - gravity = (0, 0) -elif config == 'C': - # Robot B - num_groups = 7 - group_offsets = [(0, 0), (0.5, 0), (0, 1), (1, 1), (2, 1), (2, 0), (2.5, 0)] - group_sizes = [(0.5, 1), (0.5, 1), (1, 1), (1, 1), (1, 1), (0.5, 1), (0.5, 1)] - actuations = [0, 1, 5, 6] - fixed_groups = [] - head = 3 - gravity = (0, -2) -else: - print('Unknown config {}'.format(config)) - -num_particles = group_num_particles * num_groups - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -def main(sess): - t = time.time() - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - # Define your controller here - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - controller_inputs.append((goal - goal_pos) / goal_range) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) - # Batch, 6 * num_groups, 1 - intermediate = tf.matmul(W1[None, :, :] + - tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) - # Batch, #actuations, 1 - assert intermediate.shape == (batch_size, len(actuations), 1) - assert intermediate.shape[2] == 1 - intermediate = intermediate[:, :, 0] - # Batch, #actuations - actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength - debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - # First PK stress here - act = make_matrix2d(zeros, zeros, zeros, act) - # Convert to Kirchhoff stress - total_actuation = total_actuation + act - return total_actuation, debug - - res = (40, 40) - bc = get_bounding_box_bc(res) - - if config == 'B': - bc[0][:, :, :7] = -1 # Sticky - bc[1][:, :, :7] = 0 # Sticky - - sim = Simulation( - dt=0.005, - num_particles=num_particles, - grid_res=res, - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess) - print("Building time: {:.4f}s".format(time.time() - t)) - - final_state = sim.initial_state['debug']['controller_inputs'] - s = head * 6 - - final_position = final_state[:, s:s+2] - final_velocity = final_state[:, s + 2: s + 4] - loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) - loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) - - loss = loss1 + gamma * loss2 - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - initial_positions[b].append([u, v]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state=initial_state) - - sym = sim.gradients_sym(loss, variables=trainables) - sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) - sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) - - sim.add_point_visualization(pos=final_position, color=(1, 0, 0), radius=3) - - gx, gy = goal_range - pos_x, pos_y = goal_pos - - vis_id = list(range(batch_size)) - random.shuffle(vis_id) - vis_id = vis_id[:20] - - # Optimization loop - for i in range(100000): - t = time.time() - print('Epoch {:5d}, learning rate {}'.format(i, lr)) - - goal_train = [np.array( - [[pos_x + (random.random() - 0.5) * gx, - pos_y + (random.random() - 0.5) * gy] for _ in range(batch_size)], - dtype=np.float32) for __ in range(10)] - - - loss_cal = 0. - print('train...') - for it, goal_input in enumerate(goal_train): - memo = sim.run( - initial_state=initial_state, - num_steps=80, - iteration_feed_dict={goal: goal_input}, - loss=loss) - grad = sim.eval_gradients(sym=sym, memo=memo) - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad) - ] - sess.run(gradient_descent) - print('Iter {:5d} time {:.3f} loss {}'.format( - it, time.time() - t, memo.loss)) - loss_cal = loss_cal + memo.loss - if it % 5 == 0: - sim.visualize(memo, batch = 0) - # sim.visualize(memo, batch = 1) - - print('train loss {}'.format(loss_cal / len(goal_train))) - - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/rolling.py b/tensorflow_graphics/physics/demos/rolling.py deleted file mode 100644 index 8abd64bb4..000000000 --- a/tensorflow_graphics/physics/demos/rolling.py +++ /dev/null @@ -1,114 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_bounding_box_bc -from time_integration import UpdatedSimulationState -import tensorflow as tf -import numpy as np -from IPython import embed -import export - -exp = export.Export('rolling_acc') - -def main(sess): - batch_size = 1 - gravity = (0, -1) - # gravity = (0, 0) - N = 5 - dR = 0.2 - R = (N - 1) * dR - dC = 1.6 - num_particles = int(((N - 1) * dC + 1) ** 2) - steps = 1000 - dt = 5e-3 - goal_range = 0.15 - res = (45, 30) - bc = get_bounding_box_bc(res) - - lr = 1e-2 - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - def F_controller(state): - F = state.position - state.center_of_mass()[:, :, None] - F = tf.stack([F[:, 1], -F[:, 0]], axis = 1) - # T = tf.cast(state.step_count // 100 % 2, dtype = tf.float32) * 2 - 1 - return F * 10# * T - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - m_p=1, - V_p=1, - E = 10, - nu = 0.3, - sess=sess, - use_visualize = True, - F_controller = F_controller) - position = np.zeros(shape=(batch_size, num_particles, 2)) - - # velocity_ph = tf.constant([0.2, 0.3]) - velocity_ph = tf.constant([0, 0], dtype = tf.float32) - velocity = velocity_ph[None, :, None] + tf.zeros( - shape=[batch_size, 2, num_particles], dtype=tf.float32) - random.seed(123) - for b in range(batch_size): - dx, dy = 5, 4 - cnt = 0 - las = 0 - for i in range(N): - l = int((dC * i + 1) ** 2) - l, las = l - las, l - print(l) - dth = 2 * np.pi / l - dr = R / (N - 1) * i - theta = np.pi * 2 * np.random.random() - for j in range(l): - theta += dth - x, y = np.cos(theta) * dr, np.sin(theta) * dr - position[b, cnt] = ((dx + x) / 30, (dy + y) / 30) - cnt += 1 - - position = np.array(position).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=position, velocity=velocity) - - final_position = sim.initial_state.center_of_mass() - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) - sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = trainables) - - goal_input = np.array([[0.7, 0.3]], dtype=np.float32) - - - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - - if True: - sim.visualize(memo, show = True, interval = 2) - else: - sim.visualize(memo, show = False, interval = 1, export = exp) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/rolling_boundary.py b/tensorflow_graphics/physics/demos/rolling_boundary.py deleted file mode 100644 index 1da318438..000000000 --- a/tensorflow_graphics/physics/demos/rolling_boundary.py +++ /dev/null @@ -1,259 +0,0 @@ -import sys -sys.path.append('..') - -import random -import time -from simulation import Simulation, get_new_bc -from time_integration import UpdatedSimulationState -import tensorflow as tf -import numpy as np -from IPython import embed -import export -from model import SimpleModel - - -difficulty = 0.6 - -tf.compat.v1.set_random_seed(1234) -np.random.seed(0) -# NN - -model = SimpleModel(8, 1, batch_normalize = True) - -def main(sess): - batch_size = 1 - gravity = (0, -1.) - # gravity = (0, 0) - N = 10 - dR = 0.1 - R = (N - 1) * dR - dC = 1.6 - num_particles = int(((N - 1) * dC + 1) ** 2) - steps = 1000 - dt = 1e-2 - goal_range = 0.15 - res = (90, 60) - dx = 1. / res[0] - max_speed = 0.3 - exp = export.Export('rolling_acc_{}'.format(max_speed)) - - lef = 2.36 - rig = 9. - - temp_f = lambda x: 2 * x - 1 if x > 0.5 else -2 * x + 1 - temp_f_ = lambda x: 2 if x > 0.5 else -2 - boundary = lambda x: ((temp_f(x / res[0]) - 0.5) * difficulty + 0.5) * res[1] - boundary_ = lambda x: temp_f_(x / res[0]) / res[0] * res[1] * difficulty - - boundary = lambda x: (np.sin((rig - lef) * x / res[0] + lef) * difficulty + 1) * res[1] / 2 - boundary_ = lambda x: (rig - lef) / 2 * difficulty * res[1] * np.cos((rig - lef) * x / res[0] + lef) / res[0] - tf_boundary = lambda x: (tf.sin((rig - lef) * x + lef) * difficulty + 1) * res[1] / 2 - tf_boundary_ = lambda x: (rig - lef) / 2 * difficulty * res[1] * tf.cos((rig - lef) * x + lef) / res[0] - - bc = get_new_bc(res, boundary = boundary, boundary_ = boundary_) - - lr = 1 - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - def state_tensor(state): - cm = state.center_of_mass() - mv = tf.reduce_mean(input_tensor=state.velocity, axis = 2) - time1 = tf.sin(tf.cast(state.step_count, dtype = tf.float32) / 100) - time2 = tf.sin(tf.cast(state.step_count, dtype = tf.float32) / 31) - time3 = tf.sin(tf.cast(state.step_count, dtype = tf.float32) / 57) - time4 = tf.sin(tf.cast(state.step_count, dtype = tf.float32) / 7) - lis = [mv, cm, time1, time2, time3, time4] - tensor = tf.concat([tf.reshape(t, shape = [batch_size, -1]) - for t in lis], - axis = 1) - return tensor - - def norm_tensor(state): - return (state_tensor(state) - model.get_bn_mean()) ** 2 - - def F_controller(state): - # F = state.position - state.center_of_mass()[:, :, None] - # F = tf.stack([F[:, 1], -F[:, 0]], axis = 1) - # F = tf.constant([1, 2 / res[0] * res[1]])[None, :, None] - - # accelerate - cm = state.center_of_mass() - k = tf_boundary_(cm[:, 0]) - L = (k ** 2 + 1) ** 0.5 - dx = tf.math.reciprocal(L) - dy = k / L - F = tf.stack([dx, dy], axis = 1) * max_speed - - # inputs - inputs = state_tensor(state) - - # network - direction = model(inputs) - ''' - direction = thb[state.step_count] - ''' - - ''' - # best solution - vx = tf.reduce_mean(state.velocity, axis = 2)[:, 0] - direction = tf.cast(vx > 0, dtype = tf.float32) * 2 - 1 - ''' - - - return (F * direction)[:, :, None] - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - bc=bc, - gravity=gravity, - m_p=0.5, - V_p=0.5, - E = 1, - nu = 0.3, - dx = dx, - sess=sess, - use_visualize = True, - F_controller = F_controller, - part_size = 10) - position = np.zeros(shape=(batch_size, num_particles, 2)) - - # velocity_ph = tf.constant([0.2, 0.3]) - velocity_ph = tf.constant([0, 0], dtype = tf.float32) - velocity = velocity_ph[None, :, None] + tf.zeros( - shape=[batch_size, 2, num_particles], dtype=tf.float32) - for b in range(batch_size): - dx, dy = 15.81, 7.2 - cnt = 0 - las = 0 - for i in range(N): - l = int((dC * i + 1) ** 2) - l, las = l - las, l - print(l) - dth = 2 * np.pi / l - dr = R / (N - 1) * i - theta = np.pi * 2 * np.random.random() - for j in range(l): - theta += dth - x, y = np.cos(theta) * dr, np.sin(theta) * dr - position[b, cnt] = ((dx + x) / 45, (dy + y) / 45) - cnt += 1 - - position = np.array(position).swapaxes(1, 2) - - - initial_state = sim.get_initial_state( - position=position, velocity=velocity) - state_sum = tf.reduce_mean(input_tensor=sim.stepwise_sym(state_tensor), axis = 0) - state_norm = tf.reduce_mean(input_tensor=sim.stepwise_sym(norm_tensor), axis = 0) - - final_position = sim.initial_state.center_of_mass() - final_velocity = tf.reduce_mean(input_tensor=sim.initial_state.velocity, axis = 2) - final_F = tf.reduce_mean(input_tensor=sim.updated_state.F, axis = 2) - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) - sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) - sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) - sim.add_vector_visualization(pos=final_position, vector=final_F, color=(1, 0, 1), scale=500) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = trainables) - - goal_input = np.array([[37.39 / 45, 25. / 45]], dtype=np.float32) - grad_ph = [ - tf.compat.v1.placeholder(shape = v.shape, dtype = tf.float32) for v in trainables - ] - velocity = [ - tf.Variable(np.zeros(shape = v.shape, dtype = np.float32), - trainable=False) for v in trainables - ] - - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad_ph) - ] - - - momentum_beta = 0.9 - momentum = [ - v.assign(v * momentum_beta + g * (1 - momentum_beta)) - for v, g in zip(velocity, grad_ph) - ] + [ - v.assign(v - lr * g) for v, g in zip(trainables, velocity) - ] - - sess.run(tf.compat.v1.global_variables_initializer()) - - flog = open('rolling_{}.log'.format(max_speed), 'w') - for i in range(100000): - t = time.time() - print('Epoch {:5d}, learning rate {}'.format(i, lr)) - - tt = time.time() - memo = sim.run( - initial_state = initial_state, - num_steps = steps, - iteration_feed_dict = {goal: goal_input}, - loss = loss, - stepwise_loss = [state_sum, state_norm]) - print('forward', time.time() - tt) - - - if False:# i % 10 == 0: - tt = time.time() - sim.visualize(memo, show = False, interval = 1, export = exp) - print('visualize', time.time() - tt) - if memo.loss < 1e-3: - break - - tt = time.time() - grad = sim.eval_gradients(sym=sym, memo=memo) - print('eval_gradients', time.time() - tt) - - tt = time.time() - grad_feed_dict = {} - tot = 0. - for gp, g in zip(grad_ph, grad): - grad_feed_dict[gp] = g * (np.random.random(g.shape) < 0.8).astype('float32') - tot += (g ** 2).sum() - # if i % 10 == 0: - # grad_feed_dict[gp] += (np.random.random(g.shape) - 0.5) * 0.01 - print('gradient norm', tot ** 0.5) - sess.run(momentum, feed_dict = grad_feed_dict) - print('gradient_descent', time.time() - tt) - # log1 = tf.Print(W1, [W1], 'W1:') - # log2 = tf.Print(b1, [b1], 'b1:') - # sess.run(log1) - # sess.run(log2) - - mean, norm = memo.stepwise_loss - mean /= steps - norm /= steps - model.update_bn(mean, norm, sess) - - # if i % 10 == 0: - if tot ** 0.5 > 100:# i % 10 == 0: - embed() - tt = time.time() - sim.visualize(memo, show = True, interval = 1, export = exp) - sim.visualize(memo, show = False, interval = 1, export = exp) - print('visualize', time.time() - tt) - if memo.loss < 1e-3: - break - - print('Iter {:5d} time {:.3f} loss {}'.format( - i, time.time() - t, memo.loss)) - print(i, memo.loss, file = flog) - flog.flush() - - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/rotating_muscle.py b/tensorflow_graphics/physics/demos/rotating_muscle.py deleted file mode 100644 index 400ad25ea..000000000 --- a/tensorflow_graphics/physics/demos/rotating_muscle.py +++ /dev/null @@ -1,158 +0,0 @@ -import sys -sys.path.append('..') - -import random -import os -import numpy as np -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export -import IPython - -lr = 0.03 -gamma = 0.0 - -sample_density = 20 -group_num_particles = sample_density**2 -goal_pos = np.array([1.4, 0.4]) -goal_range = np.array([0.0, 0.00]) -batch_size = 1 - -config = 'B' - -exp = export.Export('walker_video') - -# Robot B -num_groups = 1 -group_offsets = [(1, 1)] -group_sizes = [(0.5, 1)] -actuations = [0] -fixed_groups = [] -head = 0 -gravity = (0, 0) - -num_particles = group_num_particles * num_groups - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -def main(sess): - t = time.time() - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - # Define your controller here - def controller(state): - actuation = 2 * np.ones(shape=(batch_size, num_groups)) * tf.sin(0.1 * tf.cast(state.get_evaluated()['step_count'], tf.float32)) - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] * 2 - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - # First PK stress here - act = make_matrix2d(zeros, zeros, zeros, act) - # Convert to Kirchhoff stress - total_actuation = total_actuation + act - return total_actuation, 1 - - res = (80, 40) - bc = get_bounding_box_bc(res) - - sim = Simulation( - dt=0.005, - num_particles=num_particles, - grid_res=res, - dx=1.0 / res[1], - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess, - scale=20) - print("Building time: {:.4f}s".format(time.time() - t)) - - s = head * 6 - - initial_positions = [[] for _ in range(batch_size)] - initial_velocity = np.zeros(shape=(batch_size, 2, num_particles)) - for b in range(batch_size): - c = 0 - for i, offset in enumerate(group_offsets): - c += 1 - for x in range(sample_density): - for y in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - initial_positions[b].append([u, v]) - initial_velocity[0, :, c] = (2 * (y - sample_density / 2), -2 * (x - sample_density / 2)) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10, velocity=initial_velocity) - - sim.set_initial_state(initial_state=initial_state) - - gx, gy = goal_range - pos_x, pos_y = goal_pos - goal_train = [np.array( - [[pos_x + (random.random() - 0.5) * gx, - pos_y + (random.random() - 0.5) * gy] for _ in range(batch_size)], - dtype=np.float32) for __ in range(1)] - - vis_id = list(range(batch_size)) - random.shuffle(vis_id) - - # Optimization loop - for i in range(100000): - t = time.time() - print('Epoch {:5d}, learning rate {}'.format(i, lr)) - - print('train...') - for it, goal_input in enumerate(goal_train): - tt = time.time() - memo = sim.run( - initial_state=initial_state, - num_steps=400, - iteration_feed_dict={goal: goal_input}, - ) - print('forward', time.time() - tt) - tt = time.time() - print('backward', time.time() - tt) - - sim.visualize(memo, batch=random.randrange(batch_size), export=exp, - show=True, interval=4) - #exp.export() - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/test_finger.py b/tensorflow_graphics/physics/demos/test_finger.py deleted file mode 100644 index a83bfd1ef..000000000 --- a/tensorflow_graphics/physics/demos/test_finger.py +++ /dev/null @@ -1,3 +0,0 @@ -import gym -import walker -env = gym.make('FingerEnv-v0') diff --git a/tensorflow_graphics/physics/demos/test_walker.py b/tensorflow_graphics/physics/demos/test_walker.py deleted file mode 100644 index 4e9ee2a29..000000000 --- a/tensorflow_graphics/physics/demos/test_walker.py +++ /dev/null @@ -1,3 +0,0 @@ -import gym -import walker -env = gym.make('WalkerEnv-v0') diff --git a/tensorflow_graphics/physics/demos/visualize_training_curve.py b/tensorflow_graphics/physics/demos/visualize_training_curve.py deleted file mode 100644 index 067f6494e..000000000 --- a/tensorflow_graphics/physics/demos/visualize_training_curve.py +++ /dev/null @@ -1,13 +0,0 @@ -import matplotlib.pyplot as plt - -file_name = 'rolling_0.3.log' -fin = open(file_name, 'r') - -x, y = [], [] -for line in fin: - xx, yy = line[:-1].split(' ') - x.append(int(xx)) - y.append(float(yy)) - -plt.plot(x, y) -plt.show() diff --git a/tensorflow_graphics/physics/demos/walker/__init__.py b/tensorflow_graphics/physics/demos/walker/__init__.py deleted file mode 100644 index 97d0daaa1..000000000 --- a/tensorflow_graphics/physics/demos/walker/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python3 - -from gym.envs.registration import register - -register( - id='WalkerEnv-v0', - entry_point='walker.walker_env:WalkerEnv', -) diff --git a/tensorflow_graphics/physics/demos/walker/walker_env.py b/tensorflow_graphics/physics/demos/walker/walker_env.py deleted file mode 100644 index 9bd1ceb12..000000000 --- a/tensorflow_graphics/physics/demos/walker/walker_env.py +++ /dev/null @@ -1,107 +0,0 @@ -import math -import gym -from gym import spaces, logger -from gym.utils import seeding -import numpy as np -import walker_sim as w_s -import IPython - -goal_ball = 0.001 -class WalkerEnv(gym.Env): - def __init__(self): - ''' - max_act = m-d array, where m is number of actuators - max_obs is n-d array, where n is the state space of the robot. Assumes 0 is the minimum observation - init_state is the initial state of the entire robot - ''' - max_act = np.ones(4) * 1000.0 - max_obs = np.ones(42) * 2.0 - goal_input = np.expand_dims(w_s.goal_pos, axis=0) - - - - self.action_space = spaces.Box(-max_act, max_act) - self.observation_space = spaces.Box(np.zeros(42), max_obs) - self.seed() - - self.iter_ = 0 - - self.state = None - self.goal_input = goal_input - - self.init_state, self.sim, self.loss, self.obs = w_s.generate_sim() - self.sim.set_initial_state(initial_state=self.init_state) - - def seed(self, seed=None): - self.np_random, seed = seeding.np_random(seed) - return [seed] - - def reset(self): - self.state = self.init_state - self.sim.set_initial_state(initial_state = self.init_state) - zero_act = np.expand_dims(np.zeros(self.action_space.shape), axis=0) - #We need to step forward and get the observation - #IPython.embed() - memo_obs = self.sim.run( - initial_state=self.state, - num_steps=1, - iteration_feed_dict={w_s.goal: self.goal_input, w_s.actuation: zero_act}, - loss=self.obs) - - print('reset') - return memo_obs.loss - - def step(self, action): - action_ = np.expand_dims(action, axis=0) - #1. sim forward - memo = self.sim.run( - initial_state=self.state, - num_steps=1, - iteration_feed_dict={w_s.goal: self.goal_input, w_s.actuation: action_}, - loss=self.loss) - - memo_obs = self.sim.run( - initial_state=self.state, - num_steps=1, - iteration_feed_dict={w_s.goal: self.goal_input, w_s.actuation: action_}, - loss=self.obs) - - if self.iter_ % 10 == 0: - self.sim.visualize(memo, show=True) - - - #2. update state - #TODO: update state - self.state = memo.steps[-1] - - obs = memo_obs.loss.flatten() - - - #3. calculate reward as velocity toward the goal - reward = memo.loss - #print(reward) - - #TODO: 4. return if we're exactly at the goal and give a bonus to reward if we are - success = np.linalg.norm(obs[18:20] - self.goal_input) < goal_ball #TODO: unhardcode - if self.iter_ == 799: - self.iter_ = -1 - fail = True - else: - fail = False - - if success: - reward += 1 - elif fail: - reward -= 1 - - self.iter_ += 1 - - done = fail or success - - self.memo = memo - - #print(reward) - return obs, reward, done, {} - - def render(self): - sim.visualize(self.memo, 1,show=True, export=w_s.exp, interval=1) diff --git a/tensorflow_graphics/physics/demos/walker/walker_sim.py b/tensorflow_graphics/physics/demos/walker/walker_sim.py deleted file mode 100644 index 6e1e3cf27..000000000 --- a/tensorflow_graphics/physics/demos/walker/walker_sim.py +++ /dev/null @@ -1,175 +0,0 @@ -import sys -sys.path.append('..') - -import random -import os -import numpy as np -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export -import IPython - - -lr = 0.03 -gamma = 0.0 - -sample_density = 20 -group_num_particles = sample_density**2 -goal_pos = np.array([1.4, 0.4]) -goal_range = np.array([0.0, 0.00]) -batch_size = 1 -actuation_strength = 4 - -config = 'B' - -exp = export.Export('walker_data') - -# Robot B -num_groups = 7 -group_offsets = [(0, 0), (0.5, 0), (0, 1), (1, 1), (2, 1), (2, 0), (2.5, 0)] -group_sizes = [(0.5, 1), (0.5, 1), (1, 1), (1, 1), (1, 1), (0.5, 1), (0.5, 1)] -actuations = [0, 1, 5, 6] -fixed_groups = [] -head = 3 -gravity = (0, -2) - -num_particles = group_num_particles * num_groups - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) -sess_config.gpu_options.allow_growth = True -sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - -sess = tf.compat.v1.Session(config=sess_config) - -goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') -actuation = tf.compat.v1.placeholder(dtype=tf.float32, shape=[1, len(actuations)], name='act') - -def generate_sim(): - #utility function for ppo - t = time.time() - - - - # Define your controller here - - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - controller_inputs.append(goal) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) - # Batch, 6 * num_groups, 1 - #IPython.embed() - - debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - # First PK stress here - act = make_matrix2d(zeros, zeros, zeros, act) - # Convert to Kirchhoff stress - total_actuation = total_actuation + act - return total_actuation, debug - - - res = (80, 40) - bc = get_bounding_box_bc(res) - dt = 0.005 - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - dx=1.0 / res[1], - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess, - scale=20) - print("Building time: {:.4f}s".format(time.time() - t)) - - final_state = sim.initial_state['debug']['controller_inputs'] - s = head * 6 - - final_position = final_state[:, s:s+2] - final_velocity = final_state[:, s + 2: s + 4] - loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) - loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) - - - loss_x = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_position[0, 0])) - loss_y = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_position[0, 1])) - - - loss_obs = final_state - loss_fwd = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_state[:, s+2:s + 3], axis=1)) * dt - - loss = loss_fwd #really, the reward forward - - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - initial_positions[b].append([u, v]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10) - - #trainables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES) - - sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) - sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) - - - return initial_state, sim, loss, loss_obs - -#if __name__ == '__main__': - diff --git a/tensorflow_graphics/physics/demos/walker_2d.py b/tensorflow_graphics/physics/demos/walker_2d.py deleted file mode 100644 index 19efd44f0..000000000 --- a/tensorflow_graphics/physics/demos/walker_2d.py +++ /dev/null @@ -1,219 +0,0 @@ -import sys -sys.path.append('..') - -import random -import os -import numpy as np -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export -import IPython - -lr = 0.03 -gamma = 0.0 - -sample_density = 20 -group_num_particles = sample_density**2 -goal_pos = np.array([1.4, 0.4]) -goal_range = np.array([0.0, 0.00]) -batch_size = 1 -actuation_strength = 3 - -config = 'B' - -exp = export.Export('walker_2d') - -# Robot B -num_groups = 7 -group_offsets = [(0, 0), (0.5, 0), (0, 1), (1, 1), (2, 1), (2, 0), (2.5, 0)] -group_sizes = [(0.5, 1), (0.5, 1), (1, 1), (1, 1), (1, 1), (0.5, 1), (0.5, 1)] -actuations = [0, 1, 5, 6] -fixed_groups = [] -head = 3 -gravity = (0, -2) - -num_particles = group_num_particles * num_groups - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), 6 * len(group_sizes))), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -def main(sess): - t = time.time() - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - - # Define your controller here - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - controller_inputs.append((goal - goal_pos) / np.maximum(goal_range, 1e-5)) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, 6 * num_groups), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, 6 * num_groups, 1) - # Batch, 6 * num_groups, 1 - intermediate = tf.matmul(W1[None, :, :] + - tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) - # Batch, #actuations, 1 - assert intermediate.shape == (batch_size, len(actuations), 1) - assert intermediate.shape[2] == 1 - intermediate = intermediate[:, :, 0] - # Batch, #actuations - actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength - debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - # First PK stress here - act = make_matrix2d(zeros, zeros, zeros, act) - # Convert to Kirchhoff stress - F = state['deformation_gradient'] - total_actuation = total_actuation + act - return total_actuation, debug - - res = (80, 40) - bc = get_bounding_box_bc(res) - - sim = Simulation( - dt=0.005, - num_particles=num_particles, - grid_res=res, - dx=1.0 / res[1], - gravity=gravity, - controller=controller, - batch_size=batch_size, - bc=bc, - sess=sess, - scale=20, - part_size = 10) - print("Building time: {:.4f}s".format(time.time() - t)) - - final_state = sim.initial_state['debug']['controller_inputs'] - s = head * 6 - - final_position = final_state[:, s:s+2] - final_velocity = final_state[:, s + 2: s + 4] - loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=-final_position[:, 0])) - loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) - - saver = tf.compat.v1.train.Saver() - - loss = loss1 + gamma * loss2 - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - initial_positions[b].append([u, v]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state=initial_state) - - tt = time.time() - sym = sim.gradients_sym(loss, variables=trainables) - print('sym', time.time() - tt) - #sim.add_point_visualization(pos=goal, color=(0, 1, 0), radius=3) - sim.add_vector_visualization(pos=final_position, vector=final_velocity, color=(0, 0, 1), scale=50) - - sim.add_point_visualization(pos=final_position, color=(1, 0, 0), radius=3) - - gx, gy = goal_range - pos_x, pos_y = goal_pos - goal_train = [np.array( - [[pos_x + (random.random() - 0.5) * gx, - pos_y + (random.random() - 0.5) * gy] for _ in range(batch_size)], - dtype=np.float32) for __ in range(1)] - - vis_id = list(range(batch_size)) - random.shuffle(vis_id) - grad_ph = [ - tf.compat.v1.placeholder(shape = v.shape, dtype = tf.float32) for v in trainables - ] - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad_ph) - ] - - # Optimization loop - for e in range(200): - t = time.time() - print('Epoch {:5d}, learning rate {}'.format(e, lr)) - - loss_cal = 0. - print('train...') - for it, goal_input in enumerate(goal_train): - tt = time.time() - memo = sim.run( - initial_state=initial_state, - num_steps=800, - iteration_feed_dict={goal: goal_input}, - loss=loss) - print('forward', time.time() - tt) - tt = time.time() - grad = sim.eval_gradients(sym=sym, memo=memo) - print('eval_gradients', time.time() - tt) - tt = time.time() - - grad_feed_dict = {} - for gp, g in zip(grad_ph, grad): - grad_feed_dict[gp] = g - sess.run(gradient_descent, feed_dict = grad_feed_dict) - print('gradient_descent', time.time() - tt) - print('Iter {:5d} time {:.3f} loss {}'.format( - it, time.time() - t, memo.loss)) - loss_cal = loss_cal + memo.loss - save_path = saver.save(sess, "./models/walker_2d.ckpt") - print("Model saved in path: %s" % save_path) - sim.visualize(memo, batch=random.randrange(batch_size), export=None, - show=True, interval=4) - print('train loss {}'.format(loss_cal / len(goal_train))) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/demos/walker_3d.py b/tensorflow_graphics/physics/demos/walker_3d.py deleted file mode 100644 index 552a940c4..000000000 --- a/tensorflow_graphics/physics/demos/walker_3d.py +++ /dev/null @@ -1,293 +0,0 @@ -import sys -sys.path.append('..') - -import random -import os -import numpy as np -from simulation import Simulation, get_bounding_box_bc -import time -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -import tensorflow as tf -import tensorflow.contrib.layers as ly -from vector_math import * -import export -import IPython - -lr = 1 -gamma = 0.0 - -sample_density = 30 -group_num_particles = sample_density**3 -goal_pos = np.array([1.4, 0.4, 0.5]) -goal_range = np.array([0.0, 0.0, 0.0]) -batch_size = 1 - -actuation_strength = 2 - - -config = 'C' - -exp = export.Export('walker3d') - -# Robot B -if config == 'B': - num_groups = 7 - group_offsets = [(0, 0, 0), (0.5, 0, 0), (0, 1, 0), (1, 1, 0), (2, 1, 0), (2, 0, 0), (2.5, 0, 0)] - group_sizes = [(0.5, 1, 1), (0.5, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (0.5, 1, 1), (0.5, 1, 1)] - actuations = [0, 1, 5, 6] - fixed_groups = [] - head = 3 - gravity = (0, -2, 0) - - - -#TODO: N-Ped -#Robot C -else: - - num_leg_pairs = 2 - - act_x = 0.5 - act_y = 0.7 - act_z = 0.5 - - x = 3 - z = 3 - thick = 0.5 - - - group_offsets = [] - for x_i in np.linspace(0, x - 2*act_x, num_leg_pairs): - - group_offsets += [(x_i, 0, 0)] - group_offsets += [(x_i + act_x, 0, 0)] - group_offsets += [(x_i, 0, act_z)] - group_offsets += [(x_i + act_x, 0, act_z)] - - group_offsets += [(x_i + act_x, 0, z - act_z)] - group_offsets += [(x_i, 0, z - 2 * act_z)] - group_offsets += [(x_i + act_x, 0, z - 2 * act_z)] - group_offsets += [(x_i, 0, z - act_z)] - - ''' - group_offsets += [(x - 2 * act_x, 0, 0)] - group_offsets += [(x - act_x, 0, 0)] - group_offsets += [(x - 2 * act_x, 0, act_z)] - group_offsets += [(x - act_x, 0, act_z)] - - group_offsets += [(x - 2 * act_x, 0, z - act_z)] - group_offsets += [(x - act_x, 0, z - 2 * act_z)] - group_offsets += [(x - 2 * act_x, 0, z - 2 * act_z)] - group_offsets += [(x - act_x, 0, z - act_z)] - ''' - - - - for i in range(int(z)): - for j in range(int(x)): - group_offsets += [(j, act_y, i)] - num_groups = len(group_offsets) - - #group_offsets += [(0.0, 1.0, 0.0)] - num_particles = group_num_particles * num_groups - group_sizes = [(act_x, act_y, act_z)] * num_leg_pairs * 2 * 4 + [(1.0, 1.0, 1.0)] * int(x) * int(z) - actuations = list(range(8 * num_leg_pairs)) - fixed_groups = [] - head = int(8 * num_leg_pairs + x / 2 * z + z/2) - gravity = (0, -2, 0) - -#IPython.embed() - - -num_particles = group_num_particles * num_groups -print(num_particles) - - -def particle_mask(start, end): - r = tf.range(0, num_particles) - return tf.cast(tf.logical_and(start <= r, r < end), tf.float32)[None, :] - - -def particle_mask_from_group(g): - return particle_mask(g * group_num_particles, (g + 1) * group_num_particles) - - -# NN weights -W1 = tf.Variable( - 0.02 * tf.random.normal(shape=(len(actuations), 9 * len(group_sizes))), - trainable=True) -b1 = tf.Variable([0.0] * len(actuations), trainable=True) - - -def main(sess): - t = time.time() - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 3], name='goal') - - # Define your controller here - def controller(state): - controller_inputs = [] - for i in range(num_groups): - mask = particle_mask(i * group_num_particles, - (i + 1) * group_num_particles)[:, None, :] * ( - 1.0 / group_num_particles) - pos = tf.reduce_sum(input_tensor=mask * state.position, axis=2, keepdims=False) - vel = tf.reduce_sum(input_tensor=mask * state.velocity, axis=2, keepdims=False) - controller_inputs.append(pos) - controller_inputs.append(vel) - controller_inputs.append((goal - goal_pos) / np.maximum(goal_range, 1e-5)) - # Batch, dim - controller_inputs = tf.concat(controller_inputs, axis=1) - assert controller_inputs.shape == (batch_size, 9 * num_groups), controller_inputs.shape - controller_inputs = controller_inputs[:, :, None] - assert controller_inputs.shape == (batch_size, 9 * num_groups, 1) - # Batch, 6 * num_groups, 1 - intermediate = tf.matmul(W1[None, :, :] + - tf.zeros(shape=[batch_size, 1, 1]), controller_inputs) - # Batch, #actuations, 1 - assert intermediate.shape == (batch_size, len(actuations), 1) - assert intermediate.shape[2] == 1 - intermediate = intermediate[:, :, 0] - # Batch, #actuations - actuation = tf.tanh(intermediate + b1[None, :]) * actuation_strength - debug = {'controller_inputs': controller_inputs[:, :, 0], 'actuation': actuation} - total_actuation = 0 - zeros = tf.zeros(shape=(batch_size, num_particles)) - for i, group in enumerate(actuations): - act = actuation[:, i:i+1] - assert len(act.shape) == 2 - mask = particle_mask_from_group(group) - act = act * mask - act = make_matrix3d(zeros, zeros, zeros, zeros, act, zeros, zeros, zeros, zeros) - total_actuation = total_actuation + act - return total_actuation, debug - - res = (60, 30, 30) - bc = get_bounding_box_bc(res) - - sim = Simulation( - dt=0.007, - num_particles=num_particles, - grid_res=res, - dx=1.0 / res[1], - gravity=gravity, - controller=None, #controller, - batch_size=batch_size, - bc=bc, - sess=sess, - E=15, - part_size = 10) - print("Building time: {:.4f}s".format(time.time() - t)) - tt = time.time() - memo = sim.run( - initial_state=initial_state, - num_steps=400, - iteration_feed_dict={goal: goal_input}, - loss=loss) - print('forward', time.time() - tt) - tt = time.time() - - final_state = sim.initial_state['debug']['controller_inputs'] - s = head * 9 - - final_position = final_state[:, s:s+3] - final_velocity = final_state[:, s + 3: s + 6] - loss1 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=(final_position - goal) ** 2, axis = 1)) - loss2 = tf.reduce_mean(input_tensor=tf.reduce_sum(input_tensor=final_velocity ** 2, axis = 1)) - - loss = loss1 + gamma * loss2 - - initial_positions = [[] for _ in range(batch_size)] - for b in range(batch_size): - for i, offset in enumerate(group_offsets): - for x in range(sample_density): - for y in range(sample_density): - for z in range(sample_density): - scale = 0.2 - u = ((x + 0.5) / sample_density * group_sizes[i][0] + offset[0] - ) * scale + 0.2 - v = ((y + 0.5) / sample_density * group_sizes[i][1] + offset[1] - ) * scale + 0.1 - w = ((z + 0.5) / sample_density * group_sizes[i][2] + offset[2] - ) * scale + 0.1 - initial_positions[b].append([u, v, w]) - assert len(initial_positions[0]) == num_particles - initial_positions = np.array(initial_positions).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=np.array(initial_positions), youngs_modulus=10) - - trainables = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.TRAINABLE_VARIABLES) - sim.set_initial_state(initial_state=initial_state) - - tt = time.time() - sym = sim.gradients_sym(loss, variables=trainables) - print('sym', time.time() - tt) - - gx, gy, gz = goal_range - pos_x, pos_y, pos_z = goal_pos - goal_train = [np.array( - [[pos_x + (random.random() - 0.5) * gx, - pos_y + (random.random() - 0.5) * gy, - pos_z + (random.random() - 0.5) * gz - ] for _ in range(batch_size)], - dtype=np.float32) for __ in range(1)] - - vis_id = list(range(batch_size)) - random.shuffle(vis_id) - grad_ph = [ - tf.compat.v1.placeholder(shape = v.shape, dtype = tf.float32) for v in trainables - ] - gradient_descent = [ - v.assign(v - lr * g) for v, g in zip(trainables, grad_ph) - ] - - # Optimization loop - for e in range(200): - t = time.time() - print('Epoch {:5d}, learning rate {}'.format(e, lr)) - - loss_cal = 0. - print('train...') - for it, goal_input in enumerate(goal_train): - tt = time.time() - memo = sim.run( - initial_state=initial_state, - num_steps=400, - iteration_feed_dict={goal: goal_input}, - loss=loss) - print('forward', time.time() - tt) - tt = time.time() - grad = sim.eval_gradients(sym=sym, memo=memo) - print('backward', time.time() - tt) - - for i, g in enumerate(grad): - print(i, np.mean(np.abs(g))) - grad = [np.clip(g, -1, 1) for g in grad] - - - grad_feed_dict = {} - for gp, g in zip(grad_ph, grad): - grad_feed_dict[gp] = g - sess.run(gradient_descent, feed_dict = grad_feed_dict) - print('Iter {:5d} time {:.3f} loss {}'.format( - it, time.time() - t, memo.loss)) - loss_cal = loss_cal + memo.loss - ''' - if e % 1 == 0: - sim.visualize(memo, batch=random.randrange(batch_size), export=None, - show=True, interval=5, folder='walker3d_demo/{:04d}/'.format(e)) - ''' - -#exp.export() - print('train loss {}'.format(loss_cal / len(goal_train))) - -if __name__ == '__main__': - sess_config = tf.compat.v1.ConfigProto(allow_soft_placement=True) - sess_config.gpu_options.allow_growth = True - sess_config.gpu_options.per_process_gpu_memory_fraction = 0.4 - - with tf.compat.v1.Session(config=sess_config) as sess: - main(sess=sess) diff --git a/tensorflow_graphics/physics/docs/API.rst b/tensorflow_graphics/physics/docs/API.rst deleted file mode 100644 index b7b2fbad9..000000000 --- a/tensorflow_graphics/physics/docs/API.rst +++ /dev/null @@ -1,76 +0,0 @@ -API -================================== - -Initialization ---------------------- -Initial states of a simulation consist of particle positions and velocities (by default, zero). -You will need to feed these values to `tensorflow` as inputs, e.g.: - -.. code-block:: python - - initial_velocity = np.zeros(shape=[1, num_particles, 2]) - initial_position = # Initial positions of your particles - - feed_dict = { - sim.initial_state.velocity: - initial_velocity, - sim.initial_state.position: - initial_positions, - sim.initial_state.deformation_gradient: - identity_matrix + - np.zeros(shape=(sim.batch_size, num_particles, 1, 1)), - } - loss_evaluated, _ = sess.run([loss, opt], feed_dict=feed_dict) - - -Defining a controller based on simulation states ---------------------------------------------------------- - -A simulation consists of a series of states, one per time step. - -You can get the (symbolic) simulation from `sim.states` to define the loss. - -.. code-block:: python - - # This piece of code is for illustration only. I've never tested it. - # See jump.py for a working example. - - from simulation import Simulation - - # The controller takes previous states as input and generates an actuation - # and debug information - def controller(previous_state): - average_y = tf.reduce_sum(previous_state.position[:, :, 1], axis=(1,), keepdims=False) - # A stupid controller that actuates according to the average y-coord of particles - act = 5 * average_y - 1 - debug = {'actuation': act} - zeros = tf.zeros(shape=(1, num_particles)) - act = act[None, None] - # kirchhoff_stress stress - act = E * make_matrix2d(zeros, zeros, zeros, act) - # Convert to Kirchhoff stress - actuation = matmatmul( - act, transpose(previous_state['deformation_gradient'])) - return actuation, debug - - sim = Simulation( - num_particles=num_particles, - num_time_steps=12, - grid_res=(25, 25), - controller=controller, - gravity=(0, -9.8), - E=E) # Particle Young's modulus - - # Fetch, i.e. the final state - state = sim.states[-1] - # Particle Positions - # Array of float32[batch, particle, dimension=0,1] - state['position'] - - # Particle Velocity - # Array of float32[batch, particle, dimension=0,1] - state['velocity'] # Array of float32[batch, particle, dimension=0,1] - - # Particle Deformation Gradients - # Array of float32[batch, particle, matrix dimension0=0,1, matrix dimension1=0,1] - state['deformation_gradient'] diff --git a/tensorflow_graphics/physics/docs/README.md b/tensorflow_graphics/physics/docs/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/tensorflow_graphics/physics/docs/_static/.gitkeep b/tensorflow_graphics/physics/docs/_static/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/tensorflow_graphics/physics/docs/conf.py b/tensorflow_graphics/physics/docs/conf.py deleted file mode 100644 index 4eb8c60fc..000000000 --- a/tensorflow_graphics/physics/docs/conf.py +++ /dev/null @@ -1,177 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Configuration file for the Sphinx documentation builder. -# -# This file does only contain a selection of the most common options. For a -# full list see the documentation: -# http://www.sphinx-doc.org/en/stable/config - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- Project information ----------------------------------------------------- - -project = 'Differentiable MPM' -copyright = '2018, Yuanming Hu' -author = 'Yuanming Hu' - -# The short X.Y version -version = '' -# The full version, including alpha/beta/rc tags -release = '0.0.1' - - -# -- General configuration --------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.doctest', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.mathjax', - 'sphinx.ext.ifconfig', - 'sphinx.ext.viewcode', - 'sphinx.ext.githubpages', -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path . -exclude_patterns = [] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'sphinx_rtd_theme' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# The default sidebars (for documents that don't match any pattern) are -# defined by theme itself. Builtin themes are using these templates by -# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', -# 'searchbox.html']``. -# -# html_sidebars = {} - - -# -- Options for HTMLHelp output --------------------------------------------- - -# Output file base name for HTML help builder. -htmlhelp_basename = 'taichidoc' - - -# -- Options for LaTeX output ------------------------------------------------ - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'taichi.tex', 'taichi Documentation', - 'Yuanming Hu', 'manual'), -] - - -# -- Options for manual page output ------------------------------------------ - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'taichi', 'taichi Documentation', - [author], 1) -] - - -# -- Options for Texinfo output ---------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'taichi', 'taichi Documentation', - author, 'taichi', 'One line description of project.', - 'Miscellaneous'), -] - - -# -- Extension configuration ------------------------------------------------- - -# -- Options for intersphinx extension --------------------------------------- - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'https://docs.python.org/': None} - -# -- Options for todo extension ---------------------------------------------- - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True \ No newline at end of file diff --git a/tensorflow_graphics/physics/docs/index.rst b/tensorflow_graphics/physics/docs/index.rst deleted file mode 100644 index cf91d4a6f..000000000 --- a/tensorflow_graphics/physics/docs/index.rst +++ /dev/null @@ -1,10 +0,0 @@ -Differentiable MPM -========================================================= - -.. toctree:: - :caption: GETTING STARTED - :maxdepth: 2 - - installation - API - diff --git a/tensorflow_graphics/physics/docs/installation.rst b/tensorflow_graphics/physics/docs/installation.rst deleted file mode 100644 index 9ee3774fb..000000000 --- a/tensorflow_graphics/physics/docs/installation.rst +++ /dev/null @@ -1,21 +0,0 @@ -Dependency -------------------------------------------------------------------- -`Differentiable MPM` depends on `Python 3` with packages: - - `tensorflow` - - `cv2` - - `numpy` - -We will add CUDA support later. For now the dependency is simple. - -Examples ------------------------------- -Please see `jump.py` - - -Building the documentation -------------------------------------- - -.. code-block:: bash - - sudo pip3 install Sphinx sphinx_rtd_theme - sphinx-build . build diff --git a/tensorflow_graphics/physics/docs/make.bat b/tensorflow_graphics/physics/docs/make.bat deleted file mode 100644 index 7c3f11fb7..000000000 --- a/tensorflow_graphics/physics/docs/make.bat +++ /dev/null @@ -1,36 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=build -set SPHINXPROJ=Differentiable MPM - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/tensorflow_graphics/physics/external/partio/CMakeLists.txt b/tensorflow_graphics/physics/external/partio/CMakeLists.txt deleted file mode 100644 index 6f6ec3232..000000000 --- a/tensorflow_graphics/physics/external/partio/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ -# PARTIO SOFTWARE -# Copyright 2010 Disney Enterprises, Inc. All rights reserved -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# -# * The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -# Studios" or the names of its contributors may NOT be used to -# endorse or promote products derived from this software without -# specific prior written permission from Walt Disney Pictures. -# -# Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -# FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -# IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -FILE(GLOB io_cpp "src/io/*.cpp") -FILE(GLOB core_cpp "src/core/*.cpp") -ADD_LIBRARY (partio SHARED ${io_cpp} ${core_cpp}) - -FILE(GLOB public_includes "*.h") - diff --git a/tensorflow_graphics/physics/external/partio/include/Partio.h b/tensorflow_graphics/physics/external/partio/include/Partio.h deleted file mode 100644 index b715835ff..000000000 --- a/tensorflow_graphics/physics/external/partio/include/Partio.h +++ /dev/null @@ -1,275 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -/*! - The interface of the particle API (Partio) - what type the primitive is, how many instances of the primitive there, name of - the attribute and an index which speeds lookups of data -*/ -#ifndef _Partioh_ -#define _Partioh_ - -#include -#include -#include -#include -#include "PartioAttribute.h" -#include "PartioIterator.h" - -namespace Partio{ - -//! Opaque random access method to a single particle. No number is implied or guaranteed. -typedef uint64_t ParticleIndex; - -class ParticlesData; -// Particle Collection Interface -//! Particle Collection Interface -/*! - This class provides ways of accessing basic information about particles, - the number in the set, the attribute names and types, etc. No actual - data can be read or written. -*/ -class ParticlesInfo -{ -protected: - virtual ~ParticlesInfo() {} -public: - friend void freeCached(ParticlesData* particles); - - //! Frees the memory if this particle set was created with create() or release() - //! Reduces reference count if it was obtained with readCached() - //! and if the ref count hits zero, frees the memory - virtual void release() const=0; - - //! Number of particles in the structure. - virtual int numAttributes() const=0; - - //! Number of per-particle attributes. - virtual int numParticles() const=0; - - //! Lookup an attribute by name and store a handle to the attribute. - virtual bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const=0; - - //! Lookup an attribute by index and store a handle to the attribute. - virtual bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const=0; -}; - -// Particle Data Interface -//! Particle Data Interface -/*! - This interface provides the ability to read data attributes for given particles - and search for nearest neighbors using KD-Trees. -*/ -class ParticlesData:public ParticlesInfo -{ -protected: - virtual ~ParticlesData() {} -public: - - typedef ParticleIterator const_iterator; - - //! Fill the user supplied values array with data corresponding to the given - //! list of particles. Specify whether or not your indices are sorted. - //! note if T is void, then type checking is disabled. - template inline void data(const ParticleAttribute& attribute, - const int indexCount,const ParticleIndex* particleIndices,const bool sorted,T* values) - { - assert(typeCheck(attribute.type)); - dataInternalMultiple(attribute,indexCount,particleIndices,sorted,(char*)values); - } - - template inline const T* data(const ParticleAttribute& attribute, - const ParticleIndex particleIndex) const - { - // TODO: add type checking - return static_cast(dataInternal(attribute,particleIndex)); - } - - /// All indexed strings for an attribute - virtual const std::vector& indexedStrs(const ParticleAttribute& attr) const=0; - - /// Looks up the index for a given string for a given attribute, returns -1 if not found - virtual int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const=0; - - //! Fill the user supplied values array with data corresponding to the given - //! list of particles. Specify whether or not your indices are sorted. Attributes - //! that are not floating types are automatically casted before being placed - //! in values. - virtual void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,float* values) const=0; - - //! Find the points within the bounding box specified. - //! Must call sort() before using this function - //! NOTE: points array is not pre-cleared. - virtual void findPoints(const float bboxMin[3],const float bboxMax[3], - std::vector& points) const=0; - - //! Find the N nearest neighbors that are within maxRadius distance using STL types - //! (measured in standard 2-norm). If less than N are found within the - //! radius, the search radius is not increased. - //! NOTE: points/pointsDistancesSquared are cleared before use. - //! Must call sort() before using this function - virtual float findNPoints(const float center[3],int nPoints,const float maxRadius, - std::vector& points,std::vector& pointDistancesSquared) const=0; - - //! Find the N nearest neighbors that are within maxRadius distance using POD types - //! NOTE: returns the number of found points and leaves in finalRadius2 the - //! square of the final search radius used - virtual int findNPoints(const float center[3],int nPoints,const float maxRadius, - ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const=0; - - //! Produce a const iterator - virtual const_iterator setupConstIterator() const=0; - - //! Produce a beginning iterator for the particles - const_iterator begin() const - {return setupConstIterator();} - - //! Produce a ending iterator for the particles - const_iterator end() const - {return const_iterator();} - -private: - virtual void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const=0; - virtual void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,char* values) const=0; -}; - -// Particle Mutable Data Interface -//! Particle Mutable Data Interface -/*! - This interface provides the ability to write data attributes, add attributes, - add particles, etc. -*/ -class ParticlesDataMutable:public ParticlesData -{ -protected: - virtual ~ParticlesDataMutable(){} - -public: - - typedef ParticleIterator iterator; - - //! Get a pointer to the data corresponding to the given particleIndex and - //! attribute given by the attribute handle. - template inline T* dataWrite(const ParticleAttribute& attribute, - const ParticleIndex particleIndex) const - { - // TODO: add type checking - return static_cast(dataInternal(attribute,particleIndex)); - } - - /// Returns a token for the given string. This allows efficient storage of string data - virtual int registerIndexedStr(const ParticleAttribute& attribute,const char* str)=0; - - //! Preprocess the data for finding nearest neighbors by sorting into a - //! KD-Tree. Note: all particle pointers are invalid after this call. - virtual void sort()=0; - - //! Adds an attribute to the particle with the provided name, type and count - virtual ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type, - const int count)=0; - - //! Add a particle to the particle set. Returns the offset to the particle - virtual ParticleIndex addParticle()=0; - - //! Add a set of particles to the particle set. Returns the offset to the - //! first particle - virtual iterator addParticles(const int count)=0; - - //! Produce a beginning iterator for the particles - iterator begin() - {return setupIterator();} - - //! Produce a ending iterator for the particles - iterator end() - {return iterator();} - - //! Produce a const iterator - virtual iterator setupIterator()=0; - -private: - virtual void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const=0; -}; - -//! Provides an empty particle instance, freed with p->release() -ParticlesDataMutable* create(); - -ParticlesDataMutable* createInterleave(); - -//! Provides read/write access to a particle set stored in a file -//! freed with p->release() -ParticlesDataMutable* read(const char* filename); - -//! Provides read access to a particle headers (number of particles -//! and attribute information, much cheapeer -ParticlesInfo* readHeaders(const char* filename); - -//! Provides access to a particle set stored in a file -//! if filename ends with .gz or forceCompressed is true, the file is compressed. -void write(const char* filename,const ParticlesData&,const bool forceCompressed=false); - - -//! Cached (only one copy) read only way to read a particle file -/*! - Loads a file read-only if not already in memory, otherwise returns - already loaded item. Pointer is owned by Partio and must be releasedwith - p->release(); (will not be deleted if others are also holding). - If you want to do finding neighbors give true to sort -*/ -ParticlesData* readCached(const char* filename,const bool sort); - -//! Begin accessing data in a cached file -/*! - Indicates to Partio that data access from a cached particle set will - start. The sent in particles pointer must be from a readCached() - call, not from read() or create(). Attributes can be read before this call. -*/ -void beginCachedAccess(ParticlesData* particles); - -//! End accessing data in a cached file -/*! - Indicates to Partio that data from a cached particle read will - end. The sent in particles pointer must be from a readCached() - call, not from read() or create(). This allows the particle API - to free all data pages, if they are needed. -*/ -void endCachedAccess(ParticlesData* particles); - -//! Prints a subset of particle data in a textual form -void print(const ParticlesData* particles); - -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/include/PartioAttribute.h b/tensorflow_graphics/physics/external/partio/include/PartioAttribute.h deleted file mode 100644 index 2026c878f..000000000 --- a/tensorflow_graphics/physics/external/partio/include/PartioAttribute.h +++ /dev/null @@ -1,116 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -/*! - The interface of the particle API (Partio) - what type the primitive is, how many instances of the primitive there, name of - the attribute and an index which speeds lookups of data -*/ - -#ifndef _PartioParticleAttribute_h_ -#define _PartioParticleAttribute_h_ -namespace Partio{ - -// Particle Types -enum ParticleAttributeType {NONE=0,VECTOR=1,FLOAT=2,INT=3,INDEXEDSTR=4}; - -template struct ETYPE_TO_TYPE -{struct UNUSABLE;typedef UNUSABLE TYPE;}; -template<> struct ETYPE_TO_TYPE{typedef float TYPE;}; -template<> struct ETYPE_TO_TYPE{typedef float TYPE;}; -template<> struct ETYPE_TO_TYPE{typedef int TYPE;}; -template<> struct ETYPE_TO_TYPE{typedef int TYPE;}; - -template struct -IS_SAME{static const bool value=false;}; -template struct IS_SAME{static const bool value=true;}; - -template bool -typeCheck(const ParticleAttributeType& type) -{ - // if T is void, don't bother checking what we passed in - if (IS_SAME::value) return true; - switch(type){ - case VECTOR: return IS_SAME::TYPE,T>::value; - case FLOAT: return IS_SAME::TYPE,T>::value; - case INT: return IS_SAME::TYPE,T>::value; - case INDEXEDSTR: return IS_SAME::TYPE,T>::value; - default: return false; // unknown type - } -} - -inline -int TypeSize(ParticleAttributeType attrType) -{ - switch(attrType){ - case NONE: return 0; - case VECTOR: return sizeof(float); - case FLOAT: return sizeof(float); - case INT: return sizeof(int); - case INDEXEDSTR: return sizeof(int); - default: return 0; - } -} - -std::string TypeName(ParticleAttributeType attrType); - -// Particle Attribute Specifier -//! Particle Collection Interface -/*! - This class provides a handle and description of an attribute. This includes - what type the primitive is, how many instances of the primitive there, name of - the attribute and an index which speeds lookups of data -*/ -class ParticleAttribute -{ -public: - //! Type of attribute - ParticleAttributeType type; - - //! Number of entries, should be 3 if type is VECTOR - int count; - - //! Name of attribute - std::string name; - - //! Internal method of fast access, user should not use or change - int attributeIndex; - - //! Comment used by various data/readers for extra attribute information - //! for example for a PTC file to read and write this could be "color" or "point" - // std::string comment; -}; -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/include/PartioIterator.h b/tensorflow_graphics/physics/external/partio/include/PartioIterator.h deleted file mode 100644 index 03fa67d33..000000000 --- a/tensorflow_graphics/physics/external/partio/include/PartioIterator.h +++ /dev/null @@ -1,222 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#ifndef _PartioParticleIterator_h_ -#define _PartioParticleIterator_h_ - -#include -#include -#include -#include "PartioAttribute.h" - -namespace Partio{ - -class ParticlesData; -struct ParticleAccessor; - -//! Data -/*! - This class represents a piece of data stored in a particle attribute. - The only allowed values are float and d -*/ -template -struct Data -{ - T x[d]; - - const T& operator[](const int i) const {return x[i];} - T& operator[](const int i) {return x[i];} -}; -typedef Data DataI; -typedef Data DataF; -typedef Data DataV; - - -template class ParticleIterator; - -struct Provider -{ - virtual void setupIteratorNextBlock(ParticleIterator& iterator) const=0; - virtual void setupIteratorNextBlock(ParticleIterator& iterator)=0; - virtual void setupAccessor(ParticleIterator& iterator,ParticleAccessor& accessor) const=0; - virtual void setupAccessor(ParticleIterator& iterator,ParticleAccessor& accessor)=0; - virtual ~Provider(){} -}; - -template -struct PROVIDER -{ - typedef Provider TYPE; -}; -template<> -struct PROVIDER -{ - typedef const Provider TYPE; -}; - -// TODO: non copyable -struct ParticleAccessor -{ - int stride; - char* basePointer; - int attributeIndex; // index of attribute opaque, do not touch - int count; -private: - ParticleAttributeType type; - - ParticleAccessor* next; - -public: - ParticleAccessor(const ParticleAttribute& attr) - :stride(0),basePointer(0),attributeIndex(attr.attributeIndex), - count(attr.count),type(attr.type),next(0) - {} - - template TDATA* raw(const TITERATOR& it) - {return reinterpret_cast(basePointer+it.index*stride);} - - template const TDATA* raw(const TITERATOR& it) const - {return reinterpret_cast(basePointer+it.index*stride);} - - template TDATA& data(const TITERATOR& it) - {return *reinterpret_cast(basePointer+it.index*stride);} - - template const TDATA& data(const TITERATOR& it) const - {return *reinterpret_cast(basePointer+it.index*stride);} - - friend class ParticleIterator; - friend class ParticleIterator; -}; - - -template -class ParticleIterator -{ -public: -private: - typedef typename PROVIDER::TYPE PROVIDER; - - //! Delegate, null if the iterator is false - PROVIDER* particles; - -public: - //! Start of non-interleaved index of contiguous block - size_t index; -private: - - //! End of non-interleaved index of contiguous block - size_t indexEnd; - - //! This is used for both non-interleaved and interleaved particle attributes - ParticleAccessor* accessors; - -public: - //! Construct an invalid iterator - ParticleIterator() - :particles(0),index(0),indexEnd(0),accessors(0) - {} - - //! Copy constructor. NOTE: Invalidates any accessors that have been registered with it - ParticleIterator(const ParticleIterator& other) - :particles(other.particles),index(other.index),indexEnd(other.indexEnd),accessors(0) - {} - - //! Construct an iterator with iteration parameters. This is typically only - //! called by implementations of Particle (not by users). For users, use - //! begin() and end() on the particle type - ParticleIterator(PROVIDER* particles,size_t index,size_t indexEnd) - :particles(particles),index(index),indexEnd(indexEnd) - {} - - //! Whether the iterator is valid - bool valid() const - {return particles;} - - //! Increment the iterator (postfix). Prefer the prefix form below to this one. - ParticleIterator operator++(int) - { - ParticleIterator newIt(*this); - index++; - return newIt; - } - - //! Increment the iterator (prefix). - ParticleIterator& operator++() - { - index++; - // TODO: make particles==0 check unnecessary by using indexEnd=0 to signify invalid iterator - if((index>indexEnd) && particles) particles->setupIteratorNextBlock(*this); - return *this; - } - - //! Iterator comparison equals - bool operator==(const ParticleIterator& other) - { - // TODO: this is really really expensive - // TODO: this needs a block or somethingt o say which segment it is - return particles==other.particles && index==other.index; - } - - //! Iterator comparison not-equals - bool operator!=(const ParticleIterator& other) - { - if(other.particles!=particles) return true; // if not same delegate - else if(particles==0) return false; // if both are invalid iterators - else return !(*this==other); - } - - void addAccessor(ParticleAccessor& newAccessor) - { - newAccessor.next=accessors; - accessors=&newAccessor; - if(particles) particles->setupAccessor(*this,newAccessor); - } - - - // TODO: add copy constructor that wipes out accessor linked list - -}; - -template -std::ostream& operator<<(std::ostream& output,const Data& v) -{ - output< -#include -#include -#include -#include "PartioAttribute.h" -#include "PartioIterator.h" - -namespace Partio{ - -//! Opaque random access method to a single particle. No number is implied or guaranteed. -typedef uint64_t ParticleIndex; - -class ParticlesData; -// Particle Collection Interface -//! Particle Collection Interface -/*! - This class provides ways of accessing basic information about particles, - the number in the set, the attribute names and types, etc. No actual - data can be read or written. -*/ -class ParticlesInfo -{ -protected: - virtual ~ParticlesInfo() {} -public: - friend void freeCached(ParticlesData* particles); - - //! Frees the memory if this particle set was created with create() or release() - //! Reduces reference count if it was obtained with readCached() - //! and if the ref count hits zero, frees the memory - virtual void release() const=0; - - //! Number of particles in the structure. - virtual int numAttributes() const=0; - - //! Number of per-particle attributes. - virtual int numParticles() const=0; - - //! Lookup an attribute by name and store a handle to the attribute. - virtual bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const=0; - - //! Lookup an attribute by index and store a handle to the attribute. - virtual bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const=0; -}; - -// Particle Data Interface -//! Particle Data Interface -/*! - This interface provides the ability to read data attributes for given particles - and search for nearest neighbors using KD-Trees. -*/ -class ParticlesData:public ParticlesInfo -{ -protected: - virtual ~ParticlesData() {} -public: - - typedef ParticleIterator const_iterator; - - //! Fill the user supplied values array with data corresponding to the given - //! list of particles. Specify whether or not your indices are sorted. - //! note if T is void, then type checking is disabled. - template inline void data(const ParticleAttribute& attribute, - const int indexCount,const ParticleIndex* particleIndices,const bool sorted,T* values) - { - assert(typeCheck(attribute.type)); - dataInternalMultiple(attribute,indexCount,particleIndices,sorted,(char*)values); - } - - template inline const T* data(const ParticleAttribute& attribute, - const ParticleIndex particleIndex) const - { - // TODO: add type checking - return static_cast(dataInternal(attribute,particleIndex)); - } - - /// All indexed strings for an attribute - virtual const std::vector& indexedStrs(const ParticleAttribute& attr) const=0; - - /// Looks up the index for a given string for a given attribute, returns -1 if not found - virtual int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const=0; - - //! Fill the user supplied values array with data corresponding to the given - //! list of particles. Specify whether or not your indices are sorted. Attributes - //! that are not floating types are automatically casted before being placed - //! in values. - virtual void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,float* values) const=0; - - //! Find the points within the bounding box specified. - //! Must call sort() before using this function - //! NOTE: points array is not pre-cleared. - virtual void findPoints(const float bboxMin[3],const float bboxMax[3], - std::vector& points) const=0; - - //! Find the N nearest neighbors that are within maxRadius distance using STL types - //! (measured in standard 2-norm). If less than N are found within the - //! radius, the search radius is not increased. - //! NOTE: points/pointsDistancesSquared are cleared before use. - //! Must call sort() before using this function - virtual float findNPoints(const float center[3],int nPoints,const float maxRadius, - std::vector& points,std::vector& pointDistancesSquared) const=0; - - //! Find the N nearest neighbors that are within maxRadius distance using POD types - //! NOTE: returns the number of found points and leaves in finalRadius2 the - //! square of the final search radius used - virtual int findNPoints(const float center[3],int nPoints,const float maxRadius, - ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const=0; - - //! Produce a const iterator - virtual const_iterator setupConstIterator() const=0; - - //! Produce a beginning iterator for the particles - const_iterator begin() const - {return setupConstIterator();} - - //! Produce a ending iterator for the particles - const_iterator end() const - {return const_iterator();} - -private: - virtual void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const=0; - virtual void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,char* values) const=0; -}; - -// Particle Mutable Data Interface -//! Particle Mutable Data Interface -/*! - This interface provides the ability to write data attributes, add attributes, - add particles, etc. -*/ -class ParticlesDataMutable:public ParticlesData -{ -protected: - virtual ~ParticlesDataMutable(){} - -public: - - typedef ParticleIterator iterator; - - //! Get a pointer to the data corresponding to the given particleIndex and - //! attribute given by the attribute handle. - template inline T* dataWrite(const ParticleAttribute& attribute, - const ParticleIndex particleIndex) const - { - // TODO: add type checking - return static_cast(dataInternal(attribute,particleIndex)); - } - - /// Returns a token for the given string. This allows efficient storage of string data - virtual int registerIndexedStr(const ParticleAttribute& attribute,const char* str)=0; - - //! Preprocess the data for finding nearest neighbors by sorting into a - //! KD-Tree. Note: all particle pointers are invalid after this call. - virtual void sort()=0; - - //! Adds an attribute to the particle with the provided name, type and count - virtual ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type, - const int count)=0; - - //! Add a particle to the particle set. Returns the offset to the particle - virtual ParticleIndex addParticle()=0; - - //! Add a set of particles to the particle set. Returns the offset to the - //! first particle - virtual iterator addParticles(const int count)=0; - - //! Produce a beginning iterator for the particles - iterator begin() - {return setupIterator();} - - //! Produce a ending iterator for the particles - iterator end() - {return iterator();} - - //! Produce a const iterator - virtual iterator setupIterator()=0; - -private: - virtual void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const=0; -}; - -//! Provides an empty particle instance, freed with p->release() -ParticlesDataMutable* create(); - -ParticlesDataMutable* createInterleave(); - -//! Provides read/write access to a particle set stored in a file -//! freed with p->release() -ParticlesDataMutable* read(const char* filename); - -//! Provides read access to a particle headers (number of particles -//! and attribute information, much cheapeer -ParticlesInfo* readHeaders(const char* filename); - -//! Provides access to a particle set stored in a file -//! if filename ends with .gz or forceCompressed is true, the file is compressed. -void write(const char* filename,const ParticlesData&,const bool forceCompressed=false); - - -//! Cached (only one copy) read only way to read a particle file -/*! - Loads a file read-only if not already in memory, otherwise returns - already loaded item. Pointer is owned by Partio and must be releasedwith - p->release(); (will not be deleted if others are also holding). - If you want to do finding neighbors give true to sort -*/ -ParticlesData* readCached(const char* filename,const bool sort); - -//! Begin accessing data in a cached file -/*! - Indicates to Partio that data access from a cached particle set will - start. The sent in particles pointer must be from a readCached() - call, not from read() or create(). Attributes can be read before this call. -*/ -void beginCachedAccess(ParticlesData* particles); - -//! End accessing data in a cached file -/*! - Indicates to Partio that data from a cached particle read will - end. The sent in particles pointer must be from a readCached() - call, not from read() or create(). This allows the particle API - to free all data pages, if they are needed. -*/ -void endCachedAccess(ParticlesData* particles); - -//! Prints a subset of particle data in a textual form -void print(const ParticlesData* particles); - -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/src/PartioAttribute.h b/tensorflow_graphics/physics/external/partio/src/PartioAttribute.h deleted file mode 100644 index 2026c878f..000000000 --- a/tensorflow_graphics/physics/external/partio/src/PartioAttribute.h +++ /dev/null @@ -1,116 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -/*! - The interface of the particle API (Partio) - what type the primitive is, how many instances of the primitive there, name of - the attribute and an index which speeds lookups of data -*/ - -#ifndef _PartioParticleAttribute_h_ -#define _PartioParticleAttribute_h_ -namespace Partio{ - -// Particle Types -enum ParticleAttributeType {NONE=0,VECTOR=1,FLOAT=2,INT=3,INDEXEDSTR=4}; - -template struct ETYPE_TO_TYPE -{struct UNUSABLE;typedef UNUSABLE TYPE;}; -template<> struct ETYPE_TO_TYPE{typedef float TYPE;}; -template<> struct ETYPE_TO_TYPE{typedef float TYPE;}; -template<> struct ETYPE_TO_TYPE{typedef int TYPE;}; -template<> struct ETYPE_TO_TYPE{typedef int TYPE;}; - -template struct -IS_SAME{static const bool value=false;}; -template struct IS_SAME{static const bool value=true;}; - -template bool -typeCheck(const ParticleAttributeType& type) -{ - // if T is void, don't bother checking what we passed in - if (IS_SAME::value) return true; - switch(type){ - case VECTOR: return IS_SAME::TYPE,T>::value; - case FLOAT: return IS_SAME::TYPE,T>::value; - case INT: return IS_SAME::TYPE,T>::value; - case INDEXEDSTR: return IS_SAME::TYPE,T>::value; - default: return false; // unknown type - } -} - -inline -int TypeSize(ParticleAttributeType attrType) -{ - switch(attrType){ - case NONE: return 0; - case VECTOR: return sizeof(float); - case FLOAT: return sizeof(float); - case INT: return sizeof(int); - case INDEXEDSTR: return sizeof(int); - default: return 0; - } -} - -std::string TypeName(ParticleAttributeType attrType); - -// Particle Attribute Specifier -//! Particle Collection Interface -/*! - This class provides a handle and description of an attribute. This includes - what type the primitive is, how many instances of the primitive there, name of - the attribute and an index which speeds lookups of data -*/ -class ParticleAttribute -{ -public: - //! Type of attribute - ParticleAttributeType type; - - //! Number of entries, should be 3 if type is VECTOR - int count; - - //! Name of attribute - std::string name; - - //! Internal method of fast access, user should not use or change - int attributeIndex; - - //! Comment used by various data/readers for extra attribute information - //! for example for a PTC file to read and write this could be "color" or "point" - // std::string comment; -}; -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/src/PartioIterator.h b/tensorflow_graphics/physics/external/partio/src/PartioIterator.h deleted file mode 100644 index 03fa67d33..000000000 --- a/tensorflow_graphics/physics/external/partio/src/PartioIterator.h +++ /dev/null @@ -1,222 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#ifndef _PartioParticleIterator_h_ -#define _PartioParticleIterator_h_ - -#include -#include -#include -#include "PartioAttribute.h" - -namespace Partio{ - -class ParticlesData; -struct ParticleAccessor; - -//! Data -/*! - This class represents a piece of data stored in a particle attribute. - The only allowed values are float and d -*/ -template -struct Data -{ - T x[d]; - - const T& operator[](const int i) const {return x[i];} - T& operator[](const int i) {return x[i];} -}; -typedef Data DataI; -typedef Data DataF; -typedef Data DataV; - - -template class ParticleIterator; - -struct Provider -{ - virtual void setupIteratorNextBlock(ParticleIterator& iterator) const=0; - virtual void setupIteratorNextBlock(ParticleIterator& iterator)=0; - virtual void setupAccessor(ParticleIterator& iterator,ParticleAccessor& accessor) const=0; - virtual void setupAccessor(ParticleIterator& iterator,ParticleAccessor& accessor)=0; - virtual ~Provider(){} -}; - -template -struct PROVIDER -{ - typedef Provider TYPE; -}; -template<> -struct PROVIDER -{ - typedef const Provider TYPE; -}; - -// TODO: non copyable -struct ParticleAccessor -{ - int stride; - char* basePointer; - int attributeIndex; // index of attribute opaque, do not touch - int count; -private: - ParticleAttributeType type; - - ParticleAccessor* next; - -public: - ParticleAccessor(const ParticleAttribute& attr) - :stride(0),basePointer(0),attributeIndex(attr.attributeIndex), - count(attr.count),type(attr.type),next(0) - {} - - template TDATA* raw(const TITERATOR& it) - {return reinterpret_cast(basePointer+it.index*stride);} - - template const TDATA* raw(const TITERATOR& it) const - {return reinterpret_cast(basePointer+it.index*stride);} - - template TDATA& data(const TITERATOR& it) - {return *reinterpret_cast(basePointer+it.index*stride);} - - template const TDATA& data(const TITERATOR& it) const - {return *reinterpret_cast(basePointer+it.index*stride);} - - friend class ParticleIterator; - friend class ParticleIterator; -}; - - -template -class ParticleIterator -{ -public: -private: - typedef typename PROVIDER::TYPE PROVIDER; - - //! Delegate, null if the iterator is false - PROVIDER* particles; - -public: - //! Start of non-interleaved index of contiguous block - size_t index; -private: - - //! End of non-interleaved index of contiguous block - size_t indexEnd; - - //! This is used for both non-interleaved and interleaved particle attributes - ParticleAccessor* accessors; - -public: - //! Construct an invalid iterator - ParticleIterator() - :particles(0),index(0),indexEnd(0),accessors(0) - {} - - //! Copy constructor. NOTE: Invalidates any accessors that have been registered with it - ParticleIterator(const ParticleIterator& other) - :particles(other.particles),index(other.index),indexEnd(other.indexEnd),accessors(0) - {} - - //! Construct an iterator with iteration parameters. This is typically only - //! called by implementations of Particle (not by users). For users, use - //! begin() and end() on the particle type - ParticleIterator(PROVIDER* particles,size_t index,size_t indexEnd) - :particles(particles),index(index),indexEnd(indexEnd) - {} - - //! Whether the iterator is valid - bool valid() const - {return particles;} - - //! Increment the iterator (postfix). Prefer the prefix form below to this one. - ParticleIterator operator++(int) - { - ParticleIterator newIt(*this); - index++; - return newIt; - } - - //! Increment the iterator (prefix). - ParticleIterator& operator++() - { - index++; - // TODO: make particles==0 check unnecessary by using indexEnd=0 to signify invalid iterator - if((index>indexEnd) && particles) particles->setupIteratorNextBlock(*this); - return *this; - } - - //! Iterator comparison equals - bool operator==(const ParticleIterator& other) - { - // TODO: this is really really expensive - // TODO: this needs a block or somethingt o say which segment it is - return particles==other.particles && index==other.index; - } - - //! Iterator comparison not-equals - bool operator!=(const ParticleIterator& other) - { - if(other.particles!=particles) return true; // if not same delegate - else if(particles==0) return false; // if both are invalid iterators - else return !(*this==other); - } - - void addAccessor(ParticleAccessor& newAccessor) - { - newAccessor.next=accessors; - accessors=&newAccessor; - if(particles) particles->setupAccessor(*this,newAccessor); - } - - - // TODO: add copy constructor that wipes out accessor linked list - -}; - -template -std::ostream& operator<<(std::ostream& output,const Data& v) -{ - output< -#include -#include -#include -#include - -template class BBox -{ - public: - float min[k]; - float max[k]; - - BBox() { clear(); } - BBox(const float p[k]) { set(p); } - - void set(const float p[k]) - { - for (int i = 0; i < k; i++) { - min[i] = max[i] = p[i]; - } - } - - void clear() - { - for (int i = 0; i < k; i++) { - min[i] = FLT_MAX; - max[i] = FLT_MIN; - } - } - - - void grow(const float p[k]) - { - for (int i = 0; i < k; i++) { - if (p[i] < min[i]) min[i] = p[i]; - if (p[i] > max[i]) max[i] = p[i]; - } - } - - void grow(float R) - { - for (int i = 0; i < k; i++) { - min[i] -= R; - max[i] += R; - } - } - - void grow(const BBox& b) - { - for (int i = 0; i < k; i++) { - if (b.min[i] < min[i]) min[i] = b.min[i]; - if (b.max[i] > max[i]) max[i] = b.max[i]; - } - } - - bool intersects(const BBox& b) const - { - for (int i = 0; i < k; i++) { - if (b.max[i] < min[i] || b.min[i] > max[i]) return 0; - } - return 1; - } - - bool inside(const float p[k]) const - { - for (int i = 0; i < k; i++) { - if (p[i] < min[i] || p[i] > max[i]) return 0; - } - return 1; - } -}; - - -// MAKE-heap on a binary (array based) heap -// loosely based on Henrik Wann Jensen's Photon Mapping book, but made 0-indexed -// and commented -inline float buildHeap(uint64_t *result, float *distance_squared,int heap_size) -{ - int max_non_leaf_index=heap_size/2-1; // 0 to max_non_leaf_index is indices of parents - - // go from bottom of tree scanning right to left in each height of the tree - for(int subtreeParent=max_non_leaf_index;subtreeParent>=0;subtreeParent--){ - int current_parent=subtreeParent; - while(current_parent<=max_non_leaf_index){ - int left_index=2*current_parent+1;int right_index=2*current_parent+2; - // find largest element - int largest_index=current_parent; - if(left_indexdistance_squared[largest_index]) - largest_index=left_index; - if(right_indexdistance_squared[largest_index]) - largest_index=right_index; - // subtree parented at current_parent satisfies heap property because parent has largest - if(largest_index==current_parent) break; - // pull large value up and descend to tree to see if new that subtree is invalid - std::swap(result[largest_index],result[current_parent]); - std::swap(distance_squared[largest_index],distance_squared[current_parent]); - current_parent=largest_index; - } - } - return distance_squared[0]; // return max distance -} - -// Inserts smaller element into heap (does not check so caller must) -inline float insertToHeap(uint64_t *result,float*distance_squared,int heap_size,int new_id,float new_distance_squared) -{ - assert(new_distance_squared=heap_size) break; - else if(right>=heap_size || distance_squared[left]>distance_squared[right]) index_of_largest=left; - else index_of_largest=right; - // new element is largest - if(new_distance_squared>distance_squared[index_of_largest]) break; - // pull the biggest element up and recurse to where it came from - std::swap(result[index_of_largest],result[current_parent]); - std::swap(distance_squared[index_of_largest],distance_squared[current_parent]); - current_parent=index_of_largest; - } - // overwrite current node in tree - distance_squared[current_parent]=new_distance_squared; - result[current_parent]=new_id; - return distance_squared[0]; // return max distance -} - - -template class KdTree -{ - - struct NearestQuery - { - NearestQuery(uint64_t *result,float *distanceSquared,const float pquery_in[k], - int maxPoints,float maxRadiusSquared) - :result(result),distanceSquared(distanceSquared),maxPoints(maxPoints), - foundPoints(0),maxRadiusSquared(maxRadiusSquared) - - {for(int i=0;i& bbox() const { return _bbox; } - const float* point(int i) const { return _points[i].p; } - uint64_t id(int i) const { return _ids[i]; } - void setPoints(const float* p, int n); - void sort(); - void findPoints(std::vector& points, const BBox& bbox) const; - float findNPoints(std::vector& result,std::vector& distanceSquared, - const float p[k],int nPoints,float maxRadius) const; - int findNPoints(uint64_t *result,float *distanceSquared, float *finalSearchRadius2, - const float p[k], int nPoints, float maxRadius) const; - - - private: - void sortSubtree(int n, int count, int j); - struct ComparePointsById { - float* points; - ComparePointsById(float* p) : points(p) {} - bool operator() (int a, int b) { return points[a*k] < points[b*k]; } - }; - void findPoints(std::vector& result, const BBox& bbox, - int n, int size, int j) const; - void findNPoints(NearestQuery& query,int n,int size,int j) const; - - static inline void ComputeSubtreeSizes(int size, int& left, int& right) - { - // if (size+1) is a power of two, then subtree is balanced - bool balanced = ((size+1) & size) == 0; - if (balanced) { - // subtree size = (size-1)/2 - left = right = size>>1; // ignore -1 since size is always odd - } - else if (size == 2) { - // special case - left = 1; - right = 0; - } - else { - // left subtree size = (smallest power of 2 > half size)-1 - int i = 0; - for (int c = size; c != 1; c >>= 1) i++; - left = (1< _bbox; - struct Point { float p[k]; }; - std::vector _points; - std::vector _ids; - bool _sorted; -}; - -template -KdTree::KdTree() - : _sorted(0) -{} - -template -KdTree::~KdTree() -{} - -// TODO: this should take an array of ids in -template -void KdTree::setPoints(const float* p, int n) -{ - // copy points - _points.resize(n); - memcpy(&_points[0], p, sizeof(Point)*n); - - // compute bbox - if (n) { - _bbox.set(p); - for (int i = 1; i < n; i++) - _bbox.grow(_points[i].p); - } else _bbox.clear(); - - // assign sequential ids - _ids.reserve(n); - while ((int)_ids.size() < n) _ids.push_back(_ids.size()); - _sorted = 0; -} - -template -void KdTree::sort() -{ - if (_sorted) return; - _sorted = 1; - - // reorder ids to sort points - int np = _points.size(); - if (!np) return; - if (np > 1) sortSubtree(0, np, 0); - - // reorder points to match id order - std::vector newpoints(np); - for (int i = 0; i < np; i++) - newpoints[i] = _points[_ids[i]]; - std::swap(_points, newpoints); -} - -template -void KdTree::sortSubtree(int n, int size, int j) -{ - int left, right; ComputeSubtreeSizes(size, left, right); - - // partition range [n, n+size) along axis j into two subranges: - // [n, n+leftSize+1) and [n+leftSize+1, n+size) - std::nth_element(&_ids[n], &_ids[n+left], &_ids[n+size], - ComparePointsById(&_points[0].p[j])); - // move median value (nth element) to front as root node of subtree - std::swap(_ids[n], _ids[n+left]); - - // sort left and right subtrees using next discriminant - if (left <= 1) return; - if (k > 1) j = (j+1)%k; - sortSubtree(n+1, left, j); - if (right <= 1) return; - sortSubtree(n+left+1, right, j); -} - - - -template -float KdTree::findNPoints(std::vector& result, - std::vector& distanceSquared,const float p[k],int nPoints,float maxRadius) const -{ - result.resize(nPoints); - distanceSquared.resize (nPoints); - float finalRadius2 = maxRadius; - int size = findNPoints (&result[0], &distanceSquared[0], &finalRadius2, p, nPoints, maxRadius); - result.resize(size); - distanceSquared.resize(size); - return maxRadius; -} - -template -int KdTree::findNPoints(uint64_t *result, float *distanceSquared, float *finalSearchRadius2, - const float p[k],int nPoints,float maxRadius) const -{ - float radius_squared=maxRadius*maxRadius; - - if (!size() || !_sorted || nPoints<1) return (int)radius_squared; - - NearestQuery query(result,distanceSquared,p,nPoints,radius_squared); - findNPoints(query,0,size(),0); - *finalSearchRadius2=query.maxRadiusSquared; - return query.foundPoints; -} - -template -void KdTree::findNPoints(typename KdTree::NearestQuery& query,int n,int size,int j) const -{ - const float* p=&_points[n].p[0]; - - if(size>1){ - float axis_distance=query.pquery[j]-p[j]; - int left,right;ComputeSubtreeSizes(size,left,right); - int nextj=(j+1)%k; - - if(axis_distance>0){ // visit right definitely, and left if within distance - if(right) findNPoints(query,n+left+1,right,nextj); - if(axis_distance*axis_distance -void KdTree::findPoints(std::vector& result, const BBox& bbox) const -{ - if (!size() || !_sorted) return; - if (!bbox.intersects(_bbox)) return; - findPoints(result, bbox, 0, size(), 0); -} - -template -void KdTree::findPoints(std::vector& result, const BBox& bbox, - int n, int size, int j) const -{ - // check point at n for inclusion - const float* p = &_points[n].p[0]; - if (bbox.inside(p)) - result.push_back(n); - - if (size == 1) return; - - // visit left subtree - int left, right; ComputeSubtreeSizes(size, left, right); - int nextj = (k > 1)? (j+1)%k : j; - if (p[j] >= bbox.min[j]) - findPoints(result, bbox, n+1, left, nextj); - - // visit right subtree - if (right && p[j] <= bbox.max[j]) - findPoints(result, bbox, n+left+1, right, nextj); -} - -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/src/core/Mutex.h b/tensorflow_graphics/physics/external/partio/src/core/Mutex.h deleted file mode 100644 index c32f31e1b..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/Mutex.h +++ /dev/null @@ -1,136 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -#ifndef _Mutex_ -#define _Mutex_ - -#ifndef PARTIO_WIN32 - -#include - -namespace Partio -{ - -#ifndef PARTIO_USE_SPINLOCK - - class PartioMutex - { - pthread_mutex_t CacheLock; - - public: - inline PartioMutex() - { - pthread_mutex_init(&CacheLock,0); - } - - inline ~PartioMutex() - { - pthread_mutex_destroy(&CacheLock); - } - - inline void lock() - { - pthread_mutex_lock(&CacheLock); - } - - inline void unlock() - { - pthread_mutex_unlock(&CacheLock); - } - }; - -#else - - class PartioMutex - { - pthread_spinlock_t CacheLock; - - public: - inline PartioMutex() - { - pthread_spinlock_init(&CacheLock,PTHREAD_PROCESS_PRIVATE); - } - - inline ~PartioMutex() - { - pthread_spinlock_destroy(&CacheLock); - } - - inline void lock() - { - pthread_spinlock_lock(&CacheLock); - } - - inline void unlock() - { - pthread_spinlock_unlock(&CacheLock); - } - }; - -#endif // USE_PTHREAD_SPINLOCK -} - -#else -#include - namespace Partio{ - - class PartioMutex - { - HANDLE CacheLock; - - public: - inline PartioMutex() - { - CacheLock=CreateMutex(0,FALSE,"partiocache"); - } - - inline ~PartioMutex() - { - CloseHandle(CacheLock); - } - - inline void lock() - { - WaitForSingleObject(CacheLock,INFINITE); - } - - inline void unlock() - { - ReleaseMutex(CacheLock); - } - }; - } -#endif // USE_PTHREADS -#endif // Header guard diff --git a/tensorflow_graphics/physics/external/partio/src/core/Particle.cpp b/tensorflow_graphics/physics/external/partio/src/core/Particle.cpp deleted file mode 100644 index 760733605..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/Particle.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#ifdef PARTIO_WIN32 -# define NOMINMAX -#endif -#include "ParticleSimple.h" -#include "ParticleSimpleInterleave.h" -#include -#include -#include -namespace Partio{ - -std::string -TypeName(ParticleAttributeType attrType) -{ - switch(attrType){ - case NONE: return "NONE"; - case VECTOR: return "VECTOR"; - case FLOAT: return "FLOAT"; - case INT: return "INT"; - case INDEXEDSTR: return "INDEXEDSTR"; - default: return 0; - } -} - -ParticlesDataMutable* -create() -{ - return new ParticlesSimple; -} - -ParticlesDataMutable* -createInterleave() -{ - return new ParticlesSimpleInterleave; -} - - - - -template void -printAttr(const ParticlesData* p,const ParticleAttribute& attr,const int particleIndex) -{ - typedef typename ETYPE_TO_TYPE::TYPE TYPE; - const TYPE* data=p->data(attr,particleIndex); - for(int k=0;knumParticles()<numAttributes()< attrs; - for(int i=0;inumAttributes();i++){ - ParticleAttribute attr; - particles->attributeInfo(i,attr); - attrs.push_back(attr); - std::cout<<"attribute "<numParticles()); - std::cout<<"num to print "<begin(),end=particles->end(); - std::vector accessors; - for(size_t k=0;k(it)[c]; - break; - case INT: - for(int c=0;c(it)[c]; - break; - case INDEXEDSTR: - for(int c=0;c(it)[c]; - break; - } - } - std::cout< -#include -#include "Mutex.h" -#include "../Partio.h" - -//##################################################################### -namespace Partio{ - -namespace -{ - static PartioMutex mutex; -} - -// cached read write -std::map cachedParticlesCount; -std::map cachedParticles; - -ParticlesData* readCached(const char* filename,const bool sort) -{ - mutex.lock(); - std::map::iterator i=cachedParticles.find(filename); - - ParticlesData* p=0; - if(i!=cachedParticles.end()){ - p=i->second; - cachedParticlesCount[p]++; - }else{ - ParticlesDataMutable* p_rw=read(filename); - if(p_rw){ - if(sort) p_rw->sort(); - p=p_rw; - cachedParticles[filename]=p; - cachedParticlesCount[p]=1; - } - } - mutex.unlock(); - return p; -} - -void freeCached(ParticlesData* particles) -{ - if(!particles) return; - - mutex.lock(); - - std::map::iterator i=cachedParticlesCount.find(particles); - if(i==cachedParticlesCount.end()){ // Not found in cache, just free - delete (ParticlesInfo*)particles; - }else{ // found in cache - i->second--; // decrement ref count - if(i->second==0){ // ref count is now zero, remove from structure - delete (ParticlesInfo*)particles; - cachedParticlesCount.erase(i); - for(std::map::iterator i2=cachedParticles.begin(); - i2!=cachedParticles.end();++i2){ - if(i2->second==particles){ - cachedParticles.erase(i2); - goto exit_and_release; - } - } - assert(false); - } - } - exit_and_release: - mutex.unlock(); -} - -void beginCachedAccess(ParticlesData* particles) -{ - // TODO: for future use -} - -void endCachedAccess(ParticlesData* particles) -{ - // TODO: for future use -} - -} // namespace Partio diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.h b/tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.h deleted file mode 100644 index 139ffacee..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/ParticleCaching.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -#ifndef _ParticleCaching_h_ -#define _ParticleCaching_h_ - -namespace Partio{ -class Particles; -void freeCached(ParticlesInfo* particles); -} - -#endif diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.cpp b/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.cpp deleted file mode 100644 index 4d4f3f105..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#include "ParticleHeaders.h" -#include -#include -#include -#include - -using namespace Partio; - -ParticleHeaders:: -ParticleHeaders() - :particleCount(0) -{ -} - -ParticleHeaders:: -~ParticleHeaders() -{} - -void ParticleHeaders:: -release() const -{ - delete this; -} - -int ParticleHeaders:: -numParticles() const -{ - return particleCount; -} - -int ParticleHeaders:: -numAttributes() const -{ - return attributes.size(); -} - -bool ParticleHeaders:: -attributeInfo(const int attributeIndex,ParticleAttribute& attribute) const -{ - if(attributeIndex<0 || attributeIndex>=(int)attributes.size()) return false; - attribute=attributes[attributeIndex]; - return true; -} - -bool ParticleHeaders:: -attributeInfo(const char* attributeName,ParticleAttribute& attribute) const -{ - std::map::const_iterator it=nameToAttribute.find(attributeName); - if(it!=nameToAttribute.end()){ - attribute=attributes[it->second]; - return true; - } - return false; -} - -void ParticleHeaders:: -sort() -{ - assert(false); -} - - -int ParticleHeaders:: -registerIndexedStr(const ParticleAttribute& attribute,const char* str) -{ - assert(false); - return -1; -} - -int ParticleHeaders:: -lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const -{ - assert(false); - return -1; -} - -const std::vector& ParticleHeaders:: -indexedStrs(const ParticleAttribute& attr) const -{ - static std::vector dummy; - assert(false); - return dummy; -} - -void ParticleHeaders:: -findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const -{ - assert(false); -} - -float ParticleHeaders:: -findNPoints(const float center[3],const int nPoints,const float maxRadius,std::vector& points, - std::vector& pointDistancesSquared) const -{ - assert(false); - return 0; -} - -int ParticleHeaders:: -findNPoints(const float center[3],int nPoints,const float maxRadius, ParticleIndex *points, - float *pointDistancesSquared, float *finalRadius2) const -{ - assert(false); - return 0; -} - -ParticleAttribute ParticleHeaders:: -addAttribute(const char* attribute,ParticleAttributeType type,const int count) -{ - // TODO: check if attribute already exists and if so what data type - ParticleAttribute attr; - attr.name=attribute; - attr.type=type; - attr.attributeIndex=attributes.size(); // all arrays separate so we don't use this here! - attr.count=count; - attributes.push_back(attr); - nameToAttribute[attribute]=attributes.size()-1; - return attr; -} - -ParticleIndex ParticleHeaders:: -addParticle() -{ - ParticleIndex index=particleCount; - particleCount++; - return index; -} - -ParticlesDataMutable::iterator ParticleHeaders:: -addParticles(const int countToAdd) -{ - particleCount+=countToAdd; - return iterator(); -} - -void* ParticleHeaders:: -dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const -{ - assert(false); - return 0; -} - -void ParticleHeaders:: -dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,char* values) const -{ - assert(false); -} - -void ParticleHeaders:: -dataAsFloat(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,float* values) const -{ - assert(false); -} - diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.h b/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.h deleted file mode 100644 index 0f0abe130..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/ParticleHeaders.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#ifndef _ParticlesHeaders_h_ -#define _ParticlesHeaders_h_ - -#include "../Partio.h" -namespace Partio{ - -class ParticleHeaders:public ParticlesDataMutable -{ -public: - ParticleHeaders(); - void release() const; -protected: - virtual ~ParticleHeaders(); - - int numAttributes() const; - int numParticles() const; - bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const; - bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const; - - int registerIndexedStr(const ParticleAttribute& attribute,const char* str); - int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const; - const std::vector& indexedStrs(const ParticleAttribute& attr) const; - - virtual void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,float* values) const; - - void sort(); - - void findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const; - float findNPoints(const float center[3],int nPoints,const float maxRadius, - std::vector& points,std::vector& pointDistancesSquared) const; - int findNPoints(const float center[3],int nPoints,const float maxRadius, - ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const; - - ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type,const int count); - ParticleIndex addParticle(); - iterator addParticles(const int count); - - const_iterator setupConstIterator() const - {return const_iterator();} - - iterator setupIterator() - {return iterator();} - -private: - void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const; - void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,char* values) const; - -private: - int particleCount; - std::vector attributes; - std::map nameToAttribute; - -}; -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.cpp b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.cpp deleted file mode 100644 index 9c678ab17..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.cpp +++ /dev/null @@ -1,344 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -#ifdef PARTIO_WIN32 -# define NOMINMAX -#endif - -#include "ParticleSimple.h" -#include "ParticleCaching.h" -#include -#include -#include -#include - -#include "KdTree.h" - - -using namespace Partio; - -ParticlesSimple:: -ParticlesSimple() - :particleCount(0),allocatedCount(0),kdtree(0) -{ -} - -ParticlesSimple:: -~ParticlesSimple() -{ - for(unsigned int i=0;i(this)); -} - -int ParticlesSimple:: -numParticles() const -{ - return particleCount; -} - -int ParticlesSimple:: -numAttributes() const -{ - return attributes.size(); -} - -bool ParticlesSimple:: -attributeInfo(const int attributeIndex,ParticleAttribute& attribute) const -{ - if(attributeIndex<0 || attributeIndex>=(int)attributes.size()) return false; - attribute=attributes[attributeIndex]; - return true; -} - -bool ParticlesSimple:: -attributeInfo(const char* attributeName,ParticleAttribute& attribute) const -{ - std::map::const_iterator it=nameToAttribute.find(attributeName); - if(it!=nameToAttribute.end()){ - attribute=attributes[it->second]; - return true; - } - return false; -} - - -void ParticlesSimple:: -sort() -{ - ParticleAttribute attr; - bool foundPosition=attributeInfo("position",attr); - if(!foundPosition){ - std::cerr<<"Partio: sort, Failed to find position in particle"<data(attr,baseParticleIndex); // contiguous assumption used here - KdTree<3>* kdtree_temp=new KdTree<3>(); - kdtree_temp->setPoints(data,numParticles()); - kdtree_temp->sort(); - - kdtree_mutex.lock(); - // TODO: this is not threadsafe! - if(kdtree) delete kdtree; - kdtree=kdtree_temp; - kdtree_mutex.unlock(); -} - -void ParticlesSimple:: -findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const -{ - if(!kdtree){ - std::cerr<<"Partio: findPoints without first calling sort()"< box(bboxMin);box.grow(bboxMax); - - int startIndex=points.size(); - kdtree->findPoints(points,box); - // remap points found in findPoints to original index space - for(unsigned int i=startIndex;iid(points[i]); - } -} - -float ParticlesSimple:: -findNPoints(const float center[3],const int nPoints,const float maxRadius,std::vector& points, - std::vector& pointDistancesSquared) const -{ - if(!kdtree){ - std::cerr<<"Partio: findNPoints without first calling sort()"<& rawPoints=points; - float maxDistance=kdtree->findNPoints(points,pointDistancesSquared,center,nPoints,maxRadius); - // remap all points since findNPoints clears array - for(unsigned int i=0;iid(points[i]); - points[i]=index; - } - return maxDistance; -} - -int ParticlesSimple:: -findNPoints(const float center[3],int nPoints,const float maxRadius, ParticleIndex *points, - float *pointDistancesSquared, float *finalRadius2) const -{ - if(!kdtree){ - std::cerr<<"Partio: findNPoints without first calling sort()"<findNPoints (points, pointDistancesSquared, finalRadius2, center, nPoints, maxRadius); - // remap all points since findNPoints clears array - for(int i=0; i < count; i++){ - ParticleIndex index = kdtree->id(points[i]); - points[i]=index; - } - return count; -} - -ParticleAttribute ParticlesSimple:: -addAttribute(const char* attribute,ParticleAttributeType type,const int count) -{ - if(nameToAttribute.find(attribute) != nameToAttribute.end()){ - std::cerr<<"Partio: addAttribute failed because attr '"<allocatedCount){ - // TODO: this should follow 2/3 rule - allocatedCount=allocatedCount+countToAdd; - for(unsigned int i=0;i& iterator) -{ - iterator=end(); -} - -void ParticlesSimple:: -setupIteratorNextBlock(Partio::ParticleIterator& iterator) const -{ - iterator=ParticlesData::end(); -} - - -void ParticlesSimple:: -setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) -{ - accessor.stride=accessor.count*sizeof(float); - accessor.basePointer=attributeData[accessor.attributeIndex]; -} - -void ParticlesSimple:: -setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) const -{ - accessor.stride=accessor.count*sizeof(float); - accessor.basePointer=attributeData[accessor.attributeIndex]; -} - -void* ParticlesSimple:: -dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const -{ - assert(attribute.attributeIndex>=0 && attribute.attributeIndex<(int)attributes.size()); - return attributeData[attribute.attributeIndex]+attributeStrides[attribute.attributeIndex]*particleIndex; -} - -void ParticlesSimple:: -dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,char* values) const -{ - assert(attribute.attributeIndex>=0 && attribute.attributeIndex<(int)attributes.size()); - - char* base=attributeData[attribute.attributeIndex]; - int bytes=attributeStrides[attribute.attributeIndex]; - for(int i=0;i=0 && attribute.attributeIndex<(int)attributes.size()); - - if(attribute.type==FLOAT || attribute.type==VECTOR) dataInternalMultiple(attribute,indexCount,particleIndices,sorted,(char*)values); - else if(attribute.type==INT || attribute.type==INDEXEDSTR){ - char* attrrawbase=attributeData[attribute.attributeIndex]; - int* attrbase=(int*)attrrawbase; - int count=attribute.count; - for(int i=0;i::const_iterator it=table.stringToIndex.find(str); - if(it!=table.stringToIndex.end()) return it->second; - int newIndex=table.strings.size(); - table.strings.push_back(str); - table.stringToIndex[str]=newIndex; - return newIndex; -} - -int ParticlesSimple:: -lookupIndexedStr(Partio::ParticleAttribute const &attribute, char const *str) const -{ - const IndexedStrTable& table=attributeIndexedStrs[attribute.attributeIndex]; - std::map::const_iterator it=table.stringToIndex.find(str); - if(it!=table.stringToIndex.end()) return it->second; - return -1; -} - -const std::vector& ParticlesSimple:: -indexedStrs(const ParticleAttribute& attr) const -{ - const IndexedStrTable& table=attributeIndexedStrs[attr.attributeIndex]; - return table.strings; -} - diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.h b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.h deleted file mode 100644 index 94a0f526e..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimple.h +++ /dev/null @@ -1,109 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#include -#include -#include -#include -#include "Mutex.h" -#include "../Partio.h" - -namespace Partio{ - -template class KdTree; - -class ParticlesSimple:public ParticlesDataMutable, - public Provider -{ -protected: - virtual ~ParticlesSimple(); -public: - using ParticlesDataMutable::iterator; - using ParticlesData::const_iterator; - - void release() const; - - ParticlesSimple(); - - int numAttributes() const; - int numParticles() const; - bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const; - bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const; - void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,float* values) const; - int registerIndexedStr(const ParticleAttribute& attribute,const char* str); - int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const; - const std::vector& indexedStrs(const ParticleAttribute& attr) const; - void sort(); - void findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const; - float findNPoints(const float center[3],int nPoints,const float maxRadius, - std::vector& points,std::vector& pointDistancesSquared) const; - int findNPoints(const float center[3],int nPoints,const float maxRadius, - ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const; - - ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type,const int count); - ParticleIndex addParticle(); - iterator addParticles(const int count); - - - iterator setupIterator(); - const_iterator setupConstIterator() const; - void setupIteratorNextBlock(Partio::ParticleIterator& iterator); - void setupIteratorNextBlock(Partio::ParticleIterator& iterator) const; - void setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor); - void setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) const; -private: - void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const; - void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,char* values) const; - -private: - int particleCount; - int allocatedCount; - std::vector attributeData; // Inside is data of appropriate type - std::vector attributeOffsets; // Inside is data of appropriate type - struct IndexedStrTable{ - std::map stringToIndex; // TODO: this should be a hash table unordered_map - std::vector strings; - }; - std::vector attributeIndexedStrs; - std::vector attributes; - std::vector attributeStrides; - std::map nameToAttribute; - - PartioMutex kdtree_mutex; - KdTree<3>* kdtree; -}; - -} diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.cpp b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.cpp deleted file mode 100644 index 605d344f2..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.cpp +++ /dev/null @@ -1,344 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#ifdef PARTIO_WIN32 -# define NOMINMAX -#endif - -#include "ParticleSimpleInterleave.h" -#include "ParticleCaching.h" -#include -#include -#include -#include - -#include "KdTree.h" - - -using namespace Partio; - -ParticlesSimpleInterleave:: -ParticlesSimpleInterleave() - :particleCount(0),allocatedCount(0),data(0),stride(0),kdtree(0) -{ -} - -ParticlesSimpleInterleave:: -~ParticlesSimpleInterleave() -{ - free(data); - delete kdtree; -} - -void ParticlesSimpleInterleave:: -release() const -{ - freeCached(const_cast(this)); -} - - -int ParticlesSimpleInterleave:: -numParticles() const -{ - return particleCount; -} - -int ParticlesSimpleInterleave:: -numAttributes() const -{ - return attributes.size(); -} - - -bool ParticlesSimpleInterleave:: -attributeInfo(const int attributeIndex,ParticleAttribute& attribute) const -{ - if(attributeIndex<0 || attributeIndex>=(int)attributes.size()) return false; - attribute=attributes[attributeIndex]; - return true; -} - -bool ParticlesSimpleInterleave:: -attributeInfo(const char* attributeName,ParticleAttribute& attribute) const -{ - std::map::const_iterator it=nameToAttribute.find(attributeName); - if(it!=nameToAttribute.end()){ - attribute=attributes[it->second]; - return true; - } - return false; -} - -void ParticlesSimpleInterleave:: -sort() -{ -#if 0 - ParticleAttribute attr; - bool foundPosition=attributeInfo("position",attr); - if(!foundPosition){ - std::cerr<<"Partio: sort, Failed to find position in particle"<data(attr,0); // contiguous assumption used here - KdTree<3>* kdtree_temp=new KdTree<3>(); - kdtree_temp->setPoints(data,numParticles()); - kdtree_temp->sort(); - - kdtree_mutex.lock(); - // TODO: this is not threadsafe! - if(kdtree) delete kdtree; - kdtree=kdtree_temp; - kdtree_mutex.unlock(); -#endif -} - -void ParticlesSimpleInterleave:: -findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const -{ -#if 0 - if(!kdtree){ - std::cerr<<"Partio: findPoints without first calling sort()"< box(bboxMin);box.grow(bboxMax); - - int startIndex=points.size(); - kdtree->findPoints(points,box); - // remap points found in findPoints to original index spac - for(unsigned int i=startIndex;iid(points[i]); -#endif -} - -float ParticlesSimpleInterleave:: -findNPoints(const float center[3],const int nPoints,const float maxRadius,std::vector& points, - std::vector& pointDistancesSquared) const -{ -#if 0 - if(!kdtree){ - std::cerr<<"Partio: findNPoints without first calling sort()"<findNPoints(points,pointDistancesSquared,center,nPoints,maxRadius); - // remap all points since findNPoints clears array - for(unsigned int i=0;iid(points[i]); - return maxDistance; -#endif - return 0; -} - -int ParticlesSimpleInterleave:: -findNPoints(const float center[3],int nPoints,const float maxRadius, ParticleIndex *points, - float *pointDistancesSquared, float *finalRadius2) const -{ - // TODO: I guess they don't support this lookup here - return 0; -} - - -ParticleAttribute ParticlesSimpleInterleave:: -addAttribute(const char* attribute,ParticleAttributeType type,const int count) -{ - //std::cerr<< "AddAttribute interleave" << std::endl; - if(nameToAttribute.find(attribute) != nameToAttribute.end()){ - std::cerr<<"Partio: addAttribute failed because attr '"<allocatedCount){ - while(allocatedCount& iterator) -{ - iterator=end(); -} - -void ParticlesSimpleInterleave:: -setupIteratorNextBlock(Partio::ParticleIterator& iterator) const -{ - iterator=ParticlesData::end(); -} - -void ParticlesSimpleInterleave:: -setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) -{ - accessor.stride=stride; - accessor.basePointer=data+attributeOffsets[accessor.attributeIndex]; -} - -void ParticlesSimpleInterleave:: -setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) const -{ - accessor.stride=stride; - accessor.basePointer=data+attributeOffsets[accessor.attributeIndex]; -} - - -void* ParticlesSimpleInterleave:: -dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const -{ - return data+particleIndex*stride+attributeOffsets[attribute.attributeIndex]; -} - -void ParticlesSimpleInterleave:: -dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,char* values) const -{ -#if 0 - assert(attribute.attributeIndex>=0 && attribute.attributeIndex<(int)attributes.size()); - - char* base=attributeData[attribute.attributeIndex]; - int bytes=attributeStrides[attribute.attributeIndex]; - for(int i=0;i=0 && attribute.attributeIndex<(int)attributes.size()); - - if(attribute.type==FLOAT || attribute.type==VECTOR) dataInternalMultiple(attribute,indexCount,particleIndices,sorted,(char*)values); - else if(attribute.type==INT){ - char* attrrawbase=attributeData[attribute.attributeIndex]; - int* attrbase=(int*)attrrawbase; - int count=attribute.count; - for(int i=0;i::const_iterator it=table.stringToIndex.find(str); - if(it!=table.stringToIndex.end()) return it->second; - int newIndex=table.strings.size(); - table.strings.push_back(str); - table.stringToIndex[str]=newIndex; - return newIndex; -} - -int ParticlesSimpleInterleave:: -lookupIndexedStr(Partio::ParticleAttribute const &attribute, char const *str) const -{ - const IndexedStrTable& table=attributeIndexedStrs[attribute.attributeIndex]; - std::map::const_iterator it=table.stringToIndex.find(str); - if(it!=table.stringToIndex.end()) return it->second; - return -1; -} - -const std::vector& ParticlesSimpleInterleave:: -indexedStrs(const ParticleAttribute& attr) const -{ - const IndexedStrTable& table=attributeIndexedStrs[attr.attributeIndex]; - return table.strings; -} - diff --git a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.h b/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.h deleted file mode 100644 index f05329f16..000000000 --- a/tensorflow_graphics/physics/external/partio/src/core/ParticleSimpleInterleave.h +++ /dev/null @@ -1,114 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#ifndef _ParticleSimpleInterleave_h_ -#define _ParticleSimpleInterleave_h_ - -#include -#include -#include -#include "Mutex.h" -#include "../Partio.h" - -namespace Partio{ - -template class KdTree; - -class ParticlesSimpleInterleave:public ParticlesDataMutable, - public Provider -{ -protected: - virtual ~ParticlesSimpleInterleave(); -public: - using ParticlesDataMutable::iterator; - using ParticlesData::const_iterator; - - void release() const; - - ParticlesSimpleInterleave(); - - int numAttributes() const; - int numParticles() const; - bool attributeInfo(const char* attributeName,ParticleAttribute& attribute) const; - bool attributeInfo(const int attributeInfo,ParticleAttribute& attribute) const; - - virtual void dataAsFloat(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,float* values) const; - int registerIndexedStr(const ParticleAttribute& attribute,const char* str); - int lookupIndexedStr(const ParticleAttribute& attribute,const char* str) const; - const std::vector& indexedStrs(const ParticleAttribute& attr) const; - - void sort(); - void findPoints(const float bboxMin[3],const float bboxMax[3],std::vector& points) const; - float findNPoints(const float center[3],int nPoints,const float maxRadius, - std::vector& points,std::vector& pointDistancesSquared) const; - int findNPoints(const float center[3],int nPoints,const float maxRadius, - ParticleIndex *points, float *pointDistancesSquared, float *finalRadius2) const; - - ParticleAttribute addAttribute(const char* attribute,ParticleAttributeType type,const int count); - ParticleIndex addParticle(); - iterator addParticles(const int count); - - - iterator setupIterator(); - const_iterator setupConstIterator() const; - void setupIteratorNextBlock(Partio::ParticleIterator& iterator); - void setupIteratorNextBlock(Partio::ParticleIterator& iterator) const; - void setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor); - void setupAccessor(Partio::ParticleIterator& iterator,ParticleAccessor& accessor) const; -private: - void* dataInternal(const ParticleAttribute& attribute,const ParticleIndex particleIndex) const; - void dataInternalMultiple(const ParticleAttribute& attribute,const int indexCount, - const ParticleIndex* particleIndices,const bool sorted,char* values) const; - -private: - int particleCount; - int allocatedCount; - char* data; - int stride; - struct IndexedStrTable{ - std::map stringToIndex; // TODO: this should be a hash table unordered_map - std::vector strings; - }; - std::vector attributeIndexedStrs; - std::vector attributeOffsets; // Inside is data of appropriate type - std::vector attributes; - std::map nameToAttribute; - - PartioMutex kdtree_mutex; - KdTree<3>* kdtree; -}; - -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/src/io/BGEO.cpp b/tensorflow_graphics/physics/external/partio/src/io/BGEO.cpp deleted file mode 100644 index d9255f399..000000000 --- a/tensorflow_graphics/physics/external/partio/src/io/BGEO.cpp +++ /dev/null @@ -1,197 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -#include "../Partio.h" -#include "PartioEndian.h" -#include "../core/ParticleHeaders.h" -#include "ZIP.h" - -#include -#include -#include -#include - -namespace Partio { - -using namespace std; - -void writeHoudiniStr(ostream &ostream, const string &s) { - write(ostream, (short)s.size()); - ostream.write(s.c_str(), s.size()); -} - -ParticlesDataMutable *readBGEO(const char *filename, const bool headersOnly) { -} - -bool writeBGEO(const char *filename, - const ParticlesData &p, - const bool compressed) { - auto_ptr output( - compressed ? Gzip_Out(filename, ios::out | ios::binary) - : new ofstream(filename, ios::out | ios::binary)); - - if (!*output) { - cerr << "Partio Unable to open file " << filename << endl; - return false; - } - - int magic = ((((('B' << 8) | 'g') << 8) | 'e') << 8) | 'o'; - char versionChar = 'V'; - int version = 5; - int nPoints = p.numParticles(); - int nPrims = 1; - int nPointGroups = 0; - int nPrimGroups = 0; - int nPointAttrib = p.numAttributes() - 1; - int nVertexAttrib = 0; - int nPrimAttrib = 1; - int nAttrib = 0; - - write(*output, magic, versionChar, version, nPoints, nPrims, - nPointGroups); - write(*output, nPrimGroups, nPointAttrib, nVertexAttrib, nPrimAttrib, - nAttrib); - - vector handles; - vector accessors; - vector attrOffsets; - bool foundPosition = false; - int particleSize = 4; - for (int i = 0; i < p.numAttributes(); i++) { - ParticleAttribute attr; - p.attributeInfo(i, attr); - if (attr.name == "position") { - attrOffsets.push_back(0); - foundPosition = true; - } else { - writeHoudiniStr(*output, attr.name); - if (attr.type == INDEXEDSTR) { - int houdiniType = 4; - unsigned short size = attr.count; - const std::vector &indexTable = p.indexedStrs(attr); - int numIndexes = indexTable.size(); - write(*output, size, houdiniType, numIndexes); - for (int i = 0; i < numIndexes; i++) - writeHoudiniStr(*output, indexTable[i]); - } else { - int houdiniType = 0; - switch (attr.type) { - case FLOAT: - houdiniType = 0; - break; - case INT: - houdiniType = 1; - break; - case VECTOR: - houdiniType = 5; - break; - case INDEXEDSTR: - case NONE: - assert(false); - houdiniType = 0; - break; - } - unsigned short size = attr.count; - write(*output, size, houdiniType); - for (int i = 0; i < attr.count; i++) { - int defaultValue = 0; - write(*output, defaultValue); - } - } - attrOffsets.push_back(particleSize); - particleSize += attr.count; - } - handles.push_back(attr); - accessors.push_back(ParticleAccessor(handles.back())); - } - if (!foundPosition) { - cerr << "Partio: didn't find attr 'position' while trying to write GEO" - << endl; - return false; - } - - ParticlesData::const_iterator iterator = p.begin(); - for (size_t i = 0; i < accessors.size(); i++) - iterator.addAccessor(accessors[i]); - - int *buffer = new int[particleSize]; - for (ParticlesData::const_iterator end = p.end(); iterator != end; - ++iterator) { - for (unsigned int attrIndex = 0; attrIndex < handles.size(); attrIndex++) { - ParticleAttribute &handle = handles[attrIndex]; - ParticleAccessor &accessor = accessors[attrIndex]; - // TODO: this violates strict aliasing, we could just go to char* and make - // a different endian swapper - const int *data = accessor.raw(iterator); - for (int k = 0; k < handle.count; k++) { - buffer[attrOffsets[attrIndex] + k] = data[k]; - BIGEND::swap(buffer[attrOffsets[attrIndex] + k]); - } - } - // set homogeneous coordinate - float *w = (float *)&buffer[3]; - *w = 1.; - BIGEND::swap(*w); - output->write((char *)buffer, particleSize * sizeof(int)); - } - delete[] buffer; - - // Write primitive attribs - writeHoudiniStr(*output, "generator"); - write(*output, (short)0x1); // count 1 - write(*output, (int)0x4); // type 4 index - write(*output, (int)0x1); // type 4 index - writeHoudiniStr(*output, "papi"); - - // Write the primitive - write(*output, (int)0x8000); - write(*output, (int)nPoints); - if (nPoints > (int)1 << 16) - for (int i = 0; i < nPoints; i++) - write(*output, (int)i); - else - for (int i = 0; i < nPoints; i++) - write(*output, (unsigned short)i); - write(*output, (int)0); - - // Write extra - write(*output, (char)0x00); - write(*output, (char)0xff); - - // success - return true; -} - -} // namespace Partio diff --git a/tensorflow_graphics/physics/external/partio/src/io/ParticleIO.cpp b/tensorflow_graphics/physics/external/partio/src/io/ParticleIO.cpp deleted file mode 100644 index 9adb7e9cc..000000000 --- a/tensorflow_graphics/physics/external/partio/src/io/ParticleIO.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -#include -#include "../Partio.h" -#include "readers.h" - -namespace Partio{ -using namespace std; - -// reader and writer code -typedef ParticlesDataMutable* (*READER_FUNCTION)(const char*,const bool); -typedef bool (*WRITER_FUNCTION)(const char*,const ParticlesData&,const bool); - -map& -readers() -{ - static map data; - static bool initialized=false; - if(!initialized){ - data["bgeo"]=readBGEO; - } - return data; -} - -map& -writers() -{ - static map data; - static bool initialized=false; - if(!initialized){ - data["bgeo"]=writeBGEO; - } - return data; -} - -//! Gives extension of a file ignoring any trailing .gz -//! i.e. for 'foo.pdb.gz' it gives 'pdb', for 'foo.pdb' it gives 'pdb' -bool extensionIgnoringGz(const string& filename,string& ret,bool &endsWithGz) -{ - size_t period=filename.rfind('.'); - endsWithGz=false; - if(period==string::npos){ - cerr<<"Partio: No extension detected in filename"<::iterator i=readers().find(extension); - if(i==readers().end()){ - cerr<<"Partio: No reader defined for extension "<second)(c_filename,false); -} - -ParticlesInfo* -readHeaders(const char* c_filename) -{ - string filename(c_filename); - string extension; - bool endsWithGz; - if(!extensionIgnoringGz(filename,extension,endsWithGz)) return 0; - map::iterator i=readers().find(extension); - if(i==readers().end()){ - cerr<<"Partio: No reader defined for extension "<second)(c_filename,true); -} - -void -write(const char* c_filename,const ParticlesData& particles,const bool forceCompressed) -{ - string filename(c_filename); - string extension; - bool endsWithGz; - if(!extensionIgnoringGz(filename,extension,endsWithGz)) return; - map::iterator i=writers().find(extension); - if(i==writers().end()){ - cerr<<"Partio: No writer defined for extension "<second)(c_filename,particles,forceCompressed || endsWithGz); -} - -} // namespace Partio diff --git a/tensorflow_graphics/physics/external/partio/src/io/PartioEndian.h b/tensorflow_graphics/physics/external/partio/src/io/PartioEndian.h deleted file mode 100644 index b8758735d..000000000 --- a/tensorflow_graphics/physics/external/partio/src/io/PartioEndian.h +++ /dev/null @@ -1,129 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -#ifndef _partioendian_h_ -#define _partioendian_h_ - -#include -#include - -namespace Partio{ - -#ifdef PartioBIG_ENDIAN -static const bool big_endian=true; -#else -static const bool big_endian=false; -#endif - -template -void endianSwap(T& value) -{ - T temp=value; - char* src=(char*)&temp; - char* dest=(char*)&value; - for(unsigned int i=0;i static void swap(T& x){ - if(!big_endian) endianSwap(x); - } -}; - -struct LITEND { - template static void swap(T& x){ - if(big_endian) endianSwap(x); - } -}; - -template inline void -read(std::istream& input,T& d) -{ - input.read((char*)&d,sizeof(T)); - E::swap(d); -} - -template inline void -write(std::ostream& output,const T& d) -{ - T copy=d; - E::swap(copy); - output.write((char*)©,sizeof(T)); -} - -template -void read(std::istream& input,T1& d1,T2& d2) -{read(input,d1);read(input,d2);} - -template -void read(std::istream& input,T1& d1,T2& d2,T3& d3) -{read(input,d1);read(input,d2,d3);} - -template -void read(std::istream& input,T1& d1,T2& d2,T3& d3,T4& d4) -{read(input,d1);read(input,d2,d3,d4);} - -template -void read(std::istream& input,T1& d1,T2& d2,T3& d3,T4& d4,T5& d5) -{read(input,d1);read(input,d2,d3,d4,d5);} - -template -void read(std::istream& input,T1& d1,T2& d2,T3& d3,T4& d4,T5& d5,T6& d6) -{read(input,d1);read(input,d2,d3,d4,d5,d6);} - -template -void write(std::ostream& output,const T1& d1,const T2& d2) -{write(output,d1);write(output,d2);} - -template -void write(std::ostream& output,const T1& d1,const T2& d2,const T3& d3) -{write(output,d1);write(output,d2,d3);} - -template -void write(std::ostream& output,const T1& d1,const T2& d2,const T3& d3,const T4& d4) -{write(output,d1);write(output,d2,d3,d4);} - -template -void write(std::ostream& output,const T1& d1,const T2& d2,const T3& d3,const T4& d4,const T5& d5) -{write(output,d1);write(output,d2,d3,d4,d5);} - -template -void write(std::ostream& output,const T1& d1,const T2& d2,const T3& d3,const T4& d4,const T5& d5,const T6& d6) -{write(output,d1);write(output,d2,d3,d4,d5,d6);} - -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/src/io/ZIP.cpp b/tensorflow_graphics/physics/external/partio/src/io/ZIP.cpp deleted file mode 100644 index d06be09ff..000000000 --- a/tensorflow_graphics/physics/external/partio/src/io/ZIP.cpp +++ /dev/null @@ -1,619 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ - -#ifdef PARTIO_USE_ZLIB -extern "C"{ -# include -} -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "ZIP.h" - -namespace Partio{ - - - -template -inline void Swap_Endianity(T& x) -{ - assert(sizeof(T)<=8); - if(sizeof(T)>1) { - T old=x; - for(unsigned int k=1;k<=sizeof(T);k++) ((char*)&x)[k-1]=((char*)&old)[sizeof(T)-k]; - } -} - -template -inline void Read_Primitive(std::istream& stream,T& x) -{ - stream.read(&(char&)x,sizeof(T)); -} - -template -inline void Write_Primitive(std::ostream& stream,const T& x) -{ - stream.write(&(char&)x,sizeof(T)); -} - - -//##################################################################### -// class GZipFileHeader -//##################################################################### -struct GZipFileHeader -{ - unsigned char magic0,magic1; // magic should be 0x8b,0x1f - unsigned char cm; // compression method 0x8 is gzip - unsigned char flags; // flags - unsigned int modtime; // 4 byte modification time - unsigned char flags2; // secondary flags - unsigned char os; // operating system 0xff for unknown - unsigned short crc16; // crc check - unsigned int crc32; - - GZipFileHeader() - :magic0(0),magic1(0),flags(0),modtime(0),flags2(0),os(0),crc16(0),crc32(0) - {} - - bool Read(std::istream& istream) - {Read_Primitive(istream,magic0); - Read_Primitive(istream,magic1); - if(magic0 != 0x1f || magic1 != 0x8b){//std::cerr<<"gzip: did not find gzip magic 0x1f 0x8b"<4) put_back_count=4; - std::memmove(out+(4-put_back_count),gptr()-put_back_count,put_back_count); - int num=process(); - setg((char*)(out+4-put_back_count),(char*)(out+4),(char*)(out+4+num)); - if(num<=0) return EOF; - return traits_type::to_int_type(*gptr());} - - virtual int overflow(int c=EOF) - {assert(false);return EOF;} - -//##################################################################### -}; - -//##################################################################### -// class ZipStreambufCompress -//##################################################################### -class ZipStreambufCompress:public std::streambuf -{ - static const int buffer_size=512; - std::ostream& ostream; // owned when header==0 (when not part of zip file) - - z_stream strm; - unsigned char in[buffer_size],out[buffer_size]; - - ZipFileHeader* header; - GZipFileHeader gzip_header; - unsigned int header_offset; - unsigned int uncompressed_size; - unsigned int crc; - - bool valid; - -public: - ZipStreambufCompress(ZipFileHeader* header,std::ostream& stream) - :ostream(stream),header(header),valid(true) - { - strm.zalloc=Z_NULL;strm.zfree=Z_NULL;strm.opaque=Z_NULL; - int ret=deflateInit2(&strm,Z_DEFAULT_COMPRESSION,Z_DEFLATED,-MAX_WBITS,8,Z_DEFAULT_STRATEGY); - if(ret != Z_OK){std::cerr<<"libz: failed to deflateInit"<header_offset=stream.tellp();header->Write(ostream,false);} - else{header_offset=stream.tellp();gzip_header.Write(ostream);} - uncompressed_size=crc=0; - } - - virtual ~ZipStreambufCompress() - {if(valid){ - process(true); - deflateEnd(&strm); - if(header){ - std::ios::streampos final_position=ostream.tellp(); - header->uncompressed_size=uncompressed_size; - header->crc=crc; - ostream.seekp(header->header_offset); - header->Write(ostream,false); - ostream.seekp(final_position);} - else{Write_Primitive(ostream,crc);Write_Primitive(ostream,uncompressed_size);}} - if(!header) delete &ostream;} - -protected: - int process(bool flush) - {if(!valid) return -1; - strm.next_in=(Bytef*)pbase(); - strm.avail_in=pptr()-pbase(); - while(strm.avail_in!=0 || flush){ - strm.avail_out=buffer_size; - strm.next_out=(Bytef*)out; - int ret=deflate(&strm,flush?Z_FINISH:Z_NO_FLUSH); - if(!(ret!=Z_BUF_ERROR && ret!=Z_STREAM_ERROR)){ - valid=false; - std::cerr<<"gzip: gzip error "<compressed_size+=generated_output; - if(ret==Z_STREAM_END) break;} - // update counts, crc's and buffers - int consumed_input=pptr()-pbase(); - uncompressed_size+=consumed_input; - crc=crc32(crc,(Bytef*)in,consumed_input); - setp(pbase(),pbase()+buffer_size-4);return 1;} - - virtual int sync() - {if(pptr() && pptr()>pbase()) return process(false);return 0;} - - virtual int underflow() - {std::runtime_error("Attempt to read write only ostream");return 0;} - - virtual int overflow(int c=EOF) - {if(c!=EOF){*pptr()=c;pbump(1);} - if(process(false)==EOF) return EOF; - return c;} - -//##################################################################### -}; -//##################################################################### -// Class ZIP_FILE_ISTREAM -//##################################################################### -// Class needed because istream cannot own its streambuf -class ZIP_FILE_ISTREAM:public std::istream -{ - ZipStreambufDecompress buf; -public: - ZIP_FILE_ISTREAM(std::istream& istream,bool part_of_zip_file) - :std::istream(&buf),buf(istream,part_of_zip_file) - {} - - virtual ~ZIP_FILE_ISTREAM() - {} - -//##################################################################### -}; -//##################################################################### -// Class ZIP_FILE_OSTREAM -//##################################################################### -// Class needed because ostream cannot own its streambuf -class ZIP_FILE_OSTREAM:public std::ostream -{ - ZipStreambufCompress buf; -public: - ZIP_FILE_OSTREAM(ZipFileHeader* header,std::ostream& ostream) - :std::ostream(&buf),buf(header,ostream) - {} - - virtual ~ZIP_FILE_OSTREAM() - {} - -//##################################################################### -}; -//##################################################################### -// Function ZipFileWriter -//##################################################################### -ZipFileWriter:: -ZipFileWriter(const std::string& filename) -{ - ostream.open(filename.c_str(),std::ios::out|std::ios::binary); - if(!ostream) throw std::runtime_error("ZIP: Invalid file handle"); -} -//##################################################################### -// Function ZipFileWriter -//##################################################################### -ZipFileWriter:: -~ZipFileWriter() -{ - // Write all file headers - std::ios::streampos final_position=ostream.tellp(); - for(unsigned int i=0;iWrite(ostream,true);delete files[i];} - std::ios::streampos central_end=ostream.tellp(); - // Write end of central - Write_Primitive(ostream,(unsigned int)0x06054b50); // end of central - Write_Primitive(ostream,(unsigned short)0); // this disk number - Write_Primitive(ostream,(unsigned short)0); // this disk number - Write_Primitive(ostream,(unsigned short)files.size()); // one entry in center in this disk - Write_Primitive(ostream,(unsigned short)files.size()); // one entry in center - Write_Primitive(ostream,(unsigned int)(central_end-final_position)); // size of header - Write_Primitive(ostream,(unsigned int)final_position); // offset to header - Write_Primitive(ostream,(unsigned short)0); // zip comment -} -//##################################################################### -// Function ZipFileWriter -//##################################################################### -std::ostream* ZipFileWriter:: -Add_File(const std::string& filename,const bool binary) -{ - files.push_back(new ZipFileHeader(filename)); - return new ZIP_FILE_OSTREAM(files.back(),ostream); -} -//##################################################################### -// Function ZipFileReader -//##################################################################### -ZipFileReader:: -ZipFileReader(const std::string& filename) -{ - istream.open(filename.c_str(),std::ios::in|std::ios::binary); - if(!istream) throw std::runtime_error("ZIP: Invalid file handle"); - Find_And_Read_Central_Header(); -} -//##################################################################### -// Function ZipFileReader -//##################################################################### -ZipFileReader:: -~ZipFileReader() -{ - std::map::iterator i=filename_to_header.begin(); - for(;i!=filename_to_header.end();++i) - delete i->second; -} -//##################################################################### -// Function Find_And_Read_Central_Header -//##################################################################### -bool ZipFileReader:: -Find_And_Read_Central_Header() -{ - // Find the header - // NOTE: this assumes the zip file header is the last thing written to file... - istream.seekg(0,std::ios_base::end); - std::ios::streampos end_position=istream.tellg(); - unsigned int max_comment_size=0xffff; // max size of header - unsigned int read_size_before_comment=22; - std::ios::streamoff read_start=max_comment_size+read_size_before_comment; - if(read_start>end_position) read_start=end_position; - istream.seekg(end_position-read_start); - char *buf=new char[read_start]; - if(read_start<=0){std::cerr<<"ZIP: Invalid read buffer size"<Read(istream,true); - if(valid) filename_to_header[header->filename]=header;} - return true; -} -//##################################################################### -// Function Get_File -//##################################################################### -std::istream* ZipFileReader::Get_File(const std::string& filename,const bool binary) -{ - std::map::iterator i=filename_to_header.find(filename); - if(i!=filename_to_header.end()){ - ZipFileHeader* header=i->second; - istream.seekg((*header).header_offset);return new ZIP_FILE_ISTREAM(istream,true); - } - return 0; -} -//##################################################################### -// Function Get_File_List -//##################################################################### -void ZipFileReader::Get_File_List(std::vector& filenames) const -{ - filenames.clear(); - std::map::const_iterator i=filename_to_header.begin(); - for(;i!=filename_to_header.end();++i) - filenames.push_back(i->first); -} -//##################################################################### -// Function Gzip_In -//##################################################################### -std::istream* -Gzip_In(const std::string& filename,std::ios::openmode mode) -{ - std::ifstream* infile=new std::ifstream(filename.c_str(),mode | std::ios::binary); - GZipFileHeader header; - bool zipped=header.Read(*infile); - infile->seekg(0); - if(!zipped) return infile; - else return new ZIP_FILE_ISTREAM(*infile,false); -} -//##################################################################### -// Function Gzip_Out -//##################################################################### -std::ostream* -Gzip_Out(const std::string& filename,std::ios::openmode mode) -{ - std::ofstream* outfile=new std::ofstream(filename.c_str(),mode); - return new ZIP_FILE_OSTREAM(0,*outfile); -} -//##################################################################### - -#else - -//##################################################################### -// Function Gzip_In -//##################################################################### -std::istream* -Gzip_In(const std::string& filename,std::ios::openmode mode) -{ - std::ifstream* infile=new std::ifstream(filename.c_str(),mode | std::ios::binary); - GZipFileHeader header; - bool zipped=header.Read(*infile); - - infile->seekg(0); - if(!zipped) return infile; - - delete infile; - std::cerr<<"Partio: encountered gz file '"< -#include -#include -#include -#include - -namespace Partio{ -struct ZipFileHeader; -//##################################################################### -// Functions Gzip_Out/Gzip_In - Create streams that read/write .gz -//##################################################################### -std::istream* Gzip_In(const std::string& filename,std::ios::openmode mode); -std::ostream* Gzip_Out(const std::string& filename,std::ios::openmode mode); -//##################################################################### -// Class ZipFileWriter -//##################################################################### -class ZipFileWriter -{ - std::ofstream ostream; - std::vector files; -public: - -//##################################################################### - ZipFileWriter(const std::string& filename); - virtual ~ZipFileWriter(); - std::ostream* Add_File(const std::string& filename,const bool binary=true); -//##################################################################### -}; - -//##################################################################### -// Class ZipFileReader -//##################################################################### -class ZipFileReader -{ - std::ifstream istream; -public: - std::map filename_to_header; - -//##################################################################### - ZipFileReader(const std::string& filename); - virtual ~ZipFileReader(); - std::istream* Get_File(const std::string& filename,const bool binary=true); - void Get_File_List(std::vector& filenames) const; -private: - bool Find_And_Read_Central_Header(); -//##################################################################### -}; -} -#endif diff --git a/tensorflow_graphics/physics/external/partio/src/io/half2float.h b/tensorflow_graphics/physics/external/partio/src/io/half2float.h deleted file mode 100644 index 610139ec1..000000000 --- a/tensorflow_graphics/physics/external/partio/src/io/half2float.h +++ /dev/null @@ -1,2048 +0,0 @@ -{ 0},{0x33800000},{0x34000000},{0x34400000},{0x34800000},{0x34a00000},{0x34c00000},{0x34e00000},{0x35000000},{0x35100000},{0x35200000},{0x35300000},{0x35400000},{0x35500000},{0x35600000},{0x35700000},{0x35800000},{0x35880000},{0x35900000},{0x35980000},{0x35a00000},{0x35a80000},{0x35b00000},{0x35b80000},{0x35c00000},{0x35c80000},{0x35d00000},{0x35d80000},{0x35e00000},{0x35e80000},{0x35f00000},{0x35f80000}, -{0x36000000},{0x36040000},{0x36080000},{0x360c0000},{0x36100000},{0x36140000},{0x36180000},{0x361c0000},{0x36200000},{0x36240000},{0x36280000},{0x362c0000},{0x36300000},{0x36340000},{0x36380000},{0x363c0000},{0x36400000},{0x36440000},{0x36480000},{0x364c0000},{0x36500000},{0x36540000},{0x36580000},{0x365c0000},{0x36600000},{0x36640000},{0x36680000},{0x366c0000},{0x36700000},{0x36740000},{0x36780000},{0x367c0000}, -{0x36800000},{0x36820000},{0x36840000},{0x36860000},{0x36880000},{0x368a0000},{0x368c0000},{0x368e0000},{0x36900000},{0x36920000},{0x36940000},{0x36960000},{0x36980000},{0x369a0000},{0x369c0000},{0x369e0000},{0x36a00000},{0x36a20000},{0x36a40000},{0x36a60000},{0x36a80000},{0x36aa0000},{0x36ac0000},{0x36ae0000},{0x36b00000},{0x36b20000},{0x36b40000},{0x36b60000},{0x36b80000},{0x36ba0000},{0x36bc0000},{0x36be0000}, -{0x36c00000},{0x36c20000},{0x36c40000},{0x36c60000},{0x36c80000},{0x36ca0000},{0x36cc0000},{0x36ce0000},{0x36d00000},{0x36d20000},{0x36d40000},{0x36d60000},{0x36d80000},{0x36da0000},{0x36dc0000},{0x36de0000},{0x36e00000},{0x36e20000},{0x36e40000},{0x36e60000},{0x36e80000},{0x36ea0000},{0x36ec0000},{0x36ee0000},{0x36f00000},{0x36f20000},{0x36f40000},{0x36f60000},{0x36f80000},{0x36fa0000},{0x36fc0000},{0x36fe0000}, -{0x37000000},{0x37010000},{0x37020000},{0x37030000},{0x37040000},{0x37050000},{0x37060000},{0x37070000},{0x37080000},{0x37090000},{0x370a0000},{0x370b0000},{0x370c0000},{0x370d0000},{0x370e0000},{0x370f0000},{0x37100000},{0x37110000},{0x37120000},{0x37130000},{0x37140000},{0x37150000},{0x37160000},{0x37170000},{0x37180000},{0x37190000},{0x371a0000},{0x371b0000},{0x371c0000},{0x371d0000},{0x371e0000},{0x371f0000}, -{0x37200000},{0x37210000},{0x37220000},{0x37230000},{0x37240000},{0x37250000},{0x37260000},{0x37270000},{0x37280000},{0x37290000},{0x372a0000},{0x372b0000},{0x372c0000},{0x372d0000},{0x372e0000},{0x372f0000},{0x37300000},{0x37310000},{0x37320000},{0x37330000},{0x37340000},{0x37350000},{0x37360000},{0x37370000},{0x37380000},{0x37390000},{0x373a0000},{0x373b0000},{0x373c0000},{0x373d0000},{0x373e0000},{0x373f0000}, -{0x37400000},{0x37410000},{0x37420000},{0x37430000},{0x37440000},{0x37450000},{0x37460000},{0x37470000},{0x37480000},{0x37490000},{0x374a0000},{0x374b0000},{0x374c0000},{0x374d0000},{0x374e0000},{0x374f0000},{0x37500000},{0x37510000},{0x37520000},{0x37530000},{0x37540000},{0x37550000},{0x37560000},{0x37570000},{0x37580000},{0x37590000},{0x375a0000},{0x375b0000},{0x375c0000},{0x375d0000},{0x375e0000},{0x375f0000}, -{0x37600000},{0x37610000},{0x37620000},{0x37630000},{0x37640000},{0x37650000},{0x37660000},{0x37670000},{0x37680000},{0x37690000},{0x376a0000},{0x376b0000},{0x376c0000},{0x376d0000},{0x376e0000},{0x376f0000},{0x37700000},{0x37710000},{0x37720000},{0x37730000},{0x37740000},{0x37750000},{0x37760000},{0x37770000},{0x37780000},{0x37790000},{0x377a0000},{0x377b0000},{0x377c0000},{0x377d0000},{0x377e0000},{0x377f0000}, -{0x37800000},{0x37808000},{0x37810000},{0x37818000},{0x37820000},{0x37828000},{0x37830000},{0x37838000},{0x37840000},{0x37848000},{0x37850000},{0x37858000},{0x37860000},{0x37868000},{0x37870000},{0x37878000},{0x37880000},{0x37888000},{0x37890000},{0x37898000},{0x378a0000},{0x378a8000},{0x378b0000},{0x378b8000},{0x378c0000},{0x378c8000},{0x378d0000},{0x378d8000},{0x378e0000},{0x378e8000},{0x378f0000},{0x378f8000}, -{0x37900000},{0x37908000},{0x37910000},{0x37918000},{0x37920000},{0x37928000},{0x37930000},{0x37938000},{0x37940000},{0x37948000},{0x37950000},{0x37958000},{0x37960000},{0x37968000},{0x37970000},{0x37978000},{0x37980000},{0x37988000},{0x37990000},{0x37998000},{0x379a0000},{0x379a8000},{0x379b0000},{0x379b8000},{0x379c0000},{0x379c8000},{0x379d0000},{0x379d8000},{0x379e0000},{0x379e8000},{0x379f0000},{0x379f8000}, -{0x37a00000},{0x37a08000},{0x37a10000},{0x37a18000},{0x37a20000},{0x37a28000},{0x37a30000},{0x37a38000},{0x37a40000},{0x37a48000},{0x37a50000},{0x37a58000},{0x37a60000},{0x37a68000},{0x37a70000},{0x37a78000},{0x37a80000},{0x37a88000},{0x37a90000},{0x37a98000},{0x37aa0000},{0x37aa8000},{0x37ab0000},{0x37ab8000},{0x37ac0000},{0x37ac8000},{0x37ad0000},{0x37ad8000},{0x37ae0000},{0x37ae8000},{0x37af0000},{0x37af8000}, -{0x37b00000},{0x37b08000},{0x37b10000},{0x37b18000},{0x37b20000},{0x37b28000},{0x37b30000},{0x37b38000},{0x37b40000},{0x37b48000},{0x37b50000},{0x37b58000},{0x37b60000},{0x37b68000},{0x37b70000},{0x37b78000},{0x37b80000},{0x37b88000},{0x37b90000},{0x37b98000},{0x37ba0000},{0x37ba8000},{0x37bb0000},{0x37bb8000},{0x37bc0000},{0x37bc8000},{0x37bd0000},{0x37bd8000},{0x37be0000},{0x37be8000},{0x37bf0000},{0x37bf8000}, -{0x37c00000},{0x37c08000},{0x37c10000},{0x37c18000},{0x37c20000},{0x37c28000},{0x37c30000},{0x37c38000},{0x37c40000},{0x37c48000},{0x37c50000},{0x37c58000},{0x37c60000},{0x37c68000},{0x37c70000},{0x37c78000},{0x37c80000},{0x37c88000},{0x37c90000},{0x37c98000},{0x37ca0000},{0x37ca8000},{0x37cb0000},{0x37cb8000},{0x37cc0000},{0x37cc8000},{0x37cd0000},{0x37cd8000},{0x37ce0000},{0x37ce8000},{0x37cf0000},{0x37cf8000}, -{0x37d00000},{0x37d08000},{0x37d10000},{0x37d18000},{0x37d20000},{0x37d28000},{0x37d30000},{0x37d38000},{0x37d40000},{0x37d48000},{0x37d50000},{0x37d58000},{0x37d60000},{0x37d68000},{0x37d70000},{0x37d78000},{0x37d80000},{0x37d88000},{0x37d90000},{0x37d98000},{0x37da0000},{0x37da8000},{0x37db0000},{0x37db8000},{0x37dc0000},{0x37dc8000},{0x37dd0000},{0x37dd8000},{0x37de0000},{0x37de8000},{0x37df0000},{0x37df8000}, -{0x37e00000},{0x37e08000},{0x37e10000},{0x37e18000},{0x37e20000},{0x37e28000},{0x37e30000},{0x37e38000},{0x37e40000},{0x37e48000},{0x37e50000},{0x37e58000},{0x37e60000},{0x37e68000},{0x37e70000},{0x37e78000},{0x37e80000},{0x37e88000},{0x37e90000},{0x37e98000},{0x37ea0000},{0x37ea8000},{0x37eb0000},{0x37eb8000},{0x37ec0000},{0x37ec8000},{0x37ed0000},{0x37ed8000},{0x37ee0000},{0x37ee8000},{0x37ef0000},{0x37ef8000}, -{0x37f00000},{0x37f08000},{0x37f10000},{0x37f18000},{0x37f20000},{0x37f28000},{0x37f30000},{0x37f38000},{0x37f40000},{0x37f48000},{0x37f50000},{0x37f58000},{0x37f60000},{0x37f68000},{0x37f70000},{0x37f78000},{0x37f80000},{0x37f88000},{0x37f90000},{0x37f98000},{0x37fa0000},{0x37fa8000},{0x37fb0000},{0x37fb8000},{0x37fc0000},{0x37fc8000},{0x37fd0000},{0x37fd8000},{0x37fe0000},{0x37fe8000},{0x37ff0000},{0x37ff8000}, -{0x38000000},{0x38004000},{0x38008000},{0x3800c000},{0x38010000},{0x38014000},{0x38018000},{0x3801c000},{0x38020000},{0x38024000},{0x38028000},{0x3802c000},{0x38030000},{0x38034000},{0x38038000},{0x3803c000},{0x38040000},{0x38044000},{0x38048000},{0x3804c000},{0x38050000},{0x38054000},{0x38058000},{0x3805c000},{0x38060000},{0x38064000},{0x38068000},{0x3806c000},{0x38070000},{0x38074000},{0x38078000},{0x3807c000}, -{0x38080000},{0x38084000},{0x38088000},{0x3808c000},{0x38090000},{0x38094000},{0x38098000},{0x3809c000},{0x380a0000},{0x380a4000},{0x380a8000},{0x380ac000},{0x380b0000},{0x380b4000},{0x380b8000},{0x380bc000},{0x380c0000},{0x380c4000},{0x380c8000},{0x380cc000},{0x380d0000},{0x380d4000},{0x380d8000},{0x380dc000},{0x380e0000},{0x380e4000},{0x380e8000},{0x380ec000},{0x380f0000},{0x380f4000},{0x380f8000},{0x380fc000}, -{0x38100000},{0x38104000},{0x38108000},{0x3810c000},{0x38110000},{0x38114000},{0x38118000},{0x3811c000},{0x38120000},{0x38124000},{0x38128000},{0x3812c000},{0x38130000},{0x38134000},{0x38138000},{0x3813c000},{0x38140000},{0x38144000},{0x38148000},{0x3814c000},{0x38150000},{0x38154000},{0x38158000},{0x3815c000},{0x38160000},{0x38164000},{0x38168000},{0x3816c000},{0x38170000},{0x38174000},{0x38178000},{0x3817c000}, -{0x38180000},{0x38184000},{0x38188000},{0x3818c000},{0x38190000},{0x38194000},{0x38198000},{0x3819c000},{0x381a0000},{0x381a4000},{0x381a8000},{0x381ac000},{0x381b0000},{0x381b4000},{0x381b8000},{0x381bc000},{0x381c0000},{0x381c4000},{0x381c8000},{0x381cc000},{0x381d0000},{0x381d4000},{0x381d8000},{0x381dc000},{0x381e0000},{0x381e4000},{0x381e8000},{0x381ec000},{0x381f0000},{0x381f4000},{0x381f8000},{0x381fc000}, -{0x38200000},{0x38204000},{0x38208000},{0x3820c000},{0x38210000},{0x38214000},{0x38218000},{0x3821c000},{0x38220000},{0x38224000},{0x38228000},{0x3822c000},{0x38230000},{0x38234000},{0x38238000},{0x3823c000},{0x38240000},{0x38244000},{0x38248000},{0x3824c000},{0x38250000},{0x38254000},{0x38258000},{0x3825c000},{0x38260000},{0x38264000},{0x38268000},{0x3826c000},{0x38270000},{0x38274000},{0x38278000},{0x3827c000}, -{0x38280000},{0x38284000},{0x38288000},{0x3828c000},{0x38290000},{0x38294000},{0x38298000},{0x3829c000},{0x382a0000},{0x382a4000},{0x382a8000},{0x382ac000},{0x382b0000},{0x382b4000},{0x382b8000},{0x382bc000},{0x382c0000},{0x382c4000},{0x382c8000},{0x382cc000},{0x382d0000},{0x382d4000},{0x382d8000},{0x382dc000},{0x382e0000},{0x382e4000},{0x382e8000},{0x382ec000},{0x382f0000},{0x382f4000},{0x382f8000},{0x382fc000}, -{0x38300000},{0x38304000},{0x38308000},{0x3830c000},{0x38310000},{0x38314000},{0x38318000},{0x3831c000},{0x38320000},{0x38324000},{0x38328000},{0x3832c000},{0x38330000},{0x38334000},{0x38338000},{0x3833c000},{0x38340000},{0x38344000},{0x38348000},{0x3834c000},{0x38350000},{0x38354000},{0x38358000},{0x3835c000},{0x38360000},{0x38364000},{0x38368000},{0x3836c000},{0x38370000},{0x38374000},{0x38378000},{0x3837c000}, -{0x38380000},{0x38384000},{0x38388000},{0x3838c000},{0x38390000},{0x38394000},{0x38398000},{0x3839c000},{0x383a0000},{0x383a4000},{0x383a8000},{0x383ac000},{0x383b0000},{0x383b4000},{0x383b8000},{0x383bc000},{0x383c0000},{0x383c4000},{0x383c8000},{0x383cc000},{0x383d0000},{0x383d4000},{0x383d8000},{0x383dc000},{0x383e0000},{0x383e4000},{0x383e8000},{0x383ec000},{0x383f0000},{0x383f4000},{0x383f8000},{0x383fc000}, -{0x38400000},{0x38404000},{0x38408000},{0x3840c000},{0x38410000},{0x38414000},{0x38418000},{0x3841c000},{0x38420000},{0x38424000},{0x38428000},{0x3842c000},{0x38430000},{0x38434000},{0x38438000},{0x3843c000},{0x38440000},{0x38444000},{0x38448000},{0x3844c000},{0x38450000},{0x38454000},{0x38458000},{0x3845c000},{0x38460000},{0x38464000},{0x38468000},{0x3846c000},{0x38470000},{0x38474000},{0x38478000},{0x3847c000}, -{0x38480000},{0x38484000},{0x38488000},{0x3848c000},{0x38490000},{0x38494000},{0x38498000},{0x3849c000},{0x384a0000},{0x384a4000},{0x384a8000},{0x384ac000},{0x384b0000},{0x384b4000},{0x384b8000},{0x384bc000},{0x384c0000},{0x384c4000},{0x384c8000},{0x384cc000},{0x384d0000},{0x384d4000},{0x384d8000},{0x384dc000},{0x384e0000},{0x384e4000},{0x384e8000},{0x384ec000},{0x384f0000},{0x384f4000},{0x384f8000},{0x384fc000}, -{0x38500000},{0x38504000},{0x38508000},{0x3850c000},{0x38510000},{0x38514000},{0x38518000},{0x3851c000},{0x38520000},{0x38524000},{0x38528000},{0x3852c000},{0x38530000},{0x38534000},{0x38538000},{0x3853c000},{0x38540000},{0x38544000},{0x38548000},{0x3854c000},{0x38550000},{0x38554000},{0x38558000},{0x3855c000},{0x38560000},{0x38564000},{0x38568000},{0x3856c000},{0x38570000},{0x38574000},{0x38578000},{0x3857c000}, -{0x38580000},{0x38584000},{0x38588000},{0x3858c000},{0x38590000},{0x38594000},{0x38598000},{0x3859c000},{0x385a0000},{0x385a4000},{0x385a8000},{0x385ac000},{0x385b0000},{0x385b4000},{0x385b8000},{0x385bc000},{0x385c0000},{0x385c4000},{0x385c8000},{0x385cc000},{0x385d0000},{0x385d4000},{0x385d8000},{0x385dc000},{0x385e0000},{0x385e4000},{0x385e8000},{0x385ec000},{0x385f0000},{0x385f4000},{0x385f8000},{0x385fc000}, -{0x38600000},{0x38604000},{0x38608000},{0x3860c000},{0x38610000},{0x38614000},{0x38618000},{0x3861c000},{0x38620000},{0x38624000},{0x38628000},{0x3862c000},{0x38630000},{0x38634000},{0x38638000},{0x3863c000},{0x38640000},{0x38644000},{0x38648000},{0x3864c000},{0x38650000},{0x38654000},{0x38658000},{0x3865c000},{0x38660000},{0x38664000},{0x38668000},{0x3866c000},{0x38670000},{0x38674000},{0x38678000},{0x3867c000}, -{0x38680000},{0x38684000},{0x38688000},{0x3868c000},{0x38690000},{0x38694000},{0x38698000},{0x3869c000},{0x386a0000},{0x386a4000},{0x386a8000},{0x386ac000},{0x386b0000},{0x386b4000},{0x386b8000},{0x386bc000},{0x386c0000},{0x386c4000},{0x386c8000},{0x386cc000},{0x386d0000},{0x386d4000},{0x386d8000},{0x386dc000},{0x386e0000},{0x386e4000},{0x386e8000},{0x386ec000},{0x386f0000},{0x386f4000},{0x386f8000},{0x386fc000}, -{0x38700000},{0x38704000},{0x38708000},{0x3870c000},{0x38710000},{0x38714000},{0x38718000},{0x3871c000},{0x38720000},{0x38724000},{0x38728000},{0x3872c000},{0x38730000},{0x38734000},{0x38738000},{0x3873c000},{0x38740000},{0x38744000},{0x38748000},{0x3874c000},{0x38750000},{0x38754000},{0x38758000},{0x3875c000},{0x38760000},{0x38764000},{0x38768000},{0x3876c000},{0x38770000},{0x38774000},{0x38778000},{0x3877c000}, -{0x38780000},{0x38784000},{0x38788000},{0x3878c000},{0x38790000},{0x38794000},{0x38798000},{0x3879c000},{0x387a0000},{0x387a4000},{0x387a8000},{0x387ac000},{0x387b0000},{0x387b4000},{0x387b8000},{0x387bc000},{0x387c0000},{0x387c4000},{0x387c8000},{0x387cc000},{0x387d0000},{0x387d4000},{0x387d8000},{0x387dc000},{0x387e0000},{0x387e4000},{0x387e8000},{0x387ec000},{0x387f0000},{0x387f4000},{0x387f8000},{0x387fc000}, -{0x38800000},{0x38802000},{0x38804000},{0x38806000},{0x38808000},{0x3880a000},{0x3880c000},{0x3880e000},{0x38810000},{0x38812000},{0x38814000},{0x38816000},{0x38818000},{0x3881a000},{0x3881c000},{0x3881e000},{0x38820000},{0x38822000},{0x38824000},{0x38826000},{0x38828000},{0x3882a000},{0x3882c000},{0x3882e000},{0x38830000},{0x38832000},{0x38834000},{0x38836000},{0x38838000},{0x3883a000},{0x3883c000},{0x3883e000}, -{0x38840000},{0x38842000},{0x38844000},{0x38846000},{0x38848000},{0x3884a000},{0x3884c000},{0x3884e000},{0x38850000},{0x38852000},{0x38854000},{0x38856000},{0x38858000},{0x3885a000},{0x3885c000},{0x3885e000},{0x38860000},{0x38862000},{0x38864000},{0x38866000},{0x38868000},{0x3886a000},{0x3886c000},{0x3886e000},{0x38870000},{0x38872000},{0x38874000},{0x38876000},{0x38878000},{0x3887a000},{0x3887c000},{0x3887e000}, -{0x38880000},{0x38882000},{0x38884000},{0x38886000},{0x38888000},{0x3888a000},{0x3888c000},{0x3888e000},{0x38890000},{0x38892000},{0x38894000},{0x38896000},{0x38898000},{0x3889a000},{0x3889c000},{0x3889e000},{0x388a0000},{0x388a2000},{0x388a4000},{0x388a6000},{0x388a8000},{0x388aa000},{0x388ac000},{0x388ae000},{0x388b0000},{0x388b2000},{0x388b4000},{0x388b6000},{0x388b8000},{0x388ba000},{0x388bc000},{0x388be000}, -{0x388c0000},{0x388c2000},{0x388c4000},{0x388c6000},{0x388c8000},{0x388ca000},{0x388cc000},{0x388ce000},{0x388d0000},{0x388d2000},{0x388d4000},{0x388d6000},{0x388d8000},{0x388da000},{0x388dc000},{0x388de000},{0x388e0000},{0x388e2000},{0x388e4000},{0x388e6000},{0x388e8000},{0x388ea000},{0x388ec000},{0x388ee000},{0x388f0000},{0x388f2000},{0x388f4000},{0x388f6000},{0x388f8000},{0x388fa000},{0x388fc000},{0x388fe000}, -{0x38900000},{0x38902000},{0x38904000},{0x38906000},{0x38908000},{0x3890a000},{0x3890c000},{0x3890e000},{0x38910000},{0x38912000},{0x38914000},{0x38916000},{0x38918000},{0x3891a000},{0x3891c000},{0x3891e000},{0x38920000},{0x38922000},{0x38924000},{0x38926000},{0x38928000},{0x3892a000},{0x3892c000},{0x3892e000},{0x38930000},{0x38932000},{0x38934000},{0x38936000},{0x38938000},{0x3893a000},{0x3893c000},{0x3893e000}, -{0x38940000},{0x38942000},{0x38944000},{0x38946000},{0x38948000},{0x3894a000},{0x3894c000},{0x3894e000},{0x38950000},{0x38952000},{0x38954000},{0x38956000},{0x38958000},{0x3895a000},{0x3895c000},{0x3895e000},{0x38960000},{0x38962000},{0x38964000},{0x38966000},{0x38968000},{0x3896a000},{0x3896c000},{0x3896e000},{0x38970000},{0x38972000},{0x38974000},{0x38976000},{0x38978000},{0x3897a000},{0x3897c000},{0x3897e000}, -{0x38980000},{0x38982000},{0x38984000},{0x38986000},{0x38988000},{0x3898a000},{0x3898c000},{0x3898e000},{0x38990000},{0x38992000},{0x38994000},{0x38996000},{0x38998000},{0x3899a000},{0x3899c000},{0x3899e000},{0x389a0000},{0x389a2000},{0x389a4000},{0x389a6000},{0x389a8000},{0x389aa000},{0x389ac000},{0x389ae000},{0x389b0000},{0x389b2000},{0x389b4000},{0x389b6000},{0x389b8000},{0x389ba000},{0x389bc000},{0x389be000}, -{0x389c0000},{0x389c2000},{0x389c4000},{0x389c6000},{0x389c8000},{0x389ca000},{0x389cc000},{0x389ce000},{0x389d0000},{0x389d2000},{0x389d4000},{0x389d6000},{0x389d8000},{0x389da000},{0x389dc000},{0x389de000},{0x389e0000},{0x389e2000},{0x389e4000},{0x389e6000},{0x389e8000},{0x389ea000},{0x389ec000},{0x389ee000},{0x389f0000},{0x389f2000},{0x389f4000},{0x389f6000},{0x389f8000},{0x389fa000},{0x389fc000},{0x389fe000}, -{0x38a00000},{0x38a02000},{0x38a04000},{0x38a06000},{0x38a08000},{0x38a0a000},{0x38a0c000},{0x38a0e000},{0x38a10000},{0x38a12000},{0x38a14000},{0x38a16000},{0x38a18000},{0x38a1a000},{0x38a1c000},{0x38a1e000},{0x38a20000},{0x38a22000},{0x38a24000},{0x38a26000},{0x38a28000},{0x38a2a000},{0x38a2c000},{0x38a2e000},{0x38a30000},{0x38a32000},{0x38a34000},{0x38a36000},{0x38a38000},{0x38a3a000},{0x38a3c000},{0x38a3e000}, -{0x38a40000},{0x38a42000},{0x38a44000},{0x38a46000},{0x38a48000},{0x38a4a000},{0x38a4c000},{0x38a4e000},{0x38a50000},{0x38a52000},{0x38a54000},{0x38a56000},{0x38a58000},{0x38a5a000},{0x38a5c000},{0x38a5e000},{0x38a60000},{0x38a62000},{0x38a64000},{0x38a66000},{0x38a68000},{0x38a6a000},{0x38a6c000},{0x38a6e000},{0x38a70000},{0x38a72000},{0x38a74000},{0x38a76000},{0x38a78000},{0x38a7a000},{0x38a7c000},{0x38a7e000}, -{0x38a80000},{0x38a82000},{0x38a84000},{0x38a86000},{0x38a88000},{0x38a8a000},{0x38a8c000},{0x38a8e000},{0x38a90000},{0x38a92000},{0x38a94000},{0x38a96000},{0x38a98000},{0x38a9a000},{0x38a9c000},{0x38a9e000},{0x38aa0000},{0x38aa2000},{0x38aa4000},{0x38aa6000},{0x38aa8000},{0x38aaa000},{0x38aac000},{0x38aae000},{0x38ab0000},{0x38ab2000},{0x38ab4000},{0x38ab6000},{0x38ab8000},{0x38aba000},{0x38abc000},{0x38abe000}, -{0x38ac0000},{0x38ac2000},{0x38ac4000},{0x38ac6000},{0x38ac8000},{0x38aca000},{0x38acc000},{0x38ace000},{0x38ad0000},{0x38ad2000},{0x38ad4000},{0x38ad6000},{0x38ad8000},{0x38ada000},{0x38adc000},{0x38ade000},{0x38ae0000},{0x38ae2000},{0x38ae4000},{0x38ae6000},{0x38ae8000},{0x38aea000},{0x38aec000},{0x38aee000},{0x38af0000},{0x38af2000},{0x38af4000},{0x38af6000},{0x38af8000},{0x38afa000},{0x38afc000},{0x38afe000}, -{0x38b00000},{0x38b02000},{0x38b04000},{0x38b06000},{0x38b08000},{0x38b0a000},{0x38b0c000},{0x38b0e000},{0x38b10000},{0x38b12000},{0x38b14000},{0x38b16000},{0x38b18000},{0x38b1a000},{0x38b1c000},{0x38b1e000},{0x38b20000},{0x38b22000},{0x38b24000},{0x38b26000},{0x38b28000},{0x38b2a000},{0x38b2c000},{0x38b2e000},{0x38b30000},{0x38b32000},{0x38b34000},{0x38b36000},{0x38b38000},{0x38b3a000},{0x38b3c000},{0x38b3e000}, -{0x38b40000},{0x38b42000},{0x38b44000},{0x38b46000},{0x38b48000},{0x38b4a000},{0x38b4c000},{0x38b4e000},{0x38b50000},{0x38b52000},{0x38b54000},{0x38b56000},{0x38b58000},{0x38b5a000},{0x38b5c000},{0x38b5e000},{0x38b60000},{0x38b62000},{0x38b64000},{0x38b66000},{0x38b68000},{0x38b6a000},{0x38b6c000},{0x38b6e000},{0x38b70000},{0x38b72000},{0x38b74000},{0x38b76000},{0x38b78000},{0x38b7a000},{0x38b7c000},{0x38b7e000}, -{0x38b80000},{0x38b82000},{0x38b84000},{0x38b86000},{0x38b88000},{0x38b8a000},{0x38b8c000},{0x38b8e000},{0x38b90000},{0x38b92000},{0x38b94000},{0x38b96000},{0x38b98000},{0x38b9a000},{0x38b9c000},{0x38b9e000},{0x38ba0000},{0x38ba2000},{0x38ba4000},{0x38ba6000},{0x38ba8000},{0x38baa000},{0x38bac000},{0x38bae000},{0x38bb0000},{0x38bb2000},{0x38bb4000},{0x38bb6000},{0x38bb8000},{0x38bba000},{0x38bbc000},{0x38bbe000}, -{0x38bc0000},{0x38bc2000},{0x38bc4000},{0x38bc6000},{0x38bc8000},{0x38bca000},{0x38bcc000},{0x38bce000},{0x38bd0000},{0x38bd2000},{0x38bd4000},{0x38bd6000},{0x38bd8000},{0x38bda000},{0x38bdc000},{0x38bde000},{0x38be0000},{0x38be2000},{0x38be4000},{0x38be6000},{0x38be8000},{0x38bea000},{0x38bec000},{0x38bee000},{0x38bf0000},{0x38bf2000},{0x38bf4000},{0x38bf6000},{0x38bf8000},{0x38bfa000},{0x38bfc000},{0x38bfe000}, -{0x38c00000},{0x38c02000},{0x38c04000},{0x38c06000},{0x38c08000},{0x38c0a000},{0x38c0c000},{0x38c0e000},{0x38c10000},{0x38c12000},{0x38c14000},{0x38c16000},{0x38c18000},{0x38c1a000},{0x38c1c000},{0x38c1e000},{0x38c20000},{0x38c22000},{0x38c24000},{0x38c26000},{0x38c28000},{0x38c2a000},{0x38c2c000},{0x38c2e000},{0x38c30000},{0x38c32000},{0x38c34000},{0x38c36000},{0x38c38000},{0x38c3a000},{0x38c3c000},{0x38c3e000}, -{0x38c40000},{0x38c42000},{0x38c44000},{0x38c46000},{0x38c48000},{0x38c4a000},{0x38c4c000},{0x38c4e000},{0x38c50000},{0x38c52000},{0x38c54000},{0x38c56000},{0x38c58000},{0x38c5a000},{0x38c5c000},{0x38c5e000},{0x38c60000},{0x38c62000},{0x38c64000},{0x38c66000},{0x38c68000},{0x38c6a000},{0x38c6c000},{0x38c6e000},{0x38c70000},{0x38c72000},{0x38c74000},{0x38c76000},{0x38c78000},{0x38c7a000},{0x38c7c000},{0x38c7e000}, -{0x38c80000},{0x38c82000},{0x38c84000},{0x38c86000},{0x38c88000},{0x38c8a000},{0x38c8c000},{0x38c8e000},{0x38c90000},{0x38c92000},{0x38c94000},{0x38c96000},{0x38c98000},{0x38c9a000},{0x38c9c000},{0x38c9e000},{0x38ca0000},{0x38ca2000},{0x38ca4000},{0x38ca6000},{0x38ca8000},{0x38caa000},{0x38cac000},{0x38cae000},{0x38cb0000},{0x38cb2000},{0x38cb4000},{0x38cb6000},{0x38cb8000},{0x38cba000},{0x38cbc000},{0x38cbe000}, -{0x38cc0000},{0x38cc2000},{0x38cc4000},{0x38cc6000},{0x38cc8000},{0x38cca000},{0x38ccc000},{0x38cce000},{0x38cd0000},{0x38cd2000},{0x38cd4000},{0x38cd6000},{0x38cd8000},{0x38cda000},{0x38cdc000},{0x38cde000},{0x38ce0000},{0x38ce2000},{0x38ce4000},{0x38ce6000},{0x38ce8000},{0x38cea000},{0x38cec000},{0x38cee000},{0x38cf0000},{0x38cf2000},{0x38cf4000},{0x38cf6000},{0x38cf8000},{0x38cfa000},{0x38cfc000},{0x38cfe000}, -{0x38d00000},{0x38d02000},{0x38d04000},{0x38d06000},{0x38d08000},{0x38d0a000},{0x38d0c000},{0x38d0e000},{0x38d10000},{0x38d12000},{0x38d14000},{0x38d16000},{0x38d18000},{0x38d1a000},{0x38d1c000},{0x38d1e000},{0x38d20000},{0x38d22000},{0x38d24000},{0x38d26000},{0x38d28000},{0x38d2a000},{0x38d2c000},{0x38d2e000},{0x38d30000},{0x38d32000},{0x38d34000},{0x38d36000},{0x38d38000},{0x38d3a000},{0x38d3c000},{0x38d3e000}, -{0x38d40000},{0x38d42000},{0x38d44000},{0x38d46000},{0x38d48000},{0x38d4a000},{0x38d4c000},{0x38d4e000},{0x38d50000},{0x38d52000},{0x38d54000},{0x38d56000},{0x38d58000},{0x38d5a000},{0x38d5c000},{0x38d5e000},{0x38d60000},{0x38d62000},{0x38d64000},{0x38d66000},{0x38d68000},{0x38d6a000},{0x38d6c000},{0x38d6e000},{0x38d70000},{0x38d72000},{0x38d74000},{0x38d76000},{0x38d78000},{0x38d7a000},{0x38d7c000},{0x38d7e000}, -{0x38d80000},{0x38d82000},{0x38d84000},{0x38d86000},{0x38d88000},{0x38d8a000},{0x38d8c000},{0x38d8e000},{0x38d90000},{0x38d92000},{0x38d94000},{0x38d96000},{0x38d98000},{0x38d9a000},{0x38d9c000},{0x38d9e000},{0x38da0000},{0x38da2000},{0x38da4000},{0x38da6000},{0x38da8000},{0x38daa000},{0x38dac000},{0x38dae000},{0x38db0000},{0x38db2000},{0x38db4000},{0x38db6000},{0x38db8000},{0x38dba000},{0x38dbc000},{0x38dbe000}, -{0x38dc0000},{0x38dc2000},{0x38dc4000},{0x38dc6000},{0x38dc8000},{0x38dca000},{0x38dcc000},{0x38dce000},{0x38dd0000},{0x38dd2000},{0x38dd4000},{0x38dd6000},{0x38dd8000},{0x38dda000},{0x38ddc000},{0x38dde000},{0x38de0000},{0x38de2000},{0x38de4000},{0x38de6000},{0x38de8000},{0x38dea000},{0x38dec000},{0x38dee000},{0x38df0000},{0x38df2000},{0x38df4000},{0x38df6000},{0x38df8000},{0x38dfa000},{0x38dfc000},{0x38dfe000}, -{0x38e00000},{0x38e02000},{0x38e04000},{0x38e06000},{0x38e08000},{0x38e0a000},{0x38e0c000},{0x38e0e000},{0x38e10000},{0x38e12000},{0x38e14000},{0x38e16000},{0x38e18000},{0x38e1a000},{0x38e1c000},{0x38e1e000},{0x38e20000},{0x38e22000},{0x38e24000},{0x38e26000},{0x38e28000},{0x38e2a000},{0x38e2c000},{0x38e2e000},{0x38e30000},{0x38e32000},{0x38e34000},{0x38e36000},{0x38e38000},{0x38e3a000},{0x38e3c000},{0x38e3e000}, -{0x38e40000},{0x38e42000},{0x38e44000},{0x38e46000},{0x38e48000},{0x38e4a000},{0x38e4c000},{0x38e4e000},{0x38e50000},{0x38e52000},{0x38e54000},{0x38e56000},{0x38e58000},{0x38e5a000},{0x38e5c000},{0x38e5e000},{0x38e60000},{0x38e62000},{0x38e64000},{0x38e66000},{0x38e68000},{0x38e6a000},{0x38e6c000},{0x38e6e000},{0x38e70000},{0x38e72000},{0x38e74000},{0x38e76000},{0x38e78000},{0x38e7a000},{0x38e7c000},{0x38e7e000}, -{0x38e80000},{0x38e82000},{0x38e84000},{0x38e86000},{0x38e88000},{0x38e8a000},{0x38e8c000},{0x38e8e000},{0x38e90000},{0x38e92000},{0x38e94000},{0x38e96000},{0x38e98000},{0x38e9a000},{0x38e9c000},{0x38e9e000},{0x38ea0000},{0x38ea2000},{0x38ea4000},{0x38ea6000},{0x38ea8000},{0x38eaa000},{0x38eac000},{0x38eae000},{0x38eb0000},{0x38eb2000},{0x38eb4000},{0x38eb6000},{0x38eb8000},{0x38eba000},{0x38ebc000},{0x38ebe000}, -{0x38ec0000},{0x38ec2000},{0x38ec4000},{0x38ec6000},{0x38ec8000},{0x38eca000},{0x38ecc000},{0x38ece000},{0x38ed0000},{0x38ed2000},{0x38ed4000},{0x38ed6000},{0x38ed8000},{0x38eda000},{0x38edc000},{0x38ede000},{0x38ee0000},{0x38ee2000},{0x38ee4000},{0x38ee6000},{0x38ee8000},{0x38eea000},{0x38eec000},{0x38eee000},{0x38ef0000},{0x38ef2000},{0x38ef4000},{0x38ef6000},{0x38ef8000},{0x38efa000},{0x38efc000},{0x38efe000}, -{0x38f00000},{0x38f02000},{0x38f04000},{0x38f06000},{0x38f08000},{0x38f0a000},{0x38f0c000},{0x38f0e000},{0x38f10000},{0x38f12000},{0x38f14000},{0x38f16000},{0x38f18000},{0x38f1a000},{0x38f1c000},{0x38f1e000},{0x38f20000},{0x38f22000},{0x38f24000},{0x38f26000},{0x38f28000},{0x38f2a000},{0x38f2c000},{0x38f2e000},{0x38f30000},{0x38f32000},{0x38f34000},{0x38f36000},{0x38f38000},{0x38f3a000},{0x38f3c000},{0x38f3e000}, -{0x38f40000},{0x38f42000},{0x38f44000},{0x38f46000},{0x38f48000},{0x38f4a000},{0x38f4c000},{0x38f4e000},{0x38f50000},{0x38f52000},{0x38f54000},{0x38f56000},{0x38f58000},{0x38f5a000},{0x38f5c000},{0x38f5e000},{0x38f60000},{0x38f62000},{0x38f64000},{0x38f66000},{0x38f68000},{0x38f6a000},{0x38f6c000},{0x38f6e000},{0x38f70000},{0x38f72000},{0x38f74000},{0x38f76000},{0x38f78000},{0x38f7a000},{0x38f7c000},{0x38f7e000}, -{0x38f80000},{0x38f82000},{0x38f84000},{0x38f86000},{0x38f88000},{0x38f8a000},{0x38f8c000},{0x38f8e000},{0x38f90000},{0x38f92000},{0x38f94000},{0x38f96000},{0x38f98000},{0x38f9a000},{0x38f9c000},{0x38f9e000},{0x38fa0000},{0x38fa2000},{0x38fa4000},{0x38fa6000},{0x38fa8000},{0x38faa000},{0x38fac000},{0x38fae000},{0x38fb0000},{0x38fb2000},{0x38fb4000},{0x38fb6000},{0x38fb8000},{0x38fba000},{0x38fbc000},{0x38fbe000}, -{0x38fc0000},{0x38fc2000},{0x38fc4000},{0x38fc6000},{0x38fc8000},{0x38fca000},{0x38fcc000},{0x38fce000},{0x38fd0000},{0x38fd2000},{0x38fd4000},{0x38fd6000},{0x38fd8000},{0x38fda000},{0x38fdc000},{0x38fde000},{0x38fe0000},{0x38fe2000},{0x38fe4000},{0x38fe6000},{0x38fe8000},{0x38fea000},{0x38fec000},{0x38fee000},{0x38ff0000},{0x38ff2000},{0x38ff4000},{0x38ff6000},{0x38ff8000},{0x38ffa000},{0x38ffc000},{0x38ffe000}, -{0x39000000},{0x39002000},{0x39004000},{0x39006000},{0x39008000},{0x3900a000},{0x3900c000},{0x3900e000},{0x39010000},{0x39012000},{0x39014000},{0x39016000},{0x39018000},{0x3901a000},{0x3901c000},{0x3901e000},{0x39020000},{0x39022000},{0x39024000},{0x39026000},{0x39028000},{0x3902a000},{0x3902c000},{0x3902e000},{0x39030000},{0x39032000},{0x39034000},{0x39036000},{0x39038000},{0x3903a000},{0x3903c000},{0x3903e000}, -{0x39040000},{0x39042000},{0x39044000},{0x39046000},{0x39048000},{0x3904a000},{0x3904c000},{0x3904e000},{0x39050000},{0x39052000},{0x39054000},{0x39056000},{0x39058000},{0x3905a000},{0x3905c000},{0x3905e000},{0x39060000},{0x39062000},{0x39064000},{0x39066000},{0x39068000},{0x3906a000},{0x3906c000},{0x3906e000},{0x39070000},{0x39072000},{0x39074000},{0x39076000},{0x39078000},{0x3907a000},{0x3907c000},{0x3907e000}, -{0x39080000},{0x39082000},{0x39084000},{0x39086000},{0x39088000},{0x3908a000},{0x3908c000},{0x3908e000},{0x39090000},{0x39092000},{0x39094000},{0x39096000},{0x39098000},{0x3909a000},{0x3909c000},{0x3909e000},{0x390a0000},{0x390a2000},{0x390a4000},{0x390a6000},{0x390a8000},{0x390aa000},{0x390ac000},{0x390ae000},{0x390b0000},{0x390b2000},{0x390b4000},{0x390b6000},{0x390b8000},{0x390ba000},{0x390bc000},{0x390be000}, -{0x390c0000},{0x390c2000},{0x390c4000},{0x390c6000},{0x390c8000},{0x390ca000},{0x390cc000},{0x390ce000},{0x390d0000},{0x390d2000},{0x390d4000},{0x390d6000},{0x390d8000},{0x390da000},{0x390dc000},{0x390de000},{0x390e0000},{0x390e2000},{0x390e4000},{0x390e6000},{0x390e8000},{0x390ea000},{0x390ec000},{0x390ee000},{0x390f0000},{0x390f2000},{0x390f4000},{0x390f6000},{0x390f8000},{0x390fa000},{0x390fc000},{0x390fe000}, -{0x39100000},{0x39102000},{0x39104000},{0x39106000},{0x39108000},{0x3910a000},{0x3910c000},{0x3910e000},{0x39110000},{0x39112000},{0x39114000},{0x39116000},{0x39118000},{0x3911a000},{0x3911c000},{0x3911e000},{0x39120000},{0x39122000},{0x39124000},{0x39126000},{0x39128000},{0x3912a000},{0x3912c000},{0x3912e000},{0x39130000},{0x39132000},{0x39134000},{0x39136000},{0x39138000},{0x3913a000},{0x3913c000},{0x3913e000}, -{0x39140000},{0x39142000},{0x39144000},{0x39146000},{0x39148000},{0x3914a000},{0x3914c000},{0x3914e000},{0x39150000},{0x39152000},{0x39154000},{0x39156000},{0x39158000},{0x3915a000},{0x3915c000},{0x3915e000},{0x39160000},{0x39162000},{0x39164000},{0x39166000},{0x39168000},{0x3916a000},{0x3916c000},{0x3916e000},{0x39170000},{0x39172000},{0x39174000},{0x39176000},{0x39178000},{0x3917a000},{0x3917c000},{0x3917e000}, -{0x39180000},{0x39182000},{0x39184000},{0x39186000},{0x39188000},{0x3918a000},{0x3918c000},{0x3918e000},{0x39190000},{0x39192000},{0x39194000},{0x39196000},{0x39198000},{0x3919a000},{0x3919c000},{0x3919e000},{0x391a0000},{0x391a2000},{0x391a4000},{0x391a6000},{0x391a8000},{0x391aa000},{0x391ac000},{0x391ae000},{0x391b0000},{0x391b2000},{0x391b4000},{0x391b6000},{0x391b8000},{0x391ba000},{0x391bc000},{0x391be000}, -{0x391c0000},{0x391c2000},{0x391c4000},{0x391c6000},{0x391c8000},{0x391ca000},{0x391cc000},{0x391ce000},{0x391d0000},{0x391d2000},{0x391d4000},{0x391d6000},{0x391d8000},{0x391da000},{0x391dc000},{0x391de000},{0x391e0000},{0x391e2000},{0x391e4000},{0x391e6000},{0x391e8000},{0x391ea000},{0x391ec000},{0x391ee000},{0x391f0000},{0x391f2000},{0x391f4000},{0x391f6000},{0x391f8000},{0x391fa000},{0x391fc000},{0x391fe000}, -{0x39200000},{0x39202000},{0x39204000},{0x39206000},{0x39208000},{0x3920a000},{0x3920c000},{0x3920e000},{0x39210000},{0x39212000},{0x39214000},{0x39216000},{0x39218000},{0x3921a000},{0x3921c000},{0x3921e000},{0x39220000},{0x39222000},{0x39224000},{0x39226000},{0x39228000},{0x3922a000},{0x3922c000},{0x3922e000},{0x39230000},{0x39232000},{0x39234000},{0x39236000},{0x39238000},{0x3923a000},{0x3923c000},{0x3923e000}, -{0x39240000},{0x39242000},{0x39244000},{0x39246000},{0x39248000},{0x3924a000},{0x3924c000},{0x3924e000},{0x39250000},{0x39252000},{0x39254000},{0x39256000},{0x39258000},{0x3925a000},{0x3925c000},{0x3925e000},{0x39260000},{0x39262000},{0x39264000},{0x39266000},{0x39268000},{0x3926a000},{0x3926c000},{0x3926e000},{0x39270000},{0x39272000},{0x39274000},{0x39276000},{0x39278000},{0x3927a000},{0x3927c000},{0x3927e000}, -{0x39280000},{0x39282000},{0x39284000},{0x39286000},{0x39288000},{0x3928a000},{0x3928c000},{0x3928e000},{0x39290000},{0x39292000},{0x39294000},{0x39296000},{0x39298000},{0x3929a000},{0x3929c000},{0x3929e000},{0x392a0000},{0x392a2000},{0x392a4000},{0x392a6000},{0x392a8000},{0x392aa000},{0x392ac000},{0x392ae000},{0x392b0000},{0x392b2000},{0x392b4000},{0x392b6000},{0x392b8000},{0x392ba000},{0x392bc000},{0x392be000}, -{0x392c0000},{0x392c2000},{0x392c4000},{0x392c6000},{0x392c8000},{0x392ca000},{0x392cc000},{0x392ce000},{0x392d0000},{0x392d2000},{0x392d4000},{0x392d6000},{0x392d8000},{0x392da000},{0x392dc000},{0x392de000},{0x392e0000},{0x392e2000},{0x392e4000},{0x392e6000},{0x392e8000},{0x392ea000},{0x392ec000},{0x392ee000},{0x392f0000},{0x392f2000},{0x392f4000},{0x392f6000},{0x392f8000},{0x392fa000},{0x392fc000},{0x392fe000}, -{0x39300000},{0x39302000},{0x39304000},{0x39306000},{0x39308000},{0x3930a000},{0x3930c000},{0x3930e000},{0x39310000},{0x39312000},{0x39314000},{0x39316000},{0x39318000},{0x3931a000},{0x3931c000},{0x3931e000},{0x39320000},{0x39322000},{0x39324000},{0x39326000},{0x39328000},{0x3932a000},{0x3932c000},{0x3932e000},{0x39330000},{0x39332000},{0x39334000},{0x39336000},{0x39338000},{0x3933a000},{0x3933c000},{0x3933e000}, -{0x39340000},{0x39342000},{0x39344000},{0x39346000},{0x39348000},{0x3934a000},{0x3934c000},{0x3934e000},{0x39350000},{0x39352000},{0x39354000},{0x39356000},{0x39358000},{0x3935a000},{0x3935c000},{0x3935e000},{0x39360000},{0x39362000},{0x39364000},{0x39366000},{0x39368000},{0x3936a000},{0x3936c000},{0x3936e000},{0x39370000},{0x39372000},{0x39374000},{0x39376000},{0x39378000},{0x3937a000},{0x3937c000},{0x3937e000}, -{0x39380000},{0x39382000},{0x39384000},{0x39386000},{0x39388000},{0x3938a000},{0x3938c000},{0x3938e000},{0x39390000},{0x39392000},{0x39394000},{0x39396000},{0x39398000},{0x3939a000},{0x3939c000},{0x3939e000},{0x393a0000},{0x393a2000},{0x393a4000},{0x393a6000},{0x393a8000},{0x393aa000},{0x393ac000},{0x393ae000},{0x393b0000},{0x393b2000},{0x393b4000},{0x393b6000},{0x393b8000},{0x393ba000},{0x393bc000},{0x393be000}, -{0x393c0000},{0x393c2000},{0x393c4000},{0x393c6000},{0x393c8000},{0x393ca000},{0x393cc000},{0x393ce000},{0x393d0000},{0x393d2000},{0x393d4000},{0x393d6000},{0x393d8000},{0x393da000},{0x393dc000},{0x393de000},{0x393e0000},{0x393e2000},{0x393e4000},{0x393e6000},{0x393e8000},{0x393ea000},{0x393ec000},{0x393ee000},{0x393f0000},{0x393f2000},{0x393f4000},{0x393f6000},{0x393f8000},{0x393fa000},{0x393fc000},{0x393fe000}, -{0x39400000},{0x39402000},{0x39404000},{0x39406000},{0x39408000},{0x3940a000},{0x3940c000},{0x3940e000},{0x39410000},{0x39412000},{0x39414000},{0x39416000},{0x39418000},{0x3941a000},{0x3941c000},{0x3941e000},{0x39420000},{0x39422000},{0x39424000},{0x39426000},{0x39428000},{0x3942a000},{0x3942c000},{0x3942e000},{0x39430000},{0x39432000},{0x39434000},{0x39436000},{0x39438000},{0x3943a000},{0x3943c000},{0x3943e000}, -{0x39440000},{0x39442000},{0x39444000},{0x39446000},{0x39448000},{0x3944a000},{0x3944c000},{0x3944e000},{0x39450000},{0x39452000},{0x39454000},{0x39456000},{0x39458000},{0x3945a000},{0x3945c000},{0x3945e000},{0x39460000},{0x39462000},{0x39464000},{0x39466000},{0x39468000},{0x3946a000},{0x3946c000},{0x3946e000},{0x39470000},{0x39472000},{0x39474000},{0x39476000},{0x39478000},{0x3947a000},{0x3947c000},{0x3947e000}, -{0x39480000},{0x39482000},{0x39484000},{0x39486000},{0x39488000},{0x3948a000},{0x3948c000},{0x3948e000},{0x39490000},{0x39492000},{0x39494000},{0x39496000},{0x39498000},{0x3949a000},{0x3949c000},{0x3949e000},{0x394a0000},{0x394a2000},{0x394a4000},{0x394a6000},{0x394a8000},{0x394aa000},{0x394ac000},{0x394ae000},{0x394b0000},{0x394b2000},{0x394b4000},{0x394b6000},{0x394b8000},{0x394ba000},{0x394bc000},{0x394be000}, -{0x394c0000},{0x394c2000},{0x394c4000},{0x394c6000},{0x394c8000},{0x394ca000},{0x394cc000},{0x394ce000},{0x394d0000},{0x394d2000},{0x394d4000},{0x394d6000},{0x394d8000},{0x394da000},{0x394dc000},{0x394de000},{0x394e0000},{0x394e2000},{0x394e4000},{0x394e6000},{0x394e8000},{0x394ea000},{0x394ec000},{0x394ee000},{0x394f0000},{0x394f2000},{0x394f4000},{0x394f6000},{0x394f8000},{0x394fa000},{0x394fc000},{0x394fe000}, -{0x39500000},{0x39502000},{0x39504000},{0x39506000},{0x39508000},{0x3950a000},{0x3950c000},{0x3950e000},{0x39510000},{0x39512000},{0x39514000},{0x39516000},{0x39518000},{0x3951a000},{0x3951c000},{0x3951e000},{0x39520000},{0x39522000},{0x39524000},{0x39526000},{0x39528000},{0x3952a000},{0x3952c000},{0x3952e000},{0x39530000},{0x39532000},{0x39534000},{0x39536000},{0x39538000},{0x3953a000},{0x3953c000},{0x3953e000}, -{0x39540000},{0x39542000},{0x39544000},{0x39546000},{0x39548000},{0x3954a000},{0x3954c000},{0x3954e000},{0x39550000},{0x39552000},{0x39554000},{0x39556000},{0x39558000},{0x3955a000},{0x3955c000},{0x3955e000},{0x39560000},{0x39562000},{0x39564000},{0x39566000},{0x39568000},{0x3956a000},{0x3956c000},{0x3956e000},{0x39570000},{0x39572000},{0x39574000},{0x39576000},{0x39578000},{0x3957a000},{0x3957c000},{0x3957e000}, -{0x39580000},{0x39582000},{0x39584000},{0x39586000},{0x39588000},{0x3958a000},{0x3958c000},{0x3958e000},{0x39590000},{0x39592000},{0x39594000},{0x39596000},{0x39598000},{0x3959a000},{0x3959c000},{0x3959e000},{0x395a0000},{0x395a2000},{0x395a4000},{0x395a6000},{0x395a8000},{0x395aa000},{0x395ac000},{0x395ae000},{0x395b0000},{0x395b2000},{0x395b4000},{0x395b6000},{0x395b8000},{0x395ba000},{0x395bc000},{0x395be000}, -{0x395c0000},{0x395c2000},{0x395c4000},{0x395c6000},{0x395c8000},{0x395ca000},{0x395cc000},{0x395ce000},{0x395d0000},{0x395d2000},{0x395d4000},{0x395d6000},{0x395d8000},{0x395da000},{0x395dc000},{0x395de000},{0x395e0000},{0x395e2000},{0x395e4000},{0x395e6000},{0x395e8000},{0x395ea000},{0x395ec000},{0x395ee000},{0x395f0000},{0x395f2000},{0x395f4000},{0x395f6000},{0x395f8000},{0x395fa000},{0x395fc000},{0x395fe000}, -{0x39600000},{0x39602000},{0x39604000},{0x39606000},{0x39608000},{0x3960a000},{0x3960c000},{0x3960e000},{0x39610000},{0x39612000},{0x39614000},{0x39616000},{0x39618000},{0x3961a000},{0x3961c000},{0x3961e000},{0x39620000},{0x39622000},{0x39624000},{0x39626000},{0x39628000},{0x3962a000},{0x3962c000},{0x3962e000},{0x39630000},{0x39632000},{0x39634000},{0x39636000},{0x39638000},{0x3963a000},{0x3963c000},{0x3963e000}, -{0x39640000},{0x39642000},{0x39644000},{0x39646000},{0x39648000},{0x3964a000},{0x3964c000},{0x3964e000},{0x39650000},{0x39652000},{0x39654000},{0x39656000},{0x39658000},{0x3965a000},{0x3965c000},{0x3965e000},{0x39660000},{0x39662000},{0x39664000},{0x39666000},{0x39668000},{0x3966a000},{0x3966c000},{0x3966e000},{0x39670000},{0x39672000},{0x39674000},{0x39676000},{0x39678000},{0x3967a000},{0x3967c000},{0x3967e000}, -{0x39680000},{0x39682000},{0x39684000},{0x39686000},{0x39688000},{0x3968a000},{0x3968c000},{0x3968e000},{0x39690000},{0x39692000},{0x39694000},{0x39696000},{0x39698000},{0x3969a000},{0x3969c000},{0x3969e000},{0x396a0000},{0x396a2000},{0x396a4000},{0x396a6000},{0x396a8000},{0x396aa000},{0x396ac000},{0x396ae000},{0x396b0000},{0x396b2000},{0x396b4000},{0x396b6000},{0x396b8000},{0x396ba000},{0x396bc000},{0x396be000}, -{0x396c0000},{0x396c2000},{0x396c4000},{0x396c6000},{0x396c8000},{0x396ca000},{0x396cc000},{0x396ce000},{0x396d0000},{0x396d2000},{0x396d4000},{0x396d6000},{0x396d8000},{0x396da000},{0x396dc000},{0x396de000},{0x396e0000},{0x396e2000},{0x396e4000},{0x396e6000},{0x396e8000},{0x396ea000},{0x396ec000},{0x396ee000},{0x396f0000},{0x396f2000},{0x396f4000},{0x396f6000},{0x396f8000},{0x396fa000},{0x396fc000},{0x396fe000}, -{0x39700000},{0x39702000},{0x39704000},{0x39706000},{0x39708000},{0x3970a000},{0x3970c000},{0x3970e000},{0x39710000},{0x39712000},{0x39714000},{0x39716000},{0x39718000},{0x3971a000},{0x3971c000},{0x3971e000},{0x39720000},{0x39722000},{0x39724000},{0x39726000},{0x39728000},{0x3972a000},{0x3972c000},{0x3972e000},{0x39730000},{0x39732000},{0x39734000},{0x39736000},{0x39738000},{0x3973a000},{0x3973c000},{0x3973e000}, -{0x39740000},{0x39742000},{0x39744000},{0x39746000},{0x39748000},{0x3974a000},{0x3974c000},{0x3974e000},{0x39750000},{0x39752000},{0x39754000},{0x39756000},{0x39758000},{0x3975a000},{0x3975c000},{0x3975e000},{0x39760000},{0x39762000},{0x39764000},{0x39766000},{0x39768000},{0x3976a000},{0x3976c000},{0x3976e000},{0x39770000},{0x39772000},{0x39774000},{0x39776000},{0x39778000},{0x3977a000},{0x3977c000},{0x3977e000}, -{0x39780000},{0x39782000},{0x39784000},{0x39786000},{0x39788000},{0x3978a000},{0x3978c000},{0x3978e000},{0x39790000},{0x39792000},{0x39794000},{0x39796000},{0x39798000},{0x3979a000},{0x3979c000},{0x3979e000},{0x397a0000},{0x397a2000},{0x397a4000},{0x397a6000},{0x397a8000},{0x397aa000},{0x397ac000},{0x397ae000},{0x397b0000},{0x397b2000},{0x397b4000},{0x397b6000},{0x397b8000},{0x397ba000},{0x397bc000},{0x397be000}, -{0x397c0000},{0x397c2000},{0x397c4000},{0x397c6000},{0x397c8000},{0x397ca000},{0x397cc000},{0x397ce000},{0x397d0000},{0x397d2000},{0x397d4000},{0x397d6000},{0x397d8000},{0x397da000},{0x397dc000},{0x397de000},{0x397e0000},{0x397e2000},{0x397e4000},{0x397e6000},{0x397e8000},{0x397ea000},{0x397ec000},{0x397ee000},{0x397f0000},{0x397f2000},{0x397f4000},{0x397f6000},{0x397f8000},{0x397fa000},{0x397fc000},{0x397fe000}, -{0x39800000},{0x39802000},{0x39804000},{0x39806000},{0x39808000},{0x3980a000},{0x3980c000},{0x3980e000},{0x39810000},{0x39812000},{0x39814000},{0x39816000},{0x39818000},{0x3981a000},{0x3981c000},{0x3981e000},{0x39820000},{0x39822000},{0x39824000},{0x39826000},{0x39828000},{0x3982a000},{0x3982c000},{0x3982e000},{0x39830000},{0x39832000},{0x39834000},{0x39836000},{0x39838000},{0x3983a000},{0x3983c000},{0x3983e000}, -{0x39840000},{0x39842000},{0x39844000},{0x39846000},{0x39848000},{0x3984a000},{0x3984c000},{0x3984e000},{0x39850000},{0x39852000},{0x39854000},{0x39856000},{0x39858000},{0x3985a000},{0x3985c000},{0x3985e000},{0x39860000},{0x39862000},{0x39864000},{0x39866000},{0x39868000},{0x3986a000},{0x3986c000},{0x3986e000},{0x39870000},{0x39872000},{0x39874000},{0x39876000},{0x39878000},{0x3987a000},{0x3987c000},{0x3987e000}, -{0x39880000},{0x39882000},{0x39884000},{0x39886000},{0x39888000},{0x3988a000},{0x3988c000},{0x3988e000},{0x39890000},{0x39892000},{0x39894000},{0x39896000},{0x39898000},{0x3989a000},{0x3989c000},{0x3989e000},{0x398a0000},{0x398a2000},{0x398a4000},{0x398a6000},{0x398a8000},{0x398aa000},{0x398ac000},{0x398ae000},{0x398b0000},{0x398b2000},{0x398b4000},{0x398b6000},{0x398b8000},{0x398ba000},{0x398bc000},{0x398be000}, -{0x398c0000},{0x398c2000},{0x398c4000},{0x398c6000},{0x398c8000},{0x398ca000},{0x398cc000},{0x398ce000},{0x398d0000},{0x398d2000},{0x398d4000},{0x398d6000},{0x398d8000},{0x398da000},{0x398dc000},{0x398de000},{0x398e0000},{0x398e2000},{0x398e4000},{0x398e6000},{0x398e8000},{0x398ea000},{0x398ec000},{0x398ee000},{0x398f0000},{0x398f2000},{0x398f4000},{0x398f6000},{0x398f8000},{0x398fa000},{0x398fc000},{0x398fe000}, -{0x39900000},{0x39902000},{0x39904000},{0x39906000},{0x39908000},{0x3990a000},{0x3990c000},{0x3990e000},{0x39910000},{0x39912000},{0x39914000},{0x39916000},{0x39918000},{0x3991a000},{0x3991c000},{0x3991e000},{0x39920000},{0x39922000},{0x39924000},{0x39926000},{0x39928000},{0x3992a000},{0x3992c000},{0x3992e000},{0x39930000},{0x39932000},{0x39934000},{0x39936000},{0x39938000},{0x3993a000},{0x3993c000},{0x3993e000}, -{0x39940000},{0x39942000},{0x39944000},{0x39946000},{0x39948000},{0x3994a000},{0x3994c000},{0x3994e000},{0x39950000},{0x39952000},{0x39954000},{0x39956000},{0x39958000},{0x3995a000},{0x3995c000},{0x3995e000},{0x39960000},{0x39962000},{0x39964000},{0x39966000},{0x39968000},{0x3996a000},{0x3996c000},{0x3996e000},{0x39970000},{0x39972000},{0x39974000},{0x39976000},{0x39978000},{0x3997a000},{0x3997c000},{0x3997e000}, -{0x39980000},{0x39982000},{0x39984000},{0x39986000},{0x39988000},{0x3998a000},{0x3998c000},{0x3998e000},{0x39990000},{0x39992000},{0x39994000},{0x39996000},{0x39998000},{0x3999a000},{0x3999c000},{0x3999e000},{0x399a0000},{0x399a2000},{0x399a4000},{0x399a6000},{0x399a8000},{0x399aa000},{0x399ac000},{0x399ae000},{0x399b0000},{0x399b2000},{0x399b4000},{0x399b6000},{0x399b8000},{0x399ba000},{0x399bc000},{0x399be000}, -{0x399c0000},{0x399c2000},{0x399c4000},{0x399c6000},{0x399c8000},{0x399ca000},{0x399cc000},{0x399ce000},{0x399d0000},{0x399d2000},{0x399d4000},{0x399d6000},{0x399d8000},{0x399da000},{0x399dc000},{0x399de000},{0x399e0000},{0x399e2000},{0x399e4000},{0x399e6000},{0x399e8000},{0x399ea000},{0x399ec000},{0x399ee000},{0x399f0000},{0x399f2000},{0x399f4000},{0x399f6000},{0x399f8000},{0x399fa000},{0x399fc000},{0x399fe000}, -{0x39a00000},{0x39a02000},{0x39a04000},{0x39a06000},{0x39a08000},{0x39a0a000},{0x39a0c000},{0x39a0e000},{0x39a10000},{0x39a12000},{0x39a14000},{0x39a16000},{0x39a18000},{0x39a1a000},{0x39a1c000},{0x39a1e000},{0x39a20000},{0x39a22000},{0x39a24000},{0x39a26000},{0x39a28000},{0x39a2a000},{0x39a2c000},{0x39a2e000},{0x39a30000},{0x39a32000},{0x39a34000},{0x39a36000},{0x39a38000},{0x39a3a000},{0x39a3c000},{0x39a3e000}, -{0x39a40000},{0x39a42000},{0x39a44000},{0x39a46000},{0x39a48000},{0x39a4a000},{0x39a4c000},{0x39a4e000},{0x39a50000},{0x39a52000},{0x39a54000},{0x39a56000},{0x39a58000},{0x39a5a000},{0x39a5c000},{0x39a5e000},{0x39a60000},{0x39a62000},{0x39a64000},{0x39a66000},{0x39a68000},{0x39a6a000},{0x39a6c000},{0x39a6e000},{0x39a70000},{0x39a72000},{0x39a74000},{0x39a76000},{0x39a78000},{0x39a7a000},{0x39a7c000},{0x39a7e000}, -{0x39a80000},{0x39a82000},{0x39a84000},{0x39a86000},{0x39a88000},{0x39a8a000},{0x39a8c000},{0x39a8e000},{0x39a90000},{0x39a92000},{0x39a94000},{0x39a96000},{0x39a98000},{0x39a9a000},{0x39a9c000},{0x39a9e000},{0x39aa0000},{0x39aa2000},{0x39aa4000},{0x39aa6000},{0x39aa8000},{0x39aaa000},{0x39aac000},{0x39aae000},{0x39ab0000},{0x39ab2000},{0x39ab4000},{0x39ab6000},{0x39ab8000},{0x39aba000},{0x39abc000},{0x39abe000}, -{0x39ac0000},{0x39ac2000},{0x39ac4000},{0x39ac6000},{0x39ac8000},{0x39aca000},{0x39acc000},{0x39ace000},{0x39ad0000},{0x39ad2000},{0x39ad4000},{0x39ad6000},{0x39ad8000},{0x39ada000},{0x39adc000},{0x39ade000},{0x39ae0000},{0x39ae2000},{0x39ae4000},{0x39ae6000},{0x39ae8000},{0x39aea000},{0x39aec000},{0x39aee000},{0x39af0000},{0x39af2000},{0x39af4000},{0x39af6000},{0x39af8000},{0x39afa000},{0x39afc000},{0x39afe000}, -{0x39b00000},{0x39b02000},{0x39b04000},{0x39b06000},{0x39b08000},{0x39b0a000},{0x39b0c000},{0x39b0e000},{0x39b10000},{0x39b12000},{0x39b14000},{0x39b16000},{0x39b18000},{0x39b1a000},{0x39b1c000},{0x39b1e000},{0x39b20000},{0x39b22000},{0x39b24000},{0x39b26000},{0x39b28000},{0x39b2a000},{0x39b2c000},{0x39b2e000},{0x39b30000},{0x39b32000},{0x39b34000},{0x39b36000},{0x39b38000},{0x39b3a000},{0x39b3c000},{0x39b3e000}, -{0x39b40000},{0x39b42000},{0x39b44000},{0x39b46000},{0x39b48000},{0x39b4a000},{0x39b4c000},{0x39b4e000},{0x39b50000},{0x39b52000},{0x39b54000},{0x39b56000},{0x39b58000},{0x39b5a000},{0x39b5c000},{0x39b5e000},{0x39b60000},{0x39b62000},{0x39b64000},{0x39b66000},{0x39b68000},{0x39b6a000},{0x39b6c000},{0x39b6e000},{0x39b70000},{0x39b72000},{0x39b74000},{0x39b76000},{0x39b78000},{0x39b7a000},{0x39b7c000},{0x39b7e000}, -{0x39b80000},{0x39b82000},{0x39b84000},{0x39b86000},{0x39b88000},{0x39b8a000},{0x39b8c000},{0x39b8e000},{0x39b90000},{0x39b92000},{0x39b94000},{0x39b96000},{0x39b98000},{0x39b9a000},{0x39b9c000},{0x39b9e000},{0x39ba0000},{0x39ba2000},{0x39ba4000},{0x39ba6000},{0x39ba8000},{0x39baa000},{0x39bac000},{0x39bae000},{0x39bb0000},{0x39bb2000},{0x39bb4000},{0x39bb6000},{0x39bb8000},{0x39bba000},{0x39bbc000},{0x39bbe000}, -{0x39bc0000},{0x39bc2000},{0x39bc4000},{0x39bc6000},{0x39bc8000},{0x39bca000},{0x39bcc000},{0x39bce000},{0x39bd0000},{0x39bd2000},{0x39bd4000},{0x39bd6000},{0x39bd8000},{0x39bda000},{0x39bdc000},{0x39bde000},{0x39be0000},{0x39be2000},{0x39be4000},{0x39be6000},{0x39be8000},{0x39bea000},{0x39bec000},{0x39bee000},{0x39bf0000},{0x39bf2000},{0x39bf4000},{0x39bf6000},{0x39bf8000},{0x39bfa000},{0x39bfc000},{0x39bfe000}, -{0x39c00000},{0x39c02000},{0x39c04000},{0x39c06000},{0x39c08000},{0x39c0a000},{0x39c0c000},{0x39c0e000},{0x39c10000},{0x39c12000},{0x39c14000},{0x39c16000},{0x39c18000},{0x39c1a000},{0x39c1c000},{0x39c1e000},{0x39c20000},{0x39c22000},{0x39c24000},{0x39c26000},{0x39c28000},{0x39c2a000},{0x39c2c000},{0x39c2e000},{0x39c30000},{0x39c32000},{0x39c34000},{0x39c36000},{0x39c38000},{0x39c3a000},{0x39c3c000},{0x39c3e000}, -{0x39c40000},{0x39c42000},{0x39c44000},{0x39c46000},{0x39c48000},{0x39c4a000},{0x39c4c000},{0x39c4e000},{0x39c50000},{0x39c52000},{0x39c54000},{0x39c56000},{0x39c58000},{0x39c5a000},{0x39c5c000},{0x39c5e000},{0x39c60000},{0x39c62000},{0x39c64000},{0x39c66000},{0x39c68000},{0x39c6a000},{0x39c6c000},{0x39c6e000},{0x39c70000},{0x39c72000},{0x39c74000},{0x39c76000},{0x39c78000},{0x39c7a000},{0x39c7c000},{0x39c7e000}, -{0x39c80000},{0x39c82000},{0x39c84000},{0x39c86000},{0x39c88000},{0x39c8a000},{0x39c8c000},{0x39c8e000},{0x39c90000},{0x39c92000},{0x39c94000},{0x39c96000},{0x39c98000},{0x39c9a000},{0x39c9c000},{0x39c9e000},{0x39ca0000},{0x39ca2000},{0x39ca4000},{0x39ca6000},{0x39ca8000},{0x39caa000},{0x39cac000},{0x39cae000},{0x39cb0000},{0x39cb2000},{0x39cb4000},{0x39cb6000},{0x39cb8000},{0x39cba000},{0x39cbc000},{0x39cbe000}, -{0x39cc0000},{0x39cc2000},{0x39cc4000},{0x39cc6000},{0x39cc8000},{0x39cca000},{0x39ccc000},{0x39cce000},{0x39cd0000},{0x39cd2000},{0x39cd4000},{0x39cd6000},{0x39cd8000},{0x39cda000},{0x39cdc000},{0x39cde000},{0x39ce0000},{0x39ce2000},{0x39ce4000},{0x39ce6000},{0x39ce8000},{0x39cea000},{0x39cec000},{0x39cee000},{0x39cf0000},{0x39cf2000},{0x39cf4000},{0x39cf6000},{0x39cf8000},{0x39cfa000},{0x39cfc000},{0x39cfe000}, -{0x39d00000},{0x39d02000},{0x39d04000},{0x39d06000},{0x39d08000},{0x39d0a000},{0x39d0c000},{0x39d0e000},{0x39d10000},{0x39d12000},{0x39d14000},{0x39d16000},{0x39d18000},{0x39d1a000},{0x39d1c000},{0x39d1e000},{0x39d20000},{0x39d22000},{0x39d24000},{0x39d26000},{0x39d28000},{0x39d2a000},{0x39d2c000},{0x39d2e000},{0x39d30000},{0x39d32000},{0x39d34000},{0x39d36000},{0x39d38000},{0x39d3a000},{0x39d3c000},{0x39d3e000}, -{0x39d40000},{0x39d42000},{0x39d44000},{0x39d46000},{0x39d48000},{0x39d4a000},{0x39d4c000},{0x39d4e000},{0x39d50000},{0x39d52000},{0x39d54000},{0x39d56000},{0x39d58000},{0x39d5a000},{0x39d5c000},{0x39d5e000},{0x39d60000},{0x39d62000},{0x39d64000},{0x39d66000},{0x39d68000},{0x39d6a000},{0x39d6c000},{0x39d6e000},{0x39d70000},{0x39d72000},{0x39d74000},{0x39d76000},{0x39d78000},{0x39d7a000},{0x39d7c000},{0x39d7e000}, -{0x39d80000},{0x39d82000},{0x39d84000},{0x39d86000},{0x39d88000},{0x39d8a000},{0x39d8c000},{0x39d8e000},{0x39d90000},{0x39d92000},{0x39d94000},{0x39d96000},{0x39d98000},{0x39d9a000},{0x39d9c000},{0x39d9e000},{0x39da0000},{0x39da2000},{0x39da4000},{0x39da6000},{0x39da8000},{0x39daa000},{0x39dac000},{0x39dae000},{0x39db0000},{0x39db2000},{0x39db4000},{0x39db6000},{0x39db8000},{0x39dba000},{0x39dbc000},{0x39dbe000}, -{0x39dc0000},{0x39dc2000},{0x39dc4000},{0x39dc6000},{0x39dc8000},{0x39dca000},{0x39dcc000},{0x39dce000},{0x39dd0000},{0x39dd2000},{0x39dd4000},{0x39dd6000},{0x39dd8000},{0x39dda000},{0x39ddc000},{0x39dde000},{0x39de0000},{0x39de2000},{0x39de4000},{0x39de6000},{0x39de8000},{0x39dea000},{0x39dec000},{0x39dee000},{0x39df0000},{0x39df2000},{0x39df4000},{0x39df6000},{0x39df8000},{0x39dfa000},{0x39dfc000},{0x39dfe000}, -{0x39e00000},{0x39e02000},{0x39e04000},{0x39e06000},{0x39e08000},{0x39e0a000},{0x39e0c000},{0x39e0e000},{0x39e10000},{0x39e12000},{0x39e14000},{0x39e16000},{0x39e18000},{0x39e1a000},{0x39e1c000},{0x39e1e000},{0x39e20000},{0x39e22000},{0x39e24000},{0x39e26000},{0x39e28000},{0x39e2a000},{0x39e2c000},{0x39e2e000},{0x39e30000},{0x39e32000},{0x39e34000},{0x39e36000},{0x39e38000},{0x39e3a000},{0x39e3c000},{0x39e3e000}, -{0x39e40000},{0x39e42000},{0x39e44000},{0x39e46000},{0x39e48000},{0x39e4a000},{0x39e4c000},{0x39e4e000},{0x39e50000},{0x39e52000},{0x39e54000},{0x39e56000},{0x39e58000},{0x39e5a000},{0x39e5c000},{0x39e5e000},{0x39e60000},{0x39e62000},{0x39e64000},{0x39e66000},{0x39e68000},{0x39e6a000},{0x39e6c000},{0x39e6e000},{0x39e70000},{0x39e72000},{0x39e74000},{0x39e76000},{0x39e78000},{0x39e7a000},{0x39e7c000},{0x39e7e000}, -{0x39e80000},{0x39e82000},{0x39e84000},{0x39e86000},{0x39e88000},{0x39e8a000},{0x39e8c000},{0x39e8e000},{0x39e90000},{0x39e92000},{0x39e94000},{0x39e96000},{0x39e98000},{0x39e9a000},{0x39e9c000},{0x39e9e000},{0x39ea0000},{0x39ea2000},{0x39ea4000},{0x39ea6000},{0x39ea8000},{0x39eaa000},{0x39eac000},{0x39eae000},{0x39eb0000},{0x39eb2000},{0x39eb4000},{0x39eb6000},{0x39eb8000},{0x39eba000},{0x39ebc000},{0x39ebe000}, -{0x39ec0000},{0x39ec2000},{0x39ec4000},{0x39ec6000},{0x39ec8000},{0x39eca000},{0x39ecc000},{0x39ece000},{0x39ed0000},{0x39ed2000},{0x39ed4000},{0x39ed6000},{0x39ed8000},{0x39eda000},{0x39edc000},{0x39ede000},{0x39ee0000},{0x39ee2000},{0x39ee4000},{0x39ee6000},{0x39ee8000},{0x39eea000},{0x39eec000},{0x39eee000},{0x39ef0000},{0x39ef2000},{0x39ef4000},{0x39ef6000},{0x39ef8000},{0x39efa000},{0x39efc000},{0x39efe000}, -{0x39f00000},{0x39f02000},{0x39f04000},{0x39f06000},{0x39f08000},{0x39f0a000},{0x39f0c000},{0x39f0e000},{0x39f10000},{0x39f12000},{0x39f14000},{0x39f16000},{0x39f18000},{0x39f1a000},{0x39f1c000},{0x39f1e000},{0x39f20000},{0x39f22000},{0x39f24000},{0x39f26000},{0x39f28000},{0x39f2a000},{0x39f2c000},{0x39f2e000},{0x39f30000},{0x39f32000},{0x39f34000},{0x39f36000},{0x39f38000},{0x39f3a000},{0x39f3c000},{0x39f3e000}, -{0x39f40000},{0x39f42000},{0x39f44000},{0x39f46000},{0x39f48000},{0x39f4a000},{0x39f4c000},{0x39f4e000},{0x39f50000},{0x39f52000},{0x39f54000},{0x39f56000},{0x39f58000},{0x39f5a000},{0x39f5c000},{0x39f5e000},{0x39f60000},{0x39f62000},{0x39f64000},{0x39f66000},{0x39f68000},{0x39f6a000},{0x39f6c000},{0x39f6e000},{0x39f70000},{0x39f72000},{0x39f74000},{0x39f76000},{0x39f78000},{0x39f7a000},{0x39f7c000},{0x39f7e000}, -{0x39f80000},{0x39f82000},{0x39f84000},{0x39f86000},{0x39f88000},{0x39f8a000},{0x39f8c000},{0x39f8e000},{0x39f90000},{0x39f92000},{0x39f94000},{0x39f96000},{0x39f98000},{0x39f9a000},{0x39f9c000},{0x39f9e000},{0x39fa0000},{0x39fa2000},{0x39fa4000},{0x39fa6000},{0x39fa8000},{0x39faa000},{0x39fac000},{0x39fae000},{0x39fb0000},{0x39fb2000},{0x39fb4000},{0x39fb6000},{0x39fb8000},{0x39fba000},{0x39fbc000},{0x39fbe000}, -{0x39fc0000},{0x39fc2000},{0x39fc4000},{0x39fc6000},{0x39fc8000},{0x39fca000},{0x39fcc000},{0x39fce000},{0x39fd0000},{0x39fd2000},{0x39fd4000},{0x39fd6000},{0x39fd8000},{0x39fda000},{0x39fdc000},{0x39fde000},{0x39fe0000},{0x39fe2000},{0x39fe4000},{0x39fe6000},{0x39fe8000},{0x39fea000},{0x39fec000},{0x39fee000},{0x39ff0000},{0x39ff2000},{0x39ff4000},{0x39ff6000},{0x39ff8000},{0x39ffa000},{0x39ffc000},{0x39ffe000}, -{0x3a000000},{0x3a002000},{0x3a004000},{0x3a006000},{0x3a008000},{0x3a00a000},{0x3a00c000},{0x3a00e000},{0x3a010000},{0x3a012000},{0x3a014000},{0x3a016000},{0x3a018000},{0x3a01a000},{0x3a01c000},{0x3a01e000},{0x3a020000},{0x3a022000},{0x3a024000},{0x3a026000},{0x3a028000},{0x3a02a000},{0x3a02c000},{0x3a02e000},{0x3a030000},{0x3a032000},{0x3a034000},{0x3a036000},{0x3a038000},{0x3a03a000},{0x3a03c000},{0x3a03e000}, -{0x3a040000},{0x3a042000},{0x3a044000},{0x3a046000},{0x3a048000},{0x3a04a000},{0x3a04c000},{0x3a04e000},{0x3a050000},{0x3a052000},{0x3a054000},{0x3a056000},{0x3a058000},{0x3a05a000},{0x3a05c000},{0x3a05e000},{0x3a060000},{0x3a062000},{0x3a064000},{0x3a066000},{0x3a068000},{0x3a06a000},{0x3a06c000},{0x3a06e000},{0x3a070000},{0x3a072000},{0x3a074000},{0x3a076000},{0x3a078000},{0x3a07a000},{0x3a07c000},{0x3a07e000}, -{0x3a080000},{0x3a082000},{0x3a084000},{0x3a086000},{0x3a088000},{0x3a08a000},{0x3a08c000},{0x3a08e000},{0x3a090000},{0x3a092000},{0x3a094000},{0x3a096000},{0x3a098000},{0x3a09a000},{0x3a09c000},{0x3a09e000},{0x3a0a0000},{0x3a0a2000},{0x3a0a4000},{0x3a0a6000},{0x3a0a8000},{0x3a0aa000},{0x3a0ac000},{0x3a0ae000},{0x3a0b0000},{0x3a0b2000},{0x3a0b4000},{0x3a0b6000},{0x3a0b8000},{0x3a0ba000},{0x3a0bc000},{0x3a0be000}, -{0x3a0c0000},{0x3a0c2000},{0x3a0c4000},{0x3a0c6000},{0x3a0c8000},{0x3a0ca000},{0x3a0cc000},{0x3a0ce000},{0x3a0d0000},{0x3a0d2000},{0x3a0d4000},{0x3a0d6000},{0x3a0d8000},{0x3a0da000},{0x3a0dc000},{0x3a0de000},{0x3a0e0000},{0x3a0e2000},{0x3a0e4000},{0x3a0e6000},{0x3a0e8000},{0x3a0ea000},{0x3a0ec000},{0x3a0ee000},{0x3a0f0000},{0x3a0f2000},{0x3a0f4000},{0x3a0f6000},{0x3a0f8000},{0x3a0fa000},{0x3a0fc000},{0x3a0fe000}, -{0x3a100000},{0x3a102000},{0x3a104000},{0x3a106000},{0x3a108000},{0x3a10a000},{0x3a10c000},{0x3a10e000},{0x3a110000},{0x3a112000},{0x3a114000},{0x3a116000},{0x3a118000},{0x3a11a000},{0x3a11c000},{0x3a11e000},{0x3a120000},{0x3a122000},{0x3a124000},{0x3a126000},{0x3a128000},{0x3a12a000},{0x3a12c000},{0x3a12e000},{0x3a130000},{0x3a132000},{0x3a134000},{0x3a136000},{0x3a138000},{0x3a13a000},{0x3a13c000},{0x3a13e000}, -{0x3a140000},{0x3a142000},{0x3a144000},{0x3a146000},{0x3a148000},{0x3a14a000},{0x3a14c000},{0x3a14e000},{0x3a150000},{0x3a152000},{0x3a154000},{0x3a156000},{0x3a158000},{0x3a15a000},{0x3a15c000},{0x3a15e000},{0x3a160000},{0x3a162000},{0x3a164000},{0x3a166000},{0x3a168000},{0x3a16a000},{0x3a16c000},{0x3a16e000},{0x3a170000},{0x3a172000},{0x3a174000},{0x3a176000},{0x3a178000},{0x3a17a000},{0x3a17c000},{0x3a17e000}, -{0x3a180000},{0x3a182000},{0x3a184000},{0x3a186000},{0x3a188000},{0x3a18a000},{0x3a18c000},{0x3a18e000},{0x3a190000},{0x3a192000},{0x3a194000},{0x3a196000},{0x3a198000},{0x3a19a000},{0x3a19c000},{0x3a19e000},{0x3a1a0000},{0x3a1a2000},{0x3a1a4000},{0x3a1a6000},{0x3a1a8000},{0x3a1aa000},{0x3a1ac000},{0x3a1ae000},{0x3a1b0000},{0x3a1b2000},{0x3a1b4000},{0x3a1b6000},{0x3a1b8000},{0x3a1ba000},{0x3a1bc000},{0x3a1be000}, -{0x3a1c0000},{0x3a1c2000},{0x3a1c4000},{0x3a1c6000},{0x3a1c8000},{0x3a1ca000},{0x3a1cc000},{0x3a1ce000},{0x3a1d0000},{0x3a1d2000},{0x3a1d4000},{0x3a1d6000},{0x3a1d8000},{0x3a1da000},{0x3a1dc000},{0x3a1de000},{0x3a1e0000},{0x3a1e2000},{0x3a1e4000},{0x3a1e6000},{0x3a1e8000},{0x3a1ea000},{0x3a1ec000},{0x3a1ee000},{0x3a1f0000},{0x3a1f2000},{0x3a1f4000},{0x3a1f6000},{0x3a1f8000},{0x3a1fa000},{0x3a1fc000},{0x3a1fe000}, -{0x3a200000},{0x3a202000},{0x3a204000},{0x3a206000},{0x3a208000},{0x3a20a000},{0x3a20c000},{0x3a20e000},{0x3a210000},{0x3a212000},{0x3a214000},{0x3a216000},{0x3a218000},{0x3a21a000},{0x3a21c000},{0x3a21e000},{0x3a220000},{0x3a222000},{0x3a224000},{0x3a226000},{0x3a228000},{0x3a22a000},{0x3a22c000},{0x3a22e000},{0x3a230000},{0x3a232000},{0x3a234000},{0x3a236000},{0x3a238000},{0x3a23a000},{0x3a23c000},{0x3a23e000}, -{0x3a240000},{0x3a242000},{0x3a244000},{0x3a246000},{0x3a248000},{0x3a24a000},{0x3a24c000},{0x3a24e000},{0x3a250000},{0x3a252000},{0x3a254000},{0x3a256000},{0x3a258000},{0x3a25a000},{0x3a25c000},{0x3a25e000},{0x3a260000},{0x3a262000},{0x3a264000},{0x3a266000},{0x3a268000},{0x3a26a000},{0x3a26c000},{0x3a26e000},{0x3a270000},{0x3a272000},{0x3a274000},{0x3a276000},{0x3a278000},{0x3a27a000},{0x3a27c000},{0x3a27e000}, -{0x3a280000},{0x3a282000},{0x3a284000},{0x3a286000},{0x3a288000},{0x3a28a000},{0x3a28c000},{0x3a28e000},{0x3a290000},{0x3a292000},{0x3a294000},{0x3a296000},{0x3a298000},{0x3a29a000},{0x3a29c000},{0x3a29e000},{0x3a2a0000},{0x3a2a2000},{0x3a2a4000},{0x3a2a6000},{0x3a2a8000},{0x3a2aa000},{0x3a2ac000},{0x3a2ae000},{0x3a2b0000},{0x3a2b2000},{0x3a2b4000},{0x3a2b6000},{0x3a2b8000},{0x3a2ba000},{0x3a2bc000},{0x3a2be000}, -{0x3a2c0000},{0x3a2c2000},{0x3a2c4000},{0x3a2c6000},{0x3a2c8000},{0x3a2ca000},{0x3a2cc000},{0x3a2ce000},{0x3a2d0000},{0x3a2d2000},{0x3a2d4000},{0x3a2d6000},{0x3a2d8000},{0x3a2da000},{0x3a2dc000},{0x3a2de000},{0x3a2e0000},{0x3a2e2000},{0x3a2e4000},{0x3a2e6000},{0x3a2e8000},{0x3a2ea000},{0x3a2ec000},{0x3a2ee000},{0x3a2f0000},{0x3a2f2000},{0x3a2f4000},{0x3a2f6000},{0x3a2f8000},{0x3a2fa000},{0x3a2fc000},{0x3a2fe000}, -{0x3a300000},{0x3a302000},{0x3a304000},{0x3a306000},{0x3a308000},{0x3a30a000},{0x3a30c000},{0x3a30e000},{0x3a310000},{0x3a312000},{0x3a314000},{0x3a316000},{0x3a318000},{0x3a31a000},{0x3a31c000},{0x3a31e000},{0x3a320000},{0x3a322000},{0x3a324000},{0x3a326000},{0x3a328000},{0x3a32a000},{0x3a32c000},{0x3a32e000},{0x3a330000},{0x3a332000},{0x3a334000},{0x3a336000},{0x3a338000},{0x3a33a000},{0x3a33c000},{0x3a33e000}, -{0x3a340000},{0x3a342000},{0x3a344000},{0x3a346000},{0x3a348000},{0x3a34a000},{0x3a34c000},{0x3a34e000},{0x3a350000},{0x3a352000},{0x3a354000},{0x3a356000},{0x3a358000},{0x3a35a000},{0x3a35c000},{0x3a35e000},{0x3a360000},{0x3a362000},{0x3a364000},{0x3a366000},{0x3a368000},{0x3a36a000},{0x3a36c000},{0x3a36e000},{0x3a370000},{0x3a372000},{0x3a374000},{0x3a376000},{0x3a378000},{0x3a37a000},{0x3a37c000},{0x3a37e000}, -{0x3a380000},{0x3a382000},{0x3a384000},{0x3a386000},{0x3a388000},{0x3a38a000},{0x3a38c000},{0x3a38e000},{0x3a390000},{0x3a392000},{0x3a394000},{0x3a396000},{0x3a398000},{0x3a39a000},{0x3a39c000},{0x3a39e000},{0x3a3a0000},{0x3a3a2000},{0x3a3a4000},{0x3a3a6000},{0x3a3a8000},{0x3a3aa000},{0x3a3ac000},{0x3a3ae000},{0x3a3b0000},{0x3a3b2000},{0x3a3b4000},{0x3a3b6000},{0x3a3b8000},{0x3a3ba000},{0x3a3bc000},{0x3a3be000}, -{0x3a3c0000},{0x3a3c2000},{0x3a3c4000},{0x3a3c6000},{0x3a3c8000},{0x3a3ca000},{0x3a3cc000},{0x3a3ce000},{0x3a3d0000},{0x3a3d2000},{0x3a3d4000},{0x3a3d6000},{0x3a3d8000},{0x3a3da000},{0x3a3dc000},{0x3a3de000},{0x3a3e0000},{0x3a3e2000},{0x3a3e4000},{0x3a3e6000},{0x3a3e8000},{0x3a3ea000},{0x3a3ec000},{0x3a3ee000},{0x3a3f0000},{0x3a3f2000},{0x3a3f4000},{0x3a3f6000},{0x3a3f8000},{0x3a3fa000},{0x3a3fc000},{0x3a3fe000}, -{0x3a400000},{0x3a402000},{0x3a404000},{0x3a406000},{0x3a408000},{0x3a40a000},{0x3a40c000},{0x3a40e000},{0x3a410000},{0x3a412000},{0x3a414000},{0x3a416000},{0x3a418000},{0x3a41a000},{0x3a41c000},{0x3a41e000},{0x3a420000},{0x3a422000},{0x3a424000},{0x3a426000},{0x3a428000},{0x3a42a000},{0x3a42c000},{0x3a42e000},{0x3a430000},{0x3a432000},{0x3a434000},{0x3a436000},{0x3a438000},{0x3a43a000},{0x3a43c000},{0x3a43e000}, -{0x3a440000},{0x3a442000},{0x3a444000},{0x3a446000},{0x3a448000},{0x3a44a000},{0x3a44c000},{0x3a44e000},{0x3a450000},{0x3a452000},{0x3a454000},{0x3a456000},{0x3a458000},{0x3a45a000},{0x3a45c000},{0x3a45e000},{0x3a460000},{0x3a462000},{0x3a464000},{0x3a466000},{0x3a468000},{0x3a46a000},{0x3a46c000},{0x3a46e000},{0x3a470000},{0x3a472000},{0x3a474000},{0x3a476000},{0x3a478000},{0x3a47a000},{0x3a47c000},{0x3a47e000}, -{0x3a480000},{0x3a482000},{0x3a484000},{0x3a486000},{0x3a488000},{0x3a48a000},{0x3a48c000},{0x3a48e000},{0x3a490000},{0x3a492000},{0x3a494000},{0x3a496000},{0x3a498000},{0x3a49a000},{0x3a49c000},{0x3a49e000},{0x3a4a0000},{0x3a4a2000},{0x3a4a4000},{0x3a4a6000},{0x3a4a8000},{0x3a4aa000},{0x3a4ac000},{0x3a4ae000},{0x3a4b0000},{0x3a4b2000},{0x3a4b4000},{0x3a4b6000},{0x3a4b8000},{0x3a4ba000},{0x3a4bc000},{0x3a4be000}, -{0x3a4c0000},{0x3a4c2000},{0x3a4c4000},{0x3a4c6000},{0x3a4c8000},{0x3a4ca000},{0x3a4cc000},{0x3a4ce000},{0x3a4d0000},{0x3a4d2000},{0x3a4d4000},{0x3a4d6000},{0x3a4d8000},{0x3a4da000},{0x3a4dc000},{0x3a4de000},{0x3a4e0000},{0x3a4e2000},{0x3a4e4000},{0x3a4e6000},{0x3a4e8000},{0x3a4ea000},{0x3a4ec000},{0x3a4ee000},{0x3a4f0000},{0x3a4f2000},{0x3a4f4000},{0x3a4f6000},{0x3a4f8000},{0x3a4fa000},{0x3a4fc000},{0x3a4fe000}, -{0x3a500000},{0x3a502000},{0x3a504000},{0x3a506000},{0x3a508000},{0x3a50a000},{0x3a50c000},{0x3a50e000},{0x3a510000},{0x3a512000},{0x3a514000},{0x3a516000},{0x3a518000},{0x3a51a000},{0x3a51c000},{0x3a51e000},{0x3a520000},{0x3a522000},{0x3a524000},{0x3a526000},{0x3a528000},{0x3a52a000},{0x3a52c000},{0x3a52e000},{0x3a530000},{0x3a532000},{0x3a534000},{0x3a536000},{0x3a538000},{0x3a53a000},{0x3a53c000},{0x3a53e000}, -{0x3a540000},{0x3a542000},{0x3a544000},{0x3a546000},{0x3a548000},{0x3a54a000},{0x3a54c000},{0x3a54e000},{0x3a550000},{0x3a552000},{0x3a554000},{0x3a556000},{0x3a558000},{0x3a55a000},{0x3a55c000},{0x3a55e000},{0x3a560000},{0x3a562000},{0x3a564000},{0x3a566000},{0x3a568000},{0x3a56a000},{0x3a56c000},{0x3a56e000},{0x3a570000},{0x3a572000},{0x3a574000},{0x3a576000},{0x3a578000},{0x3a57a000},{0x3a57c000},{0x3a57e000}, -{0x3a580000},{0x3a582000},{0x3a584000},{0x3a586000},{0x3a588000},{0x3a58a000},{0x3a58c000},{0x3a58e000},{0x3a590000},{0x3a592000},{0x3a594000},{0x3a596000},{0x3a598000},{0x3a59a000},{0x3a59c000},{0x3a59e000},{0x3a5a0000},{0x3a5a2000},{0x3a5a4000},{0x3a5a6000},{0x3a5a8000},{0x3a5aa000},{0x3a5ac000},{0x3a5ae000},{0x3a5b0000},{0x3a5b2000},{0x3a5b4000},{0x3a5b6000},{0x3a5b8000},{0x3a5ba000},{0x3a5bc000},{0x3a5be000}, -{0x3a5c0000},{0x3a5c2000},{0x3a5c4000},{0x3a5c6000},{0x3a5c8000},{0x3a5ca000},{0x3a5cc000},{0x3a5ce000},{0x3a5d0000},{0x3a5d2000},{0x3a5d4000},{0x3a5d6000},{0x3a5d8000},{0x3a5da000},{0x3a5dc000},{0x3a5de000},{0x3a5e0000},{0x3a5e2000},{0x3a5e4000},{0x3a5e6000},{0x3a5e8000},{0x3a5ea000},{0x3a5ec000},{0x3a5ee000},{0x3a5f0000},{0x3a5f2000},{0x3a5f4000},{0x3a5f6000},{0x3a5f8000},{0x3a5fa000},{0x3a5fc000},{0x3a5fe000}, -{0x3a600000},{0x3a602000},{0x3a604000},{0x3a606000},{0x3a608000},{0x3a60a000},{0x3a60c000},{0x3a60e000},{0x3a610000},{0x3a612000},{0x3a614000},{0x3a616000},{0x3a618000},{0x3a61a000},{0x3a61c000},{0x3a61e000},{0x3a620000},{0x3a622000},{0x3a624000},{0x3a626000},{0x3a628000},{0x3a62a000},{0x3a62c000},{0x3a62e000},{0x3a630000},{0x3a632000},{0x3a634000},{0x3a636000},{0x3a638000},{0x3a63a000},{0x3a63c000},{0x3a63e000}, -{0x3a640000},{0x3a642000},{0x3a644000},{0x3a646000},{0x3a648000},{0x3a64a000},{0x3a64c000},{0x3a64e000},{0x3a650000},{0x3a652000},{0x3a654000},{0x3a656000},{0x3a658000},{0x3a65a000},{0x3a65c000},{0x3a65e000},{0x3a660000},{0x3a662000},{0x3a664000},{0x3a666000},{0x3a668000},{0x3a66a000},{0x3a66c000},{0x3a66e000},{0x3a670000},{0x3a672000},{0x3a674000},{0x3a676000},{0x3a678000},{0x3a67a000},{0x3a67c000},{0x3a67e000}, -{0x3a680000},{0x3a682000},{0x3a684000},{0x3a686000},{0x3a688000},{0x3a68a000},{0x3a68c000},{0x3a68e000},{0x3a690000},{0x3a692000},{0x3a694000},{0x3a696000},{0x3a698000},{0x3a69a000},{0x3a69c000},{0x3a69e000},{0x3a6a0000},{0x3a6a2000},{0x3a6a4000},{0x3a6a6000},{0x3a6a8000},{0x3a6aa000},{0x3a6ac000},{0x3a6ae000},{0x3a6b0000},{0x3a6b2000},{0x3a6b4000},{0x3a6b6000},{0x3a6b8000},{0x3a6ba000},{0x3a6bc000},{0x3a6be000}, -{0x3a6c0000},{0x3a6c2000},{0x3a6c4000},{0x3a6c6000},{0x3a6c8000},{0x3a6ca000},{0x3a6cc000},{0x3a6ce000},{0x3a6d0000},{0x3a6d2000},{0x3a6d4000},{0x3a6d6000},{0x3a6d8000},{0x3a6da000},{0x3a6dc000},{0x3a6de000},{0x3a6e0000},{0x3a6e2000},{0x3a6e4000},{0x3a6e6000},{0x3a6e8000},{0x3a6ea000},{0x3a6ec000},{0x3a6ee000},{0x3a6f0000},{0x3a6f2000},{0x3a6f4000},{0x3a6f6000},{0x3a6f8000},{0x3a6fa000},{0x3a6fc000},{0x3a6fe000}, -{0x3a700000},{0x3a702000},{0x3a704000},{0x3a706000},{0x3a708000},{0x3a70a000},{0x3a70c000},{0x3a70e000},{0x3a710000},{0x3a712000},{0x3a714000},{0x3a716000},{0x3a718000},{0x3a71a000},{0x3a71c000},{0x3a71e000},{0x3a720000},{0x3a722000},{0x3a724000},{0x3a726000},{0x3a728000},{0x3a72a000},{0x3a72c000},{0x3a72e000},{0x3a730000},{0x3a732000},{0x3a734000},{0x3a736000},{0x3a738000},{0x3a73a000},{0x3a73c000},{0x3a73e000}, -{0x3a740000},{0x3a742000},{0x3a744000},{0x3a746000},{0x3a748000},{0x3a74a000},{0x3a74c000},{0x3a74e000},{0x3a750000},{0x3a752000},{0x3a754000},{0x3a756000},{0x3a758000},{0x3a75a000},{0x3a75c000},{0x3a75e000},{0x3a760000},{0x3a762000},{0x3a764000},{0x3a766000},{0x3a768000},{0x3a76a000},{0x3a76c000},{0x3a76e000},{0x3a770000},{0x3a772000},{0x3a774000},{0x3a776000},{0x3a778000},{0x3a77a000},{0x3a77c000},{0x3a77e000}, -{0x3a780000},{0x3a782000},{0x3a784000},{0x3a786000},{0x3a788000},{0x3a78a000},{0x3a78c000},{0x3a78e000},{0x3a790000},{0x3a792000},{0x3a794000},{0x3a796000},{0x3a798000},{0x3a79a000},{0x3a79c000},{0x3a79e000},{0x3a7a0000},{0x3a7a2000},{0x3a7a4000},{0x3a7a6000},{0x3a7a8000},{0x3a7aa000},{0x3a7ac000},{0x3a7ae000},{0x3a7b0000},{0x3a7b2000},{0x3a7b4000},{0x3a7b6000},{0x3a7b8000},{0x3a7ba000},{0x3a7bc000},{0x3a7be000}, -{0x3a7c0000},{0x3a7c2000},{0x3a7c4000},{0x3a7c6000},{0x3a7c8000},{0x3a7ca000},{0x3a7cc000},{0x3a7ce000},{0x3a7d0000},{0x3a7d2000},{0x3a7d4000},{0x3a7d6000},{0x3a7d8000},{0x3a7da000},{0x3a7dc000},{0x3a7de000},{0x3a7e0000},{0x3a7e2000},{0x3a7e4000},{0x3a7e6000},{0x3a7e8000},{0x3a7ea000},{0x3a7ec000},{0x3a7ee000},{0x3a7f0000},{0x3a7f2000},{0x3a7f4000},{0x3a7f6000},{0x3a7f8000},{0x3a7fa000},{0x3a7fc000},{0x3a7fe000}, -{0x3a800000},{0x3a802000},{0x3a804000},{0x3a806000},{0x3a808000},{0x3a80a000},{0x3a80c000},{0x3a80e000},{0x3a810000},{0x3a812000},{0x3a814000},{0x3a816000},{0x3a818000},{0x3a81a000},{0x3a81c000},{0x3a81e000},{0x3a820000},{0x3a822000},{0x3a824000},{0x3a826000},{0x3a828000},{0x3a82a000},{0x3a82c000},{0x3a82e000},{0x3a830000},{0x3a832000},{0x3a834000},{0x3a836000},{0x3a838000},{0x3a83a000},{0x3a83c000},{0x3a83e000}, -{0x3a840000},{0x3a842000},{0x3a844000},{0x3a846000},{0x3a848000},{0x3a84a000},{0x3a84c000},{0x3a84e000},{0x3a850000},{0x3a852000},{0x3a854000},{0x3a856000},{0x3a858000},{0x3a85a000},{0x3a85c000},{0x3a85e000},{0x3a860000},{0x3a862000},{0x3a864000},{0x3a866000},{0x3a868000},{0x3a86a000},{0x3a86c000},{0x3a86e000},{0x3a870000},{0x3a872000},{0x3a874000},{0x3a876000},{0x3a878000},{0x3a87a000},{0x3a87c000},{0x3a87e000}, -{0x3a880000},{0x3a882000},{0x3a884000},{0x3a886000},{0x3a888000},{0x3a88a000},{0x3a88c000},{0x3a88e000},{0x3a890000},{0x3a892000},{0x3a894000},{0x3a896000},{0x3a898000},{0x3a89a000},{0x3a89c000},{0x3a89e000},{0x3a8a0000},{0x3a8a2000},{0x3a8a4000},{0x3a8a6000},{0x3a8a8000},{0x3a8aa000},{0x3a8ac000},{0x3a8ae000},{0x3a8b0000},{0x3a8b2000},{0x3a8b4000},{0x3a8b6000},{0x3a8b8000},{0x3a8ba000},{0x3a8bc000},{0x3a8be000}, -{0x3a8c0000},{0x3a8c2000},{0x3a8c4000},{0x3a8c6000},{0x3a8c8000},{0x3a8ca000},{0x3a8cc000},{0x3a8ce000},{0x3a8d0000},{0x3a8d2000},{0x3a8d4000},{0x3a8d6000},{0x3a8d8000},{0x3a8da000},{0x3a8dc000},{0x3a8de000},{0x3a8e0000},{0x3a8e2000},{0x3a8e4000},{0x3a8e6000},{0x3a8e8000},{0x3a8ea000},{0x3a8ec000},{0x3a8ee000},{0x3a8f0000},{0x3a8f2000},{0x3a8f4000},{0x3a8f6000},{0x3a8f8000},{0x3a8fa000},{0x3a8fc000},{0x3a8fe000}, -{0x3a900000},{0x3a902000},{0x3a904000},{0x3a906000},{0x3a908000},{0x3a90a000},{0x3a90c000},{0x3a90e000},{0x3a910000},{0x3a912000},{0x3a914000},{0x3a916000},{0x3a918000},{0x3a91a000},{0x3a91c000},{0x3a91e000},{0x3a920000},{0x3a922000},{0x3a924000},{0x3a926000},{0x3a928000},{0x3a92a000},{0x3a92c000},{0x3a92e000},{0x3a930000},{0x3a932000},{0x3a934000},{0x3a936000},{0x3a938000},{0x3a93a000},{0x3a93c000},{0x3a93e000}, -{0x3a940000},{0x3a942000},{0x3a944000},{0x3a946000},{0x3a948000},{0x3a94a000},{0x3a94c000},{0x3a94e000},{0x3a950000},{0x3a952000},{0x3a954000},{0x3a956000},{0x3a958000},{0x3a95a000},{0x3a95c000},{0x3a95e000},{0x3a960000},{0x3a962000},{0x3a964000},{0x3a966000},{0x3a968000},{0x3a96a000},{0x3a96c000},{0x3a96e000},{0x3a970000},{0x3a972000},{0x3a974000},{0x3a976000},{0x3a978000},{0x3a97a000},{0x3a97c000},{0x3a97e000}, -{0x3a980000},{0x3a982000},{0x3a984000},{0x3a986000},{0x3a988000},{0x3a98a000},{0x3a98c000},{0x3a98e000},{0x3a990000},{0x3a992000},{0x3a994000},{0x3a996000},{0x3a998000},{0x3a99a000},{0x3a99c000},{0x3a99e000},{0x3a9a0000},{0x3a9a2000},{0x3a9a4000},{0x3a9a6000},{0x3a9a8000},{0x3a9aa000},{0x3a9ac000},{0x3a9ae000},{0x3a9b0000},{0x3a9b2000},{0x3a9b4000},{0x3a9b6000},{0x3a9b8000},{0x3a9ba000},{0x3a9bc000},{0x3a9be000}, -{0x3a9c0000},{0x3a9c2000},{0x3a9c4000},{0x3a9c6000},{0x3a9c8000},{0x3a9ca000},{0x3a9cc000},{0x3a9ce000},{0x3a9d0000},{0x3a9d2000},{0x3a9d4000},{0x3a9d6000},{0x3a9d8000},{0x3a9da000},{0x3a9dc000},{0x3a9de000},{0x3a9e0000},{0x3a9e2000},{0x3a9e4000},{0x3a9e6000},{0x3a9e8000},{0x3a9ea000},{0x3a9ec000},{0x3a9ee000},{0x3a9f0000},{0x3a9f2000},{0x3a9f4000},{0x3a9f6000},{0x3a9f8000},{0x3a9fa000},{0x3a9fc000},{0x3a9fe000}, -{0x3aa00000},{0x3aa02000},{0x3aa04000},{0x3aa06000},{0x3aa08000},{0x3aa0a000},{0x3aa0c000},{0x3aa0e000},{0x3aa10000},{0x3aa12000},{0x3aa14000},{0x3aa16000},{0x3aa18000},{0x3aa1a000},{0x3aa1c000},{0x3aa1e000},{0x3aa20000},{0x3aa22000},{0x3aa24000},{0x3aa26000},{0x3aa28000},{0x3aa2a000},{0x3aa2c000},{0x3aa2e000},{0x3aa30000},{0x3aa32000},{0x3aa34000},{0x3aa36000},{0x3aa38000},{0x3aa3a000},{0x3aa3c000},{0x3aa3e000}, -{0x3aa40000},{0x3aa42000},{0x3aa44000},{0x3aa46000},{0x3aa48000},{0x3aa4a000},{0x3aa4c000},{0x3aa4e000},{0x3aa50000},{0x3aa52000},{0x3aa54000},{0x3aa56000},{0x3aa58000},{0x3aa5a000},{0x3aa5c000},{0x3aa5e000},{0x3aa60000},{0x3aa62000},{0x3aa64000},{0x3aa66000},{0x3aa68000},{0x3aa6a000},{0x3aa6c000},{0x3aa6e000},{0x3aa70000},{0x3aa72000},{0x3aa74000},{0x3aa76000},{0x3aa78000},{0x3aa7a000},{0x3aa7c000},{0x3aa7e000}, -{0x3aa80000},{0x3aa82000},{0x3aa84000},{0x3aa86000},{0x3aa88000},{0x3aa8a000},{0x3aa8c000},{0x3aa8e000},{0x3aa90000},{0x3aa92000},{0x3aa94000},{0x3aa96000},{0x3aa98000},{0x3aa9a000},{0x3aa9c000},{0x3aa9e000},{0x3aaa0000},{0x3aaa2000},{0x3aaa4000},{0x3aaa6000},{0x3aaa8000},{0x3aaaa000},{0x3aaac000},{0x3aaae000},{0x3aab0000},{0x3aab2000},{0x3aab4000},{0x3aab6000},{0x3aab8000},{0x3aaba000},{0x3aabc000},{0x3aabe000}, -{0x3aac0000},{0x3aac2000},{0x3aac4000},{0x3aac6000},{0x3aac8000},{0x3aaca000},{0x3aacc000},{0x3aace000},{0x3aad0000},{0x3aad2000},{0x3aad4000},{0x3aad6000},{0x3aad8000},{0x3aada000},{0x3aadc000},{0x3aade000},{0x3aae0000},{0x3aae2000},{0x3aae4000},{0x3aae6000},{0x3aae8000},{0x3aaea000},{0x3aaec000},{0x3aaee000},{0x3aaf0000},{0x3aaf2000},{0x3aaf4000},{0x3aaf6000},{0x3aaf8000},{0x3aafa000},{0x3aafc000},{0x3aafe000}, -{0x3ab00000},{0x3ab02000},{0x3ab04000},{0x3ab06000},{0x3ab08000},{0x3ab0a000},{0x3ab0c000},{0x3ab0e000},{0x3ab10000},{0x3ab12000},{0x3ab14000},{0x3ab16000},{0x3ab18000},{0x3ab1a000},{0x3ab1c000},{0x3ab1e000},{0x3ab20000},{0x3ab22000},{0x3ab24000},{0x3ab26000},{0x3ab28000},{0x3ab2a000},{0x3ab2c000},{0x3ab2e000},{0x3ab30000},{0x3ab32000},{0x3ab34000},{0x3ab36000},{0x3ab38000},{0x3ab3a000},{0x3ab3c000},{0x3ab3e000}, -{0x3ab40000},{0x3ab42000},{0x3ab44000},{0x3ab46000},{0x3ab48000},{0x3ab4a000},{0x3ab4c000},{0x3ab4e000},{0x3ab50000},{0x3ab52000},{0x3ab54000},{0x3ab56000},{0x3ab58000},{0x3ab5a000},{0x3ab5c000},{0x3ab5e000},{0x3ab60000},{0x3ab62000},{0x3ab64000},{0x3ab66000},{0x3ab68000},{0x3ab6a000},{0x3ab6c000},{0x3ab6e000},{0x3ab70000},{0x3ab72000},{0x3ab74000},{0x3ab76000},{0x3ab78000},{0x3ab7a000},{0x3ab7c000},{0x3ab7e000}, -{0x3ab80000},{0x3ab82000},{0x3ab84000},{0x3ab86000},{0x3ab88000},{0x3ab8a000},{0x3ab8c000},{0x3ab8e000},{0x3ab90000},{0x3ab92000},{0x3ab94000},{0x3ab96000},{0x3ab98000},{0x3ab9a000},{0x3ab9c000},{0x3ab9e000},{0x3aba0000},{0x3aba2000},{0x3aba4000},{0x3aba6000},{0x3aba8000},{0x3abaa000},{0x3abac000},{0x3abae000},{0x3abb0000},{0x3abb2000},{0x3abb4000},{0x3abb6000},{0x3abb8000},{0x3abba000},{0x3abbc000},{0x3abbe000}, -{0x3abc0000},{0x3abc2000},{0x3abc4000},{0x3abc6000},{0x3abc8000},{0x3abca000},{0x3abcc000},{0x3abce000},{0x3abd0000},{0x3abd2000},{0x3abd4000},{0x3abd6000},{0x3abd8000},{0x3abda000},{0x3abdc000},{0x3abde000},{0x3abe0000},{0x3abe2000},{0x3abe4000},{0x3abe6000},{0x3abe8000},{0x3abea000},{0x3abec000},{0x3abee000},{0x3abf0000},{0x3abf2000},{0x3abf4000},{0x3abf6000},{0x3abf8000},{0x3abfa000},{0x3abfc000},{0x3abfe000}, -{0x3ac00000},{0x3ac02000},{0x3ac04000},{0x3ac06000},{0x3ac08000},{0x3ac0a000},{0x3ac0c000},{0x3ac0e000},{0x3ac10000},{0x3ac12000},{0x3ac14000},{0x3ac16000},{0x3ac18000},{0x3ac1a000},{0x3ac1c000},{0x3ac1e000},{0x3ac20000},{0x3ac22000},{0x3ac24000},{0x3ac26000},{0x3ac28000},{0x3ac2a000},{0x3ac2c000},{0x3ac2e000},{0x3ac30000},{0x3ac32000},{0x3ac34000},{0x3ac36000},{0x3ac38000},{0x3ac3a000},{0x3ac3c000},{0x3ac3e000}, -{0x3ac40000},{0x3ac42000},{0x3ac44000},{0x3ac46000},{0x3ac48000},{0x3ac4a000},{0x3ac4c000},{0x3ac4e000},{0x3ac50000},{0x3ac52000},{0x3ac54000},{0x3ac56000},{0x3ac58000},{0x3ac5a000},{0x3ac5c000},{0x3ac5e000},{0x3ac60000},{0x3ac62000},{0x3ac64000},{0x3ac66000},{0x3ac68000},{0x3ac6a000},{0x3ac6c000},{0x3ac6e000},{0x3ac70000},{0x3ac72000},{0x3ac74000},{0x3ac76000},{0x3ac78000},{0x3ac7a000},{0x3ac7c000},{0x3ac7e000}, -{0x3ac80000},{0x3ac82000},{0x3ac84000},{0x3ac86000},{0x3ac88000},{0x3ac8a000},{0x3ac8c000},{0x3ac8e000},{0x3ac90000},{0x3ac92000},{0x3ac94000},{0x3ac96000},{0x3ac98000},{0x3ac9a000},{0x3ac9c000},{0x3ac9e000},{0x3aca0000},{0x3aca2000},{0x3aca4000},{0x3aca6000},{0x3aca8000},{0x3acaa000},{0x3acac000},{0x3acae000},{0x3acb0000},{0x3acb2000},{0x3acb4000},{0x3acb6000},{0x3acb8000},{0x3acba000},{0x3acbc000},{0x3acbe000}, -{0x3acc0000},{0x3acc2000},{0x3acc4000},{0x3acc6000},{0x3acc8000},{0x3acca000},{0x3accc000},{0x3acce000},{0x3acd0000},{0x3acd2000},{0x3acd4000},{0x3acd6000},{0x3acd8000},{0x3acda000},{0x3acdc000},{0x3acde000},{0x3ace0000},{0x3ace2000},{0x3ace4000},{0x3ace6000},{0x3ace8000},{0x3acea000},{0x3acec000},{0x3acee000},{0x3acf0000},{0x3acf2000},{0x3acf4000},{0x3acf6000},{0x3acf8000},{0x3acfa000},{0x3acfc000},{0x3acfe000}, -{0x3ad00000},{0x3ad02000},{0x3ad04000},{0x3ad06000},{0x3ad08000},{0x3ad0a000},{0x3ad0c000},{0x3ad0e000},{0x3ad10000},{0x3ad12000},{0x3ad14000},{0x3ad16000},{0x3ad18000},{0x3ad1a000},{0x3ad1c000},{0x3ad1e000},{0x3ad20000},{0x3ad22000},{0x3ad24000},{0x3ad26000},{0x3ad28000},{0x3ad2a000},{0x3ad2c000},{0x3ad2e000},{0x3ad30000},{0x3ad32000},{0x3ad34000},{0x3ad36000},{0x3ad38000},{0x3ad3a000},{0x3ad3c000},{0x3ad3e000}, -{0x3ad40000},{0x3ad42000},{0x3ad44000},{0x3ad46000},{0x3ad48000},{0x3ad4a000},{0x3ad4c000},{0x3ad4e000},{0x3ad50000},{0x3ad52000},{0x3ad54000},{0x3ad56000},{0x3ad58000},{0x3ad5a000},{0x3ad5c000},{0x3ad5e000},{0x3ad60000},{0x3ad62000},{0x3ad64000},{0x3ad66000},{0x3ad68000},{0x3ad6a000},{0x3ad6c000},{0x3ad6e000},{0x3ad70000},{0x3ad72000},{0x3ad74000},{0x3ad76000},{0x3ad78000},{0x3ad7a000},{0x3ad7c000},{0x3ad7e000}, -{0x3ad80000},{0x3ad82000},{0x3ad84000},{0x3ad86000},{0x3ad88000},{0x3ad8a000},{0x3ad8c000},{0x3ad8e000},{0x3ad90000},{0x3ad92000},{0x3ad94000},{0x3ad96000},{0x3ad98000},{0x3ad9a000},{0x3ad9c000},{0x3ad9e000},{0x3ada0000},{0x3ada2000},{0x3ada4000},{0x3ada6000},{0x3ada8000},{0x3adaa000},{0x3adac000},{0x3adae000},{0x3adb0000},{0x3adb2000},{0x3adb4000},{0x3adb6000},{0x3adb8000},{0x3adba000},{0x3adbc000},{0x3adbe000}, -{0x3adc0000},{0x3adc2000},{0x3adc4000},{0x3adc6000},{0x3adc8000},{0x3adca000},{0x3adcc000},{0x3adce000},{0x3add0000},{0x3add2000},{0x3add4000},{0x3add6000},{0x3add8000},{0x3adda000},{0x3addc000},{0x3adde000},{0x3ade0000},{0x3ade2000},{0x3ade4000},{0x3ade6000},{0x3ade8000},{0x3adea000},{0x3adec000},{0x3adee000},{0x3adf0000},{0x3adf2000},{0x3adf4000},{0x3adf6000},{0x3adf8000},{0x3adfa000},{0x3adfc000},{0x3adfe000}, -{0x3ae00000},{0x3ae02000},{0x3ae04000},{0x3ae06000},{0x3ae08000},{0x3ae0a000},{0x3ae0c000},{0x3ae0e000},{0x3ae10000},{0x3ae12000},{0x3ae14000},{0x3ae16000},{0x3ae18000},{0x3ae1a000},{0x3ae1c000},{0x3ae1e000},{0x3ae20000},{0x3ae22000},{0x3ae24000},{0x3ae26000},{0x3ae28000},{0x3ae2a000},{0x3ae2c000},{0x3ae2e000},{0x3ae30000},{0x3ae32000},{0x3ae34000},{0x3ae36000},{0x3ae38000},{0x3ae3a000},{0x3ae3c000},{0x3ae3e000}, -{0x3ae40000},{0x3ae42000},{0x3ae44000},{0x3ae46000},{0x3ae48000},{0x3ae4a000},{0x3ae4c000},{0x3ae4e000},{0x3ae50000},{0x3ae52000},{0x3ae54000},{0x3ae56000},{0x3ae58000},{0x3ae5a000},{0x3ae5c000},{0x3ae5e000},{0x3ae60000},{0x3ae62000},{0x3ae64000},{0x3ae66000},{0x3ae68000},{0x3ae6a000},{0x3ae6c000},{0x3ae6e000},{0x3ae70000},{0x3ae72000},{0x3ae74000},{0x3ae76000},{0x3ae78000},{0x3ae7a000},{0x3ae7c000},{0x3ae7e000}, -{0x3ae80000},{0x3ae82000},{0x3ae84000},{0x3ae86000},{0x3ae88000},{0x3ae8a000},{0x3ae8c000},{0x3ae8e000},{0x3ae90000},{0x3ae92000},{0x3ae94000},{0x3ae96000},{0x3ae98000},{0x3ae9a000},{0x3ae9c000},{0x3ae9e000},{0x3aea0000},{0x3aea2000},{0x3aea4000},{0x3aea6000},{0x3aea8000},{0x3aeaa000},{0x3aeac000},{0x3aeae000},{0x3aeb0000},{0x3aeb2000},{0x3aeb4000},{0x3aeb6000},{0x3aeb8000},{0x3aeba000},{0x3aebc000},{0x3aebe000}, -{0x3aec0000},{0x3aec2000},{0x3aec4000},{0x3aec6000},{0x3aec8000},{0x3aeca000},{0x3aecc000},{0x3aece000},{0x3aed0000},{0x3aed2000},{0x3aed4000},{0x3aed6000},{0x3aed8000},{0x3aeda000},{0x3aedc000},{0x3aede000},{0x3aee0000},{0x3aee2000},{0x3aee4000},{0x3aee6000},{0x3aee8000},{0x3aeea000},{0x3aeec000},{0x3aeee000},{0x3aef0000},{0x3aef2000},{0x3aef4000},{0x3aef6000},{0x3aef8000},{0x3aefa000},{0x3aefc000},{0x3aefe000}, -{0x3af00000},{0x3af02000},{0x3af04000},{0x3af06000},{0x3af08000},{0x3af0a000},{0x3af0c000},{0x3af0e000},{0x3af10000},{0x3af12000},{0x3af14000},{0x3af16000},{0x3af18000},{0x3af1a000},{0x3af1c000},{0x3af1e000},{0x3af20000},{0x3af22000},{0x3af24000},{0x3af26000},{0x3af28000},{0x3af2a000},{0x3af2c000},{0x3af2e000},{0x3af30000},{0x3af32000},{0x3af34000},{0x3af36000},{0x3af38000},{0x3af3a000},{0x3af3c000},{0x3af3e000}, -{0x3af40000},{0x3af42000},{0x3af44000},{0x3af46000},{0x3af48000},{0x3af4a000},{0x3af4c000},{0x3af4e000},{0x3af50000},{0x3af52000},{0x3af54000},{0x3af56000},{0x3af58000},{0x3af5a000},{0x3af5c000},{0x3af5e000},{0x3af60000},{0x3af62000},{0x3af64000},{0x3af66000},{0x3af68000},{0x3af6a000},{0x3af6c000},{0x3af6e000},{0x3af70000},{0x3af72000},{0x3af74000},{0x3af76000},{0x3af78000},{0x3af7a000},{0x3af7c000},{0x3af7e000}, -{0x3af80000},{0x3af82000},{0x3af84000},{0x3af86000},{0x3af88000},{0x3af8a000},{0x3af8c000},{0x3af8e000},{0x3af90000},{0x3af92000},{0x3af94000},{0x3af96000},{0x3af98000},{0x3af9a000},{0x3af9c000},{0x3af9e000},{0x3afa0000},{0x3afa2000},{0x3afa4000},{0x3afa6000},{0x3afa8000},{0x3afaa000},{0x3afac000},{0x3afae000},{0x3afb0000},{0x3afb2000},{0x3afb4000},{0x3afb6000},{0x3afb8000},{0x3afba000},{0x3afbc000},{0x3afbe000}, -{0x3afc0000},{0x3afc2000},{0x3afc4000},{0x3afc6000},{0x3afc8000},{0x3afca000},{0x3afcc000},{0x3afce000},{0x3afd0000},{0x3afd2000},{0x3afd4000},{0x3afd6000},{0x3afd8000},{0x3afda000},{0x3afdc000},{0x3afde000},{0x3afe0000},{0x3afe2000},{0x3afe4000},{0x3afe6000},{0x3afe8000},{0x3afea000},{0x3afec000},{0x3afee000},{0x3aff0000},{0x3aff2000},{0x3aff4000},{0x3aff6000},{0x3aff8000},{0x3affa000},{0x3affc000},{0x3affe000}, -{0x3b000000},{0x3b002000},{0x3b004000},{0x3b006000},{0x3b008000},{0x3b00a000},{0x3b00c000},{0x3b00e000},{0x3b010000},{0x3b012000},{0x3b014000},{0x3b016000},{0x3b018000},{0x3b01a000},{0x3b01c000},{0x3b01e000},{0x3b020000},{0x3b022000},{0x3b024000},{0x3b026000},{0x3b028000},{0x3b02a000},{0x3b02c000},{0x3b02e000},{0x3b030000},{0x3b032000},{0x3b034000},{0x3b036000},{0x3b038000},{0x3b03a000},{0x3b03c000},{0x3b03e000}, -{0x3b040000},{0x3b042000},{0x3b044000},{0x3b046000},{0x3b048000},{0x3b04a000},{0x3b04c000},{0x3b04e000},{0x3b050000},{0x3b052000},{0x3b054000},{0x3b056000},{0x3b058000},{0x3b05a000},{0x3b05c000},{0x3b05e000},{0x3b060000},{0x3b062000},{0x3b064000},{0x3b066000},{0x3b068000},{0x3b06a000},{0x3b06c000},{0x3b06e000},{0x3b070000},{0x3b072000},{0x3b074000},{0x3b076000},{0x3b078000},{0x3b07a000},{0x3b07c000},{0x3b07e000}, -{0x3b080000},{0x3b082000},{0x3b084000},{0x3b086000},{0x3b088000},{0x3b08a000},{0x3b08c000},{0x3b08e000},{0x3b090000},{0x3b092000},{0x3b094000},{0x3b096000},{0x3b098000},{0x3b09a000},{0x3b09c000},{0x3b09e000},{0x3b0a0000},{0x3b0a2000},{0x3b0a4000},{0x3b0a6000},{0x3b0a8000},{0x3b0aa000},{0x3b0ac000},{0x3b0ae000},{0x3b0b0000},{0x3b0b2000},{0x3b0b4000},{0x3b0b6000},{0x3b0b8000},{0x3b0ba000},{0x3b0bc000},{0x3b0be000}, -{0x3b0c0000},{0x3b0c2000},{0x3b0c4000},{0x3b0c6000},{0x3b0c8000},{0x3b0ca000},{0x3b0cc000},{0x3b0ce000},{0x3b0d0000},{0x3b0d2000},{0x3b0d4000},{0x3b0d6000},{0x3b0d8000},{0x3b0da000},{0x3b0dc000},{0x3b0de000},{0x3b0e0000},{0x3b0e2000},{0x3b0e4000},{0x3b0e6000},{0x3b0e8000},{0x3b0ea000},{0x3b0ec000},{0x3b0ee000},{0x3b0f0000},{0x3b0f2000},{0x3b0f4000},{0x3b0f6000},{0x3b0f8000},{0x3b0fa000},{0x3b0fc000},{0x3b0fe000}, -{0x3b100000},{0x3b102000},{0x3b104000},{0x3b106000},{0x3b108000},{0x3b10a000},{0x3b10c000},{0x3b10e000},{0x3b110000},{0x3b112000},{0x3b114000},{0x3b116000},{0x3b118000},{0x3b11a000},{0x3b11c000},{0x3b11e000},{0x3b120000},{0x3b122000},{0x3b124000},{0x3b126000},{0x3b128000},{0x3b12a000},{0x3b12c000},{0x3b12e000},{0x3b130000},{0x3b132000},{0x3b134000},{0x3b136000},{0x3b138000},{0x3b13a000},{0x3b13c000},{0x3b13e000}, -{0x3b140000},{0x3b142000},{0x3b144000},{0x3b146000},{0x3b148000},{0x3b14a000},{0x3b14c000},{0x3b14e000},{0x3b150000},{0x3b152000},{0x3b154000},{0x3b156000},{0x3b158000},{0x3b15a000},{0x3b15c000},{0x3b15e000},{0x3b160000},{0x3b162000},{0x3b164000},{0x3b166000},{0x3b168000},{0x3b16a000},{0x3b16c000},{0x3b16e000},{0x3b170000},{0x3b172000},{0x3b174000},{0x3b176000},{0x3b178000},{0x3b17a000},{0x3b17c000},{0x3b17e000}, -{0x3b180000},{0x3b182000},{0x3b184000},{0x3b186000},{0x3b188000},{0x3b18a000},{0x3b18c000},{0x3b18e000},{0x3b190000},{0x3b192000},{0x3b194000},{0x3b196000},{0x3b198000},{0x3b19a000},{0x3b19c000},{0x3b19e000},{0x3b1a0000},{0x3b1a2000},{0x3b1a4000},{0x3b1a6000},{0x3b1a8000},{0x3b1aa000},{0x3b1ac000},{0x3b1ae000},{0x3b1b0000},{0x3b1b2000},{0x3b1b4000},{0x3b1b6000},{0x3b1b8000},{0x3b1ba000},{0x3b1bc000},{0x3b1be000}, -{0x3b1c0000},{0x3b1c2000},{0x3b1c4000},{0x3b1c6000},{0x3b1c8000},{0x3b1ca000},{0x3b1cc000},{0x3b1ce000},{0x3b1d0000},{0x3b1d2000},{0x3b1d4000},{0x3b1d6000},{0x3b1d8000},{0x3b1da000},{0x3b1dc000},{0x3b1de000},{0x3b1e0000},{0x3b1e2000},{0x3b1e4000},{0x3b1e6000},{0x3b1e8000},{0x3b1ea000},{0x3b1ec000},{0x3b1ee000},{0x3b1f0000},{0x3b1f2000},{0x3b1f4000},{0x3b1f6000},{0x3b1f8000},{0x3b1fa000},{0x3b1fc000},{0x3b1fe000}, -{0x3b200000},{0x3b202000},{0x3b204000},{0x3b206000},{0x3b208000},{0x3b20a000},{0x3b20c000},{0x3b20e000},{0x3b210000},{0x3b212000},{0x3b214000},{0x3b216000},{0x3b218000},{0x3b21a000},{0x3b21c000},{0x3b21e000},{0x3b220000},{0x3b222000},{0x3b224000},{0x3b226000},{0x3b228000},{0x3b22a000},{0x3b22c000},{0x3b22e000},{0x3b230000},{0x3b232000},{0x3b234000},{0x3b236000},{0x3b238000},{0x3b23a000},{0x3b23c000},{0x3b23e000}, -{0x3b240000},{0x3b242000},{0x3b244000},{0x3b246000},{0x3b248000},{0x3b24a000},{0x3b24c000},{0x3b24e000},{0x3b250000},{0x3b252000},{0x3b254000},{0x3b256000},{0x3b258000},{0x3b25a000},{0x3b25c000},{0x3b25e000},{0x3b260000},{0x3b262000},{0x3b264000},{0x3b266000},{0x3b268000},{0x3b26a000},{0x3b26c000},{0x3b26e000},{0x3b270000},{0x3b272000},{0x3b274000},{0x3b276000},{0x3b278000},{0x3b27a000},{0x3b27c000},{0x3b27e000}, -{0x3b280000},{0x3b282000},{0x3b284000},{0x3b286000},{0x3b288000},{0x3b28a000},{0x3b28c000},{0x3b28e000},{0x3b290000},{0x3b292000},{0x3b294000},{0x3b296000},{0x3b298000},{0x3b29a000},{0x3b29c000},{0x3b29e000},{0x3b2a0000},{0x3b2a2000},{0x3b2a4000},{0x3b2a6000},{0x3b2a8000},{0x3b2aa000},{0x3b2ac000},{0x3b2ae000},{0x3b2b0000},{0x3b2b2000},{0x3b2b4000},{0x3b2b6000},{0x3b2b8000},{0x3b2ba000},{0x3b2bc000},{0x3b2be000}, -{0x3b2c0000},{0x3b2c2000},{0x3b2c4000},{0x3b2c6000},{0x3b2c8000},{0x3b2ca000},{0x3b2cc000},{0x3b2ce000},{0x3b2d0000},{0x3b2d2000},{0x3b2d4000},{0x3b2d6000},{0x3b2d8000},{0x3b2da000},{0x3b2dc000},{0x3b2de000},{0x3b2e0000},{0x3b2e2000},{0x3b2e4000},{0x3b2e6000},{0x3b2e8000},{0x3b2ea000},{0x3b2ec000},{0x3b2ee000},{0x3b2f0000},{0x3b2f2000},{0x3b2f4000},{0x3b2f6000},{0x3b2f8000},{0x3b2fa000},{0x3b2fc000},{0x3b2fe000}, -{0x3b300000},{0x3b302000},{0x3b304000},{0x3b306000},{0x3b308000},{0x3b30a000},{0x3b30c000},{0x3b30e000},{0x3b310000},{0x3b312000},{0x3b314000},{0x3b316000},{0x3b318000},{0x3b31a000},{0x3b31c000},{0x3b31e000},{0x3b320000},{0x3b322000},{0x3b324000},{0x3b326000},{0x3b328000},{0x3b32a000},{0x3b32c000},{0x3b32e000},{0x3b330000},{0x3b332000},{0x3b334000},{0x3b336000},{0x3b338000},{0x3b33a000},{0x3b33c000},{0x3b33e000}, -{0x3b340000},{0x3b342000},{0x3b344000},{0x3b346000},{0x3b348000},{0x3b34a000},{0x3b34c000},{0x3b34e000},{0x3b350000},{0x3b352000},{0x3b354000},{0x3b356000},{0x3b358000},{0x3b35a000},{0x3b35c000},{0x3b35e000},{0x3b360000},{0x3b362000},{0x3b364000},{0x3b366000},{0x3b368000},{0x3b36a000},{0x3b36c000},{0x3b36e000},{0x3b370000},{0x3b372000},{0x3b374000},{0x3b376000},{0x3b378000},{0x3b37a000},{0x3b37c000},{0x3b37e000}, -{0x3b380000},{0x3b382000},{0x3b384000},{0x3b386000},{0x3b388000},{0x3b38a000},{0x3b38c000},{0x3b38e000},{0x3b390000},{0x3b392000},{0x3b394000},{0x3b396000},{0x3b398000},{0x3b39a000},{0x3b39c000},{0x3b39e000},{0x3b3a0000},{0x3b3a2000},{0x3b3a4000},{0x3b3a6000},{0x3b3a8000},{0x3b3aa000},{0x3b3ac000},{0x3b3ae000},{0x3b3b0000},{0x3b3b2000},{0x3b3b4000},{0x3b3b6000},{0x3b3b8000},{0x3b3ba000},{0x3b3bc000},{0x3b3be000}, -{0x3b3c0000},{0x3b3c2000},{0x3b3c4000},{0x3b3c6000},{0x3b3c8000},{0x3b3ca000},{0x3b3cc000},{0x3b3ce000},{0x3b3d0000},{0x3b3d2000},{0x3b3d4000},{0x3b3d6000},{0x3b3d8000},{0x3b3da000},{0x3b3dc000},{0x3b3de000},{0x3b3e0000},{0x3b3e2000},{0x3b3e4000},{0x3b3e6000},{0x3b3e8000},{0x3b3ea000},{0x3b3ec000},{0x3b3ee000},{0x3b3f0000},{0x3b3f2000},{0x3b3f4000},{0x3b3f6000},{0x3b3f8000},{0x3b3fa000},{0x3b3fc000},{0x3b3fe000}, -{0x3b400000},{0x3b402000},{0x3b404000},{0x3b406000},{0x3b408000},{0x3b40a000},{0x3b40c000},{0x3b40e000},{0x3b410000},{0x3b412000},{0x3b414000},{0x3b416000},{0x3b418000},{0x3b41a000},{0x3b41c000},{0x3b41e000},{0x3b420000},{0x3b422000},{0x3b424000},{0x3b426000},{0x3b428000},{0x3b42a000},{0x3b42c000},{0x3b42e000},{0x3b430000},{0x3b432000},{0x3b434000},{0x3b436000},{0x3b438000},{0x3b43a000},{0x3b43c000},{0x3b43e000}, -{0x3b440000},{0x3b442000},{0x3b444000},{0x3b446000},{0x3b448000},{0x3b44a000},{0x3b44c000},{0x3b44e000},{0x3b450000},{0x3b452000},{0x3b454000},{0x3b456000},{0x3b458000},{0x3b45a000},{0x3b45c000},{0x3b45e000},{0x3b460000},{0x3b462000},{0x3b464000},{0x3b466000},{0x3b468000},{0x3b46a000},{0x3b46c000},{0x3b46e000},{0x3b470000},{0x3b472000},{0x3b474000},{0x3b476000},{0x3b478000},{0x3b47a000},{0x3b47c000},{0x3b47e000}, -{0x3b480000},{0x3b482000},{0x3b484000},{0x3b486000},{0x3b488000},{0x3b48a000},{0x3b48c000},{0x3b48e000},{0x3b490000},{0x3b492000},{0x3b494000},{0x3b496000},{0x3b498000},{0x3b49a000},{0x3b49c000},{0x3b49e000},{0x3b4a0000},{0x3b4a2000},{0x3b4a4000},{0x3b4a6000},{0x3b4a8000},{0x3b4aa000},{0x3b4ac000},{0x3b4ae000},{0x3b4b0000},{0x3b4b2000},{0x3b4b4000},{0x3b4b6000},{0x3b4b8000},{0x3b4ba000},{0x3b4bc000},{0x3b4be000}, -{0x3b4c0000},{0x3b4c2000},{0x3b4c4000},{0x3b4c6000},{0x3b4c8000},{0x3b4ca000},{0x3b4cc000},{0x3b4ce000},{0x3b4d0000},{0x3b4d2000},{0x3b4d4000},{0x3b4d6000},{0x3b4d8000},{0x3b4da000},{0x3b4dc000},{0x3b4de000},{0x3b4e0000},{0x3b4e2000},{0x3b4e4000},{0x3b4e6000},{0x3b4e8000},{0x3b4ea000},{0x3b4ec000},{0x3b4ee000},{0x3b4f0000},{0x3b4f2000},{0x3b4f4000},{0x3b4f6000},{0x3b4f8000},{0x3b4fa000},{0x3b4fc000},{0x3b4fe000}, -{0x3b500000},{0x3b502000},{0x3b504000},{0x3b506000},{0x3b508000},{0x3b50a000},{0x3b50c000},{0x3b50e000},{0x3b510000},{0x3b512000},{0x3b514000},{0x3b516000},{0x3b518000},{0x3b51a000},{0x3b51c000},{0x3b51e000},{0x3b520000},{0x3b522000},{0x3b524000},{0x3b526000},{0x3b528000},{0x3b52a000},{0x3b52c000},{0x3b52e000},{0x3b530000},{0x3b532000},{0x3b534000},{0x3b536000},{0x3b538000},{0x3b53a000},{0x3b53c000},{0x3b53e000}, -{0x3b540000},{0x3b542000},{0x3b544000},{0x3b546000},{0x3b548000},{0x3b54a000},{0x3b54c000},{0x3b54e000},{0x3b550000},{0x3b552000},{0x3b554000},{0x3b556000},{0x3b558000},{0x3b55a000},{0x3b55c000},{0x3b55e000},{0x3b560000},{0x3b562000},{0x3b564000},{0x3b566000},{0x3b568000},{0x3b56a000},{0x3b56c000},{0x3b56e000},{0x3b570000},{0x3b572000},{0x3b574000},{0x3b576000},{0x3b578000},{0x3b57a000},{0x3b57c000},{0x3b57e000}, -{0x3b580000},{0x3b582000},{0x3b584000},{0x3b586000},{0x3b588000},{0x3b58a000},{0x3b58c000},{0x3b58e000},{0x3b590000},{0x3b592000},{0x3b594000},{0x3b596000},{0x3b598000},{0x3b59a000},{0x3b59c000},{0x3b59e000},{0x3b5a0000},{0x3b5a2000},{0x3b5a4000},{0x3b5a6000},{0x3b5a8000},{0x3b5aa000},{0x3b5ac000},{0x3b5ae000},{0x3b5b0000},{0x3b5b2000},{0x3b5b4000},{0x3b5b6000},{0x3b5b8000},{0x3b5ba000},{0x3b5bc000},{0x3b5be000}, -{0x3b5c0000},{0x3b5c2000},{0x3b5c4000},{0x3b5c6000},{0x3b5c8000},{0x3b5ca000},{0x3b5cc000},{0x3b5ce000},{0x3b5d0000},{0x3b5d2000},{0x3b5d4000},{0x3b5d6000},{0x3b5d8000},{0x3b5da000},{0x3b5dc000},{0x3b5de000},{0x3b5e0000},{0x3b5e2000},{0x3b5e4000},{0x3b5e6000},{0x3b5e8000},{0x3b5ea000},{0x3b5ec000},{0x3b5ee000},{0x3b5f0000},{0x3b5f2000},{0x3b5f4000},{0x3b5f6000},{0x3b5f8000},{0x3b5fa000},{0x3b5fc000},{0x3b5fe000}, -{0x3b600000},{0x3b602000},{0x3b604000},{0x3b606000},{0x3b608000},{0x3b60a000},{0x3b60c000},{0x3b60e000},{0x3b610000},{0x3b612000},{0x3b614000},{0x3b616000},{0x3b618000},{0x3b61a000},{0x3b61c000},{0x3b61e000},{0x3b620000},{0x3b622000},{0x3b624000},{0x3b626000},{0x3b628000},{0x3b62a000},{0x3b62c000},{0x3b62e000},{0x3b630000},{0x3b632000},{0x3b634000},{0x3b636000},{0x3b638000},{0x3b63a000},{0x3b63c000},{0x3b63e000}, -{0x3b640000},{0x3b642000},{0x3b644000},{0x3b646000},{0x3b648000},{0x3b64a000},{0x3b64c000},{0x3b64e000},{0x3b650000},{0x3b652000},{0x3b654000},{0x3b656000},{0x3b658000},{0x3b65a000},{0x3b65c000},{0x3b65e000},{0x3b660000},{0x3b662000},{0x3b664000},{0x3b666000},{0x3b668000},{0x3b66a000},{0x3b66c000},{0x3b66e000},{0x3b670000},{0x3b672000},{0x3b674000},{0x3b676000},{0x3b678000},{0x3b67a000},{0x3b67c000},{0x3b67e000}, -{0x3b680000},{0x3b682000},{0x3b684000},{0x3b686000},{0x3b688000},{0x3b68a000},{0x3b68c000},{0x3b68e000},{0x3b690000},{0x3b692000},{0x3b694000},{0x3b696000},{0x3b698000},{0x3b69a000},{0x3b69c000},{0x3b69e000},{0x3b6a0000},{0x3b6a2000},{0x3b6a4000},{0x3b6a6000},{0x3b6a8000},{0x3b6aa000},{0x3b6ac000},{0x3b6ae000},{0x3b6b0000},{0x3b6b2000},{0x3b6b4000},{0x3b6b6000},{0x3b6b8000},{0x3b6ba000},{0x3b6bc000},{0x3b6be000}, -{0x3b6c0000},{0x3b6c2000},{0x3b6c4000},{0x3b6c6000},{0x3b6c8000},{0x3b6ca000},{0x3b6cc000},{0x3b6ce000},{0x3b6d0000},{0x3b6d2000},{0x3b6d4000},{0x3b6d6000},{0x3b6d8000},{0x3b6da000},{0x3b6dc000},{0x3b6de000},{0x3b6e0000},{0x3b6e2000},{0x3b6e4000},{0x3b6e6000},{0x3b6e8000},{0x3b6ea000},{0x3b6ec000},{0x3b6ee000},{0x3b6f0000},{0x3b6f2000},{0x3b6f4000},{0x3b6f6000},{0x3b6f8000},{0x3b6fa000},{0x3b6fc000},{0x3b6fe000}, -{0x3b700000},{0x3b702000},{0x3b704000},{0x3b706000},{0x3b708000},{0x3b70a000},{0x3b70c000},{0x3b70e000},{0x3b710000},{0x3b712000},{0x3b714000},{0x3b716000},{0x3b718000},{0x3b71a000},{0x3b71c000},{0x3b71e000},{0x3b720000},{0x3b722000},{0x3b724000},{0x3b726000},{0x3b728000},{0x3b72a000},{0x3b72c000},{0x3b72e000},{0x3b730000},{0x3b732000},{0x3b734000},{0x3b736000},{0x3b738000},{0x3b73a000},{0x3b73c000},{0x3b73e000}, -{0x3b740000},{0x3b742000},{0x3b744000},{0x3b746000},{0x3b748000},{0x3b74a000},{0x3b74c000},{0x3b74e000},{0x3b750000},{0x3b752000},{0x3b754000},{0x3b756000},{0x3b758000},{0x3b75a000},{0x3b75c000},{0x3b75e000},{0x3b760000},{0x3b762000},{0x3b764000},{0x3b766000},{0x3b768000},{0x3b76a000},{0x3b76c000},{0x3b76e000},{0x3b770000},{0x3b772000},{0x3b774000},{0x3b776000},{0x3b778000},{0x3b77a000},{0x3b77c000},{0x3b77e000}, -{0x3b780000},{0x3b782000},{0x3b784000},{0x3b786000},{0x3b788000},{0x3b78a000},{0x3b78c000},{0x3b78e000},{0x3b790000},{0x3b792000},{0x3b794000},{0x3b796000},{0x3b798000},{0x3b79a000},{0x3b79c000},{0x3b79e000},{0x3b7a0000},{0x3b7a2000},{0x3b7a4000},{0x3b7a6000},{0x3b7a8000},{0x3b7aa000},{0x3b7ac000},{0x3b7ae000},{0x3b7b0000},{0x3b7b2000},{0x3b7b4000},{0x3b7b6000},{0x3b7b8000},{0x3b7ba000},{0x3b7bc000},{0x3b7be000}, -{0x3b7c0000},{0x3b7c2000},{0x3b7c4000},{0x3b7c6000},{0x3b7c8000},{0x3b7ca000},{0x3b7cc000},{0x3b7ce000},{0x3b7d0000},{0x3b7d2000},{0x3b7d4000},{0x3b7d6000},{0x3b7d8000},{0x3b7da000},{0x3b7dc000},{0x3b7de000},{0x3b7e0000},{0x3b7e2000},{0x3b7e4000},{0x3b7e6000},{0x3b7e8000},{0x3b7ea000},{0x3b7ec000},{0x3b7ee000},{0x3b7f0000},{0x3b7f2000},{0x3b7f4000},{0x3b7f6000},{0x3b7f8000},{0x3b7fa000},{0x3b7fc000},{0x3b7fe000}, -{0x3b800000},{0x3b802000},{0x3b804000},{0x3b806000},{0x3b808000},{0x3b80a000},{0x3b80c000},{0x3b80e000},{0x3b810000},{0x3b812000},{0x3b814000},{0x3b816000},{0x3b818000},{0x3b81a000},{0x3b81c000},{0x3b81e000},{0x3b820000},{0x3b822000},{0x3b824000},{0x3b826000},{0x3b828000},{0x3b82a000},{0x3b82c000},{0x3b82e000},{0x3b830000},{0x3b832000},{0x3b834000},{0x3b836000},{0x3b838000},{0x3b83a000},{0x3b83c000},{0x3b83e000}, -{0x3b840000},{0x3b842000},{0x3b844000},{0x3b846000},{0x3b848000},{0x3b84a000},{0x3b84c000},{0x3b84e000},{0x3b850000},{0x3b852000},{0x3b854000},{0x3b856000},{0x3b858000},{0x3b85a000},{0x3b85c000},{0x3b85e000},{0x3b860000},{0x3b862000},{0x3b864000},{0x3b866000},{0x3b868000},{0x3b86a000},{0x3b86c000},{0x3b86e000},{0x3b870000},{0x3b872000},{0x3b874000},{0x3b876000},{0x3b878000},{0x3b87a000},{0x3b87c000},{0x3b87e000}, -{0x3b880000},{0x3b882000},{0x3b884000},{0x3b886000},{0x3b888000},{0x3b88a000},{0x3b88c000},{0x3b88e000},{0x3b890000},{0x3b892000},{0x3b894000},{0x3b896000},{0x3b898000},{0x3b89a000},{0x3b89c000},{0x3b89e000},{0x3b8a0000},{0x3b8a2000},{0x3b8a4000},{0x3b8a6000},{0x3b8a8000},{0x3b8aa000},{0x3b8ac000},{0x3b8ae000},{0x3b8b0000},{0x3b8b2000},{0x3b8b4000},{0x3b8b6000},{0x3b8b8000},{0x3b8ba000},{0x3b8bc000},{0x3b8be000}, -{0x3b8c0000},{0x3b8c2000},{0x3b8c4000},{0x3b8c6000},{0x3b8c8000},{0x3b8ca000},{0x3b8cc000},{0x3b8ce000},{0x3b8d0000},{0x3b8d2000},{0x3b8d4000},{0x3b8d6000},{0x3b8d8000},{0x3b8da000},{0x3b8dc000},{0x3b8de000},{0x3b8e0000},{0x3b8e2000},{0x3b8e4000},{0x3b8e6000},{0x3b8e8000},{0x3b8ea000},{0x3b8ec000},{0x3b8ee000},{0x3b8f0000},{0x3b8f2000},{0x3b8f4000},{0x3b8f6000},{0x3b8f8000},{0x3b8fa000},{0x3b8fc000},{0x3b8fe000}, -{0x3b900000},{0x3b902000},{0x3b904000},{0x3b906000},{0x3b908000},{0x3b90a000},{0x3b90c000},{0x3b90e000},{0x3b910000},{0x3b912000},{0x3b914000},{0x3b916000},{0x3b918000},{0x3b91a000},{0x3b91c000},{0x3b91e000},{0x3b920000},{0x3b922000},{0x3b924000},{0x3b926000},{0x3b928000},{0x3b92a000},{0x3b92c000},{0x3b92e000},{0x3b930000},{0x3b932000},{0x3b934000},{0x3b936000},{0x3b938000},{0x3b93a000},{0x3b93c000},{0x3b93e000}, -{0x3b940000},{0x3b942000},{0x3b944000},{0x3b946000},{0x3b948000},{0x3b94a000},{0x3b94c000},{0x3b94e000},{0x3b950000},{0x3b952000},{0x3b954000},{0x3b956000},{0x3b958000},{0x3b95a000},{0x3b95c000},{0x3b95e000},{0x3b960000},{0x3b962000},{0x3b964000},{0x3b966000},{0x3b968000},{0x3b96a000},{0x3b96c000},{0x3b96e000},{0x3b970000},{0x3b972000},{0x3b974000},{0x3b976000},{0x3b978000},{0x3b97a000},{0x3b97c000},{0x3b97e000}, -{0x3b980000},{0x3b982000},{0x3b984000},{0x3b986000},{0x3b988000},{0x3b98a000},{0x3b98c000},{0x3b98e000},{0x3b990000},{0x3b992000},{0x3b994000},{0x3b996000},{0x3b998000},{0x3b99a000},{0x3b99c000},{0x3b99e000},{0x3b9a0000},{0x3b9a2000},{0x3b9a4000},{0x3b9a6000},{0x3b9a8000},{0x3b9aa000},{0x3b9ac000},{0x3b9ae000},{0x3b9b0000},{0x3b9b2000},{0x3b9b4000},{0x3b9b6000},{0x3b9b8000},{0x3b9ba000},{0x3b9bc000},{0x3b9be000}, -{0x3b9c0000},{0x3b9c2000},{0x3b9c4000},{0x3b9c6000},{0x3b9c8000},{0x3b9ca000},{0x3b9cc000},{0x3b9ce000},{0x3b9d0000},{0x3b9d2000},{0x3b9d4000},{0x3b9d6000},{0x3b9d8000},{0x3b9da000},{0x3b9dc000},{0x3b9de000},{0x3b9e0000},{0x3b9e2000},{0x3b9e4000},{0x3b9e6000},{0x3b9e8000},{0x3b9ea000},{0x3b9ec000},{0x3b9ee000},{0x3b9f0000},{0x3b9f2000},{0x3b9f4000},{0x3b9f6000},{0x3b9f8000},{0x3b9fa000},{0x3b9fc000},{0x3b9fe000}, -{0x3ba00000},{0x3ba02000},{0x3ba04000},{0x3ba06000},{0x3ba08000},{0x3ba0a000},{0x3ba0c000},{0x3ba0e000},{0x3ba10000},{0x3ba12000},{0x3ba14000},{0x3ba16000},{0x3ba18000},{0x3ba1a000},{0x3ba1c000},{0x3ba1e000},{0x3ba20000},{0x3ba22000},{0x3ba24000},{0x3ba26000},{0x3ba28000},{0x3ba2a000},{0x3ba2c000},{0x3ba2e000},{0x3ba30000},{0x3ba32000},{0x3ba34000},{0x3ba36000},{0x3ba38000},{0x3ba3a000},{0x3ba3c000},{0x3ba3e000}, -{0x3ba40000},{0x3ba42000},{0x3ba44000},{0x3ba46000},{0x3ba48000},{0x3ba4a000},{0x3ba4c000},{0x3ba4e000},{0x3ba50000},{0x3ba52000},{0x3ba54000},{0x3ba56000},{0x3ba58000},{0x3ba5a000},{0x3ba5c000},{0x3ba5e000},{0x3ba60000},{0x3ba62000},{0x3ba64000},{0x3ba66000},{0x3ba68000},{0x3ba6a000},{0x3ba6c000},{0x3ba6e000},{0x3ba70000},{0x3ba72000},{0x3ba74000},{0x3ba76000},{0x3ba78000},{0x3ba7a000},{0x3ba7c000},{0x3ba7e000}, -{0x3ba80000},{0x3ba82000},{0x3ba84000},{0x3ba86000},{0x3ba88000},{0x3ba8a000},{0x3ba8c000},{0x3ba8e000},{0x3ba90000},{0x3ba92000},{0x3ba94000},{0x3ba96000},{0x3ba98000},{0x3ba9a000},{0x3ba9c000},{0x3ba9e000},{0x3baa0000},{0x3baa2000},{0x3baa4000},{0x3baa6000},{0x3baa8000},{0x3baaa000},{0x3baac000},{0x3baae000},{0x3bab0000},{0x3bab2000},{0x3bab4000},{0x3bab6000},{0x3bab8000},{0x3baba000},{0x3babc000},{0x3babe000}, -{0x3bac0000},{0x3bac2000},{0x3bac4000},{0x3bac6000},{0x3bac8000},{0x3baca000},{0x3bacc000},{0x3bace000},{0x3bad0000},{0x3bad2000},{0x3bad4000},{0x3bad6000},{0x3bad8000},{0x3bada000},{0x3badc000},{0x3bade000},{0x3bae0000},{0x3bae2000},{0x3bae4000},{0x3bae6000},{0x3bae8000},{0x3baea000},{0x3baec000},{0x3baee000},{0x3baf0000},{0x3baf2000},{0x3baf4000},{0x3baf6000},{0x3baf8000},{0x3bafa000},{0x3bafc000},{0x3bafe000}, -{0x3bb00000},{0x3bb02000},{0x3bb04000},{0x3bb06000},{0x3bb08000},{0x3bb0a000},{0x3bb0c000},{0x3bb0e000},{0x3bb10000},{0x3bb12000},{0x3bb14000},{0x3bb16000},{0x3bb18000},{0x3bb1a000},{0x3bb1c000},{0x3bb1e000},{0x3bb20000},{0x3bb22000},{0x3bb24000},{0x3bb26000},{0x3bb28000},{0x3bb2a000},{0x3bb2c000},{0x3bb2e000},{0x3bb30000},{0x3bb32000},{0x3bb34000},{0x3bb36000},{0x3bb38000},{0x3bb3a000},{0x3bb3c000},{0x3bb3e000}, -{0x3bb40000},{0x3bb42000},{0x3bb44000},{0x3bb46000},{0x3bb48000},{0x3bb4a000},{0x3bb4c000},{0x3bb4e000},{0x3bb50000},{0x3bb52000},{0x3bb54000},{0x3bb56000},{0x3bb58000},{0x3bb5a000},{0x3bb5c000},{0x3bb5e000},{0x3bb60000},{0x3bb62000},{0x3bb64000},{0x3bb66000},{0x3bb68000},{0x3bb6a000},{0x3bb6c000},{0x3bb6e000},{0x3bb70000},{0x3bb72000},{0x3bb74000},{0x3bb76000},{0x3bb78000},{0x3bb7a000},{0x3bb7c000},{0x3bb7e000}, -{0x3bb80000},{0x3bb82000},{0x3bb84000},{0x3bb86000},{0x3bb88000},{0x3bb8a000},{0x3bb8c000},{0x3bb8e000},{0x3bb90000},{0x3bb92000},{0x3bb94000},{0x3bb96000},{0x3bb98000},{0x3bb9a000},{0x3bb9c000},{0x3bb9e000},{0x3bba0000},{0x3bba2000},{0x3bba4000},{0x3bba6000},{0x3bba8000},{0x3bbaa000},{0x3bbac000},{0x3bbae000},{0x3bbb0000},{0x3bbb2000},{0x3bbb4000},{0x3bbb6000},{0x3bbb8000},{0x3bbba000},{0x3bbbc000},{0x3bbbe000}, -{0x3bbc0000},{0x3bbc2000},{0x3bbc4000},{0x3bbc6000},{0x3bbc8000},{0x3bbca000},{0x3bbcc000},{0x3bbce000},{0x3bbd0000},{0x3bbd2000},{0x3bbd4000},{0x3bbd6000},{0x3bbd8000},{0x3bbda000},{0x3bbdc000},{0x3bbde000},{0x3bbe0000},{0x3bbe2000},{0x3bbe4000},{0x3bbe6000},{0x3bbe8000},{0x3bbea000},{0x3bbec000},{0x3bbee000},{0x3bbf0000},{0x3bbf2000},{0x3bbf4000},{0x3bbf6000},{0x3bbf8000},{0x3bbfa000},{0x3bbfc000},{0x3bbfe000}, -{0x3bc00000},{0x3bc02000},{0x3bc04000},{0x3bc06000},{0x3bc08000},{0x3bc0a000},{0x3bc0c000},{0x3bc0e000},{0x3bc10000},{0x3bc12000},{0x3bc14000},{0x3bc16000},{0x3bc18000},{0x3bc1a000},{0x3bc1c000},{0x3bc1e000},{0x3bc20000},{0x3bc22000},{0x3bc24000},{0x3bc26000},{0x3bc28000},{0x3bc2a000},{0x3bc2c000},{0x3bc2e000},{0x3bc30000},{0x3bc32000},{0x3bc34000},{0x3bc36000},{0x3bc38000},{0x3bc3a000},{0x3bc3c000},{0x3bc3e000}, -{0x3bc40000},{0x3bc42000},{0x3bc44000},{0x3bc46000},{0x3bc48000},{0x3bc4a000},{0x3bc4c000},{0x3bc4e000},{0x3bc50000},{0x3bc52000},{0x3bc54000},{0x3bc56000},{0x3bc58000},{0x3bc5a000},{0x3bc5c000},{0x3bc5e000},{0x3bc60000},{0x3bc62000},{0x3bc64000},{0x3bc66000},{0x3bc68000},{0x3bc6a000},{0x3bc6c000},{0x3bc6e000},{0x3bc70000},{0x3bc72000},{0x3bc74000},{0x3bc76000},{0x3bc78000},{0x3bc7a000},{0x3bc7c000},{0x3bc7e000}, -{0x3bc80000},{0x3bc82000},{0x3bc84000},{0x3bc86000},{0x3bc88000},{0x3bc8a000},{0x3bc8c000},{0x3bc8e000},{0x3bc90000},{0x3bc92000},{0x3bc94000},{0x3bc96000},{0x3bc98000},{0x3bc9a000},{0x3bc9c000},{0x3bc9e000},{0x3bca0000},{0x3bca2000},{0x3bca4000},{0x3bca6000},{0x3bca8000},{0x3bcaa000},{0x3bcac000},{0x3bcae000},{0x3bcb0000},{0x3bcb2000},{0x3bcb4000},{0x3bcb6000},{0x3bcb8000},{0x3bcba000},{0x3bcbc000},{0x3bcbe000}, -{0x3bcc0000},{0x3bcc2000},{0x3bcc4000},{0x3bcc6000},{0x3bcc8000},{0x3bcca000},{0x3bccc000},{0x3bcce000},{0x3bcd0000},{0x3bcd2000},{0x3bcd4000},{0x3bcd6000},{0x3bcd8000},{0x3bcda000},{0x3bcdc000},{0x3bcde000},{0x3bce0000},{0x3bce2000},{0x3bce4000},{0x3bce6000},{0x3bce8000},{0x3bcea000},{0x3bcec000},{0x3bcee000},{0x3bcf0000},{0x3bcf2000},{0x3bcf4000},{0x3bcf6000},{0x3bcf8000},{0x3bcfa000},{0x3bcfc000},{0x3bcfe000}, -{0x3bd00000},{0x3bd02000},{0x3bd04000},{0x3bd06000},{0x3bd08000},{0x3bd0a000},{0x3bd0c000},{0x3bd0e000},{0x3bd10000},{0x3bd12000},{0x3bd14000},{0x3bd16000},{0x3bd18000},{0x3bd1a000},{0x3bd1c000},{0x3bd1e000},{0x3bd20000},{0x3bd22000},{0x3bd24000},{0x3bd26000},{0x3bd28000},{0x3bd2a000},{0x3bd2c000},{0x3bd2e000},{0x3bd30000},{0x3bd32000},{0x3bd34000},{0x3bd36000},{0x3bd38000},{0x3bd3a000},{0x3bd3c000},{0x3bd3e000}, -{0x3bd40000},{0x3bd42000},{0x3bd44000},{0x3bd46000},{0x3bd48000},{0x3bd4a000},{0x3bd4c000},{0x3bd4e000},{0x3bd50000},{0x3bd52000},{0x3bd54000},{0x3bd56000},{0x3bd58000},{0x3bd5a000},{0x3bd5c000},{0x3bd5e000},{0x3bd60000},{0x3bd62000},{0x3bd64000},{0x3bd66000},{0x3bd68000},{0x3bd6a000},{0x3bd6c000},{0x3bd6e000},{0x3bd70000},{0x3bd72000},{0x3bd74000},{0x3bd76000},{0x3bd78000},{0x3bd7a000},{0x3bd7c000},{0x3bd7e000}, -{0x3bd80000},{0x3bd82000},{0x3bd84000},{0x3bd86000},{0x3bd88000},{0x3bd8a000},{0x3bd8c000},{0x3bd8e000},{0x3bd90000},{0x3bd92000},{0x3bd94000},{0x3bd96000},{0x3bd98000},{0x3bd9a000},{0x3bd9c000},{0x3bd9e000},{0x3bda0000},{0x3bda2000},{0x3bda4000},{0x3bda6000},{0x3bda8000},{0x3bdaa000},{0x3bdac000},{0x3bdae000},{0x3bdb0000},{0x3bdb2000},{0x3bdb4000},{0x3bdb6000},{0x3bdb8000},{0x3bdba000},{0x3bdbc000},{0x3bdbe000}, -{0x3bdc0000},{0x3bdc2000},{0x3bdc4000},{0x3bdc6000},{0x3bdc8000},{0x3bdca000},{0x3bdcc000},{0x3bdce000},{0x3bdd0000},{0x3bdd2000},{0x3bdd4000},{0x3bdd6000},{0x3bdd8000},{0x3bdda000},{0x3bddc000},{0x3bdde000},{0x3bde0000},{0x3bde2000},{0x3bde4000},{0x3bde6000},{0x3bde8000},{0x3bdea000},{0x3bdec000},{0x3bdee000},{0x3bdf0000},{0x3bdf2000},{0x3bdf4000},{0x3bdf6000},{0x3bdf8000},{0x3bdfa000},{0x3bdfc000},{0x3bdfe000}, -{0x3be00000},{0x3be02000},{0x3be04000},{0x3be06000},{0x3be08000},{0x3be0a000},{0x3be0c000},{0x3be0e000},{0x3be10000},{0x3be12000},{0x3be14000},{0x3be16000},{0x3be18000},{0x3be1a000},{0x3be1c000},{0x3be1e000},{0x3be20000},{0x3be22000},{0x3be24000},{0x3be26000},{0x3be28000},{0x3be2a000},{0x3be2c000},{0x3be2e000},{0x3be30000},{0x3be32000},{0x3be34000},{0x3be36000},{0x3be38000},{0x3be3a000},{0x3be3c000},{0x3be3e000}, -{0x3be40000},{0x3be42000},{0x3be44000},{0x3be46000},{0x3be48000},{0x3be4a000},{0x3be4c000},{0x3be4e000},{0x3be50000},{0x3be52000},{0x3be54000},{0x3be56000},{0x3be58000},{0x3be5a000},{0x3be5c000},{0x3be5e000},{0x3be60000},{0x3be62000},{0x3be64000},{0x3be66000},{0x3be68000},{0x3be6a000},{0x3be6c000},{0x3be6e000},{0x3be70000},{0x3be72000},{0x3be74000},{0x3be76000},{0x3be78000},{0x3be7a000},{0x3be7c000},{0x3be7e000}, -{0x3be80000},{0x3be82000},{0x3be84000},{0x3be86000},{0x3be88000},{0x3be8a000},{0x3be8c000},{0x3be8e000},{0x3be90000},{0x3be92000},{0x3be94000},{0x3be96000},{0x3be98000},{0x3be9a000},{0x3be9c000},{0x3be9e000},{0x3bea0000},{0x3bea2000},{0x3bea4000},{0x3bea6000},{0x3bea8000},{0x3beaa000},{0x3beac000},{0x3beae000},{0x3beb0000},{0x3beb2000},{0x3beb4000},{0x3beb6000},{0x3beb8000},{0x3beba000},{0x3bebc000},{0x3bebe000}, -{0x3bec0000},{0x3bec2000},{0x3bec4000},{0x3bec6000},{0x3bec8000},{0x3beca000},{0x3becc000},{0x3bece000},{0x3bed0000},{0x3bed2000},{0x3bed4000},{0x3bed6000},{0x3bed8000},{0x3beda000},{0x3bedc000},{0x3bede000},{0x3bee0000},{0x3bee2000},{0x3bee4000},{0x3bee6000},{0x3bee8000},{0x3beea000},{0x3beec000},{0x3beee000},{0x3bef0000},{0x3bef2000},{0x3bef4000},{0x3bef6000},{0x3bef8000},{0x3befa000},{0x3befc000},{0x3befe000}, -{0x3bf00000},{0x3bf02000},{0x3bf04000},{0x3bf06000},{0x3bf08000},{0x3bf0a000},{0x3bf0c000},{0x3bf0e000},{0x3bf10000},{0x3bf12000},{0x3bf14000},{0x3bf16000},{0x3bf18000},{0x3bf1a000},{0x3bf1c000},{0x3bf1e000},{0x3bf20000},{0x3bf22000},{0x3bf24000},{0x3bf26000},{0x3bf28000},{0x3bf2a000},{0x3bf2c000},{0x3bf2e000},{0x3bf30000},{0x3bf32000},{0x3bf34000},{0x3bf36000},{0x3bf38000},{0x3bf3a000},{0x3bf3c000},{0x3bf3e000}, -{0x3bf40000},{0x3bf42000},{0x3bf44000},{0x3bf46000},{0x3bf48000},{0x3bf4a000},{0x3bf4c000},{0x3bf4e000},{0x3bf50000},{0x3bf52000},{0x3bf54000},{0x3bf56000},{0x3bf58000},{0x3bf5a000},{0x3bf5c000},{0x3bf5e000},{0x3bf60000},{0x3bf62000},{0x3bf64000},{0x3bf66000},{0x3bf68000},{0x3bf6a000},{0x3bf6c000},{0x3bf6e000},{0x3bf70000},{0x3bf72000},{0x3bf74000},{0x3bf76000},{0x3bf78000},{0x3bf7a000},{0x3bf7c000},{0x3bf7e000}, -{0x3bf80000},{0x3bf82000},{0x3bf84000},{0x3bf86000},{0x3bf88000},{0x3bf8a000},{0x3bf8c000},{0x3bf8e000},{0x3bf90000},{0x3bf92000},{0x3bf94000},{0x3bf96000},{0x3bf98000},{0x3bf9a000},{0x3bf9c000},{0x3bf9e000},{0x3bfa0000},{0x3bfa2000},{0x3bfa4000},{0x3bfa6000},{0x3bfa8000},{0x3bfaa000},{0x3bfac000},{0x3bfae000},{0x3bfb0000},{0x3bfb2000},{0x3bfb4000},{0x3bfb6000},{0x3bfb8000},{0x3bfba000},{0x3bfbc000},{0x3bfbe000}, -{0x3bfc0000},{0x3bfc2000},{0x3bfc4000},{0x3bfc6000},{0x3bfc8000},{0x3bfca000},{0x3bfcc000},{0x3bfce000},{0x3bfd0000},{0x3bfd2000},{0x3bfd4000},{0x3bfd6000},{0x3bfd8000},{0x3bfda000},{0x3bfdc000},{0x3bfde000},{0x3bfe0000},{0x3bfe2000},{0x3bfe4000},{0x3bfe6000},{0x3bfe8000},{0x3bfea000},{0x3bfec000},{0x3bfee000},{0x3bff0000},{0x3bff2000},{0x3bff4000},{0x3bff6000},{0x3bff8000},{0x3bffa000},{0x3bffc000},{0x3bffe000}, -{0x3c000000},{0x3c002000},{0x3c004000},{0x3c006000},{0x3c008000},{0x3c00a000},{0x3c00c000},{0x3c00e000},{0x3c010000},{0x3c012000},{0x3c014000},{0x3c016000},{0x3c018000},{0x3c01a000},{0x3c01c000},{0x3c01e000},{0x3c020000},{0x3c022000},{0x3c024000},{0x3c026000},{0x3c028000},{0x3c02a000},{0x3c02c000},{0x3c02e000},{0x3c030000},{0x3c032000},{0x3c034000},{0x3c036000},{0x3c038000},{0x3c03a000},{0x3c03c000},{0x3c03e000}, -{0x3c040000},{0x3c042000},{0x3c044000},{0x3c046000},{0x3c048000},{0x3c04a000},{0x3c04c000},{0x3c04e000},{0x3c050000},{0x3c052000},{0x3c054000},{0x3c056000},{0x3c058000},{0x3c05a000},{0x3c05c000},{0x3c05e000},{0x3c060000},{0x3c062000},{0x3c064000},{0x3c066000},{0x3c068000},{0x3c06a000},{0x3c06c000},{0x3c06e000},{0x3c070000},{0x3c072000},{0x3c074000},{0x3c076000},{0x3c078000},{0x3c07a000},{0x3c07c000},{0x3c07e000}, -{0x3c080000},{0x3c082000},{0x3c084000},{0x3c086000},{0x3c088000},{0x3c08a000},{0x3c08c000},{0x3c08e000},{0x3c090000},{0x3c092000},{0x3c094000},{0x3c096000},{0x3c098000},{0x3c09a000},{0x3c09c000},{0x3c09e000},{0x3c0a0000},{0x3c0a2000},{0x3c0a4000},{0x3c0a6000},{0x3c0a8000},{0x3c0aa000},{0x3c0ac000},{0x3c0ae000},{0x3c0b0000},{0x3c0b2000},{0x3c0b4000},{0x3c0b6000},{0x3c0b8000},{0x3c0ba000},{0x3c0bc000},{0x3c0be000}, -{0x3c0c0000},{0x3c0c2000},{0x3c0c4000},{0x3c0c6000},{0x3c0c8000},{0x3c0ca000},{0x3c0cc000},{0x3c0ce000},{0x3c0d0000},{0x3c0d2000},{0x3c0d4000},{0x3c0d6000},{0x3c0d8000},{0x3c0da000},{0x3c0dc000},{0x3c0de000},{0x3c0e0000},{0x3c0e2000},{0x3c0e4000},{0x3c0e6000},{0x3c0e8000},{0x3c0ea000},{0x3c0ec000},{0x3c0ee000},{0x3c0f0000},{0x3c0f2000},{0x3c0f4000},{0x3c0f6000},{0x3c0f8000},{0x3c0fa000},{0x3c0fc000},{0x3c0fe000}, -{0x3c100000},{0x3c102000},{0x3c104000},{0x3c106000},{0x3c108000},{0x3c10a000},{0x3c10c000},{0x3c10e000},{0x3c110000},{0x3c112000},{0x3c114000},{0x3c116000},{0x3c118000},{0x3c11a000},{0x3c11c000},{0x3c11e000},{0x3c120000},{0x3c122000},{0x3c124000},{0x3c126000},{0x3c128000},{0x3c12a000},{0x3c12c000},{0x3c12e000},{0x3c130000},{0x3c132000},{0x3c134000},{0x3c136000},{0x3c138000},{0x3c13a000},{0x3c13c000},{0x3c13e000}, -{0x3c140000},{0x3c142000},{0x3c144000},{0x3c146000},{0x3c148000},{0x3c14a000},{0x3c14c000},{0x3c14e000},{0x3c150000},{0x3c152000},{0x3c154000},{0x3c156000},{0x3c158000},{0x3c15a000},{0x3c15c000},{0x3c15e000},{0x3c160000},{0x3c162000},{0x3c164000},{0x3c166000},{0x3c168000},{0x3c16a000},{0x3c16c000},{0x3c16e000},{0x3c170000},{0x3c172000},{0x3c174000},{0x3c176000},{0x3c178000},{0x3c17a000},{0x3c17c000},{0x3c17e000}, -{0x3c180000},{0x3c182000},{0x3c184000},{0x3c186000},{0x3c188000},{0x3c18a000},{0x3c18c000},{0x3c18e000},{0x3c190000},{0x3c192000},{0x3c194000},{0x3c196000},{0x3c198000},{0x3c19a000},{0x3c19c000},{0x3c19e000},{0x3c1a0000},{0x3c1a2000},{0x3c1a4000},{0x3c1a6000},{0x3c1a8000},{0x3c1aa000},{0x3c1ac000},{0x3c1ae000},{0x3c1b0000},{0x3c1b2000},{0x3c1b4000},{0x3c1b6000},{0x3c1b8000},{0x3c1ba000},{0x3c1bc000},{0x3c1be000}, -{0x3c1c0000},{0x3c1c2000},{0x3c1c4000},{0x3c1c6000},{0x3c1c8000},{0x3c1ca000},{0x3c1cc000},{0x3c1ce000},{0x3c1d0000},{0x3c1d2000},{0x3c1d4000},{0x3c1d6000},{0x3c1d8000},{0x3c1da000},{0x3c1dc000},{0x3c1de000},{0x3c1e0000},{0x3c1e2000},{0x3c1e4000},{0x3c1e6000},{0x3c1e8000},{0x3c1ea000},{0x3c1ec000},{0x3c1ee000},{0x3c1f0000},{0x3c1f2000},{0x3c1f4000},{0x3c1f6000},{0x3c1f8000},{0x3c1fa000},{0x3c1fc000},{0x3c1fe000}, -{0x3c200000},{0x3c202000},{0x3c204000},{0x3c206000},{0x3c208000},{0x3c20a000},{0x3c20c000},{0x3c20e000},{0x3c210000},{0x3c212000},{0x3c214000},{0x3c216000},{0x3c218000},{0x3c21a000},{0x3c21c000},{0x3c21e000},{0x3c220000},{0x3c222000},{0x3c224000},{0x3c226000},{0x3c228000},{0x3c22a000},{0x3c22c000},{0x3c22e000},{0x3c230000},{0x3c232000},{0x3c234000},{0x3c236000},{0x3c238000},{0x3c23a000},{0x3c23c000},{0x3c23e000}, -{0x3c240000},{0x3c242000},{0x3c244000},{0x3c246000},{0x3c248000},{0x3c24a000},{0x3c24c000},{0x3c24e000},{0x3c250000},{0x3c252000},{0x3c254000},{0x3c256000},{0x3c258000},{0x3c25a000},{0x3c25c000},{0x3c25e000},{0x3c260000},{0x3c262000},{0x3c264000},{0x3c266000},{0x3c268000},{0x3c26a000},{0x3c26c000},{0x3c26e000},{0x3c270000},{0x3c272000},{0x3c274000},{0x3c276000},{0x3c278000},{0x3c27a000},{0x3c27c000},{0x3c27e000}, -{0x3c280000},{0x3c282000},{0x3c284000},{0x3c286000},{0x3c288000},{0x3c28a000},{0x3c28c000},{0x3c28e000},{0x3c290000},{0x3c292000},{0x3c294000},{0x3c296000},{0x3c298000},{0x3c29a000},{0x3c29c000},{0x3c29e000},{0x3c2a0000},{0x3c2a2000},{0x3c2a4000},{0x3c2a6000},{0x3c2a8000},{0x3c2aa000},{0x3c2ac000},{0x3c2ae000},{0x3c2b0000},{0x3c2b2000},{0x3c2b4000},{0x3c2b6000},{0x3c2b8000},{0x3c2ba000},{0x3c2bc000},{0x3c2be000}, -{0x3c2c0000},{0x3c2c2000},{0x3c2c4000},{0x3c2c6000},{0x3c2c8000},{0x3c2ca000},{0x3c2cc000},{0x3c2ce000},{0x3c2d0000},{0x3c2d2000},{0x3c2d4000},{0x3c2d6000},{0x3c2d8000},{0x3c2da000},{0x3c2dc000},{0x3c2de000},{0x3c2e0000},{0x3c2e2000},{0x3c2e4000},{0x3c2e6000},{0x3c2e8000},{0x3c2ea000},{0x3c2ec000},{0x3c2ee000},{0x3c2f0000},{0x3c2f2000},{0x3c2f4000},{0x3c2f6000},{0x3c2f8000},{0x3c2fa000},{0x3c2fc000},{0x3c2fe000}, -{0x3c300000},{0x3c302000},{0x3c304000},{0x3c306000},{0x3c308000},{0x3c30a000},{0x3c30c000},{0x3c30e000},{0x3c310000},{0x3c312000},{0x3c314000},{0x3c316000},{0x3c318000},{0x3c31a000},{0x3c31c000},{0x3c31e000},{0x3c320000},{0x3c322000},{0x3c324000},{0x3c326000},{0x3c328000},{0x3c32a000},{0x3c32c000},{0x3c32e000},{0x3c330000},{0x3c332000},{0x3c334000},{0x3c336000},{0x3c338000},{0x3c33a000},{0x3c33c000},{0x3c33e000}, -{0x3c340000},{0x3c342000},{0x3c344000},{0x3c346000},{0x3c348000},{0x3c34a000},{0x3c34c000},{0x3c34e000},{0x3c350000},{0x3c352000},{0x3c354000},{0x3c356000},{0x3c358000},{0x3c35a000},{0x3c35c000},{0x3c35e000},{0x3c360000},{0x3c362000},{0x3c364000},{0x3c366000},{0x3c368000},{0x3c36a000},{0x3c36c000},{0x3c36e000},{0x3c370000},{0x3c372000},{0x3c374000},{0x3c376000},{0x3c378000},{0x3c37a000},{0x3c37c000},{0x3c37e000}, -{0x3c380000},{0x3c382000},{0x3c384000},{0x3c386000},{0x3c388000},{0x3c38a000},{0x3c38c000},{0x3c38e000},{0x3c390000},{0x3c392000},{0x3c394000},{0x3c396000},{0x3c398000},{0x3c39a000},{0x3c39c000},{0x3c39e000},{0x3c3a0000},{0x3c3a2000},{0x3c3a4000},{0x3c3a6000},{0x3c3a8000},{0x3c3aa000},{0x3c3ac000},{0x3c3ae000},{0x3c3b0000},{0x3c3b2000},{0x3c3b4000},{0x3c3b6000},{0x3c3b8000},{0x3c3ba000},{0x3c3bc000},{0x3c3be000}, -{0x3c3c0000},{0x3c3c2000},{0x3c3c4000},{0x3c3c6000},{0x3c3c8000},{0x3c3ca000},{0x3c3cc000},{0x3c3ce000},{0x3c3d0000},{0x3c3d2000},{0x3c3d4000},{0x3c3d6000},{0x3c3d8000},{0x3c3da000},{0x3c3dc000},{0x3c3de000},{0x3c3e0000},{0x3c3e2000},{0x3c3e4000},{0x3c3e6000},{0x3c3e8000},{0x3c3ea000},{0x3c3ec000},{0x3c3ee000},{0x3c3f0000},{0x3c3f2000},{0x3c3f4000},{0x3c3f6000},{0x3c3f8000},{0x3c3fa000},{0x3c3fc000},{0x3c3fe000}, -{0x3c400000},{0x3c402000},{0x3c404000},{0x3c406000},{0x3c408000},{0x3c40a000},{0x3c40c000},{0x3c40e000},{0x3c410000},{0x3c412000},{0x3c414000},{0x3c416000},{0x3c418000},{0x3c41a000},{0x3c41c000},{0x3c41e000},{0x3c420000},{0x3c422000},{0x3c424000},{0x3c426000},{0x3c428000},{0x3c42a000},{0x3c42c000},{0x3c42e000},{0x3c430000},{0x3c432000},{0x3c434000},{0x3c436000},{0x3c438000},{0x3c43a000},{0x3c43c000},{0x3c43e000}, -{0x3c440000},{0x3c442000},{0x3c444000},{0x3c446000},{0x3c448000},{0x3c44a000},{0x3c44c000},{0x3c44e000},{0x3c450000},{0x3c452000},{0x3c454000},{0x3c456000},{0x3c458000},{0x3c45a000},{0x3c45c000},{0x3c45e000},{0x3c460000},{0x3c462000},{0x3c464000},{0x3c466000},{0x3c468000},{0x3c46a000},{0x3c46c000},{0x3c46e000},{0x3c470000},{0x3c472000},{0x3c474000},{0x3c476000},{0x3c478000},{0x3c47a000},{0x3c47c000},{0x3c47e000}, -{0x3c480000},{0x3c482000},{0x3c484000},{0x3c486000},{0x3c488000},{0x3c48a000},{0x3c48c000},{0x3c48e000},{0x3c490000},{0x3c492000},{0x3c494000},{0x3c496000},{0x3c498000},{0x3c49a000},{0x3c49c000},{0x3c49e000},{0x3c4a0000},{0x3c4a2000},{0x3c4a4000},{0x3c4a6000},{0x3c4a8000},{0x3c4aa000},{0x3c4ac000},{0x3c4ae000},{0x3c4b0000},{0x3c4b2000},{0x3c4b4000},{0x3c4b6000},{0x3c4b8000},{0x3c4ba000},{0x3c4bc000},{0x3c4be000}, -{0x3c4c0000},{0x3c4c2000},{0x3c4c4000},{0x3c4c6000},{0x3c4c8000},{0x3c4ca000},{0x3c4cc000},{0x3c4ce000},{0x3c4d0000},{0x3c4d2000},{0x3c4d4000},{0x3c4d6000},{0x3c4d8000},{0x3c4da000},{0x3c4dc000},{0x3c4de000},{0x3c4e0000},{0x3c4e2000},{0x3c4e4000},{0x3c4e6000},{0x3c4e8000},{0x3c4ea000},{0x3c4ec000},{0x3c4ee000},{0x3c4f0000},{0x3c4f2000},{0x3c4f4000},{0x3c4f6000},{0x3c4f8000},{0x3c4fa000},{0x3c4fc000},{0x3c4fe000}, -{0x3c500000},{0x3c502000},{0x3c504000},{0x3c506000},{0x3c508000},{0x3c50a000},{0x3c50c000},{0x3c50e000},{0x3c510000},{0x3c512000},{0x3c514000},{0x3c516000},{0x3c518000},{0x3c51a000},{0x3c51c000},{0x3c51e000},{0x3c520000},{0x3c522000},{0x3c524000},{0x3c526000},{0x3c528000},{0x3c52a000},{0x3c52c000},{0x3c52e000},{0x3c530000},{0x3c532000},{0x3c534000},{0x3c536000},{0x3c538000},{0x3c53a000},{0x3c53c000},{0x3c53e000}, -{0x3c540000},{0x3c542000},{0x3c544000},{0x3c546000},{0x3c548000},{0x3c54a000},{0x3c54c000},{0x3c54e000},{0x3c550000},{0x3c552000},{0x3c554000},{0x3c556000},{0x3c558000},{0x3c55a000},{0x3c55c000},{0x3c55e000},{0x3c560000},{0x3c562000},{0x3c564000},{0x3c566000},{0x3c568000},{0x3c56a000},{0x3c56c000},{0x3c56e000},{0x3c570000},{0x3c572000},{0x3c574000},{0x3c576000},{0x3c578000},{0x3c57a000},{0x3c57c000},{0x3c57e000}, -{0x3c580000},{0x3c582000},{0x3c584000},{0x3c586000},{0x3c588000},{0x3c58a000},{0x3c58c000},{0x3c58e000},{0x3c590000},{0x3c592000},{0x3c594000},{0x3c596000},{0x3c598000},{0x3c59a000},{0x3c59c000},{0x3c59e000},{0x3c5a0000},{0x3c5a2000},{0x3c5a4000},{0x3c5a6000},{0x3c5a8000},{0x3c5aa000},{0x3c5ac000},{0x3c5ae000},{0x3c5b0000},{0x3c5b2000},{0x3c5b4000},{0x3c5b6000},{0x3c5b8000},{0x3c5ba000},{0x3c5bc000},{0x3c5be000}, -{0x3c5c0000},{0x3c5c2000},{0x3c5c4000},{0x3c5c6000},{0x3c5c8000},{0x3c5ca000},{0x3c5cc000},{0x3c5ce000},{0x3c5d0000},{0x3c5d2000},{0x3c5d4000},{0x3c5d6000},{0x3c5d8000},{0x3c5da000},{0x3c5dc000},{0x3c5de000},{0x3c5e0000},{0x3c5e2000},{0x3c5e4000},{0x3c5e6000},{0x3c5e8000},{0x3c5ea000},{0x3c5ec000},{0x3c5ee000},{0x3c5f0000},{0x3c5f2000},{0x3c5f4000},{0x3c5f6000},{0x3c5f8000},{0x3c5fa000},{0x3c5fc000},{0x3c5fe000}, -{0x3c600000},{0x3c602000},{0x3c604000},{0x3c606000},{0x3c608000},{0x3c60a000},{0x3c60c000},{0x3c60e000},{0x3c610000},{0x3c612000},{0x3c614000},{0x3c616000},{0x3c618000},{0x3c61a000},{0x3c61c000},{0x3c61e000},{0x3c620000},{0x3c622000},{0x3c624000},{0x3c626000},{0x3c628000},{0x3c62a000},{0x3c62c000},{0x3c62e000},{0x3c630000},{0x3c632000},{0x3c634000},{0x3c636000},{0x3c638000},{0x3c63a000},{0x3c63c000},{0x3c63e000}, -{0x3c640000},{0x3c642000},{0x3c644000},{0x3c646000},{0x3c648000},{0x3c64a000},{0x3c64c000},{0x3c64e000},{0x3c650000},{0x3c652000},{0x3c654000},{0x3c656000},{0x3c658000},{0x3c65a000},{0x3c65c000},{0x3c65e000},{0x3c660000},{0x3c662000},{0x3c664000},{0x3c666000},{0x3c668000},{0x3c66a000},{0x3c66c000},{0x3c66e000},{0x3c670000},{0x3c672000},{0x3c674000},{0x3c676000},{0x3c678000},{0x3c67a000},{0x3c67c000},{0x3c67e000}, -{0x3c680000},{0x3c682000},{0x3c684000},{0x3c686000},{0x3c688000},{0x3c68a000},{0x3c68c000},{0x3c68e000},{0x3c690000},{0x3c692000},{0x3c694000},{0x3c696000},{0x3c698000},{0x3c69a000},{0x3c69c000},{0x3c69e000},{0x3c6a0000},{0x3c6a2000},{0x3c6a4000},{0x3c6a6000},{0x3c6a8000},{0x3c6aa000},{0x3c6ac000},{0x3c6ae000},{0x3c6b0000},{0x3c6b2000},{0x3c6b4000},{0x3c6b6000},{0x3c6b8000},{0x3c6ba000},{0x3c6bc000},{0x3c6be000}, -{0x3c6c0000},{0x3c6c2000},{0x3c6c4000},{0x3c6c6000},{0x3c6c8000},{0x3c6ca000},{0x3c6cc000},{0x3c6ce000},{0x3c6d0000},{0x3c6d2000},{0x3c6d4000},{0x3c6d6000},{0x3c6d8000},{0x3c6da000},{0x3c6dc000},{0x3c6de000},{0x3c6e0000},{0x3c6e2000},{0x3c6e4000},{0x3c6e6000},{0x3c6e8000},{0x3c6ea000},{0x3c6ec000},{0x3c6ee000},{0x3c6f0000},{0x3c6f2000},{0x3c6f4000},{0x3c6f6000},{0x3c6f8000},{0x3c6fa000},{0x3c6fc000},{0x3c6fe000}, -{0x3c700000},{0x3c702000},{0x3c704000},{0x3c706000},{0x3c708000},{0x3c70a000},{0x3c70c000},{0x3c70e000},{0x3c710000},{0x3c712000},{0x3c714000},{0x3c716000},{0x3c718000},{0x3c71a000},{0x3c71c000},{0x3c71e000},{0x3c720000},{0x3c722000},{0x3c724000},{0x3c726000},{0x3c728000},{0x3c72a000},{0x3c72c000},{0x3c72e000},{0x3c730000},{0x3c732000},{0x3c734000},{0x3c736000},{0x3c738000},{0x3c73a000},{0x3c73c000},{0x3c73e000}, -{0x3c740000},{0x3c742000},{0x3c744000},{0x3c746000},{0x3c748000},{0x3c74a000},{0x3c74c000},{0x3c74e000},{0x3c750000},{0x3c752000},{0x3c754000},{0x3c756000},{0x3c758000},{0x3c75a000},{0x3c75c000},{0x3c75e000},{0x3c760000},{0x3c762000},{0x3c764000},{0x3c766000},{0x3c768000},{0x3c76a000},{0x3c76c000},{0x3c76e000},{0x3c770000},{0x3c772000},{0x3c774000},{0x3c776000},{0x3c778000},{0x3c77a000},{0x3c77c000},{0x3c77e000}, -{0x3c780000},{0x3c782000},{0x3c784000},{0x3c786000},{0x3c788000},{0x3c78a000},{0x3c78c000},{0x3c78e000},{0x3c790000},{0x3c792000},{0x3c794000},{0x3c796000},{0x3c798000},{0x3c79a000},{0x3c79c000},{0x3c79e000},{0x3c7a0000},{0x3c7a2000},{0x3c7a4000},{0x3c7a6000},{0x3c7a8000},{0x3c7aa000},{0x3c7ac000},{0x3c7ae000},{0x3c7b0000},{0x3c7b2000},{0x3c7b4000},{0x3c7b6000},{0x3c7b8000},{0x3c7ba000},{0x3c7bc000},{0x3c7be000}, -{0x3c7c0000},{0x3c7c2000},{0x3c7c4000},{0x3c7c6000},{0x3c7c8000},{0x3c7ca000},{0x3c7cc000},{0x3c7ce000},{0x3c7d0000},{0x3c7d2000},{0x3c7d4000},{0x3c7d6000},{0x3c7d8000},{0x3c7da000},{0x3c7dc000},{0x3c7de000},{0x3c7e0000},{0x3c7e2000},{0x3c7e4000},{0x3c7e6000},{0x3c7e8000},{0x3c7ea000},{0x3c7ec000},{0x3c7ee000},{0x3c7f0000},{0x3c7f2000},{0x3c7f4000},{0x3c7f6000},{0x3c7f8000},{0x3c7fa000},{0x3c7fc000},{0x3c7fe000}, -{0x3c800000},{0x3c802000},{0x3c804000},{0x3c806000},{0x3c808000},{0x3c80a000},{0x3c80c000},{0x3c80e000},{0x3c810000},{0x3c812000},{0x3c814000},{0x3c816000},{0x3c818000},{0x3c81a000},{0x3c81c000},{0x3c81e000},{0x3c820000},{0x3c822000},{0x3c824000},{0x3c826000},{0x3c828000},{0x3c82a000},{0x3c82c000},{0x3c82e000},{0x3c830000},{0x3c832000},{0x3c834000},{0x3c836000},{0x3c838000},{0x3c83a000},{0x3c83c000},{0x3c83e000}, -{0x3c840000},{0x3c842000},{0x3c844000},{0x3c846000},{0x3c848000},{0x3c84a000},{0x3c84c000},{0x3c84e000},{0x3c850000},{0x3c852000},{0x3c854000},{0x3c856000},{0x3c858000},{0x3c85a000},{0x3c85c000},{0x3c85e000},{0x3c860000},{0x3c862000},{0x3c864000},{0x3c866000},{0x3c868000},{0x3c86a000},{0x3c86c000},{0x3c86e000},{0x3c870000},{0x3c872000},{0x3c874000},{0x3c876000},{0x3c878000},{0x3c87a000},{0x3c87c000},{0x3c87e000}, -{0x3c880000},{0x3c882000},{0x3c884000},{0x3c886000},{0x3c888000},{0x3c88a000},{0x3c88c000},{0x3c88e000},{0x3c890000},{0x3c892000},{0x3c894000},{0x3c896000},{0x3c898000},{0x3c89a000},{0x3c89c000},{0x3c89e000},{0x3c8a0000},{0x3c8a2000},{0x3c8a4000},{0x3c8a6000},{0x3c8a8000},{0x3c8aa000},{0x3c8ac000},{0x3c8ae000},{0x3c8b0000},{0x3c8b2000},{0x3c8b4000},{0x3c8b6000},{0x3c8b8000},{0x3c8ba000},{0x3c8bc000},{0x3c8be000}, -{0x3c8c0000},{0x3c8c2000},{0x3c8c4000},{0x3c8c6000},{0x3c8c8000},{0x3c8ca000},{0x3c8cc000},{0x3c8ce000},{0x3c8d0000},{0x3c8d2000},{0x3c8d4000},{0x3c8d6000},{0x3c8d8000},{0x3c8da000},{0x3c8dc000},{0x3c8de000},{0x3c8e0000},{0x3c8e2000},{0x3c8e4000},{0x3c8e6000},{0x3c8e8000},{0x3c8ea000},{0x3c8ec000},{0x3c8ee000},{0x3c8f0000},{0x3c8f2000},{0x3c8f4000},{0x3c8f6000},{0x3c8f8000},{0x3c8fa000},{0x3c8fc000},{0x3c8fe000}, -{0x3c900000},{0x3c902000},{0x3c904000},{0x3c906000},{0x3c908000},{0x3c90a000},{0x3c90c000},{0x3c90e000},{0x3c910000},{0x3c912000},{0x3c914000},{0x3c916000},{0x3c918000},{0x3c91a000},{0x3c91c000},{0x3c91e000},{0x3c920000},{0x3c922000},{0x3c924000},{0x3c926000},{0x3c928000},{0x3c92a000},{0x3c92c000},{0x3c92e000},{0x3c930000},{0x3c932000},{0x3c934000},{0x3c936000},{0x3c938000},{0x3c93a000},{0x3c93c000},{0x3c93e000}, -{0x3c940000},{0x3c942000},{0x3c944000},{0x3c946000},{0x3c948000},{0x3c94a000},{0x3c94c000},{0x3c94e000},{0x3c950000},{0x3c952000},{0x3c954000},{0x3c956000},{0x3c958000},{0x3c95a000},{0x3c95c000},{0x3c95e000},{0x3c960000},{0x3c962000},{0x3c964000},{0x3c966000},{0x3c968000},{0x3c96a000},{0x3c96c000},{0x3c96e000},{0x3c970000},{0x3c972000},{0x3c974000},{0x3c976000},{0x3c978000},{0x3c97a000},{0x3c97c000},{0x3c97e000}, -{0x3c980000},{0x3c982000},{0x3c984000},{0x3c986000},{0x3c988000},{0x3c98a000},{0x3c98c000},{0x3c98e000},{0x3c990000},{0x3c992000},{0x3c994000},{0x3c996000},{0x3c998000},{0x3c99a000},{0x3c99c000},{0x3c99e000},{0x3c9a0000},{0x3c9a2000},{0x3c9a4000},{0x3c9a6000},{0x3c9a8000},{0x3c9aa000},{0x3c9ac000},{0x3c9ae000},{0x3c9b0000},{0x3c9b2000},{0x3c9b4000},{0x3c9b6000},{0x3c9b8000},{0x3c9ba000},{0x3c9bc000},{0x3c9be000}, -{0x3c9c0000},{0x3c9c2000},{0x3c9c4000},{0x3c9c6000},{0x3c9c8000},{0x3c9ca000},{0x3c9cc000},{0x3c9ce000},{0x3c9d0000},{0x3c9d2000},{0x3c9d4000},{0x3c9d6000},{0x3c9d8000},{0x3c9da000},{0x3c9dc000},{0x3c9de000},{0x3c9e0000},{0x3c9e2000},{0x3c9e4000},{0x3c9e6000},{0x3c9e8000},{0x3c9ea000},{0x3c9ec000},{0x3c9ee000},{0x3c9f0000},{0x3c9f2000},{0x3c9f4000},{0x3c9f6000},{0x3c9f8000},{0x3c9fa000},{0x3c9fc000},{0x3c9fe000}, -{0x3ca00000},{0x3ca02000},{0x3ca04000},{0x3ca06000},{0x3ca08000},{0x3ca0a000},{0x3ca0c000},{0x3ca0e000},{0x3ca10000},{0x3ca12000},{0x3ca14000},{0x3ca16000},{0x3ca18000},{0x3ca1a000},{0x3ca1c000},{0x3ca1e000},{0x3ca20000},{0x3ca22000},{0x3ca24000},{0x3ca26000},{0x3ca28000},{0x3ca2a000},{0x3ca2c000},{0x3ca2e000},{0x3ca30000},{0x3ca32000},{0x3ca34000},{0x3ca36000},{0x3ca38000},{0x3ca3a000},{0x3ca3c000},{0x3ca3e000}, -{0x3ca40000},{0x3ca42000},{0x3ca44000},{0x3ca46000},{0x3ca48000},{0x3ca4a000},{0x3ca4c000},{0x3ca4e000},{0x3ca50000},{0x3ca52000},{0x3ca54000},{0x3ca56000},{0x3ca58000},{0x3ca5a000},{0x3ca5c000},{0x3ca5e000},{0x3ca60000},{0x3ca62000},{0x3ca64000},{0x3ca66000},{0x3ca68000},{0x3ca6a000},{0x3ca6c000},{0x3ca6e000},{0x3ca70000},{0x3ca72000},{0x3ca74000},{0x3ca76000},{0x3ca78000},{0x3ca7a000},{0x3ca7c000},{0x3ca7e000}, -{0x3ca80000},{0x3ca82000},{0x3ca84000},{0x3ca86000},{0x3ca88000},{0x3ca8a000},{0x3ca8c000},{0x3ca8e000},{0x3ca90000},{0x3ca92000},{0x3ca94000},{0x3ca96000},{0x3ca98000},{0x3ca9a000},{0x3ca9c000},{0x3ca9e000},{0x3caa0000},{0x3caa2000},{0x3caa4000},{0x3caa6000},{0x3caa8000},{0x3caaa000},{0x3caac000},{0x3caae000},{0x3cab0000},{0x3cab2000},{0x3cab4000},{0x3cab6000},{0x3cab8000},{0x3caba000},{0x3cabc000},{0x3cabe000}, -{0x3cac0000},{0x3cac2000},{0x3cac4000},{0x3cac6000},{0x3cac8000},{0x3caca000},{0x3cacc000},{0x3cace000},{0x3cad0000},{0x3cad2000},{0x3cad4000},{0x3cad6000},{0x3cad8000},{0x3cada000},{0x3cadc000},{0x3cade000},{0x3cae0000},{0x3cae2000},{0x3cae4000},{0x3cae6000},{0x3cae8000},{0x3caea000},{0x3caec000},{0x3caee000},{0x3caf0000},{0x3caf2000},{0x3caf4000},{0x3caf6000},{0x3caf8000},{0x3cafa000},{0x3cafc000},{0x3cafe000}, -{0x3cb00000},{0x3cb02000},{0x3cb04000},{0x3cb06000},{0x3cb08000},{0x3cb0a000},{0x3cb0c000},{0x3cb0e000},{0x3cb10000},{0x3cb12000},{0x3cb14000},{0x3cb16000},{0x3cb18000},{0x3cb1a000},{0x3cb1c000},{0x3cb1e000},{0x3cb20000},{0x3cb22000},{0x3cb24000},{0x3cb26000},{0x3cb28000},{0x3cb2a000},{0x3cb2c000},{0x3cb2e000},{0x3cb30000},{0x3cb32000},{0x3cb34000},{0x3cb36000},{0x3cb38000},{0x3cb3a000},{0x3cb3c000},{0x3cb3e000}, -{0x3cb40000},{0x3cb42000},{0x3cb44000},{0x3cb46000},{0x3cb48000},{0x3cb4a000},{0x3cb4c000},{0x3cb4e000},{0x3cb50000},{0x3cb52000},{0x3cb54000},{0x3cb56000},{0x3cb58000},{0x3cb5a000},{0x3cb5c000},{0x3cb5e000},{0x3cb60000},{0x3cb62000},{0x3cb64000},{0x3cb66000},{0x3cb68000},{0x3cb6a000},{0x3cb6c000},{0x3cb6e000},{0x3cb70000},{0x3cb72000},{0x3cb74000},{0x3cb76000},{0x3cb78000},{0x3cb7a000},{0x3cb7c000},{0x3cb7e000}, -{0x3cb80000},{0x3cb82000},{0x3cb84000},{0x3cb86000},{0x3cb88000},{0x3cb8a000},{0x3cb8c000},{0x3cb8e000},{0x3cb90000},{0x3cb92000},{0x3cb94000},{0x3cb96000},{0x3cb98000},{0x3cb9a000},{0x3cb9c000},{0x3cb9e000},{0x3cba0000},{0x3cba2000},{0x3cba4000},{0x3cba6000},{0x3cba8000},{0x3cbaa000},{0x3cbac000},{0x3cbae000},{0x3cbb0000},{0x3cbb2000},{0x3cbb4000},{0x3cbb6000},{0x3cbb8000},{0x3cbba000},{0x3cbbc000},{0x3cbbe000}, -{0x3cbc0000},{0x3cbc2000},{0x3cbc4000},{0x3cbc6000},{0x3cbc8000},{0x3cbca000},{0x3cbcc000},{0x3cbce000},{0x3cbd0000},{0x3cbd2000},{0x3cbd4000},{0x3cbd6000},{0x3cbd8000},{0x3cbda000},{0x3cbdc000},{0x3cbde000},{0x3cbe0000},{0x3cbe2000},{0x3cbe4000},{0x3cbe6000},{0x3cbe8000},{0x3cbea000},{0x3cbec000},{0x3cbee000},{0x3cbf0000},{0x3cbf2000},{0x3cbf4000},{0x3cbf6000},{0x3cbf8000},{0x3cbfa000},{0x3cbfc000},{0x3cbfe000}, -{0x3cc00000},{0x3cc02000},{0x3cc04000},{0x3cc06000},{0x3cc08000},{0x3cc0a000},{0x3cc0c000},{0x3cc0e000},{0x3cc10000},{0x3cc12000},{0x3cc14000},{0x3cc16000},{0x3cc18000},{0x3cc1a000},{0x3cc1c000},{0x3cc1e000},{0x3cc20000},{0x3cc22000},{0x3cc24000},{0x3cc26000},{0x3cc28000},{0x3cc2a000},{0x3cc2c000},{0x3cc2e000},{0x3cc30000},{0x3cc32000},{0x3cc34000},{0x3cc36000},{0x3cc38000},{0x3cc3a000},{0x3cc3c000},{0x3cc3e000}, -{0x3cc40000},{0x3cc42000},{0x3cc44000},{0x3cc46000},{0x3cc48000},{0x3cc4a000},{0x3cc4c000},{0x3cc4e000},{0x3cc50000},{0x3cc52000},{0x3cc54000},{0x3cc56000},{0x3cc58000},{0x3cc5a000},{0x3cc5c000},{0x3cc5e000},{0x3cc60000},{0x3cc62000},{0x3cc64000},{0x3cc66000},{0x3cc68000},{0x3cc6a000},{0x3cc6c000},{0x3cc6e000},{0x3cc70000},{0x3cc72000},{0x3cc74000},{0x3cc76000},{0x3cc78000},{0x3cc7a000},{0x3cc7c000},{0x3cc7e000}, -{0x3cc80000},{0x3cc82000},{0x3cc84000},{0x3cc86000},{0x3cc88000},{0x3cc8a000},{0x3cc8c000},{0x3cc8e000},{0x3cc90000},{0x3cc92000},{0x3cc94000},{0x3cc96000},{0x3cc98000},{0x3cc9a000},{0x3cc9c000},{0x3cc9e000},{0x3cca0000},{0x3cca2000},{0x3cca4000},{0x3cca6000},{0x3cca8000},{0x3ccaa000},{0x3ccac000},{0x3ccae000},{0x3ccb0000},{0x3ccb2000},{0x3ccb4000},{0x3ccb6000},{0x3ccb8000},{0x3ccba000},{0x3ccbc000},{0x3ccbe000}, -{0x3ccc0000},{0x3ccc2000},{0x3ccc4000},{0x3ccc6000},{0x3ccc8000},{0x3ccca000},{0x3cccc000},{0x3ccce000},{0x3ccd0000},{0x3ccd2000},{0x3ccd4000},{0x3ccd6000},{0x3ccd8000},{0x3ccda000},{0x3ccdc000},{0x3ccde000},{0x3cce0000},{0x3cce2000},{0x3cce4000},{0x3cce6000},{0x3cce8000},{0x3ccea000},{0x3ccec000},{0x3ccee000},{0x3ccf0000},{0x3ccf2000},{0x3ccf4000},{0x3ccf6000},{0x3ccf8000},{0x3ccfa000},{0x3ccfc000},{0x3ccfe000}, -{0x3cd00000},{0x3cd02000},{0x3cd04000},{0x3cd06000},{0x3cd08000},{0x3cd0a000},{0x3cd0c000},{0x3cd0e000},{0x3cd10000},{0x3cd12000},{0x3cd14000},{0x3cd16000},{0x3cd18000},{0x3cd1a000},{0x3cd1c000},{0x3cd1e000},{0x3cd20000},{0x3cd22000},{0x3cd24000},{0x3cd26000},{0x3cd28000},{0x3cd2a000},{0x3cd2c000},{0x3cd2e000},{0x3cd30000},{0x3cd32000},{0x3cd34000},{0x3cd36000},{0x3cd38000},{0x3cd3a000},{0x3cd3c000},{0x3cd3e000}, -{0x3cd40000},{0x3cd42000},{0x3cd44000},{0x3cd46000},{0x3cd48000},{0x3cd4a000},{0x3cd4c000},{0x3cd4e000},{0x3cd50000},{0x3cd52000},{0x3cd54000},{0x3cd56000},{0x3cd58000},{0x3cd5a000},{0x3cd5c000},{0x3cd5e000},{0x3cd60000},{0x3cd62000},{0x3cd64000},{0x3cd66000},{0x3cd68000},{0x3cd6a000},{0x3cd6c000},{0x3cd6e000},{0x3cd70000},{0x3cd72000},{0x3cd74000},{0x3cd76000},{0x3cd78000},{0x3cd7a000},{0x3cd7c000},{0x3cd7e000}, -{0x3cd80000},{0x3cd82000},{0x3cd84000},{0x3cd86000},{0x3cd88000},{0x3cd8a000},{0x3cd8c000},{0x3cd8e000},{0x3cd90000},{0x3cd92000},{0x3cd94000},{0x3cd96000},{0x3cd98000},{0x3cd9a000},{0x3cd9c000},{0x3cd9e000},{0x3cda0000},{0x3cda2000},{0x3cda4000},{0x3cda6000},{0x3cda8000},{0x3cdaa000},{0x3cdac000},{0x3cdae000},{0x3cdb0000},{0x3cdb2000},{0x3cdb4000},{0x3cdb6000},{0x3cdb8000},{0x3cdba000},{0x3cdbc000},{0x3cdbe000}, -{0x3cdc0000},{0x3cdc2000},{0x3cdc4000},{0x3cdc6000},{0x3cdc8000},{0x3cdca000},{0x3cdcc000},{0x3cdce000},{0x3cdd0000},{0x3cdd2000},{0x3cdd4000},{0x3cdd6000},{0x3cdd8000},{0x3cdda000},{0x3cddc000},{0x3cdde000},{0x3cde0000},{0x3cde2000},{0x3cde4000},{0x3cde6000},{0x3cde8000},{0x3cdea000},{0x3cdec000},{0x3cdee000},{0x3cdf0000},{0x3cdf2000},{0x3cdf4000},{0x3cdf6000},{0x3cdf8000},{0x3cdfa000},{0x3cdfc000},{0x3cdfe000}, -{0x3ce00000},{0x3ce02000},{0x3ce04000},{0x3ce06000},{0x3ce08000},{0x3ce0a000},{0x3ce0c000},{0x3ce0e000},{0x3ce10000},{0x3ce12000},{0x3ce14000},{0x3ce16000},{0x3ce18000},{0x3ce1a000},{0x3ce1c000},{0x3ce1e000},{0x3ce20000},{0x3ce22000},{0x3ce24000},{0x3ce26000},{0x3ce28000},{0x3ce2a000},{0x3ce2c000},{0x3ce2e000},{0x3ce30000},{0x3ce32000},{0x3ce34000},{0x3ce36000},{0x3ce38000},{0x3ce3a000},{0x3ce3c000},{0x3ce3e000}, -{0x3ce40000},{0x3ce42000},{0x3ce44000},{0x3ce46000},{0x3ce48000},{0x3ce4a000},{0x3ce4c000},{0x3ce4e000},{0x3ce50000},{0x3ce52000},{0x3ce54000},{0x3ce56000},{0x3ce58000},{0x3ce5a000},{0x3ce5c000},{0x3ce5e000},{0x3ce60000},{0x3ce62000},{0x3ce64000},{0x3ce66000},{0x3ce68000},{0x3ce6a000},{0x3ce6c000},{0x3ce6e000},{0x3ce70000},{0x3ce72000},{0x3ce74000},{0x3ce76000},{0x3ce78000},{0x3ce7a000},{0x3ce7c000},{0x3ce7e000}, -{0x3ce80000},{0x3ce82000},{0x3ce84000},{0x3ce86000},{0x3ce88000},{0x3ce8a000},{0x3ce8c000},{0x3ce8e000},{0x3ce90000},{0x3ce92000},{0x3ce94000},{0x3ce96000},{0x3ce98000},{0x3ce9a000},{0x3ce9c000},{0x3ce9e000},{0x3cea0000},{0x3cea2000},{0x3cea4000},{0x3cea6000},{0x3cea8000},{0x3ceaa000},{0x3ceac000},{0x3ceae000},{0x3ceb0000},{0x3ceb2000},{0x3ceb4000},{0x3ceb6000},{0x3ceb8000},{0x3ceba000},{0x3cebc000},{0x3cebe000}, -{0x3cec0000},{0x3cec2000},{0x3cec4000},{0x3cec6000},{0x3cec8000},{0x3ceca000},{0x3cecc000},{0x3cece000},{0x3ced0000},{0x3ced2000},{0x3ced4000},{0x3ced6000},{0x3ced8000},{0x3ceda000},{0x3cedc000},{0x3cede000},{0x3cee0000},{0x3cee2000},{0x3cee4000},{0x3cee6000},{0x3cee8000},{0x3ceea000},{0x3ceec000},{0x3ceee000},{0x3cef0000},{0x3cef2000},{0x3cef4000},{0x3cef6000},{0x3cef8000},{0x3cefa000},{0x3cefc000},{0x3cefe000}, -{0x3cf00000},{0x3cf02000},{0x3cf04000},{0x3cf06000},{0x3cf08000},{0x3cf0a000},{0x3cf0c000},{0x3cf0e000},{0x3cf10000},{0x3cf12000},{0x3cf14000},{0x3cf16000},{0x3cf18000},{0x3cf1a000},{0x3cf1c000},{0x3cf1e000},{0x3cf20000},{0x3cf22000},{0x3cf24000},{0x3cf26000},{0x3cf28000},{0x3cf2a000},{0x3cf2c000},{0x3cf2e000},{0x3cf30000},{0x3cf32000},{0x3cf34000},{0x3cf36000},{0x3cf38000},{0x3cf3a000},{0x3cf3c000},{0x3cf3e000}, -{0x3cf40000},{0x3cf42000},{0x3cf44000},{0x3cf46000},{0x3cf48000},{0x3cf4a000},{0x3cf4c000},{0x3cf4e000},{0x3cf50000},{0x3cf52000},{0x3cf54000},{0x3cf56000},{0x3cf58000},{0x3cf5a000},{0x3cf5c000},{0x3cf5e000},{0x3cf60000},{0x3cf62000},{0x3cf64000},{0x3cf66000},{0x3cf68000},{0x3cf6a000},{0x3cf6c000},{0x3cf6e000},{0x3cf70000},{0x3cf72000},{0x3cf74000},{0x3cf76000},{0x3cf78000},{0x3cf7a000},{0x3cf7c000},{0x3cf7e000}, -{0x3cf80000},{0x3cf82000},{0x3cf84000},{0x3cf86000},{0x3cf88000},{0x3cf8a000},{0x3cf8c000},{0x3cf8e000},{0x3cf90000},{0x3cf92000},{0x3cf94000},{0x3cf96000},{0x3cf98000},{0x3cf9a000},{0x3cf9c000},{0x3cf9e000},{0x3cfa0000},{0x3cfa2000},{0x3cfa4000},{0x3cfa6000},{0x3cfa8000},{0x3cfaa000},{0x3cfac000},{0x3cfae000},{0x3cfb0000},{0x3cfb2000},{0x3cfb4000},{0x3cfb6000},{0x3cfb8000},{0x3cfba000},{0x3cfbc000},{0x3cfbe000}, -{0x3cfc0000},{0x3cfc2000},{0x3cfc4000},{0x3cfc6000},{0x3cfc8000},{0x3cfca000},{0x3cfcc000},{0x3cfce000},{0x3cfd0000},{0x3cfd2000},{0x3cfd4000},{0x3cfd6000},{0x3cfd8000},{0x3cfda000},{0x3cfdc000},{0x3cfde000},{0x3cfe0000},{0x3cfe2000},{0x3cfe4000},{0x3cfe6000},{0x3cfe8000},{0x3cfea000},{0x3cfec000},{0x3cfee000},{0x3cff0000},{0x3cff2000},{0x3cff4000},{0x3cff6000},{0x3cff8000},{0x3cffa000},{0x3cffc000},{0x3cffe000}, -{0x3d000000},{0x3d002000},{0x3d004000},{0x3d006000},{0x3d008000},{0x3d00a000},{0x3d00c000},{0x3d00e000},{0x3d010000},{0x3d012000},{0x3d014000},{0x3d016000},{0x3d018000},{0x3d01a000},{0x3d01c000},{0x3d01e000},{0x3d020000},{0x3d022000},{0x3d024000},{0x3d026000},{0x3d028000},{0x3d02a000},{0x3d02c000},{0x3d02e000},{0x3d030000},{0x3d032000},{0x3d034000},{0x3d036000},{0x3d038000},{0x3d03a000},{0x3d03c000},{0x3d03e000}, -{0x3d040000},{0x3d042000},{0x3d044000},{0x3d046000},{0x3d048000},{0x3d04a000},{0x3d04c000},{0x3d04e000},{0x3d050000},{0x3d052000},{0x3d054000},{0x3d056000},{0x3d058000},{0x3d05a000},{0x3d05c000},{0x3d05e000},{0x3d060000},{0x3d062000},{0x3d064000},{0x3d066000},{0x3d068000},{0x3d06a000},{0x3d06c000},{0x3d06e000},{0x3d070000},{0x3d072000},{0x3d074000},{0x3d076000},{0x3d078000},{0x3d07a000},{0x3d07c000},{0x3d07e000}, -{0x3d080000},{0x3d082000},{0x3d084000},{0x3d086000},{0x3d088000},{0x3d08a000},{0x3d08c000},{0x3d08e000},{0x3d090000},{0x3d092000},{0x3d094000},{0x3d096000},{0x3d098000},{0x3d09a000},{0x3d09c000},{0x3d09e000},{0x3d0a0000},{0x3d0a2000},{0x3d0a4000},{0x3d0a6000},{0x3d0a8000},{0x3d0aa000},{0x3d0ac000},{0x3d0ae000},{0x3d0b0000},{0x3d0b2000},{0x3d0b4000},{0x3d0b6000},{0x3d0b8000},{0x3d0ba000},{0x3d0bc000},{0x3d0be000}, -{0x3d0c0000},{0x3d0c2000},{0x3d0c4000},{0x3d0c6000},{0x3d0c8000},{0x3d0ca000},{0x3d0cc000},{0x3d0ce000},{0x3d0d0000},{0x3d0d2000},{0x3d0d4000},{0x3d0d6000},{0x3d0d8000},{0x3d0da000},{0x3d0dc000},{0x3d0de000},{0x3d0e0000},{0x3d0e2000},{0x3d0e4000},{0x3d0e6000},{0x3d0e8000},{0x3d0ea000},{0x3d0ec000},{0x3d0ee000},{0x3d0f0000},{0x3d0f2000},{0x3d0f4000},{0x3d0f6000},{0x3d0f8000},{0x3d0fa000},{0x3d0fc000},{0x3d0fe000}, -{0x3d100000},{0x3d102000},{0x3d104000},{0x3d106000},{0x3d108000},{0x3d10a000},{0x3d10c000},{0x3d10e000},{0x3d110000},{0x3d112000},{0x3d114000},{0x3d116000},{0x3d118000},{0x3d11a000},{0x3d11c000},{0x3d11e000},{0x3d120000},{0x3d122000},{0x3d124000},{0x3d126000},{0x3d128000},{0x3d12a000},{0x3d12c000},{0x3d12e000},{0x3d130000},{0x3d132000},{0x3d134000},{0x3d136000},{0x3d138000},{0x3d13a000},{0x3d13c000},{0x3d13e000}, -{0x3d140000},{0x3d142000},{0x3d144000},{0x3d146000},{0x3d148000},{0x3d14a000},{0x3d14c000},{0x3d14e000},{0x3d150000},{0x3d152000},{0x3d154000},{0x3d156000},{0x3d158000},{0x3d15a000},{0x3d15c000},{0x3d15e000},{0x3d160000},{0x3d162000},{0x3d164000},{0x3d166000},{0x3d168000},{0x3d16a000},{0x3d16c000},{0x3d16e000},{0x3d170000},{0x3d172000},{0x3d174000},{0x3d176000},{0x3d178000},{0x3d17a000},{0x3d17c000},{0x3d17e000}, -{0x3d180000},{0x3d182000},{0x3d184000},{0x3d186000},{0x3d188000},{0x3d18a000},{0x3d18c000},{0x3d18e000},{0x3d190000},{0x3d192000},{0x3d194000},{0x3d196000},{0x3d198000},{0x3d19a000},{0x3d19c000},{0x3d19e000},{0x3d1a0000},{0x3d1a2000},{0x3d1a4000},{0x3d1a6000},{0x3d1a8000},{0x3d1aa000},{0x3d1ac000},{0x3d1ae000},{0x3d1b0000},{0x3d1b2000},{0x3d1b4000},{0x3d1b6000},{0x3d1b8000},{0x3d1ba000},{0x3d1bc000},{0x3d1be000}, -{0x3d1c0000},{0x3d1c2000},{0x3d1c4000},{0x3d1c6000},{0x3d1c8000},{0x3d1ca000},{0x3d1cc000},{0x3d1ce000},{0x3d1d0000},{0x3d1d2000},{0x3d1d4000},{0x3d1d6000},{0x3d1d8000},{0x3d1da000},{0x3d1dc000},{0x3d1de000},{0x3d1e0000},{0x3d1e2000},{0x3d1e4000},{0x3d1e6000},{0x3d1e8000},{0x3d1ea000},{0x3d1ec000},{0x3d1ee000},{0x3d1f0000},{0x3d1f2000},{0x3d1f4000},{0x3d1f6000},{0x3d1f8000},{0x3d1fa000},{0x3d1fc000},{0x3d1fe000}, -{0x3d200000},{0x3d202000},{0x3d204000},{0x3d206000},{0x3d208000},{0x3d20a000},{0x3d20c000},{0x3d20e000},{0x3d210000},{0x3d212000},{0x3d214000},{0x3d216000},{0x3d218000},{0x3d21a000},{0x3d21c000},{0x3d21e000},{0x3d220000},{0x3d222000},{0x3d224000},{0x3d226000},{0x3d228000},{0x3d22a000},{0x3d22c000},{0x3d22e000},{0x3d230000},{0x3d232000},{0x3d234000},{0x3d236000},{0x3d238000},{0x3d23a000},{0x3d23c000},{0x3d23e000}, -{0x3d240000},{0x3d242000},{0x3d244000},{0x3d246000},{0x3d248000},{0x3d24a000},{0x3d24c000},{0x3d24e000},{0x3d250000},{0x3d252000},{0x3d254000},{0x3d256000},{0x3d258000},{0x3d25a000},{0x3d25c000},{0x3d25e000},{0x3d260000},{0x3d262000},{0x3d264000},{0x3d266000},{0x3d268000},{0x3d26a000},{0x3d26c000},{0x3d26e000},{0x3d270000},{0x3d272000},{0x3d274000},{0x3d276000},{0x3d278000},{0x3d27a000},{0x3d27c000},{0x3d27e000}, -{0x3d280000},{0x3d282000},{0x3d284000},{0x3d286000},{0x3d288000},{0x3d28a000},{0x3d28c000},{0x3d28e000},{0x3d290000},{0x3d292000},{0x3d294000},{0x3d296000},{0x3d298000},{0x3d29a000},{0x3d29c000},{0x3d29e000},{0x3d2a0000},{0x3d2a2000},{0x3d2a4000},{0x3d2a6000},{0x3d2a8000},{0x3d2aa000},{0x3d2ac000},{0x3d2ae000},{0x3d2b0000},{0x3d2b2000},{0x3d2b4000},{0x3d2b6000},{0x3d2b8000},{0x3d2ba000},{0x3d2bc000},{0x3d2be000}, -{0x3d2c0000},{0x3d2c2000},{0x3d2c4000},{0x3d2c6000},{0x3d2c8000},{0x3d2ca000},{0x3d2cc000},{0x3d2ce000},{0x3d2d0000},{0x3d2d2000},{0x3d2d4000},{0x3d2d6000},{0x3d2d8000},{0x3d2da000},{0x3d2dc000},{0x3d2de000},{0x3d2e0000},{0x3d2e2000},{0x3d2e4000},{0x3d2e6000},{0x3d2e8000},{0x3d2ea000},{0x3d2ec000},{0x3d2ee000},{0x3d2f0000},{0x3d2f2000},{0x3d2f4000},{0x3d2f6000},{0x3d2f8000},{0x3d2fa000},{0x3d2fc000},{0x3d2fe000}, -{0x3d300000},{0x3d302000},{0x3d304000},{0x3d306000},{0x3d308000},{0x3d30a000},{0x3d30c000},{0x3d30e000},{0x3d310000},{0x3d312000},{0x3d314000},{0x3d316000},{0x3d318000},{0x3d31a000},{0x3d31c000},{0x3d31e000},{0x3d320000},{0x3d322000},{0x3d324000},{0x3d326000},{0x3d328000},{0x3d32a000},{0x3d32c000},{0x3d32e000},{0x3d330000},{0x3d332000},{0x3d334000},{0x3d336000},{0x3d338000},{0x3d33a000},{0x3d33c000},{0x3d33e000}, -{0x3d340000},{0x3d342000},{0x3d344000},{0x3d346000},{0x3d348000},{0x3d34a000},{0x3d34c000},{0x3d34e000},{0x3d350000},{0x3d352000},{0x3d354000},{0x3d356000},{0x3d358000},{0x3d35a000},{0x3d35c000},{0x3d35e000},{0x3d360000},{0x3d362000},{0x3d364000},{0x3d366000},{0x3d368000},{0x3d36a000},{0x3d36c000},{0x3d36e000},{0x3d370000},{0x3d372000},{0x3d374000},{0x3d376000},{0x3d378000},{0x3d37a000},{0x3d37c000},{0x3d37e000}, -{0x3d380000},{0x3d382000},{0x3d384000},{0x3d386000},{0x3d388000},{0x3d38a000},{0x3d38c000},{0x3d38e000},{0x3d390000},{0x3d392000},{0x3d394000},{0x3d396000},{0x3d398000},{0x3d39a000},{0x3d39c000},{0x3d39e000},{0x3d3a0000},{0x3d3a2000},{0x3d3a4000},{0x3d3a6000},{0x3d3a8000},{0x3d3aa000},{0x3d3ac000},{0x3d3ae000},{0x3d3b0000},{0x3d3b2000},{0x3d3b4000},{0x3d3b6000},{0x3d3b8000},{0x3d3ba000},{0x3d3bc000},{0x3d3be000}, -{0x3d3c0000},{0x3d3c2000},{0x3d3c4000},{0x3d3c6000},{0x3d3c8000},{0x3d3ca000},{0x3d3cc000},{0x3d3ce000},{0x3d3d0000},{0x3d3d2000},{0x3d3d4000},{0x3d3d6000},{0x3d3d8000},{0x3d3da000},{0x3d3dc000},{0x3d3de000},{0x3d3e0000},{0x3d3e2000},{0x3d3e4000},{0x3d3e6000},{0x3d3e8000},{0x3d3ea000},{0x3d3ec000},{0x3d3ee000},{0x3d3f0000},{0x3d3f2000},{0x3d3f4000},{0x3d3f6000},{0x3d3f8000},{0x3d3fa000},{0x3d3fc000},{0x3d3fe000}, -{0x3d400000},{0x3d402000},{0x3d404000},{0x3d406000},{0x3d408000},{0x3d40a000},{0x3d40c000},{0x3d40e000},{0x3d410000},{0x3d412000},{0x3d414000},{0x3d416000},{0x3d418000},{0x3d41a000},{0x3d41c000},{0x3d41e000},{0x3d420000},{0x3d422000},{0x3d424000},{0x3d426000},{0x3d428000},{0x3d42a000},{0x3d42c000},{0x3d42e000},{0x3d430000},{0x3d432000},{0x3d434000},{0x3d436000},{0x3d438000},{0x3d43a000},{0x3d43c000},{0x3d43e000}, -{0x3d440000},{0x3d442000},{0x3d444000},{0x3d446000},{0x3d448000},{0x3d44a000},{0x3d44c000},{0x3d44e000},{0x3d450000},{0x3d452000},{0x3d454000},{0x3d456000},{0x3d458000},{0x3d45a000},{0x3d45c000},{0x3d45e000},{0x3d460000},{0x3d462000},{0x3d464000},{0x3d466000},{0x3d468000},{0x3d46a000},{0x3d46c000},{0x3d46e000},{0x3d470000},{0x3d472000},{0x3d474000},{0x3d476000},{0x3d478000},{0x3d47a000},{0x3d47c000},{0x3d47e000}, -{0x3d480000},{0x3d482000},{0x3d484000},{0x3d486000},{0x3d488000},{0x3d48a000},{0x3d48c000},{0x3d48e000},{0x3d490000},{0x3d492000},{0x3d494000},{0x3d496000},{0x3d498000},{0x3d49a000},{0x3d49c000},{0x3d49e000},{0x3d4a0000},{0x3d4a2000},{0x3d4a4000},{0x3d4a6000},{0x3d4a8000},{0x3d4aa000},{0x3d4ac000},{0x3d4ae000},{0x3d4b0000},{0x3d4b2000},{0x3d4b4000},{0x3d4b6000},{0x3d4b8000},{0x3d4ba000},{0x3d4bc000},{0x3d4be000}, -{0x3d4c0000},{0x3d4c2000},{0x3d4c4000},{0x3d4c6000},{0x3d4c8000},{0x3d4ca000},{0x3d4cc000},{0x3d4ce000},{0x3d4d0000},{0x3d4d2000},{0x3d4d4000},{0x3d4d6000},{0x3d4d8000},{0x3d4da000},{0x3d4dc000},{0x3d4de000},{0x3d4e0000},{0x3d4e2000},{0x3d4e4000},{0x3d4e6000},{0x3d4e8000},{0x3d4ea000},{0x3d4ec000},{0x3d4ee000},{0x3d4f0000},{0x3d4f2000},{0x3d4f4000},{0x3d4f6000},{0x3d4f8000},{0x3d4fa000},{0x3d4fc000},{0x3d4fe000}, -{0x3d500000},{0x3d502000},{0x3d504000},{0x3d506000},{0x3d508000},{0x3d50a000},{0x3d50c000},{0x3d50e000},{0x3d510000},{0x3d512000},{0x3d514000},{0x3d516000},{0x3d518000},{0x3d51a000},{0x3d51c000},{0x3d51e000},{0x3d520000},{0x3d522000},{0x3d524000},{0x3d526000},{0x3d528000},{0x3d52a000},{0x3d52c000},{0x3d52e000},{0x3d530000},{0x3d532000},{0x3d534000},{0x3d536000},{0x3d538000},{0x3d53a000},{0x3d53c000},{0x3d53e000}, -{0x3d540000},{0x3d542000},{0x3d544000},{0x3d546000},{0x3d548000},{0x3d54a000},{0x3d54c000},{0x3d54e000},{0x3d550000},{0x3d552000},{0x3d554000},{0x3d556000},{0x3d558000},{0x3d55a000},{0x3d55c000},{0x3d55e000},{0x3d560000},{0x3d562000},{0x3d564000},{0x3d566000},{0x3d568000},{0x3d56a000},{0x3d56c000},{0x3d56e000},{0x3d570000},{0x3d572000},{0x3d574000},{0x3d576000},{0x3d578000},{0x3d57a000},{0x3d57c000},{0x3d57e000}, -{0x3d580000},{0x3d582000},{0x3d584000},{0x3d586000},{0x3d588000},{0x3d58a000},{0x3d58c000},{0x3d58e000},{0x3d590000},{0x3d592000},{0x3d594000},{0x3d596000},{0x3d598000},{0x3d59a000},{0x3d59c000},{0x3d59e000},{0x3d5a0000},{0x3d5a2000},{0x3d5a4000},{0x3d5a6000},{0x3d5a8000},{0x3d5aa000},{0x3d5ac000},{0x3d5ae000},{0x3d5b0000},{0x3d5b2000},{0x3d5b4000},{0x3d5b6000},{0x3d5b8000},{0x3d5ba000},{0x3d5bc000},{0x3d5be000}, -{0x3d5c0000},{0x3d5c2000},{0x3d5c4000},{0x3d5c6000},{0x3d5c8000},{0x3d5ca000},{0x3d5cc000},{0x3d5ce000},{0x3d5d0000},{0x3d5d2000},{0x3d5d4000},{0x3d5d6000},{0x3d5d8000},{0x3d5da000},{0x3d5dc000},{0x3d5de000},{0x3d5e0000},{0x3d5e2000},{0x3d5e4000},{0x3d5e6000},{0x3d5e8000},{0x3d5ea000},{0x3d5ec000},{0x3d5ee000},{0x3d5f0000},{0x3d5f2000},{0x3d5f4000},{0x3d5f6000},{0x3d5f8000},{0x3d5fa000},{0x3d5fc000},{0x3d5fe000}, -{0x3d600000},{0x3d602000},{0x3d604000},{0x3d606000},{0x3d608000},{0x3d60a000},{0x3d60c000},{0x3d60e000},{0x3d610000},{0x3d612000},{0x3d614000},{0x3d616000},{0x3d618000},{0x3d61a000},{0x3d61c000},{0x3d61e000},{0x3d620000},{0x3d622000},{0x3d624000},{0x3d626000},{0x3d628000},{0x3d62a000},{0x3d62c000},{0x3d62e000},{0x3d630000},{0x3d632000},{0x3d634000},{0x3d636000},{0x3d638000},{0x3d63a000},{0x3d63c000},{0x3d63e000}, -{0x3d640000},{0x3d642000},{0x3d644000},{0x3d646000},{0x3d648000},{0x3d64a000},{0x3d64c000},{0x3d64e000},{0x3d650000},{0x3d652000},{0x3d654000},{0x3d656000},{0x3d658000},{0x3d65a000},{0x3d65c000},{0x3d65e000},{0x3d660000},{0x3d662000},{0x3d664000},{0x3d666000},{0x3d668000},{0x3d66a000},{0x3d66c000},{0x3d66e000},{0x3d670000},{0x3d672000},{0x3d674000},{0x3d676000},{0x3d678000},{0x3d67a000},{0x3d67c000},{0x3d67e000}, -{0x3d680000},{0x3d682000},{0x3d684000},{0x3d686000},{0x3d688000},{0x3d68a000},{0x3d68c000},{0x3d68e000},{0x3d690000},{0x3d692000},{0x3d694000},{0x3d696000},{0x3d698000},{0x3d69a000},{0x3d69c000},{0x3d69e000},{0x3d6a0000},{0x3d6a2000},{0x3d6a4000},{0x3d6a6000},{0x3d6a8000},{0x3d6aa000},{0x3d6ac000},{0x3d6ae000},{0x3d6b0000},{0x3d6b2000},{0x3d6b4000},{0x3d6b6000},{0x3d6b8000},{0x3d6ba000},{0x3d6bc000},{0x3d6be000}, -{0x3d6c0000},{0x3d6c2000},{0x3d6c4000},{0x3d6c6000},{0x3d6c8000},{0x3d6ca000},{0x3d6cc000},{0x3d6ce000},{0x3d6d0000},{0x3d6d2000},{0x3d6d4000},{0x3d6d6000},{0x3d6d8000},{0x3d6da000},{0x3d6dc000},{0x3d6de000},{0x3d6e0000},{0x3d6e2000},{0x3d6e4000},{0x3d6e6000},{0x3d6e8000},{0x3d6ea000},{0x3d6ec000},{0x3d6ee000},{0x3d6f0000},{0x3d6f2000},{0x3d6f4000},{0x3d6f6000},{0x3d6f8000},{0x3d6fa000},{0x3d6fc000},{0x3d6fe000}, -{0x3d700000},{0x3d702000},{0x3d704000},{0x3d706000},{0x3d708000},{0x3d70a000},{0x3d70c000},{0x3d70e000},{0x3d710000},{0x3d712000},{0x3d714000},{0x3d716000},{0x3d718000},{0x3d71a000},{0x3d71c000},{0x3d71e000},{0x3d720000},{0x3d722000},{0x3d724000},{0x3d726000},{0x3d728000},{0x3d72a000},{0x3d72c000},{0x3d72e000},{0x3d730000},{0x3d732000},{0x3d734000},{0x3d736000},{0x3d738000},{0x3d73a000},{0x3d73c000},{0x3d73e000}, -{0x3d740000},{0x3d742000},{0x3d744000},{0x3d746000},{0x3d748000},{0x3d74a000},{0x3d74c000},{0x3d74e000},{0x3d750000},{0x3d752000},{0x3d754000},{0x3d756000},{0x3d758000},{0x3d75a000},{0x3d75c000},{0x3d75e000},{0x3d760000},{0x3d762000},{0x3d764000},{0x3d766000},{0x3d768000},{0x3d76a000},{0x3d76c000},{0x3d76e000},{0x3d770000},{0x3d772000},{0x3d774000},{0x3d776000},{0x3d778000},{0x3d77a000},{0x3d77c000},{0x3d77e000}, -{0x3d780000},{0x3d782000},{0x3d784000},{0x3d786000},{0x3d788000},{0x3d78a000},{0x3d78c000},{0x3d78e000},{0x3d790000},{0x3d792000},{0x3d794000},{0x3d796000},{0x3d798000},{0x3d79a000},{0x3d79c000},{0x3d79e000},{0x3d7a0000},{0x3d7a2000},{0x3d7a4000},{0x3d7a6000},{0x3d7a8000},{0x3d7aa000},{0x3d7ac000},{0x3d7ae000},{0x3d7b0000},{0x3d7b2000},{0x3d7b4000},{0x3d7b6000},{0x3d7b8000},{0x3d7ba000},{0x3d7bc000},{0x3d7be000}, -{0x3d7c0000},{0x3d7c2000},{0x3d7c4000},{0x3d7c6000},{0x3d7c8000},{0x3d7ca000},{0x3d7cc000},{0x3d7ce000},{0x3d7d0000},{0x3d7d2000},{0x3d7d4000},{0x3d7d6000},{0x3d7d8000},{0x3d7da000},{0x3d7dc000},{0x3d7de000},{0x3d7e0000},{0x3d7e2000},{0x3d7e4000},{0x3d7e6000},{0x3d7e8000},{0x3d7ea000},{0x3d7ec000},{0x3d7ee000},{0x3d7f0000},{0x3d7f2000},{0x3d7f4000},{0x3d7f6000},{0x3d7f8000},{0x3d7fa000},{0x3d7fc000},{0x3d7fe000}, -{0x3d800000},{0x3d802000},{0x3d804000},{0x3d806000},{0x3d808000},{0x3d80a000},{0x3d80c000},{0x3d80e000},{0x3d810000},{0x3d812000},{0x3d814000},{0x3d816000},{0x3d818000},{0x3d81a000},{0x3d81c000},{0x3d81e000},{0x3d820000},{0x3d822000},{0x3d824000},{0x3d826000},{0x3d828000},{0x3d82a000},{0x3d82c000},{0x3d82e000},{0x3d830000},{0x3d832000},{0x3d834000},{0x3d836000},{0x3d838000},{0x3d83a000},{0x3d83c000},{0x3d83e000}, -{0x3d840000},{0x3d842000},{0x3d844000},{0x3d846000},{0x3d848000},{0x3d84a000},{0x3d84c000},{0x3d84e000},{0x3d850000},{0x3d852000},{0x3d854000},{0x3d856000},{0x3d858000},{0x3d85a000},{0x3d85c000},{0x3d85e000},{0x3d860000},{0x3d862000},{0x3d864000},{0x3d866000},{0x3d868000},{0x3d86a000},{0x3d86c000},{0x3d86e000},{0x3d870000},{0x3d872000},{0x3d874000},{0x3d876000},{0x3d878000},{0x3d87a000},{0x3d87c000},{0x3d87e000}, -{0x3d880000},{0x3d882000},{0x3d884000},{0x3d886000},{0x3d888000},{0x3d88a000},{0x3d88c000},{0x3d88e000},{0x3d890000},{0x3d892000},{0x3d894000},{0x3d896000},{0x3d898000},{0x3d89a000},{0x3d89c000},{0x3d89e000},{0x3d8a0000},{0x3d8a2000},{0x3d8a4000},{0x3d8a6000},{0x3d8a8000},{0x3d8aa000},{0x3d8ac000},{0x3d8ae000},{0x3d8b0000},{0x3d8b2000},{0x3d8b4000},{0x3d8b6000},{0x3d8b8000},{0x3d8ba000},{0x3d8bc000},{0x3d8be000}, -{0x3d8c0000},{0x3d8c2000},{0x3d8c4000},{0x3d8c6000},{0x3d8c8000},{0x3d8ca000},{0x3d8cc000},{0x3d8ce000},{0x3d8d0000},{0x3d8d2000},{0x3d8d4000},{0x3d8d6000},{0x3d8d8000},{0x3d8da000},{0x3d8dc000},{0x3d8de000},{0x3d8e0000},{0x3d8e2000},{0x3d8e4000},{0x3d8e6000},{0x3d8e8000},{0x3d8ea000},{0x3d8ec000},{0x3d8ee000},{0x3d8f0000},{0x3d8f2000},{0x3d8f4000},{0x3d8f6000},{0x3d8f8000},{0x3d8fa000},{0x3d8fc000},{0x3d8fe000}, -{0x3d900000},{0x3d902000},{0x3d904000},{0x3d906000},{0x3d908000},{0x3d90a000},{0x3d90c000},{0x3d90e000},{0x3d910000},{0x3d912000},{0x3d914000},{0x3d916000},{0x3d918000},{0x3d91a000},{0x3d91c000},{0x3d91e000},{0x3d920000},{0x3d922000},{0x3d924000},{0x3d926000},{0x3d928000},{0x3d92a000},{0x3d92c000},{0x3d92e000},{0x3d930000},{0x3d932000},{0x3d934000},{0x3d936000},{0x3d938000},{0x3d93a000},{0x3d93c000},{0x3d93e000}, -{0x3d940000},{0x3d942000},{0x3d944000},{0x3d946000},{0x3d948000},{0x3d94a000},{0x3d94c000},{0x3d94e000},{0x3d950000},{0x3d952000},{0x3d954000},{0x3d956000},{0x3d958000},{0x3d95a000},{0x3d95c000},{0x3d95e000},{0x3d960000},{0x3d962000},{0x3d964000},{0x3d966000},{0x3d968000},{0x3d96a000},{0x3d96c000},{0x3d96e000},{0x3d970000},{0x3d972000},{0x3d974000},{0x3d976000},{0x3d978000},{0x3d97a000},{0x3d97c000},{0x3d97e000}, -{0x3d980000},{0x3d982000},{0x3d984000},{0x3d986000},{0x3d988000},{0x3d98a000},{0x3d98c000},{0x3d98e000},{0x3d990000},{0x3d992000},{0x3d994000},{0x3d996000},{0x3d998000},{0x3d99a000},{0x3d99c000},{0x3d99e000},{0x3d9a0000},{0x3d9a2000},{0x3d9a4000},{0x3d9a6000},{0x3d9a8000},{0x3d9aa000},{0x3d9ac000},{0x3d9ae000},{0x3d9b0000},{0x3d9b2000},{0x3d9b4000},{0x3d9b6000},{0x3d9b8000},{0x3d9ba000},{0x3d9bc000},{0x3d9be000}, -{0x3d9c0000},{0x3d9c2000},{0x3d9c4000},{0x3d9c6000},{0x3d9c8000},{0x3d9ca000},{0x3d9cc000},{0x3d9ce000},{0x3d9d0000},{0x3d9d2000},{0x3d9d4000},{0x3d9d6000},{0x3d9d8000},{0x3d9da000},{0x3d9dc000},{0x3d9de000},{0x3d9e0000},{0x3d9e2000},{0x3d9e4000},{0x3d9e6000},{0x3d9e8000},{0x3d9ea000},{0x3d9ec000},{0x3d9ee000},{0x3d9f0000},{0x3d9f2000},{0x3d9f4000},{0x3d9f6000},{0x3d9f8000},{0x3d9fa000},{0x3d9fc000},{0x3d9fe000}, -{0x3da00000},{0x3da02000},{0x3da04000},{0x3da06000},{0x3da08000},{0x3da0a000},{0x3da0c000},{0x3da0e000},{0x3da10000},{0x3da12000},{0x3da14000},{0x3da16000},{0x3da18000},{0x3da1a000},{0x3da1c000},{0x3da1e000},{0x3da20000},{0x3da22000},{0x3da24000},{0x3da26000},{0x3da28000},{0x3da2a000},{0x3da2c000},{0x3da2e000},{0x3da30000},{0x3da32000},{0x3da34000},{0x3da36000},{0x3da38000},{0x3da3a000},{0x3da3c000},{0x3da3e000}, -{0x3da40000},{0x3da42000},{0x3da44000},{0x3da46000},{0x3da48000},{0x3da4a000},{0x3da4c000},{0x3da4e000},{0x3da50000},{0x3da52000},{0x3da54000},{0x3da56000},{0x3da58000},{0x3da5a000},{0x3da5c000},{0x3da5e000},{0x3da60000},{0x3da62000},{0x3da64000},{0x3da66000},{0x3da68000},{0x3da6a000},{0x3da6c000},{0x3da6e000},{0x3da70000},{0x3da72000},{0x3da74000},{0x3da76000},{0x3da78000},{0x3da7a000},{0x3da7c000},{0x3da7e000}, -{0x3da80000},{0x3da82000},{0x3da84000},{0x3da86000},{0x3da88000},{0x3da8a000},{0x3da8c000},{0x3da8e000},{0x3da90000},{0x3da92000},{0x3da94000},{0x3da96000},{0x3da98000},{0x3da9a000},{0x3da9c000},{0x3da9e000},{0x3daa0000},{0x3daa2000},{0x3daa4000},{0x3daa6000},{0x3daa8000},{0x3daaa000},{0x3daac000},{0x3daae000},{0x3dab0000},{0x3dab2000},{0x3dab4000},{0x3dab6000},{0x3dab8000},{0x3daba000},{0x3dabc000},{0x3dabe000}, -{0x3dac0000},{0x3dac2000},{0x3dac4000},{0x3dac6000},{0x3dac8000},{0x3daca000},{0x3dacc000},{0x3dace000},{0x3dad0000},{0x3dad2000},{0x3dad4000},{0x3dad6000},{0x3dad8000},{0x3dada000},{0x3dadc000},{0x3dade000},{0x3dae0000},{0x3dae2000},{0x3dae4000},{0x3dae6000},{0x3dae8000},{0x3daea000},{0x3daec000},{0x3daee000},{0x3daf0000},{0x3daf2000},{0x3daf4000},{0x3daf6000},{0x3daf8000},{0x3dafa000},{0x3dafc000},{0x3dafe000}, -{0x3db00000},{0x3db02000},{0x3db04000},{0x3db06000},{0x3db08000},{0x3db0a000},{0x3db0c000},{0x3db0e000},{0x3db10000},{0x3db12000},{0x3db14000},{0x3db16000},{0x3db18000},{0x3db1a000},{0x3db1c000},{0x3db1e000},{0x3db20000},{0x3db22000},{0x3db24000},{0x3db26000},{0x3db28000},{0x3db2a000},{0x3db2c000},{0x3db2e000},{0x3db30000},{0x3db32000},{0x3db34000},{0x3db36000},{0x3db38000},{0x3db3a000},{0x3db3c000},{0x3db3e000}, -{0x3db40000},{0x3db42000},{0x3db44000},{0x3db46000},{0x3db48000},{0x3db4a000},{0x3db4c000},{0x3db4e000},{0x3db50000},{0x3db52000},{0x3db54000},{0x3db56000},{0x3db58000},{0x3db5a000},{0x3db5c000},{0x3db5e000},{0x3db60000},{0x3db62000},{0x3db64000},{0x3db66000},{0x3db68000},{0x3db6a000},{0x3db6c000},{0x3db6e000},{0x3db70000},{0x3db72000},{0x3db74000},{0x3db76000},{0x3db78000},{0x3db7a000},{0x3db7c000},{0x3db7e000}, -{0x3db80000},{0x3db82000},{0x3db84000},{0x3db86000},{0x3db88000},{0x3db8a000},{0x3db8c000},{0x3db8e000},{0x3db90000},{0x3db92000},{0x3db94000},{0x3db96000},{0x3db98000},{0x3db9a000},{0x3db9c000},{0x3db9e000},{0x3dba0000},{0x3dba2000},{0x3dba4000},{0x3dba6000},{0x3dba8000},{0x3dbaa000},{0x3dbac000},{0x3dbae000},{0x3dbb0000},{0x3dbb2000},{0x3dbb4000},{0x3dbb6000},{0x3dbb8000},{0x3dbba000},{0x3dbbc000},{0x3dbbe000}, -{0x3dbc0000},{0x3dbc2000},{0x3dbc4000},{0x3dbc6000},{0x3dbc8000},{0x3dbca000},{0x3dbcc000},{0x3dbce000},{0x3dbd0000},{0x3dbd2000},{0x3dbd4000},{0x3dbd6000},{0x3dbd8000},{0x3dbda000},{0x3dbdc000},{0x3dbde000},{0x3dbe0000},{0x3dbe2000},{0x3dbe4000},{0x3dbe6000},{0x3dbe8000},{0x3dbea000},{0x3dbec000},{0x3dbee000},{0x3dbf0000},{0x3dbf2000},{0x3dbf4000},{0x3dbf6000},{0x3dbf8000},{0x3dbfa000},{0x3dbfc000},{0x3dbfe000}, -{0x3dc00000},{0x3dc02000},{0x3dc04000},{0x3dc06000},{0x3dc08000},{0x3dc0a000},{0x3dc0c000},{0x3dc0e000},{0x3dc10000},{0x3dc12000},{0x3dc14000},{0x3dc16000},{0x3dc18000},{0x3dc1a000},{0x3dc1c000},{0x3dc1e000},{0x3dc20000},{0x3dc22000},{0x3dc24000},{0x3dc26000},{0x3dc28000},{0x3dc2a000},{0x3dc2c000},{0x3dc2e000},{0x3dc30000},{0x3dc32000},{0x3dc34000},{0x3dc36000},{0x3dc38000},{0x3dc3a000},{0x3dc3c000},{0x3dc3e000}, -{0x3dc40000},{0x3dc42000},{0x3dc44000},{0x3dc46000},{0x3dc48000},{0x3dc4a000},{0x3dc4c000},{0x3dc4e000},{0x3dc50000},{0x3dc52000},{0x3dc54000},{0x3dc56000},{0x3dc58000},{0x3dc5a000},{0x3dc5c000},{0x3dc5e000},{0x3dc60000},{0x3dc62000},{0x3dc64000},{0x3dc66000},{0x3dc68000},{0x3dc6a000},{0x3dc6c000},{0x3dc6e000},{0x3dc70000},{0x3dc72000},{0x3dc74000},{0x3dc76000},{0x3dc78000},{0x3dc7a000},{0x3dc7c000},{0x3dc7e000}, -{0x3dc80000},{0x3dc82000},{0x3dc84000},{0x3dc86000},{0x3dc88000},{0x3dc8a000},{0x3dc8c000},{0x3dc8e000},{0x3dc90000},{0x3dc92000},{0x3dc94000},{0x3dc96000},{0x3dc98000},{0x3dc9a000},{0x3dc9c000},{0x3dc9e000},{0x3dca0000},{0x3dca2000},{0x3dca4000},{0x3dca6000},{0x3dca8000},{0x3dcaa000},{0x3dcac000},{0x3dcae000},{0x3dcb0000},{0x3dcb2000},{0x3dcb4000},{0x3dcb6000},{0x3dcb8000},{0x3dcba000},{0x3dcbc000},{0x3dcbe000}, -{0x3dcc0000},{0x3dcc2000},{0x3dcc4000},{0x3dcc6000},{0x3dcc8000},{0x3dcca000},{0x3dccc000},{0x3dcce000},{0x3dcd0000},{0x3dcd2000},{0x3dcd4000},{0x3dcd6000},{0x3dcd8000},{0x3dcda000},{0x3dcdc000},{0x3dcde000},{0x3dce0000},{0x3dce2000},{0x3dce4000},{0x3dce6000},{0x3dce8000},{0x3dcea000},{0x3dcec000},{0x3dcee000},{0x3dcf0000},{0x3dcf2000},{0x3dcf4000},{0x3dcf6000},{0x3dcf8000},{0x3dcfa000},{0x3dcfc000},{0x3dcfe000}, -{0x3dd00000},{0x3dd02000},{0x3dd04000},{0x3dd06000},{0x3dd08000},{0x3dd0a000},{0x3dd0c000},{0x3dd0e000},{0x3dd10000},{0x3dd12000},{0x3dd14000},{0x3dd16000},{0x3dd18000},{0x3dd1a000},{0x3dd1c000},{0x3dd1e000},{0x3dd20000},{0x3dd22000},{0x3dd24000},{0x3dd26000},{0x3dd28000},{0x3dd2a000},{0x3dd2c000},{0x3dd2e000},{0x3dd30000},{0x3dd32000},{0x3dd34000},{0x3dd36000},{0x3dd38000},{0x3dd3a000},{0x3dd3c000},{0x3dd3e000}, -{0x3dd40000},{0x3dd42000},{0x3dd44000},{0x3dd46000},{0x3dd48000},{0x3dd4a000},{0x3dd4c000},{0x3dd4e000},{0x3dd50000},{0x3dd52000},{0x3dd54000},{0x3dd56000},{0x3dd58000},{0x3dd5a000},{0x3dd5c000},{0x3dd5e000},{0x3dd60000},{0x3dd62000},{0x3dd64000},{0x3dd66000},{0x3dd68000},{0x3dd6a000},{0x3dd6c000},{0x3dd6e000},{0x3dd70000},{0x3dd72000},{0x3dd74000},{0x3dd76000},{0x3dd78000},{0x3dd7a000},{0x3dd7c000},{0x3dd7e000}, -{0x3dd80000},{0x3dd82000},{0x3dd84000},{0x3dd86000},{0x3dd88000},{0x3dd8a000},{0x3dd8c000},{0x3dd8e000},{0x3dd90000},{0x3dd92000},{0x3dd94000},{0x3dd96000},{0x3dd98000},{0x3dd9a000},{0x3dd9c000},{0x3dd9e000},{0x3dda0000},{0x3dda2000},{0x3dda4000},{0x3dda6000},{0x3dda8000},{0x3ddaa000},{0x3ddac000},{0x3ddae000},{0x3ddb0000},{0x3ddb2000},{0x3ddb4000},{0x3ddb6000},{0x3ddb8000},{0x3ddba000},{0x3ddbc000},{0x3ddbe000}, -{0x3ddc0000},{0x3ddc2000},{0x3ddc4000},{0x3ddc6000},{0x3ddc8000},{0x3ddca000},{0x3ddcc000},{0x3ddce000},{0x3ddd0000},{0x3ddd2000},{0x3ddd4000},{0x3ddd6000},{0x3ddd8000},{0x3ddda000},{0x3dddc000},{0x3ddde000},{0x3dde0000},{0x3dde2000},{0x3dde4000},{0x3dde6000},{0x3dde8000},{0x3ddea000},{0x3ddec000},{0x3ddee000},{0x3ddf0000},{0x3ddf2000},{0x3ddf4000},{0x3ddf6000},{0x3ddf8000},{0x3ddfa000},{0x3ddfc000},{0x3ddfe000}, -{0x3de00000},{0x3de02000},{0x3de04000},{0x3de06000},{0x3de08000},{0x3de0a000},{0x3de0c000},{0x3de0e000},{0x3de10000},{0x3de12000},{0x3de14000},{0x3de16000},{0x3de18000},{0x3de1a000},{0x3de1c000},{0x3de1e000},{0x3de20000},{0x3de22000},{0x3de24000},{0x3de26000},{0x3de28000},{0x3de2a000},{0x3de2c000},{0x3de2e000},{0x3de30000},{0x3de32000},{0x3de34000},{0x3de36000},{0x3de38000},{0x3de3a000},{0x3de3c000},{0x3de3e000}, -{0x3de40000},{0x3de42000},{0x3de44000},{0x3de46000},{0x3de48000},{0x3de4a000},{0x3de4c000},{0x3de4e000},{0x3de50000},{0x3de52000},{0x3de54000},{0x3de56000},{0x3de58000},{0x3de5a000},{0x3de5c000},{0x3de5e000},{0x3de60000},{0x3de62000},{0x3de64000},{0x3de66000},{0x3de68000},{0x3de6a000},{0x3de6c000},{0x3de6e000},{0x3de70000},{0x3de72000},{0x3de74000},{0x3de76000},{0x3de78000},{0x3de7a000},{0x3de7c000},{0x3de7e000}, -{0x3de80000},{0x3de82000},{0x3de84000},{0x3de86000},{0x3de88000},{0x3de8a000},{0x3de8c000},{0x3de8e000},{0x3de90000},{0x3de92000},{0x3de94000},{0x3de96000},{0x3de98000},{0x3de9a000},{0x3de9c000},{0x3de9e000},{0x3dea0000},{0x3dea2000},{0x3dea4000},{0x3dea6000},{0x3dea8000},{0x3deaa000},{0x3deac000},{0x3deae000},{0x3deb0000},{0x3deb2000},{0x3deb4000},{0x3deb6000},{0x3deb8000},{0x3deba000},{0x3debc000},{0x3debe000}, -{0x3dec0000},{0x3dec2000},{0x3dec4000},{0x3dec6000},{0x3dec8000},{0x3deca000},{0x3decc000},{0x3dece000},{0x3ded0000},{0x3ded2000},{0x3ded4000},{0x3ded6000},{0x3ded8000},{0x3deda000},{0x3dedc000},{0x3dede000},{0x3dee0000},{0x3dee2000},{0x3dee4000},{0x3dee6000},{0x3dee8000},{0x3deea000},{0x3deec000},{0x3deee000},{0x3def0000},{0x3def2000},{0x3def4000},{0x3def6000},{0x3def8000},{0x3defa000},{0x3defc000},{0x3defe000}, -{0x3df00000},{0x3df02000},{0x3df04000},{0x3df06000},{0x3df08000},{0x3df0a000},{0x3df0c000},{0x3df0e000},{0x3df10000},{0x3df12000},{0x3df14000},{0x3df16000},{0x3df18000},{0x3df1a000},{0x3df1c000},{0x3df1e000},{0x3df20000},{0x3df22000},{0x3df24000},{0x3df26000},{0x3df28000},{0x3df2a000},{0x3df2c000},{0x3df2e000},{0x3df30000},{0x3df32000},{0x3df34000},{0x3df36000},{0x3df38000},{0x3df3a000},{0x3df3c000},{0x3df3e000}, -{0x3df40000},{0x3df42000},{0x3df44000},{0x3df46000},{0x3df48000},{0x3df4a000},{0x3df4c000},{0x3df4e000},{0x3df50000},{0x3df52000},{0x3df54000},{0x3df56000},{0x3df58000},{0x3df5a000},{0x3df5c000},{0x3df5e000},{0x3df60000},{0x3df62000},{0x3df64000},{0x3df66000},{0x3df68000},{0x3df6a000},{0x3df6c000},{0x3df6e000},{0x3df70000},{0x3df72000},{0x3df74000},{0x3df76000},{0x3df78000},{0x3df7a000},{0x3df7c000},{0x3df7e000}, -{0x3df80000},{0x3df82000},{0x3df84000},{0x3df86000},{0x3df88000},{0x3df8a000},{0x3df8c000},{0x3df8e000},{0x3df90000},{0x3df92000},{0x3df94000},{0x3df96000},{0x3df98000},{0x3df9a000},{0x3df9c000},{0x3df9e000},{0x3dfa0000},{0x3dfa2000},{0x3dfa4000},{0x3dfa6000},{0x3dfa8000},{0x3dfaa000},{0x3dfac000},{0x3dfae000},{0x3dfb0000},{0x3dfb2000},{0x3dfb4000},{0x3dfb6000},{0x3dfb8000},{0x3dfba000},{0x3dfbc000},{0x3dfbe000}, -{0x3dfc0000},{0x3dfc2000},{0x3dfc4000},{0x3dfc6000},{0x3dfc8000},{0x3dfca000},{0x3dfcc000},{0x3dfce000},{0x3dfd0000},{0x3dfd2000},{0x3dfd4000},{0x3dfd6000},{0x3dfd8000},{0x3dfda000},{0x3dfdc000},{0x3dfde000},{0x3dfe0000},{0x3dfe2000},{0x3dfe4000},{0x3dfe6000},{0x3dfe8000},{0x3dfea000},{0x3dfec000},{0x3dfee000},{0x3dff0000},{0x3dff2000},{0x3dff4000},{0x3dff6000},{0x3dff8000},{0x3dffa000},{0x3dffc000},{0x3dffe000}, -{0x3e000000},{0x3e002000},{0x3e004000},{0x3e006000},{0x3e008000},{0x3e00a000},{0x3e00c000},{0x3e00e000},{0x3e010000},{0x3e012000},{0x3e014000},{0x3e016000},{0x3e018000},{0x3e01a000},{0x3e01c000},{0x3e01e000},{0x3e020000},{0x3e022000},{0x3e024000},{0x3e026000},{0x3e028000},{0x3e02a000},{0x3e02c000},{0x3e02e000},{0x3e030000},{0x3e032000},{0x3e034000},{0x3e036000},{0x3e038000},{0x3e03a000},{0x3e03c000},{0x3e03e000}, -{0x3e040000},{0x3e042000},{0x3e044000},{0x3e046000},{0x3e048000},{0x3e04a000},{0x3e04c000},{0x3e04e000},{0x3e050000},{0x3e052000},{0x3e054000},{0x3e056000},{0x3e058000},{0x3e05a000},{0x3e05c000},{0x3e05e000},{0x3e060000},{0x3e062000},{0x3e064000},{0x3e066000},{0x3e068000},{0x3e06a000},{0x3e06c000},{0x3e06e000},{0x3e070000},{0x3e072000},{0x3e074000},{0x3e076000},{0x3e078000},{0x3e07a000},{0x3e07c000},{0x3e07e000}, -{0x3e080000},{0x3e082000},{0x3e084000},{0x3e086000},{0x3e088000},{0x3e08a000},{0x3e08c000},{0x3e08e000},{0x3e090000},{0x3e092000},{0x3e094000},{0x3e096000},{0x3e098000},{0x3e09a000},{0x3e09c000},{0x3e09e000},{0x3e0a0000},{0x3e0a2000},{0x3e0a4000},{0x3e0a6000},{0x3e0a8000},{0x3e0aa000},{0x3e0ac000},{0x3e0ae000},{0x3e0b0000},{0x3e0b2000},{0x3e0b4000},{0x3e0b6000},{0x3e0b8000},{0x3e0ba000},{0x3e0bc000},{0x3e0be000}, -{0x3e0c0000},{0x3e0c2000},{0x3e0c4000},{0x3e0c6000},{0x3e0c8000},{0x3e0ca000},{0x3e0cc000},{0x3e0ce000},{0x3e0d0000},{0x3e0d2000},{0x3e0d4000},{0x3e0d6000},{0x3e0d8000},{0x3e0da000},{0x3e0dc000},{0x3e0de000},{0x3e0e0000},{0x3e0e2000},{0x3e0e4000},{0x3e0e6000},{0x3e0e8000},{0x3e0ea000},{0x3e0ec000},{0x3e0ee000},{0x3e0f0000},{0x3e0f2000},{0x3e0f4000},{0x3e0f6000},{0x3e0f8000},{0x3e0fa000},{0x3e0fc000},{0x3e0fe000}, -{0x3e100000},{0x3e102000},{0x3e104000},{0x3e106000},{0x3e108000},{0x3e10a000},{0x3e10c000},{0x3e10e000},{0x3e110000},{0x3e112000},{0x3e114000},{0x3e116000},{0x3e118000},{0x3e11a000},{0x3e11c000},{0x3e11e000},{0x3e120000},{0x3e122000},{0x3e124000},{0x3e126000},{0x3e128000},{0x3e12a000},{0x3e12c000},{0x3e12e000},{0x3e130000},{0x3e132000},{0x3e134000},{0x3e136000},{0x3e138000},{0x3e13a000},{0x3e13c000},{0x3e13e000}, -{0x3e140000},{0x3e142000},{0x3e144000},{0x3e146000},{0x3e148000},{0x3e14a000},{0x3e14c000},{0x3e14e000},{0x3e150000},{0x3e152000},{0x3e154000},{0x3e156000},{0x3e158000},{0x3e15a000},{0x3e15c000},{0x3e15e000},{0x3e160000},{0x3e162000},{0x3e164000},{0x3e166000},{0x3e168000},{0x3e16a000},{0x3e16c000},{0x3e16e000},{0x3e170000},{0x3e172000},{0x3e174000},{0x3e176000},{0x3e178000},{0x3e17a000},{0x3e17c000},{0x3e17e000}, -{0x3e180000},{0x3e182000},{0x3e184000},{0x3e186000},{0x3e188000},{0x3e18a000},{0x3e18c000},{0x3e18e000},{0x3e190000},{0x3e192000},{0x3e194000},{0x3e196000},{0x3e198000},{0x3e19a000},{0x3e19c000},{0x3e19e000},{0x3e1a0000},{0x3e1a2000},{0x3e1a4000},{0x3e1a6000},{0x3e1a8000},{0x3e1aa000},{0x3e1ac000},{0x3e1ae000},{0x3e1b0000},{0x3e1b2000},{0x3e1b4000},{0x3e1b6000},{0x3e1b8000},{0x3e1ba000},{0x3e1bc000},{0x3e1be000}, -{0x3e1c0000},{0x3e1c2000},{0x3e1c4000},{0x3e1c6000},{0x3e1c8000},{0x3e1ca000},{0x3e1cc000},{0x3e1ce000},{0x3e1d0000},{0x3e1d2000},{0x3e1d4000},{0x3e1d6000},{0x3e1d8000},{0x3e1da000},{0x3e1dc000},{0x3e1de000},{0x3e1e0000},{0x3e1e2000},{0x3e1e4000},{0x3e1e6000},{0x3e1e8000},{0x3e1ea000},{0x3e1ec000},{0x3e1ee000},{0x3e1f0000},{0x3e1f2000},{0x3e1f4000},{0x3e1f6000},{0x3e1f8000},{0x3e1fa000},{0x3e1fc000},{0x3e1fe000}, -{0x3e200000},{0x3e202000},{0x3e204000},{0x3e206000},{0x3e208000},{0x3e20a000},{0x3e20c000},{0x3e20e000},{0x3e210000},{0x3e212000},{0x3e214000},{0x3e216000},{0x3e218000},{0x3e21a000},{0x3e21c000},{0x3e21e000},{0x3e220000},{0x3e222000},{0x3e224000},{0x3e226000},{0x3e228000},{0x3e22a000},{0x3e22c000},{0x3e22e000},{0x3e230000},{0x3e232000},{0x3e234000},{0x3e236000},{0x3e238000},{0x3e23a000},{0x3e23c000},{0x3e23e000}, -{0x3e240000},{0x3e242000},{0x3e244000},{0x3e246000},{0x3e248000},{0x3e24a000},{0x3e24c000},{0x3e24e000},{0x3e250000},{0x3e252000},{0x3e254000},{0x3e256000},{0x3e258000},{0x3e25a000},{0x3e25c000},{0x3e25e000},{0x3e260000},{0x3e262000},{0x3e264000},{0x3e266000},{0x3e268000},{0x3e26a000},{0x3e26c000},{0x3e26e000},{0x3e270000},{0x3e272000},{0x3e274000},{0x3e276000},{0x3e278000},{0x3e27a000},{0x3e27c000},{0x3e27e000}, -{0x3e280000},{0x3e282000},{0x3e284000},{0x3e286000},{0x3e288000},{0x3e28a000},{0x3e28c000},{0x3e28e000},{0x3e290000},{0x3e292000},{0x3e294000},{0x3e296000},{0x3e298000},{0x3e29a000},{0x3e29c000},{0x3e29e000},{0x3e2a0000},{0x3e2a2000},{0x3e2a4000},{0x3e2a6000},{0x3e2a8000},{0x3e2aa000},{0x3e2ac000},{0x3e2ae000},{0x3e2b0000},{0x3e2b2000},{0x3e2b4000},{0x3e2b6000},{0x3e2b8000},{0x3e2ba000},{0x3e2bc000},{0x3e2be000}, -{0x3e2c0000},{0x3e2c2000},{0x3e2c4000},{0x3e2c6000},{0x3e2c8000},{0x3e2ca000},{0x3e2cc000},{0x3e2ce000},{0x3e2d0000},{0x3e2d2000},{0x3e2d4000},{0x3e2d6000},{0x3e2d8000},{0x3e2da000},{0x3e2dc000},{0x3e2de000},{0x3e2e0000},{0x3e2e2000},{0x3e2e4000},{0x3e2e6000},{0x3e2e8000},{0x3e2ea000},{0x3e2ec000},{0x3e2ee000},{0x3e2f0000},{0x3e2f2000},{0x3e2f4000},{0x3e2f6000},{0x3e2f8000},{0x3e2fa000},{0x3e2fc000},{0x3e2fe000}, -{0x3e300000},{0x3e302000},{0x3e304000},{0x3e306000},{0x3e308000},{0x3e30a000},{0x3e30c000},{0x3e30e000},{0x3e310000},{0x3e312000},{0x3e314000},{0x3e316000},{0x3e318000},{0x3e31a000},{0x3e31c000},{0x3e31e000},{0x3e320000},{0x3e322000},{0x3e324000},{0x3e326000},{0x3e328000},{0x3e32a000},{0x3e32c000},{0x3e32e000},{0x3e330000},{0x3e332000},{0x3e334000},{0x3e336000},{0x3e338000},{0x3e33a000},{0x3e33c000},{0x3e33e000}, -{0x3e340000},{0x3e342000},{0x3e344000},{0x3e346000},{0x3e348000},{0x3e34a000},{0x3e34c000},{0x3e34e000},{0x3e350000},{0x3e352000},{0x3e354000},{0x3e356000},{0x3e358000},{0x3e35a000},{0x3e35c000},{0x3e35e000},{0x3e360000},{0x3e362000},{0x3e364000},{0x3e366000},{0x3e368000},{0x3e36a000},{0x3e36c000},{0x3e36e000},{0x3e370000},{0x3e372000},{0x3e374000},{0x3e376000},{0x3e378000},{0x3e37a000},{0x3e37c000},{0x3e37e000}, -{0x3e380000},{0x3e382000},{0x3e384000},{0x3e386000},{0x3e388000},{0x3e38a000},{0x3e38c000},{0x3e38e000},{0x3e390000},{0x3e392000},{0x3e394000},{0x3e396000},{0x3e398000},{0x3e39a000},{0x3e39c000},{0x3e39e000},{0x3e3a0000},{0x3e3a2000},{0x3e3a4000},{0x3e3a6000},{0x3e3a8000},{0x3e3aa000},{0x3e3ac000},{0x3e3ae000},{0x3e3b0000},{0x3e3b2000},{0x3e3b4000},{0x3e3b6000},{0x3e3b8000},{0x3e3ba000},{0x3e3bc000},{0x3e3be000}, -{0x3e3c0000},{0x3e3c2000},{0x3e3c4000},{0x3e3c6000},{0x3e3c8000},{0x3e3ca000},{0x3e3cc000},{0x3e3ce000},{0x3e3d0000},{0x3e3d2000},{0x3e3d4000},{0x3e3d6000},{0x3e3d8000},{0x3e3da000},{0x3e3dc000},{0x3e3de000},{0x3e3e0000},{0x3e3e2000},{0x3e3e4000},{0x3e3e6000},{0x3e3e8000},{0x3e3ea000},{0x3e3ec000},{0x3e3ee000},{0x3e3f0000},{0x3e3f2000},{0x3e3f4000},{0x3e3f6000},{0x3e3f8000},{0x3e3fa000},{0x3e3fc000},{0x3e3fe000}, -{0x3e400000},{0x3e402000},{0x3e404000},{0x3e406000},{0x3e408000},{0x3e40a000},{0x3e40c000},{0x3e40e000},{0x3e410000},{0x3e412000},{0x3e414000},{0x3e416000},{0x3e418000},{0x3e41a000},{0x3e41c000},{0x3e41e000},{0x3e420000},{0x3e422000},{0x3e424000},{0x3e426000},{0x3e428000},{0x3e42a000},{0x3e42c000},{0x3e42e000},{0x3e430000},{0x3e432000},{0x3e434000},{0x3e436000},{0x3e438000},{0x3e43a000},{0x3e43c000},{0x3e43e000}, -{0x3e440000},{0x3e442000},{0x3e444000},{0x3e446000},{0x3e448000},{0x3e44a000},{0x3e44c000},{0x3e44e000},{0x3e450000},{0x3e452000},{0x3e454000},{0x3e456000},{0x3e458000},{0x3e45a000},{0x3e45c000},{0x3e45e000},{0x3e460000},{0x3e462000},{0x3e464000},{0x3e466000},{0x3e468000},{0x3e46a000},{0x3e46c000},{0x3e46e000},{0x3e470000},{0x3e472000},{0x3e474000},{0x3e476000},{0x3e478000},{0x3e47a000},{0x3e47c000},{0x3e47e000}, -{0x3e480000},{0x3e482000},{0x3e484000},{0x3e486000},{0x3e488000},{0x3e48a000},{0x3e48c000},{0x3e48e000},{0x3e490000},{0x3e492000},{0x3e494000},{0x3e496000},{0x3e498000},{0x3e49a000},{0x3e49c000},{0x3e49e000},{0x3e4a0000},{0x3e4a2000},{0x3e4a4000},{0x3e4a6000},{0x3e4a8000},{0x3e4aa000},{0x3e4ac000},{0x3e4ae000},{0x3e4b0000},{0x3e4b2000},{0x3e4b4000},{0x3e4b6000},{0x3e4b8000},{0x3e4ba000},{0x3e4bc000},{0x3e4be000}, -{0x3e4c0000},{0x3e4c2000},{0x3e4c4000},{0x3e4c6000},{0x3e4c8000},{0x3e4ca000},{0x3e4cc000},{0x3e4ce000},{0x3e4d0000},{0x3e4d2000},{0x3e4d4000},{0x3e4d6000},{0x3e4d8000},{0x3e4da000},{0x3e4dc000},{0x3e4de000},{0x3e4e0000},{0x3e4e2000},{0x3e4e4000},{0x3e4e6000},{0x3e4e8000},{0x3e4ea000},{0x3e4ec000},{0x3e4ee000},{0x3e4f0000},{0x3e4f2000},{0x3e4f4000},{0x3e4f6000},{0x3e4f8000},{0x3e4fa000},{0x3e4fc000},{0x3e4fe000}, -{0x3e500000},{0x3e502000},{0x3e504000},{0x3e506000},{0x3e508000},{0x3e50a000},{0x3e50c000},{0x3e50e000},{0x3e510000},{0x3e512000},{0x3e514000},{0x3e516000},{0x3e518000},{0x3e51a000},{0x3e51c000},{0x3e51e000},{0x3e520000},{0x3e522000},{0x3e524000},{0x3e526000},{0x3e528000},{0x3e52a000},{0x3e52c000},{0x3e52e000},{0x3e530000},{0x3e532000},{0x3e534000},{0x3e536000},{0x3e538000},{0x3e53a000},{0x3e53c000},{0x3e53e000}, -{0x3e540000},{0x3e542000},{0x3e544000},{0x3e546000},{0x3e548000},{0x3e54a000},{0x3e54c000},{0x3e54e000},{0x3e550000},{0x3e552000},{0x3e554000},{0x3e556000},{0x3e558000},{0x3e55a000},{0x3e55c000},{0x3e55e000},{0x3e560000},{0x3e562000},{0x3e564000},{0x3e566000},{0x3e568000},{0x3e56a000},{0x3e56c000},{0x3e56e000},{0x3e570000},{0x3e572000},{0x3e574000},{0x3e576000},{0x3e578000},{0x3e57a000},{0x3e57c000},{0x3e57e000}, -{0x3e580000},{0x3e582000},{0x3e584000},{0x3e586000},{0x3e588000},{0x3e58a000},{0x3e58c000},{0x3e58e000},{0x3e590000},{0x3e592000},{0x3e594000},{0x3e596000},{0x3e598000},{0x3e59a000},{0x3e59c000},{0x3e59e000},{0x3e5a0000},{0x3e5a2000},{0x3e5a4000},{0x3e5a6000},{0x3e5a8000},{0x3e5aa000},{0x3e5ac000},{0x3e5ae000},{0x3e5b0000},{0x3e5b2000},{0x3e5b4000},{0x3e5b6000},{0x3e5b8000},{0x3e5ba000},{0x3e5bc000},{0x3e5be000}, -{0x3e5c0000},{0x3e5c2000},{0x3e5c4000},{0x3e5c6000},{0x3e5c8000},{0x3e5ca000},{0x3e5cc000},{0x3e5ce000},{0x3e5d0000},{0x3e5d2000},{0x3e5d4000},{0x3e5d6000},{0x3e5d8000},{0x3e5da000},{0x3e5dc000},{0x3e5de000},{0x3e5e0000},{0x3e5e2000},{0x3e5e4000},{0x3e5e6000},{0x3e5e8000},{0x3e5ea000},{0x3e5ec000},{0x3e5ee000},{0x3e5f0000},{0x3e5f2000},{0x3e5f4000},{0x3e5f6000},{0x3e5f8000},{0x3e5fa000},{0x3e5fc000},{0x3e5fe000}, -{0x3e600000},{0x3e602000},{0x3e604000},{0x3e606000},{0x3e608000},{0x3e60a000},{0x3e60c000},{0x3e60e000},{0x3e610000},{0x3e612000},{0x3e614000},{0x3e616000},{0x3e618000},{0x3e61a000},{0x3e61c000},{0x3e61e000},{0x3e620000},{0x3e622000},{0x3e624000},{0x3e626000},{0x3e628000},{0x3e62a000},{0x3e62c000},{0x3e62e000},{0x3e630000},{0x3e632000},{0x3e634000},{0x3e636000},{0x3e638000},{0x3e63a000},{0x3e63c000},{0x3e63e000}, -{0x3e640000},{0x3e642000},{0x3e644000},{0x3e646000},{0x3e648000},{0x3e64a000},{0x3e64c000},{0x3e64e000},{0x3e650000},{0x3e652000},{0x3e654000},{0x3e656000},{0x3e658000},{0x3e65a000},{0x3e65c000},{0x3e65e000},{0x3e660000},{0x3e662000},{0x3e664000},{0x3e666000},{0x3e668000},{0x3e66a000},{0x3e66c000},{0x3e66e000},{0x3e670000},{0x3e672000},{0x3e674000},{0x3e676000},{0x3e678000},{0x3e67a000},{0x3e67c000},{0x3e67e000}, -{0x3e680000},{0x3e682000},{0x3e684000},{0x3e686000},{0x3e688000},{0x3e68a000},{0x3e68c000},{0x3e68e000},{0x3e690000},{0x3e692000},{0x3e694000},{0x3e696000},{0x3e698000},{0x3e69a000},{0x3e69c000},{0x3e69e000},{0x3e6a0000},{0x3e6a2000},{0x3e6a4000},{0x3e6a6000},{0x3e6a8000},{0x3e6aa000},{0x3e6ac000},{0x3e6ae000},{0x3e6b0000},{0x3e6b2000},{0x3e6b4000},{0x3e6b6000},{0x3e6b8000},{0x3e6ba000},{0x3e6bc000},{0x3e6be000}, -{0x3e6c0000},{0x3e6c2000},{0x3e6c4000},{0x3e6c6000},{0x3e6c8000},{0x3e6ca000},{0x3e6cc000},{0x3e6ce000},{0x3e6d0000},{0x3e6d2000},{0x3e6d4000},{0x3e6d6000},{0x3e6d8000},{0x3e6da000},{0x3e6dc000},{0x3e6de000},{0x3e6e0000},{0x3e6e2000},{0x3e6e4000},{0x3e6e6000},{0x3e6e8000},{0x3e6ea000},{0x3e6ec000},{0x3e6ee000},{0x3e6f0000},{0x3e6f2000},{0x3e6f4000},{0x3e6f6000},{0x3e6f8000},{0x3e6fa000},{0x3e6fc000},{0x3e6fe000}, -{0x3e700000},{0x3e702000},{0x3e704000},{0x3e706000},{0x3e708000},{0x3e70a000},{0x3e70c000},{0x3e70e000},{0x3e710000},{0x3e712000},{0x3e714000},{0x3e716000},{0x3e718000},{0x3e71a000},{0x3e71c000},{0x3e71e000},{0x3e720000},{0x3e722000},{0x3e724000},{0x3e726000},{0x3e728000},{0x3e72a000},{0x3e72c000},{0x3e72e000},{0x3e730000},{0x3e732000},{0x3e734000},{0x3e736000},{0x3e738000},{0x3e73a000},{0x3e73c000},{0x3e73e000}, -{0x3e740000},{0x3e742000},{0x3e744000},{0x3e746000},{0x3e748000},{0x3e74a000},{0x3e74c000},{0x3e74e000},{0x3e750000},{0x3e752000},{0x3e754000},{0x3e756000},{0x3e758000},{0x3e75a000},{0x3e75c000},{0x3e75e000},{0x3e760000},{0x3e762000},{0x3e764000},{0x3e766000},{0x3e768000},{0x3e76a000},{0x3e76c000},{0x3e76e000},{0x3e770000},{0x3e772000},{0x3e774000},{0x3e776000},{0x3e778000},{0x3e77a000},{0x3e77c000},{0x3e77e000}, -{0x3e780000},{0x3e782000},{0x3e784000},{0x3e786000},{0x3e788000},{0x3e78a000},{0x3e78c000},{0x3e78e000},{0x3e790000},{0x3e792000},{0x3e794000},{0x3e796000},{0x3e798000},{0x3e79a000},{0x3e79c000},{0x3e79e000},{0x3e7a0000},{0x3e7a2000},{0x3e7a4000},{0x3e7a6000},{0x3e7a8000},{0x3e7aa000},{0x3e7ac000},{0x3e7ae000},{0x3e7b0000},{0x3e7b2000},{0x3e7b4000},{0x3e7b6000},{0x3e7b8000},{0x3e7ba000},{0x3e7bc000},{0x3e7be000}, -{0x3e7c0000},{0x3e7c2000},{0x3e7c4000},{0x3e7c6000},{0x3e7c8000},{0x3e7ca000},{0x3e7cc000},{0x3e7ce000},{0x3e7d0000},{0x3e7d2000},{0x3e7d4000},{0x3e7d6000},{0x3e7d8000},{0x3e7da000},{0x3e7dc000},{0x3e7de000},{0x3e7e0000},{0x3e7e2000},{0x3e7e4000},{0x3e7e6000},{0x3e7e8000},{0x3e7ea000},{0x3e7ec000},{0x3e7ee000},{0x3e7f0000},{0x3e7f2000},{0x3e7f4000},{0x3e7f6000},{0x3e7f8000},{0x3e7fa000},{0x3e7fc000},{0x3e7fe000}, -{0x3e800000},{0x3e802000},{0x3e804000},{0x3e806000},{0x3e808000},{0x3e80a000},{0x3e80c000},{0x3e80e000},{0x3e810000},{0x3e812000},{0x3e814000},{0x3e816000},{0x3e818000},{0x3e81a000},{0x3e81c000},{0x3e81e000},{0x3e820000},{0x3e822000},{0x3e824000},{0x3e826000},{0x3e828000},{0x3e82a000},{0x3e82c000},{0x3e82e000},{0x3e830000},{0x3e832000},{0x3e834000},{0x3e836000},{0x3e838000},{0x3e83a000},{0x3e83c000},{0x3e83e000}, -{0x3e840000},{0x3e842000},{0x3e844000},{0x3e846000},{0x3e848000},{0x3e84a000},{0x3e84c000},{0x3e84e000},{0x3e850000},{0x3e852000},{0x3e854000},{0x3e856000},{0x3e858000},{0x3e85a000},{0x3e85c000},{0x3e85e000},{0x3e860000},{0x3e862000},{0x3e864000},{0x3e866000},{0x3e868000},{0x3e86a000},{0x3e86c000},{0x3e86e000},{0x3e870000},{0x3e872000},{0x3e874000},{0x3e876000},{0x3e878000},{0x3e87a000},{0x3e87c000},{0x3e87e000}, -{0x3e880000},{0x3e882000},{0x3e884000},{0x3e886000},{0x3e888000},{0x3e88a000},{0x3e88c000},{0x3e88e000},{0x3e890000},{0x3e892000},{0x3e894000},{0x3e896000},{0x3e898000},{0x3e89a000},{0x3e89c000},{0x3e89e000},{0x3e8a0000},{0x3e8a2000},{0x3e8a4000},{0x3e8a6000},{0x3e8a8000},{0x3e8aa000},{0x3e8ac000},{0x3e8ae000},{0x3e8b0000},{0x3e8b2000},{0x3e8b4000},{0x3e8b6000},{0x3e8b8000},{0x3e8ba000},{0x3e8bc000},{0x3e8be000}, -{0x3e8c0000},{0x3e8c2000},{0x3e8c4000},{0x3e8c6000},{0x3e8c8000},{0x3e8ca000},{0x3e8cc000},{0x3e8ce000},{0x3e8d0000},{0x3e8d2000},{0x3e8d4000},{0x3e8d6000},{0x3e8d8000},{0x3e8da000},{0x3e8dc000},{0x3e8de000},{0x3e8e0000},{0x3e8e2000},{0x3e8e4000},{0x3e8e6000},{0x3e8e8000},{0x3e8ea000},{0x3e8ec000},{0x3e8ee000},{0x3e8f0000},{0x3e8f2000},{0x3e8f4000},{0x3e8f6000},{0x3e8f8000},{0x3e8fa000},{0x3e8fc000},{0x3e8fe000}, -{0x3e900000},{0x3e902000},{0x3e904000},{0x3e906000},{0x3e908000},{0x3e90a000},{0x3e90c000},{0x3e90e000},{0x3e910000},{0x3e912000},{0x3e914000},{0x3e916000},{0x3e918000},{0x3e91a000},{0x3e91c000},{0x3e91e000},{0x3e920000},{0x3e922000},{0x3e924000},{0x3e926000},{0x3e928000},{0x3e92a000},{0x3e92c000},{0x3e92e000},{0x3e930000},{0x3e932000},{0x3e934000},{0x3e936000},{0x3e938000},{0x3e93a000},{0x3e93c000},{0x3e93e000}, -{0x3e940000},{0x3e942000},{0x3e944000},{0x3e946000},{0x3e948000},{0x3e94a000},{0x3e94c000},{0x3e94e000},{0x3e950000},{0x3e952000},{0x3e954000},{0x3e956000},{0x3e958000},{0x3e95a000},{0x3e95c000},{0x3e95e000},{0x3e960000},{0x3e962000},{0x3e964000},{0x3e966000},{0x3e968000},{0x3e96a000},{0x3e96c000},{0x3e96e000},{0x3e970000},{0x3e972000},{0x3e974000},{0x3e976000},{0x3e978000},{0x3e97a000},{0x3e97c000},{0x3e97e000}, -{0x3e980000},{0x3e982000},{0x3e984000},{0x3e986000},{0x3e988000},{0x3e98a000},{0x3e98c000},{0x3e98e000},{0x3e990000},{0x3e992000},{0x3e994000},{0x3e996000},{0x3e998000},{0x3e99a000},{0x3e99c000},{0x3e99e000},{0x3e9a0000},{0x3e9a2000},{0x3e9a4000},{0x3e9a6000},{0x3e9a8000},{0x3e9aa000},{0x3e9ac000},{0x3e9ae000},{0x3e9b0000},{0x3e9b2000},{0x3e9b4000},{0x3e9b6000},{0x3e9b8000},{0x3e9ba000},{0x3e9bc000},{0x3e9be000}, -{0x3e9c0000},{0x3e9c2000},{0x3e9c4000},{0x3e9c6000},{0x3e9c8000},{0x3e9ca000},{0x3e9cc000},{0x3e9ce000},{0x3e9d0000},{0x3e9d2000},{0x3e9d4000},{0x3e9d6000},{0x3e9d8000},{0x3e9da000},{0x3e9dc000},{0x3e9de000},{0x3e9e0000},{0x3e9e2000},{0x3e9e4000},{0x3e9e6000},{0x3e9e8000},{0x3e9ea000},{0x3e9ec000},{0x3e9ee000},{0x3e9f0000},{0x3e9f2000},{0x3e9f4000},{0x3e9f6000},{0x3e9f8000},{0x3e9fa000},{0x3e9fc000},{0x3e9fe000}, -{0x3ea00000},{0x3ea02000},{0x3ea04000},{0x3ea06000},{0x3ea08000},{0x3ea0a000},{0x3ea0c000},{0x3ea0e000},{0x3ea10000},{0x3ea12000},{0x3ea14000},{0x3ea16000},{0x3ea18000},{0x3ea1a000},{0x3ea1c000},{0x3ea1e000},{0x3ea20000},{0x3ea22000},{0x3ea24000},{0x3ea26000},{0x3ea28000},{0x3ea2a000},{0x3ea2c000},{0x3ea2e000},{0x3ea30000},{0x3ea32000},{0x3ea34000},{0x3ea36000},{0x3ea38000},{0x3ea3a000},{0x3ea3c000},{0x3ea3e000}, -{0x3ea40000},{0x3ea42000},{0x3ea44000},{0x3ea46000},{0x3ea48000},{0x3ea4a000},{0x3ea4c000},{0x3ea4e000},{0x3ea50000},{0x3ea52000},{0x3ea54000},{0x3ea56000},{0x3ea58000},{0x3ea5a000},{0x3ea5c000},{0x3ea5e000},{0x3ea60000},{0x3ea62000},{0x3ea64000},{0x3ea66000},{0x3ea68000},{0x3ea6a000},{0x3ea6c000},{0x3ea6e000},{0x3ea70000},{0x3ea72000},{0x3ea74000},{0x3ea76000},{0x3ea78000},{0x3ea7a000},{0x3ea7c000},{0x3ea7e000}, -{0x3ea80000},{0x3ea82000},{0x3ea84000},{0x3ea86000},{0x3ea88000},{0x3ea8a000},{0x3ea8c000},{0x3ea8e000},{0x3ea90000},{0x3ea92000},{0x3ea94000},{0x3ea96000},{0x3ea98000},{0x3ea9a000},{0x3ea9c000},{0x3ea9e000},{0x3eaa0000},{0x3eaa2000},{0x3eaa4000},{0x3eaa6000},{0x3eaa8000},{0x3eaaa000},{0x3eaac000},{0x3eaae000},{0x3eab0000},{0x3eab2000},{0x3eab4000},{0x3eab6000},{0x3eab8000},{0x3eaba000},{0x3eabc000},{0x3eabe000}, -{0x3eac0000},{0x3eac2000},{0x3eac4000},{0x3eac6000},{0x3eac8000},{0x3eaca000},{0x3eacc000},{0x3eace000},{0x3ead0000},{0x3ead2000},{0x3ead4000},{0x3ead6000},{0x3ead8000},{0x3eada000},{0x3eadc000},{0x3eade000},{0x3eae0000},{0x3eae2000},{0x3eae4000},{0x3eae6000},{0x3eae8000},{0x3eaea000},{0x3eaec000},{0x3eaee000},{0x3eaf0000},{0x3eaf2000},{0x3eaf4000},{0x3eaf6000},{0x3eaf8000},{0x3eafa000},{0x3eafc000},{0x3eafe000}, -{0x3eb00000},{0x3eb02000},{0x3eb04000},{0x3eb06000},{0x3eb08000},{0x3eb0a000},{0x3eb0c000},{0x3eb0e000},{0x3eb10000},{0x3eb12000},{0x3eb14000},{0x3eb16000},{0x3eb18000},{0x3eb1a000},{0x3eb1c000},{0x3eb1e000},{0x3eb20000},{0x3eb22000},{0x3eb24000},{0x3eb26000},{0x3eb28000},{0x3eb2a000},{0x3eb2c000},{0x3eb2e000},{0x3eb30000},{0x3eb32000},{0x3eb34000},{0x3eb36000},{0x3eb38000},{0x3eb3a000},{0x3eb3c000},{0x3eb3e000}, -{0x3eb40000},{0x3eb42000},{0x3eb44000},{0x3eb46000},{0x3eb48000},{0x3eb4a000},{0x3eb4c000},{0x3eb4e000},{0x3eb50000},{0x3eb52000},{0x3eb54000},{0x3eb56000},{0x3eb58000},{0x3eb5a000},{0x3eb5c000},{0x3eb5e000},{0x3eb60000},{0x3eb62000},{0x3eb64000},{0x3eb66000},{0x3eb68000},{0x3eb6a000},{0x3eb6c000},{0x3eb6e000},{0x3eb70000},{0x3eb72000},{0x3eb74000},{0x3eb76000},{0x3eb78000},{0x3eb7a000},{0x3eb7c000},{0x3eb7e000}, -{0x3eb80000},{0x3eb82000},{0x3eb84000},{0x3eb86000},{0x3eb88000},{0x3eb8a000},{0x3eb8c000},{0x3eb8e000},{0x3eb90000},{0x3eb92000},{0x3eb94000},{0x3eb96000},{0x3eb98000},{0x3eb9a000},{0x3eb9c000},{0x3eb9e000},{0x3eba0000},{0x3eba2000},{0x3eba4000},{0x3eba6000},{0x3eba8000},{0x3ebaa000},{0x3ebac000},{0x3ebae000},{0x3ebb0000},{0x3ebb2000},{0x3ebb4000},{0x3ebb6000},{0x3ebb8000},{0x3ebba000},{0x3ebbc000},{0x3ebbe000}, -{0x3ebc0000},{0x3ebc2000},{0x3ebc4000},{0x3ebc6000},{0x3ebc8000},{0x3ebca000},{0x3ebcc000},{0x3ebce000},{0x3ebd0000},{0x3ebd2000},{0x3ebd4000},{0x3ebd6000},{0x3ebd8000},{0x3ebda000},{0x3ebdc000},{0x3ebde000},{0x3ebe0000},{0x3ebe2000},{0x3ebe4000},{0x3ebe6000},{0x3ebe8000},{0x3ebea000},{0x3ebec000},{0x3ebee000},{0x3ebf0000},{0x3ebf2000},{0x3ebf4000},{0x3ebf6000},{0x3ebf8000},{0x3ebfa000},{0x3ebfc000},{0x3ebfe000}, -{0x3ec00000},{0x3ec02000},{0x3ec04000},{0x3ec06000},{0x3ec08000},{0x3ec0a000},{0x3ec0c000},{0x3ec0e000},{0x3ec10000},{0x3ec12000},{0x3ec14000},{0x3ec16000},{0x3ec18000},{0x3ec1a000},{0x3ec1c000},{0x3ec1e000},{0x3ec20000},{0x3ec22000},{0x3ec24000},{0x3ec26000},{0x3ec28000},{0x3ec2a000},{0x3ec2c000},{0x3ec2e000},{0x3ec30000},{0x3ec32000},{0x3ec34000},{0x3ec36000},{0x3ec38000},{0x3ec3a000},{0x3ec3c000},{0x3ec3e000}, -{0x3ec40000},{0x3ec42000},{0x3ec44000},{0x3ec46000},{0x3ec48000},{0x3ec4a000},{0x3ec4c000},{0x3ec4e000},{0x3ec50000},{0x3ec52000},{0x3ec54000},{0x3ec56000},{0x3ec58000},{0x3ec5a000},{0x3ec5c000},{0x3ec5e000},{0x3ec60000},{0x3ec62000},{0x3ec64000},{0x3ec66000},{0x3ec68000},{0x3ec6a000},{0x3ec6c000},{0x3ec6e000},{0x3ec70000},{0x3ec72000},{0x3ec74000},{0x3ec76000},{0x3ec78000},{0x3ec7a000},{0x3ec7c000},{0x3ec7e000}, -{0x3ec80000},{0x3ec82000},{0x3ec84000},{0x3ec86000},{0x3ec88000},{0x3ec8a000},{0x3ec8c000},{0x3ec8e000},{0x3ec90000},{0x3ec92000},{0x3ec94000},{0x3ec96000},{0x3ec98000},{0x3ec9a000},{0x3ec9c000},{0x3ec9e000},{0x3eca0000},{0x3eca2000},{0x3eca4000},{0x3eca6000},{0x3eca8000},{0x3ecaa000},{0x3ecac000},{0x3ecae000},{0x3ecb0000},{0x3ecb2000},{0x3ecb4000},{0x3ecb6000},{0x3ecb8000},{0x3ecba000},{0x3ecbc000},{0x3ecbe000}, -{0x3ecc0000},{0x3ecc2000},{0x3ecc4000},{0x3ecc6000},{0x3ecc8000},{0x3ecca000},{0x3eccc000},{0x3ecce000},{0x3ecd0000},{0x3ecd2000},{0x3ecd4000},{0x3ecd6000},{0x3ecd8000},{0x3ecda000},{0x3ecdc000},{0x3ecde000},{0x3ece0000},{0x3ece2000},{0x3ece4000},{0x3ece6000},{0x3ece8000},{0x3ecea000},{0x3ecec000},{0x3ecee000},{0x3ecf0000},{0x3ecf2000},{0x3ecf4000},{0x3ecf6000},{0x3ecf8000},{0x3ecfa000},{0x3ecfc000},{0x3ecfe000}, -{0x3ed00000},{0x3ed02000},{0x3ed04000},{0x3ed06000},{0x3ed08000},{0x3ed0a000},{0x3ed0c000},{0x3ed0e000},{0x3ed10000},{0x3ed12000},{0x3ed14000},{0x3ed16000},{0x3ed18000},{0x3ed1a000},{0x3ed1c000},{0x3ed1e000},{0x3ed20000},{0x3ed22000},{0x3ed24000},{0x3ed26000},{0x3ed28000},{0x3ed2a000},{0x3ed2c000},{0x3ed2e000},{0x3ed30000},{0x3ed32000},{0x3ed34000},{0x3ed36000},{0x3ed38000},{0x3ed3a000},{0x3ed3c000},{0x3ed3e000}, -{0x3ed40000},{0x3ed42000},{0x3ed44000},{0x3ed46000},{0x3ed48000},{0x3ed4a000},{0x3ed4c000},{0x3ed4e000},{0x3ed50000},{0x3ed52000},{0x3ed54000},{0x3ed56000},{0x3ed58000},{0x3ed5a000},{0x3ed5c000},{0x3ed5e000},{0x3ed60000},{0x3ed62000},{0x3ed64000},{0x3ed66000},{0x3ed68000},{0x3ed6a000},{0x3ed6c000},{0x3ed6e000},{0x3ed70000},{0x3ed72000},{0x3ed74000},{0x3ed76000},{0x3ed78000},{0x3ed7a000},{0x3ed7c000},{0x3ed7e000}, -{0x3ed80000},{0x3ed82000},{0x3ed84000},{0x3ed86000},{0x3ed88000},{0x3ed8a000},{0x3ed8c000},{0x3ed8e000},{0x3ed90000},{0x3ed92000},{0x3ed94000},{0x3ed96000},{0x3ed98000},{0x3ed9a000},{0x3ed9c000},{0x3ed9e000},{0x3eda0000},{0x3eda2000},{0x3eda4000},{0x3eda6000},{0x3eda8000},{0x3edaa000},{0x3edac000},{0x3edae000},{0x3edb0000},{0x3edb2000},{0x3edb4000},{0x3edb6000},{0x3edb8000},{0x3edba000},{0x3edbc000},{0x3edbe000}, -{0x3edc0000},{0x3edc2000},{0x3edc4000},{0x3edc6000},{0x3edc8000},{0x3edca000},{0x3edcc000},{0x3edce000},{0x3edd0000},{0x3edd2000},{0x3edd4000},{0x3edd6000},{0x3edd8000},{0x3edda000},{0x3eddc000},{0x3edde000},{0x3ede0000},{0x3ede2000},{0x3ede4000},{0x3ede6000},{0x3ede8000},{0x3edea000},{0x3edec000},{0x3edee000},{0x3edf0000},{0x3edf2000},{0x3edf4000},{0x3edf6000},{0x3edf8000},{0x3edfa000},{0x3edfc000},{0x3edfe000}, -{0x3ee00000},{0x3ee02000},{0x3ee04000},{0x3ee06000},{0x3ee08000},{0x3ee0a000},{0x3ee0c000},{0x3ee0e000},{0x3ee10000},{0x3ee12000},{0x3ee14000},{0x3ee16000},{0x3ee18000},{0x3ee1a000},{0x3ee1c000},{0x3ee1e000},{0x3ee20000},{0x3ee22000},{0x3ee24000},{0x3ee26000},{0x3ee28000},{0x3ee2a000},{0x3ee2c000},{0x3ee2e000},{0x3ee30000},{0x3ee32000},{0x3ee34000},{0x3ee36000},{0x3ee38000},{0x3ee3a000},{0x3ee3c000},{0x3ee3e000}, -{0x3ee40000},{0x3ee42000},{0x3ee44000},{0x3ee46000},{0x3ee48000},{0x3ee4a000},{0x3ee4c000},{0x3ee4e000},{0x3ee50000},{0x3ee52000},{0x3ee54000},{0x3ee56000},{0x3ee58000},{0x3ee5a000},{0x3ee5c000},{0x3ee5e000},{0x3ee60000},{0x3ee62000},{0x3ee64000},{0x3ee66000},{0x3ee68000},{0x3ee6a000},{0x3ee6c000},{0x3ee6e000},{0x3ee70000},{0x3ee72000},{0x3ee74000},{0x3ee76000},{0x3ee78000},{0x3ee7a000},{0x3ee7c000},{0x3ee7e000}, -{0x3ee80000},{0x3ee82000},{0x3ee84000},{0x3ee86000},{0x3ee88000},{0x3ee8a000},{0x3ee8c000},{0x3ee8e000},{0x3ee90000},{0x3ee92000},{0x3ee94000},{0x3ee96000},{0x3ee98000},{0x3ee9a000},{0x3ee9c000},{0x3ee9e000},{0x3eea0000},{0x3eea2000},{0x3eea4000},{0x3eea6000},{0x3eea8000},{0x3eeaa000},{0x3eeac000},{0x3eeae000},{0x3eeb0000},{0x3eeb2000},{0x3eeb4000},{0x3eeb6000},{0x3eeb8000},{0x3eeba000},{0x3eebc000},{0x3eebe000}, -{0x3eec0000},{0x3eec2000},{0x3eec4000},{0x3eec6000},{0x3eec8000},{0x3eeca000},{0x3eecc000},{0x3eece000},{0x3eed0000},{0x3eed2000},{0x3eed4000},{0x3eed6000},{0x3eed8000},{0x3eeda000},{0x3eedc000},{0x3eede000},{0x3eee0000},{0x3eee2000},{0x3eee4000},{0x3eee6000},{0x3eee8000},{0x3eeea000},{0x3eeec000},{0x3eeee000},{0x3eef0000},{0x3eef2000},{0x3eef4000},{0x3eef6000},{0x3eef8000},{0x3eefa000},{0x3eefc000},{0x3eefe000}, -{0x3ef00000},{0x3ef02000},{0x3ef04000},{0x3ef06000},{0x3ef08000},{0x3ef0a000},{0x3ef0c000},{0x3ef0e000},{0x3ef10000},{0x3ef12000},{0x3ef14000},{0x3ef16000},{0x3ef18000},{0x3ef1a000},{0x3ef1c000},{0x3ef1e000},{0x3ef20000},{0x3ef22000},{0x3ef24000},{0x3ef26000},{0x3ef28000},{0x3ef2a000},{0x3ef2c000},{0x3ef2e000},{0x3ef30000},{0x3ef32000},{0x3ef34000},{0x3ef36000},{0x3ef38000},{0x3ef3a000},{0x3ef3c000},{0x3ef3e000}, -{0x3ef40000},{0x3ef42000},{0x3ef44000},{0x3ef46000},{0x3ef48000},{0x3ef4a000},{0x3ef4c000},{0x3ef4e000},{0x3ef50000},{0x3ef52000},{0x3ef54000},{0x3ef56000},{0x3ef58000},{0x3ef5a000},{0x3ef5c000},{0x3ef5e000},{0x3ef60000},{0x3ef62000},{0x3ef64000},{0x3ef66000},{0x3ef68000},{0x3ef6a000},{0x3ef6c000},{0x3ef6e000},{0x3ef70000},{0x3ef72000},{0x3ef74000},{0x3ef76000},{0x3ef78000},{0x3ef7a000},{0x3ef7c000},{0x3ef7e000}, -{0x3ef80000},{0x3ef82000},{0x3ef84000},{0x3ef86000},{0x3ef88000},{0x3ef8a000},{0x3ef8c000},{0x3ef8e000},{0x3ef90000},{0x3ef92000},{0x3ef94000},{0x3ef96000},{0x3ef98000},{0x3ef9a000},{0x3ef9c000},{0x3ef9e000},{0x3efa0000},{0x3efa2000},{0x3efa4000},{0x3efa6000},{0x3efa8000},{0x3efaa000},{0x3efac000},{0x3efae000},{0x3efb0000},{0x3efb2000},{0x3efb4000},{0x3efb6000},{0x3efb8000},{0x3efba000},{0x3efbc000},{0x3efbe000}, -{0x3efc0000},{0x3efc2000},{0x3efc4000},{0x3efc6000},{0x3efc8000},{0x3efca000},{0x3efcc000},{0x3efce000},{0x3efd0000},{0x3efd2000},{0x3efd4000},{0x3efd6000},{0x3efd8000},{0x3efda000},{0x3efdc000},{0x3efde000},{0x3efe0000},{0x3efe2000},{0x3efe4000},{0x3efe6000},{0x3efe8000},{0x3efea000},{0x3efec000},{0x3efee000},{0x3eff0000},{0x3eff2000},{0x3eff4000},{0x3eff6000},{0x3eff8000},{0x3effa000},{0x3effc000},{0x3effe000}, -{0x3f000000},{0x3f002000},{0x3f004000},{0x3f006000},{0x3f008000},{0x3f00a000},{0x3f00c000},{0x3f00e000},{0x3f010000},{0x3f012000},{0x3f014000},{0x3f016000},{0x3f018000},{0x3f01a000},{0x3f01c000},{0x3f01e000},{0x3f020000},{0x3f022000},{0x3f024000},{0x3f026000},{0x3f028000},{0x3f02a000},{0x3f02c000},{0x3f02e000},{0x3f030000},{0x3f032000},{0x3f034000},{0x3f036000},{0x3f038000},{0x3f03a000},{0x3f03c000},{0x3f03e000}, -{0x3f040000},{0x3f042000},{0x3f044000},{0x3f046000},{0x3f048000},{0x3f04a000},{0x3f04c000},{0x3f04e000},{0x3f050000},{0x3f052000},{0x3f054000},{0x3f056000},{0x3f058000},{0x3f05a000},{0x3f05c000},{0x3f05e000},{0x3f060000},{0x3f062000},{0x3f064000},{0x3f066000},{0x3f068000},{0x3f06a000},{0x3f06c000},{0x3f06e000},{0x3f070000},{0x3f072000},{0x3f074000},{0x3f076000},{0x3f078000},{0x3f07a000},{0x3f07c000},{0x3f07e000}, -{0x3f080000},{0x3f082000},{0x3f084000},{0x3f086000},{0x3f088000},{0x3f08a000},{0x3f08c000},{0x3f08e000},{0x3f090000},{0x3f092000},{0x3f094000},{0x3f096000},{0x3f098000},{0x3f09a000},{0x3f09c000},{0x3f09e000},{0x3f0a0000},{0x3f0a2000},{0x3f0a4000},{0x3f0a6000},{0x3f0a8000},{0x3f0aa000},{0x3f0ac000},{0x3f0ae000},{0x3f0b0000},{0x3f0b2000},{0x3f0b4000},{0x3f0b6000},{0x3f0b8000},{0x3f0ba000},{0x3f0bc000},{0x3f0be000}, -{0x3f0c0000},{0x3f0c2000},{0x3f0c4000},{0x3f0c6000},{0x3f0c8000},{0x3f0ca000},{0x3f0cc000},{0x3f0ce000},{0x3f0d0000},{0x3f0d2000},{0x3f0d4000},{0x3f0d6000},{0x3f0d8000},{0x3f0da000},{0x3f0dc000},{0x3f0de000},{0x3f0e0000},{0x3f0e2000},{0x3f0e4000},{0x3f0e6000},{0x3f0e8000},{0x3f0ea000},{0x3f0ec000},{0x3f0ee000},{0x3f0f0000},{0x3f0f2000},{0x3f0f4000},{0x3f0f6000},{0x3f0f8000},{0x3f0fa000},{0x3f0fc000},{0x3f0fe000}, -{0x3f100000},{0x3f102000},{0x3f104000},{0x3f106000},{0x3f108000},{0x3f10a000},{0x3f10c000},{0x3f10e000},{0x3f110000},{0x3f112000},{0x3f114000},{0x3f116000},{0x3f118000},{0x3f11a000},{0x3f11c000},{0x3f11e000},{0x3f120000},{0x3f122000},{0x3f124000},{0x3f126000},{0x3f128000},{0x3f12a000},{0x3f12c000},{0x3f12e000},{0x3f130000},{0x3f132000},{0x3f134000},{0x3f136000},{0x3f138000},{0x3f13a000},{0x3f13c000},{0x3f13e000}, -{0x3f140000},{0x3f142000},{0x3f144000},{0x3f146000},{0x3f148000},{0x3f14a000},{0x3f14c000},{0x3f14e000},{0x3f150000},{0x3f152000},{0x3f154000},{0x3f156000},{0x3f158000},{0x3f15a000},{0x3f15c000},{0x3f15e000},{0x3f160000},{0x3f162000},{0x3f164000},{0x3f166000},{0x3f168000},{0x3f16a000},{0x3f16c000},{0x3f16e000},{0x3f170000},{0x3f172000},{0x3f174000},{0x3f176000},{0x3f178000},{0x3f17a000},{0x3f17c000},{0x3f17e000}, -{0x3f180000},{0x3f182000},{0x3f184000},{0x3f186000},{0x3f188000},{0x3f18a000},{0x3f18c000},{0x3f18e000},{0x3f190000},{0x3f192000},{0x3f194000},{0x3f196000},{0x3f198000},{0x3f19a000},{0x3f19c000},{0x3f19e000},{0x3f1a0000},{0x3f1a2000},{0x3f1a4000},{0x3f1a6000},{0x3f1a8000},{0x3f1aa000},{0x3f1ac000},{0x3f1ae000},{0x3f1b0000},{0x3f1b2000},{0x3f1b4000},{0x3f1b6000},{0x3f1b8000},{0x3f1ba000},{0x3f1bc000},{0x3f1be000}, -{0x3f1c0000},{0x3f1c2000},{0x3f1c4000},{0x3f1c6000},{0x3f1c8000},{0x3f1ca000},{0x3f1cc000},{0x3f1ce000},{0x3f1d0000},{0x3f1d2000},{0x3f1d4000},{0x3f1d6000},{0x3f1d8000},{0x3f1da000},{0x3f1dc000},{0x3f1de000},{0x3f1e0000},{0x3f1e2000},{0x3f1e4000},{0x3f1e6000},{0x3f1e8000},{0x3f1ea000},{0x3f1ec000},{0x3f1ee000},{0x3f1f0000},{0x3f1f2000},{0x3f1f4000},{0x3f1f6000},{0x3f1f8000},{0x3f1fa000},{0x3f1fc000},{0x3f1fe000}, -{0x3f200000},{0x3f202000},{0x3f204000},{0x3f206000},{0x3f208000},{0x3f20a000},{0x3f20c000},{0x3f20e000},{0x3f210000},{0x3f212000},{0x3f214000},{0x3f216000},{0x3f218000},{0x3f21a000},{0x3f21c000},{0x3f21e000},{0x3f220000},{0x3f222000},{0x3f224000},{0x3f226000},{0x3f228000},{0x3f22a000},{0x3f22c000},{0x3f22e000},{0x3f230000},{0x3f232000},{0x3f234000},{0x3f236000},{0x3f238000},{0x3f23a000},{0x3f23c000},{0x3f23e000}, -{0x3f240000},{0x3f242000},{0x3f244000},{0x3f246000},{0x3f248000},{0x3f24a000},{0x3f24c000},{0x3f24e000},{0x3f250000},{0x3f252000},{0x3f254000},{0x3f256000},{0x3f258000},{0x3f25a000},{0x3f25c000},{0x3f25e000},{0x3f260000},{0x3f262000},{0x3f264000},{0x3f266000},{0x3f268000},{0x3f26a000},{0x3f26c000},{0x3f26e000},{0x3f270000},{0x3f272000},{0x3f274000},{0x3f276000},{0x3f278000},{0x3f27a000},{0x3f27c000},{0x3f27e000}, -{0x3f280000},{0x3f282000},{0x3f284000},{0x3f286000},{0x3f288000},{0x3f28a000},{0x3f28c000},{0x3f28e000},{0x3f290000},{0x3f292000},{0x3f294000},{0x3f296000},{0x3f298000},{0x3f29a000},{0x3f29c000},{0x3f29e000},{0x3f2a0000},{0x3f2a2000},{0x3f2a4000},{0x3f2a6000},{0x3f2a8000},{0x3f2aa000},{0x3f2ac000},{0x3f2ae000},{0x3f2b0000},{0x3f2b2000},{0x3f2b4000},{0x3f2b6000},{0x3f2b8000},{0x3f2ba000},{0x3f2bc000},{0x3f2be000}, -{0x3f2c0000},{0x3f2c2000},{0x3f2c4000},{0x3f2c6000},{0x3f2c8000},{0x3f2ca000},{0x3f2cc000},{0x3f2ce000},{0x3f2d0000},{0x3f2d2000},{0x3f2d4000},{0x3f2d6000},{0x3f2d8000},{0x3f2da000},{0x3f2dc000},{0x3f2de000},{0x3f2e0000},{0x3f2e2000},{0x3f2e4000},{0x3f2e6000},{0x3f2e8000},{0x3f2ea000},{0x3f2ec000},{0x3f2ee000},{0x3f2f0000},{0x3f2f2000},{0x3f2f4000},{0x3f2f6000},{0x3f2f8000},{0x3f2fa000},{0x3f2fc000},{0x3f2fe000}, -{0x3f300000},{0x3f302000},{0x3f304000},{0x3f306000},{0x3f308000},{0x3f30a000},{0x3f30c000},{0x3f30e000},{0x3f310000},{0x3f312000},{0x3f314000},{0x3f316000},{0x3f318000},{0x3f31a000},{0x3f31c000},{0x3f31e000},{0x3f320000},{0x3f322000},{0x3f324000},{0x3f326000},{0x3f328000},{0x3f32a000},{0x3f32c000},{0x3f32e000},{0x3f330000},{0x3f332000},{0x3f334000},{0x3f336000},{0x3f338000},{0x3f33a000},{0x3f33c000},{0x3f33e000}, -{0x3f340000},{0x3f342000},{0x3f344000},{0x3f346000},{0x3f348000},{0x3f34a000},{0x3f34c000},{0x3f34e000},{0x3f350000},{0x3f352000},{0x3f354000},{0x3f356000},{0x3f358000},{0x3f35a000},{0x3f35c000},{0x3f35e000},{0x3f360000},{0x3f362000},{0x3f364000},{0x3f366000},{0x3f368000},{0x3f36a000},{0x3f36c000},{0x3f36e000},{0x3f370000},{0x3f372000},{0x3f374000},{0x3f376000},{0x3f378000},{0x3f37a000},{0x3f37c000},{0x3f37e000}, -{0x3f380000},{0x3f382000},{0x3f384000},{0x3f386000},{0x3f388000},{0x3f38a000},{0x3f38c000},{0x3f38e000},{0x3f390000},{0x3f392000},{0x3f394000},{0x3f396000},{0x3f398000},{0x3f39a000},{0x3f39c000},{0x3f39e000},{0x3f3a0000},{0x3f3a2000},{0x3f3a4000},{0x3f3a6000},{0x3f3a8000},{0x3f3aa000},{0x3f3ac000},{0x3f3ae000},{0x3f3b0000},{0x3f3b2000},{0x3f3b4000},{0x3f3b6000},{0x3f3b8000},{0x3f3ba000},{0x3f3bc000},{0x3f3be000}, -{0x3f3c0000},{0x3f3c2000},{0x3f3c4000},{0x3f3c6000},{0x3f3c8000},{0x3f3ca000},{0x3f3cc000},{0x3f3ce000},{0x3f3d0000},{0x3f3d2000},{0x3f3d4000},{0x3f3d6000},{0x3f3d8000},{0x3f3da000},{0x3f3dc000},{0x3f3de000},{0x3f3e0000},{0x3f3e2000},{0x3f3e4000},{0x3f3e6000},{0x3f3e8000},{0x3f3ea000},{0x3f3ec000},{0x3f3ee000},{0x3f3f0000},{0x3f3f2000},{0x3f3f4000},{0x3f3f6000},{0x3f3f8000},{0x3f3fa000},{0x3f3fc000},{0x3f3fe000}, -{0x3f400000},{0x3f402000},{0x3f404000},{0x3f406000},{0x3f408000},{0x3f40a000},{0x3f40c000},{0x3f40e000},{0x3f410000},{0x3f412000},{0x3f414000},{0x3f416000},{0x3f418000},{0x3f41a000},{0x3f41c000},{0x3f41e000},{0x3f420000},{0x3f422000},{0x3f424000},{0x3f426000},{0x3f428000},{0x3f42a000},{0x3f42c000},{0x3f42e000},{0x3f430000},{0x3f432000},{0x3f434000},{0x3f436000},{0x3f438000},{0x3f43a000},{0x3f43c000},{0x3f43e000}, -{0x3f440000},{0x3f442000},{0x3f444000},{0x3f446000},{0x3f448000},{0x3f44a000},{0x3f44c000},{0x3f44e000},{0x3f450000},{0x3f452000},{0x3f454000},{0x3f456000},{0x3f458000},{0x3f45a000},{0x3f45c000},{0x3f45e000},{0x3f460000},{0x3f462000},{0x3f464000},{0x3f466000},{0x3f468000},{0x3f46a000},{0x3f46c000},{0x3f46e000},{0x3f470000},{0x3f472000},{0x3f474000},{0x3f476000},{0x3f478000},{0x3f47a000},{0x3f47c000},{0x3f47e000}, -{0x3f480000},{0x3f482000},{0x3f484000},{0x3f486000},{0x3f488000},{0x3f48a000},{0x3f48c000},{0x3f48e000},{0x3f490000},{0x3f492000},{0x3f494000},{0x3f496000},{0x3f498000},{0x3f49a000},{0x3f49c000},{0x3f49e000},{0x3f4a0000},{0x3f4a2000},{0x3f4a4000},{0x3f4a6000},{0x3f4a8000},{0x3f4aa000},{0x3f4ac000},{0x3f4ae000},{0x3f4b0000},{0x3f4b2000},{0x3f4b4000},{0x3f4b6000},{0x3f4b8000},{0x3f4ba000},{0x3f4bc000},{0x3f4be000}, -{0x3f4c0000},{0x3f4c2000},{0x3f4c4000},{0x3f4c6000},{0x3f4c8000},{0x3f4ca000},{0x3f4cc000},{0x3f4ce000},{0x3f4d0000},{0x3f4d2000},{0x3f4d4000},{0x3f4d6000},{0x3f4d8000},{0x3f4da000},{0x3f4dc000},{0x3f4de000},{0x3f4e0000},{0x3f4e2000},{0x3f4e4000},{0x3f4e6000},{0x3f4e8000},{0x3f4ea000},{0x3f4ec000},{0x3f4ee000},{0x3f4f0000},{0x3f4f2000},{0x3f4f4000},{0x3f4f6000},{0x3f4f8000},{0x3f4fa000},{0x3f4fc000},{0x3f4fe000}, -{0x3f500000},{0x3f502000},{0x3f504000},{0x3f506000},{0x3f508000},{0x3f50a000},{0x3f50c000},{0x3f50e000},{0x3f510000},{0x3f512000},{0x3f514000},{0x3f516000},{0x3f518000},{0x3f51a000},{0x3f51c000},{0x3f51e000},{0x3f520000},{0x3f522000},{0x3f524000},{0x3f526000},{0x3f528000},{0x3f52a000},{0x3f52c000},{0x3f52e000},{0x3f530000},{0x3f532000},{0x3f534000},{0x3f536000},{0x3f538000},{0x3f53a000},{0x3f53c000},{0x3f53e000}, -{0x3f540000},{0x3f542000},{0x3f544000},{0x3f546000},{0x3f548000},{0x3f54a000},{0x3f54c000},{0x3f54e000},{0x3f550000},{0x3f552000},{0x3f554000},{0x3f556000},{0x3f558000},{0x3f55a000},{0x3f55c000},{0x3f55e000},{0x3f560000},{0x3f562000},{0x3f564000},{0x3f566000},{0x3f568000},{0x3f56a000},{0x3f56c000},{0x3f56e000},{0x3f570000},{0x3f572000},{0x3f574000},{0x3f576000},{0x3f578000},{0x3f57a000},{0x3f57c000},{0x3f57e000}, -{0x3f580000},{0x3f582000},{0x3f584000},{0x3f586000},{0x3f588000},{0x3f58a000},{0x3f58c000},{0x3f58e000},{0x3f590000},{0x3f592000},{0x3f594000},{0x3f596000},{0x3f598000},{0x3f59a000},{0x3f59c000},{0x3f59e000},{0x3f5a0000},{0x3f5a2000},{0x3f5a4000},{0x3f5a6000},{0x3f5a8000},{0x3f5aa000},{0x3f5ac000},{0x3f5ae000},{0x3f5b0000},{0x3f5b2000},{0x3f5b4000},{0x3f5b6000},{0x3f5b8000},{0x3f5ba000},{0x3f5bc000},{0x3f5be000}, -{0x3f5c0000},{0x3f5c2000},{0x3f5c4000},{0x3f5c6000},{0x3f5c8000},{0x3f5ca000},{0x3f5cc000},{0x3f5ce000},{0x3f5d0000},{0x3f5d2000},{0x3f5d4000},{0x3f5d6000},{0x3f5d8000},{0x3f5da000},{0x3f5dc000},{0x3f5de000},{0x3f5e0000},{0x3f5e2000},{0x3f5e4000},{0x3f5e6000},{0x3f5e8000},{0x3f5ea000},{0x3f5ec000},{0x3f5ee000},{0x3f5f0000},{0x3f5f2000},{0x3f5f4000},{0x3f5f6000},{0x3f5f8000},{0x3f5fa000},{0x3f5fc000},{0x3f5fe000}, -{0x3f600000},{0x3f602000},{0x3f604000},{0x3f606000},{0x3f608000},{0x3f60a000},{0x3f60c000},{0x3f60e000},{0x3f610000},{0x3f612000},{0x3f614000},{0x3f616000},{0x3f618000},{0x3f61a000},{0x3f61c000},{0x3f61e000},{0x3f620000},{0x3f622000},{0x3f624000},{0x3f626000},{0x3f628000},{0x3f62a000},{0x3f62c000},{0x3f62e000},{0x3f630000},{0x3f632000},{0x3f634000},{0x3f636000},{0x3f638000},{0x3f63a000},{0x3f63c000},{0x3f63e000}, -{0x3f640000},{0x3f642000},{0x3f644000},{0x3f646000},{0x3f648000},{0x3f64a000},{0x3f64c000},{0x3f64e000},{0x3f650000},{0x3f652000},{0x3f654000},{0x3f656000},{0x3f658000},{0x3f65a000},{0x3f65c000},{0x3f65e000},{0x3f660000},{0x3f662000},{0x3f664000},{0x3f666000},{0x3f668000},{0x3f66a000},{0x3f66c000},{0x3f66e000},{0x3f670000},{0x3f672000},{0x3f674000},{0x3f676000},{0x3f678000},{0x3f67a000},{0x3f67c000},{0x3f67e000}, -{0x3f680000},{0x3f682000},{0x3f684000},{0x3f686000},{0x3f688000},{0x3f68a000},{0x3f68c000},{0x3f68e000},{0x3f690000},{0x3f692000},{0x3f694000},{0x3f696000},{0x3f698000},{0x3f69a000},{0x3f69c000},{0x3f69e000},{0x3f6a0000},{0x3f6a2000},{0x3f6a4000},{0x3f6a6000},{0x3f6a8000},{0x3f6aa000},{0x3f6ac000},{0x3f6ae000},{0x3f6b0000},{0x3f6b2000},{0x3f6b4000},{0x3f6b6000},{0x3f6b8000},{0x3f6ba000},{0x3f6bc000},{0x3f6be000}, -{0x3f6c0000},{0x3f6c2000},{0x3f6c4000},{0x3f6c6000},{0x3f6c8000},{0x3f6ca000},{0x3f6cc000},{0x3f6ce000},{0x3f6d0000},{0x3f6d2000},{0x3f6d4000},{0x3f6d6000},{0x3f6d8000},{0x3f6da000},{0x3f6dc000},{0x3f6de000},{0x3f6e0000},{0x3f6e2000},{0x3f6e4000},{0x3f6e6000},{0x3f6e8000},{0x3f6ea000},{0x3f6ec000},{0x3f6ee000},{0x3f6f0000},{0x3f6f2000},{0x3f6f4000},{0x3f6f6000},{0x3f6f8000},{0x3f6fa000},{0x3f6fc000},{0x3f6fe000}, -{0x3f700000},{0x3f702000},{0x3f704000},{0x3f706000},{0x3f708000},{0x3f70a000},{0x3f70c000},{0x3f70e000},{0x3f710000},{0x3f712000},{0x3f714000},{0x3f716000},{0x3f718000},{0x3f71a000},{0x3f71c000},{0x3f71e000},{0x3f720000},{0x3f722000},{0x3f724000},{0x3f726000},{0x3f728000},{0x3f72a000},{0x3f72c000},{0x3f72e000},{0x3f730000},{0x3f732000},{0x3f734000},{0x3f736000},{0x3f738000},{0x3f73a000},{0x3f73c000},{0x3f73e000}, -{0x3f740000},{0x3f742000},{0x3f744000},{0x3f746000},{0x3f748000},{0x3f74a000},{0x3f74c000},{0x3f74e000},{0x3f750000},{0x3f752000},{0x3f754000},{0x3f756000},{0x3f758000},{0x3f75a000},{0x3f75c000},{0x3f75e000},{0x3f760000},{0x3f762000},{0x3f764000},{0x3f766000},{0x3f768000},{0x3f76a000},{0x3f76c000},{0x3f76e000},{0x3f770000},{0x3f772000},{0x3f774000},{0x3f776000},{0x3f778000},{0x3f77a000},{0x3f77c000},{0x3f77e000}, -{0x3f780000},{0x3f782000},{0x3f784000},{0x3f786000},{0x3f788000},{0x3f78a000},{0x3f78c000},{0x3f78e000},{0x3f790000},{0x3f792000},{0x3f794000},{0x3f796000},{0x3f798000},{0x3f79a000},{0x3f79c000},{0x3f79e000},{0x3f7a0000},{0x3f7a2000},{0x3f7a4000},{0x3f7a6000},{0x3f7a8000},{0x3f7aa000},{0x3f7ac000},{0x3f7ae000},{0x3f7b0000},{0x3f7b2000},{0x3f7b4000},{0x3f7b6000},{0x3f7b8000},{0x3f7ba000},{0x3f7bc000},{0x3f7be000}, -{0x3f7c0000},{0x3f7c2000},{0x3f7c4000},{0x3f7c6000},{0x3f7c8000},{0x3f7ca000},{0x3f7cc000},{0x3f7ce000},{0x3f7d0000},{0x3f7d2000},{0x3f7d4000},{0x3f7d6000},{0x3f7d8000},{0x3f7da000},{0x3f7dc000},{0x3f7de000},{0x3f7e0000},{0x3f7e2000},{0x3f7e4000},{0x3f7e6000},{0x3f7e8000},{0x3f7ea000},{0x3f7ec000},{0x3f7ee000},{0x3f7f0000},{0x3f7f2000},{0x3f7f4000},{0x3f7f6000},{0x3f7f8000},{0x3f7fa000},{0x3f7fc000},{0x3f7fe000}, -{0x3f800000},{0x3f802000},{0x3f804000},{0x3f806000},{0x3f808000},{0x3f80a000},{0x3f80c000},{0x3f80e000},{0x3f810000},{0x3f812000},{0x3f814000},{0x3f816000},{0x3f818000},{0x3f81a000},{0x3f81c000},{0x3f81e000},{0x3f820000},{0x3f822000},{0x3f824000},{0x3f826000},{0x3f828000},{0x3f82a000},{0x3f82c000},{0x3f82e000},{0x3f830000},{0x3f832000},{0x3f834000},{0x3f836000},{0x3f838000},{0x3f83a000},{0x3f83c000},{0x3f83e000}, -{0x3f840000},{0x3f842000},{0x3f844000},{0x3f846000},{0x3f848000},{0x3f84a000},{0x3f84c000},{0x3f84e000},{0x3f850000},{0x3f852000},{0x3f854000},{0x3f856000},{0x3f858000},{0x3f85a000},{0x3f85c000},{0x3f85e000},{0x3f860000},{0x3f862000},{0x3f864000},{0x3f866000},{0x3f868000},{0x3f86a000},{0x3f86c000},{0x3f86e000},{0x3f870000},{0x3f872000},{0x3f874000},{0x3f876000},{0x3f878000},{0x3f87a000},{0x3f87c000},{0x3f87e000}, -{0x3f880000},{0x3f882000},{0x3f884000},{0x3f886000},{0x3f888000},{0x3f88a000},{0x3f88c000},{0x3f88e000},{0x3f890000},{0x3f892000},{0x3f894000},{0x3f896000},{0x3f898000},{0x3f89a000},{0x3f89c000},{0x3f89e000},{0x3f8a0000},{0x3f8a2000},{0x3f8a4000},{0x3f8a6000},{0x3f8a8000},{0x3f8aa000},{0x3f8ac000},{0x3f8ae000},{0x3f8b0000},{0x3f8b2000},{0x3f8b4000},{0x3f8b6000},{0x3f8b8000},{0x3f8ba000},{0x3f8bc000},{0x3f8be000}, -{0x3f8c0000},{0x3f8c2000},{0x3f8c4000},{0x3f8c6000},{0x3f8c8000},{0x3f8ca000},{0x3f8cc000},{0x3f8ce000},{0x3f8d0000},{0x3f8d2000},{0x3f8d4000},{0x3f8d6000},{0x3f8d8000},{0x3f8da000},{0x3f8dc000},{0x3f8de000},{0x3f8e0000},{0x3f8e2000},{0x3f8e4000},{0x3f8e6000},{0x3f8e8000},{0x3f8ea000},{0x3f8ec000},{0x3f8ee000},{0x3f8f0000},{0x3f8f2000},{0x3f8f4000},{0x3f8f6000},{0x3f8f8000},{0x3f8fa000},{0x3f8fc000},{0x3f8fe000}, -{0x3f900000},{0x3f902000},{0x3f904000},{0x3f906000},{0x3f908000},{0x3f90a000},{0x3f90c000},{0x3f90e000},{0x3f910000},{0x3f912000},{0x3f914000},{0x3f916000},{0x3f918000},{0x3f91a000},{0x3f91c000},{0x3f91e000},{0x3f920000},{0x3f922000},{0x3f924000},{0x3f926000},{0x3f928000},{0x3f92a000},{0x3f92c000},{0x3f92e000},{0x3f930000},{0x3f932000},{0x3f934000},{0x3f936000},{0x3f938000},{0x3f93a000},{0x3f93c000},{0x3f93e000}, -{0x3f940000},{0x3f942000},{0x3f944000},{0x3f946000},{0x3f948000},{0x3f94a000},{0x3f94c000},{0x3f94e000},{0x3f950000},{0x3f952000},{0x3f954000},{0x3f956000},{0x3f958000},{0x3f95a000},{0x3f95c000},{0x3f95e000},{0x3f960000},{0x3f962000},{0x3f964000},{0x3f966000},{0x3f968000},{0x3f96a000},{0x3f96c000},{0x3f96e000},{0x3f970000},{0x3f972000},{0x3f974000},{0x3f976000},{0x3f978000},{0x3f97a000},{0x3f97c000},{0x3f97e000}, -{0x3f980000},{0x3f982000},{0x3f984000},{0x3f986000},{0x3f988000},{0x3f98a000},{0x3f98c000},{0x3f98e000},{0x3f990000},{0x3f992000},{0x3f994000},{0x3f996000},{0x3f998000},{0x3f99a000},{0x3f99c000},{0x3f99e000},{0x3f9a0000},{0x3f9a2000},{0x3f9a4000},{0x3f9a6000},{0x3f9a8000},{0x3f9aa000},{0x3f9ac000},{0x3f9ae000},{0x3f9b0000},{0x3f9b2000},{0x3f9b4000},{0x3f9b6000},{0x3f9b8000},{0x3f9ba000},{0x3f9bc000},{0x3f9be000}, -{0x3f9c0000},{0x3f9c2000},{0x3f9c4000},{0x3f9c6000},{0x3f9c8000},{0x3f9ca000},{0x3f9cc000},{0x3f9ce000},{0x3f9d0000},{0x3f9d2000},{0x3f9d4000},{0x3f9d6000},{0x3f9d8000},{0x3f9da000},{0x3f9dc000},{0x3f9de000},{0x3f9e0000},{0x3f9e2000},{0x3f9e4000},{0x3f9e6000},{0x3f9e8000},{0x3f9ea000},{0x3f9ec000},{0x3f9ee000},{0x3f9f0000},{0x3f9f2000},{0x3f9f4000},{0x3f9f6000},{0x3f9f8000},{0x3f9fa000},{0x3f9fc000},{0x3f9fe000}, -{0x3fa00000},{0x3fa02000},{0x3fa04000},{0x3fa06000},{0x3fa08000},{0x3fa0a000},{0x3fa0c000},{0x3fa0e000},{0x3fa10000},{0x3fa12000},{0x3fa14000},{0x3fa16000},{0x3fa18000},{0x3fa1a000},{0x3fa1c000},{0x3fa1e000},{0x3fa20000},{0x3fa22000},{0x3fa24000},{0x3fa26000},{0x3fa28000},{0x3fa2a000},{0x3fa2c000},{0x3fa2e000},{0x3fa30000},{0x3fa32000},{0x3fa34000},{0x3fa36000},{0x3fa38000},{0x3fa3a000},{0x3fa3c000},{0x3fa3e000}, -{0x3fa40000},{0x3fa42000},{0x3fa44000},{0x3fa46000},{0x3fa48000},{0x3fa4a000},{0x3fa4c000},{0x3fa4e000},{0x3fa50000},{0x3fa52000},{0x3fa54000},{0x3fa56000},{0x3fa58000},{0x3fa5a000},{0x3fa5c000},{0x3fa5e000},{0x3fa60000},{0x3fa62000},{0x3fa64000},{0x3fa66000},{0x3fa68000},{0x3fa6a000},{0x3fa6c000},{0x3fa6e000},{0x3fa70000},{0x3fa72000},{0x3fa74000},{0x3fa76000},{0x3fa78000},{0x3fa7a000},{0x3fa7c000},{0x3fa7e000}, -{0x3fa80000},{0x3fa82000},{0x3fa84000},{0x3fa86000},{0x3fa88000},{0x3fa8a000},{0x3fa8c000},{0x3fa8e000},{0x3fa90000},{0x3fa92000},{0x3fa94000},{0x3fa96000},{0x3fa98000},{0x3fa9a000},{0x3fa9c000},{0x3fa9e000},{0x3faa0000},{0x3faa2000},{0x3faa4000},{0x3faa6000},{0x3faa8000},{0x3faaa000},{0x3faac000},{0x3faae000},{0x3fab0000},{0x3fab2000},{0x3fab4000},{0x3fab6000},{0x3fab8000},{0x3faba000},{0x3fabc000},{0x3fabe000}, -{0x3fac0000},{0x3fac2000},{0x3fac4000},{0x3fac6000},{0x3fac8000},{0x3faca000},{0x3facc000},{0x3face000},{0x3fad0000},{0x3fad2000},{0x3fad4000},{0x3fad6000},{0x3fad8000},{0x3fada000},{0x3fadc000},{0x3fade000},{0x3fae0000},{0x3fae2000},{0x3fae4000},{0x3fae6000},{0x3fae8000},{0x3faea000},{0x3faec000},{0x3faee000},{0x3faf0000},{0x3faf2000},{0x3faf4000},{0x3faf6000},{0x3faf8000},{0x3fafa000},{0x3fafc000},{0x3fafe000}, -{0x3fb00000},{0x3fb02000},{0x3fb04000},{0x3fb06000},{0x3fb08000},{0x3fb0a000},{0x3fb0c000},{0x3fb0e000},{0x3fb10000},{0x3fb12000},{0x3fb14000},{0x3fb16000},{0x3fb18000},{0x3fb1a000},{0x3fb1c000},{0x3fb1e000},{0x3fb20000},{0x3fb22000},{0x3fb24000},{0x3fb26000},{0x3fb28000},{0x3fb2a000},{0x3fb2c000},{0x3fb2e000},{0x3fb30000},{0x3fb32000},{0x3fb34000},{0x3fb36000},{0x3fb38000},{0x3fb3a000},{0x3fb3c000},{0x3fb3e000}, -{0x3fb40000},{0x3fb42000},{0x3fb44000},{0x3fb46000},{0x3fb48000},{0x3fb4a000},{0x3fb4c000},{0x3fb4e000},{0x3fb50000},{0x3fb52000},{0x3fb54000},{0x3fb56000},{0x3fb58000},{0x3fb5a000},{0x3fb5c000},{0x3fb5e000},{0x3fb60000},{0x3fb62000},{0x3fb64000},{0x3fb66000},{0x3fb68000},{0x3fb6a000},{0x3fb6c000},{0x3fb6e000},{0x3fb70000},{0x3fb72000},{0x3fb74000},{0x3fb76000},{0x3fb78000},{0x3fb7a000},{0x3fb7c000},{0x3fb7e000}, -{0x3fb80000},{0x3fb82000},{0x3fb84000},{0x3fb86000},{0x3fb88000},{0x3fb8a000},{0x3fb8c000},{0x3fb8e000},{0x3fb90000},{0x3fb92000},{0x3fb94000},{0x3fb96000},{0x3fb98000},{0x3fb9a000},{0x3fb9c000},{0x3fb9e000},{0x3fba0000},{0x3fba2000},{0x3fba4000},{0x3fba6000},{0x3fba8000},{0x3fbaa000},{0x3fbac000},{0x3fbae000},{0x3fbb0000},{0x3fbb2000},{0x3fbb4000},{0x3fbb6000},{0x3fbb8000},{0x3fbba000},{0x3fbbc000},{0x3fbbe000}, -{0x3fbc0000},{0x3fbc2000},{0x3fbc4000},{0x3fbc6000},{0x3fbc8000},{0x3fbca000},{0x3fbcc000},{0x3fbce000},{0x3fbd0000},{0x3fbd2000},{0x3fbd4000},{0x3fbd6000},{0x3fbd8000},{0x3fbda000},{0x3fbdc000},{0x3fbde000},{0x3fbe0000},{0x3fbe2000},{0x3fbe4000},{0x3fbe6000},{0x3fbe8000},{0x3fbea000},{0x3fbec000},{0x3fbee000},{0x3fbf0000},{0x3fbf2000},{0x3fbf4000},{0x3fbf6000},{0x3fbf8000},{0x3fbfa000},{0x3fbfc000},{0x3fbfe000}, -{0x3fc00000},{0x3fc02000},{0x3fc04000},{0x3fc06000},{0x3fc08000},{0x3fc0a000},{0x3fc0c000},{0x3fc0e000},{0x3fc10000},{0x3fc12000},{0x3fc14000},{0x3fc16000},{0x3fc18000},{0x3fc1a000},{0x3fc1c000},{0x3fc1e000},{0x3fc20000},{0x3fc22000},{0x3fc24000},{0x3fc26000},{0x3fc28000},{0x3fc2a000},{0x3fc2c000},{0x3fc2e000},{0x3fc30000},{0x3fc32000},{0x3fc34000},{0x3fc36000},{0x3fc38000},{0x3fc3a000},{0x3fc3c000},{0x3fc3e000}, -{0x3fc40000},{0x3fc42000},{0x3fc44000},{0x3fc46000},{0x3fc48000},{0x3fc4a000},{0x3fc4c000},{0x3fc4e000},{0x3fc50000},{0x3fc52000},{0x3fc54000},{0x3fc56000},{0x3fc58000},{0x3fc5a000},{0x3fc5c000},{0x3fc5e000},{0x3fc60000},{0x3fc62000},{0x3fc64000},{0x3fc66000},{0x3fc68000},{0x3fc6a000},{0x3fc6c000},{0x3fc6e000},{0x3fc70000},{0x3fc72000},{0x3fc74000},{0x3fc76000},{0x3fc78000},{0x3fc7a000},{0x3fc7c000},{0x3fc7e000}, -{0x3fc80000},{0x3fc82000},{0x3fc84000},{0x3fc86000},{0x3fc88000},{0x3fc8a000},{0x3fc8c000},{0x3fc8e000},{0x3fc90000},{0x3fc92000},{0x3fc94000},{0x3fc96000},{0x3fc98000},{0x3fc9a000},{0x3fc9c000},{0x3fc9e000},{0x3fca0000},{0x3fca2000},{0x3fca4000},{0x3fca6000},{0x3fca8000},{0x3fcaa000},{0x3fcac000},{0x3fcae000},{0x3fcb0000},{0x3fcb2000},{0x3fcb4000},{0x3fcb6000},{0x3fcb8000},{0x3fcba000},{0x3fcbc000},{0x3fcbe000}, -{0x3fcc0000},{0x3fcc2000},{0x3fcc4000},{0x3fcc6000},{0x3fcc8000},{0x3fcca000},{0x3fccc000},{0x3fcce000},{0x3fcd0000},{0x3fcd2000},{0x3fcd4000},{0x3fcd6000},{0x3fcd8000},{0x3fcda000},{0x3fcdc000},{0x3fcde000},{0x3fce0000},{0x3fce2000},{0x3fce4000},{0x3fce6000},{0x3fce8000},{0x3fcea000},{0x3fcec000},{0x3fcee000},{0x3fcf0000},{0x3fcf2000},{0x3fcf4000},{0x3fcf6000},{0x3fcf8000},{0x3fcfa000},{0x3fcfc000},{0x3fcfe000}, -{0x3fd00000},{0x3fd02000},{0x3fd04000},{0x3fd06000},{0x3fd08000},{0x3fd0a000},{0x3fd0c000},{0x3fd0e000},{0x3fd10000},{0x3fd12000},{0x3fd14000},{0x3fd16000},{0x3fd18000},{0x3fd1a000},{0x3fd1c000},{0x3fd1e000},{0x3fd20000},{0x3fd22000},{0x3fd24000},{0x3fd26000},{0x3fd28000},{0x3fd2a000},{0x3fd2c000},{0x3fd2e000},{0x3fd30000},{0x3fd32000},{0x3fd34000},{0x3fd36000},{0x3fd38000},{0x3fd3a000},{0x3fd3c000},{0x3fd3e000}, -{0x3fd40000},{0x3fd42000},{0x3fd44000},{0x3fd46000},{0x3fd48000},{0x3fd4a000},{0x3fd4c000},{0x3fd4e000},{0x3fd50000},{0x3fd52000},{0x3fd54000},{0x3fd56000},{0x3fd58000},{0x3fd5a000},{0x3fd5c000},{0x3fd5e000},{0x3fd60000},{0x3fd62000},{0x3fd64000},{0x3fd66000},{0x3fd68000},{0x3fd6a000},{0x3fd6c000},{0x3fd6e000},{0x3fd70000},{0x3fd72000},{0x3fd74000},{0x3fd76000},{0x3fd78000},{0x3fd7a000},{0x3fd7c000},{0x3fd7e000}, -{0x3fd80000},{0x3fd82000},{0x3fd84000},{0x3fd86000},{0x3fd88000},{0x3fd8a000},{0x3fd8c000},{0x3fd8e000},{0x3fd90000},{0x3fd92000},{0x3fd94000},{0x3fd96000},{0x3fd98000},{0x3fd9a000},{0x3fd9c000},{0x3fd9e000},{0x3fda0000},{0x3fda2000},{0x3fda4000},{0x3fda6000},{0x3fda8000},{0x3fdaa000},{0x3fdac000},{0x3fdae000},{0x3fdb0000},{0x3fdb2000},{0x3fdb4000},{0x3fdb6000},{0x3fdb8000},{0x3fdba000},{0x3fdbc000},{0x3fdbe000}, -{0x3fdc0000},{0x3fdc2000},{0x3fdc4000},{0x3fdc6000},{0x3fdc8000},{0x3fdca000},{0x3fdcc000},{0x3fdce000},{0x3fdd0000},{0x3fdd2000},{0x3fdd4000},{0x3fdd6000},{0x3fdd8000},{0x3fdda000},{0x3fddc000},{0x3fdde000},{0x3fde0000},{0x3fde2000},{0x3fde4000},{0x3fde6000},{0x3fde8000},{0x3fdea000},{0x3fdec000},{0x3fdee000},{0x3fdf0000},{0x3fdf2000},{0x3fdf4000},{0x3fdf6000},{0x3fdf8000},{0x3fdfa000},{0x3fdfc000},{0x3fdfe000}, -{0x3fe00000},{0x3fe02000},{0x3fe04000},{0x3fe06000},{0x3fe08000},{0x3fe0a000},{0x3fe0c000},{0x3fe0e000},{0x3fe10000},{0x3fe12000},{0x3fe14000},{0x3fe16000},{0x3fe18000},{0x3fe1a000},{0x3fe1c000},{0x3fe1e000},{0x3fe20000},{0x3fe22000},{0x3fe24000},{0x3fe26000},{0x3fe28000},{0x3fe2a000},{0x3fe2c000},{0x3fe2e000},{0x3fe30000},{0x3fe32000},{0x3fe34000},{0x3fe36000},{0x3fe38000},{0x3fe3a000},{0x3fe3c000},{0x3fe3e000}, -{0x3fe40000},{0x3fe42000},{0x3fe44000},{0x3fe46000},{0x3fe48000},{0x3fe4a000},{0x3fe4c000},{0x3fe4e000},{0x3fe50000},{0x3fe52000},{0x3fe54000},{0x3fe56000},{0x3fe58000},{0x3fe5a000},{0x3fe5c000},{0x3fe5e000},{0x3fe60000},{0x3fe62000},{0x3fe64000},{0x3fe66000},{0x3fe68000},{0x3fe6a000},{0x3fe6c000},{0x3fe6e000},{0x3fe70000},{0x3fe72000},{0x3fe74000},{0x3fe76000},{0x3fe78000},{0x3fe7a000},{0x3fe7c000},{0x3fe7e000}, -{0x3fe80000},{0x3fe82000},{0x3fe84000},{0x3fe86000},{0x3fe88000},{0x3fe8a000},{0x3fe8c000},{0x3fe8e000},{0x3fe90000},{0x3fe92000},{0x3fe94000},{0x3fe96000},{0x3fe98000},{0x3fe9a000},{0x3fe9c000},{0x3fe9e000},{0x3fea0000},{0x3fea2000},{0x3fea4000},{0x3fea6000},{0x3fea8000},{0x3feaa000},{0x3feac000},{0x3feae000},{0x3feb0000},{0x3feb2000},{0x3feb4000},{0x3feb6000},{0x3feb8000},{0x3feba000},{0x3febc000},{0x3febe000}, -{0x3fec0000},{0x3fec2000},{0x3fec4000},{0x3fec6000},{0x3fec8000},{0x3feca000},{0x3fecc000},{0x3fece000},{0x3fed0000},{0x3fed2000},{0x3fed4000},{0x3fed6000},{0x3fed8000},{0x3feda000},{0x3fedc000},{0x3fede000},{0x3fee0000},{0x3fee2000},{0x3fee4000},{0x3fee6000},{0x3fee8000},{0x3feea000},{0x3feec000},{0x3feee000},{0x3fef0000},{0x3fef2000},{0x3fef4000},{0x3fef6000},{0x3fef8000},{0x3fefa000},{0x3fefc000},{0x3fefe000}, -{0x3ff00000},{0x3ff02000},{0x3ff04000},{0x3ff06000},{0x3ff08000},{0x3ff0a000},{0x3ff0c000},{0x3ff0e000},{0x3ff10000},{0x3ff12000},{0x3ff14000},{0x3ff16000},{0x3ff18000},{0x3ff1a000},{0x3ff1c000},{0x3ff1e000},{0x3ff20000},{0x3ff22000},{0x3ff24000},{0x3ff26000},{0x3ff28000},{0x3ff2a000},{0x3ff2c000},{0x3ff2e000},{0x3ff30000},{0x3ff32000},{0x3ff34000},{0x3ff36000},{0x3ff38000},{0x3ff3a000},{0x3ff3c000},{0x3ff3e000}, -{0x3ff40000},{0x3ff42000},{0x3ff44000},{0x3ff46000},{0x3ff48000},{0x3ff4a000},{0x3ff4c000},{0x3ff4e000},{0x3ff50000},{0x3ff52000},{0x3ff54000},{0x3ff56000},{0x3ff58000},{0x3ff5a000},{0x3ff5c000},{0x3ff5e000},{0x3ff60000},{0x3ff62000},{0x3ff64000},{0x3ff66000},{0x3ff68000},{0x3ff6a000},{0x3ff6c000},{0x3ff6e000},{0x3ff70000},{0x3ff72000},{0x3ff74000},{0x3ff76000},{0x3ff78000},{0x3ff7a000},{0x3ff7c000},{0x3ff7e000}, -{0x3ff80000},{0x3ff82000},{0x3ff84000},{0x3ff86000},{0x3ff88000},{0x3ff8a000},{0x3ff8c000},{0x3ff8e000},{0x3ff90000},{0x3ff92000},{0x3ff94000},{0x3ff96000},{0x3ff98000},{0x3ff9a000},{0x3ff9c000},{0x3ff9e000},{0x3ffa0000},{0x3ffa2000},{0x3ffa4000},{0x3ffa6000},{0x3ffa8000},{0x3ffaa000},{0x3ffac000},{0x3ffae000},{0x3ffb0000},{0x3ffb2000},{0x3ffb4000},{0x3ffb6000},{0x3ffb8000},{0x3ffba000},{0x3ffbc000},{0x3ffbe000}, -{0x3ffc0000},{0x3ffc2000},{0x3ffc4000},{0x3ffc6000},{0x3ffc8000},{0x3ffca000},{0x3ffcc000},{0x3ffce000},{0x3ffd0000},{0x3ffd2000},{0x3ffd4000},{0x3ffd6000},{0x3ffd8000},{0x3ffda000},{0x3ffdc000},{0x3ffde000},{0x3ffe0000},{0x3ffe2000},{0x3ffe4000},{0x3ffe6000},{0x3ffe8000},{0x3ffea000},{0x3ffec000},{0x3ffee000},{0x3fff0000},{0x3fff2000},{0x3fff4000},{0x3fff6000},{0x3fff8000},{0x3fffa000},{0x3fffc000},{0x3fffe000}, -{0x40000000},{0x40002000},{0x40004000},{0x40006000},{0x40008000},{0x4000a000},{0x4000c000},{0x4000e000},{0x40010000},{0x40012000},{0x40014000},{0x40016000},{0x40018000},{0x4001a000},{0x4001c000},{0x4001e000},{0x40020000},{0x40022000},{0x40024000},{0x40026000},{0x40028000},{0x4002a000},{0x4002c000},{0x4002e000},{0x40030000},{0x40032000},{0x40034000},{0x40036000},{0x40038000},{0x4003a000},{0x4003c000},{0x4003e000}, -{0x40040000},{0x40042000},{0x40044000},{0x40046000},{0x40048000},{0x4004a000},{0x4004c000},{0x4004e000},{0x40050000},{0x40052000},{0x40054000},{0x40056000},{0x40058000},{0x4005a000},{0x4005c000},{0x4005e000},{0x40060000},{0x40062000},{0x40064000},{0x40066000},{0x40068000},{0x4006a000},{0x4006c000},{0x4006e000},{0x40070000},{0x40072000},{0x40074000},{0x40076000},{0x40078000},{0x4007a000},{0x4007c000},{0x4007e000}, -{0x40080000},{0x40082000},{0x40084000},{0x40086000},{0x40088000},{0x4008a000},{0x4008c000},{0x4008e000},{0x40090000},{0x40092000},{0x40094000},{0x40096000},{0x40098000},{0x4009a000},{0x4009c000},{0x4009e000},{0x400a0000},{0x400a2000},{0x400a4000},{0x400a6000},{0x400a8000},{0x400aa000},{0x400ac000},{0x400ae000},{0x400b0000},{0x400b2000},{0x400b4000},{0x400b6000},{0x400b8000},{0x400ba000},{0x400bc000},{0x400be000}, -{0x400c0000},{0x400c2000},{0x400c4000},{0x400c6000},{0x400c8000},{0x400ca000},{0x400cc000},{0x400ce000},{0x400d0000},{0x400d2000},{0x400d4000},{0x400d6000},{0x400d8000},{0x400da000},{0x400dc000},{0x400de000},{0x400e0000},{0x400e2000},{0x400e4000},{0x400e6000},{0x400e8000},{0x400ea000},{0x400ec000},{0x400ee000},{0x400f0000},{0x400f2000},{0x400f4000},{0x400f6000},{0x400f8000},{0x400fa000},{0x400fc000},{0x400fe000}, -{0x40100000},{0x40102000},{0x40104000},{0x40106000},{0x40108000},{0x4010a000},{0x4010c000},{0x4010e000},{0x40110000},{0x40112000},{0x40114000},{0x40116000},{0x40118000},{0x4011a000},{0x4011c000},{0x4011e000},{0x40120000},{0x40122000},{0x40124000},{0x40126000},{0x40128000},{0x4012a000},{0x4012c000},{0x4012e000},{0x40130000},{0x40132000},{0x40134000},{0x40136000},{0x40138000},{0x4013a000},{0x4013c000},{0x4013e000}, -{0x40140000},{0x40142000},{0x40144000},{0x40146000},{0x40148000},{0x4014a000},{0x4014c000},{0x4014e000},{0x40150000},{0x40152000},{0x40154000},{0x40156000},{0x40158000},{0x4015a000},{0x4015c000},{0x4015e000},{0x40160000},{0x40162000},{0x40164000},{0x40166000},{0x40168000},{0x4016a000},{0x4016c000},{0x4016e000},{0x40170000},{0x40172000},{0x40174000},{0x40176000},{0x40178000},{0x4017a000},{0x4017c000},{0x4017e000}, -{0x40180000},{0x40182000},{0x40184000},{0x40186000},{0x40188000},{0x4018a000},{0x4018c000},{0x4018e000},{0x40190000},{0x40192000},{0x40194000},{0x40196000},{0x40198000},{0x4019a000},{0x4019c000},{0x4019e000},{0x401a0000},{0x401a2000},{0x401a4000},{0x401a6000},{0x401a8000},{0x401aa000},{0x401ac000},{0x401ae000},{0x401b0000},{0x401b2000},{0x401b4000},{0x401b6000},{0x401b8000},{0x401ba000},{0x401bc000},{0x401be000}, -{0x401c0000},{0x401c2000},{0x401c4000},{0x401c6000},{0x401c8000},{0x401ca000},{0x401cc000},{0x401ce000},{0x401d0000},{0x401d2000},{0x401d4000},{0x401d6000},{0x401d8000},{0x401da000},{0x401dc000},{0x401de000},{0x401e0000},{0x401e2000},{0x401e4000},{0x401e6000},{0x401e8000},{0x401ea000},{0x401ec000},{0x401ee000},{0x401f0000},{0x401f2000},{0x401f4000},{0x401f6000},{0x401f8000},{0x401fa000},{0x401fc000},{0x401fe000}, -{0x40200000},{0x40202000},{0x40204000},{0x40206000},{0x40208000},{0x4020a000},{0x4020c000},{0x4020e000},{0x40210000},{0x40212000},{0x40214000},{0x40216000},{0x40218000},{0x4021a000},{0x4021c000},{0x4021e000},{0x40220000},{0x40222000},{0x40224000},{0x40226000},{0x40228000},{0x4022a000},{0x4022c000},{0x4022e000},{0x40230000},{0x40232000},{0x40234000},{0x40236000},{0x40238000},{0x4023a000},{0x4023c000},{0x4023e000}, -{0x40240000},{0x40242000},{0x40244000},{0x40246000},{0x40248000},{0x4024a000},{0x4024c000},{0x4024e000},{0x40250000},{0x40252000},{0x40254000},{0x40256000},{0x40258000},{0x4025a000},{0x4025c000},{0x4025e000},{0x40260000},{0x40262000},{0x40264000},{0x40266000},{0x40268000},{0x4026a000},{0x4026c000},{0x4026e000},{0x40270000},{0x40272000},{0x40274000},{0x40276000},{0x40278000},{0x4027a000},{0x4027c000},{0x4027e000}, -{0x40280000},{0x40282000},{0x40284000},{0x40286000},{0x40288000},{0x4028a000},{0x4028c000},{0x4028e000},{0x40290000},{0x40292000},{0x40294000},{0x40296000},{0x40298000},{0x4029a000},{0x4029c000},{0x4029e000},{0x402a0000},{0x402a2000},{0x402a4000},{0x402a6000},{0x402a8000},{0x402aa000},{0x402ac000},{0x402ae000},{0x402b0000},{0x402b2000},{0x402b4000},{0x402b6000},{0x402b8000},{0x402ba000},{0x402bc000},{0x402be000}, -{0x402c0000},{0x402c2000},{0x402c4000},{0x402c6000},{0x402c8000},{0x402ca000},{0x402cc000},{0x402ce000},{0x402d0000},{0x402d2000},{0x402d4000},{0x402d6000},{0x402d8000},{0x402da000},{0x402dc000},{0x402de000},{0x402e0000},{0x402e2000},{0x402e4000},{0x402e6000},{0x402e8000},{0x402ea000},{0x402ec000},{0x402ee000},{0x402f0000},{0x402f2000},{0x402f4000},{0x402f6000},{0x402f8000},{0x402fa000},{0x402fc000},{0x402fe000}, -{0x40300000},{0x40302000},{0x40304000},{0x40306000},{0x40308000},{0x4030a000},{0x4030c000},{0x4030e000},{0x40310000},{0x40312000},{0x40314000},{0x40316000},{0x40318000},{0x4031a000},{0x4031c000},{0x4031e000},{0x40320000},{0x40322000},{0x40324000},{0x40326000},{0x40328000},{0x4032a000},{0x4032c000},{0x4032e000},{0x40330000},{0x40332000},{0x40334000},{0x40336000},{0x40338000},{0x4033a000},{0x4033c000},{0x4033e000}, -{0x40340000},{0x40342000},{0x40344000},{0x40346000},{0x40348000},{0x4034a000},{0x4034c000},{0x4034e000},{0x40350000},{0x40352000},{0x40354000},{0x40356000},{0x40358000},{0x4035a000},{0x4035c000},{0x4035e000},{0x40360000},{0x40362000},{0x40364000},{0x40366000},{0x40368000},{0x4036a000},{0x4036c000},{0x4036e000},{0x40370000},{0x40372000},{0x40374000},{0x40376000},{0x40378000},{0x4037a000},{0x4037c000},{0x4037e000}, -{0x40380000},{0x40382000},{0x40384000},{0x40386000},{0x40388000},{0x4038a000},{0x4038c000},{0x4038e000},{0x40390000},{0x40392000},{0x40394000},{0x40396000},{0x40398000},{0x4039a000},{0x4039c000},{0x4039e000},{0x403a0000},{0x403a2000},{0x403a4000},{0x403a6000},{0x403a8000},{0x403aa000},{0x403ac000},{0x403ae000},{0x403b0000},{0x403b2000},{0x403b4000},{0x403b6000},{0x403b8000},{0x403ba000},{0x403bc000},{0x403be000}, -{0x403c0000},{0x403c2000},{0x403c4000},{0x403c6000},{0x403c8000},{0x403ca000},{0x403cc000},{0x403ce000},{0x403d0000},{0x403d2000},{0x403d4000},{0x403d6000},{0x403d8000},{0x403da000},{0x403dc000},{0x403de000},{0x403e0000},{0x403e2000},{0x403e4000},{0x403e6000},{0x403e8000},{0x403ea000},{0x403ec000},{0x403ee000},{0x403f0000},{0x403f2000},{0x403f4000},{0x403f6000},{0x403f8000},{0x403fa000},{0x403fc000},{0x403fe000}, -{0x40400000},{0x40402000},{0x40404000},{0x40406000},{0x40408000},{0x4040a000},{0x4040c000},{0x4040e000},{0x40410000},{0x40412000},{0x40414000},{0x40416000},{0x40418000},{0x4041a000},{0x4041c000},{0x4041e000},{0x40420000},{0x40422000},{0x40424000},{0x40426000},{0x40428000},{0x4042a000},{0x4042c000},{0x4042e000},{0x40430000},{0x40432000},{0x40434000},{0x40436000},{0x40438000},{0x4043a000},{0x4043c000},{0x4043e000}, -{0x40440000},{0x40442000},{0x40444000},{0x40446000},{0x40448000},{0x4044a000},{0x4044c000},{0x4044e000},{0x40450000},{0x40452000},{0x40454000},{0x40456000},{0x40458000},{0x4045a000},{0x4045c000},{0x4045e000},{0x40460000},{0x40462000},{0x40464000},{0x40466000},{0x40468000},{0x4046a000},{0x4046c000},{0x4046e000},{0x40470000},{0x40472000},{0x40474000},{0x40476000},{0x40478000},{0x4047a000},{0x4047c000},{0x4047e000}, -{0x40480000},{0x40482000},{0x40484000},{0x40486000},{0x40488000},{0x4048a000},{0x4048c000},{0x4048e000},{0x40490000},{0x40492000},{0x40494000},{0x40496000},{0x40498000},{0x4049a000},{0x4049c000},{0x4049e000},{0x404a0000},{0x404a2000},{0x404a4000},{0x404a6000},{0x404a8000},{0x404aa000},{0x404ac000},{0x404ae000},{0x404b0000},{0x404b2000},{0x404b4000},{0x404b6000},{0x404b8000},{0x404ba000},{0x404bc000},{0x404be000}, -{0x404c0000},{0x404c2000},{0x404c4000},{0x404c6000},{0x404c8000},{0x404ca000},{0x404cc000},{0x404ce000},{0x404d0000},{0x404d2000},{0x404d4000},{0x404d6000},{0x404d8000},{0x404da000},{0x404dc000},{0x404de000},{0x404e0000},{0x404e2000},{0x404e4000},{0x404e6000},{0x404e8000},{0x404ea000},{0x404ec000},{0x404ee000},{0x404f0000},{0x404f2000},{0x404f4000},{0x404f6000},{0x404f8000},{0x404fa000},{0x404fc000},{0x404fe000}, -{0x40500000},{0x40502000},{0x40504000},{0x40506000},{0x40508000},{0x4050a000},{0x4050c000},{0x4050e000},{0x40510000},{0x40512000},{0x40514000},{0x40516000},{0x40518000},{0x4051a000},{0x4051c000},{0x4051e000},{0x40520000},{0x40522000},{0x40524000},{0x40526000},{0x40528000},{0x4052a000},{0x4052c000},{0x4052e000},{0x40530000},{0x40532000},{0x40534000},{0x40536000},{0x40538000},{0x4053a000},{0x4053c000},{0x4053e000}, -{0x40540000},{0x40542000},{0x40544000},{0x40546000},{0x40548000},{0x4054a000},{0x4054c000},{0x4054e000},{0x40550000},{0x40552000},{0x40554000},{0x40556000},{0x40558000},{0x4055a000},{0x4055c000},{0x4055e000},{0x40560000},{0x40562000},{0x40564000},{0x40566000},{0x40568000},{0x4056a000},{0x4056c000},{0x4056e000},{0x40570000},{0x40572000},{0x40574000},{0x40576000},{0x40578000},{0x4057a000},{0x4057c000},{0x4057e000}, -{0x40580000},{0x40582000},{0x40584000},{0x40586000},{0x40588000},{0x4058a000},{0x4058c000},{0x4058e000},{0x40590000},{0x40592000},{0x40594000},{0x40596000},{0x40598000},{0x4059a000},{0x4059c000},{0x4059e000},{0x405a0000},{0x405a2000},{0x405a4000},{0x405a6000},{0x405a8000},{0x405aa000},{0x405ac000},{0x405ae000},{0x405b0000},{0x405b2000},{0x405b4000},{0x405b6000},{0x405b8000},{0x405ba000},{0x405bc000},{0x405be000}, -{0x405c0000},{0x405c2000},{0x405c4000},{0x405c6000},{0x405c8000},{0x405ca000},{0x405cc000},{0x405ce000},{0x405d0000},{0x405d2000},{0x405d4000},{0x405d6000},{0x405d8000},{0x405da000},{0x405dc000},{0x405de000},{0x405e0000},{0x405e2000},{0x405e4000},{0x405e6000},{0x405e8000},{0x405ea000},{0x405ec000},{0x405ee000},{0x405f0000},{0x405f2000},{0x405f4000},{0x405f6000},{0x405f8000},{0x405fa000},{0x405fc000},{0x405fe000}, -{0x40600000},{0x40602000},{0x40604000},{0x40606000},{0x40608000},{0x4060a000},{0x4060c000},{0x4060e000},{0x40610000},{0x40612000},{0x40614000},{0x40616000},{0x40618000},{0x4061a000},{0x4061c000},{0x4061e000},{0x40620000},{0x40622000},{0x40624000},{0x40626000},{0x40628000},{0x4062a000},{0x4062c000},{0x4062e000},{0x40630000},{0x40632000},{0x40634000},{0x40636000},{0x40638000},{0x4063a000},{0x4063c000},{0x4063e000}, -{0x40640000},{0x40642000},{0x40644000},{0x40646000},{0x40648000},{0x4064a000},{0x4064c000},{0x4064e000},{0x40650000},{0x40652000},{0x40654000},{0x40656000},{0x40658000},{0x4065a000},{0x4065c000},{0x4065e000},{0x40660000},{0x40662000},{0x40664000},{0x40666000},{0x40668000},{0x4066a000},{0x4066c000},{0x4066e000},{0x40670000},{0x40672000},{0x40674000},{0x40676000},{0x40678000},{0x4067a000},{0x4067c000},{0x4067e000}, -{0x40680000},{0x40682000},{0x40684000},{0x40686000},{0x40688000},{0x4068a000},{0x4068c000},{0x4068e000},{0x40690000},{0x40692000},{0x40694000},{0x40696000},{0x40698000},{0x4069a000},{0x4069c000},{0x4069e000},{0x406a0000},{0x406a2000},{0x406a4000},{0x406a6000},{0x406a8000},{0x406aa000},{0x406ac000},{0x406ae000},{0x406b0000},{0x406b2000},{0x406b4000},{0x406b6000},{0x406b8000},{0x406ba000},{0x406bc000},{0x406be000}, -{0x406c0000},{0x406c2000},{0x406c4000},{0x406c6000},{0x406c8000},{0x406ca000},{0x406cc000},{0x406ce000},{0x406d0000},{0x406d2000},{0x406d4000},{0x406d6000},{0x406d8000},{0x406da000},{0x406dc000},{0x406de000},{0x406e0000},{0x406e2000},{0x406e4000},{0x406e6000},{0x406e8000},{0x406ea000},{0x406ec000},{0x406ee000},{0x406f0000},{0x406f2000},{0x406f4000},{0x406f6000},{0x406f8000},{0x406fa000},{0x406fc000},{0x406fe000}, -{0x40700000},{0x40702000},{0x40704000},{0x40706000},{0x40708000},{0x4070a000},{0x4070c000},{0x4070e000},{0x40710000},{0x40712000},{0x40714000},{0x40716000},{0x40718000},{0x4071a000},{0x4071c000},{0x4071e000},{0x40720000},{0x40722000},{0x40724000},{0x40726000},{0x40728000},{0x4072a000},{0x4072c000},{0x4072e000},{0x40730000},{0x40732000},{0x40734000},{0x40736000},{0x40738000},{0x4073a000},{0x4073c000},{0x4073e000}, -{0x40740000},{0x40742000},{0x40744000},{0x40746000},{0x40748000},{0x4074a000},{0x4074c000},{0x4074e000},{0x40750000},{0x40752000},{0x40754000},{0x40756000},{0x40758000},{0x4075a000},{0x4075c000},{0x4075e000},{0x40760000},{0x40762000},{0x40764000},{0x40766000},{0x40768000},{0x4076a000},{0x4076c000},{0x4076e000},{0x40770000},{0x40772000},{0x40774000},{0x40776000},{0x40778000},{0x4077a000},{0x4077c000},{0x4077e000}, -{0x40780000},{0x40782000},{0x40784000},{0x40786000},{0x40788000},{0x4078a000},{0x4078c000},{0x4078e000},{0x40790000},{0x40792000},{0x40794000},{0x40796000},{0x40798000},{0x4079a000},{0x4079c000},{0x4079e000},{0x407a0000},{0x407a2000},{0x407a4000},{0x407a6000},{0x407a8000},{0x407aa000},{0x407ac000},{0x407ae000},{0x407b0000},{0x407b2000},{0x407b4000},{0x407b6000},{0x407b8000},{0x407ba000},{0x407bc000},{0x407be000}, -{0x407c0000},{0x407c2000},{0x407c4000},{0x407c6000},{0x407c8000},{0x407ca000},{0x407cc000},{0x407ce000},{0x407d0000},{0x407d2000},{0x407d4000},{0x407d6000},{0x407d8000},{0x407da000},{0x407dc000},{0x407de000},{0x407e0000},{0x407e2000},{0x407e4000},{0x407e6000},{0x407e8000},{0x407ea000},{0x407ec000},{0x407ee000},{0x407f0000},{0x407f2000},{0x407f4000},{0x407f6000},{0x407f8000},{0x407fa000},{0x407fc000},{0x407fe000}, -{0x40800000},{0x40802000},{0x40804000},{0x40806000},{0x40808000},{0x4080a000},{0x4080c000},{0x4080e000},{0x40810000},{0x40812000},{0x40814000},{0x40816000},{0x40818000},{0x4081a000},{0x4081c000},{0x4081e000},{0x40820000},{0x40822000},{0x40824000},{0x40826000},{0x40828000},{0x4082a000},{0x4082c000},{0x4082e000},{0x40830000},{0x40832000},{0x40834000},{0x40836000},{0x40838000},{0x4083a000},{0x4083c000},{0x4083e000}, -{0x40840000},{0x40842000},{0x40844000},{0x40846000},{0x40848000},{0x4084a000},{0x4084c000},{0x4084e000},{0x40850000},{0x40852000},{0x40854000},{0x40856000},{0x40858000},{0x4085a000},{0x4085c000},{0x4085e000},{0x40860000},{0x40862000},{0x40864000},{0x40866000},{0x40868000},{0x4086a000},{0x4086c000},{0x4086e000},{0x40870000},{0x40872000},{0x40874000},{0x40876000},{0x40878000},{0x4087a000},{0x4087c000},{0x4087e000}, -{0x40880000},{0x40882000},{0x40884000},{0x40886000},{0x40888000},{0x4088a000},{0x4088c000},{0x4088e000},{0x40890000},{0x40892000},{0x40894000},{0x40896000},{0x40898000},{0x4089a000},{0x4089c000},{0x4089e000},{0x408a0000},{0x408a2000},{0x408a4000},{0x408a6000},{0x408a8000},{0x408aa000},{0x408ac000},{0x408ae000},{0x408b0000},{0x408b2000},{0x408b4000},{0x408b6000},{0x408b8000},{0x408ba000},{0x408bc000},{0x408be000}, -{0x408c0000},{0x408c2000},{0x408c4000},{0x408c6000},{0x408c8000},{0x408ca000},{0x408cc000},{0x408ce000},{0x408d0000},{0x408d2000},{0x408d4000},{0x408d6000},{0x408d8000},{0x408da000},{0x408dc000},{0x408de000},{0x408e0000},{0x408e2000},{0x408e4000},{0x408e6000},{0x408e8000},{0x408ea000},{0x408ec000},{0x408ee000},{0x408f0000},{0x408f2000},{0x408f4000},{0x408f6000},{0x408f8000},{0x408fa000},{0x408fc000},{0x408fe000}, -{0x40900000},{0x40902000},{0x40904000},{0x40906000},{0x40908000},{0x4090a000},{0x4090c000},{0x4090e000},{0x40910000},{0x40912000},{0x40914000},{0x40916000},{0x40918000},{0x4091a000},{0x4091c000},{0x4091e000},{0x40920000},{0x40922000},{0x40924000},{0x40926000},{0x40928000},{0x4092a000},{0x4092c000},{0x4092e000},{0x40930000},{0x40932000},{0x40934000},{0x40936000},{0x40938000},{0x4093a000},{0x4093c000},{0x4093e000}, -{0x40940000},{0x40942000},{0x40944000},{0x40946000},{0x40948000},{0x4094a000},{0x4094c000},{0x4094e000},{0x40950000},{0x40952000},{0x40954000},{0x40956000},{0x40958000},{0x4095a000},{0x4095c000},{0x4095e000},{0x40960000},{0x40962000},{0x40964000},{0x40966000},{0x40968000},{0x4096a000},{0x4096c000},{0x4096e000},{0x40970000},{0x40972000},{0x40974000},{0x40976000},{0x40978000},{0x4097a000},{0x4097c000},{0x4097e000}, -{0x40980000},{0x40982000},{0x40984000},{0x40986000},{0x40988000},{0x4098a000},{0x4098c000},{0x4098e000},{0x40990000},{0x40992000},{0x40994000},{0x40996000},{0x40998000},{0x4099a000},{0x4099c000},{0x4099e000},{0x409a0000},{0x409a2000},{0x409a4000},{0x409a6000},{0x409a8000},{0x409aa000},{0x409ac000},{0x409ae000},{0x409b0000},{0x409b2000},{0x409b4000},{0x409b6000},{0x409b8000},{0x409ba000},{0x409bc000},{0x409be000}, -{0x409c0000},{0x409c2000},{0x409c4000},{0x409c6000},{0x409c8000},{0x409ca000},{0x409cc000},{0x409ce000},{0x409d0000},{0x409d2000},{0x409d4000},{0x409d6000},{0x409d8000},{0x409da000},{0x409dc000},{0x409de000},{0x409e0000},{0x409e2000},{0x409e4000},{0x409e6000},{0x409e8000},{0x409ea000},{0x409ec000},{0x409ee000},{0x409f0000},{0x409f2000},{0x409f4000},{0x409f6000},{0x409f8000},{0x409fa000},{0x409fc000},{0x409fe000}, -{0x40a00000},{0x40a02000},{0x40a04000},{0x40a06000},{0x40a08000},{0x40a0a000},{0x40a0c000},{0x40a0e000},{0x40a10000},{0x40a12000},{0x40a14000},{0x40a16000},{0x40a18000},{0x40a1a000},{0x40a1c000},{0x40a1e000},{0x40a20000},{0x40a22000},{0x40a24000},{0x40a26000},{0x40a28000},{0x40a2a000},{0x40a2c000},{0x40a2e000},{0x40a30000},{0x40a32000},{0x40a34000},{0x40a36000},{0x40a38000},{0x40a3a000},{0x40a3c000},{0x40a3e000}, -{0x40a40000},{0x40a42000},{0x40a44000},{0x40a46000},{0x40a48000},{0x40a4a000},{0x40a4c000},{0x40a4e000},{0x40a50000},{0x40a52000},{0x40a54000},{0x40a56000},{0x40a58000},{0x40a5a000},{0x40a5c000},{0x40a5e000},{0x40a60000},{0x40a62000},{0x40a64000},{0x40a66000},{0x40a68000},{0x40a6a000},{0x40a6c000},{0x40a6e000},{0x40a70000},{0x40a72000},{0x40a74000},{0x40a76000},{0x40a78000},{0x40a7a000},{0x40a7c000},{0x40a7e000}, -{0x40a80000},{0x40a82000},{0x40a84000},{0x40a86000},{0x40a88000},{0x40a8a000},{0x40a8c000},{0x40a8e000},{0x40a90000},{0x40a92000},{0x40a94000},{0x40a96000},{0x40a98000},{0x40a9a000},{0x40a9c000},{0x40a9e000},{0x40aa0000},{0x40aa2000},{0x40aa4000},{0x40aa6000},{0x40aa8000},{0x40aaa000},{0x40aac000},{0x40aae000},{0x40ab0000},{0x40ab2000},{0x40ab4000},{0x40ab6000},{0x40ab8000},{0x40aba000},{0x40abc000},{0x40abe000}, -{0x40ac0000},{0x40ac2000},{0x40ac4000},{0x40ac6000},{0x40ac8000},{0x40aca000},{0x40acc000},{0x40ace000},{0x40ad0000},{0x40ad2000},{0x40ad4000},{0x40ad6000},{0x40ad8000},{0x40ada000},{0x40adc000},{0x40ade000},{0x40ae0000},{0x40ae2000},{0x40ae4000},{0x40ae6000},{0x40ae8000},{0x40aea000},{0x40aec000},{0x40aee000},{0x40af0000},{0x40af2000},{0x40af4000},{0x40af6000},{0x40af8000},{0x40afa000},{0x40afc000},{0x40afe000}, -{0x40b00000},{0x40b02000},{0x40b04000},{0x40b06000},{0x40b08000},{0x40b0a000},{0x40b0c000},{0x40b0e000},{0x40b10000},{0x40b12000},{0x40b14000},{0x40b16000},{0x40b18000},{0x40b1a000},{0x40b1c000},{0x40b1e000},{0x40b20000},{0x40b22000},{0x40b24000},{0x40b26000},{0x40b28000},{0x40b2a000},{0x40b2c000},{0x40b2e000},{0x40b30000},{0x40b32000},{0x40b34000},{0x40b36000},{0x40b38000},{0x40b3a000},{0x40b3c000},{0x40b3e000}, -{0x40b40000},{0x40b42000},{0x40b44000},{0x40b46000},{0x40b48000},{0x40b4a000},{0x40b4c000},{0x40b4e000},{0x40b50000},{0x40b52000},{0x40b54000},{0x40b56000},{0x40b58000},{0x40b5a000},{0x40b5c000},{0x40b5e000},{0x40b60000},{0x40b62000},{0x40b64000},{0x40b66000},{0x40b68000},{0x40b6a000},{0x40b6c000},{0x40b6e000},{0x40b70000},{0x40b72000},{0x40b74000},{0x40b76000},{0x40b78000},{0x40b7a000},{0x40b7c000},{0x40b7e000}, -{0x40b80000},{0x40b82000},{0x40b84000},{0x40b86000},{0x40b88000},{0x40b8a000},{0x40b8c000},{0x40b8e000},{0x40b90000},{0x40b92000},{0x40b94000},{0x40b96000},{0x40b98000},{0x40b9a000},{0x40b9c000},{0x40b9e000},{0x40ba0000},{0x40ba2000},{0x40ba4000},{0x40ba6000},{0x40ba8000},{0x40baa000},{0x40bac000},{0x40bae000},{0x40bb0000},{0x40bb2000},{0x40bb4000},{0x40bb6000},{0x40bb8000},{0x40bba000},{0x40bbc000},{0x40bbe000}, -{0x40bc0000},{0x40bc2000},{0x40bc4000},{0x40bc6000},{0x40bc8000},{0x40bca000},{0x40bcc000},{0x40bce000},{0x40bd0000},{0x40bd2000},{0x40bd4000},{0x40bd6000},{0x40bd8000},{0x40bda000},{0x40bdc000},{0x40bde000},{0x40be0000},{0x40be2000},{0x40be4000},{0x40be6000},{0x40be8000},{0x40bea000},{0x40bec000},{0x40bee000},{0x40bf0000},{0x40bf2000},{0x40bf4000},{0x40bf6000},{0x40bf8000},{0x40bfa000},{0x40bfc000},{0x40bfe000}, -{0x40c00000},{0x40c02000},{0x40c04000},{0x40c06000},{0x40c08000},{0x40c0a000},{0x40c0c000},{0x40c0e000},{0x40c10000},{0x40c12000},{0x40c14000},{0x40c16000},{0x40c18000},{0x40c1a000},{0x40c1c000},{0x40c1e000},{0x40c20000},{0x40c22000},{0x40c24000},{0x40c26000},{0x40c28000},{0x40c2a000},{0x40c2c000},{0x40c2e000},{0x40c30000},{0x40c32000},{0x40c34000},{0x40c36000},{0x40c38000},{0x40c3a000},{0x40c3c000},{0x40c3e000}, -{0x40c40000},{0x40c42000},{0x40c44000},{0x40c46000},{0x40c48000},{0x40c4a000},{0x40c4c000},{0x40c4e000},{0x40c50000},{0x40c52000},{0x40c54000},{0x40c56000},{0x40c58000},{0x40c5a000},{0x40c5c000},{0x40c5e000},{0x40c60000},{0x40c62000},{0x40c64000},{0x40c66000},{0x40c68000},{0x40c6a000},{0x40c6c000},{0x40c6e000},{0x40c70000},{0x40c72000},{0x40c74000},{0x40c76000},{0x40c78000},{0x40c7a000},{0x40c7c000},{0x40c7e000}, -{0x40c80000},{0x40c82000},{0x40c84000},{0x40c86000},{0x40c88000},{0x40c8a000},{0x40c8c000},{0x40c8e000},{0x40c90000},{0x40c92000},{0x40c94000},{0x40c96000},{0x40c98000},{0x40c9a000},{0x40c9c000},{0x40c9e000},{0x40ca0000},{0x40ca2000},{0x40ca4000},{0x40ca6000},{0x40ca8000},{0x40caa000},{0x40cac000},{0x40cae000},{0x40cb0000},{0x40cb2000},{0x40cb4000},{0x40cb6000},{0x40cb8000},{0x40cba000},{0x40cbc000},{0x40cbe000}, -{0x40cc0000},{0x40cc2000},{0x40cc4000},{0x40cc6000},{0x40cc8000},{0x40cca000},{0x40ccc000},{0x40cce000},{0x40cd0000},{0x40cd2000},{0x40cd4000},{0x40cd6000},{0x40cd8000},{0x40cda000},{0x40cdc000},{0x40cde000},{0x40ce0000},{0x40ce2000},{0x40ce4000},{0x40ce6000},{0x40ce8000},{0x40cea000},{0x40cec000},{0x40cee000},{0x40cf0000},{0x40cf2000},{0x40cf4000},{0x40cf6000},{0x40cf8000},{0x40cfa000},{0x40cfc000},{0x40cfe000}, -{0x40d00000},{0x40d02000},{0x40d04000},{0x40d06000},{0x40d08000},{0x40d0a000},{0x40d0c000},{0x40d0e000},{0x40d10000},{0x40d12000},{0x40d14000},{0x40d16000},{0x40d18000},{0x40d1a000},{0x40d1c000},{0x40d1e000},{0x40d20000},{0x40d22000},{0x40d24000},{0x40d26000},{0x40d28000},{0x40d2a000},{0x40d2c000},{0x40d2e000},{0x40d30000},{0x40d32000},{0x40d34000},{0x40d36000},{0x40d38000},{0x40d3a000},{0x40d3c000},{0x40d3e000}, -{0x40d40000},{0x40d42000},{0x40d44000},{0x40d46000},{0x40d48000},{0x40d4a000},{0x40d4c000},{0x40d4e000},{0x40d50000},{0x40d52000},{0x40d54000},{0x40d56000},{0x40d58000},{0x40d5a000},{0x40d5c000},{0x40d5e000},{0x40d60000},{0x40d62000},{0x40d64000},{0x40d66000},{0x40d68000},{0x40d6a000},{0x40d6c000},{0x40d6e000},{0x40d70000},{0x40d72000},{0x40d74000},{0x40d76000},{0x40d78000},{0x40d7a000},{0x40d7c000},{0x40d7e000}, -{0x40d80000},{0x40d82000},{0x40d84000},{0x40d86000},{0x40d88000},{0x40d8a000},{0x40d8c000},{0x40d8e000},{0x40d90000},{0x40d92000},{0x40d94000},{0x40d96000},{0x40d98000},{0x40d9a000},{0x40d9c000},{0x40d9e000},{0x40da0000},{0x40da2000},{0x40da4000},{0x40da6000},{0x40da8000},{0x40daa000},{0x40dac000},{0x40dae000},{0x40db0000},{0x40db2000},{0x40db4000},{0x40db6000},{0x40db8000},{0x40dba000},{0x40dbc000},{0x40dbe000}, -{0x40dc0000},{0x40dc2000},{0x40dc4000},{0x40dc6000},{0x40dc8000},{0x40dca000},{0x40dcc000},{0x40dce000},{0x40dd0000},{0x40dd2000},{0x40dd4000},{0x40dd6000},{0x40dd8000},{0x40dda000},{0x40ddc000},{0x40dde000},{0x40de0000},{0x40de2000},{0x40de4000},{0x40de6000},{0x40de8000},{0x40dea000},{0x40dec000},{0x40dee000},{0x40df0000},{0x40df2000},{0x40df4000},{0x40df6000},{0x40df8000},{0x40dfa000},{0x40dfc000},{0x40dfe000}, -{0x40e00000},{0x40e02000},{0x40e04000},{0x40e06000},{0x40e08000},{0x40e0a000},{0x40e0c000},{0x40e0e000},{0x40e10000},{0x40e12000},{0x40e14000},{0x40e16000},{0x40e18000},{0x40e1a000},{0x40e1c000},{0x40e1e000},{0x40e20000},{0x40e22000},{0x40e24000},{0x40e26000},{0x40e28000},{0x40e2a000},{0x40e2c000},{0x40e2e000},{0x40e30000},{0x40e32000},{0x40e34000},{0x40e36000},{0x40e38000},{0x40e3a000},{0x40e3c000},{0x40e3e000}, -{0x40e40000},{0x40e42000},{0x40e44000},{0x40e46000},{0x40e48000},{0x40e4a000},{0x40e4c000},{0x40e4e000},{0x40e50000},{0x40e52000},{0x40e54000},{0x40e56000},{0x40e58000},{0x40e5a000},{0x40e5c000},{0x40e5e000},{0x40e60000},{0x40e62000},{0x40e64000},{0x40e66000},{0x40e68000},{0x40e6a000},{0x40e6c000},{0x40e6e000},{0x40e70000},{0x40e72000},{0x40e74000},{0x40e76000},{0x40e78000},{0x40e7a000},{0x40e7c000},{0x40e7e000}, -{0x40e80000},{0x40e82000},{0x40e84000},{0x40e86000},{0x40e88000},{0x40e8a000},{0x40e8c000},{0x40e8e000},{0x40e90000},{0x40e92000},{0x40e94000},{0x40e96000},{0x40e98000},{0x40e9a000},{0x40e9c000},{0x40e9e000},{0x40ea0000},{0x40ea2000},{0x40ea4000},{0x40ea6000},{0x40ea8000},{0x40eaa000},{0x40eac000},{0x40eae000},{0x40eb0000},{0x40eb2000},{0x40eb4000},{0x40eb6000},{0x40eb8000},{0x40eba000},{0x40ebc000},{0x40ebe000}, -{0x40ec0000},{0x40ec2000},{0x40ec4000},{0x40ec6000},{0x40ec8000},{0x40eca000},{0x40ecc000},{0x40ece000},{0x40ed0000},{0x40ed2000},{0x40ed4000},{0x40ed6000},{0x40ed8000},{0x40eda000},{0x40edc000},{0x40ede000},{0x40ee0000},{0x40ee2000},{0x40ee4000},{0x40ee6000},{0x40ee8000},{0x40eea000},{0x40eec000},{0x40eee000},{0x40ef0000},{0x40ef2000},{0x40ef4000},{0x40ef6000},{0x40ef8000},{0x40efa000},{0x40efc000},{0x40efe000}, -{0x40f00000},{0x40f02000},{0x40f04000},{0x40f06000},{0x40f08000},{0x40f0a000},{0x40f0c000},{0x40f0e000},{0x40f10000},{0x40f12000},{0x40f14000},{0x40f16000},{0x40f18000},{0x40f1a000},{0x40f1c000},{0x40f1e000},{0x40f20000},{0x40f22000},{0x40f24000},{0x40f26000},{0x40f28000},{0x40f2a000},{0x40f2c000},{0x40f2e000},{0x40f30000},{0x40f32000},{0x40f34000},{0x40f36000},{0x40f38000},{0x40f3a000},{0x40f3c000},{0x40f3e000}, -{0x40f40000},{0x40f42000},{0x40f44000},{0x40f46000},{0x40f48000},{0x40f4a000},{0x40f4c000},{0x40f4e000},{0x40f50000},{0x40f52000},{0x40f54000},{0x40f56000},{0x40f58000},{0x40f5a000},{0x40f5c000},{0x40f5e000},{0x40f60000},{0x40f62000},{0x40f64000},{0x40f66000},{0x40f68000},{0x40f6a000},{0x40f6c000},{0x40f6e000},{0x40f70000},{0x40f72000},{0x40f74000},{0x40f76000},{0x40f78000},{0x40f7a000},{0x40f7c000},{0x40f7e000}, -{0x40f80000},{0x40f82000},{0x40f84000},{0x40f86000},{0x40f88000},{0x40f8a000},{0x40f8c000},{0x40f8e000},{0x40f90000},{0x40f92000},{0x40f94000},{0x40f96000},{0x40f98000},{0x40f9a000},{0x40f9c000},{0x40f9e000},{0x40fa0000},{0x40fa2000},{0x40fa4000},{0x40fa6000},{0x40fa8000},{0x40faa000},{0x40fac000},{0x40fae000},{0x40fb0000},{0x40fb2000},{0x40fb4000},{0x40fb6000},{0x40fb8000},{0x40fba000},{0x40fbc000},{0x40fbe000}, -{0x40fc0000},{0x40fc2000},{0x40fc4000},{0x40fc6000},{0x40fc8000},{0x40fca000},{0x40fcc000},{0x40fce000},{0x40fd0000},{0x40fd2000},{0x40fd4000},{0x40fd6000},{0x40fd8000},{0x40fda000},{0x40fdc000},{0x40fde000},{0x40fe0000},{0x40fe2000},{0x40fe4000},{0x40fe6000},{0x40fe8000},{0x40fea000},{0x40fec000},{0x40fee000},{0x40ff0000},{0x40ff2000},{0x40ff4000},{0x40ff6000},{0x40ff8000},{0x40ffa000},{0x40ffc000},{0x40ffe000}, -{0x41000000},{0x41002000},{0x41004000},{0x41006000},{0x41008000},{0x4100a000},{0x4100c000},{0x4100e000},{0x41010000},{0x41012000},{0x41014000},{0x41016000},{0x41018000},{0x4101a000},{0x4101c000},{0x4101e000},{0x41020000},{0x41022000},{0x41024000},{0x41026000},{0x41028000},{0x4102a000},{0x4102c000},{0x4102e000},{0x41030000},{0x41032000},{0x41034000},{0x41036000},{0x41038000},{0x4103a000},{0x4103c000},{0x4103e000}, -{0x41040000},{0x41042000},{0x41044000},{0x41046000},{0x41048000},{0x4104a000},{0x4104c000},{0x4104e000},{0x41050000},{0x41052000},{0x41054000},{0x41056000},{0x41058000},{0x4105a000},{0x4105c000},{0x4105e000},{0x41060000},{0x41062000},{0x41064000},{0x41066000},{0x41068000},{0x4106a000},{0x4106c000},{0x4106e000},{0x41070000},{0x41072000},{0x41074000},{0x41076000},{0x41078000},{0x4107a000},{0x4107c000},{0x4107e000}, -{0x41080000},{0x41082000},{0x41084000},{0x41086000},{0x41088000},{0x4108a000},{0x4108c000},{0x4108e000},{0x41090000},{0x41092000},{0x41094000},{0x41096000},{0x41098000},{0x4109a000},{0x4109c000},{0x4109e000},{0x410a0000},{0x410a2000},{0x410a4000},{0x410a6000},{0x410a8000},{0x410aa000},{0x410ac000},{0x410ae000},{0x410b0000},{0x410b2000},{0x410b4000},{0x410b6000},{0x410b8000},{0x410ba000},{0x410bc000},{0x410be000}, -{0x410c0000},{0x410c2000},{0x410c4000},{0x410c6000},{0x410c8000},{0x410ca000},{0x410cc000},{0x410ce000},{0x410d0000},{0x410d2000},{0x410d4000},{0x410d6000},{0x410d8000},{0x410da000},{0x410dc000},{0x410de000},{0x410e0000},{0x410e2000},{0x410e4000},{0x410e6000},{0x410e8000},{0x410ea000},{0x410ec000},{0x410ee000},{0x410f0000},{0x410f2000},{0x410f4000},{0x410f6000},{0x410f8000},{0x410fa000},{0x410fc000},{0x410fe000}, -{0x41100000},{0x41102000},{0x41104000},{0x41106000},{0x41108000},{0x4110a000},{0x4110c000},{0x4110e000},{0x41110000},{0x41112000},{0x41114000},{0x41116000},{0x41118000},{0x4111a000},{0x4111c000},{0x4111e000},{0x41120000},{0x41122000},{0x41124000},{0x41126000},{0x41128000},{0x4112a000},{0x4112c000},{0x4112e000},{0x41130000},{0x41132000},{0x41134000},{0x41136000},{0x41138000},{0x4113a000},{0x4113c000},{0x4113e000}, -{0x41140000},{0x41142000},{0x41144000},{0x41146000},{0x41148000},{0x4114a000},{0x4114c000},{0x4114e000},{0x41150000},{0x41152000},{0x41154000},{0x41156000},{0x41158000},{0x4115a000},{0x4115c000},{0x4115e000},{0x41160000},{0x41162000},{0x41164000},{0x41166000},{0x41168000},{0x4116a000},{0x4116c000},{0x4116e000},{0x41170000},{0x41172000},{0x41174000},{0x41176000},{0x41178000},{0x4117a000},{0x4117c000},{0x4117e000}, -{0x41180000},{0x41182000},{0x41184000},{0x41186000},{0x41188000},{0x4118a000},{0x4118c000},{0x4118e000},{0x41190000},{0x41192000},{0x41194000},{0x41196000},{0x41198000},{0x4119a000},{0x4119c000},{0x4119e000},{0x411a0000},{0x411a2000},{0x411a4000},{0x411a6000},{0x411a8000},{0x411aa000},{0x411ac000},{0x411ae000},{0x411b0000},{0x411b2000},{0x411b4000},{0x411b6000},{0x411b8000},{0x411ba000},{0x411bc000},{0x411be000}, -{0x411c0000},{0x411c2000},{0x411c4000},{0x411c6000},{0x411c8000},{0x411ca000},{0x411cc000},{0x411ce000},{0x411d0000},{0x411d2000},{0x411d4000},{0x411d6000},{0x411d8000},{0x411da000},{0x411dc000},{0x411de000},{0x411e0000},{0x411e2000},{0x411e4000},{0x411e6000},{0x411e8000},{0x411ea000},{0x411ec000},{0x411ee000},{0x411f0000},{0x411f2000},{0x411f4000},{0x411f6000},{0x411f8000},{0x411fa000},{0x411fc000},{0x411fe000}, -{0x41200000},{0x41202000},{0x41204000},{0x41206000},{0x41208000},{0x4120a000},{0x4120c000},{0x4120e000},{0x41210000},{0x41212000},{0x41214000},{0x41216000},{0x41218000},{0x4121a000},{0x4121c000},{0x4121e000},{0x41220000},{0x41222000},{0x41224000},{0x41226000},{0x41228000},{0x4122a000},{0x4122c000},{0x4122e000},{0x41230000},{0x41232000},{0x41234000},{0x41236000},{0x41238000},{0x4123a000},{0x4123c000},{0x4123e000}, -{0x41240000},{0x41242000},{0x41244000},{0x41246000},{0x41248000},{0x4124a000},{0x4124c000},{0x4124e000},{0x41250000},{0x41252000},{0x41254000},{0x41256000},{0x41258000},{0x4125a000},{0x4125c000},{0x4125e000},{0x41260000},{0x41262000},{0x41264000},{0x41266000},{0x41268000},{0x4126a000},{0x4126c000},{0x4126e000},{0x41270000},{0x41272000},{0x41274000},{0x41276000},{0x41278000},{0x4127a000},{0x4127c000},{0x4127e000}, -{0x41280000},{0x41282000},{0x41284000},{0x41286000},{0x41288000},{0x4128a000},{0x4128c000},{0x4128e000},{0x41290000},{0x41292000},{0x41294000},{0x41296000},{0x41298000},{0x4129a000},{0x4129c000},{0x4129e000},{0x412a0000},{0x412a2000},{0x412a4000},{0x412a6000},{0x412a8000},{0x412aa000},{0x412ac000},{0x412ae000},{0x412b0000},{0x412b2000},{0x412b4000},{0x412b6000},{0x412b8000},{0x412ba000},{0x412bc000},{0x412be000}, -{0x412c0000},{0x412c2000},{0x412c4000},{0x412c6000},{0x412c8000},{0x412ca000},{0x412cc000},{0x412ce000},{0x412d0000},{0x412d2000},{0x412d4000},{0x412d6000},{0x412d8000},{0x412da000},{0x412dc000},{0x412de000},{0x412e0000},{0x412e2000},{0x412e4000},{0x412e6000},{0x412e8000},{0x412ea000},{0x412ec000},{0x412ee000},{0x412f0000},{0x412f2000},{0x412f4000},{0x412f6000},{0x412f8000},{0x412fa000},{0x412fc000},{0x412fe000}, -{0x41300000},{0x41302000},{0x41304000},{0x41306000},{0x41308000},{0x4130a000},{0x4130c000},{0x4130e000},{0x41310000},{0x41312000},{0x41314000},{0x41316000},{0x41318000},{0x4131a000},{0x4131c000},{0x4131e000},{0x41320000},{0x41322000},{0x41324000},{0x41326000},{0x41328000},{0x4132a000},{0x4132c000},{0x4132e000},{0x41330000},{0x41332000},{0x41334000},{0x41336000},{0x41338000},{0x4133a000},{0x4133c000},{0x4133e000}, -{0x41340000},{0x41342000},{0x41344000},{0x41346000},{0x41348000},{0x4134a000},{0x4134c000},{0x4134e000},{0x41350000},{0x41352000},{0x41354000},{0x41356000},{0x41358000},{0x4135a000},{0x4135c000},{0x4135e000},{0x41360000},{0x41362000},{0x41364000},{0x41366000},{0x41368000},{0x4136a000},{0x4136c000},{0x4136e000},{0x41370000},{0x41372000},{0x41374000},{0x41376000},{0x41378000},{0x4137a000},{0x4137c000},{0x4137e000}, -{0x41380000},{0x41382000},{0x41384000},{0x41386000},{0x41388000},{0x4138a000},{0x4138c000},{0x4138e000},{0x41390000},{0x41392000},{0x41394000},{0x41396000},{0x41398000},{0x4139a000},{0x4139c000},{0x4139e000},{0x413a0000},{0x413a2000},{0x413a4000},{0x413a6000},{0x413a8000},{0x413aa000},{0x413ac000},{0x413ae000},{0x413b0000},{0x413b2000},{0x413b4000},{0x413b6000},{0x413b8000},{0x413ba000},{0x413bc000},{0x413be000}, -{0x413c0000},{0x413c2000},{0x413c4000},{0x413c6000},{0x413c8000},{0x413ca000},{0x413cc000},{0x413ce000},{0x413d0000},{0x413d2000},{0x413d4000},{0x413d6000},{0x413d8000},{0x413da000},{0x413dc000},{0x413de000},{0x413e0000},{0x413e2000},{0x413e4000},{0x413e6000},{0x413e8000},{0x413ea000},{0x413ec000},{0x413ee000},{0x413f0000},{0x413f2000},{0x413f4000},{0x413f6000},{0x413f8000},{0x413fa000},{0x413fc000},{0x413fe000}, -{0x41400000},{0x41402000},{0x41404000},{0x41406000},{0x41408000},{0x4140a000},{0x4140c000},{0x4140e000},{0x41410000},{0x41412000},{0x41414000},{0x41416000},{0x41418000},{0x4141a000},{0x4141c000},{0x4141e000},{0x41420000},{0x41422000},{0x41424000},{0x41426000},{0x41428000},{0x4142a000},{0x4142c000},{0x4142e000},{0x41430000},{0x41432000},{0x41434000},{0x41436000},{0x41438000},{0x4143a000},{0x4143c000},{0x4143e000}, -{0x41440000},{0x41442000},{0x41444000},{0x41446000},{0x41448000},{0x4144a000},{0x4144c000},{0x4144e000},{0x41450000},{0x41452000},{0x41454000},{0x41456000},{0x41458000},{0x4145a000},{0x4145c000},{0x4145e000},{0x41460000},{0x41462000},{0x41464000},{0x41466000},{0x41468000},{0x4146a000},{0x4146c000},{0x4146e000},{0x41470000},{0x41472000},{0x41474000},{0x41476000},{0x41478000},{0x4147a000},{0x4147c000},{0x4147e000}, -{0x41480000},{0x41482000},{0x41484000},{0x41486000},{0x41488000},{0x4148a000},{0x4148c000},{0x4148e000},{0x41490000},{0x41492000},{0x41494000},{0x41496000},{0x41498000},{0x4149a000},{0x4149c000},{0x4149e000},{0x414a0000},{0x414a2000},{0x414a4000},{0x414a6000},{0x414a8000},{0x414aa000},{0x414ac000},{0x414ae000},{0x414b0000},{0x414b2000},{0x414b4000},{0x414b6000},{0x414b8000},{0x414ba000},{0x414bc000},{0x414be000}, -{0x414c0000},{0x414c2000},{0x414c4000},{0x414c6000},{0x414c8000},{0x414ca000},{0x414cc000},{0x414ce000},{0x414d0000},{0x414d2000},{0x414d4000},{0x414d6000},{0x414d8000},{0x414da000},{0x414dc000},{0x414de000},{0x414e0000},{0x414e2000},{0x414e4000},{0x414e6000},{0x414e8000},{0x414ea000},{0x414ec000},{0x414ee000},{0x414f0000},{0x414f2000},{0x414f4000},{0x414f6000},{0x414f8000},{0x414fa000},{0x414fc000},{0x414fe000}, -{0x41500000},{0x41502000},{0x41504000},{0x41506000},{0x41508000},{0x4150a000},{0x4150c000},{0x4150e000},{0x41510000},{0x41512000},{0x41514000},{0x41516000},{0x41518000},{0x4151a000},{0x4151c000},{0x4151e000},{0x41520000},{0x41522000},{0x41524000},{0x41526000},{0x41528000},{0x4152a000},{0x4152c000},{0x4152e000},{0x41530000},{0x41532000},{0x41534000},{0x41536000},{0x41538000},{0x4153a000},{0x4153c000},{0x4153e000}, -{0x41540000},{0x41542000},{0x41544000},{0x41546000},{0x41548000},{0x4154a000},{0x4154c000},{0x4154e000},{0x41550000},{0x41552000},{0x41554000},{0x41556000},{0x41558000},{0x4155a000},{0x4155c000},{0x4155e000},{0x41560000},{0x41562000},{0x41564000},{0x41566000},{0x41568000},{0x4156a000},{0x4156c000},{0x4156e000},{0x41570000},{0x41572000},{0x41574000},{0x41576000},{0x41578000},{0x4157a000},{0x4157c000},{0x4157e000}, -{0x41580000},{0x41582000},{0x41584000},{0x41586000},{0x41588000},{0x4158a000},{0x4158c000},{0x4158e000},{0x41590000},{0x41592000},{0x41594000},{0x41596000},{0x41598000},{0x4159a000},{0x4159c000},{0x4159e000},{0x415a0000},{0x415a2000},{0x415a4000},{0x415a6000},{0x415a8000},{0x415aa000},{0x415ac000},{0x415ae000},{0x415b0000},{0x415b2000},{0x415b4000},{0x415b6000},{0x415b8000},{0x415ba000},{0x415bc000},{0x415be000}, -{0x415c0000},{0x415c2000},{0x415c4000},{0x415c6000},{0x415c8000},{0x415ca000},{0x415cc000},{0x415ce000},{0x415d0000},{0x415d2000},{0x415d4000},{0x415d6000},{0x415d8000},{0x415da000},{0x415dc000},{0x415de000},{0x415e0000},{0x415e2000},{0x415e4000},{0x415e6000},{0x415e8000},{0x415ea000},{0x415ec000},{0x415ee000},{0x415f0000},{0x415f2000},{0x415f4000},{0x415f6000},{0x415f8000},{0x415fa000},{0x415fc000},{0x415fe000}, -{0x41600000},{0x41602000},{0x41604000},{0x41606000},{0x41608000},{0x4160a000},{0x4160c000},{0x4160e000},{0x41610000},{0x41612000},{0x41614000},{0x41616000},{0x41618000},{0x4161a000},{0x4161c000},{0x4161e000},{0x41620000},{0x41622000},{0x41624000},{0x41626000},{0x41628000},{0x4162a000},{0x4162c000},{0x4162e000},{0x41630000},{0x41632000},{0x41634000},{0x41636000},{0x41638000},{0x4163a000},{0x4163c000},{0x4163e000}, -{0x41640000},{0x41642000},{0x41644000},{0x41646000},{0x41648000},{0x4164a000},{0x4164c000},{0x4164e000},{0x41650000},{0x41652000},{0x41654000},{0x41656000},{0x41658000},{0x4165a000},{0x4165c000},{0x4165e000},{0x41660000},{0x41662000},{0x41664000},{0x41666000},{0x41668000},{0x4166a000},{0x4166c000},{0x4166e000},{0x41670000},{0x41672000},{0x41674000},{0x41676000},{0x41678000},{0x4167a000},{0x4167c000},{0x4167e000}, -{0x41680000},{0x41682000},{0x41684000},{0x41686000},{0x41688000},{0x4168a000},{0x4168c000},{0x4168e000},{0x41690000},{0x41692000},{0x41694000},{0x41696000},{0x41698000},{0x4169a000},{0x4169c000},{0x4169e000},{0x416a0000},{0x416a2000},{0x416a4000},{0x416a6000},{0x416a8000},{0x416aa000},{0x416ac000},{0x416ae000},{0x416b0000},{0x416b2000},{0x416b4000},{0x416b6000},{0x416b8000},{0x416ba000},{0x416bc000},{0x416be000}, -{0x416c0000},{0x416c2000},{0x416c4000},{0x416c6000},{0x416c8000},{0x416ca000},{0x416cc000},{0x416ce000},{0x416d0000},{0x416d2000},{0x416d4000},{0x416d6000},{0x416d8000},{0x416da000},{0x416dc000},{0x416de000},{0x416e0000},{0x416e2000},{0x416e4000},{0x416e6000},{0x416e8000},{0x416ea000},{0x416ec000},{0x416ee000},{0x416f0000},{0x416f2000},{0x416f4000},{0x416f6000},{0x416f8000},{0x416fa000},{0x416fc000},{0x416fe000}, -{0x41700000},{0x41702000},{0x41704000},{0x41706000},{0x41708000},{0x4170a000},{0x4170c000},{0x4170e000},{0x41710000},{0x41712000},{0x41714000},{0x41716000},{0x41718000},{0x4171a000},{0x4171c000},{0x4171e000},{0x41720000},{0x41722000},{0x41724000},{0x41726000},{0x41728000},{0x4172a000},{0x4172c000},{0x4172e000},{0x41730000},{0x41732000},{0x41734000},{0x41736000},{0x41738000},{0x4173a000},{0x4173c000},{0x4173e000}, -{0x41740000},{0x41742000},{0x41744000},{0x41746000},{0x41748000},{0x4174a000},{0x4174c000},{0x4174e000},{0x41750000},{0x41752000},{0x41754000},{0x41756000},{0x41758000},{0x4175a000},{0x4175c000},{0x4175e000},{0x41760000},{0x41762000},{0x41764000},{0x41766000},{0x41768000},{0x4176a000},{0x4176c000},{0x4176e000},{0x41770000},{0x41772000},{0x41774000},{0x41776000},{0x41778000},{0x4177a000},{0x4177c000},{0x4177e000}, -{0x41780000},{0x41782000},{0x41784000},{0x41786000},{0x41788000},{0x4178a000},{0x4178c000},{0x4178e000},{0x41790000},{0x41792000},{0x41794000},{0x41796000},{0x41798000},{0x4179a000},{0x4179c000},{0x4179e000},{0x417a0000},{0x417a2000},{0x417a4000},{0x417a6000},{0x417a8000},{0x417aa000},{0x417ac000},{0x417ae000},{0x417b0000},{0x417b2000},{0x417b4000},{0x417b6000},{0x417b8000},{0x417ba000},{0x417bc000},{0x417be000}, -{0x417c0000},{0x417c2000},{0x417c4000},{0x417c6000},{0x417c8000},{0x417ca000},{0x417cc000},{0x417ce000},{0x417d0000},{0x417d2000},{0x417d4000},{0x417d6000},{0x417d8000},{0x417da000},{0x417dc000},{0x417de000},{0x417e0000},{0x417e2000},{0x417e4000},{0x417e6000},{0x417e8000},{0x417ea000},{0x417ec000},{0x417ee000},{0x417f0000},{0x417f2000},{0x417f4000},{0x417f6000},{0x417f8000},{0x417fa000},{0x417fc000},{0x417fe000}, -{0x41800000},{0x41802000},{0x41804000},{0x41806000},{0x41808000},{0x4180a000},{0x4180c000},{0x4180e000},{0x41810000},{0x41812000},{0x41814000},{0x41816000},{0x41818000},{0x4181a000},{0x4181c000},{0x4181e000},{0x41820000},{0x41822000},{0x41824000},{0x41826000},{0x41828000},{0x4182a000},{0x4182c000},{0x4182e000},{0x41830000},{0x41832000},{0x41834000},{0x41836000},{0x41838000},{0x4183a000},{0x4183c000},{0x4183e000}, -{0x41840000},{0x41842000},{0x41844000},{0x41846000},{0x41848000},{0x4184a000},{0x4184c000},{0x4184e000},{0x41850000},{0x41852000},{0x41854000},{0x41856000},{0x41858000},{0x4185a000},{0x4185c000},{0x4185e000},{0x41860000},{0x41862000},{0x41864000},{0x41866000},{0x41868000},{0x4186a000},{0x4186c000},{0x4186e000},{0x41870000},{0x41872000},{0x41874000},{0x41876000},{0x41878000},{0x4187a000},{0x4187c000},{0x4187e000}, -{0x41880000},{0x41882000},{0x41884000},{0x41886000},{0x41888000},{0x4188a000},{0x4188c000},{0x4188e000},{0x41890000},{0x41892000},{0x41894000},{0x41896000},{0x41898000},{0x4189a000},{0x4189c000},{0x4189e000},{0x418a0000},{0x418a2000},{0x418a4000},{0x418a6000},{0x418a8000},{0x418aa000},{0x418ac000},{0x418ae000},{0x418b0000},{0x418b2000},{0x418b4000},{0x418b6000},{0x418b8000},{0x418ba000},{0x418bc000},{0x418be000}, -{0x418c0000},{0x418c2000},{0x418c4000},{0x418c6000},{0x418c8000},{0x418ca000},{0x418cc000},{0x418ce000},{0x418d0000},{0x418d2000},{0x418d4000},{0x418d6000},{0x418d8000},{0x418da000},{0x418dc000},{0x418de000},{0x418e0000},{0x418e2000},{0x418e4000},{0x418e6000},{0x418e8000},{0x418ea000},{0x418ec000},{0x418ee000},{0x418f0000},{0x418f2000},{0x418f4000},{0x418f6000},{0x418f8000},{0x418fa000},{0x418fc000},{0x418fe000}, -{0x41900000},{0x41902000},{0x41904000},{0x41906000},{0x41908000},{0x4190a000},{0x4190c000},{0x4190e000},{0x41910000},{0x41912000},{0x41914000},{0x41916000},{0x41918000},{0x4191a000},{0x4191c000},{0x4191e000},{0x41920000},{0x41922000},{0x41924000},{0x41926000},{0x41928000},{0x4192a000},{0x4192c000},{0x4192e000},{0x41930000},{0x41932000},{0x41934000},{0x41936000},{0x41938000},{0x4193a000},{0x4193c000},{0x4193e000}, -{0x41940000},{0x41942000},{0x41944000},{0x41946000},{0x41948000},{0x4194a000},{0x4194c000},{0x4194e000},{0x41950000},{0x41952000},{0x41954000},{0x41956000},{0x41958000},{0x4195a000},{0x4195c000},{0x4195e000},{0x41960000},{0x41962000},{0x41964000},{0x41966000},{0x41968000},{0x4196a000},{0x4196c000},{0x4196e000},{0x41970000},{0x41972000},{0x41974000},{0x41976000},{0x41978000},{0x4197a000},{0x4197c000},{0x4197e000}, -{0x41980000},{0x41982000},{0x41984000},{0x41986000},{0x41988000},{0x4198a000},{0x4198c000},{0x4198e000},{0x41990000},{0x41992000},{0x41994000},{0x41996000},{0x41998000},{0x4199a000},{0x4199c000},{0x4199e000},{0x419a0000},{0x419a2000},{0x419a4000},{0x419a6000},{0x419a8000},{0x419aa000},{0x419ac000},{0x419ae000},{0x419b0000},{0x419b2000},{0x419b4000},{0x419b6000},{0x419b8000},{0x419ba000},{0x419bc000},{0x419be000}, -{0x419c0000},{0x419c2000},{0x419c4000},{0x419c6000},{0x419c8000},{0x419ca000},{0x419cc000},{0x419ce000},{0x419d0000},{0x419d2000},{0x419d4000},{0x419d6000},{0x419d8000},{0x419da000},{0x419dc000},{0x419de000},{0x419e0000},{0x419e2000},{0x419e4000},{0x419e6000},{0x419e8000},{0x419ea000},{0x419ec000},{0x419ee000},{0x419f0000},{0x419f2000},{0x419f4000},{0x419f6000},{0x419f8000},{0x419fa000},{0x419fc000},{0x419fe000}, -{0x41a00000},{0x41a02000},{0x41a04000},{0x41a06000},{0x41a08000},{0x41a0a000},{0x41a0c000},{0x41a0e000},{0x41a10000},{0x41a12000},{0x41a14000},{0x41a16000},{0x41a18000},{0x41a1a000},{0x41a1c000},{0x41a1e000},{0x41a20000},{0x41a22000},{0x41a24000},{0x41a26000},{0x41a28000},{0x41a2a000},{0x41a2c000},{0x41a2e000},{0x41a30000},{0x41a32000},{0x41a34000},{0x41a36000},{0x41a38000},{0x41a3a000},{0x41a3c000},{0x41a3e000}, -{0x41a40000},{0x41a42000},{0x41a44000},{0x41a46000},{0x41a48000},{0x41a4a000},{0x41a4c000},{0x41a4e000},{0x41a50000},{0x41a52000},{0x41a54000},{0x41a56000},{0x41a58000},{0x41a5a000},{0x41a5c000},{0x41a5e000},{0x41a60000},{0x41a62000},{0x41a64000},{0x41a66000},{0x41a68000},{0x41a6a000},{0x41a6c000},{0x41a6e000},{0x41a70000},{0x41a72000},{0x41a74000},{0x41a76000},{0x41a78000},{0x41a7a000},{0x41a7c000},{0x41a7e000}, -{0x41a80000},{0x41a82000},{0x41a84000},{0x41a86000},{0x41a88000},{0x41a8a000},{0x41a8c000},{0x41a8e000},{0x41a90000},{0x41a92000},{0x41a94000},{0x41a96000},{0x41a98000},{0x41a9a000},{0x41a9c000},{0x41a9e000},{0x41aa0000},{0x41aa2000},{0x41aa4000},{0x41aa6000},{0x41aa8000},{0x41aaa000},{0x41aac000},{0x41aae000},{0x41ab0000},{0x41ab2000},{0x41ab4000},{0x41ab6000},{0x41ab8000},{0x41aba000},{0x41abc000},{0x41abe000}, -{0x41ac0000},{0x41ac2000},{0x41ac4000},{0x41ac6000},{0x41ac8000},{0x41aca000},{0x41acc000},{0x41ace000},{0x41ad0000},{0x41ad2000},{0x41ad4000},{0x41ad6000},{0x41ad8000},{0x41ada000},{0x41adc000},{0x41ade000},{0x41ae0000},{0x41ae2000},{0x41ae4000},{0x41ae6000},{0x41ae8000},{0x41aea000},{0x41aec000},{0x41aee000},{0x41af0000},{0x41af2000},{0x41af4000},{0x41af6000},{0x41af8000},{0x41afa000},{0x41afc000},{0x41afe000}, -{0x41b00000},{0x41b02000},{0x41b04000},{0x41b06000},{0x41b08000},{0x41b0a000},{0x41b0c000},{0x41b0e000},{0x41b10000},{0x41b12000},{0x41b14000},{0x41b16000},{0x41b18000},{0x41b1a000},{0x41b1c000},{0x41b1e000},{0x41b20000},{0x41b22000},{0x41b24000},{0x41b26000},{0x41b28000},{0x41b2a000},{0x41b2c000},{0x41b2e000},{0x41b30000},{0x41b32000},{0x41b34000},{0x41b36000},{0x41b38000},{0x41b3a000},{0x41b3c000},{0x41b3e000}, -{0x41b40000},{0x41b42000},{0x41b44000},{0x41b46000},{0x41b48000},{0x41b4a000},{0x41b4c000},{0x41b4e000},{0x41b50000},{0x41b52000},{0x41b54000},{0x41b56000},{0x41b58000},{0x41b5a000},{0x41b5c000},{0x41b5e000},{0x41b60000},{0x41b62000},{0x41b64000},{0x41b66000},{0x41b68000},{0x41b6a000},{0x41b6c000},{0x41b6e000},{0x41b70000},{0x41b72000},{0x41b74000},{0x41b76000},{0x41b78000},{0x41b7a000},{0x41b7c000},{0x41b7e000}, -{0x41b80000},{0x41b82000},{0x41b84000},{0x41b86000},{0x41b88000},{0x41b8a000},{0x41b8c000},{0x41b8e000},{0x41b90000},{0x41b92000},{0x41b94000},{0x41b96000},{0x41b98000},{0x41b9a000},{0x41b9c000},{0x41b9e000},{0x41ba0000},{0x41ba2000},{0x41ba4000},{0x41ba6000},{0x41ba8000},{0x41baa000},{0x41bac000},{0x41bae000},{0x41bb0000},{0x41bb2000},{0x41bb4000},{0x41bb6000},{0x41bb8000},{0x41bba000},{0x41bbc000},{0x41bbe000}, -{0x41bc0000},{0x41bc2000},{0x41bc4000},{0x41bc6000},{0x41bc8000},{0x41bca000},{0x41bcc000},{0x41bce000},{0x41bd0000},{0x41bd2000},{0x41bd4000},{0x41bd6000},{0x41bd8000},{0x41bda000},{0x41bdc000},{0x41bde000},{0x41be0000},{0x41be2000},{0x41be4000},{0x41be6000},{0x41be8000},{0x41bea000},{0x41bec000},{0x41bee000},{0x41bf0000},{0x41bf2000},{0x41bf4000},{0x41bf6000},{0x41bf8000},{0x41bfa000},{0x41bfc000},{0x41bfe000}, -{0x41c00000},{0x41c02000},{0x41c04000},{0x41c06000},{0x41c08000},{0x41c0a000},{0x41c0c000},{0x41c0e000},{0x41c10000},{0x41c12000},{0x41c14000},{0x41c16000},{0x41c18000},{0x41c1a000},{0x41c1c000},{0x41c1e000},{0x41c20000},{0x41c22000},{0x41c24000},{0x41c26000},{0x41c28000},{0x41c2a000},{0x41c2c000},{0x41c2e000},{0x41c30000},{0x41c32000},{0x41c34000},{0x41c36000},{0x41c38000},{0x41c3a000},{0x41c3c000},{0x41c3e000}, -{0x41c40000},{0x41c42000},{0x41c44000},{0x41c46000},{0x41c48000},{0x41c4a000},{0x41c4c000},{0x41c4e000},{0x41c50000},{0x41c52000},{0x41c54000},{0x41c56000},{0x41c58000},{0x41c5a000},{0x41c5c000},{0x41c5e000},{0x41c60000},{0x41c62000},{0x41c64000},{0x41c66000},{0x41c68000},{0x41c6a000},{0x41c6c000},{0x41c6e000},{0x41c70000},{0x41c72000},{0x41c74000},{0x41c76000},{0x41c78000},{0x41c7a000},{0x41c7c000},{0x41c7e000}, -{0x41c80000},{0x41c82000},{0x41c84000},{0x41c86000},{0x41c88000},{0x41c8a000},{0x41c8c000},{0x41c8e000},{0x41c90000},{0x41c92000},{0x41c94000},{0x41c96000},{0x41c98000},{0x41c9a000},{0x41c9c000},{0x41c9e000},{0x41ca0000},{0x41ca2000},{0x41ca4000},{0x41ca6000},{0x41ca8000},{0x41caa000},{0x41cac000},{0x41cae000},{0x41cb0000},{0x41cb2000},{0x41cb4000},{0x41cb6000},{0x41cb8000},{0x41cba000},{0x41cbc000},{0x41cbe000}, -{0x41cc0000},{0x41cc2000},{0x41cc4000},{0x41cc6000},{0x41cc8000},{0x41cca000},{0x41ccc000},{0x41cce000},{0x41cd0000},{0x41cd2000},{0x41cd4000},{0x41cd6000},{0x41cd8000},{0x41cda000},{0x41cdc000},{0x41cde000},{0x41ce0000},{0x41ce2000},{0x41ce4000},{0x41ce6000},{0x41ce8000},{0x41cea000},{0x41cec000},{0x41cee000},{0x41cf0000},{0x41cf2000},{0x41cf4000},{0x41cf6000},{0x41cf8000},{0x41cfa000},{0x41cfc000},{0x41cfe000}, -{0x41d00000},{0x41d02000},{0x41d04000},{0x41d06000},{0x41d08000},{0x41d0a000},{0x41d0c000},{0x41d0e000},{0x41d10000},{0x41d12000},{0x41d14000},{0x41d16000},{0x41d18000},{0x41d1a000},{0x41d1c000},{0x41d1e000},{0x41d20000},{0x41d22000},{0x41d24000},{0x41d26000},{0x41d28000},{0x41d2a000},{0x41d2c000},{0x41d2e000},{0x41d30000},{0x41d32000},{0x41d34000},{0x41d36000},{0x41d38000},{0x41d3a000},{0x41d3c000},{0x41d3e000}, -{0x41d40000},{0x41d42000},{0x41d44000},{0x41d46000},{0x41d48000},{0x41d4a000},{0x41d4c000},{0x41d4e000},{0x41d50000},{0x41d52000},{0x41d54000},{0x41d56000},{0x41d58000},{0x41d5a000},{0x41d5c000},{0x41d5e000},{0x41d60000},{0x41d62000},{0x41d64000},{0x41d66000},{0x41d68000},{0x41d6a000},{0x41d6c000},{0x41d6e000},{0x41d70000},{0x41d72000},{0x41d74000},{0x41d76000},{0x41d78000},{0x41d7a000},{0x41d7c000},{0x41d7e000}, -{0x41d80000},{0x41d82000},{0x41d84000},{0x41d86000},{0x41d88000},{0x41d8a000},{0x41d8c000},{0x41d8e000},{0x41d90000},{0x41d92000},{0x41d94000},{0x41d96000},{0x41d98000},{0x41d9a000},{0x41d9c000},{0x41d9e000},{0x41da0000},{0x41da2000},{0x41da4000},{0x41da6000},{0x41da8000},{0x41daa000},{0x41dac000},{0x41dae000},{0x41db0000},{0x41db2000},{0x41db4000},{0x41db6000},{0x41db8000},{0x41dba000},{0x41dbc000},{0x41dbe000}, -{0x41dc0000},{0x41dc2000},{0x41dc4000},{0x41dc6000},{0x41dc8000},{0x41dca000},{0x41dcc000},{0x41dce000},{0x41dd0000},{0x41dd2000},{0x41dd4000},{0x41dd6000},{0x41dd8000},{0x41dda000},{0x41ddc000},{0x41dde000},{0x41de0000},{0x41de2000},{0x41de4000},{0x41de6000},{0x41de8000},{0x41dea000},{0x41dec000},{0x41dee000},{0x41df0000},{0x41df2000},{0x41df4000},{0x41df6000},{0x41df8000},{0x41dfa000},{0x41dfc000},{0x41dfe000}, -{0x41e00000},{0x41e02000},{0x41e04000},{0x41e06000},{0x41e08000},{0x41e0a000},{0x41e0c000},{0x41e0e000},{0x41e10000},{0x41e12000},{0x41e14000},{0x41e16000},{0x41e18000},{0x41e1a000},{0x41e1c000},{0x41e1e000},{0x41e20000},{0x41e22000},{0x41e24000},{0x41e26000},{0x41e28000},{0x41e2a000},{0x41e2c000},{0x41e2e000},{0x41e30000},{0x41e32000},{0x41e34000},{0x41e36000},{0x41e38000},{0x41e3a000},{0x41e3c000},{0x41e3e000}, -{0x41e40000},{0x41e42000},{0x41e44000},{0x41e46000},{0x41e48000},{0x41e4a000},{0x41e4c000},{0x41e4e000},{0x41e50000},{0x41e52000},{0x41e54000},{0x41e56000},{0x41e58000},{0x41e5a000},{0x41e5c000},{0x41e5e000},{0x41e60000},{0x41e62000},{0x41e64000},{0x41e66000},{0x41e68000},{0x41e6a000},{0x41e6c000},{0x41e6e000},{0x41e70000},{0x41e72000},{0x41e74000},{0x41e76000},{0x41e78000},{0x41e7a000},{0x41e7c000},{0x41e7e000}, -{0x41e80000},{0x41e82000},{0x41e84000},{0x41e86000},{0x41e88000},{0x41e8a000},{0x41e8c000},{0x41e8e000},{0x41e90000},{0x41e92000},{0x41e94000},{0x41e96000},{0x41e98000},{0x41e9a000},{0x41e9c000},{0x41e9e000},{0x41ea0000},{0x41ea2000},{0x41ea4000},{0x41ea6000},{0x41ea8000},{0x41eaa000},{0x41eac000},{0x41eae000},{0x41eb0000},{0x41eb2000},{0x41eb4000},{0x41eb6000},{0x41eb8000},{0x41eba000},{0x41ebc000},{0x41ebe000}, -{0x41ec0000},{0x41ec2000},{0x41ec4000},{0x41ec6000},{0x41ec8000},{0x41eca000},{0x41ecc000},{0x41ece000},{0x41ed0000},{0x41ed2000},{0x41ed4000},{0x41ed6000},{0x41ed8000},{0x41eda000},{0x41edc000},{0x41ede000},{0x41ee0000},{0x41ee2000},{0x41ee4000},{0x41ee6000},{0x41ee8000},{0x41eea000},{0x41eec000},{0x41eee000},{0x41ef0000},{0x41ef2000},{0x41ef4000},{0x41ef6000},{0x41ef8000},{0x41efa000},{0x41efc000},{0x41efe000}, -{0x41f00000},{0x41f02000},{0x41f04000},{0x41f06000},{0x41f08000},{0x41f0a000},{0x41f0c000},{0x41f0e000},{0x41f10000},{0x41f12000},{0x41f14000},{0x41f16000},{0x41f18000},{0x41f1a000},{0x41f1c000},{0x41f1e000},{0x41f20000},{0x41f22000},{0x41f24000},{0x41f26000},{0x41f28000},{0x41f2a000},{0x41f2c000},{0x41f2e000},{0x41f30000},{0x41f32000},{0x41f34000},{0x41f36000},{0x41f38000},{0x41f3a000},{0x41f3c000},{0x41f3e000}, -{0x41f40000},{0x41f42000},{0x41f44000},{0x41f46000},{0x41f48000},{0x41f4a000},{0x41f4c000},{0x41f4e000},{0x41f50000},{0x41f52000},{0x41f54000},{0x41f56000},{0x41f58000},{0x41f5a000},{0x41f5c000},{0x41f5e000},{0x41f60000},{0x41f62000},{0x41f64000},{0x41f66000},{0x41f68000},{0x41f6a000},{0x41f6c000},{0x41f6e000},{0x41f70000},{0x41f72000},{0x41f74000},{0x41f76000},{0x41f78000},{0x41f7a000},{0x41f7c000},{0x41f7e000}, -{0x41f80000},{0x41f82000},{0x41f84000},{0x41f86000},{0x41f88000},{0x41f8a000},{0x41f8c000},{0x41f8e000},{0x41f90000},{0x41f92000},{0x41f94000},{0x41f96000},{0x41f98000},{0x41f9a000},{0x41f9c000},{0x41f9e000},{0x41fa0000},{0x41fa2000},{0x41fa4000},{0x41fa6000},{0x41fa8000},{0x41faa000},{0x41fac000},{0x41fae000},{0x41fb0000},{0x41fb2000},{0x41fb4000},{0x41fb6000},{0x41fb8000},{0x41fba000},{0x41fbc000},{0x41fbe000}, -{0x41fc0000},{0x41fc2000},{0x41fc4000},{0x41fc6000},{0x41fc8000},{0x41fca000},{0x41fcc000},{0x41fce000},{0x41fd0000},{0x41fd2000},{0x41fd4000},{0x41fd6000},{0x41fd8000},{0x41fda000},{0x41fdc000},{0x41fde000},{0x41fe0000},{0x41fe2000},{0x41fe4000},{0x41fe6000},{0x41fe8000},{0x41fea000},{0x41fec000},{0x41fee000},{0x41ff0000},{0x41ff2000},{0x41ff4000},{0x41ff6000},{0x41ff8000},{0x41ffa000},{0x41ffc000},{0x41ffe000}, -{0x42000000},{0x42002000},{0x42004000},{0x42006000},{0x42008000},{0x4200a000},{0x4200c000},{0x4200e000},{0x42010000},{0x42012000},{0x42014000},{0x42016000},{0x42018000},{0x4201a000},{0x4201c000},{0x4201e000},{0x42020000},{0x42022000},{0x42024000},{0x42026000},{0x42028000},{0x4202a000},{0x4202c000},{0x4202e000},{0x42030000},{0x42032000},{0x42034000},{0x42036000},{0x42038000},{0x4203a000},{0x4203c000},{0x4203e000}, -{0x42040000},{0x42042000},{0x42044000},{0x42046000},{0x42048000},{0x4204a000},{0x4204c000},{0x4204e000},{0x42050000},{0x42052000},{0x42054000},{0x42056000},{0x42058000},{0x4205a000},{0x4205c000},{0x4205e000},{0x42060000},{0x42062000},{0x42064000},{0x42066000},{0x42068000},{0x4206a000},{0x4206c000},{0x4206e000},{0x42070000},{0x42072000},{0x42074000},{0x42076000},{0x42078000},{0x4207a000},{0x4207c000},{0x4207e000}, -{0x42080000},{0x42082000},{0x42084000},{0x42086000},{0x42088000},{0x4208a000},{0x4208c000},{0x4208e000},{0x42090000},{0x42092000},{0x42094000},{0x42096000},{0x42098000},{0x4209a000},{0x4209c000},{0x4209e000},{0x420a0000},{0x420a2000},{0x420a4000},{0x420a6000},{0x420a8000},{0x420aa000},{0x420ac000},{0x420ae000},{0x420b0000},{0x420b2000},{0x420b4000},{0x420b6000},{0x420b8000},{0x420ba000},{0x420bc000},{0x420be000}, -{0x420c0000},{0x420c2000},{0x420c4000},{0x420c6000},{0x420c8000},{0x420ca000},{0x420cc000},{0x420ce000},{0x420d0000},{0x420d2000},{0x420d4000},{0x420d6000},{0x420d8000},{0x420da000},{0x420dc000},{0x420de000},{0x420e0000},{0x420e2000},{0x420e4000},{0x420e6000},{0x420e8000},{0x420ea000},{0x420ec000},{0x420ee000},{0x420f0000},{0x420f2000},{0x420f4000},{0x420f6000},{0x420f8000},{0x420fa000},{0x420fc000},{0x420fe000}, -{0x42100000},{0x42102000},{0x42104000},{0x42106000},{0x42108000},{0x4210a000},{0x4210c000},{0x4210e000},{0x42110000},{0x42112000},{0x42114000},{0x42116000},{0x42118000},{0x4211a000},{0x4211c000},{0x4211e000},{0x42120000},{0x42122000},{0x42124000},{0x42126000},{0x42128000},{0x4212a000},{0x4212c000},{0x4212e000},{0x42130000},{0x42132000},{0x42134000},{0x42136000},{0x42138000},{0x4213a000},{0x4213c000},{0x4213e000}, -{0x42140000},{0x42142000},{0x42144000},{0x42146000},{0x42148000},{0x4214a000},{0x4214c000},{0x4214e000},{0x42150000},{0x42152000},{0x42154000},{0x42156000},{0x42158000},{0x4215a000},{0x4215c000},{0x4215e000},{0x42160000},{0x42162000},{0x42164000},{0x42166000},{0x42168000},{0x4216a000},{0x4216c000},{0x4216e000},{0x42170000},{0x42172000},{0x42174000},{0x42176000},{0x42178000},{0x4217a000},{0x4217c000},{0x4217e000}, -{0x42180000},{0x42182000},{0x42184000},{0x42186000},{0x42188000},{0x4218a000},{0x4218c000},{0x4218e000},{0x42190000},{0x42192000},{0x42194000},{0x42196000},{0x42198000},{0x4219a000},{0x4219c000},{0x4219e000},{0x421a0000},{0x421a2000},{0x421a4000},{0x421a6000},{0x421a8000},{0x421aa000},{0x421ac000},{0x421ae000},{0x421b0000},{0x421b2000},{0x421b4000},{0x421b6000},{0x421b8000},{0x421ba000},{0x421bc000},{0x421be000}, -{0x421c0000},{0x421c2000},{0x421c4000},{0x421c6000},{0x421c8000},{0x421ca000},{0x421cc000},{0x421ce000},{0x421d0000},{0x421d2000},{0x421d4000},{0x421d6000},{0x421d8000},{0x421da000},{0x421dc000},{0x421de000},{0x421e0000},{0x421e2000},{0x421e4000},{0x421e6000},{0x421e8000},{0x421ea000},{0x421ec000},{0x421ee000},{0x421f0000},{0x421f2000},{0x421f4000},{0x421f6000},{0x421f8000},{0x421fa000},{0x421fc000},{0x421fe000}, -{0x42200000},{0x42202000},{0x42204000},{0x42206000},{0x42208000},{0x4220a000},{0x4220c000},{0x4220e000},{0x42210000},{0x42212000},{0x42214000},{0x42216000},{0x42218000},{0x4221a000},{0x4221c000},{0x4221e000},{0x42220000},{0x42222000},{0x42224000},{0x42226000},{0x42228000},{0x4222a000},{0x4222c000},{0x4222e000},{0x42230000},{0x42232000},{0x42234000},{0x42236000},{0x42238000},{0x4223a000},{0x4223c000},{0x4223e000}, -{0x42240000},{0x42242000},{0x42244000},{0x42246000},{0x42248000},{0x4224a000},{0x4224c000},{0x4224e000},{0x42250000},{0x42252000},{0x42254000},{0x42256000},{0x42258000},{0x4225a000},{0x4225c000},{0x4225e000},{0x42260000},{0x42262000},{0x42264000},{0x42266000},{0x42268000},{0x4226a000},{0x4226c000},{0x4226e000},{0x42270000},{0x42272000},{0x42274000},{0x42276000},{0x42278000},{0x4227a000},{0x4227c000},{0x4227e000}, -{0x42280000},{0x42282000},{0x42284000},{0x42286000},{0x42288000},{0x4228a000},{0x4228c000},{0x4228e000},{0x42290000},{0x42292000},{0x42294000},{0x42296000},{0x42298000},{0x4229a000},{0x4229c000},{0x4229e000},{0x422a0000},{0x422a2000},{0x422a4000},{0x422a6000},{0x422a8000},{0x422aa000},{0x422ac000},{0x422ae000},{0x422b0000},{0x422b2000},{0x422b4000},{0x422b6000},{0x422b8000},{0x422ba000},{0x422bc000},{0x422be000}, -{0x422c0000},{0x422c2000},{0x422c4000},{0x422c6000},{0x422c8000},{0x422ca000},{0x422cc000},{0x422ce000},{0x422d0000},{0x422d2000},{0x422d4000},{0x422d6000},{0x422d8000},{0x422da000},{0x422dc000},{0x422de000},{0x422e0000},{0x422e2000},{0x422e4000},{0x422e6000},{0x422e8000},{0x422ea000},{0x422ec000},{0x422ee000},{0x422f0000},{0x422f2000},{0x422f4000},{0x422f6000},{0x422f8000},{0x422fa000},{0x422fc000},{0x422fe000}, -{0x42300000},{0x42302000},{0x42304000},{0x42306000},{0x42308000},{0x4230a000},{0x4230c000},{0x4230e000},{0x42310000},{0x42312000},{0x42314000},{0x42316000},{0x42318000},{0x4231a000},{0x4231c000},{0x4231e000},{0x42320000},{0x42322000},{0x42324000},{0x42326000},{0x42328000},{0x4232a000},{0x4232c000},{0x4232e000},{0x42330000},{0x42332000},{0x42334000},{0x42336000},{0x42338000},{0x4233a000},{0x4233c000},{0x4233e000}, -{0x42340000},{0x42342000},{0x42344000},{0x42346000},{0x42348000},{0x4234a000},{0x4234c000},{0x4234e000},{0x42350000},{0x42352000},{0x42354000},{0x42356000},{0x42358000},{0x4235a000},{0x4235c000},{0x4235e000},{0x42360000},{0x42362000},{0x42364000},{0x42366000},{0x42368000},{0x4236a000},{0x4236c000},{0x4236e000},{0x42370000},{0x42372000},{0x42374000},{0x42376000},{0x42378000},{0x4237a000},{0x4237c000},{0x4237e000}, -{0x42380000},{0x42382000},{0x42384000},{0x42386000},{0x42388000},{0x4238a000},{0x4238c000},{0x4238e000},{0x42390000},{0x42392000},{0x42394000},{0x42396000},{0x42398000},{0x4239a000},{0x4239c000},{0x4239e000},{0x423a0000},{0x423a2000},{0x423a4000},{0x423a6000},{0x423a8000},{0x423aa000},{0x423ac000},{0x423ae000},{0x423b0000},{0x423b2000},{0x423b4000},{0x423b6000},{0x423b8000},{0x423ba000},{0x423bc000},{0x423be000}, -{0x423c0000},{0x423c2000},{0x423c4000},{0x423c6000},{0x423c8000},{0x423ca000},{0x423cc000},{0x423ce000},{0x423d0000},{0x423d2000},{0x423d4000},{0x423d6000},{0x423d8000},{0x423da000},{0x423dc000},{0x423de000},{0x423e0000},{0x423e2000},{0x423e4000},{0x423e6000},{0x423e8000},{0x423ea000},{0x423ec000},{0x423ee000},{0x423f0000},{0x423f2000},{0x423f4000},{0x423f6000},{0x423f8000},{0x423fa000},{0x423fc000},{0x423fe000}, -{0x42400000},{0x42402000},{0x42404000},{0x42406000},{0x42408000},{0x4240a000},{0x4240c000},{0x4240e000},{0x42410000},{0x42412000},{0x42414000},{0x42416000},{0x42418000},{0x4241a000},{0x4241c000},{0x4241e000},{0x42420000},{0x42422000},{0x42424000},{0x42426000},{0x42428000},{0x4242a000},{0x4242c000},{0x4242e000},{0x42430000},{0x42432000},{0x42434000},{0x42436000},{0x42438000},{0x4243a000},{0x4243c000},{0x4243e000}, -{0x42440000},{0x42442000},{0x42444000},{0x42446000},{0x42448000},{0x4244a000},{0x4244c000},{0x4244e000},{0x42450000},{0x42452000},{0x42454000},{0x42456000},{0x42458000},{0x4245a000},{0x4245c000},{0x4245e000},{0x42460000},{0x42462000},{0x42464000},{0x42466000},{0x42468000},{0x4246a000},{0x4246c000},{0x4246e000},{0x42470000},{0x42472000},{0x42474000},{0x42476000},{0x42478000},{0x4247a000},{0x4247c000},{0x4247e000}, -{0x42480000},{0x42482000},{0x42484000},{0x42486000},{0x42488000},{0x4248a000},{0x4248c000},{0x4248e000},{0x42490000},{0x42492000},{0x42494000},{0x42496000},{0x42498000},{0x4249a000},{0x4249c000},{0x4249e000},{0x424a0000},{0x424a2000},{0x424a4000},{0x424a6000},{0x424a8000},{0x424aa000},{0x424ac000},{0x424ae000},{0x424b0000},{0x424b2000},{0x424b4000},{0x424b6000},{0x424b8000},{0x424ba000},{0x424bc000},{0x424be000}, -{0x424c0000},{0x424c2000},{0x424c4000},{0x424c6000},{0x424c8000},{0x424ca000},{0x424cc000},{0x424ce000},{0x424d0000},{0x424d2000},{0x424d4000},{0x424d6000},{0x424d8000},{0x424da000},{0x424dc000},{0x424de000},{0x424e0000},{0x424e2000},{0x424e4000},{0x424e6000},{0x424e8000},{0x424ea000},{0x424ec000},{0x424ee000},{0x424f0000},{0x424f2000},{0x424f4000},{0x424f6000},{0x424f8000},{0x424fa000},{0x424fc000},{0x424fe000}, -{0x42500000},{0x42502000},{0x42504000},{0x42506000},{0x42508000},{0x4250a000},{0x4250c000},{0x4250e000},{0x42510000},{0x42512000},{0x42514000},{0x42516000},{0x42518000},{0x4251a000},{0x4251c000},{0x4251e000},{0x42520000},{0x42522000},{0x42524000},{0x42526000},{0x42528000},{0x4252a000},{0x4252c000},{0x4252e000},{0x42530000},{0x42532000},{0x42534000},{0x42536000},{0x42538000},{0x4253a000},{0x4253c000},{0x4253e000}, -{0x42540000},{0x42542000},{0x42544000},{0x42546000},{0x42548000},{0x4254a000},{0x4254c000},{0x4254e000},{0x42550000},{0x42552000},{0x42554000},{0x42556000},{0x42558000},{0x4255a000},{0x4255c000},{0x4255e000},{0x42560000},{0x42562000},{0x42564000},{0x42566000},{0x42568000},{0x4256a000},{0x4256c000},{0x4256e000},{0x42570000},{0x42572000},{0x42574000},{0x42576000},{0x42578000},{0x4257a000},{0x4257c000},{0x4257e000}, -{0x42580000},{0x42582000},{0x42584000},{0x42586000},{0x42588000},{0x4258a000},{0x4258c000},{0x4258e000},{0x42590000},{0x42592000},{0x42594000},{0x42596000},{0x42598000},{0x4259a000},{0x4259c000},{0x4259e000},{0x425a0000},{0x425a2000},{0x425a4000},{0x425a6000},{0x425a8000},{0x425aa000},{0x425ac000},{0x425ae000},{0x425b0000},{0x425b2000},{0x425b4000},{0x425b6000},{0x425b8000},{0x425ba000},{0x425bc000},{0x425be000}, -{0x425c0000},{0x425c2000},{0x425c4000},{0x425c6000},{0x425c8000},{0x425ca000},{0x425cc000},{0x425ce000},{0x425d0000},{0x425d2000},{0x425d4000},{0x425d6000},{0x425d8000},{0x425da000},{0x425dc000},{0x425de000},{0x425e0000},{0x425e2000},{0x425e4000},{0x425e6000},{0x425e8000},{0x425ea000},{0x425ec000},{0x425ee000},{0x425f0000},{0x425f2000},{0x425f4000},{0x425f6000},{0x425f8000},{0x425fa000},{0x425fc000},{0x425fe000}, -{0x42600000},{0x42602000},{0x42604000},{0x42606000},{0x42608000},{0x4260a000},{0x4260c000},{0x4260e000},{0x42610000},{0x42612000},{0x42614000},{0x42616000},{0x42618000},{0x4261a000},{0x4261c000},{0x4261e000},{0x42620000},{0x42622000},{0x42624000},{0x42626000},{0x42628000},{0x4262a000},{0x4262c000},{0x4262e000},{0x42630000},{0x42632000},{0x42634000},{0x42636000},{0x42638000},{0x4263a000},{0x4263c000},{0x4263e000}, -{0x42640000},{0x42642000},{0x42644000},{0x42646000},{0x42648000},{0x4264a000},{0x4264c000},{0x4264e000},{0x42650000},{0x42652000},{0x42654000},{0x42656000},{0x42658000},{0x4265a000},{0x4265c000},{0x4265e000},{0x42660000},{0x42662000},{0x42664000},{0x42666000},{0x42668000},{0x4266a000},{0x4266c000},{0x4266e000},{0x42670000},{0x42672000},{0x42674000},{0x42676000},{0x42678000},{0x4267a000},{0x4267c000},{0x4267e000}, -{0x42680000},{0x42682000},{0x42684000},{0x42686000},{0x42688000},{0x4268a000},{0x4268c000},{0x4268e000},{0x42690000},{0x42692000},{0x42694000},{0x42696000},{0x42698000},{0x4269a000},{0x4269c000},{0x4269e000},{0x426a0000},{0x426a2000},{0x426a4000},{0x426a6000},{0x426a8000},{0x426aa000},{0x426ac000},{0x426ae000},{0x426b0000},{0x426b2000},{0x426b4000},{0x426b6000},{0x426b8000},{0x426ba000},{0x426bc000},{0x426be000}, -{0x426c0000},{0x426c2000},{0x426c4000},{0x426c6000},{0x426c8000},{0x426ca000},{0x426cc000},{0x426ce000},{0x426d0000},{0x426d2000},{0x426d4000},{0x426d6000},{0x426d8000},{0x426da000},{0x426dc000},{0x426de000},{0x426e0000},{0x426e2000},{0x426e4000},{0x426e6000},{0x426e8000},{0x426ea000},{0x426ec000},{0x426ee000},{0x426f0000},{0x426f2000},{0x426f4000},{0x426f6000},{0x426f8000},{0x426fa000},{0x426fc000},{0x426fe000}, -{0x42700000},{0x42702000},{0x42704000},{0x42706000},{0x42708000},{0x4270a000},{0x4270c000},{0x4270e000},{0x42710000},{0x42712000},{0x42714000},{0x42716000},{0x42718000},{0x4271a000},{0x4271c000},{0x4271e000},{0x42720000},{0x42722000},{0x42724000},{0x42726000},{0x42728000},{0x4272a000},{0x4272c000},{0x4272e000},{0x42730000},{0x42732000},{0x42734000},{0x42736000},{0x42738000},{0x4273a000},{0x4273c000},{0x4273e000}, -{0x42740000},{0x42742000},{0x42744000},{0x42746000},{0x42748000},{0x4274a000},{0x4274c000},{0x4274e000},{0x42750000},{0x42752000},{0x42754000},{0x42756000},{0x42758000},{0x4275a000},{0x4275c000},{0x4275e000},{0x42760000},{0x42762000},{0x42764000},{0x42766000},{0x42768000},{0x4276a000},{0x4276c000},{0x4276e000},{0x42770000},{0x42772000},{0x42774000},{0x42776000},{0x42778000},{0x4277a000},{0x4277c000},{0x4277e000}, -{0x42780000},{0x42782000},{0x42784000},{0x42786000},{0x42788000},{0x4278a000},{0x4278c000},{0x4278e000},{0x42790000},{0x42792000},{0x42794000},{0x42796000},{0x42798000},{0x4279a000},{0x4279c000},{0x4279e000},{0x427a0000},{0x427a2000},{0x427a4000},{0x427a6000},{0x427a8000},{0x427aa000},{0x427ac000},{0x427ae000},{0x427b0000},{0x427b2000},{0x427b4000},{0x427b6000},{0x427b8000},{0x427ba000},{0x427bc000},{0x427be000}, -{0x427c0000},{0x427c2000},{0x427c4000},{0x427c6000},{0x427c8000},{0x427ca000},{0x427cc000},{0x427ce000},{0x427d0000},{0x427d2000},{0x427d4000},{0x427d6000},{0x427d8000},{0x427da000},{0x427dc000},{0x427de000},{0x427e0000},{0x427e2000},{0x427e4000},{0x427e6000},{0x427e8000},{0x427ea000},{0x427ec000},{0x427ee000},{0x427f0000},{0x427f2000},{0x427f4000},{0x427f6000},{0x427f8000},{0x427fa000},{0x427fc000},{0x427fe000}, -{0x42800000},{0x42802000},{0x42804000},{0x42806000},{0x42808000},{0x4280a000},{0x4280c000},{0x4280e000},{0x42810000},{0x42812000},{0x42814000},{0x42816000},{0x42818000},{0x4281a000},{0x4281c000},{0x4281e000},{0x42820000},{0x42822000},{0x42824000},{0x42826000},{0x42828000},{0x4282a000},{0x4282c000},{0x4282e000},{0x42830000},{0x42832000},{0x42834000},{0x42836000},{0x42838000},{0x4283a000},{0x4283c000},{0x4283e000}, -{0x42840000},{0x42842000},{0x42844000},{0x42846000},{0x42848000},{0x4284a000},{0x4284c000},{0x4284e000},{0x42850000},{0x42852000},{0x42854000},{0x42856000},{0x42858000},{0x4285a000},{0x4285c000},{0x4285e000},{0x42860000},{0x42862000},{0x42864000},{0x42866000},{0x42868000},{0x4286a000},{0x4286c000},{0x4286e000},{0x42870000},{0x42872000},{0x42874000},{0x42876000},{0x42878000},{0x4287a000},{0x4287c000},{0x4287e000}, -{0x42880000},{0x42882000},{0x42884000},{0x42886000},{0x42888000},{0x4288a000},{0x4288c000},{0x4288e000},{0x42890000},{0x42892000},{0x42894000},{0x42896000},{0x42898000},{0x4289a000},{0x4289c000},{0x4289e000},{0x428a0000},{0x428a2000},{0x428a4000},{0x428a6000},{0x428a8000},{0x428aa000},{0x428ac000},{0x428ae000},{0x428b0000},{0x428b2000},{0x428b4000},{0x428b6000},{0x428b8000},{0x428ba000},{0x428bc000},{0x428be000}, -{0x428c0000},{0x428c2000},{0x428c4000},{0x428c6000},{0x428c8000},{0x428ca000},{0x428cc000},{0x428ce000},{0x428d0000},{0x428d2000},{0x428d4000},{0x428d6000},{0x428d8000},{0x428da000},{0x428dc000},{0x428de000},{0x428e0000},{0x428e2000},{0x428e4000},{0x428e6000},{0x428e8000},{0x428ea000},{0x428ec000},{0x428ee000},{0x428f0000},{0x428f2000},{0x428f4000},{0x428f6000},{0x428f8000},{0x428fa000},{0x428fc000},{0x428fe000}, -{0x42900000},{0x42902000},{0x42904000},{0x42906000},{0x42908000},{0x4290a000},{0x4290c000},{0x4290e000},{0x42910000},{0x42912000},{0x42914000},{0x42916000},{0x42918000},{0x4291a000},{0x4291c000},{0x4291e000},{0x42920000},{0x42922000},{0x42924000},{0x42926000},{0x42928000},{0x4292a000},{0x4292c000},{0x4292e000},{0x42930000},{0x42932000},{0x42934000},{0x42936000},{0x42938000},{0x4293a000},{0x4293c000},{0x4293e000}, -{0x42940000},{0x42942000},{0x42944000},{0x42946000},{0x42948000},{0x4294a000},{0x4294c000},{0x4294e000},{0x42950000},{0x42952000},{0x42954000},{0x42956000},{0x42958000},{0x4295a000},{0x4295c000},{0x4295e000},{0x42960000},{0x42962000},{0x42964000},{0x42966000},{0x42968000},{0x4296a000},{0x4296c000},{0x4296e000},{0x42970000},{0x42972000},{0x42974000},{0x42976000},{0x42978000},{0x4297a000},{0x4297c000},{0x4297e000}, -{0x42980000},{0x42982000},{0x42984000},{0x42986000},{0x42988000},{0x4298a000},{0x4298c000},{0x4298e000},{0x42990000},{0x42992000},{0x42994000},{0x42996000},{0x42998000},{0x4299a000},{0x4299c000},{0x4299e000},{0x429a0000},{0x429a2000},{0x429a4000},{0x429a6000},{0x429a8000},{0x429aa000},{0x429ac000},{0x429ae000},{0x429b0000},{0x429b2000},{0x429b4000},{0x429b6000},{0x429b8000},{0x429ba000},{0x429bc000},{0x429be000}, -{0x429c0000},{0x429c2000},{0x429c4000},{0x429c6000},{0x429c8000},{0x429ca000},{0x429cc000},{0x429ce000},{0x429d0000},{0x429d2000},{0x429d4000},{0x429d6000},{0x429d8000},{0x429da000},{0x429dc000},{0x429de000},{0x429e0000},{0x429e2000},{0x429e4000},{0x429e6000},{0x429e8000},{0x429ea000},{0x429ec000},{0x429ee000},{0x429f0000},{0x429f2000},{0x429f4000},{0x429f6000},{0x429f8000},{0x429fa000},{0x429fc000},{0x429fe000}, -{0x42a00000},{0x42a02000},{0x42a04000},{0x42a06000},{0x42a08000},{0x42a0a000},{0x42a0c000},{0x42a0e000},{0x42a10000},{0x42a12000},{0x42a14000},{0x42a16000},{0x42a18000},{0x42a1a000},{0x42a1c000},{0x42a1e000},{0x42a20000},{0x42a22000},{0x42a24000},{0x42a26000},{0x42a28000},{0x42a2a000},{0x42a2c000},{0x42a2e000},{0x42a30000},{0x42a32000},{0x42a34000},{0x42a36000},{0x42a38000},{0x42a3a000},{0x42a3c000},{0x42a3e000}, -{0x42a40000},{0x42a42000},{0x42a44000},{0x42a46000},{0x42a48000},{0x42a4a000},{0x42a4c000},{0x42a4e000},{0x42a50000},{0x42a52000},{0x42a54000},{0x42a56000},{0x42a58000},{0x42a5a000},{0x42a5c000},{0x42a5e000},{0x42a60000},{0x42a62000},{0x42a64000},{0x42a66000},{0x42a68000},{0x42a6a000},{0x42a6c000},{0x42a6e000},{0x42a70000},{0x42a72000},{0x42a74000},{0x42a76000},{0x42a78000},{0x42a7a000},{0x42a7c000},{0x42a7e000}, -{0x42a80000},{0x42a82000},{0x42a84000},{0x42a86000},{0x42a88000},{0x42a8a000},{0x42a8c000},{0x42a8e000},{0x42a90000},{0x42a92000},{0x42a94000},{0x42a96000},{0x42a98000},{0x42a9a000},{0x42a9c000},{0x42a9e000},{0x42aa0000},{0x42aa2000},{0x42aa4000},{0x42aa6000},{0x42aa8000},{0x42aaa000},{0x42aac000},{0x42aae000},{0x42ab0000},{0x42ab2000},{0x42ab4000},{0x42ab6000},{0x42ab8000},{0x42aba000},{0x42abc000},{0x42abe000}, -{0x42ac0000},{0x42ac2000},{0x42ac4000},{0x42ac6000},{0x42ac8000},{0x42aca000},{0x42acc000},{0x42ace000},{0x42ad0000},{0x42ad2000},{0x42ad4000},{0x42ad6000},{0x42ad8000},{0x42ada000},{0x42adc000},{0x42ade000},{0x42ae0000},{0x42ae2000},{0x42ae4000},{0x42ae6000},{0x42ae8000},{0x42aea000},{0x42aec000},{0x42aee000},{0x42af0000},{0x42af2000},{0x42af4000},{0x42af6000},{0x42af8000},{0x42afa000},{0x42afc000},{0x42afe000}, -{0x42b00000},{0x42b02000},{0x42b04000},{0x42b06000},{0x42b08000},{0x42b0a000},{0x42b0c000},{0x42b0e000},{0x42b10000},{0x42b12000},{0x42b14000},{0x42b16000},{0x42b18000},{0x42b1a000},{0x42b1c000},{0x42b1e000},{0x42b20000},{0x42b22000},{0x42b24000},{0x42b26000},{0x42b28000},{0x42b2a000},{0x42b2c000},{0x42b2e000},{0x42b30000},{0x42b32000},{0x42b34000},{0x42b36000},{0x42b38000},{0x42b3a000},{0x42b3c000},{0x42b3e000}, -{0x42b40000},{0x42b42000},{0x42b44000},{0x42b46000},{0x42b48000},{0x42b4a000},{0x42b4c000},{0x42b4e000},{0x42b50000},{0x42b52000},{0x42b54000},{0x42b56000},{0x42b58000},{0x42b5a000},{0x42b5c000},{0x42b5e000},{0x42b60000},{0x42b62000},{0x42b64000},{0x42b66000},{0x42b68000},{0x42b6a000},{0x42b6c000},{0x42b6e000},{0x42b70000},{0x42b72000},{0x42b74000},{0x42b76000},{0x42b78000},{0x42b7a000},{0x42b7c000},{0x42b7e000}, -{0x42b80000},{0x42b82000},{0x42b84000},{0x42b86000},{0x42b88000},{0x42b8a000},{0x42b8c000},{0x42b8e000},{0x42b90000},{0x42b92000},{0x42b94000},{0x42b96000},{0x42b98000},{0x42b9a000},{0x42b9c000},{0x42b9e000},{0x42ba0000},{0x42ba2000},{0x42ba4000},{0x42ba6000},{0x42ba8000},{0x42baa000},{0x42bac000},{0x42bae000},{0x42bb0000},{0x42bb2000},{0x42bb4000},{0x42bb6000},{0x42bb8000},{0x42bba000},{0x42bbc000},{0x42bbe000}, -{0x42bc0000},{0x42bc2000},{0x42bc4000},{0x42bc6000},{0x42bc8000},{0x42bca000},{0x42bcc000},{0x42bce000},{0x42bd0000},{0x42bd2000},{0x42bd4000},{0x42bd6000},{0x42bd8000},{0x42bda000},{0x42bdc000},{0x42bde000},{0x42be0000},{0x42be2000},{0x42be4000},{0x42be6000},{0x42be8000},{0x42bea000},{0x42bec000},{0x42bee000},{0x42bf0000},{0x42bf2000},{0x42bf4000},{0x42bf6000},{0x42bf8000},{0x42bfa000},{0x42bfc000},{0x42bfe000}, -{0x42c00000},{0x42c02000},{0x42c04000},{0x42c06000},{0x42c08000},{0x42c0a000},{0x42c0c000},{0x42c0e000},{0x42c10000},{0x42c12000},{0x42c14000},{0x42c16000},{0x42c18000},{0x42c1a000},{0x42c1c000},{0x42c1e000},{0x42c20000},{0x42c22000},{0x42c24000},{0x42c26000},{0x42c28000},{0x42c2a000},{0x42c2c000},{0x42c2e000},{0x42c30000},{0x42c32000},{0x42c34000},{0x42c36000},{0x42c38000},{0x42c3a000},{0x42c3c000},{0x42c3e000}, -{0x42c40000},{0x42c42000},{0x42c44000},{0x42c46000},{0x42c48000},{0x42c4a000},{0x42c4c000},{0x42c4e000},{0x42c50000},{0x42c52000},{0x42c54000},{0x42c56000},{0x42c58000},{0x42c5a000},{0x42c5c000},{0x42c5e000},{0x42c60000},{0x42c62000},{0x42c64000},{0x42c66000},{0x42c68000},{0x42c6a000},{0x42c6c000},{0x42c6e000},{0x42c70000},{0x42c72000},{0x42c74000},{0x42c76000},{0x42c78000},{0x42c7a000},{0x42c7c000},{0x42c7e000}, -{0x42c80000},{0x42c82000},{0x42c84000},{0x42c86000},{0x42c88000},{0x42c8a000},{0x42c8c000},{0x42c8e000},{0x42c90000},{0x42c92000},{0x42c94000},{0x42c96000},{0x42c98000},{0x42c9a000},{0x42c9c000},{0x42c9e000},{0x42ca0000},{0x42ca2000},{0x42ca4000},{0x42ca6000},{0x42ca8000},{0x42caa000},{0x42cac000},{0x42cae000},{0x42cb0000},{0x42cb2000},{0x42cb4000},{0x42cb6000},{0x42cb8000},{0x42cba000},{0x42cbc000},{0x42cbe000}, -{0x42cc0000},{0x42cc2000},{0x42cc4000},{0x42cc6000},{0x42cc8000},{0x42cca000},{0x42ccc000},{0x42cce000},{0x42cd0000},{0x42cd2000},{0x42cd4000},{0x42cd6000},{0x42cd8000},{0x42cda000},{0x42cdc000},{0x42cde000},{0x42ce0000},{0x42ce2000},{0x42ce4000},{0x42ce6000},{0x42ce8000},{0x42cea000},{0x42cec000},{0x42cee000},{0x42cf0000},{0x42cf2000},{0x42cf4000},{0x42cf6000},{0x42cf8000},{0x42cfa000},{0x42cfc000},{0x42cfe000}, -{0x42d00000},{0x42d02000},{0x42d04000},{0x42d06000},{0x42d08000},{0x42d0a000},{0x42d0c000},{0x42d0e000},{0x42d10000},{0x42d12000},{0x42d14000},{0x42d16000},{0x42d18000},{0x42d1a000},{0x42d1c000},{0x42d1e000},{0x42d20000},{0x42d22000},{0x42d24000},{0x42d26000},{0x42d28000},{0x42d2a000},{0x42d2c000},{0x42d2e000},{0x42d30000},{0x42d32000},{0x42d34000},{0x42d36000},{0x42d38000},{0x42d3a000},{0x42d3c000},{0x42d3e000}, -{0x42d40000},{0x42d42000},{0x42d44000},{0x42d46000},{0x42d48000},{0x42d4a000},{0x42d4c000},{0x42d4e000},{0x42d50000},{0x42d52000},{0x42d54000},{0x42d56000},{0x42d58000},{0x42d5a000},{0x42d5c000},{0x42d5e000},{0x42d60000},{0x42d62000},{0x42d64000},{0x42d66000},{0x42d68000},{0x42d6a000},{0x42d6c000},{0x42d6e000},{0x42d70000},{0x42d72000},{0x42d74000},{0x42d76000},{0x42d78000},{0x42d7a000},{0x42d7c000},{0x42d7e000}, -{0x42d80000},{0x42d82000},{0x42d84000},{0x42d86000},{0x42d88000},{0x42d8a000},{0x42d8c000},{0x42d8e000},{0x42d90000},{0x42d92000},{0x42d94000},{0x42d96000},{0x42d98000},{0x42d9a000},{0x42d9c000},{0x42d9e000},{0x42da0000},{0x42da2000},{0x42da4000},{0x42da6000},{0x42da8000},{0x42daa000},{0x42dac000},{0x42dae000},{0x42db0000},{0x42db2000},{0x42db4000},{0x42db6000},{0x42db8000},{0x42dba000},{0x42dbc000},{0x42dbe000}, -{0x42dc0000},{0x42dc2000},{0x42dc4000},{0x42dc6000},{0x42dc8000},{0x42dca000},{0x42dcc000},{0x42dce000},{0x42dd0000},{0x42dd2000},{0x42dd4000},{0x42dd6000},{0x42dd8000},{0x42dda000},{0x42ddc000},{0x42dde000},{0x42de0000},{0x42de2000},{0x42de4000},{0x42de6000},{0x42de8000},{0x42dea000},{0x42dec000},{0x42dee000},{0x42df0000},{0x42df2000},{0x42df4000},{0x42df6000},{0x42df8000},{0x42dfa000},{0x42dfc000},{0x42dfe000}, -{0x42e00000},{0x42e02000},{0x42e04000},{0x42e06000},{0x42e08000},{0x42e0a000},{0x42e0c000},{0x42e0e000},{0x42e10000},{0x42e12000},{0x42e14000},{0x42e16000},{0x42e18000},{0x42e1a000},{0x42e1c000},{0x42e1e000},{0x42e20000},{0x42e22000},{0x42e24000},{0x42e26000},{0x42e28000},{0x42e2a000},{0x42e2c000},{0x42e2e000},{0x42e30000},{0x42e32000},{0x42e34000},{0x42e36000},{0x42e38000},{0x42e3a000},{0x42e3c000},{0x42e3e000}, -{0x42e40000},{0x42e42000},{0x42e44000},{0x42e46000},{0x42e48000},{0x42e4a000},{0x42e4c000},{0x42e4e000},{0x42e50000},{0x42e52000},{0x42e54000},{0x42e56000},{0x42e58000},{0x42e5a000},{0x42e5c000},{0x42e5e000},{0x42e60000},{0x42e62000},{0x42e64000},{0x42e66000},{0x42e68000},{0x42e6a000},{0x42e6c000},{0x42e6e000},{0x42e70000},{0x42e72000},{0x42e74000},{0x42e76000},{0x42e78000},{0x42e7a000},{0x42e7c000},{0x42e7e000}, -{0x42e80000},{0x42e82000},{0x42e84000},{0x42e86000},{0x42e88000},{0x42e8a000},{0x42e8c000},{0x42e8e000},{0x42e90000},{0x42e92000},{0x42e94000},{0x42e96000},{0x42e98000},{0x42e9a000},{0x42e9c000},{0x42e9e000},{0x42ea0000},{0x42ea2000},{0x42ea4000},{0x42ea6000},{0x42ea8000},{0x42eaa000},{0x42eac000},{0x42eae000},{0x42eb0000},{0x42eb2000},{0x42eb4000},{0x42eb6000},{0x42eb8000},{0x42eba000},{0x42ebc000},{0x42ebe000}, -{0x42ec0000},{0x42ec2000},{0x42ec4000},{0x42ec6000},{0x42ec8000},{0x42eca000},{0x42ecc000},{0x42ece000},{0x42ed0000},{0x42ed2000},{0x42ed4000},{0x42ed6000},{0x42ed8000},{0x42eda000},{0x42edc000},{0x42ede000},{0x42ee0000},{0x42ee2000},{0x42ee4000},{0x42ee6000},{0x42ee8000},{0x42eea000},{0x42eec000},{0x42eee000},{0x42ef0000},{0x42ef2000},{0x42ef4000},{0x42ef6000},{0x42ef8000},{0x42efa000},{0x42efc000},{0x42efe000}, -{0x42f00000},{0x42f02000},{0x42f04000},{0x42f06000},{0x42f08000},{0x42f0a000},{0x42f0c000},{0x42f0e000},{0x42f10000},{0x42f12000},{0x42f14000},{0x42f16000},{0x42f18000},{0x42f1a000},{0x42f1c000},{0x42f1e000},{0x42f20000},{0x42f22000},{0x42f24000},{0x42f26000},{0x42f28000},{0x42f2a000},{0x42f2c000},{0x42f2e000},{0x42f30000},{0x42f32000},{0x42f34000},{0x42f36000},{0x42f38000},{0x42f3a000},{0x42f3c000},{0x42f3e000}, -{0x42f40000},{0x42f42000},{0x42f44000},{0x42f46000},{0x42f48000},{0x42f4a000},{0x42f4c000},{0x42f4e000},{0x42f50000},{0x42f52000},{0x42f54000},{0x42f56000},{0x42f58000},{0x42f5a000},{0x42f5c000},{0x42f5e000},{0x42f60000},{0x42f62000},{0x42f64000},{0x42f66000},{0x42f68000},{0x42f6a000},{0x42f6c000},{0x42f6e000},{0x42f70000},{0x42f72000},{0x42f74000},{0x42f76000},{0x42f78000},{0x42f7a000},{0x42f7c000},{0x42f7e000}, -{0x42f80000},{0x42f82000},{0x42f84000},{0x42f86000},{0x42f88000},{0x42f8a000},{0x42f8c000},{0x42f8e000},{0x42f90000},{0x42f92000},{0x42f94000},{0x42f96000},{0x42f98000},{0x42f9a000},{0x42f9c000},{0x42f9e000},{0x42fa0000},{0x42fa2000},{0x42fa4000},{0x42fa6000},{0x42fa8000},{0x42faa000},{0x42fac000},{0x42fae000},{0x42fb0000},{0x42fb2000},{0x42fb4000},{0x42fb6000},{0x42fb8000},{0x42fba000},{0x42fbc000},{0x42fbe000}, -{0x42fc0000},{0x42fc2000},{0x42fc4000},{0x42fc6000},{0x42fc8000},{0x42fca000},{0x42fcc000},{0x42fce000},{0x42fd0000},{0x42fd2000},{0x42fd4000},{0x42fd6000},{0x42fd8000},{0x42fda000},{0x42fdc000},{0x42fde000},{0x42fe0000},{0x42fe2000},{0x42fe4000},{0x42fe6000},{0x42fe8000},{0x42fea000},{0x42fec000},{0x42fee000},{0x42ff0000},{0x42ff2000},{0x42ff4000},{0x42ff6000},{0x42ff8000},{0x42ffa000},{0x42ffc000},{0x42ffe000}, -{0x43000000},{0x43002000},{0x43004000},{0x43006000},{0x43008000},{0x4300a000},{0x4300c000},{0x4300e000},{0x43010000},{0x43012000},{0x43014000},{0x43016000},{0x43018000},{0x4301a000},{0x4301c000},{0x4301e000},{0x43020000},{0x43022000},{0x43024000},{0x43026000},{0x43028000},{0x4302a000},{0x4302c000},{0x4302e000},{0x43030000},{0x43032000},{0x43034000},{0x43036000},{0x43038000},{0x4303a000},{0x4303c000},{0x4303e000}, -{0x43040000},{0x43042000},{0x43044000},{0x43046000},{0x43048000},{0x4304a000},{0x4304c000},{0x4304e000},{0x43050000},{0x43052000},{0x43054000},{0x43056000},{0x43058000},{0x4305a000},{0x4305c000},{0x4305e000},{0x43060000},{0x43062000},{0x43064000},{0x43066000},{0x43068000},{0x4306a000},{0x4306c000},{0x4306e000},{0x43070000},{0x43072000},{0x43074000},{0x43076000},{0x43078000},{0x4307a000},{0x4307c000},{0x4307e000}, -{0x43080000},{0x43082000},{0x43084000},{0x43086000},{0x43088000},{0x4308a000},{0x4308c000},{0x4308e000},{0x43090000},{0x43092000},{0x43094000},{0x43096000},{0x43098000},{0x4309a000},{0x4309c000},{0x4309e000},{0x430a0000},{0x430a2000},{0x430a4000},{0x430a6000},{0x430a8000},{0x430aa000},{0x430ac000},{0x430ae000},{0x430b0000},{0x430b2000},{0x430b4000},{0x430b6000},{0x430b8000},{0x430ba000},{0x430bc000},{0x430be000}, -{0x430c0000},{0x430c2000},{0x430c4000},{0x430c6000},{0x430c8000},{0x430ca000},{0x430cc000},{0x430ce000},{0x430d0000},{0x430d2000},{0x430d4000},{0x430d6000},{0x430d8000},{0x430da000},{0x430dc000},{0x430de000},{0x430e0000},{0x430e2000},{0x430e4000},{0x430e6000},{0x430e8000},{0x430ea000},{0x430ec000},{0x430ee000},{0x430f0000},{0x430f2000},{0x430f4000},{0x430f6000},{0x430f8000},{0x430fa000},{0x430fc000},{0x430fe000}, -{0x43100000},{0x43102000},{0x43104000},{0x43106000},{0x43108000},{0x4310a000},{0x4310c000},{0x4310e000},{0x43110000},{0x43112000},{0x43114000},{0x43116000},{0x43118000},{0x4311a000},{0x4311c000},{0x4311e000},{0x43120000},{0x43122000},{0x43124000},{0x43126000},{0x43128000},{0x4312a000},{0x4312c000},{0x4312e000},{0x43130000},{0x43132000},{0x43134000},{0x43136000},{0x43138000},{0x4313a000},{0x4313c000},{0x4313e000}, -{0x43140000},{0x43142000},{0x43144000},{0x43146000},{0x43148000},{0x4314a000},{0x4314c000},{0x4314e000},{0x43150000},{0x43152000},{0x43154000},{0x43156000},{0x43158000},{0x4315a000},{0x4315c000},{0x4315e000},{0x43160000},{0x43162000},{0x43164000},{0x43166000},{0x43168000},{0x4316a000},{0x4316c000},{0x4316e000},{0x43170000},{0x43172000},{0x43174000},{0x43176000},{0x43178000},{0x4317a000},{0x4317c000},{0x4317e000}, -{0x43180000},{0x43182000},{0x43184000},{0x43186000},{0x43188000},{0x4318a000},{0x4318c000},{0x4318e000},{0x43190000},{0x43192000},{0x43194000},{0x43196000},{0x43198000},{0x4319a000},{0x4319c000},{0x4319e000},{0x431a0000},{0x431a2000},{0x431a4000},{0x431a6000},{0x431a8000},{0x431aa000},{0x431ac000},{0x431ae000},{0x431b0000},{0x431b2000},{0x431b4000},{0x431b6000},{0x431b8000},{0x431ba000},{0x431bc000},{0x431be000}, -{0x431c0000},{0x431c2000},{0x431c4000},{0x431c6000},{0x431c8000},{0x431ca000},{0x431cc000},{0x431ce000},{0x431d0000},{0x431d2000},{0x431d4000},{0x431d6000},{0x431d8000},{0x431da000},{0x431dc000},{0x431de000},{0x431e0000},{0x431e2000},{0x431e4000},{0x431e6000},{0x431e8000},{0x431ea000},{0x431ec000},{0x431ee000},{0x431f0000},{0x431f2000},{0x431f4000},{0x431f6000},{0x431f8000},{0x431fa000},{0x431fc000},{0x431fe000}, -{0x43200000},{0x43202000},{0x43204000},{0x43206000},{0x43208000},{0x4320a000},{0x4320c000},{0x4320e000},{0x43210000},{0x43212000},{0x43214000},{0x43216000},{0x43218000},{0x4321a000},{0x4321c000},{0x4321e000},{0x43220000},{0x43222000},{0x43224000},{0x43226000},{0x43228000},{0x4322a000},{0x4322c000},{0x4322e000},{0x43230000},{0x43232000},{0x43234000},{0x43236000},{0x43238000},{0x4323a000},{0x4323c000},{0x4323e000}, -{0x43240000},{0x43242000},{0x43244000},{0x43246000},{0x43248000},{0x4324a000},{0x4324c000},{0x4324e000},{0x43250000},{0x43252000},{0x43254000},{0x43256000},{0x43258000},{0x4325a000},{0x4325c000},{0x4325e000},{0x43260000},{0x43262000},{0x43264000},{0x43266000},{0x43268000},{0x4326a000},{0x4326c000},{0x4326e000},{0x43270000},{0x43272000},{0x43274000},{0x43276000},{0x43278000},{0x4327a000},{0x4327c000},{0x4327e000}, -{0x43280000},{0x43282000},{0x43284000},{0x43286000},{0x43288000},{0x4328a000},{0x4328c000},{0x4328e000},{0x43290000},{0x43292000},{0x43294000},{0x43296000},{0x43298000},{0x4329a000},{0x4329c000},{0x4329e000},{0x432a0000},{0x432a2000},{0x432a4000},{0x432a6000},{0x432a8000},{0x432aa000},{0x432ac000},{0x432ae000},{0x432b0000},{0x432b2000},{0x432b4000},{0x432b6000},{0x432b8000},{0x432ba000},{0x432bc000},{0x432be000}, -{0x432c0000},{0x432c2000},{0x432c4000},{0x432c6000},{0x432c8000},{0x432ca000},{0x432cc000},{0x432ce000},{0x432d0000},{0x432d2000},{0x432d4000},{0x432d6000},{0x432d8000},{0x432da000},{0x432dc000},{0x432de000},{0x432e0000},{0x432e2000},{0x432e4000},{0x432e6000},{0x432e8000},{0x432ea000},{0x432ec000},{0x432ee000},{0x432f0000},{0x432f2000},{0x432f4000},{0x432f6000},{0x432f8000},{0x432fa000},{0x432fc000},{0x432fe000}, -{0x43300000},{0x43302000},{0x43304000},{0x43306000},{0x43308000},{0x4330a000},{0x4330c000},{0x4330e000},{0x43310000},{0x43312000},{0x43314000},{0x43316000},{0x43318000},{0x4331a000},{0x4331c000},{0x4331e000},{0x43320000},{0x43322000},{0x43324000},{0x43326000},{0x43328000},{0x4332a000},{0x4332c000},{0x4332e000},{0x43330000},{0x43332000},{0x43334000},{0x43336000},{0x43338000},{0x4333a000},{0x4333c000},{0x4333e000}, -{0x43340000},{0x43342000},{0x43344000},{0x43346000},{0x43348000},{0x4334a000},{0x4334c000},{0x4334e000},{0x43350000},{0x43352000},{0x43354000},{0x43356000},{0x43358000},{0x4335a000},{0x4335c000},{0x4335e000},{0x43360000},{0x43362000},{0x43364000},{0x43366000},{0x43368000},{0x4336a000},{0x4336c000},{0x4336e000},{0x43370000},{0x43372000},{0x43374000},{0x43376000},{0x43378000},{0x4337a000},{0x4337c000},{0x4337e000}, -{0x43380000},{0x43382000},{0x43384000},{0x43386000},{0x43388000},{0x4338a000},{0x4338c000},{0x4338e000},{0x43390000},{0x43392000},{0x43394000},{0x43396000},{0x43398000},{0x4339a000},{0x4339c000},{0x4339e000},{0x433a0000},{0x433a2000},{0x433a4000},{0x433a6000},{0x433a8000},{0x433aa000},{0x433ac000},{0x433ae000},{0x433b0000},{0x433b2000},{0x433b4000},{0x433b6000},{0x433b8000},{0x433ba000},{0x433bc000},{0x433be000}, -{0x433c0000},{0x433c2000},{0x433c4000},{0x433c6000},{0x433c8000},{0x433ca000},{0x433cc000},{0x433ce000},{0x433d0000},{0x433d2000},{0x433d4000},{0x433d6000},{0x433d8000},{0x433da000},{0x433dc000},{0x433de000},{0x433e0000},{0x433e2000},{0x433e4000},{0x433e6000},{0x433e8000},{0x433ea000},{0x433ec000},{0x433ee000},{0x433f0000},{0x433f2000},{0x433f4000},{0x433f6000},{0x433f8000},{0x433fa000},{0x433fc000},{0x433fe000}, -{0x43400000},{0x43402000},{0x43404000},{0x43406000},{0x43408000},{0x4340a000},{0x4340c000},{0x4340e000},{0x43410000},{0x43412000},{0x43414000},{0x43416000},{0x43418000},{0x4341a000},{0x4341c000},{0x4341e000},{0x43420000},{0x43422000},{0x43424000},{0x43426000},{0x43428000},{0x4342a000},{0x4342c000},{0x4342e000},{0x43430000},{0x43432000},{0x43434000},{0x43436000},{0x43438000},{0x4343a000},{0x4343c000},{0x4343e000}, -{0x43440000},{0x43442000},{0x43444000},{0x43446000},{0x43448000},{0x4344a000},{0x4344c000},{0x4344e000},{0x43450000},{0x43452000},{0x43454000},{0x43456000},{0x43458000},{0x4345a000},{0x4345c000},{0x4345e000},{0x43460000},{0x43462000},{0x43464000},{0x43466000},{0x43468000},{0x4346a000},{0x4346c000},{0x4346e000},{0x43470000},{0x43472000},{0x43474000},{0x43476000},{0x43478000},{0x4347a000},{0x4347c000},{0x4347e000}, -{0x43480000},{0x43482000},{0x43484000},{0x43486000},{0x43488000},{0x4348a000},{0x4348c000},{0x4348e000},{0x43490000},{0x43492000},{0x43494000},{0x43496000},{0x43498000},{0x4349a000},{0x4349c000},{0x4349e000},{0x434a0000},{0x434a2000},{0x434a4000},{0x434a6000},{0x434a8000},{0x434aa000},{0x434ac000},{0x434ae000},{0x434b0000},{0x434b2000},{0x434b4000},{0x434b6000},{0x434b8000},{0x434ba000},{0x434bc000},{0x434be000}, -{0x434c0000},{0x434c2000},{0x434c4000},{0x434c6000},{0x434c8000},{0x434ca000},{0x434cc000},{0x434ce000},{0x434d0000},{0x434d2000},{0x434d4000},{0x434d6000},{0x434d8000},{0x434da000},{0x434dc000},{0x434de000},{0x434e0000},{0x434e2000},{0x434e4000},{0x434e6000},{0x434e8000},{0x434ea000},{0x434ec000},{0x434ee000},{0x434f0000},{0x434f2000},{0x434f4000},{0x434f6000},{0x434f8000},{0x434fa000},{0x434fc000},{0x434fe000}, -{0x43500000},{0x43502000},{0x43504000},{0x43506000},{0x43508000},{0x4350a000},{0x4350c000},{0x4350e000},{0x43510000},{0x43512000},{0x43514000},{0x43516000},{0x43518000},{0x4351a000},{0x4351c000},{0x4351e000},{0x43520000},{0x43522000},{0x43524000},{0x43526000},{0x43528000},{0x4352a000},{0x4352c000},{0x4352e000},{0x43530000},{0x43532000},{0x43534000},{0x43536000},{0x43538000},{0x4353a000},{0x4353c000},{0x4353e000}, -{0x43540000},{0x43542000},{0x43544000},{0x43546000},{0x43548000},{0x4354a000},{0x4354c000},{0x4354e000},{0x43550000},{0x43552000},{0x43554000},{0x43556000},{0x43558000},{0x4355a000},{0x4355c000},{0x4355e000},{0x43560000},{0x43562000},{0x43564000},{0x43566000},{0x43568000},{0x4356a000},{0x4356c000},{0x4356e000},{0x43570000},{0x43572000},{0x43574000},{0x43576000},{0x43578000},{0x4357a000},{0x4357c000},{0x4357e000}, -{0x43580000},{0x43582000},{0x43584000},{0x43586000},{0x43588000},{0x4358a000},{0x4358c000},{0x4358e000},{0x43590000},{0x43592000},{0x43594000},{0x43596000},{0x43598000},{0x4359a000},{0x4359c000},{0x4359e000},{0x435a0000},{0x435a2000},{0x435a4000},{0x435a6000},{0x435a8000},{0x435aa000},{0x435ac000},{0x435ae000},{0x435b0000},{0x435b2000},{0x435b4000},{0x435b6000},{0x435b8000},{0x435ba000},{0x435bc000},{0x435be000}, -{0x435c0000},{0x435c2000},{0x435c4000},{0x435c6000},{0x435c8000},{0x435ca000},{0x435cc000},{0x435ce000},{0x435d0000},{0x435d2000},{0x435d4000},{0x435d6000},{0x435d8000},{0x435da000},{0x435dc000},{0x435de000},{0x435e0000},{0x435e2000},{0x435e4000},{0x435e6000},{0x435e8000},{0x435ea000},{0x435ec000},{0x435ee000},{0x435f0000},{0x435f2000},{0x435f4000},{0x435f6000},{0x435f8000},{0x435fa000},{0x435fc000},{0x435fe000}, -{0x43600000},{0x43602000},{0x43604000},{0x43606000},{0x43608000},{0x4360a000},{0x4360c000},{0x4360e000},{0x43610000},{0x43612000},{0x43614000},{0x43616000},{0x43618000},{0x4361a000},{0x4361c000},{0x4361e000},{0x43620000},{0x43622000},{0x43624000},{0x43626000},{0x43628000},{0x4362a000},{0x4362c000},{0x4362e000},{0x43630000},{0x43632000},{0x43634000},{0x43636000},{0x43638000},{0x4363a000},{0x4363c000},{0x4363e000}, -{0x43640000},{0x43642000},{0x43644000},{0x43646000},{0x43648000},{0x4364a000},{0x4364c000},{0x4364e000},{0x43650000},{0x43652000},{0x43654000},{0x43656000},{0x43658000},{0x4365a000},{0x4365c000},{0x4365e000},{0x43660000},{0x43662000},{0x43664000},{0x43666000},{0x43668000},{0x4366a000},{0x4366c000},{0x4366e000},{0x43670000},{0x43672000},{0x43674000},{0x43676000},{0x43678000},{0x4367a000},{0x4367c000},{0x4367e000}, -{0x43680000},{0x43682000},{0x43684000},{0x43686000},{0x43688000},{0x4368a000},{0x4368c000},{0x4368e000},{0x43690000},{0x43692000},{0x43694000},{0x43696000},{0x43698000},{0x4369a000},{0x4369c000},{0x4369e000},{0x436a0000},{0x436a2000},{0x436a4000},{0x436a6000},{0x436a8000},{0x436aa000},{0x436ac000},{0x436ae000},{0x436b0000},{0x436b2000},{0x436b4000},{0x436b6000},{0x436b8000},{0x436ba000},{0x436bc000},{0x436be000}, -{0x436c0000},{0x436c2000},{0x436c4000},{0x436c6000},{0x436c8000},{0x436ca000},{0x436cc000},{0x436ce000},{0x436d0000},{0x436d2000},{0x436d4000},{0x436d6000},{0x436d8000},{0x436da000},{0x436dc000},{0x436de000},{0x436e0000},{0x436e2000},{0x436e4000},{0x436e6000},{0x436e8000},{0x436ea000},{0x436ec000},{0x436ee000},{0x436f0000},{0x436f2000},{0x436f4000},{0x436f6000},{0x436f8000},{0x436fa000},{0x436fc000},{0x436fe000}, -{0x43700000},{0x43702000},{0x43704000},{0x43706000},{0x43708000},{0x4370a000},{0x4370c000},{0x4370e000},{0x43710000},{0x43712000},{0x43714000},{0x43716000},{0x43718000},{0x4371a000},{0x4371c000},{0x4371e000},{0x43720000},{0x43722000},{0x43724000},{0x43726000},{0x43728000},{0x4372a000},{0x4372c000},{0x4372e000},{0x43730000},{0x43732000},{0x43734000},{0x43736000},{0x43738000},{0x4373a000},{0x4373c000},{0x4373e000}, -{0x43740000},{0x43742000},{0x43744000},{0x43746000},{0x43748000},{0x4374a000},{0x4374c000},{0x4374e000},{0x43750000},{0x43752000},{0x43754000},{0x43756000},{0x43758000},{0x4375a000},{0x4375c000},{0x4375e000},{0x43760000},{0x43762000},{0x43764000},{0x43766000},{0x43768000},{0x4376a000},{0x4376c000},{0x4376e000},{0x43770000},{0x43772000},{0x43774000},{0x43776000},{0x43778000},{0x4377a000},{0x4377c000},{0x4377e000}, -{0x43780000},{0x43782000},{0x43784000},{0x43786000},{0x43788000},{0x4378a000},{0x4378c000},{0x4378e000},{0x43790000},{0x43792000},{0x43794000},{0x43796000},{0x43798000},{0x4379a000},{0x4379c000},{0x4379e000},{0x437a0000},{0x437a2000},{0x437a4000},{0x437a6000},{0x437a8000},{0x437aa000},{0x437ac000},{0x437ae000},{0x437b0000},{0x437b2000},{0x437b4000},{0x437b6000},{0x437b8000},{0x437ba000},{0x437bc000},{0x437be000}, -{0x437c0000},{0x437c2000},{0x437c4000},{0x437c6000},{0x437c8000},{0x437ca000},{0x437cc000},{0x437ce000},{0x437d0000},{0x437d2000},{0x437d4000},{0x437d6000},{0x437d8000},{0x437da000},{0x437dc000},{0x437de000},{0x437e0000},{0x437e2000},{0x437e4000},{0x437e6000},{0x437e8000},{0x437ea000},{0x437ec000},{0x437ee000},{0x437f0000},{0x437f2000},{0x437f4000},{0x437f6000},{0x437f8000},{0x437fa000},{0x437fc000},{0x437fe000}, -{0x43800000},{0x43802000},{0x43804000},{0x43806000},{0x43808000},{0x4380a000},{0x4380c000},{0x4380e000},{0x43810000},{0x43812000},{0x43814000},{0x43816000},{0x43818000},{0x4381a000},{0x4381c000},{0x4381e000},{0x43820000},{0x43822000},{0x43824000},{0x43826000},{0x43828000},{0x4382a000},{0x4382c000},{0x4382e000},{0x43830000},{0x43832000},{0x43834000},{0x43836000},{0x43838000},{0x4383a000},{0x4383c000},{0x4383e000}, -{0x43840000},{0x43842000},{0x43844000},{0x43846000},{0x43848000},{0x4384a000},{0x4384c000},{0x4384e000},{0x43850000},{0x43852000},{0x43854000},{0x43856000},{0x43858000},{0x4385a000},{0x4385c000},{0x4385e000},{0x43860000},{0x43862000},{0x43864000},{0x43866000},{0x43868000},{0x4386a000},{0x4386c000},{0x4386e000},{0x43870000},{0x43872000},{0x43874000},{0x43876000},{0x43878000},{0x4387a000},{0x4387c000},{0x4387e000}, -{0x43880000},{0x43882000},{0x43884000},{0x43886000},{0x43888000},{0x4388a000},{0x4388c000},{0x4388e000},{0x43890000},{0x43892000},{0x43894000},{0x43896000},{0x43898000},{0x4389a000},{0x4389c000},{0x4389e000},{0x438a0000},{0x438a2000},{0x438a4000},{0x438a6000},{0x438a8000},{0x438aa000},{0x438ac000},{0x438ae000},{0x438b0000},{0x438b2000},{0x438b4000},{0x438b6000},{0x438b8000},{0x438ba000},{0x438bc000},{0x438be000}, -{0x438c0000},{0x438c2000},{0x438c4000},{0x438c6000},{0x438c8000},{0x438ca000},{0x438cc000},{0x438ce000},{0x438d0000},{0x438d2000},{0x438d4000},{0x438d6000},{0x438d8000},{0x438da000},{0x438dc000},{0x438de000},{0x438e0000},{0x438e2000},{0x438e4000},{0x438e6000},{0x438e8000},{0x438ea000},{0x438ec000},{0x438ee000},{0x438f0000},{0x438f2000},{0x438f4000},{0x438f6000},{0x438f8000},{0x438fa000},{0x438fc000},{0x438fe000}, -{0x43900000},{0x43902000},{0x43904000},{0x43906000},{0x43908000},{0x4390a000},{0x4390c000},{0x4390e000},{0x43910000},{0x43912000},{0x43914000},{0x43916000},{0x43918000},{0x4391a000},{0x4391c000},{0x4391e000},{0x43920000},{0x43922000},{0x43924000},{0x43926000},{0x43928000},{0x4392a000},{0x4392c000},{0x4392e000},{0x43930000},{0x43932000},{0x43934000},{0x43936000},{0x43938000},{0x4393a000},{0x4393c000},{0x4393e000}, -{0x43940000},{0x43942000},{0x43944000},{0x43946000},{0x43948000},{0x4394a000},{0x4394c000},{0x4394e000},{0x43950000},{0x43952000},{0x43954000},{0x43956000},{0x43958000},{0x4395a000},{0x4395c000},{0x4395e000},{0x43960000},{0x43962000},{0x43964000},{0x43966000},{0x43968000},{0x4396a000},{0x4396c000},{0x4396e000},{0x43970000},{0x43972000},{0x43974000},{0x43976000},{0x43978000},{0x4397a000},{0x4397c000},{0x4397e000}, -{0x43980000},{0x43982000},{0x43984000},{0x43986000},{0x43988000},{0x4398a000},{0x4398c000},{0x4398e000},{0x43990000},{0x43992000},{0x43994000},{0x43996000},{0x43998000},{0x4399a000},{0x4399c000},{0x4399e000},{0x439a0000},{0x439a2000},{0x439a4000},{0x439a6000},{0x439a8000},{0x439aa000},{0x439ac000},{0x439ae000},{0x439b0000},{0x439b2000},{0x439b4000},{0x439b6000},{0x439b8000},{0x439ba000},{0x439bc000},{0x439be000}, -{0x439c0000},{0x439c2000},{0x439c4000},{0x439c6000},{0x439c8000},{0x439ca000},{0x439cc000},{0x439ce000},{0x439d0000},{0x439d2000},{0x439d4000},{0x439d6000},{0x439d8000},{0x439da000},{0x439dc000},{0x439de000},{0x439e0000},{0x439e2000},{0x439e4000},{0x439e6000},{0x439e8000},{0x439ea000},{0x439ec000},{0x439ee000},{0x439f0000},{0x439f2000},{0x439f4000},{0x439f6000},{0x439f8000},{0x439fa000},{0x439fc000},{0x439fe000}, -{0x43a00000},{0x43a02000},{0x43a04000},{0x43a06000},{0x43a08000},{0x43a0a000},{0x43a0c000},{0x43a0e000},{0x43a10000},{0x43a12000},{0x43a14000},{0x43a16000},{0x43a18000},{0x43a1a000},{0x43a1c000},{0x43a1e000},{0x43a20000},{0x43a22000},{0x43a24000},{0x43a26000},{0x43a28000},{0x43a2a000},{0x43a2c000},{0x43a2e000},{0x43a30000},{0x43a32000},{0x43a34000},{0x43a36000},{0x43a38000},{0x43a3a000},{0x43a3c000},{0x43a3e000}, -{0x43a40000},{0x43a42000},{0x43a44000},{0x43a46000},{0x43a48000},{0x43a4a000},{0x43a4c000},{0x43a4e000},{0x43a50000},{0x43a52000},{0x43a54000},{0x43a56000},{0x43a58000},{0x43a5a000},{0x43a5c000},{0x43a5e000},{0x43a60000},{0x43a62000},{0x43a64000},{0x43a66000},{0x43a68000},{0x43a6a000},{0x43a6c000},{0x43a6e000},{0x43a70000},{0x43a72000},{0x43a74000},{0x43a76000},{0x43a78000},{0x43a7a000},{0x43a7c000},{0x43a7e000}, -{0x43a80000},{0x43a82000},{0x43a84000},{0x43a86000},{0x43a88000},{0x43a8a000},{0x43a8c000},{0x43a8e000},{0x43a90000},{0x43a92000},{0x43a94000},{0x43a96000},{0x43a98000},{0x43a9a000},{0x43a9c000},{0x43a9e000},{0x43aa0000},{0x43aa2000},{0x43aa4000},{0x43aa6000},{0x43aa8000},{0x43aaa000},{0x43aac000},{0x43aae000},{0x43ab0000},{0x43ab2000},{0x43ab4000},{0x43ab6000},{0x43ab8000},{0x43aba000},{0x43abc000},{0x43abe000}, -{0x43ac0000},{0x43ac2000},{0x43ac4000},{0x43ac6000},{0x43ac8000},{0x43aca000},{0x43acc000},{0x43ace000},{0x43ad0000},{0x43ad2000},{0x43ad4000},{0x43ad6000},{0x43ad8000},{0x43ada000},{0x43adc000},{0x43ade000},{0x43ae0000},{0x43ae2000},{0x43ae4000},{0x43ae6000},{0x43ae8000},{0x43aea000},{0x43aec000},{0x43aee000},{0x43af0000},{0x43af2000},{0x43af4000},{0x43af6000},{0x43af8000},{0x43afa000},{0x43afc000},{0x43afe000}, -{0x43b00000},{0x43b02000},{0x43b04000},{0x43b06000},{0x43b08000},{0x43b0a000},{0x43b0c000},{0x43b0e000},{0x43b10000},{0x43b12000},{0x43b14000},{0x43b16000},{0x43b18000},{0x43b1a000},{0x43b1c000},{0x43b1e000},{0x43b20000},{0x43b22000},{0x43b24000},{0x43b26000},{0x43b28000},{0x43b2a000},{0x43b2c000},{0x43b2e000},{0x43b30000},{0x43b32000},{0x43b34000},{0x43b36000},{0x43b38000},{0x43b3a000},{0x43b3c000},{0x43b3e000}, -{0x43b40000},{0x43b42000},{0x43b44000},{0x43b46000},{0x43b48000},{0x43b4a000},{0x43b4c000},{0x43b4e000},{0x43b50000},{0x43b52000},{0x43b54000},{0x43b56000},{0x43b58000},{0x43b5a000},{0x43b5c000},{0x43b5e000},{0x43b60000},{0x43b62000},{0x43b64000},{0x43b66000},{0x43b68000},{0x43b6a000},{0x43b6c000},{0x43b6e000},{0x43b70000},{0x43b72000},{0x43b74000},{0x43b76000},{0x43b78000},{0x43b7a000},{0x43b7c000},{0x43b7e000}, -{0x43b80000},{0x43b82000},{0x43b84000},{0x43b86000},{0x43b88000},{0x43b8a000},{0x43b8c000},{0x43b8e000},{0x43b90000},{0x43b92000},{0x43b94000},{0x43b96000},{0x43b98000},{0x43b9a000},{0x43b9c000},{0x43b9e000},{0x43ba0000},{0x43ba2000},{0x43ba4000},{0x43ba6000},{0x43ba8000},{0x43baa000},{0x43bac000},{0x43bae000},{0x43bb0000},{0x43bb2000},{0x43bb4000},{0x43bb6000},{0x43bb8000},{0x43bba000},{0x43bbc000},{0x43bbe000}, -{0x43bc0000},{0x43bc2000},{0x43bc4000},{0x43bc6000},{0x43bc8000},{0x43bca000},{0x43bcc000},{0x43bce000},{0x43bd0000},{0x43bd2000},{0x43bd4000},{0x43bd6000},{0x43bd8000},{0x43bda000},{0x43bdc000},{0x43bde000},{0x43be0000},{0x43be2000},{0x43be4000},{0x43be6000},{0x43be8000},{0x43bea000},{0x43bec000},{0x43bee000},{0x43bf0000},{0x43bf2000},{0x43bf4000},{0x43bf6000},{0x43bf8000},{0x43bfa000},{0x43bfc000},{0x43bfe000}, -{0x43c00000},{0x43c02000},{0x43c04000},{0x43c06000},{0x43c08000},{0x43c0a000},{0x43c0c000},{0x43c0e000},{0x43c10000},{0x43c12000},{0x43c14000},{0x43c16000},{0x43c18000},{0x43c1a000},{0x43c1c000},{0x43c1e000},{0x43c20000},{0x43c22000},{0x43c24000},{0x43c26000},{0x43c28000},{0x43c2a000},{0x43c2c000},{0x43c2e000},{0x43c30000},{0x43c32000},{0x43c34000},{0x43c36000},{0x43c38000},{0x43c3a000},{0x43c3c000},{0x43c3e000}, -{0x43c40000},{0x43c42000},{0x43c44000},{0x43c46000},{0x43c48000},{0x43c4a000},{0x43c4c000},{0x43c4e000},{0x43c50000},{0x43c52000},{0x43c54000},{0x43c56000},{0x43c58000},{0x43c5a000},{0x43c5c000},{0x43c5e000},{0x43c60000},{0x43c62000},{0x43c64000},{0x43c66000},{0x43c68000},{0x43c6a000},{0x43c6c000},{0x43c6e000},{0x43c70000},{0x43c72000},{0x43c74000},{0x43c76000},{0x43c78000},{0x43c7a000},{0x43c7c000},{0x43c7e000}, -{0x43c80000},{0x43c82000},{0x43c84000},{0x43c86000},{0x43c88000},{0x43c8a000},{0x43c8c000},{0x43c8e000},{0x43c90000},{0x43c92000},{0x43c94000},{0x43c96000},{0x43c98000},{0x43c9a000},{0x43c9c000},{0x43c9e000},{0x43ca0000},{0x43ca2000},{0x43ca4000},{0x43ca6000},{0x43ca8000},{0x43caa000},{0x43cac000},{0x43cae000},{0x43cb0000},{0x43cb2000},{0x43cb4000},{0x43cb6000},{0x43cb8000},{0x43cba000},{0x43cbc000},{0x43cbe000}, -{0x43cc0000},{0x43cc2000},{0x43cc4000},{0x43cc6000},{0x43cc8000},{0x43cca000},{0x43ccc000},{0x43cce000},{0x43cd0000},{0x43cd2000},{0x43cd4000},{0x43cd6000},{0x43cd8000},{0x43cda000},{0x43cdc000},{0x43cde000},{0x43ce0000},{0x43ce2000},{0x43ce4000},{0x43ce6000},{0x43ce8000},{0x43cea000},{0x43cec000},{0x43cee000},{0x43cf0000},{0x43cf2000},{0x43cf4000},{0x43cf6000},{0x43cf8000},{0x43cfa000},{0x43cfc000},{0x43cfe000}, -{0x43d00000},{0x43d02000},{0x43d04000},{0x43d06000},{0x43d08000},{0x43d0a000},{0x43d0c000},{0x43d0e000},{0x43d10000},{0x43d12000},{0x43d14000},{0x43d16000},{0x43d18000},{0x43d1a000},{0x43d1c000},{0x43d1e000},{0x43d20000},{0x43d22000},{0x43d24000},{0x43d26000},{0x43d28000},{0x43d2a000},{0x43d2c000},{0x43d2e000},{0x43d30000},{0x43d32000},{0x43d34000},{0x43d36000},{0x43d38000},{0x43d3a000},{0x43d3c000},{0x43d3e000}, -{0x43d40000},{0x43d42000},{0x43d44000},{0x43d46000},{0x43d48000},{0x43d4a000},{0x43d4c000},{0x43d4e000},{0x43d50000},{0x43d52000},{0x43d54000},{0x43d56000},{0x43d58000},{0x43d5a000},{0x43d5c000},{0x43d5e000},{0x43d60000},{0x43d62000},{0x43d64000},{0x43d66000},{0x43d68000},{0x43d6a000},{0x43d6c000},{0x43d6e000},{0x43d70000},{0x43d72000},{0x43d74000},{0x43d76000},{0x43d78000},{0x43d7a000},{0x43d7c000},{0x43d7e000}, -{0x43d80000},{0x43d82000},{0x43d84000},{0x43d86000},{0x43d88000},{0x43d8a000},{0x43d8c000},{0x43d8e000},{0x43d90000},{0x43d92000},{0x43d94000},{0x43d96000},{0x43d98000},{0x43d9a000},{0x43d9c000},{0x43d9e000},{0x43da0000},{0x43da2000},{0x43da4000},{0x43da6000},{0x43da8000},{0x43daa000},{0x43dac000},{0x43dae000},{0x43db0000},{0x43db2000},{0x43db4000},{0x43db6000},{0x43db8000},{0x43dba000},{0x43dbc000},{0x43dbe000}, -{0x43dc0000},{0x43dc2000},{0x43dc4000},{0x43dc6000},{0x43dc8000},{0x43dca000},{0x43dcc000},{0x43dce000},{0x43dd0000},{0x43dd2000},{0x43dd4000},{0x43dd6000},{0x43dd8000},{0x43dda000},{0x43ddc000},{0x43dde000},{0x43de0000},{0x43de2000},{0x43de4000},{0x43de6000},{0x43de8000},{0x43dea000},{0x43dec000},{0x43dee000},{0x43df0000},{0x43df2000},{0x43df4000},{0x43df6000},{0x43df8000},{0x43dfa000},{0x43dfc000},{0x43dfe000}, -{0x43e00000},{0x43e02000},{0x43e04000},{0x43e06000},{0x43e08000},{0x43e0a000},{0x43e0c000},{0x43e0e000},{0x43e10000},{0x43e12000},{0x43e14000},{0x43e16000},{0x43e18000},{0x43e1a000},{0x43e1c000},{0x43e1e000},{0x43e20000},{0x43e22000},{0x43e24000},{0x43e26000},{0x43e28000},{0x43e2a000},{0x43e2c000},{0x43e2e000},{0x43e30000},{0x43e32000},{0x43e34000},{0x43e36000},{0x43e38000},{0x43e3a000},{0x43e3c000},{0x43e3e000}, -{0x43e40000},{0x43e42000},{0x43e44000},{0x43e46000},{0x43e48000},{0x43e4a000},{0x43e4c000},{0x43e4e000},{0x43e50000},{0x43e52000},{0x43e54000},{0x43e56000},{0x43e58000},{0x43e5a000},{0x43e5c000},{0x43e5e000},{0x43e60000},{0x43e62000},{0x43e64000},{0x43e66000},{0x43e68000},{0x43e6a000},{0x43e6c000},{0x43e6e000},{0x43e70000},{0x43e72000},{0x43e74000},{0x43e76000},{0x43e78000},{0x43e7a000},{0x43e7c000},{0x43e7e000}, -{0x43e80000},{0x43e82000},{0x43e84000},{0x43e86000},{0x43e88000},{0x43e8a000},{0x43e8c000},{0x43e8e000},{0x43e90000},{0x43e92000},{0x43e94000},{0x43e96000},{0x43e98000},{0x43e9a000},{0x43e9c000},{0x43e9e000},{0x43ea0000},{0x43ea2000},{0x43ea4000},{0x43ea6000},{0x43ea8000},{0x43eaa000},{0x43eac000},{0x43eae000},{0x43eb0000},{0x43eb2000},{0x43eb4000},{0x43eb6000},{0x43eb8000},{0x43eba000},{0x43ebc000},{0x43ebe000}, -{0x43ec0000},{0x43ec2000},{0x43ec4000},{0x43ec6000},{0x43ec8000},{0x43eca000},{0x43ecc000},{0x43ece000},{0x43ed0000},{0x43ed2000},{0x43ed4000},{0x43ed6000},{0x43ed8000},{0x43eda000},{0x43edc000},{0x43ede000},{0x43ee0000},{0x43ee2000},{0x43ee4000},{0x43ee6000},{0x43ee8000},{0x43eea000},{0x43eec000},{0x43eee000},{0x43ef0000},{0x43ef2000},{0x43ef4000},{0x43ef6000},{0x43ef8000},{0x43efa000},{0x43efc000},{0x43efe000}, -{0x43f00000},{0x43f02000},{0x43f04000},{0x43f06000},{0x43f08000},{0x43f0a000},{0x43f0c000},{0x43f0e000},{0x43f10000},{0x43f12000},{0x43f14000},{0x43f16000},{0x43f18000},{0x43f1a000},{0x43f1c000},{0x43f1e000},{0x43f20000},{0x43f22000},{0x43f24000},{0x43f26000},{0x43f28000},{0x43f2a000},{0x43f2c000},{0x43f2e000},{0x43f30000},{0x43f32000},{0x43f34000},{0x43f36000},{0x43f38000},{0x43f3a000},{0x43f3c000},{0x43f3e000}, -{0x43f40000},{0x43f42000},{0x43f44000},{0x43f46000},{0x43f48000},{0x43f4a000},{0x43f4c000},{0x43f4e000},{0x43f50000},{0x43f52000},{0x43f54000},{0x43f56000},{0x43f58000},{0x43f5a000},{0x43f5c000},{0x43f5e000},{0x43f60000},{0x43f62000},{0x43f64000},{0x43f66000},{0x43f68000},{0x43f6a000},{0x43f6c000},{0x43f6e000},{0x43f70000},{0x43f72000},{0x43f74000},{0x43f76000},{0x43f78000},{0x43f7a000},{0x43f7c000},{0x43f7e000}, -{0x43f80000},{0x43f82000},{0x43f84000},{0x43f86000},{0x43f88000},{0x43f8a000},{0x43f8c000},{0x43f8e000},{0x43f90000},{0x43f92000},{0x43f94000},{0x43f96000},{0x43f98000},{0x43f9a000},{0x43f9c000},{0x43f9e000},{0x43fa0000},{0x43fa2000},{0x43fa4000},{0x43fa6000},{0x43fa8000},{0x43faa000},{0x43fac000},{0x43fae000},{0x43fb0000},{0x43fb2000},{0x43fb4000},{0x43fb6000},{0x43fb8000},{0x43fba000},{0x43fbc000},{0x43fbe000}, -{0x43fc0000},{0x43fc2000},{0x43fc4000},{0x43fc6000},{0x43fc8000},{0x43fca000},{0x43fcc000},{0x43fce000},{0x43fd0000},{0x43fd2000},{0x43fd4000},{0x43fd6000},{0x43fd8000},{0x43fda000},{0x43fdc000},{0x43fde000},{0x43fe0000},{0x43fe2000},{0x43fe4000},{0x43fe6000},{0x43fe8000},{0x43fea000},{0x43fec000},{0x43fee000},{0x43ff0000},{0x43ff2000},{0x43ff4000},{0x43ff6000},{0x43ff8000},{0x43ffa000},{0x43ffc000},{0x43ffe000}, -{0x44000000},{0x44002000},{0x44004000},{0x44006000},{0x44008000},{0x4400a000},{0x4400c000},{0x4400e000},{0x44010000},{0x44012000},{0x44014000},{0x44016000},{0x44018000},{0x4401a000},{0x4401c000},{0x4401e000},{0x44020000},{0x44022000},{0x44024000},{0x44026000},{0x44028000},{0x4402a000},{0x4402c000},{0x4402e000},{0x44030000},{0x44032000},{0x44034000},{0x44036000},{0x44038000},{0x4403a000},{0x4403c000},{0x4403e000}, -{0x44040000},{0x44042000},{0x44044000},{0x44046000},{0x44048000},{0x4404a000},{0x4404c000},{0x4404e000},{0x44050000},{0x44052000},{0x44054000},{0x44056000},{0x44058000},{0x4405a000},{0x4405c000},{0x4405e000},{0x44060000},{0x44062000},{0x44064000},{0x44066000},{0x44068000},{0x4406a000},{0x4406c000},{0x4406e000},{0x44070000},{0x44072000},{0x44074000},{0x44076000},{0x44078000},{0x4407a000},{0x4407c000},{0x4407e000}, -{0x44080000},{0x44082000},{0x44084000},{0x44086000},{0x44088000},{0x4408a000},{0x4408c000},{0x4408e000},{0x44090000},{0x44092000},{0x44094000},{0x44096000},{0x44098000},{0x4409a000},{0x4409c000},{0x4409e000},{0x440a0000},{0x440a2000},{0x440a4000},{0x440a6000},{0x440a8000},{0x440aa000},{0x440ac000},{0x440ae000},{0x440b0000},{0x440b2000},{0x440b4000},{0x440b6000},{0x440b8000},{0x440ba000},{0x440bc000},{0x440be000}, -{0x440c0000},{0x440c2000},{0x440c4000},{0x440c6000},{0x440c8000},{0x440ca000},{0x440cc000},{0x440ce000},{0x440d0000},{0x440d2000},{0x440d4000},{0x440d6000},{0x440d8000},{0x440da000},{0x440dc000},{0x440de000},{0x440e0000},{0x440e2000},{0x440e4000},{0x440e6000},{0x440e8000},{0x440ea000},{0x440ec000},{0x440ee000},{0x440f0000},{0x440f2000},{0x440f4000},{0x440f6000},{0x440f8000},{0x440fa000},{0x440fc000},{0x440fe000}, -{0x44100000},{0x44102000},{0x44104000},{0x44106000},{0x44108000},{0x4410a000},{0x4410c000},{0x4410e000},{0x44110000},{0x44112000},{0x44114000},{0x44116000},{0x44118000},{0x4411a000},{0x4411c000},{0x4411e000},{0x44120000},{0x44122000},{0x44124000},{0x44126000},{0x44128000},{0x4412a000},{0x4412c000},{0x4412e000},{0x44130000},{0x44132000},{0x44134000},{0x44136000},{0x44138000},{0x4413a000},{0x4413c000},{0x4413e000}, -{0x44140000},{0x44142000},{0x44144000},{0x44146000},{0x44148000},{0x4414a000},{0x4414c000},{0x4414e000},{0x44150000},{0x44152000},{0x44154000},{0x44156000},{0x44158000},{0x4415a000},{0x4415c000},{0x4415e000},{0x44160000},{0x44162000},{0x44164000},{0x44166000},{0x44168000},{0x4416a000},{0x4416c000},{0x4416e000},{0x44170000},{0x44172000},{0x44174000},{0x44176000},{0x44178000},{0x4417a000},{0x4417c000},{0x4417e000}, -{0x44180000},{0x44182000},{0x44184000},{0x44186000},{0x44188000},{0x4418a000},{0x4418c000},{0x4418e000},{0x44190000},{0x44192000},{0x44194000},{0x44196000},{0x44198000},{0x4419a000},{0x4419c000},{0x4419e000},{0x441a0000},{0x441a2000},{0x441a4000},{0x441a6000},{0x441a8000},{0x441aa000},{0x441ac000},{0x441ae000},{0x441b0000},{0x441b2000},{0x441b4000},{0x441b6000},{0x441b8000},{0x441ba000},{0x441bc000},{0x441be000}, -{0x441c0000},{0x441c2000},{0x441c4000},{0x441c6000},{0x441c8000},{0x441ca000},{0x441cc000},{0x441ce000},{0x441d0000},{0x441d2000},{0x441d4000},{0x441d6000},{0x441d8000},{0x441da000},{0x441dc000},{0x441de000},{0x441e0000},{0x441e2000},{0x441e4000},{0x441e6000},{0x441e8000},{0x441ea000},{0x441ec000},{0x441ee000},{0x441f0000},{0x441f2000},{0x441f4000},{0x441f6000},{0x441f8000},{0x441fa000},{0x441fc000},{0x441fe000}, -{0x44200000},{0x44202000},{0x44204000},{0x44206000},{0x44208000},{0x4420a000},{0x4420c000},{0x4420e000},{0x44210000},{0x44212000},{0x44214000},{0x44216000},{0x44218000},{0x4421a000},{0x4421c000},{0x4421e000},{0x44220000},{0x44222000},{0x44224000},{0x44226000},{0x44228000},{0x4422a000},{0x4422c000},{0x4422e000},{0x44230000},{0x44232000},{0x44234000},{0x44236000},{0x44238000},{0x4423a000},{0x4423c000},{0x4423e000}, -{0x44240000},{0x44242000},{0x44244000},{0x44246000},{0x44248000},{0x4424a000},{0x4424c000},{0x4424e000},{0x44250000},{0x44252000},{0x44254000},{0x44256000},{0x44258000},{0x4425a000},{0x4425c000},{0x4425e000},{0x44260000},{0x44262000},{0x44264000},{0x44266000},{0x44268000},{0x4426a000},{0x4426c000},{0x4426e000},{0x44270000},{0x44272000},{0x44274000},{0x44276000},{0x44278000},{0x4427a000},{0x4427c000},{0x4427e000}, -{0x44280000},{0x44282000},{0x44284000},{0x44286000},{0x44288000},{0x4428a000},{0x4428c000},{0x4428e000},{0x44290000},{0x44292000},{0x44294000},{0x44296000},{0x44298000},{0x4429a000},{0x4429c000},{0x4429e000},{0x442a0000},{0x442a2000},{0x442a4000},{0x442a6000},{0x442a8000},{0x442aa000},{0x442ac000},{0x442ae000},{0x442b0000},{0x442b2000},{0x442b4000},{0x442b6000},{0x442b8000},{0x442ba000},{0x442bc000},{0x442be000}, -{0x442c0000},{0x442c2000},{0x442c4000},{0x442c6000},{0x442c8000},{0x442ca000},{0x442cc000},{0x442ce000},{0x442d0000},{0x442d2000},{0x442d4000},{0x442d6000},{0x442d8000},{0x442da000},{0x442dc000},{0x442de000},{0x442e0000},{0x442e2000},{0x442e4000},{0x442e6000},{0x442e8000},{0x442ea000},{0x442ec000},{0x442ee000},{0x442f0000},{0x442f2000},{0x442f4000},{0x442f6000},{0x442f8000},{0x442fa000},{0x442fc000},{0x442fe000}, -{0x44300000},{0x44302000},{0x44304000},{0x44306000},{0x44308000},{0x4430a000},{0x4430c000},{0x4430e000},{0x44310000},{0x44312000},{0x44314000},{0x44316000},{0x44318000},{0x4431a000},{0x4431c000},{0x4431e000},{0x44320000},{0x44322000},{0x44324000},{0x44326000},{0x44328000},{0x4432a000},{0x4432c000},{0x4432e000},{0x44330000},{0x44332000},{0x44334000},{0x44336000},{0x44338000},{0x4433a000},{0x4433c000},{0x4433e000}, -{0x44340000},{0x44342000},{0x44344000},{0x44346000},{0x44348000},{0x4434a000},{0x4434c000},{0x4434e000},{0x44350000},{0x44352000},{0x44354000},{0x44356000},{0x44358000},{0x4435a000},{0x4435c000},{0x4435e000},{0x44360000},{0x44362000},{0x44364000},{0x44366000},{0x44368000},{0x4436a000},{0x4436c000},{0x4436e000},{0x44370000},{0x44372000},{0x44374000},{0x44376000},{0x44378000},{0x4437a000},{0x4437c000},{0x4437e000}, -{0x44380000},{0x44382000},{0x44384000},{0x44386000},{0x44388000},{0x4438a000},{0x4438c000},{0x4438e000},{0x44390000},{0x44392000},{0x44394000},{0x44396000},{0x44398000},{0x4439a000},{0x4439c000},{0x4439e000},{0x443a0000},{0x443a2000},{0x443a4000},{0x443a6000},{0x443a8000},{0x443aa000},{0x443ac000},{0x443ae000},{0x443b0000},{0x443b2000},{0x443b4000},{0x443b6000},{0x443b8000},{0x443ba000},{0x443bc000},{0x443be000}, -{0x443c0000},{0x443c2000},{0x443c4000},{0x443c6000},{0x443c8000},{0x443ca000},{0x443cc000},{0x443ce000},{0x443d0000},{0x443d2000},{0x443d4000},{0x443d6000},{0x443d8000},{0x443da000},{0x443dc000},{0x443de000},{0x443e0000},{0x443e2000},{0x443e4000},{0x443e6000},{0x443e8000},{0x443ea000},{0x443ec000},{0x443ee000},{0x443f0000},{0x443f2000},{0x443f4000},{0x443f6000},{0x443f8000},{0x443fa000},{0x443fc000},{0x443fe000}, -{0x44400000},{0x44402000},{0x44404000},{0x44406000},{0x44408000},{0x4440a000},{0x4440c000},{0x4440e000},{0x44410000},{0x44412000},{0x44414000},{0x44416000},{0x44418000},{0x4441a000},{0x4441c000},{0x4441e000},{0x44420000},{0x44422000},{0x44424000},{0x44426000},{0x44428000},{0x4442a000},{0x4442c000},{0x4442e000},{0x44430000},{0x44432000},{0x44434000},{0x44436000},{0x44438000},{0x4443a000},{0x4443c000},{0x4443e000}, -{0x44440000},{0x44442000},{0x44444000},{0x44446000},{0x44448000},{0x4444a000},{0x4444c000},{0x4444e000},{0x44450000},{0x44452000},{0x44454000},{0x44456000},{0x44458000},{0x4445a000},{0x4445c000},{0x4445e000},{0x44460000},{0x44462000},{0x44464000},{0x44466000},{0x44468000},{0x4446a000},{0x4446c000},{0x4446e000},{0x44470000},{0x44472000},{0x44474000},{0x44476000},{0x44478000},{0x4447a000},{0x4447c000},{0x4447e000}, -{0x44480000},{0x44482000},{0x44484000},{0x44486000},{0x44488000},{0x4448a000},{0x4448c000},{0x4448e000},{0x44490000},{0x44492000},{0x44494000},{0x44496000},{0x44498000},{0x4449a000},{0x4449c000},{0x4449e000},{0x444a0000},{0x444a2000},{0x444a4000},{0x444a6000},{0x444a8000},{0x444aa000},{0x444ac000},{0x444ae000},{0x444b0000},{0x444b2000},{0x444b4000},{0x444b6000},{0x444b8000},{0x444ba000},{0x444bc000},{0x444be000}, -{0x444c0000},{0x444c2000},{0x444c4000},{0x444c6000},{0x444c8000},{0x444ca000},{0x444cc000},{0x444ce000},{0x444d0000},{0x444d2000},{0x444d4000},{0x444d6000},{0x444d8000},{0x444da000},{0x444dc000},{0x444de000},{0x444e0000},{0x444e2000},{0x444e4000},{0x444e6000},{0x444e8000},{0x444ea000},{0x444ec000},{0x444ee000},{0x444f0000},{0x444f2000},{0x444f4000},{0x444f6000},{0x444f8000},{0x444fa000},{0x444fc000},{0x444fe000}, -{0x44500000},{0x44502000},{0x44504000},{0x44506000},{0x44508000},{0x4450a000},{0x4450c000},{0x4450e000},{0x44510000},{0x44512000},{0x44514000},{0x44516000},{0x44518000},{0x4451a000},{0x4451c000},{0x4451e000},{0x44520000},{0x44522000},{0x44524000},{0x44526000},{0x44528000},{0x4452a000},{0x4452c000},{0x4452e000},{0x44530000},{0x44532000},{0x44534000},{0x44536000},{0x44538000},{0x4453a000},{0x4453c000},{0x4453e000}, -{0x44540000},{0x44542000},{0x44544000},{0x44546000},{0x44548000},{0x4454a000},{0x4454c000},{0x4454e000},{0x44550000},{0x44552000},{0x44554000},{0x44556000},{0x44558000},{0x4455a000},{0x4455c000},{0x4455e000},{0x44560000},{0x44562000},{0x44564000},{0x44566000},{0x44568000},{0x4456a000},{0x4456c000},{0x4456e000},{0x44570000},{0x44572000},{0x44574000},{0x44576000},{0x44578000},{0x4457a000},{0x4457c000},{0x4457e000}, -{0x44580000},{0x44582000},{0x44584000},{0x44586000},{0x44588000},{0x4458a000},{0x4458c000},{0x4458e000},{0x44590000},{0x44592000},{0x44594000},{0x44596000},{0x44598000},{0x4459a000},{0x4459c000},{0x4459e000},{0x445a0000},{0x445a2000},{0x445a4000},{0x445a6000},{0x445a8000},{0x445aa000},{0x445ac000},{0x445ae000},{0x445b0000},{0x445b2000},{0x445b4000},{0x445b6000},{0x445b8000},{0x445ba000},{0x445bc000},{0x445be000}, -{0x445c0000},{0x445c2000},{0x445c4000},{0x445c6000},{0x445c8000},{0x445ca000},{0x445cc000},{0x445ce000},{0x445d0000},{0x445d2000},{0x445d4000},{0x445d6000},{0x445d8000},{0x445da000},{0x445dc000},{0x445de000},{0x445e0000},{0x445e2000},{0x445e4000},{0x445e6000},{0x445e8000},{0x445ea000},{0x445ec000},{0x445ee000},{0x445f0000},{0x445f2000},{0x445f4000},{0x445f6000},{0x445f8000},{0x445fa000},{0x445fc000},{0x445fe000}, -{0x44600000},{0x44602000},{0x44604000},{0x44606000},{0x44608000},{0x4460a000},{0x4460c000},{0x4460e000},{0x44610000},{0x44612000},{0x44614000},{0x44616000},{0x44618000},{0x4461a000},{0x4461c000},{0x4461e000},{0x44620000},{0x44622000},{0x44624000},{0x44626000},{0x44628000},{0x4462a000},{0x4462c000},{0x4462e000},{0x44630000},{0x44632000},{0x44634000},{0x44636000},{0x44638000},{0x4463a000},{0x4463c000},{0x4463e000}, -{0x44640000},{0x44642000},{0x44644000},{0x44646000},{0x44648000},{0x4464a000},{0x4464c000},{0x4464e000},{0x44650000},{0x44652000},{0x44654000},{0x44656000},{0x44658000},{0x4465a000},{0x4465c000},{0x4465e000},{0x44660000},{0x44662000},{0x44664000},{0x44666000},{0x44668000},{0x4466a000},{0x4466c000},{0x4466e000},{0x44670000},{0x44672000},{0x44674000},{0x44676000},{0x44678000},{0x4467a000},{0x4467c000},{0x4467e000}, -{0x44680000},{0x44682000},{0x44684000},{0x44686000},{0x44688000},{0x4468a000},{0x4468c000},{0x4468e000},{0x44690000},{0x44692000},{0x44694000},{0x44696000},{0x44698000},{0x4469a000},{0x4469c000},{0x4469e000},{0x446a0000},{0x446a2000},{0x446a4000},{0x446a6000},{0x446a8000},{0x446aa000},{0x446ac000},{0x446ae000},{0x446b0000},{0x446b2000},{0x446b4000},{0x446b6000},{0x446b8000},{0x446ba000},{0x446bc000},{0x446be000}, -{0x446c0000},{0x446c2000},{0x446c4000},{0x446c6000},{0x446c8000},{0x446ca000},{0x446cc000},{0x446ce000},{0x446d0000},{0x446d2000},{0x446d4000},{0x446d6000},{0x446d8000},{0x446da000},{0x446dc000},{0x446de000},{0x446e0000},{0x446e2000},{0x446e4000},{0x446e6000},{0x446e8000},{0x446ea000},{0x446ec000},{0x446ee000},{0x446f0000},{0x446f2000},{0x446f4000},{0x446f6000},{0x446f8000},{0x446fa000},{0x446fc000},{0x446fe000}, -{0x44700000},{0x44702000},{0x44704000},{0x44706000},{0x44708000},{0x4470a000},{0x4470c000},{0x4470e000},{0x44710000},{0x44712000},{0x44714000},{0x44716000},{0x44718000},{0x4471a000},{0x4471c000},{0x4471e000},{0x44720000},{0x44722000},{0x44724000},{0x44726000},{0x44728000},{0x4472a000},{0x4472c000},{0x4472e000},{0x44730000},{0x44732000},{0x44734000},{0x44736000},{0x44738000},{0x4473a000},{0x4473c000},{0x4473e000}, -{0x44740000},{0x44742000},{0x44744000},{0x44746000},{0x44748000},{0x4474a000},{0x4474c000},{0x4474e000},{0x44750000},{0x44752000},{0x44754000},{0x44756000},{0x44758000},{0x4475a000},{0x4475c000},{0x4475e000},{0x44760000},{0x44762000},{0x44764000},{0x44766000},{0x44768000},{0x4476a000},{0x4476c000},{0x4476e000},{0x44770000},{0x44772000},{0x44774000},{0x44776000},{0x44778000},{0x4477a000},{0x4477c000},{0x4477e000}, -{0x44780000},{0x44782000},{0x44784000},{0x44786000},{0x44788000},{0x4478a000},{0x4478c000},{0x4478e000},{0x44790000},{0x44792000},{0x44794000},{0x44796000},{0x44798000},{0x4479a000},{0x4479c000},{0x4479e000},{0x447a0000},{0x447a2000},{0x447a4000},{0x447a6000},{0x447a8000},{0x447aa000},{0x447ac000},{0x447ae000},{0x447b0000},{0x447b2000},{0x447b4000},{0x447b6000},{0x447b8000},{0x447ba000},{0x447bc000},{0x447be000}, -{0x447c0000},{0x447c2000},{0x447c4000},{0x447c6000},{0x447c8000},{0x447ca000},{0x447cc000},{0x447ce000},{0x447d0000},{0x447d2000},{0x447d4000},{0x447d6000},{0x447d8000},{0x447da000},{0x447dc000},{0x447de000},{0x447e0000},{0x447e2000},{0x447e4000},{0x447e6000},{0x447e8000},{0x447ea000},{0x447ec000},{0x447ee000},{0x447f0000},{0x447f2000},{0x447f4000},{0x447f6000},{0x447f8000},{0x447fa000},{0x447fc000},{0x447fe000}, -{0x44800000},{0x44802000},{0x44804000},{0x44806000},{0x44808000},{0x4480a000},{0x4480c000},{0x4480e000},{0x44810000},{0x44812000},{0x44814000},{0x44816000},{0x44818000},{0x4481a000},{0x4481c000},{0x4481e000},{0x44820000},{0x44822000},{0x44824000},{0x44826000},{0x44828000},{0x4482a000},{0x4482c000},{0x4482e000},{0x44830000},{0x44832000},{0x44834000},{0x44836000},{0x44838000},{0x4483a000},{0x4483c000},{0x4483e000}, -{0x44840000},{0x44842000},{0x44844000},{0x44846000},{0x44848000},{0x4484a000},{0x4484c000},{0x4484e000},{0x44850000},{0x44852000},{0x44854000},{0x44856000},{0x44858000},{0x4485a000},{0x4485c000},{0x4485e000},{0x44860000},{0x44862000},{0x44864000},{0x44866000},{0x44868000},{0x4486a000},{0x4486c000},{0x4486e000},{0x44870000},{0x44872000},{0x44874000},{0x44876000},{0x44878000},{0x4487a000},{0x4487c000},{0x4487e000}, -{0x44880000},{0x44882000},{0x44884000},{0x44886000},{0x44888000},{0x4488a000},{0x4488c000},{0x4488e000},{0x44890000},{0x44892000},{0x44894000},{0x44896000},{0x44898000},{0x4489a000},{0x4489c000},{0x4489e000},{0x448a0000},{0x448a2000},{0x448a4000},{0x448a6000},{0x448a8000},{0x448aa000},{0x448ac000},{0x448ae000},{0x448b0000},{0x448b2000},{0x448b4000},{0x448b6000},{0x448b8000},{0x448ba000},{0x448bc000},{0x448be000}, -{0x448c0000},{0x448c2000},{0x448c4000},{0x448c6000},{0x448c8000},{0x448ca000},{0x448cc000},{0x448ce000},{0x448d0000},{0x448d2000},{0x448d4000},{0x448d6000},{0x448d8000},{0x448da000},{0x448dc000},{0x448de000},{0x448e0000},{0x448e2000},{0x448e4000},{0x448e6000},{0x448e8000},{0x448ea000},{0x448ec000},{0x448ee000},{0x448f0000},{0x448f2000},{0x448f4000},{0x448f6000},{0x448f8000},{0x448fa000},{0x448fc000},{0x448fe000}, -{0x44900000},{0x44902000},{0x44904000},{0x44906000},{0x44908000},{0x4490a000},{0x4490c000},{0x4490e000},{0x44910000},{0x44912000},{0x44914000},{0x44916000},{0x44918000},{0x4491a000},{0x4491c000},{0x4491e000},{0x44920000},{0x44922000},{0x44924000},{0x44926000},{0x44928000},{0x4492a000},{0x4492c000},{0x4492e000},{0x44930000},{0x44932000},{0x44934000},{0x44936000},{0x44938000},{0x4493a000},{0x4493c000},{0x4493e000}, -{0x44940000},{0x44942000},{0x44944000},{0x44946000},{0x44948000},{0x4494a000},{0x4494c000},{0x4494e000},{0x44950000},{0x44952000},{0x44954000},{0x44956000},{0x44958000},{0x4495a000},{0x4495c000},{0x4495e000},{0x44960000},{0x44962000},{0x44964000},{0x44966000},{0x44968000},{0x4496a000},{0x4496c000},{0x4496e000},{0x44970000},{0x44972000},{0x44974000},{0x44976000},{0x44978000},{0x4497a000},{0x4497c000},{0x4497e000}, -{0x44980000},{0x44982000},{0x44984000},{0x44986000},{0x44988000},{0x4498a000},{0x4498c000},{0x4498e000},{0x44990000},{0x44992000},{0x44994000},{0x44996000},{0x44998000},{0x4499a000},{0x4499c000},{0x4499e000},{0x449a0000},{0x449a2000},{0x449a4000},{0x449a6000},{0x449a8000},{0x449aa000},{0x449ac000},{0x449ae000},{0x449b0000},{0x449b2000},{0x449b4000},{0x449b6000},{0x449b8000},{0x449ba000},{0x449bc000},{0x449be000}, -{0x449c0000},{0x449c2000},{0x449c4000},{0x449c6000},{0x449c8000},{0x449ca000},{0x449cc000},{0x449ce000},{0x449d0000},{0x449d2000},{0x449d4000},{0x449d6000},{0x449d8000},{0x449da000},{0x449dc000},{0x449de000},{0x449e0000},{0x449e2000},{0x449e4000},{0x449e6000},{0x449e8000},{0x449ea000},{0x449ec000},{0x449ee000},{0x449f0000},{0x449f2000},{0x449f4000},{0x449f6000},{0x449f8000},{0x449fa000},{0x449fc000},{0x449fe000}, -{0x44a00000},{0x44a02000},{0x44a04000},{0x44a06000},{0x44a08000},{0x44a0a000},{0x44a0c000},{0x44a0e000},{0x44a10000},{0x44a12000},{0x44a14000},{0x44a16000},{0x44a18000},{0x44a1a000},{0x44a1c000},{0x44a1e000},{0x44a20000},{0x44a22000},{0x44a24000},{0x44a26000},{0x44a28000},{0x44a2a000},{0x44a2c000},{0x44a2e000},{0x44a30000},{0x44a32000},{0x44a34000},{0x44a36000},{0x44a38000},{0x44a3a000},{0x44a3c000},{0x44a3e000}, -{0x44a40000},{0x44a42000},{0x44a44000},{0x44a46000},{0x44a48000},{0x44a4a000},{0x44a4c000},{0x44a4e000},{0x44a50000},{0x44a52000},{0x44a54000},{0x44a56000},{0x44a58000},{0x44a5a000},{0x44a5c000},{0x44a5e000},{0x44a60000},{0x44a62000},{0x44a64000},{0x44a66000},{0x44a68000},{0x44a6a000},{0x44a6c000},{0x44a6e000},{0x44a70000},{0x44a72000},{0x44a74000},{0x44a76000},{0x44a78000},{0x44a7a000},{0x44a7c000},{0x44a7e000}, -{0x44a80000},{0x44a82000},{0x44a84000},{0x44a86000},{0x44a88000},{0x44a8a000},{0x44a8c000},{0x44a8e000},{0x44a90000},{0x44a92000},{0x44a94000},{0x44a96000},{0x44a98000},{0x44a9a000},{0x44a9c000},{0x44a9e000},{0x44aa0000},{0x44aa2000},{0x44aa4000},{0x44aa6000},{0x44aa8000},{0x44aaa000},{0x44aac000},{0x44aae000},{0x44ab0000},{0x44ab2000},{0x44ab4000},{0x44ab6000},{0x44ab8000},{0x44aba000},{0x44abc000},{0x44abe000}, -{0x44ac0000},{0x44ac2000},{0x44ac4000},{0x44ac6000},{0x44ac8000},{0x44aca000},{0x44acc000},{0x44ace000},{0x44ad0000},{0x44ad2000},{0x44ad4000},{0x44ad6000},{0x44ad8000},{0x44ada000},{0x44adc000},{0x44ade000},{0x44ae0000},{0x44ae2000},{0x44ae4000},{0x44ae6000},{0x44ae8000},{0x44aea000},{0x44aec000},{0x44aee000},{0x44af0000},{0x44af2000},{0x44af4000},{0x44af6000},{0x44af8000},{0x44afa000},{0x44afc000},{0x44afe000}, -{0x44b00000},{0x44b02000},{0x44b04000},{0x44b06000},{0x44b08000},{0x44b0a000},{0x44b0c000},{0x44b0e000},{0x44b10000},{0x44b12000},{0x44b14000},{0x44b16000},{0x44b18000},{0x44b1a000},{0x44b1c000},{0x44b1e000},{0x44b20000},{0x44b22000},{0x44b24000},{0x44b26000},{0x44b28000},{0x44b2a000},{0x44b2c000},{0x44b2e000},{0x44b30000},{0x44b32000},{0x44b34000},{0x44b36000},{0x44b38000},{0x44b3a000},{0x44b3c000},{0x44b3e000}, -{0x44b40000},{0x44b42000},{0x44b44000},{0x44b46000},{0x44b48000},{0x44b4a000},{0x44b4c000},{0x44b4e000},{0x44b50000},{0x44b52000},{0x44b54000},{0x44b56000},{0x44b58000},{0x44b5a000},{0x44b5c000},{0x44b5e000},{0x44b60000},{0x44b62000},{0x44b64000},{0x44b66000},{0x44b68000},{0x44b6a000},{0x44b6c000},{0x44b6e000},{0x44b70000},{0x44b72000},{0x44b74000},{0x44b76000},{0x44b78000},{0x44b7a000},{0x44b7c000},{0x44b7e000}, -{0x44b80000},{0x44b82000},{0x44b84000},{0x44b86000},{0x44b88000},{0x44b8a000},{0x44b8c000},{0x44b8e000},{0x44b90000},{0x44b92000},{0x44b94000},{0x44b96000},{0x44b98000},{0x44b9a000},{0x44b9c000},{0x44b9e000},{0x44ba0000},{0x44ba2000},{0x44ba4000},{0x44ba6000},{0x44ba8000},{0x44baa000},{0x44bac000},{0x44bae000},{0x44bb0000},{0x44bb2000},{0x44bb4000},{0x44bb6000},{0x44bb8000},{0x44bba000},{0x44bbc000},{0x44bbe000}, -{0x44bc0000},{0x44bc2000},{0x44bc4000},{0x44bc6000},{0x44bc8000},{0x44bca000},{0x44bcc000},{0x44bce000},{0x44bd0000},{0x44bd2000},{0x44bd4000},{0x44bd6000},{0x44bd8000},{0x44bda000},{0x44bdc000},{0x44bde000},{0x44be0000},{0x44be2000},{0x44be4000},{0x44be6000},{0x44be8000},{0x44bea000},{0x44bec000},{0x44bee000},{0x44bf0000},{0x44bf2000},{0x44bf4000},{0x44bf6000},{0x44bf8000},{0x44bfa000},{0x44bfc000},{0x44bfe000}, -{0x44c00000},{0x44c02000},{0x44c04000},{0x44c06000},{0x44c08000},{0x44c0a000},{0x44c0c000},{0x44c0e000},{0x44c10000},{0x44c12000},{0x44c14000},{0x44c16000},{0x44c18000},{0x44c1a000},{0x44c1c000},{0x44c1e000},{0x44c20000},{0x44c22000},{0x44c24000},{0x44c26000},{0x44c28000},{0x44c2a000},{0x44c2c000},{0x44c2e000},{0x44c30000},{0x44c32000},{0x44c34000},{0x44c36000},{0x44c38000},{0x44c3a000},{0x44c3c000},{0x44c3e000}, -{0x44c40000},{0x44c42000},{0x44c44000},{0x44c46000},{0x44c48000},{0x44c4a000},{0x44c4c000},{0x44c4e000},{0x44c50000},{0x44c52000},{0x44c54000},{0x44c56000},{0x44c58000},{0x44c5a000},{0x44c5c000},{0x44c5e000},{0x44c60000},{0x44c62000},{0x44c64000},{0x44c66000},{0x44c68000},{0x44c6a000},{0x44c6c000},{0x44c6e000},{0x44c70000},{0x44c72000},{0x44c74000},{0x44c76000},{0x44c78000},{0x44c7a000},{0x44c7c000},{0x44c7e000}, -{0x44c80000},{0x44c82000},{0x44c84000},{0x44c86000},{0x44c88000},{0x44c8a000},{0x44c8c000},{0x44c8e000},{0x44c90000},{0x44c92000},{0x44c94000},{0x44c96000},{0x44c98000},{0x44c9a000},{0x44c9c000},{0x44c9e000},{0x44ca0000},{0x44ca2000},{0x44ca4000},{0x44ca6000},{0x44ca8000},{0x44caa000},{0x44cac000},{0x44cae000},{0x44cb0000},{0x44cb2000},{0x44cb4000},{0x44cb6000},{0x44cb8000},{0x44cba000},{0x44cbc000},{0x44cbe000}, -{0x44cc0000},{0x44cc2000},{0x44cc4000},{0x44cc6000},{0x44cc8000},{0x44cca000},{0x44ccc000},{0x44cce000},{0x44cd0000},{0x44cd2000},{0x44cd4000},{0x44cd6000},{0x44cd8000},{0x44cda000},{0x44cdc000},{0x44cde000},{0x44ce0000},{0x44ce2000},{0x44ce4000},{0x44ce6000},{0x44ce8000},{0x44cea000},{0x44cec000},{0x44cee000},{0x44cf0000},{0x44cf2000},{0x44cf4000},{0x44cf6000},{0x44cf8000},{0x44cfa000},{0x44cfc000},{0x44cfe000}, -{0x44d00000},{0x44d02000},{0x44d04000},{0x44d06000},{0x44d08000},{0x44d0a000},{0x44d0c000},{0x44d0e000},{0x44d10000},{0x44d12000},{0x44d14000},{0x44d16000},{0x44d18000},{0x44d1a000},{0x44d1c000},{0x44d1e000},{0x44d20000},{0x44d22000},{0x44d24000},{0x44d26000},{0x44d28000},{0x44d2a000},{0x44d2c000},{0x44d2e000},{0x44d30000},{0x44d32000},{0x44d34000},{0x44d36000},{0x44d38000},{0x44d3a000},{0x44d3c000},{0x44d3e000}, -{0x44d40000},{0x44d42000},{0x44d44000},{0x44d46000},{0x44d48000},{0x44d4a000},{0x44d4c000},{0x44d4e000},{0x44d50000},{0x44d52000},{0x44d54000},{0x44d56000},{0x44d58000},{0x44d5a000},{0x44d5c000},{0x44d5e000},{0x44d60000},{0x44d62000},{0x44d64000},{0x44d66000},{0x44d68000},{0x44d6a000},{0x44d6c000},{0x44d6e000},{0x44d70000},{0x44d72000},{0x44d74000},{0x44d76000},{0x44d78000},{0x44d7a000},{0x44d7c000},{0x44d7e000}, -{0x44d80000},{0x44d82000},{0x44d84000},{0x44d86000},{0x44d88000},{0x44d8a000},{0x44d8c000},{0x44d8e000},{0x44d90000},{0x44d92000},{0x44d94000},{0x44d96000},{0x44d98000},{0x44d9a000},{0x44d9c000},{0x44d9e000},{0x44da0000},{0x44da2000},{0x44da4000},{0x44da6000},{0x44da8000},{0x44daa000},{0x44dac000},{0x44dae000},{0x44db0000},{0x44db2000},{0x44db4000},{0x44db6000},{0x44db8000},{0x44dba000},{0x44dbc000},{0x44dbe000}, -{0x44dc0000},{0x44dc2000},{0x44dc4000},{0x44dc6000},{0x44dc8000},{0x44dca000},{0x44dcc000},{0x44dce000},{0x44dd0000},{0x44dd2000},{0x44dd4000},{0x44dd6000},{0x44dd8000},{0x44dda000},{0x44ddc000},{0x44dde000},{0x44de0000},{0x44de2000},{0x44de4000},{0x44de6000},{0x44de8000},{0x44dea000},{0x44dec000},{0x44dee000},{0x44df0000},{0x44df2000},{0x44df4000},{0x44df6000},{0x44df8000},{0x44dfa000},{0x44dfc000},{0x44dfe000}, -{0x44e00000},{0x44e02000},{0x44e04000},{0x44e06000},{0x44e08000},{0x44e0a000},{0x44e0c000},{0x44e0e000},{0x44e10000},{0x44e12000},{0x44e14000},{0x44e16000},{0x44e18000},{0x44e1a000},{0x44e1c000},{0x44e1e000},{0x44e20000},{0x44e22000},{0x44e24000},{0x44e26000},{0x44e28000},{0x44e2a000},{0x44e2c000},{0x44e2e000},{0x44e30000},{0x44e32000},{0x44e34000},{0x44e36000},{0x44e38000},{0x44e3a000},{0x44e3c000},{0x44e3e000}, -{0x44e40000},{0x44e42000},{0x44e44000},{0x44e46000},{0x44e48000},{0x44e4a000},{0x44e4c000},{0x44e4e000},{0x44e50000},{0x44e52000},{0x44e54000},{0x44e56000},{0x44e58000},{0x44e5a000},{0x44e5c000},{0x44e5e000},{0x44e60000},{0x44e62000},{0x44e64000},{0x44e66000},{0x44e68000},{0x44e6a000},{0x44e6c000},{0x44e6e000},{0x44e70000},{0x44e72000},{0x44e74000},{0x44e76000},{0x44e78000},{0x44e7a000},{0x44e7c000},{0x44e7e000}, -{0x44e80000},{0x44e82000},{0x44e84000},{0x44e86000},{0x44e88000},{0x44e8a000},{0x44e8c000},{0x44e8e000},{0x44e90000},{0x44e92000},{0x44e94000},{0x44e96000},{0x44e98000},{0x44e9a000},{0x44e9c000},{0x44e9e000},{0x44ea0000},{0x44ea2000},{0x44ea4000},{0x44ea6000},{0x44ea8000},{0x44eaa000},{0x44eac000},{0x44eae000},{0x44eb0000},{0x44eb2000},{0x44eb4000},{0x44eb6000},{0x44eb8000},{0x44eba000},{0x44ebc000},{0x44ebe000}, -{0x44ec0000},{0x44ec2000},{0x44ec4000},{0x44ec6000},{0x44ec8000},{0x44eca000},{0x44ecc000},{0x44ece000},{0x44ed0000},{0x44ed2000},{0x44ed4000},{0x44ed6000},{0x44ed8000},{0x44eda000},{0x44edc000},{0x44ede000},{0x44ee0000},{0x44ee2000},{0x44ee4000},{0x44ee6000},{0x44ee8000},{0x44eea000},{0x44eec000},{0x44eee000},{0x44ef0000},{0x44ef2000},{0x44ef4000},{0x44ef6000},{0x44ef8000},{0x44efa000},{0x44efc000},{0x44efe000}, -{0x44f00000},{0x44f02000},{0x44f04000},{0x44f06000},{0x44f08000},{0x44f0a000},{0x44f0c000},{0x44f0e000},{0x44f10000},{0x44f12000},{0x44f14000},{0x44f16000},{0x44f18000},{0x44f1a000},{0x44f1c000},{0x44f1e000},{0x44f20000},{0x44f22000},{0x44f24000},{0x44f26000},{0x44f28000},{0x44f2a000},{0x44f2c000},{0x44f2e000},{0x44f30000},{0x44f32000},{0x44f34000},{0x44f36000},{0x44f38000},{0x44f3a000},{0x44f3c000},{0x44f3e000}, -{0x44f40000},{0x44f42000},{0x44f44000},{0x44f46000},{0x44f48000},{0x44f4a000},{0x44f4c000},{0x44f4e000},{0x44f50000},{0x44f52000},{0x44f54000},{0x44f56000},{0x44f58000},{0x44f5a000},{0x44f5c000},{0x44f5e000},{0x44f60000},{0x44f62000},{0x44f64000},{0x44f66000},{0x44f68000},{0x44f6a000},{0x44f6c000},{0x44f6e000},{0x44f70000},{0x44f72000},{0x44f74000},{0x44f76000},{0x44f78000},{0x44f7a000},{0x44f7c000},{0x44f7e000}, -{0x44f80000},{0x44f82000},{0x44f84000},{0x44f86000},{0x44f88000},{0x44f8a000},{0x44f8c000},{0x44f8e000},{0x44f90000},{0x44f92000},{0x44f94000},{0x44f96000},{0x44f98000},{0x44f9a000},{0x44f9c000},{0x44f9e000},{0x44fa0000},{0x44fa2000},{0x44fa4000},{0x44fa6000},{0x44fa8000},{0x44faa000},{0x44fac000},{0x44fae000},{0x44fb0000},{0x44fb2000},{0x44fb4000},{0x44fb6000},{0x44fb8000},{0x44fba000},{0x44fbc000},{0x44fbe000}, -{0x44fc0000},{0x44fc2000},{0x44fc4000},{0x44fc6000},{0x44fc8000},{0x44fca000},{0x44fcc000},{0x44fce000},{0x44fd0000},{0x44fd2000},{0x44fd4000},{0x44fd6000},{0x44fd8000},{0x44fda000},{0x44fdc000},{0x44fde000},{0x44fe0000},{0x44fe2000},{0x44fe4000},{0x44fe6000},{0x44fe8000},{0x44fea000},{0x44fec000},{0x44fee000},{0x44ff0000},{0x44ff2000},{0x44ff4000},{0x44ff6000},{0x44ff8000},{0x44ffa000},{0x44ffc000},{0x44ffe000}, -{0x45000000},{0x45002000},{0x45004000},{0x45006000},{0x45008000},{0x4500a000},{0x4500c000},{0x4500e000},{0x45010000},{0x45012000},{0x45014000},{0x45016000},{0x45018000},{0x4501a000},{0x4501c000},{0x4501e000},{0x45020000},{0x45022000},{0x45024000},{0x45026000},{0x45028000},{0x4502a000},{0x4502c000},{0x4502e000},{0x45030000},{0x45032000},{0x45034000},{0x45036000},{0x45038000},{0x4503a000},{0x4503c000},{0x4503e000}, -{0x45040000},{0x45042000},{0x45044000},{0x45046000},{0x45048000},{0x4504a000},{0x4504c000},{0x4504e000},{0x45050000},{0x45052000},{0x45054000},{0x45056000},{0x45058000},{0x4505a000},{0x4505c000},{0x4505e000},{0x45060000},{0x45062000},{0x45064000},{0x45066000},{0x45068000},{0x4506a000},{0x4506c000},{0x4506e000},{0x45070000},{0x45072000},{0x45074000},{0x45076000},{0x45078000},{0x4507a000},{0x4507c000},{0x4507e000}, -{0x45080000},{0x45082000},{0x45084000},{0x45086000},{0x45088000},{0x4508a000},{0x4508c000},{0x4508e000},{0x45090000},{0x45092000},{0x45094000},{0x45096000},{0x45098000},{0x4509a000},{0x4509c000},{0x4509e000},{0x450a0000},{0x450a2000},{0x450a4000},{0x450a6000},{0x450a8000},{0x450aa000},{0x450ac000},{0x450ae000},{0x450b0000},{0x450b2000},{0x450b4000},{0x450b6000},{0x450b8000},{0x450ba000},{0x450bc000},{0x450be000}, -{0x450c0000},{0x450c2000},{0x450c4000},{0x450c6000},{0x450c8000},{0x450ca000},{0x450cc000},{0x450ce000},{0x450d0000},{0x450d2000},{0x450d4000},{0x450d6000},{0x450d8000},{0x450da000},{0x450dc000},{0x450de000},{0x450e0000},{0x450e2000},{0x450e4000},{0x450e6000},{0x450e8000},{0x450ea000},{0x450ec000},{0x450ee000},{0x450f0000},{0x450f2000},{0x450f4000},{0x450f6000},{0x450f8000},{0x450fa000},{0x450fc000},{0x450fe000}, -{0x45100000},{0x45102000},{0x45104000},{0x45106000},{0x45108000},{0x4510a000},{0x4510c000},{0x4510e000},{0x45110000},{0x45112000},{0x45114000},{0x45116000},{0x45118000},{0x4511a000},{0x4511c000},{0x4511e000},{0x45120000},{0x45122000},{0x45124000},{0x45126000},{0x45128000},{0x4512a000},{0x4512c000},{0x4512e000},{0x45130000},{0x45132000},{0x45134000},{0x45136000},{0x45138000},{0x4513a000},{0x4513c000},{0x4513e000}, -{0x45140000},{0x45142000},{0x45144000},{0x45146000},{0x45148000},{0x4514a000},{0x4514c000},{0x4514e000},{0x45150000},{0x45152000},{0x45154000},{0x45156000},{0x45158000},{0x4515a000},{0x4515c000},{0x4515e000},{0x45160000},{0x45162000},{0x45164000},{0x45166000},{0x45168000},{0x4516a000},{0x4516c000},{0x4516e000},{0x45170000},{0x45172000},{0x45174000},{0x45176000},{0x45178000},{0x4517a000},{0x4517c000},{0x4517e000}, -{0x45180000},{0x45182000},{0x45184000},{0x45186000},{0x45188000},{0x4518a000},{0x4518c000},{0x4518e000},{0x45190000},{0x45192000},{0x45194000},{0x45196000},{0x45198000},{0x4519a000},{0x4519c000},{0x4519e000},{0x451a0000},{0x451a2000},{0x451a4000},{0x451a6000},{0x451a8000},{0x451aa000},{0x451ac000},{0x451ae000},{0x451b0000},{0x451b2000},{0x451b4000},{0x451b6000},{0x451b8000},{0x451ba000},{0x451bc000},{0x451be000}, -{0x451c0000},{0x451c2000},{0x451c4000},{0x451c6000},{0x451c8000},{0x451ca000},{0x451cc000},{0x451ce000},{0x451d0000},{0x451d2000},{0x451d4000},{0x451d6000},{0x451d8000},{0x451da000},{0x451dc000},{0x451de000},{0x451e0000},{0x451e2000},{0x451e4000},{0x451e6000},{0x451e8000},{0x451ea000},{0x451ec000},{0x451ee000},{0x451f0000},{0x451f2000},{0x451f4000},{0x451f6000},{0x451f8000},{0x451fa000},{0x451fc000},{0x451fe000}, -{0x45200000},{0x45202000},{0x45204000},{0x45206000},{0x45208000},{0x4520a000},{0x4520c000},{0x4520e000},{0x45210000},{0x45212000},{0x45214000},{0x45216000},{0x45218000},{0x4521a000},{0x4521c000},{0x4521e000},{0x45220000},{0x45222000},{0x45224000},{0x45226000},{0x45228000},{0x4522a000},{0x4522c000},{0x4522e000},{0x45230000},{0x45232000},{0x45234000},{0x45236000},{0x45238000},{0x4523a000},{0x4523c000},{0x4523e000}, -{0x45240000},{0x45242000},{0x45244000},{0x45246000},{0x45248000},{0x4524a000},{0x4524c000},{0x4524e000},{0x45250000},{0x45252000},{0x45254000},{0x45256000},{0x45258000},{0x4525a000},{0x4525c000},{0x4525e000},{0x45260000},{0x45262000},{0x45264000},{0x45266000},{0x45268000},{0x4526a000},{0x4526c000},{0x4526e000},{0x45270000},{0x45272000},{0x45274000},{0x45276000},{0x45278000},{0x4527a000},{0x4527c000},{0x4527e000}, -{0x45280000},{0x45282000},{0x45284000},{0x45286000},{0x45288000},{0x4528a000},{0x4528c000},{0x4528e000},{0x45290000},{0x45292000},{0x45294000},{0x45296000},{0x45298000},{0x4529a000},{0x4529c000},{0x4529e000},{0x452a0000},{0x452a2000},{0x452a4000},{0x452a6000},{0x452a8000},{0x452aa000},{0x452ac000},{0x452ae000},{0x452b0000},{0x452b2000},{0x452b4000},{0x452b6000},{0x452b8000},{0x452ba000},{0x452bc000},{0x452be000}, -{0x452c0000},{0x452c2000},{0x452c4000},{0x452c6000},{0x452c8000},{0x452ca000},{0x452cc000},{0x452ce000},{0x452d0000},{0x452d2000},{0x452d4000},{0x452d6000},{0x452d8000},{0x452da000},{0x452dc000},{0x452de000},{0x452e0000},{0x452e2000},{0x452e4000},{0x452e6000},{0x452e8000},{0x452ea000},{0x452ec000},{0x452ee000},{0x452f0000},{0x452f2000},{0x452f4000},{0x452f6000},{0x452f8000},{0x452fa000},{0x452fc000},{0x452fe000}, -{0x45300000},{0x45302000},{0x45304000},{0x45306000},{0x45308000},{0x4530a000},{0x4530c000},{0x4530e000},{0x45310000},{0x45312000},{0x45314000},{0x45316000},{0x45318000},{0x4531a000},{0x4531c000},{0x4531e000},{0x45320000},{0x45322000},{0x45324000},{0x45326000},{0x45328000},{0x4532a000},{0x4532c000},{0x4532e000},{0x45330000},{0x45332000},{0x45334000},{0x45336000},{0x45338000},{0x4533a000},{0x4533c000},{0x4533e000}, -{0x45340000},{0x45342000},{0x45344000},{0x45346000},{0x45348000},{0x4534a000},{0x4534c000},{0x4534e000},{0x45350000},{0x45352000},{0x45354000},{0x45356000},{0x45358000},{0x4535a000},{0x4535c000},{0x4535e000},{0x45360000},{0x45362000},{0x45364000},{0x45366000},{0x45368000},{0x4536a000},{0x4536c000},{0x4536e000},{0x45370000},{0x45372000},{0x45374000},{0x45376000},{0x45378000},{0x4537a000},{0x4537c000},{0x4537e000}, -{0x45380000},{0x45382000},{0x45384000},{0x45386000},{0x45388000},{0x4538a000},{0x4538c000},{0x4538e000},{0x45390000},{0x45392000},{0x45394000},{0x45396000},{0x45398000},{0x4539a000},{0x4539c000},{0x4539e000},{0x453a0000},{0x453a2000},{0x453a4000},{0x453a6000},{0x453a8000},{0x453aa000},{0x453ac000},{0x453ae000},{0x453b0000},{0x453b2000},{0x453b4000},{0x453b6000},{0x453b8000},{0x453ba000},{0x453bc000},{0x453be000}, -{0x453c0000},{0x453c2000},{0x453c4000},{0x453c6000},{0x453c8000},{0x453ca000},{0x453cc000},{0x453ce000},{0x453d0000},{0x453d2000},{0x453d4000},{0x453d6000},{0x453d8000},{0x453da000},{0x453dc000},{0x453de000},{0x453e0000},{0x453e2000},{0x453e4000},{0x453e6000},{0x453e8000},{0x453ea000},{0x453ec000},{0x453ee000},{0x453f0000},{0x453f2000},{0x453f4000},{0x453f6000},{0x453f8000},{0x453fa000},{0x453fc000},{0x453fe000}, -{0x45400000},{0x45402000},{0x45404000},{0x45406000},{0x45408000},{0x4540a000},{0x4540c000},{0x4540e000},{0x45410000},{0x45412000},{0x45414000},{0x45416000},{0x45418000},{0x4541a000},{0x4541c000},{0x4541e000},{0x45420000},{0x45422000},{0x45424000},{0x45426000},{0x45428000},{0x4542a000},{0x4542c000},{0x4542e000},{0x45430000},{0x45432000},{0x45434000},{0x45436000},{0x45438000},{0x4543a000},{0x4543c000},{0x4543e000}, -{0x45440000},{0x45442000},{0x45444000},{0x45446000},{0x45448000},{0x4544a000},{0x4544c000},{0x4544e000},{0x45450000},{0x45452000},{0x45454000},{0x45456000},{0x45458000},{0x4545a000},{0x4545c000},{0x4545e000},{0x45460000},{0x45462000},{0x45464000},{0x45466000},{0x45468000},{0x4546a000},{0x4546c000},{0x4546e000},{0x45470000},{0x45472000},{0x45474000},{0x45476000},{0x45478000},{0x4547a000},{0x4547c000},{0x4547e000}, -{0x45480000},{0x45482000},{0x45484000},{0x45486000},{0x45488000},{0x4548a000},{0x4548c000},{0x4548e000},{0x45490000},{0x45492000},{0x45494000},{0x45496000},{0x45498000},{0x4549a000},{0x4549c000},{0x4549e000},{0x454a0000},{0x454a2000},{0x454a4000},{0x454a6000},{0x454a8000},{0x454aa000},{0x454ac000},{0x454ae000},{0x454b0000},{0x454b2000},{0x454b4000},{0x454b6000},{0x454b8000},{0x454ba000},{0x454bc000},{0x454be000}, -{0x454c0000},{0x454c2000},{0x454c4000},{0x454c6000},{0x454c8000},{0x454ca000},{0x454cc000},{0x454ce000},{0x454d0000},{0x454d2000},{0x454d4000},{0x454d6000},{0x454d8000},{0x454da000},{0x454dc000},{0x454de000},{0x454e0000},{0x454e2000},{0x454e4000},{0x454e6000},{0x454e8000},{0x454ea000},{0x454ec000},{0x454ee000},{0x454f0000},{0x454f2000},{0x454f4000},{0x454f6000},{0x454f8000},{0x454fa000},{0x454fc000},{0x454fe000}, -{0x45500000},{0x45502000},{0x45504000},{0x45506000},{0x45508000},{0x4550a000},{0x4550c000},{0x4550e000},{0x45510000},{0x45512000},{0x45514000},{0x45516000},{0x45518000},{0x4551a000},{0x4551c000},{0x4551e000},{0x45520000},{0x45522000},{0x45524000},{0x45526000},{0x45528000},{0x4552a000},{0x4552c000},{0x4552e000},{0x45530000},{0x45532000},{0x45534000},{0x45536000},{0x45538000},{0x4553a000},{0x4553c000},{0x4553e000}, -{0x45540000},{0x45542000},{0x45544000},{0x45546000},{0x45548000},{0x4554a000},{0x4554c000},{0x4554e000},{0x45550000},{0x45552000},{0x45554000},{0x45556000},{0x45558000},{0x4555a000},{0x4555c000},{0x4555e000},{0x45560000},{0x45562000},{0x45564000},{0x45566000},{0x45568000},{0x4556a000},{0x4556c000},{0x4556e000},{0x45570000},{0x45572000},{0x45574000},{0x45576000},{0x45578000},{0x4557a000},{0x4557c000},{0x4557e000}, -{0x45580000},{0x45582000},{0x45584000},{0x45586000},{0x45588000},{0x4558a000},{0x4558c000},{0x4558e000},{0x45590000},{0x45592000},{0x45594000},{0x45596000},{0x45598000},{0x4559a000},{0x4559c000},{0x4559e000},{0x455a0000},{0x455a2000},{0x455a4000},{0x455a6000},{0x455a8000},{0x455aa000},{0x455ac000},{0x455ae000},{0x455b0000},{0x455b2000},{0x455b4000},{0x455b6000},{0x455b8000},{0x455ba000},{0x455bc000},{0x455be000}, -{0x455c0000},{0x455c2000},{0x455c4000},{0x455c6000},{0x455c8000},{0x455ca000},{0x455cc000},{0x455ce000},{0x455d0000},{0x455d2000},{0x455d4000},{0x455d6000},{0x455d8000},{0x455da000},{0x455dc000},{0x455de000},{0x455e0000},{0x455e2000},{0x455e4000},{0x455e6000},{0x455e8000},{0x455ea000},{0x455ec000},{0x455ee000},{0x455f0000},{0x455f2000},{0x455f4000},{0x455f6000},{0x455f8000},{0x455fa000},{0x455fc000},{0x455fe000}, -{0x45600000},{0x45602000},{0x45604000},{0x45606000},{0x45608000},{0x4560a000},{0x4560c000},{0x4560e000},{0x45610000},{0x45612000},{0x45614000},{0x45616000},{0x45618000},{0x4561a000},{0x4561c000},{0x4561e000},{0x45620000},{0x45622000},{0x45624000},{0x45626000},{0x45628000},{0x4562a000},{0x4562c000},{0x4562e000},{0x45630000},{0x45632000},{0x45634000},{0x45636000},{0x45638000},{0x4563a000},{0x4563c000},{0x4563e000}, -{0x45640000},{0x45642000},{0x45644000},{0x45646000},{0x45648000},{0x4564a000},{0x4564c000},{0x4564e000},{0x45650000},{0x45652000},{0x45654000},{0x45656000},{0x45658000},{0x4565a000},{0x4565c000},{0x4565e000},{0x45660000},{0x45662000},{0x45664000},{0x45666000},{0x45668000},{0x4566a000},{0x4566c000},{0x4566e000},{0x45670000},{0x45672000},{0x45674000},{0x45676000},{0x45678000},{0x4567a000},{0x4567c000},{0x4567e000}, -{0x45680000},{0x45682000},{0x45684000},{0x45686000},{0x45688000},{0x4568a000},{0x4568c000},{0x4568e000},{0x45690000},{0x45692000},{0x45694000},{0x45696000},{0x45698000},{0x4569a000},{0x4569c000},{0x4569e000},{0x456a0000},{0x456a2000},{0x456a4000},{0x456a6000},{0x456a8000},{0x456aa000},{0x456ac000},{0x456ae000},{0x456b0000},{0x456b2000},{0x456b4000},{0x456b6000},{0x456b8000},{0x456ba000},{0x456bc000},{0x456be000}, -{0x456c0000},{0x456c2000},{0x456c4000},{0x456c6000},{0x456c8000},{0x456ca000},{0x456cc000},{0x456ce000},{0x456d0000},{0x456d2000},{0x456d4000},{0x456d6000},{0x456d8000},{0x456da000},{0x456dc000},{0x456de000},{0x456e0000},{0x456e2000},{0x456e4000},{0x456e6000},{0x456e8000},{0x456ea000},{0x456ec000},{0x456ee000},{0x456f0000},{0x456f2000},{0x456f4000},{0x456f6000},{0x456f8000},{0x456fa000},{0x456fc000},{0x456fe000}, -{0x45700000},{0x45702000},{0x45704000},{0x45706000},{0x45708000},{0x4570a000},{0x4570c000},{0x4570e000},{0x45710000},{0x45712000},{0x45714000},{0x45716000},{0x45718000},{0x4571a000},{0x4571c000},{0x4571e000},{0x45720000},{0x45722000},{0x45724000},{0x45726000},{0x45728000},{0x4572a000},{0x4572c000},{0x4572e000},{0x45730000},{0x45732000},{0x45734000},{0x45736000},{0x45738000},{0x4573a000},{0x4573c000},{0x4573e000}, -{0x45740000},{0x45742000},{0x45744000},{0x45746000},{0x45748000},{0x4574a000},{0x4574c000},{0x4574e000},{0x45750000},{0x45752000},{0x45754000},{0x45756000},{0x45758000},{0x4575a000},{0x4575c000},{0x4575e000},{0x45760000},{0x45762000},{0x45764000},{0x45766000},{0x45768000},{0x4576a000},{0x4576c000},{0x4576e000},{0x45770000},{0x45772000},{0x45774000},{0x45776000},{0x45778000},{0x4577a000},{0x4577c000},{0x4577e000}, -{0x45780000},{0x45782000},{0x45784000},{0x45786000},{0x45788000},{0x4578a000},{0x4578c000},{0x4578e000},{0x45790000},{0x45792000},{0x45794000},{0x45796000},{0x45798000},{0x4579a000},{0x4579c000},{0x4579e000},{0x457a0000},{0x457a2000},{0x457a4000},{0x457a6000},{0x457a8000},{0x457aa000},{0x457ac000},{0x457ae000},{0x457b0000},{0x457b2000},{0x457b4000},{0x457b6000},{0x457b8000},{0x457ba000},{0x457bc000},{0x457be000}, -{0x457c0000},{0x457c2000},{0x457c4000},{0x457c6000},{0x457c8000},{0x457ca000},{0x457cc000},{0x457ce000},{0x457d0000},{0x457d2000},{0x457d4000},{0x457d6000},{0x457d8000},{0x457da000},{0x457dc000},{0x457de000},{0x457e0000},{0x457e2000},{0x457e4000},{0x457e6000},{0x457e8000},{0x457ea000},{0x457ec000},{0x457ee000},{0x457f0000},{0x457f2000},{0x457f4000},{0x457f6000},{0x457f8000},{0x457fa000},{0x457fc000},{0x457fe000}, -{0x45800000},{0x45802000},{0x45804000},{0x45806000},{0x45808000},{0x4580a000},{0x4580c000},{0x4580e000},{0x45810000},{0x45812000},{0x45814000},{0x45816000},{0x45818000},{0x4581a000},{0x4581c000},{0x4581e000},{0x45820000},{0x45822000},{0x45824000},{0x45826000},{0x45828000},{0x4582a000},{0x4582c000},{0x4582e000},{0x45830000},{0x45832000},{0x45834000},{0x45836000},{0x45838000},{0x4583a000},{0x4583c000},{0x4583e000}, -{0x45840000},{0x45842000},{0x45844000},{0x45846000},{0x45848000},{0x4584a000},{0x4584c000},{0x4584e000},{0x45850000},{0x45852000},{0x45854000},{0x45856000},{0x45858000},{0x4585a000},{0x4585c000},{0x4585e000},{0x45860000},{0x45862000},{0x45864000},{0x45866000},{0x45868000},{0x4586a000},{0x4586c000},{0x4586e000},{0x45870000},{0x45872000},{0x45874000},{0x45876000},{0x45878000},{0x4587a000},{0x4587c000},{0x4587e000}, -{0x45880000},{0x45882000},{0x45884000},{0x45886000},{0x45888000},{0x4588a000},{0x4588c000},{0x4588e000},{0x45890000},{0x45892000},{0x45894000},{0x45896000},{0x45898000},{0x4589a000},{0x4589c000},{0x4589e000},{0x458a0000},{0x458a2000},{0x458a4000},{0x458a6000},{0x458a8000},{0x458aa000},{0x458ac000},{0x458ae000},{0x458b0000},{0x458b2000},{0x458b4000},{0x458b6000},{0x458b8000},{0x458ba000},{0x458bc000},{0x458be000}, -{0x458c0000},{0x458c2000},{0x458c4000},{0x458c6000},{0x458c8000},{0x458ca000},{0x458cc000},{0x458ce000},{0x458d0000},{0x458d2000},{0x458d4000},{0x458d6000},{0x458d8000},{0x458da000},{0x458dc000},{0x458de000},{0x458e0000},{0x458e2000},{0x458e4000},{0x458e6000},{0x458e8000},{0x458ea000},{0x458ec000},{0x458ee000},{0x458f0000},{0x458f2000},{0x458f4000},{0x458f6000},{0x458f8000},{0x458fa000},{0x458fc000},{0x458fe000}, -{0x45900000},{0x45902000},{0x45904000},{0x45906000},{0x45908000},{0x4590a000},{0x4590c000},{0x4590e000},{0x45910000},{0x45912000},{0x45914000},{0x45916000},{0x45918000},{0x4591a000},{0x4591c000},{0x4591e000},{0x45920000},{0x45922000},{0x45924000},{0x45926000},{0x45928000},{0x4592a000},{0x4592c000},{0x4592e000},{0x45930000},{0x45932000},{0x45934000},{0x45936000},{0x45938000},{0x4593a000},{0x4593c000},{0x4593e000}, -{0x45940000},{0x45942000},{0x45944000},{0x45946000},{0x45948000},{0x4594a000},{0x4594c000},{0x4594e000},{0x45950000},{0x45952000},{0x45954000},{0x45956000},{0x45958000},{0x4595a000},{0x4595c000},{0x4595e000},{0x45960000},{0x45962000},{0x45964000},{0x45966000},{0x45968000},{0x4596a000},{0x4596c000},{0x4596e000},{0x45970000},{0x45972000},{0x45974000},{0x45976000},{0x45978000},{0x4597a000},{0x4597c000},{0x4597e000}, -{0x45980000},{0x45982000},{0x45984000},{0x45986000},{0x45988000},{0x4598a000},{0x4598c000},{0x4598e000},{0x45990000},{0x45992000},{0x45994000},{0x45996000},{0x45998000},{0x4599a000},{0x4599c000},{0x4599e000},{0x459a0000},{0x459a2000},{0x459a4000},{0x459a6000},{0x459a8000},{0x459aa000},{0x459ac000},{0x459ae000},{0x459b0000},{0x459b2000},{0x459b4000},{0x459b6000},{0x459b8000},{0x459ba000},{0x459bc000},{0x459be000}, -{0x459c0000},{0x459c2000},{0x459c4000},{0x459c6000},{0x459c8000},{0x459ca000},{0x459cc000},{0x459ce000},{0x459d0000},{0x459d2000},{0x459d4000},{0x459d6000},{0x459d8000},{0x459da000},{0x459dc000},{0x459de000},{0x459e0000},{0x459e2000},{0x459e4000},{0x459e6000},{0x459e8000},{0x459ea000},{0x459ec000},{0x459ee000},{0x459f0000},{0x459f2000},{0x459f4000},{0x459f6000},{0x459f8000},{0x459fa000},{0x459fc000},{0x459fe000}, -{0x45a00000},{0x45a02000},{0x45a04000},{0x45a06000},{0x45a08000},{0x45a0a000},{0x45a0c000},{0x45a0e000},{0x45a10000},{0x45a12000},{0x45a14000},{0x45a16000},{0x45a18000},{0x45a1a000},{0x45a1c000},{0x45a1e000},{0x45a20000},{0x45a22000},{0x45a24000},{0x45a26000},{0x45a28000},{0x45a2a000},{0x45a2c000},{0x45a2e000},{0x45a30000},{0x45a32000},{0x45a34000},{0x45a36000},{0x45a38000},{0x45a3a000},{0x45a3c000},{0x45a3e000}, -{0x45a40000},{0x45a42000},{0x45a44000},{0x45a46000},{0x45a48000},{0x45a4a000},{0x45a4c000},{0x45a4e000},{0x45a50000},{0x45a52000},{0x45a54000},{0x45a56000},{0x45a58000},{0x45a5a000},{0x45a5c000},{0x45a5e000},{0x45a60000},{0x45a62000},{0x45a64000},{0x45a66000},{0x45a68000},{0x45a6a000},{0x45a6c000},{0x45a6e000},{0x45a70000},{0x45a72000},{0x45a74000},{0x45a76000},{0x45a78000},{0x45a7a000},{0x45a7c000},{0x45a7e000}, -{0x45a80000},{0x45a82000},{0x45a84000},{0x45a86000},{0x45a88000},{0x45a8a000},{0x45a8c000},{0x45a8e000},{0x45a90000},{0x45a92000},{0x45a94000},{0x45a96000},{0x45a98000},{0x45a9a000},{0x45a9c000},{0x45a9e000},{0x45aa0000},{0x45aa2000},{0x45aa4000},{0x45aa6000},{0x45aa8000},{0x45aaa000},{0x45aac000},{0x45aae000},{0x45ab0000},{0x45ab2000},{0x45ab4000},{0x45ab6000},{0x45ab8000},{0x45aba000},{0x45abc000},{0x45abe000}, -{0x45ac0000},{0x45ac2000},{0x45ac4000},{0x45ac6000},{0x45ac8000},{0x45aca000},{0x45acc000},{0x45ace000},{0x45ad0000},{0x45ad2000},{0x45ad4000},{0x45ad6000},{0x45ad8000},{0x45ada000},{0x45adc000},{0x45ade000},{0x45ae0000},{0x45ae2000},{0x45ae4000},{0x45ae6000},{0x45ae8000},{0x45aea000},{0x45aec000},{0x45aee000},{0x45af0000},{0x45af2000},{0x45af4000},{0x45af6000},{0x45af8000},{0x45afa000},{0x45afc000},{0x45afe000}, -{0x45b00000},{0x45b02000},{0x45b04000},{0x45b06000},{0x45b08000},{0x45b0a000},{0x45b0c000},{0x45b0e000},{0x45b10000},{0x45b12000},{0x45b14000},{0x45b16000},{0x45b18000},{0x45b1a000},{0x45b1c000},{0x45b1e000},{0x45b20000},{0x45b22000},{0x45b24000},{0x45b26000},{0x45b28000},{0x45b2a000},{0x45b2c000},{0x45b2e000},{0x45b30000},{0x45b32000},{0x45b34000},{0x45b36000},{0x45b38000},{0x45b3a000},{0x45b3c000},{0x45b3e000}, -{0x45b40000},{0x45b42000},{0x45b44000},{0x45b46000},{0x45b48000},{0x45b4a000},{0x45b4c000},{0x45b4e000},{0x45b50000},{0x45b52000},{0x45b54000},{0x45b56000},{0x45b58000},{0x45b5a000},{0x45b5c000},{0x45b5e000},{0x45b60000},{0x45b62000},{0x45b64000},{0x45b66000},{0x45b68000},{0x45b6a000},{0x45b6c000},{0x45b6e000},{0x45b70000},{0x45b72000},{0x45b74000},{0x45b76000},{0x45b78000},{0x45b7a000},{0x45b7c000},{0x45b7e000}, -{0x45b80000},{0x45b82000},{0x45b84000},{0x45b86000},{0x45b88000},{0x45b8a000},{0x45b8c000},{0x45b8e000},{0x45b90000},{0x45b92000},{0x45b94000},{0x45b96000},{0x45b98000},{0x45b9a000},{0x45b9c000},{0x45b9e000},{0x45ba0000},{0x45ba2000},{0x45ba4000},{0x45ba6000},{0x45ba8000},{0x45baa000},{0x45bac000},{0x45bae000},{0x45bb0000},{0x45bb2000},{0x45bb4000},{0x45bb6000},{0x45bb8000},{0x45bba000},{0x45bbc000},{0x45bbe000}, -{0x45bc0000},{0x45bc2000},{0x45bc4000},{0x45bc6000},{0x45bc8000},{0x45bca000},{0x45bcc000},{0x45bce000},{0x45bd0000},{0x45bd2000},{0x45bd4000},{0x45bd6000},{0x45bd8000},{0x45bda000},{0x45bdc000},{0x45bde000},{0x45be0000},{0x45be2000},{0x45be4000},{0x45be6000},{0x45be8000},{0x45bea000},{0x45bec000},{0x45bee000},{0x45bf0000},{0x45bf2000},{0x45bf4000},{0x45bf6000},{0x45bf8000},{0x45bfa000},{0x45bfc000},{0x45bfe000}, -{0x45c00000},{0x45c02000},{0x45c04000},{0x45c06000},{0x45c08000},{0x45c0a000},{0x45c0c000},{0x45c0e000},{0x45c10000},{0x45c12000},{0x45c14000},{0x45c16000},{0x45c18000},{0x45c1a000},{0x45c1c000},{0x45c1e000},{0x45c20000},{0x45c22000},{0x45c24000},{0x45c26000},{0x45c28000},{0x45c2a000},{0x45c2c000},{0x45c2e000},{0x45c30000},{0x45c32000},{0x45c34000},{0x45c36000},{0x45c38000},{0x45c3a000},{0x45c3c000},{0x45c3e000}, -{0x45c40000},{0x45c42000},{0x45c44000},{0x45c46000},{0x45c48000},{0x45c4a000},{0x45c4c000},{0x45c4e000},{0x45c50000},{0x45c52000},{0x45c54000},{0x45c56000},{0x45c58000},{0x45c5a000},{0x45c5c000},{0x45c5e000},{0x45c60000},{0x45c62000},{0x45c64000},{0x45c66000},{0x45c68000},{0x45c6a000},{0x45c6c000},{0x45c6e000},{0x45c70000},{0x45c72000},{0x45c74000},{0x45c76000},{0x45c78000},{0x45c7a000},{0x45c7c000},{0x45c7e000}, -{0x45c80000},{0x45c82000},{0x45c84000},{0x45c86000},{0x45c88000},{0x45c8a000},{0x45c8c000},{0x45c8e000},{0x45c90000},{0x45c92000},{0x45c94000},{0x45c96000},{0x45c98000},{0x45c9a000},{0x45c9c000},{0x45c9e000},{0x45ca0000},{0x45ca2000},{0x45ca4000},{0x45ca6000},{0x45ca8000},{0x45caa000},{0x45cac000},{0x45cae000},{0x45cb0000},{0x45cb2000},{0x45cb4000},{0x45cb6000},{0x45cb8000},{0x45cba000},{0x45cbc000},{0x45cbe000}, -{0x45cc0000},{0x45cc2000},{0x45cc4000},{0x45cc6000},{0x45cc8000},{0x45cca000},{0x45ccc000},{0x45cce000},{0x45cd0000},{0x45cd2000},{0x45cd4000},{0x45cd6000},{0x45cd8000},{0x45cda000},{0x45cdc000},{0x45cde000},{0x45ce0000},{0x45ce2000},{0x45ce4000},{0x45ce6000},{0x45ce8000},{0x45cea000},{0x45cec000},{0x45cee000},{0x45cf0000},{0x45cf2000},{0x45cf4000},{0x45cf6000},{0x45cf8000},{0x45cfa000},{0x45cfc000},{0x45cfe000}, -{0x45d00000},{0x45d02000},{0x45d04000},{0x45d06000},{0x45d08000},{0x45d0a000},{0x45d0c000},{0x45d0e000},{0x45d10000},{0x45d12000},{0x45d14000},{0x45d16000},{0x45d18000},{0x45d1a000},{0x45d1c000},{0x45d1e000},{0x45d20000},{0x45d22000},{0x45d24000},{0x45d26000},{0x45d28000},{0x45d2a000},{0x45d2c000},{0x45d2e000},{0x45d30000},{0x45d32000},{0x45d34000},{0x45d36000},{0x45d38000},{0x45d3a000},{0x45d3c000},{0x45d3e000}, -{0x45d40000},{0x45d42000},{0x45d44000},{0x45d46000},{0x45d48000},{0x45d4a000},{0x45d4c000},{0x45d4e000},{0x45d50000},{0x45d52000},{0x45d54000},{0x45d56000},{0x45d58000},{0x45d5a000},{0x45d5c000},{0x45d5e000},{0x45d60000},{0x45d62000},{0x45d64000},{0x45d66000},{0x45d68000},{0x45d6a000},{0x45d6c000},{0x45d6e000},{0x45d70000},{0x45d72000},{0x45d74000},{0x45d76000},{0x45d78000},{0x45d7a000},{0x45d7c000},{0x45d7e000}, -{0x45d80000},{0x45d82000},{0x45d84000},{0x45d86000},{0x45d88000},{0x45d8a000},{0x45d8c000},{0x45d8e000},{0x45d90000},{0x45d92000},{0x45d94000},{0x45d96000},{0x45d98000},{0x45d9a000},{0x45d9c000},{0x45d9e000},{0x45da0000},{0x45da2000},{0x45da4000},{0x45da6000},{0x45da8000},{0x45daa000},{0x45dac000},{0x45dae000},{0x45db0000},{0x45db2000},{0x45db4000},{0x45db6000},{0x45db8000},{0x45dba000},{0x45dbc000},{0x45dbe000}, -{0x45dc0000},{0x45dc2000},{0x45dc4000},{0x45dc6000},{0x45dc8000},{0x45dca000},{0x45dcc000},{0x45dce000},{0x45dd0000},{0x45dd2000},{0x45dd4000},{0x45dd6000},{0x45dd8000},{0x45dda000},{0x45ddc000},{0x45dde000},{0x45de0000},{0x45de2000},{0x45de4000},{0x45de6000},{0x45de8000},{0x45dea000},{0x45dec000},{0x45dee000},{0x45df0000},{0x45df2000},{0x45df4000},{0x45df6000},{0x45df8000},{0x45dfa000},{0x45dfc000},{0x45dfe000}, -{0x45e00000},{0x45e02000},{0x45e04000},{0x45e06000},{0x45e08000},{0x45e0a000},{0x45e0c000},{0x45e0e000},{0x45e10000},{0x45e12000},{0x45e14000},{0x45e16000},{0x45e18000},{0x45e1a000},{0x45e1c000},{0x45e1e000},{0x45e20000},{0x45e22000},{0x45e24000},{0x45e26000},{0x45e28000},{0x45e2a000},{0x45e2c000},{0x45e2e000},{0x45e30000},{0x45e32000},{0x45e34000},{0x45e36000},{0x45e38000},{0x45e3a000},{0x45e3c000},{0x45e3e000}, -{0x45e40000},{0x45e42000},{0x45e44000},{0x45e46000},{0x45e48000},{0x45e4a000},{0x45e4c000},{0x45e4e000},{0x45e50000},{0x45e52000},{0x45e54000},{0x45e56000},{0x45e58000},{0x45e5a000},{0x45e5c000},{0x45e5e000},{0x45e60000},{0x45e62000},{0x45e64000},{0x45e66000},{0x45e68000},{0x45e6a000},{0x45e6c000},{0x45e6e000},{0x45e70000},{0x45e72000},{0x45e74000},{0x45e76000},{0x45e78000},{0x45e7a000},{0x45e7c000},{0x45e7e000}, -{0x45e80000},{0x45e82000},{0x45e84000},{0x45e86000},{0x45e88000},{0x45e8a000},{0x45e8c000},{0x45e8e000},{0x45e90000},{0x45e92000},{0x45e94000},{0x45e96000},{0x45e98000},{0x45e9a000},{0x45e9c000},{0x45e9e000},{0x45ea0000},{0x45ea2000},{0x45ea4000},{0x45ea6000},{0x45ea8000},{0x45eaa000},{0x45eac000},{0x45eae000},{0x45eb0000},{0x45eb2000},{0x45eb4000},{0x45eb6000},{0x45eb8000},{0x45eba000},{0x45ebc000},{0x45ebe000}, -{0x45ec0000},{0x45ec2000},{0x45ec4000},{0x45ec6000},{0x45ec8000},{0x45eca000},{0x45ecc000},{0x45ece000},{0x45ed0000},{0x45ed2000},{0x45ed4000},{0x45ed6000},{0x45ed8000},{0x45eda000},{0x45edc000},{0x45ede000},{0x45ee0000},{0x45ee2000},{0x45ee4000},{0x45ee6000},{0x45ee8000},{0x45eea000},{0x45eec000},{0x45eee000},{0x45ef0000},{0x45ef2000},{0x45ef4000},{0x45ef6000},{0x45ef8000},{0x45efa000},{0x45efc000},{0x45efe000}, -{0x45f00000},{0x45f02000},{0x45f04000},{0x45f06000},{0x45f08000},{0x45f0a000},{0x45f0c000},{0x45f0e000},{0x45f10000},{0x45f12000},{0x45f14000},{0x45f16000},{0x45f18000},{0x45f1a000},{0x45f1c000},{0x45f1e000},{0x45f20000},{0x45f22000},{0x45f24000},{0x45f26000},{0x45f28000},{0x45f2a000},{0x45f2c000},{0x45f2e000},{0x45f30000},{0x45f32000},{0x45f34000},{0x45f36000},{0x45f38000},{0x45f3a000},{0x45f3c000},{0x45f3e000}, -{0x45f40000},{0x45f42000},{0x45f44000},{0x45f46000},{0x45f48000},{0x45f4a000},{0x45f4c000},{0x45f4e000},{0x45f50000},{0x45f52000},{0x45f54000},{0x45f56000},{0x45f58000},{0x45f5a000},{0x45f5c000},{0x45f5e000},{0x45f60000},{0x45f62000},{0x45f64000},{0x45f66000},{0x45f68000},{0x45f6a000},{0x45f6c000},{0x45f6e000},{0x45f70000},{0x45f72000},{0x45f74000},{0x45f76000},{0x45f78000},{0x45f7a000},{0x45f7c000},{0x45f7e000}, -{0x45f80000},{0x45f82000},{0x45f84000},{0x45f86000},{0x45f88000},{0x45f8a000},{0x45f8c000},{0x45f8e000},{0x45f90000},{0x45f92000},{0x45f94000},{0x45f96000},{0x45f98000},{0x45f9a000},{0x45f9c000},{0x45f9e000},{0x45fa0000},{0x45fa2000},{0x45fa4000},{0x45fa6000},{0x45fa8000},{0x45faa000},{0x45fac000},{0x45fae000},{0x45fb0000},{0x45fb2000},{0x45fb4000},{0x45fb6000},{0x45fb8000},{0x45fba000},{0x45fbc000},{0x45fbe000}, -{0x45fc0000},{0x45fc2000},{0x45fc4000},{0x45fc6000},{0x45fc8000},{0x45fca000},{0x45fcc000},{0x45fce000},{0x45fd0000},{0x45fd2000},{0x45fd4000},{0x45fd6000},{0x45fd8000},{0x45fda000},{0x45fdc000},{0x45fde000},{0x45fe0000},{0x45fe2000},{0x45fe4000},{0x45fe6000},{0x45fe8000},{0x45fea000},{0x45fec000},{0x45fee000},{0x45ff0000},{0x45ff2000},{0x45ff4000},{0x45ff6000},{0x45ff8000},{0x45ffa000},{0x45ffc000},{0x45ffe000}, -{0x46000000},{0x46002000},{0x46004000},{0x46006000},{0x46008000},{0x4600a000},{0x4600c000},{0x4600e000},{0x46010000},{0x46012000},{0x46014000},{0x46016000},{0x46018000},{0x4601a000},{0x4601c000},{0x4601e000},{0x46020000},{0x46022000},{0x46024000},{0x46026000},{0x46028000},{0x4602a000},{0x4602c000},{0x4602e000},{0x46030000},{0x46032000},{0x46034000},{0x46036000},{0x46038000},{0x4603a000},{0x4603c000},{0x4603e000}, -{0x46040000},{0x46042000},{0x46044000},{0x46046000},{0x46048000},{0x4604a000},{0x4604c000},{0x4604e000},{0x46050000},{0x46052000},{0x46054000},{0x46056000},{0x46058000},{0x4605a000},{0x4605c000},{0x4605e000},{0x46060000},{0x46062000},{0x46064000},{0x46066000},{0x46068000},{0x4606a000},{0x4606c000},{0x4606e000},{0x46070000},{0x46072000},{0x46074000},{0x46076000},{0x46078000},{0x4607a000},{0x4607c000},{0x4607e000}, -{0x46080000},{0x46082000},{0x46084000},{0x46086000},{0x46088000},{0x4608a000},{0x4608c000},{0x4608e000},{0x46090000},{0x46092000},{0x46094000},{0x46096000},{0x46098000},{0x4609a000},{0x4609c000},{0x4609e000},{0x460a0000},{0x460a2000},{0x460a4000},{0x460a6000},{0x460a8000},{0x460aa000},{0x460ac000},{0x460ae000},{0x460b0000},{0x460b2000},{0x460b4000},{0x460b6000},{0x460b8000},{0x460ba000},{0x460bc000},{0x460be000}, -{0x460c0000},{0x460c2000},{0x460c4000},{0x460c6000},{0x460c8000},{0x460ca000},{0x460cc000},{0x460ce000},{0x460d0000},{0x460d2000},{0x460d4000},{0x460d6000},{0x460d8000},{0x460da000},{0x460dc000},{0x460de000},{0x460e0000},{0x460e2000},{0x460e4000},{0x460e6000},{0x460e8000},{0x460ea000},{0x460ec000},{0x460ee000},{0x460f0000},{0x460f2000},{0x460f4000},{0x460f6000},{0x460f8000},{0x460fa000},{0x460fc000},{0x460fe000}, -{0x46100000},{0x46102000},{0x46104000},{0x46106000},{0x46108000},{0x4610a000},{0x4610c000},{0x4610e000},{0x46110000},{0x46112000},{0x46114000},{0x46116000},{0x46118000},{0x4611a000},{0x4611c000},{0x4611e000},{0x46120000},{0x46122000},{0x46124000},{0x46126000},{0x46128000},{0x4612a000},{0x4612c000},{0x4612e000},{0x46130000},{0x46132000},{0x46134000},{0x46136000},{0x46138000},{0x4613a000},{0x4613c000},{0x4613e000}, -{0x46140000},{0x46142000},{0x46144000},{0x46146000},{0x46148000},{0x4614a000},{0x4614c000},{0x4614e000},{0x46150000},{0x46152000},{0x46154000},{0x46156000},{0x46158000},{0x4615a000},{0x4615c000},{0x4615e000},{0x46160000},{0x46162000},{0x46164000},{0x46166000},{0x46168000},{0x4616a000},{0x4616c000},{0x4616e000},{0x46170000},{0x46172000},{0x46174000},{0x46176000},{0x46178000},{0x4617a000},{0x4617c000},{0x4617e000}, -{0x46180000},{0x46182000},{0x46184000},{0x46186000},{0x46188000},{0x4618a000},{0x4618c000},{0x4618e000},{0x46190000},{0x46192000},{0x46194000},{0x46196000},{0x46198000},{0x4619a000},{0x4619c000},{0x4619e000},{0x461a0000},{0x461a2000},{0x461a4000},{0x461a6000},{0x461a8000},{0x461aa000},{0x461ac000},{0x461ae000},{0x461b0000},{0x461b2000},{0x461b4000},{0x461b6000},{0x461b8000},{0x461ba000},{0x461bc000},{0x461be000}, -{0x461c0000},{0x461c2000},{0x461c4000},{0x461c6000},{0x461c8000},{0x461ca000},{0x461cc000},{0x461ce000},{0x461d0000},{0x461d2000},{0x461d4000},{0x461d6000},{0x461d8000},{0x461da000},{0x461dc000},{0x461de000},{0x461e0000},{0x461e2000},{0x461e4000},{0x461e6000},{0x461e8000},{0x461ea000},{0x461ec000},{0x461ee000},{0x461f0000},{0x461f2000},{0x461f4000},{0x461f6000},{0x461f8000},{0x461fa000},{0x461fc000},{0x461fe000}, -{0x46200000},{0x46202000},{0x46204000},{0x46206000},{0x46208000},{0x4620a000},{0x4620c000},{0x4620e000},{0x46210000},{0x46212000},{0x46214000},{0x46216000},{0x46218000},{0x4621a000},{0x4621c000},{0x4621e000},{0x46220000},{0x46222000},{0x46224000},{0x46226000},{0x46228000},{0x4622a000},{0x4622c000},{0x4622e000},{0x46230000},{0x46232000},{0x46234000},{0x46236000},{0x46238000},{0x4623a000},{0x4623c000},{0x4623e000}, -{0x46240000},{0x46242000},{0x46244000},{0x46246000},{0x46248000},{0x4624a000},{0x4624c000},{0x4624e000},{0x46250000},{0x46252000},{0x46254000},{0x46256000},{0x46258000},{0x4625a000},{0x4625c000},{0x4625e000},{0x46260000},{0x46262000},{0x46264000},{0x46266000},{0x46268000},{0x4626a000},{0x4626c000},{0x4626e000},{0x46270000},{0x46272000},{0x46274000},{0x46276000},{0x46278000},{0x4627a000},{0x4627c000},{0x4627e000}, -{0x46280000},{0x46282000},{0x46284000},{0x46286000},{0x46288000},{0x4628a000},{0x4628c000},{0x4628e000},{0x46290000},{0x46292000},{0x46294000},{0x46296000},{0x46298000},{0x4629a000},{0x4629c000},{0x4629e000},{0x462a0000},{0x462a2000},{0x462a4000},{0x462a6000},{0x462a8000},{0x462aa000},{0x462ac000},{0x462ae000},{0x462b0000},{0x462b2000},{0x462b4000},{0x462b6000},{0x462b8000},{0x462ba000},{0x462bc000},{0x462be000}, -{0x462c0000},{0x462c2000},{0x462c4000},{0x462c6000},{0x462c8000},{0x462ca000},{0x462cc000},{0x462ce000},{0x462d0000},{0x462d2000},{0x462d4000},{0x462d6000},{0x462d8000},{0x462da000},{0x462dc000},{0x462de000},{0x462e0000},{0x462e2000},{0x462e4000},{0x462e6000},{0x462e8000},{0x462ea000},{0x462ec000},{0x462ee000},{0x462f0000},{0x462f2000},{0x462f4000},{0x462f6000},{0x462f8000},{0x462fa000},{0x462fc000},{0x462fe000}, -{0x46300000},{0x46302000},{0x46304000},{0x46306000},{0x46308000},{0x4630a000},{0x4630c000},{0x4630e000},{0x46310000},{0x46312000},{0x46314000},{0x46316000},{0x46318000},{0x4631a000},{0x4631c000},{0x4631e000},{0x46320000},{0x46322000},{0x46324000},{0x46326000},{0x46328000},{0x4632a000},{0x4632c000},{0x4632e000},{0x46330000},{0x46332000},{0x46334000},{0x46336000},{0x46338000},{0x4633a000},{0x4633c000},{0x4633e000}, -{0x46340000},{0x46342000},{0x46344000},{0x46346000},{0x46348000},{0x4634a000},{0x4634c000},{0x4634e000},{0x46350000},{0x46352000},{0x46354000},{0x46356000},{0x46358000},{0x4635a000},{0x4635c000},{0x4635e000},{0x46360000},{0x46362000},{0x46364000},{0x46366000},{0x46368000},{0x4636a000},{0x4636c000},{0x4636e000},{0x46370000},{0x46372000},{0x46374000},{0x46376000},{0x46378000},{0x4637a000},{0x4637c000},{0x4637e000}, -{0x46380000},{0x46382000},{0x46384000},{0x46386000},{0x46388000},{0x4638a000},{0x4638c000},{0x4638e000},{0x46390000},{0x46392000},{0x46394000},{0x46396000},{0x46398000},{0x4639a000},{0x4639c000},{0x4639e000},{0x463a0000},{0x463a2000},{0x463a4000},{0x463a6000},{0x463a8000},{0x463aa000},{0x463ac000},{0x463ae000},{0x463b0000},{0x463b2000},{0x463b4000},{0x463b6000},{0x463b8000},{0x463ba000},{0x463bc000},{0x463be000}, -{0x463c0000},{0x463c2000},{0x463c4000},{0x463c6000},{0x463c8000},{0x463ca000},{0x463cc000},{0x463ce000},{0x463d0000},{0x463d2000},{0x463d4000},{0x463d6000},{0x463d8000},{0x463da000},{0x463dc000},{0x463de000},{0x463e0000},{0x463e2000},{0x463e4000},{0x463e6000},{0x463e8000},{0x463ea000},{0x463ec000},{0x463ee000},{0x463f0000},{0x463f2000},{0x463f4000},{0x463f6000},{0x463f8000},{0x463fa000},{0x463fc000},{0x463fe000}, -{0x46400000},{0x46402000},{0x46404000},{0x46406000},{0x46408000},{0x4640a000},{0x4640c000},{0x4640e000},{0x46410000},{0x46412000},{0x46414000},{0x46416000},{0x46418000},{0x4641a000},{0x4641c000},{0x4641e000},{0x46420000},{0x46422000},{0x46424000},{0x46426000},{0x46428000},{0x4642a000},{0x4642c000},{0x4642e000},{0x46430000},{0x46432000},{0x46434000},{0x46436000},{0x46438000},{0x4643a000},{0x4643c000},{0x4643e000}, -{0x46440000},{0x46442000},{0x46444000},{0x46446000},{0x46448000},{0x4644a000},{0x4644c000},{0x4644e000},{0x46450000},{0x46452000},{0x46454000},{0x46456000},{0x46458000},{0x4645a000},{0x4645c000},{0x4645e000},{0x46460000},{0x46462000},{0x46464000},{0x46466000},{0x46468000},{0x4646a000},{0x4646c000},{0x4646e000},{0x46470000},{0x46472000},{0x46474000},{0x46476000},{0x46478000},{0x4647a000},{0x4647c000},{0x4647e000}, -{0x46480000},{0x46482000},{0x46484000},{0x46486000},{0x46488000},{0x4648a000},{0x4648c000},{0x4648e000},{0x46490000},{0x46492000},{0x46494000},{0x46496000},{0x46498000},{0x4649a000},{0x4649c000},{0x4649e000},{0x464a0000},{0x464a2000},{0x464a4000},{0x464a6000},{0x464a8000},{0x464aa000},{0x464ac000},{0x464ae000},{0x464b0000},{0x464b2000},{0x464b4000},{0x464b6000},{0x464b8000},{0x464ba000},{0x464bc000},{0x464be000}, -{0x464c0000},{0x464c2000},{0x464c4000},{0x464c6000},{0x464c8000},{0x464ca000},{0x464cc000},{0x464ce000},{0x464d0000},{0x464d2000},{0x464d4000},{0x464d6000},{0x464d8000},{0x464da000},{0x464dc000},{0x464de000},{0x464e0000},{0x464e2000},{0x464e4000},{0x464e6000},{0x464e8000},{0x464ea000},{0x464ec000},{0x464ee000},{0x464f0000},{0x464f2000},{0x464f4000},{0x464f6000},{0x464f8000},{0x464fa000},{0x464fc000},{0x464fe000}, -{0x46500000},{0x46502000},{0x46504000},{0x46506000},{0x46508000},{0x4650a000},{0x4650c000},{0x4650e000},{0x46510000},{0x46512000},{0x46514000},{0x46516000},{0x46518000},{0x4651a000},{0x4651c000},{0x4651e000},{0x46520000},{0x46522000},{0x46524000},{0x46526000},{0x46528000},{0x4652a000},{0x4652c000},{0x4652e000},{0x46530000},{0x46532000},{0x46534000},{0x46536000},{0x46538000},{0x4653a000},{0x4653c000},{0x4653e000}, -{0x46540000},{0x46542000},{0x46544000},{0x46546000},{0x46548000},{0x4654a000},{0x4654c000},{0x4654e000},{0x46550000},{0x46552000},{0x46554000},{0x46556000},{0x46558000},{0x4655a000},{0x4655c000},{0x4655e000},{0x46560000},{0x46562000},{0x46564000},{0x46566000},{0x46568000},{0x4656a000},{0x4656c000},{0x4656e000},{0x46570000},{0x46572000},{0x46574000},{0x46576000},{0x46578000},{0x4657a000},{0x4657c000},{0x4657e000}, -{0x46580000},{0x46582000},{0x46584000},{0x46586000},{0x46588000},{0x4658a000},{0x4658c000},{0x4658e000},{0x46590000},{0x46592000},{0x46594000},{0x46596000},{0x46598000},{0x4659a000},{0x4659c000},{0x4659e000},{0x465a0000},{0x465a2000},{0x465a4000},{0x465a6000},{0x465a8000},{0x465aa000},{0x465ac000},{0x465ae000},{0x465b0000},{0x465b2000},{0x465b4000},{0x465b6000},{0x465b8000},{0x465ba000},{0x465bc000},{0x465be000}, -{0x465c0000},{0x465c2000},{0x465c4000},{0x465c6000},{0x465c8000},{0x465ca000},{0x465cc000},{0x465ce000},{0x465d0000},{0x465d2000},{0x465d4000},{0x465d6000},{0x465d8000},{0x465da000},{0x465dc000},{0x465de000},{0x465e0000},{0x465e2000},{0x465e4000},{0x465e6000},{0x465e8000},{0x465ea000},{0x465ec000},{0x465ee000},{0x465f0000},{0x465f2000},{0x465f4000},{0x465f6000},{0x465f8000},{0x465fa000},{0x465fc000},{0x465fe000}, -{0x46600000},{0x46602000},{0x46604000},{0x46606000},{0x46608000},{0x4660a000},{0x4660c000},{0x4660e000},{0x46610000},{0x46612000},{0x46614000},{0x46616000},{0x46618000},{0x4661a000},{0x4661c000},{0x4661e000},{0x46620000},{0x46622000},{0x46624000},{0x46626000},{0x46628000},{0x4662a000},{0x4662c000},{0x4662e000},{0x46630000},{0x46632000},{0x46634000},{0x46636000},{0x46638000},{0x4663a000},{0x4663c000},{0x4663e000}, -{0x46640000},{0x46642000},{0x46644000},{0x46646000},{0x46648000},{0x4664a000},{0x4664c000},{0x4664e000},{0x46650000},{0x46652000},{0x46654000},{0x46656000},{0x46658000},{0x4665a000},{0x4665c000},{0x4665e000},{0x46660000},{0x46662000},{0x46664000},{0x46666000},{0x46668000},{0x4666a000},{0x4666c000},{0x4666e000},{0x46670000},{0x46672000},{0x46674000},{0x46676000},{0x46678000},{0x4667a000},{0x4667c000},{0x4667e000}, -{0x46680000},{0x46682000},{0x46684000},{0x46686000},{0x46688000},{0x4668a000},{0x4668c000},{0x4668e000},{0x46690000},{0x46692000},{0x46694000},{0x46696000},{0x46698000},{0x4669a000},{0x4669c000},{0x4669e000},{0x466a0000},{0x466a2000},{0x466a4000},{0x466a6000},{0x466a8000},{0x466aa000},{0x466ac000},{0x466ae000},{0x466b0000},{0x466b2000},{0x466b4000},{0x466b6000},{0x466b8000},{0x466ba000},{0x466bc000},{0x466be000}, -{0x466c0000},{0x466c2000},{0x466c4000},{0x466c6000},{0x466c8000},{0x466ca000},{0x466cc000},{0x466ce000},{0x466d0000},{0x466d2000},{0x466d4000},{0x466d6000},{0x466d8000},{0x466da000},{0x466dc000},{0x466de000},{0x466e0000},{0x466e2000},{0x466e4000},{0x466e6000},{0x466e8000},{0x466ea000},{0x466ec000},{0x466ee000},{0x466f0000},{0x466f2000},{0x466f4000},{0x466f6000},{0x466f8000},{0x466fa000},{0x466fc000},{0x466fe000}, -{0x46700000},{0x46702000},{0x46704000},{0x46706000},{0x46708000},{0x4670a000},{0x4670c000},{0x4670e000},{0x46710000},{0x46712000},{0x46714000},{0x46716000},{0x46718000},{0x4671a000},{0x4671c000},{0x4671e000},{0x46720000},{0x46722000},{0x46724000},{0x46726000},{0x46728000},{0x4672a000},{0x4672c000},{0x4672e000},{0x46730000},{0x46732000},{0x46734000},{0x46736000},{0x46738000},{0x4673a000},{0x4673c000},{0x4673e000}, -{0x46740000},{0x46742000},{0x46744000},{0x46746000},{0x46748000},{0x4674a000},{0x4674c000},{0x4674e000},{0x46750000},{0x46752000},{0x46754000},{0x46756000},{0x46758000},{0x4675a000},{0x4675c000},{0x4675e000},{0x46760000},{0x46762000},{0x46764000},{0x46766000},{0x46768000},{0x4676a000},{0x4676c000},{0x4676e000},{0x46770000},{0x46772000},{0x46774000},{0x46776000},{0x46778000},{0x4677a000},{0x4677c000},{0x4677e000}, -{0x46780000},{0x46782000},{0x46784000},{0x46786000},{0x46788000},{0x4678a000},{0x4678c000},{0x4678e000},{0x46790000},{0x46792000},{0x46794000},{0x46796000},{0x46798000},{0x4679a000},{0x4679c000},{0x4679e000},{0x467a0000},{0x467a2000},{0x467a4000},{0x467a6000},{0x467a8000},{0x467aa000},{0x467ac000},{0x467ae000},{0x467b0000},{0x467b2000},{0x467b4000},{0x467b6000},{0x467b8000},{0x467ba000},{0x467bc000},{0x467be000}, -{0x467c0000},{0x467c2000},{0x467c4000},{0x467c6000},{0x467c8000},{0x467ca000},{0x467cc000},{0x467ce000},{0x467d0000},{0x467d2000},{0x467d4000},{0x467d6000},{0x467d8000},{0x467da000},{0x467dc000},{0x467de000},{0x467e0000},{0x467e2000},{0x467e4000},{0x467e6000},{0x467e8000},{0x467ea000},{0x467ec000},{0x467ee000},{0x467f0000},{0x467f2000},{0x467f4000},{0x467f6000},{0x467f8000},{0x467fa000},{0x467fc000},{0x467fe000}, -{0x46800000},{0x46802000},{0x46804000},{0x46806000},{0x46808000},{0x4680a000},{0x4680c000},{0x4680e000},{0x46810000},{0x46812000},{0x46814000},{0x46816000},{0x46818000},{0x4681a000},{0x4681c000},{0x4681e000},{0x46820000},{0x46822000},{0x46824000},{0x46826000},{0x46828000},{0x4682a000},{0x4682c000},{0x4682e000},{0x46830000},{0x46832000},{0x46834000},{0x46836000},{0x46838000},{0x4683a000},{0x4683c000},{0x4683e000}, -{0x46840000},{0x46842000},{0x46844000},{0x46846000},{0x46848000},{0x4684a000},{0x4684c000},{0x4684e000},{0x46850000},{0x46852000},{0x46854000},{0x46856000},{0x46858000},{0x4685a000},{0x4685c000},{0x4685e000},{0x46860000},{0x46862000},{0x46864000},{0x46866000},{0x46868000},{0x4686a000},{0x4686c000},{0x4686e000},{0x46870000},{0x46872000},{0x46874000},{0x46876000},{0x46878000},{0x4687a000},{0x4687c000},{0x4687e000}, -{0x46880000},{0x46882000},{0x46884000},{0x46886000},{0x46888000},{0x4688a000},{0x4688c000},{0x4688e000},{0x46890000},{0x46892000},{0x46894000},{0x46896000},{0x46898000},{0x4689a000},{0x4689c000},{0x4689e000},{0x468a0000},{0x468a2000},{0x468a4000},{0x468a6000},{0x468a8000},{0x468aa000},{0x468ac000},{0x468ae000},{0x468b0000},{0x468b2000},{0x468b4000},{0x468b6000},{0x468b8000},{0x468ba000},{0x468bc000},{0x468be000}, -{0x468c0000},{0x468c2000},{0x468c4000},{0x468c6000},{0x468c8000},{0x468ca000},{0x468cc000},{0x468ce000},{0x468d0000},{0x468d2000},{0x468d4000},{0x468d6000},{0x468d8000},{0x468da000},{0x468dc000},{0x468de000},{0x468e0000},{0x468e2000},{0x468e4000},{0x468e6000},{0x468e8000},{0x468ea000},{0x468ec000},{0x468ee000},{0x468f0000},{0x468f2000},{0x468f4000},{0x468f6000},{0x468f8000},{0x468fa000},{0x468fc000},{0x468fe000}, -{0x46900000},{0x46902000},{0x46904000},{0x46906000},{0x46908000},{0x4690a000},{0x4690c000},{0x4690e000},{0x46910000},{0x46912000},{0x46914000},{0x46916000},{0x46918000},{0x4691a000},{0x4691c000},{0x4691e000},{0x46920000},{0x46922000},{0x46924000},{0x46926000},{0x46928000},{0x4692a000},{0x4692c000},{0x4692e000},{0x46930000},{0x46932000},{0x46934000},{0x46936000},{0x46938000},{0x4693a000},{0x4693c000},{0x4693e000}, -{0x46940000},{0x46942000},{0x46944000},{0x46946000},{0x46948000},{0x4694a000},{0x4694c000},{0x4694e000},{0x46950000},{0x46952000},{0x46954000},{0x46956000},{0x46958000},{0x4695a000},{0x4695c000},{0x4695e000},{0x46960000},{0x46962000},{0x46964000},{0x46966000},{0x46968000},{0x4696a000},{0x4696c000},{0x4696e000},{0x46970000},{0x46972000},{0x46974000},{0x46976000},{0x46978000},{0x4697a000},{0x4697c000},{0x4697e000}, -{0x46980000},{0x46982000},{0x46984000},{0x46986000},{0x46988000},{0x4698a000},{0x4698c000},{0x4698e000},{0x46990000},{0x46992000},{0x46994000},{0x46996000},{0x46998000},{0x4699a000},{0x4699c000},{0x4699e000},{0x469a0000},{0x469a2000},{0x469a4000},{0x469a6000},{0x469a8000},{0x469aa000},{0x469ac000},{0x469ae000},{0x469b0000},{0x469b2000},{0x469b4000},{0x469b6000},{0x469b8000},{0x469ba000},{0x469bc000},{0x469be000}, -{0x469c0000},{0x469c2000},{0x469c4000},{0x469c6000},{0x469c8000},{0x469ca000},{0x469cc000},{0x469ce000},{0x469d0000},{0x469d2000},{0x469d4000},{0x469d6000},{0x469d8000},{0x469da000},{0x469dc000},{0x469de000},{0x469e0000},{0x469e2000},{0x469e4000},{0x469e6000},{0x469e8000},{0x469ea000},{0x469ec000},{0x469ee000},{0x469f0000},{0x469f2000},{0x469f4000},{0x469f6000},{0x469f8000},{0x469fa000},{0x469fc000},{0x469fe000}, -{0x46a00000},{0x46a02000},{0x46a04000},{0x46a06000},{0x46a08000},{0x46a0a000},{0x46a0c000},{0x46a0e000},{0x46a10000},{0x46a12000},{0x46a14000},{0x46a16000},{0x46a18000},{0x46a1a000},{0x46a1c000},{0x46a1e000},{0x46a20000},{0x46a22000},{0x46a24000},{0x46a26000},{0x46a28000},{0x46a2a000},{0x46a2c000},{0x46a2e000},{0x46a30000},{0x46a32000},{0x46a34000},{0x46a36000},{0x46a38000},{0x46a3a000},{0x46a3c000},{0x46a3e000}, -{0x46a40000},{0x46a42000},{0x46a44000},{0x46a46000},{0x46a48000},{0x46a4a000},{0x46a4c000},{0x46a4e000},{0x46a50000},{0x46a52000},{0x46a54000},{0x46a56000},{0x46a58000},{0x46a5a000},{0x46a5c000},{0x46a5e000},{0x46a60000},{0x46a62000},{0x46a64000},{0x46a66000},{0x46a68000},{0x46a6a000},{0x46a6c000},{0x46a6e000},{0x46a70000},{0x46a72000},{0x46a74000},{0x46a76000},{0x46a78000},{0x46a7a000},{0x46a7c000},{0x46a7e000}, -{0x46a80000},{0x46a82000},{0x46a84000},{0x46a86000},{0x46a88000},{0x46a8a000},{0x46a8c000},{0x46a8e000},{0x46a90000},{0x46a92000},{0x46a94000},{0x46a96000},{0x46a98000},{0x46a9a000},{0x46a9c000},{0x46a9e000},{0x46aa0000},{0x46aa2000},{0x46aa4000},{0x46aa6000},{0x46aa8000},{0x46aaa000},{0x46aac000},{0x46aae000},{0x46ab0000},{0x46ab2000},{0x46ab4000},{0x46ab6000},{0x46ab8000},{0x46aba000},{0x46abc000},{0x46abe000}, -{0x46ac0000},{0x46ac2000},{0x46ac4000},{0x46ac6000},{0x46ac8000},{0x46aca000},{0x46acc000},{0x46ace000},{0x46ad0000},{0x46ad2000},{0x46ad4000},{0x46ad6000},{0x46ad8000},{0x46ada000},{0x46adc000},{0x46ade000},{0x46ae0000},{0x46ae2000},{0x46ae4000},{0x46ae6000},{0x46ae8000},{0x46aea000},{0x46aec000},{0x46aee000},{0x46af0000},{0x46af2000},{0x46af4000},{0x46af6000},{0x46af8000},{0x46afa000},{0x46afc000},{0x46afe000}, -{0x46b00000},{0x46b02000},{0x46b04000},{0x46b06000},{0x46b08000},{0x46b0a000},{0x46b0c000},{0x46b0e000},{0x46b10000},{0x46b12000},{0x46b14000},{0x46b16000},{0x46b18000},{0x46b1a000},{0x46b1c000},{0x46b1e000},{0x46b20000},{0x46b22000},{0x46b24000},{0x46b26000},{0x46b28000},{0x46b2a000},{0x46b2c000},{0x46b2e000},{0x46b30000},{0x46b32000},{0x46b34000},{0x46b36000},{0x46b38000},{0x46b3a000},{0x46b3c000},{0x46b3e000}, -{0x46b40000},{0x46b42000},{0x46b44000},{0x46b46000},{0x46b48000},{0x46b4a000},{0x46b4c000},{0x46b4e000},{0x46b50000},{0x46b52000},{0x46b54000},{0x46b56000},{0x46b58000},{0x46b5a000},{0x46b5c000},{0x46b5e000},{0x46b60000},{0x46b62000},{0x46b64000},{0x46b66000},{0x46b68000},{0x46b6a000},{0x46b6c000},{0x46b6e000},{0x46b70000},{0x46b72000},{0x46b74000},{0x46b76000},{0x46b78000},{0x46b7a000},{0x46b7c000},{0x46b7e000}, -{0x46b80000},{0x46b82000},{0x46b84000},{0x46b86000},{0x46b88000},{0x46b8a000},{0x46b8c000},{0x46b8e000},{0x46b90000},{0x46b92000},{0x46b94000},{0x46b96000},{0x46b98000},{0x46b9a000},{0x46b9c000},{0x46b9e000},{0x46ba0000},{0x46ba2000},{0x46ba4000},{0x46ba6000},{0x46ba8000},{0x46baa000},{0x46bac000},{0x46bae000},{0x46bb0000},{0x46bb2000},{0x46bb4000},{0x46bb6000},{0x46bb8000},{0x46bba000},{0x46bbc000},{0x46bbe000}, -{0x46bc0000},{0x46bc2000},{0x46bc4000},{0x46bc6000},{0x46bc8000},{0x46bca000},{0x46bcc000},{0x46bce000},{0x46bd0000},{0x46bd2000},{0x46bd4000},{0x46bd6000},{0x46bd8000},{0x46bda000},{0x46bdc000},{0x46bde000},{0x46be0000},{0x46be2000},{0x46be4000},{0x46be6000},{0x46be8000},{0x46bea000},{0x46bec000},{0x46bee000},{0x46bf0000},{0x46bf2000},{0x46bf4000},{0x46bf6000},{0x46bf8000},{0x46bfa000},{0x46bfc000},{0x46bfe000}, -{0x46c00000},{0x46c02000},{0x46c04000},{0x46c06000},{0x46c08000},{0x46c0a000},{0x46c0c000},{0x46c0e000},{0x46c10000},{0x46c12000},{0x46c14000},{0x46c16000},{0x46c18000},{0x46c1a000},{0x46c1c000},{0x46c1e000},{0x46c20000},{0x46c22000},{0x46c24000},{0x46c26000},{0x46c28000},{0x46c2a000},{0x46c2c000},{0x46c2e000},{0x46c30000},{0x46c32000},{0x46c34000},{0x46c36000},{0x46c38000},{0x46c3a000},{0x46c3c000},{0x46c3e000}, -{0x46c40000},{0x46c42000},{0x46c44000},{0x46c46000},{0x46c48000},{0x46c4a000},{0x46c4c000},{0x46c4e000},{0x46c50000},{0x46c52000},{0x46c54000},{0x46c56000},{0x46c58000},{0x46c5a000},{0x46c5c000},{0x46c5e000},{0x46c60000},{0x46c62000},{0x46c64000},{0x46c66000},{0x46c68000},{0x46c6a000},{0x46c6c000},{0x46c6e000},{0x46c70000},{0x46c72000},{0x46c74000},{0x46c76000},{0x46c78000},{0x46c7a000},{0x46c7c000},{0x46c7e000}, -{0x46c80000},{0x46c82000},{0x46c84000},{0x46c86000},{0x46c88000},{0x46c8a000},{0x46c8c000},{0x46c8e000},{0x46c90000},{0x46c92000},{0x46c94000},{0x46c96000},{0x46c98000},{0x46c9a000},{0x46c9c000},{0x46c9e000},{0x46ca0000},{0x46ca2000},{0x46ca4000},{0x46ca6000},{0x46ca8000},{0x46caa000},{0x46cac000},{0x46cae000},{0x46cb0000},{0x46cb2000},{0x46cb4000},{0x46cb6000},{0x46cb8000},{0x46cba000},{0x46cbc000},{0x46cbe000}, -{0x46cc0000},{0x46cc2000},{0x46cc4000},{0x46cc6000},{0x46cc8000},{0x46cca000},{0x46ccc000},{0x46cce000},{0x46cd0000},{0x46cd2000},{0x46cd4000},{0x46cd6000},{0x46cd8000},{0x46cda000},{0x46cdc000},{0x46cde000},{0x46ce0000},{0x46ce2000},{0x46ce4000},{0x46ce6000},{0x46ce8000},{0x46cea000},{0x46cec000},{0x46cee000},{0x46cf0000},{0x46cf2000},{0x46cf4000},{0x46cf6000},{0x46cf8000},{0x46cfa000},{0x46cfc000},{0x46cfe000}, -{0x46d00000},{0x46d02000},{0x46d04000},{0x46d06000},{0x46d08000},{0x46d0a000},{0x46d0c000},{0x46d0e000},{0x46d10000},{0x46d12000},{0x46d14000},{0x46d16000},{0x46d18000},{0x46d1a000},{0x46d1c000},{0x46d1e000},{0x46d20000},{0x46d22000},{0x46d24000},{0x46d26000},{0x46d28000},{0x46d2a000},{0x46d2c000},{0x46d2e000},{0x46d30000},{0x46d32000},{0x46d34000},{0x46d36000},{0x46d38000},{0x46d3a000},{0x46d3c000},{0x46d3e000}, -{0x46d40000},{0x46d42000},{0x46d44000},{0x46d46000},{0x46d48000},{0x46d4a000},{0x46d4c000},{0x46d4e000},{0x46d50000},{0x46d52000},{0x46d54000},{0x46d56000},{0x46d58000},{0x46d5a000},{0x46d5c000},{0x46d5e000},{0x46d60000},{0x46d62000},{0x46d64000},{0x46d66000},{0x46d68000},{0x46d6a000},{0x46d6c000},{0x46d6e000},{0x46d70000},{0x46d72000},{0x46d74000},{0x46d76000},{0x46d78000},{0x46d7a000},{0x46d7c000},{0x46d7e000}, -{0x46d80000},{0x46d82000},{0x46d84000},{0x46d86000},{0x46d88000},{0x46d8a000},{0x46d8c000},{0x46d8e000},{0x46d90000},{0x46d92000},{0x46d94000},{0x46d96000},{0x46d98000},{0x46d9a000},{0x46d9c000},{0x46d9e000},{0x46da0000},{0x46da2000},{0x46da4000},{0x46da6000},{0x46da8000},{0x46daa000},{0x46dac000},{0x46dae000},{0x46db0000},{0x46db2000},{0x46db4000},{0x46db6000},{0x46db8000},{0x46dba000},{0x46dbc000},{0x46dbe000}, -{0x46dc0000},{0x46dc2000},{0x46dc4000},{0x46dc6000},{0x46dc8000},{0x46dca000},{0x46dcc000},{0x46dce000},{0x46dd0000},{0x46dd2000},{0x46dd4000},{0x46dd6000},{0x46dd8000},{0x46dda000},{0x46ddc000},{0x46dde000},{0x46de0000},{0x46de2000},{0x46de4000},{0x46de6000},{0x46de8000},{0x46dea000},{0x46dec000},{0x46dee000},{0x46df0000},{0x46df2000},{0x46df4000},{0x46df6000},{0x46df8000},{0x46dfa000},{0x46dfc000},{0x46dfe000}, -{0x46e00000},{0x46e02000},{0x46e04000},{0x46e06000},{0x46e08000},{0x46e0a000},{0x46e0c000},{0x46e0e000},{0x46e10000},{0x46e12000},{0x46e14000},{0x46e16000},{0x46e18000},{0x46e1a000},{0x46e1c000},{0x46e1e000},{0x46e20000},{0x46e22000},{0x46e24000},{0x46e26000},{0x46e28000},{0x46e2a000},{0x46e2c000},{0x46e2e000},{0x46e30000},{0x46e32000},{0x46e34000},{0x46e36000},{0x46e38000},{0x46e3a000},{0x46e3c000},{0x46e3e000}, -{0x46e40000},{0x46e42000},{0x46e44000},{0x46e46000},{0x46e48000},{0x46e4a000},{0x46e4c000},{0x46e4e000},{0x46e50000},{0x46e52000},{0x46e54000},{0x46e56000},{0x46e58000},{0x46e5a000},{0x46e5c000},{0x46e5e000},{0x46e60000},{0x46e62000},{0x46e64000},{0x46e66000},{0x46e68000},{0x46e6a000},{0x46e6c000},{0x46e6e000},{0x46e70000},{0x46e72000},{0x46e74000},{0x46e76000},{0x46e78000},{0x46e7a000},{0x46e7c000},{0x46e7e000}, -{0x46e80000},{0x46e82000},{0x46e84000},{0x46e86000},{0x46e88000},{0x46e8a000},{0x46e8c000},{0x46e8e000},{0x46e90000},{0x46e92000},{0x46e94000},{0x46e96000},{0x46e98000},{0x46e9a000},{0x46e9c000},{0x46e9e000},{0x46ea0000},{0x46ea2000},{0x46ea4000},{0x46ea6000},{0x46ea8000},{0x46eaa000},{0x46eac000},{0x46eae000},{0x46eb0000},{0x46eb2000},{0x46eb4000},{0x46eb6000},{0x46eb8000},{0x46eba000},{0x46ebc000},{0x46ebe000}, -{0x46ec0000},{0x46ec2000},{0x46ec4000},{0x46ec6000},{0x46ec8000},{0x46eca000},{0x46ecc000},{0x46ece000},{0x46ed0000},{0x46ed2000},{0x46ed4000},{0x46ed6000},{0x46ed8000},{0x46eda000},{0x46edc000},{0x46ede000},{0x46ee0000},{0x46ee2000},{0x46ee4000},{0x46ee6000},{0x46ee8000},{0x46eea000},{0x46eec000},{0x46eee000},{0x46ef0000},{0x46ef2000},{0x46ef4000},{0x46ef6000},{0x46ef8000},{0x46efa000},{0x46efc000},{0x46efe000}, -{0x46f00000},{0x46f02000},{0x46f04000},{0x46f06000},{0x46f08000},{0x46f0a000},{0x46f0c000},{0x46f0e000},{0x46f10000},{0x46f12000},{0x46f14000},{0x46f16000},{0x46f18000},{0x46f1a000},{0x46f1c000},{0x46f1e000},{0x46f20000},{0x46f22000},{0x46f24000},{0x46f26000},{0x46f28000},{0x46f2a000},{0x46f2c000},{0x46f2e000},{0x46f30000},{0x46f32000},{0x46f34000},{0x46f36000},{0x46f38000},{0x46f3a000},{0x46f3c000},{0x46f3e000}, -{0x46f40000},{0x46f42000},{0x46f44000},{0x46f46000},{0x46f48000},{0x46f4a000},{0x46f4c000},{0x46f4e000},{0x46f50000},{0x46f52000},{0x46f54000},{0x46f56000},{0x46f58000},{0x46f5a000},{0x46f5c000},{0x46f5e000},{0x46f60000},{0x46f62000},{0x46f64000},{0x46f66000},{0x46f68000},{0x46f6a000},{0x46f6c000},{0x46f6e000},{0x46f70000},{0x46f72000},{0x46f74000},{0x46f76000},{0x46f78000},{0x46f7a000},{0x46f7c000},{0x46f7e000}, -{0x46f80000},{0x46f82000},{0x46f84000},{0x46f86000},{0x46f88000},{0x46f8a000},{0x46f8c000},{0x46f8e000},{0x46f90000},{0x46f92000},{0x46f94000},{0x46f96000},{0x46f98000},{0x46f9a000},{0x46f9c000},{0x46f9e000},{0x46fa0000},{0x46fa2000},{0x46fa4000},{0x46fa6000},{0x46fa8000},{0x46faa000},{0x46fac000},{0x46fae000},{0x46fb0000},{0x46fb2000},{0x46fb4000},{0x46fb6000},{0x46fb8000},{0x46fba000},{0x46fbc000},{0x46fbe000}, -{0x46fc0000},{0x46fc2000},{0x46fc4000},{0x46fc6000},{0x46fc8000},{0x46fca000},{0x46fcc000},{0x46fce000},{0x46fd0000},{0x46fd2000},{0x46fd4000},{0x46fd6000},{0x46fd8000},{0x46fda000},{0x46fdc000},{0x46fde000},{0x46fe0000},{0x46fe2000},{0x46fe4000},{0x46fe6000},{0x46fe8000},{0x46fea000},{0x46fec000},{0x46fee000},{0x46ff0000},{0x46ff2000},{0x46ff4000},{0x46ff6000},{0x46ff8000},{0x46ffa000},{0x46ffc000},{0x46ffe000}, -{0x47000000},{0x47002000},{0x47004000},{0x47006000},{0x47008000},{0x4700a000},{0x4700c000},{0x4700e000},{0x47010000},{0x47012000},{0x47014000},{0x47016000},{0x47018000},{0x4701a000},{0x4701c000},{0x4701e000},{0x47020000},{0x47022000},{0x47024000},{0x47026000},{0x47028000},{0x4702a000},{0x4702c000},{0x4702e000},{0x47030000},{0x47032000},{0x47034000},{0x47036000},{0x47038000},{0x4703a000},{0x4703c000},{0x4703e000}, -{0x47040000},{0x47042000},{0x47044000},{0x47046000},{0x47048000},{0x4704a000},{0x4704c000},{0x4704e000},{0x47050000},{0x47052000},{0x47054000},{0x47056000},{0x47058000},{0x4705a000},{0x4705c000},{0x4705e000},{0x47060000},{0x47062000},{0x47064000},{0x47066000},{0x47068000},{0x4706a000},{0x4706c000},{0x4706e000},{0x47070000},{0x47072000},{0x47074000},{0x47076000},{0x47078000},{0x4707a000},{0x4707c000},{0x4707e000}, -{0x47080000},{0x47082000},{0x47084000},{0x47086000},{0x47088000},{0x4708a000},{0x4708c000},{0x4708e000},{0x47090000},{0x47092000},{0x47094000},{0x47096000},{0x47098000},{0x4709a000},{0x4709c000},{0x4709e000},{0x470a0000},{0x470a2000},{0x470a4000},{0x470a6000},{0x470a8000},{0x470aa000},{0x470ac000},{0x470ae000},{0x470b0000},{0x470b2000},{0x470b4000},{0x470b6000},{0x470b8000},{0x470ba000},{0x470bc000},{0x470be000}, -{0x470c0000},{0x470c2000},{0x470c4000},{0x470c6000},{0x470c8000},{0x470ca000},{0x470cc000},{0x470ce000},{0x470d0000},{0x470d2000},{0x470d4000},{0x470d6000},{0x470d8000},{0x470da000},{0x470dc000},{0x470de000},{0x470e0000},{0x470e2000},{0x470e4000},{0x470e6000},{0x470e8000},{0x470ea000},{0x470ec000},{0x470ee000},{0x470f0000},{0x470f2000},{0x470f4000},{0x470f6000},{0x470f8000},{0x470fa000},{0x470fc000},{0x470fe000}, -{0x47100000},{0x47102000},{0x47104000},{0x47106000},{0x47108000},{0x4710a000},{0x4710c000},{0x4710e000},{0x47110000},{0x47112000},{0x47114000},{0x47116000},{0x47118000},{0x4711a000},{0x4711c000},{0x4711e000},{0x47120000},{0x47122000},{0x47124000},{0x47126000},{0x47128000},{0x4712a000},{0x4712c000},{0x4712e000},{0x47130000},{0x47132000},{0x47134000},{0x47136000},{0x47138000},{0x4713a000},{0x4713c000},{0x4713e000}, -{0x47140000},{0x47142000},{0x47144000},{0x47146000},{0x47148000},{0x4714a000},{0x4714c000},{0x4714e000},{0x47150000},{0x47152000},{0x47154000},{0x47156000},{0x47158000},{0x4715a000},{0x4715c000},{0x4715e000},{0x47160000},{0x47162000},{0x47164000},{0x47166000},{0x47168000},{0x4716a000},{0x4716c000},{0x4716e000},{0x47170000},{0x47172000},{0x47174000},{0x47176000},{0x47178000},{0x4717a000},{0x4717c000},{0x4717e000}, -{0x47180000},{0x47182000},{0x47184000},{0x47186000},{0x47188000},{0x4718a000},{0x4718c000},{0x4718e000},{0x47190000},{0x47192000},{0x47194000},{0x47196000},{0x47198000},{0x4719a000},{0x4719c000},{0x4719e000},{0x471a0000},{0x471a2000},{0x471a4000},{0x471a6000},{0x471a8000},{0x471aa000},{0x471ac000},{0x471ae000},{0x471b0000},{0x471b2000},{0x471b4000},{0x471b6000},{0x471b8000},{0x471ba000},{0x471bc000},{0x471be000}, -{0x471c0000},{0x471c2000},{0x471c4000},{0x471c6000},{0x471c8000},{0x471ca000},{0x471cc000},{0x471ce000},{0x471d0000},{0x471d2000},{0x471d4000},{0x471d6000},{0x471d8000},{0x471da000},{0x471dc000},{0x471de000},{0x471e0000},{0x471e2000},{0x471e4000},{0x471e6000},{0x471e8000},{0x471ea000},{0x471ec000},{0x471ee000},{0x471f0000},{0x471f2000},{0x471f4000},{0x471f6000},{0x471f8000},{0x471fa000},{0x471fc000},{0x471fe000}, -{0x47200000},{0x47202000},{0x47204000},{0x47206000},{0x47208000},{0x4720a000},{0x4720c000},{0x4720e000},{0x47210000},{0x47212000},{0x47214000},{0x47216000},{0x47218000},{0x4721a000},{0x4721c000},{0x4721e000},{0x47220000},{0x47222000},{0x47224000},{0x47226000},{0x47228000},{0x4722a000},{0x4722c000},{0x4722e000},{0x47230000},{0x47232000},{0x47234000},{0x47236000},{0x47238000},{0x4723a000},{0x4723c000},{0x4723e000}, -{0x47240000},{0x47242000},{0x47244000},{0x47246000},{0x47248000},{0x4724a000},{0x4724c000},{0x4724e000},{0x47250000},{0x47252000},{0x47254000},{0x47256000},{0x47258000},{0x4725a000},{0x4725c000},{0x4725e000},{0x47260000},{0x47262000},{0x47264000},{0x47266000},{0x47268000},{0x4726a000},{0x4726c000},{0x4726e000},{0x47270000},{0x47272000},{0x47274000},{0x47276000},{0x47278000},{0x4727a000},{0x4727c000},{0x4727e000}, -{0x47280000},{0x47282000},{0x47284000},{0x47286000},{0x47288000},{0x4728a000},{0x4728c000},{0x4728e000},{0x47290000},{0x47292000},{0x47294000},{0x47296000},{0x47298000},{0x4729a000},{0x4729c000},{0x4729e000},{0x472a0000},{0x472a2000},{0x472a4000},{0x472a6000},{0x472a8000},{0x472aa000},{0x472ac000},{0x472ae000},{0x472b0000},{0x472b2000},{0x472b4000},{0x472b6000},{0x472b8000},{0x472ba000},{0x472bc000},{0x472be000}, -{0x472c0000},{0x472c2000},{0x472c4000},{0x472c6000},{0x472c8000},{0x472ca000},{0x472cc000},{0x472ce000},{0x472d0000},{0x472d2000},{0x472d4000},{0x472d6000},{0x472d8000},{0x472da000},{0x472dc000},{0x472de000},{0x472e0000},{0x472e2000},{0x472e4000},{0x472e6000},{0x472e8000},{0x472ea000},{0x472ec000},{0x472ee000},{0x472f0000},{0x472f2000},{0x472f4000},{0x472f6000},{0x472f8000},{0x472fa000},{0x472fc000},{0x472fe000}, -{0x47300000},{0x47302000},{0x47304000},{0x47306000},{0x47308000},{0x4730a000},{0x4730c000},{0x4730e000},{0x47310000},{0x47312000},{0x47314000},{0x47316000},{0x47318000},{0x4731a000},{0x4731c000},{0x4731e000},{0x47320000},{0x47322000},{0x47324000},{0x47326000},{0x47328000},{0x4732a000},{0x4732c000},{0x4732e000},{0x47330000},{0x47332000},{0x47334000},{0x47336000},{0x47338000},{0x4733a000},{0x4733c000},{0x4733e000}, -{0x47340000},{0x47342000},{0x47344000},{0x47346000},{0x47348000},{0x4734a000},{0x4734c000},{0x4734e000},{0x47350000},{0x47352000},{0x47354000},{0x47356000},{0x47358000},{0x4735a000},{0x4735c000},{0x4735e000},{0x47360000},{0x47362000},{0x47364000},{0x47366000},{0x47368000},{0x4736a000},{0x4736c000},{0x4736e000},{0x47370000},{0x47372000},{0x47374000},{0x47376000},{0x47378000},{0x4737a000},{0x4737c000},{0x4737e000}, -{0x47380000},{0x47382000},{0x47384000},{0x47386000},{0x47388000},{0x4738a000},{0x4738c000},{0x4738e000},{0x47390000},{0x47392000},{0x47394000},{0x47396000},{0x47398000},{0x4739a000},{0x4739c000},{0x4739e000},{0x473a0000},{0x473a2000},{0x473a4000},{0x473a6000},{0x473a8000},{0x473aa000},{0x473ac000},{0x473ae000},{0x473b0000},{0x473b2000},{0x473b4000},{0x473b6000},{0x473b8000},{0x473ba000},{0x473bc000},{0x473be000}, -{0x473c0000},{0x473c2000},{0x473c4000},{0x473c6000},{0x473c8000},{0x473ca000},{0x473cc000},{0x473ce000},{0x473d0000},{0x473d2000},{0x473d4000},{0x473d6000},{0x473d8000},{0x473da000},{0x473dc000},{0x473de000},{0x473e0000},{0x473e2000},{0x473e4000},{0x473e6000},{0x473e8000},{0x473ea000},{0x473ec000},{0x473ee000},{0x473f0000},{0x473f2000},{0x473f4000},{0x473f6000},{0x473f8000},{0x473fa000},{0x473fc000},{0x473fe000}, -{0x47400000},{0x47402000},{0x47404000},{0x47406000},{0x47408000},{0x4740a000},{0x4740c000},{0x4740e000},{0x47410000},{0x47412000},{0x47414000},{0x47416000},{0x47418000},{0x4741a000},{0x4741c000},{0x4741e000},{0x47420000},{0x47422000},{0x47424000},{0x47426000},{0x47428000},{0x4742a000},{0x4742c000},{0x4742e000},{0x47430000},{0x47432000},{0x47434000},{0x47436000},{0x47438000},{0x4743a000},{0x4743c000},{0x4743e000}, -{0x47440000},{0x47442000},{0x47444000},{0x47446000},{0x47448000},{0x4744a000},{0x4744c000},{0x4744e000},{0x47450000},{0x47452000},{0x47454000},{0x47456000},{0x47458000},{0x4745a000},{0x4745c000},{0x4745e000},{0x47460000},{0x47462000},{0x47464000},{0x47466000},{0x47468000},{0x4746a000},{0x4746c000},{0x4746e000},{0x47470000},{0x47472000},{0x47474000},{0x47476000},{0x47478000},{0x4747a000},{0x4747c000},{0x4747e000}, -{0x47480000},{0x47482000},{0x47484000},{0x47486000},{0x47488000},{0x4748a000},{0x4748c000},{0x4748e000},{0x47490000},{0x47492000},{0x47494000},{0x47496000},{0x47498000},{0x4749a000},{0x4749c000},{0x4749e000},{0x474a0000},{0x474a2000},{0x474a4000},{0x474a6000},{0x474a8000},{0x474aa000},{0x474ac000},{0x474ae000},{0x474b0000},{0x474b2000},{0x474b4000},{0x474b6000},{0x474b8000},{0x474ba000},{0x474bc000},{0x474be000}, -{0x474c0000},{0x474c2000},{0x474c4000},{0x474c6000},{0x474c8000},{0x474ca000},{0x474cc000},{0x474ce000},{0x474d0000},{0x474d2000},{0x474d4000},{0x474d6000},{0x474d8000},{0x474da000},{0x474dc000},{0x474de000},{0x474e0000},{0x474e2000},{0x474e4000},{0x474e6000},{0x474e8000},{0x474ea000},{0x474ec000},{0x474ee000},{0x474f0000},{0x474f2000},{0x474f4000},{0x474f6000},{0x474f8000},{0x474fa000},{0x474fc000},{0x474fe000}, -{0x47500000},{0x47502000},{0x47504000},{0x47506000},{0x47508000},{0x4750a000},{0x4750c000},{0x4750e000},{0x47510000},{0x47512000},{0x47514000},{0x47516000},{0x47518000},{0x4751a000},{0x4751c000},{0x4751e000},{0x47520000},{0x47522000},{0x47524000},{0x47526000},{0x47528000},{0x4752a000},{0x4752c000},{0x4752e000},{0x47530000},{0x47532000},{0x47534000},{0x47536000},{0x47538000},{0x4753a000},{0x4753c000},{0x4753e000}, -{0x47540000},{0x47542000},{0x47544000},{0x47546000},{0x47548000},{0x4754a000},{0x4754c000},{0x4754e000},{0x47550000},{0x47552000},{0x47554000},{0x47556000},{0x47558000},{0x4755a000},{0x4755c000},{0x4755e000},{0x47560000},{0x47562000},{0x47564000},{0x47566000},{0x47568000},{0x4756a000},{0x4756c000},{0x4756e000},{0x47570000},{0x47572000},{0x47574000},{0x47576000},{0x47578000},{0x4757a000},{0x4757c000},{0x4757e000}, -{0x47580000},{0x47582000},{0x47584000},{0x47586000},{0x47588000},{0x4758a000},{0x4758c000},{0x4758e000},{0x47590000},{0x47592000},{0x47594000},{0x47596000},{0x47598000},{0x4759a000},{0x4759c000},{0x4759e000},{0x475a0000},{0x475a2000},{0x475a4000},{0x475a6000},{0x475a8000},{0x475aa000},{0x475ac000},{0x475ae000},{0x475b0000},{0x475b2000},{0x475b4000},{0x475b6000},{0x475b8000},{0x475ba000},{0x475bc000},{0x475be000}, -{0x475c0000},{0x475c2000},{0x475c4000},{0x475c6000},{0x475c8000},{0x475ca000},{0x475cc000},{0x475ce000},{0x475d0000},{0x475d2000},{0x475d4000},{0x475d6000},{0x475d8000},{0x475da000},{0x475dc000},{0x475de000},{0x475e0000},{0x475e2000},{0x475e4000},{0x475e6000},{0x475e8000},{0x475ea000},{0x475ec000},{0x475ee000},{0x475f0000},{0x475f2000},{0x475f4000},{0x475f6000},{0x475f8000},{0x475fa000},{0x475fc000},{0x475fe000}, -{0x47600000},{0x47602000},{0x47604000},{0x47606000},{0x47608000},{0x4760a000},{0x4760c000},{0x4760e000},{0x47610000},{0x47612000},{0x47614000},{0x47616000},{0x47618000},{0x4761a000},{0x4761c000},{0x4761e000},{0x47620000},{0x47622000},{0x47624000},{0x47626000},{0x47628000},{0x4762a000},{0x4762c000},{0x4762e000},{0x47630000},{0x47632000},{0x47634000},{0x47636000},{0x47638000},{0x4763a000},{0x4763c000},{0x4763e000}, -{0x47640000},{0x47642000},{0x47644000},{0x47646000},{0x47648000},{0x4764a000},{0x4764c000},{0x4764e000},{0x47650000},{0x47652000},{0x47654000},{0x47656000},{0x47658000},{0x4765a000},{0x4765c000},{0x4765e000},{0x47660000},{0x47662000},{0x47664000},{0x47666000},{0x47668000},{0x4766a000},{0x4766c000},{0x4766e000},{0x47670000},{0x47672000},{0x47674000},{0x47676000},{0x47678000},{0x4767a000},{0x4767c000},{0x4767e000}, -{0x47680000},{0x47682000},{0x47684000},{0x47686000},{0x47688000},{0x4768a000},{0x4768c000},{0x4768e000},{0x47690000},{0x47692000},{0x47694000},{0x47696000},{0x47698000},{0x4769a000},{0x4769c000},{0x4769e000},{0x476a0000},{0x476a2000},{0x476a4000},{0x476a6000},{0x476a8000},{0x476aa000},{0x476ac000},{0x476ae000},{0x476b0000},{0x476b2000},{0x476b4000},{0x476b6000},{0x476b8000},{0x476ba000},{0x476bc000},{0x476be000}, -{0x476c0000},{0x476c2000},{0x476c4000},{0x476c6000},{0x476c8000},{0x476ca000},{0x476cc000},{0x476ce000},{0x476d0000},{0x476d2000},{0x476d4000},{0x476d6000},{0x476d8000},{0x476da000},{0x476dc000},{0x476de000},{0x476e0000},{0x476e2000},{0x476e4000},{0x476e6000},{0x476e8000},{0x476ea000},{0x476ec000},{0x476ee000},{0x476f0000},{0x476f2000},{0x476f4000},{0x476f6000},{0x476f8000},{0x476fa000},{0x476fc000},{0x476fe000}, -{0x47700000},{0x47702000},{0x47704000},{0x47706000},{0x47708000},{0x4770a000},{0x4770c000},{0x4770e000},{0x47710000},{0x47712000},{0x47714000},{0x47716000},{0x47718000},{0x4771a000},{0x4771c000},{0x4771e000},{0x47720000},{0x47722000},{0x47724000},{0x47726000},{0x47728000},{0x4772a000},{0x4772c000},{0x4772e000},{0x47730000},{0x47732000},{0x47734000},{0x47736000},{0x47738000},{0x4773a000},{0x4773c000},{0x4773e000}, -{0x47740000},{0x47742000},{0x47744000},{0x47746000},{0x47748000},{0x4774a000},{0x4774c000},{0x4774e000},{0x47750000},{0x47752000},{0x47754000},{0x47756000},{0x47758000},{0x4775a000},{0x4775c000},{0x4775e000},{0x47760000},{0x47762000},{0x47764000},{0x47766000},{0x47768000},{0x4776a000},{0x4776c000},{0x4776e000},{0x47770000},{0x47772000},{0x47774000},{0x47776000},{0x47778000},{0x4777a000},{0x4777c000},{0x4777e000}, -{0x47780000},{0x47782000},{0x47784000},{0x47786000},{0x47788000},{0x4778a000},{0x4778c000},{0x4778e000},{0x47790000},{0x47792000},{0x47794000},{0x47796000},{0x47798000},{0x4779a000},{0x4779c000},{0x4779e000},{0x477a0000},{0x477a2000},{0x477a4000},{0x477a6000},{0x477a8000},{0x477aa000},{0x477ac000},{0x477ae000},{0x477b0000},{0x477b2000},{0x477b4000},{0x477b6000},{0x477b8000},{0x477ba000},{0x477bc000},{0x477be000}, -{0x477c0000},{0x477c2000},{0x477c4000},{0x477c6000},{0x477c8000},{0x477ca000},{0x477cc000},{0x477ce000},{0x477d0000},{0x477d2000},{0x477d4000},{0x477d6000},{0x477d8000},{0x477da000},{0x477dc000},{0x477de000},{0x477e0000},{0x477e2000},{0x477e4000},{0x477e6000},{0x477e8000},{0x477ea000},{0x477ec000},{0x477ee000},{0x477f0000},{0x477f2000},{0x477f4000},{0x477f6000},{0x477f8000},{0x477fa000},{0x477fc000},{0x477fe000}, -{0x7f800000},{0x7fc02000},{0x7fc04000},{0x7fc06000},{0x7fc08000},{0x7fc0a000},{0x7fc0c000},{0x7fc0e000},{0x7fc10000},{0x7fc12000},{0x7fc14000},{0x7fc16000},{0x7fc18000},{0x7fc1a000},{0x7fc1c000},{0x7fc1e000},{0x7fc20000},{0x7fc22000},{0x7fc24000},{0x7fc26000},{0x7fc28000},{0x7fc2a000},{0x7fc2c000},{0x7fc2e000},{0x7fc30000},{0x7fc32000},{0x7fc34000},{0x7fc36000},{0x7fc38000},{0x7fc3a000},{0x7fc3c000},{0x7fc3e000}, -{0x7fc40000},{0x7fc42000},{0x7fc44000},{0x7fc46000},{0x7fc48000},{0x7fc4a000},{0x7fc4c000},{0x7fc4e000},{0x7fc50000},{0x7fc52000},{0x7fc54000},{0x7fc56000},{0x7fc58000},{0x7fc5a000},{0x7fc5c000},{0x7fc5e000},{0x7fc60000},{0x7fc62000},{0x7fc64000},{0x7fc66000},{0x7fc68000},{0x7fc6a000},{0x7fc6c000},{0x7fc6e000},{0x7fc70000},{0x7fc72000},{0x7fc74000},{0x7fc76000},{0x7fc78000},{0x7fc7a000},{0x7fc7c000},{0x7fc7e000}, -{0x7fc80000},{0x7fc82000},{0x7fc84000},{0x7fc86000},{0x7fc88000},{0x7fc8a000},{0x7fc8c000},{0x7fc8e000},{0x7fc90000},{0x7fc92000},{0x7fc94000},{0x7fc96000},{0x7fc98000},{0x7fc9a000},{0x7fc9c000},{0x7fc9e000},{0x7fca0000},{0x7fca2000},{0x7fca4000},{0x7fca6000},{0x7fca8000},{0x7fcaa000},{0x7fcac000},{0x7fcae000},{0x7fcb0000},{0x7fcb2000},{0x7fcb4000},{0x7fcb6000},{0x7fcb8000},{0x7fcba000},{0x7fcbc000},{0x7fcbe000}, -{0x7fcc0000},{0x7fcc2000},{0x7fcc4000},{0x7fcc6000},{0x7fcc8000},{0x7fcca000},{0x7fccc000},{0x7fcce000},{0x7fcd0000},{0x7fcd2000},{0x7fcd4000},{0x7fcd6000},{0x7fcd8000},{0x7fcda000},{0x7fcdc000},{0x7fcde000},{0x7fce0000},{0x7fce2000},{0x7fce4000},{0x7fce6000},{0x7fce8000},{0x7fcea000},{0x7fcec000},{0x7fcee000},{0x7fcf0000},{0x7fcf2000},{0x7fcf4000},{0x7fcf6000},{0x7fcf8000},{0x7fcfa000},{0x7fcfc000},{0x7fcfe000}, -{0x7fd00000},{0x7fd02000},{0x7fd04000},{0x7fd06000},{0x7fd08000},{0x7fd0a000},{0x7fd0c000},{0x7fd0e000},{0x7fd10000},{0x7fd12000},{0x7fd14000},{0x7fd16000},{0x7fd18000},{0x7fd1a000},{0x7fd1c000},{0x7fd1e000},{0x7fd20000},{0x7fd22000},{0x7fd24000},{0x7fd26000},{0x7fd28000},{0x7fd2a000},{0x7fd2c000},{0x7fd2e000},{0x7fd30000},{0x7fd32000},{0x7fd34000},{0x7fd36000},{0x7fd38000},{0x7fd3a000},{0x7fd3c000},{0x7fd3e000}, -{0x7fd40000},{0x7fd42000},{0x7fd44000},{0x7fd46000},{0x7fd48000},{0x7fd4a000},{0x7fd4c000},{0x7fd4e000},{0x7fd50000},{0x7fd52000},{0x7fd54000},{0x7fd56000},{0x7fd58000},{0x7fd5a000},{0x7fd5c000},{0x7fd5e000},{0x7fd60000},{0x7fd62000},{0x7fd64000},{0x7fd66000},{0x7fd68000},{0x7fd6a000},{0x7fd6c000},{0x7fd6e000},{0x7fd70000},{0x7fd72000},{0x7fd74000},{0x7fd76000},{0x7fd78000},{0x7fd7a000},{0x7fd7c000},{0x7fd7e000}, -{0x7fd80000},{0x7fd82000},{0x7fd84000},{0x7fd86000},{0x7fd88000},{0x7fd8a000},{0x7fd8c000},{0x7fd8e000},{0x7fd90000},{0x7fd92000},{0x7fd94000},{0x7fd96000},{0x7fd98000},{0x7fd9a000},{0x7fd9c000},{0x7fd9e000},{0x7fda0000},{0x7fda2000},{0x7fda4000},{0x7fda6000},{0x7fda8000},{0x7fdaa000},{0x7fdac000},{0x7fdae000},{0x7fdb0000},{0x7fdb2000},{0x7fdb4000},{0x7fdb6000},{0x7fdb8000},{0x7fdba000},{0x7fdbc000},{0x7fdbe000}, -{0x7fdc0000},{0x7fdc2000},{0x7fdc4000},{0x7fdc6000},{0x7fdc8000},{0x7fdca000},{0x7fdcc000},{0x7fdce000},{0x7fdd0000},{0x7fdd2000},{0x7fdd4000},{0x7fdd6000},{0x7fdd8000},{0x7fdda000},{0x7fddc000},{0x7fdde000},{0x7fde0000},{0x7fde2000},{0x7fde4000},{0x7fde6000},{0x7fde8000},{0x7fdea000},{0x7fdec000},{0x7fdee000},{0x7fdf0000},{0x7fdf2000},{0x7fdf4000},{0x7fdf6000},{0x7fdf8000},{0x7fdfa000},{0x7fdfc000},{0x7fdfe000}, -{0x7fe00000},{0x7fe02000},{0x7fe04000},{0x7fe06000},{0x7fe08000},{0x7fe0a000},{0x7fe0c000},{0x7fe0e000},{0x7fe10000},{0x7fe12000},{0x7fe14000},{0x7fe16000},{0x7fe18000},{0x7fe1a000},{0x7fe1c000},{0x7fe1e000},{0x7fe20000},{0x7fe22000},{0x7fe24000},{0x7fe26000},{0x7fe28000},{0x7fe2a000},{0x7fe2c000},{0x7fe2e000},{0x7fe30000},{0x7fe32000},{0x7fe34000},{0x7fe36000},{0x7fe38000},{0x7fe3a000},{0x7fe3c000},{0x7fe3e000}, -{0x7fe40000},{0x7fe42000},{0x7fe44000},{0x7fe46000},{0x7fe48000},{0x7fe4a000},{0x7fe4c000},{0x7fe4e000},{0x7fe50000},{0x7fe52000},{0x7fe54000},{0x7fe56000},{0x7fe58000},{0x7fe5a000},{0x7fe5c000},{0x7fe5e000},{0x7fe60000},{0x7fe62000},{0x7fe64000},{0x7fe66000},{0x7fe68000},{0x7fe6a000},{0x7fe6c000},{0x7fe6e000},{0x7fe70000},{0x7fe72000},{0x7fe74000},{0x7fe76000},{0x7fe78000},{0x7fe7a000},{0x7fe7c000},{0x7fe7e000}, -{0x7fe80000},{0x7fe82000},{0x7fe84000},{0x7fe86000},{0x7fe88000},{0x7fe8a000},{0x7fe8c000},{0x7fe8e000},{0x7fe90000},{0x7fe92000},{0x7fe94000},{0x7fe96000},{0x7fe98000},{0x7fe9a000},{0x7fe9c000},{0x7fe9e000},{0x7fea0000},{0x7fea2000},{0x7fea4000},{0x7fea6000},{0x7fea8000},{0x7feaa000},{0x7feac000},{0x7feae000},{0x7feb0000},{0x7feb2000},{0x7feb4000},{0x7feb6000},{0x7feb8000},{0x7feba000},{0x7febc000},{0x7febe000}, -{0x7fec0000},{0x7fec2000},{0x7fec4000},{0x7fec6000},{0x7fec8000},{0x7feca000},{0x7fecc000},{0x7fece000},{0x7fed0000},{0x7fed2000},{0x7fed4000},{0x7fed6000},{0x7fed8000},{0x7feda000},{0x7fedc000},{0x7fede000},{0x7fee0000},{0x7fee2000},{0x7fee4000},{0x7fee6000},{0x7fee8000},{0x7feea000},{0x7feec000},{0x7feee000},{0x7fef0000},{0x7fef2000},{0x7fef4000},{0x7fef6000},{0x7fef8000},{0x7fefa000},{0x7fefc000},{0x7fefe000}, -{0x7ff00000},{0x7ff02000},{0x7ff04000},{0x7ff06000},{0x7ff08000},{0x7ff0a000},{0x7ff0c000},{0x7ff0e000},{0x7ff10000},{0x7ff12000},{0x7ff14000},{0x7ff16000},{0x7ff18000},{0x7ff1a000},{0x7ff1c000},{0x7ff1e000},{0x7ff20000},{0x7ff22000},{0x7ff24000},{0x7ff26000},{0x7ff28000},{0x7ff2a000},{0x7ff2c000},{0x7ff2e000},{0x7ff30000},{0x7ff32000},{0x7ff34000},{0x7ff36000},{0x7ff38000},{0x7ff3a000},{0x7ff3c000},{0x7ff3e000}, -{0x7ff40000},{0x7ff42000},{0x7ff44000},{0x7ff46000},{0x7ff48000},{0x7ff4a000},{0x7ff4c000},{0x7ff4e000},{0x7ff50000},{0x7ff52000},{0x7ff54000},{0x7ff56000},{0x7ff58000},{0x7ff5a000},{0x7ff5c000},{0x7ff5e000},{0x7ff60000},{0x7ff62000},{0x7ff64000},{0x7ff66000},{0x7ff68000},{0x7ff6a000},{0x7ff6c000},{0x7ff6e000},{0x7ff70000},{0x7ff72000},{0x7ff74000},{0x7ff76000},{0x7ff78000},{0x7ff7a000},{0x7ff7c000},{0x7ff7e000}, -{0x7ff80000},{0x7ff82000},{0x7ff84000},{0x7ff86000},{0x7ff88000},{0x7ff8a000},{0x7ff8c000},{0x7ff8e000},{0x7ff90000},{0x7ff92000},{0x7ff94000},{0x7ff96000},{0x7ff98000},{0x7ff9a000},{0x7ff9c000},{0x7ff9e000},{0x7ffa0000},{0x7ffa2000},{0x7ffa4000},{0x7ffa6000},{0x7ffa8000},{0x7ffaa000},{0x7ffac000},{0x7ffae000},{0x7ffb0000},{0x7ffb2000},{0x7ffb4000},{0x7ffb6000},{0x7ffb8000},{0x7ffba000},{0x7ffbc000},{0x7ffbe000}, -{0x7ffc0000},{0x7ffc2000},{0x7ffc4000},{0x7ffc6000},{0x7ffc8000},{0x7ffca000},{0x7ffcc000},{0x7ffce000},{0x7ffd0000},{0x7ffd2000},{0x7ffd4000},{0x7ffd6000},{0x7ffd8000},{0x7ffda000},{0x7ffdc000},{0x7ffde000},{0x7ffe0000},{0x7ffe2000},{0x7ffe4000},{0x7ffe6000},{0x7ffe8000},{0x7ffea000},{0x7ffec000},{0x7ffee000},{0x7fff0000},{0x7fff2000},{0x7fff4000},{0x7fff6000},{0x7fff8000},{0x7fffa000},{0x7fffc000},{0x7fffe000}, -{0x7fc00000},{0x7fc02000},{0x7fc04000},{0x7fc06000},{0x7fc08000},{0x7fc0a000},{0x7fc0c000},{0x7fc0e000},{0x7fc10000},{0x7fc12000},{0x7fc14000},{0x7fc16000},{0x7fc18000},{0x7fc1a000},{0x7fc1c000},{0x7fc1e000},{0x7fc20000},{0x7fc22000},{0x7fc24000},{0x7fc26000},{0x7fc28000},{0x7fc2a000},{0x7fc2c000},{0x7fc2e000},{0x7fc30000},{0x7fc32000},{0x7fc34000},{0x7fc36000},{0x7fc38000},{0x7fc3a000},{0x7fc3c000},{0x7fc3e000}, -{0x7fc40000},{0x7fc42000},{0x7fc44000},{0x7fc46000},{0x7fc48000},{0x7fc4a000},{0x7fc4c000},{0x7fc4e000},{0x7fc50000},{0x7fc52000},{0x7fc54000},{0x7fc56000},{0x7fc58000},{0x7fc5a000},{0x7fc5c000},{0x7fc5e000},{0x7fc60000},{0x7fc62000},{0x7fc64000},{0x7fc66000},{0x7fc68000},{0x7fc6a000},{0x7fc6c000},{0x7fc6e000},{0x7fc70000},{0x7fc72000},{0x7fc74000},{0x7fc76000},{0x7fc78000},{0x7fc7a000},{0x7fc7c000},{0x7fc7e000}, -{0x7fc80000},{0x7fc82000},{0x7fc84000},{0x7fc86000},{0x7fc88000},{0x7fc8a000},{0x7fc8c000},{0x7fc8e000},{0x7fc90000},{0x7fc92000},{0x7fc94000},{0x7fc96000},{0x7fc98000},{0x7fc9a000},{0x7fc9c000},{0x7fc9e000},{0x7fca0000},{0x7fca2000},{0x7fca4000},{0x7fca6000},{0x7fca8000},{0x7fcaa000},{0x7fcac000},{0x7fcae000},{0x7fcb0000},{0x7fcb2000},{0x7fcb4000},{0x7fcb6000},{0x7fcb8000},{0x7fcba000},{0x7fcbc000},{0x7fcbe000}, -{0x7fcc0000},{0x7fcc2000},{0x7fcc4000},{0x7fcc6000},{0x7fcc8000},{0x7fcca000},{0x7fccc000},{0x7fcce000},{0x7fcd0000},{0x7fcd2000},{0x7fcd4000},{0x7fcd6000},{0x7fcd8000},{0x7fcda000},{0x7fcdc000},{0x7fcde000},{0x7fce0000},{0x7fce2000},{0x7fce4000},{0x7fce6000},{0x7fce8000},{0x7fcea000},{0x7fcec000},{0x7fcee000},{0x7fcf0000},{0x7fcf2000},{0x7fcf4000},{0x7fcf6000},{0x7fcf8000},{0x7fcfa000},{0x7fcfc000},{0x7fcfe000}, -{0x7fd00000},{0x7fd02000},{0x7fd04000},{0x7fd06000},{0x7fd08000},{0x7fd0a000},{0x7fd0c000},{0x7fd0e000},{0x7fd10000},{0x7fd12000},{0x7fd14000},{0x7fd16000},{0x7fd18000},{0x7fd1a000},{0x7fd1c000},{0x7fd1e000},{0x7fd20000},{0x7fd22000},{0x7fd24000},{0x7fd26000},{0x7fd28000},{0x7fd2a000},{0x7fd2c000},{0x7fd2e000},{0x7fd30000},{0x7fd32000},{0x7fd34000},{0x7fd36000},{0x7fd38000},{0x7fd3a000},{0x7fd3c000},{0x7fd3e000}, -{0x7fd40000},{0x7fd42000},{0x7fd44000},{0x7fd46000},{0x7fd48000},{0x7fd4a000},{0x7fd4c000},{0x7fd4e000},{0x7fd50000},{0x7fd52000},{0x7fd54000},{0x7fd56000},{0x7fd58000},{0x7fd5a000},{0x7fd5c000},{0x7fd5e000},{0x7fd60000},{0x7fd62000},{0x7fd64000},{0x7fd66000},{0x7fd68000},{0x7fd6a000},{0x7fd6c000},{0x7fd6e000},{0x7fd70000},{0x7fd72000},{0x7fd74000},{0x7fd76000},{0x7fd78000},{0x7fd7a000},{0x7fd7c000},{0x7fd7e000}, -{0x7fd80000},{0x7fd82000},{0x7fd84000},{0x7fd86000},{0x7fd88000},{0x7fd8a000},{0x7fd8c000},{0x7fd8e000},{0x7fd90000},{0x7fd92000},{0x7fd94000},{0x7fd96000},{0x7fd98000},{0x7fd9a000},{0x7fd9c000},{0x7fd9e000},{0x7fda0000},{0x7fda2000},{0x7fda4000},{0x7fda6000},{0x7fda8000},{0x7fdaa000},{0x7fdac000},{0x7fdae000},{0x7fdb0000},{0x7fdb2000},{0x7fdb4000},{0x7fdb6000},{0x7fdb8000},{0x7fdba000},{0x7fdbc000},{0x7fdbe000}, -{0x7fdc0000},{0x7fdc2000},{0x7fdc4000},{0x7fdc6000},{0x7fdc8000},{0x7fdca000},{0x7fdcc000},{0x7fdce000},{0x7fdd0000},{0x7fdd2000},{0x7fdd4000},{0x7fdd6000},{0x7fdd8000},{0x7fdda000},{0x7fddc000},{0x7fdde000},{0x7fde0000},{0x7fde2000},{0x7fde4000},{0x7fde6000},{0x7fde8000},{0x7fdea000},{0x7fdec000},{0x7fdee000},{0x7fdf0000},{0x7fdf2000},{0x7fdf4000},{0x7fdf6000},{0x7fdf8000},{0x7fdfa000},{0x7fdfc000},{0x7fdfe000}, -{0x7fe00000},{0x7fe02000},{0x7fe04000},{0x7fe06000},{0x7fe08000},{0x7fe0a000},{0x7fe0c000},{0x7fe0e000},{0x7fe10000},{0x7fe12000},{0x7fe14000},{0x7fe16000},{0x7fe18000},{0x7fe1a000},{0x7fe1c000},{0x7fe1e000},{0x7fe20000},{0x7fe22000},{0x7fe24000},{0x7fe26000},{0x7fe28000},{0x7fe2a000},{0x7fe2c000},{0x7fe2e000},{0x7fe30000},{0x7fe32000},{0x7fe34000},{0x7fe36000},{0x7fe38000},{0x7fe3a000},{0x7fe3c000},{0x7fe3e000}, -{0x7fe40000},{0x7fe42000},{0x7fe44000},{0x7fe46000},{0x7fe48000},{0x7fe4a000},{0x7fe4c000},{0x7fe4e000},{0x7fe50000},{0x7fe52000},{0x7fe54000},{0x7fe56000},{0x7fe58000},{0x7fe5a000},{0x7fe5c000},{0x7fe5e000},{0x7fe60000},{0x7fe62000},{0x7fe64000},{0x7fe66000},{0x7fe68000},{0x7fe6a000},{0x7fe6c000},{0x7fe6e000},{0x7fe70000},{0x7fe72000},{0x7fe74000},{0x7fe76000},{0x7fe78000},{0x7fe7a000},{0x7fe7c000},{0x7fe7e000}, -{0x7fe80000},{0x7fe82000},{0x7fe84000},{0x7fe86000},{0x7fe88000},{0x7fe8a000},{0x7fe8c000},{0x7fe8e000},{0x7fe90000},{0x7fe92000},{0x7fe94000},{0x7fe96000},{0x7fe98000},{0x7fe9a000},{0x7fe9c000},{0x7fe9e000},{0x7fea0000},{0x7fea2000},{0x7fea4000},{0x7fea6000},{0x7fea8000},{0x7feaa000},{0x7feac000},{0x7feae000},{0x7feb0000},{0x7feb2000},{0x7feb4000},{0x7feb6000},{0x7feb8000},{0x7feba000},{0x7febc000},{0x7febe000}, -{0x7fec0000},{0x7fec2000},{0x7fec4000},{0x7fec6000},{0x7fec8000},{0x7feca000},{0x7fecc000},{0x7fece000},{0x7fed0000},{0x7fed2000},{0x7fed4000},{0x7fed6000},{0x7fed8000},{0x7feda000},{0x7fedc000},{0x7fede000},{0x7fee0000},{0x7fee2000},{0x7fee4000},{0x7fee6000},{0x7fee8000},{0x7feea000},{0x7feec000},{0x7feee000},{0x7fef0000},{0x7fef2000},{0x7fef4000},{0x7fef6000},{0x7fef8000},{0x7fefa000},{0x7fefc000},{0x7fefe000}, -{0x7ff00000},{0x7ff02000},{0x7ff04000},{0x7ff06000},{0x7ff08000},{0x7ff0a000},{0x7ff0c000},{0x7ff0e000},{0x7ff10000},{0x7ff12000},{0x7ff14000},{0x7ff16000},{0x7ff18000},{0x7ff1a000},{0x7ff1c000},{0x7ff1e000},{0x7ff20000},{0x7ff22000},{0x7ff24000},{0x7ff26000},{0x7ff28000},{0x7ff2a000},{0x7ff2c000},{0x7ff2e000},{0x7ff30000},{0x7ff32000},{0x7ff34000},{0x7ff36000},{0x7ff38000},{0x7ff3a000},{0x7ff3c000},{0x7ff3e000}, -{0x7ff40000},{0x7ff42000},{0x7ff44000},{0x7ff46000},{0x7ff48000},{0x7ff4a000},{0x7ff4c000},{0x7ff4e000},{0x7ff50000},{0x7ff52000},{0x7ff54000},{0x7ff56000},{0x7ff58000},{0x7ff5a000},{0x7ff5c000},{0x7ff5e000},{0x7ff60000},{0x7ff62000},{0x7ff64000},{0x7ff66000},{0x7ff68000},{0x7ff6a000},{0x7ff6c000},{0x7ff6e000},{0x7ff70000},{0x7ff72000},{0x7ff74000},{0x7ff76000},{0x7ff78000},{0x7ff7a000},{0x7ff7c000},{0x7ff7e000}, -{0x7ff80000},{0x7ff82000},{0x7ff84000},{0x7ff86000},{0x7ff88000},{0x7ff8a000},{0x7ff8c000},{0x7ff8e000},{0x7ff90000},{0x7ff92000},{0x7ff94000},{0x7ff96000},{0x7ff98000},{0x7ff9a000},{0x7ff9c000},{0x7ff9e000},{0x7ffa0000},{0x7ffa2000},{0x7ffa4000},{0x7ffa6000},{0x7ffa8000},{0x7ffaa000},{0x7ffac000},{0x7ffae000},{0x7ffb0000},{0x7ffb2000},{0x7ffb4000},{0x7ffb6000},{0x7ffb8000},{0x7ffba000},{0x7ffbc000},{0x7ffbe000}, -{0x7ffc0000},{0x7ffc2000},{0x7ffc4000},{0x7ffc6000},{0x7ffc8000},{0x7ffca000},{0x7ffcc000},{0x7ffce000},{0x7ffd0000},{0x7ffd2000},{0x7ffd4000},{0x7ffd6000},{0x7ffd8000},{0x7ffda000},{0x7ffdc000},{0x7ffde000},{0x7ffe0000},{0x7ffe2000},{0x7ffe4000},{0x7ffe6000},{0x7ffe8000},{0x7ffea000},{0x7ffec000},{0x7ffee000},{0x7fff0000},{0x7fff2000},{0x7fff4000},{0x7fff6000},{0x7fff8000},{0x7fffa000},{0x7fffc000},{0x7fffe000}, -{0x80000000},{0xb3800000},{0xb4000000},{0xb4400000},{0xb4800000},{0xb4a00000},{0xb4c00000},{0xb4e00000},{0xb5000000},{0xb5100000},{0xb5200000},{0xb5300000},{0xb5400000},{0xb5500000},{0xb5600000},{0xb5700000},{0xb5800000},{0xb5880000},{0xb5900000},{0xb5980000},{0xb5a00000},{0xb5a80000},{0xb5b00000},{0xb5b80000},{0xb5c00000},{0xb5c80000},{0xb5d00000},{0xb5d80000},{0xb5e00000},{0xb5e80000},{0xb5f00000},{0xb5f80000}, -{0xb6000000},{0xb6040000},{0xb6080000},{0xb60c0000},{0xb6100000},{0xb6140000},{0xb6180000},{0xb61c0000},{0xb6200000},{0xb6240000},{0xb6280000},{0xb62c0000},{0xb6300000},{0xb6340000},{0xb6380000},{0xb63c0000},{0xb6400000},{0xb6440000},{0xb6480000},{0xb64c0000},{0xb6500000},{0xb6540000},{0xb6580000},{0xb65c0000},{0xb6600000},{0xb6640000},{0xb6680000},{0xb66c0000},{0xb6700000},{0xb6740000},{0xb6780000},{0xb67c0000}, -{0xb6800000},{0xb6820000},{0xb6840000},{0xb6860000},{0xb6880000},{0xb68a0000},{0xb68c0000},{0xb68e0000},{0xb6900000},{0xb6920000},{0xb6940000},{0xb6960000},{0xb6980000},{0xb69a0000},{0xb69c0000},{0xb69e0000},{0xb6a00000},{0xb6a20000},{0xb6a40000},{0xb6a60000},{0xb6a80000},{0xb6aa0000},{0xb6ac0000},{0xb6ae0000},{0xb6b00000},{0xb6b20000},{0xb6b40000},{0xb6b60000},{0xb6b80000},{0xb6ba0000},{0xb6bc0000},{0xb6be0000}, -{0xb6c00000},{0xb6c20000},{0xb6c40000},{0xb6c60000},{0xb6c80000},{0xb6ca0000},{0xb6cc0000},{0xb6ce0000},{0xb6d00000},{0xb6d20000},{0xb6d40000},{0xb6d60000},{0xb6d80000},{0xb6da0000},{0xb6dc0000},{0xb6de0000},{0xb6e00000},{0xb6e20000},{0xb6e40000},{0xb6e60000},{0xb6e80000},{0xb6ea0000},{0xb6ec0000},{0xb6ee0000},{0xb6f00000},{0xb6f20000},{0xb6f40000},{0xb6f60000},{0xb6f80000},{0xb6fa0000},{0xb6fc0000},{0xb6fe0000}, -{0xb7000000},{0xb7010000},{0xb7020000},{0xb7030000},{0xb7040000},{0xb7050000},{0xb7060000},{0xb7070000},{0xb7080000},{0xb7090000},{0xb70a0000},{0xb70b0000},{0xb70c0000},{0xb70d0000},{0xb70e0000},{0xb70f0000},{0xb7100000},{0xb7110000},{0xb7120000},{0xb7130000},{0xb7140000},{0xb7150000},{0xb7160000},{0xb7170000},{0xb7180000},{0xb7190000},{0xb71a0000},{0xb71b0000},{0xb71c0000},{0xb71d0000},{0xb71e0000},{0xb71f0000}, -{0xb7200000},{0xb7210000},{0xb7220000},{0xb7230000},{0xb7240000},{0xb7250000},{0xb7260000},{0xb7270000},{0xb7280000},{0xb7290000},{0xb72a0000},{0xb72b0000},{0xb72c0000},{0xb72d0000},{0xb72e0000},{0xb72f0000},{0xb7300000},{0xb7310000},{0xb7320000},{0xb7330000},{0xb7340000},{0xb7350000},{0xb7360000},{0xb7370000},{0xb7380000},{0xb7390000},{0xb73a0000},{0xb73b0000},{0xb73c0000},{0xb73d0000},{0xb73e0000},{0xb73f0000}, -{0xb7400000},{0xb7410000},{0xb7420000},{0xb7430000},{0xb7440000},{0xb7450000},{0xb7460000},{0xb7470000},{0xb7480000},{0xb7490000},{0xb74a0000},{0xb74b0000},{0xb74c0000},{0xb74d0000},{0xb74e0000},{0xb74f0000},{0xb7500000},{0xb7510000},{0xb7520000},{0xb7530000},{0xb7540000},{0xb7550000},{0xb7560000},{0xb7570000},{0xb7580000},{0xb7590000},{0xb75a0000},{0xb75b0000},{0xb75c0000},{0xb75d0000},{0xb75e0000},{0xb75f0000}, -{0xb7600000},{0xb7610000},{0xb7620000},{0xb7630000},{0xb7640000},{0xb7650000},{0xb7660000},{0xb7670000},{0xb7680000},{0xb7690000},{0xb76a0000},{0xb76b0000},{0xb76c0000},{0xb76d0000},{0xb76e0000},{0xb76f0000},{0xb7700000},{0xb7710000},{0xb7720000},{0xb7730000},{0xb7740000},{0xb7750000},{0xb7760000},{0xb7770000},{0xb7780000},{0xb7790000},{0xb77a0000},{0xb77b0000},{0xb77c0000},{0xb77d0000},{0xb77e0000},{0xb77f0000}, -{0xb7800000},{0xb7808000},{0xb7810000},{0xb7818000},{0xb7820000},{0xb7828000},{0xb7830000},{0xb7838000},{0xb7840000},{0xb7848000},{0xb7850000},{0xb7858000},{0xb7860000},{0xb7868000},{0xb7870000},{0xb7878000},{0xb7880000},{0xb7888000},{0xb7890000},{0xb7898000},{0xb78a0000},{0xb78a8000},{0xb78b0000},{0xb78b8000},{0xb78c0000},{0xb78c8000},{0xb78d0000},{0xb78d8000},{0xb78e0000},{0xb78e8000},{0xb78f0000},{0xb78f8000}, -{0xb7900000},{0xb7908000},{0xb7910000},{0xb7918000},{0xb7920000},{0xb7928000},{0xb7930000},{0xb7938000},{0xb7940000},{0xb7948000},{0xb7950000},{0xb7958000},{0xb7960000},{0xb7968000},{0xb7970000},{0xb7978000},{0xb7980000},{0xb7988000},{0xb7990000},{0xb7998000},{0xb79a0000},{0xb79a8000},{0xb79b0000},{0xb79b8000},{0xb79c0000},{0xb79c8000},{0xb79d0000},{0xb79d8000},{0xb79e0000},{0xb79e8000},{0xb79f0000},{0xb79f8000}, -{0xb7a00000},{0xb7a08000},{0xb7a10000},{0xb7a18000},{0xb7a20000},{0xb7a28000},{0xb7a30000},{0xb7a38000},{0xb7a40000},{0xb7a48000},{0xb7a50000},{0xb7a58000},{0xb7a60000},{0xb7a68000},{0xb7a70000},{0xb7a78000},{0xb7a80000},{0xb7a88000},{0xb7a90000},{0xb7a98000},{0xb7aa0000},{0xb7aa8000},{0xb7ab0000},{0xb7ab8000},{0xb7ac0000},{0xb7ac8000},{0xb7ad0000},{0xb7ad8000},{0xb7ae0000},{0xb7ae8000},{0xb7af0000},{0xb7af8000}, -{0xb7b00000},{0xb7b08000},{0xb7b10000},{0xb7b18000},{0xb7b20000},{0xb7b28000},{0xb7b30000},{0xb7b38000},{0xb7b40000},{0xb7b48000},{0xb7b50000},{0xb7b58000},{0xb7b60000},{0xb7b68000},{0xb7b70000},{0xb7b78000},{0xb7b80000},{0xb7b88000},{0xb7b90000},{0xb7b98000},{0xb7ba0000},{0xb7ba8000},{0xb7bb0000},{0xb7bb8000},{0xb7bc0000},{0xb7bc8000},{0xb7bd0000},{0xb7bd8000},{0xb7be0000},{0xb7be8000},{0xb7bf0000},{0xb7bf8000}, -{0xb7c00000},{0xb7c08000},{0xb7c10000},{0xb7c18000},{0xb7c20000},{0xb7c28000},{0xb7c30000},{0xb7c38000},{0xb7c40000},{0xb7c48000},{0xb7c50000},{0xb7c58000},{0xb7c60000},{0xb7c68000},{0xb7c70000},{0xb7c78000},{0xb7c80000},{0xb7c88000},{0xb7c90000},{0xb7c98000},{0xb7ca0000},{0xb7ca8000},{0xb7cb0000},{0xb7cb8000},{0xb7cc0000},{0xb7cc8000},{0xb7cd0000},{0xb7cd8000},{0xb7ce0000},{0xb7ce8000},{0xb7cf0000},{0xb7cf8000}, -{0xb7d00000},{0xb7d08000},{0xb7d10000},{0xb7d18000},{0xb7d20000},{0xb7d28000},{0xb7d30000},{0xb7d38000},{0xb7d40000},{0xb7d48000},{0xb7d50000},{0xb7d58000},{0xb7d60000},{0xb7d68000},{0xb7d70000},{0xb7d78000},{0xb7d80000},{0xb7d88000},{0xb7d90000},{0xb7d98000},{0xb7da0000},{0xb7da8000},{0xb7db0000},{0xb7db8000},{0xb7dc0000},{0xb7dc8000},{0xb7dd0000},{0xb7dd8000},{0xb7de0000},{0xb7de8000},{0xb7df0000},{0xb7df8000}, -{0xb7e00000},{0xb7e08000},{0xb7e10000},{0xb7e18000},{0xb7e20000},{0xb7e28000},{0xb7e30000},{0xb7e38000},{0xb7e40000},{0xb7e48000},{0xb7e50000},{0xb7e58000},{0xb7e60000},{0xb7e68000},{0xb7e70000},{0xb7e78000},{0xb7e80000},{0xb7e88000},{0xb7e90000},{0xb7e98000},{0xb7ea0000},{0xb7ea8000},{0xb7eb0000},{0xb7eb8000},{0xb7ec0000},{0xb7ec8000},{0xb7ed0000},{0xb7ed8000},{0xb7ee0000},{0xb7ee8000},{0xb7ef0000},{0xb7ef8000}, -{0xb7f00000},{0xb7f08000},{0xb7f10000},{0xb7f18000},{0xb7f20000},{0xb7f28000},{0xb7f30000},{0xb7f38000},{0xb7f40000},{0xb7f48000},{0xb7f50000},{0xb7f58000},{0xb7f60000},{0xb7f68000},{0xb7f70000},{0xb7f78000},{0xb7f80000},{0xb7f88000},{0xb7f90000},{0xb7f98000},{0xb7fa0000},{0xb7fa8000},{0xb7fb0000},{0xb7fb8000},{0xb7fc0000},{0xb7fc8000},{0xb7fd0000},{0xb7fd8000},{0xb7fe0000},{0xb7fe8000},{0xb7ff0000},{0xb7ff8000}, -{0xb8000000},{0xb8004000},{0xb8008000},{0xb800c000},{0xb8010000},{0xb8014000},{0xb8018000},{0xb801c000},{0xb8020000},{0xb8024000},{0xb8028000},{0xb802c000},{0xb8030000},{0xb8034000},{0xb8038000},{0xb803c000},{0xb8040000},{0xb8044000},{0xb8048000},{0xb804c000},{0xb8050000},{0xb8054000},{0xb8058000},{0xb805c000},{0xb8060000},{0xb8064000},{0xb8068000},{0xb806c000},{0xb8070000},{0xb8074000},{0xb8078000},{0xb807c000}, -{0xb8080000},{0xb8084000},{0xb8088000},{0xb808c000},{0xb8090000},{0xb8094000},{0xb8098000},{0xb809c000},{0xb80a0000},{0xb80a4000},{0xb80a8000},{0xb80ac000},{0xb80b0000},{0xb80b4000},{0xb80b8000},{0xb80bc000},{0xb80c0000},{0xb80c4000},{0xb80c8000},{0xb80cc000},{0xb80d0000},{0xb80d4000},{0xb80d8000},{0xb80dc000},{0xb80e0000},{0xb80e4000},{0xb80e8000},{0xb80ec000},{0xb80f0000},{0xb80f4000},{0xb80f8000},{0xb80fc000}, -{0xb8100000},{0xb8104000},{0xb8108000},{0xb810c000},{0xb8110000},{0xb8114000},{0xb8118000},{0xb811c000},{0xb8120000},{0xb8124000},{0xb8128000},{0xb812c000},{0xb8130000},{0xb8134000},{0xb8138000},{0xb813c000},{0xb8140000},{0xb8144000},{0xb8148000},{0xb814c000},{0xb8150000},{0xb8154000},{0xb8158000},{0xb815c000},{0xb8160000},{0xb8164000},{0xb8168000},{0xb816c000},{0xb8170000},{0xb8174000},{0xb8178000},{0xb817c000}, -{0xb8180000},{0xb8184000},{0xb8188000},{0xb818c000},{0xb8190000},{0xb8194000},{0xb8198000},{0xb819c000},{0xb81a0000},{0xb81a4000},{0xb81a8000},{0xb81ac000},{0xb81b0000},{0xb81b4000},{0xb81b8000},{0xb81bc000},{0xb81c0000},{0xb81c4000},{0xb81c8000},{0xb81cc000},{0xb81d0000},{0xb81d4000},{0xb81d8000},{0xb81dc000},{0xb81e0000},{0xb81e4000},{0xb81e8000},{0xb81ec000},{0xb81f0000},{0xb81f4000},{0xb81f8000},{0xb81fc000}, -{0xb8200000},{0xb8204000},{0xb8208000},{0xb820c000},{0xb8210000},{0xb8214000},{0xb8218000},{0xb821c000},{0xb8220000},{0xb8224000},{0xb8228000},{0xb822c000},{0xb8230000},{0xb8234000},{0xb8238000},{0xb823c000},{0xb8240000},{0xb8244000},{0xb8248000},{0xb824c000},{0xb8250000},{0xb8254000},{0xb8258000},{0xb825c000},{0xb8260000},{0xb8264000},{0xb8268000},{0xb826c000},{0xb8270000},{0xb8274000},{0xb8278000},{0xb827c000}, -{0xb8280000},{0xb8284000},{0xb8288000},{0xb828c000},{0xb8290000},{0xb8294000},{0xb8298000},{0xb829c000},{0xb82a0000},{0xb82a4000},{0xb82a8000},{0xb82ac000},{0xb82b0000},{0xb82b4000},{0xb82b8000},{0xb82bc000},{0xb82c0000},{0xb82c4000},{0xb82c8000},{0xb82cc000},{0xb82d0000},{0xb82d4000},{0xb82d8000},{0xb82dc000},{0xb82e0000},{0xb82e4000},{0xb82e8000},{0xb82ec000},{0xb82f0000},{0xb82f4000},{0xb82f8000},{0xb82fc000}, -{0xb8300000},{0xb8304000},{0xb8308000},{0xb830c000},{0xb8310000},{0xb8314000},{0xb8318000},{0xb831c000},{0xb8320000},{0xb8324000},{0xb8328000},{0xb832c000},{0xb8330000},{0xb8334000},{0xb8338000},{0xb833c000},{0xb8340000},{0xb8344000},{0xb8348000},{0xb834c000},{0xb8350000},{0xb8354000},{0xb8358000},{0xb835c000},{0xb8360000},{0xb8364000},{0xb8368000},{0xb836c000},{0xb8370000},{0xb8374000},{0xb8378000},{0xb837c000}, -{0xb8380000},{0xb8384000},{0xb8388000},{0xb838c000},{0xb8390000},{0xb8394000},{0xb8398000},{0xb839c000},{0xb83a0000},{0xb83a4000},{0xb83a8000},{0xb83ac000},{0xb83b0000},{0xb83b4000},{0xb83b8000},{0xb83bc000},{0xb83c0000},{0xb83c4000},{0xb83c8000},{0xb83cc000},{0xb83d0000},{0xb83d4000},{0xb83d8000},{0xb83dc000},{0xb83e0000},{0xb83e4000},{0xb83e8000},{0xb83ec000},{0xb83f0000},{0xb83f4000},{0xb83f8000},{0xb83fc000}, -{0xb8400000},{0xb8404000},{0xb8408000},{0xb840c000},{0xb8410000},{0xb8414000},{0xb8418000},{0xb841c000},{0xb8420000},{0xb8424000},{0xb8428000},{0xb842c000},{0xb8430000},{0xb8434000},{0xb8438000},{0xb843c000},{0xb8440000},{0xb8444000},{0xb8448000},{0xb844c000},{0xb8450000},{0xb8454000},{0xb8458000},{0xb845c000},{0xb8460000},{0xb8464000},{0xb8468000},{0xb846c000},{0xb8470000},{0xb8474000},{0xb8478000},{0xb847c000}, -{0xb8480000},{0xb8484000},{0xb8488000},{0xb848c000},{0xb8490000},{0xb8494000},{0xb8498000},{0xb849c000},{0xb84a0000},{0xb84a4000},{0xb84a8000},{0xb84ac000},{0xb84b0000},{0xb84b4000},{0xb84b8000},{0xb84bc000},{0xb84c0000},{0xb84c4000},{0xb84c8000},{0xb84cc000},{0xb84d0000},{0xb84d4000},{0xb84d8000},{0xb84dc000},{0xb84e0000},{0xb84e4000},{0xb84e8000},{0xb84ec000},{0xb84f0000},{0xb84f4000},{0xb84f8000},{0xb84fc000}, -{0xb8500000},{0xb8504000},{0xb8508000},{0xb850c000},{0xb8510000},{0xb8514000},{0xb8518000},{0xb851c000},{0xb8520000},{0xb8524000},{0xb8528000},{0xb852c000},{0xb8530000},{0xb8534000},{0xb8538000},{0xb853c000},{0xb8540000},{0xb8544000},{0xb8548000},{0xb854c000},{0xb8550000},{0xb8554000},{0xb8558000},{0xb855c000},{0xb8560000},{0xb8564000},{0xb8568000},{0xb856c000},{0xb8570000},{0xb8574000},{0xb8578000},{0xb857c000}, -{0xb8580000},{0xb8584000},{0xb8588000},{0xb858c000},{0xb8590000},{0xb8594000},{0xb8598000},{0xb859c000},{0xb85a0000},{0xb85a4000},{0xb85a8000},{0xb85ac000},{0xb85b0000},{0xb85b4000},{0xb85b8000},{0xb85bc000},{0xb85c0000},{0xb85c4000},{0xb85c8000},{0xb85cc000},{0xb85d0000},{0xb85d4000},{0xb85d8000},{0xb85dc000},{0xb85e0000},{0xb85e4000},{0xb85e8000},{0xb85ec000},{0xb85f0000},{0xb85f4000},{0xb85f8000},{0xb85fc000}, -{0xb8600000},{0xb8604000},{0xb8608000},{0xb860c000},{0xb8610000},{0xb8614000},{0xb8618000},{0xb861c000},{0xb8620000},{0xb8624000},{0xb8628000},{0xb862c000},{0xb8630000},{0xb8634000},{0xb8638000},{0xb863c000},{0xb8640000},{0xb8644000},{0xb8648000},{0xb864c000},{0xb8650000},{0xb8654000},{0xb8658000},{0xb865c000},{0xb8660000},{0xb8664000},{0xb8668000},{0xb866c000},{0xb8670000},{0xb8674000},{0xb8678000},{0xb867c000}, -{0xb8680000},{0xb8684000},{0xb8688000},{0xb868c000},{0xb8690000},{0xb8694000},{0xb8698000},{0xb869c000},{0xb86a0000},{0xb86a4000},{0xb86a8000},{0xb86ac000},{0xb86b0000},{0xb86b4000},{0xb86b8000},{0xb86bc000},{0xb86c0000},{0xb86c4000},{0xb86c8000},{0xb86cc000},{0xb86d0000},{0xb86d4000},{0xb86d8000},{0xb86dc000},{0xb86e0000},{0xb86e4000},{0xb86e8000},{0xb86ec000},{0xb86f0000},{0xb86f4000},{0xb86f8000},{0xb86fc000}, -{0xb8700000},{0xb8704000},{0xb8708000},{0xb870c000},{0xb8710000},{0xb8714000},{0xb8718000},{0xb871c000},{0xb8720000},{0xb8724000},{0xb8728000},{0xb872c000},{0xb8730000},{0xb8734000},{0xb8738000},{0xb873c000},{0xb8740000},{0xb8744000},{0xb8748000},{0xb874c000},{0xb8750000},{0xb8754000},{0xb8758000},{0xb875c000},{0xb8760000},{0xb8764000},{0xb8768000},{0xb876c000},{0xb8770000},{0xb8774000},{0xb8778000},{0xb877c000}, -{0xb8780000},{0xb8784000},{0xb8788000},{0xb878c000},{0xb8790000},{0xb8794000},{0xb8798000},{0xb879c000},{0xb87a0000},{0xb87a4000},{0xb87a8000},{0xb87ac000},{0xb87b0000},{0xb87b4000},{0xb87b8000},{0xb87bc000},{0xb87c0000},{0xb87c4000},{0xb87c8000},{0xb87cc000},{0xb87d0000},{0xb87d4000},{0xb87d8000},{0xb87dc000},{0xb87e0000},{0xb87e4000},{0xb87e8000},{0xb87ec000},{0xb87f0000},{0xb87f4000},{0xb87f8000},{0xb87fc000}, -{0xb8800000},{0xb8802000},{0xb8804000},{0xb8806000},{0xb8808000},{0xb880a000},{0xb880c000},{0xb880e000},{0xb8810000},{0xb8812000},{0xb8814000},{0xb8816000},{0xb8818000},{0xb881a000},{0xb881c000},{0xb881e000},{0xb8820000},{0xb8822000},{0xb8824000},{0xb8826000},{0xb8828000},{0xb882a000},{0xb882c000},{0xb882e000},{0xb8830000},{0xb8832000},{0xb8834000},{0xb8836000},{0xb8838000},{0xb883a000},{0xb883c000},{0xb883e000}, -{0xb8840000},{0xb8842000},{0xb8844000},{0xb8846000},{0xb8848000},{0xb884a000},{0xb884c000},{0xb884e000},{0xb8850000},{0xb8852000},{0xb8854000},{0xb8856000},{0xb8858000},{0xb885a000},{0xb885c000},{0xb885e000},{0xb8860000},{0xb8862000},{0xb8864000},{0xb8866000},{0xb8868000},{0xb886a000},{0xb886c000},{0xb886e000},{0xb8870000},{0xb8872000},{0xb8874000},{0xb8876000},{0xb8878000},{0xb887a000},{0xb887c000},{0xb887e000}, -{0xb8880000},{0xb8882000},{0xb8884000},{0xb8886000},{0xb8888000},{0xb888a000},{0xb888c000},{0xb888e000},{0xb8890000},{0xb8892000},{0xb8894000},{0xb8896000},{0xb8898000},{0xb889a000},{0xb889c000},{0xb889e000},{0xb88a0000},{0xb88a2000},{0xb88a4000},{0xb88a6000},{0xb88a8000},{0xb88aa000},{0xb88ac000},{0xb88ae000},{0xb88b0000},{0xb88b2000},{0xb88b4000},{0xb88b6000},{0xb88b8000},{0xb88ba000},{0xb88bc000},{0xb88be000}, -{0xb88c0000},{0xb88c2000},{0xb88c4000},{0xb88c6000},{0xb88c8000},{0xb88ca000},{0xb88cc000},{0xb88ce000},{0xb88d0000},{0xb88d2000},{0xb88d4000},{0xb88d6000},{0xb88d8000},{0xb88da000},{0xb88dc000},{0xb88de000},{0xb88e0000},{0xb88e2000},{0xb88e4000},{0xb88e6000},{0xb88e8000},{0xb88ea000},{0xb88ec000},{0xb88ee000},{0xb88f0000},{0xb88f2000},{0xb88f4000},{0xb88f6000},{0xb88f8000},{0xb88fa000},{0xb88fc000},{0xb88fe000}, -{0xb8900000},{0xb8902000},{0xb8904000},{0xb8906000},{0xb8908000},{0xb890a000},{0xb890c000},{0xb890e000},{0xb8910000},{0xb8912000},{0xb8914000},{0xb8916000},{0xb8918000},{0xb891a000},{0xb891c000},{0xb891e000},{0xb8920000},{0xb8922000},{0xb8924000},{0xb8926000},{0xb8928000},{0xb892a000},{0xb892c000},{0xb892e000},{0xb8930000},{0xb8932000},{0xb8934000},{0xb8936000},{0xb8938000},{0xb893a000},{0xb893c000},{0xb893e000}, -{0xb8940000},{0xb8942000},{0xb8944000},{0xb8946000},{0xb8948000},{0xb894a000},{0xb894c000},{0xb894e000},{0xb8950000},{0xb8952000},{0xb8954000},{0xb8956000},{0xb8958000},{0xb895a000},{0xb895c000},{0xb895e000},{0xb8960000},{0xb8962000},{0xb8964000},{0xb8966000},{0xb8968000},{0xb896a000},{0xb896c000},{0xb896e000},{0xb8970000},{0xb8972000},{0xb8974000},{0xb8976000},{0xb8978000},{0xb897a000},{0xb897c000},{0xb897e000}, -{0xb8980000},{0xb8982000},{0xb8984000},{0xb8986000},{0xb8988000},{0xb898a000},{0xb898c000},{0xb898e000},{0xb8990000},{0xb8992000},{0xb8994000},{0xb8996000},{0xb8998000},{0xb899a000},{0xb899c000},{0xb899e000},{0xb89a0000},{0xb89a2000},{0xb89a4000},{0xb89a6000},{0xb89a8000},{0xb89aa000},{0xb89ac000},{0xb89ae000},{0xb89b0000},{0xb89b2000},{0xb89b4000},{0xb89b6000},{0xb89b8000},{0xb89ba000},{0xb89bc000},{0xb89be000}, -{0xb89c0000},{0xb89c2000},{0xb89c4000},{0xb89c6000},{0xb89c8000},{0xb89ca000},{0xb89cc000},{0xb89ce000},{0xb89d0000},{0xb89d2000},{0xb89d4000},{0xb89d6000},{0xb89d8000},{0xb89da000},{0xb89dc000},{0xb89de000},{0xb89e0000},{0xb89e2000},{0xb89e4000},{0xb89e6000},{0xb89e8000},{0xb89ea000},{0xb89ec000},{0xb89ee000},{0xb89f0000},{0xb89f2000},{0xb89f4000},{0xb89f6000},{0xb89f8000},{0xb89fa000},{0xb89fc000},{0xb89fe000}, -{0xb8a00000},{0xb8a02000},{0xb8a04000},{0xb8a06000},{0xb8a08000},{0xb8a0a000},{0xb8a0c000},{0xb8a0e000},{0xb8a10000},{0xb8a12000},{0xb8a14000},{0xb8a16000},{0xb8a18000},{0xb8a1a000},{0xb8a1c000},{0xb8a1e000},{0xb8a20000},{0xb8a22000},{0xb8a24000},{0xb8a26000},{0xb8a28000},{0xb8a2a000},{0xb8a2c000},{0xb8a2e000},{0xb8a30000},{0xb8a32000},{0xb8a34000},{0xb8a36000},{0xb8a38000},{0xb8a3a000},{0xb8a3c000},{0xb8a3e000}, -{0xb8a40000},{0xb8a42000},{0xb8a44000},{0xb8a46000},{0xb8a48000},{0xb8a4a000},{0xb8a4c000},{0xb8a4e000},{0xb8a50000},{0xb8a52000},{0xb8a54000},{0xb8a56000},{0xb8a58000},{0xb8a5a000},{0xb8a5c000},{0xb8a5e000},{0xb8a60000},{0xb8a62000},{0xb8a64000},{0xb8a66000},{0xb8a68000},{0xb8a6a000},{0xb8a6c000},{0xb8a6e000},{0xb8a70000},{0xb8a72000},{0xb8a74000},{0xb8a76000},{0xb8a78000},{0xb8a7a000},{0xb8a7c000},{0xb8a7e000}, -{0xb8a80000},{0xb8a82000},{0xb8a84000},{0xb8a86000},{0xb8a88000},{0xb8a8a000},{0xb8a8c000},{0xb8a8e000},{0xb8a90000},{0xb8a92000},{0xb8a94000},{0xb8a96000},{0xb8a98000},{0xb8a9a000},{0xb8a9c000},{0xb8a9e000},{0xb8aa0000},{0xb8aa2000},{0xb8aa4000},{0xb8aa6000},{0xb8aa8000},{0xb8aaa000},{0xb8aac000},{0xb8aae000},{0xb8ab0000},{0xb8ab2000},{0xb8ab4000},{0xb8ab6000},{0xb8ab8000},{0xb8aba000},{0xb8abc000},{0xb8abe000}, -{0xb8ac0000},{0xb8ac2000},{0xb8ac4000},{0xb8ac6000},{0xb8ac8000},{0xb8aca000},{0xb8acc000},{0xb8ace000},{0xb8ad0000},{0xb8ad2000},{0xb8ad4000},{0xb8ad6000},{0xb8ad8000},{0xb8ada000},{0xb8adc000},{0xb8ade000},{0xb8ae0000},{0xb8ae2000},{0xb8ae4000},{0xb8ae6000},{0xb8ae8000},{0xb8aea000},{0xb8aec000},{0xb8aee000},{0xb8af0000},{0xb8af2000},{0xb8af4000},{0xb8af6000},{0xb8af8000},{0xb8afa000},{0xb8afc000},{0xb8afe000}, -{0xb8b00000},{0xb8b02000},{0xb8b04000},{0xb8b06000},{0xb8b08000},{0xb8b0a000},{0xb8b0c000},{0xb8b0e000},{0xb8b10000},{0xb8b12000},{0xb8b14000},{0xb8b16000},{0xb8b18000},{0xb8b1a000},{0xb8b1c000},{0xb8b1e000},{0xb8b20000},{0xb8b22000},{0xb8b24000},{0xb8b26000},{0xb8b28000},{0xb8b2a000},{0xb8b2c000},{0xb8b2e000},{0xb8b30000},{0xb8b32000},{0xb8b34000},{0xb8b36000},{0xb8b38000},{0xb8b3a000},{0xb8b3c000},{0xb8b3e000}, -{0xb8b40000},{0xb8b42000},{0xb8b44000},{0xb8b46000},{0xb8b48000},{0xb8b4a000},{0xb8b4c000},{0xb8b4e000},{0xb8b50000},{0xb8b52000},{0xb8b54000},{0xb8b56000},{0xb8b58000},{0xb8b5a000},{0xb8b5c000},{0xb8b5e000},{0xb8b60000},{0xb8b62000},{0xb8b64000},{0xb8b66000},{0xb8b68000},{0xb8b6a000},{0xb8b6c000},{0xb8b6e000},{0xb8b70000},{0xb8b72000},{0xb8b74000},{0xb8b76000},{0xb8b78000},{0xb8b7a000},{0xb8b7c000},{0xb8b7e000}, -{0xb8b80000},{0xb8b82000},{0xb8b84000},{0xb8b86000},{0xb8b88000},{0xb8b8a000},{0xb8b8c000},{0xb8b8e000},{0xb8b90000},{0xb8b92000},{0xb8b94000},{0xb8b96000},{0xb8b98000},{0xb8b9a000},{0xb8b9c000},{0xb8b9e000},{0xb8ba0000},{0xb8ba2000},{0xb8ba4000},{0xb8ba6000},{0xb8ba8000},{0xb8baa000},{0xb8bac000},{0xb8bae000},{0xb8bb0000},{0xb8bb2000},{0xb8bb4000},{0xb8bb6000},{0xb8bb8000},{0xb8bba000},{0xb8bbc000},{0xb8bbe000}, -{0xb8bc0000},{0xb8bc2000},{0xb8bc4000},{0xb8bc6000},{0xb8bc8000},{0xb8bca000},{0xb8bcc000},{0xb8bce000},{0xb8bd0000},{0xb8bd2000},{0xb8bd4000},{0xb8bd6000},{0xb8bd8000},{0xb8bda000},{0xb8bdc000},{0xb8bde000},{0xb8be0000},{0xb8be2000},{0xb8be4000},{0xb8be6000},{0xb8be8000},{0xb8bea000},{0xb8bec000},{0xb8bee000},{0xb8bf0000},{0xb8bf2000},{0xb8bf4000},{0xb8bf6000},{0xb8bf8000},{0xb8bfa000},{0xb8bfc000},{0xb8bfe000}, -{0xb8c00000},{0xb8c02000},{0xb8c04000},{0xb8c06000},{0xb8c08000},{0xb8c0a000},{0xb8c0c000},{0xb8c0e000},{0xb8c10000},{0xb8c12000},{0xb8c14000},{0xb8c16000},{0xb8c18000},{0xb8c1a000},{0xb8c1c000},{0xb8c1e000},{0xb8c20000},{0xb8c22000},{0xb8c24000},{0xb8c26000},{0xb8c28000},{0xb8c2a000},{0xb8c2c000},{0xb8c2e000},{0xb8c30000},{0xb8c32000},{0xb8c34000},{0xb8c36000},{0xb8c38000},{0xb8c3a000},{0xb8c3c000},{0xb8c3e000}, -{0xb8c40000},{0xb8c42000},{0xb8c44000},{0xb8c46000},{0xb8c48000},{0xb8c4a000},{0xb8c4c000},{0xb8c4e000},{0xb8c50000},{0xb8c52000},{0xb8c54000},{0xb8c56000},{0xb8c58000},{0xb8c5a000},{0xb8c5c000},{0xb8c5e000},{0xb8c60000},{0xb8c62000},{0xb8c64000},{0xb8c66000},{0xb8c68000},{0xb8c6a000},{0xb8c6c000},{0xb8c6e000},{0xb8c70000},{0xb8c72000},{0xb8c74000},{0xb8c76000},{0xb8c78000},{0xb8c7a000},{0xb8c7c000},{0xb8c7e000}, -{0xb8c80000},{0xb8c82000},{0xb8c84000},{0xb8c86000},{0xb8c88000},{0xb8c8a000},{0xb8c8c000},{0xb8c8e000},{0xb8c90000},{0xb8c92000},{0xb8c94000},{0xb8c96000},{0xb8c98000},{0xb8c9a000},{0xb8c9c000},{0xb8c9e000},{0xb8ca0000},{0xb8ca2000},{0xb8ca4000},{0xb8ca6000},{0xb8ca8000},{0xb8caa000},{0xb8cac000},{0xb8cae000},{0xb8cb0000},{0xb8cb2000},{0xb8cb4000},{0xb8cb6000},{0xb8cb8000},{0xb8cba000},{0xb8cbc000},{0xb8cbe000}, -{0xb8cc0000},{0xb8cc2000},{0xb8cc4000},{0xb8cc6000},{0xb8cc8000},{0xb8cca000},{0xb8ccc000},{0xb8cce000},{0xb8cd0000},{0xb8cd2000},{0xb8cd4000},{0xb8cd6000},{0xb8cd8000},{0xb8cda000},{0xb8cdc000},{0xb8cde000},{0xb8ce0000},{0xb8ce2000},{0xb8ce4000},{0xb8ce6000},{0xb8ce8000},{0xb8cea000},{0xb8cec000},{0xb8cee000},{0xb8cf0000},{0xb8cf2000},{0xb8cf4000},{0xb8cf6000},{0xb8cf8000},{0xb8cfa000},{0xb8cfc000},{0xb8cfe000}, -{0xb8d00000},{0xb8d02000},{0xb8d04000},{0xb8d06000},{0xb8d08000},{0xb8d0a000},{0xb8d0c000},{0xb8d0e000},{0xb8d10000},{0xb8d12000},{0xb8d14000},{0xb8d16000},{0xb8d18000},{0xb8d1a000},{0xb8d1c000},{0xb8d1e000},{0xb8d20000},{0xb8d22000},{0xb8d24000},{0xb8d26000},{0xb8d28000},{0xb8d2a000},{0xb8d2c000},{0xb8d2e000},{0xb8d30000},{0xb8d32000},{0xb8d34000},{0xb8d36000},{0xb8d38000},{0xb8d3a000},{0xb8d3c000},{0xb8d3e000}, -{0xb8d40000},{0xb8d42000},{0xb8d44000},{0xb8d46000},{0xb8d48000},{0xb8d4a000},{0xb8d4c000},{0xb8d4e000},{0xb8d50000},{0xb8d52000},{0xb8d54000},{0xb8d56000},{0xb8d58000},{0xb8d5a000},{0xb8d5c000},{0xb8d5e000},{0xb8d60000},{0xb8d62000},{0xb8d64000},{0xb8d66000},{0xb8d68000},{0xb8d6a000},{0xb8d6c000},{0xb8d6e000},{0xb8d70000},{0xb8d72000},{0xb8d74000},{0xb8d76000},{0xb8d78000},{0xb8d7a000},{0xb8d7c000},{0xb8d7e000}, -{0xb8d80000},{0xb8d82000},{0xb8d84000},{0xb8d86000},{0xb8d88000},{0xb8d8a000},{0xb8d8c000},{0xb8d8e000},{0xb8d90000},{0xb8d92000},{0xb8d94000},{0xb8d96000},{0xb8d98000},{0xb8d9a000},{0xb8d9c000},{0xb8d9e000},{0xb8da0000},{0xb8da2000},{0xb8da4000},{0xb8da6000},{0xb8da8000},{0xb8daa000},{0xb8dac000},{0xb8dae000},{0xb8db0000},{0xb8db2000},{0xb8db4000},{0xb8db6000},{0xb8db8000},{0xb8dba000},{0xb8dbc000},{0xb8dbe000}, -{0xb8dc0000},{0xb8dc2000},{0xb8dc4000},{0xb8dc6000},{0xb8dc8000},{0xb8dca000},{0xb8dcc000},{0xb8dce000},{0xb8dd0000},{0xb8dd2000},{0xb8dd4000},{0xb8dd6000},{0xb8dd8000},{0xb8dda000},{0xb8ddc000},{0xb8dde000},{0xb8de0000},{0xb8de2000},{0xb8de4000},{0xb8de6000},{0xb8de8000},{0xb8dea000},{0xb8dec000},{0xb8dee000},{0xb8df0000},{0xb8df2000},{0xb8df4000},{0xb8df6000},{0xb8df8000},{0xb8dfa000},{0xb8dfc000},{0xb8dfe000}, -{0xb8e00000},{0xb8e02000},{0xb8e04000},{0xb8e06000},{0xb8e08000},{0xb8e0a000},{0xb8e0c000},{0xb8e0e000},{0xb8e10000},{0xb8e12000},{0xb8e14000},{0xb8e16000},{0xb8e18000},{0xb8e1a000},{0xb8e1c000},{0xb8e1e000},{0xb8e20000},{0xb8e22000},{0xb8e24000},{0xb8e26000},{0xb8e28000},{0xb8e2a000},{0xb8e2c000},{0xb8e2e000},{0xb8e30000},{0xb8e32000},{0xb8e34000},{0xb8e36000},{0xb8e38000},{0xb8e3a000},{0xb8e3c000},{0xb8e3e000}, -{0xb8e40000},{0xb8e42000},{0xb8e44000},{0xb8e46000},{0xb8e48000},{0xb8e4a000},{0xb8e4c000},{0xb8e4e000},{0xb8e50000},{0xb8e52000},{0xb8e54000},{0xb8e56000},{0xb8e58000},{0xb8e5a000},{0xb8e5c000},{0xb8e5e000},{0xb8e60000},{0xb8e62000},{0xb8e64000},{0xb8e66000},{0xb8e68000},{0xb8e6a000},{0xb8e6c000},{0xb8e6e000},{0xb8e70000},{0xb8e72000},{0xb8e74000},{0xb8e76000},{0xb8e78000},{0xb8e7a000},{0xb8e7c000},{0xb8e7e000}, -{0xb8e80000},{0xb8e82000},{0xb8e84000},{0xb8e86000},{0xb8e88000},{0xb8e8a000},{0xb8e8c000},{0xb8e8e000},{0xb8e90000},{0xb8e92000},{0xb8e94000},{0xb8e96000},{0xb8e98000},{0xb8e9a000},{0xb8e9c000},{0xb8e9e000},{0xb8ea0000},{0xb8ea2000},{0xb8ea4000},{0xb8ea6000},{0xb8ea8000},{0xb8eaa000},{0xb8eac000},{0xb8eae000},{0xb8eb0000},{0xb8eb2000},{0xb8eb4000},{0xb8eb6000},{0xb8eb8000},{0xb8eba000},{0xb8ebc000},{0xb8ebe000}, -{0xb8ec0000},{0xb8ec2000},{0xb8ec4000},{0xb8ec6000},{0xb8ec8000},{0xb8eca000},{0xb8ecc000},{0xb8ece000},{0xb8ed0000},{0xb8ed2000},{0xb8ed4000},{0xb8ed6000},{0xb8ed8000},{0xb8eda000},{0xb8edc000},{0xb8ede000},{0xb8ee0000},{0xb8ee2000},{0xb8ee4000},{0xb8ee6000},{0xb8ee8000},{0xb8eea000},{0xb8eec000},{0xb8eee000},{0xb8ef0000},{0xb8ef2000},{0xb8ef4000},{0xb8ef6000},{0xb8ef8000},{0xb8efa000},{0xb8efc000},{0xb8efe000}, -{0xb8f00000},{0xb8f02000},{0xb8f04000},{0xb8f06000},{0xb8f08000},{0xb8f0a000},{0xb8f0c000},{0xb8f0e000},{0xb8f10000},{0xb8f12000},{0xb8f14000},{0xb8f16000},{0xb8f18000},{0xb8f1a000},{0xb8f1c000},{0xb8f1e000},{0xb8f20000},{0xb8f22000},{0xb8f24000},{0xb8f26000},{0xb8f28000},{0xb8f2a000},{0xb8f2c000},{0xb8f2e000},{0xb8f30000},{0xb8f32000},{0xb8f34000},{0xb8f36000},{0xb8f38000},{0xb8f3a000},{0xb8f3c000},{0xb8f3e000}, -{0xb8f40000},{0xb8f42000},{0xb8f44000},{0xb8f46000},{0xb8f48000},{0xb8f4a000},{0xb8f4c000},{0xb8f4e000},{0xb8f50000},{0xb8f52000},{0xb8f54000},{0xb8f56000},{0xb8f58000},{0xb8f5a000},{0xb8f5c000},{0xb8f5e000},{0xb8f60000},{0xb8f62000},{0xb8f64000},{0xb8f66000},{0xb8f68000},{0xb8f6a000},{0xb8f6c000},{0xb8f6e000},{0xb8f70000},{0xb8f72000},{0xb8f74000},{0xb8f76000},{0xb8f78000},{0xb8f7a000},{0xb8f7c000},{0xb8f7e000}, -{0xb8f80000},{0xb8f82000},{0xb8f84000},{0xb8f86000},{0xb8f88000},{0xb8f8a000},{0xb8f8c000},{0xb8f8e000},{0xb8f90000},{0xb8f92000},{0xb8f94000},{0xb8f96000},{0xb8f98000},{0xb8f9a000},{0xb8f9c000},{0xb8f9e000},{0xb8fa0000},{0xb8fa2000},{0xb8fa4000},{0xb8fa6000},{0xb8fa8000},{0xb8faa000},{0xb8fac000},{0xb8fae000},{0xb8fb0000},{0xb8fb2000},{0xb8fb4000},{0xb8fb6000},{0xb8fb8000},{0xb8fba000},{0xb8fbc000},{0xb8fbe000}, -{0xb8fc0000},{0xb8fc2000},{0xb8fc4000},{0xb8fc6000},{0xb8fc8000},{0xb8fca000},{0xb8fcc000},{0xb8fce000},{0xb8fd0000},{0xb8fd2000},{0xb8fd4000},{0xb8fd6000},{0xb8fd8000},{0xb8fda000},{0xb8fdc000},{0xb8fde000},{0xb8fe0000},{0xb8fe2000},{0xb8fe4000},{0xb8fe6000},{0xb8fe8000},{0xb8fea000},{0xb8fec000},{0xb8fee000},{0xb8ff0000},{0xb8ff2000},{0xb8ff4000},{0xb8ff6000},{0xb8ff8000},{0xb8ffa000},{0xb8ffc000},{0xb8ffe000}, -{0xb9000000},{0xb9002000},{0xb9004000},{0xb9006000},{0xb9008000},{0xb900a000},{0xb900c000},{0xb900e000},{0xb9010000},{0xb9012000},{0xb9014000},{0xb9016000},{0xb9018000},{0xb901a000},{0xb901c000},{0xb901e000},{0xb9020000},{0xb9022000},{0xb9024000},{0xb9026000},{0xb9028000},{0xb902a000},{0xb902c000},{0xb902e000},{0xb9030000},{0xb9032000},{0xb9034000},{0xb9036000},{0xb9038000},{0xb903a000},{0xb903c000},{0xb903e000}, -{0xb9040000},{0xb9042000},{0xb9044000},{0xb9046000},{0xb9048000},{0xb904a000},{0xb904c000},{0xb904e000},{0xb9050000},{0xb9052000},{0xb9054000},{0xb9056000},{0xb9058000},{0xb905a000},{0xb905c000},{0xb905e000},{0xb9060000},{0xb9062000},{0xb9064000},{0xb9066000},{0xb9068000},{0xb906a000},{0xb906c000},{0xb906e000},{0xb9070000},{0xb9072000},{0xb9074000},{0xb9076000},{0xb9078000},{0xb907a000},{0xb907c000},{0xb907e000}, -{0xb9080000},{0xb9082000},{0xb9084000},{0xb9086000},{0xb9088000},{0xb908a000},{0xb908c000},{0xb908e000},{0xb9090000},{0xb9092000},{0xb9094000},{0xb9096000},{0xb9098000},{0xb909a000},{0xb909c000},{0xb909e000},{0xb90a0000},{0xb90a2000},{0xb90a4000},{0xb90a6000},{0xb90a8000},{0xb90aa000},{0xb90ac000},{0xb90ae000},{0xb90b0000},{0xb90b2000},{0xb90b4000},{0xb90b6000},{0xb90b8000},{0xb90ba000},{0xb90bc000},{0xb90be000}, -{0xb90c0000},{0xb90c2000},{0xb90c4000},{0xb90c6000},{0xb90c8000},{0xb90ca000},{0xb90cc000},{0xb90ce000},{0xb90d0000},{0xb90d2000},{0xb90d4000},{0xb90d6000},{0xb90d8000},{0xb90da000},{0xb90dc000},{0xb90de000},{0xb90e0000},{0xb90e2000},{0xb90e4000},{0xb90e6000},{0xb90e8000},{0xb90ea000},{0xb90ec000},{0xb90ee000},{0xb90f0000},{0xb90f2000},{0xb90f4000},{0xb90f6000},{0xb90f8000},{0xb90fa000},{0xb90fc000},{0xb90fe000}, -{0xb9100000},{0xb9102000},{0xb9104000},{0xb9106000},{0xb9108000},{0xb910a000},{0xb910c000},{0xb910e000},{0xb9110000},{0xb9112000},{0xb9114000},{0xb9116000},{0xb9118000},{0xb911a000},{0xb911c000},{0xb911e000},{0xb9120000},{0xb9122000},{0xb9124000},{0xb9126000},{0xb9128000},{0xb912a000},{0xb912c000},{0xb912e000},{0xb9130000},{0xb9132000},{0xb9134000},{0xb9136000},{0xb9138000},{0xb913a000},{0xb913c000},{0xb913e000}, -{0xb9140000},{0xb9142000},{0xb9144000},{0xb9146000},{0xb9148000},{0xb914a000},{0xb914c000},{0xb914e000},{0xb9150000},{0xb9152000},{0xb9154000},{0xb9156000},{0xb9158000},{0xb915a000},{0xb915c000},{0xb915e000},{0xb9160000},{0xb9162000},{0xb9164000},{0xb9166000},{0xb9168000},{0xb916a000},{0xb916c000},{0xb916e000},{0xb9170000},{0xb9172000},{0xb9174000},{0xb9176000},{0xb9178000},{0xb917a000},{0xb917c000},{0xb917e000}, -{0xb9180000},{0xb9182000},{0xb9184000},{0xb9186000},{0xb9188000},{0xb918a000},{0xb918c000},{0xb918e000},{0xb9190000},{0xb9192000},{0xb9194000},{0xb9196000},{0xb9198000},{0xb919a000},{0xb919c000},{0xb919e000},{0xb91a0000},{0xb91a2000},{0xb91a4000},{0xb91a6000},{0xb91a8000},{0xb91aa000},{0xb91ac000},{0xb91ae000},{0xb91b0000},{0xb91b2000},{0xb91b4000},{0xb91b6000},{0xb91b8000},{0xb91ba000},{0xb91bc000},{0xb91be000}, -{0xb91c0000},{0xb91c2000},{0xb91c4000},{0xb91c6000},{0xb91c8000},{0xb91ca000},{0xb91cc000},{0xb91ce000},{0xb91d0000},{0xb91d2000},{0xb91d4000},{0xb91d6000},{0xb91d8000},{0xb91da000},{0xb91dc000},{0xb91de000},{0xb91e0000},{0xb91e2000},{0xb91e4000},{0xb91e6000},{0xb91e8000},{0xb91ea000},{0xb91ec000},{0xb91ee000},{0xb91f0000},{0xb91f2000},{0xb91f4000},{0xb91f6000},{0xb91f8000},{0xb91fa000},{0xb91fc000},{0xb91fe000}, -{0xb9200000},{0xb9202000},{0xb9204000},{0xb9206000},{0xb9208000},{0xb920a000},{0xb920c000},{0xb920e000},{0xb9210000},{0xb9212000},{0xb9214000},{0xb9216000},{0xb9218000},{0xb921a000},{0xb921c000},{0xb921e000},{0xb9220000},{0xb9222000},{0xb9224000},{0xb9226000},{0xb9228000},{0xb922a000},{0xb922c000},{0xb922e000},{0xb9230000},{0xb9232000},{0xb9234000},{0xb9236000},{0xb9238000},{0xb923a000},{0xb923c000},{0xb923e000}, -{0xb9240000},{0xb9242000},{0xb9244000},{0xb9246000},{0xb9248000},{0xb924a000},{0xb924c000},{0xb924e000},{0xb9250000},{0xb9252000},{0xb9254000},{0xb9256000},{0xb9258000},{0xb925a000},{0xb925c000},{0xb925e000},{0xb9260000},{0xb9262000},{0xb9264000},{0xb9266000},{0xb9268000},{0xb926a000},{0xb926c000},{0xb926e000},{0xb9270000},{0xb9272000},{0xb9274000},{0xb9276000},{0xb9278000},{0xb927a000},{0xb927c000},{0xb927e000}, -{0xb9280000},{0xb9282000},{0xb9284000},{0xb9286000},{0xb9288000},{0xb928a000},{0xb928c000},{0xb928e000},{0xb9290000},{0xb9292000},{0xb9294000},{0xb9296000},{0xb9298000},{0xb929a000},{0xb929c000},{0xb929e000},{0xb92a0000},{0xb92a2000},{0xb92a4000},{0xb92a6000},{0xb92a8000},{0xb92aa000},{0xb92ac000},{0xb92ae000},{0xb92b0000},{0xb92b2000},{0xb92b4000},{0xb92b6000},{0xb92b8000},{0xb92ba000},{0xb92bc000},{0xb92be000}, -{0xb92c0000},{0xb92c2000},{0xb92c4000},{0xb92c6000},{0xb92c8000},{0xb92ca000},{0xb92cc000},{0xb92ce000},{0xb92d0000},{0xb92d2000},{0xb92d4000},{0xb92d6000},{0xb92d8000},{0xb92da000},{0xb92dc000},{0xb92de000},{0xb92e0000},{0xb92e2000},{0xb92e4000},{0xb92e6000},{0xb92e8000},{0xb92ea000},{0xb92ec000},{0xb92ee000},{0xb92f0000},{0xb92f2000},{0xb92f4000},{0xb92f6000},{0xb92f8000},{0xb92fa000},{0xb92fc000},{0xb92fe000}, -{0xb9300000},{0xb9302000},{0xb9304000},{0xb9306000},{0xb9308000},{0xb930a000},{0xb930c000},{0xb930e000},{0xb9310000},{0xb9312000},{0xb9314000},{0xb9316000},{0xb9318000},{0xb931a000},{0xb931c000},{0xb931e000},{0xb9320000},{0xb9322000},{0xb9324000},{0xb9326000},{0xb9328000},{0xb932a000},{0xb932c000},{0xb932e000},{0xb9330000},{0xb9332000},{0xb9334000},{0xb9336000},{0xb9338000},{0xb933a000},{0xb933c000},{0xb933e000}, -{0xb9340000},{0xb9342000},{0xb9344000},{0xb9346000},{0xb9348000},{0xb934a000},{0xb934c000},{0xb934e000},{0xb9350000},{0xb9352000},{0xb9354000},{0xb9356000},{0xb9358000},{0xb935a000},{0xb935c000},{0xb935e000},{0xb9360000},{0xb9362000},{0xb9364000},{0xb9366000},{0xb9368000},{0xb936a000},{0xb936c000},{0xb936e000},{0xb9370000},{0xb9372000},{0xb9374000},{0xb9376000},{0xb9378000},{0xb937a000},{0xb937c000},{0xb937e000}, -{0xb9380000},{0xb9382000},{0xb9384000},{0xb9386000},{0xb9388000},{0xb938a000},{0xb938c000},{0xb938e000},{0xb9390000},{0xb9392000},{0xb9394000},{0xb9396000},{0xb9398000},{0xb939a000},{0xb939c000},{0xb939e000},{0xb93a0000},{0xb93a2000},{0xb93a4000},{0xb93a6000},{0xb93a8000},{0xb93aa000},{0xb93ac000},{0xb93ae000},{0xb93b0000},{0xb93b2000},{0xb93b4000},{0xb93b6000},{0xb93b8000},{0xb93ba000},{0xb93bc000},{0xb93be000}, -{0xb93c0000},{0xb93c2000},{0xb93c4000},{0xb93c6000},{0xb93c8000},{0xb93ca000},{0xb93cc000},{0xb93ce000},{0xb93d0000},{0xb93d2000},{0xb93d4000},{0xb93d6000},{0xb93d8000},{0xb93da000},{0xb93dc000},{0xb93de000},{0xb93e0000},{0xb93e2000},{0xb93e4000},{0xb93e6000},{0xb93e8000},{0xb93ea000},{0xb93ec000},{0xb93ee000},{0xb93f0000},{0xb93f2000},{0xb93f4000},{0xb93f6000},{0xb93f8000},{0xb93fa000},{0xb93fc000},{0xb93fe000}, -{0xb9400000},{0xb9402000},{0xb9404000},{0xb9406000},{0xb9408000},{0xb940a000},{0xb940c000},{0xb940e000},{0xb9410000},{0xb9412000},{0xb9414000},{0xb9416000},{0xb9418000},{0xb941a000},{0xb941c000},{0xb941e000},{0xb9420000},{0xb9422000},{0xb9424000},{0xb9426000},{0xb9428000},{0xb942a000},{0xb942c000},{0xb942e000},{0xb9430000},{0xb9432000},{0xb9434000},{0xb9436000},{0xb9438000},{0xb943a000},{0xb943c000},{0xb943e000}, -{0xb9440000},{0xb9442000},{0xb9444000},{0xb9446000},{0xb9448000},{0xb944a000},{0xb944c000},{0xb944e000},{0xb9450000},{0xb9452000},{0xb9454000},{0xb9456000},{0xb9458000},{0xb945a000},{0xb945c000},{0xb945e000},{0xb9460000},{0xb9462000},{0xb9464000},{0xb9466000},{0xb9468000},{0xb946a000},{0xb946c000},{0xb946e000},{0xb9470000},{0xb9472000},{0xb9474000},{0xb9476000},{0xb9478000},{0xb947a000},{0xb947c000},{0xb947e000}, -{0xb9480000},{0xb9482000},{0xb9484000},{0xb9486000},{0xb9488000},{0xb948a000},{0xb948c000},{0xb948e000},{0xb9490000},{0xb9492000},{0xb9494000},{0xb9496000},{0xb9498000},{0xb949a000},{0xb949c000},{0xb949e000},{0xb94a0000},{0xb94a2000},{0xb94a4000},{0xb94a6000},{0xb94a8000},{0xb94aa000},{0xb94ac000},{0xb94ae000},{0xb94b0000},{0xb94b2000},{0xb94b4000},{0xb94b6000},{0xb94b8000},{0xb94ba000},{0xb94bc000},{0xb94be000}, -{0xb94c0000},{0xb94c2000},{0xb94c4000},{0xb94c6000},{0xb94c8000},{0xb94ca000},{0xb94cc000},{0xb94ce000},{0xb94d0000},{0xb94d2000},{0xb94d4000},{0xb94d6000},{0xb94d8000},{0xb94da000},{0xb94dc000},{0xb94de000},{0xb94e0000},{0xb94e2000},{0xb94e4000},{0xb94e6000},{0xb94e8000},{0xb94ea000},{0xb94ec000},{0xb94ee000},{0xb94f0000},{0xb94f2000},{0xb94f4000},{0xb94f6000},{0xb94f8000},{0xb94fa000},{0xb94fc000},{0xb94fe000}, -{0xb9500000},{0xb9502000},{0xb9504000},{0xb9506000},{0xb9508000},{0xb950a000},{0xb950c000},{0xb950e000},{0xb9510000},{0xb9512000},{0xb9514000},{0xb9516000},{0xb9518000},{0xb951a000},{0xb951c000},{0xb951e000},{0xb9520000},{0xb9522000},{0xb9524000},{0xb9526000},{0xb9528000},{0xb952a000},{0xb952c000},{0xb952e000},{0xb9530000},{0xb9532000},{0xb9534000},{0xb9536000},{0xb9538000},{0xb953a000},{0xb953c000},{0xb953e000}, -{0xb9540000},{0xb9542000},{0xb9544000},{0xb9546000},{0xb9548000},{0xb954a000},{0xb954c000},{0xb954e000},{0xb9550000},{0xb9552000},{0xb9554000},{0xb9556000},{0xb9558000},{0xb955a000},{0xb955c000},{0xb955e000},{0xb9560000},{0xb9562000},{0xb9564000},{0xb9566000},{0xb9568000},{0xb956a000},{0xb956c000},{0xb956e000},{0xb9570000},{0xb9572000},{0xb9574000},{0xb9576000},{0xb9578000},{0xb957a000},{0xb957c000},{0xb957e000}, -{0xb9580000},{0xb9582000},{0xb9584000},{0xb9586000},{0xb9588000},{0xb958a000},{0xb958c000},{0xb958e000},{0xb9590000},{0xb9592000},{0xb9594000},{0xb9596000},{0xb9598000},{0xb959a000},{0xb959c000},{0xb959e000},{0xb95a0000},{0xb95a2000},{0xb95a4000},{0xb95a6000},{0xb95a8000},{0xb95aa000},{0xb95ac000},{0xb95ae000},{0xb95b0000},{0xb95b2000},{0xb95b4000},{0xb95b6000},{0xb95b8000},{0xb95ba000},{0xb95bc000},{0xb95be000}, -{0xb95c0000},{0xb95c2000},{0xb95c4000},{0xb95c6000},{0xb95c8000},{0xb95ca000},{0xb95cc000},{0xb95ce000},{0xb95d0000},{0xb95d2000},{0xb95d4000},{0xb95d6000},{0xb95d8000},{0xb95da000},{0xb95dc000},{0xb95de000},{0xb95e0000},{0xb95e2000},{0xb95e4000},{0xb95e6000},{0xb95e8000},{0xb95ea000},{0xb95ec000},{0xb95ee000},{0xb95f0000},{0xb95f2000},{0xb95f4000},{0xb95f6000},{0xb95f8000},{0xb95fa000},{0xb95fc000},{0xb95fe000}, -{0xb9600000},{0xb9602000},{0xb9604000},{0xb9606000},{0xb9608000},{0xb960a000},{0xb960c000},{0xb960e000},{0xb9610000},{0xb9612000},{0xb9614000},{0xb9616000},{0xb9618000},{0xb961a000},{0xb961c000},{0xb961e000},{0xb9620000},{0xb9622000},{0xb9624000},{0xb9626000},{0xb9628000},{0xb962a000},{0xb962c000},{0xb962e000},{0xb9630000},{0xb9632000},{0xb9634000},{0xb9636000},{0xb9638000},{0xb963a000},{0xb963c000},{0xb963e000}, -{0xb9640000},{0xb9642000},{0xb9644000},{0xb9646000},{0xb9648000},{0xb964a000},{0xb964c000},{0xb964e000},{0xb9650000},{0xb9652000},{0xb9654000},{0xb9656000},{0xb9658000},{0xb965a000},{0xb965c000},{0xb965e000},{0xb9660000},{0xb9662000},{0xb9664000},{0xb9666000},{0xb9668000},{0xb966a000},{0xb966c000},{0xb966e000},{0xb9670000},{0xb9672000},{0xb9674000},{0xb9676000},{0xb9678000},{0xb967a000},{0xb967c000},{0xb967e000}, -{0xb9680000},{0xb9682000},{0xb9684000},{0xb9686000},{0xb9688000},{0xb968a000},{0xb968c000},{0xb968e000},{0xb9690000},{0xb9692000},{0xb9694000},{0xb9696000},{0xb9698000},{0xb969a000},{0xb969c000},{0xb969e000},{0xb96a0000},{0xb96a2000},{0xb96a4000},{0xb96a6000},{0xb96a8000},{0xb96aa000},{0xb96ac000},{0xb96ae000},{0xb96b0000},{0xb96b2000},{0xb96b4000},{0xb96b6000},{0xb96b8000},{0xb96ba000},{0xb96bc000},{0xb96be000}, -{0xb96c0000},{0xb96c2000},{0xb96c4000},{0xb96c6000},{0xb96c8000},{0xb96ca000},{0xb96cc000},{0xb96ce000},{0xb96d0000},{0xb96d2000},{0xb96d4000},{0xb96d6000},{0xb96d8000},{0xb96da000},{0xb96dc000},{0xb96de000},{0xb96e0000},{0xb96e2000},{0xb96e4000},{0xb96e6000},{0xb96e8000},{0xb96ea000},{0xb96ec000},{0xb96ee000},{0xb96f0000},{0xb96f2000},{0xb96f4000},{0xb96f6000},{0xb96f8000},{0xb96fa000},{0xb96fc000},{0xb96fe000}, -{0xb9700000},{0xb9702000},{0xb9704000},{0xb9706000},{0xb9708000},{0xb970a000},{0xb970c000},{0xb970e000},{0xb9710000},{0xb9712000},{0xb9714000},{0xb9716000},{0xb9718000},{0xb971a000},{0xb971c000},{0xb971e000},{0xb9720000},{0xb9722000},{0xb9724000},{0xb9726000},{0xb9728000},{0xb972a000},{0xb972c000},{0xb972e000},{0xb9730000},{0xb9732000},{0xb9734000},{0xb9736000},{0xb9738000},{0xb973a000},{0xb973c000},{0xb973e000}, -{0xb9740000},{0xb9742000},{0xb9744000},{0xb9746000},{0xb9748000},{0xb974a000},{0xb974c000},{0xb974e000},{0xb9750000},{0xb9752000},{0xb9754000},{0xb9756000},{0xb9758000},{0xb975a000},{0xb975c000},{0xb975e000},{0xb9760000},{0xb9762000},{0xb9764000},{0xb9766000},{0xb9768000},{0xb976a000},{0xb976c000},{0xb976e000},{0xb9770000},{0xb9772000},{0xb9774000},{0xb9776000},{0xb9778000},{0xb977a000},{0xb977c000},{0xb977e000}, -{0xb9780000},{0xb9782000},{0xb9784000},{0xb9786000},{0xb9788000},{0xb978a000},{0xb978c000},{0xb978e000},{0xb9790000},{0xb9792000},{0xb9794000},{0xb9796000},{0xb9798000},{0xb979a000},{0xb979c000},{0xb979e000},{0xb97a0000},{0xb97a2000},{0xb97a4000},{0xb97a6000},{0xb97a8000},{0xb97aa000},{0xb97ac000},{0xb97ae000},{0xb97b0000},{0xb97b2000},{0xb97b4000},{0xb97b6000},{0xb97b8000},{0xb97ba000},{0xb97bc000},{0xb97be000}, -{0xb97c0000},{0xb97c2000},{0xb97c4000},{0xb97c6000},{0xb97c8000},{0xb97ca000},{0xb97cc000},{0xb97ce000},{0xb97d0000},{0xb97d2000},{0xb97d4000},{0xb97d6000},{0xb97d8000},{0xb97da000},{0xb97dc000},{0xb97de000},{0xb97e0000},{0xb97e2000},{0xb97e4000},{0xb97e6000},{0xb97e8000},{0xb97ea000},{0xb97ec000},{0xb97ee000},{0xb97f0000},{0xb97f2000},{0xb97f4000},{0xb97f6000},{0xb97f8000},{0xb97fa000},{0xb97fc000},{0xb97fe000}, -{0xb9800000},{0xb9802000},{0xb9804000},{0xb9806000},{0xb9808000},{0xb980a000},{0xb980c000},{0xb980e000},{0xb9810000},{0xb9812000},{0xb9814000},{0xb9816000},{0xb9818000},{0xb981a000},{0xb981c000},{0xb981e000},{0xb9820000},{0xb9822000},{0xb9824000},{0xb9826000},{0xb9828000},{0xb982a000},{0xb982c000},{0xb982e000},{0xb9830000},{0xb9832000},{0xb9834000},{0xb9836000},{0xb9838000},{0xb983a000},{0xb983c000},{0xb983e000}, -{0xb9840000},{0xb9842000},{0xb9844000},{0xb9846000},{0xb9848000},{0xb984a000},{0xb984c000},{0xb984e000},{0xb9850000},{0xb9852000},{0xb9854000},{0xb9856000},{0xb9858000},{0xb985a000},{0xb985c000},{0xb985e000},{0xb9860000},{0xb9862000},{0xb9864000},{0xb9866000},{0xb9868000},{0xb986a000},{0xb986c000},{0xb986e000},{0xb9870000},{0xb9872000},{0xb9874000},{0xb9876000},{0xb9878000},{0xb987a000},{0xb987c000},{0xb987e000}, -{0xb9880000},{0xb9882000},{0xb9884000},{0xb9886000},{0xb9888000},{0xb988a000},{0xb988c000},{0xb988e000},{0xb9890000},{0xb9892000},{0xb9894000},{0xb9896000},{0xb9898000},{0xb989a000},{0xb989c000},{0xb989e000},{0xb98a0000},{0xb98a2000},{0xb98a4000},{0xb98a6000},{0xb98a8000},{0xb98aa000},{0xb98ac000},{0xb98ae000},{0xb98b0000},{0xb98b2000},{0xb98b4000},{0xb98b6000},{0xb98b8000},{0xb98ba000},{0xb98bc000},{0xb98be000}, -{0xb98c0000},{0xb98c2000},{0xb98c4000},{0xb98c6000},{0xb98c8000},{0xb98ca000},{0xb98cc000},{0xb98ce000},{0xb98d0000},{0xb98d2000},{0xb98d4000},{0xb98d6000},{0xb98d8000},{0xb98da000},{0xb98dc000},{0xb98de000},{0xb98e0000},{0xb98e2000},{0xb98e4000},{0xb98e6000},{0xb98e8000},{0xb98ea000},{0xb98ec000},{0xb98ee000},{0xb98f0000},{0xb98f2000},{0xb98f4000},{0xb98f6000},{0xb98f8000},{0xb98fa000},{0xb98fc000},{0xb98fe000}, -{0xb9900000},{0xb9902000},{0xb9904000},{0xb9906000},{0xb9908000},{0xb990a000},{0xb990c000},{0xb990e000},{0xb9910000},{0xb9912000},{0xb9914000},{0xb9916000},{0xb9918000},{0xb991a000},{0xb991c000},{0xb991e000},{0xb9920000},{0xb9922000},{0xb9924000},{0xb9926000},{0xb9928000},{0xb992a000},{0xb992c000},{0xb992e000},{0xb9930000},{0xb9932000},{0xb9934000},{0xb9936000},{0xb9938000},{0xb993a000},{0xb993c000},{0xb993e000}, -{0xb9940000},{0xb9942000},{0xb9944000},{0xb9946000},{0xb9948000},{0xb994a000},{0xb994c000},{0xb994e000},{0xb9950000},{0xb9952000},{0xb9954000},{0xb9956000},{0xb9958000},{0xb995a000},{0xb995c000},{0xb995e000},{0xb9960000},{0xb9962000},{0xb9964000},{0xb9966000},{0xb9968000},{0xb996a000},{0xb996c000},{0xb996e000},{0xb9970000},{0xb9972000},{0xb9974000},{0xb9976000},{0xb9978000},{0xb997a000},{0xb997c000},{0xb997e000}, -{0xb9980000},{0xb9982000},{0xb9984000},{0xb9986000},{0xb9988000},{0xb998a000},{0xb998c000},{0xb998e000},{0xb9990000},{0xb9992000},{0xb9994000},{0xb9996000},{0xb9998000},{0xb999a000},{0xb999c000},{0xb999e000},{0xb99a0000},{0xb99a2000},{0xb99a4000},{0xb99a6000},{0xb99a8000},{0xb99aa000},{0xb99ac000},{0xb99ae000},{0xb99b0000},{0xb99b2000},{0xb99b4000},{0xb99b6000},{0xb99b8000},{0xb99ba000},{0xb99bc000},{0xb99be000}, -{0xb99c0000},{0xb99c2000},{0xb99c4000},{0xb99c6000},{0xb99c8000},{0xb99ca000},{0xb99cc000},{0xb99ce000},{0xb99d0000},{0xb99d2000},{0xb99d4000},{0xb99d6000},{0xb99d8000},{0xb99da000},{0xb99dc000},{0xb99de000},{0xb99e0000},{0xb99e2000},{0xb99e4000},{0xb99e6000},{0xb99e8000},{0xb99ea000},{0xb99ec000},{0xb99ee000},{0xb99f0000},{0xb99f2000},{0xb99f4000},{0xb99f6000},{0xb99f8000},{0xb99fa000},{0xb99fc000},{0xb99fe000}, -{0xb9a00000},{0xb9a02000},{0xb9a04000},{0xb9a06000},{0xb9a08000},{0xb9a0a000},{0xb9a0c000},{0xb9a0e000},{0xb9a10000},{0xb9a12000},{0xb9a14000},{0xb9a16000},{0xb9a18000},{0xb9a1a000},{0xb9a1c000},{0xb9a1e000},{0xb9a20000},{0xb9a22000},{0xb9a24000},{0xb9a26000},{0xb9a28000},{0xb9a2a000},{0xb9a2c000},{0xb9a2e000},{0xb9a30000},{0xb9a32000},{0xb9a34000},{0xb9a36000},{0xb9a38000},{0xb9a3a000},{0xb9a3c000},{0xb9a3e000}, -{0xb9a40000},{0xb9a42000},{0xb9a44000},{0xb9a46000},{0xb9a48000},{0xb9a4a000},{0xb9a4c000},{0xb9a4e000},{0xb9a50000},{0xb9a52000},{0xb9a54000},{0xb9a56000},{0xb9a58000},{0xb9a5a000},{0xb9a5c000},{0xb9a5e000},{0xb9a60000},{0xb9a62000},{0xb9a64000},{0xb9a66000},{0xb9a68000},{0xb9a6a000},{0xb9a6c000},{0xb9a6e000},{0xb9a70000},{0xb9a72000},{0xb9a74000},{0xb9a76000},{0xb9a78000},{0xb9a7a000},{0xb9a7c000},{0xb9a7e000}, -{0xb9a80000},{0xb9a82000},{0xb9a84000},{0xb9a86000},{0xb9a88000},{0xb9a8a000},{0xb9a8c000},{0xb9a8e000},{0xb9a90000},{0xb9a92000},{0xb9a94000},{0xb9a96000},{0xb9a98000},{0xb9a9a000},{0xb9a9c000},{0xb9a9e000},{0xb9aa0000},{0xb9aa2000},{0xb9aa4000},{0xb9aa6000},{0xb9aa8000},{0xb9aaa000},{0xb9aac000},{0xb9aae000},{0xb9ab0000},{0xb9ab2000},{0xb9ab4000},{0xb9ab6000},{0xb9ab8000},{0xb9aba000},{0xb9abc000},{0xb9abe000}, -{0xb9ac0000},{0xb9ac2000},{0xb9ac4000},{0xb9ac6000},{0xb9ac8000},{0xb9aca000},{0xb9acc000},{0xb9ace000},{0xb9ad0000},{0xb9ad2000},{0xb9ad4000},{0xb9ad6000},{0xb9ad8000},{0xb9ada000},{0xb9adc000},{0xb9ade000},{0xb9ae0000},{0xb9ae2000},{0xb9ae4000},{0xb9ae6000},{0xb9ae8000},{0xb9aea000},{0xb9aec000},{0xb9aee000},{0xb9af0000},{0xb9af2000},{0xb9af4000},{0xb9af6000},{0xb9af8000},{0xb9afa000},{0xb9afc000},{0xb9afe000}, -{0xb9b00000},{0xb9b02000},{0xb9b04000},{0xb9b06000},{0xb9b08000},{0xb9b0a000},{0xb9b0c000},{0xb9b0e000},{0xb9b10000},{0xb9b12000},{0xb9b14000},{0xb9b16000},{0xb9b18000},{0xb9b1a000},{0xb9b1c000},{0xb9b1e000},{0xb9b20000},{0xb9b22000},{0xb9b24000},{0xb9b26000},{0xb9b28000},{0xb9b2a000},{0xb9b2c000},{0xb9b2e000},{0xb9b30000},{0xb9b32000},{0xb9b34000},{0xb9b36000},{0xb9b38000},{0xb9b3a000},{0xb9b3c000},{0xb9b3e000}, -{0xb9b40000},{0xb9b42000},{0xb9b44000},{0xb9b46000},{0xb9b48000},{0xb9b4a000},{0xb9b4c000},{0xb9b4e000},{0xb9b50000},{0xb9b52000},{0xb9b54000},{0xb9b56000},{0xb9b58000},{0xb9b5a000},{0xb9b5c000},{0xb9b5e000},{0xb9b60000},{0xb9b62000},{0xb9b64000},{0xb9b66000},{0xb9b68000},{0xb9b6a000},{0xb9b6c000},{0xb9b6e000},{0xb9b70000},{0xb9b72000},{0xb9b74000},{0xb9b76000},{0xb9b78000},{0xb9b7a000},{0xb9b7c000},{0xb9b7e000}, -{0xb9b80000},{0xb9b82000},{0xb9b84000},{0xb9b86000},{0xb9b88000},{0xb9b8a000},{0xb9b8c000},{0xb9b8e000},{0xb9b90000},{0xb9b92000},{0xb9b94000},{0xb9b96000},{0xb9b98000},{0xb9b9a000},{0xb9b9c000},{0xb9b9e000},{0xb9ba0000},{0xb9ba2000},{0xb9ba4000},{0xb9ba6000},{0xb9ba8000},{0xb9baa000},{0xb9bac000},{0xb9bae000},{0xb9bb0000},{0xb9bb2000},{0xb9bb4000},{0xb9bb6000},{0xb9bb8000},{0xb9bba000},{0xb9bbc000},{0xb9bbe000}, -{0xb9bc0000},{0xb9bc2000},{0xb9bc4000},{0xb9bc6000},{0xb9bc8000},{0xb9bca000},{0xb9bcc000},{0xb9bce000},{0xb9bd0000},{0xb9bd2000},{0xb9bd4000},{0xb9bd6000},{0xb9bd8000},{0xb9bda000},{0xb9bdc000},{0xb9bde000},{0xb9be0000},{0xb9be2000},{0xb9be4000},{0xb9be6000},{0xb9be8000},{0xb9bea000},{0xb9bec000},{0xb9bee000},{0xb9bf0000},{0xb9bf2000},{0xb9bf4000},{0xb9bf6000},{0xb9bf8000},{0xb9bfa000},{0xb9bfc000},{0xb9bfe000}, -{0xb9c00000},{0xb9c02000},{0xb9c04000},{0xb9c06000},{0xb9c08000},{0xb9c0a000},{0xb9c0c000},{0xb9c0e000},{0xb9c10000},{0xb9c12000},{0xb9c14000},{0xb9c16000},{0xb9c18000},{0xb9c1a000},{0xb9c1c000},{0xb9c1e000},{0xb9c20000},{0xb9c22000},{0xb9c24000},{0xb9c26000},{0xb9c28000},{0xb9c2a000},{0xb9c2c000},{0xb9c2e000},{0xb9c30000},{0xb9c32000},{0xb9c34000},{0xb9c36000},{0xb9c38000},{0xb9c3a000},{0xb9c3c000},{0xb9c3e000}, -{0xb9c40000},{0xb9c42000},{0xb9c44000},{0xb9c46000},{0xb9c48000},{0xb9c4a000},{0xb9c4c000},{0xb9c4e000},{0xb9c50000},{0xb9c52000},{0xb9c54000},{0xb9c56000},{0xb9c58000},{0xb9c5a000},{0xb9c5c000},{0xb9c5e000},{0xb9c60000},{0xb9c62000},{0xb9c64000},{0xb9c66000},{0xb9c68000},{0xb9c6a000},{0xb9c6c000},{0xb9c6e000},{0xb9c70000},{0xb9c72000},{0xb9c74000},{0xb9c76000},{0xb9c78000},{0xb9c7a000},{0xb9c7c000},{0xb9c7e000}, -{0xb9c80000},{0xb9c82000},{0xb9c84000},{0xb9c86000},{0xb9c88000},{0xb9c8a000},{0xb9c8c000},{0xb9c8e000},{0xb9c90000},{0xb9c92000},{0xb9c94000},{0xb9c96000},{0xb9c98000},{0xb9c9a000},{0xb9c9c000},{0xb9c9e000},{0xb9ca0000},{0xb9ca2000},{0xb9ca4000},{0xb9ca6000},{0xb9ca8000},{0xb9caa000},{0xb9cac000},{0xb9cae000},{0xb9cb0000},{0xb9cb2000},{0xb9cb4000},{0xb9cb6000},{0xb9cb8000},{0xb9cba000},{0xb9cbc000},{0xb9cbe000}, -{0xb9cc0000},{0xb9cc2000},{0xb9cc4000},{0xb9cc6000},{0xb9cc8000},{0xb9cca000},{0xb9ccc000},{0xb9cce000},{0xb9cd0000},{0xb9cd2000},{0xb9cd4000},{0xb9cd6000},{0xb9cd8000},{0xb9cda000},{0xb9cdc000},{0xb9cde000},{0xb9ce0000},{0xb9ce2000},{0xb9ce4000},{0xb9ce6000},{0xb9ce8000},{0xb9cea000},{0xb9cec000},{0xb9cee000},{0xb9cf0000},{0xb9cf2000},{0xb9cf4000},{0xb9cf6000},{0xb9cf8000},{0xb9cfa000},{0xb9cfc000},{0xb9cfe000}, -{0xb9d00000},{0xb9d02000},{0xb9d04000},{0xb9d06000},{0xb9d08000},{0xb9d0a000},{0xb9d0c000},{0xb9d0e000},{0xb9d10000},{0xb9d12000},{0xb9d14000},{0xb9d16000},{0xb9d18000},{0xb9d1a000},{0xb9d1c000},{0xb9d1e000},{0xb9d20000},{0xb9d22000},{0xb9d24000},{0xb9d26000},{0xb9d28000},{0xb9d2a000},{0xb9d2c000},{0xb9d2e000},{0xb9d30000},{0xb9d32000},{0xb9d34000},{0xb9d36000},{0xb9d38000},{0xb9d3a000},{0xb9d3c000},{0xb9d3e000}, -{0xb9d40000},{0xb9d42000},{0xb9d44000},{0xb9d46000},{0xb9d48000},{0xb9d4a000},{0xb9d4c000},{0xb9d4e000},{0xb9d50000},{0xb9d52000},{0xb9d54000},{0xb9d56000},{0xb9d58000},{0xb9d5a000},{0xb9d5c000},{0xb9d5e000},{0xb9d60000},{0xb9d62000},{0xb9d64000},{0xb9d66000},{0xb9d68000},{0xb9d6a000},{0xb9d6c000},{0xb9d6e000},{0xb9d70000},{0xb9d72000},{0xb9d74000},{0xb9d76000},{0xb9d78000},{0xb9d7a000},{0xb9d7c000},{0xb9d7e000}, -{0xb9d80000},{0xb9d82000},{0xb9d84000},{0xb9d86000},{0xb9d88000},{0xb9d8a000},{0xb9d8c000},{0xb9d8e000},{0xb9d90000},{0xb9d92000},{0xb9d94000},{0xb9d96000},{0xb9d98000},{0xb9d9a000},{0xb9d9c000},{0xb9d9e000},{0xb9da0000},{0xb9da2000},{0xb9da4000},{0xb9da6000},{0xb9da8000},{0xb9daa000},{0xb9dac000},{0xb9dae000},{0xb9db0000},{0xb9db2000},{0xb9db4000},{0xb9db6000},{0xb9db8000},{0xb9dba000},{0xb9dbc000},{0xb9dbe000}, -{0xb9dc0000},{0xb9dc2000},{0xb9dc4000},{0xb9dc6000},{0xb9dc8000},{0xb9dca000},{0xb9dcc000},{0xb9dce000},{0xb9dd0000},{0xb9dd2000},{0xb9dd4000},{0xb9dd6000},{0xb9dd8000},{0xb9dda000},{0xb9ddc000},{0xb9dde000},{0xb9de0000},{0xb9de2000},{0xb9de4000},{0xb9de6000},{0xb9de8000},{0xb9dea000},{0xb9dec000},{0xb9dee000},{0xb9df0000},{0xb9df2000},{0xb9df4000},{0xb9df6000},{0xb9df8000},{0xb9dfa000},{0xb9dfc000},{0xb9dfe000}, -{0xb9e00000},{0xb9e02000},{0xb9e04000},{0xb9e06000},{0xb9e08000},{0xb9e0a000},{0xb9e0c000},{0xb9e0e000},{0xb9e10000},{0xb9e12000},{0xb9e14000},{0xb9e16000},{0xb9e18000},{0xb9e1a000},{0xb9e1c000},{0xb9e1e000},{0xb9e20000},{0xb9e22000},{0xb9e24000},{0xb9e26000},{0xb9e28000},{0xb9e2a000},{0xb9e2c000},{0xb9e2e000},{0xb9e30000},{0xb9e32000},{0xb9e34000},{0xb9e36000},{0xb9e38000},{0xb9e3a000},{0xb9e3c000},{0xb9e3e000}, -{0xb9e40000},{0xb9e42000},{0xb9e44000},{0xb9e46000},{0xb9e48000},{0xb9e4a000},{0xb9e4c000},{0xb9e4e000},{0xb9e50000},{0xb9e52000},{0xb9e54000},{0xb9e56000},{0xb9e58000},{0xb9e5a000},{0xb9e5c000},{0xb9e5e000},{0xb9e60000},{0xb9e62000},{0xb9e64000},{0xb9e66000},{0xb9e68000},{0xb9e6a000},{0xb9e6c000},{0xb9e6e000},{0xb9e70000},{0xb9e72000},{0xb9e74000},{0xb9e76000},{0xb9e78000},{0xb9e7a000},{0xb9e7c000},{0xb9e7e000}, -{0xb9e80000},{0xb9e82000},{0xb9e84000},{0xb9e86000},{0xb9e88000},{0xb9e8a000},{0xb9e8c000},{0xb9e8e000},{0xb9e90000},{0xb9e92000},{0xb9e94000},{0xb9e96000},{0xb9e98000},{0xb9e9a000},{0xb9e9c000},{0xb9e9e000},{0xb9ea0000},{0xb9ea2000},{0xb9ea4000},{0xb9ea6000},{0xb9ea8000},{0xb9eaa000},{0xb9eac000},{0xb9eae000},{0xb9eb0000},{0xb9eb2000},{0xb9eb4000},{0xb9eb6000},{0xb9eb8000},{0xb9eba000},{0xb9ebc000},{0xb9ebe000}, -{0xb9ec0000},{0xb9ec2000},{0xb9ec4000},{0xb9ec6000},{0xb9ec8000},{0xb9eca000},{0xb9ecc000},{0xb9ece000},{0xb9ed0000},{0xb9ed2000},{0xb9ed4000},{0xb9ed6000},{0xb9ed8000},{0xb9eda000},{0xb9edc000},{0xb9ede000},{0xb9ee0000},{0xb9ee2000},{0xb9ee4000},{0xb9ee6000},{0xb9ee8000},{0xb9eea000},{0xb9eec000},{0xb9eee000},{0xb9ef0000},{0xb9ef2000},{0xb9ef4000},{0xb9ef6000},{0xb9ef8000},{0xb9efa000},{0xb9efc000},{0xb9efe000}, -{0xb9f00000},{0xb9f02000},{0xb9f04000},{0xb9f06000},{0xb9f08000},{0xb9f0a000},{0xb9f0c000},{0xb9f0e000},{0xb9f10000},{0xb9f12000},{0xb9f14000},{0xb9f16000},{0xb9f18000},{0xb9f1a000},{0xb9f1c000},{0xb9f1e000},{0xb9f20000},{0xb9f22000},{0xb9f24000},{0xb9f26000},{0xb9f28000},{0xb9f2a000},{0xb9f2c000},{0xb9f2e000},{0xb9f30000},{0xb9f32000},{0xb9f34000},{0xb9f36000},{0xb9f38000},{0xb9f3a000},{0xb9f3c000},{0xb9f3e000}, -{0xb9f40000},{0xb9f42000},{0xb9f44000},{0xb9f46000},{0xb9f48000},{0xb9f4a000},{0xb9f4c000},{0xb9f4e000},{0xb9f50000},{0xb9f52000},{0xb9f54000},{0xb9f56000},{0xb9f58000},{0xb9f5a000},{0xb9f5c000},{0xb9f5e000},{0xb9f60000},{0xb9f62000},{0xb9f64000},{0xb9f66000},{0xb9f68000},{0xb9f6a000},{0xb9f6c000},{0xb9f6e000},{0xb9f70000},{0xb9f72000},{0xb9f74000},{0xb9f76000},{0xb9f78000},{0xb9f7a000},{0xb9f7c000},{0xb9f7e000}, -{0xb9f80000},{0xb9f82000},{0xb9f84000},{0xb9f86000},{0xb9f88000},{0xb9f8a000},{0xb9f8c000},{0xb9f8e000},{0xb9f90000},{0xb9f92000},{0xb9f94000},{0xb9f96000},{0xb9f98000},{0xb9f9a000},{0xb9f9c000},{0xb9f9e000},{0xb9fa0000},{0xb9fa2000},{0xb9fa4000},{0xb9fa6000},{0xb9fa8000},{0xb9faa000},{0xb9fac000},{0xb9fae000},{0xb9fb0000},{0xb9fb2000},{0xb9fb4000},{0xb9fb6000},{0xb9fb8000},{0xb9fba000},{0xb9fbc000},{0xb9fbe000}, -{0xb9fc0000},{0xb9fc2000},{0xb9fc4000},{0xb9fc6000},{0xb9fc8000},{0xb9fca000},{0xb9fcc000},{0xb9fce000},{0xb9fd0000},{0xb9fd2000},{0xb9fd4000},{0xb9fd6000},{0xb9fd8000},{0xb9fda000},{0xb9fdc000},{0xb9fde000},{0xb9fe0000},{0xb9fe2000},{0xb9fe4000},{0xb9fe6000},{0xb9fe8000},{0xb9fea000},{0xb9fec000},{0xb9fee000},{0xb9ff0000},{0xb9ff2000},{0xb9ff4000},{0xb9ff6000},{0xb9ff8000},{0xb9ffa000},{0xb9ffc000},{0xb9ffe000}, -{0xba000000},{0xba002000},{0xba004000},{0xba006000},{0xba008000},{0xba00a000},{0xba00c000},{0xba00e000},{0xba010000},{0xba012000},{0xba014000},{0xba016000},{0xba018000},{0xba01a000},{0xba01c000},{0xba01e000},{0xba020000},{0xba022000},{0xba024000},{0xba026000},{0xba028000},{0xba02a000},{0xba02c000},{0xba02e000},{0xba030000},{0xba032000},{0xba034000},{0xba036000},{0xba038000},{0xba03a000},{0xba03c000},{0xba03e000}, -{0xba040000},{0xba042000},{0xba044000},{0xba046000},{0xba048000},{0xba04a000},{0xba04c000},{0xba04e000},{0xba050000},{0xba052000},{0xba054000},{0xba056000},{0xba058000},{0xba05a000},{0xba05c000},{0xba05e000},{0xba060000},{0xba062000},{0xba064000},{0xba066000},{0xba068000},{0xba06a000},{0xba06c000},{0xba06e000},{0xba070000},{0xba072000},{0xba074000},{0xba076000},{0xba078000},{0xba07a000},{0xba07c000},{0xba07e000}, -{0xba080000},{0xba082000},{0xba084000},{0xba086000},{0xba088000},{0xba08a000},{0xba08c000},{0xba08e000},{0xba090000},{0xba092000},{0xba094000},{0xba096000},{0xba098000},{0xba09a000},{0xba09c000},{0xba09e000},{0xba0a0000},{0xba0a2000},{0xba0a4000},{0xba0a6000},{0xba0a8000},{0xba0aa000},{0xba0ac000},{0xba0ae000},{0xba0b0000},{0xba0b2000},{0xba0b4000},{0xba0b6000},{0xba0b8000},{0xba0ba000},{0xba0bc000},{0xba0be000}, -{0xba0c0000},{0xba0c2000},{0xba0c4000},{0xba0c6000},{0xba0c8000},{0xba0ca000},{0xba0cc000},{0xba0ce000},{0xba0d0000},{0xba0d2000},{0xba0d4000},{0xba0d6000},{0xba0d8000},{0xba0da000},{0xba0dc000},{0xba0de000},{0xba0e0000},{0xba0e2000},{0xba0e4000},{0xba0e6000},{0xba0e8000},{0xba0ea000},{0xba0ec000},{0xba0ee000},{0xba0f0000},{0xba0f2000},{0xba0f4000},{0xba0f6000},{0xba0f8000},{0xba0fa000},{0xba0fc000},{0xba0fe000}, -{0xba100000},{0xba102000},{0xba104000},{0xba106000},{0xba108000},{0xba10a000},{0xba10c000},{0xba10e000},{0xba110000},{0xba112000},{0xba114000},{0xba116000},{0xba118000},{0xba11a000},{0xba11c000},{0xba11e000},{0xba120000},{0xba122000},{0xba124000},{0xba126000},{0xba128000},{0xba12a000},{0xba12c000},{0xba12e000},{0xba130000},{0xba132000},{0xba134000},{0xba136000},{0xba138000},{0xba13a000},{0xba13c000},{0xba13e000}, -{0xba140000},{0xba142000},{0xba144000},{0xba146000},{0xba148000},{0xba14a000},{0xba14c000},{0xba14e000},{0xba150000},{0xba152000},{0xba154000},{0xba156000},{0xba158000},{0xba15a000},{0xba15c000},{0xba15e000},{0xba160000},{0xba162000},{0xba164000},{0xba166000},{0xba168000},{0xba16a000},{0xba16c000},{0xba16e000},{0xba170000},{0xba172000},{0xba174000},{0xba176000},{0xba178000},{0xba17a000},{0xba17c000},{0xba17e000}, -{0xba180000},{0xba182000},{0xba184000},{0xba186000},{0xba188000},{0xba18a000},{0xba18c000},{0xba18e000},{0xba190000},{0xba192000},{0xba194000},{0xba196000},{0xba198000},{0xba19a000},{0xba19c000},{0xba19e000},{0xba1a0000},{0xba1a2000},{0xba1a4000},{0xba1a6000},{0xba1a8000},{0xba1aa000},{0xba1ac000},{0xba1ae000},{0xba1b0000},{0xba1b2000},{0xba1b4000},{0xba1b6000},{0xba1b8000},{0xba1ba000},{0xba1bc000},{0xba1be000}, -{0xba1c0000},{0xba1c2000},{0xba1c4000},{0xba1c6000},{0xba1c8000},{0xba1ca000},{0xba1cc000},{0xba1ce000},{0xba1d0000},{0xba1d2000},{0xba1d4000},{0xba1d6000},{0xba1d8000},{0xba1da000},{0xba1dc000},{0xba1de000},{0xba1e0000},{0xba1e2000},{0xba1e4000},{0xba1e6000},{0xba1e8000},{0xba1ea000},{0xba1ec000},{0xba1ee000},{0xba1f0000},{0xba1f2000},{0xba1f4000},{0xba1f6000},{0xba1f8000},{0xba1fa000},{0xba1fc000},{0xba1fe000}, -{0xba200000},{0xba202000},{0xba204000},{0xba206000},{0xba208000},{0xba20a000},{0xba20c000},{0xba20e000},{0xba210000},{0xba212000},{0xba214000},{0xba216000},{0xba218000},{0xba21a000},{0xba21c000},{0xba21e000},{0xba220000},{0xba222000},{0xba224000},{0xba226000},{0xba228000},{0xba22a000},{0xba22c000},{0xba22e000},{0xba230000},{0xba232000},{0xba234000},{0xba236000},{0xba238000},{0xba23a000},{0xba23c000},{0xba23e000}, -{0xba240000},{0xba242000},{0xba244000},{0xba246000},{0xba248000},{0xba24a000},{0xba24c000},{0xba24e000},{0xba250000},{0xba252000},{0xba254000},{0xba256000},{0xba258000},{0xba25a000},{0xba25c000},{0xba25e000},{0xba260000},{0xba262000},{0xba264000},{0xba266000},{0xba268000},{0xba26a000},{0xba26c000},{0xba26e000},{0xba270000},{0xba272000},{0xba274000},{0xba276000},{0xba278000},{0xba27a000},{0xba27c000},{0xba27e000}, -{0xba280000},{0xba282000},{0xba284000},{0xba286000},{0xba288000},{0xba28a000},{0xba28c000},{0xba28e000},{0xba290000},{0xba292000},{0xba294000},{0xba296000},{0xba298000},{0xba29a000},{0xba29c000},{0xba29e000},{0xba2a0000},{0xba2a2000},{0xba2a4000},{0xba2a6000},{0xba2a8000},{0xba2aa000},{0xba2ac000},{0xba2ae000},{0xba2b0000},{0xba2b2000},{0xba2b4000},{0xba2b6000},{0xba2b8000},{0xba2ba000},{0xba2bc000},{0xba2be000}, -{0xba2c0000},{0xba2c2000},{0xba2c4000},{0xba2c6000},{0xba2c8000},{0xba2ca000},{0xba2cc000},{0xba2ce000},{0xba2d0000},{0xba2d2000},{0xba2d4000},{0xba2d6000},{0xba2d8000},{0xba2da000},{0xba2dc000},{0xba2de000},{0xba2e0000},{0xba2e2000},{0xba2e4000},{0xba2e6000},{0xba2e8000},{0xba2ea000},{0xba2ec000},{0xba2ee000},{0xba2f0000},{0xba2f2000},{0xba2f4000},{0xba2f6000},{0xba2f8000},{0xba2fa000},{0xba2fc000},{0xba2fe000}, -{0xba300000},{0xba302000},{0xba304000},{0xba306000},{0xba308000},{0xba30a000},{0xba30c000},{0xba30e000},{0xba310000},{0xba312000},{0xba314000},{0xba316000},{0xba318000},{0xba31a000},{0xba31c000},{0xba31e000},{0xba320000},{0xba322000},{0xba324000},{0xba326000},{0xba328000},{0xba32a000},{0xba32c000},{0xba32e000},{0xba330000},{0xba332000},{0xba334000},{0xba336000},{0xba338000},{0xba33a000},{0xba33c000},{0xba33e000}, -{0xba340000},{0xba342000},{0xba344000},{0xba346000},{0xba348000},{0xba34a000},{0xba34c000},{0xba34e000},{0xba350000},{0xba352000},{0xba354000},{0xba356000},{0xba358000},{0xba35a000},{0xba35c000},{0xba35e000},{0xba360000},{0xba362000},{0xba364000},{0xba366000},{0xba368000},{0xba36a000},{0xba36c000},{0xba36e000},{0xba370000},{0xba372000},{0xba374000},{0xba376000},{0xba378000},{0xba37a000},{0xba37c000},{0xba37e000}, -{0xba380000},{0xba382000},{0xba384000},{0xba386000},{0xba388000},{0xba38a000},{0xba38c000},{0xba38e000},{0xba390000},{0xba392000},{0xba394000},{0xba396000},{0xba398000},{0xba39a000},{0xba39c000},{0xba39e000},{0xba3a0000},{0xba3a2000},{0xba3a4000},{0xba3a6000},{0xba3a8000},{0xba3aa000},{0xba3ac000},{0xba3ae000},{0xba3b0000},{0xba3b2000},{0xba3b4000},{0xba3b6000},{0xba3b8000},{0xba3ba000},{0xba3bc000},{0xba3be000}, -{0xba3c0000},{0xba3c2000},{0xba3c4000},{0xba3c6000},{0xba3c8000},{0xba3ca000},{0xba3cc000},{0xba3ce000},{0xba3d0000},{0xba3d2000},{0xba3d4000},{0xba3d6000},{0xba3d8000},{0xba3da000},{0xba3dc000},{0xba3de000},{0xba3e0000},{0xba3e2000},{0xba3e4000},{0xba3e6000},{0xba3e8000},{0xba3ea000},{0xba3ec000},{0xba3ee000},{0xba3f0000},{0xba3f2000},{0xba3f4000},{0xba3f6000},{0xba3f8000},{0xba3fa000},{0xba3fc000},{0xba3fe000}, -{0xba400000},{0xba402000},{0xba404000},{0xba406000},{0xba408000},{0xba40a000},{0xba40c000},{0xba40e000},{0xba410000},{0xba412000},{0xba414000},{0xba416000},{0xba418000},{0xba41a000},{0xba41c000},{0xba41e000},{0xba420000},{0xba422000},{0xba424000},{0xba426000},{0xba428000},{0xba42a000},{0xba42c000},{0xba42e000},{0xba430000},{0xba432000},{0xba434000},{0xba436000},{0xba438000},{0xba43a000},{0xba43c000},{0xba43e000}, -{0xba440000},{0xba442000},{0xba444000},{0xba446000},{0xba448000},{0xba44a000},{0xba44c000},{0xba44e000},{0xba450000},{0xba452000},{0xba454000},{0xba456000},{0xba458000},{0xba45a000},{0xba45c000},{0xba45e000},{0xba460000},{0xba462000},{0xba464000},{0xba466000},{0xba468000},{0xba46a000},{0xba46c000},{0xba46e000},{0xba470000},{0xba472000},{0xba474000},{0xba476000},{0xba478000},{0xba47a000},{0xba47c000},{0xba47e000}, -{0xba480000},{0xba482000},{0xba484000},{0xba486000},{0xba488000},{0xba48a000},{0xba48c000},{0xba48e000},{0xba490000},{0xba492000},{0xba494000},{0xba496000},{0xba498000},{0xba49a000},{0xba49c000},{0xba49e000},{0xba4a0000},{0xba4a2000},{0xba4a4000},{0xba4a6000},{0xba4a8000},{0xba4aa000},{0xba4ac000},{0xba4ae000},{0xba4b0000},{0xba4b2000},{0xba4b4000},{0xba4b6000},{0xba4b8000},{0xba4ba000},{0xba4bc000},{0xba4be000}, -{0xba4c0000},{0xba4c2000},{0xba4c4000},{0xba4c6000},{0xba4c8000},{0xba4ca000},{0xba4cc000},{0xba4ce000},{0xba4d0000},{0xba4d2000},{0xba4d4000},{0xba4d6000},{0xba4d8000},{0xba4da000},{0xba4dc000},{0xba4de000},{0xba4e0000},{0xba4e2000},{0xba4e4000},{0xba4e6000},{0xba4e8000},{0xba4ea000},{0xba4ec000},{0xba4ee000},{0xba4f0000},{0xba4f2000},{0xba4f4000},{0xba4f6000},{0xba4f8000},{0xba4fa000},{0xba4fc000},{0xba4fe000}, -{0xba500000},{0xba502000},{0xba504000},{0xba506000},{0xba508000},{0xba50a000},{0xba50c000},{0xba50e000},{0xba510000},{0xba512000},{0xba514000},{0xba516000},{0xba518000},{0xba51a000},{0xba51c000},{0xba51e000},{0xba520000},{0xba522000},{0xba524000},{0xba526000},{0xba528000},{0xba52a000},{0xba52c000},{0xba52e000},{0xba530000},{0xba532000},{0xba534000},{0xba536000},{0xba538000},{0xba53a000},{0xba53c000},{0xba53e000}, -{0xba540000},{0xba542000},{0xba544000},{0xba546000},{0xba548000},{0xba54a000},{0xba54c000},{0xba54e000},{0xba550000},{0xba552000},{0xba554000},{0xba556000},{0xba558000},{0xba55a000},{0xba55c000},{0xba55e000},{0xba560000},{0xba562000},{0xba564000},{0xba566000},{0xba568000},{0xba56a000},{0xba56c000},{0xba56e000},{0xba570000},{0xba572000},{0xba574000},{0xba576000},{0xba578000},{0xba57a000},{0xba57c000},{0xba57e000}, -{0xba580000},{0xba582000},{0xba584000},{0xba586000},{0xba588000},{0xba58a000},{0xba58c000},{0xba58e000},{0xba590000},{0xba592000},{0xba594000},{0xba596000},{0xba598000},{0xba59a000},{0xba59c000},{0xba59e000},{0xba5a0000},{0xba5a2000},{0xba5a4000},{0xba5a6000},{0xba5a8000},{0xba5aa000},{0xba5ac000},{0xba5ae000},{0xba5b0000},{0xba5b2000},{0xba5b4000},{0xba5b6000},{0xba5b8000},{0xba5ba000},{0xba5bc000},{0xba5be000}, -{0xba5c0000},{0xba5c2000},{0xba5c4000},{0xba5c6000},{0xba5c8000},{0xba5ca000},{0xba5cc000},{0xba5ce000},{0xba5d0000},{0xba5d2000},{0xba5d4000},{0xba5d6000},{0xba5d8000},{0xba5da000},{0xba5dc000},{0xba5de000},{0xba5e0000},{0xba5e2000},{0xba5e4000},{0xba5e6000},{0xba5e8000},{0xba5ea000},{0xba5ec000},{0xba5ee000},{0xba5f0000},{0xba5f2000},{0xba5f4000},{0xba5f6000},{0xba5f8000},{0xba5fa000},{0xba5fc000},{0xba5fe000}, -{0xba600000},{0xba602000},{0xba604000},{0xba606000},{0xba608000},{0xba60a000},{0xba60c000},{0xba60e000},{0xba610000},{0xba612000},{0xba614000},{0xba616000},{0xba618000},{0xba61a000},{0xba61c000},{0xba61e000},{0xba620000},{0xba622000},{0xba624000},{0xba626000},{0xba628000},{0xba62a000},{0xba62c000},{0xba62e000},{0xba630000},{0xba632000},{0xba634000},{0xba636000},{0xba638000},{0xba63a000},{0xba63c000},{0xba63e000}, -{0xba640000},{0xba642000},{0xba644000},{0xba646000},{0xba648000},{0xba64a000},{0xba64c000},{0xba64e000},{0xba650000},{0xba652000},{0xba654000},{0xba656000},{0xba658000},{0xba65a000},{0xba65c000},{0xba65e000},{0xba660000},{0xba662000},{0xba664000},{0xba666000},{0xba668000},{0xba66a000},{0xba66c000},{0xba66e000},{0xba670000},{0xba672000},{0xba674000},{0xba676000},{0xba678000},{0xba67a000},{0xba67c000},{0xba67e000}, -{0xba680000},{0xba682000},{0xba684000},{0xba686000},{0xba688000},{0xba68a000},{0xba68c000},{0xba68e000},{0xba690000},{0xba692000},{0xba694000},{0xba696000},{0xba698000},{0xba69a000},{0xba69c000},{0xba69e000},{0xba6a0000},{0xba6a2000},{0xba6a4000},{0xba6a6000},{0xba6a8000},{0xba6aa000},{0xba6ac000},{0xba6ae000},{0xba6b0000},{0xba6b2000},{0xba6b4000},{0xba6b6000},{0xba6b8000},{0xba6ba000},{0xba6bc000},{0xba6be000}, -{0xba6c0000},{0xba6c2000},{0xba6c4000},{0xba6c6000},{0xba6c8000},{0xba6ca000},{0xba6cc000},{0xba6ce000},{0xba6d0000},{0xba6d2000},{0xba6d4000},{0xba6d6000},{0xba6d8000},{0xba6da000},{0xba6dc000},{0xba6de000},{0xba6e0000},{0xba6e2000},{0xba6e4000},{0xba6e6000},{0xba6e8000},{0xba6ea000},{0xba6ec000},{0xba6ee000},{0xba6f0000},{0xba6f2000},{0xba6f4000},{0xba6f6000},{0xba6f8000},{0xba6fa000},{0xba6fc000},{0xba6fe000}, -{0xba700000},{0xba702000},{0xba704000},{0xba706000},{0xba708000},{0xba70a000},{0xba70c000},{0xba70e000},{0xba710000},{0xba712000},{0xba714000},{0xba716000},{0xba718000},{0xba71a000},{0xba71c000},{0xba71e000},{0xba720000},{0xba722000},{0xba724000},{0xba726000},{0xba728000},{0xba72a000},{0xba72c000},{0xba72e000},{0xba730000},{0xba732000},{0xba734000},{0xba736000},{0xba738000},{0xba73a000},{0xba73c000},{0xba73e000}, -{0xba740000},{0xba742000},{0xba744000},{0xba746000},{0xba748000},{0xba74a000},{0xba74c000},{0xba74e000},{0xba750000},{0xba752000},{0xba754000},{0xba756000},{0xba758000},{0xba75a000},{0xba75c000},{0xba75e000},{0xba760000},{0xba762000},{0xba764000},{0xba766000},{0xba768000},{0xba76a000},{0xba76c000},{0xba76e000},{0xba770000},{0xba772000},{0xba774000},{0xba776000},{0xba778000},{0xba77a000},{0xba77c000},{0xba77e000}, -{0xba780000},{0xba782000},{0xba784000},{0xba786000},{0xba788000},{0xba78a000},{0xba78c000},{0xba78e000},{0xba790000},{0xba792000},{0xba794000},{0xba796000},{0xba798000},{0xba79a000},{0xba79c000},{0xba79e000},{0xba7a0000},{0xba7a2000},{0xba7a4000},{0xba7a6000},{0xba7a8000},{0xba7aa000},{0xba7ac000},{0xba7ae000},{0xba7b0000},{0xba7b2000},{0xba7b4000},{0xba7b6000},{0xba7b8000},{0xba7ba000},{0xba7bc000},{0xba7be000}, -{0xba7c0000},{0xba7c2000},{0xba7c4000},{0xba7c6000},{0xba7c8000},{0xba7ca000},{0xba7cc000},{0xba7ce000},{0xba7d0000},{0xba7d2000},{0xba7d4000},{0xba7d6000},{0xba7d8000},{0xba7da000},{0xba7dc000},{0xba7de000},{0xba7e0000},{0xba7e2000},{0xba7e4000},{0xba7e6000},{0xba7e8000},{0xba7ea000},{0xba7ec000},{0xba7ee000},{0xba7f0000},{0xba7f2000},{0xba7f4000},{0xba7f6000},{0xba7f8000},{0xba7fa000},{0xba7fc000},{0xba7fe000}, -{0xba800000},{0xba802000},{0xba804000},{0xba806000},{0xba808000},{0xba80a000},{0xba80c000},{0xba80e000},{0xba810000},{0xba812000},{0xba814000},{0xba816000},{0xba818000},{0xba81a000},{0xba81c000},{0xba81e000},{0xba820000},{0xba822000},{0xba824000},{0xba826000},{0xba828000},{0xba82a000},{0xba82c000},{0xba82e000},{0xba830000},{0xba832000},{0xba834000},{0xba836000},{0xba838000},{0xba83a000},{0xba83c000},{0xba83e000}, -{0xba840000},{0xba842000},{0xba844000},{0xba846000},{0xba848000},{0xba84a000},{0xba84c000},{0xba84e000},{0xba850000},{0xba852000},{0xba854000},{0xba856000},{0xba858000},{0xba85a000},{0xba85c000},{0xba85e000},{0xba860000},{0xba862000},{0xba864000},{0xba866000},{0xba868000},{0xba86a000},{0xba86c000},{0xba86e000},{0xba870000},{0xba872000},{0xba874000},{0xba876000},{0xba878000},{0xba87a000},{0xba87c000},{0xba87e000}, -{0xba880000},{0xba882000},{0xba884000},{0xba886000},{0xba888000},{0xba88a000},{0xba88c000},{0xba88e000},{0xba890000},{0xba892000},{0xba894000},{0xba896000},{0xba898000},{0xba89a000},{0xba89c000},{0xba89e000},{0xba8a0000},{0xba8a2000},{0xba8a4000},{0xba8a6000},{0xba8a8000},{0xba8aa000},{0xba8ac000},{0xba8ae000},{0xba8b0000},{0xba8b2000},{0xba8b4000},{0xba8b6000},{0xba8b8000},{0xba8ba000},{0xba8bc000},{0xba8be000}, -{0xba8c0000},{0xba8c2000},{0xba8c4000},{0xba8c6000},{0xba8c8000},{0xba8ca000},{0xba8cc000},{0xba8ce000},{0xba8d0000},{0xba8d2000},{0xba8d4000},{0xba8d6000},{0xba8d8000},{0xba8da000},{0xba8dc000},{0xba8de000},{0xba8e0000},{0xba8e2000},{0xba8e4000},{0xba8e6000},{0xba8e8000},{0xba8ea000},{0xba8ec000},{0xba8ee000},{0xba8f0000},{0xba8f2000},{0xba8f4000},{0xba8f6000},{0xba8f8000},{0xba8fa000},{0xba8fc000},{0xba8fe000}, -{0xba900000},{0xba902000},{0xba904000},{0xba906000},{0xba908000},{0xba90a000},{0xba90c000},{0xba90e000},{0xba910000},{0xba912000},{0xba914000},{0xba916000},{0xba918000},{0xba91a000},{0xba91c000},{0xba91e000},{0xba920000},{0xba922000},{0xba924000},{0xba926000},{0xba928000},{0xba92a000},{0xba92c000},{0xba92e000},{0xba930000},{0xba932000},{0xba934000},{0xba936000},{0xba938000},{0xba93a000},{0xba93c000},{0xba93e000}, -{0xba940000},{0xba942000},{0xba944000},{0xba946000},{0xba948000},{0xba94a000},{0xba94c000},{0xba94e000},{0xba950000},{0xba952000},{0xba954000},{0xba956000},{0xba958000},{0xba95a000},{0xba95c000},{0xba95e000},{0xba960000},{0xba962000},{0xba964000},{0xba966000},{0xba968000},{0xba96a000},{0xba96c000},{0xba96e000},{0xba970000},{0xba972000},{0xba974000},{0xba976000},{0xba978000},{0xba97a000},{0xba97c000},{0xba97e000}, -{0xba980000},{0xba982000},{0xba984000},{0xba986000},{0xba988000},{0xba98a000},{0xba98c000},{0xba98e000},{0xba990000},{0xba992000},{0xba994000},{0xba996000},{0xba998000},{0xba99a000},{0xba99c000},{0xba99e000},{0xba9a0000},{0xba9a2000},{0xba9a4000},{0xba9a6000},{0xba9a8000},{0xba9aa000},{0xba9ac000},{0xba9ae000},{0xba9b0000},{0xba9b2000},{0xba9b4000},{0xba9b6000},{0xba9b8000},{0xba9ba000},{0xba9bc000},{0xba9be000}, -{0xba9c0000},{0xba9c2000},{0xba9c4000},{0xba9c6000},{0xba9c8000},{0xba9ca000},{0xba9cc000},{0xba9ce000},{0xba9d0000},{0xba9d2000},{0xba9d4000},{0xba9d6000},{0xba9d8000},{0xba9da000},{0xba9dc000},{0xba9de000},{0xba9e0000},{0xba9e2000},{0xba9e4000},{0xba9e6000},{0xba9e8000},{0xba9ea000},{0xba9ec000},{0xba9ee000},{0xba9f0000},{0xba9f2000},{0xba9f4000},{0xba9f6000},{0xba9f8000},{0xba9fa000},{0xba9fc000},{0xba9fe000}, -{0xbaa00000},{0xbaa02000},{0xbaa04000},{0xbaa06000},{0xbaa08000},{0xbaa0a000},{0xbaa0c000},{0xbaa0e000},{0xbaa10000},{0xbaa12000},{0xbaa14000},{0xbaa16000},{0xbaa18000},{0xbaa1a000},{0xbaa1c000},{0xbaa1e000},{0xbaa20000},{0xbaa22000},{0xbaa24000},{0xbaa26000},{0xbaa28000},{0xbaa2a000},{0xbaa2c000},{0xbaa2e000},{0xbaa30000},{0xbaa32000},{0xbaa34000},{0xbaa36000},{0xbaa38000},{0xbaa3a000},{0xbaa3c000},{0xbaa3e000}, -{0xbaa40000},{0xbaa42000},{0xbaa44000},{0xbaa46000},{0xbaa48000},{0xbaa4a000},{0xbaa4c000},{0xbaa4e000},{0xbaa50000},{0xbaa52000},{0xbaa54000},{0xbaa56000},{0xbaa58000},{0xbaa5a000},{0xbaa5c000},{0xbaa5e000},{0xbaa60000},{0xbaa62000},{0xbaa64000},{0xbaa66000},{0xbaa68000},{0xbaa6a000},{0xbaa6c000},{0xbaa6e000},{0xbaa70000},{0xbaa72000},{0xbaa74000},{0xbaa76000},{0xbaa78000},{0xbaa7a000},{0xbaa7c000},{0xbaa7e000}, -{0xbaa80000},{0xbaa82000},{0xbaa84000},{0xbaa86000},{0xbaa88000},{0xbaa8a000},{0xbaa8c000},{0xbaa8e000},{0xbaa90000},{0xbaa92000},{0xbaa94000},{0xbaa96000},{0xbaa98000},{0xbaa9a000},{0xbaa9c000},{0xbaa9e000},{0xbaaa0000},{0xbaaa2000},{0xbaaa4000},{0xbaaa6000},{0xbaaa8000},{0xbaaaa000},{0xbaaac000},{0xbaaae000},{0xbaab0000},{0xbaab2000},{0xbaab4000},{0xbaab6000},{0xbaab8000},{0xbaaba000},{0xbaabc000},{0xbaabe000}, -{0xbaac0000},{0xbaac2000},{0xbaac4000},{0xbaac6000},{0xbaac8000},{0xbaaca000},{0xbaacc000},{0xbaace000},{0xbaad0000},{0xbaad2000},{0xbaad4000},{0xbaad6000},{0xbaad8000},{0xbaada000},{0xbaadc000},{0xbaade000},{0xbaae0000},{0xbaae2000},{0xbaae4000},{0xbaae6000},{0xbaae8000},{0xbaaea000},{0xbaaec000},{0xbaaee000},{0xbaaf0000},{0xbaaf2000},{0xbaaf4000},{0xbaaf6000},{0xbaaf8000},{0xbaafa000},{0xbaafc000},{0xbaafe000}, -{0xbab00000},{0xbab02000},{0xbab04000},{0xbab06000},{0xbab08000},{0xbab0a000},{0xbab0c000},{0xbab0e000},{0xbab10000},{0xbab12000},{0xbab14000},{0xbab16000},{0xbab18000},{0xbab1a000},{0xbab1c000},{0xbab1e000},{0xbab20000},{0xbab22000},{0xbab24000},{0xbab26000},{0xbab28000},{0xbab2a000},{0xbab2c000},{0xbab2e000},{0xbab30000},{0xbab32000},{0xbab34000},{0xbab36000},{0xbab38000},{0xbab3a000},{0xbab3c000},{0xbab3e000}, -{0xbab40000},{0xbab42000},{0xbab44000},{0xbab46000},{0xbab48000},{0xbab4a000},{0xbab4c000},{0xbab4e000},{0xbab50000},{0xbab52000},{0xbab54000},{0xbab56000},{0xbab58000},{0xbab5a000},{0xbab5c000},{0xbab5e000},{0xbab60000},{0xbab62000},{0xbab64000},{0xbab66000},{0xbab68000},{0xbab6a000},{0xbab6c000},{0xbab6e000},{0xbab70000},{0xbab72000},{0xbab74000},{0xbab76000},{0xbab78000},{0xbab7a000},{0xbab7c000},{0xbab7e000}, -{0xbab80000},{0xbab82000},{0xbab84000},{0xbab86000},{0xbab88000},{0xbab8a000},{0xbab8c000},{0xbab8e000},{0xbab90000},{0xbab92000},{0xbab94000},{0xbab96000},{0xbab98000},{0xbab9a000},{0xbab9c000},{0xbab9e000},{0xbaba0000},{0xbaba2000},{0xbaba4000},{0xbaba6000},{0xbaba8000},{0xbabaa000},{0xbabac000},{0xbabae000},{0xbabb0000},{0xbabb2000},{0xbabb4000},{0xbabb6000},{0xbabb8000},{0xbabba000},{0xbabbc000},{0xbabbe000}, -{0xbabc0000},{0xbabc2000},{0xbabc4000},{0xbabc6000},{0xbabc8000},{0xbabca000},{0xbabcc000},{0xbabce000},{0xbabd0000},{0xbabd2000},{0xbabd4000},{0xbabd6000},{0xbabd8000},{0xbabda000},{0xbabdc000},{0xbabde000},{0xbabe0000},{0xbabe2000},{0xbabe4000},{0xbabe6000},{0xbabe8000},{0xbabea000},{0xbabec000},{0xbabee000},{0xbabf0000},{0xbabf2000},{0xbabf4000},{0xbabf6000},{0xbabf8000},{0xbabfa000},{0xbabfc000},{0xbabfe000}, -{0xbac00000},{0xbac02000},{0xbac04000},{0xbac06000},{0xbac08000},{0xbac0a000},{0xbac0c000},{0xbac0e000},{0xbac10000},{0xbac12000},{0xbac14000},{0xbac16000},{0xbac18000},{0xbac1a000},{0xbac1c000},{0xbac1e000},{0xbac20000},{0xbac22000},{0xbac24000},{0xbac26000},{0xbac28000},{0xbac2a000},{0xbac2c000},{0xbac2e000},{0xbac30000},{0xbac32000},{0xbac34000},{0xbac36000},{0xbac38000},{0xbac3a000},{0xbac3c000},{0xbac3e000}, -{0xbac40000},{0xbac42000},{0xbac44000},{0xbac46000},{0xbac48000},{0xbac4a000},{0xbac4c000},{0xbac4e000},{0xbac50000},{0xbac52000},{0xbac54000},{0xbac56000},{0xbac58000},{0xbac5a000},{0xbac5c000},{0xbac5e000},{0xbac60000},{0xbac62000},{0xbac64000},{0xbac66000},{0xbac68000},{0xbac6a000},{0xbac6c000},{0xbac6e000},{0xbac70000},{0xbac72000},{0xbac74000},{0xbac76000},{0xbac78000},{0xbac7a000},{0xbac7c000},{0xbac7e000}, -{0xbac80000},{0xbac82000},{0xbac84000},{0xbac86000},{0xbac88000},{0xbac8a000},{0xbac8c000},{0xbac8e000},{0xbac90000},{0xbac92000},{0xbac94000},{0xbac96000},{0xbac98000},{0xbac9a000},{0xbac9c000},{0xbac9e000},{0xbaca0000},{0xbaca2000},{0xbaca4000},{0xbaca6000},{0xbaca8000},{0xbacaa000},{0xbacac000},{0xbacae000},{0xbacb0000},{0xbacb2000},{0xbacb4000},{0xbacb6000},{0xbacb8000},{0xbacba000},{0xbacbc000},{0xbacbe000}, -{0xbacc0000},{0xbacc2000},{0xbacc4000},{0xbacc6000},{0xbacc8000},{0xbacca000},{0xbaccc000},{0xbacce000},{0xbacd0000},{0xbacd2000},{0xbacd4000},{0xbacd6000},{0xbacd8000},{0xbacda000},{0xbacdc000},{0xbacde000},{0xbace0000},{0xbace2000},{0xbace4000},{0xbace6000},{0xbace8000},{0xbacea000},{0xbacec000},{0xbacee000},{0xbacf0000},{0xbacf2000},{0xbacf4000},{0xbacf6000},{0xbacf8000},{0xbacfa000},{0xbacfc000},{0xbacfe000}, -{0xbad00000},{0xbad02000},{0xbad04000},{0xbad06000},{0xbad08000},{0xbad0a000},{0xbad0c000},{0xbad0e000},{0xbad10000},{0xbad12000},{0xbad14000},{0xbad16000},{0xbad18000},{0xbad1a000},{0xbad1c000},{0xbad1e000},{0xbad20000},{0xbad22000},{0xbad24000},{0xbad26000},{0xbad28000},{0xbad2a000},{0xbad2c000},{0xbad2e000},{0xbad30000},{0xbad32000},{0xbad34000},{0xbad36000},{0xbad38000},{0xbad3a000},{0xbad3c000},{0xbad3e000}, -{0xbad40000},{0xbad42000},{0xbad44000},{0xbad46000},{0xbad48000},{0xbad4a000},{0xbad4c000},{0xbad4e000},{0xbad50000},{0xbad52000},{0xbad54000},{0xbad56000},{0xbad58000},{0xbad5a000},{0xbad5c000},{0xbad5e000},{0xbad60000},{0xbad62000},{0xbad64000},{0xbad66000},{0xbad68000},{0xbad6a000},{0xbad6c000},{0xbad6e000},{0xbad70000},{0xbad72000},{0xbad74000},{0xbad76000},{0xbad78000},{0xbad7a000},{0xbad7c000},{0xbad7e000}, -{0xbad80000},{0xbad82000},{0xbad84000},{0xbad86000},{0xbad88000},{0xbad8a000},{0xbad8c000},{0xbad8e000},{0xbad90000},{0xbad92000},{0xbad94000},{0xbad96000},{0xbad98000},{0xbad9a000},{0xbad9c000},{0xbad9e000},{0xbada0000},{0xbada2000},{0xbada4000},{0xbada6000},{0xbada8000},{0xbadaa000},{0xbadac000},{0xbadae000},{0xbadb0000},{0xbadb2000},{0xbadb4000},{0xbadb6000},{0xbadb8000},{0xbadba000},{0xbadbc000},{0xbadbe000}, -{0xbadc0000},{0xbadc2000},{0xbadc4000},{0xbadc6000},{0xbadc8000},{0xbadca000},{0xbadcc000},{0xbadce000},{0xbadd0000},{0xbadd2000},{0xbadd4000},{0xbadd6000},{0xbadd8000},{0xbadda000},{0xbaddc000},{0xbadde000},{0xbade0000},{0xbade2000},{0xbade4000},{0xbade6000},{0xbade8000},{0xbadea000},{0xbadec000},{0xbadee000},{0xbadf0000},{0xbadf2000},{0xbadf4000},{0xbadf6000},{0xbadf8000},{0xbadfa000},{0xbadfc000},{0xbadfe000}, -{0xbae00000},{0xbae02000},{0xbae04000},{0xbae06000},{0xbae08000},{0xbae0a000},{0xbae0c000},{0xbae0e000},{0xbae10000},{0xbae12000},{0xbae14000},{0xbae16000},{0xbae18000},{0xbae1a000},{0xbae1c000},{0xbae1e000},{0xbae20000},{0xbae22000},{0xbae24000},{0xbae26000},{0xbae28000},{0xbae2a000},{0xbae2c000},{0xbae2e000},{0xbae30000},{0xbae32000},{0xbae34000},{0xbae36000},{0xbae38000},{0xbae3a000},{0xbae3c000},{0xbae3e000}, -{0xbae40000},{0xbae42000},{0xbae44000},{0xbae46000},{0xbae48000},{0xbae4a000},{0xbae4c000},{0xbae4e000},{0xbae50000},{0xbae52000},{0xbae54000},{0xbae56000},{0xbae58000},{0xbae5a000},{0xbae5c000},{0xbae5e000},{0xbae60000},{0xbae62000},{0xbae64000},{0xbae66000},{0xbae68000},{0xbae6a000},{0xbae6c000},{0xbae6e000},{0xbae70000},{0xbae72000},{0xbae74000},{0xbae76000},{0xbae78000},{0xbae7a000},{0xbae7c000},{0xbae7e000}, -{0xbae80000},{0xbae82000},{0xbae84000},{0xbae86000},{0xbae88000},{0xbae8a000},{0xbae8c000},{0xbae8e000},{0xbae90000},{0xbae92000},{0xbae94000},{0xbae96000},{0xbae98000},{0xbae9a000},{0xbae9c000},{0xbae9e000},{0xbaea0000},{0xbaea2000},{0xbaea4000},{0xbaea6000},{0xbaea8000},{0xbaeaa000},{0xbaeac000},{0xbaeae000},{0xbaeb0000},{0xbaeb2000},{0xbaeb4000},{0xbaeb6000},{0xbaeb8000},{0xbaeba000},{0xbaebc000},{0xbaebe000}, -{0xbaec0000},{0xbaec2000},{0xbaec4000},{0xbaec6000},{0xbaec8000},{0xbaeca000},{0xbaecc000},{0xbaece000},{0xbaed0000},{0xbaed2000},{0xbaed4000},{0xbaed6000},{0xbaed8000},{0xbaeda000},{0xbaedc000},{0xbaede000},{0xbaee0000},{0xbaee2000},{0xbaee4000},{0xbaee6000},{0xbaee8000},{0xbaeea000},{0xbaeec000},{0xbaeee000},{0xbaef0000},{0xbaef2000},{0xbaef4000},{0xbaef6000},{0xbaef8000},{0xbaefa000},{0xbaefc000},{0xbaefe000}, -{0xbaf00000},{0xbaf02000},{0xbaf04000},{0xbaf06000},{0xbaf08000},{0xbaf0a000},{0xbaf0c000},{0xbaf0e000},{0xbaf10000},{0xbaf12000},{0xbaf14000},{0xbaf16000},{0xbaf18000},{0xbaf1a000},{0xbaf1c000},{0xbaf1e000},{0xbaf20000},{0xbaf22000},{0xbaf24000},{0xbaf26000},{0xbaf28000},{0xbaf2a000},{0xbaf2c000},{0xbaf2e000},{0xbaf30000},{0xbaf32000},{0xbaf34000},{0xbaf36000},{0xbaf38000},{0xbaf3a000},{0xbaf3c000},{0xbaf3e000}, -{0xbaf40000},{0xbaf42000},{0xbaf44000},{0xbaf46000},{0xbaf48000},{0xbaf4a000},{0xbaf4c000},{0xbaf4e000},{0xbaf50000},{0xbaf52000},{0xbaf54000},{0xbaf56000},{0xbaf58000},{0xbaf5a000},{0xbaf5c000},{0xbaf5e000},{0xbaf60000},{0xbaf62000},{0xbaf64000},{0xbaf66000},{0xbaf68000},{0xbaf6a000},{0xbaf6c000},{0xbaf6e000},{0xbaf70000},{0xbaf72000},{0xbaf74000},{0xbaf76000},{0xbaf78000},{0xbaf7a000},{0xbaf7c000},{0xbaf7e000}, -{0xbaf80000},{0xbaf82000},{0xbaf84000},{0xbaf86000},{0xbaf88000},{0xbaf8a000},{0xbaf8c000},{0xbaf8e000},{0xbaf90000},{0xbaf92000},{0xbaf94000},{0xbaf96000},{0xbaf98000},{0xbaf9a000},{0xbaf9c000},{0xbaf9e000},{0xbafa0000},{0xbafa2000},{0xbafa4000},{0xbafa6000},{0xbafa8000},{0xbafaa000},{0xbafac000},{0xbafae000},{0xbafb0000},{0xbafb2000},{0xbafb4000},{0xbafb6000},{0xbafb8000},{0xbafba000},{0xbafbc000},{0xbafbe000}, -{0xbafc0000},{0xbafc2000},{0xbafc4000},{0xbafc6000},{0xbafc8000},{0xbafca000},{0xbafcc000},{0xbafce000},{0xbafd0000},{0xbafd2000},{0xbafd4000},{0xbafd6000},{0xbafd8000},{0xbafda000},{0xbafdc000},{0xbafde000},{0xbafe0000},{0xbafe2000},{0xbafe4000},{0xbafe6000},{0xbafe8000},{0xbafea000},{0xbafec000},{0xbafee000},{0xbaff0000},{0xbaff2000},{0xbaff4000},{0xbaff6000},{0xbaff8000},{0xbaffa000},{0xbaffc000},{0xbaffe000}, -{0xbb000000},{0xbb002000},{0xbb004000},{0xbb006000},{0xbb008000},{0xbb00a000},{0xbb00c000},{0xbb00e000},{0xbb010000},{0xbb012000},{0xbb014000},{0xbb016000},{0xbb018000},{0xbb01a000},{0xbb01c000},{0xbb01e000},{0xbb020000},{0xbb022000},{0xbb024000},{0xbb026000},{0xbb028000},{0xbb02a000},{0xbb02c000},{0xbb02e000},{0xbb030000},{0xbb032000},{0xbb034000},{0xbb036000},{0xbb038000},{0xbb03a000},{0xbb03c000},{0xbb03e000}, -{0xbb040000},{0xbb042000},{0xbb044000},{0xbb046000},{0xbb048000},{0xbb04a000},{0xbb04c000},{0xbb04e000},{0xbb050000},{0xbb052000},{0xbb054000},{0xbb056000},{0xbb058000},{0xbb05a000},{0xbb05c000},{0xbb05e000},{0xbb060000},{0xbb062000},{0xbb064000},{0xbb066000},{0xbb068000},{0xbb06a000},{0xbb06c000},{0xbb06e000},{0xbb070000},{0xbb072000},{0xbb074000},{0xbb076000},{0xbb078000},{0xbb07a000},{0xbb07c000},{0xbb07e000}, -{0xbb080000},{0xbb082000},{0xbb084000},{0xbb086000},{0xbb088000},{0xbb08a000},{0xbb08c000},{0xbb08e000},{0xbb090000},{0xbb092000},{0xbb094000},{0xbb096000},{0xbb098000},{0xbb09a000},{0xbb09c000},{0xbb09e000},{0xbb0a0000},{0xbb0a2000},{0xbb0a4000},{0xbb0a6000},{0xbb0a8000},{0xbb0aa000},{0xbb0ac000},{0xbb0ae000},{0xbb0b0000},{0xbb0b2000},{0xbb0b4000},{0xbb0b6000},{0xbb0b8000},{0xbb0ba000},{0xbb0bc000},{0xbb0be000}, -{0xbb0c0000},{0xbb0c2000},{0xbb0c4000},{0xbb0c6000},{0xbb0c8000},{0xbb0ca000},{0xbb0cc000},{0xbb0ce000},{0xbb0d0000},{0xbb0d2000},{0xbb0d4000},{0xbb0d6000},{0xbb0d8000},{0xbb0da000},{0xbb0dc000},{0xbb0de000},{0xbb0e0000},{0xbb0e2000},{0xbb0e4000},{0xbb0e6000},{0xbb0e8000},{0xbb0ea000},{0xbb0ec000},{0xbb0ee000},{0xbb0f0000},{0xbb0f2000},{0xbb0f4000},{0xbb0f6000},{0xbb0f8000},{0xbb0fa000},{0xbb0fc000},{0xbb0fe000}, -{0xbb100000},{0xbb102000},{0xbb104000},{0xbb106000},{0xbb108000},{0xbb10a000},{0xbb10c000},{0xbb10e000},{0xbb110000},{0xbb112000},{0xbb114000},{0xbb116000},{0xbb118000},{0xbb11a000},{0xbb11c000},{0xbb11e000},{0xbb120000},{0xbb122000},{0xbb124000},{0xbb126000},{0xbb128000},{0xbb12a000},{0xbb12c000},{0xbb12e000},{0xbb130000},{0xbb132000},{0xbb134000},{0xbb136000},{0xbb138000},{0xbb13a000},{0xbb13c000},{0xbb13e000}, -{0xbb140000},{0xbb142000},{0xbb144000},{0xbb146000},{0xbb148000},{0xbb14a000},{0xbb14c000},{0xbb14e000},{0xbb150000},{0xbb152000},{0xbb154000},{0xbb156000},{0xbb158000},{0xbb15a000},{0xbb15c000},{0xbb15e000},{0xbb160000},{0xbb162000},{0xbb164000},{0xbb166000},{0xbb168000},{0xbb16a000},{0xbb16c000},{0xbb16e000},{0xbb170000},{0xbb172000},{0xbb174000},{0xbb176000},{0xbb178000},{0xbb17a000},{0xbb17c000},{0xbb17e000}, -{0xbb180000},{0xbb182000},{0xbb184000},{0xbb186000},{0xbb188000},{0xbb18a000},{0xbb18c000},{0xbb18e000},{0xbb190000},{0xbb192000},{0xbb194000},{0xbb196000},{0xbb198000},{0xbb19a000},{0xbb19c000},{0xbb19e000},{0xbb1a0000},{0xbb1a2000},{0xbb1a4000},{0xbb1a6000},{0xbb1a8000},{0xbb1aa000},{0xbb1ac000},{0xbb1ae000},{0xbb1b0000},{0xbb1b2000},{0xbb1b4000},{0xbb1b6000},{0xbb1b8000},{0xbb1ba000},{0xbb1bc000},{0xbb1be000}, -{0xbb1c0000},{0xbb1c2000},{0xbb1c4000},{0xbb1c6000},{0xbb1c8000},{0xbb1ca000},{0xbb1cc000},{0xbb1ce000},{0xbb1d0000},{0xbb1d2000},{0xbb1d4000},{0xbb1d6000},{0xbb1d8000},{0xbb1da000},{0xbb1dc000},{0xbb1de000},{0xbb1e0000},{0xbb1e2000},{0xbb1e4000},{0xbb1e6000},{0xbb1e8000},{0xbb1ea000},{0xbb1ec000},{0xbb1ee000},{0xbb1f0000},{0xbb1f2000},{0xbb1f4000},{0xbb1f6000},{0xbb1f8000},{0xbb1fa000},{0xbb1fc000},{0xbb1fe000}, -{0xbb200000},{0xbb202000},{0xbb204000},{0xbb206000},{0xbb208000},{0xbb20a000},{0xbb20c000},{0xbb20e000},{0xbb210000},{0xbb212000},{0xbb214000},{0xbb216000},{0xbb218000},{0xbb21a000},{0xbb21c000},{0xbb21e000},{0xbb220000},{0xbb222000},{0xbb224000},{0xbb226000},{0xbb228000},{0xbb22a000},{0xbb22c000},{0xbb22e000},{0xbb230000},{0xbb232000},{0xbb234000},{0xbb236000},{0xbb238000},{0xbb23a000},{0xbb23c000},{0xbb23e000}, -{0xbb240000},{0xbb242000},{0xbb244000},{0xbb246000},{0xbb248000},{0xbb24a000},{0xbb24c000},{0xbb24e000},{0xbb250000},{0xbb252000},{0xbb254000},{0xbb256000},{0xbb258000},{0xbb25a000},{0xbb25c000},{0xbb25e000},{0xbb260000},{0xbb262000},{0xbb264000},{0xbb266000},{0xbb268000},{0xbb26a000},{0xbb26c000},{0xbb26e000},{0xbb270000},{0xbb272000},{0xbb274000},{0xbb276000},{0xbb278000},{0xbb27a000},{0xbb27c000},{0xbb27e000}, -{0xbb280000},{0xbb282000},{0xbb284000},{0xbb286000},{0xbb288000},{0xbb28a000},{0xbb28c000},{0xbb28e000},{0xbb290000},{0xbb292000},{0xbb294000},{0xbb296000},{0xbb298000},{0xbb29a000},{0xbb29c000},{0xbb29e000},{0xbb2a0000},{0xbb2a2000},{0xbb2a4000},{0xbb2a6000},{0xbb2a8000},{0xbb2aa000},{0xbb2ac000},{0xbb2ae000},{0xbb2b0000},{0xbb2b2000},{0xbb2b4000},{0xbb2b6000},{0xbb2b8000},{0xbb2ba000},{0xbb2bc000},{0xbb2be000}, -{0xbb2c0000},{0xbb2c2000},{0xbb2c4000},{0xbb2c6000},{0xbb2c8000},{0xbb2ca000},{0xbb2cc000},{0xbb2ce000},{0xbb2d0000},{0xbb2d2000},{0xbb2d4000},{0xbb2d6000},{0xbb2d8000},{0xbb2da000},{0xbb2dc000},{0xbb2de000},{0xbb2e0000},{0xbb2e2000},{0xbb2e4000},{0xbb2e6000},{0xbb2e8000},{0xbb2ea000},{0xbb2ec000},{0xbb2ee000},{0xbb2f0000},{0xbb2f2000},{0xbb2f4000},{0xbb2f6000},{0xbb2f8000},{0xbb2fa000},{0xbb2fc000},{0xbb2fe000}, -{0xbb300000},{0xbb302000},{0xbb304000},{0xbb306000},{0xbb308000},{0xbb30a000},{0xbb30c000},{0xbb30e000},{0xbb310000},{0xbb312000},{0xbb314000},{0xbb316000},{0xbb318000},{0xbb31a000},{0xbb31c000},{0xbb31e000},{0xbb320000},{0xbb322000},{0xbb324000},{0xbb326000},{0xbb328000},{0xbb32a000},{0xbb32c000},{0xbb32e000},{0xbb330000},{0xbb332000},{0xbb334000},{0xbb336000},{0xbb338000},{0xbb33a000},{0xbb33c000},{0xbb33e000}, -{0xbb340000},{0xbb342000},{0xbb344000},{0xbb346000},{0xbb348000},{0xbb34a000},{0xbb34c000},{0xbb34e000},{0xbb350000},{0xbb352000},{0xbb354000},{0xbb356000},{0xbb358000},{0xbb35a000},{0xbb35c000},{0xbb35e000},{0xbb360000},{0xbb362000},{0xbb364000},{0xbb366000},{0xbb368000},{0xbb36a000},{0xbb36c000},{0xbb36e000},{0xbb370000},{0xbb372000},{0xbb374000},{0xbb376000},{0xbb378000},{0xbb37a000},{0xbb37c000},{0xbb37e000}, -{0xbb380000},{0xbb382000},{0xbb384000},{0xbb386000},{0xbb388000},{0xbb38a000},{0xbb38c000},{0xbb38e000},{0xbb390000},{0xbb392000},{0xbb394000},{0xbb396000},{0xbb398000},{0xbb39a000},{0xbb39c000},{0xbb39e000},{0xbb3a0000},{0xbb3a2000},{0xbb3a4000},{0xbb3a6000},{0xbb3a8000},{0xbb3aa000},{0xbb3ac000},{0xbb3ae000},{0xbb3b0000},{0xbb3b2000},{0xbb3b4000},{0xbb3b6000},{0xbb3b8000},{0xbb3ba000},{0xbb3bc000},{0xbb3be000}, -{0xbb3c0000},{0xbb3c2000},{0xbb3c4000},{0xbb3c6000},{0xbb3c8000},{0xbb3ca000},{0xbb3cc000},{0xbb3ce000},{0xbb3d0000},{0xbb3d2000},{0xbb3d4000},{0xbb3d6000},{0xbb3d8000},{0xbb3da000},{0xbb3dc000},{0xbb3de000},{0xbb3e0000},{0xbb3e2000},{0xbb3e4000},{0xbb3e6000},{0xbb3e8000},{0xbb3ea000},{0xbb3ec000},{0xbb3ee000},{0xbb3f0000},{0xbb3f2000},{0xbb3f4000},{0xbb3f6000},{0xbb3f8000},{0xbb3fa000},{0xbb3fc000},{0xbb3fe000}, -{0xbb400000},{0xbb402000},{0xbb404000},{0xbb406000},{0xbb408000},{0xbb40a000},{0xbb40c000},{0xbb40e000},{0xbb410000},{0xbb412000},{0xbb414000},{0xbb416000},{0xbb418000},{0xbb41a000},{0xbb41c000},{0xbb41e000},{0xbb420000},{0xbb422000},{0xbb424000},{0xbb426000},{0xbb428000},{0xbb42a000},{0xbb42c000},{0xbb42e000},{0xbb430000},{0xbb432000},{0xbb434000},{0xbb436000},{0xbb438000},{0xbb43a000},{0xbb43c000},{0xbb43e000}, -{0xbb440000},{0xbb442000},{0xbb444000},{0xbb446000},{0xbb448000},{0xbb44a000},{0xbb44c000},{0xbb44e000},{0xbb450000},{0xbb452000},{0xbb454000},{0xbb456000},{0xbb458000},{0xbb45a000},{0xbb45c000},{0xbb45e000},{0xbb460000},{0xbb462000},{0xbb464000},{0xbb466000},{0xbb468000},{0xbb46a000},{0xbb46c000},{0xbb46e000},{0xbb470000},{0xbb472000},{0xbb474000},{0xbb476000},{0xbb478000},{0xbb47a000},{0xbb47c000},{0xbb47e000}, -{0xbb480000},{0xbb482000},{0xbb484000},{0xbb486000},{0xbb488000},{0xbb48a000},{0xbb48c000},{0xbb48e000},{0xbb490000},{0xbb492000},{0xbb494000},{0xbb496000},{0xbb498000},{0xbb49a000},{0xbb49c000},{0xbb49e000},{0xbb4a0000},{0xbb4a2000},{0xbb4a4000},{0xbb4a6000},{0xbb4a8000},{0xbb4aa000},{0xbb4ac000},{0xbb4ae000},{0xbb4b0000},{0xbb4b2000},{0xbb4b4000},{0xbb4b6000},{0xbb4b8000},{0xbb4ba000},{0xbb4bc000},{0xbb4be000}, -{0xbb4c0000},{0xbb4c2000},{0xbb4c4000},{0xbb4c6000},{0xbb4c8000},{0xbb4ca000},{0xbb4cc000},{0xbb4ce000},{0xbb4d0000},{0xbb4d2000},{0xbb4d4000},{0xbb4d6000},{0xbb4d8000},{0xbb4da000},{0xbb4dc000},{0xbb4de000},{0xbb4e0000},{0xbb4e2000},{0xbb4e4000},{0xbb4e6000},{0xbb4e8000},{0xbb4ea000},{0xbb4ec000},{0xbb4ee000},{0xbb4f0000},{0xbb4f2000},{0xbb4f4000},{0xbb4f6000},{0xbb4f8000},{0xbb4fa000},{0xbb4fc000},{0xbb4fe000}, -{0xbb500000},{0xbb502000},{0xbb504000},{0xbb506000},{0xbb508000},{0xbb50a000},{0xbb50c000},{0xbb50e000},{0xbb510000},{0xbb512000},{0xbb514000},{0xbb516000},{0xbb518000},{0xbb51a000},{0xbb51c000},{0xbb51e000},{0xbb520000},{0xbb522000},{0xbb524000},{0xbb526000},{0xbb528000},{0xbb52a000},{0xbb52c000},{0xbb52e000},{0xbb530000},{0xbb532000},{0xbb534000},{0xbb536000},{0xbb538000},{0xbb53a000},{0xbb53c000},{0xbb53e000}, -{0xbb540000},{0xbb542000},{0xbb544000},{0xbb546000},{0xbb548000},{0xbb54a000},{0xbb54c000},{0xbb54e000},{0xbb550000},{0xbb552000},{0xbb554000},{0xbb556000},{0xbb558000},{0xbb55a000},{0xbb55c000},{0xbb55e000},{0xbb560000},{0xbb562000},{0xbb564000},{0xbb566000},{0xbb568000},{0xbb56a000},{0xbb56c000},{0xbb56e000},{0xbb570000},{0xbb572000},{0xbb574000},{0xbb576000},{0xbb578000},{0xbb57a000},{0xbb57c000},{0xbb57e000}, -{0xbb580000},{0xbb582000},{0xbb584000},{0xbb586000},{0xbb588000},{0xbb58a000},{0xbb58c000},{0xbb58e000},{0xbb590000},{0xbb592000},{0xbb594000},{0xbb596000},{0xbb598000},{0xbb59a000},{0xbb59c000},{0xbb59e000},{0xbb5a0000},{0xbb5a2000},{0xbb5a4000},{0xbb5a6000},{0xbb5a8000},{0xbb5aa000},{0xbb5ac000},{0xbb5ae000},{0xbb5b0000},{0xbb5b2000},{0xbb5b4000},{0xbb5b6000},{0xbb5b8000},{0xbb5ba000},{0xbb5bc000},{0xbb5be000}, -{0xbb5c0000},{0xbb5c2000},{0xbb5c4000},{0xbb5c6000},{0xbb5c8000},{0xbb5ca000},{0xbb5cc000},{0xbb5ce000},{0xbb5d0000},{0xbb5d2000},{0xbb5d4000},{0xbb5d6000},{0xbb5d8000},{0xbb5da000},{0xbb5dc000},{0xbb5de000},{0xbb5e0000},{0xbb5e2000},{0xbb5e4000},{0xbb5e6000},{0xbb5e8000},{0xbb5ea000},{0xbb5ec000},{0xbb5ee000},{0xbb5f0000},{0xbb5f2000},{0xbb5f4000},{0xbb5f6000},{0xbb5f8000},{0xbb5fa000},{0xbb5fc000},{0xbb5fe000}, -{0xbb600000},{0xbb602000},{0xbb604000},{0xbb606000},{0xbb608000},{0xbb60a000},{0xbb60c000},{0xbb60e000},{0xbb610000},{0xbb612000},{0xbb614000},{0xbb616000},{0xbb618000},{0xbb61a000},{0xbb61c000},{0xbb61e000},{0xbb620000},{0xbb622000},{0xbb624000},{0xbb626000},{0xbb628000},{0xbb62a000},{0xbb62c000},{0xbb62e000},{0xbb630000},{0xbb632000},{0xbb634000},{0xbb636000},{0xbb638000},{0xbb63a000},{0xbb63c000},{0xbb63e000}, -{0xbb640000},{0xbb642000},{0xbb644000},{0xbb646000},{0xbb648000},{0xbb64a000},{0xbb64c000},{0xbb64e000},{0xbb650000},{0xbb652000},{0xbb654000},{0xbb656000},{0xbb658000},{0xbb65a000},{0xbb65c000},{0xbb65e000},{0xbb660000},{0xbb662000},{0xbb664000},{0xbb666000},{0xbb668000},{0xbb66a000},{0xbb66c000},{0xbb66e000},{0xbb670000},{0xbb672000},{0xbb674000},{0xbb676000},{0xbb678000},{0xbb67a000},{0xbb67c000},{0xbb67e000}, -{0xbb680000},{0xbb682000},{0xbb684000},{0xbb686000},{0xbb688000},{0xbb68a000},{0xbb68c000},{0xbb68e000},{0xbb690000},{0xbb692000},{0xbb694000},{0xbb696000},{0xbb698000},{0xbb69a000},{0xbb69c000},{0xbb69e000},{0xbb6a0000},{0xbb6a2000},{0xbb6a4000},{0xbb6a6000},{0xbb6a8000},{0xbb6aa000},{0xbb6ac000},{0xbb6ae000},{0xbb6b0000},{0xbb6b2000},{0xbb6b4000},{0xbb6b6000},{0xbb6b8000},{0xbb6ba000},{0xbb6bc000},{0xbb6be000}, -{0xbb6c0000},{0xbb6c2000},{0xbb6c4000},{0xbb6c6000},{0xbb6c8000},{0xbb6ca000},{0xbb6cc000},{0xbb6ce000},{0xbb6d0000},{0xbb6d2000},{0xbb6d4000},{0xbb6d6000},{0xbb6d8000},{0xbb6da000},{0xbb6dc000},{0xbb6de000},{0xbb6e0000},{0xbb6e2000},{0xbb6e4000},{0xbb6e6000},{0xbb6e8000},{0xbb6ea000},{0xbb6ec000},{0xbb6ee000},{0xbb6f0000},{0xbb6f2000},{0xbb6f4000},{0xbb6f6000},{0xbb6f8000},{0xbb6fa000},{0xbb6fc000},{0xbb6fe000}, -{0xbb700000},{0xbb702000},{0xbb704000},{0xbb706000},{0xbb708000},{0xbb70a000},{0xbb70c000},{0xbb70e000},{0xbb710000},{0xbb712000},{0xbb714000},{0xbb716000},{0xbb718000},{0xbb71a000},{0xbb71c000},{0xbb71e000},{0xbb720000},{0xbb722000},{0xbb724000},{0xbb726000},{0xbb728000},{0xbb72a000},{0xbb72c000},{0xbb72e000},{0xbb730000},{0xbb732000},{0xbb734000},{0xbb736000},{0xbb738000},{0xbb73a000},{0xbb73c000},{0xbb73e000}, -{0xbb740000},{0xbb742000},{0xbb744000},{0xbb746000},{0xbb748000},{0xbb74a000},{0xbb74c000},{0xbb74e000},{0xbb750000},{0xbb752000},{0xbb754000},{0xbb756000},{0xbb758000},{0xbb75a000},{0xbb75c000},{0xbb75e000},{0xbb760000},{0xbb762000},{0xbb764000},{0xbb766000},{0xbb768000},{0xbb76a000},{0xbb76c000},{0xbb76e000},{0xbb770000},{0xbb772000},{0xbb774000},{0xbb776000},{0xbb778000},{0xbb77a000},{0xbb77c000},{0xbb77e000}, -{0xbb780000},{0xbb782000},{0xbb784000},{0xbb786000},{0xbb788000},{0xbb78a000},{0xbb78c000},{0xbb78e000},{0xbb790000},{0xbb792000},{0xbb794000},{0xbb796000},{0xbb798000},{0xbb79a000},{0xbb79c000},{0xbb79e000},{0xbb7a0000},{0xbb7a2000},{0xbb7a4000},{0xbb7a6000},{0xbb7a8000},{0xbb7aa000},{0xbb7ac000},{0xbb7ae000},{0xbb7b0000},{0xbb7b2000},{0xbb7b4000},{0xbb7b6000},{0xbb7b8000},{0xbb7ba000},{0xbb7bc000},{0xbb7be000}, -{0xbb7c0000},{0xbb7c2000},{0xbb7c4000},{0xbb7c6000},{0xbb7c8000},{0xbb7ca000},{0xbb7cc000},{0xbb7ce000},{0xbb7d0000},{0xbb7d2000},{0xbb7d4000},{0xbb7d6000},{0xbb7d8000},{0xbb7da000},{0xbb7dc000},{0xbb7de000},{0xbb7e0000},{0xbb7e2000},{0xbb7e4000},{0xbb7e6000},{0xbb7e8000},{0xbb7ea000},{0xbb7ec000},{0xbb7ee000},{0xbb7f0000},{0xbb7f2000},{0xbb7f4000},{0xbb7f6000},{0xbb7f8000},{0xbb7fa000},{0xbb7fc000},{0xbb7fe000}, -{0xbb800000},{0xbb802000},{0xbb804000},{0xbb806000},{0xbb808000},{0xbb80a000},{0xbb80c000},{0xbb80e000},{0xbb810000},{0xbb812000},{0xbb814000},{0xbb816000},{0xbb818000},{0xbb81a000},{0xbb81c000},{0xbb81e000},{0xbb820000},{0xbb822000},{0xbb824000},{0xbb826000},{0xbb828000},{0xbb82a000},{0xbb82c000},{0xbb82e000},{0xbb830000},{0xbb832000},{0xbb834000},{0xbb836000},{0xbb838000},{0xbb83a000},{0xbb83c000},{0xbb83e000}, -{0xbb840000},{0xbb842000},{0xbb844000},{0xbb846000},{0xbb848000},{0xbb84a000},{0xbb84c000},{0xbb84e000},{0xbb850000},{0xbb852000},{0xbb854000},{0xbb856000},{0xbb858000},{0xbb85a000},{0xbb85c000},{0xbb85e000},{0xbb860000},{0xbb862000},{0xbb864000},{0xbb866000},{0xbb868000},{0xbb86a000},{0xbb86c000},{0xbb86e000},{0xbb870000},{0xbb872000},{0xbb874000},{0xbb876000},{0xbb878000},{0xbb87a000},{0xbb87c000},{0xbb87e000}, -{0xbb880000},{0xbb882000},{0xbb884000},{0xbb886000},{0xbb888000},{0xbb88a000},{0xbb88c000},{0xbb88e000},{0xbb890000},{0xbb892000},{0xbb894000},{0xbb896000},{0xbb898000},{0xbb89a000},{0xbb89c000},{0xbb89e000},{0xbb8a0000},{0xbb8a2000},{0xbb8a4000},{0xbb8a6000},{0xbb8a8000},{0xbb8aa000},{0xbb8ac000},{0xbb8ae000},{0xbb8b0000},{0xbb8b2000},{0xbb8b4000},{0xbb8b6000},{0xbb8b8000},{0xbb8ba000},{0xbb8bc000},{0xbb8be000}, -{0xbb8c0000},{0xbb8c2000},{0xbb8c4000},{0xbb8c6000},{0xbb8c8000},{0xbb8ca000},{0xbb8cc000},{0xbb8ce000},{0xbb8d0000},{0xbb8d2000},{0xbb8d4000},{0xbb8d6000},{0xbb8d8000},{0xbb8da000},{0xbb8dc000},{0xbb8de000},{0xbb8e0000},{0xbb8e2000},{0xbb8e4000},{0xbb8e6000},{0xbb8e8000},{0xbb8ea000},{0xbb8ec000},{0xbb8ee000},{0xbb8f0000},{0xbb8f2000},{0xbb8f4000},{0xbb8f6000},{0xbb8f8000},{0xbb8fa000},{0xbb8fc000},{0xbb8fe000}, -{0xbb900000},{0xbb902000},{0xbb904000},{0xbb906000},{0xbb908000},{0xbb90a000},{0xbb90c000},{0xbb90e000},{0xbb910000},{0xbb912000},{0xbb914000},{0xbb916000},{0xbb918000},{0xbb91a000},{0xbb91c000},{0xbb91e000},{0xbb920000},{0xbb922000},{0xbb924000},{0xbb926000},{0xbb928000},{0xbb92a000},{0xbb92c000},{0xbb92e000},{0xbb930000},{0xbb932000},{0xbb934000},{0xbb936000},{0xbb938000},{0xbb93a000},{0xbb93c000},{0xbb93e000}, -{0xbb940000},{0xbb942000},{0xbb944000},{0xbb946000},{0xbb948000},{0xbb94a000},{0xbb94c000},{0xbb94e000},{0xbb950000},{0xbb952000},{0xbb954000},{0xbb956000},{0xbb958000},{0xbb95a000},{0xbb95c000},{0xbb95e000},{0xbb960000},{0xbb962000},{0xbb964000},{0xbb966000},{0xbb968000},{0xbb96a000},{0xbb96c000},{0xbb96e000},{0xbb970000},{0xbb972000},{0xbb974000},{0xbb976000},{0xbb978000},{0xbb97a000},{0xbb97c000},{0xbb97e000}, -{0xbb980000},{0xbb982000},{0xbb984000},{0xbb986000},{0xbb988000},{0xbb98a000},{0xbb98c000},{0xbb98e000},{0xbb990000},{0xbb992000},{0xbb994000},{0xbb996000},{0xbb998000},{0xbb99a000},{0xbb99c000},{0xbb99e000},{0xbb9a0000},{0xbb9a2000},{0xbb9a4000},{0xbb9a6000},{0xbb9a8000},{0xbb9aa000},{0xbb9ac000},{0xbb9ae000},{0xbb9b0000},{0xbb9b2000},{0xbb9b4000},{0xbb9b6000},{0xbb9b8000},{0xbb9ba000},{0xbb9bc000},{0xbb9be000}, -{0xbb9c0000},{0xbb9c2000},{0xbb9c4000},{0xbb9c6000},{0xbb9c8000},{0xbb9ca000},{0xbb9cc000},{0xbb9ce000},{0xbb9d0000},{0xbb9d2000},{0xbb9d4000},{0xbb9d6000},{0xbb9d8000},{0xbb9da000},{0xbb9dc000},{0xbb9de000},{0xbb9e0000},{0xbb9e2000},{0xbb9e4000},{0xbb9e6000},{0xbb9e8000},{0xbb9ea000},{0xbb9ec000},{0xbb9ee000},{0xbb9f0000},{0xbb9f2000},{0xbb9f4000},{0xbb9f6000},{0xbb9f8000},{0xbb9fa000},{0xbb9fc000},{0xbb9fe000}, -{0xbba00000},{0xbba02000},{0xbba04000},{0xbba06000},{0xbba08000},{0xbba0a000},{0xbba0c000},{0xbba0e000},{0xbba10000},{0xbba12000},{0xbba14000},{0xbba16000},{0xbba18000},{0xbba1a000},{0xbba1c000},{0xbba1e000},{0xbba20000},{0xbba22000},{0xbba24000},{0xbba26000},{0xbba28000},{0xbba2a000},{0xbba2c000},{0xbba2e000},{0xbba30000},{0xbba32000},{0xbba34000},{0xbba36000},{0xbba38000},{0xbba3a000},{0xbba3c000},{0xbba3e000}, -{0xbba40000},{0xbba42000},{0xbba44000},{0xbba46000},{0xbba48000},{0xbba4a000},{0xbba4c000},{0xbba4e000},{0xbba50000},{0xbba52000},{0xbba54000},{0xbba56000},{0xbba58000},{0xbba5a000},{0xbba5c000},{0xbba5e000},{0xbba60000},{0xbba62000},{0xbba64000},{0xbba66000},{0xbba68000},{0xbba6a000},{0xbba6c000},{0xbba6e000},{0xbba70000},{0xbba72000},{0xbba74000},{0xbba76000},{0xbba78000},{0xbba7a000},{0xbba7c000},{0xbba7e000}, -{0xbba80000},{0xbba82000},{0xbba84000},{0xbba86000},{0xbba88000},{0xbba8a000},{0xbba8c000},{0xbba8e000},{0xbba90000},{0xbba92000},{0xbba94000},{0xbba96000},{0xbba98000},{0xbba9a000},{0xbba9c000},{0xbba9e000},{0xbbaa0000},{0xbbaa2000},{0xbbaa4000},{0xbbaa6000},{0xbbaa8000},{0xbbaaa000},{0xbbaac000},{0xbbaae000},{0xbbab0000},{0xbbab2000},{0xbbab4000},{0xbbab6000},{0xbbab8000},{0xbbaba000},{0xbbabc000},{0xbbabe000}, -{0xbbac0000},{0xbbac2000},{0xbbac4000},{0xbbac6000},{0xbbac8000},{0xbbaca000},{0xbbacc000},{0xbbace000},{0xbbad0000},{0xbbad2000},{0xbbad4000},{0xbbad6000},{0xbbad8000},{0xbbada000},{0xbbadc000},{0xbbade000},{0xbbae0000},{0xbbae2000},{0xbbae4000},{0xbbae6000},{0xbbae8000},{0xbbaea000},{0xbbaec000},{0xbbaee000},{0xbbaf0000},{0xbbaf2000},{0xbbaf4000},{0xbbaf6000},{0xbbaf8000},{0xbbafa000},{0xbbafc000},{0xbbafe000}, -{0xbbb00000},{0xbbb02000},{0xbbb04000},{0xbbb06000},{0xbbb08000},{0xbbb0a000},{0xbbb0c000},{0xbbb0e000},{0xbbb10000},{0xbbb12000},{0xbbb14000},{0xbbb16000},{0xbbb18000},{0xbbb1a000},{0xbbb1c000},{0xbbb1e000},{0xbbb20000},{0xbbb22000},{0xbbb24000},{0xbbb26000},{0xbbb28000},{0xbbb2a000},{0xbbb2c000},{0xbbb2e000},{0xbbb30000},{0xbbb32000},{0xbbb34000},{0xbbb36000},{0xbbb38000},{0xbbb3a000},{0xbbb3c000},{0xbbb3e000}, -{0xbbb40000},{0xbbb42000},{0xbbb44000},{0xbbb46000},{0xbbb48000},{0xbbb4a000},{0xbbb4c000},{0xbbb4e000},{0xbbb50000},{0xbbb52000},{0xbbb54000},{0xbbb56000},{0xbbb58000},{0xbbb5a000},{0xbbb5c000},{0xbbb5e000},{0xbbb60000},{0xbbb62000},{0xbbb64000},{0xbbb66000},{0xbbb68000},{0xbbb6a000},{0xbbb6c000},{0xbbb6e000},{0xbbb70000},{0xbbb72000},{0xbbb74000},{0xbbb76000},{0xbbb78000},{0xbbb7a000},{0xbbb7c000},{0xbbb7e000}, -{0xbbb80000},{0xbbb82000},{0xbbb84000},{0xbbb86000},{0xbbb88000},{0xbbb8a000},{0xbbb8c000},{0xbbb8e000},{0xbbb90000},{0xbbb92000},{0xbbb94000},{0xbbb96000},{0xbbb98000},{0xbbb9a000},{0xbbb9c000},{0xbbb9e000},{0xbbba0000},{0xbbba2000},{0xbbba4000},{0xbbba6000},{0xbbba8000},{0xbbbaa000},{0xbbbac000},{0xbbbae000},{0xbbbb0000},{0xbbbb2000},{0xbbbb4000},{0xbbbb6000},{0xbbbb8000},{0xbbbba000},{0xbbbbc000},{0xbbbbe000}, -{0xbbbc0000},{0xbbbc2000},{0xbbbc4000},{0xbbbc6000},{0xbbbc8000},{0xbbbca000},{0xbbbcc000},{0xbbbce000},{0xbbbd0000},{0xbbbd2000},{0xbbbd4000},{0xbbbd6000},{0xbbbd8000},{0xbbbda000},{0xbbbdc000},{0xbbbde000},{0xbbbe0000},{0xbbbe2000},{0xbbbe4000},{0xbbbe6000},{0xbbbe8000},{0xbbbea000},{0xbbbec000},{0xbbbee000},{0xbbbf0000},{0xbbbf2000},{0xbbbf4000},{0xbbbf6000},{0xbbbf8000},{0xbbbfa000},{0xbbbfc000},{0xbbbfe000}, -{0xbbc00000},{0xbbc02000},{0xbbc04000},{0xbbc06000},{0xbbc08000},{0xbbc0a000},{0xbbc0c000},{0xbbc0e000},{0xbbc10000},{0xbbc12000},{0xbbc14000},{0xbbc16000},{0xbbc18000},{0xbbc1a000},{0xbbc1c000},{0xbbc1e000},{0xbbc20000},{0xbbc22000},{0xbbc24000},{0xbbc26000},{0xbbc28000},{0xbbc2a000},{0xbbc2c000},{0xbbc2e000},{0xbbc30000},{0xbbc32000},{0xbbc34000},{0xbbc36000},{0xbbc38000},{0xbbc3a000},{0xbbc3c000},{0xbbc3e000}, -{0xbbc40000},{0xbbc42000},{0xbbc44000},{0xbbc46000},{0xbbc48000},{0xbbc4a000},{0xbbc4c000},{0xbbc4e000},{0xbbc50000},{0xbbc52000},{0xbbc54000},{0xbbc56000},{0xbbc58000},{0xbbc5a000},{0xbbc5c000},{0xbbc5e000},{0xbbc60000},{0xbbc62000},{0xbbc64000},{0xbbc66000},{0xbbc68000},{0xbbc6a000},{0xbbc6c000},{0xbbc6e000},{0xbbc70000},{0xbbc72000},{0xbbc74000},{0xbbc76000},{0xbbc78000},{0xbbc7a000},{0xbbc7c000},{0xbbc7e000}, -{0xbbc80000},{0xbbc82000},{0xbbc84000},{0xbbc86000},{0xbbc88000},{0xbbc8a000},{0xbbc8c000},{0xbbc8e000},{0xbbc90000},{0xbbc92000},{0xbbc94000},{0xbbc96000},{0xbbc98000},{0xbbc9a000},{0xbbc9c000},{0xbbc9e000},{0xbbca0000},{0xbbca2000},{0xbbca4000},{0xbbca6000},{0xbbca8000},{0xbbcaa000},{0xbbcac000},{0xbbcae000},{0xbbcb0000},{0xbbcb2000},{0xbbcb4000},{0xbbcb6000},{0xbbcb8000},{0xbbcba000},{0xbbcbc000},{0xbbcbe000}, -{0xbbcc0000},{0xbbcc2000},{0xbbcc4000},{0xbbcc6000},{0xbbcc8000},{0xbbcca000},{0xbbccc000},{0xbbcce000},{0xbbcd0000},{0xbbcd2000},{0xbbcd4000},{0xbbcd6000},{0xbbcd8000},{0xbbcda000},{0xbbcdc000},{0xbbcde000},{0xbbce0000},{0xbbce2000},{0xbbce4000},{0xbbce6000},{0xbbce8000},{0xbbcea000},{0xbbcec000},{0xbbcee000},{0xbbcf0000},{0xbbcf2000},{0xbbcf4000},{0xbbcf6000},{0xbbcf8000},{0xbbcfa000},{0xbbcfc000},{0xbbcfe000}, -{0xbbd00000},{0xbbd02000},{0xbbd04000},{0xbbd06000},{0xbbd08000},{0xbbd0a000},{0xbbd0c000},{0xbbd0e000},{0xbbd10000},{0xbbd12000},{0xbbd14000},{0xbbd16000},{0xbbd18000},{0xbbd1a000},{0xbbd1c000},{0xbbd1e000},{0xbbd20000},{0xbbd22000},{0xbbd24000},{0xbbd26000},{0xbbd28000},{0xbbd2a000},{0xbbd2c000},{0xbbd2e000},{0xbbd30000},{0xbbd32000},{0xbbd34000},{0xbbd36000},{0xbbd38000},{0xbbd3a000},{0xbbd3c000},{0xbbd3e000}, -{0xbbd40000},{0xbbd42000},{0xbbd44000},{0xbbd46000},{0xbbd48000},{0xbbd4a000},{0xbbd4c000},{0xbbd4e000},{0xbbd50000},{0xbbd52000},{0xbbd54000},{0xbbd56000},{0xbbd58000},{0xbbd5a000},{0xbbd5c000},{0xbbd5e000},{0xbbd60000},{0xbbd62000},{0xbbd64000},{0xbbd66000},{0xbbd68000},{0xbbd6a000},{0xbbd6c000},{0xbbd6e000},{0xbbd70000},{0xbbd72000},{0xbbd74000},{0xbbd76000},{0xbbd78000},{0xbbd7a000},{0xbbd7c000},{0xbbd7e000}, -{0xbbd80000},{0xbbd82000},{0xbbd84000},{0xbbd86000},{0xbbd88000},{0xbbd8a000},{0xbbd8c000},{0xbbd8e000},{0xbbd90000},{0xbbd92000},{0xbbd94000},{0xbbd96000},{0xbbd98000},{0xbbd9a000},{0xbbd9c000},{0xbbd9e000},{0xbbda0000},{0xbbda2000},{0xbbda4000},{0xbbda6000},{0xbbda8000},{0xbbdaa000},{0xbbdac000},{0xbbdae000},{0xbbdb0000},{0xbbdb2000},{0xbbdb4000},{0xbbdb6000},{0xbbdb8000},{0xbbdba000},{0xbbdbc000},{0xbbdbe000}, -{0xbbdc0000},{0xbbdc2000},{0xbbdc4000},{0xbbdc6000},{0xbbdc8000},{0xbbdca000},{0xbbdcc000},{0xbbdce000},{0xbbdd0000},{0xbbdd2000},{0xbbdd4000},{0xbbdd6000},{0xbbdd8000},{0xbbdda000},{0xbbddc000},{0xbbdde000},{0xbbde0000},{0xbbde2000},{0xbbde4000},{0xbbde6000},{0xbbde8000},{0xbbdea000},{0xbbdec000},{0xbbdee000},{0xbbdf0000},{0xbbdf2000},{0xbbdf4000},{0xbbdf6000},{0xbbdf8000},{0xbbdfa000},{0xbbdfc000},{0xbbdfe000}, -{0xbbe00000},{0xbbe02000},{0xbbe04000},{0xbbe06000},{0xbbe08000},{0xbbe0a000},{0xbbe0c000},{0xbbe0e000},{0xbbe10000},{0xbbe12000},{0xbbe14000},{0xbbe16000},{0xbbe18000},{0xbbe1a000},{0xbbe1c000},{0xbbe1e000},{0xbbe20000},{0xbbe22000},{0xbbe24000},{0xbbe26000},{0xbbe28000},{0xbbe2a000},{0xbbe2c000},{0xbbe2e000},{0xbbe30000},{0xbbe32000},{0xbbe34000},{0xbbe36000},{0xbbe38000},{0xbbe3a000},{0xbbe3c000},{0xbbe3e000}, -{0xbbe40000},{0xbbe42000},{0xbbe44000},{0xbbe46000},{0xbbe48000},{0xbbe4a000},{0xbbe4c000},{0xbbe4e000},{0xbbe50000},{0xbbe52000},{0xbbe54000},{0xbbe56000},{0xbbe58000},{0xbbe5a000},{0xbbe5c000},{0xbbe5e000},{0xbbe60000},{0xbbe62000},{0xbbe64000},{0xbbe66000},{0xbbe68000},{0xbbe6a000},{0xbbe6c000},{0xbbe6e000},{0xbbe70000},{0xbbe72000},{0xbbe74000},{0xbbe76000},{0xbbe78000},{0xbbe7a000},{0xbbe7c000},{0xbbe7e000}, -{0xbbe80000},{0xbbe82000},{0xbbe84000},{0xbbe86000},{0xbbe88000},{0xbbe8a000},{0xbbe8c000},{0xbbe8e000},{0xbbe90000},{0xbbe92000},{0xbbe94000},{0xbbe96000},{0xbbe98000},{0xbbe9a000},{0xbbe9c000},{0xbbe9e000},{0xbbea0000},{0xbbea2000},{0xbbea4000},{0xbbea6000},{0xbbea8000},{0xbbeaa000},{0xbbeac000},{0xbbeae000},{0xbbeb0000},{0xbbeb2000},{0xbbeb4000},{0xbbeb6000},{0xbbeb8000},{0xbbeba000},{0xbbebc000},{0xbbebe000}, -{0xbbec0000},{0xbbec2000},{0xbbec4000},{0xbbec6000},{0xbbec8000},{0xbbeca000},{0xbbecc000},{0xbbece000},{0xbbed0000},{0xbbed2000},{0xbbed4000},{0xbbed6000},{0xbbed8000},{0xbbeda000},{0xbbedc000},{0xbbede000},{0xbbee0000},{0xbbee2000},{0xbbee4000},{0xbbee6000},{0xbbee8000},{0xbbeea000},{0xbbeec000},{0xbbeee000},{0xbbef0000},{0xbbef2000},{0xbbef4000},{0xbbef6000},{0xbbef8000},{0xbbefa000},{0xbbefc000},{0xbbefe000}, -{0xbbf00000},{0xbbf02000},{0xbbf04000},{0xbbf06000},{0xbbf08000},{0xbbf0a000},{0xbbf0c000},{0xbbf0e000},{0xbbf10000},{0xbbf12000},{0xbbf14000},{0xbbf16000},{0xbbf18000},{0xbbf1a000},{0xbbf1c000},{0xbbf1e000},{0xbbf20000},{0xbbf22000},{0xbbf24000},{0xbbf26000},{0xbbf28000},{0xbbf2a000},{0xbbf2c000},{0xbbf2e000},{0xbbf30000},{0xbbf32000},{0xbbf34000},{0xbbf36000},{0xbbf38000},{0xbbf3a000},{0xbbf3c000},{0xbbf3e000}, -{0xbbf40000},{0xbbf42000},{0xbbf44000},{0xbbf46000},{0xbbf48000},{0xbbf4a000},{0xbbf4c000},{0xbbf4e000},{0xbbf50000},{0xbbf52000},{0xbbf54000},{0xbbf56000},{0xbbf58000},{0xbbf5a000},{0xbbf5c000},{0xbbf5e000},{0xbbf60000},{0xbbf62000},{0xbbf64000},{0xbbf66000},{0xbbf68000},{0xbbf6a000},{0xbbf6c000},{0xbbf6e000},{0xbbf70000},{0xbbf72000},{0xbbf74000},{0xbbf76000},{0xbbf78000},{0xbbf7a000},{0xbbf7c000},{0xbbf7e000}, -{0xbbf80000},{0xbbf82000},{0xbbf84000},{0xbbf86000},{0xbbf88000},{0xbbf8a000},{0xbbf8c000},{0xbbf8e000},{0xbbf90000},{0xbbf92000},{0xbbf94000},{0xbbf96000},{0xbbf98000},{0xbbf9a000},{0xbbf9c000},{0xbbf9e000},{0xbbfa0000},{0xbbfa2000},{0xbbfa4000},{0xbbfa6000},{0xbbfa8000},{0xbbfaa000},{0xbbfac000},{0xbbfae000},{0xbbfb0000},{0xbbfb2000},{0xbbfb4000},{0xbbfb6000},{0xbbfb8000},{0xbbfba000},{0xbbfbc000},{0xbbfbe000}, -{0xbbfc0000},{0xbbfc2000},{0xbbfc4000},{0xbbfc6000},{0xbbfc8000},{0xbbfca000},{0xbbfcc000},{0xbbfce000},{0xbbfd0000},{0xbbfd2000},{0xbbfd4000},{0xbbfd6000},{0xbbfd8000},{0xbbfda000},{0xbbfdc000},{0xbbfde000},{0xbbfe0000},{0xbbfe2000},{0xbbfe4000},{0xbbfe6000},{0xbbfe8000},{0xbbfea000},{0xbbfec000},{0xbbfee000},{0xbbff0000},{0xbbff2000},{0xbbff4000},{0xbbff6000},{0xbbff8000},{0xbbffa000},{0xbbffc000},{0xbbffe000}, -{0xbc000000},{0xbc002000},{0xbc004000},{0xbc006000},{0xbc008000},{0xbc00a000},{0xbc00c000},{0xbc00e000},{0xbc010000},{0xbc012000},{0xbc014000},{0xbc016000},{0xbc018000},{0xbc01a000},{0xbc01c000},{0xbc01e000},{0xbc020000},{0xbc022000},{0xbc024000},{0xbc026000},{0xbc028000},{0xbc02a000},{0xbc02c000},{0xbc02e000},{0xbc030000},{0xbc032000},{0xbc034000},{0xbc036000},{0xbc038000},{0xbc03a000},{0xbc03c000},{0xbc03e000}, -{0xbc040000},{0xbc042000},{0xbc044000},{0xbc046000},{0xbc048000},{0xbc04a000},{0xbc04c000},{0xbc04e000},{0xbc050000},{0xbc052000},{0xbc054000},{0xbc056000},{0xbc058000},{0xbc05a000},{0xbc05c000},{0xbc05e000},{0xbc060000},{0xbc062000},{0xbc064000},{0xbc066000},{0xbc068000},{0xbc06a000},{0xbc06c000},{0xbc06e000},{0xbc070000},{0xbc072000},{0xbc074000},{0xbc076000},{0xbc078000},{0xbc07a000},{0xbc07c000},{0xbc07e000}, -{0xbc080000},{0xbc082000},{0xbc084000},{0xbc086000},{0xbc088000},{0xbc08a000},{0xbc08c000},{0xbc08e000},{0xbc090000},{0xbc092000},{0xbc094000},{0xbc096000},{0xbc098000},{0xbc09a000},{0xbc09c000},{0xbc09e000},{0xbc0a0000},{0xbc0a2000},{0xbc0a4000},{0xbc0a6000},{0xbc0a8000},{0xbc0aa000},{0xbc0ac000},{0xbc0ae000},{0xbc0b0000},{0xbc0b2000},{0xbc0b4000},{0xbc0b6000},{0xbc0b8000},{0xbc0ba000},{0xbc0bc000},{0xbc0be000}, -{0xbc0c0000},{0xbc0c2000},{0xbc0c4000},{0xbc0c6000},{0xbc0c8000},{0xbc0ca000},{0xbc0cc000},{0xbc0ce000},{0xbc0d0000},{0xbc0d2000},{0xbc0d4000},{0xbc0d6000},{0xbc0d8000},{0xbc0da000},{0xbc0dc000},{0xbc0de000},{0xbc0e0000},{0xbc0e2000},{0xbc0e4000},{0xbc0e6000},{0xbc0e8000},{0xbc0ea000},{0xbc0ec000},{0xbc0ee000},{0xbc0f0000},{0xbc0f2000},{0xbc0f4000},{0xbc0f6000},{0xbc0f8000},{0xbc0fa000},{0xbc0fc000},{0xbc0fe000}, -{0xbc100000},{0xbc102000},{0xbc104000},{0xbc106000},{0xbc108000},{0xbc10a000},{0xbc10c000},{0xbc10e000},{0xbc110000},{0xbc112000},{0xbc114000},{0xbc116000},{0xbc118000},{0xbc11a000},{0xbc11c000},{0xbc11e000},{0xbc120000},{0xbc122000},{0xbc124000},{0xbc126000},{0xbc128000},{0xbc12a000},{0xbc12c000},{0xbc12e000},{0xbc130000},{0xbc132000},{0xbc134000},{0xbc136000},{0xbc138000},{0xbc13a000},{0xbc13c000},{0xbc13e000}, -{0xbc140000},{0xbc142000},{0xbc144000},{0xbc146000},{0xbc148000},{0xbc14a000},{0xbc14c000},{0xbc14e000},{0xbc150000},{0xbc152000},{0xbc154000},{0xbc156000},{0xbc158000},{0xbc15a000},{0xbc15c000},{0xbc15e000},{0xbc160000},{0xbc162000},{0xbc164000},{0xbc166000},{0xbc168000},{0xbc16a000},{0xbc16c000},{0xbc16e000},{0xbc170000},{0xbc172000},{0xbc174000},{0xbc176000},{0xbc178000},{0xbc17a000},{0xbc17c000},{0xbc17e000}, -{0xbc180000},{0xbc182000},{0xbc184000},{0xbc186000},{0xbc188000},{0xbc18a000},{0xbc18c000},{0xbc18e000},{0xbc190000},{0xbc192000},{0xbc194000},{0xbc196000},{0xbc198000},{0xbc19a000},{0xbc19c000},{0xbc19e000},{0xbc1a0000},{0xbc1a2000},{0xbc1a4000},{0xbc1a6000},{0xbc1a8000},{0xbc1aa000},{0xbc1ac000},{0xbc1ae000},{0xbc1b0000},{0xbc1b2000},{0xbc1b4000},{0xbc1b6000},{0xbc1b8000},{0xbc1ba000},{0xbc1bc000},{0xbc1be000}, -{0xbc1c0000},{0xbc1c2000},{0xbc1c4000},{0xbc1c6000},{0xbc1c8000},{0xbc1ca000},{0xbc1cc000},{0xbc1ce000},{0xbc1d0000},{0xbc1d2000},{0xbc1d4000},{0xbc1d6000},{0xbc1d8000},{0xbc1da000},{0xbc1dc000},{0xbc1de000},{0xbc1e0000},{0xbc1e2000},{0xbc1e4000},{0xbc1e6000},{0xbc1e8000},{0xbc1ea000},{0xbc1ec000},{0xbc1ee000},{0xbc1f0000},{0xbc1f2000},{0xbc1f4000},{0xbc1f6000},{0xbc1f8000},{0xbc1fa000},{0xbc1fc000},{0xbc1fe000}, -{0xbc200000},{0xbc202000},{0xbc204000},{0xbc206000},{0xbc208000},{0xbc20a000},{0xbc20c000},{0xbc20e000},{0xbc210000},{0xbc212000},{0xbc214000},{0xbc216000},{0xbc218000},{0xbc21a000},{0xbc21c000},{0xbc21e000},{0xbc220000},{0xbc222000},{0xbc224000},{0xbc226000},{0xbc228000},{0xbc22a000},{0xbc22c000},{0xbc22e000},{0xbc230000},{0xbc232000},{0xbc234000},{0xbc236000},{0xbc238000},{0xbc23a000},{0xbc23c000},{0xbc23e000}, -{0xbc240000},{0xbc242000},{0xbc244000},{0xbc246000},{0xbc248000},{0xbc24a000},{0xbc24c000},{0xbc24e000},{0xbc250000},{0xbc252000},{0xbc254000},{0xbc256000},{0xbc258000},{0xbc25a000},{0xbc25c000},{0xbc25e000},{0xbc260000},{0xbc262000},{0xbc264000},{0xbc266000},{0xbc268000},{0xbc26a000},{0xbc26c000},{0xbc26e000},{0xbc270000},{0xbc272000},{0xbc274000},{0xbc276000},{0xbc278000},{0xbc27a000},{0xbc27c000},{0xbc27e000}, -{0xbc280000},{0xbc282000},{0xbc284000},{0xbc286000},{0xbc288000},{0xbc28a000},{0xbc28c000},{0xbc28e000},{0xbc290000},{0xbc292000},{0xbc294000},{0xbc296000},{0xbc298000},{0xbc29a000},{0xbc29c000},{0xbc29e000},{0xbc2a0000},{0xbc2a2000},{0xbc2a4000},{0xbc2a6000},{0xbc2a8000},{0xbc2aa000},{0xbc2ac000},{0xbc2ae000},{0xbc2b0000},{0xbc2b2000},{0xbc2b4000},{0xbc2b6000},{0xbc2b8000},{0xbc2ba000},{0xbc2bc000},{0xbc2be000}, -{0xbc2c0000},{0xbc2c2000},{0xbc2c4000},{0xbc2c6000},{0xbc2c8000},{0xbc2ca000},{0xbc2cc000},{0xbc2ce000},{0xbc2d0000},{0xbc2d2000},{0xbc2d4000},{0xbc2d6000},{0xbc2d8000},{0xbc2da000},{0xbc2dc000},{0xbc2de000},{0xbc2e0000},{0xbc2e2000},{0xbc2e4000},{0xbc2e6000},{0xbc2e8000},{0xbc2ea000},{0xbc2ec000},{0xbc2ee000},{0xbc2f0000},{0xbc2f2000},{0xbc2f4000},{0xbc2f6000},{0xbc2f8000},{0xbc2fa000},{0xbc2fc000},{0xbc2fe000}, -{0xbc300000},{0xbc302000},{0xbc304000},{0xbc306000},{0xbc308000},{0xbc30a000},{0xbc30c000},{0xbc30e000},{0xbc310000},{0xbc312000},{0xbc314000},{0xbc316000},{0xbc318000},{0xbc31a000},{0xbc31c000},{0xbc31e000},{0xbc320000},{0xbc322000},{0xbc324000},{0xbc326000},{0xbc328000},{0xbc32a000},{0xbc32c000},{0xbc32e000},{0xbc330000},{0xbc332000},{0xbc334000},{0xbc336000},{0xbc338000},{0xbc33a000},{0xbc33c000},{0xbc33e000}, -{0xbc340000},{0xbc342000},{0xbc344000},{0xbc346000},{0xbc348000},{0xbc34a000},{0xbc34c000},{0xbc34e000},{0xbc350000},{0xbc352000},{0xbc354000},{0xbc356000},{0xbc358000},{0xbc35a000},{0xbc35c000},{0xbc35e000},{0xbc360000},{0xbc362000},{0xbc364000},{0xbc366000},{0xbc368000},{0xbc36a000},{0xbc36c000},{0xbc36e000},{0xbc370000},{0xbc372000},{0xbc374000},{0xbc376000},{0xbc378000},{0xbc37a000},{0xbc37c000},{0xbc37e000}, -{0xbc380000},{0xbc382000},{0xbc384000},{0xbc386000},{0xbc388000},{0xbc38a000},{0xbc38c000},{0xbc38e000},{0xbc390000},{0xbc392000},{0xbc394000},{0xbc396000},{0xbc398000},{0xbc39a000},{0xbc39c000},{0xbc39e000},{0xbc3a0000},{0xbc3a2000},{0xbc3a4000},{0xbc3a6000},{0xbc3a8000},{0xbc3aa000},{0xbc3ac000},{0xbc3ae000},{0xbc3b0000},{0xbc3b2000},{0xbc3b4000},{0xbc3b6000},{0xbc3b8000},{0xbc3ba000},{0xbc3bc000},{0xbc3be000}, -{0xbc3c0000},{0xbc3c2000},{0xbc3c4000},{0xbc3c6000},{0xbc3c8000},{0xbc3ca000},{0xbc3cc000},{0xbc3ce000},{0xbc3d0000},{0xbc3d2000},{0xbc3d4000},{0xbc3d6000},{0xbc3d8000},{0xbc3da000},{0xbc3dc000},{0xbc3de000},{0xbc3e0000},{0xbc3e2000},{0xbc3e4000},{0xbc3e6000},{0xbc3e8000},{0xbc3ea000},{0xbc3ec000},{0xbc3ee000},{0xbc3f0000},{0xbc3f2000},{0xbc3f4000},{0xbc3f6000},{0xbc3f8000},{0xbc3fa000},{0xbc3fc000},{0xbc3fe000}, -{0xbc400000},{0xbc402000},{0xbc404000},{0xbc406000},{0xbc408000},{0xbc40a000},{0xbc40c000},{0xbc40e000},{0xbc410000},{0xbc412000},{0xbc414000},{0xbc416000},{0xbc418000},{0xbc41a000},{0xbc41c000},{0xbc41e000},{0xbc420000},{0xbc422000},{0xbc424000},{0xbc426000},{0xbc428000},{0xbc42a000},{0xbc42c000},{0xbc42e000},{0xbc430000},{0xbc432000},{0xbc434000},{0xbc436000},{0xbc438000},{0xbc43a000},{0xbc43c000},{0xbc43e000}, -{0xbc440000},{0xbc442000},{0xbc444000},{0xbc446000},{0xbc448000},{0xbc44a000},{0xbc44c000},{0xbc44e000},{0xbc450000},{0xbc452000},{0xbc454000},{0xbc456000},{0xbc458000},{0xbc45a000},{0xbc45c000},{0xbc45e000},{0xbc460000},{0xbc462000},{0xbc464000},{0xbc466000},{0xbc468000},{0xbc46a000},{0xbc46c000},{0xbc46e000},{0xbc470000},{0xbc472000},{0xbc474000},{0xbc476000},{0xbc478000},{0xbc47a000},{0xbc47c000},{0xbc47e000}, -{0xbc480000},{0xbc482000},{0xbc484000},{0xbc486000},{0xbc488000},{0xbc48a000},{0xbc48c000},{0xbc48e000},{0xbc490000},{0xbc492000},{0xbc494000},{0xbc496000},{0xbc498000},{0xbc49a000},{0xbc49c000},{0xbc49e000},{0xbc4a0000},{0xbc4a2000},{0xbc4a4000},{0xbc4a6000},{0xbc4a8000},{0xbc4aa000},{0xbc4ac000},{0xbc4ae000},{0xbc4b0000},{0xbc4b2000},{0xbc4b4000},{0xbc4b6000},{0xbc4b8000},{0xbc4ba000},{0xbc4bc000},{0xbc4be000}, -{0xbc4c0000},{0xbc4c2000},{0xbc4c4000},{0xbc4c6000},{0xbc4c8000},{0xbc4ca000},{0xbc4cc000},{0xbc4ce000},{0xbc4d0000},{0xbc4d2000},{0xbc4d4000},{0xbc4d6000},{0xbc4d8000},{0xbc4da000},{0xbc4dc000},{0xbc4de000},{0xbc4e0000},{0xbc4e2000},{0xbc4e4000},{0xbc4e6000},{0xbc4e8000},{0xbc4ea000},{0xbc4ec000},{0xbc4ee000},{0xbc4f0000},{0xbc4f2000},{0xbc4f4000},{0xbc4f6000},{0xbc4f8000},{0xbc4fa000},{0xbc4fc000},{0xbc4fe000}, -{0xbc500000},{0xbc502000},{0xbc504000},{0xbc506000},{0xbc508000},{0xbc50a000},{0xbc50c000},{0xbc50e000},{0xbc510000},{0xbc512000},{0xbc514000},{0xbc516000},{0xbc518000},{0xbc51a000},{0xbc51c000},{0xbc51e000},{0xbc520000},{0xbc522000},{0xbc524000},{0xbc526000},{0xbc528000},{0xbc52a000},{0xbc52c000},{0xbc52e000},{0xbc530000},{0xbc532000},{0xbc534000},{0xbc536000},{0xbc538000},{0xbc53a000},{0xbc53c000},{0xbc53e000}, -{0xbc540000},{0xbc542000},{0xbc544000},{0xbc546000},{0xbc548000},{0xbc54a000},{0xbc54c000},{0xbc54e000},{0xbc550000},{0xbc552000},{0xbc554000},{0xbc556000},{0xbc558000},{0xbc55a000},{0xbc55c000},{0xbc55e000},{0xbc560000},{0xbc562000},{0xbc564000},{0xbc566000},{0xbc568000},{0xbc56a000},{0xbc56c000},{0xbc56e000},{0xbc570000},{0xbc572000},{0xbc574000},{0xbc576000},{0xbc578000},{0xbc57a000},{0xbc57c000},{0xbc57e000}, -{0xbc580000},{0xbc582000},{0xbc584000},{0xbc586000},{0xbc588000},{0xbc58a000},{0xbc58c000},{0xbc58e000},{0xbc590000},{0xbc592000},{0xbc594000},{0xbc596000},{0xbc598000},{0xbc59a000},{0xbc59c000},{0xbc59e000},{0xbc5a0000},{0xbc5a2000},{0xbc5a4000},{0xbc5a6000},{0xbc5a8000},{0xbc5aa000},{0xbc5ac000},{0xbc5ae000},{0xbc5b0000},{0xbc5b2000},{0xbc5b4000},{0xbc5b6000},{0xbc5b8000},{0xbc5ba000},{0xbc5bc000},{0xbc5be000}, -{0xbc5c0000},{0xbc5c2000},{0xbc5c4000},{0xbc5c6000},{0xbc5c8000},{0xbc5ca000},{0xbc5cc000},{0xbc5ce000},{0xbc5d0000},{0xbc5d2000},{0xbc5d4000},{0xbc5d6000},{0xbc5d8000},{0xbc5da000},{0xbc5dc000},{0xbc5de000},{0xbc5e0000},{0xbc5e2000},{0xbc5e4000},{0xbc5e6000},{0xbc5e8000},{0xbc5ea000},{0xbc5ec000},{0xbc5ee000},{0xbc5f0000},{0xbc5f2000},{0xbc5f4000},{0xbc5f6000},{0xbc5f8000},{0xbc5fa000},{0xbc5fc000},{0xbc5fe000}, -{0xbc600000},{0xbc602000},{0xbc604000},{0xbc606000},{0xbc608000},{0xbc60a000},{0xbc60c000},{0xbc60e000},{0xbc610000},{0xbc612000},{0xbc614000},{0xbc616000},{0xbc618000},{0xbc61a000},{0xbc61c000},{0xbc61e000},{0xbc620000},{0xbc622000},{0xbc624000},{0xbc626000},{0xbc628000},{0xbc62a000},{0xbc62c000},{0xbc62e000},{0xbc630000},{0xbc632000},{0xbc634000},{0xbc636000},{0xbc638000},{0xbc63a000},{0xbc63c000},{0xbc63e000}, -{0xbc640000},{0xbc642000},{0xbc644000},{0xbc646000},{0xbc648000},{0xbc64a000},{0xbc64c000},{0xbc64e000},{0xbc650000},{0xbc652000},{0xbc654000},{0xbc656000},{0xbc658000},{0xbc65a000},{0xbc65c000},{0xbc65e000},{0xbc660000},{0xbc662000},{0xbc664000},{0xbc666000},{0xbc668000},{0xbc66a000},{0xbc66c000},{0xbc66e000},{0xbc670000},{0xbc672000},{0xbc674000},{0xbc676000},{0xbc678000},{0xbc67a000},{0xbc67c000},{0xbc67e000}, -{0xbc680000},{0xbc682000},{0xbc684000},{0xbc686000},{0xbc688000},{0xbc68a000},{0xbc68c000},{0xbc68e000},{0xbc690000},{0xbc692000},{0xbc694000},{0xbc696000},{0xbc698000},{0xbc69a000},{0xbc69c000},{0xbc69e000},{0xbc6a0000},{0xbc6a2000},{0xbc6a4000},{0xbc6a6000},{0xbc6a8000},{0xbc6aa000},{0xbc6ac000},{0xbc6ae000},{0xbc6b0000},{0xbc6b2000},{0xbc6b4000},{0xbc6b6000},{0xbc6b8000},{0xbc6ba000},{0xbc6bc000},{0xbc6be000}, -{0xbc6c0000},{0xbc6c2000},{0xbc6c4000},{0xbc6c6000},{0xbc6c8000},{0xbc6ca000},{0xbc6cc000},{0xbc6ce000},{0xbc6d0000},{0xbc6d2000},{0xbc6d4000},{0xbc6d6000},{0xbc6d8000},{0xbc6da000},{0xbc6dc000},{0xbc6de000},{0xbc6e0000},{0xbc6e2000},{0xbc6e4000},{0xbc6e6000},{0xbc6e8000},{0xbc6ea000},{0xbc6ec000},{0xbc6ee000},{0xbc6f0000},{0xbc6f2000},{0xbc6f4000},{0xbc6f6000},{0xbc6f8000},{0xbc6fa000},{0xbc6fc000},{0xbc6fe000}, -{0xbc700000},{0xbc702000},{0xbc704000},{0xbc706000},{0xbc708000},{0xbc70a000},{0xbc70c000},{0xbc70e000},{0xbc710000},{0xbc712000},{0xbc714000},{0xbc716000},{0xbc718000},{0xbc71a000},{0xbc71c000},{0xbc71e000},{0xbc720000},{0xbc722000},{0xbc724000},{0xbc726000},{0xbc728000},{0xbc72a000},{0xbc72c000},{0xbc72e000},{0xbc730000},{0xbc732000},{0xbc734000},{0xbc736000},{0xbc738000},{0xbc73a000},{0xbc73c000},{0xbc73e000}, -{0xbc740000},{0xbc742000},{0xbc744000},{0xbc746000},{0xbc748000},{0xbc74a000},{0xbc74c000},{0xbc74e000},{0xbc750000},{0xbc752000},{0xbc754000},{0xbc756000},{0xbc758000},{0xbc75a000},{0xbc75c000},{0xbc75e000},{0xbc760000},{0xbc762000},{0xbc764000},{0xbc766000},{0xbc768000},{0xbc76a000},{0xbc76c000},{0xbc76e000},{0xbc770000},{0xbc772000},{0xbc774000},{0xbc776000},{0xbc778000},{0xbc77a000},{0xbc77c000},{0xbc77e000}, -{0xbc780000},{0xbc782000},{0xbc784000},{0xbc786000},{0xbc788000},{0xbc78a000},{0xbc78c000},{0xbc78e000},{0xbc790000},{0xbc792000},{0xbc794000},{0xbc796000},{0xbc798000},{0xbc79a000},{0xbc79c000},{0xbc79e000},{0xbc7a0000},{0xbc7a2000},{0xbc7a4000},{0xbc7a6000},{0xbc7a8000},{0xbc7aa000},{0xbc7ac000},{0xbc7ae000},{0xbc7b0000},{0xbc7b2000},{0xbc7b4000},{0xbc7b6000},{0xbc7b8000},{0xbc7ba000},{0xbc7bc000},{0xbc7be000}, -{0xbc7c0000},{0xbc7c2000},{0xbc7c4000},{0xbc7c6000},{0xbc7c8000},{0xbc7ca000},{0xbc7cc000},{0xbc7ce000},{0xbc7d0000},{0xbc7d2000},{0xbc7d4000},{0xbc7d6000},{0xbc7d8000},{0xbc7da000},{0xbc7dc000},{0xbc7de000},{0xbc7e0000},{0xbc7e2000},{0xbc7e4000},{0xbc7e6000},{0xbc7e8000},{0xbc7ea000},{0xbc7ec000},{0xbc7ee000},{0xbc7f0000},{0xbc7f2000},{0xbc7f4000},{0xbc7f6000},{0xbc7f8000},{0xbc7fa000},{0xbc7fc000},{0xbc7fe000}, -{0xbc800000},{0xbc802000},{0xbc804000},{0xbc806000},{0xbc808000},{0xbc80a000},{0xbc80c000},{0xbc80e000},{0xbc810000},{0xbc812000},{0xbc814000},{0xbc816000},{0xbc818000},{0xbc81a000},{0xbc81c000},{0xbc81e000},{0xbc820000},{0xbc822000},{0xbc824000},{0xbc826000},{0xbc828000},{0xbc82a000},{0xbc82c000},{0xbc82e000},{0xbc830000},{0xbc832000},{0xbc834000},{0xbc836000},{0xbc838000},{0xbc83a000},{0xbc83c000},{0xbc83e000}, -{0xbc840000},{0xbc842000},{0xbc844000},{0xbc846000},{0xbc848000},{0xbc84a000},{0xbc84c000},{0xbc84e000},{0xbc850000},{0xbc852000},{0xbc854000},{0xbc856000},{0xbc858000},{0xbc85a000},{0xbc85c000},{0xbc85e000},{0xbc860000},{0xbc862000},{0xbc864000},{0xbc866000},{0xbc868000},{0xbc86a000},{0xbc86c000},{0xbc86e000},{0xbc870000},{0xbc872000},{0xbc874000},{0xbc876000},{0xbc878000},{0xbc87a000},{0xbc87c000},{0xbc87e000}, -{0xbc880000},{0xbc882000},{0xbc884000},{0xbc886000},{0xbc888000},{0xbc88a000},{0xbc88c000},{0xbc88e000},{0xbc890000},{0xbc892000},{0xbc894000},{0xbc896000},{0xbc898000},{0xbc89a000},{0xbc89c000},{0xbc89e000},{0xbc8a0000},{0xbc8a2000},{0xbc8a4000},{0xbc8a6000},{0xbc8a8000},{0xbc8aa000},{0xbc8ac000},{0xbc8ae000},{0xbc8b0000},{0xbc8b2000},{0xbc8b4000},{0xbc8b6000},{0xbc8b8000},{0xbc8ba000},{0xbc8bc000},{0xbc8be000}, -{0xbc8c0000},{0xbc8c2000},{0xbc8c4000},{0xbc8c6000},{0xbc8c8000},{0xbc8ca000},{0xbc8cc000},{0xbc8ce000},{0xbc8d0000},{0xbc8d2000},{0xbc8d4000},{0xbc8d6000},{0xbc8d8000},{0xbc8da000},{0xbc8dc000},{0xbc8de000},{0xbc8e0000},{0xbc8e2000},{0xbc8e4000},{0xbc8e6000},{0xbc8e8000},{0xbc8ea000},{0xbc8ec000},{0xbc8ee000},{0xbc8f0000},{0xbc8f2000},{0xbc8f4000},{0xbc8f6000},{0xbc8f8000},{0xbc8fa000},{0xbc8fc000},{0xbc8fe000}, -{0xbc900000},{0xbc902000},{0xbc904000},{0xbc906000},{0xbc908000},{0xbc90a000},{0xbc90c000},{0xbc90e000},{0xbc910000},{0xbc912000},{0xbc914000},{0xbc916000},{0xbc918000},{0xbc91a000},{0xbc91c000},{0xbc91e000},{0xbc920000},{0xbc922000},{0xbc924000},{0xbc926000},{0xbc928000},{0xbc92a000},{0xbc92c000},{0xbc92e000},{0xbc930000},{0xbc932000},{0xbc934000},{0xbc936000},{0xbc938000},{0xbc93a000},{0xbc93c000},{0xbc93e000}, -{0xbc940000},{0xbc942000},{0xbc944000},{0xbc946000},{0xbc948000},{0xbc94a000},{0xbc94c000},{0xbc94e000},{0xbc950000},{0xbc952000},{0xbc954000},{0xbc956000},{0xbc958000},{0xbc95a000},{0xbc95c000},{0xbc95e000},{0xbc960000},{0xbc962000},{0xbc964000},{0xbc966000},{0xbc968000},{0xbc96a000},{0xbc96c000},{0xbc96e000},{0xbc970000},{0xbc972000},{0xbc974000},{0xbc976000},{0xbc978000},{0xbc97a000},{0xbc97c000},{0xbc97e000}, -{0xbc980000},{0xbc982000},{0xbc984000},{0xbc986000},{0xbc988000},{0xbc98a000},{0xbc98c000},{0xbc98e000},{0xbc990000},{0xbc992000},{0xbc994000},{0xbc996000},{0xbc998000},{0xbc99a000},{0xbc99c000},{0xbc99e000},{0xbc9a0000},{0xbc9a2000},{0xbc9a4000},{0xbc9a6000},{0xbc9a8000},{0xbc9aa000},{0xbc9ac000},{0xbc9ae000},{0xbc9b0000},{0xbc9b2000},{0xbc9b4000},{0xbc9b6000},{0xbc9b8000},{0xbc9ba000},{0xbc9bc000},{0xbc9be000}, -{0xbc9c0000},{0xbc9c2000},{0xbc9c4000},{0xbc9c6000},{0xbc9c8000},{0xbc9ca000},{0xbc9cc000},{0xbc9ce000},{0xbc9d0000},{0xbc9d2000},{0xbc9d4000},{0xbc9d6000},{0xbc9d8000},{0xbc9da000},{0xbc9dc000},{0xbc9de000},{0xbc9e0000},{0xbc9e2000},{0xbc9e4000},{0xbc9e6000},{0xbc9e8000},{0xbc9ea000},{0xbc9ec000},{0xbc9ee000},{0xbc9f0000},{0xbc9f2000},{0xbc9f4000},{0xbc9f6000},{0xbc9f8000},{0xbc9fa000},{0xbc9fc000},{0xbc9fe000}, -{0xbca00000},{0xbca02000},{0xbca04000},{0xbca06000},{0xbca08000},{0xbca0a000},{0xbca0c000},{0xbca0e000},{0xbca10000},{0xbca12000},{0xbca14000},{0xbca16000},{0xbca18000},{0xbca1a000},{0xbca1c000},{0xbca1e000},{0xbca20000},{0xbca22000},{0xbca24000},{0xbca26000},{0xbca28000},{0xbca2a000},{0xbca2c000},{0xbca2e000},{0xbca30000},{0xbca32000},{0xbca34000},{0xbca36000},{0xbca38000},{0xbca3a000},{0xbca3c000},{0xbca3e000}, -{0xbca40000},{0xbca42000},{0xbca44000},{0xbca46000},{0xbca48000},{0xbca4a000},{0xbca4c000},{0xbca4e000},{0xbca50000},{0xbca52000},{0xbca54000},{0xbca56000},{0xbca58000},{0xbca5a000},{0xbca5c000},{0xbca5e000},{0xbca60000},{0xbca62000},{0xbca64000},{0xbca66000},{0xbca68000},{0xbca6a000},{0xbca6c000},{0xbca6e000},{0xbca70000},{0xbca72000},{0xbca74000},{0xbca76000},{0xbca78000},{0xbca7a000},{0xbca7c000},{0xbca7e000}, -{0xbca80000},{0xbca82000},{0xbca84000},{0xbca86000},{0xbca88000},{0xbca8a000},{0xbca8c000},{0xbca8e000},{0xbca90000},{0xbca92000},{0xbca94000},{0xbca96000},{0xbca98000},{0xbca9a000},{0xbca9c000},{0xbca9e000},{0xbcaa0000},{0xbcaa2000},{0xbcaa4000},{0xbcaa6000},{0xbcaa8000},{0xbcaaa000},{0xbcaac000},{0xbcaae000},{0xbcab0000},{0xbcab2000},{0xbcab4000},{0xbcab6000},{0xbcab8000},{0xbcaba000},{0xbcabc000},{0xbcabe000}, -{0xbcac0000},{0xbcac2000},{0xbcac4000},{0xbcac6000},{0xbcac8000},{0xbcaca000},{0xbcacc000},{0xbcace000},{0xbcad0000},{0xbcad2000},{0xbcad4000},{0xbcad6000},{0xbcad8000},{0xbcada000},{0xbcadc000},{0xbcade000},{0xbcae0000},{0xbcae2000},{0xbcae4000},{0xbcae6000},{0xbcae8000},{0xbcaea000},{0xbcaec000},{0xbcaee000},{0xbcaf0000},{0xbcaf2000},{0xbcaf4000},{0xbcaf6000},{0xbcaf8000},{0xbcafa000},{0xbcafc000},{0xbcafe000}, -{0xbcb00000},{0xbcb02000},{0xbcb04000},{0xbcb06000},{0xbcb08000},{0xbcb0a000},{0xbcb0c000},{0xbcb0e000},{0xbcb10000},{0xbcb12000},{0xbcb14000},{0xbcb16000},{0xbcb18000},{0xbcb1a000},{0xbcb1c000},{0xbcb1e000},{0xbcb20000},{0xbcb22000},{0xbcb24000},{0xbcb26000},{0xbcb28000},{0xbcb2a000},{0xbcb2c000},{0xbcb2e000},{0xbcb30000},{0xbcb32000},{0xbcb34000},{0xbcb36000},{0xbcb38000},{0xbcb3a000},{0xbcb3c000},{0xbcb3e000}, -{0xbcb40000},{0xbcb42000},{0xbcb44000},{0xbcb46000},{0xbcb48000},{0xbcb4a000},{0xbcb4c000},{0xbcb4e000},{0xbcb50000},{0xbcb52000},{0xbcb54000},{0xbcb56000},{0xbcb58000},{0xbcb5a000},{0xbcb5c000},{0xbcb5e000},{0xbcb60000},{0xbcb62000},{0xbcb64000},{0xbcb66000},{0xbcb68000},{0xbcb6a000},{0xbcb6c000},{0xbcb6e000},{0xbcb70000},{0xbcb72000},{0xbcb74000},{0xbcb76000},{0xbcb78000},{0xbcb7a000},{0xbcb7c000},{0xbcb7e000}, -{0xbcb80000},{0xbcb82000},{0xbcb84000},{0xbcb86000},{0xbcb88000},{0xbcb8a000},{0xbcb8c000},{0xbcb8e000},{0xbcb90000},{0xbcb92000},{0xbcb94000},{0xbcb96000},{0xbcb98000},{0xbcb9a000},{0xbcb9c000},{0xbcb9e000},{0xbcba0000},{0xbcba2000},{0xbcba4000},{0xbcba6000},{0xbcba8000},{0xbcbaa000},{0xbcbac000},{0xbcbae000},{0xbcbb0000},{0xbcbb2000},{0xbcbb4000},{0xbcbb6000},{0xbcbb8000},{0xbcbba000},{0xbcbbc000},{0xbcbbe000}, -{0xbcbc0000},{0xbcbc2000},{0xbcbc4000},{0xbcbc6000},{0xbcbc8000},{0xbcbca000},{0xbcbcc000},{0xbcbce000},{0xbcbd0000},{0xbcbd2000},{0xbcbd4000},{0xbcbd6000},{0xbcbd8000},{0xbcbda000},{0xbcbdc000},{0xbcbde000},{0xbcbe0000},{0xbcbe2000},{0xbcbe4000},{0xbcbe6000},{0xbcbe8000},{0xbcbea000},{0xbcbec000},{0xbcbee000},{0xbcbf0000},{0xbcbf2000},{0xbcbf4000},{0xbcbf6000},{0xbcbf8000},{0xbcbfa000},{0xbcbfc000},{0xbcbfe000}, -{0xbcc00000},{0xbcc02000},{0xbcc04000},{0xbcc06000},{0xbcc08000},{0xbcc0a000},{0xbcc0c000},{0xbcc0e000},{0xbcc10000},{0xbcc12000},{0xbcc14000},{0xbcc16000},{0xbcc18000},{0xbcc1a000},{0xbcc1c000},{0xbcc1e000},{0xbcc20000},{0xbcc22000},{0xbcc24000},{0xbcc26000},{0xbcc28000},{0xbcc2a000},{0xbcc2c000},{0xbcc2e000},{0xbcc30000},{0xbcc32000},{0xbcc34000},{0xbcc36000},{0xbcc38000},{0xbcc3a000},{0xbcc3c000},{0xbcc3e000}, -{0xbcc40000},{0xbcc42000},{0xbcc44000},{0xbcc46000},{0xbcc48000},{0xbcc4a000},{0xbcc4c000},{0xbcc4e000},{0xbcc50000},{0xbcc52000},{0xbcc54000},{0xbcc56000},{0xbcc58000},{0xbcc5a000},{0xbcc5c000},{0xbcc5e000},{0xbcc60000},{0xbcc62000},{0xbcc64000},{0xbcc66000},{0xbcc68000},{0xbcc6a000},{0xbcc6c000},{0xbcc6e000},{0xbcc70000},{0xbcc72000},{0xbcc74000},{0xbcc76000},{0xbcc78000},{0xbcc7a000},{0xbcc7c000},{0xbcc7e000}, -{0xbcc80000},{0xbcc82000},{0xbcc84000},{0xbcc86000},{0xbcc88000},{0xbcc8a000},{0xbcc8c000},{0xbcc8e000},{0xbcc90000},{0xbcc92000},{0xbcc94000},{0xbcc96000},{0xbcc98000},{0xbcc9a000},{0xbcc9c000},{0xbcc9e000},{0xbcca0000},{0xbcca2000},{0xbcca4000},{0xbcca6000},{0xbcca8000},{0xbccaa000},{0xbccac000},{0xbccae000},{0xbccb0000},{0xbccb2000},{0xbccb4000},{0xbccb6000},{0xbccb8000},{0xbccba000},{0xbccbc000},{0xbccbe000}, -{0xbccc0000},{0xbccc2000},{0xbccc4000},{0xbccc6000},{0xbccc8000},{0xbccca000},{0xbcccc000},{0xbccce000},{0xbccd0000},{0xbccd2000},{0xbccd4000},{0xbccd6000},{0xbccd8000},{0xbccda000},{0xbccdc000},{0xbccde000},{0xbcce0000},{0xbcce2000},{0xbcce4000},{0xbcce6000},{0xbcce8000},{0xbccea000},{0xbccec000},{0xbccee000},{0xbccf0000},{0xbccf2000},{0xbccf4000},{0xbccf6000},{0xbccf8000},{0xbccfa000},{0xbccfc000},{0xbccfe000}, -{0xbcd00000},{0xbcd02000},{0xbcd04000},{0xbcd06000},{0xbcd08000},{0xbcd0a000},{0xbcd0c000},{0xbcd0e000},{0xbcd10000},{0xbcd12000},{0xbcd14000},{0xbcd16000},{0xbcd18000},{0xbcd1a000},{0xbcd1c000},{0xbcd1e000},{0xbcd20000},{0xbcd22000},{0xbcd24000},{0xbcd26000},{0xbcd28000},{0xbcd2a000},{0xbcd2c000},{0xbcd2e000},{0xbcd30000},{0xbcd32000},{0xbcd34000},{0xbcd36000},{0xbcd38000},{0xbcd3a000},{0xbcd3c000},{0xbcd3e000}, -{0xbcd40000},{0xbcd42000},{0xbcd44000},{0xbcd46000},{0xbcd48000},{0xbcd4a000},{0xbcd4c000},{0xbcd4e000},{0xbcd50000},{0xbcd52000},{0xbcd54000},{0xbcd56000},{0xbcd58000},{0xbcd5a000},{0xbcd5c000},{0xbcd5e000},{0xbcd60000},{0xbcd62000},{0xbcd64000},{0xbcd66000},{0xbcd68000},{0xbcd6a000},{0xbcd6c000},{0xbcd6e000},{0xbcd70000},{0xbcd72000},{0xbcd74000},{0xbcd76000},{0xbcd78000},{0xbcd7a000},{0xbcd7c000},{0xbcd7e000}, -{0xbcd80000},{0xbcd82000},{0xbcd84000},{0xbcd86000},{0xbcd88000},{0xbcd8a000},{0xbcd8c000},{0xbcd8e000},{0xbcd90000},{0xbcd92000},{0xbcd94000},{0xbcd96000},{0xbcd98000},{0xbcd9a000},{0xbcd9c000},{0xbcd9e000},{0xbcda0000},{0xbcda2000},{0xbcda4000},{0xbcda6000},{0xbcda8000},{0xbcdaa000},{0xbcdac000},{0xbcdae000},{0xbcdb0000},{0xbcdb2000},{0xbcdb4000},{0xbcdb6000},{0xbcdb8000},{0xbcdba000},{0xbcdbc000},{0xbcdbe000}, -{0xbcdc0000},{0xbcdc2000},{0xbcdc4000},{0xbcdc6000},{0xbcdc8000},{0xbcdca000},{0xbcdcc000},{0xbcdce000},{0xbcdd0000},{0xbcdd2000},{0xbcdd4000},{0xbcdd6000},{0xbcdd8000},{0xbcdda000},{0xbcddc000},{0xbcdde000},{0xbcde0000},{0xbcde2000},{0xbcde4000},{0xbcde6000},{0xbcde8000},{0xbcdea000},{0xbcdec000},{0xbcdee000},{0xbcdf0000},{0xbcdf2000},{0xbcdf4000},{0xbcdf6000},{0xbcdf8000},{0xbcdfa000},{0xbcdfc000},{0xbcdfe000}, -{0xbce00000},{0xbce02000},{0xbce04000},{0xbce06000},{0xbce08000},{0xbce0a000},{0xbce0c000},{0xbce0e000},{0xbce10000},{0xbce12000},{0xbce14000},{0xbce16000},{0xbce18000},{0xbce1a000},{0xbce1c000},{0xbce1e000},{0xbce20000},{0xbce22000},{0xbce24000},{0xbce26000},{0xbce28000},{0xbce2a000},{0xbce2c000},{0xbce2e000},{0xbce30000},{0xbce32000},{0xbce34000},{0xbce36000},{0xbce38000},{0xbce3a000},{0xbce3c000},{0xbce3e000}, -{0xbce40000},{0xbce42000},{0xbce44000},{0xbce46000},{0xbce48000},{0xbce4a000},{0xbce4c000},{0xbce4e000},{0xbce50000},{0xbce52000},{0xbce54000},{0xbce56000},{0xbce58000},{0xbce5a000},{0xbce5c000},{0xbce5e000},{0xbce60000},{0xbce62000},{0xbce64000},{0xbce66000},{0xbce68000},{0xbce6a000},{0xbce6c000},{0xbce6e000},{0xbce70000},{0xbce72000},{0xbce74000},{0xbce76000},{0xbce78000},{0xbce7a000},{0xbce7c000},{0xbce7e000}, -{0xbce80000},{0xbce82000},{0xbce84000},{0xbce86000},{0xbce88000},{0xbce8a000},{0xbce8c000},{0xbce8e000},{0xbce90000},{0xbce92000},{0xbce94000},{0xbce96000},{0xbce98000},{0xbce9a000},{0xbce9c000},{0xbce9e000},{0xbcea0000},{0xbcea2000},{0xbcea4000},{0xbcea6000},{0xbcea8000},{0xbceaa000},{0xbceac000},{0xbceae000},{0xbceb0000},{0xbceb2000},{0xbceb4000},{0xbceb6000},{0xbceb8000},{0xbceba000},{0xbcebc000},{0xbcebe000}, -{0xbcec0000},{0xbcec2000},{0xbcec4000},{0xbcec6000},{0xbcec8000},{0xbceca000},{0xbcecc000},{0xbcece000},{0xbced0000},{0xbced2000},{0xbced4000},{0xbced6000},{0xbced8000},{0xbceda000},{0xbcedc000},{0xbcede000},{0xbcee0000},{0xbcee2000},{0xbcee4000},{0xbcee6000},{0xbcee8000},{0xbceea000},{0xbceec000},{0xbceee000},{0xbcef0000},{0xbcef2000},{0xbcef4000},{0xbcef6000},{0xbcef8000},{0xbcefa000},{0xbcefc000},{0xbcefe000}, -{0xbcf00000},{0xbcf02000},{0xbcf04000},{0xbcf06000},{0xbcf08000},{0xbcf0a000},{0xbcf0c000},{0xbcf0e000},{0xbcf10000},{0xbcf12000},{0xbcf14000},{0xbcf16000},{0xbcf18000},{0xbcf1a000},{0xbcf1c000},{0xbcf1e000},{0xbcf20000},{0xbcf22000},{0xbcf24000},{0xbcf26000},{0xbcf28000},{0xbcf2a000},{0xbcf2c000},{0xbcf2e000},{0xbcf30000},{0xbcf32000},{0xbcf34000},{0xbcf36000},{0xbcf38000},{0xbcf3a000},{0xbcf3c000},{0xbcf3e000}, -{0xbcf40000},{0xbcf42000},{0xbcf44000},{0xbcf46000},{0xbcf48000},{0xbcf4a000},{0xbcf4c000},{0xbcf4e000},{0xbcf50000},{0xbcf52000},{0xbcf54000},{0xbcf56000},{0xbcf58000},{0xbcf5a000},{0xbcf5c000},{0xbcf5e000},{0xbcf60000},{0xbcf62000},{0xbcf64000},{0xbcf66000},{0xbcf68000},{0xbcf6a000},{0xbcf6c000},{0xbcf6e000},{0xbcf70000},{0xbcf72000},{0xbcf74000},{0xbcf76000},{0xbcf78000},{0xbcf7a000},{0xbcf7c000},{0xbcf7e000}, -{0xbcf80000},{0xbcf82000},{0xbcf84000},{0xbcf86000},{0xbcf88000},{0xbcf8a000},{0xbcf8c000},{0xbcf8e000},{0xbcf90000},{0xbcf92000},{0xbcf94000},{0xbcf96000},{0xbcf98000},{0xbcf9a000},{0xbcf9c000},{0xbcf9e000},{0xbcfa0000},{0xbcfa2000},{0xbcfa4000},{0xbcfa6000},{0xbcfa8000},{0xbcfaa000},{0xbcfac000},{0xbcfae000},{0xbcfb0000},{0xbcfb2000},{0xbcfb4000},{0xbcfb6000},{0xbcfb8000},{0xbcfba000},{0xbcfbc000},{0xbcfbe000}, -{0xbcfc0000},{0xbcfc2000},{0xbcfc4000},{0xbcfc6000},{0xbcfc8000},{0xbcfca000},{0xbcfcc000},{0xbcfce000},{0xbcfd0000},{0xbcfd2000},{0xbcfd4000},{0xbcfd6000},{0xbcfd8000},{0xbcfda000},{0xbcfdc000},{0xbcfde000},{0xbcfe0000},{0xbcfe2000},{0xbcfe4000},{0xbcfe6000},{0xbcfe8000},{0xbcfea000},{0xbcfec000},{0xbcfee000},{0xbcff0000},{0xbcff2000},{0xbcff4000},{0xbcff6000},{0xbcff8000},{0xbcffa000},{0xbcffc000},{0xbcffe000}, -{0xbd000000},{0xbd002000},{0xbd004000},{0xbd006000},{0xbd008000},{0xbd00a000},{0xbd00c000},{0xbd00e000},{0xbd010000},{0xbd012000},{0xbd014000},{0xbd016000},{0xbd018000},{0xbd01a000},{0xbd01c000},{0xbd01e000},{0xbd020000},{0xbd022000},{0xbd024000},{0xbd026000},{0xbd028000},{0xbd02a000},{0xbd02c000},{0xbd02e000},{0xbd030000},{0xbd032000},{0xbd034000},{0xbd036000},{0xbd038000},{0xbd03a000},{0xbd03c000},{0xbd03e000}, -{0xbd040000},{0xbd042000},{0xbd044000},{0xbd046000},{0xbd048000},{0xbd04a000},{0xbd04c000},{0xbd04e000},{0xbd050000},{0xbd052000},{0xbd054000},{0xbd056000},{0xbd058000},{0xbd05a000},{0xbd05c000},{0xbd05e000},{0xbd060000},{0xbd062000},{0xbd064000},{0xbd066000},{0xbd068000},{0xbd06a000},{0xbd06c000},{0xbd06e000},{0xbd070000},{0xbd072000},{0xbd074000},{0xbd076000},{0xbd078000},{0xbd07a000},{0xbd07c000},{0xbd07e000}, -{0xbd080000},{0xbd082000},{0xbd084000},{0xbd086000},{0xbd088000},{0xbd08a000},{0xbd08c000},{0xbd08e000},{0xbd090000},{0xbd092000},{0xbd094000},{0xbd096000},{0xbd098000},{0xbd09a000},{0xbd09c000},{0xbd09e000},{0xbd0a0000},{0xbd0a2000},{0xbd0a4000},{0xbd0a6000},{0xbd0a8000},{0xbd0aa000},{0xbd0ac000},{0xbd0ae000},{0xbd0b0000},{0xbd0b2000},{0xbd0b4000},{0xbd0b6000},{0xbd0b8000},{0xbd0ba000},{0xbd0bc000},{0xbd0be000}, -{0xbd0c0000},{0xbd0c2000},{0xbd0c4000},{0xbd0c6000},{0xbd0c8000},{0xbd0ca000},{0xbd0cc000},{0xbd0ce000},{0xbd0d0000},{0xbd0d2000},{0xbd0d4000},{0xbd0d6000},{0xbd0d8000},{0xbd0da000},{0xbd0dc000},{0xbd0de000},{0xbd0e0000},{0xbd0e2000},{0xbd0e4000},{0xbd0e6000},{0xbd0e8000},{0xbd0ea000},{0xbd0ec000},{0xbd0ee000},{0xbd0f0000},{0xbd0f2000},{0xbd0f4000},{0xbd0f6000},{0xbd0f8000},{0xbd0fa000},{0xbd0fc000},{0xbd0fe000}, -{0xbd100000},{0xbd102000},{0xbd104000},{0xbd106000},{0xbd108000},{0xbd10a000},{0xbd10c000},{0xbd10e000},{0xbd110000},{0xbd112000},{0xbd114000},{0xbd116000},{0xbd118000},{0xbd11a000},{0xbd11c000},{0xbd11e000},{0xbd120000},{0xbd122000},{0xbd124000},{0xbd126000},{0xbd128000},{0xbd12a000},{0xbd12c000},{0xbd12e000},{0xbd130000},{0xbd132000},{0xbd134000},{0xbd136000},{0xbd138000},{0xbd13a000},{0xbd13c000},{0xbd13e000}, -{0xbd140000},{0xbd142000},{0xbd144000},{0xbd146000},{0xbd148000},{0xbd14a000},{0xbd14c000},{0xbd14e000},{0xbd150000},{0xbd152000},{0xbd154000},{0xbd156000},{0xbd158000},{0xbd15a000},{0xbd15c000},{0xbd15e000},{0xbd160000},{0xbd162000},{0xbd164000},{0xbd166000},{0xbd168000},{0xbd16a000},{0xbd16c000},{0xbd16e000},{0xbd170000},{0xbd172000},{0xbd174000},{0xbd176000},{0xbd178000},{0xbd17a000},{0xbd17c000},{0xbd17e000}, -{0xbd180000},{0xbd182000},{0xbd184000},{0xbd186000},{0xbd188000},{0xbd18a000},{0xbd18c000},{0xbd18e000},{0xbd190000},{0xbd192000},{0xbd194000},{0xbd196000},{0xbd198000},{0xbd19a000},{0xbd19c000},{0xbd19e000},{0xbd1a0000},{0xbd1a2000},{0xbd1a4000},{0xbd1a6000},{0xbd1a8000},{0xbd1aa000},{0xbd1ac000},{0xbd1ae000},{0xbd1b0000},{0xbd1b2000},{0xbd1b4000},{0xbd1b6000},{0xbd1b8000},{0xbd1ba000},{0xbd1bc000},{0xbd1be000}, -{0xbd1c0000},{0xbd1c2000},{0xbd1c4000},{0xbd1c6000},{0xbd1c8000},{0xbd1ca000},{0xbd1cc000},{0xbd1ce000},{0xbd1d0000},{0xbd1d2000},{0xbd1d4000},{0xbd1d6000},{0xbd1d8000},{0xbd1da000},{0xbd1dc000},{0xbd1de000},{0xbd1e0000},{0xbd1e2000},{0xbd1e4000},{0xbd1e6000},{0xbd1e8000},{0xbd1ea000},{0xbd1ec000},{0xbd1ee000},{0xbd1f0000},{0xbd1f2000},{0xbd1f4000},{0xbd1f6000},{0xbd1f8000},{0xbd1fa000},{0xbd1fc000},{0xbd1fe000}, -{0xbd200000},{0xbd202000},{0xbd204000},{0xbd206000},{0xbd208000},{0xbd20a000},{0xbd20c000},{0xbd20e000},{0xbd210000},{0xbd212000},{0xbd214000},{0xbd216000},{0xbd218000},{0xbd21a000},{0xbd21c000},{0xbd21e000},{0xbd220000},{0xbd222000},{0xbd224000},{0xbd226000},{0xbd228000},{0xbd22a000},{0xbd22c000},{0xbd22e000},{0xbd230000},{0xbd232000},{0xbd234000},{0xbd236000},{0xbd238000},{0xbd23a000},{0xbd23c000},{0xbd23e000}, -{0xbd240000},{0xbd242000},{0xbd244000},{0xbd246000},{0xbd248000},{0xbd24a000},{0xbd24c000},{0xbd24e000},{0xbd250000},{0xbd252000},{0xbd254000},{0xbd256000},{0xbd258000},{0xbd25a000},{0xbd25c000},{0xbd25e000},{0xbd260000},{0xbd262000},{0xbd264000},{0xbd266000},{0xbd268000},{0xbd26a000},{0xbd26c000},{0xbd26e000},{0xbd270000},{0xbd272000},{0xbd274000},{0xbd276000},{0xbd278000},{0xbd27a000},{0xbd27c000},{0xbd27e000}, -{0xbd280000},{0xbd282000},{0xbd284000},{0xbd286000},{0xbd288000},{0xbd28a000},{0xbd28c000},{0xbd28e000},{0xbd290000},{0xbd292000},{0xbd294000},{0xbd296000},{0xbd298000},{0xbd29a000},{0xbd29c000},{0xbd29e000},{0xbd2a0000},{0xbd2a2000},{0xbd2a4000},{0xbd2a6000},{0xbd2a8000},{0xbd2aa000},{0xbd2ac000},{0xbd2ae000},{0xbd2b0000},{0xbd2b2000},{0xbd2b4000},{0xbd2b6000},{0xbd2b8000},{0xbd2ba000},{0xbd2bc000},{0xbd2be000}, -{0xbd2c0000},{0xbd2c2000},{0xbd2c4000},{0xbd2c6000},{0xbd2c8000},{0xbd2ca000},{0xbd2cc000},{0xbd2ce000},{0xbd2d0000},{0xbd2d2000},{0xbd2d4000},{0xbd2d6000},{0xbd2d8000},{0xbd2da000},{0xbd2dc000},{0xbd2de000},{0xbd2e0000},{0xbd2e2000},{0xbd2e4000},{0xbd2e6000},{0xbd2e8000},{0xbd2ea000},{0xbd2ec000},{0xbd2ee000},{0xbd2f0000},{0xbd2f2000},{0xbd2f4000},{0xbd2f6000},{0xbd2f8000},{0xbd2fa000},{0xbd2fc000},{0xbd2fe000}, -{0xbd300000},{0xbd302000},{0xbd304000},{0xbd306000},{0xbd308000},{0xbd30a000},{0xbd30c000},{0xbd30e000},{0xbd310000},{0xbd312000},{0xbd314000},{0xbd316000},{0xbd318000},{0xbd31a000},{0xbd31c000},{0xbd31e000},{0xbd320000},{0xbd322000},{0xbd324000},{0xbd326000},{0xbd328000},{0xbd32a000},{0xbd32c000},{0xbd32e000},{0xbd330000},{0xbd332000},{0xbd334000},{0xbd336000},{0xbd338000},{0xbd33a000},{0xbd33c000},{0xbd33e000}, -{0xbd340000},{0xbd342000},{0xbd344000},{0xbd346000},{0xbd348000},{0xbd34a000},{0xbd34c000},{0xbd34e000},{0xbd350000},{0xbd352000},{0xbd354000},{0xbd356000},{0xbd358000},{0xbd35a000},{0xbd35c000},{0xbd35e000},{0xbd360000},{0xbd362000},{0xbd364000},{0xbd366000},{0xbd368000},{0xbd36a000},{0xbd36c000},{0xbd36e000},{0xbd370000},{0xbd372000},{0xbd374000},{0xbd376000},{0xbd378000},{0xbd37a000},{0xbd37c000},{0xbd37e000}, -{0xbd380000},{0xbd382000},{0xbd384000},{0xbd386000},{0xbd388000},{0xbd38a000},{0xbd38c000},{0xbd38e000},{0xbd390000},{0xbd392000},{0xbd394000},{0xbd396000},{0xbd398000},{0xbd39a000},{0xbd39c000},{0xbd39e000},{0xbd3a0000},{0xbd3a2000},{0xbd3a4000},{0xbd3a6000},{0xbd3a8000},{0xbd3aa000},{0xbd3ac000},{0xbd3ae000},{0xbd3b0000},{0xbd3b2000},{0xbd3b4000},{0xbd3b6000},{0xbd3b8000},{0xbd3ba000},{0xbd3bc000},{0xbd3be000}, -{0xbd3c0000},{0xbd3c2000},{0xbd3c4000},{0xbd3c6000},{0xbd3c8000},{0xbd3ca000},{0xbd3cc000},{0xbd3ce000},{0xbd3d0000},{0xbd3d2000},{0xbd3d4000},{0xbd3d6000},{0xbd3d8000},{0xbd3da000},{0xbd3dc000},{0xbd3de000},{0xbd3e0000},{0xbd3e2000},{0xbd3e4000},{0xbd3e6000},{0xbd3e8000},{0xbd3ea000},{0xbd3ec000},{0xbd3ee000},{0xbd3f0000},{0xbd3f2000},{0xbd3f4000},{0xbd3f6000},{0xbd3f8000},{0xbd3fa000},{0xbd3fc000},{0xbd3fe000}, -{0xbd400000},{0xbd402000},{0xbd404000},{0xbd406000},{0xbd408000},{0xbd40a000},{0xbd40c000},{0xbd40e000},{0xbd410000},{0xbd412000},{0xbd414000},{0xbd416000},{0xbd418000},{0xbd41a000},{0xbd41c000},{0xbd41e000},{0xbd420000},{0xbd422000},{0xbd424000},{0xbd426000},{0xbd428000},{0xbd42a000},{0xbd42c000},{0xbd42e000},{0xbd430000},{0xbd432000},{0xbd434000},{0xbd436000},{0xbd438000},{0xbd43a000},{0xbd43c000},{0xbd43e000}, -{0xbd440000},{0xbd442000},{0xbd444000},{0xbd446000},{0xbd448000},{0xbd44a000},{0xbd44c000},{0xbd44e000},{0xbd450000},{0xbd452000},{0xbd454000},{0xbd456000},{0xbd458000},{0xbd45a000},{0xbd45c000},{0xbd45e000},{0xbd460000},{0xbd462000},{0xbd464000},{0xbd466000},{0xbd468000},{0xbd46a000},{0xbd46c000},{0xbd46e000},{0xbd470000},{0xbd472000},{0xbd474000},{0xbd476000},{0xbd478000},{0xbd47a000},{0xbd47c000},{0xbd47e000}, -{0xbd480000},{0xbd482000},{0xbd484000},{0xbd486000},{0xbd488000},{0xbd48a000},{0xbd48c000},{0xbd48e000},{0xbd490000},{0xbd492000},{0xbd494000},{0xbd496000},{0xbd498000},{0xbd49a000},{0xbd49c000},{0xbd49e000},{0xbd4a0000},{0xbd4a2000},{0xbd4a4000},{0xbd4a6000},{0xbd4a8000},{0xbd4aa000},{0xbd4ac000},{0xbd4ae000},{0xbd4b0000},{0xbd4b2000},{0xbd4b4000},{0xbd4b6000},{0xbd4b8000},{0xbd4ba000},{0xbd4bc000},{0xbd4be000}, -{0xbd4c0000},{0xbd4c2000},{0xbd4c4000},{0xbd4c6000},{0xbd4c8000},{0xbd4ca000},{0xbd4cc000},{0xbd4ce000},{0xbd4d0000},{0xbd4d2000},{0xbd4d4000},{0xbd4d6000},{0xbd4d8000},{0xbd4da000},{0xbd4dc000},{0xbd4de000},{0xbd4e0000},{0xbd4e2000},{0xbd4e4000},{0xbd4e6000},{0xbd4e8000},{0xbd4ea000},{0xbd4ec000},{0xbd4ee000},{0xbd4f0000},{0xbd4f2000},{0xbd4f4000},{0xbd4f6000},{0xbd4f8000},{0xbd4fa000},{0xbd4fc000},{0xbd4fe000}, -{0xbd500000},{0xbd502000},{0xbd504000},{0xbd506000},{0xbd508000},{0xbd50a000},{0xbd50c000},{0xbd50e000},{0xbd510000},{0xbd512000},{0xbd514000},{0xbd516000},{0xbd518000},{0xbd51a000},{0xbd51c000},{0xbd51e000},{0xbd520000},{0xbd522000},{0xbd524000},{0xbd526000},{0xbd528000},{0xbd52a000},{0xbd52c000},{0xbd52e000},{0xbd530000},{0xbd532000},{0xbd534000},{0xbd536000},{0xbd538000},{0xbd53a000},{0xbd53c000},{0xbd53e000}, -{0xbd540000},{0xbd542000},{0xbd544000},{0xbd546000},{0xbd548000},{0xbd54a000},{0xbd54c000},{0xbd54e000},{0xbd550000},{0xbd552000},{0xbd554000},{0xbd556000},{0xbd558000},{0xbd55a000},{0xbd55c000},{0xbd55e000},{0xbd560000},{0xbd562000},{0xbd564000},{0xbd566000},{0xbd568000},{0xbd56a000},{0xbd56c000},{0xbd56e000},{0xbd570000},{0xbd572000},{0xbd574000},{0xbd576000},{0xbd578000},{0xbd57a000},{0xbd57c000},{0xbd57e000}, -{0xbd580000},{0xbd582000},{0xbd584000},{0xbd586000},{0xbd588000},{0xbd58a000},{0xbd58c000},{0xbd58e000},{0xbd590000},{0xbd592000},{0xbd594000},{0xbd596000},{0xbd598000},{0xbd59a000},{0xbd59c000},{0xbd59e000},{0xbd5a0000},{0xbd5a2000},{0xbd5a4000},{0xbd5a6000},{0xbd5a8000},{0xbd5aa000},{0xbd5ac000},{0xbd5ae000},{0xbd5b0000},{0xbd5b2000},{0xbd5b4000},{0xbd5b6000},{0xbd5b8000},{0xbd5ba000},{0xbd5bc000},{0xbd5be000}, -{0xbd5c0000},{0xbd5c2000},{0xbd5c4000},{0xbd5c6000},{0xbd5c8000},{0xbd5ca000},{0xbd5cc000},{0xbd5ce000},{0xbd5d0000},{0xbd5d2000},{0xbd5d4000},{0xbd5d6000},{0xbd5d8000},{0xbd5da000},{0xbd5dc000},{0xbd5de000},{0xbd5e0000},{0xbd5e2000},{0xbd5e4000},{0xbd5e6000},{0xbd5e8000},{0xbd5ea000},{0xbd5ec000},{0xbd5ee000},{0xbd5f0000},{0xbd5f2000},{0xbd5f4000},{0xbd5f6000},{0xbd5f8000},{0xbd5fa000},{0xbd5fc000},{0xbd5fe000}, -{0xbd600000},{0xbd602000},{0xbd604000},{0xbd606000},{0xbd608000},{0xbd60a000},{0xbd60c000},{0xbd60e000},{0xbd610000},{0xbd612000},{0xbd614000},{0xbd616000},{0xbd618000},{0xbd61a000},{0xbd61c000},{0xbd61e000},{0xbd620000},{0xbd622000},{0xbd624000},{0xbd626000},{0xbd628000},{0xbd62a000},{0xbd62c000},{0xbd62e000},{0xbd630000},{0xbd632000},{0xbd634000},{0xbd636000},{0xbd638000},{0xbd63a000},{0xbd63c000},{0xbd63e000}, -{0xbd640000},{0xbd642000},{0xbd644000},{0xbd646000},{0xbd648000},{0xbd64a000},{0xbd64c000},{0xbd64e000},{0xbd650000},{0xbd652000},{0xbd654000},{0xbd656000},{0xbd658000},{0xbd65a000},{0xbd65c000},{0xbd65e000},{0xbd660000},{0xbd662000},{0xbd664000},{0xbd666000},{0xbd668000},{0xbd66a000},{0xbd66c000},{0xbd66e000},{0xbd670000},{0xbd672000},{0xbd674000},{0xbd676000},{0xbd678000},{0xbd67a000},{0xbd67c000},{0xbd67e000}, -{0xbd680000},{0xbd682000},{0xbd684000},{0xbd686000},{0xbd688000},{0xbd68a000},{0xbd68c000},{0xbd68e000},{0xbd690000},{0xbd692000},{0xbd694000},{0xbd696000},{0xbd698000},{0xbd69a000},{0xbd69c000},{0xbd69e000},{0xbd6a0000},{0xbd6a2000},{0xbd6a4000},{0xbd6a6000},{0xbd6a8000},{0xbd6aa000},{0xbd6ac000},{0xbd6ae000},{0xbd6b0000},{0xbd6b2000},{0xbd6b4000},{0xbd6b6000},{0xbd6b8000},{0xbd6ba000},{0xbd6bc000},{0xbd6be000}, -{0xbd6c0000},{0xbd6c2000},{0xbd6c4000},{0xbd6c6000},{0xbd6c8000},{0xbd6ca000},{0xbd6cc000},{0xbd6ce000},{0xbd6d0000},{0xbd6d2000},{0xbd6d4000},{0xbd6d6000},{0xbd6d8000},{0xbd6da000},{0xbd6dc000},{0xbd6de000},{0xbd6e0000},{0xbd6e2000},{0xbd6e4000},{0xbd6e6000},{0xbd6e8000},{0xbd6ea000},{0xbd6ec000},{0xbd6ee000},{0xbd6f0000},{0xbd6f2000},{0xbd6f4000},{0xbd6f6000},{0xbd6f8000},{0xbd6fa000},{0xbd6fc000},{0xbd6fe000}, -{0xbd700000},{0xbd702000},{0xbd704000},{0xbd706000},{0xbd708000},{0xbd70a000},{0xbd70c000},{0xbd70e000},{0xbd710000},{0xbd712000},{0xbd714000},{0xbd716000},{0xbd718000},{0xbd71a000},{0xbd71c000},{0xbd71e000},{0xbd720000},{0xbd722000},{0xbd724000},{0xbd726000},{0xbd728000},{0xbd72a000},{0xbd72c000},{0xbd72e000},{0xbd730000},{0xbd732000},{0xbd734000},{0xbd736000},{0xbd738000},{0xbd73a000},{0xbd73c000},{0xbd73e000}, -{0xbd740000},{0xbd742000},{0xbd744000},{0xbd746000},{0xbd748000},{0xbd74a000},{0xbd74c000},{0xbd74e000},{0xbd750000},{0xbd752000},{0xbd754000},{0xbd756000},{0xbd758000},{0xbd75a000},{0xbd75c000},{0xbd75e000},{0xbd760000},{0xbd762000},{0xbd764000},{0xbd766000},{0xbd768000},{0xbd76a000},{0xbd76c000},{0xbd76e000},{0xbd770000},{0xbd772000},{0xbd774000},{0xbd776000},{0xbd778000},{0xbd77a000},{0xbd77c000},{0xbd77e000}, -{0xbd780000},{0xbd782000},{0xbd784000},{0xbd786000},{0xbd788000},{0xbd78a000},{0xbd78c000},{0xbd78e000},{0xbd790000},{0xbd792000},{0xbd794000},{0xbd796000},{0xbd798000},{0xbd79a000},{0xbd79c000},{0xbd79e000},{0xbd7a0000},{0xbd7a2000},{0xbd7a4000},{0xbd7a6000},{0xbd7a8000},{0xbd7aa000},{0xbd7ac000},{0xbd7ae000},{0xbd7b0000},{0xbd7b2000},{0xbd7b4000},{0xbd7b6000},{0xbd7b8000},{0xbd7ba000},{0xbd7bc000},{0xbd7be000}, -{0xbd7c0000},{0xbd7c2000},{0xbd7c4000},{0xbd7c6000},{0xbd7c8000},{0xbd7ca000},{0xbd7cc000},{0xbd7ce000},{0xbd7d0000},{0xbd7d2000},{0xbd7d4000},{0xbd7d6000},{0xbd7d8000},{0xbd7da000},{0xbd7dc000},{0xbd7de000},{0xbd7e0000},{0xbd7e2000},{0xbd7e4000},{0xbd7e6000},{0xbd7e8000},{0xbd7ea000},{0xbd7ec000},{0xbd7ee000},{0xbd7f0000},{0xbd7f2000},{0xbd7f4000},{0xbd7f6000},{0xbd7f8000},{0xbd7fa000},{0xbd7fc000},{0xbd7fe000}, -{0xbd800000},{0xbd802000},{0xbd804000},{0xbd806000},{0xbd808000},{0xbd80a000},{0xbd80c000},{0xbd80e000},{0xbd810000},{0xbd812000},{0xbd814000},{0xbd816000},{0xbd818000},{0xbd81a000},{0xbd81c000},{0xbd81e000},{0xbd820000},{0xbd822000},{0xbd824000},{0xbd826000},{0xbd828000},{0xbd82a000},{0xbd82c000},{0xbd82e000},{0xbd830000},{0xbd832000},{0xbd834000},{0xbd836000},{0xbd838000},{0xbd83a000},{0xbd83c000},{0xbd83e000}, -{0xbd840000},{0xbd842000},{0xbd844000},{0xbd846000},{0xbd848000},{0xbd84a000},{0xbd84c000},{0xbd84e000},{0xbd850000},{0xbd852000},{0xbd854000},{0xbd856000},{0xbd858000},{0xbd85a000},{0xbd85c000},{0xbd85e000},{0xbd860000},{0xbd862000},{0xbd864000},{0xbd866000},{0xbd868000},{0xbd86a000},{0xbd86c000},{0xbd86e000},{0xbd870000},{0xbd872000},{0xbd874000},{0xbd876000},{0xbd878000},{0xbd87a000},{0xbd87c000},{0xbd87e000}, -{0xbd880000},{0xbd882000},{0xbd884000},{0xbd886000},{0xbd888000},{0xbd88a000},{0xbd88c000},{0xbd88e000},{0xbd890000},{0xbd892000},{0xbd894000},{0xbd896000},{0xbd898000},{0xbd89a000},{0xbd89c000},{0xbd89e000},{0xbd8a0000},{0xbd8a2000},{0xbd8a4000},{0xbd8a6000},{0xbd8a8000},{0xbd8aa000},{0xbd8ac000},{0xbd8ae000},{0xbd8b0000},{0xbd8b2000},{0xbd8b4000},{0xbd8b6000},{0xbd8b8000},{0xbd8ba000},{0xbd8bc000},{0xbd8be000}, -{0xbd8c0000},{0xbd8c2000},{0xbd8c4000},{0xbd8c6000},{0xbd8c8000},{0xbd8ca000},{0xbd8cc000},{0xbd8ce000},{0xbd8d0000},{0xbd8d2000},{0xbd8d4000},{0xbd8d6000},{0xbd8d8000},{0xbd8da000},{0xbd8dc000},{0xbd8de000},{0xbd8e0000},{0xbd8e2000},{0xbd8e4000},{0xbd8e6000},{0xbd8e8000},{0xbd8ea000},{0xbd8ec000},{0xbd8ee000},{0xbd8f0000},{0xbd8f2000},{0xbd8f4000},{0xbd8f6000},{0xbd8f8000},{0xbd8fa000},{0xbd8fc000},{0xbd8fe000}, -{0xbd900000},{0xbd902000},{0xbd904000},{0xbd906000},{0xbd908000},{0xbd90a000},{0xbd90c000},{0xbd90e000},{0xbd910000},{0xbd912000},{0xbd914000},{0xbd916000},{0xbd918000},{0xbd91a000},{0xbd91c000},{0xbd91e000},{0xbd920000},{0xbd922000},{0xbd924000},{0xbd926000},{0xbd928000},{0xbd92a000},{0xbd92c000},{0xbd92e000},{0xbd930000},{0xbd932000},{0xbd934000},{0xbd936000},{0xbd938000},{0xbd93a000},{0xbd93c000},{0xbd93e000}, -{0xbd940000},{0xbd942000},{0xbd944000},{0xbd946000},{0xbd948000},{0xbd94a000},{0xbd94c000},{0xbd94e000},{0xbd950000},{0xbd952000},{0xbd954000},{0xbd956000},{0xbd958000},{0xbd95a000},{0xbd95c000},{0xbd95e000},{0xbd960000},{0xbd962000},{0xbd964000},{0xbd966000},{0xbd968000},{0xbd96a000},{0xbd96c000},{0xbd96e000},{0xbd970000},{0xbd972000},{0xbd974000},{0xbd976000},{0xbd978000},{0xbd97a000},{0xbd97c000},{0xbd97e000}, -{0xbd980000},{0xbd982000},{0xbd984000},{0xbd986000},{0xbd988000},{0xbd98a000},{0xbd98c000},{0xbd98e000},{0xbd990000},{0xbd992000},{0xbd994000},{0xbd996000},{0xbd998000},{0xbd99a000},{0xbd99c000},{0xbd99e000},{0xbd9a0000},{0xbd9a2000},{0xbd9a4000},{0xbd9a6000},{0xbd9a8000},{0xbd9aa000},{0xbd9ac000},{0xbd9ae000},{0xbd9b0000},{0xbd9b2000},{0xbd9b4000},{0xbd9b6000},{0xbd9b8000},{0xbd9ba000},{0xbd9bc000},{0xbd9be000}, -{0xbd9c0000},{0xbd9c2000},{0xbd9c4000},{0xbd9c6000},{0xbd9c8000},{0xbd9ca000},{0xbd9cc000},{0xbd9ce000},{0xbd9d0000},{0xbd9d2000},{0xbd9d4000},{0xbd9d6000},{0xbd9d8000},{0xbd9da000},{0xbd9dc000},{0xbd9de000},{0xbd9e0000},{0xbd9e2000},{0xbd9e4000},{0xbd9e6000},{0xbd9e8000},{0xbd9ea000},{0xbd9ec000},{0xbd9ee000},{0xbd9f0000},{0xbd9f2000},{0xbd9f4000},{0xbd9f6000},{0xbd9f8000},{0xbd9fa000},{0xbd9fc000},{0xbd9fe000}, -{0xbda00000},{0xbda02000},{0xbda04000},{0xbda06000},{0xbda08000},{0xbda0a000},{0xbda0c000},{0xbda0e000},{0xbda10000},{0xbda12000},{0xbda14000},{0xbda16000},{0xbda18000},{0xbda1a000},{0xbda1c000},{0xbda1e000},{0xbda20000},{0xbda22000},{0xbda24000},{0xbda26000},{0xbda28000},{0xbda2a000},{0xbda2c000},{0xbda2e000},{0xbda30000},{0xbda32000},{0xbda34000},{0xbda36000},{0xbda38000},{0xbda3a000},{0xbda3c000},{0xbda3e000}, -{0xbda40000},{0xbda42000},{0xbda44000},{0xbda46000},{0xbda48000},{0xbda4a000},{0xbda4c000},{0xbda4e000},{0xbda50000},{0xbda52000},{0xbda54000},{0xbda56000},{0xbda58000},{0xbda5a000},{0xbda5c000},{0xbda5e000},{0xbda60000},{0xbda62000},{0xbda64000},{0xbda66000},{0xbda68000},{0xbda6a000},{0xbda6c000},{0xbda6e000},{0xbda70000},{0xbda72000},{0xbda74000},{0xbda76000},{0xbda78000},{0xbda7a000},{0xbda7c000},{0xbda7e000}, -{0xbda80000},{0xbda82000},{0xbda84000},{0xbda86000},{0xbda88000},{0xbda8a000},{0xbda8c000},{0xbda8e000},{0xbda90000},{0xbda92000},{0xbda94000},{0xbda96000},{0xbda98000},{0xbda9a000},{0xbda9c000},{0xbda9e000},{0xbdaa0000},{0xbdaa2000},{0xbdaa4000},{0xbdaa6000},{0xbdaa8000},{0xbdaaa000},{0xbdaac000},{0xbdaae000},{0xbdab0000},{0xbdab2000},{0xbdab4000},{0xbdab6000},{0xbdab8000},{0xbdaba000},{0xbdabc000},{0xbdabe000}, -{0xbdac0000},{0xbdac2000},{0xbdac4000},{0xbdac6000},{0xbdac8000},{0xbdaca000},{0xbdacc000},{0xbdace000},{0xbdad0000},{0xbdad2000},{0xbdad4000},{0xbdad6000},{0xbdad8000},{0xbdada000},{0xbdadc000},{0xbdade000},{0xbdae0000},{0xbdae2000},{0xbdae4000},{0xbdae6000},{0xbdae8000},{0xbdaea000},{0xbdaec000},{0xbdaee000},{0xbdaf0000},{0xbdaf2000},{0xbdaf4000},{0xbdaf6000},{0xbdaf8000},{0xbdafa000},{0xbdafc000},{0xbdafe000}, -{0xbdb00000},{0xbdb02000},{0xbdb04000},{0xbdb06000},{0xbdb08000},{0xbdb0a000},{0xbdb0c000},{0xbdb0e000},{0xbdb10000},{0xbdb12000},{0xbdb14000},{0xbdb16000},{0xbdb18000},{0xbdb1a000},{0xbdb1c000},{0xbdb1e000},{0xbdb20000},{0xbdb22000},{0xbdb24000},{0xbdb26000},{0xbdb28000},{0xbdb2a000},{0xbdb2c000},{0xbdb2e000},{0xbdb30000},{0xbdb32000},{0xbdb34000},{0xbdb36000},{0xbdb38000},{0xbdb3a000},{0xbdb3c000},{0xbdb3e000}, -{0xbdb40000},{0xbdb42000},{0xbdb44000},{0xbdb46000},{0xbdb48000},{0xbdb4a000},{0xbdb4c000},{0xbdb4e000},{0xbdb50000},{0xbdb52000},{0xbdb54000},{0xbdb56000},{0xbdb58000},{0xbdb5a000},{0xbdb5c000},{0xbdb5e000},{0xbdb60000},{0xbdb62000},{0xbdb64000},{0xbdb66000},{0xbdb68000},{0xbdb6a000},{0xbdb6c000},{0xbdb6e000},{0xbdb70000},{0xbdb72000},{0xbdb74000},{0xbdb76000},{0xbdb78000},{0xbdb7a000},{0xbdb7c000},{0xbdb7e000}, -{0xbdb80000},{0xbdb82000},{0xbdb84000},{0xbdb86000},{0xbdb88000},{0xbdb8a000},{0xbdb8c000},{0xbdb8e000},{0xbdb90000},{0xbdb92000},{0xbdb94000},{0xbdb96000},{0xbdb98000},{0xbdb9a000},{0xbdb9c000},{0xbdb9e000},{0xbdba0000},{0xbdba2000},{0xbdba4000},{0xbdba6000},{0xbdba8000},{0xbdbaa000},{0xbdbac000},{0xbdbae000},{0xbdbb0000},{0xbdbb2000},{0xbdbb4000},{0xbdbb6000},{0xbdbb8000},{0xbdbba000},{0xbdbbc000},{0xbdbbe000}, -{0xbdbc0000},{0xbdbc2000},{0xbdbc4000},{0xbdbc6000},{0xbdbc8000},{0xbdbca000},{0xbdbcc000},{0xbdbce000},{0xbdbd0000},{0xbdbd2000},{0xbdbd4000},{0xbdbd6000},{0xbdbd8000},{0xbdbda000},{0xbdbdc000},{0xbdbde000},{0xbdbe0000},{0xbdbe2000},{0xbdbe4000},{0xbdbe6000},{0xbdbe8000},{0xbdbea000},{0xbdbec000},{0xbdbee000},{0xbdbf0000},{0xbdbf2000},{0xbdbf4000},{0xbdbf6000},{0xbdbf8000},{0xbdbfa000},{0xbdbfc000},{0xbdbfe000}, -{0xbdc00000},{0xbdc02000},{0xbdc04000},{0xbdc06000},{0xbdc08000},{0xbdc0a000},{0xbdc0c000},{0xbdc0e000},{0xbdc10000},{0xbdc12000},{0xbdc14000},{0xbdc16000},{0xbdc18000},{0xbdc1a000},{0xbdc1c000},{0xbdc1e000},{0xbdc20000},{0xbdc22000},{0xbdc24000},{0xbdc26000},{0xbdc28000},{0xbdc2a000},{0xbdc2c000},{0xbdc2e000},{0xbdc30000},{0xbdc32000},{0xbdc34000},{0xbdc36000},{0xbdc38000},{0xbdc3a000},{0xbdc3c000},{0xbdc3e000}, -{0xbdc40000},{0xbdc42000},{0xbdc44000},{0xbdc46000},{0xbdc48000},{0xbdc4a000},{0xbdc4c000},{0xbdc4e000},{0xbdc50000},{0xbdc52000},{0xbdc54000},{0xbdc56000},{0xbdc58000},{0xbdc5a000},{0xbdc5c000},{0xbdc5e000},{0xbdc60000},{0xbdc62000},{0xbdc64000},{0xbdc66000},{0xbdc68000},{0xbdc6a000},{0xbdc6c000},{0xbdc6e000},{0xbdc70000},{0xbdc72000},{0xbdc74000},{0xbdc76000},{0xbdc78000},{0xbdc7a000},{0xbdc7c000},{0xbdc7e000}, -{0xbdc80000},{0xbdc82000},{0xbdc84000},{0xbdc86000},{0xbdc88000},{0xbdc8a000},{0xbdc8c000},{0xbdc8e000},{0xbdc90000},{0xbdc92000},{0xbdc94000},{0xbdc96000},{0xbdc98000},{0xbdc9a000},{0xbdc9c000},{0xbdc9e000},{0xbdca0000},{0xbdca2000},{0xbdca4000},{0xbdca6000},{0xbdca8000},{0xbdcaa000},{0xbdcac000},{0xbdcae000},{0xbdcb0000},{0xbdcb2000},{0xbdcb4000},{0xbdcb6000},{0xbdcb8000},{0xbdcba000},{0xbdcbc000},{0xbdcbe000}, -{0xbdcc0000},{0xbdcc2000},{0xbdcc4000},{0xbdcc6000},{0xbdcc8000},{0xbdcca000},{0xbdccc000},{0xbdcce000},{0xbdcd0000},{0xbdcd2000},{0xbdcd4000},{0xbdcd6000},{0xbdcd8000},{0xbdcda000},{0xbdcdc000},{0xbdcde000},{0xbdce0000},{0xbdce2000},{0xbdce4000},{0xbdce6000},{0xbdce8000},{0xbdcea000},{0xbdcec000},{0xbdcee000},{0xbdcf0000},{0xbdcf2000},{0xbdcf4000},{0xbdcf6000},{0xbdcf8000},{0xbdcfa000},{0xbdcfc000},{0xbdcfe000}, -{0xbdd00000},{0xbdd02000},{0xbdd04000},{0xbdd06000},{0xbdd08000},{0xbdd0a000},{0xbdd0c000},{0xbdd0e000},{0xbdd10000},{0xbdd12000},{0xbdd14000},{0xbdd16000},{0xbdd18000},{0xbdd1a000},{0xbdd1c000},{0xbdd1e000},{0xbdd20000},{0xbdd22000},{0xbdd24000},{0xbdd26000},{0xbdd28000},{0xbdd2a000},{0xbdd2c000},{0xbdd2e000},{0xbdd30000},{0xbdd32000},{0xbdd34000},{0xbdd36000},{0xbdd38000},{0xbdd3a000},{0xbdd3c000},{0xbdd3e000}, -{0xbdd40000},{0xbdd42000},{0xbdd44000},{0xbdd46000},{0xbdd48000},{0xbdd4a000},{0xbdd4c000},{0xbdd4e000},{0xbdd50000},{0xbdd52000},{0xbdd54000},{0xbdd56000},{0xbdd58000},{0xbdd5a000},{0xbdd5c000},{0xbdd5e000},{0xbdd60000},{0xbdd62000},{0xbdd64000},{0xbdd66000},{0xbdd68000},{0xbdd6a000},{0xbdd6c000},{0xbdd6e000},{0xbdd70000},{0xbdd72000},{0xbdd74000},{0xbdd76000},{0xbdd78000},{0xbdd7a000},{0xbdd7c000},{0xbdd7e000}, -{0xbdd80000},{0xbdd82000},{0xbdd84000},{0xbdd86000},{0xbdd88000},{0xbdd8a000},{0xbdd8c000},{0xbdd8e000},{0xbdd90000},{0xbdd92000},{0xbdd94000},{0xbdd96000},{0xbdd98000},{0xbdd9a000},{0xbdd9c000},{0xbdd9e000},{0xbdda0000},{0xbdda2000},{0xbdda4000},{0xbdda6000},{0xbdda8000},{0xbddaa000},{0xbddac000},{0xbddae000},{0xbddb0000},{0xbddb2000},{0xbddb4000},{0xbddb6000},{0xbddb8000},{0xbddba000},{0xbddbc000},{0xbddbe000}, -{0xbddc0000},{0xbddc2000},{0xbddc4000},{0xbddc6000},{0xbddc8000},{0xbddca000},{0xbddcc000},{0xbddce000},{0xbddd0000},{0xbddd2000},{0xbddd4000},{0xbddd6000},{0xbddd8000},{0xbddda000},{0xbdddc000},{0xbddde000},{0xbdde0000},{0xbdde2000},{0xbdde4000},{0xbdde6000},{0xbdde8000},{0xbddea000},{0xbddec000},{0xbddee000},{0xbddf0000},{0xbddf2000},{0xbddf4000},{0xbddf6000},{0xbddf8000},{0xbddfa000},{0xbddfc000},{0xbddfe000}, -{0xbde00000},{0xbde02000},{0xbde04000},{0xbde06000},{0xbde08000},{0xbde0a000},{0xbde0c000},{0xbde0e000},{0xbde10000},{0xbde12000},{0xbde14000},{0xbde16000},{0xbde18000},{0xbde1a000},{0xbde1c000},{0xbde1e000},{0xbde20000},{0xbde22000},{0xbde24000},{0xbde26000},{0xbde28000},{0xbde2a000},{0xbde2c000},{0xbde2e000},{0xbde30000},{0xbde32000},{0xbde34000},{0xbde36000},{0xbde38000},{0xbde3a000},{0xbde3c000},{0xbde3e000}, -{0xbde40000},{0xbde42000},{0xbde44000},{0xbde46000},{0xbde48000},{0xbde4a000},{0xbde4c000},{0xbde4e000},{0xbde50000},{0xbde52000},{0xbde54000},{0xbde56000},{0xbde58000},{0xbde5a000},{0xbde5c000},{0xbde5e000},{0xbde60000},{0xbde62000},{0xbde64000},{0xbde66000},{0xbde68000},{0xbde6a000},{0xbde6c000},{0xbde6e000},{0xbde70000},{0xbde72000},{0xbde74000},{0xbde76000},{0xbde78000},{0xbde7a000},{0xbde7c000},{0xbde7e000}, -{0xbde80000},{0xbde82000},{0xbde84000},{0xbde86000},{0xbde88000},{0xbde8a000},{0xbde8c000},{0xbde8e000},{0xbde90000},{0xbde92000},{0xbde94000},{0xbde96000},{0xbde98000},{0xbde9a000},{0xbde9c000},{0xbde9e000},{0xbdea0000},{0xbdea2000},{0xbdea4000},{0xbdea6000},{0xbdea8000},{0xbdeaa000},{0xbdeac000},{0xbdeae000},{0xbdeb0000},{0xbdeb2000},{0xbdeb4000},{0xbdeb6000},{0xbdeb8000},{0xbdeba000},{0xbdebc000},{0xbdebe000}, -{0xbdec0000},{0xbdec2000},{0xbdec4000},{0xbdec6000},{0xbdec8000},{0xbdeca000},{0xbdecc000},{0xbdece000},{0xbded0000},{0xbded2000},{0xbded4000},{0xbded6000},{0xbded8000},{0xbdeda000},{0xbdedc000},{0xbdede000},{0xbdee0000},{0xbdee2000},{0xbdee4000},{0xbdee6000},{0xbdee8000},{0xbdeea000},{0xbdeec000},{0xbdeee000},{0xbdef0000},{0xbdef2000},{0xbdef4000},{0xbdef6000},{0xbdef8000},{0xbdefa000},{0xbdefc000},{0xbdefe000}, -{0xbdf00000},{0xbdf02000},{0xbdf04000},{0xbdf06000},{0xbdf08000},{0xbdf0a000},{0xbdf0c000},{0xbdf0e000},{0xbdf10000},{0xbdf12000},{0xbdf14000},{0xbdf16000},{0xbdf18000},{0xbdf1a000},{0xbdf1c000},{0xbdf1e000},{0xbdf20000},{0xbdf22000},{0xbdf24000},{0xbdf26000},{0xbdf28000},{0xbdf2a000},{0xbdf2c000},{0xbdf2e000},{0xbdf30000},{0xbdf32000},{0xbdf34000},{0xbdf36000},{0xbdf38000},{0xbdf3a000},{0xbdf3c000},{0xbdf3e000}, -{0xbdf40000},{0xbdf42000},{0xbdf44000},{0xbdf46000},{0xbdf48000},{0xbdf4a000},{0xbdf4c000},{0xbdf4e000},{0xbdf50000},{0xbdf52000},{0xbdf54000},{0xbdf56000},{0xbdf58000},{0xbdf5a000},{0xbdf5c000},{0xbdf5e000},{0xbdf60000},{0xbdf62000},{0xbdf64000},{0xbdf66000},{0xbdf68000},{0xbdf6a000},{0xbdf6c000},{0xbdf6e000},{0xbdf70000},{0xbdf72000},{0xbdf74000},{0xbdf76000},{0xbdf78000},{0xbdf7a000},{0xbdf7c000},{0xbdf7e000}, -{0xbdf80000},{0xbdf82000},{0xbdf84000},{0xbdf86000},{0xbdf88000},{0xbdf8a000},{0xbdf8c000},{0xbdf8e000},{0xbdf90000},{0xbdf92000},{0xbdf94000},{0xbdf96000},{0xbdf98000},{0xbdf9a000},{0xbdf9c000},{0xbdf9e000},{0xbdfa0000},{0xbdfa2000},{0xbdfa4000},{0xbdfa6000},{0xbdfa8000},{0xbdfaa000},{0xbdfac000},{0xbdfae000},{0xbdfb0000},{0xbdfb2000},{0xbdfb4000},{0xbdfb6000},{0xbdfb8000},{0xbdfba000},{0xbdfbc000},{0xbdfbe000}, -{0xbdfc0000},{0xbdfc2000},{0xbdfc4000},{0xbdfc6000},{0xbdfc8000},{0xbdfca000},{0xbdfcc000},{0xbdfce000},{0xbdfd0000},{0xbdfd2000},{0xbdfd4000},{0xbdfd6000},{0xbdfd8000},{0xbdfda000},{0xbdfdc000},{0xbdfde000},{0xbdfe0000},{0xbdfe2000},{0xbdfe4000},{0xbdfe6000},{0xbdfe8000},{0xbdfea000},{0xbdfec000},{0xbdfee000},{0xbdff0000},{0xbdff2000},{0xbdff4000},{0xbdff6000},{0xbdff8000},{0xbdffa000},{0xbdffc000},{0xbdffe000}, -{0xbe000000},{0xbe002000},{0xbe004000},{0xbe006000},{0xbe008000},{0xbe00a000},{0xbe00c000},{0xbe00e000},{0xbe010000},{0xbe012000},{0xbe014000},{0xbe016000},{0xbe018000},{0xbe01a000},{0xbe01c000},{0xbe01e000},{0xbe020000},{0xbe022000},{0xbe024000},{0xbe026000},{0xbe028000},{0xbe02a000},{0xbe02c000},{0xbe02e000},{0xbe030000},{0xbe032000},{0xbe034000},{0xbe036000},{0xbe038000},{0xbe03a000},{0xbe03c000},{0xbe03e000}, -{0xbe040000},{0xbe042000},{0xbe044000},{0xbe046000},{0xbe048000},{0xbe04a000},{0xbe04c000},{0xbe04e000},{0xbe050000},{0xbe052000},{0xbe054000},{0xbe056000},{0xbe058000},{0xbe05a000},{0xbe05c000},{0xbe05e000},{0xbe060000},{0xbe062000},{0xbe064000},{0xbe066000},{0xbe068000},{0xbe06a000},{0xbe06c000},{0xbe06e000},{0xbe070000},{0xbe072000},{0xbe074000},{0xbe076000},{0xbe078000},{0xbe07a000},{0xbe07c000},{0xbe07e000}, -{0xbe080000},{0xbe082000},{0xbe084000},{0xbe086000},{0xbe088000},{0xbe08a000},{0xbe08c000},{0xbe08e000},{0xbe090000},{0xbe092000},{0xbe094000},{0xbe096000},{0xbe098000},{0xbe09a000},{0xbe09c000},{0xbe09e000},{0xbe0a0000},{0xbe0a2000},{0xbe0a4000},{0xbe0a6000},{0xbe0a8000},{0xbe0aa000},{0xbe0ac000},{0xbe0ae000},{0xbe0b0000},{0xbe0b2000},{0xbe0b4000},{0xbe0b6000},{0xbe0b8000},{0xbe0ba000},{0xbe0bc000},{0xbe0be000}, -{0xbe0c0000},{0xbe0c2000},{0xbe0c4000},{0xbe0c6000},{0xbe0c8000},{0xbe0ca000},{0xbe0cc000},{0xbe0ce000},{0xbe0d0000},{0xbe0d2000},{0xbe0d4000},{0xbe0d6000},{0xbe0d8000},{0xbe0da000},{0xbe0dc000},{0xbe0de000},{0xbe0e0000},{0xbe0e2000},{0xbe0e4000},{0xbe0e6000},{0xbe0e8000},{0xbe0ea000},{0xbe0ec000},{0xbe0ee000},{0xbe0f0000},{0xbe0f2000},{0xbe0f4000},{0xbe0f6000},{0xbe0f8000},{0xbe0fa000},{0xbe0fc000},{0xbe0fe000}, -{0xbe100000},{0xbe102000},{0xbe104000},{0xbe106000},{0xbe108000},{0xbe10a000},{0xbe10c000},{0xbe10e000},{0xbe110000},{0xbe112000},{0xbe114000},{0xbe116000},{0xbe118000},{0xbe11a000},{0xbe11c000},{0xbe11e000},{0xbe120000},{0xbe122000},{0xbe124000},{0xbe126000},{0xbe128000},{0xbe12a000},{0xbe12c000},{0xbe12e000},{0xbe130000},{0xbe132000},{0xbe134000},{0xbe136000},{0xbe138000},{0xbe13a000},{0xbe13c000},{0xbe13e000}, -{0xbe140000},{0xbe142000},{0xbe144000},{0xbe146000},{0xbe148000},{0xbe14a000},{0xbe14c000},{0xbe14e000},{0xbe150000},{0xbe152000},{0xbe154000},{0xbe156000},{0xbe158000},{0xbe15a000},{0xbe15c000},{0xbe15e000},{0xbe160000},{0xbe162000},{0xbe164000},{0xbe166000},{0xbe168000},{0xbe16a000},{0xbe16c000},{0xbe16e000},{0xbe170000},{0xbe172000},{0xbe174000},{0xbe176000},{0xbe178000},{0xbe17a000},{0xbe17c000},{0xbe17e000}, -{0xbe180000},{0xbe182000},{0xbe184000},{0xbe186000},{0xbe188000},{0xbe18a000},{0xbe18c000},{0xbe18e000},{0xbe190000},{0xbe192000},{0xbe194000},{0xbe196000},{0xbe198000},{0xbe19a000},{0xbe19c000},{0xbe19e000},{0xbe1a0000},{0xbe1a2000},{0xbe1a4000},{0xbe1a6000},{0xbe1a8000},{0xbe1aa000},{0xbe1ac000},{0xbe1ae000},{0xbe1b0000},{0xbe1b2000},{0xbe1b4000},{0xbe1b6000},{0xbe1b8000},{0xbe1ba000},{0xbe1bc000},{0xbe1be000}, -{0xbe1c0000},{0xbe1c2000},{0xbe1c4000},{0xbe1c6000},{0xbe1c8000},{0xbe1ca000},{0xbe1cc000},{0xbe1ce000},{0xbe1d0000},{0xbe1d2000},{0xbe1d4000},{0xbe1d6000},{0xbe1d8000},{0xbe1da000},{0xbe1dc000},{0xbe1de000},{0xbe1e0000},{0xbe1e2000},{0xbe1e4000},{0xbe1e6000},{0xbe1e8000},{0xbe1ea000},{0xbe1ec000},{0xbe1ee000},{0xbe1f0000},{0xbe1f2000},{0xbe1f4000},{0xbe1f6000},{0xbe1f8000},{0xbe1fa000},{0xbe1fc000},{0xbe1fe000}, -{0xbe200000},{0xbe202000},{0xbe204000},{0xbe206000},{0xbe208000},{0xbe20a000},{0xbe20c000},{0xbe20e000},{0xbe210000},{0xbe212000},{0xbe214000},{0xbe216000},{0xbe218000},{0xbe21a000},{0xbe21c000},{0xbe21e000},{0xbe220000},{0xbe222000},{0xbe224000},{0xbe226000},{0xbe228000},{0xbe22a000},{0xbe22c000},{0xbe22e000},{0xbe230000},{0xbe232000},{0xbe234000},{0xbe236000},{0xbe238000},{0xbe23a000},{0xbe23c000},{0xbe23e000}, -{0xbe240000},{0xbe242000},{0xbe244000},{0xbe246000},{0xbe248000},{0xbe24a000},{0xbe24c000},{0xbe24e000},{0xbe250000},{0xbe252000},{0xbe254000},{0xbe256000},{0xbe258000},{0xbe25a000},{0xbe25c000},{0xbe25e000},{0xbe260000},{0xbe262000},{0xbe264000},{0xbe266000},{0xbe268000},{0xbe26a000},{0xbe26c000},{0xbe26e000},{0xbe270000},{0xbe272000},{0xbe274000},{0xbe276000},{0xbe278000},{0xbe27a000},{0xbe27c000},{0xbe27e000}, -{0xbe280000},{0xbe282000},{0xbe284000},{0xbe286000},{0xbe288000},{0xbe28a000},{0xbe28c000},{0xbe28e000},{0xbe290000},{0xbe292000},{0xbe294000},{0xbe296000},{0xbe298000},{0xbe29a000},{0xbe29c000},{0xbe29e000},{0xbe2a0000},{0xbe2a2000},{0xbe2a4000},{0xbe2a6000},{0xbe2a8000},{0xbe2aa000},{0xbe2ac000},{0xbe2ae000},{0xbe2b0000},{0xbe2b2000},{0xbe2b4000},{0xbe2b6000},{0xbe2b8000},{0xbe2ba000},{0xbe2bc000},{0xbe2be000}, -{0xbe2c0000},{0xbe2c2000},{0xbe2c4000},{0xbe2c6000},{0xbe2c8000},{0xbe2ca000},{0xbe2cc000},{0xbe2ce000},{0xbe2d0000},{0xbe2d2000},{0xbe2d4000},{0xbe2d6000},{0xbe2d8000},{0xbe2da000},{0xbe2dc000},{0xbe2de000},{0xbe2e0000},{0xbe2e2000},{0xbe2e4000},{0xbe2e6000},{0xbe2e8000},{0xbe2ea000},{0xbe2ec000},{0xbe2ee000},{0xbe2f0000},{0xbe2f2000},{0xbe2f4000},{0xbe2f6000},{0xbe2f8000},{0xbe2fa000},{0xbe2fc000},{0xbe2fe000}, -{0xbe300000},{0xbe302000},{0xbe304000},{0xbe306000},{0xbe308000},{0xbe30a000},{0xbe30c000},{0xbe30e000},{0xbe310000},{0xbe312000},{0xbe314000},{0xbe316000},{0xbe318000},{0xbe31a000},{0xbe31c000},{0xbe31e000},{0xbe320000},{0xbe322000},{0xbe324000},{0xbe326000},{0xbe328000},{0xbe32a000},{0xbe32c000},{0xbe32e000},{0xbe330000},{0xbe332000},{0xbe334000},{0xbe336000},{0xbe338000},{0xbe33a000},{0xbe33c000},{0xbe33e000}, -{0xbe340000},{0xbe342000},{0xbe344000},{0xbe346000},{0xbe348000},{0xbe34a000},{0xbe34c000},{0xbe34e000},{0xbe350000},{0xbe352000},{0xbe354000},{0xbe356000},{0xbe358000},{0xbe35a000},{0xbe35c000},{0xbe35e000},{0xbe360000},{0xbe362000},{0xbe364000},{0xbe366000},{0xbe368000},{0xbe36a000},{0xbe36c000},{0xbe36e000},{0xbe370000},{0xbe372000},{0xbe374000},{0xbe376000},{0xbe378000},{0xbe37a000},{0xbe37c000},{0xbe37e000}, -{0xbe380000},{0xbe382000},{0xbe384000},{0xbe386000},{0xbe388000},{0xbe38a000},{0xbe38c000},{0xbe38e000},{0xbe390000},{0xbe392000},{0xbe394000},{0xbe396000},{0xbe398000},{0xbe39a000},{0xbe39c000},{0xbe39e000},{0xbe3a0000},{0xbe3a2000},{0xbe3a4000},{0xbe3a6000},{0xbe3a8000},{0xbe3aa000},{0xbe3ac000},{0xbe3ae000},{0xbe3b0000},{0xbe3b2000},{0xbe3b4000},{0xbe3b6000},{0xbe3b8000},{0xbe3ba000},{0xbe3bc000},{0xbe3be000}, -{0xbe3c0000},{0xbe3c2000},{0xbe3c4000},{0xbe3c6000},{0xbe3c8000},{0xbe3ca000},{0xbe3cc000},{0xbe3ce000},{0xbe3d0000},{0xbe3d2000},{0xbe3d4000},{0xbe3d6000},{0xbe3d8000},{0xbe3da000},{0xbe3dc000},{0xbe3de000},{0xbe3e0000},{0xbe3e2000},{0xbe3e4000},{0xbe3e6000},{0xbe3e8000},{0xbe3ea000},{0xbe3ec000},{0xbe3ee000},{0xbe3f0000},{0xbe3f2000},{0xbe3f4000},{0xbe3f6000},{0xbe3f8000},{0xbe3fa000},{0xbe3fc000},{0xbe3fe000}, -{0xbe400000},{0xbe402000},{0xbe404000},{0xbe406000},{0xbe408000},{0xbe40a000},{0xbe40c000},{0xbe40e000},{0xbe410000},{0xbe412000},{0xbe414000},{0xbe416000},{0xbe418000},{0xbe41a000},{0xbe41c000},{0xbe41e000},{0xbe420000},{0xbe422000},{0xbe424000},{0xbe426000},{0xbe428000},{0xbe42a000},{0xbe42c000},{0xbe42e000},{0xbe430000},{0xbe432000},{0xbe434000},{0xbe436000},{0xbe438000},{0xbe43a000},{0xbe43c000},{0xbe43e000}, -{0xbe440000},{0xbe442000},{0xbe444000},{0xbe446000},{0xbe448000},{0xbe44a000},{0xbe44c000},{0xbe44e000},{0xbe450000},{0xbe452000},{0xbe454000},{0xbe456000},{0xbe458000},{0xbe45a000},{0xbe45c000},{0xbe45e000},{0xbe460000},{0xbe462000},{0xbe464000},{0xbe466000},{0xbe468000},{0xbe46a000},{0xbe46c000},{0xbe46e000},{0xbe470000},{0xbe472000},{0xbe474000},{0xbe476000},{0xbe478000},{0xbe47a000},{0xbe47c000},{0xbe47e000}, -{0xbe480000},{0xbe482000},{0xbe484000},{0xbe486000},{0xbe488000},{0xbe48a000},{0xbe48c000},{0xbe48e000},{0xbe490000},{0xbe492000},{0xbe494000},{0xbe496000},{0xbe498000},{0xbe49a000},{0xbe49c000},{0xbe49e000},{0xbe4a0000},{0xbe4a2000},{0xbe4a4000},{0xbe4a6000},{0xbe4a8000},{0xbe4aa000},{0xbe4ac000},{0xbe4ae000},{0xbe4b0000},{0xbe4b2000},{0xbe4b4000},{0xbe4b6000},{0xbe4b8000},{0xbe4ba000},{0xbe4bc000},{0xbe4be000}, -{0xbe4c0000},{0xbe4c2000},{0xbe4c4000},{0xbe4c6000},{0xbe4c8000},{0xbe4ca000},{0xbe4cc000},{0xbe4ce000},{0xbe4d0000},{0xbe4d2000},{0xbe4d4000},{0xbe4d6000},{0xbe4d8000},{0xbe4da000},{0xbe4dc000},{0xbe4de000},{0xbe4e0000},{0xbe4e2000},{0xbe4e4000},{0xbe4e6000},{0xbe4e8000},{0xbe4ea000},{0xbe4ec000},{0xbe4ee000},{0xbe4f0000},{0xbe4f2000},{0xbe4f4000},{0xbe4f6000},{0xbe4f8000},{0xbe4fa000},{0xbe4fc000},{0xbe4fe000}, -{0xbe500000},{0xbe502000},{0xbe504000},{0xbe506000},{0xbe508000},{0xbe50a000},{0xbe50c000},{0xbe50e000},{0xbe510000},{0xbe512000},{0xbe514000},{0xbe516000},{0xbe518000},{0xbe51a000},{0xbe51c000},{0xbe51e000},{0xbe520000},{0xbe522000},{0xbe524000},{0xbe526000},{0xbe528000},{0xbe52a000},{0xbe52c000},{0xbe52e000},{0xbe530000},{0xbe532000},{0xbe534000},{0xbe536000},{0xbe538000},{0xbe53a000},{0xbe53c000},{0xbe53e000}, -{0xbe540000},{0xbe542000},{0xbe544000},{0xbe546000},{0xbe548000},{0xbe54a000},{0xbe54c000},{0xbe54e000},{0xbe550000},{0xbe552000},{0xbe554000},{0xbe556000},{0xbe558000},{0xbe55a000},{0xbe55c000},{0xbe55e000},{0xbe560000},{0xbe562000},{0xbe564000},{0xbe566000},{0xbe568000},{0xbe56a000},{0xbe56c000},{0xbe56e000},{0xbe570000},{0xbe572000},{0xbe574000},{0xbe576000},{0xbe578000},{0xbe57a000},{0xbe57c000},{0xbe57e000}, -{0xbe580000},{0xbe582000},{0xbe584000},{0xbe586000},{0xbe588000},{0xbe58a000},{0xbe58c000},{0xbe58e000},{0xbe590000},{0xbe592000},{0xbe594000},{0xbe596000},{0xbe598000},{0xbe59a000},{0xbe59c000},{0xbe59e000},{0xbe5a0000},{0xbe5a2000},{0xbe5a4000},{0xbe5a6000},{0xbe5a8000},{0xbe5aa000},{0xbe5ac000},{0xbe5ae000},{0xbe5b0000},{0xbe5b2000},{0xbe5b4000},{0xbe5b6000},{0xbe5b8000},{0xbe5ba000},{0xbe5bc000},{0xbe5be000}, -{0xbe5c0000},{0xbe5c2000},{0xbe5c4000},{0xbe5c6000},{0xbe5c8000},{0xbe5ca000},{0xbe5cc000},{0xbe5ce000},{0xbe5d0000},{0xbe5d2000},{0xbe5d4000},{0xbe5d6000},{0xbe5d8000},{0xbe5da000},{0xbe5dc000},{0xbe5de000},{0xbe5e0000},{0xbe5e2000},{0xbe5e4000},{0xbe5e6000},{0xbe5e8000},{0xbe5ea000},{0xbe5ec000},{0xbe5ee000},{0xbe5f0000},{0xbe5f2000},{0xbe5f4000},{0xbe5f6000},{0xbe5f8000},{0xbe5fa000},{0xbe5fc000},{0xbe5fe000}, -{0xbe600000},{0xbe602000},{0xbe604000},{0xbe606000},{0xbe608000},{0xbe60a000},{0xbe60c000},{0xbe60e000},{0xbe610000},{0xbe612000},{0xbe614000},{0xbe616000},{0xbe618000},{0xbe61a000},{0xbe61c000},{0xbe61e000},{0xbe620000},{0xbe622000},{0xbe624000},{0xbe626000},{0xbe628000},{0xbe62a000},{0xbe62c000},{0xbe62e000},{0xbe630000},{0xbe632000},{0xbe634000},{0xbe636000},{0xbe638000},{0xbe63a000},{0xbe63c000},{0xbe63e000}, -{0xbe640000},{0xbe642000},{0xbe644000},{0xbe646000},{0xbe648000},{0xbe64a000},{0xbe64c000},{0xbe64e000},{0xbe650000},{0xbe652000},{0xbe654000},{0xbe656000},{0xbe658000},{0xbe65a000},{0xbe65c000},{0xbe65e000},{0xbe660000},{0xbe662000},{0xbe664000},{0xbe666000},{0xbe668000},{0xbe66a000},{0xbe66c000},{0xbe66e000},{0xbe670000},{0xbe672000},{0xbe674000},{0xbe676000},{0xbe678000},{0xbe67a000},{0xbe67c000},{0xbe67e000}, -{0xbe680000},{0xbe682000},{0xbe684000},{0xbe686000},{0xbe688000},{0xbe68a000},{0xbe68c000},{0xbe68e000},{0xbe690000},{0xbe692000},{0xbe694000},{0xbe696000},{0xbe698000},{0xbe69a000},{0xbe69c000},{0xbe69e000},{0xbe6a0000},{0xbe6a2000},{0xbe6a4000},{0xbe6a6000},{0xbe6a8000},{0xbe6aa000},{0xbe6ac000},{0xbe6ae000},{0xbe6b0000},{0xbe6b2000},{0xbe6b4000},{0xbe6b6000},{0xbe6b8000},{0xbe6ba000},{0xbe6bc000},{0xbe6be000}, -{0xbe6c0000},{0xbe6c2000},{0xbe6c4000},{0xbe6c6000},{0xbe6c8000},{0xbe6ca000},{0xbe6cc000},{0xbe6ce000},{0xbe6d0000},{0xbe6d2000},{0xbe6d4000},{0xbe6d6000},{0xbe6d8000},{0xbe6da000},{0xbe6dc000},{0xbe6de000},{0xbe6e0000},{0xbe6e2000},{0xbe6e4000},{0xbe6e6000},{0xbe6e8000},{0xbe6ea000},{0xbe6ec000},{0xbe6ee000},{0xbe6f0000},{0xbe6f2000},{0xbe6f4000},{0xbe6f6000},{0xbe6f8000},{0xbe6fa000},{0xbe6fc000},{0xbe6fe000}, -{0xbe700000},{0xbe702000},{0xbe704000},{0xbe706000},{0xbe708000},{0xbe70a000},{0xbe70c000},{0xbe70e000},{0xbe710000},{0xbe712000},{0xbe714000},{0xbe716000},{0xbe718000},{0xbe71a000},{0xbe71c000},{0xbe71e000},{0xbe720000},{0xbe722000},{0xbe724000},{0xbe726000},{0xbe728000},{0xbe72a000},{0xbe72c000},{0xbe72e000},{0xbe730000},{0xbe732000},{0xbe734000},{0xbe736000},{0xbe738000},{0xbe73a000},{0xbe73c000},{0xbe73e000}, -{0xbe740000},{0xbe742000},{0xbe744000},{0xbe746000},{0xbe748000},{0xbe74a000},{0xbe74c000},{0xbe74e000},{0xbe750000},{0xbe752000},{0xbe754000},{0xbe756000},{0xbe758000},{0xbe75a000},{0xbe75c000},{0xbe75e000},{0xbe760000},{0xbe762000},{0xbe764000},{0xbe766000},{0xbe768000},{0xbe76a000},{0xbe76c000},{0xbe76e000},{0xbe770000},{0xbe772000},{0xbe774000},{0xbe776000},{0xbe778000},{0xbe77a000},{0xbe77c000},{0xbe77e000}, -{0xbe780000},{0xbe782000},{0xbe784000},{0xbe786000},{0xbe788000},{0xbe78a000},{0xbe78c000},{0xbe78e000},{0xbe790000},{0xbe792000},{0xbe794000},{0xbe796000},{0xbe798000},{0xbe79a000},{0xbe79c000},{0xbe79e000},{0xbe7a0000},{0xbe7a2000},{0xbe7a4000},{0xbe7a6000},{0xbe7a8000},{0xbe7aa000},{0xbe7ac000},{0xbe7ae000},{0xbe7b0000},{0xbe7b2000},{0xbe7b4000},{0xbe7b6000},{0xbe7b8000},{0xbe7ba000},{0xbe7bc000},{0xbe7be000}, -{0xbe7c0000},{0xbe7c2000},{0xbe7c4000},{0xbe7c6000},{0xbe7c8000},{0xbe7ca000},{0xbe7cc000},{0xbe7ce000},{0xbe7d0000},{0xbe7d2000},{0xbe7d4000},{0xbe7d6000},{0xbe7d8000},{0xbe7da000},{0xbe7dc000},{0xbe7de000},{0xbe7e0000},{0xbe7e2000},{0xbe7e4000},{0xbe7e6000},{0xbe7e8000},{0xbe7ea000},{0xbe7ec000},{0xbe7ee000},{0xbe7f0000},{0xbe7f2000},{0xbe7f4000},{0xbe7f6000},{0xbe7f8000},{0xbe7fa000},{0xbe7fc000},{0xbe7fe000}, -{0xbe800000},{0xbe802000},{0xbe804000},{0xbe806000},{0xbe808000},{0xbe80a000},{0xbe80c000},{0xbe80e000},{0xbe810000},{0xbe812000},{0xbe814000},{0xbe816000},{0xbe818000},{0xbe81a000},{0xbe81c000},{0xbe81e000},{0xbe820000},{0xbe822000},{0xbe824000},{0xbe826000},{0xbe828000},{0xbe82a000},{0xbe82c000},{0xbe82e000},{0xbe830000},{0xbe832000},{0xbe834000},{0xbe836000},{0xbe838000},{0xbe83a000},{0xbe83c000},{0xbe83e000}, -{0xbe840000},{0xbe842000},{0xbe844000},{0xbe846000},{0xbe848000},{0xbe84a000},{0xbe84c000},{0xbe84e000},{0xbe850000},{0xbe852000},{0xbe854000},{0xbe856000},{0xbe858000},{0xbe85a000},{0xbe85c000},{0xbe85e000},{0xbe860000},{0xbe862000},{0xbe864000},{0xbe866000},{0xbe868000},{0xbe86a000},{0xbe86c000},{0xbe86e000},{0xbe870000},{0xbe872000},{0xbe874000},{0xbe876000},{0xbe878000},{0xbe87a000},{0xbe87c000},{0xbe87e000}, -{0xbe880000},{0xbe882000},{0xbe884000},{0xbe886000},{0xbe888000},{0xbe88a000},{0xbe88c000},{0xbe88e000},{0xbe890000},{0xbe892000},{0xbe894000},{0xbe896000},{0xbe898000},{0xbe89a000},{0xbe89c000},{0xbe89e000},{0xbe8a0000},{0xbe8a2000},{0xbe8a4000},{0xbe8a6000},{0xbe8a8000},{0xbe8aa000},{0xbe8ac000},{0xbe8ae000},{0xbe8b0000},{0xbe8b2000},{0xbe8b4000},{0xbe8b6000},{0xbe8b8000},{0xbe8ba000},{0xbe8bc000},{0xbe8be000}, -{0xbe8c0000},{0xbe8c2000},{0xbe8c4000},{0xbe8c6000},{0xbe8c8000},{0xbe8ca000},{0xbe8cc000},{0xbe8ce000},{0xbe8d0000},{0xbe8d2000},{0xbe8d4000},{0xbe8d6000},{0xbe8d8000},{0xbe8da000},{0xbe8dc000},{0xbe8de000},{0xbe8e0000},{0xbe8e2000},{0xbe8e4000},{0xbe8e6000},{0xbe8e8000},{0xbe8ea000},{0xbe8ec000},{0xbe8ee000},{0xbe8f0000},{0xbe8f2000},{0xbe8f4000},{0xbe8f6000},{0xbe8f8000},{0xbe8fa000},{0xbe8fc000},{0xbe8fe000}, -{0xbe900000},{0xbe902000},{0xbe904000},{0xbe906000},{0xbe908000},{0xbe90a000},{0xbe90c000},{0xbe90e000},{0xbe910000},{0xbe912000},{0xbe914000},{0xbe916000},{0xbe918000},{0xbe91a000},{0xbe91c000},{0xbe91e000},{0xbe920000},{0xbe922000},{0xbe924000},{0xbe926000},{0xbe928000},{0xbe92a000},{0xbe92c000},{0xbe92e000},{0xbe930000},{0xbe932000},{0xbe934000},{0xbe936000},{0xbe938000},{0xbe93a000},{0xbe93c000},{0xbe93e000}, -{0xbe940000},{0xbe942000},{0xbe944000},{0xbe946000},{0xbe948000},{0xbe94a000},{0xbe94c000},{0xbe94e000},{0xbe950000},{0xbe952000},{0xbe954000},{0xbe956000},{0xbe958000},{0xbe95a000},{0xbe95c000},{0xbe95e000},{0xbe960000},{0xbe962000},{0xbe964000},{0xbe966000},{0xbe968000},{0xbe96a000},{0xbe96c000},{0xbe96e000},{0xbe970000},{0xbe972000},{0xbe974000},{0xbe976000},{0xbe978000},{0xbe97a000},{0xbe97c000},{0xbe97e000}, -{0xbe980000},{0xbe982000},{0xbe984000},{0xbe986000},{0xbe988000},{0xbe98a000},{0xbe98c000},{0xbe98e000},{0xbe990000},{0xbe992000},{0xbe994000},{0xbe996000},{0xbe998000},{0xbe99a000},{0xbe99c000},{0xbe99e000},{0xbe9a0000},{0xbe9a2000},{0xbe9a4000},{0xbe9a6000},{0xbe9a8000},{0xbe9aa000},{0xbe9ac000},{0xbe9ae000},{0xbe9b0000},{0xbe9b2000},{0xbe9b4000},{0xbe9b6000},{0xbe9b8000},{0xbe9ba000},{0xbe9bc000},{0xbe9be000}, -{0xbe9c0000},{0xbe9c2000},{0xbe9c4000},{0xbe9c6000},{0xbe9c8000},{0xbe9ca000},{0xbe9cc000},{0xbe9ce000},{0xbe9d0000},{0xbe9d2000},{0xbe9d4000},{0xbe9d6000},{0xbe9d8000},{0xbe9da000},{0xbe9dc000},{0xbe9de000},{0xbe9e0000},{0xbe9e2000},{0xbe9e4000},{0xbe9e6000},{0xbe9e8000},{0xbe9ea000},{0xbe9ec000},{0xbe9ee000},{0xbe9f0000},{0xbe9f2000},{0xbe9f4000},{0xbe9f6000},{0xbe9f8000},{0xbe9fa000},{0xbe9fc000},{0xbe9fe000}, -{0xbea00000},{0xbea02000},{0xbea04000},{0xbea06000},{0xbea08000},{0xbea0a000},{0xbea0c000},{0xbea0e000},{0xbea10000},{0xbea12000},{0xbea14000},{0xbea16000},{0xbea18000},{0xbea1a000},{0xbea1c000},{0xbea1e000},{0xbea20000},{0xbea22000},{0xbea24000},{0xbea26000},{0xbea28000},{0xbea2a000},{0xbea2c000},{0xbea2e000},{0xbea30000},{0xbea32000},{0xbea34000},{0xbea36000},{0xbea38000},{0xbea3a000},{0xbea3c000},{0xbea3e000}, -{0xbea40000},{0xbea42000},{0xbea44000},{0xbea46000},{0xbea48000},{0xbea4a000},{0xbea4c000},{0xbea4e000},{0xbea50000},{0xbea52000},{0xbea54000},{0xbea56000},{0xbea58000},{0xbea5a000},{0xbea5c000},{0xbea5e000},{0xbea60000},{0xbea62000},{0xbea64000},{0xbea66000},{0xbea68000},{0xbea6a000},{0xbea6c000},{0xbea6e000},{0xbea70000},{0xbea72000},{0xbea74000},{0xbea76000},{0xbea78000},{0xbea7a000},{0xbea7c000},{0xbea7e000}, -{0xbea80000},{0xbea82000},{0xbea84000},{0xbea86000},{0xbea88000},{0xbea8a000},{0xbea8c000},{0xbea8e000},{0xbea90000},{0xbea92000},{0xbea94000},{0xbea96000},{0xbea98000},{0xbea9a000},{0xbea9c000},{0xbea9e000},{0xbeaa0000},{0xbeaa2000},{0xbeaa4000},{0xbeaa6000},{0xbeaa8000},{0xbeaaa000},{0xbeaac000},{0xbeaae000},{0xbeab0000},{0xbeab2000},{0xbeab4000},{0xbeab6000},{0xbeab8000},{0xbeaba000},{0xbeabc000},{0xbeabe000}, -{0xbeac0000},{0xbeac2000},{0xbeac4000},{0xbeac6000},{0xbeac8000},{0xbeaca000},{0xbeacc000},{0xbeace000},{0xbead0000},{0xbead2000},{0xbead4000},{0xbead6000},{0xbead8000},{0xbeada000},{0xbeadc000},{0xbeade000},{0xbeae0000},{0xbeae2000},{0xbeae4000},{0xbeae6000},{0xbeae8000},{0xbeaea000},{0xbeaec000},{0xbeaee000},{0xbeaf0000},{0xbeaf2000},{0xbeaf4000},{0xbeaf6000},{0xbeaf8000},{0xbeafa000},{0xbeafc000},{0xbeafe000}, -{0xbeb00000},{0xbeb02000},{0xbeb04000},{0xbeb06000},{0xbeb08000},{0xbeb0a000},{0xbeb0c000},{0xbeb0e000},{0xbeb10000},{0xbeb12000},{0xbeb14000},{0xbeb16000},{0xbeb18000},{0xbeb1a000},{0xbeb1c000},{0xbeb1e000},{0xbeb20000},{0xbeb22000},{0xbeb24000},{0xbeb26000},{0xbeb28000},{0xbeb2a000},{0xbeb2c000},{0xbeb2e000},{0xbeb30000},{0xbeb32000},{0xbeb34000},{0xbeb36000},{0xbeb38000},{0xbeb3a000},{0xbeb3c000},{0xbeb3e000}, -{0xbeb40000},{0xbeb42000},{0xbeb44000},{0xbeb46000},{0xbeb48000},{0xbeb4a000},{0xbeb4c000},{0xbeb4e000},{0xbeb50000},{0xbeb52000},{0xbeb54000},{0xbeb56000},{0xbeb58000},{0xbeb5a000},{0xbeb5c000},{0xbeb5e000},{0xbeb60000},{0xbeb62000},{0xbeb64000},{0xbeb66000},{0xbeb68000},{0xbeb6a000},{0xbeb6c000},{0xbeb6e000},{0xbeb70000},{0xbeb72000},{0xbeb74000},{0xbeb76000},{0xbeb78000},{0xbeb7a000},{0xbeb7c000},{0xbeb7e000}, -{0xbeb80000},{0xbeb82000},{0xbeb84000},{0xbeb86000},{0xbeb88000},{0xbeb8a000},{0xbeb8c000},{0xbeb8e000},{0xbeb90000},{0xbeb92000},{0xbeb94000},{0xbeb96000},{0xbeb98000},{0xbeb9a000},{0xbeb9c000},{0xbeb9e000},{0xbeba0000},{0xbeba2000},{0xbeba4000},{0xbeba6000},{0xbeba8000},{0xbebaa000},{0xbebac000},{0xbebae000},{0xbebb0000},{0xbebb2000},{0xbebb4000},{0xbebb6000},{0xbebb8000},{0xbebba000},{0xbebbc000},{0xbebbe000}, -{0xbebc0000},{0xbebc2000},{0xbebc4000},{0xbebc6000},{0xbebc8000},{0xbebca000},{0xbebcc000},{0xbebce000},{0xbebd0000},{0xbebd2000},{0xbebd4000},{0xbebd6000},{0xbebd8000},{0xbebda000},{0xbebdc000},{0xbebde000},{0xbebe0000},{0xbebe2000},{0xbebe4000},{0xbebe6000},{0xbebe8000},{0xbebea000},{0xbebec000},{0xbebee000},{0xbebf0000},{0xbebf2000},{0xbebf4000},{0xbebf6000},{0xbebf8000},{0xbebfa000},{0xbebfc000},{0xbebfe000}, -{0xbec00000},{0xbec02000},{0xbec04000},{0xbec06000},{0xbec08000},{0xbec0a000},{0xbec0c000},{0xbec0e000},{0xbec10000},{0xbec12000},{0xbec14000},{0xbec16000},{0xbec18000},{0xbec1a000},{0xbec1c000},{0xbec1e000},{0xbec20000},{0xbec22000},{0xbec24000},{0xbec26000},{0xbec28000},{0xbec2a000},{0xbec2c000},{0xbec2e000},{0xbec30000},{0xbec32000},{0xbec34000},{0xbec36000},{0xbec38000},{0xbec3a000},{0xbec3c000},{0xbec3e000}, -{0xbec40000},{0xbec42000},{0xbec44000},{0xbec46000},{0xbec48000},{0xbec4a000},{0xbec4c000},{0xbec4e000},{0xbec50000},{0xbec52000},{0xbec54000},{0xbec56000},{0xbec58000},{0xbec5a000},{0xbec5c000},{0xbec5e000},{0xbec60000},{0xbec62000},{0xbec64000},{0xbec66000},{0xbec68000},{0xbec6a000},{0xbec6c000},{0xbec6e000},{0xbec70000},{0xbec72000},{0xbec74000},{0xbec76000},{0xbec78000},{0xbec7a000},{0xbec7c000},{0xbec7e000}, -{0xbec80000},{0xbec82000},{0xbec84000},{0xbec86000},{0xbec88000},{0xbec8a000},{0xbec8c000},{0xbec8e000},{0xbec90000},{0xbec92000},{0xbec94000},{0xbec96000},{0xbec98000},{0xbec9a000},{0xbec9c000},{0xbec9e000},{0xbeca0000},{0xbeca2000},{0xbeca4000},{0xbeca6000},{0xbeca8000},{0xbecaa000},{0xbecac000},{0xbecae000},{0xbecb0000},{0xbecb2000},{0xbecb4000},{0xbecb6000},{0xbecb8000},{0xbecba000},{0xbecbc000},{0xbecbe000}, -{0xbecc0000},{0xbecc2000},{0xbecc4000},{0xbecc6000},{0xbecc8000},{0xbecca000},{0xbeccc000},{0xbecce000},{0xbecd0000},{0xbecd2000},{0xbecd4000},{0xbecd6000},{0xbecd8000},{0xbecda000},{0xbecdc000},{0xbecde000},{0xbece0000},{0xbece2000},{0xbece4000},{0xbece6000},{0xbece8000},{0xbecea000},{0xbecec000},{0xbecee000},{0xbecf0000},{0xbecf2000},{0xbecf4000},{0xbecf6000},{0xbecf8000},{0xbecfa000},{0xbecfc000},{0xbecfe000}, -{0xbed00000},{0xbed02000},{0xbed04000},{0xbed06000},{0xbed08000},{0xbed0a000},{0xbed0c000},{0xbed0e000},{0xbed10000},{0xbed12000},{0xbed14000},{0xbed16000},{0xbed18000},{0xbed1a000},{0xbed1c000},{0xbed1e000},{0xbed20000},{0xbed22000},{0xbed24000},{0xbed26000},{0xbed28000},{0xbed2a000},{0xbed2c000},{0xbed2e000},{0xbed30000},{0xbed32000},{0xbed34000},{0xbed36000},{0xbed38000},{0xbed3a000},{0xbed3c000},{0xbed3e000}, -{0xbed40000},{0xbed42000},{0xbed44000},{0xbed46000},{0xbed48000},{0xbed4a000},{0xbed4c000},{0xbed4e000},{0xbed50000},{0xbed52000},{0xbed54000},{0xbed56000},{0xbed58000},{0xbed5a000},{0xbed5c000},{0xbed5e000},{0xbed60000},{0xbed62000},{0xbed64000},{0xbed66000},{0xbed68000},{0xbed6a000},{0xbed6c000},{0xbed6e000},{0xbed70000},{0xbed72000},{0xbed74000},{0xbed76000},{0xbed78000},{0xbed7a000},{0xbed7c000},{0xbed7e000}, -{0xbed80000},{0xbed82000},{0xbed84000},{0xbed86000},{0xbed88000},{0xbed8a000},{0xbed8c000},{0xbed8e000},{0xbed90000},{0xbed92000},{0xbed94000},{0xbed96000},{0xbed98000},{0xbed9a000},{0xbed9c000},{0xbed9e000},{0xbeda0000},{0xbeda2000},{0xbeda4000},{0xbeda6000},{0xbeda8000},{0xbedaa000},{0xbedac000},{0xbedae000},{0xbedb0000},{0xbedb2000},{0xbedb4000},{0xbedb6000},{0xbedb8000},{0xbedba000},{0xbedbc000},{0xbedbe000}, -{0xbedc0000},{0xbedc2000},{0xbedc4000},{0xbedc6000},{0xbedc8000},{0xbedca000},{0xbedcc000},{0xbedce000},{0xbedd0000},{0xbedd2000},{0xbedd4000},{0xbedd6000},{0xbedd8000},{0xbedda000},{0xbeddc000},{0xbedde000},{0xbede0000},{0xbede2000},{0xbede4000},{0xbede6000},{0xbede8000},{0xbedea000},{0xbedec000},{0xbedee000},{0xbedf0000},{0xbedf2000},{0xbedf4000},{0xbedf6000},{0xbedf8000},{0xbedfa000},{0xbedfc000},{0xbedfe000}, -{0xbee00000},{0xbee02000},{0xbee04000},{0xbee06000},{0xbee08000},{0xbee0a000},{0xbee0c000},{0xbee0e000},{0xbee10000},{0xbee12000},{0xbee14000},{0xbee16000},{0xbee18000},{0xbee1a000},{0xbee1c000},{0xbee1e000},{0xbee20000},{0xbee22000},{0xbee24000},{0xbee26000},{0xbee28000},{0xbee2a000},{0xbee2c000},{0xbee2e000},{0xbee30000},{0xbee32000},{0xbee34000},{0xbee36000},{0xbee38000},{0xbee3a000},{0xbee3c000},{0xbee3e000}, -{0xbee40000},{0xbee42000},{0xbee44000},{0xbee46000},{0xbee48000},{0xbee4a000},{0xbee4c000},{0xbee4e000},{0xbee50000},{0xbee52000},{0xbee54000},{0xbee56000},{0xbee58000},{0xbee5a000},{0xbee5c000},{0xbee5e000},{0xbee60000},{0xbee62000},{0xbee64000},{0xbee66000},{0xbee68000},{0xbee6a000},{0xbee6c000},{0xbee6e000},{0xbee70000},{0xbee72000},{0xbee74000},{0xbee76000},{0xbee78000},{0xbee7a000},{0xbee7c000},{0xbee7e000}, -{0xbee80000},{0xbee82000},{0xbee84000},{0xbee86000},{0xbee88000},{0xbee8a000},{0xbee8c000},{0xbee8e000},{0xbee90000},{0xbee92000},{0xbee94000},{0xbee96000},{0xbee98000},{0xbee9a000},{0xbee9c000},{0xbee9e000},{0xbeea0000},{0xbeea2000},{0xbeea4000},{0xbeea6000},{0xbeea8000},{0xbeeaa000},{0xbeeac000},{0xbeeae000},{0xbeeb0000},{0xbeeb2000},{0xbeeb4000},{0xbeeb6000},{0xbeeb8000},{0xbeeba000},{0xbeebc000},{0xbeebe000}, -{0xbeec0000},{0xbeec2000},{0xbeec4000},{0xbeec6000},{0xbeec8000},{0xbeeca000},{0xbeecc000},{0xbeece000},{0xbeed0000},{0xbeed2000},{0xbeed4000},{0xbeed6000},{0xbeed8000},{0xbeeda000},{0xbeedc000},{0xbeede000},{0xbeee0000},{0xbeee2000},{0xbeee4000},{0xbeee6000},{0xbeee8000},{0xbeeea000},{0xbeeec000},{0xbeeee000},{0xbeef0000},{0xbeef2000},{0xbeef4000},{0xbeef6000},{0xbeef8000},{0xbeefa000},{0xbeefc000},{0xbeefe000}, -{0xbef00000},{0xbef02000},{0xbef04000},{0xbef06000},{0xbef08000},{0xbef0a000},{0xbef0c000},{0xbef0e000},{0xbef10000},{0xbef12000},{0xbef14000},{0xbef16000},{0xbef18000},{0xbef1a000},{0xbef1c000},{0xbef1e000},{0xbef20000},{0xbef22000},{0xbef24000},{0xbef26000},{0xbef28000},{0xbef2a000},{0xbef2c000},{0xbef2e000},{0xbef30000},{0xbef32000},{0xbef34000},{0xbef36000},{0xbef38000},{0xbef3a000},{0xbef3c000},{0xbef3e000}, -{0xbef40000},{0xbef42000},{0xbef44000},{0xbef46000},{0xbef48000},{0xbef4a000},{0xbef4c000},{0xbef4e000},{0xbef50000},{0xbef52000},{0xbef54000},{0xbef56000},{0xbef58000},{0xbef5a000},{0xbef5c000},{0xbef5e000},{0xbef60000},{0xbef62000},{0xbef64000},{0xbef66000},{0xbef68000},{0xbef6a000},{0xbef6c000},{0xbef6e000},{0xbef70000},{0xbef72000},{0xbef74000},{0xbef76000},{0xbef78000},{0xbef7a000},{0xbef7c000},{0xbef7e000}, -{0xbef80000},{0xbef82000},{0xbef84000},{0xbef86000},{0xbef88000},{0xbef8a000},{0xbef8c000},{0xbef8e000},{0xbef90000},{0xbef92000},{0xbef94000},{0xbef96000},{0xbef98000},{0xbef9a000},{0xbef9c000},{0xbef9e000},{0xbefa0000},{0xbefa2000},{0xbefa4000},{0xbefa6000},{0xbefa8000},{0xbefaa000},{0xbefac000},{0xbefae000},{0xbefb0000},{0xbefb2000},{0xbefb4000},{0xbefb6000},{0xbefb8000},{0xbefba000},{0xbefbc000},{0xbefbe000}, -{0xbefc0000},{0xbefc2000},{0xbefc4000},{0xbefc6000},{0xbefc8000},{0xbefca000},{0xbefcc000},{0xbefce000},{0xbefd0000},{0xbefd2000},{0xbefd4000},{0xbefd6000},{0xbefd8000},{0xbefda000},{0xbefdc000},{0xbefde000},{0xbefe0000},{0xbefe2000},{0xbefe4000},{0xbefe6000},{0xbefe8000},{0xbefea000},{0xbefec000},{0xbefee000},{0xbeff0000},{0xbeff2000},{0xbeff4000},{0xbeff6000},{0xbeff8000},{0xbeffa000},{0xbeffc000},{0xbeffe000}, -{0xbf000000},{0xbf002000},{0xbf004000},{0xbf006000},{0xbf008000},{0xbf00a000},{0xbf00c000},{0xbf00e000},{0xbf010000},{0xbf012000},{0xbf014000},{0xbf016000},{0xbf018000},{0xbf01a000},{0xbf01c000},{0xbf01e000},{0xbf020000},{0xbf022000},{0xbf024000},{0xbf026000},{0xbf028000},{0xbf02a000},{0xbf02c000},{0xbf02e000},{0xbf030000},{0xbf032000},{0xbf034000},{0xbf036000},{0xbf038000},{0xbf03a000},{0xbf03c000},{0xbf03e000}, -{0xbf040000},{0xbf042000},{0xbf044000},{0xbf046000},{0xbf048000},{0xbf04a000},{0xbf04c000},{0xbf04e000},{0xbf050000},{0xbf052000},{0xbf054000},{0xbf056000},{0xbf058000},{0xbf05a000},{0xbf05c000},{0xbf05e000},{0xbf060000},{0xbf062000},{0xbf064000},{0xbf066000},{0xbf068000},{0xbf06a000},{0xbf06c000},{0xbf06e000},{0xbf070000},{0xbf072000},{0xbf074000},{0xbf076000},{0xbf078000},{0xbf07a000},{0xbf07c000},{0xbf07e000}, -{0xbf080000},{0xbf082000},{0xbf084000},{0xbf086000},{0xbf088000},{0xbf08a000},{0xbf08c000},{0xbf08e000},{0xbf090000},{0xbf092000},{0xbf094000},{0xbf096000},{0xbf098000},{0xbf09a000},{0xbf09c000},{0xbf09e000},{0xbf0a0000},{0xbf0a2000},{0xbf0a4000},{0xbf0a6000},{0xbf0a8000},{0xbf0aa000},{0xbf0ac000},{0xbf0ae000},{0xbf0b0000},{0xbf0b2000},{0xbf0b4000},{0xbf0b6000},{0xbf0b8000},{0xbf0ba000},{0xbf0bc000},{0xbf0be000}, -{0xbf0c0000},{0xbf0c2000},{0xbf0c4000},{0xbf0c6000},{0xbf0c8000},{0xbf0ca000},{0xbf0cc000},{0xbf0ce000},{0xbf0d0000},{0xbf0d2000},{0xbf0d4000},{0xbf0d6000},{0xbf0d8000},{0xbf0da000},{0xbf0dc000},{0xbf0de000},{0xbf0e0000},{0xbf0e2000},{0xbf0e4000},{0xbf0e6000},{0xbf0e8000},{0xbf0ea000},{0xbf0ec000},{0xbf0ee000},{0xbf0f0000},{0xbf0f2000},{0xbf0f4000},{0xbf0f6000},{0xbf0f8000},{0xbf0fa000},{0xbf0fc000},{0xbf0fe000}, -{0xbf100000},{0xbf102000},{0xbf104000},{0xbf106000},{0xbf108000},{0xbf10a000},{0xbf10c000},{0xbf10e000},{0xbf110000},{0xbf112000},{0xbf114000},{0xbf116000},{0xbf118000},{0xbf11a000},{0xbf11c000},{0xbf11e000},{0xbf120000},{0xbf122000},{0xbf124000},{0xbf126000},{0xbf128000},{0xbf12a000},{0xbf12c000},{0xbf12e000},{0xbf130000},{0xbf132000},{0xbf134000},{0xbf136000},{0xbf138000},{0xbf13a000},{0xbf13c000},{0xbf13e000}, -{0xbf140000},{0xbf142000},{0xbf144000},{0xbf146000},{0xbf148000},{0xbf14a000},{0xbf14c000},{0xbf14e000},{0xbf150000},{0xbf152000},{0xbf154000},{0xbf156000},{0xbf158000},{0xbf15a000},{0xbf15c000},{0xbf15e000},{0xbf160000},{0xbf162000},{0xbf164000},{0xbf166000},{0xbf168000},{0xbf16a000},{0xbf16c000},{0xbf16e000},{0xbf170000},{0xbf172000},{0xbf174000},{0xbf176000},{0xbf178000},{0xbf17a000},{0xbf17c000},{0xbf17e000}, -{0xbf180000},{0xbf182000},{0xbf184000},{0xbf186000},{0xbf188000},{0xbf18a000},{0xbf18c000},{0xbf18e000},{0xbf190000},{0xbf192000},{0xbf194000},{0xbf196000},{0xbf198000},{0xbf19a000},{0xbf19c000},{0xbf19e000},{0xbf1a0000},{0xbf1a2000},{0xbf1a4000},{0xbf1a6000},{0xbf1a8000},{0xbf1aa000},{0xbf1ac000},{0xbf1ae000},{0xbf1b0000},{0xbf1b2000},{0xbf1b4000},{0xbf1b6000},{0xbf1b8000},{0xbf1ba000},{0xbf1bc000},{0xbf1be000}, -{0xbf1c0000},{0xbf1c2000},{0xbf1c4000},{0xbf1c6000},{0xbf1c8000},{0xbf1ca000},{0xbf1cc000},{0xbf1ce000},{0xbf1d0000},{0xbf1d2000},{0xbf1d4000},{0xbf1d6000},{0xbf1d8000},{0xbf1da000},{0xbf1dc000},{0xbf1de000},{0xbf1e0000},{0xbf1e2000},{0xbf1e4000},{0xbf1e6000},{0xbf1e8000},{0xbf1ea000},{0xbf1ec000},{0xbf1ee000},{0xbf1f0000},{0xbf1f2000},{0xbf1f4000},{0xbf1f6000},{0xbf1f8000},{0xbf1fa000},{0xbf1fc000},{0xbf1fe000}, -{0xbf200000},{0xbf202000},{0xbf204000},{0xbf206000},{0xbf208000},{0xbf20a000},{0xbf20c000},{0xbf20e000},{0xbf210000},{0xbf212000},{0xbf214000},{0xbf216000},{0xbf218000},{0xbf21a000},{0xbf21c000},{0xbf21e000},{0xbf220000},{0xbf222000},{0xbf224000},{0xbf226000},{0xbf228000},{0xbf22a000},{0xbf22c000},{0xbf22e000},{0xbf230000},{0xbf232000},{0xbf234000},{0xbf236000},{0xbf238000},{0xbf23a000},{0xbf23c000},{0xbf23e000}, -{0xbf240000},{0xbf242000},{0xbf244000},{0xbf246000},{0xbf248000},{0xbf24a000},{0xbf24c000},{0xbf24e000},{0xbf250000},{0xbf252000},{0xbf254000},{0xbf256000},{0xbf258000},{0xbf25a000},{0xbf25c000},{0xbf25e000},{0xbf260000},{0xbf262000},{0xbf264000},{0xbf266000},{0xbf268000},{0xbf26a000},{0xbf26c000},{0xbf26e000},{0xbf270000},{0xbf272000},{0xbf274000},{0xbf276000},{0xbf278000},{0xbf27a000},{0xbf27c000},{0xbf27e000}, -{0xbf280000},{0xbf282000},{0xbf284000},{0xbf286000},{0xbf288000},{0xbf28a000},{0xbf28c000},{0xbf28e000},{0xbf290000},{0xbf292000},{0xbf294000},{0xbf296000},{0xbf298000},{0xbf29a000},{0xbf29c000},{0xbf29e000},{0xbf2a0000},{0xbf2a2000},{0xbf2a4000},{0xbf2a6000},{0xbf2a8000},{0xbf2aa000},{0xbf2ac000},{0xbf2ae000},{0xbf2b0000},{0xbf2b2000},{0xbf2b4000},{0xbf2b6000},{0xbf2b8000},{0xbf2ba000},{0xbf2bc000},{0xbf2be000}, -{0xbf2c0000},{0xbf2c2000},{0xbf2c4000},{0xbf2c6000},{0xbf2c8000},{0xbf2ca000},{0xbf2cc000},{0xbf2ce000},{0xbf2d0000},{0xbf2d2000},{0xbf2d4000},{0xbf2d6000},{0xbf2d8000},{0xbf2da000},{0xbf2dc000},{0xbf2de000},{0xbf2e0000},{0xbf2e2000},{0xbf2e4000},{0xbf2e6000},{0xbf2e8000},{0xbf2ea000},{0xbf2ec000},{0xbf2ee000},{0xbf2f0000},{0xbf2f2000},{0xbf2f4000},{0xbf2f6000},{0xbf2f8000},{0xbf2fa000},{0xbf2fc000},{0xbf2fe000}, -{0xbf300000},{0xbf302000},{0xbf304000},{0xbf306000},{0xbf308000},{0xbf30a000},{0xbf30c000},{0xbf30e000},{0xbf310000},{0xbf312000},{0xbf314000},{0xbf316000},{0xbf318000},{0xbf31a000},{0xbf31c000},{0xbf31e000},{0xbf320000},{0xbf322000},{0xbf324000},{0xbf326000},{0xbf328000},{0xbf32a000},{0xbf32c000},{0xbf32e000},{0xbf330000},{0xbf332000},{0xbf334000},{0xbf336000},{0xbf338000},{0xbf33a000},{0xbf33c000},{0xbf33e000}, -{0xbf340000},{0xbf342000},{0xbf344000},{0xbf346000},{0xbf348000},{0xbf34a000},{0xbf34c000},{0xbf34e000},{0xbf350000},{0xbf352000},{0xbf354000},{0xbf356000},{0xbf358000},{0xbf35a000},{0xbf35c000},{0xbf35e000},{0xbf360000},{0xbf362000},{0xbf364000},{0xbf366000},{0xbf368000},{0xbf36a000},{0xbf36c000},{0xbf36e000},{0xbf370000},{0xbf372000},{0xbf374000},{0xbf376000},{0xbf378000},{0xbf37a000},{0xbf37c000},{0xbf37e000}, -{0xbf380000},{0xbf382000},{0xbf384000},{0xbf386000},{0xbf388000},{0xbf38a000},{0xbf38c000},{0xbf38e000},{0xbf390000},{0xbf392000},{0xbf394000},{0xbf396000},{0xbf398000},{0xbf39a000},{0xbf39c000},{0xbf39e000},{0xbf3a0000},{0xbf3a2000},{0xbf3a4000},{0xbf3a6000},{0xbf3a8000},{0xbf3aa000},{0xbf3ac000},{0xbf3ae000},{0xbf3b0000},{0xbf3b2000},{0xbf3b4000},{0xbf3b6000},{0xbf3b8000},{0xbf3ba000},{0xbf3bc000},{0xbf3be000}, -{0xbf3c0000},{0xbf3c2000},{0xbf3c4000},{0xbf3c6000},{0xbf3c8000},{0xbf3ca000},{0xbf3cc000},{0xbf3ce000},{0xbf3d0000},{0xbf3d2000},{0xbf3d4000},{0xbf3d6000},{0xbf3d8000},{0xbf3da000},{0xbf3dc000},{0xbf3de000},{0xbf3e0000},{0xbf3e2000},{0xbf3e4000},{0xbf3e6000},{0xbf3e8000},{0xbf3ea000},{0xbf3ec000},{0xbf3ee000},{0xbf3f0000},{0xbf3f2000},{0xbf3f4000},{0xbf3f6000},{0xbf3f8000},{0xbf3fa000},{0xbf3fc000},{0xbf3fe000}, -{0xbf400000},{0xbf402000},{0xbf404000},{0xbf406000},{0xbf408000},{0xbf40a000},{0xbf40c000},{0xbf40e000},{0xbf410000},{0xbf412000},{0xbf414000},{0xbf416000},{0xbf418000},{0xbf41a000},{0xbf41c000},{0xbf41e000},{0xbf420000},{0xbf422000},{0xbf424000},{0xbf426000},{0xbf428000},{0xbf42a000},{0xbf42c000},{0xbf42e000},{0xbf430000},{0xbf432000},{0xbf434000},{0xbf436000},{0xbf438000},{0xbf43a000},{0xbf43c000},{0xbf43e000}, -{0xbf440000},{0xbf442000},{0xbf444000},{0xbf446000},{0xbf448000},{0xbf44a000},{0xbf44c000},{0xbf44e000},{0xbf450000},{0xbf452000},{0xbf454000},{0xbf456000},{0xbf458000},{0xbf45a000},{0xbf45c000},{0xbf45e000},{0xbf460000},{0xbf462000},{0xbf464000},{0xbf466000},{0xbf468000},{0xbf46a000},{0xbf46c000},{0xbf46e000},{0xbf470000},{0xbf472000},{0xbf474000},{0xbf476000},{0xbf478000},{0xbf47a000},{0xbf47c000},{0xbf47e000}, -{0xbf480000},{0xbf482000},{0xbf484000},{0xbf486000},{0xbf488000},{0xbf48a000},{0xbf48c000},{0xbf48e000},{0xbf490000},{0xbf492000},{0xbf494000},{0xbf496000},{0xbf498000},{0xbf49a000},{0xbf49c000},{0xbf49e000},{0xbf4a0000},{0xbf4a2000},{0xbf4a4000},{0xbf4a6000},{0xbf4a8000},{0xbf4aa000},{0xbf4ac000},{0xbf4ae000},{0xbf4b0000},{0xbf4b2000},{0xbf4b4000},{0xbf4b6000},{0xbf4b8000},{0xbf4ba000},{0xbf4bc000},{0xbf4be000}, -{0xbf4c0000},{0xbf4c2000},{0xbf4c4000},{0xbf4c6000},{0xbf4c8000},{0xbf4ca000},{0xbf4cc000},{0xbf4ce000},{0xbf4d0000},{0xbf4d2000},{0xbf4d4000},{0xbf4d6000},{0xbf4d8000},{0xbf4da000},{0xbf4dc000},{0xbf4de000},{0xbf4e0000},{0xbf4e2000},{0xbf4e4000},{0xbf4e6000},{0xbf4e8000},{0xbf4ea000},{0xbf4ec000},{0xbf4ee000},{0xbf4f0000},{0xbf4f2000},{0xbf4f4000},{0xbf4f6000},{0xbf4f8000},{0xbf4fa000},{0xbf4fc000},{0xbf4fe000}, -{0xbf500000},{0xbf502000},{0xbf504000},{0xbf506000},{0xbf508000},{0xbf50a000},{0xbf50c000},{0xbf50e000},{0xbf510000},{0xbf512000},{0xbf514000},{0xbf516000},{0xbf518000},{0xbf51a000},{0xbf51c000},{0xbf51e000},{0xbf520000},{0xbf522000},{0xbf524000},{0xbf526000},{0xbf528000},{0xbf52a000},{0xbf52c000},{0xbf52e000},{0xbf530000},{0xbf532000},{0xbf534000},{0xbf536000},{0xbf538000},{0xbf53a000},{0xbf53c000},{0xbf53e000}, -{0xbf540000},{0xbf542000},{0xbf544000},{0xbf546000},{0xbf548000},{0xbf54a000},{0xbf54c000},{0xbf54e000},{0xbf550000},{0xbf552000},{0xbf554000},{0xbf556000},{0xbf558000},{0xbf55a000},{0xbf55c000},{0xbf55e000},{0xbf560000},{0xbf562000},{0xbf564000},{0xbf566000},{0xbf568000},{0xbf56a000},{0xbf56c000},{0xbf56e000},{0xbf570000},{0xbf572000},{0xbf574000},{0xbf576000},{0xbf578000},{0xbf57a000},{0xbf57c000},{0xbf57e000}, -{0xbf580000},{0xbf582000},{0xbf584000},{0xbf586000},{0xbf588000},{0xbf58a000},{0xbf58c000},{0xbf58e000},{0xbf590000},{0xbf592000},{0xbf594000},{0xbf596000},{0xbf598000},{0xbf59a000},{0xbf59c000},{0xbf59e000},{0xbf5a0000},{0xbf5a2000},{0xbf5a4000},{0xbf5a6000},{0xbf5a8000},{0xbf5aa000},{0xbf5ac000},{0xbf5ae000},{0xbf5b0000},{0xbf5b2000},{0xbf5b4000},{0xbf5b6000},{0xbf5b8000},{0xbf5ba000},{0xbf5bc000},{0xbf5be000}, -{0xbf5c0000},{0xbf5c2000},{0xbf5c4000},{0xbf5c6000},{0xbf5c8000},{0xbf5ca000},{0xbf5cc000},{0xbf5ce000},{0xbf5d0000},{0xbf5d2000},{0xbf5d4000},{0xbf5d6000},{0xbf5d8000},{0xbf5da000},{0xbf5dc000},{0xbf5de000},{0xbf5e0000},{0xbf5e2000},{0xbf5e4000},{0xbf5e6000},{0xbf5e8000},{0xbf5ea000},{0xbf5ec000},{0xbf5ee000},{0xbf5f0000},{0xbf5f2000},{0xbf5f4000},{0xbf5f6000},{0xbf5f8000},{0xbf5fa000},{0xbf5fc000},{0xbf5fe000}, -{0xbf600000},{0xbf602000},{0xbf604000},{0xbf606000},{0xbf608000},{0xbf60a000},{0xbf60c000},{0xbf60e000},{0xbf610000},{0xbf612000},{0xbf614000},{0xbf616000},{0xbf618000},{0xbf61a000},{0xbf61c000},{0xbf61e000},{0xbf620000},{0xbf622000},{0xbf624000},{0xbf626000},{0xbf628000},{0xbf62a000},{0xbf62c000},{0xbf62e000},{0xbf630000},{0xbf632000},{0xbf634000},{0xbf636000},{0xbf638000},{0xbf63a000},{0xbf63c000},{0xbf63e000}, -{0xbf640000},{0xbf642000},{0xbf644000},{0xbf646000},{0xbf648000},{0xbf64a000},{0xbf64c000},{0xbf64e000},{0xbf650000},{0xbf652000},{0xbf654000},{0xbf656000},{0xbf658000},{0xbf65a000},{0xbf65c000},{0xbf65e000},{0xbf660000},{0xbf662000},{0xbf664000},{0xbf666000},{0xbf668000},{0xbf66a000},{0xbf66c000},{0xbf66e000},{0xbf670000},{0xbf672000},{0xbf674000},{0xbf676000},{0xbf678000},{0xbf67a000},{0xbf67c000},{0xbf67e000}, -{0xbf680000},{0xbf682000},{0xbf684000},{0xbf686000},{0xbf688000},{0xbf68a000},{0xbf68c000},{0xbf68e000},{0xbf690000},{0xbf692000},{0xbf694000},{0xbf696000},{0xbf698000},{0xbf69a000},{0xbf69c000},{0xbf69e000},{0xbf6a0000},{0xbf6a2000},{0xbf6a4000},{0xbf6a6000},{0xbf6a8000},{0xbf6aa000},{0xbf6ac000},{0xbf6ae000},{0xbf6b0000},{0xbf6b2000},{0xbf6b4000},{0xbf6b6000},{0xbf6b8000},{0xbf6ba000},{0xbf6bc000},{0xbf6be000}, -{0xbf6c0000},{0xbf6c2000},{0xbf6c4000},{0xbf6c6000},{0xbf6c8000},{0xbf6ca000},{0xbf6cc000},{0xbf6ce000},{0xbf6d0000},{0xbf6d2000},{0xbf6d4000},{0xbf6d6000},{0xbf6d8000},{0xbf6da000},{0xbf6dc000},{0xbf6de000},{0xbf6e0000},{0xbf6e2000},{0xbf6e4000},{0xbf6e6000},{0xbf6e8000},{0xbf6ea000},{0xbf6ec000},{0xbf6ee000},{0xbf6f0000},{0xbf6f2000},{0xbf6f4000},{0xbf6f6000},{0xbf6f8000},{0xbf6fa000},{0xbf6fc000},{0xbf6fe000}, -{0xbf700000},{0xbf702000},{0xbf704000},{0xbf706000},{0xbf708000},{0xbf70a000},{0xbf70c000},{0xbf70e000},{0xbf710000},{0xbf712000},{0xbf714000},{0xbf716000},{0xbf718000},{0xbf71a000},{0xbf71c000},{0xbf71e000},{0xbf720000},{0xbf722000},{0xbf724000},{0xbf726000},{0xbf728000},{0xbf72a000},{0xbf72c000},{0xbf72e000},{0xbf730000},{0xbf732000},{0xbf734000},{0xbf736000},{0xbf738000},{0xbf73a000},{0xbf73c000},{0xbf73e000}, -{0xbf740000},{0xbf742000},{0xbf744000},{0xbf746000},{0xbf748000},{0xbf74a000},{0xbf74c000},{0xbf74e000},{0xbf750000},{0xbf752000},{0xbf754000},{0xbf756000},{0xbf758000},{0xbf75a000},{0xbf75c000},{0xbf75e000},{0xbf760000},{0xbf762000},{0xbf764000},{0xbf766000},{0xbf768000},{0xbf76a000},{0xbf76c000},{0xbf76e000},{0xbf770000},{0xbf772000},{0xbf774000},{0xbf776000},{0xbf778000},{0xbf77a000},{0xbf77c000},{0xbf77e000}, -{0xbf780000},{0xbf782000},{0xbf784000},{0xbf786000},{0xbf788000},{0xbf78a000},{0xbf78c000},{0xbf78e000},{0xbf790000},{0xbf792000},{0xbf794000},{0xbf796000},{0xbf798000},{0xbf79a000},{0xbf79c000},{0xbf79e000},{0xbf7a0000},{0xbf7a2000},{0xbf7a4000},{0xbf7a6000},{0xbf7a8000},{0xbf7aa000},{0xbf7ac000},{0xbf7ae000},{0xbf7b0000},{0xbf7b2000},{0xbf7b4000},{0xbf7b6000},{0xbf7b8000},{0xbf7ba000},{0xbf7bc000},{0xbf7be000}, -{0xbf7c0000},{0xbf7c2000},{0xbf7c4000},{0xbf7c6000},{0xbf7c8000},{0xbf7ca000},{0xbf7cc000},{0xbf7ce000},{0xbf7d0000},{0xbf7d2000},{0xbf7d4000},{0xbf7d6000},{0xbf7d8000},{0xbf7da000},{0xbf7dc000},{0xbf7de000},{0xbf7e0000},{0xbf7e2000},{0xbf7e4000},{0xbf7e6000},{0xbf7e8000},{0xbf7ea000},{0xbf7ec000},{0xbf7ee000},{0xbf7f0000},{0xbf7f2000},{0xbf7f4000},{0xbf7f6000},{0xbf7f8000},{0xbf7fa000},{0xbf7fc000},{0xbf7fe000}, -{0xbf800000},{0xbf802000},{0xbf804000},{0xbf806000},{0xbf808000},{0xbf80a000},{0xbf80c000},{0xbf80e000},{0xbf810000},{0xbf812000},{0xbf814000},{0xbf816000},{0xbf818000},{0xbf81a000},{0xbf81c000},{0xbf81e000},{0xbf820000},{0xbf822000},{0xbf824000},{0xbf826000},{0xbf828000},{0xbf82a000},{0xbf82c000},{0xbf82e000},{0xbf830000},{0xbf832000},{0xbf834000},{0xbf836000},{0xbf838000},{0xbf83a000},{0xbf83c000},{0xbf83e000}, -{0xbf840000},{0xbf842000},{0xbf844000},{0xbf846000},{0xbf848000},{0xbf84a000},{0xbf84c000},{0xbf84e000},{0xbf850000},{0xbf852000},{0xbf854000},{0xbf856000},{0xbf858000},{0xbf85a000},{0xbf85c000},{0xbf85e000},{0xbf860000},{0xbf862000},{0xbf864000},{0xbf866000},{0xbf868000},{0xbf86a000},{0xbf86c000},{0xbf86e000},{0xbf870000},{0xbf872000},{0xbf874000},{0xbf876000},{0xbf878000},{0xbf87a000},{0xbf87c000},{0xbf87e000}, -{0xbf880000},{0xbf882000},{0xbf884000},{0xbf886000},{0xbf888000},{0xbf88a000},{0xbf88c000},{0xbf88e000},{0xbf890000},{0xbf892000},{0xbf894000},{0xbf896000},{0xbf898000},{0xbf89a000},{0xbf89c000},{0xbf89e000},{0xbf8a0000},{0xbf8a2000},{0xbf8a4000},{0xbf8a6000},{0xbf8a8000},{0xbf8aa000},{0xbf8ac000},{0xbf8ae000},{0xbf8b0000},{0xbf8b2000},{0xbf8b4000},{0xbf8b6000},{0xbf8b8000},{0xbf8ba000},{0xbf8bc000},{0xbf8be000}, -{0xbf8c0000},{0xbf8c2000},{0xbf8c4000},{0xbf8c6000},{0xbf8c8000},{0xbf8ca000},{0xbf8cc000},{0xbf8ce000},{0xbf8d0000},{0xbf8d2000},{0xbf8d4000},{0xbf8d6000},{0xbf8d8000},{0xbf8da000},{0xbf8dc000},{0xbf8de000},{0xbf8e0000},{0xbf8e2000},{0xbf8e4000},{0xbf8e6000},{0xbf8e8000},{0xbf8ea000},{0xbf8ec000},{0xbf8ee000},{0xbf8f0000},{0xbf8f2000},{0xbf8f4000},{0xbf8f6000},{0xbf8f8000},{0xbf8fa000},{0xbf8fc000},{0xbf8fe000}, -{0xbf900000},{0xbf902000},{0xbf904000},{0xbf906000},{0xbf908000},{0xbf90a000},{0xbf90c000},{0xbf90e000},{0xbf910000},{0xbf912000},{0xbf914000},{0xbf916000},{0xbf918000},{0xbf91a000},{0xbf91c000},{0xbf91e000},{0xbf920000},{0xbf922000},{0xbf924000},{0xbf926000},{0xbf928000},{0xbf92a000},{0xbf92c000},{0xbf92e000},{0xbf930000},{0xbf932000},{0xbf934000},{0xbf936000},{0xbf938000},{0xbf93a000},{0xbf93c000},{0xbf93e000}, -{0xbf940000},{0xbf942000},{0xbf944000},{0xbf946000},{0xbf948000},{0xbf94a000},{0xbf94c000},{0xbf94e000},{0xbf950000},{0xbf952000},{0xbf954000},{0xbf956000},{0xbf958000},{0xbf95a000},{0xbf95c000},{0xbf95e000},{0xbf960000},{0xbf962000},{0xbf964000},{0xbf966000},{0xbf968000},{0xbf96a000},{0xbf96c000},{0xbf96e000},{0xbf970000},{0xbf972000},{0xbf974000},{0xbf976000},{0xbf978000},{0xbf97a000},{0xbf97c000},{0xbf97e000}, -{0xbf980000},{0xbf982000},{0xbf984000},{0xbf986000},{0xbf988000},{0xbf98a000},{0xbf98c000},{0xbf98e000},{0xbf990000},{0xbf992000},{0xbf994000},{0xbf996000},{0xbf998000},{0xbf99a000},{0xbf99c000},{0xbf99e000},{0xbf9a0000},{0xbf9a2000},{0xbf9a4000},{0xbf9a6000},{0xbf9a8000},{0xbf9aa000},{0xbf9ac000},{0xbf9ae000},{0xbf9b0000},{0xbf9b2000},{0xbf9b4000},{0xbf9b6000},{0xbf9b8000},{0xbf9ba000},{0xbf9bc000},{0xbf9be000}, -{0xbf9c0000},{0xbf9c2000},{0xbf9c4000},{0xbf9c6000},{0xbf9c8000},{0xbf9ca000},{0xbf9cc000},{0xbf9ce000},{0xbf9d0000},{0xbf9d2000},{0xbf9d4000},{0xbf9d6000},{0xbf9d8000},{0xbf9da000},{0xbf9dc000},{0xbf9de000},{0xbf9e0000},{0xbf9e2000},{0xbf9e4000},{0xbf9e6000},{0xbf9e8000},{0xbf9ea000},{0xbf9ec000},{0xbf9ee000},{0xbf9f0000},{0xbf9f2000},{0xbf9f4000},{0xbf9f6000},{0xbf9f8000},{0xbf9fa000},{0xbf9fc000},{0xbf9fe000}, -{0xbfa00000},{0xbfa02000},{0xbfa04000},{0xbfa06000},{0xbfa08000},{0xbfa0a000},{0xbfa0c000},{0xbfa0e000},{0xbfa10000},{0xbfa12000},{0xbfa14000},{0xbfa16000},{0xbfa18000},{0xbfa1a000},{0xbfa1c000},{0xbfa1e000},{0xbfa20000},{0xbfa22000},{0xbfa24000},{0xbfa26000},{0xbfa28000},{0xbfa2a000},{0xbfa2c000},{0xbfa2e000},{0xbfa30000},{0xbfa32000},{0xbfa34000},{0xbfa36000},{0xbfa38000},{0xbfa3a000},{0xbfa3c000},{0xbfa3e000}, -{0xbfa40000},{0xbfa42000},{0xbfa44000},{0xbfa46000},{0xbfa48000},{0xbfa4a000},{0xbfa4c000},{0xbfa4e000},{0xbfa50000},{0xbfa52000},{0xbfa54000},{0xbfa56000},{0xbfa58000},{0xbfa5a000},{0xbfa5c000},{0xbfa5e000},{0xbfa60000},{0xbfa62000},{0xbfa64000},{0xbfa66000},{0xbfa68000},{0xbfa6a000},{0xbfa6c000},{0xbfa6e000},{0xbfa70000},{0xbfa72000},{0xbfa74000},{0xbfa76000},{0xbfa78000},{0xbfa7a000},{0xbfa7c000},{0xbfa7e000}, -{0xbfa80000},{0xbfa82000},{0xbfa84000},{0xbfa86000},{0xbfa88000},{0xbfa8a000},{0xbfa8c000},{0xbfa8e000},{0xbfa90000},{0xbfa92000},{0xbfa94000},{0xbfa96000},{0xbfa98000},{0xbfa9a000},{0xbfa9c000},{0xbfa9e000},{0xbfaa0000},{0xbfaa2000},{0xbfaa4000},{0xbfaa6000},{0xbfaa8000},{0xbfaaa000},{0xbfaac000},{0xbfaae000},{0xbfab0000},{0xbfab2000},{0xbfab4000},{0xbfab6000},{0xbfab8000},{0xbfaba000},{0xbfabc000},{0xbfabe000}, -{0xbfac0000},{0xbfac2000},{0xbfac4000},{0xbfac6000},{0xbfac8000},{0xbfaca000},{0xbfacc000},{0xbface000},{0xbfad0000},{0xbfad2000},{0xbfad4000},{0xbfad6000},{0xbfad8000},{0xbfada000},{0xbfadc000},{0xbfade000},{0xbfae0000},{0xbfae2000},{0xbfae4000},{0xbfae6000},{0xbfae8000},{0xbfaea000},{0xbfaec000},{0xbfaee000},{0xbfaf0000},{0xbfaf2000},{0xbfaf4000},{0xbfaf6000},{0xbfaf8000},{0xbfafa000},{0xbfafc000},{0xbfafe000}, -{0xbfb00000},{0xbfb02000},{0xbfb04000},{0xbfb06000},{0xbfb08000},{0xbfb0a000},{0xbfb0c000},{0xbfb0e000},{0xbfb10000},{0xbfb12000},{0xbfb14000},{0xbfb16000},{0xbfb18000},{0xbfb1a000},{0xbfb1c000},{0xbfb1e000},{0xbfb20000},{0xbfb22000},{0xbfb24000},{0xbfb26000},{0xbfb28000},{0xbfb2a000},{0xbfb2c000},{0xbfb2e000},{0xbfb30000},{0xbfb32000},{0xbfb34000},{0xbfb36000},{0xbfb38000},{0xbfb3a000},{0xbfb3c000},{0xbfb3e000}, -{0xbfb40000},{0xbfb42000},{0xbfb44000},{0xbfb46000},{0xbfb48000},{0xbfb4a000},{0xbfb4c000},{0xbfb4e000},{0xbfb50000},{0xbfb52000},{0xbfb54000},{0xbfb56000},{0xbfb58000},{0xbfb5a000},{0xbfb5c000},{0xbfb5e000},{0xbfb60000},{0xbfb62000},{0xbfb64000},{0xbfb66000},{0xbfb68000},{0xbfb6a000},{0xbfb6c000},{0xbfb6e000},{0xbfb70000},{0xbfb72000},{0xbfb74000},{0xbfb76000},{0xbfb78000},{0xbfb7a000},{0xbfb7c000},{0xbfb7e000}, -{0xbfb80000},{0xbfb82000},{0xbfb84000},{0xbfb86000},{0xbfb88000},{0xbfb8a000},{0xbfb8c000},{0xbfb8e000},{0xbfb90000},{0xbfb92000},{0xbfb94000},{0xbfb96000},{0xbfb98000},{0xbfb9a000},{0xbfb9c000},{0xbfb9e000},{0xbfba0000},{0xbfba2000},{0xbfba4000},{0xbfba6000},{0xbfba8000},{0xbfbaa000},{0xbfbac000},{0xbfbae000},{0xbfbb0000},{0xbfbb2000},{0xbfbb4000},{0xbfbb6000},{0xbfbb8000},{0xbfbba000},{0xbfbbc000},{0xbfbbe000}, -{0xbfbc0000},{0xbfbc2000},{0xbfbc4000},{0xbfbc6000},{0xbfbc8000},{0xbfbca000},{0xbfbcc000},{0xbfbce000},{0xbfbd0000},{0xbfbd2000},{0xbfbd4000},{0xbfbd6000},{0xbfbd8000},{0xbfbda000},{0xbfbdc000},{0xbfbde000},{0xbfbe0000},{0xbfbe2000},{0xbfbe4000},{0xbfbe6000},{0xbfbe8000},{0xbfbea000},{0xbfbec000},{0xbfbee000},{0xbfbf0000},{0xbfbf2000},{0xbfbf4000},{0xbfbf6000},{0xbfbf8000},{0xbfbfa000},{0xbfbfc000},{0xbfbfe000}, -{0xbfc00000},{0xbfc02000},{0xbfc04000},{0xbfc06000},{0xbfc08000},{0xbfc0a000},{0xbfc0c000},{0xbfc0e000},{0xbfc10000},{0xbfc12000},{0xbfc14000},{0xbfc16000},{0xbfc18000},{0xbfc1a000},{0xbfc1c000},{0xbfc1e000},{0xbfc20000},{0xbfc22000},{0xbfc24000},{0xbfc26000},{0xbfc28000},{0xbfc2a000},{0xbfc2c000},{0xbfc2e000},{0xbfc30000},{0xbfc32000},{0xbfc34000},{0xbfc36000},{0xbfc38000},{0xbfc3a000},{0xbfc3c000},{0xbfc3e000}, -{0xbfc40000},{0xbfc42000},{0xbfc44000},{0xbfc46000},{0xbfc48000},{0xbfc4a000},{0xbfc4c000},{0xbfc4e000},{0xbfc50000},{0xbfc52000},{0xbfc54000},{0xbfc56000},{0xbfc58000},{0xbfc5a000},{0xbfc5c000},{0xbfc5e000},{0xbfc60000},{0xbfc62000},{0xbfc64000},{0xbfc66000},{0xbfc68000},{0xbfc6a000},{0xbfc6c000},{0xbfc6e000},{0xbfc70000},{0xbfc72000},{0xbfc74000},{0xbfc76000},{0xbfc78000},{0xbfc7a000},{0xbfc7c000},{0xbfc7e000}, -{0xbfc80000},{0xbfc82000},{0xbfc84000},{0xbfc86000},{0xbfc88000},{0xbfc8a000},{0xbfc8c000},{0xbfc8e000},{0xbfc90000},{0xbfc92000},{0xbfc94000},{0xbfc96000},{0xbfc98000},{0xbfc9a000},{0xbfc9c000},{0xbfc9e000},{0xbfca0000},{0xbfca2000},{0xbfca4000},{0xbfca6000},{0xbfca8000},{0xbfcaa000},{0xbfcac000},{0xbfcae000},{0xbfcb0000},{0xbfcb2000},{0xbfcb4000},{0xbfcb6000},{0xbfcb8000},{0xbfcba000},{0xbfcbc000},{0xbfcbe000}, -{0xbfcc0000},{0xbfcc2000},{0xbfcc4000},{0xbfcc6000},{0xbfcc8000},{0xbfcca000},{0xbfccc000},{0xbfcce000},{0xbfcd0000},{0xbfcd2000},{0xbfcd4000},{0xbfcd6000},{0xbfcd8000},{0xbfcda000},{0xbfcdc000},{0xbfcde000},{0xbfce0000},{0xbfce2000},{0xbfce4000},{0xbfce6000},{0xbfce8000},{0xbfcea000},{0xbfcec000},{0xbfcee000},{0xbfcf0000},{0xbfcf2000},{0xbfcf4000},{0xbfcf6000},{0xbfcf8000},{0xbfcfa000},{0xbfcfc000},{0xbfcfe000}, -{0xbfd00000},{0xbfd02000},{0xbfd04000},{0xbfd06000},{0xbfd08000},{0xbfd0a000},{0xbfd0c000},{0xbfd0e000},{0xbfd10000},{0xbfd12000},{0xbfd14000},{0xbfd16000},{0xbfd18000},{0xbfd1a000},{0xbfd1c000},{0xbfd1e000},{0xbfd20000},{0xbfd22000},{0xbfd24000},{0xbfd26000},{0xbfd28000},{0xbfd2a000},{0xbfd2c000},{0xbfd2e000},{0xbfd30000},{0xbfd32000},{0xbfd34000},{0xbfd36000},{0xbfd38000},{0xbfd3a000},{0xbfd3c000},{0xbfd3e000}, -{0xbfd40000},{0xbfd42000},{0xbfd44000},{0xbfd46000},{0xbfd48000},{0xbfd4a000},{0xbfd4c000},{0xbfd4e000},{0xbfd50000},{0xbfd52000},{0xbfd54000},{0xbfd56000},{0xbfd58000},{0xbfd5a000},{0xbfd5c000},{0xbfd5e000},{0xbfd60000},{0xbfd62000},{0xbfd64000},{0xbfd66000},{0xbfd68000},{0xbfd6a000},{0xbfd6c000},{0xbfd6e000},{0xbfd70000},{0xbfd72000},{0xbfd74000},{0xbfd76000},{0xbfd78000},{0xbfd7a000},{0xbfd7c000},{0xbfd7e000}, -{0xbfd80000},{0xbfd82000},{0xbfd84000},{0xbfd86000},{0xbfd88000},{0xbfd8a000},{0xbfd8c000},{0xbfd8e000},{0xbfd90000},{0xbfd92000},{0xbfd94000},{0xbfd96000},{0xbfd98000},{0xbfd9a000},{0xbfd9c000},{0xbfd9e000},{0xbfda0000},{0xbfda2000},{0xbfda4000},{0xbfda6000},{0xbfda8000},{0xbfdaa000},{0xbfdac000},{0xbfdae000},{0xbfdb0000},{0xbfdb2000},{0xbfdb4000},{0xbfdb6000},{0xbfdb8000},{0xbfdba000},{0xbfdbc000},{0xbfdbe000}, -{0xbfdc0000},{0xbfdc2000},{0xbfdc4000},{0xbfdc6000},{0xbfdc8000},{0xbfdca000},{0xbfdcc000},{0xbfdce000},{0xbfdd0000},{0xbfdd2000},{0xbfdd4000},{0xbfdd6000},{0xbfdd8000},{0xbfdda000},{0xbfddc000},{0xbfdde000},{0xbfde0000},{0xbfde2000},{0xbfde4000},{0xbfde6000},{0xbfde8000},{0xbfdea000},{0xbfdec000},{0xbfdee000},{0xbfdf0000},{0xbfdf2000},{0xbfdf4000},{0xbfdf6000},{0xbfdf8000},{0xbfdfa000},{0xbfdfc000},{0xbfdfe000}, -{0xbfe00000},{0xbfe02000},{0xbfe04000},{0xbfe06000},{0xbfe08000},{0xbfe0a000},{0xbfe0c000},{0xbfe0e000},{0xbfe10000},{0xbfe12000},{0xbfe14000},{0xbfe16000},{0xbfe18000},{0xbfe1a000},{0xbfe1c000},{0xbfe1e000},{0xbfe20000},{0xbfe22000},{0xbfe24000},{0xbfe26000},{0xbfe28000},{0xbfe2a000},{0xbfe2c000},{0xbfe2e000},{0xbfe30000},{0xbfe32000},{0xbfe34000},{0xbfe36000},{0xbfe38000},{0xbfe3a000},{0xbfe3c000},{0xbfe3e000}, -{0xbfe40000},{0xbfe42000},{0xbfe44000},{0xbfe46000},{0xbfe48000},{0xbfe4a000},{0xbfe4c000},{0xbfe4e000},{0xbfe50000},{0xbfe52000},{0xbfe54000},{0xbfe56000},{0xbfe58000},{0xbfe5a000},{0xbfe5c000},{0xbfe5e000},{0xbfe60000},{0xbfe62000},{0xbfe64000},{0xbfe66000},{0xbfe68000},{0xbfe6a000},{0xbfe6c000},{0xbfe6e000},{0xbfe70000},{0xbfe72000},{0xbfe74000},{0xbfe76000},{0xbfe78000},{0xbfe7a000},{0xbfe7c000},{0xbfe7e000}, -{0xbfe80000},{0xbfe82000},{0xbfe84000},{0xbfe86000},{0xbfe88000},{0xbfe8a000},{0xbfe8c000},{0xbfe8e000},{0xbfe90000},{0xbfe92000},{0xbfe94000},{0xbfe96000},{0xbfe98000},{0xbfe9a000},{0xbfe9c000},{0xbfe9e000},{0xbfea0000},{0xbfea2000},{0xbfea4000},{0xbfea6000},{0xbfea8000},{0xbfeaa000},{0xbfeac000},{0xbfeae000},{0xbfeb0000},{0xbfeb2000},{0xbfeb4000},{0xbfeb6000},{0xbfeb8000},{0xbfeba000},{0xbfebc000},{0xbfebe000}, -{0xbfec0000},{0xbfec2000},{0xbfec4000},{0xbfec6000},{0xbfec8000},{0xbfeca000},{0xbfecc000},{0xbfece000},{0xbfed0000},{0xbfed2000},{0xbfed4000},{0xbfed6000},{0xbfed8000},{0xbfeda000},{0xbfedc000},{0xbfede000},{0xbfee0000},{0xbfee2000},{0xbfee4000},{0xbfee6000},{0xbfee8000},{0xbfeea000},{0xbfeec000},{0xbfeee000},{0xbfef0000},{0xbfef2000},{0xbfef4000},{0xbfef6000},{0xbfef8000},{0xbfefa000},{0xbfefc000},{0xbfefe000}, -{0xbff00000},{0xbff02000},{0xbff04000},{0xbff06000},{0xbff08000},{0xbff0a000},{0xbff0c000},{0xbff0e000},{0xbff10000},{0xbff12000},{0xbff14000},{0xbff16000},{0xbff18000},{0xbff1a000},{0xbff1c000},{0xbff1e000},{0xbff20000},{0xbff22000},{0xbff24000},{0xbff26000},{0xbff28000},{0xbff2a000},{0xbff2c000},{0xbff2e000},{0xbff30000},{0xbff32000},{0xbff34000},{0xbff36000},{0xbff38000},{0xbff3a000},{0xbff3c000},{0xbff3e000}, -{0xbff40000},{0xbff42000},{0xbff44000},{0xbff46000},{0xbff48000},{0xbff4a000},{0xbff4c000},{0xbff4e000},{0xbff50000},{0xbff52000},{0xbff54000},{0xbff56000},{0xbff58000},{0xbff5a000},{0xbff5c000},{0xbff5e000},{0xbff60000},{0xbff62000},{0xbff64000},{0xbff66000},{0xbff68000},{0xbff6a000},{0xbff6c000},{0xbff6e000},{0xbff70000},{0xbff72000},{0xbff74000},{0xbff76000},{0xbff78000},{0xbff7a000},{0xbff7c000},{0xbff7e000}, -{0xbff80000},{0xbff82000},{0xbff84000},{0xbff86000},{0xbff88000},{0xbff8a000},{0xbff8c000},{0xbff8e000},{0xbff90000},{0xbff92000},{0xbff94000},{0xbff96000},{0xbff98000},{0xbff9a000},{0xbff9c000},{0xbff9e000},{0xbffa0000},{0xbffa2000},{0xbffa4000},{0xbffa6000},{0xbffa8000},{0xbffaa000},{0xbffac000},{0xbffae000},{0xbffb0000},{0xbffb2000},{0xbffb4000},{0xbffb6000},{0xbffb8000},{0xbffba000},{0xbffbc000},{0xbffbe000}, -{0xbffc0000},{0xbffc2000},{0xbffc4000},{0xbffc6000},{0xbffc8000},{0xbffca000},{0xbffcc000},{0xbffce000},{0xbffd0000},{0xbffd2000},{0xbffd4000},{0xbffd6000},{0xbffd8000},{0xbffda000},{0xbffdc000},{0xbffde000},{0xbffe0000},{0xbffe2000},{0xbffe4000},{0xbffe6000},{0xbffe8000},{0xbffea000},{0xbffec000},{0xbffee000},{0xbfff0000},{0xbfff2000},{0xbfff4000},{0xbfff6000},{0xbfff8000},{0xbfffa000},{0xbfffc000},{0xbfffe000}, -{0xc0000000},{0xc0002000},{0xc0004000},{0xc0006000},{0xc0008000},{0xc000a000},{0xc000c000},{0xc000e000},{0xc0010000},{0xc0012000},{0xc0014000},{0xc0016000},{0xc0018000},{0xc001a000},{0xc001c000},{0xc001e000},{0xc0020000},{0xc0022000},{0xc0024000},{0xc0026000},{0xc0028000},{0xc002a000},{0xc002c000},{0xc002e000},{0xc0030000},{0xc0032000},{0xc0034000},{0xc0036000},{0xc0038000},{0xc003a000},{0xc003c000},{0xc003e000}, -{0xc0040000},{0xc0042000},{0xc0044000},{0xc0046000},{0xc0048000},{0xc004a000},{0xc004c000},{0xc004e000},{0xc0050000},{0xc0052000},{0xc0054000},{0xc0056000},{0xc0058000},{0xc005a000},{0xc005c000},{0xc005e000},{0xc0060000},{0xc0062000},{0xc0064000},{0xc0066000},{0xc0068000},{0xc006a000},{0xc006c000},{0xc006e000},{0xc0070000},{0xc0072000},{0xc0074000},{0xc0076000},{0xc0078000},{0xc007a000},{0xc007c000},{0xc007e000}, -{0xc0080000},{0xc0082000},{0xc0084000},{0xc0086000},{0xc0088000},{0xc008a000},{0xc008c000},{0xc008e000},{0xc0090000},{0xc0092000},{0xc0094000},{0xc0096000},{0xc0098000},{0xc009a000},{0xc009c000},{0xc009e000},{0xc00a0000},{0xc00a2000},{0xc00a4000},{0xc00a6000},{0xc00a8000},{0xc00aa000},{0xc00ac000},{0xc00ae000},{0xc00b0000},{0xc00b2000},{0xc00b4000},{0xc00b6000},{0xc00b8000},{0xc00ba000},{0xc00bc000},{0xc00be000}, -{0xc00c0000},{0xc00c2000},{0xc00c4000},{0xc00c6000},{0xc00c8000},{0xc00ca000},{0xc00cc000},{0xc00ce000},{0xc00d0000},{0xc00d2000},{0xc00d4000},{0xc00d6000},{0xc00d8000},{0xc00da000},{0xc00dc000},{0xc00de000},{0xc00e0000},{0xc00e2000},{0xc00e4000},{0xc00e6000},{0xc00e8000},{0xc00ea000},{0xc00ec000},{0xc00ee000},{0xc00f0000},{0xc00f2000},{0xc00f4000},{0xc00f6000},{0xc00f8000},{0xc00fa000},{0xc00fc000},{0xc00fe000}, -{0xc0100000},{0xc0102000},{0xc0104000},{0xc0106000},{0xc0108000},{0xc010a000},{0xc010c000},{0xc010e000},{0xc0110000},{0xc0112000},{0xc0114000},{0xc0116000},{0xc0118000},{0xc011a000},{0xc011c000},{0xc011e000},{0xc0120000},{0xc0122000},{0xc0124000},{0xc0126000},{0xc0128000},{0xc012a000},{0xc012c000},{0xc012e000},{0xc0130000},{0xc0132000},{0xc0134000},{0xc0136000},{0xc0138000},{0xc013a000},{0xc013c000},{0xc013e000}, -{0xc0140000},{0xc0142000},{0xc0144000},{0xc0146000},{0xc0148000},{0xc014a000},{0xc014c000},{0xc014e000},{0xc0150000},{0xc0152000},{0xc0154000},{0xc0156000},{0xc0158000},{0xc015a000},{0xc015c000},{0xc015e000},{0xc0160000},{0xc0162000},{0xc0164000},{0xc0166000},{0xc0168000},{0xc016a000},{0xc016c000},{0xc016e000},{0xc0170000},{0xc0172000},{0xc0174000},{0xc0176000},{0xc0178000},{0xc017a000},{0xc017c000},{0xc017e000}, -{0xc0180000},{0xc0182000},{0xc0184000},{0xc0186000},{0xc0188000},{0xc018a000},{0xc018c000},{0xc018e000},{0xc0190000},{0xc0192000},{0xc0194000},{0xc0196000},{0xc0198000},{0xc019a000},{0xc019c000},{0xc019e000},{0xc01a0000},{0xc01a2000},{0xc01a4000},{0xc01a6000},{0xc01a8000},{0xc01aa000},{0xc01ac000},{0xc01ae000},{0xc01b0000},{0xc01b2000},{0xc01b4000},{0xc01b6000},{0xc01b8000},{0xc01ba000},{0xc01bc000},{0xc01be000}, -{0xc01c0000},{0xc01c2000},{0xc01c4000},{0xc01c6000},{0xc01c8000},{0xc01ca000},{0xc01cc000},{0xc01ce000},{0xc01d0000},{0xc01d2000},{0xc01d4000},{0xc01d6000},{0xc01d8000},{0xc01da000},{0xc01dc000},{0xc01de000},{0xc01e0000},{0xc01e2000},{0xc01e4000},{0xc01e6000},{0xc01e8000},{0xc01ea000},{0xc01ec000},{0xc01ee000},{0xc01f0000},{0xc01f2000},{0xc01f4000},{0xc01f6000},{0xc01f8000},{0xc01fa000},{0xc01fc000},{0xc01fe000}, -{0xc0200000},{0xc0202000},{0xc0204000},{0xc0206000},{0xc0208000},{0xc020a000},{0xc020c000},{0xc020e000},{0xc0210000},{0xc0212000},{0xc0214000},{0xc0216000},{0xc0218000},{0xc021a000},{0xc021c000},{0xc021e000},{0xc0220000},{0xc0222000},{0xc0224000},{0xc0226000},{0xc0228000},{0xc022a000},{0xc022c000},{0xc022e000},{0xc0230000},{0xc0232000},{0xc0234000},{0xc0236000},{0xc0238000},{0xc023a000},{0xc023c000},{0xc023e000}, -{0xc0240000},{0xc0242000},{0xc0244000},{0xc0246000},{0xc0248000},{0xc024a000},{0xc024c000},{0xc024e000},{0xc0250000},{0xc0252000},{0xc0254000},{0xc0256000},{0xc0258000},{0xc025a000},{0xc025c000},{0xc025e000},{0xc0260000},{0xc0262000},{0xc0264000},{0xc0266000},{0xc0268000},{0xc026a000},{0xc026c000},{0xc026e000},{0xc0270000},{0xc0272000},{0xc0274000},{0xc0276000},{0xc0278000},{0xc027a000},{0xc027c000},{0xc027e000}, -{0xc0280000},{0xc0282000},{0xc0284000},{0xc0286000},{0xc0288000},{0xc028a000},{0xc028c000},{0xc028e000},{0xc0290000},{0xc0292000},{0xc0294000},{0xc0296000},{0xc0298000},{0xc029a000},{0xc029c000},{0xc029e000},{0xc02a0000},{0xc02a2000},{0xc02a4000},{0xc02a6000},{0xc02a8000},{0xc02aa000},{0xc02ac000},{0xc02ae000},{0xc02b0000},{0xc02b2000},{0xc02b4000},{0xc02b6000},{0xc02b8000},{0xc02ba000},{0xc02bc000},{0xc02be000}, -{0xc02c0000},{0xc02c2000},{0xc02c4000},{0xc02c6000},{0xc02c8000},{0xc02ca000},{0xc02cc000},{0xc02ce000},{0xc02d0000},{0xc02d2000},{0xc02d4000},{0xc02d6000},{0xc02d8000},{0xc02da000},{0xc02dc000},{0xc02de000},{0xc02e0000},{0xc02e2000},{0xc02e4000},{0xc02e6000},{0xc02e8000},{0xc02ea000},{0xc02ec000},{0xc02ee000},{0xc02f0000},{0xc02f2000},{0xc02f4000},{0xc02f6000},{0xc02f8000},{0xc02fa000},{0xc02fc000},{0xc02fe000}, -{0xc0300000},{0xc0302000},{0xc0304000},{0xc0306000},{0xc0308000},{0xc030a000},{0xc030c000},{0xc030e000},{0xc0310000},{0xc0312000},{0xc0314000},{0xc0316000},{0xc0318000},{0xc031a000},{0xc031c000},{0xc031e000},{0xc0320000},{0xc0322000},{0xc0324000},{0xc0326000},{0xc0328000},{0xc032a000},{0xc032c000},{0xc032e000},{0xc0330000},{0xc0332000},{0xc0334000},{0xc0336000},{0xc0338000},{0xc033a000},{0xc033c000},{0xc033e000}, -{0xc0340000},{0xc0342000},{0xc0344000},{0xc0346000},{0xc0348000},{0xc034a000},{0xc034c000},{0xc034e000},{0xc0350000},{0xc0352000},{0xc0354000},{0xc0356000},{0xc0358000},{0xc035a000},{0xc035c000},{0xc035e000},{0xc0360000},{0xc0362000},{0xc0364000},{0xc0366000},{0xc0368000},{0xc036a000},{0xc036c000},{0xc036e000},{0xc0370000},{0xc0372000},{0xc0374000},{0xc0376000},{0xc0378000},{0xc037a000},{0xc037c000},{0xc037e000}, -{0xc0380000},{0xc0382000},{0xc0384000},{0xc0386000},{0xc0388000},{0xc038a000},{0xc038c000},{0xc038e000},{0xc0390000},{0xc0392000},{0xc0394000},{0xc0396000},{0xc0398000},{0xc039a000},{0xc039c000},{0xc039e000},{0xc03a0000},{0xc03a2000},{0xc03a4000},{0xc03a6000},{0xc03a8000},{0xc03aa000},{0xc03ac000},{0xc03ae000},{0xc03b0000},{0xc03b2000},{0xc03b4000},{0xc03b6000},{0xc03b8000},{0xc03ba000},{0xc03bc000},{0xc03be000}, -{0xc03c0000},{0xc03c2000},{0xc03c4000},{0xc03c6000},{0xc03c8000},{0xc03ca000},{0xc03cc000},{0xc03ce000},{0xc03d0000},{0xc03d2000},{0xc03d4000},{0xc03d6000},{0xc03d8000},{0xc03da000},{0xc03dc000},{0xc03de000},{0xc03e0000},{0xc03e2000},{0xc03e4000},{0xc03e6000},{0xc03e8000},{0xc03ea000},{0xc03ec000},{0xc03ee000},{0xc03f0000},{0xc03f2000},{0xc03f4000},{0xc03f6000},{0xc03f8000},{0xc03fa000},{0xc03fc000},{0xc03fe000}, -{0xc0400000},{0xc0402000},{0xc0404000},{0xc0406000},{0xc0408000},{0xc040a000},{0xc040c000},{0xc040e000},{0xc0410000},{0xc0412000},{0xc0414000},{0xc0416000},{0xc0418000},{0xc041a000},{0xc041c000},{0xc041e000},{0xc0420000},{0xc0422000},{0xc0424000},{0xc0426000},{0xc0428000},{0xc042a000},{0xc042c000},{0xc042e000},{0xc0430000},{0xc0432000},{0xc0434000},{0xc0436000},{0xc0438000},{0xc043a000},{0xc043c000},{0xc043e000}, -{0xc0440000},{0xc0442000},{0xc0444000},{0xc0446000},{0xc0448000},{0xc044a000},{0xc044c000},{0xc044e000},{0xc0450000},{0xc0452000},{0xc0454000},{0xc0456000},{0xc0458000},{0xc045a000},{0xc045c000},{0xc045e000},{0xc0460000},{0xc0462000},{0xc0464000},{0xc0466000},{0xc0468000},{0xc046a000},{0xc046c000},{0xc046e000},{0xc0470000},{0xc0472000},{0xc0474000},{0xc0476000},{0xc0478000},{0xc047a000},{0xc047c000},{0xc047e000}, -{0xc0480000},{0xc0482000},{0xc0484000},{0xc0486000},{0xc0488000},{0xc048a000},{0xc048c000},{0xc048e000},{0xc0490000},{0xc0492000},{0xc0494000},{0xc0496000},{0xc0498000},{0xc049a000},{0xc049c000},{0xc049e000},{0xc04a0000},{0xc04a2000},{0xc04a4000},{0xc04a6000},{0xc04a8000},{0xc04aa000},{0xc04ac000},{0xc04ae000},{0xc04b0000},{0xc04b2000},{0xc04b4000},{0xc04b6000},{0xc04b8000},{0xc04ba000},{0xc04bc000},{0xc04be000}, -{0xc04c0000},{0xc04c2000},{0xc04c4000},{0xc04c6000},{0xc04c8000},{0xc04ca000},{0xc04cc000},{0xc04ce000},{0xc04d0000},{0xc04d2000},{0xc04d4000},{0xc04d6000},{0xc04d8000},{0xc04da000},{0xc04dc000},{0xc04de000},{0xc04e0000},{0xc04e2000},{0xc04e4000},{0xc04e6000},{0xc04e8000},{0xc04ea000},{0xc04ec000},{0xc04ee000},{0xc04f0000},{0xc04f2000},{0xc04f4000},{0xc04f6000},{0xc04f8000},{0xc04fa000},{0xc04fc000},{0xc04fe000}, -{0xc0500000},{0xc0502000},{0xc0504000},{0xc0506000},{0xc0508000},{0xc050a000},{0xc050c000},{0xc050e000},{0xc0510000},{0xc0512000},{0xc0514000},{0xc0516000},{0xc0518000},{0xc051a000},{0xc051c000},{0xc051e000},{0xc0520000},{0xc0522000},{0xc0524000},{0xc0526000},{0xc0528000},{0xc052a000},{0xc052c000},{0xc052e000},{0xc0530000},{0xc0532000},{0xc0534000},{0xc0536000},{0xc0538000},{0xc053a000},{0xc053c000},{0xc053e000}, -{0xc0540000},{0xc0542000},{0xc0544000},{0xc0546000},{0xc0548000},{0xc054a000},{0xc054c000},{0xc054e000},{0xc0550000},{0xc0552000},{0xc0554000},{0xc0556000},{0xc0558000},{0xc055a000},{0xc055c000},{0xc055e000},{0xc0560000},{0xc0562000},{0xc0564000},{0xc0566000},{0xc0568000},{0xc056a000},{0xc056c000},{0xc056e000},{0xc0570000},{0xc0572000},{0xc0574000},{0xc0576000},{0xc0578000},{0xc057a000},{0xc057c000},{0xc057e000}, -{0xc0580000},{0xc0582000},{0xc0584000},{0xc0586000},{0xc0588000},{0xc058a000},{0xc058c000},{0xc058e000},{0xc0590000},{0xc0592000},{0xc0594000},{0xc0596000},{0xc0598000},{0xc059a000},{0xc059c000},{0xc059e000},{0xc05a0000},{0xc05a2000},{0xc05a4000},{0xc05a6000},{0xc05a8000},{0xc05aa000},{0xc05ac000},{0xc05ae000},{0xc05b0000},{0xc05b2000},{0xc05b4000},{0xc05b6000},{0xc05b8000},{0xc05ba000},{0xc05bc000},{0xc05be000}, -{0xc05c0000},{0xc05c2000},{0xc05c4000},{0xc05c6000},{0xc05c8000},{0xc05ca000},{0xc05cc000},{0xc05ce000},{0xc05d0000},{0xc05d2000},{0xc05d4000},{0xc05d6000},{0xc05d8000},{0xc05da000},{0xc05dc000},{0xc05de000},{0xc05e0000},{0xc05e2000},{0xc05e4000},{0xc05e6000},{0xc05e8000},{0xc05ea000},{0xc05ec000},{0xc05ee000},{0xc05f0000},{0xc05f2000},{0xc05f4000},{0xc05f6000},{0xc05f8000},{0xc05fa000},{0xc05fc000},{0xc05fe000}, -{0xc0600000},{0xc0602000},{0xc0604000},{0xc0606000},{0xc0608000},{0xc060a000},{0xc060c000},{0xc060e000},{0xc0610000},{0xc0612000},{0xc0614000},{0xc0616000},{0xc0618000},{0xc061a000},{0xc061c000},{0xc061e000},{0xc0620000},{0xc0622000},{0xc0624000},{0xc0626000},{0xc0628000},{0xc062a000},{0xc062c000},{0xc062e000},{0xc0630000},{0xc0632000},{0xc0634000},{0xc0636000},{0xc0638000},{0xc063a000},{0xc063c000},{0xc063e000}, -{0xc0640000},{0xc0642000},{0xc0644000},{0xc0646000},{0xc0648000},{0xc064a000},{0xc064c000},{0xc064e000},{0xc0650000},{0xc0652000},{0xc0654000},{0xc0656000},{0xc0658000},{0xc065a000},{0xc065c000},{0xc065e000},{0xc0660000},{0xc0662000},{0xc0664000},{0xc0666000},{0xc0668000},{0xc066a000},{0xc066c000},{0xc066e000},{0xc0670000},{0xc0672000},{0xc0674000},{0xc0676000},{0xc0678000},{0xc067a000},{0xc067c000},{0xc067e000}, -{0xc0680000},{0xc0682000},{0xc0684000},{0xc0686000},{0xc0688000},{0xc068a000},{0xc068c000},{0xc068e000},{0xc0690000},{0xc0692000},{0xc0694000},{0xc0696000},{0xc0698000},{0xc069a000},{0xc069c000},{0xc069e000},{0xc06a0000},{0xc06a2000},{0xc06a4000},{0xc06a6000},{0xc06a8000},{0xc06aa000},{0xc06ac000},{0xc06ae000},{0xc06b0000},{0xc06b2000},{0xc06b4000},{0xc06b6000},{0xc06b8000},{0xc06ba000},{0xc06bc000},{0xc06be000}, -{0xc06c0000},{0xc06c2000},{0xc06c4000},{0xc06c6000},{0xc06c8000},{0xc06ca000},{0xc06cc000},{0xc06ce000},{0xc06d0000},{0xc06d2000},{0xc06d4000},{0xc06d6000},{0xc06d8000},{0xc06da000},{0xc06dc000},{0xc06de000},{0xc06e0000},{0xc06e2000},{0xc06e4000},{0xc06e6000},{0xc06e8000},{0xc06ea000},{0xc06ec000},{0xc06ee000},{0xc06f0000},{0xc06f2000},{0xc06f4000},{0xc06f6000},{0xc06f8000},{0xc06fa000},{0xc06fc000},{0xc06fe000}, -{0xc0700000},{0xc0702000},{0xc0704000},{0xc0706000},{0xc0708000},{0xc070a000},{0xc070c000},{0xc070e000},{0xc0710000},{0xc0712000},{0xc0714000},{0xc0716000},{0xc0718000},{0xc071a000},{0xc071c000},{0xc071e000},{0xc0720000},{0xc0722000},{0xc0724000},{0xc0726000},{0xc0728000},{0xc072a000},{0xc072c000},{0xc072e000},{0xc0730000},{0xc0732000},{0xc0734000},{0xc0736000},{0xc0738000},{0xc073a000},{0xc073c000},{0xc073e000}, -{0xc0740000},{0xc0742000},{0xc0744000},{0xc0746000},{0xc0748000},{0xc074a000},{0xc074c000},{0xc074e000},{0xc0750000},{0xc0752000},{0xc0754000},{0xc0756000},{0xc0758000},{0xc075a000},{0xc075c000},{0xc075e000},{0xc0760000},{0xc0762000},{0xc0764000},{0xc0766000},{0xc0768000},{0xc076a000},{0xc076c000},{0xc076e000},{0xc0770000},{0xc0772000},{0xc0774000},{0xc0776000},{0xc0778000},{0xc077a000},{0xc077c000},{0xc077e000}, -{0xc0780000},{0xc0782000},{0xc0784000},{0xc0786000},{0xc0788000},{0xc078a000},{0xc078c000},{0xc078e000},{0xc0790000},{0xc0792000},{0xc0794000},{0xc0796000},{0xc0798000},{0xc079a000},{0xc079c000},{0xc079e000},{0xc07a0000},{0xc07a2000},{0xc07a4000},{0xc07a6000},{0xc07a8000},{0xc07aa000},{0xc07ac000},{0xc07ae000},{0xc07b0000},{0xc07b2000},{0xc07b4000},{0xc07b6000},{0xc07b8000},{0xc07ba000},{0xc07bc000},{0xc07be000}, -{0xc07c0000},{0xc07c2000},{0xc07c4000},{0xc07c6000},{0xc07c8000},{0xc07ca000},{0xc07cc000},{0xc07ce000},{0xc07d0000},{0xc07d2000},{0xc07d4000},{0xc07d6000},{0xc07d8000},{0xc07da000},{0xc07dc000},{0xc07de000},{0xc07e0000},{0xc07e2000},{0xc07e4000},{0xc07e6000},{0xc07e8000},{0xc07ea000},{0xc07ec000},{0xc07ee000},{0xc07f0000},{0xc07f2000},{0xc07f4000},{0xc07f6000},{0xc07f8000},{0xc07fa000},{0xc07fc000},{0xc07fe000}, -{0xc0800000},{0xc0802000},{0xc0804000},{0xc0806000},{0xc0808000},{0xc080a000},{0xc080c000},{0xc080e000},{0xc0810000},{0xc0812000},{0xc0814000},{0xc0816000},{0xc0818000},{0xc081a000},{0xc081c000},{0xc081e000},{0xc0820000},{0xc0822000},{0xc0824000},{0xc0826000},{0xc0828000},{0xc082a000},{0xc082c000},{0xc082e000},{0xc0830000},{0xc0832000},{0xc0834000},{0xc0836000},{0xc0838000},{0xc083a000},{0xc083c000},{0xc083e000}, -{0xc0840000},{0xc0842000},{0xc0844000},{0xc0846000},{0xc0848000},{0xc084a000},{0xc084c000},{0xc084e000},{0xc0850000},{0xc0852000},{0xc0854000},{0xc0856000},{0xc0858000},{0xc085a000},{0xc085c000},{0xc085e000},{0xc0860000},{0xc0862000},{0xc0864000},{0xc0866000},{0xc0868000},{0xc086a000},{0xc086c000},{0xc086e000},{0xc0870000},{0xc0872000},{0xc0874000},{0xc0876000},{0xc0878000},{0xc087a000},{0xc087c000},{0xc087e000}, -{0xc0880000},{0xc0882000},{0xc0884000},{0xc0886000},{0xc0888000},{0xc088a000},{0xc088c000},{0xc088e000},{0xc0890000},{0xc0892000},{0xc0894000},{0xc0896000},{0xc0898000},{0xc089a000},{0xc089c000},{0xc089e000},{0xc08a0000},{0xc08a2000},{0xc08a4000},{0xc08a6000},{0xc08a8000},{0xc08aa000},{0xc08ac000},{0xc08ae000},{0xc08b0000},{0xc08b2000},{0xc08b4000},{0xc08b6000},{0xc08b8000},{0xc08ba000},{0xc08bc000},{0xc08be000}, -{0xc08c0000},{0xc08c2000},{0xc08c4000},{0xc08c6000},{0xc08c8000},{0xc08ca000},{0xc08cc000},{0xc08ce000},{0xc08d0000},{0xc08d2000},{0xc08d4000},{0xc08d6000},{0xc08d8000},{0xc08da000},{0xc08dc000},{0xc08de000},{0xc08e0000},{0xc08e2000},{0xc08e4000},{0xc08e6000},{0xc08e8000},{0xc08ea000},{0xc08ec000},{0xc08ee000},{0xc08f0000},{0xc08f2000},{0xc08f4000},{0xc08f6000},{0xc08f8000},{0xc08fa000},{0xc08fc000},{0xc08fe000}, -{0xc0900000},{0xc0902000},{0xc0904000},{0xc0906000},{0xc0908000},{0xc090a000},{0xc090c000},{0xc090e000},{0xc0910000},{0xc0912000},{0xc0914000},{0xc0916000},{0xc0918000},{0xc091a000},{0xc091c000},{0xc091e000},{0xc0920000},{0xc0922000},{0xc0924000},{0xc0926000},{0xc0928000},{0xc092a000},{0xc092c000},{0xc092e000},{0xc0930000},{0xc0932000},{0xc0934000},{0xc0936000},{0xc0938000},{0xc093a000},{0xc093c000},{0xc093e000}, -{0xc0940000},{0xc0942000},{0xc0944000},{0xc0946000},{0xc0948000},{0xc094a000},{0xc094c000},{0xc094e000},{0xc0950000},{0xc0952000},{0xc0954000},{0xc0956000},{0xc0958000},{0xc095a000},{0xc095c000},{0xc095e000},{0xc0960000},{0xc0962000},{0xc0964000},{0xc0966000},{0xc0968000},{0xc096a000},{0xc096c000},{0xc096e000},{0xc0970000},{0xc0972000},{0xc0974000},{0xc0976000},{0xc0978000},{0xc097a000},{0xc097c000},{0xc097e000}, -{0xc0980000},{0xc0982000},{0xc0984000},{0xc0986000},{0xc0988000},{0xc098a000},{0xc098c000},{0xc098e000},{0xc0990000},{0xc0992000},{0xc0994000},{0xc0996000},{0xc0998000},{0xc099a000},{0xc099c000},{0xc099e000},{0xc09a0000},{0xc09a2000},{0xc09a4000},{0xc09a6000},{0xc09a8000},{0xc09aa000},{0xc09ac000},{0xc09ae000},{0xc09b0000},{0xc09b2000},{0xc09b4000},{0xc09b6000},{0xc09b8000},{0xc09ba000},{0xc09bc000},{0xc09be000}, -{0xc09c0000},{0xc09c2000},{0xc09c4000},{0xc09c6000},{0xc09c8000},{0xc09ca000},{0xc09cc000},{0xc09ce000},{0xc09d0000},{0xc09d2000},{0xc09d4000},{0xc09d6000},{0xc09d8000},{0xc09da000},{0xc09dc000},{0xc09de000},{0xc09e0000},{0xc09e2000},{0xc09e4000},{0xc09e6000},{0xc09e8000},{0xc09ea000},{0xc09ec000},{0xc09ee000},{0xc09f0000},{0xc09f2000},{0xc09f4000},{0xc09f6000},{0xc09f8000},{0xc09fa000},{0xc09fc000},{0xc09fe000}, -{0xc0a00000},{0xc0a02000},{0xc0a04000},{0xc0a06000},{0xc0a08000},{0xc0a0a000},{0xc0a0c000},{0xc0a0e000},{0xc0a10000},{0xc0a12000},{0xc0a14000},{0xc0a16000},{0xc0a18000},{0xc0a1a000},{0xc0a1c000},{0xc0a1e000},{0xc0a20000},{0xc0a22000},{0xc0a24000},{0xc0a26000},{0xc0a28000},{0xc0a2a000},{0xc0a2c000},{0xc0a2e000},{0xc0a30000},{0xc0a32000},{0xc0a34000},{0xc0a36000},{0xc0a38000},{0xc0a3a000},{0xc0a3c000},{0xc0a3e000}, -{0xc0a40000},{0xc0a42000},{0xc0a44000},{0xc0a46000},{0xc0a48000},{0xc0a4a000},{0xc0a4c000},{0xc0a4e000},{0xc0a50000},{0xc0a52000},{0xc0a54000},{0xc0a56000},{0xc0a58000},{0xc0a5a000},{0xc0a5c000},{0xc0a5e000},{0xc0a60000},{0xc0a62000},{0xc0a64000},{0xc0a66000},{0xc0a68000},{0xc0a6a000},{0xc0a6c000},{0xc0a6e000},{0xc0a70000},{0xc0a72000},{0xc0a74000},{0xc0a76000},{0xc0a78000},{0xc0a7a000},{0xc0a7c000},{0xc0a7e000}, -{0xc0a80000},{0xc0a82000},{0xc0a84000},{0xc0a86000},{0xc0a88000},{0xc0a8a000},{0xc0a8c000},{0xc0a8e000},{0xc0a90000},{0xc0a92000},{0xc0a94000},{0xc0a96000},{0xc0a98000},{0xc0a9a000},{0xc0a9c000},{0xc0a9e000},{0xc0aa0000},{0xc0aa2000},{0xc0aa4000},{0xc0aa6000},{0xc0aa8000},{0xc0aaa000},{0xc0aac000},{0xc0aae000},{0xc0ab0000},{0xc0ab2000},{0xc0ab4000},{0xc0ab6000},{0xc0ab8000},{0xc0aba000},{0xc0abc000},{0xc0abe000}, -{0xc0ac0000},{0xc0ac2000},{0xc0ac4000},{0xc0ac6000},{0xc0ac8000},{0xc0aca000},{0xc0acc000},{0xc0ace000},{0xc0ad0000},{0xc0ad2000},{0xc0ad4000},{0xc0ad6000},{0xc0ad8000},{0xc0ada000},{0xc0adc000},{0xc0ade000},{0xc0ae0000},{0xc0ae2000},{0xc0ae4000},{0xc0ae6000},{0xc0ae8000},{0xc0aea000},{0xc0aec000},{0xc0aee000},{0xc0af0000},{0xc0af2000},{0xc0af4000},{0xc0af6000},{0xc0af8000},{0xc0afa000},{0xc0afc000},{0xc0afe000}, -{0xc0b00000},{0xc0b02000},{0xc0b04000},{0xc0b06000},{0xc0b08000},{0xc0b0a000},{0xc0b0c000},{0xc0b0e000},{0xc0b10000},{0xc0b12000},{0xc0b14000},{0xc0b16000},{0xc0b18000},{0xc0b1a000},{0xc0b1c000},{0xc0b1e000},{0xc0b20000},{0xc0b22000},{0xc0b24000},{0xc0b26000},{0xc0b28000},{0xc0b2a000},{0xc0b2c000},{0xc0b2e000},{0xc0b30000},{0xc0b32000},{0xc0b34000},{0xc0b36000},{0xc0b38000},{0xc0b3a000},{0xc0b3c000},{0xc0b3e000}, -{0xc0b40000},{0xc0b42000},{0xc0b44000},{0xc0b46000},{0xc0b48000},{0xc0b4a000},{0xc0b4c000},{0xc0b4e000},{0xc0b50000},{0xc0b52000},{0xc0b54000},{0xc0b56000},{0xc0b58000},{0xc0b5a000},{0xc0b5c000},{0xc0b5e000},{0xc0b60000},{0xc0b62000},{0xc0b64000},{0xc0b66000},{0xc0b68000},{0xc0b6a000},{0xc0b6c000},{0xc0b6e000},{0xc0b70000},{0xc0b72000},{0xc0b74000},{0xc0b76000},{0xc0b78000},{0xc0b7a000},{0xc0b7c000},{0xc0b7e000}, -{0xc0b80000},{0xc0b82000},{0xc0b84000},{0xc0b86000},{0xc0b88000},{0xc0b8a000},{0xc0b8c000},{0xc0b8e000},{0xc0b90000},{0xc0b92000},{0xc0b94000},{0xc0b96000},{0xc0b98000},{0xc0b9a000},{0xc0b9c000},{0xc0b9e000},{0xc0ba0000},{0xc0ba2000},{0xc0ba4000},{0xc0ba6000},{0xc0ba8000},{0xc0baa000},{0xc0bac000},{0xc0bae000},{0xc0bb0000},{0xc0bb2000},{0xc0bb4000},{0xc0bb6000},{0xc0bb8000},{0xc0bba000},{0xc0bbc000},{0xc0bbe000}, -{0xc0bc0000},{0xc0bc2000},{0xc0bc4000},{0xc0bc6000},{0xc0bc8000},{0xc0bca000},{0xc0bcc000},{0xc0bce000},{0xc0bd0000},{0xc0bd2000},{0xc0bd4000},{0xc0bd6000},{0xc0bd8000},{0xc0bda000},{0xc0bdc000},{0xc0bde000},{0xc0be0000},{0xc0be2000},{0xc0be4000},{0xc0be6000},{0xc0be8000},{0xc0bea000},{0xc0bec000},{0xc0bee000},{0xc0bf0000},{0xc0bf2000},{0xc0bf4000},{0xc0bf6000},{0xc0bf8000},{0xc0bfa000},{0xc0bfc000},{0xc0bfe000}, -{0xc0c00000},{0xc0c02000},{0xc0c04000},{0xc0c06000},{0xc0c08000},{0xc0c0a000},{0xc0c0c000},{0xc0c0e000},{0xc0c10000},{0xc0c12000},{0xc0c14000},{0xc0c16000},{0xc0c18000},{0xc0c1a000},{0xc0c1c000},{0xc0c1e000},{0xc0c20000},{0xc0c22000},{0xc0c24000},{0xc0c26000},{0xc0c28000},{0xc0c2a000},{0xc0c2c000},{0xc0c2e000},{0xc0c30000},{0xc0c32000},{0xc0c34000},{0xc0c36000},{0xc0c38000},{0xc0c3a000},{0xc0c3c000},{0xc0c3e000}, -{0xc0c40000},{0xc0c42000},{0xc0c44000},{0xc0c46000},{0xc0c48000},{0xc0c4a000},{0xc0c4c000},{0xc0c4e000},{0xc0c50000},{0xc0c52000},{0xc0c54000},{0xc0c56000},{0xc0c58000},{0xc0c5a000},{0xc0c5c000},{0xc0c5e000},{0xc0c60000},{0xc0c62000},{0xc0c64000},{0xc0c66000},{0xc0c68000},{0xc0c6a000},{0xc0c6c000},{0xc0c6e000},{0xc0c70000},{0xc0c72000},{0xc0c74000},{0xc0c76000},{0xc0c78000},{0xc0c7a000},{0xc0c7c000},{0xc0c7e000}, -{0xc0c80000},{0xc0c82000},{0xc0c84000},{0xc0c86000},{0xc0c88000},{0xc0c8a000},{0xc0c8c000},{0xc0c8e000},{0xc0c90000},{0xc0c92000},{0xc0c94000},{0xc0c96000},{0xc0c98000},{0xc0c9a000},{0xc0c9c000},{0xc0c9e000},{0xc0ca0000},{0xc0ca2000},{0xc0ca4000},{0xc0ca6000},{0xc0ca8000},{0xc0caa000},{0xc0cac000},{0xc0cae000},{0xc0cb0000},{0xc0cb2000},{0xc0cb4000},{0xc0cb6000},{0xc0cb8000},{0xc0cba000},{0xc0cbc000},{0xc0cbe000}, -{0xc0cc0000},{0xc0cc2000},{0xc0cc4000},{0xc0cc6000},{0xc0cc8000},{0xc0cca000},{0xc0ccc000},{0xc0cce000},{0xc0cd0000},{0xc0cd2000},{0xc0cd4000},{0xc0cd6000},{0xc0cd8000},{0xc0cda000},{0xc0cdc000},{0xc0cde000},{0xc0ce0000},{0xc0ce2000},{0xc0ce4000},{0xc0ce6000},{0xc0ce8000},{0xc0cea000},{0xc0cec000},{0xc0cee000},{0xc0cf0000},{0xc0cf2000},{0xc0cf4000},{0xc0cf6000},{0xc0cf8000},{0xc0cfa000},{0xc0cfc000},{0xc0cfe000}, -{0xc0d00000},{0xc0d02000},{0xc0d04000},{0xc0d06000},{0xc0d08000},{0xc0d0a000},{0xc0d0c000},{0xc0d0e000},{0xc0d10000},{0xc0d12000},{0xc0d14000},{0xc0d16000},{0xc0d18000},{0xc0d1a000},{0xc0d1c000},{0xc0d1e000},{0xc0d20000},{0xc0d22000},{0xc0d24000},{0xc0d26000},{0xc0d28000},{0xc0d2a000},{0xc0d2c000},{0xc0d2e000},{0xc0d30000},{0xc0d32000},{0xc0d34000},{0xc0d36000},{0xc0d38000},{0xc0d3a000},{0xc0d3c000},{0xc0d3e000}, -{0xc0d40000},{0xc0d42000},{0xc0d44000},{0xc0d46000},{0xc0d48000},{0xc0d4a000},{0xc0d4c000},{0xc0d4e000},{0xc0d50000},{0xc0d52000},{0xc0d54000},{0xc0d56000},{0xc0d58000},{0xc0d5a000},{0xc0d5c000},{0xc0d5e000},{0xc0d60000},{0xc0d62000},{0xc0d64000},{0xc0d66000},{0xc0d68000},{0xc0d6a000},{0xc0d6c000},{0xc0d6e000},{0xc0d70000},{0xc0d72000},{0xc0d74000},{0xc0d76000},{0xc0d78000},{0xc0d7a000},{0xc0d7c000},{0xc0d7e000}, -{0xc0d80000},{0xc0d82000},{0xc0d84000},{0xc0d86000},{0xc0d88000},{0xc0d8a000},{0xc0d8c000},{0xc0d8e000},{0xc0d90000},{0xc0d92000},{0xc0d94000},{0xc0d96000},{0xc0d98000},{0xc0d9a000},{0xc0d9c000},{0xc0d9e000},{0xc0da0000},{0xc0da2000},{0xc0da4000},{0xc0da6000},{0xc0da8000},{0xc0daa000},{0xc0dac000},{0xc0dae000},{0xc0db0000},{0xc0db2000},{0xc0db4000},{0xc0db6000},{0xc0db8000},{0xc0dba000},{0xc0dbc000},{0xc0dbe000}, -{0xc0dc0000},{0xc0dc2000},{0xc0dc4000},{0xc0dc6000},{0xc0dc8000},{0xc0dca000},{0xc0dcc000},{0xc0dce000},{0xc0dd0000},{0xc0dd2000},{0xc0dd4000},{0xc0dd6000},{0xc0dd8000},{0xc0dda000},{0xc0ddc000},{0xc0dde000},{0xc0de0000},{0xc0de2000},{0xc0de4000},{0xc0de6000},{0xc0de8000},{0xc0dea000},{0xc0dec000},{0xc0dee000},{0xc0df0000},{0xc0df2000},{0xc0df4000},{0xc0df6000},{0xc0df8000},{0xc0dfa000},{0xc0dfc000},{0xc0dfe000}, -{0xc0e00000},{0xc0e02000},{0xc0e04000},{0xc0e06000},{0xc0e08000},{0xc0e0a000},{0xc0e0c000},{0xc0e0e000},{0xc0e10000},{0xc0e12000},{0xc0e14000},{0xc0e16000},{0xc0e18000},{0xc0e1a000},{0xc0e1c000},{0xc0e1e000},{0xc0e20000},{0xc0e22000},{0xc0e24000},{0xc0e26000},{0xc0e28000},{0xc0e2a000},{0xc0e2c000},{0xc0e2e000},{0xc0e30000},{0xc0e32000},{0xc0e34000},{0xc0e36000},{0xc0e38000},{0xc0e3a000},{0xc0e3c000},{0xc0e3e000}, -{0xc0e40000},{0xc0e42000},{0xc0e44000},{0xc0e46000},{0xc0e48000},{0xc0e4a000},{0xc0e4c000},{0xc0e4e000},{0xc0e50000},{0xc0e52000},{0xc0e54000},{0xc0e56000},{0xc0e58000},{0xc0e5a000},{0xc0e5c000},{0xc0e5e000},{0xc0e60000},{0xc0e62000},{0xc0e64000},{0xc0e66000},{0xc0e68000},{0xc0e6a000},{0xc0e6c000},{0xc0e6e000},{0xc0e70000},{0xc0e72000},{0xc0e74000},{0xc0e76000},{0xc0e78000},{0xc0e7a000},{0xc0e7c000},{0xc0e7e000}, -{0xc0e80000},{0xc0e82000},{0xc0e84000},{0xc0e86000},{0xc0e88000},{0xc0e8a000},{0xc0e8c000},{0xc0e8e000},{0xc0e90000},{0xc0e92000},{0xc0e94000},{0xc0e96000},{0xc0e98000},{0xc0e9a000},{0xc0e9c000},{0xc0e9e000},{0xc0ea0000},{0xc0ea2000},{0xc0ea4000},{0xc0ea6000},{0xc0ea8000},{0xc0eaa000},{0xc0eac000},{0xc0eae000},{0xc0eb0000},{0xc0eb2000},{0xc0eb4000},{0xc0eb6000},{0xc0eb8000},{0xc0eba000},{0xc0ebc000},{0xc0ebe000}, -{0xc0ec0000},{0xc0ec2000},{0xc0ec4000},{0xc0ec6000},{0xc0ec8000},{0xc0eca000},{0xc0ecc000},{0xc0ece000},{0xc0ed0000},{0xc0ed2000},{0xc0ed4000},{0xc0ed6000},{0xc0ed8000},{0xc0eda000},{0xc0edc000},{0xc0ede000},{0xc0ee0000},{0xc0ee2000},{0xc0ee4000},{0xc0ee6000},{0xc0ee8000},{0xc0eea000},{0xc0eec000},{0xc0eee000},{0xc0ef0000},{0xc0ef2000},{0xc0ef4000},{0xc0ef6000},{0xc0ef8000},{0xc0efa000},{0xc0efc000},{0xc0efe000}, -{0xc0f00000},{0xc0f02000},{0xc0f04000},{0xc0f06000},{0xc0f08000},{0xc0f0a000},{0xc0f0c000},{0xc0f0e000},{0xc0f10000},{0xc0f12000},{0xc0f14000},{0xc0f16000},{0xc0f18000},{0xc0f1a000},{0xc0f1c000},{0xc0f1e000},{0xc0f20000},{0xc0f22000},{0xc0f24000},{0xc0f26000},{0xc0f28000},{0xc0f2a000},{0xc0f2c000},{0xc0f2e000},{0xc0f30000},{0xc0f32000},{0xc0f34000},{0xc0f36000},{0xc0f38000},{0xc0f3a000},{0xc0f3c000},{0xc0f3e000}, -{0xc0f40000},{0xc0f42000},{0xc0f44000},{0xc0f46000},{0xc0f48000},{0xc0f4a000},{0xc0f4c000},{0xc0f4e000},{0xc0f50000},{0xc0f52000},{0xc0f54000},{0xc0f56000},{0xc0f58000},{0xc0f5a000},{0xc0f5c000},{0xc0f5e000},{0xc0f60000},{0xc0f62000},{0xc0f64000},{0xc0f66000},{0xc0f68000},{0xc0f6a000},{0xc0f6c000},{0xc0f6e000},{0xc0f70000},{0xc0f72000},{0xc0f74000},{0xc0f76000},{0xc0f78000},{0xc0f7a000},{0xc0f7c000},{0xc0f7e000}, -{0xc0f80000},{0xc0f82000},{0xc0f84000},{0xc0f86000},{0xc0f88000},{0xc0f8a000},{0xc0f8c000},{0xc0f8e000},{0xc0f90000},{0xc0f92000},{0xc0f94000},{0xc0f96000},{0xc0f98000},{0xc0f9a000},{0xc0f9c000},{0xc0f9e000},{0xc0fa0000},{0xc0fa2000},{0xc0fa4000},{0xc0fa6000},{0xc0fa8000},{0xc0faa000},{0xc0fac000},{0xc0fae000},{0xc0fb0000},{0xc0fb2000},{0xc0fb4000},{0xc0fb6000},{0xc0fb8000},{0xc0fba000},{0xc0fbc000},{0xc0fbe000}, -{0xc0fc0000},{0xc0fc2000},{0xc0fc4000},{0xc0fc6000},{0xc0fc8000},{0xc0fca000},{0xc0fcc000},{0xc0fce000},{0xc0fd0000},{0xc0fd2000},{0xc0fd4000},{0xc0fd6000},{0xc0fd8000},{0xc0fda000},{0xc0fdc000},{0xc0fde000},{0xc0fe0000},{0xc0fe2000},{0xc0fe4000},{0xc0fe6000},{0xc0fe8000},{0xc0fea000},{0xc0fec000},{0xc0fee000},{0xc0ff0000},{0xc0ff2000},{0xc0ff4000},{0xc0ff6000},{0xc0ff8000},{0xc0ffa000},{0xc0ffc000},{0xc0ffe000}, -{0xc1000000},{0xc1002000},{0xc1004000},{0xc1006000},{0xc1008000},{0xc100a000},{0xc100c000},{0xc100e000},{0xc1010000},{0xc1012000},{0xc1014000},{0xc1016000},{0xc1018000},{0xc101a000},{0xc101c000},{0xc101e000},{0xc1020000},{0xc1022000},{0xc1024000},{0xc1026000},{0xc1028000},{0xc102a000},{0xc102c000},{0xc102e000},{0xc1030000},{0xc1032000},{0xc1034000},{0xc1036000},{0xc1038000},{0xc103a000},{0xc103c000},{0xc103e000}, -{0xc1040000},{0xc1042000},{0xc1044000},{0xc1046000},{0xc1048000},{0xc104a000},{0xc104c000},{0xc104e000},{0xc1050000},{0xc1052000},{0xc1054000},{0xc1056000},{0xc1058000},{0xc105a000},{0xc105c000},{0xc105e000},{0xc1060000},{0xc1062000},{0xc1064000},{0xc1066000},{0xc1068000},{0xc106a000},{0xc106c000},{0xc106e000},{0xc1070000},{0xc1072000},{0xc1074000},{0xc1076000},{0xc1078000},{0xc107a000},{0xc107c000},{0xc107e000}, -{0xc1080000},{0xc1082000},{0xc1084000},{0xc1086000},{0xc1088000},{0xc108a000},{0xc108c000},{0xc108e000},{0xc1090000},{0xc1092000},{0xc1094000},{0xc1096000},{0xc1098000},{0xc109a000},{0xc109c000},{0xc109e000},{0xc10a0000},{0xc10a2000},{0xc10a4000},{0xc10a6000},{0xc10a8000},{0xc10aa000},{0xc10ac000},{0xc10ae000},{0xc10b0000},{0xc10b2000},{0xc10b4000},{0xc10b6000},{0xc10b8000},{0xc10ba000},{0xc10bc000},{0xc10be000}, -{0xc10c0000},{0xc10c2000},{0xc10c4000},{0xc10c6000},{0xc10c8000},{0xc10ca000},{0xc10cc000},{0xc10ce000},{0xc10d0000},{0xc10d2000},{0xc10d4000},{0xc10d6000},{0xc10d8000},{0xc10da000},{0xc10dc000},{0xc10de000},{0xc10e0000},{0xc10e2000},{0xc10e4000},{0xc10e6000},{0xc10e8000},{0xc10ea000},{0xc10ec000},{0xc10ee000},{0xc10f0000},{0xc10f2000},{0xc10f4000},{0xc10f6000},{0xc10f8000},{0xc10fa000},{0xc10fc000},{0xc10fe000}, -{0xc1100000},{0xc1102000},{0xc1104000},{0xc1106000},{0xc1108000},{0xc110a000},{0xc110c000},{0xc110e000},{0xc1110000},{0xc1112000},{0xc1114000},{0xc1116000},{0xc1118000},{0xc111a000},{0xc111c000},{0xc111e000},{0xc1120000},{0xc1122000},{0xc1124000},{0xc1126000},{0xc1128000},{0xc112a000},{0xc112c000},{0xc112e000},{0xc1130000},{0xc1132000},{0xc1134000},{0xc1136000},{0xc1138000},{0xc113a000},{0xc113c000},{0xc113e000}, -{0xc1140000},{0xc1142000},{0xc1144000},{0xc1146000},{0xc1148000},{0xc114a000},{0xc114c000},{0xc114e000},{0xc1150000},{0xc1152000},{0xc1154000},{0xc1156000},{0xc1158000},{0xc115a000},{0xc115c000},{0xc115e000},{0xc1160000},{0xc1162000},{0xc1164000},{0xc1166000},{0xc1168000},{0xc116a000},{0xc116c000},{0xc116e000},{0xc1170000},{0xc1172000},{0xc1174000},{0xc1176000},{0xc1178000},{0xc117a000},{0xc117c000},{0xc117e000}, -{0xc1180000},{0xc1182000},{0xc1184000},{0xc1186000},{0xc1188000},{0xc118a000},{0xc118c000},{0xc118e000},{0xc1190000},{0xc1192000},{0xc1194000},{0xc1196000},{0xc1198000},{0xc119a000},{0xc119c000},{0xc119e000},{0xc11a0000},{0xc11a2000},{0xc11a4000},{0xc11a6000},{0xc11a8000},{0xc11aa000},{0xc11ac000},{0xc11ae000},{0xc11b0000},{0xc11b2000},{0xc11b4000},{0xc11b6000},{0xc11b8000},{0xc11ba000},{0xc11bc000},{0xc11be000}, -{0xc11c0000},{0xc11c2000},{0xc11c4000},{0xc11c6000},{0xc11c8000},{0xc11ca000},{0xc11cc000},{0xc11ce000},{0xc11d0000},{0xc11d2000},{0xc11d4000},{0xc11d6000},{0xc11d8000},{0xc11da000},{0xc11dc000},{0xc11de000},{0xc11e0000},{0xc11e2000},{0xc11e4000},{0xc11e6000},{0xc11e8000},{0xc11ea000},{0xc11ec000},{0xc11ee000},{0xc11f0000},{0xc11f2000},{0xc11f4000},{0xc11f6000},{0xc11f8000},{0xc11fa000},{0xc11fc000},{0xc11fe000}, -{0xc1200000},{0xc1202000},{0xc1204000},{0xc1206000},{0xc1208000},{0xc120a000},{0xc120c000},{0xc120e000},{0xc1210000},{0xc1212000},{0xc1214000},{0xc1216000},{0xc1218000},{0xc121a000},{0xc121c000},{0xc121e000},{0xc1220000},{0xc1222000},{0xc1224000},{0xc1226000},{0xc1228000},{0xc122a000},{0xc122c000},{0xc122e000},{0xc1230000},{0xc1232000},{0xc1234000},{0xc1236000},{0xc1238000},{0xc123a000},{0xc123c000},{0xc123e000}, -{0xc1240000},{0xc1242000},{0xc1244000},{0xc1246000},{0xc1248000},{0xc124a000},{0xc124c000},{0xc124e000},{0xc1250000},{0xc1252000},{0xc1254000},{0xc1256000},{0xc1258000},{0xc125a000},{0xc125c000},{0xc125e000},{0xc1260000},{0xc1262000},{0xc1264000},{0xc1266000},{0xc1268000},{0xc126a000},{0xc126c000},{0xc126e000},{0xc1270000},{0xc1272000},{0xc1274000},{0xc1276000},{0xc1278000},{0xc127a000},{0xc127c000},{0xc127e000}, -{0xc1280000},{0xc1282000},{0xc1284000},{0xc1286000},{0xc1288000},{0xc128a000},{0xc128c000},{0xc128e000},{0xc1290000},{0xc1292000},{0xc1294000},{0xc1296000},{0xc1298000},{0xc129a000},{0xc129c000},{0xc129e000},{0xc12a0000},{0xc12a2000},{0xc12a4000},{0xc12a6000},{0xc12a8000},{0xc12aa000},{0xc12ac000},{0xc12ae000},{0xc12b0000},{0xc12b2000},{0xc12b4000},{0xc12b6000},{0xc12b8000},{0xc12ba000},{0xc12bc000},{0xc12be000}, -{0xc12c0000},{0xc12c2000},{0xc12c4000},{0xc12c6000},{0xc12c8000},{0xc12ca000},{0xc12cc000},{0xc12ce000},{0xc12d0000},{0xc12d2000},{0xc12d4000},{0xc12d6000},{0xc12d8000},{0xc12da000},{0xc12dc000},{0xc12de000},{0xc12e0000},{0xc12e2000},{0xc12e4000},{0xc12e6000},{0xc12e8000},{0xc12ea000},{0xc12ec000},{0xc12ee000},{0xc12f0000},{0xc12f2000},{0xc12f4000},{0xc12f6000},{0xc12f8000},{0xc12fa000},{0xc12fc000},{0xc12fe000}, -{0xc1300000},{0xc1302000},{0xc1304000},{0xc1306000},{0xc1308000},{0xc130a000},{0xc130c000},{0xc130e000},{0xc1310000},{0xc1312000},{0xc1314000},{0xc1316000},{0xc1318000},{0xc131a000},{0xc131c000},{0xc131e000},{0xc1320000},{0xc1322000},{0xc1324000},{0xc1326000},{0xc1328000},{0xc132a000},{0xc132c000},{0xc132e000},{0xc1330000},{0xc1332000},{0xc1334000},{0xc1336000},{0xc1338000},{0xc133a000},{0xc133c000},{0xc133e000}, -{0xc1340000},{0xc1342000},{0xc1344000},{0xc1346000},{0xc1348000},{0xc134a000},{0xc134c000},{0xc134e000},{0xc1350000},{0xc1352000},{0xc1354000},{0xc1356000},{0xc1358000},{0xc135a000},{0xc135c000},{0xc135e000},{0xc1360000},{0xc1362000},{0xc1364000},{0xc1366000},{0xc1368000},{0xc136a000},{0xc136c000},{0xc136e000},{0xc1370000},{0xc1372000},{0xc1374000},{0xc1376000},{0xc1378000},{0xc137a000},{0xc137c000},{0xc137e000}, -{0xc1380000},{0xc1382000},{0xc1384000},{0xc1386000},{0xc1388000},{0xc138a000},{0xc138c000},{0xc138e000},{0xc1390000},{0xc1392000},{0xc1394000},{0xc1396000},{0xc1398000},{0xc139a000},{0xc139c000},{0xc139e000},{0xc13a0000},{0xc13a2000},{0xc13a4000},{0xc13a6000},{0xc13a8000},{0xc13aa000},{0xc13ac000},{0xc13ae000},{0xc13b0000},{0xc13b2000},{0xc13b4000},{0xc13b6000},{0xc13b8000},{0xc13ba000},{0xc13bc000},{0xc13be000}, -{0xc13c0000},{0xc13c2000},{0xc13c4000},{0xc13c6000},{0xc13c8000},{0xc13ca000},{0xc13cc000},{0xc13ce000},{0xc13d0000},{0xc13d2000},{0xc13d4000},{0xc13d6000},{0xc13d8000},{0xc13da000},{0xc13dc000},{0xc13de000},{0xc13e0000},{0xc13e2000},{0xc13e4000},{0xc13e6000},{0xc13e8000},{0xc13ea000},{0xc13ec000},{0xc13ee000},{0xc13f0000},{0xc13f2000},{0xc13f4000},{0xc13f6000},{0xc13f8000},{0xc13fa000},{0xc13fc000},{0xc13fe000}, -{0xc1400000},{0xc1402000},{0xc1404000},{0xc1406000},{0xc1408000},{0xc140a000},{0xc140c000},{0xc140e000},{0xc1410000},{0xc1412000},{0xc1414000},{0xc1416000},{0xc1418000},{0xc141a000},{0xc141c000},{0xc141e000},{0xc1420000},{0xc1422000},{0xc1424000},{0xc1426000},{0xc1428000},{0xc142a000},{0xc142c000},{0xc142e000},{0xc1430000},{0xc1432000},{0xc1434000},{0xc1436000},{0xc1438000},{0xc143a000},{0xc143c000},{0xc143e000}, -{0xc1440000},{0xc1442000},{0xc1444000},{0xc1446000},{0xc1448000},{0xc144a000},{0xc144c000},{0xc144e000},{0xc1450000},{0xc1452000},{0xc1454000},{0xc1456000},{0xc1458000},{0xc145a000},{0xc145c000},{0xc145e000},{0xc1460000},{0xc1462000},{0xc1464000},{0xc1466000},{0xc1468000},{0xc146a000},{0xc146c000},{0xc146e000},{0xc1470000},{0xc1472000},{0xc1474000},{0xc1476000},{0xc1478000},{0xc147a000},{0xc147c000},{0xc147e000}, -{0xc1480000},{0xc1482000},{0xc1484000},{0xc1486000},{0xc1488000},{0xc148a000},{0xc148c000},{0xc148e000},{0xc1490000},{0xc1492000},{0xc1494000},{0xc1496000},{0xc1498000},{0xc149a000},{0xc149c000},{0xc149e000},{0xc14a0000},{0xc14a2000},{0xc14a4000},{0xc14a6000},{0xc14a8000},{0xc14aa000},{0xc14ac000},{0xc14ae000},{0xc14b0000},{0xc14b2000},{0xc14b4000},{0xc14b6000},{0xc14b8000},{0xc14ba000},{0xc14bc000},{0xc14be000}, -{0xc14c0000},{0xc14c2000},{0xc14c4000},{0xc14c6000},{0xc14c8000},{0xc14ca000},{0xc14cc000},{0xc14ce000},{0xc14d0000},{0xc14d2000},{0xc14d4000},{0xc14d6000},{0xc14d8000},{0xc14da000},{0xc14dc000},{0xc14de000},{0xc14e0000},{0xc14e2000},{0xc14e4000},{0xc14e6000},{0xc14e8000},{0xc14ea000},{0xc14ec000},{0xc14ee000},{0xc14f0000},{0xc14f2000},{0xc14f4000},{0xc14f6000},{0xc14f8000},{0xc14fa000},{0xc14fc000},{0xc14fe000}, -{0xc1500000},{0xc1502000},{0xc1504000},{0xc1506000},{0xc1508000},{0xc150a000},{0xc150c000},{0xc150e000},{0xc1510000},{0xc1512000},{0xc1514000},{0xc1516000},{0xc1518000},{0xc151a000},{0xc151c000},{0xc151e000},{0xc1520000},{0xc1522000},{0xc1524000},{0xc1526000},{0xc1528000},{0xc152a000},{0xc152c000},{0xc152e000},{0xc1530000},{0xc1532000},{0xc1534000},{0xc1536000},{0xc1538000},{0xc153a000},{0xc153c000},{0xc153e000}, -{0xc1540000},{0xc1542000},{0xc1544000},{0xc1546000},{0xc1548000},{0xc154a000},{0xc154c000},{0xc154e000},{0xc1550000},{0xc1552000},{0xc1554000},{0xc1556000},{0xc1558000},{0xc155a000},{0xc155c000},{0xc155e000},{0xc1560000},{0xc1562000},{0xc1564000},{0xc1566000},{0xc1568000},{0xc156a000},{0xc156c000},{0xc156e000},{0xc1570000},{0xc1572000},{0xc1574000},{0xc1576000},{0xc1578000},{0xc157a000},{0xc157c000},{0xc157e000}, -{0xc1580000},{0xc1582000},{0xc1584000},{0xc1586000},{0xc1588000},{0xc158a000},{0xc158c000},{0xc158e000},{0xc1590000},{0xc1592000},{0xc1594000},{0xc1596000},{0xc1598000},{0xc159a000},{0xc159c000},{0xc159e000},{0xc15a0000},{0xc15a2000},{0xc15a4000},{0xc15a6000},{0xc15a8000},{0xc15aa000},{0xc15ac000},{0xc15ae000},{0xc15b0000},{0xc15b2000},{0xc15b4000},{0xc15b6000},{0xc15b8000},{0xc15ba000},{0xc15bc000},{0xc15be000}, -{0xc15c0000},{0xc15c2000},{0xc15c4000},{0xc15c6000},{0xc15c8000},{0xc15ca000},{0xc15cc000},{0xc15ce000},{0xc15d0000},{0xc15d2000},{0xc15d4000},{0xc15d6000},{0xc15d8000},{0xc15da000},{0xc15dc000},{0xc15de000},{0xc15e0000},{0xc15e2000},{0xc15e4000},{0xc15e6000},{0xc15e8000},{0xc15ea000},{0xc15ec000},{0xc15ee000},{0xc15f0000},{0xc15f2000},{0xc15f4000},{0xc15f6000},{0xc15f8000},{0xc15fa000},{0xc15fc000},{0xc15fe000}, -{0xc1600000},{0xc1602000},{0xc1604000},{0xc1606000},{0xc1608000},{0xc160a000},{0xc160c000},{0xc160e000},{0xc1610000},{0xc1612000},{0xc1614000},{0xc1616000},{0xc1618000},{0xc161a000},{0xc161c000},{0xc161e000},{0xc1620000},{0xc1622000},{0xc1624000},{0xc1626000},{0xc1628000},{0xc162a000},{0xc162c000},{0xc162e000},{0xc1630000},{0xc1632000},{0xc1634000},{0xc1636000},{0xc1638000},{0xc163a000},{0xc163c000},{0xc163e000}, -{0xc1640000},{0xc1642000},{0xc1644000},{0xc1646000},{0xc1648000},{0xc164a000},{0xc164c000},{0xc164e000},{0xc1650000},{0xc1652000},{0xc1654000},{0xc1656000},{0xc1658000},{0xc165a000},{0xc165c000},{0xc165e000},{0xc1660000},{0xc1662000},{0xc1664000},{0xc1666000},{0xc1668000},{0xc166a000},{0xc166c000},{0xc166e000},{0xc1670000},{0xc1672000},{0xc1674000},{0xc1676000},{0xc1678000},{0xc167a000},{0xc167c000},{0xc167e000}, -{0xc1680000},{0xc1682000},{0xc1684000},{0xc1686000},{0xc1688000},{0xc168a000},{0xc168c000},{0xc168e000},{0xc1690000},{0xc1692000},{0xc1694000},{0xc1696000},{0xc1698000},{0xc169a000},{0xc169c000},{0xc169e000},{0xc16a0000},{0xc16a2000},{0xc16a4000},{0xc16a6000},{0xc16a8000},{0xc16aa000},{0xc16ac000},{0xc16ae000},{0xc16b0000},{0xc16b2000},{0xc16b4000},{0xc16b6000},{0xc16b8000},{0xc16ba000},{0xc16bc000},{0xc16be000}, -{0xc16c0000},{0xc16c2000},{0xc16c4000},{0xc16c6000},{0xc16c8000},{0xc16ca000},{0xc16cc000},{0xc16ce000},{0xc16d0000},{0xc16d2000},{0xc16d4000},{0xc16d6000},{0xc16d8000},{0xc16da000},{0xc16dc000},{0xc16de000},{0xc16e0000},{0xc16e2000},{0xc16e4000},{0xc16e6000},{0xc16e8000},{0xc16ea000},{0xc16ec000},{0xc16ee000},{0xc16f0000},{0xc16f2000},{0xc16f4000},{0xc16f6000},{0xc16f8000},{0xc16fa000},{0xc16fc000},{0xc16fe000}, -{0xc1700000},{0xc1702000},{0xc1704000},{0xc1706000},{0xc1708000},{0xc170a000},{0xc170c000},{0xc170e000},{0xc1710000},{0xc1712000},{0xc1714000},{0xc1716000},{0xc1718000},{0xc171a000},{0xc171c000},{0xc171e000},{0xc1720000},{0xc1722000},{0xc1724000},{0xc1726000},{0xc1728000},{0xc172a000},{0xc172c000},{0xc172e000},{0xc1730000},{0xc1732000},{0xc1734000},{0xc1736000},{0xc1738000},{0xc173a000},{0xc173c000},{0xc173e000}, -{0xc1740000},{0xc1742000},{0xc1744000},{0xc1746000},{0xc1748000},{0xc174a000},{0xc174c000},{0xc174e000},{0xc1750000},{0xc1752000},{0xc1754000},{0xc1756000},{0xc1758000},{0xc175a000},{0xc175c000},{0xc175e000},{0xc1760000},{0xc1762000},{0xc1764000},{0xc1766000},{0xc1768000},{0xc176a000},{0xc176c000},{0xc176e000},{0xc1770000},{0xc1772000},{0xc1774000},{0xc1776000},{0xc1778000},{0xc177a000},{0xc177c000},{0xc177e000}, -{0xc1780000},{0xc1782000},{0xc1784000},{0xc1786000},{0xc1788000},{0xc178a000},{0xc178c000},{0xc178e000},{0xc1790000},{0xc1792000},{0xc1794000},{0xc1796000},{0xc1798000},{0xc179a000},{0xc179c000},{0xc179e000},{0xc17a0000},{0xc17a2000},{0xc17a4000},{0xc17a6000},{0xc17a8000},{0xc17aa000},{0xc17ac000},{0xc17ae000},{0xc17b0000},{0xc17b2000},{0xc17b4000},{0xc17b6000},{0xc17b8000},{0xc17ba000},{0xc17bc000},{0xc17be000}, -{0xc17c0000},{0xc17c2000},{0xc17c4000},{0xc17c6000},{0xc17c8000},{0xc17ca000},{0xc17cc000},{0xc17ce000},{0xc17d0000},{0xc17d2000},{0xc17d4000},{0xc17d6000},{0xc17d8000},{0xc17da000},{0xc17dc000},{0xc17de000},{0xc17e0000},{0xc17e2000},{0xc17e4000},{0xc17e6000},{0xc17e8000},{0xc17ea000},{0xc17ec000},{0xc17ee000},{0xc17f0000},{0xc17f2000},{0xc17f4000},{0xc17f6000},{0xc17f8000},{0xc17fa000},{0xc17fc000},{0xc17fe000}, -{0xc1800000},{0xc1802000},{0xc1804000},{0xc1806000},{0xc1808000},{0xc180a000},{0xc180c000},{0xc180e000},{0xc1810000},{0xc1812000},{0xc1814000},{0xc1816000},{0xc1818000},{0xc181a000},{0xc181c000},{0xc181e000},{0xc1820000},{0xc1822000},{0xc1824000},{0xc1826000},{0xc1828000},{0xc182a000},{0xc182c000},{0xc182e000},{0xc1830000},{0xc1832000},{0xc1834000},{0xc1836000},{0xc1838000},{0xc183a000},{0xc183c000},{0xc183e000}, -{0xc1840000},{0xc1842000},{0xc1844000},{0xc1846000},{0xc1848000},{0xc184a000},{0xc184c000},{0xc184e000},{0xc1850000},{0xc1852000},{0xc1854000},{0xc1856000},{0xc1858000},{0xc185a000},{0xc185c000},{0xc185e000},{0xc1860000},{0xc1862000},{0xc1864000},{0xc1866000},{0xc1868000},{0xc186a000},{0xc186c000},{0xc186e000},{0xc1870000},{0xc1872000},{0xc1874000},{0xc1876000},{0xc1878000},{0xc187a000},{0xc187c000},{0xc187e000}, -{0xc1880000},{0xc1882000},{0xc1884000},{0xc1886000},{0xc1888000},{0xc188a000},{0xc188c000},{0xc188e000},{0xc1890000},{0xc1892000},{0xc1894000},{0xc1896000},{0xc1898000},{0xc189a000},{0xc189c000},{0xc189e000},{0xc18a0000},{0xc18a2000},{0xc18a4000},{0xc18a6000},{0xc18a8000},{0xc18aa000},{0xc18ac000},{0xc18ae000},{0xc18b0000},{0xc18b2000},{0xc18b4000},{0xc18b6000},{0xc18b8000},{0xc18ba000},{0xc18bc000},{0xc18be000}, -{0xc18c0000},{0xc18c2000},{0xc18c4000},{0xc18c6000},{0xc18c8000},{0xc18ca000},{0xc18cc000},{0xc18ce000},{0xc18d0000},{0xc18d2000},{0xc18d4000},{0xc18d6000},{0xc18d8000},{0xc18da000},{0xc18dc000},{0xc18de000},{0xc18e0000},{0xc18e2000},{0xc18e4000},{0xc18e6000},{0xc18e8000},{0xc18ea000},{0xc18ec000},{0xc18ee000},{0xc18f0000},{0xc18f2000},{0xc18f4000},{0xc18f6000},{0xc18f8000},{0xc18fa000},{0xc18fc000},{0xc18fe000}, -{0xc1900000},{0xc1902000},{0xc1904000},{0xc1906000},{0xc1908000},{0xc190a000},{0xc190c000},{0xc190e000},{0xc1910000},{0xc1912000},{0xc1914000},{0xc1916000},{0xc1918000},{0xc191a000},{0xc191c000},{0xc191e000},{0xc1920000},{0xc1922000},{0xc1924000},{0xc1926000},{0xc1928000},{0xc192a000},{0xc192c000},{0xc192e000},{0xc1930000},{0xc1932000},{0xc1934000},{0xc1936000},{0xc1938000},{0xc193a000},{0xc193c000},{0xc193e000}, -{0xc1940000},{0xc1942000},{0xc1944000},{0xc1946000},{0xc1948000},{0xc194a000},{0xc194c000},{0xc194e000},{0xc1950000},{0xc1952000},{0xc1954000},{0xc1956000},{0xc1958000},{0xc195a000},{0xc195c000},{0xc195e000},{0xc1960000},{0xc1962000},{0xc1964000},{0xc1966000},{0xc1968000},{0xc196a000},{0xc196c000},{0xc196e000},{0xc1970000},{0xc1972000},{0xc1974000},{0xc1976000},{0xc1978000},{0xc197a000},{0xc197c000},{0xc197e000}, -{0xc1980000},{0xc1982000},{0xc1984000},{0xc1986000},{0xc1988000},{0xc198a000},{0xc198c000},{0xc198e000},{0xc1990000},{0xc1992000},{0xc1994000},{0xc1996000},{0xc1998000},{0xc199a000},{0xc199c000},{0xc199e000},{0xc19a0000},{0xc19a2000},{0xc19a4000},{0xc19a6000},{0xc19a8000},{0xc19aa000},{0xc19ac000},{0xc19ae000},{0xc19b0000},{0xc19b2000},{0xc19b4000},{0xc19b6000},{0xc19b8000},{0xc19ba000},{0xc19bc000},{0xc19be000}, -{0xc19c0000},{0xc19c2000},{0xc19c4000},{0xc19c6000},{0xc19c8000},{0xc19ca000},{0xc19cc000},{0xc19ce000},{0xc19d0000},{0xc19d2000},{0xc19d4000},{0xc19d6000},{0xc19d8000},{0xc19da000},{0xc19dc000},{0xc19de000},{0xc19e0000},{0xc19e2000},{0xc19e4000},{0xc19e6000},{0xc19e8000},{0xc19ea000},{0xc19ec000},{0xc19ee000},{0xc19f0000},{0xc19f2000},{0xc19f4000},{0xc19f6000},{0xc19f8000},{0xc19fa000},{0xc19fc000},{0xc19fe000}, -{0xc1a00000},{0xc1a02000},{0xc1a04000},{0xc1a06000},{0xc1a08000},{0xc1a0a000},{0xc1a0c000},{0xc1a0e000},{0xc1a10000},{0xc1a12000},{0xc1a14000},{0xc1a16000},{0xc1a18000},{0xc1a1a000},{0xc1a1c000},{0xc1a1e000},{0xc1a20000},{0xc1a22000},{0xc1a24000},{0xc1a26000},{0xc1a28000},{0xc1a2a000},{0xc1a2c000},{0xc1a2e000},{0xc1a30000},{0xc1a32000},{0xc1a34000},{0xc1a36000},{0xc1a38000},{0xc1a3a000},{0xc1a3c000},{0xc1a3e000}, -{0xc1a40000},{0xc1a42000},{0xc1a44000},{0xc1a46000},{0xc1a48000},{0xc1a4a000},{0xc1a4c000},{0xc1a4e000},{0xc1a50000},{0xc1a52000},{0xc1a54000},{0xc1a56000},{0xc1a58000},{0xc1a5a000},{0xc1a5c000},{0xc1a5e000},{0xc1a60000},{0xc1a62000},{0xc1a64000},{0xc1a66000},{0xc1a68000},{0xc1a6a000},{0xc1a6c000},{0xc1a6e000},{0xc1a70000},{0xc1a72000},{0xc1a74000},{0xc1a76000},{0xc1a78000},{0xc1a7a000},{0xc1a7c000},{0xc1a7e000}, -{0xc1a80000},{0xc1a82000},{0xc1a84000},{0xc1a86000},{0xc1a88000},{0xc1a8a000},{0xc1a8c000},{0xc1a8e000},{0xc1a90000},{0xc1a92000},{0xc1a94000},{0xc1a96000},{0xc1a98000},{0xc1a9a000},{0xc1a9c000},{0xc1a9e000},{0xc1aa0000},{0xc1aa2000},{0xc1aa4000},{0xc1aa6000},{0xc1aa8000},{0xc1aaa000},{0xc1aac000},{0xc1aae000},{0xc1ab0000},{0xc1ab2000},{0xc1ab4000},{0xc1ab6000},{0xc1ab8000},{0xc1aba000},{0xc1abc000},{0xc1abe000}, -{0xc1ac0000},{0xc1ac2000},{0xc1ac4000},{0xc1ac6000},{0xc1ac8000},{0xc1aca000},{0xc1acc000},{0xc1ace000},{0xc1ad0000},{0xc1ad2000},{0xc1ad4000},{0xc1ad6000},{0xc1ad8000},{0xc1ada000},{0xc1adc000},{0xc1ade000},{0xc1ae0000},{0xc1ae2000},{0xc1ae4000},{0xc1ae6000},{0xc1ae8000},{0xc1aea000},{0xc1aec000},{0xc1aee000},{0xc1af0000},{0xc1af2000},{0xc1af4000},{0xc1af6000},{0xc1af8000},{0xc1afa000},{0xc1afc000},{0xc1afe000}, -{0xc1b00000},{0xc1b02000},{0xc1b04000},{0xc1b06000},{0xc1b08000},{0xc1b0a000},{0xc1b0c000},{0xc1b0e000},{0xc1b10000},{0xc1b12000},{0xc1b14000},{0xc1b16000},{0xc1b18000},{0xc1b1a000},{0xc1b1c000},{0xc1b1e000},{0xc1b20000},{0xc1b22000},{0xc1b24000},{0xc1b26000},{0xc1b28000},{0xc1b2a000},{0xc1b2c000},{0xc1b2e000},{0xc1b30000},{0xc1b32000},{0xc1b34000},{0xc1b36000},{0xc1b38000},{0xc1b3a000},{0xc1b3c000},{0xc1b3e000}, -{0xc1b40000},{0xc1b42000},{0xc1b44000},{0xc1b46000},{0xc1b48000},{0xc1b4a000},{0xc1b4c000},{0xc1b4e000},{0xc1b50000},{0xc1b52000},{0xc1b54000},{0xc1b56000},{0xc1b58000},{0xc1b5a000},{0xc1b5c000},{0xc1b5e000},{0xc1b60000},{0xc1b62000},{0xc1b64000},{0xc1b66000},{0xc1b68000},{0xc1b6a000},{0xc1b6c000},{0xc1b6e000},{0xc1b70000},{0xc1b72000},{0xc1b74000},{0xc1b76000},{0xc1b78000},{0xc1b7a000},{0xc1b7c000},{0xc1b7e000}, -{0xc1b80000},{0xc1b82000},{0xc1b84000},{0xc1b86000},{0xc1b88000},{0xc1b8a000},{0xc1b8c000},{0xc1b8e000},{0xc1b90000},{0xc1b92000},{0xc1b94000},{0xc1b96000},{0xc1b98000},{0xc1b9a000},{0xc1b9c000},{0xc1b9e000},{0xc1ba0000},{0xc1ba2000},{0xc1ba4000},{0xc1ba6000},{0xc1ba8000},{0xc1baa000},{0xc1bac000},{0xc1bae000},{0xc1bb0000},{0xc1bb2000},{0xc1bb4000},{0xc1bb6000},{0xc1bb8000},{0xc1bba000},{0xc1bbc000},{0xc1bbe000}, -{0xc1bc0000},{0xc1bc2000},{0xc1bc4000},{0xc1bc6000},{0xc1bc8000},{0xc1bca000},{0xc1bcc000},{0xc1bce000},{0xc1bd0000},{0xc1bd2000},{0xc1bd4000},{0xc1bd6000},{0xc1bd8000},{0xc1bda000},{0xc1bdc000},{0xc1bde000},{0xc1be0000},{0xc1be2000},{0xc1be4000},{0xc1be6000},{0xc1be8000},{0xc1bea000},{0xc1bec000},{0xc1bee000},{0xc1bf0000},{0xc1bf2000},{0xc1bf4000},{0xc1bf6000},{0xc1bf8000},{0xc1bfa000},{0xc1bfc000},{0xc1bfe000}, -{0xc1c00000},{0xc1c02000},{0xc1c04000},{0xc1c06000},{0xc1c08000},{0xc1c0a000},{0xc1c0c000},{0xc1c0e000},{0xc1c10000},{0xc1c12000},{0xc1c14000},{0xc1c16000},{0xc1c18000},{0xc1c1a000},{0xc1c1c000},{0xc1c1e000},{0xc1c20000},{0xc1c22000},{0xc1c24000},{0xc1c26000},{0xc1c28000},{0xc1c2a000},{0xc1c2c000},{0xc1c2e000},{0xc1c30000},{0xc1c32000},{0xc1c34000},{0xc1c36000},{0xc1c38000},{0xc1c3a000},{0xc1c3c000},{0xc1c3e000}, -{0xc1c40000},{0xc1c42000},{0xc1c44000},{0xc1c46000},{0xc1c48000},{0xc1c4a000},{0xc1c4c000},{0xc1c4e000},{0xc1c50000},{0xc1c52000},{0xc1c54000},{0xc1c56000},{0xc1c58000},{0xc1c5a000},{0xc1c5c000},{0xc1c5e000},{0xc1c60000},{0xc1c62000},{0xc1c64000},{0xc1c66000},{0xc1c68000},{0xc1c6a000},{0xc1c6c000},{0xc1c6e000},{0xc1c70000},{0xc1c72000},{0xc1c74000},{0xc1c76000},{0xc1c78000},{0xc1c7a000},{0xc1c7c000},{0xc1c7e000}, -{0xc1c80000},{0xc1c82000},{0xc1c84000},{0xc1c86000},{0xc1c88000},{0xc1c8a000},{0xc1c8c000},{0xc1c8e000},{0xc1c90000},{0xc1c92000},{0xc1c94000},{0xc1c96000},{0xc1c98000},{0xc1c9a000},{0xc1c9c000},{0xc1c9e000},{0xc1ca0000},{0xc1ca2000},{0xc1ca4000},{0xc1ca6000},{0xc1ca8000},{0xc1caa000},{0xc1cac000},{0xc1cae000},{0xc1cb0000},{0xc1cb2000},{0xc1cb4000},{0xc1cb6000},{0xc1cb8000},{0xc1cba000},{0xc1cbc000},{0xc1cbe000}, -{0xc1cc0000},{0xc1cc2000},{0xc1cc4000},{0xc1cc6000},{0xc1cc8000},{0xc1cca000},{0xc1ccc000},{0xc1cce000},{0xc1cd0000},{0xc1cd2000},{0xc1cd4000},{0xc1cd6000},{0xc1cd8000},{0xc1cda000},{0xc1cdc000},{0xc1cde000},{0xc1ce0000},{0xc1ce2000},{0xc1ce4000},{0xc1ce6000},{0xc1ce8000},{0xc1cea000},{0xc1cec000},{0xc1cee000},{0xc1cf0000},{0xc1cf2000},{0xc1cf4000},{0xc1cf6000},{0xc1cf8000},{0xc1cfa000},{0xc1cfc000},{0xc1cfe000}, -{0xc1d00000},{0xc1d02000},{0xc1d04000},{0xc1d06000},{0xc1d08000},{0xc1d0a000},{0xc1d0c000},{0xc1d0e000},{0xc1d10000},{0xc1d12000},{0xc1d14000},{0xc1d16000},{0xc1d18000},{0xc1d1a000},{0xc1d1c000},{0xc1d1e000},{0xc1d20000},{0xc1d22000},{0xc1d24000},{0xc1d26000},{0xc1d28000},{0xc1d2a000},{0xc1d2c000},{0xc1d2e000},{0xc1d30000},{0xc1d32000},{0xc1d34000},{0xc1d36000},{0xc1d38000},{0xc1d3a000},{0xc1d3c000},{0xc1d3e000}, -{0xc1d40000},{0xc1d42000},{0xc1d44000},{0xc1d46000},{0xc1d48000},{0xc1d4a000},{0xc1d4c000},{0xc1d4e000},{0xc1d50000},{0xc1d52000},{0xc1d54000},{0xc1d56000},{0xc1d58000},{0xc1d5a000},{0xc1d5c000},{0xc1d5e000},{0xc1d60000},{0xc1d62000},{0xc1d64000},{0xc1d66000},{0xc1d68000},{0xc1d6a000},{0xc1d6c000},{0xc1d6e000},{0xc1d70000},{0xc1d72000},{0xc1d74000},{0xc1d76000},{0xc1d78000},{0xc1d7a000},{0xc1d7c000},{0xc1d7e000}, -{0xc1d80000},{0xc1d82000},{0xc1d84000},{0xc1d86000},{0xc1d88000},{0xc1d8a000},{0xc1d8c000},{0xc1d8e000},{0xc1d90000},{0xc1d92000},{0xc1d94000},{0xc1d96000},{0xc1d98000},{0xc1d9a000},{0xc1d9c000},{0xc1d9e000},{0xc1da0000},{0xc1da2000},{0xc1da4000},{0xc1da6000},{0xc1da8000},{0xc1daa000},{0xc1dac000},{0xc1dae000},{0xc1db0000},{0xc1db2000},{0xc1db4000},{0xc1db6000},{0xc1db8000},{0xc1dba000},{0xc1dbc000},{0xc1dbe000}, -{0xc1dc0000},{0xc1dc2000},{0xc1dc4000},{0xc1dc6000},{0xc1dc8000},{0xc1dca000},{0xc1dcc000},{0xc1dce000},{0xc1dd0000},{0xc1dd2000},{0xc1dd4000},{0xc1dd6000},{0xc1dd8000},{0xc1dda000},{0xc1ddc000},{0xc1dde000},{0xc1de0000},{0xc1de2000},{0xc1de4000},{0xc1de6000},{0xc1de8000},{0xc1dea000},{0xc1dec000},{0xc1dee000},{0xc1df0000},{0xc1df2000},{0xc1df4000},{0xc1df6000},{0xc1df8000},{0xc1dfa000},{0xc1dfc000},{0xc1dfe000}, -{0xc1e00000},{0xc1e02000},{0xc1e04000},{0xc1e06000},{0xc1e08000},{0xc1e0a000},{0xc1e0c000},{0xc1e0e000},{0xc1e10000},{0xc1e12000},{0xc1e14000},{0xc1e16000},{0xc1e18000},{0xc1e1a000},{0xc1e1c000},{0xc1e1e000},{0xc1e20000},{0xc1e22000},{0xc1e24000},{0xc1e26000},{0xc1e28000},{0xc1e2a000},{0xc1e2c000},{0xc1e2e000},{0xc1e30000},{0xc1e32000},{0xc1e34000},{0xc1e36000},{0xc1e38000},{0xc1e3a000},{0xc1e3c000},{0xc1e3e000}, -{0xc1e40000},{0xc1e42000},{0xc1e44000},{0xc1e46000},{0xc1e48000},{0xc1e4a000},{0xc1e4c000},{0xc1e4e000},{0xc1e50000},{0xc1e52000},{0xc1e54000},{0xc1e56000},{0xc1e58000},{0xc1e5a000},{0xc1e5c000},{0xc1e5e000},{0xc1e60000},{0xc1e62000},{0xc1e64000},{0xc1e66000},{0xc1e68000},{0xc1e6a000},{0xc1e6c000},{0xc1e6e000},{0xc1e70000},{0xc1e72000},{0xc1e74000},{0xc1e76000},{0xc1e78000},{0xc1e7a000},{0xc1e7c000},{0xc1e7e000}, -{0xc1e80000},{0xc1e82000},{0xc1e84000},{0xc1e86000},{0xc1e88000},{0xc1e8a000},{0xc1e8c000},{0xc1e8e000},{0xc1e90000},{0xc1e92000},{0xc1e94000},{0xc1e96000},{0xc1e98000},{0xc1e9a000},{0xc1e9c000},{0xc1e9e000},{0xc1ea0000},{0xc1ea2000},{0xc1ea4000},{0xc1ea6000},{0xc1ea8000},{0xc1eaa000},{0xc1eac000},{0xc1eae000},{0xc1eb0000},{0xc1eb2000},{0xc1eb4000},{0xc1eb6000},{0xc1eb8000},{0xc1eba000},{0xc1ebc000},{0xc1ebe000}, -{0xc1ec0000},{0xc1ec2000},{0xc1ec4000},{0xc1ec6000},{0xc1ec8000},{0xc1eca000},{0xc1ecc000},{0xc1ece000},{0xc1ed0000},{0xc1ed2000},{0xc1ed4000},{0xc1ed6000},{0xc1ed8000},{0xc1eda000},{0xc1edc000},{0xc1ede000},{0xc1ee0000},{0xc1ee2000},{0xc1ee4000},{0xc1ee6000},{0xc1ee8000},{0xc1eea000},{0xc1eec000},{0xc1eee000},{0xc1ef0000},{0xc1ef2000},{0xc1ef4000},{0xc1ef6000},{0xc1ef8000},{0xc1efa000},{0xc1efc000},{0xc1efe000}, -{0xc1f00000},{0xc1f02000},{0xc1f04000},{0xc1f06000},{0xc1f08000},{0xc1f0a000},{0xc1f0c000},{0xc1f0e000},{0xc1f10000},{0xc1f12000},{0xc1f14000},{0xc1f16000},{0xc1f18000},{0xc1f1a000},{0xc1f1c000},{0xc1f1e000},{0xc1f20000},{0xc1f22000},{0xc1f24000},{0xc1f26000},{0xc1f28000},{0xc1f2a000},{0xc1f2c000},{0xc1f2e000},{0xc1f30000},{0xc1f32000},{0xc1f34000},{0xc1f36000},{0xc1f38000},{0xc1f3a000},{0xc1f3c000},{0xc1f3e000}, -{0xc1f40000},{0xc1f42000},{0xc1f44000},{0xc1f46000},{0xc1f48000},{0xc1f4a000},{0xc1f4c000},{0xc1f4e000},{0xc1f50000},{0xc1f52000},{0xc1f54000},{0xc1f56000},{0xc1f58000},{0xc1f5a000},{0xc1f5c000},{0xc1f5e000},{0xc1f60000},{0xc1f62000},{0xc1f64000},{0xc1f66000},{0xc1f68000},{0xc1f6a000},{0xc1f6c000},{0xc1f6e000},{0xc1f70000},{0xc1f72000},{0xc1f74000},{0xc1f76000},{0xc1f78000},{0xc1f7a000},{0xc1f7c000},{0xc1f7e000}, -{0xc1f80000},{0xc1f82000},{0xc1f84000},{0xc1f86000},{0xc1f88000},{0xc1f8a000},{0xc1f8c000},{0xc1f8e000},{0xc1f90000},{0xc1f92000},{0xc1f94000},{0xc1f96000},{0xc1f98000},{0xc1f9a000},{0xc1f9c000},{0xc1f9e000},{0xc1fa0000},{0xc1fa2000},{0xc1fa4000},{0xc1fa6000},{0xc1fa8000},{0xc1faa000},{0xc1fac000},{0xc1fae000},{0xc1fb0000},{0xc1fb2000},{0xc1fb4000},{0xc1fb6000},{0xc1fb8000},{0xc1fba000},{0xc1fbc000},{0xc1fbe000}, -{0xc1fc0000},{0xc1fc2000},{0xc1fc4000},{0xc1fc6000},{0xc1fc8000},{0xc1fca000},{0xc1fcc000},{0xc1fce000},{0xc1fd0000},{0xc1fd2000},{0xc1fd4000},{0xc1fd6000},{0xc1fd8000},{0xc1fda000},{0xc1fdc000},{0xc1fde000},{0xc1fe0000},{0xc1fe2000},{0xc1fe4000},{0xc1fe6000},{0xc1fe8000},{0xc1fea000},{0xc1fec000},{0xc1fee000},{0xc1ff0000},{0xc1ff2000},{0xc1ff4000},{0xc1ff6000},{0xc1ff8000},{0xc1ffa000},{0xc1ffc000},{0xc1ffe000}, -{0xc2000000},{0xc2002000},{0xc2004000},{0xc2006000},{0xc2008000},{0xc200a000},{0xc200c000},{0xc200e000},{0xc2010000},{0xc2012000},{0xc2014000},{0xc2016000},{0xc2018000},{0xc201a000},{0xc201c000},{0xc201e000},{0xc2020000},{0xc2022000},{0xc2024000},{0xc2026000},{0xc2028000},{0xc202a000},{0xc202c000},{0xc202e000},{0xc2030000},{0xc2032000},{0xc2034000},{0xc2036000},{0xc2038000},{0xc203a000},{0xc203c000},{0xc203e000}, -{0xc2040000},{0xc2042000},{0xc2044000},{0xc2046000},{0xc2048000},{0xc204a000},{0xc204c000},{0xc204e000},{0xc2050000},{0xc2052000},{0xc2054000},{0xc2056000},{0xc2058000},{0xc205a000},{0xc205c000},{0xc205e000},{0xc2060000},{0xc2062000},{0xc2064000},{0xc2066000},{0xc2068000},{0xc206a000},{0xc206c000},{0xc206e000},{0xc2070000},{0xc2072000},{0xc2074000},{0xc2076000},{0xc2078000},{0xc207a000},{0xc207c000},{0xc207e000}, -{0xc2080000},{0xc2082000},{0xc2084000},{0xc2086000},{0xc2088000},{0xc208a000},{0xc208c000},{0xc208e000},{0xc2090000},{0xc2092000},{0xc2094000},{0xc2096000},{0xc2098000},{0xc209a000},{0xc209c000},{0xc209e000},{0xc20a0000},{0xc20a2000},{0xc20a4000},{0xc20a6000},{0xc20a8000},{0xc20aa000},{0xc20ac000},{0xc20ae000},{0xc20b0000},{0xc20b2000},{0xc20b4000},{0xc20b6000},{0xc20b8000},{0xc20ba000},{0xc20bc000},{0xc20be000}, -{0xc20c0000},{0xc20c2000},{0xc20c4000},{0xc20c6000},{0xc20c8000},{0xc20ca000},{0xc20cc000},{0xc20ce000},{0xc20d0000},{0xc20d2000},{0xc20d4000},{0xc20d6000},{0xc20d8000},{0xc20da000},{0xc20dc000},{0xc20de000},{0xc20e0000},{0xc20e2000},{0xc20e4000},{0xc20e6000},{0xc20e8000},{0xc20ea000},{0xc20ec000},{0xc20ee000},{0xc20f0000},{0xc20f2000},{0xc20f4000},{0xc20f6000},{0xc20f8000},{0xc20fa000},{0xc20fc000},{0xc20fe000}, -{0xc2100000},{0xc2102000},{0xc2104000},{0xc2106000},{0xc2108000},{0xc210a000},{0xc210c000},{0xc210e000},{0xc2110000},{0xc2112000},{0xc2114000},{0xc2116000},{0xc2118000},{0xc211a000},{0xc211c000},{0xc211e000},{0xc2120000},{0xc2122000},{0xc2124000},{0xc2126000},{0xc2128000},{0xc212a000},{0xc212c000},{0xc212e000},{0xc2130000},{0xc2132000},{0xc2134000},{0xc2136000},{0xc2138000},{0xc213a000},{0xc213c000},{0xc213e000}, -{0xc2140000},{0xc2142000},{0xc2144000},{0xc2146000},{0xc2148000},{0xc214a000},{0xc214c000},{0xc214e000},{0xc2150000},{0xc2152000},{0xc2154000},{0xc2156000},{0xc2158000},{0xc215a000},{0xc215c000},{0xc215e000},{0xc2160000},{0xc2162000},{0xc2164000},{0xc2166000},{0xc2168000},{0xc216a000},{0xc216c000},{0xc216e000},{0xc2170000},{0xc2172000},{0xc2174000},{0xc2176000},{0xc2178000},{0xc217a000},{0xc217c000},{0xc217e000}, -{0xc2180000},{0xc2182000},{0xc2184000},{0xc2186000},{0xc2188000},{0xc218a000},{0xc218c000},{0xc218e000},{0xc2190000},{0xc2192000},{0xc2194000},{0xc2196000},{0xc2198000},{0xc219a000},{0xc219c000},{0xc219e000},{0xc21a0000},{0xc21a2000},{0xc21a4000},{0xc21a6000},{0xc21a8000},{0xc21aa000},{0xc21ac000},{0xc21ae000},{0xc21b0000},{0xc21b2000},{0xc21b4000},{0xc21b6000},{0xc21b8000},{0xc21ba000},{0xc21bc000},{0xc21be000}, -{0xc21c0000},{0xc21c2000},{0xc21c4000},{0xc21c6000},{0xc21c8000},{0xc21ca000},{0xc21cc000},{0xc21ce000},{0xc21d0000},{0xc21d2000},{0xc21d4000},{0xc21d6000},{0xc21d8000},{0xc21da000},{0xc21dc000},{0xc21de000},{0xc21e0000},{0xc21e2000},{0xc21e4000},{0xc21e6000},{0xc21e8000},{0xc21ea000},{0xc21ec000},{0xc21ee000},{0xc21f0000},{0xc21f2000},{0xc21f4000},{0xc21f6000},{0xc21f8000},{0xc21fa000},{0xc21fc000},{0xc21fe000}, -{0xc2200000},{0xc2202000},{0xc2204000},{0xc2206000},{0xc2208000},{0xc220a000},{0xc220c000},{0xc220e000},{0xc2210000},{0xc2212000},{0xc2214000},{0xc2216000},{0xc2218000},{0xc221a000},{0xc221c000},{0xc221e000},{0xc2220000},{0xc2222000},{0xc2224000},{0xc2226000},{0xc2228000},{0xc222a000},{0xc222c000},{0xc222e000},{0xc2230000},{0xc2232000},{0xc2234000},{0xc2236000},{0xc2238000},{0xc223a000},{0xc223c000},{0xc223e000}, -{0xc2240000},{0xc2242000},{0xc2244000},{0xc2246000},{0xc2248000},{0xc224a000},{0xc224c000},{0xc224e000},{0xc2250000},{0xc2252000},{0xc2254000},{0xc2256000},{0xc2258000},{0xc225a000},{0xc225c000},{0xc225e000},{0xc2260000},{0xc2262000},{0xc2264000},{0xc2266000},{0xc2268000},{0xc226a000},{0xc226c000},{0xc226e000},{0xc2270000},{0xc2272000},{0xc2274000},{0xc2276000},{0xc2278000},{0xc227a000},{0xc227c000},{0xc227e000}, -{0xc2280000},{0xc2282000},{0xc2284000},{0xc2286000},{0xc2288000},{0xc228a000},{0xc228c000},{0xc228e000},{0xc2290000},{0xc2292000},{0xc2294000},{0xc2296000},{0xc2298000},{0xc229a000},{0xc229c000},{0xc229e000},{0xc22a0000},{0xc22a2000},{0xc22a4000},{0xc22a6000},{0xc22a8000},{0xc22aa000},{0xc22ac000},{0xc22ae000},{0xc22b0000},{0xc22b2000},{0xc22b4000},{0xc22b6000},{0xc22b8000},{0xc22ba000},{0xc22bc000},{0xc22be000}, -{0xc22c0000},{0xc22c2000},{0xc22c4000},{0xc22c6000},{0xc22c8000},{0xc22ca000},{0xc22cc000},{0xc22ce000},{0xc22d0000},{0xc22d2000},{0xc22d4000},{0xc22d6000},{0xc22d8000},{0xc22da000},{0xc22dc000},{0xc22de000},{0xc22e0000},{0xc22e2000},{0xc22e4000},{0xc22e6000},{0xc22e8000},{0xc22ea000},{0xc22ec000},{0xc22ee000},{0xc22f0000},{0xc22f2000},{0xc22f4000},{0xc22f6000},{0xc22f8000},{0xc22fa000},{0xc22fc000},{0xc22fe000}, -{0xc2300000},{0xc2302000},{0xc2304000},{0xc2306000},{0xc2308000},{0xc230a000},{0xc230c000},{0xc230e000},{0xc2310000},{0xc2312000},{0xc2314000},{0xc2316000},{0xc2318000},{0xc231a000},{0xc231c000},{0xc231e000},{0xc2320000},{0xc2322000},{0xc2324000},{0xc2326000},{0xc2328000},{0xc232a000},{0xc232c000},{0xc232e000},{0xc2330000},{0xc2332000},{0xc2334000},{0xc2336000},{0xc2338000},{0xc233a000},{0xc233c000},{0xc233e000}, -{0xc2340000},{0xc2342000},{0xc2344000},{0xc2346000},{0xc2348000},{0xc234a000},{0xc234c000},{0xc234e000},{0xc2350000},{0xc2352000},{0xc2354000},{0xc2356000},{0xc2358000},{0xc235a000},{0xc235c000},{0xc235e000},{0xc2360000},{0xc2362000},{0xc2364000},{0xc2366000},{0xc2368000},{0xc236a000},{0xc236c000},{0xc236e000},{0xc2370000},{0xc2372000},{0xc2374000},{0xc2376000},{0xc2378000},{0xc237a000},{0xc237c000},{0xc237e000}, -{0xc2380000},{0xc2382000},{0xc2384000},{0xc2386000},{0xc2388000},{0xc238a000},{0xc238c000},{0xc238e000},{0xc2390000},{0xc2392000},{0xc2394000},{0xc2396000},{0xc2398000},{0xc239a000},{0xc239c000},{0xc239e000},{0xc23a0000},{0xc23a2000},{0xc23a4000},{0xc23a6000},{0xc23a8000},{0xc23aa000},{0xc23ac000},{0xc23ae000},{0xc23b0000},{0xc23b2000},{0xc23b4000},{0xc23b6000},{0xc23b8000},{0xc23ba000},{0xc23bc000},{0xc23be000}, -{0xc23c0000},{0xc23c2000},{0xc23c4000},{0xc23c6000},{0xc23c8000},{0xc23ca000},{0xc23cc000},{0xc23ce000},{0xc23d0000},{0xc23d2000},{0xc23d4000},{0xc23d6000},{0xc23d8000},{0xc23da000},{0xc23dc000},{0xc23de000},{0xc23e0000},{0xc23e2000},{0xc23e4000},{0xc23e6000},{0xc23e8000},{0xc23ea000},{0xc23ec000},{0xc23ee000},{0xc23f0000},{0xc23f2000},{0xc23f4000},{0xc23f6000},{0xc23f8000},{0xc23fa000},{0xc23fc000},{0xc23fe000}, -{0xc2400000},{0xc2402000},{0xc2404000},{0xc2406000},{0xc2408000},{0xc240a000},{0xc240c000},{0xc240e000},{0xc2410000},{0xc2412000},{0xc2414000},{0xc2416000},{0xc2418000},{0xc241a000},{0xc241c000},{0xc241e000},{0xc2420000},{0xc2422000},{0xc2424000},{0xc2426000},{0xc2428000},{0xc242a000},{0xc242c000},{0xc242e000},{0xc2430000},{0xc2432000},{0xc2434000},{0xc2436000},{0xc2438000},{0xc243a000},{0xc243c000},{0xc243e000}, -{0xc2440000},{0xc2442000},{0xc2444000},{0xc2446000},{0xc2448000},{0xc244a000},{0xc244c000},{0xc244e000},{0xc2450000},{0xc2452000},{0xc2454000},{0xc2456000},{0xc2458000},{0xc245a000},{0xc245c000},{0xc245e000},{0xc2460000},{0xc2462000},{0xc2464000},{0xc2466000},{0xc2468000},{0xc246a000},{0xc246c000},{0xc246e000},{0xc2470000},{0xc2472000},{0xc2474000},{0xc2476000},{0xc2478000},{0xc247a000},{0xc247c000},{0xc247e000}, -{0xc2480000},{0xc2482000},{0xc2484000},{0xc2486000},{0xc2488000},{0xc248a000},{0xc248c000},{0xc248e000},{0xc2490000},{0xc2492000},{0xc2494000},{0xc2496000},{0xc2498000},{0xc249a000},{0xc249c000},{0xc249e000},{0xc24a0000},{0xc24a2000},{0xc24a4000},{0xc24a6000},{0xc24a8000},{0xc24aa000},{0xc24ac000},{0xc24ae000},{0xc24b0000},{0xc24b2000},{0xc24b4000},{0xc24b6000},{0xc24b8000},{0xc24ba000},{0xc24bc000},{0xc24be000}, -{0xc24c0000},{0xc24c2000},{0xc24c4000},{0xc24c6000},{0xc24c8000},{0xc24ca000},{0xc24cc000},{0xc24ce000},{0xc24d0000},{0xc24d2000},{0xc24d4000},{0xc24d6000},{0xc24d8000},{0xc24da000},{0xc24dc000},{0xc24de000},{0xc24e0000},{0xc24e2000},{0xc24e4000},{0xc24e6000},{0xc24e8000},{0xc24ea000},{0xc24ec000},{0xc24ee000},{0xc24f0000},{0xc24f2000},{0xc24f4000},{0xc24f6000},{0xc24f8000},{0xc24fa000},{0xc24fc000},{0xc24fe000}, -{0xc2500000},{0xc2502000},{0xc2504000},{0xc2506000},{0xc2508000},{0xc250a000},{0xc250c000},{0xc250e000},{0xc2510000},{0xc2512000},{0xc2514000},{0xc2516000},{0xc2518000},{0xc251a000},{0xc251c000},{0xc251e000},{0xc2520000},{0xc2522000},{0xc2524000},{0xc2526000},{0xc2528000},{0xc252a000},{0xc252c000},{0xc252e000},{0xc2530000},{0xc2532000},{0xc2534000},{0xc2536000},{0xc2538000},{0xc253a000},{0xc253c000},{0xc253e000}, -{0xc2540000},{0xc2542000},{0xc2544000},{0xc2546000},{0xc2548000},{0xc254a000},{0xc254c000},{0xc254e000},{0xc2550000},{0xc2552000},{0xc2554000},{0xc2556000},{0xc2558000},{0xc255a000},{0xc255c000},{0xc255e000},{0xc2560000},{0xc2562000},{0xc2564000},{0xc2566000},{0xc2568000},{0xc256a000},{0xc256c000},{0xc256e000},{0xc2570000},{0xc2572000},{0xc2574000},{0xc2576000},{0xc2578000},{0xc257a000},{0xc257c000},{0xc257e000}, -{0xc2580000},{0xc2582000},{0xc2584000},{0xc2586000},{0xc2588000},{0xc258a000},{0xc258c000},{0xc258e000},{0xc2590000},{0xc2592000},{0xc2594000},{0xc2596000},{0xc2598000},{0xc259a000},{0xc259c000},{0xc259e000},{0xc25a0000},{0xc25a2000},{0xc25a4000},{0xc25a6000},{0xc25a8000},{0xc25aa000},{0xc25ac000},{0xc25ae000},{0xc25b0000},{0xc25b2000},{0xc25b4000},{0xc25b6000},{0xc25b8000},{0xc25ba000},{0xc25bc000},{0xc25be000}, -{0xc25c0000},{0xc25c2000},{0xc25c4000},{0xc25c6000},{0xc25c8000},{0xc25ca000},{0xc25cc000},{0xc25ce000},{0xc25d0000},{0xc25d2000},{0xc25d4000},{0xc25d6000},{0xc25d8000},{0xc25da000},{0xc25dc000},{0xc25de000},{0xc25e0000},{0xc25e2000},{0xc25e4000},{0xc25e6000},{0xc25e8000},{0xc25ea000},{0xc25ec000},{0xc25ee000},{0xc25f0000},{0xc25f2000},{0xc25f4000},{0xc25f6000},{0xc25f8000},{0xc25fa000},{0xc25fc000},{0xc25fe000}, -{0xc2600000},{0xc2602000},{0xc2604000},{0xc2606000},{0xc2608000},{0xc260a000},{0xc260c000},{0xc260e000},{0xc2610000},{0xc2612000},{0xc2614000},{0xc2616000},{0xc2618000},{0xc261a000},{0xc261c000},{0xc261e000},{0xc2620000},{0xc2622000},{0xc2624000},{0xc2626000},{0xc2628000},{0xc262a000},{0xc262c000},{0xc262e000},{0xc2630000},{0xc2632000},{0xc2634000},{0xc2636000},{0xc2638000},{0xc263a000},{0xc263c000},{0xc263e000}, -{0xc2640000},{0xc2642000},{0xc2644000},{0xc2646000},{0xc2648000},{0xc264a000},{0xc264c000},{0xc264e000},{0xc2650000},{0xc2652000},{0xc2654000},{0xc2656000},{0xc2658000},{0xc265a000},{0xc265c000},{0xc265e000},{0xc2660000},{0xc2662000},{0xc2664000},{0xc2666000},{0xc2668000},{0xc266a000},{0xc266c000},{0xc266e000},{0xc2670000},{0xc2672000},{0xc2674000},{0xc2676000},{0xc2678000},{0xc267a000},{0xc267c000},{0xc267e000}, -{0xc2680000},{0xc2682000},{0xc2684000},{0xc2686000},{0xc2688000},{0xc268a000},{0xc268c000},{0xc268e000},{0xc2690000},{0xc2692000},{0xc2694000},{0xc2696000},{0xc2698000},{0xc269a000},{0xc269c000},{0xc269e000},{0xc26a0000},{0xc26a2000},{0xc26a4000},{0xc26a6000},{0xc26a8000},{0xc26aa000},{0xc26ac000},{0xc26ae000},{0xc26b0000},{0xc26b2000},{0xc26b4000},{0xc26b6000},{0xc26b8000},{0xc26ba000},{0xc26bc000},{0xc26be000}, -{0xc26c0000},{0xc26c2000},{0xc26c4000},{0xc26c6000},{0xc26c8000},{0xc26ca000},{0xc26cc000},{0xc26ce000},{0xc26d0000},{0xc26d2000},{0xc26d4000},{0xc26d6000},{0xc26d8000},{0xc26da000},{0xc26dc000},{0xc26de000},{0xc26e0000},{0xc26e2000},{0xc26e4000},{0xc26e6000},{0xc26e8000},{0xc26ea000},{0xc26ec000},{0xc26ee000},{0xc26f0000},{0xc26f2000},{0xc26f4000},{0xc26f6000},{0xc26f8000},{0xc26fa000},{0xc26fc000},{0xc26fe000}, -{0xc2700000},{0xc2702000},{0xc2704000},{0xc2706000},{0xc2708000},{0xc270a000},{0xc270c000},{0xc270e000},{0xc2710000},{0xc2712000},{0xc2714000},{0xc2716000},{0xc2718000},{0xc271a000},{0xc271c000},{0xc271e000},{0xc2720000},{0xc2722000},{0xc2724000},{0xc2726000},{0xc2728000},{0xc272a000},{0xc272c000},{0xc272e000},{0xc2730000},{0xc2732000},{0xc2734000},{0xc2736000},{0xc2738000},{0xc273a000},{0xc273c000},{0xc273e000}, -{0xc2740000},{0xc2742000},{0xc2744000},{0xc2746000},{0xc2748000},{0xc274a000},{0xc274c000},{0xc274e000},{0xc2750000},{0xc2752000},{0xc2754000},{0xc2756000},{0xc2758000},{0xc275a000},{0xc275c000},{0xc275e000},{0xc2760000},{0xc2762000},{0xc2764000},{0xc2766000},{0xc2768000},{0xc276a000},{0xc276c000},{0xc276e000},{0xc2770000},{0xc2772000},{0xc2774000},{0xc2776000},{0xc2778000},{0xc277a000},{0xc277c000},{0xc277e000}, -{0xc2780000},{0xc2782000},{0xc2784000},{0xc2786000},{0xc2788000},{0xc278a000},{0xc278c000},{0xc278e000},{0xc2790000},{0xc2792000},{0xc2794000},{0xc2796000},{0xc2798000},{0xc279a000},{0xc279c000},{0xc279e000},{0xc27a0000},{0xc27a2000},{0xc27a4000},{0xc27a6000},{0xc27a8000},{0xc27aa000},{0xc27ac000},{0xc27ae000},{0xc27b0000},{0xc27b2000},{0xc27b4000},{0xc27b6000},{0xc27b8000},{0xc27ba000},{0xc27bc000},{0xc27be000}, -{0xc27c0000},{0xc27c2000},{0xc27c4000},{0xc27c6000},{0xc27c8000},{0xc27ca000},{0xc27cc000},{0xc27ce000},{0xc27d0000},{0xc27d2000},{0xc27d4000},{0xc27d6000},{0xc27d8000},{0xc27da000},{0xc27dc000},{0xc27de000},{0xc27e0000},{0xc27e2000},{0xc27e4000},{0xc27e6000},{0xc27e8000},{0xc27ea000},{0xc27ec000},{0xc27ee000},{0xc27f0000},{0xc27f2000},{0xc27f4000},{0xc27f6000},{0xc27f8000},{0xc27fa000},{0xc27fc000},{0xc27fe000}, -{0xc2800000},{0xc2802000},{0xc2804000},{0xc2806000},{0xc2808000},{0xc280a000},{0xc280c000},{0xc280e000},{0xc2810000},{0xc2812000},{0xc2814000},{0xc2816000},{0xc2818000},{0xc281a000},{0xc281c000},{0xc281e000},{0xc2820000},{0xc2822000},{0xc2824000},{0xc2826000},{0xc2828000},{0xc282a000},{0xc282c000},{0xc282e000},{0xc2830000},{0xc2832000},{0xc2834000},{0xc2836000},{0xc2838000},{0xc283a000},{0xc283c000},{0xc283e000}, -{0xc2840000},{0xc2842000},{0xc2844000},{0xc2846000},{0xc2848000},{0xc284a000},{0xc284c000},{0xc284e000},{0xc2850000},{0xc2852000},{0xc2854000},{0xc2856000},{0xc2858000},{0xc285a000},{0xc285c000},{0xc285e000},{0xc2860000},{0xc2862000},{0xc2864000},{0xc2866000},{0xc2868000},{0xc286a000},{0xc286c000},{0xc286e000},{0xc2870000},{0xc2872000},{0xc2874000},{0xc2876000},{0xc2878000},{0xc287a000},{0xc287c000},{0xc287e000}, -{0xc2880000},{0xc2882000},{0xc2884000},{0xc2886000},{0xc2888000},{0xc288a000},{0xc288c000},{0xc288e000},{0xc2890000},{0xc2892000},{0xc2894000},{0xc2896000},{0xc2898000},{0xc289a000},{0xc289c000},{0xc289e000},{0xc28a0000},{0xc28a2000},{0xc28a4000},{0xc28a6000},{0xc28a8000},{0xc28aa000},{0xc28ac000},{0xc28ae000},{0xc28b0000},{0xc28b2000},{0xc28b4000},{0xc28b6000},{0xc28b8000},{0xc28ba000},{0xc28bc000},{0xc28be000}, -{0xc28c0000},{0xc28c2000},{0xc28c4000},{0xc28c6000},{0xc28c8000},{0xc28ca000},{0xc28cc000},{0xc28ce000},{0xc28d0000},{0xc28d2000},{0xc28d4000},{0xc28d6000},{0xc28d8000},{0xc28da000},{0xc28dc000},{0xc28de000},{0xc28e0000},{0xc28e2000},{0xc28e4000},{0xc28e6000},{0xc28e8000},{0xc28ea000},{0xc28ec000},{0xc28ee000},{0xc28f0000},{0xc28f2000},{0xc28f4000},{0xc28f6000},{0xc28f8000},{0xc28fa000},{0xc28fc000},{0xc28fe000}, -{0xc2900000},{0xc2902000},{0xc2904000},{0xc2906000},{0xc2908000},{0xc290a000},{0xc290c000},{0xc290e000},{0xc2910000},{0xc2912000},{0xc2914000},{0xc2916000},{0xc2918000},{0xc291a000},{0xc291c000},{0xc291e000},{0xc2920000},{0xc2922000},{0xc2924000},{0xc2926000},{0xc2928000},{0xc292a000},{0xc292c000},{0xc292e000},{0xc2930000},{0xc2932000},{0xc2934000},{0xc2936000},{0xc2938000},{0xc293a000},{0xc293c000},{0xc293e000}, -{0xc2940000},{0xc2942000},{0xc2944000},{0xc2946000},{0xc2948000},{0xc294a000},{0xc294c000},{0xc294e000},{0xc2950000},{0xc2952000},{0xc2954000},{0xc2956000},{0xc2958000},{0xc295a000},{0xc295c000},{0xc295e000},{0xc2960000},{0xc2962000},{0xc2964000},{0xc2966000},{0xc2968000},{0xc296a000},{0xc296c000},{0xc296e000},{0xc2970000},{0xc2972000},{0xc2974000},{0xc2976000},{0xc2978000},{0xc297a000},{0xc297c000},{0xc297e000}, -{0xc2980000},{0xc2982000},{0xc2984000},{0xc2986000},{0xc2988000},{0xc298a000},{0xc298c000},{0xc298e000},{0xc2990000},{0xc2992000},{0xc2994000},{0xc2996000},{0xc2998000},{0xc299a000},{0xc299c000},{0xc299e000},{0xc29a0000},{0xc29a2000},{0xc29a4000},{0xc29a6000},{0xc29a8000},{0xc29aa000},{0xc29ac000},{0xc29ae000},{0xc29b0000},{0xc29b2000},{0xc29b4000},{0xc29b6000},{0xc29b8000},{0xc29ba000},{0xc29bc000},{0xc29be000}, -{0xc29c0000},{0xc29c2000},{0xc29c4000},{0xc29c6000},{0xc29c8000},{0xc29ca000},{0xc29cc000},{0xc29ce000},{0xc29d0000},{0xc29d2000},{0xc29d4000},{0xc29d6000},{0xc29d8000},{0xc29da000},{0xc29dc000},{0xc29de000},{0xc29e0000},{0xc29e2000},{0xc29e4000},{0xc29e6000},{0xc29e8000},{0xc29ea000},{0xc29ec000},{0xc29ee000},{0xc29f0000},{0xc29f2000},{0xc29f4000},{0xc29f6000},{0xc29f8000},{0xc29fa000},{0xc29fc000},{0xc29fe000}, -{0xc2a00000},{0xc2a02000},{0xc2a04000},{0xc2a06000},{0xc2a08000},{0xc2a0a000},{0xc2a0c000},{0xc2a0e000},{0xc2a10000},{0xc2a12000},{0xc2a14000},{0xc2a16000},{0xc2a18000},{0xc2a1a000},{0xc2a1c000},{0xc2a1e000},{0xc2a20000},{0xc2a22000},{0xc2a24000},{0xc2a26000},{0xc2a28000},{0xc2a2a000},{0xc2a2c000},{0xc2a2e000},{0xc2a30000},{0xc2a32000},{0xc2a34000},{0xc2a36000},{0xc2a38000},{0xc2a3a000},{0xc2a3c000},{0xc2a3e000}, -{0xc2a40000},{0xc2a42000},{0xc2a44000},{0xc2a46000},{0xc2a48000},{0xc2a4a000},{0xc2a4c000},{0xc2a4e000},{0xc2a50000},{0xc2a52000},{0xc2a54000},{0xc2a56000},{0xc2a58000},{0xc2a5a000},{0xc2a5c000},{0xc2a5e000},{0xc2a60000},{0xc2a62000},{0xc2a64000},{0xc2a66000},{0xc2a68000},{0xc2a6a000},{0xc2a6c000},{0xc2a6e000},{0xc2a70000},{0xc2a72000},{0xc2a74000},{0xc2a76000},{0xc2a78000},{0xc2a7a000},{0xc2a7c000},{0xc2a7e000}, -{0xc2a80000},{0xc2a82000},{0xc2a84000},{0xc2a86000},{0xc2a88000},{0xc2a8a000},{0xc2a8c000},{0xc2a8e000},{0xc2a90000},{0xc2a92000},{0xc2a94000},{0xc2a96000},{0xc2a98000},{0xc2a9a000},{0xc2a9c000},{0xc2a9e000},{0xc2aa0000},{0xc2aa2000},{0xc2aa4000},{0xc2aa6000},{0xc2aa8000},{0xc2aaa000},{0xc2aac000},{0xc2aae000},{0xc2ab0000},{0xc2ab2000},{0xc2ab4000},{0xc2ab6000},{0xc2ab8000},{0xc2aba000},{0xc2abc000},{0xc2abe000}, -{0xc2ac0000},{0xc2ac2000},{0xc2ac4000},{0xc2ac6000},{0xc2ac8000},{0xc2aca000},{0xc2acc000},{0xc2ace000},{0xc2ad0000},{0xc2ad2000},{0xc2ad4000},{0xc2ad6000},{0xc2ad8000},{0xc2ada000},{0xc2adc000},{0xc2ade000},{0xc2ae0000},{0xc2ae2000},{0xc2ae4000},{0xc2ae6000},{0xc2ae8000},{0xc2aea000},{0xc2aec000},{0xc2aee000},{0xc2af0000},{0xc2af2000},{0xc2af4000},{0xc2af6000},{0xc2af8000},{0xc2afa000},{0xc2afc000},{0xc2afe000}, -{0xc2b00000},{0xc2b02000},{0xc2b04000},{0xc2b06000},{0xc2b08000},{0xc2b0a000},{0xc2b0c000},{0xc2b0e000},{0xc2b10000},{0xc2b12000},{0xc2b14000},{0xc2b16000},{0xc2b18000},{0xc2b1a000},{0xc2b1c000},{0xc2b1e000},{0xc2b20000},{0xc2b22000},{0xc2b24000},{0xc2b26000},{0xc2b28000},{0xc2b2a000},{0xc2b2c000},{0xc2b2e000},{0xc2b30000},{0xc2b32000},{0xc2b34000},{0xc2b36000},{0xc2b38000},{0xc2b3a000},{0xc2b3c000},{0xc2b3e000}, -{0xc2b40000},{0xc2b42000},{0xc2b44000},{0xc2b46000},{0xc2b48000},{0xc2b4a000},{0xc2b4c000},{0xc2b4e000},{0xc2b50000},{0xc2b52000},{0xc2b54000},{0xc2b56000},{0xc2b58000},{0xc2b5a000},{0xc2b5c000},{0xc2b5e000},{0xc2b60000},{0xc2b62000},{0xc2b64000},{0xc2b66000},{0xc2b68000},{0xc2b6a000},{0xc2b6c000},{0xc2b6e000},{0xc2b70000},{0xc2b72000},{0xc2b74000},{0xc2b76000},{0xc2b78000},{0xc2b7a000},{0xc2b7c000},{0xc2b7e000}, -{0xc2b80000},{0xc2b82000},{0xc2b84000},{0xc2b86000},{0xc2b88000},{0xc2b8a000},{0xc2b8c000},{0xc2b8e000},{0xc2b90000},{0xc2b92000},{0xc2b94000},{0xc2b96000},{0xc2b98000},{0xc2b9a000},{0xc2b9c000},{0xc2b9e000},{0xc2ba0000},{0xc2ba2000},{0xc2ba4000},{0xc2ba6000},{0xc2ba8000},{0xc2baa000},{0xc2bac000},{0xc2bae000},{0xc2bb0000},{0xc2bb2000},{0xc2bb4000},{0xc2bb6000},{0xc2bb8000},{0xc2bba000},{0xc2bbc000},{0xc2bbe000}, -{0xc2bc0000},{0xc2bc2000},{0xc2bc4000},{0xc2bc6000},{0xc2bc8000},{0xc2bca000},{0xc2bcc000},{0xc2bce000},{0xc2bd0000},{0xc2bd2000},{0xc2bd4000},{0xc2bd6000},{0xc2bd8000},{0xc2bda000},{0xc2bdc000},{0xc2bde000},{0xc2be0000},{0xc2be2000},{0xc2be4000},{0xc2be6000},{0xc2be8000},{0xc2bea000},{0xc2bec000},{0xc2bee000},{0xc2bf0000},{0xc2bf2000},{0xc2bf4000},{0xc2bf6000},{0xc2bf8000},{0xc2bfa000},{0xc2bfc000},{0xc2bfe000}, -{0xc2c00000},{0xc2c02000},{0xc2c04000},{0xc2c06000},{0xc2c08000},{0xc2c0a000},{0xc2c0c000},{0xc2c0e000},{0xc2c10000},{0xc2c12000},{0xc2c14000},{0xc2c16000},{0xc2c18000},{0xc2c1a000},{0xc2c1c000},{0xc2c1e000},{0xc2c20000},{0xc2c22000},{0xc2c24000},{0xc2c26000},{0xc2c28000},{0xc2c2a000},{0xc2c2c000},{0xc2c2e000},{0xc2c30000},{0xc2c32000},{0xc2c34000},{0xc2c36000},{0xc2c38000},{0xc2c3a000},{0xc2c3c000},{0xc2c3e000}, -{0xc2c40000},{0xc2c42000},{0xc2c44000},{0xc2c46000},{0xc2c48000},{0xc2c4a000},{0xc2c4c000},{0xc2c4e000},{0xc2c50000},{0xc2c52000},{0xc2c54000},{0xc2c56000},{0xc2c58000},{0xc2c5a000},{0xc2c5c000},{0xc2c5e000},{0xc2c60000},{0xc2c62000},{0xc2c64000},{0xc2c66000},{0xc2c68000},{0xc2c6a000},{0xc2c6c000},{0xc2c6e000},{0xc2c70000},{0xc2c72000},{0xc2c74000},{0xc2c76000},{0xc2c78000},{0xc2c7a000},{0xc2c7c000},{0xc2c7e000}, -{0xc2c80000},{0xc2c82000},{0xc2c84000},{0xc2c86000},{0xc2c88000},{0xc2c8a000},{0xc2c8c000},{0xc2c8e000},{0xc2c90000},{0xc2c92000},{0xc2c94000},{0xc2c96000},{0xc2c98000},{0xc2c9a000},{0xc2c9c000},{0xc2c9e000},{0xc2ca0000},{0xc2ca2000},{0xc2ca4000},{0xc2ca6000},{0xc2ca8000},{0xc2caa000},{0xc2cac000},{0xc2cae000},{0xc2cb0000},{0xc2cb2000},{0xc2cb4000},{0xc2cb6000},{0xc2cb8000},{0xc2cba000},{0xc2cbc000},{0xc2cbe000}, -{0xc2cc0000},{0xc2cc2000},{0xc2cc4000},{0xc2cc6000},{0xc2cc8000},{0xc2cca000},{0xc2ccc000},{0xc2cce000},{0xc2cd0000},{0xc2cd2000},{0xc2cd4000},{0xc2cd6000},{0xc2cd8000},{0xc2cda000},{0xc2cdc000},{0xc2cde000},{0xc2ce0000},{0xc2ce2000},{0xc2ce4000},{0xc2ce6000},{0xc2ce8000},{0xc2cea000},{0xc2cec000},{0xc2cee000},{0xc2cf0000},{0xc2cf2000},{0xc2cf4000},{0xc2cf6000},{0xc2cf8000},{0xc2cfa000},{0xc2cfc000},{0xc2cfe000}, -{0xc2d00000},{0xc2d02000},{0xc2d04000},{0xc2d06000},{0xc2d08000},{0xc2d0a000},{0xc2d0c000},{0xc2d0e000},{0xc2d10000},{0xc2d12000},{0xc2d14000},{0xc2d16000},{0xc2d18000},{0xc2d1a000},{0xc2d1c000},{0xc2d1e000},{0xc2d20000},{0xc2d22000},{0xc2d24000},{0xc2d26000},{0xc2d28000},{0xc2d2a000},{0xc2d2c000},{0xc2d2e000},{0xc2d30000},{0xc2d32000},{0xc2d34000},{0xc2d36000},{0xc2d38000},{0xc2d3a000},{0xc2d3c000},{0xc2d3e000}, -{0xc2d40000},{0xc2d42000},{0xc2d44000},{0xc2d46000},{0xc2d48000},{0xc2d4a000},{0xc2d4c000},{0xc2d4e000},{0xc2d50000},{0xc2d52000},{0xc2d54000},{0xc2d56000},{0xc2d58000},{0xc2d5a000},{0xc2d5c000},{0xc2d5e000},{0xc2d60000},{0xc2d62000},{0xc2d64000},{0xc2d66000},{0xc2d68000},{0xc2d6a000},{0xc2d6c000},{0xc2d6e000},{0xc2d70000},{0xc2d72000},{0xc2d74000},{0xc2d76000},{0xc2d78000},{0xc2d7a000},{0xc2d7c000},{0xc2d7e000}, -{0xc2d80000},{0xc2d82000},{0xc2d84000},{0xc2d86000},{0xc2d88000},{0xc2d8a000},{0xc2d8c000},{0xc2d8e000},{0xc2d90000},{0xc2d92000},{0xc2d94000},{0xc2d96000},{0xc2d98000},{0xc2d9a000},{0xc2d9c000},{0xc2d9e000},{0xc2da0000},{0xc2da2000},{0xc2da4000},{0xc2da6000},{0xc2da8000},{0xc2daa000},{0xc2dac000},{0xc2dae000},{0xc2db0000},{0xc2db2000},{0xc2db4000},{0xc2db6000},{0xc2db8000},{0xc2dba000},{0xc2dbc000},{0xc2dbe000}, -{0xc2dc0000},{0xc2dc2000},{0xc2dc4000},{0xc2dc6000},{0xc2dc8000},{0xc2dca000},{0xc2dcc000},{0xc2dce000},{0xc2dd0000},{0xc2dd2000},{0xc2dd4000},{0xc2dd6000},{0xc2dd8000},{0xc2dda000},{0xc2ddc000},{0xc2dde000},{0xc2de0000},{0xc2de2000},{0xc2de4000},{0xc2de6000},{0xc2de8000},{0xc2dea000},{0xc2dec000},{0xc2dee000},{0xc2df0000},{0xc2df2000},{0xc2df4000},{0xc2df6000},{0xc2df8000},{0xc2dfa000},{0xc2dfc000},{0xc2dfe000}, -{0xc2e00000},{0xc2e02000},{0xc2e04000},{0xc2e06000},{0xc2e08000},{0xc2e0a000},{0xc2e0c000},{0xc2e0e000},{0xc2e10000},{0xc2e12000},{0xc2e14000},{0xc2e16000},{0xc2e18000},{0xc2e1a000},{0xc2e1c000},{0xc2e1e000},{0xc2e20000},{0xc2e22000},{0xc2e24000},{0xc2e26000},{0xc2e28000},{0xc2e2a000},{0xc2e2c000},{0xc2e2e000},{0xc2e30000},{0xc2e32000},{0xc2e34000},{0xc2e36000},{0xc2e38000},{0xc2e3a000},{0xc2e3c000},{0xc2e3e000}, -{0xc2e40000},{0xc2e42000},{0xc2e44000},{0xc2e46000},{0xc2e48000},{0xc2e4a000},{0xc2e4c000},{0xc2e4e000},{0xc2e50000},{0xc2e52000},{0xc2e54000},{0xc2e56000},{0xc2e58000},{0xc2e5a000},{0xc2e5c000},{0xc2e5e000},{0xc2e60000},{0xc2e62000},{0xc2e64000},{0xc2e66000},{0xc2e68000},{0xc2e6a000},{0xc2e6c000},{0xc2e6e000},{0xc2e70000},{0xc2e72000},{0xc2e74000},{0xc2e76000},{0xc2e78000},{0xc2e7a000},{0xc2e7c000},{0xc2e7e000}, -{0xc2e80000},{0xc2e82000},{0xc2e84000},{0xc2e86000},{0xc2e88000},{0xc2e8a000},{0xc2e8c000},{0xc2e8e000},{0xc2e90000},{0xc2e92000},{0xc2e94000},{0xc2e96000},{0xc2e98000},{0xc2e9a000},{0xc2e9c000},{0xc2e9e000},{0xc2ea0000},{0xc2ea2000},{0xc2ea4000},{0xc2ea6000},{0xc2ea8000},{0xc2eaa000},{0xc2eac000},{0xc2eae000},{0xc2eb0000},{0xc2eb2000},{0xc2eb4000},{0xc2eb6000},{0xc2eb8000},{0xc2eba000},{0xc2ebc000},{0xc2ebe000}, -{0xc2ec0000},{0xc2ec2000},{0xc2ec4000},{0xc2ec6000},{0xc2ec8000},{0xc2eca000},{0xc2ecc000},{0xc2ece000},{0xc2ed0000},{0xc2ed2000},{0xc2ed4000},{0xc2ed6000},{0xc2ed8000},{0xc2eda000},{0xc2edc000},{0xc2ede000},{0xc2ee0000},{0xc2ee2000},{0xc2ee4000},{0xc2ee6000},{0xc2ee8000},{0xc2eea000},{0xc2eec000},{0xc2eee000},{0xc2ef0000},{0xc2ef2000},{0xc2ef4000},{0xc2ef6000},{0xc2ef8000},{0xc2efa000},{0xc2efc000},{0xc2efe000}, -{0xc2f00000},{0xc2f02000},{0xc2f04000},{0xc2f06000},{0xc2f08000},{0xc2f0a000},{0xc2f0c000},{0xc2f0e000},{0xc2f10000},{0xc2f12000},{0xc2f14000},{0xc2f16000},{0xc2f18000},{0xc2f1a000},{0xc2f1c000},{0xc2f1e000},{0xc2f20000},{0xc2f22000},{0xc2f24000},{0xc2f26000},{0xc2f28000},{0xc2f2a000},{0xc2f2c000},{0xc2f2e000},{0xc2f30000},{0xc2f32000},{0xc2f34000},{0xc2f36000},{0xc2f38000},{0xc2f3a000},{0xc2f3c000},{0xc2f3e000}, -{0xc2f40000},{0xc2f42000},{0xc2f44000},{0xc2f46000},{0xc2f48000},{0xc2f4a000},{0xc2f4c000},{0xc2f4e000},{0xc2f50000},{0xc2f52000},{0xc2f54000},{0xc2f56000},{0xc2f58000},{0xc2f5a000},{0xc2f5c000},{0xc2f5e000},{0xc2f60000},{0xc2f62000},{0xc2f64000},{0xc2f66000},{0xc2f68000},{0xc2f6a000},{0xc2f6c000},{0xc2f6e000},{0xc2f70000},{0xc2f72000},{0xc2f74000},{0xc2f76000},{0xc2f78000},{0xc2f7a000},{0xc2f7c000},{0xc2f7e000}, -{0xc2f80000},{0xc2f82000},{0xc2f84000},{0xc2f86000},{0xc2f88000},{0xc2f8a000},{0xc2f8c000},{0xc2f8e000},{0xc2f90000},{0xc2f92000},{0xc2f94000},{0xc2f96000},{0xc2f98000},{0xc2f9a000},{0xc2f9c000},{0xc2f9e000},{0xc2fa0000},{0xc2fa2000},{0xc2fa4000},{0xc2fa6000},{0xc2fa8000},{0xc2faa000},{0xc2fac000},{0xc2fae000},{0xc2fb0000},{0xc2fb2000},{0xc2fb4000},{0xc2fb6000},{0xc2fb8000},{0xc2fba000},{0xc2fbc000},{0xc2fbe000}, -{0xc2fc0000},{0xc2fc2000},{0xc2fc4000},{0xc2fc6000},{0xc2fc8000},{0xc2fca000},{0xc2fcc000},{0xc2fce000},{0xc2fd0000},{0xc2fd2000},{0xc2fd4000},{0xc2fd6000},{0xc2fd8000},{0xc2fda000},{0xc2fdc000},{0xc2fde000},{0xc2fe0000},{0xc2fe2000},{0xc2fe4000},{0xc2fe6000},{0xc2fe8000},{0xc2fea000},{0xc2fec000},{0xc2fee000},{0xc2ff0000},{0xc2ff2000},{0xc2ff4000},{0xc2ff6000},{0xc2ff8000},{0xc2ffa000},{0xc2ffc000},{0xc2ffe000}, -{0xc3000000},{0xc3002000},{0xc3004000},{0xc3006000},{0xc3008000},{0xc300a000},{0xc300c000},{0xc300e000},{0xc3010000},{0xc3012000},{0xc3014000},{0xc3016000},{0xc3018000},{0xc301a000},{0xc301c000},{0xc301e000},{0xc3020000},{0xc3022000},{0xc3024000},{0xc3026000},{0xc3028000},{0xc302a000},{0xc302c000},{0xc302e000},{0xc3030000},{0xc3032000},{0xc3034000},{0xc3036000},{0xc3038000},{0xc303a000},{0xc303c000},{0xc303e000}, -{0xc3040000},{0xc3042000},{0xc3044000},{0xc3046000},{0xc3048000},{0xc304a000},{0xc304c000},{0xc304e000},{0xc3050000},{0xc3052000},{0xc3054000},{0xc3056000},{0xc3058000},{0xc305a000},{0xc305c000},{0xc305e000},{0xc3060000},{0xc3062000},{0xc3064000},{0xc3066000},{0xc3068000},{0xc306a000},{0xc306c000},{0xc306e000},{0xc3070000},{0xc3072000},{0xc3074000},{0xc3076000},{0xc3078000},{0xc307a000},{0xc307c000},{0xc307e000}, -{0xc3080000},{0xc3082000},{0xc3084000},{0xc3086000},{0xc3088000},{0xc308a000},{0xc308c000},{0xc308e000},{0xc3090000},{0xc3092000},{0xc3094000},{0xc3096000},{0xc3098000},{0xc309a000},{0xc309c000},{0xc309e000},{0xc30a0000},{0xc30a2000},{0xc30a4000},{0xc30a6000},{0xc30a8000},{0xc30aa000},{0xc30ac000},{0xc30ae000},{0xc30b0000},{0xc30b2000},{0xc30b4000},{0xc30b6000},{0xc30b8000},{0xc30ba000},{0xc30bc000},{0xc30be000}, -{0xc30c0000},{0xc30c2000},{0xc30c4000},{0xc30c6000},{0xc30c8000},{0xc30ca000},{0xc30cc000},{0xc30ce000},{0xc30d0000},{0xc30d2000},{0xc30d4000},{0xc30d6000},{0xc30d8000},{0xc30da000},{0xc30dc000},{0xc30de000},{0xc30e0000},{0xc30e2000},{0xc30e4000},{0xc30e6000},{0xc30e8000},{0xc30ea000},{0xc30ec000},{0xc30ee000},{0xc30f0000},{0xc30f2000},{0xc30f4000},{0xc30f6000},{0xc30f8000},{0xc30fa000},{0xc30fc000},{0xc30fe000}, -{0xc3100000},{0xc3102000},{0xc3104000},{0xc3106000},{0xc3108000},{0xc310a000},{0xc310c000},{0xc310e000},{0xc3110000},{0xc3112000},{0xc3114000},{0xc3116000},{0xc3118000},{0xc311a000},{0xc311c000},{0xc311e000},{0xc3120000},{0xc3122000},{0xc3124000},{0xc3126000},{0xc3128000},{0xc312a000},{0xc312c000},{0xc312e000},{0xc3130000},{0xc3132000},{0xc3134000},{0xc3136000},{0xc3138000},{0xc313a000},{0xc313c000},{0xc313e000}, -{0xc3140000},{0xc3142000},{0xc3144000},{0xc3146000},{0xc3148000},{0xc314a000},{0xc314c000},{0xc314e000},{0xc3150000},{0xc3152000},{0xc3154000},{0xc3156000},{0xc3158000},{0xc315a000},{0xc315c000},{0xc315e000},{0xc3160000},{0xc3162000},{0xc3164000},{0xc3166000},{0xc3168000},{0xc316a000},{0xc316c000},{0xc316e000},{0xc3170000},{0xc3172000},{0xc3174000},{0xc3176000},{0xc3178000},{0xc317a000},{0xc317c000},{0xc317e000}, -{0xc3180000},{0xc3182000},{0xc3184000},{0xc3186000},{0xc3188000},{0xc318a000},{0xc318c000},{0xc318e000},{0xc3190000},{0xc3192000},{0xc3194000},{0xc3196000},{0xc3198000},{0xc319a000},{0xc319c000},{0xc319e000},{0xc31a0000},{0xc31a2000},{0xc31a4000},{0xc31a6000},{0xc31a8000},{0xc31aa000},{0xc31ac000},{0xc31ae000},{0xc31b0000},{0xc31b2000},{0xc31b4000},{0xc31b6000},{0xc31b8000},{0xc31ba000},{0xc31bc000},{0xc31be000}, -{0xc31c0000},{0xc31c2000},{0xc31c4000},{0xc31c6000},{0xc31c8000},{0xc31ca000},{0xc31cc000},{0xc31ce000},{0xc31d0000},{0xc31d2000},{0xc31d4000},{0xc31d6000},{0xc31d8000},{0xc31da000},{0xc31dc000},{0xc31de000},{0xc31e0000},{0xc31e2000},{0xc31e4000},{0xc31e6000},{0xc31e8000},{0xc31ea000},{0xc31ec000},{0xc31ee000},{0xc31f0000},{0xc31f2000},{0xc31f4000},{0xc31f6000},{0xc31f8000},{0xc31fa000},{0xc31fc000},{0xc31fe000}, -{0xc3200000},{0xc3202000},{0xc3204000},{0xc3206000},{0xc3208000},{0xc320a000},{0xc320c000},{0xc320e000},{0xc3210000},{0xc3212000},{0xc3214000},{0xc3216000},{0xc3218000},{0xc321a000},{0xc321c000},{0xc321e000},{0xc3220000},{0xc3222000},{0xc3224000},{0xc3226000},{0xc3228000},{0xc322a000},{0xc322c000},{0xc322e000},{0xc3230000},{0xc3232000},{0xc3234000},{0xc3236000},{0xc3238000},{0xc323a000},{0xc323c000},{0xc323e000}, -{0xc3240000},{0xc3242000},{0xc3244000},{0xc3246000},{0xc3248000},{0xc324a000},{0xc324c000},{0xc324e000},{0xc3250000},{0xc3252000},{0xc3254000},{0xc3256000},{0xc3258000},{0xc325a000},{0xc325c000},{0xc325e000},{0xc3260000},{0xc3262000},{0xc3264000},{0xc3266000},{0xc3268000},{0xc326a000},{0xc326c000},{0xc326e000},{0xc3270000},{0xc3272000},{0xc3274000},{0xc3276000},{0xc3278000},{0xc327a000},{0xc327c000},{0xc327e000}, -{0xc3280000},{0xc3282000},{0xc3284000},{0xc3286000},{0xc3288000},{0xc328a000},{0xc328c000},{0xc328e000},{0xc3290000},{0xc3292000},{0xc3294000},{0xc3296000},{0xc3298000},{0xc329a000},{0xc329c000},{0xc329e000},{0xc32a0000},{0xc32a2000},{0xc32a4000},{0xc32a6000},{0xc32a8000},{0xc32aa000},{0xc32ac000},{0xc32ae000},{0xc32b0000},{0xc32b2000},{0xc32b4000},{0xc32b6000},{0xc32b8000},{0xc32ba000},{0xc32bc000},{0xc32be000}, -{0xc32c0000},{0xc32c2000},{0xc32c4000},{0xc32c6000},{0xc32c8000},{0xc32ca000},{0xc32cc000},{0xc32ce000},{0xc32d0000},{0xc32d2000},{0xc32d4000},{0xc32d6000},{0xc32d8000},{0xc32da000},{0xc32dc000},{0xc32de000},{0xc32e0000},{0xc32e2000},{0xc32e4000},{0xc32e6000},{0xc32e8000},{0xc32ea000},{0xc32ec000},{0xc32ee000},{0xc32f0000},{0xc32f2000},{0xc32f4000},{0xc32f6000},{0xc32f8000},{0xc32fa000},{0xc32fc000},{0xc32fe000}, -{0xc3300000},{0xc3302000},{0xc3304000},{0xc3306000},{0xc3308000},{0xc330a000},{0xc330c000},{0xc330e000},{0xc3310000},{0xc3312000},{0xc3314000},{0xc3316000},{0xc3318000},{0xc331a000},{0xc331c000},{0xc331e000},{0xc3320000},{0xc3322000},{0xc3324000},{0xc3326000},{0xc3328000},{0xc332a000},{0xc332c000},{0xc332e000},{0xc3330000},{0xc3332000},{0xc3334000},{0xc3336000},{0xc3338000},{0xc333a000},{0xc333c000},{0xc333e000}, -{0xc3340000},{0xc3342000},{0xc3344000},{0xc3346000},{0xc3348000},{0xc334a000},{0xc334c000},{0xc334e000},{0xc3350000},{0xc3352000},{0xc3354000},{0xc3356000},{0xc3358000},{0xc335a000},{0xc335c000},{0xc335e000},{0xc3360000},{0xc3362000},{0xc3364000},{0xc3366000},{0xc3368000},{0xc336a000},{0xc336c000},{0xc336e000},{0xc3370000},{0xc3372000},{0xc3374000},{0xc3376000},{0xc3378000},{0xc337a000},{0xc337c000},{0xc337e000}, -{0xc3380000},{0xc3382000},{0xc3384000},{0xc3386000},{0xc3388000},{0xc338a000},{0xc338c000},{0xc338e000},{0xc3390000},{0xc3392000},{0xc3394000},{0xc3396000},{0xc3398000},{0xc339a000},{0xc339c000},{0xc339e000},{0xc33a0000},{0xc33a2000},{0xc33a4000},{0xc33a6000},{0xc33a8000},{0xc33aa000},{0xc33ac000},{0xc33ae000},{0xc33b0000},{0xc33b2000},{0xc33b4000},{0xc33b6000},{0xc33b8000},{0xc33ba000},{0xc33bc000},{0xc33be000}, -{0xc33c0000},{0xc33c2000},{0xc33c4000},{0xc33c6000},{0xc33c8000},{0xc33ca000},{0xc33cc000},{0xc33ce000},{0xc33d0000},{0xc33d2000},{0xc33d4000},{0xc33d6000},{0xc33d8000},{0xc33da000},{0xc33dc000},{0xc33de000},{0xc33e0000},{0xc33e2000},{0xc33e4000},{0xc33e6000},{0xc33e8000},{0xc33ea000},{0xc33ec000},{0xc33ee000},{0xc33f0000},{0xc33f2000},{0xc33f4000},{0xc33f6000},{0xc33f8000},{0xc33fa000},{0xc33fc000},{0xc33fe000}, -{0xc3400000},{0xc3402000},{0xc3404000},{0xc3406000},{0xc3408000},{0xc340a000},{0xc340c000},{0xc340e000},{0xc3410000},{0xc3412000},{0xc3414000},{0xc3416000},{0xc3418000},{0xc341a000},{0xc341c000},{0xc341e000},{0xc3420000},{0xc3422000},{0xc3424000},{0xc3426000},{0xc3428000},{0xc342a000},{0xc342c000},{0xc342e000},{0xc3430000},{0xc3432000},{0xc3434000},{0xc3436000},{0xc3438000},{0xc343a000},{0xc343c000},{0xc343e000}, -{0xc3440000},{0xc3442000},{0xc3444000},{0xc3446000},{0xc3448000},{0xc344a000},{0xc344c000},{0xc344e000},{0xc3450000},{0xc3452000},{0xc3454000},{0xc3456000},{0xc3458000},{0xc345a000},{0xc345c000},{0xc345e000},{0xc3460000},{0xc3462000},{0xc3464000},{0xc3466000},{0xc3468000},{0xc346a000},{0xc346c000},{0xc346e000},{0xc3470000},{0xc3472000},{0xc3474000},{0xc3476000},{0xc3478000},{0xc347a000},{0xc347c000},{0xc347e000}, -{0xc3480000},{0xc3482000},{0xc3484000},{0xc3486000},{0xc3488000},{0xc348a000},{0xc348c000},{0xc348e000},{0xc3490000},{0xc3492000},{0xc3494000},{0xc3496000},{0xc3498000},{0xc349a000},{0xc349c000},{0xc349e000},{0xc34a0000},{0xc34a2000},{0xc34a4000},{0xc34a6000},{0xc34a8000},{0xc34aa000},{0xc34ac000},{0xc34ae000},{0xc34b0000},{0xc34b2000},{0xc34b4000},{0xc34b6000},{0xc34b8000},{0xc34ba000},{0xc34bc000},{0xc34be000}, -{0xc34c0000},{0xc34c2000},{0xc34c4000},{0xc34c6000},{0xc34c8000},{0xc34ca000},{0xc34cc000},{0xc34ce000},{0xc34d0000},{0xc34d2000},{0xc34d4000},{0xc34d6000},{0xc34d8000},{0xc34da000},{0xc34dc000},{0xc34de000},{0xc34e0000},{0xc34e2000},{0xc34e4000},{0xc34e6000},{0xc34e8000},{0xc34ea000},{0xc34ec000},{0xc34ee000},{0xc34f0000},{0xc34f2000},{0xc34f4000},{0xc34f6000},{0xc34f8000},{0xc34fa000},{0xc34fc000},{0xc34fe000}, -{0xc3500000},{0xc3502000},{0xc3504000},{0xc3506000},{0xc3508000},{0xc350a000},{0xc350c000},{0xc350e000},{0xc3510000},{0xc3512000},{0xc3514000},{0xc3516000},{0xc3518000},{0xc351a000},{0xc351c000},{0xc351e000},{0xc3520000},{0xc3522000},{0xc3524000},{0xc3526000},{0xc3528000},{0xc352a000},{0xc352c000},{0xc352e000},{0xc3530000},{0xc3532000},{0xc3534000},{0xc3536000},{0xc3538000},{0xc353a000},{0xc353c000},{0xc353e000}, -{0xc3540000},{0xc3542000},{0xc3544000},{0xc3546000},{0xc3548000},{0xc354a000},{0xc354c000},{0xc354e000},{0xc3550000},{0xc3552000},{0xc3554000},{0xc3556000},{0xc3558000},{0xc355a000},{0xc355c000},{0xc355e000},{0xc3560000},{0xc3562000},{0xc3564000},{0xc3566000},{0xc3568000},{0xc356a000},{0xc356c000},{0xc356e000},{0xc3570000},{0xc3572000},{0xc3574000},{0xc3576000},{0xc3578000},{0xc357a000},{0xc357c000},{0xc357e000}, -{0xc3580000},{0xc3582000},{0xc3584000},{0xc3586000},{0xc3588000},{0xc358a000},{0xc358c000},{0xc358e000},{0xc3590000},{0xc3592000},{0xc3594000},{0xc3596000},{0xc3598000},{0xc359a000},{0xc359c000},{0xc359e000},{0xc35a0000},{0xc35a2000},{0xc35a4000},{0xc35a6000},{0xc35a8000},{0xc35aa000},{0xc35ac000},{0xc35ae000},{0xc35b0000},{0xc35b2000},{0xc35b4000},{0xc35b6000},{0xc35b8000},{0xc35ba000},{0xc35bc000},{0xc35be000}, -{0xc35c0000},{0xc35c2000},{0xc35c4000},{0xc35c6000},{0xc35c8000},{0xc35ca000},{0xc35cc000},{0xc35ce000},{0xc35d0000},{0xc35d2000},{0xc35d4000},{0xc35d6000},{0xc35d8000},{0xc35da000},{0xc35dc000},{0xc35de000},{0xc35e0000},{0xc35e2000},{0xc35e4000},{0xc35e6000},{0xc35e8000},{0xc35ea000},{0xc35ec000},{0xc35ee000},{0xc35f0000},{0xc35f2000},{0xc35f4000},{0xc35f6000},{0xc35f8000},{0xc35fa000},{0xc35fc000},{0xc35fe000}, -{0xc3600000},{0xc3602000},{0xc3604000},{0xc3606000},{0xc3608000},{0xc360a000},{0xc360c000},{0xc360e000},{0xc3610000},{0xc3612000},{0xc3614000},{0xc3616000},{0xc3618000},{0xc361a000},{0xc361c000},{0xc361e000},{0xc3620000},{0xc3622000},{0xc3624000},{0xc3626000},{0xc3628000},{0xc362a000},{0xc362c000},{0xc362e000},{0xc3630000},{0xc3632000},{0xc3634000},{0xc3636000},{0xc3638000},{0xc363a000},{0xc363c000},{0xc363e000}, -{0xc3640000},{0xc3642000},{0xc3644000},{0xc3646000},{0xc3648000},{0xc364a000},{0xc364c000},{0xc364e000},{0xc3650000},{0xc3652000},{0xc3654000},{0xc3656000},{0xc3658000},{0xc365a000},{0xc365c000},{0xc365e000},{0xc3660000},{0xc3662000},{0xc3664000},{0xc3666000},{0xc3668000},{0xc366a000},{0xc366c000},{0xc366e000},{0xc3670000},{0xc3672000},{0xc3674000},{0xc3676000},{0xc3678000},{0xc367a000},{0xc367c000},{0xc367e000}, -{0xc3680000},{0xc3682000},{0xc3684000},{0xc3686000},{0xc3688000},{0xc368a000},{0xc368c000},{0xc368e000},{0xc3690000},{0xc3692000},{0xc3694000},{0xc3696000},{0xc3698000},{0xc369a000},{0xc369c000},{0xc369e000},{0xc36a0000},{0xc36a2000},{0xc36a4000},{0xc36a6000},{0xc36a8000},{0xc36aa000},{0xc36ac000},{0xc36ae000},{0xc36b0000},{0xc36b2000},{0xc36b4000},{0xc36b6000},{0xc36b8000},{0xc36ba000},{0xc36bc000},{0xc36be000}, -{0xc36c0000},{0xc36c2000},{0xc36c4000},{0xc36c6000},{0xc36c8000},{0xc36ca000},{0xc36cc000},{0xc36ce000},{0xc36d0000},{0xc36d2000},{0xc36d4000},{0xc36d6000},{0xc36d8000},{0xc36da000},{0xc36dc000},{0xc36de000},{0xc36e0000},{0xc36e2000},{0xc36e4000},{0xc36e6000},{0xc36e8000},{0xc36ea000},{0xc36ec000},{0xc36ee000},{0xc36f0000},{0xc36f2000},{0xc36f4000},{0xc36f6000},{0xc36f8000},{0xc36fa000},{0xc36fc000},{0xc36fe000}, -{0xc3700000},{0xc3702000},{0xc3704000},{0xc3706000},{0xc3708000},{0xc370a000},{0xc370c000},{0xc370e000},{0xc3710000},{0xc3712000},{0xc3714000},{0xc3716000},{0xc3718000},{0xc371a000},{0xc371c000},{0xc371e000},{0xc3720000},{0xc3722000},{0xc3724000},{0xc3726000},{0xc3728000},{0xc372a000},{0xc372c000},{0xc372e000},{0xc3730000},{0xc3732000},{0xc3734000},{0xc3736000},{0xc3738000},{0xc373a000},{0xc373c000},{0xc373e000}, -{0xc3740000},{0xc3742000},{0xc3744000},{0xc3746000},{0xc3748000},{0xc374a000},{0xc374c000},{0xc374e000},{0xc3750000},{0xc3752000},{0xc3754000},{0xc3756000},{0xc3758000},{0xc375a000},{0xc375c000},{0xc375e000},{0xc3760000},{0xc3762000},{0xc3764000},{0xc3766000},{0xc3768000},{0xc376a000},{0xc376c000},{0xc376e000},{0xc3770000},{0xc3772000},{0xc3774000},{0xc3776000},{0xc3778000},{0xc377a000},{0xc377c000},{0xc377e000}, -{0xc3780000},{0xc3782000},{0xc3784000},{0xc3786000},{0xc3788000},{0xc378a000},{0xc378c000},{0xc378e000},{0xc3790000},{0xc3792000},{0xc3794000},{0xc3796000},{0xc3798000},{0xc379a000},{0xc379c000},{0xc379e000},{0xc37a0000},{0xc37a2000},{0xc37a4000},{0xc37a6000},{0xc37a8000},{0xc37aa000},{0xc37ac000},{0xc37ae000},{0xc37b0000},{0xc37b2000},{0xc37b4000},{0xc37b6000},{0xc37b8000},{0xc37ba000},{0xc37bc000},{0xc37be000}, -{0xc37c0000},{0xc37c2000},{0xc37c4000},{0xc37c6000},{0xc37c8000},{0xc37ca000},{0xc37cc000},{0xc37ce000},{0xc37d0000},{0xc37d2000},{0xc37d4000},{0xc37d6000},{0xc37d8000},{0xc37da000},{0xc37dc000},{0xc37de000},{0xc37e0000},{0xc37e2000},{0xc37e4000},{0xc37e6000},{0xc37e8000},{0xc37ea000},{0xc37ec000},{0xc37ee000},{0xc37f0000},{0xc37f2000},{0xc37f4000},{0xc37f6000},{0xc37f8000},{0xc37fa000},{0xc37fc000},{0xc37fe000}, -{0xc3800000},{0xc3802000},{0xc3804000},{0xc3806000},{0xc3808000},{0xc380a000},{0xc380c000},{0xc380e000},{0xc3810000},{0xc3812000},{0xc3814000},{0xc3816000},{0xc3818000},{0xc381a000},{0xc381c000},{0xc381e000},{0xc3820000},{0xc3822000},{0xc3824000},{0xc3826000},{0xc3828000},{0xc382a000},{0xc382c000},{0xc382e000},{0xc3830000},{0xc3832000},{0xc3834000},{0xc3836000},{0xc3838000},{0xc383a000},{0xc383c000},{0xc383e000}, -{0xc3840000},{0xc3842000},{0xc3844000},{0xc3846000},{0xc3848000},{0xc384a000},{0xc384c000},{0xc384e000},{0xc3850000},{0xc3852000},{0xc3854000},{0xc3856000},{0xc3858000},{0xc385a000},{0xc385c000},{0xc385e000},{0xc3860000},{0xc3862000},{0xc3864000},{0xc3866000},{0xc3868000},{0xc386a000},{0xc386c000},{0xc386e000},{0xc3870000},{0xc3872000},{0xc3874000},{0xc3876000},{0xc3878000},{0xc387a000},{0xc387c000},{0xc387e000}, -{0xc3880000},{0xc3882000},{0xc3884000},{0xc3886000},{0xc3888000},{0xc388a000},{0xc388c000},{0xc388e000},{0xc3890000},{0xc3892000},{0xc3894000},{0xc3896000},{0xc3898000},{0xc389a000},{0xc389c000},{0xc389e000},{0xc38a0000},{0xc38a2000},{0xc38a4000},{0xc38a6000},{0xc38a8000},{0xc38aa000},{0xc38ac000},{0xc38ae000},{0xc38b0000},{0xc38b2000},{0xc38b4000},{0xc38b6000},{0xc38b8000},{0xc38ba000},{0xc38bc000},{0xc38be000}, -{0xc38c0000},{0xc38c2000},{0xc38c4000},{0xc38c6000},{0xc38c8000},{0xc38ca000},{0xc38cc000},{0xc38ce000},{0xc38d0000},{0xc38d2000},{0xc38d4000},{0xc38d6000},{0xc38d8000},{0xc38da000},{0xc38dc000},{0xc38de000},{0xc38e0000},{0xc38e2000},{0xc38e4000},{0xc38e6000},{0xc38e8000},{0xc38ea000},{0xc38ec000},{0xc38ee000},{0xc38f0000},{0xc38f2000},{0xc38f4000},{0xc38f6000},{0xc38f8000},{0xc38fa000},{0xc38fc000},{0xc38fe000}, -{0xc3900000},{0xc3902000},{0xc3904000},{0xc3906000},{0xc3908000},{0xc390a000},{0xc390c000},{0xc390e000},{0xc3910000},{0xc3912000},{0xc3914000},{0xc3916000},{0xc3918000},{0xc391a000},{0xc391c000},{0xc391e000},{0xc3920000},{0xc3922000},{0xc3924000},{0xc3926000},{0xc3928000},{0xc392a000},{0xc392c000},{0xc392e000},{0xc3930000},{0xc3932000},{0xc3934000},{0xc3936000},{0xc3938000},{0xc393a000},{0xc393c000},{0xc393e000}, -{0xc3940000},{0xc3942000},{0xc3944000},{0xc3946000},{0xc3948000},{0xc394a000},{0xc394c000},{0xc394e000},{0xc3950000},{0xc3952000},{0xc3954000},{0xc3956000},{0xc3958000},{0xc395a000},{0xc395c000},{0xc395e000},{0xc3960000},{0xc3962000},{0xc3964000},{0xc3966000},{0xc3968000},{0xc396a000},{0xc396c000},{0xc396e000},{0xc3970000},{0xc3972000},{0xc3974000},{0xc3976000},{0xc3978000},{0xc397a000},{0xc397c000},{0xc397e000}, -{0xc3980000},{0xc3982000},{0xc3984000},{0xc3986000},{0xc3988000},{0xc398a000},{0xc398c000},{0xc398e000},{0xc3990000},{0xc3992000},{0xc3994000},{0xc3996000},{0xc3998000},{0xc399a000},{0xc399c000},{0xc399e000},{0xc39a0000},{0xc39a2000},{0xc39a4000},{0xc39a6000},{0xc39a8000},{0xc39aa000},{0xc39ac000},{0xc39ae000},{0xc39b0000},{0xc39b2000},{0xc39b4000},{0xc39b6000},{0xc39b8000},{0xc39ba000},{0xc39bc000},{0xc39be000}, -{0xc39c0000},{0xc39c2000},{0xc39c4000},{0xc39c6000},{0xc39c8000},{0xc39ca000},{0xc39cc000},{0xc39ce000},{0xc39d0000},{0xc39d2000},{0xc39d4000},{0xc39d6000},{0xc39d8000},{0xc39da000},{0xc39dc000},{0xc39de000},{0xc39e0000},{0xc39e2000},{0xc39e4000},{0xc39e6000},{0xc39e8000},{0xc39ea000},{0xc39ec000},{0xc39ee000},{0xc39f0000},{0xc39f2000},{0xc39f4000},{0xc39f6000},{0xc39f8000},{0xc39fa000},{0xc39fc000},{0xc39fe000}, -{0xc3a00000},{0xc3a02000},{0xc3a04000},{0xc3a06000},{0xc3a08000},{0xc3a0a000},{0xc3a0c000},{0xc3a0e000},{0xc3a10000},{0xc3a12000},{0xc3a14000},{0xc3a16000},{0xc3a18000},{0xc3a1a000},{0xc3a1c000},{0xc3a1e000},{0xc3a20000},{0xc3a22000},{0xc3a24000},{0xc3a26000},{0xc3a28000},{0xc3a2a000},{0xc3a2c000},{0xc3a2e000},{0xc3a30000},{0xc3a32000},{0xc3a34000},{0xc3a36000},{0xc3a38000},{0xc3a3a000},{0xc3a3c000},{0xc3a3e000}, -{0xc3a40000},{0xc3a42000},{0xc3a44000},{0xc3a46000},{0xc3a48000},{0xc3a4a000},{0xc3a4c000},{0xc3a4e000},{0xc3a50000},{0xc3a52000},{0xc3a54000},{0xc3a56000},{0xc3a58000},{0xc3a5a000},{0xc3a5c000},{0xc3a5e000},{0xc3a60000},{0xc3a62000},{0xc3a64000},{0xc3a66000},{0xc3a68000},{0xc3a6a000},{0xc3a6c000},{0xc3a6e000},{0xc3a70000},{0xc3a72000},{0xc3a74000},{0xc3a76000},{0xc3a78000},{0xc3a7a000},{0xc3a7c000},{0xc3a7e000}, -{0xc3a80000},{0xc3a82000},{0xc3a84000},{0xc3a86000},{0xc3a88000},{0xc3a8a000},{0xc3a8c000},{0xc3a8e000},{0xc3a90000},{0xc3a92000},{0xc3a94000},{0xc3a96000},{0xc3a98000},{0xc3a9a000},{0xc3a9c000},{0xc3a9e000},{0xc3aa0000},{0xc3aa2000},{0xc3aa4000},{0xc3aa6000},{0xc3aa8000},{0xc3aaa000},{0xc3aac000},{0xc3aae000},{0xc3ab0000},{0xc3ab2000},{0xc3ab4000},{0xc3ab6000},{0xc3ab8000},{0xc3aba000},{0xc3abc000},{0xc3abe000}, -{0xc3ac0000},{0xc3ac2000},{0xc3ac4000},{0xc3ac6000},{0xc3ac8000},{0xc3aca000},{0xc3acc000},{0xc3ace000},{0xc3ad0000},{0xc3ad2000},{0xc3ad4000},{0xc3ad6000},{0xc3ad8000},{0xc3ada000},{0xc3adc000},{0xc3ade000},{0xc3ae0000},{0xc3ae2000},{0xc3ae4000},{0xc3ae6000},{0xc3ae8000},{0xc3aea000},{0xc3aec000},{0xc3aee000},{0xc3af0000},{0xc3af2000},{0xc3af4000},{0xc3af6000},{0xc3af8000},{0xc3afa000},{0xc3afc000},{0xc3afe000}, -{0xc3b00000},{0xc3b02000},{0xc3b04000},{0xc3b06000},{0xc3b08000},{0xc3b0a000},{0xc3b0c000},{0xc3b0e000},{0xc3b10000},{0xc3b12000},{0xc3b14000},{0xc3b16000},{0xc3b18000},{0xc3b1a000},{0xc3b1c000},{0xc3b1e000},{0xc3b20000},{0xc3b22000},{0xc3b24000},{0xc3b26000},{0xc3b28000},{0xc3b2a000},{0xc3b2c000},{0xc3b2e000},{0xc3b30000},{0xc3b32000},{0xc3b34000},{0xc3b36000},{0xc3b38000},{0xc3b3a000},{0xc3b3c000},{0xc3b3e000}, -{0xc3b40000},{0xc3b42000},{0xc3b44000},{0xc3b46000},{0xc3b48000},{0xc3b4a000},{0xc3b4c000},{0xc3b4e000},{0xc3b50000},{0xc3b52000},{0xc3b54000},{0xc3b56000},{0xc3b58000},{0xc3b5a000},{0xc3b5c000},{0xc3b5e000},{0xc3b60000},{0xc3b62000},{0xc3b64000},{0xc3b66000},{0xc3b68000},{0xc3b6a000},{0xc3b6c000},{0xc3b6e000},{0xc3b70000},{0xc3b72000},{0xc3b74000},{0xc3b76000},{0xc3b78000},{0xc3b7a000},{0xc3b7c000},{0xc3b7e000}, -{0xc3b80000},{0xc3b82000},{0xc3b84000},{0xc3b86000},{0xc3b88000},{0xc3b8a000},{0xc3b8c000},{0xc3b8e000},{0xc3b90000},{0xc3b92000},{0xc3b94000},{0xc3b96000},{0xc3b98000},{0xc3b9a000},{0xc3b9c000},{0xc3b9e000},{0xc3ba0000},{0xc3ba2000},{0xc3ba4000},{0xc3ba6000},{0xc3ba8000},{0xc3baa000},{0xc3bac000},{0xc3bae000},{0xc3bb0000},{0xc3bb2000},{0xc3bb4000},{0xc3bb6000},{0xc3bb8000},{0xc3bba000},{0xc3bbc000},{0xc3bbe000}, -{0xc3bc0000},{0xc3bc2000},{0xc3bc4000},{0xc3bc6000},{0xc3bc8000},{0xc3bca000},{0xc3bcc000},{0xc3bce000},{0xc3bd0000},{0xc3bd2000},{0xc3bd4000},{0xc3bd6000},{0xc3bd8000},{0xc3bda000},{0xc3bdc000},{0xc3bde000},{0xc3be0000},{0xc3be2000},{0xc3be4000},{0xc3be6000},{0xc3be8000},{0xc3bea000},{0xc3bec000},{0xc3bee000},{0xc3bf0000},{0xc3bf2000},{0xc3bf4000},{0xc3bf6000},{0xc3bf8000},{0xc3bfa000},{0xc3bfc000},{0xc3bfe000}, -{0xc3c00000},{0xc3c02000},{0xc3c04000},{0xc3c06000},{0xc3c08000},{0xc3c0a000},{0xc3c0c000},{0xc3c0e000},{0xc3c10000},{0xc3c12000},{0xc3c14000},{0xc3c16000},{0xc3c18000},{0xc3c1a000},{0xc3c1c000},{0xc3c1e000},{0xc3c20000},{0xc3c22000},{0xc3c24000},{0xc3c26000},{0xc3c28000},{0xc3c2a000},{0xc3c2c000},{0xc3c2e000},{0xc3c30000},{0xc3c32000},{0xc3c34000},{0xc3c36000},{0xc3c38000},{0xc3c3a000},{0xc3c3c000},{0xc3c3e000}, -{0xc3c40000},{0xc3c42000},{0xc3c44000},{0xc3c46000},{0xc3c48000},{0xc3c4a000},{0xc3c4c000},{0xc3c4e000},{0xc3c50000},{0xc3c52000},{0xc3c54000},{0xc3c56000},{0xc3c58000},{0xc3c5a000},{0xc3c5c000},{0xc3c5e000},{0xc3c60000},{0xc3c62000},{0xc3c64000},{0xc3c66000},{0xc3c68000},{0xc3c6a000},{0xc3c6c000},{0xc3c6e000},{0xc3c70000},{0xc3c72000},{0xc3c74000},{0xc3c76000},{0xc3c78000},{0xc3c7a000},{0xc3c7c000},{0xc3c7e000}, -{0xc3c80000},{0xc3c82000},{0xc3c84000},{0xc3c86000},{0xc3c88000},{0xc3c8a000},{0xc3c8c000},{0xc3c8e000},{0xc3c90000},{0xc3c92000},{0xc3c94000},{0xc3c96000},{0xc3c98000},{0xc3c9a000},{0xc3c9c000},{0xc3c9e000},{0xc3ca0000},{0xc3ca2000},{0xc3ca4000},{0xc3ca6000},{0xc3ca8000},{0xc3caa000},{0xc3cac000},{0xc3cae000},{0xc3cb0000},{0xc3cb2000},{0xc3cb4000},{0xc3cb6000},{0xc3cb8000},{0xc3cba000},{0xc3cbc000},{0xc3cbe000}, -{0xc3cc0000},{0xc3cc2000},{0xc3cc4000},{0xc3cc6000},{0xc3cc8000},{0xc3cca000},{0xc3ccc000},{0xc3cce000},{0xc3cd0000},{0xc3cd2000},{0xc3cd4000},{0xc3cd6000},{0xc3cd8000},{0xc3cda000},{0xc3cdc000},{0xc3cde000},{0xc3ce0000},{0xc3ce2000},{0xc3ce4000},{0xc3ce6000},{0xc3ce8000},{0xc3cea000},{0xc3cec000},{0xc3cee000},{0xc3cf0000},{0xc3cf2000},{0xc3cf4000},{0xc3cf6000},{0xc3cf8000},{0xc3cfa000},{0xc3cfc000},{0xc3cfe000}, -{0xc3d00000},{0xc3d02000},{0xc3d04000},{0xc3d06000},{0xc3d08000},{0xc3d0a000},{0xc3d0c000},{0xc3d0e000},{0xc3d10000},{0xc3d12000},{0xc3d14000},{0xc3d16000},{0xc3d18000},{0xc3d1a000},{0xc3d1c000},{0xc3d1e000},{0xc3d20000},{0xc3d22000},{0xc3d24000},{0xc3d26000},{0xc3d28000},{0xc3d2a000},{0xc3d2c000},{0xc3d2e000},{0xc3d30000},{0xc3d32000},{0xc3d34000},{0xc3d36000},{0xc3d38000},{0xc3d3a000},{0xc3d3c000},{0xc3d3e000}, -{0xc3d40000},{0xc3d42000},{0xc3d44000},{0xc3d46000},{0xc3d48000},{0xc3d4a000},{0xc3d4c000},{0xc3d4e000},{0xc3d50000},{0xc3d52000},{0xc3d54000},{0xc3d56000},{0xc3d58000},{0xc3d5a000},{0xc3d5c000},{0xc3d5e000},{0xc3d60000},{0xc3d62000},{0xc3d64000},{0xc3d66000},{0xc3d68000},{0xc3d6a000},{0xc3d6c000},{0xc3d6e000},{0xc3d70000},{0xc3d72000},{0xc3d74000},{0xc3d76000},{0xc3d78000},{0xc3d7a000},{0xc3d7c000},{0xc3d7e000}, -{0xc3d80000},{0xc3d82000},{0xc3d84000},{0xc3d86000},{0xc3d88000},{0xc3d8a000},{0xc3d8c000},{0xc3d8e000},{0xc3d90000},{0xc3d92000},{0xc3d94000},{0xc3d96000},{0xc3d98000},{0xc3d9a000},{0xc3d9c000},{0xc3d9e000},{0xc3da0000},{0xc3da2000},{0xc3da4000},{0xc3da6000},{0xc3da8000},{0xc3daa000},{0xc3dac000},{0xc3dae000},{0xc3db0000},{0xc3db2000},{0xc3db4000},{0xc3db6000},{0xc3db8000},{0xc3dba000},{0xc3dbc000},{0xc3dbe000}, -{0xc3dc0000},{0xc3dc2000},{0xc3dc4000},{0xc3dc6000},{0xc3dc8000},{0xc3dca000},{0xc3dcc000},{0xc3dce000},{0xc3dd0000},{0xc3dd2000},{0xc3dd4000},{0xc3dd6000},{0xc3dd8000},{0xc3dda000},{0xc3ddc000},{0xc3dde000},{0xc3de0000},{0xc3de2000},{0xc3de4000},{0xc3de6000},{0xc3de8000},{0xc3dea000},{0xc3dec000},{0xc3dee000},{0xc3df0000},{0xc3df2000},{0xc3df4000},{0xc3df6000},{0xc3df8000},{0xc3dfa000},{0xc3dfc000},{0xc3dfe000}, -{0xc3e00000},{0xc3e02000},{0xc3e04000},{0xc3e06000},{0xc3e08000},{0xc3e0a000},{0xc3e0c000},{0xc3e0e000},{0xc3e10000},{0xc3e12000},{0xc3e14000},{0xc3e16000},{0xc3e18000},{0xc3e1a000},{0xc3e1c000},{0xc3e1e000},{0xc3e20000},{0xc3e22000},{0xc3e24000},{0xc3e26000},{0xc3e28000},{0xc3e2a000},{0xc3e2c000},{0xc3e2e000},{0xc3e30000},{0xc3e32000},{0xc3e34000},{0xc3e36000},{0xc3e38000},{0xc3e3a000},{0xc3e3c000},{0xc3e3e000}, -{0xc3e40000},{0xc3e42000},{0xc3e44000},{0xc3e46000},{0xc3e48000},{0xc3e4a000},{0xc3e4c000},{0xc3e4e000},{0xc3e50000},{0xc3e52000},{0xc3e54000},{0xc3e56000},{0xc3e58000},{0xc3e5a000},{0xc3e5c000},{0xc3e5e000},{0xc3e60000},{0xc3e62000},{0xc3e64000},{0xc3e66000},{0xc3e68000},{0xc3e6a000},{0xc3e6c000},{0xc3e6e000},{0xc3e70000},{0xc3e72000},{0xc3e74000},{0xc3e76000},{0xc3e78000},{0xc3e7a000},{0xc3e7c000},{0xc3e7e000}, -{0xc3e80000},{0xc3e82000},{0xc3e84000},{0xc3e86000},{0xc3e88000},{0xc3e8a000},{0xc3e8c000},{0xc3e8e000},{0xc3e90000},{0xc3e92000},{0xc3e94000},{0xc3e96000},{0xc3e98000},{0xc3e9a000},{0xc3e9c000},{0xc3e9e000},{0xc3ea0000},{0xc3ea2000},{0xc3ea4000},{0xc3ea6000},{0xc3ea8000},{0xc3eaa000},{0xc3eac000},{0xc3eae000},{0xc3eb0000},{0xc3eb2000},{0xc3eb4000},{0xc3eb6000},{0xc3eb8000},{0xc3eba000},{0xc3ebc000},{0xc3ebe000}, -{0xc3ec0000},{0xc3ec2000},{0xc3ec4000},{0xc3ec6000},{0xc3ec8000},{0xc3eca000},{0xc3ecc000},{0xc3ece000},{0xc3ed0000},{0xc3ed2000},{0xc3ed4000},{0xc3ed6000},{0xc3ed8000},{0xc3eda000},{0xc3edc000},{0xc3ede000},{0xc3ee0000},{0xc3ee2000},{0xc3ee4000},{0xc3ee6000},{0xc3ee8000},{0xc3eea000},{0xc3eec000},{0xc3eee000},{0xc3ef0000},{0xc3ef2000},{0xc3ef4000},{0xc3ef6000},{0xc3ef8000},{0xc3efa000},{0xc3efc000},{0xc3efe000}, -{0xc3f00000},{0xc3f02000},{0xc3f04000},{0xc3f06000},{0xc3f08000},{0xc3f0a000},{0xc3f0c000},{0xc3f0e000},{0xc3f10000},{0xc3f12000},{0xc3f14000},{0xc3f16000},{0xc3f18000},{0xc3f1a000},{0xc3f1c000},{0xc3f1e000},{0xc3f20000},{0xc3f22000},{0xc3f24000},{0xc3f26000},{0xc3f28000},{0xc3f2a000},{0xc3f2c000},{0xc3f2e000},{0xc3f30000},{0xc3f32000},{0xc3f34000},{0xc3f36000},{0xc3f38000},{0xc3f3a000},{0xc3f3c000},{0xc3f3e000}, -{0xc3f40000},{0xc3f42000},{0xc3f44000},{0xc3f46000},{0xc3f48000},{0xc3f4a000},{0xc3f4c000},{0xc3f4e000},{0xc3f50000},{0xc3f52000},{0xc3f54000},{0xc3f56000},{0xc3f58000},{0xc3f5a000},{0xc3f5c000},{0xc3f5e000},{0xc3f60000},{0xc3f62000},{0xc3f64000},{0xc3f66000},{0xc3f68000},{0xc3f6a000},{0xc3f6c000},{0xc3f6e000},{0xc3f70000},{0xc3f72000},{0xc3f74000},{0xc3f76000},{0xc3f78000},{0xc3f7a000},{0xc3f7c000},{0xc3f7e000}, -{0xc3f80000},{0xc3f82000},{0xc3f84000},{0xc3f86000},{0xc3f88000},{0xc3f8a000},{0xc3f8c000},{0xc3f8e000},{0xc3f90000},{0xc3f92000},{0xc3f94000},{0xc3f96000},{0xc3f98000},{0xc3f9a000},{0xc3f9c000},{0xc3f9e000},{0xc3fa0000},{0xc3fa2000},{0xc3fa4000},{0xc3fa6000},{0xc3fa8000},{0xc3faa000},{0xc3fac000},{0xc3fae000},{0xc3fb0000},{0xc3fb2000},{0xc3fb4000},{0xc3fb6000},{0xc3fb8000},{0xc3fba000},{0xc3fbc000},{0xc3fbe000}, -{0xc3fc0000},{0xc3fc2000},{0xc3fc4000},{0xc3fc6000},{0xc3fc8000},{0xc3fca000},{0xc3fcc000},{0xc3fce000},{0xc3fd0000},{0xc3fd2000},{0xc3fd4000},{0xc3fd6000},{0xc3fd8000},{0xc3fda000},{0xc3fdc000},{0xc3fde000},{0xc3fe0000},{0xc3fe2000},{0xc3fe4000},{0xc3fe6000},{0xc3fe8000},{0xc3fea000},{0xc3fec000},{0xc3fee000},{0xc3ff0000},{0xc3ff2000},{0xc3ff4000},{0xc3ff6000},{0xc3ff8000},{0xc3ffa000},{0xc3ffc000},{0xc3ffe000}, -{0xc4000000},{0xc4002000},{0xc4004000},{0xc4006000},{0xc4008000},{0xc400a000},{0xc400c000},{0xc400e000},{0xc4010000},{0xc4012000},{0xc4014000},{0xc4016000},{0xc4018000},{0xc401a000},{0xc401c000},{0xc401e000},{0xc4020000},{0xc4022000},{0xc4024000},{0xc4026000},{0xc4028000},{0xc402a000},{0xc402c000},{0xc402e000},{0xc4030000},{0xc4032000},{0xc4034000},{0xc4036000},{0xc4038000},{0xc403a000},{0xc403c000},{0xc403e000}, -{0xc4040000},{0xc4042000},{0xc4044000},{0xc4046000},{0xc4048000},{0xc404a000},{0xc404c000},{0xc404e000},{0xc4050000},{0xc4052000},{0xc4054000},{0xc4056000},{0xc4058000},{0xc405a000},{0xc405c000},{0xc405e000},{0xc4060000},{0xc4062000},{0xc4064000},{0xc4066000},{0xc4068000},{0xc406a000},{0xc406c000},{0xc406e000},{0xc4070000},{0xc4072000},{0xc4074000},{0xc4076000},{0xc4078000},{0xc407a000},{0xc407c000},{0xc407e000}, -{0xc4080000},{0xc4082000},{0xc4084000},{0xc4086000},{0xc4088000},{0xc408a000},{0xc408c000},{0xc408e000},{0xc4090000},{0xc4092000},{0xc4094000},{0xc4096000},{0xc4098000},{0xc409a000},{0xc409c000},{0xc409e000},{0xc40a0000},{0xc40a2000},{0xc40a4000},{0xc40a6000},{0xc40a8000},{0xc40aa000},{0xc40ac000},{0xc40ae000},{0xc40b0000},{0xc40b2000},{0xc40b4000},{0xc40b6000},{0xc40b8000},{0xc40ba000},{0xc40bc000},{0xc40be000}, -{0xc40c0000},{0xc40c2000},{0xc40c4000},{0xc40c6000},{0xc40c8000},{0xc40ca000},{0xc40cc000},{0xc40ce000},{0xc40d0000},{0xc40d2000},{0xc40d4000},{0xc40d6000},{0xc40d8000},{0xc40da000},{0xc40dc000},{0xc40de000},{0xc40e0000},{0xc40e2000},{0xc40e4000},{0xc40e6000},{0xc40e8000},{0xc40ea000},{0xc40ec000},{0xc40ee000},{0xc40f0000},{0xc40f2000},{0xc40f4000},{0xc40f6000},{0xc40f8000},{0xc40fa000},{0xc40fc000},{0xc40fe000}, -{0xc4100000},{0xc4102000},{0xc4104000},{0xc4106000},{0xc4108000},{0xc410a000},{0xc410c000},{0xc410e000},{0xc4110000},{0xc4112000},{0xc4114000},{0xc4116000},{0xc4118000},{0xc411a000},{0xc411c000},{0xc411e000},{0xc4120000},{0xc4122000},{0xc4124000},{0xc4126000},{0xc4128000},{0xc412a000},{0xc412c000},{0xc412e000},{0xc4130000},{0xc4132000},{0xc4134000},{0xc4136000},{0xc4138000},{0xc413a000},{0xc413c000},{0xc413e000}, -{0xc4140000},{0xc4142000},{0xc4144000},{0xc4146000},{0xc4148000},{0xc414a000},{0xc414c000},{0xc414e000},{0xc4150000},{0xc4152000},{0xc4154000},{0xc4156000},{0xc4158000},{0xc415a000},{0xc415c000},{0xc415e000},{0xc4160000},{0xc4162000},{0xc4164000},{0xc4166000},{0xc4168000},{0xc416a000},{0xc416c000},{0xc416e000},{0xc4170000},{0xc4172000},{0xc4174000},{0xc4176000},{0xc4178000},{0xc417a000},{0xc417c000},{0xc417e000}, -{0xc4180000},{0xc4182000},{0xc4184000},{0xc4186000},{0xc4188000},{0xc418a000},{0xc418c000},{0xc418e000},{0xc4190000},{0xc4192000},{0xc4194000},{0xc4196000},{0xc4198000},{0xc419a000},{0xc419c000},{0xc419e000},{0xc41a0000},{0xc41a2000},{0xc41a4000},{0xc41a6000},{0xc41a8000},{0xc41aa000},{0xc41ac000},{0xc41ae000},{0xc41b0000},{0xc41b2000},{0xc41b4000},{0xc41b6000},{0xc41b8000},{0xc41ba000},{0xc41bc000},{0xc41be000}, -{0xc41c0000},{0xc41c2000},{0xc41c4000},{0xc41c6000},{0xc41c8000},{0xc41ca000},{0xc41cc000},{0xc41ce000},{0xc41d0000},{0xc41d2000},{0xc41d4000},{0xc41d6000},{0xc41d8000},{0xc41da000},{0xc41dc000},{0xc41de000},{0xc41e0000},{0xc41e2000},{0xc41e4000},{0xc41e6000},{0xc41e8000},{0xc41ea000},{0xc41ec000},{0xc41ee000},{0xc41f0000},{0xc41f2000},{0xc41f4000},{0xc41f6000},{0xc41f8000},{0xc41fa000},{0xc41fc000},{0xc41fe000}, -{0xc4200000},{0xc4202000},{0xc4204000},{0xc4206000},{0xc4208000},{0xc420a000},{0xc420c000},{0xc420e000},{0xc4210000},{0xc4212000},{0xc4214000},{0xc4216000},{0xc4218000},{0xc421a000},{0xc421c000},{0xc421e000},{0xc4220000},{0xc4222000},{0xc4224000},{0xc4226000},{0xc4228000},{0xc422a000},{0xc422c000},{0xc422e000},{0xc4230000},{0xc4232000},{0xc4234000},{0xc4236000},{0xc4238000},{0xc423a000},{0xc423c000},{0xc423e000}, -{0xc4240000},{0xc4242000},{0xc4244000},{0xc4246000},{0xc4248000},{0xc424a000},{0xc424c000},{0xc424e000},{0xc4250000},{0xc4252000},{0xc4254000},{0xc4256000},{0xc4258000},{0xc425a000},{0xc425c000},{0xc425e000},{0xc4260000},{0xc4262000},{0xc4264000},{0xc4266000},{0xc4268000},{0xc426a000},{0xc426c000},{0xc426e000},{0xc4270000},{0xc4272000},{0xc4274000},{0xc4276000},{0xc4278000},{0xc427a000},{0xc427c000},{0xc427e000}, -{0xc4280000},{0xc4282000},{0xc4284000},{0xc4286000},{0xc4288000},{0xc428a000},{0xc428c000},{0xc428e000},{0xc4290000},{0xc4292000},{0xc4294000},{0xc4296000},{0xc4298000},{0xc429a000},{0xc429c000},{0xc429e000},{0xc42a0000},{0xc42a2000},{0xc42a4000},{0xc42a6000},{0xc42a8000},{0xc42aa000},{0xc42ac000},{0xc42ae000},{0xc42b0000},{0xc42b2000},{0xc42b4000},{0xc42b6000},{0xc42b8000},{0xc42ba000},{0xc42bc000},{0xc42be000}, -{0xc42c0000},{0xc42c2000},{0xc42c4000},{0xc42c6000},{0xc42c8000},{0xc42ca000},{0xc42cc000},{0xc42ce000},{0xc42d0000},{0xc42d2000},{0xc42d4000},{0xc42d6000},{0xc42d8000},{0xc42da000},{0xc42dc000},{0xc42de000},{0xc42e0000},{0xc42e2000},{0xc42e4000},{0xc42e6000},{0xc42e8000},{0xc42ea000},{0xc42ec000},{0xc42ee000},{0xc42f0000},{0xc42f2000},{0xc42f4000},{0xc42f6000},{0xc42f8000},{0xc42fa000},{0xc42fc000},{0xc42fe000}, -{0xc4300000},{0xc4302000},{0xc4304000},{0xc4306000},{0xc4308000},{0xc430a000},{0xc430c000},{0xc430e000},{0xc4310000},{0xc4312000},{0xc4314000},{0xc4316000},{0xc4318000},{0xc431a000},{0xc431c000},{0xc431e000},{0xc4320000},{0xc4322000},{0xc4324000},{0xc4326000},{0xc4328000},{0xc432a000},{0xc432c000},{0xc432e000},{0xc4330000},{0xc4332000},{0xc4334000},{0xc4336000},{0xc4338000},{0xc433a000},{0xc433c000},{0xc433e000}, -{0xc4340000},{0xc4342000},{0xc4344000},{0xc4346000},{0xc4348000},{0xc434a000},{0xc434c000},{0xc434e000},{0xc4350000},{0xc4352000},{0xc4354000},{0xc4356000},{0xc4358000},{0xc435a000},{0xc435c000},{0xc435e000},{0xc4360000},{0xc4362000},{0xc4364000},{0xc4366000},{0xc4368000},{0xc436a000},{0xc436c000},{0xc436e000},{0xc4370000},{0xc4372000},{0xc4374000},{0xc4376000},{0xc4378000},{0xc437a000},{0xc437c000},{0xc437e000}, -{0xc4380000},{0xc4382000},{0xc4384000},{0xc4386000},{0xc4388000},{0xc438a000},{0xc438c000},{0xc438e000},{0xc4390000},{0xc4392000},{0xc4394000},{0xc4396000},{0xc4398000},{0xc439a000},{0xc439c000},{0xc439e000},{0xc43a0000},{0xc43a2000},{0xc43a4000},{0xc43a6000},{0xc43a8000},{0xc43aa000},{0xc43ac000},{0xc43ae000},{0xc43b0000},{0xc43b2000},{0xc43b4000},{0xc43b6000},{0xc43b8000},{0xc43ba000},{0xc43bc000},{0xc43be000}, -{0xc43c0000},{0xc43c2000},{0xc43c4000},{0xc43c6000},{0xc43c8000},{0xc43ca000},{0xc43cc000},{0xc43ce000},{0xc43d0000},{0xc43d2000},{0xc43d4000},{0xc43d6000},{0xc43d8000},{0xc43da000},{0xc43dc000},{0xc43de000},{0xc43e0000},{0xc43e2000},{0xc43e4000},{0xc43e6000},{0xc43e8000},{0xc43ea000},{0xc43ec000},{0xc43ee000},{0xc43f0000},{0xc43f2000},{0xc43f4000},{0xc43f6000},{0xc43f8000},{0xc43fa000},{0xc43fc000},{0xc43fe000}, -{0xc4400000},{0xc4402000},{0xc4404000},{0xc4406000},{0xc4408000},{0xc440a000},{0xc440c000},{0xc440e000},{0xc4410000},{0xc4412000},{0xc4414000},{0xc4416000},{0xc4418000},{0xc441a000},{0xc441c000},{0xc441e000},{0xc4420000},{0xc4422000},{0xc4424000},{0xc4426000},{0xc4428000},{0xc442a000},{0xc442c000},{0xc442e000},{0xc4430000},{0xc4432000},{0xc4434000},{0xc4436000},{0xc4438000},{0xc443a000},{0xc443c000},{0xc443e000}, -{0xc4440000},{0xc4442000},{0xc4444000},{0xc4446000},{0xc4448000},{0xc444a000},{0xc444c000},{0xc444e000},{0xc4450000},{0xc4452000},{0xc4454000},{0xc4456000},{0xc4458000},{0xc445a000},{0xc445c000},{0xc445e000},{0xc4460000},{0xc4462000},{0xc4464000},{0xc4466000},{0xc4468000},{0xc446a000},{0xc446c000},{0xc446e000},{0xc4470000},{0xc4472000},{0xc4474000},{0xc4476000},{0xc4478000},{0xc447a000},{0xc447c000},{0xc447e000}, -{0xc4480000},{0xc4482000},{0xc4484000},{0xc4486000},{0xc4488000},{0xc448a000},{0xc448c000},{0xc448e000},{0xc4490000},{0xc4492000},{0xc4494000},{0xc4496000},{0xc4498000},{0xc449a000},{0xc449c000},{0xc449e000},{0xc44a0000},{0xc44a2000},{0xc44a4000},{0xc44a6000},{0xc44a8000},{0xc44aa000},{0xc44ac000},{0xc44ae000},{0xc44b0000},{0xc44b2000},{0xc44b4000},{0xc44b6000},{0xc44b8000},{0xc44ba000},{0xc44bc000},{0xc44be000}, -{0xc44c0000},{0xc44c2000},{0xc44c4000},{0xc44c6000},{0xc44c8000},{0xc44ca000},{0xc44cc000},{0xc44ce000},{0xc44d0000},{0xc44d2000},{0xc44d4000},{0xc44d6000},{0xc44d8000},{0xc44da000},{0xc44dc000},{0xc44de000},{0xc44e0000},{0xc44e2000},{0xc44e4000},{0xc44e6000},{0xc44e8000},{0xc44ea000},{0xc44ec000},{0xc44ee000},{0xc44f0000},{0xc44f2000},{0xc44f4000},{0xc44f6000},{0xc44f8000},{0xc44fa000},{0xc44fc000},{0xc44fe000}, -{0xc4500000},{0xc4502000},{0xc4504000},{0xc4506000},{0xc4508000},{0xc450a000},{0xc450c000},{0xc450e000},{0xc4510000},{0xc4512000},{0xc4514000},{0xc4516000},{0xc4518000},{0xc451a000},{0xc451c000},{0xc451e000},{0xc4520000},{0xc4522000},{0xc4524000},{0xc4526000},{0xc4528000},{0xc452a000},{0xc452c000},{0xc452e000},{0xc4530000},{0xc4532000},{0xc4534000},{0xc4536000},{0xc4538000},{0xc453a000},{0xc453c000},{0xc453e000}, -{0xc4540000},{0xc4542000},{0xc4544000},{0xc4546000},{0xc4548000},{0xc454a000},{0xc454c000},{0xc454e000},{0xc4550000},{0xc4552000},{0xc4554000},{0xc4556000},{0xc4558000},{0xc455a000},{0xc455c000},{0xc455e000},{0xc4560000},{0xc4562000},{0xc4564000},{0xc4566000},{0xc4568000},{0xc456a000},{0xc456c000},{0xc456e000},{0xc4570000},{0xc4572000},{0xc4574000},{0xc4576000},{0xc4578000},{0xc457a000},{0xc457c000},{0xc457e000}, -{0xc4580000},{0xc4582000},{0xc4584000},{0xc4586000},{0xc4588000},{0xc458a000},{0xc458c000},{0xc458e000},{0xc4590000},{0xc4592000},{0xc4594000},{0xc4596000},{0xc4598000},{0xc459a000},{0xc459c000},{0xc459e000},{0xc45a0000},{0xc45a2000},{0xc45a4000},{0xc45a6000},{0xc45a8000},{0xc45aa000},{0xc45ac000},{0xc45ae000},{0xc45b0000},{0xc45b2000},{0xc45b4000},{0xc45b6000},{0xc45b8000},{0xc45ba000},{0xc45bc000},{0xc45be000}, -{0xc45c0000},{0xc45c2000},{0xc45c4000},{0xc45c6000},{0xc45c8000},{0xc45ca000},{0xc45cc000},{0xc45ce000},{0xc45d0000},{0xc45d2000},{0xc45d4000},{0xc45d6000},{0xc45d8000},{0xc45da000},{0xc45dc000},{0xc45de000},{0xc45e0000},{0xc45e2000},{0xc45e4000},{0xc45e6000},{0xc45e8000},{0xc45ea000},{0xc45ec000},{0xc45ee000},{0xc45f0000},{0xc45f2000},{0xc45f4000},{0xc45f6000},{0xc45f8000},{0xc45fa000},{0xc45fc000},{0xc45fe000}, -{0xc4600000},{0xc4602000},{0xc4604000},{0xc4606000},{0xc4608000},{0xc460a000},{0xc460c000},{0xc460e000},{0xc4610000},{0xc4612000},{0xc4614000},{0xc4616000},{0xc4618000},{0xc461a000},{0xc461c000},{0xc461e000},{0xc4620000},{0xc4622000},{0xc4624000},{0xc4626000},{0xc4628000},{0xc462a000},{0xc462c000},{0xc462e000},{0xc4630000},{0xc4632000},{0xc4634000},{0xc4636000},{0xc4638000},{0xc463a000},{0xc463c000},{0xc463e000}, -{0xc4640000},{0xc4642000},{0xc4644000},{0xc4646000},{0xc4648000},{0xc464a000},{0xc464c000},{0xc464e000},{0xc4650000},{0xc4652000},{0xc4654000},{0xc4656000},{0xc4658000},{0xc465a000},{0xc465c000},{0xc465e000},{0xc4660000},{0xc4662000},{0xc4664000},{0xc4666000},{0xc4668000},{0xc466a000},{0xc466c000},{0xc466e000},{0xc4670000},{0xc4672000},{0xc4674000},{0xc4676000},{0xc4678000},{0xc467a000},{0xc467c000},{0xc467e000}, -{0xc4680000},{0xc4682000},{0xc4684000},{0xc4686000},{0xc4688000},{0xc468a000},{0xc468c000},{0xc468e000},{0xc4690000},{0xc4692000},{0xc4694000},{0xc4696000},{0xc4698000},{0xc469a000},{0xc469c000},{0xc469e000},{0xc46a0000},{0xc46a2000},{0xc46a4000},{0xc46a6000},{0xc46a8000},{0xc46aa000},{0xc46ac000},{0xc46ae000},{0xc46b0000},{0xc46b2000},{0xc46b4000},{0xc46b6000},{0xc46b8000},{0xc46ba000},{0xc46bc000},{0xc46be000}, -{0xc46c0000},{0xc46c2000},{0xc46c4000},{0xc46c6000},{0xc46c8000},{0xc46ca000},{0xc46cc000},{0xc46ce000},{0xc46d0000},{0xc46d2000},{0xc46d4000},{0xc46d6000},{0xc46d8000},{0xc46da000},{0xc46dc000},{0xc46de000},{0xc46e0000},{0xc46e2000},{0xc46e4000},{0xc46e6000},{0xc46e8000},{0xc46ea000},{0xc46ec000},{0xc46ee000},{0xc46f0000},{0xc46f2000},{0xc46f4000},{0xc46f6000},{0xc46f8000},{0xc46fa000},{0xc46fc000},{0xc46fe000}, -{0xc4700000},{0xc4702000},{0xc4704000},{0xc4706000},{0xc4708000},{0xc470a000},{0xc470c000},{0xc470e000},{0xc4710000},{0xc4712000},{0xc4714000},{0xc4716000},{0xc4718000},{0xc471a000},{0xc471c000},{0xc471e000},{0xc4720000},{0xc4722000},{0xc4724000},{0xc4726000},{0xc4728000},{0xc472a000},{0xc472c000},{0xc472e000},{0xc4730000},{0xc4732000},{0xc4734000},{0xc4736000},{0xc4738000},{0xc473a000},{0xc473c000},{0xc473e000}, -{0xc4740000},{0xc4742000},{0xc4744000},{0xc4746000},{0xc4748000},{0xc474a000},{0xc474c000},{0xc474e000},{0xc4750000},{0xc4752000},{0xc4754000},{0xc4756000},{0xc4758000},{0xc475a000},{0xc475c000},{0xc475e000},{0xc4760000},{0xc4762000},{0xc4764000},{0xc4766000},{0xc4768000},{0xc476a000},{0xc476c000},{0xc476e000},{0xc4770000},{0xc4772000},{0xc4774000},{0xc4776000},{0xc4778000},{0xc477a000},{0xc477c000},{0xc477e000}, -{0xc4780000},{0xc4782000},{0xc4784000},{0xc4786000},{0xc4788000},{0xc478a000},{0xc478c000},{0xc478e000},{0xc4790000},{0xc4792000},{0xc4794000},{0xc4796000},{0xc4798000},{0xc479a000},{0xc479c000},{0xc479e000},{0xc47a0000},{0xc47a2000},{0xc47a4000},{0xc47a6000},{0xc47a8000},{0xc47aa000},{0xc47ac000},{0xc47ae000},{0xc47b0000},{0xc47b2000},{0xc47b4000},{0xc47b6000},{0xc47b8000},{0xc47ba000},{0xc47bc000},{0xc47be000}, -{0xc47c0000},{0xc47c2000},{0xc47c4000},{0xc47c6000},{0xc47c8000},{0xc47ca000},{0xc47cc000},{0xc47ce000},{0xc47d0000},{0xc47d2000},{0xc47d4000},{0xc47d6000},{0xc47d8000},{0xc47da000},{0xc47dc000},{0xc47de000},{0xc47e0000},{0xc47e2000},{0xc47e4000},{0xc47e6000},{0xc47e8000},{0xc47ea000},{0xc47ec000},{0xc47ee000},{0xc47f0000},{0xc47f2000},{0xc47f4000},{0xc47f6000},{0xc47f8000},{0xc47fa000},{0xc47fc000},{0xc47fe000}, -{0xc4800000},{0xc4802000},{0xc4804000},{0xc4806000},{0xc4808000},{0xc480a000},{0xc480c000},{0xc480e000},{0xc4810000},{0xc4812000},{0xc4814000},{0xc4816000},{0xc4818000},{0xc481a000},{0xc481c000},{0xc481e000},{0xc4820000},{0xc4822000},{0xc4824000},{0xc4826000},{0xc4828000},{0xc482a000},{0xc482c000},{0xc482e000},{0xc4830000},{0xc4832000},{0xc4834000},{0xc4836000},{0xc4838000},{0xc483a000},{0xc483c000},{0xc483e000}, -{0xc4840000},{0xc4842000},{0xc4844000},{0xc4846000},{0xc4848000},{0xc484a000},{0xc484c000},{0xc484e000},{0xc4850000},{0xc4852000},{0xc4854000},{0xc4856000},{0xc4858000},{0xc485a000},{0xc485c000},{0xc485e000},{0xc4860000},{0xc4862000},{0xc4864000},{0xc4866000},{0xc4868000},{0xc486a000},{0xc486c000},{0xc486e000},{0xc4870000},{0xc4872000},{0xc4874000},{0xc4876000},{0xc4878000},{0xc487a000},{0xc487c000},{0xc487e000}, -{0xc4880000},{0xc4882000},{0xc4884000},{0xc4886000},{0xc4888000},{0xc488a000},{0xc488c000},{0xc488e000},{0xc4890000},{0xc4892000},{0xc4894000},{0xc4896000},{0xc4898000},{0xc489a000},{0xc489c000},{0xc489e000},{0xc48a0000},{0xc48a2000},{0xc48a4000},{0xc48a6000},{0xc48a8000},{0xc48aa000},{0xc48ac000},{0xc48ae000},{0xc48b0000},{0xc48b2000},{0xc48b4000},{0xc48b6000},{0xc48b8000},{0xc48ba000},{0xc48bc000},{0xc48be000}, -{0xc48c0000},{0xc48c2000},{0xc48c4000},{0xc48c6000},{0xc48c8000},{0xc48ca000},{0xc48cc000},{0xc48ce000},{0xc48d0000},{0xc48d2000},{0xc48d4000},{0xc48d6000},{0xc48d8000},{0xc48da000},{0xc48dc000},{0xc48de000},{0xc48e0000},{0xc48e2000},{0xc48e4000},{0xc48e6000},{0xc48e8000},{0xc48ea000},{0xc48ec000},{0xc48ee000},{0xc48f0000},{0xc48f2000},{0xc48f4000},{0xc48f6000},{0xc48f8000},{0xc48fa000},{0xc48fc000},{0xc48fe000}, -{0xc4900000},{0xc4902000},{0xc4904000},{0xc4906000},{0xc4908000},{0xc490a000},{0xc490c000},{0xc490e000},{0xc4910000},{0xc4912000},{0xc4914000},{0xc4916000},{0xc4918000},{0xc491a000},{0xc491c000},{0xc491e000},{0xc4920000},{0xc4922000},{0xc4924000},{0xc4926000},{0xc4928000},{0xc492a000},{0xc492c000},{0xc492e000},{0xc4930000},{0xc4932000},{0xc4934000},{0xc4936000},{0xc4938000},{0xc493a000},{0xc493c000},{0xc493e000}, -{0xc4940000},{0xc4942000},{0xc4944000},{0xc4946000},{0xc4948000},{0xc494a000},{0xc494c000},{0xc494e000},{0xc4950000},{0xc4952000},{0xc4954000},{0xc4956000},{0xc4958000},{0xc495a000},{0xc495c000},{0xc495e000},{0xc4960000},{0xc4962000},{0xc4964000},{0xc4966000},{0xc4968000},{0xc496a000},{0xc496c000},{0xc496e000},{0xc4970000},{0xc4972000},{0xc4974000},{0xc4976000},{0xc4978000},{0xc497a000},{0xc497c000},{0xc497e000}, -{0xc4980000},{0xc4982000},{0xc4984000},{0xc4986000},{0xc4988000},{0xc498a000},{0xc498c000},{0xc498e000},{0xc4990000},{0xc4992000},{0xc4994000},{0xc4996000},{0xc4998000},{0xc499a000},{0xc499c000},{0xc499e000},{0xc49a0000},{0xc49a2000},{0xc49a4000},{0xc49a6000},{0xc49a8000},{0xc49aa000},{0xc49ac000},{0xc49ae000},{0xc49b0000},{0xc49b2000},{0xc49b4000},{0xc49b6000},{0xc49b8000},{0xc49ba000},{0xc49bc000},{0xc49be000}, -{0xc49c0000},{0xc49c2000},{0xc49c4000},{0xc49c6000},{0xc49c8000},{0xc49ca000},{0xc49cc000},{0xc49ce000},{0xc49d0000},{0xc49d2000},{0xc49d4000},{0xc49d6000},{0xc49d8000},{0xc49da000},{0xc49dc000},{0xc49de000},{0xc49e0000},{0xc49e2000},{0xc49e4000},{0xc49e6000},{0xc49e8000},{0xc49ea000},{0xc49ec000},{0xc49ee000},{0xc49f0000},{0xc49f2000},{0xc49f4000},{0xc49f6000},{0xc49f8000},{0xc49fa000},{0xc49fc000},{0xc49fe000}, -{0xc4a00000},{0xc4a02000},{0xc4a04000},{0xc4a06000},{0xc4a08000},{0xc4a0a000},{0xc4a0c000},{0xc4a0e000},{0xc4a10000},{0xc4a12000},{0xc4a14000},{0xc4a16000},{0xc4a18000},{0xc4a1a000},{0xc4a1c000},{0xc4a1e000},{0xc4a20000},{0xc4a22000},{0xc4a24000},{0xc4a26000},{0xc4a28000},{0xc4a2a000},{0xc4a2c000},{0xc4a2e000},{0xc4a30000},{0xc4a32000},{0xc4a34000},{0xc4a36000},{0xc4a38000},{0xc4a3a000},{0xc4a3c000},{0xc4a3e000}, -{0xc4a40000},{0xc4a42000},{0xc4a44000},{0xc4a46000},{0xc4a48000},{0xc4a4a000},{0xc4a4c000},{0xc4a4e000},{0xc4a50000},{0xc4a52000},{0xc4a54000},{0xc4a56000},{0xc4a58000},{0xc4a5a000},{0xc4a5c000},{0xc4a5e000},{0xc4a60000},{0xc4a62000},{0xc4a64000},{0xc4a66000},{0xc4a68000},{0xc4a6a000},{0xc4a6c000},{0xc4a6e000},{0xc4a70000},{0xc4a72000},{0xc4a74000},{0xc4a76000},{0xc4a78000},{0xc4a7a000},{0xc4a7c000},{0xc4a7e000}, -{0xc4a80000},{0xc4a82000},{0xc4a84000},{0xc4a86000},{0xc4a88000},{0xc4a8a000},{0xc4a8c000},{0xc4a8e000},{0xc4a90000},{0xc4a92000},{0xc4a94000},{0xc4a96000},{0xc4a98000},{0xc4a9a000},{0xc4a9c000},{0xc4a9e000},{0xc4aa0000},{0xc4aa2000},{0xc4aa4000},{0xc4aa6000},{0xc4aa8000},{0xc4aaa000},{0xc4aac000},{0xc4aae000},{0xc4ab0000},{0xc4ab2000},{0xc4ab4000},{0xc4ab6000},{0xc4ab8000},{0xc4aba000},{0xc4abc000},{0xc4abe000}, -{0xc4ac0000},{0xc4ac2000},{0xc4ac4000},{0xc4ac6000},{0xc4ac8000},{0xc4aca000},{0xc4acc000},{0xc4ace000},{0xc4ad0000},{0xc4ad2000},{0xc4ad4000},{0xc4ad6000},{0xc4ad8000},{0xc4ada000},{0xc4adc000},{0xc4ade000},{0xc4ae0000},{0xc4ae2000},{0xc4ae4000},{0xc4ae6000},{0xc4ae8000},{0xc4aea000},{0xc4aec000},{0xc4aee000},{0xc4af0000},{0xc4af2000},{0xc4af4000},{0xc4af6000},{0xc4af8000},{0xc4afa000},{0xc4afc000},{0xc4afe000}, -{0xc4b00000},{0xc4b02000},{0xc4b04000},{0xc4b06000},{0xc4b08000},{0xc4b0a000},{0xc4b0c000},{0xc4b0e000},{0xc4b10000},{0xc4b12000},{0xc4b14000},{0xc4b16000},{0xc4b18000},{0xc4b1a000},{0xc4b1c000},{0xc4b1e000},{0xc4b20000},{0xc4b22000},{0xc4b24000},{0xc4b26000},{0xc4b28000},{0xc4b2a000},{0xc4b2c000},{0xc4b2e000},{0xc4b30000},{0xc4b32000},{0xc4b34000},{0xc4b36000},{0xc4b38000},{0xc4b3a000},{0xc4b3c000},{0xc4b3e000}, -{0xc4b40000},{0xc4b42000},{0xc4b44000},{0xc4b46000},{0xc4b48000},{0xc4b4a000},{0xc4b4c000},{0xc4b4e000},{0xc4b50000},{0xc4b52000},{0xc4b54000},{0xc4b56000},{0xc4b58000},{0xc4b5a000},{0xc4b5c000},{0xc4b5e000},{0xc4b60000},{0xc4b62000},{0xc4b64000},{0xc4b66000},{0xc4b68000},{0xc4b6a000},{0xc4b6c000},{0xc4b6e000},{0xc4b70000},{0xc4b72000},{0xc4b74000},{0xc4b76000},{0xc4b78000},{0xc4b7a000},{0xc4b7c000},{0xc4b7e000}, -{0xc4b80000},{0xc4b82000},{0xc4b84000},{0xc4b86000},{0xc4b88000},{0xc4b8a000},{0xc4b8c000},{0xc4b8e000},{0xc4b90000},{0xc4b92000},{0xc4b94000},{0xc4b96000},{0xc4b98000},{0xc4b9a000},{0xc4b9c000},{0xc4b9e000},{0xc4ba0000},{0xc4ba2000},{0xc4ba4000},{0xc4ba6000},{0xc4ba8000},{0xc4baa000},{0xc4bac000},{0xc4bae000},{0xc4bb0000},{0xc4bb2000},{0xc4bb4000},{0xc4bb6000},{0xc4bb8000},{0xc4bba000},{0xc4bbc000},{0xc4bbe000}, -{0xc4bc0000},{0xc4bc2000},{0xc4bc4000},{0xc4bc6000},{0xc4bc8000},{0xc4bca000},{0xc4bcc000},{0xc4bce000},{0xc4bd0000},{0xc4bd2000},{0xc4bd4000},{0xc4bd6000},{0xc4bd8000},{0xc4bda000},{0xc4bdc000},{0xc4bde000},{0xc4be0000},{0xc4be2000},{0xc4be4000},{0xc4be6000},{0xc4be8000},{0xc4bea000},{0xc4bec000},{0xc4bee000},{0xc4bf0000},{0xc4bf2000},{0xc4bf4000},{0xc4bf6000},{0xc4bf8000},{0xc4bfa000},{0xc4bfc000},{0xc4bfe000}, -{0xc4c00000},{0xc4c02000},{0xc4c04000},{0xc4c06000},{0xc4c08000},{0xc4c0a000},{0xc4c0c000},{0xc4c0e000},{0xc4c10000},{0xc4c12000},{0xc4c14000},{0xc4c16000},{0xc4c18000},{0xc4c1a000},{0xc4c1c000},{0xc4c1e000},{0xc4c20000},{0xc4c22000},{0xc4c24000},{0xc4c26000},{0xc4c28000},{0xc4c2a000},{0xc4c2c000},{0xc4c2e000},{0xc4c30000},{0xc4c32000},{0xc4c34000},{0xc4c36000},{0xc4c38000},{0xc4c3a000},{0xc4c3c000},{0xc4c3e000}, -{0xc4c40000},{0xc4c42000},{0xc4c44000},{0xc4c46000},{0xc4c48000},{0xc4c4a000},{0xc4c4c000},{0xc4c4e000},{0xc4c50000},{0xc4c52000},{0xc4c54000},{0xc4c56000},{0xc4c58000},{0xc4c5a000},{0xc4c5c000},{0xc4c5e000},{0xc4c60000},{0xc4c62000},{0xc4c64000},{0xc4c66000},{0xc4c68000},{0xc4c6a000},{0xc4c6c000},{0xc4c6e000},{0xc4c70000},{0xc4c72000},{0xc4c74000},{0xc4c76000},{0xc4c78000},{0xc4c7a000},{0xc4c7c000},{0xc4c7e000}, -{0xc4c80000},{0xc4c82000},{0xc4c84000},{0xc4c86000},{0xc4c88000},{0xc4c8a000},{0xc4c8c000},{0xc4c8e000},{0xc4c90000},{0xc4c92000},{0xc4c94000},{0xc4c96000},{0xc4c98000},{0xc4c9a000},{0xc4c9c000},{0xc4c9e000},{0xc4ca0000},{0xc4ca2000},{0xc4ca4000},{0xc4ca6000},{0xc4ca8000},{0xc4caa000},{0xc4cac000},{0xc4cae000},{0xc4cb0000},{0xc4cb2000},{0xc4cb4000},{0xc4cb6000},{0xc4cb8000},{0xc4cba000},{0xc4cbc000},{0xc4cbe000}, -{0xc4cc0000},{0xc4cc2000},{0xc4cc4000},{0xc4cc6000},{0xc4cc8000},{0xc4cca000},{0xc4ccc000},{0xc4cce000},{0xc4cd0000},{0xc4cd2000},{0xc4cd4000},{0xc4cd6000},{0xc4cd8000},{0xc4cda000},{0xc4cdc000},{0xc4cde000},{0xc4ce0000},{0xc4ce2000},{0xc4ce4000},{0xc4ce6000},{0xc4ce8000},{0xc4cea000},{0xc4cec000},{0xc4cee000},{0xc4cf0000},{0xc4cf2000},{0xc4cf4000},{0xc4cf6000},{0xc4cf8000},{0xc4cfa000},{0xc4cfc000},{0xc4cfe000}, -{0xc4d00000},{0xc4d02000},{0xc4d04000},{0xc4d06000},{0xc4d08000},{0xc4d0a000},{0xc4d0c000},{0xc4d0e000},{0xc4d10000},{0xc4d12000},{0xc4d14000},{0xc4d16000},{0xc4d18000},{0xc4d1a000},{0xc4d1c000},{0xc4d1e000},{0xc4d20000},{0xc4d22000},{0xc4d24000},{0xc4d26000},{0xc4d28000},{0xc4d2a000},{0xc4d2c000},{0xc4d2e000},{0xc4d30000},{0xc4d32000},{0xc4d34000},{0xc4d36000},{0xc4d38000},{0xc4d3a000},{0xc4d3c000},{0xc4d3e000}, -{0xc4d40000},{0xc4d42000},{0xc4d44000},{0xc4d46000},{0xc4d48000},{0xc4d4a000},{0xc4d4c000},{0xc4d4e000},{0xc4d50000},{0xc4d52000},{0xc4d54000},{0xc4d56000},{0xc4d58000},{0xc4d5a000},{0xc4d5c000},{0xc4d5e000},{0xc4d60000},{0xc4d62000},{0xc4d64000},{0xc4d66000},{0xc4d68000},{0xc4d6a000},{0xc4d6c000},{0xc4d6e000},{0xc4d70000},{0xc4d72000},{0xc4d74000},{0xc4d76000},{0xc4d78000},{0xc4d7a000},{0xc4d7c000},{0xc4d7e000}, -{0xc4d80000},{0xc4d82000},{0xc4d84000},{0xc4d86000},{0xc4d88000},{0xc4d8a000},{0xc4d8c000},{0xc4d8e000},{0xc4d90000},{0xc4d92000},{0xc4d94000},{0xc4d96000},{0xc4d98000},{0xc4d9a000},{0xc4d9c000},{0xc4d9e000},{0xc4da0000},{0xc4da2000},{0xc4da4000},{0xc4da6000},{0xc4da8000},{0xc4daa000},{0xc4dac000},{0xc4dae000},{0xc4db0000},{0xc4db2000},{0xc4db4000},{0xc4db6000},{0xc4db8000},{0xc4dba000},{0xc4dbc000},{0xc4dbe000}, -{0xc4dc0000},{0xc4dc2000},{0xc4dc4000},{0xc4dc6000},{0xc4dc8000},{0xc4dca000},{0xc4dcc000},{0xc4dce000},{0xc4dd0000},{0xc4dd2000},{0xc4dd4000},{0xc4dd6000},{0xc4dd8000},{0xc4dda000},{0xc4ddc000},{0xc4dde000},{0xc4de0000},{0xc4de2000},{0xc4de4000},{0xc4de6000},{0xc4de8000},{0xc4dea000},{0xc4dec000},{0xc4dee000},{0xc4df0000},{0xc4df2000},{0xc4df4000},{0xc4df6000},{0xc4df8000},{0xc4dfa000},{0xc4dfc000},{0xc4dfe000}, -{0xc4e00000},{0xc4e02000},{0xc4e04000},{0xc4e06000},{0xc4e08000},{0xc4e0a000},{0xc4e0c000},{0xc4e0e000},{0xc4e10000},{0xc4e12000},{0xc4e14000},{0xc4e16000},{0xc4e18000},{0xc4e1a000},{0xc4e1c000},{0xc4e1e000},{0xc4e20000},{0xc4e22000},{0xc4e24000},{0xc4e26000},{0xc4e28000},{0xc4e2a000},{0xc4e2c000},{0xc4e2e000},{0xc4e30000},{0xc4e32000},{0xc4e34000},{0xc4e36000},{0xc4e38000},{0xc4e3a000},{0xc4e3c000},{0xc4e3e000}, -{0xc4e40000},{0xc4e42000},{0xc4e44000},{0xc4e46000},{0xc4e48000},{0xc4e4a000},{0xc4e4c000},{0xc4e4e000},{0xc4e50000},{0xc4e52000},{0xc4e54000},{0xc4e56000},{0xc4e58000},{0xc4e5a000},{0xc4e5c000},{0xc4e5e000},{0xc4e60000},{0xc4e62000},{0xc4e64000},{0xc4e66000},{0xc4e68000},{0xc4e6a000},{0xc4e6c000},{0xc4e6e000},{0xc4e70000},{0xc4e72000},{0xc4e74000},{0xc4e76000},{0xc4e78000},{0xc4e7a000},{0xc4e7c000},{0xc4e7e000}, -{0xc4e80000},{0xc4e82000},{0xc4e84000},{0xc4e86000},{0xc4e88000},{0xc4e8a000},{0xc4e8c000},{0xc4e8e000},{0xc4e90000},{0xc4e92000},{0xc4e94000},{0xc4e96000},{0xc4e98000},{0xc4e9a000},{0xc4e9c000},{0xc4e9e000},{0xc4ea0000},{0xc4ea2000},{0xc4ea4000},{0xc4ea6000},{0xc4ea8000},{0xc4eaa000},{0xc4eac000},{0xc4eae000},{0xc4eb0000},{0xc4eb2000},{0xc4eb4000},{0xc4eb6000},{0xc4eb8000},{0xc4eba000},{0xc4ebc000},{0xc4ebe000}, -{0xc4ec0000},{0xc4ec2000},{0xc4ec4000},{0xc4ec6000},{0xc4ec8000},{0xc4eca000},{0xc4ecc000},{0xc4ece000},{0xc4ed0000},{0xc4ed2000},{0xc4ed4000},{0xc4ed6000},{0xc4ed8000},{0xc4eda000},{0xc4edc000},{0xc4ede000},{0xc4ee0000},{0xc4ee2000},{0xc4ee4000},{0xc4ee6000},{0xc4ee8000},{0xc4eea000},{0xc4eec000},{0xc4eee000},{0xc4ef0000},{0xc4ef2000},{0xc4ef4000},{0xc4ef6000},{0xc4ef8000},{0xc4efa000},{0xc4efc000},{0xc4efe000}, -{0xc4f00000},{0xc4f02000},{0xc4f04000},{0xc4f06000},{0xc4f08000},{0xc4f0a000},{0xc4f0c000},{0xc4f0e000},{0xc4f10000},{0xc4f12000},{0xc4f14000},{0xc4f16000},{0xc4f18000},{0xc4f1a000},{0xc4f1c000},{0xc4f1e000},{0xc4f20000},{0xc4f22000},{0xc4f24000},{0xc4f26000},{0xc4f28000},{0xc4f2a000},{0xc4f2c000},{0xc4f2e000},{0xc4f30000},{0xc4f32000},{0xc4f34000},{0xc4f36000},{0xc4f38000},{0xc4f3a000},{0xc4f3c000},{0xc4f3e000}, -{0xc4f40000},{0xc4f42000},{0xc4f44000},{0xc4f46000},{0xc4f48000},{0xc4f4a000},{0xc4f4c000},{0xc4f4e000},{0xc4f50000},{0xc4f52000},{0xc4f54000},{0xc4f56000},{0xc4f58000},{0xc4f5a000},{0xc4f5c000},{0xc4f5e000},{0xc4f60000},{0xc4f62000},{0xc4f64000},{0xc4f66000},{0xc4f68000},{0xc4f6a000},{0xc4f6c000},{0xc4f6e000},{0xc4f70000},{0xc4f72000},{0xc4f74000},{0xc4f76000},{0xc4f78000},{0xc4f7a000},{0xc4f7c000},{0xc4f7e000}, -{0xc4f80000},{0xc4f82000},{0xc4f84000},{0xc4f86000},{0xc4f88000},{0xc4f8a000},{0xc4f8c000},{0xc4f8e000},{0xc4f90000},{0xc4f92000},{0xc4f94000},{0xc4f96000},{0xc4f98000},{0xc4f9a000},{0xc4f9c000},{0xc4f9e000},{0xc4fa0000},{0xc4fa2000},{0xc4fa4000},{0xc4fa6000},{0xc4fa8000},{0xc4faa000},{0xc4fac000},{0xc4fae000},{0xc4fb0000},{0xc4fb2000},{0xc4fb4000},{0xc4fb6000},{0xc4fb8000},{0xc4fba000},{0xc4fbc000},{0xc4fbe000}, -{0xc4fc0000},{0xc4fc2000},{0xc4fc4000},{0xc4fc6000},{0xc4fc8000},{0xc4fca000},{0xc4fcc000},{0xc4fce000},{0xc4fd0000},{0xc4fd2000},{0xc4fd4000},{0xc4fd6000},{0xc4fd8000},{0xc4fda000},{0xc4fdc000},{0xc4fde000},{0xc4fe0000},{0xc4fe2000},{0xc4fe4000},{0xc4fe6000},{0xc4fe8000},{0xc4fea000},{0xc4fec000},{0xc4fee000},{0xc4ff0000},{0xc4ff2000},{0xc4ff4000},{0xc4ff6000},{0xc4ff8000},{0xc4ffa000},{0xc4ffc000},{0xc4ffe000}, -{0xc5000000},{0xc5002000},{0xc5004000},{0xc5006000},{0xc5008000},{0xc500a000},{0xc500c000},{0xc500e000},{0xc5010000},{0xc5012000},{0xc5014000},{0xc5016000},{0xc5018000},{0xc501a000},{0xc501c000},{0xc501e000},{0xc5020000},{0xc5022000},{0xc5024000},{0xc5026000},{0xc5028000},{0xc502a000},{0xc502c000},{0xc502e000},{0xc5030000},{0xc5032000},{0xc5034000},{0xc5036000},{0xc5038000},{0xc503a000},{0xc503c000},{0xc503e000}, -{0xc5040000},{0xc5042000},{0xc5044000},{0xc5046000},{0xc5048000},{0xc504a000},{0xc504c000},{0xc504e000},{0xc5050000},{0xc5052000},{0xc5054000},{0xc5056000},{0xc5058000},{0xc505a000},{0xc505c000},{0xc505e000},{0xc5060000},{0xc5062000},{0xc5064000},{0xc5066000},{0xc5068000},{0xc506a000},{0xc506c000},{0xc506e000},{0xc5070000},{0xc5072000},{0xc5074000},{0xc5076000},{0xc5078000},{0xc507a000},{0xc507c000},{0xc507e000}, -{0xc5080000},{0xc5082000},{0xc5084000},{0xc5086000},{0xc5088000},{0xc508a000},{0xc508c000},{0xc508e000},{0xc5090000},{0xc5092000},{0xc5094000},{0xc5096000},{0xc5098000},{0xc509a000},{0xc509c000},{0xc509e000},{0xc50a0000},{0xc50a2000},{0xc50a4000},{0xc50a6000},{0xc50a8000},{0xc50aa000},{0xc50ac000},{0xc50ae000},{0xc50b0000},{0xc50b2000},{0xc50b4000},{0xc50b6000},{0xc50b8000},{0xc50ba000},{0xc50bc000},{0xc50be000}, -{0xc50c0000},{0xc50c2000},{0xc50c4000},{0xc50c6000},{0xc50c8000},{0xc50ca000},{0xc50cc000},{0xc50ce000},{0xc50d0000},{0xc50d2000},{0xc50d4000},{0xc50d6000},{0xc50d8000},{0xc50da000},{0xc50dc000},{0xc50de000},{0xc50e0000},{0xc50e2000},{0xc50e4000},{0xc50e6000},{0xc50e8000},{0xc50ea000},{0xc50ec000},{0xc50ee000},{0xc50f0000},{0xc50f2000},{0xc50f4000},{0xc50f6000},{0xc50f8000},{0xc50fa000},{0xc50fc000},{0xc50fe000}, -{0xc5100000},{0xc5102000},{0xc5104000},{0xc5106000},{0xc5108000},{0xc510a000},{0xc510c000},{0xc510e000},{0xc5110000},{0xc5112000},{0xc5114000},{0xc5116000},{0xc5118000},{0xc511a000},{0xc511c000},{0xc511e000},{0xc5120000},{0xc5122000},{0xc5124000},{0xc5126000},{0xc5128000},{0xc512a000},{0xc512c000},{0xc512e000},{0xc5130000},{0xc5132000},{0xc5134000},{0xc5136000},{0xc5138000},{0xc513a000},{0xc513c000},{0xc513e000}, -{0xc5140000},{0xc5142000},{0xc5144000},{0xc5146000},{0xc5148000},{0xc514a000},{0xc514c000},{0xc514e000},{0xc5150000},{0xc5152000},{0xc5154000},{0xc5156000},{0xc5158000},{0xc515a000},{0xc515c000},{0xc515e000},{0xc5160000},{0xc5162000},{0xc5164000},{0xc5166000},{0xc5168000},{0xc516a000},{0xc516c000},{0xc516e000},{0xc5170000},{0xc5172000},{0xc5174000},{0xc5176000},{0xc5178000},{0xc517a000},{0xc517c000},{0xc517e000}, -{0xc5180000},{0xc5182000},{0xc5184000},{0xc5186000},{0xc5188000},{0xc518a000},{0xc518c000},{0xc518e000},{0xc5190000},{0xc5192000},{0xc5194000},{0xc5196000},{0xc5198000},{0xc519a000},{0xc519c000},{0xc519e000},{0xc51a0000},{0xc51a2000},{0xc51a4000},{0xc51a6000},{0xc51a8000},{0xc51aa000},{0xc51ac000},{0xc51ae000},{0xc51b0000},{0xc51b2000},{0xc51b4000},{0xc51b6000},{0xc51b8000},{0xc51ba000},{0xc51bc000},{0xc51be000}, -{0xc51c0000},{0xc51c2000},{0xc51c4000},{0xc51c6000},{0xc51c8000},{0xc51ca000},{0xc51cc000},{0xc51ce000},{0xc51d0000},{0xc51d2000},{0xc51d4000},{0xc51d6000},{0xc51d8000},{0xc51da000},{0xc51dc000},{0xc51de000},{0xc51e0000},{0xc51e2000},{0xc51e4000},{0xc51e6000},{0xc51e8000},{0xc51ea000},{0xc51ec000},{0xc51ee000},{0xc51f0000},{0xc51f2000},{0xc51f4000},{0xc51f6000},{0xc51f8000},{0xc51fa000},{0xc51fc000},{0xc51fe000}, -{0xc5200000},{0xc5202000},{0xc5204000},{0xc5206000},{0xc5208000},{0xc520a000},{0xc520c000},{0xc520e000},{0xc5210000},{0xc5212000},{0xc5214000},{0xc5216000},{0xc5218000},{0xc521a000},{0xc521c000},{0xc521e000},{0xc5220000},{0xc5222000},{0xc5224000},{0xc5226000},{0xc5228000},{0xc522a000},{0xc522c000},{0xc522e000},{0xc5230000},{0xc5232000},{0xc5234000},{0xc5236000},{0xc5238000},{0xc523a000},{0xc523c000},{0xc523e000}, -{0xc5240000},{0xc5242000},{0xc5244000},{0xc5246000},{0xc5248000},{0xc524a000},{0xc524c000},{0xc524e000},{0xc5250000},{0xc5252000},{0xc5254000},{0xc5256000},{0xc5258000},{0xc525a000},{0xc525c000},{0xc525e000},{0xc5260000},{0xc5262000},{0xc5264000},{0xc5266000},{0xc5268000},{0xc526a000},{0xc526c000},{0xc526e000},{0xc5270000},{0xc5272000},{0xc5274000},{0xc5276000},{0xc5278000},{0xc527a000},{0xc527c000},{0xc527e000}, -{0xc5280000},{0xc5282000},{0xc5284000},{0xc5286000},{0xc5288000},{0xc528a000},{0xc528c000},{0xc528e000},{0xc5290000},{0xc5292000},{0xc5294000},{0xc5296000},{0xc5298000},{0xc529a000},{0xc529c000},{0xc529e000},{0xc52a0000},{0xc52a2000},{0xc52a4000},{0xc52a6000},{0xc52a8000},{0xc52aa000},{0xc52ac000},{0xc52ae000},{0xc52b0000},{0xc52b2000},{0xc52b4000},{0xc52b6000},{0xc52b8000},{0xc52ba000},{0xc52bc000},{0xc52be000}, -{0xc52c0000},{0xc52c2000},{0xc52c4000},{0xc52c6000},{0xc52c8000},{0xc52ca000},{0xc52cc000},{0xc52ce000},{0xc52d0000},{0xc52d2000},{0xc52d4000},{0xc52d6000},{0xc52d8000},{0xc52da000},{0xc52dc000},{0xc52de000},{0xc52e0000},{0xc52e2000},{0xc52e4000},{0xc52e6000},{0xc52e8000},{0xc52ea000},{0xc52ec000},{0xc52ee000},{0xc52f0000},{0xc52f2000},{0xc52f4000},{0xc52f6000},{0xc52f8000},{0xc52fa000},{0xc52fc000},{0xc52fe000}, -{0xc5300000},{0xc5302000},{0xc5304000},{0xc5306000},{0xc5308000},{0xc530a000},{0xc530c000},{0xc530e000},{0xc5310000},{0xc5312000},{0xc5314000},{0xc5316000},{0xc5318000},{0xc531a000},{0xc531c000},{0xc531e000},{0xc5320000},{0xc5322000},{0xc5324000},{0xc5326000},{0xc5328000},{0xc532a000},{0xc532c000},{0xc532e000},{0xc5330000},{0xc5332000},{0xc5334000},{0xc5336000},{0xc5338000},{0xc533a000},{0xc533c000},{0xc533e000}, -{0xc5340000},{0xc5342000},{0xc5344000},{0xc5346000},{0xc5348000},{0xc534a000},{0xc534c000},{0xc534e000},{0xc5350000},{0xc5352000},{0xc5354000},{0xc5356000},{0xc5358000},{0xc535a000},{0xc535c000},{0xc535e000},{0xc5360000},{0xc5362000},{0xc5364000},{0xc5366000},{0xc5368000},{0xc536a000},{0xc536c000},{0xc536e000},{0xc5370000},{0xc5372000},{0xc5374000},{0xc5376000},{0xc5378000},{0xc537a000},{0xc537c000},{0xc537e000}, -{0xc5380000},{0xc5382000},{0xc5384000},{0xc5386000},{0xc5388000},{0xc538a000},{0xc538c000},{0xc538e000},{0xc5390000},{0xc5392000},{0xc5394000},{0xc5396000},{0xc5398000},{0xc539a000},{0xc539c000},{0xc539e000},{0xc53a0000},{0xc53a2000},{0xc53a4000},{0xc53a6000},{0xc53a8000},{0xc53aa000},{0xc53ac000},{0xc53ae000},{0xc53b0000},{0xc53b2000},{0xc53b4000},{0xc53b6000},{0xc53b8000},{0xc53ba000},{0xc53bc000},{0xc53be000}, -{0xc53c0000},{0xc53c2000},{0xc53c4000},{0xc53c6000},{0xc53c8000},{0xc53ca000},{0xc53cc000},{0xc53ce000},{0xc53d0000},{0xc53d2000},{0xc53d4000},{0xc53d6000},{0xc53d8000},{0xc53da000},{0xc53dc000},{0xc53de000},{0xc53e0000},{0xc53e2000},{0xc53e4000},{0xc53e6000},{0xc53e8000},{0xc53ea000},{0xc53ec000},{0xc53ee000},{0xc53f0000},{0xc53f2000},{0xc53f4000},{0xc53f6000},{0xc53f8000},{0xc53fa000},{0xc53fc000},{0xc53fe000}, -{0xc5400000},{0xc5402000},{0xc5404000},{0xc5406000},{0xc5408000},{0xc540a000},{0xc540c000},{0xc540e000},{0xc5410000},{0xc5412000},{0xc5414000},{0xc5416000},{0xc5418000},{0xc541a000},{0xc541c000},{0xc541e000},{0xc5420000},{0xc5422000},{0xc5424000},{0xc5426000},{0xc5428000},{0xc542a000},{0xc542c000},{0xc542e000},{0xc5430000},{0xc5432000},{0xc5434000},{0xc5436000},{0xc5438000},{0xc543a000},{0xc543c000},{0xc543e000}, -{0xc5440000},{0xc5442000},{0xc5444000},{0xc5446000},{0xc5448000},{0xc544a000},{0xc544c000},{0xc544e000},{0xc5450000},{0xc5452000},{0xc5454000},{0xc5456000},{0xc5458000},{0xc545a000},{0xc545c000},{0xc545e000},{0xc5460000},{0xc5462000},{0xc5464000},{0xc5466000},{0xc5468000},{0xc546a000},{0xc546c000},{0xc546e000},{0xc5470000},{0xc5472000},{0xc5474000},{0xc5476000},{0xc5478000},{0xc547a000},{0xc547c000},{0xc547e000}, -{0xc5480000},{0xc5482000},{0xc5484000},{0xc5486000},{0xc5488000},{0xc548a000},{0xc548c000},{0xc548e000},{0xc5490000},{0xc5492000},{0xc5494000},{0xc5496000},{0xc5498000},{0xc549a000},{0xc549c000},{0xc549e000},{0xc54a0000},{0xc54a2000},{0xc54a4000},{0xc54a6000},{0xc54a8000},{0xc54aa000},{0xc54ac000},{0xc54ae000},{0xc54b0000},{0xc54b2000},{0xc54b4000},{0xc54b6000},{0xc54b8000},{0xc54ba000},{0xc54bc000},{0xc54be000}, -{0xc54c0000},{0xc54c2000},{0xc54c4000},{0xc54c6000},{0xc54c8000},{0xc54ca000},{0xc54cc000},{0xc54ce000},{0xc54d0000},{0xc54d2000},{0xc54d4000},{0xc54d6000},{0xc54d8000},{0xc54da000},{0xc54dc000},{0xc54de000},{0xc54e0000},{0xc54e2000},{0xc54e4000},{0xc54e6000},{0xc54e8000},{0xc54ea000},{0xc54ec000},{0xc54ee000},{0xc54f0000},{0xc54f2000},{0xc54f4000},{0xc54f6000},{0xc54f8000},{0xc54fa000},{0xc54fc000},{0xc54fe000}, -{0xc5500000},{0xc5502000},{0xc5504000},{0xc5506000},{0xc5508000},{0xc550a000},{0xc550c000},{0xc550e000},{0xc5510000},{0xc5512000},{0xc5514000},{0xc5516000},{0xc5518000},{0xc551a000},{0xc551c000},{0xc551e000},{0xc5520000},{0xc5522000},{0xc5524000},{0xc5526000},{0xc5528000},{0xc552a000},{0xc552c000},{0xc552e000},{0xc5530000},{0xc5532000},{0xc5534000},{0xc5536000},{0xc5538000},{0xc553a000},{0xc553c000},{0xc553e000}, -{0xc5540000},{0xc5542000},{0xc5544000},{0xc5546000},{0xc5548000},{0xc554a000},{0xc554c000},{0xc554e000},{0xc5550000},{0xc5552000},{0xc5554000},{0xc5556000},{0xc5558000},{0xc555a000},{0xc555c000},{0xc555e000},{0xc5560000},{0xc5562000},{0xc5564000},{0xc5566000},{0xc5568000},{0xc556a000},{0xc556c000},{0xc556e000},{0xc5570000},{0xc5572000},{0xc5574000},{0xc5576000},{0xc5578000},{0xc557a000},{0xc557c000},{0xc557e000}, -{0xc5580000},{0xc5582000},{0xc5584000},{0xc5586000},{0xc5588000},{0xc558a000},{0xc558c000},{0xc558e000},{0xc5590000},{0xc5592000},{0xc5594000},{0xc5596000},{0xc5598000},{0xc559a000},{0xc559c000},{0xc559e000},{0xc55a0000},{0xc55a2000},{0xc55a4000},{0xc55a6000},{0xc55a8000},{0xc55aa000},{0xc55ac000},{0xc55ae000},{0xc55b0000},{0xc55b2000},{0xc55b4000},{0xc55b6000},{0xc55b8000},{0xc55ba000},{0xc55bc000},{0xc55be000}, -{0xc55c0000},{0xc55c2000},{0xc55c4000},{0xc55c6000},{0xc55c8000},{0xc55ca000},{0xc55cc000},{0xc55ce000},{0xc55d0000},{0xc55d2000},{0xc55d4000},{0xc55d6000},{0xc55d8000},{0xc55da000},{0xc55dc000},{0xc55de000},{0xc55e0000},{0xc55e2000},{0xc55e4000},{0xc55e6000},{0xc55e8000},{0xc55ea000},{0xc55ec000},{0xc55ee000},{0xc55f0000},{0xc55f2000},{0xc55f4000},{0xc55f6000},{0xc55f8000},{0xc55fa000},{0xc55fc000},{0xc55fe000}, -{0xc5600000},{0xc5602000},{0xc5604000},{0xc5606000},{0xc5608000},{0xc560a000},{0xc560c000},{0xc560e000},{0xc5610000},{0xc5612000},{0xc5614000},{0xc5616000},{0xc5618000},{0xc561a000},{0xc561c000},{0xc561e000},{0xc5620000},{0xc5622000},{0xc5624000},{0xc5626000},{0xc5628000},{0xc562a000},{0xc562c000},{0xc562e000},{0xc5630000},{0xc5632000},{0xc5634000},{0xc5636000},{0xc5638000},{0xc563a000},{0xc563c000},{0xc563e000}, -{0xc5640000},{0xc5642000},{0xc5644000},{0xc5646000},{0xc5648000},{0xc564a000},{0xc564c000},{0xc564e000},{0xc5650000},{0xc5652000},{0xc5654000},{0xc5656000},{0xc5658000},{0xc565a000},{0xc565c000},{0xc565e000},{0xc5660000},{0xc5662000},{0xc5664000},{0xc5666000},{0xc5668000},{0xc566a000},{0xc566c000},{0xc566e000},{0xc5670000},{0xc5672000},{0xc5674000},{0xc5676000},{0xc5678000},{0xc567a000},{0xc567c000},{0xc567e000}, -{0xc5680000},{0xc5682000},{0xc5684000},{0xc5686000},{0xc5688000},{0xc568a000},{0xc568c000},{0xc568e000},{0xc5690000},{0xc5692000},{0xc5694000},{0xc5696000},{0xc5698000},{0xc569a000},{0xc569c000},{0xc569e000},{0xc56a0000},{0xc56a2000},{0xc56a4000},{0xc56a6000},{0xc56a8000},{0xc56aa000},{0xc56ac000},{0xc56ae000},{0xc56b0000},{0xc56b2000},{0xc56b4000},{0xc56b6000},{0xc56b8000},{0xc56ba000},{0xc56bc000},{0xc56be000}, -{0xc56c0000},{0xc56c2000},{0xc56c4000},{0xc56c6000},{0xc56c8000},{0xc56ca000},{0xc56cc000},{0xc56ce000},{0xc56d0000},{0xc56d2000},{0xc56d4000},{0xc56d6000},{0xc56d8000},{0xc56da000},{0xc56dc000},{0xc56de000},{0xc56e0000},{0xc56e2000},{0xc56e4000},{0xc56e6000},{0xc56e8000},{0xc56ea000},{0xc56ec000},{0xc56ee000},{0xc56f0000},{0xc56f2000},{0xc56f4000},{0xc56f6000},{0xc56f8000},{0xc56fa000},{0xc56fc000},{0xc56fe000}, -{0xc5700000},{0xc5702000},{0xc5704000},{0xc5706000},{0xc5708000},{0xc570a000},{0xc570c000},{0xc570e000},{0xc5710000},{0xc5712000},{0xc5714000},{0xc5716000},{0xc5718000},{0xc571a000},{0xc571c000},{0xc571e000},{0xc5720000},{0xc5722000},{0xc5724000},{0xc5726000},{0xc5728000},{0xc572a000},{0xc572c000},{0xc572e000},{0xc5730000},{0xc5732000},{0xc5734000},{0xc5736000},{0xc5738000},{0xc573a000},{0xc573c000},{0xc573e000}, -{0xc5740000},{0xc5742000},{0xc5744000},{0xc5746000},{0xc5748000},{0xc574a000},{0xc574c000},{0xc574e000},{0xc5750000},{0xc5752000},{0xc5754000},{0xc5756000},{0xc5758000},{0xc575a000},{0xc575c000},{0xc575e000},{0xc5760000},{0xc5762000},{0xc5764000},{0xc5766000},{0xc5768000},{0xc576a000},{0xc576c000},{0xc576e000},{0xc5770000},{0xc5772000},{0xc5774000},{0xc5776000},{0xc5778000},{0xc577a000},{0xc577c000},{0xc577e000}, -{0xc5780000},{0xc5782000},{0xc5784000},{0xc5786000},{0xc5788000},{0xc578a000},{0xc578c000},{0xc578e000},{0xc5790000},{0xc5792000},{0xc5794000},{0xc5796000},{0xc5798000},{0xc579a000},{0xc579c000},{0xc579e000},{0xc57a0000},{0xc57a2000},{0xc57a4000},{0xc57a6000},{0xc57a8000},{0xc57aa000},{0xc57ac000},{0xc57ae000},{0xc57b0000},{0xc57b2000},{0xc57b4000},{0xc57b6000},{0xc57b8000},{0xc57ba000},{0xc57bc000},{0xc57be000}, -{0xc57c0000},{0xc57c2000},{0xc57c4000},{0xc57c6000},{0xc57c8000},{0xc57ca000},{0xc57cc000},{0xc57ce000},{0xc57d0000},{0xc57d2000},{0xc57d4000},{0xc57d6000},{0xc57d8000},{0xc57da000},{0xc57dc000},{0xc57de000},{0xc57e0000},{0xc57e2000},{0xc57e4000},{0xc57e6000},{0xc57e8000},{0xc57ea000},{0xc57ec000},{0xc57ee000},{0xc57f0000},{0xc57f2000},{0xc57f4000},{0xc57f6000},{0xc57f8000},{0xc57fa000},{0xc57fc000},{0xc57fe000}, -{0xc5800000},{0xc5802000},{0xc5804000},{0xc5806000},{0xc5808000},{0xc580a000},{0xc580c000},{0xc580e000},{0xc5810000},{0xc5812000},{0xc5814000},{0xc5816000},{0xc5818000},{0xc581a000},{0xc581c000},{0xc581e000},{0xc5820000},{0xc5822000},{0xc5824000},{0xc5826000},{0xc5828000},{0xc582a000},{0xc582c000},{0xc582e000},{0xc5830000},{0xc5832000},{0xc5834000},{0xc5836000},{0xc5838000},{0xc583a000},{0xc583c000},{0xc583e000}, -{0xc5840000},{0xc5842000},{0xc5844000},{0xc5846000},{0xc5848000},{0xc584a000},{0xc584c000},{0xc584e000},{0xc5850000},{0xc5852000},{0xc5854000},{0xc5856000},{0xc5858000},{0xc585a000},{0xc585c000},{0xc585e000},{0xc5860000},{0xc5862000},{0xc5864000},{0xc5866000},{0xc5868000},{0xc586a000},{0xc586c000},{0xc586e000},{0xc5870000},{0xc5872000},{0xc5874000},{0xc5876000},{0xc5878000},{0xc587a000},{0xc587c000},{0xc587e000}, -{0xc5880000},{0xc5882000},{0xc5884000},{0xc5886000},{0xc5888000},{0xc588a000},{0xc588c000},{0xc588e000},{0xc5890000},{0xc5892000},{0xc5894000},{0xc5896000},{0xc5898000},{0xc589a000},{0xc589c000},{0xc589e000},{0xc58a0000},{0xc58a2000},{0xc58a4000},{0xc58a6000},{0xc58a8000},{0xc58aa000},{0xc58ac000},{0xc58ae000},{0xc58b0000},{0xc58b2000},{0xc58b4000},{0xc58b6000},{0xc58b8000},{0xc58ba000},{0xc58bc000},{0xc58be000}, -{0xc58c0000},{0xc58c2000},{0xc58c4000},{0xc58c6000},{0xc58c8000},{0xc58ca000},{0xc58cc000},{0xc58ce000},{0xc58d0000},{0xc58d2000},{0xc58d4000},{0xc58d6000},{0xc58d8000},{0xc58da000},{0xc58dc000},{0xc58de000},{0xc58e0000},{0xc58e2000},{0xc58e4000},{0xc58e6000},{0xc58e8000},{0xc58ea000},{0xc58ec000},{0xc58ee000},{0xc58f0000},{0xc58f2000},{0xc58f4000},{0xc58f6000},{0xc58f8000},{0xc58fa000},{0xc58fc000},{0xc58fe000}, -{0xc5900000},{0xc5902000},{0xc5904000},{0xc5906000},{0xc5908000},{0xc590a000},{0xc590c000},{0xc590e000},{0xc5910000},{0xc5912000},{0xc5914000},{0xc5916000},{0xc5918000},{0xc591a000},{0xc591c000},{0xc591e000},{0xc5920000},{0xc5922000},{0xc5924000},{0xc5926000},{0xc5928000},{0xc592a000},{0xc592c000},{0xc592e000},{0xc5930000},{0xc5932000},{0xc5934000},{0xc5936000},{0xc5938000},{0xc593a000},{0xc593c000},{0xc593e000}, -{0xc5940000},{0xc5942000},{0xc5944000},{0xc5946000},{0xc5948000},{0xc594a000},{0xc594c000},{0xc594e000},{0xc5950000},{0xc5952000},{0xc5954000},{0xc5956000},{0xc5958000},{0xc595a000},{0xc595c000},{0xc595e000},{0xc5960000},{0xc5962000},{0xc5964000},{0xc5966000},{0xc5968000},{0xc596a000},{0xc596c000},{0xc596e000},{0xc5970000},{0xc5972000},{0xc5974000},{0xc5976000},{0xc5978000},{0xc597a000},{0xc597c000},{0xc597e000}, -{0xc5980000},{0xc5982000},{0xc5984000},{0xc5986000},{0xc5988000},{0xc598a000},{0xc598c000},{0xc598e000},{0xc5990000},{0xc5992000},{0xc5994000},{0xc5996000},{0xc5998000},{0xc599a000},{0xc599c000},{0xc599e000},{0xc59a0000},{0xc59a2000},{0xc59a4000},{0xc59a6000},{0xc59a8000},{0xc59aa000},{0xc59ac000},{0xc59ae000},{0xc59b0000},{0xc59b2000},{0xc59b4000},{0xc59b6000},{0xc59b8000},{0xc59ba000},{0xc59bc000},{0xc59be000}, -{0xc59c0000},{0xc59c2000},{0xc59c4000},{0xc59c6000},{0xc59c8000},{0xc59ca000},{0xc59cc000},{0xc59ce000},{0xc59d0000},{0xc59d2000},{0xc59d4000},{0xc59d6000},{0xc59d8000},{0xc59da000},{0xc59dc000},{0xc59de000},{0xc59e0000},{0xc59e2000},{0xc59e4000},{0xc59e6000},{0xc59e8000},{0xc59ea000},{0xc59ec000},{0xc59ee000},{0xc59f0000},{0xc59f2000},{0xc59f4000},{0xc59f6000},{0xc59f8000},{0xc59fa000},{0xc59fc000},{0xc59fe000}, -{0xc5a00000},{0xc5a02000},{0xc5a04000},{0xc5a06000},{0xc5a08000},{0xc5a0a000},{0xc5a0c000},{0xc5a0e000},{0xc5a10000},{0xc5a12000},{0xc5a14000},{0xc5a16000},{0xc5a18000},{0xc5a1a000},{0xc5a1c000},{0xc5a1e000},{0xc5a20000},{0xc5a22000},{0xc5a24000},{0xc5a26000},{0xc5a28000},{0xc5a2a000},{0xc5a2c000},{0xc5a2e000},{0xc5a30000},{0xc5a32000},{0xc5a34000},{0xc5a36000},{0xc5a38000},{0xc5a3a000},{0xc5a3c000},{0xc5a3e000}, -{0xc5a40000},{0xc5a42000},{0xc5a44000},{0xc5a46000},{0xc5a48000},{0xc5a4a000},{0xc5a4c000},{0xc5a4e000},{0xc5a50000},{0xc5a52000},{0xc5a54000},{0xc5a56000},{0xc5a58000},{0xc5a5a000},{0xc5a5c000},{0xc5a5e000},{0xc5a60000},{0xc5a62000},{0xc5a64000},{0xc5a66000},{0xc5a68000},{0xc5a6a000},{0xc5a6c000},{0xc5a6e000},{0xc5a70000},{0xc5a72000},{0xc5a74000},{0xc5a76000},{0xc5a78000},{0xc5a7a000},{0xc5a7c000},{0xc5a7e000}, -{0xc5a80000},{0xc5a82000},{0xc5a84000},{0xc5a86000},{0xc5a88000},{0xc5a8a000},{0xc5a8c000},{0xc5a8e000},{0xc5a90000},{0xc5a92000},{0xc5a94000},{0xc5a96000},{0xc5a98000},{0xc5a9a000},{0xc5a9c000},{0xc5a9e000},{0xc5aa0000},{0xc5aa2000},{0xc5aa4000},{0xc5aa6000},{0xc5aa8000},{0xc5aaa000},{0xc5aac000},{0xc5aae000},{0xc5ab0000},{0xc5ab2000},{0xc5ab4000},{0xc5ab6000},{0xc5ab8000},{0xc5aba000},{0xc5abc000},{0xc5abe000}, -{0xc5ac0000},{0xc5ac2000},{0xc5ac4000},{0xc5ac6000},{0xc5ac8000},{0xc5aca000},{0xc5acc000},{0xc5ace000},{0xc5ad0000},{0xc5ad2000},{0xc5ad4000},{0xc5ad6000},{0xc5ad8000},{0xc5ada000},{0xc5adc000},{0xc5ade000},{0xc5ae0000},{0xc5ae2000},{0xc5ae4000},{0xc5ae6000},{0xc5ae8000},{0xc5aea000},{0xc5aec000},{0xc5aee000},{0xc5af0000},{0xc5af2000},{0xc5af4000},{0xc5af6000},{0xc5af8000},{0xc5afa000},{0xc5afc000},{0xc5afe000}, -{0xc5b00000},{0xc5b02000},{0xc5b04000},{0xc5b06000},{0xc5b08000},{0xc5b0a000},{0xc5b0c000},{0xc5b0e000},{0xc5b10000},{0xc5b12000},{0xc5b14000},{0xc5b16000},{0xc5b18000},{0xc5b1a000},{0xc5b1c000},{0xc5b1e000},{0xc5b20000},{0xc5b22000},{0xc5b24000},{0xc5b26000},{0xc5b28000},{0xc5b2a000},{0xc5b2c000},{0xc5b2e000},{0xc5b30000},{0xc5b32000},{0xc5b34000},{0xc5b36000},{0xc5b38000},{0xc5b3a000},{0xc5b3c000},{0xc5b3e000}, -{0xc5b40000},{0xc5b42000},{0xc5b44000},{0xc5b46000},{0xc5b48000},{0xc5b4a000},{0xc5b4c000},{0xc5b4e000},{0xc5b50000},{0xc5b52000},{0xc5b54000},{0xc5b56000},{0xc5b58000},{0xc5b5a000},{0xc5b5c000},{0xc5b5e000},{0xc5b60000},{0xc5b62000},{0xc5b64000},{0xc5b66000},{0xc5b68000},{0xc5b6a000},{0xc5b6c000},{0xc5b6e000},{0xc5b70000},{0xc5b72000},{0xc5b74000},{0xc5b76000},{0xc5b78000},{0xc5b7a000},{0xc5b7c000},{0xc5b7e000}, -{0xc5b80000},{0xc5b82000},{0xc5b84000},{0xc5b86000},{0xc5b88000},{0xc5b8a000},{0xc5b8c000},{0xc5b8e000},{0xc5b90000},{0xc5b92000},{0xc5b94000},{0xc5b96000},{0xc5b98000},{0xc5b9a000},{0xc5b9c000},{0xc5b9e000},{0xc5ba0000},{0xc5ba2000},{0xc5ba4000},{0xc5ba6000},{0xc5ba8000},{0xc5baa000},{0xc5bac000},{0xc5bae000},{0xc5bb0000},{0xc5bb2000},{0xc5bb4000},{0xc5bb6000},{0xc5bb8000},{0xc5bba000},{0xc5bbc000},{0xc5bbe000}, -{0xc5bc0000},{0xc5bc2000},{0xc5bc4000},{0xc5bc6000},{0xc5bc8000},{0xc5bca000},{0xc5bcc000},{0xc5bce000},{0xc5bd0000},{0xc5bd2000},{0xc5bd4000},{0xc5bd6000},{0xc5bd8000},{0xc5bda000},{0xc5bdc000},{0xc5bde000},{0xc5be0000},{0xc5be2000},{0xc5be4000},{0xc5be6000},{0xc5be8000},{0xc5bea000},{0xc5bec000},{0xc5bee000},{0xc5bf0000},{0xc5bf2000},{0xc5bf4000},{0xc5bf6000},{0xc5bf8000},{0xc5bfa000},{0xc5bfc000},{0xc5bfe000}, -{0xc5c00000},{0xc5c02000},{0xc5c04000},{0xc5c06000},{0xc5c08000},{0xc5c0a000},{0xc5c0c000},{0xc5c0e000},{0xc5c10000},{0xc5c12000},{0xc5c14000},{0xc5c16000},{0xc5c18000},{0xc5c1a000},{0xc5c1c000},{0xc5c1e000},{0xc5c20000},{0xc5c22000},{0xc5c24000},{0xc5c26000},{0xc5c28000},{0xc5c2a000},{0xc5c2c000},{0xc5c2e000},{0xc5c30000},{0xc5c32000},{0xc5c34000},{0xc5c36000},{0xc5c38000},{0xc5c3a000},{0xc5c3c000},{0xc5c3e000}, -{0xc5c40000},{0xc5c42000},{0xc5c44000},{0xc5c46000},{0xc5c48000},{0xc5c4a000},{0xc5c4c000},{0xc5c4e000},{0xc5c50000},{0xc5c52000},{0xc5c54000},{0xc5c56000},{0xc5c58000},{0xc5c5a000},{0xc5c5c000},{0xc5c5e000},{0xc5c60000},{0xc5c62000},{0xc5c64000},{0xc5c66000},{0xc5c68000},{0xc5c6a000},{0xc5c6c000},{0xc5c6e000},{0xc5c70000},{0xc5c72000},{0xc5c74000},{0xc5c76000},{0xc5c78000},{0xc5c7a000},{0xc5c7c000},{0xc5c7e000}, -{0xc5c80000},{0xc5c82000},{0xc5c84000},{0xc5c86000},{0xc5c88000},{0xc5c8a000},{0xc5c8c000},{0xc5c8e000},{0xc5c90000},{0xc5c92000},{0xc5c94000},{0xc5c96000},{0xc5c98000},{0xc5c9a000},{0xc5c9c000},{0xc5c9e000},{0xc5ca0000},{0xc5ca2000},{0xc5ca4000},{0xc5ca6000},{0xc5ca8000},{0xc5caa000},{0xc5cac000},{0xc5cae000},{0xc5cb0000},{0xc5cb2000},{0xc5cb4000},{0xc5cb6000},{0xc5cb8000},{0xc5cba000},{0xc5cbc000},{0xc5cbe000}, -{0xc5cc0000},{0xc5cc2000},{0xc5cc4000},{0xc5cc6000},{0xc5cc8000},{0xc5cca000},{0xc5ccc000},{0xc5cce000},{0xc5cd0000},{0xc5cd2000},{0xc5cd4000},{0xc5cd6000},{0xc5cd8000},{0xc5cda000},{0xc5cdc000},{0xc5cde000},{0xc5ce0000},{0xc5ce2000},{0xc5ce4000},{0xc5ce6000},{0xc5ce8000},{0xc5cea000},{0xc5cec000},{0xc5cee000},{0xc5cf0000},{0xc5cf2000},{0xc5cf4000},{0xc5cf6000},{0xc5cf8000},{0xc5cfa000},{0xc5cfc000},{0xc5cfe000}, -{0xc5d00000},{0xc5d02000},{0xc5d04000},{0xc5d06000},{0xc5d08000},{0xc5d0a000},{0xc5d0c000},{0xc5d0e000},{0xc5d10000},{0xc5d12000},{0xc5d14000},{0xc5d16000},{0xc5d18000},{0xc5d1a000},{0xc5d1c000},{0xc5d1e000},{0xc5d20000},{0xc5d22000},{0xc5d24000},{0xc5d26000},{0xc5d28000},{0xc5d2a000},{0xc5d2c000},{0xc5d2e000},{0xc5d30000},{0xc5d32000},{0xc5d34000},{0xc5d36000},{0xc5d38000},{0xc5d3a000},{0xc5d3c000},{0xc5d3e000}, -{0xc5d40000},{0xc5d42000},{0xc5d44000},{0xc5d46000},{0xc5d48000},{0xc5d4a000},{0xc5d4c000},{0xc5d4e000},{0xc5d50000},{0xc5d52000},{0xc5d54000},{0xc5d56000},{0xc5d58000},{0xc5d5a000},{0xc5d5c000},{0xc5d5e000},{0xc5d60000},{0xc5d62000},{0xc5d64000},{0xc5d66000},{0xc5d68000},{0xc5d6a000},{0xc5d6c000},{0xc5d6e000},{0xc5d70000},{0xc5d72000},{0xc5d74000},{0xc5d76000},{0xc5d78000},{0xc5d7a000},{0xc5d7c000},{0xc5d7e000}, -{0xc5d80000},{0xc5d82000},{0xc5d84000},{0xc5d86000},{0xc5d88000},{0xc5d8a000},{0xc5d8c000},{0xc5d8e000},{0xc5d90000},{0xc5d92000},{0xc5d94000},{0xc5d96000},{0xc5d98000},{0xc5d9a000},{0xc5d9c000},{0xc5d9e000},{0xc5da0000},{0xc5da2000},{0xc5da4000},{0xc5da6000},{0xc5da8000},{0xc5daa000},{0xc5dac000},{0xc5dae000},{0xc5db0000},{0xc5db2000},{0xc5db4000},{0xc5db6000},{0xc5db8000},{0xc5dba000},{0xc5dbc000},{0xc5dbe000}, -{0xc5dc0000},{0xc5dc2000},{0xc5dc4000},{0xc5dc6000},{0xc5dc8000},{0xc5dca000},{0xc5dcc000},{0xc5dce000},{0xc5dd0000},{0xc5dd2000},{0xc5dd4000},{0xc5dd6000},{0xc5dd8000},{0xc5dda000},{0xc5ddc000},{0xc5dde000},{0xc5de0000},{0xc5de2000},{0xc5de4000},{0xc5de6000},{0xc5de8000},{0xc5dea000},{0xc5dec000},{0xc5dee000},{0xc5df0000},{0xc5df2000},{0xc5df4000},{0xc5df6000},{0xc5df8000},{0xc5dfa000},{0xc5dfc000},{0xc5dfe000}, -{0xc5e00000},{0xc5e02000},{0xc5e04000},{0xc5e06000},{0xc5e08000},{0xc5e0a000},{0xc5e0c000},{0xc5e0e000},{0xc5e10000},{0xc5e12000},{0xc5e14000},{0xc5e16000},{0xc5e18000},{0xc5e1a000},{0xc5e1c000},{0xc5e1e000},{0xc5e20000},{0xc5e22000},{0xc5e24000},{0xc5e26000},{0xc5e28000},{0xc5e2a000},{0xc5e2c000},{0xc5e2e000},{0xc5e30000},{0xc5e32000},{0xc5e34000},{0xc5e36000},{0xc5e38000},{0xc5e3a000},{0xc5e3c000},{0xc5e3e000}, -{0xc5e40000},{0xc5e42000},{0xc5e44000},{0xc5e46000},{0xc5e48000},{0xc5e4a000},{0xc5e4c000},{0xc5e4e000},{0xc5e50000},{0xc5e52000},{0xc5e54000},{0xc5e56000},{0xc5e58000},{0xc5e5a000},{0xc5e5c000},{0xc5e5e000},{0xc5e60000},{0xc5e62000},{0xc5e64000},{0xc5e66000},{0xc5e68000},{0xc5e6a000},{0xc5e6c000},{0xc5e6e000},{0xc5e70000},{0xc5e72000},{0xc5e74000},{0xc5e76000},{0xc5e78000},{0xc5e7a000},{0xc5e7c000},{0xc5e7e000}, -{0xc5e80000},{0xc5e82000},{0xc5e84000},{0xc5e86000},{0xc5e88000},{0xc5e8a000},{0xc5e8c000},{0xc5e8e000},{0xc5e90000},{0xc5e92000},{0xc5e94000},{0xc5e96000},{0xc5e98000},{0xc5e9a000},{0xc5e9c000},{0xc5e9e000},{0xc5ea0000},{0xc5ea2000},{0xc5ea4000},{0xc5ea6000},{0xc5ea8000},{0xc5eaa000},{0xc5eac000},{0xc5eae000},{0xc5eb0000},{0xc5eb2000},{0xc5eb4000},{0xc5eb6000},{0xc5eb8000},{0xc5eba000},{0xc5ebc000},{0xc5ebe000}, -{0xc5ec0000},{0xc5ec2000},{0xc5ec4000},{0xc5ec6000},{0xc5ec8000},{0xc5eca000},{0xc5ecc000},{0xc5ece000},{0xc5ed0000},{0xc5ed2000},{0xc5ed4000},{0xc5ed6000},{0xc5ed8000},{0xc5eda000},{0xc5edc000},{0xc5ede000},{0xc5ee0000},{0xc5ee2000},{0xc5ee4000},{0xc5ee6000},{0xc5ee8000},{0xc5eea000},{0xc5eec000},{0xc5eee000},{0xc5ef0000},{0xc5ef2000},{0xc5ef4000},{0xc5ef6000},{0xc5ef8000},{0xc5efa000},{0xc5efc000},{0xc5efe000}, -{0xc5f00000},{0xc5f02000},{0xc5f04000},{0xc5f06000},{0xc5f08000},{0xc5f0a000},{0xc5f0c000},{0xc5f0e000},{0xc5f10000},{0xc5f12000},{0xc5f14000},{0xc5f16000},{0xc5f18000},{0xc5f1a000},{0xc5f1c000},{0xc5f1e000},{0xc5f20000},{0xc5f22000},{0xc5f24000},{0xc5f26000},{0xc5f28000},{0xc5f2a000},{0xc5f2c000},{0xc5f2e000},{0xc5f30000},{0xc5f32000},{0xc5f34000},{0xc5f36000},{0xc5f38000},{0xc5f3a000},{0xc5f3c000},{0xc5f3e000}, -{0xc5f40000},{0xc5f42000},{0xc5f44000},{0xc5f46000},{0xc5f48000},{0xc5f4a000},{0xc5f4c000},{0xc5f4e000},{0xc5f50000},{0xc5f52000},{0xc5f54000},{0xc5f56000},{0xc5f58000},{0xc5f5a000},{0xc5f5c000},{0xc5f5e000},{0xc5f60000},{0xc5f62000},{0xc5f64000},{0xc5f66000},{0xc5f68000},{0xc5f6a000},{0xc5f6c000},{0xc5f6e000},{0xc5f70000},{0xc5f72000},{0xc5f74000},{0xc5f76000},{0xc5f78000},{0xc5f7a000},{0xc5f7c000},{0xc5f7e000}, -{0xc5f80000},{0xc5f82000},{0xc5f84000},{0xc5f86000},{0xc5f88000},{0xc5f8a000},{0xc5f8c000},{0xc5f8e000},{0xc5f90000},{0xc5f92000},{0xc5f94000},{0xc5f96000},{0xc5f98000},{0xc5f9a000},{0xc5f9c000},{0xc5f9e000},{0xc5fa0000},{0xc5fa2000},{0xc5fa4000},{0xc5fa6000},{0xc5fa8000},{0xc5faa000},{0xc5fac000},{0xc5fae000},{0xc5fb0000},{0xc5fb2000},{0xc5fb4000},{0xc5fb6000},{0xc5fb8000},{0xc5fba000},{0xc5fbc000},{0xc5fbe000}, -{0xc5fc0000},{0xc5fc2000},{0xc5fc4000},{0xc5fc6000},{0xc5fc8000},{0xc5fca000},{0xc5fcc000},{0xc5fce000},{0xc5fd0000},{0xc5fd2000},{0xc5fd4000},{0xc5fd6000},{0xc5fd8000},{0xc5fda000},{0xc5fdc000},{0xc5fde000},{0xc5fe0000},{0xc5fe2000},{0xc5fe4000},{0xc5fe6000},{0xc5fe8000},{0xc5fea000},{0xc5fec000},{0xc5fee000},{0xc5ff0000},{0xc5ff2000},{0xc5ff4000},{0xc5ff6000},{0xc5ff8000},{0xc5ffa000},{0xc5ffc000},{0xc5ffe000}, -{0xc6000000},{0xc6002000},{0xc6004000},{0xc6006000},{0xc6008000},{0xc600a000},{0xc600c000},{0xc600e000},{0xc6010000},{0xc6012000},{0xc6014000},{0xc6016000},{0xc6018000},{0xc601a000},{0xc601c000},{0xc601e000},{0xc6020000},{0xc6022000},{0xc6024000},{0xc6026000},{0xc6028000},{0xc602a000},{0xc602c000},{0xc602e000},{0xc6030000},{0xc6032000},{0xc6034000},{0xc6036000},{0xc6038000},{0xc603a000},{0xc603c000},{0xc603e000}, -{0xc6040000},{0xc6042000},{0xc6044000},{0xc6046000},{0xc6048000},{0xc604a000},{0xc604c000},{0xc604e000},{0xc6050000},{0xc6052000},{0xc6054000},{0xc6056000},{0xc6058000},{0xc605a000},{0xc605c000},{0xc605e000},{0xc6060000},{0xc6062000},{0xc6064000},{0xc6066000},{0xc6068000},{0xc606a000},{0xc606c000},{0xc606e000},{0xc6070000},{0xc6072000},{0xc6074000},{0xc6076000},{0xc6078000},{0xc607a000},{0xc607c000},{0xc607e000}, -{0xc6080000},{0xc6082000},{0xc6084000},{0xc6086000},{0xc6088000},{0xc608a000},{0xc608c000},{0xc608e000},{0xc6090000},{0xc6092000},{0xc6094000},{0xc6096000},{0xc6098000},{0xc609a000},{0xc609c000},{0xc609e000},{0xc60a0000},{0xc60a2000},{0xc60a4000},{0xc60a6000},{0xc60a8000},{0xc60aa000},{0xc60ac000},{0xc60ae000},{0xc60b0000},{0xc60b2000},{0xc60b4000},{0xc60b6000},{0xc60b8000},{0xc60ba000},{0xc60bc000},{0xc60be000}, -{0xc60c0000},{0xc60c2000},{0xc60c4000},{0xc60c6000},{0xc60c8000},{0xc60ca000},{0xc60cc000},{0xc60ce000},{0xc60d0000},{0xc60d2000},{0xc60d4000},{0xc60d6000},{0xc60d8000},{0xc60da000},{0xc60dc000},{0xc60de000},{0xc60e0000},{0xc60e2000},{0xc60e4000},{0xc60e6000},{0xc60e8000},{0xc60ea000},{0xc60ec000},{0xc60ee000},{0xc60f0000},{0xc60f2000},{0xc60f4000},{0xc60f6000},{0xc60f8000},{0xc60fa000},{0xc60fc000},{0xc60fe000}, -{0xc6100000},{0xc6102000},{0xc6104000},{0xc6106000},{0xc6108000},{0xc610a000},{0xc610c000},{0xc610e000},{0xc6110000},{0xc6112000},{0xc6114000},{0xc6116000},{0xc6118000},{0xc611a000},{0xc611c000},{0xc611e000},{0xc6120000},{0xc6122000},{0xc6124000},{0xc6126000},{0xc6128000},{0xc612a000},{0xc612c000},{0xc612e000},{0xc6130000},{0xc6132000},{0xc6134000},{0xc6136000},{0xc6138000},{0xc613a000},{0xc613c000},{0xc613e000}, -{0xc6140000},{0xc6142000},{0xc6144000},{0xc6146000},{0xc6148000},{0xc614a000},{0xc614c000},{0xc614e000},{0xc6150000},{0xc6152000},{0xc6154000},{0xc6156000},{0xc6158000},{0xc615a000},{0xc615c000},{0xc615e000},{0xc6160000},{0xc6162000},{0xc6164000},{0xc6166000},{0xc6168000},{0xc616a000},{0xc616c000},{0xc616e000},{0xc6170000},{0xc6172000},{0xc6174000},{0xc6176000},{0xc6178000},{0xc617a000},{0xc617c000},{0xc617e000}, -{0xc6180000},{0xc6182000},{0xc6184000},{0xc6186000},{0xc6188000},{0xc618a000},{0xc618c000},{0xc618e000},{0xc6190000},{0xc6192000},{0xc6194000},{0xc6196000},{0xc6198000},{0xc619a000},{0xc619c000},{0xc619e000},{0xc61a0000},{0xc61a2000},{0xc61a4000},{0xc61a6000},{0xc61a8000},{0xc61aa000},{0xc61ac000},{0xc61ae000},{0xc61b0000},{0xc61b2000},{0xc61b4000},{0xc61b6000},{0xc61b8000},{0xc61ba000},{0xc61bc000},{0xc61be000}, -{0xc61c0000},{0xc61c2000},{0xc61c4000},{0xc61c6000},{0xc61c8000},{0xc61ca000},{0xc61cc000},{0xc61ce000},{0xc61d0000},{0xc61d2000},{0xc61d4000},{0xc61d6000},{0xc61d8000},{0xc61da000},{0xc61dc000},{0xc61de000},{0xc61e0000},{0xc61e2000},{0xc61e4000},{0xc61e6000},{0xc61e8000},{0xc61ea000},{0xc61ec000},{0xc61ee000},{0xc61f0000},{0xc61f2000},{0xc61f4000},{0xc61f6000},{0xc61f8000},{0xc61fa000},{0xc61fc000},{0xc61fe000}, -{0xc6200000},{0xc6202000},{0xc6204000},{0xc6206000},{0xc6208000},{0xc620a000},{0xc620c000},{0xc620e000},{0xc6210000},{0xc6212000},{0xc6214000},{0xc6216000},{0xc6218000},{0xc621a000},{0xc621c000},{0xc621e000},{0xc6220000},{0xc6222000},{0xc6224000},{0xc6226000},{0xc6228000},{0xc622a000},{0xc622c000},{0xc622e000},{0xc6230000},{0xc6232000},{0xc6234000},{0xc6236000},{0xc6238000},{0xc623a000},{0xc623c000},{0xc623e000}, -{0xc6240000},{0xc6242000},{0xc6244000},{0xc6246000},{0xc6248000},{0xc624a000},{0xc624c000},{0xc624e000},{0xc6250000},{0xc6252000},{0xc6254000},{0xc6256000},{0xc6258000},{0xc625a000},{0xc625c000},{0xc625e000},{0xc6260000},{0xc6262000},{0xc6264000},{0xc6266000},{0xc6268000},{0xc626a000},{0xc626c000},{0xc626e000},{0xc6270000},{0xc6272000},{0xc6274000},{0xc6276000},{0xc6278000},{0xc627a000},{0xc627c000},{0xc627e000}, -{0xc6280000},{0xc6282000},{0xc6284000},{0xc6286000},{0xc6288000},{0xc628a000},{0xc628c000},{0xc628e000},{0xc6290000},{0xc6292000},{0xc6294000},{0xc6296000},{0xc6298000},{0xc629a000},{0xc629c000},{0xc629e000},{0xc62a0000},{0xc62a2000},{0xc62a4000},{0xc62a6000},{0xc62a8000},{0xc62aa000},{0xc62ac000},{0xc62ae000},{0xc62b0000},{0xc62b2000},{0xc62b4000},{0xc62b6000},{0xc62b8000},{0xc62ba000},{0xc62bc000},{0xc62be000}, -{0xc62c0000},{0xc62c2000},{0xc62c4000},{0xc62c6000},{0xc62c8000},{0xc62ca000},{0xc62cc000},{0xc62ce000},{0xc62d0000},{0xc62d2000},{0xc62d4000},{0xc62d6000},{0xc62d8000},{0xc62da000},{0xc62dc000},{0xc62de000},{0xc62e0000},{0xc62e2000},{0xc62e4000},{0xc62e6000},{0xc62e8000},{0xc62ea000},{0xc62ec000},{0xc62ee000},{0xc62f0000},{0xc62f2000},{0xc62f4000},{0xc62f6000},{0xc62f8000},{0xc62fa000},{0xc62fc000},{0xc62fe000}, -{0xc6300000},{0xc6302000},{0xc6304000},{0xc6306000},{0xc6308000},{0xc630a000},{0xc630c000},{0xc630e000},{0xc6310000},{0xc6312000},{0xc6314000},{0xc6316000},{0xc6318000},{0xc631a000},{0xc631c000},{0xc631e000},{0xc6320000},{0xc6322000},{0xc6324000},{0xc6326000},{0xc6328000},{0xc632a000},{0xc632c000},{0xc632e000},{0xc6330000},{0xc6332000},{0xc6334000},{0xc6336000},{0xc6338000},{0xc633a000},{0xc633c000},{0xc633e000}, -{0xc6340000},{0xc6342000},{0xc6344000},{0xc6346000},{0xc6348000},{0xc634a000},{0xc634c000},{0xc634e000},{0xc6350000},{0xc6352000},{0xc6354000},{0xc6356000},{0xc6358000},{0xc635a000},{0xc635c000},{0xc635e000},{0xc6360000},{0xc6362000},{0xc6364000},{0xc6366000},{0xc6368000},{0xc636a000},{0xc636c000},{0xc636e000},{0xc6370000},{0xc6372000},{0xc6374000},{0xc6376000},{0xc6378000},{0xc637a000},{0xc637c000},{0xc637e000}, -{0xc6380000},{0xc6382000},{0xc6384000},{0xc6386000},{0xc6388000},{0xc638a000},{0xc638c000},{0xc638e000},{0xc6390000},{0xc6392000},{0xc6394000},{0xc6396000},{0xc6398000},{0xc639a000},{0xc639c000},{0xc639e000},{0xc63a0000},{0xc63a2000},{0xc63a4000},{0xc63a6000},{0xc63a8000},{0xc63aa000},{0xc63ac000},{0xc63ae000},{0xc63b0000},{0xc63b2000},{0xc63b4000},{0xc63b6000},{0xc63b8000},{0xc63ba000},{0xc63bc000},{0xc63be000}, -{0xc63c0000},{0xc63c2000},{0xc63c4000},{0xc63c6000},{0xc63c8000},{0xc63ca000},{0xc63cc000},{0xc63ce000},{0xc63d0000},{0xc63d2000},{0xc63d4000},{0xc63d6000},{0xc63d8000},{0xc63da000},{0xc63dc000},{0xc63de000},{0xc63e0000},{0xc63e2000},{0xc63e4000},{0xc63e6000},{0xc63e8000},{0xc63ea000},{0xc63ec000},{0xc63ee000},{0xc63f0000},{0xc63f2000},{0xc63f4000},{0xc63f6000},{0xc63f8000},{0xc63fa000},{0xc63fc000},{0xc63fe000}, -{0xc6400000},{0xc6402000},{0xc6404000},{0xc6406000},{0xc6408000},{0xc640a000},{0xc640c000},{0xc640e000},{0xc6410000},{0xc6412000},{0xc6414000},{0xc6416000},{0xc6418000},{0xc641a000},{0xc641c000},{0xc641e000},{0xc6420000},{0xc6422000},{0xc6424000},{0xc6426000},{0xc6428000},{0xc642a000},{0xc642c000},{0xc642e000},{0xc6430000},{0xc6432000},{0xc6434000},{0xc6436000},{0xc6438000},{0xc643a000},{0xc643c000},{0xc643e000}, -{0xc6440000},{0xc6442000},{0xc6444000},{0xc6446000},{0xc6448000},{0xc644a000},{0xc644c000},{0xc644e000},{0xc6450000},{0xc6452000},{0xc6454000},{0xc6456000},{0xc6458000},{0xc645a000},{0xc645c000},{0xc645e000},{0xc6460000},{0xc6462000},{0xc6464000},{0xc6466000},{0xc6468000},{0xc646a000},{0xc646c000},{0xc646e000},{0xc6470000},{0xc6472000},{0xc6474000},{0xc6476000},{0xc6478000},{0xc647a000},{0xc647c000},{0xc647e000}, -{0xc6480000},{0xc6482000},{0xc6484000},{0xc6486000},{0xc6488000},{0xc648a000},{0xc648c000},{0xc648e000},{0xc6490000},{0xc6492000},{0xc6494000},{0xc6496000},{0xc6498000},{0xc649a000},{0xc649c000},{0xc649e000},{0xc64a0000},{0xc64a2000},{0xc64a4000},{0xc64a6000},{0xc64a8000},{0xc64aa000},{0xc64ac000},{0xc64ae000},{0xc64b0000},{0xc64b2000},{0xc64b4000},{0xc64b6000},{0xc64b8000},{0xc64ba000},{0xc64bc000},{0xc64be000}, -{0xc64c0000},{0xc64c2000},{0xc64c4000},{0xc64c6000},{0xc64c8000},{0xc64ca000},{0xc64cc000},{0xc64ce000},{0xc64d0000},{0xc64d2000},{0xc64d4000},{0xc64d6000},{0xc64d8000},{0xc64da000},{0xc64dc000},{0xc64de000},{0xc64e0000},{0xc64e2000},{0xc64e4000},{0xc64e6000},{0xc64e8000},{0xc64ea000},{0xc64ec000},{0xc64ee000},{0xc64f0000},{0xc64f2000},{0xc64f4000},{0xc64f6000},{0xc64f8000},{0xc64fa000},{0xc64fc000},{0xc64fe000}, -{0xc6500000},{0xc6502000},{0xc6504000},{0xc6506000},{0xc6508000},{0xc650a000},{0xc650c000},{0xc650e000},{0xc6510000},{0xc6512000},{0xc6514000},{0xc6516000},{0xc6518000},{0xc651a000},{0xc651c000},{0xc651e000},{0xc6520000},{0xc6522000},{0xc6524000},{0xc6526000},{0xc6528000},{0xc652a000},{0xc652c000},{0xc652e000},{0xc6530000},{0xc6532000},{0xc6534000},{0xc6536000},{0xc6538000},{0xc653a000},{0xc653c000},{0xc653e000}, -{0xc6540000},{0xc6542000},{0xc6544000},{0xc6546000},{0xc6548000},{0xc654a000},{0xc654c000},{0xc654e000},{0xc6550000},{0xc6552000},{0xc6554000},{0xc6556000},{0xc6558000},{0xc655a000},{0xc655c000},{0xc655e000},{0xc6560000},{0xc6562000},{0xc6564000},{0xc6566000},{0xc6568000},{0xc656a000},{0xc656c000},{0xc656e000},{0xc6570000},{0xc6572000},{0xc6574000},{0xc6576000},{0xc6578000},{0xc657a000},{0xc657c000},{0xc657e000}, -{0xc6580000},{0xc6582000},{0xc6584000},{0xc6586000},{0xc6588000},{0xc658a000},{0xc658c000},{0xc658e000},{0xc6590000},{0xc6592000},{0xc6594000},{0xc6596000},{0xc6598000},{0xc659a000},{0xc659c000},{0xc659e000},{0xc65a0000},{0xc65a2000},{0xc65a4000},{0xc65a6000},{0xc65a8000},{0xc65aa000},{0xc65ac000},{0xc65ae000},{0xc65b0000},{0xc65b2000},{0xc65b4000},{0xc65b6000},{0xc65b8000},{0xc65ba000},{0xc65bc000},{0xc65be000}, -{0xc65c0000},{0xc65c2000},{0xc65c4000},{0xc65c6000},{0xc65c8000},{0xc65ca000},{0xc65cc000},{0xc65ce000},{0xc65d0000},{0xc65d2000},{0xc65d4000},{0xc65d6000},{0xc65d8000},{0xc65da000},{0xc65dc000},{0xc65de000},{0xc65e0000},{0xc65e2000},{0xc65e4000},{0xc65e6000},{0xc65e8000},{0xc65ea000},{0xc65ec000},{0xc65ee000},{0xc65f0000},{0xc65f2000},{0xc65f4000},{0xc65f6000},{0xc65f8000},{0xc65fa000},{0xc65fc000},{0xc65fe000}, -{0xc6600000},{0xc6602000},{0xc6604000},{0xc6606000},{0xc6608000},{0xc660a000},{0xc660c000},{0xc660e000},{0xc6610000},{0xc6612000},{0xc6614000},{0xc6616000},{0xc6618000},{0xc661a000},{0xc661c000},{0xc661e000},{0xc6620000},{0xc6622000},{0xc6624000},{0xc6626000},{0xc6628000},{0xc662a000},{0xc662c000},{0xc662e000},{0xc6630000},{0xc6632000},{0xc6634000},{0xc6636000},{0xc6638000},{0xc663a000},{0xc663c000},{0xc663e000}, -{0xc6640000},{0xc6642000},{0xc6644000},{0xc6646000},{0xc6648000},{0xc664a000},{0xc664c000},{0xc664e000},{0xc6650000},{0xc6652000},{0xc6654000},{0xc6656000},{0xc6658000},{0xc665a000},{0xc665c000},{0xc665e000},{0xc6660000},{0xc6662000},{0xc6664000},{0xc6666000},{0xc6668000},{0xc666a000},{0xc666c000},{0xc666e000},{0xc6670000},{0xc6672000},{0xc6674000},{0xc6676000},{0xc6678000},{0xc667a000},{0xc667c000},{0xc667e000}, -{0xc6680000},{0xc6682000},{0xc6684000},{0xc6686000},{0xc6688000},{0xc668a000},{0xc668c000},{0xc668e000},{0xc6690000},{0xc6692000},{0xc6694000},{0xc6696000},{0xc6698000},{0xc669a000},{0xc669c000},{0xc669e000},{0xc66a0000},{0xc66a2000},{0xc66a4000},{0xc66a6000},{0xc66a8000},{0xc66aa000},{0xc66ac000},{0xc66ae000},{0xc66b0000},{0xc66b2000},{0xc66b4000},{0xc66b6000},{0xc66b8000},{0xc66ba000},{0xc66bc000},{0xc66be000}, -{0xc66c0000},{0xc66c2000},{0xc66c4000},{0xc66c6000},{0xc66c8000},{0xc66ca000},{0xc66cc000},{0xc66ce000},{0xc66d0000},{0xc66d2000},{0xc66d4000},{0xc66d6000},{0xc66d8000},{0xc66da000},{0xc66dc000},{0xc66de000},{0xc66e0000},{0xc66e2000},{0xc66e4000},{0xc66e6000},{0xc66e8000},{0xc66ea000},{0xc66ec000},{0xc66ee000},{0xc66f0000},{0xc66f2000},{0xc66f4000},{0xc66f6000},{0xc66f8000},{0xc66fa000},{0xc66fc000},{0xc66fe000}, -{0xc6700000},{0xc6702000},{0xc6704000},{0xc6706000},{0xc6708000},{0xc670a000},{0xc670c000},{0xc670e000},{0xc6710000},{0xc6712000},{0xc6714000},{0xc6716000},{0xc6718000},{0xc671a000},{0xc671c000},{0xc671e000},{0xc6720000},{0xc6722000},{0xc6724000},{0xc6726000},{0xc6728000},{0xc672a000},{0xc672c000},{0xc672e000},{0xc6730000},{0xc6732000},{0xc6734000},{0xc6736000},{0xc6738000},{0xc673a000},{0xc673c000},{0xc673e000}, -{0xc6740000},{0xc6742000},{0xc6744000},{0xc6746000},{0xc6748000},{0xc674a000},{0xc674c000},{0xc674e000},{0xc6750000},{0xc6752000},{0xc6754000},{0xc6756000},{0xc6758000},{0xc675a000},{0xc675c000},{0xc675e000},{0xc6760000},{0xc6762000},{0xc6764000},{0xc6766000},{0xc6768000},{0xc676a000},{0xc676c000},{0xc676e000},{0xc6770000},{0xc6772000},{0xc6774000},{0xc6776000},{0xc6778000},{0xc677a000},{0xc677c000},{0xc677e000}, -{0xc6780000},{0xc6782000},{0xc6784000},{0xc6786000},{0xc6788000},{0xc678a000},{0xc678c000},{0xc678e000},{0xc6790000},{0xc6792000},{0xc6794000},{0xc6796000},{0xc6798000},{0xc679a000},{0xc679c000},{0xc679e000},{0xc67a0000},{0xc67a2000},{0xc67a4000},{0xc67a6000},{0xc67a8000},{0xc67aa000},{0xc67ac000},{0xc67ae000},{0xc67b0000},{0xc67b2000},{0xc67b4000},{0xc67b6000},{0xc67b8000},{0xc67ba000},{0xc67bc000},{0xc67be000}, -{0xc67c0000},{0xc67c2000},{0xc67c4000},{0xc67c6000},{0xc67c8000},{0xc67ca000},{0xc67cc000},{0xc67ce000},{0xc67d0000},{0xc67d2000},{0xc67d4000},{0xc67d6000},{0xc67d8000},{0xc67da000},{0xc67dc000},{0xc67de000},{0xc67e0000},{0xc67e2000},{0xc67e4000},{0xc67e6000},{0xc67e8000},{0xc67ea000},{0xc67ec000},{0xc67ee000},{0xc67f0000},{0xc67f2000},{0xc67f4000},{0xc67f6000},{0xc67f8000},{0xc67fa000},{0xc67fc000},{0xc67fe000}, -{0xc6800000},{0xc6802000},{0xc6804000},{0xc6806000},{0xc6808000},{0xc680a000},{0xc680c000},{0xc680e000},{0xc6810000},{0xc6812000},{0xc6814000},{0xc6816000},{0xc6818000},{0xc681a000},{0xc681c000},{0xc681e000},{0xc6820000},{0xc6822000},{0xc6824000},{0xc6826000},{0xc6828000},{0xc682a000},{0xc682c000},{0xc682e000},{0xc6830000},{0xc6832000},{0xc6834000},{0xc6836000},{0xc6838000},{0xc683a000},{0xc683c000},{0xc683e000}, -{0xc6840000},{0xc6842000},{0xc6844000},{0xc6846000},{0xc6848000},{0xc684a000},{0xc684c000},{0xc684e000},{0xc6850000},{0xc6852000},{0xc6854000},{0xc6856000},{0xc6858000},{0xc685a000},{0xc685c000},{0xc685e000},{0xc6860000},{0xc6862000},{0xc6864000},{0xc6866000},{0xc6868000},{0xc686a000},{0xc686c000},{0xc686e000},{0xc6870000},{0xc6872000},{0xc6874000},{0xc6876000},{0xc6878000},{0xc687a000},{0xc687c000},{0xc687e000}, -{0xc6880000},{0xc6882000},{0xc6884000},{0xc6886000},{0xc6888000},{0xc688a000},{0xc688c000},{0xc688e000},{0xc6890000},{0xc6892000},{0xc6894000},{0xc6896000},{0xc6898000},{0xc689a000},{0xc689c000},{0xc689e000},{0xc68a0000},{0xc68a2000},{0xc68a4000},{0xc68a6000},{0xc68a8000},{0xc68aa000},{0xc68ac000},{0xc68ae000},{0xc68b0000},{0xc68b2000},{0xc68b4000},{0xc68b6000},{0xc68b8000},{0xc68ba000},{0xc68bc000},{0xc68be000}, -{0xc68c0000},{0xc68c2000},{0xc68c4000},{0xc68c6000},{0xc68c8000},{0xc68ca000},{0xc68cc000},{0xc68ce000},{0xc68d0000},{0xc68d2000},{0xc68d4000},{0xc68d6000},{0xc68d8000},{0xc68da000},{0xc68dc000},{0xc68de000},{0xc68e0000},{0xc68e2000},{0xc68e4000},{0xc68e6000},{0xc68e8000},{0xc68ea000},{0xc68ec000},{0xc68ee000},{0xc68f0000},{0xc68f2000},{0xc68f4000},{0xc68f6000},{0xc68f8000},{0xc68fa000},{0xc68fc000},{0xc68fe000}, -{0xc6900000},{0xc6902000},{0xc6904000},{0xc6906000},{0xc6908000},{0xc690a000},{0xc690c000},{0xc690e000},{0xc6910000},{0xc6912000},{0xc6914000},{0xc6916000},{0xc6918000},{0xc691a000},{0xc691c000},{0xc691e000},{0xc6920000},{0xc6922000},{0xc6924000},{0xc6926000},{0xc6928000},{0xc692a000},{0xc692c000},{0xc692e000},{0xc6930000},{0xc6932000},{0xc6934000},{0xc6936000},{0xc6938000},{0xc693a000},{0xc693c000},{0xc693e000}, -{0xc6940000},{0xc6942000},{0xc6944000},{0xc6946000},{0xc6948000},{0xc694a000},{0xc694c000},{0xc694e000},{0xc6950000},{0xc6952000},{0xc6954000},{0xc6956000},{0xc6958000},{0xc695a000},{0xc695c000},{0xc695e000},{0xc6960000},{0xc6962000},{0xc6964000},{0xc6966000},{0xc6968000},{0xc696a000},{0xc696c000},{0xc696e000},{0xc6970000},{0xc6972000},{0xc6974000},{0xc6976000},{0xc6978000},{0xc697a000},{0xc697c000},{0xc697e000}, -{0xc6980000},{0xc6982000},{0xc6984000},{0xc6986000},{0xc6988000},{0xc698a000},{0xc698c000},{0xc698e000},{0xc6990000},{0xc6992000},{0xc6994000},{0xc6996000},{0xc6998000},{0xc699a000},{0xc699c000},{0xc699e000},{0xc69a0000},{0xc69a2000},{0xc69a4000},{0xc69a6000},{0xc69a8000},{0xc69aa000},{0xc69ac000},{0xc69ae000},{0xc69b0000},{0xc69b2000},{0xc69b4000},{0xc69b6000},{0xc69b8000},{0xc69ba000},{0xc69bc000},{0xc69be000}, -{0xc69c0000},{0xc69c2000},{0xc69c4000},{0xc69c6000},{0xc69c8000},{0xc69ca000},{0xc69cc000},{0xc69ce000},{0xc69d0000},{0xc69d2000},{0xc69d4000},{0xc69d6000},{0xc69d8000},{0xc69da000},{0xc69dc000},{0xc69de000},{0xc69e0000},{0xc69e2000},{0xc69e4000},{0xc69e6000},{0xc69e8000},{0xc69ea000},{0xc69ec000},{0xc69ee000},{0xc69f0000},{0xc69f2000},{0xc69f4000},{0xc69f6000},{0xc69f8000},{0xc69fa000},{0xc69fc000},{0xc69fe000}, -{0xc6a00000},{0xc6a02000},{0xc6a04000},{0xc6a06000},{0xc6a08000},{0xc6a0a000},{0xc6a0c000},{0xc6a0e000},{0xc6a10000},{0xc6a12000},{0xc6a14000},{0xc6a16000},{0xc6a18000},{0xc6a1a000},{0xc6a1c000},{0xc6a1e000},{0xc6a20000},{0xc6a22000},{0xc6a24000},{0xc6a26000},{0xc6a28000},{0xc6a2a000},{0xc6a2c000},{0xc6a2e000},{0xc6a30000},{0xc6a32000},{0xc6a34000},{0xc6a36000},{0xc6a38000},{0xc6a3a000},{0xc6a3c000},{0xc6a3e000}, -{0xc6a40000},{0xc6a42000},{0xc6a44000},{0xc6a46000},{0xc6a48000},{0xc6a4a000},{0xc6a4c000},{0xc6a4e000},{0xc6a50000},{0xc6a52000},{0xc6a54000},{0xc6a56000},{0xc6a58000},{0xc6a5a000},{0xc6a5c000},{0xc6a5e000},{0xc6a60000},{0xc6a62000},{0xc6a64000},{0xc6a66000},{0xc6a68000},{0xc6a6a000},{0xc6a6c000},{0xc6a6e000},{0xc6a70000},{0xc6a72000},{0xc6a74000},{0xc6a76000},{0xc6a78000},{0xc6a7a000},{0xc6a7c000},{0xc6a7e000}, -{0xc6a80000},{0xc6a82000},{0xc6a84000},{0xc6a86000},{0xc6a88000},{0xc6a8a000},{0xc6a8c000},{0xc6a8e000},{0xc6a90000},{0xc6a92000},{0xc6a94000},{0xc6a96000},{0xc6a98000},{0xc6a9a000},{0xc6a9c000},{0xc6a9e000},{0xc6aa0000},{0xc6aa2000},{0xc6aa4000},{0xc6aa6000},{0xc6aa8000},{0xc6aaa000},{0xc6aac000},{0xc6aae000},{0xc6ab0000},{0xc6ab2000},{0xc6ab4000},{0xc6ab6000},{0xc6ab8000},{0xc6aba000},{0xc6abc000},{0xc6abe000}, -{0xc6ac0000},{0xc6ac2000},{0xc6ac4000},{0xc6ac6000},{0xc6ac8000},{0xc6aca000},{0xc6acc000},{0xc6ace000},{0xc6ad0000},{0xc6ad2000},{0xc6ad4000},{0xc6ad6000},{0xc6ad8000},{0xc6ada000},{0xc6adc000},{0xc6ade000},{0xc6ae0000},{0xc6ae2000},{0xc6ae4000},{0xc6ae6000},{0xc6ae8000},{0xc6aea000},{0xc6aec000},{0xc6aee000},{0xc6af0000},{0xc6af2000},{0xc6af4000},{0xc6af6000},{0xc6af8000},{0xc6afa000},{0xc6afc000},{0xc6afe000}, -{0xc6b00000},{0xc6b02000},{0xc6b04000},{0xc6b06000},{0xc6b08000},{0xc6b0a000},{0xc6b0c000},{0xc6b0e000},{0xc6b10000},{0xc6b12000},{0xc6b14000},{0xc6b16000},{0xc6b18000},{0xc6b1a000},{0xc6b1c000},{0xc6b1e000},{0xc6b20000},{0xc6b22000},{0xc6b24000},{0xc6b26000},{0xc6b28000},{0xc6b2a000},{0xc6b2c000},{0xc6b2e000},{0xc6b30000},{0xc6b32000},{0xc6b34000},{0xc6b36000},{0xc6b38000},{0xc6b3a000},{0xc6b3c000},{0xc6b3e000}, -{0xc6b40000},{0xc6b42000},{0xc6b44000},{0xc6b46000},{0xc6b48000},{0xc6b4a000},{0xc6b4c000},{0xc6b4e000},{0xc6b50000},{0xc6b52000},{0xc6b54000},{0xc6b56000},{0xc6b58000},{0xc6b5a000},{0xc6b5c000},{0xc6b5e000},{0xc6b60000},{0xc6b62000},{0xc6b64000},{0xc6b66000},{0xc6b68000},{0xc6b6a000},{0xc6b6c000},{0xc6b6e000},{0xc6b70000},{0xc6b72000},{0xc6b74000},{0xc6b76000},{0xc6b78000},{0xc6b7a000},{0xc6b7c000},{0xc6b7e000}, -{0xc6b80000},{0xc6b82000},{0xc6b84000},{0xc6b86000},{0xc6b88000},{0xc6b8a000},{0xc6b8c000},{0xc6b8e000},{0xc6b90000},{0xc6b92000},{0xc6b94000},{0xc6b96000},{0xc6b98000},{0xc6b9a000},{0xc6b9c000},{0xc6b9e000},{0xc6ba0000},{0xc6ba2000},{0xc6ba4000},{0xc6ba6000},{0xc6ba8000},{0xc6baa000},{0xc6bac000},{0xc6bae000},{0xc6bb0000},{0xc6bb2000},{0xc6bb4000},{0xc6bb6000},{0xc6bb8000},{0xc6bba000},{0xc6bbc000},{0xc6bbe000}, -{0xc6bc0000},{0xc6bc2000},{0xc6bc4000},{0xc6bc6000},{0xc6bc8000},{0xc6bca000},{0xc6bcc000},{0xc6bce000},{0xc6bd0000},{0xc6bd2000},{0xc6bd4000},{0xc6bd6000},{0xc6bd8000},{0xc6bda000},{0xc6bdc000},{0xc6bde000},{0xc6be0000},{0xc6be2000},{0xc6be4000},{0xc6be6000},{0xc6be8000},{0xc6bea000},{0xc6bec000},{0xc6bee000},{0xc6bf0000},{0xc6bf2000},{0xc6bf4000},{0xc6bf6000},{0xc6bf8000},{0xc6bfa000},{0xc6bfc000},{0xc6bfe000}, -{0xc6c00000},{0xc6c02000},{0xc6c04000},{0xc6c06000},{0xc6c08000},{0xc6c0a000},{0xc6c0c000},{0xc6c0e000},{0xc6c10000},{0xc6c12000},{0xc6c14000},{0xc6c16000},{0xc6c18000},{0xc6c1a000},{0xc6c1c000},{0xc6c1e000},{0xc6c20000},{0xc6c22000},{0xc6c24000},{0xc6c26000},{0xc6c28000},{0xc6c2a000},{0xc6c2c000},{0xc6c2e000},{0xc6c30000},{0xc6c32000},{0xc6c34000},{0xc6c36000},{0xc6c38000},{0xc6c3a000},{0xc6c3c000},{0xc6c3e000}, -{0xc6c40000},{0xc6c42000},{0xc6c44000},{0xc6c46000},{0xc6c48000},{0xc6c4a000},{0xc6c4c000},{0xc6c4e000},{0xc6c50000},{0xc6c52000},{0xc6c54000},{0xc6c56000},{0xc6c58000},{0xc6c5a000},{0xc6c5c000},{0xc6c5e000},{0xc6c60000},{0xc6c62000},{0xc6c64000},{0xc6c66000},{0xc6c68000},{0xc6c6a000},{0xc6c6c000},{0xc6c6e000},{0xc6c70000},{0xc6c72000},{0xc6c74000},{0xc6c76000},{0xc6c78000},{0xc6c7a000},{0xc6c7c000},{0xc6c7e000}, -{0xc6c80000},{0xc6c82000},{0xc6c84000},{0xc6c86000},{0xc6c88000},{0xc6c8a000},{0xc6c8c000},{0xc6c8e000},{0xc6c90000},{0xc6c92000},{0xc6c94000},{0xc6c96000},{0xc6c98000},{0xc6c9a000},{0xc6c9c000},{0xc6c9e000},{0xc6ca0000},{0xc6ca2000},{0xc6ca4000},{0xc6ca6000},{0xc6ca8000},{0xc6caa000},{0xc6cac000},{0xc6cae000},{0xc6cb0000},{0xc6cb2000},{0xc6cb4000},{0xc6cb6000},{0xc6cb8000},{0xc6cba000},{0xc6cbc000},{0xc6cbe000}, -{0xc6cc0000},{0xc6cc2000},{0xc6cc4000},{0xc6cc6000},{0xc6cc8000},{0xc6cca000},{0xc6ccc000},{0xc6cce000},{0xc6cd0000},{0xc6cd2000},{0xc6cd4000},{0xc6cd6000},{0xc6cd8000},{0xc6cda000},{0xc6cdc000},{0xc6cde000},{0xc6ce0000},{0xc6ce2000},{0xc6ce4000},{0xc6ce6000},{0xc6ce8000},{0xc6cea000},{0xc6cec000},{0xc6cee000},{0xc6cf0000},{0xc6cf2000},{0xc6cf4000},{0xc6cf6000},{0xc6cf8000},{0xc6cfa000},{0xc6cfc000},{0xc6cfe000}, -{0xc6d00000},{0xc6d02000},{0xc6d04000},{0xc6d06000},{0xc6d08000},{0xc6d0a000},{0xc6d0c000},{0xc6d0e000},{0xc6d10000},{0xc6d12000},{0xc6d14000},{0xc6d16000},{0xc6d18000},{0xc6d1a000},{0xc6d1c000},{0xc6d1e000},{0xc6d20000},{0xc6d22000},{0xc6d24000},{0xc6d26000},{0xc6d28000},{0xc6d2a000},{0xc6d2c000},{0xc6d2e000},{0xc6d30000},{0xc6d32000},{0xc6d34000},{0xc6d36000},{0xc6d38000},{0xc6d3a000},{0xc6d3c000},{0xc6d3e000}, -{0xc6d40000},{0xc6d42000},{0xc6d44000},{0xc6d46000},{0xc6d48000},{0xc6d4a000},{0xc6d4c000},{0xc6d4e000},{0xc6d50000},{0xc6d52000},{0xc6d54000},{0xc6d56000},{0xc6d58000},{0xc6d5a000},{0xc6d5c000},{0xc6d5e000},{0xc6d60000},{0xc6d62000},{0xc6d64000},{0xc6d66000},{0xc6d68000},{0xc6d6a000},{0xc6d6c000},{0xc6d6e000},{0xc6d70000},{0xc6d72000},{0xc6d74000},{0xc6d76000},{0xc6d78000},{0xc6d7a000},{0xc6d7c000},{0xc6d7e000}, -{0xc6d80000},{0xc6d82000},{0xc6d84000},{0xc6d86000},{0xc6d88000},{0xc6d8a000},{0xc6d8c000},{0xc6d8e000},{0xc6d90000},{0xc6d92000},{0xc6d94000},{0xc6d96000},{0xc6d98000},{0xc6d9a000},{0xc6d9c000},{0xc6d9e000},{0xc6da0000},{0xc6da2000},{0xc6da4000},{0xc6da6000},{0xc6da8000},{0xc6daa000},{0xc6dac000},{0xc6dae000},{0xc6db0000},{0xc6db2000},{0xc6db4000},{0xc6db6000},{0xc6db8000},{0xc6dba000},{0xc6dbc000},{0xc6dbe000}, -{0xc6dc0000},{0xc6dc2000},{0xc6dc4000},{0xc6dc6000},{0xc6dc8000},{0xc6dca000},{0xc6dcc000},{0xc6dce000},{0xc6dd0000},{0xc6dd2000},{0xc6dd4000},{0xc6dd6000},{0xc6dd8000},{0xc6dda000},{0xc6ddc000},{0xc6dde000},{0xc6de0000},{0xc6de2000},{0xc6de4000},{0xc6de6000},{0xc6de8000},{0xc6dea000},{0xc6dec000},{0xc6dee000},{0xc6df0000},{0xc6df2000},{0xc6df4000},{0xc6df6000},{0xc6df8000},{0xc6dfa000},{0xc6dfc000},{0xc6dfe000}, -{0xc6e00000},{0xc6e02000},{0xc6e04000},{0xc6e06000},{0xc6e08000},{0xc6e0a000},{0xc6e0c000},{0xc6e0e000},{0xc6e10000},{0xc6e12000},{0xc6e14000},{0xc6e16000},{0xc6e18000},{0xc6e1a000},{0xc6e1c000},{0xc6e1e000},{0xc6e20000},{0xc6e22000},{0xc6e24000},{0xc6e26000},{0xc6e28000},{0xc6e2a000},{0xc6e2c000},{0xc6e2e000},{0xc6e30000},{0xc6e32000},{0xc6e34000},{0xc6e36000},{0xc6e38000},{0xc6e3a000},{0xc6e3c000},{0xc6e3e000}, -{0xc6e40000},{0xc6e42000},{0xc6e44000},{0xc6e46000},{0xc6e48000},{0xc6e4a000},{0xc6e4c000},{0xc6e4e000},{0xc6e50000},{0xc6e52000},{0xc6e54000},{0xc6e56000},{0xc6e58000},{0xc6e5a000},{0xc6e5c000},{0xc6e5e000},{0xc6e60000},{0xc6e62000},{0xc6e64000},{0xc6e66000},{0xc6e68000},{0xc6e6a000},{0xc6e6c000},{0xc6e6e000},{0xc6e70000},{0xc6e72000},{0xc6e74000},{0xc6e76000},{0xc6e78000},{0xc6e7a000},{0xc6e7c000},{0xc6e7e000}, -{0xc6e80000},{0xc6e82000},{0xc6e84000},{0xc6e86000},{0xc6e88000},{0xc6e8a000},{0xc6e8c000},{0xc6e8e000},{0xc6e90000},{0xc6e92000},{0xc6e94000},{0xc6e96000},{0xc6e98000},{0xc6e9a000},{0xc6e9c000},{0xc6e9e000},{0xc6ea0000},{0xc6ea2000},{0xc6ea4000},{0xc6ea6000},{0xc6ea8000},{0xc6eaa000},{0xc6eac000},{0xc6eae000},{0xc6eb0000},{0xc6eb2000},{0xc6eb4000},{0xc6eb6000},{0xc6eb8000},{0xc6eba000},{0xc6ebc000},{0xc6ebe000}, -{0xc6ec0000},{0xc6ec2000},{0xc6ec4000},{0xc6ec6000},{0xc6ec8000},{0xc6eca000},{0xc6ecc000},{0xc6ece000},{0xc6ed0000},{0xc6ed2000},{0xc6ed4000},{0xc6ed6000},{0xc6ed8000},{0xc6eda000},{0xc6edc000},{0xc6ede000},{0xc6ee0000},{0xc6ee2000},{0xc6ee4000},{0xc6ee6000},{0xc6ee8000},{0xc6eea000},{0xc6eec000},{0xc6eee000},{0xc6ef0000},{0xc6ef2000},{0xc6ef4000},{0xc6ef6000},{0xc6ef8000},{0xc6efa000},{0xc6efc000},{0xc6efe000}, -{0xc6f00000},{0xc6f02000},{0xc6f04000},{0xc6f06000},{0xc6f08000},{0xc6f0a000},{0xc6f0c000},{0xc6f0e000},{0xc6f10000},{0xc6f12000},{0xc6f14000},{0xc6f16000},{0xc6f18000},{0xc6f1a000},{0xc6f1c000},{0xc6f1e000},{0xc6f20000},{0xc6f22000},{0xc6f24000},{0xc6f26000},{0xc6f28000},{0xc6f2a000},{0xc6f2c000},{0xc6f2e000},{0xc6f30000},{0xc6f32000},{0xc6f34000},{0xc6f36000},{0xc6f38000},{0xc6f3a000},{0xc6f3c000},{0xc6f3e000}, -{0xc6f40000},{0xc6f42000},{0xc6f44000},{0xc6f46000},{0xc6f48000},{0xc6f4a000},{0xc6f4c000},{0xc6f4e000},{0xc6f50000},{0xc6f52000},{0xc6f54000},{0xc6f56000},{0xc6f58000},{0xc6f5a000},{0xc6f5c000},{0xc6f5e000},{0xc6f60000},{0xc6f62000},{0xc6f64000},{0xc6f66000},{0xc6f68000},{0xc6f6a000},{0xc6f6c000},{0xc6f6e000},{0xc6f70000},{0xc6f72000},{0xc6f74000},{0xc6f76000},{0xc6f78000},{0xc6f7a000},{0xc6f7c000},{0xc6f7e000}, -{0xc6f80000},{0xc6f82000},{0xc6f84000},{0xc6f86000},{0xc6f88000},{0xc6f8a000},{0xc6f8c000},{0xc6f8e000},{0xc6f90000},{0xc6f92000},{0xc6f94000},{0xc6f96000},{0xc6f98000},{0xc6f9a000},{0xc6f9c000},{0xc6f9e000},{0xc6fa0000},{0xc6fa2000},{0xc6fa4000},{0xc6fa6000},{0xc6fa8000},{0xc6faa000},{0xc6fac000},{0xc6fae000},{0xc6fb0000},{0xc6fb2000},{0xc6fb4000},{0xc6fb6000},{0xc6fb8000},{0xc6fba000},{0xc6fbc000},{0xc6fbe000}, -{0xc6fc0000},{0xc6fc2000},{0xc6fc4000},{0xc6fc6000},{0xc6fc8000},{0xc6fca000},{0xc6fcc000},{0xc6fce000},{0xc6fd0000},{0xc6fd2000},{0xc6fd4000},{0xc6fd6000},{0xc6fd8000},{0xc6fda000},{0xc6fdc000},{0xc6fde000},{0xc6fe0000},{0xc6fe2000},{0xc6fe4000},{0xc6fe6000},{0xc6fe8000},{0xc6fea000},{0xc6fec000},{0xc6fee000},{0xc6ff0000},{0xc6ff2000},{0xc6ff4000},{0xc6ff6000},{0xc6ff8000},{0xc6ffa000},{0xc6ffc000},{0xc6ffe000}, -{0xc7000000},{0xc7002000},{0xc7004000},{0xc7006000},{0xc7008000},{0xc700a000},{0xc700c000},{0xc700e000},{0xc7010000},{0xc7012000},{0xc7014000},{0xc7016000},{0xc7018000},{0xc701a000},{0xc701c000},{0xc701e000},{0xc7020000},{0xc7022000},{0xc7024000},{0xc7026000},{0xc7028000},{0xc702a000},{0xc702c000},{0xc702e000},{0xc7030000},{0xc7032000},{0xc7034000},{0xc7036000},{0xc7038000},{0xc703a000},{0xc703c000},{0xc703e000}, -{0xc7040000},{0xc7042000},{0xc7044000},{0xc7046000},{0xc7048000},{0xc704a000},{0xc704c000},{0xc704e000},{0xc7050000},{0xc7052000},{0xc7054000},{0xc7056000},{0xc7058000},{0xc705a000},{0xc705c000},{0xc705e000},{0xc7060000},{0xc7062000},{0xc7064000},{0xc7066000},{0xc7068000},{0xc706a000},{0xc706c000},{0xc706e000},{0xc7070000},{0xc7072000},{0xc7074000},{0xc7076000},{0xc7078000},{0xc707a000},{0xc707c000},{0xc707e000}, -{0xc7080000},{0xc7082000},{0xc7084000},{0xc7086000},{0xc7088000},{0xc708a000},{0xc708c000},{0xc708e000},{0xc7090000},{0xc7092000},{0xc7094000},{0xc7096000},{0xc7098000},{0xc709a000},{0xc709c000},{0xc709e000},{0xc70a0000},{0xc70a2000},{0xc70a4000},{0xc70a6000},{0xc70a8000},{0xc70aa000},{0xc70ac000},{0xc70ae000},{0xc70b0000},{0xc70b2000},{0xc70b4000},{0xc70b6000},{0xc70b8000},{0xc70ba000},{0xc70bc000},{0xc70be000}, -{0xc70c0000},{0xc70c2000},{0xc70c4000},{0xc70c6000},{0xc70c8000},{0xc70ca000},{0xc70cc000},{0xc70ce000},{0xc70d0000},{0xc70d2000},{0xc70d4000},{0xc70d6000},{0xc70d8000},{0xc70da000},{0xc70dc000},{0xc70de000},{0xc70e0000},{0xc70e2000},{0xc70e4000},{0xc70e6000},{0xc70e8000},{0xc70ea000},{0xc70ec000},{0xc70ee000},{0xc70f0000},{0xc70f2000},{0xc70f4000},{0xc70f6000},{0xc70f8000},{0xc70fa000},{0xc70fc000},{0xc70fe000}, -{0xc7100000},{0xc7102000},{0xc7104000},{0xc7106000},{0xc7108000},{0xc710a000},{0xc710c000},{0xc710e000},{0xc7110000},{0xc7112000},{0xc7114000},{0xc7116000},{0xc7118000},{0xc711a000},{0xc711c000},{0xc711e000},{0xc7120000},{0xc7122000},{0xc7124000},{0xc7126000},{0xc7128000},{0xc712a000},{0xc712c000},{0xc712e000},{0xc7130000},{0xc7132000},{0xc7134000},{0xc7136000},{0xc7138000},{0xc713a000},{0xc713c000},{0xc713e000}, -{0xc7140000},{0xc7142000},{0xc7144000},{0xc7146000},{0xc7148000},{0xc714a000},{0xc714c000},{0xc714e000},{0xc7150000},{0xc7152000},{0xc7154000},{0xc7156000},{0xc7158000},{0xc715a000},{0xc715c000},{0xc715e000},{0xc7160000},{0xc7162000},{0xc7164000},{0xc7166000},{0xc7168000},{0xc716a000},{0xc716c000},{0xc716e000},{0xc7170000},{0xc7172000},{0xc7174000},{0xc7176000},{0xc7178000},{0xc717a000},{0xc717c000},{0xc717e000}, -{0xc7180000},{0xc7182000},{0xc7184000},{0xc7186000},{0xc7188000},{0xc718a000},{0xc718c000},{0xc718e000},{0xc7190000},{0xc7192000},{0xc7194000},{0xc7196000},{0xc7198000},{0xc719a000},{0xc719c000},{0xc719e000},{0xc71a0000},{0xc71a2000},{0xc71a4000},{0xc71a6000},{0xc71a8000},{0xc71aa000},{0xc71ac000},{0xc71ae000},{0xc71b0000},{0xc71b2000},{0xc71b4000},{0xc71b6000},{0xc71b8000},{0xc71ba000},{0xc71bc000},{0xc71be000}, -{0xc71c0000},{0xc71c2000},{0xc71c4000},{0xc71c6000},{0xc71c8000},{0xc71ca000},{0xc71cc000},{0xc71ce000},{0xc71d0000},{0xc71d2000},{0xc71d4000},{0xc71d6000},{0xc71d8000},{0xc71da000},{0xc71dc000},{0xc71de000},{0xc71e0000},{0xc71e2000},{0xc71e4000},{0xc71e6000},{0xc71e8000},{0xc71ea000},{0xc71ec000},{0xc71ee000},{0xc71f0000},{0xc71f2000},{0xc71f4000},{0xc71f6000},{0xc71f8000},{0xc71fa000},{0xc71fc000},{0xc71fe000}, -{0xc7200000},{0xc7202000},{0xc7204000},{0xc7206000},{0xc7208000},{0xc720a000},{0xc720c000},{0xc720e000},{0xc7210000},{0xc7212000},{0xc7214000},{0xc7216000},{0xc7218000},{0xc721a000},{0xc721c000},{0xc721e000},{0xc7220000},{0xc7222000},{0xc7224000},{0xc7226000},{0xc7228000},{0xc722a000},{0xc722c000},{0xc722e000},{0xc7230000},{0xc7232000},{0xc7234000},{0xc7236000},{0xc7238000},{0xc723a000},{0xc723c000},{0xc723e000}, -{0xc7240000},{0xc7242000},{0xc7244000},{0xc7246000},{0xc7248000},{0xc724a000},{0xc724c000},{0xc724e000},{0xc7250000},{0xc7252000},{0xc7254000},{0xc7256000},{0xc7258000},{0xc725a000},{0xc725c000},{0xc725e000},{0xc7260000},{0xc7262000},{0xc7264000},{0xc7266000},{0xc7268000},{0xc726a000},{0xc726c000},{0xc726e000},{0xc7270000},{0xc7272000},{0xc7274000},{0xc7276000},{0xc7278000},{0xc727a000},{0xc727c000},{0xc727e000}, -{0xc7280000},{0xc7282000},{0xc7284000},{0xc7286000},{0xc7288000},{0xc728a000},{0xc728c000},{0xc728e000},{0xc7290000},{0xc7292000},{0xc7294000},{0xc7296000},{0xc7298000},{0xc729a000},{0xc729c000},{0xc729e000},{0xc72a0000},{0xc72a2000},{0xc72a4000},{0xc72a6000},{0xc72a8000},{0xc72aa000},{0xc72ac000},{0xc72ae000},{0xc72b0000},{0xc72b2000},{0xc72b4000},{0xc72b6000},{0xc72b8000},{0xc72ba000},{0xc72bc000},{0xc72be000}, -{0xc72c0000},{0xc72c2000},{0xc72c4000},{0xc72c6000},{0xc72c8000},{0xc72ca000},{0xc72cc000},{0xc72ce000},{0xc72d0000},{0xc72d2000},{0xc72d4000},{0xc72d6000},{0xc72d8000},{0xc72da000},{0xc72dc000},{0xc72de000},{0xc72e0000},{0xc72e2000},{0xc72e4000},{0xc72e6000},{0xc72e8000},{0xc72ea000},{0xc72ec000},{0xc72ee000},{0xc72f0000},{0xc72f2000},{0xc72f4000},{0xc72f6000},{0xc72f8000},{0xc72fa000},{0xc72fc000},{0xc72fe000}, -{0xc7300000},{0xc7302000},{0xc7304000},{0xc7306000},{0xc7308000},{0xc730a000},{0xc730c000},{0xc730e000},{0xc7310000},{0xc7312000},{0xc7314000},{0xc7316000},{0xc7318000},{0xc731a000},{0xc731c000},{0xc731e000},{0xc7320000},{0xc7322000},{0xc7324000},{0xc7326000},{0xc7328000},{0xc732a000},{0xc732c000},{0xc732e000},{0xc7330000},{0xc7332000},{0xc7334000},{0xc7336000},{0xc7338000},{0xc733a000},{0xc733c000},{0xc733e000}, -{0xc7340000},{0xc7342000},{0xc7344000},{0xc7346000},{0xc7348000},{0xc734a000},{0xc734c000},{0xc734e000},{0xc7350000},{0xc7352000},{0xc7354000},{0xc7356000},{0xc7358000},{0xc735a000},{0xc735c000},{0xc735e000},{0xc7360000},{0xc7362000},{0xc7364000},{0xc7366000},{0xc7368000},{0xc736a000},{0xc736c000},{0xc736e000},{0xc7370000},{0xc7372000},{0xc7374000},{0xc7376000},{0xc7378000},{0xc737a000},{0xc737c000},{0xc737e000}, -{0xc7380000},{0xc7382000},{0xc7384000},{0xc7386000},{0xc7388000},{0xc738a000},{0xc738c000},{0xc738e000},{0xc7390000},{0xc7392000},{0xc7394000},{0xc7396000},{0xc7398000},{0xc739a000},{0xc739c000},{0xc739e000},{0xc73a0000},{0xc73a2000},{0xc73a4000},{0xc73a6000},{0xc73a8000},{0xc73aa000},{0xc73ac000},{0xc73ae000},{0xc73b0000},{0xc73b2000},{0xc73b4000},{0xc73b6000},{0xc73b8000},{0xc73ba000},{0xc73bc000},{0xc73be000}, -{0xc73c0000},{0xc73c2000},{0xc73c4000},{0xc73c6000},{0xc73c8000},{0xc73ca000},{0xc73cc000},{0xc73ce000},{0xc73d0000},{0xc73d2000},{0xc73d4000},{0xc73d6000},{0xc73d8000},{0xc73da000},{0xc73dc000},{0xc73de000},{0xc73e0000},{0xc73e2000},{0xc73e4000},{0xc73e6000},{0xc73e8000},{0xc73ea000},{0xc73ec000},{0xc73ee000},{0xc73f0000},{0xc73f2000},{0xc73f4000},{0xc73f6000},{0xc73f8000},{0xc73fa000},{0xc73fc000},{0xc73fe000}, -{0xc7400000},{0xc7402000},{0xc7404000},{0xc7406000},{0xc7408000},{0xc740a000},{0xc740c000},{0xc740e000},{0xc7410000},{0xc7412000},{0xc7414000},{0xc7416000},{0xc7418000},{0xc741a000},{0xc741c000},{0xc741e000},{0xc7420000},{0xc7422000},{0xc7424000},{0xc7426000},{0xc7428000},{0xc742a000},{0xc742c000},{0xc742e000},{0xc7430000},{0xc7432000},{0xc7434000},{0xc7436000},{0xc7438000},{0xc743a000},{0xc743c000},{0xc743e000}, -{0xc7440000},{0xc7442000},{0xc7444000},{0xc7446000},{0xc7448000},{0xc744a000},{0xc744c000},{0xc744e000},{0xc7450000},{0xc7452000},{0xc7454000},{0xc7456000},{0xc7458000},{0xc745a000},{0xc745c000},{0xc745e000},{0xc7460000},{0xc7462000},{0xc7464000},{0xc7466000},{0xc7468000},{0xc746a000},{0xc746c000},{0xc746e000},{0xc7470000},{0xc7472000},{0xc7474000},{0xc7476000},{0xc7478000},{0xc747a000},{0xc747c000},{0xc747e000}, -{0xc7480000},{0xc7482000},{0xc7484000},{0xc7486000},{0xc7488000},{0xc748a000},{0xc748c000},{0xc748e000},{0xc7490000},{0xc7492000},{0xc7494000},{0xc7496000},{0xc7498000},{0xc749a000},{0xc749c000},{0xc749e000},{0xc74a0000},{0xc74a2000},{0xc74a4000},{0xc74a6000},{0xc74a8000},{0xc74aa000},{0xc74ac000},{0xc74ae000},{0xc74b0000},{0xc74b2000},{0xc74b4000},{0xc74b6000},{0xc74b8000},{0xc74ba000},{0xc74bc000},{0xc74be000}, -{0xc74c0000},{0xc74c2000},{0xc74c4000},{0xc74c6000},{0xc74c8000},{0xc74ca000},{0xc74cc000},{0xc74ce000},{0xc74d0000},{0xc74d2000},{0xc74d4000},{0xc74d6000},{0xc74d8000},{0xc74da000},{0xc74dc000},{0xc74de000},{0xc74e0000},{0xc74e2000},{0xc74e4000},{0xc74e6000},{0xc74e8000},{0xc74ea000},{0xc74ec000},{0xc74ee000},{0xc74f0000},{0xc74f2000},{0xc74f4000},{0xc74f6000},{0xc74f8000},{0xc74fa000},{0xc74fc000},{0xc74fe000}, -{0xc7500000},{0xc7502000},{0xc7504000},{0xc7506000},{0xc7508000},{0xc750a000},{0xc750c000},{0xc750e000},{0xc7510000},{0xc7512000},{0xc7514000},{0xc7516000},{0xc7518000},{0xc751a000},{0xc751c000},{0xc751e000},{0xc7520000},{0xc7522000},{0xc7524000},{0xc7526000},{0xc7528000},{0xc752a000},{0xc752c000},{0xc752e000},{0xc7530000},{0xc7532000},{0xc7534000},{0xc7536000},{0xc7538000},{0xc753a000},{0xc753c000},{0xc753e000}, -{0xc7540000},{0xc7542000},{0xc7544000},{0xc7546000},{0xc7548000},{0xc754a000},{0xc754c000},{0xc754e000},{0xc7550000},{0xc7552000},{0xc7554000},{0xc7556000},{0xc7558000},{0xc755a000},{0xc755c000},{0xc755e000},{0xc7560000},{0xc7562000},{0xc7564000},{0xc7566000},{0xc7568000},{0xc756a000},{0xc756c000},{0xc756e000},{0xc7570000},{0xc7572000},{0xc7574000},{0xc7576000},{0xc7578000},{0xc757a000},{0xc757c000},{0xc757e000}, -{0xc7580000},{0xc7582000},{0xc7584000},{0xc7586000},{0xc7588000},{0xc758a000},{0xc758c000},{0xc758e000},{0xc7590000},{0xc7592000},{0xc7594000},{0xc7596000},{0xc7598000},{0xc759a000},{0xc759c000},{0xc759e000},{0xc75a0000},{0xc75a2000},{0xc75a4000},{0xc75a6000},{0xc75a8000},{0xc75aa000},{0xc75ac000},{0xc75ae000},{0xc75b0000},{0xc75b2000},{0xc75b4000},{0xc75b6000},{0xc75b8000},{0xc75ba000},{0xc75bc000},{0xc75be000}, -{0xc75c0000},{0xc75c2000},{0xc75c4000},{0xc75c6000},{0xc75c8000},{0xc75ca000},{0xc75cc000},{0xc75ce000},{0xc75d0000},{0xc75d2000},{0xc75d4000},{0xc75d6000},{0xc75d8000},{0xc75da000},{0xc75dc000},{0xc75de000},{0xc75e0000},{0xc75e2000},{0xc75e4000},{0xc75e6000},{0xc75e8000},{0xc75ea000},{0xc75ec000},{0xc75ee000},{0xc75f0000},{0xc75f2000},{0xc75f4000},{0xc75f6000},{0xc75f8000},{0xc75fa000},{0xc75fc000},{0xc75fe000}, -{0xc7600000},{0xc7602000},{0xc7604000},{0xc7606000},{0xc7608000},{0xc760a000},{0xc760c000},{0xc760e000},{0xc7610000},{0xc7612000},{0xc7614000},{0xc7616000},{0xc7618000},{0xc761a000},{0xc761c000},{0xc761e000},{0xc7620000},{0xc7622000},{0xc7624000},{0xc7626000},{0xc7628000},{0xc762a000},{0xc762c000},{0xc762e000},{0xc7630000},{0xc7632000},{0xc7634000},{0xc7636000},{0xc7638000},{0xc763a000},{0xc763c000},{0xc763e000}, -{0xc7640000},{0xc7642000},{0xc7644000},{0xc7646000},{0xc7648000},{0xc764a000},{0xc764c000},{0xc764e000},{0xc7650000},{0xc7652000},{0xc7654000},{0xc7656000},{0xc7658000},{0xc765a000},{0xc765c000},{0xc765e000},{0xc7660000},{0xc7662000},{0xc7664000},{0xc7666000},{0xc7668000},{0xc766a000},{0xc766c000},{0xc766e000},{0xc7670000},{0xc7672000},{0xc7674000},{0xc7676000},{0xc7678000},{0xc767a000},{0xc767c000},{0xc767e000}, -{0xc7680000},{0xc7682000},{0xc7684000},{0xc7686000},{0xc7688000},{0xc768a000},{0xc768c000},{0xc768e000},{0xc7690000},{0xc7692000},{0xc7694000},{0xc7696000},{0xc7698000},{0xc769a000},{0xc769c000},{0xc769e000},{0xc76a0000},{0xc76a2000},{0xc76a4000},{0xc76a6000},{0xc76a8000},{0xc76aa000},{0xc76ac000},{0xc76ae000},{0xc76b0000},{0xc76b2000},{0xc76b4000},{0xc76b6000},{0xc76b8000},{0xc76ba000},{0xc76bc000},{0xc76be000}, -{0xc76c0000},{0xc76c2000},{0xc76c4000},{0xc76c6000},{0xc76c8000},{0xc76ca000},{0xc76cc000},{0xc76ce000},{0xc76d0000},{0xc76d2000},{0xc76d4000},{0xc76d6000},{0xc76d8000},{0xc76da000},{0xc76dc000},{0xc76de000},{0xc76e0000},{0xc76e2000},{0xc76e4000},{0xc76e6000},{0xc76e8000},{0xc76ea000},{0xc76ec000},{0xc76ee000},{0xc76f0000},{0xc76f2000},{0xc76f4000},{0xc76f6000},{0xc76f8000},{0xc76fa000},{0xc76fc000},{0xc76fe000}, -{0xc7700000},{0xc7702000},{0xc7704000},{0xc7706000},{0xc7708000},{0xc770a000},{0xc770c000},{0xc770e000},{0xc7710000},{0xc7712000},{0xc7714000},{0xc7716000},{0xc7718000},{0xc771a000},{0xc771c000},{0xc771e000},{0xc7720000},{0xc7722000},{0xc7724000},{0xc7726000},{0xc7728000},{0xc772a000},{0xc772c000},{0xc772e000},{0xc7730000},{0xc7732000},{0xc7734000},{0xc7736000},{0xc7738000},{0xc773a000},{0xc773c000},{0xc773e000}, -{0xc7740000},{0xc7742000},{0xc7744000},{0xc7746000},{0xc7748000},{0xc774a000},{0xc774c000},{0xc774e000},{0xc7750000},{0xc7752000},{0xc7754000},{0xc7756000},{0xc7758000},{0xc775a000},{0xc775c000},{0xc775e000},{0xc7760000},{0xc7762000},{0xc7764000},{0xc7766000},{0xc7768000},{0xc776a000},{0xc776c000},{0xc776e000},{0xc7770000},{0xc7772000},{0xc7774000},{0xc7776000},{0xc7778000},{0xc777a000},{0xc777c000},{0xc777e000}, -{0xc7780000},{0xc7782000},{0xc7784000},{0xc7786000},{0xc7788000},{0xc778a000},{0xc778c000},{0xc778e000},{0xc7790000},{0xc7792000},{0xc7794000},{0xc7796000},{0xc7798000},{0xc779a000},{0xc779c000},{0xc779e000},{0xc77a0000},{0xc77a2000},{0xc77a4000},{0xc77a6000},{0xc77a8000},{0xc77aa000},{0xc77ac000},{0xc77ae000},{0xc77b0000},{0xc77b2000},{0xc77b4000},{0xc77b6000},{0xc77b8000},{0xc77ba000},{0xc77bc000},{0xc77be000}, -{0xc77c0000},{0xc77c2000},{0xc77c4000},{0xc77c6000},{0xc77c8000},{0xc77ca000},{0xc77cc000},{0xc77ce000},{0xc77d0000},{0xc77d2000},{0xc77d4000},{0xc77d6000},{0xc77d8000},{0xc77da000},{0xc77dc000},{0xc77de000},{0xc77e0000},{0xc77e2000},{0xc77e4000},{0xc77e6000},{0xc77e8000},{0xc77ea000},{0xc77ec000},{0xc77ee000},{0xc77f0000},{0xc77f2000},{0xc77f4000},{0xc77f6000},{0xc77f8000},{0xc77fa000},{0xc77fc000},{0xc77fe000}, -{0xff800000},{0xffc02000},{0xffc04000},{0xffc06000},{0xffc08000},{0xffc0a000},{0xffc0c000},{0xffc0e000},{0xffc10000},{0xffc12000},{0xffc14000},{0xffc16000},{0xffc18000},{0xffc1a000},{0xffc1c000},{0xffc1e000},{0xffc20000},{0xffc22000},{0xffc24000},{0xffc26000},{0xffc28000},{0xffc2a000},{0xffc2c000},{0xffc2e000},{0xffc30000},{0xffc32000},{0xffc34000},{0xffc36000},{0xffc38000},{0xffc3a000},{0xffc3c000},{0xffc3e000}, -{0xffc40000},{0xffc42000},{0xffc44000},{0xffc46000},{0xffc48000},{0xffc4a000},{0xffc4c000},{0xffc4e000},{0xffc50000},{0xffc52000},{0xffc54000},{0xffc56000},{0xffc58000},{0xffc5a000},{0xffc5c000},{0xffc5e000},{0xffc60000},{0xffc62000},{0xffc64000},{0xffc66000},{0xffc68000},{0xffc6a000},{0xffc6c000},{0xffc6e000},{0xffc70000},{0xffc72000},{0xffc74000},{0xffc76000},{0xffc78000},{0xffc7a000},{0xffc7c000},{0xffc7e000}, -{0xffc80000},{0xffc82000},{0xffc84000},{0xffc86000},{0xffc88000},{0xffc8a000},{0xffc8c000},{0xffc8e000},{0xffc90000},{0xffc92000},{0xffc94000},{0xffc96000},{0xffc98000},{0xffc9a000},{0xffc9c000},{0xffc9e000},{0xffca0000},{0xffca2000},{0xffca4000},{0xffca6000},{0xffca8000},{0xffcaa000},{0xffcac000},{0xffcae000},{0xffcb0000},{0xffcb2000},{0xffcb4000},{0xffcb6000},{0xffcb8000},{0xffcba000},{0xffcbc000},{0xffcbe000}, -{0xffcc0000},{0xffcc2000},{0xffcc4000},{0xffcc6000},{0xffcc8000},{0xffcca000},{0xffccc000},{0xffcce000},{0xffcd0000},{0xffcd2000},{0xffcd4000},{0xffcd6000},{0xffcd8000},{0xffcda000},{0xffcdc000},{0xffcde000},{0xffce0000},{0xffce2000},{0xffce4000},{0xffce6000},{0xffce8000},{0xffcea000},{0xffcec000},{0xffcee000},{0xffcf0000},{0xffcf2000},{0xffcf4000},{0xffcf6000},{0xffcf8000},{0xffcfa000},{0xffcfc000},{0xffcfe000}, -{0xffd00000},{0xffd02000},{0xffd04000},{0xffd06000},{0xffd08000},{0xffd0a000},{0xffd0c000},{0xffd0e000},{0xffd10000},{0xffd12000},{0xffd14000},{0xffd16000},{0xffd18000},{0xffd1a000},{0xffd1c000},{0xffd1e000},{0xffd20000},{0xffd22000},{0xffd24000},{0xffd26000},{0xffd28000},{0xffd2a000},{0xffd2c000},{0xffd2e000},{0xffd30000},{0xffd32000},{0xffd34000},{0xffd36000},{0xffd38000},{0xffd3a000},{0xffd3c000},{0xffd3e000}, -{0xffd40000},{0xffd42000},{0xffd44000},{0xffd46000},{0xffd48000},{0xffd4a000},{0xffd4c000},{0xffd4e000},{0xffd50000},{0xffd52000},{0xffd54000},{0xffd56000},{0xffd58000},{0xffd5a000},{0xffd5c000},{0xffd5e000},{0xffd60000},{0xffd62000},{0xffd64000},{0xffd66000},{0xffd68000},{0xffd6a000},{0xffd6c000},{0xffd6e000},{0xffd70000},{0xffd72000},{0xffd74000},{0xffd76000},{0xffd78000},{0xffd7a000},{0xffd7c000},{0xffd7e000}, -{0xffd80000},{0xffd82000},{0xffd84000},{0xffd86000},{0xffd88000},{0xffd8a000},{0xffd8c000},{0xffd8e000},{0xffd90000},{0xffd92000},{0xffd94000},{0xffd96000},{0xffd98000},{0xffd9a000},{0xffd9c000},{0xffd9e000},{0xffda0000},{0xffda2000},{0xffda4000},{0xffda6000},{0xffda8000},{0xffdaa000},{0xffdac000},{0xffdae000},{0xffdb0000},{0xffdb2000},{0xffdb4000},{0xffdb6000},{0xffdb8000},{0xffdba000},{0xffdbc000},{0xffdbe000}, -{0xffdc0000},{0xffdc2000},{0xffdc4000},{0xffdc6000},{0xffdc8000},{0xffdca000},{0xffdcc000},{0xffdce000},{0xffdd0000},{0xffdd2000},{0xffdd4000},{0xffdd6000},{0xffdd8000},{0xffdda000},{0xffddc000},{0xffdde000},{0xffde0000},{0xffde2000},{0xffde4000},{0xffde6000},{0xffde8000},{0xffdea000},{0xffdec000},{0xffdee000},{0xffdf0000},{0xffdf2000},{0xffdf4000},{0xffdf6000},{0xffdf8000},{0xffdfa000},{0xffdfc000},{0xffdfe000}, -{0xffe00000},{0xffe02000},{0xffe04000},{0xffe06000},{0xffe08000},{0xffe0a000},{0xffe0c000},{0xffe0e000},{0xffe10000},{0xffe12000},{0xffe14000},{0xffe16000},{0xffe18000},{0xffe1a000},{0xffe1c000},{0xffe1e000},{0xffe20000},{0xffe22000},{0xffe24000},{0xffe26000},{0xffe28000},{0xffe2a000},{0xffe2c000},{0xffe2e000},{0xffe30000},{0xffe32000},{0xffe34000},{0xffe36000},{0xffe38000},{0xffe3a000},{0xffe3c000},{0xffe3e000}, -{0xffe40000},{0xffe42000},{0xffe44000},{0xffe46000},{0xffe48000},{0xffe4a000},{0xffe4c000},{0xffe4e000},{0xffe50000},{0xffe52000},{0xffe54000},{0xffe56000},{0xffe58000},{0xffe5a000},{0xffe5c000},{0xffe5e000},{0xffe60000},{0xffe62000},{0xffe64000},{0xffe66000},{0xffe68000},{0xffe6a000},{0xffe6c000},{0xffe6e000},{0xffe70000},{0xffe72000},{0xffe74000},{0xffe76000},{0xffe78000},{0xffe7a000},{0xffe7c000},{0xffe7e000}, -{0xffe80000},{0xffe82000},{0xffe84000},{0xffe86000},{0xffe88000},{0xffe8a000},{0xffe8c000},{0xffe8e000},{0xffe90000},{0xffe92000},{0xffe94000},{0xffe96000},{0xffe98000},{0xffe9a000},{0xffe9c000},{0xffe9e000},{0xffea0000},{0xffea2000},{0xffea4000},{0xffea6000},{0xffea8000},{0xffeaa000},{0xffeac000},{0xffeae000},{0xffeb0000},{0xffeb2000},{0xffeb4000},{0xffeb6000},{0xffeb8000},{0xffeba000},{0xffebc000},{0xffebe000}, -{0xffec0000},{0xffec2000},{0xffec4000},{0xffec6000},{0xffec8000},{0xffeca000},{0xffecc000},{0xffece000},{0xffed0000},{0xffed2000},{0xffed4000},{0xffed6000},{0xffed8000},{0xffeda000},{0xffedc000},{0xffede000},{0xffee0000},{0xffee2000},{0xffee4000},{0xffee6000},{0xffee8000},{0xffeea000},{0xffeec000},{0xffeee000},{0xffef0000},{0xffef2000},{0xffef4000},{0xffef6000},{0xffef8000},{0xffefa000},{0xffefc000},{0xffefe000}, -{0xfff00000},{0xfff02000},{0xfff04000},{0xfff06000},{0xfff08000},{0xfff0a000},{0xfff0c000},{0xfff0e000},{0xfff10000},{0xfff12000},{0xfff14000},{0xfff16000},{0xfff18000},{0xfff1a000},{0xfff1c000},{0xfff1e000},{0xfff20000},{0xfff22000},{0xfff24000},{0xfff26000},{0xfff28000},{0xfff2a000},{0xfff2c000},{0xfff2e000},{0xfff30000},{0xfff32000},{0xfff34000},{0xfff36000},{0xfff38000},{0xfff3a000},{0xfff3c000},{0xfff3e000}, -{0xfff40000},{0xfff42000},{0xfff44000},{0xfff46000},{0xfff48000},{0xfff4a000},{0xfff4c000},{0xfff4e000},{0xfff50000},{0xfff52000},{0xfff54000},{0xfff56000},{0xfff58000},{0xfff5a000},{0xfff5c000},{0xfff5e000},{0xfff60000},{0xfff62000},{0xfff64000},{0xfff66000},{0xfff68000},{0xfff6a000},{0xfff6c000},{0xfff6e000},{0xfff70000},{0xfff72000},{0xfff74000},{0xfff76000},{0xfff78000},{0xfff7a000},{0xfff7c000},{0xfff7e000}, -{0xfff80000},{0xfff82000},{0xfff84000},{0xfff86000},{0xfff88000},{0xfff8a000},{0xfff8c000},{0xfff8e000},{0xfff90000},{0xfff92000},{0xfff94000},{0xfff96000},{0xfff98000},{0xfff9a000},{0xfff9c000},{0xfff9e000},{0xfffa0000},{0xfffa2000},{0xfffa4000},{0xfffa6000},{0xfffa8000},{0xfffaa000},{0xfffac000},{0xfffae000},{0xfffb0000},{0xfffb2000},{0xfffb4000},{0xfffb6000},{0xfffb8000},{0xfffba000},{0xfffbc000},{0xfffbe000}, -{0xfffc0000},{0xfffc2000},{0xfffc4000},{0xfffc6000},{0xfffc8000},{0xfffca000},{0xfffcc000},{0xfffce000},{0xfffd0000},{0xfffd2000},{0xfffd4000},{0xfffd6000},{0xfffd8000},{0xfffda000},{0xfffdc000},{0xfffde000},{0xfffe0000},{0xfffe2000},{0xfffe4000},{0xfffe6000},{0xfffe8000},{0xfffea000},{0xfffec000},{0xfffee000},{0xffff0000},{0xffff2000},{0xffff4000},{0xffff6000},{0xffff8000},{0xffffa000},{0xffffc000},{0xffffe000}, -{0xffc00000},{0xffc02000},{0xffc04000},{0xffc06000},{0xffc08000},{0xffc0a000},{0xffc0c000},{0xffc0e000},{0xffc10000},{0xffc12000},{0xffc14000},{0xffc16000},{0xffc18000},{0xffc1a000},{0xffc1c000},{0xffc1e000},{0xffc20000},{0xffc22000},{0xffc24000},{0xffc26000},{0xffc28000},{0xffc2a000},{0xffc2c000},{0xffc2e000},{0xffc30000},{0xffc32000},{0xffc34000},{0xffc36000},{0xffc38000},{0xffc3a000},{0xffc3c000},{0xffc3e000}, -{0xffc40000},{0xffc42000},{0xffc44000},{0xffc46000},{0xffc48000},{0xffc4a000},{0xffc4c000},{0xffc4e000},{0xffc50000},{0xffc52000},{0xffc54000},{0xffc56000},{0xffc58000},{0xffc5a000},{0xffc5c000},{0xffc5e000},{0xffc60000},{0xffc62000},{0xffc64000},{0xffc66000},{0xffc68000},{0xffc6a000},{0xffc6c000},{0xffc6e000},{0xffc70000},{0xffc72000},{0xffc74000},{0xffc76000},{0xffc78000},{0xffc7a000},{0xffc7c000},{0xffc7e000}, -{0xffc80000},{0xffc82000},{0xffc84000},{0xffc86000},{0xffc88000},{0xffc8a000},{0xffc8c000},{0xffc8e000},{0xffc90000},{0xffc92000},{0xffc94000},{0xffc96000},{0xffc98000},{0xffc9a000},{0xffc9c000},{0xffc9e000},{0xffca0000},{0xffca2000},{0xffca4000},{0xffca6000},{0xffca8000},{0xffcaa000},{0xffcac000},{0xffcae000},{0xffcb0000},{0xffcb2000},{0xffcb4000},{0xffcb6000},{0xffcb8000},{0xffcba000},{0xffcbc000},{0xffcbe000}, -{0xffcc0000},{0xffcc2000},{0xffcc4000},{0xffcc6000},{0xffcc8000},{0xffcca000},{0xffccc000},{0xffcce000},{0xffcd0000},{0xffcd2000},{0xffcd4000},{0xffcd6000},{0xffcd8000},{0xffcda000},{0xffcdc000},{0xffcde000},{0xffce0000},{0xffce2000},{0xffce4000},{0xffce6000},{0xffce8000},{0xffcea000},{0xffcec000},{0xffcee000},{0xffcf0000},{0xffcf2000},{0xffcf4000},{0xffcf6000},{0xffcf8000},{0xffcfa000},{0xffcfc000},{0xffcfe000}, -{0xffd00000},{0xffd02000},{0xffd04000},{0xffd06000},{0xffd08000},{0xffd0a000},{0xffd0c000},{0xffd0e000},{0xffd10000},{0xffd12000},{0xffd14000},{0xffd16000},{0xffd18000},{0xffd1a000},{0xffd1c000},{0xffd1e000},{0xffd20000},{0xffd22000},{0xffd24000},{0xffd26000},{0xffd28000},{0xffd2a000},{0xffd2c000},{0xffd2e000},{0xffd30000},{0xffd32000},{0xffd34000},{0xffd36000},{0xffd38000},{0xffd3a000},{0xffd3c000},{0xffd3e000}, -{0xffd40000},{0xffd42000},{0xffd44000},{0xffd46000},{0xffd48000},{0xffd4a000},{0xffd4c000},{0xffd4e000},{0xffd50000},{0xffd52000},{0xffd54000},{0xffd56000},{0xffd58000},{0xffd5a000},{0xffd5c000},{0xffd5e000},{0xffd60000},{0xffd62000},{0xffd64000},{0xffd66000},{0xffd68000},{0xffd6a000},{0xffd6c000},{0xffd6e000},{0xffd70000},{0xffd72000},{0xffd74000},{0xffd76000},{0xffd78000},{0xffd7a000},{0xffd7c000},{0xffd7e000}, -{0xffd80000},{0xffd82000},{0xffd84000},{0xffd86000},{0xffd88000},{0xffd8a000},{0xffd8c000},{0xffd8e000},{0xffd90000},{0xffd92000},{0xffd94000},{0xffd96000},{0xffd98000},{0xffd9a000},{0xffd9c000},{0xffd9e000},{0xffda0000},{0xffda2000},{0xffda4000},{0xffda6000},{0xffda8000},{0xffdaa000},{0xffdac000},{0xffdae000},{0xffdb0000},{0xffdb2000},{0xffdb4000},{0xffdb6000},{0xffdb8000},{0xffdba000},{0xffdbc000},{0xffdbe000}, -{0xffdc0000},{0xffdc2000},{0xffdc4000},{0xffdc6000},{0xffdc8000},{0xffdca000},{0xffdcc000},{0xffdce000},{0xffdd0000},{0xffdd2000},{0xffdd4000},{0xffdd6000},{0xffdd8000},{0xffdda000},{0xffddc000},{0xffdde000},{0xffde0000},{0xffde2000},{0xffde4000},{0xffde6000},{0xffde8000},{0xffdea000},{0xffdec000},{0xffdee000},{0xffdf0000},{0xffdf2000},{0xffdf4000},{0xffdf6000},{0xffdf8000},{0xffdfa000},{0xffdfc000},{0xffdfe000}, -{0xffe00000},{0xffe02000},{0xffe04000},{0xffe06000},{0xffe08000},{0xffe0a000},{0xffe0c000},{0xffe0e000},{0xffe10000},{0xffe12000},{0xffe14000},{0xffe16000},{0xffe18000},{0xffe1a000},{0xffe1c000},{0xffe1e000},{0xffe20000},{0xffe22000},{0xffe24000},{0xffe26000},{0xffe28000},{0xffe2a000},{0xffe2c000},{0xffe2e000},{0xffe30000},{0xffe32000},{0xffe34000},{0xffe36000},{0xffe38000},{0xffe3a000},{0xffe3c000},{0xffe3e000}, -{0xffe40000},{0xffe42000},{0xffe44000},{0xffe46000},{0xffe48000},{0xffe4a000},{0xffe4c000},{0xffe4e000},{0xffe50000},{0xffe52000},{0xffe54000},{0xffe56000},{0xffe58000},{0xffe5a000},{0xffe5c000},{0xffe5e000},{0xffe60000},{0xffe62000},{0xffe64000},{0xffe66000},{0xffe68000},{0xffe6a000},{0xffe6c000},{0xffe6e000},{0xffe70000},{0xffe72000},{0xffe74000},{0xffe76000},{0xffe78000},{0xffe7a000},{0xffe7c000},{0xffe7e000}, -{0xffe80000},{0xffe82000},{0xffe84000},{0xffe86000},{0xffe88000},{0xffe8a000},{0xffe8c000},{0xffe8e000},{0xffe90000},{0xffe92000},{0xffe94000},{0xffe96000},{0xffe98000},{0xffe9a000},{0xffe9c000},{0xffe9e000},{0xffea0000},{0xffea2000},{0xffea4000},{0xffea6000},{0xffea8000},{0xffeaa000},{0xffeac000},{0xffeae000},{0xffeb0000},{0xffeb2000},{0xffeb4000},{0xffeb6000},{0xffeb8000},{0xffeba000},{0xffebc000},{0xffebe000}, -{0xffec0000},{0xffec2000},{0xffec4000},{0xffec6000},{0xffec8000},{0xffeca000},{0xffecc000},{0xffece000},{0xffed0000},{0xffed2000},{0xffed4000},{0xffed6000},{0xffed8000},{0xffeda000},{0xffedc000},{0xffede000},{0xffee0000},{0xffee2000},{0xffee4000},{0xffee6000},{0xffee8000},{0xffeea000},{0xffeec000},{0xffeee000},{0xffef0000},{0xffef2000},{0xffef4000},{0xffef6000},{0xffef8000},{0xffefa000},{0xffefc000},{0xffefe000}, -{0xfff00000},{0xfff02000},{0xfff04000},{0xfff06000},{0xfff08000},{0xfff0a000},{0xfff0c000},{0xfff0e000},{0xfff10000},{0xfff12000},{0xfff14000},{0xfff16000},{0xfff18000},{0xfff1a000},{0xfff1c000},{0xfff1e000},{0xfff20000},{0xfff22000},{0xfff24000},{0xfff26000},{0xfff28000},{0xfff2a000},{0xfff2c000},{0xfff2e000},{0xfff30000},{0xfff32000},{0xfff34000},{0xfff36000},{0xfff38000},{0xfff3a000},{0xfff3c000},{0xfff3e000}, -{0xfff40000},{0xfff42000},{0xfff44000},{0xfff46000},{0xfff48000},{0xfff4a000},{0xfff4c000},{0xfff4e000},{0xfff50000},{0xfff52000},{0xfff54000},{0xfff56000},{0xfff58000},{0xfff5a000},{0xfff5c000},{0xfff5e000},{0xfff60000},{0xfff62000},{0xfff64000},{0xfff66000},{0xfff68000},{0xfff6a000},{0xfff6c000},{0xfff6e000},{0xfff70000},{0xfff72000},{0xfff74000},{0xfff76000},{0xfff78000},{0xfff7a000},{0xfff7c000},{0xfff7e000}, -{0xfff80000},{0xfff82000},{0xfff84000},{0xfff86000},{0xfff88000},{0xfff8a000},{0xfff8c000},{0xfff8e000},{0xfff90000},{0xfff92000},{0xfff94000},{0xfff96000},{0xfff98000},{0xfff9a000},{0xfff9c000},{0xfff9e000},{0xfffa0000},{0xfffa2000},{0xfffa4000},{0xfffa6000},{0xfffa8000},{0xfffaa000},{0xfffac000},{0xfffae000},{0xfffb0000},{0xfffb2000},{0xfffb4000},{0xfffb6000},{0xfffb8000},{0xfffba000},{0xfffbc000},{0xfffbe000}, -{0xfffc0000},{0xfffc2000},{0xfffc4000},{0xfffc6000},{0xfffc8000},{0xfffca000},{0xfffcc000},{0xfffce000},{0xfffd0000},{0xfffd2000},{0xfffd4000},{0xfffd6000},{0xfffd8000},{0xfffda000},{0xfffdc000},{0xfffde000},{0xfffe0000},{0xfffe2000},{0xfffe4000},{0xfffe6000},{0xfffe8000},{0xfffea000},{0xfffec000},{0xfffee000},{0xffff0000},{0xffff2000},{0xffff4000},{0xffff6000},{0xffff8000},{0xffffa000},{0xffffc000},{0xffffe000}, diff --git a/tensorflow_graphics/physics/external/partio/src/io/pdb.h b/tensorflow_graphics/physics/external/partio/src/io/pdb.h deleted file mode 100644 index b48a9aece..000000000 --- a/tensorflow_graphics/physics/external/partio/src/io/pdb.h +++ /dev/null @@ -1,162 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2010 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -This code is based on the Gifts/readpdb directory of Autodesk Maya - -NOTE: some modifications were made and "32-bit" versions of the -structures were created to allow us to assume the pointers were -32-bit integers instead of system dependent pointers. As originally -defined, this format would be architecture dependent (behave -differently on 32-bit and 64-bit architectures). Maya's writers -may or may not also be doing this. If you have any files that -don't work, please let me know. But in general, it would be -difficult/error prone to detect what type the PDB file is. - -*/ - - -#define PDB_VECTOR 1 -#define PDB_REAL 2 -#define PDB_LONG 3 -#define PDB_CHAR 4 -#define PDB_POINTERT 5 - -typedef float Real; - -typedef struct { Real x,y,z; } Vector; - - -typedef struct Channel_Data32 { - int type; - unsigned int datasize; - unsigned int blocksize; - int num_blocks; - unsigned int block; //was void **block; -} Channel_Data32; - -typedef struct { - int type; - unsigned int datasize; - unsigned int blocksize; - int num_blocks; - void **block; -} Channel_Data; - -typedef struct Channel { - - char *name; - int type; - unsigned int size; - unsigned int active_start; - unsigned int active_end; - - char hide; - char disconnect; - Channel_Data *data; - - struct Channel *link; - struct Channel *next; } Channel; - -typedef struct Channel32 { - unsigned int name; - int type; - unsigned int size; - unsigned int active_start; - unsigned int active_end; - - char hide; - char disconnect; - unsigned int data; - - unsigned int link; - unsigned int next; -} Channel32; - - - -typedef struct { - - char magic; - unsigned short swap; - char encoding; - char type; } Channel_io_Header; - -typedef struct { - - int numAttributes; - int numParticles; - float time; - short *types; - char **names; - void **data; } PDBdata; - -typedef struct { - - int numAttributes; - int numParticles; - float time; - short *types; - char **names; - unsigned int data; } PDBdata32; -#define PDB_MAGIC 670 - - -typedef struct { - - int magic; - unsigned short swap; - float version; - float time; - unsigned data_size; - unsigned num_data; - - char padding[32]; - - Channel **data; - } PDB_Header; - - -typedef struct { - int magic; - unsigned short swap; - float version; - float time; - unsigned data_size; - unsigned num_data; - - char padding[32]; - - unsigned int data; -} PDB_Header32; - diff --git a/tensorflow_graphics/physics/external/partio/src/io/readers.h b/tensorflow_graphics/physics/external/partio/src/io/readers.h deleted file mode 100644 index 69e11be23..000000000 --- a/tensorflow_graphics/physics/external/partio/src/io/readers.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -PARTIO SOFTWARE -Copyright 2011 Disney Enterprises, Inc. All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in -the documentation and/or other materials provided with the -distribution. - -* The names "Disney", "Walt Disney Pictures", "Walt Disney Animation -Studios" or the names of its contributors may NOT be used to -endorse or promote products derived from this software without -specific prior written permission from Walt Disney Pictures. - -Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. -IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -*/ -#ifndef _READERS_h_ -#define _READERS_h_ - -namespace Partio{ -ParticlesDataMutable* readBGEO( const char* filename,const bool headersOnly); -ParticlesDataMutable* readGEO( const char* filename,const bool headersOnly); -ParticlesDataMutable* readPDB( const char* filename,const bool headersOnly); -ParticlesDataMutable* readPDB32(const char* filename,const bool headersOnly); -ParticlesDataMutable* readPDB64(const char* filename,const bool headersOnly); -ParticlesDataMutable* readPDA( const char* filename,const bool headersOnly); -ParticlesDataMutable* readMC( const char* filename,const bool headersOnly); -ParticlesDataMutable* readPTC( const char* filename,const bool headersOnly); -ParticlesDataMutable* readPDC( const char* filename,const bool headersOnly); -ParticlesDataMutable* readPRT( const char* filename,const bool headersOnly); -ParticlesDataMutable* readBIN( const char* filename,const bool headersOnly); -ParticlesDataMutable* readPTS( const char* filename,const bool headersOnly); - -bool writeBGEO(const char* filename,const ParticlesData& p,const bool compressed); -bool writeGEO(const char* filename,const ParticlesData& p,const bool compressed); -bool writePDB(const char* filename,const ParticlesData& p,const bool compressed); -bool writePDB32(const char* filename,const ParticlesData& p,const bool compressed); -bool writePDB64(const char* filename,const ParticlesData& p,const bool compressed); -bool writePDA(const char* filename,const ParticlesData& p,const bool compressed); -bool writePTC(const char* filename,const ParticlesData& p,const bool compressed); -bool writeRIB(const char* filename,const ParticlesData& p,const bool compressed); -bool writePDC(const char* filename,const ParticlesData& p,const bool compressed); -bool writePRT(const char* filename,const ParticlesData& p,const bool compressed); -bool writeBIN(const char* filename,const ParticlesData& p,const bool compressed); -} - -#endif diff --git a/tensorflow_graphics/physics/memo.py b/tensorflow_graphics/physics/memo.py deleted file mode 100644 index e519838b7..000000000 --- a/tensorflow_graphics/physics/memo.py +++ /dev/null @@ -1,51 +0,0 @@ -class Memo: - """ - The :class:`Memo` is the data structure that records the result of each - timestep of simulation and returns it to be interpreted by a higher-level algorithm. - The key part of the Memo that is of most interest to a user is :attr:`steps`, which - is a list of Tuples as defined in :mod:`time_integration` in the method :func:`get_name_states`. - Please note that data from simulation substeps will NOT be returned. - Other data saved in the Memo includes actuation sequences, simulation initializations, running losses, - and information for visualization. - - :param steps: A list of tuples representing the computed results of each step of a simulation. If simulated for n timesteps, steps will be of length n+1, where the first entry is the initial state of the simulation. - :param actuations: A list of the actuation signal at each step of the simulation. - :param initial_state: An object of type :class:\`InitialState` which represents the state of the system prior to simulation. - :param iteration_feed_dict: An optional dictionary to be used for evaluating tensors in the simulation. - :param point_visualization: An optional list of tuples, each containing a numpy array of points to be visualized followed by color and radius information. Typically filled in automatically depending on how :meth:`Simulation.add_point_visualization` is called. - :param vector_visualization: An optional list of tuples, each containing a numpy array of vector directions to be visualized followed by color and and length information. Typically filled in automatically depending on how :meth:`Simulation.add_vector_visualization` is called. - """ - #DOCTODO: stepwise loss and return loss if released. - - def __init__(self) -> None: - """Create a new empty Memo.""" - self.steps = [] - self.actuations = [] - self.initial_state = None - self.initial_feed_dict = {} - self.iteration_feed_dict = {} - self.point_visualization = [] - self.vector_visualization = [] - self.stepwise_loss = None - self.return_losses = None - - def update_stepwise_loss(self, step): - #DOCTODO: update if released. - from IPython import embed - if step is None: - return - if self.stepwise_loss is None: - self.stepwise_loss = step - return - if not isinstance(step, list): - self.stepwise_loss += step - return - - def add(a, b): - if isinstance(a, list): - for x, y in zip(a, b): - add(x, y) - else: - a += b - - add(self.stepwise_loss, step) diff --git a/tensorflow_graphics/physics/mpm3d.py b/tensorflow_graphics/physics/mpm3d.py deleted file mode 100644 index 93c052bec..000000000 --- a/tensorflow_graphics/physics/mpm3d.py +++ /dev/null @@ -1,66 +0,0 @@ -import tensorflow as tf -from tensorflow.python.framework import ops -from tensorflow.python.ops import array_ops -from tensorflow.python.ops import sparse_ops -import os -import numpy as np - -file_dir = os.path.dirname(os.path.realpath(__file__)) -MPM_module = tf.load_op_library(os.path.join(file_dir, '../../build/libtaichi_tf_differentiable_mpm.so')) - -mpm = MPM_module.mpm - -def normalize_grid(grid, res, gravity, dt): - np_res = np.array(res) - dim = np_res.shape[0] - assert len(grid.shape) == 3 - assert dim in [2, 3], 'Dimension must be 2 or 3!' - batch_size, num_cells, dim_1 = grid.shape - assert dim_1 == dim + 1, dim_1 - assert num_cells == np_res.prod() - - grid_v = grid[:, :, :dim] - grid_m = grid[:, :, dim:] - grid_v += grid_m * np.array(gravity)[None, None, :] * dt - grid_v = grid_v / tf.maximum(1e-30, grid_m) - - ''' - - sticky_mask = tf.cast(bc_parameter == -1, tf.float32) - grid_v *= (1 - sticky_mask) - - mask = tf.cast( - tf.reduce_sum(bc_normal**2, axis=3, keepdims=True) != 0, - tf.float32) - normal_component_length = tf.reduce_sum( - grid_v * bc_normal, axis=3, keepdims=True) - perpendicular_component = grid_v - bc_normal * normal_component_length - perpendicular_component_length = tf.sqrt( - tf.reduce_sum(perpendicular_component**2, axis=3, keepdims=True) + 1e-7) - normalized_perpendicular_component = perpendicular_component / tf.maximum( - perpendicular_component_length, 1e-7) - perpendicular_component_length = tf.sign(perpendicular_component_length) * \ - tf.maximum(tf.abs(perpendicular_component_length) + - tf.minimum(normal_component_length, 0) * bc_parameter, 0) - projected_velocity = bc_normal * tf.maximum( - normal_component_length, - 0) + perpendicular_component_length * normalized_perpendicular_component - grid_v = grid_v * ( - 1 - mask) + mask * projected_velocity - ''' - - grid = tf.concat([grid_v, grid_m], axis = 2) - - return grid - -@ops.RegisterGradient("Mpm") -def _mpm_grad_cc(op, *grads): - """The gradient of the MPM function, as defined by the kernel described in the src directory, for :func:`mpm`""" - attr_labels = ['dt', 'dx', 'gravity', 'resolution', 'V_p', 'material_model', 'incompressibility_exp'] - attrs = {} - for st in attr_labels: - attrs[st] = op.get_attr(st) - - - tensors = list(op.inputs) + list(op.outputs) + list(grads) - return MPM_module.mpm_grad(*tensors, **attrs) diff --git a/tensorflow_graphics/physics/simulation.py b/tensorflow_graphics/physics/simulation.py deleted file mode 100644 index 9663ffdd3..000000000 --- a/tensorflow_graphics/physics/simulation.py +++ /dev/null @@ -1,874 +0,0 @@ -import tensorflow as tf -from vector_math import * -import numpy as np -from time_integration import InitialSimulationState, UpdatedSimulationState -from time_integration import tf_precision, np_precision -from memo import Memo -import IPython -import os -from typing import Iterable, Callable, Union, List - -generate_timeline = False - -try: - import ctypes -except: - print("Warning: cannot import taichi or CUDA solver.") - -def get_new_bc(res, boundary_thickness=4, boundary = None, boundary_ = None): - if len(res) == 2: - bc_parameter = np.zeros( - shape=(1,) + res + (1,), dtype=np_precision) - bc_parameter += 0.0 # Coefficient of friction - bc_normal = np.zeros(shape=(1,) + res + (len(res),), dtype=np_precision) - bc_normal[:, :boundary_thickness] = (1, 0) - bc_normal[:, res[0] - boundary_thickness - 1:] = (-1, 0) - bc_normal[:, :, :boundary_thickness] = (0, 1) - bc_normal[:, :, res[1] - boundary_thickness - 1:] = (0, -1) - for i in range(res[0]): - ry = boundary(i) - x, iy = i, int(np.round(ry)) - k = boundary_(i) - L = (k ** 2 + 1) ** 0.5 - dx, dy = (-k / L, 1 / L) - for y in range(iy - 5, iy + 1): - bc_normal[:, x, y] = (dx, dy) - bc_parameter[:, x, y] = 0 - return bc_parameter, bc_normal - -def get_bounding_box_bc(res : Iterable, friction : float=0.5, boundary_thickness : int=3) -> np.ndarray: - """ - Create a box around the entire world with specified friction and box thickness. Useful for making sure particles don't "escape." The resulting tuple can be passed into the simulation constructor. - - :param res: The resolution of the world in terms of grid cell count. - :type res: tuple of ints. - :param friction: The dynamic friction coefficient of the bounding box - :type friction: float, optional - :param boundary_thickness: The number of grid cells thickness to make non-penetrable on each side of the world. - :type boundary_thickness: int, optional - :return bc_parameter: The friction of the boundary condition, uniform, batch_size x res x 1. Rank 4 or 5 total depending on rank of res (2 or 3). - :rtype bc_paramter: np.array - :return bc_normal: The normal of the boundary condition at each grid cell, uniform, batch_size x res x dim. Rank 4 or 5 total depending on rank of res (2 or 3). - :rtype bc_normal: np.array - """ - if len(res) == 2: - bc_parameter = np.zeros( - shape=(1,) + res + (1,), dtype=np_precision) - bc_parameter += friction # Coefficient of friction - bc_normal = np.zeros(shape=(1,) + res + (len(res),), dtype=np_precision) - # len([:boundary_thickness]) = boundary_thickness. - # len([res[0]:]) = [] - # len([res[0] - boundary_thickness:]) = boundary_thickness. - bc_normal[:, :boundary_thickness] = (1, 0) - bc_normal[:, res[0] - boundary_thickness:] = (-1, 0) - bc_normal[:, :, :boundary_thickness] = (0, 1) - bc_normal[:, :, res[1] - boundary_thickness:] = (0, -1) - else: - assert len(res) == 3 - bc_parameter = np.zeros( - shape=(1,) + res + (1,), dtype=np_precision) - bc_parameter += friction # Coefficient of friction - bc_normal = np.zeros(shape=(1,) + res + (len(res),), dtype=np_precision) - bc_normal[:, :boundary_thickness] = (1, 0, 0) - bc_normal[:, res[0] - boundary_thickness - 1:] = (-1, 0, 0) - bc_normal[:, :, :boundary_thickness] = (0, 1, 0) - bc_normal[:, :, res[1] - boundary_thickness - 1:] = (0, -1, 0) - bc_normal[:, :, :boundary_thickness] = (0, 1, 0) - bc_normal[:, :, res[1] - boundary_thickness - 1:] = (0, -1, 0) - bc_normal[:, :, :, :boundary_thickness] = (0, 0, 1) - bc_normal[:, :, :, res[2] - boundary_thickness - 1:] = (0, 0, -1) - return bc_parameter, bc_normal - -class Simulation: - """The simulation class. In order to simulate a robot, the simulator must be created, then its run and eval_gradients methods may be called. Once initialized, the simulation should be treated as immutable. The simulation takes in the world deformation (boundary condition, gravity, etc.), the robot configuration, and simulator settings. Constructor parameters: - - :param sess: The current tensorflow session. - :type sess: tf.session - :param grid_res: The grid resolution of the world, in terms of the grid node count. Length dim. - :type grid_res: tuple - :param num_particles: The total number of particles to simulate. - :type num_particles: int - :param controller: A function which takes as input a :class:`SimulationState` and returns the actuation that state should produce (closed loop control) and returns the stress actuation matrix (batch_size x dim x dim x num_particles) to apply to each particle and optional debug information. - :type controller: function, optional - :param F_controller: A function which takes as input a :class:`SimulationState` and returns the actuation that state should produce (closed loop control) and returns a global force vector (batch_size x dim x num_particles) to apply to each particle and optional debug information. - :type F_controller: function, optional - :param gravity: an indexible type of length dim of floats, denoting the world gravity. - :type gravity: indexible type, optional - :param dt: The simulation timestep. - :type dt: float, optional. - :param dx: The (uniform) length of each grid cell (in all directions) - :type dx: float, optional - :param bc: The boundary condition of the world. tuple of length 2 of form friction (batch_size, res, 1), normals (batch_size, res, dim). - :type bc: tuple, optional. - :param E: The Young's modulus of the particles. Can either be a scalar (uniform stiffness) or a tensor (spatially varying) of size batch_size x 1 x num_particles. - :type E: float or tf.tensor, optional - :param nu: The Poisson's ratio of the particles. Can either be a scalar (uniform stiffness) or a tensor (spatially varying) of size batch_size x 1 x num_particles. - :type nu: float or tf.tensor, optional - :param m_p: The mass of the particles. Can either be a scalar (uniform stiffness) or a tensor (spatially varying) of size batch_size x 1 x num_particles. - :type m_p: float or tf.tensor, optional - :param V_p: The volume of the particles. Can either be a scalar (uniform stiffness) or a tensor (spatially varying) of size batch_size x 1 x num_particles. - :type V_p: float or tf.tensor, optional - :param batch_size: The batch size. - :type batch_size: int, optional - :param scale: An amount to scale the visualization by. - :type scale: int, optional - :param damping: A Rayleigh damping parameter. - :type damping: float, optional - :param part_size: Number of steps to simulate sequentially on the GPU before returning any results to the CPU. - :type part_size: int, optional - :param use_visualize: Should we store data for visualization purposes? - :type use_visualize: bool, optional - :param use_cuda: Simulate on GPU? If not, CPU - :type use_cuda: bool, optional - :param substeps: Number of steps to simulate sequentially on the GPU before returning any results to the CPU (for recording the memo or applying controller input), This is similar to part_size, but will not call the controller while applying substeps. - :type substeps: int, optional - """ - - def __init__(self, - sess : tf.compat.v1.Session, - # Let's use grid_res to represent the number of grid nodes along each direction. - # So grid_res = (3, 3) means 2 x 2 voxels. - grid_res : Iterable, - num_particles : int, - controller : Callable[['SimulationState'], tf.Tensor]=None, - F_controller : Callable[['SimulationState'], tf.Tensor]=None, - gravity : Iterable=(0, -9.8), - dt : float=0.01, - dx : float=None, - bc : np.ndarray=None, - E : Union[float, tf.Tensor]=10, # E can be either a scalar or a tensor. - nu : Union[float, tf.Tensor]=0.3, - m_p : Union[float, tf.Tensor]=1, # m_p can be either a scalar or a tensor. - V_p : Union[float, tf.Tensor]=1, - batch_size : int=1, - scale : int=None, - damping : float=0, - part_size : int=1, - use_visualize : bool=True, - use_cuda : bool=True, - substeps : int=1, - use_neohookean=False, - incompressibility_exp=-1.0) -> None: - # Set up the constraints for the dynamic mode: - self.substeps = substeps - self.use_cuda = use_cuda - self.use_neohookean = use_neohookean - self.incompressibility_exp = incompressibility_exp - - self.dim = len(grid_res) - self.InitialSimulationState = InitialSimulationState - self.UpdatedSimulationState = UpdatedSimulationState - if self.dim == 2: - self.identity_matrix = identity_matrix - else: - self.identity_matrix = identity_matrix_3d - - assert batch_size == 1, "Only batch_size = 1 is supported." - - self.sess = sess - self.num_particles = num_particles - if scale is None: - self.scale = 900 // grid_res[0] - else: - self.scale = scale - if (self.scale * grid_res[0]) % 2 != 0 or (self.scale * grid_res[1]) % 2 != 0: - self.scale += 1 #keep it even - - self.grid_res = grid_res - self.dim = len(self.grid_res) - if dx is None: - # grid_res[0] - 1 because grid_res is the number of nodes, not cells. - # This way, Node 0 is at 0 and Node[grid_res[0] - 1] is at 1.0. - # We have grid_res[0] - 1 cells that fully covers [0, 1]. - dx = 1.0 / (grid_res[0] - 1) - self.batch_size = batch_size - self.damping = damping - - if bc is None and self.dim == 2: - bc = get_bounding_box_bc(grid_res) - - if bc is not None: - self.bc_parameter, self.bc_normal = bc - self.initial_state = self.InitialSimulationState(self, controller, F_controller) - self.grad_state = self.InitialSimulationState(self, controller, F_controller) - self.gravity = gravity - self.dx = dx - self.dt = dt - if type(E) in [int, float]: - self.youngs_modulus = np.full((batch_size, 1, num_particles), E) - else: - self.youngs_modulus = E - assert self.youngs_modulus.shape == (batch_size, 1, num_particles) - # nu has to be a scalar. - if type(nu) in [int, float]: - self.nu = np.full((batch_size, 1, num_particles), nu) - else: - self.nu = nu - assert self.nu.shape == (batch_size, 1, num_particles) - # We allow m_p to be a scalar or a Tensor. - if type(m_p) in [int, float]: - self.m_p = np.full((batch_size, 1, num_particles), m_p) - else: - self.m_p = m_p - assert self.m_p.shape == (batch_size, 1, num_particles) - # V_p has to be a scalar - if type(V_p) not in [int, float]: - print("Error: V_p must be a scalar.") - raise NotImplementedError - self.V_p = V_p - self.inv_dx = 1.0 / dx - - self.part_size = part_size - self.states = [self.initial_state] - for i in range(part_size): - self.states.append(self.UpdatedSimulationState(self, previous_state = self.states[-1], controller = controller, F_controller = F_controller)) - - self.updated_state = self.states[-1] - self.controller = controller - self.parameterized_initial_state = None - self.point_visualization = [] - self.vector_visualization = [] - self.frame_counter = 0 - self.use_visualize = use_visualize - - def stepwise_sym(self, expr): - temp = tf.stack([expr(state) for state in self.states[1:]], axis = 0) - return tf.reduce_sum(input_tensor=temp, axis = 0) - - def visualize_2d(self, memo : 'Memo', interval : int=1, batch : int=0, export : 'Export'=None, show : bool=False, folder : str=None, youngs_to_color : Callable[[float], float]=None) -> None: - """ - Visualize a simulation in 2D. Uses a built-in visualizer using OpenCV. - - :param memo: The memo returned by the simulation to visualize - :type memo: :class:`Memo` - :param interval: The number of steps to skip in visualization between frames. - :type interval: int, optional - :param batch: The batch num - :type batch: int, optional - :param export: An export object providing information for saving the visualization. Set as None if saving is not desired. - :type export: :class:`Export`, optional - :param show: Whether or not we should show the visualization to the screen - :type show: bool, optional - :param folder: A directory of where to save the visualization - :type folder: str, optional - :param youngs_to_color: A float to float mapping from Youngs modulus to between 0 and 1 for the visualizing Young's modulus in the blue color channel. Set to None if visualizing youngs modulus is not desired. - :type youngs_to_color: func, optional - """ - import math - import cv2 - scale = self.scale - - b = batch - # Pure-white background - background = 0.5 * np.ones( - (self.grid_res[0], self.grid_res[1], 3), dtype=np_precision) - background[:,:,2]=1.0 - - for i in range(self.grid_res[0]): - for j in range(self.grid_res[1]): - if self.bc_parameter[0][i][j] == -1: - background[i][j][0] = 0 - normal = self.bc_normal[0][i][j] - if np.linalg.norm(normal) != 0: - background[i][j] *= 0.7 - background = cv2.resize( - background, (0, 0), fx=scale, fy=scale, interpolation=cv2.INTER_NEAREST) - - alpha = 0.50 - last_image = background - - if folder: - os.makedirs(folder, exist_ok=True) - - - for i, (s, act, points, vectors) in enumerate(zip(memo.steps, memo.actuations, memo.point_visualization, memo.vector_visualization)): - if i % interval != 0: - continue - - particles = [] - pos = s[0][b] * self.inv_dx + 0.5 - pos = np.transpose(pos) - youngs = np.ndarray.flatten(s[6][b]) - - scale = self.scale - - img = background.copy() - for j, (young, p) in enumerate(zip(youngs, pos)): - x, y = tuple(map(lambda t: math.floor(t * scale), p)) - if youngs_to_color is None: - intensity = 0.2 - else: - intensity = youngs_to_color(young) - if act is not None: - a = act[0, :, :, j] - max_act = 2.0 #TODO: pass this in. Right now overriding the max. - else: - a = np.array([[0, 0], [0, 0]]) - max_act = 1.0 - - red = a[0, 0] / max_act/ 2.0 + 0.5 - green = a[1, 1] / max_act / 2.0 + 0.5 - #red = np.sqrt(a[0, 0]**2 + a[1, 1]**2) / max_act / 2.0 - #green = 0.5 - color = (red, green, intensity) - cv2.circle(img, (y, x), radius=3, color=color, thickness=-1) - particles.append((p[0], p[1]) + (young, color[1], color[2], a[0][0], a[0][1], a[1][0], a[1][1])) - - dots = [] - for dot in points: - coord, color, radius = dot - #handle a whole bunch of points here: - for pt in coord: - pt = np.int32((pt * self.inv_dx + 0.5) * scale) - cv2.circle(img, (pt[1], pt[0]), color=color, radius=radius, thickness=-1) - dots.append(tuple(pt) + tuple(color)) - - for line in vectors: - pos, vec, color, gamma = line - pos = (pos * self.inv_dx + 0.5) * scale - vec = vec * gamma + pos - cv2.line(img, (pos[b][1], pos[b][0]), (vec[b][1], vec[b][0]), color = color, thickness = 1) - - last_image = 1 - (1 - last_image) * (1 - alpha) - last_image = np.minimum(last_image, img) - img = last_image.copy() - img = img.swapaxes(0, 1)[::-1, :, ::-1] - - if show: - cv2.imshow('Differentiable MPM Simulator', img) - cv2.waitKey(1) - if export is not None: - export(img) - - if folder: - with open(os.path.join(folder, 'frame{:05d}.txt'.format(i)), 'w') as f: - for p in particles: - print('part ', end=' ', file=f) - for x in p: - print(x, end=' ', file=f) - print(file=f) - for d in dots: - print('vis ', end=' ', file=f) - for x in d: - print(x, end=' ', file=f) - print(file=f) - - if export is not None: - export.wait() - - def visualize_3d(self, memo, interval=1, batch=0, export=None, show=False, folder=None): - if export: - frame_count_delta = self.frame_counter - else: - frame_count_delta = 0 - print(folder) - print("Warning: skipping the 0th frame..") - for i, (s, act, points, vectors) in enumerate(zip(memo.steps, memo.actuations, memo.point_visualization, memo.vector_visualization)): - if i % interval != 0 or i == 0: - continue - pos = s[0][batch].copy() - if output_bgeo: - task = Task('write_partio_c') - #print(np.mean(pos, axis=(0))) - ptr = pos.ctypes.data_as(ctypes.c_void_p).value - suffix = 'bgeo' - else: - task = Task('write_tcb_c') - #print(np.mean(pos, axis=(0))) - act = np.mean(act, axis=(1, 2), keepdims=True)[0, :, 0] * 9 - pos = np.concatenate([pos, act], axis=0).copy() - ptr = pos.ctypes.data_as(ctypes.c_void_p).value - suffix = 'tcb' - if folder is not None: - os.makedirs(folder, exist_ok=True) - else: - folder = '.' - task.run(str(self.num_particles), - str(ptr), '{}/{:04d}.{}'.format(folder, i // interval + frame_count_delta, suffix)) - self.frame_counter += 1 - - def visualize(self, memo, interval=1, batch=0, export=None, show=False, folder=None): - if self.dim == 2: - self.visualize_2d(memo, interval, batch, export, show, folder) - else: - self.visualize_3d(memo, interval, batch, export, show, folder) - - - def initial_state_place_holder(self): - return self.initial_state.to_tuple() - - def evaluate_points(self, state, extra={}): - if self.point_visualization is None: - return [] - pos_tensors = [p[0] for p in self.point_visualization] - feed_dict = {self.initial_state.to_tuple(): state} - feed_dict.update(extra) - - pos = self.sess.run(pos_tensors, feed_dict=feed_dict) - return [(p,) + tuple(list(r)[1:]) - for p, r in zip(pos, self.point_visualization)] - - def evaluate_vectors(self, state, extra = {}): - if self.vector_visualization is None: - return [] - pos_tensors = [v[0] for v in self.vector_visualization] - vec_tensors = [v[1] for v in self.vector_visualization] - feed_dict = {self.initial_state.to_tuple(): state} - feed_dict.update(extra) - pos = self.sess.run(pos_tensors, feed_dict=feed_dict) - vec = self.sess.run(vec_tensors, feed_dict=feed_dict) - return [(p,v) + tuple(list(r)[2:]) for p, v, r in zip(pos, vec, self.vector_visualization)] - - def run(self, - num_steps : int, - initial_state : 'SimulationState'=None, - initial_feed_dict : dict={}, - iteration_feed_dict : dict={}, - loss : Callable[['SimulationState'], tf.Tensor]=None, - stepwise_loss=None, - skip_states : bool=True, - freq : int=1) -> 'Memo': - - """Runs forward simulation for a specified numer of time steps from a specified initial state. - - :param num_steps: The number of steps to simulate forward for. - :type num_steps: int - :param initial_feed_dict: An optional tf.session feed dictionary mapping iniital state placeholder tensors to values to be evaluated during simulation. Useful if parts of the simulation should be represented parametrically. - :type initial_feed_dict: dict, optional - :param iteration_feed_dict: An optional tf.session feed dictionary mapping non-initial state placeholder tensors to values to be evaluated during simulation. Useful if parts of the simulation should be represented parametrically. - :type iteration_feed_dict: dict, optional - :param loss: A loss function that takes in a :class:`SimulationState` and returns a tensor scalar loss. Gradients will be computed with respect to this loss. - :type loss: func, optional - :return: A memo for the simulation. - :rtype: :class:`Memo` - """ - #DOCTODO: other params - - assert num_steps % self.part_size == 0 - if callable(iteration_feed_dict) and stepwise_loss is not None and not skip_states: - print('ERROR: this case is not implemented yet.') - sys.exit(-1) - memo = Memo() - memo.initial_feed_dict = initial_feed_dict - iter_feed_dict_eval = iteration_feed_dict - if callable(iteration_feed_dict): - iter_feed_dict_eval = iteration_feed_dict(0) - memo.iteration_feed_dict = iteration_feed_dict - if initial_state is None: - initial_state = self.initial_state - memo.initial_state = initial_state - - initial_evaluated = [] - for t in initial_state: - if isinstance(t, tf.Tensor): - initial_evaluated.append(self.sess.run(t, initial_feed_dict)) - else: - initial_evaluated.append(t) - - memo.steps = [initial_evaluated] - memo.actuations = [None] - if self.use_visualize: - memo.point_visualization.append(self.evaluate_points(memo.steps[0], iter_feed_dict_eval)) - memo.vector_visualization.append(self.evaluate_vectors(memo.steps[0], iter_feed_dict_eval)) - rest_steps = num_steps - t = 0 - idx = 0 - while rest_steps > 0: - now_step = min(rest_steps, self.part_size) - memo.last_step = now_step - rest_steps -= now_step - feed_dict = {self.initial_state.to_tuple(): memo.steps[-1]} - feed_dict.update(iter_feed_dict_eval) - # Update time and iter_feed_dict_eval. - t += self.dt * self.part_size - if callable(iteration_feed_dict): - iter_feed_dict_eval = iteration_feed_dict(t) - - if generate_timeline: - options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) - run_metadata = tf.RunMetadata() - - timeline_options = { - 'options': options, - 'run_metadata': run_metadata - } - else: - timeline_options = {} - - has_act = self.updated_state.controller is not None - - if stepwise_loss is None: - ret_ph = [self.states[now_step].to_tuple()] - if has_act: - ret_ph += [self.states[now_step].actuation] - ret = self.sess.run(ret_ph, feed_dict=feed_dict, **timeline_options) - '''ANDY DEBUG''' - ''' - with tf.variable_scope("globals", reuse=tf.AUTO_REUSE): - first_time = tf.get_variable("first_time", initializer = tf.constant(1.0), dtype=tf.float32) - first_time = self.sess.run(first_time) - ''' - if False: #Uncomment me for debug info - tmp = self.sess.run("image_test:0", feed_dict=feed_dict, **timeline_options) - recon_scalar = self.sess.run("recon_diff/Squeeze:0", feed_dict=feed_dict, **timeline_options) - recon_image = self.sess.run("recon_image:0", feed_dict=feed_dict, **timeline_options) - feed_dict[self.run_image] = tmp - feed_dict[self.recon_error] = recon_scalar - feed_dict[self.recon_image] = recon_image - summary = self.merged_summary_op.eval(feed_dict=feed_dict) - self.summary_writer.add_summary(summary, self.summary_iter) - self.summary_iter += 1 - inp = self.sess.run("inputs:0", feed_dict=feed_dict, **timeline_options) - f=open('pca.txt','ab') - #print('write') - np.savetxt(f,inp[0, :, 0]) - f.flush() - ''' - import matplotlib.pyplot as plt - plt.imshow(tmp[0]) - plt.show() - ''' - '''END ANDY DEBUG''' - - memo.steps.append(ret[0]) - if has_act: - memo.actuations.append(ret[1]) - else: - if skip_states: - ret_ph = [self.states[now_step].to_tuple()] - if has_act: - ret_ph += [self.states[now_step].actuation] - ret = self.sess.run(ret_ph, feed_dict=feed_dict, **timeline_options) - s = [ret[0]] - a = [ret[1] if has_act else None] - # Compute the loss. - loss_feed_dict = { self.initial_state.to_tuple(): s } - loss_feed_dict.update(iter_feed_dict_eval) - swl = self.sess.run(loss, feed_dict=loss_feed_dict, **timeline_options) - else: - ret_states = [s.to_tuple() for s in self.states] - s, swl = self.sess.run((ret_states[1:], stepwise_loss), - feed_dict=feed_dict, **timeline_options) - if has_act: - ret_actuations = [s.actuation for s in self.states] - a = self.sess.run(ret_actuations[1:], - feed_dict=feed_dict, **timeline_options) - else: - a = [None] * len(s) - memo.steps += s - memo.actuations += a - # It seems that update_stepwise_loss(swl) did not work when swl is a scalar. - memo.update_stepwise_loss(swl) - - if self.use_visualize: - if stepwise_loss is None or skip_states: - memo.point_visualization.append(self.evaluate_points(memo.steps[-1], iter_feed_dict_eval)) - memo.vector_visualization.append(self.evaluate_vectors(memo.steps[-1], iter_feed_dict_eval)) - else: - for s in memo.steps[-now_step:]: - memo.point_visualization.append(self.evaluate_points(s, iter_feed_dict_eval)) - memo.vector_visualization.append(self.evaluate_vectors(s, iter_feed_dict_eval)) - - # Create the Timeline object, and write it to a json file - if generate_timeline: - fetched_timeline = timeline.Timeline(run_metadata.step_stats) - chrome_trace = fetched_timeline.generate_chrome_trace_format() - with open('timeline.json', 'w') as f: - f.write(chrome_trace) - IPython.embed() - - if loss is not None and stepwise_loss is None: - feed_dict = {self.initial_state.to_tuple(): memo.steps[-1]} - feed_dict.update(iter_feed_dict_eval) - memo.loss = self.sess.run(loss, feed_dict=feed_dict) - - return memo - - @staticmethod - def replace_none_with_zero(grads, data): - ret = [] - for g, t in zip(grads, data): - if g is None: - ret.append(tf.zeros_like(t)) - else: - ret.append(g) - return tuple(ret) - - def set_initial_state(self, initial_state): - self.parameterized_initial_state = initial_state - - ''' - def gradients_step_sym(self, loss, variables, steps): - step_grad_variables = tf.gradients( - ys = self.states[steps].to_tuple(), - xs = self.initial_state.to_tuple(), - grad_ys = self.grad_state.to_tuple()) - - step_grad_variables = self.replace_none_with_zero(step_grad_variables, - variables) - - step_grad_states = tf.gradients( - ys=self.states[steps].to_tuple(), - xs=self.initial_state.to_tuple(), - grad_ys=self.grad_state.to_tuple()) - - step_grad_states = self.replace_none_with_zero( - step_grad_states, self.initial_state.to_tuple()) - - return {'steps_grad_variables': } - ''' - - def gradients_sym(self, loss : Callable[[float], float], variables : Iterable[tf.Variable], use_stepwise_loss : bool=False, skip_states : bool=True) -> dict: - """ - Computes a sym dictionary with all the information needed to efficiently compute gradients. This must be called once for a problem and the resulting dictionary must be pased in to any eval_gradients calls. - - :param loss: A loss function that takes in a :class:`SimulationState` and returns a tensor scalar loss. Gradients will be computed with respect to this loss. - :type loss: func, optional - :param variables: A collection of tf.Variables with respect to which gradients are computed. - :type variables: collection - :return: A dict to be passed into eval_gradients. - :rtype: :class:`dict` - - """ - # loss = loss(initial_state) - variables = tuple(variables) - - last_grad_sym = tf.gradients(ys=loss, xs=self.initial_state.to_tuple()) - - last_grad_sym_valid = self.replace_none_with_zero( - last_grad_sym, self.initial_state.to_tuple()) - - for v in variables: - assert tf.convert_to_tensor(v).dtype == tf_precision, v - - # partial S / partial var - step_grad_variables = tf.gradients( - ys=self.updated_state.to_tuple(), - xs=variables, - grad_ys=self.grad_state.to_tuple()) - - step_grad_variables = self.replace_none_with_zero(step_grad_variables, - variables) - - # partial S / partial S' - if use_stepwise_loss and not skip_states: - updated_state = self.states[1] - else: - updated_state = self.updated_state - step_grad_states = tf.gradients( - ys=updated_state.to_tuple(), - xs=self.initial_state.to_tuple(), - grad_ys=self.grad_state.to_tuple()) - - step_grad_states = self.replace_none_with_zero( - step_grad_states, self.initial_state.to_tuple()) - - parameterized_initial_state = tuple([ - v for v in self.parameterized_initial_state if isinstance(v, tf.Tensor) - ]) - parameterized_initial_state_indices = [ - i for i, v in enumerate(self.parameterized_initial_state) - if isinstance(v, tf.Tensor) - ] - - def pick(l): - return tuple(l[i] for i in parameterized_initial_state_indices) - - initial_grad_sym = tf.gradients( - ys=parameterized_initial_state, - xs=variables, - grad_ys=pick(self.grad_state.to_tuple())) - - initial_grad_sym_valid = self.replace_none_with_zero( - initial_grad_sym, variables) - - sym = {} - sym['last_grad_sym_valid'] = last_grad_sym_valid - sym['initial_grad_sym_valid'] = initial_grad_sym_valid - sym['step_grad_variables'] = step_grad_variables - sym['step_grad_states'] = step_grad_states - sym['parameterized_initial_state'] = parameterized_initial_state - sym['pick'] = pick - sym['variables'] = variables - - return sym - - def eval_gradients(self, sym : dict, memo : 'Memo', use_stepwise_loss : bool=False, skip_states : bool=True) -> List[np.ndarray]: - """Compute the gradients of a completed simulation. - :param sym: The symbolic dictionary returned by :meth:`gradients_sym` - :type sym: dict - :param memo: The memo returned by a simulation from :meth:`run` - :type memo: :class:`Memo` - :return: A collection of np.array with the same structure as the variables passed into :meth:`gradient_sym`; a tuple of np.arrays - :rtype: tuple - """ - if use_stepwise_loss and not skip_states: - print('ERROR: this case is not implemented yet.') - sys.exit(0) - last_grad_sym_valid = sym['last_grad_sym_valid'] - initial_grad_sym_valid = sym['initial_grad_sym_valid'] - step_grad_variables = sym['step_grad_variables'] - step_grad_states = sym['step_grad_states'] - parameterized_initial_state = sym['parameterized_initial_state'] - pick = sym['pick'] - variables = sym['variables'] - - grad = [np.zeros(shape=v.shape, dtype=np_precision) for v in variables] - feed_dict = {self.initial_state.to_tuple(): memo.steps[-1]} - t = self.dt * self.part_size * (len(memo.steps) - 1) - iter_feed_dict_eval = memo.iteration_feed_dict - if callable(memo.iteration_feed_dict): - iter_feed_dict_eval = memo.iteration_feed_dict(t) - feed_dict.update(iter_feed_dict_eval) - last_grad_valid = self.sess.run(last_grad_sym_valid, feed_dict=feed_dict) - - - last_step_flag = memo.last_step != self.part_size - if last_step_flag: - raise Exception("Unfinished step") - - if use_stepwise_loss and not skip_states: - updated_state = self.states[1] - else: - updated_state = self.updated_state - - for i in reversed(range(1, len(memo.steps))): - if any(v is not None for v in step_grad_variables): - feed_dict = { - self.initial_state.to_tuple(): memo.steps[i - 1], - updated_state.to_tuple(): memo.steps[i], - self.grad_state.to_tuple(): last_grad_valid - } - feed_dict.update(iter_feed_dict_eval) - grad_acc = self.sess.run(step_grad_variables, feed_dict=feed_dict) - for g, a in zip(grad, grad_acc): - g += a - - feed_dict = { - self.initial_state.to_tuple(): memo.steps[i - 1], - updated_state.to_tuple(): memo.steps[i], - self.grad_state.to_tuple(): last_grad_valid - } - feed_dict.update(iter_feed_dict_eval) - last_grad_valid = self.sess.run(step_grad_states, feed_dict=feed_dict) - # Update iter_feed_dict_eval. - t -= self.dt * self.part_size - if callable(memo.iteration_feed_dict): - iter_feed_dict_eval = memo.iteration_feed_dict(t) - # We define stepwise loss on memo.steps[1:], not the whole memo.steps. - if use_stepwise_loss and i != 1: - feed_dict = {self.initial_state.to_tuple(): memo.steps[i - 1]} - feed_dict.update(iter_feed_dict_eval) - last_step_grad_valid = self.sess.run(last_grad_sym_valid, feed_dict=feed_dict) - for g, a in zip(last_grad_valid, last_step_grad_valid): - g += a - - assert np.isclose(t, 0) - - if any(v is not None for v in initial_grad_sym_valid): - feed_dict = {} - feed_dict[parameterized_initial_state] = pick(memo.steps[0]) - feed_dict[pick(self.grad_state.to_tuple())] = pick(last_grad_valid) - grad_acc = self.sess.run(initial_grad_sym_valid, feed_dict=feed_dict) - for g, a in zip(grad, grad_acc): - g += a - - return grad - - def get_initial_state(self, - position : Union[tf.Tensor, np.ndarray], - velocity : Union[tf.Tensor, np.ndarray]=None, - particle_mass : Union[tf.Tensor, np.ndarray]=None, - particle_volume : Union[tf.Tensor, np.ndarray]=None, - youngs_modulus : Union[tf.Tensor, np.ndarray]=None, - poissons_ratio : Union[tf.Tensor, np.ndarray]=None, - deformation_gradient : Union[tf.Tensor, np.ndarray]=None) -> 'SimulationSate': - - """Gets an :class:`InitialSimulationState` object to pass into sim.run's initial state. Defines the initial state of a simulation. Users may specify the configuration; initial particle position must at least be provided. Defaults to simulation constructor values. - - :param position: batch_size x dim x num_particles representing the initial particle positions. - :type position: np.array or tf.tensor - :param velocity: batch_size x dim x num_particles represneting the initial particle velocities. - :type velocity: np.array or tf.tensor - :param velocity: batch_size x 1 x num_particles represneting the initial particle young's moduluses. - :type velocity: np.array or tf.tensor - :param velocity: batch_size x 1 x num_particles represneting the initial poissons' ratios. - :type velocity: np.array or tf.tensor - :param velocity: batch_size x 1 x num_particles represneting the initial particle masses. - :type velocity: np.array or tf.tensor - :param velocity: batch_size x 1 x num_particles represneting the initial particle volumes. - :type velocity: np.array or tf.tensor - :param velocity: batch_size x dim x dim x num_particles represneting the initial particle deformation_gradient. - :type velocity: np.array or tf.tensor - :return: :class:`InitialSimulationState` representing the initial state of the MPM system. Most useful for passing into :meth:`run` - :rtype: :class:`InitialSimulationState` - """ - acceleration = np.zeros( - shape=[self.batch_size, self.dim, self.num_particles], dtype = np_precision) - if velocity is not None: - initial_velocity = velocity - else: - initial_velocity = np.zeros( - shape=[self.batch_size, self.dim, self.num_particles], dtype = np_precision) - if deformation_gradient is None: - deformation_gradient = self.identity_matrix +\ - np.zeros(shape=(self.batch_size, 1, 1, self.num_particles), dtype = np_precision), - affine = self.identity_matrix * 0 + \ - np.zeros(shape=(self.batch_size, 1, 1, self.num_particles), dtype = np_precision), - batch_size = self.batch_size - num_particles = self.num_particles - - if type(particle_mass) in [int, float]: - self.m_p = np.ones(shape=(batch_size, 1, num_particles), dtype=np_precision) * particle_mass - elif particle_mass is not None: - self.m_p = particle_mass - assert self.m_p.shape == (batch_size, 1, num_particles) - particle_mass = self.m_p - - # For now, we require particle_Volume to be scalars. - if type(particle_volume) in [int, float]: - self.V_p = particle_volume - elif particle_volume is not None: - print("ERROR: particle_volume has to be a scalar.") - raise NotImplementedError - particle_volume = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * self.V_p - - if type(youngs_modulus) in [int, float]: - self.youngs_modulus = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * youngs_modulus - elif youngs_modulus is not None: - self.youngs_modulus = youngs_modulus - else: - self.youngs_modulus = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * self.youngs_modulus - assert self.youngs_modulus.shape == (batch_size, 1, num_particles) - youngs_modulus = self.youngs_modulus - - if type(poissons_ratio) in [int, float]: - self.nu = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * poissons_ratio - elif poissons_ratio is not None: - self.nu = poissons_ratio - else: - self.nu = np.ones(shape=(batch_size, 1, num_particles), dtype = np_precision) * self.nu - assert self.nu.shape == (batch_size, 1, num_particles) - poissons_ratio = self.nu - - #TODO: should this be more general? - #IPython.embed() - grid_mass = np.zeros( - shape=[self.batch_size, *self.grid_res, 1], dtype = np_precision) - grid_velocity = np.zeros( - shape=[self.batch_size, *self.grid_res, self.dim], dtype = np_precision) - - - - - - - return (position, initial_velocity, deformation_gradient, affine, - particle_mass, particle_volume, youngs_modulus, poissons_ratio, - 0, acceleration, grid_mass, grid_velocity) - - def add_point_visualization(self, pos, color=(1, 0, 0), radius=3): - self.point_visualization.append((pos, color, radius)) - - def add_vector_visualization(self, pos, vector, color=(1, 0, 0), scale=10): - self.vector_visualization.append((pos, vector, color, scale)) diff --git a/tensorflow_graphics/physics/src/backward.cu b/tensorflow_graphics/physics/src/backward.cu deleted file mode 100644 index 0a1f11977..000000000 --- a/tensorflow_graphics/physics/src/backward.cu +++ /dev/null @@ -1,565 +0,0 @@ -#include "kernels.h" -#include "linalg.h" -#include "state.cuh" -#include -#include - -template -__global__ void P2G_backward(TState state, TState next_state) { - // Scatter particle gradients to grid nodes - // P2G part of back-propagation - int part_id = blockIdx.x * blockDim.x + threadIdx.x; - if (part_id >= state.num_particles) { - return; - } - - auto x = state.get_x(part_id); - auto v = state.get_v(part_id); - auto F = state.get_F(part_id); - auto C = state.get_C(part_id); - - auto grad_x_next = next_state.get_grad_x(part_id); - auto grad_v_next = next_state.get_grad_v(part_id); - auto grad_F_next = next_state.get_grad_F(part_id); - auto grad_C_next = next_state.get_grad_C(part_id); - - // (A) v_p^n+1, accumulate - grad_v_next = grad_v_next + state.dt * grad_x_next; - - // (B) C_p^n+1, accumulate - for (int alpha = 0; alpha < dim; alpha++) { - for (int beta = 0; beta < dim; beta++) { - for (int gamma = 0; gamma < dim; gamma++) { - grad_C_next[alpha][beta] += - state.dt * grad_F_next[alpha][gamma] * F[beta][gamma]; - } - } - } - - // Accumulate to grad_v and grad_C - // next_state.set_grad_v(part_id, grad_v_next); - // next_state.set_grad_C(part_id, grad_C_next); - - TransferCommon tc(state, x); - - for (int i = 0; i < kernel_volume(); i++) { - real N = tc.w(i); - auto dpos = tc.dpos(i); - - // (C) v_i^n - real grad_v_i[dim]; - for (int alpha = 0; alpha < dim; alpha++) { - grad_v_i[alpha] = grad_v_next[alpha] * N; - for (int beta = 0; beta < dim; beta++) { - grad_v_i[alpha] += - state.invD * N * grad_C_next[alpha][beta] * dpos[beta]; - } - } - auto grad_n = - state.grad_grid_node(tc.base_coord + offset_from_scalar(i)); - for (int d = 0; d < dim; d++) { - // printf("grad_v_i %d %f\n", d, grad_v_i[d]); - atomicAdd(&grad_n[d], grad_v_i[d]); - } - } -} - -TC_FORCE_INLINE __device__ real H(real x) { - return x >= 0 ? 1 : 0; -} - -template -__global__ void grid_backward(TState state) { - // Scatter particle gradients to grid nodes - // P2G part of back-propagation - - using Vector = typename TState::Vector; - int id = blockIdx.x * blockDim.x + threadIdx.x; - if (id < state.num_cells) { - auto node = state.grid_node(id); - auto grad_node = state.grad_grid_node(id); - if (node[dim] > 0) { - // (D) - // Convert grad_v to grad_p - // grad_p = grad_v / m - auto m = node[dim]; - real inv_m = 1.0f / m; - - auto grad_v_i = Vector(grad_node); - auto v_i = Vector(state.grid_star_node(id)); - auto v_i_with_g = v_i; - for (int i = 0; i < dim; i++) { - v_i_with_g[i] += state.gravity[i] * state.dt; - } - auto v_i_star = Vector(state.grid_node(id)); - - auto bc = state.grid_node_bc(id); - auto normal = Vector(bc); - auto lin = v_i_with_g.dot(normal); - - real coeff = bc[dim]; - - if (coeff == -1) { - // sticky - grad_v_i = Vector(0.0f); - } else if (normal.length2() > 0) { - auto vit = v_i_with_g - lin * normal; - auto lit = sqrt(vit.length2() + 1e-7); - auto vithat = (1.0f / lit) * vit; - auto R = lit + coeff * min(lin, 0.0f); - auto litstar = max(R, 0.0f); - auto vistar = litstar * vithat + max(lin, 0.0f) * normal; - - auto r = vistar - v_i_star; - for (int i = 0; i < dim; i++) { - if (fabs(r[i]) > 1e-6) - printf("mismatch r %f\n", r[i]); - } - auto grad_v_i_star = grad_v_i; - - auto grad_litstar = 0.0f; - for (int i = 0; i < dim; i++) { - grad_litstar += grad_v_i_star[i] * vithat[i]; - } - Vector grad_vithat = litstar * grad_v_i_star; - - auto grad_lit = grad_litstar * H(R); - for (int i = 0; i < dim; i++) { - grad_lit += -1 / (lit * lit) * vit[i] * grad_vithat[i]; - } - auto grad_vit = (1 / lit) * (grad_lit * vit + grad_vithat); - auto grad_lin = grad_litstar * H(R) * coeff * H(-lin); - - for (int i = 0; i < dim; i++) { - grad_lin -= grad_vit[i] * normal[i]; - grad_lin += H(lin) * normal[i] * grad_v_i_star[i]; - } - auto new_grad_v_i = grad_lin * normal + grad_vit; - grad_v_i = new_grad_v_i; - } - - auto grad_p = inv_m * grad_v_i; - // (E) - real grad_m = 0; - for (int alpha = 0; alpha < dim; alpha++) { - grad_m -= inv_m * v_i[alpha] * grad_v_i[alpha]; - grad_node[alpha] = grad_p[alpha]; - } - grad_node[dim] = grad_m; - } - } -} - -// (F), (G), (H), (I), (J) -template -__global__ void G2P_backward(TState state, TState next_state) { - // Scatter particle gradients to grid nodes - // P2G part of back-propagation - int part_id = blockIdx.x * blockDim.x + threadIdx.x; - if (part_id >= state.num_particles) { - return; - } - - auto x = state.get_x(part_id); - auto v = state.get_v(part_id); - auto F = state.get_F(part_id); - auto C = state.get_C(part_id); - auto P = state.get_P(part_id); - auto A = state.get_A(part_id); - - auto grad_F_next = next_state.get_grad_F(part_id); - auto grad_C_next = next_state.get_grad_C(part_id); - auto grad_P_next = next_state.get_grad_P(part_id); - auto grad_v_next = next_state.get_grad_v(part_id); - auto grad_x_next = next_state.get_grad_x(part_id); - - auto C_next = next_state.get_C(part_id); - // (A) v_p^n+1, accumulate - grad_v_next = grad_v_next + state.dt * grad_x_next; - - // (B) C_p^n+1, accumulate - for (int alpha = 0; alpha < dim; alpha++) { - for (int beta = 0; beta < dim; beta++) { - for (int gamma = 0; gamma < dim; gamma++) { - grad_C_next[alpha][beta] += - state.dt * grad_F_next[alpha][gamma] * F[beta][gamma]; - } - } - } - - TMatrix grad_P, grad_F, grad_C; - - TransferCommon tc(state, x); - { - /* - real dx = 1e-4f; - TransferCommon tc2(state, x + Vector(0, 0, dx)); - for (int i = 0; i < dim; i++) { - for (int j = 0; j < dim; j++) { - for (int k = 0; k < dim; k++) { - auto d = tc.dw(i, j, k); - printf("%f %f\n", d[2], (tc2.w(i, j, k) - tc.w(i, j, k))/ dx); - } - } - } - */ - } - - TVector grad_v; - real grad_P_scale = state.dt * state.invD * state.V_p; - - // (G) Compute grad_P - for (int i = 0; i < kernel_volume(); i++) { - real N = tc.w(i); - auto dpos = tc.dpos(i); - auto grad_p = state.get_grad_grid_velocity(tc.base_coord + - offset_from_scalar(i)); - auto grad_N = tc.dw(i); - for (int alpha = 0; alpha < dim; alpha++) { - for (int beta = 0; beta < dim; beta++) { - // (G) P_p^n - for (int gamma = 0; gamma < dim; gamma++) { - grad_P[alpha][beta] += - -N * grad_P_scale * grad_p[alpha] * F[gamma][beta] * dpos[gamma]; - } - // (I) C_p^n - if (mpm_enalbe_apic) - grad_C[alpha][beta] += N * grad_p[alpha] * state.m_p * dpos[beta]; - } - } - } - - // (H) term 2 - if (mpm_enalbe_force) { - Times_Rotated_dP_dF_FixedCorotated(state.mu, state.lambda, F, grad_P, - grad_F); - /* - TMatrix grad_F2; - for (int i = 0; i < dim; i++) { - for (int j = 0; j < dim; j++) { - auto inc = F, dec = F; - real delta = 1e-4f; - inc[i][j] += delta; - dec[i][j] -= delta; - auto diff = (1 / (2 * delta)) * (PK1(state.mu, state.lambda, inc) - - PK1(state.mu, state.lambda, dec)); - grad_F2 = grad_F2 + grad_P[i][j] * diff; - } - } - for (int i = 0; i < dim; i++) { - for (int j = 0; j < dim; j++) { - printf("%d %d: %f %f\n", i, j, grad_F2[i][j] * 1e8, - grad_F[i][j] * 1e8); - } - } - - grad_F = grad_F2; - */ - } - - for (int alpha = 0; alpha < dim; alpha++) { - for (int beta = 0; beta < dim; beta++) { - // (H) term 1 - for (int gamma = 0; gamma < dim; gamma++) { - grad_F[alpha][beta] += - grad_F_next[gamma][beta] * - (real(gamma == alpha) + state.dt * C_next[gamma][alpha]) + - grad_P[alpha][gamma] * A[beta][gamma]; - } - } - } - - typename TState::Matrix grad_A; - for (int alpha = 0; alpha < dim; alpha++) { - for (int beta = 0; beta < dim; beta++) { - for (int gamma = 0; gamma < dim; gamma++) { - grad_A[alpha][beta] += - grad_P[gamma][beta] * F[gamma][alpha]; - } - } - } - state.set_grad_A(part_id, grad_A); - - // (J) term 1 - auto grad_x = next_state.get_grad_x(part_id); - // printf("grad_x %f\n", grad_x[0]); - auto G = (mpm_enalbe_force) * -state.invD * state.dt * state.V_p * P * - transposed(F); - if (mpm_enalbe_apic) { - G = G + state.m_p * C; - } - - for (int i = 0; i < kernel_volume(); i++) { - real N = tc.w(i); - auto dpos = tc.dpos(i); - auto grid_coord = tc.base_coord + offset_from_scalar(i); - auto grad_p = state.get_grad_grid_velocity(grid_coord); - - for (int d = 0; d < dim; d++) { - // printf("grad p[%d] %.10f\n", d, grad_p[d]); - } - - auto grad_N = tc.dw(i); - auto n = state.grid_node(grid_coord); - auto mi = state.get_grid_mass(grid_coord); - // printf(" m m %f %f\n", mi, n[dim]); - auto vi = state.get_grid_velocity(grid_coord); - auto grad_mi = state.grad_grid_node(grid_coord)[dim]; - - // printf("%.10f\n", grad_p[0]); - // printf("%.10f\n", grad_p[1]); - // printf("%.10f\n", grad_p[2]); - // printf("\n"); - for (int alpha = 0; alpha < dim; alpha++) { - // (F) v_p^n - grad_v[alpha] += N * state.m_p * grad_p[alpha]; - - // (J) term 5 - grad_x[alpha] += grad_N[alpha] * grad_mi * state.m_p; - - for (int beta = 0; beta < dim; beta++) { - for (int gamma = 0; gamma < dim; gamma++) { - // (H), term 3 - grad_F[alpha][beta] += - -N * grad_p[gamma] * grad_P_scale * P[gamma][beta] * dpos[alpha]; - } - - // (J), term 2 - grad_x[alpha] += grad_v_next[beta] * grad_N[alpha] * vi[beta]; - // (J), term 3 - auto tmp = -grad_C_next[beta][alpha] * N * vi[beta]; - for (int gamma = 0; gamma < dim; gamma++) { - tmp += - grad_C_next[beta][gamma] * grad_N[alpha] * vi[beta] * dpos[gamma]; - } - grad_x[alpha] += state.invD * tmp; - // auto tmp = grad_N[alpha] * vi[beta] * dpos[alpha] - N * vi[beta]; - // grad_x[alpha] += state.invD * grad_C_next[beta][alpha] * tmp; - // (J), term 4 - grad_x[alpha] += - grad_p[beta] * - (grad_N[alpha] * (state.m_p * v[beta] + (G * dpos)[beta]) - - N * G[beta][alpha]); - } - } - } - state.set_grad_x(part_id, grad_x); - /* - for (int i = 0; i < dim; i++) { - printf("v %d %f %f\n", i, grad_v[i], grad_x[i]); - } - for (int i = 0; i < dim; i++) { - for (int j = 0; j < dim; j++) { - printf("m %d %d %f %f %f %f\n", i, j, grad_F[i][j], grad_C[i][j], F[i][j], - grad_P[i][j]); - } - } - */ - state.set_grad_v(part_id, grad_v); - if (mpm_enalbe_force) - state.set_grad_F(part_id, grad_F); - state.set_grad_C(part_id, grad_C); -} - -__device__ real rand_real(int i) { - real t = sinf(i) * 100.0; - return t - floor(t); -} - -__global__ void check2d(int k_) { - constexpr int dim = 2; - int k = k_; - auto rand = [&]() { return rand_real(k++); }; - using Vector = TVector; - auto grad_v_i = Vector(rand(), rand()); - auto v_i = Vector(rand() * 2 - 1, rand() * 2 - 1); - // auto v_i = Vector(-0.5, 0.0); - - auto angle = rand() * 2 * 3.14f; - auto normal = Vector(sinf(angle), cosf(angle)); - // auto normal = Vector(1, 0); - auto coeff = rand(); - // auto coeff = 0; - - auto forward = [&](Vector v_i) { - auto lin = v_i.dot(normal); - auto vit = v_i - lin * normal; - auto lit = sqrt(vit.length2() + 1e-7); - auto vithat = (1.0f / lit) * vit; - auto R = lit + coeff * min(lin, 0.0f); - auto litstar = max(R, 0.0f); - auto vistar = litstar * vithat + max(lin, 0.0f) * normal; - return vistar.dot(grad_v_i); - }; - - auto lin = v_i.dot(normal); - auto vit = v_i - lin * normal; - auto lit = sqrt(vit.length2() + 1e-7); - auto vithat = (1.0f / lit) * vit; - auto R = lit + coeff * min(lin, 0.0f); - auto litstar = max(R, 0.0f); - auto vistar = litstar * vithat + max(lin, 0.0f) * normal; - - auto grad_v_i_star = grad_v_i; - - auto grad_litstar = 0.0f; - for (int i = 0; i < dim; i++) { - grad_litstar += grad_v_i_star[i] * vithat[i]; - } - Vector grad_vithat = litstar * grad_v_i_star; - - auto grad_lit = grad_litstar * H(R); - for (int i = 0; i < dim; i++) { - grad_lit += -1 / (lit * lit) * vit[i] * grad_vithat[i]; - } - auto grad_vit = (1 / lit) * (grad_lit * vit + grad_vithat); - auto grad_lin = grad_litstar * H(R) * coeff * H(-lin); - /* - printf("lit %f\n", lit); - for (int i = 0; i < dim; i++) { - printf("gradlitstar %f\n", grad_litstar); - } - printf("gradlin %f\n", grad_lin); - */ - - for (int i = 0; i < dim; i++) { - // printf("normal [%d] %f\n", i, normal[i]); - grad_lin -= grad_vit[i] * normal[i]; - grad_lin += H(lin) * normal[i] * grad_v_i_star[i]; - } - auto new_grad_v_i = grad_lin * normal + grad_vit; - - real dx = 1e-4f; - for (int d = 0; d < dim; d++) { - Vector delta; - delta[d] = dx; - real f0 = forward(v_i + delta); - real f1 = forward(v_i - delta); - real grad = (f0 - f1) / (2 * dx); - // printf("f0, 1 = %f %f\n", f0, f1); - if (fabs(grad - new_grad_v_i[d]) > 1e-3f) { - printf("errr %d %f %f\n", d, grad, new_grad_v_i[d]); - } else { - // printf("pass %d %f %f\n", d, grad, new_grad_v_i[d]); - } - } -} - -template -void backward(TState &state, TState &next) { - state.clear_gradients(); - int num_blocks = - (state.num_particles + particle_block_dim - 1) / particle_block_dim; - int num_blocks_grid = state.grid_size(); - P2G_backward<<>>(state, next); - auto err = cudaThreadSynchronize(); - grid_backward - <<>>(state); - G2P_backward<<>>(state, next); - if (err) { - printf("Launch: %s\n", cudaGetErrorString(err)); - exit(-1); - } -} - -void MPMGradKernelLauncher(int dim, - int *res, - int num_particles, - real dx, - real dt, - real E, - real nu, - real m_p, - real V_p, - real *gravity, - const real *inx, - const real *inv, - const real *inF, - const real *inC, - const real *inA, - const real *ingrid, - const real *outx, - const real *outv, - const real *outF, - const real *outC, - const real *outP, - const real *outgrid, - const real *outgrid_star, - real *grad_inx, - real *grad_inv, - real *grad_inF, - real *grad_inC, - real *grad_inA, - real *grad_ingrid, - const real *grad_outx, - const real *grad_outv, - const real *grad_outF, - const real *grad_outC, - const real *grad_outP, - const real *grad_outgrid, - const real *grad_outgrid_star) { - if (dim == 2) { - /* - for (int i = 0; i < 10000; i++) { - check2d<<<1, 1>>>(i * 100); - } - exit(-1); - */ - constexpr int dim = 2; - auto current = new TState( - res, num_particles, dx, dt, gravity, (real *)inx, (real *)inv, - (real *)inF, (real *)inC, (real *)outP, (real *)inA, (real *)outgrid, - grad_inx, grad_inv, grad_inF, grad_inC, grad_inA, (real *)grad_outP, - (real *)grad_outgrid); - current->grid_bc = const_cast(ingrid); - current->grid_star_storage = const_cast(outgrid_star); - current->set(V_p, m_p, E, nu); - auto next = new TState( - res, num_particles, dx, dt, gravity, (real *)outx, (real *)outv, - (real *)outF, (real *)outC, nullptr, nullptr, nullptr, - (real *)grad_outx, (real *)grad_outv, (real *)grad_outF, - (real *)grad_outC, nullptr, nullptr, nullptr); - next->set(V_p, m_p, E, nu); - backward(*current, *next); - } else { - constexpr int dim = 3; - auto current = new TState( - res, num_particles, dx, dt, gravity, (real *)inx, (real *)inv, - (real *)inF, (real *)inC, (real *)outP, (real *)inA, (real *)outgrid, - grad_inx, grad_inv, grad_inF, grad_inC, grad_inA, (real *)grad_outP, - (real *)grad_outgrid); - current->grid_bc = const_cast(ingrid); - current->grid_star_storage = const_cast(outgrid_star); - current->set(V_p, m_p, E, nu); - auto next = new TState( - res, num_particles, dx, dt, gravity, (real *)outx, (real *)outv, - (real *)outF, (real *)outC, nullptr, nullptr, nullptr, - (real *)grad_outx, (real *)grad_outv, (real *)grad_outF, - (real *)grad_outC, nullptr, nullptr, nullptr); - next->set(V_p, m_p, E, nu); - backward(*current, *next); - } -} - -template -void backward_mpm_state(void *state_, void *next_state_) { - TState *state = reinterpret_cast *>(state_); - TState *next_state = reinterpret_cast *>(next_state_); - backward(*state, *next_state); -} - -template void backward_mpm_state<2>(void *state_, void *next_state_); -template void backward_mpm_state<3>(void *state_, void *next_state_); - -void set_grad_loss(void *state_) { - constexpr int dim = 3; - TState<3> *state = reinterpret_cast *>(state_); - state->clear_gradients(); - int num_particles = state->num_particles; - std::vector grad_x_host(num_particles * dim); - for (int i = 0; i < num_particles; i++) { - grad_x_host[i] = 1.0f / num_particles; - } - cudaMemcpy(state->grad_x_storage, grad_x_host.data(), - sizeof(real) * dim * num_particles, cudaMemcpyHostToDevice); -} diff --git a/tensorflow_graphics/physics/src/config.h b/tensorflow_graphics/physics/src/config.h deleted file mode 100644 index ea391a416..000000000 --- a/tensorflow_graphics/physics/src/config.h +++ /dev/null @@ -1 +0,0 @@ -// #define TC_DMPM_DIM 2 diff --git a/tensorflow_graphics/physics/src/forward.cu b/tensorflow_graphics/physics/src/forward.cu deleted file mode 100644 index 97fce6e24..000000000 --- a/tensorflow_graphics/physics/src/forward.cu +++ /dev/null @@ -1,366 +0,0 @@ -#include "kernels.h" -#include "linalg.h" -#include "state.cuh" -#include -#include - -// Gather data from SOA -// Ensure coalesced global memory access - -// Do not consider sorting for now. Use atomics instead. - -// One particle per thread -template -__global__ void P2G(TState state) { - // constexpr int scratch_size = 8; - //__shared__ real scratch[dim + 1][scratch_size][scratch_size][scratch_size]; - - int part_id = blockIdx.x * blockDim.x + threadIdx.x; - if (part_id >= state.num_particles) { - return; - } - - real dt = state.dt; - - auto x = state.get_x(part_id); - for (int i = 0; i < dim; i++) { - x[i] = max(2 * state.dx, min(x[i], (state.res[i] - 2) * state.dx)); - } - state.set_x(part_id, x); - auto v = state.get_v(part_id); - auto F = state.get_F(part_id); - auto C = state.get_C(part_id); - - TransferCommon tc(state, x); - - auto A = state.get_A(part_id); - - // Fixed corotated - auto P = PK1(state.mu, state.lambda, F) + F * A; - state.set_P(part_id, P); - auto stress = -state.invD * dt * state.V_p * P * transposed(F); - - auto affine = - real(mpm_enalbe_force) * stress + real(mpm_enalbe_apic) * state.m_p * C; - -#pragma unroll - for (int i = 0; i < kernel_volume(); i++) { - auto dpos = tc.dpos(i); - - real contrib[dim + 1]; - - auto tmp = affine * dpos + state.m_p * v; - - auto w = tc.w(i); - for (int d = 0; d < dim; d++) { - contrib[d] = tmp[d] * w; - } - contrib[dim] = state.m_p * w; - - auto node = state.grid_node(tc.base_coord + offset_from_scalar(i)); - for (int p = 0; p < dim + 1; p++) { - atomicAdd(&node[p], contrib[p]); - } - } - for (int i = 0; i < dim; i++) { - for (int j = 0; j < dim; j++) { - // printf("forward A[%d][%d] %f\n", i, j, A[i][j]); - } - } -} - -template -__global__ void grid_forward(TState state) { - int id = blockIdx.x * blockDim.x + threadIdx.x; - using Vector = TVector; - if (id < state.num_cells) { - auto node = state.grid_node(id); - auto v_i = Vector(node); - if (node[dim] > 0) { - real inv_m = 1.0f / node[dim]; - v_i = inv_m * v_i; - auto grid_backup = state.grid_star_node(id); - for (int i = 0; i < dim; i++) { - grid_backup[i] = v_i[i]; - } - for (int i = 0; i < dim; i++) { - v_i[i] += state.gravity[i] * state.dt; - } - auto bc = state.grid_node_bc(id); - auto normal = Vector(bc); - real coeff = bc[dim]; - if (coeff == -1) { - v_i = Vector(0.0f); - } else if (normal.length2() > 0) { - auto lin = v_i.dot(normal); - auto vit = v_i - lin * normal; - auto lit = sqrt(vit.length2() + 1e-7); - auto vithat = (1 / lit) * vit; - auto litstar = max(lit + coeff * min(lin, 0.0f), 0.0f); - auto vistar = litstar * vithat + max(lin, 0.0f) * normal; - v_i = vistar; - } - - for (int i = 0; i < dim; i++) { - node[i] = v_i[i]; - } - } - } -} - -template -__global__ void G2P(TState state, TState next_state) { - int part_id = blockIdx.x * blockDim.x + threadIdx.x; - if (part_id >= state.num_particles) { - return; - } - - real dt = state.dt; - auto x = state.get_x(part_id); - typename TState::Vector v; - auto F = state.get_F(part_id); - typename TState::Matrix C; - - TransferCommon tc(state, x); - - for (int i = 0; i < kernel_volume(); i++) { - auto dpos = tc.dpos(i); - auto node = state.grid_node(tc.base_coord + offset_from_scalar(i)); - auto node_v = TState::Vector(node); - auto w = tc.w(i); - v = v + w * node_v; - C = C + TState::Matrix::outer_product(w * node_v, state.invD * dpos); - } - next_state.set_x(part_id, x + state.dt * v); - next_state.set_v(part_id, v); - next_state.set_F(part_id, (typename TState::Matrix(1) + dt * C) * F); - next_state.set_C(part_id, C); -} - -template -void advance(TState &state, TState &new_state) { - cudaMemset(state.grid_storage, 0, - state.num_cells * (state.dim + 1) * sizeof(real)); - int num_blocks = - (state.num_particles + particle_block_dim - 1) / particle_block_dim; - P2G<<>>(state); - - grid_forward<<<(state.grid_size() + grid_block_dim - 1) / grid_block_dim, - grid_block_dim>>>(state); - G2P<<>>(state, new_state); - auto err = cudaThreadSynchronize(); - if (err) { - printf("Launch: %s\n", cudaGetErrorString(err)); - exit(-1); - } -} - -// compability -void MPMKernelLauncher(int dim_, - int *res, - int num_particles, - real dx, - real dt, - real E, - real nu, - real m_p, - real V_p, - real *gravity, - const real *inx, - const real *inv, - const real *inF, - const real *inC, - const real *inA, - const real *ingrid, - real *outx, - real *outv, - real *outF, - real *outC, - real *outP, - real *outgrid, - real *outgrid_star) { - if (dim_ == 3) { - constexpr int dim = 3; - auto instate = new TState(res, num_particles, dx, dt, gravity, - (real *)inx, (real *)inv, (real *)inF, - (real *)inC, (real *)inA, outP, outgrid); - instate->grid_bc = const_cast(ingrid); - instate->grid_star_storage = outgrid_star; - instate->set(V_p, m_p, E, nu); - auto outstate = - new TState(res, num_particles, dx, dt, gravity, outx, outv, outF, - outC, nullptr, nullptr, nullptr); - outstate->set(V_p, m_p, E, nu); - advance(*instate, *outstate); - } else { - constexpr int dim = 2; - auto instate = new TState(res, num_particles, dx, dt, gravity, - (real *)inx, (real *)inv, (real *)inF, - (real *)inC, (real *)inA, outP, outgrid); - instate->grid_bc = const_cast(ingrid); - instate->grid_star_storage = outgrid_star; - instate->set(V_p, m_p, E, nu); - auto outstate = - new TState(res, num_particles, dx, dt, gravity, outx, outv, outF, - outC, nullptr, nullptr, nullptr); - outstate->set(V_p, m_p, E, nu); - advance(*instate, *outstate); - } -} -void P2GKernelLauncher(int dim_, - int *res, - int num_particles, - real dx, - real dt, - real E, - real nu, - real m_p, - real V_p, - real *gravity, - const real *inx, - const real *inv, - const real *inF, - const real *inC, - const real *inA, - real *outP, - real *outgrid) { - if (dim_ == 3) { - constexpr int dim = 3; - auto state = new TState(res, num_particles, dx, dt, gravity, - (real *)inx, (real *)inv, (real *)inF, - (real *)inC, (real *)inA, outP, outgrid); - int num_blocks = - (num_particles + particle_block_dim - 1) / particle_block_dim; - cudaMemset(outgrid, 0, state->num_cells * (dim + 1) * sizeof(real)); - state->set(V_p, m_p, E, nu); - P2G<<>>(*state); - } else { - constexpr int dim = 2; - auto state = new TState(res, num_particles, dx, dt, gravity, - (real *)inx, (real *)inv, (real *)inF, - (real *)inC, (real *)inA, outP, outgrid); - int num_blocks = - (num_particles + particle_block_dim - 1) / particle_block_dim; - cudaMemset(outgrid, 0, state->num_cells * (dim + 1) * sizeof(real)); - state->set(V_p, m_p, E, nu); - P2G<<>>(*state); - } -} -/* -void G2PKernelLauncher(int dim_, - int *res, - int num_particles, - real dx, - real dt, - real E, - real nu, - real m_p, - real V_p, - real *gravity, - const real *inx, - const real *inv, - const real *inF, - const real *inC, - const real *inP, - const real *ingrid, - real *outx, - real *outv, - real *outF, - real *outC) { - auto instate = new TState(res, num_particles, dx, dt, gravity, - (real *)inx, (real *)inv, (real *)inF, - (real *)inC, (real *)inP, (real *)ingrid); - auto outstate = new TState(res, num_particles, dx, dt, gravity, outx, - outv, outF, outC, nullptr, nullptr); - int num_blocks = - (num_particles + particle_block_dim - 1) / particle_block_dim; - G2P<<>>(*instate, *outstate); -} -*/ - -template -void initialize_mpm_state(int *res, - int num_particles, - float *gravity, - void *&state_, - float dx, - float dt, - float *initial_positions) { - // State(int res[dim], int num_particles, real dx, real dt, real - auto state = new TState(res, num_particles, dx, dt, gravity); - state_ = state; - cudaMemcpy(state->x_storage, initial_positions, - sizeof(TVector) * num_particles, - cudaMemcpyHostToDevice); -} - -template -void forward_mpm_state(void *state_, void *new_state_) { - auto *state = reinterpret_cast *>(state_); - auto *new_state = reinterpret_cast *>(new_state_); - advance(*state, *new_state); -} - -template void initialize_mpm_state<2>(int *res, - int num_particles, - float *gravity, - void *&state_, - float dx, - float dt, - float *initial_positions); -template void initialize_mpm_state<3>(int *res, - int num_particles, - float *gravity, - void *&state_, - float dx, - float dt, - float *initial_positions); -template void forward_mpm_state<2>(void *, void *); -template void forward_mpm_state<3>(void *, void *); -/* -constexpr int dim = 3; -void P2GKernelLauncher(int res[dim], - int num_particles, - real dx, - real dt, - real gravity[dim], - const real *inx, - const real *inv, - const real *inF, - const real *inC, - real *outP, - real *outgrid) { - auto state = - new TState(res, num_particles, dx, dt, gravity, (real *)inx, - (real *)inv, (real *)inF, (real *)inC, outP, outgrid); - cudaMemset(outgrid, 0, state->num_cells * (dim + 1) * sizeof(real)); - int num_blocks = - (num_particles + particle_block_dim - 1) / particle_block_dim; - P2G<<>>(*state); -} - -void G2PKernelLauncher(int res[dim], - int num_particles, - real dx, - real dt, - real gravity[dim], - const real *inx, - const real *inv, - const real *inF, - const real *inC, - const real *inP, - const real *ingrid, - real *outx, - real *outv, - real *outF, - real *outC) { - auto instate = new TState(res, num_particles, dx, dt, gravity, - (real *)inx, (real *)inv, (real *)inF, - (real *)inC, (real *)inP, (real *)ingrid); - auto outstate = new TState(res, num_particles, dx, dt, gravity, outx, - outv, outF, outC, nullptr, nullptr); - int num_blocks = - (num_particles + particle_block_dim - 1) / particle_block_dim; - G2P<<>>(*instate, *outstate); -} -*/ diff --git a/tensorflow_graphics/physics/src/g2pop.cc b/tensorflow_graphics/physics/src/g2pop.cc deleted file mode 100644 index 209749a69..000000000 --- a/tensorflow_graphics/physics/src/g2pop.cc +++ /dev/null @@ -1,199 +0,0 @@ -#if(0) -#include "tensorflow/core/framework/op_kernel.h" -#include "tensorflow/core/framework/tensor_shape.h" -#include "tensorflow/core/platform/default/logging.h" -#include "tensorflow/core/framework/shape_inference.h" - -using namespace tensorflow; - -/* - Register MPM operation -*/ - - - -REGISTER_OP("G2p") - .Input("position: float") //(batch_size, dim, particles) - .Input("velocity: float") //(batch_size, dim, particles) - .Input("affine: float") //(batch_size, dim, dim, particles) - .Input("deformation: float") //(batch_size, dim, dim, particles) - .Input("poly: float") //(batch_size, dim, dim, particles) - .Input("grid: float") //(batch_size, dim + 1, num_cells) - .Output("position_out: float") - .Output("velocity_out: float") - .Output("affine_out: float") - .Output("deformation_out: float") - .SetShapeFn([](::tensorflow::shape_inference::InferenceContext* c) { - - shape_inference::ShapeHandle x_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(0), 3, &x_shape)); - shape_inference::ShapeHandle v_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(1), 3, &v_shape)); - shape_inference::ShapeHandle F_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(2), 4, &F_shape)); - shape_inference::ShapeHandle C_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(3), 4, &C_shape)); - shape_inference::ShapeHandle P_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(4), 4, &P_shape)); - shape_inference::ShapeHandle grid_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(5), 3, &grid_shape)); - - shape_inference::DimensionHandle temp; - - shape_inference::DimensionHandle batch_size = c->Dim(x_shape, 0); - shape_inference::DimensionHandle batch_sizev = c->Dim(v_shape, 0); - shape_inference::DimensionHandle batch_sizeF = c->Dim(F_shape, 0); - shape_inference::DimensionHandle batch_sizeC = c->Dim(C_shape, 0); - shape_inference::DimensionHandle batch_sizeP = c->Dim(P_shape, 0); - shape_inference::DimensionHandle batch_sizegrid = c->Dim(grid_shape, 0); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizev, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeF, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeC, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeP, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizegrid, &temp)); - - shape_inference::DimensionHandle dim = c->Dim(x_shape, 1); - shape_inference::DimensionHandle dimv = c->Dim(v_shape, 1); - shape_inference::DimensionHandle dimF1 = c->Dim(F_shape, 1); - shape_inference::DimensionHandle dimF2 = c->Dim(F_shape, 2); - shape_inference::DimensionHandle dimC1 = c->Dim(C_shape, 1); - shape_inference::DimensionHandle dimC2 = c->Dim(C_shape, 2); - shape_inference::DimensionHandle dimP1 = c->Dim(P_shape, 1); - shape_inference::DimensionHandle dimP2 = c->Dim(P_shape, 2); - shape_inference::DimensionHandle dimgrid = c->Dim(grid_shape, 2); - TF_RETURN_IF_ERROR(c->Merge(dim, dimv, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimF1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimF2, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimC1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimC2, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimP1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimP2, &temp)); - // TF_RETURN_IF_ERROR(c->Merge(dim + 1, dimgrid, &temp)); TODO - - shape_inference::DimensionHandle particle = c->Dim(x_shape, 2); - shape_inference::DimensionHandle particlev = c->Dim(v_shape, 2); - shape_inference::DimensionHandle particleF = c->Dim(F_shape, 3); - shape_inference::DimensionHandle particleC = c->Dim(C_shape, 3); - shape_inference::DimensionHandle particleP = c->Dim(P_shape, 3); - TF_RETURN_IF_ERROR(c->Merge(particle, particlev, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleF, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleC, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleP, &temp)); - - return Status::OK(); - }); - -/* - MPM Operation GPU -*/ - -void G2PKernelLauncher( - int res[3], int num_particles, float dx, float dt, float gravity[3], - const float *inx, const float *inv, const float *inF, const float *inC, - const float *inP, const float *ingrid, - float *outx, float *outv, float *outF, float *outC); - -class G2POpGPU : public OpKernel { -public: - explicit G2POpGPU(OpKernelConstruction* context) : OpKernel(context) { - } - - void Compute(OpKernelContext* context) override { - - int res[3] = {100, 100, 100}; - float gravity[3] = {0, -0, 0}; - float dx = 1.0f / res[0]; - float dt = 1e-2f; - int num_cells = res[0] * res[1] * res[2]; - - // get the x - const Tensor& inx = context->input(0); - const Tensor& inv = context->input(1); - const Tensor& inF = context->input(2); - const Tensor& inC = context->input(3); - const Tensor& inP = context->input(4); - const Tensor& ingrid = context->input(5); - - // check shapes of input and weights - const TensorShape& x_shape = inx.shape(); - const TensorShape& v_shape = inv.shape(); - const TensorShape& F_shape = inF.shape(); - const TensorShape& C_shape = inC.shape(); - const TensorShape& P_shape = inP.shape(); - const TensorShape& grid_shape = ingrid.shape(); - - //Check that inputs' dimensional - DCHECK_EQ(x_shape.dims(), 3); - DCHECK_EQ(v_shape.dims(), 3); - DCHECK_EQ(F_shape.dims(), 4); - DCHECK_EQ(C_shape.dims(), 4); - DCHECK_EQ(P_shape.dims(), 4); - DCHECK_EQ(grid_shape.dims(), 4); - - const int batch_size = x_shape.dim_size(0); - const int dim = x_shape.dim_size(1); - const int particles = x_shape.dim_size(2); - - //Check input batch_size - DCHECK_EQ(batch_size, v_shape.dim_size(0)); - DCHECK_EQ(batch_size, F_shape.dim_size(0)); - DCHECK_EQ(batch_size, C_shape.dim_size(0)); - DCHECK_EQ(batch_size, P_shape.dim_size(0)); - DCHECK_EQ(batch_size, grid_shape.dim_size(0)); - - //Check input dim - DCHECK_EQ(dim, v_shape.dim_size(1)); - DCHECK_EQ(dim, F_shape.dim_size(1)); - DCHECK_EQ(dim, F_shape.dim_size(2)); - DCHECK_EQ(dim, C_shape.dim_size(1)); - DCHECK_EQ(dim, C_shape.dim_size(2)); - DCHECK_EQ(dim, P_shape.dim_size(1)); - DCHECK_EQ(dim, P_shape.dim_size(2)); - DCHECK_EQ(dim + 1, grid_shape.dim_size(2)); - - //Check input particles - DCHECK_EQ(particles, v_shape.dim_size(2)); - DCHECK_EQ(particles, F_shape.dim_size(3)); - DCHECK_EQ(particles, C_shape.dim_size(3)); - DCHECK_EQ(particles, P_shape.dim_size(3)); - - // create output tensor - Tensor* outx = NULL; - Tensor* outv = NULL; - Tensor* outF = NULL; - Tensor* outC = NULL; - OP_REQUIRES_OK(context, context->allocate_output(0, x_shape, &outx)); - OP_REQUIRES_OK(context, context->allocate_output(1, v_shape, &outv)); - OP_REQUIRES_OK(context, context->allocate_output(2, F_shape, &outF)); - OP_REQUIRES_OK(context, context->allocate_output(3, C_shape, &outC)); - - auto f_inx = inx.flat(); - auto f_inv = inv.flat(); - auto f_inF = inF.flat(); - auto f_inC = inC.flat(); - auto f_inP = inP.flat(); - auto f_ingrid = ingrid.flat(); - auto f_outx = outx->template flat(); - auto f_outv = outv->template flat(); - auto f_outF = outF->template flat(); - auto f_outC = outC->template flat(); - - - G2PKernelLauncher( - res, particles, dx, dt, gravity, - f_inx.data(), - f_inv.data(), - f_inF.data(), - f_inC.data(), - f_inP.data(), - f_ingrid.data(), - f_outx.data(), - f_outv.data(), - f_outF.data(), - f_outC.data()); - } -}; - -REGISTER_KERNEL_BUILDER(Name("G2p").Device(DEVICE_GPU), G2POpGPU); - -#endif diff --git a/tensorflow_graphics/physics/src/kernels.h b/tensorflow_graphics/physics/src/kernels.h deleted file mode 100644 index 34e1c391e..000000000 --- a/tensorflow_graphics/physics/src/kernels.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once -#include - -void saxpy_cuda(int n, float alpha, float *x, float *y); -void test_svd_cuda(int n, float *, float *, float *, float *); -template -void initialize_mpm_state(int *, - int, - float *, - void *&, - float dx, - float dt, - float *initial_positions - ); - -template -void forward_mpm_state(void *, void *); - -template -void backward_mpm_state(void *, void *); - -void set_grad_loss(void *); - -template -void set_mpm_bc(void *state_, float *bc); - -template -void set_mpm_actuation(void *state_, float *act); diff --git a/tensorflow_graphics/physics/src/linalg.h b/tensorflow_graphics/physics/src/linalg.h deleted file mode 100644 index 2d03e2a50..000000000 --- a/tensorflow_graphics/physics/src/linalg.h +++ /dev/null @@ -1,233 +0,0 @@ -#pragma once - -#include -#include "svd.cuh" -#include - -TC_FORCE_INLINE __device__ void svd(Matrix3 &A, - Matrix3 &U, - Matrix3 &sig, - Matrix3 &V) { - // clang-format off - sig[0][1] = sig[0][2] = sig[1][0] = sig[1][2] = sig[2][0] = sig[2][1] = 0; - svd( - A[0][0], A[0][1], A[0][2], - A[1][0], A[1][1], A[1][2], - A[2][0], A[2][1], A[2][2], - U[0][0], U[0][1], U[0][2], - U[1][0], U[1][1], U[1][2], - U[2][0], U[2][1], U[2][2], - sig[0][0], sig[1][1], sig[2][2], - V[0][0], V[0][1], V[0][2], - V[1][0], V[1][1], V[1][2], - V[2][0], V[2][1], V[2][2] - ); - // clang-format on -} - - -TC_FORCE_INLINE __device__ void polar_decomp(TMatrix &A, - TMatrix &R, - TMatrix &S) { - TMatrix U, sig, V; - svd(A, U, sig, V); - R = U * transposed(V); - S = V * sig * transposed(V); -} - -TC_FORCE_INLINE __device__ real Clamp_Small_Magnitude(const real input) { - real magnitude = input > 0 ? input : -input; - real sign = input > 0 ? 1.f : -1.f; - real output = magnitude > 1e-6 ? magnitude : 1e-6; - return output * sign; -} - -template -__device__ void Times_Rotated_dP_dF_FixedCorotated(const real mu, - const real lambda, - TMatrix &F_, - TMatrix &dF_, - TMatrix &dP_); - -TC_FORCE_INLINE __device__ TMatrix dR_from_dF(TMatrix &F, - TMatrix &R, - TMatrix &S, - TMatrix &dF) { - using Matrix = TMatrix; - using Vector = TVector; - // set W = R^T dR = [ 0 x ] - // [ -x 0 ] - // - // R^T dF - dF^T R = WS + SW - // - // WS + SW = [ x(s21 - s12) x(s11 + s22) ] - // [ -x[s11 + s22] x(s21 - s12) ] - // ---------------------------------------------------- - Matrix lhs = transposed(R) * dF - transposed(dF) * R; - real x = lhs(0, 1) / (S(0, 0) + S(1, 1)); - Matrix W = Matrix(0, x, -x, 0); - return R * W; -} - -template <> -inline void __device__ -Times_Rotated_dP_dF_FixedCorotated<2>(real mu, - real lambda, - TMatrix &F, - TMatrix &dF, - TMatrix &dP) { - using Matrix = TMatrix; - using Vector = TVector; - - const auto j = determinant(F); - Matrix r, s; - polar_decomp(F, r, s); - Matrix dR = dR_from_dF(F, r, s, dF); - Matrix JFmT = Matrix(F(1, 1), -F(1, 0), -F(0, 1), F(0, 0)); - Matrix dJFmT = Matrix(dF(1, 1), -dF(1, 0), -dF(0, 1), dF(0, 0)); - dP = 2.0f * mu * (dF - dR) + lambda * JFmT.elementwise_dot(dF) * JFmT + - lambda * (j - 1) * dJFmT; -} - -template <> -inline __device__ void Times_Rotated_dP_dF_FixedCorotated<3>( - const real mu, - const real lambda, - TMatrix &F_, - TMatrix &dF_, - TMatrix &dP_) { - real *F = F_.data(); - real *dF = dF_.data(); - real *dP = dP_.data(); - real U[9]; - real S[3]; - real V[9]; - svd(F[0], F[3], F[6], F[1], F[4], F[7], F[2], F[5], F[8], U[0], U[3], U[6], - U[1], U[4], U[7], U[2], U[5], U[8], S[0], S[1], S[2], V[0], V[3], V[6], - V[1], V[4], V[7], V[2], V[5], V[8]); - - // - real J = S[0] * S[1] * S[2]; - real scaled_mu = 2.f * mu; - real scaled_lambda = lambda * (J - 1.f); - real P_hat[3]; - P_hat[0] = scaled_mu * (S[0] - 1.f) + scaled_lambda * (S[1] * S[2]); - P_hat[1] = scaled_mu * (S[1] - 1.f) + scaled_lambda * (S[0] * S[2]); - P_hat[2] = scaled_mu * (S[2] - 1.f) + scaled_lambda * (S[0] * S[1]); - - real dP_hat_dSigma_upper[6]; - scaled_lambda = lambda * (2.f * J - 1.f) * J; - for (int i = 0; i < 3; ++i) - dP_hat_dSigma_upper[i] = scaled_mu + lambda * J * J / (S[i] * S[i]); - dP_hat_dSigma_upper[3] = scaled_lambda / (S[0] * S[1]); - dP_hat_dSigma_upper[4] = scaled_lambda / (S[0] * S[2]); - dP_hat_dSigma_upper[5] = scaled_lambda / (S[1] * S[2]); - - scaled_lambda = -lambda * (J - 1.f) * J; - real M[3]; - M[0] = 0.5f * (2.f * mu + scaled_lambda / (S[0] * S[1])); - M[1] = 0.5f * (2.f * mu + scaled_lambda / (S[0] * S[2])); - M[2] = 0.5f * (2.f * mu + scaled_lambda / (S[2] * S[2])); - // - - real P[3]; - P[0] = 0.5f * (P_hat[0] + P_hat[1]) / Clamp_Small_Magnitude(S[0] + S[1]); - P[1] = 0.5f * (P_hat[0] + P_hat[2]) / Clamp_Small_Magnitude(S[0] + S[2]); - P[2] = 0.5f * (P_hat[1] + P_hat[2]) / Clamp_Small_Magnitude(S[1] + S[2]); - - real dF_hat[9]; - dF_hat[0] = (dF[0] * U[0] + dF[1] * U[1] + dF[2] * U[2]) * V[0] + - (dF[3] * U[0] + dF[4] * U[1] + dF[5] * U[2]) * V[1] + - (dF[6] * U[0] + dF[7] * U[1] + dF[8] * U[2]) * V[2]; - dF_hat[1] = (dF[0] * U[3] + dF[1] * U[4] + dF[2] * U[5]) * V[0] + - (dF[3] * U[3] + dF[4] * U[4] + dF[5] * U[5]) * V[1] + - (dF[6] * U[3] + dF[7] * U[4] + dF[8] * U[5]) * V[2]; - dF_hat[2] = (dF[0] * U[6] + dF[1] * U[7] + dF[2] * U[8]) * V[0] + - (dF[3] * U[6] + dF[4] * U[7] + dF[5] * U[8]) * V[1] + - (dF[6] * U[6] + dF[7] * U[7] + dF[8] * U[8]) * V[2]; - dF_hat[3] = (dF[0] * U[0] + dF[1] * U[1] + dF[2] * U[2]) * V[3] + - (dF[3] * U[0] + dF[4] * U[1] + dF[5] * U[2]) * V[4] + - (dF[6] * U[0] + dF[7] * U[1] + dF[8] * U[2]) * V[5]; - dF_hat[4] = (dF[0] * U[3] + dF[1] * U[4] + dF[2] * U[5]) * V[3] + - (dF[3] * U[3] + dF[4] * U[4] + dF[5] * U[5]) * V[4] + - (dF[6] * U[3] + dF[7] * U[4] + dF[8] * U[5]) * V[5]; - dF_hat[5] = (dF[0] * U[6] + dF[1] * U[7] + dF[2] * U[8]) * V[3] + - (dF[3] * U[6] + dF[4] * U[7] + dF[5] * U[8]) * V[4] + - (dF[6] * U[6] + dF[7] * U[7] + dF[8] * U[8]) * V[5]; - dF_hat[6] = (dF[0] * U[0] + dF[1] * U[1] + dF[2] * U[2]) * V[6] + - (dF[3] * U[0] + dF[4] * U[1] + dF[5] * U[2]) * V[7] + - (dF[6] * U[0] + dF[7] * U[1] + dF[8] * U[2]) * V[8]; - dF_hat[7] = (dF[0] * U[3] + dF[1] * U[4] + dF[2] * U[5]) * V[6] + - (dF[3] * U[3] + dF[4] * U[4] + dF[5] * U[5]) * V[7] + - (dF[6] * U[3] + dF[7] * U[4] + dF[8] * U[5]) * V[8]; - dF_hat[8] = (dF[0] * U[6] + dF[1] * U[7] + dF[2] * U[8]) * V[6] + - (dF[3] * U[6] + dF[4] * U[7] + dF[5] * U[8]) * V[7] + - (dF[6] * U[6] + dF[7] * U[7] + dF[8] * U[8]) * V[8]; - - real dP_hat[9]; - dP_hat[0] = dP_hat_dSigma_upper[0] * dF_hat[0] + - dP_hat_dSigma_upper[3] * dF_hat[4] + - dP_hat_dSigma_upper[4] * dF_hat[8]; - dP_hat[4] = dP_hat_dSigma_upper[3] * dF_hat[0] + - dP_hat_dSigma_upper[1] * dF_hat[4] + - dP_hat_dSigma_upper[5] * dF_hat[8]; - dP_hat[8] = dP_hat_dSigma_upper[4] * dF_hat[0] + - dP_hat_dSigma_upper[5] * dF_hat[4] + - dP_hat_dSigma_upper[2] * dF_hat[8]; - dP_hat[3] = ((M[0] + P[0]) * dF_hat[3] + (M[0] - P[0]) * dF_hat[1]); - dP_hat[1] = ((M[0] - P[0]) * dF_hat[3] + (M[0] + P[0]) * dF_hat[1]); - dP_hat[6] = ((M[1] + P[1]) * dF_hat[6] + (M[1] - P[1]) * dF_hat[2]); - dP_hat[2] = ((M[1] - P[1]) * dF_hat[6] + (M[1] + P[1]) * dF_hat[2]); - dP_hat[7] = ((M[2] + P[2]) * dF_hat[7] + (M[2] - P[2]) * dF_hat[5]); - dP_hat[5] = ((M[2] - P[2]) * dF_hat[7] + (M[2] + P[2]) * dF_hat[5]); - - dP[0] = (dP_hat[0] * U[0] + dP_hat[1] * U[3] + dP_hat[2] * U[6]) * V[0] + - (dP_hat[3] * U[0] + dP_hat[4] * U[3] + dP_hat[5] * U[6]) * V[3] + - (dP_hat[6] * U[0] + dP_hat[7] * U[3] + dP_hat[8] * U[6]) * V[6]; - dP[1] = (dP_hat[0] * U[1] + dP_hat[1] * U[4] + dP_hat[2] * U[7]) * V[0] + - (dP_hat[3] * U[1] + dP_hat[4] * U[4] + dP_hat[5] * U[7]) * V[3] + - (dP_hat[6] * U[1] + dP_hat[7] * U[4] + dP_hat[8] * U[7]) * V[6]; - dP[2] = (dP_hat[0] * U[2] + dP_hat[1] * U[5] + dP_hat[2] * U[8]) * V[0] + - (dP_hat[3] * U[2] + dP_hat[4] * U[5] + dP_hat[5] * U[8]) * V[3] + - (dP_hat[6] * U[2] + dP_hat[7] * U[5] + dP_hat[8] * U[8]) * V[6]; - dP[3] = (dP_hat[0] * U[0] + dP_hat[1] * U[3] + dP_hat[2] * U[6]) * V[1] + - (dP_hat[3] * U[0] + dP_hat[4] * U[3] + dP_hat[5] * U[6]) * V[4] + - (dP_hat[6] * U[0] + dP_hat[7] * U[3] + dP_hat[8] * U[6]) * V[7]; - dP[4] = (dP_hat[0] * U[1] + dP_hat[1] * U[4] + dP_hat[2] * U[7]) * V[1] + - (dP_hat[3] * U[1] + dP_hat[4] * U[4] + dP_hat[5] * U[7]) * V[4] + - (dP_hat[6] * U[1] + dP_hat[7] * U[4] + dP_hat[8] * U[7]) * V[7]; - dP[5] = (dP_hat[0] * U[2] + dP_hat[1] * U[5] + dP_hat[2] * U[8]) * V[1] + - (dP_hat[3] * U[2] + dP_hat[4] * U[5] + dP_hat[5] * U[8]) * V[4] + - (dP_hat[6] * U[2] + dP_hat[7] * U[5] + dP_hat[8] * U[8]) * V[7]; - dP[6] = (dP_hat[0] * U[0] + dP_hat[1] * U[3] + dP_hat[2] * U[6]) * V[2] + - (dP_hat[3] * U[0] + dP_hat[4] * U[3] + dP_hat[5] * U[6]) * V[5] + - (dP_hat[6] * U[0] + dP_hat[7] * U[3] + dP_hat[8] * U[6]) * V[8]; - dP[7] = (dP_hat[0] * U[1] + dP_hat[1] * U[4] + dP_hat[2] * U[7]) * V[2] + - (dP_hat[3] * U[1] + dP_hat[4] * U[4] + dP_hat[5] * U[7]) * V[5] + - (dP_hat[6] * U[1] + dP_hat[7] * U[4] + dP_hat[8] * U[7]) * V[8]; - dP[8] = (dP_hat[0] * U[2] + dP_hat[1] * U[5] + dP_hat[2] * U[8]) * V[2] + - (dP_hat[3] * U[2] + dP_hat[4] * U[5] + dP_hat[5] * U[8]) * V[5] + - (dP_hat[6] * U[2] + dP_hat[7] * U[5] + dP_hat[8] * U[8]) * V[8]; -}; - -template -TC_FORCE_INLINE __device__ TMatrix PK1(real mu, - real lambda, - TMatrix F) { - real J = determinant(F); - TMatrix r, s; - polar_decomp(F, r, s); - return 2 * mu * (F - r) + - TMatrix(lambda * (J - 1) * J) * transposed(inversed(F)); -} - -template -TC_FORCE_INLINE __device__ TMatrix -kirchhoff_stress(real mu, real lambda, TMatrix F) { - real J = determinant(F); - TMatrix r, s; - polar_decomp(F, r, s); - return 2 * mu * (F - r) * transposed(F) + - TMatrix(lambda * (J - 1) * J); -} - diff --git a/tensorflow_graphics/physics/src/misc.cu b/tensorflow_graphics/physics/src/misc.cu deleted file mode 100644 index 913c95eee..000000000 --- a/tensorflow_graphics/physics/src/misc.cu +++ /dev/null @@ -1,142 +0,0 @@ -#include "kernels.h" -#include "linalg.h" -#include "state.cuh" -#include -#include - -__global__ void saxpy(int n, real a, real *x, real *y) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { - y[i] = a * x[i] + y[i]; - } -} - -void saxpy_cuda(int N, real alpha, real *x, real *y) { - real *d_x, *d_y; - - cudaMalloc(&d_x, N * sizeof(real)); - cudaMalloc(&d_y, N * sizeof(real)); - - cudaMemcpy(d_x, x, N * sizeof(real), cudaMemcpyHostToDevice); - cudaMemcpy(d_y, y, N * sizeof(real), cudaMemcpyHostToDevice); - - saxpy<<<(N + 255) / 256, 256>>>(N, alpha, d_x, d_y); - - cudaMemcpy(y, d_y, N * sizeof(real), cudaMemcpyDeviceToHost); - - cudaFree(d_x); - cudaFree(d_y); -} - -__global__ void test_svd(int n, - Matrix3 *A, - Matrix3 *U, - Matrix3 *sig, - Matrix3 *V) { - int id = blockIdx.x * blockDim.x + threadIdx.x; - if (id < n) { - svd(A[id], U[id], sig[id], V[id]); - } -} - -// 3D only.. -void test_svd_cuda(int n, real *A, real *U, real *sig, real *V) { - Matrix3 *d_A, *d_U, *d_sig, *d_V; - - cudaMalloc(&d_A, sizeof(Matrix3) * (unsigned int)(n)); - cudaMemcpy(d_A, A, sizeof(Matrix3) * n, cudaMemcpyHostToDevice); - - cudaMalloc(&d_U, sizeof(Matrix3) * (unsigned int)(n)); - cudaMalloc(&d_sig, sizeof(Matrix3) * (unsigned int)(n)); - cudaMalloc(&d_V, sizeof(Matrix3) * (unsigned int)(n)); - - test_svd<<<(n + 127) / 128, 128>>>(n, d_A, d_U, d_sig, d_V); - - std::vector h_U(n), h_sig(n), h_V(n); - cudaMemcpy(h_U.data(), d_U, sizeof(Matrix3) * n, cudaMemcpyDeviceToHost); - cudaMemcpy(h_sig.data(), d_sig, sizeof(Matrix3) * n, cudaMemcpyDeviceToHost); - cudaMemcpy(h_V.data(), d_V, sizeof(Matrix3) * n, cudaMemcpyDeviceToHost); - - // Taichi uses column-first storage - for (int p = 0; p < n; p++) { - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - U[p * 12 + 4 * i + j] = h_U[p][j][i]; - sig[p * 12 + 4 * i + j] = h_sig[p][j][i]; - V[p * 12 + 4 * i + j] = h_V[p][j][i]; - } - } - } -} - -template -__host__ std::vector TStateBase::fetch_x() { - std::vector host_x(dim * num_particles); - cudaMemcpy(host_x.data(), x_storage, - sizeof(TVector) * num_particles, - cudaMemcpyDeviceToHost); - return host_x; -} - -template -__host__ std::vector TStateBase::fetch_grad_v() { - std::vector host_grad_v(dim * num_particles); - cudaMemcpy(host_grad_v.data(), grad_v_storage, - sizeof(TVector) * num_particles, - cudaMemcpyDeviceToHost); - return host_grad_v; -} - -template -__host__ std::vector TStateBase::fetch_grad_x() { - std::vector host_grad_x(dim * num_particles); - cudaMemcpy(host_grad_x.data(), grad_x_storage, - sizeof(TVector) * num_particles, - cudaMemcpyDeviceToHost); - return host_grad_x; -} - -template -void TStateBase::set_initial_v(float *v) { - cudaMemcpy(v_storage, v, sizeof(real) * dim * num_particles, - cudaMemcpyHostToDevice); -} - -template -void TStateBase::set_initial_F(float *F) { - cudaMemcpy(F_storage, F, sizeof(real) * dim * dim * num_particles, - cudaMemcpyHostToDevice); -} - -template std::vector TStateBase<2>::fetch_x(); -template std::vector TStateBase<3>::fetch_x(); -template std::vector TStateBase<2>::fetch_grad_x(); -template std::vector TStateBase<3>::fetch_grad_x(); -template std::vector TStateBase<2>::fetch_grad_v(); -template std::vector TStateBase<3>::fetch_grad_v(); -template void TStateBase<2>::set_initial_F(float *); -template void TStateBase<3>::set_initial_F(float *); -template void TStateBase<2>::set_initial_v(float *); -template void TStateBase<3>::set_initial_v(float *); - -template -void set_mpm_bc(void *state_, float *bc) { - auto state = reinterpret_cast *>(state_); - cudaMemcpy(state->grid_bc, bc, - sizeof(TVector) * state->num_cells, - cudaMemcpyHostToDevice); -} - -template void set_mpm_bc<2>(void *state_, float *bc); -template void set_mpm_bc<3>(void *state_, float *bc); - -template -void set_mpm_actuation(void *state_, float *act) { - auto state = reinterpret_cast *>(state_); - cudaMemcpy(state->A_storage, act, - sizeof(real) * dim * dim * state->num_particles, - cudaMemcpyHostToDevice); -} - -template void set_mpm_actuation<2>(void *state_, float *); -template void set_mpm_actuation<3>(void *state_, float *); diff --git a/tensorflow_graphics/physics/src/mpmgradop.cc b/tensorflow_graphics/physics/src/mpmgradop.cc deleted file mode 100644 index 3835b4877..000000000 --- a/tensorflow_graphics/physics/src/mpmgradop.cc +++ /dev/null @@ -1,188 +0,0 @@ -#include "tensorflow/core/framework/op_kernel.h" -#include "tensorflow/core/framework/tensor_shape.h" -#include "tensorflow/core/platform/default/logging.h" -#include "tensorflow/core/framework/shape_inference.h" - -using namespace tensorflow; - -REGISTER_OP("MpmGrad") - .Input("position: float") //(batch_size, dim, particles) - .Input("velocity: float") //(batch_size, dim, particles) - .Input("affine: float") //(batch_size, dim, dim, particles) - .Input("deformation: float") //(batch_size, dim, dim, particles) - .Input("actuation: float") //(batch_size, dim, dim, particles - .Input("grid_normal: float") //(batch_size, num_cells, dim + 1) - .Input("position_out: float") //(batch_size, dim, particles) - .Input("velocity_out: float") //(batch_size, dim, particles) - .Input("affine_out: float") //(batch_size, dim, dim, particles) - .Input("deformation_out: float") //(batch_size, dim, dim, particles) - .Input("poly_out: float") //(batch_size, dim, dim, particles) - .Input("grid_out: float") //(batch_size, num_cells, dim + 1) - .Input("grid_star_out: float") //(batch_size, num_cells, dim + 1) - .Input("position_out_grad: float") //(batch_size, dim, particles) - .Input("velocity_out_grad: float") //(batch_size, dim, particles) - .Input("affine_out_grad: float") //(batch_size, dim, dim, particles) - .Input("deformation_out_grad: float") //(batch_size, dim, dim, particles) - .Input("poly_out_grad: float") //(batch_size, dim, dim, particles) - .Input("grid_out_grad: float") //(batch_size, num_cells, dim + 1) - .Input("grid_out_star_grad: float") //(batch_size, num_cells, dim + 1) - .Attr("dt: float") - .Attr("dx: float") - .Attr("E: float") - .Attr("nu: float") - .Attr("m_p: float") - .Attr("V_p: float") - .Attr("gravity: list(float)") - .Attr("resolution: list(int)") - .Output("position_grad: float") //(batch_size, dim, particles) - .Output("velocity_grad: float") //(batch_size, dim, particles) - .Output("affine_grad: float") //(batch_size, dim, dim, particles) - .Output("deformation_grad: float") //(batch_size, dim, dim, particles) - .Output("actuation_grad: float") //(batch_size, dim, dim, particles) - .Output("grid_normal_grad: float"); //(batch_size, num_cells, dim + 1) - - -void MPMGradKernelLauncher( - int dim, int *res, int num_particles, float dx, float dt, float E, float nu, - float m_p, float V_p, - float *gravity, - const float *inx, const float *inv, const float *inF, const float *inC, - const float *inA, const float *ingrid, - const float *outx, const float *outv, const float *outF, const float *outC, - const float *outP, const float *outgrid, const float *outgrid_star, - float *grad_inx, float *grad_inv, float *grad_inF, float *grad_inC, - float *grad_inA, float *grad_ingrid, - const float *grad_outx, const float *grad_outv, - const float *grad_outF, const float *grad_outC, - const float *grad_outP, const float *grad_outgrid, - const float *grad_outgrid_star); - -class MPMGradOpGPU : public OpKernel { - private: - float dt_; - float dx_; - float E_, nu_, m_p_, V_p_; - std::vector gravity_; - std::vector res_; - public: - explicit MPMGradOpGPU(OpKernelConstruction* context) : OpKernel(context) { - OP_REQUIRES_OK(context, - context->GetAttr("dt", &dt_)); - OP_REQUIRES_OK(context, - context->GetAttr("dx", &dx_)); - OP_REQUIRES_OK(context, - context->GetAttr("E", &E_)); - OP_REQUIRES_OK(context, - context->GetAttr("nu", &nu_)); - OP_REQUIRES_OK(context, - context->GetAttr("m_p", &m_p_)); - OP_REQUIRES_OK(context, - context->GetAttr("V_p", &V_p_)); - OP_REQUIRES_OK(context, - context->GetAttr("gravity", &gravity_)); - OP_REQUIRES_OK(context, - context->GetAttr("resolution", &res_)); - } - - void Compute(OpKernelContext* context) override { - //printf("MPMOpGPU\n"); - - // get the x - int cnt = 0; - const Tensor& inx = context->input(cnt++); - const Tensor& inv = context->input(cnt++); - const Tensor& inF = context->input(cnt++); - const Tensor& inC = context->input(cnt++); - const Tensor& inA = context->input(cnt++); - const Tensor& ingrid = context->input(cnt++); - const Tensor& outx = context->input(cnt++); - const Tensor& outv = context->input(cnt++); - const Tensor& outF = context->input(cnt++); - const Tensor& outC = context->input(cnt++); - const Tensor& outP = context->input(cnt++); - const Tensor& outgrid = context->input(cnt++); - const Tensor& outgrid_star = context->input(cnt++); - const Tensor& grad_outx = context->input(cnt++); - const Tensor& grad_outv = context->input(cnt++); - const Tensor& grad_outF = context->input(cnt++); - const Tensor& grad_outC = context->input(cnt++); - const Tensor& grad_outP = context->input(cnt++); - const Tensor& grad_outgrid = context->input(cnt++); - const Tensor& grad_outgrid_star = context->input(cnt++); - - const TensorShape& x_shape = inx.shape(); - const TensorShape& v_shape = inv.shape(); - const TensorShape& F_shape = inF.shape(); - const TensorShape& C_shape = inC.shape(); - const TensorShape& A_shape = inA.shape(); - const TensorShape& grid_shape = ingrid.shape(); - - const int particles = x_shape.dim_size(2); - - const int dim = x_shape.dim_size(1); - int res[dim]; - float gravity[dim]; - int num_cells = 1; - for (int i = 0; i < dim; i++) { - res[i] = res_[i]; - num_cells *= res[i]; - gravity[i] = gravity_[i]; - } - - // create output tensor - Tensor* grad_inx= NULL; - Tensor* grad_inv= NULL; - Tensor* grad_inF= NULL; - Tensor* grad_inC= NULL; - Tensor* grad_inA= NULL; - Tensor* grad_ingrid= NULL; - OP_REQUIRES_OK(context, context->allocate_output(0, x_shape, &grad_inx)); - OP_REQUIRES_OK(context, context->allocate_output(1, v_shape, &grad_inv)); - OP_REQUIRES_OK(context, context->allocate_output(2, F_shape, &grad_inF)); - OP_REQUIRES_OK(context, context->allocate_output(3, C_shape, &grad_inC)); - OP_REQUIRES_OK(context, context->allocate_output(4, A_shape, &grad_inA)); - OP_REQUIRES_OK(context, context->allocate_output(5, grid_shape, &grad_ingrid)); - - auto f_inx = inx.flat(); - auto f_inv = inv.flat(); - auto f_inF = inF.flat(); - auto f_inC = inC.flat(); - auto f_inA = inA.flat(); - auto f_ingrid = ingrid.flat(); - auto f_outx = outx.flat(); - auto f_outv = outv.flat(); - auto f_outF = outF.flat(); - auto f_outC = outC.flat(); - auto f_outP = outP.flat(); - auto f_outgrid = outgrid.flat(); - auto f_outgrid_star = outgrid_star.flat(); - auto f_grad_outx = grad_outx.flat(); - auto f_grad_outv = grad_outv.flat(); - auto f_grad_outF = grad_outF.flat(); - auto f_grad_outC = grad_outC.flat(); - auto f_grad_outP = grad_outP.flat(); - auto f_grad_outgrid = grad_outgrid.flat(); - auto f_grad_outgrid_star = grad_outgrid_star.flat(); - auto f_grad_inx = grad_inx->template flat(); - auto f_grad_inv = grad_inv->template flat(); - auto f_grad_inF = grad_inF->template flat(); - auto f_grad_inC = grad_inC->template flat(); - auto f_grad_inA = grad_inA->template flat(); - auto f_grad_ingrid = grad_ingrid->template flat(); - - - MPMGradKernelLauncher(dim, res, particles, dx_, dt_, E_, nu_, m_p_, V_p_, gravity, - f_inx.data(), f_inv.data(), f_inF.data(), f_inC.data(), f_inA.data(), f_ingrid.data(), - f_outx.data(), f_outv.data(), f_outF.data(), f_outC.data(), - f_outP.data(), f_outgrid.data(), f_outgrid_star.data(), - f_grad_inx.data(), f_grad_inv.data(), - f_grad_inF.data(), f_grad_inC.data(), - f_grad_inA.data(), f_grad_ingrid.data(), - f_grad_outx.data(), f_grad_outv.data(), - f_grad_outF.data(), f_grad_outC.data(), - f_grad_outP.data(), f_grad_outgrid.data(), - f_grad_outgrid_star.data()); - } -}; - -REGISTER_KERNEL_BUILDER(Name("MpmGrad").Device(DEVICE_GPU), MPMGradOpGPU); diff --git a/tensorflow_graphics/physics/src/mpmop.cc b/tensorflow_graphics/physics/src/mpmop.cc deleted file mode 100644 index 6d6f271fb..000000000 --- a/tensorflow_graphics/physics/src/mpmop.cc +++ /dev/null @@ -1,295 +0,0 @@ -#include "tensorflow/core/framework/op_kernel.h" -#include "tensorflow/core/framework/tensor_shape.h" -#include "tensorflow/core/platform/default/logging.h" -#include "tensorflow/core/framework/shape_inference.h" -#include "config.h" - -using namespace tensorflow; - -/* - Register MPM operation -*/ - -REGISTER_OP("Mpm") - .Input("position: float") //(batch_size, dim, particles) - .Input("velocity: float") //(batch_size, dim, particles) - .Input("affine: float") //(batch_size, dim, dim, particles) - .Input("deformation: float") //(batch_size, dim, dim, particles) - .Input("actuation: float") //(batch_size, dim, dim, particles) - .Input("grid_bc: float") //(batch_size, num_cells, dim + 1) - .Attr("dt: float = 0.01") - .Attr("dx: float = 0.01") - .Attr("E: float = 50") - .Attr("nu: float = 0.3") - .Attr("m_p: float = 100") - .Attr("V_p: float = 10") - .Attr("gravity: list(float) = [0, 0, 0]") - .Attr("resolution: list(int) = [100, 100, 100]") - .Output("position_out: float") - .Output("velocity_out: float") - .Output("affine_out: float") - .Output("deformation_out: float") - .Output("poly_out: float") //(batch_size, dim, dim, particles) - .Output("grid_out: float") //(batch_size, num_cells, dim + 1) - .Output("grid_star: float") //(batch_size, dim, dim, particles) - .SetShapeFn([](::tensorflow::shape_inference::InferenceContext *c) { - - shape_inference::ShapeHandle x_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(0), 3, &x_shape)); - shape_inference::ShapeHandle v_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(1), 3, &v_shape)); - shape_inference::ShapeHandle F_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(2), 4, &F_shape)); - shape_inference::ShapeHandle C_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(3), 4, &C_shape)); - shape_inference::ShapeHandle A_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(4), 4, &A_shape)); - shape_inference::ShapeHandle grid_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(5), 3, &grid_shape)); - - shape_inference::DimensionHandle temp; - - shape_inference::DimensionHandle batch_size = c->Dim(x_shape, 0); - shape_inference::DimensionHandle batch_sizev = c->Dim(v_shape, 0); - shape_inference::DimensionHandle batch_sizeF = c->Dim(F_shape, 0); - shape_inference::DimensionHandle batch_sizeC = c->Dim(C_shape, 0); - shape_inference::DimensionHandle batch_sizeA = c->Dim(A_shape, 0); - shape_inference::DimensionHandle batch_sizegrid = c->Dim(grid_shape, 0); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizev, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeF, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeC, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeA, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizegrid, &temp)); - - shape_inference::DimensionHandle dim = c->Dim(x_shape, 1); - shape_inference::DimensionHandle dimv = c->Dim(v_shape, 1); - shape_inference::DimensionHandle dimF1 = c->Dim(F_shape, 1); - shape_inference::DimensionHandle dimF2 = c->Dim(F_shape, 2); - shape_inference::DimensionHandle dimC1 = c->Dim(C_shape, 1); - shape_inference::DimensionHandle dimC2 = c->Dim(C_shape, 2); - shape_inference::DimensionHandle dimA1 = c->Dim(A_shape, 1); - shape_inference::DimensionHandle dimA2 = c->Dim(A_shape, 2); - shape_inference::DimensionHandle dimgrid = c->Dim(grid_shape, 2); - TF_RETURN_IF_ERROR(c->Merge(dim, dimv, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimF1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimF2, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimC1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimC2, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimA1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimA2, &temp)); - auto dim_ = *((int *)dim.Handle()); - auto dim_1 = c->MakeDim(shape_inference::DimensionOrConstant(dim_ + 1)); - TF_RETURN_IF_ERROR(c->Merge(dim_1, dimgrid, &temp)); - - shape_inference::DimensionHandle particle = c->Dim(x_shape, 2); - shape_inference::DimensionHandle particlev = c->Dim(v_shape, 2); - shape_inference::DimensionHandle particleF = c->Dim(F_shape, 3); - shape_inference::DimensionHandle particleC = c->Dim(C_shape, 3); - shape_inference::DimensionHandle particleA = c->Dim(A_shape, 3); - TF_RETURN_IF_ERROR(c->Merge(particle, particlev, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleF, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleC, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleA, &temp)); - - - std::vector res_; - TF_RETURN_IF_ERROR(c->GetAttr("resolution", &res_)); - std::vector gravity_; - TF_RETURN_IF_ERROR(c->GetAttr("gravity", &gravity_)); - - if ((int)gravity_.size() != dim_) - return errors::InvalidArgument("Gravity length must be equal to ", dim_, - ", but is ", gravity_.size()); - if ((int)res_.size() != dim_) - return errors::InvalidArgument("Resolution length must be equal to ", - dim_, ", but is ", res_.size()); - - - int res[3]; - int num_cells = 1; - for (int i = 0; i < dim_; i++) { - res[i] = res_[i]; - num_cells *= res[i]; - } - auto num_cells_ = c->MakeDim(shape_inference::DimensionOrConstant(num_cells)); - - shape_inference::DimensionHandle num_cells_grid = c->Dim(grid_shape, 1); - TF_RETURN_IF_ERROR(c->Merge(num_cells_, num_cells_grid, &temp)); - - c->set_output(0, x_shape); - c->set_output(1, v_shape); - c->set_output(2, F_shape); - c->set_output(3, C_shape); - c->set_output(4, C_shape); - c->set_output(5, grid_shape); - c->set_output(6, grid_shape); - - return Status::OK(); - }); - -/* - MPM Operation GPU -*/ - -void MPMKernelLauncher(int dim, - int *res, - int num_particles, - float dx, - float dt, - float E, - float nu, - float m_p, - float V_p, - float *gravity, - const float *inx, - const float *inv, - const float *inF, - const float *inC, - const float *inA, - const float *ingrid, - float *outx, - float *outv, - float *outF, - float *outC, - float *outP, - float *outgrid, - float *outgrid_star); - -class MPMOpGPU : public OpKernel { - private: - float dt_; - float dx_; - float m_p_, V_p_, E_, nu_; - std::vector gravity_; - std::vector res_; - - public: - explicit MPMOpGPU(OpKernelConstruction *context) : OpKernel(context) { - OP_REQUIRES_OK(context, context->GetAttr("dt", &dt_)); - OP_REQUIRES(context, dt_ > 0, - errors::InvalidArgument("Need dt > 0, got ", dt_)); - OP_REQUIRES_OK(context, context->GetAttr("dx", &dx_)); - OP_REQUIRES(context, dx_ > 0, - errors::InvalidArgument("Need dx > 0, got ", dx_)); - OP_REQUIRES_OK(context, context->GetAttr("gravity", &gravity_)); - OP_REQUIRES_OK(context, context->GetAttr("resolution", &res_)); - OP_REQUIRES_OK(context, context->GetAttr("E", &E_)); - OP_REQUIRES_OK(context, context->GetAttr("nu", &nu_)); - OP_REQUIRES_OK(context, context->GetAttr("m_p", &m_p_)); - OP_REQUIRES_OK(context, context->GetAttr("V_p", &V_p_)); - OP_REQUIRES(context, E_ >= 0, - errors::InvalidArgument("Need E >= 0, got ", E_)); - OP_REQUIRES(context, nu_ > 0, - errors::InvalidArgument("Need nu_p > 0, got ", nu_)); - OP_REQUIRES(context, m_p_ > 0, - errors::InvalidArgument("Need m_p > 0, got ", m_p_)); - OP_REQUIRES(context, V_p_ > 0, - errors::InvalidArgument("Need V_p > 0, got ", V_p_)); - } - - void Compute(OpKernelContext *context) override { - const Tensor &inx = context->input(0); - const Tensor &inv = context->input(1); - const Tensor &inF = context->input(2); - const Tensor &inC = context->input(3); - const Tensor &inA = context->input(4); - const Tensor &ingrid = context->input(5); - const TensorShape &x_shape = inx.shape(); - const TensorShape &v_shape = inv.shape(); - const TensorShape &F_shape = inF.shape(); - const TensorShape &C_shape = inC.shape(); - const TensorShape &A_shape = inA.shape(); - const TensorShape &grid_shape = ingrid.shape(); - const TensorShape &P_shape = inA.shape(); - - // Check inputs' dimensional - DCHECK_EQ(x_shape.dims(), 3); - DCHECK_EQ(v_shape.dims(), 3); - DCHECK_EQ(F_shape.dims(), 4); - DCHECK_EQ(C_shape.dims(), 4); - DCHECK_EQ(A_shape.dims(), 4); - DCHECK_EQ(grid_shape.dims(), 3); - - const int batch_size = x_shape.dim_size(0); - - const int dim = x_shape.dim_size(1); - - // Check gravity - int res[dim]; - float gravity[dim]; - int num_cells = 1; - for (int i = 0; i < dim; i++) { - res[i] = res_[i]; - num_cells *= res[i]; - gravity[i] = gravity_[i]; - } - - const int particles = x_shape.dim_size(2); - // printf("particles %d\n", particles); - - // Check input batch_size - DCHECK_EQ(batch_size, v_shape.dim_size(0)); - DCHECK_EQ(batch_size, F_shape.dim_size(0)); - DCHECK_EQ(batch_size, C_shape.dim_size(0)); - DCHECK_EQ(batch_size, A_shape.dim_size(0)); - DCHECK_EQ(batch_size, grid_shape.dim_size(0)); - - // Check input dim - DCHECK_EQ(dim, v_shape.dim_size(1)); - DCHECK_EQ(dim, F_shape.dim_size(1)); - DCHECK_EQ(dim, F_shape.dim_size(2)); - DCHECK_EQ(dim, C_shape.dim_size(1)); - DCHECK_EQ(dim, C_shape.dim_size(2)); - DCHECK_EQ(dim, A_shape.dim_size(1)); - DCHECK_EQ(dim, A_shape.dim_size(2)); - DCHECK_EQ(dim + 1, grid_shape.dim_size(2)); - - // Check input particles - DCHECK_EQ(particles, v_shape.dim_size(2)); - DCHECK_EQ(particles, F_shape.dim_size(3)); - DCHECK_EQ(particles, C_shape.dim_size(3)); - DCHECK_EQ(particles, A_shape.dim_size(3)); - - // Check input num_cells - DCHECK_EQ(num_cells, grid_shape.dim_size(1)); - - // create output tensor - Tensor *outx = NULL; - Tensor *outv = NULL; - Tensor *outF = NULL; - Tensor *outC = NULL; - Tensor *outP = NULL; - Tensor *outgrid = NULL; - Tensor *outgrid_star = NULL; - OP_REQUIRES_OK(context, context->allocate_output(0, x_shape, &outx)); - OP_REQUIRES_OK(context, context->allocate_output(1, v_shape, &outv)); - OP_REQUIRES_OK(context, context->allocate_output(2, F_shape, &outF)); - OP_REQUIRES_OK(context, context->allocate_output(3, C_shape, &outC)); - OP_REQUIRES_OK(context, context->allocate_output(4, P_shape, &outP)); - OP_REQUIRES_OK(context, context->allocate_output(5, grid_shape, &outgrid)); - OP_REQUIRES_OK(context, context->allocate_output(6, grid_shape, &outgrid_star)); - - auto f_inx = inx.flat(); - auto f_inv = inv.flat(); - auto f_inF = inF.flat(); - auto f_inC = inC.flat(); - auto f_inA = inA.flat(); - auto f_ingrid = ingrid.flat(); - auto f_outx = outx->template flat(); - auto f_outv = outv->template flat(); - auto f_outF = outF->template flat(); - auto f_outC = outC->template flat(); - auto f_outP = outP->template flat(); - auto f_outgrid = outgrid->template flat(); - auto f_outgrid_star = outgrid_star->template flat(); - - MPMKernelLauncher(dim, res, particles, dx_, dt_, E_, nu_, m_p_, V_p_, gravity, - f_inx.data(), f_inv.data(), f_inF.data(), f_inC.data(), - f_inA.data(), f_ingrid.data(), - f_outx.data(), f_outv.data(), f_outF.data(), - f_outC.data(), f_outP.data(), f_outgrid.data(), - f_outgrid_star.data()); - } -}; - -REGISTER_KERNEL_BUILDER(Name("Mpm").Device(DEVICE_GPU), MPMOpGPU); diff --git a/tensorflow_graphics/physics/src/p2gop.cc b/tensorflow_graphics/physics/src/p2gop.cc deleted file mode 100644 index eb1075c3b..000000000 --- a/tensorflow_graphics/physics/src/p2gop.cc +++ /dev/null @@ -1,264 +0,0 @@ -#include "tensorflow/core/framework/op_kernel.h" -#include "tensorflow/core/framework/tensor_shape.h" -#include "tensorflow/core/platform/default/logging.h" -#include "tensorflow/core/framework/shape_inference.h" -#include "config.h" - -using namespace tensorflow; - -/* - Register P2G operation -*/ - -REGISTER_OP("P2g") - .Input("position: float") //(batch_size, dim, particles) - .Input("velocity: float") //(batch_size, dim, particles) - .Input("affine: float") //(batch_size, dim, dim, particles) - .Input("deformation: float") //(batch_size, dim, dim, particles) - .Input("actuation: float") //(batch_size, dim, dim, particles) - .Attr("dt: float = 0.01") - .Attr("dx: float = 0.01") - .Attr("E: float = 50") - .Attr("nu: float = 0.3") - .Attr("m_p: float = 100") - .Attr("V_p: float = 10") - .Attr("gravity: list(float) = [0, 0, 0]") - .Attr("resolution: list(int) = [100, 100, 100]") - .Output("poly_out: float") //(batch_size, dim, dim, particles) - .Output("grid_out: float") //(batch_size, num_cells, dim + 1) - .SetShapeFn([](::tensorflow::shape_inference::InferenceContext *c) { - - shape_inference::ShapeHandle x_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(0), 3, &x_shape)); - shape_inference::ShapeHandle v_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(1), 3, &v_shape)); - shape_inference::ShapeHandle F_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(2), 4, &F_shape)); - shape_inference::ShapeHandle C_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(3), 4, &C_shape)); - shape_inference::ShapeHandle A_shape; - TF_RETURN_IF_ERROR(c->WithRank(c->input(4), 4, &A_shape)); - - shape_inference::DimensionHandle temp; - - shape_inference::DimensionHandle batch_size = c->Dim(x_shape, 0); - shape_inference::DimensionHandle batch_sizev = c->Dim(v_shape, 0); - shape_inference::DimensionHandle batch_sizeF = c->Dim(F_shape, 0); - shape_inference::DimensionHandle batch_sizeC = c->Dim(C_shape, 0); - shape_inference::DimensionHandle batch_sizeA = c->Dim(A_shape, 0); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizev, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeF, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeC, &temp)); - TF_RETURN_IF_ERROR(c->Merge(batch_size, batch_sizeA, &temp)); - - shape_inference::DimensionHandle dim = c->Dim(x_shape, 1); - shape_inference::DimensionHandle dimv = c->Dim(v_shape, 1); - shape_inference::DimensionHandle dimF1 = c->Dim(F_shape, 1); - shape_inference::DimensionHandle dimF2 = c->Dim(F_shape, 2); - shape_inference::DimensionHandle dimC1 = c->Dim(C_shape, 1); - shape_inference::DimensionHandle dimC2 = c->Dim(C_shape, 2); - shape_inference::DimensionHandle dimA1 = c->Dim(A_shape, 1); - shape_inference::DimensionHandle dimA2 = c->Dim(A_shape, 2); - TF_RETURN_IF_ERROR(c->Merge(dim, dimv, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimF1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimF2, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimC1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimC2, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimA1, &temp)); - TF_RETURN_IF_ERROR(c->Merge(dim, dimA2, &temp)); - - shape_inference::DimensionHandle particle = c->Dim(x_shape, 2); - shape_inference::DimensionHandle particlev = c->Dim(v_shape, 2); - shape_inference::DimensionHandle particleF = c->Dim(F_shape, 3); - shape_inference::DimensionHandle particleC = c->Dim(C_shape, 3); - shape_inference::DimensionHandle particleA = c->Dim(A_shape, 3); - TF_RETURN_IF_ERROR(c->Merge(particle, particlev, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleF, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleC, &temp)); - TF_RETURN_IF_ERROR(c->Merge(particle, particleA, &temp)); - - c->set_output(0, C_shape); - auto dim_ = *((int *)dim.Handle()); - - std::vector res_; - TF_RETURN_IF_ERROR(c->GetAttr("resolution", &res_)); - std::vector gravity_; - TF_RETURN_IF_ERROR(c->GetAttr("gravity", &gravity_)); - - if ((int)gravity_.size() != dim_) - return errors::InvalidArgument("Gravity length must be equal to ", dim_, - ", but is ", gravity_.size()); - if ((int)res_.size() != dim_) - return errors::InvalidArgument("Resolution length must be equal to ", - dim_, ", but is ", res_.size()); - - int res[3]; - int num_cells = 1; - for (int i = 0; i < dim_; i++) { - res[i] = res_[i]; - num_cells *= res[i]; - } - std::vector new_shape; - new_shape.clear(); - new_shape.push_back(batch_size); - new_shape.push_back( - c->MakeDim(shape_inference::DimensionOrConstant(num_cells))); - new_shape.push_back( - c->MakeDim(shape_inference::DimensionOrConstant(dim_ + 1))); - c->set_output(1, c->MakeShape(new_shape)); - - return Status::OK(); - }); - -/* - P2G Operation GPU -*/ - -void P2GKernelLauncher(int dim, - int *res, - int num_particles, - float dx, - float dt, - float E, - float nu, - float m_p, - float V_p, - float *gravity, - const float *inx, - const float *inv, - const float *inF, - const float *inC, - const float *inA, - float *outP, - float *outgrid); - -class P2GOpGPU : public OpKernel { - private: - float dt_; - float dx_; - float m_p_, V_p_, E_, nu_; - std::vector gravity_; - std::vector res_; - - public: - explicit P2GOpGPU(OpKernelConstruction *context) : OpKernel(context) { - OP_REQUIRES_OK(context, context->GetAttr("dt", &dt_)); - OP_REQUIRES(context, dt_ > 0, - errors::InvalidArgument("Need dt > 0, got ", dt_)); - OP_REQUIRES_OK(context, context->GetAttr("dx", &dx_)); - OP_REQUIRES(context, dx_ > 0, - errors::InvalidArgument("Need dx > 0, got ", dx_)); - OP_REQUIRES_OK(context, context->GetAttr("gravity", &gravity_)); - OP_REQUIRES_OK(context, context->GetAttr("resolution", &res_)); - OP_REQUIRES_OK(context, context->GetAttr("E", &E_)); - OP_REQUIRES_OK(context, context->GetAttr("nu", &nu_)); - OP_REQUIRES_OK(context, context->GetAttr("m_p", &m_p_)); - OP_REQUIRES_OK(context, context->GetAttr("V_p", &V_p_)); - OP_REQUIRES(context, E_ > 0, - errors::InvalidArgument("Need E > 0, got ", E_)); - OP_REQUIRES(context, nu_ > 0, - errors::InvalidArgument("Need nu_p > 0, got ", nu_)); - OP_REQUIRES(context, m_p_ > 0, - errors::InvalidArgument("Need m_p > 0, got ", m_p_)); - OP_REQUIRES(context, V_p_ > 0, - errors::InvalidArgument("Need V_p > 0, got ", V_p_)); - } - - void Compute(OpKernelContext *context) override { - // get the x - const Tensor &inx = context->input(0); - - // get the v tensor - const Tensor &inv = context->input(1); - - // get the F tensor - const Tensor &inF = context->input(2); - - // get the C tensor - const Tensor &inC = context->input(3); - - // get the A tensor - const Tensor &inA = context->input(4); - - // check shapes of input and weights - const TensorShape &x_shape = inx.shape(); - const TensorShape &v_shape = inv.shape(); - const TensorShape &F_shape = inF.shape(); - const TensorShape &C_shape = inC.shape(); - const TensorShape &A_shape = inA.shape(); - TensorShape P_shape = inC.shape(); - TensorShape grid_shape = inx.shape(); - - // Check that inputs' dimensional - DCHECK_EQ(x_shape.dims(), 3); - DCHECK_EQ(v_shape.dims(), 3); - DCHECK_EQ(F_shape.dims(), 4); - DCHECK_EQ(C_shape.dims(), 4); - DCHECK_EQ(A_shape.dims(), 4); - - const int batch_size = x_shape.dim_size(0); - // printf("batch_size %d\n", batch_size); - - const int dim = x_shape.dim_size(1); - // printf("dim %d\n", dim); - - // Check gravity - int res[dim]; - float gravity[dim]; - int num_cells = 1; - for (int i = 0; i < dim; i++) { - res[i] = res_[i]; - num_cells *= res[i]; - gravity[i] = gravity_[i]; - } - int grid_shape2 = dim + 1; - // printf("P2GOpGPU\n"); - // float dx = 1.0f / res[0]; - - const int particles = x_shape.dim_size(2); - // printf("particles %d\n", particles); - - // Check input batch_size - DCHECK_EQ(batch_size, v_shape.dim_size(0)); - DCHECK_EQ(batch_size, F_shape.dim_size(0)); - DCHECK_EQ(batch_size, C_shape.dim_size(0)); - DCHECK_EQ(batch_size, A_shape.dim_size(0)); - - // Check input dim - DCHECK_EQ(dim, v_shape.dim_size(1)); - DCHECK_EQ(dim, F_shape.dim_size(1)); - DCHECK_EQ(dim, F_shape.dim_size(2)); - DCHECK_EQ(dim, C_shape.dim_size(1)); - DCHECK_EQ(dim, C_shape.dim_size(2)); - DCHECK_EQ(dim, A_shape.dim_size(1)); - DCHECK_EQ(dim, A_shape.dim_size(2)); - - // Check input particles - DCHECK_EQ(particles, v_shape.dim_size(2)); - DCHECK_EQ(particles, F_shape.dim_size(3)); - DCHECK_EQ(particles, C_shape.dim_size(3)); - DCHECK_EQ(particles, A_shape.dim_size(3)); - - // create output tensor - Tensor *outP = NULL; - Tensor *outgrid = NULL; - OP_REQUIRES_OK(context, context->allocate_output(0, P_shape, &outP)); - grid_shape.set_dim(1, num_cells); - grid_shape.set_dim(2, grid_shape2); - OP_REQUIRES_OK(context, context->allocate_output(1, grid_shape, &outgrid)); - - auto f_inx = inx.flat(); - auto f_inv = inv.flat(); - auto f_inF = inF.flat(); - auto f_inC = inC.flat(); - auto f_inA = inA.flat(); - auto f_outP = outP->template flat(); - auto f_outgrid = outgrid->template flat(); - - P2GKernelLauncher(dim, res, particles, dx_, dt_, E_, nu_, m_p_, V_p_, gravity, - f_inx.data(), f_inv.data(), f_inF.data(), f_inC.data(), - f_inA.data(), f_outP.data(), f_outgrid.data()); - } -}; - -REGISTER_KERNEL_BUILDER(Name("P2g").Device(DEVICE_GPU), P2GOpGPU); diff --git a/tensorflow_graphics/physics/src/simulator.cpp b/tensorflow_graphics/physics/src/simulator.cpp deleted file mode 100644 index a393e513f..000000000 --- a/tensorflow_graphics/physics/src/simulator.cpp +++ /dev/null @@ -1,804 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include "config.h" -#include "kernels.h" -#include "state_base.h" - -TC_NAMESPACE_BEGIN - -void write_partio(std::vector positions, - const std::string &file_name) { - Partio::ParticlesDataMutable *parts = Partio::create(); - Partio::ParticleAttribute posH, vH, mH, typeH, normH, statH, boundH, distH, - debugH, indexH, limitH, apicH; - - bool verbose = false; - - posH = parts->addAttribute("position", Partio::VECTOR, 3); - // typeH = parts->addAttribute("type", Partio::INT, 1); - // indexH = parts->addAttribute("index", Partio::INT, 1); - // limitH = parts->addAttribute("limit", Partio::INT, 3); - // vH = parts->addAttribute("v", Partio::VECTOR, 3); - - if (verbose) { - mH = parts->addAttribute("m", Partio::VECTOR, 1); - normH = parts->addAttribute("boundary_normal", Partio::VECTOR, 3); - debugH = parts->addAttribute("debug", Partio::VECTOR, 3); - statH = parts->addAttribute("states", Partio::INT, 1); - distH = parts->addAttribute("boundary_distance", Partio::FLOAT, 1); - boundH = parts->addAttribute("near_boundary", Partio::INT, 1); - apicH = parts->addAttribute("apic_frobenius_norm", Partio::FLOAT, 1); - } - for (auto p : positions) { - // const Particle *p = allocator.get_const(p_i); - int idx = parts->addParticle(); - // Vector vel = p->get_velocity(); - // float32 *v_p = parts->dataWrite(vH, idx); - // for (int k = 0; k < 3; k++) - // v_p[k] = vel[k]; - // int *type_p = parts->dataWrite(typeH, idx); - // int *index_p = parts->dataWrite(indexH, idx); - // int *limit_p = parts->dataWrite(limitH, idx); - float32 *p_p = parts->dataWrite(posH, idx); - - // Vector pos = p->pos; - - for (int k = 0; k < 3; k++) - p_p[k] = 0.f; - - for (int k = 0; k < 3; k++) - p_p[k] = p[k]; - // type_p[0] = int(p->is_rigid()); - // index_p[0] = p->id; - // limit_p[0] = p->dt_limit; - // limit_p[1] = p->stiffness_limit; - // limit_p[2] = p->cfl_limit; - } - Partio::write(file_name.c_str(), *parts); - parts->release(); -} - -auto gpu_mpm3d = []() { - constexpr int dim = 3; - int n = 16; - int num_particles = n * n * n; - std::vector initial_positions; - std::vector initial_velocities; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - for (int k = 0; k < n; k++) { - bool right = (i / (n / 2)); - // initial_positions.push_back(i * 0.025_f + 0.2123_f); - initial_positions.push_back(i * 0.025_f + 0.2123_f + 0.2 * right); - initial_velocities.push_back(1 - 1 * right); - // initial_velocities.push_back(0.0); - } - } - } - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - for (int k = 0; k < n; k++) { - initial_positions.push_back(j * 0.025_f + 0.4344_f); - initial_velocities.push_back(0); - } - } - } - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - for (int k = 0; k < n; k++) { - initial_positions.push_back(k * 0.025_f + 0.9854_f); - initial_velocities.push_back(0); - } - } - } - std::vector initial_F; - for (int a = 0; a < 3; a++) { - for (int b = 0; b < 3; b++) { - for (int i = 0; i < num_particles; i++) { - initial_F.push_back(real(a == b) * 1.1); - } - } - } - TC_P(initial_F.size()); - int num_steps = 80; - std::vector *> states((uint32)num_steps + 1, nullptr); - Vector3i res(20); - // Differentiate gravity is not supported - Vector3 gravity(0, 0, 0); - for (int i = 0; i < num_steps + 1; i++) { - initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], - (void *&)states[i], 1.0_f / res[0], 5e-3_f, - initial_positions.data()); - std::fill(initial_positions.begin(), initial_positions.end(), 0); - if (i == 0) { - states[i]->set_initial_v(initial_velocities.data()); - states[i]->set_initial_F(initial_F.data()); - } - } - - for (int i = 0; i < num_steps; i++) { - TC_INFO("forward step {}", i); - auto x = states[i]->fetch_x(); - OptiXScene scene; - for (int p = 0; p < (int)initial_positions.size() / 3; p++) { - OptiXParticle particle; - auto scale = 5_f; - particle.position_and_radius = - Vector4(x[p] * scale, (x[p + num_particles] - 0.02f) * scale, - x[p + 2 * num_particles] * scale, 0.03); - scene.particles.push_back(particle); - if (p == 0) - TC_P(particle.position_and_radius); - } - int interval = 3; - if (i % interval == 0) { - write_to_binary_file(scene, fmt::format("{:05d}.tcb", i / interval)); - } - forward_mpm_state(states[i], states[i + 1]); - } - - set_grad_loss(states[num_steps]); - for (int i = num_steps - 1; i >= 0; i--) { - TC_INFO("backward step {}", i); - backward_mpm_state(states[i], states[i + 1]); - auto grad_x = states[i]->fetch_grad_x(); - auto grad_v = states[i]->fetch_grad_v(); - Vector3f vgrad_v, vgrad_x; - for (int j = 0; j < num_particles; j++) { - for (int k = 0; k < 3; k++) { - vgrad_v[k] += grad_v[k * num_particles + j]; - vgrad_x[k] += grad_x[k * num_particles + j]; - } - } - TC_P(vgrad_v); - TC_P(vgrad_x); - } -}; - -TC_REGISTER_TASK(gpu_mpm3d); - -auto gpu_mpm3d_falling_leg = []() { - // Actuation or falling test? - bool actuation = true; - constexpr int dim = 3; - // The cube has size 2 * 2 * 2, with height 5m, falling time = 1s, g=-10 - int n = 20; - real dx = 0.4; - real sample_density = 0.1; - Vector3 corner(20, 15 * (!actuation) + 20 * dx, 20); - - using Vector = Vector3; - - std::vector particle_positions; - - std::vector actuator_indices; - - auto add_cube = [&](Vector corner, Vector size) { - actuator_indices.clear(); - real d = sample_density; - auto sizeI = (size / sample_density).template cast(); - int padding = 3; - int counter = 0; - for (auto i : TRegion<3>(Vector3i(0), sizeI)) { - counter++; - particle_positions.push_back(Vector( - corner[0] + d * i.i, corner[1] + d * i.j, corner[2] + d * i.k)); - if (padding <= i.i && padding <= i.j && padding <= i.k && - i.i + padding < sizeI[0] && i.j + padding < sizeI[1] && - i.k + padding < sizeI[2]) { - actuator_indices.push_back(counter); - } - } - }; - - Vector chamber_size(2, 14.5, 2); - add_cube(corner + chamber_size * Vector(1, 0, 0), chamber_size); - add_cube(corner + chamber_size * Vector(0, 0, 1), chamber_size); - add_cube(corner + chamber_size * Vector(1, 0, 1), chamber_size); - add_cube(corner + chamber_size * Vector(2, 0, 1), chamber_size); - add_cube(corner + chamber_size * Vector(1, 0, 2), chamber_size); - - int num_particles = particle_positions.size(); - std::vector initial_positions; - initial_positions.resize(particle_positions.size() * 3); - for (int i = 0; i < particle_positions.size(); i++) { - initial_positions[i] = particle_positions[i].x; - initial_positions[i + particle_positions.size()] = particle_positions[i].y; - initial_positions[i + 2 * particle_positions.size()] = - particle_positions[i].z; - } - - int num_frames = 200; - Vector3i res(200, 120, 200); - Array3D bc(res); - TC_WARN("Should run without APIC."); - TC_WARN("Should use damping 2e-4 on grid."); - for (int i = 0; i < res[0]; i++) { - for (int j = 0; j < 22; j++) { - for (int k = 0; k < res[2]; k++) { - bc[i][j][k] = Vector4(0, 1, 0, -1); - } - } - } - // cm/s^2 - Vector3 gravity(0, -980.0, 0); - TStateBase *state; - TStateBase *state2; - int substep = 160; - real dt = 1.0_f / 120 / substep; - initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], (void *&)state, - dx, dt, initial_positions.data()); - set_mpm_bc<3>(state, &bc[0][0][0][0]); - reinterpret_cast *>(state)->set(10, 100, 50000000, 0.3); - initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], (void *&)state2, - dx, dt, initial_positions.data()); - set_mpm_bc<3>(state2, &bc[0][0][0][0]); - reinterpret_cast *>(state2)->set(10, 100, 50000000, 0.3); - - std::vector A(num_particles * 9); - - for (int i = 0; i < num_frames; i++) { - TC_INFO("forward step {}", i); - auto x = state->fetch_x(); - auto fn = fmt::format("{:04d}.bgeo", i); - TC_INFO(fn); - std::vector parts; - for (int p = 0; p < (int)initial_positions.size() / 3; p++) { - auto pos = Vector3(x[p], x[p + num_particles], x[p + 2 * num_particles]); - parts.push_back(pos); - } - write_partio(parts, fn); - - if (actuation) { - for (int j = 0; j < actuator_indices.size(); j++) { - real alpha = 500000; - A[j + 0 * num_particles] = alpha * i; - A[j + 4 * num_particles] = alpha * i; - A[j + 8 * num_particles] = alpha * i; - } - set_mpm_actuation(state, A.data()); - } - - { - TC_PROFILER("simulate one frame"); - for (int j = 0; j < substep; j++) - forward_mpm_state(state, state); - } - // taichi::print_profile_info(); - } -}; - -TC_REGISTER_TASK(gpu_mpm3d_falling_leg); - -auto gpu_mpm3d_falling_cube = []() { - constexpr int dim = 3; - // The cube has size 2 * 2 * 2, with height 5m, falling time = 1s, g=-10 - int n = 80; - real dx = 0.2; - real sample_density = 0.1; - Vector3 corner(2, 5 + 2 * dx, 2); - int num_particles = n * n * n; - std::vector initial_positions; - std::vector initial_velocities; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - for (int k = 0; k < n; k++) { - // initial_positions.push_back(i * 0.025_f + 0.2123_f); - initial_positions.push_back(i * sample_density + corner[0]); - initial_velocities.push_back(0); - } - } - } - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - for (int k = 0; k < n; k++) { - initial_positions.push_back(j * sample_density + corner[1]); - initial_velocities.push_back(0); - } - } - } - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - for (int k = 0; k < n; k++) { - initial_positions.push_back(k * sample_density + corner[2]); - initial_velocities.push_back(0); - } - } - } - std::vector initial_F; - for (int a = 0; a < 3; a++) { - for (int b = 0; b < 3; b++) { - for (int i = 0; i < num_particles; i++) { - initial_F.push_back(real(a == b) * 1.1); - } - } - } - int num_frames = 300; - Vector3i res(100, 120, 100); - Vector3 gravity(0, -10, 0); - TStateBase *state; - TStateBase *state2; - int substep = 3; - real dt = 1.0_f / 60 / substep; - initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], (void *&)state, - dx, dt, initial_positions.data()); - reinterpret_cast *>(state)->set(10, 100, 5000, 0.3); - initialize_mpm_state<3>(&res[0], num_particles, &gravity[0], (void *&)state2, - dx, dt, initial_positions.data()); - reinterpret_cast *>(state2)->set(10, 100, 5000, 0.3); - state->set_initial_v(initial_velocities.data()); - - for (int i = 0; i < num_frames; i++) { - TC_INFO("forward step {}", i); - auto x = state->fetch_x(); - auto fn = fmt::format("{:04d}.bgeo", i); - TC_INFO(fn); - std::vector parts; - for (int p = 0; p < (int)initial_positions.size() / 3; p++) { - auto pos = Vector3(x[p], x[p + num_particles], x[p + 2 * num_particles]); - parts.push_back(pos); - } - write_partio(parts, fn); - - { - TC_PROFILER("simulate one frame"); - for (int j = 0; j < substep; j++) - forward_mpm_state(state, state); - } - taichi::print_profile_info(); - } - while (true) { - TC_PROFILER("backward"); - for (int j = 0; j < substep; j++) - backward_mpm_state(state2, state); - taichi::print_profile_info(); - } -}; - -TC_REGISTER_TASK(gpu_mpm3d_falling_cube); - -auto gpu_mpm2d_falling_cube = []() { - constexpr int dim = 2; - // The cube has size 2 * 2 * 2, with height 5m, falling time = 1s, g=-10 - int n = 80; - real dx = 0.2; - real sample_density = 0.1; - Vector2 corner(2, 5 + 2 * dx); - int num_particles = n * n; - std::vector initial_positions; - std::vector initial_velocities; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - initial_positions.push_back(i * sample_density + corner[0]); - initial_velocities.push_back(0); - } - } - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - initial_positions.push_back(j * sample_density + corner[1]); - initial_velocities.push_back(0); - } - } - std::vector initial_F; - int num_frames = 3; - Vector2i res(100, 120); - Vector2 gravity(0, -10); - TStateBase *state; - TStateBase *state2; - int substep = 3; - real dt = 1.0_f / 60 / substep; - initialize_mpm_state<2>(&res[0], num_particles, &gravity[0], (void *&)state, - dx, dt, initial_positions.data()); - reinterpret_cast *>(state)->set(10, 100, 5000, 0.3); - initialize_mpm_state<2>(&res[0], num_particles, &gravity[0], (void *&)state2, - dx, dt, initial_positions.data()); - reinterpret_cast *>(state2)->set(10, 100, 5000, 0.3); - state->set_initial_v(initial_velocities.data()); - - for (int i = 0; i < num_frames; i++) { - TC_INFO("forward step {}", i); - auto x = state->fetch_x(); - auto fn = fmt::format("{:04d}.bgeo", i); - TC_INFO(fn); - std::vector parts; - for (int p = 0; p < (int)initial_positions.size() / dim; p++) { - auto pos = Vector3(x[p], x[p + num_particles], 0); - parts.push_back(pos); - } - write_partio(parts, fn); - - { - TC_PROFILER("simulate one frame"); - for (int j = 0; j < substep; j++) - forward_mpm_state(state, state); - } - taichi::print_profile_info(); - } - while (true) { - TC_PROFILER("backward"); - for (int j = 0; j < substep; j++) - backward_mpm_state(state2, state); - taichi::print_profile_info(); - } -}; - -TC_REGISTER_TASK(gpu_mpm2d_falling_cube); - -auto test_cuda = []() { - int N = 10; - std::vector a(N), b(N); - for (int i = 0; i < N; i++) { - a[i] = i; - b[i] = i * 2; - } - saxpy_cuda(N, 2.0_f, a.data(), b.data()); - for (int i = 0; i < N; i++) { - TC_ASSERT_EQUAL(b[i], i * 4.0_f, 1e-5_f); - } -}; - -TC_REGISTER_TASK(test_cuda); - -auto test_cuda_svd = []() { - int N = 12800; - using Matrix = Matrix3f; - std::vector A, U, sig, V; - A.resize(N); - U.resize(N); - sig.resize(N); - V.resize(N); - - std::vector A_flattened; - for (int p = 0; p < N; p++) { - auto matA = Matrix(1) + 0.5_f * Matrix::rand(); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - A_flattened.push_back(matA(i, j)); - } - } - A[p] = matA; - } - - test_svd_cuda(N, (real *)A_flattened.data(), (real *)U.data(), - (real *)sig.data(), (real *)V.data()); - - constexpr real tolerance = 3e-5_f32; - for (int i = 0; i < N; i++) { - auto matA = A[i]; - auto matU = U[i]; - auto matV = V[i]; - auto matSig = sig[i]; - - TC_ASSERT_EQUAL(matSig, Matrix(matSig.diag()), tolerance); - TC_ASSERT_EQUAL(Matrix(1), matU * transposed(matU), tolerance); - TC_ASSERT_EQUAL(Matrix(1), matV * transposed(matV), tolerance); - TC_ASSERT_EQUAL(matA, matU * matSig * transposed(matV), tolerance); - - /* - polar_decomp(m, R, S); - TC_CHECK_EQUAL(m, R * S, tolerance); - TC_CHECK_EQUAL(Matrix(1), R * transposed(R), tolerance); - TC_CHECK_EQUAL(S, transposed(S), tolerance); - */ - } -}; - -TC_REGISTER_TASK(test_cuda_svd); - -auto test_partio = []() { - real dx = 0.01_f; - for (int f = 0; f < 100; f++) { - std::vector positions; - for (int i = 0; i < 10; i++) { - for (int j = 0; j < 10; j++) { - for (int k = 0; k < 10; k++) { - positions.push_back(dx * Vector3(i + f, j, k)); - } - } - } - auto fn = fmt::format("{:04d}.bgeo", f); - TC_INFO(fn); - write_partio(positions, fn); - } -}; - -TC_REGISTER_TASK(test_partio); - -auto write_partio_c = [](const std::vector ¶meters) { - auto n = (int)std::atoi(parameters[0].c_str()); - float *pos_ = reinterpret_cast(std::atol(parameters[1].c_str())); - auto fn = parameters[2]; - using namespace taichi; - std::vector pos; - for (int i = 0; i < n; i++) { - auto p = Vector3(pos_[i], pos_[i + n], pos_[i + 2 * n]); - pos.push_back(p); - } - taichi::write_partio(pos, fn); -}; - -TC_REGISTER_TASK(write_partio_c); - -auto write_tcb_c = [](const std::vector ¶meters) { - auto n = (int)std::atoi(parameters[0].c_str()); - float *pos_ = reinterpret_cast(std::atol(parameters[1].c_str())); - auto fn = parameters[2]; - using namespace taichi; - std::vector pos; - for (int i = 0; i < n; i++) { - auto p = Vector4(pos_[i], pos_[i + n], pos_[i + 2 * n], pos_[i + 3 * n]); - pos.push_back(p); - } - write_to_binary_file(pos, fn); -}; - -TC_REGISTER_TASK(write_tcb_c); - -TC_FORCE_INLINE void polar_decomp_simple(const TMatrix &m, - TMatrix &R, - TMatrix &S) { - /* - x = m[:, 0, 0, :] + m[:, 1, 1, :] - y = m[:, 1, 0, :] - m[:, 0, 1, :] - scale = 1.0 / tf.sqrt(x**2 + y**2) - c = x * scale - s = y * scale - r = make_matrix2d(c, -s, s, c) - return r, matmatmul(transpose(r), m) - */ - - auto x = m(0, 0) + m(1, 1); - auto y = m(1, 0) - m(0, 1); - auto scale = 1.0_f / std::sqrt(x * x + y * y); - auto c = x * scale; - auto s = y * scale; - R = Matrix2(Vector2(c, s), Vector2(-s, c)); - S = transposed(R) * m; -} - -TC_FORCE_INLINE TMatrix dR_from_dF(const TMatrix &F, - const TMatrix &R, - const TMatrix &S, - const TMatrix &dF) { - using Matrix = TMatrix; - using Vector = TVector; - // set W = R^T dR = [ 0 x ] - // [ -x 0 ] - // - // R^T dF - dF^T R = WS + SW - // - // WS + SW = [ x(s21 - s12) x(s11 + s22) ] - // [ -x[s11 + s22] x(s21 - s12) ] - // ---------------------------------------------------- - Matrix lhs = transposed(R) * dF - transposed(dF) * R; - real x = lhs(0, 1) / (S(0, 0) + S(1, 1)); - Matrix W = Matrix(Vector(0, -x), Vector(x, 0)); - return R * W; -}; - -void Times_Rotated_dP_dF_FixedCorotated(real mu, - real lambda, - const Matrix2 &F, - const TMatrix &dF, - TMatrix &dP) { - using Matrix = TMatrix; - using Vector = TVector; - - const auto j = determinant(F); - Matrix r, s; - polar_decomp_simple(F, r, s); - Matrix dR = dR_from_dF(F, r, s, dF); - Matrix JFmT = Matrix(Vector(F(1, 1), -F(0, 1)), Vector(-F(1, 0), F(0, 0))); - Matrix dJFmT = - Matrix(Vector(dF(1, 1), -dF(0, 1)), Vector(-dF(1, 0), dF(0, 0))); - dP = 2.0_f * mu * (dF - dR) + - lambda * JFmT * (JFmT.elementwise_product(dF)).sum() + - lambda * (j - 1) * dJFmT; -} - -Matrix2 stress(real mu, real lambda, const Matrix2 &F) { - Matrix2 r, s; - polar_decomp(F, r, s); - auto j = determinant(F); - return 2.0_f * mu * (F - r) + lambda * j * (j - 1) * inverse(transposed(F)); -} - -auto test_2d_differential = []() { - using Matrix = TMatrix; - real mu = 13, lambda = 32; - for (int r = 0; r < 10000; r++) { - TC_INFO("{}", r); - Matrix F = Matrix::rand(); - if (determinant(F) < 0.1_f) { - // Assuming no negative - continue; - } - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 2; j++) { - Matrix dF, dP; - dF(i, j) = 1; - real s_delta = 1e-3; - Matrix delta; - delta(i, j) = s_delta; - Times_Rotated_dP_dF_FixedCorotated(mu, lambda, F, dF, dP); - auto dP_numerical = - 1.0_f / (s_delta * 2) * - (stress(mu, lambda, F + delta) - stress(mu, lambda, F - delta)); - auto ratio = (dP - dP_numerical).frobenius_norm() / dP.frobenius_norm(); - TC_P(determinant(F)); - TC_P(dP); - TC_P(dP_numerical); - TC_ASSERT(ratio < 1e-3); - } - } - } -}; - -TC_REGISTER_TASK(test_2d_differential); - -auto view_txt = [](const std::vector ¶meters) { - std::FILE *f = std::fopen(parameters[0].c_str(), "r"); - int window_size = 800; - int scale = 10; - GUI ui("particles", window_size, window_size); - while (true) { - char type[100]; - if (std::feof(f)) { - break; - } - fscanf(f, "%s", type); - printf("reading...\n"); - if (type[0] == 'p') { - real x, y, r, g, b, a00, a01, a10, a11; - fscanf(f, "%f %f %f %f %f %f %f %f %f", &x, &y, &r, &g, &b, &a00, &a01, - &a10, &a11); - ui.get_canvas().img[Vector2i(x * scale, y * scale)] = - Vector3f(r, g, a11 * 2); - } - } - while (1) - ui.update(); -}; - -TC_REGISTER_TASK(view_txt); - -auto convert_obj = [](const std::vector ¶meters) { - for (auto fn : parameters) { - std::FILE *f = std::fopen(fn.c_str(), "r"); - char s[1000], type[100]; - std::vector vec; - while (std::fgets(s, 1000, f)) { - real x, y, z; - sscanf(s, "%s %f %f %f", type, &x, &y, &z); - if (type[0] == 'v') { - vec.push_back(Vector3(x, y, z)); - } - } - TC_P(vec.size()); - write_to_binary_file(vec, fn + ".tcb"); - } -}; - -TC_REGISTER_TASK(convert_obj); - -auto fuse_frames = [](const std::vector ¶meters) { - TC_ASSERT(parameters.size() == 4); - int iterations = std::atoi(parameters[0].c_str()); - int iteration_interval = std::atoi(parameters[1].c_str()); - int iteration_offset = 0; - if (iteration_interval == 0) { - iteration_offset = iterations; - iterations = 1; - } - int frames = std::atoi(parameters[2].c_str()); - int frame_interval = std::atoi(parameters[3].c_str()); - for (int i = 0; i < frames; i++) { - auto frame_fn = fmt::format("frame{:05d}.txt", i * frame_interval); - std::vector vec; - for (int j = 0; j < iterations; j++) { - auto iteration_fn = fmt::format( - "iteration{:04d}", j * iteration_interval + iteration_offset); - std::FILE *f = std::fopen((iteration_fn + "/" + frame_fn).c_str(), "r"); - char s[1000], type[100]; - while (std::fgets(s, 1000, f)) { - real x, y, a, _; - sscanf(s, "%s %f %f %f %f %f %f %f %f %f", type, &x, &y, &_, &_, &_, &_, - &_, &_, &a); - if (type[0] == 'p') { - x = x / 40; - y = y / 40; - vec.push_back(Vector3(x, y, -j * 0.09, a)); - } - } - fclose(f); - } - TC_P(vec.size()); - std::string prefix; - if (iteration_interval == 0) { - prefix = fmt::format("iteration{:04d}", iteration_offset); - } - write_to_binary_file(vec, prefix + frame_fn + ".tcb"); - } -}; - -TC_REGISTER_TASK(fuse_frames); - -auto fuse_frames_ppo = [](const std::vector ¶meters) { - TC_ASSERT(parameters.size() == 4); - int iterations = std::atoi(parameters[0].c_str()); - int iteration_interval = std::atoi(parameters[1].c_str()); - int iteration_offset = 0; - if (iteration_interval == 0) { - iteration_offset = iterations; - iterations = 1; - } - - int frames = std::atoi(parameters[2].c_str()); - int frame_interval = std::atoi(parameters[3].c_str()); - - /* - auto fn = [&](int iteration, int frame) { - auto frame_fn = fmt::format("frame{:05d}.txt", frame * frame_interval); - auto iteration_fn = - fmt::format("it{:04d}", iteration * iteration_interval + iteration_offset); - return iteration_fn + "/" + frame_fn; - }; - */ - auto fn = [&](int iteration, int frame) { - // PPO - auto frame_fn = fmt::format("it{:04d}/frame00001.txt", frame * frame_interval); - auto iteration_fn = - fmt::format("ep{:04d}", (iteration * iteration_interval + iteration_offset + 1) * 10); - return iteration_fn + "/" + frame_fn; - }; - - for (int i = 0; i < frames; i++) { - std::vector vec; - for (int j = 0; j < iterations; j++) { - auto fname = fn(j, i).c_str(); - // TC_P(fname); - std::FILE *f = std::fopen(fname, "r"); - TC_ASSERT(f != nullptr); - char s[1000], type[100]; - real c = -20.7_f; - while (std::fgets(s, 1000, f)) { - real x, y, a, _; - sscanf(s, "%s %f %f %f %f %f %f %f %f %f", type, &x, &y, &_, &_, &_, &_, - &_, &_, &a); - Vector4 position_offset = Vector4(j * 0.1, 0, -j * 0.19, 0); - if (type[0] == 'p') { - x = x / 40; - y = y / 40; - vec.push_back(Vector4(x, y, 0, a) + position_offset); - } else if (type[0] == 'v') { - x /= 900; - y /= 900; - for (auto o : TRegion<3>(Vector3i(-2), Vector3i(3))) { - real delta = 0.005; - vec.push_back( - Vector4(x + delta * o.i, y + delta * o.j, delta * o.k, c) + - position_offset); - } - c = 20.7; - } - } - fclose(f); - } - TC_P(vec.size()); - std::string prefix; - if (iteration_interval == 0) { - prefix = fmt::format("iteration{:04d}", iteration_offset); - } - write_to_binary_file(vec, prefix + fmt::format("frame{:04d}.tcb", i)); - } -}; - -TC_REGISTER_TASK(fuse_frames_ppo); - -TC_NAMESPACE_END diff --git a/tensorflow_graphics/physics/src/state.cuh b/tensorflow_graphics/physics/src/state.cuh deleted file mode 100644 index 8c765bae6..000000000 --- a/tensorflow_graphics/physics/src/state.cuh +++ /dev/null @@ -1,473 +0,0 @@ -#pragma once - -#include "state_base.h" - -static constexpr int mpm_enalbe_apic = true; -static constexpr int mpm_enalbe_force = true; -static constexpr int particle_block_dim = 128; -static constexpr int grid_block_dim = 128; - -template -__device__ constexpr int kernel_volume(); - -template <> -__device__ constexpr int kernel_volume<2>() { - return 9; -} - -template <> -__device__ constexpr int kernel_volume<3>() { - return 27; -} - -template -__device__ TC_FORCE_INLINE TVector offset_from_scalar(int i); - -template <> -__device__ TC_FORCE_INLINE TVector offset_from_scalar<2>(int i) { - return TVector(i / 3, i % 3); -}; - -template <> -__device__ TC_FORCE_INLINE TVector offset_from_scalar<3>(int i) { - return TVector(i / 9, i / 3 % 3, i % 3); -}; - -template -__device__ TC_FORCE_INLINE TVector offset_from_scalar_f(int i); - -template <> -__device__ TC_FORCE_INLINE TVector offset_from_scalar_f<2>(int i) { - return TVector(i / 3, i % 3); -}; - -template <> -__device__ TC_FORCE_INLINE TVector offset_from_scalar_f<3>(int i) { - return TVector(i / 9, i / 3 % 3, i % 3); -}; - -template -struct TState : public TStateBase { - static constexpr int dim = dim_; - using Base = TStateBase; - - using Base::C_storage; - using Base::E; - using Base::F_storage; - using Base::P_storage; - using Base::A_storage; - using Base::V_p; - using Base::dt; - using Base::dx; - using Base::grad_C_storage; - using Base::grad_F_storage; - using Base::grad_A_storage; - using Base::grad_P_storage; - using Base::grad_grid_storage; - using Base::grad_v_storage; - using Base::grad_x_storage; - using Base::gravity; - using Base::grid_storage; - using Base::grid_star_storage; - using Base::invD; - using Base::inv_dx; - using Base::lambda; - using Base::m_p; - using Base::mu; - using Base::nu; - using Base::num_cells; - using Base::num_particles; - using Base::res; - using Base::v_storage; - using Base::x_storage; - using Base::grid_bc; - - using VectorI = TVector; - using Vector = TVector; - using Matrix = TMatrix; - - TState() { - num_cells = 1; - for (int i = 0; i < dim; i++) { - num_cells *= res[i]; - } - } - - TC_FORCE_INLINE __host__ __device__ int grid_size() const { - return num_cells; - } - - TC_FORCE_INLINE __device__ int linearized_offset(VectorI x) const { - int ret = x[0]; -#pragma unroll - for (int i = 1; i < dim; i++) { - ret *= res[i]; - ret += x[i]; - } - return ret; - } - - TC_FORCE_INLINE __device__ real *grid_node(int offset) const { - return grid_storage + (dim + 1) * offset; - } - - TC_FORCE_INLINE __device__ real *grid_star_node(int offset) const { - return grid_star_storage + (dim + 1) * offset; - } - - TC_FORCE_INLINE __device__ real *grad_grid_node(int offset) const { - return grad_grid_storage + (dim + 1) * offset; - } - - TC_FORCE_INLINE __device__ real *grid_node(VectorI x) const { - return grid_node(linearized_offset(x)); - } - - TC_FORCE_INLINE __device__ real *grid_node_bc(int offset) const { - return grid_bc + (dim + 1) * offset; - } - - TC_FORCE_INLINE __device__ real *grad_grid_node(VectorI x) const { - return grad_grid_node(linearized_offset(x)); - } - - template = 0> - TC_FORCE_INLINE __device__ Matrix get_matrix(real *p, int part_id) const { - return Matrix( - p[part_id + 0 * num_particles], p[part_id + 1 * num_particles], - p[part_id + 2 * num_particles], p[part_id + 3 * num_particles]); - } - - template = 0> - TC_FORCE_INLINE __device__ Matrix get_matrix(real *p, int part_id) const { - return Matrix( - p[part_id + 0 * num_particles], p[part_id + 1 * num_particles], - p[part_id + 2 * num_particles], p[part_id + 3 * num_particles], - p[part_id + 4 * num_particles], p[part_id + 5 * num_particles], - p[part_id + 6 * num_particles], p[part_id + 7 * num_particles], - p[part_id + 8 * num_particles]); - } - - TC_FORCE_INLINE __device__ void set_matrix(real *p, - int part_id, - Matrix m) const { - for (int i = 0; i < dim; i++) { - for (int j = 0; j < dim; j++) { - p[part_id + (i * dim + j) * num_particles] = m[i][j]; - } - } - } - - template = 0> - TC_FORCE_INLINE __device__ Vector get_vector(real *p, int part_id) { - return Vector(p[part_id], p[part_id + num_particles]); - } - - template = 0> - TC_FORCE_INLINE __device__ Vector get_vector(real *p, int part_id) { - return Vector(p[part_id], p[part_id + num_particles], - p[part_id + num_particles * 2]); - } - - TC_FORCE_INLINE __device__ void set_vector(real *p, int part_id, Vector v) { - for (int i = 0; i < dim; i++) { - p[part_id + num_particles * i] = v[i]; - } - } - - TC_FORCE_INLINE __device__ Vector get_grid_velocity(VectorI i) { - auto g = grid_node(i); - return Vector(g); - } - - TC_FORCE_INLINE __device__ Vector get_grid_star_velocity(VectorI i) { - return Vector(grid_star_node(linearized_offset(i))); - } - - TC_FORCE_INLINE __device__ Vector get_grad_grid_velocity(VectorI i) { - auto g = grad_grid_node(i); - return Vector(g); - } - - TC_FORCE_INLINE __device__ void set_grid_velocity(VectorI i, Vector v) { - auto g = grid_node(i); - for (int d = 0; d < dim; d++) { - g[d] = v[d]; - } - } - - TC_FORCE_INLINE __device__ void set_grad_grid_velocity(int i, - int j, - int k, - Vector v) { - auto g = grad_grid_node(i, j, k); - for (int d = 0; d < dim; d++) { - g[d] = v[d]; - } - } - - TC_FORCE_INLINE __device__ real get_grid_mass(VectorI i) { - auto g = grid_node(i); - return g[dim]; - } - -#define TC_MPM_VECTOR(x) \ - TC_FORCE_INLINE __device__ Vector get_##x(int part_id) { \ - return get_vector(x##_storage, part_id); \ - } \ - TC_FORCE_INLINE __device__ void set_##x(int part_id, Vector x) { \ - return set_vector(x##_storage, part_id, x); \ - } \ - TC_FORCE_INLINE __device__ Vector get_grad_##x(int part_id) { \ - return get_vector(grad_##x##_storage, part_id); \ - } \ - TC_FORCE_INLINE __device__ void set_grad_##x(int part_id, Vector x) { \ - return set_vector(grad_##x##_storage, part_id, x); \ - } - - TC_MPM_VECTOR(x); - TC_MPM_VECTOR(v); - -#define TC_MPM_MATRIX(F) \ - TC_FORCE_INLINE __device__ Matrix get_##F(int part_id) { \ - return get_matrix(F##_storage, part_id); \ - } \ - TC_FORCE_INLINE __device__ void set_##F(int part_id, Matrix m) { \ - return set_matrix(F##_storage, part_id, m); \ - } \ - TC_FORCE_INLINE __device__ Matrix get_grad_##F(int part_id) { \ - return get_matrix(grad_##F##_storage, part_id); \ - } \ - TC_FORCE_INLINE __device__ void set_grad_##F(int part_id, Matrix m) { \ - return set_matrix(grad_##F##_storage, part_id, m); \ - } - - TC_MPM_MATRIX(F); - TC_MPM_MATRIX(P); - TC_MPM_MATRIX(C); - TC_MPM_MATRIX(A); - - TState(int res[dim], - int num_particles, - real dx, - real dt, - real gravity[dim], - real *x_storage, - real *v_storage, - real *F_storage, - real *C_storage, - real *A_storage, - real *P_storage, - real *grid_storage) - : Base() { - this->num_cells = 1; - for (int i = 0; i < dim; i++) { - this->res[i] = res[i]; - this->num_cells *= res[i]; - this->gravity[i] = gravity[i]; - } - this->num_particles = num_particles; - this->dx = dx; - this->inv_dx = 1.0f / dx; - this->dt = dt; - this->invD = 4 * inv_dx * inv_dx; - - this->x_storage = x_storage; - this->v_storage = v_storage; - this->F_storage = F_storage; - this->C_storage = C_storage; - this->A_storage = A_storage; - this->P_storage = P_storage; - this->grid_storage = grid_storage; - } - - TState(int res[dim], - int num_particles, - real dx, - real dt, - real gravity[dim], - real *x_storage, - real *v_storage, - real *F_storage, - real *C_storage, - real *P_storage, - real *A_storage, - real *grid_storage, - real *grad_x_storage, - real *grad_v_storage, - real *grad_F_storage, - real *grad_C_storage, - real *grad_A_storage, - real *grad_P_storage, - real *grad_grid_storage) - : TState(res, - num_particles, - dx, - dt, - gravity, - x_storage, - v_storage, - F_storage, - C_storage, - A_storage, - P_storage, - grid_storage) { - this->grad_x_storage = grad_x_storage; - this->grad_v_storage = grad_v_storage; - this->grad_F_storage = grad_F_storage; - this->grad_C_storage = grad_C_storage; - this->grad_A_storage = grad_A_storage; - this->grad_P_storage = grad_P_storage; - this->grad_grid_storage = grad_grid_storage; - // cudaMalloc(&this->grad_P_storage, sizeof(real) * dim * dim * - // num_particles); - // cudaMalloc(&this->grad_grid_storage, sizeof(real) * (dim + 1) * res[0] * - // res[1] * res[2]); - } - - TState(int res[dim], int num_particles, real dx, real dt, real gravity[dim]) - : TState(res, - num_particles, - dx, - dt, - gravity, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL) { - cudaMalloc(&x_storage, sizeof(real) * dim * num_particles); - cudaMalloc(&v_storage, sizeof(real) * dim * num_particles); - cudaMalloc(&F_storage, sizeof(real) * dim * dim * num_particles); - cudaMalloc(&C_storage, sizeof(real) * dim * dim * num_particles); - cudaMalloc(&P_storage, sizeof(real) * dim * dim * num_particles); - cudaMalloc(&A_storage, sizeof(real) * dim * dim * num_particles); - cudaMalloc(&grid_storage, sizeof(real) * (dim + 1) * num_cells); - cudaMalloc(&grid_star_storage, sizeof(real) * (dim + 1) * num_cells); - cudaMalloc(&grid_bc, sizeof(real) * (dim + 1) * num_cells); - - cudaMalloc(&grad_x_storage, sizeof(real) * dim * num_particles); - cudaMalloc(&grad_v_storage, sizeof(real) * dim * num_particles); - cudaMalloc(&grad_F_storage, sizeof(real) * dim * dim * num_particles); - cudaMalloc(&grad_C_storage, sizeof(real) * dim * dim * num_particles); - cudaMalloc(&grad_P_storage, sizeof(real) * dim * dim * num_particles); - cudaMalloc(&grad_A_storage, sizeof(real) * dim * dim * num_particles); - cudaMalloc(&grad_grid_storage, sizeof(real) * (dim + 1) * num_cells); - - std::vector F_initial(num_particles * dim * dim, 0); - for (int i = 0; i < num_particles; i++) { - if (dim == 2) { - F_initial[i] = 1; - F_initial[i + num_particles * 3] = 1; - } else { - F_initial[i] = 1; - F_initial[i + num_particles * 4] = 1; - F_initial[i + num_particles * 8] = 1; - } - } - cudaMemcpy(F_storage, F_initial.data(), sizeof(Matrix) * num_particles, - cudaMemcpyHostToDevice); - - cudaMemset(x_storage, 0, sizeof(real) * dim * num_particles); - cudaMemset(v_storage, 0, sizeof(real) * dim * num_particles); - cudaMemset(C_storage, 0, sizeof(real) * dim * dim * num_particles); - cudaMemset(P_storage, 0, sizeof(real) * dim * dim * num_particles); - cudaMemset(A_storage, 0, sizeof(real) * dim * dim * num_particles); - cudaMemset(grid_bc, 0, num_cells * (dim + 1) * sizeof(real)); - } - - void clear_gradients() { - cudaMemset(grad_v_storage, 0, sizeof(real) * dim * num_particles); - cudaMemset(grad_x_storage, 0, sizeof(real) * dim * num_particles); - cudaMemset(grad_F_storage, 0, sizeof(real) * dim * dim * num_particles); - cudaMemset(grad_C_storage, 0, sizeof(real) * dim * dim * num_particles); - cudaMemset(grad_P_storage, 0, sizeof(real) * dim * dim * num_particles); - cudaMemset(grad_A_storage, 0, sizeof(real) * dim * dim * num_particles); - cudaMemset(grad_grid_storage, 0, num_cells * (dim + 1) * sizeof(real)); - } -}; - -constexpr int spline_size = 3; - -template -struct TransferCommon { - using VectorI = TVector; - using Vector = TVector; - using Matrix = TMatrix; - - TVector base_coord; - Vector fx; - real dx, inv_dx; - using BSplineWeights = real[dim][spline_size]; - BSplineWeights weights[1 + (int)with_grad]; - - TC_FORCE_INLINE __device__ TransferCommon(const TState &state, - Vector x) { - dx = state.dx; - inv_dx = state.inv_dx; - for (int i = 0; i < dim; i++) { - base_coord[i] = int(x[i] * inv_dx - 0.5); - real f = (real)base_coord[i] - x[i] * inv_dx; - static_assert(std::is_same, real>::value, - ""); - fx[i] = f; - } - - // B-Spline weights - for (int i = 0; i < dim; ++i) { - weights[0][i][0] = 0.5f * sqr(1.5f + fx[i]); - weights[0][i][1] = 0.75f - sqr(fx[i] + 1); - weights[0][i][2] = 0.5f * sqr(fx[i] + 0.5f); - // printf("%f\n", weights[0][i][0] + weights[0][i][1] + - // weights[0][i][2]); - } - - if (with_grad) { - // N(x_i - x_p) - for (int i = 0; i < dim; ++i) { - weights[1][i][0] = -inv_dx * (1.5f + fx[i]); - weights[1][i][1] = inv_dx * (2 * fx[i] + 2); - weights[1][i][2] = -inv_dx * (fx[i] + 0.5f); - // printf("%f\n", weights[1][i][0] + weights[1][i][1] + - // weights[1][i][2]); - } - } - } - - template - TC_FORCE_INLINE __device__ std::enable_if_t w(int i) { - return weights[0][0][i / 3] * weights[0][1][i % 3]; - } - - template - TC_FORCE_INLINE __device__ std::enable_if_t w(int i) { - return weights[0][0][i / 9] * weights[0][1][i / 3 % 3] * - weights[0][2][i % 3]; - } - - template - TC_FORCE_INLINE __device__ std::enable_if_t<_with_grad && (dim == 2), Vector> - dw(int i) { - int j = i % 3; - i = i / 3; - return Vector(weights[1][0][i] * weights[0][1][j], - weights[0][0][i] * weights[1][1][j]); - } - - template - TC_FORCE_INLINE __device__ std::enable_if_t<_with_grad && (dim == 3), Vector> - dw(int i) { - int j = i / 3 % 3, k = i % 3; - i = i / 9; - return Vector(weights[1][0][i] * weights[0][1][j] * weights[0][2][k], - weights[0][0][i] * weights[1][1][j] * weights[0][2][k], - weights[0][0][i] * weights[0][1][j] * weights[1][2][k]); - } - - TC_FORCE_INLINE __device__ Vector dpos(int i) { - return dx * (fx + offset_from_scalar_f(i)); - } -}; - diff --git a/tensorflow_graphics/physics/src/state_base.h b/tensorflow_graphics/physics/src/state_base.h deleted file mode 100644 index 617953e36..000000000 --- a/tensorflow_graphics/physics/src/state_base.h +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once - -template -struct TStateBase { - using real = float; - - static constexpr int dim = dim_; - int num_particles; - int res[dim]; - - real V_p = 10; // TODO: variable vol - real m_p = 100; // TODO: variable m_p - real E = 500; // TODO: variable E - real nu = 0.3; // TODO: variable nu - real mu = E / (2 * (1 + nu)), lambda = E * nu / ((1 + nu) * (1 - 2 * nu)); - - TStateBase() { - set(10, 100, 5, 0.3); - } - - void set(real V_p, real m_p, real E, real nu) { - this->V_p = V_p; - this->m_p = m_p; - this->E = E; - this->nu = nu; - this->mu = E / (2 * (1 + nu)); - this->lambda = E * nu / ((1 + nu) * (1 - 2 * nu)); - } - - real *x_storage; - real *v_storage; - real *F_storage; - real *A_storage; - real *P_storage; - real *C_storage; - real *grid_storage; - real *grid_star_storage; - - real *grid_bc; - - real *grad_x_storage; - real *grad_v_storage; - real *grad_F_storage; - real *grad_A_storage; - real *grad_P_storage; - real *grad_C_storage; - real *grad_grid_storage; - - int num_cells; - - real gravity[dim]; - real dx, inv_dx, invD; - real dt; - - std::vector fetch_x(); - std::vector fetch_grad_v(); - std::vector fetch_grad_x(); - void set_initial_v(float *); - void set_initial_F(float *F); -}; - -template -void advance(TStateBase &state); diff --git a/tensorflow_graphics/physics/src/svd.cuh b/tensorflow_graphics/physics/src/svd.cuh deleted file mode 100644 index 8c5ebc5a7..000000000 --- a/tensorflow_graphics/physics/src/svd.cuh +++ /dev/null @@ -1,1084 +0,0 @@ -#pragma once - -#include "math.h" // CUDA math library -#include - -#define gone 1065353216 -#define gsine_pi_over_eight 1053028117 -#define gcosine_pi_over_eight 1064076127 -#define gone_half 0.5f -#define gsmall_number 1.e-12f -#define gtiny_number 1.e-20f -#define gfour_gamma_squared 5.8284273147583007813f - -union un { - float f; - unsigned int ui; -}; - -__device__ __forceinline__ void svd(float a11, - float a12, - float a13, - float a21, - float a22, - float a23, - float a31, - float a32, - float a33, // input A - float &u11, - float &u12, - float &u13, - float &u21, - float &u22, - float &u23, - float &u31, - float &u32, - float &u33, // output U - float &s11, - // float &s12, float &s13, float &s21, - float &s22, - // float &s23, float &s31, float &s32, - float &s33, // output S - float &v11, - float &v12, - float &v13, - float &v21, - float &v22, - float &v23, - float &v31, - float &v32, - float &v33 // output V -) { - un Sa11, Sa21, Sa31, Sa12, Sa22, Sa32, Sa13, Sa23, Sa33; - un Su11, Su21, Su31, Su12, Su22, Su32, Su13, Su23, Su33; - un Sv11, Sv21, Sv31, Sv12, Sv22, Sv32, Sv13, Sv23, Sv33; - un Sc, Ss, Sch, Ssh; - un Stmp1, Stmp2, Stmp3, Stmp4, Stmp5; - un Ss11, Ss21, Ss31, Ss22, Ss32, Ss33; - un Sqvs, Sqvvx, Sqvvy, Sqvvz; - - Sa11.f = a11; - Sa12.f = a12; - Sa13.f = a13; - Sa21.f = a21; - Sa22.f = a22; - Sa23.f = a23; - Sa31.f = a31; - Sa32.f = a32; - Sa33.f = a33; - - //########################################################### - // Compute normal equations matrix - //########################################################### - - Ss11.f = Sa11.f * Sa11.f; - Stmp1.f = Sa21.f * Sa21.f; - Ss11.f = __fadd_rn(Stmp1.f, Ss11.f); - Stmp1.f = Sa31.f * Sa31.f; - Ss11.f = __fadd_rn(Stmp1.f, Ss11.f); - - Ss21.f = Sa12.f * Sa11.f; - Stmp1.f = Sa22.f * Sa21.f; - Ss21.f = __fadd_rn(Stmp1.f, Ss21.f); - Stmp1.f = Sa32.f * Sa31.f; - Ss21.f = __fadd_rn(Stmp1.f, Ss21.f); - - Ss31.f = Sa13.f * Sa11.f; - Stmp1.f = Sa23.f * Sa21.f; - Ss31.f = __fadd_rn(Stmp1.f, Ss31.f); - Stmp1.f = Sa33.f * Sa31.f; - Ss31.f = __fadd_rn(Stmp1.f, Ss31.f); - - Ss22.f = Sa12.f * Sa12.f; - Stmp1.f = Sa22.f * Sa22.f; - Ss22.f = __fadd_rn(Stmp1.f, Ss22.f); - Stmp1.f = Sa32.f * Sa32.f; - Ss22.f = __fadd_rn(Stmp1.f, Ss22.f); - - Ss32.f = Sa13.f * Sa12.f; - Stmp1.f = Sa23.f * Sa22.f; - Ss32.f = __fadd_rn(Stmp1.f, Ss32.f); - Stmp1.f = Sa33.f * Sa32.f; - Ss32.f = __fadd_rn(Stmp1.f, Ss32.f); - - Ss33.f = Sa13.f * Sa13.f; - Stmp1.f = Sa23.f * Sa23.f; - Ss33.f = __fadd_rn(Stmp1.f, Ss33.f); - Stmp1.f = Sa33.f * Sa33.f; - Ss33.f = __fadd_rn(Stmp1.f, Ss33.f); - - Sqvs.f = 1.f; - Sqvvx.f = 0.f; - Sqvvy.f = 0.f; - Sqvvz.f = 0.f; - - //########################################################### - // Solve symmetric eigenproblem using Jacobi iteration - //########################################################### - for (int i = 0; i < 6; i++) { - Ssh.f = Ss21.f * 0.5f; - Stmp5.f = __fsub_rn(Ss11.f, Ss22.f); - - Stmp2.f = Ssh.f * Ssh.f; - Stmp1.ui = (Stmp2.f >= gtiny_number) ? 0xffffffff : 0; - Ssh.ui = Stmp1.ui & Ssh.ui; - Sch.ui = Stmp1.ui & Stmp5.ui; - Stmp2.ui = ~Stmp1.ui & gone; - Sch.ui = Sch.ui | Stmp2.ui; - - Stmp1.f = Ssh.f * Ssh.f; - Stmp2.f = Sch.f * Sch.f; - Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp4.f = __frsqrt_rn(Stmp3.f); - - Ssh.f = Stmp4.f * Ssh.f; - Sch.f = Stmp4.f * Sch.f; - Stmp1.f = gfour_gamma_squared * Stmp1.f; - Stmp1.ui = (Stmp2.f <= Stmp1.f) ? 0xffffffff : 0; - - Stmp2.ui = gsine_pi_over_eight & Stmp1.ui; - Ssh.ui = ~Stmp1.ui & Ssh.ui; - Ssh.ui = Ssh.ui | Stmp2.ui; - Stmp2.ui = gcosine_pi_over_eight & Stmp1.ui; - Sch.ui = ~Stmp1.ui & Sch.ui; - Sch.ui = Sch.ui | Stmp2.ui; - - Stmp1.f = Ssh.f * Ssh.f; - Stmp2.f = Sch.f * Sch.f; - Sc.f = __fsub_rn(Stmp2.f, Stmp1.f); - Ss.f = Sch.f * Ssh.f; - Ss.f = __fadd_rn(Ss.f, Ss.f); - -#ifdef DEBUG_JACOBI_CONJUGATE - printf("GPU s %.20g, c %.20g, sh %.20g, ch %.20g\n", Ss.f, Sc.f, Ssh.f, - Sch.f); -#endif - //########################################################### - // Perform the actual Givens conjugation - //########################################################### - - Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); - Ss33.f = Ss33.f * Stmp3.f; - Ss31.f = Ss31.f * Stmp3.f; - Ss32.f = Ss32.f * Stmp3.f; - Ss33.f = Ss33.f * Stmp3.f; - - Stmp1.f = Ss.f * Ss31.f; - Stmp2.f = Ss.f * Ss32.f; - Ss31.f = Sc.f * Ss31.f; - Ss32.f = Sc.f * Ss32.f; - Ss31.f = __fadd_rn(Stmp2.f, Ss31.f); - Ss32.f = __fsub_rn(Ss32.f, Stmp1.f); - - Stmp2.f = Ss.f * Ss.f; - Stmp1.f = Ss22.f * Stmp2.f; - Stmp3.f = Ss11.f * Stmp2.f; - Stmp4.f = Sc.f * Sc.f; - Ss11.f = Ss11.f * Stmp4.f; - Ss22.f = Ss22.f * Stmp4.f; - Ss11.f = __fadd_rn(Ss11.f, Stmp1.f); - Ss22.f = __fadd_rn(Ss22.f, Stmp3.f); - Stmp4.f = __fsub_rn(Stmp4.f, Stmp2.f); - Stmp2.f = __fadd_rn(Ss21.f, Ss21.f); - Ss21.f = Ss21.f * Stmp4.f; - Stmp4.f = Sc.f * Ss.f; - Stmp2.f = Stmp2.f * Stmp4.f; - Stmp5.f = Stmp5.f * Stmp4.f; - Ss11.f = __fadd_rn(Ss11.f, Stmp2.f); - Ss21.f = __fsub_rn(Ss21.f, Stmp5.f); - Ss22.f = __fsub_rn(Ss22.f, Stmp2.f); - -#ifdef DEBUG_JACOBI_CONJUGATE - printf("%.20g\n", Ss11.f); - printf("%.20g %.20g\n", Ss21.f, Ss22.f); - printf("%.20g %.20g %.20g\n", Ss31.f, Ss32.f, Ss33.f); -#endif - - //########################################################### - // Compute the cumulative rotation, in quaternion form - //########################################################### - - Stmp1.f = Ssh.f * Sqvvx.f; - Stmp2.f = Ssh.f * Sqvvy.f; - Stmp3.f = Ssh.f * Sqvvz.f; - Ssh.f = Ssh.f * Sqvs.f; - - Sqvs.f = Sch.f * Sqvs.f; - Sqvvx.f = Sch.f * Sqvvx.f; - Sqvvy.f = Sch.f * Sqvvy.f; - Sqvvz.f = Sch.f * Sqvvz.f; - - Sqvvz.f = __fadd_rn(Sqvvz.f, Ssh.f); - Sqvs.f = __fsub_rn(Sqvs.f, Stmp3.f); - Sqvvx.f = __fadd_rn(Sqvvx.f, Stmp2.f); - Sqvvy.f = __fsub_rn(Sqvvy.f, Stmp1.f); - -#ifdef DEBUG_JACOBI_CONJUGATE - printf("GPU q %.20g %.20g %.20g %.20g\n", Sqvvx.f, Sqvvy.f, Sqvvz.f, - Sqvs.f); -#endif - - ////////////////////////////////////////////////////////////////////////// - // (1->3) - ////////////////////////////////////////////////////////////////////////// - Ssh.f = Ss32.f * 0.5f; - Stmp5.f = __fsub_rn(Ss22.f, Ss33.f); - - Stmp2.f = Ssh.f * Ssh.f; - Stmp1.ui = (Stmp2.f >= gtiny_number) ? 0xffffffff : 0; - Ssh.ui = Stmp1.ui & Ssh.ui; - Sch.ui = Stmp1.ui & Stmp5.ui; - Stmp2.ui = ~Stmp1.ui & gone; - Sch.ui = Sch.ui | Stmp2.ui; - - Stmp1.f = Ssh.f * Ssh.f; - Stmp2.f = Sch.f * Sch.f; - Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp4.f = __frsqrt_rn(Stmp3.f); - - Ssh.f = Stmp4.f * Ssh.f; - Sch.f = Stmp4.f * Sch.f; - Stmp1.f = gfour_gamma_squared * Stmp1.f; - Stmp1.ui = (Stmp2.f <= Stmp1.f) ? 0xffffffff : 0; - - Stmp2.ui = gsine_pi_over_eight & Stmp1.ui; - Ssh.ui = ~Stmp1.ui & Ssh.ui; - Ssh.ui = Ssh.ui | Stmp2.ui; - Stmp2.ui = gcosine_pi_over_eight & Stmp1.ui; - Sch.ui = ~Stmp1.ui & Sch.ui; - Sch.ui = Sch.ui | Stmp2.ui; - - Stmp1.f = Ssh.f * Ssh.f; - Stmp2.f = Sch.f * Sch.f; - Sc.f = __fsub_rn(Stmp2.f, Stmp1.f); - Ss.f = Sch.f * Ssh.f; - Ss.f = __fadd_rn(Ss.f, Ss.f); - -#ifdef DEBUG_JACOBI_CONJUGATE - printf("GPU s %.20g, c %.20g, sh %.20g, ch %.20g\n", Ss.f, Sc.f, Ssh.f, - Sch.f); -#endif - - //########################################################### - // Perform the actual Givens conjugation - //########################################################### - - Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); - Ss11.f = Ss11.f * Stmp3.f; - Ss21.f = Ss21.f * Stmp3.f; - Ss31.f = Ss31.f * Stmp3.f; - Ss11.f = Ss11.f * Stmp3.f; - - Stmp1.f = Ss.f * Ss21.f; - Stmp2.f = Ss.f * Ss31.f; - Ss21.f = Sc.f * Ss21.f; - Ss31.f = Sc.f * Ss31.f; - Ss21.f = __fadd_rn(Stmp2.f, Ss21.f); - Ss31.f = __fsub_rn(Ss31.f, Stmp1.f); - - Stmp2.f = Ss.f * Ss.f; - Stmp1.f = Ss33.f * Stmp2.f; - Stmp3.f = Ss22.f * Stmp2.f; - Stmp4.f = Sc.f * Sc.f; - Ss22.f = Ss22.f * Stmp4.f; - Ss33.f = Ss33.f * Stmp4.f; - Ss22.f = __fadd_rn(Ss22.f, Stmp1.f); - Ss33.f = __fadd_rn(Ss33.f, Stmp3.f); - Stmp4.f = __fsub_rn(Stmp4.f, Stmp2.f); - Stmp2.f = __fadd_rn(Ss32.f, Ss32.f); - Ss32.f = Ss32.f * Stmp4.f; - Stmp4.f = Sc.f * Ss.f; - Stmp2.f = Stmp2.f * Stmp4.f; - Stmp5.f = Stmp5.f * Stmp4.f; - Ss22.f = __fadd_rn(Ss22.f, Stmp2.f); - Ss32.f = __fsub_rn(Ss32.f, Stmp5.f); - Ss33.f = __fsub_rn(Ss33.f, Stmp2.f); - -#ifdef DEBUG_JACOBI_CONJUGATE - printf("%.20g\n", Ss11.f); - printf("%.20g %.20g\n", Ss21.f, Ss22.f); - printf("%.20g %.20g %.20g\n", Ss31.f, Ss32.f, Ss33.f); -#endif - - //########################################################### - // Compute the cumulative rotation, in quaternion form - //########################################################### - - Stmp1.f = Ssh.f * Sqvvx.f; - Stmp2.f = Ssh.f * Sqvvy.f; - Stmp3.f = Ssh.f * Sqvvz.f; - Ssh.f = Ssh.f * Sqvs.f; - - Sqvs.f = Sch.f * Sqvs.f; - Sqvvx.f = Sch.f * Sqvvx.f; - Sqvvy.f = Sch.f * Sqvvy.f; - Sqvvz.f = Sch.f * Sqvvz.f; - - Sqvvx.f = __fadd_rn(Sqvvx.f, Ssh.f); - Sqvs.f = __fsub_rn(Sqvs.f, Stmp1.f); - Sqvvy.f = __fadd_rn(Sqvvy.f, Stmp3.f); - Sqvvz.f = __fsub_rn(Sqvvz.f, Stmp2.f); - -#ifdef DEBUG_JACOBI_CONJUGATE - printf("GPU q %.20g %.20g %.20g %.20g\n", Sqvvx.f, Sqvvy.f, Sqvvz.f, - Sqvs.f); -#endif -#if 1 - ////////////////////////////////////////////////////////////////////////// - // 1 -> 2 - ////////////////////////////////////////////////////////////////////////// - - Ssh.f = Ss31.f * 0.5f; - Stmp5.f = __fsub_rn(Ss33.f, Ss11.f); - - Stmp2.f = Ssh.f * Ssh.f; - Stmp1.ui = (Stmp2.f >= gtiny_number) ? 0xffffffff : 0; - Ssh.ui = Stmp1.ui & Ssh.ui; - Sch.ui = Stmp1.ui & Stmp5.ui; - Stmp2.ui = ~Stmp1.ui & gone; - Sch.ui = Sch.ui | Stmp2.ui; - - Stmp1.f = Ssh.f * Ssh.f; - Stmp2.f = Sch.f * Sch.f; - Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp4.f = __frsqrt_rn(Stmp3.f); - - Ssh.f = Stmp4.f * Ssh.f; - Sch.f = Stmp4.f * Sch.f; - Stmp1.f = gfour_gamma_squared * Stmp1.f; - Stmp1.ui = (Stmp2.f <= Stmp1.f) ? 0xffffffff : 0; - - Stmp2.ui = gsine_pi_over_eight & Stmp1.ui; - Ssh.ui = ~Stmp1.ui & Ssh.ui; - Ssh.ui = Ssh.ui | Stmp2.ui; - Stmp2.ui = gcosine_pi_over_eight & Stmp1.ui; - Sch.ui = ~Stmp1.ui & Sch.ui; - Sch.ui = Sch.ui | Stmp2.ui; - - Stmp1.f = Ssh.f * Ssh.f; - Stmp2.f = Sch.f * Sch.f; - Sc.f = __fsub_rn(Stmp2.f, Stmp1.f); - Ss.f = Sch.f * Ssh.f; - Ss.f = __fadd_rn(Ss.f, Ss.f); - -#ifdef DEBUG_JACOBI_CONJUGATE - printf("GPU s %.20g, c %.20g, sh %.20g, ch %.20g\n", Ss.f, Sc.f, Ssh.f, - Sch.f); -#endif - - //########################################################### - // Perform the actual Givens conjugation - //########################################################### - - Stmp3.f = __fadd_rn(Stmp1.f, Stmp2.f); - Ss22.f = Ss22.f * Stmp3.f; - Ss32.f = Ss32.f * Stmp3.f; - Ss21.f = Ss21.f * Stmp3.f; - Ss22.f = Ss22.f * Stmp3.f; - - Stmp1.f = Ss.f * Ss32.f; - Stmp2.f = Ss.f * Ss21.f; - Ss32.f = Sc.f * Ss32.f; - Ss21.f = Sc.f * Ss21.f; - Ss32.f = __fadd_rn(Stmp2.f, Ss32.f); - Ss21.f = __fsub_rn(Ss21.f, Stmp1.f); - - Stmp2.f = Ss.f * Ss.f; - Stmp1.f = Ss11.f * Stmp2.f; - Stmp3.f = Ss33.f * Stmp2.f; - Stmp4.f = Sc.f * Sc.f; - Ss33.f = Ss33.f * Stmp4.f; - Ss11.f = Ss11.f * Stmp4.f; - Ss33.f = __fadd_rn(Ss33.f, Stmp1.f); - Ss11.f = __fadd_rn(Ss11.f, Stmp3.f); - Stmp4.f = __fsub_rn(Stmp4.f, Stmp2.f); - Stmp2.f = __fadd_rn(Ss31.f, Ss31.f); - Ss31.f = Ss31.f * Stmp4.f; - Stmp4.f = Sc.f * Ss.f; - Stmp2.f = Stmp2.f * Stmp4.f; - Stmp5.f = Stmp5.f * Stmp4.f; - Ss33.f = __fadd_rn(Ss33.f, Stmp2.f); - Ss31.f = __fsub_rn(Ss31.f, Stmp5.f); - Ss11.f = __fsub_rn(Ss11.f, Stmp2.f); - -#ifdef DEBUG_JACOBI_CONJUGATE - printf("%.20g\n", Ss11.f); - printf("%.20g %.20g\n", Ss21.f, Ss22.f); - printf("%.20g %.20g %.20g\n", Ss31.f, Ss32.f, Ss33.f); -#endif - - //########################################################### - // Compute the cumulative rotation, in quaternion form - //########################################################### - - Stmp1.f = Ssh.f * Sqvvx.f; - Stmp2.f = Ssh.f * Sqvvy.f; - Stmp3.f = Ssh.f * Sqvvz.f; - Ssh.f = Ssh.f * Sqvs.f; - - Sqvs.f = Sch.f * Sqvs.f; - Sqvvx.f = Sch.f * Sqvvx.f; - Sqvvy.f = Sch.f * Sqvvy.f; - Sqvvz.f = Sch.f * Sqvvz.f; - - Sqvvy.f = __fadd_rn(Sqvvy.f, Ssh.f); - Sqvs.f = __fsub_rn(Sqvs.f, Stmp2.f); - Sqvvz.f = __fadd_rn(Sqvvz.f, Stmp1.f); - Sqvvx.f = __fsub_rn(Sqvvx.f, Stmp3.f); -#endif - } - - //########################################################### - // Normalize quaternion for matrix V - //########################################################### - - Stmp2.f = Sqvs.f * Sqvs.f; - Stmp1.f = Sqvvx.f * Sqvvx.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp1.f = Sqvvy.f * Sqvvy.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp1.f = Sqvvz.f * Sqvvz.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - - Stmp1.f = __frsqrt_rn(Stmp2.f); - Stmp4.f = Stmp1.f * 0.5f; - Stmp3.f = Stmp1.f * Stmp4.f; - Stmp3.f = Stmp1.f * Stmp3.f; - Stmp3.f = Stmp2.f * Stmp3.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); - - Sqvs.f = Sqvs.f * Stmp1.f; - Sqvvx.f = Sqvvx.f * Stmp1.f; - Sqvvy.f = Sqvvy.f * Stmp1.f; - Sqvvz.f = Sqvvz.f * Stmp1.f; - - //########################################################### - // Transform quaternion to matrix V - //########################################################### - - Stmp1.f = Sqvvx.f * Sqvvx.f; - Stmp2.f = Sqvvy.f * Sqvvy.f; - Stmp3.f = Sqvvz.f * Sqvvz.f; - Sv11.f = Sqvs.f * Sqvs.f; - Sv22.f = __fsub_rn(Sv11.f, Stmp1.f); - Sv33.f = __fsub_rn(Sv22.f, Stmp2.f); - Sv33.f = __fadd_rn(Sv33.f, Stmp3.f); - Sv22.f = __fadd_rn(Sv22.f, Stmp2.f); - Sv22.f = __fsub_rn(Sv22.f, Stmp3.f); - Sv11.f = __fadd_rn(Sv11.f, Stmp1.f); - Sv11.f = __fsub_rn(Sv11.f, Stmp2.f); - Sv11.f = __fsub_rn(Sv11.f, Stmp3.f); - Stmp1.f = __fadd_rn(Sqvvx.f, Sqvvx.f); - Stmp2.f = __fadd_rn(Sqvvy.f, Sqvvy.f); - Stmp3.f = __fadd_rn(Sqvvz.f, Sqvvz.f); - Sv32.f = Sqvs.f * Stmp1.f; - Sv13.f = Sqvs.f * Stmp2.f; - Sv21.f = Sqvs.f * Stmp3.f; - Stmp1.f = Sqvvy.f * Stmp1.f; - Stmp2.f = Sqvvz.f * Stmp2.f; - Stmp3.f = Sqvvx.f * Stmp3.f; - Sv12.f = __fsub_rn(Stmp1.f, Sv21.f); - Sv23.f = __fsub_rn(Stmp2.f, Sv32.f); - Sv31.f = __fsub_rn(Stmp3.f, Sv13.f); - Sv21.f = __fadd_rn(Stmp1.f, Sv21.f); - Sv32.f = __fadd_rn(Stmp2.f, Sv32.f); - Sv13.f = __fadd_rn(Stmp3.f, Sv13.f); - - ///########################################################### - // Multiply (from the right) with V - //########################################################### - - Stmp2.f = Sa12.f; - Stmp3.f = Sa13.f; - Sa12.f = Sv12.f * Sa11.f; - Sa13.f = Sv13.f * Sa11.f; - Sa11.f = Sv11.f * Sa11.f; - Stmp1.f = Sv21.f * Stmp2.f; - Sa11.f = __fadd_rn(Sa11.f, Stmp1.f); - Stmp1.f = Sv31.f * Stmp3.f; - Sa11.f = __fadd_rn(Sa11.f, Stmp1.f); - Stmp1.f = Sv22.f * Stmp2.f; - Sa12.f = __fadd_rn(Sa12.f, Stmp1.f); - Stmp1.f = Sv32.f * Stmp3.f; - Sa12.f = __fadd_rn(Sa12.f, Stmp1.f); - Stmp1.f = Sv23.f * Stmp2.f; - Sa13.f = __fadd_rn(Sa13.f, Stmp1.f); - Stmp1.f = Sv33.f * Stmp3.f; - Sa13.f = __fadd_rn(Sa13.f, Stmp1.f); - - Stmp2.f = Sa22.f; - Stmp3.f = Sa23.f; - Sa22.f = Sv12.f * Sa21.f; - Sa23.f = Sv13.f * Sa21.f; - Sa21.f = Sv11.f * Sa21.f; - Stmp1.f = Sv21.f * Stmp2.f; - Sa21.f = __fadd_rn(Sa21.f, Stmp1.f); - Stmp1.f = Sv31.f * Stmp3.f; - Sa21.f = __fadd_rn(Sa21.f, Stmp1.f); - Stmp1.f = Sv22.f * Stmp2.f; - Sa22.f = __fadd_rn(Sa22.f, Stmp1.f); - Stmp1.f = Sv32.f * Stmp3.f; - Sa22.f = __fadd_rn(Sa22.f, Stmp1.f); - Stmp1.f = Sv23.f * Stmp2.f; - Sa23.f = __fadd_rn(Sa23.f, Stmp1.f); - Stmp1.f = Sv33.f * Stmp3.f; - Sa23.f = __fadd_rn(Sa23.f, Stmp1.f); - - Stmp2.f = Sa32.f; - Stmp3.f = Sa33.f; - Sa32.f = Sv12.f * Sa31.f; - Sa33.f = Sv13.f * Sa31.f; - Sa31.f = Sv11.f * Sa31.f; - Stmp1.f = Sv21.f * Stmp2.f; - Sa31.f = __fadd_rn(Sa31.f, Stmp1.f); - Stmp1.f = Sv31.f * Stmp3.f; - Sa31.f = __fadd_rn(Sa31.f, Stmp1.f); - Stmp1.f = Sv22.f * Stmp2.f; - Sa32.f = __fadd_rn(Sa32.f, Stmp1.f); - Stmp1.f = Sv32.f * Stmp3.f; - Sa32.f = __fadd_rn(Sa32.f, Stmp1.f); - Stmp1.f = Sv23.f * Stmp2.f; - Sa33.f = __fadd_rn(Sa33.f, Stmp1.f); - Stmp1.f = Sv33.f * Stmp3.f; - Sa33.f = __fadd_rn(Sa33.f, Stmp1.f); - - //########################################################### - // Permute columns such that the singular values are sorted - //########################################################### - - Stmp1.f = Sa11.f * Sa11.f; - Stmp4.f = Sa21.f * Sa21.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - Stmp4.f = Sa31.f * Sa31.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - - Stmp2.f = Sa12.f * Sa12.f; - Stmp4.f = Sa22.f * Sa22.f; - Stmp2.f = __fadd_rn(Stmp2.f, Stmp4.f); - Stmp4.f = Sa32.f * Sa32.f; - Stmp2.f = __fadd_rn(Stmp2.f, Stmp4.f); - - Stmp3.f = Sa13.f * Sa13.f; - Stmp4.f = Sa23.f * Sa23.f; - Stmp3.f = __fadd_rn(Stmp3.f, Stmp4.f); - Stmp4.f = Sa33.f * Sa33.f; - Stmp3.f = __fadd_rn(Stmp3.f, Stmp4.f); - - // Swap columns 1-2 if necessary - - Stmp4.ui = (Stmp1.f < Stmp2.f) ? 0xffffffff : 0; - Stmp5.ui = Sa11.ui ^ Sa12.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa11.ui = Sa11.ui ^ Stmp5.ui; - Sa12.ui = Sa12.ui ^ Stmp5.ui; - - Stmp5.ui = Sa21.ui ^ Sa22.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa21.ui = Sa21.ui ^ Stmp5.ui; - Sa22.ui = Sa22.ui ^ Stmp5.ui; - - Stmp5.ui = Sa31.ui ^ Sa32.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa31.ui = Sa31.ui ^ Stmp5.ui; - Sa32.ui = Sa32.ui ^ Stmp5.ui; - - Stmp5.ui = Sv11.ui ^ Sv12.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv11.ui = Sv11.ui ^ Stmp5.ui; - Sv12.ui = Sv12.ui ^ Stmp5.ui; - - Stmp5.ui = Sv21.ui ^ Sv22.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv21.ui = Sv21.ui ^ Stmp5.ui; - Sv22.ui = Sv22.ui ^ Stmp5.ui; - - Stmp5.ui = Sv31.ui ^ Sv32.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv31.ui = Sv31.ui ^ Stmp5.ui; - Sv32.ui = Sv32.ui ^ Stmp5.ui; - - Stmp5.ui = Stmp1.ui ^ Stmp2.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Stmp1.ui = Stmp1.ui ^ Stmp5.ui; - Stmp2.ui = Stmp2.ui ^ Stmp5.ui; - - // If columns 1-2 have been swapped, negate 2nd column of A and V so that V is - // still a rotation - - Stmp5.f = -2.f; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Stmp4.f = 1.f; - Stmp4.f = __fadd_rn(Stmp4.f, Stmp5.f); - - Sa12.f = Sa12.f * Stmp4.f; - Sa22.f = Sa22.f * Stmp4.f; - Sa32.f = Sa32.f * Stmp4.f; - - Sv12.f = Sv12.f * Stmp4.f; - Sv22.f = Sv22.f * Stmp4.f; - Sv32.f = Sv32.f * Stmp4.f; - - // Swap columns 1-3 if necessary - - Stmp4.ui = (Stmp1.f < Stmp3.f) ? 0xffffffff : 0; - Stmp5.ui = Sa11.ui ^ Sa13.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa11.ui = Sa11.ui ^ Stmp5.ui; - Sa13.ui = Sa13.ui ^ Stmp5.ui; - - Stmp5.ui = Sa21.ui ^ Sa23.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa21.ui = Sa21.ui ^ Stmp5.ui; - Sa23.ui = Sa23.ui ^ Stmp5.ui; - - Stmp5.ui = Sa31.ui ^ Sa33.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa31.ui = Sa31.ui ^ Stmp5.ui; - Sa33.ui = Sa33.ui ^ Stmp5.ui; - - Stmp5.ui = Sv11.ui ^ Sv13.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv11.ui = Sv11.ui ^ Stmp5.ui; - Sv13.ui = Sv13.ui ^ Stmp5.ui; - - Stmp5.ui = Sv21.ui ^ Sv23.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv21.ui = Sv21.ui ^ Stmp5.ui; - Sv23.ui = Sv23.ui ^ Stmp5.ui; - - Stmp5.ui = Sv31.ui ^ Sv33.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv31.ui = Sv31.ui ^ Stmp5.ui; - Sv33.ui = Sv33.ui ^ Stmp5.ui; - - Stmp5.ui = Stmp1.ui ^ Stmp3.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Stmp1.ui = Stmp1.ui ^ Stmp5.ui; - Stmp3.ui = Stmp3.ui ^ Stmp5.ui; - - // If columns 1-3 have been swapped, negate 1st column of A and V so that V is - // still a rotation - - Stmp5.f = -2.f; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Stmp4.f = 1.f; - Stmp4.f = __fadd_rn(Stmp4.f, Stmp5.f); - - Sa11.f = Sa11.f * Stmp4.f; - Sa21.f = Sa21.f * Stmp4.f; - Sa31.f = Sa31.f * Stmp4.f; - - Sv11.f = Sv11.f * Stmp4.f; - Sv21.f = Sv21.f * Stmp4.f; - Sv31.f = Sv31.f * Stmp4.f; - - // Swap columns 2-3 if necessary - - Stmp4.ui = (Stmp2.f < Stmp3.f) ? 0xffffffff : 0; - Stmp5.ui = Sa12.ui ^ Sa13.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa12.ui = Sa12.ui ^ Stmp5.ui; - Sa13.ui = Sa13.ui ^ Stmp5.ui; - - Stmp5.ui = Sa22.ui ^ Sa23.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa22.ui = Sa22.ui ^ Stmp5.ui; - Sa23.ui = Sa23.ui ^ Stmp5.ui; - - Stmp5.ui = Sa32.ui ^ Sa33.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sa32.ui = Sa32.ui ^ Stmp5.ui; - Sa33.ui = Sa33.ui ^ Stmp5.ui; - - Stmp5.ui = Sv12.ui ^ Sv13.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv12.ui = Sv12.ui ^ Stmp5.ui; - Sv13.ui = Sv13.ui ^ Stmp5.ui; - - Stmp5.ui = Sv22.ui ^ Sv23.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv22.ui = Sv22.ui ^ Stmp5.ui; - Sv23.ui = Sv23.ui ^ Stmp5.ui; - - Stmp5.ui = Sv32.ui ^ Sv33.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Sv32.ui = Sv32.ui ^ Stmp5.ui; - Sv33.ui = Sv33.ui ^ Stmp5.ui; - - Stmp5.ui = Stmp2.ui ^ Stmp3.ui; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Stmp2.ui = Stmp2.ui ^ Stmp5.ui; - Stmp3.ui = Stmp3.ui ^ Stmp5.ui; - - // If columns 2-3 have been swapped, negate 3rd column of A and V so that V is - // still a rotation - - Stmp5.f = -2.f; - Stmp5.ui = Stmp5.ui & Stmp4.ui; - Stmp4.f = 1.f; - Stmp4.f = __fadd_rn(Stmp4.f, Stmp5.f); - - Sa13.f = Sa13.f * Stmp4.f; - Sa23.f = Sa23.f * Stmp4.f; - Sa33.f = Sa33.f * Stmp4.f; - - Sv13.f = Sv13.f * Stmp4.f; - Sv23.f = Sv23.f * Stmp4.f; - Sv33.f = Sv33.f * Stmp4.f; - - //########################################################### - // Construct QR factorization of A*V (=U*D) using Givens rotations - //########################################################### - - Su11.f = 1.f; - Su12.f = 0.f; - Su13.f = 0.f; - Su21.f = 0.f; - Su22.f = 1.f; - Su23.f = 0.f; - Su31.f = 0.f; - Su32.f = 0.f; - Su33.f = 1.f; - - Ssh.f = Sa21.f * Sa21.f; - Ssh.ui = (Ssh.f >= gsmall_number) ? 0xffffffff : 0; - Ssh.ui = Ssh.ui & Sa21.ui; - - Stmp5.f = 0.f; - Sch.f = __fsub_rn(Stmp5.f, Sa11.f); - Sch.f = max(Sch.f, Sa11.f); - Sch.f = max(Sch.f, gsmall_number); - Stmp5.ui = (Sa11.f >= Stmp5.f) ? 0xffffffff : 0; - - Stmp1.f = Sch.f * Sch.f; - Stmp2.f = Ssh.f * Ssh.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp1.f = __frsqrt_rn(Stmp2.f); - - Stmp4.f = Stmp1.f * 0.5f; - Stmp3.f = Stmp1.f * Stmp4.f; - Stmp3.f = Stmp1.f * Stmp3.f; - Stmp3.f = Stmp2.f * Stmp3.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); - Stmp1.f = Stmp1.f * Stmp2.f; - - Sch.f = __fadd_rn(Sch.f, Stmp1.f); - - Stmp1.ui = ~Stmp5.ui & Ssh.ui; - Stmp2.ui = ~Stmp5.ui & Sch.ui; - Sch.ui = Stmp5.ui & Sch.ui; - Ssh.ui = Stmp5.ui & Ssh.ui; - Sch.ui = Sch.ui | Stmp1.ui; - Ssh.ui = Ssh.ui | Stmp2.ui; - - Stmp1.f = Sch.f * Sch.f; - Stmp2.f = Ssh.f * Ssh.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp1.f = __frsqrt_rn(Stmp2.f); - - Stmp4.f = Stmp1.f * 0.5f; - Stmp3.f = Stmp1.f * Stmp4.f; - Stmp3.f = Stmp1.f * Stmp3.f; - Stmp3.f = Stmp2.f * Stmp3.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); - - Sch.f = Sch.f * Stmp1.f; - Ssh.f = Ssh.f * Stmp1.f; - - Sc.f = Sch.f * Sch.f; - Ss.f = Ssh.f * Ssh.f; - Sc.f = __fsub_rn(Sc.f, Ss.f); - Ss.f = Ssh.f * Sch.f; - Ss.f = __fadd_rn(Ss.f, Ss.f); - - //########################################################### - // Rotate matrix A - //########################################################### - - Stmp1.f = Ss.f * Sa11.f; - Stmp2.f = Ss.f * Sa21.f; - Sa11.f = Sc.f * Sa11.f; - Sa21.f = Sc.f * Sa21.f; - Sa11.f = __fadd_rn(Sa11.f, Stmp2.f); - Sa21.f = __fsub_rn(Sa21.f, Stmp1.f); - - Stmp1.f = Ss.f * Sa12.f; - Stmp2.f = Ss.f * Sa22.f; - Sa12.f = Sc.f * Sa12.f; - Sa22.f = Sc.f * Sa22.f; - Sa12.f = __fadd_rn(Sa12.f, Stmp2.f); - Sa22.f = __fsub_rn(Sa22.f, Stmp1.f); - - Stmp1.f = Ss.f * Sa13.f; - Stmp2.f = Ss.f * Sa23.f; - Sa13.f = Sc.f * Sa13.f; - Sa23.f = Sc.f * Sa23.f; - Sa13.f = __fadd_rn(Sa13.f, Stmp2.f); - Sa23.f = __fsub_rn(Sa23.f, Stmp1.f); - - //########################################################### - // Update matrix U - //########################################################### - - Stmp1.f = Ss.f * Su11.f; - Stmp2.f = Ss.f * Su12.f; - Su11.f = Sc.f * Su11.f; - Su12.f = Sc.f * Su12.f; - Su11.f = __fadd_rn(Su11.f, Stmp2.f); - Su12.f = __fsub_rn(Su12.f, Stmp1.f); - - Stmp1.f = Ss.f * Su21.f; - Stmp2.f = Ss.f * Su22.f; - Su21.f = Sc.f * Su21.f; - Su22.f = Sc.f * Su22.f; - Su21.f = __fadd_rn(Su21.f, Stmp2.f); - Su22.f = __fsub_rn(Su22.f, Stmp1.f); - - Stmp1.f = Ss.f * Su31.f; - Stmp2.f = Ss.f * Su32.f; - Su31.f = Sc.f * Su31.f; - Su32.f = Sc.f * Su32.f; - Su31.f = __fadd_rn(Su31.f, Stmp2.f); - Su32.f = __fsub_rn(Su32.f, Stmp1.f); - - // Second Givens rotation - - Ssh.f = Sa31.f * Sa31.f; - Ssh.ui = (Ssh.f >= gsmall_number) ? 0xffffffff : 0; - Ssh.ui = Ssh.ui & Sa31.ui; - - Stmp5.f = 0.f; - Sch.f = __fsub_rn(Stmp5.f, Sa11.f); - Sch.f = max(Sch.f, Sa11.f); - Sch.f = max(Sch.f, gsmall_number); - Stmp5.ui = (Sa11.f >= Stmp5.f) ? 0xffffffff : 0; - - Stmp1.f = Sch.f * Sch.f; - Stmp2.f = Ssh.f * Ssh.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp1.f = __frsqrt_rn(Stmp2.f); - - Stmp4.f = Stmp1.f * 0.5; - Stmp3.f = Stmp1.f * Stmp4.f; - Stmp3.f = Stmp1.f * Stmp3.f; - Stmp3.f = Stmp2.f * Stmp3.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); - Stmp1.f = Stmp1.f * Stmp2.f; - - Sch.f = __fadd_rn(Sch.f, Stmp1.f); - - Stmp1.ui = ~Stmp5.ui & Ssh.ui; - Stmp2.ui = ~Stmp5.ui & Sch.ui; - Sch.ui = Stmp5.ui & Sch.ui; - Ssh.ui = Stmp5.ui & Ssh.ui; - Sch.ui = Sch.ui | Stmp1.ui; - Ssh.ui = Ssh.ui | Stmp2.ui; - - Stmp1.f = Sch.f * Sch.f; - Stmp2.f = Ssh.f * Ssh.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp1.f = __frsqrt_rn(Stmp2.f); - - Stmp4.f = Stmp1.f * 0.5f; - Stmp3.f = Stmp1.f * Stmp4.f; - Stmp3.f = Stmp1.f * Stmp3.f; - Stmp3.f = Stmp2.f * Stmp3.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); - - Sch.f = Sch.f * Stmp1.f; - Ssh.f = Ssh.f * Stmp1.f; - - Sc.f = Sch.f * Sch.f; - Ss.f = Ssh.f * Ssh.f; - Sc.f = __fsub_rn(Sc.f, Ss.f); - Ss.f = Ssh.f * Sch.f; - Ss.f = __fadd_rn(Ss.f, Ss.f); - - //########################################################### - // Rotate matrix A - //########################################################### - - Stmp1.f = Ss.f * Sa11.f; - Stmp2.f = Ss.f * Sa31.f; - Sa11.f = Sc.f * Sa11.f; - Sa31.f = Sc.f * Sa31.f; - Sa11.f = __fadd_rn(Sa11.f, Stmp2.f); - Sa31.f = __fsub_rn(Sa31.f, Stmp1.f); - - Stmp1.f = Ss.f * Sa12.f; - Stmp2.f = Ss.f * Sa32.f; - Sa12.f = Sc.f * Sa12.f; - Sa32.f = Sc.f * Sa32.f; - Sa12.f = __fadd_rn(Sa12.f, Stmp2.f); - Sa32.f = __fsub_rn(Sa32.f, Stmp1.f); - - Stmp1.f = Ss.f * Sa13.f; - Stmp2.f = Ss.f * Sa33.f; - Sa13.f = Sc.f * Sa13.f; - Sa33.f = Sc.f * Sa33.f; - Sa13.f = __fadd_rn(Sa13.f, Stmp2.f); - Sa33.f = __fsub_rn(Sa33.f, Stmp1.f); - - //########################################################### - // Update matrix U - //########################################################### - - Stmp1.f = Ss.f * Su11.f; - Stmp2.f = Ss.f * Su13.f; - Su11.f = Sc.f * Su11.f; - Su13.f = Sc.f * Su13.f; - Su11.f = __fadd_rn(Su11.f, Stmp2.f); - Su13.f = __fsub_rn(Su13.f, Stmp1.f); - - Stmp1.f = Ss.f * Su21.f; - Stmp2.f = Ss.f * Su23.f; - Su21.f = Sc.f * Su21.f; - Su23.f = Sc.f * Su23.f; - Su21.f = __fadd_rn(Su21.f, Stmp2.f); - Su23.f = __fsub_rn(Su23.f, Stmp1.f); - - Stmp1.f = Ss.f * Su31.f; - Stmp2.f = Ss.f * Su33.f; - Su31.f = Sc.f * Su31.f; - Su33.f = Sc.f * Su33.f; - Su31.f = __fadd_rn(Su31.f, Stmp2.f); - Su33.f = __fsub_rn(Su33.f, Stmp1.f); - - // Third Givens Rotation - - Ssh.f = Sa32.f * Sa32.f; - Ssh.ui = (Ssh.f >= gsmall_number) ? 0xffffffff : 0; - Ssh.ui = Ssh.ui & Sa32.ui; - - Stmp5.f = 0.f; - Sch.f = __fsub_rn(Stmp5.f, Sa22.f); - Sch.f = max(Sch.f, Sa22.f); - Sch.f = max(Sch.f, gsmall_number); - Stmp5.ui = (Sa22.f >= Stmp5.f) ? 0xffffffff : 0; - - Stmp1.f = Sch.f * Sch.f; - Stmp2.f = Ssh.f * Ssh.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp1.f = __frsqrt_rn(Stmp2.f); - - Stmp4.f = Stmp1.f * 0.5f; - Stmp3.f = Stmp1.f * Stmp4.f; - Stmp3.f = Stmp1.f * Stmp3.f; - Stmp3.f = Stmp2.f * Stmp3.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); - Stmp1.f = Stmp1.f * Stmp2.f; - - Sch.f = __fadd_rn(Sch.f, Stmp1.f); - - Stmp1.ui = ~Stmp5.ui & Ssh.ui; - Stmp2.ui = ~Stmp5.ui & Sch.ui; - Sch.ui = Stmp5.ui & Sch.ui; - Ssh.ui = Stmp5.ui & Ssh.ui; - Sch.ui = Sch.ui | Stmp1.ui; - Ssh.ui = Ssh.ui | Stmp2.ui; - - Stmp1.f = Sch.f * Sch.f; - Stmp2.f = Ssh.f * Ssh.f; - Stmp2.f = __fadd_rn(Stmp1.f, Stmp2.f); - Stmp1.f = __frsqrt_rn(Stmp2.f); - - Stmp4.f = Stmp1.f * 0.5f; - Stmp3.f = Stmp1.f * Stmp4.f; - Stmp3.f = Stmp1.f * Stmp3.f; - Stmp3.f = Stmp2.f * Stmp3.f; - Stmp1.f = __fadd_rn(Stmp1.f, Stmp4.f); - Stmp1.f = __fsub_rn(Stmp1.f, Stmp3.f); - - Sch.f = Sch.f * Stmp1.f; - Ssh.f = Ssh.f * Stmp1.f; - - Sc.f = Sch.f * Sch.f; - Ss.f = Ssh.f * Ssh.f; - Sc.f = __fsub_rn(Sc.f, Ss.f); - Ss.f = Ssh.f * Sch.f; - Ss.f = __fadd_rn(Ss.f, Ss.f); - - //########################################################### - // Rotate matrix A - //########################################################### - - Stmp1.f = Ss.f * Sa21.f; - Stmp2.f = Ss.f * Sa31.f; - Sa21.f = Sc.f * Sa21.f; - Sa31.f = Sc.f * Sa31.f; - Sa21.f = __fadd_rn(Sa21.f, Stmp2.f); - Sa31.f = __fsub_rn(Sa31.f, Stmp1.f); - - Stmp1.f = Ss.f * Sa22.f; - Stmp2.f = Ss.f * Sa32.f; - Sa22.f = Sc.f * Sa22.f; - Sa32.f = Sc.f * Sa32.f; - Sa22.f = __fadd_rn(Sa22.f, Stmp2.f); - Sa32.f = __fsub_rn(Sa32.f, Stmp1.f); - - Stmp1.f = Ss.f * Sa23.f; - Stmp2.f = Ss.f * Sa33.f; - Sa23.f = Sc.f * Sa23.f; - Sa33.f = Sc.f * Sa33.f; - Sa23.f = __fadd_rn(Sa23.f, Stmp2.f); - Sa33.f = __fsub_rn(Sa33.f, Stmp1.f); - - //########################################################### - // Update matrix U - //########################################################### - - Stmp1.f = Ss.f * Su12.f; - Stmp2.f = Ss.f * Su13.f; - Su12.f = Sc.f * Su12.f; - Su13.f = Sc.f * Su13.f; - Su12.f = __fadd_rn(Su12.f, Stmp2.f); - Su13.f = __fsub_rn(Su13.f, Stmp1.f); - - Stmp1.f = Ss.f * Su22.f; - Stmp2.f = Ss.f * Su23.f; - Su22.f = Sc.f * Su22.f; - Su23.f = Sc.f * Su23.f; - Su22.f = __fadd_rn(Su22.f, Stmp2.f); - Su23.f = __fsub_rn(Su23.f, Stmp1.f); - - Stmp1.f = Ss.f * Su32.f; - Stmp2.f = Ss.f * Su33.f; - Su32.f = Sc.f * Su32.f; - Su33.f = Sc.f * Su33.f; - Su32.f = __fadd_rn(Su32.f, Stmp2.f); - Su33.f = __fsub_rn(Su33.f, Stmp1.f); - - v11 = Sv11.f; - v12 = Sv12.f; - v13 = Sv13.f; - v21 = Sv21.f; - v22 = Sv22.f; - v23 = Sv23.f; - v31 = Sv31.f; - v32 = Sv32.f; - v33 = Sv33.f; - - u11 = Su11.f; - u12 = Su12.f; - u13 = Su13.f; - u21 = Su21.f; - u22 = Su22.f; - u23 = Su23.f; - u31 = Su31.f; - u32 = Su32.f; - u33 = Su33.f; - - s11 = Sa11.f; - // s12 = Sa12.f; s13 = Sa13.f; s21 = Sa21.f; - s22 = Sa22.f; - // s23 = Sa23.f; s31 = Sa31.f; s32 = Sa32.f; - s33 = Sa33.f; -} - - diff --git a/tensorflow_graphics/physics/test_tf_speed.py b/tensorflow_graphics/physics/test_tf_speed.py deleted file mode 100644 index 0c90410c3..000000000 --- a/tensorflow_graphics/physics/test_tf_speed.py +++ /dev/null @@ -1,48 +0,0 @@ -import os -import time -import unittest -import numpy as np -import tensorflow as tf -import tensorflow.contrib.slim as slim -import sys -from IPython import embed -import mpm3d -from simulation import Simulation - -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' - -sess = tf.compat.v1.Session() - -# Memory bandwidth of 1070 = 256 GB/s - -def main(): - #shape = (1024, 1024, 256) - shape = (1024, 256, 256) # size = 0.256 GB, walkthrough time = 1ms - ones = np.ones(shape=shape) - - a = tf.Variable(ones, dtype=tf.float32) - b = tf.Variable(ones, dtype=tf.float32) - - sess.run(tf.compat.v1.global_variables_initializer()) - # op = tf.reduce_max(tf.assign(a, a + b)) - # op = tf.assign(a, b) - op = tf.reduce_max(input_tensor=a + b) - #op = tf.assign(a, a) - - total_time = 0 - N = 1000 - for i in range(N): - t = time.time() - ret = sess.run(op) - t = time.time() - t - print(t) - total_time += t - print(total_time / N * 1000, 'ms') - -if __name__ == '__main__': - main() - - -# Reduce max a (1) : 1.61 ms -# Reduce max a + b (4): 5.57 ms -# a=b, fetch : 23 ms diff --git a/tensorflow_graphics/physics/tests_2d.py b/tensorflow_graphics/physics/tests_2d.py deleted file mode 100644 index c023b1f60..000000000 --- a/tensorflow_graphics/physics/tests_2d.py +++ /dev/null @@ -1,450 +0,0 @@ -import unittest -import time -from simulation import Simulation -from time_integration import UpdatedSimulationState -import tensorflow as tf -import numpy as np -from vector_math import * - -sess = tf.compat.v1.Session() - - -class TestSimulator2D(unittest.TestCase): - - def assertAlmostEqualFloat32(self, a, b, relative_tol=1e-5, clip=1e-3): - if abs(a - b) > relative_tol * max(max(abs(a), abs(b)), clip): - self.assertEqual(a, b) - - def motion_test(self, - gravity=(0, -10), - initial_velocity=(0, 0), - batch_size=1, - dx=1.0, - num_steps=10): - # Zero gravity, 1-batched, translating block - num_particles = 100 - sim = Simulation( - sess=sess, - grid_res=(30, 30), - dx=dx, - num_particles=num_particles, - gravity=gravity, - batch_size=batch_size) - initial = sim.initial_state - next_state = UpdatedSimulationState(sim, initial) - position = np.zeros(shape=(batch_size, 2, num_particles)) - velocity = np.zeros(shape=(batch_size, 2, num_particles)) - for b in range(batch_size): - for i in range(10): - for j in range(10): - position[b, :, i * 10 + j] = ((i * 0.5 + 12.75) * dx, - (j * 0.5 + 12.75) * dx) - velocity[b, :, i * 10 + j] = initial_velocity - input_state = sim.get_initial_state(position=position, velocity=velocity) - - def center_of_mass(): - return np.mean(input_state[0][:, 0, :]), np.mean(input_state[0][:, 1, :]) - - x, y = 15.0 * dx, 15.0 * dx - vx, vy = initial_velocity - - self.assertAlmostEqual(center_of_mass()[0], x) - self.assertAlmostEqual(center_of_mass()[1], y) - for i in range(num_steps): - input_state = sess.run( - next_state.to_tuple(), - feed_dict={sim.initial_state_place_holder(): input_state}) - - # This will work if we use Verlet - # self.assertAlmostEqual(center_of_mass()[1], 15.0 - t * t * 0.5 * g) - - # Symplectic Euler version - vx += sim.dt * gravity[0] - x += sim.dt * vx - vy += sim.dt * gravity[1] - y += sim.dt * vy - self.assertAlmostEqualFloat32(center_of_mass()[0], x) - self.assertAlmostEqualFloat32(center_of_mass()[1], y) - - def test_translation_x(self): - self.motion_test(initial_velocity=(1, 0)) - - def test_translation_x_batched(self): - self.motion_test(initial_velocity=(1, 0), batch_size=1) - - def test_translation_y(self): - self.motion_test(initial_velocity=(0, 1)) - - def test_falling_translation(self): - self.motion_test(initial_velocity=(2, -1), gravity=(-4, 6)) - - def test_falling_translation_dx(self): - self.motion_test(initial_velocity=(2, -1), gravity=(-4, 6), dx=0.05) - self.motion_test( - initial_velocity=(0.02, -0.01), gravity=(-0.04, 0.06), dx=0.1) - self.motion_test(initial_velocity=(2, -1), gravity=(-4, 6), dx=10) - - def test_free_fall(self): - self.motion_test(gravity=(0, -10)) - - ''' - def test_recursive_placeholder(self): - a = tf.placeholder(dtype=tf_precision) - b = tf.placeholder(dtype=tf_precision) - self.assertAlmostEqual(sess.run(a + b, feed_dict={(a, b): [1, 2]}), 3) - # The following will not work - # print(sess.run(a + b, feed_dict={{'a':a, 'b':b}: {'a':1, 'b':2}})) - ''' - - def test_bouncing_cube(self): - #gravity = (0, -10) - gravity = (0, -10) - batch_size = 1 - dx = 0.03 - num_particles = 100 - sim = Simulation( - grid_res=(30, 30), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=1e-3, - E=100, - nu=0.45, - batch_size=batch_size, - sess=sess) - position = np.zeros(shape=(batch_size, 2, num_particles)) - initial_velocity = tf.compat.v1.placeholder(shape=(2,), dtype=tf_precision) - velocity = tf.broadcast_to( - initial_velocity[None, :, None], shape=(batch_size, 2, num_particles)) - - for b in range(batch_size): - for i in range(10): - for j in range(10): - position[b, :, i * 10 + j] = (((i + b * 3) * 0.5 + 12.75) * dx, - (j * 0.5 + 12.75) * dx) - input_state = sim.get_initial_state( - position=position, - velocity=velocity, - ) - - memo = sim.run( - num_steps=1000, - initial_state=input_state, - initial_feed_dict={initial_velocity: [1, -2]}) - sim.visualize(memo, interval=5) - - def test_bouncing_cube_benchmark(self): - gravity = (0, -10) - batch_size = 1 - dx = 0.2 - sample_density = 0.1 - N = 80 - num_particles = N * N - sim = Simulation( - grid_res=(100, 120), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=1 / 60 / 3, - batch_size=batch_size, - sess=sess) - position = np.zeros(shape=(batch_size, 2, num_particles)) - poissons_ratio = np.ones(shape=(batch_size, 1, num_particles)) * 0.3 - velocity_ph = tf.compat.v1.placeholder(shape=(2,), dtype=tf_precision) - for b in range(batch_size): - for i in range(N): - for j in range(N): - position[b, :, i * N + j] = (i * sample_density + 2, j * sample_density + 5 + 2 * dx) - - - loss = tf.reduce_mean(input_tensor=sim.initial_state.center_of_mass()[:, 0]) - - velocity_ph = tf.compat.v1.placeholder(shape=(2,), dtype=tf_precision) - velocity = velocity_ph[None, :, None] + tf.zeros( - shape=[batch_size, 2, num_particles], dtype=tf_precision) - input_state = sim.get_initial_state( - position=position, - velocity=velocity, - poissons_ratio=poissons_ratio, - youngs_modulus=1000) - - sim.set_initial_state(initial_state=input_state) - import time - memo = sim.run( - num_steps=100, - initial_state=input_state, - initial_feed_dict={velocity_ph: [0, 0]}) - sym = sim.gradients_sym(loss=loss, variables=[velocity_ph]) - while True: - t = time.time() - grad = sim.eval_gradients(sym, memo) - print((time.time() - t) / 100 * 3) - sim.visualize(memo, interval=5) - - def test_rotating_cube(self): - gravity = (0, 0) - batch_size = 1 - dx = 0.03 - num_particles = 100 - sim = Simulation( - grid_res=(30, 30), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=1e-4, - E=1, - sess=sess) - position = np.zeros(shape=(batch_size, 2, num_particles)) - velocity = np.zeros(shape=(batch_size, 2, num_particles)) - for b in range(batch_size): - for i in range(10): - for j in range(10): - position[b, :, i * 10 + j] = ((i * 0.5 + 12.75) * dx, - (j * 0.5 + 12.75) * dx) - velocity[b, :, i * 10 + j] = (1 * (j - 4.5), -1 * (i - 4.5)) - input_state = sim.get_initial_state(position=position, velocity=velocity) - - memo = sim.run(1000, input_state) - sim.visualize(memo, interval=5) - - def test_dilating_cube(self): - gravity = (0, 0) - batch_size = 1 - dx = 0.03 - num_particles = 100 - sim = Simulation( - grid_res=(30, 30), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=1e-3, - sess=sess, - E=0.01) - position = np.zeros(shape=(batch_size, 2, num_particles)) - velocity = np.zeros(shape=(batch_size, 2, num_particles)) - for b in range(batch_size): - for i in range(10): - for j in range(10): - position[b, :, i * 10 + j] = ((i * 0.5 + 12.75) * dx, - (j * 0.5 + 12.75) * dx) - velocity[b, :, i * 10 + j] = (0.5 * (i - 4.5), 0) - input_state = sim.get_initial_state(position=position, velocity=velocity) - - memo = sim.run(100, input_state) - sim.visualize(memo) - - def test_initial_gradients(self): - gravity = (0, 0) - batch_size = 1 - dx = 0.03 - N = 10 - num_particles = N * N - steps = 10 - dt = 1e-3 - sim = Simulation( - grid_res=(30, 30), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=dt, - sess=sess) - position = np.zeros(shape=(batch_size, 2, num_particles)) - youngs_modulus = np.zeros(shape=(batch_size, 1, num_particles)) - velocity_ph = tf.compat.v1.placeholder(shape=(2,), dtype=tf_precision) - velocity = velocity_ph[None, :, None] + tf.zeros( - shape=[batch_size, 2, num_particles], dtype=tf_precision) - for b in range(batch_size): - for i in range(N): - for j in range(N): - position[b, :, i * N + j] = ((i * 0.5 + 12.75) * dx, - (j * 0.5 + 12.75) * dx) - input_state = sim.get_initial_state( - position=position, velocity=velocity, youngs_modulus=youngs_modulus) - - loss = tf.reduce_mean(input_tensor=sim.initial_state.center_of_mass()[:, 0]) - memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: [3, 2]}) - - sim.set_initial_state(input_state) - sym = sim.gradients_sym(loss=loss, variables=[velocity_ph]) - grad = sim.eval_gradients(sym, memo) - self.assertAlmostEqualFloat32(grad[0][0], steps * dt) - self.assertAlmostEqualFloat32(grad[0][1], 0) - - def test_gradients(self): - gravity = (0, 0) - batch_size = 1 - dx = 0.03 - N = 2 - num_particles = N * N - steps = 30 - dt = 1e-2 - sim = Simulation( - grid_res=(30, 30), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=dt, - batch_size=batch_size, - E=1, - sess=sess) - - position_ph = tf.compat.v1.placeholder(shape=(batch_size, 2, num_particles), dtype=tf.float32) - velocity_ph = tf.compat.v1.placeholder(shape=(batch_size, 2, num_particles), dtype=tf.float32) - - position_val = np.zeros(shape=(batch_size, 2, num_particles)) - velocity_val = np.zeros(shape=(batch_size, 2, num_particles)) - - F_val = np.zeros(shape=(batch_size, 2, 2, num_particles)) - F_val[:, 0, 0, :] = 0.5 - F_val[:, 0, 1, :] = 0.5 - F_val[:, 1, 0, :] = -0.5 - F_val[:, 1, 1, :] = 1 - - for b in range(batch_size): - for i in range(N): - for j in range(N): - position_val[b, :, i * N + j] = (0.5 + i * dx * 0.3, 0.5 + j * dx * 0.2) - - input_state = sim.get_initial_state(position=position_ph, velocity=velocity_ph, deformation_gradient=F_val) - - # loss = sim.initial_state.velocity[:, 1, 0] - #loss = sim.initial_state.deformation_gradient[:, 1, 1, 0] - loss = sim.initial_state.affine[:, 1, 0, 0] - - sim.set_initial_state(input_state) - sym = sim.gradients_sym(loss=loss, variables=[position_ph, velocity_ph]) - - def forward(pos, vel): - memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: vel, position_ph: pos}, loss=loss) - return memo.loss[0] - - memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: velocity_val, position_ph: position_val}) - sim.visualize(memo) - grad = sim.eval_gradients(sym, memo) - delta = 1e-3 - dim = 2 - - for i in range(dim): - for j in range(num_particles): - position_val[0, i, j] += delta - v1 = forward(position_val, velocity_val) - - position_val[0, i, j] -= 2 * delta - v2 = forward(position_val, velocity_val) - - position_val[0, i, j] += delta - - g = (v1 - v2) / (2 * delta) - print(g, grad[0][0, i, j]) - self.assertAlmostEqualFloat32(g, grad[0][0, i, j], clip=1e-2, relative_tol=4e-2) - - for i in range(dim): - for j in range(num_particles): - velocity_val[0, i, j] += delta - v1 = forward(position_val, velocity_val) - - velocity_val[0, i, j] -= 2 * delta - v2 = forward(position_val, velocity_val) - - velocity_val[0, i, j] += delta - - g = (v1 - v2) / (2 * delta) - print(g, grad[1][0, i, j]) - self.assertAlmostEqualFloat32(g, grad[1][0, i, j], clip=1e-2, relative_tol=4e-2) - - - def test_bc_gradients(self): - batch_size = 1 - gravity = (0, -0) - N = 10 - num_particles = N * N - steps = 70 - dt = 1e-2 - res = (30, 30) - - goal = tf.compat.v1.placeholder(dtype=tf.float32, shape=[batch_size, 2], name='goal') - velocity_delta = np.zeros([batch_size, 2, num_particles]) - - sim = Simulation( - dt=dt, - num_particles=num_particles, - grid_res=res, - gravity=gravity, - m_p=1, - V_p=1, - E = 5, - nu = 0.3, - sess=sess) - - position = np.zeros(shape=(batch_size, num_particles, 2)) - - velocity_ph = tf.compat.v1.placeholder(shape=(2,), dtype=tf.float32) - velocity = velocity_ph[None, :, None] + tf.zeros( - shape=[batch_size, 2, num_particles], dtype=tf.float32) - - part_size = N * N // 2 - velocity_part = tf.compat.v1.placeholder(shape = (2, ), dtype = tf.float32) - velocity_p = velocity_part[None, :, None] + tf.zeros(shape = (batch_size, 2, part_size), dtype = tf.float32) - velocity_2 = tf.concat([velocity_p, - tf.zeros(shape = (batch_size, 2, num_particles - part_size), dtype = tf.float32)], - axis = 2) - velocity = velocity + velocity_2 - - for b in range(batch_size): - for i in range(N): - for j in range(N): - position[b, i * N + j] = ((i * 0.5 + 5) / 30, - (j * 0.5 + 12.75) / 30) - velocity_delta[b, :, i * N + j] = (float(j) / N - 0.5, 0.5 - float(i) / N) - - velocity = velocity + velocity_delta - position = np.array(position).swapaxes(1, 2) - - sess.run(tf.compat.v1.global_variables_initializer()) - - initial_state = sim.get_initial_state( - position=position, velocity=velocity) - - final_position = sim.initial_state.center_of_mass() - loss = tf.reduce_sum(input_tensor=(final_position - goal) ** 2) - sim.add_point_visualization(pos = final_position, color = (1, 0, 0), radius = 3) - sim.add_point_visualization(pos = goal, color = (0, 1, 0), radius = 3) - - sim.set_initial_state(initial_state = initial_state) - - sym = sim.gradients_sym(loss, variables = [velocity_part]) - - goal_input = np.array([[0.7, 0.3]], dtype=np.float32) - - def forward(in_v, d_v): - memo = sim.run( - initial_state=initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: in_v, velocity_part : d_v}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - return memo.loss - - in_v = [0.2, -1] - d_v = [0, 0] - memo = sim.run( - initial_state=initial_state, - num_steps = steps, - initial_feed_dict = {velocity_ph: in_v, velocity_part : d_v}, - iteration_feed_dict = {goal: goal_input}, - loss = loss) - - grad = sim.eval_gradients(sym, memo) - sim.visualize(memo) - print(grad) - delta = 1e-4 - for i in range(2): - d_v[i] += delta - f1 = forward(in_v, d_v) - d_v[i] -= 2 * delta - f2 = forward(in_v, d_v) - d_v[i] += delta - print((f1 - f2) / (2 * delta)) - -if __name__ == '__main__': - unittest.main() diff --git a/tensorflow_graphics/physics/tests_3d.py b/tensorflow_graphics/physics/tests_3d.py deleted file mode 100644 index 8b82cbd01..000000000 --- a/tensorflow_graphics/physics/tests_3d.py +++ /dev/null @@ -1,361 +0,0 @@ -import os -import unittest -import numpy as np -import tensorflow as tf -import tensorflow.contrib.slim as slim -import sys -from IPython import embed -import mpm3d -from simulation import Simulation - -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' - -sess = tf.compat.v1.Session() - -class TestSimulator3D(unittest.TestCase): - - def assertAlmostEqualFloat32(self, a, b, relative_tol=1e-3, clip=1e-3): - if abs(a - b) > relative_tol * max(max(abs(a), abs(b)), clip): - self.assertEqual(a, b) - ''' - def test_g2p(self): - # print('\n==============\ntest_forward start') - x = tf.placeholder(tf.float32, shape=(1, 3, 1)) - v = tf.placeholder(tf.float32, shape=(1, 3, 1)) - C = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) - f = np.zeros([1, 3, 3, 1]).astype(np.float32) - f[0, 0, 0, 0] = 1 - f[0, 1, 1, 0] = 1 - f[0, 2, 2, 0] = 1 - F = tf.constant(f) - P, G = mpm3d.p2g(x, v, F, C) - - res = [100] * 3 - gravity = [0.] * 3 - dt = 1e-2 - G = mpm3d.normalize_grid(G, res, gravity, dt) - - step_p2g2p = mpm3d.g2p(x, v, F, C, P, G) - step_mpm = mpm3d.mpm(x, v, F, C, dt = 1e-2, gravity = gravity) - feed_dict = { - x: np.array([[[0.5], [0.5], [0.5]]]).astype(np.float32), - v: np.array([[[0.1], [0.1], [0.1]]]).astype(np.float32) - } - output_p2g2p = sess.run(step_p2g2p, feed_dict=feed_dict) - output_mpm = sess.run(step_mpm, feed_dict=feed_dict) - - for i in range(4): - diff = np.abs(output_p2g2p[i] - output_mpm[i]) - self.assertAlmostEqualFloat32(diff.max(), 0) - ''' - - - def test_p2g(self): - # print('\n==============\ntest_forward start') - x = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) - v = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) - C = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) - A = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) - f = np.zeros([1, 3, 3, 1]).astype(np.float32) - f[0, 0, 0, 0] = 1 - f[0, 1, 1, 0] = 1 - f[0, 2, 2, 0] = 1 - F = tf.constant(f) - - dt = 1e-2 - dx = 3e-2 - gravity = [0, -1, 0] - res = [100, 100, 100] - - P, G = mpm3d.p2g(position = x, velocity = v, affine = F, deformation = C, actuation = A, dt = dt, dx = dx, gravity = gravity, resolution = res) - feed_dict = { - x: np.array([[[0.5], [0.5], [0.5]]]).astype(np.float32), - v: np.array([[[0.1], [0.1], [0.1]]]).astype(np.float32) - } - res = [100] * 3 - gravity = [0.] * 3 - dt = 1e-2 - G_p2g = mpm3d.normalize_grid(G, res, gravity, dt) - mpm_output = mpm3d.mpm(position = x, velocity = v, affine = F, deformation = C, actuation = A, dt = dt, dx = dx, gravity = gravity, resolution = res) - G_mpm = mpm_output[5] - G1 = sess.run(G_p2g, feed_dict=feed_dict) - G2 = sess.run(G_mpm, feed_dict=feed_dict) - - for i in range(G1.shape[0]): - for j in range(G1.shape[1]): - for k in range(G1.shape[2]): - self.assertAlmostEqualFloat32(G1[i, j, k], G2[i, j, k]) - - def test_forward(self): - # print('\n==============\ntest_forward start') - x = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) - v = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) - C = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) - A = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) - f = np.zeros([1, 3, 3, 1]).astype(np.float32) - f[0, 0, 0, 0] = 1 - f[0, 1, 1, 0] = 1 - f[0, 2, 2, 0] = 1 - F = tf.constant(f) - grid_bc = tf.constant(np.zeros([1, 1000, 4]).astype(np.float32)) - dt = 1e-2 - dx = 1e-1 - gravity = [0, -1, 0] - res = [10, 10, 10] - xx, vv, FF, CC, PP, grid, grid_star = mpm3d.mpm(position = x, velocity = v, affine = F, deformation = C, actuation = A, grid_bc = grid_bc, dt = dt, dx = dx, gravity = gravity, resolution = res) - # print(grid.shape) - step = mpm3d.mpm(position = xx, velocity = vv, affine = FF, deformation = CC, actuation = A, grid_bc = grid_bc, dt = dt, dx = dx, gravity = gravity, resolution = res) - feed_dict = { - x: np.array([[[0.5], [0.5], [0.5]]]).astype(np.float32), - v: np.array([[[0.1], [0.1], [0.1]]]).astype(np.float32) - } - o = sess.run(step, feed_dict=feed_dict) - xout, vout, cout, fout, pout, gout, gsout = o - print(o) - print(gout.shape) - - def test_backward(self): - # print('\n==============\ntest_backward start') - x = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) - v = tf.compat.v1.placeholder(tf.float32, shape=(1, 3, 1)) - C = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) - A = tf.constant(np.zeros([1, 3, 3, 1]).astype(np.float32)) - f = np.zeros([1, 3, 3, 1]).astype(np.float32) - f[0, 0, 0, 0] = 1 - f[0, 1, 1, 0] = 1 - f[0, 2, 2, 0] = 1 - F = tf.constant(f) - gravity = [0, -1, 0] - xx, vv, FF, CC, PP, grid = mpm3d.mpm(x, v, F, C, A, dt = 1e-3, gravity = gravity) - feed_dict = { - x: np.array([[[0.5], [0.5], [0.5]]]).astype(np.float32), - v: np.array([[[0.1], [0.1], [0.1]]]).astype(np.float32) - } - dimsum = tf.reduce_sum(input_tensor=xx) - dydx = tf.gradients(ys=dimsum, xs=x) - dydv = tf.gradients(ys=dimsum, xs=v) - print('dydx', dydx) - print('dydv', dydv) - - y0 = sess.run(dydx, feed_dict=feed_dict) - y1 = sess.run(dydv, feed_dict=feed_dict) - print(y0) - print(y1) - - def test_bouncing_cube(self): - gravity = (0, -10, 0) - batch_size = 1 - dx = 0.03 - N = 10 - num_particles = N ** 3 - steps = 1 - dt = 1e-2 - sim = Simulation( - grid_res=(30, 30, 30), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=dt, - batch_size=batch_size, - sess=sess) - position = np.zeros(shape=(batch_size, 3, num_particles)) - initial_velocity = tf.compat.v1.placeholder(shape=(3,), dtype=tf.float32) - velocity = initial_velocity[None, :, None] + tf.zeros(shape=(batch_size, 3, num_particles)) - for b in range(batch_size): - for i in range(N): - for j in range(N): - for k in range(N): - position[b, :, i * N * N + j * N + k] =\ - (((i + b * 3) * 0.5 + 12.75) * dx, (j * 0.5 + 12.75) * dx, - (k * 0.5 + 12.75) * dx) - input_state = sim.get_initial_state( - position=position, - velocity=velocity) - - loss = tf.reduce_mean(input_tensor=sim.initial_state.center_of_mass()[:, 0]) - memo = sim.run(steps, input_state, initial_feed_dict={initial_velocity: [1, 0, 2]}) - - sim.set_initial_state(input_state) - sym = sim.gradients_sym(loss=loss, variables=[initial_velocity]) - - sim.visualize(memo) - grad = sim.eval_gradients(sym, memo) - print(grad) - self.assertAlmostEqualFloat32(grad[0][0], steps * dt) - self.assertAlmostEqualFloat32(grad[0][1], 0) - self.assertAlmostEqualFloat32(grad[0][2], 0) - - def test_gradients(self): - gravity = (0, 0, 0) - batch_size = 1 - dx = 0.03 - N = 2 - num_particles = N ** 3 - steps = 3 - dt = 1e-2 - sim = Simulation( - grid_res=(20, 20, 20), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=dt, - batch_size=batch_size, - sess=sess) - - position_ph = tf.compat.v1.placeholder(shape=(batch_size, 3, num_particles), dtype=tf.float32) - velocity_ph = tf.compat.v1.placeholder(shape=(batch_size, 3, num_particles), dtype=tf.float32) - - position_val = np.zeros(shape=(batch_size, 3, num_particles)) - velocity_val = np.zeros(shape=(batch_size, 3, num_particles)) - - F_val = np.zeros(shape=(batch_size, 3, 3, num_particles)) - ''' - F_val[:, 0, 0, :] = 0.8 - F_val[:, 0, 1, :] = 0.2 - F_val[:, 1, 1, :] = 1 - F_val[:, 1, 0, :] = 0.3 - F_val[:, 2, 2, :] = 0.8 - F_val[:, 2, 1, :] = 0.1 - F_val[:, 1, 2, :] = 0.3 - ''' - F_val[:, 0, 0, :] = 1 - F_val[:, 1, 1, :] = 1 - F_val[:, 2, 2, :] = 1 - - for b in range(batch_size): - for i in range(N): - for j in range(N): - for k in range(N): - position_val[b, :, i * N * N + j * N + k] = \ - (((i + b * 3) * 0.5 + 12.75) * dx, (j * 0.5 + 12.75) * dx, - (k * 0.5 + 12.75) * dx) - - input_state = sim.get_initial_state(position=position_ph, velocity=velocity_ph, deformation_gradient=F_val) - - loss = sim.initial_state.position[:, 0, 0] - - sim.set_initial_state(input_state) - sym = sim.gradients_sym(loss=loss, variables=[position_ph, velocity_ph]) - - def forward(pos, vel): - memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: vel, position_ph: pos}, loss=loss) - return memo.loss[0] - - #sim.visualize(memo) - memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: velocity_val, position_ph: position_val}) - grad = sim.eval_gradients(sym, memo) - delta = 1e-2 - dim = 3 - - for i in range(dim): - for j in range(num_particles): - position_val[0, i, j] += delta - v1 = forward(position_val, velocity_val) - - position_val[0, i, j] -= 2 * delta - v2 = forward(position_val, velocity_val) - - position_val[0, i, j] += delta - - g = (v1 - v2) / (2 * delta) - print(g, grad[0][0, i, j]) - self.assertAlmostEqualFloat32(g, grad[0][0, i, j], clip=1e-2, relative_tol=5e-2) - - for i in range(dim): - for j in range(num_particles): - velocity_val[0, i, j] += delta - v1 = forward(position_val, velocity_val) - - velocity_val[0, i, j] -= 2 * delta - v2 = forward(position_val, velocity_val) - - velocity_val[0, i, j] += delta - - g = (v1 - v2) / (2 * delta) - print(g, grad[1][0, i, j]) - self.assertAlmostEqualFloat32(g, grad[1][0, i, j], clip=1e-2, relative_tol=5e-2) - - def test_gradients2(self): - gravity = (0, -0, 0) - batch_size = 1 - dx = 0.03 - N = 2 - num_particles = N - steps = 4 - dt = 1e-2 - sim = Simulation( - grid_res=(30, 30, 30), - dx=dx, - num_particles=num_particles, - gravity=gravity, - dt=dt, - batch_size=batch_size, - E=0.01, - sess=sess) - - position_ph = tf.compat.v1.placeholder(shape=(batch_size, 3, num_particles), dtype=tf.float32) - velocity_ph = tf.compat.v1.placeholder(shape=(batch_size, 3, num_particles), dtype=tf.float32) - - position_val = np.zeros(shape=(batch_size, 3, num_particles)) - velocity_val = np.zeros(shape=(batch_size, 3, num_particles)) - - F_val = np.zeros(shape=(batch_size, 3, 3, num_particles)) - F_val[:, 0, 0, :] = 0.5 - F_val[:, 0, 1, :] = 0 - F_val[:, 1, 1, :] = 1 - F_val[:, 1, 0, :] = 0 - F_val[:, 2, 2, :] = 1 - F_val[:, 2, 1, :] = 0 - F_val[:, 1, 2, :] = 0 - - for b in range(batch_size): - for i in range(N): - position_val[b, :, i] = (0.5, 0.5, 0.5) - - input_state = sim.get_initial_state(position=position_ph, velocity=velocity_ph, deformation_gradient=F_val) - - loss = sim.initial_state.position[:, 0, 0] - - sim.set_initial_state(input_state) - sym = sim.gradients_sym(loss=loss, variables=[position_ph, velocity_ph]) - - def forward(pos, vel): - memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: vel, position_ph: pos}, loss=loss) - return memo.loss[0] - - #sim.visualize(memo) - memo = sim.run(steps, input_state, initial_feed_dict={velocity_ph: velocity_val, position_ph: position_val}) - grad = sim.eval_gradients(sym, memo) - delta = 1e-3 - dim = 3 - - for i in range(dim): - for j in range(num_particles): - position_val[0, i, j] += delta - v1 = forward(position_val, velocity_val) - - position_val[0, i, j] -= 2 * delta - v2 = forward(position_val, velocity_val) - - position_val[0, i, j] += delta - - g = (v1 - v2) / (2 * delta) - print(g, grad[0][0, i, j]) - self.assertAlmostEqualFloat32(g, grad[0][0, i, j], clip=1e-2, relative_tol=4e-2) - - for i in range(dim): - for j in range(num_particles): - velocity_val[0, i, j] += delta - v1 = forward(position_val, velocity_val) - - velocity_val[0, i, j] -= 2 * delta - v2 = forward(position_val, velocity_val) - - velocity_val[0, i, j] += delta - - g = (v1 - v2) / (2 * delta) - print(g, grad[1][0, i, j]) - self.assertAlmostEqualFloat32(g, grad[1][0, i, j], clip=1e-2, relative_tol=4e-2) - -if __name__ == '__main__': - unittest.main() diff --git a/tensorflow_graphics/physics/time_integration.py b/tensorflow_graphics/physics/time_integration.py deleted file mode 100644 index 252a689dd..000000000 --- a/tensorflow_graphics/physics/time_integration.py +++ /dev/null @@ -1,513 +0,0 @@ -import numpy as np -import tensorflow as tf -from vector_math import * -from typing import List, Callable - - -use_cuda = False -use_apic = True - -if use_float64: - use_cuda = False - -try: - import mpm3d - cuda_imported = True -except: - cuda_imported = False -if not cuda_imported: - print("***Warning: NOT using CUDA") - -kernel_size = 3 - -class SimulationState: - """An object which represents the state of a single step of the simulation. Used both to specify an initial state for running simulation and also for defining a loss on the final state. ChainQueen handles most of the work of taking tensorflow tensors from SimulationStates and manually chaining together gradients from kernel calls for efficiency reasons. Most of this work happens behind the scenes from the users. SimulationState provides a number of useful members that can be helpful for defining a tensor-based loss function. In general, most members should be thought of as being tensors that are functions of the initial state of a simulation. SimulationStates have two subclasses, class:`InitialSimulationState` for the initial state only (which initializes a lot of the problem) and class:`UpdatedSimulationState` which denotes any other simulation state. Each SimulationState keeps track of the sim itself. - - :param sim: The simulation that will be used to populate these states. - :type sim: class:`Simulation` - :param position: batch_size x dim x num_particles, the position of the particles in the system. - :type position: np.array or tf.tensor - :param velocity: batch_size x dim x num_particles, the velocity of the particles in the system. - :type velocity: np.array or tf.tensor - :param deformation_gradient: batch_size x dim x dim num_particles, the deformation gradient of the particles in the system. - :type deformation_gradient: np.array or tf.tensor - :param affine: batch_size x dim x dim num_particles, the affine matrix of the particles in the system. - :type affine: np.array or tf.tensor - :param particle_mass: batch_size x 1 x num_particles, the mass of every particle. - :type particle_mass: np.array or tf.tensor - :param particle_volume: batch_size x 1 x num_particles, the volume of each particle. - :type particle_volume: np.array or tf.tensor - :param youngs_modulus: batch_size x 1 x num_particles, the youngs modulus of each particle. - :type youngs_modulus: np.array or tf.tensor - :param poissons_ratio: batch_size x 1 x num_particles, the poissons ratio of each particle. - :type poissons_ratio: np.array or tf.tensor - :param step_count: The step number this simulation state corresponds to. Can be useful for indexing into actuation sequences of an open-loop controller. - :type step_count: int - :param acceleration: batch_size x dim x num_particles, the acceleration of the particles in the system. - :type acceleration: np.array or tf.tensor - :param grid_mass: batch_size x res x 1, the rasterized mass of each grid cell - :type grid_mas: np.array or tf.tensor - :param grid_velocity: batch_size x res x dim, the rasterized gelocity of each grid cell - :type grid_velocity: np.array or tf.tensor - :param strain: batch_size x dim x dim x num_particles, the green strain matrix for each particle - :type strain: np.array or tf.tensor - :param d_strain_dt: batch_size x dim x dim x num_particles, the finite difference strain per time - :type d_strain_dt: np.array or tf.tensor - :param pressure: batch_size x dim x dim x num_particles, the pressure matrix for each particle (piola stress plus actuation contributions) - :type pressure: np.array or tf.tensor - :param d_pressure_dt: batch_size x dim x dim x num_particles, the finite difference pressure per time - :type d_pressure_dt: np.array or tf.tensor - """ - - def __init__(self, sim : 'Simulation') -> None: - self.sim = sim - self.dim = sim.dim - dim = self.dim - self.grid_shape = (self.sim.batch_size,) + self.sim.grid_res + (1,) - self.affine = tf.zeros(shape=(self.sim.batch_size, dim, dim, sim.num_particles), dtype=tf_precision) - self.acceleration = tf.zeros(shape=(self.sim.batch_size, dim, sim.num_particles), dtype=tf_precision) - self.position = None - self.particle_mass = None - self.particle_volume = None - self.youngs_modulus = None - self.poissons_ratio = None - self.velocity = None - self.deformation_gradient = None - self.controller_states = None - self.grid_mass = None - self.grid_velocity = None - self.step_count = None - self.kernels = None - self.debug = None - self.actuation = None - self.F = None - self.use_cuda = sim.use_cuda - self.use_neohookean = sim.use_neohookean - self.incompressibility_exp = sim.incompressibility_exp - if not cuda_imported: - self.use_cuda = False - if not self.use_cuda: - print("***Warning: NOT using CUDA") - - def center_of_mass(self, left = None, right = None): - return tf.reduce_sum(input_tensor=self.position[:, :, left:right] * self.particle_mass[:, :, left:right], axis=2) *\ - (1 / tf.reduce_sum(input_tensor=self.particle_mass[:, :, left:right], axis=2)) - - def get_state_names(self) -> List[str]: - """ - An ordered list of the returned data of a simulation class:`Memo` at each time step. Here we document what each of these fields are. - - :return: A list of strings of all the field names that are in the memo, in order. - :rtype: list - - """ - return [ - 'position', 'velocity', 'deformation_gradient', 'affine', - 'particle_mass', 'particle_volume', 'youngs_modulus', 'poissons_ratio', 'step_count', 'acceleration', - 'grid_mass', 'grid_velocity', - ] - - def get_state_component_id(self, name : str) -> int: - """gets the index of a field name in the :class:`Memo` - - :param name: The field name - :type name: str - :return: The index of the name in the Memo. - :rtype: int - """ - assert name in self.get_state_names() - return self.get_state_names().index(name) - - def get_evaluated(self): - # # batch, particle, dimension - # assert len(self.position.shape) == 3 - # assert len(self.position.shape) == 3 - # # batch, particle, matrix dimension1, matrix dimension2 - # assert len(self.deformation_gradient.shape) == 4 - # # batch, x, y, dimension - # assert len(self.grid_mass.shape) == 4 - # assert len(self.grid_velocity.shape) == 4 - - ret = { - 'affine': self.affine, - 'position': self.position, - 'velocity': self.velocity, - 'deformation_gradient': self.deformation_gradient, - 'acceleration': self.acceleration, - 'controller_states': self.controller_states, - 'grid_mass': self.grid_mass, - 'grid_velocity': self.grid_velocity, - 'kernels': self.kernels, - 'particle_mass': self.particle_mass, - 'particle_volume': self.particle_volume, - 'youngs_modulus': self.youngs_modulus, - 'poissons_ratio': self.poissons_ratio, - 'step_count': self.step_count, - 'debug': self.debug, - } - ret_filtered = {} - for k, v in ret.items(): - if v is not None: - ret_filtered[k] = v - return ret_filtered - - def to_tuple(self): - evaluated = self.get_evaluated() - return tuple([evaluated[k] for k in self.get_state_names()]) - - def __getitem__(self, item): - return self.get_evaluated()[item] - - def compute_kernels(self, positions): - # (x, y, dim) - grid_node_coord = [[(i, j) for j in range(3)] for i in range(3)] - grid_node_coord = np.array(grid_node_coord, dtype = np_precision)[None, :, :, :, None] - frac = (positions - tf.floor(positions - 0.5))[:, None, None, :, :] - assert frac.shape[3] == self.dim - #print('frac', frac.shape) - #print('grid_node_coord', grid_node_coord.shape) - - # (batch, x, y, dim, p) - (?, x, y, dim, ?) - x = tf.abs(frac - grid_node_coord) - #print('x', x.shape) - - mask = tf.cast(x < 0.5, tf_precision) - y = mask * (0.75 - x * x) + (1 - mask) * (0.5 * (1.5 - x)**2) - #print('y', y.shape) - y = tf.reduce_prod(input_tensor=y, axis=3, keepdims=True) - return y - - -class InitialSimulationState(SimulationState): - """The subclass of :class:`SimulationState` that's used to represent the InitialState - - :param controller: a function mapping a class:`SimulationState` to a control actuation pressure matrix of batch_size x dim x dim x num_particles, applied at each state - :type controller: function - :param F_controller: a function mapping a class:`SimulationState` to a control force vector of batch_size x dim x num_particles, applied at each state - :type F_controller: function - """ - - def __init__(self, sim, controller=None, F_controller = None): - super().__init__(sim) - dim = self.dim - self.t = 0 - num_particles = sim.num_particles - self.position = tf.compat.v1.placeholder( - tf_precision, [self.sim.batch_size, dim, num_particles], name='position') - - self.velocity = tf.compat.v1.placeholder( - tf_precision, [self.sim.batch_size, dim, num_particles], name='velocity') - self.deformation_gradient = tf.compat.v1.placeholder( - tf_precision, [self.sim.batch_size, dim, dim, num_particles], name='dg') - self.particle_mass = tf.compat.v1.placeholder( - tf_precision, [self.sim.batch_size, 1, num_particles], - name='particle_mass') - self.particle_volume = tf.compat.v1.placeholder( - tf_precision, [self.sim.batch_size, 1, num_particles], - name='particle_volume') - self.youngs_modulus = tf.compat.v1.placeholder( - tf_precision, [self.sim.batch_size, 1, num_particles], - name='youngs_modulus') - self.poissons_ratio = tf.compat.v1.placeholder( - tf_precision, [self.sim.batch_size, 1, num_particles], - name='poissons_ratio') - self.grid_mass = tf.zeros(shape=self.grid_shape, dtype=tf_precision) - self.grid_velocity = tf.zeros(shape=(*self.grid_shape[0:-1], dim), dtype=tf_precision) #TODO: this is a weird line - if self.dim == 2: - self.kernels = tf.zeros(shape=(self.sim.batch_size, - kernel_size, kernel_size, 1, num_particles), dtype=tf_precision) - self.step_count = tf.zeros(shape=(), dtype=np.int32) - - self.controller = controller - self.F_controller = F_controller - if controller is not None: - self.actuation, self.debug = controller(self) - self.actuation = matmatmul(self.deformation_gradient, matmatmul(self.actuation, transpose(self.deformation_gradient))) - - -class UpdatedSimulationState(SimulationState): - """The subclass of :class:`SimulationState` that's used to represent the state after the first time step. This class also contains a CPU, pure TF implementation of the ChainQueen simulator. - - :param controller: a function mapping a class:`SimulationState` to a control actuation pressure matrix of batch_size x dim x dim x num_particles, applied at each state - :type controller: function - :param F_controller: a function mapping a class:`SimulationState` to a control force vector of batch_size x dim x num_particles, applied at each state - :type F_controller: function - """ - - def cuda(self, sim, previous_state, controller, F_controller): - """Calls the GPU simulator and handles substepping, and computes any other useful values to be returned in the memo. Chains together steps. -> -> :param sim: The simulator object being used. -> :type sim: :class:`Simulation` -> :param previous_state: The state to be updated -> :type previous_state: :class:`SimulationState` -> :param controller: The pressure controller being used. -> :type controller: function -> :param F_controller: The force controller being used. -> :type F_controller: function -> """ - - - self.position = previous_state.position - self.velocity = previous_state.velocity - self.deformation_gradient = previous_state.deformation_gradient - self.affine = previous_state.affine - self.particle_mass = tf.identity(previous_state.particle_mass) - self.particle_volume = tf.identity(previous_state.particle_volume) - self.youngs_modulus = tf.identity(previous_state.youngs_modulus) - self.acceleration = previous_state.acceleration - self.poissons_ratio = tf.identity(previous_state.poissons_ratio) - self.step_count = previous_state.step_count + 1 - - self.grid_mass = tf.identity(previous_state.grid_mass) - self.grid_velocity = tf.identity(previous_state.grid_velocity) - - #for i in range(self.dim): - # assert self.sim.gravity[i] == 0, "Non-zero gravity not supported" - if controller: - self.controller = controller - self.actuation, self.debug = controller(self) - else: - self.controller = None - self.actuation = np.zeros(shape=(self.sim.batch_size, self.dim, self.dim, self.sim.num_particles)) - - self.t = previous_state.t + self.sim.dt - - num_cells = 1 - for i in range(self.dim): - num_cells *= sim.grid_res[i] - bc_normal = self.sim.bc_normal / (np.linalg.norm(self.sim.bc_normal, axis=self.dim + 1, keepdims=True) + 1e-10) - bc = np.concatenate([bc_normal, self.sim.bc_parameter], axis=self.dim + 1).reshape(1, num_cells, self.dim + 1) - bc = tf.constant(bc, dtype=tf_precision) - - if self.use_neohookean: - neohookean_flag = 1 - else: - neohookean_flag = 0 - - self.position, self.velocity, self.deformation_gradient, self.affine, pressure, grid, grid_star = \ - mpm3d.mpm(position=self.position, velocity=self.velocity, - deformation=self.deformation_gradient, affine=self.affine, dx=sim.dx, - dt=sim.dt/sim.substeps, gravity=sim.gravity, resolution=sim.grid_res, - youngsmodulus=self.youngs_modulus[:, 0], nu=self.poissons_ratio[:, 0], mass=self.particle_mass[:, 0], - V_p=sim.V_p, actuation=self.actuation, grid_bc=bc, - material_model=neohookean_flag, incompressibility_exp=self.incompressibility_exp) - - - grid_reshaped = tf.reshape(grid, shape=(1, *sim.grid_res, self.dim + 1)) - if self.sim.dim == 2: - self.grid_velocity = grid_reshaped[:, :, :, :-1] - self.grid_mass = grid_reshaped[:, :, :, -1:] - else: - assert self.sim.dim == 3 - self.grid_velocity = grid_reshaped[:, :, :, :, :-1] - self.grid_mass = grid_reshaped[:, :, :, :, -1:] - - - if sim.damping != 0: - self.velocity *= np.exp(-sim.damping * sim.dt) - - if F_controller: - self.F = F_controller(self) - self.velocity += self.F * sim.dt - - self.acceleration = (self.velocity - previous_state.velocity) * (1.0 / self.sim.dt) - - - def __init__(self, sim, previous_state, controller=None, F_controller = None): - """Contains an implementation for pure CPU, pure TF simulation""" - super().__init__(sim) - dim = self.dim - if dim == 3 or self.use_cuda: - # print("Running with cuda") - self.cuda(sim, previous_state, controller=controller, F_controller = F_controller) - return - - if F_controller is not None: - raise Exception('F_controller is not defined with out cuda') - - - self.controller = controller - # 2D time integration - self.particle_mass = tf.identity(previous_state.particle_mass) - self.particle_volume = tf.identity(previous_state.particle_volume) - self.youngs_modulus = tf.identity(previous_state.youngs_modulus) - self.poissons_ratio = tf.identity(previous_state.poissons_ratio) - self.step_count = previous_state.step_count + 1 - - self.actuation = previous_state.actuation - - self.t = previous_state.t + self.sim.dt - self.grid_velocity = tf.zeros( - shape=(self.sim.batch_size, self.sim.grid_res[0], self.sim.grid_res[1], - dim), dtype = tf_precision) - - position = previous_state.position - - minimum_positions = np.zeros(shape=previous_state.position.shape, dtype=np_precision) - minimum_positions[:, :, :] = self.sim.dx * 2 - maximum_positions = np.zeros(shape=previous_state.position.shape, dtype=np_precision) - for i in range(dim): - maximum_positions[:, i, :] = (self.sim.grid_res[i] - 2) * self.sim.dx - # Safe guard - position = tf.clip_by_value(position, minimum_positions, maximum_positions) - - # Rasterize mass and velocity - base_indices = tf.cast( - tf.floor(position * sim.inv_dx - 0.5), tf.int32) - base_indices = tf.transpose(a=base_indices, perm=[0, 2, 1]) - batch_size = self.sim.batch_size - num_particles = sim.num_particles - - # Add the batch size indices - base_indices = tf.concat( - [ - tf.zeros(shape=(batch_size, num_particles, 1), dtype=tf.int32), - base_indices, - ], - axis=2) - - # print('base indices', base_indices.shape) - self.grid_mass = tf.zeros(dtype = tf_precision, shape=(batch_size, self.sim.grid_res[0], - self.sim.grid_res[1], 1)) - - # Compute stress tensor (Kirchhoff stress instead of First Piola-Kirchhoff stress) - self.deformation_gradient = previous_state.deformation_gradient - - # Lame parameters - mu = self.youngs_modulus / (2 * (1 + self.poissons_ratio)) - lam = self.youngs_modulus * self.poissons_ratio / (( - 1 + self.poissons_ratio) * (1 - 2 * self.poissons_ratio)) - # (b, 1, p) -> (b, 1, 1, p) - mu = mu[:, :, None, :] - lam = lam[:, :, None, :] - # Corotated elasticity - # P(F) = dPhi/dF(F) = 2 mu (F-R) + lambda (J-1)JF^-T - - r, s = polar_decomposition(self.deformation_gradient) - j = determinant(self.deformation_gradient)[:, None, None, :] - - # Note: stress_tensor here is right-multiplied by F^T - self.stress_tensor1 = 2 * mu * matmatmul( - self.deformation_gradient - r, transpose(self.deformation_gradient)) - - if previous_state.controller: - self.stress_tensor1 += previous_state.actuation - - self.stress_tensor2 = lam * (j - 1) * j * identity_matrix - - self.stress_tensor = self.stress_tensor1 + self.stress_tensor2 - - # Rasterize momentum and velocity - # ... and apply gravity - - self.grid_velocity = tf.zeros(shape=(batch_size, self.sim.grid_res[0], - self.sim.grid_res[1], dim), dtype = tf_precision) - - self.kernels = self.compute_kernels(position * sim.inv_dx) - assert self.kernels.shape == (batch_size, kernel_size, kernel_size, 1, num_particles) - - self.velocity = previous_state.velocity - - # Quadratic B-spline kernel - for i in range(kernel_size): - for j in range(kernel_size): - delta_indices = np.zeros( - shape=(self.sim.batch_size, 1, dim + 1), dtype=np.int32) - - for b in range(batch_size): - delta_indices[b, 0, :] = [b, i, j] - self.grid_mass = self.grid_mass + tf.scatter_nd( - shape=(batch_size, self.sim.grid_res[0], self.sim.grid_res[1], 1), - indices=base_indices + delta_indices, - updates=tf.transpose(a=(self.particle_mass * self.kernels[:, i, j, :, :]), perm=[0, 2, 1])) - - # (b, dim, p) - delta_node_position = np.array([i, j], dtype = np_precision)[None, :, None] - # xi - xp - offset = (tf.floor(position * sim.inv_dx - 0.5) + - tf.cast(delta_node_position, tf_precision) - - position * sim.inv_dx) * sim.dx - - grid_velocity_contributions = self.particle_mass * self.kernels[:, i, j, :] * ( - self.velocity + matvecmul(previous_state.affine, offset)) - grid_force_contributions = self.particle_volume * self.kernels[:, i, j, :] * ( - matvecmul(self.stress_tensor, offset) * - (-4 * self.sim.dt * self.sim.inv_dx * self.sim.inv_dx)) - self.grid_velocity = self.grid_velocity + tf.scatter_nd( - shape=(batch_size, self.sim.grid_res[0], self.sim.grid_res[1], dim), - indices=base_indices + delta_indices, - updates=tf.transpose(a=grid_velocity_contributions + grid_force_contributions, perm=[0, 2, 1])) - assert self.grid_mass.shape == (batch_size, self.sim.grid_res[0], - self.sim.grid_res[1], - 1), 'shape={}'.format(self.grid_mass.shape) - - self.grid_velocity += self.grid_mass * np.array( - self.sim.gravity, dtype = np_precision)[None, None, None, :] * self.sim.dt - self.grid_velocity = self.grid_velocity / tf.maximum(np_precision(1e-30), self.grid_mass) - - sticky_mask = tf.cast(self.sim.bc_parameter == -1, tf_precision) - self.grid_velocity *= (1 - sticky_mask) - - mask = tf.cast( - tf.reduce_sum(input_tensor=self.sim.bc_normal**2, axis=3, keepdims=True) != 0, - tf_precision) - normal_component_length = tf.reduce_sum( - input_tensor=self.grid_velocity * self.sim.bc_normal, axis=3, keepdims=True) - perpendicular_component = self.grid_velocity - self.sim.bc_normal * normal_component_length - perpendicular_component_length = tf.sqrt( - tf.reduce_sum(input_tensor=perpendicular_component**2, axis=3, keepdims=True) + 1e-7) - normalized_perpendicular_component = perpendicular_component / perpendicular_component_length - perpendicular_component_length = tf.maximum(perpendicular_component_length + - tf.minimum(normal_component_length, 0) * self.sim.bc_parameter, 0) - projected_velocity = sim.bc_normal * tf.maximum( - normal_component_length, - 0) + perpendicular_component_length * normalized_perpendicular_component - self.grid_velocity = self.grid_velocity * ( - 1 - mask) + mask * projected_velocity - - # Resample velocity and local affine velocity field - self.velocity *= 0 - for i in range(kernel_size): - for j in range(kernel_size): - delta_indices = np.zeros( - shape=(self.sim.batch_size, 1, dim + 1), dtype=np.int32) - for b in range(batch_size): - delta_indices[b, 0, :] = [b, i, j] - - - #print('indices', (base_indices + delta_indices).shape) - grid_v = tf.transpose(a=tf.gather_nd( - params=self.grid_velocity, - indices=base_indices + delta_indices), perm=[0, 2, 1]) - self.velocity = self.velocity + grid_v * self.kernels[:, i, j, :] - - delta_node_position = np.array([i, j], dtype = np_precision)[None, :, None] - - # xi - xp - offset = (tf.floor(position * sim.inv_dx - 0.5) + - tf.cast(delta_node_position, tf_precision) - - position * sim.inv_dx) * sim.dx - assert offset.shape == position.shape - weighted_node_velocity = grid_v * self.kernels[:, i, j, :] - # weighted_node_velocity = tf.transpose(weighted_node_velocity, perm=[0, 2, 1]) - self.affine += outer_product(weighted_node_velocity, offset) - - self.affine *= 4 * sim.inv_dx * sim.inv_dx - dg_change = identity_matrix + self.sim.dt * self.affine - if not use_apic: - self.affine *= 0 - #print(dg_change.shape) - #print(previous_state.deformation_gradient) - self.deformation_gradient = matmatmul(dg_change, - previous_state.deformation_gradient) - - # Advection - self.position = position + self.velocity * self.sim.dt - assert self.position.shape == previous_state.position.shape - assert self.velocity.shape == previous_state.velocity.shape - self.acceleration = (self.velocity - previous_state.velocity) * (1 / self.sim.dt) - - if sim.damping != 0: - self.velocity *= np.exp(-sim.damping * sim.dt) -