From 00ad037fb0a82e8c701ee3ae5723b7c2e1fec52e Mon Sep 17 00:00:00 2001 From: Timofey Luin Date: Mon, 11 Sep 2023 19:55:42 +0200 Subject: [PATCH] fix ShaBitThreadBuilder --- lightclient-circuits/src/builder.rs | 3 + .../src/committee_update_circuit.rs | 339 +++++++++--------- .../src/gadget/crypto/builder.rs | 10 +- .../src/gadget/crypto/hash2curve.rs | 2 +- .../src/gadget/crypto/sha256.rs | 2 +- .../src/gadget/crypto/sha256/builder.rs | 1 + .../src/gadget/crypto/sha256_wide.rs | 42 ++- .../src/gadget/crypto/sha256_wide/config.rs | 13 +- lightclient-circuits/src/util/common.rs | 1 + lightclient-circuits/src/util/proof.rs | 2 +- lightclient-circuits/src/witness/rotation.rs | 10 +- preprocessor/scripts/generateInputData.ts | 5 + test_data/committee_pubkeys.json | 1 + 13 files changed, 224 insertions(+), 207 deletions(-) create mode 100644 test_data/committee_pubkeys.json diff --git a/lightclient-circuits/src/builder.rs b/lightclient-circuits/src/builder.rs index dbff7c6a..ac4d98ee 100644 --- a/lightclient-circuits/src/builder.rs +++ b/lightclient-circuits/src/builder.rs @@ -7,6 +7,7 @@ use halo2_proofs::{ circuit::{Layouter, SimpleFloorPlanner}, plonk::{Circuit, Column, ConstraintSystem, Error, Instance}, }; +use log::debug; use crate::{ gadget::crypto::{SHAConfig, ShaCircuitBuilder, ShaThreadBuilder}, @@ -97,6 +98,7 @@ impl> Circuit ) -> Result<(), Error> { // we later `take` the builder, so we need to save this value let witness_gen_only = self.inner.builder.borrow().witness_gen_only(); + let assigned_advices = self.inner.sub_synthesize(&config.sha, &mut layouter)?; if !witness_gen_only { @@ -120,6 +122,7 @@ impl> snark_verifier_sdk::CircuitE fn num_instance(&self) -> Vec { vec![self.instance_count()] } + fn instances(&self) -> Vec> { vec![self.instance()] } diff --git a/lightclient-circuits/src/committee_update_circuit.rs b/lightclient-circuits/src/committee_update_circuit.rs index e3a1229b..2d03609c 100644 --- a/lightclient-circuits/src/committee_update_circuit.rs +++ b/lightclient-circuits/src/committee_update_circuit.rs @@ -14,7 +14,7 @@ use crate::{ builder::Eth2CircuitBuilder, gadget::crypto::{ calculate_ysquared, Fp2Point, FpPoint, G1Chip, G1Point, G2Chip, G2Point, HashInstructions, - HashToCurveCache, HashToCurveChip, Sha256ChipWide, ShaBitThreadBuilder, + HashToCurveCache, HashToCurveChip, Sha256ChipWide, ShaBitThreadBuilder, ShaCircuitBuilder, }, poseidon::{fq_array_poseidon, poseidon_sponge}, ssz_merkle::ssz_merkleize_chunks, @@ -72,43 +72,12 @@ pub struct CommitteeUpdateCircuit { } impl CommitteeUpdateCircuit { - // fn new_from_state(builder: RefCell>, state: &witness::SyncState) -> Self { - // let pubkeys_y = state - // .sync_committee - // .iter() - // .map(|v| { - // let g1_affine = G1Affine::from_uncompressed( - // &v.pubkey_uncompressed.as_slice().try_into().unwrap(), - // ) - // .unwrap(); - - // g1_affine.y - // }) - // .collect_vec(); - // let sha256_offset = 0; - // Self { - // builder, - // pubkeys_compressed: state - // .sync_committee - // .iter() - // .cloned() - // .map(|v| v.pubkey) - // .collect_vec(), - // pubkeys_y, - // dry_run: false, - // sha256_offset, - // _spec: PhantomData, - // } - // } - fn synthesize( &self, thread_pool: &mut ShaBitThreadBuilder, range: &RangeChip, args: &witness::CommitteeRotationArgs, ) -> Result>, Error> { - let mut first_pass = halo2_base::SKIP_FIRST_PASS; - let fp_chip = FpChip::::new(range, G2::LIMB_BITS, G2::NUM_LIMBS); let fp2_chip = Fp2Chip::::new(&fp_chip); let g1_chip = EccChip::new(fp2_chip.fp_chip()); @@ -198,8 +167,9 @@ impl CommitteeUpdateCircuit { hasher: &impl HashInstructions, compressed_encodings: I, ) -> Result>, Error> { - let mut pubkeys_hashes = compressed_encodings + let mut pubkeys_hashes: Vec>> = compressed_encodings .into_iter() + .take(1) .map(|bytes| { let input = bytes .into_iter() @@ -230,13 +200,14 @@ impl AppCircuitExt for CommitteeUpdateCircuit let mut thread_pool = ShaBitThreadBuilder::keygen(); let assigned_instances = circuit.synthesize(&mut thread_pool, &range, &args).unwrap(); - let config = thread_pool.config(k, Some(109)); let params = gen_srs(k as u32); let circuit = Eth2CircuitBuilder::keygen(assigned_instances, thread_pool); - let pk = gen_pkey(|| "sync_step", ¶ms, out, &circuit).unwrap(); + circuit.config(k, None); + + let pk = gen_pkey(|| "committee_update", ¶ms, out, &circuit).unwrap(); let break_points = circuit.break_points(); @@ -244,137 +215,167 @@ impl AppCircuitExt for CommitteeUpdateCircuit } } -// #[cfg(test)] -// mod tests { -// use std::{ -// env::{set_var, var}, -// fs, -// }; - -// use crate::{ -// table::Sha256Table, -// util::{full_prover, full_verifier, gen_pkey}, -// witness::{SyncState, Validator}, -// }; - -// use super::*; -// use ark_std::{end_timer, start_timer}; -// use eth_types::Test; -// use ethereum_consensus::builder; -// use halo2_base::{ -// gates::{ -// builder::{CircuitBuilderStage, FlexGateConfigParams}, -// flex_gate::GateStrategy, -// range::RangeStrategy, -// }, -// utils::fs::gen_srs, -// }; -// use halo2_proofs::{ -// circuit::SimpleFloorPlanner, -// dev::MockProver, -// halo2curves::bn256::Fr, -// plonk::{keygen_pk, keygen_vk, Circuit, FloorPlanner}, -// poly::{commitment::Params, kzg::commitment::ParamsKZG}, -// }; -// use halo2curves::{bls12_381::G1Affine, bn256::Bn256}; -// use pasta_curves::group::UncompressedEncoding; -// use rand::rngs::OsRng; -// use rayon::iter::ParallelIterator; -// use rayon::prelude::{IndexedParallelIterator, IntoParallelIterator}; -// use snark_verifier_sdk::evm::{evm_verify, gen_evm_proof_shplonk, gen_evm_verifier_shplonk}; -// use snark_verifier_sdk::{ -// gen_pk, -// halo2::{ -// aggregation::{AggregationCircuit, AggregationConfigParams}, -// gen_proof_shplonk, gen_snark_shplonk, -// }, -// CircuitExt, Snark, SHPLONK, -// }; - -// fn get_circuit_with_data(k: usize) -> CommitteeUpdateCircuit { -// let builder = GateThreadBuilder::new(false); -// let state: SyncState = -// serde_json::from_slice(&fs::read("../test_data/sync_state.json").unwrap()).unwrap(); - -// let _ = CommitteeUpdateCircuit::::parametrize(k); - -// let builder = RefCell::from(builder); -// CommitteeUpdateCircuit::new_from_state(builder, &state) -// } - -// fn gen_application_snark(k: usize, params: &ParamsKZG) -> Snark { -// let circuit = get_circuit_with_data(k); - -// let pk = gen_pk(params, &circuit, Some(Path::new(&format!("app_{}.pk", k)))); -// gen_snark_shplonk(params, &pk, circuit, None::) -// } - -// #[test] -// fn test_committee_update_circuit() { -// let k = 18; -// let circuit = get_circuit_with_data(k); - -// let timer = start_timer!(|| "committee_update circuit mock prover"); -// let prover = MockProver::::run(k as u32, &circuit, vec![]).unwrap(); -// prover.assert_satisfied_par(); -// end_timer!(timer); -// } - -// #[test] -// fn test_committee_update_proofgen() { -// let k = 18; -// let circuit = get_circuit_with_data(k); - -// let params = gen_srs(k as u32); - -// let pkey = gen_pkey(|| "committee_update", ¶ms, None, circuit.clone()).unwrap(); - -// let public_inputs = circuit.instances(); -// let proof = full_prover(¶ms, &pkey, circuit, public_inputs.clone()); -// let timer = start_timer!(|| "committee_update circuit full verifier"); -// assert!(full_verifier(¶ms, pkey.get_vk(), proof, public_inputs)); -// end_timer!(timer); -// } - -// #[test] -// fn circuit_agg() { -// let path = "./config/committee_update_aggregation.json"; -// let k = 17; -// let circuit = get_circuit_with_data(k); -// let params_app = gen_srs(k as u32); -// let snark = gen_application_snark(k, ¶ms_app); - -// let agg_config = AggregationConfigParams::from_path(path); - -// let params = gen_srs(agg_config.degree); -// println!("agg_params k: {:?}", params.k()); -// let lookup_bits = params.k() as usize - 1; - -// let agg_circuit = AggregationCircuit::keygen::(¶ms, iter::once(snark.clone())); - -// let start0 = start_timer!(|| "Aggregation Circuit gen vk & pk"); -// let pk = gen_pk(¶ms, &agg_circuit, None); -// end_timer!(start0); -// let break_points = agg_circuit.break_points(); -// let agg_circuit = AggregationCircuit::new::( -// CircuitBuilderStage::Prover, -// Some(break_points.clone()), -// lookup_bits, -// ¶ms, -// iter::once(snark), -// ); - -// let num_instances = agg_circuit.num_instance(); -// let instances = agg_circuit.instances(); -// let proof = gen_evm_proof_shplonk(¶ms, &pk, agg_circuit, instances.clone()); -// println!("proof size: {}", proof.len()); -// let deployment_code = gen_evm_verifier_shplonk::( -// ¶ms, -// pk.get_vk(), -// num_instances, -// None, -// ); -// println!("deployment_code size: {}", deployment_code.len()); -// evm_verify(deployment_code, instances, proof); -// } -// } +#[cfg(test)] +mod tests { + use std::{ + env::{set_var, var}, + fs, + }; + + use crate::{ + gadget::crypto::constant_randomness, + util::{full_prover, full_verifier, gen_pkey}, + witness::{CommitteeRotationArgs, SyncStepArgs, Validator}, + }; + + use super::*; + use ark_std::{end_timer, start_timer}; + use eth_types::Test; + use ethereum_consensus::builder; + use halo2_base::{ + gates::{ + builder::{CircuitBuilderStage, FlexGateConfigParams}, + flex_gate::GateStrategy, + range::RangeStrategy, + }, + utils::fs::gen_srs, + }; + use halo2_proofs::{ + circuit::SimpleFloorPlanner, + dev::MockProver, + halo2curves::bn256::Fr, + plonk::{keygen_pk, keygen_vk, Circuit, FloorPlanner}, + poly::{commitment::Params, kzg::commitment::ParamsKZG}, + }; + use halo2curves::{bls12_381::G1Affine, bn256::Bn256}; + use pasta_curves::group::UncompressedEncoding; + use rand::rngs::OsRng; + use rayon::iter::ParallelIterator; + use rayon::prelude::{IndexedParallelIterator, IntoParallelIterator}; + use snark_verifier_sdk::evm::{evm_verify, gen_evm_proof_shplonk, gen_evm_verifier_shplonk}; + use snark_verifier_sdk::{ + gen_pk, + halo2::{ + aggregation::{AggregationCircuit, AggregationConfigParams}, + gen_proof_shplonk, gen_snark_shplonk, + }, + CircuitExt, Snark, SHPLONK, + }; + + fn load_circuit_with_data( + thread_pool: &mut ShaBitThreadBuilder, + k: usize, + ) -> Vec> { + let args = { + let pubkeys_compressed: Vec> = + serde_json::from_slice(&fs::read("../test_data/committee_pubkeys.json").unwrap()) + .unwrap(); + CommitteeRotationArgs { + pubkeys_compressed, + randomness: constant_randomness(), + _spec: PhantomData, + } + }; + + let circuit = CommitteeUpdateCircuit::::default(); + let range = RangeChip::::new(RangeStrategy::Vertical, 8); + + circuit.synthesize(thread_pool, &range, &args).unwrap(); + + let config = thread_pool.config(k, None); + set_var("LOOKUP_BITS", (config.k - 1).to_string()); + println!("params used: {:?}", config); + + let instance = vec![]; + + instance + } + + fn gen_application_snark( + k: usize, + params: &ParamsKZG, + pk: &ProvingKey, + break_points: MultiPhaseThreadBreakPoints, + ) -> Snark { + let mut thread_pool = ShaBitThreadBuilder::prover(); + + let assigned_instances = load_circuit_with_data(&mut thread_pool, k); + + let circuit = Eth2CircuitBuilder::prover(assigned_instances, thread_pool, break_points); + + gen_snark_shplonk(params, pk, circuit, None::) + } + + #[test] + fn test_committee_update_circuit() { + const K: usize = 18; + let mut builder = ShaBitThreadBuilder::mock(); + let assigned_instances = load_circuit_with_data(&mut builder, K); + + let circuit = Eth2CircuitBuilder::mock(assigned_instances, builder); + + let timer = start_timer!(|| "committee_update mock prover"); + let prover = MockProver::::run(K as u32, &circuit, circuit.instances()).unwrap(); + prover.assert_satisfied_par(); + end_timer!(timer); + } + + #[test] + fn test_committee_update_proofgen() { + const K: usize = 18; + + let (params, pk, break_points) = CommitteeUpdateCircuit::::setup(K, None); + + let mut builder = ShaBitThreadBuilder::prover(); + let assigned_instances = load_circuit_with_data(&mut builder, K); + + let circuit = Eth2CircuitBuilder::prover(assigned_instances, builder, break_points); + + let instances = circuit.instances(); + let proof = full_prover(¶ms, &pk, circuit, instances.clone()); + + assert!(full_verifier(¶ms, pk.get_vk(), proof, instances)) + } + + #[test] + fn circuit_agg() { + let path = "./config/committee_update_aggregation.json"; + const K: usize = 17; + let (params_app, pk_app, break_points) = CommitteeUpdateCircuit::::setup(K, None); + + let snark = gen_application_snark(K, ¶ms_app, &pk_app, break_points); + + let agg_config = AggregationConfigParams::from_path(path); + + let params = gen_srs(agg_config.degree); + println!("agg_params k: {:?}", params.k()); + let lookup_bits = params.k() as usize - 1; + + let agg_circuit = AggregationCircuit::keygen::(¶ms, iter::once(snark.clone())); + + let start0 = start_timer!(|| "Aggregation Circuit gen vk & pk"); + let pk = gen_pk(¶ms, &agg_circuit, None); + end_timer!(start0); + let break_points = agg_circuit.break_points(); + let agg_circuit = AggregationCircuit::new::( + CircuitBuilderStage::Prover, + Some(break_points), + lookup_bits, + ¶ms, + iter::once(snark), + ); + + let num_instances = agg_circuit.num_instance(); + let instances = agg_circuit.instances(); + let proof = gen_evm_proof_shplonk(¶ms, &pk, agg_circuit, instances.clone()); + println!("proof size: {}", proof.len()); + let deployment_code = gen_evm_verifier_shplonk::( + ¶ms, + pk.get_vk(), + num_instances, + None, + ); + println!("deployment_code size: {}", deployment_code.len()); + evm_verify(deployment_code, instances, proof); + } +} diff --git a/lightclient-circuits/src/gadget/crypto/builder.rs b/lightclient-circuits/src/gadget/crypto/builder.rs index b99bd8c6..39466f0a 100644 --- a/lightclient-circuits/src/gadget/crypto/builder.rs +++ b/lightclient-circuits/src/gadget/crypto/builder.rs @@ -26,7 +26,7 @@ use crate::{ use super::sha256::{assign_threads_sha, SpreadConfig, FIRST_PHASE}; #[derive(Debug, Clone)] -pub struct SHAConfig = SpreadConfig> { +pub struct SHAConfig> { pub compression: CustomConfig, pub range: RangeConfig, } @@ -50,7 +50,7 @@ impl> SHAConfig = ShaThreadBuilder> { +pub struct ShaCircuitBuilder> { pub builder: RefCell, pub break_points: RefCell, // `RefCell` allows the circuit to record break points in a keygen call of `synthesize` for use in later witness gen _f: PhantomData, @@ -149,7 +149,9 @@ impl> ShaCircuitBuilder> Circuit for ShaCircuitBuilder { +impl> Circuit + for ShaCircuitBuilder +{ type Config = SHAConfig; type FloorPlanner = SimpleFloorPlanner; @@ -168,7 +170,7 @@ impl> Circuit for ShaCircuitBui config: Self::Config, mut layouter: impl Layouter, ) -> Result<(), Error> { - self.sub_synthesize(&config, &mut layouter); + self.sub_synthesize(&config, &mut layouter)?; Ok(()) } } diff --git a/lightclient-circuits/src/gadget/crypto/hash2curve.rs b/lightclient-circuits/src/gadget/crypto/hash2curve.rs index 65026204..6e85e92b 100644 --- a/lightclient-circuits/src/gadget/crypto/hash2curve.rs +++ b/lightclient-circuits/src/gadget/crypto/hash2curve.rs @@ -654,7 +654,7 @@ mod test { k: usize, mut builder: ShaThreadBuilder, input_vector: &[Vec], - ) -> Result, Error> { + ) -> Result>, Error> { let range = RangeChip::default(8); let sha256 = Sha256Chip::new(&range); diff --git a/lightclient-circuits/src/gadget/crypto/sha256.rs b/lightclient-circuits/src/gadget/crypto/sha256.rs index 19f6a89a..2c0958ef 100644 --- a/lightclient-circuits/src/gadget/crypto/sha256.rs +++ b/lightclient-circuits/src/gadget/crypto/sha256.rs @@ -235,7 +235,7 @@ mod test { k: usize, mut builder: ShaThreadBuilder, input_vector: &[Vec], - ) -> Result, Error> { + ) -> Result>, Error> { let range = RangeChip::default(8); let sha256 = Sha256Chip::new(&range); diff --git a/lightclient-circuits/src/gadget/crypto/sha256/builder.rs b/lightclient-circuits/src/gadget/crypto/sha256/builder.rs index 24aedadf..171aa54a 100644 --- a/lightclient-circuits/src/gadget/crypto/sha256/builder.rs +++ b/lightclient-circuits/src/gadget/crypto/sha256/builder.rs @@ -137,6 +137,7 @@ impl ThreadBuilderBase for ShaThreadBuilder { region: &mut Region, break_points: &mut MultiPhaseThreadBreakPoints, ) -> Result<(), Error> { + let break_points_gate = mem::take(&mut break_points[FIRST_PHASE]); // warning: we currently take all contexts from phase 0, which means you can't read the values // from these contexts later in phase 1. If we want to read, should clone here diff --git a/lightclient-circuits/src/gadget/crypto/sha256_wide.rs b/lightclient-circuits/src/gadget/crypto/sha256_wide.rs index 45e07407..1798db7e 100644 --- a/lightclient-circuits/src/gadget/crypto/sha256_wide.rs +++ b/lightclient-circuits/src/gadget/crypto/sha256_wide.rs @@ -85,7 +85,7 @@ impl<'a, F: Field> HashInstructions> for Sha256ChipWid let mut assigned_rounds = vec![]; let assigned_output = self.load_digest::(thread_pool, binary_input, &mut assigned_rounds)?; - + let one_round_size = Self::BLOCK_SIZE; let num_round = 1; @@ -165,10 +165,7 @@ impl<'a, F: Field> HashInstructions> for Sha256ChipWid impl<'a, F: Field> Sha256ChipWide<'a, F> { pub fn new(range: &'a RangeChip, randomness: F) -> Self { - Self { - range, - randomness, - } + Self { range, randomness } } pub fn load_digest( @@ -244,14 +241,13 @@ impl<'a, F: Field> Sha256ChipWide<'a, F> { } } - #[cfg(test)] mod test { use std::env::var; use std::vec; use std::{cell::RefCell, marker::PhantomData}; - use crate::gadget::crypto::{ShaCircuitBuilder, constant_randomness}; + use crate::gadget::crypto::{constant_randomness, ShaCircuitBuilder}; use crate::util::{full_prover, full_verifier, gen_pkey, Challenges, IntoWitness}; use super::*; @@ -274,18 +270,19 @@ mod test { fn test_circuit( k: usize, - mut builder: ShaBitThreadBuilder, + builder: &mut ShaBitThreadBuilder, input_vector: &[Vec], - ) -> Result>, Error> { + ) -> Result<(), Error> { let range = RangeChip::default(8); let sha256 = Sha256ChipWide::new(&range, constant_randomness()); for input in input_vector { - let _ = sha256.digest::<64>(&mut builder, input.as_slice().into_witness(), false)?; + let _ = sha256.digest::<64>(builder, input.as_slice().into_witness(), false)?; } builder.config(k, None); - Ok(ShaCircuitBuilder::mock(builder)) + + Ok(()) } #[test] @@ -294,11 +291,28 @@ mod test { let test_input = vec![0u8; 64]; - let builder = ShaBitThreadBuilder::::mock(); + let mut builder = ShaBitThreadBuilder::::mock(); - let circuit = test_circuit(k, builder, &[test_input]); - let prover = MockProver::run(k as u32, &circuit.unwrap(), vec![]).unwrap(); + test_circuit(k, &mut builder, &[test_input]).unwrap(); + + let circuit = ShaCircuitBuilder::mock(builder); + + let prover = MockProver::run(k as u32, &circuit, vec![]).unwrap(); prover.assert_satisfied_par(); } + + #[test] + fn test_sha256_wide_params_gen() { + let k = 10; + let test_input = vec![1u8; 64]; + let mut builder = ShaBitThreadBuilder::::keygen(); + + test_circuit(k, &mut builder, &[test_input]).unwrap(); + + let circuit = ShaCircuitBuilder::keygen(builder); + + let params = gen_srs(k as u32); + let pk = gen_pkey(|| "sha256_wide_chip", ¶ms, None, &circuit).unwrap(); + } } diff --git a/lightclient-circuits/src/gadget/crypto/sha256_wide/config.rs b/lightclient-circuits/src/gadget/crypto/sha256_wide/config.rs index fb5ca21c..4063785f 100644 --- a/lightclient-circuits/src/gadget/crypto/sha256_wide/config.rs +++ b/lightclient-circuits/src/gadget/crypto/sha256_wide/config.rs @@ -824,13 +824,8 @@ impl Sha256BitConfig, Context> { ("h_e", &config.h_e, &self.h_e), ] { for (offset, &val) in ctx.advice.iter().enumerate() { - let value = if use_unknown { - Value::unknown() - } else { - Value::known(val) - }; let cell = region - .assign_fixed(|| name, *column, offset, || value)? + .assign_fixed(|| name, *column, offset, || Value::known(val))? .cell(); if let Some(assigned_advices) = assigned_advices.as_mut() { @@ -904,7 +899,9 @@ impl Sha256BitConfig, Context> { let cell = match region.assign_advice(|| name, *column, offset, || value) { Ok(cell) => cell, - Err(e) => return Err(e), + Err(e) => { + return Err(e); + } } .cell(); @@ -913,7 +910,7 @@ impl Sha256BitConfig, Context> { } } - Ok(()) + Ok::<_, Error>(()) }) .collect::, _>>()?; diff --git a/lightclient-circuits/src/util/common.rs b/lightclient-circuits/src/util/common.rs index 46b7258d..d8f3a11f 100644 --- a/lightclient-circuits/src/util/common.rs +++ b/lightclient-circuits/src/util/common.rs @@ -152,6 +152,7 @@ pub trait ThreadBuilderBase: Clone + Sized { } fn prover() -> Self { + println!("prver ThreadBuilderBase"); Self::new(true) } diff --git a/lightclient-circuits/src/util/proof.rs b/lightclient-circuits/src/util/proof.rs index 12e22f50..3cbb5eab 100644 --- a/lightclient-circuits/src/util/proof.rs +++ b/lightclient-circuits/src/util/proof.rs @@ -83,7 +83,7 @@ pub fn gen_pkey>( } } else { ( - start_timer!(|| "Loading vkey"), + start_timer!(|| "Generating vkey"), keygen_vk(params, circuit).expect("vk generation should not fail"), ) }; diff --git a/lightclient-circuits/src/witness/rotation.rs b/lightclient-circuits/src/witness/rotation.rs index dfe111d0..e39f8d6e 100644 --- a/lightclient-circuits/src/witness/rotation.rs +++ b/lightclient-circuits/src/witness/rotation.rs @@ -22,8 +22,6 @@ use ssz_rs::Node; pub struct CommitteeRotationArgs { pub pubkeys_compressed: Vec>, - pub pubkeys_y: Vec, - pub randomness: F, pub _spec: PhantomData, @@ -32,17 +30,11 @@ pub struct CommitteeRotationArgs { impl Default for CommitteeRotationArgs { fn default() -> Self { let dummy_x_bytes = iter::once(192).pad_using(48, |_| 0).rev().collect(); - let dymmy_y = Fq::from((G1::B as f64).sqrt() as u64); - - let pubkeys_y = iter::repeat(dymmy_y) - .take(S::SYNC_COMMITTEE_SIZE) - .collect_vec(); - + Self { pubkeys_compressed: iter::repeat(dummy_x_bytes) .take(S::SYNC_COMMITTEE_SIZE) .collect_vec(), - pubkeys_y, randomness: constant_randomness(), _spec: PhantomData, } diff --git a/preprocessor/scripts/generateInputData.ts b/preprocessor/scripts/generateInputData.ts index bea4ee66..3bc8dfe6 100644 --- a/preprocessor/scripts/generateInputData.ts +++ b/preprocessor/scripts/generateInputData.ts @@ -183,3 +183,8 @@ fs.writeFileSync( `../test_data/sync_step.json`, serialize(input) ); + +fs.writeFileSync( + `../test_data/committee_pubkeys.json`, + serialize( Array.from(beaconState.validators.entries()).map(([i, _]) => Array.from(g1PointToBytesLE(pubKeyPoints[i], true)))) +); diff --git a/test_data/committee_pubkeys.json b/test_data/committee_pubkeys.json new file mode 100644 index 00000000..8017f9b2 --- /dev/null +++ b/test_data/committee_pubkeys.json @@ -0,0 +1 @@ +[[245,241,81,229,47,30,138,91,9,228,198,240,178,95,177,52,99,212,66,112,159,33,168,79,152,220,183,106,121,83,170,82,37,193,46,77,213,36,169,95,155,232,223,223,160,98,28,130],[8,222,219,53,149,240,234,115,131,225,1,231,113,165,54,70,71,139,127,73,101,162,160,171,150,20,87,5,41,131,40,49,74,20,157,1,136,30,205,172,78,194,146,210,69,167,202,134],[192,86,238,207,62,64,21,118,136,174,125,174,174,219,186,172,27,42,223,103,247,201,201,197,85,224,165,11,123,19,26,41,139,15,5,90,106,23,123,249,127,205,54,172,66,136,254,152],[18,72,135,107,133,99,179,171,126,20,141,239,51,111,236,157,28,141,123,206,165,148,198,21,226,239,214,6,173,159,68,98,71,16,10,19,56,8,52,50,45,22,111,17,159,70,250,168],[162,154,132,214,70,167,209,231,90,35,156,21,205,83,27,185,213,37,124,107,78,21,99,207,42,65,155,152,236,8,34,123,182,230,5,204,243,127,7,200,137,60,1,41,227,110,102,145],[87,207,218,247,29,124,175,174,113,107,105,179,150,124,28,113,14,76,86,84,147,4,225,88,187,179,129,46,141,68,22,132,166,124,198,4,238,234,51,38,32,157,204,238,191,99,71,128],[82,86,63,36,217,202,50,146,218,52,177,158,176,34,4,37,116,158,219,100,128,70,41,198,145,54,28,30,150,50,69,86,231,39,221,199,241,129,252,246,85,65,111,245,26,155,113,167],[238,112,71,182,174,164,77,101,234,245,172,34,228,172,230,225,15,29,197,197,6,211,152,127,213,57,150,218,95,69,185,94,72,123,29,241,10,33,191,71,244,59,113,57,160,105,64,181],[178,243,83,234,179,46,225,215,96,190,234,118,246,12,68,56,101,197,28,119,30,209,83,87,175,108,39,8,47,109,250,110,203,25,88,111,157,45,60,9,37,193,70,197,32,94,6,149],[225,155,253,88,194,98,129,13,30,246,100,101,220,131,198,25,61,237,227,11,224,152,167,98,78,165,124,144,188,43,252,193,147,65,1,51,49,239,124,110,37,114,87,2,80,24,190,170],[168,135,178,1,104,184,1,99,25,134,238,3,219,89,154,255,90,61,38,206,7,67,120,211,23,214,46,11,81,40,126,131,254,126,114,156,246,125,143,176,242,100,106,103,235,243,227,171],[12,216,153,162,127,196,36,165,71,96,109,153,17,157,14,235,21,147,35,247,120,114,237,137,249,141,245,17,30,193,189,119,251,207,67,236,121,56,192,10,128,190,95,225,213,206,116,138],[246,30,57,239,188,200,223,241,34,33,28,226,5,174,210,6,221,34,157,205,143,41,19,197,61,122,84,109,76,4,40,94,170,165,230,27,73,150,183,231,18,4,222,17,37,71,45,143],[58,66,169,60,18,247,11,189,107,192,36,165,175,223,84,206,165,70,151,74,143,39,164,145,43,152,6,232,38,149,115,22,164,83,248,199,75,98,79,250,99,174,35,33,187,125,136,168],[142,35,59,46,82,209,193,200,96,127,156,40,215,137,143,154,67,204,72,238,140,109,65,62,25,146,52,57,67,114,144,5,108,238,163,83,118,86,145,40,18,208,201,15,48,78,172,153],[182,76,71,221,10,120,106,141,204,197,240,189,156,187,68,236,213,226,11,87,210,149,102,142,50,31,122,126,115,50,86,3,26,183,183,48,138,161,90,114,217,179,183,221,184,49,255,140],[137,138,120,52,80,223,24,209,19,160,50,135,131,68,221,118,177,175,49,127,70,191,68,100,14,243,30,141,220,81,7,245,166,115,140,76,127,53,30,176,147,218,2,124,22,231,35,171],[91,202,141,223,171,75,240,247,167,105,245,1,162,244,135,221,119,155,133,201,79,142,3,63,245,60,152,151,215,17,177,46,77,2,205,231,139,204,223,95,62,97,72,115,154,19,121,175],[201,58,199,110,106,180,50,111,177,144,163,81,231,183,237,216,123,84,72,53,130,137,147,25,50,227,209,223,226,112,108,229,237,194,142,76,255,204,0,163,189,72,243,34,77,60,215,131],[24,29,157,223,12,89,110,140,99,27,36,222,247,88,7,240,241,167,76,185,203,135,105,159,132,119,8,3,210,189,197,95,240,175,237,241,242,28,110,89,16,49,95,255,117,2,72,171],[244,124,226,76,221,142,61,53,43,60,26,112,250,16,105,89,168,10,240,19,89,130,159,182,200,174,215,231,153,233,173,18,12,65,57,202,1,213,23,103,122,57,116,130,214,68,99,163],[58,243,203,92,56,208,139,22,48,228,97,207,17,246,239,137,50,221,19,106,181,102,226,84,85,2,170,61,60,1,201,229,147,86,137,87,121,113,43,69,139,33,49,167,14,42,205,145],[133,173,102,155,39,237,32,70,71,83,221,124,229,8,230,17,187,70,44,202,139,20,226,147,17,60,183,203,247,186,19,93,252,132,137,38,233,33,60,84,168,156,15,137,199,90,204,152],[198,47,83,19,224,43,18,220,129,12,114,50,47,178,118,193,237,181,249,140,113,33,159,238,117,74,212,117,135,228,210,253,103,218,86,77,22,37,140,178,33,10,135,172,17,89,222,146],[77,221,202,37,130,188,128,160,214,16,26,226,166,116,170,190,169,132,73,129,173,102,24,141,102,95,246,76,106,35,243,56,82,208,57,140,139,201,162,173,146,240,219,55,133,154,191,136],[183,61,63,70,118,65,163,220,169,216,10,232,180,9,10,118,156,31,43,225,137,67,125,177,79,103,119,223,172,183,47,7,149,97,120,73,81,119,22,195,175,162,72,117,117,92,219,160],[141,101,19,41,119,39,5,223,238,60,19,94,6,27,137,171,236,228,14,146,208,154,63,92,72,94,90,26,5,31,150,201,68,205,107,5,255,18,198,170,106,227,235,239,179,57,133,181],[170,212,32,140,29,67,176,155,199,37,127,93,1,73,164,119,254,164,109,181,166,219,233,148,42,212,87,184,0,146,81,195,110,166,136,230,2,1,163,32,39,231,231,183,230,189,63,138],[169,128,3,54,175,183,160,197,120,1,168,181,223,166,5,48,0,50,106,38,239,92,255,84,22,206,158,82,102,70,36,113,40,223,179,206,197,103,162,66,145,230,101,85,74,133,85,137],[46,169,218,149,131,147,89,213,196,98,214,84,145,81,255,32,95,175,37,19,12,204,99,126,235,115,174,199,239,41,101,168,142,12,42,170,223,202,225,135,218,152,135,198,141,214,34,149],[103,3,222,238,88,158,181,138,56,34,34,205,77,130,92,243,172,162,236,111,200,38,32,229,232,49,185,241,45,167,254,138,102,128,194,237,185,52,219,17,124,107,81,187,242,189,8,176],[58,130,151,168,254,195,61,86,71,107,61,227,225,33,86,99,61,152,186,73,229,252,34,221,33,128,95,253,119,90,197,27,176,103,187,23,110,222,135,27,191,51,244,250,162,134,143,176],[1,9,112,120,119,93,15,143,144,94,129,212,18,46,170,91,57,236,161,55,44,248,234,223,114,69,219,118,7,158,47,97,65,198,141,110,126,194,16,54,148,104,234,3,187,156,190,178],[30,20,60,203,234,250,64,185,239,253,106,150,66,13,151,169,158,93,151,9,165,106,158,101,85,111,154,158,152,4,17,177,43,175,221,174,19,17,132,105,83,107,173,152,152,140,73,132],[142,188,211,138,96,251,209,54,171,171,110,181,147,104,57,180,151,0,253,156,55,163,106,184,242,59,83,124,54,231,133,50,77,49,210,184,47,100,135,45,215,48,216,34,148,8,63,132],[229,96,237,160,95,194,59,34,142,111,196,141,176,58,254,28,149,136,8,152,106,78,113,103,157,110,20,186,26,240,41,21,220,149,117,185,233,220,37,56,129,194,201,95,188,206,250,152],[188,171,89,151,203,193,26,33,16,6,19,106,34,71,177,84,119,95,127,106,48,73,218,192,125,229,169,32,124,173,62,107,150,59,178,16,247,158,188,101,166,215,121,126,216,126,32,184],[229,30,244,90,216,24,179,86,183,223,30,154,43,102,241,106,183,101,253,93,143,78,136,51,198,11,212,60,203,139,200,4,158,101,23,227,149,167,205,36,159,82,213,202,130,177,143,131],[251,13,229,251,182,137,108,26,144,40,136,216,107,113,255,40,66,59,5,70,120,175,234,193,177,93,136,0,49,229,38,71,20,105,205,132,204,107,175,92,164,74,166,84,87,118,224,174],[20,32,209,181,25,139,231,159,26,78,79,232,231,170,132,11,219,214,1,100,237,26,46,42,165,121,7,195,3,76,168,94,217,14,93,203,156,63,199,114,63,174,120,11,215,18,122,174],[43,21,154,132,45,163,153,180,7,119,181,227,80,17,81,151,174,31,95,157,104,186,255,232,188,46,108,187,79,0,163,85,238,180,146,17,141,81,124,241,33,168,112,111,174,89,137,179],[178,116,219,167,249,31,253,107,125,87,172,79,243,207,93,175,53,183,76,177,170,63,75,24,29,53,193,24,225,220,159,4,153,159,186,100,250,18,114,129,107,129,220,255,252,140,75,174],[133,104,172,220,246,17,202,91,28,27,20,47,142,100,156,191,42,170,18,177,176,147,181,91,251,97,181,125,251,223,1,73,9,202,24,91,125,174,213,209,197,252,227,208,199,197,157,151],[118,47,163,72,217,163,186,67,72,4,127,8,52,86,130,134,169,110,62,25,152,178,199,249,253,23,95,102,98,100,239,156,132,123,28,39,183,13,100,29,82,68,19,59,249,22,227,132],[237,251,142,235,116,194,193,166,203,51,171,35,5,137,128,99,17,171,135,48,46,197,23,21,216,236,221,201,50,121,36,157,75,143,59,6,142,28,148,101,186,196,143,77,18,90,249,142],[13,225,119,45,52,45,40,247,191,109,158,128,86,147,9,250,232,236,34,54,43,198,165,17,51,225,149,67,108,181,214,6,196,14,211,170,81,59,85,208,29,14,246,92,134,249,48,153],[175,58,162,143,12,142,168,19,205,231,183,86,211,3,56,229,122,207,90,60,156,178,154,137,10,195,69,252,229,31,205,92,119,78,123,50,22,9,253,184,244,120,78,202,13,210,170,173],[174,56,128,0,13,246,82,243,45,18,89,246,47,243,103,13,183,146,110,169,55,127,82,96,35,66,129,69,233,191,184,70,13,41,217,99,238,73,228,131,50,26,211,218,19,19,209,140],[194,35,77,99,188,157,130,83,243,206,151,194,107,96,115,202,242,53,231,222,85,60,245,111,137,109,178,78,51,224,23,150,194,177,82,7,57,251,138,85,15,165,53,115,85,78,20,162],[209,121,169,46,112,31,107,199,75,96,95,214,163,0,183,10,168,194,165,46,195,49,25,91,33,143,154,102,35,60,64,242,196,199,250,215,248,222,177,21,69,42,210,73,136,129,107,165],[133,48,198,224,79,198,187,16,57,197,216,237,186,65,199,104,220,32,231,201,12,7,161,21,240,194,148,67,201,69,158,237,105,17,16,229,5,24,187,70,239,20,66,238,180,208,230,153],[48,10,5,172,15,124,185,182,86,228,152,89,0,27,189,188,166,195,193,108,92,22,45,116,203,153,10,208,212,63,96,174,20,72,118,47,230,128,32,121,102,8,13,212,42,68,228,148],[116,148,183,64,167,230,245,2,201,75,192,123,222,84,190,122,91,80,211,210,110,134,205,13,59,123,63,179,105,44,151,90,133,8,108,71,175,129,117,229,166,22,162,188,72,111,140,137],[9,21,211,194,80,171,223,241,143,117,111,141,245,172,111,116,252,188,94,143,151,20,222,171,120,64,42,100,179,65,87,138,207,70,189,111,41,51,18,238,4,177,105,185,8,206,209,141],[162,176,183,37,205,74,126,252,41,232,192,36,83,250,142,207,211,11,58,90,71,252,168,70,29,229,104,45,169,84,26,55,49,6,8,100,21,192,160,241,39,19,140,191,194,78,94,146],[191,215,10,212,223,13,93,109,106,226,44,97,37,130,196,253,24,34,134,88,36,26,75,61,127,198,136,79,108,104,52,117,87,164,13,220,185,76,238,171,187,57,235,24,82,145,81,166],[18,213,40,117,22,184,21,6,198,96,223,32,161,87,151,234,21,69,194,255,146,30,69,93,225,91,42,107,31,16,16,246,235,183,145,231,177,207,90,232,217,216,55,56,197,77,93,167],[22,86,146,80,27,252,86,203,234,129,59,208,130,161,231,56,124,110,183,97,195,185,210,156,217,213,227,197,79,68,49,53,231,158,107,75,245,248,21,225,152,163,54,119,39,160,95,132],[182,35,43,163,42,1,34,239,109,7,56,229,237,17,127,115,97,171,229,121,86,235,22,3,74,54,70,56,117,52,12,187,20,147,116,179,81,237,167,123,72,167,254,5,138,107,79,173],[83,227,83,33,199,93,51,179,31,121,3,113,181,163,188,127,185,119,58,58,91,66,66,253,4,76,212,249,216,174,44,165,82,124,178,160,211,29,227,131,99,135,161,93,243,59,164,150],[84,180,33,234,135,146,139,107,172,93,186,192,156,248,204,15,127,102,244,180,131,5,1,235,134,112,157,139,203,218,216,84,205,129,244,89,70,133,116,99,214,199,182,75,96,230,153,172],[190,135,74,28,44,50,43,183,171,222,152,174,158,224,235,101,34,155,196,87,16,7,194,104,133,38,204,242,21,99,87,238,3,105,241,80,28,123,153,130,101,82,210,209,243,135,55,171],[158,252,216,6,217,53,85,60,208,251,45,128,114,37,246,146,248,3,27,43,58,53,225,219,225,250,9,217,194,29,71,209,40,201,255,88,75,42,233,243,228,205,149,123,245,172,242,132],[41,121,181,146,126,39,71,72,183,19,143,159,3,107,236,8,22,81,67,65,251,54,241,143,158,148,188,53,243,203,205,80,179,161,75,209,166,97,67,196,85,187,211,52,208,7,17,163],[74,239,132,54,106,157,70,121,50,58,251,200,90,239,91,112,162,14,93,153,205,226,59,95,159,173,221,22,18,39,164,17,5,190,81,245,199,87,2,88,52,169,106,177,231,157,149,169],[201,104,40,16,110,133,95,184,8,196,182,80,176,130,229,1,250,110,76,236,116,95,93,27,77,242,120,83,44,6,17,149,88,254,193,157,44,108,86,64,133,175,204,182,201,254,209,178],[7,9,60,140,78,213,116,55,215,167,186,103,204,12,40,220,243,77,116,111,133,12,90,193,149,57,128,180,139,191,237,190,183,221,218,118,183,124,63,91,201,220,107,71,185,178,18,140],[182,196,203,136,69,251,12,124,147,87,249,59,157,31,236,204,76,99,24,108,179,213,142,203,151,253,138,29,254,127,22,159,41,153,176,115,218,69,215,74,27,55,55,153,148,43,54,183],[114,191,44,56,174,230,134,2,103,110,238,142,135,168,76,239,98,209,247,54,121,88,24,212,65,30,64,51,126,24,112,162,139,244,89,152,37,161,109,198,53,149,133,63,78,41,163,140],[181,197,6,94,165,45,248,61,129,214,218,171,150,233,50,174,222,73,250,50,163,74,88,28,12,162,159,191,183,119,202,139,246,157,106,232,153,150,86,213,90,198,172,84,146,240,237,161],[34,219,228,211,109,16,81,244,156,50,108,219,45,248,115,169,2,177,65,215,28,156,200,108,231,206,235,85,19,231,54,255,85,68,66,23,143,69,95,216,218,84,186,50,239,1,176,161],[50,253,224,80,245,61,66,39,220,35,135,225,105,182,144,144,87,130,223,185,181,167,185,192,32,93,225,96,35,0,137,160,39,188,204,197,21,209,159,180,38,119,49,215,4,183,80,161],[114,10,207,242,13,131,195,155,150,62,103,141,127,67,130,251,167,51,246,88,225,92,157,207,126,106,60,211,126,226,62,230,79,48,16,176,208,63,113,76,235,247,52,195,37,21,82,173],[185,162,220,29,220,237,206,170,83,176,123,96,118,138,6,245,9,178,200,154,49,88,2,20,45,40,189,205,24,47,185,26,183,42,55,105,47,85,54,133,65,71,67,62,219,64,86,151],[174,132,177,147,100,4,24,24,160,112,118,28,163,62,239,166,106,214,106,193,172,139,44,128,58,33,6,112,119,249,42,135,38,28,113,46,244,152,114,177,103,66,101,166,233,101,135,177],[6,170,26,244,24,183,251,227,153,234,78,61,184,170,227,157,195,169,181,208,164,189,215,88,160,168,82,11,131,132,200,27,26,51,175,37,38,9,144,81,191,50,180,87,45,149,88,174],[115,53,247,160,118,156,62,83,230,55,79,4,112,0,134,175,51,206,197,24,118,26,184,91,98,129,204,55,195,228,117,98,173,251,246,107,247,16,172,185,247,185,248,254,49,72,75,183],[91,54,103,235,4,32,68,180,128,198,8,197,147,255,236,231,109,73,190,45,241,236,196,169,144,142,197,28,210,110,38,245,37,163,232,74,85,72,166,72,255,12,147,134,222,72,92,173],[56,135,173,253,154,196,115,31,92,107,68,174,186,192,127,40,182,185,176,131,9,36,223,223,236,220,89,171,50,157,225,196,120,72,215,92,107,47,176,212,181,121,144,129,149,53,135,145],[113,94,202,217,207,207,205,27,11,214,24,110,66,99,139,10,54,89,252,9,214,130,84,164,226,146,187,193,237,169,150,177,217,206,192,22,232,122,101,47,98,191,15,36,87,154,74,178],[65,243,170,224,192,178,80,41,57,17,188,132,210,207,139,233,1,149,118,177,40,197,229,230,159,148,29,19,92,222,47,108,104,181,33,92,132,5,88,245,10,234,76,165,54,190,74,162],[44,165,9,9,104,177,141,120,191,113,137,242,170,95,103,93,154,104,213,242,147,174,105,117,182,7,66,164,173,222,138,171,144,203,241,179,226,210,100,254,199,146,1,165,167,231,203,173],[42,60,8,137,247,13,172,77,179,52,214,140,79,126,255,59,176,3,108,113,197,90,143,183,128,163,70,231,100,162,47,28,47,114,47,254,24,192,15,104,21,183,44,167,129,85,114,162],[213,69,139,87,238,134,139,152,174,98,209,132,155,73,122,253,127,163,18,218,124,68,64,217,51,166,173,35,144,118,144,40,121,243,21,171,151,212,88,9,124,72,185,38,135,55,225,165],[170,188,49,150,11,137,32,107,138,78,21,9,174,117,6,62,208,183,202,169,30,12,138,128,80,10,225,166,141,88,0,79,198,70,143,38,155,75,7,228,93,86,71,46,202,162,238,160],[155,251,164,250,81,186,192,52,193,65,13,43,170,196,203,68,111,82,9,214,192,183,253,50,119,139,55,213,36,12,210,214,137,48,249,80,240,56,203,191,68,169,175,162,214,11,135,152],[199,9,16,239,242,54,98,171,47,115,253,234,105,22,107,181,177,167,14,165,27,31,27,42,147,199,185,233,239,150,24,37,218,187,30,163,215,150,70,54,80,48,187,83,124,133,87,182],[163,88,39,50,35,157,214,115,26,236,126,28,154,45,15,218,125,98,246,243,253,80,190,170,114,136,224,44,142,38,6,217,232,21,80,213,16,70,40,201,60,107,163,157,210,35,98,144],[200,176,238,20,36,201,6,95,36,45,123,201,0,16,153,124,103,7,163,239,141,206,154,98,1,190,247,248,174,85,224,42,191,119,129,239,250,206,160,56,180,193,45,81,71,172,222,149],[189,96,122,115,60,96,92,71,231,95,67,17,244,172,25,196,227,83,76,144,82,133,108,178,45,103,227,57,47,93,37,98,36,23,30,235,148,174,212,34,146,71,181,98,184,194,153,180],[147,7,175,241,53,203,178,32,74,186,114,138,188,55,209,247,67,164,26,128,89,2,181,106,136,19,185,127,12,99,245,100,59,122,152,90,65,97,212,207,114,82,109,163,102,175,42,149],[200,168,70,65,167,39,234,91,5,195,239,39,57,143,211,77,254,175,231,175,174,176,18,179,143,32,161,77,50,156,80,162,255,97,238,132,254,170,177,203,105,83,215,67,56,61,216,171],[197,224,134,51,116,77,237,42,20,66,147,118,47,162,147,38,196,130,200,129,165,250,246,34,64,36,231,240,136,81,164,46,73,239,152,30,31,219,163,150,143,52,34,180,219,237,191,146],[130,80,181,152,82,201,190,165,187,41,184,146,39,17,104,223,93,89,152,179,141,111,206,132,72,236,167,56,214,220,236,39,243,1,107,228,166,67,248,237,139,127,45,220,221,44,235,130],[146,60,102,84,107,100,129,216,187,160,46,76,241,161,11,15,149,48,4,4,89,68,245,182,142,105,112,91,108,161,145,4,18,155,243,170,4,46,47,155,146,153,112,183,57,116,182,183],[235,70,58,182,108,50,21,7,140,77,148,222,19,9,240,161,68,215,45,22,55,144,9,106,178,105,138,193,55,114,128,88,58,119,42,119,26,233,246,49,89,226,40,161,254,99,167,185],[160,240,195,138,130,56,11,220,53,85,210,119,80,89,88,58,193,12,111,107,250,173,14,143,211,149,112,188,234,219,238,199,28,152,35,210,85,81,86,65,117,44,84,101,4,111,196,180],[162,145,55,79,7,241,147,230,8,229,248,114,169,243,255,130,180,4,108,37,39,209,131,165,84,43,188,24,188,22,159,94,95,249,98,47,218,88,67,166,210,146,137,211,118,156,188,153],[13,149,110,35,97,164,20,240,130,168,221,189,64,84,34,196,146,80,1,49,104,14,66,158,231,218,15,101,207,77,37,5,243,4,3,10,203,206,68,132,50,18,32,238,145,149,42,130],[98,47,102,56,230,248,236,248,193,214,245,196,209,83,163,106,209,187,161,80,65,214,88,35,177,163,187,62,245,78,107,22,216,74,224,52,98,59,60,250,79,200,18,34,84,50,227,136],[55,145,106,171,130,241,44,196,205,90,186,21,182,145,216,240,83,53,213,33,133,74,195,120,39,232,47,15,55,54,16,233,255,31,135,7,120,86,74,93,76,251,231,175,182,174,101,142],[74,215,190,195,202,243,222,119,5,170,92,232,52,72,38,216,192,132,57,219,160,124,244,12,132,197,141,19,123,201,123,110,57,133,180,238,142,91,196,98,243,250,221,47,111,22,100,142],[157,13,172,214,25,127,0,242,60,38,131,132,84,24,56,132,213,65,103,38,207,187,82,170,200,67,96,30,230,84,233,120,243,223,188,221,217,231,127,210,219,205,124,13,121,157,137,175],[133,76,180,109,25,229,212,15,148,3,169,202,212,245,28,166,57,10,177,88,182,1,196,140,144,87,175,60,44,203,46,118,96,14,214,121,170,210,232,111,87,8,137,43,60,88,203,164],[73,254,179,96,112,100,96,235,222,137,151,39,160,100,253,192,212,34,88,45,15,142,131,58,49,226,183,109,180,11,87,97,143,82,160,246,62,97,32,128,57,221,65,199,191,132,191,162],[52,15,159,102,81,183,221,180,209,186,170,215,148,171,255,81,50,234,30,125,229,67,90,181,123,111,111,211,110,159,169,11,132,121,132,70,51,64,155,50,245,101,5,58,152,37,39,131],[236,242,103,238,177,121,248,25,170,75,53,248,231,242,95,242,118,15,183,134,74,172,40,241,91,129,7,133,123,151,18,155,53,85,70,174,150,73,139,101,244,122,38,36,48,207,136,174],[147,229,189,173,207,253,73,54,199,15,90,11,239,149,23,180,198,235,107,147,114,206,180,136,176,164,46,46,254,185,144,45,235,51,187,125,108,44,111,21,186,62,179,239,26,161,215,135],[133,83,145,155,76,215,5,48,221,10,77,182,168,201,140,1,155,60,209,174,118,183,84,2,75,16,255,207,255,219,242,207,61,85,25,214,144,100,124,171,39,200,114,48,107,3,158,170],[31,10,235,193,179,183,29,127,28,12,106,195,145,73,120,101,219,131,55,116,80,181,90,194,242,157,151,240,100,212,109,255,173,250,220,193,47,92,15,7,74,248,145,52,202,176,254,164],[225,75,93,12,246,57,33,98,236,160,29,211,217,242,129,85,111,37,247,238,176,188,48,133,125,158,166,237,225,202,29,161,51,247,45,79,87,166,62,82,117,102,191,70,141,47,42,135],[174,188,10,104,23,0,66,168,59,149,169,164,30,102,220,145,218,228,136,248,53,103,100,206,3,231,103,224,125,18,225,17,25,197,141,0,132,236,31,216,43,209,7,73,231,175,14,151],[38,223,46,175,213,96,108,185,143,13,198,139,229,143,224,108,109,110,131,25,172,28,196,103,164,113,163,134,233,191,152,162,161,184,163,83,128,25,29,7,84,106,213,89,82,112,161,166],[65,8,148,218,62,95,181,146,205,25,73,224,19,73,120,69,232,112,211,222,39,62,71,57,96,104,87,20,5,159,236,48,9,38,8,102,225,122,126,49,88,226,203,126,228,0,11,129],[56,217,114,105,210,94,83,75,166,67,141,233,79,164,252,16,139,13,42,35,174,208,255,68,114,204,170,192,6,42,80,22,2,31,72,174,131,235,255,235,7,170,61,243,203,126,63,140],[142,47,41,127,242,122,97,198,233,254,38,187,83,121,32,107,151,180,185,239,52,114,181,223,90,112,64,38,126,191,229,21,171,183,200,90,114,90,17,84,58,74,248,17,20,144,249,174],[17,2,57,181,109,103,137,33,139,139,69,21,94,61,92,225,33,254,112,229,237,14,169,205,117,26,34,167,166,45,127,56,76,106,237,223,244,15,223,32,121,220,187,73,192,236,50,146],[31,100,168,144,179,186,156,159,92,165,210,235,189,64,182,67,140,235,149,121,244,46,142,249,112,22,222,85,17,175,158,19,50,135,188,238,235,101,118,193,196,219,131,69,246,69,106,168],[140,242,134,230,67,69,122,146,177,115,218,217,139,213,160,68,163,73,208,255,41,159,160,249,37,119,135,107,96,20,133,168,215,40,228,67,194,10,237,242,145,92,198,88,83,61,47,148],[67,18,64,153,168,255,59,185,1,237,244,96,31,1,203,202,86,4,145,98,64,147,168,248,204,119,42,46,54,50,99,149,121,172,242,75,187,101,96,28,5,105,234,56,219,194,179,132],[134,104,246,183,41,8,196,150,135,237,80,251,149,69,62,226,196,58,149,110,193,231,20,227,251,52,195,142,41,164,34,97,36,166,250,218,221,65,160,55,79,48,167,207,47,51,240,136],[203,244,207,232,16,231,94,239,89,45,240,173,80,203,212,42,167,120,70,51,5,242,52,184,240,153,58,233,209,49,224,229,151,156,63,244,241,206,201,50,93,63,46,3,150,188,94,160],[187,76,100,121,31,45,195,168,165,253,88,21,86,178,223,185,175,95,7,163,193,196,55,241,107,194,70,71,56,33,68,25,55,238,245,73,224,103,117,109,13,209,23,222,60,249,53,133],[237,140,246,74,31,203,239,97,246,33,178,242,143,73,122,169,40,20,34,246,159,79,77,156,153,97,154,113,190,4,112,146,148,185,95,88,109,164,221,17,220,205,221,9,92,80,116,153],[147,19,62,145,255,42,83,194,18,138,105,211,30,161,114,106,65,149,11,54,254,117,231,49,91,146,66,157,251,202,107,52,33,98,123,145,7,220,224,133,160,217,79,94,138,20,125,150],[248,233,196,25,87,59,223,21,234,35,204,47,17,122,22,224,79,246,24,166,103,140,32,63,243,7,151,147,68,221,195,250,152,207,253,101,130,250,35,59,97,218,40,116,201,85,78,148],[187,236,221,233,215,145,112,140,87,27,134,240,142,6,138,27,139,9,46,224,104,71,202,142,234,199,16,227,151,210,90,117,1,191,207,168,122,205,2,253,1,208,196,134,39,144,182,142],[251,106,229,184,142,159,27,130,56,11,96,11,105,131,58,226,255,241,166,70,249,10,92,186,14,165,96,28,16,100,217,111,88,170,142,175,78,206,88,137,247,205,23,71,48,252,160,146],[237,62,199,3,42,104,98,132,30,206,251,30,53,128,30,12,114,234,22,172,99,136,193,233,6,97,7,226,192,0,146,81,64,109,118,204,6,182,155,9,179,105,192,180,190,47,218,170],[150,183,197,244,103,67,166,173,87,39,188,186,165,231,217,5,4,193,242,144,43,21,104,206,148,237,66,147,36,141,55,227,161,39,199,138,188,117,239,135,194,180,26,189,91,255,110,144],[72,196,126,93,99,88,188,122,249,225,187,200,48,19,221,183,130,18,31,196,66,220,111,224,65,69,146,3,202,117,47,148,229,135,29,38,82,136,106,6,40,136,81,220,14,41,158,139],[249,20,65,253,208,126,58,31,97,84,248,32,87,146,133,19,4,247,27,10,137,196,203,165,32,244,67,66,157,246,32,23,65,255,221,46,3,8,191,168,224,161,16,31,209,206,50,149],[19,37,180,149,143,243,56,65,207,157,11,129,135,95,40,162,129,139,222,111,92,198,202,21,169,46,105,171,65,197,27,128,66,38,232,157,50,63,167,114,252,88,36,75,226,67,58,148],[200,164,17,210,70,253,138,172,120,242,255,19,55,22,17,5,27,232,159,228,168,123,121,196,196,59,250,17,213,65,92,101,171,160,149,207,251,83,225,15,121,135,124,149,149,201,8,175],[209,95,253,141,23,46,62,191,138,118,149,23,6,224,16,159,5,220,53,147,93,36,80,77,229,54,242,245,144,139,75,122,78,106,77,70,214,219,57,62,129,115,9,238,99,238,228,149],[250,228,184,4,98,252,213,239,27,22,91,238,103,94,188,237,58,204,161,82,136,86,131,214,147,1,240,185,95,70,235,102,99,19,241,138,53,176,56,65,17,213,101,196,115,123,241,147],[197,107,21,137,118,192,228,202,134,253,213,63,82,113,156,40,57,198,115,76,103,120,8,178,93,169,114,189,114,246,241,244,122,208,239,232,153,235,245,160,9,255,71,247,111,70,166,176],[216,106,228,241,12,236,138,239,73,44,146,138,38,220,128,201,220,194,221,69,188,97,254,136,88,38,171,78,193,116,146,19,250,62,223,60,198,213,15,137,208,240,98,184,38,84,187,162],[163,253,11,41,102,76,171,90,168,159,193,191,250,110,41,112,138,183,32,66,111,69,105,29,242,175,72,65,50,124,241,69,158,186,93,178,66,116,68,117,125,44,20,150,4,201,148,142],[40,35,107,62,215,145,112,63,41,107,41,176,14,69,99,43,214,39,146,181,224,104,59,124,63,113,125,171,28,135,29,225,67,207,29,0,27,22,190,36,229,127,159,44,107,178,75,181],[133,158,107,220,238,61,190,117,25,122,141,254,194,133,41,81,159,139,98,120,127,151,220,30,140,3,95,201,182,162,28,66,188,79,95,6,223,71,33,177,188,177,202,224,57,190,195,130],[162,123,71,92,9,153,146,73,218,175,243,255,123,20,80,168,114,121,140,226,170,175,186,235,38,45,180,231,61,24,108,13,229,44,119,60,108,161,2,81,68,48,208,62,2,41,14,131],[219,12,247,120,0,89,113,186,85,83,91,115,224,180,18,1,20,103,5,123,65,191,57,240,170,207,105,201,187,25,88,249,244,83,254,3,234,101,158,118,145,4,157,13,28,219,112,134],[39,137,238,180,6,140,45,113,156,40,157,8,115,42,64,218,32,185,238,65,134,66,116,12,41,101,145,201,69,125,178,211,71,49,231,82,141,47,2,139,152,254,212,55,251,158,122,145],[194,89,166,159,92,8,152,76,139,138,79,63,70,109,43,110,139,216,106,177,170,77,215,105,229,125,89,191,232,186,110,162,127,250,132,251,243,210,70,74,17,16,253,26,1,120,75,151],[220,191,198,142,44,223,192,127,229,125,134,185,44,100,29,167,61,254,84,84,124,171,244,100,3,155,171,152,146,232,62,251,205,164,82,68,178,134,222,40,176,231,114,72,42,103,199,181],[65,226,195,7,92,12,217,63,141,216,39,63,42,253,10,104,89,182,158,54,131,132,75,111,168,116,173,204,240,37,172,28,197,255,212,120,95,101,148,185,54,202,104,151,31,116,156,141],[65,16,62,167,24,107,206,143,49,111,80,52,166,196,13,106,234,95,127,90,169,204,81,100,56,3,235,42,187,233,244,77,221,61,235,42,200,178,58,245,108,187,192,131,115,198,29,133],[219,241,157,86,206,123,107,32,135,68,47,105,165,210,88,56,136,118,13,7,2,83,72,236,96,90,114,199,241,229,136,33,41,162,173,228,25,58,73,200,154,55,47,20,167,141,220,185],[165,167,141,175,1,5,255,31,78,198,239,119,120,217,210,23,19,180,17,87,125,0,159,59,40,248,176,122,218,203,49,16,186,46,210,66,217,179,204,104,95,29,12,21,125,62,41,131],[49,122,34,130,164,139,131,181,92,115,150,4,198,201,186,168,249,243,91,140,14,105,216,74,134,176,28,191,71,80,18,64,4,125,224,255,40,213,65,249,74,185,219,149,23,209,18,139],[206,56,234,42,13,64,92,50,249,113,175,129,111,163,30,171,54,246,51,103,138,200,151,70,8,56,164,251,180,40,74,28,115,171,34,140,168,233,43,96,156,61,142,245,225,154,221,173],[215,187,138,186,119,223,82,131,72,39,162,45,214,53,43,68,105,51,171,10,173,136,99,78,217,26,51,32,78,175,26,106,193,150,68,132,69,53,185,177,209,81,141,88,138,199,24,145],[165,20,167,84,216,50,134,117,122,235,89,60,102,155,179,139,4,35,177,231,78,252,180,82,7,214,151,158,2,23,100,72,92,215,119,85,137,14,252,24,69,21,6,47,255,57,118,144],[239,153,174,21,43,22,177,224,187,50,24,74,18,141,219,159,46,16,189,77,82,86,106,197,190,208,21,124,59,204,49,224,76,178,110,47,97,242,178,139,213,202,243,92,123,56,95,185],[152,69,34,134,15,139,118,233,103,65,194,130,99,189,80,74,217,85,228,132,35,51,94,207,82,143,140,76,147,126,52,148,24,129,186,181,118,55,98,202,30,45,7,57,105,29,236,169],[80,13,246,171,169,217,28,120,44,6,27,90,127,207,73,234,140,254,92,227,156,173,11,143,38,223,159,255,178,7,121,221,152,189,176,202,18,131,169,123,163,244,115,11,185,51,140,136],[213,105,50,165,253,187,155,107,184,135,151,73,78,50,60,77,172,226,218,231,145,62,71,15,42,25,191,200,213,26,155,35,213,34,149,33,89,126,42,91,68,107,146,215,129,200,42,133],[231,73,139,17,17,175,152,62,58,62,219,180,236,6,231,178,133,46,128,41,144,160,81,177,64,16,74,136,203,251,197,65,249,249,55,80,28,183,51,11,24,61,18,165,174,119,85,180],[189,4,121,54,17,95,205,230,93,214,152,200,186,125,46,202,242,126,106,165,102,106,184,165,241,94,106,115,80,57,171,155,217,170,105,171,214,28,159,13,32,196,213,11,114,66,165,172],[156,91,234,50,211,145,20,181,134,68,144,175,37,175,72,2,172,9,221,86,99,227,221,150,203,89,165,242,91,167,248,184,164,179,117,16,228,32,103,229,193,159,148,214,251,53,185,150],[109,123,107,161,193,27,194,153,127,189,232,104,135,191,9,13,110,198,231,244,107,0,89,239,6,215,117,120,104,166,31,225,212,20,185,18,238,242,171,166,143,77,190,177,234,222,15,174],[102,113,162,95,45,179,234,61,230,211,188,7,205,8,118,63,63,91,43,85,168,143,177,226,69,251,147,126,96,201,173,188,64,139,118,219,102,255,42,8,240,71,153,122,82,249,249,182],[26,84,1,8,249,41,221,244,59,218,238,190,47,56,149,163,209,48,130,159,217,141,173,87,162,249,135,147,141,220,187,91,252,31,141,243,215,170,8,119,80,31,193,78,195,239,192,163],[218,193,158,202,209,78,115,216,9,142,123,55,45,10,199,212,15,155,117,190,67,49,168,121,82,253,149,200,237,45,50,41,8,142,196,57,59,161,77,77,255,62,218,234,255,216,246,170],[184,191,188,102,155,29,91,187,27,106,27,79,235,252,71,130,238,110,114,58,39,4,68,167,120,115,248,83,17,211,47,154,104,169,202,7,31,252,6,216,65,92,203,180,143,142,72,143],[105,160,166,1,185,184,255,87,23,127,104,108,217,202,46,156,112,27,199,206,182,120,239,132,45,44,218,222,77,209,112,70,15,166,100,112,89,7,36,59,89,209,60,158,153,134,85,166],[225,128,19,97,243,231,6,144,246,153,197,21,247,57,157,14,78,13,131,63,19,136,129,140,205,137,215,166,4,89,192,49,198,19,176,48,125,25,238,221,124,51,222,25,92,145,14,151],[20,142,184,245,100,101,132,56,175,244,135,8,187,10,67,10,244,23,68,240,191,93,44,18,168,93,74,215,164,67,49,25,205,203,238,218,132,202,225,82,131,190,209,8,31,213,39,153],[16,245,248,115,132,212,52,243,118,165,70,210,202,115,65,251,148,180,180,93,2,33,225,183,63,48,212,225,25,20,123,148,105,133,161,232,64,103,48,4,167,83,160,44,160,167,104,180],[90,251,63,237,124,10,68,120,220,131,98,192,51,161,42,193,224,171,100,63,83,80,172,34,185,175,29,144,80,22,185,43,59,45,159,53,147,196,12,60,94,54,46,176,82,189,157,144],[38,72,158,73,177,91,248,14,254,184,45,185,198,36,41,217,107,191,202,48,161,214,96,51,84,86,178,140,84,214,38,237,206,236,248,108,231,130,233,62,132,48,196,234,0,210,37,132],[181,199,208,51,59,60,63,109,217,168,106,211,124,168,247,227,86,203,193,30,123,46,199,187,172,99,60,133,23,213,50,79,253,148,188,134,136,187,3,212,13,104,74,94,84,238,107,130],[80,39,87,163,221,161,208,222,66,214,26,23,161,195,72,56,39,87,14,79,93,126,6,184,202,90,41,122,205,204,94,194,1,11,33,62,159,213,207,254,171,169,108,128,2,180,74,131],[249,191,31,148,98,17,141,209,241,80,212,68,186,216,8,109,241,177,196,104,29,194,141,30,210,90,181,191,239,69,48,199,207,78,235,26,17,8,12,64,136,84,183,102,118,6,19,162],[228,236,112,78,54,113,159,36,62,149,94,197,205,36,150,25,89,223,254,195,144,98,140,1,158,14,93,226,190,226,209,54,120,4,146,194,36,203,206,150,5,57,168,106,112,217,42,153],[252,16,210,119,202,217,167,184,16,52,150,137,168,175,251,28,152,157,91,29,211,140,20,237,39,103,119,143,113,150,115,227,245,214,237,160,156,102,205,142,129,234,65,69,185,162,234,128],[119,152,140,52,82,87,164,172,32,124,154,221,255,221,86,146,13,172,221,151,102,233,186,93,148,206,97,25,232,88,173,67,208,110,219,166,9,163,154,218,26,187,209,112,22,217,99,162],[195,236,22,227,178,119,32,243,65,252,79,190,69,173,11,178,221,51,98,63,179,207,192,78,109,3,95,62,221,114,111,138,83,252,34,126,67,112,198,255,70,61,51,140,232,96,251,177],[179,69,188,207,199,177,76,0,209,9,127,78,1,209,97,0,27,127,254,65,44,139,12,244,43,125,91,124,166,108,201,166,30,128,164,65,107,79,240,85,55,10,19,34,4,87,5,175],[105,118,192,103,40,209,113,51,80,127,209,60,223,9,120,49,46,6,145,84,40,166,102,212,53,10,98,196,109,173,157,104,55,2,29,82,218,67,77,201,235,31,80,156,44,185,100,149],[76,178,47,194,39,249,117,28,62,119,182,174,0,240,146,217,244,118,76,127,29,155,60,203,115,114,187,9,17,151,238,91,188,8,68,100,28,188,230,80,221,146,139,238,155,50,207,152],[154,173,227,154,48,233,247,168,165,61,128,185,52,182,178,172,197,105,76,75,16,105,123,102,86,27,30,178,187,100,91,106,249,217,112,186,136,156,86,37,141,241,170,161,197,253,9,151],[241,163,216,70,34,58,19,213,47,2,38,38,255,165,120,139,163,102,149,39,130,115,131,8,101,38,53,71,196,98,65,228,99,161,174,170,152,35,134,228,160,212,193,144,153,12,255,134],[83,239,30,230,116,68,218,55,88,97,7,21,158,194,158,253,234,144,121,163,225,240,154,1,161,236,149,217,28,152,238,170,25,68,165,245,203,150,200,117,109,116,110,206,165,159,249,142],[98,144,39,171,4,111,135,50,132,3,131,252,173,161,92,137,104,23,201,144,54,151,216,41,42,51,204,201,92,227,246,131,175,77,253,154,41,45,177,111,252,3,187,78,58,38,20,177],[154,34,48,141,166,124,44,19,196,13,110,83,131,75,119,11,136,85,168,162,152,80,83,87,21,7,1,51,244,96,4,102,77,125,250,82,132,39,173,28,134,148,130,250,200,227,46,178],[94,100,201,189,142,167,114,189,198,105,207,105,134,12,130,23,217,133,208,69,47,105,203,126,17,157,159,185,141,100,87,57,236,115,186,255,248,28,33,188,50,13,32,109,149,253,28,145],[115,239,30,198,183,97,121,35,224,130,149,15,172,204,166,71,15,175,199,113,221,51,45,255,106,137,52,203,20,160,160,243,72,209,171,79,5,71,85,83,226,85,234,165,252,152,219,182],[147,210,171,136,42,77,43,77,87,154,120,21,109,149,165,8,178,221,135,124,63,248,118,197,52,102,208,33,17,56,230,182,230,106,47,173,78,192,155,217,140,240,68,216,164,127,13,162],[249,232,32,160,58,57,169,22,226,203,100,130,203,183,80,56,104,205,150,101,12,159,183,73,142,70,150,127,115,63,109,169,160,67,192,254,176,103,63,67,241,224,160,203,49,207,52,170],[242,144,30,77,121,12,192,164,123,250,205,159,141,42,208,113,109,195,96,167,198,22,254,199,21,38,90,32,182,134,3,201,117,64,139,19,196,103,179,170,241,246,92,214,219,105,168,164],[52,72,242,198,231,166,122,118,179,125,213,207,16,226,7,104,180,117,163,113,96,152,167,115,128,236,125,102,82,151,196,43,130,70,243,142,74,169,30,90,152,33,119,173,89,238,113,163],[18,19,46,99,120,152,86,84,50,155,55,138,125,190,25,217,90,62,205,190,27,223,9,209,144,229,148,112,207,53,0,33,171,213,53,109,32,122,122,201,45,86,12,84,188,100,78,166],[35,93,184,105,150,14,66,41,228,183,164,244,225,97,130,51,1,119,168,231,130,211,32,102,4,24,189,230,220,171,34,177,251,52,154,113,24,77,70,54,2,120,201,181,84,221,125,175],[136,251,210,187,19,159,48,192,210,132,120,40,253,229,108,78,192,230,64,89,7,244,161,254,170,131,117,194,138,59,51,126,75,48,6,229,54,232,142,51,84,171,56,222,195,8,215,174],[108,86,14,81,114,12,9,41,55,128,133,61,49,115,127,23,205,60,143,162,14,10,208,14,247,42,104,123,109,141,155,13,129,61,45,86,142,171,221,7,54,115,199,22,63,91,149,160],[178,149,22,140,56,219,147,25,223,44,3,173,23,169,74,231,249,13,99,49,149,165,54,124,90,216,118,43,156,55,242,204,212,52,171,203,208,166,252,94,102,27,66,216,46,91,64,160],[57,113,247,34,217,205,111,154,159,54,69,136,5,16,119,117,222,27,114,117,6,42,145,46,160,116,38,213,4,139,138,242,244,109,244,45,162,131,179,48,134,209,165,2,43,234,95,176],[254,32,229,0,159,178,138,188,4,58,88,83,88,244,124,54,25,96,97,191,32,101,177,83,28,189,101,185,132,107,116,254,144,116,88,40,165,242,119,90,20,181,141,43,45,147,194,135],[177,235,172,186,20,20,149,218,135,189,159,251,188,58,218,9,2,244,5,31,96,180,51,65,146,43,56,73,171,127,110,158,203,252,241,60,189,250,22,223,125,31,43,32,166,112,17,128],[34,143,161,53,251,232,235,246,167,244,168,71,114,239,131,126,12,87,202,108,137,252,122,144,80,126,96,196,3,251,72,112,226,110,169,92,114,152,61,46,101,57,198,116,70,121,13,172],[119,201,228,121,130,26,85,89,55,248,142,67,31,132,1,37,144,40,187,185,215,129,8,248,238,15,3,84,191,137,16,220,204,51,127,70,62,66,60,25,250,127,77,153,128,244,227,149],[180,105,90,111,50,108,166,202,204,251,55,156,254,242,156,91,162,90,214,153,112,165,252,180,7,5,221,78,153,5,235,64,79,138,38,167,109,89,58,130,51,144,48,119,127,231,93,140],[39,243,109,205,31,43,209,218,101,22,115,236,35,218,134,41,41,153,141,240,2,81,68,198,197,234,144,135,122,183,96,43,40,76,253,83,5,162,226,144,166,246,36,104,58,226,138,147],[253,175,81,41,228,120,148,187,86,224,104,98,65,119,223,40,101,34,166,66,95,161,67,26,87,37,230,56,68,40,173,249,248,10,153,137,142,206,219,166,99,108,150,141,207,155,60,163],[60,103,164,140,99,191,171,67,196,21,135,143,217,35,193,229,164,19,114,224,234,17,196,96,214,80,71,114,186,47,73,120,155,28,136,59,131,50,122,150,198,77,228,26,131,112,175,161],[241,132,166,25,164,179,118,233,170,70,217,50,191,13,210,190,197,174,114,82,0,146,122,229,16,112,247,201,81,175,37,185,108,240,129,132,26,158,24,103,152,167,172,99,140,128,238,153],[189,82,148,22,24,188,212,237,215,71,11,101,216,11,92,8,38,149,69,232,151,94,57,91,243,223,11,214,8,53,246,80,118,207,141,200,248,127,60,96,199,252,34,135,168,205,221,165],[185,196,179,222,25,216,21,100,109,232,167,17,61,212,75,216,251,210,233,177,133,69,47,138,1,110,139,221,44,36,127,209,145,161,171,203,139,120,161,0,68,167,145,26,200,88,8,139],[175,222,152,110,82,171,46,220,42,49,36,77,164,187,125,28,138,223,6,28,71,36,13,24,37,233,236,224,86,139,178,40,12,138,159,30,48,140,39,169,151,120,109,164,78,165,50,172],[62,27,218,238,208,12,152,224,47,159,221,81,160,215,228,157,52,103,117,23,37,240,18,59,105,83,105,0,34,206,79,5,65,68,48,207,254,46,251,98,41,23,65,151,25,249,172,139],[154,55,208,47,183,160,31,41,15,139,28,249,23,99,95,132,89,216,184,171,137,163,119,88,132,175,188,23,194,16,163,205,105,231,77,143,86,246,152,233,218,208,7,149,175,20,148,169],[1,51,189,126,208,151,5,49,215,225,185,99,24,134,162,207,224,149,219,177,141,42,64,35,194,244,107,1,245,234,173,128,14,27,216,111,149,60,107,30,254,126,17,29,229,78,165,146],[157,180,170,159,88,232,134,49,61,252,118,215,143,105,146,22,8,197,97,60,51,93,252,219,116,145,204,66,253,35,166,211,89,37,229,72,149,69,84,64,225,82,96,56,144,76,188,172],[118,187,44,42,95,70,245,16,31,243,185,118,47,2,57,83,46,211,87,71,92,242,137,127,114,227,66,238,17,25,63,62,11,142,110,103,74,161,127,235,18,154,39,152,94,238,219,142],[98,221,114,74,210,21,227,14,221,50,237,190,224,108,172,255,218,154,5,226,113,224,189,3,245,67,163,135,182,14,49,121,8,23,105,197,148,171,143,168,156,89,68,97,12,27,239,177],[174,163,82,57,171,225,97,197,120,181,198,111,30,88,160,182,203,96,89,107,56,167,245,170,178,213,168,192,210,132,190,19,117,252,10,46,145,251,137,186,34,82,250,46,109,114,36,136],[9,37,51,213,201,46,44,70,57,32,226,230,114,22,220,253,160,36,33,229,101,18,60,140,146,110,67,172,205,124,225,142,85,150,80,2,173,9,95,154,188,242,124,80,169,123,12,142],[96,83,172,223,15,72,246,249,237,111,130,181,78,194,233,89,151,186,96,243,232,16,189,162,240,253,142,130,206,44,239,201,233,240,83,19,177,115,189,169,150,62,29,170,4,154,103,150],[227,65,68,145,43,216,30,116,28,12,230,128,118,158,66,188,56,157,152,167,128,87,2,210,6,224,141,234,96,66,247,31,111,75,197,212,12,211,90,42,123,210,124,44,179,85,43,141],[104,22,76,181,83,54,200,121,30,192,237,69,20,0,75,142,3,12,127,57,83,108,63,205,46,35,78,242,241,76,3,80,173,81,220,203,93,117,250,175,163,104,197,167,192,8,165,185],[121,252,72,117,212,113,84,80,129,222,10,213,63,125,46,180,137,23,76,89,150,53,232,112,206,168,79,94,224,176,114,236,213,83,63,110,71,77,166,116,15,0,123,106,165,225,140,128],[200,199,2,133,97,176,121,104,194,174,107,88,156,80,135,113,220,133,93,144,248,89,2,237,227,47,170,214,74,128,148,134,150,126,165,16,4,81,127,238,181,221,97,110,227,119,137,145],[217,136,153,21,194,60,33,179,130,83,254,248,230,14,251,33,93,159,84,141,210,196,102,108,112,86,162,204,41,192,183,89,85,94,69,154,182,230,46,67,147,244,70,36,150,47,11,138],[134,236,39,231,126,118,21,85,111,203,39,170,12,99,64,38,86,149,81,91,145,119,220,111,201,49,182,28,229,138,101,55,116,15,213,199,83,237,106,1,180,125,133,89,11,223,24,167],[186,153,109,146,166,207,2,114,155,113,54,12,112,123,134,174,208,210,53,104,60,149,208,202,40,102,167,173,212,79,158,163,111,123,174,18,251,84,138,163,74,239,58,116,127,118,252,138],[239,104,48,49,219,184,24,209,59,230,156,78,80,195,173,236,119,26,119,122,182,48,97,195,185,154,19,140,11,161,97,230,137,102,66,58,187,181,15,67,10,160,202,15,219,247,112,180],[255,62,89,196,38,194,225,112,0,175,27,59,148,38,55,59,146,200,22,161,99,104,222,57,252,222,169,64,98,136,154,103,132,108,11,135,241,102,194,134,253,97,218,74,48,97,243,142],[196,55,67,4,133,31,209,152,240,135,68,129,32,224,253,62,92,91,51,105,75,207,38,18,239,103,1,19,2,190,188,128,197,178,117,207,39,170,93,177,138,13,132,48,131,172,248,131],[146,61,201,151,255,222,39,102,194,142,0,213,208,62,34,138,197,71,229,197,234,55,26,187,117,191,125,155,193,85,105,78,250,250,240,56,148,82,93,25,240,98,176,159,190,39,254,178],[195,151,105,96,59,158,152,60,21,16,173,138,138,170,87,108,69,161,14,250,44,228,143,55,134,26,52,17,67,156,15,218,35,0,13,64,203,37,249,78,46,79,222,5,63,212,4,164],[73,104,171,60,223,236,124,58,195,42,148,49,13,81,194,147,208,31,113,96,39,182,148,73,76,149,136,31,79,167,70,54,61,110,56,202,228,248,164,241,72,216,222,237,249,221,183,151],[91,230,131,97,82,94,108,247,136,194,55,144,72,147,32,46,18,129,182,13,180,187,253,205,32,133,232,33,49,103,181,225,93,228,150,106,157,29,241,227,251,44,248,122,70,194,219,133],[61,218,227,176,110,242,202,44,192,94,210,16,98,93,88,170,233,208,87,17,235,77,194,133,47,214,214,163,78,44,131,167,8,100,187,13,255,89,40,239,98,74,155,88,137,18,120,164],[152,2,60,33,202,228,197,26,37,5,101,83,77,140,137,72,20,96,81,115,44,85,39,63,193,70,122,147,21,30,53,120,140,123,244,103,235,226,56,49,140,45,223,3,79,125,206,151],[243,13,198,101,224,9,64,133,252,188,212,72,138,106,102,26,52,157,89,86,34,213,40,55,16,149,244,73,224,35,251,250,148,163,95,170,7,42,193,154,226,6,242,11,246,117,151,182],[237,99,176,39,224,47,255,246,184,56,244,249,173,125,139,210,159,90,125,193,227,169,139,231,177,62,80,83,59,200,205,94,197,173,248,254,203,107,163,194,200,44,228,229,222,90,207,133],[166,235,14,224,34,248,22,66,162,85,223,105,109,165,29,221,56,117,41,52,82,255,206,164,63,226,227,190,34,79,153,134,20,31,72,104,54,237,60,104,72,22,206,70,47,147,27,146],[212,154,1,45,90,94,219,21,101,190,241,11,7,56,147,65,59,119,130,131,187,254,56,207,160,75,104,88,89,125,108,32,184,75,105,222,35,123,208,8,226,38,23,166,168,66,235,175],[22,51,179,245,4,80,119,148,110,241,45,230,113,78,180,60,253,5,24,198,6,213,60,66,86,120,12,45,77,236,213,222,80,250,233,9,63,65,25,22,241,115,131,170,100,210,233,136],[100,124,171,2,129,251,92,124,237,57,140,63,183,190,230,143,161,121,241,173,187,190,145,127,190,2,114,233,69,46,97,9,29,233,153,162,225,134,180,232,47,207,120,21,7,184,48,147],[56,255,38,176,143,9,123,131,5,88,192,59,217,173,13,125,205,45,105,94,115,37,184,126,15,235,81,153,113,58,42,140,138,158,86,65,234,191,154,46,209,159,224,215,121,167,174,172],[74,175,188,10,169,93,51,122,48,157,177,174,203,45,198,11,8,172,54,30,231,184,220,121,130,113,30,183,236,188,186,37,32,89,209,171,173,239,10,27,7,255,63,216,144,155,204,176],[52,87,215,32,183,251,244,249,33,73,81,110,254,140,47,162,21,100,209,44,133,114,137,206,145,180,147,203,234,230,80,39,252,139,137,8,3,227,88,135,142,167,131,197,25,46,3,148],[66,194,17,12,87,64,194,205,198,44,66,252,155,197,106,224,178,196,137,248,20,101,77,24,70,7,78,253,45,109,110,110,49,70,74,149,51,199,204,149,118,59,95,190,162,137,163,174],[37,243,49,12,254,111,249,8,76,105,92,0,53,120,29,16,6,197,108,72,194,0,188,148,182,231,111,89,185,197,137,193,17,123,1,156,193,77,98,30,149,181,40,140,40,216,221,128],[231,18,108,60,32,213,254,65,90,72,153,50,78,65,184,10,95,34,221,205,220,68,150,211,135,130,213,122,46,105,197,132,53,73,67,179,51,174,16,36,188,222,179,45,22,239,68,167],[214,223,37,109,140,64,243,244,18,103,252,3,172,247,70,194,26,102,121,64,84,180,165,131,30,147,196,242,6,254,16,214,120,213,114,144,199,108,102,141,234,197,83,44,201,232,137,151],[34,72,112,119,153,187,237,62,181,59,137,30,222,132,120,83,180,21,37,60,11,76,109,112,70,215,3,28,134,167,10,220,130,121,42,61,94,26,162,66,152,26,73,97,63,45,231,151],[217,47,188,162,105,3,110,170,241,84,58,18,54,74,207,230,153,5,2,77,87,67,73,52,165,141,83,18,82,148,153,85,225,30,134,8,165,22,166,142,138,180,152,62,175,215,158,128],[33,125,88,78,240,248,202,11,3,205,197,91,2,107,166,53,147,118,23,231,253,62,41,128,192,191,167,2,172,60,16,209,118,113,206,26,146,214,1,159,100,190,100,252,248,17,137,179],[115,25,48,63,143,185,179,28,234,36,235,60,246,162,53,166,165,25,103,56,167,45,176,38,148,109,251,64,127,123,95,20,187,103,32,102,157,104,240,68,103,151,244,84,180,20,130,183],[246,13,241,240,82,202,180,244,2,70,33,148,78,22,95,106,11,99,77,64,83,132,187,116,160,181,180,97,93,135,31,61,59,244,112,218,204,105,200,247,112,64,58,127,95,234,114,171],[57,209,183,228,41,171,74,4,165,211,31,14,103,104,33,48,35,193,133,72,87,136,158,124,88,92,220,239,33,130,243,168,237,230,79,151,189,101,106,12,85,25,81,130,206,165,31,151],[81,213,204,126,181,91,119,60,55,56,61,186,209,23,4,40,239,243,248,185,184,17,186,217,218,209,201,66,127,238,219,255,223,115,136,20,31,89,27,20,129,148,50,44,205,154,249,134],[147,134,221,153,138,157,179,110,120,59,184,133,53,10,242,252,36,1,184,230,119,53,235,254,209,49,37,17,105,17,223,41,23,180,133,55,102,110,137,180,184,118,22,161,44,122,236,134],[151,224,162,10,179,75,53,131,168,203,114,195,252,97,44,255,226,169,121,243,33,107,67,121,166,248,87,162,163,111,109,126,102,155,36,61,189,63,236,141,25,65,105,133,202,68,11,183],[161,226,179,196,181,33,163,57,102,137,21,220,1,210,12,104,2,111,209,111,40,203,65,152,172,103,143,27,148,148,216,118,14,84,110,222,117,188,167,30,42,109,240,43,229,177,253,144],[139,135,153,123,233,156,242,176,185,22,19,130,152,93,223,9,63,86,247,3,22,67,98,97,80,18,164,56,5,218,17,49,94,88,167,177,71,142,25,124,61,118,15,216,50,8,61,174],[233,157,46,10,38,40,228,222,169,219,142,84,109,178,8,62,93,203,83,173,164,132,40,208,71,180,246,81,105,145,81,183,241,44,7,119,195,67,90,112,214,234,201,106,31,234,232,153],[34,52,222,100,230,132,227,17,240,21,50,222,108,254,245,51,9,12,4,124,83,13,167,76,165,147,132,203,133,39,55,77,163,162,48,250,253,34,123,231,96,226,180,77,116,244,133,131],[90,49,125,65,42,86,106,169,254,140,111,179,235,190,215,138,246,178,109,184,192,32,18,91,13,56,153,158,232,90,125,250,114,100,134,193,115,184,198,170,209,240,127,46,211,117,134,167],[191,195,44,201,12,20,31,26,178,135,141,43,102,46,35,196,108,195,64,184,208,208,241,230,166,188,201,67,232,173,26,66,31,175,40,222,210,154,1,59,55,110,95,233,183,178,232,152],[134,234,53,0,115,89,196,182,91,184,58,190,194,120,79,164,220,107,51,138,161,128,93,129,48,139,116,232,52,237,242,96,18,125,5,35,131,240,86,108,55,32,230,184,67,26,135,130],[142,125,164,39,14,40,16,156,190,100,251,71,11,90,22,90,130,176,1,23,44,160,156,218,122,98,236,75,247,218,126,114,219,74,213,162,34,234,144,16,154,98,180,62,49,84,145,148],[128,143,22,208,173,204,195,227,105,51,85,24,72,147,114,226,35,91,234,31,8,35,17,160,12,210,87,231,225,70,223,0,254,150,114,86,103,134,16,50,3,161,122,146,2,145,183,161],[249,118,168,165,51,198,24,32,49,108,150,50,192,189,62,99,24,170,144,83,54,10,118,254,173,176,92,88,217,33,174,193,147,186,217,8,112,182,252,75,194,181,59,47,161,228,226,142],[193,185,97,166,158,39,13,32,174,249,130,125,56,107,66,45,129,114,174,151,99,212,218,205,34,28,92,183,165,14,34,245,17,49,139,13,238,160,103,115,234,118,180,98,34,149,100,178],[177,190,100,128,229,120,243,187,47,89,58,32,145,203,108,220,14,77,39,232,60,30,15,148,66,239,169,98,96,41,17,35,247,106,26,149,126,28,203,131,54,234,239,22,50,142,42,162],[234,154,240,101,60,94,144,134,247,34,242,49,130,124,241,254,127,135,38,80,203,251,229,71,56,137,11,237,229,114,107,192,12,101,100,177,72,230,128,48,85,93,178,135,176,51,68,176],[17,154,29,238,230,143,152,155,151,242,27,69,118,35,181,106,71,73,3,90,46,106,2,172,107,62,86,244,10,56,32,82,184,200,143,86,97,202,41,100,5,190,147,166,148,41,145,162],[19,3,83,108,180,38,97,147,200,156,102,232,243,225,92,25,10,213,200,166,153,206,232,32,120,81,124,172,40,216,115,227,15,166,26,4,123,204,159,123,135,212,49,120,36,124,235,179],[250,170,195,230,155,146,61,48,199,155,36,234,218,164,18,74,189,26,49,238,156,239,31,63,37,23,71,175,144,155,244,231,203,147,212,235,159,126,246,21,19,79,102,243,246,178,158,168],[76,221,169,49,6,88,220,238,138,104,215,204,31,223,69,139,159,158,231,234,58,87,225,137,96,243,170,19,38,86,91,125,110,49,3,157,179,164,195,237,192,186,10,81,238,127,43,168],[58,208,203,152,126,44,47,242,188,29,206,129,44,121,182,90,193,106,165,40,239,20,74,251,7,121,212,40,138,68,236,241,133,129,13,67,210,231,34,4,1,97,103,103,100,142,93,162],[26,36,251,221,32,230,249,125,213,233,210,88,231,252,28,74,183,215,130,8,195,88,19,91,32,233,129,79,35,101,45,164,178,49,68,150,46,56,41,33,99,211,78,179,140,231,64,183],[56,124,133,129,251,7,230,195,198,219,203,188,68,107,36,89,237,118,124,85,60,187,154,199,177,172,21,210,143,134,197,148,210,2,199,201,248,140,203,204,14,34,202,239,59,22,133,141],[96,253,74,104,35,76,190,217,24,217,72,71,169,116,106,157,73,59,189,226,200,31,1,170,151,216,190,176,96,151,110,94,116,25,108,94,33,84,1,104,209,43,75,114,81,18,51,168],[3,130,106,151,197,254,55,178,61,132,128,119,241,65,72,199,17,212,116,156,93,96,57,176,234,157,15,201,79,74,194,107,157,180,129,252,242,25,134,208,174,211,66,121,60,50,216,152],[10,74,5,23,146,237,161,120,150,162,42,105,106,181,163,153,99,154,229,204,61,252,224,153,46,171,205,38,156,24,184,163,9,192,118,237,54,200,150,124,231,144,201,198,185,237,127,161],[141,243,220,73,151,98,119,157,129,47,217,119,112,109,113,235,165,191,178,165,208,185,145,91,17,179,7,20,158,60,25,128,84,240,174,63,234,250,8,158,110,106,185,140,186,114,74,131],[206,212,92,21,10,126,243,161,166,127,142,150,197,187,151,164,143,94,150,88,190,32,181,17,162,98,184,242,228,75,164,21,104,177,199,128,68,54,110,177,235,113,16,198,188,110,56,153],[117,75,247,178,107,92,25,242,154,143,8,107,29,96,48,27,145,29,101,93,67,216,27,26,77,210,173,247,13,251,193,64,140,51,45,226,39,126,186,119,2,220,212,81,75,5,7,129],[91,134,102,175,92,218,59,43,127,147,125,102,99,97,93,191,208,232,29,26,58,69,145,82,40,202,147,105,206,210,30,94,99,126,186,139,250,128,122,220,64,54,73,170,231,18,200,141],[12,35,28,147,202,6,244,105,240,55,154,203,30,197,132,90,82,145,20,161,22,136,168,99,133,183,119,58,197,218,106,244,103,142,221,145,37,55,150,62,246,102,59,194,229,210,152,183],[229,15,9,134,212,222,204,127,140,27,167,249,43,197,176,50,65,48,194,43,92,251,156,237,45,246,237,101,125,224,228,64,27,196,105,75,93,76,232,122,138,10,229,46,33,231,153,174],[158,165,30,159,39,74,110,215,11,248,189,56,194,218,73,230,131,231,156,39,116,203,24,74,71,71,130,202,164,153,149,68,60,22,15,140,126,6,174,247,104,114,207,199,194,145,211,129],[108,94,119,152,10,92,217,222,178,214,64,227,17,27,157,76,121,14,233,7,147,91,7,14,0,146,173,35,175,117,162,173,50,51,250,202,24,132,251,248,173,206,138,179,72,148,248,130],[114,183,238,41,201,94,87,128,155,84,1,79,205,93,242,129,92,92,84,117,197,209,54,154,142,104,23,109,101,139,251,44,245,113,52,105,28,135,196,164,210,102,43,254,237,142,244,134],[189,76,139,30,216,117,7,6,190,12,10,220,137,61,146,107,126,78,185,65,79,141,19,46,95,113,41,101,95,150,133,32,189,142,24,142,102,156,124,221,151,105,102,247,138,38,18,183],[61,42,214,98,187,213,109,7,13,235,127,113,99,220,149,5,139,148,45,37,15,166,68,168,186,180,46,179,146,245,139,44,102,38,74,116,226,184,53,82,138,82,148,89,124,11,8,144],[88,34,195,153,93,96,78,3,179,41,113,89,24,98,112,159,210,157,22,69,180,12,228,66,224,104,50,21,66,155,191,128,250,109,231,44,160,89,255,22,117,81,57,136,14,216,51,145],[181,90,105,132,248,182,160,35,1,16,115,173,104,80,248,146,97,20,194,233,151,30,173,224,16,165,226,245,73,58,206,187,252,251,124,154,192,75,140,77,128,45,158,49,209,132,198,164],[189,198,197,249,46,193,177,202,240,247,8,25,101,106,3,140,244,29,27,167,11,181,205,210,223,41,186,87,167,125,115,13,125,192,142,210,130,48,23,253,6,64,162,244,231,88,220,168],[86,111,38,139,152,146,207,222,218,119,146,70,1,196,225,198,85,140,226,44,210,0,201,230,147,94,235,65,203,108,16,155,209,86,196,252,81,119,32,252,181,140,57,49,237,52,104,132],[140,165,186,116,16,98,53,157,245,217,199,142,161,115,114,221,194,67,98,163,116,163,181,125,131,111,82,85,196,135,232,238,196,41,91,70,108,248,56,177,95,188,175,247,25,75,140,140],[248,206,177,33,228,220,89,185,96,93,96,148,23,202,174,55,90,75,195,211,144,242,7,128,35,218,211,232,4,79,124,221,80,232,14,90,55,249,22,221,223,190,252,251,204,129,185,137],[228,50,29,106,77,15,80,222,29,173,115,20,152,26,88,166,148,248,59,156,245,254,87,124,186,36,41,129,21,52,123,141,189,140,56,74,6,33,75,172,128,149,224,100,58,63,86,176],[59,23,124,22,119,241,178,116,123,33,88,30,0,163,249,200,205,205,95,185,47,87,46,132,148,253,158,48,2,86,41,100,184,105,159,99,81,242,154,127,42,199,73,121,248,237,107,130],[126,159,110,176,120,250,226,236,248,136,101,178,34,99,103,76,70,167,69,239,145,96,102,187,146,45,86,115,196,104,134,245,115,79,210,198,157,202,4,227,208,113,174,141,149,87,240,167],[118,140,141,197,52,93,221,211,148,60,132,33,144,12,237,148,142,172,213,233,234,164,51,224,217,38,152,160,95,16,50,181,184,53,225,135,179,94,126,241,180,171,125,98,48,188,150,139],[77,29,116,228,28,109,82,203,184,211,76,153,196,238,115,156,66,69,103,171,129,4,87,228,192,61,150,115,55,228,164,43,197,151,236,143,19,197,7,135,130,123,168,242,144,236,79,145],[13,8,88,179,229,249,85,48,79,241,22,86,247,29,49,135,1,57,214,74,200,247,79,215,48,35,132,153,179,87,74,19,147,174,55,155,66,247,218,244,17,112,4,235,13,72,252,161],[99,200,240,186,253,114,223,66,193,90,95,89,150,254,187,181,126,178,50,134,24,162,105,220,247,176,228,41,251,197,236,191,21,137,84,48,162,70,204,77,50,31,174,238,47,241,226,151],[233,55,84,159,144,201,98,244,144,34,254,40,218,162,7,116,104,114,102,190,89,220,104,244,121,56,229,156,162,7,118,52,249,45,242,238,94,21,36,230,204,7,120,162,195,240,222,168],[145,235,54,121,238,131,112,247,160,123,231,184,155,186,137,33,233,184,244,241,169,31,39,194,232,114,96,20,135,180,89,204,182,79,249,202,35,48,1,79,64,251,41,64,128,29,238,139],[110,191,196,50,95,28,74,90,132,99,211,167,102,102,160,15,106,61,184,117,218,245,1,101,20,141,20,132,212,162,38,135,38,145,196,86,179,236,4,40,127,228,141,147,111,65,144,143],[118,86,172,95,252,220,234,216,42,214,96,36,159,236,10,241,9,144,83,150,8,246,172,231,246,126,174,209,254,209,114,66,83,104,54,173,243,68,46,35,0,217,239,207,247,1,174,179],[42,213,114,221,194,21,94,57,117,62,199,232,25,194,190,59,174,172,189,29,221,80,113,41,100,95,173,28,166,174,70,23,69,232,21,8,108,56,44,6,195,58,250,247,35,147,165,149],[140,13,142,72,214,138,147,141,77,28,110,104,10,158,53,64,158,111,1,10,198,118,134,192,201,124,102,163,95,191,60,196,8,133,3,226,65,62,150,82,164,73,164,128,154,174,167,138],[201,30,188,189,147,140,176,142,67,130,1,206,144,182,9,86,171,122,59,80,159,159,101,18,74,114,129,243,197,211,162,90,105,110,141,238,72,34,252,129,155,232,206,251,109,40,83,133],[175,159,125,78,69,206,248,243,225,160,67,26,248,67,163,222,29,113,106,36,222,47,104,106,231,77,59,239,138,60,17,129,223,89,81,103,10,60,172,155,64,226,219,178,194,25,91,171],[229,134,163,252,147,227,111,174,20,134,169,112,68,2,112,133,121,115,58,207,215,219,60,255,126,177,157,240,153,157,226,35,221,31,95,231,90,154,142,73,216,166,222,189,134,216,136,172],[179,10,247,115,98,160,25,236,177,82,246,19,160,227,177,140,239,150,11,60,129,50,49,19,5,234,190,235,239,173,160,5,150,120,235,144,147,240,251,229,164,59,39,117,62,165,110,129],[130,214,113,15,116,115,28,164,81,74,87,13,147,253,104,167,44,171,120,79,223,251,236,94,196,152,40,234,154,18,110,11,174,235,110,238,42,66,58,252,202,24,23,87,116,63,72,153],[223,164,130,110,245,55,241,225,38,98,24,174,54,16,112,82,151,42,197,154,173,214,147,187,138,195,202,11,5,17,149,255,220,127,11,120,215,153,37,103,86,154,21,153,75,155,145,180],[148,0,203,138,127,37,105,226,76,171,30,93,137,230,226,1,255,187,220,201,143,224,46,11,133,197,141,227,192,30,74,228,105,74,185,67,190,171,85,33,187,216,217,190,206,100,215,137],[201,204,129,30,110,12,11,124,102,203,139,153,157,11,254,199,35,111,4,13,160,161,250,82,11,174,155,193,46,157,138,29,2,4,240,97,194,51,144,90,47,20,102,157,180,162,89,128],[208,96,33,15,193,211,174,20,73,165,162,98,168,65,19,110,127,241,136,55,39,95,38,35,122,64,210,182,119,191,223,176,101,31,100,32,98,208,2,48,62,159,63,27,48,207,250,164],[233,136,36,29,71,166,86,249,119,230,2,233,242,161,68,153,122,116,115,97,220,250,171,36,240,145,96,210,203,182,151,118,233,45,95,93,23,199,189,84,24,240,28,228,103,157,185,128],[43,152,17,182,242,204,128,124,67,1,212,14,131,37,28,204,155,201,168,115,141,161,22,190,109,228,18,66,115,58,133,114,211,10,78,7,102,149,255,6,169,159,80,189,165,97,237,133],[127,76,225,4,47,188,11,83,249,106,7,36,184,163,205,163,56,97,156,236,45,80,161,125,51,11,82,173,1,5,97,228,199,165,159,20,180,87,98,214,68,131,108,212,157,63,102,161],[189,188,235,114,12,55,186,100,139,24,8,249,236,175,206,26,57,143,234,124,84,160,194,56,68,195,177,133,145,79,243,94,15,126,150,180,46,128,203,226,219,188,233,111,230,225,188,176],[157,185,133,185,1,211,140,57,35,238,215,75,98,176,27,30,212,99,15,179,2,222,169,173,4,156,178,206,65,141,202,45,63,127,141,116,222,161,190,39,219,166,73,195,151,45,90,135],[107,54,93,134,34,50,22,125,114,26,137,227,123,8,254,103,47,235,185,19,28,237,206,42,200,174,61,130,178,218,156,9,214,83,18,71,226,65,63,199,124,246,7,39,113,188,124,167],[115,23,14,129,169,30,200,157,138,223,122,50,162,255,102,224,192,150,155,207,198,191,79,233,13,182,196,215,107,119,176,14,36,129,229,196,126,164,173,93,5,34,38,109,20,121,158,137],[126,243,254,17,30,20,199,178,219,78,154,26,197,185,172,153,192,85,136,63,137,252,107,32,104,13,15,69,141,37,46,245,245,138,63,235,1,193,118,13,222,110,220,198,232,114,207,163],[36,165,51,124,98,25,167,81,79,43,247,151,1,192,32,23,173,229,243,244,180,140,5,139,234,110,94,83,131,187,180,0,212,182,135,99,103,33,188,133,61,133,142,238,16,140,249,138],[110,118,248,106,40,234,38,232,117,244,214,63,216,24,93,211,18,168,141,215,113,242,221,237,185,83,94,129,119,15,62,98,206,183,96,230,205,168,90,39,21,124,92,165,195,3,186,169],[204,250,10,105,29,63,65,204,49,75,207,196,222,105,67,161,28,46,49,34,1,135,13,152,125,16,179,89,119,4,52,23,249,217,38,30,209,7,143,242,76,158,126,20,20,177,148,174],[175,158,135,230,18,89,48,73,107,216,141,95,159,59,204,166,32,67,41,242,249,240,139,31,128,166,66,162,38,251,181,25,171,156,105,54,14,10,196,61,207,202,13,79,44,234,80,174],[63,110,244,76,161,156,78,38,96,134,31,235,42,53,188,34,201,211,167,198,93,238,37,85,142,60,95,151,134,55,204,188,170,76,117,211,5,243,187,72,251,108,11,26,109,70,78,171],[50,150,14,29,183,120,118,220,27,93,216,195,73,31,181,221,130,26,193,138,195,69,41,243,166,235,200,31,233,254,67,93,217,116,79,64,212,82,248,116,166,16,178,115,35,126,102,133],[60,154,7,36,82,44,171,251,157,225,198,99,54,20,204,8,207,200,22,120,243,116,24,216,167,31,246,86,247,27,146,245,160,109,10,221,143,182,164,36,253,77,98,75,104,175,168,170],[161,167,198,170,123,64,102,251,15,227,116,100,231,38,128,62,39,137,107,150,117,144,110,22,63,34,221,219,85,38,160,87,176,10,129,187,243,135,96,107,2,21,182,245,225,139,231,161],[49,176,231,83,197,245,209,226,148,126,198,246,253,78,144,91,95,203,149,18,136,189,149,5,82,138,222,250,127,244,127,243,254,104,170,176,46,146,142,111,239,160,231,94,130,100,252,136],[81,86,76,60,221,65,249,243,108,43,88,252,181,152,79,98,81,184,60,149,135,160,148,217,192,53,194,220,118,165,149,89,31,216,6,230,245,3,228,210,108,32,224,199,81,127,149,141],[102,180,84,116,10,207,31,159,64,70,212,148,25,48,81,87,93,59,255,67,202,129,81,6,86,17,251,115,161,225,45,46,91,187,191,252,211,37,174,26,129,8,115,137,99,76,190,130],[196,206,158,239,26,197,100,119,1,80,123,13,210,178,129,169,248,1,78,54,185,117,105,226,10,165,38,231,206,24,232,195,128,142,99,49,45,86,85,100,237,138,56,61,56,202,164,144],[236,41,202,151,217,116,253,88,58,89,233,6,251,95,223,109,203,185,212,213,210,177,94,201,80,202,124,49,63,140,128,123,8,118,221,158,154,141,109,100,248,192,184,8,103,100,106,185],[62,105,39,91,25,66,147,18,81,102,6,32,95,69,55,33,83,36,62,81,5,81,98,75,255,144,41,157,42,118,157,180,107,230,110,22,225,150,55,214,124,118,227,185,196,251,190,151],[209,178,185,192,163,135,142,39,204,42,236,59,218,48,151,46,165,80,105,254,66,218,3,156,9,246,53,196,216,114,135,117,8,199,37,151,149,253,109,236,166,141,206,203,33,85,229,173],[197,249,211,65,136,183,89,110,196,249,130,104,35,141,74,111,234,144,251,241,109,119,63,244,133,32,93,92,255,124,144,205,153,66,157,89,227,46,58,191,149,200,42,29,169,3,217,164],[215,141,207,75,93,116,111,194,68,112,53,125,186,76,88,96,81,36,127,60,20,233,95,115,77,75,246,12,107,117,51,126,145,188,238,202,35,59,47,245,79,47,114,249,74,132,71,131],[48,217,201,127,73,41,155,201,84,235,62,77,10,45,212,240,83,154,93,143,242,221,171,123,238,169,23,30,238,0,172,134,193,61,76,129,17,82,52,28,46,112,159,229,215,139,59,167],[84,197,159,225,154,176,39,120,21,183,119,65,175,123,158,38,20,193,81,73,126,30,11,195,172,17,109,120,129,96,164,56,165,179,161,97,45,100,208,133,138,16,1,202,199,176,126,129],[75,253,143,49,199,114,102,142,158,200,90,97,140,123,222,157,137,93,35,221,9,6,225,154,28,0,99,155,249,131,158,141,78,132,232,60,91,78,32,46,102,194,199,75,216,148,26,165],[249,14,211,89,223,58,27,105,76,75,13,106,28,134,47,117,6,13,52,173,28,76,94,180,57,92,179,194,189,24,60,200,166,64,30,198,197,240,217,81,193,247,248,180,171,44,0,181],[156,173,198,181,155,173,160,26,156,209,88,92,149,175,223,48,192,199,226,131,201,97,16,2,50,192,193,1,144,198,252,91,69,184,29,86,87,123,89,168,254,138,216,165,32,180,113,138],[132,246,159,240,247,224,175,9,160,75,111,212,26,132,24,208,96,117,12,180,107,20,25,156,4,233,171,169,72,77,12,37,93,143,7,131,119,214,12,61,142,34,166,104,75,49,125,151],[50,200,38,178,181,112,127,24,31,238,85,87,58,137,11,51,207,33,2,107,104,222,141,107,137,118,225,193,248,72,92,145,98,237,241,201,27,245,25,182,174,104,160,185,180,229,178,142],[33,43,126,221,40,23,172,21,198,7,1,235,87,135,26,224,241,20,165,109,223,54,139,154,5,58,60,171,165,47,123,150,204,220,69,3,109,7,247,250,160,178,116,253,190,21,223,138],[45,120,81,139,102,138,58,175,216,75,200,192,38,157,57,138,61,226,3,111,172,65,83,172,30,190,103,207,227,95,117,174,109,144,191,149,18,218,61,117,68,178,144,188,124,109,165,136],[145,5,55,229,198,191,217,13,229,237,166,12,248,65,78,26,231,7,179,118,48,118,17,106,236,196,29,104,170,170,174,182,118,95,114,134,139,26,204,224,153,249,198,10,204,61,209,136],[13,5,177,161,221,148,153,82,221,210,249,174,228,36,241,26,25,230,206,152,163,34,131,132,212,171,68,25,174,253,183,122,254,118,50,252,31,213,134,254,214,194,74,155,114,208,209,176],[154,35,243,124,129,233,238,214,193,250,246,189,167,220,190,70,31,196,212,90,240,87,113,213,150,64,153,150,247,115,59,100,112,5,231,75,59,6,211,177,135,167,49,219,96,162,38,179],[79,83,201,127,174,191,83,220,142,81,243,32,251,253,130,12,192,2,187,243,34,153,202,155,104,97,28,233,78,235,118,228,161,61,13,153,48,51,140,78,151,36,254,222,101,123,132,177],[52,232,212,100,69,98,143,35,61,73,21,27,59,153,237,120,138,195,182,187,253,163,128,180,158,248,196,36,52,135,238,53,37,22,93,253,4,143,168,255,85,252,123,84,173,68,78,177],[5,104,155,20,124,27,21,44,94,109,255,158,15,106,167,57,181,238,234,158,210,109,159,186,172,118,94,223,160,43,231,206,244,152,185,213,45,141,15,121,17,26,171,172,194,179,72,171],[18,82,138,28,69,247,57,9,109,70,157,75,21,72,107,71,27,15,124,137,63,79,153,107,56,37,86,11,187,127,100,98,101,121,56,5,75,242,32,45,7,86,22,164,57,190,195,171],[61,98,87,182,194,59,41,254,249,212,18,186,200,249,214,91,149,131,44,64,253,70,117,50,64,180,249,14,247,19,146,69,234,53,216,223,25,54,83,207,190,107,115,64,57,6,183,183],[135,16,100,185,147,137,34,37,218,135,167,14,180,189,104,107,102,3,184,209,213,84,203,169,113,235,200,129,202,62,18,118,132,197,206,184,143,45,221,246,109,134,107,21,197,69,81,175],[244,198,141,101,83,153,4,162,222,242,101,160,109,195,94,178,62,225,78,37,195,0,195,14,94,201,65,2,215,211,56,155,38,32,190,77,127,165,7,225,242,48,204,171,240,70,62,151],[226,12,231,225,223,215,217,18,196,163,124,158,148,143,68,159,231,221,102,100,127,81,97,125,247,135,83,225,188,165,252,100,131,205,174,218,78,46,73,26,245,171,60,49,141,250,201,164],[27,1,102,133,120,38,90,103,22,35,70,76,152,27,183,6,152,140,105,40,168,98,237,220,39,55,174,154,223,99,101,196,223,33,199,154,202,2,116,219,238,27,156,121,194,193,108,172],[223,233,235,135,235,56,1,107,163,53,138,108,199,174,100,93,29,16,62,144,56,59,153,22,102,2,103,5,149,58,227,156,154,82,125,202,70,122,154,237,224,62,32,42,140,107,80,140],[126,49,20,179,148,183,40,73,220,153,25,177,164,65,201,250,167,21,100,180,226,146,130,63,56,217,251,9,84,133,197,126,31,168,239,99,202,43,214,225,184,66,97,133,189,218,163,169],[202,14,14,157,251,224,199,227,125,19,43,29,94,196,73,26,106,122,51,175,231,63,211,146,111,10,35,206,20,81,32,179,100,39,145,23,247,114,209,114,107,148,23,254,95,117,46,142],[68,177,27,186,201,247,20,19,233,37,104,219,94,148,201,249,167,240,31,23,105,81,177,191,77,206,246,200,133,102,116,106,196,234,89,162,127,61,111,25,212,184,78,45,205,178,216,143],[35,57,162,141,228,207,176,14,60,185,203,115,231,80,246,198,2,92,32,29,54,17,139,237,102,35,223,210,148,90,210,175,25,101,190,52,167,200,153,220,176,121,193,113,132,217,98,136],[200,7,164,18,164,222,246,158,173,139,192,152,92,165,82,161,28,50,56,93,131,164,253,39,49,251,215,149,75,13,166,148,22,70,225,15,184,115,183,218,86,146,21,165,159,228,71,172],[158,32,97,33,176,215,23,3,240,27,220,28,173,13,239,44,105,124,95,150,225,77,2,203,22,210,147,185,142,141,184,49,155,229,165,101,246,168,103,95,33,229,233,191,235,54,141,150],[186,160,230,67,222,205,229,77,226,80,152,54,159,150,6,197,211,76,250,186,113,237,138,247,159,217,203,69,49,8,234,78,6,53,241,143,73,145,216,129,214,184,131,4,78,161,212,133],[242,108,160,115,253,20,164,83,46,8,242,159,16,138,214,107,188,31,154,226,146,136,250,94,87,144,85,8,105,112,224,39,151,119,146,165,136,223,207,252,63,193,12,143,67,28,85,171],[157,240,91,111,46,136,185,178,88,79,133,20,192,109,74,103,226,19,74,231,231,196,227,91,99,229,78,18,211,139,239,133,204,248,229,137,174,122,228,182,227,223,165,0,121,196,41,168],[21,128,124,27,110,84,130,52,66,155,49,129,173,42,229,87,153,104,246,161,139,95,196,205,17,97,164,162,32,150,120,179,244,236,102,142,56,244,254,39,198,195,86,186,201,36,178,172],[109,139,58,49,181,55,156,226,10,164,248,38,253,219,66,43,40,137,79,116,63,246,71,159,204,168,134,224,80,240,65,226,184,50,37,140,35,183,160,69,115,85,22,195,245,184,250,145],[157,43,90,156,122,213,168,1,34,107,162,154,149,46,235,41,176,158,218,252,28,215,58,130,66,28,34,196,240,118,29,251,84,66,112,2,120,169,90,106,213,162,54,240,74,246,162,131],[206,107,192,175,247,120,119,63,64,171,104,76,99,64,181,126,154,41,180,59,71,60,180,104,14,51,169,76,48,2,21,219,181,216,225,68,243,143,146,222,165,40,9,131,255,70,201,151],[221,3,255,33,47,107,230,121,97,209,229,33,117,128,155,76,28,162,14,229,78,67,241,195,201,121,155,218,195,149,126,97,7,75,64,188,165,44,108,235,121,238,115,61,126,103,140,180],[48,71,149,230,162,104,253,99,207,170,104,58,167,40,196,212,146,95,63,109,236,87,39,70,39,49,101,155,233,43,21,27,39,179,154,215,28,195,213,87,193,171,237,244,186,133,107,143],[65,19,145,99,18,90,215,140,114,98,84,22,191,77,113,206,2,187,163,7,202,254,40,27,195,155,128,125,123,173,149,159,193,194,217,188,210,212,174,173,211,43,84,58,35,64,166,182],[100,180,39,249,217,8,140,147,140,37,26,20,160,185,145,177,143,99,234,178,162,128,87,234,232,22,224,122,143,189,141,21,116,111,138,139,219,91,92,11,75,21,206,221,4,184,128,168],[31,51,169,6,210,73,197,224,126,73,59,186,104,119,230,121,8,43,247,171,36,236,43,238,179,92,166,5,189,128,111,226,43,82,237,18,182,20,83,118,84,110,236,100,116,59,147,150],[183,98,83,226,166,163,20,80,124,238,118,142,108,99,8,0,235,170,54,5,59,186,155,219,117,208,130,220,0,44,219,37,170,194,9,219,124,117,244,191,239,166,176,99,232,232,177,165],[181,150,145,0,229,163,63,150,67,149,111,124,226,157,188,106,251,58,86,27,151,110,124,124,92,186,126,190,22,8,34,98,130,4,149,205,129,234,235,42,34,130,99,254,225,154,50,168],[129,130,212,237,4,19,143,162,34,109,126,32,13,109,132,135,24,131,42,94,226,6,227,91,125,63,12,86,220,113,193,96,32,82,233,36,77,49,226,162,236,212,195,237,14,17,45,163],[109,38,171,114,220,174,221,97,230,198,1,170,7,184,107,136,113,230,183,139,104,204,6,18,47,203,220,159,175,40,149,34,231,139,173,200,134,21,13,43,100,134,167,228,253,75,137,151],[6,197,222,3,136,175,84,208,10,212,68,203,118,79,71,188,112,99,103,21,82,116,114,122,223,168,99,208,74,27,145,66,130,96,171,183,143,247,173,42,250,126,243,50,24,144,206,150],[202,195,170,238,2,185,169,249,181,243,138,32,165,111,66,21,94,119,75,40,7,108,92,82,179,148,181,115,237,112,116,242,12,140,191,136,31,29,143,148,18,161,127,250,60,159,34,168],[173,140,72,142,200,228,34,34,16,2,56,43,56,194,240,179,32,47,105,255,113,8,128,212,216,54,42,139,34,50,48,171,243,35,193,238,107,48,19,189,66,22,113,216,27,72,48,181],[194,156,76,221,134,77,151,80,137,72,60,247,114,96,143,136,113,109,176,86,145,124,166,210,11,23,109,184,220,174,191,171,25,118,113,4,175,171,100,154,175,138,212,214,167,181,144,166],[141,67,177,53,57,149,42,31,84,201,82,139,56,171,70,14,18,232,1,37,34,205,131,94,108,219,25,78,37,107,28,77,220,77,20,223,48,156,201,201,179,255,199,44,185,69,241,168],[32,147,77,206,60,56,143,75,222,172,5,51,93,128,14,204,243,92,220,250,100,4,145,174,131,128,231,82,73,204,67,146,252,103,118,3,116,211,134,153,149,253,188,144,203,180,42,184],[126,204,49,218,114,71,53,97,254,180,125,131,38,43,215,161,51,41,156,37,168,130,6,244,132,86,115,50,187,229,93,94,111,182,27,249,10,153,29,53,67,56,31,9,200,52,26,173],[5,234,218,121,8,56,249,101,87,45,203,250,32,86,145,201,136,240,171,40,75,26,82,124,241,167,1,89,159,220,39,90,65,77,107,182,219,120,1,137,80,141,32,239,158,3,140,135],[136,9,233,146,66,51,144,192,39,211,180,188,174,21,174,83,30,219,83,5,157,60,140,12,103,128,34,85,13,30,87,27,195,128,252,217,121,30,163,18,26,141,179,108,163,161,208,138],[119,241,20,163,172,243,169,145,217,219,171,208,93,133,238,69,23,232,101,173,227,81,208,16,141,173,162,77,178,79,249,196,222,110,57,245,224,247,103,107,108,249,202,130,98,143,229,138],[151,40,100,28,255,100,36,192,32,100,129,106,73,103,158,53,183,250,51,176,209,176,55,28,77,125,219,66,140,32,57,92,228,165,149,158,125,69,90,55,17,237,174,95,190,208,249,182],[220,49,102,13,206,45,28,213,126,186,139,181,124,186,104,230,138,161,84,191,129,14,218,7,86,190,24,119,248,46,64,120,224,64,138,15,103,225,111,154,208,19,254,9,97,94,226,183],[132,10,106,197,109,149,90,112,197,9,106,246,93,140,93,7,104,173,36,245,20,125,84,108,96,187,201,52,20,230,10,188,165,30,83,4,49,112,101,161,203,6,129,47,180,149,114,134],[2,247,18,108,215,132,220,159,199,226,208,114,89,97,139,157,217,41,108,157,139,16,5,206,210,73,13,110,239,174,105,132,123,178,18,121,229,131,9,167,176,128,115,149,113,246,115,168],[204,29,110,9,18,156,175,160,23,160,135,130,232,127,147,142,88,124,211,193,20,126,140,250,83,52,50,239,37,27,80,135,111,111,179,42,134,82,115,166,193,29,18,46,209,60,47,149],[7,108,150,13,96,9,27,238,204,255,108,123,181,51,45,0,63,21,246,92,170,237,216,61,80,27,171,73,128,226,25,176,26,157,11,65,133,49,63,95,97,5,170,23,225,63,32,174],[58,177,218,103,29,245,14,18,14,12,130,245,110,185,195,214,210,108,58,240,117,204,95,122,5,65,174,2,30,173,200,43,30,164,174,165,77,151,14,227,113,195,45,84,121,206,123,168],[113,124,78,119,72,23,129,148,185,139,167,26,210,162,138,240,176,222,72,147,8,58,233,85,64,148,37,218,33,60,94,171,224,132,185,238,149,46,59,8,71,15,233,194,16,66,160,139],[134,158,20,33,207,36,173,146,106,46,224,109,44,222,177,61,92,4,244,66,85,147,219,198,117,235,116,110,184,202,97,101,113,22,71,200,111,100,94,74,219,200,99,243,57,246,130,166],[44,67,226,14,122,92,101,229,56,115,211,134,78,162,41,129,112,65,197,210,255,140,80,192,53,130,241,147,44,88,232,35,151,20,64,20,152,38,232,56,154,186,230,142,26,6,59,184],[150,63,63,90,139,200,148,9,88,99,198,199,113,251,160,237,208,151,215,213,115,224,34,19,216,136,149,212,52,140,68,65,178,146,247,96,222,26,195,217,28,156,44,85,199,109,172,146],[100,188,9,144,184,220,9,117,205,156,43,36,43,74,201,6,51,76,96,213,69,79,19,251,95,224,109,27,157,239,226,241,29,65,191,86,170,220,210,236,76,188,255,148,236,103,177,175],[63,78,94,114,233,154,36,25,128,139,84,85,176,130,19,62,4,198,97,98,219,220,82,38,28,1,249,164,17,22,201,205,78,153,214,184,18,43,96,94,71,11,241,195,168,84,247,172],[33,110,14,205,117,188,244,8,105,50,154,40,172,215,242,209,164,100,220,210,187,61,48,7,201,41,166,65,205,112,39,233,88,4,204,65,89,17,79,224,50,200,205,221,95,161,84,174],[205,102,232,233,230,122,180,215,187,213,95,253,186,230,70,98,181,66,203,108,137,10,33,185,34,157,111,244,35,46,88,155,254,143,141,200,251,120,178,48,214,252,160,153,211,237,69,170],[9,102,200,194,238,196,178,77,50,240,54,144,25,130,98,224,182,228,207,22,65,159,172,64,105,123,88,1,250,104,94,182,110,81,208,83,51,8,192,65,24,26,43,151,148,112,95,141],[7,220,43,215,16,69,92,251,99,193,211,128,185,120,24,63,251,153,125,216,6,178,216,118,54,233,122,30,95,231,43,122,169,164,119,136,180,18,160,31,56,227,46,120,156,8,122,183],[164,197,139,66,144,73,88,8,198,31,241,75,217,225,95,233,212,7,118,190,138,18,39,132,157,165,24,189,152,56,207,116,227,232,22,29,251,172,174,99,179,96,116,229,78,20,12,148],[102,108,195,173,121,10,81,211,91,130,232,213,136,100,219,156,62,211,148,35,118,63,179,160,123,255,120,249,4,38,213,231,189,137,202,166,250,137,13,69,44,80,145,5,200,139,17,166],[160,83,64,117,143,138,214,218,71,115,200,214,146,4,238,212,56,125,173,24,96,166,228,97,65,65,141,90,210,19,30,20,247,21,111,125,85,226,97,37,109,20,22,57,161,148,123,131],[64,99,48,78,229,143,38,16,248,194,19,201,114,82,220,233,71,182,56,192,240,54,39,127,134,180,169,175,126,106,192,89,126,215,219,85,10,200,122,37,92,207,96,198,165,11,69,129],[197,69,123,32,182,42,24,231,85,114,237,87,96,53,163,164,231,181,1,126,232,218,232,2,144,209,40,129,236,154,222,69,227,18,72,207,199,16,161,226,254,12,110,232,146,183,19,171],[247,190,215,203,172,250,131,16,195,201,29,162,93,205,249,149,202,244,71,142,0,202,102,68,91,180,166,113,245,32,99,216,150,19,226,78,47,124,166,230,79,21,122,143,4,138,68,168],[230,178,8,187,226,29,114,63,79,230,214,179,241,209,254,184,42,202,255,90,87,104,148,77,146,65,104,169,0,99,199,181,230,67,174,22,61,151,170,163,155,164,27,205,243,53,83,149],[19,246,91,100,67,237,42,25,36,253,194,72,200,138,111,53,16,117,147,107,96,98,78,109,46,183,97,61,120,79,35,161,204,128,116,212,12,199,100,166,120,139,60,182,45,177,21,183],[126,102,188,26,144,231,60,0,82,181,250,204,237,20,2,206,162,79,196,213,200,182,179,171,156,201,80,8,137,229,19,123,41,61,29,26,240,144,133,135,85,85,190,188,95,252,216,182],[34,201,244,20,93,139,26,97,208,10,231,57,101,188,90,193,248,56,72,120,141,248,227,4,69,74,231,16,221,124,130,191,136,3,53,27,180,175,156,166,184,197,197,129,205,115,38,153],[71,56,159,102,174,128,7,42,13,39,198,154,16,242,140,111,103,24,167,196,35,102,40,182,213,255,172,95,167,77,55,205,174,0,208,167,211,106,60,158,60,149,39,239,238,236,25,143],[75,95,50,137,33,243,244,141,9,0,103,125,22,187,137,100,149,114,145,224,212,184,8,187,230,235,120,233,81,106,79,49,116,40,70,28,111,88,70,168,216,210,225,123,49,211,179,176],[206,7,110,181,61,132,176,234,136,50,158,242,11,98,111,14,95,39,203,136,5,205,39,99,232,5,177,221,103,16,121,23,102,3,95,203,53,244,138,10,68,189,251,255,87,206,209,180],[163,230,19,221,253,160,6,46,213,156,203,204,150,74,239,33,46,122,81,17,206,209,116,223,68,60,11,121,250,175,221,193,30,110,83,121,148,60,145,210,21,46,233,117,146,120,178,184],[219,91,24,44,207,249,92,48,200,168,114,76,72,56,11,76,125,25,122,121,123,119,237,241,247,188,199,210,167,96,85,123,182,14,211,191,85,88,55,106,73,8,127,205,123,202,63,182],[185,154,12,254,187,69,136,126,36,143,172,45,80,108,221,174,63,136,154,108,208,87,116,94,228,122,99,253,253,103,179,201,180,14,115,22,151,92,233,25,4,60,9,33,137,146,147,135],[176,10,82,62,179,190,192,120,230,239,200,107,174,5,131,222,168,203,75,91,106,21,112,61,113,73,49,120,53,37,143,46,207,217,135,94,5,60,172,238,165,114,248,21,183,87,24,151],[161,15,211,253,54,165,90,165,202,183,170,49,215,101,217,252,223,139,90,98,121,85,229,136,6,188,14,163,187,1,151,47,40,215,76,152,198,0,68,13,149,12,229,35,236,254,168,153],[3,76,215,241,188,252,182,237,64,172,98,200,162,62,54,55,194,115,128,210,251,109,141,121,64,200,122,88,165,136,223,208,181,197,4,237,73,23,53,106,180,238,23,176,90,255,213,148],[160,210,94,142,18,229,132,0,121,199,228,42,36,209,229,41,6,242,159,224,21,83,250,136,28,170,30,24,10,124,36,89,116,125,69,61,195,107,249,179,238,173,203,145,244,191,28,182],[193,102,187,156,160,146,124,149,134,88,205,211,24,245,3,197,200,236,96,52,202,204,1,9,198,176,143,52,90,102,122,254,146,111,167,110,49,62,85,246,53,198,39,250,37,197,125,138],[64,46,28,185,206,137,209,111,43,215,223,71,148,113,76,128,2,47,172,129,245,184,231,193,108,76,13,183,8,182,200,86,224,170,133,215,73,91,168,67,128,79,167,253,9,44,110,169],[220,115,113,110,39,56,128,138,4,136,190,84,9,118,42,27,100,20,0,144,219,132,85,19,177,4,72,181,60,173,185,16,226,37,210,175,185,223,0,180,170,211,181,28,175,167,28,146],[56,48,170,204,127,133,11,213,66,68,131,50,95,84,13,125,221,79,229,17,217,191,155,24,170,254,249,130,68,50,151,28,233,233,166,70,195,115,87,15,199,183,248,66,64,158,158,172],[196,68,129,82,114,0,10,151,238,189,156,205,123,127,183,2,135,57,132,217,170,230,176,252,233,141,237,180,237,179,223,105,146,168,16,245,234,120,85,211,73,218,131,12,13,8,191,164],[45,239,11,75,30,7,137,250,158,100,17,158,42,224,183,20,128,200,28,115,122,60,67,83,73,101,178,188,27,232,97,35,42,50,228,188,206,187,102,165,46,49,201,191,77,235,143,179],[186,29,58,61,11,67,218,58,78,236,113,238,145,227,142,25,101,208,94,131,124,227,236,151,13,146,253,12,150,34,83,66,168,253,5,120,202,84,26,133,157,54,171,45,109,74,152,172],[48,111,73,0,76,70,106,199,28,19,225,158,115,168,115,42,184,191,151,78,51,134,10,239,148,240,150,213,203,229,174,163,55,94,209,186,40,141,223,31,69,190,147,170,114,20,114,132],[176,130,246,95,191,138,116,197,40,37,202,27,91,171,135,3,136,208,204,152,31,153,225,226,12,8,105,9,238,84,191,227,51,150,82,42,120,84,102,189,75,13,192,201,181,195,121,185],[212,186,46,71,35,72,173,228,106,230,20,158,122,163,62,3,74,79,35,68,68,231,62,141,34,92,165,240,126,42,203,110,28,187,162,63,112,115,230,88,201,181,48,151,249,150,250,173],[159,200,105,15,144,14,5,178,179,202,147,4,173,173,211,55,174,24,115,170,71,132,218,36,148,91,141,203,46,213,161,53,67,23,198,5,95,108,172,40,109,34,230,126,45,206,211,173],[103,141,213,86,173,52,154,68,219,193,209,229,5,234,4,79,205,128,108,91,226,115,49,113,220,85,122,203,44,91,179,232,192,158,190,129,161,204,249,170,236,3,111,87,23,69,75,175],[243,192,60,172,90,51,11,48,216,107,163,185,114,62,63,230,65,76,39,169,183,79,59,93,170,144,169,1,63,221,124,251,103,236,70,211,169,4,103,140,7,210,68,28,218,71,5,143],[108,72,87,239,81,124,82,163,62,28,141,236,26,95,202,76,16,78,164,102,38,39,219,123,160,101,158,100,5,19,120,115,13,58,162,50,38,173,139,126,192,36,126,86,244,16,11,179],[170,189,172,93,251,234,1,180,169,118,234,225,122,195,231,123,212,190,56,168,107,6,204,134,149,55,18,136,81,127,160,31,33,82,202,202,41,81,48,99,116,224,109,3,142,162,160,167],[189,43,74,238,164,215,71,86,90,86,238,25,177,196,166,90,250,20,239,61,165,79,46,127,177,3,200,250,100,52,248,177,99,38,33,171,43,51,201,14,114,116,197,177,145,48,80,151],[6,19,181,242,186,21,24,182,217,60,19,64,74,203,132,249,137,166,250,143,3,210,25,27,3,181,127,129,64,70,226,63,223,88,206,246,26,242,82,177,78,130,171,219,114,214,255,149],[227,121,225,249,198,9,69,199,208,143,227,61,187,155,110,4,63,27,57,185,255,78,23,91,62,31,240,182,211,236,54,243,51,164,71,92,216,81,226,239,100,133,88,254,93,170,47,139],[250,129,12,248,135,157,57,146,245,233,124,153,217,197,173,96,232,153,184,148,151,147,14,229,160,20,251,31,218,32,176,37,18,120,113,144,35,71,77,224,220,215,247,195,181,217,203,160],[239,100,108,241,125,52,31,178,109,126,104,76,112,9,151,102,86,24,149,130,201,146,70,11,218,193,138,84,120,164,226,44,190,12,26,134,214,215,243,75,200,160,140,158,179,236,74,137],[253,211,38,182,159,85,154,12,178,178,235,209,161,12,186,140,159,223,116,15,164,205,149,34,182,140,88,66,84,90,1,254,220,158,168,38,112,231,88,103,93,161,190,197,114,6,16,136],[206,241,5,65,244,126,51,255,119,194,184,165,223,233,108,87,33,102,109,5,159,3,25,124,80,132,211,87,95,129,71,142,136,88,63,106,232,221,243,102,243,237,90,2,16,126,187,176],[170,246,166,105,139,183,178,13,179,223,20,137,209,172,157,135,132,134,137,74,215,97,135,118,110,167,60,253,251,89,242,42,224,248,20,143,151,56,109,162,132,182,92,206,175,150,85,137],[250,44,6,163,194,91,72,32,13,53,164,161,50,158,163,72,0,5,198,104,229,122,101,141,180,94,52,190,246,166,11,66,58,84,17,107,8,19,35,155,82,243,118,60,136,235,63,140],[83,66,62,107,126,19,65,105,109,103,177,44,110,39,97,106,221,128,128,67,62,247,239,67,29,188,63,17,53,91,97,63,144,9,248,202,56,153,221,4,16,146,182,33,37,214,240,166],[127,21,52,216,108,157,86,104,140,33,204,112,132,37,22,243,34,154,167,144,109,35,101,118,138,215,20,0,58,29,21,207,84,211,148,119,53,77,34,159,135,228,112,27,127,99,141,139],[61,0,209,222,216,50,141,105,211,247,144,46,19,11,187,77,96,226,104,245,48,173,198,50,199,115,237,128,178,131,108,181,71,213,0,109,145,93,119,232,243,57,55,29,14,214,8,165],[39,56,206,152,237,232,108,67,98,200,76,150,156,237,8,1,124,210,27,253,15,210,136,166,168,76,53,184,198,235,177,183,105,128,239,240,81,67,2,184,183,52,246,200,158,154,164,161],[213,214,189,41,216,102,86,211,218,10,250,155,174,140,69,245,113,251,130,21,173,130,3,169,92,202,123,120,141,96,74,104,105,53,106,76,171,67,11,255,197,153,188,153,195,220,118,169],[64,0,140,86,29,149,63,221,118,11,88,117,187,165,93,17,208,243,235,185,123,158,96,68,14,70,74,132,245,235,112,49,216,5,80,72,222,64,191,139,58,41,23,251,225,202,12,162],[221,167,165,25,6,116,113,167,202,84,26,92,253,86,248,226,227,147,151,132,110,99,26,172,201,115,189,124,24,203,99,185,185,104,193,47,224,60,248,140,124,229,150,158,245,74,141,171],[116,17,36,180,107,224,143,28,94,195,254,250,117,221,253,55,129,105,206,174,138,22,22,76,46,76,86,181,125,157,214,196,74,130,221,159,13,130,230,140,150,127,118,184,195,168,241,160],[9,85,151,230,122,119,90,122,95,25,59,29,215,208,221,161,225,208,3,57,201,179,28,168,187,133,62,151,201,226,228,127,216,50,65,45,149,88,178,77,246,98,112,98,46,190,20,160],[45,91,115,41,170,86,160,234,217,173,62,130,195,123,93,186,218,158,211,77,246,188,108,195,195,83,71,207,46,89,1,36,218,109,18,38,207,38,193,177,179,116,26,95,174,65,246,162],[44,18,233,253,69,219,247,160,97,36,253,119,168,241,133,61,29,177,145,250,224,18,94,190,76,117,8,169,153,137,218,152,248,164,221,187,237,210,205,178,225,233,123,191,240,3,166,168],[242,88,156,188,3,79,153,45,68,32,56,184,133,118,209,93,122,127,141,134,200,221,121,188,108,141,152,42,222,250,233,68,12,209,4,23,66,218,145,113,240,160,226,84,28,175,11,181],[21,232,198,183,122,173,61,155,170,83,237,157,21,70,225,57,130,191,242,157,108,140,244,125,224,137,240,121,108,254,168,80,0,237,55,9,36,241,102,42,214,18,26,95,101,132,101,176],[111,7,227,16,126,10,212,35,161,140,96,42,149,226,39,196,210,60,89,51,144,119,146,113,222,64,182,195,120,90,141,26,28,6,17,155,223,240,127,211,34,14,126,22,137,13,109,173],[146,166,240,209,81,56,16,34,84,14,67,119,75,249,23,20,92,26,108,166,246,203,139,135,180,192,122,209,197,83,147,222,228,49,170,129,153,29,113,132,39,14,49,82,235,110,214,175],[4,193,214,61,161,76,143,243,42,124,139,72,121,102,118,132,194,158,45,52,46,225,245,213,123,168,92,233,17,87,185,156,132,48,133,71,242,2,110,16,207,237,125,151,179,214,85,146],[72,17,168,203,75,179,26,79,77,12,37,105,63,253,18,172,227,156,174,136,163,97,225,249,21,173,119,70,140,189,111,66,185,115,182,7,59,120,84,97,88,145,186,130,160,225,22,148],[152,128,178,225,90,212,101,8,143,22,35,237,182,45,141,126,56,251,208,74,18,249,207,220,180,139,230,72,155,130,75,139,189,0,51,78,57,150,7,130,52,20,210,253,118,227,246,150],[118,125,122,110,209,128,168,53,184,184,209,209,181,236,191,177,161,173,75,113,152,50,51,215,199,0,124,4,189,223,42,79,183,229,161,234,252,200,150,188,129,5,224,231,17,71,215,131],[72,248,58,174,153,68,43,62,127,141,186,50,233,109,198,7,135,100,98,82,67,41,50,136,32,212,38,197,107,39,148,74,79,174,0,219,244,218,117,177,121,123,214,110,4,81,86,150],[102,5,163,216,194,161,232,212,109,162,23,11,245,208,223,113,175,31,174,169,83,100,19,150,122,230,212,164,203,159,186,192,114,209,185,46,235,237,43,134,228,219,110,138,124,75,125,168],[169,193,112,196,184,47,97,125,58,19,221,161,15,206,166,77,182,156,17,214,245,156,28,199,65,16,100,137,15,37,95,219,248,61,47,211,94,4,39,92,234,131,172,170,184,69,223,129],[184,208,155,245,182,73,67,65,112,156,239,107,167,107,254,205,226,212,45,10,7,35,207,124,85,210,190,238,143,159,175,98,181,183,8,223,135,20,5,141,252,142,77,69,116,71,14,148],[203,126,121,64,251,213,177,81,35,114,38,219,86,190,207,74,151,187,233,1,67,73,232,93,129,122,158,33,140,152,212,213,219,192,28,43,86,65,208,173,55,74,152,244,211,145,191,152],[172,82,72,202,29,45,88,186,243,219,96,205,234,233,170,161,111,139,148,71,141,31,141,71,84,229,124,70,159,46,139,117,195,43,169,88,163,233,74,45,78,202,161,9,205,43,47,139],[156,163,94,205,1,34,241,7,117,250,92,170,103,2,48,234,76,115,253,112,77,216,99,185,190,36,169,84,122,137,189,156,40,67,232,255,83,78,96,58,161,243,57,60,42,74,177,142],[250,231,203,241,112,213,97,246,70,79,57,85,220,87,247,176,24,53,115,23,233,35,13,139,168,81,37,226,2,126,223,125,125,148,231,193,82,244,170,61,144,155,217,105,213,37,200,149],[249,86,66,207,29,170,248,212,121,173,102,157,229,53,32,72,36,108,151,75,168,68,211,111,163,148,40,217,168,44,55,97,74,160,205,64,140,230,241,212,162,116,90,242,206,209,175,140],[226,182,44,161,101,190,194,120,181,68,173,61,197,249,243,140,196,191,117,17,39,49,156,216,178,187,86,143,247,27,121,56,173,173,194,22,14,18,135,51,22,128,109,179,123,87,63,160],[198,243,201,112,35,64,115,118,91,113,169,255,126,179,206,228,35,172,15,73,120,134,36,239,232,89,168,254,154,178,215,69,74,157,175,120,166,61,1,67,216,114,117,23,169,113,133,165],[30,10,83,107,224,17,229,17,149,46,117,54,1,155,86,247,188,189,191,222,135,116,148,246,75,149,58,176,60,104,168,0,223,77,249,187,216,252,7,146,43,208,218,123,249,218,212,176],[129,135,218,87,224,234,125,179,111,10,38,38,21,135,78,40,85,144,240,146,54,239,16,13,51,214,45,240,253,84,224,228,15,65,106,168,181,117,132,51,255,65,191,255,211,187,22,130],[54,11,18,212,193,139,61,95,176,123,172,71,126,244,138,30,109,18,16,10,159,1,222,81,62,170,96,81,157,180,184,209,96,76,241,121,198,222,174,20,124,218,243,164,162,170,9,176],[65,100,93,218,116,111,36,105,245,247,197,190,240,206,49,224,24,32,222,98,35,70,24,145,221,45,19,170,170,201,191,76,42,138,233,10,149,11,57,183,165,107,34,3,221,33,178,184],[181,15,97,201,135,20,36,162,92,51,94,88,54,27,62,47,226,70,128,46,33,81,114,36,254,31,143,218,172,122,144,7,239,67,145,0,102,28,180,45,94,89,229,163,81,173,33,147],[252,153,196,138,70,122,0,135,232,232,123,203,66,137,84,24,46,138,42,252,94,220,170,92,149,59,171,44,237,46,136,177,68,74,96,222,116,241,56,9,39,227,56,73,160,55,155,133],[15,108,31,94,39,48,183,62,125,86,26,172,144,115,195,108,228,229,21,93,50,27,110,6,85,62,187,198,27,24,13,97,62,230,239,139,213,68,254,154,68,167,159,242,205,158,33,182],[160,69,160,172,130,147,209,99,73,88,20,170,99,140,48,83,134,29,98,168,111,221,174,210,146,44,150,3,109,156,111,20,214,83,19,52,236,61,173,222,247,255,45,168,34,218,68,169],[202,171,41,132,246,35,249,189,134,157,90,198,105,122,200,7,36,87,108,18,54,254,123,159,54,141,30,73,9,98,12,91,228,145,125,134,87,98,202,101,189,143,12,38,204,79,139,160],[240,178,181,227,75,190,232,243,172,106,247,133,245,122,214,221,118,146,64,162,110,191,197,14,70,1,165,175,201,187,158,174,67,34,159,59,250,26,231,216,53,65,164,244,228,3,123,178],[227,165,247,107,103,91,57,206,161,190,130,116,87,214,109,66,117,43,14,38,65,127,27,87,1,192,15,203,60,27,47,129,172,26,33,10,138,75,69,149,161,107,191,140,91,135,234,143],[53,229,135,71,166,180,85,44,53,222,97,173,247,2,149,145,64,185,61,67,242,115,139,184,78,34,178,23,125,194,133,48,29,22,134,63,15,7,96,108,35,68,117,41,70,244,220,183],[24,238,210,119,63,87,186,39,72,4,126,115,190,96,20,4,159,177,94,176,228,166,223,118,92,116,8,2,70,152,49,228,173,60,32,254,93,36,128,123,159,48,61,229,192,27,130,161],[143,103,171,52,37,225,80,192,57,24,146,203,163,54,41,216,106,28,245,159,143,32,77,208,217,83,123,185,34,47,179,63,190,80,234,196,171,152,122,207,190,51,186,239,228,50,149,138],[12,238,142,164,238,123,210,241,7,20,42,5,126,1,144,71,192,99,160,143,1,21,215,207,177,89,167,49,145,85,75,227,56,246,20,50,173,13,121,183,151,246,87,200,185,221,135,170],[133,86,138,43,140,194,204,232,234,249,206,238,248,149,125,43,19,203,132,202,152,218,221,159,34,142,78,13,22,164,202,179,140,69,210,217,247,235,158,159,43,100,64,249,212,91,68,136],[124,83,78,229,158,55,61,106,232,172,109,26,206,22,235,93,2,34,121,144,16,84,153,95,35,206,97,213,250,117,25,64,215,27,182,129,250,150,134,221,0,151,160,155,46,157,177,144],[52,157,207,232,35,62,176,206,184,164,176,86,234,209,139,201,32,1,156,208,253,143,103,62,149,92,24,69,71,188,149,158,105,4,1,36,149,187,98,84,72,192,120,14,200,143,174,161],[150,66,217,93,51,68,140,168,19,216,10,140,254,198,143,24,16,21,67,112,11,185,114,236,6,72,82,5,37,25,216,88,234,219,13,222,9,137,73,210,10,250,39,198,101,181,166,139],[78,0,3,186,162,2,151,86,20,36,221,18,94,199,85,161,118,77,79,189,120,52,110,112,71,90,44,190,243,33,239,108,113,56,36,93,186,58,107,80,97,8,152,145,164,80,97,169],[120,211,227,243,130,150,14,200,127,243,152,144,195,36,11,87,59,145,56,83,108,102,151,253,150,101,152,194,52,179,176,34,46,62,3,186,0,49,8,54,186,2,54,176,66,152,70,185],[153,136,230,85,8,82,90,194,129,63,14,139,42,84,20,218,130,109,143,255,110,1,186,47,38,194,100,155,63,25,210,88,179,209,219,83,13,242,132,26,230,242,156,181,155,233,101,133]] \ No newline at end of file