@soapbox.pub/wasmboy
Version:
Soapbox fork of Wasmboy.
468 lines (392 loc) • 101 kB
JavaScript
(function () {
'use strict';
function getEventData(event) {
if (event.data) {
return event.data;
}
return event;
}
const isInBrowser = typeof self !== 'undefined'; // Function to read a base64 string as a buffer
// Isomorphic worker api to be imported by web workers
let parentPort;
if (!isInBrowser) {
parentPort = require('worker_threads').parentPort;
} // https://nodejs.org/api/worker_threads.html#worker_threads_worker_postmessage_value_transferlist
// https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage
function postMessage(message, transferArray) {
// Can't bind parentPort.postMessage, so we need to kinda copy code here :p
if (isInBrowser) {
self.postMessage(message, transferArray);
} else {
parentPort.postMessage(message, transferArray);
}
} // https://nodejs.org/api/worker_threads.html#worker_threads_worker_parentport
// https://developer.mozilla.org/en-US/docs/Web/API/Worker/onmessage
function onMessage(callback, port) {
if (!callback) {
console.error('workerapi: No callback was provided to onMessage!');
} // If we passed a port, use that
if (port) {
if (isInBrowser) {
// We are in the browser
port.onmessage = callback;
} else {
// We are in Node
port.on('message', callback);
}
return;
}
if (isInBrowser) {
// We are in the browser
self.onmessage = callback;
} else {
// We are in Node
parentPort.on('message', callback);
}
}
const WORKER_MESSAGE_TYPE = {
CONNECT: 'CONNECT',
INSTANTIATE_WASM: 'INSTANTIATE_WASM',
CLEAR_MEMORY: 'CLEAR_MEMORY',
CLEAR_MEMORY_DONE: 'CLEAR_MEMORY_DONE',
GET_MEMORY: 'GET_MEMORY',
SET_MEMORY: 'SET_MEMORY',
SET_MEMORY_DONE: 'SET_MEMORY_DONE',
GET_CONSTANTS: 'GET_CONSTANTS',
GET_CONSTANTS_DONE: 'GET_CONSTANTS_DONE',
CONFIG: 'CONFIG',
RESET_AUDIO_QUEUE: 'RESET_AUDIO_QUEUE',
PLAY: 'PLAY',
BREAKPOINT: 'BREAKPOINT',
PAUSE: 'PAUSE',
UPDATED: 'UPDATED',
CRASHED: 'CRASHED',
SET_JOYPAD_STATE: 'SET_JOYPAD_STATE',
AUDIO_LATENCY: 'AUDIO_LATENCY',
RUN_WASM_EXPORT: 'RUN_WASM_EXPORT',
GET_WASM_MEMORY_SECTION: 'GET_WASM_MEMORY_SECTION',
GET_WASM_CONSTANT: 'GET_WASM_CONSTANT',
FORCE_OUTPUT_FRAME: 'FORCE_OUTPUT_FRAME',
SET_SPEED: 'SET_SPEED',
IS_GBC: 'IS_GBC'
};
const WORKER_ID = {
LIB: 'LIB',
GRAPHICS: 'GRAPHICS',
MEMORY: 'MEMORY',
CONTROLLER: 'CONTROLLER',
AUDIO: 'AUDIO'
};
const MEMORY_TYPE = {
BOOT_ROM: 'BOOT_ROM',
CARTRIDGE_RAM: 'CARTRIDGE_RAM',
CARTRIDGE_ROM: 'CARTRIDGE_ROM',
CARTRIDGE_HEADER: 'CARTRIDGE_HEADER',
GAMEBOY_MEMORY: 'GAMEBOY_MEMORY',
PALETTE_MEMORY: 'PALETTE_MEMORY',
INTERNAL_STATE: 'INTERNAL_STATE'
};
// Smarter workers.
let idCounter = 0;
const generateId = () => {
const randomId = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);
idCounter++;
const id = `${randomId}-${idCounter}`;
if (idCounter > 100000) {
idCounter = 0;
}
return id;
};
function getSmartWorkerMessage(message, messageId, workerId) {
if (!messageId) {
messageId = generateId();
}
return {
workerId,
messageId,
message
};
}
// to the lib worker
function graphicsWorkerOnMessage(libWorker, event) {
// Handle our messages from the main thread
const eventData = getEventData(event);
switch (eventData.message.type) {
case WORKER_MESSAGE_TYPE.GET_CONSTANTS:
{
libWorker.WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION = libWorker.wasmInstance.exports.FRAME_LOCATION.valueOf();
libWorker.WASMBOY_CURRENT_FRAME_SIZE = libWorker.wasmInstance.exports.FRAME_SIZE.valueOf(); // Forward to our lib worker
libWorker.graphicsWorkerPort.postMessage(getSmartWorkerMessage({
type: WORKER_MESSAGE_TYPE.GET_CONSTANTS_DONE,
WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION: libWorker.wasmInstance.exports.FRAME_LOCATION.valueOf()
}, eventData.messageId));
return;
}
}
}
function audioWorkerOnMessage(libWorker, event) {
// Handle our messages from the main thread
const eventData = getEventData(event);
switch (eventData.message.type) {
case WORKER_MESSAGE_TYPE.GET_CONSTANTS:
{
libWorker.WASMBOY_SOUND_OUTPUT_LOCATION = libWorker.wasmInstance.exports.AUDIO_BUFFER_LOCATION.valueOf();
libWorker.WASMBOY_CHANNEL_1_OUTPUT_LOCATION = libWorker.wasmInstance.exports.CHANNEL_1_BUFFER_LOCATION.valueOf();
libWorker.WASMBOY_CHANNEL_2_OUTPUT_LOCATION = libWorker.wasmInstance.exports.CHANNEL_2_BUFFER_LOCATION.valueOf();
libWorker.WASMBOY_CHANNEL_3_OUTPUT_LOCATION = libWorker.wasmInstance.exports.CHANNEL_3_BUFFER_LOCATION.valueOf();
libWorker.WASMBOY_CHANNEL_4_OUTPUT_LOCATION = libWorker.wasmInstance.exports.CHANNEL_4_BUFFER_LOCATION.valueOf(); // Forward to our lib worker
libWorker.audioWorkerPort.postMessage(getSmartWorkerMessage({
type: WORKER_MESSAGE_TYPE.GET_CONSTANTS_DONE,
WASMBOY_SOUND_OUTPUT_LOCATION: libWorker.wasmInstance.exports.AUDIO_BUFFER_LOCATION.valueOf()
}, eventData.messageId));
return;
}
case WORKER_MESSAGE_TYPE.AUDIO_LATENCY:
{
libWorker.currentAudioLatencyInSeconds = eventData.message.latency;
return;
}
}
}
function controllerWorkerOnMessage(libWorker, event) {
// Handle our messages from the main thread
const eventData = getEventData(event);
switch (eventData.message.type) {
case WORKER_MESSAGE_TYPE.SET_JOYPAD_STATE:
{
// Config will come in as an array, pass in values using apply
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
const setJoypadStateParamsAsArray = eventData.message.setJoypadStateParamsAsArray;
libWorker.wasmInstance.exports.setJoypadState.apply(libWorker, setJoypadStateParamsAsArray);
return;
}
}
}
// Function to get the boot ROM
function getBootRom(libWorker) {
if (!libWorker.wasmByteMemory) {
return new Uint8Array();
} // Header is at 0x0134 - 0x014F
// http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header
const bootRomLocation = libWorker.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf();
const bootRomSize = libWorker.wasmInstance.exports.BOOT_ROM_SIZE.valueOf();
const bootRom = libWorker.wasmByteMemory.slice(bootRomLocation, bootRomLocation + bootRomSize);
return bootRom;
}
// Private function to get the caretridge rom
function getCartridgeRom(libWorker) {
if (!libWorker.wasmByteMemory) {
return new Uint8Array();
} // Depening on the rom type, we will have different rom sizes.
// Due memory restrictions described in:
// https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa
// We will make sure to only store as much as we need per ROM :)
// Similar to `initializeCartridgeType()` in `wasm/memory/memory.ts`
// We will determine our cartridge type
// Get our game MBC type from the cartridge header
// http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header
let cartridgeType = libWorker.wasmByteMemory[libWorker.WASMBOY_GAME_BYTES_LOCATION + 0x0147];
let romSize = undefined;
if (cartridgeType === 0x00) {
// ROM only, 32KB
romSize = 0x8000;
} else if (cartridgeType >= 0x01 && cartridgeType <= 0x03) {
// MBC1 2MB of ROM
romSize = 0x200000;
} else if (cartridgeType >= 0x05 && cartridgeType <= 0x06) {
// MBC2 256KB ROM
romSize = 0x40000;
} else if (cartridgeType >= 0x0f && cartridgeType <= 0x13) {
// MBC3 2MB of ROM
romSize = 0x200000;
} else if (cartridgeType >= 0x19 && cartridgeType <= 0x1e) {
// MBC5 8MB of ROM
romSize = 0x800000;
}
if (!romSize) {
return new Uint8Array();
} // Finally fill our cartridgeRam from the ram in memory
const cartridgeRom = libWorker.wasmByteMemory.slice(libWorker.WASMBOY_GAME_BYTES_LOCATION, libWorker.WASMBOY_GAME_BYTES_LOCATION + romSize);
return cartridgeRom;
}
// Private function to get the cartridge ram
function getCartridgeRam(libWorker) {
if (!libWorker.wasmByteMemory) {
return new Uint8Array();
} // Depening on the rom type, we will have different ram sizes.
// Due memory restrictions described in:
// https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa
// We will make sure to only store as much as we need per ROM :)
// Similar to `initializeCartridgeType()` in `wasm/memory/memory.ts`
// We will determine our cartridge type
// Get our game MBC type from the cartridge header
// http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header
let cartridgeType = libWorker.wasmByteMemory[libWorker.WASMBOY_GAME_BYTES_LOCATION + 0x0147];
let ramSize = undefined;
if (cartridgeType === 0x00) {
// No memory for this rom type
return new Uint8Array();
} else if (cartridgeType >= 0x01 && cartridgeType <= 0x03) {
// MBC1 32KB of Ram
ramSize = 0x8000;
} else if (cartridgeType >= 0x05 && cartridgeType <= 0x06) {
// MBC2 512X4 Bytes, 2KB
ramSize = 0x800;
} else if (cartridgeType >= 0x0f && cartridgeType <= 0x13) {
// MBC3 32KB of Ram
ramSize = 0x8000;
} else if (cartridgeType >= 0x19 && cartridgeType <= 0x1e) {
// MBC5 128KB of Ram
ramSize = 0x20000;
}
if (!ramSize) {
return new Uint8Array();
} // Finally fill our cartridgeRam from the ram in memory
const cartridgeRam = libWorker.wasmByteMemory.slice(libWorker.WASMBOY_GAME_RAM_BANKS_LOCATION, libWorker.WASMBOY_GAME_RAM_BANKS_LOCATION + ramSize);
return cartridgeRam;
}
// Function to get the cartridge header
function getCartridgeHeader(libWorker) {
if (!libWorker.wasmByteMemory) {
return new Uint8Array();
} // Header is at 0x0134 - 0x014F
// http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header
const headerLength = 0x014f - 0x0134;
const headerLocation = libWorker.WASMBOY_GAME_BYTES_LOCATION + 0x0134;
const headerArray = libWorker.wasmByteMemory.slice(headerLocation, headerLocation + headerLength);
return headerArray;
}
// Returns the standard 0xFFFF gameboy memory
// You will normally see in gameboy docs.
// This is returned from the core, and represents
// This wasmboy gameboy state
function getGameBoyMemory(libWorker) {
return libWorker.wasmByteMemory.slice(libWorker.WASMBOY_INTERNAL_MEMORY_LOCATION, libWorker.WASMBOY_INTERNAL_MEMORY_LOCATION + libWorker.WASMBOY_INTERNAL_MEMORY_SIZE);
}
// Function to get the current palette data for
// GBC in memory. This is needed to load state with
// The correct colors
function getPaletteMemory(libWorker) {
return libWorker.wasmByteMemory.slice(libWorker.WASMBOY_PALETTE_MEMORY_LOCATION, libWorker.WASMBOY_PALETTE_MEMORY_LOCATION + libWorker.WASMBOY_PALETTE_MEMORY_SIZE);
}
// Returns the internal savestate of the wasmboy core,
// To save all soft values held in memory
function getInternalState(libWorker) {
libWorker.wasmInstance.exports.saveState();
return libWorker.wasmByteMemory.slice(libWorker.WASMBOY_INTERNAL_STATE_LOCATION, libWorker.WASMBOY_INTERNAL_STATE_LOCATION + libWorker.WASMBOY_INTERNAL_STATE_SIZE);
}
// posts to lib Worker
function memoryWorkerOnMessage(libWorker, event) {
// Handle our messages from the main thread
const eventData = getEventData(event);
switch (eventData.message.type) {
case WORKER_MESSAGE_TYPE.CLEAR_MEMORY:
{
// Clear Wasm memory
// https://docs.google.com/spreadsheets/d/17xrEzJk5-sCB9J2mMJcVnzhbE-XH_NvczVSQH9OHvRk/edit?usp=sharing
for (let i = 0; i <= libWorker.wasmByteMemory.length; i++) {
libWorker.wasmByteMemory[i] = 0;
}
const wasmByteMemory = libWorker.wasmByteMemory.slice(0);
libWorker.memoryWorkerPort.postMessage(getSmartWorkerMessage({
type: WORKER_MESSAGE_TYPE.CLEAR_MEMORY_DONE,
wasmByteMemory: wasmByteMemory.buffer
}, eventData.messageId), [wasmByteMemory.buffer]);
return;
}
case WORKER_MESSAGE_TYPE.GET_CONSTANTS:
{
libWorker.WASMBOY_BOOT_ROM_LOCATION = libWorker.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf();
libWorker.WASMBOY_GAME_BYTES_LOCATION = libWorker.wasmInstance.exports.CARTRIDGE_ROM_LOCATION.valueOf();
libWorker.WASMBOY_GAME_RAM_BANKS_LOCATION = libWorker.wasmInstance.exports.CARTRIDGE_RAM_LOCATION.valueOf(), libWorker.WASMBOY_INTERNAL_STATE_SIZE = libWorker.wasmInstance.exports.WASMBOY_STATE_SIZE.valueOf(), libWorker.WASMBOY_INTERNAL_STATE_LOCATION = libWorker.wasmInstance.exports.WASMBOY_STATE_LOCATION.valueOf(), libWorker.WASMBOY_INTERNAL_MEMORY_SIZE = libWorker.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_SIZE.valueOf(), libWorker.WASMBOY_INTERNAL_MEMORY_LOCATION = libWorker.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_LOCATION.valueOf(), libWorker.WASMBOY_PALETTE_MEMORY_SIZE = libWorker.wasmInstance.exports.GBC_PALETTE_SIZE.valueOf(), libWorker.WASMBOY_PALETTE_MEMORY_LOCATION = libWorker.wasmInstance.exports.GBC_PALETTE_LOCATION.valueOf(); // Forward to our lib worker
libWorker.memoryWorkerPort.postMessage(getSmartWorkerMessage({
type: WORKER_MESSAGE_TYPE.GET_CONSTANTS_DONE,
WASMBOY_BOOT_ROM_LOCATION: libWorker.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf(),
WASMBOY_GAME_BYTES_LOCATION: libWorker.wasmInstance.exports.CARTRIDGE_ROM_LOCATION.valueOf(),
WASMBOY_GAME_RAM_BANKS_LOCATION: libWorker.wasmInstance.exports.CARTRIDGE_RAM_LOCATION.valueOf(),
WASMBOY_INTERNAL_STATE_SIZE: libWorker.wasmInstance.exports.WASMBOY_STATE_SIZE.valueOf(),
WASMBOY_INTERNAL_STATE_LOCATION: libWorker.wasmInstance.exports.WASMBOY_STATE_LOCATION.valueOf(),
WASMBOY_INTERNAL_MEMORY_SIZE: libWorker.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_SIZE.valueOf(),
WASMBOY_INTERNAL_MEMORY_LOCATION: libWorker.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_LOCATION.valueOf(),
WASMBOY_PALETTE_MEMORY_SIZE: libWorker.wasmInstance.exports.GBC_PALETTE_SIZE.valueOf(),
WASMBOY_PALETTE_MEMORY_LOCATION: libWorker.wasmInstance.exports.GBC_PALETTE_LOCATION.valueOf()
}, eventData.messageId));
return;
}
case WORKER_MESSAGE_TYPE.SET_MEMORY:
{
const memoryKeys = Object.keys(eventData.message);
if (memoryKeys.includes(MEMORY_TYPE.BOOT_ROM)) {
libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.BOOT_ROM]), libWorker.WASMBOY_BOOT_ROM_LOCATION);
}
if (memoryKeys.includes(MEMORY_TYPE.CARTRIDGE_ROM)) {
libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.CARTRIDGE_ROM]), libWorker.WASMBOY_GAME_BYTES_LOCATION);
}
if (memoryKeys.includes(MEMORY_TYPE.CARTRIDGE_RAM)) {
libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.CARTRIDGE_RAM]), libWorker.WASMBOY_GAME_RAM_BANKS_LOCATION);
}
if (memoryKeys.includes(MEMORY_TYPE.GAMEBOY_MEMORY)) {
libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.GAMEBOY_MEMORY]), libWorker.WASMBOY_INTERNAL_MEMORY_LOCATION);
}
if (memoryKeys.includes(MEMORY_TYPE.PALETTE_MEMORY)) {
libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.PALETTE_MEMORY]), libWorker.WASMBOY_PALETTE_MEMORY_LOCATION);
}
if (memoryKeys.includes(MEMORY_TYPE.INTERNAL_STATE)) {
libWorker.wasmByteMemory.set(new Uint8Array(eventData.message[MEMORY_TYPE.INTERNAL_STATE]), libWorker.WASMBOY_INTERNAL_STATE_LOCATION);
libWorker.wasmInstance.exports.loadState();
}
libWorker.memoryWorkerPort.postMessage(getSmartWorkerMessage({
type: WORKER_MESSAGE_TYPE.SET_MEMORY_DONE
}, eventData.messageId));
return;
}
case WORKER_MESSAGE_TYPE.GET_MEMORY:
{
// Construct our data object
const responseMemory = {
type: WORKER_MESSAGE_TYPE.GET_MEMORY
};
const responseTransferrables = [];
const memoryTypes = eventData.message.memoryTypes;
if (memoryTypes.includes(MEMORY_TYPE.BOOT_ROM)) {
const bootRom = getBootRom(libWorker).buffer;
responseMemory[MEMORY_TYPE.BOOT_ROM] = bootRom;
responseTransferrables.push(bootRom);
}
if (memoryTypes.includes(MEMORY_TYPE.CARTRIDGE_ROM)) {
const cartridgeRom = getCartridgeRom(libWorker).buffer;
responseMemory[MEMORY_TYPE.CARTRIDGE_ROM] = cartridgeRom;
responseTransferrables.push(cartridgeRom);
}
if (memoryTypes.includes(MEMORY_TYPE.CARTRIDGE_RAM)) {
const cartridgeRam = getCartridgeRam(libWorker).buffer;
responseMemory[MEMORY_TYPE.CARTRIDGE_RAM] = cartridgeRam;
responseTransferrables.push(cartridgeRam);
}
if (memoryTypes.includes(MEMORY_TYPE.CARTRIDGE_HEADER)) {
const cartridgeHeader = getCartridgeHeader(libWorker).buffer;
responseMemory[MEMORY_TYPE.CARTRIDGE_HEADER] = cartridgeHeader;
responseTransferrables.push(cartridgeHeader);
}
if (memoryTypes.includes(MEMORY_TYPE.GAMEBOY_MEMORY)) {
const gameboyMemory = getGameBoyMemory(libWorker).buffer;
responseMemory[MEMORY_TYPE.GAMEBOY_MEMORY] = gameboyMemory;
responseTransferrables.push(gameboyMemory);
}
if (memoryTypes.includes(MEMORY_TYPE.PALETTE_MEMORY)) {
const paletteMemory = getPaletteMemory(libWorker).buffer;
responseMemory[MEMORY_TYPE.PALETTE_MEMORY] = paletteMemory;
responseTransferrables.push(paletteMemory);
}
if (memoryTypes.includes(MEMORY_TYPE.INTERNAL_STATE)) {
libWorker.wasmInstance.exports.saveState();
const internalState = getInternalState(libWorker).buffer;
responseMemory[MEMORY_TYPE.INTERNAL_STATE] = internalState;
responseTransferrables.push(internalState);
}
libWorker.memoryWorkerPort.postMessage(getSmartWorkerMessage(responseMemory, eventData.messageId), responseTransferrables);
return;
}
}
}
var wasmModuleUrl = "data:application/wasm;base64,AGFzbQEAAAABfRBgAAF/YAF/AX9gAX8AYAAAYAJ/fwF/YAJ/fwBgA39/fwBgBn9/f39/fwBgBH9/f38AYAd/f39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGADf39/AX9gBH9/f38Bf2AFf39/f38Bf2ANf39/f39/f39/f39/fwF/Ag0BA2VudgVhYm9ydAAIA5YBlAEFBQYABAYMBAECAQMCAgMDAwsAAwMDAwMDAwMAAAAADgQPCQcHBQICAwEBAQEBDQICAwEAAQEFAwICAgIEAgICAgQFBgQDAgICAAUGAQEBAQEBAQECAgECAgEBAgEBAQEBAQEBAgAAAAEAAQAAAAIKAgMCAwIDAAAAAAAAAAAAAAAAAAAAAAIDAwAAAAADAwMCAQQCBQMBAAEG3guYAn8BQQALfwFBAAt/AEEAC38AQYAIC38AQYAIC38AQYAIC38AQYAQC38AQYCAAQt/AEGAkAELfwBBgIACC38AQYCQAwt/AEGAgAELfwBBgBALfwBBgIAEC38AQYCQBAt/AEGAAQt/AEGAkQQLfwBBgLgBC38AQYDJBQt/AEGA2AULfwBBgKELC38AQYCADAt/AEGAoRcLfwBBgIAJC38AQYChIAt/AEGA+AALfwBBgJAEC38AQYCJHQt/AEGAmSELfwBBgIAIC38AQYCZKQt/AEGAgAgLfwBBgJkxC38AQYCACAt/AEGAmTkLfwBBgIAIC38AQYCZwQALfwBBgIAIC38AQYCZyQALfwBBgIAIC38AQYCZ0QALfwBBgBQLfwBBgK3RAAt/AEGAiPgDC38AQYC1yQQLfwBB//8DC38AQQALfwBBgLXNBAt/AEGUAQt/AUEAC38BQQELfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQX8LfwFBfwt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEPC38BQQ8LfwFBDwt/AUEPC38BQQALfwFBAAt/AUEAC38BQQALfwFB/wALfwFB/wALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAQt/AUEBC38BQQELfwFBAQt/AUEBC38BQQELfwFBAQt/AUEBC38BQQELfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBfwt/AUF/C38BQX8LfwFBAAt/AUEAC38BQQALfwFBAQt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAQt/AUEBC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQYCo1rkHC38BQQALfwFBAAt/AUGAqNa5Bwt/AUEAC38BQQALfwFBAAt/AEGgCQt/AUEACwedEWkGbWVtb3J5AgAHX19hbGxvYwAICF9fcmV0YWluAAkJX19yZWxlYXNlAAoJX19jb2xsZWN0AJABC19fcnR0aV9iYXNlA5YCBmNvbmZpZwASDmhhc0NvcmVTdGFydGVkABMJc2F2ZVN0YXRlABYJbG9hZFN0YXRlABsFaXNHQkMAHBJnZXRTdGVwc1BlclN0ZXBTZXQAHQtnZXRTdGVwU2V0cwAeCGdldFN0ZXBzAB8VZXhlY3V0ZU11bHRpcGxlRnJhbWVzAGsMZXhlY3V0ZUZyYW1lAGoZZXhlY3V0ZUZyYW1lQW5kQ2hlY2tBdWRpbwCSARVleGVjdXRlVW50aWxDb25kaXRpb24AkwELZXhlY3V0ZVN0ZXAAZxRnZXRDeWNsZXNQZXJDeWNsZVNldABsDGdldEN5Y2xlU2V0cwBtCWdldEN5Y2xlcwBuDnNldEpveXBhZFN0YXRlAHAfZ2V0TnVtYmVyT2ZTYW1wbGVzSW5BdWRpb0J1ZmZlcgBoEGNsZWFyQXVkaW9CdWZmZXIAFxxzZXRNYW51YWxDb2xvcml6YXRpb25QYWxldHRlAA0XV0FTTUJPWV9NRU1PUllfTE9DQVRJT04DLhNXQVNNQk9ZX01FTU9SWV9TSVpFAy8SV0FTTUJPWV9XQVNNX1BBR0VTAzAeQVNTRU1CTFlTQ1JJUFRfTUVNT1JZX0xPQ0FUSU9OAwIaQVNTRU1CTFlTQ1JJUFRfTUVNT1JZX1NJWkUDAxZXQVNNQk9ZX1NUQVRFX0xPQ0FUSU9OAwQSV0FTTUJPWV9TVEFURV9TSVpFAwUgR0FNRUJPWV9JTlRFUk5BTF9NRU1PUllfTE9DQVRJT04DDBxHQU1FQk9ZX0lOVEVSTkFMX01FTU9SWV9TSVpFAw0SVklERU9fUkFNX0xPQ0FUSU9OAwYOVklERU9fUkFNX1NJWkUDBxFXT1JLX1JBTV9MT0NBVElPTgMIDVdPUktfUkFNX1NJWkUDCSZPVEhFUl9HQU1FQk9ZX0lOVEVSTkFMX01FTU9SWV9MT0NBVElPTgMKIk9USEVSX0dBTUVCT1lfSU5URVJOQUxfTUVNT1JZX1NJWkUDCxhHUkFQSElDU19PVVRQVVRfTE9DQVRJT04DGhRHUkFQSElDU19PVVRQVVRfU0laRQMbFEdCQ19QQUxFVFRFX0xPQ0FUSU9OAw4QR0JDX1BBTEVUVEVfU0laRQMPGEJHX1BSSU9SSVRZX01BUF9MT0NBVElPTgMQFEJHX1BSSU9SSVRZX01BUF9TSVpFAxEORlJBTUVfTE9DQVRJT04DEgpGUkFNRV9TSVpFAxMXQkFDS0dST1VORF9NQVBfTE9DQVRJT04DFBNCQUNLR1JPVU5EX01BUF9TSVpFAxUSVElMRV9EQVRBX0xPQ0FUSU9OAxYOVElMRV9EQVRBX1NJWkUDFxJPQU1fVElMRVNfTE9DQVRJT04DGA5PQU1fVElMRVNfU0laRQMZFUFVRElPX0JVRkZFUl9MT0NBVElPTgMkEUFVRElPX0JVRkZFUl9TSVpFAyUZQ0hBTk5FTF8xX0JVRkZFUl9MT0NBVElPTgMcFUNIQU5ORUxfMV9CVUZGRVJfU0laRQMdGUNIQU5ORUxfMl9CVUZGRVJfTE9DQVRJT04DHhVDSEFOTkVMXzJfQlVGRkVSX1NJWkUDHxlDSEFOTkVMXzNfQlVGRkVSX0xPQ0FUSU9OAyAVQ0hBTk5FTF8zX0JVRkZFUl9TSVpFAyEZQ0hBTk5FTF80X0JVRkZFUl9MT0NBVElPTgMiFUNIQU5ORUxfNF9CVUZGRVJfU0laRQMjFkNBUlRSSURHRV9SQU1fTE9DQVRJT04DJhJDQVJUUklER0VfUkFNX1NJWkUDJxFCT09UX1JPTV9MT0NBVElPTgMoDUJPT1RfUk9NX1NJWkUDKRZDQVJUUklER0VfUk9NX0xPQ0FUSU9OAyoSQ0FSVFJJREdFX1JPTV9TSVpFAysdREVCVUdfR0FNRUJPWV9NRU1PUllfTE9DQVRJT04DLBlERUJVR19HQU1FQk9ZX01FTU9SWV9TSVpFAy0hZ2V0V2FzbUJveU9mZnNldEZyb21HYW1lQm95T2Zmc2V0AAsbc2V0UHJvZ3JhbUNvdW50ZXJCcmVha3BvaW50AHEdcmVzZXRQcm9ncmFtQ291bnRlckJyZWFrcG9pbnQAchlzZXRSZWFkR2JNZW1vcnlCcmVha3BvaW50AHMbcmVzZXRSZWFkR2JNZW1vcnlCcmVha3BvaW50AHQac2V0V3JpdGVHYk1lbW9yeUJyZWFrcG9pbnQAdRxyZXNldFdyaXRlR2JNZW1vcnlCcmVha3BvaW50AHYMZ2V0UmVnaXN0ZXJBAHcMZ2V0UmVnaXN0ZXJCAHgMZ2V0UmVnaXN0ZXJDAHkMZ2V0UmVnaXN0ZXJEAHoMZ2V0UmVnaXN0ZXJFAHsMZ2V0UmVnaXN0ZXJIAHwMZ2V0UmVnaXN0ZXJMAH0MZ2V0UmVnaXN0ZXJGAH4RZ2V0UHJvZ3JhbUNvdW50ZXIAfw9nZXRTdGFja1BvaW50ZXIAgAEZZ2V0T3Bjb2RlQXRQcm9ncmFtQ291bnRlcgCBAQVnZXRMWQCCAQpnZXRTY3JvbGxYAIMBCmdldFNjcm9sbFkAhAEKZ2V0V2luZG93WACFAQpnZXRXaW5kb3dZAIYBHWRyYXdCYWNrZ3JvdW5kTWFwVG9XYXNtTWVtb3J5AIcBGGRyYXdUaWxlRGF0YVRvV2FzbU1lbW9yeQCIARNkcmF3T2FtVG9XYXNtTWVtb3J5AIkBBmdldERJVgCKAQdnZXRUSU1BAIsBBmdldFRNQQCMAQZnZXRUQUMAjQETdXBkYXRlRGVidWdHQk1lbW9yeQCOARRfX3NldEFyZ3VtZW50c0xlbmd0aACUAQgCjwEK+b0ClAGVAgEEfyABKAIAIgJBAXFFBEBBAEGQCEGVAkEOEAAACyACQXxxIgJB8P///wNJQQAgAkEQTxtFBEBBAEGQCEGXAkEOEAAACyACQYACSQRAIAJBBHYhAgUgAkEfIAJnayIDQQRrdkEQcyECIANBB2shAwsgAkEQSUEAIANBF0kbRQRAQQBBkAhBpAJBDhAAAAsgASgCFCEEIAEoAhAiBQRAIAUgBDYCFAsgBARAIAQgBTYCEAsgASAAIAIgA0EEdGpBAnRqKAJgRgRAIAAgAiADQQR0akECdGogBDYCYCAERQRAIAAgA0ECdGoiBCgCBEF+IAJ3cSEBIAQgATYCBCABRQRAIAAgACgCAEF+IAN3cTYCAAsLCwv/AwEHfyABRQRAQQBBkAhBzQFBDhAAAAsgASgCACIEQQFxRQRAQQBBkAhBzwFBDhAAAAsgAUEQaiABKAIAQXxxaiIFKAIAIgJBAXEEQCAEQXxxQRBqIAJBfHFqIgNB8P///wNJBEACfyAAIAUQASABIAMgBEEDcXIiBDYCACABQRBqIAEoAgBBfHFqIgUoAgALIQILCyAEQQJxBEACfyABQQRrKAIAIgMoAgAiB0EBcUUEQEEAQZAIQeQBQRAQAAALIAdBfHFBEGogBEF8cWoiCEHw////A0kEfyAAIAMQASADIAggB0EDcXIiBDYCACADBSABCwshAQsgBSACQQJyNgIAIARBfHEiA0Hw////A0lBACADQRBPG0UEQEEAQZAIQfMBQQ4QAAALIAUgAyABQRBqakcEQEEAQZAIQfQBQQ4QAAALIAVBBGsgATYCACADQYACSQRAIANBBHYhAwUgA0EfIANnayIEQQRrdkEQcyEDIARBB2shBgsgA0EQSUEAIAZBF0kbRQRAQQBBkAhBhAJBDhAAAAsgACADIAZBBHRqQQJ0aigCYCEEIAFBADYCECABIAQ2AhQgBARAIAQgATYCEAsgACADIAZBBHRqQQJ0aiABNgJgIAAgACgCAEEBIAZ0cjYCACAAIAZBAnRqIgAgACgCBEEBIAN0cjYCBAvRAQECfyACQQ9xRUEAIAFBD3FFQQAgASACTRsbRQRAQQBBkAhBggNBBRAAAAsgACgCoAwiAwRAIAEgA0EQakkEQEEAQZAIQYwDQRAQAAALIAMgAUEQa0YEQAJ/IAMoAgAhBCABQRBrCyEBCwUgASAAQaQMakkEQEEAQZAIQZgDQQUQAAALCyACIAFrIgJBMEkEQA8LIAEgBEECcSACQSBrQQFycjYCACABQQA2AhAgAUEANgIUIAEgAmpBEGsiAkECNgIAIAAgAjYCoAwgACABEAILngEBA38jACICRQRAQQE/ACIASgR/QQEgAGtAAEEASAVBAAsEQAALQcAJIQJBwAlBADYCAEHgFUEANgIAA0AgAUEXSQRAIAFBAnRBwAlqQQA2AgRBACEAA0AgAEEQSQRAIAAgAUEEdGpBAnRBwAlqQQA2AmAgAEEBaiEADAELCyABQQFqIQEMAQsLQcAJQfAVPwBBEHQQA0HACSQACyACC98BAQF/IAFBgAJJBEAgAUEEdiEBBQJ/IAFB+P///wFJBEAgAUEBQRsgAWdrdGpBAWshAQsgAQtBHyABZ2siAkEEa3ZBEHMhASACQQdrIQILIAFBEElBACACQRdJG0UEQEEAQZAIQdICQQ4QAAALIAAgAkECdGooAgRBfyABdHEiAQR/IAAgAWggAkEEdGpBAnRqKAJgBSAAKAIAQX8gAkEBanRxIgEEfyAAIAFoIgFBAnRqKAIEIgJFBEBBAEGQCEHfAkESEAAACyAAIAJoIAFBBHRqQQJ0aigCYAVBAAsLC4cBAQJ/IAEoAgAhAyACQQ9xBEBBAEGQCEHtAkEOEAAACyADQXxxIAJrIgRBIE8EQCABIAIgA0ECcXI2AgAgAiABQRBqaiIBIARBEGtBAXI2AgAgACABEAIFIAEgA0F+cTYCACABQRBqIgAgASgCAEF8cWogACABKAIAQXxxaigCAEF9cTYCAAsLqgIBA38jAQRAQQBBkAhB9ANBDhAAAAsgASIDQfD///8DTwRAQcAIQZAIQc0DQR4QAAALIAAgA0EPakFwcSIBQRAgAUEQSxsiARAFIgRFBEBBASQBQQAkASAAIAEQBSIERQRAIAFB+P///wFJBH8gAUEBQRsgAWdrdEEBa2oFIAELQRA/ACIEQRB0QRBrIAAoAqAMR3RqQf//A2pBgIB8cUEQdiEFIAQgBSAEIAVKG0AAQQBIBEAgBUAAQQBIBEAACwsgACAEQRB0PwBBEHQQAyAAIAEQBSIERQRAQQBBkAhBgARBFBAAAAsLCyAEKAIAQXxxIAFJBEBBAEGQCEGIBEEOEAAACyAEQQA2AgQgBCACNgIIIAQgAzYCDCAAIAQQASAAIAQgARAGIAQLDQAQBCAAIAEQB0EQagthAQJ/IABBvAlLBEAgAEEQayIBKAIEIgJBgICAgH9xIAJBAWpBgICAgH9xRwRAQQBBgAlB7QBBAxAAAAsgASACQQFqNgIEIAEoAgBBAXEEQEEAQYAJQfAAQQ4QAAALCyAACxMAIABBvAlLBEAgAEEQaxCRAQsLjwIBAX8CQAJAAkACQAJAAkACQAJAAkAgAEEMdQ4OAAEBAQICAgIDAwQEBQYHCyP9AQRAI/4BBEAgAEGAAkgNCSAAQYASSEEAIABB/wNKGw0JBUEAIABBgAJII/4BGw0JCwsLIABBgK3RAGoPCyAAQYCAAWshASABQQAj7wEiAEUj9wEbBH9BAQUgAAtBDnRqQYCt0QBqDwsgAEGAkH5qI/4BBH9Bz/4DEAstAABBAXEFQQALQQ10ag8LIAAj8AFBDXRqQYDZxgBqDwsgAEGAkH5qDwsgAEEBI/4BBH9B8P4DEAstAABBB3EFQQALIgEgAUEBSRtBDHRqQYDwfWoPCyAAQYBQag8LIABBgJnRAGoLwwEAQQAk/wFBACSAAkEAJIECQQAkggJBACSDAkEAJIQCQQAkhQJBACSGAkEAJIcCQQAkiAJBACSJAkEAJIoCQQAkiwJBACSMAkEAJI0CQQAkjgIj/QEEQA8LI/4BBEBBESSAAkGAASSHAkEAJIECQQAkggJB/wEkgwJB1gAkhAJBACSFAkENJIYCBUEBJIACQbABJIcCQQAkgQJBEySCAkEAJIMCQdgBJIQCQQEkhQJBzQAkhgILQYACJIkCQf7/AySIAguhCAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAODQABAgMEBQYHCAkKCwwNC0Hy5csHJDtBoMGCBSQ8Qdiw4QIkPUGIkCAkPkHy5csHJD9BoMGCBSRAQdiw4QIkQUGIkCAkQkHy5csHJENBoMGCBSREQdiw4QIkRUGIkCAkRgwMC0H///8HJDtB49r+ByQ8QYDikAQkPUEAJD5B////ByQ/QePa/gckQEGA4pAEJEFBACRCQf///wckQ0Hj2v4HJERBgOKQBCRFQQAkRgwLC0H///8HJDtBhIn+ByQ8Qbr00AQkPUEAJD5B////ByQ/QbH+7wMkQEGAiAIkQUEAJEJB////ByRDQf/LjgMkREH/ASRFQQAkRgwKC0HFzf8HJDtBhLm6BiQ8QanWkQQkPUGI4ugCJD5B////ByQ/QePa/gckQEGA4pAEJEFBACRCQf///wckQ0Hj2v4HJERBgOKQBCRFQQAkRgwJC0H///8HJDtBgP7LAiQ8QYCE/QckPUEAJD5B////ByQ/QYD+ywIkQEGAhP0HJEFBACRCQf///wckQ0GA/ssCJERBgIT9ByRFQQAkRgwIC0H///8HJDtBsf7vAyQ8QcXHASQ9QQAkPkH///8HJD9BhIn+ByRAQbr00AQkQUEAJEJB////ByRDQYSJ/gckREG69NAEJEVBACRGDAcLQQAkO0GEiQIkPEGAvP8HJD1B////ByQ+QQAkP0GEiQIkQEGAvP8HJEFB////ByRCQQAkQ0GEiQIkREGAvP8HJEVB////ByRGDAYLQaX//wckO0GUqf4HJDxB/6nSBCQ9QQAkPkGl//8HJD9BlKn+ByRAQf+p0gQkQUEAJEJBpf//ByRDQZSp/gckREH/qdIEJEVBACRGDAULQf///wckO0GA/v8HJDxBgID8ByQ9QQAkPkH///8HJD9BgP7/ByRAQYCA/AckQUEAJEJB////ByRDQYD+/wckREGAgPwHJEVBACRGDAQLQf///wckO0GA/v8HJDxBgJTtAyQ9QQAkPkH///8HJD9B/8uOAyRAQf8BJEFBACRCQf///wckQ0Gx/u8DJERBgIgCJEVBACRGDAMLQf///wckO0H/y44DJDxB/wEkPUEAJD5B////ByQ/QYSJ/gckQEG69NAEJEFBACRCQf///wckQ0Gx/u8DJERBgIgCJEVBACRGDAILQf///wckO0HembIEJDxBjKXJAiQ9QQAkPkH///8HJD9BhIn+ByRAQbr00AQkQUEAJEJB////ByRDQePa/gckREGA4pAEJEVBACRGDAELQf///wckO0Gly5YFJDxB0qTJAiQ9QQAkPkH///8HJD9BpcuWBSRAQdKkyQIkQUEAJEJB////ByRDQaXLlgUkREHSpMkCJEVBACRGCwvaCAACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEGIAUcEQCAAQeEARg0BIABBFEYNAiAAQcYARg0DIABB2QBGDQQgAEHGAUYNBCAAQYYBRg0FIABBqAFGDQUgAEG/AUYNBiAAQc4BRg0GIABB0QFGDQYgAEHwAUYNBiAAQSdGDQcgAEHJAEYNByAAQdwARg0HIABBswFGDQcgAEHJAUYNCCAAQfAARg0JIABBxgBGDQogAEHTAUYNCwwMC0H/uZYFJDtBgP7/ByQ8QYDGASQ9QQAkPkH/uZYFJD9BgP7/ByRAQYDGASRBQQAkQkH/uZYFJENBgP7/ByREQYDGASRFQQAkRgwLC0H///8HJDtB/8uOAyQ8Qf8BJD1BACQ+Qf///wckP0GEif4HJEBBuvTQBCRBQQAkQkH///8HJENB/8uOAyREQf8BJEVBACRGDAoLQf///wckO0GEif4HJDxBuvTQBCQ9QQAkPkH///8HJD9Bsf7vAyRAQYCIAiRBQQAkQkH///8HJENBhIn+ByREQbr00AQkRUEAJEYMCQtB/+vWBSQ7QZT//wckPEHCtLUFJD1BACQ+QQAkP0H///8HJEBBhIn+ByRBQbr00AQkQkEAJENB////ByREQYSJ/gckRUG69NAEJEYMCAtB////ByQ7QYTbtgUkPEH75okCJD1BACQ+Qf///wckP0GA5v0HJEBBgITRBCRBQQAkQkH///8HJENB//vqAiREQYCA/AckRUH/ASRGDAcLQZz//wckO0H/69IEJDxB86iOAyQ9Qbr0ACQ+QcKK/wckP0GArP8HJEBBgPTQBCRBQYCAqAIkQkH///8HJENBhIn+ByREQbr00AQkRUEAJEYMBgtBgP6vAyQ7Qf///wckPEHKpP0HJD1BACQ+Qf///wckP0H///8HJEBB/8uOAyRBQf8BJEJB////ByRDQePa/gckREGA4pAEJEVBACRGDAULQf+5lgUkO0GA/v8HJDxBgMYBJD1BACQ+QdLG/QckP0GAgNgGJEBBgICMAyRBQQAkQkH/ASRDQf///wckREH7/v8HJEVB/4kCJEYMBAtBzv//ByQ7Qe/fjwMkPEGxiPIEJD1B2rTpAiQ+Qf///wckP0GA5v0HJEBBgITRBCRBQQAkQkH///8HJENB/8uOAyREQf8BJEVBACRGDAMLQf///wckO0GEif4HJDxBuvTQBCQ9QQAkPkH///8HJD9BgP4DJEBBgIjGASRBQYCUASRCQf///wckQ0H/y44DJERB/wEkRUEAJEYMAgtB////ByQ7Qf/LjgMkPEH/ASQ9QQAkPkGA/v8HJD9BgID8ByRAQYCAjAMkQUEAJEJB////ByRDQbH+7wMkREGAiAIkRUEAJEYMAQtB////ByQ7QYTbtgUkPEH75okCJD1BACQ+Qf///wckP0Hj2v4HJEBB49r+ByRBQQAkQkH///8HJENB/8uOAyREQf8BJEVBACRGCwvRAgECf0EAJOgBQQAk6QFBACTqAUEAJOsBQQAk7AFBACTtAUEAJO4BQZABJOoBI/4BBEBBwf4DEAtBgQE6AABBxP4DEAtBkAE6AABBx/4DEAtB/AE6AAAFQcH+AxALQYUBOgAAQcb+AxALQf8BOgAAQcf+AxALQfwBOgAAQcj+AxALQf8BOgAAQcn+AxALQf8BOgAAC0GQASTqAUHA/gMQC0GRAToAAEHP/gMQC0EAOgAAQfD+AxALQQE6AAAj/QEEQCP+AQRAQQAk6gFBwP4DEAtBADoAAEHB/gMQC0GAAToAAEHE/gMQC0EAOgAABUEAJOoBQcD+AxALQQA6AABBwf4DEAtBhAE6AAALC0EAEA0CQCP+AQ0AQQAj/QEj/gEbDQBBtAIhAANAIABBwwJMBEAgASAAEAstAABqIQEgAEEBaiEADAELCyABQf8BcRAOCwvxBABBACSkAUEAJKUBQQAkpgFBASSnAUEBJKgBQQEkqQFBASSqAUEBJKsBQQEkrAFBASStAUEBJK4BQQEkrwFBACSwAUEAJLIBQQAksQFBACSzAUGQ/gMQC0GAAToAAEGR/gMQC0G/AToAAEGS/gMQC0HzAToAAEGT/gMQC0HBAToAAEGU/gMQC0G/AToAACP9AQRAQZH+AxALQT86AABBkv4DEAtBADoAAEGT/gMQC0EAOgAAQZT+AxALQbgBOgAAC0GV/gMQC0H/AToAAEGW/gMQC0E/OgAAQZf+AxALQQA6AABBmP4DEAtBADoAAEGZ/gMQC0G4AToAAEGa/gMQC0H/ADoAAEGb/gMQC0H/AToAAEGc/gMQC0GfAToAAEGd/gMQC0EAOgAAQZ7+AxALQbgBOgAAQQEkgwFBn/4DEAtB/wE6AABBoP4DEAtB/wE6AABBof4DEAtBADoAAEGi/gMQC0EAOgAAQaP+AxALQb8BOgAAQaT+AxALQfcAOgAAQQckpQFBBySmAUGl/gMQC0HzAToAAEEBJKoBQQEkqQFBASSoAUEBJKcBQQAkrgFBACStAUEBJKwBQQEkqwFBpv4DEAtB8QE6AABBASSvASP9AQRAQaT+AxALQQA6AABBACSlAUEAJKYBQaX+AxALQQA6AABBACSqAUEAJKkBQQAkqAFBACSnAUEAJK4BQQAkrQFBACSsAUEAJKsBQab+AxALQfAAOgAAQQAkrwELQQ8klwFBDySYAUEPJJkBQQ8kmgFBACSbAUEAJJwBQQAknQFBACSeAUH/ACSfAUH/ACSgAUEBJKEBQQEkogFBACSjAQvUBgEBf0HDAhALLQAAIgBBwAFGBH9BAQUgAEGAAUZBACMyGwsEQEEBJP4BBUEAJP4BC0EAJJUCQYCo1rkHJI8CQQAkkAJBACSRAkGAqNa5BySSAkEAJJMCQQAklAIjMQRAQQEk/QEFQQAk/QELEAxBACTxAUEBJPIBQccCEAstAAAiAEUk8wEgAEEDTUEAIABBAU8bJPQBIABBBk1BACAAQQVPGyT1ASAAQRNNQQAgAEEPTxsk9gEgAEEeTUEAIABBGU8bJPcBQQEk7wFBACTwAUHP/gMQC0EAOgAAQfD+AxALQQE6AABB0f4DEAtB/wE6AABB0v4DEAtB/wE6AABB0/4DEAtB/wE6AABB1P4DEAtB/wE6AABB1f4DEAtB/wE6AAAQDyP+AQRAQej+AxALQcABOgAAQen+AxALQf8BOgAAQer+AxALQcEBOgAAQev+AxALQQ06AAAFQej+AxALQf8BOgAAQen+AxALQf8BOgAAQer+AxALQf8BOgAAQev+AxALQf8BOgAACyP+AUEAI/0BGwRAQen+AxALQSA6AABB6/4DEAtBigE6AAALEBBBACS3AUEAJLgBQQAkuQFBACS6AUEAJLsBQQAktgFB//8DEAtBADoAAEEBJL0BQQAkvgFBACS/AUEAJMABQQAkwQFB4QEkvAFBj/4DEAtB4QE6AABBACTCAUEAJMMBQQAkxAFBACTIAUEAJMkBQQAkygFBACTFAUEAJMYBI/4BBEBBhP4DEAtBHjoAAEGgPSTDAQVBhP4DEAtBqwE6AABBzNcCJMMBC0GH/gMQC0H4AToAAEH4ASTKASP9AQRAI/4BRQRAQYT+AxALQQA6AABBBCTDAQsLQQAkywFBACTMASP+AQRAQYL+AxALQfwAOgAAQQAkzQEFQYL+AxALQf4AOgAAQQEkzQELQQAkzgEj/gEEQEHw/gMQC0H4AToAAEHP/gMQC0H+AToAAEHN/gMQC0H+ADoAAEGA/gMQC0HPAToAAEGP/gMQC0HhAToAAEHs/gMQC0H+AToAAEH1/gMQC0GPAToAAAVB8P4DEAtB/wE6AABBz/4DEAtB/wE6AABBzf4DEAtB/wE6AABBgP4DEAtBzwE6AABBj/4DEAtB4QE6AAALC0oAIABBAEokMSABQQBKJDIgAkEASiQzIANBAEokNCAEQQBKJDUgBUEASiQ2IAZBAEokNyAHQQBKJDggCEEASiQ5IAlBAEokOhARCwUAI5UCC5kCAEGsCiOlATYCAEGwCiOmATYCAEG0CiOnAUEARzoAAEG1CiOoAUEARzoAAEG2CiOpAUEARzoAAEG3CiOqAUEARzoAAEG4CiOrAUEARzoAAEG5CiOsAUEARzoAAEG6CiOtAUEARzoAAEG7CiOuAUEARzoAAEG8CiOvAUEARzoAAEG9CiOwATYCAEHCCiOxAToAAEHDCiOyAToAAEHECiOXAToAAEHFCiOYAToAAEHGCiOZAToAAEHHCiOaAToAAEHICiObAUEARzoAAEHJCiOcAUEARzoAAEHKCiOdAUEARzoAAEHLCiOeAUEARzoAAEHMCiOfAToAAEHNCiOgAToAAEHOCiOhAUEARzoAAEHPCiOiAUEARzoAAAvqAQBB3gojSTYCAEHiCiNKOgAAQeMKI0tBAEc6AABB5AojTDoAAEHlCiNNOgAAQecKI047AQBB6AojTzoAAEHpCiNQQQBHOgAAQeoKI1E6AABB6wojUjoAAEHsCiNTQQBHOgAAQe0KI1Q6AABB7gojVUEARzoAAEHvCiNWQQBHOgAAQfAKI1c2AgBB9AojWDYCAEH4CiNZNgIAQfwKI1pBAEc6AABB/QojWzYCAEGBCyNcNgIAQYULI106AABBhgsjXjoAAEGHCyNfQQBHOgAAQYgLI2A2AgBBjAsjYTsBAEGPCyNiQQBHOgAAC/gJAEGACCOAAjoAAEGBCCOBAjoAAEGCCCOCAjoAAEGDCCODAjoAAEGECCOEAjoAAEGFCCOFAjoAAEGGCCOGAjoAAEGHCCOHAjoAAEGICCOIAjsBAEGKCCOJAjsBAEGMCCOKAjYCAEGRCCOLAkEARzoAAEGSCCOMAkEARzoAAEGTCCONAkEARzoAAEGUCCOOAkEARzoAAEGVCCP9AUEARzoAAEGWCCP+AUEARzoAAEGXCCP/AUEARzoAAEGyCCPpATYCAEG2CCPqAToAAEG3CCPrAToAAEG4CCPsAToAAEG5CCPtAToAAEG6CCPuAToAAEG7CCPeAToAAEG8CCPfAToAAEG9CCPgAUEARzoAAEG+CCPhAUEARzoAAEG/CCPiAUEARzoAAEHACCPjAUEARzoAAEHBCCPkAUEARzoAAEHCCCPlAUEARzoAAEHDCCPmAUEARzoAAEHECCPnAUEARzoAAEHkCCO0AUEARzoAAEHlCCO1AUEARzoAAEH0CCO2AToAAEH1CCO3AUEARzoAAEH2CCO4AUEARzoAAEH3CCO5AUEARzoAAEH4CCO6AUEARzoAAEH5CCO7AUEARzoAAEGECSO8AToAAEGFCSO9AUEARzoAAEGGCSO+AUEARzoAAEGHCSO/AUEARzoAAEGICSPAAUEARzoAAEGJCSPBAUEARzoAAEGWCSPXATYCAEGXCSPYAUEARzoAAEGYCSPZAUEARzoAAEHICSPvATsBAEHKCSPwATsBAEHMCSPxAUEARzoAAEHNCSPyAUEARzoAAEHOCSPzAUEARzoAAEHPCSP0AUEARzoAAEHQCSP1AUEARzoAAEHRCSP2AUEARzoAAEHSCSP3AUEARzoAAEHTCSP4ATYCAEHXCSP5AUEARzoAAEHYCSP6ATYCAEHcCSP7ATYCAEHgCSP8ATYCAEH6CSPCATYCAEH+CSPDATYCAEGCCiPEATYCAEGGCiPFAUEARzoAAEGHCiPGAUEARzoAAEGICiPHATYCAEGMCiPIATYCAEGQCiPJAUEARzoAAEGRCiPKATYCABAUEBVBkAsjYzYCAEGXCyNkOgAAQZgLI2U7AQBBmgsjZjoAAEGbCyNnQQBHOgAAQZwLI2g6AABBnQsjaToAAEGeCyNqQQBHOgAAQZ8LI2s6AABBoAsjbEEARzoAAEGhCyNtQQBHOgAAQaILI242AgBBpgsjbzYCAEGqCyNwNgIAQa4LI3FBAEc6AABBrwsjcjYCAEGzCyNzNgIAQbcLI3Q6AABBuAsjdToAAEHCCyN2NgIAQcoLI3c7AQBBzAsjeDoAAEHOCyN5OgAAQc8LI3pBAEc6AABB0AsjezoAAEHRCyN8QQBHOgAAQdILI31BAEc6AABB0wsjfjYCAEHXCyN/NgIAQdsLI4ABNgIAQeMLI4EBNgIAQecLI4IBOgAAQegLI4MBQQBHOgAAQekLI4QBNgIAQfQLI4UBNgIAQfgLI4YBOwEAQfoLI4cBOgAAQfsLI4gBQQBHOgAAQfwLI4kBOgAAQf0LI4oBOgAAQf4LI4sBQQBHOgAAQf8LI4wBOgAAQYEMI40BQQBHOgAAQYMMI44BQQBHOgAAQYQMI48BQQBHOgAAQYkMI5ABNgIAQY0MI5EBNgIAQZEMI5IBQQBHOgAAQZIMI5MBNgIAQZYMI5QBNgIAQZoMI5YBOwEAQQAklQILBwBBACSzAQueAgBBrAooAgAkpQFBsAooAgAkpgFBtAotAABBAEskpwFBtQotAABBAEskqAFBtgotAABBAEskqQFBtwotAABBAEskqgFBuAotAABBAEskqwFBuQotAABBAEskrAFBugotAABBAEskrQFBuwotAABBAEskrgFBvAotAABBAEskrwFBvQooAgAksAFBwgotAAAksQFBwwotAAAksgFBxAotAAAklwFBxQotAAAkmAFBxgotAAAkmQFBxwotAAAkmgFByAotAABBAEskmwFByQotAABBAEsknAFBygotAABBAEsknQFBywotAABBAEskngFBzAotAAAknwFBzQotAAAkoAFBzgotAABBAEskoQFBzwotAABBAEskogFBACSzAQvwAQAjSUEybEGACGooAgAkSUHiCi0AACRKQeMKLQAAQQBLJEtB5AotAAAkTEHlCi0AACRNQecKLwEAJE5B6AotAAAkT0HpCi0AAEEASyRQQeoKLQAAJFFB6wotAAAkUkHsCi0AAEEASyRTQe0KLQAAJFRB7gotAABBAEskVUHvCi0AAEEASyRWQfAKKAIAJFdB9AooAgAkWEH4CigCACRZQfwKLQAAQQBLJFpB/QooAgAkW0GBCygCACRcQYULLQAAJF1BhgstAAAkXkGHCy0AAEEASyRfQYgLLQAAJGBBjAstAAAkYUGPCy0AAEEASyRiC68BACNjQTJsQYAIaigCACRjQZcLLQAAJGRBmAsvAQAkZUGaCy0AACRmQZsLLQAAQQBLJGdBnAstAAAkaEGdCy0AACRpQZ4LLQAAQQBLJGpBnwstAAAka0GgCy0AAEEASyRsQaELLQAAQQBLJG1BogsoAgAkbkGmCygCACRvQaoLKAIAJHBBrgstAABBAEskcUGvCygCACRyQbMLKAIAJHNBtwstAAAkdEG4Cy0AACR1C40JAEGACC0AACSAAkGBCC0AACSBAkGCCC0AACSCAkGDCC0AACSDAkGECC0AACSEAkGFCC0AACSFAkGGCC0AACSGAkGHCC0AACSHAkGICC8BACSIAkGKCC8BACSJAkGMCCgCACSKAkGRCC0AAEEASySLAkGSCC0AAEEASySMAkGTCC0AAEEASySNAkGUCC0AAEEASySOAkGVCC0AAEEASyT9AUGWCC0AAEEASyT+AUGXCC0AAEEASyT/AUGyCCgCACTpASPqAUEybEGECGotAAAk6gFBtwgtAAAk6wFBuAgtAAAk7AFBuQgtAAAk7QFBuggtAAAk7gFBuwgtAAAk3gFBvAgtAAAk3wFBvQgtAABBAEsk4AFBvggtAABBAEsk4QFBvwgtAABBAEsk4gFBwAgtAABBAEsk4wFBwQgtAABBAEsk5AFBwggtAABBAEsk5QFBwwgtAABBAEsk5gFBxAgtAABBAEsk5wFB5AgtAABBAEsktAFB5QgtAABBAEsktQFB9AgtAAAktgFB9QgtAABBAEsktwFB9ggtAABBAEskuAFB9wgtAABBAEskuQFB+AgtAABBAEskugFB+QgtAABBAEskuwFBhAktAAAkvAFBhQktAABBAEskvQFBhgktAABBAEskvgFBhwktAABBAEskvwFBiAktAABBAEskwAFBiQktAABBAEskwQFBlgkoAgAk1wFBlwktAABBAEsk2AFBmAktAABBAEsk2QFByAkvAQAk7wFBygkvAQAk8AFBzAktAABBAEsk8QFBzQktAABBAEsk8gFBzgktAABBAEsk8wFBzwktAABBAEsk9AFB0AktAABBAEsk9QFB0QktAABBAEsk9gFB0gktAABBAEsk9wFB0wkoAgAk+AFB1wktAABBAEsk+QFB2AkoAgAk+gFB3AkoAgAk+wFB4AkoAgAk/AFB+gkoAgAkwgFB/gkoAgAkwwFBggooAgAkxAFBhgotAABBAEskxQFBhwotAABBAEskxgFBiAooAgAkxwFBjAooAgAkyAFBkAotAABBAEskyQFBkQooAgAkygEQGBAZEBojdkEybEGACGooAgAkdkHKCy8BACR3QcwLLQAAJHhBzgstAAAkeUHPCy0AAEEASyR6QdALLQAAJHtB0QstAABBAEskfEHSCy0AAEEASyR9QdMLKAIAJH5B1wsoAgAkf0HbCygCACSAAUHjCygCACSBAUHnCygCACSCAUHoCy0AAEEASySDAUHpCygCACSEASOFAUEybEGACGooAgAkhQFB+AstAAAkhgFB+gstAAAkhwFB+wstAABBAEskiAFB/AstAAAkiQFB/QstAAAkigFB/gstAABBAEskiwFB/wstAAAkjAFBgQwtAABBAEskjQFBgwwtAABBAEskjgFBhAwtAABBAEskjwFBiQwoAgAkkAFBjQwoAgAkkQFBkQwtAABBAEskkgFBkgwoAgAkkwFBlgwoAgAklAFBmgwvAQAklgFBACSVAkGAqNa5BySPAkEAJJACQQAkkQJBgKjWuQckkgJBACSTAkEAJJQCCwUAI/4BCwUAI5ICCwUAI5MCCwUAI5QCC54CAQd/IAAjSCIHRkEAIAQjR0ZBACAAQQhKQQAgAUEAShsbGwRAIANBAWsQCy0AAEEgcUEARyEIIAMQCy0AAEEgcUEARyEJA0AgBkEISARAIABBByAGayAGIAggCUcbIgRqIgNBoAFMBEACfyADIAFBoAFsIgpqIgtBA2wiBkGAyQVqIgMgAy0AADoAACAGQYHJBWogAy0AAToAACAGQYLJBWogAy0A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