d37e6a6763d5
test: pin official cryptographic vectors (v4.1.1)
- time
- 2026-07-26 06:34 UTC · 3 months ago
- machine
- koh2
- parent
- 9dde66e57d3d
↓ peach-browser-d37e6a67.tar.gzatlas at this save
files changed11 files
crypto-core/Cargo.lock+7 −1crypto-core/Cargo.toml+5 −1crypto-core/src/lib.rs+227 −1manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/background/aes.ts+42 −26src/crypto/argon2id.kat.test.ts+11 −13src/crypto/official-vectors.test.ts+57 −0src/shared/noise-core-wasm/peach_noise_core_bg.wasmbinarysrc/shared/noise-core-wasm/peach_noise_core_bytes.ts+24 −24crypto-core/Cargo.lock+7 −1
@@ -140,6 +140,7 @@140140 checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"141141 dependencies = [142142 "generic-array",143+ "rand_core",143144 "typenum",144145 ]145146 @@ -362,8 +363,10 @@362363 363364 [[package]]364365 name = "peach-noise-core"365-version = "1.0.0"366+version = "1.0.1"366367 dependencies = [368+ "blake2",369+ "chacha20poly1305",367370 "getrandom 0.2.17",368371 "getrandom 0.3.4",369372 "jni",@@ -433,6 +436,9 @@433436 version = "0.6.4"434437 source = "registry+https://github.com/rust-lang/crates.io-index"435438 checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"439+dependencies = [440+ "getrandom 0.2.17",441+]436442 437443 [[package]]438444 name = "rustc_version"crypto-core/Cargo.toml+5 −1
@@ -1,6 +1,6 @@11 [package]22 name = "peach-noise-core"3-version = "1.0.0"3+version = "1.0.1"44 edition = "2024"55 rust-version = "1.85"66 license = "GPL-3.0-only"@@ -23,6 +23,10 @@2323 [target.'cfg(not(target_arch = "wasm32"))'.dependencies]2424 jni = "=0.21.1"2525 once_cell = "=1.21.4"26+27+[dev-dependencies]28+blake2 = "=0.10.6"29+chacha20poly1305 = "=0.10.1"2630 2731 [profile.release]2832 codegen-units = 1crypto-core/src/lib.rs+227 −1
@@ -589,7 +589,16 @@589589 590590 #[cfg(test)]591591 mod tests {592- use super::CoreNoiseSession;592+ use super::{CoreNoiseSession, KK, NK, core_builder};593+ use blake2::{594+ Blake2sMac256,595+ digest::{KeyInit as BlakeKeyInit, Mac},596+ };597+ use chacha20poly1305::{598+ ChaCha20Poly1305, Nonce,599+ aead::{Aead, Payload},600+ };601+ use snow::params::NoiseParams;593602 use x25519_dalek::{PublicKey, StaticSecret};594603 595604 fn keypair(seed: u8) -> ([u8; 32], [u8; 32]) {@@ -598,6 +607,107 @@598607 (private, public)599608 }600609 610+ fn hex(value: &str) -> Vec<u8> {611+ assert!(value.len().is_multiple_of(2));612+ value613+ .as_bytes()614+ .chunks_exact(2)615+ .map(|pair| u8::from_str_radix(std::str::from_utf8(pair).unwrap(), 16).unwrap())616+ .collect()617+ }618+619+ fn official_pair(620+ pattern: &str,621+ initiator_static: Option<&str>,622+ initiator_ephemeral: &str,623+ initiator_remote_static: &str,624+ responder_static: &str,625+ responder_ephemeral: &str,626+ responder_remote_static: Option<&str>,627+ ) -> (CoreNoiseSession, CoreNoiseSession) {628+ let prologue = hex("4a6f686e2047616c74");629+ let responder_private = hex(responder_static);630+ let responder_public = PublicKey::from(&StaticSecret::from(631+ <[u8; 32]>::try_from(&responder_private[..]).unwrap(),632+ ));633+ assert_eq!(634+ responder_public.as_bytes(),635+ &hex(initiator_remote_static)[..]636+ );637+638+ let params: NoiseParams = pattern.parse().unwrap();639+ let initiator_ephemeral = hex(initiator_ephemeral);640+ let initiator_static = initiator_static.map(hex);641+ let responder_ephemeral = hex(responder_ephemeral);642+ let responder_remote_static = responder_remote_static.map(hex);643+ let mut initiator_builder = core_builder(params.clone())644+ .prologue(&prologue)645+ .unwrap()646+ .remote_public_key(responder_public.as_bytes())647+ .unwrap()648+ .fixed_ephemeral_key_for_testing_only(&initiator_ephemeral);649+ if let Some(private) = &initiator_static {650+ initiator_builder = initiator_builder.local_private_key(private).unwrap();651+ }652+653+ let mut responder_builder = core_builder(params)654+ .prologue(&prologue)655+ .unwrap()656+ .local_private_key(&responder_private)657+ .unwrap()658+ .fixed_ephemeral_key_for_testing_only(&responder_ephemeral);659+ if let Some(remote_public) = &responder_remote_static {660+ responder_builder = responder_builder.remote_public_key(remote_public).unwrap();661+ }662+663+ (664+ CoreNoiseSession::handshake(initiator_builder.build_initiator().unwrap()),665+ CoreNoiseSession::handshake(responder_builder.build_responder().unwrap()),666+ )667+ }668+669+ fn assert_cacophony_vector(670+ mut initiator: CoreNoiseSession,671+ mut responder: CoreNoiseSession,672+ handshake_hash: &str,673+ messages: &[(&str, &str)],674+ ) {675+ for (index, (payload, expected_ciphertext)) in messages.iter().enumerate() {676+ let plaintext = hex(payload);677+ let expected = hex(expected_ciphertext);678+ if index < 2 {679+ let (sender, receiver) = if index % 2 == 0 {680+ (&mut initiator, &mut responder)681+ } else {682+ (&mut responder, &mut initiator)683+ };684+ let actual = sender.write_handshake(&plaintext).unwrap();685+ assert_eq!(actual, expected, "handshake message {index}");686+ assert_eq!(687+ receiver.read_handshake(&actual).unwrap(),688+ plaintext,689+ "handshake payload {index}",690+ );691+ } else {692+ let (sender, receiver) = if index % 2 == 0 {693+ (&mut initiator, &mut responder)694+ } else {695+ (&mut responder, &mut initiator)696+ };697+ let actual = sender.encrypt(&plaintext).unwrap();698+ assert_eq!(actual, expected, "transport message {index}");699+ assert_eq!(700+ receiver.decrypt(&actual).unwrap(),701+ plaintext,702+ "transport payload {index}",703+ );704+ }705+ }706+ let expected_hash = hex(handshake_hash);707+ assert_eq!(initiator.handshake_hash().unwrap(), expected_hash);708+ assert_eq!(responder.handshake_hash().unwrap(), expected_hash);709+ }710+601711 fn complete(initiator: &mut CoreNoiseSession, responder: &mut CoreNoiseSession) {602712 let message1 = initiator.write_handshake(&[]).unwrap();603713 assert!(responder.read_handshake(&message1).unwrap().is_empty());@@ -660,5 +770,121 @@660770 let mut ciphertext = initiator.encrypt(b"vault").unwrap();661771 ciphertext[0] ^= 0x80;662772 assert!(responder.decrypt(&ciphertext).is_err());773+ }774+775+ #[test]776+ fn cacophony_nk_vector_matches_shared_core() {777+ let pair = official_pair(778+ NK,779+ None,780+ "893e28b9dc6ca8d611ab664754b8ceb7bac5117349a4439a6b0569da977c464a",781+ "31e0303fd6418d2f8c0e78b91f22e8caed0fbe48656dcf4767e4834f701b8f62",782+ "4a3acbfdb163dec651dfa3194dece676d437029c62a408b4c5ea9114246e4893",783+ "bbdb4cdbd309f1a1f2e1456967fe288cadd6f712d65dc7b7793d5e63da6b375b",784+ None,785+ );786+ assert_cacophony_vector(787+ pair.0,788+ pair.1,789+ "d7244d974066aae2376f7ba5534f60a6e4e82cd7c9751e226cae3928e6b49f14",790+ &[791+ (792+ "4c756477696720766f6e204d69736573",793+ "ca35def5ae56cec33dc2036731ab14896bc4c75dbb07a61f879f8e3afa4c794454ae7612d1724af42adb130160a9a94e67b5b169b4e00c189f6467cd17eb7cad",794+ ),795+ (796+ "4d757272617920526f746862617264",797+ "95ebc60d2b1fa672c1f46a8aa265ef51bfe38e7ccb39ec5be34069f144808843986a5c929337e337ac8b4a074af12ab9f76318a5f18c8b599a443af07383ce",798+ ),799+ (800+ "462e20412e20486179656b",801+ "550027c7a5d450017bcb5e12b8253b1c53fd2213aeda84891d5f95",802+ ),803+ (804+ "4361726c204d656e676572",805+ "dfbce0c38210ccee35e830aca9dd8b8b3997b933e75bfc8864b759",806+ ),807+ ],808+ );809+ }810+811+ #[test]812+ fn cacophony_kk_vector_matches_shared_core() {813+ let pair = official_pair(814+ KK,815+ Some("e61ef9919cde45dd5f82166404bd08e38bceb5dfdfded0a34c8df7ed542214d1"),816+ "893e28b9dc6ca8d611ab664754b8ceb7bac5117349a4439a6b0569da977c464a",817+ "31e0303fd6418d2f8c0e78b91f22e8caed0fbe48656dcf4767e4834f701b8f62",818+ "4a3acbfdb163dec651dfa3194dece676d437029c62a408b4c5ea9114246e4893",819+ "bbdb4cdbd309f1a1f2e1456967fe288cadd6f712d65dc7b7793d5e63da6b375b",820+ Some("6bc3822a2aa7f4e6981d6538692b3cdf3e6df9eea6ed269eb41d93c22757b75a"),821+ );822+ assert_cacophony_vector(823+ pair.0,824+ pair.1,825+ "1362b8627a00907ce11e558aba8ce7cbca88e83f0e84ce7db5159b1c3e25ab59",826+ &[827+ (828+ "4c756477696720766f6e204d69736573",829+ "ca35def5ae56cec33dc2036731ab14896bc4c75dbb07a61f879f8e3afa4c7944266a5f53784aa3becb0f7485c2759c328937867a4cbaafef07422b0725e098be",830+ ),831+ (832+ "4d757272617920526f746862617264",833+ "95ebc60d2b1fa672c1f46a8aa265ef51bfe38e7ccb39ec5be34069f144808843008aeea5d76d6abcbab87a18502c8a8352d9933ac11e2a7d228038d721e31e",834+ ),835+ (836+ "462e20412e20486179656b",837+ "5f92113edf78c3e56e6d67201f5f9e0c8f2930c3e1ffb64ede0358",838+ ),839+ (840+ "4361726c204d656e676572",841+ "30ebbd9cdcef7f40d99c8cd11e880dac28f5c9e5032c1059b3b56a",842+ ),843+ ],844+ );845+ }846+847+ #[test]848+ fn rfc_8439_chacha20_poly1305_aead_vector_matches_snow_cipher() {849+ let key = hex("808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f");850+ let nonce = hex("070000004041424344454647");851+ let aad = hex("50515253c0c1c2c3c4c5c6c7");852+ let plaintext = hex(concat!(853+ "4c616469657320616e642047656e746c656d656e206f662074686520636c6173",854+ "73206f66202739393a204966204920636f756c64206f6666657220796f75206f",855+ "6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73",856+ "637265656e20776f756c642062652069742e",857+ ));858+ let expected = hex(concat!(859+ "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d6",860+ "3dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b36",861+ "92ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc",862+ "3ff4def08e4b7a9de576d26586cec64b6116",863+ "1ae10b594f09e26a7e902ecbd0600691",864+ ));865+ let cipher = ChaCha20Poly1305::new_from_slice(&key).unwrap();866+ assert_eq!(867+ cipher868+ .encrypt(869+ Nonce::from_slice(&nonce),870+ Payload {871+ msg: &plaintext,872+ aad: &aad,873+ },874+ )875+ .unwrap(),876+ expected,877+ );878+ }879+880+ #[test]881+ fn blake2_reference_keyed_vector_matches_snow_hash_dependency() {882+ let key: Vec<u8> = (0_u8..32).collect();883+ let mut mac = <Blake2sMac256 as BlakeKeyInit>::new_from_slice(&key).unwrap();884+ Mac::update(&mut mac, &[]);885+ assert_eq!(886+ Mac::finalize(mac).into_bytes().as_slice(),887+ &hex("48a8997da407876b3d79c0d92325ad3b89cbb754d86ab71aee047ad345fd2c49"),888+ );663889 }664890 }manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach Password Manager",4- "version": "4.1.0",4+ "version": "4.1.1",55 "description": "Zero-knowledge password manager",66 "browser_specific_settings": {77 "gecko": {manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach Password Manager",4- "version": "4.1.0",4+ "version": "4.1.1",55 "description": "Zero-knowledge password manager",66 "action": {77 "default_popup": "src/popup/index.html",package.json+1 −1
@@ -1,6 +1,6 @@11 {22 "name": "peach",3- "version": "4.1.0",3+ "version": "4.1.1",44 "description": "Zero-knowledge password manager",55 "license": "GPL-3.0-only",66 "type": "module",src/background/aes.ts+42 −26
@@ -87,33 +87,10 @@8787 tag: string,8888 aadTag?: string8989 ): Promise<string> {90- const key = await crypto.subtle.importKey(91- "raw",92- keyBytes.buffer as ArrayBuffer,93- { name: "AES-GCM" },94- false,95- ["decrypt"]96- );97-98- const cipherBytes = unhex(ciphertext);99- const tagBytes = unhex(tag);100- const combined = new Uint8Array(cipherBytes.length + tagBytes.length);101- combined.set(cipherBytes);102- combined.set(tagBytes, cipherBytes.length);103-104- const tryDecrypt = async (aad: Uint8Array): Promise<string> => {105- const raw = await crypto.subtle.decrypt(106- {107- name: "AES-GCM",108- iv: unhex(nonce).buffer as ArrayBuffer,109- additionalData: aad.buffer.slice(aad.byteOffset, aad.byteOffset + aad.byteLength) as ArrayBuffer,110- tagLength: 128,111- },112- key,113- combined.buffer as ArrayBuffer90+ const tryDecrypt = async (aad: Uint8Array): Promise<string> =>91+ new TextDecoder().decode(92+ await decryptWithAadBytes(keyBytes, nonce, ciphertext, tag, aad),11493 );115- return new TextDecoder().decode(raw);116- };11794 11895 try {11996 return await tryDecrypt(aadFor(aadTag));@@ -128,6 +105,45 @@128105 throw err;129106 }130107 }108+109+async function decryptWithAadBytes(110+ keyBytes: Uint8Array,111+ nonce: string,112+ ciphertext: string,113+ tag: string,114+ aad: Uint8Array,115+): Promise<Uint8Array> {116+ const key = await crypto.subtle.importKey(117+ "raw",118+ keyBytes.buffer as ArrayBuffer,119+ { name: "AES-GCM" },120+ false,121+ ["decrypt"]122+ );123+124+ const cipherBytes = unhex(ciphertext);125+ const tagBytes = unhex(tag);126+ const combined = new Uint8Array(cipherBytes.length + tagBytes.length);127+ combined.set(cipherBytes);128+ combined.set(tagBytes, cipherBytes.length);129+130+ const raw = await crypto.subtle.decrypt(131+ {132+ name: "AES-GCM",133+ iv: unhex(nonce).buffer as ArrayBuffer,134+ additionalData: aad.buffer.slice(135+ aad.byteOffset,136+ aad.byteOffset + aad.byteLength,137+ ) as ArrayBuffer,138+ tagLength: 128,139+ },140+ key,141+ combined.buffer as ArrayBuffer,142+ );143+ return new Uint8Array(raw);144+}145+146+export const _testSeam = { decryptWithAadBytes };131147 132148 export function zeroKey(keyBytes: Uint8Array): void {133149 keyBytes.fill(0);src/crypto/argon2id.kat.test.ts+11 −13
@@ -13,8 +13,8 @@1313 // re-encrypts everything on save).1414 //1515 // The KAT approach:16-// - Pick a deterministic (password, salt) pair and compute the expected17-// Argon2id output offline (reference value below).16+// - Pin a deterministic production-profile (password, salt) pair to the17+// same output in hash-wasm and Android's independent Bouncy Castle path.1818 // - Assert the actual output matches byte-for-byte.1919 // - If any parameter silently changes (m, t, p, or hashLength), the output2020 // hash changes and this test fails.@@ -23,7 +23,8 @@2323 // password = "testpassword" (NFC-normalized — same as ASCII, no change)2424 // salt = 16 × 0xAB2525 // m=65536, t=3, p=4, hashLength=3226-// Expected output: computed via hash-wasm argon2id (see script below)26+// Expected output: cross-checked by peach-android's27+// OfficialCryptoVectorsTest using the same UTF-8 input and parameters.2728 //2829 // To re-derive (run once in Node to get the canonical value):2930 // import { argon2id } from "hash-wasm";@@ -41,17 +42,14 @@4142 // KAT vector4243 // ---------------------------------------------------------------------------4344 44-// This hex string is the authoritative expected Argon2id output for the test45-// vector below. It must be re-derived if the hash-wasm library version changes46-// (major version bump) or if a KAT discrepancy is found.45+// This hex string is the coordinated browser/Android production-profile46+// output. A change breaks vault compatibility and must never be accepted by47+// regenerating only one implementation's expected value.4748 //48-// Instructions to regenerate:49-// 1. Run `npx tsx scripts/gen-argon2id-kat.ts` (or the Node snippet above).50-// 2. Paste the output here.51-// 3. Commit with message "update Argon2id KAT vector for hash-wasm vX.Y.Z".52-//53-// DO NOT change this value without the regeneration process above. A change54-// here means the KDF output has changed, which would break existing vaults.49+// RFC 9106's published Argon2id vector includes associated data, which50+// hash-wasm cannot represent. Android separately executes that full RFC vector;51+// this cross-implementation vector covers Peach's actual no-associated-data52+// production profile on both platforms.5553 const KAT_EXPECTED_HEX = "df187c8d241e8f3fd42810e1379660605aad1119dcb133d8ff916f87160d6a33";5654 5755 // If you have not yet run the generation script, mark this test as skippedsrc/crypto/official-vectors.test.ts+57 −0
@@ -0,0 +1,57 @@1+import { describe, expect, it } from "vitest";2+import { blake3 } from "hash-wasm";3+4+import { _testSeam as aesTestSeam } from "../background/aes";5+6+function unhex(value: string): Uint8Array {7+ const output = new Uint8Array(value.length / 2);8+ for (let index = 0; index < value.length; index += 2) {9+ output[index / 2] = Number.parseInt(value.slice(index, index + 2), 16);10+ }11+ return output;12+}13+14+function hex(value: Uint8Array): string {15+ return Array.from(value, (byte) => byte.toString(16).padStart(2, "0")).join("");16+}17+18+describe("official cryptographic vectors", () => {19+ // NIST CAVP gcmDecrypt256.rsp, PTlen=128, AADlen=0, Taglen=128, Count=0.20+ // Source archive SHA-256 is pinned in docs/CRYPTOGRAPHIC-TEST-VECTORS.md.21+ it("decrypts the NIST AES-256-GCM CAVP vector and rejects a bad tag", async () => {22+ const key = unhex(23+ "4c8ebfe1444ec1b2d503c6986659af2c94fafe945f72c1e8486a5acfedb8a0f8",24+ );25+ const nonce = "473360e0ad24889959858995";26+ const ciphertext = "d2c78110ac7e8f107c0df0570bd7c90c";27+ const tag = "c26a379b6d98ef2852ead8ce83a833a7";28+29+ const plaintext = await aesTestSeam.decryptWithAadBytes(30+ key,31+ nonce,32+ ciphertext,33+ tag,34+ new Uint8Array(),35+ );36+ expect(hex(plaintext)).toBe("7789b41cb3ee548814ca0b388c10b343");37+38+ await expect(39+ aesTestSeam.decryptWithAadBytes(40+ key,41+ nonce,42+ ciphertext,43+ `${tag.slice(0, -2)}a6`,44+ new Uint8Array(),45+ ),46+ ).rejects.toThrow();47+ });48+49+ // BLAKE3 official test_vectors.json, input_len=1024. The reference input is50+ // byte i % 251 and the first 32 output bytes are the production digest size.51+ it("matches the BLAKE3 reference vector across a chunk boundary", async () => {52+ const input = Uint8Array.from({ length: 1024 }, (_, index) => index % 251);53+ expect(await blake3(input)).toBe(54+ "42214739f095a406f3fc83deb889744ac00df831c10daa55189b5d121c855af7",55+ );56+ });57+});src/shared/noise-core-wasm/peach_noise_core_bytes.ts+24 −24
@@ -7,7 +7,7 @@77 "YmcuanMnX193YmdfX193YmluZGdlbl90aHJvd18zNDRmNDJkMzIxMWM0NzY1AAMYLi9wZWFjaF9ub2lzZV9jb3JlX2JnLmpzHF9fd2JnX0Vycm9yXzkyYjI5",88 "YjA1NDhmOGI3NDYABAO4A7YDAwUVBwIFBQUQEBIJBQsNBAsJBAMIBQMCAwMNCwMBAwwFAwUFBQYFBggFAQEHAwkDBAUDBwMEBQMMBQMFAQcHBQUEFgUDEBAF",99 "DQ0UAwsCDQMNAwMNDQ0EBwsNAwcOBwUEARYEBQMECQMDDRQJCQkJBQMRERERBQoFCQcEDwUFBAULBQUJAwMJBQMFBwULCQMDBwcHBwUFAwsFBAsBDwUNBQsL",10- "AwMDAQEECwEDCQkFAw0NEBAJBA0JAwUFCQMHBwcHBwMHBwcDAwMJBQUFAwMHBQEDAwMFBQUEBAUTAwoDAwMDAwEDBQUDAwsDBQkDAQEDAwYBBgMDBQUFBwYD",10+ "AwMDAQEECwEDCQkFAxANDRAJBA0JAwUFCQMHBwcHBwMHBwcDAwMJBQUFAwMHBQEDAwMFBQUEBAUTAwoDAwMDAwEDBQUDAwsDBQkDAQEDAwYBBgMDBQUFBwYD",1111 "AwEBAwQDCQQBAQEEAwIGAwMHAwMJAwkBDgUJAwMDAwUBBwcNBQUBBQUDAwQLCgEBAQMBFQMBAwQEAQUJBAQCAQEDBQkBCQEBAwEDAwEIBQEBAQEEBAQDAQQB",1212 "AQEDBAUEBQMBBQIDAwYCAgkEAQICAggDAwMDAwMDAwMDAwEDBAQEBgUCAgMGAAYBAQYCBAEEBAQDAwQBAQADAAEDAwMEAwQEBgMDBAMBAQEDAwEBBAACAgIC",1313 "AgIAAQABBAUBcAFwcAUDAQARBhkDfwFBgIDAAAt/AEHI3MIAC38AQfDcwgALB+MFFwZtZW1vcnkCABtfX3diZ193YXNtbm9pc2VzZXNzaW9uX2ZyZWUA6wEY",@@ -1031,11 +1031,11 @@10311031 "ACgCHHdxNgKs4EILlgMBAX8jAEHgEmsiCSQAIAkgAjYCBCAJIAE2AgAgCSADNgIIIAkgBDYCDCAJIAU2AhAgCSAGNgIUIAkgBzYCGCAJIAg2AhwgCSAJQd8S",10321032 "ajYC7AYgCSAJQd8SajYC6AYgCSAJQRxqNgLkBiAJIAlBGGo2AuAGIAkgCUHfEmo2AtwGIAkgCUHfEmo2AtgGIAkgCUEUajYC1AYgCSAJQRBqNgLQBiAJIAlB",10331033 "3xJqNgLMBiAJIAlB3xJqNgLIBiAJIAlBDGo2AsQGIAkgCUEIajYCwAYgCSAJQd8SajYCvAYgCSAJQd8SajYCuAYgCSAJQQRqNgK0BiAJIAk2ArAGIAlBIGog",1034- "CUGwBmoQiQECQAJAIAkoAiBBg4CAgHhHDQBBASECIAkoAiQhAQwBCyAJQcgMakEEaiAJQSBqQZAG/AoAAEEAIQIgCUEANgKwBiAJQbAGakEEciAJQcgMakGU",1034+ "CUGwBmoQiAECQAJAIAkoAiBBg4CAgHhHDQBBASECIAkoAiQhAQwBCyAJQcgMakEEaiAJQSBqQZAG/AoAAEEAIQIgCUEANgKwBiAJQbAGakEEciAJQcgMakGU",10351035 "BvwKAAAgCUGwBmoQvgJBCGohAQsgACACNgIIIAAgAUEAIAIbNgIEIABBACABIAIbNgIAIAlB4BJqJAALlgMBAX8jAEHgEmsiCSQAIAkgAjYCBCAJIAE2AgAg",10361036 "CSADNgIIIAkgBDYCDCAJIAU2AhAgCSAGNgIUIAkgBzYCGCAJIAg2AhwgCSAJQd8SajYC7AYgCSAJQd8SajYC6AYgCSAJQRxqNgLkBiAJIAlBGGo2AuAGIAkg",10371037 "CUHfEmo2AtwGIAkgCUHfEmo2AtgGIAkgCUEUajYC1AYgCSAJQRBqNgLQBiAJIAlB3xJqNgLMBiAJIAlB3xJqNgLIBiAJIAlBDGo2AsQGIAkgCUEIajYCwAYg",1038- "CSAJQd8SajYCvAYgCSAJQd8SajYCuAYgCSAJQQRqNgK0BiAJIAk2ArAGIAlBIGogCUGwBmoQiAECQAJAIAkoAiBBg4CAgHhHDQBBASECIAkoAiQhAQwBCyAJ",1038+ "CSAJQd8SajYCvAYgCSAJQd8SajYCuAYgCSAJQQRqNgK0BiAJIAk2ArAGIAlBIGogCUGwBmoQiQECQAJAIAkoAiBBg4CAgHhHDQBBASECIAkoAiQhAQwBCyAJ",10391039 "QcgMakEEaiAJQSBqQZAG/AoAAEEAIQIgCUEANgKwBiAJQbAGakEEciAJQcgMakGUBvwKAAAgCUGwBmoQvgJBCGohAQsgACACNgIIIAAgAUEAIAIbNgIEIABB",10401040 "ACABIAIbNgIAIAlB4BJqJAALuQMBAn8jAEGgAmsiAyQAAkACQAJAAkACQAJAAkACQAJAIAItAAAOBAABAgMACxCvA0HwAEEIEI8DIgJFDQQgAkEoakEAQcEA",10411041 "/AsAIAJCADcDICACQQApA7DCQDcDGCACQQApA6jCQDcDECACQQApA6DCQDcDCCACQQApA5jCQDcDAEHkw8AAIQQMAwsQrwNB4AFBEBCPAyICRQ0EIAJB0ABq",@@ -1090,7 +1090,7 @@10901090 "QCAEIANBHXZBBHFqIgUoAhAiAkUNAiADQQF0IQMgAiEEIAIoAgRBeHEgAUcNAAsLIAIoAggiAyAANgIMIAIgADYCCCAAQQA2AhggACACNgIMIAAgAzYCCA8L",10911091 "IAVBEGogADYCACAAIAQ2AhggACAANgIMIAAgADYCCAvdAgEBfyMAQeASayIHJAAgByACNgIMIAcgATYCCCAHIAM2AhAgByAENgIUIAcgBTYCGCAHIAY2Ahwg",10921092 "ByAHQd8SajYC3AYgByAHQd8SajYC2AYgByAHQRxqNgLUBiAHIAdBGGo2AtAGIAcgB0HfEmo2AswGIAcgB0HfEmo2AsgGIAcgB0EUajYCxAYgByAHQRBqNgLA",1093- "BiAHIAdB3xJqNgK8BiAHIAdB3xJqNgK4BiAHIAdBDGo2ArQGIAcgB0EIajYCsAYgB0EgaiAHQbAGahCoAQJAAkAgBygCIEGDgICAeEcNAEEBIQIgBygCJCEB",1093+ "BiAHIAdB3xJqNgK8BiAHIAdB3xJqNgK4BiAHIAdBDGo2ArQGIAcgB0EIajYCsAYgB0EgaiAHQbAGahCmAQJAAkAgBygCIEGDgICAeEcNAEEBIQIgBygCJCEB",10941094 "DAELIAdByAxqQQRqIAdBIGpBkAb8CgAAQQAhAiAHQQA2ArAGIAdBsAZqQQRyIAdByAxqQZQG/AoAACAHQbAGahC+AkEIaiEBCyAAIAI2AgggACABQQAgAhs2",10951095 "AgQgAEEAIAEgAhs2AgAgB0HgEmokAAvdAgEBfyMAQeASayIHJAAgByACNgIMIAcgATYCCCAHIAM2AhAgByAENgIUIAcgBTYCGCAHIAY2AhwgByAHQd8SajYC",10961096 "3AYgByAHQd8SajYC2AYgByAHQRxqNgLUBiAHIAdBGGo2AtAGIAcgB0HfEmo2AswGIAcgB0HfEmo2AsgGIAcgB0EUajYCxAYgByAHQRBqNgLABiAHIAdB3xJq",@@ -1098,7 +1098,7 @@10981098 "QQRqIAdBIGpBkAb8CgAAQQAhAiAHQQA2ArAGIAdBsAZqQQRyIAdByAxqQZQG/AoAACAHQbAGahC+AkEIaiEBCyAAIAI2AgggACABQQAgAhs2AgQgAEEAIAEg",10991099 "Ahs2AgAgB0HgEmokAAvdAgEBfyMAQeASayIHJAAgByACNgIMIAcgATYCCCAHIAM2AhAgByAENgIUIAcgBTYCGCAHIAY2AhwgByAHQd8SajYC3AYgByAHQd8S",11001100 "ajYC2AYgByAHQRxqNgLUBiAHIAdBGGo2AtAGIAcgB0HfEmo2AswGIAcgB0HfEmo2AsgGIAcgB0EUajYCxAYgByAHQRBqNgLABiAHIAdB3xJqNgK8BiAHIAdB",1101- "3xJqNgK4BiAHIAdBDGo2ArQGIAcgB0EIajYCsAYgB0EgaiAHQbAGahCmAQJAAkAgBygCIEGDgICAeEcNAEEBIQIgBygCJCEBDAELIAdByAxqQQRqIAdBIGpB",1101+ "3xJqNgK4BiAHIAdBDGo2ArQGIAcgB0EIajYCsAYgB0EgaiAHQbAGahCoAQJAAkAgBygCIEGDgICAeEcNAEEBIQIgBygCJCEBDAELIAdByAxqQQRqIAdBIGpB",11021102 "kAb8CgAAQQAhAiAHQQA2ArAGIAdBsAZqQQRyIAdByAxqQZQG/AoAACAHQbAGahC+AkEIaiEBCyAAIAI2AgggACABQQAgAhs2AgQgAEEAIAEgAhs2AgAgB0Hg",11031103 "EmokAAv6AgECfyMAQRBrIgIkACAAQQFqIQMCQAJAAkACQAJAAkACQAJAAkAgAC0AAA4IAAECAwQFBgcACyACIAM2AgQgAkEXNgIMIAIgAkEEajYCCCABKAIA",11041104 "IAEoAgRByITAACACQQhqECwhAAwHCyACIAM2AgQgAkEYNgIMIAIgAkEEajYCCCABKAIAIAEoAgRB2oTAACACQQhqECwhAAwGCyACIAM2AgQgAkEZNgIMIAIg",@@ -1247,7 +1247,7 @@12471247 "DCIGRQ0AIAUoAgghCAJAAkAgAg0AAkAgCEUNACAJIAggBhCCAwsgASADNgIEDAELIAQgAmwhBwJAAkACQCAEDQAgCEUNASAJIAggBhCCAwwBCyAJIAggBiAH",12481248 "EPACIQQMAQsgBiEECyAERQ0CIAEgBDYCBAsgASACNgIAC0GBgICAeCEGCyAAIAc2AgQgACAGNgIAIAVBEGokAAv+AQEIfyMAQSBrIgIkACACQRhqIAEoAgAo",12491249 "AgAgASgCBCgCABCZAiACKAIcIQMgAigCGCEEIAJBEGogASgCECgCACABKAIUKAIAEJkCIAIoAhQhBSACKAIQIQYgAkEIaiABKAIgKAIAIAEoAiQoAgAQmQIg",1250- "AigCDCEHIAIoAgghCCACIAEoAjAoAgAgASgCNCgCABCZAiAAIAQgAyAGIAUgCCAHIAIoAgAiCSACKAIEIgEQtQECQCABRQ0AIAkgAUEBEIIDCwJAIAdFDQAg",1250+ "AigCDCEHIAIoAgghCCACIAEoAjAoAgAgASgCNCgCABCZAiAAIAQgAyAGIAUgCCAHIAIoAgAiCSACKAIEIgEQswECQCABRQ0AIAkgAUEBEIIDCwJAIAdFDQAg",12511251 "CCAHQQEQggMLAkAgBUUNACAGIAVBARCCAwsCQCADRQ0AIAQgA0EBEIIDCyACQSBqJAAL/gEBCH8jAEEgayICJAAgAkEYaiABKAIAKAIAIAEoAgQoAgAQmQIg",12521252 "AigCHCEDIAIoAhghBCACQRBqIAEoAhAoAgAgASgCFCgCABCZAiACKAIUIQUgAigCECEGIAJBCGogASgCICgCACABKAIkKAIAEJkCIAIoAgwhByACKAIIIQgg",12531253 "AiABKAIwKAIAIAEoAjQoAgAQmQIgACAEIAMgBiAFIAggByACKAIAIgkgAigCBCIBELYBAkAgAUUNACAJIAFBARCCAwsCQCAHRQ0AIAggB0EBEIIDCwJAIAVF",@@ -1279,12 +1279,12 @@12791279 "EGoQzwIgAiACKQMINwMYIAIgAikDADcDECACQTBqIAEgAkEQahAtIAIgAikAOCIHNwMIIAIgAikAMCIINwMAIAIgBzcDGCACIAg3AxBBDyEDIAJBEGohBANA",12801280 "IAQtAAAhBSAEIAJBEGogA2oiBi0AADoAACAGIAU6AAAgBEEBaiEEIANBf2oiA0EHRw0ACyACQTBqIAJBEGoQgAIgAEHgA2ogAkEwakIAQgAQswIgACABQeAD",12811281 "/AoAACACQdAAaiQAC9wBAQJ/IwBBwABrIgQkACAEIAM2AhggBCACNgIUIAQgATYCOCAEIARBP2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2Aigg",1282- "BEEcaiAEQShqEOQBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEg",1282+ "BEEcaiAEQShqEOMBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEg",12831283 "BCgCCCECIAQoAgwhBUEAIQMLIAAgAzYCDCAAIAE2AgggACAFNgIEIAAgAjYCACAEQcAAaiQAC9wBAQJ/IwBBwABrIgQkACAEIAM2AhggBCACNgIUIAQgATYC",1284- "OCAEIARBP2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2AiggBEEcaiAEQShqEOMBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAh",1284+ "OCAEIARBP2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2AiggBEEcaiAEQShqEOIBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAh",12851285 "BQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEgBCgCCCECIAQoAgwhBUEAIQMLIAAgAzYCDCAAIAE2AgggACAFNgIEIAAgAjYCACAE",12861286 "QcAAaiQAC9wBAQJ/IwBBwABrIgQkACAEIAM2AhggBCACNgIUIAQgATYCOCAEIARBP2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2AiggBEEcaiAE",1287- "QShqEOIBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEgBCgCCCEC",1287+ "QShqEOQBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAEIAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEgBCgCCCEC",12881288 "IAQoAgwhBUEAIQMLIAAgAzYCDCAAIAE2AgggACAFNgIEIAAgAjYCACAEQcAAaiQAC9wBAQJ/IwBBwABrIgQkACAEIAM2AhggBCACNgIUIAQgATYCOCAEIARB",12891289 "P2o2AjQgBCAEQT9qNgIwIAQgBEEYajYCLCAEIARBFGo2AiggBEEcaiAEQShqEOUBAkACQCAEKAIcQYCAgIB4Rw0AQQEhA0EAIQIgBCgCICEBQQAhBQwBCyAE",12901290 "IAQoAiQ2AjAgBCAEKQIcNwMoIARBCGogBEEoahDnAUEAIQEgBCgCCCECIAQoAgwhBUEAIQMLIAAgAzYCDCAAIAE2AgggACAFNgIEIAAgAjYCACAEQcAAaiQA",@@ -1321,12 +1321,12 @@13211321 "IAU2AgRBgYCAgHghBwsgACAINgIEIAAgBzYCACAGQRBqJAALtgEBA38jAEEQayIGJABBACEHAkACQCAFDQAMAQsgAyACaiICIANJDQAgBkEEaiABIAIgASgC",13221322 "AEEBdCIHIAIgB0sbIgdBCEEEQQEgBUGBCEkbIAVBAUYbIgggByAISxsiByAEIAUQcAJAIAYoAgRBAUcNACAGKAIMIQggBigCCCEHDAELIAYoAgghBSABIAc2",13231323 "AgAgASAFNgIEQYGAgIB4IQcLIAAgCDYCBCAAIAc2AgAgBkEQaiQAC8YBAQZ/IwBBIGsiAiQAIAJBGGogASgCACgCACABKAIEKAIAEJkCIAIoAhwhAyACKAIY",1324- "IQQgAkEQaiABKAIQKAIAIAEoAhQoAgAQmQIgAigCFCEFIAIoAhAhBiACQQhqIAEoAiAoAgAgASgCJCgCABCZAiAAIAQgAyAGIAUgAigCCCIHIAIoAgwiARC5",1324+ "IQQgAkEQaiABKAIQKAIAIAEoAhQoAgAQmQIgAigCFCEFIAIoAhAhBiACQQhqIAEoAiAoAgAgASgCJCgCABCZAiAAIAQgAyAGIAUgAigCCCIHIAIoAgwiARC0",13251325 "AQJAIAFFDQAgByABQQEQggMLAkAgBUUNACAGIAVBARCCAwsCQCADRQ0AIAQgA0EBEIIDCyACQSBqJAALxgEBBn8jAEEgayICJAAgAkEYaiABKAIAKAIAIAEo",13261326 "AgQoAgAQmQIgAigCHCEDIAIoAhghBCACQRBqIAEoAhAoAgAgASgCFCgCABCZAiACKAIUIQUgAigCECEGIAJBCGogASgCICgCACABKAIkKAIAEJkCIAAgBCAD",1327- "IAYgBSACKAIIIgcgAigCDCIBELMBAkAgAUUNACAHIAFBARCCAwsCQCAFRQ0AIAYgBUEBEIIDCwJAIANFDQAgBCADQQEQggMLIAJBIGokAAvGAQEGfyMAQSBr",1327+ "IAYgBSACKAIIIgcgAigCDCIBELUBAkAgAUUNACAHIAFBARCCAwsCQCAFRQ0AIAYgBUEBEIIDCwJAIANFDQAgBCADQQEQggMLIAJBIGokAAvGAQEGfyMAQSBr",13281328 "IgIkACACQRhqIAEoAgAoAgAgASgCBCgCABCZAiACKAIcIQMgAigCGCEEIAJBEGogASgCECgCACABKAIUKAIAEJkCIAIoAhQhBSACKAIQIQYgAkEIaiABKAIg",1329- "KAIAIAEoAiQoAgAQmQIgACAEIAMgBiAFIAIoAggiByACKAIMIgEQtAECQCABRQ0AIAcgAUEBEIIDCwJAIAVFDQAgBiAFQQEQggMLAkAgA0UNACAEIANBARCC",1329+ "KAIAIAEoAiQoAgAQmQIgACAEIAMgBiAFIAIoAggiByACKAIMIgEQuQECQCABRQ0AIAcgAUEBEIIDCwJAIAVFDQAgBiAFQQEQggMLAkAgA0UNACAEIANBARCC",13301330 "AwsgAkEgaiQAC7kBAQJ/IwBB4ABrIgEkACABQQhqQQBBMPwLACAAQn9BAUEAQfS2wABBICABQQhqQTAQZSECIAFBMDYCPCABIAI2AjgCQCACQTBHDQAgAUIA",13311331 "NwNYIAFCADcDUCABQgA3A0ggAUIANwNAIAFBwABqQSAgAUEIakEgQZS3wAAQwwIgAEEgIAFBwABqQSBBhMHAABDDAiABQeAAaiQADwtBACABQThqIAFBPGpB",13321332 "pLfAAEHNAEHMt8AAEKwCAAu5AQECfyMAQeAAayIBJAAgAUEIakEAQTD8CwAgAEJ/QQFBAEH0tsAAQSAgAUEIakEwEEYhAiABQTA2AjwgASACNgI4AkAgAkEw",@@ -1346,13 +1346,13 @@13461346 "AWpBKGogAUEoakEo/AoAACADQagBakHQAGogAUHQAGpBKPwKAAAgA0GoAWogAUEo/AoAAAJAIAJBf2oiAUUNAANAIANBCGogA0GoAWoQUyADQagBaiADQQhq",13471347 "ELQCIAFBf2oiAQ0ACwsgA0GgAmogA0GoAWoQUyAAIANBoAJqEIwCIANBwANqJAALlAEBA39BACECIABBAEHAAPwLAANAIAAgAmoiA0EBaiABLQAAIgRBBHY6",13481348 "AAAgAyAEQQ9xOgAAIAFBAWohASACQQJqIgJBwABHDQALIAAtAAAhAUEAIQIDQCAAIAJqIgMgASABQQhqIgRB8AFxazoAACADQQFqIgEgAS0AACAEwEEEdWoi",1349- "AToAACACQQFqIgJBP0cNAAsLpAEBAX8jAEGgBmsiByQAIAcgASACIAMgBCAFIAZBACAHEA0CQAJAIAcoAgAiBkGDgICAeEcNACAHIAdBBHIiBSkCADcDkAYg",1350- "ByAFKAIIIgU2ApgGIAcoApQGIAUQpQMhBSAHQZAGahC5AyAHQZAGahCaAwwBCyAHKAIEIQUgAEEIaiAHQQhqQYgG/AoAAAsgACAGNgIAIAAgBTYCBCAHQaAG",1349+ "AToAACACQQFqIgJBP0cNAAsLpAEBAX8jAEGgBmsiCSQAIAkgASACIAMgBCAFIAYgByAIEAwCQAJAIAkoAgAiCEGDgICAeEcNACAJIAlBBHIiBykCADcDkAYg",1350+ "CSAHKAIIIgc2ApgGIAkoApQGIAcQpQMhByAJQZAGahC5AyAJQZAGahCaAwwBCyAJKAIEIQcgAEEIaiAJQQhqQYgG/AoAAAsgACAINgIAIAAgBzYCBCAJQaAG",13511351 "aiQAC6QBAQF/IwBBoAZrIgckACAHIAEgAiADIAQgBSAGQQAgBxAMAkACQCAHKAIAIgZBg4CAgHhHDQAgByAHQQRyIgUpAgA3A5AGIAcgBSgCCCIFNgKYBiAH",13521352 "KAKUBiAFEKUDIQUgB0GQBmoQuQMgB0GQBmoQmgMMAQsgBygCBCEFIABBCGogB0EIakGIBvwKAAALIAAgBjYCACAAIAU2AgQgB0GgBmokAAukAQEBfyMAQaAG",1353- "ayIJJAAgCSABIAIgAyAEIAUgBiAHIAgQDQJAAkAgCSgCACIIQYOAgIB4Rw0AIAkgCUEEciIHKQIANwOQBiAJIAcoAggiBzYCmAYgCSgClAYgBxClAyEHIAlB",1354- "kAZqELkDIAlBkAZqEJoDDAELIAkoAgQhByAAQQhqIAlBCGpBiAb8CgAACyAAIAg2AgAgACAHNgIEIAlBoAZqJAALpAEBAX8jAEGgBmsiCSQAIAkgASACIAMg",1355- "BCAFIAYgByAIEAwCQAJAIAkoAgAiCEGDgICAeEcNACAJIAlBBHIiBykCADcDkAYgCSAHKAIIIgc2ApgGIAkoApQGIAcQpQMhByAJQZAGahC5AyAJQZAGahCa",1353+ "ayIHJAAgByABIAIgAyAEIAUgBkEAIAcQDQJAAkAgBygCACIGQYOAgIB4Rw0AIAcgB0EEciIFKQIANwOQBiAHIAUoAggiBTYCmAYgBygClAYgBRClAyEFIAdB",1354+ "kAZqELkDIAdBkAZqEJoDDAELIAcoAgQhBSAAQQhqIAdBCGpBiAb8CgAACyAAIAY2AgAgACAFNgIEIAdBoAZqJAALpAEBAX8jAEGgBmsiCSQAIAkgASACIAMg",1355+ "BCAFIAYgByAIEA0CQAJAIAkoAgAiCEGDgICAeEcNACAJIAlBBHIiBykCADcDkAYgCSAHKAIIIgc2ApgGIAkoApQGIAcQpQMhByAJQZAGahC5AyAJQZAGahCa",13561356 "AwwBCyAJKAIEIQcgAEEIaiAJQQhqQYgG/AoAAAsgACAINgIAIAAgBzYCBCAJQaAGaiQAC30BAn4gACADKQMAIAEpAwAiBXwgAikDCCIGQj+JIAZCOImFIAZC",13571357 "B4iFfCAEKQMAIgZCLYkgBkIDiYUgBkIGiIV8NwMAIAAgBUI/iSAFQjiJhSAFQgeIhSABKQMIfCADKQMIfCAEKQMIIgVCLYkgBUIDiYUgBUIGiIV8NwMIC5gB",13581358 "AQR/IwBBEGsiAiQAQQEhAwJAIAEoAgAiBEEnIAEoAgQiBSgCECIBEQQADQAgAiAAKAIAQYECECgCQAJAIAItAA0iA0GBAUkNACAEIAIoAgAgAREEAEUNAUEB",@@ -1370,10 +1370,10 @@13701370 "BUGgBmokAAuPAQECfyMAQaAGayICJAACQAJAIAFFDQAgAUF4aiIDKAIAQQFHDQEgAkEIaiABQZgG/AoAACADQQA2AgACQCADQX9GDQAgAUF8aiIBIAEoAgBB",13711371 "f2oiATYCACABDQAgA0GgBkEIEIIDCyAAIAJBEGpBkAb8CgAAIAJBoAZqJAAPCxCXAwALQamAwABBPxCYAwALjwEBBH8jAEEQayIEJAAgBCADNgIMIAQgAjYC",13721372 "CAJAIAEoAhAiBQ0AQeinwAAQigMACyABKAIMIQYgBEEIahDoAiEHIABBADYCHCAAIAM2AhggACACNgIUIAAgASgCEDYCECAAIAEpAgg3AgggACABKQIANwIA",1373- "IAAgByAGIAVuIgEgByABSRs2AiAgBEEQaiQAC48BAQF/IwBBIGsiBCQAIAQgASACIAMQMCAEQQRqIQMCQAJAIAQoAgBBAUcNACAEIAMpAgA3AxAgBCADKAII",1373+ "IAAgByAGIAVuIgEgByABSRs2AiAgBEEQaiQAC48BAQF/IwBBIGsiBCQAIAQgASACIAMQQSAEQQRqIQMCQAJAIAQoAgBBAUcNACAEIAMpAgA3AxAgBCADKAII",13741374 "IgM2AhggBCgCFCADEKUDIQMgBEEQahC5AyAEQRBqEJoDIABBgICAgHg2AgAgACADNgIEDAELIAAgAygCCDYCCCAAIAMpAgA3AgALIARBIGokAAuPAQEBfyMA",1375- "QSBrIgQkACAEIAEgAiADEEEgBEEEaiEDAkACQCAEKAIAQQFHDQAgBCADKQIANwMQIAQgAygCCCIDNgIYIAQoAhQgAxClAyEDIARBEGoQuQMgBEEQahCaAyAA",1376- "QYCAgIB4NgIAIAAgAzYCBAwBCyAAIAMoAgg2AgggACADKQIANwIACyAEQSBqJAALjwEBAX8jAEEgayIEJAAgBCABIAIgAxBCIARBBGohAwJAAkAgBCgCAEEB",1375+ "QSBrIgQkACAEIAEgAiADEEIgBEEEaiEDAkACQCAEKAIAQQFHDQAgBCADKQIANwMQIAQgAygCCCIDNgIYIAQoAhQgAxClAyEDIARBEGoQuQMgBEEQahCaAyAA",1376+ "QYCAgIB4NgIAIAAgAzYCBAwBCyAAIAMoAgg2AgggACADKQIANwIACyAEQSBqJAALjwEBAX8jAEEgayIEJAAgBCABIAIgAxAwIARBBGohAwJAAkAgBCgCAEEB",13771377 "Rw0AIAQgAykCADcDECAEIAMoAggiAzYCGCAEKAIUIAMQpQMhAyAEQRBqELkDIARBEGoQmgMgAEGAgICAeDYCACAAIAM2AgQMAQsgACADKAIINgIIIAAgAykC",13781378 "ADcCAAsgBEEgaiQAC48BAQF/IwBBIGsiBCQAIAQgASACIAMQNyAEQQRqIQMCQAJAIAQoAgBBAUcNACAEIAMpAgA3AxAgBCADKAIIIgM2AhggBCgCFCADEKUD",13791379 "IQMgBEEQahC5AyAEQRBqEJoDIABBgICAgHg2AgAgACADNgIEDAELIAAgAygCCDYCCCAAIAMpAgA3AgALIARBIGokAAuGAQEBfyMAQTBrIgIkACACQgA3AxAg",@@ -1401,9 +1401,9 @@14011401 "CGoQJSADQQhqIANBMGoQayACQX9qIgINAAsLIAAgA0EIakEo/AoAACADQYABaiQAC4oBAQN/IwBBEGsiASQAAkAgACgCACICKAIEIgNBAXFFDQAgAigCACEC",14021402 "IAEgA0EBdjYCBCABIAI2AgAgAUG4wsIAIAAoAgQgACgCCCIALQAIIAAtAAkQigEACyABQYCAgIB4NgIAIAEgADYCDCABQdTCwgAgACgCBCAAKAIIIgAtAAgg",14031403 "AC0ACRCKAQALhgEAIABBADYCNCAAQgA3AiwgAEIANwIkIAAgASkAGDcCCCAAIAEpABA3AgAgACABKAAAQf///x9xNgIQIAAgASgADEEIdkH//z9xNgIgIAAg",1404- "ASgACUEGdkH//8AfcTYCHCAAIAEoAAZBBHZB/4H/H3E2AhggACABKAADQQJ2QYP+/x9xNgIUC3wBAn8jAEEgayICJAAgAkEEaiABEPkBAkACQCACKAIEQYCA",1404+ "ASgACUEGdkH//8AfcTYCHCAAIAEoAAZBBHZB/4H/H3E2AhggACABKAADQQJ2QYP+/x9xNgIUC3wBAn8jAEEgayICJAAgAkEEaiABEPgBAkACQCACKAIEQYCA",14051405 "gIB4Rw0AQQAhAQwBCyACIAIpAgQ3AxAgAiACKAIMIgE2AhggAigCFCABEKUDIQMgAkEQahC5AyACQRBqEJoDQQEhAQsgACADNgIEIAAgATYCACACQSBqJAAL",1406- "fAECfyMAQSBrIgIkACACQQRqIAEQ+AECQAJAIAIoAgRBgICAgHhHDQBBACEBDAELIAIgAikCBDcDECACIAIoAgwiATYCGCACKAIUIAEQpQMhAyACQRBqELkD",1406+ "fAECfyMAQSBrIgIkACACQQRqIAEQ+QECQAJAIAIoAgRBgICAgHhHDQBBACEBDAELIAIgAikCBDcDECACIAIoAgwiATYCGCACKAIUIAEQpQMhAyACQRBqELkD",14071407 "IAJBEGoQmgNBASEBCyAAIAM2AgQgACABNgIAIAJBIGokAAt/AQF/IAItAAAhAxCvA0EgQQEQjwMhAgJAAkACQCADQQFHDQACQCACRQ0AQbTFwAAhAwwCC0EB",14081408 "QSAQnwMACyACRQ0BQZTFwAAhAwsgAkIANwAYIAJCADcAECACQgA3AAggAkIANwAAIAAgAzYCBCAAIAI2AgAPC0EBQSAQnwMAC4ABAQF/IwBBMGsiAyQAIAIg",14091409 "Ai0AAEH4AXE6AAAgAiACLQAfQT9xQcAAcjoAHyADIAIpAAg3AwggAyACKQAQNwMQIAMgAikAADcDACADIAIpABg3AxggA0EBNgIsIANCgICAgIAgNwIkIAMg",@@ -1464,8 +1464,8 @@14641464 "AvTcQkEBajYC9NxCQQIhAQsgAQtFAQF/IAAgAhDKAiAAKAIIIQMCQCACRQ0AAkAgAkUNACAAKAIEIANqIAEgAvwKAAALIAAoAgghAwsgACADIAJqNgIIQQAL",14651465 "QwIBfwF+IwBBIGsiAiQAIAJBFGogARD0ASACQQhqIAIoAhQQ1gEgAikDCCEDIAJBFGoQrgIgACADNwMAIAJBIGokAAtDAgF/AX4jAEEgayICJAAgAkEUaiAB",14661466 "EPQBIAJBCGogAigCFBDXASACKQMIIQMgAkEUahCuAiAAIAM3AwAgAkEgaiQAC0UBAX8jAEEQayIEJAAgBEEIaiABKAIAIAIgAyABKAIEKAIcEQcAIAQtAAkh",1467- "ASAAIAQtAAg6AAAgACABOgABIARBEGokAAtAAQJ/IwBBEGsiAiQAIAJBCGogARCQAiACKAIMIQEgACACKAIIIgM2AgQgACABQQAgA0EBcRs2AgAgAkEQaiQA",1468- "C0ABAn8jAEEQayICJAAgAkEIaiABEI8CIAIoAgwhASAAIAIoAggiAzYCBCAAIAFBACADQQFxGzYCACACQRBqJAALRAEBfyMAQRBrIgUkACAFQQhqIAAgASAC",1467+ "ASAAIAQtAAg6AAAgACABOgABIARBEGokAAtAAQJ/IwBBEGsiAiQAIAJBCGogARCPAiACKAIMIQEgACACKAIIIgM2AgQgACABQQAgA0EBcRs2AgAgAkEQaiQA",1468+ "C0ABAn8jAEEQayICJAAgAkEIaiABEJACIAIoAgwhASAAIAIoAggiAzYCBCAAIAFBACADQQFxGzYCACACQRBqJAALRAEBfyMAQRBrIgUkACAFQQhqIAAgASAC",14691469 "IAMgBBCkAQJAIAUoAggiBEGBgICAeEYNACAEIAUoAgwQ3AIACyAFQRBqJAALRwEBfyMAQaABayICJAAgASABLQAAQfgBcToAACABIAEtAB9BP3FBwAByOgAf",14701470 "IAJBoNLAACABEEMgACACEK4BIAJBoAFqJAALRAEBfyMAQRBrIgUkACAFQQhqIAAgASACIAMgBBClAQJAIAUoAggiBEGBgICAeEYNACAEIAUoAgwQ3AIACyAF",14711471 "QRBqJAALUQEBfwJAAkACQCAAKAIAIgFBgICAgHggAUGAgICAeEsbQf////8HcQ4CAAECCyABQYCAgIB4Rg0BIAAQrQEPCyAAQQhqELACIABBIGoQsAILCz8B",