diff --git a/.github/workflows/node-clickhouse.js.yml b/.github/workflows/node-clickhouse.js.yml index 4a7d6f45..df94db04 100644 --- a/.github/workflows/node-clickhouse.js.yml +++ b/.github/workflows/node-clickhouse.js.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [18, 16, 20] + node-version: [18, 20, 22] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ services: clickhouse: diff --git a/.gitignore b/.gitignore index c2bb70cb..5732e78e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ node_modules /wasm_parts/vendor/ /wasm_parts/main.wasm /wasm_parts/wasm_parts.iml +/test/qryn_test_env/clickhouse/_data/ +/test/qryn_test_env/grafana/_data/ +/test/qryn_test_cluster_env/grafana/_data/ diff --git a/Dockerfile b/Dockerfile index 4e382c1c..74252f82 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # qryn -FROM node:20.10-slim +FROM node:20.17-slim COPY . /app WORKDIR /app diff --git a/lib/db/maintain/scripts.js b/lib/db/maintain/scripts.js index aac4b8ad..1311c878 100644 --- a/lib/db/maintain/scripts.js +++ b/lib/db/maintain/scripts.js @@ -198,7 +198,7 @@ module.exports.traces = [ ] module.exports.overall_dist = [ - `CREATE TABLE {{DB}}.metrics_15s_dist {{{OnCluster}}} ( + `CREATE TABLE IF NOT EXISTS {{DB}}.metrics_15s_dist {{{OnCluster}}} ( \`fingerprint\` UInt64, \`timestamp_ns\` Int64 CODEC(DoubleDelta), \`last\` AggregateFunction(argMax, Float64, Int64), diff --git a/lib/handlers/push.js b/lib/handlers/push.js index 8437c9f9..bc5ea0b7 100644 --- a/lib/handlers/push.js +++ b/lib/handlers/push.js @@ -71,7 +71,7 @@ function processStream (stream, labels, bulkLabels, bulk, toJSON, fingerPrint) { values.push([ finger, ts, - (typeof entry.value === 'undefined') ? null : entry.value, + (typeof entry.value !== 'number') ? 0 : entry.value, entry.line || '', type === 3 ? bothType : type ]) @@ -98,7 +98,7 @@ function processStream (stream, labels, bulkLabels, bulk, toJSON, fingerPrint) { values.push([ finger, BigInt(value[0]), - (typeof value[2] === 'undefined') ? null : value[2], + (typeof value[2] !== 'number') ? 0 : value[2], value[1] || '', type === 3 ? bothType : type ]) diff --git a/package-lock.json b/package-lock.json index 88a35fe6..5320c6e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5141,9 +5141,9 @@ } }, "node_modules/find-my-way": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.0.tgz", - "integrity": "sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", + "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", diff --git a/parser/registry/common.js b/parser/registry/common.js index 0f0273ca..80fd2384 100644 --- a/parser/registry/common.js +++ b/parser/registry/common.js @@ -445,7 +445,7 @@ module.exports.preJoinLabels = (token, query, dist) => { dist = dist || '' const timeSeriesReq = new Sql.Select() .select('fingerprint', 'labels') - .from([`${DATABASE_NAME()}.time_series${dist}`, 'time_series']) + .from([`${DATABASE_NAME()}.time_series`, 'time_series']) .where(new Sql.And( new Sql.In('time_series.fingerprint', 'in', inRightSide), Sql.Gte(new Sql.Raw('date'), sqlFrom), diff --git a/parser/registry/smart_optimizations/optimization_v3_2.js b/parser/registry/smart_optimizations/optimization_v3_2.js index ff7a7b03..a74295fd 100644 --- a/parser/registry/smart_optimizations/optimization_v3_2.js +++ b/parser/registry/smart_optimizations/optimization_v3_2.js @@ -1,4 +1,4 @@ -const { getDuration, preJoinLabels, dist } = require('../common') +const { getDuration, preJoinLabels, dist, sharedParamNames } = require('../common') const reg = require('./log_range_agg_reg_v3_2') const Sql = require('@cloki/clickhouse-sql') const { DATABASE_NAME, checkVersion } = require('../../../lib/utils') @@ -44,6 +44,8 @@ function isLogPipeline (token) { */ module.exports.apply = (token, fromNS, toNS, stepNS) => { fromNS = Math.floor(fromNS / 15000000000) * 15000000000 + const fromParam = new Sql.Parameter(sharedParamNames.from) + const toParam = new Sql.Parameter(sharedParamNames.to) const tsClause = toNS ? Sql.between('samples.timestamp_ns', fromNS, toNS) : Sql.Gt('samples.timestamp_ns', fromNS) @@ -51,17 +53,21 @@ module.exports.apply = (token, fromNS, toNS, stepNS) => { .select(['samples.fingerprint', 'fingerprint']) .from([`${DATABASE_NAME()}.metrics_15s${_dist}`, 'samples']) .where(tsClause) + .addParam(fromParam) + .addParam(toParam) + fromParam.set(fromNS) + toParam.set(toNS) q.ctx = { step: stepNS / 1000000000, inline: !!clusterName } - preJoinLabels(token, q, dist) - for (const streamSelectorRule of token.Children('log_stream_selector_rule')) { q = streamSelectorReg[streamSelectorRule.Child('operator').value](streamSelectorRule, q) } + preJoinLabels(token, q, dist) + q = q.groupBy('labels') const lra = token.Child('log_range_aggregation') q = reg[lra.Child('log_range_aggregation_fn').value](lra, q) diff --git a/promql/index.js b/promql/index.js index b98ec9e4..a0090ceb 100644 --- a/promql/index.js +++ b/promql/index.js @@ -60,7 +60,9 @@ module.exports.series = async (query, fromMs, toMs) => { const data = await rawRequest(req.toString() + ' FORMAT JSON', null, DATABASE_NAME()) - return data.data.data.map(l => JSON.parse(l.labels)) + return data.data.data.map(l => + Object.fromEntries(Object.entries(JSON.parse(l.labels)).filter(e => e[1])) + ) } catch (e) { if (e instanceof prometheus.WasmError) { throw new PSQLError(e.message) diff --git a/pyroscope/pprof-bin/Cargo.toml b/pyroscope/pprof-bin/Cargo.toml index 776d8439..0dc29124 100644 --- a/pyroscope/pprof-bin/Cargo.toml +++ b/pyroscope/pprof-bin/Cargo.toml @@ -27,9 +27,15 @@ flate2 = "1.0" # code size when deploying. console_error_panic_hook = { version = "0.1.7", optional = true } base64 = "0.22.1" +memchr = "2.7.4" [dev-dependencies] wasm-bindgen-test = "0.3.34" +criterion = { version = "0.5.1", features = ["html_reports"] } + +[[bench]] +name = "my_benchmark" +harness = false [profile.release] # Tell `rustc` to optimize for small code size. diff --git a/pyroscope/pprof-bin/benches/my_benchmark.rs b/pyroscope/pprof-bin/benches/my_benchmark.rs new file mode 100644 index 00000000..0b6f988f --- /dev/null +++ b/pyroscope/pprof-bin/benches/my_benchmark.rs @@ -0,0 +1,18 @@ +use pprof_bin::merge_prof; +use pprof_bin::utest::get_test_pprof_data; +use criterion::{black_box, criterion_group, criterion_main, Criterion}; + +fn merge_bench(pprofs: &Vec>) { + + for pprof in pprofs { + merge_prof(0, pprof.as_slice(), "process_cpu:samples:count:cpu:nanoseconds".to_string()); + } +} + +fn criterion_benchmark(c: &mut Criterion) { + let pprofs = get_test_pprof_data(); + c.bench_function("merge", |b| b.iter(|| merge_bench(&pprofs))); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); \ No newline at end of file diff --git a/pyroscope/pprof-bin/pkg/pprof_bin_bg.wasm b/pyroscope/pprof-bin/pkg/pprof_bin_bg.wasm index 930457c9..0ee3ff45 100644 Binary files a/pyroscope/pprof-bin/pkg/pprof_bin_bg.wasm and b/pyroscope/pprof-bin/pkg/pprof_bin_bg.wasm differ diff --git a/pyroscope/pprof-bin/src/lib.rs b/pyroscope/pprof-bin/src/lib.rs index a22a99ab..a6f264f7 100644 --- a/pyroscope/pprof-bin/src/lib.rs +++ b/pyroscope/pprof-bin/src/lib.rs @@ -1,8 +1,8 @@ #![allow(unused_assignments)] mod ch64; mod merge; +pub mod utest; -use std::cmp::Ordering; use ch64::city_hash_64; use ch64::read_uint64_le; use lazy_static::lazy_static; @@ -11,20 +11,17 @@ use pprof_pb::google::v1::Location; use pprof_pb::google::v1::Profile; use pprof_pb::google::v1::Sample; use pprof_pb::querier::v1::FlameGraph; +use pprof_pb::querier::v1::FlameGraphDiff; use pprof_pb::querier::v1::Level; use pprof_pb::querier::v1::SelectMergeStacktracesResponse; -use pprof_pb::querier::v1::FlameGraphDiff; use prost::Message; -use std::collections::{HashMap, HashSet}; +use std::collections::{HashMap, HashSet, VecDeque}; use std::io::Read; use std::panic; +use std::sync::Arc; use std::sync::Mutex; use std::vec::Vec; use wasm_bindgen::prelude::*; -use std::sync::Arc; - -//TODO: REMOVE -use std::fs; pub mod pprof_pb { @@ -81,264 +78,257 @@ struct Tree { } impl Tree { - pub fn total(&self) -> i64 { - let mut total: i64 = 0; - if !self.nodes.contains_key(&0) { - return 0 as i64; - } - for c in 0..self.nodes.get(&0).unwrap().len() { - let _c = &self.nodes.get(&0).unwrap()[c]; - total += _c.total[0]; + pub fn total(&self) -> Vec { + if let Some(children) = self.nodes.get(&0) { + let mut total = vec![0; children[0].total.len()]; + for child in children.iter() { + for (t, &child_total) in total.iter_mut().zip(&child.total) { + *t += child_total; + } + } + total + } else { + Vec::new() } - total } + pub fn add_name(&mut self, name: String, name_hash: u64) { - if self.names_map.contains_key(&name_hash) { - return; + if let std::collections::hash_map::Entry::Vacant(entry) = self.names_map.entry(name_hash) { + self.names.push(name); + entry.insert(self.names.len() - 1); } - self.names.push(name); - self.names_map.insert(name_hash, self.names.len() - 1); } } -fn find_node(id: u64, nodes: &Vec>) -> i32 { - let mut n: i32 = -1; - for c in 0..nodes.len() { - let _c = &nodes[c]; - if _c.node_id == id { - n = c as i32; - break; - } - } - n +fn find_node(id: u64, nodes: &[Arc]) -> Option { + nodes.iter().position(|node| node.node_id == id) } fn get_node_id(parent_id: u64, name_hash: u64, level: u16) -> u64 { - let mut node_bytes: [u8; 16] = [0; 16]; - for i in 0..8 { - node_bytes[i] = ((parent_id >> (i * 8)) & 0xFF) as u8; - } - for i in 0..8 { - node_bytes[i + 8] = ((name_hash >> (i * 8)) & 0xFF) as u8; - } - let mut _level = level; - if _level > 511 { - _level = 511; - } - (city_hash_64(&node_bytes[0..]) >> 9) | ((_level as u64) << 55) + let mut node_bytes = [0u8; 16]; + node_bytes[..8].copy_from_slice(&parent_id.to_le_bytes()); + node_bytes[8..].copy_from_slice(&name_hash.to_le_bytes()); + + let adjusted_level = level.min(511); + (city_hash_64(&node_bytes) >> 9) | ((adjusted_level as u64) << 55) } struct MergeTotalsProcessor { - from_idx: Vec, + from_idx: Vec>, } impl MergeTotalsProcessor { fn new(tree: &Tree, p: &Profile) -> MergeTotalsProcessor { - let mut from_idx: Vec = vec![-1; tree.sample_types.len()]; - for i in 0..tree.sample_types.len() { - let sample_type_to = &tree.sample_types[i]; - for j in 0..p.sample_type.len() { - let sample_type_from = format!( - "{}:{}", - p.string_table[p.sample_type[j].r#type as usize], - p.string_table[p.sample_type[j].unit as usize] - ); - if sample_type_from == *sample_type_to { - from_idx[i] = j as i32; - break; - } - } - } + let from_idx: Vec> = tree + .sample_types + .iter() + .map(|sample_type_to| { + p.sample_type.iter().position(|sample_type| { + let sample_type_from = format!( + "{}:{}", + p.string_table[sample_type.r#type as usize], + p.string_table[sample_type.unit as usize] + ); + sample_type_from == *sample_type_to + }) + }) + .collect(); + MergeTotalsProcessor { from_idx } } fn merge_totals( &self, node: Arc, - _max_self: &Vec, + max_self: &mut Vec, sample: &Sample, merge_self: bool, - ) -> (TreeNodeV2, Vec) { - let mut max_self = _max_self.clone(); + ) -> TreeNodeV2 { let mut res: TreeNodeV2 = TreeNodeV2 { fn_id: node.fn_id, node_id: node.node_id, slf: vec![0; node.slf.len()], total: vec![0; node.slf.len()], }; - for i in 0..self.from_idx.len() { - if self.from_idx[i] == -1 { - continue; - } - res.total[i] += sample.value[self.from_idx[i] as usize]; - if merge_self { - res.slf[i] += sample.value[self.from_idx[i] as usize]; - for i in 0..max_self.len() { + + for (i, opt_idx) in self.from_idx.iter().enumerate() { + if let Some(from_idx) = opt_idx { + res.total[i] += sample.value[*from_idx]; + if merge_self { + res.slf[i] += sample.value[*from_idx]; if max_self[i] < node.slf[i] { max_self[i] = node.slf[i]; } } } } - (res, max_self) + + res } } fn merge(tree: &mut Tree, p: &Profile) { - let mut functions: HashMap = HashMap::new(); - for f in p.function.iter() { - functions.insert(f.id, &f); - } - let mut locations: HashMap = HashMap::new(); - for l in p.location.iter() { - locations.insert(l.id, &l); - } + let functions: HashMap = p.function.iter().map(|f| (f.id, f)).collect(); + let locations: HashMap = p.location.iter().map(|l| (l.id, l)).collect(); + + let merge_processor = MergeTotalsProcessor::new(tree, p); + + for location in &p.location { + if let Some(function) = functions.get(&location.line[0].function_id) { + let line = &p.string_table[function.name as usize]; + let line_hash = city_hash_64(line.as_bytes()); - let m = MergeTotalsProcessor::new(tree, p); - for l in p.location.iter() { - let line = &p.string_table[functions[&l.line[0].function_id].name as usize]; - let line_hash = city_hash_64(line.as_bytes()); - if tree.names_map.contains_key(&line_hash) { - continue; + if let std::collections::hash_map::Entry::Vacant(entry) = + tree.names_map.entry(line_hash) + { + tree.names.push(line.clone()); + entry.insert(tree.names.len() - 1); + } } - tree.names.push(line.clone()); - tree.names_map.insert(line_hash, tree.names.len() - 1); } - for s in p.sample.iter() { + for sample in &p.sample { let mut parent_id: u64 = 0; - for i in (0..s.location_id.len()).rev() { - let location = locations[&s.location_id[i]]; - let name = &p.string_table[functions[&location.line[0].function_id].name as usize]; - let name_hash = city_hash_64(name.as_bytes()); - let node_id = get_node_id(parent_id, name_hash, (s.location_id.len() - i) as u16); - if !tree.nodes.contains_key(&parent_id) && tree.nodes_num < 2000000 { - tree.nodes.insert(parent_id, Vec::new()); - } - let mut fake_children: Vec> = Vec::new(); - let children = tree.nodes.get_mut(&parent_id).unwrap_or(&mut fake_children); - let mut n = find_node(node_id, children); - if n == -1 { - children.push(Arc::new(TreeNodeV2 { - //parent_id, - fn_id: name_hash, - node_id, - slf: vec![0; tree.sample_types.len()], - total: vec![0; tree.sample_types.len()], - })); - let idx = children.len().clone() - 1; - let new_node_and_max_self = m.merge_totals( - children.get(idx).unwrap().clone(), - tree.max_self.as_ref(), - s, - i == 0, - ); - children[idx] = Arc::new(new_node_and_max_self.0); - tree.max_self = new_node_and_max_self.1; - n = idx as i32; - } else if tree.nodes_num < 2000000 { - m.merge_totals( - children.get_mut(n as usize).unwrap().clone(), - &tree.max_self, - s, - i == 0, - ); - tree.nodes_num += 1; + + for (i, &location_id) in sample.location_id.iter().enumerate().rev() { + if let Some(location) = locations.get(&location_id) { + if let Some(function) = functions.get(&location.line[0].function_id) { + let name = &p.string_table[function.name as usize]; + let name_hash = city_hash_64(name.as_bytes()); + let node_id = + get_node_id(parent_id, name_hash, (sample.location_id.len() - i) as u16); + + let children = tree.nodes.entry(parent_id).or_insert_with(Vec::new); + + match find_node(node_id, children) { + Some(index) => { + if tree.nodes_num < 2_000_000 { + let updated_node = merge_processor.merge_totals( + children[index].clone(), + &mut tree.max_self, + sample, + i == 0, + ); + children[index] = Arc::new(updated_node); + tree.nodes_num += 1; + } + } + None => { + if tree.nodes_num < 2_000_000 { + let new_node = TreeNodeV2 { + fn_id: name_hash, + node_id, + slf: vec![0; tree.sample_types.len()], + total: vec![0; tree.sample_types.len()], + }; + + let new_node_arc = Arc::new(new_node); + let updated_node = merge_processor.merge_totals( + new_node_arc.clone(), + &mut tree.max_self, + sample, + i == 0, + ); + + children.push(Arc::new(updated_node)); + tree.nodes_num += 1; + } + } + } + + parent_id = node_id; + } } - parent_id = node_id; } } } fn read_uleb128(bytes: &[u8]) -> (usize, usize) { - let mut result = 0; + let mut result = 0usize; let mut shift = 0; - loop { - let byte = bytes[shift]; - result |= ((byte & 0x7f) as usize) << (shift * 7); - shift += 1; + + for (index, &byte) in bytes.iter().enumerate() { + result |= ((byte & 0x7f) as usize) << shift; + shift += 7; + if byte & 0x80 == 0 { - break; + return (result, index + 1); } } - (result, shift) + + (result, bytes.len()) } fn bfs(t: &Tree, res: &mut Vec, sample_type: String) { - let mut total: i64 = 0; - let mut root_children: &Vec> = &Vec::new(); - if t.nodes.contains_key(&(0u64)) { - root_children = t.nodes.get(&(0u64)).unwrap(); - } + let sample_type_index = match t.sample_types.iter().position(|x| x == &sample_type) { + Some(index) => index, + None => return, + }; - let mut _sample_type_index: i32 = -1; - for i in 0..t.sample_types.len() { - if t.sample_types[i] == sample_type { - _sample_type_index = i as i32; - break; - } - } - if _sample_type_index == -1 { - return; - } - let sample_type_index = _sample_type_index as usize; + let empty_vec = Vec::new(); + let root_children = t.nodes.get(&0u64).unwrap_or(&empty_vec); - for i in root_children.iter() { - total += i.total[sample_type_index]; - } - let mut lvl = Level::default(); - lvl.values.extend([0, total, 0, 0]); - res.push(lvl); + let total: i64 = root_children + .iter() + .map(|child| child.total[sample_type_index]) + .sum(); + + res.push(Level { + values: vec![0, total, 0, 0], + }); let mut totals = vec![0; t.sample_types.len()]; totals[sample_type_index] = total; - let total_node: TreeNodeV2 = TreeNodeV2 { + + let total_node = TreeNodeV2 { slf: vec![0; t.sample_types.len()], total: totals, node_id: 0, fn_id: 0, - //parent_id: 0 }; - let mut prepend_map: HashMap = HashMap::new(); + let mut prepend_map: HashMap = HashMap::new(); let mut reviewed: HashSet = HashSet::new(); - let mut refs: Vec<&TreeNodeV2> = vec![&total_node]; - let mut ref_len: usize = 1; - while ref_len > 0 { + let mut current_level_nodes = vec![&total_node]; + + while !current_level_nodes.is_empty() { + let mut next_level_nodes = Vec::new(); let mut prepend: i64 = 0; - let _refs = refs.clone(); - refs.clear(); - lvl = Level::default(); - for parent in _refs.iter() { - prepend += prepend_map.get(&parent.node_id).unwrap_or(&0); - let opt = t.nodes.get(&parent.node_id); - - if opt.is_none() { + let mut lvl = Level::default(); + + for parent in current_level_nodes { + prepend += *prepend_map.get(&parent.node_id).unwrap_or(&0); + + if let Some(children) = t.nodes.get(&parent.node_id) { + for child in children { + if !reviewed.insert(child.node_id) { + // Loop detected, exit early + return; + } + + prepend_map.insert(child.node_id, prepend); + next_level_nodes.push(child.as_ref()); + + lvl.values.extend_from_slice(&[ + prepend, + child.total[sample_type_index], + child.slf[sample_type_index], + *t.names_map.get(&child.fn_id).unwrap_or(&1) as i64, + ]); + + prepend = 0; + } + } else { prepend += parent.total[sample_type_index]; continue; } - for n in opt.unwrap().iter() { - if reviewed.contains(&n.node_id) { - // PANIC!!! WE FOUND A LOOP - return; - } else { - reviewed.insert(n.node_id); - } - prepend_map.insert(n.node_id, prepend); - refs.push(n); - lvl.values.extend([ - prepend as i64, - n.total[sample_type_index], - n.slf[sample_type_index], - *t.names_map.get(&n.fn_id).unwrap_or(&1) as i64, - ]); - prepend = 0; - } + prepend += parent.slf[sample_type_index]; } - res.push(lvl.clone()); - ref_len = refs.len(); + + res.push(lvl); + current_level_nodes = next_level_nodes; } } @@ -396,22 +386,6 @@ impl TrieReader { string } - /*fn read_blob(&mut self) -> &[u8] { - let size = self.read_size(); - let string = &self.bytes[self.offs..self.offs + size]; - self.offs += size; - string - } - - fn read_string_vec(&mut self) -> Vec { - let mut res = Vec::new(); - let size = self.read_size(); - for _ in 0..size { - res.push(self.read_string()); - } - res - }*/ - fn read_blob_vec(&mut self) -> Vec<&[u8]> { let mut res = Vec::new(); let size = self.read_size(); @@ -443,179 +417,74 @@ impl TrieReader { } res } - /*fn end(&self) -> bool { - self.offs >= self.bytes.len() - }*/ } -fn merge_trie(tree: &mut Tree, bytes: &[u8], samples_type: &String) { - let _sample_type_index = tree.sample_types.iter().position(|x| x == samples_type); - if _sample_type_index.is_none() { - return; - } - let sample_type_index = _sample_type_index.unwrap(); +fn merge_trie(tree: &mut Tree, bytes: &[u8], sample_type: &str) { + let sample_type_index = match tree.sample_types.iter().position(|x| x == sample_type) { + Some(index) => index, + None => return, + }; + let mut reader = TrieReader::new(bytes); - let mut size = reader.read_size(); - for _i in 0..size { + + for _ in 0..reader.read_size() { let id = reader.read_uint64_le(); let func = reader.read_string(); - if !tree.names_map.contains_key(&id) && tree.names.len() < 2000000 { - tree.names.push(func); - tree.names_map.insert(id, tree.names.len() - 1); + if tree.names_map.len() < 2_000_000 { + if !tree.names_map.contains_key(&id) { + tree.names.push(func); + tree.names_map.insert(id, tree.names.len() - 1); + } } } - size = reader.read_size(); - for _i in 0..size { + for _ in 0..reader.read_size() { let parent_id = reader.read_uint64_le(); let fn_id = reader.read_uint64_le(); let node_id = reader.read_uint64_le(); - let _slf = reader.read_uint64_le() as i64; - let _total = reader.read_uint64_le() as i64; - if tree.max_self[sample_type_index] < _slf { - tree.max_self[sample_type_index] = _slf; + let slf_value = reader.read_uint64_le() as i64; + let total_value = reader.read_uint64_le() as i64; + + if tree.max_self[sample_type_index] < slf_value { + tree.max_self[sample_type_index] = slf_value; } + let mut slf = vec![0; tree.sample_types.len()]; - slf[sample_type_index] = _slf; + slf[sample_type_index] = slf_value; + let mut total = vec![0; tree.sample_types.len()]; - total[sample_type_index] = _total; - let mut n: i32 = -1; - if tree.nodes.contains_key(&parent_id) { - n = find_node(node_id, tree.nodes.get(&parent_id).unwrap()); - } - if n != -1 { - let mut __node = tree.nodes.get_mut(&parent_id).unwrap().get_mut(n as usize).unwrap().clone(); - let mut _node = __node.as_ref().clone(); - _node.total[sample_type_index] += total[sample_type_index]; - _node.slf[sample_type_index] += slf[sample_type_index]; - tree.nodes.get_mut(&parent_id).unwrap()[n as usize] = Arc::new(_node); + total[sample_type_index] = total_value; + + if let Some(children) = tree.nodes.get_mut(&parent_id) { + if let Some(pos) = find_node(node_id, children) { + let node_arc = &children[pos]; + let mut node = node_arc.as_ref().clone(); + + node.slf[sample_type_index] += slf_value; + node.total[sample_type_index] += total_value; + + children[pos] = Arc::new(node); + continue; + } } - if tree.nodes_num >= 2000000 { + + if tree.nodes_num >= 2_000_000 { return; } - if !tree.nodes.contains_key(&parent_id) { - tree.nodes.insert(parent_id, Vec::new()); - } - tree.nodes.get_mut(&parent_id).unwrap().push(Arc::new(TreeNodeV2 { + + let children = tree.nodes.entry(parent_id).or_insert_with(Vec::new); + children.push(Arc::new(TreeNodeV2 { fn_id, - //parent_id, node_id, slf, total, })); + tree.nodes_num += 1; } } -/*fn upsert_string(prof: &mut Profile, s: String) -> i64 { - let mut idx = 0; - for i in 0..prof.string_table.len() { - if prof.string_table[i] == s { - idx = i as i64; - break; - } - } - if idx == 0 { - idx = prof.string_table.len() as i64; - prof.string_table.push(s); - } - idx -}*/ - -/*fn upsert_function(prof: &mut Profile, fn_id: u64, fn_name_id: i64) { - for f in prof.function.iter() { - if f.id == fn_id { - return; - } - } - let mut func = Function::default(); - func.name = fn_name_id; - func.id = fn_id; - func.filename = upsert_string(prof, "unknown".to_string()); - func.system_name = upsert_string(prof, "unknown".to_string()); - prof.function.push(func); -}*/ - -/*fn inject_locations(prof: &mut Profile, tree: &Tree) { - for n in tree.names_map.iter() { - let hash = *n.1 as u64; - let name = tree.names[hash as usize].clone(); - let fn_idx = upsert_string(prof, name); - upsert_function(prof, *n.0, fn_idx); - let mut loc = Location::default(); - let mut line = Line::default(); - line.function_id = *n.0; - loc.id = *n.0; - loc.line = vec![line]; - prof.location.push(loc) - } -}*/ - -/*fn upsert_sample(prof: &mut Profile, loc_id: Vec, val: i64, val_idx: i64) -> i64 { - let mut idx = -1; - for i in 0..prof.sample.len() { - if prof.sample[i].location_id.len() != loc_id.len() { - continue; - } - let mut found = true; - for j in 0..prof.sample[i].location_id.len() { - if prof.sample[i].location_id[j] != loc_id[j] { - found = false; - break; - } - } - if found { - idx = i as i64; - break; - } - } - if idx == -1 { - let mut sample = Sample::default(); - sample.location_id = loc_id.clone(); - sample.location_id.reverse(); - idx = prof.sample.len() as i64; - prof.sample.push(sample); - } - while prof.sample[idx as usize].value.len() <= val_idx as usize { - prof.sample[idx as usize].value.push(0) - } - prof.sample[idx as usize].value[val_idx as usize] += val; - idx -}*/ - -/*fn inject_functions( - prof: &mut Profile, - tree: &Tree, - parent_id: u64, - loc_ids: Vec, - val_idx: i64, -) { - if !tree.nodes.contains_key(&parent_id) { - return; - } - let children = tree.nodes.get(&parent_id).unwrap(); - for node in children.iter() { - let mut _loc_ids = loc_ids.clone(); - _loc_ids.push(node.fn_id); - //TODO: - upsert_sample(prof, _loc_ids.clone(), node.slf[0 /*TODO*/] as i64, val_idx); - if tree.nodes.contains_key(&node.node_id) { - inject_functions(prof, tree, node.node_id, _loc_ids, val_idx); - } - } -}*/ - -/*fn merge_profile(tree: &Tree, prof: &mut Profile, sample_type: String, sample_unit: String) { - let mut value_type = ValueType::default(); - value_type.r#type = upsert_string(prof, sample_type); - value_type.unit = upsert_string(prof, sample_unit); - prof.sample_type.push(value_type); - let type_idx = prof.sample_type.len() as i64 - 1; - inject_locations(prof, tree); - inject_functions(prof, tree, 0, vec![], type_idx); -}*/ - -fn assert_positive(t: &Tree) -> bool{ +fn assert_positive(t: &Tree) -> bool { for n in t.nodes.keys() { for _n in 0..t.nodes.get(&n).unwrap().len() { for __n in 0..t.nodes.get(&n).unwrap()[_n].slf.len() { @@ -661,253 +530,223 @@ pub fn merge_tree(id: u32, bytes: &[u8], sample_type: String) { #[wasm_bindgen] pub fn diff_tree(id1: u32, id2: u32, sample_type: String) -> Vec { let mut ctx = CTX.lock().unwrap(); - let _ctx = &mut ctx; - upsert_tree(_ctx, id1, vec![sample_type.clone()]); - upsert_tree(_ctx, id2, vec![sample_type.clone()]); - let mut t1 = _ctx.get(&id1).unwrap().lock().unwrap(); - let mut t2 = _ctx.get(&id2).unwrap().lock().unwrap(); - let mut is_positive = assert_positive(&t1); - if !is_positive { - panic!("Tree 1 is not positive"); - } - is_positive = assert_positive(&t2); - if!is_positive { - panic!("Tree 2 is not positive"); - } - - - for n in t1.names_map.keys() { - if !t2.names_map.contains_key(&n) { - t2.names.push(t1.names[*t1.names_map.get(&n).unwrap()].clone()); - let idx = t2.names.len() - 1; - t2.names_map.insert(*n, idx); - } + upsert_tree(&mut ctx, id1, vec![sample_type.clone()]); + upsert_tree(&mut ctx, id2, vec![sample_type.clone()]); + + let mut t1 = ctx.get(&id1).unwrap().lock().unwrap(); + let mut t2 = ctx.get(&id2).unwrap().lock().unwrap(); + + assert_tree_positive(&t1, "Tree 1"); + assert_tree_positive(&t2, "Tree 2"); + + synchronize_names(&mut t1, &mut t2); + merge_nodes(&mut t1, &mut t2); + + let flame_graph_diff = compute_flame_graph_diff(&t1, &t2); + + flame_graph_diff.encode_to_vec() +} + +fn assert_tree_positive(tree: &Tree, tree_name: &str) { + if !assert_positive(tree) { + panic!("{} is not positive", tree_name); } - for n in t2.names_map.keys() { - if !t1.names_map.contains_key(&n) { - let idx = t2.names_map.get(&n).unwrap().clone(); - t1.names.push(t2.names[idx].clone()); - let idx2 = t1.names.len() - 1; - t1.names_map.insert(*n, idx2); +} + +fn synchronize_names(t1: &mut Tree, t2: &mut Tree) { + let mut names_to_add_to_t2 = vec![]; + for (&id, &idx) in &t1.names_map { + if !t2.names_map.contains_key(&id) { + names_to_add_to_t2.push((id, t1.names[idx].clone())); } } - let keys = t1.nodes.keys().map(|x| (*x).clone()).collect::>(); - for n in keys { - if !t2.nodes.contains_key(&n) { - t2.nodes.insert(n, vec![]); - } - let lnodes = t1.nodes.get_mut(&n).unwrap(); - let rnodes = t2.nodes.get_mut(&n).unwrap(); - lnodes.sort_by(|x, y| - if x.node_id < y.node_id { Ordering::Less } else { Ordering::Greater }); - rnodes.sort_by(|x, y| - if x.node_id < y.node_id { Ordering::Less } else { Ordering::Greater }); - let mut i = 0; - let mut j = 0; - let mut new_t1_nodes: Vec> = vec![]; - let mut new_t2_nodes: Vec> = vec![]; - let t1_nodes = t1.nodes.get(&n).unwrap(); - let t2_nodes = t2.nodes.get(&n).unwrap(); - while i < t1_nodes.len() && j < t2_nodes.len() { - if n == 0 { - println!("{:?}:{:?} - {:?}:{:?}", - t1_nodes[i].node_id, - t1.names[*t1.names_map.get(&t1_nodes[i].fn_id).unwrap() as usize], - t2_nodes[j].node_id, - t2.names[*t2.names_map.get(&t2_nodes[j].fn_id).unwrap() as usize] - ) - } + for (id, name) in names_to_add_to_t2 { + let idx = t2.names.len(); + t2.names.push(name); + t2.names_map.insert(id, idx); + } - if t1_nodes[i].node_id == t2_nodes[j].node_id { - new_t1_nodes.push(t1_nodes[i].clone()); - new_t2_nodes.push(t2_nodes[j].clone()); - i += 1; - j += 1; - continue; - } - if t1_nodes[i].node_id < t2_nodes[j].node_id { - new_t1_nodes.push(t1_nodes[i].clone()); - new_t2_nodes.push(Arc::new(TreeNodeV2{ - node_id: t1_nodes[i].node_id, - fn_id: t1_nodes[i].fn_id, - slf: vec![0], - total: vec![0], - })); - i += 1; - } else { - new_t2_nodes.push(t2_nodes[j].clone()); - new_t1_nodes.push(Arc::new(TreeNodeV2{ - node_id: t2_nodes[j].node_id, - fn_id: t2_nodes[j].fn_id, - slf: vec![0], - total: vec![0], - })); - j += 1; - } + let mut names_to_add_to_t1 = vec![]; + for (&id, &idx) in &t2.names_map { + if !t1.names_map.contains_key(&id) { + names_to_add_to_t1.push((id, t2.names[idx].clone())); } - while i < t1_nodes.len() { + } + + for (id, name) in names_to_add_to_t1 { + let idx = t1.names.len(); + t1.names.push(name); + t1.names_map.insert(id, idx); + } +} + +fn merge_nodes(t1: &mut Tree, t2: &mut Tree) { + let mut keys: HashSet = HashSet::new(); + keys.extend(t1.nodes.keys()); + keys.extend(t2.nodes.keys()); + + for key in keys { + let t1_children = t1.nodes.entry(key).or_insert_with(Vec::new); + let t2_children = t2.nodes.entry(key).or_insert_with(Vec::new); + + t1_children.sort_by_key(|n| n.node_id); + t2_children.sort_by_key(|n| n.node_id); + + let (new_t1_nodes, new_t2_nodes) = merge_children(t1_children, t2_children); + t1.nodes.insert(key, new_t1_nodes); + t2.nodes.insert(key, new_t2_nodes); + } +} + +fn merge_children( + t1_nodes: &[Arc], + t2_nodes: &[Arc], +) -> (Vec>, Vec>) { + let mut new_t1_nodes = Vec::new(); + let mut new_t2_nodes = Vec::new(); + let mut i = 0; + let mut j = 0; + + while i < t1_nodes.len() && j < t2_nodes.len() { + if t1_nodes[i].node_id == t2_nodes[j].node_id { new_t1_nodes.push(t1_nodes[i].clone()); - new_t2_nodes.push(Arc::new(TreeNodeV2{ - node_id: t1_nodes[i].node_id, - fn_id: t1_nodes[i].fn_id, - slf: vec![0], - total: vec![0], - })); + new_t2_nodes.push(t2_nodes[j].clone()); i += 1; - } - while j < t2_nodes.len() { + j += 1; + } else if t1_nodes[i].node_id < t2_nodes[j].node_id { + new_t1_nodes.push(t1_nodes[i].clone()); + new_t2_nodes.push(create_empty_node(&t1_nodes[i])); + i += 1; + } else { new_t2_nodes.push(t2_nodes[j].clone()); - new_t1_nodes.push(Arc::new(TreeNodeV2{ - node_id: t2_nodes[j].node_id, - fn_id: t2_nodes[j].fn_id, - slf: vec![0], - total: vec![0], - })); - j+=1; - } - t1.nodes.insert(n, new_t1_nodes); - t2.nodes.insert(n, new_t2_nodes); - } - - for n in t2.nodes.keys().clone() { - if!t1.nodes.contains_key(&n) { - let mut new_t1_nodes: Vec> = vec![]; - for _n in t2.nodes.get(&n).unwrap() { - new_t1_nodes.push(Arc::new(TreeNodeV2{ - node_id: _n.node_id, - fn_id: _n.fn_id, - slf: vec![0], - total: vec![0], - })) - } - t1.nodes.insert(*n, new_t1_nodes); + new_t1_nodes.push(create_empty_node(&t2_nodes[j])); + j += 1; } } - let total_left = t1.total(); - let total_right = t2.total(); - let mut min_val = 0 as i64; - let tn = Arc::new(TreeNodeV2{ + while i < t1_nodes.len() { + new_t1_nodes.push(t1_nodes[i].clone()); + new_t2_nodes.push(create_empty_node(&t1_nodes[i])); + i += 1; + } + + while j < t2_nodes.len() { + new_t2_nodes.push(t2_nodes[j].clone()); + new_t1_nodes.push(create_empty_node(&t2_nodes[j])); + j += 1; + } + + (new_t1_nodes, new_t2_nodes) +} + +fn create_empty_node(node: &Arc) -> Arc { + Arc::new(TreeNodeV2 { + node_id: node.node_id, + fn_id: node.fn_id, + slf: vec![0], + total: vec![0], + }) +} + +fn compute_flame_graph_diff(t1: &Tree, t2: &Tree) -> FlameGraphDiff { + let mut res = FlameGraphDiff::default(); + res.left_ticks = t1.total()[0]; + res.right_ticks = t2.total()[0]; + res.total = res.left_ticks + res.right_ticks; + + let mut left_nodes: VecDeque> = VecDeque::new(); + left_nodes.push_back(Arc::new(TreeNodeV2 { fn_id: 0, node_id: 0, slf: vec![0], - total: vec![total_left], - }); - let mut left_nodes = vec![tn]; - let tn2 = Arc::new(TreeNodeV2{ + total: vec![res.left_ticks], + })); + + let mut right_nodes: VecDeque> = VecDeque::new(); + right_nodes.push_back(Arc::new(TreeNodeV2 { fn_id: 0, node_id: 0, slf: vec![0], - total: vec![total_right], - }); - let mut right_nodes = vec![tn2]; - - let mut x_left_offsets = vec![0 as i64]; - let mut x_right_offsets = vec![0 as i64]; - let mut levels = vec![0 as i64]; + total: vec![res.right_ticks], + })); + + let mut levels = vec![0]; + let mut x_left_offsets: VecDeque = VecDeque::new(); + x_left_offsets.push_back(0); + let mut x_right_offsets = VecDeque::new(); + x_right_offsets.push_back(0); let mut name_location_cache: HashMap = HashMap::new(); - let mut res = FlameGraphDiff::default(); - res.left_ticks = total_left; - res.right_ticks = total_right; - res.total = total_left + total_right; - while left_nodes.len() > 0 { - let left = left_nodes.pop().unwrap(); - let right = right_nodes.pop().unwrap(); - let mut x_left_offset = x_left_offsets.pop().unwrap(); - let mut x_right_offset = x_right_offsets.pop().unwrap(); + + while let (Some(left), Some(right)) = + (left_nodes.pop_back(), right_nodes.pop_back()) { + let mut x_left_offset = x_left_offsets.pop_back().unwrap().clone(); + let mut x_right_offset = x_right_offsets.pop_back().unwrap().clone(); let level = levels.pop().unwrap(); - let mut name: String = "total".to_string(); - if left.fn_id != 0 { - name = t1.names[t1.names_map.get(&left.fn_id).unwrap().clone() as usize].clone(); - } - if left.total[0] >= min_val || right.total[0] >= min_val || name == "other" { - let mut i = 0 as i64; - if !name_location_cache.contains_key(&name) { - res.names.push(name.clone().to_string()); - name_location_cache.insert(name, (res.names.len() - 1) as i64); - i = res.names.len() as i64 - 1; - } else { - i = *name_location_cache.get(name.as_str()).unwrap(); - } - if level == res.levels.len() as i64 { - res.levels.push(Level::default()) - } - if res.max_self < left.slf[0] { - res.max_self = left.slf[0]; - } - if res.max_self < right.slf[0] { - res.max_self = right.slf[0]; - } - let mut values = vec![x_left_offset, left.total[0], left.slf[0], - x_right_offset, right.total[0], right.slf[0], i]; - res.levels[level as usize].values.extend(values); - let mut other_left_total = 0 as i64; - let mut other_right_total = 0 as i64; - let mut nodes_len = 0; - if t1.nodes.contains_key(&left.node_id) { - nodes_len = t1.nodes.get(&left.node_id).unwrap().len().clone(); - } - for j in 0..nodes_len { - let _left = t1.nodes.get(&left.node_id).unwrap()[j].clone(); - let _right = t2.nodes.get(&left.node_id).unwrap()[j].clone(); - if _left.total[0] >= min_val || _right.total[0] >= min_val { - levels.insert(0, level + 1); - x_left_offsets.insert(0, x_left_offset); - x_right_offsets.insert(0, x_right_offset); - x_left_offset += _left.total[0].clone() as i64; - x_right_offset += _right.total[0].clone() as i64; - left_nodes.insert(0, _left.clone()); - right_nodes.insert(0, _right.clone()); - } else { - other_left_total += _left.total[0] as i64; - other_right_total += _right.total[0] as i64; - } - if other_left_total > 0 || other_right_total > 0 { - levels.insert(0, level + 1); - t1.add_name("other".to_string(), 1); - x_left_offsets.insert(0, x_left_offset); - left_nodes.insert(0, Arc::new(TreeNodeV2{ - fn_id: 1, - node_id: 1, - slf: vec![other_left_total as i64], - total: vec![other_left_total as i64], - })); - t2.add_name("other".to_string(), 1); - x_right_offsets.insert(0, x_right_offset); - right_nodes.insert(0, Arc::new(TreeNodeV2{ - fn_id: 1, - node_id: 1, - slf: vec![other_right_total as i64], - total: vec![other_right_total as i64], - })); - } + + let name = if left.fn_id == 0 { + "total".to_string() + } else { + t1.names[*t1.names_map.get(&left.fn_id).unwrap()].clone() + }; + + let name_idx = *name_location_cache.entry(name.clone()).or_insert_with(|| { + res.names.push(name); + (res.names.len() - 1) as i64 + }); + + if res.levels.len() <= level { + res.levels.push(Level::default()); + } + + if res.max_self < left.slf[0] { + res.max_self = left.slf[0]; + } + if res.max_self < right.slf[0] { + res.max_self = right.slf[0]; + } + + res.levels[level].values.extend_from_slice(&[ + x_left_offset, + left.total[0], + left.slf[0], + x_right_offset, + right.total[0], + right.slf[0], + name_idx, + ]); + + if let Some(children_left) = t1.nodes.get(&left.node_id) { + let empty_vec = Vec::new(); + let children_right = t2.nodes.get(&right.node_id).unwrap_or(&empty_vec); + for (child_left, child_right) in children_left.iter().zip(children_right.iter()) { + left_nodes.push_front(child_left.clone()); + right_nodes.push_front(child_right.clone()); + x_left_offsets.push_front(x_left_offset.clone()); + x_right_offsets.push_front(x_right_offset.clone()); + x_left_offset += child_left.total[0].clone(); + x_right_offset += child_right.total[0].clone(); + levels.insert(0,level + 1); } } - } + for i in 0..res.levels.len() { let mut j = 0; - let mut prev = 0 as i64; + let mut prev0 = 0i64; + let mut prev3 = 0i64; while j < res.levels[i].values.len() { - res.levels[i].values[j] -= prev; - prev += res.levels[i].values[j] + res.levels[i].values[j+1]; - j += 7; - } - prev = 0; - j = 3; - while j < res.levels[i].values.len() { - res.levels[i].values[j] -= prev; - prev += res.levels[i].values[j] + res.levels[i].values[j+1]; + res.levels[i].values[j] -= prev0; + prev0 += res.levels[i].values[j] + res.levels[i].values[j+1]; + res.levels[i].values[j+3] -= prev3; + prev3 += res.levels[i].values[j+3] + res.levels[i].values[j+4]; j += 7; } } - res.encode_to_vec() + res } - - #[wasm_bindgen] pub fn export_tree(id: u32, sample_type: String) -> Vec { let p = panic::catch_unwind(|| { @@ -953,11 +792,10 @@ pub fn merge_trees_pprof(id: u32, payload: &[u8]) { decoder.read_to_end(&mut decompressed).unwrap(); let mut prof = Profile::decode(std::io::Cursor::new(decompressed)).unwrap(); merger.merge(&mut prof); - }else { + } else { let mut prof = Profile::decode(bin_prof).unwrap(); merger.merge(&mut prof); } - } let res = merger.profile(); tree.pprof = res; diff --git a/pyroscope/pprof-bin/src/utest.rs b/pyroscope/pprof-bin/src/utest.rs new file mode 100644 index 00000000..0efef076 --- /dev/null +++ b/pyroscope/pprof-bin/src/utest.rs @@ -0,0 +1,1881 @@ +#![allow(unused_assignments)] +use std::io::Read; +use crate::{merge_prof, CTX}; + +pub fn get_test_pprof_data() -> Vec> { + let pprofs_vec = TEST_PPROFS + .split(&"*******************") + .collect::>(); + let mut pprofs: Vec> = Vec::new(); + for pprof in pprofs_vec { + // Parsing HTTP request to get pprof data + let head_body = pprof.split(&"BODY:").collect::>(); + if head_body.len() < 2 { + continue; + } + let mut boundary = ""; + for hdr in head_body[0].split(&"\n").collect::>() { + if !hdr.starts_with("Content-Type: multipart/form-data; boundary=") { + continue; + } + boundary = &hdr[44..]; + } + let body = base64::decode(head_body[1].replace("\n", "").trim()).unwrap(); + let boundary_bytes = format!("--{}", boundary); + let parts = memchr::memmem::find_iter(&body, boundary_bytes.as_bytes()) + .fold((Vec::new(), 0), |(mut acc, last), pos| { + if pos > last { + acc.push(&body[last..pos]); + } + (acc, pos + boundary_bytes.len()) + }) + .0; + let pprof = &parts[0][118..]; + let mut decoder = flate2::read::GzDecoder::new(pprof); + let mut decompressed = Vec::new(); + decoder.read_to_end(&mut decompressed).unwrap(); + pprofs.push(decompressed); + } + pprofs +} + +#[cfg(test)] +mod tests { + use prost::Message; + use crate::{diff_tree, export_tree, merge_tree}; + use crate::pprof_pb::querier::v1::{FlameGraphDiff, SelectMergeStacktracesResponse}; + use super::*; + + + #[test] + fn test_select_merge_stacktraces() { + let pprofs = get_test_pprof_data(); + for pprof in pprofs { + + // Merging profiles into tree + merge_prof( + 0, + pprof.as_slice(), + "process_cpu:samples:count:cpu:nanoseconds".to_string(), + ); + } + //Asserting tree + let mut ctx = CTX.lock().unwrap(); + let tree = ctx.get_mut(&0).unwrap().lock().unwrap(); + let mut _names = tree.names.clone(); + _names.sort(); + assert_eq!(EXPECTED_NAMES, _names.join(", ")); + let mut map = "".to_string(); + let mut keys = tree.nodes.keys().cloned().collect::>(); + keys.sort(); + for i in keys { + let mut children_ids: Vec = vec![]; + for n in &tree.nodes[&i] { + let str_node_id = n.node_id.to_string().clone(); + children_ids.push(str_node_id.clone()); + } + children_ids.sort(); + map = format!("{}{}: [{}]\n", map, i, children_ids.join(", ")); + } + assert_eq!(EXPECTED_MAP, map); + } + + #[test] + fn test_merge_trees() { + let req = "lQM4EJ5XpRIwoR5rOHMuaW8vYXBpL2F1dG9zY2FsaW5nL3YxLmluaXRFYiBVOCYNuEtnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmxvZ3NSZXF1ZXN0KS5FeHBvcnS7avKKFgtj2RlyZWZsZWN0Lm1hcGFzc2lnbl9mYXN0c3RyniLvClDdZNQ1Z2l0aHViLmNvbS9td2l0a293L2dvLWNvbm50cmFjay5kaWFsQ2xpZW50Q29ublRyYWNrZXKHvrqeyS/dNS1naXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmRlY29kZVVpbnQ2NHMQR4RwgXBT0DVnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvLigqU2Vzc2lvbikudXBsb2FkRGF0YWOP1HtkwmPtGnJlZ2V4cC4oKlJlZ2V4cCkuZG9FeGVjdXRl1hmtUAzcCFNGZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL3Byb3RvLigqQmxvY2spLkVuY29kZUNvbHVtbgTvGlCF6nLBGHJlZ2V4cC5tYWtlT25lUGFzcy5mdW5jMYa6KjODtUD6KWdpdGh1Yi5jb20vc25vd2ZsYWtlZGIvZ29zbm93Zmxha2UuaW5pdC4zhxFhaZkCBnkuZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS4oKkxpbmUpLmVuY29kZTO+7trPy/thOGdpdGh1Yi5jb20vbXdpdGtvdy9nby1jb25udHJhY2suTmV3RGlhbENvbnRleHRGdW5jLmZ1bmMxOKhH8IQR9QBLZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci5idWlsZExhYmVsU2V0LmZ1bmMxymwXQT+p92dPZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3Ivc2VydmljZS90ZWxlbWV0cnkubmV3U2FtcGxlZExvZ2dlci5XcmFwQ29yZS5mdW5jMg2TSS6sZFJDG3J1bnRpbWUvZGVidWcuUmVhZEJ1aWxkSW5mbyXtvEZDLdz5P2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy4oKkJ1aWxkZXIpLkxhYmVsc7LfK9W0QakgTmdpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlL2ludGVybmFsL2tlcm5lbHMuR2V0Q29tcGFyZUtlcm5lbEDCYcfITsOmC2ZtdC5GcHJpbnRmFjkDL11RpWUqZ2l0aHViLmNvbS9taXRjaGVsbGgvcmVmbGVjdHdhbGsud2Fsa1NsaWNlj+ftEr5A+3RYZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5zdHJpbmdJbmRleGacV+uzc/yvQWdpdGh1Yi5jb20vYWxlY3Rob21hcy9wYXJ0aWNpcGxlL3YyLigqZ2VuZXJhdG9yQ29udGV4dCkucGFyc2VUZXJt7N8tqosTFuYicmVnZXhwL3N5bnRheC4oKnBhcnNlcikucGFyc2VDbGFzc93eY9mzZi7qLmdvLm9wZW50ZWxlbWV0cnkuaW8vcHJvdG8vb3RscC9tZXRyaWNzL3YxLmluaXSRY2O3J4YCaUBnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvcHJvdG8uKCpCbG9jaykuQXBwZW5kdB3UMdXNkcE2Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29uZm1hcC5OZXdGcm9tU3RyaW5nTWFwa41A1xmkGPBMZ2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIuKCpnZW5lcmF0b3JDb250ZXh0KS5wYXJzZVRlcm1Ob01vZGlmaWVyc6zmy1YLhh6CO2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9jbGllbnRfZ29sYW5nL3Byb21ldGhldXMuTXVzdFJlZ2lzdGVyEQlPidk2qIAxZ2l0aHViLmNvbS9rbmFkaC9rb2FuZi9wcm92aWRlcnMvY29uZm1hcC5Qcm92aWRlcvSN/DlitF7QHnJlZ2V4cC9zeW50YXguKCpjb21waWxlcikuaW5zdBoJaBmHJBKqR2dpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vdXBzdHJlYW0vcmVtb3RlLigqUmVtb3RlKS51cGxvYWRQcm9maWxlExq2DGsKk+oRcnVudGltZS5zY2hlZGluaXTmWy3acgipcFFnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLmJhdGNoU2FtcGxlc0FuZFRpbWVTZXJpZXO1InxN+g8MBzJnby5vcGVudGVsZW1ldHJ5LmlvL290ZWwvYXR0cmlidXRlLmNvbXB1dGVEaXN0aW5jdB6lGk2m9bmZP2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvc2VydmljZS9zMy9pbnRlcm5hbC9lbmRwb2ludHMuaW5pdIXQiFX0u+GCDWlvLkNvcHlCdWZmZXKfl+1+6jsc7lRnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLigqTWV0cmljVmVjKS5HZXRNZXRyaWNXaXRoTGFiZWxWYWx1ZXNVt8SFEJ/dQ1Fnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wcm9jZXNzb3IvcHJvY2Vzc29yaGVscGVyLk5ld01ldHJpY3NQcm9jZXNzb3IuZnVuYzHU+/N/qpUCGGFnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5leHBvcnRTdW1tYXJ5RGF0YVBvaW504+I/ChkicOUMcnVudGltZS5tYWluJ0mDKZ1S0iJMZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5LigqRmlsZXMpLlJlZ2lzdGVyRmlsZS5mdW5jMmPoFr12xtVpN2dpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqY29tcHJlc3NvcikuY2xvc2VjdTi3XK1lzRhjb21wcmVzcy9mbGF0ZS5OZXdXcml0ZXJV52PsmAB49jlnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLk5ld1N1bW1hcnkXXBd0AnPTWhtydW50aW1lL3Bwcm9mLnByb2ZpbGVXcml0ZXI27TmsGdFln0pnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci5uZXdRdWV1ZVNlbmRlci5mdW5jMbbbw5u5qAo1PWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjLigqRmlsZSkubGF6eUluaXSpShfnknn0TRlyZWdleHAvc3ludGF4LmFwcGVuZFJhbmdluf2v+9l/AI8XY29tcHJlc3MvZ3ppcC5OZXdSZWFkZXI2MjsnJPFZb2NnaXRodWIuY29tL2FwYWNoZS9hcnJvdy9nby92MTUvYXJyb3cvY29tcHV0ZS9pbnRlcm5hbC9rZXJuZWxzLm51bWVyaWNDb21wYXJlS2VybmVsW2dvLnNoYXBlLnVpbnQxNl2IQ8a42Jma6UBnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLmlubGluZUxhYmVsVmFsdWVzOzevQGtZdk9EZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvZGlzY292ZXJ5L2ZpbGUubmV3RGlzY292ZXJlck1ldHJpY3MYdz9kf4AbFDdnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKnN0cnVjdExleGVyKS5OZXh0r0rPjX20yxQuZ2l0aHViLmNvbS9zbm93Zmxha2VkYi9nb3Nub3dmbGFrZS5yZWFkQ0FDZXJ0c7U+on3o3hPceGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCptZXRyaWNGYW1pbHkpLmFkZFNlcmllc3HrbMb7r59LMGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS5yZXNldIuKpmmPFI2HhQFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcHJvY2Vzc29yL3Jlc291cmNlZGV0ZWN0aW9ucHJvY2Vzc29yL2ludGVybmFsLigqUmVzb3VyY2VQcm92aWRlcikuR2V0LmZ1bmMxUyTpN/63iZg3Z2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpmYXN0R2VuKS5hZGRCbG9ja2sbH0+B3i/9Kmdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvLlVubWFyc2hhbJhvjcbK/INxIXJlZ2V4cC9zeW50YXguKCpjb21waWxlcikuY29tcGlsZdpmYFT84JkSggFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcHJvY2Vzc29yL3Jlc291cmNlZGV0ZWN0aW9ucHJvY2Vzc29yLigqcmVzb3VyY2VEZXRlY3Rpb25Qcm9jZXNzb3IpLlN0YXJ0yyTrCYCAOUc8Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKmNwdVByb2ZpbGVDb2xsZWN0b3IpLnJlc2V0NrVRFAPRzEg1Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLkNvbFN0ci5FbmNvZGVDb2x1bW5uNZAWXBE3rEJnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqU3RyaW5nKS5FbmNvZGVpL4zajxSAZUtnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsLigqTWVzc2FnZUluZm8pLm1ha2VLbm93bkZpZWxkc0Z1bmMAr4RMnC0//g9yZWdleHAubmV3UXVldWVNFP+P84T1QiRuZXQvaHR0cC4oKnRyYW5zZmVyV3JpdGVyKS53cml0ZUJvZHl4RA+910vDWDpnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmJhdGNoKS5jbG9zZVF1ZXJ5/D1r9HTT/l4jZ2l0aHViLmNvbS9rbmFkaC9rb2FuZi9tYXBzLkZsYXR0ZW59dNVVSV4znRxydW50aW1lL2RlYnVnLlBhcnNlQnVpbGRJbmZvahl4MFX1rx0uZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL2NvbXByZXNzLk5ld1dyaXRlcoG+WqHhYEsVKWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3NlcnZpY2UuTmV3Vl+JUTm3ggcVYnl0ZXMuKCpCdWZmZXIpLldyaXRl8fWcs8fyn5gpazhzLmlvL2FwaW1hY2hpbmVyeS9wa2cvdXRpbC92ZXJzaW9uLmluaXTfvWLUu3glZhNzeW5jLigqT25jZSkuZG9TbG93U0BS/vivkVQPc3luYy4oKk9uY2UpLkRvuZpJIeCbCaFUZ2l0aHViLmNvbS9hcGFjaGUvYXJyb3cvZ28vdjE1L2Fycm93L2NvbXB1dGUvaW50ZXJuYWwva2VybmVscy5jb21wYXJlVGltZXN0YW1wS2VybmVs2+Vqf4iVU24vZ2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIubmV3VGFnTGV4ZXJ+EV/AEe3NPjxnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLigqUHJvZmlsZSkuV3JpdGVVbmNvbXByZXNzZWRnyQNPwDwFFCZnaXRodWIuY29tL2tuYWRoL2tvYW5mL3YyLigqS29hbmYpLlJhd01s9+Ub8u/DQ2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnRpbWVMaW1pdEFwcGVuZGVyKS5BcHBlbmRTk464pBKMT0JnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqU3RyaW5nKS5BcHBlbmR2QKlGCfVv1xlyZWdleHAvc3ludGF4LmFwcGVuZFRhYmxlaQV7ueCLd+U3Z2l0aHViLmNvbS9zaGlyb3UvZ29wc3V0aWwvdjMvaW50ZXJuYWwvY29tbW9uLlJlYWRMaW5lc3N/6Ll627GEK2dpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuaW5pdC5mdW5jMzQCmBH3Vwz+EDNnaXRodWIuY29tL2dvb2dsZS9nby1jbXAvY21wL2ludGVybmFsL2Z1bmN0aW9uLmluaXR6r1KnWG8MDkVnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy4oKk1lc3NhZ2UpLnVubWFyc2hhbEZ1bGzcQV8CBaAKTyZnby5vcGVuY2Vuc3VzLmlvL3RyYWNlL3RyYWNlc3RhdGUuaW5pdNAxQmMhXlHaRGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vdXBzdHJlYW0vcmVtb3RlLigqUmVtb3RlKS5zYWZlVXBsb2FkjaQWvWdujdIpZ2l0aHViLmNvbS9zcGYxMy9jb2JyYS4oKkNvbW1hbmQpLkV4ZWN1dGV2CZY3ryksKyJjb21wcmVzcy9nemlwLigqUmVhZGVyKS5yZWFkSGVhZGVypkNAh2MOyG4XbmV0LigqVENQQ29ubikuUmVhZEZyb20EHKJo0kKq5khnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlRGlzanVuY3Rpb26fHACX2u/Yszxnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9pbXBsLigqTWVzc2FnZUluZm8pLmluaXRyxe+cZRaZrC1naXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS5OZXdXcml0ZXLz2g+CteNedzhnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uQ29sVUludDY0LkVuY29kZUNvbHVtbnmIgKkgBxhSUGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL2Rpc2NvdmVyeS9maWxlLigqU0RDb25maWcpLk5ld0Rpc2NvdmVyZXJNZXRyaWNzMiqX5B7D9Oc0Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLigqQ29sSW50NjQpLkFwcGVuZNQ4biXbXBBZPGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLmFwcGVuZAHwXe6jqoKeJ21pbWUvbXVsdGlwYXJ0LigqV3JpdGVyKS5DcmVhdGVGb3JtRmlsZapX7tym+dC5PmdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3BkYXRhL3Bjb21tb24uTWFwLkVuc3VyZUNhcGFjaXR5lLcZPJ4gSzwpcmVnZXhwL3N5bnRheC4oKnBhcnNlcikucGFyc2VVbmljb2RlQ2xhc3MB63+sE8rWF3VnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvY2xpY2tob3VzZXByb2ZpbGVleHBvcnRlci9jaC4oKmNsaWNraG91c2VBY2Nlc3NOYXRpdmVDb2x1bW5hcikuSW5zZXJ0QmF0Y2g0jAaLg6QcPylnaXRodWIuY29tL3NpZ25hbGZ4L3NhcG0tcHJvdG8vZ2VuLmluaXQuMmaVWIHGfSWeEnJlZ2V4cC5tYWtlT25lUGFzc2/4CB5Ag1RCPmNvZGUuY2xvdWRmb3VuZHJ5Lm9yZy9nby1sb2dncmVnYXRvci9ycGMvbG9nZ3JlZ2F0b3JfdjIuaW5pdC4xz1NCYmhhw3B7Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKm1ldHJpY0ZhbWlseSkuYXBwZW5kTWV0cmljfmAFANfFpdJjZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuZXhwb3J0SGlzdG9ncmFtRGF0YVBvaW50xU6LpkCFB7JIZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29uc3VtZXIuQ29uc3VtZU1ldHJpY3NGdW5jLkNvbnN1bWVNZXRyaWNzeVMzLnbfiC1CZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKlN0cmluZykuRGVjb2RlRYYGZEOumNYvZ2l0aHViLmNvbS92bXdhcmUvZ292bW9taS92aW0yNS90eXBlcy5pbml0LjY2NTiN2MfAyI0MImFnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5leHBvcnROdW1iZXJEYXRhUG9pbnRzWoDilPn0lqsjcmVnZXhwLigqUmVnZXhwKS5GaW5kQWxsU3RyaW5nSW5kZXhXCo4eZceNWDhnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuTmV3TWFuYWdlci5mdW5jMe/73nFkCWTUIXJlZ2V4cC9zeW50YXguKCpwYXJzZXIpLm5ld1JlZ2V4cDgEhuweq+/YDnJlZ2V4cC5jb21waWxlZ6Pm42ry5KYPcnVudGltZS5kb0luaXQxiUxAWI6j/oIRcmVmbGVjdC5wYWNrRWZhY2V1VHScIpym/zVnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wZGF0YS9wY29tbW9uLk1hcC5SYW5nZW3YQrh988ymNWdvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC9hdHRyaWJ1dGUuTmV3U2V0V2l0aEZpbHRlcmVk+vtcB7NctRBSZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5CdWlsZOkKwwPkbClMP2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKk1hbmFnZXIpLnJlbG9hZC5mdW5jMQGTAk22VXGeQWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY2xpY2tob3VzZSkuUHJlcGFyZUJhdGNosp8jUAOOOnlEZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby91cHN0cmVhbS9yZW1vdGUuKCpSZW1vdGUpLmhhbmRsZUpvYnM3SvdiJIO6FSBnb2xhbmcub3JnL3gvbmV0L2h0bWwubWFwLmluaXQuMXvWVutQqS9uOGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vbW9kZWwubGFiZWxTZXRUb0ZpbmdlcnByaW505XfBbggt3eUzZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3Ivc2VydmljZS90ZWxlbWV0cnkuTmV3wDIn15sW0pcoZ2l0aHViLmNvbS9rbmFkaC9rb2FuZi92Mi4oKktvYW5mKS5NZXJnZdS0VTyplvttK2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLmRpYWyj5kTOgQKOhxhidWZpby4oKldyaXRlcikuUmVhZEZyb20EjeHw9nxiuiFuZXQvaHR0cC4oKlRyYW5zcG9ydCkuZGlhbENvbm5Gb3Ja6sJ3kzMCPEFnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLmFwcGVuZNYU8VCyRjp5U2dpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuU2FtcGxlRID9h3CSBFcecmVnZXhwL3N5bnRheC4oKmNvbXBpbGVyKS5wbHVzECrEbECzld8pZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL2F0dHJpYnV0ZS5OZXdTZXQQVv5mifCMhU9nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9vdGVsY29sLigqQ29sbGVjdG9yKS5zZXR1cENvbmZpZ3VyYXRpb25Db21wb25lbnRz0iy5nzuYwE1AZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC4oKk1lc3NhZ2VJbmZvKS5pbml0T25jZWzG8IPhmf1qRWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnNjcmFwZUFuZFJlcG9ydI8Fh2IVyZG5OGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy5OZXdCdWlsZGVyP8LXQ7wWwSchZ2l0aHViLmNvbS9nb29nbGUvZ28tY21wL2NtcC5pbml0VNEGyfDZa+w8Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvZGlzY292ZXJ5LlJlZ2lzdGVyU0RNZXRyaWNz6IrtSrbQM15RZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29uZm1hcC9jb252ZXJ0ZXIvZXhwYW5kY29udmVydGVyLmNvbnZlcnRlci5Db252ZXJ0QLFP/uRlYTJJZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5LnJhbmdlVG9wTGV2ZWxEZXNjcmlwdG9yc2B9R0FRbnq4GHJlZ2V4cC4oKmJpdFN0YXRlKS5yZXNldBHY422UFFblN2dpdGh1Yi5jb20vYWxlY3Rob21hcy9wYXJ0aWNpcGxlL3YyLigqc3RydWN0TGV4ZXIpLlBlZWsTiaIjlg0qkWZnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvY2xpY2tob3VzZXByb2ZpbGVleHBvcnRlci4oKmNsaWNraG91c2VQcm9maWxlRXhwb3J0ZXIpLnNlbmSMTTGh1A0ejxJydW50aW1lLnByb2NyZXNpemViMQJUAbl+3R5uZXQvaHR0cC4oKlRyYW5zcG9ydCkuZGlhbENvbm5bG6mN1BROtjFnaXRodWIuY29tL21pdGNoZWxsaC9jb3B5c3RydWN0dXJlLigqd2Fsa2VyKS5FeGl0HQ8qYC7zV6BFZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci5idWlsZExhYmVsU2V0x7/pTomEYoopY29tcHJlc3MvZmxhdGUuKCpodWZmbWFuRW5jb2RlcikuZ2VuZXJhdGXeo7j8U3RTbRVyZWdleHAuY29tcGlsZU9uZVBhc3OblItOcCrHmjJnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLigqTG9jYXRpb24pLmVuY29kZYG//wcmlW+VOWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnJ1bhJPBxpRI454OWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY2xpY2tob3VzZSkuZGlhbCw5TOPg5tbHLmNvbXByZXNzL2ZsYXRlLigqaHVmZm1hbkJpdFdyaXRlcikuaW5kZXhUb2tlbnPU9pT1R4dAUCVnaXRodWIuY29tL21pdGNoZWxsaC9yZWZsZWN0d2Fsay5XYWxrtmOZvFfQUXcNaW8uY29weUJ1ZmZlcuslqltPGBehPGs4cy5pby9hcGltYWNoaW5lcnkvcGtnL3J1bnRpbWUuKCpTY2hlbWVCdWlsZGVyKS5BZGRUb1NjaGVtZeZtQquB7+RTEHN5bmMuKCpQb29sKS5QdXTZRZ40w4psXSNnby51YmVyLm9yZy96YXAvemFwY29yZS5uZXdDb3VudGVyc6osNZVHqmBLdGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0cmFuc2FjdGlvbikuQXBwZW5kEXcFA9u5YtQxZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29uZm1hcC4oKkNvbmYpLkdldCJWzXtIJ3EbQmdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjLigqRmlsZSkudW5tYXJzaGFsRnVsbGTValiyHiAxXGdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqbWV0cmljc1NlbmRlcldpdGhPYnNlcnZhYmlsaXR5KS5zZW5krTBQuxLAnYQpZ2l0aHViLmNvbS9zcGYxMy9jb2JyYS4oKkNvbW1hbmQpLmV4ZWN1dGV/1ujc51YLMSNnaXRodWIuY29tL2tuYWRoL2tvYW5mL21hcHMuZmxhdHRlbl2lQEZIiP3eKWVuY29kaW5nL2pzb24uKCplbmNvZGVTdGF0ZSkucmVmbGVjdFZhbHVlVq+T63lfgbUdZW5jb2RpbmcvYmluYXJ5LkFwcGVuZFV2YXJpbnTTReF7oONQHR1ydW50aW1lL3Bwcm9mLlN0YXJ0Q1BVUHJvZmlsZYzj/wC4cXnEDHJ1bnRpbWUubWFsZ8tbsYPCM9VdNmdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL290ZWxjb2wuKCpDb2xsZWN0b3IpLlJ1bk2rVs36YhM3FnJlZmxlY3QuKCpNYXBJdGVyKS5LZXm4wTFgPiVqXCdnaXRodWIuY29tL2tuYWRoL2tvYW5mL3YyLigqS29hbmYpLkxvYWTRLCUDoTBuiTpnaXRodWIuY29tL2FwYWNoZS9hcnJvdy9nby92MTUvYXJyb3cvaW50ZXJuYWwvZmxhdGJ1Zi5pbml00EIa/refsg8KaW8uUmVhZEFsbCVh4Gz5U7DUMmdpdGh1Yi5jb20vYWxlY3Rob21hcy9wYXJ0aWNpcGxlL3YyLnZhbGlkYXRlLmZ1bmMxHnazW7PsDQNPZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCpiYXNlUmVxdWVzdFNlbmRlcikuc2VuZB6DBGTYyJBZG3JlZ2V4cC4oKlJlZ2V4cCkuYWxsTWF0Y2hlcwcLXgCLgw2sLmdpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLm5ld0Zhc3RFbmPASL61bTKQii1naXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmRlY29kZU1lc3NhZ2VlM4VigIrVz0ZnaXRodWIuY29tL2FwYWNoZS9hcnJvdy9nby92MTUvYXJyb3cvY29tcHV0ZS5SZWdpc3RlclNjYWxhckNvbXBhcmlzb25zRXbo4cPtvl8xZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS4oKlByb2ZpbGUpLmVuY29kZQQh3prQGK13OWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3NlcnZpY2UvdGVsZW1ldHJ5Lm5ld0xvZ2dlcqN+FltfqZh5FGJ5dGVzLigqQnVmZmVyKS5ncm93Mh0go0kKtWMTcmVnZXhwL3N5bnRheC5QYXJzZcCvzk3kV6oRNGNvbXByZXNzL2ZsYXRlLigqaHVmZm1hbkJpdFdyaXRlcikud3JpdGVCbG9ja0R5bmFtaWNDbyG9rXsqojlnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wZGF0YS9wY29tbW9uLmNvcHlCeXRlU2xpY2WUzwMNXMAaHUBnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvcHJvdG8uKCpCbG9jaykuRGVjb2RlXlokAy7HTTc4Z2l0aHViLmNvbS9pbmZsdXhkYXRhL2luZmx1eGRiLW9ic2VydmFiaWxpdHkvY29tbW9uLmluaXRmpU1TuNtGxyZrOHMuaW8vYXBpL25ldHdvcmtpbmcvdjEuYWRkS25vd25UeXBlc9BbN4J9cKZLQWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuQXBwZW5klNZKXUWu6G0sZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MvZW5kcG9pbnRzLmluaXSSkZjMM1e5E11naXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvcmVjZWl2ZXIvcHlyb3Njb3BlcmVjZWl2ZXIvcHByb2ZwYXJzZXIuKCpwUHJvZlBhcnNlcikuUGFyc2X+Ftr9mf7M4BVyZWdleHAvc3ludGF4LkNvbXBpbGWCZYcqK9m87oYBZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKm1ldHJpY0ZhbWlseSkubG9hZE1ldHJpY0dyb3VwT3JDcmVhdGVi/88q373hER5jb21wcmVzcy9mbGF0ZS4oKldyaXRlcikuQ2xvc2UvrO2IBy979ipnaXRodWIuY29tL2tuYWRoL2tvYW5mL3YyLnBvcHVsYXRlS2V5UGFydHO7DbRiOa8JkjRnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmJhdGNoKS5TZW5kruNhD3nNJJEtZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHJvdG8uUmVnaXN0ZXJGaWxl4pqJRLZT3fBLZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCp0aW1lb3V0U2VuZGVyKS5zZW5kJFWdXKyFNSVgZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyL2NvbXByZXNzLigqRGVjb21wcmVzc29yKS5EZWNvbXByZXNzn0cPG3qBY2peZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKkRlbHRhSGVhcFByb2ZpbGVyKS5Xcml0ZUhlYXBQcm90b4JGqG3paY9vHGNyeXB0by94NTA5LnBhcnNlQ2VydGlmaWNhdGVc2dePof8bjzxnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLmZpcnN0QmxvY2upZyebvKX6P0VnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnN1YnBhcnNlR3JvdXCm6tgdTYsP1ltnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmxvZ3NFeHBvcnRlcldpdGhPYnNlcnZhYmlsaXR5KS5zZW5kJoC8rc4khuIgZ28udWJlci5vcmcvemFwLm9wdGlvbkZ1bmMuYXBwbHlu9DzXcMJ4n2JnaXRodWIuY29tL2FwYWNoZS9hcnJvdy9nby92MTUvYXJyb3cvY29tcHV0ZS9pbnRlcm5hbC9rZXJuZWxzLm51bWVyaWNDb21wYXJlS2VybmVsW2dvLnNoYXBlLmludDY0XeXifvX9/R+fRWdpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlLlJlZ2lzdGVyU2NhbGFyQXJpdGhtZXRpY3H+xbv30EVRV2dpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLnJlYWRUcmVlRnJvbU1hcK1vawmntZNAF25ldC4oKlRDUENvbm4pLnJlYWRGcm9t/WB3GGhyxLAcY3J5cHRvL3g1MDkuUGFyc2VDZXJ0aWZpY2F0Zc19jzknADmSNGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vdmVyc2lvbi5jb21wdXRlUmV2aXNpb264KUrGkRqfRyVydW50aW1lL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLmJ1aWxkVWxFi/Rw8917Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci4oKnBSZWNlaXZlcikuaW5pdFByb21ldGhldXNDb21wb25lbnRzJ0yWTaQe3ZsfcnVudGltZS9wcHJvZi4oKnByb2ZNYXApLmxvb2t1cKR0B4JPvIQAQGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpUdXBsZSkucGFyc2UAOZHT70AWUjZnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9zZXJ2aWNlLigqU2VydmljZSkuU3RhcnRm8FvSdp60U0xnaXRodWIuY29tL2FwYWNoZS9hcnJvdy9nby92MTUvYXJyb3cvY29tcHV0ZS9pbnRlcm5hbC9rZXJuZWxzLkNvbXBhcmVLZXJuZWxzsZgWMRl01HBOZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCptZXRyaWNzUmVxdWVzdCkuRXhwb3J0GV7NEcF71aM8Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpiYXRjaCkuQXBwZW5kU3RydWN0yynLGQuHYlg2Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLlN0YXJ0LmZ1bmMyfiFs5fcLt1Q3Z28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL2F0dHJpYnV0ZS5jb21wdXRlRGlzdGluY3RGaXhlZOcAlLIX44TUQGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkucGFyc2WEGFZ37850AUVnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlTW9kaWZpZXL9YAu3/wRquThnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uKCpDb2xTdHIpLkRlY29kZUNvbHVtbt7xqvk8uA0XKGdpdGh1Yi5jb20vbWl0Y2hlbGxoL3JlZmxlY3R3YWxrLndhbGtNYXAznk7U9cAkyTlnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLnByb2Nlc3N8pINkIY+a8BFydW50aW1lLml0YWJzaW5pdNFhc/eUk3akM2dpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlLmluaXQuMGuYA2D5FQhvmwFnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9pbnRlcm5hbC9xdWV1ZS4oKmJvdW5kZWRNZW1vcnlRdWV1ZVtnby5zaGFwZS5pbnRlcmZhY2UgeyBFeHBvcnQoY29udGV4dC5Db250ZXh0KSBlcnJvcjsgSXRlbXNDb3VudCgpIGludCB9XSkuQ29uc3VtZT6NBZungtOkQ2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9jbGllbnRfZ29sYW5nL3Byb21ldGhldXMuKCpzdW1tYXJ5KS5uZXdTdHJlYW2g4TitABqdLSVnaXRodWIuY29tL21pdGNoZWxsaC9yZWZsZWN0d2Fsay53YWxryd5YlGGGeJ9FZ2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIuKCpnZW5lcmF0b3JDb250ZXh0KS5wYXJzZVNlcXVlbmNl0/0Q0pm4xx0IbWFpbi5ydW598FZEdMGV2DZnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9vdGVsY29sLk5ld0NvbW1hbmQuZnVuYzGiQOiTrb/5iIoBZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3Byb2Nlc3Nvci9yZXNvdXJjZWRldGVjdGlvbnByb2Nlc3Nvci9pbnRlcm5hbC4oKlJlc291cmNlUHJvdmlkZXIpLmRldGVjdFJlc291cmNltsamCKjpwF4YcmVmbGVjdC4oKk1hcEl0ZXIpLlZhbHVl3FbTRJbqdzMqcnVudGltZS9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5hZGRDUFVEYXRhucbmosGJS8AacmVnZXhwLigqUmVnZXhwKS5iYWNrdHJhY2ueVBx0sUuwbyFuZXQvaHR0cC4oKnBlcnNpc3RDb25uKS53cml0ZUxvb3DO8zJW6A8a0xpnb2xhbmcub3JnL3gvbmV0L2h0bWwuaW5pdGVjHTvvJLw/XmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci4oKnB5cm9zY29wZVJlY2VpdmVyKS5yZWFkUHJvZmlsZXMobQmR6ppTR15naXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvcmVjZWl2ZXIvcHlyb3Njb3BlcmVjZWl2ZXIuKCpweXJvc2NvcGVSZWNlaXZlcikuaGFuZGxlLmZ1bmMx4GmaFNc0t81CZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MuKCpFbnVtKS51bm1hcnNoYWxGdWxsyLhlNhCUjmo3azhzLmlvL2FwaW1hY2hpbmVyeS9wa2cvcnVudGltZS4oKlNjaGVtZSkuQWRkS25vd25UeXBlc4nlTjuTPGofJW5ldC9odHRwLigqdHJhbnNmZXJXcml0ZXIpLmRvQm9keUNvcHn0tn9Bk9hFYzBnaXRodWIuY29tL2hldHpuZXJjbG91ZC9oY2xvdWQtZ28vdjIvaGNsb3VkLmluaXTdSWWTl4uY2BpuZXQvaHR0cC4oKlRyYW5zcG9ydCkuZGlhbGzPhlbkJj3zE25ldC9odHRwLmdldENvcHlCdWYIouedHfF3iElnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKnJldHJ5U2VuZGVyKS5zZW5krrScKuyF8rorZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5pbml0LmZ1bmMzNlam1reBYa7lO2dpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqY29tcHJlc3Nvcikuc3RvcmVGYXN0JjBFPnJ/nIVSZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5mbHVzaN0V+OGpeMe5LGdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuZW5jb2RlU3RyaW5nErlSuFmHsI5kZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuZXhwb3J0SGlzdG9ncmFtRGF0YVBvaW50c5cMX2ZSavfAFWVuY29kaW5nL2pzb24uTWFyc2hhbDgYBl6c+QcsM2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2NvbmZtYXAuKCpDb25mKS5NZXJnZYuXUygpFoUFQmdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL290ZWxjb2wuKCpjb25maWdQcm92aWRlcikuR2V0Q29uZm1hcPGUZOnCfnNKSWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuYXBwZW5kUm93UGxhaW4IwEsri+2Ih0NnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mLigqSGVhcFByb2ZpbGVyKS5Qcm9maWxlQpvOrnEC5VIPcmVmbGVjdC5jb3B5VmFs2HLvg36RJEwvZ2l0aHViLmNvbS92bXdhcmUvZ292bW9taS92aW0yNS90eXBlcy5pbml0LjMzMjl+ZuUG2+nplUFnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLkVuY29kZZkjNiPvBGXGWWdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuZW1pdExvY2F0aW9uFqZC3rsxuZk8Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKmNwdVByb2ZpbGVDb2xsZWN0b3IpLlN0YXJ0Filh4TA595kpazhzLmlvL2NsaWVudC1nby9rdWJlcm5ldGVzL3NjaGVtZS5pbml0LjDHqVe+Mpvz7itydW50aW1lL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLnN0cmluZ0luZGV4qaSJyrnT4i4vZ2l0aHViLmNvbS92bXdhcmUvZ292bW9taS92aW0yNS90eXBlcy5pbml0LjU1NDQVHkEdE3GPuitnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmluaXQuZnVuYzMzS3NPCIqNAxUPYnl0ZXMuZ3Jvd1NsaWNlAEOjrwIwah8ZbmV0L2h0dHAuKCpSZXF1ZXN0KS53cml0ZSb3WRNj/VQOYGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydE51bWJlckRhdGFQb2ludGmHQQapdt+WQWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjLigqRmlsZSkubGF6eUluaXRPbmNlFAk5soYt4vU3Z2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpmYXN0RW5jTDEpLkVuY29kZYbJTJnHlNe3J2dpdGh1Yi5jb20vbWl0Y2hlbGxoL2NvcHlzdHJ1Y3R1cmUuQ29wedqB5/qc11OoL2dpdGh1Yi5jb20vYWxlY3Rob21hcy9wYXJ0aWNpcGxlL3YyLnZpc2l0LmZ1bmMxhp1q68NVgbZMZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLnBvc3RQcm9jZXNzUHJvZueviEiDFzI4OmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS5tdXRhdGVTYW1wbGVMYWJlbHPVEUE8eRoiKUZnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9zZXJ2aWNlL3RlbGVtZXRyeS5uZXdTYW1wbGVkTG9nZ2VyLmZ1bmMxeMQkdQfiFaIuZ2l0aHViLmNvbS9taXRjaGVsbGgvY29weXN0cnVjdHVyZS5Db25maWcuQ29wed9HAeidKjSGFnJlZ2V4cC4oKlJlZ2V4cCkuU3BsaXTFHoEuYjXMJj5naXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLnByZXBhcmVCYXRjaFhDnMz/bhOFFnJlZmxlY3QudmFsdWVJbnRlcmZhY2VLozmJfs8Ww2JnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5leHBvcnRTdW1tYXJ5RGF0YVBvaW50cxlAgBUdVdwjKmdpdGh1Yi5jb20vYmVvcm43L3BlcmtzL3F1YW50aWxlLm5ld1N0cmVhbQhPI5lUcIOeMWdpdGh1Yi5jb20vc2hpcm91L2dvcHN1dGlsL3YzL2NwdS5JbmZvV2l0aENvbnRleHTswx37vHT/lhNyZWdleHAvc3ludGF4LnBhcnNlRdw7yDNNF8l4Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKnRyYW5zYWN0aW9uKS5nZXRNZXRyaWNzQe+sEWcA+ksnZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5tYXJzaGFsdiem6trMhpxLZ2l0aHViLmNvbS9hcGFjaGUvYXJyb3cvZ28vdjE1L2Fycm93L2NvbXB1dGUuKCpTY2FsYXJGdW5jdGlvbikuQWRkTmV3S2VybmVsghcE0fWUy28pZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS51bm1hcnNoYWycO4f5mQBcJRNidWZpby5OZXdSZWFkZXJTaXplY+uvmoIpeQ1GZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcmVmbGVjdC9wcm90b3JlZ2lzdHJ5LigqRmlsZXMpLlJlZ2lzdGVyRmlsZcKPWoQNhCwYRmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy4oKlNjcmF0Y2hCdWlsZGVyKS5MYWJlbHN8Kvsq9HmBXDZnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy91dGlsL3Bvb2wuKCpQb29sKS5HZXR8uSC3te6SNlxnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5jb2xsZWN0RnJvbU1ldHJpY6RcHK4AJlZTXmdpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlL2ludGVybmFsL2tlcm5lbHMuZ2VuQ29tcGFyZUtlcm5lbFtnby5zaGFwZS5pbnQ2NF3zFuU9AXpf2ClnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLlBhcnNlRGF0YaLxWJQ1BovgJGdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuaW5pdILzzCq5bhGqEHN5bmMuKCpQb29sKS5HZXTHnFsi+mCNvERnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlQ2FwdHVyZVqYaGu9a66xFG5ldC9odHRwLmluaXQuZnVuYzE1CNzc5O5P9k9AZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MuKCpGaWxlKS5sYXp5UmF3SW5pdEyvE1Gfodd5NmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKkNvbEZsb2F0NjQpLkFwcGVuZEkZAUeQHP6SMGdpdGh1Yi5jb20vZ29jY3kvZ28tanNvbi9pbnRlcm5hbC9kZWNvZGVyLmluaXQuMBfX57JdfULtTGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jbGllbnRfZ29sYW5nL3Byb21ldGhldXMuKCpTdW1tYXJ5VmVjKS5XaXRoTGFiZWxWYWx1ZXMYB0RLGoaC91dnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9pbnRlcm5hbC9mYW5vdXRjb25zdW1lci4oKm1ldHJpY3NDb25zdW1lcikuQ29uc3VtZU1ldHJpY3Nuj95sKWFd2itnaXRodWIuY29tL3Byb21ldGhldXMvY29tbW9uL3ZlcnNpb24uaW5pdC4wUcLOkyK4IFw3Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpzdHJ1Y3RNYXApLk1hcLBMxcEsnKvIKWdpdGh1Yi5jb20vYWxlY3Rob21hcy9wYXJ0aWNpcGxlL3YyLnZpc2l0d/i9I0NSe+k8Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjbGlja2hvdXNlKS5hY3F1aXJlSxLGj2HFhF8ac3luYy4oKnBvb2xDaGFpbikucHVzaEhlYWTFT4t+yiwqmCpnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmluaXQuZnVuYzMgeNVumfTSQCZnaXRodWIuY29tL3NoaXJvdS9nb3BzdXRpbC92My9jcHUuSW5mb/gNyWb7NRhzOGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS50YWtlU25hcHNob3RzbCxxhR9+OhIjbWltZS9tdWx0aXBhcnQuKCpXcml0ZXIpLkNyZWF0ZVBhcnQZPIbLE+dNxERnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLkFwcGVuZFJvdzRh4N8uzDyXIWNvbXByZXNzL2ZsYXRlLigqY29tcHJlc3NvcikuaW5pdDu2SyNbL4c2NmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLkFwcGVuZO4nijZDZWxiOWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2NvbmZtYXAuKCpSZXNvbHZlcikuUmVzb2x2ZdPnXNpTJZF7DnN0cmluZ3MuU3BsaXROBtPtoIDTUXA3Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29tcG9uZW50LlN0YXJ0RnVuYy5TdGFydIXV91blegKkOmdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS5kdW1wSGVhcFByb2ZpbGX5q8CtKXCuRBVydW50aW1lLm5ld3Byb2MuZnVuYzE9UvtV4pgpICJjb21wcmVzcy9mbGF0ZS4oKmNvbXByZXNzb3IpLmNsb3Nlaxdfzw2ZeT9aZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL2NsaWNraG91c2Vwcm9maWxlZXhwb3J0ZXIvY2guKCpMaW1pdGVkUG9vbCkucHV0r2F5b29ixi0ZcmVmbGVjdC5WYWx1ZS5TZXRNYXBJbmRleF0ka3od9QImH2VuY29kaW5nL2pzb24ubWFwRW5jb2Rlci5lbmNvZGV0SzZAZBi3yj1naXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUubmV3U2NyYXBlUG9vbC5mdW5jMS4xml99+XTH/1pVZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cy4oKlN1bW1hcnlWZWMpLkdldE1ldHJpY1dpdGhMYWJlbFZhbHVlcyJRJZnkP+xZOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLkRlZmF1bHREaWFsU3RyYXRlZ3nHw6zbn6AXnEVnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLnYyLk5ld1N1bW1hcnlWZWMuZnVuYzFrUeA/GEbNFBNydW50aW1lLnN5c3RlbXN0YWNrLE84EskYf7laZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikucHVzaE1ldHJpY3NEYXRhUL2517YSKW5dZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuY29sbGVjdEZyb21NZXRyaWNzbsU7aCtzKlstZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8ucHJvdG9NZXRob2Rzr9tPzzOw+UwdY29tcHJlc3MvZmxhdGUubmV3RGVmbGF0ZUZhc3QLu7AJhmJD7ydnaXRodWIuY29tL3Nub3dmbGFrZWRiL2dvc25vd2ZsYWtlLmluaXTJggpX989njUNnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLigqUmVnaXN0cnkpLlJlZ2lzdGVyaOnvrquUdZhnZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLm5ld1B5cm9zY29wZVJlY2VpdmVyLk5ld0RlY29tcHJlc3Nvci5mdW5jMgN8NNbAUF0+WWdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuTG9jc0ZvclN0YWNr36LtJrSkj9wOcnVudGltZS5ydDBfZ28COXYlrgR5gjpnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy5CdWlsZGVyLkJ1aWxk5gtCq4ZSTD8lZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5QYXJzZfsUdDXHcwG9F2J5dGVzLigqQnVmZmVyKS5Xcml0ZVRvauJCgrio5IBGZ2l0aHViLmNvbS9hcGFjaGUvYXJyb3cvZ28vdjE1L2Fycm93L2NvbXB1dGUuR2V0RnVuY3Rpb25SZWdpc3RyeS5mdW5jMVVdBBt17qJnP2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkucHJvZmlsZUV2ZW50cwNOxSAFwn4CPWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uVHlwZS5Db2x1bW531UwrI2eH6UJnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlR3JvdXAg+kxktYb0Vk9naXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2ludGVybmFsL3Bwcm9mLmRlZmF1bHRDb2xsZWN0b3IuU3RhcnRDUFVQcm9maWxlII0QYCKbGgM2Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLlN0YXJ0LmZ1bmMxc9TFdLUrT2o4Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5oYW5kbGU9+AdvzlPoji1naXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmVuY29kZU1lc3NhZ2UEqS27C90LtiJnb2xhbmcub3JnL3gvbmV0L3RyYWNlLk5ld0V2ZW50TG9nzQIg18K+uHRoZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci4oKnBSZWNlaXZlcikuU3RhcnS5O7Yh5ShtnBdyZWZsZWN0LlZhbHVlLkludGVyZmFjZX1JIRcgJHV4RGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpUdXBsZSkuQXBwZW5kUm93d2WVqxnPFMh/Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKm1ldHJpY0dyb3VwKS50b051bWJlckRhdGFQb2ludNU7+dU3ddmeHWNvbXByZXNzL2d6aXAuKCpSZWFkZXIpLlJlc2V0NP7THyFXhLBHZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cy4oKlJlZ2lzdHJ5KS5NdXN0UmVnaXN0ZXJVt5j4PU22dBdydW50aW1lL3Bwcm9mLmFsbEZyYW1lc4CxNv8g2ZA+lgFnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9pbnRlcm5hbC9xdWV1ZS4oKkNvbnN1bWVyc1tnby5zaGFwZS5pbnRlcmZhY2UgeyBFeHBvcnQoY29udGV4dC5Db250ZXh0KSBlcnJvcjsgSXRlbXNDb3VudCgpIGludCB9XSkuU3RhcnQuZnVuYzHWgspixzv6NRNtYWluLnJ1bkludGVyYWN0aXZlqL0m8bupHKUlZ28udWJlci5vcmcvemFwLigqTG9nZ2VyKS5XaXRoT3B0aW9uc5ygUDMWbs2/QWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpUdXBsZSkuRW5jb2RlKNhS2xnTBeIiY29tcHJlc3MvZmxhdGUuKCpkaWN0RGVjb2RlcikuaW5pdC9hGPaDA2CpDnJ1bnRpbWUuZG9Jbml0Jjpv6rz8iChAZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3Ivc2VydmljZS90ZWxlbWV0cnkubmV3U2FtcGxlZExvZ2dlcvhKxIFSiyKcLGdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuZW5jb2RlVmFyaW501qIVB2lwUVgqZ2l0aHViLmNvbS9zcGYxMy9jb2JyYS4oKkNvbW1hbmQpLkV4ZWN1dGVDBA1lTThBrFk8Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpiYXRjaENvbHVtbikuQXBwZW5kvZzntfonuktDZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcGRhdGEvcG1ldHJpYy5NZXRyaWNTbGljZS5BcHBlbmRFbXB0efG3srkYVJApJGVuY29kaW5nL2pzb24uKCplbmNvZGVTdGF0ZSkubWFyc2hhbPZrq0pabMBNEHN0cmluZ3MuZ2VuU3BsaXR0sX4likIoYSVjb21wcmVzcy9mbGF0ZS4oKmNvbXByZXNzb3IpLmVuY1NwZWVkgZRAPuBk9UtPZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcHJvY2Vzc29yL3Byb2Nlc3NvcmhlbHBlci4oKk9ic1JlcG9ydCkucmVjb3JkRGF0YW2M+lQEu8QpS2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnNjcmFwZUFuZFJlcG9ydC5mdW5jMVfTNiQ8eTh/O2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL290ZWxjb2wuKCpjb25maWdQcm92aWRlcikuR2V0Twewdx57jM9UZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcHJvY2Vzc29yL3Byb2Nlc3NvcmhlbHBlci4oKk9ic1JlcG9ydCkuTWV0cmljc0FjY2VwdGVkpx/rZ7C7wDJGZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3Ivc2VydmljZS9pbnRlcm5hbC9ncmFwaC4oKkdyYXBoKS5TdGFydEFsbNuFLKdl9uhdM2dpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqV3JpdGVyKS5DbG9zZRr+3UaIAWtDB2lvLkNvcHmmiklCJ6fx+hpyZWdleHAubWVyZ2VSdW5lU2V0cy5mdW5jMqVBh/YnlIsyGnJlZmxlY3QubWFwYXNzaWduX2Zhc3RzdHIwLYm/+CpofN9LZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkFycmF5KS5hcHBlbmRSb3dEZWZhdWx0Fs7UcVhdSp9cZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cy4oKm1ldHJpY01hcCkuZ2V0T3JDcmVhdGVNZXRyaWNXaXRoTGFiZWxWYWx1ZXMaw9OpEfSu6UFnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlVHlwZc6m/PsaRIKLMmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKkNvbFN0cikuQXBwZW5ker30bSnZkmkScmVnZXhwLm9uZVBhc3NDb3B5dr07JCLDrKo6Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5zZW5kRGF0YfmCoykU1KSTPms4cy5pby9hcGltYWNoaW5lcnkvcGtnL3J1bnRpbWUuKCpTY2hlbWUpLkFkZEtub3duVHlwZVdpdGhOYW1ld7lT6tNBNVwQcnVudGltZS5uZXdwcm9jMYzjCXS65VefN2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vbW9kZWwuTGFiZWxTZXQuRmluZ2VycHJpbnSgbR/BHd3SAXRnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqdHJhbnNhY3Rpb24pLkNvbW1pdPUsLVdwrqIEDnJlZ2V4cC5Db21waWxlQn8Fq9DEaoYwZ2l0aHViLmNvbS9nb2NjeS9nby1qc29uL2ludGVybmFsL2VuY29kZXIuaW5pdC4wXqwOKQFMmOdIZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC4oKk1lc3NhZ2VJbmZvKS5tYWtlUmVmbGVjdEZ1bmNztzKp1VvqSjA3Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLkNvbEludDY0LkVuY29kZUNvbHVtbmxk++5fxgzjEnN0cmluZ3MuRmllbGRzRnVuY4gviolB4i2zOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkucmVhZERhdGGMD/BmkONiSDJydW50aW1lL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLmFwcGVu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"; + let resp = "Cv7SAQoFdG90YWwKA24vYQoeazhzLmlvL2FwaS9hdXRvc2NhbGluZy92MS5pbml0Cktnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmxvZ3NSZXF1ZXN0KS5FeHBvcnQKGXJlZmxlY3QubWFwYXNzaWduX2Zhc3RzdHIKNWdpdGh1Yi5jb20vbXdpdGtvdy9nby1jb25udHJhY2suZGlhbENsaWVudENvbm5UcmFja2VyCi1naXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmRlY29kZVVpbnQ2NHMKNWdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS51cGxvYWREYXRhChpyZWdleHAuKCpSZWdleHApLmRvRXhlY3V0ZQpGZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL3Byb3RvLigqQmxvY2spLkVuY29kZUNvbHVtbgoYcmVnZXhwLm1ha2VPbmVQYXNzLmZ1bmMxCilnaXRodWIuY29tL3Nub3dmbGFrZWRiL2dvc25vd2ZsYWtlLmluaXQuMwouZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS4oKkxpbmUpLmVuY29kZQo4Z2l0aHViLmNvbS9td2l0a293L2dvLWNvbm50cmFjay5OZXdEaWFsQ29udGV4dEZ1bmMuZnVuYzEKS2dpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuYnVpbGRMYWJlbFNldC5mdW5jMQpPZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3Ivc2VydmljZS90ZWxlbWV0cnkubmV3U2FtcGxlZExvZ2dlci5XcmFwQ29yZS5mdW5jMgobcnVudGltZS9kZWJ1Zy5SZWFkQnVpbGRJbmZvCj9naXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9tb2RlbC9sYWJlbHMuKCpCdWlsZGVyKS5MYWJlbHMKTmdpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlL2ludGVybmFsL2tlcm5lbHMuR2V0Q29tcGFyZUtlcm5lbAoLZm10LkZwcmludGYKKmdpdGh1Yi5jb20vbWl0Y2hlbGxoL3JlZmxlY3R3YWxrLndhbGtTbGljZQpYZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5zdHJpbmdJbmRleApBZ2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIuKCpnZW5lcmF0b3JDb250ZXh0KS5wYXJzZVRlcm0KInJlZ2V4cC9zeW50YXguKCpwYXJzZXIpLnBhcnNlQ2xhc3MKLmdvLm9wZW50ZWxlbWV0cnkuaW8vcHJvdG8vb3RscC9tZXRyaWNzL3YxLmluaXQKQGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9wcm90by4oKkJsb2NrKS5BcHBlbmQKNmdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2NvbmZtYXAuTmV3RnJvbVN0cmluZ01hcApMZ2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIuKCpnZW5lcmF0b3JDb250ZXh0KS5wYXJzZVRlcm1Ob01vZGlmaWVycwo7Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cy5NdXN0UmVnaXN0ZXIKMWdpdGh1Yi5jb20va25hZGgva29hbmYvcHJvdmlkZXJzL2NvbmZtYXAuUHJvdmlkZXIKHnJlZ2V4cC9zeW50YXguKCpjb21waWxlcikuaW5zdApHZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby91cHN0cmVhbS9yZW1vdGUuKCpSZW1vdGUpLnVwbG9hZFByb2ZpbGUKEXJ1bnRpbWUuc2NoZWRpbml0ClFnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLmJhdGNoU2FtcGxlc0FuZFRpbWVTZXJpZXMKMmdvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC9hdHRyaWJ1dGUuY29tcHV0ZURpc3RpbmN0Cj9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL3NlcnZpY2UvczMvaW50ZXJuYWwvZW5kcG9pbnRzLmluaXQKDWlvLkNvcHlCdWZmZXIKVGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jbGllbnRfZ29sYW5nL3Byb21ldGhldXMuKCpNZXRyaWNWZWMpLkdldE1ldHJpY1dpdGhMYWJlbFZhbHVlcwpRZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcHJvY2Vzc29yL3Byb2Nlc3NvcmhlbHBlci5OZXdNZXRyaWNzUHJvY2Vzc29yLmZ1bmMxCmFnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5leHBvcnRTdW1tYXJ5RGF0YVBvaW50CgxydW50aW1lLm1haW4KTGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeS4oKkZpbGVzKS5SZWdpc3RlckZpbGUuZnVuYzIKN2dpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqY29tcHJlc3NvcikuY2xvc2UKGGNvbXByZXNzL2ZsYXRlLk5ld1dyaXRlcgo5Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cy5OZXdTdW1tYXJ5ChtydW50aW1lL3Bwcm9mLnByb2ZpbGVXcml0ZXIKSmdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLm5ld1F1ZXVlU2VuZGVyLmZ1bmMxCj1nb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy4oKkZpbGUpLmxhenlJbml0ChlyZWdleHAvc3ludGF4LmFwcGVuZFJhbmdlChdjb21wcmVzcy9nemlwLk5ld1JlYWRlcgpjZ2l0aHViLmNvbS9hcGFjaGUvYXJyb3cvZ28vdjE1L2Fycm93L2NvbXB1dGUvaW50ZXJuYWwva2VybmVscy5udW1lcmljQ29tcGFyZUtlcm5lbFtnby5zaGFwZS51aW50MTZdCkBnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLmlubGluZUxhYmVsVmFsdWVzCkRnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9kaXNjb3ZlcnkvZmlsZS5uZXdEaXNjb3ZlcmVyTWV0cmljcwo3Z2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIuKCpzdHJ1Y3RMZXhlcikuTmV4dAouZ2l0aHViLmNvbS9zbm93Zmxha2VkYi9nb3Nub3dmbGFrZS5yZWFkQ0FDZXJ0cwp4Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKm1ldHJpY0ZhbWlseSkuYWRkU2VyaWVzCjBnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvLigqU2Vzc2lvbikucmVzZXQKhQFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcHJvY2Vzc29yL3Jlc291cmNlZGV0ZWN0aW9ucHJvY2Vzc29yL2ludGVybmFsLigqUmVzb3VyY2VQcm92aWRlcikuR2V0LmZ1bmMxCjdnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmZhc3RHZW4pLmFkZEJsb2NrCipnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90by5Vbm1hcnNoYWwKIXJlZ2V4cC9zeW50YXguKCpjb21waWxlcikuY29tcGlsZQqCAWdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9wcm9jZXNzb3IvcmVzb3VyY2VkZXRlY3Rpb25wcm9jZXNzb3IuKCpyZXNvdXJjZURldGVjdGlvblByb2Nlc3NvcikuU3RhcnQKPGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpjcHVQcm9maWxlQ29sbGVjdG9yKS5yZXNldAo1Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLkNvbFN0ci5FbmNvZGVDb2x1bW4KQmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpTdHJpbmcpLkVuY29kZQpLZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC4oKk1lc3NhZ2VJbmZvKS5tYWtlS25vd25GaWVsZHNGdW5jCg9yZWdleHAubmV3UXVldWUKJG5ldC9odHRwLigqdHJhbnNmZXJXcml0ZXIpLndyaXRlQm9keQo6Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpiYXRjaCkuY2xvc2VRdWVyeQojZ2l0aHViLmNvbS9rbmFkaC9rb2FuZi9tYXBzLkZsYXR0ZW4KHHJ1bnRpbWUvZGVidWcuUGFyc2VCdWlsZEluZm8KLmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9jb21wcmVzcy5OZXdXcml0ZXIKKWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3NlcnZpY2UuTmV3ChVieXRlcy4oKkJ1ZmZlcikuV3JpdGUKKWs4cy5pby9hcGltYWNoaW5lcnkvcGtnL3V0aWwvdmVyc2lvbi5pbml0ChNzeW5jLigqT25jZSkuZG9TbG93Cg9zeW5jLigqT25jZSkuRG8KVGdpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlL2ludGVybmFsL2tlcm5lbHMuY29tcGFyZVRpbWVzdGFtcEtlcm5lbAovZ2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIubmV3VGFnTGV4ZXIKPGdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuKCpQcm9maWxlKS5Xcml0ZVVuY29tcHJlc3NlZAomZ2l0aHViLmNvbS9rbmFkaC9rb2FuZi92Mi4oKktvYW5mKS5SYXcKQ2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnRpbWVMaW1pdEFwcGVuZGVyKS5BcHBlbmQKQmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpTdHJpbmcpLkFwcGVuZAoZcmVnZXhwL3N5bnRheC5hcHBlbmRUYWJsZQo3Z2l0aHViLmNvbS9zaGlyb3UvZ29wc3V0aWwvdjMvaW50ZXJuYWwvY29tbW9uLlJlYWRMaW5lcworZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5pbml0LmZ1bmMzNAozZ2l0aHViLmNvbS9nb29nbGUvZ28tY21wL2NtcC9pbnRlcm5hbC9mdW5jdGlvbi5pbml0CkVnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy4oKk1lc3NhZ2UpLnVubWFyc2hhbEZ1bGwKJmdvLm9wZW5jZW5zdXMuaW8vdHJhY2UvdHJhY2VzdGF0ZS5pbml0CkRnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL3Vwc3RyZWFtL3JlbW90ZS4oKlJlbW90ZSkuc2FmZVVwbG9hZAopZ2l0aHViLmNvbS9zcGYxMy9jb2JyYS4oKkNvbW1hbmQpLkV4ZWN1dGUKImNvbXByZXNzL2d6aXAuKCpSZWFkZXIpLnJlYWRIZWFkZXIKF25ldC4oKlRDUENvbm4pLlJlYWRGcm9tCkhnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlRGlzanVuY3Rpb24KPGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwuKCpNZXNzYWdlSW5mbykuaW5pdAotZ2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuTmV3V3JpdGVyCjhnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uQ29sVUludDY0LkVuY29kZUNvbHVtbgpQZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvZGlzY292ZXJ5L2ZpbGUuKCpTRENvbmZpZykuTmV3RGlzY292ZXJlck1ldHJpY3MKNGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKkNvbEludDY0KS5BcHBlbmQKPGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLmFwcGVuZAonbWltZS9tdWx0aXBhcnQuKCpXcml0ZXIpLkNyZWF0ZUZvcm1GaWxlCj5nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wZGF0YS9wY29tbW9uLk1hcC5FbnN1cmVDYXBhY2l0eQopcmVnZXhwL3N5bnRheC4oKnBhcnNlcikucGFyc2VVbmljb2RlQ2xhc3MKdWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLigqY2xpY2tob3VzZUFjY2Vzc05hdGl2ZUNvbHVtbmFyKS5JbnNlcnRCYXRjaAopZ2l0aHViLmNvbS9zaWduYWxmeC9zYXBtLXByb3RvL2dlbi5pbml0LjIKEnJlZ2V4cC5tYWtlT25lUGFzcwo+Y29kZS5jbG91ZGZvdW5kcnkub3JnL2dvLWxvZ2dyZWdhdG9yL3JwYy9sb2dncmVnYXRvcl92Mi5pbml0LjEKe2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCptZXRyaWNGYW1pbHkpLmFwcGVuZE1ldHJpYwpjZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuZXhwb3J0SGlzdG9ncmFtRGF0YVBvaW50Ckhnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9jb25zdW1lci5Db25zdW1lTWV0cmljc0Z1bmMuQ29uc3VtZU1ldHJpY3MKQmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpTdHJpbmcpLkRlY29kZQovZ2l0aHViLmNvbS92bXdhcmUvZ292bW9taS92aW0yNS90eXBlcy5pbml0LjY2NTgKYWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydE51bWJlckRhdGFQb2ludHMKI3JlZ2V4cC4oKlJlZ2V4cCkuRmluZEFsbFN0cmluZ0luZGV4CjhnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuTmV3TWFuYWdlci5mdW5jMQohcmVnZXhwL3N5bnRheC4oKnBhcnNlcikubmV3UmVnZXhwCg5yZWdleHAuY29tcGlsZQoPcnVudGltZS5kb0luaXQxChFyZWZsZWN0LnBhY2tFZmFjZQo1Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcGRhdGEvcGNvbW1vbi5NYXAuUmFuZ2UKNWdvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC9hdHRyaWJ1dGUuTmV3U2V0V2l0aEZpbHRlcmVkClJnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mL2ludGVybmFsL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLkJ1aWxkCj9naXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCpNYW5hZ2VyKS5yZWxvYWQuZnVuYzEKQWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY2xpY2tob3VzZSkuUHJlcGFyZUJhdGNoCkRnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL3Vwc3RyZWFtL3JlbW90ZS4oKlJlbW90ZSkuaGFuZGxlSm9icwogZ29sYW5nLm9yZy94L25ldC9odG1sLm1hcC5pbml0LjEKOGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vbW9kZWwubGFiZWxTZXRUb0ZpbmdlcnByaW50CjNnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9zZXJ2aWNlL3RlbGVtZXRyeS5OZXcKKGdpdGh1Yi5jb20va25hZGgva29hbmYvdjIuKCpLb2FuZikuTWVyZ2UKK2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLmRpYWwKGGJ1ZmlvLigqV3JpdGVyKS5SZWFkRnJvbQohbmV0L2h0dHAuKCpUcmFuc3BvcnQpLmRpYWxDb25uRm9yCkFnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLmFwcGVuZApTZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5TYW1wbGUKHnJlZ2V4cC9zeW50YXguKCpjb21waWxlcikucGx1cwopZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL2F0dHJpYnV0ZS5OZXdTZXQKT2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL290ZWxjb2wuKCpDb2xsZWN0b3IpLnNldHVwQ29uZmlndXJhdGlvbkNvbXBvbmVudHMKQGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ltcGwuKCpNZXNzYWdlSW5mbykuaW5pdE9uY2UKRWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnNjcmFwZUFuZFJlcG9ydAo4Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvbGFiZWxzLk5ld0J1aWxkZXIKIWdpdGh1Yi5jb20vZ29vZ2xlL2dvLWNtcC9jbXAuaW5pdAo8Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvZGlzY292ZXJ5LlJlZ2lzdGVyU0RNZXRyaWNzClFnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9jb25mbWFwL2NvbnZlcnRlci9leHBhbmRjb252ZXJ0ZXIuY29udmVydGVyLkNvbnZlcnQKSWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3JlZmxlY3QvcHJvdG9yZWdpc3RyeS5yYW5nZVRvcExldmVsRGVzY3JpcHRvcnMKGHJlZ2V4cC4oKmJpdFN0YXRlKS5yZXNldAo3Z2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIuKCpzdHJ1Y3RMZXhlcikuUGVlawpmZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL2NsaWNraG91c2Vwcm9maWxlZXhwb3J0ZXIuKCpjbGlja2hvdXNlUHJvZmlsZUV4cG9ydGVyKS5zZW5kChJydW50aW1lLnByb2NyZXNpemUKHm5ldC9odHRwLigqVHJhbnNwb3J0KS5kaWFsQ29ubgoxZ2l0aHViLmNvbS9taXRjaGVsbGgvY29weXN0cnVjdHVyZS4oKndhbGtlcikuRXhpdApFZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci5idWlsZExhYmVsU2V0Ciljb21wcmVzcy9mbGF0ZS4oKmh1ZmZtYW5FbmNvZGVyKS5nZW5lcmF0ZQoVcmVnZXhwLmNvbXBpbGVPbmVQYXNzCjJnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLigqTG9jYXRpb24pLmVuY29kZQo5Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkucnVuCjlnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNsaWNraG91c2UpLmRpYWwKLmNvbXByZXNzL2ZsYXRlLigqaHVmZm1hbkJpdFdyaXRlcikuaW5kZXhUb2tlbnMKJWdpdGh1Yi5jb20vbWl0Y2hlbGxoL3JlZmxlY3R3YWxrLldhbGsKDWlvLmNvcHlCdWZmZXIKPGs4cy5pby9hcGltYWNoaW5lcnkvcGtnL3J1bnRpbWUuKCpTY2hlbWVCdWlsZGVyKS5BZGRUb1NjaGVtZQoQc3luYy4oKlBvb2wpLlB1dAojZ28udWJlci5vcmcvemFwL3phcGNvcmUubmV3Q291bnRlcnMKdGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0cmFuc2FjdGlvbikuQXBwZW5kCjFnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9jb25mbWFwLigqQ29uZikuR2V0CkJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy4oKkZpbGUpLnVubWFyc2hhbEZ1bGwKXGdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqbWV0cmljc1NlbmRlcldpdGhPYnNlcnZhYmlsaXR5KS5zZW5kCilnaXRodWIuY29tL3NwZjEzL2NvYnJhLigqQ29tbWFuZCkuZXhlY3V0ZQojZ2l0aHViLmNvbS9rbmFkaC9rb2FuZi9tYXBzLmZsYXR0ZW4KKWVuY29kaW5nL2pzb24uKCplbmNvZGVTdGF0ZSkucmVmbGVjdFZhbHVlCh1lbmNvZGluZy9iaW5hcnkuQXBwZW5kVXZhcmludAodcnVudGltZS9wcHJvZi5TdGFydENQVVByb2ZpbGUKDHJ1bnRpbWUubWFsZwo2Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3Ivb3RlbGNvbC4oKkNvbGxlY3RvcikuUnVuChZyZWZsZWN0LigqTWFwSXRlcikuS2V5CidnaXRodWIuY29tL2tuYWRoL2tvYW5mL3YyLigqS29hbmYpLkxvYWQKOmdpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9pbnRlcm5hbC9mbGF0YnVmLmluaXQKCmlvLlJlYWRBbGwKMmdpdGh1Yi5jb20vYWxlY3Rob21hcy9wYXJ0aWNpcGxlL3YyLnZhbGlkYXRlLmZ1bmMxCk9nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmJhc2VSZXF1ZXN0U2VuZGVyKS5zZW5kChtyZWdleHAuKCpSZWdleHApLmFsbE1hdGNoZXMKLmdpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLm5ld0Zhc3RFbmMKLWdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuZGVjb2RlTWVzc2FnZQpGZ2l0aHViLmNvbS9hcGFjaGUvYXJyb3cvZ28vdjE1L2Fycm93L2NvbXB1dGUuUmVnaXN0ZXJTY2FsYXJDb21wYXJpc29ucwoxZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS4oKlByb2ZpbGUpLmVuY29kZQo5Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3Ivc2VydmljZS90ZWxlbWV0cnkubmV3TG9nZ2VyChRieXRlcy4oKkJ1ZmZlcikuZ3JvdwoTcmVnZXhwL3N5bnRheC5QYXJzZQo0Y29tcHJlc3MvZmxhdGUuKCpodWZmbWFuQml0V3JpdGVyKS53cml0ZUJsb2NrRHluYW1pYwo5Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcGRhdGEvcGNvbW1vbi5jb3B5Qnl0ZVNsaWNlCkBnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvcHJvdG8uKCpCbG9jaykuRGVjb2RlCjhnaXRodWIuY29tL2luZmx1eGRhdGEvaW5mbHV4ZGItb2JzZXJ2YWJpbGl0eS9jb21tb24uaW5pdAomazhzLmlvL2FwaS9uZXR3b3JraW5nL3YxLmFkZEtub3duVHlwZXMKQWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuQXBwZW5kCixnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvL2F3cy9lbmRwb2ludHMuaW5pdApdZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyL3Bwcm9mcGFyc2VyLigqcFByb2ZQYXJzZXIpLlBhcnNlChVyZWdleHAvc3ludGF4LkNvbXBpbGUKhgFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqbWV0cmljRmFtaWx5KS5sb2FkTWV0cmljR3JvdXBPckNyZWF0ZQoeY29tcHJlc3MvZmxhdGUuKCpXcml0ZXIpLkNsb3NlCipnaXRodWIuY29tL2tuYWRoL2tvYW5mL3YyLnBvcHVsYXRlS2V5UGFydHMKNGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLlNlbmQKLWdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvLlJlZ2lzdGVyRmlsZQpLZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCp0aW1lb3V0U2VuZGVyKS5zZW5kCmBnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvcmVjZWl2ZXIvcHlyb3Njb3BlcmVjZWl2ZXIvY29tcHJlc3MuKCpEZWNvbXByZXNzb3IpLkRlY29tcHJlc3MKXmdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpEZWx0YUhlYXBQcm9maWxlcikuV3JpdGVIZWFwUHJvdG8KHGNyeXB0by94NTA5LnBhcnNlQ2VydGlmaWNhdGUKPGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkuZmlyc3RCbG9jawpFZ2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIuKCpnZW5lcmF0b3JDb250ZXh0KS5zdWJwYXJzZUdyb3VwCltnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmxvZ3NFeHBvcnRlcldpdGhPYnNlcnZhYmlsaXR5KS5zZW5kCiBnby51YmVyLm9yZy96YXAub3B0aW9uRnVuYy5hcHBseQpiZ2l0aHViLmNvbS9hcGFjaGUvYXJyb3cvZ28vdjE1L2Fycm93L2NvbXB1dGUvaW50ZXJuYWwva2VybmVscy5udW1lcmljQ29tcGFyZUtlcm5lbFtnby5zaGFwZS5pbnQ2NF0KRWdpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlLlJlZ2lzdGVyU2NhbGFyQXJpdGhtZXRpYwpXZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL2NsaWNraG91c2Vwcm9maWxlZXhwb3J0ZXIvY2gucmVhZFRyZWVGcm9tTWFwChduZXQuKCpUQ1BDb25uKS5yZWFkRnJvbQocY3J5cHRvL3g1MDkuUGFyc2VDZXJ0aWZpY2F0ZQo0Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NvbW1vbi92ZXJzaW9uLmNvbXB1dGVSZXZpc2lvbgolcnVudGltZS9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5idWlsZAp7Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci4oKnBSZWNlaXZlcikuaW5pdFByb21ldGhldXNDb21wb25lbnRzCh9ydW50aW1lL3Bwcm9mLigqcHJvZk1hcCkubG9va3VwCkBnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqVHVwbGUpLnBhcnNlCjZnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9zZXJ2aWNlLigqU2VydmljZSkuU3RhcnQKTGdpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlL2ludGVybmFsL2tlcm5lbHMuQ29tcGFyZUtlcm5lbHMKTmdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqbWV0cmljc1JlcXVlc3QpLkV4cG9ydAo8Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpiYXRjaCkuQXBwZW5kU3RydWN0CjZnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvLigqU2Vzc2lvbikuU3RhcnQuZnVuYzIKN2dvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC9hdHRyaWJ1dGUuY29tcHV0ZURpc3RpbmN0Rml4ZWQKQGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkucGFyc2UKRWdpdGh1Yi5jb20vYWxlY3Rob21hcy9wYXJ0aWNpcGxlL3YyLigqZ2VuZXJhdG9yQ29udGV4dCkucGFyc2VNb2RpZmllcgo4Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLigqQ29sU3RyKS5EZWNvZGVDb2x1bW4KKGdpdGh1Yi5jb20vbWl0Y2hlbGxoL3JlZmxlY3R3YWxrLndhbGtNYXAKOWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkucHJvY2VzcwoRcnVudGltZS5pdGFic2luaXQKM2dpdGh1Yi5jb20vYXBhY2hlL2Fycm93L2dvL3YxNS9hcnJvdy9jb21wdXRlLmluaXQuMAqbAWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2ludGVybmFsL3F1ZXVlLigqYm91bmRlZE1lbW9yeVF1ZXVlW2dvLnNoYXBlLmludGVyZmFjZSB7IEV4cG9ydChjb250ZXh0LkNvbnRleHQpIGVycm9yOyBJdGVtc0NvdW50KCkgaW50IH1dKS5Db25zdW1lCkNnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLigqc3VtbWFyeSkubmV3U3RyZWFtCiVnaXRodWIuY29tL21pdGNoZWxsaC9yZWZsZWN0d2Fsay53YWxrCkVnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlU2VxdWVuY2UKCG1haW4ucnVuCjZnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9vdGVsY29sLk5ld0NvbW1hbmQuZnVuYzEKigFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcHJvY2Vzc29yL3Jlc291cmNlZGV0ZWN0aW9ucHJvY2Vzc29yL2ludGVybmFsLigqUmVzb3VyY2VQcm92aWRlcikuZGV0ZWN0UmVzb3VyY2UKGHJlZmxlY3QuKCpNYXBJdGVyKS5WYWx1ZQoqcnVudGltZS9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5hZGRDUFVEYXRhChpyZWdleHAuKCpSZWdleHApLmJhY2t0cmFjawohbmV0L2h0dHAuKCpwZXJzaXN0Q29ubikud3JpdGVMb29wChpnb2xhbmcub3JnL3gvbmV0L2h0bWwuaW5pdApeZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLigqcHlyb3Njb3BlUmVjZWl2ZXIpLnJlYWRQcm9maWxlcwpeZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLigqcHlyb3Njb3BlUmVjZWl2ZXIpLmhhbmRsZS5mdW5jMQpCZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvZmlsZWRlc2MuKCpFbnVtKS51bm1hcnNoYWxGdWxsCjdrOHMuaW8vYXBpbWFjaGluZXJ5L3BrZy9ydW50aW1lLigqU2NoZW1lKS5BZGRLbm93blR5cGVzCiVuZXQvaHR0cC4oKnRyYW5zZmVyV3JpdGVyKS5kb0JvZHlDb3B5CjBnaXRodWIuY29tL2hldHpuZXJjbG91ZC9oY2xvdWQtZ28vdjIvaGNsb3VkLmluaXQKGm5ldC9odHRwLigqVHJhbnNwb3J0KS5kaWFsChNuZXQvaHR0cC5nZXRDb3B5QnVmCklnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKnJldHJ5U2VuZGVyKS5zZW5kCitnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmluaXQuZnVuYzM2CjtnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmNvbXByZXNzb3IpLnN0b3JlRmFzdApSZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5mbHVzaAosZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5lbmNvZGVTdHJpbmcKZGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydEhpc3RvZ3JhbURhdGFQb2ludHMKFWVuY29kaW5nL2pzb24uTWFyc2hhbAozZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29uZm1hcC4oKkNvbmYpLk1lcmdlCkJnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9vdGVsY29sLigqY29uZmlnUHJvdmlkZXIpLkdldENvbmZtYXAKSWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuYXBwZW5kUm93UGxhaW4KQ2dpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YuKCpIZWFwUHJvZmlsZXIpLlByb2ZpbGUKD3JlZmxlY3QuY29weVZhbAovZ2l0aHViLmNvbS92bXdhcmUvZ292bW9taS92aW0yNS90eXBlcy5pbml0LjMzMjkKQWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuRW5jb2RlCllnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mL2ludGVybmFsL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLmVtaXRMb2NhdGlvbgo8Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKmNwdVByb2ZpbGVDb2xsZWN0b3IpLlN0YXJ0CilrOHMuaW8vY2xpZW50LWdvL2t1YmVybmV0ZXMvc2NoZW1lLmluaXQuMAorcnVudGltZS9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5zdHJpbmdJbmRleAovZ2l0aHViLmNvbS92bXdhcmUvZ292bW9taS92aW0yNS90eXBlcy5pbml0LjU1NDQKK2dpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuaW5pdC5mdW5jMzMKD2J5dGVzLmdyb3dTbGljZQoZbmV0L2h0dHAuKCpSZXF1ZXN0KS53cml0ZQpgZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuZXhwb3J0TnVtYmVyRGF0YVBvaW50CkFnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy4oKkZpbGUpLmxhenlJbml0T25jZQo3Z2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpmYXN0RW5jTDEpLkVuY29kZQonZ2l0aHViLmNvbS9taXRjaGVsbGgvY29weXN0cnVjdHVyZS5Db3B5Ci9naXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi52aXNpdC5mdW5jMQpMZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLnBvc3RQcm9jZXNzUHJvZgo6Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLm11dGF0ZVNhbXBsZUxhYmVscwpGZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3Ivc2VydmljZS90ZWxlbWV0cnkubmV3U2FtcGxlZExvZ2dlci5mdW5jMQouZ2l0aHViLmNvbS9taXRjaGVsbGgvY29weXN0cnVjdHVyZS5Db25maWcuQ29weQoWcmVnZXhwLigqUmVnZXhwKS5TcGxpdAo+Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5wcmVwYXJlQmF0Y2gKFnJlZmxlY3QudmFsdWVJbnRlcmZhY2UKYmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydFN1bW1hcnlEYXRhUG9pbnRzCipnaXRodWIuY29tL2Jlb3JuNy9wZXJrcy9xdWFudGlsZS5uZXdTdHJlYW0KMWdpdGh1Yi5jb20vc2hpcm91L2dvcHN1dGlsL3YzL2NwdS5JbmZvV2l0aENvbnRleHQKE3JlZ2V4cC9zeW50YXgucGFyc2UKeGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0cmFuc2FjdGlvbikuZ2V0TWV0cmljcwonZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5tYXJzaGFsCktnaXRodWIuY29tL2FwYWNoZS9hcnJvdy9nby92MTUvYXJyb3cvY29tcHV0ZS4oKlNjYWxhckZ1bmN0aW9uKS5BZGROZXdLZXJuZWwKKWdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUudW5tYXJzaGFsChNidWZpby5OZXdSZWFkZXJTaXplCkZnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9yZWZsZWN0L3Byb3RvcmVnaXN0cnkuKCpGaWxlcykuUmVnaXN0ZXJGaWxlCkZnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9tb2RlbC9sYWJlbHMuKCpTY3JhdGNoQnVpbGRlcikuTGFiZWxzCjZnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy91dGlsL3Bvb2wuKCpQb29sKS5HZXQKXGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmNvbGxlY3RGcm9tTWV0cmljCl5naXRodWIuY29tL2FwYWNoZS9hcnJvdy9nby92MTUvYXJyb3cvY29tcHV0ZS9pbnRlcm5hbC9rZXJuZWxzLmdlbkNvbXBhcmVLZXJuZWxbZ28uc2hhcGUuaW50NjRdCilnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLlBhcnNlRGF0YQokZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5pbml0ChBzeW5jLigqUG9vbCkuR2V0CkRnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlQ2FwdHVyZQoUbmV0L2h0dHAuaW5pdC5mdW5jMTUKQGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL2ludGVybmFsL2ZpbGVkZXNjLigqRmlsZSkubGF6eVJhd0luaXQKNmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKkNvbEZsb2F0NjQpLkFwcGVuZAowZ2l0aHViLmNvbS9nb2NjeS9nby1qc29uL2ludGVybmFsL2RlY29kZXIuaW5pdC4wCkxnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLigqU3VtbWFyeVZlYykuV2l0aExhYmVsVmFsdWVzCldnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9pbnRlcm5hbC9mYW5vdXRjb25zdW1lci4oKm1ldHJpY3NDb25zdW1lcikuQ29uc3VtZU1ldHJpY3MKK2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vdmVyc2lvbi5pbml0LjAKN2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqc3RydWN0TWFwKS5NYXAKKWdpdGh1Yi5jb20vYWxlY3Rob21hcy9wYXJ0aWNpcGxlL3YyLnZpc2l0CjxnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNsaWNraG91c2UpLmFjcXVpcmUKGnN5bmMuKCpwb29sQ2hhaW4pLnB1c2hIZWFkCipnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmluaXQuZnVuYzMKJmdpdGh1Yi5jb20vc2hpcm91L2dvcHN1dGlsL3YzL2NwdS5JbmZvCjhnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvLigqU2Vzc2lvbikudGFrZVNuYXBzaG90cwojbWltZS9tdWx0aXBhcnQuKCpXcml0ZXIpLkNyZWF0ZVBhcnQKRGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuQXBwZW5kUm93CiFjb21wcmVzcy9mbGF0ZS4oKmNvbXByZXNzb3IpLmluaXQKNmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLkFwcGVuZAo5Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29uZm1hcC4oKlJlc29sdmVyKS5SZXNvbHZlCg5zdHJpbmdzLlNwbGl0Tgo3Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29tcG9uZW50LlN0YXJ0RnVuYy5TdGFydAo6Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLmR1bXBIZWFwUHJvZmlsZQoVcnVudGltZS5uZXdwcm9jLmZ1bmMxCiJjb21wcmVzcy9mbGF0ZS4oKmNvbXByZXNzb3IpLmNsb3NlClpnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvY2xpY2tob3VzZXByb2ZpbGVleHBvcnRlci9jaC4oKkxpbWl0ZWRQb29sKS5wdXQKGXJlZmxlY3QuVmFsdWUuU2V0TWFwSW5kZXgKH2VuY29kaW5nL2pzb24ubWFwRW5jb2Rlci5lbmNvZGUKPWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS5uZXdTY3JhcGVQb29sLmZ1bmMxLjEKVWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jbGllbnRfZ29sYW5nL3Byb21ldGhldXMuKCpTdW1tYXJ5VmVjKS5HZXRNZXRyaWNXaXRoTGFiZWxWYWx1ZXMKOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLkRlZmF1bHREaWFsU3RyYXRlZ3kKRWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jbGllbnRfZ29sYW5nL3Byb21ldGhldXMudjIuTmV3U3VtbWFyeVZlYy5mdW5jMQoTcnVudGltZS5zeXN0ZW1zdGFjawpaZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikucHVzaE1ldHJpY3NEYXRhCl1naXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5jb2xsZWN0RnJvbU1ldHJpY3MKLWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvLnByb3RvTWV0aG9kcwodY29tcHJlc3MvZmxhdGUubmV3RGVmbGF0ZUZhc3QKJ2dpdGh1Yi5jb20vc25vd2ZsYWtlZGIvZ29zbm93Zmxha2UuaW5pdApDZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cy4oKlJlZ2lzdHJ5KS5SZWdpc3RlcgpnZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLm5ld1B5cm9zY29wZVJlY2VpdmVyLk5ld0RlY29tcHJlc3Nvci5mdW5jMgpZZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5Mb2NzRm9yU3RhY2sKDnJ1bnRpbWUucnQwX2dvCjpnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9pbnRlcm5hbC9maWxlZGVzYy5CdWlsZGVyLkJ1aWxkCiVnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLlBhcnNlChdieXRlcy4oKkJ1ZmZlcikuV3JpdGVUbwpGZ2l0aHViLmNvbS9hcGFjaGUvYXJyb3cvZ28vdjE1L2Fycm93L2NvbXB1dGUuR2V0RnVuY3Rpb25SZWdpc3RyeS5mdW5jMQo/Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5wcm9maWxlRXZlbnRzCj1naXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLlR5cGUuQ29sdW1uCkJnaXRodWIuY29tL2FsZWN0aG9tYXMvcGFydGljaXBsZS92Mi4oKmdlbmVyYXRvckNvbnRleHQpLnBhcnNlR3JvdXAKT2dpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vaW50ZXJuYWwvcHByb2YuZGVmYXVsdENvbGxlY3Rvci5TdGFydENQVVByb2ZpbGUKNmdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS5TdGFydC5mdW5jMQo4Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5oYW5kbGUKLWdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuZW5jb2RlTWVzc2FnZQoiZ29sYW5nLm9yZy94L25ldC90cmFjZS5OZXdFdmVudExvZwpoZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci4oKnBSZWNlaXZlcikuU3RhcnQKF3JlZmxlY3QuVmFsdWUuSW50ZXJmYWNlCkRnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqVHVwbGUpLkFwcGVuZFJvdwp/Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKm1ldHJpY0dyb3VwKS50b051bWJlckRhdGFQb2ludAodY29tcHJlc3MvZ3ppcC4oKlJlYWRlcikuUmVzZXQKR2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9jbGllbnRfZ29sYW5nL3Byb21ldGhldXMuKCpSZWdpc3RyeSkuTXVzdFJlZ2lzdGVyChdydW50aW1lL3Bwcm9mLmFsbEZyYW1lcwqWAWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2ludGVybmFsL3F1ZXVlLigqQ29uc3VtZXJzW2dvLnNoYXBlLmludGVyZmFjZSB7IEV4cG9ydChjb250ZXh0LkNvbnRleHQpIGVycm9yOyBJdGVtc0NvdW50KCkgaW50IH1dKS5TdGFydC5mdW5jMQoTbWFpbi5ydW5JbnRlcmFjdGl2ZQolZ28udWJlci5vcmcvemFwLigqTG9nZ2VyKS5XaXRoT3B0aW9ucwpBZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKlR1cGxlKS5FbmNvZGUKImNvbXByZXNzL2ZsYXRlLigqZGljdERlY29kZXIpLmluaXQKDnJ1bnRpbWUuZG9Jbml0CkBnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9zZXJ2aWNlL3RlbGVtZXRyeS5uZXdTYW1wbGVkTG9nZ2VyCixnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmVuY29kZVZhcmludAoqZ2l0aHViLmNvbS9zcGYxMy9jb2JyYS4oKkNvbW1hbmQpLkV4ZWN1dGVDCjxnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmJhdGNoQ29sdW1uKS5BcHBlbmQKQ2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3BkYXRhL3BtZXRyaWMuTWV0cmljU2xpY2UuQXBwZW5kRW1wdHkKJGVuY29kaW5nL2pzb24uKCplbmNvZGVTdGF0ZSkubWFyc2hhbAoQc3RyaW5ncy5nZW5TcGxpdAolY29tcHJlc3MvZmxhdGUuKCpjb21wcmVzc29yKS5lbmNTcGVlZApPZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcHJvY2Vzc29yL3Byb2Nlc3NvcmhlbHBlci4oKk9ic1JlcG9ydCkucmVjb3JkRGF0YQpLZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuc2NyYXBlQW5kUmVwb3J0LmZ1bmMxCjtnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9vdGVsY29sLigqY29uZmlnUHJvdmlkZXIpLkdldApUZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcHJvY2Vzc29yL3Byb2Nlc3NvcmhlbHBlci4oKk9ic1JlcG9ydCkuTWV0cmljc0FjY2VwdGVkCkZnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9zZXJ2aWNlL2ludGVybmFsL2dyYXBoLigqR3JhcGgpLlN0YXJ0QWxsCjNnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKldyaXRlcikuQ2xvc2UKB2lvLkNvcHkKGnJlZ2V4cC5tZXJnZVJ1bmVTZXRzLmZ1bmMyChpyZWZsZWN0Lm1hcGFzc2lnbl9mYXN0c3RyMApLZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkFycmF5KS5hcHBlbmRSb3dEZWZhdWx0ClxnaXRodWIuY29tL3Byb21ldGhldXMvY2xpZW50X2dvbGFuZy9wcm9tZXRoZXVzLigqbWV0cmljTWFwKS5nZXRPckNyZWF0ZU1ldHJpY1dpdGhMYWJlbFZhbHVlcwpBZ2l0aHViLmNvbS9hbGVjdGhvbWFzL3BhcnRpY2lwbGUvdjIuKCpnZW5lcmF0b3JDb250ZXh0KS5wYXJzZVR5cGUKMmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKkNvbFN0cikuQXBwZW5kChJyZWdleHAub25lUGFzc0NvcHkKOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkuc2VuZERhdGEKPms4cy5pby9hcGltYWNoaW5lcnkvcGtnL3J1bnRpbWUuKCpTY2hlbWUpLkFkZEtub3duVHlwZVdpdGhOYW1lChBydW50aW1lLm5ld3Byb2MxCjdnaXRodWIuY29tL3Byb21ldGhldXMvY29tbW9uL21vZGVsLkxhYmVsU2V0LkZpbmdlcnByaW50CnRnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqdHJhbnNhY3Rpb24pLkNvbW1pdAoOcmVnZXhwLkNvbXBpbGUKMGdpdGh1Yi5jb20vZ29jY3kvZ28tanNvbi9pbnRlcm5hbC9lbmNvZGVyLmluaXQuMApIZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvaW50ZXJuYWwvaW1wbC4oKk1lc3NhZ2VJbmZvKS5tYWtlUmVmbGVjdEZ1bmNzCjdnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uQ29sSW50NjQuRW5jb2RlQ29sdW1uChJzdHJpbmdzLkZpZWxkc0Z1bmMKOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkucmVhZERhdGEKMnJ1bnRpbWUvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuYXBwZW5kTG9jc0ZvclN0YWNrCjlnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9jb25mbWFwLigqUmV0cmlldmVkKS5Bc0NvbmYKP2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlj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"; + let b_req = base64::decode(req).unwrap(); + let b_resp = base64::decode(resp).unwrap(); + merge_tree(0, b_req.as_slice(), "alloc_objects:count".to_string()); + let res = export_tree(0, "alloc_objects:count".to_string()); + let o_expected = SelectMergeStacktracesResponse::decode(b_resp.as_slice()).unwrap(); + let o_res = SelectMergeStacktracesResponse::decode(res.as_slice()).unwrap(); + let fg = &o_expected.flamegraph.unwrap(); + let res_fg = &o_res.flamegraph.unwrap(); + for i in 0..fg.levels.len() { + let mut expected_level: Vec = Vec::new(); + let mut res_level: Vec = Vec::new(); + for j in 0..fg.levels[i].values.len() / 4 { + expected_level.push( + fg.names[fg.levels[i].values[j * 4 + 3] as usize].clone() + ":" + + fg.levels[i].values[j * 4 + 1].clone().to_string().as_str() + ":" + + fg.levels[i].values[j * 4 + 2].clone().to_string().as_str() + ":" + + fg.levels[i].values[j * 4 + 0].clone().to_string().as_str() + ); + } + for j in 0..res_fg.levels[i].values.len() / 4 { + res_level.push( + res_fg.names[fg.levels[i].values[j * 4 + 3] as usize].clone() + ":" + + res_fg.levels[i].values[j * 4 + 1].clone().to_string().as_str() + ":" + + res_fg.levels[i].values[j * 4 + 2].clone().to_string().as_str() + ":" + + res_fg.levels[i].values[j * 4 + 0].clone().to_string().as_str() + ); + } + expected_level.sort(); + res_level.sort(); + expected_level.insert(0, "level {}:".to_string() + i.to_string().as_str()); + res_level.insert(0, "level {}:".to_string() + i.to_string().as_str()); + assert_eq!(expected_level, res_level); + } + } + + #[test] + fn test_diff() { + let l_b64_req = "8gJFYiBVOCYNuEtnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmxvZ3NSZXF1ZXN0KS5FeHBvcnTu5d7bL0QqHRtuZXQuKCpzeXNEaWFsZXIpLmRpYWxTaW5nbGXQtZgxgpXYNBFydW50aW1lLm5vdGVzbGVlcA/EJYLTmdXHNGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKlJlYWRlcikucmVhZEZ1bGz3ctP2qgjz6DxnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCpzY3JhcGVMb29wKS5yZXBvcnTy394COxe+5RJydW50aW1lLmNvbnZUc2xpY2WeIu8KUN1k1DVnaXRodWIuY29tL213aXRrb3cvZ28tY29ubnRyYWNrLmRpYWxDbGllbnRDb25uVHJhY2tlcsOwYDTe+2s8a2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuZ2V0U2VyaWVzUmVm/X+kiP3agLEyZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay90cmFjZS4oKnRyYWNlcikuU3RhcnQQR4RwgXBT0DVnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvLigqU2Vzc2lvbikudXBsb2FkRGF0YQYmn4SxwWKvH3J1bnRpbWUuKCpzdGtmcmFtZSkuZ2V0U3RhY2tNYXDis0kP+uiw3Q1jb250ZXh0LnZhbHVl4G5kL5JSOlaKAWdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCppbml0aWFsUG9pbnRBZGp1c3RlcikuYWRqdXN0TWV0cmljU3VtbWFyeSHZ+HhuiwONGnJ1bnRpbWUuKCptY2FjaGUpLm5leHRGcmVlM77u2s/L+2E4Z2l0aHViLmNvbS9td2l0a293L2dvLWNvbm50cmFjay5OZXdEaWFsQ29udGV4dEZ1bmMuZnVuYzEgc4I1iE+vYClydW50aW1lLigqaW5saW5lVW53aW5kZXIpLnJlc29sdmVJbnRlcm5hbMJAbvbcb1HqD3J1bnRpbWUubWVtbW92ZZuh/V+iOEhbVmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIucmVtb3ZlUHJvbUZvcmJpZGRlblJ1bmVzLmZ1bmMxuvc1VEWHJhgsZ2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUubG9hZDMyMzLPVSBP+m3oYktnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCpzY3JhcGVMb29wKS5zY3JhcGVBbmRSZXBvcnQuZnVuYzIzmGHnJbPurDBnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uKCpSZWFkZXIpLlJlYWSlYkFtlSd0BA1ydW50aW1lLndha2VwlLf3+v5y09ENcnVudGltZS5tY2FsbPuNl6PuA6U5DnJ1bnRpbWUuc3Bhbk9mI9NTkMyWW7cPcnVudGltZS5lZmFjZWVxSzJunQ9Uhp0ZY29udGV4dC4oKmNhbmNlbEN0eCkuRG9uZfMsZULPVpCrGnJ1bnRpbWUuKCpyYW5kb21FbnVtKS5uZXh0kWNjtyeGAmlAZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL3Byb3RvLigqQmxvY2spLkFwcGVuZDnWw6fOTmtEEmZtdC4oKnBwKS5kb1ByaW50ZqbGC4nJ7PpEEXJ1bnRpbWUuZ3Jvd3NsaWNlGEQvj3jClhEsbmV0LigqUmVzb2x2ZXIpLmdvTG9va3VwSVBDTkFNRU9yZGVyLmZ1bmMzLjEV5+nLyvXLSBBydW50aW1lLmZpbmRudWxs5lst2nIIqXBRZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci5iYXRjaFNhbXBsZXNBbmRUaW1lU2VyaWVzZfFhRnq9GiwccnVudGltZS5tZW1jbHJOb0hlYXBQb2ludGVyc1W3xIUQn91DUWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3Byb2Nlc3Nvci9wcm9jZXNzb3JoZWxwZXIuTmV3TWV0cmljc1Byb2Nlc3Nvci5mdW5jMWPoFr12xtVpN2dpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqY29tcHJlc3NvcikuY2xvc2U27TmsGdFln0pnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci5uZXdRdWV1ZVNlbmRlci5mdW5jMdUdZfSJPqEUF25ldC9odHRwLigqQ2xpZW50KS5zZW5kKiYD0avBXyMVbmV0L2h0dHAuKCpDbGllbnQpLkRvAZz1EQGpIwIYdW5pY29kZS91dGY4LlZhbGlkU3RyaW5nGF2inv8oC/gfbmV0L2h0dHAuKCp3YW50Q29ubikudHJ5RGVsaXZlcstXqaoQaVrtE3J1bnRpbWUuYWRqdXN0ZnJhbWVVjVMQssvOnhlydW50aW1lLm1Qcm9mX0ZsdXNoTG9ja2VkzeOe990RHUoSZm10LigqcHApLnByaW50QXJn80cdjE5muuoQcnVudGltZS5zZWxlY3Rnb0N4w9HQ5G8xEXJ1bnRpbWUuc3RrYnVja2V0cetsxvuvn0swZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLnJlc2V09/uG9ltwyP4pZ29sYW5nLm9yZy94L25ldC90cmFjZS4oKmV2ZW50TG9nKS5FcnJvcmazO1wJckN8mRRydW50aW1lLmVudGVyc3lzY2FsbMMD/mcNHsdfGHJ1bnRpbWUuKCpibWFwKS5vdmVyZmxvdz7FihbCxxnQFnJ1bnRpbWUuZnVuY0luZm8uZW50cnmMoFlkje2cCBFydW50aW1lLnN0ZWFsV29ya+hEKSTHoql0GXJ1bnRpbWUubWFwYXNzaWduX2Zhc3RzdHI5Ud4AVNJryBVydW50aW1lLmNhbGxlcnMuZnVuYzF4RA+910vDWDpnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmJhdGNoKS5jbG9zZVF1ZXJ50+XufhUB6MQ0Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLigqUmVhZGVyKS5SZWFkQnl0ZZUYf1XL2xlNGXJ1bnRpbWUuZ2NNYXJrVGVybWluYXRpb24aXNyQkNuGzR5ydW50aW1lLmZ1bmNOYW1lUGllY2VzRm9yUHJpbnQUeHFuv1RuaRFydW50aW1lLnBNYXNrLnNldCgpYBbs7bb8EnJ1bnRpbWUud2JCdWZGbHVzaGrPW2Nc3Uw9TmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuYnVpbGRQcm9tQ29tcGxpYW50TmFtZSKliK2s2XlyGWNvbnRleHQuV2l0aERlYWRsaW5lQ2F1c2W4yv5Aftm3nw5zeXNjYWxsLnNvY2tldGtE6nlU7pgAInJ1bnRpbWUvaW50ZXJuYWwvc3lzY2FsbC5FcG9sbFdhaXTuxwEiIm09KiFydW50aW1lL2ludGVybmFsL3N5c2NhbGwuRXBvbGxDdGzHlVgnObRT3BJyZWZsZWN0LnVuc2FmZV9OZXeaLOHNe9MYbB9pbnRlcm5hbC9wb2xsLnJ1bnRpbWVfcG9sbENsb3NlJY3DtA8lHN0ScnVudGltZS5hcmVuYUluZGV4REQbHue2svIOcnVudGltZS50Z2tpbGx+EV/AEe3NPjxnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLigqUHJvZmlsZSkuV3JpdGVVbmNvbXByZXNzZWRNbPflG/Lvw0NnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCp0aW1lTGltaXRBcHBlbmRlcikuQXBwZW5k3UYgkVNtBmUWcnVudGltZS5nY1RyaWdnZXIudGVzdI0cOtJTIknQDnJ1bnRpbWUucGFya19t1+WHhhMaBcYUcnVudGltZS5maW5kUnVubmFibGWIhIddPW13hCJuZXQuKCpSZXNvbHZlcikubG9va3VwSVBBZGRyLmZ1bmMxqT4MLWUHADcPcnVudGltZS5jYWxsZXJz1DhuJdtcEFk8Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuYXBwZW5kjxk8xF6hp9UQbmV0LigqY29ubikuUmVhZBD8kMwOtjQ7EnJ1bnRpbWUuZ3JleW9iamVjdAHrf6wTytYXdWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLigqY2xpY2tob3VzZUFjY2Vzc05hdGl2ZUNvbHVtbmFyKS5JbnNlcnRCYXRjaORurh8EWm6QE3J1bnRpbWUubVByb2ZfRmx1c2jElZrmeYJnOkJnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLmluaXQuZnVuYzJ+YAUA18Wl0mNnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5leHBvcnRIaXN0b2dyYW1EYXRhUG9pbnTFToumQIUHskhnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9jb25zdW1lci5Db25zdW1lTWV0cmljc0Z1bmMuQ29uc3VtZU1ldHJpY3NhAzhpySmARhBydW50aW1lLm5hbm90aW1l4CjGOG7ksrgYbmV0LigqUmVzb2x2ZXIpLmV4Y2hhbmdlQ8AfmTP86x8NaW5kZXhieXRlYm9keY3Yx8DIjQwiYWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydE51bWJlckRhdGFQb2ludHOr1H67/MAsiBlieXRlcy4oKkJ1ZmZlcikuV3JpdGVCeXRlpOuvxc915m0RcnVudGltZS5zY2Fuc3RhY2uhDvLntYM3bh1ydW50aW1lLmdjRHJhaW5NYXJrV29ya2VySWRsZXJQTFSyRpE/Em5ldC5pbnRlcm5ldFNvY2tldBTKYqNsZmluEnJ1bnRpbWUuc2Nhbm9iamVjdOU7MKX9higGRmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy5MYWJlbHMuSGFzaFdpdGhvdXRMYWJlbHMmOKRJNa3t8TZnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLkVudW36+1wHs1y1EFJnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mL2ludGVybmFsL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLkJ1aWxkAZMCTbZVcZ5BZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjbGlja2hvdXNlKS5QcmVwYXJlQmF0Y2hzbPhDzBobL25naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLm5ld01ldHJpY0ZhbWlseXALxMr4X9nQDnJ1bnRpbWUuc3RhcnRt+aooldoDdxgNbmV0L2h0dHAuc2VuZASN4fD2fGK6IW5ldC9odHRwLigqVHJhbnNwb3J0KS5kaWFsQ29ubkZvcsrvkCcMcHfwH2dvLnViZXIub3JnL3phcC4oKkxvZ2dlcikuY2hlY2ta6sJ3kzMCPEFnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLmFwcGVuZAwgkiQn4LowDmlvLlJlYWRBdExlYXN0gw5ZQNj+jTQTcnVudGltZS5wY2RhdGF2YWx1Zf1hQFweqGRURGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpJbnQ2NCkuQXBwZW5kUm93ar3ZNSS/hHwUcnVudGltZS5zcmNGdW5jLm5hbWWhWYKFcVt4yg9ydW50aW1lLnBjdmFsdWXK1qreFSyTUxRydW50aW1lLnByb2ZpbGVhbGxvY7ywal2vzkeKGGlvLigqTGltaXRlZFJlYWRlcikuUmVhZIVhlGNBEwfrNGdvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC9zZGsvdHJhY2UuKCp0cmFjZXIpLm5ld1NwYW7MhdTjfYCO2hhuZXQuKCpSZXNvbHZlcikubG9va3VwSVBjpqHpKMBUOhtuZXQuKCpzeXNEaWFsZXIpLmRpYWxTZXJpYWxX21iwY/69ahFydW50aW1lLm1ha2VzbGljZWzG8IPhmf1qRWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnNjcmFwZUFuZFJlcG9ydI8Fh2IVyZG5OGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy5OZXdCdWlsZGVydWeYuFSqNqMWcnVudGltZS4oKmxmc3RhY2spLnBvcHH++jLUDnq1JWludGVybmFsL3NpbmdsZWZsaWdodC4oKkdyb3VwKS5kb0NhbGz317MU8G4OJhlydW50aW1lLigqZ2NXb3JrKS5iYWxhbmNlE4miI5YNKpFmZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL2NsaWNraG91c2Vwcm9maWxlZXhwb3J0ZXIuKCpjbGlja2hvdXNlUHJvZmlsZUV4cG9ydGVyKS5zZW5kYjECVAG5ft0ebmV0L2h0dHAuKCpUcmFuc3BvcnQpLmRpYWxDb25uGM3/cHirFUlfZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyL2NvbXByZXNzLigqRGVjb21wcmVzc29yKS5yZWFkQnl0ZXMobxUzr1RcERhydW50aW1lLmdyb3dXb3JrX2Zhc3RzdHLJerpVZipgQxBydW50aW1lLm5ld3N0YWNrLmC4JNoWycEecnVudGltZS4oKm1vZHVsZWRhdGEpLnRleHRBZGRy1dcTWLt4WMoxcnVudGltZS4oKmdjQ29udHJvbGxlclN0YXRlKS5maW5kUnVubmFibGVHQ1dvcmtlcoG//wcmlW+VOWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnJ1brfIxI02Ehn8LmdvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC90cmFjZS5TcGFuRnJvbUNvbnRleHR7RRlDltQKokRnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mL2ludGVybmFsL3Bwcm9mLmFsbEZyYW1lc64HJogkHSYRPGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL2Rpc2NvdmVyeS4oKk1hbmFnZXIpLnNlbmRlcuvyaHNTRVcgFHJ1bnRpbWUudHJhY2ViYWNrUENzIewMtGorjmcWcnVudGltZS5yZWVudGVyc3lzY2FsbIpcj77pzHR6GXJ1bnRpbWUudHlwZVBvaW50ZXJzLm5leHRFKblWEEOtIBRuZXQuKCpPcEVycm9yKS5FcnJvchJ6ZtBJXy/RF3J1bnRpbWUuc2NhbmZyYW1ld29ya2Vyqiw1lUeqYEt0Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKnRyYW5zYWN0aW9uKS5BcHBlbmTznPwnLpKPDhBydW50aW1lLmdldGVtcHR5kPt1VpaW11cTcnVudGltZS5yZWFkVWludHB0coKOAoicndswFm5ldC5kbnNQYWNrZXRSb3VuZFRyaXCgZ6KBJdJevw9ydW50aW1lLmhhbmRvZmZk1WpYsh4gMVxnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKm1ldHJpY3NTZW5kZXJXaXRoT2JzZXJ2YWJpbGl0eSkuc2VuZF2lQEZIiP3eKWVuY29kaW5nL2pzb24uKCplbmNvZGVTdGF0ZSkucmVmbGVjdFZhbHVlVq+T63lfgbUdZW5jb2RpbmcvYmluYXJ5LkFwcGVuZFV2YXJpbnTVIROTH7MTngltZW1lcWJvZHlNq1bN+mITNxZyZWZsZWN0LigqTWFwSXRlcikuS2V5VRtgDuujnTs1Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NvbW1vbi9tb2RlbC5MYWJlbFZhbHVlLklzVmFsaWRM/u9O9sACUh1ydW50aW1lLnN0YXJ0VGhlV29ybGRXaXRoU2VtYeQFfHBegZOLGnJ1bnRpbWUuZGVkdWN0QXNzaXN0Q3JlZGl0S1cekAHePHoOc3lzY2FsbC5Tb2NrZXRqIJ43AdmxyyhydW50aW1lLigqbXNwYW4pLnR5cGVQb2ludGVyc09mVW5jaGVja2VkRxLl4KV7CXIcY29tcHJlc3MvZ3ppcC4oKlJlYWRlcikuUmVhZAM3qLGFhYD7FnJ1bnRpbWUudW5sb2NrV2l0aFJhbmvYS1XuP9msnhJzeXNjYWxsLlJhd1N5c2NhbGwedrNbs+wNA09nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmJhc2VSZXF1ZXN0U2VuZGVyKS5zZW5kryQJIXXRJvUfbmV0L2h0dHAuKCpUcmFuc3BvcnQpLnJvdW5kVHJpcKui8EyD3+S2KXJ1bnRpbWUuKCpnY0NvbnRyb2xsZXJTdGF0ZSkuZW5saXN0V29ya2VyCCUhL5QgglYWcnVudGltZS5tYXJrcm9vdC5mdW5jMUV26OHD7b5fMWdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuKCpQcm9maWxlKS5lbmNvZGUJylTUF5mfwiNjb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuUmVhZGymHc/Ad5l5FnJ1bnRpbWUuKCpnY0JpdHMpLmJpdHBuG0UhoG7aUhJuZXQuKCpuZXRGRCkuQ2xvc2WUzwMNXMAaHUBnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvcHJvdG8uKCpCbG9jaykuRGVjb2RlHnmsbk8kIb9DZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlQ2FjaGUpLmZvckVhY2hTdGFsZcqbwrUCWJhUGHJ1bnRpbWUuZnVuY05hbWVGb3JQcmludEnfDj6hKUGYE3J1bnRpbWUuZ29zY2hlZEltcGzQWzeCfXCmS0FnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLkFwcGVuZJKRmMwzV7kTXWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci9wcHJvZnBhcnNlci4oKnBQcm9mUGFyc2VyKS5QYXJzZVejd+xdAm5oD3J1bnRpbWUudW5sb2NrMs/mZFtkW/RfGXN5bmMuKCpwb29sQ2hhaW4pLnBvcFRhaWzhStFebo1tbw9ydW50aW1lLnNpZ25hbE3luQTS3KLf2hBydW50aW1lLnB1dGVtcHR5uw20YjmvCZI0Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpiYXRjaCkuU2VuZOKaiUS2U93wS2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqdGltZW91dFNlbmRlcikuc2VuZNnu4qi07LZBC2lvLlJlYWRGdWxsJFWdXKyFNSVgZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyL2NvbXByZXNzLigqRGVjb21wcmVzc29yKS5EZWNvbXByZXNzHaFVOzVEwMgfaW50ZXJuYWwvcG9sbC4oKnBvbGxEZXNjKS5jbG9zZUiIoDDTj8x6GmNvbnRleHQuKCpjYW5jZWxDdHgpLlZhbHVln0cPG3qBY2peZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKkRlbHRhSGVhcFByb2ZpbGVyKS5Xcml0ZUhlYXBQcm90b8hEQut8+1ZbEXJ1bnRpbWUuY29weXN0YWNrj9bbEjO+SeweZ2l0aHViLmNvbS9nby1mYXN0ZXIvY2l0eS5DSDY0purYHU2LD9ZbZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCpsb2dzRXhwb3J0ZXJXaXRoT2JzZXJ2YWJpbGl0eSkuc2VuZHH+xbv30EVRV2dpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLnJlYWRUcmVlRnJvbU1hcI4mpXyGCYhiGm5ldC4oKlJlc29sdmVyKS50cnlPbmVOYW1lw81YPvZGX+0PcnVudGltZS5nY0RyYWluHx5GrInl0V8Uc3luYy4oKlBvb2wpLmdldFNsb3c32wBr0+tTUBpydW50aW1lLigqX2Z1bmMpLmlzSW5saW5lZOu86rgChxiPEnJ1bnRpbWUuY2FzZ3N0YXR1cwoVOlOd6TwIFnJ1bnRpbWUuZ2NCZ01hcmtXb3JrZXIwrJGHGunHJBdydW50aW1lLigqc3BhblNldCkucHVzaCMxIq/ODe/ZH25ldC9odHRwLigqVHJhbnNwb3J0KS5Sb3VuZFRyaXCxmBYxGXTUcE5nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKm1ldHJpY3NSZXF1ZXN0KS5FeHBvcnQyr4Hs136ElhVydW50aW1lLmNvbmNhdHN0cmluZ3MZXs0RwXvVozxnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmJhdGNoKS5BcHBlbmRTdHJ1Y3SpLJgF8Kk2myFydW50aW1lL2ludGVybmFsL3N5c2NhbGwuU3lzY2FsbDZX8qr4XFyhxz1naXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9tb2RlbC9sYWJlbHMuTGFiZWxzLlZhbGlkYXRl7kpF6jnp+pAlZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby5udW1HQ40+z8DQ7EZTDHN5c2NhbGwucmVhZB0X50IzkvozD3N5c2NhbGwuU3lzY2FsbDOeTtT1wCTJOWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkucHJvY2Vzc8GZoQgd+w4NJm5ldC9odHRwLigqVHJhbnNwb3J0KS5xdWV1ZUZvcklkbGVDb25uxpUHgKRer2MbbmV0LigqY29uZikuaG9zdExvb2t1cE9yZGVydwkgMDxfTA4gcnVudGltZS4oKnN0YWNrU2NhblN0YXRlKS5wdXRQdHJrmANg+RUIb5sBZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvaW50ZXJuYWwvcXVldWUuKCpib3VuZGVkTWVtb3J5UXVldWVbZ28uc2hhcGUuaW50ZXJmYWNlIHsgRXhwb3J0KGNvbnRleHQuQ29udGV4dCkgZXJyb3I7IEl0ZW1zQ291bnQoKSBpbnQgfV0pLkNvbnN1bWV0MrwbQigACXJnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLm5vcm1hbGl6ZU1ldHJpY05hbWW4zles2qhBsw9ydW50aW1lLm5ldHBvbGy7ef7F8HpIjBxydW50aW1lLigqcmFuZG9tT3JkZXIpLnN0YXJ02MmrOsxrigoScnVudGltZS5mdXRleHNsZWVwtsamCKjpwF4YcmVmbGVjdC4oKk1hcEl0ZXIpLlZhbHVlO0IOrUg+IDcYcnVudGltZS4oKnVud2luZGVyKS5uZXh0nlQcdLFLsG8hbmV0L2h0dHAuKCpwZXJzaXN0Q29ubikud3JpdGVMb29wZWMdO+8kvD9eZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLigqcHlyb3Njb3BlUmVjZWl2ZXIpLnJlYWRQcm9maWxlc7pitwbIDeH8DXJ1bnRpbWUuZnV0ZXgobQmR6ppTR15naXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvcmVjZWl2ZXIvcHlyb3Njb3BlcmVjZWl2ZXIuKCpweXJvc2NvcGVSZWNlaXZlcikuaGFuZGxlLmZ1bmMx3t9XWPOguM4UbmV0LigqUmVzb2x2ZXIpLmRpYWwLHi0DfQ4Q2SVuZXQvaHR0cC4oKlRyYW5zcG9ydCkuZGVjQ29ubnNQZXJIb3N0vu+adBsx+N0ZaW50ZXJuYWwvcG9sbC4oKkZEKS5DbG9zZST8H5PkEhr3EnJ1bnRpbWUuZ2NNYXJrRG9uZSN3sRO7YfWmF3J1bnRpbWUuKCpsZnN0YWNrKS5wdXNo6f5Zn3fq/MMPcnVudGltZS5zZWxsb2Nr3Ullk5eLmNgabmV0L2h0dHAuKCpUcmFuc3BvcnQpLmRpYWzZ8UHwc2oWLxJuZXQuKCpuZXRGRCkuV3JpdGUIouedHfF3iElnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKnJldHJ5U2VuZGVyKS5zZW5kVqbWt4FhruU7Z2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpjb21wcmVzc29yKS5zdG9yZUZhc3RcfPTJKceytRFuZXQuKCpuZXRGRCkuUmVhZBK5UrhZh7COZGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydEhpc3RvZ3JhbURhdGFQb2ludHOXDF9mUmr3wBVlbmNvZGluZy9qc29uLk1hcnNoYWwmuGwr0jjZ6xdmbXQuKCpwcCkuaGFuZGxlTWV0aG9kc/GUZOnCfnNKSWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuYXBwZW5kUm93UGxhaW6Bxhxw6i+TyiVnaXRodWIuY29tL2dvLWZhc3Rlci9jaXR5Lmhhc2gxMjh0bzY0QiQCXQ4hhvlFZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuYWRkUmVwb3J0U2FtcGxlQpvOrnEC5VIPcmVmbGVjdC5jb3B5VmFsCMBLK4vtiIdDZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi4oKkhlYXBQcm9maWxlcikuUHJvZmlsZUqUKUqov2wwC2ZtdC5TcHJpbnRmA4IjfMbKsjAsZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL21ldHJpYy5OZXdBZGRDb25maWeZIzYj7wRlxllnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mL2ludGVybmFsL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLmVtaXRMb2NhdGlvbim85OsI2hUEemdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0cmFuc2FjdGlvbikuZ2V0U2VyaWVzUmVm0si9Ks1nFuEUcnVudGltZS5hY3F1aXJlU3Vkb2fkKCgBqHtIfCtjb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuaHVmZm1hbkJsb2NryWJlQEijMRNGZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLmdldE5vZGVJZMhx+SDM9W3VGGJ5dGVzLigqQnVmZmVyKS5SZWFkRnJvbexJ/SlemEzmHHJ1bnRpbWUuKCpzd2VlcExvY2tlZCkuc3dlZXCuSdmPZWDEFw1zeXNjYWxsLndyaXRlnU+wX8Z8emQicnVudGltZS5nY0RyYWluTWFya1dvcmtlckRlZGljYXRlZCb3WRNj/VQOYGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydE51bWJlckRhdGFQb2ludADZ/f1srDfYEXJ1bnRpbWUubmFub3RpbWUx2SMJe5MdJQMWcnVudGltZS4oKkZyYW1lcykuTmV4dEmhqZnHx1txG3J1bnRpbWUuc3RhcnRUaGVXb3JsZC5mdW5jMeUN3pY1xs0ND3J1bnRpbWUuZ29leGl0MAS4FSgb5rv7F3J1bnRpbWUuZ2NGbHVzaEJnQ3JlZGl04e4jK3fHv/wQcnVudGltZS5tYWtlY2hhboadauvDVYG2TGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci5wb3N0UHJvY2Vzc1Byb2b60DLvY59YcxRidWZpby4oKlJlYWRlcikuUmVhZBIyaT2sTm02HXJ1bnRpbWUudHlwZVBvaW50ZXJzLm5leHRGYXN0OHpnJxRQo9UTcnVudGltZS5mdXRleHdha2V1cB9fhMihwiuHFXJ1bnRpbWUucmVzZXRzcGlubmluZ9h6vT2sovqCKGNvbXByZXNzL2ZsYXRlLigqZGVjb21wcmVzc29yKS5uZXh0QmxvY2uklodLQiZOKR9ydW50aW1lLigqbWNlbnRyYWwpLnVuY2FjaGVTcGFuhf2sWhQGelsUcnVudGltZS5uZXh0RnJlZUZhc3TFHoEuYjXMJj5naXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLnByZXBhcmVCYXRjaJpOF0s2FVcjDXJ1bnRpbWUubVBhcmvIOpuAZcamARFuZXQuKCpjb25uKS5Xcml0ZXuE4dG3R8qoFW5ldC4oKkROU0Vycm9yKS5FcnJvckHvrBFnAPpLJ2dpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUubWFyc2hhbNsCUqI4lqTEdXR5cGU6LmVxLmdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwudGltZXNlcmllc0tleV4zxa+wnSydFHJ1bnRpbWUubVByb2ZfTWFsbG9jfLkgt7XukjZcZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuY29sbGVjdEZyb21NZXRyaWPrnTnzCtjb6Q9ydW50aW1lLmJnc3dlZXC1yamdEB/rXBduZXQuKCpjb25mKS5sb29rdXBPcmRlcoLzzCq5bhGqEHN5bmMuKCpQb29sKS5HZXTEdEZMwm8PmBtydW50aW1lLmVudGVyc3lzY2FsbF9zeXNtb277YvJAWynYhQpuZXQuc29ja2V01LLYi9MFnghKZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCpPYnNSZXBvcnQpLnN0YXJ0T3AYB0RLGoaC91dnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9pbnRlcm5hbC9mYW5vdXRjb25zdW1lci4oKm1ldHJpY3NDb25zdW1lcikuQ29uc3VtZU1ldHJpY3PxFldvdlpyIjRnby5vcGVudGVsZW1ldHJ5LmlvL290ZWwvc2RrL21ldHJpYy4oKmludDY0SW5zdCkuQWRkUcLOkyK4IFw3Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpzdHJ1Y3RNYXApLk1hcFo7N8lyIvz1EHJ1bnRpbWUuZnVuY25hbWVMEjAdzoTyyBZydW50aW1lLmdvc3RyaW5nbm9jb3B5Ye/KEDsyGXhaZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL2NsaWNraG91c2Vwcm9maWxlZXhwb3J0ZXIvY2guKCpMaW1pdGVkUG9vbCkuZ2V0iTs1oz8F4vQVcnVudGltZS5zdGFydFRoZVdvcmxk+A3JZvs1GHM4Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLnRha2VTbmFwc2hvdHOp9WvCrWav0hBydW50aW1lLm1hbGxvY2djGTyGyxPnTcREZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkFycmF5KS5BcHBlbmRSb3c7tksjWy+HNjZnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmJhdGNoKS5BcHBlbmTK7WWDBPYU4BVydW50aW1lLm1hcmtyb290QmxvY2vmpiw1bB8MGyBuZXQvaHR0cC5wZXJzaXN0Q29ubldyaXRlci5Xcml0ZYXV91blegKkOmdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS5kdW1wSGVhcFByb2ZpbGX3fgQ8CY1Z0hFydW50aW1lLmdvc2NoZWRfbZtEzD27nXWJhAFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqaW5pdGlhbFBvaW50QWRqdXN0ZXIpLkFkanVzdE1ldHJpY3NYxSWtgwP59RFuZXQuKCpjb25uKS5DbG9zZWsXX88NmXk/WmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLigqTGltaXRlZFBvb2wpLnB1dFCuScdKML1KGnJ1bnRpbWUubWFwYWNjZXNzMl9mYXN0c3Ry9BVzNOPRxEwVcnVudGltZS5jb25jYXRzdHJpbmcyXSRreh31AiYfZW5jb2RpbmcvanNvbi5tYXBFbmNvZGVyLmVuY29kZXRLNkBkGLfKPWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS5uZXdTY3JhcGVQb29sLmZ1bmMxLjFNlHYu16zQ4BhydW50aW1lLigqZ2NXb3JrKS50cnlHZXRrUeA/GEbNFBNydW50aW1lLnN5c3RlbXN0YWNrLE84EskYf7laZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikucHVzaE1ldHJpY3NEYXRhUL2517YSKW5dZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuY29sbGVjdEZyb21NZXRyaWNz2+W+z3C82iUaaW50ZXJuYWwvcG9sbC4oKkZEKS5kZWNyZWZsgrCkBxfJlR9ydW50aW1lLigqZ2NCaXRzQXJlbmEpLnRyeUFsbG9jA3w01sBQXT5ZZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5Mb2NzRm9yU3RhY2s3wHHL99E4NhVuZXQvaHR0cC4oKkNsaWVudCkuZG9yCYA3fv08HhluZXQuKCpEaWFsZXIpLkRpYWxDb250ZXh0KKwanumCLDsQcnVudGltZS5zd2VlcG9uZXQ2oG4eJ2UIIXJ1bnRpbWUuKCpzd2VlcExvY2tlcikudHJ5QWNxdWlyZRmstVaSifi2O2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkuc2VuZFF1ZXJ5VV0EG3Xuomc/Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5wcm9maWxlRXZlbnRzA07FIAXCfgI9Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi5UeXBlLkNvbHVtbueliUC04llAFXJ1bnRpbWUuKCptc3BhbikuYmFzZbUWby3gY8wzJXJ1bnRpbWUuKCptc3BhbikuaGVhcEJpdHNTbWFsbEZvckFkZHIgjRBgIpsaAzZnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvLigqU2Vzc2lvbikuU3RhcnQuZnVuYzFz1MV0tStPajhnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLmhhbmRsZQZHhw4jhC/nE3N5c2NhbGwuUmF3U3lzY2FsbDZF9l2ngBqtURhydW50aW1lLnNwYW5DbGFzcy5ub3NjYW74fblWbXAQew1uZXQuc3lzU29ja2V0r/ovaQhDtVIObmV0LmluaXQuZnVuYzE9+AdvzlPoji1naXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmVuY29kZU1lc3NhZ2VclEI3HV3KfxRydW50aW1lLlJlYWRNZW1TdGF0c9EN7qUbgg5zGHJ1bnRpbWUuKCptY2FjaGUpLnJlZmlsbHrAZw9cMSKoEHJ1bnRpbWUuc2NoZWR1bGX4jTWPAFYzLA9ydW50aW1lLkNhbGxlcnN9SSEXICR1eERnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqVHVwbGUpLkFwcGVuZFJvd4bhCcQ0wn5fEXJ1bnRpbWUubmV3b2JqZWN0uDFBPMlZScsYcnVudGltZS53YkJ1ZkZsdXNoLmZ1bmMxVotoGob81nodbmV0L2h0dHAuKCpUcmFuc3BvcnQpLmdldENvbm6AsTb/INmQPpYBZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvaW50ZXJuYWwvcXVldWUuKCpDb25zdW1lcnNbZ28uc2hhcGUuaW50ZXJmYWNlIHsgRXhwb3J0KGNvbnRleHQuQ29udGV4dCkgZXJyb3I7IEl0ZW1zQ291bnQoKSBpbnQgfV0pLlN0YXJ0LmZ1bmMxoLv7kQTRG34UcmVmbGVjdC50eXBlZG1lbW1vdmW7lIrB/cuOthRydW50aW1lLigqYnVja2V0KS5tcMKBhVLB30bGNWdvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC90cmFjZS5TcGFuQ29udGV4dEZyb21Db250ZXh0XGZemHua7WImY29tcHJlc3MvZmxhdGUuKCpkZWNvbXByZXNzb3IpLmh1ZmZTeW0VFqboGj/c+xRydW50aW1lLnR5cGVkbWVtbW92ZckmZwlu+971E3J1bnRpbWUuZnVuY3NwZGVsdGFG3wEYthNxTTdnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLmZsdXNoaj4O5cDsUyAMc3lzY2FsbC5SZWFkbeT/UCez9IERcnVudGltZS5jaGVhcHJhbmQEDWVNOEGsWTxnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmJhdGNoQ29sdW1uKS5BcHBlbmSMXcaD5qvkgg1zeXNjYWxsLldyaXRl8beyuRhUkCkkZW5jb2RpbmcvanNvbi4oKmVuY29kZVN0YXRlKS5tYXJzaGFsPACS2Cyzf5sQcnVudGltZS5tYXJrcm9vdOHey7tJYAjic2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0aW1lc2VyaWVzTWFwKS5nZXSBlEA+4GT1S09nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wcm9jZXNzb3IvcHJvY2Vzc29yaGVscGVyLigqT2JzUmVwb3J0KS5yZWNvcmREYXRhbYz6VAS7xClLZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuc2NyYXBlQW5kUmVwb3J0LmZ1bmMx/8+Qrm2l9xwRcnVudGltZS5zY2FuYmxvY2tPB7B3HnuMz1Rnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wcm9jZXNzb3IvcHJvY2Vzc29yaGVscGVyLigqT2JzUmVwb3J0KS5NZXRyaWNzQWNjZXB0ZWRMDfiNqq00vwtydW50aW1lLmFkZLxRhWFKG8DLHW5ldC4oKnN5c0RpYWxlcikuZGlhbFBhcmFsbGVsBjEVq3pWQggScnVudGltZS5tYXBhY2Nlc3My24Usp2X26F0zZ2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpXcml0ZXIpLkNsb3Nljw4KfGrLB/kZcnVudGltZS5tYXJrQml0cy5pc01hcmtlZLEnCRb3aswWEnJ1bnRpbWUubm90ZXdha2V1cC2Jv/gqaHzfS2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuYXBwZW5kUm93RGVmYXVsdM6m/PsaRIKLMmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKkNvbFN0cikuQXBwZW5kdr07JCLDrKo6Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5zZW5kRGF0YVWsb1IeyqqFUGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIucmVtb3ZlUHJvbUZvcmJpZGRlblJ1bmVz1sPC0O0uUCoScnVudGltZS5maW5kT2JqZWN02lXP3hMDr7gQcnVudGltZS5wcmVlbXB0TX0klkEBee04FGNvbnRleHQuV2l0aERlYWRsaW5loG0fwR3d0gF0Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKnRyYW5zYWN0aW9uKS5Db21taXQJmb8AxgyZAA9ydW50aW1lLmV4ZWN1dGVrZ1QQxrZBpxFydW50aW1lLmNtcHN0cmluZyjjYW55iNufhQFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqdHJhbnNhY3Rpb24pLmdldE9yQ3JlYXRlTWV0cmljRmFtaWx5CTpQu2qi9awVYnVmaW8uKCpXcml0ZXIpLkZsdXNobGT77l/GDOMSc3RyaW5ncy5GaWVsZHNGdW5jiC+KiUHiLbM6Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5yZWFkRGF0YV1AROHqYOYLKWdvbGFuZy5vcmcveC9uZXQvdHJhY2UuKCpldmVudExvZykucHJpbnRm8LEtItfVamtGZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NvbW1vbi9jb25maWcuKCp1c2VyQWdlbnRSb3Vu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"; + let r_b64_req = "pwNzU/o7HXjC+xBydW50aW1lLnJlbGVhc2VtRWIgVTgmDbhLZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCpsb2dzUmVxdWVzdCkuRXhwb3J07uXe2y9EKh0bbmV0Ligqc3lzRGlhbGVyKS5kaWFsU2luZ2xl0LWYMYKV2DQRcnVudGltZS5ub3Rlc2xlZXAPxCWC05nVxzRnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uKCpSZWFkZXIpLnJlYWRGdWxs93LT9qoI8+g8Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkucmVwb3J0UiU9oObHTsIQcnVudGltZS5tZW1oYXNoOBBHhHCBcFPQNWdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS51cGxvYWREYXRhY4/Ue2TCY+0acmVnZXhwLigqUmVnZXhwKS5kb0V4ZWN1dGXYenh/0ylv1QpydW50aW1lLkdDTFBlHdhZm+4hbmV0L2h0dHAuKCpwZXJzaXN0Q29ubikucm91bmRUcmlwBiafhLHBYq8fcnVudGltZS4oKnN0a2ZyYW1lKS5nZXRTdGFja01hcNYZrVAM3AhTRmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9wcm90by4oKkJsb2NrKS5FbmNvZGVDb2x1bW41mAMnyc2GEhlydW50aW1lLigqbWhlYXApLmluaXRTcGFus56VfBe9kkAccnVudGltZS4oKm1jYWNoZSkucmVsZWFzZUFsbCHZ+HhuiwONGnJ1bnRpbWUuKCptY2FjaGUpLm5leHRGcmVlOKhH8IQR9QBLZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci5idWlsZExhYmVsU2V0LmZ1bmMxIHOCNYhPr2ApcnVudGltZS4oKmlubGluZVVud2luZGVyKS5yZXNvbHZlSW50ZXJuYWzCQG723G9R6g9ydW50aW1lLm1lbW1vdmWUY2HJlul4WElnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmh1ZmZtYW5CaXRXcml0ZXIpLndyaXRlQmxvY2tEeW5hbWljz1UgT/pt6GJLZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuc2NyYXBlQW5kUmVwb3J0LmZ1bmMyM5hh5yWz7qwwZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLigqUmVhZGVyKS5SZWFkF4eUveR8YncLc3RyaW5ncy5DdXSlYkFtlSd0BA1ydW50aW1lLndha2Vw2Z+qnMnEx2ERcnVudGltZS5jaGFuc2VuZDGUt/f6/nLT0Q1ydW50aW1lLm1jYWxs+42Xo+4DpTkOcnVudGltZS5zcGFuT2aP5+0SvkD7dFhnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mL2ludGVybmFsL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLnN0cmluZ0luZGV4kfFSfkqT/c0NcnVudGltZS5yZWFkeSA5y2577Vh6FXJ1bnRpbWUuKCpnY1dvcmspLnB1dJFjY7cnhgJpQGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9wcm90by4oKkJsb2NrKS5BcHBlbmTuIqTY5B+6gz1naXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uKCpDb2xEYXRlVGltZSkuRGVjb2RlQ29sdW1u5P6FnGby6KE9Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLm5ld1NjcmFwZVBvb2wuZnVuYzEuMia74WChzmAQEHJ1bnRpbWUuY2hhbnJlY3amxguJyez6RBFydW50aW1lLmdyb3dzbGljZRhEL494wpYRLG5ldC4oKlJlc29sdmVyKS5nb0xvb2t1cElQQ05BTUVPcmRlci5mdW5jMy4xGgloGYckEqpHZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby91cHN0cmVhbS9yZW1vdGUuKCpSZW1vdGUpLnVwbG9hZFByb2ZpbGXmWy3acgipcFFnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLmJhdGNoU2FtcGxlc0FuZFRpbWVTZXJpZXNl8WFGer0aLBxydW50aW1lLm1lbWNsck5vSGVhcFBvaW50ZXJzqxm23pcDK90RcnVudGltZS5ydW5HQ1Byb2dVt8SFEJ/dQ1Fnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wcm9jZXNzb3IvcHJvY2Vzc29yaGVscGVyLk5ld01ldHJpY3NQcm9jZXNzb3IuZnVuYzFj6Ba9dsbVaTdnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmNvbXByZXNzb3IpLmNsb3Nl0nbloM8jK5IbcnVudGltZS5tYXBhc3NpZ25fZmFzdDY0cHRyTTaYGWYzxNsUcnVudGltZS5sb2NrV2l0aFJhbms27TmsGdFln0pnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci5uZXdRdWV1ZVNlbmRlci5mdW5jMdUdZfSJPqEUF25ldC9odHRwLigqQ2xpZW50KS5zZW5kKiYD0avBXyMVbmV0L2h0dHAuKCpDbGllbnQpLkRvXnhZ/+0+YxBQZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcGRhdGEvcG1ldHJpYy5SZXNvdXJjZU1ldHJpY3NTbGljZS5Nb3ZlQW5kQXBwZW5kVG+00ZWJro51LiZydW50aW1lL2ludGVybmFsL2F0b21pYy4oKlVpbnQzMikuTG9hZCLDQ+OedctOW2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2ludGVybmFsL21lbW9yeWxpbWl0ZXIuKCpNZW1vcnlMaW1pdGVyKS5zdGFydE1vbml0b3JpbmcuZnVuYzGwZDyIuTF3OhhpbnRlcm5hbC9wb2xsLigqRkQpLkluaXTLV6mqEGla7RNydW50aW1lLmFkanVzdGZyYW1l80cdjE5muuoQcnVudGltZS5zZWxlY3Rnb3HrbMb7r59LMGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS5yZXNldBstzi0YQeFUC2Flc2hhc2hib2R5t5CK91yEWDpIZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcmVjZWl2ZXIvcmVjZWl2ZXJoZWxwZXIuKCpPYnNSZXBvcnQpLmVuZE9wJqIagOdV/H0QcnVudGltZS5jaGFuc2VuZOdhlfbYvkfkGnJ1bnRpbWUuUmVhZE1lbVN0YXRzLmZ1bmMxsztcCXJDfJkUcnVudGltZS5lbnRlcnN5c2NhbGw2tVEUA9HMSDVnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uQ29sU3RyLkVuY29kZUNvbHVtbm41kBZcETesQmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpTdHJpbmcpLkVuY29kZcMD/mcNHsdfGHJ1bnRpbWUuKCpibWFwKS5vdmVyZmxvd0JhXO0lYaPtHHJ1bnRpbWUuc3RvcFRoZVdvcmxkV2l0aFNlbWFVueOTabPz9BhydW50aW1lLmV2YWN1YXRlX2Zhc3RzdHKMoFlkje2cCBFydW50aW1lLnN0ZWFsV29yaz7FihbCxxnQFnJ1bnRpbWUuZnVuY0luZm8uZW50cnnoRCkkx6KpdBlydW50aW1lLm1hcGFzc2lnbl9mYXN0c3RyeEQPvddLw1g6Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpiYXRjaCkuY2xvc2VRdWVyeVrypnOGyBzxeGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCptZXRyaWNHcm91cCkuc29ydFBvaW50c5p6Lp9WMIYTCnNvcnQuU2xpY2XcmK5ZXGed119naXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvcmVjZWl2ZXIvcHlyb3Njb3BlcmVjZWl2ZXIuKCpweXJvc2NvcGVSZWNlaXZlcikub3Blbk11bHRpcGFydBJGN95nK2BiIGludGVybmFsL2J5dGVhbGcuSW5kZXhCeXRlU3RyaW5nIqWIrazZeXIZY29udGV4dC5XaXRoRGVhZGxpbmVDYXVzZbjK/kB+2befDnN5c2NhbGwuc29ja2V0a0TqeVTumAAicnVudGltZS9pbnRlcm5hbC9zeXNjYWxsLkVwb2xsV2FpdOjP4eecILfxD3J1bnRpbWUuZ29yZWFkee7HASIibT0qIXJ1bnRpbWUvaW50ZXJuYWwvc3lzY2FsbC5FcG9sbEN0bD9H6u5DnUcLM2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3BkYXRhL3Bjb21tb24uTWFwLkdldFZfiVE5t4IHFWJ5dGVzLigqQnVmZmVyKS5Xcml0ZSWNw7QPJRzdEnJ1bnRpbWUuYXJlbmFJbmRleEREGx7ntrLyDnJ1bnRpbWUudGdraWxsjRw60lMiSdAOcnVudGltZS5wYXJrX23X5YeGExoFxhRydW50aW1lLmZpbmRSdW5uYWJsZdAxQmMhXlHaRGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vdXBzdHJlYW0vcmVtb3RlLigqUmVtb3RlKS5zYWZlVXBsb2FkbPgvkiw14M9AZ2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpodWZmbWFuQml0V3JpdGVyKS5nZW5lcmF0ZXLF75xlFpmsLWdpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLk5ld1dyaXRlctQ4biXbXBBZPGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLmFwcGVuZKtszRUpwr84UmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci5wb3N0UHJvY2Vzc1Byb2YuZnVuYzLVRVydtSUkgh5uZXQvaHR0cC5pc0tub3duSW5NZW1vcnlSZWFkZXKTp35NiG7pKUNnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCpUYXJnZXQpLkxhYmVsc1JhbmdlLmZ1bmMxjxk8xF6hp9UQbmV0LigqY29ubikuUmVhZBD8kMwOtjQ7EnJ1bnRpbWUuZ3JleW9iamVjdAHrf6wTytYXdWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLigqY2xpY2tob3VzZUFjY2Vzc05hdGl2ZUNvbHVtbmFyKS5JbnNlcnRCYXRjaJxi084F3TO8EnNvcnQuaW5zZXJ0aW9uU29ydDJfqdHAKUdtEXJ1bnRpbWUucHJvY3lpZWxkcnj7Q0HFbboTcnVudGltZS5oZWFwU2V0VHlwZc9TQmJoYcNwe2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCptZXRyaWNGYW1pbHkpLmFwcGVuZE1ldHJpY35gBQDXxaXSY2dpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydEhpc3RvZ3JhbURhdGFQb2ludMVOi6ZAhQeySGdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2NvbnN1bWVyLkNvbnN1bWVNZXRyaWNzRnVuYy5Db25zdW1lTWV0cmljc+Aoxjhu5LK4GG5ldC4oKlJlc29sdmVyKS5leGNoYW5nZY3Yx8DIjQwiYWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydE51bWJlckRhdGFQb2ludHNagOKU+fSWqyNyZWdleHAuKCpSZWdleHApLkZpbmRBbGxTdHJpbmdJbmRleD5zwuycVct2Fm5ldC9odHRwLnBhcnNlUG9zdEZvcm0HRAFnPrK9niZuZXQvaHR0cC4oKlJlcXVlc3QpLlBhcnNlTXVsdGlwYXJ0Rm9ybaXte8Z1guYAFG5ldC4oKm5ldEZEKS5jb25uZWN07cPND2dAeCWGAXNsaWNlcy5Tb3J0RnVuY1tnby5zaGFwZS5bXWVuY29kaW5nL2pzb24ucmVmbGVjdFdpdGhTdHJpbmcsZ28uc2hhcGUuc3RydWN0IHsgZW5jb2RpbmcvanNvbi52IHJlZmxlY3QuVmFsdWU7IGVuY29kaW5nL2pzb24ua3Mgc3RyaW5nIH1doQ7y57WDN24dcnVudGltZS5nY0RyYWluTWFya1dvcmtlcklkbGVyUExUskaRPxJuZXQuaW50ZXJuZXRTb2NrZXQUymKjbGZpbhJydW50aW1lLnNjYW5vYmplY3R1VHScIpym/zVnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wZGF0YS9wY29tbW9uLk1hcC5SYW5nZfr7XAezXLUQUmdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuQnVpbGQBkwJNtlVxnkFnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNsaWNraG91c2UpLlByZXBhcmVCYXRjaLKfI1ADjjp5RGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vdXBzdHJlYW0vcmVtb3RlLigqUmVtb3RlKS5oYW5kbGVKb2Jze9ZW61CpL244Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NvbW1vbi9tb2RlbC5sYWJlbFNldFRvRmluZ2VycHJpbnRwC8TK+F/Z0A5ydW50aW1lLnN0YXJ0bfmqKJXaA3cYDW5ldC9odHRwLnNlbmSrd7DdFGvomxplbmNvZGluZy9iaW5hcnkuUmVhZFZhcmludKx/yn3cmVuZT2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqT2JzUmVwb3J0KS5FbmRNZXRyaWNzT3Ba6sJ3kzMCPEFnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLmFwcGVuZMiMVIvPNXcSDXJ1bnRpbWUubG9jazIMIJIkJ+C6MA5pby5SZWFkQXRMZWFzdKFZgoVxW3jKD3J1bnRpbWUucGN2YWx1Zbywal2vzkeKGGlvLigqTGltaXRlZFJlYWRlcikuUmVhZNoMFcEX239ZEXNvcnQucGRxc29ydF9mdW5jY6ah6SjAVDobbmV0Ligqc3lzRGlhbGVyKS5kaWFsU2VyaWFs43DMjxLDab9hc2xpY2VzLnBkcXNvcnRDbXBGdW5jW2dvLnNoYXBlLnN0cnVjdCB7IGVuY29kaW5nL2pzb24udiByZWZsZWN0LlZhbHVlOyBlbmNvZGluZy9qc29uLmtzIHN0cmluZyB9XVfbWLBj/r1qEXJ1bnRpbWUubWFrZXNsaWNlbMbwg+GZ/WpFZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuc2NyYXBlQW5kUmVwb3J0jwWHYhXJkbk4Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvbGFiZWxzLk5ld0J1aWxkZXJ1Z5i4VKo2oxZydW50aW1lLigqbGZzdGFjaykucG9wykbbjAfwBmMacnVudGltZS5zZW5kLmdvcmVhZHkuZnVuYzECbbOVbwmfTxdyZWZsZWN0LigqTWFwSXRlcikuTmV4dNKz1zttyvR8EXN0cmluZ3MuSW5kZXhCeXRl5Z3qGcQ1UrxEZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkRhdGVUaW1lKS5EZWNvZGX317MU8G4OJhlydW50aW1lLigqZ2NXb3JrKS5iYWxhbmNlYH1HQVFuergYcmVnZXhwLigqYml0U3RhdGUpLnJlc2V0E4miI5YNKpFmZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL2NsaWNraG91c2Vwcm9maWxlZXhwb3J0ZXIuKCpjbGlja2hvdXNlUHJvZmlsZUV4cG9ydGVyKS5zZW5kjE0xodQNHo8ScnVudGltZS5wcm9jcmVzaXplHQ8qYC7zV6BFZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci5idWlsZExhYmVsU2V0GM3/cHirFUlfZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyL2NvbXByZXNzLigqRGVjb21wcmVzc29yKS5yZWFkQnl0ZXOdqPrBpq+OzRFydW50aW1lLm1lbWhhc2g2NFaoK13d5M2kG3J1bnRpbWUubm90ZXRzbGVlcF9pbnRlcm5hbGFAN6KZAneWF3NvcnQuaW5zZXJ0aW9uU29ydF9mdW5jKG8VM69UXBEYcnVudGltZS5ncm93V29ya19mYXN0c3RyyXq6VWYqYEMQcnVudGltZS5uZXdzdGFja3iANjdmEa8SEW5ldC4oKm5ldEZEKS5kaWFspVaUZXD8Ws4QcnVudGltZS5ydW5xZ3JhYoybRzEJuDnVDHJ1bnRpbWUuYWRkYoG//wcmlW+VOWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnJ1bntFGUOW1AqiRGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuYWxsRnJhbWVzA+E2AtW5hX46Z2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpkZWNvbXByZXNzb3IpLmRvU3RlcIWSzw9CZV6IE3J1bnRpbWUucGFnZUluZGV4T2ZNiuFOrvCgsRZydW50aW1lLnJlYWRtZW1zdGF0c19ttmOZvFfQUXcNaW8uY29weUJ1ZmZlcvHJ7wB3Sa9QRmdpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqZGVjb21wcmVzc29yKS5odWZmbWFuQnVmaW9SZWFkZXK2lxdms+v10RdydW50aW1lLmZsdXNoYWxsbWNhY2hlcyHsDLRqK45nFnJ1bnRpbWUucmVlbnRlcnN5c2NhbGxKNFeV64vQUxxlbmNvZGluZy9iaW5hcnkuQXBwZW5kVmFyaW50ilyPvunMdHoZcnVudGltZS50eXBlUG9pbnRlcnMubmV4dKZed7sCe/ClKmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vbW9kZWwuaGFzaEFkZHi9Z2L8BnXMEnJ1bnRpbWUubWFwYWNjZXNzMSet0EnOSi3PUGdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3JlY2VpdmVyL3JlY2VpdmVyaGVscGVyLigqT2JzUmVwb3J0KS5yZWNvcmRNZXRyaWNzkPt1VpaW11cTcnVudGltZS5yZWFkVWludHB0cqBnooEl0l6/D3J1bnRpbWUuaGFuZG9mZv+mS68VFCQYR2dpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqZGVjb21wcmVzc29yKS5odWZmbWFuQmxvY2tEZWNvZGVyZNVqWLIeIDFcZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCptZXRyaWNzU2VuZGVyV2l0aE9ic2VydmFiaWxpdHkpLnNlbmRdpUBGSIj93illbmNvZGluZy9qc29uLigqZW5jb2RlU3RhdGUpLnJlZmxlY3RWYWx1ZSACf0RcWXGqEXJ1bnRpbWUubWFwYXNzaWdueXDSATRAEhVPZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcmVjZWl2ZXIvcmVjZWl2ZXJoZWxwZXIuKCpPYnNSZXBvcnQpLkVuZE1ldHJpY3NPcPlEKmefj+MiFm5ldC9odHRwLigqY29ubikuc2VydmWlacs9LptuDTVnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLigqUHJvZmlsZSkuQ2hlY2tWYWxpZE2rVs36YhM3FnJlZmxlY3QuKCpNYXBJdGVyKS5LZXlM/u9O9sACUh1ydW50aW1lLnN0YXJ0VGhlV29ybGRXaXRoU2VtYeQFfHBegZOLGnJ1bnRpbWUuZGVkdWN0QXNzaXN0Q3JlZGl0S1cekAHePHoOc3lzY2FsbC5Tb2NrZXRqIJ43AdmxyyhydW50aW1lLigqbXNwYW4pLnR5cGVQb2ludGVyc09mVW5jaGVja2Vk0EIa/refsg8KaW8uUmVhZEFsbEcS5eClewlyHGNvbXByZXNzL2d6aXAuKCpSZWFkZXIpLlJlYWTYS1XuP9msnhJzeXNjYWxsLlJhd1N5c2NhbGzWMBrRB2IFQmdzbGljZXMuaW5zZXJ0aW9uU29ydENtcEZ1bmNbZ28uc2hhcGUuc3RydWN0IHsgZW5jb2RpbmcvanNvbi52IHJlZmxlY3QuVmFsdWU7IGVuY29kaW5nL2pzb24ua3Mgc3RyaW5nIH1dHnazW7PsDQNPZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCpiYXNlUmVxdWVzdFNlbmRlcikuc2VuZK8kCSF10Sb1H25ldC9odHRwLigqVHJhbnNwb3J0KS5yb3VuZFRyaXAOXWN+AA9KcTlnby5vcGVudGVsZW1ldHJ5LmlvL2NvbnRyaWIvenBhZ2VzLigqU3BhblByb2Nlc3NvcikuT25FbmQegwRk2MiQWRtyZWdleHAuKCpSZWdleHApLmFsbE1hdGNoZXO2IoDxNjMcFhpydW50aW1lLigqbWhlYXApLmFsbG9jU3BhbsBIvrVtMpCKLWdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuZGVjb2RlTWVzc2FnZaui8EyD3+S2KXJ1bnRpbWUuKCpnY0NvbnRyb2xsZXJTdGF0ZSkuZW5saXN0V29ya2Vyfluu2FB9MM0McnVudGltZS5tcHV0vXdCB2Fyj2kjcnVudGltZS4oKnVud2luZGVyKS5yZXNvbHZlSW50ZXJuYWwJylTUF5mfwiNjb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuUmVhZGymHc/Ad5l5FnJ1bnRpbWUuKCpnY0JpdHMpLmJpdHCQMVduJtsLY0VnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqU3RyaW5nKS5BcHBlbmRSb3fhxfW0jPt/mQ1ydW50aW1lLnN0b3Btlp4KlPgboIYYcnVudGltZS4oKnVud2luZGVyKS5pbml0lM8DDVzAGh1AZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL3Byb3RvLigqQmxvY2spLkRlY29kZcIiqcYvRxaMPWdpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqZGVjb21wcmVzc29yKS5uZXh0QmxvY2v4hyrG2t9TYwxzb3J0LnBkcXNvcnRxG1NqYFrw8hNyZWZsZWN0Lm1hcGl0ZXJuZXh0lKxkAiT6KVRMZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcGRhdGEvcG1ldHJpYy5OdW1iZXJEYXRhUG9pbnRTbGljZS5BcHBlbmRFbXB0eUnfDj6hKUGYE3J1bnRpbWUuZ29zY2hlZEltcGzeeaUJ6I+ADUBnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wZGF0YS9wbWV0cmljLk1ldHJpYy5TZXRFbXB0eUdhdWdlTe76i9L+SCtFZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvdGV4dHBhcnNlLigqUHJvbVBhcnNlcikuTWV0cmlj0Fs3gn1wpktBZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkFycmF5KS5BcHBlbmSSkZjMM1e5E11naXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvcmVjZWl2ZXIvcHlyb3Njb3BlcmVjZWl2ZXIvcHByb2ZwYXJzZXIuKCpwUHJvZlBhcnNlcikuUGFyc2XhStFebo1tbw9ydW50aW1lLnNpZ25hbE3luQTS3KLf2hBydW50aW1lLnB1dGVtcHR5uw20YjmvCZI0Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpiYXRjaCkuU2VuZOKaiUS2U93wS2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqdGltZW91dFNlbmRlcikuc2VuZNnu4qi07LZBC2lvLlJlYWRGdWxsF3qlBrgCg34bZW5jb2RpbmcvanNvbi5zdHJpbmdFbmNvZGVyJFWdXKyFNSVgZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyL2NvbXByZXNzLigqRGVjb21wcmVzc29yKS5EZWNvbXByZXNzn0cPG3qBY2peZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKkRlbHRhSGVhcFByb2ZpbGVyKS5Xcml0ZUhlYXBQcm90b1zZ14+h/xuPPGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkuZmlyc3RCbG9ja8hEQut8+1ZbEXJ1bnRpbWUuY29weXN0YWNrtzR8hUOxOkFfZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcGRhdGEvaW50ZXJuYWwvZGF0YS9wcm90b2dlbi9jb21tb24vdjEuKCpBbnlWYWx1ZSkuR2V0U3RyaW5nVmFsdWWm6tgdTYsP1ltnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmxvZ3NFeHBvcnRlcldpdGhPYnNlcnZhYmlsaXR5KS5zZW5kcf7Fu/fQRVFXZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL2NsaWNraG91c2Vwcm9maWxlZXhwb3J0ZXIvY2gucmVhZFRyZWVGcm9tTWFwpBEJjMmnUVxAZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLm11dGF0ZVJlcG9ydFNhbXBsZUxhYmVscz2cWNhqEPJTP2dpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqaHVmZm1hbkVuY29kZXIpLmJpdENvdW50c44mpXyGCYhiGm5ldC4oKlJlc29sdmVyKS50cnlPbmVOYW1lw81YPvZGX+0PcnVudGltZS5nY0RyYWluuZEeoKOMMzoScnVudGltZS50eXBlQXNzZXJ0f1499lZIPiMrZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5pbml0LmZ1bmMzNzfbAGvT61NQGnJ1bnRpbWUuKCpfZnVuYykuaXNJbmxpbmVkz7tq3jZIVoA9Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuZW5kU3BhbgoVOlOd6TwIFnJ1bnRpbWUuZ2NCZ01hcmtXb3JrZXLpsCOxr9VmyRRydW50aW1lLnN0b3BUaGVXb3JsZDCskYca6cckF3J1bnRpbWUuKCpzcGFuU2V0KS5wdXNoG3akRvjvQv5CZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkVudW04KS5TY2FuUm93IzEir84N79kfbmV0L2h0dHAuKCpUcmFuc3BvcnQpLlJvdW5kVHJpcLGYFjEZdNRwTmdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqbWV0cmljc1JlcXVlc3QpLkV4cG9ydBlezRHBe9WjPGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLkFwcGVuZFN0cnVjdDKvgezXfoSWFXJ1bnRpbWUuY29uY2F0c3RyaW5nc6ksmAXwqTabIXJ1bnRpbWUvaW50ZXJuYWwvc3lzY2FsbC5TeXNjYWxsNvkfAsiVQ7scEnJ1bnRpbWUucmVhZHZhcmludDgSHaZ7pavMIm5ldC9odHRwLigqcmVzcG9uc2UpLmZpbmlzaFJlcXVlc3SNPs/A0OxGUwxzeXNjYWxsLnJlYWQdF+dCM5L6Mw9zeXNjYWxsLlN5c2NhbGwznk7U9cAkyTlnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLnByb2Nlc3NsimGjOL2eIDFnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9nemlwLigqUmVhZGVyKS5SZWFka5gDYPkVCG+bAWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2ludGVybmFsL3F1ZXVlLigqYm91bmRlZE1lbW9yeVF1ZXVlW2dvLnNoYXBlLmludGVyZmFjZSB7IEV4cG9ydChjb250ZXh0LkNvbnRleHQpIGVycm9yOyBJdGVtc0NvdW50KCkgaW50IH1dKS5Db25zdW1lzTduQC7IvGsRcnVudGltZS5GdW5jRm9yUEO4zles2qhBsw9ydW50aW1lLm5ldHBvbGy2xqYIqOnAXhhyZWZsZWN0LigqTWFwSXRlcikuVmFsdWXYyas6zGuKChJydW50aW1lLmZ1dGV4c2xlZXA7Qg6tSD4gNxhydW50aW1lLigqdW53aW5kZXIpLm5leHS5xuaiwYlLwBpyZWdleHAuKCpSZWdleHApLmJhY2t0cmFja55UHHSxS7BvIW5ldC9odHRwLigqcGVyc2lzdENvbm4pLndyaXRlTG9vcGVjHTvvJLw/XmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci4oKnB5cm9zY29wZVJlY2VpdmVyKS5yZWFkUHJvZmlsZXO6YrcGyA3h/A1ydW50aW1lLmZ1dGV4KG0JkeqaU0deZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLigqcHlyb3Njb3BlUmVjZWl2ZXIpLmhhbmRsZS5mdW5jMd7fV1jzoLjOFG5ldC4oKlJlc29sdmVyKS5kaWFs9QGm631XjqwMcnVudGltZS5tZ2V0gRaReXlmJeERcnVudGltZS5yYXdzdHJpbmfolE9SCL2i3B5pbnRlcm5hbC9wb2xsLnJ1bnRpbWVfcG9sbE9wZW4jd7ETu2H1phdydW50aW1lLigqbGZzdGFjaykucHVzaFpSzKpKDPMvoQFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqbWV0cmljR3JvdXApLnRvRGlzdHJpYnV0aW9uUG9pbnQuKCptZXRyaWNHcm91cCkuc29ydFBvaW50cy5mdW5jMSpRe8A3X4PwGHJ1bnRpbWUuc3RhY2tjYWNoZV9jbGVhctlb9l0SSbepFnJ1bnRpbWUuKCptaGVhcCkuYWxsb2MwXtmq5s6NuiNlbmNvZGluZy9iaW5hcnkubGl0dGxlRW5kaWFuLlVpbnQ2NLWdYAhe/TbjRmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS5tdXRhdGVSZXBvcnRTYW1wbGVMYWJlbHMuZnVuYzHZ8UHwc2oWLxJuZXQuKCpuZXRGRCkuV3JpdGUIouedHfF3iElnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKnJldHJ5U2VuZGVyKS5zZW5kpq3W81AgmtkUYnl0ZXMuKCpCdWZmZXIpLlJlYWSutJwq7IXyuitnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmluaXQuZnVuYzM2VqbWt4FhruU7Z2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpjb21wcmVzc29yKS5zdG9yZUZhc3QmMEU+cn+chVJnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mL2ludGVybmFsL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLmZsdXNoXHz0ySnHsrURbmV0LigqbmV0RkQpLlJlYWQSuVK4WYewjmRnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5leHBvcnRIaXN0b2dyYW1EYXRhUG9pbnRzlwxfZlJq98AVZW5jb2RpbmcvanNvbi5NYXJzaGFs8ZRk6cJ+c0pJZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkFycmF5KS5hcHBlbmRSb3dQbGFpboHGHHDqL5PKJWdpdGh1Yi5jb20vZ28tZmFzdGVyL2NpdHkuaGFzaDEyOHRvNjQIwEsri+2Ih0NnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mLigqSGVhcFByb2ZpbGVyKS5Qcm9maWxlQiQCXQ4hhvlFZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuYWRkUmVwb3J0U2FtcGxlQpvOrnEC5VIPcmVmbGVjdC5jb3B5VmFsmSM2I+8EZcZZZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5lbWl0TG9jYXRpb27kKCgBqHtIfCtjb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuaHVmZm1hbkJsb2NryHH5IMz1bdUYYnl0ZXMuKCpCdWZmZXIpLlJlYWRGcm9t7En9KV6YTOYccnVudGltZS4oKnN3ZWVwTG9ja2VkKS5zd2VlcK5J2Y9lYMQXDXN5c2NhbGwud3JpdGWdT7Bfxnx6ZCJydW50aW1lLmdjRHJhaW5NYXJrV29ya2VyRGVkaWNhdGVkAEOjrwIwah8ZbmV0L2h0dHAuKCpSZXF1ZXN0KS53cml0ZSb3WRNj/VQOYGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydE51bWJlckRhdGFQb2ludNkjCXuTHSUDFnJ1bnRpbWUuKCpGcmFtZXMpLk5leHRJoamZx8dbcRtydW50aW1lLnN0YXJ0VGhlV29ybGQuZnVuYzHlDd6WNcbNDQ9ydW50aW1lLmdvZXhpdDDseL9Vb6p3Jw9zdHJpbmdzLkNvbXBhcmUEuBUoG+a7+xdydW50aW1lLmdjRmx1c2hCZ0NyZWRpdIadauvDVYG2TGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci5wb3N0UHJvY2Vzc1Byb2b60DLvY59YcxRidWZpby4oKlJlYWRlcikuUmVhZBIyaT2sTm02HXJ1bnRpbWUudHlwZVBvaW50ZXJzLm5leHRGYXN0OHpnJxRQo9UTcnVudGltZS5mdXRleHdha2V1cNgb7bsU17TYFHJ1bnRpbWUuc2VsZWN0bmJyZWN2HI96gr7orp8TcnVudGltZS5yb3VuZHVwc2l6ZXiWBt8Vuu2XGHJ1bnRpbWUubWFwYXNzaWduX2Zhc3Q2NN9HAeidKjSGFnJlZ2V4cC4oKlJlZ2V4cCkuU3BsaXTYer09rKL6gihjb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikubmV4dEJsb2NrbBnsSa6uT14acnVudGltZS5tYXJrQml0cy5zZXRNYXJrZWSUN1G5Bpdmzx1uZXQvaHR0cC4oKlJlcXVlc3QpLlBhcnNlRm9ybaSWh0tCJk4pH3J1bnRpbWUuKCptY2VudHJhbCkudW5jYWNoZVNwYW6F/axaFAZ6WxRydW50aW1lLm5leHRGcmVlRmFzdMUegS5iNcwmPmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkucHJlcGFyZUJhdGNos1Dtsb87TWM8Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvbGFiZWxzLigqQnVpbGRlcikuRGVsmk4XSzYVVyMNcnVudGltZS5tUGFya8g6m4BlxqYBEW5ldC4oKmNvbm4pLldyaXRliYAoNgNtkdk3Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvdmFsdWUuSXNTdGFsZU5hTkXcO8gzTRfJeGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0cmFuc2FjdGlvbikuZ2V0TWV0cmljc4IXBNH1lMtvKWdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUudW5tYXJzaGFsPczaJBi8chVnZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3BrZy90cmFuc2xhdG9yL3Byb21ldGhldXMud29yZFRvVUNVTU9yRGVmYXVsdMKPWoQNhCwYRmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy4oKlNjcmF0Y2hCdWlsZGVyKS5MYWJlbHN8uSC3te6SNlxnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5jb2xsZWN0RnJvbU1ldHJpY0sKv/002FRnHXJ1bnRpbWUuKCptY2VudHJhbCkuY2FjaGVTcGFu65058wrY2+kPcnVudGltZS5iZ3N3ZWVw8xblPQF6X9gpZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5QYXJzZURhdGFGPKTnSvZBJxpydW50aW1lLnN0b3BUaGVXb3JsZC5mdW5jMcR0RkzCbw+YG3J1bnRpbWUuZW50ZXJzeXNjYWxsX3N5c21vbvti8kBbKdiFCm5ldC5zb2NrZXRSAtDJWqJpyjdnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmJhdGNoKS5yZWxlYXNlGZEA7ML+AukjcnVudGltZS4oKm1zcGFuKS53cml0ZUhlYXBCaXRzU21hbGwYB0RLGoaC91dnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9pbnRlcm5hbC9mYW5vdXRjb25zdW1lci4oKm1ldHJpY3NDb25zdW1lcikuQ29uc3VtZU1ldHJpY3NRws6TIrggXDdnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKnN0cnVjdE1hcCkuTWFwLVC+2K79KVcYcnVudGltZS4oKm1jZW50cmFsKS5ncm93iTs1oz8F4vQVcnVudGltZS5zdGFydFRoZVdvcmxkqZwxP1Av1UsRcnVudGltZS5zZWx1bmxvY2v4Dclm+zUYczhnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvLigqU2Vzc2lvbikudGFrZVNuYXBzaG90c6n1a8KtZq/SEHJ1bnRpbWUubWFsbG9jZ2MZPIbLE+dNxERnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLkFwcGVuZFJvdzu2SyNbL4c2NmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLkFwcGVuZMrtZYME9hTgFXJ1bnRpbWUubWFya3Jvb3RCbG9ja+amLDVsHwwbIG5ldC9odHRwLnBlcnNpc3RDb25uV3JpdGVyLldyaXRlhdX3VuV6AqQ6Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLmR1bXBIZWFwUHJvZmlsZfd+BDwJjVnSEXJ1bnRpbWUuZ29zY2hlZF9tUK5Jx0owvUoacnVudGltZS5tYXBhY2Nlc3MyX2Zhc3RzdHL0FXM049HETBVydW50aW1lLmNvbmNhdHN0cmluZzJdJGt6HfUCJh9lbmNvZGluZy9qc29uLm1hcEVuY29kZXIuZW5jb2RlWYSf9MuzSxk4Z2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpkZWNvbXByZXNzb3IpLlJlYWR0SzZAZBi3yj1naXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUubmV3U2NyYXBlUG9vbC5mdW5jMS4xTZR2Ltes0OAYcnVudGltZS4oKmdjV29yaykudHJ5R2V0o8C216hKIR0TbWltZS5QYXJzZU1lZGlhVHlwZVpQU4TQ5kGuHmludGVybmFsL3BvbGwuKCpwb2xsRGVzYykuaW5pdGtR4D8YRs0UE3J1bnRpbWUuc3lzdGVtc3RhY2ssTzgSyRh/uVpnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5wdXNoTWV0cmljc0RhdGFQvbnXthIpbl1naXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5jb2xsZWN0RnJvbU1ldHJpY3P3Sqs2BSzGjjdnby5vcGVudGVsZW1ldHJ5LmlvL290ZWwvc2RrL3RyYWNlLigqcmVjb3JkaW5nU3BhbikuRW5kFQvkHKWJbk46Z28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay9tZXRyaWMuKCppbnQ2NEluc3QpLmFnZ3JlZ2F0ZT2JCHg4rjujGGJ1ZmlvLigqUmVhZGVyKS5SZWFkQnl0ZQN8NNbAUF0+WWdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuTG9jc0ZvclN0YWNrTykauVEuTyoRcnVudGltZS5mdW5jbGluZTE3wHHL99E4NhVuZXQvaHR0cC4oKkNsaWVudCkuZG+f6hB1pviGgiRjb250ZXh0LigqY2FuY2VsQ3R4KS5wcm9wYWdhdGVDYW5jZWzmC0KrhlJMPyVnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLlBhcnNlZbW/ItM+13AScnVudGltZS5ub3RldHNsZWVwLO//re+hpH4PcnVudGltZS5nZXRpdGFicgmAN379PB4ZbmV0LigqRGlhbGVyKS5EaWFsQ29udGV4dCisGp7pgiw7EHJ1bnRpbWUuc3dlZXBvbmXLRfYfu5jNbglzb3J0LlNvcnR0NqBuHidlCCFydW50aW1lLigqc3dlZXBMb2NrZXIpLnRyeUFjcXVpcmX8bqvLPAErfCNuZXQvaHR0cC5jaGVja0Nvbm5FcnJvcldyaXRlci5Xcml0ZdF0DqAgh9XOEXJ1bnRpbWUucnVucXN0ZWFsFxW+8tl3mREkbmV0L2h0dHAuKCpUcmFuc3BvcnQpLnNldFJlcUNhbmNlbGVyGay1VpKJ+LY7Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5zZW5kUXVlcnnxDnHgdoaczUhnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9tb2RlbC90ZXh0cGFyc2UuKCpQcm9tUGFyc2VyKS5uZXh0VG9rZW5VXQQbde6iZz9naXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLnByb2ZpbGVFdmVudHPnpYlAtOJZQBVydW50aW1lLigqbXNwYW4pLmJhc2UgjRBgIpsaAzZnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvLigqU2Vzc2lvbikuU3RhcnQuZnVuYzEeFibdAh1ugTpnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9tb2RlbC9sYWJlbHMuTGFiZWxzLlJhbmdlc9TFdLUrT2o4Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5oYW5kbGUJLJzor1HC/klnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wcm9jZXNzb3IvYmF0Y2hwcm9jZXNzb3IuKCpzaGFyZCkuc3RhcnRMb29wBkeHDiOEL+cTc3lzY2FsbC5SYXdTeXNjYWxsNvh9uVZtcBB7DW5ldC5zeXNTb2NrZXTsn9FAvt6axUtnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wcm9jZXNzb3IvYmF0Y2hwcm9jZXNzb3IuKCpzaGFyZCkucHJvY2Vzc0l0ZW2E8UYvXvNH5xRydW50aW1lLnBjZGF0YXZhbHVlMVyUQjcdXcp/FHJ1bnRpbWUuUmVhZE1lbVN0YXRz0Q3upRuCDnMYcnVudGltZS4oKm1jYWNoZSkucmVmaWxsesBnD1wxIqgQcnVudGltZS5zY2hlZHVsZX1JIRcgJHV4RGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpUdXBsZSkuQXBwZW5kUm93huEJxDTCfl8RcnVudGltZS5uZXdvYmplY3R7BmF7YzJrrhNydW50aW1lLmZsdXNobWNhY2hlVotoGob81nodbmV0L2h0dHAuKCpUcmFuc3BvcnQpLmdldENvbm6AsTb/INmQPpYBZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvaW50ZXJuYWwvcXVldWUuKCpDb25zdW1lcnNbZ28uc2hhcGUuaW50ZXJmYWNlIHsgRXhwb3J0KGNvbnRleHQuQ29udGV4dCkgZXJyb3I7IEl0ZW1zQ291bnQoKSBpbnQgfV0pLlN0YXJ0LmZ1bmMxYHd1wACuCRAHY21wYm9keaC7+5EE0Rt+FHJlZmxlY3QudHlwZWRtZW1tb3ZlFRam6Bo/3PsUcnVudGltZS50eXBlZG1lbW1vdmVcZl6Ye5rtYiZjb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuaHVmZlN5bckmZwlu+971E3J1bnRpbWUuZnVuY3NwZGVsdGFG3wEYthNxTTdnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLmZsdXNoaj4O5cDsUyAMc3lzY2FsbC5SZWFkh1MLB/cnsD1SZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvaW50ZXJuYWwvbWVtb3J5bGltaXRlci4oKk1lbW9yeUxpbWl0ZXIpLnJlYWRNZW1TdGF0cwQNZU04QaxZPGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2hDb2x1bW4pLkFwcGVuZL2c57X6J7pLQ2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3BkYXRhL3BtZXRyaWMuTWV0cmljU2xpY2UuQXBwZW5kRW1wdHnxt7K5GFSQKSRlbmNvZGluZy9qc29uLigqZW5jb2RlU3RhdGUpLm1hcnNoYWyMXcaD5qvkgg1zeXNjYWxsLldyaXRlB3YjQuZFJMY+Z2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpodWZmbWFuRW5jb2RlcikuZ2VuZXJhdGU8AJLYLLN/mxBydW50aW1lLm1hcmtyb290vroLKR+OzAYPcnVudGltZS5wdXRmdWxsbYz6VAS7xClLZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuc2NyYXBlQW5kUmVwb3J0LmZ1bmMx/8+Qrm2l9xwRcnVudGltZS5zY2FuYmxvY2tMDfiNqq00vwtydW50aW1lLmFkZLxRhWFKG8DLHW5ldC4oKnN5c0RpYWxlcikuZGlhbFBhcmFsbGVs24Usp2X26F0zZ2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpXcml0ZXIpLkNsb3NlsScJFvdqzBYScnVudGltZS5ub3Rld2FrZXVwGv7dRogBa0MHaW8uQ29weS3jUMOau5IIF3J1bnRpbWUuc3Bhbk9mVW5jaGVja2VkLYm/+CpofN9LZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkFycmF5KS5hcHBlbmRSb3dEZWZhdWx0w3v6nYmn07EyZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NvbW1vbi9tb2RlbC5MYWJlbE5hbWVzLkxlc3POpvz7GkSCizJnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uKCpDb2xTdHIpLkFwcGVuZHa9OyQiw6yqOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkuc2VuZERhdGHWw8LQ7S5QKhJydW50aW1lLmZpbmRPYmplY3RzQ/iAz4K3jzxnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNsaWNraG91c2UpLnJlbGVhc2XaVc/eEwOvuBBydW50aW1lLnByZWVtcHRNfSSWQQF57TgUY29udGV4dC5XaXRoRGVhZGxpbmWaF/a9mZZq6xpydW50aW1lLigqdW53aW5kZXIpLmluaXRBdIzjCXS65VefN2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vbW9kZWwuTGFiZWxTZXQuRmluZ2VycHJpbnSgbR/BHd3SAXRnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqdHJhbnNhY3Rpb24pLkNv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"; + let b64_resp = "CgV0b3RhbAo2Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLlN0YXJ0LmZ1bmMxCjlnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCpzY3JhcGVMb29wKS5ydW4KD3J1bnRpbWUuYmdzd2VlcApeZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLigqcHlyb3Njb3BlUmVjZWl2ZXIpLmhhbmRsZS5mdW5jMQoNcnVudGltZS5tY2FsbAohbmV0L2h0dHAuKCpUcmFuc3BvcnQpLmRpYWxDb25uRm9yCltnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9pbnRlcm5hbC9tZW1vcnlsaW1pdGVyLigqTWVtb3J5TGltaXRlcikuc3RhcnRNb25pdG9yaW5nLmZ1bmMxCjxnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9kaXNjb3ZlcnkuKCpNYW5hZ2VyKS5zZW5kZXIKFm5ldC9odHRwLigqY29ubikuc2VydmUKIW5ldC9odHRwLigqcGVyc2lzdENvbm4pLndyaXRlTG9vcAosbmV0LigqUmVzb2x2ZXIpLmdvTG9va3VwSVBDTkFNRU9yZGVyLmZ1bmMzLjEKFnJ1bnRpbWUuZ2NCZ01hcmtXb3JrZXIKSWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3Byb2Nlc3Nvci9iYXRjaHByb2Nlc3Nvci4oKnNoYXJkKS5zdGFydExvb3AKEXJ1bnRpbWUubmFub3RpbWUxCkRnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL3Vwc3RyZWFtL3JlbW90ZS4oKlJlbW90ZSkuaGFuZGxlSm9icwqWAWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2ludGVybmFsL3F1ZXVlLigqQ29uc3VtZXJzW2dvLnNoYXBlLmludGVyZmFjZSB7IEV4cG9ydChjb250ZXh0LkNvbnRleHQpIGVycm9yOyBJdGVtc0NvdW50KCkgaW50IH1dKS5TdGFydC5mdW5jMQolaW50ZXJuYWwvc2luZ2xlZmxpZ2h0LigqR3JvdXApLmRvQ2FsbAo4Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLnRha2VTbmFwc2hvdHMKRWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnNjcmFwZUFuZFJlcG9ydAoQcnVudGltZS5zd2VlcG9uZQpeZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyLigqcHlyb3Njb3BlUmVjZWl2ZXIpLnJlYWRQcm9maWxlcwoOcnVudGltZS5wYXJrX20KEXJ1bnRpbWUuZ29zY2hlZF9tCg9ydW50aW1lLmdvZXhpdDAKJW5ldC9odHRwLigqVHJhbnNwb3J0KS5kZWNDb25uc1Blckhvc3QKHm5ldC9odHRwLigqVHJhbnNwb3J0KS5kaWFsQ29ubgpUZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvaW50ZXJuYWwvbWVtb3J5bGltaXRlci4oKk1lbW9yeUxpbWl0ZXIpLkNoZWNrTWVtTGltaXRzChBydW50aW1lLnNlbGVjdGdvCiJuZXQvaHR0cC4oKnJlc3BvbnNlKS5maW5pc2hSZXF1ZXN0ChVidWZpby4oKldyaXRlcikuRmx1c2gKGW5ldC9odHRwLigqUmVxdWVzdCkud3JpdGUKGm5ldC4oKlJlc29sdmVyKS50cnlPbmVOYW1lChJydW50aW1lLmdjTWFya0RvbmUKE3J1bnRpbWUuc3lzdGVtc3RhY2sKS2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3Byb2Nlc3Nvci9iYXRjaHByb2Nlc3Nvci4oKnNoYXJkKS5wcm9jZXNzSXRlbQpEZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby91cHN0cmVhbS9yZW1vdGUuKCpSZW1vdGUpLnNhZmVVcGxvYWQKmwFnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9pbnRlcm5hbC9xdWV1ZS4oKmJvdW5kZWRNZW1vcnlRdWV1ZVtnby5zaGFwZS5pbnRlcmZhY2UgeyBFeHBvcnQoY29udGV4dC5Db250ZXh0KSBlcnJvcjsgSXRlbXNDb3VudCgpIGludCB9XSkuQ29uc3VtZQoibmV0LigqUmVzb2x2ZXIpLmxvb2t1cElQQWRkci5mdW5jMQowZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLnJlc2V0CktnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCpzY3JhcGVMb29wKS5zY3JhcGVBbmRSZXBvcnQuZnVuYzEKB2lvLkNvcHkKFGNvbnRleHQuV2l0aERlYWRsaW5lChVuZXQvaHR0cC4oKkNsaWVudCkuRG8KS2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnNjcmFwZUFuZFJlcG9ydC5mdW5jMgo8Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuYXBwZW5kChxydW50aW1lLigqc3dlZXBMb2NrZWQpLnN3ZWVwCiFydW50aW1lLigqc3dlZXBMb2NrZXIpLnRyeUFjcXVpcmUKHGVuY29kaW5nL2JpbmFyeS5BcHBlbmRWYXJpbnQKX2dpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci4oKnB5cm9zY29wZVJlY2VpdmVyKS5vcGVuTXVsdGlwYXJ0Ch1lbmNvZGluZy9iaW5hcnkuQXBwZW5kVXZhcmludApdZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyL3Bwcm9mcGFyc2VyLigqcFByb2ZQYXJzZXIpLlBhcnNlCmBnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvcmVjZWl2ZXIvcHlyb3Njb3BlcmVjZWl2ZXIvY29tcHJlc3MuKCpEZWNvbXByZXNzb3IpLkRlY29tcHJlc3MKTGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci5wb3N0UHJvY2Vzc1Byb2YKEHJ1bnRpbWUuc2NoZWR1bGUKE3J1bnRpbWUuZ29zY2hlZEltcGwKEHJ1bnRpbWUuZ2Rlc3Ryb3kKGm5ldC9odHRwLigqVHJhbnNwb3J0KS5kaWFsClJnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9pbnRlcm5hbC9tZW1vcnlsaW1pdGVyLigqTWVtb3J5TGltaXRlcikucmVhZE1lbVN0YXRzCg9ydW50aW1lLnNlbGxvY2sKEXJ1bnRpbWUuc2VsdW5sb2NrCiBuZXQvaHR0cC5wZXJzaXN0Q29ubldyaXRlci5Xcml0ZQoabmV0L2h0dHAubmV3VHJhbnNmZXJXcml0ZXIKGG5ldC4oKlJlc29sdmVyKS5leGNoYW5nZQoZcnVudGltZS5nY01hcmtUZXJtaW5hdGlvbgoicnVudGltZS5nY0RyYWluTWFya1dvcmtlckRlZGljYXRlZAodcnVudGltZS5nY0RyYWluTWFya1dvcmtlcklkbGUKUGdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3BkYXRhL3BtZXRyaWMuUmVzb3VyY2VNZXRyaWNzU2xpY2UuTW92ZUFuZEFwcGVuZFRvCkdnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL3Vwc3RyZWFtL3JlbW90ZS4oKlJlbW90ZSkudXBsb2FkUHJvZmlsZQpKZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIubmV3UXVldWVTZW5kZXIuZnVuYzEKDm5ldC5pbml0LmZ1bmMxChRydW50aW1lLmFjcXVpcmVTdWRvZwo1Z2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby4oKlNlc3Npb24pLnVwbG9hZERhdGEKT2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3JlY2VpdmVyL3JlY2VpdmVyaGVscGVyLigqT2JzUmVwb3J0KS5FbmRNZXRyaWNzT3AKdGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0cmFuc2FjdGlvbikuQ29tbWl0Cg1pby5jb3B5QnVmZmVyChljb250ZXh0LldpdGhEZWFkbGluZUNhdXNlChVuZXQvaHR0cC4oKkNsaWVudCkuZG8KPGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS4oKnNjcmFwZUxvb3ApLnJlcG9ydApGZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvbGFiZWxzLigqU2NyYXRjaEJ1aWxkZXIpLkxhYmVscwpIZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvdGV4dHBhcnNlLigqUHJvbVBhcnNlcikubmV4dFRva2VuCkNnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCpzY3JhcGVDYWNoZSkuZm9yRWFjaFN0YWxlCj1naXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9tb2RlbC9sYWJlbHMuTGFiZWxzLlZhbGlkYXRlCj1naXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUubmV3U2NyYXBlUG9vbC5mdW5jMS4xCkNnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCp0aW1lTGltaXRBcHBlbmRlcikuQXBwZW5kCkVnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9tb2RlbC90ZXh0cGFyc2UuKCpQcm9tUGFyc2VyKS5NZXRyaWMKH3J1bnRpbWUuKCpnY0JpdHNBcmVuYSkudHJ5QWxsb2MKFHJ1bnRpbWUubG9ja1dpdGhSYW5rCiZuZXQvaHR0cC4oKlJlcXVlc3QpLlBhcnNlTXVsdGlwYXJ0Rm9ybQoRcnVudGltZS5ncm93c2xpY2UKJWdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuUGFyc2UKPGdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUuKCpQcm9maWxlKS5Xcml0ZVVuY29tcHJlc3NlZApfZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL3JlY2VpdmVyL3B5cm9zY29wZXJlY2VpdmVyL2NvbXByZXNzLigqRGVjb21wcmVzc29yKS5yZWFkQnl0ZXMKRmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci5nZXROb2RlSWQKJWdpdGh1Yi5jb20vZ28tZmFzdGVyL2NpdHkuaGFzaDEyOHRvNjQKCnNvcnQuU2xpY2UKGHJ1bnRpbWUubWFwYXNzaWduX2Zhc3Q2NAoWcnVudGltZS51bmxvY2tXaXRoUmFuawoVcnVudGltZS5yZXNldHNwaW5uaW5nChRydW50aW1lLmZpbmRSdW5uYWJsZQoNcnVudGltZS53YWtlcAoQcnVudGltZS5mdW5jbmFtZQo4Z2l0aHViLmNvbS9td2l0a293L2dvLWNvbm50cmFjay5OZXdEaWFsQ29udGV4dEZ1bmMuZnVuYzEKEXJ1bnRpbWUubmV3b2JqZWN0ChRydW50aW1lLlJlYWRNZW1TdGF0cwojbmV0L2h0dHAuY2hlY2tDb25uRXJyb3JXcml0ZXIuV3JpdGUKEW5ldC4oKmNvbm4pLldyaXRlCh5uZXQvaHR0cC5pc0tub3duSW5NZW1vcnlSZWFkZXIKFG5ldC4oKlJlc29sdmVyKS5kaWFsChZuZXQuZG5zUGFja2V0Um91bmRUcmlwChFuZXQuKCpjb25uKS5DbG9zZQoTcnVudGltZS5tUHJvZl9GbHVzaAoPcnVudGltZS5nY0RyYWluCk9nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKmJhc2VSZXF1ZXN0U2VuZGVyKS5zZW5kChhuZXQuKCpSZXNvbHZlcikubG9va3VwSVAKOmdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28uKCpTZXNzaW9uKS5kdW1wSGVhcFByb2ZpbGUKJWdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28ubnVtR0MKSGdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3JlY2VpdmVyL3JlY2VpdmVyaGVscGVyLigqT2JzUmVwb3J0KS5lbmRPcApXZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvaW50ZXJuYWwvZmFub3V0Y29uc3VtZXIuKCptZXRyaWNzQ29uc3VtZXIpLkNvbnN1bWVNZXRyaWNzCnhnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqdHJhbnNhY3Rpb24pLmdldE1ldHJpY3MKhAFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqaW5pdGlhbFBvaW50QWRqdXN0ZXIpLkFkanVzdE1ldHJpY3MKGGJ5dGVzLigqQnVmZmVyKS5SZWFkRnJvbQokY29udGV4dC4oKmNhbmNlbEN0eCkucHJvcGFnYXRlQ2FuY2VsChduZXQvaHR0cC4oKkNsaWVudCkuc2VuZApFZ2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvc2NyYXBlLigqc2NyYXBlTG9vcCkuYWRkUmVwb3J0U2FtcGxlCgtydW50aW1lLmFkZAo1Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NvbW1vbi9tb2RlbC5MYWJlbFZhbHVlLklzVmFsaWQKOGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy5OZXdCdWlsZGVyCnpnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqdHJhbnNhY3Rpb24pLmdldFNlcmllc1JlZgoRc3RyaW5ncy5JbmRleEJ5dGUKDXJ1bnRpbWUubG9jazIKHW5ldC9odHRwLigqUmVxdWVzdCkuUGFyc2VGb3JtChBydW50aW1lLm1hbGxvY2djCilnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLlBhcnNlRGF0YQoKaW8uUmVhZEFsbAonZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5tYXJzaGFsCh5naXRodWIuY29tL2dvLWZhc3Rlci9jaXR5LkNINjQKEXNvcnQucGRxc29ydF9mdW5jChFydW50aW1lLm1lbWhhc2g2NAoPcnVudGltZS51bmxvY2syChpydW50aW1lLigqcmFuZG9tRW51bSkubmV4dAoxcnVudGltZS4oKmdjQ29udHJvbGxlclN0YXRlKS5maW5kUnVubmFibGVHQ1dvcmtlcgoNcnVudGltZS5zdG9wbQoNcnVudGltZS5tUGFyawoRcnVudGltZS5zdGVhbFdvcmsKEHJ1bnRpbWUubmFub3RpbWUKD3J1bnRpbWUubmV0cG9sbAoOcnVudGltZS5zdGFydG0KD3J1bnRpbWUuZXhlY3V0ZQoWcnVudGltZS5nb3N0cmluZ25vY29weQoRcnVudGltZS5wTWFzay5zZXQKNWdpdGh1Yi5jb20vbXdpdGtvdy9nby1jb25udHJhY2suZGlhbENsaWVudENvbm5UcmFja2VyChVydW50aW1lLnN0YXJ0VGhlV29ybGQKFHJ1bnRpbWUuc3RvcFRoZVdvcmxkChJuZXQuKCpuZXRGRCkuV3JpdGUKEnJ1bnRpbWUudHlwZUFzc2VydAoZbmV0LigqRGlhbGVyKS5EaWFsQ29udGV4dAoSbmV0LigqbmV0RkQpLkNsb3NlChlydW50aW1lLm1Qcm9mX0ZsdXNoTG9ja2VkChlydW50aW1lLigqZ2NXb3JrKS5iYWxhbmNlChBydW50aW1lLm1hcmtyb290ChdydW50aW1lLmdjRmx1c2hCZ0NyZWRpdAodcnVudGltZS50eXBlUG9pbnRlcnMubmV4dEZhc3QKEnJ1bnRpbWUuYXJlbmFJbmRleAoScnVudGltZS5zY2Fub2JqZWN0ChJydW50aW1lLndiQnVmRmx1c2gKGHJ1bnRpbWUuc3BhbkNsYXNzLm5vc2NhbgoYcnVudGltZS4oKmdjV29yaykudHJ5R2V0Clxnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKm1ldHJpY3NTZW5kZXJXaXRoT2JzZXJ2YWJpbGl0eSkuc2VuZApbZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuKCpsb2dzRXhwb3J0ZXJXaXRoT2JzZXJ2YWJpbGl0eSkuc2VuZAobbmV0LigqY29uZikuaG9zdExvb2t1cE9yZGVyCgpydW50aW1lLkdDCkNnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mLigqSGVhcFByb2ZpbGVyKS5Qcm9maWxlClBnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9yZWNlaXZlci9yZWNlaXZlcmhlbHBlci4oKk9ic1JlcG9ydCkucmVjb3JkTWV0cmljcwpIZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvY29uc3VtZXIuQ29uc3VtZU1ldHJpY3NGdW5jLkNvbnN1bWVNZXRyaWNzCkNnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wZGF0YS9wbWV0cmljLk1ldHJpY1NsaWNlLkFwcGVuZEVtcHR5CkBnby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wZGF0YS9wbWV0cmljLk1ldHJpYy5TZXRFbXB0eUdhdWdlCntnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqbWV0cmljRmFtaWx5KS5hcHBlbmRNZXRyaWMKigFnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqaW5pdGlhbFBvaW50QWRqdXN0ZXIpLmFkanVzdE1ldHJpY1N1bW1hcnkKGGlvLigqTGltaXRlZFJlYWRlcikuUmVhZAoRcnVudGltZS5tYXBhc3NpZ24KDW5ldC9odHRwLnNlbmQKPWdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL3NjcmFwZS5uZXdTY3JhcGVQb29sLmZ1bmMxLjIKdGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0cmFuc2FjdGlvbikuQXBwZW5kChh1bmljb2RlL3V0ZjguVmFsaWRTdHJpbmcKEXJ1bnRpbWUubWFrZXNsaWNlCmtnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLmdldFNlcmllc1JlZgogaW50ZXJuYWwvYnl0ZWFsZy5JbmRleEJ5dGVTdHJpbmcKEXJ1bnRpbWUucHJvY3lpZWxkChZuZXQvaHR0cC5wYXJzZVBvc3RGb3JtChRydW50aW1lLnByb2ZpbGVhbGxvYwo1Z2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS4oKlByb2ZpbGUpLkNoZWNrVmFsaWQKKWdpdGh1Yi5jb20vZ29vZ2xlL3Bwcm9mL3Byb2ZpbGUudW5tYXJzaGFsChRieXRlcy4oKkJ1ZmZlcikuUmVhZAoxZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS4oKlByb2ZpbGUpLmVuY29kZQoXcnVudGltZS4oKmxmc3RhY2spLnB1c2gKDHJ1bnRpbWUubXB1dAoRcnVudGltZS5ub3Rlc2xlZXAKEXJ1bnRpbWUucnVucXN0ZWFsCiJydW50aW1lL2ludGVybmFsL3N5c2NhbGwuRXBvbGxXYWl0ChJydW50aW1lLm5vdGV3YWtldXAKEnJ1bnRpbWUuY2FzZ3N0YXR1cwoccnVudGltZS4oKnJhbmRvbU9yZGVyKS5zdGFydAoQcnVudGltZS5maW5kbnVsbAopZ29sYW5nLm9yZy94L25ldC90cmFjZS4oKmV2ZW50TG9nKS5FcnJvcmYKGnJ1bnRpbWUuKCptY2FjaGUpLm5leHRGcmVlChpydW50aW1lLlJlYWRNZW1TdGF0cy5mdW5jMQoNc3lzY2FsbC5Xcml0ZQoPcnVudGltZS5nZXRpdGFiCh1uZXQuKCpzeXNEaWFsZXIpLmRpYWxQYXJhbGxlbAoZaW50ZXJuYWwvcG9sbC4oKkZEKS5DbG9zZQoUcnVudGltZS4oKmJ1Y2tldCkubXAKKXJ1bnRpbWUuKCpnY0NvbnRyb2xsZXJTdGF0ZSkuZW5saXN0V29ya2VyCg9ydW50aW1lLmhhbmRvZmYKFXJ1bnRpbWUubWFya3Jvb3RCbG9jawoWcnVudGltZS5tYXJrcm9vdC5mdW5jMQoacnVudGltZS5tYXJrQml0cy5zZXRNYXJrZWQKEnJ1bnRpbWUuZ3JleW9iamVjdAoScnVudGltZS5maW5kT2JqZWN0ChNydW50aW1lLnJlYWRVaW50cHRyChNydW50aW1lLnBhZ2VJbmRleE9mChVydW50aW1lLigqbXNwYW4pLmJhc2UKGXJ1bnRpbWUubWFya0JpdHMuaXNNYXJrZWQKKHJ1bnRpbWUuKCptc3BhbikudHlwZVBvaW50ZXJzT2ZVbmNoZWNrZWQKDnJ1bnRpbWUuc3Bhbk9mChZydW50aW1lLigqZ2NCaXRzKS5iaXRwChlydW50aW1lLnR5cGVQb2ludGVycy5uZXh0ChhydW50aW1lLndiQnVmRmx1c2guZnVuYzEKFnJ1bnRpbWUuKCpsZnN0YWNrKS5wb3AKEHJ1bnRpbWUucHV0ZW1wdHkKSWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqcmV0cnlTZW5kZXIpLnNlbmQKT2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqT2JzUmVwb3J0KS5FbmRNZXRyaWNzT3AKSmdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqT2JzUmVwb3J0KS5zdGFydE9wChduZXQuKCpjb25mKS5sb29rdXBPcmRlcgpeZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKkRlbHRhSGVhcFByb2ZpbGVyKS5Xcml0ZUhlYXBQcm90bwo6Z28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay9tZXRyaWMuKCppbnQ2NEluc3QpLmFnZ3JlZ2F0ZQo3Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvdmFsdWUuSXNTdGFsZU5hTgpMZ28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcGRhdGEvcG1ldHJpYy5OdW1iZXJEYXRhUG9pbnRTbGljZS5BcHBlbmRFbXB0eQp4Z2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC4oKm1ldHJpY0dyb3VwKS5zb3J0UG9pbnRzCmdnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcGtnL3RyYW5zbGF0b3IvcHJvbWV0aGV1cy53b3JkVG9VQ1VNT3JEZWZhdWx0CnNnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLigqdGltZXNlcmllc01hcCkuZ2V0CjFnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9nemlwLigqUmVhZGVyKS5SZWFkChxydW50aW1lLm1lbWNsck5vSGVhcFBvaW50ZXJzCkZnaXRodWIuY29tL3Byb21ldGhldXMvY29tbW9uL2NvbmZpZy4oKnVzZXJBZ2VudFJvdW5kVHJpcHBlcikuUm91bmRUcmlwCkBnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUubXV0YXRlUmVwb3J0U2FtcGxlTGFiZWxzCnJnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvcmVjZWl2ZXIvcHJvbWV0aGV1c3JlY2VpdmVyL2ludGVybmFsLm5vcm1hbGl6ZU1ldHJpY05hbWUKHmdvLnViZXIub3JnL3phcC4oKkxvZ2dlcikuV2FybgqFAWdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCp0cmFuc2FjdGlvbikuZ2V0T3JDcmVhdGVNZXRyaWNGYW1pbHkKRmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy5MYWJlbHMuSGFzaFdpdGhvdXRMYWJlbHMKE21pbWUuUGFyc2VNZWRpYVR5cGUKFHJ1bnRpbWUubVByb2ZfTWFsbG9jChlydW50aW1lLm1hcGFjY2VzczFfZmFzdDY0Ci1naXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmRlY29kZU1lc3NhZ2UKD3J1bnRpbWUubWVtbW92ZQotZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvcHJvZmlsZS5lbmNvZGVNZXNzYWdlChxjb21wcmVzcy9nemlwLigqUmVhZGVyKS5SZWFkCiZydW50aW1lL2ludGVybmFsL2F0b21pYy4oKlVpbnQzMikuTG9hZAoScnVudGltZS5mdXRleHNsZWVwChBydW50aW1lLnJ1bnFncmFiCiFydW50aW1lL2ludGVybmFsL3N5c2NhbGwuU3lzY2FsbDYKE3J1bnRpbWUuZnV0ZXh3YWtldXAKDWluZGV4Ynl0ZWJvZHkKKWdvbGFuZy5vcmcveC9uZXQvdHJhY2UuKCpldmVudExvZykucHJpbnRmChhydW50aW1lLigqbWNhY2hlKS5yZWZpbGwKFnJ1bnRpbWUucmVhZG1lbXN0YXRzX20KG3J1bnRpbWUuc3RhcnRUaGVXb3JsZC5mdW5jMQoacnVudGltZS5zdG9wVGhlV29ybGQuZnVuYzEKDXN5c2NhbGwud3JpdGUKG25ldC4oKnN5c0RpYWxlcikuZGlhbFNlcmlhbAoaaW50ZXJuYWwvcG9sbC4oKkZEKS5kZWNyZWYKEHJ1bnRpbWUucHJlZW1wdE0KEHJ1bnRpbWUuZ2V0ZW1wdHkKD3J1bnRpbWUucHV0ZnVsbAoRcnVudGltZS5zY2FuYmxvY2sKEXJ1bnRpbWUuc2NhbnN0YWNrCiVydW50aW1lLigqbXNwYW4pLmhlYXBCaXRzU21hbGxGb3JBZGRyCgxydW50aW1lLmFkZGIKS2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqdGltZW91dFNlbmRlcikuc2VuZAo9Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvZXhwb3J0ZXIvZXhwb3J0ZXJoZWxwZXIuZW5kU3BhbgoyZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay90cmFjZS4oKnRyYWNlcikuU3RhcnQKEHJ1bnRpbWUubmV3c3RhY2sKWWdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuTG9jc0ZvclN0YWNrChFydW50aW1lLkZ1bmNGb3JQQwpSZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi4oKnByb2ZpbGVCdWlsZGVyKS5CdWlsZArgAmdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9mTWFwW2dvLnNoYXBlLnN0cnVjdCB7IGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuYWxsb2NPYmplY3RzIGludDY0IH0sZ28uc2hhcGUuc3RydWN0IHsgZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi5hbGxvY09iamVjdHMgaW50NjQ7IGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuaW51c2VPYmplY3RzIGludDY0IH1dKS5Mb29rdXAKUWdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3Byb2Nlc3Nvci9wcm9jZXNzb3JoZWxwZXIuTmV3TWV0cmljc1Byb2Nlc3Nvci5mdW5jMQoScnVudGltZS5tYXBhY2Nlc3MyCjhnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuUmVhZAofbmV0L2h0dHAuKCpUcmFuc3BvcnQpLlJvdW5kVHJpcAo6Z2l0aHViLmNvbS9wcm9tZXRoZXVzL3Byb21ldGhldXMvbW9kZWwvbGFiZWxzLkxhYmVscy5SYW5nZQofZ28udWJlci5vcmcvemFwLigqTG9nZ2VyKS5jaGVjawpuZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC5uZXdNZXRyaWNGYW1pbHkKGnJ1bnRpbWUuZGVkdWN0QXNzaXN0Q3JlZGl0ChFydW50aW1lLmNtcHN0cmluZwoLc3RyaW5ncy5DdXQKEXJ1bnRpbWUuc3RrYnVja2V0CitnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmluaXQuZnVuYzM2CitnaXRodWIuY29tL2dvb2dsZS9wcHJvZi9wcm9maWxlLmluaXQuZnVuYzM3CiNjb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuUmVhZAoNcnVudGltZS5mdXRleAoLZm10LlNwcmludGYKHXJ1bnRpbWUuKCptY2VudHJhbCkuY2FjaGVTcGFuChdydW50aW1lLmZsdXNoYWxsbWNhY2hlcwodcnVudGltZS5zdGFydFRoZVdvcmxkV2l0aFNlbWEKHHJ1bnRpbWUuc3RvcFRoZVdvcmxkV2l0aFNlbWEKD3N5c2NhbGwuU3lzY2FsbAobbmV0Ligqc3lzRGlhbGVyKS5kaWFsU2luZ2xlCh9pbnRlcm5hbC9wb2xsLigqcG9sbERlc2MpLmNsb3NlCg9ydW50aW1lLnNpZ25hbE0KF3J1bnRpbWUuc2NhbmZyYW1ld29ya2VyCk5nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9leHBvcnRlci9leHBvcnRlcmhlbHBlci4oKm1ldHJpY3NSZXF1ZXN0KS5FeHBvcnQKN2dvLm9wZW50ZWxlbWV0cnkuaW8vb3RlbC9zZGsvdHJhY2UuKCpyZWNvcmRpbmdTcGFuKS5FbmQKS2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL2V4cG9ydGVyL2V4cG9ydGVyaGVscGVyLigqbG9nc1JlcXVlc3QpLkV4cG9ydAo0Z28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay90cmFjZS4oKnRyYWNlcikubmV3U3BhbgoRcnVudGltZS5jb3B5c3RhY2sKF3J1bnRpbWUuKCpzcGFuU2V0KS5wdXNoCllnaXRodWIuY29tL2dyYWZhbmEvcHlyb3Njb3BlLWdvL2dvZGVsdGFwcm9mL2ludGVybmFsL3Bwcm9mLigqcHJvZmlsZUJ1aWxkZXIpLmVtaXRMb2NhdGlvbgpEZ2l0aHViLmNvbS9ncmFmYW5hL3B5cm9zY29wZS1nby9nb2RlbHRhcHJvZi9pbnRlcm5hbC9wcHJvZi5hbGxGcmFtZXMKWGdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuc3RyaW5nSW5kZXgKKXJ1bnRpbWUuKCppbmxpbmVVbndpbmRlcikucmVzb2x2ZUludGVybmFsCjNnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKldyaXRlcikuQ2xvc2UKVGdvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3Byb2Nlc3Nvci9wcm9jZXNzb3JoZWxwZXIuKCpPYnNSZXBvcnQpLk1ldHJpY3NBY2NlcHRlZAoTcnVudGltZS5oZWFwU2V0VHlwZQp1dHlwZTouZXEuZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWNvbGxlY3Rvci1jb250cmliL3JlY2VpdmVyL3Byb21ldGhldXNyZWNlaXZlci9pbnRlcm5hbC50aW1lc2VyaWVzS2V5CjpnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuZG9TdGVwCh9uZXQvaHR0cC4oKlRyYW5zcG9ydCkucm91bmRUcmlwCkNnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUuKCpUYXJnZXQpLkxhYmVsc1JhbmdlLmZ1bmMxCg9ydW50aW1lLkNhbGxlcnMKE3J1bnRpbWUucm91bmR1cHNpemUKKGNvbXByZXNzL2ZsYXRlLigqZGVjb21wcmVzc29yKS5uZXh0QmxvY2sKF3NvcnQuaW5zZXJ0aW9uU29ydF9mdW5jChJmbXQuKCpwcCkuZG9QcmludGYKGHJ1bnRpbWUuKCptY2VudHJhbCkuZ3JvdwoTcnVudGltZS5mbHVzaG1jYWNoZQoScnVudGltZS5wcm9jcmVzaXplChJydW50aW1lLm5vdGV0c2xlZXAKE3N5c2NhbGwuUmF3U3lzY2FsbDYKGG5ldC4oKnN5c0RpYWxlcikuZGlhbFVEUAofaW50ZXJuYWwvcG9sbC5ydW50aW1lX3BvbGxDbG9zZQoOcnVudGltZS50Z2tpbGwKFXJ1bnRpbWUuKCpnY1dvcmspLnB1dApaZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikucHVzaE1ldHJpY3NEYXRhCjlnby5vcGVudGVsZW1ldHJ5LmlvL2NvbnRyaWIvenBhZ2VzLigqU3BhblByb2Nlc3NvcikuT25FbmQKZmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyLigqY2xpY2tob3VzZVByb2ZpbGVFeHBvcnRlcikuc2VuZAo1Z28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3RyYWNlLlNwYW5Db250ZXh0RnJvbUNvbnRleHQKE3J1bnRpbWUuYWRqdXN0ZnJhbWUKGXJ1bnRpbWUubWFwYXNzaWduX2Zhc3RzdHIKUmdpdGh1Yi5jb20vZ3JhZmFuYS9weXJvc2NvcGUtZ28vZ29kZWx0YXByb2YvaW50ZXJuYWwvcHByb2YuKCpwcm9maWxlQnVpbGRlcikuZmx1c2gKFnJ1bnRpbWUuKCpGcmFtZXMpLk5leHQKGHJ1bnRpbWUuZnVuY05hbWVGb3JQcmludAoUcnVudGltZS5zcmNGdW5jLm5hbWUKFHJ1bnRpbWUucGNkYXRhdmFsdWUxCjdnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmNvbXByZXNzb3IpLmNsb3NlCk9nby5vcGVudGVsZW1ldHJ5LmlvL2NvbGxlY3Rvci9wcm9jZXNzb3IvcHJvY2Vzc29yaGVscGVyLigqT2JzUmVwb3J0KS5yZWNvcmREYXRhCiNydW50aW1lLigqbXNwYW4pLndyaXRlSGVhcEJpdHNTbWFsbAoJbWVtZXFib2R5Cj1naXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikubmV4dEJsb2NrChljb250ZXh0LigqY2FuY2VsQ3R4KS5Eb25lCh1uZXQvaHR0cC4oKlRyYW5zcG9ydCkuZ2V0Q29ubgohbmV0L2h0dHAuKCpwZXJzaXN0Q29ubikucm91bmRUcmlwCkZnaXRodWIuY29tL3Byb21ldGhldXMvcHJvbWV0aGV1cy9zY3JhcGUubXV0YXRlUmVwb3J0U2FtcGxlTGFiZWxzLmZ1bmMxCg9ydW50aW1lLmNhbGxlcnMKK2NvbXByZXNzL2ZsYXRlLigqZGVjb21wcmVzc29yKS5odWZmbWFuQmxvY2sKUmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9yZWNlaXZlci9weXJvc2NvcGVyZWNlaXZlci5wb3N0UHJvY2Vzc1Byb2YuZnVuYzIKEmZtdC4oKnBwKS5wcmludEFyZwoWcnVudGltZS4oKm1oZWFwKS5hbGxvYwoYcnVudGltZS5zdGFja2NhY2hlX2NsZWFyChxydW50aW1lLigqbWNhY2hlKS5yZWxlYXNlQWxsChtydW50aW1lLm5vdGV0c2xlZXBfaW50ZXJuYWwKEm5ldC5pbnRlcm5ldFNvY2tldAohcnVudGltZS9pbnRlcm5hbC9zeXNjYWxsLkVwb2xsQ3RsCiBydW50aW1lLigqc3RhY2tTY2FuU3RhdGUpLnB1dFB0cgpdZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuY29sbGVjdEZyb21NZXRyaWNzClFnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLmJhdGNoU2FtcGxlc0FuZFRpbWVTZXJpZXMKdWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLigqY2xpY2tob3VzZUFjY2Vzc05hdGl2ZUNvbHVtbmFyKS5JbnNlcnRCYXRjaAouZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3RyYWNlLlNwYW5Gcm9tQ29udGV4dAofcnVudGltZS4oKnN0a2ZyYW1lKS5nZXRTdGFja01hcAoUcnVudGltZS5uZXh0RnJlZUZhc3QKGHJ1bnRpbWUuZ3Jvd1dvcmtfZmFzdHN0cgotZ2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuTmV3V3JpdGVyChpydW50aW1lLigqX2Z1bmMpLmlzSW5saW5lZAoRcnVudGltZS5mdW5jbGluZTEKHnJ1bnRpbWUuZnVuY05hbWVQaWVjZXNGb3JQcmludAoPcnVudGltZS5wY3ZhbHVlCjtnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmNvbXByZXNzb3IpLnN0b3JlRmFzdAo0Z28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL3Nkay9tZXRyaWMuKCppbnQ2NEluc3QpLkFkZAqhAWdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9yZWNlaXZlci9wcm9tZXRoZXVzcmVjZWl2ZXIvaW50ZXJuYWwuKCptZXRyaWNHcm91cCkudG9EaXN0cmlidXRpb25Qb2ludC4oKm1ldHJpY0dyb3VwKS5zb3J0UG9pbnRzLmZ1bmMxCkdnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmRlY29tcHJlc3NvcikuaHVmZm1hbkJsb2NrRGVjb2RlcgoQcnVudGltZS5tYWtlY2hhbgombmV0L2h0dHAuKCpUcmFuc3BvcnQpLnF1ZXVlRm9ySWRsZUNvbm4KEXJ1bnRpbWUuY2hhbnNlbmQxChhydW50aW1lLigqdW53aW5kZXIpLmluaXQKPGdpdGh1Yi5jb20vcHJvbWV0aGV1cy9wcm9tZXRoZXVzL21vZGVsL2xhYmVscy4oKkJ1aWxkZXIpLkRlbAoVcnVudGltZS5jb25jYXRzdHJpbmcyChhydW50aW1lLigqdW53aW5kZXIpLm5leHQKJmNvbXByZXNzL2ZsYXRlLigqZGVjb21wcmVzc29yKS5odWZmU3ltChdmbXQuKCpwcCkuaGFuZGxlTWV0aG9kcwoXcnVudGltZS5zcGFuT2ZVbmNoZWNrZWQKH3J1bnRpbWUuKCptY2VudHJhbCkudW5jYWNoZVNwYW4KCm5ldC5zb2NrZXQKJG5ldC9odHRwLigqVHJhbnNwb3J0KS5zZXRSZXFDYW5jZWxlcgpcZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci4oKm1ldHJpY3NFeHBvcnRlcikuY29sbGVjdEZyb21NZXRyaWMKNGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLlNlbmQKPGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLkFwcGVuZFN0cnVjdApCZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci5pbml0LmZ1bmMyCkFnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNsaWNraG91c2UpLlByZXBhcmVCYXRjaAo8Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpiYXRjaENvbHVtbikuQXBwZW5kClpnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvY2xpY2tob3VzZXByb2ZpbGVleHBvcnRlci9jaC4oKkxpbWl0ZWRQb29sKS5wdXQKV2dpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLnJlYWRUcmVlRnJvbU1hcAoaY29udGV4dC4oKmNhbmNlbEN0eCkuVmFsdWUKE3J1bnRpbWUucGNkYXRhdmFsdWUKGHJ1bnRpbWUuKCpibWFwKS5vdmVyZmxvdwoYcnVudGltZS5ldmFjdWF0ZV9mYXN0c3RyCgxydW50aW1lLnN0ZXAKLGdpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLmxvYWQzMjMyCklnaXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmh1ZmZtYW5CaXRXcml0ZXIpLndyaXRlQmxvY2tEeW5hbWljCiNlbmNvZGluZy9iaW5hcnkubGl0dGxlRW5kaWFuLlVpbnQ2NAosZ28ub3BlbnRlbGVtZXRyeS5pby9vdGVsL21ldHJpYy5OZXdBZGRDb25maWcKRmdpdGh1Yi5jb20va2xhdXNwb3N0L2NvbXByZXNzL2ZsYXRlLigqZGVjb21wcmVzc29yKS5odWZmbWFuQnVmaW9SZWFkZXIKH25ldC9odHRwLigqd2FudENvbm4pLnRyeURlbGl2ZXIKEHJ1bnRpbWUuY2hhbnNlbmQKGnJ1bnRpbWUuKCp1bndpbmRlcikuaW5pdEF0ChVydW50aW1lLmNvbmNhdHN0cmluZ3MKFXJ1bnRpbWUuY2FsbGVycy5mdW5jMQojcnVudGltZS4oKnVud2luZGVyKS5yZXNvbHZlSW50ZXJuYWwKGGJ1ZmlvLigqUmVhZGVyKS5SZWFkQnl0ZQoUbmV0LigqT3BFcnJvcikuRXJyb3IKDW5ldC5zeXNTb2NrZXQKEW5ldC4oKm5ldEZEKS5kaWFsChtydW50aW1lLm1hcGFzc2lnbl9mYXN0NjRwdHIKYWdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydE51bWJlckRhdGFQb2ludHMKZGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydEhpc3RvZ3JhbURhdGFQb2ludHMKOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkuc2VuZERhdGEKN2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLnJlbGVhc2UKOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLmNsb3NlUXVlcnkKN2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqc3RydWN0TWFwKS5NYXAKNmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqYmF0Y2gpLkFwcGVuZAo+Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5wcmVwYXJlQmF0Y2gKQWdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpBcnJheSkuQXBwZW5kChJydW50aW1lLmNvbnZUc2xpY2UKWmdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9jbGlja2hvdXNlcHJvZmlsZWV4cG9ydGVyL2NoLigqTGltaXRlZFBvb2wpLmdldAoaZW5jb2RpbmcvYmluYXJ5LlJlYWRWYXJpbnQKDWNvbnRleHQudmFsdWUKEnJ1bnRpbWUucmVhZHZhcmludApAZ2l0aHViLmNvbS9rbGF1c3Bvc3QvY29tcHJlc3MvZmxhdGUuKCpodWZmbWFuQml0V3JpdGVyKS5nZW5lcmF0ZQoPcnVudGltZS5nb3JlYWR5ChNydW50aW1lLmZ1bmNzcGRlbHRhChFydW50aW1lLnJhd3N0cmluZwoUcnVudGltZS50cmFjZWJhY2tQQ3MKFW5ldC4oKkROU0Vycm9yKS5FcnJvcgoOc3lzY2FsbC5Tb2NrZXQKFG5ldC4oKm5ldEZEKS5jb25uZWN0CmBnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLigqbWV0cmljc0V4cG9ydGVyKS5leHBvcnROdW1iZXJEYXRhUG9pbnQKN2dpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vbW9kZWwuTGFiZWxTZXQuRmluZ2VycHJpbnQKY2dpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuKCptZXRyaWNzRXhwb3J0ZXIpLmV4cG9ydEhpc3RvZ3JhbURhdGFQb2ludApGZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL3Byb3RvLigqQmxvY2spLkVuY29kZUNvbHVtbgo8Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjbGlja2hvdXNlKS5yZWxlYXNlCjlnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLnByb2Nlc3MKGnJ1bnRpbWUubWFwYWNjZXNzMl9mYXN0c3RyCkBnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvcHJvdG8uKCpCbG9jaykuQXBwZW5kChZyZWdleHAuKCpSZWdleHApLlNwbGl0CjtnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi4oKmNvbm5lY3QpLnNlbmRRdWVyeQo8Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5maXJzdEJsb2NrCkRnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLkFwcGVuZFJvdwo3Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5mbHVzaAoQc3luYy4oKlBvb2wpLkdldAoPcnVudGltZS5lZmFjZWVxCj5naXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmh1ZmZtYW5FbmNvZGVyKS5nZW5lcmF0ZQoWcnVudGltZS5mdW5jSW5mby5lbnRyeQoOc3lzY2FsbC5zb2NrZXQKGGludGVybmFsL3BvbGwuKCpGRCkuSW5pdApFZ2l0aHViLmNvbS9tZXRyaWNvL290ZWwtY29sbGVjdG9yL2V4cG9ydGVyL3FyeW5leHBvcnRlci5idWlsZExhYmVsU2V0Ck5naXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLmJ1aWxkUHJvbUNvbXBsaWFudE5hbWUKFWVuY29kaW5nL2pzb24uTWFyc2hhbAo4Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NvbW1vbi9tb2RlbC5sYWJlbFNldFRvRmluZ2VycHJpbnQKKmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vbW9kZWwuaGFzaEFkZApCZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKlN0cmluZykuRW5jb2RlChRydW50aW1lLnNlbGVjdG5icmVjdgo0Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLigqUmVhZGVyKS5SZWFkQnl0ZQo4Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5oYW5kbGUKNGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKlJlYWRlcikucmVhZEZ1bGwKMmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jaC1nby9wcm90by4oKkNvbFN0cikuQXBwZW5kCiNyZWdleHAuKCpSZWdleHApLkZpbmRBbGxTdHJpbmdJbmRleApJZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkFycmF5KS5hcHBlbmRSb3dQbGFpbgoUc3luYy4oKlBvb2wpLmdldFNsb3cKEXJ1bnRpbWUucnVuR0NQcm9nCj9naXRodWIuY29tL2tsYXVzcG9zdC9jb21wcmVzcy9mbGF0ZS4oKmh1ZmZtYW5FbmNvZGVyKS5iaXRDb3VudHMKGnJ1bnRpbWUuc2VuZC5nb3JlYWR5LmZ1bmMxChJzeXNjYWxsLlJhd1N5c2NhbGwKHmludGVybmFsL3BvbGwuKCpwb2xsRGVzYykuaW5pdAo1Z28ub3BlbnRlbGVtZXRyeS5pby9jb2xsZWN0b3IvcGRhdGEvcGNvbW1vbi5NYXAuUmFuZ2UKUGdpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIucmVtb3ZlUHJvbUZvcmJpZGRlblJ1bmVzCiRlbmNvZGluZy9qc29uLigqZW5jb2RlU3RhdGUpLm1hcnNoYWwKM2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3BkYXRhL3Bjb21tb24uTWFwLkdldAoQcnVudGltZS5yZWxlYXNlbQoJc29ydC5Tb3J0CjVnaXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uQ29sU3RyLkVuY29kZUNvbHVtbgoQcnVudGltZS5jaGFucmVjdgo/Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIuKCpjb25uZWN0KS5wcm9maWxlRXZlbnRzCgtpby5SZWFkRnVsbAobcmVnZXhwLigqUmVnZXhwKS5hbGxNYXRjaGVzCktnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqQXJyYXkpLmFwcGVuZFJvd0RlZmF1bHQKGXN5bmMuKCpwb29sQ2hhaW4pLnBvcFRhaWwKDXJ1bnRpbWUucmVhZHkKEXJ1bnRpbWUuY2hlYXByYW5kCh5pbnRlcm5hbC9wb2xsLnJ1bnRpbWVfcG9sbE9wZW4KS2dpdGh1Yi5jb20vbWV0cmljby9vdGVsLWNvbGxlY3Rvci9leHBvcnRlci9xcnluZXhwb3J0ZXIuYnVpbGRMYWJlbFNldC5mdW5jMQoSc3RyaW5ncy5GaWVsZHNGdW5jCillbmNvZGluZy9qc29uLigqZW5jb2RlU3RhdGUpLnJlZmxlY3RWYWx1ZQoMc29ydC5wZHFzb3J0CkJnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqRW51bTgpLlNjYW5Sb3cKOmdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyLigqY29ubmVjdCkucmVhZERhdGEKDmlvLlJlYWRBdExlYXN0ChpyZWdleHAuKCpSZWdleHApLmRvRXhlY3V0ZQpBZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKkFycmF5KS5hcHBlbmQKX2dvLm9wZW50ZWxlbWV0cnkuaW8vY29sbGVjdG9yL3BkYXRhL2ludGVybmFsL2RhdGEvcHJvdG9nZW4vY29tbW9uL3YxLigqQW55VmFsdWUpLkdldFN0cmluZ1ZhbHVlClZnaXRodWIuY29tL21ldHJpY28vb3RlbC1jb2xsZWN0b3IvZXhwb3J0ZXIvcXJ5bmV4cG9ydGVyLnJlbW92ZVByb21Gb3JiaWRkZW5SdW5lcy5mdW5jMQofZW5jb2RpbmcvanNvbi5tYXBFbmNvZGVyLmVuY29kZQqGAXNsaWNlcy5Tb3J0RnVuY1tnby5zaGFwZS5bXWVuY29kaW5nL2pzb24ucmVmbGVjdFdpdGhTdHJpbmcsZ28uc2hhcGUuc3RydWN0IHsgZW5jb2RpbmcvanNvbi52IHJlZmxlY3QuVmFsdWU7IGVuY29kaW5nL2pzb24ua3Mgc3RyaW5nIH1dChJzb3J0Lmluc2VydGlvblNvcnQKEnJ1bnRpbWUubWFwYWNjZXNzMQpAZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL3Byb3RvLigqQmxvY2spLkRlY29kZQowZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NoLWdvL3Byb3RvLigqUmVhZGVyKS5SZWFkChZydW50aW1lLmdjVHJpZ2dlci50ZXN0ChpyZWdleHAuKCpSZWdleHApLmJhY2t0cmFjawoMcnVudGltZS5tZ2V0ChlieXRlcy4oKkJ1ZmZlcikuV3JpdGVCeXRlChdyZWZsZWN0LigqTWFwSXRlcikuTmV4dAoWcmVmbGVjdC4oKk1hcEl0ZXIpLktleQoYcmVmbGVjdC4oKk1hcEl0ZXIpLlZhbHVlCmFzbGljZXMucGRxc29ydENtcEZ1bmNbZ28uc2hhcGUuc3RydWN0IHsgZW5jb2RpbmcvanNvbi52IHJlZmxlY3QuVmFsdWU7IGVuY29kaW5nL2pzb24ua3Mgc3RyaW5nIH1dChtlbmNvZGluZy9qc29uLnN0cmluZ0VuY29kZXIKMmdpdGh1Yi5jb20vcHJvbWV0aGV1cy9jb21tb24vbW9kZWwuTGFiZWxOYW1lcy5MZXNzChBydW50aW1lLm1lbWhhc2g4Cj1naXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLlR5cGUuQ29sdW1uCkRnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqRGF0ZVRpbWUpLkRlY29kZQoUYnVmaW8uKCpSZWFkZXIpLlJlYWQKGHJlZ2V4cC4oKmJpdFN0YXRlKS5yZXNldApEZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi4oKlR1cGxlKS5BcHBlbmRSb3cKE3JlZmxlY3QubWFwaXRlcm5leHQKD3JlZmxlY3QuY29weVZhbApnc2xpY2VzLmluc2VydGlvblNvcnRDbXBGdW5jW2dvLnNoYXBlLnN0cnVjdCB7IGVuY29kaW5nL2pzb24udiByZWZsZWN0LlZhbHVlOyBlbmNvZGluZy9qc29uLmtzIHN0cmluZyB9XQoVYnl0ZXMuKCpCdWZmZXIpLldyaXRlCgdjbXBib2R5CgthZXNoYXNoYm9keQo2Z2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtZ28vdjIvbGliL2NvbHVtbi5FbnVtCj1naXRodWIuY29tL0NsaWNrSG91c2UvY2gtZ28vcHJvdG8uKCpDb2xEYXRlVGltZSkuRGVjb2RlQ29sdW1uChBuZXQuKCpjb25uKS5SZWFkCkVnaXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1nby92Mi9saWIvY29sdW1uLigqU3RyaW5nKS5BcHBlbmRSb3cKFHJlZmxlY3QudHlwZWRtZW1tb3ZlChJyZWZsZWN0LnVuc2FmZV9OZXcKD3N0cmluZ3MuQ29tcGFyZQoRbmV0LigqbmV0RkQpLlJlYWQKFHJ1bnRpbWUudHlwZWRtZW1tb3ZlCgxzeXNjYWxsLlJlYWQKDHN5c2NhbGwucmVhZAoUcnVudGltZS5lbnRlcnN5c2NhbGwKFnJ1bnRpbWUucmVlbnRlcnN5c2NhbGwKRGdpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWdvL3YyL2xpYi9jb2x1bW4uKCpJbnQ2NCkuQXBwZW5kUm93ChtydW50aW1lLmVudGVyc3lzY2FsbF9zeXNtb24KHHJ1bnRpbWUuKCptaGVhcCkuYWxsb2MuZnVuYzEKGnJ1bnRpbWUuKCptaGVhcCkuYWxsb2NTcGFuChlydW50aW1lLigqbWhlYXApLmluaXRTcGFuCh5ydW50aW1lLigqbW9kdWxlZGF0YSkudGV4dEFkZHISEQoPAICy9fYGAACApd6KCAAAEtEBCs4BAIDokiYAAIDQpUwAAQCA0KVMAACA18xaAAIAgNrECQAAgLSJEwADAIDh6xcAAICcnDkABACA5Zp3AACA0KVMgK3iBAUAgNrECQAAAAAGAAAAAICOzhwABwCAreIEAAAAAAgAAAAAgK3iBAAJAIDaxAkAAICHpw4ACgCAtIkTAACA2sQJAAsAgOeI2AMAAID11vQDAAwAAAAAgK3iBAANAICt4gSAreIEAAAADgAAAACAreIEAA8AgISvXwAAgPPokwEAEACAreIEAAAAABESjAIKiQIAgOiSJgAAgNClTAASAIDQpUwAAIDXzFoAEwCA2sQJAACAtIkTABQAgOHrFwAAgJycOQAVAID9h1EAAIDvuTQAFgCA4esXAACAh6cOABcAgIenDgAAgK3iBAAYAICt4gSAreIEgK3iBAAAGQCAreIEAAAAABoAAAAAgI7OHAAbAICt4gQAAAAAHAAAAACAreIEAB0AAAAAgK3iBAAcAIDaxAkAAICt4gQAHgAAAACAreIEAB8AgLSJEwAAgNrECQAgAICt4gQAAAAAIQCAuqbTAwAAgPXW9AMAIgAAAACAreIEACOAreIEAAAAgK3iBAAkAICEr18AAIDz6JMBACUAgK3iBAAAAAAmEr0DCroDAICt4gQAAAAAHACAu7AhAACA0KVMACcAgLSJEwAAgOiSJgAoAAAAAICt4gQAKQCAreIEAACAreIEACoAgIenDgAAgIenDgArAICHpw4AAIDaxAkALACA4esXAACAtIkTAC0AgK3iBAAAgNrECYCt4gQuAICt4gSAreIEAIDaxAmA2sQJLwAAAACAreIEgK3iBDAAAAAAgK3iBAAxAICt4gQAAAAAMgCAreIEAACAtIkTADMAgNrECQAAgIenDgA0AICt4gQAAICHpw4ANQCA/YdRAACA77k0ADYAgOHrFwAAgIenDgA3AICt4gQAAAAAOACA2sQJAACAreIEgK3iBDaAreIEgK3iBACAreIEAAA5AAAAAICOzhwAOgCAreIEgK3iBAAAADsAAAAAgK3iBAAeAAAAAICt4gSAreIEPACA2sQJAACAreIEAD0AAAAAgK3iBAA+AIC0iRMAAIDaxAkAPwCAreIEAAAAAEAAgPDw5AEAAICMjZ4CAEEAgMq17gEAAIDpydYBAEIAAAAAgK3iBABDgK3iBAAAAICt4gQA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AQAAAACA2sQJAJACAICHpw6A2sQJAIDh6xeA2sQJkQIAgK3iBAAAAACSAoCOzhyAreIEgK3iBIDJ/j0AAJMCAAAAAICt4gSAreIElAKAtcDDAQAAgOnJ1gGAreIEgK3iBJQCgLi4coC7sCGAu7AhgJL9e4Ct4gSAreIE5AEAgK3iBICt4gQAAACPAgAAAACAreIEAJACAICt4gQAAIDaxAkAjgKA2sQJgK3iBICt4gSAreIEgK3iBICt4gTDAYDokiYAAIC7sCGAreIEALUBAICjw0cAAICS/XsAlQIAAAAAgK3iBACWAgCAtIkTAACAtIkTAJUCAICt4gQAAAAAlwIAgK3iBAAAAACYAhLABgq9BoCt4gQAAACA2sQJgK3iBC4AgLSJEwCAreIEgJX1KgCZAgAAAACAreIEAJoCAICt4gQAAICHpw6AreIEmwIAgK3iBICt4gQAAACcAgCAreIEAAAAACIAgNrECQCAreIEgK3iBACdAoCt4gQAAACAreIEAIQBAAAAAICt4gSAreIEhAEAAACAreIEgK3iBABZAAAAAICt4gQAXwCAreIEAICt4gQAAJ4CAAAAAICt4gQAnwKAreIEgIenDgCAreIEgIenDgCgAgAAAACA2sQJAKECgK3iBICt4gQAAAAAogIAgK3iBAAAAACjAoCHpw6AreIEAIDaxAkAAL4BAAAAAICt4gSAreIEpAIAgK3iBICt4gQAAAClAoDaxAkAAICOzhyAreIEAKYCAICt4gSAreIEAAAApwIAAAAAgK3iBICt4gSKAQAAAACAreIEAKgCAAAAAICt4gQAqQKAreIEgK3iBACAreIEgIenDgCqAoDaxAkAAICt4gSAreIEAIkBgNrECYCt4gQAgK3iBAAAhAKA2sQJgLSJE4C0iROAreIEgNrECYDaxAmrAoDokiaAreIEgK3iBIDokiaAreIEgK3iBKsCgK3iBAAAAICt4gSAreIEvAEAgNrECQAAAACBAoDh6xeAreIEAICHpw4AAKwCAAAAAICt4gQArQIAAAAAgIenDgCuAgAAAACAreIEAK8CAAAAAICt4gQAsAKAreIEAAAAgK3iBACLAgCA2sQJAICt4gSAreIEALECAICt4gQAgK3iBIDaxAkAsgIAgNrECQAAAACLAgCAreIEAAAAALMCgK3iBICt4gQAAAAAtAKA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BAD3A4COzhyAreIEgK3iBICOzhwAAPgDgPqPogGAreIEgK3iBID6j6IBAAD9AYCHpw6AreIEAIDC1y+AreIEANACAAAAAICt4gQA+QOAm5LrAwAAgM+b/gOAreIEAIQBAAAAAICt4gQA+gMAgNrECYCt4gQAAAD7AwAAAACAreIEgK3iBPIBAICHpw4AAICHpw4A/AMAAAAAgK3iBICt4gR9AICt4gQAgNrECYDaxAkA/AMAAACAreIEgK3iBAD9AwAAAICt4gSAreIEgK3iBP0BgK3iBAAAgNrECYCt4gQA/gMAgNrECQAAgK3iBAD/AwCAreIEAAAAAIAEgK3iBICt4gQAgNrECYCt4gSAreIEhAGAreIEAAAAgK3iBACBBACA2sQJAACAreIEAGoAAAAAgNrECQCABACAreIEAICt4gSA2sQJAIIEAAAAAICt4gQAzwGAh6cOgK3iBACAreIEAADZAhK8Agq5AoDQpUwAAICS/XuAreIEAGSA6cnWAYCt4gSAreIEgMq17gGAreIEgK3iBIMCAAAAAICt4gQA8gKAm5LrAwAAgM+b/gOAreIEAMICAAAAAICt4gSAreIEgwQAgK3iBICt4gQAAACEBICt4gSAh6cOAICt4gSAh6cOAIUEAAAAgIenDoCt4gQAhgQAgK3iBAAAgK3iBACFBAAAAICt4gSAreIEAIcEgK3iBAAAgLSJE4Ct4gQAiAQAgNrECQAAgK3iBACJBACAreIEAAAAAIoEgK3iBICt4gSAreIEgNrECQAAiwSAreIEAACAreIEgK3iBACMBACA2sQJAACAreIEAJoBAAAAAIDaxAkAigQAgK3iBACAreIEgNrECQCCBAAAAACAreIEAIsCgIenDoCt4gQAgK3iBAAA+AISvAIKuQKA0KVMAACAkv17gK3iBICt4gSNBICWrNsBAACA95fzAYCt4gSAreIEgwKAm5LrAwAAgM+b/gOAreIEgK3iBOICgNrECYCt4gSAreIEgNrECQAAjgQAAAAAgK3iBACPBACA2sQJAACAreIEAJAEAAAAAICt4gSAreIEkQQAAACAh6cOgK3iBACSBAAAAACAreIEAJMEAICt4gQAAAAAkQQAAACAreIEgK3iBACUBICt4gQAAIC0iROAreIEAJUEAIDaxAkAAAAAlgQAAAAAgK3iBACXBACAreIE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"; + let l_b_req = base64::decode(l_b64_req).unwrap(); + let r_b_req = base64::decode(r_b64_req).unwrap(); + let b_resp = base64::decode(b64_resp).unwrap(); + merge_tree(0, l_b_req.as_slice(), "cpu:nanoseconds".to_string()); + merge_tree(1, r_b_req.as_slice(), "cpu:nanoseconds".to_string()); + let res = diff_tree(0, 1, "cpu:nanoseconds".to_string()); + let o_res = FlameGraphDiff::decode(res.as_slice()).unwrap(); + let exp_res = FlameGraphDiff::decode(b_resp.as_slice()).unwrap(); + let mut res_names = o_res.names.clone(); + res_names.sort(); + let mut exp_names = exp_res.names.clone(); + exp_names.sort(); + assert_eq!(res_names, exp_names); + assert_eq!(o_res.levels.len(), exp_res.levels.len()); + for i in 0..o_res.levels.len() { + let mut exp_level: Vec = Vec::new(); + let mut res_level: Vec = Vec::new(); + for j in 0..exp_res.levels[i].values.len() / 7 { + exp_level.push(exp_res.names[exp_res.levels[i].values[j * 7 + 6] as usize].clone()) + } + for j in 0..o_res.levels[i].values.len() / 7 { + res_level.push(o_res.names[o_res.levels[i].values[j * 7 + 6] as usize].clone()) + } + exp_level.sort(); + res_level.sort(); + exp_level.insert(0, "level: ".to_string() + i.to_string().as_str()); + res_level.insert(0, "level: ".to_string() + i.to_string().as_str()); + assert_eq!(exp_level, res_level); + } + assert_eq!(o_res.levels.len(), exp_res.levels.len()); + } +} + +const TEST_PPROFS: &str = r#"HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 1866 +Content-Type: multipart/form-data; boundary=43ba238906960207d409d77db17b9ae9fbca49492081293d389a31f4c7f5 +Accept-Encoding: gzip +BODY: +LS00M2JhMjM4OTA2OTYwMjA3ZDQwOWQ3N2RiMTdiOWFlOWZiY2E0OTQ5MjA4MTI5 +M2QzODlhMzFmNGM3ZjUNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAJbogE/7ST +PWgc1xbH38zurK52Leta/tB4rYf3zePxhoW9d/dqtbvqHq95TyaF3ZkYM56592r2 +SjP3LDN3hORqCqtJkRgCiYuYuDYuYgIJwUQRxk4TQ4qEBBxC0qlwKjeJP2ADTsDg +Ip27wyn+55zfj/NmFVnYvlSWrXoVVXC1XkUOtutVVHtRz2Dbm0eW++CLt//lVZGF +T2GrXUcWRi5qzfonPIxs9/un79qeg2z8bR9b7Qaycd2ttxr+p31vEVXcb767ansO +quCP+56DqviJha12A1XwIfdQq+Hf7rcbqIrn3LlWw79qLTQX6la5f61mlfvXavWK +ZVeaM8h2y/1rNQ+jqvv+o/uznoMcfKeCrXYdOfiwe7g17896GDnulw/uz3oOquE7 +FWy166iGsYtb8/7sgruA0M1dD93c9erVqmNXmjVku2VZ9TCquQ8/u2J7DprBzy1s +tRtoBh9xj7QW/F8tD6MZ98pvV23PQQj/5GCr3UAIH3WPthr+J46HEXJ/eO+67Tlo +Fv9oY6vdQLP4mHusddz/0FpYXED2rae+feupX6/UZlCzhmy33Mf///rzr3avf/Dw +yWLzOLJw+XNpu2X5iLTKS/6J7uLIajaRjcvyrbt7B0tuWf5yd+9gqVWWdd/tnmye +RBVc7l+5t3ew5JY33rm3d7DUKlt+s3uqeQxVcbn/0ePn09NuWd5+/Hx62l9qNpGD +y7J8Np1Op1PLLW+Uz6bT6XRq+X9nf2NOPgm5ZE60Y2TO5sIkAR5AtCG5yZnDodCG +NcIkAR7kk5BLNqd0kcsAog3JTc4aShe5DPJJyCXrxsqMi4hwSGkMnO/QGDobOWiq +tJGZDhMqJAchM6K0MqTLAjqGVNJxBilclpshPXd+7SwFI5MOhySR3EBGt6QWkNFY +mXEREQ4pjYHzHRpDZyMHTZU2MtNhQoXkIGRGOaQTlUgSA5vPCm1UKomANa1MjwV0 +DKmk4wxSuCw3QxoDnWzGNAVBY0hCHRPIYmoAEj4Olf7PVpd0Sa8TQ4+wHlkmidLF +didMxaBP84zTrNBGpZJOMuAkBnY4K7RRqSQC1rQy7FBWaKNSSdJQafbvWJlxEREO +Kd0WcScGmptM6XiSyQlJwwlRWhnC2Dk6hlTScQYpXJabIT13fu0sBSOTDockkdxA +RrekFpDRWJlxEREOKd0WcScGmptM6XiSyQk1YZTInMTA/hErMy4iwiGl2yLuxEBz +kykdTzI5eWGEHckKbVQqiTJhlCutDLv0uoCp9ZBLEsPLoTkfS6G0Mi8hZqYbxMD4 +61oizNPghUuSs13r1VMJD/lY0jPS/DcLlc7pmjYySdSZNSFD1mV90qMmndD/wRuh +FjQIgl4MQVSoRAR//ELAIQ1SaTLFIQAjk4BDkkhuIAt4Kl5tTXYyYH53dTAcDPlw +eaXbE2I4XBFiNJAy6rGICdGVjPGQ9/iQ/ZMWeUYTFdHt0SAY9DuJ0sV2J9YFTVTE +SQ5kwPyBGPSj3nA9CvlwdVUORiIcykisro5WhFhfjVZ4tDxckQNG/iJO/Jm9PRp0 +Bn2SA2HMX15Zlr1owKOulBHvjvj68vr6qMdkKEfhSi/qy3UxGPUlq13YEjlcZPUL +W/lOzsMkufj7AJtndH+ABgAADQotLTQzYmEyMzg5MDY5NjAyMDdkNDA5ZDc3ZGIx +N2I5YWU5ZmJjYTQ5NDkyMDgxMjkzZDM4OWEzMWY0YzdmNQ0KQ29udGVudC1EaXNw +b3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJzYW1wbGVfdHlwZV9jb25maWciOyBm +aWxlbmFtZT0ic2FtcGxlX3R5cGVfY29uZmlnLmpzb24iDQpDb250ZW50LVR5cGU6 +IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQ0KDQp7ImFsbG9jX29iamVjdHMiOnsi +dW5pdHMiOiJvYmplY3RzIn0sImFsbG9jX3NwYWNlIjp7InVuaXRzIjoiYnl0ZXMi +fSwiaW51c2Vfb2JqZWN0cyI6eyJ1bml0cyI6Im9iamVjdHMiLCJhZ2dyZWdhdGlv +biI6ImF2ZXJhZ2UifSwiaW51c2Vfc3BhY2UiOnsidW5pdHMiOiJieXRlcyIsImFn +Z3JlZ2F0aW9uIjoiYXZlcmFnZSJ9fQ0KLS00M2JhMjM4OTA2OTYwMjA3ZDQwOWQ3 +N2RiMTdiOWFlOWZiY2E0OTQ5MjA4MTI5M2QzODlhMzFmNGM3ZjUtLQ0K +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 757 +Content-Type: multipart/form-data; boundary=f8b9e5464625dbb7eaca60174d56df842f385d760db9d6f978a8974c64ab +Accept-Encoding: gzip +BODY: +LS1mOGI5ZTU0NjQ2MjVkYmI3ZWFjYTYwMTc0ZDU2ZGY4NDJmMzg1ZDc2MGRiOWQ2 +Zjk3OGE4OTc0YzY0YWINCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAAAAAE/1yM +v2sUQRxHveSSrBeLBQXPJWDAZpvb2Z3bnd1tbTTBwtoQJvPju3eLszvHzm64WE2h +jQg2djap7AT9B0IIqe1NJYqk0ELsRCGSAxs/zefBg3f/y9mHV19fn/26Oeg7PXdp +0HeW3f7DNy8+/kgfLXjPvv3c9647Pdd+sktDa78Fm3bPXwlXPc9Zcq19fnJ0vjG0 +9vvJ0fnGprUDfy10vFvOsmuPn54u3OHL04Xb9K+GA++G03ft8buffy5uD619f/n+ +uuc5K6619vfF5XpDe/gP/Wv4Cl4zrJopMHhF6K5u8bKYdXi9ZrU2IHQtDX7WQ1Nd +AZo2utJP4DFDgWBiCmgb2rsNK2uDtuoWlCq3tyQwHOI4iFBbzdA9/YDVElFKo4mm +vCuVpJOynXacCl3RCtqmFJrqFhQVWikQrW6oqCTVLSgqtFIgWt3Q2UGjsR/mJCWp +SMdJGEmZpomUGQHgEeZYyhAwFkxEIsV3UGcapEqO5hmhJB6psu7mo0ndIVVyERgd +EOwTSWIepQVnIs1zIJlkKXCZ51kiZZHzRPBxmgDBAepMg1TJ0Twj/+XkSJV1Nx/N +MzIicWB0gLE/TsYQcSJ4CMBFmIliXBRZhIFBxpKIx1BIksWAV3f2pdG7eLCzbw6M +YErt/g0AAP//01WZ7zgCAAANCi0tZjhiOWU1NDY0NjI1ZGJiN2VhY2E2MDE3NGQ1 +NmRmODQyZjM4NWQ3NjBkYjlkNmY5NzhhODk3NGM2NGFiLS0NCg== +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 10325 +Content-Type: multipart/form-data; boundary=b522389a4e947d96573c381377b6c37631c08faa82e05d7fdd8382b88938 +Accept-Encoding: gzip +BODY: +LS1iNTIyMzg5YTRlOTQ3ZDk2NTczYzM4MTM3N2I2YzM3NjMxYzA4ZmFhODJlMDVk +N2ZkZDgzODJiODg5MzgNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAJbogE/7x7 +e3wU5dV/zrKzOWwkOVlFHm4yPIpOFjJDBgjgrUIABRERVBTUONl9MhnZnVlnZhNi +bV2QiyIiqAgq3vGGaG19a7VXbG3BXmhrbdVqq23t25+1tWrtxWr19/nMbJJNAjEB +fP9Jdvc5zznfc3nOOc/zzCyNIlDk0kJBjkdxEEXjUZQoEo9iLPhcThFOCOzZ578T +4RIC/VEiSFYgEDKUBys/lHgVRtjzL90m8ShGKEGQjGOE4iwuVyjVnHAQ+9K+WyUu +4SDaGCFIVuAgOoIdIQ9Rro5wwih7Y882iUsYpQdiBMkKjFIlq5SrlPtjiaGJ2Px1 +t8tlZfEoRAZFR0gYYYV6XoUS+9djd0g8ihKdS5CMo0TESK5WFvIqjLEtL9wt8SjG +aFIAJ0YJlpCPVBKcsJw9t/YOiUtYTv8MVSmno9hR8lDltxInRHbTvXdIXEKkD2ME +yQpEOpodLQ9V/hnjw3Awe+8H90lcwsH0WjmXME63RgiSFTiYhrFh8lDlt+XJCowT +Y0werlwT4YRxdvvfd0hcwgr6boQgWYEVNIKNkEcquyK8CivYE7+4T+JRPIKsAOwR +NIqNkkcrjFfhEezj3zwg8SgOoXMIknEcQsewY+QxylROOIT99v0HJS5hJX05ZFxJ +MpPlsco9EU5YyVa/+6DEJayiOyIEyQqsIs64PFb5CDhhFbvpDw9KXEKif0EAi+hY +dqw8Vvk7cEJiT770oMQlrKbbgCBZgdV0HDtOHqvcDJywmj322oMSlzBBTwFBsgIT +NI6Nk8cqT0JiTCIW+ebq8WVl8SFSrBwHxyuOGFJZRdUjYhhhhcJRnDDBtj67TeIS +Hkm3hmY+ko5nx8tVytUxXoVHsnee3i7xKB5FwwO9j6IT2AmyogznhEexm3YGeg+l +n4fQhlINq5GTyh7gVTiU3b79QYlH8WjygrlH03g2Xk4qizjh0eyXvwnmDqPvhLiH +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 +VMvRfNdIifCv5xt+uKnr/c5aX8qEV4MHZhnKCLmbjn5Mrwmu8Jy8myrKXjiQrrOn +7A5WnR9U09FLT0Fas22GKzTTac06WUtrtbL6FM1vz4kw3NX6usn1B/uc6oF5BzXa +GyiWSROnThoQeL1+8mS9Klxdqi3azsmLvNCVEvWdnLBTju0bli1cTzOd2rRlCs8P +AmRAe6ISWAdiqhkZ03EtvyWrmo5+ZsmMAzyI6IqUsFqF2/V2UecvlzW7wcmtO4Ag +6ZzcBzvNa88GjhndMykVjw3dGjVl5PTjSjJuWHbD9xO04jOkIayLBhK7fTPUMsI0 +Uu2NufC1BtV09AklU7ofHWpGm9fzmPCSg8PSF+OOLBQYrPTl1RWaL1b4YQdr2aZm +GbZh2WmxQs0auXBhDeycqGRHdEDemm80ZUSApaY/9KGLJnZzZCrVrplO7WWeY5ee +t4avR1q25asTB3btVRolfTHveMbAVU2n+4tF+5+WFt0wDeSgoN/MOzCppqOfUKLJ +irRZazrFVjbnilyXV3X9nIMLs148S7w5tgRxL7rQi9XF0zrV8o0mL6gbh/9cq3gw +aDUbYR3pFOqlWkTasi2/6wrM9Sc2ms5ndzppeNnG4BVw1dPXQM/sp6aMVIvQ5gl/ +pmtYtqfNtX2RyVjz5qaFoU/UJ6t1mp/Naac78w07rTU2NtaZTnjc2xgauzHlZBuL +j+k3Or7INHY+etmYyqZ7/pRrdx1dmTi9fmr91NTUSVMm1qXTU6dOSaen1QvRVKc3 +6en0RKHrKSNVl5qqH6vlPVfLWE3aimn1jfWTa8N32k07r2WsppTqOWq9rtSn6yc3 +1U1tbjJSU6dPF/XT0sZU0ZSePn3alHS6eXrTlFTTpKlTRL2u9sEuXZux7PyK2hXT +6mvrJ6ueo+q6MmnKJFHXVJ9qmihEU2ritFTzpObmaXW6MMQ0Y0pd02TRnK6fNlno +sWWtac+5WI8va/XavZSRyVz8/wcAHIyQ3X1cAAANCi0tYjUyMjM4OWE0ZTk0N2Q5 +NjU3M2MzODEzNzdiNmMzNzYzMWMwOGZhYTgyZTA1ZDdmZGQ4MzgyYjg4OTM4DQpD +b250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InNhbXBsZV90eXBl +X2NvbmZpZyI7IGZpbGVuYW1lPSJzYW1wbGVfdHlwZV9jb25maWcuanNvbiINCkNv +bnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtDQoNCnsiYWxsb2Nf +b2JqZWN0cyI6eyJ1bml0cyI6Im9iamVjdHMifSwiYWxsb2Nfc3BhY2UiOnsidW5p +dHMiOiJieXRlcyJ9LCJpbnVzZV9vYmplY3RzIjp7InVuaXRzIjoib2JqZWN0cyIs +ImFnZ3JlZ2F0aW9uIjoiYXZlcmFnZSJ9LCJpbnVzZV9zcGFjZSI6eyJ1bml0cyI6 +ImJ5dGVzIiwiYWdncmVnYXRpb24iOiJhdmVyYWdlIn19DQotLWI1MjIzODlhNGU5 +NDdkOTY1NzNjMzgxMzc3YjZjMzc2MzFjMDhmYWE4MmUwNWQ3ZmRkODM4MmI4ODkz +OC0tDQo= +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 1699 +Content-Type: multipart/form-data; boundary=b35b2678a24e0d9d56eab56e967e97043d914cbd87bbfa0b007f10fc2e7e +Accept-Encoding: gzip +BODY: +LS1iMzViMjY3OGEyNGUwZDlkNTZlYWI1NmU5NjdlOTcwNDNkOTE0Y2JkODdiYmZh +MGIwMDdmMTBmYzJlN2UNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAAAAAE/7yV +X4zjRh3HcRJvJskm+W32/szl9u58vrb4gtZOZned7BsqR+Gq8kcHUqVWxWePJ45Z +xxPZznX3nkzVk6BC4hlEpUrlAcQfUSQEgtJWCITKQ6FC8ADScUItB7QCUVqkdlsd +GsfZ7QGPu81Dxp7v7zef73ztZD768z+/de3xr/7+zePVEpKgUC2hIpQ++ezf/nGD +P5BdX06//aeS2kQSfuEHjxRUUXUHSJ0qkkDGsrKgnVSbqIC/NRMLcFcmFqCMywrS +7lSbqIhffudJ0VmES5lYhAquKFXtggqohH/09JMFVUYl+H4ZpE4NlaCGa8qi9p2y +ehrJ+Po/ny6oMpLhRUmV0QLckFUZleHtAohiGeq4rjS0X4ibBWjipgLadblTQ2VY +wksKaH8vqE20gF/65h+EBQSXMwsIWrilLGuWCqiMH939o7BQgWelzEIFjuAjylHt +x5IKCOGvf+VmUZVRFdJGJlfhGD6mHNdu1VVAFfz6i6+L7ho8ImdyDTDGygltt6QC +quKfvJF1L8K15UxehDZuK8e111qtZZBAxFutSoViSV4oo0pVBVTDL6SPiSXr8Nta +1lOHk/iksqJ9r6YCWsS//vcXhNyAH1YzuQGn8CllRftLRQVUx2/ezOQm/AplchNO +49PKivZFpAJq4K+99XnRDfC7WTfAGXxGUbTnBbuJ//rlx4W8BO8Us+4lOIvPKqp2 +vagCAvzUv7LuFjw/627BOXxOUbRXKq3mfDsLtcV6owkqoCX8y8/lW3mpBtK7Spbm +JS386huZ3wZ8owoi8WX8m90MAvByFaRWY76u3KovN6F9FEmQ3kgLOE1f0ZX0snZH +986B1G6jAqTpYz995uYKTtNXxaikaVW7q/v+9glUhPS5R3/2jNCe+JIYlVTRtO75 +9hFUgvS577729q0zOE2fEqPWabeRDGma7t4SHwmnT8wvtQ+Q95FybI8nAYuJTPk0 +TEiRTqakFtohjxnloRuTs9E0TPwxM/wwYVFoB0a8E1M7CPRP7cTUDgKTXDVGfMyM +UcTH/Crbsg2PG5Mtzxhz1/B4YIeeziPPSDgP6Mj2ww9e6epdvbfq8Z5OevqaHvjh +dHvVHrvmuhFH1IimYeL/H6Rhx2MrEMVWVqzHZHnu5pL98J6hHWP0HhnK6TNTusdJ +M5/RczNkdNBecsB83EfXc0V/OPITRvhhga/mnBk5fxIe3+ffn/G9w+LP8dPQzyI/ +5c/fzAkPAt33Qh75offhix//9KWLnzj4B3Abzhi6e0ZO3KboWueeC+fzMFohS3St +E7Jkf8466IBClgg7Ex7PglmaQSkPw7mPBw6DKTAeJ4rgj5Jkok9YFPtx8iEehtm7 +EOUpsMOgC6KRRHYYT3iUCCNHnenQ57rWmcHP6/cE03hEPnPQ9Awz+xbYs3v71zrv +SuD87Pd4H+cT0sr/2XQvYjvc+SyjCXEO2lbOMMYeHdvRlrC2x42pHebcZl6ne/RC +ZPshWdmfuNv7mB1t3c+jLRbpw2lIycGnl9OETWFxOb/X4504YeM4sekWoYeVjThI +5kfIsTnZu23f5Jr033Sd2nTEjHtZcrdILDYuhgkLAv/eiy6zSZes6z0jGU+Mj/D7 +7NA1LMvqedxypn7gWp6fjKaORfnYGrMk8im3eMICi/IgYDThkUXHrsUTFliUBwGj +CY+syU7EidbdNPtmn/bXNro91+33N1x3YDLm9IhDXLfLCKE27dE+OWdM48gIfMfY +HpiWub4a+OF0e9ULp2KS6jHXTaKZrrnu9PpDx6b9zU1mDly7zxx3c3Ow4brDTWeD +Omv9DWYS3ZjGkRH4jvG/y7mr2Tm8uj0wV811sTIh2trGGus5JnW6jDm0O6DDteFw +0CPMZgN7o+ess6FrDtYZWXjwihvzh0j1wSvxTkztIHjoPwEAAP//3t3OysELAAAN +Ci0tYjM1YjI2NzhhMjRlMGQ5ZDU2ZWFiNTZlOTY3ZTk3MDQzZDkxNGNiZDg3YmJm +YTBiMDA3ZjEwZmMyZTdlLS0NCg== +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 7007 +Content-Type: multipart/form-data; boundary=cd0010cac6db5c74e2d5ff5b92ad4b2d64fd9d7e41555d85cb80a5ab0cb7 +Accept-Encoding: gzip +BODY: +LS1jZDAwMTBjYWM2ZGI1Yzc0ZTJkNWZmNWI5MmFkNGIyZDY0ZmQ5ZDdlNDE1NTVk +ODVjYjgwYTVhYjBjYjcNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAJbogE/7x6 +e3gcxZWvajQtHY8s63jAdlm2cbuwodWWuqWWLMk8jG35gY0tG9vYgA3jnp5Sq/FM +19Ddowf7yEBszMOAN4TYgAmPEEgIEHazG5Iv2cQkJLDf5jqbuzeEVza7CXvzERIW +uNkbSAjc7+seSWPJ2JIf9x+pp+s8fudXp06dru6r40AwtrNYlBNxqMR4Ig4SxhJx +qAqvqzHGpgOh/3vPDytZHAguZRLE8J/iSNQEEAQK8iTlErUGYpigCblG+UaczYAY +/fNvXqxkElTi/RKTII7fJUjUGqjEyXSyXKPcK6k1EMdaWitPUW4nDKGSHvi3eyUm +gYQ3V4ayEtbROhmV12MMIU53/9NBiUlQhc9WIVFroAqn0qlyUvliVZImIb73G/Pj +e78xPxEnscp4fRXEaPEwMASJHnj+oMQkqMZ7q5CoNVCNZ9Gz5KTy6SpWB1X0nW8e +klgcAGeGMQGeTc+WpykzGUI1vfuJxyUmwST8CUGi1sAknE6nyzOUFwirA6D3H3pc +YnFIoI9ETUACKaXyDGUTQ5hEf/rzULcGvxvp1uBMOlOuV/6RJGcmgRy8aS05eNPa +hCRVVcOk+iqI0WJxKZsBCfrGEHn3jZCXnJEE8vLfd5KX/74zUZkYjlFh06GG3nrL +7iYWh8m4mElQi/fHkKgJmIyz6Cx5tqKrNVCLc+gc+Rzlvhirg8n0xUf/rYnFYQpu +RqImYArOpXNlWTmfIdTSr/zg9SYmQR2+GkVdh/PoPJkprxCGMIXe9OLrTUwCxP8m +SNQaQDyXnisz5S3CEOroI8+/3sQkmIpvECRqDUzF+XS+zJSXCENA+sSPX29iEiTx +0RgStQaSuIAukJlyY4whTKV7nnu9iUlwFj4XaZ+F59HzZKYcJqwOkvT/vPCrJhaH +s7E1xH02nk/PlxVFZXVwFt333BtNLA7TSoPTsIE2yKqisDo4m770Ujg4Hc9BoiZg +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 +2shkmrlhWKbVYnUY5+oF39OzTlof6GxPtbc1RV+R2m5BzzppS/OF1m4o7Zn2tnRL +R0/atDoWL+btnRmzg6czixd3LspkehanF1np1o5FvN3QjmMu05R13MJA00Bne1N7 +m+YLzTCU1kWtvCXdbqWbOU9bzZ1WT2tPT2eLwU3eaS5qSbfxnkx7Zxs3qrb3ZXxx +jZHY3ucP+paZzV7z/wYAGI/sTX08AAANCi0tY2QwMDEwY2FjNmRiNWM3NGUyZDVm +ZjViOTJhZDRiMmQ2NGZkOWQ3ZTQxNTU1ZDg1Y2I4MGE1YWIwY2I3DQpDb250ZW50 +LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InNhbXBsZV90eXBlX2NvbmZp +ZyI7IGZpbGVuYW1lPSJzYW1wbGVfdHlwZV9jb25maWcuanNvbiINCkNvbnRlbnQt +VHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtDQoNCnsiYWxsb2Nfb2JqZWN0 +cyI6eyJ1bml0cyI6Im9iamVjdHMifSwiYWxsb2Nfc3BhY2UiOnsidW5pdHMiOiJi +eXRlcyJ9LCJpbnVzZV9vYmplY3RzIjp7InVuaXRzIjoib2JqZWN0cyIsImFnZ3Jl +Z2F0aW9uIjoiYXZlcmFnZSJ9LCJpbnVzZV9zcGFjZSI6eyJ1bml0cyI6ImJ5dGVz +IiwiYWdncmVnYXRpb24iOiJhdmVyYWdlIn19DQotLWNkMDAxMGNhYzZkYjVjNzRl +MmQ1ZmY1YjkyYWQ0YjJkNjRmZDlkN2U0MTU1NWQ4NWNiODBhNWFiMGNiNy0tDQo= +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 7688 +Content-Type: multipart/form-data; boundary=da789a8b069ffe50cb69dd81e83455e6b8760e653cb5024638996525d426 +Accept-Encoding: gzip +BODY: +LS1kYTc4OWE4YjA2OWZmZTUwY2I2OWRkODFlODM0NTVlNmI4NzYwZTY1M2NiNTAy +NDYzODk5NjUyNWQ0MjYNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAJbogE/7x6 +e3gcxZXv1GhaOh5Z1vGA7bJsTFPY0GpL3VJLlmzAxrb8wMYYYxuMeY1bPaVWo56u +obtHD252MxCbd4gvxOFpwEBwwiskbCDZvExCAvfbrLN78ySBsHl9+dgkLBA2QELg +fl/3SBrLDyTbe/+RZqZOnfM7v3OqzqnqviQFBJPbSiU5nYIqTKVTIGEynYLq6HMN +Jtl0IHTHbbsllgKC05gESfznaiRqGggCBXmSklFrIYlpmpZrlc9VsxmQpL/71kMS +k6AKd9UwCVL4K4JErYUqnEwny7XK7TVqLaSwjtbJU5THCEOoos+/+5DEJJBwTywr +YT2tl1G5jzCEFP3j1z4rMQmq8V9TSNRaqMapdKqMyrUphiDRh2/4rMQkqMGbq5Co +tVCDGZqRUdmfZPVQTf/+o4cklgLAbUjUNACeQE+QT1Qoq4ca+sErj0gsBZPwAiRq +GibhNDpNnq50MgSgv3x7r8QkSOMXk5HiNM6gM2Sq7EkyhEl0+5t7JSZBLe6Oh2tx +Jp0pU+V9whDS9Pbf7JWYBJPxHYJErYXJ2EAbZKr8mTCEWvrMz/ZKTII6vJsgUWuh +DmfRWTJVPk0YwmT65Kt7JSbBFPwKQaLWwhScTWfLVHmGZOZkqlPXf2VuIpGeTJJV +Kam6Bialayc3VEOSlvYBq4c6+s6TuyWWgnrcjERNQz2eRE+SJykbWD1Mobt+9IDE +UoDYhkRNA+IcOkc+WckwhHr6f67bLTEJpuJfpAjXVJSpLNcqv5QYAtLbH9wtMQky ++LdqJGotZPAUeopcq/ylms2AqfSt7z0kMQlOwFdrmAQn4l1JJGotnICMMrlW+WWN +Wgsn4qn0VHmKckOSIWToPX9+WGISTMNvxyxPw7l0rozK40lWDyfQp39YDp+DJHNy +pjr59e3zE4l0Xd2UepyaOaHS99KJDOFEesfzd0pMgul4VzUStRam4zw6Tz5N+UQ1 +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 +eNYWrUb0JHv5eDVUwlxWKHAvt6rouuvNPDfOHI+OkROEeeDkcQEYmayoK71ivlEr +ennTD3pNdxPnOWPleGio0HEeDwLT5mPVTBRKvDEcqOOqCeVO3OLqop/7rjBzY1ZN +PJodHs32t41+rujDhyZQMo4R3QjS8kpZdYz64sXSYszxuc0HC3ow5IXmYPnNifht +JscLwuPfeh9gL3qH0YmWkTHtQCRdIl9wXG5MiSdoZcmDz27H2iv63OaDhfI/zRYj +FocRZMpD5xWDcPi3UyroL/giz8NeXgyia7CeQIsOaeN6cjR8yzJaxw/SpudzQWhG +J/JKuf78gOlz3Rb9eZF39H4nbyzQw6ECj81rHa3tHcbWsdEbX4E7vO6o1ASaLYyT +YlYOlTiWWTBOKdN6iLwajuTcCg7jfSx+70IvP7CMUnRC/eFHKNRdbpvWULb89FWz +hdFUwbw5EOjmQNAc5PqabaGbA4HOvVxBOF4Yc3q079UeSbFefs0l4rTyfZtBPeSD +oR69det4tu6Ynul4OT6o5c1CHOKJ9awV5fCwuvXQ7HZ5hKVxPPJxiFoO4N2yhnRb +NF8ZCG/0lZ7IDe5rjueEWsvBi3h8eXlk5cObSfTschyYcvwATAfdjR8TprLyYUya +LYzTK2gazNnNtij3BgWfF0ajahgXHN2qPUhnRTQr96uD5OIoTh0+Ajuh2R04nhMe +fIt3zHtt/DBCd3pMi2u2GDUaWL0853hOOHpV5IctWVsc/NrD8QJhBvls9NaaFhg7 +yFgrmmVavVxfy8Plvul4gb7GC7nrOmvX5LhptBjtWqse5gv6arHO9HJ6NptttUV8 +9MzG6yFriXy2/E5IVoTczY4858ta+dzYnwpDvjCUlkUdnR2dVmfbgpbWXK6zc0Eu +t7CD8+5Wo9vI5Vq4YVim1Wp1GqfqxcDXXadbH1zYke1ob45fw7O9ou463ZYWCK3D +UDpyHe3drZ093abVuWgR71iYMzt5d27RooULcrmeRd0LrO62zgW8w9COoC7X7Dpe +cbB5cGFHc0e7FgjNMJS2BW28tbvD6m7hvNtqWWj1tPX0LGw1uMkXmgtau9t5T65j +YTs3qi/tzwXiciN9aX8wFFim617+/wYAV467yt1DAAANCi0tZGE3ODlhOGIwNjlm +ZmU1MGNiNjlkZDgxZTgzNDU1ZTZiODc2MGU2NTNjYjUwMjQ2Mzg5OTY1MjVkNDI2 +DQpDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InNhbXBsZV90 +eXBlX2NvbmZpZyI7IGZpbGVuYW1lPSJzYW1wbGVfdHlwZV9jb25maWcuanNvbiIN +CkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtDQoNCnsiYWxs +b2Nfb2JqZWN0cyI6eyJ1bml0cyI6Im9iamVjdHMifSwiYWxsb2Nfc3BhY2UiOnsi +dW5pdHMiOiJieXRlcyJ9LCJpbnVzZV9vYmplY3RzIjp7InVuaXRzIjoib2JqZWN0 +cyIsImFnZ3JlZ2F0aW9uIjoiYXZlcmFnZSJ9LCJpbnVzZV9zcGFjZSI6eyJ1bml0 +cyI6ImJ5dGVzIiwiYWdncmVnYXRpb24iOiJhdmVyYWdlIn19DQotLWRhNzg5YThi +MDY5ZmZlNTBjYjY5ZGQ4MWU4MzQ1NWU2Yjg3NjBlNjUzY2I1MDI0NjM4OTk2NTI1 +ZDQyNi0tDQo= +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 1979 +Content-Type: multipart/form-data; boundary=8bed23bab43c5ac24b097e61a30ce57a57a9980edcc90abf588af69cb186 +Accept-Encoding: gzip +BODY: +LS04YmVkMjNiYWI0M2M1YWMyNGIwOTdlNjFhMzBjZTU3YTU3YTk5ODBlZGNjOTBh +YmY1ODhhZjY5Y2IxODYNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAAAAAE/7xW +X2wc1fX+7T/7etfxHq//XS8JGSbg3F1+ntm9tnfXVdU/adQmqIggC1EVwXJn5u54 +6pm525lZy+7TPFAFAhJIpZVKmyqIqAgqWvKC+hRFVV94KVKkFoRaoOUBEKhqIVWV +ljbVnfUmrlGpTGP2ZVbz3XO+7zv3zLn32JMvPfP2I6dfvTyTz6IUpPNZlIHsiQe/ +d/518fXk//3xc3/IqjMohS/85aG0mkMpuJJRcygNP8xDqlpAKcjhnDJE/pSpFlAa +hvGwgsjbIyqgNL78VhKSgZdQsjYDI3hEQeQRpALK4D9eflBmzMI7/VRZyOO8UiAv +5lVAWfzO909LOAf/yCTRORjFo8o+8lpGBZTD5z5IoofgxX70EIzhMaVA3h0pjUEK +pO58LpXOZHMqoCH8Xl9+Gp7JQ0oFNIzP/i1JkIXf5CG1LWYoPZzNqUWE8BuXTqfV +LBqGw5Cq5tEwFHFRAXJILaIR/P7DP86pWYRgJQERjONxpUSOqYDy+NLJszk1h0bg +XCrRPgITeEKZJD9LqUVUwG9efCqnZlEe7CQ2D1N4SpkmWC2iUfzP3yWJC3BnAhZg +Bs8omDRVQPvwa5eelolH4Vw6STwKs3hWKZMn0yqgMfzAnxN4H5zuw/vgBnyDUiYf +SstF/J03E3gM/tqXNQb78X6lTD6QMOAXXkngIjzRh4twAB9QyuRxCY/jn76ewAA/ +78MAN+IblTJ5IVWaGFQ8j0byhdF9Y0UYVwGV8MuP/0hu4jicySZ6x+EgPqgo5Ims +WkQT+LsXT8oKl+DzidcS3IRvUlRSUafRJH7u96ckOAGfU3NoEh4bStZMwCF8SLmZ +fLZaQJNwC75FmSO/lXs8hX/1yilJNgU/ySVkU3AYH1bmyLMSnsZnX07gaXi2D08D +wUSZI09JeAY//fwPZPQMPNzvtxmo4IoyRx6S/YbxoxeTaAyv9p1gqOKqMkcuZFVA +s/jkrxN4Fh7rJ5+FW/GtMjpXKg2KM1KamJzKTs/g2fIUSkH8RpzGcfyupsT3k/+v +zbdS5TJKQxyf+sX5t/bjOH5PPpU4zhOtppdnUQbiCw/88rzEzjwqn0qskFqtXp5E +WYgvPP/+h1cO4jg+J5+ElssoB3Ec//2K/KVwfGbwlyzQ/6PDIfO6Lg9pzhQ9P6IZ +s9ujBZ/5IuSm8K2QzgY9P3I8rq1y1j3iRKHm843oyyyMqKGvCo/rq4HwxLf4GtNt +oXfXbN0Tlm4Ll/m2JgJbj4RwzVXm+F9Yr2k1rT5vi7pG69qC5jp+b2OeeVZjUQ8D +Uw96vqTSPcOJPNbVbEFLwRZ9aDJfGN/gZrSHvLbpsWBN8hYHvLZ5NGCOT/dfe3HE +vp0Fa3eLYI0HWqfnm5Tep+9VKWxTypkYsIebYcS9MGLmGjX3ipSFXpt5VmNRC+n0 +gNn+N9/XCuRxzxPrnNp7pWaL4Kqi220nWu0Zmik83Q5Yh/lM724GIjRFl8/bQreF +xd2IdQPR0R0/4oHPXL3bDURHI9VuICJh9DoVzfGjxmJIv7lT951fO35CFxF3503h +utyMRKCvc98Sgf7JmfXuFq/czZVPnqfvoOO4/EjPcS0eVLSV5BOm/qfoQ5q4738y +cZS7ETvGWfdEkLgJKtrdgRPxrVeRoOGn4ydplfYq74+bL+3ClEaqW2rldgQVbcvK +R4fBdeqogcjP/BeRGqmu8DB0hF/RrJ7X3aaS3nUdqxr2SWQzLO1CUq/rCmYdZRGj +tV2EBTzkEW3tIiJia3zFZ91wVUQhbewiciViQZSM9vq2QcesdSfk1NlZwut17IWb +Ydt1/N7G1VG3fezf5fdCbt2xQq294ve41+eXOzo+mPvh5hb1R/v6ehn3uCcplQEl +qXaZzb/ousKsyIN/nfs2v8PntLNn1m0zNPs8Usmhj1Wy1RgHPnYRvfkaPEgdrEQs +4hXN8Z1+d9HtSXauCnr+teuPYQ9g+u3UzipoJjNXuX4bj47Iu0qoH/cj7rrObcct +zmiNLmp1PfK6+lfEV5lv6e12u26LttFzXKvd/yrapvDaHo8CxxRtefa1r559bdOz +dr6Sxy0lteVGs9E0mwtLtbplNZtLltVqcG7UqUEtq8YpNZlZN5v0kN4LA911DH2j +1Wg3Fudd2eXztt/TXccwtVBoDUoaVmPRqDc7BjOby8u80bJYkxvW8nJrybI6y8aS +aSw0l3iDavp/Tmdt5d5oNebl/UVolJKFpQVeNxqmUePcMGsts7PQ6bTqlDPeYkt1 +Y5F3rEZrkdOhe9atUNxL8/esh5uhyVz33n8FAAD//wwi4sIeDwAADQotLThiZWQy +M2JhYjQzYzVhYzI0YjA5N2U2MWEzMGNlNTdhNTdhOTk4MGVkY2M5MGFiZjU4OGFm +NjljYjE4Ni0tDQo= +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 7276 +Content-Type: multipart/form-data; boundary=281cf637734b8fe81951ee3509cef5706ca07ed3a6c85806c2413fc5e676 +Accept-Encoding: gzip +BODY: +LS0yODFjZjYzNzczNGI4ZmU4MTk1MWVlMzUwOWNlZjU3MDZjYTA3ZWQzYTZjODU4 +MDZjMjQxM2ZjNWU2NzYNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAJbogE/7x6 +eXgc1ZWvbqtLOm4h6bjxci1v5QuGUlmqkkqLJRaDLdvYxpZXMMY2Tan6qlS4um6n +qlqymCUNsdnigIclZnPA4MEJEELCC0y+ZBKTkIHvTZ4zywsJ2zAJzJePIWGAYR6Q +EHjf19WS2rKRJdsz/0jdfc8953d+59xzz71VV8aBYOzqfF5OxKEc44k4SBhLxKGi +8LkSY2w6EPqzHz0sMQkI3lnJJIjhrwkStQoIAgV5knJHpVoFMUzQhFylPEYYQow+ +91FhSjkeiGTL8Qx6hlytfI0whHL65k0HJSZBHJ8hSNQqiGMNrZGrlW8RVgtx+sY/ +PSyxOEhoI1ETIGEtrZVRoawWJPrpa49ILA4VuB6JmoAKnEwny0llIUOooP/ywSGJ +SVCJ344hUaugEs+kZ8pTlAMxhlBJd713SGISAO6PhgGn0qnyFOUTwhCA3vHGIYlJ +MAk/jGBNwml0mjxF+U/CECbRp391SGISJPDeaDiB0+l0eYpyJ2EICfrE64ckJkEV +/k00XIWUUnmK8jRJzkpWxB7/g1JWlkiQWHlcqqiESYm6CojR/GFkCFV033N3S0yC +M/CeCiRqFZyBM+gMuU75UgWrhTPou9+7X2JxqMYZBaercSadKc9SZjCEanrHo4ck +JkEN/mNkuAZn09nyHOV5wmqhht53/yGJxaEWg8LcWpxL58pzlA0MoZb+4rXCXMQf +ESRqFSDKVJanKH9LknXJSeTu61fFvr3rTpKQqs6orqmtq4AYzecvZtMA6c037Wpk +cZiMnUyCJN4XQ6ImYDLOo/NkpuhqFSTxLHqWfLZyb4zVwmT6wsF/aWRxOBM3IlET +cCbOp/Plc5RzGUKSPvbTVxuZBFPwZYJErYIpeC49V1aUlwhDOJNe/8KrjUyCqfhf +BIlaBVOxntbLivI2YQhT6EPPvdrIJJiGbxIkahVMQ5WqsqK8SBjCVProz19tZBJM +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 +XN16aPa4vIClfjzyUYiajuLdsgZ1WzReEwhv5JWeghvc1xzPCbWmYxfxeBuvsZQP +FZPCs8txYErzozAdczd+SpiKyocwabYwzi2haWfabrRFsTfI+jw7ElXDWH9yq/YY +nSXRLK1Xx8hFUZw8dAR2QrMncDwnPPYW75RrbfFxgdNrWlyzxYjRwOrjacdzwpGr +Ij9sStni2NceThcIM8ikCm+taYGxm4y2olmm1cf1VTxc4puOF+grvZC7rrNqZZqb +RpPRqjXrYSarXyJWm15aT6VSzbaIjp6paD2kLJFJFd8JSYmQu6nh53wpK5Me/VN2 +0BeG0tTZvrB9obWwpa2pOZ1euLAtne5o57yn2egx0ukmbhiWaTVbC42z9Fzg667T +o+/saE+1tzZGr+HZXk53nR5LC4TWbijt6fbWnuaFvT2mtbCzk7d3pM2FvCfd2dnR +lk73dva0WT0tC9t4u6GNoS7d6Dpebmfjzo72xvZWLRCaYSgtbS28uafd6mnivMdq +6rB6W3p7O5oNbvIOs625p5X3pts7WrlRsbU/HYjtRmJrfzAYWKbrbv//AwC+zNsT +Vz8AAA0KLS0yODFjZjYzNzczNGI4ZmU4MTk1MWVlMzUwOWNlZjU3MDZjYTA3ZWQz +YTZjODU4MDZjMjQxM2ZjNWU2NzYNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0t +ZGF0YTsgbmFtZT0ic2FtcGxlX3R5cGVfY29uZmlnIjsgZmlsZW5hbWU9InNhbXBs +ZV90eXBlX2NvbmZpZy5qc29uIg0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9v +Y3RldC1zdHJlYW0NCg0KeyJhbGxvY19vYmplY3RzIjp7InVuaXRzIjoib2JqZWN0 +cyJ9LCJhbGxvY19zcGFjZSI6eyJ1bml0cyI6ImJ5dGVzIn0sImludXNlX29iamVj +dHMiOnsidW5pdHMiOiJvYmplY3RzIiwiYWdncmVnYXRpb24iOiJhdmVyYWdlIn0s +ImludXNlX3NwYWNlIjp7InVuaXRzIjoiYnl0ZXMiLCJhZ2dyZWdhdGlvbiI6ImF2 +ZXJhZ2UifX0NCi0tMjgxY2Y2Mzc3MzRiOGZlODE5NTFlZTM1MDljZWY1NzA2Y2Ew +N2VkM2E2Yzg1ODA2YzI0MTNmYzVlNjc2LS0NCg== +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 6708 +Content-Type: multipart/form-data; boundary=236cff23146496fd2cf8a63650d62e2265e008fbffd139bd0853693aa524 +Accept-Encoding: gzip +BODY: +LS0yMzZjZmYyMzE0NjQ5NmZkMmNmOGE2MzY1MGQ2MmUyMjY1ZTAwOGZiZmZkMTM5 +YmQwODUzNjkzYWE1MjQNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAJbogE/7R6 +fZgU1ZnvnJ6umZceoF9agcMAUhxAa4qZqpmaYWZQQWAAAWH4BhGxra4+U1Ohu05b +VT0fbnZtDYgiKmuiYMT4ETfuGpN1N3eTmycfi4lZfZ7NJbt3b0z8yM1ukn3yuCau +erM3mhjZ56nqmWlmEGeA/DPT3ef9+L2/857zvudU3RAHgrGbSyU5EYdqjCfiIGEs +EYea8HMtxhgCocdeOC4xCQg+XINErQOCQEGepHyqhiUhRt/++gmJxSGGs5CoCYhh +gibkOmUWQ6imn37maYlJUI3/TJCodVCNk+lkeYryImFJiNNHTjwtsTjE0UeiJiCO +U+lUeYqyjSFI9Ic/eVpiEkj49yT0K2GSJmVUvkVSM1M1VVXk+B0bEhKJVcel+hqI +0VJpBZsBNfTuuw40sTjU4FImQS0+Egtx1eA0Ok1OKbpaB7V4Cb1EvlT5bIwloZa+ +9NT/bWJxANweSgJOp9PlGcoVDAHoF7/3ehOTYBK+GqGYhDPpTJkqrxCGMIne8dLr +TUyCBP4XQaLWQQJn0VkyVd4kDCFBn3zh9SYmQR3+IoqhDutpvUyVlwlDqKPP/OD1 +JibBZHwqhkStg8k4m86WqXJ7jCFMpgeff72JSTAFnydI1DqYgnPoHJkqJwlLwhT6 +/178eROLw1RsRaImYCrOpXPlyxSVJWEqPfL8L5pYHJLlwSTOo/NkWVFYEpL05ZfD +QcTLkKgJQJxP58tMmcOSgPTIgdO1LA7T8JNI1ARMwwV0gbxQGWAI0+g33/qwlkmQ +woMR4hQuoovkhcr7hCGk6DeeeLORSXAJPh/RcQleTi+Xr1D+ljCES+i/PPofjUyC +S/GxGBK1Di5FhSpyg3I4xpJwKf3BD95oZHGYjuuRqAmYjipV5QalkyFMp7989deN +TIIZ+F5kegYupovlRuXnhCVhBn36+V83sjjMxNvCkGZiE22SG5UNDGEmffHIbxqZ +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 ++6bNR5uZKJRoYzgTyi0Typ2oxdVFH/dywsyOWjXRaHpoNN3XOvI53LGiPnzwj7Ve +Iv+V6IY/l1fK2guNNlwszcZlHrf5QEH3B93AHNAU1RL5gpPjXoPmuH5w8VvvM/zp +ZW+aLYzpZyLpEvmCk+PG1EhBK0uOPbtdaK/ocZsPFMr/NFsMexxCkCoPbSr6wdBv +8yvoL3giz4NeXvTDa7AeXwsPaeN6cjR0BB65zxxjTc9n/cAMT+SVcn35ftPjui36 +8iLv6H1O3liiB4MFHrnX2lva2s/3UfRH2w5Lja/ZwpgbsXK2xLHMgjG/TOtZ8mpo +JhdWcBhtRdHrHHr5gWVYCyfUH36MQT3HbdMaTJefvmq2MBormDf7fd3s95v87P4m +W+hmv69zN1sQjhtEnI5912F8/cK5DOvlt2dCTvWKkjWgB3wg0Llriazj2rpjuqbj +ZvmAljcL0RRPrGcdj209MDM5HmJpGI98NEXNZ/BuWYO6LZo+4Qt35E2hMAzuaY7r +BFrz2EU8PiLPbXxoMwmfXY4DU5afgWnM3fgFYSobH8Kk2cK4ooKmgazdZItyb1Dw +eGFkVg1j6/mVlTE2K2azcr8aIxfN4rShI7ATmBnfcZ1g7C3eBe+15ccFTo9phSff +Yae+1cuzjusEI1dFXtCctsXY1x4uFgjTz6fDl+E03zhIRnvRLNPq5foGHqzyTMf1 +9fVuwHM5Z8P6LDeNZqNNa9GDfEG/Vmw03ayeTqdbbBEdPdPRekhbIp8uvxOSFgHP +pYef86WtfHb0T4VBTxhK89L2jvYOq6N1SXNLNtvRsSSb7WznPNNiZIxstpkbhmVa +LVaHsUAv+p6eczL6QGd7ur2tKee4xYEm2y3qOSdjab7Q2g2lPdvelmnp6MmYVsfS +pby9M2t28Ex26dLOJdlsz9LMEivT2rGEtxvaOcxly7YHOtub2ts0X2iGobQuaeUt +mXYr08x5xmrutHpae3o6Wwxu8k5zSUumjfdk2zvbuFGzty/ri31GYm+fP+hbZi63 +778HAO7Ti4wPOQAADQotLTIzNmNmZjIzMTQ2NDk2ZmQyY2Y4YTYzNjUwZDYyZTIy +NjVlMDA4ZmJmZmQxMzliZDA4NTM2OTNhYTUyNA0KQ29udGVudC1EaXNwb3NpdGlv +bjogZm9ybS1kYXRhOyBuYW1lPSJzYW1wbGVfdHlwZV9jb25maWciOyBmaWxlbmFt +ZT0ic2FtcGxlX3R5cGVfY29uZmlnLmpzb24iDQpDb250ZW50LVR5cGU6IGFwcGxp +Y2F0aW9uL29jdGV0LXN0cmVhbQ0KDQp7ImFsbG9jX29iamVjdHMiOnsidW5pdHMi +OiJvYmplY3RzIn0sImFsbG9jX3NwYWNlIjp7InVuaXRzIjoiYnl0ZXMifSwiaW51 +c2Vfb2JqZWN0cyI6eyJ1bml0cyI6Im9iamVjdHMiLCJhZ2dyZWdhdGlvbiI6ImF2 +ZXJhZ2UifSwiaW51c2Vfc3BhY2UiOnsidW5pdHMiOiJieXRlcyIsImFnZ3JlZ2F0 +aW9uIjoiYXZlcmFnZSJ9fQ0KLS0yMzZjZmYyMzE0NjQ5NmZkMmNmOGE2MzY1MGQ2 +MmUyMjY1ZTAwOGZiZmZkMTM5YmQwODUzNjkzYWE1MjQtLQ0K +******************* +HEADERS: +Content-Length: 2033 +Content-Type: multipart/form-data; boundary=2c8c14eab8a03029c7b116d1756f25d425aa0adf5965a50c439e0cc8e04b +Accept-Encoding: gzip +User-Agent: Go-http-client/1.1 +BODY: +LS0yYzhjMTRlYWI4YTAzMDI5YzdiMTE2ZDE3NTZmMjVkNDI1YWEwYWRmNTk2NWE1 +MGM0MzllMGNjOGUwNGINCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAAAAAE/7RV +bWwcRxnmbN95fGf7Xt/5Y3x2ku2macdXvHs3tu/sf6hUCokoCqWoiKpcZnfn9g7v +7hy7c27cX4tIBKVISHy0UIhUqaoQIlEbkEBCVRRFEW1Q+ZCoIqhQGlUCUwUiGlRQ +aFHR7PnqEIkfVev7c3vvM+/7PM/MM3sf+8aPv3Xx7ZOv3JjJDqEUDGSH0CAMHfnS +N595VXw2eT4an35tSM+jFL566viArlb5kCpnUQrSOK1lCNPzaAD/4QcJOAD1BByA +YTysZYiuAxrET7x4fEBPo0H42SCkyjk0CAgjLUPODOqAhvAbj14e1NNoCN7IgIKH +YASPaFlyJaPPoDT+8pPfT+tplIYXMnoaZeCnqWRIGnI4p2XJLzLlHMrAKB7VxsiJ +lA4og//2bNIyDP/urR2GcTyujZHrCh7GW6cTGMFWD0aQx3ltjFxJFQBSoBxnh1MD +g0PpzLA+gxD++b+eUAZG4CWkp1EWzqFEwggABm2CvIjKOZSFAi5oE+RZpAMawc+9 +lrTk4J89Uzko4qI2QX6d0QFl8Y3rCTwKJ3qjRmEST2oT5IuqO4dvXHtcEY7BqZ7C +MZjCU9o0OakMjOJrVx5V8Di8MJwIGYcZPKNh8viwDmgMX7iUwHl4usedh1k8q2Fy +Oa0DGscv/ySBAf7eGw5QwiUNk0tqeB5vnUrgCbjUgydgDs9pmDytYMDPX03gApzu +KS/APJ7XMPmaUj6Bf/fWV5S0Ivwpm0grwh68R9tLLmZ1QAX8+ndPKngS/tOLwiTs +w/s0jVxWUSjiM/9IuqfgYq97Cm7Dt2l7ydWRwlT/ZEbRSDY3Ojaeh4lCUZ9Gk/jN +Vx9TyZyGu/Q0moFTanQWTYOOdW0/IeUcmoHb8e3aAfIjRTOFv/3yY0oFht/3LGK4 +A9+hHSAvKYvT+PTWtsXzCFKFfJ84Mzk1rSgBzeDf/nl7yfMIVBPG124k0ovwehZS +hbF+09AMLhT1PJrF3/tVckVmQU+uyCzcie/U9hOsAyrhX15OFJXgSSU+h0pAMNEO +kO8owXP4h33Bf0zBzSGdLc1Nq/mA5vH1NxNJc/BMb+/mYAEvaJj8ZUQHtAff6Jv6 +jTI1DgMQv3JhJJue3zNRKJamUAriK/EAjuOrhhYfJeXKXaupUgkNQBx/9fzZrXkc +x389f3ZrXovjLPlwZbE0iwYhPnf8wtmteRw/9fULCaYRo2KWJtEQxOeeu/72O/tw +HJ9R36RSKqE0xHH81jvqk8LxU/1HUqUfosMR8zsej2jaFt1A0kG706W5gAUi4rYI +nIjuCbuBbPvcIOW2ZNb9zPL4/ZsdvmA024FDj5ot4XOzFQpfPMLXmekKs7Pumr5w +TFd4LHANEbqmFMKzW6wdfGSjYlSM6qIrqgatGkuG1w66xxaZ79SWzSi0zbAbyLbP +zXaT2dxwBc2H3UC2fW64XLYls2gh7AaJIhZFPJSH6CFK9wZcmi0pO8Yn+MP38S90 +eSQfaMvWR0Ug+TFJbbMlPlCZfT4z7JEZrqDFfvEmEfSg25atrmXYwjfdkDVZwMzO +ZigiW3T4oivMbieSIWe+GXJfSG6Q8n3cF5IvGN2OJ5hzJBTNtsepY7aEz81WKHzx +CF9n5ic/c+iIKST3Fm3hedyWIjQ3eOCI0HyPnOY2tSvoPe+x9Sa5EWvyTyeS38+U +Fgscjx8WVkQL4Xb0Qs6cDRa2A0nZbuUt2vQls9QWjPZpI8k7NN//1bE3mNfltLhT +cJhkveK+fpGUI7neDJnPFwyXy09JZq/fyzr0Aw/gNqHZp1PKZ7aLRmSzIBHxsAjX +eUit3do137V9Fq4r8ombySPlm073S2pNKIQ0mt3ArlK4tb6zy659T8jaAZ3vL3Ht +u917Wbj+QOIkGUDp53bRj/Ly7hlHm5Hkfs/Nrh0hi/wG853ashHtbNn/+t6pk7LX +TPQsGB3R2b2T3WZRu/HuPZThpstls+t5u8fru7YKreLF/QyQsmur819QCg5yuRP0 +m3ejG7V2ktXpSu535OaOeHUnhPV5bkt6InVrfgyb2S1uHubybhW/yDwUSO557cOH +HM5ohS4bVVP6HfOg+DgLHLPRaFRd0bC6bc9p9N6YDVv4DZ/LsG2LhpDca9j9t3LD +9p1bS+ovgJLKWq1eq9v1pZVK1XHq9RXHWa1xblWpRR2nwim1mV2163S/2Y1C02tb +5rHVWqO2vOi1g+6xRTfoml7bso1IGDVKak5t2arWmxaz62trvLbqsDq3nLW11RXH +aa5ZK7a1VF/hNWqY3ej/jXO2Zx9brS2qSAqDUrK0ssSrVs22KpxbdmXVbi41m6tV +yhlfZStVa5k3ndrqMqeZBzecSDxEsw9uRJuRzTzvof8GAAD//4LTIC7vDAAADQot +LTJjOGMxNGVhYjhhMDMwMjljN2IxMTZkMTc1NmYyNWQ0MjVhYTBhZGY1OTY1YTUw +YzQzOWUwY2M4ZTA0Yi0tDQo= +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 7790 +Content-Type: multipart/form-data; boundary=d3406129592c3cc7c861ce3723a1814b640cff3f4da0c26d316b3b224a95 +Accept-Encoding: gzip +BODY: +LS1kMzQwNjEyOTU5MmMzY2M3Yzg2MWNlMzcyM2ExODE0YjY0MGNmZjNmNGRhMGMy +NmQzMTZiM2IyMjRhOTUNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAJbogE/7x7 +eXgc1ZWvbqtLOm4h6biJ7Wt5oXzBUCpLVVLJlm0Wb7KNbWxhbIMBA+1S9e1S2dV1 +m6pqLcy8SUNsVgcYEmKzhSUEiIGEbBCyGkICeclzMm+GJCRkEpLMy0cWBpjMC2Tj +fV9Vt9SWFyQb3j9Wd99zz/md3zn33HNvlS9NAsHE9lJJTiWhFpOpJEiYSCWhLvpc +jwk2FQh9cfe3a1kSCC5jEiTwO0kkagoIAgV5krJUbYAEpmhKblC+lGTTIEH/9tsX +apkEtXiXxCRI4jcIErUBavEkepLcoNwhqQ2QxEbaKDcpNxGGUEv3/vsdEpNAwmtr +I1kJm2mzjMrLCYaQpLu+s09iEtThU3VI1Aaow8l0spxWPlmXnpqug/27WU1NKkkS +tcmWOkjQUinJECT62eu/nGAS1ON3JSRqA9TjyfRk+QPK1ySGUEe/+IOrNSYB4D8T +JGoDAE6hU+SpyocIa4Z6uud/Xq2xJEzCQSRqCibhNDpNnqoMMASgjzzySi2TIIU/ +RiRqA6SQUipPV36EDGESffChn81kEjTgvxEkagM0YAttkWconyEMIUV/cNujwCQ4 +Ce8jSNQGOAln0pnyLOVWwhAa6EOvPApMgkb8bi0StQEacTadLZ+ifKeWIZxEX/k/ +DwOToAlfIUjUBmhCmcryHOVawpqhkX7hyYeBJaEZN0eBakZGmTxH2cSaoYne8of9 +wJKA2IJETQHiqfRU+TSFMoRm+uFrflnLJJiMf54a8TUZ59K58nTljakMAel/vfOL +WiZBGl9qRqI2QBpPp6fL05Vnm9KnpOvWX3eXXFOTapLq6mFSqgFOaoSmZmyRIEFL +3QxhMt373D6JSXAy3lEXqT8Zz6BnyGnlQ3WsGdL09afvllgSPoDTI2gfQIUqcqsy +nSGcTD+y/2GJSTAF/4UgURtgCqpUlecpzxPWDB+gd939sMSSMBUDJGoKpmIbbZPn +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 +ffN5Ltu9aD436rYNZANxuZHaNhAMB5bpupf/vwEA7MYm8EZEAAANCi0tZDM0MDYx +Mjk1OTJjM2NjN2M4NjFjZTM3MjNhMTgxNGI2NDBjZmYzZjRkYTBjMjZkMzE2YjNi +MjI0YTk1DQpDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InNh +bXBsZV90eXBlX2NvbmZpZyI7IGZpbGVuYW1lPSJzYW1wbGVfdHlwZV9jb25maWcu +anNvbiINCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtDQoN +CnsiYWxsb2Nfb2JqZWN0cyI6eyJ1bml0cyI6Im9iamVjdHMifSwiYWxsb2Nfc3Bh +Y2UiOnsidW5pdHMiOiJieXRlcyJ9LCJpbnVzZV9vYmplY3RzIjp7InVuaXRzIjoi +b2JqZWN0cyIsImFnZ3JlZ2F0aW9uIjoiYXZlcmFnZSJ9LCJpbnVzZV9zcGFjZSI6 +eyJ1bml0cyI6ImJ5dGVzIiwiYWdncmVnYXRpb24iOiJhdmVyYWdlIn19DQotLWQz +NDA2MTI5NTkyYzNjYzdjODYxY2UzNzIzYTE4MTRiNjQwY2ZmM2Y0ZGEwYzI2ZDMx +NmIzYjIyNGE5NS0tDQo= +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 7294 +Content-Type: multipart/form-data; boundary=ca9269333d6808c1ca8fa1aba3c2c8f2eb7d6e0a61a67df07779cabd3c1b +Accept-Encoding: gzip +BODY: +LS1jYTkyNjkzMzNkNjgwOGMxY2E4ZmExYWJhM2MyYzhmMmViN2Q2ZTBhNjFhNjdk +ZjA3Nzc5Y2FiZDNjMWINCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAJbogE/7x6 +e3QcxZmvajQtfR4h6fOA7bJs43aBodWWuqWWLck2GNvyG78fGGPscaun1Go00zV0 +98hWdvdmYG0exiHe8DAEEzA4ODGPkHBDNifZrElI4JzNdbKPvMlmN2EPhyVhgWUv +kBC453SPpJFkhGSb+4803fU9ft+jvvqqqq+LA8HYnkJBTsShHOOJOEgYS8ShIvxd +iTFWC4S+/NQRicWB4HIkagIIAgV5gjKdIcToKz++X2ISxPCfYkjUKohhgibkKuXe +GEMop8+/eJ/EJCjHxyuQqFVQjhfQC+Rq5YsVyclJWHzwYXnxwYflRDmJlddJEKOF +xWwKxOk7z3xRYhLE8X7CJJDwB3EkahXEsYbWyLXK3UStAgmRolyr3BxnCBI9flvI +UoF3lCNRq6ACJ9KJcq1yOsZqoYL++V8elVgcKnFPaEQlJmlSvlChrBYq6Qe/fkxi +cQDcFA4CXkQvkicpbQwB6L++fUJiEkzAr8ZCwRNwMp0sT1GOxRjCBLr/zRMSkyCB +D0bDCaSUylOU9wlDSNC7fndCYhJU4TsEiVoFVTiVTpWnKP9NGEIVffbnJyQmwQX4 +eRIKvwDraJ08RbmbMIQL6FO/OSExCarxbyPuapxGp8lTlGdJclqy8ouxwq1yWVli +QlyqqIQJiaoL6iSI0UINQ6imR54PXV+D91cgUaugBqfT6XK18tcVrBZq6BvfPCqx +ONTiVCRqAmpxBp0hX6xMZQi19K6TJyQmAeI/EiRqFSDOpDNlWXmBsFpA+sDRExKL +w0T0kagJmIiz6CxZVjYzhIn0J78+ITEJkvj3BIlaBUlklMlTlL8jySnJirIyct/N +axJSdU0tTqyrgBgtFBazyZCkt9+2v5HF4UKczyS4CB+IIVETcCFeQi+RL1V0tQou +wtl0tnyZ8vkYq4UL6YvH/7WRxWESbgktmISX08tlRbmcIVxEH//+S41Mgsn4y8hz +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 +rum4ab5Py5q5KMTj61lLlsOPlK0HZmeGh1jqx0IfhWjIx0nCssI+5QZfuIOXe6EZ +3NMc1wm0ppGTeKyN12jC+4tJeHc5BkxpPgTTiLPxc8JUFN6PSbOFcXlJvu9L2422 +KPYGOY/nBqNqGJuG19yxIRkhsySapfVqBF0UxYn9W2AnMDt9x3WCkad451xri9cF +Tpdpcc0Wg0p9q5unHdcJBo+KvKApZYuRnz2cLxCmn02Z2XTrXM03DpDhWjTLtLq5 +voYHSz3TcX19tRvwTMZZszrNTaPJmKs160E2p68Ua003radSqWZbRFvPVFSHUpbI +porfhKREwDOpgXu+lJVND3+V6/OEoTTNb21rbbPaWuY1NafTbW3z0un2Vs47m41O +I51u4oZhmVaz1WZcoud9T884nfq+9tZU69zGjOPm9zXabl7POJ2W5gut1VBa061z +O5vbujpNq23+fN7anjbbeGd6/vz2eel01/zOeVZnS9s83mpoo4hLF2Xva29tbJ2r ++UIzDKVlXgtv7my1Ops477Sa2q2ulq6u9maDm7zdnNfcOZd3pVvb53KjYmdv2he7 +jMTOXr/Pt8xMZtf/GwCJfPpKNUAAAA0KLS1jYTkyNjkzMzNkNjgwOGMxY2E4ZmEx +YWJhM2MyYzhmMmViN2Q2ZTBhNjFhNjdkZjA3Nzc5Y2FiZDNjMWINCkNvbnRlbnQt +RGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ic2FtcGxlX3R5cGVfY29uZmln +IjsgZmlsZW5hbWU9InNhbXBsZV90eXBlX2NvbmZpZy5qc29uIg0KQ29udGVudC1U +eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KeyJhbGxvY19vYmplY3Rz +Ijp7InVuaXRzIjoib2JqZWN0cyJ9LCJhbGxvY19zcGFjZSI6eyJ1bml0cyI6ImJ5 +dGVzIn0sImludXNlX29iamVjdHMiOnsidW5pdHMiOiJvYmplY3RzIiwiYWdncmVn +YXRpb24iOiJhdmVyYWdlIn0sImludXNlX3NwYWNlIjp7InVuaXRzIjoiYnl0ZXMi +LCJhZ2dyZWdhdGlvbiI6ImF2ZXJhZ2UifX0NCi0tY2E5MjY5MzMzZDY4MDhjMWNh +OGZhMWFiYTNjMmM4ZjJlYjdkNmUwYTYxYTY3ZGYwNzc3OWNhYmQzYzFiLS0NCg== +******************* +HEADERS: +User-Agent: Go-http-client/1.1 +Content-Length: 1295 +Content-Type: multipart/form-data; boundary=76090d85f36437fddfaea676fd97e09b516b242fff854dbe191df0aeaaa5 +Accept-Encoding: gzip +BODY: +LS03NjA5MGQ4NWYzNjQzN2ZkZGZhZWE2NzZmZDk3ZTA5YjUxNmIyNDJmZmY4NTRk +YmUxOTFkZjBhZWFhYTUNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsg +bmFtZT0icHJvZmlsZSI7IGZpbGVuYW1lPSJwcm9maWxlLnBwcm9mIg0KQ29udGVu +dC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KH4sIAAAAAAAE/7RS +TYzbxBf/O46TidN2p9uPneZfgTEXd6XY8SRxkhuqUGErkLghURXveDxx3NieyB+r +LCcfQAKEBFckinrgwgHRcoFTtUIc6AUQBw4IoYpLWe0K8SGQtgUW2UsoH+edyxu9 +937v93u/mcc/vvra27tvfrm3IleBACtyFYiw+tTnP9y8zZ8p7+v5O99U1RUgoK/2 +X6qoEhDgPVGVQAV+0oTCahMIUEKSUtPuiqtNUIF1VFeA9l5ThaCCPvulhIjwA7ns +FWEDNRSgfdtQIRDR3p2yXIWfgrJchTKSFaC9AlQIqui7vRcLQgluH6Al2ERN5Yh2 +S1YhkND261eLcg3+JpboGjyKjirHtK9FFYIauvFTia7DWwfoOlxCS8oRbaexvAQF +WKwl14SKWJVq6gOgjrZ/L8UAeB2qEmjAXaHc8v2DLQGECCo17V242gQNeBwdV5a1 +HUGFAKC37pZMEvxChsLfhtcrIpBq6gpooK2fy+Ey3C+8E+EbcilZhifQCWVZ+15c +PrbQJDUKVOsUEGB+O6+gPN/RlXxdO9k5NRRaLVCBef7yhzfvnEV5vltEJc9l7XRn +pXUGiDDfev6jsnbt1SIquaKhzpnWSVCF+db1H3/dfxDl+Y0iaq1WC0gwz/N7+8UR +UH5tcdX+j/+H6wkJZwFLsER5FqVYpLMMNyMS8YRRHrkJPhVnUeqHTNdWw2RGonO6 +QxKG140JD5kxiXnIn2NTYnjcmE09I+Su4fGARJ7OY89IOQ/ohPjRIxsdvaObbY+b +Ojb1rh74UTZvk9C1ekYSUyPOotQPmRFOGJnpHsfLcRalfsh0L2ab3LnCaIodY3JI +rB4NSTzVPY7/4k0oibhzhdEUL8V/muDRR2PiR/js/cR570kST5/m8ZTF+jiLKMbP +Hpo5Hi0knliwJ5tJysIkJXSK6WGRkiS0SehaPT3BpxfM3j/2vp/XVj163k+Tc7rj +pzP80KJfW/yewuai4QKP1yKXzbFzWLpDx09DUv6lMwsZE0ZmBbsesXl6gSQpfkH4 +N79OCZ0w4yJLzxdvnRhrUcqCwL+45jKCO7inm0YazozH+BMkcg3btk2P207mB67t ++ekkc2zKQztkaexTbvOUBTblQcBoymObhq7NUxbYlAcBoymP7dlmzLHWGVkDa0AH +3X7HdN3BoO+6Q4sxx8QOdt0Ow5gSatIBftjIktgIfMeYDy3b6rUDP8rmbS/KiiTV +E65bWLNcq+eYg7FD6GA0YtbQJQPmuKPRsO+645HTp0530GcW1o0siY3Ad4z/jnPb +gR9l8/Z8aLWL9+c6xlq332WmY1Gnw5hDO0M67o7HQxMzwoakbzo9NnatYY/h2qUN +N+GXsXxpI9lMKAmCy38EAAD//6sEfUGMBgAADQotLTc2MDkwZDg1ZjM2NDM3ZmRk +ZmFlYTY3NmZkOTdlMDliNTE2YjI0MmZmZjg1NGRiZTE5MWRmMGFlYWFhNS0tDQo= +*******************"#; + +const EXPECTED_NAMES: &str = "bufio.(*Writer).Flush, bufio.NewReaderSize, cloud.google.com/go/logging/apiv2/loggingpb.file_google_logging_v2_logging_config_proto_init, cloud.google.com/go/logging/apiv2/loggingpb.init.2, compress/flate.NewWriter, compress/flate.newDeflateFast, crypto/x509.(*CertPool).AddCert, crypto/x509.ParseCertificate, crypto/x509.parseCertificate, crypto/x509/pkix.(*Name).FillFromRDNSequence, github.com/ClickHouse/clickhouse-go/v2.(*clickhouse).Ping, github.com/ClickHouse/clickhouse-go/v2.(*clickhouse).acquire, github.com/ClickHouse/clickhouse-go/v2.(*clickhouse).dial, github.com/ClickHouse/clickhouse-go/v2.(*clickhouse).dial.func1, github.com/ClickHouse/clickhouse-go/v2.DefaultDialStrategy, github.com/ClickHouse/clickhouse-go/v2.dial, github.com/DataDog/datadog-agent/pkg/util/scrubber.AddDefaultReplacers, github.com/DataDog/datadog-agent/pkg/util/scrubber.init.0, github.com/alecthomas/participle/v2.(*generatorContext).parseCapture, github.com/alecthomas/participle/v2.(*generatorContext).parseDisjunction, github.com/alecthomas/participle/v2.(*generatorContext).parseGroup, github.com/alecthomas/participle/v2.(*generatorContext).parseSequence, github.com/alecthomas/participle/v2.(*generatorContext).parseTerm, github.com/alecthomas/participle/v2.(*generatorContext).parseTermNoModifiers, github.com/alecthomas/participle/v2.(*generatorContext).parseType, github.com/alecthomas/participle/v2.(*generatorContext).subparseGroup, github.com/alecthomas/participle/v2.(*structLexer).Next, github.com/alecthomas/participle/v2.(*structLexer).Peek, github.com/alecthomas/participle/v2/lexer.Upgrade, github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints.init, github.com/aws/aws-sdk-go/aws/endpoints.init, github.com/envoyproxy/go-control-plane/envoy/config/overload/v3.file_envoy_config_overload_v3_overload_proto_init, github.com/envoyproxy/go-control-plane/envoy/config/overload/v3.init.0, github.com/envoyproxy/go-control-plane/envoy/type/matcher/v3.file_envoy_type_matcher_v3_status_code_input_proto_init, github.com/envoyproxy/go-control-plane/envoy/type/matcher/v3.init.7, github.com/goccy/go-json/internal/decoder.init.0, github.com/goccy/go-json/internal/encoder.init.0, github.com/gogo/protobuf/proto.RegisterType, github.com/google/gnostic-models/openapiv3.file_openapiv3_OpenAPIv3_proto_init, github.com/google/gnostic-models/openapiv3.init.0, github.com/google/pprof/profile.init, github.com/gorilla/mux.(*Router).ServeHTTP, github.com/grafana/pyroscope-go.(*Session).Start.func1, github.com/grafana/pyroscope-go.(*Session).Start.func2, github.com/grafana/pyroscope-go.(*Session).dumpHeapProfile, github.com/grafana/pyroscope-go.(*Session).reset, github.com/grafana/pyroscope-go.(*Session).takeSnapshots, github.com/grafana/pyroscope-go.(*Session).uploadData, github.com/grafana/pyroscope-go.(*cpuProfileCollector).Start, github.com/grafana/pyroscope-go.(*cpuProfileCollector).reset, github.com/grafana/pyroscope-go/godeltaprof.(*HeapProfiler).Profile, github.com/grafana/pyroscope-go/godeltaprof/internal/pprof.(*DeltaHeapProfiler).WriteHeapProto, github.com/grafana/pyroscope-go/godeltaprof/internal/pprof.(*profileBuilder).Build, github.com/grafana/pyroscope-go/godeltaprof/internal/pprof.(*profileBuilder).LocsForStack, github.com/grafana/pyroscope-go/godeltaprof/internal/pprof.(*profileBuilder).Sample, github.com/grafana/pyroscope-go/godeltaprof/internal/pprof.(*profileBuilder).emitLocation, github.com/grafana/pyroscope-go/godeltaprof/internal/pprof.(*profileBuilder).flush, github.com/grafana/pyroscope-go/godeltaprof/internal/pprof.(*profileBuilder).stringIndex, github.com/grafana/pyroscope-go/godeltaprof/internal/pprof.(*protobuf).int64s, github.com/grafana/pyroscope-go/internal/pprof.defaultCollector.StartCPUProfile, github.com/grafana/pyroscope-go/upstream/remote.(*Remote).handleJobs, github.com/grafana/pyroscope-go/upstream/remote.(*Remote).safeUpload, github.com/klauspost/compress/flate.(*Writer).Close, github.com/klauspost/compress/flate.(*compressor).close, github.com/klauspost/compress/flate.(*compressor).storeFast, github.com/klauspost/compress/flate.(*fastEncL1).Encode, github.com/klauspost/compress/flate.(*fastGen).addBlock, github.com/klauspost/compress/flate.NewWriter, github.com/klauspost/compress/flate.newFastEnc, github.com/lib/pq.init, github.com/metrico/otel-collector/exporter/clickhouseprofileexporter.createLogsExporter, github.com/metrico/otel-collector/exporter/clickhouseprofileexporter.newClickhouseProfileExporter, github.com/metrico/otel-collector/exporter/clickhouseprofileexporter/ch.NewClickhouseAccessNativeColumnar, github.com/metrico/otel-collector/receiver/pyroscopereceiver.(*pyroscopeReceiver).httpHandlerIngest, github.com/metrico/otel-collector/receiver/pyroscopereceiver.newPyroscopeReceiver.func1, github.com/metrico/otel-collector/receiver/pyroscopereceiver/jfrparser.init, github.com/opencontainers/go-digest.init, github.com/prometheus/procfs.init, github.com/snowflakedb/gosnowflake.init.3, github.com/snowflakedb/gosnowflake.readCACerts, github.com/spf13/cobra.(*Command).Execute, github.com/spf13/cobra.(*Command).ExecuteC, github.com/spf13/cobra.(*Command).execute, github.com/vmware/govmomi/vim25/types.init.2644, github.com/vmware/govmomi/vim25/types.init.3073, github.com/vmware/govmomi/vim25/types.init.6146, github.com/xdg-go/stringprep.init, github.com/xdg-go/stringprep.map.init.2, go.opencensus.io/resource.init, go.opencensus.io/trace/tracestate.init, go.opentelemetry.io/collector/config/confighttp.(*ServerConfig).ToServerContext.maxRequestBodySizeInterceptor.func2, go.opentelemetry.io/collector/config/confighttp.(*clientInfoHandler).ServeHTTP, go.opentelemetry.io/collector/config/confighttp.(*decompressor).ServeHTTP, go.opentelemetry.io/collector/exporter.(*Builder).CreateLogs, go.opentelemetry.io/collector/exporter.CreateLogsFunc.CreateLogsExporter, go.opentelemetry.io/collector/otelcol.(*Collector).Run, go.opentelemetry.io/collector/otelcol.(*Collector).setupConfigurationComponents, go.opentelemetry.io/collector/otelcol.NewCommand.func1, go.opentelemetry.io/collector/service.(*Service).initExtensionsAndPipeline, go.opentelemetry.io/collector/service.New, go.opentelemetry.io/collector/service/internal/graph.(*Graph).buildComponents, go.opentelemetry.io/collector/service/internal/graph.(*exporterNode).buildComponent, go.opentelemetry.io/collector/service/internal/graph.Build, go.opentelemetry.io/collector/service/telemetry.New, go.opentelemetry.io/collector/service/telemetry.newLogger, go.opentelemetry.io/collector/service/telemetry.newSampledLogger, go.opentelemetry.io/collector/service/telemetry.newSampledLogger.WrapCore.func2, go.opentelemetry.io/collector/service/telemetry.newSampledLogger.func1, go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.(*middleware).serveHTTP, go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.NewMiddleware.func1.1, go.uber.org/zap.(*Logger).WithOptions, go.uber.org/zap.optionFunc.apply, go.uber.org/zap/zapcore.newCounters, golang.org/x/text/encoding/ianaindex.init, golang.org/x/text/encoding/ianaindex.map.init.0, google.golang.org/protobuf/internal/filedesc.(*File).initDecls, google.golang.org/protobuf/internal/filedesc.(*File).unmarshalSeed, google.golang.org/protobuf/internal/filedesc.(*Message).unmarshalSeed, google.golang.org/protobuf/internal/filedesc.Builder.Build, google.golang.org/protobuf/internal/filedesc.appendFullName, google.golang.org/protobuf/internal/filedesc.newRawFile, google.golang.org/protobuf/internal/filetype.Builder.Build, google.golang.org/protobuf/internal/strs.(*Builder).grow, io.ReadAll, k8s.io/api/admissionregistration/v1beta1.addKnownTypes, k8s.io/api/authorization/v1beta1.init.0, k8s.io/api/autoscaling/v2beta1.init.0, k8s.io/api/core/v1.addKnownTypes, k8s.io/api/flowcontrol/v1beta1.addKnownTypes, k8s.io/apimachinery/pkg/apis/meta/v1.AddToGroupVersion, k8s.io/apimachinery/pkg/runtime.(*Scheme).AddKnownTypeWithName, k8s.io/apimachinery/pkg/runtime.(*Scheme).AddKnownTypes, k8s.io/apimachinery/pkg/runtime.(*SchemeBuilder).AddToScheme, k8s.io/client-go/kubernetes/scheme.init.0, main.run, main.runInteractive, n/a, net.(*conn).Write, net.(*netFD).Write, net/http.(*conn).serve, net/http.(*persistConn).writeLoop, net/http.HandlerFunc.ServeHTTP, net/http.NewRequest, net/http.NewRequestWithContext, net/http.persistConnWriter.Write, net/http.serverHandler.ServeHTTP, os.ReadFile, reflect.(*rtype).Method, reflect.(*rtype).MethodByName, reflect.FuncOf, reflect.Value.MethodByName, reflect.typelinks, reflect.typesByString, regexp.Compile, regexp.compile, regexp.compileOnePass, regexp.makeOnePass, regexp.newQueue, regexp/syntax.(*Regexp).Simplify, regexp/syntax.(*compiler).compile, regexp/syntax.(*compiler).inst, regexp/syntax.Compile, runtime.(*gcBits).bitp, runtime.(*gcWork).tryGet, runtime.(*itabTableType).find, runtime.(*lfstack).pop, runtime.(*lfstack).push, runtime.(*mspan).base, runtime.(*pageAlloc).scavenge, runtime.(*pageAlloc).scavenge.func1, runtime.(*scavengerState).init.func2, runtime.(*scavengerState).run, runtime.(*stkframe).getStackMap, runtime.assertI2I2, runtime.bgscavenge, runtime.doInit, runtime.doInit1, runtime.gcBgMarkWorker, runtime.gcBgMarkWorker.func2, runtime.gcDrain, runtime.getitab, runtime.greyobject, runtime.heapBits.nextFast, runtime.itabsinit, runtime.madvise, runtime.main, runtime.markroot, runtime.markroot.func1, runtime.memmove, runtime.pcdatavalue, runtime.pcvalue, runtime.putempty, runtime.readvarint, runtime.rt0_go, runtime.scanframeworker, runtime.scanobject, runtime.scanstack, runtime.schedinit, runtime.sysUnused, runtime.sysUnusedOS, runtime.systemstack, runtime/internal/syscall.Syscall6, runtime/pprof.(*profMap).lookup, runtime/pprof.(*profileBuilder).addCPUData, runtime/pprof.(*profileBuilder).build, runtime/pprof.(*profileBuilder).readMapping, runtime/pprof.StartCPUProfile, runtime/pprof.newProfileBuilder, runtime/pprof.profileWriter, syscall.RawSyscall6, syscall.Syscall, syscall.Write, syscall.write, total"; +const EXPECTED_MAP: &str = r#"0: [38742454760335319, 40087946534119400, 42596367897004777, 48771580209901686, 53990741595935099, 57088183000490135, 58557529421486831, 59457293053784180, 59593299692301340, 66048360549176157, 67085792033845063, 67191441878081537, 67662774102607196, 69612847511641035] +38742454760335319: [100628372814638195] +40087946534119400: [79270644668093111] +42596367897004777: [101487633555280136] +48771580209901686: [94918361600696052] +53990741595935099: [107434199424883752, 89550126155032432, 94200449688993973] +57088183000490135: [99612870642839279] +58557529421486831: [76842973892222616] +59457293053784180: [100063261950489098] +59593299692301340: [91363841374301870] +66048360549176157: [97043151921186953] +67085792033845063: [98457092565724063] +67191441878081537: [80234187892307127] +67662774102607196: [100070498862204333] +69612847511641035: [93989015620725212] +76842973892222616: [141511466637999628] +79270644668093111: [140046790225519686] +80234187892307127: [108446884271945857, 113267436422830507, 114248832421025570, 114885430980069358, 115331698473596966, 117892689794117372, 119726413661300012, 121372394715467071, 125414451763041269, 128617529603403115, 130674963834653131, 131369017856162869, 131377443943695927, 133162168510851715, 133224444749139462, 133456625119750025, 133670685672466743, 135704509429414406, 136256372519083004, 136369426990552861, 136900252284730992, 138350841599489442, 141632261736556477, 141644186349176910, 142921258866238155] +89550126155032432: [132968328674819128] +91363841374301870: [112927787583348828] +93989015620725212: [123859131567339026] +94200449688993973: [111305032523588391] +94918361600696052: [115517637213504835] +97043151921186953: [138755457801079417] +98457092565724063: [131444219727285889] +99612870642839279: [143056642792749795] +100063261950489098: [114239512416445153] +100070498862204333: [113036276560317227] +100628372814638195: [113202375439754492] +101487633555280136: [138302629414163253] +107434199424883752: [143716402966321512] +108446884271945857: [164598631465211387] +113036276560317227: [162585562039257624] +113202375439754492: [144907925925522891] +114239512416445153: [176508602522439059] +114248832421025570: [179755313256235787] +115331698473596966: [162678103806317869] +115517637213504835: [166486937955124181] +117892689794117372: [168707815736043364] +119726413661300012: [151672128231048010] +121372394715467071: [146560668754513061] +123859131567339026: [167803307762682777] +125414451763041269: [150771910060347665] +128617529603403115: [149591371078846279] +130674963834653131: [152957885916485528] +131377443943695927: [171871083424469921] +131444219727285889: [158560652969149676] +132968328674819128: [174607084807025992] +133162168510851715: [160368297165868928] +133224444749139462: [166300091472105835] +133456625119750025: [171820145069951969] +135704509429414406: [177677207921798470] +136256372519083004: [172843056586582600] +136369426990552861: [171635302867278403] +136900252284730992: [159371476378974887] +138302629414163253: [152091754849386483] +138350841599489442: [170753895802118158] +138755457801079417: [169936498903112440] +140046790225519686: [162052294746411150] +141511466637999628: [154563265271950256] +141644186349176910: [172439205468229740] +143056642792749795: [151373822819177589] +143716402966321512: [147895167036604141] +144907925925522891: [211823748967180240] +146560668754513061: [202372133294706040] +149591371078846279: [183845667997627588] +151373822819177589: [204504177385824931] +151672128231048010: [203035540117135618] +152091754849386483: [190431325594563993] +154563265271950256: [202382720767460487] +158560652969149676: [203771058446615966] +159371476378974887: [180529091226645867] +160368297165868928: [209291742825885717] +162052294746411150: [181754272285663650] +162585562039257624: [205012902263967563, 206106656114774191, 208139625951028649, 213747929336669041] +162678103806317869: [193609792679648060] +166300091472105835: [203175429227652691] +166486937955124181: [214733506333145550] +167803307762682777: [212288632265080590] +168707815736043364: [200420868017042899] +169936498903112440: [207016626847385621] +170753895802118158: [207696567357905885, 211229286556507985] +171635302867278403: [215891770457407678] +171820145069951969: [198185094474001340] +171871083424469921: [202139988629356393] +172439205468229740: [184990442633448882] +172843056586582600: [202028551340529695] +176508602522439059: [192684785179366918] +177677207921798470: [212698517895877695] +180529091226645867: [234212302893142491] +181754272285663650: [223163788020989333] +183845667997627588: [218657610839969430] +184990442633448882: [244915317080401139] +190431325594563993: [243728370117120237] +192684785179366918: [230844740840469675] +193609792679648060: [237537306502838130] +198185094474001340: [243079623770450903] +200420868017042899: [223583814222236675] +202028551340529695: [243525418435742126] +202139988629356393: [217731971905874853] +202372133294706040: [241945877256331538] +202382720767460487: [231336693026650961] +203035540117135618: [248986284621543964] +203175429227652691: [232498376900343756] +203771058446615966: [241946918561780749] +205012902263967563: [222240240991495290, 228138096816433381, 229786537842853059] +206106656114774191: [231182262209661194] +207016626847385621: [245709583625582887] +209291742825885717: [235127192721045853] +211229286556507985: [225119056699523582] +211823748967180240: [227812771612588225] +212288632265080590: [225741202102833501] +212698517895877695: [223622488125970319, 226074041614824704, 226326886345647069] +213747929336669041: [242278203730768664, 246612818468819164] +214733506333145550: [248406561647853472] +215891770457407678: [249196627458800899] +217731971905874853: [280131986563362610] +218657610839969430: [267039375489569399] +223163788020989333: [260677813958852540] +223583814222236675: [256498835618521422] +223622488125970319: [260571114322058968] +225119056699523582: [256039287245742699] +225741202102833501: [254727702034572013] +226074041614824704: [287930622953249787] +226326886345647069: [271805855373081495] +227812771612588225: [257319139697943423] +230844740840469675: [276073338854032635] +231182262209661194: [281236825529333440] +231336693026650961: [278691972420507434] +232498376900343756: [261144471606523809] +234212302893142491: [257783987186986042] +235127192721045853: [273578698003240119] +237537306502838130: [285763816937176870] +241945877256331538: [268438102404688691] +241946918561780749: [257241256473655176] +243525418435742126: [276134307233260561] +243728370117120237: [281969803670885355] +244915317080401139: [269936810596416513] +245709583625582887: [257463554105572768] +246612818468819164: [277288251556112728] +248406561647853472: [252569824539384422] +248986284621543964: [261400615560482546] +249196627458800899: [272798692730783874] +252569824539384422: [305292813914654951] +256498835618521422: [312763589063956012] +257241256473655176: [306111611259841957] +257319139697943423: [299082446479950134] +257463554105572768: [310279315742847272] +257783987186986042: [320401531452854762] +260571114322058968: [309455851780254571] +260677813958852540: [296247052900183451, 317744443962260464, 323186131871480845] +267039375489569399: [319439935469660530] +269936810596416513: [308011307883155678] +271805855373081495: [295467226836533886] +273578698003240119: [320300640419126287] +276073338854032635: [319187190984906169] +278691972420507434: [323560718645185674] +281236825529333440: [306077811224786879] +281969803670885355: [315953078079461946] +285763816937176870: [316913844144087631] +287930622953249787: [303827084499332991] +295467226836533886: [326409636778730601] +296247052900183451: [349618734685561198, 359288355374643511] +299082446479950134: [331359355115483339] +303827084499332991: [338780526052653927] +305292813914654951: [350889042354921962] +306077811224786879: [340916933448816229] +306111611259841957: [327550878786529068] +310279315742847272: [336163923347285241] +312763589063956012: [326613319977195793] +315953078079461946: [325145473923500605] +317744443962260464: [350168639796857360, 359131412474089459] +319187190984906169: [339354010836253434] +319439935469660530: [345933865856257569] +320300640419126287: [328924661850434419] +323186131871480845: [345577853602457116, 357491054556179667] +323560718645185674: [345639817392002662] +325145473923500605: [365276176966701378] +327550878786529068: [382409820864484947] +331359355115483339: [396161431009652089] +336163923347285241: [361022495174443294] +338780526052653927: [385220733308424239] +339354010836253434: [390788673691463970] +340916933448816229: [393832446376904874] +345577853602457116: [367001874425340950] +345639817392002662: [392863616087521191] +345933865856257569: [363770127908956666] +349618734685561198: [395656354623906696] +350168639796857360: [395541453753437426] +357491054556179667: [386153478011204969] +361022495174443294: [426468028027318203] +363770127908956666: [413105119106341518] +365276176966701378: [414131856178699368, 427478550692068623] +385220733308424239: [411557834771911607] +390788673691463970: [416118621215589990] +392863616087521191: [429645746188757495] +393832446376904874: [401174625198593520] +395541453753437426: [419391523947149865] +395656354623906696: [425632162216103475] +396161431009652089: [431936995650807243] +401174625198593520: [456447508180047158] +411557834771911607: [437861033291124710] +414131856178699368: [437033094921809140] +416118621215589990: [446096569348012462] +419391523947149865: [465704827954701504] +425632162216103475: [437489796624700501] +426468028027318203: [452497480807275245] +427478550692068623: [448483283656531511] +429645746188757495: [435023920018836649] +431936995650807243: [463212886879666703] +435023920018836649: [497604134777822163] +437033094921809140: [472676070278615598] +437861033291124710: [488097452589611931] +446096569348012462: [486403981884537998] +448483283656531511: [485108097661571896] +452497480807275245: [499306537905829224] +463212886879666703: [478497921702831780] +465704827954701504: [474155843758329780] +472676070278615598: [514941220186423434] +478497921702831780: [507613228799022537] +485108097661571896: [521502711493770737] +486403981884537998: [539125783741006397] +488097452589611931: [510679870848207228] +497604134777822163: [539770343320994095] +499306537905829224: [517534758553984568] +507613228799022537: [544973614009445412] +514941220186423434: [550526413983358244] +521502711493770737: [552048866168332286] +539125783741006397: [553053910897306124] +539770343320994095: [568796492124626177] +544973614009445412: [603048788829292163] +550526413983358244: [583586592627894792] +552048866168332286: [592383109338724224] +553053910897306124: [595826071670654526] +568796492124626177: [589612847844729594] +583586592627894792: [641396004492829198] +589612847844729594: [639492022376244668] +592383109338724224: [631152865748449390] +595826071670654526: [623605633815227692] +603048788829292163: [642148023643848224] +623605633815227692: [663812272016721927] +631152865748449390: [657922135552082607] +639492022376244668: [684347966288065243] +641396004492829198: [659329956224601251] +642148023643848224: [658011455666624803] +658011455666624803: [701377244087752852] +659329956224601251: [710883616105928487] +663812272016721927: [692611675432640454] +684347966288065243: [709834451815324138] +692611675432640454: [727858206006214905] +701377244087752852: [744127002732167100] +709834451815324138: [728259091397428983] +710883616105928487: [741318177634328511] +727858206006214905: [772615364345543035] +728259091397428983: [771868168823000744] +741318177634328511: [760902393548738380] +744127002732167100: [789103945439592791] +760902393548738380: [802556183189320716] +771868168823000744: [807210588330467000] +772615364345543035: [819758594897649876] +789103945439592791: [802714868440700285] +802556183189320716: [856519119881828781] +802714868440700285: [842366458003816992] +807210588330467000: [858208801750801133] +819758594897649876: [860849857165541675] +842366458003816992: [872896174453274103] +856519119881828781: [898702575464302642] +858208801750801133: [882798593320449911] +860849857165541675: [867629405263846024] +867629405263846024: [925077370316601880] +872896174453274103: [925302796778635955] +882798593320449911: [928341377466988897] +898702575464302642: [910131451510442396] +910131451510442396: [967539570511740301] +925077370316601880: [936830443724683529] +925302796778635955: [942446406691314293] +928341377466988897: [937034112021755462] +936830443724683529: [978337694696331794] +937034112021755462: [1008333201575256740] +942446406691314293: [973646071648783645] +973646071648783645: [1039417800972441990] +978337694696331794: [1019903727548730494] +1008333201575256740: [1025894988602438855] +1019903727548730494: [1047856586150546435] +1025894988602438855: [1069379696897221201] +1039417800972441990: [1062132269117042055] +1047856586150546435: [1094195406916561896] +1062132269117042055: [1094103587605650923] +1069379696897221201: [1093278396076019935] +1093278396076019935: [1124970154624221772] +1094103587605650923: [1128890574693008158] +1094195406916561896: [1120238951528850364, 1144429090257526679] +1120238951528850364: [1177891509056271968] +1124970154624221772: [1181139411236334438] +1144429090257526679: [1179266705547649400] +"#; diff --git a/test/e2e b/test/e2e index 7d77675d..55c595d3 160000 --- a/test/e2e +++ b/test/e2e @@ -1 +1 @@ -Subproject commit 7d77675d19889b833fcd00c78003ee814fbc0e34 +Subproject commit 55c595d3f847e979c8f29bea9b3c9625a0602121 diff --git a/test/qryn_test_env/docker-compose.yaml b/test/qryn_test_env/docker-compose.yaml new file mode 100644 index 00000000..976db049 --- /dev/null +++ b/test/qryn_test_env/docker-compose.yaml @@ -0,0 +1,121 @@ +version: '2.1' + +networks: + qryn-test: + driver: bridge + +services: + grafana: + image: grafana/grafana:11.2.2 + container_name: grafana + user: root + networks: + - qryn-test + volumes: + - ./grafana/_data:/var/lib/grafana:rw + - ./grafana/provisioning/:/etc/grafana/provisioning/ + environment: + - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin} + - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} + - GF_USERS_ALLOW_SIGN_UP=false + - GF_USERS_DEFAULT_THEME=light + - GF_EXPLORE_ENABLED=true + - GF_ALERTING_ENABLED=false + - GF_UNIFIED_ALERTING_ENABLED=true + - GF_FEATURE_TOGGLES_ENABLE=traceToMetrics,publicDashboards,tempoApmTable + - GF_INSTALL_PLUGINS=grafana-pyroscope-app,https://storage.googleapis.com/integration-artifacts/grafana-lokiexplore-app/grafana-lokiexplore-app-latest.zip;grafana-lokiexplore-app + restart: unless-stopped + ports: + - 3000:3000 + depends_on: + - qryn + + clickhouse-server: + image: clickhouse/clickhouse-server:24.1 + container_name: clickhouse-server + hostname: clickhouse + restart: unless-stopped + volumes: + - ./clickhouse/_data:/var/lib/clickhouse + networks: + - qryn-test + environment: + - CLICKHOUSE_USER=qryn + - CLICKHOUSE_PASSWORD=demo + ports: + - 8123:8123 + - 9000:9000 + healthcheck: + test: ['CMD', 'wget', '--spider', '-q', '127.0.0.1:8123/ping'] + interval: 1s + timeout: 1s + retries: 30 + + qryn: + image: node:22 + container_name: qryn + hostname: qryn + restart: unless-stopped + volumes: + - ../../:/app + networks: + - qryn-test + expose: + - 3100 + ports: + - "3100:3100" + environment: + - CLICKHOUSE_SERVER=clickhouse-server + - CLICKHOUSE_PORT=8123 + - CLICKHOUSE_AUTH=qryn:demo + - CLICKHOUSE_DB=qryn + - NODE_OPTIONS="--max-old-space-size=4096" + - FASTIFY_METRICS=true + working_dir: /app + entrypoint: sh + command: + - -c + - "mkdir /_app && cp -rf patches package.json package-lock.json /_app && cd /_app && npm install && cd /app && NODE_PATH='.:../_app/node_modules' node qryn_node.js" + depends_on: + clickhouse-server: + condition: service_healthy + + longtest: + image: golang:1.22-alpine + volumes: + - ./longtest:/longtest + working_dir: /longtest + environment: + MODE: LMZ + URL: http://qryn:3100 + command: ["go", "run", "."] + networks: + - qryn-test + depends_on: + - qryn + + otel-collector: + container_name: otel-collector + hostname: otel-collector + image: ghcr.io/metrico/qryn-otel-collector:0.0.5 + networks: + - qryn-test + volumes: + - ./otel/otel-collector-config.yaml:/etc/otel/config.yaml + ports: + - "3200:3100" # Loki/Logql HTTP receiver + - "3201:3200" # Loki/Logql gRPC receiver + - "8088:8088" # Splunk HEC receiver + - "5514:5514" # Syslog TCP Rereceiverceiver + - "24224:24224" # Fluent Forward receiver + - "4317:4317" # OTLP gRPC receiver + - "4318:4318" # OTLP HTTP receiver + - "14250:14250" # Jaeger gRPC receiver + - "14268:14268" # Jaeger thrift HTTP receiver + - "9411:9411" # Zipkin Trace receiver + - "11800:11800" # Skywalking gRPC receiver + - "12800:12800" # Skywalking HTTP receiver + - "8086:8086" # InfluxDB Line proto HTTP + - "8062:8062" # Pyroscope jprof + restart: on-failure + diff --git a/test/qryn_test_env/grafana/provisioning/dashboards/11159_rev1_custom.json b/test/qryn_test_env/grafana/provisioning/dashboards/11159_rev1_custom.json new file mode 100644 index 00000000..27cbd5bd --- /dev/null +++ b/test/qryn_test_env/grafana/provisioning/dashboards/11159_rev1_custom.json @@ -0,0 +1,1047 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "node.js prometheus client basic metrics", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 11159, + "graphTooltip": 0, + "id": 6, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 10, + "x": 0, + "y": 0 + }, + "id": 6, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "irate(process_cpu_user_seconds_total{instance=~\"$instance\"}[2m]) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "User CPU - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "irate(process_cpu_system_seconds_total{instance=~\"$instance\"}[2m]) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Sys CPU - {{instance}}", + "refId": "B" + } + ], + "title": "Process CPU Usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 9, + "x": 10, + "y": 0 + }, + "id": 8, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_eventloop_lag_seconds{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Event Loop Lag", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 19, + "y": 0 + }, + "id": 2, + "interval": "", + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/^__name__$/", + "values": false + }, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(nodejs_version_info{instance=~\"$instance\"}) by (version)", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{version}}", + "refId": "A" + } + ], + "title": "Node.js Version", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#F2495C", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 5, + "x": 19, + "y": 3 + }, + "id": 4, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(changes(process_start_time_seconds{instance=~\"$instance\"}[1m]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Process Restart Times", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 16, + "x": 0, + "y": 7 + }, + "id": 7, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "process_resident_memory_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Process Memory - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_heap_size_total_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Total - {{instance}}", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_heap_size_used_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Used - {{instance}}", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_external_memory_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "External Memory - {{instance}}", + "refId": "D" + } + ], + "title": "Process Memory Usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 7 + }, + "id": 9, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_active_handles_total{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Active Handler - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_active_requests_total{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Active Request - {{instance}}", + "refId": "B" + } + ], + "title": "Active Handlers/Requests Total", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 14 + }, + "id": 10, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_heap_space_size_total_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Total - {{instance}} - {{space}}", + "refId": "A" + } + ], + "title": "Heap Total Detail", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 14 + }, + "id": 11, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_heap_space_size_used_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Used - {{instance}} - {{space}}", + "refId": "A" + } + ], + "title": "Heap Used Detail", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 14 + }, + "id": 12, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "nodejs_heap_space_size_available_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Used - {{instance}} - {{space}}", + "refId": "A" + } + ], + "title": "Heap Available Detail", + "type": "timeseries" + } + ], + "refresh": "", + "schemaVersion": 38, + "tags": [ + "nodejs" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "prometheus" + }, + "hide": 0, + "includeAll": false, + "label": "Datasource", + "multi": false, + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "definition": "label_values(nodejs_version_info, instance)", + "hide": 0, + "includeAll": true, + "label": "instance", + "multi": true, + "name": "instance", + "options": [], + "query": "label_values(nodejs_version_info, instance)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "NodeJS Application Dashboard", + "uid": "PTSqcpJWk1", + "version": 3, + "weekStart": "" +} \ No newline at end of file diff --git a/test/qryn_test_env/grafana/provisioning/dashboards/default.yaml b/test/qryn_test_env/grafana/provisioning/dashboards/default.yaml new file mode 100644 index 00000000..7c4d0dd5 --- /dev/null +++ b/test/qryn_test_env/grafana/provisioning/dashboards/default.yaml @@ -0,0 +1,8 @@ +apiVersion: 1 + +providers: + - name: Qryn NodeJS Application Dashboard + folder: Services + type: file + options: + path: /etc/grafana/provisioning/dashboards/11159_rev1_custom.json \ No newline at end of file diff --git a/test/qryn_test_env/grafana/provisioning/datasources/datasource.yml b/test/qryn_test_env/grafana/provisioning/datasources/datasource.yml new file mode 100644 index 00000000..8902c532 --- /dev/null +++ b/test/qryn_test_env/grafana/provisioning/datasources/datasource.yml @@ -0,0 +1,80 @@ +# config file version +apiVersion: 1 + +deleteDatasources: + - name: Loki + orgId: 1 + - name: Tempo + orgId: 1 + - name: Prometheus + orgId: 1 + - name: Pyroscope + orgId: 1 + +datasources: + - name: Loki + type: loki + access: proxy + uid: loki + url: http://qryn:3100 + editable: true + jsonData: + derivedFields: + - datasourceUid: tempo + matcherRegex: "^.*?traceI[d|D]=(\\w+).*$" + name: traceId + url: '$${__value.raw}' + - datasourceUid: tempo + matcherRegex: "^.*?\"traceID\":\"(\\w+)\".*$" + name: traceID + url: '$${__value.raw}' + - name: Tempo + type: tempo + access: proxy + uid: tempo + url: http://qryn:3100 + editable: true + jsonData: + nodeGraph: + enabled: true + tracesToLogs: + datasourceUid: loki + filterByTraceID: false + spanEndTimeShift: "2000ms" + spanStartTimeShift: "-2000ms" + tags: ['job'] + tracesToMetrics: + datasourceUid: prometheus + tags: ['job'] + serviceMap: + datasourceUid: prometheus + lokiSearch: + datasourceUid: loki + - name: Prometheus + type: prometheus + access: proxy + uid: prometheus + url: http://qryn:3100 + editable: true + basicAuth: false + jsonData: + httpMethod: GET + graphiteVersion: "1.1" + tlsAuth: false + tlsAuthWithCACert: false + cacheLevel: 'High' + incrementalQuerying: 'Enable' + incrementalQueryOverlapWindow: 2m + - name: Pyroscope + uid: pyroscope + type: grafana-pyroscope-datasource + version: 2 + access: proxy + url: http://qryn:3100 + basicAuth: false + basicAuthUser: "" + withCredentials: false + isDefault: false + readOnly: false + # secureJsonData: + # apiKey: {YOUR_API_KEY} diff --git a/test/qryn_test_env/longtest/README.md b/test/qryn_test_env/longtest/README.md new file mode 100644 index 00000000..2e68e484 --- /dev/null +++ b/test/qryn_test_env/longtest/README.md @@ -0,0 +1,26 @@ +# gigaswap - long test + +long-term test of qryn endpoint +It sends +- 3000 logs/sec +- 3000 influx logs / sec +- 300 zipkin traces/sec +- 300 datadog traces/sec with variable amount of spans +- 5K of metrics / 15 sec + +depending on the MODE until you stop it. + +# Usage + +- go build -o longtest +- URL='' MODE= ZPATH=/path/for/zipkin DPATH=/path/for/datadog ./longtest + +## MODE LIST + +- L - for loki logs +- M - for metrics remote-write +- Z - for zipkin traces +- D - for datadog traces +- I - for influx logs +- C - for a lot of small simultaneous loki log request to check batching +- S - for servicegraph testing diff --git a/test/qryn_test_env/longtest/common.go b/test/qryn_test_env/longtest/common.go new file mode 100644 index 00000000..3a9ec37d --- /dev/null +++ b/test/qryn_test_env/longtest/common.go @@ -0,0 +1,7 @@ +package main + +import "math/rand" + +func pickRandom[T any](arr []T, rnd *rand.Rand) T { + return arr[rnd.Intn(len(arr))] +} diff --git a/test/qryn_test_env/longtest/datadogSender.go b/test/qryn_test_env/longtest/datadogSender.go new file mode 100644 index 00000000..5a048cb5 --- /dev/null +++ b/test/qryn_test_env/longtest/datadogSender.go @@ -0,0 +1,132 @@ +package main + +import ( + "encoding/json" + "fmt" + "math/rand" + "os" + "time" +) + +// https://docs.datadoghq.com/tracing/guide/send_traces_to_agent_by_api/#model +type DataDogModel struct { + Duration int64 `json:"duration"` + Error int32 `json:"error"` + Meta map[string]string `json:"meta"` + Metrics map[string]float64 `json:"metrics"` + Name string `json:"name"` + ParentID int64 `json:"parent_id"` + Resource string `json:"resource"` + Service string `json:"service"` + SpanID int64 `json:"span_id"` + Start int64 `json:"start"` + TraceID int64 `json:"trace_id"` + Type DataDogModelEnum `json:"type"` +} + +type DataDogModelEnum string + +func (d DataDogModelEnum) String() string { + return string(d) +} + +const ( + DataDogModelEnumWeb DataDogModelEnum = "web" + DataDogModelEnumDb DataDogModelEnum = "db" + DataDogModelEnumCache DataDogModelEnum = "cache" + DataDogModelEnumCustom DataDogModelEnum = "custom" +) + +type DatadogReq [][]DataDogModel + +func (d DatadogReq) Serialize() ([]byte, error) { + return json.Marshal(d) +} + +func NewDatadogSender(opts LogSenderOpts) ISender { + rnd := rand.New(rand.NewSource(time.Now().UnixNano())) + path := "/v0.3/traces" + if os.Getenv("DPATH") != "" { + path = os.Getenv("DPATH") + } + l := &GenericSender{ + LogSenderOpts: opts, + rnd: rnd, + timeout: time.Second, + path: path, + } + pickCont := func() string { + return l.pickRandom(opts.Containers) + } + l.generate = func() IRequest { + + var ( + spansPerTrace int = 3 + traces int = 0 + remainder int = 0 + ) + + // if the total is less than the spans per trace, we only do those. + if opts.LinesPS < spansPerTrace { + remainder = opts.LinesPS + } else { + traces = opts.LinesPS / spansPerTrace + remainder = opts.LinesPS % spansPerTrace + } + + // make sure we always have an array with the correct amount of slots. + arrayLength := traces + if remainder != 0 { + arrayLength++ + } + + // initiate the main container + req := make(DatadogReq, arrayLength) + // add the traces that fit + for i := 0; i < traces; i++ { + req[i] = trace(i, spansPerTrace, rnd, pickCont) + } + + // add a last trace with the remaining spans. + if remainder != 0 { + req[traces] = trace(traces, remainder, rnd, pickCont) + } + + return req + } + return l +} + +func trace(i int, spans int, rnd *rand.Rand, pickCont func() string) []DataDogModel { + var ( + traceID = rnd.Int63n(10000000) + tr = make([]DataDogModel, spans) + ) + + for j := 0; j < spans; j++ { + cont := pickCont() + now := time.Now() + + tr[j] = DataDogModel{ + Duration: time.Duration(1 * (i + 1)).Nanoseconds(), + Error: 0, + Meta: map[string]string{ + "sender": "longtest", + "randomContainer": cont, + }, + Metrics: map[string]float64{ + REQ_BYTES: rnd.Float64(), + }, + Name: fmt.Sprintf("longtest-%d-%d", i+1, j+1), + ParentID: 0, + Resource: "/", + Service: "longtest", + SpanID: int64((i + 1) * (j + 1)), + Start: now.UnixNano(), + TraceID: traceID, + Type: DataDogModelEnumWeb, + } + } + + return tr +} diff --git a/test/qryn_test_env/longtest/generate.go b/test/qryn_test_env/longtest/generate.go new file mode 100644 index 00000000..c4698e51 --- /dev/null +++ b/test/qryn_test_env/longtest/generate.go @@ -0,0 +1,87 @@ +package main + +import ( + "bytes" + "fmt" + "github.com/akvlad/flog/generator" + "github.com/scaleway/scaleway-sdk-go/namegenerator" + "strconv" + "sync" + "time" +) + +type bufCloser struct { + *bytes.Buffer +} + +func (*bufCloser) Close() error { + return nil +} + +func generateLogs() []string { + var res []string + writers := make([]bytes.Buffer, 8) + wg := sync.WaitGroup{} + for i, format := range []string{"apache_common", "apache_combined", "apache_error", "rfc3164", "rfc5424", + "common_log", "json"} { + wg.Add(1) + go func(format string, i int) { + defer wg.Done() + generator.Generate(&generator.Option{ + Format: format, + Output: "", + Type: "stdout", + Number: 0, + Bytes: 10 * 1024 * 1024, + Sleep: 0, + Delay: 0, + SplitBy: 0, + Overwrite: false, + Forever: false, + Writer: &bufCloser{&writers[i]}, + }) + }(format, i) + } + generateFaro(&writers[7]) + wg.Wait() + for _, w := range writers { + lines := bytes.Split(w.Bytes(), []byte("\n")) + for _, l := range lines { + res = append(res, string(l)) + } + } + return res +} + +func generateFaro(buf *bytes.Buffer) { + _buf := bytes.Buffer{} + + generator.Generate(&generator.Option{ + Format: "common_log", + Output: "", + Type: "stdout", + Number: 0, + Bytes: 10 * 1024 * 1024, + Sleep: 0, + Delay: 0, + SplitBy: 0, + Overwrite: false, + Forever: false, + Writer: &bufCloser{&_buf}, + }) + + lines := bytes.Split(_buf.Bytes(), []byte("\n")) + for _, l := range lines { + buf.WriteString(fmt.Sprintf( + "timestamp=\"%s\" kind=log message=%s level=log sdk_name=@grafana/faro-core sdk_version=1.0.0 sdk_integrations=@grafana/faro-web-sdk:instrumentation-errors:1.0.0,@grafana/faro-web-sdk:instrumentation-web-vitals:1.0.0,@grafana/faro-web-sdk:instrumentation-session:1.0.32,@grafana/faro-web-sdk:instrumentation-view:1.0.32,@grafana/faro-web-sdk:instrumentation-console:1.0.0,@grafana/faro-web-tracing:1.0.0,@grafana/faro-react:1.0.0 app_name=@grafana/faro-demo-client app_version=1.0.0 app_environment=production session_id=fDKz3Gccz6 page_url=http://localhost:5173/ browser_name=Firefox browser_version=122.0 browser_os=\"Ubuntu unknown\" browser_mobile=false view_name=default\n", + time.Now().UTC().Format(time.RFC3339Nano), strconv.Quote(string(l)))) + } +} + +func generateNames(n int) []string { + names := make([]string, n) + for i := range names { + names[i] = namegenerator.GetRandomName() + } + return names +} diff --git a/test/qryn_test_env/longtest/genericSender.go b/test/qryn_test_env/longtest/genericSender.go new file mode 100644 index 00000000..3f9d98f8 --- /dev/null +++ b/test/qryn_test_env/longtest/genericSender.go @@ -0,0 +1,191 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "math/rand" + "net/http" + "sync" + "time" +) + +const ( + REQ_OK = "req_ok" + REQ_ERR = "req_err" + REQ_FAIL = "req_fail" + REQ_BYTES = "req_bytes" + REQ_TIME_MS = "req_time_ms" +) + +type IRequest interface { + Serialize() ([]byte, error) +} + +type LogStream struct { + Stream map[string]string `json:"stream"` + Values [][]interface{} `json:"values"` +} + +type LogRequest struct { + Streams []*LogStream `json:"streams"` +} + +func (l *LogRequest) Serialize() ([]byte, error) { + return json.Marshal(l) +} + +type ISender interface { + Run() + Stop() +} + +type LogSenderOpts struct { + Containers []string + Lines []string + LinesPS int + URL string + Headers map[string]string + ID string +} + +type GenericSender struct { + LogSenderOpts + mtx sync.Mutex + rnd *rand.Rand + ticker *time.Ticker + timeout time.Duration + path string + generate func() IRequest + numOfSends int +} + +func (l *GenericSender) Run() { + if l.ticker != nil { + return + } + l.ticker = time.NewTicker(l.timeout) + go func() { + for range l.ticker.C { + if l.generate == nil { + fmt.Println("ERROR! No generate function") + } + numOfSends := l.numOfSends + if numOfSends == 0 { + numOfSends = 1 + } + for i := 0; i < numOfSends; i++ { + err := l.send(l.generate()) + if err != nil { + fmt.Printf("%v\n", err) + continue + } + } + } + }() +} + +func (l *GenericSender) Stop() { + if l.ticker != nil { + l.ticker.Stop() + l.ticker = nil + } +} + +func (l *GenericSender) random(n int) int { + l.mtx.Lock() + defer l.mtx.Unlock() + return l.rnd.Intn(n) +} + +func (l *GenericSender) pickRandom(array []string) string { + if len(array) == 0 { + return "" + } + l.mtx.Lock() + defer l.mtx.Unlock() + return pickRandom[string](array, l.rnd) +} + +func (l *GenericSender) send(request IRequest) error { + retries := 0 + body, err := request.Serialize() + if err != nil { + return err + } + send := func(url string, count bool) { + if url == "" { + url = l.URL + l.path + } + var statsInc = func(name string) { + if count { + stats.Inc(name) + } + } + var statsObserve = func(name string, value int64) { + if count { + stats.Observe(name, value) + } + } + for { + start := time.Now() + req, err := http.NewRequest("POST", url, bytes.NewReader(body)) + if err != nil { + fmt.Printf("Request error: %v\n", err) + <-time.After(time.Second) + if retries < 10 { + statsInc(REQ_ERR) + retries++ + continue + } else { + statsInc(REQ_FAIL) + return + } + } + req.Header.Set("Content-Type", "application/json") + for k, v := range l.Headers { + req.Header.Set(k, v) + } + client := http.Client{ + Timeout: 30 * time.Second, + } + resp, err := client.Do(req) + if err != nil { + fmt.Printf("Request error: %v\n", err) + <-time.After(time.Second) + if retries < 10 { + statsInc(REQ_ERR) + retries++ + continue + } else { + statsInc(REQ_FAIL) + return + } + } + if resp.StatusCode/100 != 2 { + b := bytes.Buffer{} + io.Copy(&b, resp.Body) + fmt.Printf("Request error: [%d]: %s\n", resp.StatusCode, string(b.Bytes())) + <-time.After(time.Second) + if retries < 10 { + statsInc(REQ_ERR) + retries++ + continue + } else { + stats.Inc(REQ_FAIL) + return + } + } + statsInc(REQ_OK) + statsObserve(REQ_BYTES, int64(len(body))) + statsObserve(REQ_TIME_MS, time.Now().Sub(start).Milliseconds()) + return + } + } + go func() { + send("", true) + }() + + return nil +} diff --git a/test/qryn_test_env/longtest/go.mod b/test/qryn_test_env/longtest/go.mod new file mode 100644 index 00000000..d2412dfc --- /dev/null +++ b/test/qryn_test_env/longtest/go.mod @@ -0,0 +1,50 @@ +module longtest + +go 1.18 + +replace k8s.io/client-go v12.0.0+incompatible => k8s.io/client-go v0.22.1 + +require ( + github.com/akvlad/flog v0.4.4-0.20220607095327-09ef70e4099e + github.com/apache/arrow/go/v13 v13.0.0-20230607163259-9be7074f85d6 + github.com/golang/protobuf v1.5.2 + github.com/golang/snappy v0.0.4 + github.com/influxdata/influxdb-client-go/v2 v2.12.2 + github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf + github.com/openzipkin/zipkin-go v0.4.1 + github.com/prometheus/prometheus v0.42.0 + github.com/scaleway/scaleway-sdk-go v1.0.0-beta.13 + go.opentelemetry.io/proto/otlp v0.19.0 + google.golang.org/protobuf v1.33.0 +) + +require ( + github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/apache/thrift v0.16.0 // indirect + github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect + github.com/brianvoe/gofakeit v3.18.0+incompatible // indirect + github.com/deepmap/oapi-codegen v1.12.4 // indirect + github.com/goccy/go-json v0.10.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/google/flatbuffers v23.1.21+incompatible // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/klauspost/asmfmt v1.3.2 // indirect + github.com/klauspost/compress v1.15.15 // indirect + github.com/klauspost/cpuid/v2 v2.2.3 // indirect + github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect + github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect + github.com/pierrec/lz4/v4 v4.1.17 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/zeebo/xxh3 v1.0.2 // indirect + golang.org/x/exp v0.0.0-20230206171751-46f607a40771 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect + golang.org/x/tools v0.6.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc // indirect + google.golang.org/grpc v1.53.0 // indirect +) diff --git a/test/qryn_test_env/longtest/go.sum b/test/qryn_test_env/longtest/go.sum new file mode 100644 index 00000000..c80b8df6 --- /dev/null +++ b/test/qryn_test_env/longtest/go.sum @@ -0,0 +1,512 @@ +bou.ke/monkey v1.0.1 h1:zEMLInw9xvNakzUUPjfS4Ds6jYPqCFx3m7bRmG5NH2U= +bou.ke/monkey v1.0.1/go.mod h1:FgHuK96Rv2Nlf+0u1OOVDpCMdsWyOFmeeketDHE7LIg= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= +github.com/akvlad/flog v0.4.4-0.20220607095327-09ef70e4099e h1:3AbWEyBxLZuELxe9FVBLrj97iqiST4FqXCNx0Afw8qA= +github.com/akvlad/flog v0.4.4-0.20220607095327-09ef70e4099e/go.mod h1:0mcqdrwr9BJQeJ4pPjTh4ENgp0+lJfybTYMjJGV2wM4= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/v13 v13.0.0-20230607163259-9be7074f85d6 h1:vaX/XjM1MG7TMtkkESfs1B1/vIfvxSdFVwg/yM9rCho= +github.com/apache/arrow/go/v13 v13.0.0-20230607163259-9be7074f85d6/go.mod h1:W69eByFNO0ZR30q1/7Sr9d83zcVZmF2MiP3fFYAWJOc= +github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= +github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= +github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= +github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= +github.com/brianvoe/gofakeit v3.11.5+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc= +github.com/brianvoe/gofakeit v3.18.0+incompatible h1:wDOmHc9DLG4nRjUVVaxA+CEglKOW72Y5+4WNxUIkjM8= +github.com/brianvoe/gofakeit v3.18.0+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deepmap/oapi-codegen v1.12.4 h1:pPmn6qI9MuOtCz82WY2Xaw46EQjgvxednXXrP7g5Q2s= +github.com/deepmap/oapi-codegen v1.12.4/go.mod h1:3lgHGMu6myQ2vqbbTXH2H1o4eXFTGnFiDaOaKKl5yas= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= +github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v23.1.21+incompatible h1:bUqzx/MXCDxuS0hRJL2EfjyZL3uQrPbMocUa8zGqsTA= +github.com/google/flatbuffers v23.1.21+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/influxdata/influxdb-client-go/v2 v2.12.2 h1:uYABKdrEKlYm+++qfKdbgaHKBPmoWR5wpbmj6MBB/2g= +github.com/influxdata/influxdb-client-go/v2 v2.12.2/go.mod h1:YteV91FiQxRdccyJ2cHvj2f/5sq4y4Njqu1fQzsQCOU= +github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf h1:7JTmneyiNEwVBOHSjoMxiWAqB992atOeepeFYegn5RU= +github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= +github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mingrammer/cfmt v1.0.0/go.mod h1:D2ZhJie9PURSfLSb+DB3l+aE32t+K7B596FI6rdm/pI= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A= +github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM= +github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= +github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/prometheus v0.42.0 h1:G769v8covTkOiNckXFIwLx01XE04OE6Fr0JPA0oR2nI= +github.com/prometheus/prometheus v0.42.0/go.mod h1:Pfqb/MLnnR2KK+0vchiaH39jXxvLMBk+3lnIGP4N7Vk= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.13 h1:n5J2K6g/kl/iT6mODjCoSoRBGQVmIG3aMtYbofi9kxc= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.13/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/pflag v1.0.0/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= +github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20230206171751-46f607a40771 h1:xP7rWLUr1e1n2xkK5YB4LI0hPEy3LJC6Wk+D4pGlOJg= +golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc h1:ijGwO+0vL2hJt5gaygqP2j6PfflOBrRot0IczKbmtio= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/test/qryn_test_env/longtest/influxSender.go b/test/qryn_test_env/longtest/influxSender.go new file mode 100644 index 00000000..3693e9fd --- /dev/null +++ b/test/qryn_test_env/longtest/influxSender.go @@ -0,0 +1,51 @@ +package main + +import ( + "bytes" + influx "github.com/influxdata/influxdb-client-go/v2" + "github.com/influxdata/influxdb-client-go/v2/api/write" + lp "github.com/influxdata/line-protocol" + "math/rand" + "time" +) + +type InfluxReq []*write.Point + +func (i InfluxReq) Serialize() ([]byte, error) { + var buffer bytes.Buffer + e := lp.NewEncoder(&buffer) + e.SetFieldTypeSupport(lp.UintSupport) + e.FailOnFieldErr(true) + e.SetPrecision(time.Nanosecond) + for _, item := range i { + _, err := e.Encode(item) + if err != nil { + return nil, err + } + } + return buffer.Bytes(), nil +} + +func NewInfluxSender(opts LogSenderOpts) ISender { + l := &GenericSender{ + LogSenderOpts: opts, + rnd: rand.New(rand.NewSource(time.Now().UnixNano())), + timeout: time.Second, + path: "/influx/api/v2/write", + } + l.generate = func() IRequest { + points := make(InfluxReq, opts.LinesPS) + for i := range points { + points[i] = influx.NewPoint("syslog", map[string]string{ + "container": l.pickRandom(l.Containers), + "level": l.pickRandom([]string{"info", "debug", "error"}), + "sender": "logtest", + "endpoint": "influx", + }, map[string]interface{}{ + "message": l.pickRandom(opts.Lines), + }, time.Now()) + } + return points + } + return l +} diff --git a/test/qryn_test_env/longtest/jsonConsistencyChecker.go b/test/qryn_test_env/longtest/jsonConsistencyChecker.go new file mode 100644 index 00000000..437f17a3 --- /dev/null +++ b/test/qryn_test_env/longtest/jsonConsistencyChecker.go @@ -0,0 +1,45 @@ +package main + +import ( + "encoding/json" + "fmt" + "math/rand" + "sync" + "time" +) + +func NewJSONConsistencyChecker(opts LogSenderOpts) ISender { + res := &GenericSender{ + LogSenderOpts: opts, + mtx: sync.Mutex{}, + rnd: rand.New(rand.NewSource(time.Now().UnixNano())), + timeout: time.Second, + path: "/loki/api/v1/push", + numOfSends: 10, + } + res.generate = func() IRequest { + logLen := 0 + req := &LogRequest{} + for logLen < 10 { + streamLen := 2 + stream := &LogStream{ + Stream: map[string]string{ + "container": res.pickRandom(res.Containers), + "level": res.pickRandom([]string{"info", "debug", "error"}), + "sender": "consistency-checker", + }, + Values: make([][]interface{}, streamLen), + } + for i := 0; i < streamLen; i++ { + t := fmt.Sprintf("%d", time.Now().UnixNano()) + line, _ := json.Marshal(stream.Stream) + line = append(line, []byte(", t="+t)...) + stream.Values[i] = []interface{}{t, string(line)} + logLen++ + } + req.Streams = append(req.Streams, stream) + } + return req + } + return res +} diff --git a/test/qryn_test_env/longtest/logReader.go b/test/qryn_test_env/longtest/logReader.go new file mode 100644 index 00000000..81dda4c6 --- /dev/null +++ b/test/qryn_test_env/longtest/logReader.go @@ -0,0 +1,103 @@ +package main + +import ( + "fmt" + "math/rand" + "sync" + "time" +) + +const ( + LOG_READ_MODE_RAW = 1 + LOG_READ_MODE_LRA = 2 + LOG_READ_MODE_AGG_OP = 3 + LOG_READ_MODE_UNWRAP = 4 + LOG_READ_MODE_UNWRAP_AGG_OP = 5 +) + +type LogReader struct { + Url string + mtx sync.Mutex + rand *rand.Rand +} + +func NewLogReader(url string) *LogReader { + return &LogReader{ + Url: url, + rand: rand.New(rand.NewSource(time.Now().UnixNano())), + } +} + +func (l *LogReader) ReadLogs(mode int) { + containers := l.getValues("container") + switch mode { + case LOG_READ_MODE_RAW: + l.rawRequest(containers) + break + case LOG_READ_MODE_LRA: + l.logRangeAggregationRequest(containers) + break + case LOG_READ_MODE_AGG_OP: + l.aggregationOperatorRequest(containers) + break + case LOG_READ_MODE_UNWRAP: + l.unwrapRequest(containers) + break + case LOG_READ_MODE_UNWRAP_AGG_OP: + l.unwrapAggregationOperatorRequest(containers) + break + } +} + +func (l *LogReader) rawRequest(containers []string) { + l.mtx.Lock() + cnt := pickRandom(containers, l.rand) + to := time.Now().UnixNano() - l.rand.Int63n(600000000000) + from := to - l.rand.Int63n(3600000000000) + l.mtx.Unlock() + l.request(fmt.Sprintf("{sender=\"logtest\", container=\"%s\"}", cnt), from, to) +} + +func (l *LogReader) logRangeAggregationRequest(containers []string) { + l.mtx.Lock() + cnt := pickRandom(containers, l.rand) + to := time.Now().UnixNano() - l.rand.Int63n(600000000000) + from := to - l.rand.Int63n(3600000000000) + l.mtx.Unlock() + l.request(fmt.Sprintf("rate({sender=\"logtest\", container=\"%s\"}[1m])", cnt), from, to) +} + +func (l *LogReader) aggregationOperatorRequest(containers []string) { + l.mtx.Lock() + cnt := pickRandom(containers, l.rand) + to := time.Now().UnixNano() - l.rand.Int63n(600000000000) + from := to - l.rand.Int63n(3600000000000) + l.mtx.Unlock() + l.request(fmt.Sprintf("sum by (level) (rate({sender=\"logtest\", container=\"%s\"}[1m]))", cnt), from, to) +} + +func (l *LogReader) unwrapRequest(containers []string) { + l.mtx.Lock() + cnt := pickRandom(containers, l.rand) + to := time.Now().UnixNano() - l.rand.Int63n(600000000000) + from := to - l.rand.Int63n(3600000000000) + l.mtx.Unlock() + l.request(fmt.Sprintf("rate({sender=\"logtest\", container=\"%s\"} | unwrap_value [1m])", cnt), from, to) +} + +func (l *LogReader) unwrapAggregationOperatorRequest(containers []string) { + l.mtx.Lock() + cnt := pickRandom(containers, l.rand) + to := time.Now().UnixNano() - l.rand.Int63n(600000000000) + from := to - l.rand.Int63n(3600000000000) + l.mtx.Unlock() + l.request(fmt.Sprintf("sum by (sender) (rate({sender=\"logtest\", container=\"%s\"} | unwrap_value [1m]))", cnt), from, to) +} + +func (l *LogReader) request(req string, from int64, to int64) { + +} + +func (l *LogReader) getValues(name string) []string { + return nil +} diff --git a/test/qryn_test_env/longtest/logSender.go b/test/qryn_test_env/longtest/logSender.go new file mode 100644 index 00000000..97635fbe --- /dev/null +++ b/test/qryn_test_env/longtest/logSender.go @@ -0,0 +1,54 @@ +package main + +import ( + "fmt" + "math/rand" + "sync" + "time" +) + +type LogSender struct { + LogSenderOpts + mtx sync.Mutex + rnd *rand.Rand + ticker *time.Ticker + path string +} + +func NewLogSender(opts LogSenderOpts) ISender { + var l *GenericSender + l = &GenericSender{ + LogSenderOpts: opts, + mtx: sync.Mutex{}, + rnd: rand.New(rand.NewSource(time.Now().UnixNano())), + timeout: time.Second, + path: "/loki/api/v1/push", + generate: func() IRequest { + logLen := 0 + req := &LogRequest{} + for logLen < l.LinesPS { + streamLen := 20 + stream := &LogStream{ + Stream: map[string]string{ + "orgid": opts.Headers["X-Scope-OrgID"], + "container": l.pickRandom(l.Containers), + "level": l.pickRandom([]string{"info", "debug", "error"}), + "sender": "logtest", + "__name__": "logs", + "__ttl_days__": "25", + }, + Values: make([][]interface{}, streamLen), + } + for i := 0; i < streamLen; i++ { + //line := fmt.Sprintf("opaqueid=%d mos=%f", l.random(1000), float64(l.random(1000)/250)) + line := l.pickRandom(l.Lines) + stream.Values[i] = []interface{}{fmt.Sprintf("%d", time.Now().UnixNano()), line} + logLen++ + } + req.Streams = append(req.Streams, stream) + } + return req + }, + } + return l +} diff --git a/test/qryn_test_env/longtest/longtest.go b/test/qryn_test_env/longtest/longtest.go new file mode 100644 index 00000000..1868c5f4 --- /dev/null +++ b/test/qryn_test_env/longtest/longtest.go @@ -0,0 +1,188 @@ +package main + +import ( + "fmt" + "os" + "strconv" + "strings" + "time" +) + +func main() { + kind := os.Getenv("KIND") + if kind == "" { + kind = "WRITE" + } + switch kind { + case "WRITE": + writeTest() + break + case "READ": + readTest() + break + } +} + +func writeTest() { + fmt.Println("GENERATING") + logs := generateLogs() + //names := generateNames(1500) + fmt.Println("SENDING") + names := generateNames(3300) + power := 1 + if os.Getenv("POWER") != "" { + var err error + power, err = strconv.Atoi(os.Getenv("POWER")) + if err != nil { + panic(err) + } + } + headers := map[string]string{} + if strings.Contains(os.Getenv("MODE"), "L") { + fmt.Println("Run logs") + sender := NewLogSender(LogSenderOpts{ + ID: "logs", + Containers: names, + Lines: logs, + LinesPS: 120 * power, + URL: os.Getenv("URL"), + Headers: headers, + }) + sender.Run() + } + /*if strings.Contains(os.Getenv("MODE"), "P") { + fmt.Println("Run logs PB") + _headers := make(map[string]string, 20) + for k, v := range headers { + _headers[k] = v + } + _headers["Content-Type"] = "application/x-protobuf" + sender := NewPBSender(LogSenderOpts{ + ID: "logs", + Containers: names, + Lines: logs, + LinesPS: 50000, + URL: os.Getenv("URL"), + Headers: _headers, + }) + sender.Run() + }*/ + if strings.Contains(os.Getenv("MODE"), "M") { + fmt.Println("Run metrics") + metrics := NewMetricSender(LogSenderOpts{ + ID: "metrics", + Containers: names, + Lines: logs, + LinesPS: 30 * power, + URL: os.Getenv("URL"), + Headers: headers, + }) + metrics.Run() + } + if strings.Contains(os.Getenv("MODE"), "Z") { + fmt.Println("Run zipkin") + zipkins := NewZipkinSender(LogSenderOpts{ + ID: "traces", + Containers: names, + Lines: logs, + LinesPS: 40 * power, + URL: os.Getenv("URL"), + Headers: headers, + }) + zipkins.Run() + } + if strings.Contains(os.Getenv("MODE"), "O") { + fmt.Println("Run OTLP") + zipkins := NewOTLPSender(LogSenderOpts{ + ID: "traces", + Containers: names, + Lines: logs, + LinesPS: 40 * power, + URL: os.Getenv("URL"), + Headers: headers, + }) + zipkins.Run() + } + if strings.Contains(os.Getenv("MODE"), "G") { + fmt.Println("Run zipkin") + zipkins := NewSGSender(LogSenderOpts{ + ID: "traces", + Containers: names, + Lines: logs, + LinesPS: 10 * power, + URL: os.Getenv("URL"), + Headers: headers, + }) + zipkins.Run() + } + if strings.Contains(os.Getenv("MODE"), "D") { + fmt.Println("Run datadog") + datadogs := NewDatadogSender(LogSenderOpts{ + ID: "traces", + Containers: names, + Lines: logs, + LinesPS: 120 * power, + URL: os.Getenv("URL"), + Headers: headers, + }) + datadogs.Run() + } + if strings.Contains(os.Getenv("MODE"), "I") { + fmt.Println("Run influx") + influx := NewInfluxSender(LogSenderOpts{ + ID: "influx", + Containers: names, + Lines: logs, + LinesPS: 100 * power, + URL: os.Getenv("URL"), + Headers: headers, + }) + influx.Run() + } + if strings.Contains(os.Getenv("MODE"), "C") { + fmt.Println("Run consistency checker") + cons := NewJSONConsistencyChecker(LogSenderOpts{ + ID: "consistency-1", + Containers: names, + Lines: logs, + LinesPS: 300 * power, + URL: os.Getenv("URL"), + Headers: headers, + }) + cons.Run() + } + if strings.Contains(os.Getenv("MODE"), "T") { + fmt.Println("Run time sender") + pqt := NewTimeSender(LogSenderOpts{ + ID: "longtest-TIME", + Containers: names, + Lines: logs, + LinesPS: 10, + URL: os.Getenv("URL"), + Headers: headers, + }) + pqt.Run() + } + t := time.NewTicker(time.Second) + go func() { + for range t.C { + s := stats.Collect() + fmt.Printf("Ok requests: %d, Errors: %d, Failed: %d\n", s[REQ_OK], s[REQ_ERR], s[REQ_FAIL]) + fmt.Printf("Ok Requests time: min: %d, max: %d, avg: %f\n", + s[REQ_TIME_MS+"_min"], + s[REQ_TIME_MS+"_max"], + float64(s[REQ_TIME_MS+"_sum"])/float64(s[REQ_TIME_MS+"_count"])) + fmt.Printf("Ok Requests MB sent: %f, (%fMB/s)\n", + float64(s[REQ_BYTES+"_sum"])/1024/1024, + float64(s[REQ_BYTES+"_sum"])/1024/1024/5, + ) + } + }() + for { + time.Sleep(time.Second) + } +} + +func readTest() { + +} diff --git a/test/qryn_test_env/longtest/metricReader.go b/test/qryn_test_env/longtest/metricReader.go new file mode 100644 index 00000000..06ab7d0f --- /dev/null +++ b/test/qryn_test_env/longtest/metricReader.go @@ -0,0 +1 @@ +package main diff --git a/test/qryn_test_env/longtest/metricSender.go b/test/qryn_test_env/longtest/metricSender.go new file mode 100644 index 00000000..b52a3708 --- /dev/null +++ b/test/qryn_test_env/longtest/metricSender.go @@ -0,0 +1,94 @@ +package main + +import ( + "github.com/golang/protobuf/proto" + "github.com/golang/snappy" + "github.com/prometheus/prometheus/prompb" + "hash/crc32" + "math" + "math/rand" + "sync" + "time" +) + +type PromReq []prompb.TimeSeries + +func (p PromReq) Serialize() ([]byte, error) { + bytes, err := proto.Marshal(&prompb.WriteRequest{Timeseries: p}) + if err != nil { + return nil, err + } + enc := snappy.Encode(nil, bytes) + return enc, nil +} + +func NewMetricSender(opts LogSenderOpts) ISender { + var l *GenericSender + hdrs := opts.Headers + opts.Headers = map[string]string{} + for k, v := range hdrs { + opts.Headers[k] = v + } + opts.Headers["Content-Type"] = "application/x-protobuf" + opts.Headers["Content-Encoding"] = "snappy" + l = &GenericSender{ + LogSenderOpts: opts, + mtx: sync.Mutex{}, + rnd: rand.New(rand.NewSource(time.Now().UnixNano())), + timeout: time.Second * 15, + path: "/api/v1/prom/remote/write", + generate: func() IRequest { + if opts.LinesPS/3 < len(l.Containers) { + l.Containers = l.Containers[:opts.LinesPS/3] + } + req := make(PromReq, len(l.Containers)*3) + for i, container := range l.Containers { + base := int(crc32.ChecksumIEEE([]byte(container))) + req[i*3] = prompb.TimeSeries{ + Labels: []prompb.Label{ + {Name: "__name__", Value: "cpu_usage"}, + {Name: "container", Value: container}, + {Name: "orgid", Value: opts.Headers["X-Scope-OrgID"]}, + {Name: "sender", Value: "logmetrics"}, + }, + Samples: []prompb.Sample{ + { + Timestamp: time.Now().UnixMilli(), + Value: math.Max(float64(base%100+(l.random(20)-10)), 0), + }, + }, + } + req[i*3+1] = prompb.TimeSeries{ + Labels: []prompb.Label{ + {Name: "__name__", Value: "ram_usage"}, + {Name: "container", Value: container}, + {Name: "orgid", Value: opts.Headers["X-Scope-OrgID"]}, + {Name: "sender", Value: "logmetrics"}, + }, + Samples: []prompb.Sample{ + { + Timestamp: time.Now().UnixMilli(), + Value: math.Max(float64(base%1000+(l.random(200)-100)), 0), + }, + }, + } + req[i*3+2] = prompb.TimeSeries{ + Labels: []prompb.Label{ + {Name: "__name__", Value: "network_usage"}, + {Name: "container", Value: container}, + {Name: "orgid", Value: opts.Headers["X-Scope-OrgID"]}, + {Name: "sender", Value: "logmetrics"}, + }, + Samples: []prompb.Sample{ + { + Timestamp: time.Now().UnixMilli(), + Value: math.Max(float64(base%1000000+(l.random(2000)-1000)), 0), + }, + }, + } + } + return req + }, + } + return l +} diff --git a/test/qryn_test_env/longtest/otlpSender.go b/test/qryn_test_env/longtest/otlpSender.go new file mode 100644 index 00000000..aeb22383 --- /dev/null +++ b/test/qryn_test_env/longtest/otlpSender.go @@ -0,0 +1,132 @@ +package main + +import ( + "fmt" + cv1 "go.opentelemetry.io/proto/otlp/common/v1" + rv1 "go.opentelemetry.io/proto/otlp/resource/v1" + v1 "go.opentelemetry.io/proto/otlp/trace/v1" + "google.golang.org/protobuf/proto" + "math/rand" + "os" + "time" + "unsafe" +) + +type OTLPReq v1.TracesData + +func (z *OTLPReq) Serialize() ([]byte, error) { + return proto.Marshal((*v1.TracesData)(z)) +} + +func NewOTLPSender(opts LogSenderOpts) ISender { + rnd := rand.New(rand.NewSource(time.Now().UnixNano())) + path := "/v1/traces" + if os.Getenv("ZPATH") != "" { + path = os.Getenv("ZPATH") + } + l := &GenericSender{ + LogSenderOpts: opts, + rnd: rnd, + timeout: time.Second, + path: path, + } + pickCont := func() string { + return l.pickRandom(opts.Containers) + } + /*pickLine := func() string { + return l.pickRandom(opts.Lines) + }*/ + l.generate = func() IRequest { + req := &OTLPReq{ + ResourceSpans: make([]*v1.ResourceSpans, opts.LinesPS/10), + } + for i := range req.ResourceSpans { + uintTraceId := []uint64{uint64(l.random(0xFFFFFFFF)), uint64(i)} + bTraceId := make([]byte, 16) + copy(bTraceId, unsafe.Slice((*byte)(unsafe.Pointer(&uintTraceId[0])), 16)) + uintSpanId := uint64(l.random(0xFFFFFFFF)) + bSpanId := make([]byte, 8) + copy(bSpanId, unsafe.Slice((*byte)(unsafe.Pointer(&uintSpanId)), 8)) + req.ResourceSpans[i] = &v1.ResourceSpans{ + Resource: &rv1.Resource{ + Attributes: []*cv1.KeyValue{ + { + Key: "service.name", + Value: &cv1.AnyValue{ + Value: &cv1.AnyValue_StringValue{ + StringValue: "longtest-service", + }, + }, + }, + { + Key: "sender", + Value: &cv1.AnyValue{ + Value: &cv1.AnyValue_StringValue{ + StringValue: "longtest", + }, + }, + }, + { + Key: "type", + Value: &cv1.AnyValue{ + Value: &cv1.AnyValue_StringValue{ + StringValue: "otlp", + }, + }, + }, + }, + DroppedAttributesCount: 0, + }, + ScopeSpans: []*v1.ScopeSpans{ + { + Spans: make([]*v1.Span, 10), + }, + }, + } + for j := range req.ResourceSpans[i].ScopeSpans[0].Spans { + kind := v1.Span_SPAN_KIND_CLIENT + if j%2 == 0 { + kind = v1.Span_SPAN_KIND_SERVER + } + req.ResourceSpans[i].ScopeSpans[0].Spans[j] = &v1.Span{ + TraceId: bTraceId, + SpanId: bSpanId, + ParentSpanId: nil, + Name: "longtest", + Kind: kind, + StartTimeUnixNano: uint64(time.Now(). + Add(time.Millisecond * time.Duration(-1*(l.random(500)))). + UnixNano()), + EndTimeUnixNano: uint64(time.Now().UnixNano()), + Attributes: []*cv1.KeyValue{ + { + Key: "container", + Value: &cv1.AnyValue{ + Value: &cv1.AnyValue_StringValue{ + StringValue: pickCont(), + }, + }, + }, + { + Key: "randomFloat", + Value: &cv1.AnyValue{ + Value: &cv1.AnyValue_StringValue{ + StringValue: fmt.Sprintf("%f", 50+(rand.Float64()*100-50)), + }, + }, + }, + }, + DroppedAttributesCount: 0, + Events: nil, + DroppedEventsCount: 0, + Links: nil, + DroppedLinksCount: 0, + Status: nil, + } + } + + } + return req + } + return l +} diff --git a/test/qryn_test_env/longtest/pqtSender.go b/test/qryn_test_env/longtest/pqtSender.go new file mode 100644 index 00000000..49b52fc4 --- /dev/null +++ b/test/qryn_test_env/longtest/pqtSender.go @@ -0,0 +1,59 @@ +package main + +import ( + "bytes" + "github.com/apache/arrow/go/v13/arrow" + _ "github.com/apache/arrow/go/v13/arrow" + "github.com/apache/arrow/go/v13/arrow/array" + "github.com/apache/arrow/go/v13/arrow/memory" + "github.com/apache/arrow/go/v13/parquet" + "github.com/apache/arrow/go/v13/parquet/pqarrow" + _ "github.com/apache/arrow/go/v13/parquet/pqarrow" + "math/rand" + "time" +) + +type PqtReq struct { + arrow.Record +} + +func (p *PqtReq) Serialize() ([]byte, error) { + defer p.Release() + buf := bytes.NewBuffer(make([]byte, 0, 1024)) + w, err := pqarrow.NewFileWriter(p.Schema(), buf, parquet.NewWriterProperties(), pqarrow.NewArrowWriterProperties()) + if err != nil { + return nil, err + } + err = w.Write(p) + if err != nil { + return nil, err + } + err = w.Close() + return buf.Bytes(), err +} + +func NewPqtSender(opts LogSenderOpts) ISender { + bld := array.NewRecordBuilder(memory.DefaultAllocator, arrow.NewSchema([]arrow.Field{ + {Name: "timestamp_ns", Type: arrow.PrimitiveTypes.Int64}, + {Name: "opaque_id", Type: arrow.BinaryTypes.String}, + {Name: "mos", Type: arrow.PrimitiveTypes.Float64}, + }, nil)) + + l := &GenericSender{ + LogSenderOpts: opts, + rnd: rand.New(rand.NewSource(time.Now().UnixNano())), + timeout: time.Second, + path: "/api/dedicated", + } + l.generate = func() IRequest { + for i := 0; i < opts.LinesPS; i++ { + bld.Field(0).(*array.Int64Builder).Append(time.Now().UnixNano()) + bld.Field(1).(*array.StringBuilder).Append(l.pickRandom(l.Containers)) + bld.Field(2).(*array.Float64Builder).Append(l.rnd.Float64() * 100) + } + return &PqtReq{ + Record: bld.NewRecord(), + } + } + return l +} diff --git a/test/qryn_test_env/longtest/sendStats.go b/test/qryn_test_env/longtest/sendStats.go new file mode 100644 index 00000000..b1aa4a06 --- /dev/null +++ b/test/qryn_test_env/longtest/sendStats.go @@ -0,0 +1,99 @@ +package main + +import ( + "math" + "strings" + "sync" + "time" +) + +type Stats struct { + stats []map[string]int64 + mtx sync.Mutex +} + +var stats = func() *Stats { + res := &Stats{ + stats: make([]map[string]int64, 1), + } + res.stats[0] = make(map[string]int64, 10) + t := time.NewTicker(time.Second) + go func() { + for range t.C { + res.mtx.Lock() + res.stats = append(res.stats, make(map[string]int64, 10)) + if len(res.stats) > 5 { + res.stats = res.stats[1:] + } + res.mtx.Unlock() + } + }() + return res +}() + +func (s *Stats) getOrDefault2(m map[string]int64, name string, def int64) int64 { + if val, ok := m[name]; ok { + return val + } + return def +} + +func (s *Stats) getOrDefault(name string, def int64) int64 { + return s.getOrDefault2(s.stats[len(s.stats)-1], name, def) +} + +func (s *Stats) Inc(name string) { + s.mtx.Lock() + defer s.mtx.Unlock() + s.stats[len(s.stats)-1][name] = s.getOrDefault(name, 0) + 1 +} + +func (s *Stats) Observe(name string, val int64) { + s.mtx.Lock() + defer s.mtx.Unlock() + min := s.getOrDefault(name+"_min", math.MaxInt64) + if min > val { + min = val + } + max := s.getOrDefault(name+"_max", math.MinInt64) + if max < val { + max = val + } + count := s.getOrDefault(name+"_count", 0) + 1 + sum := s.getOrDefault(name+"_sum", 0) + val + idx := len(s.stats) - 1 + s.stats[idx][name+"_min"] = min + s.stats[idx][name+"_max"] = max + s.stats[idx][name+"_count"] = count + s.stats[idx][name+"_sum"] = sum +} + +func (s *Stats) Collect() map[string]int64 { + s.mtx.Lock() + defer s.mtx.Unlock() + res := make(map[string]int64, 10) + for _, stats := range s.stats { + for k, v := range stats { + if strings.HasSuffix(k, "_min") { + a := s.getOrDefault2(res, k, math.MaxInt64) + if a < v { + res[k] = a + } else { + res[k] = v + } + continue + } + if strings.HasSuffix(k, "_max") { + a := s.getOrDefault2(res, k, math.MinInt64) + if a > v { + res[k] = a + } else { + res[k] = v + } + continue + } + res[k] = s.getOrDefault2(res, k, 0) + v + } + } + return res +} diff --git a/test/qryn_test_env/longtest/serviceGraphSender.go b/test/qryn_test_env/longtest/serviceGraphSender.go new file mode 100644 index 00000000..0850fb99 --- /dev/null +++ b/test/qryn_test_env/longtest/serviceGraphSender.go @@ -0,0 +1,95 @@ +package main + +import ( + "github.com/openzipkin/zipkin-go/model" + "math/rand" + "net" + "os" + "time" +) + +func NewSGSender(opts LogSenderOpts) ISender { + rnd := rand.New(rand.NewSource(time.Now().UnixNano())) + path := "/tempo/spans" + if os.Getenv("ZPATH") != "" { + path = os.Getenv("ZPATH") + } + l := &GenericSender{ + LogSenderOpts: opts, + rnd: rnd, + timeout: time.Second, + path: path, + } + pickCont := func() string { + return l.pickRandom(opts.Containers[:5]) + } + l.generate = func() IRequest { + req := make(ZipkinReq, opts.LinesPS) + high := rnd.Uint64() + dur := uint64(rnd.Float64() * 1000) + + for i := 0; i < opts.LinesPS; i += 2 { + client := "test2-" + pickCont() + server := "test2-" + pickCont() + req[i] = model.SpanModel{ + SpanContext: model.SpanContext{ + TraceID: model.TraceID{ + High: high, + Low: uint64(i / 100), + }, + ID: model.ID(i + 1), + }, + Name: "longtest-SG", + Timestamp: time.Now(), + Duration: time.Duration(dur) * time.Microsecond, + Kind: model.Client, + LocalEndpoint: &model.Endpoint{ + ServiceName: client, + IPv4: net.IPv4(192, 168, 0, 1), + IPv6: nil, + Port: 8080, + }, + RemoteEndpoint: &model.Endpoint{ + ServiceName: server, + IPv4: net.IPv4(192, 168, 0, 2), + IPv6: nil, + Port: 8080, + }, + Tags: map[string]string{ + "sender": "longtest-SG", + }, + } + req[i+1] = model.SpanModel{ + SpanContext: model.SpanContext{ + TraceID: model.TraceID{ + High: high, + Low: uint64(i / 100), + }, + ID: model.ID(i + 2), + ParentID: &[]model.ID{model.ID(i + 1)}[0], + }, + Name: "longtest-SG", + Timestamp: time.Now(), + Duration: time.Duration(dur/2) * time.Microsecond, + Kind: model.Server, + LocalEndpoint: &model.Endpoint{ + ServiceName: server, + IPv4: net.IPv4(192, 168, 0, 2), + IPv6: nil, + Port: 8080, + }, + RemoteEndpoint: &model.Endpoint{ + ServiceName: client, + IPv4: net.IPv4(192, 168, 0, 1), + IPv6: nil, + Port: 8080, + }, + Tags: map[string]string{ + "sender": "longtest-SG", + }, + } + } + return req + } + return l +} diff --git a/test/qryn_test_env/longtest/stats.go b/test/qryn_test_env/longtest/stats.go new file mode 100644 index 00000000..30cd2bce --- /dev/null +++ b/test/qryn_test_env/longtest/stats.go @@ -0,0 +1,24 @@ +package main + +import ( + "sync" + "time" +) + +type Stat struct { + Timings map[string]int64 + mtx sync.Mutex +} + +func (s *Stat) AddTiming(timing time.Duration) { + s.mtx.Lock() + defer s.mtx.Unlock() + +} + +func (s *Stat) getOrDefault(k string, def int64) int64 { + if _, ok := s.Timings[k]; !ok { + return def + } + return s.Timings[k] +} diff --git a/test/qryn_test_env/longtest/timerSender.go b/test/qryn_test_env/longtest/timerSender.go new file mode 100644 index 00000000..2a4ef126 --- /dev/null +++ b/test/qryn_test_env/longtest/timerSender.go @@ -0,0 +1,48 @@ +package main + +import ( + "github.com/prometheus/prometheus/prompb" + "math/rand" + "sync" + "time" +) + +func NewTimeSender(opts LogSenderOpts) ISender { + var l *GenericSender + hdrs := opts.Headers + opts.Headers = map[string]string{} + for k, v := range hdrs { + opts.Headers[k] = v + } + opts.Headers["Content-Type"] = "application/x-protobuf" + opts.Headers["Content-Encoding"] = "snappy" + l = &GenericSender{ + LogSenderOpts: opts, + mtx: sync.Mutex{}, + rnd: rand.New(rand.NewSource(time.Now().UnixNano())), + timeout: time.Second * 15, + path: "/api/v1/prom/remote/write", + generate: func() IRequest { + req := make(PromReq, l.LinesPS) + for i := 0; i < l.LinesPS; i++ { + container := l.Containers[i%len(l.Containers)] + req[i] = prompb.TimeSeries{ + Labels: []prompb.Label{ + {Name: "orgid", Value: opts.Headers["X-Scope-OrgID"]}, + {Name: "__name__", Value: "current_time"}, + {Name: "container", Value: container}, + {Name: "sender", Value: "logmetrics"}, + }, + Samples: []prompb.Sample{ + { + Timestamp: time.Now().UnixMilli(), + Value: float64(time.Now().Unix()), + }, + }, + } + } + return req + }, + } + return l +} diff --git a/test/qryn_test_env/longtest/zipkinSender.go b/test/qryn_test_env/longtest/zipkinSender.go new file mode 100644 index 00000000..94e48e26 --- /dev/null +++ b/test/qryn_test_env/longtest/zipkinSender.go @@ -0,0 +1,72 @@ +package main + +import ( + "encoding/json" + "fmt" + "github.com/openzipkin/zipkin-go/model" + "math/rand" + "net" + "os" + "time" +) + +type ZipkinReq []model.SpanModel + +func (z ZipkinReq) Serialize() ([]byte, error) { + return json.Marshal(z) +} + +func NewZipkinSender(opts LogSenderOpts) ISender { + rnd := rand.New(rand.NewSource(time.Now().UnixNano())) + path := "/tempo/spans" + if os.Getenv("ZPATH") != "" { + path = os.Getenv("ZPATH") + } + l := &GenericSender{ + LogSenderOpts: opts, + rnd: rnd, + timeout: time.Second, + path: path, + } + pickCont := func() string { + return l.pickRandom(opts.Containers) + } + pickLine := func() string { + return l.pickRandom(opts.Lines) + } + l.generate = func() IRequest { + req := make(ZipkinReq, opts.LinesPS) + high := rnd.Uint64() + + for i := 0; i < opts.LinesPS; i++ { + req[i] = model.SpanModel{ + SpanContext: model.SpanContext{ + TraceID: model.TraceID{ + High: high, + Low: uint64(i / 100), + }, + ID: model.ID(i + 1), + }, + Name: "longtest", + Timestamp: time.Now(), + Duration: 1000, + LocalEndpoint: &model.Endpoint{ + ServiceName: "longtest-service", + IPv4: net.IPv4(192, 168, 0, 1), + IPv6: nil, + Port: 8080, + }, + Annotations: []model.Annotation{ + {time.Now(), pickLine()}, + }, + Tags: map[string]string{ + "sender": "longtest", + "randomContainer": pickCont(), + "randomFloat": fmt.Sprintf("%f", 50+(rand.Float64()*100-50)), + }, + } + } + return req + } + return l +} diff --git a/test/qryn_test_env/otel/otel-collector-config.yaml b/test/qryn_test_env/otel/otel-collector-config.yaml new file mode 100644 index 00000000..27bed126 --- /dev/null +++ b/test/qryn_test_env/otel/otel-collector-config.yaml @@ -0,0 +1,116 @@ +receivers: + loki: + use_incoming_timestamp: true + protocols: + http: + endpoint: 0.0.0.0:3100 + grpc: + endpoint: 0.0.0.0:3200 + syslog: + protocol: rfc5424 + tcp: + listen_address: "0.0.0.0:5514" + fluentforward: + endpoint: 0.0.0.0:24224 + splunk_hec: + endpoint: 0.0.0.0:8088 + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + jaeger: + protocols: + grpc: + endpoint: 0.0.0.0:14250 + thrift_http: + endpoint: 0.0.0.0:14268 + zipkin: + endpoint: 0.0.0.0:9411 + skywalking: + protocols: + grpc: + endpoint: 0.0.0.0:11800 + http: + endpoint: 0.0.0.0:12800 + prometheus: + config: + scrape_configs: + - job_name: 'otel-collector' + scrape_interval: 5s + static_configs: + - targets: ['exporter:8080'] + - job_name: 'qryn' + scrape_interval: 5s + static_configs: + - targets: ['qryn:3100'] + influxdb: + endpoint: 0.0.0.0:8086 + pyroscopereceiver: + +processors: + batch: + send_batch_size: 10000 + timeout: 5s + memory_limiter: + check_interval: 2s + limit_mib: 1800 + spike_limit_mib: 500 + resourcedetection/system: + detectors: ['system'] + system: + hostname_sources: ['os'] + resource: + attributes: + - key: service.name + value: "serviceName" + action: upsert + +exporters: + qryn: + dsn: tcp://clickhouse-server:9000/qryn?username=qryn&password=demo + timeout: 10s + sending_queue: + queue_size: 100 + retry_on_failure: + enabled: true + initial_interval: 5s + max_interval: 30s + max_elapsed_time: 300s + logs: + format: raw + otlp: + endpoint: localhost:4317 + tls: + insecure: true + clickhouseprofileexporter: + dsn: clickhouse://clickhouse-server:9000/qryn?username=qryn&password=demo + +extensions: + health_check: + pprof: + zpages: + pyroscope: + +service: + telemetry: + logs: + level: "info" + extensions: [pprof, zpages, health_check, pyroscope] + pipelines: + logs: + receivers: [fluentforward, otlp, loki] + processors: [memory_limiter, resourcedetection/system, resource, batch] + exporters: [qryn] + traces: + receivers: [otlp, jaeger, zipkin, skywalking] + processors: [memory_limiter, resourcedetection/system, resource, batch] + exporters: [qryn] + metrics: + receivers: [prometheus, influxdb] + processors: [memory_limiter, resourcedetection/system, resource, batch] + exporters: [qryn] + logs/profiles: + receivers: [pyroscopereceiver] + exporters: [clickhouseprofileexporter] diff --git a/traceql/clickhouse_transpiler/traces_data.js b/traceql/clickhouse_transpiler/traces_data.js index 2a263ea2..6023e41d 100644 --- a/traceql/clickhouse_transpiler/traces_data.js +++ b/traceql/clickhouse_transpiler/traces_data.js @@ -4,6 +4,7 @@ const { standardBuilder } = require('./shared') * @type {ProcessFn} */ const processFn = (sel, ctx) => { + const _in = ctx.isCluster ? 'global in' : 'in' const table = !ctx.isCluster ? ctx.tracesTable : ctx.tracesDistTable const withMain = new Sql.With('index_grouped', sel) const withTraceIds = new Sql.With('trace_ids', (new Sql.Select()) @@ -17,18 +18,18 @@ const processFn = (sel, ctx) => { .with(withMain, withTraceIds, withTraceIdsSpanIds) .select( [new Sql.Raw('lower(hex(traces.trace_id))'), 'trace_id'], - [new Sql.Raw(`arrayMap(x -> lower(hex(x)), groupArrayIf(traces.span_id, (traces.trace_id, traces.span_id) IN ${new Sql.WithReference(withTraceIdsSpanIds)}))`), 'span_id'], - [new Sql.Raw(`groupArrayIf(traces.duration_ns, (traces.trace_id, traces.span_id) IN ${new Sql.WithReference(withTraceIdsSpanIds)})`), 'duration'], - [new Sql.Raw(`groupArrayIf(traces.timestamp_ns, (traces.trace_id, traces.span_id) IN ${new Sql.WithReference(withTraceIdsSpanIds)})`), 'timestamp_ns'], + [new Sql.Raw(`arrayMap(x -> lower(hex(x)), groupArrayIf(traces.span_id, (traces.trace_id, traces.span_id) ${_in} ${new Sql.WithReference(withTraceIdsSpanIds)}))`), 'span_id'], + [new Sql.Raw(`groupArrayIf(traces.duration_ns, (traces.trace_id, traces.span_id) ${_in} ${new Sql.WithReference(withTraceIdsSpanIds)})`), 'duration'], + [new Sql.Raw(`groupArrayIf(traces.timestamp_ns, (traces.trace_id, traces.span_id) ${_in} ${new Sql.WithReference(withTraceIdsSpanIds)})`), 'timestamp_ns'], [new Sql.Raw('min(traces.timestamp_ns)'), 'start_time_unix_nano'], [new Sql.Raw( 'toFloat64(max(traces.timestamp_ns + traces.duration_ns) - min(traces.timestamp_ns)) / 1000000' ), 'duration_ms'], [new Sql.Raw('argMin(traces.name, traces.timestamp_ns)', 'root_service_name'), 'root_service_name'], - [new Sql.Raw(`groupArrayIf(base64Encode(traces.payload), (traces.trace_id, traces.span_id) IN ${new Sql.WithReference(withTraceIdsSpanIds)})`), 'payload'], - [new Sql.Raw(`groupArrayIf(traces.payload_type, (traces.trace_id, traces.span_id) IN ${new Sql.WithReference(withTraceIdsSpanIds)})`), 'payload_type'] + [new Sql.Raw(`groupArrayIf(base64Encode(traces.payload), (traces.trace_id, traces.span_id) ${_in} ${new Sql.WithReference(withTraceIdsSpanIds)})`), 'payload'], + [new Sql.Raw(`groupArrayIf(traces.payload_type, (traces.trace_id, traces.span_id) ${_in} ${new Sql.WithReference(withTraceIdsSpanIds)})`), 'payload_type'] ).from([table, 'traces']).where(Sql.And( - new Sql.In(new Sql.Raw('traces.trace_id'), 'in', new Sql.WithReference(withTraceIds)) + new Sql.In(new Sql.Raw('traces.trace_id'), _in, new Sql.WithReference(withTraceIds)) )).groupBy('traces.trace_id') .orderBy(['start_time_unix_nano', 'desc']) }