diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index d85314f89..41a168090 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -33,7 +33,7 @@ from meshmode.array_context import PyOpenCLArrayContext from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.dof_desc import DTAG_BOUNDARY +from grudge.dof_desc import BoundaryDomainTag from grudge.shortcuts import make_visualizer from grudge.dof_desc import DISCR_TAG_QUAD from mirgecom.discretization import create_discretization_collection @@ -859,8 +859,8 @@ def get_fluid_state(cv, tseed): if not periodic: if multiple_boundaries: for idir in range(dim): - boundaries[DTAG_BOUNDARY(f"+{idir}")] = wall - boundaries[DTAG_BOUNDARY(f"-{idir}")] = wall + boundaries[BoundaryDomainTag(f"+{idir}")] = wall + boundaries[BoundaryDomainTag(f"-{idir}")] = wall else: boundaries = {BTAG_ALL: wall} diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index fbdb9ff85..75650ff9e 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -31,7 +31,7 @@ from functools import partial from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.dof_desc import DTAG_BOUNDARY +from grudge.dof_desc import BoundaryDomainTag from grudge.shortcuts import make_visualizer @@ -239,22 +239,22 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, eos = IdealSingleGas() gas_model = GasModel(eos=eos, transport=transport_model) - def _boundary_state(discr, btag, gas_model, state_minus, **kwargs): + def _boundary_state(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) boundaries = { - DTAG_BOUNDARY("ic1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_state), - DTAG_BOUNDARY("ic2"): - PrescribedFluidBoundary(boundary_state_func=_boundary_state), - DTAG_BOUNDARY("ic3"): - PrescribedFluidBoundary(boundary_state_func=_boundary_state), - DTAG_BOUNDARY("wall"): AdiabaticNoslipWallBoundary(), - DTAG_BOUNDARY("out"): AdiabaticNoslipWallBoundary(), + BoundaryDomainTag("ic1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_state), + BoundaryDomainTag("ic2"): + PrescribedFluidBoundary(boundary_state_func=_boundary_state), + BoundaryDomainTag("ic3"): + PrescribedFluidBoundary(boundary_state_func=_boundary_state), + BoundaryDomainTag("wall"): AdiabaticNoslipWallBoundary(), + BoundaryDomainTag("out"): AdiabaticNoslipWallBoundary(), } if rst_filename: diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index d8a3277f7..0eeab7c9f 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -30,7 +30,7 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa import grudge.op as op from grudge.shortcuts import make_visualizer -from grudge.dof_desc import DTAG_BOUNDARY +from grudge.dof_desc import BoundaryDomainTag from mirgecom.discretization import create_discretization_collection from mirgecom.integrators import rk4_step from mirgecom.diffusion import ( @@ -126,8 +126,8 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, nodes = actx.thaw(discr.nodes()) boundaries = { - DTAG_BOUNDARY("dirichlet"): DirichletDiffusionBoundary(0.), - DTAG_BOUNDARY("neumann"): NeumannDiffusionBoundary(0.) + BoundaryDomainTag("dirichlet"): DirichletDiffusionBoundary(0.), + BoundaryDomainTag("neumann"): NeumannDiffusionBoundary(0.) } u = discr.zeros(actx) @@ -181,7 +181,7 @@ def rhs(t, u): set_dt(logmgr, dt) logmgr.tick_after() final_answer = actx.to_numpy(op.norm(discr, u, np.inf)) - resid = abs(final_answer - 0.00020620711665201585) + resid = abs(final_answer - 0.0002062062188374177) if resid > 1e-15: raise ValueError(f"Run did not produce the expected result {resid=}") diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index c14681797..bf4874e45 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -32,7 +32,7 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.shortcuts import make_visualizer -from grudge.dof_desc import DTAG_BOUNDARY +from grudge.dof_desc import BoundaryDomainTag from mirgecom.discretization import create_discretization_collection from mirgecom.fluid import make_conserved @@ -223,21 +223,22 @@ def tramp_2d(x_vec, eos, cv=None, **kwargs): exact = initializer(x_vec=nodes, eos=gas_model.eos) - def _boundary_state(discr, btag, gas_model, state_minus, **kwargs): + def _boundary_state(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) - boundaries = {DTAG_BOUNDARY("-1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_state), - DTAG_BOUNDARY("+1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_state), - DTAG_BOUNDARY("-2"): IsothermalWallBoundary( - wall_temperature=bottom_boundary_temperature), - DTAG_BOUNDARY("+2"): IsothermalWallBoundary( - wall_temperature=top_boundary_temperature)} + boundaries = { + BoundaryDomainTag("-1"): PrescribedFluidBoundary( + boundary_state_func=_boundary_state), + BoundaryDomainTag("+1"): PrescribedFluidBoundary( + boundary_state_func=_boundary_state), + BoundaryDomainTag("-2"): IsothermalWallBoundary( + wall_temperature=bottom_boundary_temperature), + BoundaryDomainTag("+2"): IsothermalWallBoundary( + wall_temperature=top_boundary_temperature)} if rst_filename: current_t = restart_data["t"] diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index fcac632b6..0f1ffd2d1 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -181,9 +181,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, from mirgecom.gas_model import GasModel, make_fluid_state gas_model = GasModel(eos=eos) - def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index fc612b245..5eb565285 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -214,9 +214,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, initializer = MixtureInitializer(dim=dim, nspecies=nspecies, massfractions=y0s, velocity=velocity) - def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model, diff --git a/examples/multivolume-mpi.py b/examples/multivolume-mpi.py new file mode 100644 index 000000000..c5020e1ad --- /dev/null +++ b/examples/multivolume-mpi.py @@ -0,0 +1,614 @@ +"""Demonstrate multiple coupled volumes.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import logging +from mirgecom.mpi import mpi_entry_point +import numpy as np +from functools import partial +from pytools.obj_array import make_obj_array +import pyopencl as cl +import pyopencl.tools as cl_tools + +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from meshmode.discretization.connection import FACE_RESTR_ALL # noqa +from grudge.eager import EagerDGDiscretization +from grudge.discretization import make_discretization_collection +from grudge.shortcuts import make_visualizer +from grudge.op import nodal_min, nodal_max + +from grudge.dof_desc import ( + VolumeDomainTag, + DISCR_TAG_BASE, + DISCR_TAG_QUAD, + DOFDesc, +) +from mirgecom.diffusion import ( + NeumannDiffusionBoundary, +) +from mirgecom.simutil import ( + get_sim_timestep, +) +from mirgecom.io import make_init_message + +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +from mirgecom.boundary import ( + IsothermalWallBoundary, +) +from mirgecom.eos import IdealSingleGas +from mirgecom.transport import SimpleTransport +from mirgecom.fluid import make_conserved +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) +from mirgecom.wall_model import WallModel +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_cl_device_info, + logmgr_add_device_memory_usage, + set_sim_state +) + +from mirgecom.multiphysics.thermally_coupled_fluid_wall import ( + # coupled_grad_t_operator, + coupled_ns_heat_operator, +) + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_overintegration=False, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=None, lazy=False): + """Drive the example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + num_ranks = comm.Get_size() + + from mirgecom.simutil import global_reduce as _global_reduce + global_reduce = partial(_global_reduce, comm=comm) + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) + + # timestepping control + current_step = 0 + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step + t_final = 1 + current_cfl = 1.0 + current_dt = 1e-8 + current_t = 0 + constant_cfl = False + + final_time_error = t_final/current_dt - np.around(t_final/current_dt) + assert np.abs(final_time_error) < 1e-10, final_time_error + + # some i/o frequencies + nstatus = 1 + nrestart = 500 + nviz = 25 + nhealth = 1 + + dim = 2 + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + volume_to_local_mesh = restart_data["volume_to_local_mesh"] + global_nelements = restart_data["global_nelements"] + assert restart_data["num_ranks"] == num_ranks + else: # generate the grid from scratch + def get_mesh_data(): + from meshmode.mesh.io import read_gmsh + mesh, tag_to_elements = read_gmsh( + "multivolume.msh", force_ambient_dim=2, + return_tag_to_elements_map=True) + volume_to_tags = { + "Fluid": ["Upper"], + "Wall": ["Lower"]} + return mesh, tag_to_elements, volume_to_tags + + def partition_generator_func(mesh, tag_to_elements, num_parts): + assert num_parts == 2 + rank_per_element = np.empty(mesh.nelements) + rank_per_element[tag_to_elements["Lower"]] = 0 + rank_per_element[tag_to_elements["Upper"]] = 1 + return rank_per_element + # from meshmode.distributed import get_partition_by_pymetis + # return get_partition_by_pymetis(mesh, num_parts) + + from mirgecom.simutil import distribute_mesh + volume_to_local_mesh_data, global_nelements = distribute_mesh( + comm, get_mesh_data, partition_generator_func) + volume_to_local_mesh = { + vol: mesh + for vol, (mesh, _) in volume_to_local_mesh_data.items()} + + local_fluid_mesh = volume_to_local_mesh["Fluid"] + local_wall_mesh = volume_to_local_mesh["Wall"] + + local_nelements = local_fluid_mesh.nelements + local_wall_mesh.nelements + + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + + order = 3 + discr = make_discretization_collection( + actx, + volumes=volume_to_local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + _result_type=EagerDGDiscretization) + + dd_vol_fluid = DOFDesc(VolumeDomainTag("Fluid"), DISCR_TAG_BASE) + dd_vol_wall = DOFDesc(VolumeDomainTag("Wall"), DISCR_TAG_BASE) + + fluid_nodes = actx.thaw(discr.nodes(dd_vol_fluid)) + wall_nodes = actx.thaw(discr.nodes(dd_vol_wall)) + + fluid_ones = 0*fluid_nodes[0] + 1 + wall_ones = 0*wall_nodes[0] + 1 + + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = DISCR_TAG_BASE + + vis_timer = None + + if logmgr: + logmgr_add_cl_device_info(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities( + logmgr, discr, dim, extract_vars_for_logging, units_for_logging, + volume_dd=dd_vol_fluid) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + x_scale = 1 + + gamma = 1.4 + r = 285.71300152552493 + mu = 4.216360056e-05/x_scale + fluid_kappa = 0.05621788139856423*x_scale + eos = IdealSingleGas(gamma=gamma, gas_const=r) + transport = SimpleTransport( + viscosity=mu, + thermal_conductivity=fluid_kappa) + gas_model = GasModel(eos=eos, transport=transport) + +# wall_model = WallModel( +# density=1625/x_scale**3, +# heat_capacity=770.*x_scale**2, +# thermal_conductivity=247.5*x_scale) + + fluid_pressure = 4935.22/x_scale + fluid_temperature = 300 + fluid_density = fluid_pressure/fluid_temperature/r + wall_model = WallModel( + density=fluid_density, + heat_capacity=50*eos.heat_capacity_cp(), + thermal_conductivity=10*fluid_kappa*wall_ones) + + wall_time_scale = 20 + + isothermal_wall_temp = 300 + + def smooth_step(actx, x, epsilon=1e-12): + y = actx.np.minimum(actx.np.maximum(x, 0*x), 0*x+1) + return (1 - actx.np.cos(np.pi*y))/2 + + if rst_filename: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_cv = restart_data["cv"] + current_wall_temperature = restart_data["wall_temperature"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + pressure = 4935.22/x_scale +# temperature = 658.7 * fluid_ones + temperature = isothermal_wall_temp * fluid_ones + sigma = 500/x_scale + offset = 0 + smoothing = ( + fluid_ones + * smooth_step(actx, sigma*(fluid_nodes[1]+offset)) + * smooth_step(actx, sigma*(-(fluid_nodes[1]-0.02*x_scale)+offset)) + * smooth_step(actx, sigma*(fluid_nodes[0]+0.02*x_scale+offset)) + * smooth_step(actx, sigma*(-(fluid_nodes[0]-0.02*x_scale)+offset))) + temperature = ( + isothermal_wall_temp + + (temperature - isothermal_wall_temp) * smoothing) + mass = pressure/temperature/r * fluid_ones + mom = make_obj_array([0*mass]*dim) + energy = (pressure/(gamma - 1.0)) + np.dot(mom, mom)/(2.0*mass) + current_cv = make_conserved( + dim=dim, + mass=mass, + momentum=mom, + energy=energy) + +# pressure = 4935.22/x_scale +# mass = pressure/isothermal_wall_temp/r +# fluid_nodes = actx.thaw(discr.nodes(dd_vol_fluid)) +# vel = np.zeros(shape=(dim,)) +# orig = np.array([0., 0.01*x_scale]) +# from mirgecom.initializers import Lump, AcousticPulse +# initializer = Lump( +# dim=dim, center=orig, velocity=vel, rho0=mass, rhoamp=0.0, +# p0=pressure) +# uniform_state = initializer(fluid_nodes) +# acoustic_pulse = AcousticPulse(dim=dim, amplitude=50.0, width=.002*x_scale, +# center=orig) +# current_cv = acoustic_pulse(x_vec=fluid_nodes, cv=uniform_state, eos=eos) + + current_wall_temperature = isothermal_wall_temp * wall_ones + + current_state = make_obj_array([current_cv, current_wall_temperature]) + + fluid_boundaries = { + dd_vol_fluid.trace("Upper Sides").domain_tag: IsothermalWallBoundary( + wall_temperature=isothermal_wall_temp)} + wall_boundaries = { + dd_vol_wall.trace("Lower Sides").domain_tag: NeumannDiffusionBoundary(0)} + + fluid_visualizer = make_visualizer(discr, volume_dd=dd_vol_fluid) + wall_visualizer = make_visualizer(discr, volume_dd=dd_vol_wall) + + from grudge.dt_utils import characteristic_lengthscales + wall_lengthscales = characteristic_lengthscales(actx, discr, dd=dd_vol_wall) + + initname = "multivolume" + eosname = eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=initname, + eosname=eosname, casename=casename) + if rank == 0: + logger.info(init_message) + + def my_get_timestep(step, t, state): + fluid_state = make_fluid_state(state[0], gas_model) + fluid_dt = get_sim_timestep( + discr, fluid_state, t, current_dt, current_cfl, t_final, + constant_cfl, fluid_volume_dd=dd_vol_fluid) + if constant_cfl: + wall_alpha = wall_time_scale * wall_model.thermal_diffusivity() + wall_dt = actx.to_numpy( + nodal_min( + discr, dd_vol_wall, + wall_lengthscales**2 * current_cfl/wall_alpha))[()] + else: + wall_dt = current_dt + return min(fluid_dt, wall_dt) + + def my_write_status(step, t, dt, fluid_state, wall_temperature): + dv = fluid_state.dv + p_min = actx.to_numpy(nodal_min(discr, dd_vol_fluid, dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, dd_vol_fluid, dv.pressure)) + fluid_t_min = actx.to_numpy(nodal_min(discr, dd_vol_fluid, dv.temperature)) + fluid_t_max = actx.to_numpy(nodal_max(discr, dd_vol_fluid, dv.temperature)) + wall_t_min = actx.to_numpy(nodal_min(discr, dd_vol_wall, wall_temperature)) + wall_t_max = actx.to_numpy(nodal_max(discr, dd_vol_wall, wall_temperature)) + if constant_cfl: + fluid_cfl = current_cfl + wall_cfl = current_cfl + else: + from mirgecom.viscous import get_viscous_cfl + fluid_cfl = actx.to_numpy( + nodal_max( + discr, dd_vol_fluid, get_viscous_cfl( + discr, dt, fluid_state, volume_dd=dd_vol_fluid))) + wall_alpha = wall_time_scale * wall_model.thermal_diffusivity() + wall_cfl = actx.to_numpy( + nodal_max( + discr, dd_vol_wall, + wall_alpha * dt/wall_lengthscales**2)) + if rank == 0: + logger.info(f"Step: {step}, T: {t}, DT: {dt}\n" + f"----- Fluid CFL: {fluid_cfl}, Wall CFL: {wall_cfl}\n" + f"----- Fluid Pressure({p_min}, {p_max})\n" + f"----- Fluid Temperature({fluid_t_min}, {fluid_t_max})\n" + f"----- Wall Temperature({wall_t_min}, {wall_t_max})\n") + + # def _grad_t_operator(t, fluid_state, wall_temperature): + # fluid_grad_t, wall_grad_t = coupled_grad_t_operator( + # discr, + # gas_model, wall_model, + # dd_vol_fluid, dd_vol_wall, + # fluid_boundaries, wall_boundaries, + # fluid_state, wall_temperature, + # time=t, + # quadrature_tag=quadrature_tag) + # return make_obj_array([fluid_grad_t, wall_grad_t]) + + # grad_t_operator = actx.compile(_grad_t_operator) + + def my_write_viz(step, t, state, dv=None, rhs=None): + cv = state[0] + wall_temperature = state[1] + if dv is None: + fluid_state = make_fluid_state(state[0], gas_model) + dv = fluid_state.dv + # if rhs is None: + # rhs = my_rhs(t, state) + + # grad_temperature = grad_t_operator(t, fluid_state, wall_temperature) + # fluid_grad_temperature = grad_temperature[0] + # wall_grad_temperature = grad_temperature[1] + + fluid_viz_fields = [ + ("cv", cv), + ("dv", dv), + # ("grad_t", fluid_grad_temperature), + # ("rhs", rhs[0]), + # ("kappa", fluid_state.thermal_conductivity), + ] + wall_viz_fields = [ + ("temperature", wall_temperature), + # ("grad_t", wall_grad_temperature), + # ("rhs", rhs[1]), + # ("kappa", wall_model.thermal_conductivity), + ] + from mirgecom.simutil import write_visfile + write_visfile( + discr, fluid_viz_fields, fluid_visualizer, vizname=casename+"-fluid", + step=step, t=t, overwrite=True, vis_timer=vis_timer) + write_visfile( + discr, wall_viz_fields, wall_visualizer, vizname=casename+"-wall", + step=step, t=t, overwrite=True, vis_timer=vis_timer) + + def my_write_restart(step, t, state): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "volume_to_local_mesh": volume_to_local_mesh, + "cv": state[0], + "wall_temperature": state[1], + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_ranks": num_ranks + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(pressure): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, dd_vol_fluid, pressure): + health_error = True + logger.info(f"{rank=}: NANs/Infs in pressure data.") + + # default health status bounds + health_pres_min = 1.0e-1/x_scale + health_pres_max = 2.0e6/x_scale + + if global_reduce(check_range_local(discr, dd_vol_fluid, pressure, + health_pres_min, health_pres_max), + op="lor"): + health_error = True + p_min = actx.to_numpy(nodal_min(discr, dd_vol_fluid, pressure)) + p_max = actx.to_numpy(nodal_max(discr, dd_vol_fluid, pressure)) + logger.info(f"Pressure range violation ({p_min=}, {p_max=})") + return health_error + + def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state[0], gas_model) + wall_temperature = state[1] + dv = fluid_state.dv + + try: + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_status = check_step(step=step, interval=nstatus) + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + + if do_status: + my_write_status( + step=step, t=t, dt=dt, fluid_state=fluid_state, + wall_temperature=wall_temperature) + + if do_health: + health_errors = global_reduce(my_health_check(dv.pressure), op="lor") + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + my_write_viz(step=step, t=t, state=state, dv=dv) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise + + dt = my_get_timestep(step=step, t=t, state=state) + + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state[0], eos) + logmgr.tick_after() + return state, dt + + fluid_nodes = actx.thaw(discr.nodes(dd_vol_fluid)) + + def my_rhs(t, state): + fluid_state = make_fluid_state(cv=state[0], gas_model=gas_model) + wall_temperature = state[1] + fluid_rhs, wall_rhs = coupled_ns_heat_operator( + discr, + gas_model, wall_model, + dd_vol_fluid, dd_vol_wall, + fluid_boundaries, wall_boundaries, + fluid_state, wall_temperature, + time=t, wall_time_scale=wall_time_scale, quadrature_tag=quadrature_tag) + from dataclasses import replace + fluid_rhs = replace( + fluid_rhs, + energy=fluid_rhs.energy + ( + 1e9 + * actx.np.exp( + -(fluid_nodes[0]**2+(fluid_nodes[1]-0.005)**2)/0.004**2) + * actx.np.exp(-t/5e-6))) + return make_obj_array([fluid_rhs, wall_rhs]) + + current_dt = my_get_timestep(step=current_step, t=current_t, state=current_state) + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, dt=current_dt, + istep=current_step, state=current_state, t=current_t, + t_final=t_final) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + my_write_viz(step=current_step, t=current_t, state=current_state) + my_write_restart(step=current_step, t=current_t, state=current_state) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + finish_tol = 1e-16 + assert np.abs(current_t - t_final) < finish_tol + + +if __name__ == "__main__": + import argparse + casename = "multivolume" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=args.lazy, distributed=True) + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_overintegration=args.overintegration, + use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + lazy=args.lazy) + +# vim: foldmethod=marker diff --git a/examples/multivolume.geo b/examples/multivolume.geo new file mode 100644 index 000000000..70f1ae9b1 --- /dev/null +++ b/examples/multivolume.geo @@ -0,0 +1,58 @@ +Point(1) = {-20,-20,0.0}; +Point(2) = {20,-20,0.0}; +Point(3) = {20,0.0,0.0}; +Point(4) = {-20,0.0,0.0}; +Point(5) = {20,20,0.0}; +Point(6) = {-20,20,0.0}; + +Line(1) = {1,2}; +Line(2) = {2,3}; +Line(3) = {3,4}; +Line(4) = {4,1}; +Line(5) = {3,5}; +Line(6) = {5,6}; +Line(7) = {6,4}; + +Line Loop(1) = {1,2,3,4}; +Line Loop(2) = {-3,5,6,7}; + +// Not sure why these need to be flipped +Plane Surface(1) = {-1}; +Plane Surface(2) = {-2}; + +Physical Surface("Lower") = {1}; +Physical Surface("Upper") = {2}; + +Physical Curve("Lower Sides") = {1,2,4}; +Physical Curve("Upper Sides") = {5,6,7}; +Physical Curve("Interface") = {3}; + +Mesh.MshFileVersion = 2.2; + +Mesh.MeshSizeExtendFromBoundary = 0; +Mesh.MeshSizeFromPoints = 0; +Mesh.MeshSizeFromCurvature = 0; + +Mesh.ScalingFactor = 0.001; + +mesh_scale = 16.; + +min_size = 2/mesh_scale; +max_size = 2; + +Mesh.CharacteristicLengthMin = min_size; +Mesh.CharacteristicLengthMax = max_size; + +Field[1] = Distance; +Field[1].CurvesList = {3}; +Field[1].NumPointsPerCurve = 100000; + +Field[2] = Threshold; +Field[2].InField = 1; +Field[2].SizeMin = min_size; +Field[2].SizeMax = max_size; +Field[2].DistMin = 0.25; +Field[2].DistMax = 5; +Field[2].StopAtDistMax = 1; + +Background Field = 2; diff --git a/examples/multivolume.msh b/examples/multivolume.msh new file mode 100644 index 000000000..9a635e305 --- /dev/null +++ b/examples/multivolume.msh @@ -0,0 +1,12917 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$PhysicalNames +5 +1 3 "Lower Sides" +1 4 "Upper Sides" +1 5 "Interface" +2 1 "Lower" +2 2 "Upper" +$EndPhysicalNames +$Nodes +4194 +1 -0.02 -0.02 0 +2 0.02 -0.02 0 +3 0.02 0 0 +4 -0.02 0 0 +5 0.02 0.02 0 +6 -0.02 0.02 0 +7 -0.01799999999999754 -0.02 0 +8 -0.01599999999999507 -0.02 0 +9 -0.01399999999999704 -0.02 0 +10 -0.01200000000000345 -0.02 0 +11 -0.01000000000000986 -0.02 0 +12 -0.008000000000016279 -0.02 0 +13 -0.006000000000022689 -0.02 0 +14 -0.004000000000028962 -0.02 0 +15 -0.00200000000002705 -0.02 0 +16 -2.458122594362067e-14 -0.02 0 +17 0.001999999999977888 -0.02 0 +18 0.003999999999980347 -0.02 0 +19 0.005999999999982819 -0.02 0 +20 0.007999999999985285 -0.02 0 +21 0.00999999999998775 -0.02 0 +22 0.01199999999999022 -0.02 0 +23 0.01399999999999266 -0.02 0 +24 0.0159999999999951 -0.02 0 +25 0.01799999999999756 -0.02 0 +26 0.02 -0.01808370535802472 0 +27 0.02 -0.01616741071604945 0 +28 0.02 -0.01425111607407418 0 +29 0.02 -0.0123348214320989 0 +30 0.02 -0.01041852679012362 0 +31 0.02 -0.008502232148148348 0 +32 0.02 -0.006585937506173071 0 +33 0.02 -0.004761934017604826 0 +34 0.02 -0.003400228344813296 0 +35 0.02 -0.002418660330820888 0 +36 0.02 -0.001711109844527101 0 +37 0.02 -0.001201081171538817 0 +38 0.02 -0.0008334336930447641 0 +39 0.02 -0.000568419714995681 0 +40 0.02 -0.0003773878554869086 0 +41 0.02 -0.0002395368302469088 0 +42 0.02 -0.0001197684151234562 0 +43 0.01987499999999985 0 0 +44 0.01974999999999969 0 0 +45 0.01962499999999954 0 0 +46 0.01949999999999938 0 0 +47 0.01937499999999923 0 0 +48 0.01924999999999908 0 0 +49 0.01912499999999892 0 0 +50 0.01899999999999877 0 0 +51 0.01887499999999861 0 0 +52 0.01874999999999846 0 0 +53 0.01862499999999831 0 0 +54 0.01849999999999815 0 0 +55 0.018374999999998 0 0 +56 0.01824999999999784 0 0 +57 0.01812499999999769 0 0 +58 0.01799999999999754 0 0 +59 0.01787499999999738 0 0 +60 0.01774999999999723 0 0 +61 0.01762499999999707 0 0 +62 0.01749999999999692 0 0 +63 0.01737499999999676 0 0 +64 0.01724999999999661 0 0 +65 0.01712499999999646 0 0 +66 0.0169999999999963 0 0 +67 0.01687499999999615 0 0 +68 0.01674999999999599 0 0 +69 0.01662499999999584 0 0 +70 0.01649999999999568 0 0 +71 0.01637499999999553 0 0 +72 0.01624999999999538 0 0 +73 0.01612499999999522 0 0 +74 0.01599999999999507 0 0 +75 0.01587499999999491 0 0 +76 0.01574999999999476 0 0 +77 0.0156249999999946 0 0 +78 0.01549999999999445 0 0 +79 0.01537499999999429 0 0 +80 0.01524999999999421 0 0 +81 0.0151249999999942 0 0 +82 0.01499999999999418 0 0 +83 0.01487499999999444 0 0 +84 0.0147499999999947 0 0 +85 0.01462499999999504 0 0 +86 0.01449999999999544 0 0 +87 0.01437499999999584 0 0 +88 0.01424999999999624 0 0 +89 0.01412499999999664 0 0 +90 0.01399999999999704 0 0 +91 0.01387499999999744 0 0 +92 0.01374999999999784 0 0 +93 0.01362499999999824 0 0 +94 0.01349999999999864 0 0 +95 0.01337499999999904 0 0 +96 0.01324999999999945 0 0 +97 0.01312499999999985 0 0 +98 0.01300000000000025 0 0 +99 0.01287500000000065 0 0 +100 0.01275000000000105 0 0 +101 0.01262500000000145 0 0 +102 0.01250000000000185 0 0 +103 0.01237500000000225 0 0 +104 0.01225000000000265 0 0 +105 0.01212500000000305 0 0 +106 0.01200000000000345 0 0 +107 0.01187500000000385 0 0 +108 0.01175000000000426 0 0 +109 0.01162500000000465 0 0 +110 0.01150000000000506 0 0 +111 0.01137500000000546 0 0 +112 0.01125000000000586 0 0 +113 0.01112500000000626 0 0 +114 0.01100000000000666 0 0 +115 0.01087500000000706 0 0 +116 0.01075000000000746 0 0 +117 0.01062500000000786 0 0 +118 0.01050000000000826 0 0 +119 0.01037500000000866 0 0 +120 0.01025000000000906 0 0 +121 0.01012500000000946 0 0 +122 0.01000000000000986 0 0 +123 0.009875000000010266 0 0 +124 0.009750000000010665 0 0 +125 0.009625000000011069 0 0 +126 0.009500000000011468 0 0 +127 0.009375000000011869 0 0 +128 0.009250000000012268 0 0 +129 0.009125000000012672 0 0 +130 0.00900000000001307 0 0 +131 0.008875000000013473 0 0 +132 0.008750000000013872 0 0 +133 0.008625000000014272 0 0 +134 0.008500000000014673 0 0 +135 0.008375000000015074 0 0 +136 0.008250000000015474 0 0 +137 0.008125000000015876 0 0 +138 0.008000000000016279 0 0 +139 0.007875000000016678 0 0 +140 0.007750000000017078 0 0 +141 0.00762500000001748 0 0 +142 0.00750000000001788 0 0 +143 0.007375000000018283 0 0 +144 0.007250000000018682 0 0 +145 0.007125000000019081 0 0 +146 0.007000000000019481 0 0 +147 0.006875000000019881 0 0 +148 0.006750000000020284 0 0 +149 0.006625000000020684 0 0 +150 0.006500000000021087 0 0 +151 0.006375000000021487 0 0 +152 0.006250000000021886 0 0 +153 0.00612500000002229 0 0 +154 0.006000000000022689 0 0 +155 0.005875000000023089 0 0 +156 0.005750000000023491 0 0 +157 0.00562500000002389 0 0 +158 0.005500000000024292 0 0 +159 0.005375000000024692 0 0 +160 0.005250000000025093 0 0 +161 0.005125000000025493 0 0 +162 0.005000000000025896 0 0 +163 0.004875000000026298 0 0 +164 0.004750000000026697 0 0 +165 0.004625000000027097 0 0 +166 0.004500000000027498 0 0 +167 0.004375000000027897 0 0 +168 0.004250000000028301 0 0 +169 0.0041250000000287 0 0 +170 0.004000000000028962 0 0 +171 0.003875000000029086 0 0 +172 0.003750000000029207 0 0 +173 0.003625000000029054 0 0 +174 0.003500000000028898 0 0 +175 0.003375000000028745 0 0 +176 0.003250000000028592 0 0 +177 0.003125000000028436 0 0 +178 0.003000000000028283 0 0 +179 0.002875000000028127 0 0 +180 0.002750000000027974 0 0 +181 0.002625000000027821 0 0 +182 0.002500000000027665 0 0 +183 0.002375000000027512 0 0 +184 0.002250000000027356 0 0 +185 0.002125000000027203 0 0 +186 0.00200000000002705 0 0 +187 0.001875000000026894 0 0 +188 0.001750000000026741 0 0 +189 0.001625000000026585 0 0 +190 0.001500000000026432 0 0 +191 0.001375000000026279 0 0 +192 0.001250000000026123 0 0 +193 0.00112500000002597 0 0 +194 0.001000000000025814 0 0 +195 0.0008750000000256612 0 0 +196 0.0007500000000255085 0 0 +197 0.0006250000000253521 0 0 +198 0.0005000000000251994 0 0 +199 0.0003750000000250431 0 0 +200 0.0002500000000248903 0 0 +201 0.0001250000000247375 0 0 +202 2.458122594362067e-14 0 0 +203 -0.0001249999999755715 0 0 +204 -0.0002499999999757279 0 0 +205 -0.0003749999999758842 0 0 +206 -0.0004999999999760334 0 0 +207 -0.0006249999999761897 0 0 +208 -0.0007499999999763389 0 0 +209 -0.0008749999999764989 0 0 +210 -0.0009999999999766515 0 0 +211 -0.001124999999976804 0 0 +212 -0.001249999999976961 0 0 +213 -0.001374999999977113 0 0 +214 -0.00149999999997727 0 0 +215 -0.001624999999977422 0 0 +216 -0.001749999999977575 0 0 +217 -0.001874999999977732 0 0 +218 -0.001999999999977888 0 0 +219 -0.002124999999978037 0 0 +220 -0.002249999999978193 0 0 +221 -0.002374999999978343 0 0 +222 -0.002499999999978502 0 0 +223 -0.002624999999978655 0 0 +224 -0.002749999999978811 0 0 +225 -0.002874999999978964 0 0 +226 -0.002999999999979117 0 0 +227 -0.003124999999979274 0 0 +228 -0.003249999999979426 0 0 +229 -0.003374999999979586 0 0 +230 -0.003499999999979735 0 0 +231 -0.003624999999979892 0 0 +232 -0.003749999999980041 0 0 +233 -0.003874999999980197 0 0 +234 -0.003999999999980347 0 0 +235 -0.004124999999980506 0 0 +236 -0.004249999999980659 0 0 +237 -0.004374999999980815 0 0 +238 -0.004499999999980968 0 0 +239 -0.004624999999981121 0 0 +240 -0.004749999999981277 0 0 +241 -0.00487499999998143 0 0 +242 -0.00499999999998159 0 0 +243 -0.005124999999981739 0 0 +244 -0.005249999999981896 0 0 +245 -0.005374999999982044 0 0 +246 -0.005499999999982201 0 0 +247 -0.005624999999982358 0 0 +248 -0.00574999999998251 0 0 +249 -0.005874999999982663 0 0 +250 -0.005999999999982819 0 0 +251 -0.006124999999982972 0 0 +252 -0.006249999999983128 0 0 +253 -0.006374999999983281 0 0 +254 -0.006499999999983434 0 0 +255 -0.006624999999983594 0 0 +256 -0.006749999999983743 0 0 +257 -0.006874999999983899 0 0 +258 -0.006999999999984048 0 0 +259 -0.007124999999984205 0 0 +260 -0.007249999999984361 0 0 +261 -0.007374999999984514 0 0 +262 -0.00749999999998467 0 0 +263 -0.007624999999984823 0 0 +264 -0.007749999999984976 0 0 +265 -0.007874999999985132 0 0 +266 -0.007999999999985285 0 0 +267 -0.008124999999985441 0 0 +268 -0.008249999999985597 0 0 +269 -0.008374999999985746 0 0 +270 -0.008499999999985903 0 0 +271 -0.008624999999986052 0 0 +272 -0.008749999999986212 0 0 +273 -0.008874999999986364 0 0 +274 -0.008999999999986517 0 0 +275 -0.009124999999986673 0 0 +276 -0.009249999999986826 0 0 +277 -0.009374999999986982 0 0 +278 -0.009499999999987135 0 0 +279 -0.009624999999987288 0 0 +280 -0.009749999999987444 0 0 +281 -0.009874999999987602 0 0 +282 -0.00999999999998775 0 0 +283 -0.01012499999998791 0 0 +284 -0.01024999999998806 0 0 +285 -0.01037499999998822 0 0 +286 -0.01049999999998837 0 0 +287 -0.01062499999998853 0 0 +288 -0.01074999999998868 0 0 +289 -0.01087499999998883 0 0 +290 -0.01099999999998899 0 0 +291 -0.01112499999998914 0 0 +292 -0.0112499999999893 0 0 +293 -0.01137499999998945 0 0 +294 -0.01149999999998961 0 0 +295 -0.01162499999998975 0 0 +296 -0.01174999999998991 0 0 +297 -0.01187499999999007 0 0 +298 -0.01199999999999022 0 0 +299 -0.01212499999999038 0 0 +300 -0.01224999999999052 0 0 +301 -0.01237499999999068 0 0 +302 -0.01249999999999083 0 0 +303 -0.01262499999999098 0 0 +304 -0.01274999999999113 0 0 +305 -0.01287499999999129 0 0 +306 -0.01299999999999145 0 0 +307 -0.01312499999999159 0 0 +308 -0.01324999999999175 0 0 +309 -0.0133749999999919 0 0 +310 -0.01349999999999205 0 0 +311 -0.01362499999999221 0 0 +312 -0.01374999999999236 0 0 +313 -0.01387499999999251 0 0 +314 -0.01399999999999266 0 0 +315 -0.01412499999999282 0 0 +316 -0.01424999999999297 0 0 +317 -0.01437499999999312 0 0 +318 -0.01449999999999328 0 0 +319 -0.01462499999999343 0 0 +320 -0.01474999999999358 0 0 +321 -0.01487499999999373 0 0 +322 -0.01499999999999389 0 0 +323 -0.01512499999999404 0 0 +324 -0.01524999999999419 0 0 +325 -0.01537499999999434 0 0 +326 -0.0154999999999945 0 0 +327 -0.01562499999999465 0 0 +328 -0.01574999999999481 0 0 +329 -0.01587499999999496 0 0 +330 -0.0159999999999951 0 0 +331 -0.01612499999999527 0 0 +332 -0.01624999999999542 0 0 +333 -0.01637499999999557 0 0 +334 -0.01649999999999572 0 0 +335 -0.01662499999999588 0 0 +336 -0.01674999999999603 0 0 +337 -0.01687499999999618 0 0 +338 -0.01699999999999633 0 0 +339 -0.01712499999999649 0 0 +340 -0.01724999999999663 0 0 +341 -0.01737499999999679 0 0 +342 -0.01749999999999695 0 0 +343 -0.01762499999999709 0 0 +344 -0.01774999999999724 0 0 +345 -0.0178749999999974 0 0 +346 -0.01799999999999756 0 0 +347 -0.01812499999999771 0 0 +348 -0.01824999999999786 0 0 +349 -0.01837499999999801 0 0 +350 -0.01849999999999816 0 0 +351 -0.01862499999999832 0 0 +352 -0.01874999999999847 0 0 +353 -0.01887499999999862 0 0 +354 -0.01899999999999877 0 0 +355 -0.01912499999999893 0 0 +356 -0.01924999999999908 0 0 +357 -0.01937499999999923 0 0 +358 -0.01949999999999939 0 0 +359 -0.01962499999999955 0 0 +360 -0.01974999999999969 0 0 +361 -0.01987499999999984 0 0 +362 -0.02 -0.0001197684151233125 0 +363 -0.02 -0.0002395368302466336 0 +364 -0.02 -0.000377387855486409 0 +365 -0.02 -0.0005684197149949344 0 +366 -0.02 -0.0008334336930436676 0 +367 -0.02 -0.001201081171537449 0 +368 -0.02 -0.001711109844525655 0 +369 -0.02 -0.002418660330819614 0 +370 -0.02 -0.003400228344810579 0 +371 -0.02 -0.004761934017600353 0 +372 -0.02 -0.006585937506164669 0 +373 -0.02 -0.008502232148135591 0 +374 -0.02 -0.01041852679011299 0 +375 -0.02 -0.0123348214320904 0 +376 -0.02 -0.01425111607406779 0 +377 -0.02 -0.0161674107160452 0 +378 -0.02 -0.0180837053580226 0 +379 0.02 0.0001197684151233125 0 +380 0.02 0.0002395368302466336 0 +381 0.02 0.000377387855486409 0 +382 0.02 0.0005684197149949344 0 +383 0.02 0.0008334336930436676 0 +384 0.02 0.001201081171537449 0 +385 0.02 0.001711109844525655 0 +386 0.02 0.002418660330819614 0 +387 0.02 0.003400228344810579 0 +388 0.02 0.004761934017600353 0 +389 0.02 0.006585937506164669 0 +390 0.02 0.008502232148135591 0 +391 0.02 0.01041852679011299 0 +392 0.02 0.0123348214320904 0 +393 0.02 0.01425111607406779 0 +394 0.02 0.0161674107160452 0 +395 0.02 0.0180837053580226 0 +396 0.01799999999999754 0.02 0 +397 0.01599999999999507 0.02 0 +398 0.01399999999999704 0.02 0 +399 0.01200000000000345 0.02 0 +400 0.01000000000000986 0.02 0 +401 0.008000000000016279 0.02 0 +402 0.006000000000022689 0.02 0 +403 0.004000000000028962 0.02 0 +404 0.00200000000002705 0.02 0 +405 2.458122594362067e-14 0.02 0 +406 -0.001999999999977888 0.02 0 +407 -0.003999999999980347 0.02 0 +408 -0.005999999999982819 0.02 0 +409 -0.007999999999985285 0.02 0 +410 -0.00999999999998775 0.02 0 +411 -0.01199999999999022 0.02 0 +412 -0.01399999999999266 0.02 0 +413 -0.0159999999999951 0.02 0 +414 -0.01799999999999756 0.02 0 +415 -0.02 0.01808370535802472 0 +416 -0.02 0.01616741071604945 0 +417 -0.02 0.01425111607407418 0 +418 -0.02 0.0123348214320989 0 +419 -0.02 0.01041852679012362 0 +420 -0.02 0.008502232148148348 0 +421 -0.02 0.006585937506173071 0 +422 -0.02 0.004761934017604826 0 +423 -0.02 0.003400228344813296 0 +424 -0.02 0.002418660330820888 0 +425 -0.02 0.001711109844527101 0 +426 -0.02 0.001201081171538817 0 +427 -0.02 0.0008334336930447641 0 +428 -0.02 0.000568419714995681 0 +429 -0.02 0.0003773878554869086 0 +430 -0.02 0.0002395368302469088 0 +431 -0.02 0.0001197684151234562 0 +432 -0.01006249999998779 -0.000108253175473154 0 +433 -0.008687499999986076 -0.0001082531754731962 0 +434 -0.007312499999984451 -0.0001082531754731386 0 +435 -0.005937499999982694 -0.0001079826925462976 0 +436 -0.004562499999981121 -0.0001082531754731733 0 +437 -0.003187499999979514 -0.0001082531754736429 0 +438 -0.001812499999977694 -0.000108253175473159 0 +439 -0.0004431315537326225 -0.0001109723717163651 0 +440 0.0009375000000257776 -0.0001082531754731573 0 +441 0.002309604352677706 -0.0001050319329705897 0 +442 0.003687500000029133 -0.000108253175473057 0 +443 0.005062500000025694 -0.0001082531754727056 0 +444 0.006437500000021279 -0.0001082531754726822 0 +445 0.007812993474658234 -9.425338949475322e-05 0 +446 0.009187500000012476 -0.0001082531754727747 0 +447 0.01056250000000807 -0.0001070754388449021 0 +448 -0.01131249999998926 -0.00010825317547323 0 +449 -0.01256235266502263 -0.0001083382393566889 0 +450 0.01181527717297961 -0.0001066497739077196 0 +451 -0.01368749999999225 -0.0001060862163412216 0 +452 0.01293750000000044 -0.0001082531754727547 0 +453 0.01406249999999684 -0.0001078161924501033 0 +454 -0.01468764733485407 -0.0001083382392945356 0 +455 0.01506598189948128 -0.0001081876592223096 0 +456 0.01592484513409053 -0.0001245949967919783 0 +457 -0.01556027116095755 -0.0001010176035518544 0 +458 -0.01631249999999553 -0.0001082531754732862 0 +459 -0.01706249999999635 -0.0001082531754731974 0 +460 0.01668735266507209 -0.0001083382393311337 0 +461 0.003062500000028398 -0.0001082531754731563 0 +462 -0.0106881898592197 -9.559096331249162e-05 0 +463 0.0001876473349921121 -0.0001083382393564415 0 +464 -0.003937499999980461 -0.000108253175473566 0 +465 -0.005189058159784208 -0.0001003876158145213 0 +466 -0.001062499999976621 -0.0001082531754732038 0 +467 -0.009312499999986927 -0.0001082531754732156 0 +468 -0.006563713034404833 -0.0001061885009377193 0 +469 -0.01193749999999022 -0.0001082531754731989 0 +470 -0.01768732545115627 -0.0001037171011680916 0 +471 0.001562500000026431 -0.0001082531754731743 0 +472 -0.002562352664963496 -0.0001083382393841204 0 +473 -0.007938713034618065 -0.000106188500603982 0 +474 0.01731249999999677 -0.0001082531754732191 0 +475 0.01793735266505762 -0.0001083382393403809 0 +476 0.008562500000014402 -0.0001082531754727986 0 +477 0.00444153303285958 -0.0001105816480638924 0 +478 0.009809820475761837 -0.0001067061514264517 0 +479 0.005687500000023628 -0.0001082531754727997 0 +480 0.01119471949996692 -0.0001017066036498553 0 +481 0.00706250000001928 -0.0001082531754727087 0 +482 -0.01818749999999783 -0.0001072614153528886 0 +483 -0.01306249999999153 -0.0001082531754731841 0 +484 -0.01419387865170725 -0.0001129146592948099 0 +485 -0.01868749999999843 -0.0001082531754732257 0 +486 0.018437499999998 -0.0001082531754731374 0 +487 0.01456579330693663 -0.0001124203209010042 0 +488 0.01243475892431001 -0.0001320892717456528 0 +489 0.01344233039295728 -0.0001025477339305978 0 +490 -0.009059838571588453 -0.01813866471019649 0 +491 -0.003092984922138297 -0.01829683243637435 0 +492 0.009192841182656297 -0.01817002700442804 0 +493 0.002933445058615816 -0.01824683063671731 0 +494 0.01849663237643605 -0.007665604527223082 0 +495 -0.01813383257128052 -0.007565717436298408 0 +496 0.01543656505815741 -9.976794667323059e-05 0 +497 -0.0150637130342339 -0.0001061885012481464 0 +498 0.01881249999999857 -0.0001082531754731703 0 +499 0.0191874999999989 -0.0001082531754732463 0 +500 -0.01593886061612116 -0.0001136352905037602 0 +501 -0.006939766676192546 -0.0001059381109397151 0 +502 -0.01668749999999588 -0.0001082531754731978 0 +503 -0.003562499999979995 -0.0001082531754737472 0 +504 -0.008312499999985623 -0.0001082531754731668 0 +505 -0.002186286965003886 -0.0001061885000068242 0 +506 -0.01906249999999879 -0.0001082531754731716 0 +507 0.002685568817019657 -0.0001093681445029036 0 +508 0.0005637130347857569 -0.0001061885003662869 0 +509 0.01631237026185181 -9.796664735130973e-05 0 +510 0.001937500000026966 -0.000107987283823405 0 +511 -0.009687499999987312 -0.0001082531754731682 0 +512 -0.005562499999982224 -0.0001082531754731721 0 +513 -0.001437499999977266 -0.0001082531754732531 0 +514 0.006062500000022422 -0.0001082531754727927 0 +515 0.01018853438229103 -0.000106396775433542 0 +516 0.008191332819665486 -0.0001060402960162048 0 +517 0.007437454857272758 -0.0001082271122964663 0 +518 0.004062500000028812 -0.0001082531754728344 0 +519 -0.01885892676421475 -0.003682344298804624 0 +520 0.01895740397360211 -0.004143173525049272 0 +521 0.01947022133539924 -0.001994836963184051 0 +522 -0.01947277275847158 -0.002064885087672635 0 +523 -0.01943749999999932 -0.0001082531754731871 0 +524 0.0196967554863426 -0.0009808323040679341 0 +525 -0.01971908559564585 -0.0009991069774811148 0 +526 0.01838173637052775 -0.01348310085552934 0 +527 -0.01875064979402114 -0.01327057088587709 0 +528 0.01955773857363223 -0.0001062210332017543 0 +529 -0.01986907953030528 -0.0004606915177865205 0 +530 -0.0179457158985929 -0.0001036286766198632 0 +531 0.01756128696536134 -0.0001061885005761378 0 +532 -0.01442130259744211 -0.0001184514513721892 0 +533 -0.01531249999999418 -0.0001082531754731849 0 +534 0.01693749999999632 -0.0001055000855558293 0 +535 0.01568726430776235 -0.0001126406975935476 0 +536 0.01293678700975239 -0.01824685774374334 0 +537 -0.0173124999999967 -0.0001077151246691849 0 +538 0.01818749999999786 -0.0001082531754731594 0 +539 -0.01843749999999811 -0.0001082531754731939 0 +540 0.01481567841236646 -0.0001119410042534052 0 +541 -0.01270035828017494 -0.01832176651571034 0 +542 0.01431249999999607 -0.0001035196402451899 0 +543 0.01985232804140212 -0.0004904685604823272 0 +544 -0.01968749999999964 -0.0001082531754731779 0 +545 -0.01706543055359836 -0.01839638705878091 0 +546 0.0170335795158208 -0.01839180175093968 0 +547 0.019821884651471 -9.745293907228238e-05 0 +548 -0.01989851426409727 -0.0001818415753974025 0 +549 0.01985105240616875 -0.0003061536454907674 0 +550 0.0197057898401327 -0.0003997374014008246 0 +551 0.01969760512526365 -0.0005429379286640325 0 +552 0.0193827335638395 -0.0008922453821323532 0 +553 0.01936322465450565 -0.00114810523302013 0 +554 0.01906178375991181 -0.0008952011254894786 0 +555 0.01909683197637083 -0.0005969326479622396 0 +556 0.01873063813460022 -0.0007818625000703109 0 +557 0.01868881695204167 -0.001110906410682435 0 +558 0.01839214088383209 -0.0007951372120477346 0 +559 0.01830712028372451 -0.001247131765009226 0 +560 0.01805225149229673 -0.000934129244400511 0 +561 0.01786723956263829 -0.001330631390018382 0 +562 0.01744174314116689 -0.00101088560841765 0 +563 0.01739488541046662 -0.00156663717098944 0 +564 0.01707978438911001 -0.001191395784421001 0 +565 0.01685779271201189 -0.001691134033194561 0 +566 0.01632086065811399 -0.001297312846603416 0 +567 0.01626735664883906 -0.001998432076105779 0 +568 0.01572187901981168 -0.001557332812732593 0 +569 0.01563057561403139 -0.002259399853071599 0 +570 0.01516429097136835 -0.001824321595320427 0 +571 0.01483549929630082 -0.002357499782734621 0 +572 0.01403233713243678 -0.002107555258281913 0 +573 0.01410378197737255 -0.002936236097827376 0 +574 0.01341180473185996 -0.002327891665709628 0 +575 0.01308277628373947 -0.003307968227477462 0 +576 0.01222520525256752 -0.00269254394606573 0 +577 0.01187680643919801 -0.003536529494032963 0 +578 0.01076657722688266 -0.00280412741627773 0 +579 0.01084466494168579 -0.004370615809030282 0 +580 0.009710391563521629 -0.003185955110048472 0 +581 0.009155864136777415 -0.004735132989520119 0 +582 0.01073574804313759 -0.006114485038731069 0 +583 0.008923761885396191 -0.006754215207680866 0 +584 0.007407657759920304 -0.005465512174451572 0 +585 0.007043762282478171 -0.007395156964295156 0 +586 0.005414073873658385 -0.005873187172295793 0 +587 0.005129138884035578 -0.007988383144866882 0 +588 0.003618178873390084 -0.006708639668663077 0 +589 0.003227860796914934 -0.008637042994430376 0 +590 0.001747850403825997 -0.007233271100113773 0 +591 0.01048801969055715 -0.008030619064162957 0 +592 0.001304592269780367 -0.009171964383791514 0 +593 -0.0001586901012998678 -0.007792813475429087 0 +594 -0.000633242250602567 -0.009664139355847028 0 +595 -0.002075463918957229 -0.008364258380751863 0 +596 -0.001621774415067132 -0.006426351880617671 0 +597 -0.003500761888941237 -0.006974595767215775 0 +598 -0.003979321305161748 -0.00895295519446327 0 +599 -0.005406393041457109 -0.007553639964046626 0 +600 -0.00588939308125241 -0.009537132775369469 0 +601 -0.007351362476177217 -0.008172795201021673 0 +602 -0.006750700952097719 -0.005936204489084255 0 +603 -0.008775615489393918 -0.006770544342222335 0 +604 -0.00925024891555099 -0.008753577117776957 0 +605 0.006740394953349242 -0.009424630454656441 0 +606 0.002306791700983123 -0.005264114181589149 0 +607 -0.002891435678528266 -0.004627072487810721 0 +608 -0.008479525179412107 -0.004837900236899131 0 +609 -0.0102753883183308 -0.00548930908807005 0 +610 0.002635949770138641 -0.01054559199486429 0 +611 0.01400955089649087 -0.004184795173107156 0 +612 -0.004433433656024218 -0.01090865668078806 0 +613 -0.006345793254107299 -0.01149276056166932 0 +614 0.006109848261904605 -0.003901272904210706 0 +615 0.01626254672441683 -0.002897828499686977 0 +616 -0.009877336560549793 -0.003272111934085172 0 +617 -0.01144254734932756 -0.004475207263749215 0 +618 -0.01200542157126233 -0.006022844336902012 0 +619 -0.01320032212314817 -0.004242728688842133 0 +620 -0.008132597449154729 -0.003178674152469379 0 +621 -0.004884510767560048 -0.01285838672983092 0 +622 -0.01120509203194153 -0.002598037298275357 0 +623 -0.009860376159144984 -0.002333473614798625 0 +624 0.01003379001626422 -0.002162068271416199 0 +625 0.008788966748498149 -0.002705530438778373 0 +626 -0.006807769563383108 -0.01340832833798363 0 +627 0.009169853211561208 -0.001556839757719643 0 +628 0.01241918575217838 -0.001571396423685149 0 +629 0.01234202054654291 -0.007306806367968811 0 +630 0.01207935015071324 -0.009256294585261246 0 +631 -0.01391023501036937 -0.006468330627091699 0 +632 0.01443655619401573 -0.001291742773653227 0 +633 0.01736398309791208 -0.002231046806504586 0 +634 0.01023122059774329 -0.01001604274175988 0 +635 0.01182360782270676 -0.01123537739165403 0 +636 0.009978303963844731 -0.0120061173082393 0 +637 0.01366867375899911 -0.01046392201383085 0 +638 0.01341465293153932 -0.01244741049236256 0 +639 0.01593526743417386 -0.001016700184972491 0 +640 0.01826330861661154 -0.001754047224829737 0 +641 0.01717590969951694 -0.000791505019850737 0 +642 0.01757778043761439 -0.0006714560947463994 0 +643 -0.01516219837645477 -0.004706125601025699 0 +644 -0.01451025784084038 -0.003279287022536377 0 +645 -0.005318982387552119 -0.01473677549905665 0 +646 -0.003458103961387977 -0.01421157570050382 0 +647 -0.001250919823071535 -0.004826480573723865 0 +648 -0.002627374914995632 -0.003052178553265172 0 +649 -0.001108268708346234 -0.002864262775850814 0 +650 -0.004511197351796916 -0.003993809018290723 0 +651 -0.004024335243824231 -0.00227116157837643 0 +652 -0.008261421474168978 -0.01207270536778325 0 +653 -0.00872274107447361 -0.01398619682081297 0 +654 -0.01017501177113504 -0.01265522832973579 0 +655 -0.01062547639678225 -0.01460357007499928 0 +656 -0.01208622304945022 -0.0132447651129013 0 +657 -0.01163758903346241 -0.01129060462097701 0 +658 -0.01354838593598986 -0.01188131901152552 0 +659 -0.01399827519983486 -0.01383139256297814 0 +660 0.01814061768590532 -0.0006281886104180759 0 +661 0.01846638781345715 -0.0005214275014226795 0 +662 0.01648279002250901 -0.0009034494337424223 0 +663 0.01510958726842934 -0.001086624572432278 0 +664 0.01336429389412382 -0.001450863379380935 0 +665 0.01109974609328388 -0.001872082446171791 0 +666 -0.01629747219109325 -0.003669337505904519 0 +667 -0.01567570501300351 -0.002287818036714302 0 +668 -0.01307990136325172 -0.009898310966875072 0 +669 -0.01500740737275178 -0.01051248772937959 0 +670 0.01521870275860077 -0.01167019824983426 0 +671 0.01495794839131975 -0.01365309387430682 0 +672 0.01314746612522449 -0.01441784775877729 0 +673 0.01542527614545819 -0.009678397893935127 0 +674 0.01881489926345526 -0.0004399770934546519 0 +675 0.01467073702333026 -0.01548953156641704 0 +676 -0.0168257625939421 -0.005275993743527128 0 +677 0.01720969948710043 -0.003198044906886082 0 +678 0.01627634735779379 -0.004068601794107497 0 +679 -0.01287039233038557 -0.002953899370872439 0 +680 -0.01387558714999998 -0.002002290363665545 0 +681 0.01685765058954319 -0.01064905584141464 0 +682 0.01939093999328004 -0.0004787449216711127 0 +683 -0.006981980876451128 -0.003871866645348982 0 +684 -0.006689657922230835 -0.002756736460355499 0 +685 -0.007669029970048034 -0.001935503533357273 0 +686 0.01812949068323057 -0.002511112301674868 0 +687 0.01654709316964779 -0.01455420015225473 0 +688 0.007607419921301081 -0.003809815036378192 0 +689 0.006701383236880925 -0.002748356032627667 0 +690 0.005056375324679245 -0.003189682476273973 0 +691 0.00573087322628647 -0.001903668625329772 0 +692 0.004625801355281741 -0.004196850531058885 0 +693 0.003812877648949622 -0.00302427938260095 0 +694 0.004469317753056744 -0.00197118870645501 0 +695 -0.004784038522701148 -0.005598296470162615 0 +696 0.01970291020226305 -0.0002569455671113485 0 +697 0.01958299275697854 -0.0003116588912010545 0 +698 -0.01450320451557463 -0.008509483632142358 0 +699 -0.01647730696794253 -0.009129779741092357 0 +700 -0.01685269638755104 -0.0110613868537341 0 +701 0.008374311879480303 -0.01076007068895737 0 +702 0.008116744027144143 -0.01273853359379638 0 +703 0.00972158911979152 -0.01398420943155077 0 +704 0.007878247119173435 -0.01476283732121822 0 +705 0.006270952886403781 -0.01350964241914603 0 +706 0.006024726045414814 -0.01553352929223376 0 +707 0.004438026141309678 -0.01431384495768519 0 +708 0.004699948828387027 -0.01238820092287463 0 +709 0.002874637755338738 -0.01316614509193275 0 +710 0.002577792960396138 -0.01504673868590239 0 +711 0.001046910011977244 -0.01397789615952722 0 +712 0.0007338735426084587 -0.01582061307752064 0 +713 -0.0007678280493682649 -0.0146725778119424 0 +714 -0.0005628570928800979 -0.01269080044213697 0 +715 -0.0009251468652114101 -0.01653108084250407 0 +716 0.009464819366772915 -0.01601623316477288 0 +717 -0.0090241384094201 -0.01591249632438598 0 +718 -0.01109419730146816 -0.01661067678902355 0 +719 -0.007602096932298873 -0.01689135606801413 0 +720 -0.003901828393989477 -0.01635920999592122 0 +721 0.0008232299066532825 -0.01796716365634308 0 +722 -0.01979367509514525 -0.0006861046944379493 0 +723 -0.01947659789207459 -0.0006916143112889881 0 +724 -0.01938151226406966 -0.001030809383177475 0 +725 -0.01908423942745416 -0.0008073824901041558 0 +726 -0.01897501477380695 -0.001204815613262258 0 +727 -0.01874732382809974 -0.0009200176213192406 0 +728 -0.01856533492249276 -0.001179005902527314 0 +729 -0.0181661841093761 -0.001005372538181947 0 +730 -0.01812610319635165 -0.001430605157423921 0 +731 -0.01783016015675359 -0.001037869912459566 0 +732 -0.01758210249499292 -0.001504857519204188 0 +733 -0.01719266260601016 -0.001148208840769936 0 +734 -0.01743460103672737 -0.0006714334924897588 0 +735 -0.01698167177202248 -0.0008547656710739844 0 +736 -0.01784263874352064 -0.000645974777853412 0 +737 -0.01680137215182526 -0.001161162967648563 0 +738 -0.01657979883982299 -0.000907651697494158 0 +739 -0.01806521981464619 -0.002023042056459803 0 +740 -0.01838379971439845 -0.0005836154449910654 0 +741 -0.01876514624518212 -0.0005643937746339072 0 +742 -0.01922252147016164 -0.0005177432019569239 0 +743 -0.01672216535527613 -0.0004947042619890981 0 +744 -0.01635074922610984 -0.001201054882139026 0 +745 -0.01611615915992031 -0.0009305832043797424 0 +746 -0.01669236899768927 -0.001752461530269681 0 +747 -0.01633229514532635 -0.0005377351217695112 0 +748 -0.0159305836087359 -0.001144520423592752 0 +749 -0.01567630110743741 -0.0009238152716935595 0 +750 -0.01552288434710578 -0.001220148940150449 0 +751 -0.01523338616328025 -0.0009507322061719355 0 +752 -0.01502965305556981 -0.001242182493385364 0 +753 -0.0147666229355523 -0.0009701888996603467 0 +754 -0.01543651991508591 -0.0005694411424195745 0 +755 -0.01497592750341888 -0.0006115889588758297 0 +756 -0.01590102061638705 -0.0005751286634963677 0 +757 -0.01713756357887115 -0.0004581444250816278 0 +758 -0.01727649024725203 -0.002168188904345612 0 +759 -0.01953000835458733 -0.0004618225700991266 0 +760 -0.01455933940208324 -0.001266428491969555 0 +761 -0.0143119500928691 -0.0009883087666873024 0 +762 -0.01454344009546876 -0.0005619313421441592 0 +763 -0.01483258725420928 -0.001791972695872584 0 +764 -0.01789032297660005 -0.002880812436066442 0 +765 -0.01602234320784273 -0.007205864226011024 0 +766 -0.01255687970280153 -0.007938747621758276 0 +767 -0.01641132082813313 -0.002511598391802413 0 +768 -0.01956176542159515 -0.001425700811352483 0 +769 0.0002036755132739436 -0.005593659266521158 0 +770 0.001059883200023375 -0.004084413903346417 0 +771 0.01913771259942101 -0.002881755108500455 0 +772 -0.01939582040780195 -0.002804622970064953 0 +773 0.01751215923638205 -0.004680836706277473 0 +774 0.01618633226676466 -0.005691931393498279 0 +775 -0.01836028394983473 -0.00549238941638454 0 +776 -0.01989514483858089 -0.0003013828821370471 0 +777 -0.0197727748963307 -0.0002312357618156067 0 +778 0.002372933454348893 -0.003590803597948028 0 +779 0.001276299396898188 -0.002331195815039369 0 +780 0.002739712613961747 -0.002515646584267581 0 +781 0.008632618374616711 -0.008741766996754099 0 +782 0.006487141871123583 -0.01146697584568253 0 +783 0.004615304740837886 -0.01032110748417605 0 +784 0.01910404068659254 -0.001447643768397001 0 +785 0.01392122195091597 -0.008477520029609756 0 +786 0.01428968560918447 -0.006225707744448333 0 +787 0.01562100023891363 -0.00764078322324727 0 +788 -0.01114882097472523 -0.009336279970436963 0 +789 0.01130668619444288 -0.01519427447456664 0 +790 0.01112943979596717 -0.017123160143424 0 +791 0.007585186963180506 -0.01674508706778939 0 +792 0.005874471720822521 -0.01757370592650523 0 +793 0.01156538435959162 -0.01321420614285843 0 +794 0.0005060276382167152 -0.01095777716559199 0 +795 -0.002549853135018853 -0.010229299563846 0 +796 -0.00272468686558933 -0.01223435432055809 0 +797 -0.007809632129345699 -0.0101301379376421 0 +798 -0.009722367642037993 -0.0107144690582371 0 +799 -0.004935060995053906 -0.01831274153388377 0 +800 0.0168124754441755 -0.0001078085044632597 0 +801 0.01675181574791957 -0.0002175112791679424 0 +802 0.01662085886255003 -0.000216398916679435 0 +803 0.01668749999999605 -0.000324759526419367 0 +804 0.01655105787283259 -0.0003293817900430198 0 +805 0.01683221827673959 -0.0003345420861865795 0 +806 0.01675114935626809 -0.0004744625321859732 0 +807 0.01648958304092647 -0.0002138755645663805 0 +808 0.016402936156834 -0.0003309918643052484 0 +809 0.01648071710672417 -0.0004720435368364891 0 +810 0.01630340773704374 -0.0004691242889837102 0 +811 0.01623729204271622 -0.0002993827709627647 0 +812 0.01612802174215189 -0.0004434624749498644 0 +813 0.01606349734503247 -0.0002973014294032603 0 +814 0.01596076517271218 -0.0004211681152056896 0 +815 0.01614103084973671 -0.0001868636341789706 0 +816 0.01692703034360022 -0.0004636118768410913 0 +817 0.01682405601412685 -0.0006514201111087539 0 +818 0.01722115611615721 -0.0004980095081466872 0 +819 0.01700543527244203 -0.0003108568839991394 0 +820 0.01618900872570491 -0.0006280183080824925 0 +821 0.01589938149480894 -0.0002648509815694637 0 +822 0.01578543565020951 -0.0003929513092901898 0 +823 0.0158445294828736 -0.000570598550036118 0 +824 0.01564992645953104 -0.0005324735434398138 0 +825 0.01560003131264156 -0.0003306962994048831 0 +826 0.01542535025789351 -0.0004487595029877612 0 +827 0.01548576162511975 -0.0007338299891613562 0 +828 0.01526481418953022 -0.0006149112066363516 0 +829 0.01521751569505773 -0.0003759661811179078 0 +830 0.01505682697358554 -0.0005146371798642735 0 +831 0.01503547287557803 -0.0003274912665969772 0 +832 0.01485637779134428 -0.0004262522196892751 0 +833 0.01488247049160272 -0.0006322681220627377 0 +834 0.01468300498295086 -0.0005257345125926479 0 +835 0.01469067459555591 -0.0002906439141165309 0 +836 0.01452167525012173 -0.0004068778230717996 0 +837 0.01449286319229303 -0.0006070446305730816 0 +838 0.01430743652433497 -0.000479141160459707 0 +839 0.01427131860321765 -0.000681243373350503 0 +840 0.0140715191152174 -0.0005373709969448111 0 +841 0.01403482122070192 -0.0008170354281391801 0 +842 0.01381149560671717 -0.0006052703595608483 0 +843 0.01381646298960346 -0.0001059651423570338 0 +844 0.01388476151308555 -0.0004297267611806053 0 +845 0.01363934289733947 -0.0004728294436948697 0 +846 0.01354683949831176 -0.0006864160920382809 0 +847 0.01335361948223656 -0.0005121438900579474 0 +848 0.01318174887693373 -0.0001026938388343148 0 +849 0.0133073363211567 -0.0007508086297529787 0 +850 0.01312579553542716 -0.0005562660988019958 0 +851 0.01306738596893862 -0.000845388744059132 0 +852 0.01286842444344127 -0.0006129502768414033 0 +853 0.0126875000000012 -0.0001082531754727885 0 +854 0.01274478894172107 -0.0009016392360185004 0 +855 0.01258783838599348 -0.0006395195523092103 0 +856 0.01260854584948396 -0.0004106352725622378 0 +857 0.01240810245175457 -0.0004402562396325381 0 +858 0.01228952606827203 -0.0006794080735560987 0 +859 0.01218750000000286 -0.0001028821551838609 0 +860 0.01218636363553368 -0.0004749173880023622 0 +861 0.01203154411627935 -0.0006510554437178575 0 +862 0.01188452709784252 -0.0004687969564182163 0 +863 0.01177258624899056 -0.0006920099728471018 0 +864 0.01164526291249887 -0.0004423752130142927 0 +865 0.01150517604132238 -0.0007234366586385078 0 +866 0.01143499157714487 -0.0001012968652222409 0 +867 0.01165069261195751 -0.001006788157226157 0 +868 0.01140919839435998 -0.000488209562802549 0 +869 0.01126287940593118 -0.0006503904005211368 0 +870 0.01108382646419651 -0.0004855876194998294 0 +871 0.01099672023878294 -0.0007211244034349027 0 +872 0.01093273695442473 -0.0001024555169594963 0 +873 0.01089352133598501 -0.0005106152072757997 0 +874 0.01073425466303339 -0.0007003206677787345 0 +875 0.01059034101623295 -0.0005400741310705486 0 +876 0.0104598930992526 -0.0007103201031676136 0 +877 0.01027581523264524 -0.0005323988514460403 0 +878 0.01017993978066292 -0.0007612104061437327 0 +879 0.01003968752950309 -0.000496878266302779 0 +880 0.009907695520472834 -0.0007731159202619235 0 +881 0.009792187323624604 -0.0005008277647939769 0 +882 0.009562500000011262 -0.0001082531754727533 0 +883 0.009608315405046334 -0.0007671136264840781 0 +884 0.00946398648429881 -0.0005674164001532005 0 +885 0.009780728834319683 -0.001125095624174354 0 +886 0.01034640705641678 -0.001051974804324038 0 +887 0.009322971139683877 -0.0007290833938085271 0 +888 0.009186918791244541 -0.000567438166761181 0 +889 0.009060201462211969 -0.0007814725382710127 0 +890 0.008900571655958671 -0.0006059844513850821 0 +891 0.008753969398203092 -0.000789232204677193 0 +892 0.008812500000013681 -0.0001082531754727207 0 +893 0.00859349602980795 -0.0006049331172514061 0 +894 0.00845034646227168 -0.0008007783367648887 0 +895 0.008288297949001357 -0.0005836418495924974 0 +896 0.008134003940227463 -0.0008449415056031325 0 +897 0.00831589002466962 -0.00117829926417821 0 +898 0.007912586245519824 -0.001194457723717174 0 +899 0.007784676759522842 -0.000849808873490781 0 +900 0.007503687665562207 -0.001105848783984988 0 +901 0.007298855356168745 -0.0008466798661664772 0 +902 0.007089609015838464 -0.001061544100841708 0 +903 0.006920069579790218 -0.0008191983848214522 0 +904 0.007667730321717153 -0.001590675112213559 0 +905 0.00669525245384859 -0.001032767580584688 0 +906 0.006519326820882571 -0.0007849212212381529 0 +907 0.006700383984166947 -0.0004364640742462856 0 +908 0.006812500000020144 -0.0001082531754727995 0 +909 0.007562242808946905 -0.0004779084993329946 0 +910 0.007123355041896201 -0.0004841402978094516 0 +911 0.006302441432621672 -0.00104989898233071 0 +912 0.00613032713381552 -0.0007611327873784794 0 +913 0.006323736600993447 -0.0004335348134988722 0 +914 0.006391192027340825 -0.001515023256081096 0 +915 0.005908092542360997 -0.0009112344647163921 0 +916 0.005761769076769938 -0.000708881130416015 0 +917 0.005572396653474337 -0.0009183784086118659 0 +918 0.005424160709659834 -0.0007040850445662108 0 +919 0.005224699392504056 -0.0008997593610172525 0 +920 0.00508060018669108 -0.0006909300529443663 0 +921 0.004885940788744634 -0.0008739070873354537 0 +922 0.004733743789616279 -0.0006440265878857796 0 +923 0.004556817267023308 -0.0008334156556173458 0 +924 0.004814122491809555 -0.0001073164294049986 0 +925 0.004423493045227454 -0.0006404835736220832 0 +926 0.004241003323677705 -0.0008087324774224691 0 +927 0.004098535466128045 -0.0006168927245342851 0 +928 0.003933866312739189 -0.000779369298347561 0 +929 0.003800124724980153 -0.000577857038869359 0 +930 0.00363805691310984 -0.0007487244570219401 0 +931 0.003508874288094232 -0.0005670165786540389 0 +932 0.003324966251745093 -0.0007175852404564015 0 +933 0.003312500000028682 -0.0001070860480311614 0 +934 0.003458179750446034 -0.001068170350812178 0 +935 0.00309440016142561 -0.001023289305839839 0 +936 0.002950235933659083 -0.0006330357369898925 0 +937 0.002740489207712945 -0.0009295950658307019 0 +938 0.002667520809950703 -0.0006784905249094072 0 +939 0.002438788831132575 -0.0008084384889999583 0 +940 0.00233444319145078 -0.0005376465902527544 0 +941 0.002136496189015192 -0.0007246386190514919 0 +942 0.002193794819684282 -0.001086201020610535 0 +943 0.001861919749066163 -0.0009212591884433802 0 +944 0.001749664229240407 -0.000667695539510694 0 +945 0.001538200643355836 -0.0007924816010781377 0 +946 0.001474229550092796 -0.0005195205570051389 0 +947 0.001217448135578883 -0.0006385462086814838 0 +948 0.001312500000026201 -0.0001058770674504746 0 +949 0.001248465595814962 -0.001034326293161168 0 +950 0.0009411773271698101 -0.0008797034279041715 0 +951 0.0009363938510058889 -0.001280427564603178 0 +952 0.000606875758393427 -0.0009993136884274647 0 +953 0.0005230667659622026 -0.001509054218005398 0 +954 5.903100504756846e-06 -0.001335848897111734 0 +955 8.632806006399862e-05 -0.0008126978807226829 0 +956 -0.0003856437906114033 -0.001086174315268525 0 +957 -0.0002912017278727209 -0.0006377068041629497 0 +958 -0.0006739204290556821 -0.0009387257071793066 0 +959 -0.0006938361514610988 -0.001282540621353094 0 +960 -0.001044778556156913 -0.0009350740543571409 0 +961 -0.0006018059405090328 -0.0005079518567052912 0 +962 -0.0008124999999764425 -0.0001082531754731372 0 +963 3.821445801547813e-05 -0.0004586106141619922 0 +964 -0.0001874999999756745 -0.0001082531754731383 0 +965 -0.001093909820289666 -0.00145292498621907 0 +966 -0.001486836533353529 -0.001075967238454286 0 +967 -0.001387333879492027 -0.0007014225067440057 0 +968 -0.001840185242897914 -0.0009467734318486208 0 +969 -0.00191102411823046 -0.001287228439692916 0 +970 -0.002144165318410151 -0.0009207836098739826 0 +971 -0.002370532017488059 -0.001315703208940902 0 +972 -0.00271182281076311 -0.0009899754140363891 0 +973 -0.002494925894856171 -0.0005828708062566687 0 +974 -0.002897443034595101 -0.0007642489672738729 0 +975 -0.00305887050963934 -0.001005107338787933 0 +976 -0.003256800113964311 -0.0007735528742143032 0 +977 -0.003448200574106364 -0.001071270146297886 0 +978 -0.003646746280396786 -0.0008088389120728352 0 +979 -0.003830424981106794 -0.00102900246316154 0 +980 -0.004041974116521187 -0.0007381717938751687 0 +981 -0.004191708382409672 -0.001093496106110648 0 +982 -0.004425227874349402 -0.0008371990102325757 0 +983 -0.004615161898750587 -0.001094522837659895 0 +984 -0.004839378884262342 -0.0008420058729274396 0 +985 -0.005028093539483821 -0.001113334428509166 0 +986 -0.005263542756277145 -0.000880431541611934 0 +987 -0.005421253118485572 -0.001064770304517863 0 +988 -0.005357284260913125 -0.001561666360690606 0 +989 -0.00566389390056321 -0.0008508398631946858 0 +990 -0.005823737336174764 -0.001143741124347284 0 +991 -0.006076623201898382 -0.0009160901856268657 0 +992 -0.006294589969868229 -0.00118878589316237 0 +993 -0.006537166799678503 -0.000915668261734302 0 +994 -0.002120547167478066 -0.0005987765654391302 0 +995 -0.004288669150711743 -0.0004397913353376157 0 +996 -0.004312499999980907 -0.0001082531754733311 0 +997 -0.00630938082839954 -0.0005147052160018317 0 +998 -0.006187647334876638 -0.000108338239313657 0 +999 -0.002755895102144953 -0.0004351840309197153 0 +1000 -0.002937499999979118 -0.0001082531754731762 0 +1001 -0.001695796969094704 -0.0005146868439129675 0 +1002 0.0009274195047687902 -0.0005429174038721219 0 +1003 -0.005063962117411471 -0.0005073520531117268 0 +1004 -0.00481264733491197 -0.0001083382393349999 0 +1005 0.005297849758475926 -0.0004188438283927914 0 +1006 0.005437500000024491 -0.0001082531754727072 0 +1007 -0.00545000525249421 -0.0004933046879572626 0 +1008 -0.005901457393403284 -0.0005364814038005377 0 +1009 -0.004669435575511457 -0.0004538777463147801 0 +1010 0.002859120651188884 -0.0003955537354858611 0 +1011 -0.003823692938948553 -0.0004396593406356059 0 +1012 -0.006746602973339293 -0.001216489952790406 0 +1013 -0.006990274021277577 -0.0009374192376556162 0 +1014 -0.006770952959031066 -0.0004885972998754376 0 +1015 -0.003452355123113597 -0.0004460117339202006 0 +1016 -0.002008740562544401 -0.001783675896211158 0 +1017 0.00594100089691757 -0.0004176161786200337 0 +1018 0.004574379087273702 -0.0003589000125254711 0 +1019 0.004297273236280087 -0.0003542928053198199 0 +1020 0.002539717625640716 -0.0003522170453391795 0 +1021 0.001701945691150369 -0.0003441999278257575 0 +1022 -0.0003314617668571323 -0.0003530068999156543 0 +1023 0.005616138794069376 -0.0004303081382695213 0 +1024 0.01288259975261961 -0.0003721583389353632 0 +1025 0.004934723856324565 -0.0003802298016208511 0 +1026 0.009030476980340534 -0.0003437278584868467 0 +1027 3.733549356768498e-05 -0.001956991610712401 0 +1028 0.001891924719525505 -0.001363688412522439 0 +1029 -0.003156364434126612 -0.001533790622363756 0 +1030 0.008432177174156995 -0.0003578228177346936 0 +1031 0.01202775093029666 -0.0002872232058445769 0 +1032 0.004048303668074589 -0.00114103299905204 0 +1033 -0.001001497971474909 -0.0006258084914913627 0 +1034 0.0004981304348612663 -0.0006758565144966515 0 +1035 0.003216841983025534 -0.001451274568170145 0 +1036 0.01214785656287926 -0.0009555385359928013 0 +1037 0.01088813800606675 -0.001036050432271634 0 +1038 0.009315526035682749 -0.0003130222481508258 0 +1039 0.01070577773718926 -0.0003132793457824623 0 +1040 0.003968635729672296 -0.0003475585839739174 0 +1041 0.005014551228099728 -0.001272254352940038 0 +1042 -0.005977859779551964 -0.001661958243137426 0 +1043 -0.005580570787947647 -0.002221867677939428 0 +1044 0.008733991118986468 -0.0003554150532670562 0 +1045 -0.002587893715217675 -0.001956003949927228 0 +1046 0.01044528487114455 -0.000315039477596363 0 +1047 0.0140954485865061 -0.0003483089988877941 0 +1048 0.009897175797717541 -0.000365750309552916 0 +1049 0.009684162929123743 -0.0003374107291463015 0 +1050 0.01011648822195491 -0.0003276775300361706 0 +1051 0.009997018519723741 -0.0001860698162771446 0 +1052 -0.003080575163305855 -0.0004441812437152293 0 +1053 0.0119399760041554 -0.00127678105304444 0 +1054 0.003671982072686235 -0.000345412867639769 0 +1055 0.0132308317744624 -0.0003320554525847904 0 +1056 -0.005739404321496673 -0.003214751718265227 0 +1057 0.01340600757621532 -0.000314995485776502 0 +1058 -0.004362639038374977 -0.001636008943324248 0 +1059 0.01370093808142579 -0.0002756372173619761 0 +1060 -0.004762857777145931 -0.00202346123097039 0 +1061 0.01098269825497147 -0.0003209002409658416 0 +1062 0.0111564404485744 -0.0003087955527598125 0 +1063 0.01147057598815232 -0.0003247718971743236 0 +1064 0.01169718050060247 -0.0002895113859597283 0 +1065 0.01158823065045203 -0.0001760088482921468 0 +1066 0.01226696065968809 -0.0003079658250688921 0 +1067 0.01543085979914335 -0.0002936361217373489 0 +1068 0.01525795667021316 -0.0002166872572877172 0 +1069 0.001203512037226825 -0.0004244801028241112 0 +1070 0.001410012412237171 -0.0003257141971878182 0 +1071 0.01243109250326888 -0.0002798691505438577 0 +1072 0.0143711611884018 -0.0003159772067201641 0 +1073 -0.0006733431380064512 -0.001786238233737447 0 +1074 -0.007205775799987557 -0.001296283771374831 0 +1075 -0.007496835972598612 -0.0009345010827011568 0 +1076 -0.007237818559534577 -0.0005779716369205082 0 +1077 0.01331065310100102 -0.0002181039698207645 0 +1078 0.002036787670784179 -0.0004790701735758389 0 +1079 0.002233949867586941 -0.0003284141117664134 0 +1080 0.01488925924350938 -0.0002450703709391467 0 +1081 0.01062729731362331 -0.001382093301501565 0 +1082 0.01014172201463821 -0.001452519835051753 0 +1083 0.01106719377746558 -0.0002236610379464318 0 +1084 0.002369240020086411 -0.001466145262413113 0 +1085 0.01574858584660094 -0.0002472420949930938 0 +1086 0.001412028281945674 -0.001552647828457265 0 +1087 0.003193063673885289 -0.0004715595871325331 0 +1088 0.003364061026382614 -0.0003264227441714261 0 +1089 -0.006938570373120621 -0.001862067749846973 0 +1090 0.01376610118865582 -0.0009568711877715978 0 +1091 0.007741474734186488 -0.002683864096811157 0 +1092 0.01390808078761484 -0.001482239567370274 0 +1093 0.007965289066920771 -0.0006265118420829127 0 +1094 0.008132706330988143 -0.0003367732417693859 0 +1095 0.01450011425866234 -0.0002339434183723493 0 +1096 0.01656004909475595 -0.0001064466537330425 0 +1097 0.01688990745687818 -0.0002127011084690947 0 +1098 -0.01856249999999831 -0.000108253175473197 0 +1099 -0.01850184439647971 -0.0002175712137513502 0 +1100 -0.01837346300293033 -0.0002177486908856043 0 +1101 -0.01843749999999825 -0.0003247595264193314 0 +1102 -0.01830143362110971 -0.000331148703249589 0 +1103 -0.0185668948785685 -0.0003307130393508327 0 +1104 -0.01831224383382006 -0.0001082949387763906 0 +1105 -0.01824398894307012 -0.0002164711027961551 0 +1106 -0.0181560491106196 -0.0003276678905597136 0 +1107 -0.01822847635758925 -0.0004621369285677938 0 +1108 -0.0180513909810741 -0.0004566889260520016 0 +1109 -0.01798881077941892 -0.0002891111916793269 0 +1110 -0.01788432819482742 -0.0004105815882690454 0 +1111 -0.01782105799631595 -0.0002665537966071003 0 +1112 -0.01771774247380749 -0.0003945792491533864 0 +1113 -0.01815301550037091 -0.0006779055137674586 0 +1114 -0.01766819708075219 -0.0002678838009774317 0 +1115 -0.01756910351944341 -0.000368362607362749 0 +1116 -0.01752979754448595 -0.0002192555442091404 0 +1117 -0.01742611251849534 -0.0003400995724828264 0 +1118 -0.01760670657980401 -0.0005490326793352072 0 +1119 -0.0178203985512616 -0.0001248320055806103 0 +1120 -0.01956249999999946 -0.0001082531754730762 0 +1121 -0.01962852417957807 -0.0002204637013751187 0 +1122 -0.01968008147429885 -0.0003384119014306476 0 +1123 0.0196947177814413 -0.0001254599284779603 0 +1124 0.01556236063879576 -0.0001061414918096365 0 +1125 -0.01718749999999653 -0.0001081635003391448 0 +1126 -0.01725040058593189 -0.0002130631498714407 0 +1127 -0.01712506676431901 -0.0002159175382447606 0 +1128 -0.01700001112738334 -0.0002164082154960594 0 +1129 -0.01455982498871161 -0.0001099670654265345 0 +1130 -0.01462273432429543 -0.0002178710392724524 0 +1131 -0.01475406614867069 -0.0002164588770148886 0 +1132 -0.01470020122690266 -0.0003118669831139964 0 +1133 -0.01482581332369082 -0.0003309754126284115 0 +1134 -0.01488371204376758 -0.0002159533840932322 0 +1135 -0.01455201670482449 -0.0003561359641510472 0 +1136 -0.01495763004723035 -0.0003263611451002235 0 +1137 -0.01470962483446656 -0.000452360430536763 0 +1138 -0.01437562264418184 -0.0004481644685986888 0 +1139 -0.01438661818213548 -0.0002748280432475654 0 +1140 -0.01423107454603804 -0.0003361442968117483 0 +1141 -0.01393749999999257 -0.0001055345095786142 0 +1142 -0.01420190264750532 -0.0004836380443016357 0 +1143 -0.01405970515474126 -0.0004018672343066361 0 +1144 -0.01402427018449633 -0.0005951840192199921 0 +1145 -0.01385337507928046 -0.0004450410435876022 0 +1146 -0.01381240888806366 -0.0007082541325155447 0 +1147 -0.0136222325398339 -0.0005505985649248338 0 +1148 -0.01356888578735585 -0.0007617375669263761 0 +1149 -0.01333263243531604 -0.0006270439035103184 0 +1150 -0.0132841989334455 -0.0009251400800162226 0 +1151 -0.01303300647584231 -0.0007855848700222784 0 +1152 -0.01297266070212833 -0.001097067645633441 0 +1153 -0.01270932948076052 -0.0009049305401720317 0 +1154 -0.01260595267728257 -0.001273193674290238 0 +1155 -0.01233995015927732 -0.0009484606086533505 0 +1156 -0.01343749999999207 -0.0001082531754731963 0 +1157 -0.01233256896989368 -0.0006547007003927593 0 +1158 -0.01202420595527661 -0.0007274630412102732 0 +1159 -0.01218628696536535 -0.0001061885006166113 0 +1160 -0.01193290552972939 -0.001093729515371763 0 +1161 -0.01165169136381844 -0.0008275585922537264 0 +1162 -0.01155592095321224 -0.001116170688633426 0 +1163 -0.01131017992353056 -0.0008979410750472892 0 +1164 -0.01117355388580843 -0.001202299628843318 0 +1165 -0.01079530844777644 -0.0009945440566384764 0 +1166 -0.01098825120162198 -0.0005691481910562805 0 +1167 -0.01068280857620375 -0.0007299406225002231 0 +1168 -0.01106235266499575 -0.0001083382393711957 0 +1169 -0.01048229561425854 -0.0009501249440663477 0 +1170 -0.01028015422693648 -0.0007173990642902669 0 +1171 -0.01014495117407601 -0.0008787480998559253 0 +1172 -0.009940026877367957 -0.0007198584053289263 0 +1173 -0.009806528898757381 -0.0009608320570774003 0 +1174 -0.009588712447985624 -0.0007451007537502205 0 +1175 -0.009436210302765291 -0.0009367545787315855 0 +1176 -0.009230036129454125 -0.0007442949962490512 0 +1177 -0.009075982060758601 -0.001005931946352499 0 +1178 -0.008859046088455889 -0.000769899913061095 0 +1179 -0.008706959611584176 -0.0009430297380127907 0 +1180 -0.008479482446031642 -0.000771244162272924 0 +1181 -0.008353770797169991 -0.001016596953004838 0 +1182 -0.008831694590627052 -0.001391728531419739 0 +1183 -0.01268747275457833 -0.0004584095433798752 0 +1184 -0.01281249999999115 -0.0001082531754732054 0 +1185 -0.01131915093396597 -0.0005163176283421943 0 +1186 -0.00904526111938128 -0.0004367657710407351 0 +1187 -0.008937499999986392 -0.000108253175473173 0 +1188 -0.01044815481189869 -0.0004146970130718173 0 +1189 -0.01031249999998806 -0.0001082531754731674 0 +1190 -0.01177641935954542 -0.001510980250502761 0 +1191 -0.01370558988395996 -0.001039156637133186 0 +1192 -0.01175926657458051 -0.0004714120626276415 0 +1193 -0.0115624999999897 -0.0001082531754731964 0 +1194 -0.008055874083875996 -0.000742056521571509 0 +1195 -0.008299707573968874 -0.000432575126834057 0 +1196 -0.008667649121468985 -0.0004432391598523552 0 +1197 -0.009383866302540594 -0.0004578692892281661 0 +1198 -0.009750899871822306 -0.0004565745286828494 0 +1199 -0.01308256531609625 -0.0004232102961808394 0 +1200 -0.01334402373076165 -0.0003729224775717458 0 +1201 -0.01007819538723188 -0.0004207638734851876 0 +1202 -0.01075206258108888 -0.0003923788553272611 0 +1203 -0.01297140148372062 -0.001535395834766208 0 +1204 -0.01017636688727606 -0.001290530745522186 0 +1205 -0.01209258645185225 -0.0004663978573048357 0 +1206 -0.007985105580646372 -0.001077441009042787 0 +1207 -0.01367371215887022 -0.0003341843650380849 0 +1208 -0.01382566361666903 -0.0002911848201746974 0 +1209 -0.01247780877164952 -0.001775823961948267 0 +1210 -0.009512483872775659 -0.001312167609891057 0 +1211 -0.01406773672439971 -0.00134017406810429 0 +1212 -0.01410230696024224 -0.000240310113860643 0 +1213 -0.008126451821549498 -0.001472116146674547 0 +1214 -0.00851777642409458 -0.002114911377266034 0 +1215 -0.009082104793985586 -0.002780361577323981 0 +1216 -0.01481465425454558 -0.0001068029507325966 0 +1217 -0.01450607097105651 -0.0002157523236231823 0 +1218 -0.0143124999999931 -0.0001611293738261633 0 +1219 -0.01268747544416297 -0.0001082673527870711 0 +1220 -0.01274999590735302 -0.0002165087138319244 0 +1221 -0.01287499931788492 -0.0002165067447606148 0 +1222 -0.0128124999999911 -0.0003247595264193535 0 +1223 -0.01262497066941851 -0.0002165232849600703 0 +1224 -0.01249555134830056 -0.0002162342515409159 0 +1225 -0.01257045378786342 -0.0003349638199061932 0 +1226 -0.01242238755472202 -0.0003330720430410053 0 +1227 -0.01236592434985466 -0.0002162653841278614 0 +1228 -0.01228576941369343 -0.0003271509741307587 0 +1229 -0.01243561984995064 -0.0001073735259073506 0 +1230 -0.01293749988630699 -0.0001082532411088916 0 +1231 -0.01299999986735971 -0.0002158165015929131 0 +1232 -0.01312499997788643 -0.0002157014501257933 0 +1233 -0.01118747544415695 -0.0001082673527894895 0 +1234 -0.01112681574909144 -0.0002175877545840306 0 +1235 -0.01099585886114689 -0.000216411663166111 0 +1236 -0.01107437605417681 -0.0003118008885809734 0 +1237 -0.01120216669439269 -0.0003383506380344349 0 +1238 -0.01092405588758982 -0.0003648202244041524 0 +1239 -0.01087035760355805 -0.0002088802280896238 0 +1240 -0.01072098241238503 -0.0002500430815117565 0 +1241 -0.01093601152161121 -0.0001056162219226747 0 +1242 -0.0112499999999891 -0.0002165063509462773 0 +1243 -0.01137764974497689 -0.0002188039873702641 0 +1244 -0.01143794162415412 -0.0001086361148771826 0 +1245 -0.01150051522818166 -0.0002139603155553584 0 +1246 -0.01162508587135524 -0.000216082011714443 0 +1247 -0.01156054718287876 -0.0003245366427144609 0 +1248 -0.011585089181179 -0.0005801381451668252 0 +1249 -0.01206229782755278 -0.0001079090629970834 0 +1250 -0.01199996630458398 -0.0002153489780625144 0 +1251 -0.0118749943840892 -0.0002163134554657101 0 +1252 -0.01193989657958902 -0.0003123507631375869 0 +1253 -0.01212135656955326 -0.0002128015123821359 0 +1254 -0.01181249906400662 -0.0001082210262264266 0 +1255 -0.01175001321990355 -0.000216398120286358 0 +1256 -0.01406249999999267 -0.0001082531754731679 0 +1257 -0.008812499999986245 -0.0001082531754731466 0 +1258 -0.008874999999986269 -0.0002165063509462379 0 +1259 -0.008999999999986335 -0.0002165063509463232 0 +1260 -0.009062499999986451 -0.0001082531754732584 0 +1261 -0.009124999999986323 -0.0002165063509465135 0 +1262 -0.009187499999986588 -0.0001082531754733842 0 +1263 -0.009249999999986937 -0.0002165063509464325 0 +1264 -0.009374999999987064 -0.0002165063509462143 0 +1265 -0.009165354556141416 -0.000338326901919013 0 +1266 -0.003062499999979256 -0.0001082531754731564 0 +1267 -0.002999999999979195 -0.0002165063509462946 0 +1268 -0.002874999999979175 -0.0002158211633272059 0 +1269 -0.002948153675449727 -0.0003307866165775932 0 +1270 -0.002812499999979044 -0.0001081389775367244 0 +1271 -0.002749999999979163 -0.0002156879324014058 0 +1272 -0.002687475444143054 -0.0001081119167114779 0 +1273 -0.002624971351503854 -0.0002163605820471917 0 +1274 -0.002495551461770639 -0.0002162071336249651 0 +1275 -0.002562499999979126 -0.0003247595264196963 0 +1276 -0.002426194721251999 -0.0003333553583705701 0 +1277 -0.002366558895594266 -0.0002163080839828867 0 +1278 -0.002288676663699284 -0.0003284844220043714 0 +1279 -0.002378337461679285 -0.0004658831042382841 0 +1280 -0.002067536673236023 -0.0003757982998781492 0 +1281 -0.002435695404522785 -0.00010737538065854 0 +1282 0.003187500000028511 -0.0001080586542327952 0 +1283 0.003125000000028472 -0.0002164739307395053 0 +1284 0.003000000000028436 -0.0002144205589848913 0 +1285 0.003064933721111509 -0.000326030488144818 0 +1286 -0.0009374999999765339 -0.0001082531754731324 0 +1287 -0.0008768443966315861 -0.0002175712138515254 0 +1288 -0.0007499046160023478 -0.0002169163752111555 0 +1289 -0.0008124999999765414 -0.0003247595264193107 0 +1290 -0.0009485663799070147 -0.0003311487038510586 0 +1291 -0.004687524555802992 -0.0001082673527834382 0 +1292 -0.004750028648439983 -0.0002165228911415808 0 +1293 -0.004879448537332637 -0.0002162341858638727 0 +1294 -0.004801241978136338 -0.0003403593195792448 0 +1295 -0.004953486798279853 -0.0003497635983045178 0 +1296 -0.005009566481099949 -0.0002196464248522935 0 +1297 -0.005109380681964706 -0.0003353668005202613 0 +1298 -0.005269544971577166 -0.0004284335291711138 0 +1299 -0.005260784704916389 -0.0002842434505142422 0 +1300 -0.00486559666640917 -0.0005320830350375701 0 +1301 -0.004939137266019149 -0.0001080581760466141 0 +1302 -0.004625002308232973 -0.0002165076836160228 0 +1303 -0.004498155987673272 -0.0002175714361719388 0 +1304 -0.004558330395419505 -0.0003460922194333652 0 +1305 -0.004412685069500474 -0.0003443425068933829 0 +1306 -0.004437192664596373 -0.000108430689677483 0 +1307 -0.004370505620285544 -0.0002180849399431168 0 +1308 -0.004249250936698461 -0.0002148771081254643 0 +1309 -0.004187375156100381 -0.0001079816350032956 0 +1310 -0.004124999999981052 -0.0002165063509469161 0 +1311 -0.0040624791926673 -0.0001082079187285166 0 +1312 -0.003999996532095242 -0.0002164988081558918 0 +1313 -0.003874999421999713 -0.0002165050938150623 0 +1314 -0.004062499421999996 -0.0003294244829713939 0 +1315 -0.003812499903650216 -0.0001082529659517843 0 +1316 -0.003749999999980702 -0.0002165063509474197 0 +1317 -0.003687499983925257 -0.0001082531405534937 0 +1318 -0.003624999997304495 -0.0002165063451271735 0 +1319 -0.003499999999534092 -0.0002165063499770493 0 +1320 -0.003705762365822633 -0.0003401298993122895 0 +1321 -0.003437499999905544 -0.0001082531753121714 0 +1322 -0.003374999999980175 -0.0002165063509475045 0 +1323 -0.003312499999967403 -0.0001082531754468977 0 +1324 -0.003249999999977736 -0.0002165063509427679 0 +1325 -0.003315856028854345 -0.000326432255729757 0 +1326 -0.003124999999978907 -0.0002165063509459199 0 +1327 -0.006062499999982831 -0.0001082531754731649 0 +1328 -0.006123180159532273 -0.0002175853909337832 0 +1329 -0.00625414045490904 -0.0002164112687296321 0 +1330 -0.006175622990562736 -0.000311800331718999 0 +1331 -0.006051433622385581 -0.0003311487025040001 0 +1332 -0.006125794338406656 -0.0004627075939233952 0 +1333 -0.005826538295255484 -0.0003581973206086162 0 +1334 -0.006313906156722574 -0.0003334808630232336 0 +1335 -0.006383975600165238 -0.0002139370730707165 0 +1336 -0.006438062254053355 -0.0003495274571913095 0 +1337 -0.006550703586948921 -0.0005240075521249441 0 +1338 -0.006656208208204575 -0.0003715308025261346 0 +1339 -0.006880826398238921 -0.0003798278143823905 0 +1340 -0.006756971081334597 -0.0001930883425686897 0 +1341 -0.006993728841617836 -0.0005463760820900957 0 +1342 -0.00708544115752704 -0.0003593998797082386 0 +1343 -0.007304709143006904 -0.0003643994199260002 0 +1344 -0.007562647334954916 -0.0001083382393578767 0 +1345 -0.006314710564983451 -0.0001064589639787788 0 +1346 -0.005999999999982781 -0.0002165063509462309 0 +1347 0.001437500000026332 -0.0001054810494466976 0 +1348 0.001495418735394815 -0.000213827333713943 0 +1349 0.001625000000026389 -0.0002165063509463262 0 +1350 0.001687500000026508 -0.0001082531754732412 0 +1351 0.001752683243487821 -0.0002181581553223622 0 +1352 0.001830980893627086 -0.0003309957961303008 0 +1353 0.001812500000026512 -0.0001082531754734815 0 +1354 -0.000316204676840666 -0.0001134973738638985 0 +1355 -0.0002565438251722221 -0.0002268792786109928 0 +1356 -0.0001260906375084408 -0.000218235172223699 0 +1357 -0.0001993836461396125 -0.0003225139268918134 0 +1358 -0.000391833794630976 -0.0002324417147479087 0 +1359 -0.0005036305294361443 -0.000200902716945759 0 +1360 -6.268177289772196e-05 -0.0001085413123527514 0 +1361 -2.120683848217247e-07 -0.0002168425106391827 0 +1362 6.250000002445593e-05 -0.0001082531754733424 0 +1363 0.0001249892111174413 -0.0002165765548757848 0 +1364 0.0002544419646176865 -0.0002162431291936434 0 +1365 0.0001875000000242783 -0.0003247595264195899 0 +1366 0.0003237590916631745 -0.0003330882140576615 0 +1367 0.0002383416160234942 -0.000472249519364989 0 +1368 0.0003834323099696029 -0.0002162695593932041 0 +1369 0.0004584762081162217 -0.0003325164255597054 0 +1370 0.0003143027658626262 -0.0001073750797025161 0 +1371 -0.001000784182227814 -0.0002162694702595804 0 +1372 -0.0011251306970184 -0.0002145745301715869 0 +1373 -0.001187521782817008 -0.0001079312053441852 0 +1374 -0.001251869809796357 -0.0002171955819484534 0 +1375 -0.001187499999976319 -0.0003247595264195632 0 +1376 -0.00131638568140782 -0.0003273535564557043 0 +1377 -0.001249205661157763 -0.0004627076019647889 0 +1378 -0.001312815265420351 -0.0001083143856187312 0 +1379 -0.001374999999977402 -0.0002165063509464952 0 +1380 -0.001499999999977431 -0.000216506350946137 0 +1381 0.003258593504420928 -0.0002153840816480871 0 +1382 0.01806247544417439 -0.0001082673527843823 0 +1383 0.01800181574798752 -0.0002175877539297721 0 +1384 0.01787085886232688 -0.0002164116624322858 0 +1385 0.01793749999999774 -0.0003247595264193428 0 +1386 0.01779863091059828 -0.0003373359089781712 0 +1387 0.0178702579400559 -0.000459367420426234 0 +1388 0.01774118282881584 -0.0002170055975303427 0 +1389 0.01766098493400956 -0.000337865133195851 0 +1390 0.01805729676949756 -0.000312117440722298 0 +1391 0.01781068723012514 -0.0001074827668403102 0 +1392 0.01506950930018941 -0.01838215145961459 0 +1393 0.0174372978275576 -0.0001079090629903087 0 +1394 0.01737496630459035 -0.0002164489988657857 0 +1395 0.01724999438409572 -0.0002164967922663557 0 +1396 0.01718749906401316 -0.0001082515823599442 0 +1397 0.01711548812009008 -0.0002114342953267848 0 +1398 0.0170609145306814 -0.0001041956291140627 0 +1399 0.01749738124649791 -0.0002148004110964196 0 +1400 0.01744279898795511 -0.0003337286549746584 0 +1401 -0.01018749999998795 -0.0001082531754731315 0 +1402 -0.01024999999998796 -0.0002165063509462324 0 +1403 -0.01037039427638842 -0.0002095808628807994 0 +1404 -0.0103241917170002 -0.0003206998204614731 0 +1405 -0.01053684588519134 -0.0003101280098506046 0 +1406 -0.01012499999998789 -0.00021471364352781 0 +1407 -0.009999999999987673 -0.000214414858958147 0 +1408 -0.01043185978682823 -0.0001042857348360959 0 +1409 -0.01055680234844022 -9.956068678829169e-05 0 +1410 -0.01518770217236742 -0.0001079090631022808 0 +1411 -0.01524818929835923 -0.0002175138620064232 0 +1412 -0.01537649159226523 -0.0002177096755016964 0 +1413 -0.01531249999999403 -0.0003247595264193336 0 +1414 -0.01517643361781157 -0.0003311487051512529 0 +1415 -0.01546677070793222 -0.0003187641323141726 0 +1416 -0.01525079433887028 -0.0004627076024156873 0 +1417 -0.01558065723999234 -0.0004427965802387504 0 +1418 -0.01561268881480165 -0.0002829233321310073 0 +1419 -0.01574858632470675 -0.0003439835088106905 0 +1420 -0.01572606198815715 -0.0002109136491491021 0 +1421 -0.01587351764921596 -0.000244980408506356 0 +1422 -0.01543732610437983 -0.0001072183438355153 0 +1423 -0.007437524555812943 -0.0001082673527872475 0 +1424 -0.007500028648451009 -0.0002165228911460485 0 +1425 -0.007629448538024886 -0.0002162341859072469 0 +1426 -0.007557387644728175 -0.0003345304280626385 0 +1427 -0.007699146542795504 -0.0003332255397554397 0 +1428 -0.007608836538043005 -0.0004899057847283284 0 +1429 -0.007809307824351497 -0.0004600216679135003 0 +1430 -0.007755279479124438 -0.000212282115264703 0 +1431 -0.007693980334614383 -0.000659420432842104 0 +1432 -0.007689145892009848 -0.0001061536236696598 0 +1433 -0.007373710391204053 -0.0002231181194496642 0 +1434 -0.007249999999984482 -0.0002165063509462714 0 +1435 0.01580269040066232 -0.0001141956504778734 0 +1436 0.003812500000029155 -0.0001082531754729902 0 +1437 0.003747413678805362 -0.0002199485744828377 0 +1438 0.00387975823476569 -0.0002208798977945527 0 +1439 0.003812745875678379 -0.0003693071410359355 0 +1440 -0.0006889257158857582 -0.0001063109094956632 0 +1441 0.002937500000028338 -0.0001079055434796263 0 +1442 0.002875000000028334 -0.00021192491247391 0 +1443 -0.01381249999999243 -0.0001001239323725048 0 +1444 -0.01806563679622944 -0.0001023326416307212 0 +1445 0.01831249999999791 -0.0001082531754731006 0 +1446 0.01825409661155731 -0.0002192796509062857 0 +1447 0.01813081316384956 -0.0002219226280393542 0 +1448 -0.01356249999999213 -0.0001072473743772083 0 +1449 -0.01350043050307205 -0.0002088090145151375 0 +1450 -0.01337880407545044 -0.0002195855274978397 0 +1451 -0.01331313401256838 -0.0001087663715651695 0 +1452 -0.01325599363277504 -0.0002249980881088805 0 +1453 0.002812178136193403 -0.0001076174919004603 0 +1454 0.002749624492220917 -0.0002118946041684333 0 +1455 0.002614501423964908 -0.0002212201947163094 0 +1456 0.002687500000027967 -0.0003247595264193715 0 +1457 0.002480888810812691 -0.0002219244121095898 0 +1458 0.002401694302591399 -0.0003526146432399524 0 +1459 0.002556530312303577 -0.0001092482776180847 0 +1460 0.01893749999999869 -0.000108253175473142 0 +1461 0.01887499999999863 -0.0002159508046582274 0 +1462 0.01874999999999857 -0.0002158582136102374 0 +1463 0.01899999999999874 -0.0002164137598982157 0 +1464 0.01868749999999843 -0.0001081451525838272 0 +1465 0.0186231556035007 -0.0002174451870564868 0 +1466 0.01869629713779565 -0.0003314271746514986 0 +1467 0.01854854838475007 -0.000344247954402355 0 +1468 0.01862990353008824 -0.0004673052461612209 0 +1469 0.0183743187029616 -0.0003461792960597224 0 +1470 0.01856219260058192 -0.000108391644343289 0 +1471 0.01849999999999792 -0.0002165063509462829 0 +1472 0.01906249999999879 -0.0001082377436318266 0 +1473 0.01912499999999876 -0.0002164883471313873 0 +1474 0.01924999999999877 -0.0002165033503106468 0 +1475 0.01918749999999863 -0.0003294222391762775 0 +1476 0.01931249999999896 -0.0001082526753673733 0 +1477 0.01937422994522272 -0.0002158210373483419 0 +1478 0.01943687782589838 -0.0001079228531614285 0 +1479 -0.00718749999998431 -0.0001082531754731549 0 +1480 -0.00706287777935222 -0.0001078673313842405 0 +1481 -0.007009676244532938 -0.0002194856616655602 0 +1482 -0.007130499196894224 -0.000220373977243641 0 +1483 -0.01893749999999862 -0.0001082531754731908 0 +1484 -0.01899999999999873 -0.0002165063509462781 0 +1485 -0.01887315560348425 -0.0002175712137704774 0 +1486 -0.01912499999999877 -0.0002165063509462838 0 +1487 -0.0189374999999987 -0.0003247595264193376 0 +1488 -0.01880143362091221 -0.0003311487033639495 0 +1489 -0.01918749999999887 -0.0001082531754732469 0 +1490 -0.01924999999999881 -0.0002165063509464301 0 +1491 -0.01931249999999915 -0.0001082531754732164 0 +1492 -0.01937499999999942 -0.0002165063509464285 0 +1493 -0.01881219260057952 -0.0001084306526105926 0 +1494 -0.01874919714680263 -0.0002162802499812741 0 +1495 -0.01862499999999863 -0.0002165063509465511 0 +1496 -0.0165624999999957 -0.0001082531754732209 0 +1497 -0.0166249999999958 -0.0002165063509462551 0 +1498 -0.01674999999999581 -0.0002165063509463258 0 +1499 -0.01649815560309893 -0.0002175712139913967 0 +1500 -0.01654757671209763 -0.0003105386793519304 0 +1501 -0.01640380129316667 -0.0003558289032355134 0 +1502 -0.01681249999999594 -0.0001082531754732515 0 +1503 -0.01687500185456054 -0.0002164899950379537 0 +1504 -0.0168200238844146 -0.0003416726091053029 0 +1505 -0.01693750216365478 -0.000108234093580077 0 +1506 -0.01643719260051288 -0.0001084306526474641 0 +1507 -0.01636902491612751 -0.0002199992962400592 0 +1508 -0.0162494919146327 -0.0002158378900639398 0 +1509 -0.01618741531910167 -0.0001081417653263279 0 +1510 -0.0161230568092631 -0.0002174412351747267 0 +1511 -0.0161874999999959 -0.0003247595264197568 0 +1512 -0.01605143362185728 -0.0003311487028173451 0 +1513 -0.01612579433865111 -0.0004627075987094487 0 +1514 -0.01606238879074532 -0.0001092874403253183 0 +1515 -0.01599999999999566 -0.0002165063509470951 0 +1516 -0.008187499999985555 -0.000108253175473168 0 +1517 -0.008249999999985604 -0.0002165063509462338 0 +1518 -0.008374999999985604 -0.0002165063509462779 0 +1519 -0.00812499999998559 -0.0002165063509463004 0 +1520 -0.008062702172424253 -0.0001079090629949755 0 +1521 -0.007999999999985585 -0.0002165063509464027 0 +1522 -0.008062499999985656 -0.0003247595264194093 0 +1523 -0.008437499999985696 -0.0001082531754732073 0 +1524 -0.008499999999985698 -0.0002165063509463924 0 +1525 -0.008417741556095825 -0.0003384732993101178 0 +1526 -0.008562499999985852 -0.0001082531754732505 0 +1527 -0.008624999999985948 -0.0002165063509463701 0 +1528 -0.008749999999986113 -0.0002165063509462897 0 +1529 -0.008791207160164969 -0.0003396665341490232 0 +1530 -0.006688864019279035 -0.0001029996632400173 0 +1531 -0.005437499999982109 -0.0001082531754731731 0 +1532 -0.005498155602851182 -0.000217571214126292 0 +1533 -0.005624692600460355 -0.0002166838281429766 0 +1534 -0.005559839290905339 -0.00034590164843218 0 +1535 -0.005402221637121045 -0.0003309934801912195 0 +1536 -0.0056755207724463 -0.0005125533035113687 0 +1537 -0.005687448766728679 -0.0001082827550059686 0 +1538 -0.005812491461106898 -0.000107942541980635 0 +1539 -0.005752278520586026 -0.0002217915709237821 0 +1540 -0.005312759693282354 -0.0001005422382733102 0 +1541 -0.005360236939689159 -0.0002032849743306962 0 +1542 -0.0019374999999778 -0.0001082531754731277 0 +1543 -0.001874999999977745 -0.0002165063509462236 0 +1544 -0.001748155603236713 -0.000217571213901209 0 +1545 -0.001804783524689323 -0.0003519074036803526 0 +1546 -0.002000839445520894 -0.00022501281318935 0 +1547 -0.001676433619531679 -0.0003311487041489021 0 +1548 -0.001538984354821923 -0.0004746812089579022 0 +1549 -0.00193308347813164 -0.0004820699126339482 0 +1550 -0.001687192600520795 -0.0001084306526323229 0 +1551 -0.001624197146682979 -0.0002162802499633034 0 +1552 -0.002062437735072758 -0.0001093268066025876 0 +1553 -0.002121263934111403 -0.0002258545916216879 0 +1554 -0.009562499999987246 -0.0001082531754731307 0 +1555 -0.009624999999987253 -0.0002162137154673391 0 +1556 -0.00974999999998726 -0.0002161434114513871 0 +1557 -0.009812499999987399 -0.0001081926855573713 0 +1558 -0.009874999999987456 -0.0002160656659436231 0 +1559 -0.009499999999987189 -0.0002164575783663465 0 +1560 -0.009561785590420245 -0.0003181676254582995 0 +1561 -0.009937499999987611 -0.0001078210643220492 0 +1562 -0.009961666882308989 -0.0003321570472668099 0 +1563 0.003562500000029035 -0.0001082531754731139 0 +1564 0.003437500000028873 -0.0001068915267908137 0 +1565 0.003490773895025427 -0.0002188546023326349 0 +1566 0.003625000000029082 -0.0002165063509461884 0 +1567 0.002187017392135698 -0.0001066798896773198 0 +1568 0.002062419565378558 -0.0001079466458988659 0 +1569 0.002002372643137529 -0.0002147674697929705 0 +1570 0.002133043244715551 -0.0002154759203714619 0 +1571 0.001187500000026062 -0.0001078571574693468 0 +1572 0.001246421557796099 -0.0002092945596093052 0 +1573 0.00112440359298765 -0.0002130648627243711 0 +1574 0.001062400598852848 -0.0001076135911021834 0 +1575 0.0009998840319906529 -0.0002158261721807631 0 +1576 0.0008749806720199534 -0.0002163929878187081 0 +1577 0.001074765681276983 -0.0003256127686463754 0 +1578 0.0008124967786914074 -0.0001082342816185991 0 +1579 0.0007481518451472897 -0.000217549171021278 0 +1580 0.0008192133301757877 -0.0003492458996642874 0 +1581 0.0006803226109949395 -0.0003366082794458309 0 +1582 0.0007537348867670506 -0.0004809771583696532 0 +1583 0.0005756470057226951 -0.0004749108927173994 0 +1584 0.0006875000000257361 -0.0001082531754733579 0 +1585 0.0006250158075737635 -0.0002132721931504958 0 +1586 -0.0174424662574117 -0.0001072345541333921 0 +1587 -0.01512440757894454 -0.0002122990288199284 0 +1588 -0.00943749999998709 -0.0001082450467098179 0 +1589 0.01519288832776558 -0.0001086914781250123 0 +1590 -0.01168751635920579 -0.0001081590556167373 0 +1591 -0.01535532586873277 -0.0124806118500212 0 +1592 -0.01588633944931422 -0.01447456889423046 0 +1593 -0.01448506603074165 -0.01580203568343202 0 +1594 -0.0165354623858934 -0.01654596037682755 0 +1595 -0.01256967558875223 -0.01512831810911761 0 +1596 -0.01318860460386745 -0.0001096198475455045 0 +1597 -0.001562499999977642 -0.0001082531754731929 0 +1598 0.01837499999999797 -0.0002165063509461755 0 +1599 0.01818900502108298 -0.0003788247496338395 0 +1600 0.01469291493541452 -0.0001081334369996182 0 +1601 0.003938293039151781 -0.0001089820999476699 0 +1602 0.00418750000002849 -0.0001082531754727912 0 +1603 0.004122469253255343 -0.0002111965691133413 0 +1604 -0.01484501897209095 -0.01796337400944603 0 +1605 0.01493999042325314 -0.000110692132904026 0 +1606 0.01081170615907688 -0.0001046932914553414 0 +1607 0.01087500000000708 -0.0002165063509457835 0 +1608 0.01206250000000324 -0.0001020401864809367 0 +1609 0.006687500000020432 -0.0001082531754728166 0 +1610 0.00675000000002029 -0.0002165063509457005 0 +1611 0.006625000000020501 -0.0002165063509456186 0 +1612 0.006875000000020067 -0.0002165063509456134 0 +1613 0.01368973982194993 -0.0001041709005489566 0 +1614 0.01418749999999646 -0.0001069544394084993 0 +1615 0.01426479246460669 -0.0002143537770431127 0 +1616 0.004313172172166746 -0.0001086412542379765 0 +1617 0.004374360935476346 -0.0002184651598777892 0 +1618 0.004512014675108583 -0.0002273023428008236 0 +1619 0.004448268300256743 -0.0003220293221684792 0 +1620 0.004646735951409953 -0.0002286283242819414 0 +1621 0.004743111044289392 -0.0003540066401866447 0 +1622 0.00457067469433039 -0.000111376987457694 0 +1623 0.01031242335780166 -0.0001080002865390765 0 +1624 0.01023348320043078 -0.0002444767806216006 0 +1625 0.008687500000014071 -0.0001082531754727963 0 +1626 0.008625000000014248 -0.0002165063509457798 0 +1627 0.008502550144935258 -0.0002281530436993779 0 +1628 0.007187500000018949 -0.0001082531754727987 0 +1629 0.0071250000000192 -0.0002165063509454452 0 +1630 0.00725000000001889 -0.0002165063509455087 0 +1631 0.006187500000022135 -0.0001082531754728161 0 +1632 0.006125000000022279 -0.0002165063509457612 0 +1633 0.006250000000022061 -0.000216506350945566 0 +1634 0.006000000000022504 -0.0002156567958642159 0 +1635 0.006199789433517473 -0.0003291059968109138 0 +1636 0.009062500000012835 -0.0001082531754727359 0 +1637 0.009119662830067338 -0.0002196677396236512 0 +1638 0.008313138803290213 -0.0001078843622299903 0 +1639 0.008239929904396726 -0.0002227999968259645 0 +1640 0.008112741227745777 -0.0002056543128624038 0 +1641 0.007997481162365268 -0.0002895346809606006 0 +1642 0.008001030358869067 -0.0001533682828269013 0 +1643 0.007874757005457849 -0.0002065292093858396 0 +1644 0.007873774178348917 -0.000353035205935044 0 +1645 0.007750600956615136 -0.0002749257342126145 0 +1646 0.007675576913044237 -0.0001651272463213964 0 +1647 0.007726474324636043 -0.0004243206557195621 0 +1648 0.01281250000000085 -0.0001082531754727756 0 +1649 0.01275014432239291 -0.0001987797976205124 0 +1650 0.01263170247644587 -0.0002427865432736231 0 +1651 0.009687053412636096 -0.0001079953381316851 0 +1652 0.01193796286216624 -0.0001016326247696235 0 +1653 0.01187322931113672 -0.0002019724964610319 0 +1654 0.005812500000023262 -0.0001082531754727448 0 +1655 0.005750000000023374 -0.000216129426089736 0 +1656 0.005625000000023687 -0.0002142877729123329 0 +1657 0.005312500000024832 -0.0001082531754727998 0 +1658 0.005375000000024595 -0.0002135179730301288 0 +1659 0.0052500000000249 -0.0002111895629645852 0 +1660 0.005187500000025217 -0.0001073670441425681 0 +1661 0.01131336051187726 -0.000106839442007804 0 +1662 0.01137500000000538 -0.0002165063509457412 0 +1663 0.007312492476227637 -0.0001082488316099586 0 +1664 0.01306154147948904 -0.0001073266193663842 0 +1665 0.01299069020535162 -0.000224251727013999 0 +1666 0.006937500000019755 -0.0001082531754727444 0 +1667 0.004937770415323274 -0.0001080970511281336 0 +1668 0.005002571416385608 -0.0002311690995698831 0 +1669 0.009312500000012087 -0.0001082531754727044 0 +1670 0.01393816049826487 -0.000107799006116365 0 +1671 0.01388766441030992 -0.0002080612929441758 0 +1672 0.01256250000000163 -0.0001082531754726041 0 +1673 0.005562500000024014 -0.0001078834124671882 0 +1674 0.006312500000021691 -0.0001082531754726959 0 +1675 0.008438031491380752 -0.0001101328220579168 0 +1676 -0.01950058736326259 -0.0002169555640830304 0 +1677 0.006562500000020813 -0.0001082531754727355 0 +1678 0.01443806792759703 -0.0001063314198497575 0 +1679 0.01043716461053417 -0.0001066507389478666 0 +1680 0.01230664559233645 -0.0001061386557338638 0 +1681 0.00593750000002281 -0.0001081115829591805 0 +1682 0.0135612947032286 -0.0001046159966552512 0 +1683 0.009437500000011662 -0.0001082531754727586 0 +1684 0.009500000000011458 -0.0002145217469120271 0 +1685 0.008937500000013294 -0.000108253175472772 0 +1686 0.008878266372201446 -0.0002103732949574326 0 +1687 0.01068736769318593 -0.0001048699644333548 0 +1688 0.00400207460259997 -0.0002164198436409007 0 +1689 0.009624369390300785 -0.0002177841175277195 0 +1690 0.008761559287395172 -0.0002187969590449753 0 +1691 0.01312499999999979 -0.0002165063509454738 0 +1692 0.0130625000000002 -0.0003247595264186727 0 +1693 0.009249614810966545 -0.0002150770360139964 0 +1694 0.009744074482150328 -0.0002166152133062713 0 +1695 0.004244515186099287 -0.0002196276337931349 0 +1696 0.004866291237058764 -0.0002314010585784089 0 +1697 0.005079758078312856 -0.000345909853018848 0 +1698 0.009375440141115981 -0.000212453574350004 0 +1699 0.008997929189916565 -0.0002158975773239101 0 +1700 0.01286429897043622 -0.0002213565247641667 0 +1701 0.0140065796017477 -0.0002176899487874526 0 +1702 0.005127360654149971 -0.0002187239787354953 0 +1703 0.007000000000019683 -0.000216506350945345 0 +1704 0.006925000000019906 -0.000307329875860995 0 +1705 0.005875000000022981 -0.0002154287837890423 0 +1706 0.00582312431691075 -0.0003232668476375659 0 +1707 0.005500000000024191 -0.0002137980654185157 0 +1708 0.005417691933527391 -0.0003268050172955892 0 +1709 0.008367343460180176 -0.0002324978619516123 0 +1710 0.006375000000021482 -0.0002165063509449906 0 +1711 0.006500000000020884 -0.0002165063509452049 0 +1712 0.006582694546183302 -0.0003393009027404113 0 +1713 0.007374991222262377 -0.0002165012831054001 0 +1714 0.007504448125344165 -0.0002223823024556866 0 +1715 0.007312498537059684 -0.0003294248958304196 0 +1716 0.007609249810177245 -0.0003417516555830947 0 +1717 -0.01203747202636779 -0.002284376672390819 0 +1718 -0.0006724040275912076 -0.0003408744973311513 0 +1719 -0.0193079202450262 -0.0003425434645822907 0 +1720 0.007576463373500454 -0.0001137922705559412 0 +1721 0.008285819486686993 -0.0003801375488729028 0 +1722 -0.007929133324622662 -0.0003298995602641386 0 +1723 -0.00798213056233767 -0.0004901457569466656 0 +1724 0.004086563705066136 -0.01657134302031753 0 +1725 0.01212919007394176 -0.0002157656189092074 0 +1726 0.01245446467999701 -0.005006701122113725 0 +1727 0.009183871063046025 -0.0003614260512830947 0 +1728 0.008582496523912859 -0.0003714737155531186 0 +1729 -0.01806032053238577 -0.01500230920016444 0 +1730 0.01468273686135703 -0.0007738600485204673 0 +1731 -0.0005124428873708733 -0.0003343029956658303 0 +1732 -0.01705593626120491 -0.0003354675375801679 0 +1733 0.01168973959438161 -0.0001069601450561992 0 +1734 0.01848332829611473 -0.009577508407353583 0 +1735 -0.01834836784378145 -0.009570246838659103 0 +1736 -0.01885060206749407 -0.001694621526555436 0 +1737 -0.01551286314414733 -0.0002012760402579786 0 +1738 0.002006077896643076 -0.001976955316162936 0 +1739 -0.006643917006399097 -0.0002306649136292727 0 +1740 0.001558327618304424 -0.0003572220003664115 0 +1741 0.009877071686821375 -0.0002237769407804504 0 +1742 0.01287550502218955 -0.0163409966799544 0 +1743 -0.01756387596664919 -0.0001026150930979506 0 +1744 -0.0106687291620108 -0.007385217079527765 0 +1745 -0.006816533639001495 -0.0001017800784966351 0 +1746 0.01147501285552609 -0.0013992575143267 0 +1747 0.01188066852437597 -0.001881324286924461 0 +1748 0.01063206193020424 -0.0002134825049314886 0 +1749 0.01606128704964972 -9.900953487918416e-05 0 +1750 0.01893034515041019 -0.000328157108005265 0 +1751 -0.00743162521427308 -0.000463517476637385 0 +1752 0.01841647620678422 -0.01520926339506182 0 +1753 -0.0005657229130689776 -0.0001049497423927336 0 +1754 -0.0008923073698373123 -0.000472393722833847 0 +1755 0.01006260366011918 -0.0001016578570991226 0 +1756 0.008924642493613761 -0.001159561469727339 0 +1757 0.008601349636653164 -0.001449854760609677 0 +1758 -0.01190540338866053 -0.003315813646053508 0 +1759 -0.01654816038564969 -0.0004443311916910271 0 +1760 0.002430654461639517 -0.0001074797086658384 0 +1761 -0.01581023269423065 -0.0001096652509009759 0 +1762 -0.01981592773531159 -0.0001013435100079446 0 +1763 -0.01494072625632802 -0.0001068748521917769 0 +1764 -0.006439842548332346 -0.0001046488215543208 0 +1765 -0.005066185144277134 -0.0001073318743759654 0 +1766 0.0164374999999956 -0.0001000672018213057 0 +1767 -0.01230925882623196 -0.0001070219477323836 0 +1768 -0.007815069435584049 -0.0001061547525424013 0 +1769 0.01768431313607993 -0.0001071635234420662 0 +1770 -0.01081228302329032 -9.62420982375955e-05 0 +1771 0.000440621053209334 -0.0001070229024559274 0 +1772 -0.002309377175868371 -0.0001070293731968552 0 +1773 -0.01837618002791381 -0.01713597320043219 0 +1774 0.01989825438896531 -0.0001766206110347751 0 +1775 0.01838277092212052 -0.01718445510611212 0 +1776 -0.0135185552075523 -0.001535058860581908 0 +1777 -0.01500555301766101 -0.0002110677792980147 0 +1778 -0.006507278206511371 -0.000212304276448279 0 +1779 -0.01224049377538101 -0.0002143878623785298 0 +1780 -0.007880735690931085 -0.0002123174453704193 0 +1781 0.01761572978194419 -0.0002166868353704344 0 +1782 0.0005057312599259604 -0.0002123332230413805 0 +1783 -0.002239987438329886 -0.0002183936377221602 0 +1784 -0.009277177557884366 -0.001893899009761282 0 +1785 0.01531249999999421 -9.946160869630384e-05 0 +1786 0.015128302578015 -0.0002236385171990294 0 +1787 -0.01246846291047909 -0.0004860030586660922 0 +1788 -0.01899681297160713 -0.0005876602867294606 0 +1789 -0.01110999607835255 -0.0004590594251317213 0 +1790 -0.0113531811854343 -0.0003697703500810826 0 +1791 -0.01097087883064897 -0.01861422160298608 0 +1792 -0.0006336496794071185 -0.0002115124561986143 0 +1793 -0.01421703366465883 -0.000221225009920192 0 +1794 0.01868288504089028 -0.00575870444794676 0 +1795 0.01303127003132209 -0.001183118492520957 0 +1796 -0.009054623135096324 -0.0003065729802543527 0 +1797 -0.009309618695159425 -0.000329795411931184 0 +1798 -0.008561616359500588 -0.0003293869578394063 0 +1799 -0.008305989826004313 -0.0003057641308911962 0 +1800 -0.008473585387790503 -0.0005189912261175518 0 +1801 -0.01181249999999036 -0.0003247595264193203 0 +1802 0.0068021473307113 -0.0003259473004992149 0 +1803 0.007062500000019032 -0.0003247595264173962 0 +1804 0.006054715055087448 -0.0003261861551347737 0 +1805 0.00631720520691508 -0.0003040826077234036 0 +1806 -0.003563273660053301 -0.0003383244076771502 0 +1807 -0.003818390945346422 -0.0003075120422259343 0 +1808 -0.003660881258741269 -0.0005185883063228028 0 +1809 -0.003068245767738535 -0.0003065480177211517 0 +1810 -0.002912033474138015 -0.0005023696135933901 0 +1811 0.01730856929879865 -0.0003433958250443705 0 +1812 -0.01906249999999873 -0.0003251772480479985 0 +1813 0.01931504360051507 -0.000337072095890562 0 +1814 0.01906130752506726 -0.0003307506898351056 0 +1815 5.759832015932848e-05 -0.0003083097465031629 0 +1816 -6.249999997573359e-05 -0.000324759526419265 0 +1817 -0.01944183599381223 -0.0003360518725542421 0 +1818 0.0009604513282737994 -0.0003531229081185195 0 +1819 -0.01918477395537205 -0.0003335146199478585 0 +1820 -0.001936606160215871 -0.0003286876904523523 0 +1821 -0.002687499999979283 -0.0003247595264197837 0 +1822 0.01717927796424071 -0.0003276372898968647 0 +1823 -0.01718749999999646 -0.0003247595264192085 0 +1824 -0.01730638450903692 -0.0004701017027819977 0 +1825 -0.01694991856461931 -0.0004946923021357454 0 +1826 -0.01694017833843654 -0.0003209461318710458 0 +1827 -0.003187499999978991 -0.0003247595264207218 0 +1828 -0.003254181107310213 -0.0004812321945659041 0 +1829 0.003197235989412254 -0.0003150556978106977 0 +1830 -0.01667415789731179 -0.000333771703266161 0 +1831 -0.003441296962307102 -0.0003087562196503324 0 +1832 -0.00393749999998051 -0.0003247595264192941 0 +1833 -0.0041938199182257 -0.0003249096720209441 0 +1834 -0.004680807781148052 -0.0003146719720169988 0 +1835 -0.005687773895930701 -0.0003310255343237847 0 +1836 0.006437500000020939 -0.0003247595264166753 0 +1837 0.006692045172220469 -0.0003069449958754461 0 +1838 -0.01295126075021916 -0.0003265804088784194 0 +1839 -0.01291230878020727 -0.0004620623077713623 0 +1840 -0.01268749999999095 -0.0003247595264193212 0 +1841 0.007187225596505431 -0.0003344651160867082 0 +1842 0.007456405083968461 -0.0003410896749719717 0 +1843 -0.007433492208332644 -0.0003204176670443473 0 +1844 -0.008192642547604921 -0.000322741147896182 0 +1845 -0.01168773743104439 -0.0003332292872263825 0 +1846 -0.008679094528221319 -0.0003090610707466889 0 +1847 -0.008859332753615079 -0.0005135642786724112 0 +1848 -0.008937525763367746 -0.0003296808764856274 0 +1849 -0.009448199756707833 -0.0003415333082371918 0 +1850 -0.01018164785069727 -0.0003242093976661495 0 +1851 0.003686030098019959 -0.001368643830334739 0 +1852 0.003430055250050976 -0.00194435699847952 0 +1853 -0.01025400909907238 -0.0004655086710732552 0 +1854 0.01737499999999674 -0.0004709314695928461 0 +1855 0.01755287027271466 -0.0004360321153298116 0 +1856 0.007395476033369215 -0.0004828685965123229 0 +1857 0.007996258860587729 -0.0004346980213152597 0 +1858 0.01037347853713211 -0.0002179672484879762 0 +1859 0.01033070588006081 -0.0003650931497927158 0 +1860 0.01462499999999503 -0.0002052984143254704 0 +1861 0.0005436732629635239 -0.002868476350664335 0 +1862 -0.003749898197928369 -0.001532336995461938 0 +1863 0.01349999999999866 -0.0002129484122390303 0 +1864 0.006128616504091426 -0.0004762090019137846 0 +1865 -0.01374989596258474 -0.0002043280436909821 0 +1866 0.01550893304308665 -0.001069927100846514 0 +1867 0.004697512945357099 -0.0001044470958183802 0 +1868 -0.01955620747310781 -0.0003147411219084331 0 +1869 -0.005874999999982648 -0.0002148834533851355 0 +1870 0.001881308845607337 -0.0002161093151941731 0 +1871 0.01331131542717772 -0.0001170278006225606 0 +1872 -0.007181880170208721 -0.01525151459262755 0 +1873 -0.01568253272131372 -0.0001002699429692597 0 +1874 0.002787645668445313 -0.001315369655359422 0 +1875 -0.017379363403655 -0.0002158873826830426 0 +1876 0.01572537084771284 -0.0007793763449747875 0 +1877 0.01125540854251559 -0.0002133837274713839 0 +1878 0.01131587394510962 -0.0003287103612800342 0 +1879 0.01413228353784845 -0.0002177919021445902 0 +1880 0.01949528800674909 -0.0002137858803756499 0 +1881 0.01944808901081591 -0.0003336016213711446 0 +1882 0.009928428109490807 -0.0001017445257036623 0 +1883 -0.001244812839811146 -0.002069834353669646 0 +1884 -0.001878434963914289 -0.002540618615053095 0 +1885 0.01661424255781802 -0.0006254394106145772 0 +1886 -0.01318393764647223 -0.0003351666596066146 0 +1887 0.00651668555390564 -0.0005205872134208236 0 +1888 -0.01362499999999203 -0.000212638503502645 0 +1889 0.01625070311451153 -0.01663448292384271 0 +1890 0.009570396294236538 -0.0003104814952562738 0 +1891 0.01550403452628424 -0.0002043256614900173 0 +1892 -0.01864740251632343 -0.002456996788217311 0 +1893 0.01677255034315601 -0.01256438718074184 0 +1894 -0.00580658436793196 -0.01663808951587986 0 +1895 0.01562268128898561 -0.0002060312036199905 0 +1896 -0.006881908605394844 -0.0002285575036342763 0 +1897 0.01878683148252902 -0.002012115943365391 0 +1898 -0.01351118683588533 -0.0003967432030043865 0 +1899 0.0105062026833083 -0.0002175835088006952 0 +1900 -0.001281886426794998 -0.01828679651024218 0 +1901 -0.01810876508468817 -0.0002058990349343937 0 +1902 0.01636227068171621 -0.0002124978698086685 0 +1903 -0.005147495862004043 -0.0002041804089138706 0 +1904 0.002083704900234693 -0.0003345364580605889 0 +1905 0.002245103630220771 -0.0001928550968165102 0 +1906 0.002361903293987955 -0.000208673629296766 0 +1907 -0.01395940533802631 -0.0002903492535544217 0 +1908 0.003372685685177305 -0.0001949278005948247 0 +1909 0.003527439978833155 -0.0003590761583055847 0 +1910 0.004753554733984952 -0.0002051599096540748 0 +1911 -0.01746858163270141 -0.0004798060108905078 0 +1912 0.01011166348202397 -0.0002101230385930575 0 +1913 0.01786538223361495 -0.0006422509271994164 0 +1914 0.01106485434509225 -0.0001180665223250381 0 +1915 -0.01062499999998848 -0.0001978602273918015 0 +1916 -0.01846100133333815 -0.01163942203625712 0 +1917 -0.001071186446012587 -0.0004458752240900255 0 +1918 0.01476421411426514 -0.0002160667866612553 0 +1919 0.0007411190080782102 -0.000688147124728193 0 +1920 -0.000773244266815261 -0.0006676491459626159 0 +1921 0.01638086663148151 -0.0006646590089251223 0 +1922 0.01772098445476795 -0.0004807179333126471 0 +1923 0.00813962284704794 -0.001601927503377028 0 +1924 -0.009229325829280613 -0.0005070337364815295 0 +1925 -0.01969260977564924 -0.0005025171905196643 0 +1926 -0.01591637406615667 -0.0003973780995418762 0 +1927 0.01963117099172192 -0.001425980774287397 0 +1928 0.009644089228079768 -0.001590128102493509 0 +1929 0.01362518819561012 -0.0002045303841805556 0 +1930 0.01358581932278521 -0.0003276091366138125 0 +1931 0.007330499973325485 -0.01849776399974453 0 +1932 0.01501180140396737 -0.0002030159893722978 0 +1933 0.01924999999999836 -0.0004585694106939172 0 +1934 0.01955648635711702 -0.0004535264712395739 0 +1935 -0.01193652353250616 -0.0004665466965150886 0 +1936 0.009451275469349468 -0.0003681053188295578 0 +1937 -0.0002062262660345063 -0.0004694014844478499 0 +1938 -0.002497391615549141 -0.0004283844270855039 0 +1939 -0.0148793163271621 -0.0004758585267926459 0 +1940 0.0003976114868529988 -0.0004597958545937468 0 +1941 -0.01887579433882598 -0.000462707602140122 0 +1942 0.01423668594661415 -0.0003442646471060174 0 +1943 0.002230981034667966 -0.01673053781536019 0 +1944 -0.003972407142076526 -0.0004923313607903426 0 +1945 -0.009573533351604015 -0.0004853474832551249 0 +1946 0.01251847946301092 -0.0002123601072260871 0 +1947 -0.001066633541028427 -0.000306525490958363 0 +1948 -0.01629402107535844 -0.0003097526981376117 0 +1949 -0.001448351442287225 -0.000329666623914096 0 +1950 -0.01867856897194922 -0.0003087952819236377 0 +1951 -0.001557593312660247 -0.0003136566275860682 0 +1952 -0.004302986139084384 -0.0003084011124641047 0 +1953 -0.004452600373806894 -0.0005407395972030828 0 +1954 0.01960672946421285 -0.0002028142600735535 0 +1955 0.01176442344348054 -0.0002081789719716686 0 +1956 0.0118116113907939 -0.0003199043211049719 0 +1957 -0.01849920566147168 -0.0004627075957911484 0 +1958 0.001365480342021072 -0.0002119588133264661 0 +1959 -0.0003395144896245842 -0.003717063364506928 0 +1960 -0.01302792211760546 -0.002157997629282872 0 +1961 0.0107500000000073 -0.0002009447053541856 0 +1962 0.01058672615082666 -0.000345285643995575 0 +1963 0.01082116504163497 -0.0003354896131527828 0 +1964 0.01841587759989028 -0.01150456675121032 0 +1965 -0.006949284087332005 -0.01848507925826753 0 +1966 0.01530278462584025 -0.0008774449744290138 0 +1967 -0.002330758152675665 -0.01550170051133357 0 +1968 -0.009827812110127518 -0.0003411681053989084 0 +1969 0.01234020488797524 -0.0002096661701999573 0 +1970 -0.01430416922985624 -0.0006672834954204598 0 +1971 0.005687441442328768 -0.0003238500460372332 0 +1972 0.005766180412212608 -0.0004756820108820445 0 +1973 0.01898806245426645 -0.0004569501905344066 0 +1974 0.0170018490760176 -0.0001889376004929822 0 +1975 -0.001682658096413423 -0.003604612728368432 0 +1976 -0.01256104039821244 -0.0006855398240649291 0 +1977 0.007912756167803622 -9.083017634149884e-05 0 +1978 -0.0175571201032317 -0.003988607702442083 0 +1979 -0.01731136686404748 -0.0003114034336718655 0 +1980 -0.007715182485502864 -0.001264359585541058 0 +1981 -0.007881589265110806 -0.0006456068992319357 0 +1982 0.005201761266138121 -0.000331496381077112 0 +1983 0.01508465176394675 -0.0007633190172298335 0 +1984 0.0007006392312103996 -0.002128944315703027 0 +1985 0.01126081930971916 -0.0009882618197650792 0 +1986 0.01107020271564384 -0.001335549102807354 0 +1987 0.01858925113776089 -0.0006398321357745684 0 +1988 0.00687500000002037 -0.0004541176245780098 0 +1989 -0.009681505153991431 -0.0003389358116189848 0 +1990 -0.01282845811428569 -0.0006607344931254658 0 +1991 0.01245140359683533 -0.0009497245720897856 0 +1992 -0.0106877498389157 -0.001340051418130767 0 +1993 -0.01045616001322846 -0.001819372688433961 0 +1994 -0.01108485844184004 -0.001862093822056467 0 +1995 -0.002777096697446959 -0.001360116106811242 0 +1996 0.003422437980138045 -0.004249904805362434 0 +1997 -0.01710899929955393 -0.001546975952447596 0 +1998 -0.007449612928215142 -0.0006658972467719965 0 +1999 0.001590507797941628 -0.001132880664732478 0 +2000 -0.01118453875095242 -0.0006596486192626632 0 +2001 0.008086020881262496 -9.301257834110197e-05 0 +2002 0.009605949151735318 -0.0004670968186176087 0 +2003 -0.003277454467389069 -0.002258187776704846 0 +2004 0.01980159257810179 -0.0002058701742269937 0 +2005 -0.001891644262355176 -0.0006970405020269975 0 +2006 -0.01799700900838618 -0.0008496631574815396 0 +2007 0.01299305028851215 -0.0004667441321237549 0 +2008 -0.002812499999979285 -0.0003206484007046134 0 +2009 0.01600435716718471 -0.0001935943871241061 0 +2010 -0.01598138050847895 -0.001687403239521383 0 +2011 0.005780882362490286 -0.001327123211036024 0 +2012 0.01518059795498454 -0.00334968472788285 0 +2013 0.01518850281704367 -0.004704144166608823 0 +2014 -0.01506823608164096 -0.0004404081824499571 0 +2015 0.009358685967788084 -0.001101327787525495 0 +2016 -0.01938984056509418 -0.0004656781545843729 0 +2017 0.01881307736452219 -0.0003106032702517488 0 +2018 0.01537421374662744 -0.0001975680652798047 0 +2019 -0.01306855271160676 -0.000303295063276916 0 +2020 -0.007814720572365036 -0.0003095492657136402 0 +2021 -0.007192243660445188 -0.0003218381172606872 0 +2022 -0.01791731762087649 -0.0001953351276148916 0 +2023 0.005938768053792252 -0.0002996309522091263 0 +2024 -0.01476692589032774 -0.0006647828748960901 0 +2025 0.01343061267496312 -0.001090458694525738 0 +2026 0.01232088305792398 -0.001191713280432345 0 +2027 -0.01222660729949684 -0.001320437602153276 0 +2028 -0.00154906477484584 -0.001533926182849415 0 +2029 0.01983646159292647 -0.0006927276053967215 0 +2030 0.01156250000000485 -7.878845671312444e-05 0 +2031 0.0114921328894677 -0.0002009605457656489 0 +2032 -0.0004182169328064437 -0.00247392069595035 0 +2033 0.016924641925166 -0.0009056753334270636 0 +2034 -0.01566764239925352 -0.0006481817691887477 0 +2035 0.01928263178493864 -0.0006626952585130628 0 +2036 -0.01206249999999015 -0.0003181594015926998 0 +2037 -0.01774045957050603 -0.0001874390225828607 0 +2038 -0.001973556138535918 -0.01369968863816177 0 +2039 0.01020271777308716 -0.0004067394669176931 0 +2040 0.01695360661328591 -0.008735313334250787 0 +2041 -0.01313143104788714 -0.01670031458661257 0 +2042 -0.0134433323700298 -0.0003073120006130824 0 +2043 0.01375816265229413 -0.0001977661283834863 0 +2044 0.01156980070726161 -0.002557321517894535 0 +2045 0.01274791382386984 -0.0003226296810577279 0 +2046 -0.01519602081551983 -0.0006735779457900178 0 +2047 0.002506897153956461 -0.001135266567689032 0 +2048 0.01252744624257134 -0.0003184416788477269 0 +2049 0.002937500000028484 -0.0003122771948577429 0 +2050 0.003000970795974649 -0.0004276913485221695 0 +2051 -0.001192922341174826 -0.01115527416959602 0 +2052 0.01099999999998899 -0.0187705717930787 0 +2053 0.009298013345232397 -0.002219504519033679 0 +2054 0.01053382653293846 -0.001934578254083808 0 +2055 0.01625322473384112 -0.0001854668873435174 0 +2056 0.008132737978946765 -0.0005045480414238996 0 +2057 -0.009035200862812899 -0.003742267944013828 0 +2058 0.006279349090437651 -0.002055412087036876 0 +2059 0.007061040391347809 -0.001946958849332733 0 +2060 0.01707864672535116 -0.0004389523709657945 0 +2061 0.004684776483751255 -0.001194110883795905 0 +2062 0.01224610024278888 -0.0001884836850191563 0 +2063 0.00723555544423467 -0.001429347353083686 0 +2064 0.005550762335427484 -0.0003338005809548955 0 +2065 0.005454206893823297 -0.0004818911874676714 0 +2066 0.004548267783324557 -0.01852875690931755 0 +2067 0.01601002643298694 -0.0005631952299333193 0 +2068 -0.0004203355295003964 -0.0004972025679639861 0 +2069 -0.01006930202404274 -0.0003012517641808208 0 +2070 -0.009914604720848494 -0.0004988171311752099 0 +2071 -0.01399999999999265 -0.0001885981157725687 0 +2072 0.01212463888064765 -0.0003400415277507763 0 +2073 0.01097809261420692 -0.0001981246652030019 0 +2074 0.003752887348477922 -0.001021188187113692 0 +2075 0.00434818501415297 -0.00110583795133599 0 +2076 0.005357982248762672 -0.001228639442713927 0 +2077 0.005233759120972826 -0.00166946200076387 0 +2078 0.005599142090001565 -0.0006198709867022215 0 +2079 0.007605263718789387 -0.0002349574409170059 0 +2080 -0.004574113185491125 -0.002881104668220087 0 +2081 0.006875515969470142 -0.001418964158300208 0 +2082 0.01618963248750696 -8.912325001270794e-05 0 +2083 -0.01321095097494385 -0.0004674045831027478 0 +2084 0.01437732716785279 -0.0001948250924461147 0 +2085 0.008440989303469416 -0.002116505433745882 0 +2086 -0.01370135974904286 -0.002840101184739859 0 +2087 -0.01439143286418065 -0.002340400765167603 0 +2088 0.004199670576446499 -0.001562002520900099 0 +2089 0.0140933564672117 -0.001120674176134213 0 +2090 0.01202748760966607 -0.000418817395243778 0 +2091 0.0001499986437168603 -0.0006337417961921135 0 +2092 -0.002188719660519542 -0.0003178603236697367 0 +2093 -6.644420428899246e-05 -0.0006481163407242721 0 +2094 -0.01217584062959764 -0.0003368655236801744 0 +2095 0.01340398235774953 -0.0001992651855282232 0 +2096 -0.01453408402963323 -0.000837239317608389 0 +2097 -0.0140376875006075 -0.0008897268531801291 0 +2098 -0.01225233756711573 -0.0004822955342920872 0 +2099 0.01439348458831747 -0.0009135913735606888 0 +2100 0.01474081842169763 -0.001079475774920979 0 +2101 0.01755395304462429 -0.000307822629993435 0 +2102 -0.01144990219644122 -0.0003112601238326817 0 +2103 -0.0114811470695762 -0.000424701708288886 0 +2104 -0.019795376503492 -0.0003484875591664791 0 +2105 -0.01355073237356988 -0.0002919374173346673 0 +2106 -0.01064779836750517 -0.0003206306354179143 0 +2107 -0.01060410095887214 -0.0004527430030081474 0 +2108 -0.01535165849666518 -0.001766835666130508 0 +2109 -0.01545545912461378 -0.0008309828792357138 0 +2110 -0.01328465445166212 -0.001248316959371956 0 +2111 0.001187768593475384 -0.0003041080935932157 0 +2112 0.01190853110885241 -0.0009164346325656717 0 +2113 0.01061119802767857 -0.0009761518618087166 0 +2114 0.01005911264698175 -0.001003564811290806 0 +2115 0.007735778434257637 -0.0005952166906149286 0 +2116 0.008609239603082264 -0.001075545207191461 0 +2117 -0.01499475606061147 -0.0008521755631299306 0 +2118 -0.004825207302933688 -0.001485798760230861 0 +2119 -0.01434533667897457 -0.001748253276955915 0 +2120 0.001967419607351446 -0.002753999580812823 0 +2121 -0.006466396291582947 -0.001632771055257137 0 +2122 -0.0170252267567579 -0.01308259448661584 0 +2123 0.01479105668045175 -0.0003176433027543934 0 +2124 -0.01866571238376155 -0.0004449777476104111 0 +2125 -0.005943222349113265 -0.0003089664665317992 0 +2126 -0.01991177725144239 -8.673054736148068e-05 0 +2127 0.01735892743701551 -0.0006858853770970757 0 +2128 0.01829358506508897 -0.0005291784930562842 0 +2129 0.01199496038902732 -0.000192414688855972 0 +2130 -0.0104822794822827 -0.0002016457414814399 0 +2131 -0.01043566857130237 -0.000295628884276179 0 +2132 -0.0003388681077639059 -0.001504628121907921 0 +2133 -0.0185958666956053 -0.01862006649275245 0 +2134 0.01991224166847549 -8.624584420281521e-05 0 +2135 0.01859586669560659 -0.01862006649275438 0 +2136 0.007509003899548924 -0.0007084886701939275 0 +2137 -0.006559233852423465 -0.0003376070003839879 0 +2138 -0.01506645206865769 -0.0003042569681638754 0 +2139 0.0005690385784667161 -0.0003139282027829623 0 +2140 0.00406998669513855 -0.0003035143506115943 0 +2141 0.00416673122635386 -0.0003039305862882504 0 +2142 0.001953556615533453 -0.0003216556147291721 0 +2143 -0.01800524923596119 -0.0001792613344958393 0 +2144 0.01670818544309713 -0.001135062264942433 0 +2145 -0.01655265777056326 -0.0006491744805401632 0 +2146 -0.01610402706160409 -0.0006709982076604779 0 +2147 0.00866113060154633 -0.003489021106968842 0 +2148 0.01264910247751987 -0.001225610601211612 0 +2149 0.002727763685892086 -0.0004705716503360302 0 +2150 0.001332558353472117 -0.0004471566400481571 0 +2151 0.01620610008557923 -0.000877144747286396 0 +2152 -0.005683728441141867 -0.004511209490191865 0 +2153 0.005308460591638187 -0.0003003705525520413 0 +2154 -0.007403805407037414 -0.00270219635116961 0 +2155 -0.01052673627958289 -0.002537620323306779 0 +2156 0.001643359320925007 -0.0005235636355194853 0 +2157 -0.002716542464973103 -0.0006227075607671867 0 +2158 -0.01719121948136659 -0.0007158489008852766 0 +2159 -0.00610122177767497 -0.0006602817994892343 0 +2160 -0.01079880873802818 -0.000565259832327117 0 +2161 -0.005264516550936404 -0.0006290385340411697 0 +2162 0.01863002360429986 -0.001514369022456758 0 +2163 -0.01387797320724612 -0.0001893708436660039 0 +2164 0.00893088390538499 -0.0003013798245489252 0 +2165 0.01396701213457881 -0.0003299882428708816 0 +2166 0.001915856537111677 -0.0004424577609979523 0 +2167 -0.01676459740902157 -0.0007603585634802854 0 +2168 -0.00232498498172382 -0.0006489460343778646 0 +2169 -0.002441661517470356 -0.0008652406084457257 0 +2170 0.002187322652639109 -0.0004776069221342891 0 +2171 -0.01079196711682561 -0.003384924310185465 0 +2172 0.001647894360784572 -0.01218918964765174 0 +2173 -0.001179600248797841 -0.0006440218593828925 0 +2174 -0.01762212622788045 -0.0001762166167234446 0 +2175 -0.009856512898061904 -0.001729888733681422 0 +2176 0.01302757779285724 -0.00168131941276963 0 +2177 -0.01862240853608321 -0.000649139983853618 0 +2178 -0.01844966672898518 -0.0008333915343206826 0 +2179 0.01704242893388915 -0.000610062660287791 0 +2180 0.007876018905864274 -0.002057359323386796 0 +2181 -0.017642702679841 -0.0007769821620639639 0 +2182 0.01115516093963988 -0.0001958229983019608 0 +2183 0.01890553754728194 -0.0006246850946317808 0 +2184 -0.0004745614397125088 -0.000744564265985817 0 +2185 -0.007238061824588304 -0.0008180955310274461 0 +2186 0.01598505050150523 -0.0007391722275476007 0 +2187 -0.009413537343055549 -0.0006187599140680133 0 +2188 -0.01079897572721832 -0.0002958535450961025 0 +2189 0.002518321407776376 -0.0005333298238462135 0 +2190 -0.01141013003068927 -0.0006963208120145396 0 +2191 -0.01161684120199356 -0.0004362976706209531 0 +2192 0.01776087937346625 -0.0009178706529564717 0 +2193 -0.01884318620168527 -0.0007057188313280765 0 +2194 -0.01749193647188525 -0.0009788750416452763 0 +2195 0.01718149314334085 -0.006759145028212316 0 +2196 0.004106186117632034 -0.0004276460743367645 0 +2197 0.00396147000931709 -0.0005029726795209965 0 +2198 0.014195986161064 -0.01701976633916184 0 +2199 0.01124564373163434 -0.0004523386993726725 0 +2200 -0.01010199024758887 -0.0006168492075347952 0 +2201 0.0158353409214744 -0.0001959675484264783 0 +2202 0.01192902489553749 -0.000308001988485459 0 +2203 -0.01431249999999315 -6.844321611216246e-05 0 +2204 0.01780378147417181 -0.001878694978803402 0 +2205 0.0132214759781896 -0.0001968366482256409 0 +2206 0.01271886745919357 -0.002171467485706245 0 +2207 0.01679227573405606 -0.002403297264475597 0 +2208 -0.01547998314940158 -0.00312013433190222 0 +2209 0.0003161979103554525 -0.0008072943594877222 0 +2210 0.0002270988669427955 -0.001056791418068841 0 +2211 -0.002227562289531749 -0.0004516188512739394 0 +2212 0.01911674039114031 -0.0004345250356403892 0 +2213 0.007260296174973431 -0.000447566558850921 0 +2214 -0.004132749358790529 -0.0005043202419631539 0 +2215 -0.005873742397026818 -0.0007699979466616626 0 +2216 0.003990974521957506 -0.005349148360186171 0 +2217 0.005808291541406343 -0.002688448411253693 0 +2218 0.001076719337425056 -0.0004569358784285223 0 +2219 -0.00814530974149676 -0.0004970376757057964 0 +2220 -0.01899952146208593 -0.0004266690210539273 0 +2221 -0.01911342054367478 -0.0004349035737164338 0 +2222 -0.01562363048454752 -0.000180023154213626 0 +2223 0.009999174124303106 -0.0003014189685414842 0 +2224 -0.002619125846246962 -0.000453110979644759 0 +2225 0.008128056179495607 -0.0006655257449104397 0 +2226 0.01661693337872779 -0.0004452173592198853 0 +2227 -0.01837290705397781 -0.0004346720046485592 0 +2228 0.01801000994169241 -0.0004575847791365345 0 +2229 -0.000750452320945871 -0.0004627257498504432 0 +2230 -0.0153928077462779 -0.0004295759427951497 0 +2231 -0.01708654526926203 -0.003043708988112214 0 +2232 0.003373991833640156 -0.0004794617381130144 0 +2233 0.004267597627411421 -0.00053289017701809 0 +2234 0.004580586311772042 -0.0005440335989217296 0 +2235 0.004920203128584402 -0.0005717636623997142 0 +2236 0.005254073211162505 -0.0005935854879743482 0 +2237 0.005960760376960035 -0.0006296798862014244 0 +2238 -0.005251058692181312 -0.0001782159943414326 0 +2239 0.006330505715015131 -0.0006566262795049373 0 +2240 0.006745118889749852 -0.0006612994360584455 0 +2241 0.0088387591017598 -0.000306017978791222 0 +2242 0.008888779203045226 -0.0004154993845168496 0 +2243 0.009041803192641159 -0.0005125914084506778 0 +2244 0.007116798289166267 -0.000722542295082794 0 +2245 0.01459867450314584 -0.0003069441292801985 0 +2246 0.0009696855054044706 -0.001760453948361647 0 +2247 0.001290958882704778 -0.0003204520677648455 0 +2248 -0.006771255349486779 -0.0003298130472052171 0 +2249 0.01469024396726173 -0.0003790159835841409 0 +2250 -0.0001515854183761712 -0.0008901053297774695 0 +2251 0.002812500000028182 -0.000301191198767643 0 +2252 -0.01311159574607306 -0.0005786795786442208 0 +2253 -0.009049830663490931 -0.0006629151069762202 0 +2254 -0.001628354137345093 -0.0007272866485574823 0 +2255 0.002786962335356883 -0.001847564200657252 0 +2256 0.0149000529614067 -0.000867109507033259 0 +2257 -0.003650985140337539 -0.003180585680444663 0 +2258 -0.006255712327977138 -0.002221098562240285 0 +2259 -0.001397238617561385 -0.0004295467941871584 0 +2260 -0.01589928899222304 -0.0008155379233352744 0 +2261 0.007861711706774509 -0.0004866400384418157 0 +2262 -0.01732536345483119 -0.006490669694084391 0 +2263 0.007692283461312495 -7.577193251104949e-05 0 +2264 0.001443078302156225 -0.003238244171725788 0 +2265 0.004755880031021202 -0.001628961526324928 0 +2266 0.01953892019073015 -0.0006669641273925267 0 +2267 0.01818929319594723 -0.003482984509677631 0 +2268 0.004850852648886382 -0.002305911043207744 0 +2269 0.001797619153393574 -0.0004851767298000736 0 +2270 -0.00545645539186714 -0.0007384897058057139 0 +2271 -0.007183337304296064 -0.0004447328630768017 0 +2272 -0.01045858721454033 -0.0006217355530016761 0 +2273 0.01072196432415037 -0.0004575107681759838 0 +2274 -0.003079384700044261 -0.0006580461108030061 0 +2275 0.009325125799910183 -0.0004890737802902276 0 +2276 -0.009759921829659096 -0.0006379500141236369 0 +2277 0.008438772270972972 -0.0005164645642949178 0 +2278 -0.008674342568157712 -0.0006599947463315212 0 +2279 -0.008290373404259237 -0.000666445748215335 0 +2280 0.01670636333434337 -0.0008404123402630487 0 +2281 0.01349132846458309 -0.0004323611284073799 0 +2282 -0.003457839580201017 -0.0006723088746153233 0 +2283 -0.003829354452965186 -0.000671098696143049 0 +2284 -0.01634089486014728 -0.0008029603830312428 0 +2285 -0.00425548820943157 -0.0006922863474537075 0 +2286 -0.004638185844584052 -0.0007166868171197904 0 +2287 -0.01576285612929927 -0.0004814937242552866 0 +2288 -0.005054181752463392 -0.0007507075775398344 0 +2289 -0.006311614360744757 -0.0007865898180232579 0 +2290 -0.006769471527624657 -0.0007956740511301401 0 +2291 0.01873603557190866 -0.0005868622986645325 0 +2292 0.009798934443887517 -0.0003288761915159832 0 +2293 0.0003263784656699839 -0.0006126209756049505 0 +2294 0.01374320780713177 -0.0003906733434021764 0 +2295 -0.01179135532147214 -0.000614623707554711 0 +2296 0.01044812770836047 -0.0004680352261781427 0 +2297 -0.007807895768187112 -0.0008703119700957485 0 +2298 -0.01626628376546246 -0.0004079227996756315 0 +2299 0.01167350724841381 -0.0001995052918380151 0 +2300 -0.002306520952161969 -0.01699512405927507 0 +2301 -0.006979594783823775 -0.0003256982885098136 0 +2302 -0.01099049278913168 -0.0008026831465250523 0 +2303 0.0153283286280188 -0.0003057840491204684 0 +2304 -0.01504027076971676 -0.002431074753053932 0 +2305 0.01382515528505992 -0.0003004296887051225 0 +2306 0.008742217321652377 -0.0005237563211084508 0 +2307 0.01274451446941249 -0.0004806315148796093 0 +2308 -0.005969689199712854 -0.0003995002974736697 0 +2309 -0.01075413915537548 -0.0001673651761007828 0 +2310 -0.01595913006180682 -0.0003016389840095029 0 +2311 0.01528494860351178 -0.00139132173504992 0 +2312 0.01492005271486286 -0.001418402593917788 0 +2313 0.0145494695160999 -0.001746960261879708 0 +2314 0.01159448169826453 -0.0002721888636740259 0 +2315 0.00404817523388159 -0.002264429111388792 0 +2316 0.001936745175575477 -0.0006068077432193615 0 +2317 0.007763075897970081 -0.0001795514777580844 0 +2318 0.003362762484556025 -0.01177743515254723 0 +2319 0.005119351732861507 -0.0004793579714100574 0 +2320 0.003659870642230331 -0.0004945657069211044 0 +2321 0.004431932934703574 -0.0004587715815959455 0 +2322 -0.009983660897876461 -0.004200286796167143 0 +2323 0.007283964132520464 -0.0006153810474359824 0 +2324 0.01354881886777853 -0.001809973856702476 0 +2325 0.006956068360124582 -0.0006282596076700307 0 +2326 0.0141711158931234 -0.0004316194115814797 0 +2327 -0.01428680659820636 -0.0002483316809514172 0 +2328 -0.01006264733500019 0.0001083382393825912 0 +2329 -0.008686286965163863 0.0001061885002855925 0 +2330 -0.007312499999984456 0.0001082531754731838 0 +2331 -0.00593749999998272 0.0001082531754731392 0 +2332 -0.004562499999981075 0.0001075280127035803 0 +2333 -0.003187499999979328 0.0001082531754731368 0 +2334 -0.001812678227638995 0.0001096232939253817 0 +2335 -0.0004346449627808448 0.0001066048189800241 0 +2336 0.0009375000000259382 0.0001082531754733582 0 +2337 0.0023267309046922 0.0001084943626314416 0 +2338 0.003704825084646844 9.978531867216179e-05 0 +2339 0.005062500000025691 0.0001078093912118205 0 +2340 0.00643750000002127 0.0001082531754726613 0 +2341 0.00781235266500247 0.0001083382393829958 0 +2342 0.009187500000012406 0.0001082531754727024 0 +2343 0.01056250000000802 0.0001082531754725918 0 +2344 -0.01131529812382075 0.0001066376779258793 0 +2345 -0.01256249999999086 0.000107321628232916 0 +2346 0.01181250000000405 0.0001082531754727312 0 +2347 -0.01368749999999226 0.0001071518439188553 0 +2348 0.01293750000000043 0.000108253175472758 0 +2349 0.01406249999999684 0.0001038588648694738 0 +2350 -0.01468749999999336 0.0001082531754734208 0 +2351 0.01506570033171768 0.0001054698573122792 0 +2352 0.01593749999999499 0.0001082531754731871 0 +2353 -0.01556234105960868 0.000103041630695266 0 +2354 -0.01631106051018475 0.0001118800884944924 0 +2355 -0.01706235266508772 0.0001083382393223269 0 +2356 0.01669017462624466 0.0001017437523959833 0 +2357 0.003066425388876822 0.0001044509593667627 0 +2358 0.000187500000024819 0.0001082531754732259 0 +2359 -0.01068174377477365 0.0001110566383462019 0 +2360 -0.003937499999980293 0.0001073910865511655 0 +2361 -0.005190783312192065 0.0001028919092944293 0 +2362 -0.00106249999997665 0.000108253175473175 0 +2363 -0.009437499999987125 0.0001082531754731995 0 +2364 -0.006568794736903335 0.0001030297262899355 0 +2365 -0.01193278712385712 0.0001055321951693615 0 +2366 -0.01768735266506066 0.0001083382393384491 0 +2367 0.001562500000026403 0.000108253175473201 0 +2368 -0.002558166102901284 0.0001049837040941219 0 +2369 -0.007937499999985144 0.0001082531754731476 0 +2370 0.01731405815960955 0.0001018322078974175 0 +2371 0.01793749999999754 0.000108253175473141 0 +2372 0.008562500000014503 0.0001082531754726927 0 +2373 0.004435510174826445 0.0001127463173775828 0 +2374 0.009812500000010478 0.0001082531754727577 0 +2375 0.005686191703424402 0.0001043379265873103 0 +2376 0.01118750000000606 0.0001082531754727072 0 +2377 0.007062500000019222 0.0001082531754727999 0 +2378 -0.01818749999999792 0.0001082531754731483 0 +2379 -0.0130605415559314 0.0001216972025700054 0 +2380 -0.0141874999999928 0.000108253175473227 0 +2381 -0.01868764733487224 0.0001083382393023092 0 +2382 0.01843749999999798 0.0001082531754731445 0 +2383 0.01456672972780983 0.0001058111409804167 0 +2384 0.01244182766171659 0.0001034410901846607 0 +2385 0.01344124233338092 0.0001045681121288637 0 +2386 -0.008999999999986517 0.01826794919242899 0 +2387 0.009003420360285889 0.01835789590949212 0 +2388 -0.003082350576460463 0.01819673900181451 0 +2389 0.002752969314419345 0.01834021602755673 0 +2390 0.01871003615961573 0.007560386750718719 0 +2391 -0.01860406712700486 0.007675240136407141 0 +2392 0.01543743197351764 0.0001061697826905074 0 +2393 -0.01506249999999378 0.0001082531754737336 0 +2394 0.01881249999999851 0.0001082531754731871 0 +2395 0.01919281540522176 0.0001051125318554858 0 +2396 -0.01593749999999509 0.0001082531754731554 0 +2397 -0.006937499999983933 0.0001082531754731597 0 +2398 -0.01668628696559688 0.0001061885009898483 0 +2399 -0.003562499999979636 0.0001082531754733051 0 +2400 -0.008312499999985633 0.0001082531754731542 0 +2401 -0.009062352664973964 0.0001083382393824157 0 +2402 -0.002187499999978154 0.000108253175473155 0 +2403 -0.01906172810814949 0.0001048195580959626 0 +2404 0.002687500000027898 0.0001082531754731871 0 +2405 0.0005625000000254698 0.0001082531754736191 0 +2406 0.01631679392207085 0.0001041659055695143 0 +2407 0.001934825374184778 0.0001017437524675345 0 +2408 -0.00556249999998228 0.000104705113769845 0 +2409 -0.001434190070960276 0.0001100572737969874 0 +2410 0.006063537875087915 0.0001073209302961957 0 +2411 0.0101875000000092 0.0001082531754727975 0 +2412 0.00743628696515653 0.000106188500213561 0 +2413 0.008187500000015599 0.0001082531754728147 0 +2414 0.004039722832089729 0.0001140695160783451 0 +2415 0.01873030864683814 0.004020813187017007 0 +2416 -0.01904287166994441 0.003879068569696717 0 +2417 0.01947277275847158 0.002064885087672635 0 +2418 -0.01942999045059627 0.001982646326118044 0 +2419 -0.01943735266503768 0.0001083382393528969 0 +2420 0.01975418984056891 0.001010877757778559 0 +2421 -0.01972604955331919 0.001017257432291791 0 +2422 -0.01818648635335705 0.0134030908516553 0 +2423 0.01845409862290806 0.01323896876315081 0 +2424 0.01954948426092526 0.0001147064910621327 0 +2425 -0.01985758953346883 0.0004729037852412947 0 +2426 -0.01793749999999752 0.0001082531754731446 0 +2427 0.0175560800378631 0.0001033354516935863 0 +2428 -0.01443749999999307 0.000108253175473374 0 +2429 -0.01531249999999427 0.0001082531754731871 0 +2430 0.01568249844035889 0.000103981787069743 0 +2431 0.01693764733486216 0.0001083382392975927 0 +2432 -0.01296941752188936 0.0179906518347745 0 +2433 -0.01731128696537632 0.0001061885006019522 0 +2434 0.01818749999999777 0.0001072614153235359 0 +2435 -0.01843749999999817 0.0001082531754730691 0 +2436 0.01480989905488305 0.000106751519112507 0 +2437 0.01306447516267419 0.01812021942643606 0 +2438 0.01430961728180358 0.0001065888373483254 0 +2439 0.01985758953346903 0.0004729037852406717 0 +2440 -0.01968633051741043 0.0001075779743854886 0 +2441 0.01685086075020144 0.0182319817802714 0 +2442 0.01981897981539858 9.99128557973918e-05 0 +2443 -0.01692043094437051 0.01831388840811431 0 +2444 -0.01989305297765493 0.0001792010759154287 0 +2445 0.01988844751006841 0.0003084623428665213 0 +2446 0.01971935467293218 0.0003618475382694331 0 +2447 0.01968510090249488 0.0005176864284639281 0 +2448 0.01952923241466155 0.0004097991963343974 0 +2449 0.01948907969698958 0.0006313782899085021 0 +2450 0.01931589478792988 0.0004956349405391485 0 +2451 0.01926859435452657 0.0007482700604504854 0 +2452 0.01906372751335784 0.0005720999009758424 0 +2453 0.01901866052617016 0.0008025982839455825 0 +2454 0.01877370635666943 0.0006668527332283417 0 +2455 0.01872496441950569 0.0009766692943870023 0 +2456 0.0184817678477411 0.0007714740219355366 0 +2457 0.01837491852111629 0.001013930178459764 0 +2458 0.01804244051152494 0.0009543889696757131 0 +2459 0.01801745836769643 0.001311518120758685 0 +2460 0.017658670426853 0.001014448895167732 0 +2461 0.01758922562795642 0.001437331286169198 0 +2462 0.01724935565971953 0.001201155389805657 0 +2463 0.01710335288694282 0.001731385185112784 0 +2464 0.01659509566330734 0.001421642043172414 0 +2465 0.01651218361972994 0.002059175376627696 0 +2466 0.01601882878549534 0.001734131786202571 0 +2467 0.01584210695421837 0.002337249894439307 0 +2468 0.01530887310758292 0.001882790861015849 0 +2469 0.01508358822478615 0.002801945823253963 0 +2470 0.01448820211593971 0.002098764369330395 0 +2471 0.01414847520790409 0.002928825396546222 0 +2472 0.01328460601390735 0.002669752266778887 0 +2473 0.01329353369337196 0.003734438529795565 0 +2474 0.01231558780988502 0.002911553794074441 0 +2475 0.01191966453718046 0.004302536371890108 0 +2476 0.01050369920083524 0.003801818099770337 0 +2477 0.01054252038553271 0.005346185505816723 0 +2478 0.00929100827571153 0.00451299754334214 0 +2479 0.008959847447942556 0.006185243262013461 0 +2480 0.007439746664236283 0.004677056763935007 0 +2481 0.007205308264047752 0.00704933433306644 0 +2482 0.005593999358529356 0.005829335547891508 0 +2483 0.005378916056604419 0.007884083111337195 0 +2484 0.003807953626122388 0.006636270865585455 0 +2485 0.008784943103951464 0.008238738480961731 0 +2486 0.003555491961594838 0.008678781557350714 0 +2487 0.001985699967846719 0.007440062662031005 0 +2488 0.001727401870404772 0.009482163680288747 0 +2489 0.0001149704860156485 0.008299104857738273 0 +2490 0.0003747895508307094 0.006256685587863734 0 +2491 -0.001486626307283394 0.007140837575302319 0 +2492 -0.001720451265057995 0.009117440929908953 0 +2493 -0.003323217928253676 0.007961497834567626 0 +2494 -0.003552906290167026 0.009927519254823583 0 +2495 -0.005166010935363513 0.008745574833615063 0 +2496 -0.004952459940884187 0.006437874217473325 0 +2497 -0.006845947735424762 0.007499109726746079 0 +2498 -0.007009945479006827 0.00953690287877727 0 +2499 -0.008624963375723584 0.008351833409597883 0 +2500 -0.008471802178607171 0.006356294766752787 0 +2501 0.005162944253335048 0.009869803144610226 0 +2502 -0.008833150236519181 0.01034878412373465 0 +2503 -0.001049878431381831 0.004923946862748503 0 +2504 -0.01024031440824595 0.00717536639756408 0 +2505 -0.009946808488912946 0.004799239373098447 0 +2506 0.01237202716626903 0.006340649061813721 0 +2507 -0.007219800239098978 0.01153202865941409 0 +2508 -0.001942066804357096 0.01110656926006761 0 +2509 0.004284750876764677 0.004482579167569134 0 +2510 -0.008336081926550177 0.004725296863942712 0 +2511 -0.01179597101761552 0.005924176005786564 0 +2512 -0.01205608656840149 0.007985726201735398 0 +2513 -0.0117075882419254 0.003856091616917195 0 +2514 -0.01326228036358132 0.004775968262461465 0 +2515 -0.009048912893183797 0.01233877251137987 0 +2516 0.01491552152318129 0.004117886803919793 0 +2517 0.007542124345838556 0.003420900389543206 0 +2518 -0.01316158557884948 0.003195002079648189 0 +2519 -0.01167320830218837 0.002492444446440466 0 +2520 -0.007435982797834212 0.01352161289177887 0 +2521 0.01091835907240869 0.002229652111843321 0 +2522 -0.01438245111481023 0.003638214771624903 0 +2523 -0.0144589442159873 0.002477609591421786 0 +2524 -0.01312619102978362 0.002121203305968447 0 +2525 0.01795599975191678 0.00189025921866845 0 +2526 0.01349339843743673 0.001485482909668932 0 +2527 0.01720745313972609 0.002536241281731691 0 +2528 -0.01557443438516958 0.002764925671945907 0 +2529 -0.01543865345026545 0.00185483917425023 0 +2530 -0.01581667615157802 0.004335445271535062 0 +2531 0.01527840304365593 0.001321611500612254 0 +2532 0.01659770576176335 0.0009298296133930217 0 +2533 0.01720495663888523 0.0006832365476878117 0 +2534 -0.009266330739671416 0.01432727234250513 0 +2535 -0.0108791330552213 0.01314454812344174 0 +2536 0.0006235527044254754 0.004289364583562676 0 +2537 -0.001143026583044079 0.003497271840032681 0 +2538 0.0005629733394700712 0.002808135770045967 0 +2539 -0.002377654972619674 0.003884134594422469 0 +2540 -0.00239681269311932 0.002562557990795993 0 +2541 -0.003575585757069441 0.003063574453573672 0 +2542 -0.001159532054770928 0.001990419917093916 0 +2543 -0.003368210325040233 0.001856678949089508 0 +2544 0.01773241646160674 0.0006365772656929139 0 +2545 -0.003773369925972055 0.01191210941790774 0 +2546 -0.00216099381741157 0.01309425421737222 0 +2547 -0.0003303857835556041 0.0122887871482617 0 +2548 -0.0005484453172955939 0.0142768009355119 0 +2549 0.001282190615880921 0.01347140085645946 0 +2550 -0.00399184802450995 0.01389955380910903 0 +2551 0.01809152862331613 0.0005321387766966371 0 +2552 -0.01112674890493663 0.01506492408592291 0 +2553 -0.01271469140805186 0.01393869827983708 0 +2554 -0.01249267759766039 0.01196001774080613 0 +2555 -0.01429648162380065 0.01272827252738683 0 +2556 -0.01475637221260096 0.01486329294185912 0 +2557 -0.01410546761218849 0.01076094167922282 0 +2558 0.01595056575394488 0.001024237673866589 0 +2559 0.01852979950901538 0.0004460259609714758 0 +2560 0.01430963137153245 0.001410946197623789 0 +2561 0.01221001719480623 0.001948076926872805 0 +2562 0.01881478166650965 0.0003704004296633605 0 +2563 0.001051734356594067 0.01543096058385935 0 +2564 0.002880307502289227 0.01462083055576425 0 +2565 0.003110437095636622 0.01266048009289579 0 +2566 0.004722786071572869 0.01384228564173715 0 +2567 -0.007676571506545213 0.0154342913263501 0 +2568 0.009231476405371303 0.002667986866167691 0 +2569 0.01936415013563059 0.0002854688909882364 0 +2570 0.01917150431801114 0.0003397129002459034 0 +2571 0.004440136336528807 0.01569599321474035 0 +2572 0.006326678137835828 0.01500691082024098 0 +2573 0.006553868138114613 0.01303821647391474 0 +2574 0.008166734078933854 0.01422113995856024 0 +2575 0.008386166555192585 0.01223630840805493 0 +2576 0.009999245101753089 0.01341961453600971 0 +2577 0.01021114695023815 0.01144071148596611 0 +2578 0.01182927896785379 0.01261651521060937 0 +2579 0.01200533140605162 0.01060998226725811 0 +2580 0.01365376731796271 0.01180729818529754 0 +2581 0.01383516864488911 0.00979119136468767 0 +2582 0.01344183574845331 0.01379782707797363 0 +2583 0.01547033067437908 0.01096963090128018 0 +2584 -0.01580964204759418 0.01153196751580974 0 +2585 -0.01571744246324441 0.009596462993191893 0 +2586 0.009825860048132599 0.01538155630628381 0 +2587 0.01564803912654388 0.009074776664447974 0 +2588 0.0186888146724158 0.001410814909724297 0 +2589 0.00579538767041307 0.01681110300323063 0 +2590 -0.0007281617524688299 0.01620509348020379 0 +2591 -0.00391593681705998 0.004443472803921752 0 +2592 -0.004906753770101216 0.003438163226990043 0 +2593 0.01918677168790313 0.001095418823233552 0 +2594 -0.01694303935299848 0.003328261931898743 0 +2595 -0.01710058606186564 0.005020440423504728 0 +2596 -0.01591607102824246 0.00609450548847134 0 +2597 0.01711869036586605 0.0102531114701567 0 +2598 0.01406029157651814 0.007795772816777578 0 +2599 0.01574098281640793 0.007211868518012469 0 +2600 0.005833851556936376 0.004299588509043081 0 +2601 0.004299809530764314 0.002947528292145627 0 +2602 0.005671637337825984 0.002421661308738428 0 +2603 0.003105108938873615 0.003280901931072376 0 +2604 0.003177758255544948 0.002056659092175517 0 +2605 0.002257843638086831 0.005094022249578838 0 +2606 0.01957218056958983 0.001384046277595211 0 +2607 -0.01720198296517664 0.01056274254812667 0 +2608 -0.009907638862358084 0.00328868411094475 0 +2609 -0.008275419821815419 0.002771046195895686 0 +2610 -0.01813763854855666 0.002920425637274546 0 +2611 0.01811937164771578 0.002826624066338763 0 +2612 0.01742648719663744 0.003659567503810537 0 +2613 0.0174457683169662 0.004935897609410753 0 +2614 -0.004420764170396471 0.002354284839176864 0 +2615 -0.005509017489184908 0.002491354045187568 0 +2616 -0.005342791526674645 0.001517629593542789 0 +2617 -0.006206630522996254 0.003725116521972517 0 +2618 0.0009490039210100909 0.01726922032191485 0 +2619 0.01434816489867617 0.006012104927679592 0 +2620 0.01216029417221364 0.008543262450804919 0 +2621 -0.01650094026078124 0.002364450697065026 0 +2622 -0.01626390225477539 0.001396867197038741 0 +2623 -0.005386374812650758 0.004714388565028288 0 +2624 -0.00662889884102529 0.002507594694769959 0 +2625 -0.006498441968970571 0.00163382312056487 0 +2626 -0.01980788950539053 0.0007009267040202225 0 +2627 -0.0194701927811143 0.0007617848416339757 0 +2628 -0.01938237580703835 0.001080816753525993 0 +2629 -0.01914304194554789 0.0008292872218046911 0 +2630 -0.01899494557688964 0.001301498898652989 0 +2631 -0.01862041142630998 0.001060157478716227 0 +2632 -0.01875423915419034 0.0006268746726418377 0 +2633 -0.01844015126215664 0.0007018402138629683 0 +2634 -0.01829383843540259 0.001079237648801529 0 +2635 -0.01812446575209649 0.0007595414866141735 0 +2636 -0.01791314922588986 0.001056472425772004 0 +2637 -0.0176800386232678 0.0008171383268432693 0 +2638 -0.01751431863719696 0.001102938927807027 0 +2639 -0.01728858392316525 0.0008918235110079427 0 +2640 -0.01910509967234002 0.0005479475447528814 0 +2641 -0.01742969711536483 0.0005046879940100737 0 +2642 -0.01783005025597017 0.0004631224651976856 0 +2643 -0.01706591550959644 0.001145931178791869 0 +2644 -0.01683361886776029 0.0008734172693057503 0 +2645 -0.01738035714550485 0.001614130673149495 0 +2646 -0.01704707405121813 0.0005191334242023036 0 +2647 -0.01852803835075061 0.0004199661270890008 0 +2648 -0.01817984195508693 0.001531357876604491 0 +2649 -0.01822048336300377 0.0004861649743854855 0 +2650 0.01952194552916413 0.0002578716752120864 0 +2651 0.0194210616005239 0.0001715607503762611 0 +2652 0.0196487606862177 0.0002134911977245688 0 +2653 0.01874884634750199 0.002121738149672505 0 +2654 0.01917854990008792 0.002808824861055183 0 +2655 -0.01921022488079612 0.002785495889535724 0 +2656 0.008591477447056571 0.01025481672895166 0 +2657 -0.0138781656485825 0.006655699990537162 0 +2658 -0.01987029348672815 0.0003075063102601695 0 +2659 -0.01970241384936976 0.0003597822408882157 0 +2660 0.01898637365362748 0.0003802708172367596 0 +2661 0.01904490652067101 0.0002328304754428696 0 +2662 0.01890444384059364 0.0002540137767944659 0 +2663 0.01893523081833355 0.0001274025571207374 0 +2664 0.01875730909836591 0.0002483283175508967 0 +2665 -0.0008880880834541873 0.01818947245935587 0 +2666 -0.01391596778882151 0.008799695007383661 0 +2667 0.006982957180051392 0.009058672741650875 0 +2668 0.003331829226139936 0.01067594603625999 0 +2669 -0.0001084223333076402 0.01029622109171654 0 +2670 -0.005826626741331698 0.01469206873207014 0 +2671 -0.006290829714249416 0.01661167897761672 0 +2672 -0.004124397681920595 0.01621745375100159 0 +2673 -0.005387814262562847 0.01072846314833881 0 +2674 -0.005605906998551622 0.01271430610976978 0 +2675 -0.002379235768184012 0.0150821026606667 0 +2676 -0.01227910420997789 0.009971898276769191 0 +2677 0.01681297032684855 0.000107182448931029 0 +2678 0.01687325854722218 0.0002174069365810881 0 +2679 0.01700415351928763 0.000216381526618026 0 +2680 0.01693749999999649 0.0003247595264192865 0 +2681 0.01679279410253166 0.0003345246965922471 0 +2682 0.01707394418941639 0.0003293788916057637 0 +2683 0.01687385981907909 0.0004733205180677907 0 +2684 0.01670093750637851 0.0004764226364394252 0 +2685 0.01662277018665927 0.000310805368598427 0 +2686 0.01652042708579349 0.0004662916800560924 0 +2687 0.0164513049097819 0.000321709284422555 0 +2688 0.01633325464401335 0.0004597536438275003 0 +2689 0.01642098797854392 0.0006610084388427781 0 +2690 0.01713541867648156 0.000213873149639483 0 +2691 0.01722206447311712 0.0003309909760436188 0 +2692 0.01619198797184684 0.0006226182640706909 0 +2693 0.01612856905431522 0.0004060512049188266 0 +2694 0.01597078491684349 0.0005693627667614392 0 +2695 0.01589947661091537 0.0003598077453409425 0 +2696 0.01576045834623079 0.0005240274897769395 0 +2697 0.01569877385315721 0.0003275472009985956 0 +2698 0.0155687404957589 0.0004809989809658271 0 +2699 0.01559264065065667 0.000653073039277718 0 +2700 0.01539191270822648 0.0005938195926434108 0 +2701 0.01532827110788671 0.0004370754649940167 0 +2702 0.01517614805710299 0.0005158531488692395 0 +2703 0.01507858011681912 0.0003344967997207602 0 +2704 0.0149701703633748 0.000465749581092145 0 +2705 0.01498640957648163 0.0006860127451898932 0 +2706 0.01479182652351069 0.000604899003447605 0 +2707 0.01477526849605752 0.0008226529646805712 0 +2708 0.01454203395377413 0.0006999193808608791 0 +2709 0.01449118331845892 0.0005022156123272654 0 +2710 0.01430364134422548 0.0005685882283674638 0 +2711 0.01472311998193184 0.0003268192960065436 0 +2712 0.01426211855783466 0.0003567497634849284 0 +2713 0.0140941875774521 0.0004783489210085017 0 +2714 0.01381249999999764 0.0001082087204911935 0 +2715 0.01406248459989884 0.0007098977247004199 0 +2716 0.01385711359779908 0.0005644429033989952 0 +2717 0.01381240344086176 0.0008495542493597555 0 +2718 0.01361339445748821 0.0006387552114634473 0 +2719 0.01359533963246627 0.0004414730178487891 0 +2720 0.01340415466998372 0.0004832684217689614 0 +2721 0.0131948480011922 0.0001063968880490366 0 +2722 0.01334670865667627 0.0007002655471097973 0 +2723 0.01313135081494869 0.0005665682793382259 0 +2724 0.01306940496220558 0.0008384167185358811 0 +2725 0.01289240754942955 0.0006063510579613621 0 +2726 0.01274727484322251 0.0008994961188579819 0 +2727 0.01249630501188817 0.0006929919611932736 0 +2728 0.01263017623645452 0.0004184570002111369 0 +2729 0.01232556566093106 0.0005002671011745064 0 +2730 0.01225277620781037 0.0007538290120114113 0 +2731 0.01218104925674865 0.0001021499762057815 0 +2732 0.01213566920161962 0.0005287287339801783 0 +2733 0.01197298013626375 0.000765016128613772 0 +2734 0.01174138235783812 0.0005330860091377431 0 +2735 0.01168281791059067 0.0007874936941796378 0 +2736 0.0115555661490003 0.0006221201220034216 0 +2737 0.01142431183651926 0.0008247403080120516 0 +2738 0.01123922792553457 0.0006249107091528222 0 +2739 0.01112490260464212 0.0007803574928569972 0 +2740 0.01092387948698341 0.0006541342024800389 0 +2741 0.01083348308451152 0.0008612588840863094 0 +2742 0.01061575372042489 0.0006916394007851329 0 +2743 0.01048092255154249 0.000876748547922183 0 +2744 0.0102726435533705 0.0007136123097195726 0 +2745 0.01015375889389171 0.0009588451238650626 0 +2746 0.009918135135575358 0.000747343622689423 0 +2747 0.009785790062692059 0.0009300007599300964 0 +2748 0.009547751465320137 0.0007641903670711379 0 +2749 0.00943971504818294 0.001029720412208319 0 +2750 0.009171673990421857 0.0008090922156321213 0 +2751 0.008989654029213836 0.001138279431366033 0 +2752 0.008709780643767522 0.00091375454926124 0 +2753 0.008564928454856263 0.001197624718474191 0 +2754 0.008432323880715079 0.0009135078783842948 0 +2755 0.008192899596955015 0.001243848059220525 0 +2756 0.007914314187547518 0.0009787508210073422 0 +2757 0.007744124466823363 0.00119511066212545 0 +2758 0.007451004358376445 0.001003062178253041 0 +2759 0.0108125000000072 0.0001082531754727977 0 +2760 0.0073123898523925 0.001322417949885211 0 +2761 0.006974210798698993 0.001053523627076028 0 +2762 0.01143750000000526 0.0001082531754727554 0 +2763 0.009917834938046008 0.001351019345703078 0 +2764 0.008915157446379173 0.0004862013822745793 0 +2765 0.008812500000013745 0.0001082531754727837 0 +2766 0.007651877404732902 0.0005812775396639912 0 +2767 0.01268750000000122 0.0001082531754728033 0 +2768 0.007155575609127033 0.0006312084200222745 0 +2769 0.00810308120773499 0.0005846919585393515 0 +2770 0.006738442838377306 0.00144673826747959 0 +2771 0.006448041408942421 0.001132019274965541 0 +2772 0.01120636496846648 0.001175145439637717 0 +2773 0.008516210349109637 0.0005338180455865023 0 +2774 0.009319289387183811 0.0004297030975534072 0 +2775 0.009562500000011213 0.0001082531754727977 0 +2776 0.009698236820551483 0.0004488170027048445 0 +2777 0.01043282033322218 0.0004190515827637244 0 +2778 0.01006138807861845 0.0004350838025980834 0 +2779 0.01287662133122203 0.0004269378747684039 0 +2780 0.007867745439999322 0.001768365136246691 0 +2781 0.006657797920268689 0.0006630464615966632 0 +2782 0.01105852296173693 0.0003759705342776209 0 +2783 0.01166690456192578 0.0003420849884729589 0 +2784 0.01074624862238709 0.0004267612338337437 0 +2785 0.0121825063076059 0.001096170651407542 0 +2786 0.01194300514469231 0.0003267640074108436 0 +2787 0.01057989542208124 0.001237712137860011 0 +2788 0.01136517875783197 0.0003620247133677292 0 +2789 0.01527030396549996 0.0002180728966018031 0 +2790 0.01384687801721222 0.0003377981522825635 0 +2791 0.009302921439599373 0.00156472552394361 0 +2792 0.01494997105457325 0.0002996944379589424 0 +2793 0.007202690902541838 0.001853192359781037 0 +2794 0.01323984970839503 0.0003568007063313912 0 +2795 0.01554104172745096 0.0003220835595939483 0 +2796 0.01444792035631403 0.0002661924183797294 0 +2797 0.01339430764481279 0.0003011408875024963 0 +2798 0.01652103361406642 0.0001976611362445894 0 +2799 0.01221912070947122 0.0003290954498744662 0 +2800 0.01239756084068254 0.000313580994822922 0 +2801 0.006234545138554773 0.001465203673642299 0 +2802 0.005910134652480089 0.00119889743136168 0 +2803 0.006133445647043838 0.0007014180538223769 0 +2804 0.01411944503524751 0.0003054729304008587 0 +2805 0.01581068812920335 0.0002403434038405603 0 +2806 0.01306604407226463 0.001205191044249513 0 +2807 0.01255154786315698 0.001335920132719333 0 +2808 0.009702936362552525 0.001999825884276171 0 +2809 0.01602754484371094 0.0002332805247538964 0 +2810 0.01617924406651351 0.0002472811612150854 0 +2811 0.01610854254304417 0.0001389118067065652 0 +2812 0.01627158662801468 0.0008687778033205844 0 +2813 0.01230574930780983 0.0002207442430302491 0 +2814 0.01329408800715471 0.0002146215709105199 0 +2815 0.005699785852331152 0.001634892422922965 0 +2816 0.00536628971186104 0.00128303208961485 0 +2817 0.005583996833043774 0.0007104680471562137 0 +2818 0.005140547297672473 0.001704524841165723 0 +2819 0.004780705395810075 0.001332948470817152 0 +2820 0.005015316276208753 0.0007689713016897924 0 +2821 0.004522724960981207 0.001824204369423619 0 +2822 0.004151272566164392 0.001411884250373587 0 +2823 0.004395841113670823 0.000833825907572024 0 +2824 0.01713924994572383 0.0004771020178345989 0 +2825 0.01731767596132886 0.0004901340351635943 0 +2826 0.01739267195607792 0.0002976910164861336 0 +2827 0.01749239361146631 0.0004558010048393081 0 +2828 0.01747967408734284 0.0006891842241472074 0 +2829 0.0177530855720905 0.0003855333641757997 0 +2830 0.01756394431697682 0.0002803909881067093 0 +2831 0.01347828085335109 0.0009851012761722096 0 +2832 0.01381027703434755 0.001211621269844448 0 +2833 0.003871189847915988 0.001928853582345573 0 +2834 0.003441525631097837 0.001384708649063253 0 +2835 0.002690407154199961 0.00164103661287512 0 +2836 0.002918556869140624 0.0009227072544368697 0 +2837 0.002332445816431507 0.002205817723122712 0 +2838 0.001829466059256416 0.00161637386078352 0 +2839 0.00378323500441112 0.0009207339631428056 0 +2840 0.002296295566943458 0.001008464955905586 0 +2841 0.001705533804027583 0.003308463738318147 0 +2842 0.01706495325510343 0.0001064433532483549 0 +2843 0.01674709389954382 0.000215551622801331 0 +2844 -0.0178124754441746 0.0001082673527840176 0 +2845 -0.01774997135153747 0.0002165228911423059 0 +2846 -0.01762055146296772 0.0002162341853092935 0 +2847 -0.01769838350509964 0.0003357492286044382 0 +2848 -0.01753871844009058 0.0003458196203310875 0 +2849 -0.01748309279243822 0.0002218092269821275 0 +2850 -0.01763982750564836 0.0005276540245497334 0 +2851 -0.0173578924372412 0.0003333707779136083 0 +2852 -0.01755891615340958 0.0001077414755105676 0 +2853 -0.01787499769174563 0.0002165076836161034 0 +2854 -0.01800184401173933 0.0002175714358450334 0 +2855 -0.01793719308103842 0.0003444999683959954 0 +2856 -0.01808370343397615 0.0003486730348831016 0 +2857 -0.01856252455581055 0.0001082673527779057 0 +2858 -0.01862502864844585 0.0002143221703416372 0 +2859 -0.01875317752594488 0.0002160499566627788 0 +2860 -0.01867394126023355 0.0003270131122668826 0 +2861 -0.01880864917208501 0.0003374182263376175 0 +2862 -0.01887996772595096 0.0002156821915726334 0 +2863 -0.01895054840970644 0.0003206723281061832 0 +2864 -0.01881388209779395 0.0001066895985527965 0 +2865 -0.01956228053040765 0.000108154819271792 0 +2866 -0.01949995633279068 0.0002165047685269616 0 +2867 -0.01937054895947387 0.0002162311648147831 0 +2868 -0.01944342514790835 0.0003348917797471434 0 +2869 -0.01930201504494327 0.0003332187618613701 0 +2870 -0.01923966009555104 0.000214312376107462 0 +2871 -0.01916648413965413 0.0003201235893680673 0 +2872 -0.01937992469917856 0.0004999849347190058 0 +2873 -0.01954327546122403 0.0004672496289061046 0 +2874 -0.01931001028667664 0.0001064914968256289 0 +2875 -0.01718749999999648 0.0001082531754731929 0 +2876 -0.01712497544417838 0.0002165205282544212 0 +2877 -0.01699555214513973 0.0002162337920171713 0 +2878 -0.0170815489352116 0.0003459127245679371 0 +2879 -0.01693398282564923 0.0003482710839106121 0 +2880 -0.01681807568818207 0.0005164495915125552 0 +2881 -0.01658788893172267 0.0006833968327713715 0 +2882 -0.01652247768558303 0.0004876701413440829 0 +2883 -0.01635842384606546 0.0005645818509154612 0 +2884 -0.0162804440780543 0.0003582267820424847 0 +2885 -0.01611366288661753 0.0004825981117446961 0 +2886 -0.01613633078029703 0.0007470593080217896 0 +2887 -0.01592514640519901 0.0006368049639822238 0 +2888 -0.01589860943799338 0.0008659223944805638 0 +2889 -0.01566905456739811 0.0007111816570428688 0 +2890 -0.01562786644119447 0.0004991334447321703 0 +2891 -0.01542910183892158 0.0005760091691168279 0 +2892 -0.01537142377884262 0.0009138335077415348 0 +2893 -0.01511764493589275 0.0006395409224731796 0 +2894 -0.0150716048404936 0.00101253811017537 0 +2895 -0.01480079477429607 0.0007362591284819477 0 +2896 -0.01487288522038903 0.0004849368620092023 0 +2897 -0.01458261630551201 0.0005878739636045117 0 +2898 -0.01450160750546012 0.0008739159348937815 0 +2899 -0.01433665046259086 0.0006203749377741393 0 +2900 -0.01416912990152383 0.0008990264550026015 0 +2901 -0.01393065541206403 0.0007215209968312268 0 +2902 -0.01513096113030979 0.0004368424578196284 0 +2903 -0.01405875793337539 0.0004404001564273113 0 +2904 -0.01385913103240289 0.0004883325277406835 0 +2905 -0.01370490474637589 0.0007195798133318695 0 +2906 -0.01359547881024965 0.0004962720948928224 0 +2907 -0.013438344516106 0.000687790942810807 0 +2908 -0.01331249999999183 0.0001059788966762089 0 +2909 -0.01325004158377025 0.0005053843517097993 0 +2910 -0.01316817943649014 0.0007275854171795929 0 +2911 -0.01305401964562714 0.0004835887755315744 0 +2912 -0.01290249284068841 0.000700172422448731 0 +2913 -0.01281249999999123 0.0001082531754731741 0 +2914 -0.01272199990744253 0.0005113359014934087 0 +2915 -0.01262828220642963 0.0007490702751755718 0 +2916 -0.01250315614191089 0.0005265618078967539 0 +2917 -0.01237153877036912 0.000748273966913014 0 +2918 -0.01250748368702866 0.001056835922882029 0 +2919 -0.01214894752745197 0.001003241118027332 0 +2920 -0.01231360053059327 9.980790691614813e-05 0 +2921 -0.01199119046390503 0.0006928416020754921 0 +2922 -0.01177288023402018 0.0009619840452053953 0 +2923 -0.01160520014707572 0.0007301269322178964 0 +2924 -0.01140688174909443 0.0009358675716537069 0 +2925 -0.01124037563848783 0.0007155647080084056 0 +2926 -0.01105368224017127 0.0009052988339859255 0 +2927 -0.01089290574144658 0.0006896638064810001 0 +2928 -0.01071307520638418 0.0008722790505815171 0 +2929 -0.01093749999998883 0.0001082531754731738 0 +2930 -0.0105603812131035 0.0006647199149059475 0 +2931 -0.01035460655450072 0.000836873022962845 0 +2932 -0.0104374999999883 0.0001082531754731871 0 +2933 -0.0104909794125853 0.001230832784007914 0 +2934 -0.01008781819096059 0.001184977091476932 0 +2935 -0.01114968641761059 0.001381917794475195 0 +2936 -0.01001757954990994 0.0008066797178323966 0 +2937 -0.009703884818927691 0.00103057998462209 0 +2938 -0.009553819052841958 0.0007525620433979933 0 +2939 -0.009288129885029453 0.0009286864604127892 0 +2940 -0.009403663048018871 0.001418786849944593 0 +2941 -0.008938118369117082 0.001281091359450005 0 +2942 -0.008914160920721566 0.0008683289393994255 0 +2943 -0.008557858212413403 0.001044991626323905 0 +2944 -0.008376317992493831 0.0006575184569413587 0 +2945 -0.008169491933841196 0.0009209755605283575 0 +2946 -0.01393749999999256 0.0001040633920417843 0 +2947 -0.008126271744113416 0.000667052528649262 0 +2948 -0.007908388931471803 0.0008086842998547097 0 +2949 -0.007878340002068244 0.001150847268887668 0 +2950 -0.007581916771680062 0.0009273254000883423 0 +2951 -0.007531409417087607 0.0006654496177132891 0 +2952 -0.007280436098221038 0.0007373593332459751 0 +2953 -0.007687499999984956 0.0001082531754731864 0 +2954 -0.009806191238683615 0.0004465990543220704 0 +2955 -0.009687499999987291 0.0001082531754731891 0 +2956 -0.01026984000593633 0.001694463906121702 0 +2957 -0.008784469619062001 0.000458852662167444 0 +2958 -0.007220323933844442 0.0004885840783017057 0 +2959 -0.007035502610071636 0.0006269914095511023 0 +2960 -0.006963182302180942 0.0009009045867673834 0 +2961 -0.006761403337700505 0.0006820614977586129 0 +2962 -0.006742269426768769 0.0004642165015130726 0 +2963 -0.006533515069056662 0.0004737305751349291 0 +2964 -0.006307326079714329 0.0001031998976732622 0 +2965 -0.006444090470436281 0.0008114556120294463 0 +2966 -0.006257077901667029 0.0005702818148159119 0 +2967 -0.006167638613017568 0.0008442448560326397 0 +2968 -0.006015823321274039 0.0005966851523347197 0 +2969 -0.007473581788775072 0.0003427277905643771 0 +2970 -0.01234061140904496 0.001424772255153621 0 +2971 -0.01432721911740607 0.0003909168158653157 0 +2972 -0.01178594787223198 0.0004312414081653495 0 +2973 -0.01156249999998962 0.0001082531754731436 0 +2974 -0.01109352687462683 0.0004047181577005727 0 +2975 -0.005887546050501694 0.000921106622317506 0 +2976 -0.005626084304369869 0.0006781918485711361 0 +2977 -0.005768585982426955 0.0004050410875203503 0 +2978 -0.005500632089726654 0.0005088350103345714 0 +2979 -0.005383093343542429 0.0006757311477028334 0 +2980 -0.005204303075054671 0.0004914265165623544 0 +2981 -0.005127946735366212 0.000705484504323719 0 +2982 -0.005013238939220542 0.0004624802433747409 0 +2983 -0.004867076323173844 0.0006787078739495536 0 +2984 -0.004811153528697428 0.0001052776001550133 0 +2985 -0.004680081958889354 0.000503555749197865 0 +2986 -0.004602215289413745 0.0007310928065388836 0 +2987 -0.004494877912230951 0.0005182228443627433 0 +2988 -0.004186799468998793 0.0001078487237222349 0 +2989 -0.004357159124787266 0.0006658431131072907 0 +2990 -0.004386031181604324 0.0009890551369645816 0 +2991 -0.004193810160360644 0.0005357599861545861 0 +2992 -0.004086581595749874 0.0007160046524412619 0 +2993 -0.003915772494299023 0.0005592819281697106 0 +2994 -0.003782586904660651 0.0007364302920704365 0 +2995 -0.003944820110907941 0.001044343828640631 0 +2996 -0.003629357972296115 0.000571249501693765 0 +2997 -0.003494167362844964 0.0007460044862734723 0 +2998 -0.003291837975130156 0.0005519815160714772 0 +2999 -0.003202915859270305 0.0008051607625736171 0 +3000 -0.003084571020345513 0.0005698645625872703 0 +3001 -0.002914786709879282 0.0007833695397144181 0 +3002 -0.002937499999979118 0.0001082531754731781 0 +3003 -0.002711404313381355 0.0005377479747112667 0 +3004 -0.002609989743896166 0.0008365145614649194 0 +3005 -0.002458242041619195 0.0006084357772364306 0 +3006 -0.002308434775271935 0.0008684555200087862 0 +3007 -0.002222997421704671 0.0005915803515495889 0 +3008 -0.002008117694071998 0.000833976769741963 0 +3009 -0.001829638482315909 0.0006366255852074913 0 +3010 -0.001677664688957692 0.0008514955491995636 0 +3011 -0.001504856322226782 0.0006514601059968163 0 +3012 -0.001352809945045418 0.000859671495843356 0 +3013 -0.001184994894818478 0.0006816791281376031 0 +3014 -0.001020421771476411 0.0008912239104650671 0 +3015 -0.0008328682973252022 0.0007031454210418005 0 +3016 -0.0006782154394892501 0.0009141671369932275 0 +3017 -0.0004983133542460923 0.0007197959948919887 0 +3018 -0.0003337263976236736 0.000937625063297701 0 +3019 -0.0001438501013975375 0.0007285919698460273 0 +3020 3.575596548519228e-05 0.0009857571182712607 0 +3021 0.0002210265628974557 0.0007497126107608845 0 +3022 0.0003783601139052896 0.0009701854848811373 0 +3023 0.0005777447563723767 0.0007681642325689428 0 +3024 0.0007153139037395737 0.001028863087067364 0 +3025 0.0009543270927841177 0.0007829358248612449 0 +3026 -0.0001796209519932395 0.001408057693153022 0 +3027 -0.001830230315897386 0.001301053702727941 0 +3028 -0.002491736593735842 0.001190393485581417 0 +3029 -0.0006540137342594103 0.0004141694074943447 0 +3030 -0.0008124999999764577 0.0001082531754731563 0 +3031 0.0007920213402286427 0.0004470079900043196 0 +3032 0.0004154849784401498 0.0004438624161763892 0 +3033 4.861741389831532e-05 0.0004365382228813611 0 +3034 -0.0001874999999757159 0.0001082531754731921 0 +3035 0.001142633327591207 0.00106436956140449 0 +3036 0.001342157268973855 0.0008137471446762327 0 +3037 -0.006005343191232747 0.000417293715800755 0 +3038 -0.001645118252644476 0.0003607137482795394 0 +3039 -0.01142564399091008 0.0004207805420220894 0 +3040 -0.0003210700825446844 0.0004226254256279876 0 +3041 0.00117822563775075 0.0004374107489602754 0 +3042 0.001312500000026225 0.0001082531754731376 0 +3043 -0.001972817673171344 0.0003674919785539256 0 +3044 -0.0161299233804022 0.0003009873762763996 0 +3045 -0.007494290099842578 0.001461040522032898 0 +3046 -0.003760416925329936 0.0003269521775192185 0 +3047 -0.008376843357830831 0.0004522960667364118 0 +3048 -0.01357351684565043 0.0009787321620548413 0 +3049 -0.001310796978363482 0.0003694257853277943 0 +3050 -0.0070485600298768 0.0003293452574737355 0 +3051 -0.0130457706472482 0.0010162905130111 0 +3052 -0.01443766407354654 0.001254732548472471 0 +3053 0.000857706016263394 0.00144855591505029 0 +3054 -0.005369947522794069 0.0002882419251132381 0 +3055 -0.0009687484000678419 0.0004172250246512704 0 +3056 -0.01543532787706342 0.0003459448460049021 0 +3057 -0.0164944089822566 0.0002317886955401147 0 +3058 -0.01074689491067437 0.0003915706824622687 0 +3059 -0.002284136277785333 0.000364730312229883 0 +3060 -0.01393513969232846 0.001279511153234373 0 +3061 -0.004316496878560843 0.0003108555662181498 0 +3062 -0.009047153878534551 0.001838354975352679 0 +3063 -0.01687101303662223 0.0002131298554019098 0 +3064 -0.002578273139363846 0.0003710598115199412 0 +3065 -0.002815133511639354 0.0003560748258538933 0 +3066 -0.003476164834963696 0.0003403793432675343 0 +3067 -0.01464368752689486 0.0003742782054502506 0 +3068 -0.004040105353193761 0.0003250150796636752 0 +3069 -0.01589121192466367 0.0003587572234384152 0 +3070 -0.003077294153696948 0.001112946466173605 0 +3071 -0.003171995484173053 0.0003663251976285972 0 +3072 -0.006356725647123674 0.0003478965763644244 0 +3073 -0.01343038951074857 0.0003056777096246792 0 +3074 -0.00656241691446512 0.0003121789457966398 0 +3075 -0.01315777445504192 0.0003334109149150135 0 +3076 -0.0129590180281024 0.000320170409908634 0 +3077 -0.01261770616893674 0.000333393735817974 0 +3078 -0.0124184469776318 0.0003455880145571536 0 +3079 -0.01229924663051769 0.0005025593755850255 0 +3080 -0.01223730423826531 0.000308803557134468 0 +3081 -0.01211757931014505 0.000472889840655699 0 +3082 -0.0120643017775502 0.0002932650629759611 0 +3083 -0.01214665468315421 0.000188009056159202 0 +3084 -0.00423376201389696 0.001405962684947576 0 +3085 -0.005126984148247683 0.0003215436170809112 0 +3086 -0.004913959071798328 0.000331802329738701 0 +3087 -0.00500563830301934 0.0001760245006338167 0 +3088 -0.004578729879449127 0.0003583130758138673 0 +3089 -0.002694843535968042 0.0002170788899066205 0 +3090 -0.00802761751992935 0.001657825931413265 0 +3091 -0.01371070713246526 0.0003362200934588007 0 +3092 -0.01386334563461407 0.0002977206932801149 0 +3093 -0.005020093258828208 0.001023362682431821 0 +3094 -0.007817693228635897 0.000452670402863166 0 +3095 -0.008051221299050466 0.0003400744043144281 0 +3096 -0.00559463623298143 0.0002974556491454273 0 +3097 -0.006438889280928848 0.0002102802128623222 0 +3098 -0.01721419880938422 0.000461841526816807 0 +3099 -0.01560341033838664 0.0002830076968904241 0 +3100 -0.005554529142145519 0.00103480324791072 0 +3101 -0.005895619083250809 0.001422307563302422 0 +3102 -0.0009191137370801819 0.001345135207564987 0 +3103 -0.01670636325152627 0.000339005706586676 0 +3104 -0.009119768374061145 0.0006237002328372342 0 +3105 -0.009427782281590517 0.000418340702895441 0 +3106 -0.002845521900783277 0.001526687763935481 0 +3107 -0.00227564835242127 0.001667756658938814 0 +3108 0.001559457221002401 0.001106456922110165 0 +3109 0.001764001003208671 0.0008285144686327546 0 +3110 0.001555597748754963 0.0004412467532986087 0 +3111 -0.004769816425533212 0.001357223805209685 0 +3112 -0.01021267868476337 0.0005766113833137619 0 +3113 -0.01042582547692819 0.0003815521552058102 0 +3114 -0.006658300596213298 0.001047117337157289 0 +3115 -0.006995784297842011 0.001328657547978705 0 +3116 -0.009658947505694024 0.001915919301062213 0 +3117 -0.01026948213109068 0.002372806446333337 0 +3118 -0.01090387666225479 0.001999579692197265 0 +3119 -0.01693606964113971 0.000106294848289297 0 +3120 -0.01725614610651057 0.000216899464070189 0 +3121 -0.01268749999999103 0.0001071663703595286 0 +3122 -0.01273836769481541 0.0002168327044201716 0 +3123 0.01556165506897579 0.0001032664715024009 0 +3124 -0.01406249999999271 0.0001075548782345782 0 +3125 -0.01411212260713368 0.0002187252431311182 0 +3126 -0.01425015660922351 0.0002223206521055158 0 +3127 -0.01431252610153135 0.0001092222256664873 0 +3128 -0.01437748363802329 0.0002286631244128505 0 +3129 -0.0145004139396647 0.0002149004475437456 0 +3130 -0.01456256898993846 0.0001079855249062354 0 +3131 -0.01462312016071241 0.0002176279726311984 0 +3132 -0.01474999999999313 0.0002165063509467049 0 +3133 -0.01481249999999342 0.0001082531754736416 0 +3134 -0.01487439806154865 0.0002175489389160038 0 +3135 -0.01493749999999363 0.0001082531754745068 0 +3136 -0.01499989967691932 0.0002152429323448127 0 +3137 -0.01512499146911995 0.0002145739696184143 0 +3138 -0.01518749857818163 0.0001079311119188164 0 +3139 -0.01524999834121313 0.000213933278401598 0 +3140 -0.00406238324481681 0.0001071799964389773 0 +3141 -0.003062499999979216 0.000108253175473128 0 +3142 -0.002999999999979199 0.0002114569602482488 0 +3143 -0.002881220300478211 0.0002150309852883076 0 +3144 -0.002819318098617858 0.0001039021040721243 0 +3145 -0.004687275588100558 0.000106911223022293 0 +3146 -0.004749999999981279 0.0002165063509462261 0 +3147 -0.007812499999985054 0.0001082531754731396 0 +3148 -0.007874999999985073 0.0002134813963086323 0 +3149 -0.007749999999985044 0.0002160021918399923 0 +3150 -0.00762825738702086 0.0002145416711466283 0 +3151 -0.007708340366944236 0.0003352130960116289 0 +3152 -0.007563042897824177 0.0001079257288399255 0 +3153 -0.007437590482957894 0.0001081986010343123 0 +3154 -0.007381028711945244 0.0002194919658973309 0 +3155 -0.007251004785311281 0.000217003953438129 0 +3156 -0.007510924265120568 0.0002177268940349954 0 +3157 -0.009562499999987198 0.0001082531754731588 0 +3158 -0.009624999999987241 0.0002165063509462331 0 +3159 -0.009749999999987229 0.0002165063509463404 0 +3160 -0.009698013614082983 0.000338404086734405 0 +3161 -0.009812499999987366 0.0001082531754732746 0 +3162 -0.009874999999987226 0.0002165063509464962 0 +3163 -0.009937524555822893 0.0001082673527915173 0 +3164 -0.01000002864846202 0.0002165228911511307 0 +3165 -0.01012944853875011 0.0002162341859336433 0 +3166 -0.01005229693604499 0.0003176976805444569 0 +3167 -0.01018311322837834 0.0003656176662208851 0 +3168 -0.01025292811230832 0.0002138705759992873 0 +3169 -0.01018875399767045 0.0001064183669541389 0 +3170 -0.009499999999987222 0.0002139227451380506 0 +3171 -0.009374999999987185 0.0002134921441701379 0 +3172 -0.009312499999987057 0.0001077508076772235 0 +3173 -0.009249999999986975 0.0002159202551843773 0 +3174 -0.009187475444151333 0.000108085942198404 0 +3175 -0.009124971351511973 0.0002163949734250442 0 +3176 -0.00899555146130707 0.0002162128662018136 0 +3177 -0.009062499999986314 0.0003247595264193613 0 +3178 -0.008926433614438643 0.0003311487070940191 0 +3179 -0.008869875802746801 0.0002134885243238178 0 +3180 -0.008984360306199451 0.0004657776976323338 0 +3181 -0.008935879988164497 0.0001063511383569906 0 +3182 -0.01319139668389092 0.0001076765973241058 0 +3183 -0.0009374999999765575 0.0001082531754731306 0 +3184 -0.0008749999999765299 0.0002137379736336173 0 +3185 -0.0007540113704902904 0.000209748966188209 0 +3186 -0.0008102936640514057 0.0003371013659360255 0 +3187 -0.000581172154745435 0.0002569342010506451 0 +3188 0.001437500000026317 0.0001082531754731314 0 +3189 0.001375000000026285 0.0002165063509462042 0 +3190 0.001250000000026244 0.000216506350946234 0 +3191 0.001296771050394194 0.0003385348731961926 0 +3192 -0.01082453127241854 0.01821469800466254 0 +3193 -0.0003120241604433028 0.0001079784493909512 0 +3194 -0.0003789287246860571 0.0002129621566827146 0 +3195 -0.01543731456954421 0.0001072928204021986 0 +3196 -0.01537444785758154 0.0002192989513088712 0 +3197 -0.0002505754808387664 0.0002136642408840014 0 +3198 -0.000125095913452954 0.0002160326659359805 0 +3199 -6.251598555518191e-05 0.0001081742279715393 0 +3200 -1.864981836354149e-08 0.0002153016048930197 0 +3201 6.249422745424806e-05 0.0001080392265473677 0 +3202 0.0001249959296225588 0.0002151572611483993 0 +3203 0.0002499993216245839 0.00021628150264672 0 +3204 0.0001810044783473002 0.0003265309930850675 0 +3205 -0.0009999999999765758 0.0002127113416511695 0 +3206 -0.001124999999976596 0.0002137906099154401 0 +3207 -0.001187499999976725 0.0001078005519680944 0 +3208 -0.001252611243978533 0.000226320540887277 0 +3209 -0.001189296253765766 0.0003209622522965544 0 +3210 -0.001398637471205792 0.0002574476520773409 0 +3211 -0.001481019933012092 0.0003883444934372516 0 +3212 -0.001569448182717658 0.0002445959771142617 0 +3213 -0.001723727189116729 0.0002180890567109122 0 +3214 -0.001637782612920575 0.0001329310274671585 0 +3215 -0.001811720437680727 0.0003999717095951433 0 +3216 -0.001316323131012567 0.0001169376697882833 0 +3217 0.01806249999999762 0.0001080878821148528 0 +3218 0.01800184439644793 0.0002175436648402577 0 +3219 0.01786623729318522 0.0002097384364510448 0 +3220 0.01791030761959796 0.0003356714649248401 0 +3221 0.01771393535726845 0.0002317621346249981 0 +3222 0.01806739575180353 0.0003357455203317506 0 +3223 0.01780502877507384 0.0001085730935031321 0 +3224 0.0174334628441445 0.0001033262676384531 0 +3225 -0.0149999999999948 0.01826794919242953 0 +3226 -0.01599999999999511 0.01653589838486039 0 +3227 -0.01814815894492245 0.01678379018422923 0 +3228 -0.0169460525564804 0.01499600777408396 0 +3229 -0.00312499999997928 0.0002165063509462266 0 +3230 -0.003250638186747954 0.0002284750055743903 0 +3231 0.001187500000026149 0.0001082531754731734 0 +3232 0.001125000000026227 0.0002165063509463412 0 +3233 0.001062500000026055 0.0001082531754732248 0 +3234 0.001000000000026196 0.0002165063509464594 0 +3235 0.0008750000000261184 0.0002165063509465915 0 +3236 0.0009338999956965907 0.0003264754779791629 0 +3237 0.0008125000000258408 0.0001082531754735329 0 +3238 0.0007500000000261219 0.0002165063509469963 0 +3239 0.0006875000000257263 0.0001082531754737807 0 +3240 0.0006250000000258341 0.0002165063509469867 0 +3241 0.0005000000000257342 0.0002165063509469418 0 +3242 0.0005519764735685662 0.0003319131244206842 0 +3243 0.0004375000000252326 0.0001082531754739514 0 +3244 0.000374999886958511 0.0002164688762298073 0 +3245 -0.01293185661474897 0.0001074240880346609 0 +3246 -0.0128703900783744 0.000212587950579083 0 +3247 -0.0127999377536324 0.0003401012227588458 0 +3248 -0.01080870726942887 0.0001136279422257434 0 +3249 -0.01087499999998877 0.000216506350946225 0 +3250 -0.01099491313597744 0.0002093154423046182 0 +3251 -0.01095607821888478 0.0003192667761366272 0 +3252 -0.01116571019381118 0.0002524825288796913 0 +3253 -0.01073299984184446 0.0002459514885888598 0 +3254 -0.01060626892461231 0.0002170159301615291 0 +3255 -0.01105601349551807 0.0001037991893149512 0 +3256 -0.01118142548475447 0.0001238151577745364 0 +3257 0.001500000000026284 0.0002165063509462238 0 +3258 0.001625000000026296 0.0002165063509463895 0 +3259 0.001687500000026475 0.0001082531754733139 0 +3260 0.001751844396499915 0.0002175712137469896 0 +3261 0.001677952364236039 0.0003323233581523923 0 +3262 0.001830631782965174 0.0003358127152723894 0 +3263 0.001726459972834086 0.0004851172527921424 0 +3264 0.001923286964619954 0.0004759210748343327 0 +3265 0.002002058558773018 0.0003108626904218097 0 +3266 0.002120924018394582 0.0004861897570127321 0 +3267 0.002184020846711776 0.0003204491713025232 0 +3268 0.002282943668644696 0.0004493454736902842 0 +3269 0.002023225612516668 0.0007267622469315908 0 +3270 0.002359858765637845 0.000291859405884423 0 +3271 0.002442537966926738 0.0004623699137780108 0 +3272 0.002540256947991142 0.0002822807842129298 0 +3273 0.002640902996227981 0.0004291161088708218 0 +3274 0.00256731205054646 0.0006042963210254498 0 +3275 0.002821369095021926 0.000622852461011796 0 +3276 0.002814316907617502 0.0004020768964457632 0 +3277 0.002987324549414524 0.0004758720521354745 0 +3278 0.003072567543078539 0.0003368392053977018 0 +3279 0.003309220672654965 0.0001110366860237985 0 +3280 0.003182260219951035 0.0004819655408303128 0 +3281 0.003241376856877322 0.0003116401645097102 0 +3282 0.003359583052703661 0.000448133032703719 0 +3283 0.003313673394383775 0.0006472625711511473 0 +3284 0.003414046080551472 0.0002773506571837942 0 +3285 0.003525072365479621 0.0004071867531801555 0 +3286 0.002105175256585805 0.0001975179470679936 0 +3287 0.002917127480053939 0.000209069289797486 0 +3288 0.003558380374251567 0.0002536084668481879 0 +3289 0.003665463497562787 0.0003662208469602503 0 +3290 0.003475414313786751 0.0001520617450103612 0 +3291 0.00269046281979885 0.0003065370860688726 0 +3292 0.003642234343941069 0.0005366660839455452 0 +3293 0.003814056964474699 0.0004591155245861466 0 +3294 0.003881392124119558 0.0002974820385594173 0 +3295 0.004015841506895345 0.0004138209553650011 0 +3296 0.004013428670150793 0.0006289237849334213 0 +3297 0.004193222270675707 0.0005219285208587929 0 +3298 0.004185076337885898 0.0003222308553124729 0 +3299 0.004352036701600726 0.0004235365557269225 0 +3300 0.0043604198604173 0.0002393879368899432 0 +3301 0.004501788464635585 0.000331800325846928 0 +3302 0.004812500000026498 0.0001023126840420732 0 +3303 0.004519075056907886 0.0005052793907331313 0 +3304 0.004660151628911226 0.0003970004754343466 0 +3305 0.004635184574312472 0.0002327572680653468 0 +3306 0.00478210882446824 0.0002985076798089954 0 +3307 0.004823087452331135 0.0004522271860522629 0 +3308 0.004933061305636279 0.0003387905419149177 0 +3309 0.004230681107337662 0.0001876923807208097 0 +3310 0.004991947666296915 0.0004929956087891551 0 +3311 0.005116034950821474 0.0003525404062320379 0 +3312 0.0054345271476877 0.0001029526212250875 0 +3313 0.005175446422641777 0.0005532797315621229 0 +3314 0.005306897752865854 0.0004126005745520682 0 +3315 0.005261651103838355 0.0002387334783368878 0 +3316 0.00541671328975954 0.0002965500693264668 0 +3317 0.005488011486129833 0.0004647694104330954 0 +3318 0.00557394494420101 0.0003202555606069704 0 +3319 0.005666875087576488 0.0004909504827080426 0 +3320 0.005749164049676385 0.0003141028980781298 0 +3321 0.005859504135107714 0.0004784565867660071 0 +3322 0.005934083284516458 0.0003292995134104206 0 +3323 0.005862348169445028 0.0002102892824291562 0 +3324 0.005380638908981112 0.0006085636650437451 0 +3325 0.002434282358967794 0.0001797179159854544 0 +3326 0.004017483875801292 0.0002599118219318388 0 +3327 0.003912472411771848 0.000170667733316835 0 +3328 0.002589015595423298 0.0008458762964368771 0 +3329 0.004684909925144762 0.0005924539388474437 0 +3330 0.004725436668395904 0.0008802221390090277 0 +3331 0.002556836277779447 0.0001530586679661066 0 +3332 0.00407028496342932 0.0009425113887848702 0 +3333 0.001812361628465328 0.0001073457487723875 0 +3334 0.001877849246248322 0.0002156242017970299 0 +3335 0.003182656856317843 0.0001052250335943765 0 +3336 -0.007187667464205497 0.0001083361092218156 0 +3337 -0.007122872046557694 0.0002173673954954332 0 +3338 -0.01243768342175784 0.0001059054484324027 0 +3339 -0.0006933423943266359 0.0001041398310369859 0 +3340 -0.0005675817548820971 0.000124696961734635 0 +3341 -0.01381249999999242 0.0001029515411214587 0 +3342 0.01831249999999792 0.0001070961219652743 0 +3343 0.01837693822333379 0.0002142027147805888 0 +3344 0.01850032303722057 0.0002128354104349308 0 +3345 0.01856255383953517 0.0001076413520546577 0 +3346 0.01862267102991507 0.0002199608123096633 0 +3347 -0.003312606364440859 0.0001102479512445072 0 +3348 -0.003377548548441456 0.0002191020360691429 0 +3349 -0.003437942485466773 0.0001090182522888924 0 +3350 -0.003499999999979365 0.0002165063509463991 0 +3351 -0.003632897009260375 0.0002184022851193245 0 +3352 -0.003688816168193375 0.0001073047908546182 0 +3353 -0.00381271936134907 0.0001066870562356434 0 +3354 -0.003864418620065391 0.0002188691666138154 0 +3355 -0.0114379663539614 0.0001079839258819112 0 +3356 -0.01136973126364167 0.0002125237226399908 0 +3357 -0.01149919960292688 0.0002132233167288866 0 +3358 -0.01162486660047915 0.0002159591785767049 0 +3359 -0.01168747776673796 0.0001081619800782727 0 +3360 -0.0117499740611959 0.000215310476823812 0 +3361 -0.01181170649196009 0.0001075851671696703 0 +3362 -0.0118706152053999 0.0002090984916471721 0 +3363 -0.01831249999999809 0.0001082531754731345 0 +3364 -0.0182499999999982 0.0002146140104713906 0 +3365 -0.01812884124095132 0.0002184617192859151 0 +3366 0.01868833899463524 0.0001140306095647341 0 +3367 -0.01656136599130611 0.0001136132169187905 0 +3368 -0.01662499999999594 0.0002165063509462331 0 +3369 -0.016435499826769 0.0001168901263276768 0 +3370 0.01812999115704553 0.0002171685581233201 0 +3371 0.01819412344502864 0.0003547992641244742 0 +3372 0.01835339507344243 0.000510826550566524 0 +3373 -0.01581249999999496 0.0001082531754731793 0 +3374 -0.01568747350993045 0.0001022648041735756 0 +3375 -0.0157335671535178 0.0002190286098064007 0 +3376 -0.01587770394760439 0.000221411847261895 0 +3377 -0.01602384344095804 0.0002118320394106016 0 +3378 -0.008187499999985526 0.0001082531754731222 0 +3379 -0.008249999999985578 0.0002139855494386017 0 +3380 -0.008374999999985613 0.0002130631283136706 0 +3381 -0.008123120216496254 0.0002186386970108166 0 +3382 -0.008193576593818454 0.0003106204641801966 0 +3383 -0.007999999999985088 0.000216506350946329 0 +3384 -0.008437499999985757 0.000107679305034382 0 +3385 -0.008499999999985698 0.0002139572588410113 0 +3386 -0.008062186702737123 0.0001086085664839026 0 +3387 -0.006687933670077549 0.0001079338497799419 0 +3388 -0.006812572278332798 0.0001081999545242679 0 +3389 -0.006875012046375347 0.0002100431994268107 0 +3390 -0.00699999999998387 0.0002165063509463017 0 +3391 -0.006750693834803234 0.0002131994500153365 0 +3392 -0.007062173251783209 0.0001084105051894517 0 +3393 -0.002436777683798889 0.0001077082635766207 0 +3394 -0.002497452257255974 0.0002210851579395353 0 +3395 -0.002369727703129182 0.0002238404644307826 0 +3396 -0.002437499999978498 0.0003247595264192788 0 +3397 -0.002311500897806825 0.0001093847090711304 0 +3398 -0.002247054836609717 0.0002193066901802784 0 +3399 -0.002124999999978183 0.0002165063509462841 0 +3400 -0.002062499999978093 0.0001082531754731912 0 +3401 -0.002004204484882067 0.0002197991063021083 0 +3402 -0.001938230452072087 0.0001090303211078339 0 +3403 -0.001877229744093658 0.0002373342443658842 0 +3404 -0.0196272468716629 0.0002222142800730346 0 +3405 -0.01976009771515353 0.0002142975110406106 0 +3406 -0.005437499999982156 0.0001028662039209113 0 +3407 -0.005313047218683709 0.0001016661745829656 0 +3408 -0.005249999999981951 0.0002165063509462374 0 +3409 -0.00856229782751549 0.0001073885691845861 0 +3410 -0.008623588185636979 0.0002145312866232344 0 +3411 -0.008555133611768292 0.0003149272684033145 0 +3412 -0.01356249999999211 0.0001067713961194187 0 +3413 -0.01343749999999199 0.000104925996021293 0 +3414 -0.01806344754211356 0.0001087565843462069 0 +3415 -0.005812499999982602 0.0001082531754731242 0 +3416 -0.005874999999982668 0.0002102124474231463 0 +3417 -0.005752841929026165 0.000208291673295463 0 +3418 -0.005999999999982691 0.0002139075210657271 0 +3419 -0.006062499999982793 0.0001078200371597593 0 +3420 -0.006124999999982713 0.0002114647595903089 0 +3421 -0.006187499999982846 0.0001082531754733549 0 +3422 -0.006249999999982716 0.0002165063509464781 0 +3423 -0.00619687269516505 0.0003528974551067049 0 +3424 -0.005687973654823045 0.0001027446572108297 0 +3425 -0.004312499999980737 0.0001082531754731871 0 +3426 -0.004438396237743991 0.0001076148718977718 0 +3427 0.002828554466407567 0.00010709532287285 0 +3428 -0.01618726008502694 0.0001043780305550147 0 +3429 -0.01623334185246583 0.0002140710160493379 0 +3430 -0.01044912773117826 0.009165026971395745 0 +3431 -0.01398044093863651 0.0002116450328670951 0 +3432 0.0003124998681138467 0.0001082094549706174 0 +3433 -0.01606643392099434 0.0001023486356425054 0 +3434 0.01519141738286569 0.0001068112596711081 0 +3435 -0.01292149937289613 0.015924642556388 0 +3436 -0.009628228282517507 0.01643814952602428 0 +3437 0.006770158144714964 0.01105309688466569 0 +3438 0.01523431826883966 0.01296958393354595 0 +3439 0.01502759441913003 0.01498952538507093 0 +3440 0.01322538782662637 0.01578617827207654 0 +3441 0.01497286539962794 0.01698942272742842 0 +3442 0.01140228809104827 0.01676110571206764 0 +3443 0.01673070216465565 0.01613281123315482 0 +3444 -0.01066295951612195 0.01115533047060276 0 +3445 0.00802676842683649 0.01644869230971174 0 +3446 0.01162064929731123 0.01462713285250345 0 +3447 -0.01850000886737496 0.0002139439629360379 0 +3448 -0.01837500147789439 0.000215763896198697 0 +3449 0.01468749999999492 0.0001082531754727305 0 +3450 0.01463987028587904 0.0002179186521564935 0 +3451 0.0149376820294562 0.000107176863660047 0 +3452 0.0109375000000069 0.0001082531754728246 0 +3453 0.01087500000000703 0.0002148064656147534 0 +3454 0.01075000000000715 0.0002140978329224625 0 +3455 0.01099933716029514 0.0002256173969012888 0 +3456 0.01368749999999799 0.0001082457663092105 0 +3457 0.0137557296695335 0.0002163180487435223 0 +3458 0.01362062924299507 0.0002153483630053752 0 +3459 0.01206142487612755 0.000107152137013287 0 +3460 0.01212500000000308 0.000216506350945762 0 +3461 0.01418701954696438 0.0001028490900815582 0 +3462 0.008687500000014092 0.000108253175472782 0 +3463 0.008748155602458701 0.0002175712143707535 0 +3464 0.008874692600421135 0.0002166838281829236 0 +3465 0.00881712226721443 0.0003398453782061005 0 +3466 0.008684203416060928 0.0003311216997535831 0 +3467 0.01031250000000891 0.0001082531754728123 0 +3468 0.01025000000000906 0.0002165063509457868 0 +3469 0.01012500000000927 0.000215190144077801 0 +3470 0.01037500000000883 0.0002136632718880745 0 +3471 0.01017822118520025 0.0003310804197661137 0 +3472 0.01156250000000488 0.0001082531754727814 0 +3473 0.01150342609734276 0.000210603773312547 0 +3474 0.01106238952672125 0.0001097716831320351 0 +3475 0.009687500000010901 0.0001082531754726839 0 +3476 0.009625000000011014 0.0002165063509454533 0 +3477 0.009500000000011152 0.0002165063509456221 0 +3478 0.009562500000011014 0.0003247595264187516 0 +3479 0.009437500000011501 0.0001082531754727178 0 +3480 0.009375000000011511 0.0002146140094382873 0 +3481 0.007187500000018938 0.0001082531754728146 0 +3482 0.007125000000019087 0.0002165063509457355 0 +3483 0.006812500000020088 0.0001082531754727056 0 +3484 0.006998155602702457 0.0002175712142330057 0 +3485 0.00725000000001887 0.0002165063509455541 0 +3486 0.007062500000018994 0.0003247595264187597 0 +3487 0.006929099491626077 0.00033497684629265 0 +3488 0.006687500000020423 0.0001082531754727982 0 +3489 0.006750000000020182 0.0002146140096865583 0 +3490 0.006623155603767793 0.000217255823408757 0 +3491 0.006687500000020196 0.0003247595264187533 0 +3492 0.006549717154488364 0.0003349242772380238 0 +3493 0.004687500000026898 0.0001082531754727049 0 +3494 0.006187672979199709 0.0001080978012767261 0 +3495 0.00612489074702483 0.0002154900685945699 0 +3496 0.006251855017318254 0.0002173759375351961 0 +3497 0.006180834125041443 0.000334395022667054 0 +3498 0.006319791298090053 0.0003365502127343506 0 +3499 0.006256304812988125 0.0005072405222615071 0 +3500 0.006444845483416397 0.0004772190776301556 0 +3501 0.006064754043025606 0.0004638714075337042 0 +3502 0.009062500000012835 0.0001082531754727064 0 +3503 0.009126844397603855 0.0002175712143913739 0 +3504 0.008312500000015306 0.0001082531754728419 0 +3505 0.008250000000015401 0.0002137843796833736 0 +3506 0.008125000000015557 0.0002127454386574358 0 +3507 0.008376844397499987 0.0002171175524529877 0 +3508 0.008316474244097712 0.0003356374078429259 0 +3509 0.008464136576086521 0.0003561476574659827 0 +3510 0.01281250000000089 0.0001082531754727255 0 +3511 0.01275000000000102 0.0002117464799203862 0 +3512 0.01262507859804036 0.00021466595570687 0 +3513 0.004562500000027301 0.0001082531754727013 0 +3514 0.01193750000000361 0.0001082531754726944 0 +3515 0.01168750000000449 0.0001082531754727913 0 +3516 0.01174630593680613 0.0002215049451797017 0 +3517 0.007937475444180707 0.0001082673527911248 0 +3518 0.007876815748957693 0.0002175877544951709 0 +3519 0.007745858861000649 0.000216411662887813 0 +3520 0.007812500000016587 0.0003247595264187542 0 +3521 0.007948566384513626 0.0003311487064872178 0 +3522 0.007676108193609171 0.000327613165523803 0 +3523 0.007614835547258562 0.0002132385830883056 0 +3524 0.007538862942390133 0.0003302965230144509 0 +3525 0.007896429523114723 0.0004762822478380101 0 +3526 0.00768509117888565 0.0001063426142167522 0 +3527 0.005561990339436461 0.0001028386624307575 0 +3528 0.005310973522934182 0.000108409563118644 0 +3529 0.005189187437812384 0.0001119097972688513 0 +3530 0.01131250000000567 0.0001082531754727674 0 +3531 0.01125000000000592 0.0002165063509457417 0 +3532 0.004937500000026095 0.0001054375551069406 0 +3533 0.007312297827541596 0.0001079090629294839 0 +3534 0.006937192600466805 0.0001084306526872993 0 +3535 0.01306372466686546 0.0001079437942355103 0 +3536 0.01300159674304809 0.000217307538402331 0 +3537 0.009937500000010088 0.0001082531754727264 0 +3538 0.009875000000010264 0.0002165063509457712 0 +3539 0.01393749999999723 0.0001074689262270757 0 +3540 0.01256331166705242 0.000107099805070447 0 +3541 0.0100625000000096 0.0001080338076614384 0 +3542 0.006312837999434015 0.0001083722108715995 0 +3543 0.00843780739959573 0.0001083550423906461 0 +3544 0.00806249590737668 0.0001076287196444455 0 +3545 0.01043750000000848 0.0001077793289630642 0 +3546 0.006562192600645357 0.0001083780875499209 0 +3547 0.01444033563194894 0.0001267095518426714 0 +3548 0.01356249999999846 0.0001082531754726451 0 +3549 0.01068750000000756 0.0001078517558021996 0 +3550 0.008937448766747921 0.0001082827550122919 0 +3551 0.009312500000011908 0.0001079377852214938 0 +3552 0.01314416048634627 0.0002261239885725539 0 +3553 0.01307085579142214 0.0003536734335065344 0 +3554 0.01474395673040282 0.0001934478111064532 0 +3555 0.01162500000000475 0.0002165063509454819 0 +3556 0.008625000000014279 0.000216506350945453 0 +3557 0.009750000000010679 0.0002165063509453646 0 +3558 0.0113877769065371 0.0002197503033570982 0 +3559 0.01287506927422005 0.0002141425206908283 0 +3560 0.01187500000000377 0.0002165063509452492 0 +3561 0.01112823782026578 0.0002335499578009042 0 +3562 0.008504798062204253 0.000219964209383105 0 +3563 0.006875000000019706 0.0002165063509452844 0 +3564 0.01000000000000979 0.0002149342149646363 0 +3565 0.009000247627468693 0.0002167183376492019 0 +3566 0.009050420252962134 0.0003398511296137404 0 +3567 0.009198566385560103 0.0003311487070936371 0 +3568 0.009132234958326867 0.0005205811826273202 0 +3569 0.008000000000016074 0.0002165063509452976 0 +3570 0.009250784182661316 0.0002161353756853567 0 +3571 0.006375000000021481 0.0002165063509450138 0 +3572 0.006498222066549445 0.0002164688620772008 0 +3573 0.007372385257219539 0.0002148072383120634 0 +3574 0.007317806324254648 0.000331580697752156 0 +3575 0.01050000000000828 0.0002131104509600679 0 +3576 0.01062500000000762 0.0002117054629638582 0 +3577 0.0105475352903655 0.0003228568696955576 0 +3578 0.001502175115199834 0.0114791664843137 0 +3579 0.00494244138528679 0.01185781683571805 0 +3580 0.009944808104606316 0.0003269212451593788 0 +3581 -0.01169346475564591 0.000327343775653482 0 +3582 0.01932055488107985 0.0001080422884742062 0 +3583 0.01925541151268087 0.0002086363038979629 0 +3584 0.007024794347925497 0.0004793075405651635 0 +3585 0.00680906143962163 0.0004613747982386884 0 +3586 0.006927209853498774 0.0007078629113795599 0 +3587 0.01039847125483464 0.001831504791211001 0 +3588 -0.01250308984423862 0.0002178570816747231 0 +3589 0.003790665171751215 0.0001941492590324417 0 +3590 -0.01830758080681544 0.000335546216996492 0 +3591 0.008742477388016699 0.0004518691969386607 0 +3592 0.01644171049197942 9.79665390677861e-05 0 +3593 0.002186578457611335 9.866408378187777e-05 0 +3594 0.003125000000028433 0.0002165063509462266 0 +3595 0.008076455507164812 0.0004172711860583905 0 +3596 -0.0180089356299797 0.0005159878920199673 0 +3597 0.01839620884127111 0.01519449681625338 0 +3598 -0.01565319831907092 0.001095395300851975 0 +3599 -0.01324999999999183 0.0002165063509462443 0 +3600 0.001549239992358041 0.002259354866007899 0 +3601 0.01531518873080645 0.0001047338265492283 0 +3602 0.001955163459246278 0.001106740093137459 0 +3603 0.01121209906566201 0.0003771472366479947 0 +3604 -0.004499999999980975 0.0002165063509462282 0 +3605 -0.0005277763025539386 0.001745498200875335 0 +3606 -0.004120442928057398 0.0002148302652136778 0 +3607 0.005125874698504757 0.0002049673436858752 0 +3608 0.01038340166226464 0.009412931851307748 0 +3609 -0.005095822661977788 0.01822308059742922 0 +3610 -0.01876909606885475 0.005499836215930142 0 +3611 0.01181580501283026 0.0003516929554662874 0 +3612 -0.002690144663753256 0.0001177052922515466 0 +3613 -0.0001994569127940273 0.0003245295093206282 0 +3614 -0.002909420773190535 0.005883228711637886 0 +3615 -0.003030452440492015 0.0004080895660128926 0 +3616 -0.005492186715613475 0.0002164020936189985 0 +3617 -0.009321297046920961 0.0003233899892564847 0 +3618 -0.003341708064389765 0.0003664072479798304 0 +3619 -0.0085574958153817 0.001557319893518578 0 +3620 -0.01493749999999244 0.0003247595264206298 0 +3621 -0.007069289893744254 0.0183448548082883 0 +3622 0.01401746818524068 0.0002162944230956187 0 +3623 -0.01549904635767896 0.000215955765298542 0 +3624 0.01422681735211462 0.0002113869051400527 0 +3625 0.008260655927594665 0.0005034915078951727 0 +3626 0.01844118086383723 0.0003344955800168541 0 +3627 0.01767759578400536 0.000106258978301683 0 +3628 -0.01862960435159755 0.002000436386809662 0 +3629 -0.01788689994979261 0.001967830553486003 0 +3630 5.940323910767818e-05 0.001997477327604143 0 +3631 -0.01479862555962359 0.0003487907620652297 0 +3632 0.01969652389229714 0.000110096228634882 0 +3633 -0.01055798650787988 0.0001068232950977354 0 +3634 0.005932954848360465 0.0001052549031175537 0 +3635 0.005998592730097641 0.000214707848764467 0 +3636 0.004980469991466147 0.002424452061193182 0 +3637 0.01206300040416233 0.000348793162033986 0 +3638 0.01561732662201949 0.0002081667279343315 0 +3639 -0.01415690279626964 0.0003455624147666497 0 +3640 -0.003540332074047776 0.001360539137750021 0 +3641 -0.01981270974361012 9.796785145052501e-05 0 +3642 0.01719033083914915 0.0001045486941666195 0 +3643 -0.01893850511943185 0.0001038090317392712 0 +3644 -0.01681018190615875 0.0001063195802010609 0 +3645 -0.01743266961724873 0.0001080072464755648 0 +3646 -0.01918554842920859 0.000103563736397277 0 +3647 -0.01031249999998812 0.0001000672004093118 0 +3648 -0.008809960757850109 0.0001063887396710628 0 +3649 0.00755999231931275 0.000104551815750034 0 +3650 -0.01205539256854848 0.0001041496980169649 0 +3651 0.01842893974195558 0.01707174539941664 0 +3652 0.0199016468460367 0.0001803734882761292 0 +3653 0.01978122833832519 0.0002181076234415956 0 +3654 0.0023317506399137 0.0006547578521115044 0 +3655 0.01581405382164231 0.000123855669054454 0 +3656 0.01250046374255304 0.0002162386090583479 0 +3657 -0.01674272179360146 0.0002123042765253105 0 +3658 -0.017368217583763 0.0001972550432086884 0 +3659 -0.008743873023828513 0.0002123821735448717 0 +3660 0.007491098768058831 0.00021436341741709 0 +3661 0.01349554465290678 0.0002135508929651105 0 +3662 -0.01279311628418027 0.001384179012397314 0 +3663 -0.01261179866212796 0.001905377303692979 0 +3664 -0.01964229280578858 0.001436912414983925 0 +3665 0.0102779547846865 0.002694417997830785 0 +3666 -0.004941515792582497 9.687543514083594e-05 0 +3667 0.002947697579593042 0.0001025255662353725 0 +3668 0.01331908044529108 0.0001020084201805479 0 +3669 0.01790529542225008 0.0005004191739668738 0 +3670 -0.00706037550971607 0.001841445622440641 0 +3671 -0.01636581168182613 0.000232771973951755 0 +3672 -0.008687722530118434 0.0003225895899487633 0 +3673 0.01865983867460674 0.0003452820690487516 0 +3674 0.01053383898969567 0.007344501768786382 0 +3675 0.009810571329887401 0.0003266477471884694 0 +3676 0.00988272789125519 0.0004843808538027887 0 +3677 0.01032191342516598 0.0003276805144635434 0 +3678 0.01025793903254643 0.0004780804093444107 0 +3679 -0.009812718911523544 0.0003205413744655915 0 +3680 -0.009555974564460742 0.0003306128990528054 0 +3681 -0.009605747436189829 0.0005033788731647106 0 +3682 -0.01155094582499015 0.0003241982377468623 0 +3683 -0.007813855351693219 0.0003195626945534429 0 +3684 -0.01781811917707827 0.0003152804473913056 0 +3685 0.001559210022613973 0.0003062684679525491 0 +3686 0.0010707709389254 0.0003300379776833446 0 +3687 0.0009896155168523872 0.000491845932632037 0 +3688 0.0008076842672007974 0.0003062511392594754 0 +3689 -0.01956326353259115 0.000320128539628292 0 +3690 -5.64090103530622e-05 0.000328175849384521 0 +3691 -0.0001288400337601612 0.000472729760654179 0 +3692 0.0003165462697000315 0.0003292732843762663 0 +3693 0.0002434396505030854 0.0004767733338394543 0 +3694 0.0004318015217385985 0.0003076048104300177 0 +3695 0.0005857583504753852 0.0005062893000964421 0 +3696 0.0006854067385875578 0.0003374123759458173 0 +3697 0.001184153525424563 0.0003077992603464776 0 +3698 0.001352400664509315 0.0005112667354860444 0 +3699 0.001439829914387502 0.0003383882553043038 0 +3700 -0.01843749999999896 0.0003247595264191999 0 +3701 -0.01837805881834169 0.000457290256628005 0 +3702 -0.01720139453321701 0.0003177234392087712 0 +3703 0.007201061264866248 0.0003095844679246551 0 +3704 -0.009188961399729953 0.0003290812390772604 0 +3705 0.008931528038889112 0.0003198600111853092 0 +3706 0.00942821489787329 0.0003262596462126556 0 +3707 0.009508591472047651 0.0004896435903771298 0 +3708 -0.009923696140235723 0.0003362817405172991 0 +3709 -0.009995941106712964 0.0004998230916740493 0 +3710 0.009689261630094318 0.0003066473956405767 0 +3711 -0.01349916499290974 0.0002070974593933888 0 +3712 -0.01657112842402176 0.001073500171998069 0 +3713 0.01679602002498921 0.01413558169064992 0 +3714 0.01105213649694392 0.001673913487944064 0 +3715 -0.01376234212784141 0.0002077816957157326 0 +3716 0.004959500824871373 0.01845729640508709 0 +3717 0.004312244003091854 0.0001042510301999518 0 +3718 0.002790041982163409 0.0002355961497973961 0 +3719 -0.01161628517861305 0.0004858719504230992 0 +3720 0.01200082173749877 0.0002206625306369703 0 +3721 0.002639233032368018 0.01644739460182844 0 +3722 0.01980282637426851 0.0007021661290470816 0 +3723 0.01696885639849801 0.01211541933951606 0 +3724 -0.01672096643905081 0.001691073159723398 0 +3725 -0.007179489091437846 0.0003363500621113642 0 +3726 -0.007319637909661951 0.0003499079302643987 0 +3727 -0.006438290544587142 0.0001163989170879234 0 +3728 0.004125553750432547 0.0001992769838550029 0 +3729 0.01093053546965326 0.0003244637572258056 0 +3730 0.01389257332469827 0.0002267789965890707 0 +3731 0.004873488916539042 0.0002084706518266555 0 +3732 0.005000000000025881 0.0002138436453797787 0 +3733 0.001352915332524542 0.001607124382164665 0 +3734 0.006060630985941195 0.0003115527721940432 0 +3735 -0.009173440583398907 0.002542041535241818 0 +3736 -0.006631891703544236 0.0002099525802402576 0 +3737 -0.006687443828790046 0.0003236742921568235 0 +3738 0.006484490277023511 0.00216938348481776 0 +3739 0.01297798591285514 0.001792092334674242 0 +3740 -0.004249297826575897 0.0002133934397084513 0 +3741 -0.004184779489967128 0.0003506537006236472 0 +3742 -0.01530887405043575 0.0003200182391236647 0 +3743 0.01230934628492797 0.0001175243395458431 0 +3744 -0.01890119663918558 0.0004816690447429026 0 +3745 -0.01363113578332378 0.0002126821854799177 0 +3746 0.003590573309107047 0.000120437914731172 0 +3747 -0.01334466735532711 0.001357333258563567 0 +3748 -0.004633684340378709 0.0002268055171448893 0 +3749 -0.004436614991052117 0.0003455583047194278 0 +3750 -0.004378618520736872 0.0002147240656468597 0 +3751 -0.0130562069383654 0.0002397191136285435 0 +3752 -0.000515498573840977 0.002564103120846381 0 +3753 -0.01236508669000844 0.000212776541941899 0 +3754 -0.01549567789312714 0.007834032799911158 0 +3755 -0.003987555044681726 0.000221814517497368 0 +3756 0.01484562981187905 0.001476356191793932 0 +3757 0.01825419702756947 0.0002197622330246494 0 +3758 -0.006809759941528126 0.005287549041289866 0 +3759 -0.01911797530524502 0.0002058016750201583 0 +3760 -0.01900004844267521 0.000206355390894607 0 +3761 0.01726809304795821 0.0002087937565818984 0 +3762 0.01514386360513068 0.0002167115655810005 0 +3763 -0.001387142091989244 0.001494174031522861 0 +3764 -0.01084976104854921 0.002964808633807721 0 +3765 0.00704060322791222 0.01836179363911003 0 +3766 -0.01443749999999288 0.0003247595264197758 0 +3767 -0.01262183274159453 0.0001965143041010626 0 +3768 0.004499343296324871 0.0002066090935326784 0 +3769 0.01907553136173357 0.0001107295345702678 0 +3770 -0.01613964970515679 0.01332374014397345 0 +3771 0.007234789624366075 0.0004605807565543121 0 +3772 0.007455228995491143 0.0004528753441161026 0 +3773 0.006629784399563055 0.0004522648282244568 0 +3774 0.006404722451263299 0.0007381700508916615 0 +3775 0.005809432526761894 0.0001032895024767069 0 +3776 0.005747476761131628 0.0001896835339667567 0 +3777 0.002250064584308321 0.0002056380045692734 0 +3778 0.01638556001311688 0.0002073432165668716 0 +3779 -0.00880247491803888 0.0003076923314157833 0 +3780 -0.01063333228915574 0.00032829240643549 0 +3781 -0.003751853616839629 0.000195643095268524 0 +3782 -0.003900480121976706 0.0003576015105028972 0 +3783 -0.003619599435428761 0.0003613677774254722 0 +3784 0.01620608952742316 0.0001074585885778228 0 +3785 0.01854539616379651 0.01130353787735854 0 +3786 0.01095795796139082 0.01849648800062185 0 +3787 -0.01191618506265101 0.001417273612830172 0 +3788 -0.0135484276171073 0.0003339842956355388 0 +3789 -0.0160104333177555 0.0003424580935626728 0 +3790 0.01162261324572512 0.001627966051216743 0 +3791 -0.01125859988542782 0.0002046693807261352 0 +3792 -0.01128377123480498 0.0003283134439043881 0 +3793 0.01587054739191123 0.005415136771843947 0 +3794 0.005498669764660842 0.0002013430282309425 0 +3795 0.007398697565826153 0.0006941446928571394 0 +3796 0.003823864603372283 8.900560949671608e-05 0 +3797 0.00367714812756003 0.000220996067766545 0 +3798 -0.0004887722090459345 0.0002059478921696263 0 +3799 -0.0004629467162587727 0.0003319480654041325 0 +3800 0.01591002257105724 0.0002141478293277141 0 +3801 -0.006266606465988154 0.001152758253627343 0 +3802 0.01538399756635668 0.0001848345293415345 0 +3803 0.01452842308943103 0.001081529412782846 0 +3804 -0.01194494038852059 0.0004293859061984517 0 +3805 -0.004888692093413817 0.0002106890500819675 0 +3806 -0.01337499999999183 0.0002028606781646399 0 +3807 -0.01441810073621181 0.00175928293480524 0 +3808 -0.01490762966196036 0.001504032311408053 0 +3809 -0.01537541444199315 0.001320433534687102 0 +3810 0.004366378994069523 0.0006179434941261558 0 +3811 0.01486185599542467 0.0002251707603922219 0 +3812 0.01434747748298409 0.0002414359875551721 0 +3813 -0.0103648482393749 0.0001886473488071402 0 +3814 -0.01046466330429967 0.0002332391742664817 0 +3815 -0.01819812176894898 0.000320691991204477 0 +3816 0.006437515200513147 0.000316333756124949 0 +3817 0.009314370970658006 0.0003035721671966687 0 +3818 0.006811637094131589 0.000312327063212647 0 +3819 0.008575957268339622 0.0003120868167909081 0 +3820 0.01429602588170263 0.000803693768853667 0 +3821 0.01500694204046225 0.001008506153245368 0 +3822 -0.01718417902952366 0.008745768714399076 0 +3823 -0.005069712819138889 9.569060109812199e-05 0 +3824 -0.00511934640742205 0.0001969640442473624 0 +3825 -0.004720712847537836 0.0003454979514519537 0 +3826 0.01497764026249913 0.01866832478682717 0 +3827 -0.01726164028278077 0.002314362108766201 0 +3828 -0.001540991430165683 0.0001091990169008594 0 +3829 0.007514973771247877 0.002592813465255407 0 +3830 0.0117402294101012 0.001109322876746798 0 +3831 0.01630105523808465 0.0003133437281779321 0 +3832 -0.01218570054047777 0.0006839611806513126 0 +3833 0.003315068840493815 0.0002152298379113324 0 +3834 0.01699622167295685 0.0005956943731760061 0 +3835 0.01680094398179644 0.0006514201260859078 0 +3836 -0.01967627222611349 0.0005525294401379626 0 +3837 0.01748944828148196 0.0001942334585198772 0 +3838 0.01455482907505151 0.0003394962569588836 0 +3839 0.01398536407620837 0.0003745857086944505 0 +3840 0.01268869170675977 0.0003167985502427927 0 +3841 -0.009259185391002957 0.0004535615975427995 0 +3842 0.00845915353135664 0.002386952024791686 0 +3843 0.008644971113787515 0.001628143200001436 0 +3844 -0.002273207173593332 0.01676732458094424 0 +3845 0.01886211198680017 0.0004943126510769029 0 +3846 -0.0103347391177222 0.0003026208509691985 0 +3847 -0.01031472233139123 0.0004346163073288316 0 +3848 -0.01387666191475257 0.0009246636055373777 0 +3849 0.0003581809974974905 0.001404656506523047 0 +3850 0.0007900698195368695 0.001920884127899335 0 +3851 -0.01448169556873158 0.000433528463608319 0 +3852 -0.007645377061073582 0.002287939722845085 0 +3853 -0.007534978799203412 0.003527630648382998 0 +3854 -0.001766296756354191 0.001946859906593598 0 +3855 -0.0143646661293708 0.01674643847281991 0 +3856 0.0154931313157731 0.0009282386158655903 0 +3857 0.01501583712461571 0.0002075421673112579 0 +3858 -0.00612993262225153 0.0004736932824460333 0 +3859 -0.01467512809645007 0.00514611819718941 0 +3860 0.01627774855344181 0.0001959185200214453 0 +3861 -0.01288749363509858 0.0004710737464282387 0 +3862 0.004180533615501464 0.0001008816518090182 0 +3863 0.005627925758492046 0.0001984948303028825 0 +3864 0.01621084078739208 0.001226072986384674 0 +3865 -0.01636377078775997 0.0008320935647735171 0 +3866 -0.01928063651297063 0.0006467741764696537 0 +3867 -0.01225420742733693 0.0001924409485777068 0 +3868 0.0162545524366949 0.003128573640033638 0 +3869 -0.008238160696726778 0.001266392056134355 0 +3870 0.003019130459046956 0.0002074687929459208 0 +3871 0.01256250784568416 0.0003205747368924368 0 +3872 0.01246073919634421 0.001015520908199654 0 +3873 0.009068291770533471 0.002049526699836119 0 +3874 -0.01854981656914428 0.01149839748879975 0 +3875 0.01869713346251256 0.009456123621048931 0 +3876 0.01483449387099348 0.0003965643300973053 0 +3877 0.01520604355071604 0.0007520710830363755 0 +3878 -0.01863841283749483 0.01509682975964978 0 +3879 -0.01149369202104975 0.01671410855809547 0 +3880 -0.005624999999982359 0.0001952179807265461 0 +3881 -0.005494848524352391 0.0003574682325184098 0 +3882 0.006536350683313619 0.003257963630832199 0 +3883 -0.01854372834905734 0.001394537657916979 0 +3884 0.002057801349223237 9.477340898738448e-05 0 +3885 0.0165677341059238 9.470741402181045e-05 0 +3886 -0.002909942579866197 0.0004949981600296974 0 +3887 0.01269704923286344 0.002330368830600094 0 +3888 0.01298623703868624 0.0004770398097801276 0 +3889 -0.0004846245413861189 0.0005154653067799207 0 +3890 0.001992230610708998 0.0001901799429523887 0 +3891 0.01663298599248779 0.000190172413645667 0 +3892 -0.011985122621123 0.0002011276377968103 0 +3893 0.01240050222773837 0.0002021747465805008 0 +3894 -0.01474089147519943 0.00108701580751275 0 +3895 0.01794228767271599 0.0007272402413633037 0 +3896 -0.0133071039695547 0.0003405631737207614 0 +3897 -0.01314773117834988 0.0002025786286955459 0 +3898 -0.005265412010191415 0.000348128545950545 0 +3899 -0.009372303243728746 0.0005914041463112785 0 +3900 -0.01506472022892698 0.0003220099575640974 0 +3901 -0.0160514788985614 0.001935686450619792 0 +3902 0.01737954685785443 0.000181175341424756 0 +3903 -0.0001177310574708947 0.003380944510259521 0 +3904 0.01548975268671425 0.0002044627172701599 0 +3905 -0.002598996617514832 0.0002014932910810263 0 +3906 0.01206956242178141 0.001442130338183354 0 +3907 -0.007924340246512849 0.0003394527474607408 0 +3908 -0.01125906004855349 0.0005110455524807725 0 +3909 0.005931539783072363 0.0006336375745676696 0 +3910 -0.0110748619988461 0.0006021437558188836 0 +3911 -0.01218918836815977 8.77755933952572e-05 0 +3912 -0.009804332063963944 0.001470053552463671 0 +3913 0.007887833277589055 0.0007099928066352472 0 +3914 -0.01859000761514158 0.009567151304334102 0 +3915 -0.000820628492647759 0.0005077339384164225 0 +3916 -0.0006614439765589719 0.0006290795342696173 0 +3917 -0.01182533757901561 0.0003190203490306153 0 +3918 5.96380323393497e-05 0.0003043407862784737 0 +3919 -0.002168826921469315 0.0003096565618023833 0 +3920 0.002635923039512092 0.001189957808547262 0 +3921 -0.001559803605624861 0.002740891228297506 0 +3922 0.005367127929652707 0.0001965383836955653 0 +3923 -0.01387122574021539 0.0001848324710052371 0 +3924 -0.01398523564283871 0.0003387711767668526 0 +3925 0.01060127339238424 0.0004752198586204144 0 +3926 0.018550762622919 0.0003117199665563351 0 +3927 0.003467943870690533 0.0005701473415900043 0 +3928 0.003541400210769795 0.0008470026103488905 0 +3929 -0.007613676976895421 0.0004629250901723695 0 +3930 -0.002071050262488935 0.0003100001108672436 0 +3931 -0.00212132095358272 0.0004194733407627437 0 +3932 0.0187004255597482 0.005729736417908563 0 +3933 0.003079575926086017 0.0006753119759102108 0 +3934 0.003226243298382201 0.0009741311146797254 0 +3935 -0.008441055718778448 0.0003356590965687827 0 +3936 0.01580026523936768 0.0007470167919328808 0 +3937 0.01603703810200351 0.0007664026599904368 0 +3938 0.0145286345443956 0.0002085480440429909 0 +3939 0.01006250000000912 0.000316862285211488 0 +3940 0.01822337459074509 0.0007254683669799518 0 +3941 -0.003871311061534917 0.001882555931354913 0 +3942 0.01412265002391281 0.0001879724427175124 0 +3943 -0.005369706094276937 0.0004449718963636587 0 +3944 -0.01419882613680633 0.0004742847104903034 0 +3945 0.0053109985292384 0.0008679618533041472 0 +3946 0.01720522036100255 0.008344952743487444 0 +3947 -0.00681876759383216 0.000331398766350437 0 +3948 -0.001062499999976524 0.000312260089529037 0 +3949 -0.005819906583055937 0.0003094200092719543 0 +3950 -0.008009723533014483 0.01704380317220482 0 +3951 -0.01922751267804572 0.0004554269930400538 0 +3952 -0.01657757236614951 0.0003523034635890513 0 +3953 0.004750000000026696 0.0001887101432990699 0 +3954 -0.008862394747039821 0.003608989787917735 0 +3955 -0.01612816053596947 0.0001867234195867719 0 +3956 0.01869752923754726 0.0004894625012604884 0 +3957 0.01832396692664232 0.0003268172685026181 0 +3958 0.01960482332574389 0.0003107524018851214 0 +3959 -0.01088751799991728 0.0004769689855086295 0 +3960 -0.01073606837097452 0.0005627568052020885 0 +3961 -0.01852258566624531 0.01854358448653655 0 +3962 0.00245922492358706 8.469841893925579e-05 0 +3963 -0.01894744074227596 0.0006582139139712142 0 +3964 0.01339416284133238 0.0001977367674188003 0 +3965 -0.009780527200544332 0.0006732704608355517 0 +3966 -0.002940721263365977 0.0003150950006079429 0 +3967 0.01353291264052708 0.0003276152107445284 0 +3968 0.01760020075551914 0.0001831962022493708 0 +3969 0.01660562675440603 0.0006338311450963523 0 +3970 -0.01081820063329517 0.001201364046326656 0 +3971 -0.01150846704953644 0.001804372674565244 0 +3972 -0.01208622760296178 0.001950875514706513 0 +3973 -0.01155082010258253 0.001300283139745942 0 +3974 -0.01519320613974123 0.0003325453305223889 0 +3975 -0.01527433160668278 0.0004643852780065061 0 +3976 -0.001485366220682674 0.0002019185576452814 0 +3977 0.005617388331220799 0.001092562649350826 0 +3978 0.005843436162749086 0.0008589995973637641 0 +3979 0.01368557453884179 0.0003189192944482279 0 +3980 -0.004840078316384544 0.0004297015721975086 0 +3981 -0.01582462155355987 0.001449191886268122 0 +3982 0.01081052859543063 0.0003254407043998395 0 +3983 0.01731010055509183 0.0008882817816976236 0 +3984 -0.005372536291411072 0.0001851365496364702 0 +3985 0.009837636262247176 0.01696054061142333 0 +3986 -0.01799864634044399 0.004129606555660975 0 +3987 0.00322762648903709 0.0001955661079680516 0 +3988 0.00818346258082624 0.0003241358802511856 0 +3989 -0.007984974099922012 0.0005038445442031353 0 +3990 -0.001152935483470625 0.0004616327309713164 0 +3991 0.01571999064217968 0.0001991804401334049 0 +3992 -0.005700923545926099 0.0003072619947571836 0 +3993 0.007435076457482859 0.0003087846441223726 0 +3994 -0.01855290342536079 0.0003000009798105516 0 +3995 -0.01867613580431196 0.0004821333698614447 0 +3996 -0.01453728343919929 0.0003130189231306579 0 +3997 -0.005285690801311403 0.0009914022351823766 0 +3998 0.009555665334293409 0.003386208405285231 0 +3999 0.01915009142438188 0.0001992978617167881 0 +4000 0.01374274385122976 0.0004312970569705276 0 +4001 -0.01040769637187337 0.0005554245243778597 0 +4002 -0.008311252853995556 0.0003327322096668702 0 +4003 0.002274563297676702 0.00140873055578808 0 +4004 -0.01562499999999472 0.0001857876679267378 0 +4005 -0.01569543889508665 0.0003537858388597357 0 +4006 0.01465724095172024 0.0004793799987737685 0 +4007 0.01076575429786887 0.0005965614134000441 0 +4008 0.01088783473361918 0.0004670070565106723 0 +4009 0.01947305622578239 0.0008955941346384526 0 +4010 -0.01277364037550119 0.0009795503945922617 0 +4011 -0.01330938564270706 0.000952355973556232 0 +4012 -0.0003197111310105735 0.0003041115672431898 0 +4013 -0.004737357779061684 0.000955039340432529 0 +4014 0.01156330536082699 0.0003034224399139503 0 +4015 0.01762301689223301 0.0003971654825415024 0 +4016 -0.003625487244514116 0.0009861463336906526 0 +4017 -0.00338160803351323 0.00101394643341411 0 +4018 -0.002778317014519139 0.001088873969002581 0 +4019 -0.01579008695117039 0.000460663532306661 0 +4020 -0.002168260362418009 0.001134830521082317 0 +4021 -0.001503029737995573 0.001154819102746886 0 +4022 -0.001227833805052988 0.001165807561652977 0 +4023 -0.006534067236226136 0.0001996992174028685 0 +4024 -0.0005276905657480567 0.001270096660376854 0 +4025 -0.008202922563032081 0.0004663055249559517 0 +4026 -0.008553942878150571 0.000456300486738143 0 +4027 -0.008679123308750593 0.000684457325661187 0 +4028 -0.01057038139086299 0.0004589523326346421 0 +4029 -0.006347676238912255 0.0001986544361908571 0 +4030 -0.01246709513222198 0.0026610127955566 0 +4031 0.01251432809859979 0.0004727880684911062 0 +4032 -0.01991177725144229 8.673054736162233e-05 0 +4033 -0.0009433084128097754 0.000298607159080224 0 +4034 -0.000691106783822159 0.0002833075219513025 0 +4035 -0.004822688465823161 0.0003068394508832714 0 +4036 0.0185958666956053 0.01862006649275245 0 +4037 0.01991912533228702 8.001095183936671e-05 0 +4038 -0.01368657781023928 0.002537976447476143 0 +4039 -0.007249092912659168 0.001078458357343163 0 +4040 -0.007406511020747588 0.0005078256400436857 0 +4041 0.00393750000002902 7.181143570731579e-05 0 +4042 -0.0006574428916533235 0.0001957654963923555 0 +4043 -0.01501196545444167 0.0004320771591551379 0 +4044 -0.008454417446688919 0.002109088042377852 0 +4045 0.01319213543327502 0.005115880240031815 0 +4046 -0.01297083301251964 0.0001989011934334332 0 +4047 -0.01142918455960752 0.0003025236658668152 0 +4048 -0.01717827953476975 0.006811637296437263 0 +4049 -0.009436010778589327 0.000299951696102584 0 +4050 -0.01052928041689782 0.0003267329696667076 0 +4051 -0.01644011484122633 0.0003637751352564237 0 +4052 -0.01777491338269424 0.001454546091363804 0 +4053 0.0163536246617191 0.004332482995370633 0 +4054 0.008150178335648657 0.0008499285546291302 0 +4055 0.008433449761150799 0.003377845065474338 0 +4056 0.01396641256576918 0.001679133231233013 0 +4057 0.01372950209586131 0.002168067623863762 0 +4058 0.003404907426948289 8.943584463155557e-05 0 +4059 -0.001337182971866642 0.0005623537651839774 0 +4060 0.01043545380975415 0.0002992725379541936 0 +4061 0.003015069041312944 0.001361533421962958 0 +4062 0.005267811662845186 0.003305628828253609 0 +4063 0.005770587780391415 0.0006534521332995791 0 +4064 -0.008887990229662199 0.0006207517823968468 0 +4065 -0.01071424898730446 0.00153444882289917 0 +4066 0.0191224831924301 0.001684894276476829 0 +4067 -0.001720599699036802 8.914305531120485e-05 0 +4068 -0.007080712418300497 0.0004525425062661796 0 +4069 0.004848139597675495 0.0006373740348775364 0 +4070 0.01698090793827058 0.0008622694109578821 0 +4071 0.01155288638274167 0.002224322164189967 0 +4072 0.007614320769225927 0.0004255531502796051 0 +4073 0.01275188756037743 0.0004373168594648668 0 +4074 0.01267385299595832 0.0005908566166523611 0 +4075 -0.01409486825543487 0.0006015615272602979 0 +4076 0.01603284146699214 9.1490389807305e-05 0 +4077 -0.01681443131911625 0.0003258321027874127 0 +4078 -0.01109116783717503 0.0001969733426386226 0 +4079 0.01440119502247812 0.0003791130445122404 0 +4080 0.003765745177093658 0.0003075927473809602 0 +4081 0.01690528358200072 0.001229256328488352 0 +4082 -0.01060294916043641 0.003727205933692028 0 +4083 -0.002697223234863456 0.0003133223082799468 0 +4084 -0.01473972187734311 0.0005064277843222283 0 +4085 0.01727883010094197 0.006532996468563649 0 +4086 -0.003042544292121114 0.002185428310357343 0 +4087 -0.002777992081245303 0.0002052399935609443 0 +4088 -0.01718369347763616 0.01214642510204367 0 +4089 -0.01083969819426193 0.0003300528567285221 0 +4090 -0.009122955094195964 0.0004393760587017978 0 +4091 -0.005880960012672855 0.0004201791770758395 0 +4092 -0.005806657856137509 0.0005683628621518919 0 +4093 0.0009734121645826444 0.01880414384548232 0 +4094 -0.001998203070287001 0.0005287889800869859 0 +4095 0.01293724764030951 0.0003225524460892042 0 +4096 -0.01106437102490289 0.0002947445856506078 0 +4097 -0.003723178763547884 0.002350207133004403 0 +4098 -0.01193798018359878 0.0002968825222625316 0 +4099 0.01538685967875578 0.0003013153892713531 0 +4100 0.01544716734653571 0.0004228283364346154 0 +4101 0.01068750000000719 0.0003021600362076464 0 +4102 -0.01881773337694456 0.0008556378928329168 0 +4103 0.01943638591953976 7.042472362710901e-05 0 +4104 0.008669298820593583 0.0006427434233218608 0 +4105 -0.006917816488076311 0.0004546247671443896 0 +4106 0.01700310328662409 0.0004388088117862688 0 +4107 0.007730247178139862 0.0004270971259448327 0 +4108 0.01571071989974966 0.001344032420202746 0 +4109 0.01523067108853254 0.0003372542108396955 0 +4110 0.01124802529795626 0.003027383423266493 0 +4111 -0.005641766933702986 0.0004460880978569958 0 +4112 -0.0114255744587891 0.0006332095428009949 0 +4113 -0.01178607404739443 0.0006219086407142807 0 +4114 -0.0138282701399796 0.001922152781911593 0 +4115 0.008385618992047768 0.000479574884555721 0 +4116 -0.01725145534682353 0.0006446850514085751 0 +4117 0.002562500000027743 6.691956705253202e-05 0 +4118 -0.01614196595610088 0.001082377504929039 0 +4119 0.01761277023633248 0.000534766917565369 0 +4120 -0.004847923805788587 0.001861622644700519 0 +4121 0.002344614725933105 0.0001968916533312797 0 +4122 0.004533669939130292 0.0006841303335462428 0 +4123 0.003779448558508457 0.0006866908469915688 0 +4124 0.01780301680004013 0.0002861296822827514 0 +4125 0.0188523709393229 0.0001844994567348218 0 +4126 0.01800041763759288 0.0004368968835782669 0 +4127 0.01413654090296238 0.001011207103860821 0 +4128 0.003976985534337152 0.01719075984098405 0 +4129 0.01856086749825429 0.0005874920135872233 0 +4130 0.003663639426032901 0.002585246256672925 0 +4131 -0.005938311718494639 0.0003017678082019472 0 +4132 -0.01665235954225447 0.0004755678913607561 0 +4133 -0.0149595524899189 0.002072137936766244 0 +4134 0.008062500000015575 0.0002995849967462564 0 +4135 -0.01746732019191112 0.0007481546392711034 0 +4136 -0.006932031231628897 0.0003083836682683349 0 +4137 -0.01555343878252878 0.0004020554003100197 0 +4138 0.0115327443556027 0.0004282111285396547 0 +4139 0.004207831202399233 0.0007090266192550528 0 +4140 0.01281325291881497 0.0003215824551960803 0 +4141 -0.01594610829708122 0.0004562563850069338 0 +4142 -0.004330623092826491 0.0004544822525309741 0 +4143 -0.003768035642331866 0.00048548053123025 0 +4144 -0.002396229776090308 0.0004521131557910244 0 +4145 -0.006063742725153531 0.0003088255266124614 0 +4146 -0.001659761994492453 0.0005563463858701248 0 +4147 -0.001002160437826065 0.0005833943835939255 0 +4148 -0.0003184040851597113 0.0006328055868496341 0 +4149 4.602490960439164e-05 0.0006416838360421943 0 +4150 0.0004036357354322903 0.0006524978963872083 0 +4151 0.0007691301600754137 0.0006708510612050584 0 +4152 0.001158338940118725 0.0006826684990030609 0 +4153 0.001560851339931783 0.0006950073959012187 0 +4154 -0.01906706792108324 0.0004021978434739202 0 +4155 0.008370617863350308 0.0006687798039880215 0 +4156 0.0114704862956283 0.0003048024716981959 0 +4157 -0.007586956156951231 0.0003146269083859998 0 +4158 -0.001483617951904554 0.0002730766700685339 0 +4159 0.001799564978622232 0.0006422644878184078 0 +4160 0.002939694272359746 0.0003231412843903087 0 +4161 -0.006466445862522802 0.0003118826943559994 0 +4162 0.01194530704290106 0.0004756801661071351 0 +4163 -0.005977393507750783 0.001943152671600897 0 +4164 0.002652910555073925 0.0002102465500835861 0 +4165 0.01107309924208683 0.0005432200377134484 0 +4166 0.01044355876391512 0.0006090586848592396 0 +4167 0.01009109876420961 0.00063622435366989 0 +4168 0.009723538807906976 0.0006440626994292367 0 +4169 -0.003053633837597906 0.0003034946150887816 0 +4170 -0.01579760177440858 0.0003227294103346215 0 +4171 0.01934119495929961 0.0001958427015821846 0 +4172 0.009350282212584876 0.0006777663932317023 0 +4173 0.008931299981450471 0.0007517753640805256 0 +4174 0.00860669520331001 0.0004376015284801068 0 +4175 0.01221740252710818 0.0001952695595590357 0 +4176 0.004441044278075286 0.00120426608766338 0 +4177 -0.005016570469612651 0.000280624499311228 0 +4178 -0.004051295486573924 0.0004734039145357046 0 +4179 0.007674641876815906 0.0008603897834237018 0 +4180 0.007203181339653314 0.0009020366299122089 0 +4181 -0.01786607783214206 0.0006899861034994721 0 +4182 0.006687911241329367 0.0009367869460493582 0 +4183 0.006163359806104031 0.00100822588747985 0 +4184 -0.01705078723112428 0.0007652400043714992 0 +4185 -0.01305675476678422 0.0003442223034959414 0 +4186 0.00505654897986444 0.001139610115933448 0 +4187 -0.003475472607508909 0.0004895649787852585 0 +4188 -0.007748417712954046 0.0006364830811217609 0 +4189 0.00378405029876216 0.001242245349825329 0 +4190 -0.01905789374192845 0.0002899779926471146 0 +4191 -0.01342488902390888 0.0004456931106757522 0 +4192 0.01138818801502513 0.0005398590362872789 0 +4193 0.003383731466887059 0.0001690229541521684 0 +4194 -0.01206286791259397 0.0001966378637372346 0 +$EndNodes +$Elements +8706 +1 1 2 3 1 1 7 +2 1 2 3 1 7 8 +3 1 2 3 1 8 9 +4 1 2 3 1 9 10 +5 1 2 3 1 10 11 +6 1 2 3 1 11 12 +7 1 2 3 1 12 13 +8 1 2 3 1 13 14 +9 1 2 3 1 14 15 +10 1 2 3 1 15 16 +11 1 2 3 1 16 17 +12 1 2 3 1 17 18 +13 1 2 3 1 18 19 +14 1 2 3 1 19 20 +15 1 2 3 1 20 21 +16 1 2 3 1 21 22 +17 1 2 3 1 22 23 +18 1 2 3 1 23 24 +19 1 2 3 1 24 25 +20 1 2 3 1 25 2 +21 1 2 3 2 2 26 +22 1 2 3 2 26 27 +23 1 2 3 2 27 28 +24 1 2 3 2 28 29 +25 1 2 3 2 29 30 +26 1 2 3 2 30 31 +27 1 2 3 2 31 32 +28 1 2 3 2 32 33 +29 1 2 3 2 33 34 +30 1 2 3 2 34 35 +31 1 2 3 2 35 36 +32 1 2 3 2 36 37 +33 1 2 3 2 37 38 +34 1 2 3 2 38 39 +35 1 2 3 2 39 40 +36 1 2 3 2 40 41 +37 1 2 3 2 41 42 +38 1 2 3 2 42 3 +39 1 2 5 3 3 43 +40 1 2 5 3 43 44 +41 1 2 5 3 44 45 +42 1 2 5 3 45 46 +43 1 2 5 3 46 47 +44 1 2 5 3 47 48 +45 1 2 5 3 48 49 +46 1 2 5 3 49 50 +47 1 2 5 3 50 51 +48 1 2 5 3 51 52 +49 1 2 5 3 52 53 +50 1 2 5 3 53 54 +51 1 2 5 3 54 55 +52 1 2 5 3 55 56 +53 1 2 5 3 56 57 +54 1 2 5 3 57 58 +55 1 2 5 3 58 59 +56 1 2 5 3 59 60 +57 1 2 5 3 60 61 +58 1 2 5 3 61 62 +59 1 2 5 3 62 63 +60 1 2 5 3 63 64 +61 1 2 5 3 64 65 +62 1 2 5 3 65 66 +63 1 2 5 3 66 67 +64 1 2 5 3 67 68 +65 1 2 5 3 68 69 +66 1 2 5 3 69 70 +67 1 2 5 3 70 71 +68 1 2 5 3 71 72 +69 1 2 5 3 72 73 +70 1 2 5 3 73 74 +71 1 2 5 3 74 75 +72 1 2 5 3 75 76 +73 1 2 5 3 76 77 +74 1 2 5 3 77 78 +75 1 2 5 3 78 79 +76 1 2 5 3 79 80 +77 1 2 5 3 80 81 +78 1 2 5 3 81 82 +79 1 2 5 3 82 83 +80 1 2 5 3 83 84 +81 1 2 5 3 84 85 +82 1 2 5 3 85 86 +83 1 2 5 3 86 87 +84 1 2 5 3 87 88 +85 1 2 5 3 88 89 +86 1 2 5 3 89 90 +87 1 2 5 3 90 91 +88 1 2 5 3 91 92 +89 1 2 5 3 92 93 +90 1 2 5 3 93 94 +91 1 2 5 3 94 95 +92 1 2 5 3 95 96 +93 1 2 5 3 96 97 +94 1 2 5 3 97 98 +95 1 2 5 3 98 99 +96 1 2 5 3 99 100 +97 1 2 5 3 100 101 +98 1 2 5 3 101 102 +99 1 2 5 3 102 103 +100 1 2 5 3 103 104 +101 1 2 5 3 104 105 +102 1 2 5 3 105 106 +103 1 2 5 3 106 107 +104 1 2 5 3 107 108 +105 1 2 5 3 108 109 +106 1 2 5 3 109 110 +107 1 2 5 3 110 111 +108 1 2 5 3 111 112 +109 1 2 5 3 112 113 +110 1 2 5 3 113 114 +111 1 2 5 3 114 115 +112 1 2 5 3 115 116 +113 1 2 5 3 116 117 +114 1 2 5 3 117 118 +115 1 2 5 3 118 119 +116 1 2 5 3 119 120 +117 1 2 5 3 120 121 +118 1 2 5 3 121 122 +119 1 2 5 3 122 123 +120 1 2 5 3 123 124 +121 1 2 5 3 124 125 +122 1 2 5 3 125 126 +123 1 2 5 3 126 127 +124 1 2 5 3 127 128 +125 1 2 5 3 128 129 +126 1 2 5 3 129 130 +127 1 2 5 3 130 131 +128 1 2 5 3 131 132 +129 1 2 5 3 132 133 +130 1 2 5 3 133 134 +131 1 2 5 3 134 135 +132 1 2 5 3 135 136 +133 1 2 5 3 136 137 +134 1 2 5 3 137 138 +135 1 2 5 3 138 139 +136 1 2 5 3 139 140 +137 1 2 5 3 140 141 +138 1 2 5 3 141 142 +139 1 2 5 3 142 143 +140 1 2 5 3 143 144 +141 1 2 5 3 144 145 +142 1 2 5 3 145 146 +143 1 2 5 3 146 147 +144 1 2 5 3 147 148 +145 1 2 5 3 148 149 +146 1 2 5 3 149 150 +147 1 2 5 3 150 151 +148 1 2 5 3 151 152 +149 1 2 5 3 152 153 +150 1 2 5 3 153 154 +151 1 2 5 3 154 155 +152 1 2 5 3 155 156 +153 1 2 5 3 156 157 +154 1 2 5 3 157 158 +155 1 2 5 3 158 159 +156 1 2 5 3 159 160 +157 1 2 5 3 160 161 +158 1 2 5 3 161 162 +159 1 2 5 3 162 163 +160 1 2 5 3 163 164 +161 1 2 5 3 164 165 +162 1 2 5 3 165 166 +163 1 2 5 3 166 167 +164 1 2 5 3 167 168 +165 1 2 5 3 168 169 +166 1 2 5 3 169 170 +167 1 2 5 3 170 171 +168 1 2 5 3 171 172 +169 1 2 5 3 172 173 +170 1 2 5 3 173 174 +171 1 2 5 3 174 175 +172 1 2 5 3 175 176 +173 1 2 5 3 176 177 +174 1 2 5 3 177 178 +175 1 2 5 3 178 179 +176 1 2 5 3 179 180 +177 1 2 5 3 180 181 +178 1 2 5 3 181 182 +179 1 2 5 3 182 183 +180 1 2 5 3 183 184 +181 1 2 5 3 184 185 +182 1 2 5 3 185 186 +183 1 2 5 3 186 187 +184 1 2 5 3 187 188 +185 1 2 5 3 188 189 +186 1 2 5 3 189 190 +187 1 2 5 3 190 191 +188 1 2 5 3 191 192 +189 1 2 5 3 192 193 +190 1 2 5 3 193 194 +191 1 2 5 3 194 195 +192 1 2 5 3 195 196 +193 1 2 5 3 196 197 +194 1 2 5 3 197 198 +195 1 2 5 3 198 199 +196 1 2 5 3 199 200 +197 1 2 5 3 200 201 +198 1 2 5 3 201 202 +199 1 2 5 3 202 203 +200 1 2 5 3 203 204 +201 1 2 5 3 204 205 +202 1 2 5 3 205 206 +203 1 2 5 3 206 207 +204 1 2 5 3 207 208 +205 1 2 5 3 208 209 +206 1 2 5 3 209 210 +207 1 2 5 3 210 211 +208 1 2 5 3 211 212 +209 1 2 5 3 212 213 +210 1 2 5 3 213 214 +211 1 2 5 3 214 215 +212 1 2 5 3 215 216 +213 1 2 5 3 216 217 +214 1 2 5 3 217 218 +215 1 2 5 3 218 219 +216 1 2 5 3 219 220 +217 1 2 5 3 220 221 +218 1 2 5 3 221 222 +219 1 2 5 3 222 223 +220 1 2 5 3 223 224 +221 1 2 5 3 224 225 +222 1 2 5 3 225 226 +223 1 2 5 3 226 227 +224 1 2 5 3 227 228 +225 1 2 5 3 228 229 +226 1 2 5 3 229 230 +227 1 2 5 3 230 231 +228 1 2 5 3 231 232 +229 1 2 5 3 232 233 +230 1 2 5 3 233 234 +231 1 2 5 3 234 235 +232 1 2 5 3 235 236 +233 1 2 5 3 236 237 +234 1 2 5 3 237 238 +235 1 2 5 3 238 239 +236 1 2 5 3 239 240 +237 1 2 5 3 240 241 +238 1 2 5 3 241 242 +239 1 2 5 3 242 243 +240 1 2 5 3 243 244 +241 1 2 5 3 244 245 +242 1 2 5 3 245 246 +243 1 2 5 3 246 247 +244 1 2 5 3 247 248 +245 1 2 5 3 248 249 +246 1 2 5 3 249 250 +247 1 2 5 3 250 251 +248 1 2 5 3 251 252 +249 1 2 5 3 252 253 +250 1 2 5 3 253 254 +251 1 2 5 3 254 255 +252 1 2 5 3 255 256 +253 1 2 5 3 256 257 +254 1 2 5 3 257 258 +255 1 2 5 3 258 259 +256 1 2 5 3 259 260 +257 1 2 5 3 260 261 +258 1 2 5 3 261 262 +259 1 2 5 3 262 263 +260 1 2 5 3 263 264 +261 1 2 5 3 264 265 +262 1 2 5 3 265 266 +263 1 2 5 3 266 267 +264 1 2 5 3 267 268 +265 1 2 5 3 268 269 +266 1 2 5 3 269 270 +267 1 2 5 3 270 271 +268 1 2 5 3 271 272 +269 1 2 5 3 272 273 +270 1 2 5 3 273 274 +271 1 2 5 3 274 275 +272 1 2 5 3 275 276 +273 1 2 5 3 276 277 +274 1 2 5 3 277 278 +275 1 2 5 3 278 279 +276 1 2 5 3 279 280 +277 1 2 5 3 280 281 +278 1 2 5 3 281 282 +279 1 2 5 3 282 283 +280 1 2 5 3 283 284 +281 1 2 5 3 284 285 +282 1 2 5 3 285 286 +283 1 2 5 3 286 287 +284 1 2 5 3 287 288 +285 1 2 5 3 288 289 +286 1 2 5 3 289 290 +287 1 2 5 3 290 291 +288 1 2 5 3 291 292 +289 1 2 5 3 292 293 +290 1 2 5 3 293 294 +291 1 2 5 3 294 295 +292 1 2 5 3 295 296 +293 1 2 5 3 296 297 +294 1 2 5 3 297 298 +295 1 2 5 3 298 299 +296 1 2 5 3 299 300 +297 1 2 5 3 300 301 +298 1 2 5 3 301 302 +299 1 2 5 3 302 303 +300 1 2 5 3 303 304 +301 1 2 5 3 304 305 +302 1 2 5 3 305 306 +303 1 2 5 3 306 307 +304 1 2 5 3 307 308 +305 1 2 5 3 308 309 +306 1 2 5 3 309 310 +307 1 2 5 3 310 311 +308 1 2 5 3 311 312 +309 1 2 5 3 312 313 +310 1 2 5 3 313 314 +311 1 2 5 3 314 315 +312 1 2 5 3 315 316 +313 1 2 5 3 316 317 +314 1 2 5 3 317 318 +315 1 2 5 3 318 319 +316 1 2 5 3 319 320 +317 1 2 5 3 320 321 +318 1 2 5 3 321 322 +319 1 2 5 3 322 323 +320 1 2 5 3 323 324 +321 1 2 5 3 324 325 +322 1 2 5 3 325 326 +323 1 2 5 3 326 327 +324 1 2 5 3 327 328 +325 1 2 5 3 328 329 +326 1 2 5 3 329 330 +327 1 2 5 3 330 331 +328 1 2 5 3 331 332 +329 1 2 5 3 332 333 +330 1 2 5 3 333 334 +331 1 2 5 3 334 335 +332 1 2 5 3 335 336 +333 1 2 5 3 336 337 +334 1 2 5 3 337 338 +335 1 2 5 3 338 339 +336 1 2 5 3 339 340 +337 1 2 5 3 340 341 +338 1 2 5 3 341 342 +339 1 2 5 3 342 343 +340 1 2 5 3 343 344 +341 1 2 5 3 344 345 +342 1 2 5 3 345 346 +343 1 2 5 3 346 347 +344 1 2 5 3 347 348 +345 1 2 5 3 348 349 +346 1 2 5 3 349 350 +347 1 2 5 3 350 351 +348 1 2 5 3 351 352 +349 1 2 5 3 352 353 +350 1 2 5 3 353 354 +351 1 2 5 3 354 355 +352 1 2 5 3 355 356 +353 1 2 5 3 356 357 +354 1 2 5 3 357 358 +355 1 2 5 3 358 359 +356 1 2 5 3 359 360 +357 1 2 5 3 360 361 +358 1 2 5 3 361 4 +359 1 2 3 4 4 362 +360 1 2 3 4 362 363 +361 1 2 3 4 363 364 +362 1 2 3 4 364 365 +363 1 2 3 4 365 366 +364 1 2 3 4 366 367 +365 1 2 3 4 367 368 +366 1 2 3 4 368 369 +367 1 2 3 4 369 370 +368 1 2 3 4 370 371 +369 1 2 3 4 371 372 +370 1 2 3 4 372 373 +371 1 2 3 4 373 374 +372 1 2 3 4 374 375 +373 1 2 3 4 375 376 +374 1 2 3 4 376 377 +375 1 2 3 4 377 378 +376 1 2 3 4 378 1 +377 1 2 4 5 3 379 +378 1 2 4 5 379 380 +379 1 2 4 5 380 381 +380 1 2 4 5 381 382 +381 1 2 4 5 382 383 +382 1 2 4 5 383 384 +383 1 2 4 5 384 385 +384 1 2 4 5 385 386 +385 1 2 4 5 386 387 +386 1 2 4 5 387 388 +387 1 2 4 5 388 389 +388 1 2 4 5 389 390 +389 1 2 4 5 390 391 +390 1 2 4 5 391 392 +391 1 2 4 5 392 393 +392 1 2 4 5 393 394 +393 1 2 4 5 394 395 +394 1 2 4 5 395 5 +395 1 2 4 6 5 396 +396 1 2 4 6 396 397 +397 1 2 4 6 397 398 +398 1 2 4 6 398 399 +399 1 2 4 6 399 400 +400 1 2 4 6 400 401 +401 1 2 4 6 401 402 +402 1 2 4 6 402 403 +403 1 2 4 6 403 404 +404 1 2 4 6 404 405 +405 1 2 4 6 405 406 +406 1 2 4 6 406 407 +407 1 2 4 6 407 408 +408 1 2 4 6 408 409 +409 1 2 4 6 409 410 +410 1 2 4 6 410 411 +411 1 2 4 6 411 412 +412 1 2 4 6 412 413 +413 1 2 4 6 413 414 +414 1 2 4 6 414 6 +415 1 2 4 7 6 415 +416 1 2 4 7 415 416 +417 1 2 4 7 416 417 +418 1 2 4 7 417 418 +419 1 2 4 7 418 419 +420 1 2 4 7 419 420 +421 1 2 4 7 420 421 +422 1 2 4 7 421 422 +423 1 2 4 7 422 423 +424 1 2 4 7 423 424 +425 1 2 4 7 424 425 +426 1 2 4 7 425 426 +427 1 2 4 7 426 427 +428 1 2 4 7 427 428 +429 1 2 4 7 428 429 +430 1 2 4 7 429 430 +431 1 2 4 7 430 431 +432 1 2 4 7 431 4 +433 2 2 1 1 914 2011 911 +434 2 2 1 1 881 1048 879 +435 2 2 1 1 936 2149 1010 +436 2 2 1 1 963 1815 1365 +437 2 2 1 1 1055 1077 1057 +438 2 2 1 1 980 2214 1944 +439 2 2 1 1 1094 1640 1639 +440 2 2 1 1 1202 2160 1238 +441 2 2 1 1 620 1214 685 +442 2 2 1 1 723 742 725 +443 2 2 1 1 743 1830 1759 +444 2 2 1 1 844 2165 840 +445 2 2 1 1 857 2048 856 +446 2 2 1 1 967 2173 960 +447 2 2 1 1 1890 2002 1936 +448 2 2 1 1 17 721 493 +449 2 2 1 1 1145 1208 1207 +450 2 2 1 1 639 2151 566 +451 2 2 1 1 1060 2080 1043 +452 2 2 1 1 723 2016 742 +453 2 2 1 1 624 2054 578 +454 2 2 1 1 540 1605 1080 +455 2 2 1 1 1305 1952 995 +456 2 2 1 1 1024 1700 1665 +457 2 2 1 1 641 2127 562 +458 2 2 1 1 660 2128 558 +459 2 2 1 1 1718 1792 1731 +460 2 2 1 1 1149 1898 1200 +461 2 2 1 1 1173 1210 1204 +462 2 2 1 1 1182 1210 1177 +463 2 2 1 1 1055 1057 847 +464 2 2 1 1 1061 1083 1062 +465 2 2 1 1 1181 1213 1182 +466 2 2 1 1 1294 1834 1009 +467 2 2 1 1 1108 1110 736 +468 2 2 1 1 1050 1912 1624 +469 2 2 1 1 988 1042 990 +470 2 2 1 1 1298 1535 1299 +471 2 2 1 1 1158 2098 1205 +472 2 2 1 1 762 1137 1135 +473 2 2 1 1 560 660 558 +474 2 2 1 1 1145 1907 1208 +475 2 2 1 1 1088 1829 1381 +476 2 2 1 1 868 1063 864 +477 2 2 1 1 997 1336 1334 +478 2 2 1 1 1242 1790 1243 +479 2 2 1 1 1095 1678 487 +480 2 2 1 1 1010 2050 936 +481 2 2 1 1 564 641 562 +482 2 2 1 1 1002 2218 947 +483 2 2 1 1 873 1061 870 +484 2 2 1 1 860 1066 857 +485 2 2 1 1 832 2249 2123 +486 2 2 1 1 532 1218 1139 +487 2 2 1 1 568 639 566 +488 2 2 1 1 490 718 717 +489 2 2 1 1 1203 1960 1776 +490 2 2 1 1 1621 1910 1696 +491 2 2 1 1 519 1892 764 +492 2 2 1 1 1022 1358 1355 +493 2 2 1 1 831 1786 829 +494 2 2 1 1 1064 1956 864 +495 2 2 1 1 544 1121 777 +496 2 2 1 1 936 1087 932 +497 2 2 1 1 1135 1139 1138 +498 2 2 1 1 580 624 578 +499 2 2 1 1 977 1862 979 +500 2 2 1 1 1164 1994 1190 +501 2 2 1 1 850 1055 847 +502 2 2 1 1 1618 1620 1018 +503 2 2 1 1 825 1085 822 +504 2 2 1 1 778 780 693 +505 2 2 1 1 1739 2248 1340 +506 2 2 1 1 1025 1696 1668 +507 2 2 1 1 575 1726 577 +508 2 2 1 1 1095 2084 1678 +509 2 2 1 1 1155 1976 1157 +510 2 2 1 1 1208 1865 1207 +511 2 2 1 1 842 844 840 +512 2 2 1 1 938 2149 936 +513 2 2 1 1 1615 1942 1879 +514 2 2 1 1 829 2303 826 +515 2 2 1 1 1025 2235 1621 +516 2 2 1 1 1190 1994 1717 +517 2 2 1 1 627 2085 1757 +518 2 2 1 1 1665 1692 1024 +519 2 2 1 1 966 967 960 +520 2 2 1 1 739 1736 730 +521 2 2 1 1 1139 1217 532 +522 2 2 1 1 614 2217 689 +523 2 2 1 1 1063 1878 1662 +524 2 2 1 1 628 2206 1747 +525 2 2 1 1 500 1761 1421 +526 2 2 1 1 1859 2039 1624 +527 2 2 1 1 726 1736 768 +528 2 2 1 1 1624 2039 1050 +529 2 2 1 1 850 1692 1055 +530 2 2 1 1 1158 2295 1161 +531 2 2 1 1 1071 1969 488 +532 2 2 1 1 1061 1062 870 +533 2 2 1 1 855 857 856 +534 2 2 1 1 813 815 811 +535 2 2 1 1 614 689 688 +536 2 2 1 1 488 1946 1071 +537 2 2 1 1 864 1956 862 +538 2 2 1 1 910 1988 1803 +539 2 2 1 1 1580 1818 1002 +540 2 2 1 1 1905 1906 1079 +541 2 2 1 1 644 2086 619 +542 2 2 1 1 1851 2088 1852 +543 2 2 1 1 780 1852 693 +544 2 2 1 1 1157 2098 1158 +545 2 2 1 1 979 1862 981 +546 2 2 1 1 580 2053 624 +547 2 2 1 1 1150 2110 1191 +548 2 2 1 1 1621 1696 1025 +549 2 2 1 1 1415 2230 1417 +550 2 2 1 1 1048 2223 879 +551 2 2 1 1 840 2165 1047 +552 2 2 1 1 16 721 17 +553 2 2 1 1 1034 1919 952 +554 2 2 1 1 1593 1604 1594 +555 2 2 1 1 490 1791 718 +556 2 2 1 1 883 2015 887 +557 2 2 1 1 484 1256 1212 +558 2 2 1 1 1087 1829 1088 +559 2 2 1 1 679 1758 619 +560 2 2 1 1 40 549 41 +561 2 2 1 1 1285 1829 1087 +562 2 2 1 1 772 1892 519 +563 2 2 1 1 495 765 699 +564 2 2 1 1 1594 1729 1592 +565 2 2 1 1 535 1435 1085 +566 2 2 1 1 1712 1837 907 +567 2 2 1 1 691 2011 914 +568 2 2 1 1 1161 2190 1163 +569 2 2 1 1 1729 2122 1592 +570 2 2 1 1 1354 1358 439 +571 2 2 1 1 1355 1358 1354 +572 2 2 1 1 648 2003 1045 +573 2 2 1 1 1697 2319 1025 +574 2 2 1 1 830 831 829 +575 2 2 1 1 689 1091 688 +576 2 2 1 1 879 2039 877 +577 2 2 1 1 1775 1889 1752 +578 2 2 1 1 1011 1807 1320 +579 2 2 1 1 826 2303 1067 +580 2 2 1 1 648 1975 607 +581 2 2 1 1 611 1726 575 +582 2 2 1 1 1228 2098 1226 +583 2 2 1 1 1058 1862 651 +584 2 2 1 1 693 2315 2268 +585 2 2 1 1 899 1093 896 +586 2 2 1 1 1135 1138 762 +587 2 2 1 1 869 1985 871 +588 2 2 1 1 1421 1761 1420 +589 2 2 1 1 1145 1207 1147 +590 2 2 1 1 1613 2043 1929 +591 2 2 1 1 1469 1598 1471 +592 2 2 1 1 725 2193 727 +593 2 2 1 1 1007 1535 1298 +594 2 2 1 1 578 2054 665 +595 2 2 1 1 770 2264 778 +596 2 2 1 1 1417 1418 1415 +597 2 2 1 1 750 2010 748 +598 2 2 1 1 729 2006 731 +599 2 2 1 1 2158 2194 734 +600 2 2 1 1 1066 1071 857 +601 2 2 1 1 1593 2041 1604 +602 2 2 1 1 1816 1937 1357 +603 2 2 1 1 1070 1740 946 +604 2 2 1 1 950 1002 947 +605 2 2 1 1 1852 2315 693 +606 2 2 1 1 1080 1918 540 +607 2 2 1 1 1109 2022 1111 +608 2 2 1 1 1067 1891 825 +609 2 2 1 1 166 1622 477 +610 2 2 1 1 769 1959 770 +611 2 2 1 1 1450 1452 1200 +612 2 2 1 1 881 2292 1048 +613 2 2 1 1 1621 2234 1018 +614 2 2 1 1 1110 1112 736 +615 2 2 1 1 1033 1920 960 +616 2 2 1 1 1586 1875 1116 +617 2 2 1 1 1092 2025 1090 +618 2 2 1 1 1341 2185 1076 +619 2 2 1 1 1139 2327 1140 +620 2 2 1 1 564 2033 641 +621 2 2 1 1 1066 1969 1071 +622 2 2 1 1 555 2035 554 +623 2 2 1 1 777 1762 544 +624 2 2 1 1 1525 1799 1195 +625 2 2 1 1 1305 1953 1304 +626 2 2 1 1 1619 2321 1019 +627 2 2 1 1 1079 1458 940 +628 2 2 1 1 1167 2302 2160 +629 2 2 1 1 722 1925 723 +630 2 2 1 1 1226 2098 1787 +631 2 2 1 1 1419 1420 1418 +632 2 2 1 1 1020 1457 1455 +633 2 2 1 1 1280 1553 1546 +634 2 2 1 1 1607 1963 1961 +635 2 2 1 1 829 1786 1068 +636 2 2 1 1 838 1072 836 +637 2 2 1 1 1001 2254 2005 +638 2 2 1 1 1649 2045 1650 +639 2 2 1 1 1337 2290 1014 +640 2 2 1 1 1194 2219 1723 +641 2 2 1 1 1439 2320 1054 +642 2 2 1 1 1355 1357 1022 +643 2 2 1 1 973 2169 2157 +644 2 2 1 1 736 1113 1108 +645 2 2 1 1 918 2078 917 +646 2 2 1 1 1618 1622 1620 +647 2 2 1 1 1106 1901 1109 +648 2 2 1 1 1446 1598 1469 +649 2 2 1 1 1709 1721 1639 +650 2 2 1 1 832 1080 831 +651 2 2 1 1 723 1925 759 +652 2 2 1 1 643 644 619 +653 2 2 1 1 805 1097 819 +654 2 2 1 1 1143 1907 1145 +655 2 2 1 1 997 1334 1332 +656 2 2 1 1 1053 2026 628 +657 2 2 1 1 827 1876 1866 +658 2 2 1 1 1469 1471 1467 +659 2 2 1 1 868 1878 1063 +660 2 2 1 1 1530 1739 1340 +661 2 2 1 1 553 1927 784 +662 2 2 1 1 1147 1898 1149 +663 2 2 1 1 1381 1908 1088 +664 2 2 1 1 631 765 643 +665 2 2 1 1 1063 2314 864 +666 2 2 1 1 1157 1158 1155 +667 2 2 1 1 1166 1789 1238 +668 2 2 1 1 1700 2045 1649 +669 2 2 1 1 558 1987 556 +670 2 2 1 1 643 2208 644 +671 2 2 1 1 1144 2097 1970 +672 2 2 1 1 811 1902 808 +673 2 2 1 1 1752 1889 687 +674 2 2 1 1 1212 1793 484 +675 2 2 1 1 718 1791 541 +676 2 2 1 1 1333 1835 1536 +677 2 2 1 1 1879 1942 1047 +678 2 2 1 1 758 1997 746 +679 2 2 1 1 966 2254 967 +680 2 2 1 1 1717 1960 1209 +681 2 2 1 1 2053 2085 627 +682 2 2 1 1 1456 2149 1020 +683 2 2 1 1 759 2016 723 +684 2 2 1 1 1072 1095 836 +685 2 2 1 1 611 2013 786 +686 2 2 1 1 1929 2043 1059 +687 2 2 1 1 554 2183 555 +688 2 2 1 1 937 938 936 +689 2 2 1 1 607 2257 648 +690 2 2 1 1 619 2086 679 +691 2 2 1 1 1446 1599 1447 +692 2 2 1 1 1397 1822 819 +693 2 2 1 1 716 790 492 +694 2 2 1 1 1435 2201 1085 +695 2 2 1 1 815 2009 1749 +696 2 2 1 1 786 1726 611 +697 2 2 1 1 2214 2285 995 +698 2 2 1 1 1299 1903 1297 +699 2 2 1 1 1040 2197 1439 +700 2 2 1 1 856 2307 855 +701 2 2 1 1 1639 1721 1094 +702 2 2 1 1 917 2078 916 +703 2 2 1 1 779 2246 1086 +704 2 2 1 1 1535 1541 1299 +705 2 2 1 1 1087 2050 1285 +706 2 2 1 1 524 2266 2029 +707 2 2 1 1 491 799 720 +708 2 2 1 1 997 2289 1337 +709 2 2 1 1 1421 1515 500 +710 2 2 1 1 826 1067 825 +711 2 2 1 1 693 2268 690 +712 2 2 1 1 1365 1367 963 +713 2 2 1 1 541 2041 718 +714 2 2 1 1 1237 1790 1242 +715 2 2 1 1 813 2009 815 +716 2 2 1 1 828 829 826 +717 2 2 1 1 1043 2080 1056 +718 2 2 1 1 1140 1212 1143 +719 2 2 1 1 1298 1299 1297 +720 2 2 1 1 1111 2022 1119 +721 2 2 1 1 550 696 549 +722 2 2 1 1 842 2294 844 +723 2 2 1 1 570 2311 568 +724 2 2 1 1 698 765 631 +725 2 2 1 1 963 1937 1816 +726 2 2 1 1 1776 1960 680 +727 2 2 1 1 1337 2137 1336 +728 2 2 1 1 1238 2160 1166 +729 2 2 1 1 1600 1918 1860 +730 2 2 1 1 1626 1690 1044 +731 2 2 1 1 1280 1549 994 +732 2 2 1 1 1086 1738 779 +733 2 2 1 1 1222 1840 1183 +734 2 2 1 1 2210 2250 955 +735 2 2 1 1 1113 2178 740 +736 2 2 1 1 625 2053 580 +737 2 2 1 1 879 2223 1050 +738 2 2 1 1 821 2201 456 +739 2 2 1 1 700 2122 1916 +740 2 2 1 1 558 2128 661 +741 2 2 1 1 1786 1932 455 +742 2 2 1 1 1014 2248 1338 +743 2 2 1 1 696 2004 549 +744 2 2 1 1 1265 1796 1186 +745 2 2 1 1 549 1774 41 +746 2 2 1 1 690 2217 614 +747 2 2 1 1 1893 1964 526 +748 2 2 1 1 642 1922 1913 +749 2 2 1 1 1153 1976 1155 +750 2 2 1 1 944 2316 943 +751 2 2 1 1 1248 2295 1192 +752 2 2 1 1 1548 2259 967 +753 2 2 1 1 721 1943 493 +754 2 2 1 1 527 2122 1729 +755 2 2 1 1 1945 1989 1560 +756 2 2 1 1 574 2324 572 +757 2 2 1 1 681 1964 1893 +758 2 2 1 1 1109 1111 1110 +759 2 2 1 1 840 2326 838 +760 2 2 1 1 1916 2122 527 +761 2 2 1 1 997 1337 1336 +762 2 2 1 1 587 783 589 +763 2 2 1 1 1333 1536 1008 +764 2 2 1 1 688 2147 581 +765 2 2 1 1 651 1060 1058 +766 2 2 1 1 947 2218 1069 +767 2 2 1 1 456 2009 821 +768 2 2 1 1 577 1726 579 +769 2 2 1 1 562 2127 642 +770 2 2 1 1 1668 1697 1025 +771 2 2 1 1 946 2156 945 +772 2 2 1 1 495 2262 765 +773 2 2 1 1 1529 1846 1196 +774 2 2 1 1 685 1980 1074 +775 2 2 1 1 1009 1300 1294 +776 2 2 1 1 1005 2153 1708 +777 2 2 1 1 1009 2286 1300 +778 2 2 1 1 849 2025 851 +779 2 2 1 1 685 2154 620 +780 2 2 1 1 1205 1935 1158 +781 2 2 1 1 936 2050 1087 +782 2 2 1 1 1059 2294 1930 +783 2 2 1 1 742 1788 725 +784 2 2 1 1 1119 2037 1111 +785 2 2 1 1 1029 1862 977 +786 2 2 1 1 683 2154 684 +787 2 2 1 1 1605 1932 1080 +788 2 2 1 1 679 1960 1717 +789 2 2 1 1 1019 1695 1617 +790 2 2 1 1 799 1965 1894 +791 2 2 1 1 647 1959 769 +792 2 2 1 1 1566 1909 1565 +793 2 2 1 1 699 1735 495 +794 2 2 1 1 753 2096 760 +795 2 2 1 1 812 813 811 +796 2 2 1 1 852 2007 850 +797 2 2 1 1 602 695 599 +798 2 2 1 1 1828 2282 1015 +799 2 2 1 1 825 1895 1085 +800 2 2 1 1 1457 1459 1455 +801 2 2 1 1 1085 1895 535 +802 2 2 1 1 864 2314 1064 +803 2 2 1 1 885 2015 883 +804 2 2 1 1 1641 1642 1640 +805 2 2 1 1 1079 1906 1458 +806 2 2 1 1 1776 2110 1203 +807 2 2 1 1 1072 2084 1095 +808 2 2 1 1 165 1622 166 +809 2 2 1 1 477 1622 1618 +810 2 2 1 1 1135 1217 1139 +811 2 2 1 1 749 2109 750 +812 2 2 1 1 1340 2248 1896 +813 2 2 1 1 735 2158 1825 +814 2 2 1 1 1645 2079 1646 +815 2 2 1 1 2123 2249 835 +816 2 2 1 1 1085 2201 821 +817 2 2 1 1 760 2096 761 +818 2 2 1 1 1409 2130 1915 +819 2 2 1 1 643 765 676 +820 2 2 1 1 970 2005 968 +821 2 2 1 1 1358 1359 439 +822 2 2 1 1 824 825 822 +823 2 2 1 1 1017 2237 1972 +824 2 2 1 1 1069 2150 947 +825 2 2 1 1 957 2250 2184 +826 2 2 1 1 792 1931 19 +827 2 2 1 1 19 2066 792 +828 2 2 1 1 620 2154 683 +829 2 2 1 1 566 2151 662 +830 2 2 1 1 751 2117 752 +831 2 2 1 1 631 766 698 +832 2 2 1 1 980 2285 2214 +833 2 2 1 1 560 1913 660 +834 2 2 1 1 945 2156 944 +835 2 2 1 1 605 781 701 +836 2 2 1 1 967 2259 1377 +837 2 2 1 1 1419 1421 1420 +838 2 2 1 1 1642 1977 138 +839 2 2 1 1 571 2012 573 +840 2 2 1 1 1183 1840 1225 +841 2 2 1 1 717 719 490 +842 2 2 1 1 1123 2004 696 +843 2 2 1 1 1894 1965 719 +844 2 2 1 1 138 2001 1642 +845 2 2 1 1 547 2004 1123 +846 2 2 1 1 750 2108 2010 +847 2 2 1 1 750 2109 751 +848 2 2 1 1 1626 1728 1627 +849 2 2 1 1 769 770 606 +850 2 2 1 1 1594 1773 1729 +851 2 2 1 1 1338 2137 1337 +852 2 2 1 1 960 2173 1033 +853 2 2 1 1 1433 1434 1343 +854 2 2 1 1 1387 2228 1913 +855 2 2 1 1 814 821 813 +856 2 2 1 1 1080 1932 831 +857 2 2 1 1 554 2035 552 +858 2 2 1 1 1716 1842 1714 +859 2 2 1 1 1418 1737 1415 +860 2 2 1 1 935 936 932 +861 2 2 1 1 1151 1990 1153 +862 2 2 1 1 1112 1118 736 +863 2 2 1 1 839 2099 841 +864 2 2 1 1 2219 2279 1195 +865 2 2 1 1 1093 2225 896 +866 2 2 1 1 1714 2079 1716 +867 2 2 1 1 1849 1945 1560 +868 2 2 1 1 492 791 716 +869 2 2 1 1 752 2117 753 +870 2 2 1 1 1452 1886 1200 +871 2 2 1 1 1342 1482 1481 +872 2 2 1 1 1968 2070 1562 +873 2 2 1 1 1349 1351 1021 +874 2 2 1 1 1545 1547 1001 +875 2 2 1 1 1866 1966 827 +876 2 2 1 1 608 2322 2057 +877 2 2 1 1 904 2180 2059 +878 2 2 1 1 743 2167 1825 +879 2 2 1 1 871 1985 1037 +880 2 2 1 1 1090 2089 1092 +881 2 2 1 1 1536 2215 1008 +882 2 2 1 1 1114 1116 1115 +883 2 2 1 1 1338 2248 1739 +884 2 2 1 1 855 2307 852 +885 2 2 1 1 1071 2048 857 +886 2 2 1 1 1961 1963 1039 +887 2 2 1 1 1018 1619 1618 +888 2 2 1 1 1650 2045 856 +889 2 2 1 1 1089 2154 685 +890 2 2 1 1 1014 2290 1341 +891 2 2 1 1 960 1920 958 +892 2 2 1 1 1589 1786 455 +893 2 2 1 1 1015 1831 1325 +894 2 2 1 1 619 1758 617 +895 2 2 1 1 913 2239 1864 +896 2 2 1 1 1594 1604 545 +897 2 2 1 1 705 782 702 +898 2 2 1 1 1038 2275 1727 +899 2 2 1 1 1002 1582 1580 +900 2 2 1 1 1028 1738 1086 +901 2 2 1 1 1718 1731 961 +902 2 2 1 1 1604 2041 541 +903 2 2 1 1 821 2009 813 +904 2 2 1 1 1712 1887 1836 +905 2 2 1 1 1469 1599 1446 +906 2 2 1 1 1635 1805 913 +907 2 2 1 1 822 1085 821 +908 2 2 1 1 507 1459 181 +909 2 2 1 1 974 2157 972 +910 2 2 1 1 943 2316 941 +911 2 2 1 1 947 2150 946 +912 2 2 1 1 733 2158 735 +913 2 2 1 1 1116 1875 1117 +914 2 2 1 1 1621 2235 922 +915 2 2 1 1 589 783 610 +916 2 2 1 1 1017 1972 1706 +917 2 2 1 1 995 1953 1305 +918 2 2 1 1 869 2199 868 +919 2 2 1 1 981 1862 1058 +920 2 2 1 1 1029 1995 1045 +921 2 2 1 1 1091 2085 625 +922 2 2 1 1 586 614 584 +923 2 2 1 1 701 782 605 +924 2 2 1 1 698 766 668 +925 2 2 1 1 1106 1109 1108 +926 2 2 1 1 579 1726 582 +927 2 2 1 1 614 688 584 +928 2 2 1 1 1405 2107 2106 +929 2 2 1 1 568 1866 639 +930 2 2 1 1 586 692 614 +931 2 2 1 1 660 2228 1599 +932 2 2 1 1 1912 2223 1051 +933 2 2 1 1 1265 1924 1797 +934 2 2 1 1 328 1873 1761 +935 2 2 1 1 940 2189 939 +936 2 2 1 1 770 778 606 +937 2 2 1 1 784 1927 521 +938 2 2 1 1 1030 1721 1709 +939 2 2 1 1 952 1919 950 +940 2 2 1 1 1185 1790 1237 +941 2 2 1 1 1617 1619 1019 +942 2 2 1 1 873 1963 1061 +943 2 2 1 1 1668 1702 1697 +944 2 2 1 1 2059 2063 904 +945 2 2 1 1 1755 1882 122 +946 2 2 1 1 1582 1919 1583 +947 2 2 1 1 796 2051 714 +948 2 2 1 1 1534 1535 1007 +949 2 2 1 1 607 1975 647 +950 2 2 1 1 1339 2248 1014 +951 2 2 1 1 1504 1830 743 +952 2 2 1 1 1525 1800 1798 +953 2 2 1 1 1019 2321 2233 +954 2 2 1 1 1304 1953 1009 +955 2 2 1 1 2149 2189 1020 +956 2 2 1 1 858 860 857 +957 2 2 1 1 661 1469 1467 +958 2 2 1 1 1913 1922 1387 +959 2 2 1 1 1751 1998 1428 +960 2 2 1 1 810 811 808 +961 2 2 1 1 889 2243 888 +962 2 2 1 1 764 1978 519 +963 2 2 1 1 714 2038 796 +964 2 2 1 1 1806 1808 1320 +965 2 2 1 1 1725 2062 1066 +966 2 2 1 1 890 2243 889 +967 2 2 1 1 846 2281 845 +968 2 2 1 1 1076 1751 1343 +969 2 2 1 1 1056 2080 650 +970 2 2 1 1 1045 1884 648 +971 2 2 1 1 1025 2319 2235 +972 2 2 1 1 1990 2252 1839 +973 2 2 1 1 1838 1839 1199 +974 2 2 1 1 1915 2130 1405 +975 2 2 1 1 605 783 587 +976 2 2 1 1 1177 2253 1178 +977 2 2 1 1 870 2199 869 +978 2 2 1 1 1724 2066 493 +979 2 2 1 1 1149 2252 1151 +980 2 2 1 1 487 1860 1095 +981 2 2 1 1 599 695 597 +982 2 2 1 1 1030 1709 1627 +983 2 2 1 1 1078 2170 941 +984 2 2 1 1 1116 1743 1586 +985 2 2 1 1 883 2002 881 +986 2 2 1 1 863 864 862 +987 2 2 1 1 1097 1974 819 +988 2 2 1 1 865 868 864 +989 2 2 1 1 1049 2292 881 +990 2 2 1 1 1708 2065 1005 +991 2 2 1 1 871 873 870 +992 2 2 1 1 616 2155 623 +993 2 2 1 1 878 879 877 +994 2 2 1 1 880 881 879 +995 2 2 1 1 939 2189 938 +996 2 2 1 1 1847 1848 1529 +997 2 2 1 1 584 688 581 +998 2 2 1 1 1044 1728 1626 +999 2 2 1 1 1801 1935 1252 +1000 2 2 1 1 1176 2253 1177 +1001 2 2 1 1 687 1893 526 +1002 2 2 1 1 2030 2031 866 +1003 2 2 1 1 550 697 696 +1004 2 2 1 1 1825 2167 735 +1005 2 2 1 1 1901 2143 1109 +1006 2 2 1 1 913 1864 1635 +1007 2 2 1 1 722 723 525 +1008 2 2 1 1 1794 2195 773 +1009 2 2 1 1 1111 1114 1112 +1010 2 2 1 1 1014 1338 1337 +1011 2 2 1 1 692 693 690 +1012 2 2 1 1 884 2002 883 +1013 2 2 1 1 1274 1281 1277 +1014 2 2 1 1 1364 1370 1368 +1015 2 2 1 1 1235 1241 1239 +1016 2 2 1 1 1388 1391 1384 +1017 2 2 1 1 1430 1432 1425 +1018 2 2 1 1 1224 1229 1227 +1019 2 2 1 1 807 1096 802 +1020 2 2 1 1 1296 1301 1293 +1021 2 2 1 1 1335 1345 1329 +1022 2 2 1 1 1134 1216 1131 +1023 2 2 1 1 526 1752 687 +1024 2 2 1 1 952 2209 1034 +1025 2 2 1 1 1662 2031 1063 +1026 2 2 1 1 1348 1740 1070 +1027 2 2 1 1 898 899 896 +1028 2 2 1 1 1839 2252 1199 +1029 2 2 1 1 987 2270 986 +1030 2 2 1 1 1121 1122 777 +1031 2 2 1 1 1936 2002 884 +1032 2 2 1 1 1114 2174 1116 +1033 2 2 1 1 1748 1962 1899 +1034 2 2 1 1 805 819 816 +1035 2 2 1 1 900 2136 899 +1036 2 2 1 1 1488 2124 1941 +1037 2 2 1 1 1055 1692 1691 +1038 2 2 1 1 667 2208 767 +1039 2 2 1 1 1420 2222 1418 +1040 2 2 1 1 666 2208 643 +1041 2 2 1 1 1088 2232 1087 +1042 2 2 1 1 901 2136 900 +1043 2 2 1 1 745 2260 748 +1044 2 2 1 1 1438 1688 1040 +1045 2 2 1 1 1447 1599 1390 +1046 2 2 1 1 488 1969 1680 +1047 2 2 1 1 548 1762 777 +1048 2 2 1 1 1047 2326 840 +1049 2 2 1 1 922 2234 1621 +1050 2 2 1 1 733 2194 2158 +1051 2 2 1 1 1199 2019 1838 +1052 2 2 1 1 1163 2302 1164 +1053 2 2 1 1 683 2152 602 +1054 2 2 1 1 774 787 786 +1055 2 2 1 1 945 947 946 +1056 2 2 1 1 561 2192 560 +1057 2 2 1 1 1706 2023 1017 +1058 2 2 1 1 708 782 705 +1059 2 2 1 1 702 782 701 +1060 2 2 1 1 799 1894 720 +1061 2 2 1 1 620 1215 1214 +1062 2 2 1 1 850 2007 1692 +1063 2 2 1 1 991 2215 990 +1064 2 2 1 1 1948 2298 1501 +1065 2 2 1 1 1716 2079 1645 +1066 2 2 1 1 1512 1926 1513 +1067 2 2 1 1 1013 2185 1341 +1068 2 2 1 1 1340 1745 1530 +1069 2 2 1 1 828 830 829 +1070 2 2 1 1 856 2048 1650 +1071 2 2 1 1 585 781 605 +1072 2 2 1 1 1068 2303 829 +1073 2 2 1 1 1074 1089 685 +1074 2 2 1 1 1455 1459 507 +1075 2 2 1 1 181 1459 182 +1076 2 2 1 1 1548 2254 1001 +1077 2 2 1 1 766 788 668 +1078 2 2 1 1 834 2249 832 +1079 2 2 1 1 647 769 596 +1080 2 2 1 1 607 647 596 +1081 2 2 1 1 811 2055 1902 +1082 2 2 1 1 990 2215 989 +1083 2 2 1 1 540 1918 1600 +1084 2 2 1 1 1320 1808 1011 +1085 2 2 1 1 993 2290 1337 +1086 2 2 1 1 2157 2169 972 +1087 2 2 1 1 620 683 608 +1088 2 2 1 1 1175 2187 1176 +1089 2 2 1 1 860 2072 1066 +1090 2 2 1 1 1170 2200 1171 +1091 2 2 1 1 1088 1908 1565 +1092 2 2 1 1 1119 2022 530 +1093 2 2 1 1 1455 1456 1020 +1094 2 2 1 1 650 2257 607 +1095 2 2 1 1 1079 1904 1570 +1096 2 2 1 1 685 1214 1213 +1097 2 2 1 1 1332 2159 997 +1098 2 2 1 1 1094 1641 1640 +1099 2 2 1 1 1052 1809 1269 +1100 2 2 1 1 1139 1140 1138 +1101 2 2 1 1 1182 1784 1210 +1102 2 2 1 1 480 2182 1914 +1103 2 2 1 1 1213 1214 1182 +1104 2 2 1 1 602 2152 695 +1105 2 2 1 1 1003 1297 1295 +1106 2 2 1 1 830 832 831 +1107 2 2 1 1 1627 1728 1030 +1108 2 2 1 1 988 1043 1042 +1109 2 2 1 1 790 1742 536 +1110 2 2 1 1 1717 1994 622 +1111 2 2 1 1 1513 2146 747 +1112 2 2 1 1 1325 1828 1015 +1113 2 2 1 1 734 1911 1824 +1114 2 2 1 1 565 2144 564 +1115 2 2 1 1 573 2012 611 +1116 2 2 1 1 731 2194 732 +1117 2 2 1 1 790 2052 492 +1118 2 2 1 1 1866 1876 639 +1119 2 2 1 1 1201 2069 1562 +1120 2 2 1 1 1691 2205 1055 +1121 2 2 1 1 552 2266 524 +1122 2 2 1 1 1024 2045 1700 +1123 2 2 1 1 989 2270 987 +1124 2 2 1 1 1174 2187 1175 +1125 2 2 1 1 943 945 944 +1126 2 2 1 1 1891 1895 825 +1127 2 2 1 1 968 2254 966 +1128 2 2 1 1 493 1943 1724 +1129 2 2 1 1 686 1897 771 +1130 2 2 1 1 841 2099 2089 +1131 2 2 1 1 556 2183 554 +1132 2 2 1 1 1194 2279 2219 +1133 2 2 1 1 1641 1643 1642 +1134 2 2 1 1 1936 2275 1038 +1135 2 2 1 1 1342 2301 1341 +1136 2 2 1 1 847 2281 846 +1137 2 2 1 1 1003 2161 1298 +1138 2 2 1 1 1026 1699 1637 +1139 2 2 1 1 748 2260 749 +1140 2 2 1 1 941 2170 940 +1141 2 2 1 1 1727 2243 1026 +1142 2 2 1 1 1198 1989 1945 +1143 2 2 1 1 989 2215 1536 +1144 2 2 1 1 929 2197 928 +1145 2 2 1 1 1914 2182 1083 +1146 2 2 1 1 2064 2065 1708 +1147 2 2 1 1 1140 1793 1212 +1148 2 2 1 1 1137 2024 1939 +1149 2 2 1 1 907 1887 1712 +1150 2 2 1 1 1341 2301 1339 +1151 2 2 1 1 1001 1549 1545 +1152 2 2 1 1 1068 1786 1589 +1153 2 2 1 1 927 2233 926 +1154 2 2 1 1 1337 2289 993 +1155 2 2 1 1 697 1954 696 +1156 2 2 1 1 940 2170 1079 +1157 2 2 1 1 925 2234 923 +1158 2 2 1 1 922 2235 921 +1159 2 2 1 1 768 1736 522 +1160 2 2 1 1 577 2044 576 +1161 2 2 1 1 920 2236 919 +1162 2 2 1 1 1020 2189 1458 +1163 2 2 1 1 851 2025 1795 +1164 2 2 1 1 865 1985 869 +1165 2 2 1 1 737 2167 738 +1166 2 2 1 1 1077 2095 1057 +1167 2 2 1 1 1761 1873 1420 +1168 2 2 1 1 735 2167 737 +1169 2 2 1 1 916 2237 915 +1170 2 2 1 1 575 2206 574 +1171 2 2 1 1 909 1842 1716 +1172 2 2 1 1 2268 2315 694 +1173 2 2 1 1 1171 2200 1172 +1174 2 2 1 1 912 2239 911 +1175 2 2 1 1 1766 1902 509 +1176 2 2 1 1 1765 1903 465 +1177 2 2 1 1 1417 1419 1418 +1178 2 2 1 1 1051 1882 1755 +1179 2 2 1 1 906 2240 905 +1180 2 2 1 1 1235 1239 1238 +1181 2 2 1 1 1427 1430 1425 +1182 2 2 1 1 1224 1227 1226 +1183 2 2 1 1 1295 1296 1293 +1184 2 2 1 1 1133 1134 1131 +1185 2 2 1 1 1274 1277 1276 +1186 2 2 1 1 1364 1368 1366 +1187 2 2 1 1 1386 1388 1384 +1188 2 2 1 1 1334 1335 1329 +1189 2 2 1 1 804 807 802 +1190 2 2 1 1 1065 2031 2030 +1191 2 2 1 1 903 2244 902 +1192 2 2 1 1 1074 2185 1013 +1193 2 2 1 1 739 1892 1736 +1194 2 2 1 1 2055 2082 509 +1195 2 2 1 1 1183 1839 1222 +1196 2 2 1 1 926 2233 925 +1197 2 2 1 1 708 783 782 +1198 2 2 1 1 923 2234 922 +1199 2 2 1 1 971 2169 970 +1200 2 2 1 1 921 2235 920 +1201 2 2 1 1 1860 1918 835 +1202 2 2 1 1 919 2236 918 +1203 2 2 1 1 2088 2315 1852 +1204 2 2 1 1 700 1735 699 +1205 2 2 1 1 928 2197 927 +1206 2 2 1 1 1195 1800 1525 +1207 2 2 1 1 1200 2083 1149 +1208 2 2 1 1 1836 1887 913 +1209 2 2 1 1 915 2237 912 +1210 2 2 1 1 623 1215 616 +1211 2 2 1 1 911 2239 906 +1212 2 2 1 1 608 683 602 +1213 2 2 1 1 905 2240 903 +1214 2 2 1 1 1007 1536 1534 +1215 2 2 1 1 1054 1909 1566 +1216 2 2 1 1 545 1773 1594 +1217 2 2 1 1 902 2244 901 +1218 2 2 1 1 1079 2170 1904 +1219 2 2 1 1 1439 2197 929 +1220 2 2 1 1 1747 2206 576 +1221 2 2 1 1 1040 1439 1438 +1222 2 2 1 1 1269 2008 1810 +1223 2 2 1 1 1087 2232 932 +1224 2 2 1 1 1536 2270 989 +1225 2 2 1 1 1007 2270 1536 +1226 2 2 1 1 583 781 585 +1227 2 2 1 1 610 2172 794 +1228 2 2 1 1 1238 2188 1202 +1229 2 2 1 1 608 2057 620 +1230 2 2 1 1 1637 1727 1026 +1231 2 2 1 1 1188 2107 1405 +1232 2 2 1 1 1198 2070 1968 +1233 2 2 1 1 773 2195 774 +1234 2 2 1 1 689 2059 1091 +1235 2 2 1 1 1215 1784 1214 +1236 2 2 1 1 967 2254 1548 +1237 2 2 1 1 1913 2228 660 +1238 2 2 1 1 914 2058 691 +1239 2 2 1 1 1011 2283 1944 +1240 2 2 1 1 1158 1161 1160 +1241 2 2 1 1 701 781 634 +1242 2 2 1 1 1513 1926 756 +1243 2 2 1 1 788 798 657 +1244 2 2 1 1 736 2181 731 +1245 2 2 1 1 2057 2322 616 +1246 2 2 1 1 1914 2073 872 +1247 2 2 1 1 2059 2180 1091 +1248 2 2 1 1 1164 2302 1165 +1249 2 2 1 1 732 2194 733 +1250 2 2 1 1 887 2015 889 +1251 2 2 1 1 704 791 706 +1252 2 2 1 1 716 791 704 +1253 2 2 1 1 1122 1868 759 +1254 2 2 1 1 684 1056 683 +1255 2 2 1 1 628 1747 1053 +1256 2 2 1 1 610 2318 2172 +1257 2 2 1 1 849 850 847 +1258 2 2 1 1 845 2294 842 +1259 2 2 1 1 1075 2185 1074 +1260 2 2 1 1 1210 2175 1204 +1261 2 2 1 1 1066 2072 1725 +1262 2 2 1 1 1237 1789 1185 +1263 2 2 1 1 2014 2046 1416 +1264 2 2 1 1 723 725 724 +1265 2 2 1 1 445 2317 2263 +1266 2 2 1 1 851 852 850 +1267 2 2 1 1 969 970 968 +1268 2 2 1 1 1054 1566 1437 +1269 2 2 1 1 958 2184 956 +1270 2 2 1 1 664 2025 1092 +1271 2 2 1 1 1988 2325 2240 +1272 2 2 1 1 970 2168 994 +1273 2 2 1 1 645 1894 1872 +1274 2 2 1 1 854 855 852 +1275 2 2 1 1 1191 2110 1776 +1276 2 2 1 1 603 608 602 +1277 2 2 1 1 1209 2027 1190 +1278 2 2 1 1 861 2090 860 +1279 2 2 1 1 1161 1163 1162 +1280 2 2 1 1 519 1978 775 +1281 2 2 1 1 642 2192 562 +1282 2 2 1 1 819 1974 1397 +1283 2 2 1 1 725 727 726 +1284 2 2 1 1 1622 1867 1620 +1285 2 2 1 1 909 1716 1647 +1286 2 2 1 1 1896 2248 1339 +1287 2 2 1 1 1055 2205 1077 +1288 2 2 1 1 16 1900 721 +1289 2 2 1 1 954 2250 2210 +1290 2 2 1 1 757 2158 1824 +1291 2 2 1 1 956 2250 954 +1292 2 2 1 1 1565 1909 1088 +1293 2 2 1 1 1935 2036 1252 +1294 2 2 1 1 729 731 730 +1295 2 2 1 1 1620 1910 1621 +1296 2 2 1 1 668 788 657 +1297 2 2 1 1 604 798 788 +1298 2 2 1 1 846 2025 849 +1299 2 2 1 1 807 1902 1766 +1300 2 2 1 1 1296 1903 1765 +1301 2 2 1 1 791 792 706 +1302 2 2 1 1 1351 1352 1021 +1303 2 2 1 1 1417 2230 754 +1304 2 2 1 1 634 781 591 +1305 2 2 1 1 1044 2306 1728 +1306 2 2 1 1 1030 2277 1721 +1307 2 2 1 1 222 1281 472 +1308 2 2 1 1 290 1241 1168 +1309 2 2 1 1 1344 1432 263 +1310 2 2 1 1 302 1229 449 +1311 2 2 1 1 200 1370 463 +1312 2 2 1 1 475 1391 59 +1313 2 2 1 1 1004 1301 241 +1314 2 2 1 1 460 1096 69 +1315 2 2 1 1 998 1345 252 +1316 2 2 1 1 454 1216 320 +1317 2 2 1 1 831 1932 1786 +1318 2 2 1 1 2263 2317 1646 +1319 2 2 1 1 1167 2272 1169 +1320 2 2 1 1 543 549 40 +1321 2 2 1 1 2184 2250 956 +1322 2 2 1 1 505 1783 1772 +1323 2 2 1 1 508 1782 1771 +1324 2 2 1 1 1769 1781 531 +1325 2 2 1 1 1768 1780 473 +1326 2 2 1 1 1159 1779 1767 +1327 2 2 1 1 1764 1778 468 +1328 2 2 1 1 1763 1777 497 +1329 2 2 1 1 862 2090 861 +1330 2 2 1 1 1051 2223 1741 +1331 2 2 1 1 1015 1808 1806 +1332 2 2 1 1 972 2169 971 +1333 2 2 1 1 782 783 605 +1334 2 2 1 1 817 2179 2033 +1335 2 2 1 1 562 2192 561 +1336 2 2 1 1 747 2145 1759 +1337 2 2 1 1 1207 1898 1147 +1338 2 2 1 1 1939 2024 755 +1339 2 2 1 1 472 1281 1274 +1340 2 2 1 1 221 1281 222 +1341 2 2 1 1 1168 1241 1235 +1342 2 2 1 1 289 1241 290 +1343 2 2 1 1 1425 1432 1344 +1344 2 2 1 1 263 1432 264 +1345 2 2 1 1 449 1229 1224 +1346 2 2 1 1 301 1229 302 +1347 2 2 1 1 463 1370 1364 +1348 2 2 1 1 199 1370 200 +1349 2 2 1 1 59 1391 60 +1350 2 2 1 1 1384 1391 475 +1351 2 2 1 1 1293 1301 1004 +1352 2 2 1 1 241 1301 242 +1353 2 2 1 1 802 1096 460 +1354 2 2 1 1 69 1096 70 +1355 2 2 1 1 1329 1345 998 +1356 2 2 1 1 252 1345 253 +1357 2 2 1 1 1131 1216 454 +1358 2 2 1 1 320 1216 321 +1359 2 2 1 1 975 2274 974 +1360 2 2 1 1 603 609 608 +1361 2 2 1 1 792 2066 1724 +1362 2 2 1 1 824 826 825 +1363 2 2 1 1 1021 2156 1740 +1364 2 2 1 1 1755 1912 1051 +1365 2 2 1 1 929 2320 1439 +1366 2 2 1 1 536 2052 790 +1367 2 2 1 1 684 2154 1089 +1368 2 2 1 1 1825 1826 1504 +1369 2 2 1 1 1797 1924 1197 +1370 2 2 1 1 785 787 673 +1371 2 2 1 1 743 1825 1504 +1372 2 2 1 1 1642 2001 1640 +1373 2 2 1 1 637 785 673 +1374 2 2 1 1 1798 1800 1196 +1375 2 2 1 1 1589 1785 1068 +1376 2 2 1 1 909 2136 1856 +1377 2 2 1 1 630 785 637 +1378 2 2 1 1 789 793 672 +1379 2 2 1 1 1359 1753 439 +1380 2 2 1 1 672 793 638 +1381 2 2 1 1 638 793 635 +1382 2 2 1 1 703 793 789 +1383 2 2 1 1 596 769 593 +1384 2 2 1 1 636 793 703 +1385 2 2 1 1 593 769 590 +1386 2 2 1 1 592 794 594 +1387 2 2 1 1 598 795 612 +1388 2 2 1 1 795 796 612 +1389 2 2 1 1 595 795 598 +1390 2 2 1 1 621 796 646 +1391 2 2 1 1 612 796 621 +1392 2 2 1 1 654 798 652 +1393 2 2 1 1 652 798 797 +1394 2 2 1 1 657 798 654 +1395 2 2 1 1 652 797 613 +1396 2 2 1 1 613 797 600 +1397 2 2 1 1 437 1326 1324 +1398 2 2 1 1 503 1319 1318 +1399 2 2 1 1 228 1323 229 +1400 2 2 1 1 231 1317 232 +1401 2 2 1 1 503 1318 1317 +1402 2 2 1 1 437 1324 1323 +1403 2 2 1 1 229 1323 1321 +1404 2 2 1 1 232 1317 1315 +1405 2 2 1 1 464 1313 1312 +1406 2 2 1 1 437 1323 228 +1407 2 2 1 1 503 1317 231 +1408 2 2 1 1 229 1321 230 +1409 2 2 1 1 464 1312 1311 +1410 2 2 1 1 234 1311 235 +1411 2 2 1 1 232 1315 233 +1412 2 2 1 1 464 1311 234 +1413 2 2 1 1 1266 1326 437 +1414 2 2 1 1 500 1515 1514 +1415 2 2 1 1 1267 1326 1266 +1416 2 2 1 1 330 1514 331 +1417 2 2 1 1 500 1514 330 +1418 2 2 1 1 235 1311 1309 +1419 2 2 1 1 1452 1596 1232 +1420 2 2 1 1 528 1478 46 +1421 2 2 1 1 213 1378 513 +1422 2 2 1 1 797 798 604 +1423 2 2 1 1 458 1508 1507 +1424 2 2 1 1 1382 1447 1383 +1425 2 2 1 1 230 1321 503 +1426 2 2 1 1 472 1273 1272 +1427 2 2 1 1 331 1514 1509 +1428 2 2 1 1 338 1505 459 +1429 2 2 1 1 212 1378 213 +1430 2 2 1 1 276 1262 467 +1431 2 2 1 1 472 1272 223 +1432 2 2 1 1 46 1478 47 +1433 2 2 1 1 510 1353 187 +1434 2 2 1 1 1490 1492 1491 +1435 2 2 1 1 333 1506 334 +1436 2 2 1 1 331 1509 332 +1437 2 2 1 1 66 1398 534 +1438 2 2 1 1 1374 1379 1378 +1439 2 2 1 1 357 1491 523 +1440 2 2 1 1 235 1309 236 +1441 2 2 1 1 233 1315 464 +1442 2 2 1 1 1099 1495 1098 +1443 2 2 1 1 1098 1495 485 +1444 2 2 1 1 472 1274 1273 +1445 2 2 1 1 271 1526 433 +1446 2 2 1 1 197 1584 508 +1447 2 2 1 1 180 1453 507 +1448 2 2 1 1 1255 1590 1246 +1449 2 2 1 1 1407 1561 1558 +1450 2 2 1 1 1465 1471 1470 +1451 2 2 1 1 1464 1470 53 +1452 2 2 1 1 356 1491 357 +1453 2 2 1 1 463 1363 1362 +1454 2 2 1 1 1261 1263 1262 +1455 2 2 1 1 65 1398 66 +1456 2 2 1 1 485 1495 1494 +1457 2 2 1 1 458 1507 1506 +1458 2 2 1 1 538 1447 1382 +1459 2 2 1 1 275 1262 276 +1460 2 2 1 1 513 1597 214 +1461 2 2 1 1 463 1362 201 +1462 2 2 1 1 47 1478 1476 +1463 2 2 1 1 1373 1378 212 +1464 2 2 1 1 294 1244 1193 +1465 2 2 1 1 503 1321 1319 +1466 2 2 1 1 293 1244 294 +1467 2 2 1 1 482 1105 1104 +1468 2 2 1 1 1451 1596 1452 +1469 2 2 1 1 1243 1245 1244 +1470 2 2 1 1 601 797 604 +1471 2 2 1 1 308 1451 309 +1472 2 2 1 1 1479 1482 1434 +1473 2 2 1 1 348 1104 349 +1474 2 2 1 1 996 1307 1306 +1475 2 2 1 1 326 1422 457 +1476 2 2 1 1 485 1494 1493 +1477 2 2 1 1 1584 1585 508 +1478 2 2 1 1 1453 1454 507 +1479 2 2 1 1 1378 1379 513 +1480 2 2 1 1 223 1272 224 +1481 2 2 1 1 47 1476 48 +1482 2 2 1 1 463 1364 1363 +1483 2 2 1 1 337 1505 338 +1484 2 2 1 1 187 1353 188 +1485 2 2 1 1 996 1306 237 +1486 2 2 1 1 1526 1527 433 +1487 2 2 1 1 1262 1263 467 +1488 2 2 1 1 68 800 460 +1489 2 2 1 1 800 1097 801 +1490 2 2 1 1 1465 1470 1464 +1491 2 2 1 1 64 1396 65 +1492 2 2 1 1 1193 1590 295 +1493 2 2 1 1 332 1509 458 +1494 2 2 1 1 306 1230 483 +1495 2 2 1 1 482 1104 348 +1496 2 2 1 1 483 1596 307 +1497 2 2 1 1 1396 1398 65 +1498 2 2 1 1 473 1521 1520 +1499 2 2 1 1 287 1409 462 +1500 2 2 1 1 211 1373 212 +1501 2 2 1 1 458 1506 333 +1502 2 2 1 1 282 1561 432 +1503 2 2 1 1 352 1493 353 +1504 2 2 1 1 1489 1491 356 +1505 2 2 1 1 473 1520 266 +1506 2 2 1 1 249 1538 435 +1507 2 2 1 1 334 1506 1496 +1508 2 2 1 1 1128 1505 1503 +1509 2 2 1 1 996 1308 1307 +1510 2 2 1 1 547 1123 44 +1511 2 2 1 1 335 1496 502 +1512 2 2 1 1 1221 1231 1230 +1513 2 2 1 1 325 1422 326 +1514 2 2 1 1 354 1483 506 +1515 2 2 1 1 1579 1585 1584 +1516 2 2 1 1 1491 1492 523 +1517 2 2 1 1 1524 1527 1526 +1518 2 2 1 1 1442 1454 1453 +1519 2 2 1 1 51 1460 498 +1520 2 2 1 1 336 1502 337 +1521 2 2 1 1 467 1588 277 +1522 2 2 1 1 175 1564 933 +1523 2 2 1 1 304 1219 1184 +1524 2 2 1 1 1260 1262 275 +1525 2 2 1 1 1246 1590 1193 +1526 2 2 1 1 270 1526 271 +1527 2 2 1 1 236 1309 996 +1528 2 2 1 1 305 1230 306 +1529 2 2 1 1 469 1249 298 +1530 2 2 1 1 470 1119 344 +1531 2 2 1 1 1496 1497 502 +1532 2 2 1 1 1502 1505 337 +1533 2 2 1 1 464 1315 1313 +1534 2 2 1 1 308 1596 1451 +1535 2 2 1 1 459 1505 1128 +1536 2 2 1 1 1483 1484 506 +1537 2 2 1 1 1380 1597 513 +1538 2 2 1 1 1573 1575 1574 +1539 2 2 1 1 1546 1553 1552 +1540 2 2 1 1 186 1568 510 +1541 2 2 1 1 501 1480 258 +1542 2 2 1 1 800 801 460 +1543 2 2 1 1 485 1493 352 +1544 2 2 1 1 224 1272 1270 +1545 2 2 1 1 296 1254 297 +1546 2 2 1 1 349 1104 539 +1547 2 2 1 1 274 1260 275 +1548 2 2 1 1 1460 1461 498 +1549 2 2 1 1 188 1353 1350 +1550 2 2 1 1 1257 1528 1258 +1551 2 2 1 1 340 1125 537 +1552 2 2 1 1 1551 1597 1380 +1553 2 2 1 1 1557 1561 281 +1554 2 2 1 1 433 1528 1257 +1555 2 2 1 1 196 1584 197 +1556 2 2 1 1 63 1393 474 +1557 2 2 1 1 432 1561 1407 +1558 2 2 1 1 1537 1538 248 +1559 2 2 1 1 535 1124 77 +1560 2 2 1 1 1408 1409 286 +1561 2 2 1 1 1573 1574 1571 +1562 2 2 1 1 1546 1552 1542 +1563 2 2 1 1 532 1129 318 +1564 2 2 1 1 1542 1552 218 +1565 2 2 1 1 179 1453 180 +1566 2 2 1 1 1571 1574 193 +1567 2 2 1 1 201 1362 202 +1568 2 2 1 1 1254 1590 1255 +1569 2 2 1 1 1233 1242 448 +1570 2 2 1 1 224 1270 225 +1571 2 2 1 1 1219 1223 1220 +1572 2 2 1 1 188 1350 189 +1573 2 2 1 1 1129 1217 1130 +1574 2 2 1 1 456 1435 75 +1575 2 2 1 1 1219 1220 1184 +1576 2 2 1 1 309 1451 1156 +1577 2 2 1 1 501 1481 1480 +1578 2 2 1 1 469 1250 1249 +1579 2 2 1 1 292 1233 448 +1580 2 2 1 1 1568 1569 510 +1581 2 2 1 1 1264 1588 467 +1582 2 2 1 1 237 1306 238 +1583 2 2 1 1 315 1256 484 +1584 2 2 1 1 448 1244 293 +1585 2 2 1 1 284 1401 1189 +1586 2 2 1 1 262 1423 1344 +1587 2 2 1 1 474 1396 64 +1588 2 2 1 1 251 1327 998 +1589 2 2 1 1 1232 1596 483 +1590 2 2 1 1 1244 1245 1193 +1591 2 2 1 1 1125 1126 537 +1592 2 2 1 1 436 1291 239 +1593 2 2 1 1 933 1282 176 +1594 2 2 1 1 1000 1266 226 +1595 2 2 1 1 1230 1231 483 +1596 2 2 1 1 210 1286 466 +1597 2 2 1 1 205 1354 439 +1598 2 2 1 1 499 1473 1472 +1599 2 2 1 1 471 1347 190 +1600 2 2 1 1 532 1217 1129 +1601 2 2 1 1 1393 1394 474 +1602 2 2 1 1 245 1540 1531 +1603 2 2 1 1 536 1392 23 +1604 2 2 1 1 1558 1561 1557 +1605 2 2 1 1 351 1098 485 +1606 2 2 1 1 1523 1526 270 +1607 2 2 1 1 1249 1253 1159 +1608 2 2 1 1 280 1557 281 +1609 2 2 1 1 48 1476 499 +1610 2 2 1 1 313 1443 1141 +1611 2 2 1 1 268 1516 504 +1612 2 2 1 1 247 1537 248 +1613 2 2 1 1 1537 1539 1538 +1614 2 2 1 1 269 1523 270 +1615 2 2 1 1 433 1257 272 +1616 2 2 1 1 266 1520 267 +1617 2 2 1 1 353 1493 1483 +1618 2 2 1 1 499 1474 1473 +1619 2 2 1 1 355 1489 356 +1620 2 2 1 1 67 800 68 +1621 2 2 1 1 1480 1482 1479 +1622 2 2 1 1 1327 1328 998 +1623 2 2 1 1 285 1408 286 +1624 2 2 1 1 533 1422 325 +1625 2 2 1 1 1423 1424 1344 +1626 2 2 1 1 1000 1267 1266 +1627 2 2 1 1 530 1444 346 +1628 2 2 1 1 436 1302 1291 +1629 2 2 1 1 1401 1402 1189 +1630 2 2 1 1 933 1381 1282 +1631 2 2 1 1 1184 1230 305 +1632 2 2 1 1 1286 1371 466 +1633 2 2 1 1 246 1531 512 +1634 2 2 1 1 324 1410 533 +1635 2 2 1 1 471 1348 1347 +1636 2 2 1 1 466 1373 211 +1637 2 2 1 1 215 1550 216 +1638 2 2 1 1 1568 1570 1569 +1639 2 2 1 1 1540 1541 1531 +1640 2 2 1 1 195 1578 196 +1641 2 2 1 1 1578 1584 196 +1642 2 2 1 1 178 1441 179 +1643 2 2 1 1 53 1470 54 +1644 2 2 1 1 44 1123 45 +1645 2 2 1 1 8 1604 9 +1646 2 2 1 1 58 1382 475 +1647 2 2 1 1 1410 1411 533 +1648 2 2 1 1 296 1590 1254 +1649 2 2 1 1 1531 1541 1532 +1650 2 2 1 1 1441 1453 179 +1651 2 2 1 1 297 1254 469 +1652 2 2 1 1 502 1502 336 +1653 2 2 1 1 1559 1588 1264 +1654 2 2 1 1 1401 1406 1402 +1655 2 2 1 1 281 1561 282 +1656 2 2 1 1 1382 1383 475 +1657 2 2 1 1 1187 1260 274 +1658 2 2 1 1 248 1538 249 +1659 2 2 1 1 1125 1127 1126 +1660 2 2 1 1 279 1554 511 +1661 2 2 1 1 458 1509 1508 +1662 2 2 1 1 286 1409 287 +1663 2 2 1 1 1516 1517 504 +1664 2 2 1 1 1242 1243 448 +1665 2 2 1 1 964 1360 1356 +1666 2 2 1 1 523 1120 358 +1667 2 2 1 1 298 1249 299 +1668 2 2 1 1 14 491 15 +1669 2 2 1 1 962 1440 1288 +1670 2 2 1 1 486 1445 55 +1671 2 2 1 1 1531 1532 512 +1672 2 2 1 1 1437 1566 442 +1673 2 2 1 1 303 1219 304 +1674 2 2 1 1 1327 1346 1328 +1675 2 2 1 1 1472 1473 1463 +1676 2 2 1 1 311 1448 451 +1677 2 2 1 1 52 1464 53 +1678 2 2 1 1 1360 1361 1356 +1679 2 2 1 1 434 1479 1434 +1680 2 2 1 1 7 545 8 +1681 2 2 1 1 172 442 173 +1682 2 2 1 1 225 1270 1000 +1683 2 2 1 1 1120 1121 544 +1684 2 2 1 1 486 1598 1445 +1685 2 2 1 1 539 1098 350 +1686 2 2 1 1 1460 1472 1463 +1687 2 2 1 1 534 800 67 +1688 2 2 1 1 189 1350 471 +1689 2 2 1 1 344 1119 345 +1690 2 2 1 1 345 1119 530 +1691 2 2 1 1 538 1382 57 +1692 2 2 1 1 307 1596 308 +1693 2 2 1 1 238 1306 436 +1694 2 2 1 1 1554 1555 511 +1695 2 2 1 1 347 1444 482 +1696 2 2 1 1 45 1123 528 +1697 2 2 1 1 273 1257 1187 +1698 2 2 1 1 1423 1433 1424 +1699 2 2 1 1 1168 1233 291 +1700 2 2 1 1 202 1362 1360 +1701 2 2 1 1 1563 1564 174 +1702 2 2 1 1 54 1470 486 +1703 2 2 1 1 1291 1302 1292 +1704 2 2 1 1 203 1360 964 +1705 2 2 1 1 499 1472 49 +1706 2 2 1 1 438 1542 217 +1707 2 2 1 1 964 1354 204 +1708 2 2 1 1 1567 1568 185 +1709 2 2 1 1 208 1440 962 +1710 2 2 1 1 1527 1528 433 +1711 2 2 1 1 432 1401 283 +1712 2 2 1 1 191 1347 948 +1713 2 2 1 1 1141 1256 314 +1714 2 2 1 1 948 1571 192 +1715 2 2 1 1 441 1567 184 +1716 2 2 1 1 359 1120 544 +1717 2 2 1 1 962 1286 209 +1718 2 2 1 1 24 1392 546 +1719 2 2 1 1 468 1530 255 +1720 2 2 1 1 260 1479 434 +1721 2 2 1 1 434 1423 261 +1722 2 2 1 1 194 1574 440 +1723 2 2 1 1 227 1266 437 +1724 2 2 1 1 177 1282 461 +1725 2 2 1 1 240 1291 1004 +1726 2 2 1 1 435 1327 250 +1727 2 2 1 1 259 1480 1479 +1728 2 2 1 1 465 1540 244 +1729 2 2 1 1 174 1564 175 +1730 2 2 1 1 219 1552 505 +1731 2 2 1 1 1393 1399 1394 +1732 2 2 1 1 1156 1449 1448 +1733 2 2 1 1 459 1125 339 +1734 2 2 1 1 512 1537 247 +1735 2 2 1 1 76 1435 535 +1736 2 2 1 1 451 1443 312 +1737 2 2 1 1 504 1523 269 +1738 2 2 1 1 449 1219 303 +1739 2 2 1 1 497 1410 323 +1740 2 2 1 1 1321 1322 1319 +1741 2 2 1 1 56 1445 538 +1742 2 2 1 1 506 1489 355 +1743 2 2 1 1 1445 1446 538 +1744 2 2 1 1 531 1393 62 +1745 2 2 1 1 299 1249 1159 +1746 2 2 1 1 1282 1381 1283 +1747 2 2 1 1 319 1129 454 +1748 2 2 1 1 62 1393 63 +1749 2 2 1 1 78 496 79 +1750 2 2 1 1 215 1597 1550 +1751 2 2 1 1 539 1099 1098 +1752 2 2 1 1 1454 1455 507 +1753 2 2 1 1 1379 1380 513 +1754 2 2 1 1 334 1496 335 +1755 2 2 1 1 354 506 355 +1756 2 2 1 1 1156 1448 310 +1757 2 2 1 1 318 1129 319 +1758 2 2 1 1 1257 1258 1187 +1759 2 2 1 1 339 1125 340 +1760 2 2 1 1 267 1520 1516 +1761 2 2 1 1 511 1557 280 +1762 2 2 1 1 208 962 209 +1763 2 2 1 1 254 468 255 +1764 2 2 1 1 271 433 272 +1765 2 2 1 1 284 1189 285 +1766 2 2 1 1 214 1597 215 +1767 2 2 1 1 1550 1597 1551 +1768 2 2 1 1 75 1435 76 +1769 2 2 1 1 56 538 57 +1770 2 2 1 1 63 474 64 +1771 2 2 1 1 66 534 67 +1772 2 2 1 1 216 1550 438 +1773 2 2 1 1 219 505 220 +1774 2 2 1 1 230 503 231 +1775 2 2 1 1 243 465 244 +1776 2 2 1 1 282 432 283 +1777 2 2 1 1 338 459 339 +1778 2 2 1 1 340 537 341 +1779 2 2 1 1 347 482 348 +1780 2 2 1 1 258 1480 259 +1781 2 2 1 1 43 547 44 +1782 2 2 1 1 45 528 46 +1783 2 2 1 1 48 499 49 +1784 2 2 1 1 50 1460 51 +1785 2 2 1 1 58 475 59 +1786 2 2 1 1 68 460 69 +1787 2 2 1 1 71 509 72 +1788 2 2 1 1 183 441 184 +1789 2 2 1 1 186 510 187 +1790 2 2 1 1 191 948 192 +1791 2 2 1 1 213 513 214 +1792 2 2 1 1 236 996 237 +1793 2 2 1 1 245 1531 246 +1794 2 2 1 1 249 435 250 +1795 2 2 1 1 251 998 252 +1796 2 2 1 1 267 1516 268 +1797 2 2 1 1 276 467 277 +1798 2 2 1 1 304 1184 305 +1799 2 2 1 1 317 532 318 +1800 2 2 1 1 324 533 325 +1801 2 2 1 1 345 530 346 +1802 2 2 1 1 357 523 358 +1803 2 2 1 1 185 1568 186 +1804 2 2 1 1 203 964 204 +1805 2 2 1 1 216 438 217 +1806 2 2 1 1 246 512 247 +1807 2 2 1 1 279 511 280 +1808 2 2 1 1 537 1586 341 +1809 2 2 1 1 78 1124 496 +1810 2 2 1 1 50 1472 1460 +1811 2 2 1 1 440 1578 195 +1812 2 2 1 1 20 492 21 +1813 2 2 1 1 17 493 18 +1814 2 2 1 1 1371 1372 466 +1815 2 2 1 1 24 546 25 +1816 2 2 1 1 22 536 23 +1817 2 2 1 1 74 456 75 +1818 2 2 1 1 175 933 176 +1819 2 2 1 1 177 461 178 +1820 2 2 1 1 180 507 181 +1821 2 2 1 1 189 471 190 +1822 2 2 1 1 194 440 195 +1823 2 2 1 1 197 508 198 +1824 2 2 1 1 200 463 201 +1825 2 2 1 1 210 466 211 +1826 2 2 1 1 222 472 223 +1827 2 2 1 1 225 1000 226 +1828 2 2 1 1 227 437 228 +1829 2 2 1 1 238 436 239 +1830 2 2 1 1 240 1004 241 +1831 2 2 1 1 260 434 261 +1832 2 2 1 1 262 1344 263 +1833 2 2 1 1 265 473 266 +1834 2 2 1 1 273 1187 274 +1835 2 2 1 1 287 462 288 +1836 2 2 1 1 290 1168 291 +1837 2 2 1 1 297 469 298 +1838 2 2 1 1 1189 1408 285 +1839 2 2 1 1 442 1566 1563 +1840 2 2 1 1 76 535 77 +1841 2 2 1 1 996 1309 1308 +1842 2 2 1 1 461 1441 178 +1843 2 2 1 1 205 439 206 +1844 2 2 1 1 233 464 234 +1845 2 2 1 1 257 501 258 +1846 2 2 1 1 268 504 269 +1847 2 2 1 1 292 448 293 +1848 2 2 1 1 294 1193 295 +1849 2 2 1 1 302 449 303 +1850 2 2 1 1 306 483 307 +1851 2 2 1 1 309 1156 310 +1852 2 2 1 1 311 451 312 +1853 2 2 1 1 313 1141 314 +1854 2 2 1 1 315 484 316 +1855 2 2 1 1 322 497 323 +1856 2 2 1 1 326 457 327 +1857 2 2 1 1 329 500 330 +1858 2 2 1 1 332 458 333 +1859 2 2 1 1 335 502 336 +1860 2 2 1 1 343 470 344 +1861 2 2 1 1 349 539 350 +1862 2 2 1 1 351 485 352 +1863 2 2 1 1 353 1483 354 +1864 2 2 1 1 77 1124 78 +1865 2 2 1 1 964 1355 1354 +1866 2 2 1 1 438 1543 1542 +1867 2 2 1 1 468 1739 1530 +1868 2 2 1 1 51 498 52 +1869 2 2 1 1 54 486 55 +1870 2 2 1 1 61 531 62 +1871 2 2 1 1 499 1476 1474 +1872 2 2 1 1 1263 1264 467 +1873 2 2 1 1 948 1572 1571 +1874 2 2 1 1 1567 1570 1568 +1875 2 2 1 1 1574 1575 440 +1876 2 2 1 1 1168 1234 1233 +1877 2 2 1 1 1563 1565 1564 +1878 2 2 1 1 962 1287 1286 +1879 2 2 1 1 314 1256 315 +1880 2 2 1 1 299 1159 300 +1881 2 2 1 1 319 454 320 +1882 2 2 1 1 359 544 360 +1883 2 2 1 1 1282 1283 461 +1884 2 2 1 1 1483 1485 1484 +1885 2 2 1 1 1496 1499 1497 +1886 2 2 1 1 291 1233 292 +1887 2 2 1 1 1291 1292 1004 +1888 2 2 1 1 1552 1553 505 +1889 2 2 1 1 261 1423 262 +1890 2 2 1 1 1460 1463 1461 +1891 2 2 1 1 435 1346 1327 +1892 2 2 1 1 432 1406 1401 +1893 2 2 1 1 283 1401 284 +1894 2 2 1 1 434 1433 1423 +1895 2 2 1 1 1394 1395 474 +1896 2 2 1 1 1446 1447 538 +1897 2 2 1 1 1315 1316 1313 +1898 2 2 1 1 1461 1462 498 +1899 2 2 1 1 278 1554 279 +1900 2 2 1 1 1497 1498 502 +1901 2 2 1 1 801 802 460 +1902 2 2 1 1 250 1327 251 +1903 2 2 1 1 1220 1221 1184 +1904 2 2 1 1 239 1291 240 +1905 2 2 1 1 1481 1482 1480 +1906 2 2 1 1 1484 1486 506 +1907 2 2 1 1 49 1472 50 +1908 2 2 1 1 226 1266 227 +1909 2 2 1 1 176 1282 177 +1910 2 2 1 1 459 1127 1125 +1911 2 2 1 1 204 1354 205 +1912 2 2 1 1 217 1542 218 +1913 2 2 1 1 469 1251 1250 +1914 2 2 1 1 244 1540 245 +1915 2 2 1 1 1245 1246 1193 +1916 2 2 1 1 277 1588 278 +1917 2 2 1 1 193 1574 194 +1918 2 2 1 1 1250 1253 1249 +1919 2 2 1 1 207 1440 208 +1920 2 2 1 1 209 1286 210 +1921 2 2 1 1 202 1360 203 +1922 2 2 1 1 192 1571 193 +1923 2 2 1 1 184 1567 185 +1924 2 2 1 1 190 1347 191 +1925 2 2 1 1 218 1552 219 +1926 2 2 1 1 1129 1130 454 +1927 2 2 1 1 23 1392 24 +1928 2 2 1 1 531 1399 1393 +1929 2 2 1 1 259 1479 260 +1930 2 2 1 1 346 1444 347 +1931 2 2 1 1 539 1100 1099 +1932 2 2 1 1 312 1443 313 +1933 2 2 1 1 1156 1450 1449 +1934 2 2 1 1 1411 1412 533 +1935 2 2 1 1 255 1530 256 +1936 2 2 1 1 295 1590 296 +1937 2 2 1 1 81 455 82 +1938 2 2 1 1 1424 1425 1344 +1939 2 2 1 1 81 1589 455 +1940 2 2 1 1 1000 1268 1267 +1941 2 2 1 1 1328 1329 998 +1942 2 2 1 1 471 1349 1348 +1943 2 2 1 1 436 1303 1302 +1944 2 2 1 1 173 1563 174 +1945 2 2 1 1 1395 1396 474 +1946 2 2 1 1 350 1098 351 +1947 2 2 1 1 1516 1519 1517 +1948 2 2 1 1 172 1436 442 +1949 2 2 1 1 1498 1502 502 +1950 2 2 1 1 1476 1477 1474 +1951 2 2 1 1 449 1223 1219 +1952 2 2 1 1 1532 1533 512 +1953 2 2 1 1 1402 1403 1189 +1954 2 2 1 1 1517 1518 504 +1955 2 2 1 1 498 1464 52 +1956 2 2 1 1 1470 1471 486 +1957 2 2 1 1 1258 1259 1187 +1958 2 2 1 1 272 1257 273 +1959 2 2 1 1 1243 1244 448 +1960 2 2 1 1 1360 1362 1361 +1961 2 2 1 1 1555 1556 511 +1962 2 2 1 1 323 1410 324 +1963 2 2 1 1 1321 1323 1322 +1964 2 2 1 1 1231 1232 483 +1965 2 2 1 1 497 1587 1410 +1966 2 2 1 1 1490 1491 1489 +1967 2 2 1 1 1383 1384 475 +1968 2 2 1 1 469 1254 1251 +1969 2 2 1 1 1156 1451 1450 +1970 2 2 1 1 534 1097 800 +1971 2 2 1 1 1554 1559 1555 +1972 2 2 1 1 1221 1230 1184 +1973 2 2 1 1 278 1588 1554 +1974 2 2 1 1 1372 1373 466 +1975 2 2 1 1 1309 1310 1308 +1976 2 2 1 1 438 1544 1543 +1977 2 2 1 1 1572 1573 1571 +1978 2 2 1 1 964 1356 1355 +1979 2 2 1 1 1283 1284 461 +1980 2 2 1 1 442 1563 173 +1981 2 2 1 1 1543 1546 1542 +1982 2 2 1 1 1575 1576 440 +1983 2 2 1 1 962 1288 1287 +1984 2 2 1 1 1287 1371 1286 +1985 2 2 1 1 1234 1242 1233 +1986 2 2 1 1 1563 1566 1565 +1987 2 2 1 1 1168 1235 1234 +1988 2 2 1 1 1292 1293 1004 +1989 2 2 1 1 1436 1437 442 +1990 2 2 1 1 1315 1317 1316 +1991 2 2 1 1 434 1434 1433 +1992 2 2 1 1 1514 1515 1510 +1993 2 2 1 1 57 1382 58 +1994 2 2 1 1 1516 1520 1519 +1995 2 2 1 1 1412 1422 533 +1996 2 2 1 1 1554 1588 1559 +1997 2 2 1 1 1498 1503 1502 +1998 2 2 1 1 1000 1270 1268 +1999 2 2 1 1 80 1589 81 +2000 2 2 1 1 459 1128 1127 +2001 2 2 1 1 471 1350 1349 +2002 2 2 1 1 1533 1537 512 +2003 2 2 1 1 539 1104 1100 +2004 2 2 1 1 436 1306 1303 +2005 2 2 1 1 1403 1408 1189 +2006 2 2 1 1 1259 1260 1187 +2007 2 2 1 1 1462 1465 1464 +2008 2 2 1 1 1362 1363 1361 +2009 2 2 1 1 1556 1557 511 +2010 2 2 1 1 432 1407 1406 +2011 2 2 1 1 1520 1521 1519 +2012 2 2 1 1 1309 1311 1310 +2013 2 2 1 1 1323 1324 1322 +2014 2 2 1 1 438 1550 1544 +2015 2 2 1 1 1436 1438 1437 +2016 2 2 1 1 1317 1318 1316 +2017 2 2 1 1 1518 1523 504 +2018 2 2 1 1 1576 1578 440 +2019 2 2 1 1 1372 1374 1373 +2020 2 2 1 1 1284 1441 461 +2021 2 2 1 1 1130 1131 454 +2022 2 2 1 1 1261 1262 1260 +2023 2 2 1 1 1556 1558 1557 +2024 2 2 1 1 1350 1351 1349 +2025 2 2 1 1 1496 1506 1499 +2026 2 2 1 1 1306 1307 1303 +2027 2 2 1 1 1270 1271 1268 +2028 2 2 1 1 1524 1526 1523 +2029 2 2 1 1 1374 1378 1373 +2030 2 2 1 1 1270 1272 1271 +2031 2 2 1 1 1272 1273 1271 +2032 2 2 1 1 1550 1551 1544 +2033 2 2 1 1 1576 1579 1578 +2034 2 2 1 1 55 1445 56 +2035 2 2 1 1 1476 1478 1477 +2036 2 2 1 1 1350 1353 1351 +2037 2 2 1 1 659 1595 1593 +2038 2 2 1 1 669 699 698 +2039 2 2 1 1 658 668 657 +2040 2 2 1 1 699 765 698 +2041 2 2 1 1 1442 1453 1441 +2042 2 2 1 1 653 717 655 +2043 2 2 1 1 656 657 654 +2044 2 2 1 1 1579 1584 1578 +2045 2 2 1 1 1593 1594 1592 +2046 2 2 1 1 655 656 654 +2047 2 2 1 1 669 700 699 +2048 2 2 1 1 659 1593 1592 +2049 2 2 1 1 653 655 654 +2050 2 2 1 1 717 718 655 +2051 2 2 1 1 656 658 657 +2052 2 2 1 1 1284 1442 1441 +2053 2 2 1 1 658 669 668 +2054 2 2 1 1 669 698 668 +2055 2 2 1 1 656 659 658 +2056 2 2 1 1 653 654 652 +2057 2 2 1 1 646 720 645 +2058 2 2 1 1 718 1595 655 +2059 2 2 1 1 1533 1539 1537 +2060 2 2 1 1 655 1595 656 +2061 2 2 1 1 669 1591 700 +2062 2 2 1 1 656 1595 659 +2063 2 2 1 1 659 1592 1591 +2064 2 2 1 1 658 1591 669 +2065 2 2 1 1 659 1591 658 +2066 2 2 1 1 1311 1312 1310 +2067 2 2 1 1 621 646 645 +2068 2 2 1 1 626 653 652 +2069 2 2 1 1 1445 1598 1446 +2070 2 2 1 1 1509 1510 1508 +2071 2 2 1 1 712 721 715 +2072 2 2 1 1 1395 1397 1396 +2073 2 2 1 1 310 1448 311 +2074 2 2 1 1 626 652 613 +2075 2 2 1 1 621 645 626 +2076 2 2 1 1 1518 1524 1523 +2077 2 2 1 1 1486 1489 506 +2078 2 2 1 1 1410 1587 1411 +2079 2 2 1 1 1486 1490 1489 +2080 2 2 1 1 713 714 711 +2081 2 2 1 1 712 715 713 +2082 2 2 1 1 341 1586 342 +2083 2 2 1 1 358 1120 359 +2084 2 2 1 1 1451 1452 1450 +2085 2 2 1 1 1462 1464 498 +2086 2 2 1 1 1259 1261 1260 +2087 2 2 1 1 1254 1255 1251 +2088 2 2 1 1 621 626 613 +2089 2 2 1 1 601 604 603 +2090 2 2 1 1 1509 1514 1510 +2091 2 2 1 1 1483 1493 1485 +2092 2 2 1 1 449 1224 1223 +2093 2 2 1 1 1503 1505 1502 +2094 2 2 1 1 545 1604 8 +2095 2 2 1 1 712 713 711 +2096 2 2 1 1 1471 1598 486 +2097 2 2 1 1 1649 1650 853 +2098 2 2 1 1 1397 1398 1396 +2099 2 2 1 1 1493 1494 1485 +2100 2 2 1 1 1104 1105 1100 +2101 2 2 1 1 9 1604 541 +2102 2 2 1 1 171 1436 172 +2103 2 2 1 1 170 1601 171 +2104 2 2 1 1 1639 1640 516 +2105 2 2 1 1 1626 1627 476 +2106 2 2 1 1 908 1612 1610 +2107 2 2 1 1 1631 1633 1632 +2108 2 2 1 1 1658 1659 1657 +2109 2 2 1 1 1610 1611 1609 +2110 2 2 1 1 1655 1656 479 +2111 2 2 1 1 477 1618 1617 +2112 2 2 1 1 1628 1630 1629 +2113 2 2 1 1 612 621 613 +2114 2 2 1 1 601 603 602 +2115 2 2 1 1 1632 1634 514 +2116 2 2 1 1 1506 1507 1499 +2117 2 2 1 1 523 1676 1120 +2118 2 2 1 1 1436 1601 1438 +2119 2 2 1 1 14 799 491 +2120 2 2 1 1 169 518 170 +2121 2 2 1 1 83 540 84 +2122 2 2 1 1 1492 1676 523 +2123 2 2 1 1 455 1605 82 +2124 2 2 1 1 82 1605 83 +2125 2 2 1 1 115 1606 116 +2126 2 2 1 1 171 1601 1436 +2127 2 2 1 1 84 1600 85 +2128 2 2 1 1 132 1625 133 +2129 2 2 1 1 129 1636 130 +2130 2 2 1 1 88 1614 89 +2131 2 2 1 1 710 712 711 +2132 2 2 1 1 92 1613 93 +2133 2 2 1 1 148 1609 149 +2134 2 2 1 1 13 799 14 +2135 2 2 1 1 99 1648 100 +2136 2 2 1 1 1120 1676 1121 +2137 2 2 1 1 114 872 115 +2138 2 2 1 1 119 1623 120 +2139 2 2 1 1 123 478 124 +2140 2 2 1 1 135 1638 136 +2141 2 2 1 1 91 843 92 +2142 2 2 1 1 96 848 97 +2143 2 2 1 1 98 452 99 +2144 2 2 1 1 112 480 113 +2145 2 2 1 1 117 447 118 +2146 2 2 1 1 125 882 126 +2147 2 2 1 1 127 1669 128 +2148 2 2 1 1 131 892 132 +2149 2 2 1 1 166 477 167 +2150 2 2 1 1 150 444 151 +2151 2 2 1 1 153 514 154 +2152 2 2 1 1 156 479 157 +2153 2 2 1 1 158 1006 159 +2154 2 2 1 1 168 1602 169 +2155 2 2 1 1 85 487 86 +2156 2 2 1 1 136 516 137 +2157 2 2 1 1 139 445 140 +2158 2 2 1 1 163 924 164 +2159 2 2 1 1 144 1628 145 +2160 2 2 1 1 145 481 146 +2161 2 2 1 1 11 490 12 +2162 2 2 1 1 159 1657 160 +2163 2 2 1 1 9 541 10 +2164 2 2 1 1 87 542 88 +2165 2 2 1 1 89 453 90 +2166 2 2 1 1 94 489 95 +2167 2 2 1 1 97 1664 98 +2168 2 2 1 1 100 853 101 +2169 2 2 1 1 102 488 103 +2170 2 2 1 1 104 859 105 +2171 2 2 1 1 107 450 108 +2172 2 2 1 1 110 866 111 +2173 2 2 1 1 120 515 121 +2174 2 2 1 1 133 476 134 +2175 2 2 1 1 155 1654 156 +2176 2 2 1 1 142 517 143 +2177 2 2 1 1 147 908 148 +2178 2 2 1 1 152 1631 153 +2179 2 2 1 1 161 443 162 +2180 2 2 1 1 167 1616 168 +2181 2 2 1 1 128 446 129 +2182 2 2 1 1 157 1673 158 +2183 2 2 1 1 106 1652 107 +2184 2 2 1 1 160 1660 161 +2185 2 2 1 1 151 1674 152 +2186 2 2 1 1 518 1601 170 +2187 2 2 1 1 162 1667 163 +2188 2 2 1 1 149 1677 150 +2189 2 2 1 1 143 1663 144 +2190 2 2 1 1 124 1651 125 +2191 2 2 1 1 146 1666 147 +2192 2 2 1 1 118 1679 119 +2193 2 2 1 1 111 1661 112 +2194 2 2 1 1 154 1681 155 +2195 2 2 1 1 1648 1649 853 +2196 2 2 1 1 105 1608 106 +2197 2 2 1 1 93 1682 94 +2198 2 2 1 1 1602 1603 518 +2199 2 2 1 1 872 1607 1606 +2200 2 2 1 1 126 1683 127 +2201 2 2 1 1 134 1675 135 +2202 2 2 1 1 83 1605 540 +2203 2 2 1 1 1638 1639 516 +2204 2 2 1 1 86 1678 87 +2205 2 2 1 1 90 1670 91 +2206 2 2 1 1 446 1637 1636 +2207 2 2 1 1 1685 1686 892 +2208 2 2 1 1 1603 1688 518 +2209 2 2 1 1 1687 1748 447 +2210 2 2 1 1 101 1672 102 +2211 2 2 1 1 882 1684 1683 +2212 2 2 1 1 130 1685 131 +2213 2 2 1 1 908 1610 1609 +2214 2 2 1 1 1623 1624 515 +2215 2 2 1 1 1625 1626 476 +2216 2 2 1 1 1654 1655 479 +2217 2 2 1 1 1628 1629 481 +2218 2 2 1 1 103 1680 104 +2219 2 2 1 1 443 1668 1667 +2220 2 2 1 1 477 1617 1616 +2221 2 2 1 1 866 1662 1661 +2222 2 2 1 1 1601 1688 1438 +2223 2 2 1 1 1006 1658 1657 +2224 2 2 1 1 1631 1632 514 +2225 2 2 1 1 859 1725 1608 +2226 2 2 1 1 116 1687 117 +2227 2 2 1 1 1670 1671 843 +2228 2 2 1 1 600 797 601 +2229 2 2 1 1 612 613 600 +2230 2 2 1 1 601 602 599 +2231 2 2 1 1 85 1600 487 +2232 2 2 1 1 542 1615 1614 +2233 2 2 1 1 169 1602 518 +2234 2 2 1 1 1652 1653 450 +2235 2 2 1 1 872 1606 115 +2236 2 2 1 1 1664 1665 452 +2237 2 2 1 1 518 1688 1601 +2238 2 2 1 1 100 1648 853 +2239 2 2 1 1 540 1600 84 +2240 2 2 1 1 1650 1672 853 +2241 2 2 1 1 89 1614 453 +2242 2 2 1 1 446 1636 129 +2243 2 2 1 1 136 1638 516 +2244 2 2 1 1 848 1664 97 +2245 2 2 1 1 1625 1690 1626 +2246 2 2 1 1 133 1625 476 +2247 2 2 1 1 128 1669 446 +2248 2 2 1 1 125 1651 882 +2249 2 2 1 1 843 1613 92 +2250 2 2 1 1 1608 1652 106 +2251 2 2 1 1 908 1609 148 +2252 2 2 1 1 892 1625 132 +2253 2 2 1 1 447 1679 118 +2254 2 2 1 1 120 1623 515 +2255 2 2 1 1 145 1628 481 +2256 2 2 1 1 156 1654 479 +2257 2 2 1 1 477 1616 167 +2258 2 2 1 1 1628 1663 1630 +2259 2 2 1 1 1627 1675 476 +2260 2 2 1 1 1631 1674 1633 +2261 2 2 1 1 1634 1681 514 +2262 2 2 1 1 908 1666 1612 +2263 2 2 1 1 1685 1699 1686 +2264 2 2 1 1 153 1631 514 +2265 2 2 1 1 882 1689 1684 +2266 2 2 1 1 479 1673 157 +2267 2 2 1 1 1006 1657 159 +2268 2 2 1 1 1611 1677 1609 +2269 2 2 1 1 161 1660 443 +2270 2 2 1 1 168 1616 1602 +2271 2 2 1 1 87 1678 542 +2272 2 2 1 1 158 1673 1006 +2273 2 2 1 1 152 1674 1631 +2274 2 2 1 1 443 1667 162 +2275 2 2 1 1 444 1674 151 +2276 2 2 1 1 144 1663 1628 +2277 2 2 1 1 150 1677 444 +2278 2 2 1 1 1657 1660 160 +2279 2 2 1 1 1659 1660 1657 +2280 2 2 1 1 514 1681 154 +2281 2 2 1 1 94 1682 489 +2282 2 2 1 1 1656 1673 479 +2283 2 2 1 1 481 1666 146 +2284 2 2 1 1 866 1661 111 +2285 2 2 1 1 1609 1677 149 +2286 2 2 1 1 542 1614 88 +2287 2 2 1 1 163 1667 924 +2288 2 2 1 1 1686 1690 892 +2289 2 2 1 1 882 1683 126 +2290 2 2 1 1 147 1666 908 +2291 2 2 1 1 517 1663 143 +2292 2 2 1 1 446 1693 1637 +2293 2 2 1 1 1664 1691 1665 +2294 2 2 1 1 488 1680 103 +2295 2 2 1 1 131 1685 892 +2296 2 2 1 1 112 1661 480 +2297 2 2 1 1 859 1608 105 +2298 2 2 1 1 476 1675 134 +2299 2 2 1 1 155 1681 1654 +2300 2 2 1 1 478 1651 124 +2301 2 2 1 1 98 1664 452 +2302 2 2 1 1 452 1648 99 +2303 2 2 1 1 117 1687 447 +2304 2 2 1 1 107 1652 450 +2305 2 2 1 1 453 1670 90 +2306 2 2 1 1 1613 1682 93 +2307 2 2 1 1 91 1670 843 +2308 2 2 1 1 119 1679 1623 +2309 2 2 1 1 1602 1695 1603 +2310 2 2 1 1 853 1672 101 +2311 2 2 1 1 1617 1695 1616 +2312 2 2 1 1 135 1675 1638 +2313 2 2 1 1 102 1672 488 +2314 2 2 1 1 127 1683 1669 +2315 2 2 1 1 1670 1701 1671 +2316 2 2 1 1 1684 1698 1683 +2317 2 2 1 1 1636 1685 130 +2318 2 2 1 1 487 1678 86 +2319 2 2 1 1 104 1680 859 +2320 2 2 1 1 1606 1687 116 +2321 2 2 1 1 1637 1699 1636 +2322 2 2 1 1 1648 1700 1649 +2323 2 2 1 1 1668 1696 1667 +2324 2 2 1 1 848 1691 1664 +2325 2 2 1 1 1651 1689 882 +2326 2 2 1 1 1665 1700 452 +2327 2 2 1 1 1651 1694 1689 +2328 2 2 1 1 892 1690 1625 +2329 2 2 1 1 1669 1693 446 +2330 2 2 1 1 1636 1699 1685 +2331 2 2 1 1 517 1714 1713 +2332 2 2 1 1 478 1694 1651 +2333 2 2 1 1 1616 1695 1602 +2334 2 2 1 1 1629 1703 481 +2335 2 2 1 1 443 1702 1668 +2336 2 2 1 1 1654 1705 1655 +2337 2 2 1 1 1638 1709 1639 +2338 2 2 1 1 1669 1698 1693 +2339 2 2 1 1 1666 1703 1612 +2340 2 2 1 1 453 1701 1670 +2341 2 2 1 1 1006 1707 1658 +2342 2 2 1 1 1627 1709 1675 +2343 2 2 1 1 481 1703 1666 +2344 2 2 1 1 1667 1696 924 +2345 2 2 1 1 1683 1698 1669 +2346 2 2 1 1 1634 1705 1681 +2347 2 2 1 1 1611 1711 1677 +2348 2 2 1 1 1659 1702 1660 +2349 2 2 1 1 1681 1705 1654 +2350 2 2 1 1 1660 1702 443 +2351 2 2 1 1 1675 1709 1638 +2352 2 2 1 1 1677 1711 444 +2353 2 2 1 1 452 1700 1648 +2354 2 2 1 1 1656 1707 1673 +2355 2 2 1 1 1673 1707 1006 +2356 2 2 1 1 710 711 709 +2357 2 2 1 1 1674 1710 1633 +2358 2 2 1 1 444 1710 1674 +2359 2 2 1 1 1663 1713 1630 +2360 2 2 1 1 444 1711 1710 +2361 2 2 1 1 517 1713 1663 +2362 2 2 1 1 598 612 600 +2363 2 2 1 1 600 601 599 +2364 2 2 1 1 707 710 709 +2365 2 2 1 1 598 600 599 +2366 2 2 1 1 707 709 708 +2367 2 2 1 1 598 599 597 +2368 2 2 1 1 707 708 705 +2369 2 2 1 1 597 607 596 +2370 2 2 1 1 595 598 597 +2371 2 2 1 1 706 707 705 +2372 2 2 1 1 789 790 716 +2373 2 2 1 1 595 597 596 +2374 2 2 1 1 703 789 716 +2375 2 2 1 1 671 687 675 +2376 2 2 1 1 704 706 705 +2377 2 2 1 1 594 795 595 +2378 2 2 1 1 595 596 593 +2379 2 2 1 1 671 675 672 +2380 2 2 1 1 704 705 702 +2381 2 2 1 1 703 716 704 +2382 2 2 1 1 594 595 593 +2383 2 2 1 1 671 672 638 +2384 2 2 1 1 703 704 702 +2385 2 2 1 1 673 681 670 +2386 2 2 1 1 610 794 592 +2387 2 2 1 1 592 594 593 +2388 2 2 1 1 636 703 702 +2389 2 2 1 1 637 673 670 +2390 2 2 1 1 670 671 638 +2391 2 2 1 1 592 593 590 +2392 2 2 1 1 589 610 592 +2393 2 2 1 1 590 769 606 +2394 2 2 1 1 636 702 701 +2395 2 2 1 1 637 670 638 +2396 2 2 1 1 589 592 590 +2397 2 2 1 1 590 606 588 +2398 2 2 1 1 636 701 634 +2399 2 2 1 1 635 793 636 +2400 2 2 1 1 637 638 635 +2401 2 2 1 1 589 590 588 +2402 2 2 1 1 635 636 634 +2403 2 2 1 1 786 787 785 +2404 2 2 1 1 630 637 635 +2405 2 2 1 1 587 589 588 +2406 2 2 1 1 665 2044 578 +2407 2 2 1 1 629 786 785 +2408 2 2 1 1 630 635 634 +2409 2 2 1 1 585 605 587 +2410 2 2 1 1 587 588 586 +2411 2 2 1 1 630 634 591 +2412 2 2 1 1 629 785 630 +2413 2 2 1 1 585 587 586 +2414 2 2 1 1 141 1720 142 +2415 2 2 1 1 517 1720 1714 +2416 2 2 1 1 884 2275 1936 +2417 2 2 1 1 1422 1737 457 +2418 2 2 1 1 792 1724 706 +2419 2 2 1 1 874 2273 873 +2420 2 2 1 1 727 2178 728 +2421 2 2 1 1 939 941 940 +2422 2 2 1 1 629 630 591 +2423 2 2 1 1 1169 2272 1170 +2424 2 2 1 1 546 1889 1775 +2425 2 2 1 1 1988 2240 907 +2426 2 2 1 1 142 1720 517 +2427 2 2 1 1 887 2275 884 +2428 2 2 1 1 1196 1847 1529 +2429 2 2 1 1 1172 2276 1173 +2430 2 2 1 1 1412 1737 1422 +2431 2 2 1 1 1583 1919 1034 +2432 2 2 1 1 456 2201 1435 +2433 2 2 1 1 706 1724 707 +2434 2 2 1 1 585 586 584 +2435 2 2 1 1 894 2277 893 +2436 2 2 1 1 1178 2278 1179 +2437 2 2 1 1 1753 1792 1440 +2438 2 2 1 1 1180 2279 1181 +2439 2 2 1 1 1570 1905 1079 +2440 2 2 1 1 977 2282 976 +2441 2 2 1 1 618 619 617 +2442 2 2 1 1 937 939 938 +2443 2 2 1 1 979 2283 978 +2444 2 2 1 1 738 2284 744 +2445 2 2 1 1 981 2285 980 +2446 2 2 1 1 875 2273 874 +2447 2 2 1 1 983 2286 982 +2448 2 2 1 1 1727 2275 888 +2449 2 2 1 1 985 2288 984 +2450 2 2 1 1 976 2274 975 +2451 2 2 1 1 662 2144 566 +2452 2 2 1 1 1280 1820 1549 +2453 2 2 1 1 1854 1855 642 +2454 2 2 1 1 1549 1820 1545 +2455 2 2 1 1 1186 1848 1847 +2456 2 2 1 1 707 1724 710 +2457 2 2 1 1 648 2257 2003 +2458 2 2 1 1 1353 1870 1351 +2459 2 2 1 1 1569 1870 510 +2460 2 2 1 1 1539 1869 1538 +2461 2 2 1 1 435 1869 1346 +2462 2 2 1 1 1853 2272 1188 +2463 2 2 1 1 1341 2290 1013 +2464 2 2 1 1 992 2289 991 +2465 2 2 1 1 888 2275 887 +2466 2 2 1 1 1173 2276 1174 +2467 2 2 1 1 1012 2290 993 +2468 2 2 1 1 591 781 583 +2469 2 2 1 1 582 629 591 +2470 2 2 1 1 895 2277 894 +2471 2 2 1 1 1179 2278 1180 +2472 2 2 1 1 1416 2046 754 +2473 2 2 1 1 1358 1731 1359 +2474 2 2 1 1 1181 2279 1194 +2475 2 2 1 1 1679 1858 1623 +2476 2 2 1 1 1646 2317 1645 +2477 2 2 1 1 1501 2298 747 +2478 2 2 1 1 978 2282 977 +2479 2 2 1 1 980 2283 979 +2480 2 2 1 1 994 2005 970 +2481 2 2 1 1 1056 2258 1043 +2482 2 2 1 1 566 2144 565 +2483 2 2 1 1 744 2284 745 +2484 2 2 1 1 108 1733 109 +2485 2 2 1 1 876 2296 875 +2486 2 2 1 1 982 2285 981 +2487 2 2 1 1 1615 1879 1614 +2488 2 2 1 1 453 1879 1701 +2489 2 2 1 1 625 2147 1091 +2490 2 2 1 1 1111 2037 1114 +2491 2 2 1 1 984 2286 983 +2492 2 2 1 1 1871 2205 848 +2493 2 2 1 1 1020 1458 1457 +2494 2 2 1 1 986 2288 985 +2495 2 2 1 1 557 558 556 +2496 2 2 1 1 1547 1951 1548 +2497 2 2 1 1 720 2300 491 +2498 2 2 1 1 1332 2308 1008 +2499 2 2 1 1 1620 1621 1018 +2500 2 2 1 1 993 2289 992 +2501 2 2 1 1 583 585 584 +2502 2 2 1 1 1126 1875 537 +2503 2 2 1 1 1186 1924 1265 +2504 2 2 1 1 946 2150 1070 +2505 2 2 1 1 1013 2290 1012 +2506 2 2 1 1 510 1870 1353 +2507 2 2 1 1 931 2320 930 +2508 2 2 1 1 1538 1869 435 +2509 2 2 1 1 742 2221 1788 +2510 2 2 1 1 2071 2163 1907 +2511 2 2 1 1 877 2296 876 +2512 2 2 1 1 618 1744 766 +2513 2 2 1 1 1546 1820 1280 +2514 2 2 1 1 1867 1910 1620 +2515 2 2 1 1 489 2095 1871 +2516 2 2 1 1 484 1793 1218 +2517 2 2 1 1 888 2243 1727 +2518 2 2 1 1 935 937 936 +2519 2 2 1 1 1449 1888 1448 +2520 2 2 1 1 930 2320 929 +2521 2 2 1 1 1225 1787 1183 +2522 2 2 1 1 1083 2073 1914 +2523 2 2 1 1 1116 1117 1115 +2524 2 2 1 1 1944 2283 980 +2525 2 2 1 1 1280 2092 1553 +2526 2 2 1 1 1899 1962 1046 +2527 2 2 1 1 1679 1899 1858 +2528 2 2 1 1 1197 1945 1849 +2529 2 2 1 1 1351 1870 1352 +2530 2 2 1 1 39 543 40 +2531 2 2 1 1 364 529 365 +2532 2 2 1 1 1623 1858 1624 +2533 2 2 1 1 932 2232 931 +2534 2 2 1 1 559 560 558 +2535 2 2 1 1 31 494 32 +2536 2 2 1 1 372 495 373 +2537 2 2 1 1 366 722 525 +2538 2 2 1 1 675 1742 672 +2539 2 2 1 1 1300 2286 984 +2540 2 2 1 1 789 1742 790 +2541 2 2 1 1 343 1743 470 +2542 2 2 1 1 1586 1743 342 +2543 2 2 1 1 1431 1998 1075 +2544 2 2 1 1 891 2306 890 +2545 2 2 1 1 717 1872 719 +2546 2 2 1 1 576 2206 575 +2547 2 2 1 1 1813 1881 682 +2548 2 2 1 1 528 1880 1478 +2549 2 2 1 1 450 1733 108 +2550 2 2 1 1 746 767 758 +2551 2 2 1 1 1614 1879 453 +2552 2 2 1 1 482 1901 1105 +2553 2 2 1 1 563 564 562 +2554 2 2 1 1 1118 1911 734 +2555 2 2 1 1 1720 2079 1714 +2556 2 2 1 1 1530 1745 256 +2557 2 2 1 1 257 1745 501 +2558 2 2 1 1 1218 2203 484 +2559 2 2 1 1 532 2203 1218 +2560 2 2 1 1 1024 2007 852 +2561 2 2 1 1 1567 1905 1570 +2562 2 2 1 1 1300 2288 1003 +2563 2 2 1 1 609 2322 608 +2564 2 2 1 1 729 2178 1113 +2565 2 2 1 1 1661 1877 480 +2566 2 2 1 1 893 2306 891 +2567 2 2 1 1 73 1749 74 +2568 2 2 1 1 1646 2079 1720 +2569 2 2 1 1 1083 2182 1062 +2570 2 2 1 1 1745 1896 501 +2571 2 2 1 1 1134 1777 1763 +2572 2 2 1 1 1335 1778 1764 +2573 2 2 1 1 1388 1781 1769 +2574 2 2 1 1 1767 1779 1227 +2575 2 2 1 1 1430 1780 1768 +2576 2 2 1 1 1771 1782 1368 +2577 2 2 1 1 1772 1783 1277 +2578 2 2 1 1 1256 2071 1212 +2579 2 2 1 1 748 2010 744 +2580 2 2 1 1 728 2178 729 +2581 2 2 1 1 761 2097 1211 +2582 2 2 1 1 376 1729 377 +2583 2 2 1 1 375 527 376 +2584 2 2 1 1 28 526 29 +2585 2 2 1 1 362 548 363 +2586 2 2 1 1 976 2282 1828 +2587 2 2 1 1 537 1875 1586 +2588 2 2 1 1 1536 1835 1534 +2589 2 2 1 1 933 1908 1381 +2590 2 2 1 1 1565 1908 1564 +2591 2 2 1 1 578 2044 577 +2592 2 2 1 1 1748 1899 447 +2593 2 2 1 1 207 1753 1440 +2594 2 2 1 1 439 1753 206 +2595 2 2 1 1 1405 2131 1188 +2596 2 2 1 1 121 1755 122 +2597 2 2 1 1 567 568 566 +2598 2 2 1 1 815 2055 811 +2599 2 2 1 1 1728 2277 1030 +2600 2 2 1 1 583 584 581 +2601 2 2 1 1 674 1468 1466 +2602 2 2 1 1 603 1744 609 +2603 2 2 1 1 1865 1888 1207 +2604 2 2 1 1 1624 1912 515 +2605 2 2 1 1 700 1916 1735 +2606 2 2 1 1 1717 1758 679 +2607 2 2 1 1 165 1867 1622 +2608 2 2 1 1 1682 1863 489 +2609 2 2 1 1 910 2325 1988 +2610 2 2 1 1 569 570 568 +2611 2 2 1 1 582 591 583 +2612 2 2 1 1 631 643 619 +2613 2 2 1 1 328 1761 329 +2614 2 2 1 1 360 1762 361 +2615 2 2 1 1 322 1763 497 +2616 2 2 1 1 254 1764 468 +2617 2 2 1 1 243 1765 465 +2618 2 2 1 1 71 1766 509 +2619 2 2 1 1 1159 1767 300 +2620 2 2 1 1 265 1768 473 +2621 2 2 1 1 61 1769 531 +2622 2 2 1 1 462 1770 288 +2623 2 2 1 1 508 1771 198 +2624 2 2 1 1 505 1772 220 +2625 2 2 1 1 1872 1894 719 +2626 2 2 1 1 778 2120 780 +2627 2 2 1 1 1644 1645 1643 +2628 2 2 1 1 1615 2084 1072 +2629 2 2 1 1 1448 1888 451 +2630 2 2 1 1 1359 1792 1753 +2631 2 2 1 1 30 1734 31 +2632 2 2 1 1 609 1744 618 +2633 2 2 1 1 766 1744 788 +2634 2 2 1 1 788 1744 604 +2635 2 2 1 1 1950 2124 1488 +2636 2 2 1 1 650 2152 1056 +2637 2 2 1 1 496 1785 79 +2638 2 2 1 1 80 1785 1589 +2639 2 2 1 1 373 1735 374 +2640 2 2 1 1 1192 2191 1248 +2641 2 2 1 1 1111 1112 1110 +2642 2 2 1 1 573 574 572 +2643 2 2 1 1 1016 1884 1045 +2644 2 2 1 1 786 2013 774 +2645 2 2 1 1 1643 1977 1642 +2646 2 2 1 1 445 1977 1643 +2647 2 2 1 1 1134 1763 1216 +2648 2 2 1 1 1216 1763 321 +2649 2 2 1 1 1335 1764 1345 +2650 2 2 1 1 1345 1764 253 +2651 2 2 1 1 1296 1765 1301 +2652 2 2 1 1 1301 1765 242 +2653 2 2 1 1 807 1766 1096 +2654 2 2 1 1 1096 1766 70 +2655 2 2 1 1 1391 1769 60 +2656 2 2 1 1 1388 1769 1391 +2657 2 2 1 1 1229 1767 1227 +2658 2 2 1 1 301 1767 1229 +2659 2 2 1 1 1430 1768 1432 +2660 2 2 1 1 1432 1768 264 +2661 2 2 1 1 1241 1770 1239 +2662 2 2 1 1 289 1770 1241 +2663 2 2 1 1 1370 1771 1368 +2664 2 2 1 1 199 1771 1370 +2665 2 2 1 1 1281 1772 1277 +2666 2 2 1 1 221 1772 1281 +2667 2 2 1 1 815 2082 2055 +2668 2 2 1 1 950 1919 1002 +2669 2 2 1 1 541 1791 10 +2670 2 2 1 1 11 1791 490 +2671 2 2 1 1 1140 1143 1142 +2672 2 2 1 1 1392 1889 546 +2673 2 2 1 1 535 1895 1124 +2674 2 2 1 1 714 2051 794 +2675 2 2 1 1 364 776 529 +2676 2 2 1 1 1824 2158 734 +2677 2 2 1 1 478 1741 1694 +2678 2 2 1 1 1333 1869 1539 +2679 2 2 1 1 1046 2296 1859 +2680 2 2 1 1 1459 1760 182 +2681 2 2 1 1 1740 2156 946 +2682 2 2 1 1 1213 1980 685 +2683 2 2 1 1 571 2313 570 +2684 2 2 1 1 837 838 836 +2685 2 2 1 1 1428 1998 1431 +2686 2 2 1 1 661 1987 558 +2687 2 2 1 1 1019 2196 2141 +2688 2 2 1 1 1143 1145 1144 +2689 2 2 1 1 579 580 578 +2690 2 2 1 1 672 1742 789 +2691 2 2 1 1 1077 2205 1871 +2692 2 2 1 1 548 777 776 +2693 2 2 1 1 696 1954 1123 +2694 2 2 1 1 794 2172 714 +2695 2 2 1 1 342 1743 343 +2696 2 2 1 1 691 2268 2077 +2697 2 2 1 1 182 1760 183 +2698 2 2 1 1 1109 1110 1108 +2699 2 2 1 1 1937 2068 1022 +2700 2 2 1 1 1145 1147 1146 +2701 2 2 1 1 747 1759 1501 +2702 2 2 1 1 719 1965 490 +2703 2 2 1 1 885 2114 1082 +2704 2 2 1 1 1123 1954 528 +2705 2 2 1 1 372 775 495 +2706 2 2 1 1 582 1726 629 +2707 2 2 1 1 1050 2223 1912 +2708 2 2 1 1 1478 1880 1477 +2709 2 2 1 1 1419 1926 1421 +2710 2 2 1 1 1147 1149 1148 +2711 2 2 1 1 164 1867 165 +2712 2 2 1 1 839 840 838 +2713 2 2 1 1 1052 2274 1828 +2714 2 2 1 1 604 1744 603 +2715 2 2 1 1 2061 2088 2075 +2716 2 2 1 1 1009 1834 1304 +2717 2 2 1 1 618 766 631 +2718 2 2 1 1 96 1871 848 +2719 2 2 1 1 489 1871 95 +2720 2 2 1 1 645 1872 626 +2721 2 2 1 1 653 1872 717 +2722 2 2 1 1 327 1873 328 +2723 2 2 1 1 1645 2317 1643 +2724 2 2 1 1 1722 2020 1429 +2725 2 2 1 1 1149 1151 1150 +2726 2 2 1 1 1759 2145 743 +2727 2 2 1 1 1693 1698 1038 +2728 2 2 1 1 641 2179 818 +2729 2 2 1 1 1539 1835 1333 +2730 2 2 1 1 122 1882 123 +2731 2 2 1 1 841 842 840 +2732 2 2 1 1 1444 1901 482 +2733 2 2 1 1 366 525 367 +2734 2 2 1 1 37 524 38 +2735 2 2 1 1 812 814 813 +2736 2 2 1 1 959 960 958 +2737 2 2 1 1 775 1978 676 +2738 2 2 1 1 948 1958 1572 +2739 2 2 1 1 1348 1958 1347 +2740 2 2 1 1 256 1745 257 +2741 2 2 1 1 1481 2301 1342 +2742 2 2 1 1 1340 1896 1745 +2743 2 2 1 1 1151 1153 1152 +2744 2 2 1 1 1689 1694 1049 +2745 2 2 1 1 441 1905 1567 +2746 2 2 1 1 1662 1877 1661 +2747 2 2 1 1 1211 2097 1191 +2748 2 2 1 1 183 1760 441 +2749 2 2 1 1 74 1749 456 +2750 2 2 1 1 527 1729 376 +2751 2 2 1 1 451 1888 1865 +2752 2 2 1 1 73 2082 1749 +2753 2 2 1 1 1907 2163 1208 +2754 2 2 1 1 1960 2086 680 +2755 2 2 1 1 1153 1155 1154 +2756 2 2 1 1 747 2298 1513 +2757 2 2 1 1 681 1893 670 +2758 2 2 1 1 671 1893 687 +2759 2 2 1 1 1871 2095 1077 +2760 2 2 1 1 1607 1961 1606 +2761 2 2 1 1 1687 1961 1748 +2762 2 2 1 1 1124 1895 1891 +2763 2 2 1 1 1070 1958 1348 +2764 2 2 1 1 1607 2073 1061 +2765 2 2 1 1 1397 1974 1398 +2766 2 2 1 1 534 1974 1097 +2767 2 2 1 1 771 2267 686 +2768 2 2 1 1 1016 2028 1883 +2769 2 2 1 1 363 776 364 +2770 2 2 1 1 810 812 811 +2771 2 2 1 1 1003 1298 1297 +2772 2 2 1 1 1050 2039 879 +2773 2 2 1 1 965 966 960 +2774 2 2 1 1 1343 2271 1076 +2775 2 2 1 1 1613 1929 1682 +2776 2 2 1 1 1564 1908 933 +2777 2 2 1 1 1980 2297 1075 +2778 2 2 1 1 1165 2302 1167 +2779 2 2 1 1 1736 1892 522 +2780 2 2 1 1 447 1899 1679 +2781 2 2 1 1 206 1753 207 +2782 2 2 1 1 515 1755 121 +2783 2 2 1 1 1021 1740 1349 +2784 2 2 1 1 1672 1946 488 +2785 2 2 1 1 1458 2189 940 +2786 2 2 1 1 1061 1963 1607 +2787 2 2 1 1 1719 1819 742 +2788 2 2 1 1 852 2307 1024 +2789 2 2 1 1 1457 1760 1459 +2790 2 2 1 1 114 1914 872 +2791 2 2 1 1 480 1914 113 +2792 2 2 1 1 708 2318 783 +2793 2 2 1 1 1003 2288 2161 +2794 2 2 1 1 597 695 607 +2795 2 2 1 1 1547 1548 1001 +2796 2 2 1 1 1404 1853 1188 +2797 2 2 1 1 930 932 931 +2798 2 2 1 1 899 2115 1093 +2799 2 2 1 1 1061 2073 1083 +2800 2 2 1 1 1161 2295 1248 +2801 2 2 1 1 941 2316 1078 +2802 2 2 1 1 32 1794 33 +2803 2 2 1 1 1014 1341 1339 +2804 2 2 1 1 928 930 929 +2805 2 2 1 1 1294 1300 1295 +2806 2 2 1 1 1577 2218 1818 +2807 2 2 1 1 1072 1942 1615 +2808 2 2 1 1 2003 2257 651 +2809 2 2 1 1 1212 1907 1143 +2810 2 2 1 1 1701 2165 1671 +2811 2 2 1 1 926 928 927 +2812 2 2 1 1 1854 2127 818 +2813 2 2 1 1 1458 1906 1457 +2814 2 2 1 1 368 522 369 +2815 2 2 1 1 35 521 36 +2816 2 2 1 1 1456 2251 2149 +2817 2 2 1 1 1760 1906 441 +2818 2 2 1 1 923 926 925 +2819 2 2 1 1 618 631 619 +2820 2 2 1 1 31 1734 494 +2821 2 2 1 1 693 1996 778 +2822 2 2 1 1 329 1761 500 +2823 2 2 1 1 921 923 922 +2824 2 2 1 1 2146 2284 747 +2825 2 2 1 1 495 1735 373 +2826 2 2 1 1 544 1762 360 +2827 2 2 1 1 2005 2254 968 +2828 2 2 1 1 731 2006 736 +2829 2 2 1 1 1790 2102 1243 +2830 2 2 1 1 919 921 920 +2831 2 2 1 1 321 1763 322 +2832 2 2 1 1 253 1764 254 +2833 2 2 1 1 242 1765 243 +2834 2 2 1 1 70 1766 71 +2835 2 2 1 1 300 1767 301 +2836 2 2 1 1 264 1768 265 +2837 2 2 1 1 60 1769 61 +2838 2 2 1 1 288 1770 289 +2839 2 2 1 1 198 1771 199 +2840 2 2 1 1 220 1772 221 +2841 2 2 1 1 623 1784 1215 +2842 2 2 1 1 27 1752 28 +2843 2 2 1 1 15 1900 16 +2844 2 2 1 1 756 2287 2034 +2845 2 2 1 1 917 919 918 +2846 2 2 1 1 712 1943 721 +2847 2 2 1 1 1733 2030 109 +2848 2 2 1 1 1822 2060 819 +2849 2 2 1 1 1277 1278 1276 +2850 2 2 1 1 1368 1369 1366 +2851 2 2 1 1 1386 1389 1388 +2852 2 2 1 1 804 808 807 +2853 2 2 1 1 1334 1336 1335 +2854 2 2 1 1 1227 1228 1226 +2855 2 2 1 1 1133 1136 1134 +2856 2 2 1 1 1295 1297 1296 +2857 2 2 1 1 915 917 916 +2858 2 2 1 1 497 1777 1587 +2859 2 2 1 1 468 1778 1739 +2860 2 2 1 1 1253 1779 1159 +2861 2 2 1 1 473 1780 1521 +2862 2 2 1 1 531 1781 1399 +2863 2 2 1 1 1585 1782 508 +2864 2 2 1 1 1553 1783 505 +2865 2 2 1 1 1467 1468 661 +2866 2 2 1 1 911 915 912 +2867 2 2 1 1 450 1955 1733 +2868 2 2 1 1 1075 2297 1431 +2869 2 2 1 1 814 822 821 +2870 2 2 1 1 1723 1981 1194 +2871 2 2 1 1 1073 2132 1027 +2872 2 2 1 1 905 911 906 +2873 2 2 1 1 697 1934 1881 +2874 2 2 1 1 1392 2198 1889 +2875 2 2 1 1 902 905 903 +2876 2 2 1 1 1701 1879 1047 +2877 2 2 1 1 13 1965 799 +2878 2 2 1 1 490 1965 12 +2879 2 2 1 1 553 554 552 +2880 2 2 1 1 28 1752 526 +2881 2 2 1 1 900 902 901 +2882 2 2 1 1 79 1785 80 +2883 2 2 1 1 1090 2025 846 +2884 2 2 1 1 1741 1882 1051 +2885 2 2 1 1 478 1882 1741 +2886 2 2 1 1 1724 1943 710 +2887 2 2 1 1 995 1952 1833 +2888 2 2 1 1 33 520 34 +2889 2 2 1 1 370 519 371 +2890 2 2 1 1 138 1977 139 +2891 2 2 1 1 1341 2271 1342 +2892 2 2 1 1 633 686 677 +2893 2 2 1 1 1643 2317 445 +2894 2 2 1 1 2033 2179 641 +2895 2 2 1 1 451 1865 1443 +2896 2 2 1 1 1295 1300 1003 +2897 2 2 1 1 1124 1891 496 +2898 2 2 1 1 1647 1716 1645 +2899 2 2 1 1 2065 2236 1005 +2900 2 2 1 1 371 775 372 +2901 2 2 1 1 137 2001 138 +2902 2 2 1 1 1640 2001 516 +2903 2 2 1 1 1729 1773 377 +2904 2 2 1 1 1749 2082 815 +2905 2 2 1 1 1457 1906 1760 +2906 2 2 1 1 377 1773 378 +2907 2 2 1 1 41 1774 42 +2908 2 2 1 1 26 1775 27 +2909 2 2 1 1 367 768 368 +2910 2 2 1 1 843 2043 1613 +2911 2 2 1 1 1023 2065 2064 +2912 2 2 1 1 1562 2070 1201 +2913 2 2 1 1 1970 2097 761 +2914 2 2 1 1 838 1942 1072 +2915 2 2 1 1 898 900 899 +2916 2 2 1 1 818 2127 641 +2917 2 2 1 1 1896 2301 1481 +2918 2 2 1 1 542 2084 1615 +2919 2 2 1 1 673 2040 681 +2920 2 2 1 1 632 2313 1092 +2921 2 2 1 1 1065 2030 1733 +2922 2 2 1 1 365 722 366 +2923 2 2 1 1 1369 2139 1583 +2924 2 2 1 1 1339 2301 1896 +2925 2 2 1 1 625 2085 2053 +2926 2 2 1 1 10 1791 11 +2927 2 2 1 1 1057 2281 847 +2928 2 2 1 1 110 2030 866 +2929 2 2 1 1 1429 1723 1722 +2930 2 2 1 1 783 2318 610 +2931 2 2 1 1 609 618 617 +2932 2 2 1 1 1440 1792 1288 +2933 2 2 1 1 718 2041 1595 +2934 2 2 1 1 1692 2007 1024 +2935 2 2 1 1 794 2051 594 +2936 2 2 1 1 795 2051 796 +2937 2 2 1 1 492 2052 21 +2938 2 2 1 1 22 2052 536 +2939 2 2 1 1 1466 2017 674 +2940 2 2 1 1 2159 2289 997 +2941 2 2 1 1 1652 2129 1653 +2942 2 2 1 1 1725 2129 1608 +2943 2 2 1 1 859 2062 1725 +2944 2 2 1 1 18 2066 19 +2945 2 2 1 1 765 2262 676 +2946 2 2 1 1 1891 2018 496 +2947 2 2 1 1 509 2082 72 +2948 2 2 1 1 963 1816 1815 +2949 2 2 1 1 1408 2130 1409 +2950 2 2 1 1 141 2263 1720 +2951 2 2 1 1 1591 2122 700 +2952 2 2 1 1 2115 2261 1093 +2953 2 2 1 1 1720 2263 1646 +2954 2 2 1 1 445 2263 140 +2955 2 2 1 1 714 2172 711 +2956 2 2 1 1 1540 2238 1541 +2957 2 2 1 1 484 2203 316 +2958 2 2 1 1 317 2203 532 +2959 2 2 1 1 953 2210 952 +2960 2 2 1 1 543 550 549 +2961 2 2 1 1 586 2216 692 +2962 2 2 1 1 1290 1371 1287 +2963 2 2 1 1 1499 1507 1501 +2964 2 2 1 1 1411 1587 1414 +2965 2 2 1 1 1103 1495 1099 +2966 2 2 1 1 1383 1447 1390 +2967 2 2 1 1 801 1097 805 +2968 2 2 1 1 1328 1346 1331 +2969 2 2 1 1 1237 1242 1234 +2970 2 2 1 1 1130 1217 1135 +2971 2 2 1 1 1510 1515 1512 +2972 2 2 1 1 1100 1105 1102 +2973 2 2 1 1 1467 1471 1465 +2974 2 2 1 1 1376 1379 1374 +2975 2 2 1 1 1485 1494 1488 +2976 2 2 1 1 1532 1541 1535 +2977 2 2 1 1 1581 1585 1579 +2978 2 2 1 1 1303 1307 1305 +2979 2 2 1 1 1544 1551 1547 +2980 2 2 1 1 1972 2237 916 +2981 2 2 1 1 34 771 35 +2982 2 2 1 1 1437 1439 1054 +2983 2 2 1 1 1415 1737 1412 +2984 2 2 1 1 1909 2232 1088 +2985 2 2 1 1 1434 2021 1343 +2986 2 2 1 1 1105 1901 1106 +2987 2 2 1 1 1600 1860 487 +2988 2 2 1 1 855 858 857 +2989 2 2 1 1 1343 1843 1433 +2990 2 2 1 1 19 1931 20 +2991 2 2 1 1 1864 2239 912 +2992 2 2 1 1 1277 1783 1278 +2993 2 2 1 1 1368 1782 1369 +2994 2 2 1 1 1389 1781 1388 +2995 2 2 1 1 1336 1778 1335 +2996 2 2 1 1 1136 1777 1134 +2997 2 2 1 1 1227 1779 1228 +2998 2 2 1 1 370 772 519 +2999 2 2 1 1 1248 2103 1185 +3000 2 2 1 1 1167 1169 1165 +3001 2 2 1 1 808 1902 807 +3002 2 2 1 1 1297 1903 1296 +3003 2 2 1 1 2136 2323 1856 +3004 2 2 1 1 1930 2294 845 +3005 2 2 1 1 455 1932 1605 +3006 2 2 1 1 515 1912 1755 +3007 2 2 1 1 1737 2222 457 +3008 2 2 1 1 1732 1825 757 +3009 2 2 1 1 572 2313 571 +3010 2 2 1 1 867 1985 865 +3011 2 2 1 1 1059 1930 1929 +3012 2 2 1 1 972 975 974 +3013 2 2 1 1 1067 2018 1891 +3014 2 2 1 1 569 2012 571 +3015 2 2 1 1 1269 1810 1052 +3016 2 2 1 1 735 737 733 +3017 2 2 1 1 27 1775 1752 +3018 2 2 1 1 1008 2308 1333 +3019 2 2 1 1 1045 2003 1029 +3020 2 2 1 1 984 2288 1300 +3021 2 2 1 1 757 1823 1732 +3022 2 2 1 1 582 583 581 +3023 2 2 1 1 1089 2258 684 +3024 2 2 1 1 1788 1941 741 +3025 2 2 1 1 833 834 832 +3026 2 2 1 1 994 2211 1280 +3027 2 2 1 1 694 2315 2088 +3028 2 2 1 1 607 695 650 +3029 2 2 1 1 1076 1998 1751 +3030 2 2 1 1 1469 2128 1599 +3031 2 2 1 1 629 1726 786 +3032 2 2 1 1 1192 1935 1801 +3033 2 2 1 1 361 2126 4 +3034 2 2 1 1 1114 1115 1112 +3035 2 2 1 1 1299 2238 1903 +3036 2 2 1 1 924 1867 164 +3037 2 2 1 1 1541 2238 1299 +3038 2 2 1 1 1107 1113 740 +3039 2 2 1 1 747 2284 2145 +3040 2 2 1 1 1784 2175 1210 +3041 2 2 1 1 643 676 666 +3042 2 2 1 1 1847 2253 1186 +3043 2 2 1 1 640 1897 686 +3044 2 2 1 1 1583 2139 1581 +3045 2 2 1 1 95 1871 96 +3046 2 2 1 1 837 2099 839 +3047 2 2 1 1 1928 2015 885 +3048 2 2 1 1 626 1872 653 +3049 2 2 1 1 755 2046 2014 +3050 2 2 1 1 457 1873 327 +3051 2 2 1 1 681 2040 1734 +3052 2 2 1 1 375 1916 527 +3053 2 2 1 1 2129 2202 1653 +3054 2 2 1 1 1 2133 7 +3055 2 2 1 1 25 2135 2 +3056 2 2 1 1 3 2134 43 +3057 2 2 1 1 1377 2173 967 +3058 2 2 1 1 2241 2242 1044 +3059 2 2 1 1 4 2126 362 +3060 2 2 1 1 614 692 690 +3061 2 2 1 1 1810 2008 999 +3062 2 2 1 1 1521 1780 1722 +3063 2 2 1 1 896 2225 895 +3064 2 2 1 1 123 1882 478 +3065 2 2 1 1 754 2230 1416 +3066 2 2 1 1 1787 2098 1157 +3067 2 2 1 1 1084 2255 1738 +3068 2 2 1 1 494 2195 1794 +3069 2 2 1 1 369 772 370 +3070 2 2 1 1 858 861 860 +3071 2 2 1 1 1031 2129 1725 +3072 2 2 1 1 1092 2089 632 +3073 2 2 1 1 1917 2173 1377 +3074 2 2 1 1 1735 1916 374 +3075 2 2 1 1 949 950 947 +3076 2 2 1 1 861 863 862 +3077 2 2 1 1 863 865 864 +3078 2 2 1 1 1347 1958 948 +3079 2 2 1 1 865 869 868 +3080 2 2 1 1 1887 2239 913 +3081 2 2 1 1 869 871 870 +3082 2 2 1 1 871 874 873 +3083 2 2 1 1 378 2133 1 +3084 2 2 1 1 2 2135 26 +3085 2 2 1 1 42 2134 3 +3086 2 2 1 1 1288 1792 1718 +3087 2 2 1 1 874 876 875 +3088 2 2 1 1 876 878 877 +3089 2 2 1 1 1993 2155 1994 +3090 2 2 1 1 1170 1171 1169 +3091 2 2 1 1 1818 2218 1002 +3092 2 2 1 1 1429 2020 1427 +3093 2 2 1 1 878 880 879 +3094 2 2 1 1 1549 2005 994 +3095 2 2 1 1 880 883 881 +3096 2 2 1 1 883 887 884 +3097 2 2 1 1 1172 1173 1171 +3098 2 2 1 1 887 889 888 +3099 2 2 1 1 1174 1175 1173 +3100 2 2 1 1 889 891 890 +3101 2 2 1 1 1176 1177 1175 +3102 2 2 1 1 891 894 893 +3103 2 2 1 1 1178 1179 1177 +3104 2 2 1 1 894 896 895 +3105 2 2 1 1 1180 1181 1179 +3106 2 2 1 1 1801 1845 1192 +3107 2 2 1 1 491 1900 15 +3108 2 2 1 1 1958 2247 1572 +3109 2 2 1 1 1194 1206 1181 +3110 2 2 1 1 975 977 976 +3111 2 2 1 1 1828 2274 976 +3112 2 2 1 1 2165 2305 1671 +3113 2 2 1 1 687 1889 675 +3114 2 2 1 1 738 744 737 +3115 2 2 1 1 977 979 978 +3116 2 2 1 1 1214 1784 1182 +3117 2 2 1 1 1206 1980 1213 +3118 2 2 1 1 526 1964 29 +3119 2 2 1 1 979 981 980 +3120 2 2 1 1 745 748 744 +3121 2 2 1 1 981 983 982 +3122 2 2 1 1 951 952 950 +3123 2 2 1 1 749 750 748 +3124 2 2 1 1 983 985 984 +3125 2 2 1 1 988 1060 1043 +3126 2 2 1 1 1027 1984 1861 +3127 2 2 1 1 751 752 750 +3128 2 2 1 1 985 987 986 +3129 2 2 1 1 753 760 752 +3130 2 2 1 1 987 990 989 +3131 2 2 1 1 924 1910 1867 +3132 2 2 1 1 761 1211 760 +3133 2 2 1 1 990 992 991 +3134 2 2 1 1 992 1012 993 +3135 2 2 1 1 1012 1074 1013 +3136 2 2 1 1 670 1893 671 +3137 2 2 1 1 492 1931 791 +3138 2 2 1 1 1606 1961 1687 +3139 2 2 1 1 30 1964 1734 +3140 2 2 1 1 720 1894 645 +3141 2 2 1 1 1073 2032 1883 +3142 2 2 1 1 1956 2202 862 +3143 2 2 1 1 1732 1826 1825 +3144 2 2 1 1 1599 2128 660 +3145 2 2 1 1 501 1896 1481 +3146 2 2 1 1 746 2010 767 +3147 2 2 1 1 521 1897 784 +3148 2 2 1 1 1861 2032 1027 +3149 2 2 1 1 1205 2036 1935 +3150 2 2 1 1 762 2024 1137 +3151 2 2 1 1 721 1900 715 +3152 2 2 1 1 548 776 363 +3153 2 2 1 1 1298 2161 1007 +3154 2 2 1 1 1398 1974 534 +3155 2 2 1 1 1207 2105 1898 +3156 2 2 1 1 1653 1955 450 +3157 2 2 1 1 914 2081 2059 +3158 2 2 1 1 1754 1917 1290 +3159 2 2 1 1 767 2208 666 +3160 2 2 1 1 1746 1747 665 +3161 2 2 1 1 20 1931 492 +3162 2 2 1 1 1734 2040 494 +3163 2 2 1 1 889 2015 1756 +3164 2 2 1 1 1553 2092 1783 +3165 2 2 1 1 494 1794 32 +3166 2 2 1 1 1239 2309 2188 +3167 2 2 1 1 1558 1562 1407 +3168 2 2 1 1 1406 1850 1402 +3169 2 2 1 1 1264 1849 1559 +3170 2 2 1 1 1261 1265 1263 +3171 2 2 1 1 1693 1727 1637 +3172 2 2 1 1 1258 1848 1259 +3173 2 2 1 1 1527 1846 1528 +3174 2 2 1 1 1518 1525 1524 +3175 2 2 1 1 1246 1845 1255 +3176 2 2 1 1 1519 1844 1517 +3177 2 2 1 1 1251 1252 1250 +3178 2 2 1 1 1433 1843 1424 +3179 2 2 1 1 1714 1842 1713 +3180 2 2 1 1 1223 1840 1220 +3181 2 2 1 1 1630 1841 1629 +3182 2 2 1 1 1221 1838 1231 +3183 2 2 1 1 1703 1704 1612 +3184 2 2 1 1 1232 1886 1452 +3185 2 2 1 1 1610 1837 1611 +3186 2 2 1 1 1711 1836 1710 +3187 2 2 1 1 1633 1635 1632 +3188 2 2 1 1 1328 1330 1329 +3189 2 2 1 1 1533 1835 1539 +3190 2 2 1 1 1707 1708 1658 +3191 2 2 1 1 1130 1132 1131 +3192 2 2 1 1 1302 1834 1292 +3193 2 2 1 1 1618 1619 1617 +3194 2 2 1 1 1310 1833 1308 +3195 2 2 1 1 1313 1832 1312 +3196 2 2 1 1 1510 1511 1508 +3197 2 2 1 1 1318 1320 1316 +3198 2 2 1 1 1322 1831 1319 +3199 2 2 1 1 801 803 802 +3200 2 2 1 1 1497 1830 1498 +3201 2 2 1 1 1326 1827 1324 +3202 2 2 1 1 1381 1829 1283 +3203 2 2 1 1 1503 1826 1128 +3204 2 2 1 1 1268 1269 1267 +3205 2 2 1 1 1395 1822 1397 +3206 2 2 1 1 1127 1823 1126 +3207 2 2 1 1 1273 1821 1271 +3208 2 2 1 1 1454 1456 1455 +3209 2 2 1 1 1399 1400 1394 +3210 2 2 1 1 1383 1385 1384 +3211 2 2 1 1 1543 1820 1546 +3212 2 2 1 1 1100 1101 1099 +3213 2 2 1 1 1462 1466 1465 +3214 2 2 1 1 1372 1375 1374 +3215 2 2 1 1 1463 1750 1461 +3216 2 2 1 1 1485 1487 1484 +3217 2 2 1 1 1575 1818 1576 +3218 2 2 1 1 1474 1475 1473 +3219 2 2 1 1 1486 1819 1490 +3220 2 2 1 1 1492 1817 1676 +3221 2 2 1 1 1364 1365 1363 +3222 2 2 1 1 1356 1357 1355 +3223 2 2 1 1 1363 1815 1361 +3224 2 2 1 1 1361 1816 1356 +3225 2 2 1 1 1490 1719 1492 +3226 2 2 1 1 1477 1813 1474 +3227 2 2 1 1 1288 1289 1287 +3228 2 2 1 1 1576 1580 1579 +3229 2 2 1 1 1484 1812 1486 +3230 2 2 1 1 1473 1814 1463 +3231 2 2 1 1 1573 1577 1575 +3232 2 2 1 1 1349 1740 1348 +3233 2 2 1 1 1544 1545 1543 +3234 2 2 1 1 1570 1904 1569 +3235 2 2 1 1 1274 1275 1273 +3236 2 2 1 1 1394 1811 1395 +3237 2 2 1 1 1128 1732 1127 +3238 2 2 1 1 1283 1285 1284 +3239 2 2 1 1 1267 1809 1326 +3240 2 2 1 1 1498 1504 1503 +3241 2 2 1 1 1324 1325 1322 +3242 2 2 1 1 1499 1500 1497 +3243 2 2 1 1 1319 1806 1318 +3244 2 2 1 1 1438 1439 1437 +3245 2 2 1 1 1316 1807 1313 +3246 2 2 1 1 1312 1314 1310 +3247 2 2 1 1 1303 1304 1302 +3248 2 2 1 1 1411 1413 1412 +3249 2 2 1 1 1292 1294 1293 +3250 2 2 1 1 1532 1534 1533 +3251 2 2 1 1 1705 1706 1655 +3252 2 2 1 1 1632 1804 1634 +3253 2 2 1 1 1710 1805 1633 +3254 2 2 1 1 1611 1712 1711 +3255 2 2 1 1 1612 1802 1610 +3256 2 2 1 1 1691 1692 1665 +3257 2 2 1 1 1629 1803 1703 +3258 2 2 1 1 1220 1222 1221 +3259 2 2 1 1 1713 1715 1630 +3260 2 2 1 1 1224 1225 1223 +3261 2 2 1 1 1424 1426 1425 +3262 2 2 1 1 1521 1522 1519 +3263 2 2 1 1 1255 1801 1251 +3264 2 2 1 1 1517 1799 1518 +3265 2 2 1 1 1245 1247 1246 +3266 2 2 1 1 1524 1798 1527 +3267 2 2 1 1 1528 1529 1258 +3268 2 2 1 1 1235 1236 1234 +3269 2 2 1 1 1259 1796 1261 +3270 2 2 1 1 1263 1797 1264 +3271 2 2 1 1 1559 1560 1555 +3272 2 2 1 1 1402 1404 1403 +3273 2 2 1 1 1556 1968 1558 +3274 2 2 1 1 1741 2223 1048 +3275 2 2 1 1 736 2006 1113 +3276 2 2 1 1 995 2285 1953 +3277 2 2 1 1 1386 1922 1389 +3278 2 2 1 1 1865 2163 1443 +3279 2 2 1 1 1200 2042 1450 +3280 2 2 1 1 684 2258 1056 +3281 2 2 1 1 1650 1946 1672 +3282 2 2 1 1 1721 2277 895 +3283 2 2 1 1 1190 1717 1209 +3284 2 2 1 1 1696 1910 924 +3285 2 2 1 1 1915 2309 462 +3286 2 2 1 1 1240 2309 1915 +3287 2 2 1 1 1418 2222 1737 +3288 2 2 1 1 1748 1961 1039 +3289 2 2 1 1 1357 1937 1022 +3290 2 2 1 1 1959 2032 1861 +3291 2 2 1 1 1730 2099 837 +3292 2 2 1 1 113 1914 114 +3293 2 2 1 1 1728 2306 893 +3294 2 2 1 1 1889 2198 675 +3295 2 2 1 1 1641 1644 1643 +3296 2 2 1 1 1953 2286 1009 +3297 2 2 1 1 1015 2282 1808 +3298 2 2 1 1 780 2255 1852 +3299 2 2 1 1 1409 1915 462 +3300 2 2 1 1 1676 1868 1121 +3301 2 2 1 1 1883 1884 1016 +3302 2 2 1 1 1858 1899 1046 +3303 2 2 1 1 1218 2327 1139 +3304 2 2 1 1 1924 2187 1197 +3305 2 2 1 1 615 2012 569 +3306 2 2 1 1 1824 1979 1823 +3307 2 2 1 1 866 2031 1662 +3308 2 2 1 1 2040 2195 494 +3309 2 2 1 1 1555 1989 1556 +3310 2 2 1 1 1734 1964 681 +3311 2 2 1 1 1858 1859 1624 +3312 2 2 1 1 1754 1920 1033 +3313 2 2 1 1 1105 1106 1102 +3314 2 2 1 1 1655 1971 1656 +3315 2 2 1 1 1076 2271 1341 +3316 2 2 1 1 1682 1929 1863 +3317 2 2 1 1 759 1925 1122 +3318 2 2 1 1 1976 1990 1183 +3319 2 2 1 1 791 1931 792 +3320 2 2 1 1 524 2029 38 +3321 2 2 1 1 842 846 845 +3322 2 2 1 1 1913 2192 642 +3323 2 2 1 1 368 768 522 +3324 2 2 1 1 1689 1890 1684 +3325 2 2 1 1 775 2262 495 +3326 2 2 1 1 1191 1776 1211 +3327 2 2 1 1 744 2010 746 +3328 2 2 1 1 441 1906 1905 +3329 2 2 1 1 893 2277 1728 +3330 2 2 1 1 1158 1160 1155 +3331 2 2 1 1 2011 2077 2076 +3332 2 2 1 1 1962 2296 1046 +3333 2 2 1 1 1038 1727 1693 +3334 2 2 1 1 1019 2233 2196 +3335 2 2 1 1 374 1916 375 +3336 2 2 1 1 1461 2017 1462 +3337 2 2 1 1 827 828 826 +3338 2 2 1 1 1062 2199 870 +3339 2 2 1 1 1240 2106 1202 +3340 2 2 1 1 966 969 968 +3341 2 2 1 1 836 2249 834 +3342 2 2 1 1 757 1824 1823 +3343 2 2 1 1 2160 2302 1166 +3344 2 2 1 1 617 2322 609 +3345 2 2 1 1 1082 1928 885 +3346 2 2 1 1 549 2004 1774 +3347 2 2 1 1 2094 2098 1228 +3348 2 2 1 1 1002 1919 1582 +3349 2 2 1 1 832 2123 1080 +3350 2 2 1 1 1271 2008 1268 +3351 2 2 1 1 1231 2019 1232 +3352 2 2 1 1 2149 2251 1010 +3353 2 2 1 1 1800 2278 1196 +3354 2 2 1 1 1039 1962 1748 +3355 2 2 1 1 1132 1133 1131 +3356 2 2 1 1 801 805 803 +3357 2 2 1 1 1328 1331 1330 +3358 2 2 1 1 1383 1390 1385 +3359 2 2 1 1 1101 1103 1099 +3360 2 2 1 1 1289 1290 1287 +3361 2 2 1 1 1499 1501 1500 +3362 2 2 1 1 1411 1414 1413 +3363 2 2 1 1 1330 1334 1329 +3364 2 2 1 1 1294 1295 1293 +3365 2 2 1 1 1130 1135 1132 +3366 2 2 1 1 1510 1512 1511 +3367 2 2 1 1 1224 1226 1225 +3368 2 2 1 1 1426 1427 1425 +3369 2 2 1 1 803 804 802 +3370 2 2 1 1 1385 1386 1384 +3371 2 2 1 1 1235 1238 1236 +3372 2 2 1 1 1100 1102 1101 +3373 2 2 1 1 1466 1467 1465 +3374 2 2 1 1 1375 1376 1374 +3375 2 2 1 1 1485 1488 1487 +3376 2 2 1 1 1236 1237 1234 +3377 2 2 1 1 1364 1366 1365 +3378 2 2 1 1 1521 1722 1522 +3379 2 2 1 1 1288 1718 1289 +3380 2 2 1 1 1580 1581 1579 +3381 2 2 1 1 1544 1547 1545 +3382 2 2 1 1 1532 1535 1534 +3383 2 2 1 1 1274 1276 1275 +3384 2 2 1 1 1413 1415 1412 +3385 2 2 1 1 1303 1305 1304 +3386 2 2 1 1 1022 1731 1358 +3387 2 2 1 1 999 2157 1810 +3388 2 2 1 1 2107 2160 1202 +3389 2 2 1 1 710 1943 712 +3390 2 2 1 1 1078 2142 1904 +3391 2 2 1 1 1211 1776 680 +3392 2 2 1 1 914 2059 2058 +3393 2 2 1 1 1880 1881 1477 +3394 2 2 1 1 942 943 941 +3395 2 2 1 1 1081 1986 665 +3396 2 2 1 1 1367 2091 963 +3397 2 2 1 1 36 1927 37 +3398 2 2 1 1 1634 2023 1705 +3399 2 2 1 1 723 724 525 +3400 2 2 1 1 715 1967 713 +3401 2 2 1 1 528 1954 1880 +3402 2 2 1 1 1151 2252 1990 +3403 2 2 1 1 1117 1979 1824 +3404 2 2 1 1 1569 2142 1870 +3405 2 2 1 1 1864 2237 1017 +3406 2 2 1 1 2188 2309 1240 +3407 2 2 1 1 649 2032 1959 +3408 2 2 1 1 1859 2296 877 +3409 2 2 1 1 1662 1878 1877 +3410 2 2 1 1 1920 2229 961 +3411 2 2 1 1 846 849 847 +3412 2 2 1 1 677 2207 633 +3413 2 2 1 1 1903 2238 465 +3414 2 2 1 1 1054 2320 1909 +3415 2 2 1 1 1695 2141 1603 +3416 2 2 1 1 38 2029 39 +3417 2 2 1 1 849 851 850 +3418 2 2 1 1 530 2143 1444 +3419 2 2 1 1 819 2060 816 +3420 2 2 1 1 909 1856 1842 +3421 2 2 1 1 855 1991 858 +3422 2 2 1 1 1206 2297 1980 +3423 2 2 1 1 851 854 852 +3424 2 2 1 1 1161 1162 1160 +3425 2 2 1 1 1754 2229 1920 +3426 2 2 1 1 725 726 724 +3427 2 2 1 1 1239 2188 1238 +3428 2 2 1 1 12 1965 13 +3429 2 2 1 1 1163 1164 1162 +3430 2 2 1 1 771 1897 521 +3431 2 2 1 1 686 2204 640 +3432 2 2 1 1 727 728 726 +3433 2 2 1 1 1169 1992 1165 +3434 2 2 1 1 646 1967 720 +3435 2 2 1 1 1250 2036 1253 +3436 2 2 1 1 954 2210 953 +3437 2 2 1 1 1065 2314 2031 +3438 2 2 1 1 729 730 728 +3439 2 2 1 1 969 971 970 +3440 2 2 1 1 1904 2170 1078 +3441 2 2 1 1 731 732 730 +3442 2 2 1 1 1881 1934 682 +3443 2 2 1 1 581 2147 580 +3444 2 2 1 1 1082 2114 886 +3445 2 2 1 1 1686 2241 1690 +3446 2 2 1 1 1208 2163 1865 +3447 2 2 1 1 554 557 556 +3448 2 2 1 1 737 1997 733 +3449 2 2 1 1 1212 2071 1907 +3450 2 2 1 1 1741 2292 1694 +3451 2 2 1 1 139 1977 445 +3452 2 2 1 1 1577 2111 1069 +3453 2 2 1 1 663 1966 1866 +3454 2 2 1 1 881 2002 1049 +3455 2 2 1 1 1803 1841 910 +3456 2 2 1 1 973 1938 1279 +3457 2 2 1 1 1877 1878 1062 +3458 2 2 1 1 2151 2186 820 +3459 2 2 1 1 622 2171 1758 +3460 2 2 1 1 1967 2038 713 +3461 2 2 1 1 1647 2115 909 +3462 2 2 1 1 1198 2276 2070 +3463 2 2 1 1 1029 2003 1862 +3464 2 2 1 1 1444 2143 1901 +3465 2 2 1 1 756 2146 1513 +3466 2 2 1 1 29 1964 30 +3467 2 2 1 1 842 1090 846 +3468 2 2 1 1 957 2068 1937 +3469 2 2 1 1 1011 1832 1807 +3470 2 2 1 1 521 1927 36 +3471 2 2 1 1 642 2127 1854 +3472 2 2 1 1 1650 2048 1946 +3473 2 2 1 1 1684 1936 1698 +3474 2 2 1 1 1091 2180 2085 +3475 2 2 1 1 1583 1940 1369 +3476 2 2 1 1 470 2174 2037 +3477 2 2 1 1 516 2001 137 +3478 2 2 1 1 646 2038 1967 +3479 2 2 1 1 622 1758 1717 +3480 2 2 1 1 664 2324 2176 +3481 2 2 1 1 1985 1986 1037 +3482 2 2 1 1 1945 2276 1198 +3483 2 2 1 1 651 2080 1060 +3484 2 2 1 1 1031 2202 2129 +3485 2 2 1 1 624 1928 1082 +3486 2 2 1 1 1941 2124 741 +3487 2 2 1 1 33 1794 520 +3488 2 2 1 1 2061 2265 2088 +3489 2 2 1 1 1808 2283 1011 +3490 2 2 1 1 2242 2306 1044 +3491 2 2 1 1 579 582 581 +3492 2 2 1 1 1671 2043 843 +3493 2 2 1 1 823 824 822 +3494 2 2 1 1 820 2186 2067 +3495 2 2 1 1 496 2018 1785 +3496 2 2 1 1 557 559 558 +3497 2 2 1 1 2217 2268 691 +3498 2 2 1 1 1141 2071 1256 +3499 2 2 1 1 1053 1746 867 +3500 2 2 1 1 2037 2174 1114 +3501 2 2 1 1 2090 2202 1031 +3502 2 2 1 1 1656 2064 1707 +3503 2 2 1 1 1762 2126 361 +3504 2 2 1 1 834 837 836 +3505 2 2 1 1 1407 2069 1406 +3506 2 2 1 1 1902 2055 509 +3507 2 2 1 1 559 561 560 +3508 2 2 1 1 2106 2107 1202 +3509 2 2 1 1 1081 1082 886 +3510 2 2 1 1 491 2300 1900 +3511 2 2 1 1 1659 1982 1702 +3512 2 2 1 1 1678 2084 542 +3513 2 2 1 1 561 563 562 +3514 2 2 1 1 713 2038 714 +3515 2 2 1 1 1045 1995 971 +3516 2 2 1 1 1863 1930 1057 +3517 2 2 1 1 1379 1949 1380 +3518 2 2 1 1 1495 1950 1494 +3519 2 2 1 1 1371 1947 1372 +3520 2 2 1 1 1380 1951 1551 +3521 2 2 1 1 1508 1948 1507 +3522 2 2 1 1 1308 1952 1307 +3523 2 2 1 1 563 565 564 +3524 2 2 1 1 520 771 34 +3525 2 2 1 1 1925 2104 1122 +3526 2 2 1 1 774 2195 787 +3527 2 2 1 1 536 2198 1392 +3528 2 2 1 1 1725 2072 1031 +3529 2 2 1 1 565 567 566 +3530 2 2 1 1 1140 1142 1138 +3531 2 2 1 1 956 959 958 +3532 2 2 1 1 470 2037 1119 +3533 2 2 1 1 1146 2097 1144 +3534 2 2 1 1 567 569 568 +3535 2 2 1 1 109 2030 110 +3536 2 2 1 1 934 935 932 +3537 2 2 1 1 569 571 570 +3538 2 2 1 1 787 2040 673 +3539 2 2 1 1 1427 2020 1430 +3540 2 2 1 1 1644 1647 1645 +3541 2 2 1 1 1284 2049 1442 +3542 2 2 1 1 796 2038 646 +3543 2 2 1 1 571 573 572 +3544 2 2 1 1 1900 2300 715 +3545 2 2 1 1 1008 2159 1332 +3546 2 2 1 1 524 553 552 +3547 2 2 1 1 1046 1859 1858 +3548 2 2 1 1 1781 2101 1399 +3549 2 2 1 1 1039 2273 1962 +3550 2 2 1 1 573 575 574 +3551 2 2 1 1 1595 2041 1593 +3552 2 2 1 1 35 771 521 +3553 2 2 1 1 661 2128 1469 +3554 2 2 1 1 682 1933 1813 +3555 2 2 1 1 1027 2032 1073 +3556 2 2 1 1 1572 2111 1573 +3557 2 2 1 1 1253 2094 1779 +3558 2 2 1 1 575 577 576 +3559 2 2 1 1 2010 2108 667 +3560 2 2 1 1 1749 2009 456 +3561 2 2 1 1 1375 1917 1377 +3562 2 2 1 1 1141 2163 2071 +3563 2 2 1 1 1845 2191 1192 +3564 2 2 1 1 695 2152 650 +3565 2 2 1 1 1143 1144 1142 +3566 2 2 1 1 1113 2006 729 +3567 2 2 1 1 577 579 578 +3568 2 2 1 1 935 1874 937 +3569 2 2 1 1 1279 2211 2168 +3570 2 2 1 1 862 2202 2090 +3571 2 2 1 1 1086 1999 1028 +3572 2 2 1 1 666 2231 767 +3573 2 2 1 1 594 2051 795 +3574 2 2 1 1 21 2052 22 +3575 2 2 1 1 2018 2303 1068 +3576 2 2 1 1 778 1996 606 +3577 2 2 1 1 1145 1146 1144 +3578 2 2 1 1 579 581 580 +3579 2 2 1 1 767 2010 667 +3580 2 2 1 1 1147 1148 1146 +3581 2 2 1 1 1482 2021 1434 +3582 2 2 1 1 837 839 838 +3583 2 2 1 1 676 2262 775 +3584 2 2 1 1 606 2216 588 +3585 2 2 1 1 1608 2129 1652 +3586 2 2 1 1 961 2229 1718 +3587 2 2 1 1 1959 1975 649 +3588 2 2 1 1 627 1757 1756 +3589 2 2 1 1 1873 2222 1420 +3590 2 2 1 1 1106 1108 1107 +3591 2 2 1 1 1149 1150 1148 +3592 2 2 1 1 1680 2062 859 +3593 2 2 1 1 1929 1930 1863 +3594 2 2 1 1 1702 1982 1697 +3595 2 2 1 1 839 841 840 +3596 2 2 1 1 676 1978 666 +3597 2 2 1 1 1400 1855 1854 +3598 2 2 1 1 754 2034 1417 +3599 2 2 1 1 1126 1979 1875 +3600 2 2 1 1 895 2056 1721 +3601 2 2 1 1 43 2134 547 +3602 2 2 1 1 546 2135 25 +3603 2 2 1 1 7 2133 545 +3604 2 2 1 1 1450 2042 1449 +3605 2 2 1 1 1151 1152 1150 +3606 2 2 1 1 493 2066 18 +3607 2 2 1 1 841 1090 842 +3608 2 2 1 1 1153 1154 1152 +3609 2 2 1 1 872 2073 1607 +3610 2 2 1 1 809 810 808 +3611 2 2 1 1 2177 2193 741 +3612 2 2 1 1 961 2184 1920 +3613 2 2 1 1 1653 1956 1955 +3614 2 2 1 1 1342 2021 1482 +3615 2 2 1 1 72 2082 73 +3616 2 2 1 1 959 965 960 +3617 2 2 1 1 1403 2130 1408 +3618 2 2 1 1 1400 2101 1855 +3619 2 2 1 1 1806 1831 1015 +3620 2 2 1 1 2034 2260 756 +3621 2 2 1 1 697 1881 1880 +3622 2 2 1 1 1855 2101 1389 +3623 2 2 1 1 2121 2258 1089 +3624 2 2 1 1 1067 2303 2018 +3625 2 2 1 1 1443 2163 1141 +3626 2 2 1 1 588 2216 586 +3627 2 2 1 1 1414 2014 1416 +3628 2 2 1 1 2091 2093 963 +3629 2 2 1 1 550 1934 697 +3630 2 2 1 1 912 2237 1864 +3631 2 2 1 1 1592 2122 1591 +3632 2 2 1 1 1195 2279 1800 +3633 2 2 1 1 1019 2141 1695 +3634 2 2 1 1 963 2093 1937 +3635 2 2 1 1 2089 2099 632 +3636 2 2 1 1 554 784 557 +3637 2 2 1 1 907 2240 1887 +3638 2 2 1 1 1170 2272 1853 +3639 2 2 1 1 1898 2042 1200 +3640 2 2 1 1 776 2104 529 +3641 2 2 1 1 1926 2310 1421 +3642 2 2 1 1 1739 2137 1338 +3643 2 2 1 1 1658 2153 1659 +3644 2 2 1 1 1243 2102 1245 +3645 2 2 1 1 576 2044 1747 +3646 2 2 1 1 1743 2174 470 +3647 2 2 1 1 1121 1868 1122 +3648 2 2 1 1 1742 2198 536 +3649 2 2 1 1 1877 2182 480 +3650 2 2 1 1 1429 1981 1723 +3651 2 2 1 1 1994 2155 622 +3652 2 2 1 1 1783 2092 1278 +3653 2 2 1 1 1035 2255 1874 +3654 2 2 1 1 711 2172 709 +3655 2 2 1 1 1428 1429 1427 +3656 2 2 1 1 805 816 806 +3657 2 2 1 1 1582 1583 1581 +3658 2 2 1 1 1955 2299 1733 +3659 2 2 1 1 525 768 367 +3660 2 2 1 1 465 2238 1540 +3661 2 2 1 1 553 784 554 +3662 2 2 1 1 1375 1947 1917 +3663 2 2 1 1 1861 1984 779 +3664 2 2 1 1 2012 2013 611 +3665 2 2 1 1 830 833 832 +3666 2 2 1 1 773 774 678 +3667 2 2 1 1 675 2198 1742 +3668 2 2 1 1 1389 1922 1855 +3669 2 2 1 1 1194 2297 1206 +3670 2 2 1 1 1049 1890 1689 +3671 2 2 1 1 1770 2309 1239 +3672 2 2 1 1 897 898 896 +3673 2 2 1 1 973 2224 1938 +3674 2 2 1 1 1982 2319 1697 +3675 2 2 1 1 1188 2131 1404 +3676 2 2 1 1 316 2203 317 +3677 2 2 1 1 848 2205 1691 +3678 2 2 1 1 2172 2318 709 +3679 2 2 1 1 1160 2027 1155 +3680 2 2 1 1 779 2264 1861 +3681 2 2 1 1 945 949 947 +3682 2 2 1 1 462 2309 1770 +3683 2 2 1 1 2046 2109 754 +3684 2 2 1 1 140 2263 141 +3685 2 2 1 1 520 1794 773 +3686 2 2 1 1 709 2318 708 +3687 2 2 1 1 2176 2324 574 +3688 2 2 1 1 1033 2173 1917 +3689 2 2 1 1 665 1986 1746 +3690 2 2 1 1 1205 2098 2094 +3691 2 2 1 1 1178 2253 1847 +3692 2 2 1 1 1095 2245 836 +3693 2 2 1 1 2233 2321 925 +3694 2 2 1 1 734 2181 1118 +3695 2 2 1 1 1094 1857 1641 +3696 2 2 1 1 1426 1751 1428 +3697 2 2 1 1 1942 2326 1047 +3698 2 2 1 1 1365 1815 1363 +3699 2 2 1 1 1356 1816 1357 +3700 2 2 1 1 1490 1819 1719 +3701 2 2 1 1 1474 1813 1475 +3702 2 2 1 1 1576 1818 1580 +3703 2 2 1 1 1487 1812 1484 +3704 2 2 1 1 1463 1814 1750 +3705 2 2 1 1 1815 1816 1361 +3706 2 2 1 1 1719 1817 1492 +3707 2 2 1 1 1812 1819 1486 +3708 2 2 1 1 1475 1814 1473 +3709 2 2 1 1 1577 1818 1575 +3710 2 2 1 1 1545 1820 1543 +3711 2 2 1 1 1275 1821 1273 +3712 2 2 1 1 1811 1822 1395 +3713 2 2 1 1 1128 1826 1732 +3714 2 2 1 1 1400 1811 1394 +3715 2 2 1 1 1283 1829 1285 +3716 2 2 1 1 1809 1827 1326 +3717 2 2 1 1 1498 1830 1504 +3718 2 2 1 1 1732 1823 1127 +3719 2 2 1 1 1325 1831 1322 +3720 2 2 1 1 1269 1809 1267 +3721 2 2 1 1 1504 1826 1503 +3722 2 2 1 1 1324 1827 1325 +3723 2 2 1 1 1318 1806 1320 +3724 2 2 1 1 1500 1830 1497 +3725 2 2 1 1 1319 1831 1806 +3726 2 2 1 1 1807 1832 1313 +3727 2 2 1 1 1320 1807 1316 +3728 2 2 1 1 1314 1833 1310 +3729 2 2 1 1 1312 1832 1314 +3730 2 2 1 1 1304 1834 1302 +3731 2 2 1 1 1292 1834 1294 +3732 2 2 1 1 1534 1835 1533 +3733 2 2 1 1 1635 1804 1632 +3734 2 2 1 1 1710 1836 1805 +3735 2 2 1 1 1633 1805 1635 +3736 2 2 1 1 1611 1837 1712 +3737 2 2 1 1 1712 1836 1711 +3738 2 2 1 1 1704 1802 1612 +3739 2 2 1 1 1802 1837 1610 +3740 2 2 1 1 1629 1841 1803 +3741 2 2 1 1 1703 1803 1704 +3742 2 2 1 1 1220 1840 1222 +3743 2 2 1 1 1222 1838 1221 +3744 2 2 1 1 1713 1842 1715 +3745 2 2 1 1 1715 1841 1630 +3746 2 2 1 1 1225 1840 1223 +3747 2 2 1 1 1424 1843 1426 +3748 2 2 1 1 1522 1844 1519 +3749 2 2 1 1 1255 1845 1801 +3750 2 2 1 1 1251 1801 1252 +3751 2 2 1 1 1518 1799 1525 +3752 2 2 1 1 1517 1844 1799 +3753 2 2 1 1 1247 1845 1246 +3754 2 2 1 1 1798 1846 1527 +3755 2 2 1 1 1525 1798 1524 +3756 2 2 1 1 1529 1848 1258 +3757 2 2 1 1 1528 1846 1529 +3758 2 2 1 1 1261 1796 1265 +3759 2 2 1 1 1259 1848 1796 +3760 2 2 1 1 1797 1849 1264 +3761 2 2 1 1 1265 1797 1263 +3762 2 2 1 1 1559 1849 1560 +3763 2 2 1 1 1402 1850 1404 +3764 2 2 1 1 548 2126 1762 +3765 2 2 1 1 1863 2095 489 +3766 2 2 1 1 665 2054 1081 +3767 2 2 1 1 1558 1968 1562 +3768 2 2 1 1 1419 2287 1926 +3769 2 2 1 1 1747 2044 665 +3770 2 2 1 1 1047 2165 1701 +3771 2 2 1 1 1280 2211 2092 +3772 2 2 1 1 877 2039 1859 +3773 2 2 1 1 938 2189 2149 +3774 2 2 1 1 1426 1843 1751 +3775 2 2 1 1 833 1730 834 +3776 2 2 1 1 1477 1881 1813 +3777 2 2 1 1 1785 2018 1068 +3778 2 2 1 1 1817 1868 1676 +3779 2 2 1 1 1116 2174 1743 +3780 2 2 1 1 1560 1989 1555 +3781 2 2 1 1 1963 2273 1039 +3782 2 2 1 1 1556 1989 1968 +3783 2 2 1 1 1400 1854 1811 +3784 2 2 1 1 740 2227 1107 +3785 2 2 1 1 1185 2103 1790 +3786 2 2 1 1 1706 1971 1655 +3787 2 2 1 1 2235 2319 920 +3788 2 2 1 1 1690 2241 1044 +3789 2 2 1 1 543 551 550 +3790 2 2 1 1 1462 2017 1466 +3791 2 2 1 1 1750 2017 1461 +3792 2 2 1 1 1196 2278 1847 +3793 2 2 1 1 1852 2255 1035 +3794 2 2 1 1 2024 2117 755 +3795 2 2 1 1 1442 2251 1454 +3796 2 2 1 1 1917 1947 1290 +3797 2 2 1 1 787 2195 2040 +3798 2 2 1 1 1070 2247 1958 +3799 2 2 1 1 2043 2305 1059 +3800 2 2 1 1 1449 2105 1888 +3801 2 2 1 1 1268 2008 1269 +3802 2 2 1 1 1821 2008 1271 +3803 2 2 1 1 1838 2019 1231 +3804 2 2 1 1 1232 2019 1886 +3805 2 2 1 1 1823 1979 1126 +3806 2 2 1 1 615 2207 677 +3807 2 2 1 1 834 1730 837 +3808 2 2 1 1 949 951 950 +3809 2 2 1 1 1603 2140 1688 +3810 2 2 1 1 1705 2023 1706 +3811 2 2 1 1 1804 2023 1634 +3812 2 2 1 1 1060 2118 1058 +3813 2 2 1 1 633 2204 686 +3814 2 2 1 1 39 2029 543 +3815 2 2 1 1 951 953 952 +3816 2 2 1 1 362 2126 548 +3817 2 2 1 1 1188 2272 2107 +3818 2 2 1 1 953 1027 954 +3819 2 2 1 1 663 1983 1966 +3820 2 2 1 1 1757 2116 1756 +3821 2 2 1 1 1774 2004 547 +3822 2 2 1 1 1869 2125 1346 +3823 2 2 1 1 677 678 615 +3824 2 2 1 1 1252 2036 1250 +3825 2 2 1 1 663 2256 1983 +3826 2 2 1 1 1081 2113 1037 +3827 2 2 1 1 1034 1940 1583 +3828 2 2 1 1 1799 1844 1195 +3829 2 2 1 1 1053 2112 1036 +3830 2 2 1 1 1855 1922 642 +3831 2 2 1 1 759 1868 1817 +3832 2 2 1 1 1824 1911 1117 +3833 2 2 1 1 1278 1279 1276 +3834 2 2 1 1 804 809 808 +3835 2 2 1 1 1430 2020 1780 +3836 2 2 1 1 742 2016 1719 +3837 2 2 1 1 1810 2274 1052 +3838 2 2 1 1 1404 2131 1403 +3839 2 2 1 1 1699 2164 1686 +3840 2 2 1 1 1996 2216 606 +3841 2 2 1 1 907 1837 1802 +3842 2 2 1 1 824 827 826 +3843 2 2 1 1 1059 2305 2294 +3844 2 2 1 1 1387 1922 1386 +3845 2 2 1 1 1707 2064 1708 +3846 2 2 1 1 1562 2069 1407 +3847 2 2 1 1 1406 2069 1850 +3848 2 2 1 1 1372 1947 1375 +3849 2 2 1 1 1511 1948 1508 +3850 2 2 1 1 1833 1952 1308 +3851 2 2 1 1 2031 2314 1063 +3852 2 2 1 1 2157 2224 973 +3853 2 2 1 1 1117 1911 1115 +3854 2 2 1 1 1285 2049 1284 +3855 2 2 1 1 37 1927 524 +3856 2 2 1 1 1573 2111 1577 +3857 2 2 1 1 939 942 941 +3858 2 2 1 1 1733 2299 1065 +3859 2 2 1 1 1984 2246 779 +3860 2 2 1 1 942 1084 1028 +3861 2 2 1 1 680 2119 1211 +3862 2 2 1 1 1746 1985 867 +3863 2 2 1 1 2166 2316 2269 +3864 2 2 1 1 1890 1936 1684 +3865 2 2 1 1 1016 1045 971 +3866 2 2 1 1 2240 2325 903 +3867 2 2 1 1 1074 1980 1075 +3868 2 2 1 1 1183 1990 1839 +3869 2 2 1 1 1738 2255 780 +3870 2 2 1 1 732 758 739 +3871 2 2 1 1 867 2112 1053 +3872 2 2 1 1 1971 2064 1656 +3873 2 2 1 1 816 2179 817 +3874 2 2 1 1 1921 2151 820 +3875 2 2 1 1 886 2113 1081 +3876 2 2 1 1 2022 2143 530 +3877 2 2 1 1 1708 2153 1658 +3878 2 2 1 1 1245 2102 1247 +3879 2 2 1 1 897 2116 1757 +3880 2 2 1 1 1033 1917 1754 +3881 2 2 1 1 988 2118 1060 +3882 2 2 1 1 1795 2025 664 +3883 2 2 1 1 1750 1973 674 +3884 2 2 1 1 1052 1827 1809 +3885 2 2 1 1 1185 2190 1248 +3886 2 2 1 1 1731 2068 961 +3887 2 2 1 1 1454 2251 1456 +3888 2 2 1 1 1421 2310 1515 +3889 2 2 1 1 1091 2147 688 +3890 2 2 1 1 692 1996 693 +3891 2 2 1 1 1106 1107 1102 +3892 2 2 1 1 931 2232 1909 +3893 2 2 1 1 1027 2132 954 +3894 2 2 1 1 854 1991 855 +3895 2 2 1 1 1201 2200 1853 +3896 2 2 1 1 1165 1992 1164 +3897 2 2 1 1 1939 2014 1136 +3898 2 2 1 1 764 2231 1978 +3899 2 2 1 1 1641 1857 1644 +3900 2 2 1 1 827 1966 828 +3901 2 2 1 1 733 1997 732 +3902 2 2 1 1 764 1892 739 +3903 2 2 1 1 1953 2285 982 +3904 2 2 1 1 1698 1936 1038 +3905 2 2 1 1 1202 2188 1240 +3906 2 2 1 1 1226 1787 1225 +3907 2 2 1 1 1426 1428 1427 +3908 2 2 1 1 1414 1416 1413 +3909 2 2 1 1 1501 1759 1500 +3910 2 2 1 1 1289 1754 1290 +3911 2 2 1 1 1101 1957 1103 +3912 2 2 1 1 1236 1789 1237 +3913 2 2 1 1 805 806 803 +3914 2 2 1 1 1722 1723 1522 +3915 2 2 1 1 1132 1137 1133 +3916 2 2 1 1 1331 1332 1330 +3917 2 2 1 1 1512 1513 1511 +3918 2 2 1 1 1385 1387 1386 +3919 2 2 1 1 1580 1582 1581 +3920 2 2 1 1 1466 1468 1467 +3921 2 2 1 1 1375 1377 1376 +3922 2 2 1 1 1488 1941 1487 +3923 2 2 1 1 1366 1367 1365 +3924 2 2 1 1 982 2286 1953 +3925 2 2 1 1 1955 1956 1064 +3926 2 2 1 1 2100 2312 632 +3927 2 2 1 1 942 1028 943 +3928 2 2 1 1 1880 1954 697 +3929 2 2 1 1 1115 1118 1112 +3930 2 2 1 1 1751 1843 1343 +3931 2 2 1 1 810 820 812 +3932 2 2 1 1 814 823 822 +3933 2 2 1 1 1468 1987 661 +3934 2 2 1 1 868 2199 1878 +3935 2 2 1 1 1057 2095 1863 +3936 2 2 1 1 858 1991 1036 +3937 2 2 1 1 741 2193 1788 +3938 2 2 1 1 999 2224 2157 +3939 2 2 1 1 930 934 932 +3940 2 2 1 1 1133 1939 1136 +3941 2 2 1 1 1369 1940 1366 +3942 2 2 1 1 818 1822 1811 +3943 2 2 1 1 1005 2319 1982 +3944 2 2 1 1 926 1032 928 +3945 2 2 1 1 580 2147 625 +3946 2 2 1 1 919 1041 921 +3947 2 2 1 1 520 2267 771 +3948 2 2 1 1 915 2011 917 +3949 2 2 1 1 949 1086 951 +3950 2 2 1 1 905 914 911 +3951 2 2 1 1 1978 2231 666 +3952 2 2 1 1 551 1934 550 +3953 2 2 1 1 1204 1992 1169 +3954 2 2 1 1 898 904 900 +3955 2 2 1 1 677 773 678 +3956 2 2 1 1 845 2281 1930 +3957 2 2 1 1 1811 1854 818 +3958 2 2 1 1 616 2171 2155 +3959 2 2 1 1 1949 1951 1380 +3960 2 2 1 1 1897 2162 784 +3961 2 2 1 1 1154 1209 1203 +3962 2 2 1 1 1885 1921 809 +3963 2 2 1 1 545 2133 1773 +3964 2 2 1 1 547 2134 1774 +3965 2 2 1 1 1775 2135 546 +3966 2 2 1 1 1414 2138 2014 +3967 2 2 1 1 746 1997 737 +3968 2 2 1 1 1073 1883 965 +3969 2 2 1 1 1853 2200 1170 +3970 2 2 1 1 1757 1923 897 +3971 2 2 1 1 1870 2142 1352 +3972 2 2 1 1 1052 1828 1827 +3973 2 2 1 1 2042 2105 1449 +3974 2 2 1 1 823 1876 824 +3975 2 2 1 1 1032 2088 1851 +3976 2 2 1 1 522 1892 772 +3977 2 2 1 1 727 2193 2177 +3978 2 2 1 1 1078 2166 2142 +3979 2 2 1 1 1276 1938 1275 +3980 2 2 1 1 1155 2027 1154 +3981 2 2 1 1 1056 2152 683 +3982 2 2 1 1 858 1036 861 +3983 2 2 1 1 1389 2101 1781 +3984 2 2 1 1 863 867 865 +3985 2 2 1 1 871 1037 874 +3986 2 2 1 1 876 886 878 +3987 2 2 1 1 1171 1204 1169 +3988 2 2 1 1 880 885 883 +3989 2 2 1 1 1069 2218 1577 +3990 2 2 1 1 1175 1210 1173 +3991 2 2 1 1 889 1756 891 +3992 2 2 1 1 1179 1182 1177 +3993 2 2 1 1 894 897 896 +3994 2 2 1 1 1048 2292 1741 +3995 2 2 1 1 1024 2307 2045 +3996 2 2 1 1 1206 1213 1181 +3997 2 2 1 1 975 1029 977 +3998 2 2 1 1 744 746 737 +3999 2 2 1 1 981 1058 983 +4000 2 2 1 1 1779 2094 1228 +4001 2 2 1 1 985 988 987 +4002 2 2 1 1 760 763 752 +4003 2 2 1 1 990 1042 992 +4004 2 2 1 1 1012 1089 1074 +4005 2 2 1 1 773 2267 520 +4006 2 2 1 1 679 2086 1960 +4007 2 2 1 1 2034 2287 1417 +4008 2 2 1 1 934 1035 935 +4009 2 2 1 1 1969 2062 1680 +4010 2 2 1 1 959 1073 965 +4011 2 2 1 1 1946 2048 1071 +4012 2 2 1 1 1154 1203 1152 +4013 2 2 1 1 1659 2153 1982 +4014 2 2 1 1 529 2104 1925 +4015 2 2 1 1 1883 2032 649 +4016 2 2 1 1 649 1884 1883 +4017 2 2 1 1 2083 2252 1149 +4018 2 2 1 1 1148 1191 1146 +4019 2 2 1 1 1773 2133 378 +4020 2 2 1 1 26 2135 1775 +4021 2 2 1 1 1774 2134 42 +4022 2 2 1 1 573 611 575 +4023 2 2 1 1 818 2179 2060 +4024 2 2 1 1 567 615 569 +4025 2 2 1 1 1043 2258 1042 +4026 2 2 1 1 1756 2015 627 +4027 2 2 1 1 563 633 565 +4028 2 2 1 1 724 768 525 +4029 2 2 1 1 559 640 561 +4030 2 2 1 1 934 1851 1035 +4031 2 2 1 1 1694 2292 1049 +4032 2 2 1 1 1162 1190 1160 +4033 2 2 1 1 851 1795 854 +4034 2 2 1 1 969 1016 971 +4035 2 2 1 1 728 1736 726 +4036 2 2 1 1 732 739 730 +4037 2 2 1 1 1037 1986 1081 +4038 2 2 1 1 1886 2083 1200 +4039 2 2 1 1 809 2226 1885 +4040 2 2 1 1 1108 1113 1107 +4041 2 2 1 1 2077 2268 2265 +4042 2 2 1 1 1647 2261 2115 +4043 2 2 1 1 955 2093 2091 +4044 2 2 1 1 809 1921 810 +4045 2 2 1 1 1053 1747 1746 +4046 2 2 1 1 1808 2282 978 +4047 2 2 1 1 1066 2062 1969 +4048 2 2 1 1 1548 1951 1949 +4049 2 2 1 1 1196 1846 1798 +4050 2 2 1 1 732 1997 758 +4051 2 2 1 1 2049 2251 1442 +4052 2 2 1 1 1011 1944 1832 +4053 2 2 1 1 1428 1431 1429 +4054 2 2 1 1 816 817 806 +4055 2 2 1 1 897 1923 898 +4056 2 2 1 1 1209 1960 1203 +4057 2 2 1 1 2168 2211 994 +4058 2 2 1 1 1153 1990 1976 +4059 2 2 1 1 841 2089 1090 +4060 2 2 1 1 1138 1970 762 +4061 2 2 1 1 1167 2160 2107 +4062 2 2 1 1 1810 2157 974 +4063 2 2 1 1 1777 2138 1587 +4064 2 2 1 1 1778 2137 1739 +4065 2 2 1 1 1585 2139 1782 +4066 2 2 1 1 1176 2187 1924 +4067 2 2 1 1 1103 1950 1495 +4068 2 2 1 1 1290 1947 1371 +4069 2 2 1 1 1507 1948 1501 +4070 2 2 1 1 1376 1949 1379 +4071 2 2 1 1 1494 1950 1488 +4072 2 2 1 1 1551 1951 1547 +4073 2 2 1 1 1307 1952 1305 +4074 2 2 1 1 1883 2028 965 +4075 2 2 1 1 1084 1738 1028 +4076 2 2 1 1 1346 2125 1331 +4077 2 2 1 1 758 764 739 +4078 2 2 1 1 1909 2320 931 +4079 2 2 1 1 519 775 371 +4080 2 2 1 1 1819 2221 742 +4081 2 2 1 1 954 2132 956 +4082 2 2 1 1 1788 2193 725 +4083 2 2 1 1 1758 2171 617 +4084 2 2 1 1 691 2077 2011 +4085 2 2 1 1 1018 2321 1619 +4086 2 2 1 1 623 2175 1784 +4087 2 2 1 1 777 2104 776 +4088 2 2 1 1 2014 2138 1136 +4089 2 2 1 1 1279 2168 973 +4090 2 2 1 1 942 2047 1084 +4091 2 2 1 1 1981 2297 1194 +4092 2 2 1 1 674 2291 1468 +4093 2 2 1 1 971 1995 972 +4094 2 2 1 1 916 2078 1972 +4095 2 2 1 1 1092 2313 572 +4096 2 2 1 1 674 2017 1750 +4097 2 2 1 1 1049 2002 1890 +4098 2 2 1 1 1857 2056 1093 +4099 2 2 1 1 1817 2016 759 +4100 2 2 1 1 875 2296 1962 +4101 2 2 1 1 953 1984 1027 +4102 2 2 1 1 1587 2138 1414 +4103 2 2 1 1 1581 2139 1585 +4104 2 2 1 1 1813 1933 1475 +4105 2 2 1 1 1814 1973 1750 +4106 2 2 1 1 1635 1864 1804 +4107 2 2 1 1 1842 1856 1715 +4108 2 2 1 1 1850 1853 1404 +4109 2 2 1 1 1222 1839 1838 +4110 2 2 1 1 1832 1944 1314 +4111 2 2 1 1 1827 1828 1325 +4112 2 2 1 1 1688 2140 1040 +4113 2 2 1 1 2086 2087 680 +4114 2 2 1 1 934 2074 1851 +4115 2 2 1 1 1721 2056 1094 +4116 2 2 1 1 1191 2097 1146 +4117 2 2 1 1 906 2239 1887 +4118 2 2 1 1 1062 2182 1877 +4119 2 2 1 1 1512 2310 1926 +4120 2 2 1 1 457 2222 1873 +4121 2 2 1 1 817 1885 806 +4122 2 2 1 1 978 2283 1808 +4123 2 2 1 1 1793 2327 1218 +4124 2 2 1 1 1780 2020 1722 +4125 2 2 1 1 1885 2226 806 +4126 2 2 1 1 965 2028 966 +4127 2 2 1 1 686 2267 677 +4128 2 2 1 1 1333 2308 2125 +4129 2 2 1 1 1866 2311 663 +4130 2 2 1 1 1248 2190 1161 +4131 2 2 1 1 1966 1983 828 +4132 2 2 1 1 1993 2175 623 +4133 2 2 1 1 1092 2324 664 +4134 2 2 1 1 1805 1836 913 +4135 2 2 1 1 1399 2101 1400 +4136 2 2 1 1 1875 1979 1117 +4137 2 2 1 1 529 722 365 +4138 2 2 1 1 774 2013 678 +4139 2 2 1 1 574 2206 2176 +4140 2 2 1 1 2150 2247 1070 +4141 2 2 1 1 1730 2100 2099 +4142 2 2 1 1 2140 2196 1040 +4143 2 2 1 1 1851 1852 1035 +4144 2 2 1 1 1331 2308 1332 +4145 2 2 1 1 677 2267 773 +4146 2 2 1 1 1992 1994 1164 +4147 2 2 1 1 1904 2142 1569 +4148 2 2 1 1 1028 1999 943 +4149 2 2 1 1 1180 2278 1800 +4150 2 2 1 1 1035 1874 935 +4151 2 2 1 1 835 2245 1860 +4152 2 2 1 1 1026 2242 2164 +4153 2 2 1 1 828 1983 830 +4154 2 2 1 1 1719 2016 1817 +4155 2 2 1 1 2060 2179 816 +4156 2 2 1 1 2102 2103 1247 +4157 2 2 1 1 2021 2271 1343 +4158 2 2 1 1 2000 2190 1185 +4159 2 2 1 1 1704 1988 1802 +4160 2 2 1 1 1081 2054 1082 +4161 2 2 1 1 2181 2194 731 +4162 2 2 1 1 529 1925 722 +4163 2 2 1 1 1851 2074 1032 +4164 2 2 1 1 943 1999 945 +4165 2 2 1 1 1190 2027 1160 +4166 2 2 1 1 1962 2273 875 +4167 2 2 1 1 1935 2295 1158 +4168 2 2 1 1 1026 2164 1699 +4169 2 2 1 1 651 2257 2080 +4170 2 2 1 1 1122 2104 777 +4171 2 2 1 1 555 2212 1933 +4172 2 2 1 1 524 1927 553 +4173 2 2 1 1 568 2311 1866 +4174 2 2 1 1 572 2324 1092 +4175 2 2 1 1 824 1876 827 +4176 2 2 1 1 1878 2199 1062 +4177 2 2 1 1 2036 2094 1253 +4178 2 2 1 1 957 2184 2068 +4179 2 2 1 1 1787 1976 1183 +4180 2 2 1 1 1140 2327 1793 +4181 2 2 1 1 844 2305 2165 +4182 2 2 1 1 640 2162 1897 +4183 2 2 1 1 543 2029 551 +4184 2 2 1 1 1069 2247 2150 +4185 2 2 1 1 1152 2110 1150 +4186 2 2 1 1 763 2119 2087 +4187 2 2 1 1 1080 2123 1918 +4188 2 2 1 1 921 2061 923 +4189 2 2 1 1 1118 2181 736 +4190 2 2 1 1 975 1995 1029 +4191 2 2 1 1 966 2028 969 +4192 2 2 1 1 2107 2272 1167 +4193 2 2 1 1 2265 2268 694 +4194 2 2 1 1 1788 2221 2220 +4195 2 2 1 1 1757 2085 1923 +4196 2 2 1 1 974 2274 1810 +4197 2 2 1 1 900 2063 902 +4198 2 2 1 1 1789 2000 1185 +4199 2 2 1 1 1431 1981 1429 +4200 2 2 1 1 2312 2313 632 +4201 2 2 1 1 2196 2197 1040 +4202 2 2 1 1 1796 1848 1186 +4203 2 2 1 1 1036 2026 1053 +4204 2 2 1 1 682 2266 2035 +4205 2 2 1 1 1154 2027 1209 +4206 2 2 1 1 1874 2047 937 +4207 2 2 1 1 970 2169 2168 +4208 2 2 1 1 522 772 369 +4209 2 2 1 1 956 2132 959 +4210 2 2 1 1 1844 2219 1195 +4211 2 2 1 1 2087 2119 680 +4212 2 2 1 1 1142 1970 1138 +4213 2 2 1 1 678 2012 615 +4214 2 2 1 1 1833 2214 995 +4215 2 2 1 1 1204 1993 1992 +4216 2 2 1 1 1417 2287 1419 +4217 2 2 1 1 1082 2054 624 +4218 2 2 1 1 1802 1988 907 +4219 2 2 1 1 1860 2245 1095 +4220 2 2 1 1 2072 2090 1031 +4221 2 2 1 1 1706 1972 1971 +4222 2 2 1 1 955 2250 2093 +4223 2 2 1 1 1804 1864 1017 +4224 2 2 1 1 627 2015 1928 +4225 2 2 1 1 1800 2279 1180 +4226 2 2 1 1 1876 2186 639 +4227 2 2 1 1 761 2096 1970 +4228 2 2 1 1 624 2053 1928 +4229 2 2 1 1 1973 2183 674 +4230 2 2 1 1 1285 2050 2049 +4231 2 2 1 1 623 2155 1993 +4232 2 2 1 1 937 2047 939 +4233 2 2 1 1 1795 2176 2148 +4234 2 2 1 1 2299 2314 1065 +4235 2 2 1 1 649 1975 1884 +4236 2 2 1 1 949 1999 1086 +4237 2 2 1 1 918 2236 2065 +4238 2 2 1 1 662 1921 1885 +4239 2 2 1 1 1930 2281 1057 +4240 2 2 1 1 1887 2240 906 +4241 2 2 1 1 662 2151 1921 +4242 2 2 1 1 1115 1911 1118 +4243 2 2 1 1 1333 2125 1869 +4244 2 2 1 1 972 1995 975 +4245 2 2 1 1 810 1921 820 +4246 2 2 1 1 2108 2304 667 +4247 2 2 1 1 1888 2105 1207 +4248 2 2 1 1 1197 2187 1945 +4249 2 2 1 1 1967 2300 720 +4250 2 2 1 1 1103 2124 1950 +4251 2 2 1 1 812 2067 814 +4252 2 2 1 1 763 2304 2108 +4253 2 2 1 1 2065 2078 918 +4254 2 2 1 1 1738 2120 779 +4255 2 2 1 1 1336 2137 1778 +4256 2 2 1 1 1136 2138 1777 +4257 2 2 1 1 1782 2139 1369 +4258 2 2 1 1 898 1923 904 +4259 2 2 1 1 928 2074 930 +4260 2 2 1 1 923 2075 926 +4261 2 2 1 1 917 2076 919 +4262 2 2 1 1 1109 2143 2022 +4263 2 2 1 1 902 2081 905 +4264 2 2 1 1 1076 2185 1998 +4265 2 2 1 1 969 2028 1016 +4266 2 2 1 1 1279 1938 1276 +4267 2 2 1 1 752 2108 750 +4268 2 2 1 1 2141 2196 2140 +4269 2 2 1 1 1201 1853 1850 +4270 2 2 1 1 1915 2106 1240 +4271 2 2 1 1 1403 2131 2130 +4272 2 2 1 1 1026 2243 2242 +4273 2 2 1 1 1247 2191 1845 +4274 2 2 1 1 1137 1939 1133 +4275 2 2 1 1 1366 1940 1367 +4276 2 2 1 1 2070 2200 1201 +4277 2 2 1 1 1022 2068 1731 +4278 2 2 1 1 1957 2124 1103 +4279 2 2 1 1 2058 2059 689 +4280 2 2 1 1 1157 1976 1787 +4281 2 2 1 1 2177 2178 727 +4282 2 2 1 1 647 1975 1959 +4283 2 2 1 1 2161 2288 986 +4284 2 2 1 1 1886 2019 1199 +4285 2 2 1 1 1874 2255 1084 +4286 2 2 1 1 745 2284 2146 +4287 2 2 1 1 1884 1975 648 +4288 2 2 1 1 830 1983 833 +4289 2 2 1 1 1603 2141 2140 +4290 2 2 1 1 1841 2213 910 +4291 2 2 1 1 689 2217 2058 +4292 2 2 1 1 861 2112 863 +4293 2 2 1 1 874 2113 876 +4294 2 2 1 1 878 2114 880 +4295 2 2 1 1 2164 2242 2241 +4296 2 2 1 1 1064 2314 2299 +4297 2 2 1 1 891 2116 894 +4298 2 2 1 1 1186 2253 1924 +4299 2 2 1 1 1933 2035 555 +4300 2 2 1 1 1064 2299 1955 +4301 2 2 1 1 1166 2000 1789 +4302 2 2 1 1 1204 2175 1993 +4303 2 2 1 1 1017 2023 1804 +4304 2 2 1 1 551 2266 1934 +4305 2 2 1 1 1847 2278 1178 +4306 2 2 1 1 1862 2003 651 +4307 2 2 1 1 983 2118 985 +4308 2 2 1 1 2269 2316 944 +4309 2 2 1 1 952 2210 2209 +4310 2 2 1 1 945 1999 949 +4311 2 2 1 1 1211 2119 760 +4312 2 2 1 1 1928 2053 627 +4313 2 2 1 1 1405 2106 1915 +4314 2 2 1 1 992 2121 1012 +4315 2 2 1 1 2115 2136 909 +4316 2 2 1 1 2075 2088 1032 +4317 2 2 1 1 1515 2310 1512 +4318 2 2 1 1 2076 2077 1041 +4319 2 2 1 1 1021 2269 2156 +4320 2 2 1 1 1991 2026 1036 +4321 2 2 1 1 910 2323 2244 +4322 2 2 1 1 1957 2177 2124 +4323 2 2 1 1 1023 2078 2065 +4324 2 2 1 1 1993 1994 1992 +4325 2 2 1 1 991 2289 2159 +4326 2 2 1 1 667 2304 2208 +4327 2 2 1 1 2213 2323 910 +4328 2 2 1 1 1352 2269 1021 +4329 2 2 1 1 1390 2228 1385 +4330 2 2 1 1 803 2226 804 +4331 2 2 1 1 1102 2227 1101 +4332 2 2 1 1 1718 2229 1289 +4333 2 2 1 1 1413 2230 1415 +4334 2 2 1 1 620 2057 1215 +4335 2 2 1 1 1511 2298 1948 +4336 2 2 1 1 1107 2227 1102 +4337 2 2 1 1 762 2096 2024 +4338 2 2 1 1 2033 2280 817 +4339 2 2 1 1 2058 2217 691 +4340 2 2 1 1 2130 2131 1405 +4341 2 2 1 1 804 2226 809 +4342 2 2 1 1 838 2326 1942 +4343 2 2 1 1 715 2300 1967 +4344 2 2 1 1 1203 2110 1152 +4345 2 2 1 1 1377 2259 1376 +4346 2 2 1 1 2024 2096 753 +4347 2 2 1 1 664 2176 1795 +4348 2 2 1 1 754 2109 2034 +4349 2 2 1 1 2145 2167 743 +4350 2 2 1 1 1746 1986 1985 +4351 2 2 1 1 780 2120 1738 +4352 2 2 1 1 2145 2284 738 +4353 2 2 1 1 959 2132 1073 +4354 2 2 1 1 755 2117 2046 +4355 2 2 1 1 678 2013 2012 +4356 2 2 1 1 1730 2256 2100 +4357 2 2 1 1 2208 2304 644 +4358 2 2 1 1 1197 1849 1797 +4359 2 2 1 1 1653 2202 1956 +4360 2 2 1 1 1174 2276 1945 +4361 2 2 1 1 1918 2123 835 +4362 2 2 1 1 770 1959 1861 +4363 2 2 1 1 2111 2247 1069 +4364 2 2 1 1 2034 2109 749 +4365 2 2 1 1 2125 2308 1331 +4366 2 2 1 1 2000 2302 1163 +4367 2 2 1 1 873 2273 1963 +4368 2 2 1 1 1572 2247 2111 +4369 2 2 1 1 2070 2276 1172 +4370 2 2 1 1 567 2207 615 +4371 2 2 1 1 1084 2047 1874 +4372 2 2 1 1 2148 2176 628 +4373 2 2 1 1 2046 2117 751 +4374 2 2 1 1 563 2204 633 +4375 2 2 1 1 2056 2225 1093 +4376 2 2 1 1 2068 2184 961 +4377 2 2 1 1 644 2304 2087 +4378 2 2 1 1 1920 2184 958 +4379 2 2 1 1 820 2067 812 +4380 2 2 1 1 2100 2256 663 +4381 2 2 1 1 559 2162 640 +4382 2 2 1 1 1934 2266 682 +4383 2 2 1 1 1034 2293 1940 +4384 2 2 1 1 1342 2271 2021 +4385 2 2 1 1 2164 2241 1686 +4386 2 2 1 1 1041 2061 921 +4387 2 2 1 1 1431 2297 1981 +4388 2 2 1 1 939 2047 942 +4389 2 2 1 1 784 2162 557 +4390 2 2 1 1 1094 2056 1857 +4391 2 2 1 1 904 2063 900 +4392 2 2 1 1 1513 2298 1511 +4393 2 2 1 1 639 2186 2151 +4394 2 2 1 1 560 2192 1913 +4395 2 2 1 1 767 2231 758 +4396 2 2 1 1 1032 2074 928 +4397 2 2 1 1 1468 2291 1987 +4398 2 2 1 1 1008 2215 2159 +4399 2 2 1 1 1790 2103 2102 +4400 2 2 1 1 756 2260 2146 +4401 2 2 1 1 2011 2076 917 +4402 2 2 1 1 2087 2304 763 +4403 2 2 1 1 1861 2264 770 +4404 2 2 1 1 1850 2069 1201 +4405 2 2 1 1 557 2162 559 +4406 2 2 1 1 1898 2105 2042 +4407 2 2 1 1 662 2280 2144 +4408 2 2 1 1 555 2183 1973 +4409 2 2 1 1 1487 2220 1812 +4410 2 2 1 1 1522 2219 1844 +4411 2 2 1 1 1314 2214 1833 +4412 2 2 1 1 1715 2213 1841 +4413 2 2 1 1 1475 2212 1814 +4414 2 2 1 1 2161 2270 1007 +4415 2 2 1 1 953 2246 1984 +4416 2 2 1 1 1671 2305 2043 +4417 2 2 1 1 1199 2083 1886 +4418 2 2 1 1 1215 2057 616 +4419 2 2 1 1 1275 2224 1821 +4420 2 2 1 1 814 2067 823 +4421 2 2 1 1 682 2035 1933 +4422 2 2 1 1 2144 2280 2033 +4423 2 2 1 1 930 2074 934 +4424 2 2 1 1 926 2075 1032 +4425 2 2 1 1 740 2178 2177 +4426 2 2 1 1 919 2076 1041 +4427 2 2 1 1 905 2081 914 +4428 2 2 1 1 1926 2287 756 +4429 2 2 1 1 2045 2307 856 +4430 2 2 1 1 763 2108 752 +4431 2 2 1 1 999 2008 1821 +4432 2 2 1 1 2093 2250 957 +4433 2 2 1 1 863 2112 867 +4434 2 2 1 1 876 2113 886 +4435 2 2 1 1 880 2114 885 +4436 2 2 1 1 894 2116 897 +4437 2 2 1 1 1949 2259 1548 +4438 2 2 1 1 985 2118 988 +4439 2 2 1 1 1012 2121 1089 +4440 2 2 1 1 1812 2221 1819 +4441 2 2 1 1 1163 2190 2000 +4442 2 2 1 1 1205 2094 2036 +4443 2 2 1 1 1968 1989 1198 +4444 2 2 1 1 1036 2112 861 +4445 2 2 1 1 2196 2233 927 +4446 2 2 1 1 561 2204 563 +4447 2 2 1 1 1037 2113 874 +4448 2 2 1 1 2026 2148 628 +4449 2 2 1 1 886 2114 878 +4450 2 2 1 1 1756 2116 891 +4451 2 2 1 1 565 2207 567 +4452 2 2 1 1 1058 2118 983 +4453 2 2 1 1 760 2119 763 +4454 2 2 1 1 1042 2121 992 +4455 2 2 1 1 2103 2191 1247 +4456 2 2 1 1 1991 2148 2026 +4457 2 2 1 1 1042 2258 2121 +4458 2 2 1 1 2142 2166 1352 +4459 2 2 1 1 1023 2064 1971 +4460 2 2 1 1 1971 1972 1023 +4461 2 2 1 1 2294 2305 844 +4462 2 2 1 1 2244 2325 910 +4463 2 2 1 1 1972 2078 1023 +4464 2 2 1 1 2092 2211 1278 +4465 2 2 1 1 1278 2211 1279 +4466 2 2 1 1 2236 2319 1005 +4467 2 2 1 1 2234 2321 1018 +4468 2 2 1 1 1416 2230 1413 +4469 2 2 1 1 1289 2229 1754 +4470 2 2 1 1 1101 2227 1957 +4471 2 2 1 1 1385 2228 1387 +4472 2 2 1 1 806 2226 803 +4473 2 2 1 1 2049 2050 1010 +4474 2 2 1 1 778 2264 2120 +4475 2 2 1 1 1041 2265 2061 +4476 2 2 1 1 818 2060 1822 +4477 2 2 1 1 1723 2219 1522 +4478 2 2 1 1 1941 2220 1487 +4479 2 2 1 1 2168 2169 973 +4480 2 2 1 1 854 2148 1991 +4481 2 2 1 1 1367 2293 2091 +4482 2 2 1 1 564 2144 2033 +4483 2 2 1 1 1192 2295 1935 +4484 2 2 1 1 1982 2153 1005 +4485 2 2 1 1 1010 2251 2049 +4486 2 2 1 1 2120 2264 779 +4487 2 2 1 1 890 2306 2242 +4488 2 2 1 1 2061 2075 923 +4489 2 2 1 1 1644 2261 1647 +4490 2 2 1 1 1795 2148 854 +4491 2 2 1 1 2077 2265 1041 +4492 2 2 1 1 755 2014 1939 +4493 2 2 1 1 2063 2081 902 +4494 2 2 1 1 986 2270 2161 +4495 2 2 1 1 1923 2180 904 +4496 2 2 1 1 734 2194 2181 +4497 2 2 1 1 1970 2096 762 +4498 2 2 1 1 1856 2323 2213 +4499 2 2 1 1 1885 2280 662 +4500 2 2 1 1 1938 2224 1275 +4501 2 2 1 1 1086 2246 951 +4502 2 2 1 1 1933 2212 1475 +4503 2 2 1 1 1944 2214 1314 +4504 2 2 1 1 1856 2213 1715 +4505 2 2 1 1 1814 2212 1973 +4506 2 2 1 1 823 2186 1876 +4507 2 2 1 1 2146 2260 745 +4508 2 2 1 1 951 2246 953 +4509 2 2 1 1 2059 2081 2063 +4510 2 2 1 1 2209 2210 955 +4511 2 2 1 1 640 2204 561 +4512 2 2 1 1 2035 2266 552 +4513 2 2 1 1 633 2207 565 +4514 2 2 1 1 1166 2302 2000 +4515 2 2 1 1 2124 2177 741 +4516 2 2 1 1 2155 2171 622 +4517 2 2 1 1 901 2323 2136 +4518 2 2 1 1 758 2231 764 +4519 2 2 1 1 833 2256 1730 +4520 2 2 1 1 1376 2259 1949 +4521 2 2 1 1 1857 2261 1644 +4522 2 2 1 1 692 2216 1996 +4523 2 2 1 1 2176 2206 628 +4524 2 2 1 1 817 2280 1885 +4525 2 2 1 1 2242 2243 890 +4526 2 2 1 1 2085 2180 1923 +4527 2 2 1 1 2159 2215 991 +4528 2 2 1 1 1937 2093 957 +4529 2 2 1 1 740 2177 1957 +4530 2 2 1 1 751 2109 2046 +4531 2 2 1 1 1957 2227 740 +4532 2 2 1 1 753 2117 2024 +4533 2 2 1 1 1940 2293 1367 +4534 2 2 1 1 663 2312 2100 +4535 2 2 1 1 1821 2224 999 +4536 2 2 1 1 644 2087 2086 +4537 2 2 1 1 899 2136 2115 +4538 2 2 1 1 2156 2269 944 +4539 2 2 1 1 2067 2186 823 +4540 2 2 1 1 749 2260 2034 +4541 2 2 1 1 1199 2252 2083 +4542 2 2 1 1 860 2090 2072 +4543 2 2 1 1 2183 2291 674 +4544 2 2 1 1 2088 2265 694 +4545 2 2 1 1 738 2167 2145 +4546 2 2 1 1 2099 2100 632 +4547 2 2 1 1 1973 2212 555 +4548 2 2 1 1 2245 2249 836 +4549 2 2 1 1 1788 2220 1941 +4550 2 2 1 1 1983 2256 833 +4551 2 2 1 1 1924 2253 1176 +4552 2 2 1 1 835 2249 2245 +4553 2 2 1 1 690 2268 2217 +4554 2 2 1 1 2080 2257 650 +4555 2 2 1 1 895 2225 2056 +4556 2 2 1 1 1945 2187 1174 +4557 2 2 1 1 2220 2221 1812 +4558 2 2 1 1 2166 2269 1352 +4559 2 2 1 1 2171 2322 617 +4560 2 2 1 1 2091 2293 2209 +4561 2 2 1 1 2311 2312 663 +4562 2 2 1 1 1172 2200 2070 +4563 2 2 1 1 1998 2185 1075 +4564 2 2 1 1 1078 2316 2166 +4565 2 2 1 1 570 2313 2312 +4566 2 2 1 1 2209 2293 1034 +4567 2 2 1 1 2091 2209 955 +4568 2 2 1 1 927 2197 2196 +4569 2 2 1 1 616 2322 2171 +4570 2 2 1 1 925 2321 2234 +4571 2 2 1 1 920 2319 2236 +4572 2 2 1 1 903 2325 2244 +4573 2 2 1 1 1987 2291 556 +4574 2 2 1 1 1248 2191 2103 +4575 2 2 1 1 2244 2323 901 +4576 2 2 1 1 1093 2261 1857 +4577 2 2 1 1 556 2291 2183 +4578 2 2 1 1 570 2312 2311 +4579 2 2 1 1 2029 2266 551 +4580 2 2 1 1 726 768 724 +4581 2 2 1 1 730 1736 728 +4582 2 2 1 1 1825 2158 757 +4583 2 2 1 1 911 2011 915 +4584 2 2 1 1 988 990 987 +4585 2 2 1 1 1001 2005 1549 +4586 2 2 1 1 1135 1137 1132 +4587 2 2 1 1 1144 1970 1142 +4588 2 2 1 1 1150 1191 1148 +4589 2 2 1 1 1164 1190 1162 +4590 2 2 1 1 1173 1204 1171 +4591 2 2 1 1 1177 1210 1175 +4592 2 2 1 1 1181 1182 1179 +4593 2 2 1 1 1238 1789 1236 +4594 2 2 1 1 1332 1334 1330 +4595 2 2 1 1 1731 1792 1359 +4596 2 2 1 1 1599 2228 1390 +4597 2 2 1 1 1759 1830 1500 +4598 2 2 1 1 1803 1988 1704 +4599 2 2 2 2 3672 4026 3411 +4600 2 2 2 2 3210 3216 2409 +4601 2 2 2 2 3208 3216 3210 +4602 2 2 2 2 3005 3064 3003 +4603 2 2 2 2 2628 3664 2630 +4604 2 2 2 2 3298 3326 3295 +4605 2 2 2 2 3607 3732 3311 +4606 2 2 2 2 2942 3104 2939 +4607 2 2 2 2 2647 3995 2633 +4608 2 2 2 2 3639 3924 3125 +4609 2 2 2 2 2911 3075 2909 +4610 2 2 2 2 2334 3403 3213 +4611 2 2 2 2 3074 3737 2963 +4612 2 2 2 2 2414 3327 3326 +4613 2 2 2 2 2812 3864 2532 +4614 2 2 2 2 2526 2831 2806 +4615 2 2 2 2 2672 3609 2388 +4616 2 2 2 2 2947 4025 2944 +4617 2 2 2 2 2783 4138 2734 +4618 2 2 2 2 2966 3423 3072 +4619 2 2 2 2 2721 3552 2814 +4620 2 2 2 2 3000 3071 2998 +4621 2 2 2 2 3078 3588 3077 +4622 2 2 2 2 2460 3895 2544 +4623 2 2 2 2 2904 3924 2903 +4624 2 2 2 2 2558 3936 3856 +4625 2 2 2 2 3044 3429 2884 +4626 2 2 2 2 3298 3728 3326 +4627 2 2 2 2 2394 2663 51 +4628 2 2 2 2 2718 4000 2719 +4629 2 2 2 2 2630 3664 2418 +4630 2 2 2 2 2693 2809 2695 +4631 2 2 2 2 2695 2805 2697 +4632 2 2 2 2 2635 2649 2633 +4633 2 2 2 2 2480 4055 2517 +4634 2 2 2 2 2720 2797 2794 +4635 2 2 2 2 2800 2813 2799 +4636 2 2 2 2 2916 3077 2914 +4637 2 2 2 2 2944 4025 3047 +4638 2 2 2 2 3112 3709 3167 +4639 2 2 2 2 2896 4043 2893 +4640 2 2 2 2 2990 2995 2992 +4641 2 2 2 2 2524 4030 3663 +4642 2 2 2 2 3300 3768 2373 +4643 2 2 2 2 2982 3085 2980 +4644 2 2 2 2 2836 3933 3275 +4645 2 2 2 2 2373 3717 3300 +4646 2 2 2 2 2448 2650 2569 +4647 2 2 2 2 2646 4184 2880 +4648 2 2 2 2 2797 2814 2794 +4649 2 2 2 2 3525 3595 3521 +4650 2 2 2 2 3122 3247 3077 +4651 2 2 2 2 2809 4076 2352 +4652 2 2 2 2 2642 4181 2850 +4653 2 2 2 2 2693 3831 2810 +4654 2 2 2 2 3928 3934 2834 +4655 2 2 2 2 2963 3737 2962 +4656 2 2 2 2 3109 3602 3269 +4657 2 2 2 2 2352 3800 2809 +4658 2 2 2 2 2873 3836 2627 +4659 2 2 2 2 2741 2787 2772 +4660 2 2 2 2 3268 3654 3271 +4661 2 2 2 2 3126 3128 2971 +4662 2 2 2 2 2987 3088 2985 +4663 2 2 2 2 2966 3072 2963 +4664 2 2 2 2 2763 2787 2745 +4665 2 2 2 2 3314 3315 3311 +4666 2 2 2 2 3167 3847 3112 +4667 2 2 2 2 2749 2791 2763 +4668 2 2 2 2 2911 4185 3075 +4669 2 2 2 2 2734 3611 2783 +4670 2 2 2 2 2633 3995 2632 +4671 2 2 2 2 2513 4030 2518 +4672 2 2 2 2 3007 3931 3059 +4673 2 2 2 2 2470 3756 2560 +4674 2 2 2 2 2729 2799 2732 +4675 2 2 2 2 2760 2793 2780 +4676 2 2 2 2 2872 2873 2627 +4677 2 2 2 2 2505 3954 2608 +4678 2 2 2 2 2473 4045 2516 +4679 2 2 2 2 2539 3921 2540 +4680 2 2 2 2 3266 3654 3268 +4681 2 2 2 2 2448 2569 2450 +4682 2 2 2 2 2906 3091 2904 +4683 2 2 2 2 2817 3319 3317 +4684 2 2 2 2 3730 3839 3622 +4685 2 2 2 2 2936 3112 2931 +4686 2 2 2 2 3928 4189 2839 +4687 2 2 2 2 3628 3883 2630 +4688 2 2 2 2 3125 3924 3431 +4689 2 2 2 2 3082 3083 3080 +4690 2 2 2 2 3080 3867 3753 +4691 2 2 2 2 2729 2800 2799 +4692 2 2 2 2 3059 4144 3007 +4693 2 2 2 2 2570 2661 2660 +4694 2 2 2 2 3851 3996 3067 +4695 2 2 2 2 2903 4075 2904 +4696 2 2 2 2 3267 3286 3265 +4697 2 2 2 2 2685 2798 2687 +4698 2 2 2 2 2895 2896 2893 +4699 2 2 2 2 2449 3722 2447 +4700 2 2 2 2 3208 3210 3049 +4701 2 2 2 2 3080 3753 3078 +4702 2 2 2 2 2604 2837 2603 +4703 2 2 2 2 2418 3628 2630 +4704 2 2 2 2 2424 2651 2650 +4705 2 2 2 2 2890 4019 2889 +4706 2 2 2 2 2720 2794 2723 +4707 2 2 2 2 3525 4107 2766 +4708 2 2 2 2 2885 3044 2884 +4709 2 2 2 2 2532 3969 2689 +4710 2 2 2 2 2959 4068 2958 +4711 2 2 2 2 3091 3715 3092 +4712 2 2 2 2 3219 3223 3221 +4713 2 2 2 2 3093 3997 2616 +4714 2 2 2 2 2551 3371 3222 +4715 2 2 2 2 2703 3857 2792 +4716 2 2 2 2 3367 3368 3057 +4717 2 2 2 2 2503 3903 2537 +4718 2 2 2 2 2957 3779 3178 +4719 2 2 2 2 2916 3078 3077 +4720 2 2 2 2 2951 4188 2950 +4721 2 2 2 2 2944 4027 2943 +4722 2 2 2 2 2830 4015 3221 +4723 2 2 2 2 2509 4062 2601 +4724 2 2 2 2 3276 3291 3273 +4725 2 2 2 2 2463 2527 2525 +4726 2 2 2 2 2525 2588 2459 +4727 2 2 2 2 2588 2593 2455 +4728 2 2 2 2 3377 3789 3376 +4729 2 2 2 2 3311 3732 3308 +4730 2 2 2 2 2840 3654 3269 +4731 2 2 2 2 2753 3843 2751 +4732 2 2 2 2 3315 3607 3311 +4733 2 2 2 2 2735 3830 2733 +4734 2 2 2 2 3322 3323 3320 +4735 2 2 2 2 2662 2664 2562 +4736 2 2 2 2 2806 2831 2724 +4737 2 2 2 2 2404 4164 3718 +4738 2 2 2 2 3281 3594 3278 +4739 2 2 2 2 2945 2947 2944 +4740 2 2 2 2 3351 3783 3350 +4741 2 2 2 2 3213 4067 2334 +4742 2 2 2 2 2394 3366 2664 +4743 2 2 2 2 2615 4120 2616 +4744 2 2 2 2 2632 4102 2633 +4745 2 2 2 2 3820 4127 3803 +4746 2 2 2 2 2652 3653 3632 +4747 2 2 2 2 2712 3624 2804 +4748 2 2 2 2 2814 3552 2794 +4749 2 2 2 2 3091 3092 2904 +4750 2 2 2 2 2895 4084 2896 +4751 2 2 2 2 3316 3922 3315 +4752 2 2 2 2 3072 4161 2963 +4753 2 2 2 2 3077 3247 2914 +4754 2 2 2 2 3284 3833 3281 +4755 2 2 2 2 2591 2623 2496 +4756 2 2 2 2 3288 3290 3284 +4757 2 2 2 2 3248 3253 2359 +4758 2 2 2 2 3249 3253 3248 +4759 2 2 2 2 3269 3602 2840 +4760 2 2 2 2 3064 4083 3003 +4761 2 2 2 2 3300 3309 3298 +4762 2 2 2 2 2703 2792 2704 +4763 2 2 2 2 3776 3863 3320 +4764 2 2 2 2 4104 4155 2754 +4765 2 2 2 2 2643 3712 2644 +4766 2 2 2 2 3584 3771 3486 +4767 2 2 2 2 2388 3844 2672 +4768 2 2 2 2 2712 2804 2713 +4769 2 2 2 2 2522 4038 2523 +4770 2 2 2 2 2921 3804 3081 +4771 2 2 2 2 2624 4163 2625 +4772 2 2 2 2 2617 3853 3758 +4773 2 2 2 2 3299 3300 3298 +4774 2 2 2 2 3632 3653 2442 +4775 2 2 2 2 2697 3638 2795 +4776 2 2 2 2 2601 4130 2603 +4777 2 2 2 2 3043 3403 3401 +4778 2 2 2 2 2788 3558 3531 +4779 2 2 2 2 3313 3945 3324 +4780 2 2 2 2 2404 3718 3427 +4781 2 2 2 2 2616 3997 3100 +4782 2 2 2 2 2649 3701 2633 +4783 2 2 2 2 3304 3305 3301 +4784 2 2 2 2 3314 3316 3315 +4785 2 2 2 2 2561 3739 2807 +4786 2 2 2 2 3075 3896 2909 +4787 2 2 2 2 2598 2619 2506 +4788 2 2 2 2 3382 4025 3095 +4789 2 2 2 2 2496 3614 2591 +4790 2 2 2 2 51 2663 50 +4791 2 2 2 2 2541 4097 2614 +4792 2 2 2 2 2569 3583 2570 +4793 2 2 2 2 3738 3882 3829 +4794 2 2 2 2 3568 4172 2774 +4795 2 2 2 2 2650 2652 2424 +4796 2 2 2 2 3060 3747 3048 +4797 2 2 2 2 3610 4048 2595 +4798 2 2 2 2 2688 3831 2693 +4799 2 2 2 2 3084 3640 2995 +4800 2 2 2 2 2660 2662 2562 +4801 2 2 2 2 2506 2620 2598 +4802 2 2 2 2 3043 4094 3215 +4803 2 2 2 2 2658 3405 2444 +4804 2 2 2 2 2570 2660 2452 +4805 2 2 2 2 415 3227 416 +4806 2 2 2 2 2810 2811 2809 +4807 2 2 2 2 2958 4040 2952 +4808 2 2 2 2 3178 3180 2957 +4809 2 2 2 2 2962 4105 2961 +4810 2 2 2 2 2719 3967 2720 +4811 2 2 2 2 2943 4027 2942 +4812 2 2 2 2 3320 3863 3318 +4813 2 2 2 2 3186 4033 3055 +4814 2 2 2 2 3272 3325 3270 +4815 2 2 2 2 2851 3702 3120 +4816 2 2 2 2 2517 3882 2480 +4817 2 2 2 2 2661 2663 2662 +4818 2 2 2 2 3814 3846 3813 +4819 2 2 2 2 3213 3403 3215 +4820 2 2 2 2 2834 4061 2604 +4821 2 2 2 2 3022 3849 3024 +4822 2 2 2 2 2513 2518 2514 +4823 2 2 2 2 2523 4133 2528 +4824 2 2 2 2 2605 2841 2536 +4825 2 2 2 2 2661 2662 2660 +4826 2 2 2 2 2537 3921 2539 +4827 2 2 2 2 2881 4132 2880 +4828 2 2 2 2 2394 4125 2663 +4829 2 2 2 2 2540 4086 2541 +4830 2 2 2 2 2556 3228 3226 +4831 2 2 2 2 3592 3778 2798 +4832 2 2 2 2 3286 3777 3593 +4833 2 2 2 2 3440 3442 2437 +4834 2 2 2 2 3070 3640 3106 +4835 2 2 2 2 2450 2570 2452 +4836 2 2 2 2 2437 3441 3440 +4837 2 2 2 2 2848 2851 2849 +4838 2 2 2 2 2468 4108 2531 +4839 2 2 2 2 3057 3369 3367 +4840 2 2 2 2 2644 2881 2880 +4841 2 2 2 2 3626 3957 3372 +4842 2 2 2 2 2811 4076 2809 +4843 2 2 2 2 3077 3767 3122 +4844 2 2 2 2 3221 3968 2830 +4845 2 2 2 2 3085 3898 2980 +4846 2 2 2 2 3297 3298 3295 +4847 2 2 2 2 3212 3214 3213 +4848 2 2 2 2 2519 4030 2513 +4849 2 2 2 2 2569 2570 2450 +4850 2 2 2 2 3288 3797 3746 +4851 2 2 2 2 2625 3670 2624 +4852 2 2 2 2 2518 4038 2522 +4853 2 2 2 2 3110 4153 3263 +4854 2 2 2 2 2646 2879 2878 +4855 2 2 2 2 2603 2841 2605 +4856 2 2 2 2 2490 2605 2536 +4857 2 2 2 2 2614 4120 2615 +4858 2 2 2 2 3804 4113 2972 +4859 2 2 2 2 2664 3366 3346 +4860 2 2 2 2 3811 3857 3451 +4861 2 2 2 2 3089 4083 3905 +4862 2 2 2 2 2487 2605 2490 +4863 2 2 2 2 3300 3717 3309 +4864 2 2 2 2 2798 3778 2687 +4865 2 2 2 2 3267 3777 3286 +4866 2 2 2 2 3047 4026 2944 +4867 2 2 2 2 2441 3443 3441 +4868 2 2 2 2 3050 3390 3337 +4869 2 2 2 2 2851 3658 2849 +4870 2 2 2 2 2633 3701 2647 +4871 2 2 2 2 3739 4057 2526 +4872 2 2 2 2 2650 2651 2569 +4873 2 2 2 2 3120 3658 2851 +4874 2 2 2 2 2716 4000 2718 +4875 2 2 2 2 2541 2614 2592 +4876 2 2 2 2 2526 2832 2831 +4877 2 2 2 2 3031 4151 3687 +4878 2 2 2 2 3265 3334 3262 +4879 2 2 2 2 2681 2843 2685 +4880 2 2 2 2 2982 4177 3085 +4881 2 2 2 2 2782 3561 3455 +4882 2 2 2 2 2458 3895 2460 +4883 2 2 2 2 2961 2963 2962 +4884 2 2 2 2 2659 3405 2658 +4885 2 2 2 2 2533 2825 2824 +4886 2 2 2 2 2952 4040 2951 +4887 2 2 2 2 3275 3328 2836 +4888 2 2 2 2 2826 3761 2691 +4889 2 2 2 2 168 3862 3717 +4890 2 2 2 2 2611 2612 2415 +4891 2 2 2 2 2662 4125 2664 +4892 2 2 2 2 2664 4125 2394 +4893 2 2 2 2 2711 3876 3811 +4894 2 2 2 2 4031 4074 2728 +4895 2 2 2 2 3351 3781 3046 +4896 2 2 2 2 2815 3738 2801 +4897 2 2 2 2 2544 2828 2460 +4898 2 2 2 2 2449 4009 3722 +4899 2 2 2 2 3326 3327 3294 +4900 2 2 2 2 2460 3983 2462 +4901 2 2 2 2 3285 3288 3284 +4902 2 2 2 2 2830 3837 2826 +4903 2 2 2 2 2594 3827 2610 +4904 2 2 2 2 2821 2833 2601 +4905 2 2 2 2 3282 3284 3281 +4906 2 2 2 2 3305 3768 3301 +4907 2 2 2 2 3071 3618 2998 +4908 2 2 2 2 2697 2795 2698 +4909 2 2 2 2 2689 2812 2532 +4910 2 2 2 2 3280 3281 3278 +4911 2 2 2 2 3221 4124 3219 +4912 2 2 2 2 2966 3858 3423 +4913 2 2 2 2 2693 2810 2809 +4914 2 2 2 2 3528 3529 3315 +4915 2 2 2 2 2391 4048 3610 +4916 2 2 2 2 2942 4064 3104 +4917 2 2 2 2 2695 2697 2696 +4918 2 2 2 2 2614 3941 3084 +4919 2 2 2 2 3007 4144 3005 +4920 2 2 2 2 3321 3501 3322 +4921 2 2 2 2 2601 2603 2509 +4922 2 2 2 2 3294 4080 3293 +4923 2 2 2 2 2452 3845 2454 +4924 2 2 2 2 415 3961 3227 +4925 2 2 2 2 3529 3607 3315 +4926 2 2 2 2 2807 3906 2561 +4927 2 2 2 2 3755 3782 3354 +4928 2 2 2 2 2645 3827 3724 +4929 2 2 2 2 3212 3213 3038 +4930 2 2 2 2 2540 2541 2539 +4931 2 2 2 2 2752 4104 2754 +4932 2 2 2 2 2671 3609 2672 +4933 2 2 2 2 2693 2695 2694 +4934 2 2 2 2 3215 3403 3043 +4935 2 2 2 2 3211 4158 3212 +4936 2 2 2 2 2719 2720 2718 +4937 2 2 2 2 3499 3774 3500 +4938 2 2 2 2 2468 3756 2470 +4939 2 2 2 2 2884 4051 2883 +4940 2 2 2 2 2529 3901 2528 +4941 2 2 2 2 2889 4019 2887 +4942 2 2 2 2 3059 3398 3395 +4943 2 2 2 2 3270 3777 3267 +4944 2 2 2 2 3655 3800 2352 +4945 2 2 2 2 3724 3901 2622 +4946 2 2 2 2 2627 3836 2626 +4947 2 2 2 2 3104 3899 2939 +4948 2 2 2 2 2820 3945 3313 +4949 2 2 2 2 2891 4137 2890 +4950 2 2 2 2 2734 4138 2736 +4951 2 2 2 2 2957 4026 3672 +4952 2 2 2 2 2969 4157 3929 +4953 2 2 2 2 3304 3306 3305 +4954 2 2 2 2 2480 3882 2600 +4955 2 2 2 2 2414 4041 3327 +4956 2 2 2 2 2478 4055 2480 +4957 2 2 2 2 2510 3954 2505 +4958 2 2 2 2 2528 2621 2594 +4959 2 2 2 2 3337 3725 3050 +4960 2 2 2 2 3095 4025 3989 +4961 2 2 2 2 3394 3905 3064 +4962 2 2 2 2 2805 3800 3655 +4963 2 2 2 2 2941 2942 2939 +4964 2 2 2 2 2710 4079 2712 +4965 2 2 2 2 3079 3080 3078 +4966 2 2 2 2 3271 3654 3274 +4967 2 2 2 2 3806 3896 3599 +4968 2 2 2 2 3624 3942 2804 +4969 2 2 2 2 2810 3784 2811 +4970 2 2 2 2 2708 4006 2709 +4971 2 2 2 2 2386 3436 3192 +4972 2 2 2 2 3081 3082 3080 +4973 2 2 2 2 3056 3623 3099 +4974 2 2 2 2 2888 4118 3598 +4975 2 2 2 2 2781 3773 3500 +4976 2 2 2 2 2938 3965 2937 +4977 2 2 2 2 3087 4177 3805 +4978 2 2 2 2 3092 3924 2904 +4979 2 2 2 2 242 3823 3666 +4980 2 2 2 2 2936 3709 3112 +4981 2 2 2 2 2523 2528 2522 +4982 2 2 2 2 2897 4084 2895 +4983 2 2 2 2 3561 3603 3531 +4984 2 2 2 2 2709 4079 2710 +4985 2 2 2 2 2615 4163 2624 +4986 2 2 2 2 2880 4077 2879 +4987 2 2 2 2 3707 4168 2776 +4988 2 2 2 2 2536 3903 2503 +4989 2 2 2 2 3566 3705 2764 +4990 2 2 2 2 2600 4062 2509 +4991 2 2 2 2 2751 3843 2791 +4992 2 2 2 2 384 2606 385 +4993 2 2 2 2 3441 3826 2441 +4994 2 2 2 2 2883 4051 2882 +4995 2 2 2 2 2893 4043 2902 +4996 2 2 2 2 2764 4173 3568 +4997 2 2 2 2 2794 3553 2723 +4998 2 2 2 2 3146 3825 3748 +4999 2 2 2 2 3717 3862 3309 +5000 2 2 2 2 2723 3888 2725 +5001 2 2 2 2 2716 3839 2790 +5002 2 2 2 2 2516 4045 2619 +5003 2 2 2 2 3291 4164 3272 +5004 2 2 2 2 3295 3326 3294 +5005 2 2 2 2 2835 4003 2837 +5006 2 2 2 2 334 3369 333 +5007 2 2 2 2 2967 3801 2975 +5008 2 2 2 2 2559 3626 3372 +5009 2 2 2 2 2790 3839 3730 +5010 2 2 2 2 3356 4047 3792 +5011 2 2 2 2 2733 3830 2785 +5012 2 2 2 2 3114 3115 2625 +5013 2 2 2 2 2635 3596 2649 +5014 2 2 2 2 3404 3405 2659 +5015 2 2 2 2 3209 3990 3948 +5016 2 2 2 2 2937 3965 2936 +5017 2 2 2 2 2551 3372 3371 +5018 2 2 2 2 2537 2539 2503 +5019 2 2 2 2 3812 4079 2796 +5020 2 2 2 2 2939 3899 2938 +5021 2 2 2 2 2409 3976 3210 +5022 2 2 2 2 3434 3762 2789 +5023 2 2 2 2 3049 3209 3208 +5024 2 2 2 2 2847 3684 2642 +5025 2 2 2 2 2834 4189 3928 +5026 2 2 2 2 3929 4040 2969 +5027 2 2 2 2 2837 4003 2838 +5028 2 2 2 2 2702 4109 2703 +5029 2 2 2 2 3085 3824 3408 +5030 2 2 2 2 4138 4156 2788 +5031 2 2 2 2 3084 4120 2614 +5032 2 2 2 2 2952 2959 2958 +5033 2 2 2 2 3301 3768 3300 +5034 2 2 2 2 3326 3728 2414 +5035 2 2 2 2 3756 3821 3803 +5036 2 2 2 2 3253 3254 2359 +5037 2 2 2 2 2827 2830 2826 +5038 2 2 2 2 2570 3999 2661 +5039 2 2 2 2 3288 3746 3290 +5040 2 2 2 2 2810 3860 3784 +5041 2 2 2 2 2837 2841 2603 +5042 2 2 2 2 2807 3872 2785 +5043 2 2 2 2 2950 4188 2948 +5044 2 2 2 2 2720 3967 2797 +5045 2 2 2 2 3547 3812 2796 +5046 2 2 2 2 3746 3797 2338 +5047 2 2 2 2 3287 3667 3427 +5048 2 2 2 2 3290 3746 174 +5049 2 2 2 2 402 3765 3716 +5050 2 2 2 2 3792 4047 3039 +5051 2 2 2 2 2446 3653 2652 +5052 2 2 2 2 3221 4015 2829 +5053 2 2 2 2 2965 3801 2967 +5054 2 2 2 2 2518 2522 2514 +5055 2 2 2 2 2899 3851 2897 +5056 2 2 2 2 3445 3765 2387 +5057 2 2 2 2 2482 2600 2509 +5058 2 2 2 2 2616 4163 2615 +5059 2 2 2 2 2971 3639 3126 +5060 2 2 2 2 2948 3989 2947 +5061 2 2 2 2 2968 3858 2966 +5062 2 2 2 2 3220 4124 2829 +5063 2 2 2 2 2889 2891 2890 +5064 2 2 2 2 2796 3938 3547 +5065 2 2 2 2 3000 3615 3071 +5066 2 2 2 2 2792 3857 3811 +5067 2 2 2 2 3086 4177 2982 +5068 2 2 2 2 2614 2615 2592 +5069 2 2 2 2 3442 3446 2586 +5070 2 2 2 2 2556 3770 3228 +5071 2 2 2 2 3089 4087 4083 +5072 2 2 2 2 3269 3654 3266 +5073 2 2 2 2 3029 3799 3187 +5074 2 2 2 2 2880 4184 2644 +5075 2 2 2 2 3154 3156 2969 +5076 2 2 2 2 3099 4004 3375 +5077 2 2 2 2 3214 4067 3213 +5078 2 2 2 2 3317 3324 2817 +5079 2 2 2 2 3271 3272 3270 +5080 2 2 2 2 3531 3603 2788 +5081 2 2 2 2 3003 4083 3065 +5082 2 2 2 2 3268 3270 3267 +5083 2 2 2 2 3436 3879 3192 +5084 2 2 2 2 2963 4161 3074 +5085 2 2 2 2 3322 3635 3323 +5086 2 2 2 2 2484 2605 2487 +5087 2 2 2 2 2625 3801 3114 +5088 2 2 2 2 2603 4130 2604 +5089 2 2 2 2 2446 3958 2448 +5090 2 2 2 2 3266 3267 3265 +5091 2 2 2 2 2685 2687 2686 +5092 2 2 2 2 3056 4137 2891 +5093 2 2 2 2 2536 2841 2538 +5094 2 2 2 2 3331 3962 3325 +5095 2 2 2 2 3113 3846 3814 +5096 2 2 2 2 2769 4155 3625 +5097 2 2 2 2 2969 3726 3154 +5098 2 2 2 2 3064 4144 3396 +5099 2 2 2 2 3273 3291 3272 +5100 2 2 2 2 3350 3783 3066 +5101 2 2 2 2 3405 3641 2444 +5102 2 2 2 2 2581 2620 2579 +5103 2 2 2 2 3718 4160 3287 +5104 2 2 2 2 3088 3825 2985 +5105 2 2 2 2 3427 3718 3287 +5106 2 2 2 2 2712 2713 2710 +5107 2 2 2 2 2496 3758 2497 +5108 2 2 2 2 155 3775 3634 +5109 2 2 2 2 2934 2936 2931 +5110 2 2 2 2 3274 3654 3328 +5111 2 2 2 2 2975 3101 3100 +5112 2 2 2 2 3440 3446 3442 +5113 2 2 2 2 2532 3864 2464 +5114 2 2 2 2 3048 3848 3060 +5115 2 2 2 2 3762 4109 2789 +5116 2 2 2 2 2950 2952 2951 +5117 2 2 2 2 2598 2620 2581 +5118 2 2 2 2 2588 4066 2593 +5119 2 2 2 2 3276 3718 3291 +5120 2 2 2 2 2712 3812 3624 +5121 2 2 2 2 2701 4109 2702 +5122 2 2 2 2 3053 3850 3733 +5123 2 2 2 2 3072 3423 3422 +5124 2 2 2 2 2814 3668 2721 +5125 2 2 2 2 174 4058 3290 +5126 2 2 2 2 2663 4125 2662 +5127 2 2 2 2 2469 3868 2467 +5128 2 2 2 2 2596 3754 2657 +5129 2 2 2 2 2961 4105 2959 +5130 2 2 2 2 3331 4117 3962 +5131 2 2 2 2 2833 2834 2604 +5132 2 2 2 2 2505 2513 2511 +5133 2 2 2 2 3422 4029 3072 +5134 2 2 2 2 2480 2600 2482 +5135 2 2 2 2 3275 3276 3273 +5136 2 2 2 2 2975 3801 3101 +5137 2 2 2 2 3212 3828 3214 +5138 2 2 2 2 2688 2693 2692 +5139 2 2 2 2 2819 4176 2821 +5140 2 2 2 2 2464 4081 2532 +5141 2 2 2 2 2524 4038 2518 +5142 2 2 2 2 2850 4181 2637 +5143 2 2 2 2 3039 3908 3792 +5144 2 2 2 2 2528 3901 2621 +5145 2 2 2 2 3837 3968 2427 +5146 2 2 2 2 3101 4163 2616 +5147 2 2 2 2 3223 3627 3221 +5148 2 2 2 2 3005 4144 3064 +5149 2 2 2 2 3306 3953 3305 +5150 2 2 2 2 3318 3794 3316 +5151 2 2 2 2 2782 3603 3561 +5152 2 2 2 2 2983 3980 2982 +5153 2 2 2 2 2610 3827 3629 +5154 2 2 2 2 2623 3758 2496 +5155 2 2 2 2 3024 3849 3053 +5156 2 2 2 2 3082 4194 3083 +5157 2 2 2 2 2518 4030 2524 +5158 2 2 2 2 3856 4108 2558 +5159 2 2 2 2 2641 2851 2848 +5160 2 2 2 2 2466 4108 2468 +5161 2 2 2 2 3513 3768 3305 +5162 2 2 2 2 3666 3823 3087 +5163 2 2 2 2 3297 3299 3298 +5164 2 2 2 2 2604 4061 2835 +5165 2 2 2 2 3104 4064 3180 +5166 2 2 2 2 2796 4079 3838 +5167 2 2 2 2 2709 2710 2708 +5168 2 2 2 2 2737 3830 2735 +5169 2 2 2 2 2539 3614 2503 +5170 2 2 2 2 3012 4059 3011 +5171 2 2 2 2 2415 2654 2611 +5172 2 2 2 2 3411 4026 3935 +5173 2 2 2 2 2825 2828 2827 +5174 2 2 2 2 3811 3876 2792 +5175 2 2 2 2 3013 4059 3012 +5176 2 2 2 2 2727 4031 2729 +5177 2 2 2 2 3376 3789 3069 +5178 2 2 2 2 2809 3800 2695 +5179 2 2 2 2 2454 4129 2456 +5180 2 2 2 2 3103 4077 2880 +5181 2 2 2 2 3948 3990 3055 +5182 2 2 2 2 2905 2906 2904 +5183 2 2 2 2 3681 3899 3105 +5184 2 2 2 2 3038 4146 3211 +5185 2 2 2 2 2769 3595 3525 +5186 2 2 2 2 2985 3980 2983 +5187 2 2 2 2 2513 3764 2519 +5188 2 2 2 2 2825 2826 2691 +5189 2 2 2 2 2445 3653 2446 +5190 2 2 2 2 3252 3792 2974 +5191 2 2 2 2 2755 3843 2753 +5192 2 2 2 2 333 3369 2354 +5193 2 2 2 2 3367 3369 334 +5194 2 2 2 2 3191 3697 3041 +5195 2 2 2 2 3733 3850 3600 +5196 2 2 2 2 3265 3890 3334 +5197 2 2 2 2 2843 3891 2685 +5198 2 2 2 2 3799 4012 3194 +5199 2 2 2 2 2987 3749 3088 +5200 2 2 2 2 4153 4159 3263 +5201 2 2 2 2 3293 4080 3289 +5202 2 2 2 2 3762 3857 2703 +5203 2 2 2 2 2629 3866 2627 +5204 2 2 2 2 2799 3637 2732 +5205 2 2 2 2 2821 4176 2822 +5206 2 2 2 2 2805 3991 2697 +5207 2 2 2 2 3771 3795 3772 +5208 2 2 2 2 2528 4133 2529 +5209 2 2 2 2 3718 4164 3291 +5210 2 2 2 2 3236 3688 3031 +5211 2 2 2 2 2910 2911 2909 +5212 2 2 2 2 3131 3132 3067 +5213 2 2 2 2 2915 2916 2914 +5214 2 2 2 2 3348 3618 3230 +5215 2 2 2 2 386 2654 387 +5216 2 2 2 2 3046 3783 3351 +5217 2 2 2 2 3493 3513 3305 +5218 2 2 2 2 2981 2982 2980 +5219 2 2 2 2 2713 3839 2716 +5220 2 2 2 2 2897 3851 3067 +5221 2 2 2 2 3885 3891 2356 +5222 2 2 2 2 2407 3890 3884 +5223 2 2 2 2 3111 4120 3084 +5224 2 2 2 2 2533 2828 2825 +5225 2 2 2 2 2986 2987 2985 +5226 2 2 2 2 2881 2883 2882 +5227 2 2 2 2 2906 3788 3091 +5228 2 2 2 2 2591 3614 2539 +5229 2 2 2 2 2659 3689 3404 +5230 2 2 2 2 3308 3731 3306 +5231 2 2 2 2 3591 4104 2764 +5232 2 2 2 2 3600 3850 2538 +5233 2 2 2 2 2861 3995 2860 +5234 2 2 2 2 2764 3705 3465 +5235 2 2 2 2 2616 3111 3093 +5236 2 2 2 2 2432 3879 3435 +5237 2 2 2 2 2999 3000 2998 +5238 2 2 2 2 3709 3965 2954 +5239 2 2 2 2 2921 4113 3804 +5240 2 2 2 2 3004 3005 3003 +5241 2 2 2 2 2921 3832 2919 +5242 2 2 2 2 3006 3007 3005 +5243 2 2 2 2 2646 2880 2879 +5244 2 2 2 2 2527 2611 2525 +5245 2 2 2 2 3228 3770 2422 +5246 2 2 2 2 2885 3789 3044 +5247 2 2 2 2 2883 2885 2884 +5248 2 2 2 2 2648 3883 3628 +5249 2 2 2 2 3766 3996 3851 +5250 2 2 2 2 2627 3866 2872 +5251 2 2 2 2 2878 3098 2646 +5252 2 2 2 2 3064 3396 3394 +5253 2 2 2 2 3395 3396 3059 +5254 2 2 2 2 2490 2536 2503 +5255 2 2 2 2 3112 4001 2931 +5256 2 2 2 2 3187 3798 3340 +5257 2 2 2 2 2525 2653 2588 +5258 2 2 2 2 3519 3526 3523 +5259 2 2 2 2 3179 3181 3176 +5260 2 2 2 2 3165 3169 3168 +5261 2 2 2 2 2870 2874 2867 +5262 2 2 2 2 2849 2852 2846 +5263 2 2 2 2 3063 3119 2877 +5264 2 2 2 2 2859 2864 2862 +5265 2 2 2 2 2690 2842 2679 +5266 2 2 2 2 3296 4123 3332 +5267 2 2 2 2 2641 3098 2851 +5268 2 2 2 2 3212 3976 3828 +5269 2 2 2 2 3278 4160 3277 +5270 2 2 2 2 2695 3800 2805 +5271 2 2 2 2 3744 3995 2861 +5272 2 2 2 2 3603 4192 2788 +5273 2 2 2 2 3713 3723 3438 +5274 2 2 2 2 3716 3765 2589 +5275 2 2 2 2 3264 3265 3262 +5276 2 2 2 2 2681 2685 2684 +5277 2 2 2 2 2803 3774 3499 +5278 2 2 2 2 2500 2510 2505 +5279 2 2 2 2 2711 3554 3450 +5280 2 2 2 2 3838 3938 2796 +5281 2 2 2 2 3372 3957 3371 +5282 2 2 2 2 3323 3776 3320 +5283 2 2 2 2 3665 4110 2521 +5284 2 2 2 2 2712 4079 3812 +5285 2 2 2 2 2389 3721 2618 +5286 2 2 2 2 2811 3784 73 +5287 2 2 2 2 2903 3924 3639 +5288 2 2 2 2 3040 4012 3799 +5289 2 2 2 2 2729 2732 2730 +5290 2 2 2 2 2789 3601 3434 +5291 2 2 2 2 3947 4136 4105 +5292 2 2 2 2 2561 4071 2474 +5293 2 2 2 2 3588 3767 3077 +5294 2 2 2 2 3055 3915 3186 +5295 2 2 2 2 3317 3318 3316 +5296 2 2 2 2 2902 3975 2893 +5297 2 2 2 2 3229 3230 3071 +5298 2 2 2 2 3115 3670 2625 +5299 2 2 2 2 3328 3654 2840 +5300 2 2 2 2 3272 3331 3325 +5301 2 2 2 2 3009 4094 3008 +5302 2 2 2 2 3117 3735 3116 +5303 2 2 2 2 3211 3212 3038 +5304 2 2 2 2 2945 2948 2947 +5305 2 2 2 2 2978 4111 2976 +5306 2 2 2 2 3508 3988 3625 +5307 2 2 2 2 2750 4172 3568 +5308 2 2 2 2 2801 3738 2770 +5309 2 2 2 2 3536 3553 3552 +5310 2 2 2 2 3098 3702 2851 +5311 2 2 2 2 3770 4088 2422 +5312 2 2 2 2 3033 4149 3693 +5313 2 2 2 2 3340 4042 3187 +5314 2 2 2 2 2826 3902 3761 +5315 2 2 2 2 2615 2624 2617 +5316 2 2 2 2 3299 3301 3300 +5317 2 2 2 2 2734 2736 2735 +5318 2 2 2 2 3633 3814 2932 +5319 2 2 2 2 3073 3896 3806 +5320 2 2 2 2 2943 2945 2944 +5321 2 2 2 2 3008 4094 3007 +5322 2 2 2 2 3277 4160 3276 +5323 2 2 2 2 3323 3635 3634 +5324 2 2 2 2 3068 3782 3755 +5325 2 2 2 2 2974 3959 3251 +5326 2 2 2 2 3634 3775 3323 +5327 2 2 2 2 2837 3600 2841 +5328 2 2 2 2 3100 3101 2616 +5329 2 2 2 2 3435 3855 2432 +5330 2 2 2 2 3805 4177 3086 +5331 2 2 2 2 3090 3852 3045 +5332 2 2 2 2 2706 4006 2708 +5333 2 2 2 2 3319 3320 3318 +5334 2 2 2 2 2516 3868 2469 +5335 2 2 2 2 2538 3903 2536 +5336 2 2 2 2 3321 3322 3320 +5337 2 2 2 2 2634 2635 2633 +5338 2 2 2 2 2841 3600 2538 +5339 2 2 2 2 2589 3765 3445 +5340 2 2 2 2 2990 3084 2995 +5341 2 2 2 2 3215 4094 3009 +5342 2 2 2 2 2513 2514 2511 +5343 2 2 2 2 2893 3975 2891 +5344 2 2 2 2 2531 3756 2468 +5345 2 2 2 2 2595 4048 2596 +5346 2 2 2 2 3261 3685 3110 +5347 2 2 2 2 3001 3886 3000 +5348 2 2 2 2 2505 4082 2513 +5349 2 2 2 2 2815 2818 2602 +5350 2 2 2 2 3046 3781 3354 +5351 2 2 2 2 3256 3791 3252 +5352 2 2 2 2 2711 4006 3876 +5353 2 2 2 2 3065 4087 3143 +5354 2 2 2 2 2752 2754 2753 +5355 2 2 2 2 3348 3350 3066 +5356 2 2 2 2 2766 3913 3525 +5357 2 2 2 2 2930 3960 2928 +5358 2 2 2 2 2856 3596 2855 +5359 2 2 2 2 2560 4056 2470 +5360 2 2 2 2 2657 3859 2596 +5361 2 2 2 2 4015 4119 2829 +5362 2 2 2 2 3072 4029 3097 +5363 2 2 2 2 73 4076 2811 +5364 2 2 2 2 2787 3714 2772 +5365 2 2 2 2 3215 4146 3038 +5366 2 2 2 2 2763 3587 2787 +5367 2 2 2 2 4092 4111 2977 +5368 2 2 2 2 2791 2808 2763 +5369 2 2 2 2 2878 3702 3098 +5370 2 2 2 2 2928 3960 2927 +5371 2 2 2 2 3425 3750 3740 +5372 2 2 2 2 2703 2704 2702 +5373 2 2 2 2 2975 4092 2968 +5374 2 2 2 2 3087 3805 3666 +5375 2 2 2 2 2485 2667 2656 +5376 2 2 2 2 3429 3671 2884 +5377 2 2 2 2 2882 4132 2881 +5378 2 2 2 2 2927 3910 2926 +5379 2 2 2 2 3003 3886 3001 +5380 2 2 2 2 2424 4103 2651 +5381 2 2 2 2 3151 3683 3094 +5382 2 2 2 2 2727 4074 4031 +5383 2 2 2 2 2608 4082 2505 +5384 2 2 2 2 3224 3837 2427 +5385 2 2 2 2 3799 3889 3040 +5386 2 2 2 2 3114 3801 2965 +5387 2 2 2 2 2456 3940 2457 +5388 2 2 2 2 2601 3636 2821 +5389 2 2 2 2 2941 2943 2942 +5390 2 2 2 2 3031 3687 3236 +5391 2 2 2 2 2464 3864 2466 +5392 2 2 2 2 3598 4118 3981 +5393 2 2 2 2 3867 3911 2920 +5394 2 2 2 2 2919 3832 2917 +5395 2 2 2 2 2642 2850 2847 +5396 2 2 2 2 3568 4173 2750 +5397 2 2 2 2 3683 3907 3094 +5398 2 2 2 2 3327 3589 3294 +5399 2 2 2 2 2912 3861 2911 +5400 2 2 2 2 3609 3621 408 +5401 2 2 2 2 2925 4112 2924 +5402 2 2 2 2 3098 4116 2646 +5403 2 2 2 2 3312 3922 3794 +5404 2 2 2 2 2926 3910 2925 +5405 2 2 2 2 3741 4178 3068 +5406 2 2 2 2 2474 3887 2561 +5407 2 2 2 2 3293 3295 3294 +5408 2 2 2 2 2798 3891 3885 +5409 2 2 2 2 3884 3890 3286 +5410 2 2 2 2 2914 3861 2912 +5411 2 2 2 2 2619 4045 2506 +5412 2 2 2 2 2789 4109 4099 +5413 2 2 2 2 2923 4113 2922 +5414 2 2 2 2 3585 3818 3491 +5415 2 2 2 2 3254 3814 3633 +5416 2 2 2 2 3758 3853 2510 +5417 2 2 2 2 3646 3759 2403 +5418 2 2 2 2 3642 3761 2370 +5419 2 2 2 2 2793 3829 2780 +5420 2 2 2 2 3356 3792 3791 +5421 2 2 2 2 2557 2676 2666 +5422 2 2 2 2 3102 3763 2542 +5423 2 2 2 2 3165 3168 3167 +5424 2 2 2 2 3178 3179 3176 +5425 2 2 2 2 3519 3523 3522 +5426 2 2 2 2 2879 3063 2877 +5427 2 2 2 2 2859 2862 2861 +5428 2 2 2 2 2682 2690 2679 +5429 2 2 2 2 2869 2870 2867 +5430 2 2 2 2 2848 2849 2846 +5431 2 2 2 2 2474 4110 2475 +5432 2 2 2 2 3905 4083 3064 +5433 2 2 2 2 3134 3631 3132 +5434 2 2 2 2 3516 3611 3560 +5435 2 2 2 2 3128 3766 2971 +5436 2 2 2 2 3056 3975 3742 +5437 2 2 2 2 3226 3855 2556 +5438 2 2 2 2 2638 4135 2637 +5439 2 2 2 2 2618 4093 2389 +5440 2 2 2 2 2924 4112 2923 +5441 2 2 2 2 2701 2702 2700 +5442 2 2 2 2 3272 4164 3331 +5443 2 2 2 2 2620 3608 2579 +5444 2 2 2 2 3724 3827 2621 +5445 2 2 2 2 2482 2509 2484 +5446 2 2 2 2 2652 3632 2424 +5447 2 2 2 2 2544 4119 2828 +5448 2 2 2 2 3252 4078 3256 +5449 2 2 2 2 3695 3696 3242 +5450 2 2 2 2 3748 3825 3088 +5451 2 2 2 2 2637 4135 2850 +5452 2 2 2 2 3460 3720 3637 +5453 2 2 2 2 2922 4113 2921 +5454 2 2 2 2 2542 3921 3752 +5455 2 2 2 2 2887 4141 2885 +5456 2 2 2 2 2387 3985 3445 +5457 2 2 2 2 3457 3979 2790 +5458 2 2 2 2 3060 4114 3747 +5459 2 2 2 2 3788 4191 3073 +5460 2 2 2 2 3289 3797 3288 +5461 2 2 2 2 3500 3774 2781 +5462 2 2 2 2 3092 3923 3431 +5463 2 2 2 2 3110 3699 3698 +5464 2 2 2 2 2543 4097 4086 +5465 2 2 2 2 2773 4155 4104 +5466 2 2 2 2 2472 3887 2474 +5467 2 2 2 2 2685 3891 2798 +5468 2 2 2 2 3286 3890 3265 +5469 2 2 2 2 2904 4075 2901 +5470 2 2 2 2 2472 4057 3739 +5471 2 2 2 2 2639 4135 2638 +5472 2 2 2 2 3067 4084 2897 +5473 2 2 2 2 3325 3962 2337 +5474 2 2 2 2 3020 3849 3022 +5475 2 2 2 2 3054 3984 3616 +5476 2 2 2 2 2617 3758 2623 +5477 2 2 2 2 3016 3916 3015 +5478 2 2 2 2 2437 3826 3441 +5479 2 2 2 2 2764 3568 3566 +5480 2 2 2 2 3680 3681 3105 +5481 2 2 2 2 3516 3555 2783 +5482 2 2 2 2 3698 3699 3191 +5483 2 2 2 2 3027 3854 3763 +5484 2 2 2 2 3375 4005 3099 +5485 2 2 2 2 2931 4001 2930 +5486 2 2 2 2 2898 2899 2897 +5487 2 2 2 2 2965 2966 2963 +5488 2 2 2 2 2666 2676 2512 +5489 2 2 2 2 2557 2666 2585 +5490 2 2 2 2 2656 3608 2485 +5491 2 2 2 2 2462 4081 2463 +5492 2 2 2 2 2790 3730 3457 +5493 2 2 2 2 2976 4092 2975 +5494 2 2 2 2 2593 4066 2606 +5495 2 2 2 2 2544 3669 2829 +5496 2 2 2 2 2481 2667 2485 +5497 2 2 2 2 2779 4073 2725 +5498 2 2 2 2 2629 3963 2640 +5499 2 2 2 2 2640 3866 2629 +5500 2 2 2 2 2968 4091 3037 +5501 2 2 2 2 3408 3898 3085 +5502 2 2 2 2 2838 3602 3108 +5503 2 2 2 2 2423 3723 3713 +5504 2 2 2 2 3058 4028 3780 +5505 2 2 2 2 2979 3943 2978 +5506 2 2 2 2 3808 3894 2894 +5507 2 2 2 2 2917 3079 2916 +5508 2 2 2 2 2850 4135 2641 +5509 2 2 2 2 2967 2968 2966 +5510 2 2 2 2 3925 4101 3577 +5511 2 2 2 2 3242 3694 3032 +5512 2 2 2 2 2700 4100 2701 +5513 2 2 2 2 3057 4051 3671 +5514 2 2 2 2 3676 4167 2778 +5515 2 2 2 2 3687 4151 3025 +5516 2 2 2 2 2790 4000 2716 +5517 2 2 2 2 3017 3916 3016 +5518 2 2 2 2 3802 4099 3904 +5519 2 2 2 2 406 2665 2388 +5520 2 2 2 2 2980 3943 2979 +5521 2 2 2 2 2870 3759 3646 +5522 2 2 2 2 2690 3761 3642 +5523 2 2 2 2 3450 3938 3838 +5524 2 2 2 2 2891 3975 3056 +5525 2 2 2 2 2820 3313 3310 +5526 2 2 2 2 140 3526 2341 +5527 2 2 2 2 2401 3181 274 +5528 2 2 2 2 283 3169 2328 +5529 2 2 2 2 2419 2874 357 +5530 2 2 2 2 2366 2852 343 +5531 2 2 2 2 2355 3119 338 +5532 2 2 2 2 352 2864 2381 +5533 2 2 2 2 2431 2842 66 +5534 2 2 2 2 3874 3914 419 +5535 2 2 2 2 405 2665 406 +5536 2 2 2 2 4083 4087 3065 +5537 2 2 2 2 3307 3308 3306 +5538 2 2 2 2 2412 3660 3649 +5539 2 2 2 2 3648 3659 2329 +5540 2 2 2 2 3645 3658 2433 +5541 2 2 2 2 3644 3657 2398 +5542 2 2 2 2 2671 3621 3609 +5543 2 2 2 2 3662 3747 2524 +5544 2 2 2 2 3187 4034 3029 +5545 2 2 2 2 2892 3809 2894 +5546 2 2 2 2 3814 4050 3113 +5547 2 2 2 2 3269 4159 3109 +5548 2 2 2 2 3230 3618 3071 +5549 2 2 2 2 3196 3623 3056 +5550 2 2 2 2 2364 4023 3727 +5551 2 2 2 2 2476 3998 2478 +5552 2 2 2 2 3803 4127 2560 +5553 2 2 2 2 3045 3852 3670 +5554 2 2 2 2 3608 3674 2485 +5555 2 2 2 2 141 3526 140 +5556 2 2 2 2 2341 3526 3519 +5557 2 2 2 2 2328 3169 3165 +5558 2 2 2 2 284 3169 283 +5559 2 2 2 2 3176 3181 2401 +5560 2 2 2 2 274 3181 273 +5561 2 2 2 2 2867 2874 2419 +5562 2 2 2 2 357 2874 356 +5563 2 2 2 2 2846 2852 2366 +5564 2 2 2 2 343 2852 342 +5565 2 2 2 2 2877 3119 2355 +5566 2 2 2 2 338 3119 337 +5567 2 2 2 2 2381 2864 2859 +5568 2 2 2 2 353 2864 352 +5569 2 2 2 2 2679 2842 2431 +5570 2 2 2 2 66 2842 65 +5571 2 2 2 2 3552 3553 2794 +5572 2 2 2 2 2501 3437 2667 +5573 2 2 2 2 2441 3651 3443 +5574 2 2 2 2 2657 2666 2512 +5575 2 2 2 2 3214 3828 215 +5576 2 2 2 2 2667 3437 2656 +5577 2 2 2 2 4086 4097 2541 +5578 2 2 2 2 2661 3769 2663 +5579 2 2 2 2 2774 4172 3707 +5580 2 2 2 2 2501 2667 2483 +5581 2 2 2 2 2782 4165 3603 +5582 2 2 2 2 3254 3633 2359 +5583 2 2 2 2 3743 3893 2384 +5584 2 2 2 2 2720 2723 2722 +5585 2 2 2 2 2971 3851 2899 +5586 2 2 2 2 2501 3579 3437 +5587 2 2 2 2 2488 3578 2668 +5588 2 2 2 2 2668 3579 2501 +5589 2 2 2 2 2668 3578 2565 +5590 2 2 2 2 2488 2668 2486 +5591 2 2 2 2 2549 3578 2547 +5592 2 2 2 2 2547 3578 2669 +5593 2 2 2 2 2508 2669 2492 +5594 2 2 2 2 2565 3578 2549 +5595 2 2 2 2 2547 2669 2508 +5596 2 2 2 2 2492 2669 2489 +5597 2 2 2 2 2672 2675 2550 +5598 2 2 2 2 2550 2674 2670 +5599 2 2 2 2 2670 2672 2550 +5600 2 2 2 2 2520 2674 2507 +5601 2 2 2 2 2507 2674 2673 +5602 2 2 2 2 2670 2674 2520 +5603 2 2 2 2 2545 2674 2550 +5604 2 2 2 2 2673 2674 2545 +5605 2 2 2 2 2494 2673 2545 +5606 2 2 2 2 2507 2673 2498 +5607 2 2 2 2 2498 2673 2495 +5608 2 2 2 2 2548 2675 2590 +5609 2 2 2 2 2546 2675 2548 +5610 2 2 2 2 2393 3137 3136 +5611 2 2 2 2 2429 3196 3139 +5612 2 2 2 2 322 3135 321 +5613 2 2 2 2 2393 3136 3135 +5614 2 2 2 2 2405 3241 3240 +5615 2 2 2 2 3244 3432 3203 +5616 2 2 2 2 2405 3240 3239 +5617 2 2 2 2 197 3239 196 +5618 2 2 2 2 324 3138 323 +5619 2 2 2 2 321 3135 3133 +5620 2 2 2 2 199 3243 198 +5621 2 2 2 2 2393 3135 322 +5622 2 2 2 2 2429 3139 3138 +5623 2 2 2 2 2405 3239 197 +5624 2 2 2 2 3243 3432 3244 +5625 2 2 2 2 196 3239 3237 +5626 2 2 2 2 2854 3414 3365 +5627 2 2 2 2 321 3133 320 +5628 2 2 2 2 2350 3132 3131 +5629 2 2 2 2 2429 3138 324 +5630 2 2 2 2 187 3333 2407 +5631 2 2 2 2 2328 3164 3163 +5632 2 2 2 2 323 3138 2393 +5633 2 2 2 2 2428 3129 3128 +5634 2 2 2 2 2350 3131 3130 +5635 2 2 2 2 196 3237 195 +5636 2 2 2 2 2328 3165 3164 +5637 2 2 2 2 201 3201 2358 +5638 2 2 2 2 2328 3163 282 +5639 2 2 2 2 275 3174 2401 +5640 2 2 2 2 2409 3216 213 +5641 2 2 2 2 2428 3128 3127 +5642 2 2 2 2 319 3130 318 +5643 2 2 2 2 232 3352 231 +5644 2 2 2 2 198 3243 2405 +5645 2 2 2 2 188 3333 187 +5646 2 2 2 2 52 3366 2394 +5647 2 2 2 2 3260 3334 3333 +5648 2 2 2 2 2365 3362 3361 +5649 2 2 2 2 199 3432 3243 +5650 2 2 2 2 2350 3130 319 +5651 2 2 2 2 232 3353 3352 +5652 2 2 2 2 3390 3392 3337 +5653 2 2 2 2 3153 3156 3154 +5654 2 2 2 2 217 3402 2334 +5655 2 2 2 2 2365 3361 297 +5656 2 2 2 2 3383 3386 3381 +5657 2 2 2 2 282 3163 281 +5658 2 2 2 2 3363 3448 3364 +5659 2 2 2 2 317 3127 316 +5660 2 2 2 2 2336 3234 3233 +5661 2 2 2 2 3173 3175 3174 +5662 2 2 2 2 3365 3414 2378 +5663 2 2 2 2 3200 3202 3201 +5664 2 2 2 2 2964 3422 3421 +5665 2 2 2 2 2428 3127 317 +5666 2 2 2 2 202 3201 201 +5667 2 2 2 2 2964 3421 252 +5668 2 2 2 2 2393 3138 3137 +5669 2 2 2 2 2336 3233 194 +5670 2 2 2 2 320 3133 2350 +5671 2 2 2 2 2676 3430 2512 +5672 2 2 2 2 276 3174 275 +5673 2 2 2 2 3259 3333 188 +5674 2 2 2 2 3174 3175 2401 +5675 2 2 2 2 330 3433 2396 +5676 2 2 2 2 3402 3403 2334 +5677 2 2 2 2 2435 3448 3363 +5678 2 2 2 2 3333 3334 2407 +5679 2 2 2 2 3201 3202 2358 +5680 2 2 2 2 2399 3350 3349 +5681 2 2 2 2 2344 3256 292 +5682 2 2 2 2 2336 3235 3234 +5683 2 2 2 2 2329 3410 3409 +5684 2 2 2 2 213 3216 212 +5685 2 2 2 2 53 3366 52 +5686 2 2 2 2 3384 3409 3385 +5687 2 2 2 2 270 3409 3384 +5688 2 2 2 2 2356 2677 68 +5689 2 2 2 2 206 3340 2335 +5690 2 2 2 2 189 3259 188 +5691 2 2 2 2 195 3237 2336 +5692 2 2 2 2 281 3163 3161 +5693 2 2 2 2 2677 2843 2678 +5694 2 2 2 2 261 3153 2330 +5695 2 2 2 2 3336 3392 259 +5696 2 2 2 2 2405 3243 3241 +5697 2 2 2 2 3199 3201 202 +5698 2 2 2 2 3401 3403 3402 +5699 2 2 2 2 297 3361 296 +5700 2 2 2 2 327 3374 2353 +5701 2 2 2 2 2399 3351 3350 +5702 2 2 2 2 231 3352 2399 +5703 2 2 2 2 2913 3121 304 +5704 2 2 2 2 3172 3174 276 +5705 2 2 2 2 344 2844 2366 +5706 2 2 2 2 281 3161 280 +5707 2 2 2 2 2358 3432 200 +5708 2 2 2 2 3345 3366 53 +5709 2 2 2 2 2360 3353 233 +5710 2 2 2 2 318 3130 2428 +5711 2 2 2 2 291 3256 3255 +5712 2 2 2 2 3152 3153 262 +5713 2 2 2 2 2399 3349 230 +5714 2 2 2 2 316 3127 2380 +5715 2 2 2 2 3152 3156 3153 +5716 2 2 2 2 3395 3398 3397 +5717 2 2 2 2 2356 2843 2677 +5718 2 2 2 2 203 3199 202 +5719 2 2 2 2 258 3392 2397 +5720 2 2 2 2 244 3407 2361 +5721 2 2 2 2 212 3216 3207 +5722 2 2 2 2 2392 3123 78 +5723 2 2 2 2 3430 3444 2502 +5724 2 2 2 2 277 3172 276 +5725 2 2 2 2 2433 2875 340 +5726 2 2 2 2 2370 3224 63 +5727 2 2 2 2 252 3421 251 +5728 2 2 2 2 3409 3410 3385 +5729 2 2 2 2 3153 3154 2330 +5730 2 2 2 2 3417 3424 3415 +5731 2 2 2 2 225 3144 224 +5732 2 2 2 2 2345 3338 302 +5733 2 2 2 2 3378 3386 267 +5734 2 2 2 2 3395 3397 3393 +5735 2 2 2 2 218 3402 217 +5736 2 2 2 2 3393 3397 221 +5737 2 2 2 2 307 3182 2379 +5738 2 2 2 2 2396 3433 3377 +5739 2 2 2 2 194 3233 193 +5740 2 2 2 2 3415 3424 248 +5741 2 2 2 2 212 3207 211 +5742 2 2 2 2 263 3152 262 +5743 2 2 2 2 3339 3340 207 +5744 2 2 2 2 3337 3392 3336 +5745 2 2 2 2 2913 3122 3121 +5746 2 2 2 2 2844 2845 2366 +5747 2 2 2 2 3381 3386 3378 +5748 2 2 2 2 2369 3147 265 +5749 2 2 2 2 2397 3388 257 +5750 2 2 2 2 291 3255 290 +5751 2 2 2 2 2955 3157 279 +5752 2 2 2 2 3407 3408 2361 +5753 2 2 2 2 3203 3432 2358 +5754 2 2 2 2 234 3140 2360 +5755 2 2 2 2 2397 3392 3390 +5756 2 2 2 2 305 3245 2913 +5757 2 2 2 2 2844 2853 2845 +5758 2 2 2 2 237 3426 3425 +5759 2 2 2 2 176 3335 3279 +5760 2 2 2 2 226 3141 3002 +5761 2 2 2 2 239 3145 2332 +5762 2 2 2 2 2362 3183 210 +5763 2 2 2 2 2433 3120 2875 +5764 2 2 2 2 2335 3193 205 +5765 2 2 2 2 190 3188 2367 +5766 2 2 2 2 411 3192 2432 +5767 2 2 2 2 2381 2857 351 +5768 2 2 2 2 2432 3225 412 +5769 2 2 2 2 233 3353 232 +5770 2 2 2 2 68 2677 67 +5771 2 2 2 2 292 3256 291 +5772 2 2 2 2 2380 3124 315 +5773 2 2 2 2 2345 3588 3338 +5774 2 2 2 2 2929 3248 289 +5775 2 2 2 2 2369 3148 3147 +5776 2 2 2 2 2946 3341 313 +5777 2 2 2 2 2397 3389 3388 +5778 2 2 2 2 2369 3386 3383 +5779 2 2 2 2 2955 3158 3157 +5780 2 2 2 2 3412 3413 310 +5781 2 2 2 2 2360 3354 3353 +5782 2 2 2 2 2350 3133 3132 +5783 2 2 2 2 346 3414 2426 +5784 2 2 2 2 3141 3142 3002 +5785 2 2 2 2 2381 2858 2857 +5786 2 2 2 2 2362 3205 3183 +5787 2 2 2 2 2973 3355 294 +5788 2 2 2 2 2335 3194 3193 +5789 2 2 2 2 3245 3246 2913 +5790 2 2 2 2 296 3361 3359 +5791 2 2 2 2 2913 3246 3122 +5792 2 2 2 2 3188 3257 2367 +5793 2 2 2 2 2380 3125 3124 +5794 2 2 2 2 2426 3414 2854 +5795 2 2 2 2 2929 3249 3248 +5796 2 2 2 2 236 3425 2988 +5797 2 2 2 2 2367 3259 189 +5798 2 2 2 2 208 3339 207 +5799 2 2 2 2 3347 3349 3348 +5800 2 2 2 2 207 3340 206 +5801 2 2 2 2 219 3400 218 +5802 2 2 2 2 280 3161 2955 +5803 2 2 2 2 3373 3374 328 +5804 2 2 2 2 255 3387 2364 +5805 2 2 2 2 3400 3402 218 +5806 2 2 2 2 2371 3217 58 +5807 2 2 2 2 2371 3218 3217 +5808 2 2 2 2 3373 3376 3375 +5809 2 2 2 2 259 3392 258 +5810 2 2 2 2 2676 3444 3430 +5811 2 2 2 2 2973 3357 3355 +5812 2 2 2 2 270 3384 269 +5813 2 2 2 2 2353 3195 326 +5814 2 2 2 2 2865 2866 2419 +5815 2 2 2 2 54 3345 53 +5816 2 2 2 2 3157 3170 2363 +5817 2 2 2 2 262 3153 261 +5818 2 2 2 2 2875 3120 2876 +5819 2 2 2 2 3042 3231 3190 +5820 2 2 2 2 260 3336 259 +5821 2 2 2 2 3342 3343 2382 +5822 2 2 2 2 3349 3350 3348 +5823 2 2 2 2 2428 3130 3129 +5824 2 2 2 2 3034 3199 203 +5825 2 2 2 2 403 2389 404 +5826 2 2 2 2 358 2865 2419 +5827 2 2 2 2 331 3433 330 +5828 2 2 2 2 55 3342 2382 +5829 2 2 2 2 304 3121 303 +5830 2 2 2 2 3355 3357 3356 +5831 2 2 2 2 2333 3347 3230 +5832 2 2 2 2 3363 3364 2378 +5833 2 2 2 2 3002 3144 225 +5834 2 2 2 2 3231 3232 3190 +5835 2 2 2 2 251 3421 3419 +5836 2 2 2 2 2499 3430 2502 +5837 2 2 2 2 396 2441 397 +5838 2 2 2 2 3170 3171 2363 +5839 2 2 2 2 328 3374 327 +5840 2 2 2 2 173 2338 172 +5841 2 2 2 2 3217 3370 2434 +5842 2 2 2 2 67 2677 2431 +5843 2 2 2 2 2363 3172 277 +5844 2 2 2 2 2953 3152 263 +5845 2 2 2 2 211 3207 2362 +5846 2 2 2 2 3193 3197 3034 +5847 2 2 2 2 2331 3419 3418 +5848 2 2 2 2 60 3223 59 +5849 2 2 2 2 345 2844 344 +5850 2 2 2 2 3388 3391 3387 +5851 2 2 2 2 295 3359 2973 +5852 2 2 2 2 350 2857 2435 +5853 2 2 2 2 3347 3348 3230 +5854 2 2 2 2 78 3123 77 +5855 2 2 2 2 2440 3404 2865 +5856 2 2 2 2 2378 3414 347 +5857 2 2 2 2 2329 3409 271 +5858 2 2 2 2 229 3349 3347 +5859 2 2 2 2 2400 3378 268 +5860 2 2 2 2 2908 3182 308 +5861 2 2 2 2 57 3217 2434 +5862 2 2 2 2 77 3123 2430 +5863 2 2 2 2 2434 3342 56 +5864 2 2 2 2 2426 2844 345 +5865 2 2 2 2 193 3233 3231 +5866 2 2 2 2 3195 3196 2429 +5867 2 2 2 2 2408 3406 246 +5868 2 2 2 2 329 3373 328 +5869 2 2 2 2 2984 3145 240 +5870 2 2 2 2 2331 3415 249 +5871 2 2 2 2 264 3147 2953 +5872 2 2 2 2 288 3248 2359 +5873 2 2 2 2 204 3193 3034 +5874 2 2 2 2 247 3424 2408 +5875 2 2 2 2 2386 3192 410 +5876 2 2 2 2 2973 3359 3358 +5877 2 2 2 2 314 3124 2946 +5878 2 2 2 2 2379 3245 306 +5879 2 2 2 2 3042 3188 191 +5880 2 2 2 2 192 3231 3042 +5881 2 2 2 2 290 3255 2929 +5882 2 2 2 2 266 3386 2369 +5883 2 2 2 2 250 3419 2331 +5884 2 2 2 2 3124 3431 2946 +5885 2 2 2 2 209 3183 3030 +5886 2 2 2 2 3406 3407 245 +5887 2 2 2 2 413 3225 2443 +5888 2 2 2 2 2396 3373 329 +5889 2 2 2 2 325 3195 2429 +5890 2 2 2 2 2357 3335 177 +5891 2 2 2 2 2333 3141 227 +5892 2 2 2 2 2404 3427 180 +5893 2 2 2 2 2368 3393 222 +5894 2 2 2 2 228 3347 2333 +5895 2 2 2 2 2332 3426 238 +5896 2 2 2 2 339 2875 2355 +5897 2 2 2 2 278 3157 2363 +5898 2 2 2 2 220 3397 2402 +5899 2 2 2 2 303 3121 2345 +5900 2 2 2 2 2988 3140 235 +5901 2 2 2 2 293 3355 2344 +5902 2 2 2 2 312 3341 2347 +5903 2 2 2 2 2440 2865 359 +5904 2 2 2 2 3147 3149 2953 +5905 2 2 2 2 3141 3229 3142 +5906 2 2 2 2 256 3388 3387 +5907 2 2 2 2 296 3359 295 +5908 2 2 2 2 309 3413 2908 +5909 2 2 2 2 62 3224 2427 +5910 2 2 2 2 3183 3205 3184 +5911 2 2 2 2 3419 3420 3418 +5912 2 2 2 2 301 3338 2920 +5913 2 2 2 2 308 3182 307 +5914 2 2 2 2 2398 3367 335 +5915 2 2 2 2 302 3338 301 +5916 2 2 2 2 3138 3139 3137 +5917 2 2 2 2 79 2392 78 +5918 2 2 2 2 63 3224 62 +5919 2 2 2 2 2381 2859 2858 +5920 2 2 2 2 3202 3203 2358 +5921 2 2 2 2 355 2403 354 +5922 2 2 2 2 230 3349 229 +5923 2 2 2 2 2336 3237 3235 +5924 2 2 2 2 340 2875 339 +5925 2 2 2 2 209 3030 208 +5926 2 2 2 2 255 2364 254 +5927 2 2 2 2 272 2329 271 +5928 2 2 2 2 3359 3360 3358 +5929 2 2 2 2 52 2394 51 +5930 2 2 2 2 55 2382 54 +5931 2 2 2 2 62 2427 61 +5932 2 2 2 2 220 2402 219 +5933 2 2 2 2 231 2399 230 +5934 2 2 2 2 244 2361 243 +5935 2 2 2 2 283 2328 282 +5936 2 2 2 2 301 2920 300 +5937 2 2 2 2 339 2355 338 +5938 2 2 2 2 341 2433 340 +5939 2 2 2 2 348 2378 347 +5940 2 2 2 2 77 2430 76 +5941 2 2 2 2 44 2442 43 +5942 2 2 2 2 46 2424 45 +5943 2 2 2 2 49 2395 48 +5944 2 2 2 2 59 2371 58 +5945 2 2 2 2 69 2356 68 +5946 2 2 2 2 72 2406 71 +5947 2 2 2 2 184 2337 183 +5948 2 2 2 2 187 2407 186 +5949 2 2 2 2 192 3042 191 +5950 2 2 2 2 214 2409 213 +5951 2 2 2 2 237 3425 236 +5952 2 2 2 2 250 2331 249 +5953 2 2 2 2 275 2401 274 +5954 2 2 2 2 290 2929 289 +5955 2 2 2 2 305 2913 304 +5956 2 2 2 2 318 2428 317 +5957 2 2 2 2 325 2429 324 +5958 2 2 2 2 346 2426 345 +5959 2 2 2 2 358 2419 357 +5960 2 2 2 2 204 3034 203 +5961 2 2 2 2 217 2334 216 +5962 2 2 2 2 247 2408 246 +5963 2 2 2 2 280 2955 279 +5964 2 2 2 2 3373 3375 3374 +5965 2 2 2 2 2408 3616 3406 +5966 2 2 2 2 409 2386 410 +5967 2 2 2 2 406 2388 407 +5968 2 2 2 2 413 2443 414 +5969 2 2 2 2 3197 3198 3034 +5970 2 2 2 2 411 2432 412 +5971 2 2 2 2 75 2352 74 +5972 2 2 2 2 176 3279 175 +5973 2 2 2 2 178 2357 177 +5974 2 2 2 2 181 2404 180 +5975 2 2 2 2 190 2367 189 +5976 2 2 2 2 195 2336 194 +5977 2 2 2 2 198 2405 197 +5978 2 2 2 2 201 2358 200 +5979 2 2 2 2 211 2362 210 +5980 2 2 2 2 223 2368 222 +5981 2 2 2 2 226 3002 225 +5982 2 2 2 2 228 2333 227 +5983 2 2 2 2 236 2988 235 +5984 2 2 2 2 239 2332 238 +5985 2 2 2 2 241 2984 240 +5986 2 2 2 2 253 2964 252 +5987 2 2 2 2 261 2330 260 +5988 2 2 2 2 264 2953 263 +5989 2 2 2 2 266 2369 265 +5990 2 2 2 2 278 2363 277 +5991 2 2 2 2 286 2932 285 +5992 2 2 2 2 288 2359 287 +5993 2 2 2 2 298 2365 297 +5994 2 2 2 2 3030 3339 208 +5995 2 2 2 2 3149 3150 2953 +5996 2 2 2 2 2347 3412 311 +5997 2 2 2 2 335 3367 334 +5998 2 2 2 2 2402 3400 219 +5999 2 2 2 2 206 2335 205 +6000 2 2 2 2 234 2360 233 +6001 2 2 2 2 258 2397 257 +6002 2 2 2 2 269 2400 268 +6003 2 2 2 2 293 2344 292 +6004 2 2 2 2 295 2973 294 +6005 2 2 2 2 303 2345 302 +6006 2 2 2 2 307 2379 306 +6007 2 2 2 2 309 2908 308 +6008 2 2 2 2 312 2347 311 +6009 2 2 2 2 314 2946 313 +6010 2 2 2 2 316 2380 315 +6011 2 2 2 2 323 2393 322 +6012 2 2 2 2 327 2353 326 +6013 2 2 2 2 330 2396 329 +6014 2 2 2 2 333 2354 332 +6015 2 2 2 2 336 2398 335 +6016 2 2 2 2 344 2366 343 +6017 2 2 2 2 350 2435 349 +6018 2 2 2 2 352 2381 351 +6019 2 2 2 2 3355 3356 2344 +6020 2 2 2 2 3175 3176 2401 +6021 2 2 2 2 3364 3365 2378 +6022 2 2 2 2 3257 3258 2367 +6023 2 2 2 2 57 2434 56 +6024 2 2 2 2 64 2370 63 +6025 2 2 2 2 67 2431 66 +6026 2 2 2 2 3225 3226 2443 +6027 2 2 2 2 245 3407 244 +6028 2 2 2 2 2368 3394 3393 +6029 2 2 2 2 3042 3189 3188 +6030 2 2 2 2 3183 3184 3030 +6031 2 2 2 2 2984 3146 3145 +6032 2 2 2 2 320 2350 319 +6033 2 2 2 2 360 2440 359 +6034 2 2 2 2 3243 3244 3241 +6035 2 2 2 2 2333 3229 3141 +6036 2 2 2 2 2357 3594 3335 +6037 2 2 2 2 3397 3398 2402 +6038 2 2 2 2 2332 3604 3426 +6039 2 2 2 2 2988 3606 3140 +6040 2 2 2 2 2399 3352 3351 +6041 2 2 2 2 256 3387 255 +6042 2 2 2 2 200 3432 199 +6043 2 2 2 2 2331 3416 3415 +6044 2 2 2 2 265 3147 264 +6045 2 2 2 2 81 3434 80 +6046 2 2 2 2 310 3413 309 +6047 2 2 2 2 257 3388 256 +6048 2 2 2 2 2400 3379 3378 +6049 2 2 2 2 348 3363 2378 +6050 2 2 2 2 306 3245 305 +6051 2 2 2 2 235 3140 234 +6052 2 2 2 2 2426 2853 2844 +6053 2 2 2 2 3130 3131 3129 +6054 2 2 2 2 2380 3126 3125 +6055 2 2 2 2 279 3157 278 +6056 2 2 2 2 268 3378 267 +6057 2 2 2 2 269 3384 2400 +6058 2 2 2 2 2398 3368 3367 +6059 2 2 2 2 251 3419 250 +6060 2 2 2 2 229 3347 228 +6061 2 2 2 2 249 3415 248 +6062 2 2 2 2 2908 3599 3182 +6063 2 2 2 2 2330 3336 260 +6064 2 2 2 2 222 3393 221 +6065 2 2 2 2 238 3426 237 +6066 2 2 2 2 177 3335 176 +6067 2 2 2 2 227 3141 226 +6068 2 2 2 2 205 3193 204 +6069 2 2 2 2 240 3145 239 +6070 2 2 2 2 2845 2846 2366 +6071 2 2 2 2 294 3355 293 +6072 2 2 2 2 210 3183 209 +6073 2 2 2 2 246 3406 245 +6074 2 2 2 2 2396 3376 3373 +6075 2 2 2 2 410 3192 411 +6076 2 2 2 2 2875 2876 2355 +6077 2 2 2 2 315 3124 314 +6078 2 2 2 2 191 3188 190 +6079 2 2 2 2 221 3397 220 +6080 2 2 2 2 193 3231 192 +6081 2 2 2 2 180 3427 179 +6082 2 2 2 2 3344 3346 3345 +6083 2 2 2 2 412 3225 413 +6084 2 2 2 2 271 3409 270 +6085 2 2 2 2 289 3248 288 +6086 2 2 2 2 2865 3404 2866 +6087 2 2 2 2 2369 3383 3148 +6088 2 2 2 2 347 3414 346 +6089 2 2 2 2 3154 3155 2330 +6090 2 2 2 2 3218 3370 3217 +6091 2 2 2 2 2440 3405 3404 +6092 2 2 2 2 313 3341 312 +6093 2 2 2 2 2512 3430 2504 +6094 2 2 2 2 3158 3170 3157 +6095 2 2 2 2 3123 3638 2430 +6096 2 2 2 2 267 3386 266 +6097 2 2 2 2 2435 3363 349 +6098 2 2 2 2 3389 3391 3388 +6099 2 2 2 2 2955 3159 3158 +6100 2 2 2 2 82 2351 81 +6101 2 2 2 2 2397 3390 3389 +6102 2 2 2 2 2380 3127 3126 +6103 2 2 2 2 2504 3430 2499 +6104 2 2 2 2 3142 3143 3002 +6105 2 2 2 2 2362 3206 3205 +6106 2 2 2 2 248 3424 247 +6107 2 2 2 2 3194 3197 3193 +6108 2 2 2 2 3148 3149 3147 +6109 2 2 2 2 351 2857 350 +6110 2 2 2 2 2929 3250 3249 +6111 2 2 2 2 3133 3134 3132 +6112 2 2 2 2 3133 3135 3134 +6113 2 2 2 2 3419 3421 3420 +6114 2 2 2 2 3231 3233 3232 +6115 2 2 2 2 3359 3361 3360 +6116 2 2 2 2 2354 3429 3428 +6117 2 2 2 2 3343 3344 2382 +6118 2 2 2 2 2371 3219 3218 +6119 2 2 2 2 59 3223 2371 +6120 2 2 2 2 2400 3380 3379 +6121 2 2 2 2 3346 3366 3345 +6122 2 2 2 2 3171 3172 2363 +6123 2 2 2 2 3125 3431 3124 +6124 2 2 2 2 3237 3238 3235 +6125 2 2 2 2 58 3217 57 +6126 2 2 2 2 2973 3358 3357 +6127 2 2 2 2 2382 3345 54 +6128 2 2 2 2 2955 3161 3159 +6129 2 2 2 2 3198 3199 3034 +6130 2 2 2 2 2677 2678 2431 +6131 2 2 2 2 3398 3399 2402 +6132 2 2 2 2 3226 3227 2443 +6133 2 2 2 2 3416 3417 3415 +6134 2 2 2 2 3042 3190 3189 +6135 2 2 2 2 3184 3185 3030 +6136 2 2 2 2 3258 3259 2367 +6137 2 2 2 2 3394 3395 3393 +6138 2 2 2 2 3189 3257 3188 +6139 2 2 2 2 2331 3418 3416 +6140 2 2 2 2 2333 3230 3229 +6141 2 2 2 2 2876 2877 2355 +6142 2 2 2 2 3150 3152 2953 +6143 2 2 2 2 2929 3255 3250 +6144 2 2 2 2 3143 3144 3002 +6145 2 2 2 2 3379 3381 3378 +6146 2 2 2 2 3171 3173 3172 +6147 2 2 2 2 2362 3207 3206 +6148 2 2 2 2 3384 3385 3380 +6149 2 2 2 2 3155 3337 3336 +6150 2 2 2 2 3155 3336 2330 +6151 2 2 2 2 3233 3234 3232 +6152 2 2 2 2 3344 3345 2382 +6153 2 2 2 2 3237 3239 3238 +6154 2 2 2 2 3226 3228 3227 +6155 2 2 2 2 3258 3260 3259 +6156 2 2 2 2 3150 3156 3152 +6157 2 2 2 2 3198 3200 3199 +6158 2 2 2 2 2866 2867 2419 +6159 2 2 2 2 3185 3339 3030 +6160 2 2 2 2 3399 3400 2402 +6161 2 2 2 2 2535 3444 2554 +6162 2 2 2 2 2400 3384 3380 +6163 2 2 2 2 2554 3444 2676 +6164 2 2 2 2 3207 3208 3206 +6165 2 2 2 2 3421 3422 3420 +6166 2 2 2 2 2515 3444 2535 +6167 2 2 2 2 3161 3163 3162 +6168 2 2 2 2 3239 3240 3238 +6169 2 2 2 2 3200 3201 3199 +6170 2 2 2 2 3260 3333 3259 +6171 2 2 2 2 3399 3401 3400 +6172 2 2 2 2 2553 3435 2552 +6173 2 2 2 2 2582 3446 3440 +6174 2 2 2 2 2589 3445 2572 +6175 2 2 2 2 2574 3445 2586 +6176 2 2 2 2 2580 3438 2583 +6177 2 2 2 2 2582 3440 3439 +6178 2 2 2 2 2575 3437 2573 +6179 2 2 2 2 2554 2676 2557 +6180 2 2 2 2 2572 3445 2574 +6181 2 2 2 2 2656 3437 2575 +6182 2 2 2 2 2535 2552 2534 +6183 2 2 2 2 2557 2585 2584 +6184 2 2 2 2 2515 2535 2534 +6185 2 2 2 2 2556 3435 2553 +6186 2 2 2 2 2585 2607 2584 +6187 2 2 2 2 2567 2670 2520 +6188 2 2 2 2 2587 2599 2598 +6189 2 2 2 2 3207 3216 3208 +6190 2 2 2 2 326 3195 325 +6191 2 2 2 2 2534 2567 2520 +6192 2 2 2 2 2552 3436 2534 +6193 2 2 2 2 2555 2556 2553 +6194 2 2 2 2 2574 2586 2576 +6195 2 2 2 2 2577 2656 2575 +6196 2 2 2 2 2578 2582 2580 +6197 2 2 2 2 2582 3438 2580 +6198 2 2 2 2 2534 3436 2567 +6199 2 2 2 2 2572 2574 2573 +6200 2 2 2 2 2572 2573 2566 +6201 2 2 2 2 2587 2598 2581 +6202 2 2 2 2 2590 2665 2618 +6203 2 2 2 2 2535 2553 2552 +6204 2 2 2 2 2576 2578 2577 +6205 2 2 2 2 2583 2597 2587 +6206 2 2 2 2 2554 2555 2553 +6207 2 2 2 2 2567 2671 2670 +6208 2 2 2 2 2571 2589 2572 +6209 2 2 2 2 2578 2579 2577 +6210 2 2 2 2 2671 2672 2670 +6211 2 2 2 2 3441 3443 3439 +6212 2 2 2 2 2571 2572 2566 +6213 2 2 2 2 2574 2575 2573 +6214 2 2 2 2 2578 2580 2579 +6215 2 2 2 2 2580 2583 2581 +6216 2 2 2 2 2599 2619 2598 +6217 2 2 2 2 3401 3402 3400 +6218 2 2 2 2 2515 2534 2520 +6219 2 2 2 2 2554 2557 2555 +6220 2 2 2 2 2564 2571 2566 +6221 2 2 2 2 2535 2554 2553 +6222 2 2 2 2 2576 2577 2575 +6223 2 2 2 2 2578 3446 2582 +6224 2 2 2 2 2580 2581 2579 +6225 2 2 2 2 2583 2587 2581 +6226 2 2 2 2 2582 3439 3438 +6227 2 2 2 2 3440 3441 3439 +6228 2 2 2 2 2557 2584 2555 +6229 2 2 2 2 2574 2576 2575 +6230 2 2 2 2 2564 2566 2565 +6231 2 2 2 2 2511 2512 2504 +6232 2 2 2 2 2576 3446 2578 +6233 2 2 2 2 56 3342 55 +6234 2 2 2 2 2586 3446 2576 +6235 2 2 2 2 3163 3164 3162 +6236 2 2 2 2 2564 2565 2549 +6237 2 2 2 2 2590 2618 2563 +6238 2 2 2 2 2505 2511 2504 +6239 2 2 2 2 2678 2679 2431 +6240 2 2 2 2 2515 2520 2507 +6241 2 2 2 2 2502 3444 2515 +6242 2 2 2 2 2371 3223 3219 +6243 2 2 2 2 3173 3174 3172 +6244 2 2 2 2 3361 3362 3360 +6245 2 2 2 2 2426 2854 2853 +6246 2 2 2 2 2548 2590 2563 +6247 2 2 2 2 2563 2564 2549 +6248 2 2 2 2 2502 2515 2507 +6249 2 2 2 2 2500 2505 2504 +6250 2 2 2 2 2396 3377 3376 +6251 2 2 2 2 3161 3162 3159 +6252 2 2 2 2 359 2865 358 +6253 2 2 2 2 2502 2507 2498 +6254 2 2 2 2 2500 2504 2499 +6255 2 2 2 2 2548 2563 2549 +6256 2 2 2 2 3127 3128 3126 +6257 2 2 2 2 311 3412 310 +6258 2 2 2 2 3135 3136 3134 +6259 2 2 2 2 3428 3433 331 +6260 2 2 2 2 2767 3512 3511 +6261 2 2 2 2 2354 3428 332 +6262 2 2 2 2 3505 3507 3504 +6263 2 2 2 2 2351 3434 81 +6264 2 2 2 2 3453 3455 3452 +6265 2 2 2 2 2759 3454 3453 +6266 2 2 2 2 2413 3506 3505 +6267 2 2 2 2 3456 3458 3457 +6268 2 2 2 2 3495 3496 3494 +6269 2 2 2 2 3488 3490 3489 +6270 2 2 2 2 2377 3484 3482 +6271 2 2 2 2 2411 3469 3468 +6272 2 2 2 2 2341 3519 3518 +6273 2 2 2 2 3468 3470 3467 +6274 2 2 2 2 2775 3477 3476 +6275 2 2 2 2 3482 3485 3481 +6276 2 2 2 2 3463 3464 2765 +6277 2 2 2 2 349 3363 348 +6278 2 2 2 2 2499 2502 2498 +6279 2 2 2 2 2548 2549 2547 +6280 2 2 2 2 2497 2500 2499 +6281 2 2 2 2 170 2414 169 +6282 2 2 2 2 84 2436 83 +6283 2 2 2 2 136 3504 135 +6284 2 2 2 2 332 3428 331 +6285 2 2 2 2 82 3451 2351 +6286 2 2 2 2 3447 3448 2435 +6287 2 2 2 2 85 3449 84 +6288 2 2 2 2 83 3451 82 +6289 2 2 2 2 115 3452 114 +6290 2 2 2 2 153 3494 152 +6291 2 2 2 2 98 3535 97 +6292 2 2 2 2 123 3537 122 +6293 2 2 2 2 120 3467 119 +6294 2 2 2 2 145 3481 144 +6295 2 2 2 2 124 2374 123 +6296 2 2 2 2 130 3502 129 +6297 2 2 2 2 89 3461 88 +6298 2 2 2 2 92 2714 91 +6299 2 2 2 2 97 2721 96 +6300 2 2 2 2 99 2348 98 +6301 2 2 2 2 113 2376 112 +6302 2 2 2 2 118 2343 117 +6303 2 2 2 2 126 2775 125 +6304 2 2 2 2 132 2765 131 +6305 2 2 2 2 133 3462 132 +6306 2 2 2 2 139 3517 138 +6307 2 2 2 2 127 3479 126 +6308 2 2 2 2 149 3488 148 +6309 2 2 2 2 167 2373 166 +6310 2 2 2 2 151 2340 150 +6311 2 2 2 2 154 2410 153 +6312 2 2 2 2 157 2375 156 +6313 2 2 2 2 159 3312 158 +6314 2 2 2 2 129 2342 128 +6315 2 2 2 2 140 2341 139 +6316 2 2 2 2 164 3302 163 +6317 2 2 2 2 146 2377 145 +6318 2 2 2 2 400 2387 401 +6319 2 2 2 2 398 2437 399 +6320 2 2 2 2 88 2438 87 +6321 2 2 2 2 90 2349 89 +6322 2 2 2 2 93 3456 92 +6323 2 2 2 2 95 2385 94 +6324 2 2 2 2 100 3510 99 +6325 2 2 2 2 101 2767 100 +6326 2 2 2 2 103 2384 102 +6327 2 2 2 2 105 2731 104 +6328 2 2 2 2 106 3459 105 +6329 2 2 2 2 108 2346 107 +6330 2 2 2 2 111 2762 110 +6331 2 2 2 2 116 2759 115 +6332 2 2 2 2 121 2411 120 +6333 2 2 2 2 134 2372 133 +6334 2 2 2 2 160 3528 159 +6335 2 2 2 2 158 3527 157 +6336 2 2 2 2 143 2412 142 +6337 2 2 2 2 148 3483 147 +6338 2 2 2 2 162 2339 161 +6339 2 2 2 2 165 3493 164 +6340 2 2 2 2 110 3472 109 +6341 2 2 2 2 86 2383 85 +6342 2 2 2 2 137 2413 136 +6343 2 2 2 2 166 3513 165 +6344 2 2 2 2 107 3514 106 +6345 2 2 2 2 161 3529 160 +6346 2 2 2 2 152 3542 151 +6347 2 2 2 2 163 3532 162 +6348 2 2 2 2 109 3515 108 +6349 2 2 2 2 138 3544 137 +6350 2 2 2 2 150 3546 149 +6351 2 2 2 2 125 3475 124 +6352 2 2 2 2 144 3533 143 +6353 2 2 2 2 122 3541 121 +6354 2 2 2 2 119 3545 118 +6355 2 2 2 2 2857 3447 2435 +6356 2 2 2 2 147 3534 146 +6357 2 2 2 2 2383 3450 3449 +6358 2 2 2 2 112 3530 111 +6359 2 2 2 2 2767 3511 3510 +6360 2 2 2 2 114 3474 113 +6361 2 2 2 2 94 3548 93 +6362 2 2 2 2 2436 3451 83 +6363 2 2 2 2 135 3543 134 +6364 2 2 2 2 2413 3505 3504 +6365 2 2 2 2 2759 3453 3452 +6366 2 2 2 2 87 3547 86 +6367 2 2 2 2 91 3539 90 +6368 2 2 2 2 3502 3503 2342 +6369 2 2 2 2 2775 3476 3475 +6370 2 2 2 2 117 3549 116 +6371 2 2 2 2 2767 3540 3512 +6372 2 2 2 2 2858 3447 2857 +6373 2 2 2 2 3479 3480 3477 +6374 2 2 2 2 2374 3538 3537 +6375 2 2 2 2 102 3540 101 +6376 2 2 2 2 3456 3457 2714 +6377 2 2 2 2 131 3550 130 +6378 2 2 2 2 3488 3489 3483 +6379 2 2 2 2 2411 3468 3467 +6380 2 2 2 2 2377 3482 3481 +6381 2 2 2 2 2341 3518 3517 +6382 2 2 2 2 2339 3607 3529 +6383 2 2 2 2 2410 3495 3494 +6384 2 2 2 2 3539 3622 2349 +6385 2 2 2 2 2376 3531 3530 +6386 2 2 2 2 3462 3463 2765 +6387 2 2 2 2 2762 3473 3472 +6388 2 2 2 2 3459 3460 2731 +6389 2 2 2 2 3507 3543 3504 +6390 2 2 2 2 2383 3449 85 +6391 2 2 2 2 2413 3504 136 +6392 2 2 2 2 3461 3624 2438 +6393 2 2 2 2 2767 3510 100 +6394 2 2 2 2 2348 3536 3535 +6395 2 2 2 2 84 3449 2436 +6396 2 2 2 2 2759 3452 115 +6397 2 2 2 2 3515 3516 2346 +6398 2 2 2 2 3455 3474 3452 +6399 2 2 2 2 97 3535 2721 +6400 2 2 2 2 3464 3550 2765 +6401 2 2 2 2 3472 3515 109 +6402 2 2 2 2 2550 2675 2546 +6403 2 2 2 2 2546 2548 2547 +6404 2 2 2 2 2497 2499 2498 +6405 2 2 2 2 106 3514 3459 +6406 2 2 2 2 3473 3555 3472 +6407 2 2 2 2 3496 3542 3494 +6408 2 2 2 2 2349 3461 89 +6409 2 2 2 2 129 3502 2342 +6410 2 2 2 2 3536 3552 3535 +6411 2 2 2 2 2374 3537 123 +6412 2 2 2 2 2775 3475 125 +6413 2 2 2 2 3456 3548 3458 +6414 2 2 2 2 92 3456 2714 +6415 2 2 2 2 128 3551 127 +6416 2 2 2 2 2411 3467 120 +6417 2 2 2 2 2775 3479 3477 +6418 2 2 2 2 126 3479 2775 +6419 2 2 2 2 2410 3494 153 +6420 2 2 2 2 2377 3481 145 +6421 2 2 2 2 118 3545 2343 +6422 2 2 2 2 2372 3462 133 +6423 2 2 2 2 148 3488 3483 +6424 2 2 2 2 3450 3554 3449 +6425 2 2 2 2 2377 3534 3484 +6426 2 2 2 2 3494 3542 152 +6427 2 2 2 2 2341 3517 139 +6428 2 2 2 2 137 3544 2413 +6429 2 2 2 2 2759 3549 3454 +6430 2 2 2 2 3485 3533 3481 +6431 2 2 2 2 157 3527 2375 +6432 2 2 2 2 2373 3513 166 +6433 2 2 2 2 159 3528 3312 +6434 2 2 2 2 164 3493 3302 +6435 2 2 2 2 2339 3529 161 +6436 2 2 2 2 3312 3527 158 +6437 2 2 2 2 132 3462 2765 +6438 2 2 2 2 162 3532 2339 +6439 2 2 2 2 2762 3472 110 +6440 2 2 2 2 2438 3547 87 +6441 2 2 2 2 3481 3533 144 +6442 2 2 2 2 165 3513 3493 +6443 2 2 2 2 2340 3546 150 +6444 2 2 2 2 105 3459 2731 +6445 2 2 2 2 3488 3546 3490 +6446 2 2 2 2 151 3542 2340 +6447 2 2 2 2 160 3529 3528 +6448 2 2 2 2 3302 3532 163 +6449 2 2 2 2 2411 3541 3469 +6450 2 2 2 2 2385 3548 94 +6451 2 2 2 2 111 3530 2762 +6452 2 2 2 2 146 3534 2377 +6453 2 2 2 2 121 3541 2411 +6454 2 2 2 2 3483 3534 147 +6455 2 2 2 2 3515 3555 3516 +6456 2 2 2 2 149 3546 3488 +6457 2 2 2 2 2413 3544 3506 +6458 2 2 2 2 143 3533 2412 +6459 2 2 2 2 3517 3544 138 +6460 2 2 2 2 3537 3541 122 +6461 2 2 2 2 2765 3550 131 +6462 2 2 2 2 2343 3549 117 +6463 2 2 2 2 3452 3474 114 +6464 2 2 2 2 88 3461 2438 +6465 2 2 2 2 3462 3556 3463 +6466 2 2 2 2 3504 3543 135 +6467 2 2 2 2 2348 3535 98 +6468 2 2 2 2 2376 3530 112 +6469 2 2 2 2 113 3474 2376 +6470 2 2 2 2 134 3543 2372 +6471 2 2 2 2 124 3475 2374 +6472 2 2 2 2 90 3539 2349 +6473 2 2 2 2 3470 3545 3467 +6474 2 2 2 2 3467 3545 119 +6475 2 2 2 2 99 3510 2348 +6476 2 2 2 2 2346 3514 107 +6477 2 2 2 2 2714 3539 91 +6478 2 2 2 2 93 3548 3456 +6479 2 2 2 2 101 3540 2767 +6480 2 2 2 2 108 3515 2346 +6481 2 2 2 2 3476 3557 3475 +6482 2 2 2 2 2762 3558 3473 +6483 2 2 2 2 3531 3558 3530 +6484 2 2 2 2 2384 3540 102 +6485 2 2 2 2 116 3549 2759 +6486 2 2 2 2 2342 3551 128 +6487 2 2 2 2 2374 3557 3538 +6488 2 2 2 2 86 3547 2383 +6489 2 2 2 2 3472 3555 3515 +6490 2 2 2 2 130 3550 3502 +6491 2 2 2 2 3535 3552 2721 +6492 2 2 2 2 3449 3554 2436 +6493 2 2 2 2 3507 3562 3543 +6494 2 2 2 2 2348 3559 3536 +6495 2 2 2 2 3455 3561 3474 +6496 2 2 2 2 127 3551 3479 +6497 2 2 2 2 3511 3559 3510 +6498 2 2 2 2 2372 3556 3462 +6499 2 2 2 2 3479 3551 3480 +6500 2 2 2 2 2376 3561 3531 +6501 2 2 2 2 3530 3558 2762 +6502 2 2 2 2 3464 3565 3550 +6503 2 2 2 2 3549 3576 3454 +6504 2 2 2 2 3474 3561 2376 +6505 2 2 2 2 2343 3576 3549 +6506 2 2 2 2 2342 3570 3551 +6507 2 2 2 2 3543 3562 2372 +6508 2 2 2 2 3538 3564 3537 +6509 2 2 2 2 3502 3565 3503 +6510 2 2 2 2 3489 3563 3483 +6511 2 2 2 2 3516 3560 2346 +6512 2 2 2 2 3518 3569 3517 +6513 2 2 2 2 3475 3557 2374 +6514 2 2 2 2 3546 3572 3490 +6515 2 2 2 2 3550 3565 3502 +6516 2 2 2 2 3534 3563 3484 +6517 2 2 2 2 2340 3572 3546 +6518 2 2 2 2 3541 3564 3469 +6519 2 2 2 2 3483 3563 3534 +6520 2 2 2 2 3510 3559 2348 +6521 2 2 2 2 3537 3564 3541 +6522 2 2 2 2 3517 3569 3544 +6523 2 2 2 2 3551 3570 3480 +6524 2 2 2 2 3544 3569 3506 +6525 2 2 2 2 2372 3562 3556 +6526 2 2 2 2 2346 3560 3514 +6527 2 2 2 2 3503 3570 2342 +6528 2 2 2 2 3496 3571 3542 +6529 2 2 2 2 3542 3571 2340 +6530 2 2 2 2 3571 3572 2340 +6531 2 2 2 2 3575 3576 2343 +6532 2 2 2 2 3485 3573 3533 +6533 2 2 2 2 3533 3573 2412 +6534 2 2 2 2 3545 3575 2343 +6535 2 2 2 2 3470 3575 3545 +6536 2 2 2 2 2545 2550 2546 +6537 2 2 2 2 2497 2498 2495 +6538 2 2 2 2 2546 2547 2508 +6539 2 2 2 2 2545 2546 2508 +6540 2 2 2 2 2496 2497 2495 +6541 2 2 2 2 2494 2545 2508 +6542 2 2 2 2 2493 2496 2495 +6543 2 2 2 2 2495 2673 2494 +6544 2 2 2 2 2494 2508 2492 +6545 2 2 2 2 2493 2495 2494 +6546 2 2 2 2 2493 2494 2492 +6547 2 2 2 2 2491 2493 2492 +6548 2 2 2 2 2491 2492 2489 +6549 2 2 2 2 2490 2503 2491 +6550 2 2 2 2 2490 2491 2489 +6551 2 2 2 2 2487 2490 2489 +6552 2 2 2 2 2489 2669 2488 +6553 2 2 2 2 2669 3578 2488 +6554 2 2 2 2 2487 2489 2488 +6555 2 2 2 2 2486 2668 2501 +6556 2 2 2 2 2487 2488 2486 +6557 2 2 2 2 2781 4182 3586 +6558 2 2 2 2 2565 3579 2668 +6559 2 2 2 2 3437 3579 2573 +6560 2 2 2 2 2566 3579 2565 +6561 2 2 2 2 2484 2487 2486 +6562 2 2 2 2 2486 2501 2483 +6563 2 2 2 2 2573 3579 2566 +6564 2 2 2 2 3354 3782 3046 +6565 2 2 2 2 2484 2486 2483 +6566 2 2 2 2 2633 4102 2631 +6567 2 2 2 2 3967 3979 3458 +6568 2 2 2 2 2483 2667 2481 +6569 2 2 2 2 2482 2484 2483 +6570 2 2 2 2 3035 3733 3108 +6571 2 2 2 2 3539 3730 3622 +6572 2 2 2 2 3457 3730 2714 +6573 2 2 2 2 2385 3661 3548 +6574 2 2 2 2 3066 3618 3348 +6575 2 2 2 2 3107 3854 3027 +6576 2 2 2 2 2899 3944 2971 +6577 2 2 2 2 48 3582 47 +6578 2 2 2 2 3459 3720 3460 +6579 2 2 2 2 3560 3720 3514 +6580 2 2 2 2 2731 4175 3743 +6581 2 2 2 2 2384 3656 3540 +6582 2 2 2 2 2714 3730 3539 +6583 2 2 2 2 3548 3661 3458 +6584 2 2 2 2 2395 3583 3582 +6585 2 2 2 2 3037 3858 2968 +6586 2 2 2 2 2989 4142 2987 +6587 2 2 2 2 3106 3640 2543 +6588 2 2 2 2 2482 2483 2481 +6589 2 2 2 2 2395 3582 48 +6590 2 2 2 2 2994 4143 2993 +6591 2 2 2 2 3309 3728 3298 +6592 2 2 2 2 3514 3720 3459 +6593 2 2 2 2 3095 3383 3381 +6594 2 2 2 2 2855 3596 2642 +6595 2 2 2 2 3540 3656 3512 +6596 2 2 2 2 2353 3623 3195 +6597 2 2 2 2 2704 3876 2706 +6598 2 2 2 2 3377 3955 3044 +6599 2 2 2 2 2948 4188 3989 +6600 2 2 2 2 2612 2613 2415 +6601 2 2 2 2 3010 4146 3009 +6602 2 2 2 2 2976 4111 4092 +6603 2 2 2 2 2410 3635 3495 +6604 2 2 2 2 3014 4147 3013 +6605 2 2 2 2 2723 2725 2724 +6606 2 2 2 2 2937 2939 2938 +6607 2 2 2 2 71 3592 70 +6608 2 2 2 2 185 3593 184 +6609 2 2 2 2 3310 3311 3308 +6610 2 2 2 2 3018 4148 3017 +6611 2 2 2 2 3020 4149 3019 +6612 2 2 2 2 2991 4142 2989 +6613 2 2 2 2 3022 4150 3021 +6614 2 2 2 2 2969 4040 3726 +6615 2 2 2 2 2663 3769 50 +6616 2 2 2 2 2900 4075 2899 +6617 2 2 2 2 3024 4151 3023 +6618 2 2 2 2 3935 4026 3047 +6619 2 2 2 2 3628 3629 2648 +6620 2 2 2 2 3035 4152 3025 +6621 2 2 2 2 2996 4143 2994 +6622 2 2 2 2 3041 3698 3191 +6623 2 2 2 2 79 3601 2392 +6624 2 2 2 2 3434 3601 80 +6625 2 2 2 2 3108 4153 3036 +6626 2 2 2 2 3195 3623 3196 +6627 2 2 2 2 2643 3724 3712 +6628 2 2 2 2 3313 3314 3311 +6629 2 2 2 2 2777 3925 3577 +6630 2 2 2 2 3798 3799 3194 +6631 2 2 2 2 2541 2592 2591 +6632 2 2 2 2 2754 4054 2755 +6633 2 2 2 2 2657 3754 2666 +6634 2 2 2 2 2339 3732 3607 +6635 2 2 2 2 3852 3853 2624 +6636 2 2 2 2 2725 4074 2726 +6637 2 2 2 2 3031 3696 3695 +6638 2 2 2 2 3285 3289 3288 +6639 2 2 2 2 3341 3715 2347 +6640 2 2 2 2 3729 4008 2782 +6641 2 2 2 2 3011 4146 3010 +6642 2 2 2 2 2647 3994 2860 +6643 2 2 2 2 3749 3750 3604 +6644 2 2 2 2 3015 4147 3014 +6645 2 2 2 2 3083 3867 3080 +6646 2 2 2 2 3442 3786 2437 +6647 2 2 2 2 3499 3501 2803 +6648 2 2 2 2 3282 3285 3284 +6649 2 2 2 2 3019 4148 3018 +6650 2 2 2 2 2748 4168 3707 +6651 2 2 2 2 2768 3795 3771 +6652 2 2 2 2 3685 3699 3110 +6653 2 2 2 2 2337 4121 3325 +6654 2 2 2 2 215 4067 3214 +6655 2 2 2 2 3021 4149 3020 +6656 2 2 2 2 3742 3975 3974 +6657 2 2 2 2 2789 4099 3802 +6658 2 2 2 2 2406 3592 71 +6659 2 2 2 2 184 3593 2337 +6660 2 2 2 2 3023 4150 3022 +6661 2 2 2 2 2974 4096 3252 +6662 2 2 2 2 2481 2485 2479 +6663 2 2 2 2 2480 2482 2481 +6664 2 2 2 2 3025 4151 3024 +6665 2 2 2 2 3036 4152 3035 +6666 2 2 2 2 3280 3282 3281 +6667 2 2 2 2 2579 3608 2577 +6668 2 2 2 2 2479 3674 2477 +6669 2 2 2 2 407 3609 408 +6670 2 2 2 2 2511 2657 2512 +6671 2 2 2 2 2602 3738 2815 +6672 2 2 2 2 3109 4153 3108 +6673 2 2 2 2 3387 3736 2364 +6674 2 2 2 2 2697 2698 2696 +6675 2 2 2 2 2332 3748 3604 +6676 2 2 2 2 3146 3748 3145 +6677 2 2 2 2 2732 4162 2733 +6678 2 2 2 2 2934 2937 2936 +6679 2 2 2 2 2621 3901 3724 +6680 2 2 2 2 2420 2606 384 +6681 2 2 2 2 3727 4029 2964 +6682 2 2 2 2 3277 3280 3278 +6683 2 2 2 2 2620 3674 3608 +6684 2 2 2 2 3144 3612 224 +6685 2 2 2 2 223 3612 2368 +6686 2 2 2 2 428 2425 429 +6687 2 2 2 2 381 2439 382 +6688 2 2 2 2 3368 3657 3103 +6689 2 2 2 2 3588 3753 3338 +6690 2 2 2 2 80 3601 79 +6691 2 2 2 2 420 2391 421 +6692 2 2 2 2 389 2390 390 +6693 2 2 2 2 3425 3740 2988 +6694 2 2 2 2 2740 4007 2741 +6695 2 2 2 2 3132 3631 3067 +6696 2 2 2 2 2628 2629 2627 +6697 2 2 2 2 2738 4165 2739 +6698 2 2 2 2 2695 2696 2694 +6699 2 2 2 2 3117 3764 2608 +6700 2 2 2 2 2621 3827 2594 +6701 2 2 2 2 2956 4065 3118 +6702 2 2 2 2 2360 3755 3354 +6703 2 2 2 2 3606 3755 3140 +6704 2 2 2 2 2742 4166 2743 +6705 2 2 2 2 2425 2659 2658 +6706 2 2 2 2 2744 4167 2745 +6707 2 2 2 2 2829 4124 3221 +6708 2 2 2 2 3412 3711 3413 +6709 2 2 2 2 2746 4168 2747 +6710 2 2 2 2 408 3621 409 +6711 2 2 2 2 3122 3767 3121 +6712 2 2 2 2 2345 3767 3588 +6713 2 2 2 2 3532 3732 2339 +6714 2 2 2 2 3583 3999 2570 +6715 2 2 2 2 2748 4172 2749 +6716 2 2 2 2 2750 4173 2751 +6717 2 2 2 2 3370 3757 2434 +6718 2 2 2 2 3342 3757 3343 +6719 2 2 2 2 2992 4178 2991 +6720 2 2 2 2 3727 4023 3097 +6721 2 2 2 2 380 2445 381 +6722 2 2 2 2 2856 3815 2649 +6723 2 2 2 2 2916 3079 3078 +6724 2 2 2 2 3743 4175 2813 +6725 2 2 2 2 3426 3750 3425 +6726 2 2 2 2 2797 3964 2814 +6727 2 2 2 2 3044 3955 3429 +6728 2 2 2 2 2756 4179 2757 +6729 2 2 2 2 3063 3657 3644 +6730 2 2 2 2 2849 3658 3645 +6731 2 2 2 2 3179 3659 3648 +6732 2 2 2 2 3649 3660 3523 +6733 2 2 2 2 60 3627 3223 +6734 2 2 2 2 2427 3627 61 +6735 2 2 2 2 2758 4180 2760 +6736 2 2 2 2 2636 4181 2635 +6737 2 2 2 2 2802 3977 2815 +6738 2 2 2 2 2542 3605 3102 +6739 2 2 2 2 2761 4182 2770 +6740 2 2 2 2 393 3597 394 +6741 2 2 2 2 392 2423 393 +6742 2 2 2 2 417 2422 418 +6743 2 2 2 2 430 2444 431 +6744 2 2 2 2 2445 2446 2439 +6745 2 2 2 2 3715 3745 2347 +6746 2 2 2 2 2771 4183 2801 +6747 2 2 2 2 3668 3964 2385 +6748 2 2 2 2 2643 4184 2639 +6749 2 2 2 2 2993 4178 2992 +6750 2 2 2 2 2442 3653 3652 +6751 2 2 2 2 44 3632 2442 +6752 2 2 2 2 2424 3632 45 +6753 2 2 2 2 2359 3633 287 +6754 2 2 2 2 286 3633 2932 +6755 2 2 2 2 3622 3839 2804 +6756 2 2 2 2 2997 4187 2996 +6757 2 2 2 2 3275 3277 3276 +6758 2 2 2 2 2907 4191 2906 +6759 2 2 2 2 2816 4186 2818 +6760 2 2 2 2 155 3634 154 +6761 2 2 2 2 3661 3967 3458 +6762 2 2 2 2 3598 3809 2892 +6763 2 2 2 2 2630 4102 2629 +6764 2 2 2 2 2733 4162 2734 +6765 2 2 2 2 2830 3968 3837 +6766 2 2 2 2 2768 3771 3584 +6767 2 2 2 2 3352 3781 3351 +6768 2 2 2 2 3354 3781 3353 +6769 2 2 2 2 2506 3674 2620 +6770 2 2 2 2 2693 2694 2692 +6771 2 2 2 2 2528 2594 2530 +6772 2 2 2 2 2755 4054 2756 +6773 2 2 2 2 2822 4189 2833 +6774 2 2 2 2 3667 3870 2357 +6775 2 2 2 2 2457 3940 2458 +6776 2 2 2 2 2829 3669 3220 +6777 2 2 2 2 3192 3879 2432 +6778 2 2 2 2 2440 3641 3405 +6779 2 2 2 2 361 3641 360 +6780 2 2 2 2 2909 4191 2907 +6781 2 2 2 2 2568 3665 2808 +6782 2 2 2 2 64 3642 2370 +6783 2 2 2 2 2403 3643 354 +6784 2 2 2 2 336 3644 2398 +6785 2 2 2 2 341 3645 2433 +6786 2 2 2 2 355 3646 2403 +6787 2 2 2 2 2932 3647 285 +6788 2 2 2 2 272 3648 2329 +6789 2 2 2 2 2412 3649 142 +6790 2 2 2 2 299 3650 298 +6791 2 2 2 2 2739 4165 2740 +6792 2 2 2 2 2430 3655 76 +6793 2 2 2 2 75 3655 2352 +6794 2 2 2 2 2741 4007 2742 +6795 2 2 2 2 2998 4187 2997 +6796 2 2 2 2 2736 4192 2737 +6797 2 2 2 2 3412 3745 3711 +6798 2 2 2 2 3083 3911 3867 +6799 2 2 2 2 2829 4119 2544 +6800 2 2 2 2 2743 4166 2744 +6801 2 2 2 2 2577 3608 2656 +6802 2 2 2 2 3687 4152 3041 +6803 2 2 2 2 2388 3609 407 +6804 2 2 2 2 2611 2653 2525 +6805 2 2 2 2 3934 4061 2834 +6806 2 2 2 2 2745 4167 2746 +6807 2 2 2 2 3715 3923 3092 +6808 2 2 2 2 3625 3988 3595 +6809 2 2 2 2 242 3666 241 +6810 2 2 2 2 3427 3667 179 +6811 2 2 2 2 178 3667 2357 +6812 2 2 2 2 2470 4057 2471 +6813 2 2 2 2 2721 3668 96 +6814 2 2 2 2 95 3668 2385 +6815 2 2 2 2 2747 4168 2748 +6816 2 2 2 2 3491 3773 3585 +6817 2 2 2 2 2690 3642 2842 +6818 2 2 2 2 2842 3642 65 +6819 2 2 2 2 2864 3643 2862 +6820 2 2 2 2 353 3643 2864 +6821 2 2 2 2 3063 3644 3119 +6822 2 2 2 2 3119 3644 337 +6823 2 2 2 2 2849 3645 2852 +6824 2 2 2 2 2852 3645 342 +6825 2 2 2 2 2870 3646 2874 +6826 2 2 2 2 2874 3646 356 +6827 2 2 2 2 3169 3647 3168 +6828 2 2 2 2 284 3647 3169 +6829 2 2 2 2 3179 3648 3181 +6830 2 2 2 2 3181 3648 273 +6831 2 2 2 2 141 3649 3526 +6832 2 2 2 2 3526 3649 3523 +6833 2 2 2 2 3391 3736 3387 +6834 2 2 2 2 2749 4172 2750 +6835 2 2 2 2 3739 3887 2472 +6836 2 2 2 2 3079 3081 3080 +6837 2 2 2 2 3145 3748 2332 +6838 2 2 2 2 2751 4173 2752 +6839 2 2 2 2 3640 4016 2995 +6840 2 2 2 2 3589 3796 2338 +6841 2 2 2 2 2725 3888 2779 +6842 2 2 2 2 3276 4160 3718 +6843 2 2 2 2 2783 3611 3516 +6844 2 2 2 2 2503 3614 2491 +6845 2 2 2 2 2493 3614 2496 +6846 2 2 2 2 3553 4095 3888 +6847 2 2 2 2 224 3612 223 +6848 2 2 2 2 3450 3838 2711 +6849 2 2 2 2 2446 2448 2447 +6850 2 2 2 2 3663 4030 3972 +6851 2 2 2 2 3338 3753 2920 +6852 2 2 2 2 3706 3817 2774 +6853 2 2 2 2 3330 4069 3329 +6854 2 2 2 2 2757 4179 2758 +6855 2 2 2 2 2766 4072 3772 +6856 2 2 2 2 2800 3893 2813 +6857 2 2 2 2 299 3911 3650 +6858 2 2 2 2 3369 3671 2354 +6859 2 2 2 2 2531 3821 3756 +6860 2 2 2 2 2988 3740 3606 +6861 2 2 2 2 4104 4173 2764 +6862 2 2 2 2 2760 4180 2761 +6863 2 2 2 2 2560 4127 2832 +6864 2 2 2 2 402 3716 403 +6865 2 2 2 2 2637 4181 2636 +6866 2 2 2 2 2421 2627 2626 +6867 2 2 2 2 168 3717 167 +6868 2 2 2 2 2813 3893 3743 +6869 2 2 2 2 3327 3796 3589 +6870 2 2 2 2 2448 2450 2449 +6871 2 2 2 2 2815 3977 2816 +6872 2 2 2 2 2770 4182 2771 +6873 2 2 2 2 3368 3952 3057 +6874 2 2 2 2 2430 3991 3655 +6875 2 2 2 2 3731 3732 3532 +6876 2 2 2 2 2618 3721 2563 +6877 2 2 2 2 2564 3721 2571 +6878 2 2 2 2 2801 4183 2802 +6879 2 2 2 2 429 2658 430 +6880 2 2 2 2 2737 4192 2738 +6881 2 2 2 2 3455 3729 2782 +6882 2 2 2 2 3140 3755 2360 +6883 2 2 2 2 2644 4184 2643 +6884 2 2 2 2 2351 3762 3434 +6885 2 2 2 2 3443 3651 3597 +6886 2 2 2 2 2347 3745 3412 +6887 2 2 2 2 3438 3723 2583 +6888 2 2 2 2 2450 2452 2451 +6889 2 2 2 2 3829 3882 2517 +6890 2 2 2 2 3110 3263 3261 +6891 2 2 2 2 2391 3610 421 +6892 2 2 2 2 2818 4186 2819 +6893 2 2 2 2 253 3727 2964 +6894 2 2 2 2 2364 3727 254 +6895 2 2 2 2 2892 2893 2891 +6896 2 2 2 2 3180 4090 3104 +6897 2 2 2 2 2509 2605 2484 +6898 2 2 2 2 3634 3635 2410 +6899 2 2 2 2 3084 3941 3640 +6900 2 2 2 2 2788 4192 4138 +6901 2 2 2 2 2770 3738 2793 +6902 2 2 2 2 2452 2454 2453 +6903 2 2 2 2 3638 3904 2795 +6904 2 2 2 2 2726 4074 2727 +6905 2 2 2 2 2645 3724 2643 +6906 2 2 2 2 2485 3674 2479 +6907 2 2 2 2 2960 2961 2959 +6908 2 2 2 2 409 3621 2386 +6909 2 2 2 2 3121 3767 2345 +6910 2 2 2 2 2785 3906 2807 +6911 2 2 2 2 3586 4180 2768 +6912 2 2 2 2 2833 4189 2834 +6913 2 2 2 2 3081 3832 2921 +6914 2 2 2 2 2873 3689 2659 +6915 2 2 2 2 2354 3671 3429 +6916 2 2 2 2 2901 4075 2900 +6917 2 2 2 2 2602 4062 3882 +6918 2 2 2 2 2908 3806 3599 +6919 2 2 2 2 2454 2456 2455 +6920 2 2 2 2 2984 3805 3146 +6921 2 2 2 2 2373 3768 3513 +6922 2 2 2 2 2434 3757 3342 +6923 2 2 2 2 383 2420 384 +6924 2 2 2 2 426 2421 427 +6925 2 2 2 2 2475 4110 2476 +6926 2 2 2 2 103 3743 2384 +6927 2 2 2 2 2731 3743 104 +6928 2 2 2 2 2561 3887 3739 +6929 2 2 2 2 2609 3853 3852 +6930 2 2 2 2 3989 4188 3094 +6931 2 2 2 2 2463 4081 2464 +6932 2 2 2 2 3604 3750 3426 +6933 2 2 2 2 2533 4070 3983 +6934 2 2 2 2 174 3746 173 +6935 2 2 2 2 2848 2850 2641 +6936 2 2 2 2 2894 2895 2893 +6937 2 2 2 2 2774 3817 3567 +6938 2 2 2 2 3907 3989 3094 +6939 2 2 2 2 2607 3914 3874 +6940 2 2 2 2 2423 3597 393 +6941 2 2 2 2 2602 3882 3738 +6942 2 2 2 2 2703 4109 3762 +6943 2 2 2 2 3097 4029 3727 +6944 2 2 2 2 2458 2460 2459 +6945 2 2 2 2 3372 4129 2559 +6946 2 2 2 2 2524 3663 3662 +6947 2 2 2 2 3009 4146 3215 +6948 2 2 2 2 3027 4020 3107 +6949 2 2 2 2 61 3627 60 +6950 2 2 2 2 2477 3674 2506 +6951 2 2 2 2 3099 4137 3056 +6952 2 2 2 2 427 2626 428 +6953 2 2 2 2 2460 2462 2461 +6954 2 2 2 2 3315 3922 3528 +6955 2 2 2 2 3332 4176 2823 +6956 2 2 2 2 401 3765 402 +6957 2 2 2 2 3858 4145 3423 +6958 2 2 2 2 2825 2827 2826 +6959 2 2 2 2 3611 4162 2786 +6960 2 2 2 2 3160 3681 3680 +6961 2 2 2 2 50 3769 49 +6962 2 2 2 2 2555 3770 2556 +6963 2 2 2 2 3927 3928 3292 +6964 2 2 2 2 2836 4061 3934 +6965 2 2 2 2 3612 3905 2368 +6966 2 2 2 2 2619 3793 2516 +6967 2 2 2 2 45 3632 44 +6968 2 2 2 2 3946 4085 2599 +6969 2 2 2 2 287 3633 286 +6970 2 2 2 2 156 3775 155 +6971 2 2 2 2 414 3961 6 +6972 2 2 2 2 6 3961 415 +6973 2 2 2 2 2478 2480 2479 +6974 2 2 2 2 2436 3811 3451 +6975 2 2 2 2 2403 3760 3643 +6976 2 2 2 2 2936 3965 3709 +6977 2 2 2 2 3439 3713 3438 +6978 2 2 2 2 3213 3215 3038 +6979 2 2 2 2 2464 2466 2465 +6980 2 2 2 2 2776 3710 3478 +6981 2 2 2 2 154 3634 2410 +6982 2 2 2 2 73 3784 72 +6983 2 2 2 2 2480 2481 2479 +6984 2 2 2 2 2514 2657 2511 +6985 2 2 2 2 3033 3693 3204 +6986 2 2 2 2 3303 3304 3301 +6987 2 2 2 2 3711 3806 3413 +6988 2 2 2 2 3595 4134 3521 +6989 2 2 2 2 2404 4117 3331 +6990 2 2 2 2 3066 4187 3618 +6991 2 2 2 2 2420 4009 2606 +6992 2 2 2 2 3029 4034 3186 +6993 2 2 2 2 2814 3964 3668 +6994 2 2 2 2 2437 3786 399 +6995 2 2 2 2 400 3786 2387 +6996 2 2 2 2 3478 3707 2776 +6997 2 2 2 2 3509 4174 3819 +6998 2 2 2 2 2558 4108 3864 +6999 2 2 2 2 3353 3781 3352 +7000 2 2 2 2 3465 3591 2764 +7001 2 2 2 2 2344 3791 3256 +7002 2 2 2 2 2466 2468 2467 +7003 2 2 2 2 3144 4087 3612 +7004 2 2 2 2 2813 4175 2799 +7005 2 2 2 2 3408 3824 2361 +7006 2 2 2 2 3340 3798 2335 +7007 2 2 2 2 2817 4063 3319 +7008 2 2 2 2 2438 3812 3547 +7009 2 2 2 2 3287 3870 3667 +7010 2 2 2 2 4054 4155 2769 +7011 2 2 2 2 3794 3922 3316 +7012 2 2 2 2 3302 3731 3532 +7013 2 2 2 2 2713 2716 2715 +7014 2 2 2 2 2338 3796 172 +7015 2 2 2 2 2928 2931 2930 +7016 2 2 2 2 3078 3753 3588 +7017 2 2 2 2 385 2417 386 +7018 2 2 2 2 424 2418 425 +7019 2 2 2 2 2468 2470 2469 +7020 2 2 2 2 3719 4112 3039 +7021 2 2 2 2 3090 4044 3852 +7022 2 2 2 2 2926 2928 2927 +7023 2 2 2 2 385 2606 2417 +7024 2 2 2 2 360 3641 2440 +7025 2 2 2 2 2924 2926 2925 +7026 2 2 2 2 3381 3382 3095 +7027 2 2 2 2 3417 3880 3424 +7028 2 2 2 2 2408 3880 3616 +7029 2 2 2 2 2379 3897 3751 +7030 2 2 2 2 65 3642 64 +7031 2 2 2 2 354 3643 353 +7032 2 2 2 2 337 3644 336 +7033 2 2 2 2 342 3645 341 +7034 2 2 2 2 356 3646 355 +7035 2 2 2 2 285 3647 284 +7036 2 2 2 2 273 3648 272 +7037 2 2 2 2 142 3649 141 +7038 2 2 2 2 3417 3992 3880 +7039 2 2 2 2 298 3650 2365 +7040 2 2 2 2 3115 4039 3045 +7041 2 2 2 2 2922 2924 2923 +7042 2 2 2 2 3722 4009 2420 +7043 2 2 2 2 2571 4128 2589 +7044 2 2 2 2 76 3655 75 +7045 2 2 2 2 2833 4130 2601 +7046 2 2 2 2 3097 4161 3072 +7047 2 2 2 2 3166 3709 3708 +7048 2 2 2 2 2869 2871 2870 +7049 2 2 2 2 3523 3524 3522 +7050 2 2 2 2 2682 2691 2690 +7051 2 2 2 2 2862 2863 2861 +7052 2 2 2 2 2398 3657 3368 +7053 2 2 2 2 2433 3658 3120 +7054 2 2 2 2 2329 3659 3410 +7055 2 2 2 2 3573 3660 2412 +7056 2 2 2 2 430 2658 2444 +7057 2 2 2 2 3652 3653 2445 +7058 2 2 2 2 2772 3830 2737 +7059 2 2 2 2 2665 3844 2388 +7060 2 2 2 2 3061 4142 3741 +7061 2 2 2 2 3443 3713 3439 +7062 2 2 2 2 3650 3911 3083 +7063 2 2 2 2 2476 2478 2477 +7064 2 2 2 2 185 3884 3593 +7065 2 2 2 2 3592 3885 70 +7066 2 2 2 2 3076 4185 2911 +7067 2 2 2 2 243 3823 242 +7068 2 2 2 2 3211 4146 3011 +7069 2 2 2 2 2472 2474 2473 +7070 2 2 2 2 3928 4123 3292 +7071 2 2 2 2 3655 3991 2805 +7072 2 2 2 2 3032 3695 3242 +7073 2 2 2 2 3123 3904 3638 +7074 2 2 2 2 2441 3826 397 +7075 2 2 2 2 398 3826 2437 +7076 2 2 2 2 215 3828 214 +7077 2 2 2 2 3054 3898 3408 +7078 2 2 2 2 3408 3984 3054 +7079 2 2 2 2 3594 3870 3278 +7080 2 2 2 2 2716 2718 2717 +7081 2 2 2 2 3451 3857 2351 +7082 2 2 2 2 2698 4100 2700 +7083 2 2 2 2 2497 3758 2500 +7084 2 2 2 2 2778 3678 3471 +7085 2 2 2 2 422 2416 423 +7086 2 2 2 2 387 2415 388 +7087 2 2 2 2 3222 4126 2551 +7088 2 2 2 2 3751 4046 2379 +7089 2 2 2 2 3707 4172 2748 +7090 2 2 2 2 3057 3671 3369 +7091 2 2 2 2 3040 4148 3691 +7092 2 2 2 2 2611 2654 2653 +7093 2 2 2 2 3271 3273 3272 +7094 2 2 2 2 3431 3923 2946 +7095 2 2 2 2 2919 2922 2921 +7096 2 2 2 2 2652 3958 2446 +7097 2 2 2 2 380 3652 2445 +7098 2 2 2 2 3268 3271 3270 +7099 2 2 2 2 3118 3971 2519 +7100 2 2 2 2 241 3666 2984 +7101 2 2 2 2 3492 3816 3500 +7102 2 2 2 2 2672 3844 2675 +7103 2 2 2 2 2590 3844 2665 +7104 2 2 2 2 179 3667 178 +7105 2 2 2 2 3266 3268 3267 +7106 2 2 2 2 2687 2688 2686 +7107 2 2 2 2 3560 3611 2786 +7108 2 2 2 2 96 3668 95 +7109 2 2 2 2 4005 4137 3099 +7110 2 2 2 2 2432 3855 3225 +7111 2 2 2 2 3622 3942 2349 +7112 2 2 2 2 3461 3942 3624 +7113 2 2 2 2 421 3610 422 +7114 2 2 2 2 3597 3651 394 +7115 2 2 2 2 169 3862 168 +7116 2 2 2 2 2353 4004 3623 +7117 2 2 2 2 3433 3955 3377 +7118 2 2 2 2 3429 3955 3428 +7119 2 2 2 2 2649 3596 2856 +7120 2 2 2 2 394 3651 395 +7121 2 2 2 2 379 3652 380 +7122 2 2 2 2 3089 3905 3612 +7123 2 2 2 2 3593 3884 3286 +7124 2 2 2 2 2798 3885 3592 +7125 2 2 2 2 3604 3748 3088 +7126 2 2 2 2 2552 3879 3436 +7127 2 2 2 2 3346 3673 2664 +7128 2 2 2 2 2407 3884 186 +7129 2 2 2 2 69 3885 2356 +7130 2 2 2 2 2655 3628 2418 +7131 2 2 2 2 3407 3984 3408 +7132 2 2 2 2 3616 3984 3406 +7133 2 2 2 2 381 2445 2439 +7134 2 2 2 2 3182 3897 2379 +7135 2 2 2 2 3547 3938 2383 +7136 2 2 2 2 2610 2655 2416 +7137 2 2 2 2 2784 4101 3925 +7138 2 2 2 2 3500 3773 3492 +7139 2 2 2 2 3612 4087 3089 +7140 2 2 2 2 2606 4009 2593 +7141 2 2 2 2 3160 3679 2954 +7142 2 2 2 2 2800 3871 3656 +7143 2 2 2 2 3929 4157 3151 +7144 2 2 2 2 2920 3911 300 +7145 2 2 2 2 3264 3266 3265 +7146 2 2 2 2 2685 2686 2684 +7147 2 2 2 2 3375 4004 3374 +7148 2 2 2 2 3341 3923 3715 +7149 2 2 2 2 2491 3614 2493 +7150 2 2 2 2 2631 4102 2630 +7151 2 2 2 2 2780 3843 2755 +7152 2 2 2 2 2738 4192 3603 +7153 2 2 2 2 2587 3946 2599 +7154 2 2 2 2 2425 2658 429 +7155 2 2 2 2 2337 3962 183 +7156 2 2 2 2 3103 3952 3368 +7157 2 2 2 2 3582 4103 47 +7158 2 2 2 2 2651 4171 2569 +7159 2 2 2 2 3095 3989 3907 +7160 2 2 2 2 2862 3760 2863 +7161 2 2 2 2 3335 3987 3279 +7162 2 2 2 2 3227 3961 2443 +7163 2 2 2 2 2568 4055 3998 +7164 2 2 2 2 3339 4042 3340 +7165 2 2 2 2 2828 4119 2827 +7166 2 2 2 2 3671 4051 2884 +7167 2 2 2 2 170 4041 2414 +7168 2 2 2 2 2379 4046 3245 +7169 2 2 2 2 2651 4103 3582 +7170 2 2 2 2 175 4058 174 +7171 2 2 2 2 181 4117 2404 +7172 2 2 2 2 216 4067 215 +7173 2 2 2 2 46 4103 2424 +7174 2 2 2 2 74 4076 73 +7175 2 2 2 2 2389 4093 404 +7176 2 2 2 2 3256 4078 3255 +7177 2 2 2 2 3577 4060 2777 +7178 2 2 2 2 3620 3631 3134 +7179 2 2 2 2 3567 3568 2774 +7180 2 2 2 2 3025 4152 3687 +7181 2 2 2 2 2854 3365 2856 +7182 2 2 2 2 3222 3370 3218 +7183 2 2 2 2 3521 3569 3518 +7184 2 2 2 2 3509 3562 3507 +7185 2 2 2 2 3567 3570 3503 +7186 2 2 2 2 3490 3572 3492 +7187 2 2 2 2 3463 3556 3466 +7188 2 2 2 2 3498 3571 3496 +7189 2 2 2 2 3484 3563 3487 +7190 2 2 2 2 2678 2843 2681 +7191 2 2 2 2 3262 3334 3260 +7192 2 2 2 2 3068 3755 3606 +7193 2 2 2 2 2661 3999 3769 +7194 2 2 2 2 423 2655 424 +7195 2 2 2 2 3308 3732 3731 +7196 2 2 2 2 3616 3881 3054 +7197 2 2 2 2 2954 3681 3160 +7198 2 2 2 2 405 4093 2665 +7199 2 2 2 2 3536 4095 3553 +7200 2 2 2 2 2642 3684 2855 +7201 2 2 2 2 403 3716 2389 +7202 2 2 2 2 3910 3959 2974 +7203 2 2 2 2 2835 2837 2604 +7204 2 2 2 2 3371 3757 3370 +7205 2 2 2 2 167 3717 2373 +7206 2 2 2 2 2665 4093 2618 +7207 2 2 2 2 2901 2905 2904 +7208 2 2 2 2 2799 4175 3460 +7209 2 2 2 2 3070 4017 3640 +7210 2 2 2 2 3599 3896 3075 +7211 2 2 2 2 3606 3741 3068 +7212 2 2 2 2 3254 4050 3814 +7213 2 2 2 2 2476 4110 3665 +7214 2 2 2 2 3325 4121 3270 +7215 2 2 2 2 2556 3855 3435 +7216 2 2 2 2 3180 4064 2957 +7217 2 2 2 2 3523 3660 3524 +7218 2 2 2 2 3431 3924 3092 +7219 2 2 2 2 3249 4089 3253 +7220 2 2 2 2 2976 2979 2978 +7221 2 2 2 2 2871 3759 2870 +7222 2 2 2 2 2691 3761 2690 +7223 2 2 2 2 3281 3987 3594 +7224 2 2 2 2 2563 3721 2564 +7225 2 2 2 2 3888 4095 2779 +7226 2 2 2 2 3597 3713 3443 +7227 2 2 2 2 3039 4112 3908 +7228 2 2 2 2 3029 3889 3799 +7229 2 2 2 2 3460 3637 2799 +7230 2 2 2 2 3763 4021 3027 +7231 2 2 2 2 3708 3709 2954 +7232 2 2 2 2 4008 4165 2782 +7233 2 2 2 2 2583 3723 2597 +7234 2 2 2 2 2406 3778 3592 +7235 2 2 2 2 3593 3777 2337 +7236 2 2 2 2 418 3874 419 +7237 2 2 2 2 3637 3720 2786 +7238 2 2 2 2 3643 3760 2862 +7239 2 2 2 2 3210 3211 3049 +7240 2 2 2 2 2972 4113 3719 +7241 2 2 2 2 3210 4158 3211 +7242 2 2 2 2 254 3727 253 +7243 2 2 2 2 3679 3708 2954 +7244 2 2 2 2 2471 4057 2472 +7245 2 2 2 2 2608 3735 3117 +7246 2 2 2 2 3501 3734 3322 +7247 2 2 2 2 3052 3894 3808 +7248 2 2 2 2 3445 3985 2586 +7249 2 2 2 2 3619 4044 3090 +7250 2 2 2 2 3698 4153 3110 +7251 2 2 2 2 2976 3100 2979 +7252 2 2 2 2 3305 3953 3493 +7253 2 2 2 2 3453 3729 3455 +7254 2 2 2 2 4116 4184 2646 +7255 2 2 2 2 2589 4128 3716 +7256 2 2 2 2 3831 3860 2810 +7257 2 2 2 2 2886 2887 2885 +7258 2 2 2 2 3026 3849 3020 +7259 2 2 2 2 3585 3773 2781 +7260 2 2 2 2 4 4032 361 +7261 2 2 2 2 3772 3795 2766 +7262 2 2 2 2 387 2654 2415 +7263 2 2 2 2 2562 3956 3845 +7264 2 2 2 2 3287 4160 3870 +7265 2 2 2 2 3044 3789 3377 +7266 2 2 2 2 3603 4165 2738 +7267 2 2 2 2 3118 4065 2935 +7268 2 2 2 2 2773 4174 3509 +7269 2 2 2 2 3314 3317 3316 +7270 2 2 2 2 3740 3750 3061 +7271 2 2 2 2 3327 4041 3796 +7272 2 2 2 2 3321 3909 3501 +7273 2 2 2 2 2567 3950 2671 +7274 2 2 2 2 2500 3758 2510 +7275 2 2 2 2 3108 3733 2838 +7276 2 2 2 2 392 3785 2423 +7277 2 2 2 2 5 4036 396 +7278 2 2 2 2 43 4037 3 +7279 2 2 2 2 2894 3809 3808 +7280 2 2 2 2 2838 3600 2837 +7281 2 2 2 2 3528 3922 3312 +7282 2 2 2 2 3786 3985 2387 +7283 2 2 2 2 3904 4099 2795 +7284 2 2 2 2 431 4032 4 +7285 2 2 2 2 3413 3806 2908 +7286 2 2 2 2 2338 3797 3589 +7287 2 2 2 2 3909 3978 2803 +7288 2 2 2 2 2888 2889 2887 +7289 2 2 2 2 3219 4124 3220 +7290 2 2 2 2 3990 4147 3055 +7291 2 2 2 2 3290 4193 3284 +7292 2 2 2 2 3251 4096 2974 +7293 2 2 2 2 2586 3985 3442 +7294 2 2 2 2 3673 3926 2559 +7295 2 2 2 2 2456 4129 3372 +7296 2 2 2 2 3876 4006 2706 +7297 2 2 2 2 3960 4028 3058 +7298 2 2 2 2 2905 2907 2906 +7299 2 2 2 2 2907 2910 2909 +7300 2 2 2 2 2910 2912 2911 +7301 2 2 2 2 2912 2915 2914 +7302 2 2 2 2 3065 3966 3886 +7303 2 2 2 2 3332 4123 2839 +7304 2 2 2 2 104 3743 103 +7305 2 2 2 2 2915 2917 2916 +7306 2 2 2 2 2949 2950 2948 +7307 2 2 2 2 395 4036 5 +7308 2 2 2 2 3 4037 379 +7309 2 2 2 2 3672 3779 2957 +7310 2 2 2 2 2729 2730 2727 +7311 2 2 2 2 2979 2981 2980 +7312 2 2 2 2 2981 2983 2982 +7313 2 2 2 2 3989 4025 2947 +7314 2 2 2 2 2983 2986 2985 +7315 2 2 2 2 3088 3749 3604 +7316 2 2 2 2 2986 2989 2987 +7317 2 2 2 2 3094 3929 3151 +7318 2 2 2 2 3253 3780 3254 +7319 2 2 2 2 3650 3892 2365 +7320 2 2 2 2 2989 2992 2991 +7321 2 2 2 2 2792 3876 2704 +7322 2 2 2 2 2781 3586 3585 +7323 2 2 2 2 2776 4168 3676 +7324 2 2 2 2 2992 2994 2993 +7325 2 2 2 2 2478 2479 2477 +7326 2 2 2 2 2994 2997 2996 +7327 2 2 2 2 2423 3713 3597 +7328 2 2 2 2 173 3746 2338 +7329 2 2 2 2 2997 2999 2998 +7330 2 2 2 2 2999 3001 3000 +7331 2 2 2 2 2990 3111 3084 +7332 2 2 2 2 3061 3750 3749 +7333 2 2 2 2 3001 3004 3003 +7334 2 2 2 2 2417 2654 386 +7335 2 2 2 2 3004 3006 3005 +7336 2 2 2 2 3006 3008 3007 +7337 2 2 2 2 2786 3720 3560 +7338 2 2 2 2 3051 3747 3662 +7339 2 2 2 2 3008 3010 3009 +7340 2 2 2 2 3917 4098 3804 +7341 2 2 2 2 3010 3012 3011 +7342 2 2 2 2 2467 3868 2465 +7343 2 2 2 2 3012 3014 3013 +7344 2 2 2 2 3014 3016 3015 +7345 2 2 2 2 2935 3971 3118 +7346 2 2 2 2 3302 3953 3731 +7347 2 2 2 2 3016 3018 3017 +7348 2 2 2 2 3168 3846 3167 +7349 2 2 2 2 3227 3878 416 +7350 2 2 2 2 3509 4115 2773 +7351 2 2 2 2 2666 3754 2585 +7352 2 2 2 2 3018 3020 3019 +7353 2 2 2 2 2808 3587 2763 +7354 2 2 2 2 3020 3022 3021 +7355 2 2 2 2 3103 4132 3952 +7356 2 2 2 2 3587 3714 2787 +7357 2 2 2 2 2991 4178 3741 +7358 2 2 2 2 3401 3930 3043 +7359 2 2 2 2 3022 3024 3023 +7360 2 2 2 2 3024 3035 3025 +7361 2 2 2 2 2840 3920 3328 +7362 2 2 2 2 3959 4089 3251 +7363 2 2 2 2 3035 3108 3036 +7364 2 2 2 2 3312 3794 3527 +7365 2 2 2 2 3108 3602 3109 +7366 2 2 2 2 2542 3752 3605 +7367 2 2 2 2 425 3664 426 +7368 2 2 2 2 2631 2634 2633 +7369 2 2 2 2 3076 3247 3246 +7370 2 2 2 2 382 3722 383 +7371 2 2 2 2 2704 2706 2705 +7372 2 2 2 2 3296 3297 3295 +7373 2 2 2 2 3753 3867 2920 +7374 2 2 2 2 3053 3733 3035 +7375 2 2 2 2 2932 3814 3813 +7376 2 2 2 2 3310 4069 2820 +7377 2 2 2 2 2806 3739 2526 +7378 2 2 2 2 3328 3920 2836 +7379 2 2 2 2 3055 4147 3915 +7380 2 2 2 2 3824 4177 3087 +7381 2 2 2 2 2615 2617 2592 +7382 2 2 2 2 2387 3765 401 +7383 2 2 2 2 3693 4149 3021 +7384 2 2 2 2 3586 4182 2761 +7385 2 2 2 2 2818 3636 2602 +7386 2 2 2 2 2607 4088 2584 +7387 2 2 2 2 49 3769 2395 +7388 2 2 2 2 2706 2708 2707 +7389 2 2 2 2 2584 3770 2555 +7390 2 2 2 2 3071 4169 3229 +7391 2 2 2 2 2671 3950 3621 +7392 2 2 2 2 3318 3863 3794 +7393 2 2 2 2 3041 4152 3698 +7394 2 2 2 2 3279 3987 3833 +7395 2 2 2 2 3270 4121 3777 +7396 2 2 2 2 2732 2733 2730 +7397 2 2 2 2 3314 3324 3317 +7398 2 2 2 2 3974 3975 2902 +7399 2 2 2 2 3164 3708 3162 +7400 2 2 2 2 3538 3580 3564 +7401 2 2 2 2 3469 3471 3468 +7402 2 2 2 2 3159 3160 3158 +7403 2 2 2 2 3476 3710 3557 +7404 2 2 2 2 3480 3706 3477 +7405 2 2 2 2 3173 3704 3175 +7406 2 2 2 2 3250 3251 3249 +7407 2 2 2 2 3464 3705 3565 +7408 2 2 2 2 3360 3581 3358 +7409 2 2 2 2 3379 3382 3381 +7410 2 2 2 2 3149 3151 3150 +7411 2 2 2 2 3482 3703 3485 +7412 2 2 2 2 3155 3725 3337 +7413 2 2 2 2 3490 3491 3489 +7414 2 2 2 2 3495 3497 3496 +7415 2 2 2 2 3422 3423 3420 +7416 2 2 2 2 3126 3639 3125 +7417 2 2 2 2 3129 3766 3128 +7418 2 2 2 2 3136 3620 3134 +7419 2 2 2 2 2678 2680 2679 +7420 2 2 2 2 3120 3702 2876 +7421 2 2 2 2 3394 3396 3395 +7422 2 2 2 2 2845 2847 2846 +7423 2 2 2 2 3219 3220 3218 +7424 2 2 2 2 2854 2855 2853 +7425 2 2 2 2 3258 3261 3260 +7426 2 2 2 2 3343 3626 3344 +7427 2 2 2 2 3447 3700 3448 +7428 2 2 2 2 3189 3699 3257 +7429 2 2 2 2 2859 2860 2858 +7430 2 2 2 2 3208 3209 3206 +7431 2 2 2 2 3232 3697 3190 +7432 2 2 2 2 3235 3236 3234 +7433 2 2 2 2 3240 3696 3238 +7434 2 2 2 2 2866 2868 2867 +7435 2 2 2 2 3244 3694 3241 +7436 2 2 2 2 3197 3613 3198 +7437 2 2 2 2 3202 3204 3203 +7438 2 2 2 2 3198 3690 3200 +7439 2 2 2 2 3203 3692 3244 +7440 2 2 2 2 3404 3689 2866 +7441 2 2 2 2 3241 3242 3240 +7442 2 2 2 2 3184 3186 3185 +7443 2 2 2 2 3238 3688 3235 +7444 2 2 2 2 3234 3686 3232 +7445 2 2 2 2 3190 3191 3189 +7446 2 2 2 2 3257 3685 3258 +7447 2 2 2 2 3448 3590 3364 +7448 2 2 2 2 2853 3684 2845 +7449 2 2 2 2 2876 2878 2877 +7450 2 2 2 2 3484 3486 3482 +7451 2 2 2 2 3246 3247 3122 +7452 2 2 2 2 3154 3726 3155 +7453 2 2 2 2 3485 3574 3573 +7454 2 2 2 2 3519 3520 3518 +7455 2 2 2 2 3148 3683 3149 +7456 2 2 2 2 3505 3508 3507 +7457 2 2 2 2 3358 3682 3357 +7458 2 2 2 2 3410 3411 3385 +7459 2 2 2 2 3463 3465 3464 +7460 2 2 2 2 3175 3177 3176 +7461 2 2 2 2 3565 3566 3503 +7462 2 2 2 2 3171 3617 3173 +7463 2 2 2 2 3575 3577 3576 +7464 2 2 2 2 3477 3478 3476 +7465 2 2 2 2 3158 3680 3170 +7466 2 2 2 2 3468 3677 3470 +7467 2 2 2 2 3162 3679 3159 +7468 2 2 2 2 3557 3675 3538 +7469 2 2 2 2 3165 3166 3164 +7470 2 2 2 2 2734 2735 2733 +7471 2 2 2 2 2736 2737 2735 +7472 2 2 2 2 3711 3788 3073 +7473 2 2 2 2 2938 3899 3681 +7474 2 2 2 2 2738 2739 2737 +7475 2 2 2 2 3081 3804 3082 +7476 2 2 2 2 3196 3742 3139 +7477 2 2 2 2 3792 3908 2974 +7478 2 2 2 2 3759 3760 2403 +7479 2 2 2 2 2740 2741 2739 +7480 2 2 2 2 3317 3319 3318 +7481 2 2 2 2 2375 3775 156 +7482 2 2 2 2 2742 2743 2741 +7483 2 2 2 2 2804 3839 2713 +7484 2 2 2 2 2687 3831 2688 +7485 2 2 2 2 3794 3863 3527 +7486 2 2 2 2 2820 4069 3330 +7487 2 2 2 2 3554 3811 2436 +7488 2 2 2 2 2390 3875 390 +7489 2 2 2 2 2744 2745 2743 +7490 2 2 2 2 3319 3321 3320 +7491 2 2 2 2 3616 3880 3096 +7492 2 2 2 2 2746 2747 2745 +7493 2 2 2 2 2427 3968 3627 +7494 2 2 2 2 2748 2749 2747 +7495 2 2 2 2 3623 4004 3099 +7496 2 2 2 2 2375 3863 3776 +7497 2 2 2 2 4002 4025 3382 +7498 2 2 2 2 2750 2751 2749 +7499 2 2 2 2 72 3784 2406 +7500 2 2 2 2 3757 3957 3343 +7501 2 2 2 2 2752 2753 2751 +7502 2 2 2 2 2754 2755 2753 +7503 2 2 2 2 2531 4108 3856 +7504 2 2 2 2 2609 3954 3853 +7505 2 2 2 2 420 3914 2391 +7506 2 2 2 2 2756 2757 2755 +7507 2 2 2 2 3610 3986 2416 +7508 2 2 2 2 428 2626 2425 +7509 2 2 2 2 2465 3868 2527 +7510 2 2 2 2 2634 2636 2635 +7511 2 2 2 2 399 3786 400 +7512 2 2 2 2 2758 2760 2757 +7513 2 2 2 2 3635 3734 3495 +7514 2 2 2 2 2761 2770 2760 +7515 2 2 2 2 2636 2638 2637 +7516 2 2 2 2 2804 3942 3622 +7517 2 2 2 2 3512 3840 3511 +7518 2 2 2 2 2603 2605 2509 +7519 2 2 2 2 2771 2801 2770 +7520 2 2 2 2 2562 3845 2660 +7521 2 2 2 2 3972 4030 2519 +7522 2 2 2 2 3304 3307 3306 +7523 2 2 2 2 2638 2643 2639 +7524 2 2 2 2 416 3878 417 +7525 2 2 2 2 2802 2815 2801 +7526 2 2 2 2 3356 3791 2344 +7527 2 2 2 2 2610 3986 2594 +7528 2 2 2 2 3334 3890 2407 +7529 2 2 2 2 2356 3891 2843 +7530 2 2 2 2 3046 4143 3783 +7531 2 2 2 2 3222 3371 3370 +7532 2 2 2 2 388 3932 389 +7533 2 2 2 2 2816 2818 2815 +7534 2 2 2 2 3143 3966 3065 +7535 2 2 2 2 3091 3745 3715 +7536 2 2 2 2 2819 2821 2818 +7537 2 2 2 2 3037 4145 3858 +7538 2 2 2 2 3615 4169 3071 +7539 2 2 2 2 389 3932 2390 +7540 2 2 2 2 2729 4031 2800 +7541 2 2 2 2 3204 3918 3033 +7542 2 2 2 2 2335 3798 3194 +7543 2 2 2 2 2778 4167 3678 +7544 2 2 2 2 2822 2833 2821 +7545 2 2 2 2 3666 3805 2984 +7546 2 2 2 2 2808 3873 2568 +7547 2 2 2 2 2746 4167 3676 +7548 2 2 2 2 2906 4191 3788 +7549 2 2 2 2 2824 3834 2533 +7550 2 2 2 2 3624 3812 2438 +7551 2 2 2 2 4105 4136 3050 +7552 2 2 2 2 2951 4040 3929 +7553 2 2 2 2 2895 2898 2897 +7554 2 2 2 2 3756 3803 2560 +7555 2 2 2 2 3947 4105 2962 +7556 2 2 2 2 3978 4183 2803 +7557 2 2 2 2 3045 3670 3115 +7558 2 2 2 2 172 3796 171 +7559 2 2 2 2 3186 3915 3029 +7560 2 2 2 2 2961 2965 2963 +7561 2 2 2 2 2649 3815 3590 +7562 2 2 2 2 3527 3863 2375 +7563 2 2 2 2 3691 4149 3033 +7564 2 2 2 2 3802 3904 2392 +7565 2 2 2 2 2390 4085 3946 +7566 2 2 2 2 2421 2626 427 +7567 2 2 2 2 3714 3790 2772 +7568 2 2 2 2 391 3785 392 +7569 2 2 2 2 2761 4180 3586 +7570 2 2 2 2 2774 3707 3706 +7571 2 2 2 2 2624 3853 2617 +7572 2 2 2 2 2423 3785 3723 +7573 2 2 2 2 3391 3737 3736 +7574 2 2 2 2 3601 3802 2392 +7575 2 2 2 2 4068 4105 3050 +7576 2 2 2 2 3870 4160 3278 +7577 2 2 2 2 383 3722 2420 +7578 2 2 2 2 3068 4178 3782 +7579 2 2 2 2 2838 3733 3600 +7580 2 2 2 2 3424 3880 2408 +7581 2 2 2 2 3695 4151 3031 +7582 2 2 2 2 3761 3902 2370 +7583 2 2 2 2 2477 2506 2475 +7584 2 2 2 2 3740 3741 3606 +7585 2 2 2 2 2422 3878 3228 +7586 2 2 2 2 2680 2682 2679 +7587 2 2 2 2 3490 3492 3491 +7588 2 2 2 2 3220 3222 3218 +7589 2 2 2 2 2854 2856 2855 +7590 2 2 2 2 2859 2861 2860 +7591 2 2 2 2 2878 2879 2877 +7592 2 2 2 2 3497 3498 3496 +7593 2 2 2 2 3520 3521 3518 +7594 2 2 2 2 2678 2681 2680 +7595 2 2 2 2 3508 3509 3507 +7596 2 2 2 2 2847 2848 2846 +7597 2 2 2 2 3566 3567 3503 +7598 2 2 2 2 3261 3262 3260 +7599 2 2 2 2 3165 3167 3166 +7600 2 2 2 2 2868 2869 2867 +7601 2 2 2 2 3177 3178 3176 +7602 2 2 2 2 3463 3466 3465 +7603 2 2 2 2 3519 3522 3520 +7604 2 2 2 2 3484 3487 3486 +7605 2 2 2 2 3073 3806 3711 +7606 2 2 2 2 3656 3871 3512 +7607 2 2 2 2 2540 3854 3107 +7608 2 2 2 2 2932 3813 3647 +7609 2 2 2 2 2610 3628 2655 +7610 2 2 2 2 3783 4187 3066 +7611 2 2 2 2 3774 4182 2781 +7612 2 2 2 2 3309 3862 3728 +7613 2 2 2 2 3728 3862 2414 +7614 2 2 2 2 3041 3697 3686 +7615 2 2 2 2 3838 4079 2709 +7616 2 2 2 2 3754 3822 2585 +7617 2 2 2 2 3065 3886 3003 +7618 2 2 2 2 3744 4154 2640 +7619 2 2 2 2 3693 4150 3032 +7620 2 2 2 2 3580 3676 2778 +7621 2 2 2 2 2940 2941 2939 +7622 2 2 2 2 2585 3822 2607 +7623 2 2 2 2 3784 3860 2406 +7624 2 2 2 2 2720 2722 2718 +7625 2 2 2 2 2917 3832 3079 +7626 2 2 2 2 2361 3823 243 +7627 2 2 2 2 3889 4148 3040 +7628 2 2 2 2 3292 3293 3289 +7629 2 2 2 2 2898 2900 2899 +7630 2 2 2 2 2789 3802 3601 +7631 2 2 2 2 3886 3966 3615 +7632 2 2 2 2 2697 3991 3638 +7633 2 2 2 2 2965 2967 2966 +7634 2 2 2 2 3741 4142 2991 +7635 2 2 2 2 3011 4059 3211 +7636 2 2 2 2 2391 3914 3822 +7637 2 2 2 2 3102 4022 3763 +7638 2 2 2 2 2392 3904 3123 +7639 2 2 2 2 397 3826 398 +7640 2 2 2 2 214 3828 2409 +7641 2 2 2 2 3769 3999 2395 +7642 2 2 2 2 2967 2975 2968 +7643 2 2 2 2 3052 3808 3807 +7644 2 2 2 2 3362 3917 3360 +7645 2 2 2 2 2514 3859 2657 +7646 2 2 2 2 2698 2700 2699 +7647 2 2 2 2 3200 3918 3202 +7648 2 2 2 2 2975 3100 2976 +7649 2 2 2 2 3627 3968 3221 +7650 2 2 2 2 3553 3888 2723 +7651 2 2 2 2 2541 2591 2539 +7652 2 2 2 2 3830 3906 2785 +7653 2 2 2 2 2982 3980 3086 +7654 2 2 2 2 2972 3719 3581 +7655 2 2 2 2 2365 3892 3362 +7656 2 2 2 2 2559 3926 3626 +7657 2 2 2 2 3075 3897 3599 +7658 2 2 2 2 3525 3913 2769 +7659 2 2 2 2 3659 3672 3410 +7660 2 2 2 2 2822 4176 3332 +7661 2 2 2 2 3096 4111 3881 +7662 2 2 2 2 3319 4063 3321 +7663 2 2 2 2 3150 4157 3156 +7664 2 2 2 2 2820 4186 3945 +7665 2 2 2 2 3731 3953 3306 +7666 2 2 2 2 2777 4166 3925 +7667 2 2 2 2 3558 4156 3473 +7668 2 2 2 2 3564 3939 3469 +7669 2 2 2 2 2946 3923 3341 +7670 2 2 2 2 417 3878 2422 +7671 2 2 2 2 2795 4100 2698 +7672 2 2 2 2 3500 3816 3498 +7673 2 2 2 2 3487 3818 3585 +7674 2 2 2 2 3107 4020 3028 +7675 2 2 2 2 2860 3995 2647 +7676 2 2 2 2 2385 3964 3661 +7677 2 2 2 2 2675 3844 2590 +7678 2 2 2 2 3932 4085 2390 +7679 2 2 2 2 3745 3788 3711 +7680 2 2 2 2 3137 3900 3136 +7681 2 2 2 2 4023 4161 3097 +7682 2 2 2 2 3782 4143 3046 +7683 2 2 2 2 3331 4164 2404 +7684 2 2 2 2 3796 4041 171 +7685 2 2 2 2 3307 3310 3308 +7686 2 2 2 2 3059 3919 3398 +7687 2 2 2 2 2723 2724 2722 +7688 2 2 2 2 3849 3850 3053 +7689 2 2 2 2 3225 3855 3226 +7690 2 2 2 2 2349 3942 3461 +7691 2 2 2 2 2418 3664 425 +7692 2 2 2 2 3060 3848 2900 +7693 2 2 2 2 3630 3752 2538 +7694 2 2 2 2 3920 4061 2836 +7695 2 2 2 2 2528 2530 2522 +7696 2 2 2 2 2725 2726 2724 +7697 2 2 2 2 2551 4126 3669 +7698 2 2 2 2 3310 3313 3311 +7699 2 2 2 2 3778 3860 3831 +7700 2 2 2 2 2414 3862 169 +7701 2 2 2 2 2956 3118 3117 +7702 2 2 2 2 3726 4040 2958 +7703 2 2 2 2 2786 4162 3637 +7704 2 2 2 2 3105 3841 3617 +7705 2 2 2 2 3982 4008 3729 +7706 2 2 2 2 3428 3955 3433 +7707 2 2 2 2 3313 3324 3314 +7708 2 2 2 2 2650 3958 2652 +7709 2 2 2 2 2595 2596 2530 +7710 2 2 2 2 3389 3947 3391 +7711 2 2 2 2 2357 3870 3594 +7712 2 2 2 2 3442 3985 3786 +7713 2 2 2 2 2961 3114 2965 +7714 2 2 2 2 3778 3831 2687 +7715 2 2 2 2 2803 4183 3774 +7716 2 2 2 2 2766 4179 3913 +7717 2 2 2 2 3435 3879 2552 +7718 2 2 2 2 3040 3691 3613 +7719 2 2 2 2 3596 4181 2642 +7720 2 2 2 2 3372 3940 2456 +7721 2 2 2 2 3493 3953 3302 +7722 2 2 2 2 3056 3742 3196 +7723 2 2 2 2 186 3884 185 +7724 2 2 2 2 70 3885 69 +7725 2 2 2 2 3676 4168 2746 +7726 2 2 2 2 361 4032 3641 +7727 2 2 2 2 2386 3950 3436 +7728 2 2 2 2 3880 3992 3096 +7729 2 2 2 2 3749 4142 3061 +7730 2 2 2 2 2628 2630 2629 +7731 2 2 2 2 2351 3857 3762 +7732 2 2 2 2 2730 3872 2727 +7733 2 2 2 2 2421 2628 2627 +7734 2 2 2 2 2476 2477 2475 +7735 2 2 2 2 2664 3673 2562 +7736 2 2 2 2 3983 4070 2462 +7737 2 2 2 2 2911 3861 3076 +7738 2 2 2 2 2521 3714 3587 +7739 2 2 2 2 3981 4118 2622 +7740 2 2 2 2 2569 4171 3583 +7741 2 2 2 2 3385 3935 3380 +7742 2 2 2 2 3406 3984 3407 +7743 2 2 2 2 3571 3816 3572 +7744 2 2 2 2 3364 3815 3365 +7745 2 2 2 2 3489 3818 3563 +7746 2 2 2 2 3562 3819 3556 +7747 2 2 2 2 3570 3817 3480 +7748 2 2 2 2 2952 2960 2959 +7749 2 2 2 2 2889 2892 2891 +7750 2 2 2 2 3416 3949 3417 +7751 2 2 2 2 2416 2655 423 +7752 2 2 2 2 3790 3830 2772 +7753 2 2 2 2 2384 3893 3656 +7754 2 2 2 2 2879 4077 3063 +7755 2 2 2 2 2599 3793 2619 +7756 2 2 2 2 3106 3107 3028 +7757 2 2 2 2 2935 4065 3970 +7758 2 2 2 2 3714 4071 3790 +7759 2 2 2 2 3289 4080 3797 +7760 2 2 2 2 3829 4055 3842 +7761 2 2 2 2 2734 4162 3611 +7762 2 2 2 2 3599 3897 3182 +7763 2 2 2 2 3178 3779 3179 +7764 2 2 2 2 3228 3878 3227 +7765 2 2 2 2 2383 3938 3450 +7766 2 2 2 2 391 3875 3785 +7767 2 2 2 2 3436 3950 2567 +7768 2 2 2 2 2828 3983 2460 +7769 2 2 2 2 3605 3630 3026 +7770 2 2 2 2 2370 3902 3224 +7771 2 2 2 2 2885 4141 3789 +7772 2 2 2 2 3780 4050 3254 +7773 2 2 2 2 2933 2934 2931 +7774 2 2 2 2 3497 3734 3501 +7775 2 2 2 2 2368 3905 3394 +7776 2 2 2 2 3471 3678 3677 +7777 2 2 2 2 3206 3948 3205 +7778 2 2 2 2 390 3875 391 +7779 2 2 2 2 3682 3719 3039 +7780 2 2 2 2 3573 3993 3660 +7781 2 2 2 2 2594 2595 2530 +7782 2 2 2 2 3618 4187 2998 +7783 2 2 2 2 3139 3974 3137 +7784 2 2 2 2 300 3911 299 +7785 2 2 2 2 3304 3329 3307 +7786 2 2 2 2 2446 2447 2439 +7787 2 2 2 2 2595 3986 3610 +7788 2 2 2 2 424 2655 2418 +7789 2 2 2 2 3211 4059 3049 +7790 2 2 2 2 3374 4004 2353 +7791 2 2 2 2 2644 3712 2881 +7792 2 2 2 2 3179 3779 3659 +7793 2 2 2 2 2631 3883 2634 +7794 2 2 2 2 2858 3994 3447 +7795 2 2 2 2 3194 4012 3197 +7796 2 2 2 2 2614 4097 3941 +7797 2 2 2 2 2439 3722 382 +7798 2 2 2 2 3647 3813 3168 +7799 2 2 2 2 2448 2449 2447 +7800 2 2 2 2 3085 4177 3824 +7801 2 2 2 2 2448 3958 2650 +7802 2 2 2 2 3274 3275 3273 +7803 2 2 2 2 2375 3776 3775 +7804 2 2 2 2 3775 3776 3323 +7805 2 2 2 2 3101 3801 2625 +7806 2 2 2 2 2450 2451 2449 +7807 2 2 2 2 2688 2692 2689 +7808 2 2 2 2 2713 2715 2710 +7809 2 2 2 2 3106 4086 3107 +7810 2 2 2 2 2390 3946 3875 +7811 2 2 2 2 3458 3979 3457 +7812 2 2 2 2 2519 3764 3118 +7813 2 2 2 2 2452 2453 2451 +7814 2 2 2 2 3772 4072 3524 +7815 2 2 2 2 3785 3875 2597 +7816 2 2 2 2 3332 4139 3296 +7817 2 2 2 2 2597 3946 2587 +7818 2 2 2 2 2454 2455 2453 +7819 2 2 2 2 3808 4133 3807 +7820 2 2 2 2 3299 3303 3301 +7821 2 2 2 2 2868 3689 2873 +7822 2 2 2 2 2442 4037 43 +7823 2 2 2 2 396 4036 2441 +7824 2 2 2 2 2456 2457 2455 +7825 2 2 2 2 2868 2873 2872 +7826 2 2 2 2 3497 3501 3499 +7827 2 2 2 2 2892 2894 2893 +7828 2 2 2 2 3058 4089 3959 +7829 2 2 2 2 183 3962 182 +7830 2 2 2 2 2516 4053 3868 +7831 2 2 2 2 2896 3631 3620 +7832 2 2 2 2 3725 4068 3050 +7833 2 2 2 2 2458 2459 2457 +7834 2 2 2 2 2960 3114 2961 +7835 2 2 2 2 2824 2825 2691 +7836 2 2 2 2 2422 3874 418 +7837 2 2 2 2 3399 3930 3401 +7838 2 2 2 2 2592 2623 2591 +7839 2 2 2 2 3142 3966 3143 +7840 2 2 2 2 3380 4002 3379 +7841 2 2 2 2 3329 4122 3330 +7842 2 2 2 2 2523 4114 3807 +7843 2 2 2 2 2460 2461 2459 +7844 2 2 2 2 2768 4180 3795 +7845 2 2 2 2 3454 3982 3453 +7846 2 2 2 2 2653 4066 2588 +7847 2 2 2 2 3723 3785 2597 +7848 2 2 2 2 3357 4047 3356 +7849 2 2 2 2 2641 4116 3098 +7850 2 2 2 2 3170 4049 3171 +7851 2 2 2 2 3398 3919 3399 +7852 2 2 2 2 3650 4194 3892 +7853 2 2 2 2 3054 3943 3898 +7854 2 2 2 2 3675 3710 2776 +7855 2 2 2 2 2462 2463 2461 +7856 2 2 2 2 2776 3676 3675 +7857 2 2 2 2 2956 3117 3116 +7858 2 2 2 2 3998 4055 2478 +7859 2 2 2 2 3752 3921 2537 +7860 2 2 2 2 419 3914 420 +7861 2 2 2 2 2464 2465 2463 +7862 2 2 2 2 3594 3987 3335 +7863 2 2 2 2 3021 4150 3693 +7864 2 2 2 2 2443 3961 414 +7865 2 2 2 2 3638 3991 2430 +7866 2 2 2 2 2466 2467 2465 +7867 2 2 2 2 3772 3993 3574 +7868 2 2 2 2 3506 3988 3505 +7869 2 2 2 2 2659 3836 2873 +7870 2 2 2 2 2468 2469 2467 +7871 2 2 2 2 3793 4085 2613 +7872 2 2 2 2 3205 4033 3184 +7873 2 2 2 2 2395 3999 3583 +7874 2 2 2 2 3186 4034 3185 +7875 2 2 2 2 3303 3329 3304 +7876 2 2 2 2 3828 3976 2409 +7877 2 2 2 2 3736 4023 2364 +7878 2 2 2 2 3524 3993 3772 +7879 2 2 2 2 2470 2471 2469 +7880 2 2 2 2 3598 3981 3809 +7881 2 2 2 2 3185 4042 3339 +7882 2 2 2 2 2964 4029 3422 +7883 2 2 2 2 3470 4060 3575 +7884 2 2 2 2 3895 3940 2551 +7885 2 2 2 2 2788 4156 3558 +7886 2 2 2 2 3962 4117 182 +7887 2 2 2 2 3829 3842 2780 +7888 2 2 2 2 3059 3931 3919 +7889 2 2 2 2 2472 2473 2471 +7890 2 2 2 2 3721 4128 2571 +7891 2 2 2 2 2716 2717 2715 +7892 2 2 2 2 3856 3877 3821 +7893 2 2 2 2 171 4041 170 +7894 2 2 2 2 2474 2475 2473 +7895 2 2 2 2 3096 3881 3616 +7896 2 2 2 2 426 3664 2421 +7897 2 2 2 2 3245 4046 3246 +7898 2 2 2 2 3032 4150 3695 +7899 2 2 2 2 3330 4186 2820 +7900 2 2 2 2 3771 3772 3574 +7901 2 2 2 2 3383 3907 3148 +7902 2 2 2 2 3874 4088 2607 +7903 2 2 2 2 3279 4058 175 +7904 2 2 2 2 2808 3665 3587 +7905 2 2 2 2 2923 4112 3719 +7906 2 2 2 2 3246 4046 3076 +7907 2 2 2 2 3691 4148 3019 +7908 2 2 2 2 2334 4067 216 +7909 2 2 2 2 3487 3585 3584 +7910 2 2 2 2 3499 3500 3498 +7911 2 2 2 2 2681 2684 2683 +7912 2 2 2 2 3263 3264 3262 +7913 2 2 2 2 2883 2886 2885 +7914 2 2 2 2 2918 2919 2917 +7915 2 2 2 2 2352 4076 74 +7916 2 2 2 2 3255 4078 3250 +7917 2 2 2 2 2839 4189 3332 +7918 2 2 2 2 3069 4170 3376 +7919 2 2 2 2 3629 4052 2648 +7920 2 2 2 2 3686 3687 3041 +7921 2 2 2 2 3583 4171 3582 +7922 2 2 2 2 3143 4087 3144 +7923 2 2 2 2 404 4093 405 +7924 2 2 2 2 3344 3926 3346 +7925 2 2 2 2 4099 4109 2701 +7926 2 2 2 2 47 4103 46 +7927 2 2 2 2 3061 3741 3740 +7928 2 2 2 2 3074 4161 4023 +7929 2 2 2 2 182 4117 181 +7930 2 2 2 2 3736 3737 3074 +7931 2 2 2 2 2827 4015 2830 +7932 2 2 2 2 3322 3734 3635 +7933 2 2 2 2 2945 2949 2948 +7934 2 2 2 2 3791 3792 3252 +7935 2 2 2 2 3813 3846 3168 +7936 2 2 2 2 3584 3586 2768 +7937 2 2 2 2 3582 4171 2651 +7938 2 2 2 2 3495 3734 3497 +7939 2 2 2 2 3247 3861 2914 +7940 2 2 2 2 3719 4113 2923 +7941 2 2 2 2 2718 2831 2717 +7942 2 2 2 2 3460 4175 2731 +7943 2 2 2 2 3076 4046 3751 +7944 2 2 2 2 3187 3799 3798 +7945 2 2 2 2 3036 4153 3698 +7946 2 2 2 2 3864 4108 2466 +7947 2 2 2 2 2610 3629 3628 +7948 2 2 2 2 3471 3939 2778 +7949 2 2 2 2 3073 4191 3896 +7950 2 2 2 2 3058 3780 3253 +7951 2 2 2 2 3952 4132 2882 +7952 2 2 2 2 3751 3897 3075 +7953 2 2 2 2 2941 3619 2943 +7954 2 2 2 2 2416 3986 2610 +7955 2 2 2 2 2406 3860 3778 +7956 2 2 2 2 3690 3691 3033 +7957 2 2 2 2 3613 3690 3198 +7958 2 2 2 2 3692 3694 3244 +7959 2 2 2 2 2866 3689 2868 +7960 2 2 2 2 3242 3696 3240 +7961 2 2 2 2 3235 3688 3236 +7962 2 2 2 2 3686 3697 3232 +7963 2 2 2 2 3191 3699 3189 +7964 2 2 2 2 3204 3692 3203 +7965 2 2 2 2 3258 3685 3261 +7966 2 2 2 2 3241 3694 3242 +7967 2 2 2 2 3238 3696 3688 +7968 2 2 2 2 3236 3686 3234 +7969 2 2 2 2 3190 3697 3191 +7970 2 2 2 2 3257 3699 3685 +7971 2 2 2 2 2845 3684 2847 +7972 2 2 2 2 3448 3700 3590 +7973 2 2 2 2 2855 3684 2853 +7974 2 2 2 2 2876 3702 2878 +7975 2 2 2 2 3486 3703 3482 +7976 2 2 2 2 3485 3703 3574 +7977 2 2 2 2 3155 3726 3725 +7978 2 2 2 2 3149 3683 3151 +7979 2 2 2 2 3581 3682 3358 +7980 2 2 2 2 3465 3705 3464 +7981 2 2 2 2 3175 3704 3177 +7982 2 2 2 2 3565 3705 3566 +7983 2 2 2 2 3617 3704 3173 +7984 2 2 2 2 3478 3710 3476 +7985 2 2 2 2 3160 3680 3158 +7986 2 2 2 2 3477 3706 3478 +7987 2 2 2 2 3471 3677 3468 +7988 2 2 2 2 3538 3675 3580 +7989 2 2 2 2 3162 3708 3679 +7990 2 2 2 2 3159 3679 3160 +7991 2 2 2 2 3557 3710 3675 +7992 2 2 2 2 3166 3708 3164 +7993 2 2 2 2 3641 4032 2444 +7994 2 2 2 2 3131 3996 3129 +7995 2 2 2 2 2704 2705 2702 +7996 2 2 2 2 3293 3296 3295 +7997 2 2 2 2 2612 4053 2613 +7998 2 2 2 2 2538 3850 3630 +7999 2 2 2 2 3747 4114 2524 +8000 2 2 2 2 3410 3672 3411 +8001 2 2 2 2 3146 4035 3825 +8002 2 2 2 2 2886 2888 2887 +8003 2 2 2 2 3576 4101 3454 +8004 2 2 2 2 3107 4086 2540 +8005 2 2 2 2 3764 4082 2608 +8006 2 2 2 2 3250 4096 3251 +8007 2 2 2 2 2558 3864 2812 +8008 2 2 2 2 2888 3598 2889 +8009 2 2 2 2 3621 3950 2386 +8010 2 2 2 2 3050 4136 3390 +8011 2 2 2 2 3047 4025 4002 +8012 2 2 2 2 3453 3982 3729 +8013 2 2 2 2 2613 4053 3793 +8014 2 2 2 2 3473 4014 3555 +8015 2 2 2 2 2653 2654 2417 +8016 2 2 2 2 3559 4095 3536 +8017 2 2 2 2 3116 3912 2956 +8018 2 2 2 2 3605 4024 3102 +8019 2 2 2 2 3754 4048 3822 +8020 2 2 2 2 2949 3045 2950 +8021 2 2 2 2 2972 3917 3804 +8022 2 2 2 2 2632 3995 3744 +8023 2 2 2 2 3805 4035 3146 +8024 2 2 2 2 2935 3973 3971 +8025 2 2 2 2 3106 4018 3070 +8026 2 2 2 2 2778 3939 3580 +8027 2 2 2 2 2444 4032 431 +8028 2 2 2 2 3581 3917 2972 +8029 2 2 2 2 3111 4013 3093 +8030 2 2 2 2 3360 3917 3581 +8031 2 2 2 2 3202 3918 3204 +8032 2 2 2 2 3690 3918 3200 +8033 2 2 2 2 3688 3696 3031 +8034 2 2 2 2 3512 3871 3840 +8035 2 2 2 2 2812 3937 2558 +8036 2 2 2 2 2889 3598 2892 +8037 2 2 2 2 3698 4152 3036 +8038 2 2 2 2 2361 3824 3823 +8039 2 2 2 2 3823 3824 3087 +8040 2 2 2 2 3569 4134 3506 +8041 2 2 2 2 3076 3861 3247 +8042 2 2 2 2 3670 3852 2624 +8043 2 2 2 2 3747 4011 3048 +8044 2 2 2 2 3580 3939 3564 +8045 2 2 2 2 3469 3939 3471 +8046 2 2 2 2 3589 4080 3294 +8047 2 2 2 2 3843 3873 2791 +8048 2 2 2 2 3136 3900 3620 +8049 2 2 2 2 2863 3744 2861 +8050 2 2 2 2 2682 2824 2691 +8051 2 2 2 2 3590 3701 2649 +8052 2 2 2 2 2800 4031 3871 +8053 2 2 2 2 2886 4118 2888 +8054 2 2 2 2 2415 3932 388 +8055 2 2 2 2 2706 2707 2705 +8056 2 2 2 2 3665 3998 2476 +8057 2 2 2 2 3418 4131 3416 +8058 2 2 2 2 3019 4149 3691 +8059 2 2 2 2 4014 4156 4138 +8060 2 2 2 2 2609 4044 3735 +8061 2 2 2 2 2708 3803 2707 +8062 2 2 2 2 3511 4140 3559 +8063 2 2 2 2 3979 4000 2790 +8064 2 2 2 2 3845 3956 2454 +8065 2 2 2 2 3411 3935 3385 +8066 2 2 2 2 3590 3815 3364 +8067 2 2 2 2 3491 3818 3489 +8068 2 2 2 2 3480 3817 3706 +8069 2 2 2 2 3049 3990 3209 +8070 2 2 2 2 4005 4170 4019 +8071 2 2 2 2 2527 2612 2611 +8072 2 2 2 2 3391 3947 3737 +8073 2 2 2 2 2940 3116 3062 +8074 2 2 2 2 3105 4049 3680 +8075 2 2 2 2 3420 4145 3418 +8076 2 2 2 2 3209 3948 3206 +8077 2 2 2 2 3229 4169 3142 +8078 2 2 2 2 3865 4118 2886 +8079 2 2 2 2 3447 3994 3700 +8080 2 2 2 2 2860 3994 2858 +8081 2 2 2 2 3052 3060 2900 +8082 2 2 2 2 3197 4012 3613 +8083 2 2 2 2 3952 4051 3057 +8084 2 2 2 2 3742 3974 3139 +8085 2 2 2 2 3591 4174 4104 +8086 2 2 2 2 2568 3998 3665 +8087 2 2 2 2 2880 4132 3103 +8088 2 2 2 2 2937 2940 2939 +8089 2 2 2 2 3379 4002 3382 +8090 2 2 2 2 3682 4047 3357 +8091 2 2 2 2 3171 4049 3617 +8092 2 2 2 2 3680 4049 3170 +8093 2 2 2 2 3045 4039 2950 +8094 2 2 2 2 3505 3988 3508 +8095 2 2 2 2 3285 3292 3289 +8096 2 2 2 2 3184 4033 3186 +8097 2 2 2 2 3051 4011 3747 +8098 2 2 2 2 3575 4060 3577 +8099 2 2 2 2 3677 4060 3470 +8100 2 2 2 2 3804 4098 3082 +8101 2 2 2 2 2990 4013 3111 +8102 2 2 2 2 3148 3907 3683 +8103 2 2 2 2 3028 4018 3106 +8104 2 2 2 2 3390 4136 3389 +8105 2 2 2 2 3842 3843 2780 +8106 2 2 2 2 3280 3283 3282 +8107 2 2 2 2 3026 4024 3605 +8108 2 2 2 2 3626 3926 3344 +8109 2 2 2 2 3725 3726 2958 +8110 2 2 2 2 2698 2699 2696 +8111 2 2 2 2 3661 3964 2797 +8112 2 2 2 2 3371 3957 3757 +8113 2 2 2 2 3129 3996 3766 +8114 2 2 2 2 2645 4052 3629 +8115 2 2 2 2 3423 4145 3420 +8116 2 2 2 2 3577 4101 3576 +8117 2 2 2 2 4038 4114 2523 +8118 2 2 2 2 2797 3967 3661 +8119 2 2 2 2 3074 4023 3736 +8120 2 2 2 2 3376 4170 3375 +8121 2 2 2 2 3712 3724 2622 +8122 2 2 2 2 2726 2807 2806 +8123 2 2 2 2 3662 4010 3051 +8124 2 2 2 2 3587 3665 2521 +8125 2 2 2 2 3079 3832 3081 +8126 2 2 2 2 3501 3909 2803 +8127 2 2 2 2 3840 4140 3511 +8128 2 2 2 2 3156 4157 2969 +8129 2 2 2 2 3520 3525 3521 +8130 2 2 2 2 3566 3568 3567 +8131 2 2 2 2 3177 3180 3178 +8132 2 2 2 2 3466 3591 3465 +8133 2 2 2 2 3492 3773 3491 +8134 2 2 2 2 3487 3584 3486 +8135 2 2 2 2 3497 3499 3498 +8136 2 2 2 2 2681 2683 2680 +8137 2 2 2 2 2847 2850 2848 +8138 2 2 2 2 3261 3263 3262 +8139 2 2 2 2 2868 2872 2869 +8140 2 2 2 2 3630 3849 3026 +8141 2 2 2 2 2551 3940 3372 +8142 2 2 2 2 3795 4179 2766 +8143 2 2 2 2 3846 3847 3167 +8144 2 2 2 2 3971 3973 3787 +8145 2 2 2 2 2522 3859 2514 +8146 2 2 2 2 2919 3787 2922 +8147 2 2 2 2 2707 3821 2705 +8148 2 2 2 2 2957 4027 4026 +8149 2 2 2 2 3656 3893 2800 +8150 2 2 2 2 2940 3062 2941 +8151 2 2 2 2 3971 3972 2519 +8152 2 2 2 2 2727 3872 2726 +8153 2 2 2 2 2928 2933 2931 +8154 2 2 2 2 3224 3902 3837 +8155 2 2 2 2 2924 2935 2926 +8156 2 2 2 2 2700 3856 2699 +8157 2 2 2 2 4115 4155 2773 +8158 2 2 2 2 2949 3090 3045 +8159 2 2 2 2 3930 3931 3043 +8160 2 2 2 2 2918 4010 3662 +8161 2 2 2 2 2784 4008 3982 +8162 2 2 2 2 3629 3827 2645 +8163 2 2 2 2 2831 2832 2717 +8164 2 2 2 2 3137 3974 3900 +8165 2 2 2 2 3271 3274 3273 +8166 2 2 2 2 2447 3722 2439 +8167 2 2 2 2 2890 4137 4005 +8168 2 2 2 2 2688 2689 2686 +8169 2 2 2 2 3659 3779 3672 +8170 2 2 2 2 2630 3883 2631 +8171 2 2 2 2 3362 4098 3917 +8172 2 2 2 2 4019 4170 3069 +8173 2 2 2 2 2506 4045 2475 +8174 2 2 2 2 3264 3269 3266 +8175 2 2 2 2 2959 4105 4068 +8176 2 2 2 2 2719 3979 3967 +8177 2 2 2 2 2417 4066 2653 +8178 2 2 2 2 3866 3951 2872 +8179 2 2 2 2 2441 4036 3651 +8180 2 2 2 2 3652 4037 2442 +8181 2 2 2 2 2863 4154 3744 +8182 2 2 2 2 2559 3956 3673 +8183 2 2 2 2 2769 3625 3595 +8184 2 2 2 2 3067 3996 3131 +8185 2 2 2 2 4073 4140 3840 +8186 2 2 2 2 3330 4122 2823 +8187 2 2 2 2 2905 3048 2907 +8188 2 2 2 2 3660 3993 3524 +8189 2 2 2 2 2910 3051 2912 +8190 2 2 2 2 2915 2918 2917 +8191 2 2 2 2 3822 3914 2607 +8192 2 2 2 2 2981 3093 2983 +8193 2 2 2 2 3935 4002 3380 +8194 2 2 2 2 2986 2990 2989 +8195 2 2 2 2 2992 2995 2994 +8196 2 2 2 2 2999 3070 3001 +8197 2 2 2 2 3004 3028 3006 +8198 2 2 2 2 3008 3027 3010 +8199 2 2 2 2 2708 3820 3803 +8200 2 2 2 2 3014 3102 3016 +8201 2 2 2 2 3018 3026 3020 +8202 2 2 2 2 2471 2516 2469 +8203 2 2 2 2 2918 3662 2970 +8204 2 2 2 2 3024 3053 3035 +8205 2 2 2 2 3625 4115 3508 +8206 2 2 2 2 3625 4155 4115 +8207 2 2 2 2 3253 4089 3058 +8208 2 2 2 2 3678 4166 2777 +8209 2 2 2 2 2465 2527 2463 +8210 2 2 2 2 3783 4143 2996 +8211 2 2 2 2 2617 2623 2592 +8212 2 2 2 2 2933 2956 2934 +8213 2 2 2 2 3777 4121 2337 +8214 2 2 2 2 2461 2525 2459 +8215 2 2 2 2 2733 2785 2730 +8216 2 2 2 2 2960 3115 3114 +8217 2 2 2 2 2996 4187 3783 +8218 2 2 2 2 2739 2772 2737 +8219 2 2 2 2 2457 2588 2455 +8220 2 2 2 2 2743 2787 2741 +8221 2 2 2 2 2747 2763 2745 +8222 2 2 2 2 2453 2593 2451 +8223 2 2 2 2 2751 2791 2749 +8224 2 2 2 2 3651 4036 395 +8225 2 2 2 2 379 4037 3652 +8226 2 2 2 2 2757 2780 2755 +8227 2 2 2 2 2634 2648 2636 +8228 2 2 2 2 2770 2793 2760 +8229 2 2 2 2 2638 2645 2643 +8230 2 2 2 2 2722 2831 2718 +8231 2 2 2 2 3948 4033 3205 +8232 2 2 2 2 3274 3328 3275 +8233 2 2 2 2 2821 3636 2818 +8234 2 2 2 2 2692 2812 2689 +8235 2 2 2 2 2626 3836 2425 +8236 2 2 2 2 3919 3931 3930 +8237 2 2 2 2 2898 3052 2900 +8238 2 2 2 2 2726 2806 2724 +8239 2 2 2 2 3389 4136 3947 +8240 2 2 2 2 3692 3693 3032 +8241 2 2 2 2 3919 3930 3399 +8242 2 2 2 2 3091 3788 3745 +8243 2 2 2 2 2640 3963 3744 +8244 2 2 2 2 3637 4162 2732 +8245 2 2 2 2 3396 4144 3059 +8246 2 2 2 2 2513 4082 3764 +8247 2 2 2 2 2421 3664 2628 +8248 2 2 2 2 3837 3902 2826 +8249 2 2 2 2 2533 3983 2828 +8250 2 2 2 2 3605 3752 3630 +8251 2 2 2 2 2771 4182 3774 +8252 2 2 2 2 2596 3859 2530 +8253 2 2 2 2 3416 4131 3949 +8254 2 2 2 2 3109 4159 4153 +8255 2 2 2 2 3105 3899 3841 +8256 2 2 2 2 3324 3945 2817 +8257 2 2 2 2 2869 3951 2871 +8258 2 2 2 2 3833 4193 3279 +8259 2 2 2 2 2918 2970 2919 +8260 2 2 2 2 3585 3586 3584 +8261 2 2 2 2 2684 3835 2683 +8262 2 2 2 2 2599 4085 3793 +8263 2 2 2 2 3100 3997 2979 +8264 2 2 2 2 3063 4077 3657 +8265 2 2 2 2 3296 4139 3297 +8266 2 2 2 2 2540 3921 3854 +8267 2 2 2 2 3572 3816 3492 +8268 2 2 2 2 3365 3815 2856 +8269 2 2 2 2 3498 3816 3571 +8270 2 2 2 2 3509 3819 3562 +8271 2 2 2 2 3563 3818 3487 +8272 2 2 2 2 3567 3817 3570 +8273 2 2 2 2 3556 3819 3466 +8274 2 2 2 2 2785 3872 2730 +8275 2 2 2 2 3956 4129 2454 +8276 2 2 2 2 2807 3739 2806 +8277 2 2 2 2 2940 3912 3116 +8278 2 2 2 2 3951 4154 2871 +8279 2 2 2 2 3116 3735 3062 +8280 2 2 2 2 3454 4101 3982 +8281 2 2 2 2 3052 3807 3060 +8282 2 2 2 2 2425 3836 2659 +8283 2 2 2 2 3251 4089 3249 +8284 2 2 2 2 3677 3678 2777 +8285 2 2 2 2 2660 3845 2452 +8286 2 2 2 2 2604 4130 2833 +8287 2 2 2 2 3782 4178 2993 +8288 2 2 2 2 2950 4039 2952 +8289 2 2 2 2 3524 4072 3522 +8290 2 2 2 2 3774 4183 2771 +8291 2 2 2 2 3142 4169 3966 +8292 2 2 2 2 422 3610 2416 +8293 2 2 2 2 2900 3848 2901 +8294 2 2 2 2 2832 4056 2560 +8295 2 2 2 2 3506 4134 3988 +8296 2 2 2 2 2389 4128 3721 +8297 2 2 2 2 2635 4181 3596 +8298 2 2 2 2 3613 4012 3040 +8299 2 2 2 2 2543 4086 3106 +8300 2 2 2 2 3033 3918 3690 +8301 2 2 2 2 3297 3810 3299 +8302 2 2 2 2 3521 4134 3569 +8303 2 2 2 2 3032 3694 3692 +8304 2 2 2 2 3620 4043 2896 +8305 2 2 2 2 3853 3954 2510 +8306 2 2 2 2 4071 4110 2474 +8307 2 2 2 2 3118 3764 3117 +8308 2 2 2 2 2710 3820 2708 +8309 2 2 2 2 2594 3986 2595 +8310 2 2 2 2 3095 3907 3383 +8311 2 2 2 2 3613 3691 3690 +8312 2 2 2 2 3675 3676 3580 +8313 2 2 2 2 3706 3707 3478 +8314 2 2 2 2 3617 3841 3704 +8315 2 2 2 2 3581 3719 3682 +8316 2 2 2 2 3703 3771 3574 +8317 2 2 2 2 3700 3701 3590 +8318 2 2 2 2 3236 3687 3686 +8319 2 2 2 2 3204 3693 3692 +8320 2 2 2 2 2521 4071 3714 +8321 2 2 2 2 2634 3883 2648 +8322 2 2 2 2 3343 3957 3626 +8323 2 2 2 2 2726 3872 2807 +8324 2 2 2 2 3083 4194 3650 +8325 2 2 2 2 3766 3851 2971 +8326 2 2 2 2 3669 3895 2551 +8327 2 2 2 2 3881 4111 2978 +8328 2 2 2 2 2894 3894 2895 +8329 2 2 2 2 3062 3619 2941 +8330 2 2 2 2 2993 4143 3782 +8331 2 2 2 2 3617 4049 3105 +8332 2 2 2 2 2957 4064 4027 +8333 2 2 2 2 3559 4140 4095 +8334 2 2 2 2 2613 3932 2415 +8335 2 2 2 2 2823 4139 3332 +8336 2 2 2 2 2596 4048 3754 +8337 2 2 2 2 3882 4062 2600 +8338 2 2 2 2 3716 4128 2389 +8339 2 2 2 2 2683 3835 3834 +8340 2 2 2 2 3929 4188 2951 +8341 2 2 2 2 3712 4118 3865 +8342 2 2 2 2 2613 4085 3932 +8343 2 2 2 2 2824 4106 3834 +8344 2 2 2 2 3875 3946 2597 +8345 2 2 2 2 3418 4145 4131 +8346 2 2 2 2 3574 3993 3573 +8347 2 2 2 2 3797 4080 3589 +8348 2 2 2 2 3023 4151 3695 +8349 2 2 2 2 2524 4114 4038 +8350 2 2 2 2 3662 3663 2970 +8351 2 2 2 2 2987 4142 3749 +8352 2 2 2 2 2606 4066 2417 +8353 2 2 2 2 2584 4088 3770 +8354 2 2 2 2 3833 3987 3281 +8355 2 2 2 2 3838 4006 2711 +8356 2 2 2 2 3039 4047 3682 +8357 2 2 2 2 2625 4163 3101 +8358 2 2 2 2 3346 3926 3673 +8359 2 2 2 2 3712 3865 2881 +8360 2 2 2 2 2517 4055 3829 +8361 2 2 2 2 4070 4081 2462 +8362 2 2 2 2 3555 4014 2783 +8363 2 2 2 2 2530 3859 2522 +8364 2 2 2 2 3892 4098 3362 +8365 2 2 2 2 4104 4174 2773 +8366 2 2 2 2 2881 3865 2883 +8367 2 2 2 2 3808 3809 2529 +8368 2 2 2 2 3284 4193 3833 +8369 2 2 2 2 3735 3954 2609 +8370 2 2 2 2 2622 4118 3712 +8371 2 2 2 2 4034 4042 3185 +8372 2 2 2 2 3678 4167 2744 +8373 2 2 2 2 2616 4120 3111 +8374 2 2 2 2 3375 4170 4005 +8375 2 2 2 2 2531 3856 3821 +8376 2 2 2 2 3657 4077 3103 +8377 2 2 2 2 2943 3869 2945 +8378 2 2 2 2 2700 3877 3856 +8379 2 2 2 2 2968 4092 4091 +8380 2 2 2 2 3908 3910 2974 +8381 2 2 2 2 2905 3848 3048 +8382 2 2 2 2 2791 3873 2808 +8383 2 2 2 2 3980 4035 3086 +8384 2 2 2 2 2640 3951 3866 +8385 2 2 2 2 3332 4189 2822 +8386 2 2 2 2 2558 3937 3936 +8387 2 2 2 2 3252 4096 4078 +8388 2 2 2 2 2702 3877 2700 +8389 2 2 2 2 3834 4106 2683 +8390 2 2 2 2 3752 3903 2538 +8391 2 2 2 2 3187 4042 4034 +8392 2 2 2 2 2871 4190 3759 +8393 2 2 2 2 3292 4123 3293 +8394 2 2 2 2 2971 3944 3639 +8395 2 2 2 2 3760 4190 2863 +8396 2 2 2 2 3069 4141 4019 +8397 2 2 2 2 3901 3981 2622 +8398 2 2 2 2 2451 4009 2449 +8399 2 2 2 2 2601 4062 3636 +8400 2 2 2 2 3619 3869 2943 +8401 2 2 2 2 2895 3894 2898 +8402 2 2 2 2 3881 3943 3054 +8403 2 2 2 2 3821 3877 2705 +8404 2 2 2 2 2526 4056 2832 +8405 2 2 2 2 3082 4098 3892 +8406 2 2 2 2 3949 4131 4091 +8407 2 2 2 2 3299 3810 3303 +8408 2 2 2 2 3293 4123 3296 +8409 2 2 2 2 2647 3701 3700 +8410 2 2 2 2 2952 4039 2960 +8411 2 2 2 2 2954 3965 3681 +8412 2 2 2 2 3062 4044 3619 +8413 2 2 2 2 2715 3820 2710 +8414 2 2 2 2 3151 4157 3150 +8415 2 2 2 2 3793 4053 2516 +8416 2 2 2 2 3602 4003 2840 +8417 2 2 2 2 2836 3934 3933 +8418 2 2 2 2 3825 4035 3980 +8419 2 2 2 2 4028 4050 3780 +8420 2 2 2 2 3759 4190 3760 +8421 2 2 2 2 3695 4150 3023 +8422 2 2 2 2 3822 4048 2391 +8423 2 2 2 2 3959 3960 3058 +8424 2 2 2 2 3636 4062 2602 +8425 2 2 2 2 3854 3921 2542 +8426 2 2 2 2 3835 3969 2532 +8427 2 2 2 2 2934 3912 2937 +8428 2 2 2 2 3925 4007 2784 +8429 2 2 2 2 2949 3869 3090 +8430 2 2 2 2 3283 3928 3927 +8431 2 2 2 2 2527 3868 2612 +8432 2 2 2 2 3807 4133 2523 +8433 2 2 2 2 3090 3869 3619 +8434 2 2 2 2 2458 3940 3895 +8435 2 2 2 2 3282 3927 3285 +8436 2 2 2 2 3931 4094 3043 +8437 2 2 2 2 3277 3933 3280 +8438 2 2 2 2 2694 3937 2692 +8439 2 2 2 2 2696 3936 2694 +8440 2 2 2 2 2839 4123 3928 +8441 2 2 2 2 2901 3848 2905 +8442 2 2 2 2 2970 3787 2919 +8443 2 2 2 2 4056 4057 2470 +8444 2 2 2 2 3669 4126 3220 +8445 2 2 2 2 4027 4064 2942 +8446 2 2 2 2 2832 4127 2717 +8447 2 2 2 2 3852 4044 2609 +8448 2 2 2 2 3787 3972 3971 +8449 2 2 2 2 2956 3912 2934 +8450 2 2 2 2 2686 3969 2684 +8451 2 2 2 2 2926 3970 2928 +8452 2 2 2 2 2922 3973 2924 +8453 2 2 2 2 2898 3894 3052 +8454 2 2 2 2 3909 4063 3978 +8455 2 2 2 2 3913 4054 2769 +8456 2 2 2 2 3029 3916 3889 +8457 2 2 2 2 4078 4096 3250 +8458 2 2 2 2 2752 4173 4104 +8459 2 2 2 2 3945 3977 2817 +8460 2 2 2 2 2979 3997 2981 +8461 2 2 2 2 4073 4074 2725 +8462 2 2 2 2 3104 4090 3841 +8463 2 2 2 2 2692 3937 2812 +8464 2 2 2 2 3908 4112 2925 +8465 2 2 2 2 3949 3992 3417 +8466 2 2 2 2 4138 4192 2736 +8467 2 2 2 2 3915 3916 3029 +8468 2 2 2 2 3508 4115 3509 +8469 2 2 2 2 3835 4070 3834 +8470 2 2 2 2 3842 3873 3843 +8471 2 2 2 2 3113 3847 3846 +8472 2 2 2 2 3075 4185 3751 +8473 2 2 2 2 3735 4044 3062 +8474 2 2 2 2 3751 4185 3076 +8475 2 2 2 2 2872 3951 2869 +8476 2 2 2 2 4154 4190 2871 +8477 2 2 2 2 2819 4186 3330 +8478 2 2 2 2 2907 4011 2910 +8479 2 2 2 2 2912 4010 2915 +8480 2 2 2 2 2927 3959 3910 +8481 2 2 2 2 2754 4155 4054 +8482 2 2 2 2 2983 4013 2986 +8483 2 2 2 2 2766 4107 4072 +8484 2 2 2 2 2994 4016 2997 +8485 2 2 2 2 2823 4176 3330 +8486 2 2 2 2 3001 4018 3004 +8487 2 2 2 2 3006 4020 3008 +8488 2 2 2 2 3263 4159 3264 +8489 2 2 2 2 2883 3865 2886 +8490 2 2 2 2 3010 4021 3012 +8491 2 2 2 2 3321 4063 3909 +8492 2 2 2 2 3977 3978 2817 +8493 2 2 2 2 3016 4024 3018 +8494 2 2 2 2 3000 3886 3615 +8495 2 2 2 2 3220 4126 3222 +8496 2 2 2 2 2709 4006 3838 +8497 2 2 2 2 3113 4028 4001 +8498 2 2 2 2 3763 3854 2542 +8499 2 2 2 2 3639 3944 2903 +8500 2 2 2 2 2779 4140 4073 +8501 2 2 2 2 2529 4133 3808 +8502 2 2 2 2 2945 3869 2949 +8503 2 2 2 2 3790 3906 3830 +8504 2 2 2 2 3113 4001 3847 +8505 2 2 2 2 2740 4165 4008 +8506 2 2 2 2 3795 4180 2758 +8507 2 2 2 2 2997 4017 2999 +8508 2 2 2 2 3466 4174 3591 +8509 2 2 2 2 3279 4193 4058 +8510 2 2 2 2 2680 4106 2682 +8511 2 2 2 2 3522 4107 3520 +8512 2 2 2 2 3086 4035 3805 +8513 2 2 2 2 3012 4022 3014 +8514 2 2 2 2 2682 4106 2824 +8515 2 2 2 2 2705 3877 2702 +8516 2 2 2 2 3264 4159 3269 +8517 2 2 2 2 3283 3927 3282 +8518 2 2 2 2 2684 3969 3835 +8519 2 2 2 2 3630 3850 3849 +8520 2 2 2 2 3915 4147 3015 +8521 2 2 2 2 3113 4050 4028 +8522 2 2 2 2 2840 4003 3920 +8523 2 2 2 2 3013 4147 3990 +8524 2 2 2 2 2593 4009 2451 +8525 2 2 2 2 2422 4088 3874 +8526 2 2 2 2 2960 4039 3115 +8527 2 2 2 2 2475 4045 2473 +8528 2 2 2 2 3933 3934 3283 +8529 2 2 2 2 2930 4028 3960 +8530 2 2 2 2 3631 4084 3067 +8531 2 2 2 2 2744 4166 3678 +8532 2 2 2 2 3283 3934 3928 +8533 2 2 2 2 3789 4141 3069 +8534 2 2 2 2 3920 4003 2835 +8535 2 2 2 2 3663 3972 2970 +8536 2 2 2 2 2636 4052 2638 +8537 2 2 2 2 3329 4069 3307 +8538 2 2 2 2 3892 4194 3082 +8539 2 2 2 2 3673 3956 2562 +8540 2 2 2 2 3809 3981 2529 +8541 2 2 2 2 4019 4141 2887 +8542 2 2 2 2 3737 3947 2962 +8543 2 2 2 2 3941 4097 2543 +8544 2 2 2 2 2958 4068 3725 +8545 2 2 2 2 4099 4100 2795 +8546 2 2 2 2 2537 3903 3752 +8547 2 2 2 2 2629 4102 3963 +8548 2 2 2 2 3896 4191 2909 +8549 2 2 2 2 2802 4183 3978 +8550 2 2 2 2 3898 3943 2980 +8551 2 2 2 2 2639 4184 4116 +8552 2 2 2 2 3868 4053 2612 +8553 2 2 2 2 3017 4148 3889 +8554 2 2 2 2 2544 3895 3669 +8555 2 2 2 2 3049 4059 3990 +8556 2 2 2 2 2899 4075 3944 +8557 2 2 2 2 4007 4008 2784 +8558 2 2 2 2 2937 3912 2940 +8559 2 2 2 2 3787 3973 2922 +8560 2 2 2 2 3307 4069 3310 +8561 2 2 2 2 3700 3994 2647 +8562 2 2 2 2 3285 3927 3292 +8563 2 2 2 2 2777 4060 3677 +8564 2 2 2 2 3473 4156 4014 +8565 2 2 2 2 2835 4061 3920 +8566 2 2 2 2 2935 3970 2926 +8567 2 2 2 2 4072 4107 3522 +8568 2 2 2 2 2758 4179 3795 +8569 2 2 2 2 3280 3933 3283 +8570 2 2 2 2 2699 3936 2696 +8571 2 2 2 2 3900 4043 3620 +8572 2 2 2 2 3807 4114 3060 +8573 2 2 2 2 4014 4138 2783 +8574 2 2 2 2 3944 4075 2903 +8575 2 2 2 2 3871 4031 2728 +8576 2 2 2 2 3704 4090 3177 +8577 2 2 2 2 2863 4190 4154 +8578 2 2 2 2 2568 3873 3842 +8579 2 2 2 2 3945 4186 2816 +8580 2 2 2 2 3790 4071 2561 +8581 2 2 2 2 3640 3941 2543 +8582 2 2 2 2 3925 4166 2742 +8583 2 2 2 2 3640 4017 4016 +8584 2 2 2 2 3744 3963 2632 +8585 2 2 2 2 2689 3969 2686 +8586 2 2 2 2 2928 3970 2933 +8587 2 2 2 2 2924 3973 2935 +8588 2 2 2 2 2608 3954 3735 +8589 2 2 2 2 2981 3997 3093 +8590 2 2 2 2 2638 4052 2645 +8591 2 2 2 2 3978 4063 2817 +8592 2 2 2 2 3819 4174 3466 +8593 2 2 2 2 2910 4011 3051 +8594 2 2 2 2 2915 4010 2918 +8595 2 2 2 2 2986 4013 2990 +8596 2 2 2 2 3004 4018 3028 +8597 2 2 2 2 3008 4020 3027 +8598 2 2 2 2 3018 4024 3026 +8599 2 2 2 2 3913 4179 2756 +8600 2 2 2 2 2999 4017 3070 +8601 2 2 2 2 3014 4022 3102 +8602 2 2 2 2 3963 4102 2632 +8603 2 2 2 2 2728 4074 4073 +8604 2 2 2 2 2561 3906 3790 +8605 2 2 2 2 3048 4011 2907 +8606 2 2 2 2 3051 4010 2912 +8607 2 2 2 2 2641 4135 4116 +8608 2 2 2 2 3681 3965 2938 +8609 2 2 2 2 3093 4013 2983 +8610 2 2 2 2 2995 4016 2994 +8611 2 2 2 2 3070 4018 3001 +8612 2 2 2 2 3028 4020 3006 +8613 2 2 2 2 3027 4021 3010 +8614 2 2 2 2 3840 3871 2728 +8615 2 2 2 2 3102 4024 3016 +8616 2 2 2 2 3842 4055 2568 +8617 2 2 2 2 2838 4003 3602 +8618 2 2 2 2 2529 3981 3901 +8619 2 2 2 2 2882 4051 3952 +8620 2 2 2 2 3990 4059 3013 +8621 2 2 2 2 3520 4107 3525 +8622 2 2 2 2 2683 4106 2680 +8623 2 2 2 2 3297 4139 3810 +8624 2 2 2 2 3847 4001 3112 +8625 2 2 2 2 2648 4052 2636 +8626 2 2 2 2 3094 4188 3929 +8627 2 2 2 2 3177 4090 3180 +8628 2 2 2 2 3900 3974 2902 +8629 2 2 2 2 3936 3937 2694 +8630 2 2 2 2 3047 4002 3935 +8631 2 2 2 2 3966 4169 3615 +8632 2 2 2 2 3055 4033 3948 +8633 2 2 2 2 2526 4057 4056 +8634 2 2 2 2 4091 4092 2977 +8635 2 2 2 2 2827 4119 4015 +8636 2 2 2 2 3988 4134 3595 +8637 2 2 2 2 3982 4101 2784 +8638 2 2 2 2 2933 4065 2956 +8639 2 2 2 2 3303 4122 3329 +8640 2 2 2 2 3834 4070 2533 +8641 2 2 2 2 3841 3899 3104 +8642 2 2 2 2 4095 4140 2779 +8643 2 2 2 2 4131 4145 3037 +8644 2 2 2 2 4058 4193 3290 +8645 2 2 2 2 3841 4090 3704 +8646 2 2 2 2 2717 4127 2715 +8647 2 2 2 2 2532 4070 3835 +8648 2 2 2 2 4091 4131 3037 +8649 2 2 2 2 3825 3980 2985 +8650 2 2 2 2 2640 4154 3951 +8651 2 2 2 2 3212 4158 3976 +8652 2 2 2 2 2532 4081 4070 +8653 2 2 2 2 3992 4111 3096 +8654 2 2 2 2 3970 4065 2933 +8655 2 2 2 2 2896 4084 3631 +8656 2 2 2 2 3976 4158 3210 +8657 2 2 2 2 4016 4017 2997 +8658 2 2 2 2 2978 3943 3881 +8659 2 2 2 2 4021 4022 3012 +8660 2 2 2 2 2521 4110 4071 +8661 2 2 2 2 4026 4027 2944 +8662 2 2 2 2 3015 3916 3915 +8663 2 2 2 2 2728 4073 3840 +8664 2 2 2 2 2559 4129 3956 +8665 2 2 2 2 4005 4019 2890 +8666 2 2 2 2 2701 4100 4099 +8667 2 2 2 2 3810 4122 3303 +8668 2 2 2 2 2925 3910 3908 +8669 2 2 2 2 3330 4176 2819 +8670 2 2 2 2 2927 3960 3959 +8671 2 2 2 2 2715 4127 3820 +8672 2 2 2 2 4116 4135 2639 +8673 2 2 2 2 2719 4000 3979 +8674 2 2 2 2 3949 4091 2977 +8675 2 2 2 2 2902 4043 3900 +8676 2 2 2 2 2742 4007 3925 +8677 2 2 2 2 3889 3916 3017 +8678 2 2 2 2 2816 3977 3945 +8679 2 2 2 2 2977 3992 3949 +8680 2 2 2 2 3810 4139 2823 +8681 2 2 2 2 2802 3978 3977 +8682 2 2 2 2 2823 4122 3810 +8683 2 2 2 2 2756 4054 3913 +8684 2 2 2 2 3007 4094 3931 +8685 2 2 2 2 4001 4028 2930 +8686 2 2 2 2 2970 3972 3787 +8687 2 2 2 2 2740 4008 4007 +8688 2 2 2 2 2977 4111 3992 +8689 2 2 2 2 3763 4022 4021 +8690 2 2 2 2 2455 2593 2453 +8691 2 2 2 2 2459 2588 2457 +8692 2 2 2 2 2463 2525 2461 +8693 2 2 2 2 2473 2516 2471 +8694 2 2 2 2 3856 3936 2699 +8695 2 2 2 2 3803 3821 2707 +8696 2 2 2 2 2711 3811 3554 +8697 2 2 2 2 2724 2831 2722 +8698 2 2 2 2 2741 2772 2739 +8699 2 2 2 2 2745 2787 2743 +8700 2 2 2 2 2749 2763 2747 +8701 2 2 2 2 2760 2780 2757 +8702 2 2 2 2 3738 3829 2793 +8703 2 2 2 2 2990 2992 2989 +8704 2 2 2 2 3167 3709 3166 +8705 2 2 2 2 3275 3933 3277 +8706 2 2 2 2 3486 3771 3703 +$EndElements diff --git a/examples/poiseuille-local_dt-mpi-lazy.py b/examples/poiseuille-local_dt-mpi-lazy.py index c46eacfa9..016fbe2c0 100644 --- a/examples/poiseuille-local_dt-mpi-lazy.py +++ b/examples/poiseuille-local_dt-mpi-lazy.py @@ -35,7 +35,7 @@ from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer -from grudge.dof_desc import DTAG_BOUNDARY +from grudge.dof_desc import BoundaryDomainTag from mirgecom.fluid import make_conserved from mirgecom.navierstokes import ns_operator @@ -245,19 +245,20 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): transport=SimpleTransport(viscosity=mu)) exact = initializer(x_vec=nodes, eos=gas_model.eos) - def _boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def _boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = thaw(bnd_discr.nodes(), actx) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, cv=state_minus.cv, **kwargs), gas_model) - boundaries = {DTAG_BOUNDARY("-1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_solution), - DTAG_BOUNDARY("+1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_solution), - DTAG_BOUNDARY("-2"): AdiabaticNoslipMovingBoundary(), - DTAG_BOUNDARY("+2"): AdiabaticNoslipMovingBoundary()} + boundaries = { + BoundaryDomainTag("-1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_solution), + BoundaryDomainTag("+1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_solution), + BoundaryDomainTag("-2"): AdiabaticNoslipMovingBoundary(), + BoundaryDomainTag("+2"): AdiabaticNoslipMovingBoundary()} if rst_filename: if local_dt: diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 6479f2405..a26656f95 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -33,8 +33,7 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.shortcuts import make_visualizer -from grudge.dof_desc import DTAG_BOUNDARY -from grudge.dof_desc import DISCR_TAG_QUAD +from grudge.dof_desc import BoundaryDomainTag, DISCR_TAG_QUAD from mirgecom.discretization import create_discretization_collection from mirgecom.fluid import make_conserved @@ -239,19 +238,22 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): transport=SimpleTransport(viscosity=mu)) exact = initializer(x_vec=nodes, eos=gas_model.eos) - def _boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def _boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, cv=state_minus.cv, **kwargs), gas_model) - boundaries = {DTAG_BOUNDARY("-1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_solution), - DTAG_BOUNDARY("+1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_solution), - DTAG_BOUNDARY("-2"): AdiabaticNoslipWallBoundary(), - DTAG_BOUNDARY("+2"): AdiabaticNoslipWallBoundary()} + boundaries = { + BoundaryDomainTag("-1"): + PrescribedFluidBoundary( + boundary_state_func=_boundary_solution), + BoundaryDomainTag("+1"): + PrescribedFluidBoundary( + boundary_state_func=_boundary_solution), + BoundaryDomainTag("-2"): AdiabaticNoslipWallBoundary(), + BoundaryDomainTag("+2"): AdiabaticNoslipWallBoundary()} if rst_filename: current_t = restart_data["t"] diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py index 7f96347e1..c8adf7fde 100644 --- a/examples/poiseuille-multispecies-mpi.py +++ b/examples/poiseuille-multispecies-mpi.py @@ -34,7 +34,7 @@ from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer -from grudge.dof_desc import DTAG_BOUNDARY +from grudge.dof_desc import BoundaryDomainTag from mirgecom.fluid import make_conserved from mirgecom.navierstokes import ns_operator @@ -269,22 +269,22 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): species_diffusivity=species_diffusivity)) exact = initializer(x_vec=nodes, eos=gas_model.eos) - def _exact_boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def _exact_boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, cv=state_minus.cv, **kwargs), gas_model) - boundaries = \ - {DTAG_BOUNDARY("-1"): - PrescribedFluidBoundary(boundary_state_func=_exact_boundary_solution), - DTAG_BOUNDARY("+1"): - PrescribedFluidBoundary(boundary_state_func=_exact_boundary_solution), - DTAG_BOUNDARY("-2"): - IsothermalNoSlipBoundary(wall_temperature=348.5), - DTAG_BOUNDARY("+2"): - IsothermalNoSlipBoundary(wall_temperature=348.5)} + boundaries = { + BoundaryDomainTag("-1"): + PrescribedFluidBoundary(boundary_state_func=_exact_boundary_solution), + BoundaryDomainTag("+1"): + PrescribedFluidBoundary(boundary_state_func=_exact_boundary_solution), + BoundaryDomainTag("-2"): + IsothermalNoSlipBoundary(wall_temperature=348.5), + BoundaryDomainTag("+2"): + IsothermalNoSlipBoundary(wall_temperature=348.5)} if rst_filename: current_t = restart_data["t"] diff --git a/examples/run_examples.sh b/examples/run_examples.sh index c56ef5898..3f3ce1951 100755 --- a/examples/run_examples.sh +++ b/examples/run_examples.sh @@ -13,14 +13,22 @@ echo "*** Running examples in $examples_dir ..." failed_examples="" succeeded_examples="" - if [[ $(hostname) == "porter" ]]; then mpi_launcher="bash $examples_dir/scripts/run_gpus_generic.sh" else mpi_launcher="" fi +examples="" for example in $examples_dir/*.py +do + example_file=$(basename "$example") + examples="$examples $example_file" +done + +cd $examples_dir + +for example in $examples do if [[ "$example" == *"-mpi-lazy.py" ]] then @@ -46,7 +54,8 @@ do echo "*** Example $example failed." failed_examples="$failed_examples $example" fi - rm -rf *vtu *sqlite *pkl *-journal restart_data + # FIXME: This could delete data from other runs + # rm -rf *vtu *sqlite *pkl *-journal restart_data done ((numtests=numsuccess+numfail)) echo "*** Done running examples!" diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index b96b13879..1578483cf 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -223,9 +223,9 @@ def vol_max(x): spec_diffusivities=spec_diffusivities, wave_vector=wave_vector) - def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 087b10704..a70a42139 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -186,9 +186,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, spec_y0s=spec_y0s, spec_amplitudes=spec_amplitudes) - def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 122c4ec80..5a826b696 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -174,9 +174,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, eos = IdealSingleGas() gas_model = GasModel(eos=eos) - def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index fccd7b7aa..ac03a4c73 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -191,9 +191,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, initializer = Vortex2D(center=orig, velocity=vel) gas_model = GasModel(eos=eos) - def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def boundary_solution(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 807a0de33..4130c2124 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -126,10 +126,12 @@ """ import numpy as np +from dataclasses import replace from pytools import memoize_in, keyed_memoize_in from functools import partial from meshmode.dof_array import DOFArray +from meshmode.discretization.connection import FACE_RESTR_ALL from mirgecom.flux import num_flux_central from mirgecom.operators import div_operator @@ -140,10 +142,10 @@ ) from grudge.dof_desc import ( - DOFDesc, + DD_VOLUME_ALL, + DISCR_TAG_BASE, + DISCR_TAG_MODAL, as_dofdesc, - DD_VOLUME_MODAL, - DD_VOLUME ) import grudge.op as op @@ -158,9 +160,11 @@ class _AVRTag: def av_laplacian_operator(discr, boundaries, fluid_state, alpha, gas_model=None, - kappa=1., s0=-6., time=0, operator_states_quad=None, - grad_cv=None, quadrature_tag=None, boundary_kwargs=None, + kappa=1., s0=-6., time=0, quadrature_tag=DISCR_TAG_BASE, + volume_dd=DD_VOLUME_ALL, boundary_kwargs=None, indicator=None, divergence_numerical_flux=num_flux_central, + operator_states_quad=None, + grad_cv=None, **kwargs): r"""Compute the artificial viscosity right-hand-side. @@ -200,20 +204,25 @@ def av_laplacian_operator(discr, boundaries, fluid_state, alpha, gas_model=None, quadrature_tag An optional identifier denoting a particular quadrature discretization to use during operator evaluations. - The default value is *None*. - boundary_kwargs: :class:`dict` - dictionary of extra arguments to pass through to the boundary conditions + volume_dd: grudge.dof_desc.DOFDesc + The DOF descriptor of the volume on which to apply the operator. Returns ------- :class:`mirgecom.fluid.ConservedVars` The artificial viscosity operator applied to *q*. """ + boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in boundaries.items()} + cv = fluid_state.cv actx = cv.array_context - dd_vol = DOFDesc("vol", quadrature_tag) - dd_faces = DOFDesc("all_faces", quadrature_tag) + + dd_base = volume_dd + dd_vol = dd_base.with_discr_tag(quadrature_tag) + dd_allfaces = dd_vol.trace(FACE_RESTR_ALL) from warnings import warn @@ -228,12 +237,13 @@ def av_laplacian_operator(discr, boundaries, fluid_state, alpha, gas_model=None, interp_to_surf_quad = partial(tracepair_with_discr_tag, discr, quadrature_tag) def interp_to_vol_quad(u): - return op.project(discr, "vol", dd_vol, u) + return op.project(discr, dd_base, dd_vol, u) if operator_states_quad is None: from mirgecom.gas_model import make_operator_fluid_states operator_states_quad = make_operator_fluid_states( - discr, fluid_state, gas_model, boundaries, quadrature_tag) + discr, fluid_state, gas_model, boundaries, quadrature_tag, + volume_dd=dd_base) vol_state_quad, inter_elem_bnd_states_quad, domain_bnd_states_quad = \ operator_states_quad @@ -241,21 +251,24 @@ def interp_to_vol_quad(u): # Get smoothness indicator based on mass component if indicator is None: indicator = smoothness_indicator(discr, fluid_state.mass_density, - kappa=kappa, s0=s0) + kappa=kappa, s0=s0, volume_dd=dd_base) if grad_cv is None: from mirgecom.navierstokes import grad_cv_operator grad_cv = grad_cv_operator(discr, gas_model, boundaries, fluid_state, time=time, quadrature_tag=quadrature_tag, + volume_dd=dd_base, operator_states_quad=operator_states_quad) # Compute R = alpha*grad(Q) r = -alpha * indicator * grad_cv def central_flux_div(utpair): - dd = utpair.dd - normal = actx.thaw(discr.normal(dd)) - return op.project(discr, dd, dd.with_dtag("all_faces"), + dd_trace = utpair.dd + dd_allfaces = dd_trace.with_domain_tag( + replace(dd_trace.domain_tag, tag=FACE_RESTR_ALL)) + normal = actx.thaw(discr.normal(dd_trace)) + return op.project(discr, dd_trace, dd_allfaces, # This uses a central vector flux along nhat: # flux = 1/2 * (grad(Q)- + grad(Q)+) .dot. nhat divergence_numerical_flux(utpair.int, utpair.ext)@normal) @@ -263,21 +276,26 @@ def central_flux_div(utpair): # Total flux of grad(Q) across element boundaries r_bnd = ( # Rank-local and cross-rank (across parallel partitions) contributions - + sum(central_flux_div(interp_to_surf_quad(tpair=tpair)) - for tpair in interior_trace_pairs(discr, r, tag=_AVRTag)) + sum( + central_flux_div(interp_to_surf_quad(tpair=tpair)) + for tpair in interior_trace_pairs( + discr, r, volume_dd=dd_base, tag=_AVRTag)) # Contributions from boundary fluxes - + sum(boundaries[btag].av_flux( - discr, - btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), - diffusion=r) for btag in boundaries) + + sum( + bdry.av_flux( + discr, + dd_vol=dd_vol, + dd_bdry=dd_vol.with_domain_tag(bdtag), + diffusion=r) + for bdtag, bdry in boundaries.items()) ) # Return the AV RHS term - return -div_operator(discr, dd_vol, dd_faces, interp_to_vol_quad(r), r_bnd) + return -div_operator(discr, dd_vol, dd_allfaces, interp_to_vol_quad(r), r_bnd) -def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): +def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0, volume_dd=DD_VOLUME_ALL): r"""Calculate the smoothness indicator. Parameters @@ -304,7 +322,7 @@ def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): actx = u.array_context - @memoize_in(actx, (smoothness_indicator, "smooth_comp_knl")) + @memoize_in(actx, (smoothness_indicator, "smooth_comp_knl", volume_dd)) def indicator_prg(): """Compute the smoothness indicator for all elements.""" from arraycontext import make_loopy_program @@ -331,7 +349,7 @@ def indicator_prg(): "idof": ConcurrentDOFInameTag()}) @keyed_memoize_in(actx, (smoothness_indicator, - "highest_mode"), + "highest_mode", volume_dd), lambda grp: grp.discretization_key()) def highest_mode(grp): return actx.from_numpy( @@ -341,7 +359,9 @@ def highest_mode(grp): ) # Convert to modal solution representation - modal_map = discr.connection_from_dds(DD_VOLUME, DD_VOLUME_MODAL) + dd_vol = volume_dd + dd_modal = dd_vol.with_discr_tag(DISCR_TAG_MODAL) + modal_map = discr.connection_from_dds(dd_vol, dd_modal) uhat = modal_map(u) # Compute smoothness indicator value @@ -362,7 +382,7 @@ def highest_mode(grp): ))) .reshape(-1, 1)), uhat[grp.index].shape)) - for grp in discr.discr_from_dd("vol").groups + for grp in discr.discr_from_dd(dd_vol).groups ) ) else: @@ -374,7 +394,7 @@ def highest_mode(grp): vec=uhat[grp.index], modes_active_flag=highest_mode(grp) )["result"] - for grp in discr.discr_from_dd("vol").groups + for grp in discr.discr_from_dd(dd_vol).groups ) ) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 495a5712a..4c84d6022 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -51,8 +51,11 @@ from warnings import warn import numpy as np +from dataclasses import replace from arraycontext import get_container_context_recursively from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from meshmode.discretization.connection import FACE_RESTR_ALL +from grudge.dof_desc import VolumeDomainTag, as_dofdesc from mirgecom.fluid import make_conserved from grudge.trace_pair import TracePair import grudge.op as op @@ -75,7 +78,7 @@ class FluidBoundary(metaclass=ABCMeta): """ @abstractmethod - def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, + def inviscid_divergence_flux(self, discr, dd_bdry, gas_model, state_minus, numerical_flux_func, **kwargs): """Get the inviscid boundary flux for the divergence operator. @@ -92,11 +95,12 @@ def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, Fluid state object with the conserved state, and dependent quantities for the (-) side of the boundary specified by - *btag*. + *dd_bdry*. - btag: + dd_bdry: - Boundary tag indicating which domain boundary to process + Boundary DOF descriptor (or object convertible to one) indicating which + domain boundary to process gas_model: :class:`~mirgecom.gas_model.GasModel` @@ -116,7 +120,7 @@ def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, """ @abstractmethod - def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, + def viscous_divergence_flux(self, discr, dd_bdry, gas_model, state_minus, grad_cv_minus, grad_t_minus, numerical_flux_func, **kwargs): """Get the viscous boundary flux for the divergence operator. @@ -130,25 +134,26 @@ def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, A discretization collection encapsulating the DG elements - btag: + dd_bdry: - Boundary tag indicating which domain boundary to process + Boundary DOF descriptor (or object convertible to one) indicating which + domain boundary to process state_minus: :class:`~mirgecom.gas_model.FluidState` Fluid state object with the conserved state, and dependent quantities for the (-) side of the boundary specified - by *btag*. + by *dd_bdry*. grad_cv_minus: :class:`~mirgecom.fluid.ConservedVars` The gradient of the conserved quantities on the (-) side - of the boundary specified by *btag*. + of the boundary specified by *dd_bdry*. grad_t_minus: numpy.ndarray The gradient of the fluid temperature on the (-) side - of the boundary specified by *btag*. + of the boundary specified by *dd_bdry*. gas_model: :class:`~mirgecom.gas_model.GasModel` @@ -168,7 +173,7 @@ def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, """ @abstractmethod - def cv_gradient_flux(self, discr, btag, gas_model, state_minus, **kwargs): + def cv_gradient_flux(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Get the boundary flux for the gradient of the fluid conserved variables. This routine returns the facial flux used by the gradient operator to @@ -180,15 +185,16 @@ def cv_gradient_flux(self, discr, btag, gas_model, state_minus, **kwargs): A discretization collection encapsulating the DG elements - btag: + dd_bdry: - Boundary tag indicating which domain boundary to process + Boundary DOF descriptor (or object convertible to one) indicating which + domain boundary to process state_minus: :class:`~mirgecom.gas_model.FluidState` Fluid state object with the conserved state, and dependent quantities for the (-) side of the boundary specified by - *btag*. + *dd_bdry*. gas_model: :class:`~mirgecom.gas_model.GasModel` @@ -201,7 +207,7 @@ def cv_gradient_flux(self, discr, btag, gas_model, state_minus, **kwargs): """ @abstractmethod - def temperature_gradient_flux(self, discr, btag, gas_model, state_minus, + def temperature_gradient_flux(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Get the boundary flux for the gradient of the fluid temperature. @@ -215,15 +221,16 @@ def temperature_gradient_flux(self, discr, btag, gas_model, state_minus, A discretization collection encapsulating the DG elements - btag: + dd_bdry: - Boundary tag indicating which domain boundary to process + Boundary DOF descriptor (or object convertible to one) indicating which + domain boundary to process state_minus: :class:`~mirgecom.gas_model.FluidState` Fluid state object with the conserved state, and dependent quantities for the (-) side of the boundary specified by - *btag*. + *dd_bdry*. gas_model: :class:`~mirgecom.gas_model.GasModel` @@ -318,17 +325,17 @@ def __init__(self, if not self._bnd_grad_temperature_func: self._bnd_grad_temperature_func = self._identical_grad_temperature - def _boundary_quantity(self, discr, btag, quantity, local=False, **kwargs): + def _boundary_quantity(self, discr, dd_bdry, quantity, local=False, **kwargs): """Get a boundary quantity on local boundary, or projected to "all_faces".""" - from grudge.dof_desc import as_dofdesc - btag = as_dofdesc(btag) + dd_allfaces = dd_bdry.with_domain_tag( + replace(dd_bdry.domain_tag, tag=FACE_RESTR_ALL)) return quantity if local else op.project(discr, - btag, btag.with_dtag("all_faces"), quantity) + dd_bdry, dd_allfaces, quantity) - def _boundary_state_pair(self, discr, btag, gas_model, state_minus, **kwargs): - return TracePair(btag, + def _boundary_state_pair(self, discr, dd_bdry, gas_model, state_minus, **kwargs): + return TracePair(dd_bdry, interior=state_minus, - exterior=self._bnd_state_func(discr=discr, btag=btag, + exterior=self._bnd_state_func(discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, **kwargs)) @@ -340,15 +347,15 @@ def _boundary_state_pair(self, discr, btag, gas_model, state_minus, **kwargs): # {{{ Default boundary helpers # Returns temperature(+) for boundaries that prescribe CV(+) - def _temperature_for_prescribed_state(self, discr, btag, + def _temperature_for_prescribed_state(self, discr, dd_bdry, gas_model, state_minus, **kwargs): - boundary_state = self._bnd_state_func(discr=discr, btag=btag, + boundary_state = self._bnd_state_func(discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, **kwargs) return boundary_state.temperature - def _interior_temperature(self, discr, btag, gas_model, state_minus, + def _interior_temperature(self, discr, dd_bdry, gas_model, state_minus, **kwargs): return state_minus.temperature @@ -358,38 +365,38 @@ def _identical_state(self, state_minus, **kwargs): def _identical_grad_cv(self, grad_cv_minus, **kwargs): return grad_cv_minus - def _identical_grad_temperature(self, grad_t_minus, **kwargs): + def _identical_grad_temperature(self, discr, dd_bdry, grad_t_minus, **kwargs): return grad_t_minus # Returns the flux to be used by the gradient operator when computing the # gradient of the fluid solution on boundaries that prescribe CV(+). - def _gradient_flux_for_prescribed_cv(self, discr, btag, gas_model, state_minus, - **kwargs): + def _gradient_flux_for_prescribed_cv(self, discr, dd_bdry, gas_model, + state_minus, **kwargs): # Use prescribed external state and gradient numerical flux function - boundary_state = self._bnd_state_func(discr=discr, btag=btag, + boundary_state = self._bnd_state_func(discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, **kwargs) - cv_pair = TracePair(btag, + cv_pair = TracePair(dd_bdry, interior=state_minus.cv, exterior=boundary_state.cv) actx = state_minus.array_context - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) from arraycontext import outer return outer(self._grad_num_flux_func(cv_pair.int, cv_pair.ext), nhat) # Returns the flux to be used by the gradient operator when computing the # gradient of fluid temperature using prescribed fluid temperature(+). - def _gradient_flux_for_prescribed_temperature(self, discr, btag, gas_model, + def _gradient_flux_for_prescribed_temperature(self, discr, dd_bdry, gas_model, state_minus, **kwargs): # Feed a boundary temperature to numerical flux for grad op actx = state_minus.array_context - nhat = actx.thaw(discr.normal(btag)) - bnd_tpair = TracePair(btag, + nhat = actx.thaw(discr.normal(dd_bdry)) + bnd_tpair = TracePair(dd_bdry, interior=state_minus.temperature, exterior=self._bnd_temperature_func( - discr=discr, btag=btag, gas_model=gas_model, + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, **kwargs)) from arraycontext import outer return outer(self._grad_num_flux_func(bnd_tpair.int, bnd_tpair.ext), nhat) @@ -398,39 +405,39 @@ def _gradient_flux_for_prescribed_temperature(self, discr, btag, gas_model, # divergence of inviscid fluid transport flux using the boundary's # prescribed CV(+). def _inviscid_flux_for_prescribed_state( - self, discr, btag, gas_model, state_minus, + self, discr, dd_bdry, gas_model, state_minus, numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): # Use a prescribed boundary state and the numerical flux function - boundary_state_pair = self._boundary_state_pair(discr=discr, btag=btag, + boundary_state_pair = self._boundary_state_pair(discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, **kwargs) - normal = state_minus.array_context.thaw(discr.normal(btag)) + normal = state_minus.array_context.thaw(discr.normal(dd_bdry)) return numerical_flux_func(boundary_state_pair, gas_model, normal) # Returns the flux to be used by the divergence operator when computing the # divergence of viscous fluid transport flux using the boundary's # prescribed CV(+). def _viscous_flux_for_prescribed_state( - self, discr, btag, gas_model, state_minus, grad_cv_minus, grad_t_minus, - numerical_flux_func=viscous_facial_flux_central, **kwargs): + self, discr, dd_bdry, gas_model, state_minus, grad_cv_minus, + grad_t_minus, numerical_flux_func=viscous_facial_flux_central, **kwargs): state_pair = self._boundary_state_pair( - discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus, - **kwargs) + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, + state_minus=state_minus, **kwargs) grad_cv_pair = \ - TracePair(btag, interior=grad_cv_minus, + TracePair(dd_bdry, interior=grad_cv_minus, exterior=self._bnd_grad_cv_func( - discr=discr, btag=btag, gas_model=gas_model, + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, grad_cv_minus=grad_cv_minus, grad_t_minus=grad_t_minus)) grad_t_pair = \ TracePair( - btag, interior=grad_t_minus, + dd_bdry, interior=grad_t_minus, exterior=self._bnd_grad_temperature_func( - discr=discr, btag=btag, gas_model=gas_model, + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, grad_cv_minus=grad_cv_minus, grad_t_minus=grad_t_minus)) @@ -440,32 +447,37 @@ def _viscous_flux_for_prescribed_state( # }}} Default boundary helpers - def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, + def inviscid_divergence_flux(self, discr, dd_bdry, gas_model, state_minus, numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): """Get the inviscid boundary flux for the divergence operator.""" - return self._inviscid_flux_func(discr, btag, gas_model, state_minus, + dd_bdry = as_dofdesc(dd_bdry) + return self._inviscid_flux_func(discr, dd_bdry, gas_model, state_minus, numerical_flux_func=numerical_flux_func, **kwargs) - def cv_gradient_flux(self, discr, btag, gas_model, state_minus, **kwargs): - """Get the cv flux for *btag* for use in the gradient operator.""" + def cv_gradient_flux(self, discr, dd_bdry, gas_model, state_minus, **kwargs): + """Get the flux for *dd_bdry* for use in grad(CV).""" + dd_bdry = as_dofdesc(dd_bdry) return self._cv_gradient_flux_func( - discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus, - **kwargs) + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, + state_minus=state_minus, **kwargs) - def temperature_gradient_flux(self, discr, btag, gas_model, state_minus, + def temperature_gradient_flux(self, discr, dd_bdry, gas_model, state_minus, **kwargs): - """Get the "temperature flux" for *btag* for use in the gradient operator.""" - return self._temperature_grad_flux_func(discr, btag, gas_model, state_minus, - **kwargs) + """Get the flux for *dd_bdry* for use in grad(T).""" + dd_bdry = as_dofdesc(dd_bdry) + return self._temperature_grad_flux_func(discr, dd_bdry, gas_model, + state_minus, **kwargs) - def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, + def viscous_divergence_flux(self, discr, dd_bdry, gas_model, state_minus, grad_cv_minus, grad_t_minus, numerical_flux_func=viscous_facial_flux_central, **kwargs): - """Get the viscous flux for *btag* for use in the divergence operator.""" - return self._viscous_flux_func(discr=discr, btag=btag, gas_model=gas_model, + """Get the viscous flux for *dd_bdry* for use in the divergence operator.""" + dd_bdry = as_dofdesc(dd_bdry) + return self._viscous_flux_func(discr=discr, dd_bdry=dd_bdry, + gas_model=gas_model, state_minus=state_minus, grad_cv_minus=grad_cv_minus, grad_t_minus=grad_t_minus, @@ -477,17 +489,20 @@ def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, def _identical_grad_av(self, grad_av_minus, **kwargs): return grad_av_minus - def av_flux(self, discr, btag, diffusion, **kwargs): + def av_flux(self, discr, dd_bdry, diffusion, **kwargs): """Get the diffusive fluxes for the AV operator API.""" - grad_av_minus = op.project(discr, "vol", btag, diffusion) + dd_bdry = as_dofdesc(dd_bdry) + dd_vol = dd_bdry.with_domain_tag( + VolumeDomainTag(dd_bdry.domain_tag.volume_tag)) + grad_av_minus = op.project(discr, dd_vol, dd_bdry, diffusion) actx = get_container_context_recursively(grad_av_minus) - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) grad_av_plus = self._bnd_grad_av_func( - discr=discr, btag=btag, grad_av_minus=grad_av_minus, **kwargs) - bnd_grad_pair = TracePair(btag, interior=grad_av_minus, + discr=discr, dd_bdry=dd_bdry, grad_av_minus=grad_av_minus, **kwargs) + bnd_grad_pair = TracePair(dd_bdry, interior=grad_av_minus, exterior=grad_av_plus) num_flux = self._av_num_flux_func(bnd_grad_pair.int, bnd_grad_pair.ext)@nhat - return self._boundary_quantity(discr, btag, num_flux, **kwargs) + return self._boundary_quantity(discr, dd_bdry, num_flux, **kwargs) # }}} @@ -520,7 +535,7 @@ def __init__(self): boundary_grad_av_func=self.adiabatic_slip_grad_av ) - def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): + def adiabatic_slip_state(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary. The exterior solution is set such that there will be vanishing @@ -536,7 +551,7 @@ def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): actx = state_minus.array_context # Grab a unit normal to the boundary - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) # Subtract out the 2*wall-normal component # of velocity from the velocity at the wall to @@ -552,12 +567,12 @@ def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): return make_fluid_state(cv=ext_cv, gas_model=gas_model, temperature_seed=state_minus.temperature) - def adiabatic_slip_grad_av(self, discr, btag, grad_av_minus, **kwargs): + def adiabatic_slip_grad_av(self, discr, dd_bdry, grad_av_minus, **kwargs): """Get the exterior grad(Q) on the boundary for artificial viscosity.""" # Grab some boundary-relevant data dim, = grad_av_minus.mass.shape actx = get_container_context_recursively(grad_av_minus) - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) # Subtract 2*wall-normal component of q # to enforce q=0 on the wall @@ -601,7 +616,8 @@ def __init__(self, wall_velocity=None, dim=2): raise ValueError(f"Specified wall velocity must be {dim}-vector.") self._wall_velocity = wall_velocity - def adiabatic_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs): + def adiabatic_noslip_state( + self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary. Sets the external state s.t. $v^+ = -v^-$, giving vanishing contact velocity @@ -644,7 +660,8 @@ def __init__(self, wall_temperature=300): boundary_temperature_func=self.temperature_bc ) - def isothermal_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs): + def isothermal_noslip_state( + self, discr, dd_bdry, gas_model, state_minus, **kwargs): r"""Get the interior and exterior solution (*state_minus*) on the boundary. Sets the external state s.t. $v^+ = -v^-$, giving vanishing contact velocity @@ -714,8 +731,9 @@ def __init__(self, numdim, free_stream_pressure, self, boundary_state_func=self.farfield_state ) - def farfield_state(self, discr, btag, gas_model, state_minus, **kwargs): + def farfield_state(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary.""" + dd_bdry = as_dofdesc(dd_bdry) free_stream_mass_fractions = (0.*state_minus.species_mass_fractions + self._species_mass_fractions) @@ -814,7 +832,7 @@ def __init__(self, boundary_pressure=101325): self, boundary_state_func=self.outflow_state ) - def outflow_state(self, discr, btag, gas_model, state_minus, **kwargs): + def outflow_state(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary. This is the partially non-reflective boundary state described by @@ -828,8 +846,9 @@ def outflow_state(self, discr, btag, gas_model, state_minus, **kwargs): from ideal gas law with the mixture-weighted gas constant. For ideal gas, the internal energy is obtained directly from pressure. """ + dd_bdry = as_dofdesc(dd_bdry) actx = state_minus.array_context - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) # boundary-normal velocity boundary_vel = np.dot(state_minus.velocity, nhat)*nhat boundary_speed = actx.np.sqrt(np.dot(boundary_vel, boundary_vel)) @@ -898,14 +917,15 @@ def __init__(self, dim, free_stream_pressure=None, free_stream_temperature=None, self, boundary_state_func=self.inflow_state ) - def inflow_state(self, discr, btag, gas_model, state_minus, **kwargs): + def inflow_state(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary. This is the partially non-reflective boundary state described by [Mengaldo_2014]_ eqn. 40 if super-sonic, 41 if sub-sonic. """ + dd_bdry = as_dofdesc(dd_bdry) actx = state_minus.array_context - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) v_plus = np.dot(self._free_stream_state.velocity, nhat) rho_plus = self._free_stream_state.mass_density @@ -978,7 +998,8 @@ def __init__(self, wall_temperature=300): boundary_gradient_cv_func=self.grad_cv_bc ) - def isothermal_wall_state(self, discr, btag, gas_model, state_minus, **kwargs): + def isothermal_wall_state( + self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Return state with zero-velocity and the respective internal energy.""" temperature_wall = self._wall_temp + 0*state_minus.mass_density mom_plus = state_minus.mass_density*0.*state_minus.velocity @@ -997,9 +1018,10 @@ def isothermal_wall_state(self, discr, btag, gas_model, state_minus, **kwargs): return make_fluid_state(cv=cv_plus, gas_model=gas_model, temperature_seed=state_minus.temperature) - def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, + def inviscid_wall_flux(self, discr, dd_bdry, gas_model, state_minus, numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): """Return Riemann flux using state with mom opposite of interior state.""" + dd_bdry = as_dofdesc(dd_bdry) wall_cv = make_conserved(dim=state_minus.dim, mass=state_minus.mass_density, momentum=-state_minus.momentum_density, @@ -1007,9 +1029,9 @@ def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, species_mass=state_minus.species_mass_density) wall_state = make_fluid_state(cv=wall_cv, gas_model=gas_model, temperature_seed=state_minus.temperature) - state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) + state_pair = TracePair(dd_bdry, interior=state_minus, exterior=wall_state) - normal = state_minus.array_context.thaw(discr.normal(btag)) + normal = state_minus.array_context.thaw(discr.normal(dd_bdry)) return numerical_flux_func(state_pair, gas_model, normal) def temperature_bc(self, state_minus, **kwargs): @@ -1037,16 +1059,17 @@ def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): momentum=grad_cv_minus.momentum, species_mass=grad_species_mass_plus) - def viscous_wall_flux(self, discr, btag, gas_model, state_minus, + def viscous_wall_flux(self, discr, dd_bdry, gas_model, state_minus, grad_cv_minus, grad_t_minus, numerical_flux_func=viscous_facial_flux_central, **kwargs): """Return the boundary flux for the divergence of the viscous flux.""" + dd_bdry = as_dofdesc(dd_bdry) from mirgecom.viscous import viscous_flux actx = state_minus.array_context - normal = actx.thaw(discr.normal(btag)) + normal = actx.thaw(discr.normal(dd_bdry)) - state_plus = self.isothermal_wall_state(discr=discr, btag=btag, + state_plus = self.isothermal_wall_state(discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, **kwargs) grad_cv_plus = self.grad_cv_bc(state_minus=state_minus, @@ -1054,7 +1077,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, normal=normal, **kwargs) grad_t_plus = self._bnd_grad_temperature_func( - discr=discr, btag=btag, gas_model=gas_model, + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, grad_cv_minus=grad_cv_minus, grad_t_minus=grad_t_minus) @@ -1091,9 +1114,10 @@ def __init__(self): boundary_gradient_cv_func=self.grad_cv_bc ) - def adiabatic_wall_state_for_advection(self, discr, btag, gas_model, + def adiabatic_wall_state_for_advection(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Return state with zero-velocity.""" + dd_bdry = as_dofdesc(dd_bdry) mom_plus = -state_minus.momentum_density cv_plus = make_conserved( state_minus.dim, mass=state_minus.mass_density, @@ -1103,9 +1127,10 @@ def adiabatic_wall_state_for_advection(self, discr, btag, gas_model, return make_fluid_state(cv=cv_plus, gas_model=gas_model, temperature_seed=state_minus.temperature) - def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, + def adiabatic_wall_state_for_diffusion(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Return state with zero-velocity.""" + dd_bdry = as_dofdesc(dd_bdry) mom_plus = 0*state_minus.momentum_density cv_plus = make_conserved( state_minus.dim, mass=state_minus.mass_density, @@ -1115,14 +1140,15 @@ def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, return make_fluid_state(cv=cv_plus, gas_model=gas_model, temperature_seed=state_minus.temperature) - def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, + def inviscid_wall_flux(self, discr, dd_bdry, gas_model, state_minus, numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): """Return Riemann flux using state with mom opposite of interior state.""" + dd_bdry = as_dofdesc(dd_bdry) wall_state = self.adiabatic_wall_state_for_advection( - discr, btag, gas_model, state_minus) - state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) + discr, dd_bdry, gas_model, state_minus) + state_pair = TracePair(dd_bdry, interior=state_minus, exterior=wall_state) - normal = state_minus.array_context.thaw(discr.normal(btag)) + normal = state_minus.array_context.thaw(discr.normal(dd_bdry)) return numerical_flux_func(state_pair, gas_model, normal) def temperature_bc(self, state_minus, **kwargs): @@ -1154,17 +1180,19 @@ def grad_temperature_bc(self, grad_t_minus, normal, **kwargs): """Return grad(temperature) to be used in viscous flux at wall.""" return grad_t_minus - np.dot(grad_t_minus, normal)*normal - def viscous_wall_flux(self, discr, btag, gas_model, state_minus, + def viscous_wall_flux(self, discr, dd_bdry, gas_model, state_minus, grad_cv_minus, grad_t_minus, numerical_flux_func=viscous_facial_flux_central, **kwargs): """Return the boundary flux for the divergence of the viscous flux.""" + dd_bdry = as_dofdesc(dd_bdry) from mirgecom.viscous import viscous_flux actx = state_minus.array_context - normal = actx.thaw(discr.normal(btag)) + normal = actx.thaw(discr.normal(dd_bdry)) state_plus = self.adiabatic_wall_state_for_diffusion( - discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus) + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, + state_minus=state_minus) grad_cv_plus = self.grad_cv_bc(state_minus=state_minus, grad_cv_minus=grad_cv_minus, @@ -1227,11 +1255,11 @@ def __init__(self): boundary_gradient_cv_func=self.grad_cv_bc ) - def adiabatic_wall_state_for_advection(self, discr, btag, gas_model, + def adiabatic_wall_state_for_advection(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Return state with opposite normal momentum.""" actx = state_minus.array_context - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) # flip the normal component of the velocity mom_plus = (state_minus.momentum_density @@ -1248,11 +1276,11 @@ def adiabatic_wall_state_for_advection(self, discr, btag, gas_model, return make_fluid_state(cv=cv_plus, gas_model=gas_model, temperature_seed=state_minus.temperature) - def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, + def adiabatic_wall_state_for_diffusion(self, discr, dd_bdry, gas_model, state_minus, **kwargs): """Return state with zero normal-velocity and energy(Twall).""" actx = state_minus.array_context - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) # remove normal component from velocity/momentum mom_plus = (state_minus.momentum_density @@ -1274,15 +1302,16 @@ def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, return make_fluid_state(cv=cv_plus, gas_model=gas_model, temperature_seed=state_minus.temperature) - def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, + def inviscid_wall_flux(self, discr, dd_bdry, gas_model, state_minus, numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): """Return Riemann flux using state with mom opposite of interior state.""" + dd_bdry = as_dofdesc(dd_bdry) wall_state = self.adiabatic_wall_state_for_advection( - discr, btag, gas_model, state_minus) - state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) + discr, dd_bdry, gas_model, state_minus) + state_pair = TracePair(dd_bdry, interior=state_minus, exterior=wall_state) actx = state_minus.array_context - normal = actx.thaw(discr.normal(btag)) + normal = actx.thaw(discr.normal(dd_bdry)) return numerical_flux_func(state_pair, gas_model, normal) def temperature_bc(self, state_minus, **kwargs): @@ -1345,17 +1374,19 @@ def grad_temperature_bc(self, grad_t_minus, normal, **kwargs): """Return grad(temperature) to be used in viscous flux at wall.""" return grad_t_minus - np.dot(grad_t_minus, normal)*normal - def viscous_wall_flux(self, discr, btag, gas_model, state_minus, + def viscous_wall_flux(self, discr, dd_bdry, gas_model, state_minus, grad_cv_minus, grad_t_minus, numerical_flux_func=viscous_facial_flux_central, **kwargs): """Return the boundary flux for the divergence of the viscous flux.""" + dd_bdry = as_dofdesc(dd_bdry) from mirgecom.viscous import viscous_flux actx = state_minus.array_context - normal = actx.thaw(discr.normal(btag)) + normal = actx.thaw(discr.normal(dd_bdry)) state_plus = self.adiabatic_wall_state_for_diffusion( - discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus) + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, + state_minus=state_minus) grad_cv_plus = self.grad_cv_bc(state_minus=state_minus, grad_cv_minus=grad_cv_minus, @@ -1369,12 +1400,12 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, return f_ext@normal - def adiabatic_slip_grad_av(self, discr, btag, grad_av_minus, **kwargs): + def adiabatic_slip_grad_av(self, discr, dd_bdry, grad_av_minus, **kwargs): """Get the exterior grad(Q) on the boundary for artificial viscosity.""" # Grab some boundary-relevant data dim, = grad_av_minus.mass.shape actx = get_container_context_recursively(grad_av_minus) - nhat = actx.thaw(discr.normal(btag)) + nhat = actx.thaw(discr.normal(dd_bdry)) # Subtract 2*wall-normal component of q # to enforce q=0 on the wall diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index ffc0acb03..85f891b71 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -36,9 +36,11 @@ import abc import numpy as np import numpy.linalg as la # noqa +from dataclasses import replace from pytools.obj_array import make_obj_array, obj_array_vectorize_n_args from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.dof_desc import DOFDesc, as_dofdesc, DISCR_TAG_BASE +from meshmode.discretization.connection import FACE_RESTR_ALL # noqa +from grudge.dof_desc import DD_VOLUME_ALL, DISCR_TAG_BASE, as_dofdesc from grudge.trace_pair import TracePair, interior_trace_pairs import grudge.op as op @@ -47,47 +49,72 @@ def grad_flux(discr, u_tpair, *, quadrature_tag=DISCR_TAG_BASE): r"""Compute the numerical flux for $\nabla u$.""" actx = u_tpair.int.array_context - dd = u_tpair.dd - dd_quad = dd.with_discr_tag(quadrature_tag) - dd_allfaces_quad = dd_quad.with_dtag("all_faces") + dd_trace = u_tpair.dd + dd_trace_quad = dd_trace.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_trace_quad.with_domain_tag( + replace(dd_trace_quad.domain_tag, tag=FACE_RESTR_ALL)) - normal_quad = actx.thaw(discr.normal(dd_quad)) + normal_quad = actx.thaw(discr.normal(dd_trace_quad)) def to_quad(a): - return op.project(discr, dd, dd_quad, a) + return op.project(discr, dd_trace, dd_trace_quad, a) def flux(u, normal): return -u * normal - return op.project(discr, dd_quad, dd_allfaces_quad, flux( + return op.project(discr, dd_trace_quad, dd_allfaces_quad, flux( to_quad(u_tpair.avg), normal_quad)) def diffusion_flux( - discr, kappa_tpair, grad_u_tpair, *, quadrature_tag=DISCR_TAG_BASE): + discr, u_tpair, kappa_tpair, grad_u_tpair, lengthscales_tpair, *, + penalty_amount=None, quadrature_tag=DISCR_TAG_BASE): r"""Compute the numerical flux for $\nabla \cdot (\kappa \nabla u)$.""" + if penalty_amount is None: + # *shrug* + penalty_amount = 0.05 + actx = grad_u_tpair.int[0].array_context - dd = grad_u_tpair.dd - dd_quad = dd.with_discr_tag(quadrature_tag) - dd_allfaces_quad = dd_quad.with_dtag("all_faces") + dd_trace = grad_u_tpair.dd + dd_trace_quad = dd_trace.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_trace_quad.with_domain_tag( + replace(dd_trace_quad.domain_tag, tag=FACE_RESTR_ALL)) - normal_quad = actx.thaw(discr.normal(dd_quad)) + normal_quad = actx.thaw(discr.normal(dd_trace_quad)) def to_quad(a): - return op.project(discr, dd, dd_quad, a) + return op.project(discr, dd_trace, dd_trace_quad, a) def flux(kappa, grad_u, normal): return -kappa * np.dot(grad_u, normal) - flux_tpair = TracePair(dd_quad, + def harmonic_mean(x, y): + x_plus_y = actx.np.where(actx.np.greater(x + y, 0*x), x + y, 0*x+1) + return 2*x*y/x_plus_y + + kappa_harmonic_mean_quad = harmonic_mean( + to_quad(kappa_tpair.int), + to_quad(kappa_tpair.ext)) + + flux_quad_tpair = TracePair(dd_trace_quad, interior=flux( - to_quad(kappa_tpair.int), to_quad(grad_u_tpair.int), normal_quad), + kappa_harmonic_mean_quad, to_quad(grad_u_tpair.int), normal_quad), exterior=flux( - to_quad(kappa_tpair.ext), to_quad(grad_u_tpair.ext), normal_quad) + kappa_harmonic_mean_quad, to_quad(grad_u_tpair.ext), normal_quad) ) - return op.project(discr, dd_quad, dd_allfaces_quad, flux_tpair.avg) + lengthscales_avg_quad = to_quad(lengthscales_tpair.avg) + + # TODO: Figure out what this is really supposed to be + tau_quad = penalty_amount*kappa_harmonic_mean_quad/lengthscales_avg_quad + + u_int_quad = to_quad(u_tpair.int) + u_ext_quad = to_quad(u_tpair.ext) + + return op.project( + discr, dd_trace_quad, dd_allfaces_quad, + flux_quad_tpair.avg - tau_quad*(u_ext_quad - u_int_quad)) class DiffusionBoundary(metaclass=abc.ABCMeta): @@ -100,14 +127,16 @@ class DiffusionBoundary(metaclass=abc.ABCMeta): @abc.abstractmethod def get_grad_flux( - self, discr, dd, u, *, quadrature_tag=DISCR_TAG_BASE): - """Compute the flux for grad(u) on the boundary corresponding to *dd*.""" + self, discr, dd_vol, dd_bdry, u, *, + quadrature_tag=DISCR_TAG_BASE): + """Compute the flux for grad(u) on the boundary *dd_bdry*.""" raise NotImplementedError @abc.abstractmethod def get_diffusion_flux( - self, discr, dd, kappa, grad_u, *, quadrature_tag=DISCR_TAG_BASE): - """Compute the flux for diff(u) on the boundary corresponding to *dd*.""" + self, discr, dd_vol, dd_bdry, u, kappa, grad_u, *, + penalty_amount=None, quadrature_tag=DISCR_TAG_BASE): + """Compute the flux for diff(u) on the boundary *dd_bdry*.""" raise NotImplementedError @@ -140,22 +169,33 @@ def __init__(self, value): self.value = value def get_grad_flux( - self, discr, dd, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + self, discr, dd_vol, dd_bdry, u, *, + quadrature_tag=DISCR_TAG_BASE): # noqa: D102 """Get gradient flux.""" - u_int = op.project(discr, "vol", dd, u) - u_tpair = TracePair(dd, interior=u_int, exterior=2*self.value-u_int) + u_int = op.project(discr, dd_vol, dd_bdry, u) + u_tpair = TracePair(dd_bdry, interior=u_int, exterior=2*self.value-u_int) return grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) def get_diffusion_flux( - self, discr, dd, kappa, grad_u, *, - quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + self, discr, dd_vol, dd_bdry, u, kappa, grad_u, *, + penalty_amount=None, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 """Get diffusion flux.""" - kappa_int = op.project(discr, "vol", dd, kappa) - kappa_tpair = TracePair(dd, interior=kappa_int, exterior=kappa_int) - grad_u_int = op.project(discr, "vol", dd, grad_u) - grad_u_tpair = TracePair(dd, interior=grad_u_int, exterior=grad_u_int) + u_int = op.project(discr, dd_vol, dd_bdry, u) + u_tpair = TracePair(dd_bdry, interior=u_int, exterior=2*self.value-u_int) + kappa_int = op.project(discr, dd_vol, dd_bdry, kappa) + kappa_tpair = TracePair(dd_bdry, interior=kappa_int, exterior=kappa_int) + grad_u_int = op.project(discr, dd_vol, dd_bdry, grad_u) + grad_u_tpair = TracePair(dd_bdry, interior=grad_u_int, exterior=grad_u_int) + # Memoized, so should be OK to call here + from grudge.dt_utils import characteristic_lengthscales + lengthscales = ( + characteristic_lengthscales(u.array_context, discr, dd_vol) * (0*u+1)) + lengthscales_int = op.project(discr, dd_vol, dd_bdry, lengthscales) + lengthscales_tpair = TracePair( + dd_bdry, interior=lengthscales_int, exterior=lengthscales_int) return diffusion_flux( - discr, kappa_tpair, grad_u_tpair, quadrature_tag=quadrature_tag) + discr, u_tpair, kappa_tpair, grad_u_tpair, lengthscales_tpair, + penalty_amount=penalty_amount, quadrature_tag=quadrature_tag) class NeumannDiffusionBoundary(DiffusionBoundary): @@ -195,30 +235,36 @@ def __init__(self, value): self.value = value def get_grad_flux( - self, discr, dd, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + self, discr, dd_vol, dd_bdry, u, *, + quadrature_tag=DISCR_TAG_BASE): # noqa: D102 """Get gradient flux.""" - u_int = op.project(discr, "vol", dd, u) - u_tpair = TracePair(dd, interior=u_int, exterior=u_int) + u_int = op.project(discr, dd_vol, dd_bdry, u) + u_tpair = TracePair(dd_bdry, interior=u_int, exterior=u_int) return grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) def get_diffusion_flux( - self, discr, dd, kappa, grad_u, *, - quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + self, discr, dd_vol, dd_bdry, u, kappa, grad_u, *, + penalty_amount=None, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 """Get diffusion flux.""" - dd_quad = dd.with_discr_tag(quadrature_tag) - dd_allfaces_quad = dd_quad.with_dtag("all_faces") + dd_bdry_quad = dd_bdry.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_bdry_quad.with_domain_tag( + replace(dd_bdry_quad.domain_tag, tag=FACE_RESTR_ALL)) # Compute the flux directly instead of constructing an external grad_u value # (and the associated TracePair); this approach is simpler in the # spatially-varying kappa case (the other approach would result in a # grad_u_tpair that lives in the quadrature discretization; diffusion_flux # would need to be modified to accept such values). - kappa_int_quad = op.project(discr, "vol", dd_quad, kappa) - value_quad = op.project(discr, dd, dd_quad, self.value) + kappa_int_quad = op.project(discr, dd_vol, dd_bdry_quad, kappa) + value_quad = op.project(discr, dd_bdry, dd_bdry_quad, self.value) flux_quad = -kappa_int_quad*value_quad - return op.project(discr, dd_quad, dd_allfaces_quad, flux_quad) + return op.project(discr, dd_bdry_quad, dd_allfaces_quad, flux_quad) + + +class _DiffusionState1Tag: + pass -class _DiffusionStateTag: +class _DiffusionState2Tag: pass @@ -230,7 +276,13 @@ class _DiffusionGradTag: pass -def grad_operator(discr, boundaries, u, quadrature_tag=DISCR_TAG_BASE): +class _DiffusionLengthscalesTag: + pass + + +def grad_operator( + discr, boundaries, u, *, quadrature_tag=DISCR_TAG_BASE, + volume_dd=DD_VOLUME_ALL): r""" Compute the gradient of *u*. @@ -249,6 +301,8 @@ def grad_operator(discr, boundaries, u, quadrature_tag=DISCR_TAG_BASE): quadrature_tag: quadrature tag indicating which discretization in *discr* to use for overintegration + volume_dd: grudge.dof_desc.DOFDesc + the DOF descriptor of the volume on which to apply the operator Returns ------- @@ -262,29 +316,38 @@ def grad_operator(discr, boundaries, u, quadrature_tag=DISCR_TAG_BASE): raise TypeError("boundaries must be the same length as u") return obj_array_vectorize_n_args( lambda boundaries_i, u_i: grad_operator( - discr, boundaries_i, u_i, quadrature_tag=quadrature_tag), + discr, boundaries_i, u_i, quadrature_tag=quadrature_tag, + volume_dd=volume_dd), make_obj_array(boundaries), u) - for btag, bdry in boundaries.items(): + boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in boundaries.items()} + + for bdtag, bdry in boundaries.items(): if not isinstance(bdry, DiffusionBoundary): - raise TypeError(f"Unrecognized boundary type for tag {btag}. " + raise TypeError(f"Unrecognized boundary type for tag {bdtag}. " "Must be an instance of DiffusionBoundary.") - dd_allfaces_quad = DOFDesc("all_faces", quadrature_tag) + dd_vol_base = volume_dd + dd_vol_quad = dd_vol_base.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) - return op.inverse_mass(discr, - op.weak_local_grad(discr, "vol", -u) + return op.inverse_mass( + discr, dd_vol_base, + op.weak_local_grad(discr, dd_vol_base, -u) - # noqa: W504 - op.face_mass(discr, - dd_allfaces_quad, + op.face_mass( + discr, dd_allfaces_quad, sum( grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) for u_tpair in interior_trace_pairs( - discr, u, comm_tag=_DiffusionStateTag)) + discr, u, volume_dd=dd_vol_base, tag=_DiffusionState1Tag)) + sum( - bdry.get_grad_flux( - discr, as_dofdesc(btag), u, quadrature_tag=quadrature_tag) - for btag, bdry in boundaries.items()) + bdry.get_grad_flux(discr, dd_vol_base, + dd_vol_base.with_domain_tag(bdtag), u, + quadrature_tag=quadrature_tag) + for bdtag, bdry in boundaries.items()) ) ) @@ -297,6 +360,19 @@ def _normalize_arguments(*args, **kwargs): else: pos_arg_names = ["kappa", "boundaries", "u"] + if len(args) > len(pos_arg_names): + raise TypeError( + f"diffusion_operator() takes up to {len(pos_arg_names)} positional " + f"arguments but {len(args)} were given") + + all_arg_names = [ + "alpha", "kappa", "quad_tag", "boundaries", "u", "quadrature_tag"] + for arg_name in kwargs.keys(): + if arg_name not in all_arg_names: + raise TypeError( + "diffusion_operator() got an unexpected keyword argument " + f"'{arg_name}'") + arg_dict = { arg_name: arg for arg_name, arg in zip(pos_arg_names[:len(args)], args)} @@ -329,7 +405,13 @@ def _normalize_arguments(*args, **kwargs): return kappa, boundaries, u, quadrature_tag -def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): +def diffusion_operator( + discr, *args, return_grad_u=False, penalty_amount=None, + volume_dd=DD_VOLUME_ALL, + # Added to avoid repeated computation + # FIXME: See if there's a better way to do this + grad_u=None, + **kwargs): r""" Compute the diffusion operator. @@ -346,16 +428,21 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): kappa: numbers.Number or meshmode.dof_array.DOFArray the conductivity value(s) boundaries: - dictionary (or list of dictionaries) mapping boundary tags to + dictionary (or list of dictionaries) mapping boundary domain tags to :class:`DiffusionBoundary` instances u: meshmode.dof_array.DOFArray or numpy.ndarray the DOF array (or object array of DOF arrays) to which the operator should be applied return_grad_u: bool an optional flag indicating whether $\nabla u$ should also be returned + penalty_amount: float + strength parameter for the diffusion flux interior penalty (temporary?); + the default value is 0.05 quadrature_tag: quadrature tag indicating which discretization in *discr* to use for overintegration + volume_dd: grudge.dof_desc.DOFDesc + the DOF descriptor of the volume on which to apply the operator Returns ------- @@ -374,38 +461,62 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): return obj_array_vectorize_n_args( lambda boundaries_i, u_i: diffusion_operator( discr, kappa, boundaries_i, u_i, return_grad_u=return_grad_u, - quadrature_tag=quadrature_tag), + penalty_amount=penalty_amount, quadrature_tag=quadrature_tag, + volume_dd=volume_dd), make_obj_array(boundaries), u) - for btag, bdry in boundaries.items(): + boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in boundaries.items()} + + for bdtag, bdry in boundaries.items(): if not isinstance(bdry, DiffusionBoundary): - raise TypeError(f"Unrecognized boundary type for tag {btag}. " + raise TypeError(f"Unrecognized boundary type for tag {bdtag}. " "Must be an instance of DiffusionBoundary.") - dd_quad = DOFDesc("vol", quadrature_tag) - dd_allfaces_quad = DOFDesc("all_faces", quadrature_tag) + dd_vol_base = volume_dd + dd_vol_quad = dd_vol_base.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) - grad_u = grad_operator(discr, boundaries, u, quadrature_tag=quadrature_tag) + if grad_u is None: + grad_u = grad_operator( + discr, boundaries, u, quadrature_tag=quadrature_tag, + volume_dd=dd_vol_base) - kappa_quad = op.project(discr, "vol", dd_quad, kappa) - grad_u_quad = op.project(discr, "vol", dd_quad, grad_u) + kappa_quad = op.project(discr, dd_vol_base, dd_vol_quad, kappa) + grad_u_quad = op.project(discr, dd_vol_base, dd_vol_quad, grad_u) - diff_u = op.inverse_mass(discr, - op.weak_local_div(discr, dd_quad, -kappa_quad*grad_u_quad) - - 1. # noqa: W504 - * op.face_mass(discr, - dd_allfaces_quad, + from grudge.dt_utils import characteristic_lengthscales + lengthscales = characteristic_lengthscales( + u.array_context, discr, dd=dd_vol_base)*(0*u+1) + + diff_u = op.inverse_mass( + discr, dd_vol_base, + op.weak_local_div(discr, dd_vol_quad, -kappa_quad*grad_u_quad) + - # noqa: W504 + op.face_mass( + discr, dd_allfaces_quad, sum( diffusion_flux( - discr, kappa_tpair, grad_u_tpair, quadrature_tag=quadrature_tag) - for kappa_tpair, grad_u_tpair in zip( - interior_trace_pairs(discr, kappa, comm_tag=_DiffusionKappaTag), - interior_trace_pairs(discr, grad_u, comm_tag=_DiffusionGradTag))) + discr, u_tpair, kappa_tpair, grad_u_tpair, lengthscales_tpair, + penalty_amount=penalty_amount, quadrature_tag=quadrature_tag) + for u_tpair, kappa_tpair, grad_u_tpair, lengthscales_tpair in zip( + interior_trace_pairs( + discr, u, volume_dd=dd_vol_base, tag=_DiffusionState2Tag), + interior_trace_pairs( + discr, kappa, volume_dd=dd_vol_base, tag=_DiffusionKappaTag), + interior_trace_pairs( + discr, grad_u, volume_dd=dd_vol_base, tag=_DiffusionGradTag), + interior_trace_pairs( + discr, lengthscales, volume_dd=dd_vol_base, + tag=_DiffusionLengthscalesTag)) + ) + sum( bdry.get_diffusion_flux( - discr, as_dofdesc(btag), kappa, grad_u, + discr, dd_vol_base, dd_vol_base.with_domain_tag(bdtag), u, kappa, + grad_u, penalty_amount=penalty_amount, quadrature_tag=quadrature_tag) - for btag, bdry in boundaries.items()) + for bdtag, bdry in boundaries.items()) ) ) diff --git a/mirgecom/discretization.py b/mirgecom/discretization.py index c592f8669..40d39bfc7 100644 --- a/mirgecom/discretization.py +++ b/mirgecom/discretization.py @@ -38,11 +38,11 @@ # we can replace it more easily when we refactor the drivers and # examples to use discretization collections, and change it centrally # when we want to change it. -def create_discretization_collection(actx, mesh, order, *, mpi_communicator=None, - quadrature_order=-1): +def create_discretization_collection(actx, volume_meshes, order, *, + mpi_communicator=None, quadrature_order=-1): """Create and return a grudge DG discretization collection.""" from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD - from grudge.discretization import DiscretizationCollection + from grudge.discretization import make_discretization_collection from meshmode.discretization.poly_element import ( QuadratureSimplexGroupFactory, PolynomialRecursiveNodesGroupFactory @@ -51,12 +51,11 @@ def create_discretization_collection(actx, mesh, order, *, mpi_communicator=None if quadrature_order < 0: quadrature_order = 2*order+1 - return DiscretizationCollection( - actx, mesh, + return make_discretization_collection( + actx, volume_meshes, discr_tag_to_group_factory={ DISCR_TAG_BASE: PolynomialRecursiveNodesGroupFactory(order=order, family="lgl"), DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(quadrature_order), - }, - mpi_communicator=mpi_communicator + } ) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 9a970c54d..b193aec68 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -54,7 +54,8 @@ import numpy as np # noqa -from grudge.dof_desc import DOFDesc +from meshmode.discretization.connection import FACE_RESTR_ALL +from grudge.dof_desc import DD_VOLUME_ALL, DISCR_TAG_BASE from mirgecom.gas_model import make_operator_fluid_states from mirgecom.inviscid import ( @@ -68,7 +69,8 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, - quadrature_tag=None, operator_states_quad=None): + quadrature_tag=DISCR_TAG_BASE, volume_dd=DD_VOLUME_ALL, + operator_states_quad=None): r"""Compute RHS of the Euler flow equations. Returns @@ -91,7 +93,8 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, boundaries - Dictionary of boundary functions, one for each valid btag + Dictionary of boundary functions, one for each valid + :class:`~grudge.dof_desc.BoundaryDomainTag` time @@ -106,14 +109,17 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, An optional identifier denoting a particular quadrature discretization to use during operator evaluations. - The default value is *None*. + + volume_dd: grudge.dof_desc.DOFDesc + The DOF descriptor of the volume on which to apply the operator. """ - dd_quad_vol = DOFDesc("vol", quadrature_tag) - dd_quad_faces = DOFDesc("all_faces", quadrature_tag) + dd_quad_vol = volume_dd.with_discr_tag(quadrature_tag) + dd_quad_allfaces = dd_quad_vol.trace(FACE_RESTR_ALL) if operator_states_quad is None: operator_states_quad = make_operator_fluid_states(discr, state, gas_model, - boundaries, quadrature_tag) + boundaries, quadrature_tag, + volume_dd=volume_dd) volume_state_quad, interior_state_pairs_quad, domain_boundary_states_quad = \ operator_states_quad @@ -125,9 +131,10 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, inviscid_flux_bnd = inviscid_flux_on_element_boundary( discr, gas_model, boundaries, interior_state_pairs_quad, domain_boundary_states_quad, quadrature_tag=quadrature_tag, - numerical_flux_func=inviscid_numerical_flux_func, time=time) + numerical_flux_func=inviscid_numerical_flux_func, time=time, + volume_dd=volume_dd) - return -div_operator(discr, dd_quad_vol, dd_quad_faces, + return -div_operator(discr, dd_quad_vol, dd_quad_allfaces, inviscid_flux_vol, inviscid_flux_bnd) diff --git a/mirgecom/filter.py b/mirgecom/filter.py index 91516d57a..cf0a1e2b0 100644 --- a/mirgecom/filter.py +++ b/mirgecom/filter.py @@ -46,11 +46,11 @@ """ import numpy as np -import grudge.dof_desc as dof_desc +from functools import partial -from arraycontext import map_array_container +from grudge.dof_desc import DISCR_TAG_MODAL, as_dofdesc -from functools import partial +from arraycontext import map_array_container from meshmode.dof_array import DOFArray @@ -200,22 +200,20 @@ def filter_modally(dcoll, dd, cutoff, mode_resp_func, field): result: :class:`mirgecom.fluid.ConservedVars` An array container containing the filtered field(s). """ - dd = dof_desc.as_dofdesc(dd) - dd_modal = dof_desc.DD_VOLUME_MODAL - discr = dcoll.discr_from_dd(dd) - if not isinstance(field, DOFArray): return map_array_container( partial(filter_modally, dcoll, dd, cutoff, mode_resp_func), field ) + dd_nodal = as_dofdesc(dd) + dd_modal = dd_nodal.with_discr_tag(DISCR_TAG_MODAL) + + discr = dcoll.discr_from_dd(dd_nodal) + actx = field.array_context - dd = dof_desc.as_dofdesc(dd) - dd_modal = dof_desc.DD_VOLUME_MODAL - discr = dcoll.discr_from_dd(dd) - modal_map = dcoll.connection_from_dds(dd, dd_modal) - nodal_map = dcoll.connection_from_dds(dd_modal, dd) + modal_map = dcoll.connection_from_dds(dd_nodal, dd_modal) + nodal_map = dcoll.connection_from_dds(dd_modal, dd_nodal) field = modal_map(field) field = apply_spectral_filter(actx, field, discr, cutoff, mode_resp_func) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 9fa183ebb..10c3761c5 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -59,7 +59,7 @@ TransportModel, GasTransportVars ) -from grudge.dof_desc import DOFDesc, as_dofdesc +from grudge.dof_desc import DD_VOLUME_ALL, DISCR_TAG_BASE import grudge.op as op from grudge.trace_pair import ( interior_trace_pairs, @@ -384,8 +384,9 @@ class _FluidTemperatureTag: pass -def make_operator_fluid_states(discr, volume_state, gas_model, boundaries, - quadrature_tag=None): +def make_operator_fluid_states( + discr, volume_state, gas_model, boundaries, quadrature_tag=DISCR_TAG_BASE, + volume_dd=DD_VOLUME_ALL): """Prepare gas model-consistent fluid states for use in fluid operators. This routine prepares a model-consistent fluid state for each of the volume and @@ -414,12 +415,15 @@ def make_operator_fluid_states(discr, volume_state, gas_model, boundaries, The physical model constructs for the gas_model boundaries - Dictionary of boundary functions, one for each valid btag + Dictionary of boundary functions, one for each valid + :class:`~grudge.dof_desc.BoundaryDomainTag`. quadrature_tag - An optional identifier denoting a particular quadrature - discretization to use during operator evaluations. - The default value is *None*. + An identifier denoting a particular quadrature discretization to use during + operator evaluations. + + volume_dd: grudge.dof_desc.DOFDesc + the DOF descriptor of the volume on which to construct the states Returns ------- @@ -428,19 +432,20 @@ def make_operator_fluid_states(discr, volume_state, gas_model, boundaries, Thermally consistent fluid state for the volume, fluid state trace pairs for the internal boundaries, and a dictionary of fluid states keyed by - valid btag in boundaries, all on the quadrature grid (if specified). + boundary domain tags in *boundaries*, all on the quadrature grid (if + specified). """ - dd_base_vol = DOFDesc("vol") - dd_quad_vol = DOFDesc("vol", quadrature_tag) + dd_base_vol = volume_dd + dd_quad_vol = dd_base_vol.with_discr_tag(quadrature_tag) # project pair to the quadrature discretization and update dd to quad interp_to_surf_quad = partial(tracepair_with_discr_tag, discr, quadrature_tag) domain_boundary_states_quad = { - btag: project_fluid_state(discr, dd_base_vol, - as_dofdesc(btag).with_discr_tag(quadrature_tag), + bdtag: project_fluid_state(discr, dd_base_vol, + dd_quad_vol.with_domain_tag(bdtag), volume_state, gas_model) - for btag in boundaries + for bdtag in boundaries } # performs MPI communication of CV if needed @@ -448,7 +453,8 @@ def make_operator_fluid_states(discr, volume_state, gas_model, boundaries, # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs(discr, volume_state.cv, tag=_FluidCVTag) + for tpair in interior_trace_pairs( + discr, volume_state.cv, volume_dd=dd_base_vol, tag=_FluidCVTag) ] tseed_interior_pairs = None @@ -461,8 +467,9 @@ def make_operator_fluid_states(discr, volume_state, gas_model, boundaries, # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs(discr, volume_state.temperature, - tag=_FluidTemperatureTag)] + for tpair in interior_trace_pairs( + discr, volume_state.temperature, volume_dd=dd_base_vol, + tag=_FluidTemperatureTag)] interior_boundary_states_quad = \ make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 47c399454..b04d315fa 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -40,6 +40,8 @@ """ import numpy as np +from meshmode.discretization.connection import FACE_RESTR_ALL +from grudge.dof_desc import DD_VOLUME_ALL, DISCR_TAG_BASE import grudge.op as op from mirgecom.fluid import make_conserved @@ -224,8 +226,9 @@ def inviscid_facial_flux_hll(state_pair, gas_model, normal): def inviscid_flux_on_element_boundary( discr, gas_model, boundaries, interior_state_pairs, - domain_boundary_states, quadrature_tag=None, - numerical_flux_func=inviscid_facial_flux_rusanov, time=0.0): + domain_boundary_states, quadrature_tag=DISCR_TAG_BASE, + numerical_flux_func=inviscid_facial_flux_rusanov, time=0.0, + volume_dd=DD_VOLUME_ALL): """Compute the inviscid boundary fluxes for the divergence operator. This routine encapsulates the computation of the inviscid contributions @@ -242,38 +245,42 @@ def inviscid_flux_on_element_boundary( The physical model constructs for the gas_model boundaries - Dictionary of boundary functions, one for each valid btag + Dictionary of boundary functions, one for each valid + :class:`~grudge.dof_desc.BoundaryDomainTag` interior_state_pairs A :class:`~mirgecom.gas_model.FluidState` TracePair for each internal face. domain_boundary_states A dictionary of boundary-restricted :class:`~mirgecom.gas_model.FluidState`, - keyed by btags in *boundaries*. + keyed by boundary domain tags in *boundaries*. quadrature_tag - An optional identifier denoting a particular quadrature - discretization to use during operator evaluations. - The default value is *None*. + An identifier denoting a particular quadrature discretization to use during + operator evaluations. numerical_flux_func The numerical flux function to use in computing the boundary flux. time: float Time + + volume_dd: grudge.dof_desc.DOFDesc + The DOF descriptor of the volume on which to compute the flux. """ - from grudge.dof_desc import as_dofdesc + dd_vol_quad = volume_dd.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) def _interior_flux(state_pair): return op.project(discr, - state_pair.dd, state_pair.dd.with_dtag("all_faces"), + state_pair.dd, dd_allfaces_quad, numerical_flux_func( state_pair, gas_model, state_pair.int.array_context.thaw(discr.normal(state_pair.dd)))) def _boundary_flux(dd_bdry, boundary, state_minus): return op.project(discr, - dd_bdry, dd_bdry.with_dtag("all_faces"), + dd_bdry, dd_allfaces_quad, boundary.inviscid_divergence_flux( discr, dd_bdry, gas_model, state_minus=state_minus, numerical_flux_func=numerical_flux_func, time=time)) @@ -287,10 +294,10 @@ def _boundary_flux(dd_bdry, boundary, state_minus): # Domain boundary faces + sum( _boundary_flux( - as_dofdesc(btag).with_discr_tag(quadrature_tag), + dd_vol_quad.with_domain_tag(bdtag), boundary, - domain_boundary_states[btag]) - for btag, boundary in boundaries.items()) + domain_boundary_states[bdtag]) + for bdtag, boundary in boundaries.items()) ) return inviscid_flux_bnd diff --git a/mirgecom/io.py b/mirgecom/io.py index e39564d30..0cb1e2cdf 100644 --- a/mirgecom/io.py +++ b/mirgecom/io.py @@ -33,6 +33,8 @@ import grudge.op as op from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.dof_desc import DD_VOLUME_ALL + def make_init_message(*, dim, order, dt, t_final, nstatus, nviz, cfl, constant_cfl, @@ -53,11 +55,12 @@ def make_init_message(*, dim, order, dt, t_final, ) -def make_status_message(*, discr, t, step, dt, cfl, dependent_vars): +def make_status_message( + *, discr, t, step, dt, cfl, dependent_vars, fluid_volume_dd=DD_VOLUME_ALL): r"""Make simulation status and health message.""" dv = dependent_vars - _min = partial(op.nodal_min, discr, "vol") - _max = partial(op.nodal_max, discr, "vol") + _min = partial(op.nodal_min, discr, fluid_volume_dd) + _max = partial(op.nodal_max, discr, fluid_volume_dd) statusmsg = ( f"Status: {step=} {t=}\n" f"------- P({_min(dv.pressure):.3g}, {_max(dv.pressure):.3g})\n" diff --git a/mirgecom/limiter.py b/mirgecom/limiter.py index 3625928e2..f3822f7c2 100644 --- a/mirgecom/limiter.py +++ b/mirgecom/limiter.py @@ -32,11 +32,13 @@ from pytools import memoize_in from grudge.discretization import DiscretizationCollection +from grudge.dof_desc import DD_VOLUME_ALL import grudge.op as op def bound_preserving_limiter(dcoll: DiscretizationCollection, field, - mmin=0.0, mmax=None, modify_average=False): + mmin=0.0, mmax=None, modify_average=False, + dd=DD_VOLUME_ALL): r"""Implement a slope limiter for bound-preserving properties. The implementation is summarized in [Zhang_2011]_, Sec. 2.3, Eq. 2.9, @@ -76,6 +78,8 @@ def bound_preserving_limiter(dcoll: DiscretizationCollection, field, Optional float with the target upper bound. Default to None. modify_average: bool Flag to avoid modification the cell average. Defaults to False. + dd: grudge.dof_desc.DOFDesc + The DOF descriptor corresponding to *field*. Returns ------- @@ -84,21 +88,21 @@ def bound_preserving_limiter(dcoll: DiscretizationCollection, field, """ actx = field.array_context - @memoize_in(dcoll, (bound_preserving_limiter, "cell_volume")) + @memoize_in(dcoll, (bound_preserving_limiter, "cell_volume", dd)) def cell_volumes(dcoll): - return op.elementwise_integral(dcoll, dcoll.zeros(actx) + 1.0) + return op.elementwise_integral(dcoll, dd, dcoll.zeros(actx) + 1.0) cell_size = cell_volumes(dcoll) # Compute cell averages of the state - cell_avgs = 1.0/cell_size*op.elementwise_integral(dcoll, field) + cell_avgs = 1.0/cell_size*op.elementwise_integral(dcoll, dd, field) # Bound cell average in case it doesn't respect the realizability if modify_average: cell_avgs = actx.np.where(actx.np.greater(cell_avgs, mmin), cell_avgs, mmin) # Compute elementwise max/mins of the field - mmin_i = op.elementwise_min(dcoll, field) + mmin_i = op.elementwise_min(dcoll, dd, field) # Linear scaling of polynomial coefficients _theta = actx.np.minimum( @@ -110,7 +114,7 @@ def cell_volumes(dcoll): if mmax is not None: cell_avgs = actx.np.where(actx.np.greater(cell_avgs, mmax), mmax, cell_avgs) - mmax_i = op.elementwise_max(dcoll, field) + mmax_i = op.elementwise_max(dcoll, dd, field) _theta = actx.np.minimum( _theta, actx.np.where(actx.np.greater(mmax_i, mmax), diff --git a/mirgecom/logging_quantities.py b/mirgecom/logging_quantities.py index 402f1572e..adf7a48b1 100644 --- a/mirgecom/logging_quantities.py +++ b/mirgecom/logging_quantities.py @@ -50,6 +50,7 @@ from typing import Optional, Callable import numpy as np +from grudge.dof_desc import DD_VOLUME_ALL import grudge.op as oper @@ -102,24 +103,23 @@ def logmgr_add_device_memory_usage(logmgr: LogManager, queue: cl.CommandQueue): def logmgr_add_many_discretization_quantities(logmgr: LogManager, discr, dim, - extract_vars_for_logging, units_for_logging): + extract_vars_for_logging, units_for_logging, volume_dd=DD_VOLUME_ALL): """Add default discretization quantities to the logmgr.""" for reduction_op in ["min", "max", "L2_norm"]: for quantity in ["pressure", "temperature"]: logmgr.add_quantity(DiscretizationBasedQuantity( discr, quantity, reduction_op, extract_vars_for_logging, - units_for_logging)) + units_for_logging, volume_dd=volume_dd)) for quantity in ["mass", "energy"]: logmgr.add_quantity(DiscretizationBasedQuantity( discr, quantity, reduction_op, extract_vars_for_logging, - units_for_logging)) + units_for_logging, volume_dd=volume_dd)) for d in range(dim): logmgr.add_quantity(DiscretizationBasedQuantity( discr, "momentum", reduction_op, extract_vars_for_logging, - units_for_logging, - axis=d)) + units_for_logging, axis=d, volume_dd=volume_dd)) # {{{ Package versions @@ -269,7 +269,7 @@ class DiscretizationBasedQuantity(PostLogQuantity, StateConsumer): def __init__(self, discr: Discretization, quantity: str, op: str, extract_vars_for_logging, units_logging, name: str = None, - axis: Optional[int] = None): + axis: Optional[int] = None, volume_dd=DD_VOLUME_ALL): unit = units_logging(quantity) if name is None: @@ -286,13 +286,13 @@ def __init__(self, discr: Discretization, quantity: str, op: str, from functools import partial if op == "min": - self._discr_reduction = partial(oper.nodal_min, self.discr, "vol") + self._discr_reduction = partial(oper.nodal_min, self.discr, volume_dd) self.rank_aggr = min elif op == "max": - self._discr_reduction = partial(oper.nodal_max, self.discr, "vol") + self._discr_reduction = partial(oper.nodal_max, self.discr, volume_dd) self.rank_aggr = max elif op == "L2_norm": - self._discr_reduction = partial(oper.norm, self.discr, p=2) + self._discr_reduction = partial(oper.norm, self.discr, p=2, dd=volume_dd) self.rank_aggr = max else: raise ValueError(f"unknown operation {op}") diff --git a/mirgecom/multiphysics/__init__.py b/mirgecom/multiphysics/__init__.py new file mode 100644 index 000000000..bd412d3bd --- /dev/null +++ b/mirgecom/multiphysics/__init__.py @@ -0,0 +1,29 @@ +"""Multiphysics module for MIRGE-Com.""" + +__copyright__ = """ +Copyright (C) 2022 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +__doc__ = """ +.. automodule:: mirgecom.multiphysics.thermally_coupled_fluid_wall +""" diff --git a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py new file mode 100644 index 000000000..23996ddf3 --- /dev/null +++ b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py @@ -0,0 +1,663 @@ +r"""Operator for thermally-coupled fluid and wall. + +Couples a fluid subdomain governed by the compressible Navier-Stokes equations +(:module:`mirgecom.navierstokes) with a wall subdomain governed by the heat +equation (:module:`mirgecom.diffusion`) by enforcing continuity of temperature +and heat flux across their interface. + +.. autofunction:: get_interface_boundaries +.. autofunction:: coupled_grad_t_operator +.. autofunction:: coupled_ns_heat_operator + +.. autoclass:: InterfaceFluidBoundary +.. autoclass:: InterfaceWallBoundary +""" + +__copyright__ = """ +Copyright (C) 2022 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +from dataclasses import replace +import numpy as np + +from grudge.trace_pair import ( + TracePair, + inter_volume_trace_pairs +) +from grudge.dof_desc import ( + DISCR_TAG_BASE, + as_dofdesc, +) +import grudge.op as op + +from mirgecom.boundary import PrescribedFluidBoundary +from mirgecom.fluid import make_conserved +from mirgecom.flux import num_flux_central +from mirgecom.inviscid import inviscid_facial_flux_rusanov +from mirgecom.viscous import viscous_facial_flux_central +from mirgecom.gas_model import ( + make_fluid_state, + make_operator_fluid_states, +) +from mirgecom.navierstokes import ( + grad_t_operator as fluid_grad_t_operator, + ns_operator, +) +from mirgecom.artificial_viscosity import av_laplacian_operator +from mirgecom.diffusion import ( + DiffusionBoundary, + grad_operator as wall_grad_t_operator, + diffusion_operator, +) + + +class _TemperatureInterVolTag: + pass + + +class _KappaInterVolTag: + pass + + +class _GradTemperatureInterVolTag: + pass + + +class InterfaceFluidBoundary(PrescribedFluidBoundary): + """Interface boundary condition for the fluid side.""" + + # FIXME: Incomplete docs + def __init__( + self, ext_t, ext_kappa, ext_grad_t=None, heat_flux_penalty_amount=None, + lengthscales=None): + """Initialize InterfaceFluidBoundary.""" + PrescribedFluidBoundary.__init__( + self, + boundary_state_func=self.get_external_state, + boundary_grad_av_func=self.get_external_grad_av, + boundary_temperature_func=self.get_external_t, + boundary_gradient_temperature_func=self.get_external_grad_t, + inviscid_flux_func=self.inviscid_wall_flux, + viscous_flux_func=self.viscous_wall_flux, + boundary_gradient_cv_func=self.get_external_grad_cv + ) + self.ext_t = ext_t + self.ext_kappa = ext_kappa + self.ext_grad_t = ext_grad_t + self.heat_flux_penalty_amount = heat_flux_penalty_amount + self.lengthscales = lengthscales + + # NOTE: The BC for species mass is y_+ = y_-, I think that is OK here + # The BC for species mass fraction gradient is set down inside the + # `viscous_flux` method. + def get_external_state(self, discr, dd_bdry, gas_model, state_minus, **kwargs): + """Get the exterior solution on the boundary.""" + if dd_bdry.discretization_tag is not DISCR_TAG_BASE: + dd_bdry_base = dd_bdry.with_discr_tag(DISCR_TAG_BASE) + ext_t = op.project(discr, dd_bdry_base, dd_bdry, self.ext_t) + ext_kappa = op.project(discr, dd_bdry_base, dd_bdry, self.ext_kappa) + else: + ext_t = self.ext_t + ext_kappa = self.ext_kappa + + # Cancel out the momentum + cv_minus = state_minus.cv + ext_mom = -cv_minus.momentum + + # Compute the energy + ext_internal_energy = ( + cv_minus.mass + * gas_model.eos.get_internal_energy( + temperature=ext_t, + species_mass_fractions=cv_minus.species_mass_fractions)) + ext_kinetic_energy = gas_model.eos.kinetic_energy(cv_minus) + ext_energy = ext_internal_energy + ext_kinetic_energy + + # Form the external boundary solution with the new momentum and energy. + ext_cv = make_conserved( + dim=state_minus.dim, mass=cv_minus.mass, energy=ext_energy, + momentum=ext_mom, species_mass=cv_minus.species_mass) + + def replace_thermal_conductivity(state, kappa): + new_tv = replace(state.tv, thermal_conductivity=kappa) + return replace(state, tv=new_tv) + + return replace_thermal_conductivity( + make_fluid_state( + cv=ext_cv, gas_model=gas_model, + temperature_seed=state_minus.temperature), + ext_kappa) + + def inviscid_wall_flux(self, discr, dd_bdry, gas_model, state_minus, + numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): + """Return Riemann flux using state with mom opposite of interior state.""" + dd_bdry = as_dofdesc(dd_bdry) + # NOTE: For the inviscid/advection part we set mom_+ = -mom_-, and + # use energy_+ = energy_-, per [Mengaldo_2014]_. + wall_cv = make_conserved(dim=state_minus.dim, + mass=state_minus.mass_density, + momentum=-state_minus.momentum_density, + energy=state_minus.energy_density, + species_mass=state_minus.species_mass_density) + wall_state = make_fluid_state(cv=wall_cv, gas_model=gas_model, + temperature_seed=state_minus.temperature) + state_pair = TracePair(dd_bdry, interior=state_minus, exterior=wall_state) + + # Grab a unit normal to the boundary + nhat = state_minus.array_context.thaw(discr.normal(dd_bdry)) + + return numerical_flux_func(state_pair, gas_model, nhat) + + def get_external_grad_av(self, discr, dd_bdry, grad_av_minus, **kwargs): + """Get the exterior grad(Q) on the boundary.""" + # Grab some boundary-relevant data + actx = grad_av_minus.array_context + + # Grab a unit normal to the boundary + nhat = actx.thaw(discr.normal(dd_bdry)) + + # Apply a Neumann condition on the energy gradient + # Should probably compute external energy gradient using external temperature + # gradient, but that is a can of worms + ext_grad_energy = \ + grad_av_minus.energy - 2 * np.dot(grad_av_minus.energy, nhat) * nhat + + # uh oh - we don't have the necessary data to compute grad_y from grad_av + # from mirgecom.fluid import species_mass_fraction_gradient + # grad_y_minus = species_mass_fraction_gradient(state_minus.cv, + # grad_cv_minus) + # grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) + # grad_species_mass_plus = 0.*grad_y_plus + # This re-stuffs grad_y+ back into grad_cv+, skipit; we did not split AVs + # for i in range(state_minus.nspecies): + # grad_species_mass_plus[i] = (state_minus.mass_density*grad_y_plus[i] + # + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + ext_grad_species_mass = ( + grad_av_minus.species_mass + - np.outer(grad_av_minus.species_mass @ nhat, nhat)) + + return make_conserved( + grad_av_minus.dim, mass=grad_av_minus.mass, energy=ext_grad_energy, + momentum=grad_av_minus.momentum, species_mass=ext_grad_species_mass) + + def get_external_grad_cv(self, state_minus, grad_cv_minus, normal, **kwargs): + """Return grad(CV) to be used in the boundary calculation of viscous flux.""" + from mirgecom.fluid import species_mass_fraction_gradient + grad_y_minus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) + grad_y_bc = grad_y_minus - np.outer(grad_y_minus@normal, normal) + grad_species_mass_plus = 0.*grad_y_bc + + for i in range(state_minus.nspecies): + grad_species_mass_plus[i] = (state_minus.mass_density*grad_y_bc[i] + + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + + return make_conserved(grad_cv_minus.dim, + mass=grad_cv_minus.mass, + energy=grad_cv_minus.energy, + momentum=grad_cv_minus.momentum, + species_mass=grad_species_mass_plus) + + def viscous_wall_flux( + self, discr, dd_bdry, gas_model, state_minus, grad_cv_minus, + grad_t_minus, numerical_flux_func=viscous_facial_flux_central, **kwargs): + """Return the boundary flux for the divergence of the viscous flux.""" + if self.heat_flux_penalty_amount is None: + raise ValueError("Boundary does not have heat flux penalty amount.") + if self.lengthscales is None: + raise ValueError("Boundary does not have length scales data.") + + dd_bdry = as_dofdesc(dd_bdry) + dd_bdry_base = dd_bdry.with_discr_tag(DISCR_TAG_BASE) + from mirgecom.viscous import viscous_flux + actx = state_minus.array_context + normal = actx.thaw(discr.normal(dd_bdry)) + + # FIXME: Need to examine [Mengaldo_2014]_ - specifically momentum terms + state_plus = self.get_external_state( + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, + state_minus=state_minus, **kwargs) + grad_cv_bc = self.get_external_grad_cv( + state_minus=state_minus, grad_cv_minus=grad_cv_minus, normal=normal, + **kwargs) + + grad_t_plus = self.get_external_grad_t( + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, + state_minus=state_minus, grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus) + + def harmonic_mean(x, y): + x_plus_y = actx.np.where(actx.np.greater(x + y, 0*x), x + y, 0*x+1) + return 2*x*y/x_plus_y + + def replace_kappa(state, kappa): + from dataclasses import replace + new_tv = replace(state.tv, thermal_conductivity=kappa) + return replace(state, tv=new_tv) + + kappa_harmonic_mean = harmonic_mean( + state_minus.tv.thermal_conductivity, + state_plus.tv.thermal_conductivity) + + state_pair_with_harmonic_mean_coefs = TracePair( + dd_bdry, + interior=replace_kappa(state_minus, kappa_harmonic_mean), + exterior=replace_kappa(state_plus, kappa_harmonic_mean)) + + f_int = viscous_flux( + state_pair_with_harmonic_mean_coefs.int, grad_cv_bc, grad_t_minus) + f_ext = viscous_flux( + state_pair_with_harmonic_mean_coefs.ext, grad_cv_bc, grad_t_plus) + f_pair = TracePair(dd_bdry, interior=f_int, exterior=f_ext) + + lengthscales = op.project(discr, dd_bdry_base, dd_bdry, self.lengthscales) + + tau = ( + self.heat_flux_penalty_amount * kappa_harmonic_mean / lengthscales) + + # NS and diffusion use opposite sign conventions for flux; hence penalty + # is added here instead of subtracted + flux_without_penalty = f_pair.avg @ normal + return replace( + flux_without_penalty, + energy=( + flux_without_penalty.energy + + tau * (state_plus.temperature - state_minus.temperature))) + + def get_external_t(self, discr, dd_bdry, gas_model, state_minus, **kwargs): + """Get the exterior T on the boundary.""" + if dd_bdry.discretization_tag is not DISCR_TAG_BASE: + dd_bdry_base = dd_bdry.with_discr_tag(DISCR_TAG_BASE) + return op.project(discr, dd_bdry_base, dd_bdry, self.ext_t) + else: + return self.ext_t + + def get_external_grad_t( + self, discr, dd_bdry, gas_model, state_minus, grad_cv_minus, + grad_t_minus, **kwargs): + """Get the exterior grad(T) on the boundary.""" + if self.ext_grad_t is None: + raise ValueError( + "Boundary does not have external temperature gradient data.") + if dd_bdry.discretization_tag is not DISCR_TAG_BASE: + dd_bdry_base = dd_bdry.with_discr_tag(DISCR_TAG_BASE) + return op.project(discr, dd_bdry_base, dd_bdry, self.ext_grad_t) + else: + return self.ext_grad_t + + +class InterfaceWallBoundary(DiffusionBoundary): + """Interface boundary condition for the wall side.""" + + # FIXME: Incomplete docs + def __init__(self, ext_u, ext_kappa, ext_grad_u=None, lengthscales=None): + """Initialize InterfaceWallBoundary.""" + self.ext_u = ext_u + self.ext_kappa = ext_kappa + self.ext_grad_u = ext_grad_u + self.lengthscales = lengthscales + + def get_grad_flux( + self, discr, dd_vol, dd_bdry, u, *, + quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + """Get the numerical flux for grad(u) on the boundary.""" + int_u = op.project(discr, dd_vol, dd_bdry, u) + u_tpair = TracePair(dd_bdry, interior=int_u, exterior=self.ext_u) + from mirgecom.diffusion import grad_flux + return grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) + + def get_diffusion_flux( + self, discr, dd_vol, dd_bdry, u, kappa, grad_u, *, + penalty_amount=None, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + """Get the numerical flux for the diff(u) on the boundary.""" + if self.ext_grad_u is None: + raise ValueError( + "Boundary does not have external temperature gradient data.") + if self.lengthscales is None: + raise ValueError("Boundary does not have length scales data.") + int_u = op.project(discr, dd_vol, dd_bdry, u) + u_tpair = TracePair(dd_bdry, interior=int_u, exterior=self.ext_u) + int_kappa = op.project(discr, dd_vol, dd_bdry, kappa) + kappa_tpair = TracePair(dd_bdry, interior=int_kappa, exterior=self.ext_kappa) + int_grad_u = op.project(discr, dd_vol, dd_bdry, grad_u) + grad_u_tpair = TracePair( + dd_bdry, interior=int_grad_u, exterior=self.ext_grad_u) + lengthscales_tpair = TracePair( + dd_bdry, interior=self.lengthscales, exterior=self.lengthscales) + from mirgecom.diffusion import diffusion_flux + return diffusion_flux( + discr, u_tpair, kappa_tpair, grad_u_tpair, lengthscales_tpair, + penalty_amount=penalty_amount, quadrature_tag=quadrature_tag) + + +def _temperature_inter_volume_trace_pairs( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature): + pairwise_temperature = { + (fluid_volume_dd, wall_volume_dd): + (fluid_state.temperature, wall_temperature)} + return inter_volume_trace_pairs( + discr, pairwise_temperature, comm_tag=_TemperatureInterVolTag) + + +def _kappa_inter_volume_trace_pairs( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature): + pairwise_kappa = { + (fluid_volume_dd, wall_volume_dd): + (fluid_state.thermal_conductivity, wall_model.thermal_conductivity)} + return inter_volume_trace_pairs( + discr, pairwise_kappa, comm_tag=_KappaInterVolTag) + + +def _grad_temperature_inter_volume_trace_pairs( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_grad_temperature, wall_grad_temperature): + pairwise_grad_temperature = { + (fluid_volume_dd, wall_volume_dd): + (fluid_grad_temperature, wall_grad_temperature)} + return inter_volume_trace_pairs( + discr, pairwise_grad_temperature, comm_tag=_GradTemperatureInterVolTag) + + +def get_interface_boundaries( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature, + fluid_grad_temperature=None, wall_grad_temperature=None, + wall_penalty_amount=None, + *, + # Added to avoid repeated computation + # FIXME: See if there's a better way to do this + _temperature_inter_vol_tpairs=None, + _kappa_inter_vol_tpairs=None, + _grad_temperature_inter_vol_tpairs=None): + # FIXME: Incomplete docs + """Get the fluid-wall interface boundaries.""" + include_gradient = ( + fluid_grad_temperature is not None and wall_grad_temperature is not None) + + if _temperature_inter_vol_tpairs is None: + temperature_inter_vol_tpairs = _temperature_inter_volume_trace_pairs( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature) + else: + temperature_inter_vol_tpairs = _temperature_inter_vol_tpairs + + if _kappa_inter_vol_tpairs is None: + kappa_inter_vol_tpairs = _kappa_inter_volume_trace_pairs( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature) + else: + kappa_inter_vol_tpairs = _kappa_inter_vol_tpairs + + if include_gradient: + if _grad_temperature_inter_vol_tpairs is None: + grad_temperature_inter_vol_tpairs = \ + _grad_temperature_inter_volume_trace_pairs( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_grad_temperature, wall_grad_temperature) + else: + grad_temperature_inter_vol_tpairs = _grad_temperature_inter_vol_tpairs + else: + grad_temperature_inter_vol_tpairs = None + + if include_gradient: + from grudge.dt_utils import characteristic_lengthscales + fluid_lengthscales = ( + characteristic_lengthscales( + fluid_state.array_context, discr, fluid_volume_dd) + * (0*fluid_state.temperature+1)) + wall_lengthscales = ( + characteristic_lengthscales( + wall_temperature.array_context, discr, wall_volume_dd) + * (0*wall_temperature+1)) + + fluid_interface_boundaries = { + temperature_tpair.dd.domain_tag: InterfaceFluidBoundary( + temperature_tpair.ext, + kappa_tpair.ext, + grad_temperature_tpair.ext, + wall_penalty_amount, + lengthscales=op.project(discr, + fluid_volume_dd, temperature_tpair.dd, fluid_lengthscales)) + for temperature_tpair, kappa_tpair, grad_temperature_tpair in zip( + temperature_inter_vol_tpairs[wall_volume_dd, fluid_volume_dd], + kappa_inter_vol_tpairs[wall_volume_dd, fluid_volume_dd], + grad_temperature_inter_vol_tpairs[wall_volume_dd, fluid_volume_dd])} + + wall_interface_boundaries = { + temperature_tpair.dd.domain_tag: InterfaceWallBoundary( + temperature_tpair.ext, + kappa_tpair.ext, + grad_temperature_tpair.ext, + op.project(discr, + wall_volume_dd, temperature_tpair.dd, wall_lengthscales)) + for temperature_tpair, kappa_tpair, grad_temperature_tpair in zip( + temperature_inter_vol_tpairs[fluid_volume_dd, wall_volume_dd], + kappa_inter_vol_tpairs[fluid_volume_dd, wall_volume_dd], + grad_temperature_inter_vol_tpairs[fluid_volume_dd, wall_volume_dd])} + else: + fluid_interface_boundaries = { + temperature_tpair.dd.domain_tag: InterfaceFluidBoundary( + temperature_tpair.ext, + kappa_tpair.ext) + for temperature_tpair, kappa_tpair in zip( + temperature_inter_vol_tpairs[wall_volume_dd, fluid_volume_dd], + kappa_inter_vol_tpairs[wall_volume_dd, fluid_volume_dd])} + + wall_interface_boundaries = { + temperature_tpair.dd.domain_tag: InterfaceWallBoundary( + temperature_tpair.ext, + kappa_tpair.ext) + for temperature_tpair, kappa_tpair in zip( + temperature_inter_vol_tpairs[fluid_volume_dd, wall_volume_dd], + kappa_inter_vol_tpairs[fluid_volume_dd, wall_volume_dd])} + + return fluid_interface_boundaries, wall_interface_boundaries + + +def coupled_grad_t_operator( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_boundaries, wall_boundaries, + fluid_state, wall_temperature, *, + time=0., + fluid_numerical_flux_func=num_flux_central, + quadrature_tag=DISCR_TAG_BASE, + # Added to avoid repeated computation + # FIXME: See if there's a better way to do this + _temperature_inter_vol_tpairs=None, + _kappa_inter_vol_tpairs=None, + _fluid_operator_states_quad=None): + # FIXME: Incomplete docs + """Compute grad(T) of the coupled fluid-wall system.""" + fluid_boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in fluid_boundaries.items()} + wall_boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in wall_boundaries.items()} + + fluid_interface_boundaries_no_grad, wall_interface_boundaries_no_grad = \ + get_interface_boundaries( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature, + _temperature_inter_vol_tpairs=_temperature_inter_vol_tpairs, + _kappa_inter_vol_tpairs=_kappa_inter_vol_tpairs) + + fluid_all_boundaries_no_grad = {} + fluid_all_boundaries_no_grad.update(fluid_boundaries) + fluid_all_boundaries_no_grad.update(fluid_interface_boundaries_no_grad) + + wall_all_boundaries_no_grad = {} + wall_all_boundaries_no_grad.update(wall_boundaries) + wall_all_boundaries_no_grad.update(wall_interface_boundaries_no_grad) + + return ( + fluid_grad_t_operator( + discr, gas_model, fluid_all_boundaries_no_grad, fluid_state, + time=time, numerical_flux_func=fluid_numerical_flux_func, + quadrature_tag=quadrature_tag, volume_dd=fluid_volume_dd, + operator_states_quad=_fluid_operator_states_quad), + wall_grad_t_operator( + discr, wall_all_boundaries_no_grad, wall_temperature, + quadrature_tag=quadrature_tag, volume_dd=wall_volume_dd)) + + +def _heat_operator( + discr, wall_model, boundaries, temperature, *, + penalty_amount, quadrature_tag, volume_dd, + # Added to avoid repeated computation + # FIXME: See if there's a better way to do this + _grad_temperature=None): + return ( + 1/(wall_model.density * wall_model.heat_capacity) + * diffusion_operator( + discr, wall_model.thermal_conductivity, boundaries, temperature, + penalty_amount=penalty_amount, quadrature_tag=quadrature_tag, + volume_dd=volume_dd, grad_u=_grad_temperature)) + + +def coupled_ns_heat_operator( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_boundaries, wall_boundaries, + fluid_state, wall_temperature, *, + time=0., wall_time_scale=1, + fluid_gradient_numerical_flux_func=num_flux_central, + inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, + viscous_numerical_flux_func=viscous_facial_flux_central, + use_av=False, + av_kwargs=None, + wall_penalty_amount=None, + quadrature_tag=DISCR_TAG_BASE): + # FIXME: Incomplete docs + """Compute RHS of the coupled fluid-wall system.""" + if wall_penalty_amount is None: + # *shrug* + wall_penalty_amount = 0.05 + + fluid_boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in fluid_boundaries.items()} + wall_boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in wall_boundaries.items()} + + temperature_inter_vol_tpairs = _temperature_inter_volume_trace_pairs( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature) + + kappa_inter_vol_tpairs = _kappa_inter_volume_trace_pairs( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature) + + fluid_interface_boundaries_no_grad, wall_interface_boundaries_no_grad = \ + get_interface_boundaries( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature, + _temperature_inter_vol_tpairs=temperature_inter_vol_tpairs, + _kappa_inter_vol_tpairs=kappa_inter_vol_tpairs) + + fluid_all_boundaries_no_grad = {} + fluid_all_boundaries_no_grad.update(fluid_boundaries) + fluid_all_boundaries_no_grad.update(fluid_interface_boundaries_no_grad) + + fluid_operator_states_quad = make_operator_fluid_states( + discr, fluid_state, gas_model, fluid_all_boundaries_no_grad, + quadrature_tag, volume_dd=fluid_volume_dd) + + fluid_grad_temperature, wall_grad_temperature = coupled_grad_t_operator( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_boundaries, wall_boundaries, + fluid_state, wall_temperature, + time=time, + fluid_numerical_flux_func=fluid_gradient_numerical_flux_func, + quadrature_tag=quadrature_tag, + _temperature_inter_vol_tpairs=temperature_inter_vol_tpairs, + _kappa_inter_vol_tpairs=kappa_inter_vol_tpairs, + _fluid_operator_states_quad=fluid_operator_states_quad) + + fluid_interface_boundaries, wall_interface_boundaries = \ + get_interface_boundaries( + discr, + gas_model, wall_model, + fluid_volume_dd, wall_volume_dd, + fluid_state, wall_temperature, + fluid_grad_temperature, wall_grad_temperature, + wall_penalty_amount=wall_penalty_amount, + _temperature_inter_vol_tpairs=temperature_inter_vol_tpairs, + _kappa_inter_vol_tpairs=kappa_inter_vol_tpairs) + + fluid_all_boundaries = {} + fluid_all_boundaries.update(fluid_boundaries) + fluid_all_boundaries.update(fluid_interface_boundaries) + + wall_all_boundaries = {} + wall_all_boundaries.update(wall_boundaries) + wall_all_boundaries.update(wall_interface_boundaries) + + fluid_rhs = ns_operator( + discr, gas_model, fluid_state, fluid_all_boundaries, + time=time, quadrature_tag=quadrature_tag, volume_dd=fluid_volume_dd, + operator_states_quad=fluid_operator_states_quad, + grad_t=fluid_grad_temperature) + + if use_av: + if av_kwargs is None: + av_kwargs = {} + fluid_rhs = fluid_rhs + av_laplacian_operator( + discr, fluid_all_boundaries, fluid_state, quadrature_tag=quadrature_tag, + volume_dd=fluid_volume_dd, **av_kwargs) + + wall_rhs = wall_time_scale * _heat_operator( + discr, wall_model, wall_all_boundaries, wall_temperature, + penalty_amount=wall_penalty_amount, quadrature_tag=quadrature_tag, + volume_dd=wall_volume_dd, _grad_temperature=wall_grad_temperature) + + return fluid_rhs, wall_rhs diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index d709d3b00..008fc4e0f 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -57,14 +57,21 @@ THE SOFTWARE. """ +from dataclasses import replace from functools import partial +from meshmode.discretization.connection import FACE_RESTR_ALL + from grudge.trace_pair import ( TracePair, interior_trace_pairs, tracepair_with_discr_tag ) -from grudge.dof_desc import DOFDesc, as_dofdesc, DISCR_TAG_BASE +from grudge.dof_desc import ( + DD_VOLUME_ALL, + DISCR_TAG_BASE, + as_dofdesc, +) import grudge.op as op @@ -98,16 +105,18 @@ def _gradient_flux_interior(discr, numerical_flux_func, tpair): """Compute interior face flux for gradient operator.""" from arraycontext import outer actx = tpair.int.array_context - dd = tpair.dd - normal = actx.thaw(discr.normal(dd)) + dd_trace = tpair.dd + dd_allfaces = dd_trace.with_domain_tag( + replace(dd_trace.domain_tag, tag=FACE_RESTR_ALL)) + normal = actx.thaw(discr.normal(dd_trace)) flux = outer(numerical_flux_func(tpair.int, tpair.ext), normal) - return op.project(discr, dd, dd.with_dtag("all_faces"), flux) + return op.project(discr, dd_trace, dd_allfaces, flux) def grad_cv_operator( discr, gas_model, boundaries, state, *, time=0.0, numerical_flux_func=num_flux_central, - quadrature_tag=DISCR_TAG_BASE, + quadrature_tag=DISCR_TAG_BASE, volume_dd=DD_VOLUME_ALL, # Added to avoid repeated computation # FIXME: See if there's a better way to do this operator_states_quad=None): @@ -121,7 +130,8 @@ def grad_cv_operator( quantities. boundaries - Dictionary of boundary functions keyed by btags + Dictionary of boundary functions, one for each valid + :class:`~grudge.dof_desc.BoundaryDomainTag` time Time @@ -140,6 +150,9 @@ def grad_cv_operator( An identifier denoting a particular quadrature discretization to use during operator evaluations. + volume_dd: grudge.dof_desc.DOFDesc + The DOF descriptor of the volume on which to apply the operator. + Returns ------- :class:`~mirgecom.fluid.ConservedVars` @@ -147,12 +160,18 @@ def grad_cv_operator( CV object with vector components representing the gradient of the fluid conserved variables. """ - dd_vol_quad = DOFDesc("vol", quadrature_tag) - dd_faces_quad = DOFDesc("all_faces", quadrature_tag) + boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in boundaries.items()} + + dd_vol_base = volume_dd + dd_vol_quad = dd_vol_base.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) if operator_states_quad is None: operator_states_quad = make_operator_fluid_states( - discr, state, gas_model, boundaries, quadrature_tag) + discr, state, gas_model, boundaries, quadrature_tag, + volume_dd=dd_vol_base) vol_state_quad, inter_elem_bnd_states_quad, domain_bnd_states_quad = \ operator_states_quad @@ -169,18 +188,16 @@ def grad_cv_operator( # Domain boundaries sum(op.project( - discr, as_dofdesc(btag).with_discr_tag(quadrature_tag), - as_dofdesc(btag).with_discr_tag(quadrature_tag).with_dtag("all_faces"), + discr, dd_vol_quad.with_domain_tag(bdtag), + dd_allfaces_quad, bdry.cv_gradient_flux( discr, - # Make sure we get the state on the quadrature grid - # restricted to the tag *btag* - as_dofdesc(btag).with_discr_tag(quadrature_tag), + dd_vol_quad.with_domain_tag(bdtag), gas_model=gas_model, - state_minus=domain_bnd_states_quad[btag], + state_minus=domain_bnd_states_quad[bdtag], time=time, numerical_flux_func=numerical_flux_func)) - for btag, bdry in boundaries.items()) + for bdtag, bdry in boundaries.items()) # Interior boundaries + sum(get_interior_flux(tpair) for tpair in cv_interior_pairs) @@ -188,13 +205,13 @@ def grad_cv_operator( # [Bassi_1997]_ eqn 15 (s = grad_q) return grad_operator( - discr, dd_vol_quad, dd_faces_quad, vol_state_quad.cv, cv_flux_bnd) + discr, dd_vol_quad, dd_allfaces_quad, vol_state_quad.cv, cv_flux_bnd) def grad_t_operator( discr, gas_model, boundaries, state, *, time=0.0, numerical_flux_func=num_flux_central, - quadrature_tag=DISCR_TAG_BASE, + quadrature_tag=DISCR_TAG_BASE, volume_dd=DD_VOLUME_ALL, # Added to avoid repeated computation # FIXME: See if there's a better way to do this operator_states_quad=None): @@ -227,6 +244,9 @@ def grad_t_operator( An identifier denoting a particular quadrature discretization to use during operator evaluations. + volume_dd: grudge.dof_desc.DOFDesc + The DOF descriptor of the volume on which to apply the operator. + Returns ------- :class:`numpy.ndarray` @@ -234,12 +254,18 @@ def grad_t_operator( Array of :class:`~meshmode.dof_array.DOFArray` representing the gradient of the fluid temperature. """ - dd_vol_quad = DOFDesc("vol", quadrature_tag) - dd_faces_quad = DOFDesc("all_faces", quadrature_tag) + boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in boundaries.items()} + + dd_vol_base = volume_dd + dd_vol_quad = dd_vol_base.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) if operator_states_quad is None: operator_states_quad = make_operator_fluid_states( - discr, state, gas_model, boundaries, quadrature_tag) + discr, state, gas_model, boundaries, quadrature_tag, + volume_dd=dd_vol_base) vol_state_quad, inter_elem_bnd_states_quad, domain_bnd_states_quad = \ operator_states_quad @@ -260,18 +286,16 @@ def grad_t_operator( # Domain boundaries sum(op.project( - discr, as_dofdesc(btag).with_discr_tag(quadrature_tag), - as_dofdesc(btag).with_discr_tag(quadrature_tag).with_dtag("all_faces"), + discr, dd_vol_quad.with_domain_tag(bdtag), + dd_allfaces_quad, bdry.temperature_gradient_flux( discr, - # Make sure we get the state on the quadrature grid - # restricted to the tag *btag* - as_dofdesc(btag).with_discr_tag(quadrature_tag), + dd_vol_quad.with_domain_tag(bdtag), gas_model=gas_model, - state_minus=domain_bnd_states_quad[btag], + state_minus=domain_bnd_states_quad[bdtag], time=time, numerical_flux_func=numerical_flux_func)) - for btag, bdry in boundaries.items()) + for bdtag, bdry in boundaries.items()) # Interior boundaries + sum(get_interior_flux(tpair) for tpair in t_interior_pairs) @@ -279,14 +303,15 @@ def grad_t_operator( # Fluxes in-hand, compute the gradient of temperature return grad_operator( - discr, dd_vol_quad, dd_faces_quad, vol_state_quad.temperature, t_flux_bnd) + discr, dd_vol_quad, dd_allfaces_quad, vol_state_quad.temperature, t_flux_bnd) def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, gradient_numerical_flux_func=num_flux_central, viscous_numerical_flux_func=viscous_facial_flux_central, - quadrature_tag=DISCR_TAG_BASE, return_gradients=False, + return_gradients=False, quadrature_tag=DISCR_TAG_BASE, + volume_dd=DD_VOLUME_ALL, # Added to avoid repeated computation # FIXME: See if there's a better way to do this operator_states_quad=None, @@ -325,10 +350,18 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, Optional callable function to return the numerical flux to be used when computing gradients in the Navier-Stokes operator. + return_gradients + Optional boolean (defaults to false) indicating whether to return + $\nabla(\text{CV})$ and $\nabla(T)$ along with the RHS for the Navier-Stokes + equations. Useful for debugging and visualization. + quadrature_tag An identifier denoting a particular quadrature discretization to use during operator evaluations. + volume_dd: grudge.dof_desc.DOFDesc + The DOF descriptor of the volume on which to apply the operator. + operator_states_quad Optional iterable container providing the full fluid states (:class:`~mirgecom.gas_model.FluidState`) on the quadrature @@ -347,11 +380,6 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, provided, the operator will calculate it with :func:`~mirgecom.navierstokes.grad_t_operator`. - return_gradients - Optional boolean (defaults to false) indicating whether to return - $\nabla(\text{CV})$ and $\nabla(T)$ along with the RHS for the Navier-Stokes - equations. Useful for debugging and visualization. - Returns ------- :class:`mirgecom.fluid.ConservedVars` @@ -365,9 +393,13 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, if not state.is_viscous: raise ValueError("Navier-Stokes operator expects viscous gas model.") - dd_base = as_dofdesc("vol") - dd_vol_quad = DOFDesc("vol", quadrature_tag) - dd_faces_quad = DOFDesc("all_faces", quadrature_tag) + boundaries = { + as_dofdesc(bdtag).domain_tag: bdry + for bdtag, bdry in boundaries.items()} + + dd_vol_base = volume_dd + dd_vol_quad = dd_vol_base.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) # Make model-consistent fluid state data (i.e. CV *and* DV) for: # - Volume: vol_state_quad @@ -378,7 +410,8 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, # otherwise they stay on the interpolatory/base domain. if operator_states_quad is None: operator_states_quad = make_operator_fluid_states( - discr, state, gas_model, boundaries, quadrature_tag) + discr, state, gas_model, boundaries, quadrature_tag, + volume_dd=dd_vol_base) vol_state_quad, inter_elem_bnd_states_quad, domain_bnd_states_quad = \ operator_states_quad @@ -396,7 +429,7 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, grad_cv = grad_cv_operator( discr, gas_model, boundaries, state, time=time, numerical_flux_func=gradient_numerical_flux_func, - quadrature_tag=quadrature_tag, + quadrature_tag=quadrature_tag, volume_dd=dd_vol_base, operator_states_quad=operator_states_quad) # Communicate grad(CV) and put it on the quadrature domain @@ -404,7 +437,8 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs(discr, grad_cv, tag=_NSGradCVTag) + for tpair in interior_trace_pairs( + discr, grad_cv, volume_dd=dd_vol_base, tag=_NSGradCVTag) ] # }}} Compute grad(CV) @@ -415,7 +449,7 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, grad_t = grad_t_operator( discr, gas_model, boundaries, state, time=time, numerical_flux_func=gradient_numerical_flux_func, - quadrature_tag=quadrature_tag, + quadrature_tag=quadrature_tag, volume_dd=dd_vol_base, operator_states_quad=operator_states_quad) # Create the interior face trace pairs, perform MPI exchange, interp to quad @@ -423,7 +457,8 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs(discr, grad_t, tag=_NSGradTemperatureTag) + for tpair in interior_trace_pairs( + discr, grad_t, volume_dd=dd_vol_base, tag=_NSGradTemperatureTag) ] # }}} compute grad(temperature) @@ -437,8 +472,8 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, # using field values on the quadrature grid viscous_flux(state=vol_state_quad, # Interpolate gradients to the quadrature grid - grad_cv=op.project(discr, dd_base, dd_vol_quad, grad_cv), - grad_t=op.project(discr, dd_base, dd_vol_quad, grad_t)) + grad_cv=op.project(discr, dd_vol_base, dd_vol_quad, grad_cv), + grad_t=op.project(discr, dd_vol_base, dd_vol_quad, grad_t)) # Compute the volume contribution of the inviscid flux terms # using field values on the quadrature grid @@ -453,16 +488,18 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, discr, gas_model, boundaries, inter_elem_bnd_states_quad, domain_bnd_states_quad, grad_cv, grad_cv_interior_pairs, grad_t, grad_t_interior_pairs, quadrature_tag=quadrature_tag, - numerical_flux_func=viscous_numerical_flux_func, time=time) + numerical_flux_func=viscous_numerical_flux_func, time=time, + volume_dd=dd_vol_base) # All surface contributions from the inviscid fluxes - inviscid_flux_on_element_boundary( discr, gas_model, boundaries, inter_elem_bnd_states_quad, domain_bnd_states_quad, quadrature_tag=quadrature_tag, - numerical_flux_func=inviscid_numerical_flux_func, time=time) + numerical_flux_func=inviscid_numerical_flux_func, time=time, + volume_dd=dd_vol_base) ) - ns_rhs = div_operator(discr, dd_vol_quad, dd_faces_quad, vol_term, bnd_term) + ns_rhs = div_operator(discr, dd_vol_quad, dd_allfaces_quad, vol_term, bnd_term) if return_gradients: return ns_rhs, grad_cv, grad_t return ns_rhs diff --git a/mirgecom/operators.py b/mirgecom/operators.py index 64b188621..c0975dc79 100644 --- a/mirgecom/operators.py +++ b/mirgecom/operators.py @@ -30,6 +30,8 @@ import grudge.op as op +from grudge.dof_desc import DISCR_TAG_BASE + def grad_operator(discr, dd_vol, dd_faces, u, flux): r"""Compute a DG gradient for the input *u* with flux given by *flux*. @@ -57,7 +59,8 @@ def grad_operator(discr, dd_vol, dd_faces, u, flux): the dg gradient operator applied to *u* """ # pylint: disable=invalid-unary-operand-type - return - op.inverse_mass(discr, + return -op.inverse_mass( + discr, dd_vol.with_discr_tag(DISCR_TAG_BASE), op.weak_local_grad(discr, dd_vol, u) - op.face_mass(discr, dd_faces, flux)) @@ -88,6 +91,7 @@ def div_operator(discr, dd_vol, dd_faces, v, flux): the dg divergence operator applied to vector-valued function(s) *v*. """ # pylint: disable=invalid-unary-operand-type - return - op.inverse_mass(discr, + return -op.inverse_mass( + discr, dd_vol.with_discr_tag(DISCR_TAG_BASE), op.weak_local_div(discr, dd_vol, v) - op.face_mass(discr, dd_faces, flux)) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 119e880b5..4bcffaeef 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -21,7 +21,7 @@ Mesh utilities -------------- -.. autofunction:: generate_and_distribute_mesh +.. autofunction:: distribute_mesh Simulation support utilities ---------------------------- @@ -77,7 +77,8 @@ from mirgecom.viscous import get_viscous_timestep from typing import List, Dict -from grudge.discretization import DiscretizationCollection +from grudge.discretization import DiscretizationCollection, PartID +from grudge.dof_desc import DD_VOLUME_ALL logger = logging.getLogger(__name__) @@ -104,8 +105,9 @@ def check_step(step, interval): return False -def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, - constant_cfl=False, local_dt=False): +def get_sim_timestep( + discr, state, t, dt, cfl, t_final=0.0, constant_cfl=False, + local_dt=False, fluid_volume_dd=DD_VOLUME_ALL): r"""Return the maximum stable timestep for a typical fluid simulation. This routine returns a constraint-limited timestep size for a fluid @@ -182,7 +184,7 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, if constant_cfl: my_dt = state.array_context.to_numpy( cfl * op.nodal_min( - discr, "vol", + discr, fluid_volume_dd, get_viscous_timestep(discr=discr, state=state)))[()] return min(t_remaining, my_dt) @@ -383,7 +385,7 @@ def check_naninf_local(discr: DiscretizationCollection, dd: str, return not np.isfinite(s) -def compare_fluid_solutions(discr, red_state, blue_state): +def compare_fluid_solutions(discr, red_state, blue_state, *, dd=DD_VOLUME_ALL): """Return inf norm of (*red_state* - *blue_state*) for each component. .. note:: @@ -392,12 +394,12 @@ def compare_fluid_solutions(discr, red_state, blue_state): actx = red_state.array_context resid = red_state - blue_state resid_errs = actx.to_numpy( - flatten(componentwise_norms(discr, resid, order=np.inf), actx)) + flatten(componentwise_norms(discr, resid, order=np.inf, dd=dd), actx)) return resid_errs.tolist() -def componentwise_norms(discr, fields, order=np.inf): +def componentwise_norms(discr, fields, order=np.inf, *, dd=DD_VOLUME_ALL): """Return the *order*-norm for each component of *fields*. .. note:: @@ -405,15 +407,15 @@ def componentwise_norms(discr, fields, order=np.inf): """ if not isinstance(fields, DOFArray): return map_array_container( - partial(componentwise_norms, discr, order=order), fields) + partial(componentwise_norms, discr, order=order, dd=dd), fields) if len(fields) > 0: - return op.norm(discr, fields, order) + return op.norm(discr, fields, order, dd=dd) else: # FIXME: This work-around for #575 can go away after #569 return 0 -def max_component_norm(discr, fields, order=np.inf): +def max_component_norm(discr, fields, order=np.inf, *, dd=DD_VOLUME_ALL): """Return the max *order*-norm over the components of *fields*. .. note:: @@ -421,7 +423,7 @@ def max_component_norm(discr, fields, order=np.inf): """ actx = fields.array_context return max(actx.to_numpy(flatten( - componentwise_norms(discr, fields, order), actx))) + componentwise_norms(discr, fields, order, dd=dd), actx))) def generate_and_distribute_mesh(comm, generate_mesh): @@ -449,32 +451,146 @@ def generate_and_distribute_mesh(comm, generate_mesh): global_nelements : :class:`int` The number of elements in the serial mesh """ - from meshmode.distributed import ( - MPIMeshDistributor, - get_partition_by_pymetis, - ) - num_parts = comm.Get_size() - mesh_dist = MPIMeshDistributor(comm) - global_nelements = 0 + from warnings import warn + warn( + "generate_and_distribute_mesh is deprecated and will go away Q4 2022. " + "Use distribute_mesh instead.", DeprecationWarning, stacklevel=2) + return distribute_mesh(comm, generate_mesh) + + +def distribute_mesh(comm, get_mesh_data, partition_generator_func=None): + # FIXME: Out of date + """Distribute a mesh among all ranks in *comm*. + + Retrieve the global mesh data with the user-supplied function *get_mesh_data*, + partition the mesh, and distribute it to every rank in the provided MPI + communicator *comm*. - if mesh_dist.is_mananger_rank(): + .. note:: + This is a collective routine and must be called by all MPI ranks. - mesh = generate_mesh() + Parameters + ---------- + comm: + MPI communicator over which to partition the mesh + get_mesh_data: + Callable of zero arguments returning *mesh* or *(mesh, volume_to_elements)*, + where *mesh* is a :class:`meshmode.mesh.Mesh` and *volume_to_elements* is a + :class:`dict` mapping volume tags to :class:`numpy.ndarray`s of element + numbers. + + Returns + ------- + local_mesh_data : :class:`meshmode.mesh.Mesh` or :class:`dict` + If *get_mesh_data* returns only a mesh, *local_mesh_data* is the local mesh. + If *get_mesh_data* also returns *volume_to_elements*, *local_mesh_data* will + be a :class:`dict` mapping volume tags to corresponding local meshes. + global_nelements : :class:`int` + The number of elements in the global mesh + """ + from meshmode.distributed import mpi_distribute - global_nelements = mesh.nelements + num_ranks = comm.Get_size() - part_per_element = get_partition_by_pymetis(mesh, num_parts) - local_mesh = mesh_dist.send_mesh_parts(mesh, part_per_element, num_parts) - del mesh + if partition_generator_func is None: + def partition_generator_func(mesh, tag_to_elements, num_ranks): + from meshmode.distributed import get_partition_by_pymetis + return get_partition_by_pymetis(mesh, num_ranks) + + if comm.Get_rank() == 0: + global_data = get_mesh_data() + + from meshmode.mesh import Mesh + if isinstance(global_data, Mesh): + mesh = global_data + tag_to_elements = None + volume_to_tags = None + elif isinstance(global_data, tuple) and len(global_data) == 3: + mesh, tag_to_elements, volume_to_tags = global_data + else: + raise TypeError("Unexpected result from get_mesh_data") + + from meshmode.mesh.processing import partition_mesh + + rank_per_element = partition_generator_func(mesh, tag_to_elements, num_ranks) + + if tag_to_elements is None: + rank_to_elements = { + rank: np.where(rank_per_element == rank)[0] + for rank in range(num_ranks)} + + rank_to_mesh_data = partition_mesh(mesh, rank_to_elements) + + else: + tag_to_volume = { + tag: vol + for vol, tags in volume_to_tags.items() + for tag in tags} + + volumes = list(volume_to_tags.keys()) + + volume_index_per_element = np.full(mesh.nelements, -1, dtype=int) + for tag, elements in tag_to_elements.items(): + volume_index_per_element[elements] = volumes.index( + tag_to_volume[tag]) + + if np.any(volume_index_per_element < 0): + raise ValueError("Missing volume specification for some elements.") + + part_id_to_elements = { + PartID(volumes[vol_idx], rank): + np.where( + (volume_index_per_element == vol_idx) + & (rank_per_element == rank))[0] + for vol_idx in range(len(volumes)) + for rank in range(num_ranks)} + + # FIXME: Find a better way to do this + part_id_to_part_index = { + part_id: part_index + for part_index, part_id in enumerate(part_id_to_elements.keys())} + from meshmode.mesh.processing import _compute_global_elem_to_part_elem + global_elem_to_part_elem = _compute_global_elem_to_part_elem( + mesh.nelements, part_id_to_elements, part_id_to_part_index, + mesh.element_id_dtype) + + tag_to_global_to_part = { + tag: global_elem_to_part_elem[elements, :] + for tag, elements in tag_to_elements.items()} + + part_id_to_tag_to_elements = {} + for part_id in part_id_to_elements.keys(): + part_idx = part_id_to_part_index[part_id] + part_tag_to_elements = {} + for tag, global_to_part in tag_to_global_to_part.items(): + part_tag_to_elements[tag] = global_to_part[ + global_to_part[:, 0] == part_idx, 1] + part_id_to_tag_to_elements[part_id] = part_tag_to_elements + + part_id_to_mesh = partition_mesh(mesh, part_id_to_elements) + + rank_to_mesh_data = { + rank: { + vol: ( + part_id_to_mesh[PartID(vol, rank)], + part_id_to_tag_to_elements[PartID(vol, rank)]) + for vol in volumes} + for rank in range(num_ranks)} + + local_mesh_data = mpi_distribute( + comm, source_rank=0, source_data=rank_to_mesh_data) + + global_nelements = comm.bcast(mesh.nelements, root=0) else: - local_mesh = mesh_dist.receive_mesh_part() + local_mesh_data = mpi_distribute(comm, source_rank=0) - global_nelements = comm.bcast(global_nelements) - return local_mesh, global_nelements + global_nelements = comm.bcast(None, root=0) + return local_mesh_data, global_nelements -def boundary_report(discr, boundaries, outfile_name): + +def boundary_report(discr, boundaries, outfile_name, volume_dd=DD_VOLUME_ALL): """Generate a report of the grid boundaries.""" comm = discr.mpi_communicator nproc = 1 @@ -488,22 +604,23 @@ def boundary_report(discr, boundaries, outfile_name): local_report = StringIO(local_header) local_report.seek(0, 2) - for btag in boundaries: - boundary_discr = discr.discr_from_dd(btag) + for bdtag in boundaries: + boundary_discr = discr.discr_from_dd(bdtag) + nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) + local_report.write(f"{bdtag}: {nnodes}\n") + + from meshmode.mesh import BTAG_PARTITION + from meshmode.distributed import get_connected_partitions + connected_part_ids = get_connected_partitions( + discr.discr_from_dd(volume_dd).mesh) + local_report.write(f"connected_part_ids: {connected_part_ids}\n") + part_nodes = [] + for connected_part_id in connected_part_ids: + boundary_discr = discr.discr_from_dd(BTAG_PARTITION(connected_part_id)) nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) - local_report.write(f"{btag}: {nnodes}\n") - - if nproc > 1: - from meshmode.mesh import BTAG_PARTITION - from grudge.trace_pair import connected_ranks - remote_ranks = connected_ranks(discr) - local_report.write(f"remote_ranks: {remote_ranks}\n") - rank_nodes = [] - for remote_rank in remote_ranks: - boundary_discr = discr.discr_from_dd(BTAG_PARTITION(remote_rank)) - nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) - rank_nodes.append(nnodes) - local_report.write(f"nnodes_pb: {rank_nodes}\n") + part_nodes.append(nnodes) + if part_nodes: + local_report.write(f"nnodes_pb: {part_nodes}\n") local_report.write("-----\n") local_report.seek(0) @@ -517,15 +634,6 @@ def boundary_report(discr, boundaries, outfile_name): comm.barrier() -def create_parallel_grid(comm, generate_grid): - """Generate and distribute mesh compatibility interface.""" - from warnings import warn - warn("Do not call create_parallel_grid; use generate_and_distribute_mesh " - "instead. This function will disappear August 1, 2021", - DeprecationWarning, stacklevel=2) - return generate_and_distribute_mesh(comm=comm, generate_mesh=generate_grid) - - def limit_species_mass_fractions(cv): """Keep the species mass fractions from going negative.""" from mirgecom.fluid import make_conserved diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 885f40bf4..aeb835165 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -44,7 +44,10 @@ """ import numpy as np +from grudge.trace_pair import TracePair from meshmode.dof_array import DOFArray +from meshmode.discretization.connection import FACE_RESTR_ALL +from grudge.dof_desc import DD_VOLUME_ALL, DISCR_TAG_BASE import grudge.op as op @@ -324,10 +327,29 @@ def viscous_facial_flux_central(discr, state_pair, grad_cv_pair, grad_t_pair, actx = state_pair.int.array_context normal = actx.thaw(discr.normal(state_pair.dd)) - f_int = viscous_flux(state_pair.int, grad_cv_pair.int, - grad_t_pair.int) - f_ext = viscous_flux(state_pair.ext, grad_cv_pair.ext, - grad_t_pair.ext) + def harmonic_mean(x, y): + x_plus_y = actx.np.where(actx.np.greater(x + y, 0*x), x + y, 0*x+1) + return 2*x*y/x_plus_y + + # TODO: Do this for other coefficients too? + def replace_coefs(state, *, kappa): + from dataclasses import replace + new_tv = replace(state.tv, thermal_conductivity=kappa) + return replace(state, tv=new_tv) + + kappa_harmonic_mean = harmonic_mean( + state_pair.int.tv.thermal_conductivity, + state_pair.ext.tv.thermal_conductivity) + + state_pair_with_harmonic_mean_coefs = TracePair( + state_pair.dd, + interior=replace_coefs(state_pair.int, kappa=kappa_harmonic_mean), + exterior=replace_coefs(state_pair.ext, kappa=kappa_harmonic_mean)) + + f_int = viscous_flux( + state_pair_with_harmonic_mean_coefs.int, grad_cv_pair.int, grad_t_pair.int) + f_ext = viscous_flux( + state_pair_with_harmonic_mean_coefs.ext, grad_cv_pair.ext, grad_t_pair.ext) return num_flux_central(f_int, f_ext)@normal @@ -335,8 +357,9 @@ def viscous_facial_flux_central(discr, state_pair, grad_cv_pair, grad_t_pair, def viscous_flux_on_element_boundary( discr, gas_model, boundaries, interior_state_pairs, domain_boundary_states, grad_cv, interior_grad_cv_pairs, - grad_t, interior_grad_t_pairs, quadrature_tag=None, - numerical_flux_func=viscous_facial_flux_central, time=0.0): + grad_t, interior_grad_t_pairs, quadrature_tag=DISCR_TAG_BASE, + numerical_flux_func=viscous_facial_flux_central, time=0.0, + volume_dd=DD_VOLUME_ALL): """Compute the viscous boundary fluxes for the divergence operator. This routine encapsulates the computation of the viscous contributions @@ -351,14 +374,15 @@ def viscous_flux_on_element_boundary( The physical model constructs for the gas model boundaries - Dictionary of boundary functions, one for each valid btag + Dictionary of boundary functions, one for each valid + :class:`~grudge.dof_desc.BoundaryDomainTag` interior_state_pairs Trace pairs of :class:`~mirgecom.gas_model.FluidState` for the interior faces domain_boundary_states A dictionary of boundary-restricted :class:`~mirgecom.gas_model.FluidState`, - keyed by btags in *boundaries*. + keyed by boundary domain tags in *boundaries*. grad_cv: :class:`~mirgecom.fluid.ConservedVars` The gradient of the fluid conserved quantities. @@ -374,41 +398,42 @@ def viscous_flux_on_element_boundary( Trace pairs for the temperature gradient on interior faces quadrature_tag - An optional identifier denoting a particular quadrature - discretization to use during operator evaluations. - The default value is *None*. + An identifier denoting a particular quadrature discretization to use during + operator evaluations. numerical_flux_func The numerical flux function to use in computing the boundary flux. time: float Time - """ - from grudge.dof_desc import as_dofdesc - dd_base = as_dofdesc("vol") + volume_dd: grudge.dof_desc.DOFDesc + The DOF descriptor of the volume on which to compute the flux. + """ + dd_base = volume_dd + dd_vol_quad = dd_base.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) # {{{ - Viscous flux helpers - # viscous fluxes across interior faces (including partition and periodic bnd) def _fvisc_divergence_flux_interior(state_pair, grad_cv_pair, grad_t_pair): return op.project(discr, - state_pair.dd, state_pair.dd.with_dtag("all_faces"), + state_pair.dd, dd_allfaces_quad, numerical_flux_func( discr=discr, gas_model=gas_model, state_pair=state_pair, grad_cv_pair=grad_cv_pair, grad_t_pair=grad_t_pair)) # viscous part of bcs applied here - def _fvisc_divergence_flux_boundary(dd_btag, boundary, state_minus): - # Make sure we fields on the quadrature grid - # restricted to the tag *btag* + def _fvisc_divergence_flux_boundary(bdtag, boundary, state_minus): + dd_bdry = dd_vol_quad.with_domain_tag(bdtag) return op.project( - discr, dd_btag, dd_btag.with_dtag("all_faces"), + discr, dd_bdry, dd_allfaces_quad, boundary.viscous_divergence_flux( - discr=discr, btag=dd_btag, gas_model=gas_model, + discr=discr, dd_bdry=dd_bdry, gas_model=gas_model, state_minus=state_minus, - grad_cv_minus=op.project(discr, dd_base, dd_btag, grad_cv), - grad_t_minus=op.project(discr, dd_base, dd_btag, grad_t), + grad_cv_minus=op.project(discr, dd_base, dd_bdry, grad_cv), + grad_t_minus=op.project(discr, dd_base, dd_bdry, grad_t), time=time, numerical_flux_func=numerical_flux_func)) # }}} viscous flux helpers @@ -420,9 +445,10 @@ def _fvisc_divergence_flux_boundary(dd_btag, boundary, state_minus): ( # Domain boundary contributions for the viscous terms sum(_fvisc_divergence_flux_boundary( - as_dofdesc(btag).with_discr_tag(quadrature_tag), - boundary, domain_boundary_states[btag]) - for btag, boundary in boundaries.items()) + bdtag, + boundary, + domain_boundary_states[bdtag]) + for bdtag, boundary in boundaries.items()) # Interior interface contributions for the viscous terms + sum( @@ -436,7 +462,7 @@ def _fvisc_divergence_flux_boundary(dd_btag, boundary, state_minus): return bnd_term -def get_viscous_timestep(discr, state): +def get_viscous_timestep(discr, state, *, volume_dd=DD_VOLUME_ALL): r"""Routine returns the the node-local maximum stable viscous timestep. The locally required timestep $\delta{t}_l$ is calculated from the fluid @@ -470,7 +496,8 @@ def get_viscous_timestep(discr, state): """ from grudge.dt_utils import characteristic_lengthscales - length_scales = characteristic_lengthscales(state.array_context, discr) + length_scales = characteristic_lengthscales( + state.array_context, discr, dd=volume_dd) nu = 0 d_alpha_max = 0 @@ -488,7 +515,7 @@ def get_viscous_timestep(discr, state): ) -def get_viscous_cfl(discr, dt, state): +def get_viscous_cfl(discr, dt, state, *, volume_dd=DD_VOLUME_ALL): """Calculate and return node-local CFL based on current state and timestep. Parameters @@ -511,7 +538,7 @@ def get_viscous_cfl(discr, dt, state): The CFL at each node. """ - return dt / get_viscous_timestep(discr, state=state) + return dt / get_viscous_timestep(discr, state=state, volume_dd=volume_dd) def get_local_max_species_diffusivity(actx, d_alpha): diff --git a/mirgecom/wall_model.py b/mirgecom/wall_model.py new file mode 100644 index 000000000..881ae4f75 --- /dev/null +++ b/mirgecom/wall_model.py @@ -0,0 +1,65 @@ +""":mod:`mirgecom.wall_model` provides utilities to deal with wall materials. + +Physical Wall Model Encapsulation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: WallModel + +""" + +__copyright__ = """ +Copyright (C) 2022 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import numpy as np # noqa +from dataclasses import dataclass +from typing import Union + +from meshmode.dof_array import DOFArray + + +# TODO: Figure out what actually belongs here and what should be in state, +# then generalize like EOS/transport model +@dataclass(frozen=True) +class WallModel: + """Physical wall model for calculating wall state-dependent quantities. + + .. attribute:: density + + The density of the material. + + .. attribute:: heat_capacity + + The specific heat capacity of the material. + + .. attribute:: thermal_conductivity + + The thermal conductivity of the material. + """ + + density: Union[float, DOFArray] + heat_capacity: Union[float, DOFArray] + thermal_conductivity: Union[float, DOFArray] + + def thermal_diffusivity(self): + """Compute the thermal diffusivity of the material.""" + return self.thermal_conductivity/(self.density * self.heat_capacity) diff --git a/mirgecom/wave.py b/mirgecom/wave.py index 50e3ecac1..4a0b91b04 100644 --- a/mirgecom/wave.py +++ b/mirgecom/wave.py @@ -88,8 +88,8 @@ def wave_operator(discr, c, w): return ( op.inverse_mass(discr, flat_obj_array( - -c*op.weak_local_div(discr, "vol", v), - -c*op.weak_local_grad(discr, "vol", u) + -c*op.weak_local_div(discr, v), + -c*op.weak_local_grad(discr, u) ) + # noqa: W504 op.face_mass(discr, diff --git a/requirements.txt b/requirements.txt index 0dd945312..37c033513 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,6 @@ mpi4py numpy pytest pytest-cov -pyvisfile pymetis importlib-resources psutil @@ -11,6 +10,7 @@ pyyaml git+https://github.com/pythological/kanren.git#egg=miniKanren # The following packages will be git cloned by emirge: +--editable git+https://github.com/inducer/pyvisfile.git#egg=pyvisfile --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl --editable git+https://github.com/kaushikcfd/loopy.git#egg=loopy @@ -18,8 +18,8 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/kaushikcfd/arraycontext.git#egg=arraycontext ---editable git+https://github.com/kaushikcfd/meshmode.git#egg=meshmode ---editable git+https://github.com/kaushikcfd/grudge.git#egg=grudge +--editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode +--editable git+https://github.com/majosm/grudge.git@multi-volume-misc#egg=grudge --editable git+https://github.com/kaushikcfd/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle diff --git a/test/test_av.py b/test/test_av.py index 29d085c88..093c24e64 100644 --- a/test/test_av.py +++ b/test/test_av.py @@ -207,29 +207,28 @@ def test_artificial_viscosity(ctx_factory, dim, order): nodes = actx.thaw(discr.nodes()) class TestBoundary: - - def cv_gradient_flux(self, disc, btag, state_minus, gas_model, **kwargs): + def cv_gradient_flux(self, disc, dd_bdry, state_minus, gas_model, **kwargs): cv_int = state_minus.cv from grudge.trace_pair import TracePair - bnd_pair = TracePair(btag, + bnd_pair = TracePair(dd_bdry, interior=cv_int, exterior=cv_int) - nhat = actx.thaw(disc.normal(btag)) + nhat = actx.thaw(disc.normal(dd_bdry)) from mirgecom.flux import num_flux_central from arraycontext import outer # Do not project to "all_faces" as now we use built-in grad_cv_operator return outer(num_flux_central(bnd_pair.int, bnd_pair.ext), nhat) - def av_flux(self, disc, btag, diffusion, **kwargs): - nhat = actx.thaw(disc.normal(btag)) - diffusion_minus = op.project(discr, "vol", btag, diffusion) + def av_flux(self, disc, dd_bdry, diffusion, **kwargs): + nhat = actx.thaw(disc.normal(dd_bdry)) + diffusion_minus = op.project(discr, "vol", dd_bdry, diffusion) diffusion_plus = diffusion_minus from grudge.trace_pair import TracePair - bnd_grad_pair = TracePair(btag, interior=diffusion_minus, + bnd_grad_pair = TracePair(dd_bdry, interior=diffusion_minus, exterior=diffusion_plus) from mirgecom.flux import num_flux_central flux_weak = num_flux_central(bnd_grad_pair.int, bnd_grad_pair.ext)@nhat - return op.project(disc, btag, "all_faces", flux_weak) + return op.project(discr, dd_bdry, "all_faces", flux_weak) boundaries = {BTAG_ALL: TestBoundary()} @@ -404,9 +403,9 @@ def test_fluid_av_boundaries(ctx_factory, prescribed_soln, order): gas_model = GasModel(eos=IdealSingleGas(gas_const=1.0), transport=transport_model) - def _boundary_state_func(discr, btag, gas_model, state_minus, **kwargs): + def _boundary_state_func(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(prescribed_soln(r=nodes, eos=gas_model.eos, **kwargs), gas_model) diff --git a/test/test_bc.py b/test/test_bc.py index 1689b37fc..107c95d37 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -929,11 +929,14 @@ def bnd_norm(vec): return actx.to_numpy(op.norm(discr, vec, p=np.inf, dd=BTAG_ALL)) state_plus = \ - wall.adiabatic_slip_state(discr, btag=BTAG_ALL, gas_model=gas_model, - state_minus=state_minus) + wall.adiabatic_slip_state( + discr, dd_bdry=BTAG_ALL, gas_model=gas_model, + state_minus=state_minus) - bnd_pair = TracePair(BTAG_ALL, interior=state_minus.cv, - exterior=state_plus.cv) + bnd_pair = TracePair( + as_dofdesc(BTAG_ALL), + interior=state_minus.cv, + exterior=state_plus.cv) # check that mass and energy are preserved mass_resid = bnd_pair.int.mass - bnd_pair.ext.mass @@ -1004,14 +1007,18 @@ def bnd_norm(vec): state=fluid_state, gas_model=gas_model) - bnd_soln = wall.adiabatic_slip_state(discr, btag=BTAG_ALL, + bnd_soln = wall.adiabatic_slip_state(discr, dd_bdry=BTAG_ALL, gas_model=gas_model, state_minus=interior_soln) - bnd_pair = TracePair(BTAG_ALL, interior=interior_soln.cv, - exterior=bnd_soln.cv) - state_pair = TracePair(BTAG_ALL, interior=interior_soln, - exterior=bnd_soln) + bnd_pair = TracePair( + as_dofdesc(BTAG_ALL), + interior=interior_soln.cv, + exterior=bnd_soln.cv) + state_pair = TracePair( + as_dofdesc(BTAG_ALL), + interior=interior_soln, + exterior=bnd_soln) # Check the total velocity component normal # to each surface. It should be zero. The @@ -1135,10 +1142,11 @@ def scalar_flux_interior(int_tpair): print(f"{cv_flux_int=}") wall_state = wall.isothermal_noslip_state( - discr, btag=BTAG_ALL, gas_model=gas_model, state_minus=state_minus) + discr, dd_bdry=BTAG_ALL, gas_model=gas_model, + state_minus=state_minus) print(f"{wall_state=}") - cv_grad_flux_wall = wall.cv_gradient_flux(discr, btag=BTAG_ALL, + cv_grad_flux_wall = wall.cv_gradient_flux(discr, dd_bdry=BTAG_ALL, gas_model=gas_model, state_minus=state_minus) @@ -1156,7 +1164,7 @@ def scalar_flux_interior(int_tpair): t_int_tpair = interior_trace_pair(discr, temper) t_flux_int = scalar_flux_interior(t_int_tpair) - t_flux_bc = wall.temperature_gradient_flux(discr, btag=BTAG_ALL, + t_flux_bc = wall.temperature_gradient_flux(discr, dd_bdry=BTAG_ALL, gas_model=gas_model, state_minus=state_minus) @@ -1166,7 +1174,7 @@ def scalar_flux_interior(int_tpair): t_flux_bnd = t_flux_bc + t_flux_int - i_flux_bc = wall.inviscid_divergence_flux(discr, btag=BTAG_ALL, + i_flux_bc = wall.inviscid_divergence_flux(discr, dd_bdry=BTAG_ALL, gas_model=gas_model, state_minus=state_minus) @@ -1198,7 +1206,7 @@ def scalar_flux_interior(int_tpair): print(f"{grad_cv_minus=}") print(f"{grad_t_minus=}") - v_flux_bc = wall.viscous_divergence_flux(discr, btag=BTAG_ALL, + v_flux_bc = wall.viscous_divergence_flux(discr, dd_bdry=BTAG_ALL, gas_model=gas_model, state_minus=state_minus, grad_cv_minus=grad_cv_minus, @@ -1287,9 +1295,9 @@ def test_prescribed(actx_factory, prescribed_soln, flux_func): # (*note): Most people will never change these as they are used internally # to compute a DG gradient of Q and temperature. - def _boundary_state_func(discr, btag, gas_model, state_minus, **kwargs): + def _boundary_state_func(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(prescribed_soln(r=nodes, eos=gas_model.eos, **kwargs), gas_model) @@ -1347,7 +1355,7 @@ def scalar_flux_interior(int_tpair): cv_int_tpair = interior_trace_pair(discr, cv) cv_flux_int = scalar_flux_interior(cv_int_tpair) - cv_flux_bc = domain_boundary.cv_gradient_flux(discr, btag=BTAG_ALL, + cv_flux_bc = domain_boundary.cv_gradient_flux(discr, dd_bdry=BTAG_ALL, gas_model=gas_model, state_minus=state_minus) @@ -1360,7 +1368,7 @@ def scalar_flux_interior(int_tpair): t_int_tpair = interior_trace_pair(discr, temper) t_flux_int = scalar_flux_interior(t_int_tpair) t_flux_bc = \ - domain_boundary.temperature_gradient_flux(discr, btag=BTAG_ALL, + domain_boundary.temperature_gradient_flux(discr, dd_bdry=BTAG_ALL, gas_model=gas_model, state_minus=state_minus) @@ -1371,7 +1379,7 @@ def scalar_flux_interior(int_tpair): t_flux_bnd = t_flux_bc + t_flux_int i_flux_bc = \ - domain_boundary.inviscid_divergence_flux(discr, btag=BTAG_ALL, + domain_boundary.inviscid_divergence_flux(discr, dd_bdry=BTAG_ALL, gas_model=gas_model, state_minus=state_minus) @@ -1405,11 +1413,10 @@ def scalar_flux_interior(int_tpair): print(f"{grad_t_minus=}") v_flux_bc = \ - domain_boundary.viscous_divergence_flux(discr=discr, btag=BTAG_ALL, - gas_model=gas_model, - state_minus=state_minus, - grad_cv_minus=grad_cv_minus, - grad_t_minus=grad_t_minus) + domain_boundary.viscous_divergence_flux( + discr=discr, dd_bdry=BTAG_ALL, gas_model=gas_model, + state_minus=state_minus, grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus) print(f"{v_flux_bc=}") bc_soln = \ domain_boundary._boundary_state_pair(discr, BTAG_ALL, gas_model, diff --git a/test/test_diffusion.py b/test/test_diffusion.py index 37fc19334..0f13b8b42 100644 --- a/test/test_diffusion.py +++ b/test/test_diffusion.py @@ -38,7 +38,7 @@ DirichletDiffusionBoundary, NeumannDiffusionBoundary) from meshmode.dof_array import DOFArray -from grudge.dof_desc import DTAG_BOUNDARY, DISCR_TAG_BASE, DISCR_TAG_QUAD +from grudge.dof_desc import BoundaryDomainTag, DISCR_TAG_BASE, DISCR_TAG_QUAD from mirgecom.discretization import create_discretization_collection from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context @@ -133,14 +133,14 @@ def get_boundaries(self, discr, actx, t): boundaries = {} for i in range(self.dim-1): - lower_btag = DTAG_BOUNDARY("-"+str(i)) - upper_btag = DTAG_BOUNDARY("+"+str(i)) - boundaries[lower_btag] = NeumannDiffusionBoundary(0.) - boundaries[upper_btag] = NeumannDiffusionBoundary(0.) - lower_btag = DTAG_BOUNDARY("-"+str(self.dim-1)) - upper_btag = DTAG_BOUNDARY("+"+str(self.dim-1)) - boundaries[lower_btag] = DirichletDiffusionBoundary(0.) - boundaries[upper_btag] = DirichletDiffusionBoundary(0.) + lower_bdtag = BoundaryDomainTag("-"+str(i)) + upper_bdtag = BoundaryDomainTag("+"+str(i)) + boundaries[lower_bdtag] = NeumannDiffusionBoundary(0.) + boundaries[upper_bdtag] = NeumannDiffusionBoundary(0.) + lower_bdtag = BoundaryDomainTag("-"+str(self.dim-1)) + upper_bdtag = BoundaryDomainTag("+"+str(self.dim-1)) + boundaries[lower_bdtag] = DirichletDiffusionBoundary(0.) + boundaries[upper_bdtag] = DirichletDiffusionBoundary(0.) return boundaries @@ -179,18 +179,18 @@ def get_boundaries(self, discr, actx, t): boundaries = {} for i in range(self.dim-1): - lower_btag = DTAG_BOUNDARY("-"+str(i)) - upper_btag = DTAG_BOUNDARY("+"+str(i)) - upper_grad_u = op.project(discr, "vol", upper_btag, exact_grad_u) - normal = actx.thaw(discr.normal(upper_btag)) + lower_bdtag = BoundaryDomainTag("-"+str(i)) + upper_bdtag = BoundaryDomainTag("+"+str(i)) + upper_grad_u = op.project(discr, "vol", upper_bdtag, exact_grad_u) + normal = actx.thaw(discr.normal(upper_bdtag)) upper_grad_u_dot_n = np.dot(upper_grad_u, normal) - boundaries[lower_btag] = NeumannDiffusionBoundary(0.) - boundaries[upper_btag] = NeumannDiffusionBoundary(upper_grad_u_dot_n) - lower_btag = DTAG_BOUNDARY("-"+str(self.dim-1)) - upper_btag = DTAG_BOUNDARY("+"+str(self.dim-1)) - upper_u = op.project(discr, "vol", upper_btag, exact_u) - boundaries[lower_btag] = DirichletDiffusionBoundary(0.) - boundaries[upper_btag] = DirichletDiffusionBoundary(upper_u) + boundaries[lower_bdtag] = NeumannDiffusionBoundary(0.) + boundaries[upper_bdtag] = NeumannDiffusionBoundary(upper_grad_u_dot_n) + lower_bdtag = BoundaryDomainTag("-"+str(self.dim-1)) + upper_bdtag = BoundaryDomainTag("+"+str(self.dim-1)) + upper_u = op.project(discr, "vol", upper_bdtag, exact_u) + boundaries[lower_bdtag] = DirichletDiffusionBoundary(0.) + boundaries[upper_bdtag] = DirichletDiffusionBoundary(upper_u) return boundaries @@ -227,14 +227,14 @@ def get_boundaries(self, discr, actx, t): boundaries = {} for i in range(self.dim-1): - lower_btag = DTAG_BOUNDARY("-"+str(i)) - upper_btag = DTAG_BOUNDARY("+"+str(i)) - boundaries[lower_btag] = NeumannDiffusionBoundary(0.) - boundaries[upper_btag] = NeumannDiffusionBoundary(0.) - lower_btag = DTAG_BOUNDARY("-"+str(self.dim-1)) - upper_btag = DTAG_BOUNDARY("+"+str(self.dim-1)) - boundaries[lower_btag] = DirichletDiffusionBoundary(0.) - boundaries[upper_btag] = DirichletDiffusionBoundary(0.) + lower_bdtag = BoundaryDomainTag("-"+str(i)) + upper_bdtag = BoundaryDomainTag("+"+str(i)) + boundaries[lower_bdtag] = NeumannDiffusionBoundary(0.) + boundaries[upper_bdtag] = NeumannDiffusionBoundary(0.) + lower_bdtag = BoundaryDomainTag("-"+str(self.dim-1)) + upper_bdtag = BoundaryDomainTag("+"+str(self.dim-1)) + boundaries[lower_bdtag] = DirichletDiffusionBoundary(0.) + boundaries[upper_bdtag] = DirichletDiffusionBoundary(0.) return boundaries @@ -265,14 +265,14 @@ def get_boundaries(self, discr, actx, t): boundaries = {} for i in range(self.dim-1): - lower_btag = DTAG_BOUNDARY("-"+str(i)) - upper_btag = DTAG_BOUNDARY("+"+str(i)) - boundaries[lower_btag] = NeumannDiffusionBoundary(0.) - boundaries[upper_btag] = NeumannDiffusionBoundary(0.) - lower_btag = DTAG_BOUNDARY("-"+str(self.dim-1)) - upper_btag = DTAG_BOUNDARY("+"+str(self.dim-1)) - boundaries[lower_btag] = DirichletDiffusionBoundary(0.) - boundaries[upper_btag] = DirichletDiffusionBoundary(0.) + lower_bdtag = BoundaryDomainTag("-"+str(i)) + upper_bdtag = BoundaryDomainTag("+"+str(i)) + boundaries[lower_bdtag] = NeumannDiffusionBoundary(0.) + boundaries[upper_bdtag] = NeumannDiffusionBoundary(0.) + lower_bdtag = BoundaryDomainTag("-"+str(self.dim-1)) + upper_bdtag = BoundaryDomainTag("+"+str(self.dim-1)) + boundaries[lower_bdtag] = DirichletDiffusionBoundary(0.) + boundaries[upper_bdtag] = DirichletDiffusionBoundary(0.) return boundaries @@ -411,8 +411,8 @@ def test_diffusion_discontinuous_kappa(actx_factory, order, visualize=False): kappa = kappa_lower * lower_mask + kappa_upper * upper_mask boundaries = { - DTAG_BOUNDARY("-0"): DirichletDiffusionBoundary(0.), - DTAG_BOUNDARY("+0"): DirichletDiffusionBoundary(1.), + BoundaryDomainTag("-0"): DirichletDiffusionBoundary(0.), + BoundaryDomainTag("+0"): DirichletDiffusionBoundary(1.), } flux = -kappa_lower*kappa_upper/(kappa_lower + kappa_upper) diff --git a/test/test_euler.py b/test/test_euler.py index 3b13c93e6..bc8aeca4b 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -270,9 +270,9 @@ def test_vortex_rhs(actx_factory, order, use_overintegration, numerical_flux_fun gas_model = GasModel(eos=IdealSingleGas()) fluid_state = make_fluid_state(vortex_soln, gas_model) - def _vortex_boundary(discr, btag, gas_model, state_minus, **kwargs): + def _vortex_boundary(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(vortex(x_vec=nodes, **kwargs), gas_model) @@ -350,9 +350,9 @@ def test_lump_rhs(actx_factory, dim, order, use_overintegration, gas_model = GasModel(eos=IdealSingleGas()) fluid_state = make_fluid_state(lump_soln, gas_model) - def _lump_boundary(discr, btag, gas_model, state_minus, **kwargs): + def _lump_boundary(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(lump(x_vec=nodes, cv=state_minus, **kwargs), gas_model) @@ -445,9 +445,9 @@ def test_multilump_rhs(actx_factory, dim, order, v0, use_overintegration, gas_model = GasModel(eos=IdealSingleGas()) fluid_state = make_fluid_state(lump_soln, gas_model) - def _my_boundary(discr, btag, gas_model, state_minus, **kwargs): + def _my_boundary(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(lump(x_vec=nodes, **kwargs), gas_model) @@ -664,9 +664,9 @@ def test_isentropic_vortex(actx_factory, order, use_overintegration, initializer = Vortex2D(center=orig, velocity=vel) casename = "Vortex" - def _vortex_boundary(discr, btag, state_minus, gas_model, **kwargs): + def _vortex_boundary(discr, dd_bdry, state_minus, gas_model, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, **kwargs), gas_model) diff --git a/test/test_filter.py b/test/test_filter.py index 67429b4ad..b5b1632a1 100644 --- a/test/test_filter.py +++ b/test/test_filter.py @@ -230,9 +230,9 @@ def polyfn(coeff): # , x_vec): from grudge.shortcuts import make_visualizer vis = make_visualizer(discr, order) - from grudge.dof_desc import DD_VOLUME_MODAL, DD_VOLUME + from grudge.dof_desc import DD_VOLUME_ALL, DD_VOLUME_ALL_MODAL - modal_map = discr.connection_from_dds(DD_VOLUME, DD_VOLUME_MODAL) + modal_map = discr.connection_from_dds(DD_VOLUME_ALL, DD_VOLUME_ALL_MODAL) for field_order in range(cutoff+1, cutoff+4): coeff = [1.0 / (i + 1) for i in range(field_order+1)] diff --git a/test/test_flux.py b/test/test_flux.py index 12bc6f2b5..a72dec470 100644 --- a/test/test_flux.py +++ b/test/test_flux.py @@ -34,6 +34,7 @@ from pytools.obj_array import make_obj_array from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.dof_array import DOFArray +from grudge.dof_desc import as_dofdesc from grudge.trace_pair import TracePair from mirgecom.fluid import make_conserved from mirgecom.eos import IdealSingleGas @@ -129,7 +130,10 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): mag = np.linalg.norm(normal) normal = norm_dir*normal/mag - state_pair = TracePair("vol", interior=fluid_state_int, exterior=fluid_state_ext) + state_pair = TracePair( + as_dofdesc("vol"), + interior=fluid_state_int, + exterior=fluid_state_ext) # code passes in fluxes in the direction of the surface normal, # so we will too @@ -275,7 +279,10 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): mag = np.linalg.norm(normal) normal = norm_dir*normal/mag - state_pair = TracePair("vol", interior=fluid_state_int, exterior=fluid_state_ext) + state_pair = TracePair( + as_dofdesc("vol"), + interior=fluid_state_int, + exterior=fluid_state_ext) from mirgecom.inviscid import inviscid_facial_flux_hll flux_bnd = inviscid_facial_flux_hll(state_pair, gas_model, normal) diff --git a/test/test_inviscid.py b/test/test_inviscid.py index 0c2ed83eb..c73e93bd6 100644 --- a/test/test_inviscid.py +++ b/test/test_inviscid.py @@ -37,6 +37,7 @@ ) from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.dof_desc import as_dofdesc from grudge.trace_pair import TracePair from mirgecom.fluid import make_conserved from mirgecom.eos import IdealSingleGas @@ -375,7 +376,7 @@ def inf_norm(data): momentum=dir_mom, species_mass=dir_mf) dir_bval = make_conserved(dim, mass=dir_mass, energy=dir_e, momentum=dir_mom, species_mass=dir_mf) - state_tpair = TracePair(BTAG_ALL, + state_tpair = TracePair(as_dofdesc(BTAG_ALL), interior=make_fluid_state(dir_bval, gas_model), exterior=make_fluid_state(dir_bc, gas_model)) diff --git a/test/test_lazy.py b/test/test_lazy.py index 8b22e6981..f00e11ee1 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -102,15 +102,15 @@ def _isclose(discr, x, y, rel_tol=1e-9, abs_tol=0, return_operands=False): # cl_ctx = ctx_factory() # actx, discr = _op_test_fixture(cl_ctx) # -# from grudge.dof_desc import DTAG_BOUNDARY +# from grudge.dof_desc import BoundaryDomainTag # from mirgecom.diffusion import ( # _gradient_operator, # DirichletDiffusionBoundary, # NeumannDiffusionBoundary) # # boundaries = { -# DTAG_BOUNDARY("x"): DirichletDiffusionBoundary(0), -# DTAG_BOUNDARY("y"): NeumannDiffusionBoundary(0) +# BoundaryDomainTag("x"): DirichletDiffusionBoundary(0), +# BoundaryDomainTag("y"): NeumannDiffusionBoundary(0) # } # # def op(u): @@ -173,15 +173,15 @@ def test_lazy_op_diffusion(op_test_data, order): eager_actx, lazy_actx, get_discr = op_test_data discr = get_discr(order) - from grudge.dof_desc import DTAG_BOUNDARY + from grudge.dof_desc import BoundaryDomainTag from mirgecom.diffusion import ( diffusion_operator, DirichletDiffusionBoundary, NeumannDiffusionBoundary) boundaries = { - DTAG_BOUNDARY("x"): DirichletDiffusionBoundary(0), - DTAG_BOUNDARY("y"): NeumannDiffusionBoundary(0) + BoundaryDomainTag("x"): DirichletDiffusionBoundary(0), + BoundaryDomainTag("y"): NeumannDiffusionBoundary(0) } def diffusion_op(kappa, u): @@ -239,9 +239,9 @@ def _get_scalar_lump(): dim=2, nspecies=3, velocity=np.ones(2), spec_y0s=np.ones(3), spec_amplitudes=np.ones(3)) - def _my_boundary(discr, btag, gas_model, state_minus, **kwargs): + def _my_boundary(discr, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(init(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) diff --git a/test/test_multiphysics.py b/test/test_multiphysics.py new file mode 100644 index 000000000..c2049069c --- /dev/null +++ b/test/test_multiphysics.py @@ -0,0 +1,477 @@ +__copyright__ = """Copyright (C) 2022 University of Illinois Board of Trustees""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import numpy as np +from dataclasses import replace +from functools import partial +import pyopencl.array as cla # noqa +import pyopencl.clmath as clmath # noqa +from pytools.obj_array import make_obj_array +import pymbolic as pmbl +import grudge.op as op +from mirgecom.symbolic import ( + grad as sym_grad, + evaluate) +from mirgecom.simutil import max_component_norm +import mirgecom.math as mm +from mirgecom.diffusion import ( + diffusion_operator, + DirichletDiffusionBoundary, + NeumannDiffusionBoundary) +from meshmode.mesh import BTAG_PARTITION +from grudge.dof_desc import DOFDesc, VolumeDomainTag, DISCR_TAG_BASE, DISCR_TAG_QUAD +from grudge.discretization import PartID +from mirgecom.discretization import create_discretization_collection +from mirgecom.eos import IdealSingleGas +from mirgecom.transport import SimpleTransport +from mirgecom.fluid import make_conserved +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) +from mirgecom.boundary import ( + AdiabaticNoslipWallBoundary, + IsothermalWallBoundary, +) +from mirgecom.wall_model import WallModel +from mirgecom.multiphysics.thermally_coupled_fluid_wall import ( + coupled_ns_heat_operator +) +from meshmode.array_context import ( # noqa + pytest_generate_tests_for_pyopencl_array_context + as pytest_generate_tests) +import pytest + +import logging +logger = logging.getLogger(__name__) + + +def get_box_mesh(dim, a, b, n): + dim_names = ["x", "y", "z"] + boundary_tag_to_face = {} + for i in range(dim): + boundary_tag_to_face["-"+str(i)] = ["-"+dim_names[i]] + boundary_tag_to_face["+"+str(i)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh + return generate_regular_rect_mesh(a=(a,)*dim, b=(b,)*dim, + nelements_per_axis=(n,)*dim, boundary_tag_to_face=boundary_tag_to_face) + + +@pytest.mark.parametrize("order", [1, 2, 3, 4]) +def test_independent_volumes(actx_factory, order, visualize=False): + """Check multi-volume machinery by setting up two independent volumes.""" + actx = actx_factory() + + n = 8 + global_mesh = get_box_mesh(2, -1, 1, n) + + mgrp, = global_mesh.groups + y = global_mesh.vertices[1, mgrp.vertex_indices] + y_elem_avg = np.sum(y, axis=1)/y.shape[1] + volume_to_elements = { + "Lower": np.where(y_elem_avg < 0)[0], + "Upper": np.where(y_elem_avg > 0)[0]} + + from meshmode.mesh.processing import partition_mesh + volume_meshes = partition_mesh(global_mesh, volume_to_elements) + + dcoll = create_discretization_collection(actx, volume_meshes, order) + + dd_vol_lower = DOFDesc(VolumeDomainTag("Lower"), DISCR_TAG_BASE) + dd_vol_upper = DOFDesc(VolumeDomainTag("Upper"), DISCR_TAG_BASE) + + lower_nodes = actx.thaw(dcoll.nodes(dd=dd_vol_lower)) + upper_nodes = actx.thaw(dcoll.nodes(dd=dd_vol_upper)) + + lower_boundaries = { + dd_vol_lower.trace("-0").domain_tag: NeumannDiffusionBoundary(0.), + dd_vol_lower.trace("+0").domain_tag: NeumannDiffusionBoundary(0.), + dd_vol_lower.trace("-1").domain_tag: DirichletDiffusionBoundary(0.), + dd_vol_lower.trace(BTAG_PARTITION(PartID("Upper"))).domain_tag: + DirichletDiffusionBoundary(1.), + } + + upper_boundaries = { + dd_vol_upper.trace("-0").domain_tag: NeumannDiffusionBoundary(0.), + dd_vol_upper.trace("+0").domain_tag: NeumannDiffusionBoundary(0.), + dd_vol_upper.trace(BTAG_PARTITION(PartID("Lower"))).domain_tag: + DirichletDiffusionBoundary(0.), + dd_vol_upper.trace("+1"): DirichletDiffusionBoundary(1.), + } + + lower_u = lower_nodes[1] + 1 + upper_u = upper_nodes[1] + + u = make_obj_array([lower_u, upper_u]) + + def get_rhs(t, u): + return make_obj_array([ + diffusion_operator( + dcoll, kappa=1, boundaries=lower_boundaries, u=u[0], + volume_dd=dd_vol_lower), + diffusion_operator( + dcoll, kappa=1, boundaries=upper_boundaries, u=u[1], + volume_dd=dd_vol_upper)]) + + rhs = get_rhs(0, u) + + if visualize: + from grudge.shortcuts import make_visualizer + viz_lower = make_visualizer(dcoll, order+3, volume_dd=dd_vol_lower) + viz_upper = make_visualizer(dcoll, order+3, volume_dd=dd_vol_upper) + viz_lower.write_vtk_file( + f"multiphysics_independent_volumes_{order}_lower.vtu", [ + ("u", u[0]), + ("rhs", rhs[0]), + ]) + viz_upper.write_vtk_file( + f"multiphysics_independent_volumes_{order}_upper.vtu", [ + ("u", u[1]), + ("rhs", rhs[1]), + ]) + + linf_err_lower = actx.to_numpy(op.norm(dcoll, rhs[0], np.inf, dd=dd_vol_lower)) + linf_err_upper = actx.to_numpy(op.norm(dcoll, rhs[1], np.inf, dd=dd_vol_upper)) + + assert linf_err_lower < 1e-9 + assert linf_err_upper < 1e-9 + + +@pytest.mark.parametrize("order", [2, 3]) +@pytest.mark.parametrize("use_overintegration", [False, True]) +def test_thermally_coupled_fluid_wall( + actx_factory, order, use_overintegration, visualize=False): + """Check the thermally-coupled fluid/wall interface.""" + actx = actx_factory() + + from pytools.convergence import EOCRecorder + eoc_rec_fluid = EOCRecorder() + eoc_rec_wall = EOCRecorder() + + scales = [6, 8, 12] + + for n in scales: + global_mesh = get_box_mesh(2, -1, 1, n) + + mgrp, = global_mesh.groups + y = global_mesh.vertices[1, mgrp.vertex_indices] + y_elem_avg = np.sum(y, axis=1)/y.shape[1] + volume_to_elements = { + "Fluid": np.where(y_elem_avg > 0)[0], + "Wall": np.where(y_elem_avg < 0)[0]} + + from meshmode.mesh.processing import partition_mesh + volume_meshes = partition_mesh(global_mesh, volume_to_elements) + + dcoll = create_discretization_collection( + actx, volume_meshes, order=order, quadrature_order=2*order+1) + + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + dd_vol_fluid = DOFDesc(VolumeDomainTag("Fluid"), DISCR_TAG_BASE) + dd_vol_wall = DOFDesc(VolumeDomainTag("Wall"), DISCR_TAG_BASE) + + if visualize: + from grudge.shortcuts import make_visualizer + viz_fluid = make_visualizer(dcoll, order+3, volume_dd=dd_vol_fluid) + viz_wall = make_visualizer(dcoll, order+3, volume_dd=dd_vol_wall) + if use_overintegration: + viz_suffix = f"over_{order}_{n}" + else: + viz_suffix = f"{order}_{n}" + + fluid_nodes = actx.thaw(dcoll.nodes(dd=dd_vol_fluid)) + wall_nodes = actx.thaw(dcoll.nodes(dd=dd_vol_wall)) + + # Crank up the heat conduction so it's fast as possible within NS + # timestep restriction + heat_amplification_factor = 10000 + + gamma = 1.4 + r = 285.71300152552493 + mu = 4.216360056e-05 + eos = IdealSingleGas(gamma=gamma, gas_const=r) + base_fluid_pressure = 4935.22 + base_fluid_temp = 300 + fluid_density = base_fluid_pressure/base_fluid_temp/r + fluid_heat_capacity = eos.heat_capacity_cv() + fluid_kappa = heat_amplification_factor * 0.05621788139856423 + transport = SimpleTransport( + viscosity=mu, + thermal_conductivity=fluid_kappa) + gas_model = GasModel(eos=eos, transport=transport) + + # Made-up wall material + wall_density = 10*fluid_density + wall_heat_capacity = fluid_heat_capacity + wall_kappa = 10*fluid_kappa + wall_model = WallModel( + density=wall_density, + heat_capacity=wall_heat_capacity, + thermal_conductivity=wall_kappa) + + base_wall_temp = 600 + + fluid_boundaries = { + dd_vol_fluid.trace("-0").domain_tag: AdiabaticNoslipWallBoundary(), + dd_vol_fluid.trace("+0").domain_tag: AdiabaticNoslipWallBoundary(), + dd_vol_fluid.trace("+1").domain_tag: + IsothermalWallBoundary(wall_temperature=base_fluid_temp), + } + + wall_boundaries = { + dd_vol_wall.trace("-0").domain_tag: NeumannDiffusionBoundary(0.), + dd_vol_wall.trace("+0").domain_tag: NeumannDiffusionBoundary(0.), + dd_vol_wall.trace("-1").domain_tag: + DirichletDiffusionBoundary(base_wall_temp), + } + + interface_temp = ( + (fluid_kappa * base_fluid_temp + wall_kappa * base_wall_temp) + / (fluid_kappa + wall_kappa)) + interface_flux = ( + -fluid_kappa * wall_kappa / (fluid_kappa + wall_kappa) + * (base_fluid_temp - base_wall_temp)) + fluid_alpha = fluid_kappa/(fluid_density * fluid_heat_capacity) + wall_alpha = wall_kappa/(wall_density * wall_heat_capacity) + + def steady_func(kappa, x, t): + return interface_temp - interface_flux/kappa * x[1] + + fluid_steady_func = partial(steady_func, fluid_kappa) + wall_steady_func = partial(steady_func, wall_kappa) + + def perturb_func(alpha, x, t): + w = 1.5 * np.pi + return 50 * mm.cos(w * x[1]) * mm.exp(-w**2 * alpha * t) + + # This perturbation function is nonzero at the interface, so the two alphas + # need to be the same (otherwise the perturbations will decay at different + # rates and a discontinuity will form) + assert abs(fluid_alpha - wall_alpha) < 1e-12 + + fluid_perturb_func = partial(perturb_func, fluid_alpha) + wall_perturb_func = partial(perturb_func, wall_alpha) + + def fluid_func(x, t): + return fluid_steady_func(x, t) + fluid_perturb_func(x, t) + + def wall_func(x, t): + return wall_steady_func(x, t) + wall_perturb_func(x, t) + + if visualize: + fluid_temp_steady = fluid_steady_func(fluid_nodes, 0) + fluid_temp_perturb = fluid_perturb_func(fluid_nodes, 0) + fluid_temp_perturb_later = fluid_perturb_func(fluid_nodes, 5) + fluid_temp = fluid_func(fluid_nodes, 0) + wall_temp_steady = wall_steady_func(wall_nodes, 0) + wall_temp_perturb = wall_perturb_func(wall_nodes, 0) + wall_temp_perturb_later = wall_perturb_func(wall_nodes, 5) + wall_temp = wall_func(wall_nodes, 0) + viz_fluid.write_vtk_file( + f"multiphysics_thermally_coupled_init_{viz_suffix}_fluid.vtu", [ + ("temp_steady", fluid_temp_steady), + ("temp_perturb", fluid_temp_perturb), + ("temp_perturb_later", fluid_temp_perturb_later), + ("temp", fluid_temp), + ]) + viz_wall.write_vtk_file( + f"multiphysics_thermally_coupled_init_{viz_suffix}_wall.vtu", [ + ("temp_steady", wall_temp_steady), + ("temp_perturb", wall_temp_perturb), + ("temp_perturb_later", wall_temp_perturb_later), + ("temp", wall_temp), + ]) + + # Add a source term to the momentum equations to cancel out the pressure term + sym_fluid_temp = fluid_func(pmbl.var("x"), pmbl.var("t")) + sym_fluid_pressure = fluid_density * r * sym_fluid_temp + sym_momentum_source = sym_grad(2, sym_fluid_pressure) + + def momentum_source_func(x, t): + return evaluate(sym_momentum_source, x=x, t=t) + + def get_rhs(t, state): + fluid_state = make_fluid_state(cv=state[0], gas_model=gas_model) + wall_temp = state[1] + fluid_rhs, wall_rhs = coupled_ns_heat_operator( + dcoll, + gas_model, wall_model, + dd_vol_fluid, dd_vol_wall, + fluid_boundaries, wall_boundaries, + fluid_state, wall_temp, + time=t, + quadrature_tag=quadrature_tag) + fluid_rhs = replace( + fluid_rhs, + momentum=fluid_rhs.momentum + momentum_source_func(fluid_nodes, t)) + return make_obj_array([fluid_rhs, wall_rhs]) + + def cv_from_temp(temp): + rho = fluid_density * (0*temp + 1) + mom = make_obj_array([0*temp]*2) + energy = ( + (rho * r * temp)/(gamma - 1.0) + + np.dot(mom, mom)/(2.0*rho)) + return make_conserved( + dim=2, + mass=rho, + momentum=mom, + energy=energy) + + # Check that steady-state solution has 0 RHS + + t_large = 1e6 + fluid_temp = fluid_func(fluid_nodes, t_large) + wall_temp = wall_func(wall_nodes, t_large) + + state = make_obj_array([cv_from_temp(fluid_temp), wall_temp]) + + rhs = get_rhs(t_large, state) + + if visualize: + fluid_state = make_fluid_state(state[0], gas_model) + viz_fluid.write_vtk_file( + f"multiphysics_thermally_coupled_steady_{viz_suffix}_fluid.vtu", [ + ("cv", fluid_state.cv), + ("dv", fluid_state.dv), + ("rhs", rhs[0]), + ]) + viz_wall.write_vtk_file( + f"multiphysics_thermally_coupled_steady_{viz_suffix}_wall.vtu", [ + ("temp", state[1]), + ("rhs", rhs[1]), + ]) + + fluid_cv = cv_from_temp(fluid_temp) + linf_err_fluid = max_component_norm( + dcoll, + rhs[0]/replace(fluid_cv, momentum=0*fluid_cv.momentum+1), + np.inf, + dd=dd_vol_fluid) + linf_err_wall = actx.to_numpy( + op.norm(dcoll, rhs[1], np.inf, dd=dd_vol_wall) + / op.norm(dcoll, wall_temp, np.inf, dd=dd_vol_wall)) + + assert linf_err_fluid < 1e-6 + assert linf_err_wall < 1e-6 + + # Now check accuracy/stability + + fluid_temp = fluid_func(fluid_nodes, 0) + wall_temp = wall_func(wall_nodes, 0) + + state = make_obj_array([cv_from_temp(fluid_temp), wall_temp]) + + from grudge.dt_utils import characteristic_lengthscales + h_min_fluid = actx.to_numpy( + op.nodal_min( + dcoll, dd_vol_fluid, + characteristic_lengthscales(actx, dcoll, dd=dd_vol_fluid)))[()] + h_min_wall = actx.to_numpy( + op.nodal_min( + dcoll, dd_vol_wall, + characteristic_lengthscales(actx, dcoll, dd=dd_vol_wall)))[()] + + # Set dt once for all scales + if n == scales[0]: + dt = 0.00025 * min(h_min_fluid**2, h_min_wall**2) + + heat_cfl_fluid = fluid_alpha * dt/h_min_fluid**2 + heat_cfl_wall = wall_alpha * dt/h_min_wall**2 + + print(f"{heat_cfl_fluid=}, {heat_cfl_wall=}") + assert heat_cfl_fluid < 0.05 + assert heat_cfl_wall < 0.05 + + from mirgecom.integrators import rk4_step + + t = 0 + for step in range(50): + state = rk4_step(state, t, dt, get_rhs) + t += dt + if step % 5 == 0 and visualize: + fluid_state = make_fluid_state(state[0], gas_model) + expected_fluid_temp = fluid_func(fluid_nodes, t) + expected_wall_temp = wall_func(wall_nodes, t) + rhs = get_rhs(t, state) + momentum_source = momentum_source_func(fluid_nodes, t) + viz_fluid.write_vtk_file( + "multiphysics_thermally_coupled_accuracy_" + f"{viz_suffix}_fluid_{step}.vtu", [ + ("cv", fluid_state.cv), + ("dv", fluid_state.dv), + ("expected_temp", expected_fluid_temp), + ("rhs", rhs[0]), + ("momentum_source", momentum_source), + ]) + viz_wall.write_vtk_file( + "multiphysics_thermally_coupled_accuracy_" + f"{viz_suffix}_wall_{step}.vtu", [ + ("temp", state[1]), + ("expected_temp", expected_wall_temp), + ("rhs", rhs[1]), + ]) + + fluid_state = make_fluid_state(state[0], gas_model) + fluid_temp = fluid_state.dv.temperature + wall_temp = state[1] + expected_fluid_temp = fluid_func(fluid_nodes, t) + expected_wall_temp = wall_func(wall_nodes, t) + + assert np.isfinite( + actx.to_numpy(op.norm(dcoll, fluid_temp, 2, dd=dd_vol_fluid))) + assert np.isfinite( + actx.to_numpy(op.norm(dcoll, wall_temp, 2, dd=dd_vol_wall))) + + linf_err_fluid = actx.to_numpy( + op.norm(dcoll, fluid_temp - expected_fluid_temp, np.inf, dd=dd_vol_fluid) + / op.norm(dcoll, expected_fluid_temp, np.inf, dd=dd_vol_fluid)) + linf_err_wall = actx.to_numpy( + op.norm(dcoll, wall_temp - expected_wall_temp, np.inf, dd=dd_vol_wall) + / op.norm(dcoll, expected_wall_temp, np.inf, dd=dd_vol_wall)) + eoc_rec_fluid.add_data_point(1/n, linf_err_fluid) + eoc_rec_wall.add_data_point(1/n, linf_err_wall) + + print("L^inf error (fluid):") + print(eoc_rec_fluid) + print("L^inf error (wall):") + print(eoc_rec_wall) + + assert ( + eoc_rec_fluid.order_estimate() >= order - 0.5 + or eoc_rec_fluid.max_error() < 1e-11) + assert ( + eoc_rec_wall.order_estimate() >= order - 0.5 + or eoc_rec_wall.max_error() < 1e-11) + + +if __name__ == "__main__": + import sys + if len(sys.argv) > 1: + exec(sys.argv[1]) + else: + from pytest import main + main([__file__]) diff --git a/test/test_navierstokes.py b/test/test_navierstokes.py index 6a1080b43..c1936da20 100644 --- a/test/test_navierstokes.py +++ b/test/test_navierstokes.py @@ -294,10 +294,10 @@ def get_boundaries(self): """Get the boundary condition dictionary: prescribed exact by default.""" from mirgecom.gas_model import make_fluid_state - def _boundary_state_func(discr, btag, gas_model, state_minus, time=0, + def _boundary_state_func(discr, dd_bdry, gas_model, state_minus, time=0, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(self.get_solution(x=nodes, t=time), gas_model) @@ -676,10 +676,10 @@ def test_shear_flow(actx_factory, dim, flow_direction, order): from pytools.convergence import EOCRecorder eoc_energy = EOCRecorder() - def _boundary_state_func(discr, btag, gas_model, state_minus, time=0, + def _boundary_state_func(discr, dd_bdry, gas_model, state_minus, time=0, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) boundary_cv = exact_soln(x=nodes) return make_fluid_state(boundary_cv, gas_model) @@ -932,10 +932,10 @@ def test_roy_mms(actx_factory, order, dim, u_0, v_0, w_0, a_r, a_p, a_u, logger.info(f"{source_norms=}") logger.info(f"{source_eval=}") - def _boundary_state_func(discr, btag, gas_model, state_minus, time=0, + def _boundary_state_func(discr, dd_bdry, gas_model, state_minus, time=0, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = discr.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) boundary_cv = evaluate(sym_cv, x=nodes, t=time) return make_fluid_state(boundary_cv, gas_model) diff --git a/test/test_operators.py b/test/test_operators.py index 8488efe6e..3f2d46814 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -35,6 +35,7 @@ import pymbolic as pmbl # noqa import pymbolic.primitives as prim from meshmode.mesh import BTAG_ALL +from grudge.dof_desc import as_dofdesc from mirgecom.flux import num_flux_central from mirgecom.fluid import ( make_conserved @@ -50,8 +51,9 @@ def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, int_tpair, boundaries): - return (compute_interior_flux(int_tpair) - + sum(compute_boundary_flux(btag) for btag in boundaries)) + return ( + compute_interior_flux(int_tpair) + + sum(compute_boundary_flux(as_dofdesc(bdtag)) for bdtag in boundaries)) # Box grid generator widget lifted from @majosm and slightly bent @@ -128,14 +130,14 @@ def central_flux_interior(actx, discr, int_tpair): return op.project(discr, int_tpair.dd, dd_all_faces, flux_weak) -def central_flux_boundary(actx, discr, soln_func, btag): +def central_flux_boundary(actx, discr, soln_func, dd_bdry): """Compute a central flux for boundary faces.""" - boundary_discr = discr.discr_from_dd(btag) + boundary_discr = discr.discr_from_dd(dd_bdry) bnd_nodes = actx.thaw(boundary_discr.nodes()) soln_bnd = soln_func(x_vec=bnd_nodes) - bnd_nhat = actx.thaw(discr.normal(btag)) + bnd_nhat = actx.thaw(discr.normal(dd_bdry)) from grudge.trace_pair import TracePair - bnd_tpair = TracePair(btag, interior=soln_bnd, exterior=soln_bnd) + bnd_tpair = TracePair(dd_bdry, interior=soln_bnd, exterior=soln_bnd) from arraycontext import outer flux_weak = outer(num_flux_central(bnd_tpair.int, bnd_tpair.ext), bnd_nhat) dd_all_faces = bnd_tpair.dd.with_dtag("all_faces") @@ -225,7 +227,6 @@ def sym_eval(expr, x_vec): test_data_int_tpair, boundaries) from mirgecom.operators import grad_operator - from grudge.dof_desc import as_dofdesc dd_vol = as_dofdesc("vol") dd_faces = as_dofdesc("all_faces") test_grad = grad_operator(discr, dd_vol, dd_faces, diff --git a/test/test_viscous.py b/test/test_viscous.py index 1ce44b1f0..d0873aea6 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -30,9 +30,12 @@ import pyopencl.clmath # noqa import logging import pytest # noqa +from dataclasses import replace from pytools.obj_array import make_obj_array +from meshmode.discretization.connection import FACE_RESTR_ALL from meshmode.mesh import BTAG_ALL +from grudge.dof_desc import as_dofdesc import grudge.op as op from grudge.trace_pair import interior_trace_pairs from mirgecom.discretization import create_discretization_collection @@ -161,8 +164,9 @@ def test_poiseuille_fluxes(actx_factory, order, kappa): def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, int_tpairs, boundaries): - return ((sum(compute_interior_flux(int_tpair) for int_tpair in int_tpairs)) - + sum(compute_boundary_flux(btag) for btag in boundaries)) + return ( + sum(compute_interior_flux(int_tpair) for int_tpair in int_tpairs) + + sum(compute_boundary_flux(as_dofdesc(bdtag)) for bdtag in boundaries)) from mirgecom.flux import num_flux_central @@ -173,17 +177,18 @@ def cv_flux_interior(int_tpair): dd_all_faces = int_tpair.dd.with_dtag("all_faces") return op.project(discr, int_tpair.dd, dd_all_faces, flux_weak) - def cv_flux_boundary(btag): - boundary_discr = discr.discr_from_dd(btag) + def cv_flux_boundary(dd_bdry): + boundary_discr = discr.discr_from_dd(dd_bdry) bnd_nodes = actx.thaw(boundary_discr.nodes()) cv_bnd = initializer(x_vec=bnd_nodes, eos=eos) - bnd_nhat = actx.thaw(discr.normal(btag)) + bnd_nhat = actx.thaw(discr.normal(dd_bdry)) from grudge.trace_pair import TracePair - bnd_tpair = TracePair(btag, interior=cv_bnd, exterior=cv_bnd) + bnd_tpair = TracePair(dd_bdry, interior=cv_bnd, exterior=cv_bnd) from arraycontext import outer flux_weak = outer(num_flux_central(bnd_tpair.int, bnd_tpair.ext), bnd_nhat) - dd_all_faces = bnd_tpair.dd.with_dtag("all_faces") - return op.project(discr, bnd_tpair.dd, dd_all_faces, flux_weak) + dd_all_faces = dd_bdry.with_domain_tag( + replace(dd_bdry.domain_tag, tag=FACE_RESTR_ALL)) + return op.project(discr, dd_bdry, dd_all_faces, flux_weak) for nfac in [1, 2, 4]: @@ -213,7 +218,6 @@ def inf_norm(x): cv_flux_bnd = _elbnd_flux(discr, cv_flux_interior, cv_flux_boundary, cv_int_tpairs, boundaries) from mirgecom.operators import grad_operator - from grudge.dof_desc import as_dofdesc dd_vol = as_dofdesc("vol") dd_faces = as_dofdesc("all_faces") grad_cv = grad_operator(discr, dd_vol, dd_faces, cv, cv_flux_bnd)