harmony/harmony.js
2021-04-04 13:15:37 +05:30

116161 lines
1.2 MiB

var GatewayOpcodes;
(function(GatewayOpcodes1) {
GatewayOpcodes1[GatewayOpcodes1["DISPATCH"] = 0] = "DISPATCH";
GatewayOpcodes1[GatewayOpcodes1["HEARTBEAT"] = 1] = "HEARTBEAT";
GatewayOpcodes1[GatewayOpcodes1["IDENTIFY"] = 2] = "IDENTIFY";
GatewayOpcodes1[GatewayOpcodes1["PRESENCE_UPDATE"] = 3] = "PRESENCE_UPDATE";
GatewayOpcodes1[GatewayOpcodes1["VOICE_STATE_UPDATE"] = 4] = "VOICE_STATE_UPDATE";
GatewayOpcodes1[GatewayOpcodes1["RESUME"] = 6] = "RESUME";
GatewayOpcodes1[GatewayOpcodes1["RECONNECT"] = 7] = "RECONNECT";
GatewayOpcodes1[GatewayOpcodes1["REQUEST_GUILD_MEMBERS"] = 8] = "REQUEST_GUILD_MEMBERS";
GatewayOpcodes1[GatewayOpcodes1["INVALID_SESSION"] = 9] = "INVALID_SESSION";
GatewayOpcodes1[GatewayOpcodes1["HELLO"] = 10] = "HELLO";
GatewayOpcodes1[GatewayOpcodes1["HEARTBEAT_ACK"] = 11] = "HEARTBEAT_ACK";
})(GatewayOpcodes || (GatewayOpcodes = {
}));
var GatewayCloseCodes;
(function(GatewayCloseCodes1) {
GatewayCloseCodes1[GatewayCloseCodes1["UNKNOWN_ERROR"] = 4000] = "UNKNOWN_ERROR";
GatewayCloseCodes1[GatewayCloseCodes1["UNKNOWN_OPCODE"] = 4001] = "UNKNOWN_OPCODE";
GatewayCloseCodes1[GatewayCloseCodes1["DECODE_ERROR"] = 4002] = "DECODE_ERROR";
GatewayCloseCodes1[GatewayCloseCodes1["NOT_AUTHENTICATED"] = 4003] = "NOT_AUTHENTICATED";
GatewayCloseCodes1[GatewayCloseCodes1["AUTHENTICATION_FAILED"] = 4004] = "AUTHENTICATION_FAILED";
GatewayCloseCodes1[GatewayCloseCodes1["ALREADY_AUTHENTICATED"] = 4005] = "ALREADY_AUTHENTICATED";
GatewayCloseCodes1[GatewayCloseCodes1["INVALID_SEQ"] = 4007] = "INVALID_SEQ";
GatewayCloseCodes1[GatewayCloseCodes1["RATE_LIMITED"] = 4008] = "RATE_LIMITED";
GatewayCloseCodes1[GatewayCloseCodes1["SESSION_TIMED_OUT"] = 4009] = "SESSION_TIMED_OUT";
GatewayCloseCodes1[GatewayCloseCodes1["INVALID_SHARD"] = 4010] = "INVALID_SHARD";
GatewayCloseCodes1[GatewayCloseCodes1["SHARDING_REQUIRED"] = 4011] = "SHARDING_REQUIRED";
GatewayCloseCodes1[GatewayCloseCodes1["INVALID_API_VERSION"] = 4012] = "INVALID_API_VERSION";
GatewayCloseCodes1[GatewayCloseCodes1["INVALID_INTENTS"] = 4013] = "INVALID_INTENTS";
GatewayCloseCodes1[GatewayCloseCodes1["DISALLOWED_INTENTS"] = 4014] = "DISALLOWED_INTENTS";
})(GatewayCloseCodes || (GatewayCloseCodes = {
}));
var GatewayIntents1;
(function(GatewayIntents1) {
GatewayIntents1[GatewayIntents1["GUILDS"] = 1] = "GUILDS";
GatewayIntents1[GatewayIntents1["GUILD_MEMBERS"] = 2] = "GUILD_MEMBERS";
GatewayIntents1[GatewayIntents1["GUILD_BANS"] = 4] = "GUILD_BANS";
GatewayIntents1[GatewayIntents1["GUILD_EMOJIS"] = 8] = "GUILD_EMOJIS";
GatewayIntents1[GatewayIntents1["GUILD_INTEGRATIONS"] = 16] = "GUILD_INTEGRATIONS";
GatewayIntents1[GatewayIntents1["GUILD_WEBHOOKS"] = 32] = "GUILD_WEBHOOKS";
GatewayIntents1[GatewayIntents1["GUILD_INVITES"] = 64] = "GUILD_INVITES";
GatewayIntents1[GatewayIntents1["GUILD_VOICE_STATES"] = 128] = "GUILD_VOICE_STATES";
GatewayIntents1[GatewayIntents1["GUILD_PRESENCES"] = 256] = "GUILD_PRESENCES";
GatewayIntents1[GatewayIntents1["GUILD_MESSAGES"] = 512] = "GUILD_MESSAGES";
GatewayIntents1[GatewayIntents1["GUILD_MESSAGE_REACTIONS"] = 1024] = "GUILD_MESSAGE_REACTIONS";
GatewayIntents1[GatewayIntents1["GUILD_MESSAGE_TYPING"] = 2048] = "GUILD_MESSAGE_TYPING";
GatewayIntents1[GatewayIntents1["DIRECT_MESSAGES"] = 4096] = "DIRECT_MESSAGES";
GatewayIntents1[GatewayIntents1["DIRECT_MESSAGE_REACTIONS"] = 8192] = "DIRECT_MESSAGE_REACTIONS";
GatewayIntents1[GatewayIntents1["DIRECT_MESSAGE_TYPING"] = 8192] = "DIRECT_MESSAGE_TYPING";
})(GatewayIntents1 || (GatewayIntents1 = {
}));
var GatewayEvents;
(function(GatewayEvents1) {
GatewayEvents1["Ready"] = 'READY';
GatewayEvents1["Resumed"] = 'RESUMED';
GatewayEvents1["Reconnect"] = 'RECONNECT';
GatewayEvents1["Channel_Create"] = 'CHANNEL_CREATE';
GatewayEvents1["Channel_Update"] = 'CHANNEL_UPDATE';
GatewayEvents1["Channel_Delete"] = 'CHANNEL_DELETE';
GatewayEvents1["Channel_Pins_Update"] = 'CHANNEL_PINS_UPDATE';
GatewayEvents1["Guild_Create"] = 'GUILD_CREATE';
GatewayEvents1["Guild_Update"] = 'GUILD_UPDATE';
GatewayEvents1["Guild_Delete"] = 'GUILD_DELETE';
GatewayEvents1["Guild_Ban_Add"] = 'GUILD_BAN_ADD';
GatewayEvents1["Guild_Ban_Remove"] = 'GUILD_BAN_REMOVE';
GatewayEvents1["Guild_Emojis_Update"] = 'GUILD_EMOJIS_UPDATE';
GatewayEvents1["Guild_Integrations_Update"] = 'GUILD_INTEGRATIONS_UPDATE';
GatewayEvents1["Guild_Member_Add"] = 'GUILD_MEMBER_ADD';
GatewayEvents1["Guild_Member_Remove"] = 'GUILD_MEMBER_REMOVE';
GatewayEvents1["Guild_Member_Update"] = 'GUILD_MEMBER_UPDATE';
GatewayEvents1["Guild_Members_Chunk"] = 'GUILD_MEMBERS_CHUNK';
GatewayEvents1["Guild_Role_Create"] = 'GUILD_ROLE_CREATE';
GatewayEvents1["Guild_Role_Update"] = 'GUILD_ROLE_UPDATE';
GatewayEvents1["Guild_Role_Delete"] = 'GUILD_ROLE_DELETE';
GatewayEvents1["Invite_Create"] = 'INVITE_CREATE';
GatewayEvents1["Invite_Delete"] = 'INVITE_DELETE';
GatewayEvents1["Message_Create"] = 'MESSAGE_CREATE';
GatewayEvents1["Message_Update"] = 'MESSAGE_UPDATE';
GatewayEvents1["Message_Delete"] = 'MESSAGE_DELETE';
GatewayEvents1["Message_Delete_Bulk"] = 'MESSAGE_DELETE_BULK';
GatewayEvents1["Message_Reaction_Add"] = 'MESSAGE_REACTION_ADD';
GatewayEvents1["Message_Reaction_Remove"] = 'MESSAGE_REACTION_REMOVE';
GatewayEvents1["Message_Reaction_Remove_All"] = 'MESSAGE_REACTION_REMOVE_ALL';
GatewayEvents1["Message_Reaction_Remove_Emoji"] = 'MESSAGE_REACTION_REMOVE_EMOJI';
GatewayEvents1["Presence_Update"] = 'PRESENCE_UPDATE';
GatewayEvents1["Typing_Start"] = 'TYPING_START';
GatewayEvents1["User_Update"] = 'USER_UPDATE';
GatewayEvents1["Voice_Server_Update"] = 'VOICE_SERVER_UPDATE';
GatewayEvents1["Voice_State_Update"] = 'VOICE_STATE_UPDATE';
GatewayEvents1["Webhooks_Update"] = 'WEBHOOKS_UPDATE';
GatewayEvents1["Interaction_Create"] = 'INTERACTION_CREATE';
GatewayEvents1["Application_Command_Create"] = 'APPLICATION_COMMAND_CREATE';
GatewayEvents1["Application_Command_Update"] = 'APPLICATION_COMMAND_UPDATE';
GatewayEvents1["Application_Command_Delete"] = 'APPLICATION_COMMAND_DELETE';
})(GatewayEvents || (GatewayEvents = {
}));
class Snowflake1 {
constructor(id1){
this.id = id1;
}
get snowflake() {
return BigInt.asUintN(64, BigInt(this.id));
}
get timestamp() {
return Number((this.snowflake >> 22n) + 1420070400000n);
}
get workerID() {
return Number((this.snowflake & 4063232n) >> 17n);
}
get processID() {
return Number((this.snowflake & 7936n) >> 12n);
}
get increment() {
return Number(this.snowflake & 4095n);
}
get toString() {
return this.id;
}
}
class Base1 {
constructor(client51, _data){
Object.defineProperty(this, 'client', {
value: client51,
enumerable: false
});
}
}
class SnowflakeBase extends Base1 {
get snowflake() {
return new Snowflake1(this.id);
}
get timestamp() {
return new Date(this.snowflake.timestamp);
}
}
class EventEmitter {
listeners = Object.create(null);
#writer=[];
#onWriters=Object.create(null);
on(eventName, listener) {
if (!this.listeners[eventName]) {
this.listeners[eventName] = [];
}
this.listeners[eventName].push({
once: false,
cb: listener
});
return this;
}
async *asyncOn(eventName) {
if (!this.#onWriters[eventName]) {
this.#onWriters[eventName] = [];
}
const { readable , writable , } = new TransformStream();
this.#onWriters[eventName].push(writable.getWriter());
yield* readable.getIterator();
}
once(eventName, listener) {
if (!this.listeners[eventName]) {
this.listeners[eventName] = [];
}
this.listeners[eventName].push({
once: true,
cb: listener
});
return this;
}
off(eventName, listener) {
if (eventName) {
if (listener) {
this.listeners[eventName] = this.listeners[eventName]?.filter(({ cb })=>cb !== listener
);
} else {
delete this.listeners[eventName];
}
} else {
this.listeners = Object.create(null);
}
return this;
}
async emit(eventName, ...args) {
const listeners = this.listeners[eventName]?.slice() ?? [];
for (const { cb , once , } of listeners){
cb(...args);
if (once) {
this.off(eventName, cb);
}
}
for (const writer of this.#writer){
await writer.write({
name: eventName,
value: args
});
}
if (this.#onWriters[eventName]) {
for (const writer1 of this.#onWriters[eventName]){
await writer1.write(args);
}
}
}
async *[Symbol.asyncIterator]() {
const { readable , writable , } = new TransformStream();
this.#writer.push(writable.getWriter());
yield* readable.getIterator();
}
}
const importMeta = {
url: "https://raw.githubusercontent.com/DjDeveloperr/denoflate/1.2/pkg/denoflate.js",
main: false
};
let wasm;
let cachedTextDecoder = new TextDecoder('utf-8', {
ignoreBOM: true,
fatal: true
});
cachedTextDecoder.decode();
let cachegetUint8Memory0 = null;
function getUint8Memory0() {
if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
}
return cachegetUint8Memory0;
}
function getStringFromWasm0(ptr, len) {
return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
}
const heap = new Array(32).fill(undefined);
heap.push(undefined, null, true, false);
let heap_next = heap.length;
function addHeapObject(obj) {
if (heap_next === heap.length) heap.push(heap.length + 1);
const idx = heap_next;
heap_next = heap[idx];
heap[idx] = obj;
return idx;
}
function getObject(idx) {
return heap[idx];
}
function dropObject(idx) {
if (idx < 36) return;
heap[idx] = heap_next;
heap_next = idx;
}
function takeObject(idx) {
const ret = getObject(idx);
dropObject(idx);
return ret;
}
let WASM_VECTOR_LEN = 0;
function passArray8ToWasm0(arg, malloc) {
const ptr = malloc(arg.length * 1);
getUint8Memory0().set(arg, ptr / 1);
WASM_VECTOR_LEN = arg.length;
return ptr;
}
let cachegetInt32Memory0 = null;
function getInt32Memory0() {
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
}
return cachegetInt32Memory0;
}
function getArrayU8FromWasm0(ptr, len) {
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
}
function unzlib(input) {
var ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc);
var len0 = WASM_VECTOR_LEN;
wasm.unzlib(8, ptr0, len0);
var r0 = getInt32Memory0()[8 / 4 + 0];
var r1 = getInt32Memory0()[8 / 4 + 1];
var v1 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_free(r0, r1 * 1);
return v1;
}
async function load(module, imports) {
if (typeof Response === 'function' && module instanceof Response) {
if (typeof WebAssembly.instantiateStreaming === 'function') {
try {
return await WebAssembly.instantiateStreaming(module, imports);
} catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
} else {
throw e;
}
}
}
const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports);
} else {
const instance = await WebAssembly.instantiate(module, imports);
if (instance instanceof WebAssembly.Instance) {
return {
instance,
module
};
} else {
return instance;
}
}
}
async function init(input) {
if (typeof input === 'undefined') {
input = importMeta.url.replace(/\.js$/, '_bg.wasm');
}
const imports = {
};
imports.wbg = {
};
imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
var ret = getStringFromWasm0(arg0, arg1);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_rethrow = function(arg0) {
throw takeObject(arg0);
};
if (typeof input === 'string' || typeof Request === 'function' && input instanceof Request || typeof URL === 'function' && input instanceof URL) {
input = fetch(input);
}
const { instance , module } = await load(await input, imports);
wasm = instance.exports;
init.__wbindgen_wasm_module = module;
return wasm;
}
const wasm1 = new Uint8Array([
0,
97,
115,
109,
1,
0,
0,
0,
1,
136,
1,
19,
96,
2,
127,
127,
1,
127,
96,
1,
127,
0,
96,
3,
127,
127,
127,
1,
127,
96,
2,
127,
127,
0,
96,
3,
127,
127,
127,
0,
96,
4,
127,
127,
127,
127,
0,
96,
1,
127,
1,
127,
96,
5,
127,
127,
127,
127,
127,
0,
96,
1,
127,
1,
126,
96,
6,
127,
127,
127,
127,
127,
127,
0,
96,
7,
127,
127,
127,
127,
127,
127,
127,
0,
96,
0,
0,
96,
4,
127,
127,
127,
127,
1,
127,
96,
8,
127,
127,
127,
127,
127,
127,
127,
127,
0,
96,
0,
1,
127,
96,
5,
127,
127,
127,
127,
127,
1,
127,
96,
6,
127,
127,
127,
127,
127,
127,
1,
127,
96,
7,
127,
127,
127,
127,
127,
127,
127,
1,
127,
96,
3,
126,
127,
127,
1,
127,
2,
54,
2,
3,
119,
98,
103,
21,
95,
95,
119,
98,
105,
110,
100,
103,
101,
110,
95,
115,
116,
114,
105,
110,
103,
95,
110,
101,
119,
0,
0,
3,
119,
98,
103,
18,
95,
95,
119,
98,
105,
110,
100,
103,
101,
110,
95,
114,
101,
116,
104,
114,
111,
119,
0,
1,
3,
186,
1,
184,
1,
13,
12,
5,
5,
7,
10,
4,
3,
0,
5,
2,
4,
7,
4,
4,
4,
2,
7,
7,
10,
9,
2,
16,
7,
5,
5,
5,
0,
15,
0,
3,
0,
2,
3,
5,
5,
6,
3,
3,
17,
1,
5,
0,
3,
1,
5,
18,
3,
10,
0,
14,
3,
9,
4,
4,
3,
3,
0,
4,
5,
5,
5,
5,
0,
0,
3,
5,
5,
9,
4,
3,
3,
3,
1,
3,
5,
4,
5,
5,
5,
3,
4,
3,
4,
4,
1,
0,
0,
0,
4,
6,
4,
5,
1,
0,
5,
7,
4,
6,
1,
3,
4,
4,
4,
0,
0,
0,
0,
0,
0,
1,
0,
9,
2,
12,
0,
6,
4,
0,
0,
0,
1,
3,
2,
2,
1,
6,
2,
4,
0,
1,
1,
5,
4,
1,
3,
3,
2,
0,
6,
1,
1,
3,
1,
1,
6,
1,
4,
0,
2,
3,
3,
6,
0,
0,
3,
0,
0,
0,
0,
4,
0,
11,
0,
0,
2,
1,
8,
0,
3,
2,
3,
1,
11,
8,
6,
0,
0,
6,
8,
8,
8,
1,
3,
4,
5,
1,
112,
1,
74,
74,
5,
3,
1,
0,
17,
6,
9,
1,
127,
1,
65,
128,
128,
192,
0,
11,
7,
102,
9,
6,
109,
101,
109,
111,
114,
121,
2,
0,
7,
100,
101,
102,
108,
97,
116,
101,
0,
19,
7,
105,
110,
102,
108,
97,
116,
101,
0,
16,
4,
103,
122,
105,
112,
0,
25,
6,
103,
117,
110,
122,
105,
112,
0,
13,
4,
122,
108,
105,
98,
0,
20,
6,
117,
110,
122,
108,
105,
98,
0,
17,
17,
95,
95,
119,
98,
105,
110,
100,
103,
101,
110,
95,
109,
97,
108,
108,
111,
99,
0,
128,
1,
15,
95,
95,
119,
98,
105,
110,
100,
103,
101,
110,
95,
102,
114,
101,
101,
0,
152,
1,
9,
129,
1,
1,
0,
65,
1,
11,
73,
131,
1,
148,
1,
173,
1,
176,
1,
177,
1,
153,
1,
159,
1,
160,
1,
29,
59,
106,
184,
1,
97,
179,
1,
180,
1,
184,
1,
77,
178,
1,
177,
1,
184,
1,
122,
113,
117,
170,
1,
184,
1,
173,
1,
181,
1,
177,
1,
157,
1,
120,
121,
148,
1,
173,
1,
176,
1,
177,
1,
184,
1,
88,
184,
1,
131,
1,
131,
1,
158,
1,
140,
1,
159,
1,
185,
1,
184,
1,
129,
1,
44,
108,
183,
1,
143,
1,
53,
73,
142,
1,
182,
1,
166,
1,
184,
1,
129,
1,
163,
1,
109,
150,
1,
161,
1,
96,
31,
165,
1,
155,
1,
184,
1,
183,
1,
34,
66,
111,
167,
1,
65,
110,
10,
231,
190,
4,
184,
1,
141,
69,
1,
37,
127,
35,
0,
65,
48,
107,
34,
8,
36,
0,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
5,
32,
6,
73,
13,
0,
65,
127,
65,
0,
32,
5,
65,
127,
106,
34,
9,
32,
9,
32,
5,
75,
27,
32,
7,
65,
4,
113,
34,
33,
27,
34,
30,
65,
1,
106,
34,
39,
32,
30,
113,
13,
0,
32,
8,
32,
2,
54,
2,
0,
32,
8,
32,
2,
32,
3,
106,
34,
40,
54,
2,
4,
32,
1,
45,
0,
152,
82,
33,
10,
32,
8,
32,
1,
40,
2,
36,
54,
2,
24,
32,
8,
32,
1,
41,
2,
28,
55,
3,
16,
32,
8,
32,
1,
40,
2,
0,
54,
2,
12,
32,
8,
32,
1,
40,
2,
52,
54,
2,
8,
65,
1,
65,
3,
32,
7,
65,
1,
113,
34,
36,
27,
33,
41,
65,
1,
65,
124,
32,
7,
65,
2,
113,
34,
9,
27,
33,
27,
65,
130,
2,
65,
130,
120,
32,
9,
27,
33,
22,
32,
1,
65,
248,
207,
0,
106,
33,
42,
32,
1,
65,
216,
52,
106,
33,
32,
32,
1,
65,
184,
25,
106,
33,
37,
32,
1,
65,
157,
210,
0,
106,
33,
43,
32,
1,
65,
184,
27,
106,
33,
34,
32,
1,
65,
200,
26,
106,
33,
44,
32,
1,
65,
248,
54,
106,
33,
38,
32,
1,
65,
56,
106,
33,
31,
32,
1,
65,
216,
27,
106,
33,
35,
32,
6,
33,
15,
2,
64,
2,
64,
2,
64,
2,
64,
3,
64,
65,
255,
1,
33,
16,
32,
10,
34,
14,
65,
255,
1,
113,
34,
9,
65,
24,
75,
13,
2,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
9,
65,
1,
107,
14,
24,
29,
35,
28,
27,
26,
21,
20,
19,
18,
17,
16,
0,
10,
8,
7,
6,
25,
22,
4,
3,
9,
5,
2,
1,
34,
11,
2,
64,
32,
8,
40,
2,
4,
34,
20,
32,
8,
40,
2,
0,
34,
9,
107,
34,
10,
65,
4,
73,
13,
0,
32,
9,
33,
17,
3,
64,
32,
5,
32,
15,
107,
34,
12,
65,
2,
73,
13,
1,
32,
12,
65,
131,
2,
73,
32,
10,
65,
13,
77,
114,
69,
4,
64,
32,
8,
40,
2,
24,
33,
28,
32,
8,
40,
2,
20,
33,
19,
32,
8,
40,
2,
16,
33,
29,
32,
8,
40,
2,
12,
33,
17,
32,
8,
40,
2,
8,
33,
12,
32,
9,
33,
23,
32,
9,
33,
24,
32,
9,
33,
25,
32,
9,
33,
26,
32,
9,
33,
21,
2,
64,
3,
64,
65,
12,
33,
10,
32,
20,
32,
9,
107,
65,
14,
73,
13,
1,
3,
64,
2,
64,
2,
127,
2,
64,
32,
17,
65,
14,
75,
4,
127,
32,
17,
5,
32,
20,
32,
21,
107,
34,
9,
65,
1,
77,
13,
52,
32,
21,
47,
0,
0,
32,
8,
32,
21,
65,
2,
106,
34,
9,
54,
2,
0,
32,
17,
116,
32,
12,
114,
33,
12,
32,
9,
33,
23,
32,
9,
33,
24,
32,
9,
33,
25,
32,
9,
33,
26,
32,
9,
33,
21,
32,
17,
65,
16,
106,
11,
33,
18,
32,
31,
32,
12,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
13,
65,
127,
76,
4,
64,
65,
10,
33,
11,
3,
64,
32,
12,
32,
11,
65,
31,
113,
118,
65,
1,
113,
32,
13,
65,
127,
115,
106,
34,
13,
65,
191,
4,
77,
4,
64,
32,
11,
65,
1,
106,
33,
11,
32,
1,
32,
13,
65,
1,
116,
106,
65,
184,
16,
106,
46,
1,
0,
34,
13,
65,
127,
76,
13,
1,
12,
3,
11,
11,
32,
13,
65,
192,
4,
65,
204,
184,
192,
0,
16,
103,
0,
11,
32,
13,
65,
9,
118,
34,
11,
13,
0,
65,
34,
12,
1,
11,
32,
18,
32,
11,
107,
33,
17,
32,
12,
32,
11,
65,
31,
113,
118,
33,
12,
65,
128,
2,
33,
19,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
13,
65,
128,
2,
113,
69,
4,
64,
2,
64,
32,
17,
65,
14,
75,
4,
127,
32,
17,
5,
32,
20,
32,
26,
107,
34,
9,
65,
1,
77,
13,
58,
32,
26,
47,
0,
0,
32,
8,
32,
26,
65,
2,
106,
34,
9,
54,
2,
0,
32,
17,
116,
32,
12,
114,
33,
12,
32,
9,
33,
23,
32,
9,
33,
24,
32,
9,
33,
25,
32,
9,
33,
26,
32,
9,
33,
21,
32,
17,
65,
16,
106,
11,
33,
18,
32,
31,
32,
12,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
14,
65,
127,
76,
4,
64,
65,
10,
33,
11,
3,
64,
32,
12,
32,
11,
65,
31,
113,
118,
65,
1,
113,
32,
14,
65,
127,
115,
106,
34,
17,
65,
191,
4,
77,
4,
64,
32,
11,
65,
1,
106,
33,
11,
32,
1,
32,
17,
65,
1,
116,
106,
65,
184,
16,
106,
46,
1,
0,
34,
14,
65,
127,
76,
13,
1,
12,
3,
11,
11,
32,
17,
65,
192,
4,
65,
204,
184,
192,
0,
16,
103,
0,
11,
32,
14,
65,
9,
118,
34,
11,
13,
0,
32,
13,
33,
19,
65,
34,
12,
7,
11,
32,
15,
32,
5,
79,
13,
57,
32,
18,
32,
11,
107,
33,
17,
32,
12,
32,
11,
65,
31,
113,
118,
33,
12,
32,
4,
32,
15,
106,
32,
13,
58,
0,
0,
32,
15,
65,
1,
106,
33,
11,
32,
14,
65,
128,
2,
113,
69,
13,
1,
32,
11,
33,
15,
32,
14,
33,
13,
11,
32,
13,
65,
255,
3,
113,
34,
11,
65,
128,
2,
71,
13,
1,
65,
20,
33,
10,
12,
9,
11,
32,
11,
32,
5,
79,
13,
1,
32,
4,
32,
11,
106,
32,
14,
58,
0,
0,
32,
5,
32,
15,
65,
2,
106,
34,
15,
107,
65,
131,
2,
79,
13,
5,
32,
13,
33,
19,
12,
8,
11,
32,
11,
65,
157,
2,
75,
4,
64,
32,
11,
33,
19,
32,
17,
33,
18,
65,
32,
12,
4,
11,
32,
17,
65,
14,
75,
4,
127,
32,
17,
5,
32,
20,
32,
25,
107,
34,
9,
65,
1,
77,
13,
54,
32,
25,
47,
0,
0,
32,
8,
32,
25,
65,
2,
106,
34,
9,
54,
2,
0,
32,
17,
116,
32,
12,
114,
33,
12,
32,
9,
33,
23,
32,
9,
33,
24,
32,
9,
33,
25,
32,
9,
33,
26,
32,
9,
33,
21,
32,
17,
65,
16,
106,
11,
33,
18,
32,
13,
65,
127,
106,
65,
31,
113,
34,
11,
65,
1,
116,
65,
172,
189,
192,
0,
106,
47,
1,
0,
33,
19,
2,
64,
32,
11,
65,
140,
189,
192,
0,
106,
45,
0,
0,
34,
28,
69,
13,
0,
32,
12,
32,
28,
65,
31,
113,
34,
13,
118,
33,
11,
32,
12,
65,
127,
32,
13,
116,
65,
127,
115,
113,
32,
19,
106,
33,
19,
32,
18,
32,
28,
107,
34,
12,
65,
14,
75,
4,
64,
32,
12,
33,
18,
32,
11,
33,
12,
12,
1,
11,
32,
20,
32,
24,
107,
34,
9,
65,
1,
77,
13,
54,
32,
24,
47,
0,
0,
32,
8,
32,
24,
65,
2,
106,
34,
9,
54,
2,
0,
32,
12,
65,
16,
106,
33,
18,
32,
12,
116,
32,
11,
114,
33,
12,
32,
9,
33,
23,
32,
9,
33,
24,
32,
9,
33,
25,
32,
9,
33,
26,
32,
9,
33,
21,
11,
32,
35,
32,
12,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
14,
65,
127,
76,
4,
64,
65,
10,
33,
11,
3,
64,
32,
12,
32,
11,
65,
31,
113,
118,
65,
1,
113,
32,
14,
65,
127,
115,
106,
34,
13,
65,
191,
4,
75,
13,
3,
32,
11,
65,
1,
106,
33,
11,
32,
1,
32,
13,
65,
1,
116,
106,
65,
216,
43,
106,
46,
1,
0,
34,
14,
65,
127,
76,
13,
0,
11,
12,
3,
11,
32,
14,
65,
9,
118,
34,
11,
13,
2,
65,
34,
12,
3,
11,
32,
11,
32,
5,
65,
152,
193,
192,
0,
16,
103,
0,
11,
32,
13,
65,
192,
4,
65,
204,
184,
192,
0,
16,
103,
0,
11,
32,
18,
32,
11,
107,
33,
17,
32,
12,
32,
11,
65,
31,
113,
118,
33,
11,
32,
14,
65,
255,
3,
113,
34,
12,
65,
29,
77,
4,
64,
32,
12,
65,
1,
116,
65,
140,
190,
192,
0,
106,
47,
1,
0,
33,
29,
2,
64,
32,
12,
65,
236,
189,
192,
0,
106,
45,
0,
0,
34,
28,
69,
4,
64,
32,
11,
33,
12,
12,
1,
11,
32,
17,
65,
14,
75,
4,
127,
32,
17,
5,
32,
20,
32,
23,
107,
34,
9,
65,
1,
77,
13,
53,
32,
23,
47,
0,
0,
32,
8,
32,
23,
65,
2,
106,
34,
9,
54,
2,
0,
32,
17,
116,
32,
11,
114,
33,
11,
32,
9,
33,
23,
32,
9,
33,
24,
32,
9,
33,
25,
32,
9,
33,
26,
32,
9,
33,
21,
32,
17,
65,
16,
106,
11,
32,
28,
107,
33,
17,
32,
11,
32,
28,
65,
31,
113,
34,
13,
118,
33,
12,
32,
11,
65,
127,
32,
13,
116,
65,
127,
115,
113,
32,
29,
106,
33,
29,
11,
32,
33,
65,
0,
32,
29,
32,
15,
75,
27,
69,
4,
64,
32,
4,
32,
5,
32,
15,
32,
29,
32,
19,
32,
30,
16,
70,
32,
5,
32,
15,
32,
19,
106,
34,
15,
107,
65,
131,
2,
79,
13,
5,
12,
6,
11,
32,
17,
33,
18,
65,
29,
12,
1,
11,
32,
17,
33,
18,
32,
11,
33,
12,
65,
33,
11,
33,
14,
32,
8,
32,
28,
54,
2,
24,
32,
8,
32,
19,
54,
2,
20,
32,
8,
32,
29,
54,
2,
16,
32,
8,
32,
18,
54,
2,
12,
32,
8,
32,
12,
54,
2,
8,
12,
44,
11,
32,
9,
33,
23,
32,
9,
33,
24,
32,
9,
33,
25,
32,
9,
33,
26,
32,
9,
33,
21,
32,
13,
33,
19,
32,
20,
32,
9,
107,
65,
14,
79,
13,
0,
11,
11,
11,
32,
8,
32,
28,
54,
2,
24,
32,
8,
32,
19,
54,
2,
20,
32,
8,
32,
29,
54,
2,
16,
32,
8,
32,
17,
54,
2,
12,
32,
8,
32,
12,
54,
2,
8,
12,
38,
11,
2,
64,
2,
64,
32,
8,
40,
2,
12,
34,
13,
65,
15,
79,
4,
64,
32,
8,
40,
2,
8,
33,
12,
12,
1,
11,
32,
20,
32,
17,
107,
34,
9,
65,
1,
77,
13,
46,
32,
17,
47,
0,
0,
33,
12,
32,
8,
32,
17,
65,
2,
106,
34,
9,
54,
2,
0,
32,
8,
32,
13,
65,
16,
106,
34,
10,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
12,
32,
13,
116,
114,
34,
12,
54,
2,
8,
32,
9,
33,
17,
32,
10,
33,
13,
11,
32,
31,
32,
12,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
14,
65,
127,
76,
4,
64,
65,
10,
33,
11,
3,
64,
32,
12,
32,
11,
65,
31,
113,
118,
65,
1,
113,
32,
14,
65,
127,
115,
106,
34,
10,
65,
191,
4,
77,
4,
64,
32,
11,
65,
1,
106,
33,
11,
32,
1,
32,
10,
65,
1,
116,
106,
65,
184,
16,
106,
46,
1,
0,
34,
14,
65,
127,
76,
13,
1,
12,
3,
11,
11,
32,
10,
65,
192,
4,
65,
204,
184,
192,
0,
16,
103,
0,
11,
32,
14,
65,
9,
118,
34,
11,
13,
0,
65,
34,
33,
10,
12,
38,
11,
32,
8,
32,
13,
32,
11,
107,
34,
18,
54,
2,
12,
32,
8,
32,
12,
32,
11,
65,
31,
113,
118,
34,
13,
54,
2,
8,
32,
8,
32,
14,
54,
2,
20,
65,
21,
33,
10,
32,
14,
65,
128,
2,
113,
13,
37,
2,
64,
2,
64,
32,
18,
65,
14,
75,
4,
64,
32,
18,
33,
21,
12,
1,
11,
32,
20,
32,
17,
107,
34,
9,
65,
1,
77,
13,
46,
32,
17,
47,
0,
0,
33,
12,
32,
8,
32,
18,
65,
16,
106,
34,
21,
54,
2,
12,
32,
8,
32,
17,
65,
2,
106,
34,
9,
54,
2,
0,
32,
8,
32,
12,
32,
18,
116,
32,
13,
114,
34,
13,
54,
2,
8,
32,
9,
33,
17,
11,
32,
31,
32,
13,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
12,
65,
127,
76,
4,
64,
65,
10,
33,
11,
3,
64,
32,
13,
32,
11,
65,
31,
113,
118,
65,
1,
113,
32,
12,
65,
127,
115,
106,
34,
12,
65,
191,
4,
77,
4,
64,
32,
11,
65,
1,
106,
33,
11,
32,
1,
32,
12,
65,
1,
116,
106,
65,
184,
16,
106,
46,
1,
0,
34,
12,
65,
127,
76,
13,
1,
12,
3,
11,
11,
32,
12,
65,
192,
4,
65,
204,
184,
192,
0,
16,
103,
0,
11,
32,
12,
65,
9,
118,
34,
11,
13,
0,
65,
34,
33,
10,
12,
38,
11,
32,
8,
32,
21,
32,
11,
107,
54,
2,
12,
32,
8,
32,
13,
32,
11,
65,
31,
113,
118,
54,
2,
8,
2,
64,
32,
15,
32,
5,
73,
4,
64,
32,
4,
32,
15,
106,
32,
14,
58,
0,
0,
32,
15,
65,
1,
106,
33,
11,
32,
12,
65,
128,
2,
113,
69,
4,
64,
32,
11,
32,
5,
73,
13,
2,
32,
11,
32,
5,
65,
152,
193,
192,
0,
16,
103,
0,
11,
32,
8,
32,
12,
54,
2,
20,
32,
11,
33,
15,
12,
39,
11,
12,
46,
11,
32,
4,
32,
11,
106,
32,
12,
58,
0,
0,
32,
15,
65,
2,
106,
33,
15,
32,
20,
32,
17,
107,
34,
10,
65,
4,
79,
13,
0,
11,
11,
32,
8,
40,
2,
12,
34,
16,
65,
15,
79,
4,
64,
32,
8,
40,
2,
8,
33,
14,
12,
12,
11,
32,
10,
65,
1,
75,
13,
10,
32,
8,
40,
2,
8,
33,
14,
32,
16,
33,
12,
3,
64,
2,
64,
32,
31,
32,
14,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
10,
65,
127,
76,
4,
64,
65,
11,
33,
11,
32,
12,
65,
11,
73,
13,
1,
3,
64,
32,
14,
32,
11,
65,
127,
106,
65,
31,
113,
118,
65,
1,
113,
32,
10,
65,
127,
115,
106,
34,
10,
65,
191,
4,
77,
4,
64,
32,
1,
32,
10,
65,
1,
116,
106,
65,
184,
16,
106,
46,
1,
0,
34,
10,
65,
127,
74,
4,
64,
32,
12,
33,
16,
12,
17,
11,
32,
12,
32,
11,
65,
1,
106,
34,
11,
79,
13,
1,
12,
3,
11,
11,
32,
10,
65,
192,
4,
65,
236,
184,
192,
0,
16,
103,
0,
11,
32,
10,
65,
9,
118,
65,
127,
106,
32,
12,
79,
13,
0,
32,
12,
33,
16,
12,
13,
11,
32,
9,
32,
20,
70,
4,
64,
65,
12,
33,
14,
32,
27,
33,
10,
12,
38,
11,
32,
8,
32,
9,
65,
1,
106,
34,
10,
54,
2,
0,
32,
9,
45,
0,
0,
33,
9,
32,
8,
32,
12,
65,
8,
106,
34,
16,
54,
2,
12,
32,
8,
32,
9,
32,
12,
65,
31,
113,
116,
32,
14,
114,
34,
14,
54,
2,
8,
32,
10,
33,
9,
32,
16,
34,
12,
65,
15,
73,
13,
0,
11,
12,
11,
11,
65,
0,
33,
16,
12,
36,
11,
32,
8,
40,
2,
20,
33,
13,
32,
8,
40,
2,
4,
33,
16,
3,
64,
32,
13,
65,
3,
75,
4,
64,
65,
24,
33,
10,
12,
35,
11,
2,
127,
2,
64,
32,
8,
40,
2,
12,
34,
11,
69,
4,
64,
32,
16,
32,
8,
40,
2,
0,
34,
9,
70,
4,
64,
65,
23,
33,
14,
32,
27,
33,
10,
12,
39,
11,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
1,
32,
9,
45,
0,
0,
32,
1,
40,
2,
12,
65,
8,
116,
114,
54,
2,
12,
12,
1,
11,
3,
64,
32,
11,
65,
8,
79,
4,
64,
32,
1,
32,
8,
40,
2,
8,
34,
9,
65,
255,
1,
113,
32,
1,
40,
2,
12,
65,
8,
116,
114,
54,
2,
12,
32,
8,
32,
11,
65,
120,
106,
54,
2,
12,
32,
8,
32,
9,
65,
8,
118,
54,
2,
8,
12,
2,
11,
2,
127,
32,
22,
32,
16,
32,
8,
40,
2,
0,
34,
9,
70,
13,
0,
26,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
9,
45,
0,
0,
33,
10,
32,
8,
32,
11,
65,
8,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
11,
116,
114,
54,
2,
8,
32,
9,
33,
11,
65,
0,
11,
34,
12,
65,
2,
113,
69,
13,
0,
11,
32,
12,
65,
128,
254,
3,
113,
65,
8,
118,
12,
1,
11,
32,
13,
65,
1,
106,
33,
13,
32,
8,
32,
13,
54,
2,
20,
65,
0,
33,
12,
65,
0,
11,
33,
10,
65,
23,
33,
14,
32,
12,
65,
255,
1,
113,
65,
1,
107,
14,
2,
34,
35,
0,
11,
0,
11,
65,
3,
33,
10,
32,
1,
40,
2,
16,
69,
13,
32,
32,
8,
40,
2,
12,
34,
11,
65,
7,
113,
33,
16,
32,
8,
40,
2,
4,
33,
9,
3,
64,
2,
64,
32,
11,
32,
16,
79,
4,
64,
32,
8,
32,
11,
32,
16,
107,
34,
11,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
16,
118,
54,
2,
8,
32,
8,
40,
2,
0,
33,
13,
12,
1,
11,
2,
127,
32,
9,
32,
8,
40,
2,
0,
34,
10,
70,
4,
64,
32,
9,
33,
13,
32,
22,
12,
1,
11,
32,
8,
32,
10,
65,
1,
106,
34,
13,
54,
2,
0,
32,
10,
45,
0,
0,
33,
10,
32,
8,
32,
11,
65,
8,
106,
34,
12,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
11,
65,
31,
113,
116,
114,
54,
2,
8,
32,
12,
33,
11,
65,
0,
11,
65,
2,
113,
69,
13,
1,
11,
11,
32,
8,
32,
11,
32,
13,
32,
9,
107,
32,
3,
106,
34,
9,
32,
11,
65,
3,
118,
34,
10,
32,
10,
32,
9,
75,
27,
34,
10,
65,
3,
116,
107,
34,
12,
54,
2,
12,
32,
9,
32,
10,
107,
34,
9,
32,
3,
77,
4,
64,
32,
8,
32,
40,
54,
2,
4,
32,
8,
32,
2,
32,
9,
106,
54,
2,
0,
32,
8,
32,
8,
40,
2,
8,
65,
127,
32,
12,
65,
31,
113,
116,
65,
127,
115,
113,
54,
2,
8,
65,
24,
33,
10,
32,
36,
69,
13,
33,
32,
8,
65,
0,
54,
2,
20,
65,
23,
33,
10,
12,
33,
11,
32,
9,
32,
3,
65,
204,
190,
192,
0,
16,
105,
0,
11,
32,
8,
40,
2,
16,
33,
12,
3,
64,
32,
5,
32,
15,
107,
34,
9,
69,
4,
64,
65,
19,
33,
14,
65,
2,
33,
16,
12,
35,
11,
32,
4,
32,
5,
32,
15,
32,
12,
107,
32,
30,
113,
32,
15,
32,
8,
40,
2,
20,
34,
10,
32,
9,
32,
9,
32,
10,
75,
27,
34,
9,
32,
30,
16,
22,
32,
8,
32,
10,
32,
9,
107,
34,
11,
54,
2,
20,
32,
9,
32,
15,
106,
33,
15,
65,
12,
33,
10,
32,
11,
13,
0,
11,
12,
31,
11,
32,
8,
40,
2,
16,
33,
12,
32,
33,
4,
64,
65,
29,
33,
10,
32,
15,
32,
12,
73,
13,
31,
11,
2,
64,
32,
8,
40,
2,
20,
34,
10,
32,
15,
106,
34,
9,
32,
5,
75,
13,
0,
32,
15,
32,
12,
107,
32,
30,
113,
34,
11,
32,
15,
79,
65,
0,
32,
11,
32,
15,
107,
32,
10,
73,
27,
13,
0,
32,
4,
32,
5,
32,
15,
32,
12,
32,
10,
32,
30,
16,
70,
65,
12,
33,
10,
32,
9,
33,
15,
12,
31,
11,
65,
19,
65,
12,
32,
10,
27,
33,
10,
12,
30,
11,
32,
8,
40,
2,
12,
33,
11,
32,
8,
40,
2,
4,
33,
13,
32,
8,
40,
2,
24,
33,
12,
3,
64,
32,
11,
32,
12,
79,
4,
64,
32,
8,
32,
11,
32,
12,
107,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
34,
9,
32,
12,
65,
31,
113,
34,
10,
118,
54,
2,
8,
32,
8,
32,
8,
40,
2,
16,
32,
9,
65,
127,
32,
10,
116,
65,
127,
115,
113,
106,
54,
2,
16,
65,
22,
33,
10,
12,
31,
11,
2,
127,
32,
22,
32,
13,
32,
8,
40,
2,
0,
34,
9,
70,
13,
0,
26,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
9,
45,
0,
0,
33,
10,
32,
8,
32,
11,
65,
8,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
11,
65,
31,
113,
116,
114,
54,
2,
8,
32,
9,
33,
11,
65,
0,
11,
34,
10,
65,
2,
113,
69,
32,
10,
65,
255,
1,
113,
69,
114,
13,
0,
11,
32,
10,
65,
128,
254,
3,
113,
65,
8,
118,
33,
10,
65,
16,
33,
14,
12,
30,
11,
2,
64,
32,
8,
40,
2,
12,
34,
16,
65,
15,
79,
4,
64,
32,
8,
40,
2,
8,
33,
14,
12,
1,
11,
32,
8,
40,
2,
4,
34,
17,
32,
8,
40,
2,
0,
34,
13,
107,
65,
1,
77,
4,
64,
32,
8,
40,
2,
8,
33,
14,
32,
16,
33,
12,
3,
64,
2,
64,
32,
35,
32,
14,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
10,
65,
127,
76,
4,
64,
65,
11,
33,
11,
32,
12,
65,
11,
73,
13,
1,
3,
64,
32,
14,
32,
11,
65,
127,
106,
65,
31,
113,
118,
65,
1,
113,
32,
10,
65,
127,
115,
106,
34,
9,
65,
191,
4,
77,
4,
64,
32,
1,
32,
9,
65,
1,
116,
106,
65,
216,
43,
106,
46,
1,
0,
34,
10,
65,
127,
74,
4,
64,
32,
12,
33,
16,
12,
7,
11,
32,
12,
32,
11,
65,
1,
106,
34,
11,
79,
13,
1,
12,
3,
11,
11,
32,
9,
65,
192,
4,
65,
236,
184,
192,
0,
16,
103,
0,
11,
32,
10,
65,
9,
118,
65,
127,
106,
32,
12,
79,
13,
0,
32,
12,
33,
16,
12,
3,
11,
32,
13,
32,
17,
70,
4,
64,
65,
15,
33,
14,
32,
27,
33,
10,
12,
33,
11,
32,
8,
32,
13,
65,
1,
106,
34,
9,
54,
2,
0,
32,
13,
45,
0,
0,
33,
10,
32,
8,
32,
12,
65,
8,
106,
34,
16,
54,
2,
12,
32,
8,
32,
10,
32,
12,
65,
31,
113,
116,
32,
14,
114,
34,
14,
54,
2,
8,
32,
9,
33,
13,
32,
16,
34,
12,
65,
15,
73,
13,
0,
11,
12,
1,
11,
32,
13,
47,
0,
0,
33,
10,
32,
8,
32,
13,
65,
2,
106,
54,
2,
0,
32,
8,
32,
16,
65,
16,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
16,
116,
114,
34,
14,
54,
2,
8,
32,
9,
33,
16,
11,
2,
64,
32,
35,
32,
14,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
10,
65,
127,
76,
4,
64,
65,
10,
33,
11,
3,
64,
32,
14,
32,
11,
65,
31,
113,
118,
65,
1,
113,
32,
10,
65,
127,
115,
106,
34,
9,
65,
191,
4,
75,
13,
40,
32,
11,
65,
1,
106,
33,
11,
32,
1,
32,
9,
65,
1,
116,
106,
65,
216,
43,
106,
46,
1,
0,
34,
10,
65,
127,
76,
13,
0,
11,
32,
10,
33,
12,
12,
1,
11,
32,
10,
65,
255,
3,
113,
33,
12,
32,
10,
65,
9,
118,
33,
11,
12,
0,
11,
65,
34,
33,
10,
32,
11,
69,
13,
28,
32,
8,
32,
16,
32,
11,
107,
54,
2,
12,
32,
8,
32,
14,
32,
11,
65,
31,
113,
118,
54,
2,
8,
65,
33,
33,
10,
32,
12,
65,
29,
74,
13,
28,
32,
8,
32,
12,
65,
31,
113,
34,
9,
65,
1,
116,
65,
140,
190,
192,
0,
106,
47,
1,
0,
54,
2,
16,
32,
8,
32,
9,
65,
236,
189,
192,
0,
106,
45,
0,
0,
34,
9,
54,
2,
24,
65,
16,
65,
22,
32,
9,
27,
33,
10,
12,
28,
11,
32,
8,
40,
2,
12,
33,
11,
32,
8,
40,
2,
4,
33,
13,
32,
8,
40,
2,
24,
33,
12,
3,
64,
32,
11,
32,
12,
79,
4,
64,
32,
8,
32,
11,
32,
12,
107,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
34,
9,
32,
12,
65,
31,
113,
34,
10,
118,
54,
2,
8,
32,
8,
32,
8,
40,
2,
20,
32,
9,
65,
127,
32,
10,
116,
65,
127,
115,
113,
106,
54,
2,
20,
65,
15,
33,
10,
12,
29,
11,
2,
127,
32,
22,
32,
13,
32,
8,
40,
2,
0,
34,
9,
70,
13,
0,
26,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
9,
45,
0,
0,
33,
10,
32,
8,
32,
11,
65,
8,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
11,
65,
31,
113,
116,
114,
54,
2,
8,
32,
9,
33,
11,
65,
0,
11,
34,
10,
65,
2,
113,
69,
32,
10,
65,
255,
1,
113,
69,
114,
13,
0,
11,
32,
10,
65,
128,
254,
3,
113,
65,
8,
118,
33,
10,
65,
14,
33,
14,
12,
28,
11,
32,
8,
32,
8,
40,
2,
20,
34,
12,
65,
255,
3,
113,
34,
9,
54,
2,
20,
65,
20,
33,
10,
32,
9,
65,
128,
2,
70,
13,
26,
65,
32,
33,
10,
32,
9,
65,
157,
2,
75,
13,
26,
32,
8,
32,
12,
65,
127,
106,
65,
31,
113,
34,
9,
65,
1,
116,
65,
172,
189,
192,
0,
106,
47,
1,
0,
54,
2,
20,
32,
8,
32,
9,
65,
140,
189,
192,
0,
106,
45,
0,
0,
34,
9,
54,
2,
24,
65,
14,
65,
15,
32,
9,
27,
33,
10,
12,
26,
11,
65,
21,
33,
10,
32,
8,
40,
2,
20,
34,
9,
65,
255,
1,
75,
13,
25,
32,
5,
32,
15,
70,
13,
12,
32,
15,
32,
5,
73,
4,
64,
32,
4,
32,
15,
106,
32,
9,
58,
0,
0,
32,
15,
65,
1,
106,
33,
15,
65,
12,
33,
10,
12,
26,
11,
12,
33,
11,
32,
20,
32,
9,
107,
34,
10,
65,
1,
77,
13,
1,
32,
9,
47,
0,
0,
33,
10,
32,
8,
32,
9,
65,
2,
106,
54,
2,
0,
32,
8,
32,
16,
65,
16,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
16,
116,
114,
34,
14,
54,
2,
8,
32,
9,
33,
16,
11,
32,
31,
32,
14,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
10,
65,
127,
74,
13,
1,
65,
10,
33,
11,
3,
64,
32,
14,
32,
11,
65,
31,
113,
118,
65,
1,
113,
32,
10,
65,
127,
115,
106,
34,
9,
65,
191,
4,
75,
13,
33,
32,
11,
65,
1,
106,
33,
11,
32,
1,
32,
9,
65,
1,
116,
106,
65,
184,
16,
106,
46,
1,
0,
34,
10,
65,
127,
76,
13,
0,
11,
32,
10,
33,
12,
12,
2,
11,
65,
2,
32,
10,
65,
220,
184,
192,
0,
16,
104,
0,
11,
32,
10,
65,
255,
3,
113,
33,
12,
32,
10,
65,
9,
118,
33,
11,
12,
0,
11,
65,
34,
33,
10,
32,
11,
69,
13,
20,
32,
8,
32,
12,
54,
2,
20,
32,
8,
32,
16,
32,
11,
107,
54,
2,
12,
32,
8,
32,
14,
32,
11,
65,
31,
113,
118,
54,
2,
8,
65,
13,
33,
10,
12,
20,
11,
32,
8,
40,
2,
12,
33,
11,
32,
8,
40,
2,
4,
33,
13,
32,
8,
40,
2,
24,
33,
12,
2,
64,
2,
64,
3,
64,
32,
11,
32,
12,
79,
4,
64,
32,
8,
32,
11,
32,
12,
107,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
34,
11,
32,
12,
65,
31,
113,
34,
13,
118,
54,
2,
8,
32,
8,
65,
11,
54,
2,
40,
32,
8,
66,
131,
128,
128,
128,
48,
55,
2,
32,
2,
64,
32,
8,
40,
2,
16,
34,
10,
65,
3,
113,
34,
9,
65,
3,
71,
4,
64,
32,
8,
65,
32,
106,
32,
9,
65,
2,
116,
106,
40,
2,
0,
33,
16,
65,
0,
33,
12,
32,
8,
40,
2,
20,
33,
9,
32,
10,
65,
16,
70,
4,
64,
32,
9,
65,
127,
106,
34,
10,
65,
200,
3,
75,
13,
2,
32,
1,
32,
10,
106,
65,
157,
210,
0,
106,
45,
0,
0,
33,
12,
11,
32,
9,
32,
16,
32,
11,
65,
127,
32,
13,
116,
65,
127,
115,
113,
106,
34,
11,
106,
34,
10,
32,
9,
73,
13,
4,
32,
10,
65,
201,
3,
75,
13,
5,
32,
11,
4,
64,
32,
1,
32,
9,
106,
65,
157,
210,
0,
106,
32,
12,
32,
11,
16,
139,
1,
26,
11,
32,
8,
32,
10,
54,
2,
20,
65,
10,
33,
10,
12,
25,
11,
65,
3,
65,
3,
65,
248,
191,
192,
0,
16,
103,
0,
11,
32,
10,
65,
201,
3,
65,
136,
192,
192,
0,
16,
103,
0,
11,
2,
127,
32,
22,
32,
13,
32,
8,
40,
2,
0,
34,
9,
70,
13,
0,
26,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
9,
45,
0,
0,
33,
10,
32,
8,
32,
11,
65,
8,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
11,
65,
31,
113,
116,
114,
54,
2,
8,
32,
9,
33,
11,
65,
0,
11,
34,
10,
65,
2,
113,
69,
32,
10,
65,
255,
1,
113,
69,
114,
13,
0,
11,
32,
10,
65,
128,
254,
3,
113,
65,
8,
118,
33,
10,
65,
11,
33,
14,
12,
22,
11,
32,
9,
32,
10,
65,
152,
192,
192,
0,
16,
105,
0,
11,
32,
10,
65,
201,
3,
65,
152,
192,
192,
0,
16,
104,
0,
11,
3,
64,
2,
64,
2,
64,
2,
64,
32,
8,
40,
2,
20,
34,
16,
32,
1,
40,
2,
44,
34,
10,
32,
1,
40,
2,
40,
34,
9,
106,
34,
12,
79,
4,
64,
32,
12,
32,
16,
70,
13,
1,
65,
26,
33,
10,
12,
23,
11,
32,
8,
40,
2,
12,
34,
13,
65,
15,
79,
4,
64,
32,
8,
40,
2,
8,
33,
14,
12,
2,
11,
32,
8,
40,
2,
4,
34,
17,
32,
8,
40,
2,
0,
34,
9,
107,
65,
1,
77,
4,
64,
32,
8,
40,
2,
8,
33,
14,
32,
13,
33,
12,
3,
64,
2,
64,
32,
38,
32,
14,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
10,
65,
127,
76,
4,
64,
65,
11,
33,
11,
32,
12,
65,
11,
73,
13,
1,
3,
64,
32,
14,
32,
11,
65,
127,
106,
65,
31,
113,
118,
65,
1,
113,
32,
10,
65,
127,
115,
106,
34,
10,
65,
191,
4,
77,
4,
64,
32,
1,
32,
10,
65,
1,
116,
106,
65,
248,
198,
0,
106,
46,
1,
0,
34,
10,
65,
127,
74,
4,
64,
32,
12,
33,
13,
12,
8,
11,
32,
12,
32,
11,
65,
1,
106,
34,
11,
79,
13,
1,
12,
3,
11,
11,
32,
10,
65,
192,
4,
65,
236,
184,
192,
0,
16,
103,
0,
11,
32,
10,
65,
9,
118,
65,
127,
106,
32,
12,
79,
13,
0,
32,
12,
33,
13,
12,
4,
11,
32,
9,
32,
17,
70,
4,
64,
65,
10,
33,
14,
32,
27,
33,
10,
12,
26,
11,
32,
8,
32,
9,
65,
1,
106,
34,
10,
54,
2,
0,
32,
9,
45,
0,
0,
33,
9,
32,
8,
32,
12,
65,
8,
106,
34,
13,
54,
2,
12,
32,
8,
32,
9,
32,
12,
65,
31,
113,
116,
32,
14,
114,
34,
14,
54,
2,
8,
32,
10,
33,
9,
32,
13,
34,
12,
65,
15,
73,
13,
0,
11,
12,
2,
11,
32,
9,
47,
0,
0,
33,
10,
32,
8,
32,
9,
65,
2,
106,
54,
2,
0,
32,
8,
32,
13,
65,
16,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
13,
116,
114,
34,
14,
54,
2,
8,
32,
9,
33,
13,
12,
1,
11,
2,
64,
2,
64,
2,
64,
32,
9,
65,
161,
2,
73,
4,
64,
32,
37,
32,
43,
32,
9,
16,
125,
26,
32,
10,
65,
161,
2,
79,
13,
1,
32,
16,
32,
9,
73,
13,
2,
32,
16,
65,
201,
3,
75,
13,
3,
32,
32,
32,
1,
32,
9,
106,
65,
157,
210,
0,
106,
32,
10,
16,
125,
26,
32,
1,
32,
1,
40,
2,
20,
65,
127,
106,
54,
2,
20,
32,
1,
32,
8,
65,
8,
106,
16,
10,
34,
11,
65,
128,
254,
3,
113,
65,
8,
118,
33,
10,
12,
5,
11,
32,
9,
65,
160,
2,
65,
220,
190,
192,
0,
16,
104,
0,
11,
32,
10,
65,
160,
2,
65,
236,
190,
192,
0,
16,
104,
0,
11,
32,
9,
32,
16,
65,
252,
190,
192,
0,
16,
105,
0,
11,
32,
16,
65,
201,
3,
65,
252,
190,
192,
0,
16,
104,
0,
11,
2,
64,
32,
38,
32,
14,
65,
255,
7,
113,
65,
1,
116,
106,
46,
1,
0,
34,
10,
65,
127,
76,
4,
64,
65,
10,
33,
11,
3,
64,
32,
14,
32,
11,
65,
31,
113,
118,
65,
1,
113,
32,
10,
65,
127,
115,
106,
34,
9,
65,
191,
4,
75,
13,
32,
32,
11,
65,
1,
106,
33,
11,
32,
1,
32,
9,
65,
1,
116,
106,
65,
248,
198,
0,
106,
46,
1,
0,
34,
10,
65,
127,
76,
13,
0,
11,
32,
10,
33,
12,
12,
1,
11,
32,
10,
65,
255,
3,
113,
33,
12,
32,
10,
65,
9,
118,
33,
11,
12,
0,
11,
32,
11,
69,
4,
64,
65,
34,
33,
10,
12,
21,
11,
32,
8,
32,
13,
32,
11,
107,
54,
2,
12,
65,
31,
33,
10,
32,
8,
32,
14,
32,
11,
65,
31,
113,
118,
54,
2,
8,
32,
8,
32,
12,
54,
2,
16,
2,
64,
32,
12,
65,
16,
79,
4,
64,
32,
16,
69,
65,
0,
32,
12,
65,
16,
70,
27,
13,
22,
32,
8,
65,
7,
54,
2,
40,
32,
8,
66,
130,
128,
128,
128,
48,
55,
2,
32,
32,
12,
65,
112,
106,
34,
9,
65,
2,
75,
13,
1,
32,
8,
32,
8,
65,
32,
106,
32,
9,
65,
2,
116,
106,
40,
2,
0,
54,
2,
24,
65,
11,
33,
10,
12,
22,
11,
32,
16,
65,
200,
3,
77,
4,
64,
32,
1,
32,
16,
106,
65,
157,
210,
0,
106,
32,
12,
58,
0,
0,
32,
8,
32,
16,
65,
1,
106,
54,
2,
20,
65,
0,
33,
10,
65,
0,
33,
11,
12,
2,
11,
32,
16,
65,
201,
3,
65,
216,
191,
192,
0,
16,
103,
0,
11,
32,
9,
65,
3,
65,
232,
191,
192,
0,
16,
103,
0,
11,
32,
11,
65,
255,
1,
113,
65,
1,
107,
14,
2,
19,
13,
0,
11,
0,
11,
3,
64,
2,
64,
2,
127,
32,
8,
40,
2,
20,
34,
10,
32,
1,
40,
2,
48,
79,
4,
64,
32,
1,
65,
19,
54,
2,
48,
32,
1,
32,
8,
65,
8,
106,
16,
10,
34,
14,
65,
128,
254,
3,
113,
65,
8,
118,
12,
1,
11,
32,
8,
40,
2,
4,
33,
12,
32,
8,
40,
2,
12,
33,
11,
3,
64,
32,
11,
65,
3,
79,
4,
64,
32,
8,
32,
11,
65,
125,
106,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
34,
9,
65,
3,
118,
54,
2,
8,
32,
10,
65,
19,
79,
13,
3,
32,
1,
32,
10,
65,
178,
191,
192,
0,
106,
45,
0,
0,
106,
65,
248,
207,
0,
106,
32,
9,
65,
7,
113,
58,
0,
0,
32,
8,
32,
10,
65,
1,
106,
54,
2,
20,
65,
0,
33,
14,
65,
0,
12,
2,
11,
2,
127,
32,
22,
32,
12,
32,
8,
40,
2,
0,
34,
9,
70,
13,
0,
26,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
9,
45,
0,
0,
33,
13,
32,
8,
32,
11,
65,
8,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
13,
32,
11,
116,
114,
54,
2,
8,
32,
9,
33,
11,
65,
0,
11,
34,
14,
65,
2,
113,
69,
13,
0,
11,
32,
14,
65,
128,
254,
3,
113,
65,
8,
118,
11,
33,
10,
32,
14,
65,
255,
1,
113,
65,
1,
107,
14,
2,
19,
14,
1,
11,
11,
32,
10,
65,
19,
65,
200,
191,
192,
0,
16,
103,
0,
11,
32,
8,
40,
2,
20,
33,
9,
32,
8,
40,
2,
4,
33,
13,
3,
64,
32,
9,
65,
3,
79,
4,
64,
32,
42,
65,
0,
65,
160,
2,
16,
139,
1,
26,
32,
8,
65,
0,
54,
2,
20,
65,
9,
33,
10,
12,
18,
11,
32,
8,
65,
4,
54,
2,
40,
32,
8,
66,
133,
128,
128,
128,
208,
0,
55,
2,
32,
32,
8,
65,
32,
106,
32,
9,
65,
2,
116,
106,
40,
2,
0,
33,
12,
32,
8,
40,
2,
12,
33,
11,
2,
127,
3,
64,
32,
11,
32,
12,
79,
4,
64,
32,
1,
32,
9,
65,
2,
116,
106,
65,
40,
106,
32,
9,
65,
1,
116,
65,
172,
191,
192,
0,
106,
47,
1,
0,
32,
8,
40,
2,
8,
34,
10,
65,
127,
32,
12,
65,
31,
113,
34,
16,
116,
65,
127,
115,
113,
106,
54,
2,
0,
32,
8,
32,
11,
32,
12,
107,
54,
2,
12,
32,
8,
32,
9,
65,
1,
106,
34,
9,
54,
2,
20,
32,
8,
32,
10,
32,
16,
118,
54,
2,
8,
65,
0,
33,
14,
65,
0,
12,
2,
11,
2,
127,
32,
22,
32,
13,
32,
8,
40,
2,
0,
34,
10,
70,
13,
0,
26,
32,
8,
32,
10,
65,
1,
106,
54,
2,
0,
32,
10,
45,
0,
0,
33,
16,
32,
8,
32,
11,
65,
8,
106,
34,
10,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
16,
32,
11,
65,
31,
113,
116,
114,
54,
2,
8,
32,
10,
33,
11,
65,
0,
11,
34,
14,
65,
2,
113,
69,
13,
0,
11,
32,
14,
65,
128,
254,
3,
113,
65,
8,
118,
11,
33,
10,
32,
14,
65,
255,
1,
113,
65,
1,
107,
14,
2,
17,
13,
0,
11,
0,
11,
32,
8,
40,
2,
4,
34,
16,
32,
8,
40,
2,
0,
34,
11,
107,
34,
12,
69,
4,
64,
65,
7,
33,
14,
32,
27,
33,
10,
12,
17,
11,
2,
64,
2,
64,
32,
12,
32,
8,
40,
2,
20,
34,
13,
32,
12,
32,
5,
32,
15,
107,
34,
9,
32,
9,
32,
12,
75,
27,
34,
9,
32,
9,
32,
13,
75,
27,
34,
10,
79,
4,
64,
32,
10,
32,
15,
106,
34,
9,
32,
10,
73,
13,
1,
32,
9,
32,
5,
75,
13,
2,
32,
4,
32,
15,
106,
32,
11,
32,
10,
16,
125,
26,
2,
64,
32,
12,
32,
10,
65,
127,
106,
75,
4,
64,
32,
8,
32,
10,
32,
11,
106,
54,
2,
0,
12,
1,
11,
32,
8,
32,
16,
54,
2,
0,
11,
32,
8,
32,
13,
32,
10,
107,
54,
2,
20,
65,
6,
33,
10,
32,
9,
33,
15,
12,
18,
11,
32,
10,
32,
12,
65,
140,
191,
192,
0,
16,
104,
0,
11,
32,
15,
32,
9,
65,
168,
193,
192,
0,
16,
105,
0,
11,
32,
9,
32,
5,
65,
168,
193,
192,
0,
16,
104,
0,
11,
65,
20,
33,
10,
32,
8,
40,
2,
20,
69,
13,
14,
65,
7,
33,
10,
32,
5,
32,
15,
71,
13,
14,
12,
1,
11,
32,
5,
32,
15,
71,
13,
1,
11,
65,
2,
33,
16,
32,
5,
33,
15,
12,
14,
11,
32,
15,
32,
5,
73,
4,
64,
32,
4,
32,
15,
106,
32,
8,
40,
2,
16,
58,
0,
0,
32,
8,
40,
2,
12,
33,
9,
32,
8,
32,
8,
40,
2,
20,
65,
127,
106,
34,
10,
54,
2,
20,
65,
17,
65,
6,
32,
9,
27,
65,
6,
32,
10,
27,
33,
10,
32,
15,
65,
1,
106,
33,
15,
12,
12,
11,
12,
19,
11,
32,
8,
40,
2,
12,
33,
11,
32,
8,
40,
2,
4,
33,
12,
3,
64,
32,
11,
65,
8,
79,
4,
64,
32,
8,
32,
8,
40,
2,
8,
34,
9,
65,
255,
1,
113,
54,
2,
16,
32,
8,
32,
11,
65,
120,
106,
54,
2,
12,
32,
8,
32,
9,
65,
8,
118,
54,
2,
8,
65,
18,
33,
10,
12,
12,
11,
2,
127,
32,
22,
32,
12,
32,
8,
40,
2,
0,
34,
9,
70,
13,
0,
26,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
9,
45,
0,
0,
33,
10,
32,
8,
32,
11,
65,
8,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
11,
116,
114,
54,
2,
8,
32,
9,
33,
11,
65,
0,
11,
34,
10,
65,
2,
113,
69,
32,
10,
65,
255,
1,
113,
69,
114,
13,
0,
11,
32,
10,
65,
128,
254,
3,
113,
65,
8,
118,
33,
10,
65,
17,
33,
14,
12,
11,
11,
32,
8,
40,
2,
20,
33,
13,
32,
8,
40,
2,
4,
33,
16,
3,
64,
32,
13,
65,
4,
79,
4,
64,
32,
8,
32,
1,
47,
0,
153,
82,
34,
9,
54,
2,
20,
65,
30,
33,
10,
32,
9,
32,
1,
47,
0,
155,
82,
65,
255,
255,
3,
115,
71,
13,
11,
65,
20,
33,
10,
32,
9,
69,
13,
11,
65,
17,
65,
6,
32,
8,
40,
2,
12,
27,
33,
10,
12,
11,
11,
2,
127,
2,
64,
32,
8,
40,
2,
12,
34,
11,
69,
4,
64,
32,
16,
32,
8,
40,
2,
0,
34,
9,
70,
4,
64,
65,
5,
33,
14,
32,
27,
33,
10,
12,
15,
11,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
1,
32,
13,
106,
65,
153,
210,
0,
106,
32,
9,
45,
0,
0,
58,
0,
0,
12,
1,
11,
3,
64,
32,
11,
65,
8,
79,
4,
64,
32,
1,
32,
13,
106,
65,
153,
210,
0,
106,
32,
8,
40,
2,
8,
34,
9,
58,
0,
0,
32,
8,
32,
11,
65,
120,
106,
54,
2,
12,
32,
8,
32,
9,
65,
8,
118,
54,
2,
8,
12,
2,
11,
2,
127,
32,
22,
32,
16,
32,
8,
40,
2,
0,
34,
9,
70,
13,
0,
26,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
9,
45,
0,
0,
33,
10,
32,
8,
32,
11,
65,
8,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
11,
116,
114,
54,
2,
8,
32,
9,
33,
11,
65,
0,
11,
34,
12,
65,
2,
113,
69,
13,
0,
11,
32,
12,
65,
128,
254,
3,
113,
65,
8,
118,
12,
1,
11,
32,
13,
65,
1,
106,
33,
13,
32,
8,
32,
13,
54,
2,
20,
65,
0,
33,
12,
65,
0,
11,
33,
10,
65,
5,
33,
14,
32,
12,
65,
255,
1,
113,
65,
1,
107,
14,
2,
10,
11,
0,
11,
0,
11,
32,
8,
40,
2,
12,
33,
14,
32,
8,
40,
2,
4,
33,
12,
3,
64,
32,
14,
65,
7,
113,
33,
9,
32,
14,
33,
11,
3,
64,
32,
11,
32,
9,
79,
4,
64,
32,
8,
65,
0,
54,
2,
20,
32,
8,
32,
11,
32,
9,
107,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
9,
118,
54,
2,
8,
65,
5,
33,
10,
12,
11,
11,
2,
127,
32,
22,
32,
12,
32,
8,
40,
2,
0,
34,
10,
70,
13,
0,
26,
32,
8,
32,
10,
65,
1,
106,
54,
2,
0,
32,
10,
45,
0,
0,
33,
10,
32,
8,
32,
11,
65,
8,
106,
34,
14,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
10,
32,
11,
65,
31,
113,
116,
114,
54,
2,
8,
32,
14,
33,
11,
65,
0,
11,
34,
10,
65,
2,
113,
69,
13,
0,
11,
32,
10,
65,
255,
1,
113,
69,
13,
0,
11,
32,
10,
65,
128,
254,
3,
113,
65,
8,
118,
33,
10,
65,
4,
33,
14,
12,
9,
11,
3,
64,
32,
8,
40,
2,
4,
33,
10,
32,
8,
40,
2,
12,
33,
11,
2,
127,
3,
64,
32,
11,
65,
3,
79,
4,
64,
32,
1,
32,
8,
40,
2,
8,
34,
9,
65,
1,
113,
54,
2,
16,
32,
1,
32,
9,
65,
1,
118,
65,
3,
113,
34,
12,
54,
2,
20,
32,
8,
32,
11,
65,
125,
106,
54,
2,
12,
32,
8,
32,
9,
65,
3,
118,
54,
2,
8,
65,
4,
33,
10,
2,
64,
2,
64,
2,
64,
32,
12,
65,
1,
107,
14,
3,
0,
1,
2,
14,
11,
32,
1,
66,
160,
130,
128,
128,
128,
4,
55,
2,
40,
32,
37,
65,
8,
65,
144,
1,
16,
139,
1,
26,
32,
44,
65,
9,
65,
240,
0,
16,
139,
1,
26,
32,
34,
65,
16,
106,
66,
135,
142,
156,
184,
240,
224,
193,
131,
7,
55,
2,
0,
32,
34,
65,
8,
106,
66,
135,
142,
156,
184,
240,
224,
193,
131,
7,
55,
2,
0,
32,
34,
66,
135,
142,
156,
184,
240,
224,
193,
131,
7,
55,
2,
0,
32,
1,
66,
136,
144,
160,
192,
128,
129,
130,
132,
8,
55,
2,
208,
27,
32,
32,
66,
133,
138,
148,
168,
208,
160,
193,
130,
5,
55,
2,
0,
32,
32,
65,
8,
106,
66,
133,
138,
148,
168,
208,
160,
193,
130,
5,
55,
2,
0,
32,
32,
65,
16,
106,
66,
133,
138,
148,
168,
208,
160,
193,
130,
5,
55,
2,
0,
32,
32,
65,
24,
106,
66,
133,
138,
148,
168,
208,
160,
193,
130,
5,
55,
2,
0,
32,
1,
32,
8,
65,
8,
106,
16,
10,
34,
14,
65,
128,
254,
3,
113,
65,
8,
118,
12,
4,
11,
32,
8,
65,
0,
54,
2,
20,
65,
8,
33,
10,
12,
12,
11,
65,
25,
33,
10,
12,
11,
11,
2,
127,
32,
22,
32,
10,
32,
8,
40,
2,
0,
34,
9,
70,
13,
0,
26,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
9,
45,
0,
0,
33,
12,
32,
8,
32,
11,
65,
8,
106,
34,
9,
54,
2,
12,
32,
8,
32,
8,
40,
2,
8,
32,
12,
32,
11,
116,
114,
54,
2,
8,
32,
9,
33,
11,
65,
0,
11,
34,
14,
65,
2,
113,
69,
13,
0,
11,
32,
14,
65,
128,
254,
3,
113,
65,
8,
118,
11,
33,
10,
32,
14,
65,
255,
1,
113,
65,
1,
107,
14,
2,
8,
5,
0,
11,
0,
11,
32,
8,
40,
2,
0,
34,
9,
32,
8,
40,
2,
4,
70,
4,
64,
65,
1,
33,
14,
32,
27,
33,
10,
12,
8,
11,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
1,
32,
9,
45,
0,
0,
54,
2,
4,
65,
2,
33,
10,
12,
6,
11,
65,
10,
33,
14,
12,
6,
11,
65,
9,
33,
14,
12,
5,
11,
65,
8,
33,
14,
12,
4,
11,
65,
3,
33,
14,
12,
3,
11,
32,
1,
65,
1,
54,
2,
24,
32,
1,
65,
1,
54,
2,
12,
32,
1,
66,
0,
55,
2,
4,
32,
8,
65,
24,
106,
65,
0,
54,
2,
0,
32,
8,
65,
16,
106,
66,
0,
55,
3,
0,
32,
8,
66,
0,
55,
3,
8,
32,
41,
33,
10,
12,
1,
11,
32,
1,
40,
2,
4,
34,
9,
65,
15,
113,
33,
11,
32,
9,
65,
8,
116,
33,
13,
32,
9,
65,
4,
118,
65,
8,
106,
65,
31,
113,
33,
10,
32,
8,
40,
2,
0,
33,
9,
32,
8,
40,
2,
4,
33,
12,
2,
64,
2,
64,
2,
64,
32,
33,
69,
4,
64,
32,
9,
32,
12,
71,
13,
1,
12,
3,
11,
32,
10,
65,
16,
73,
13,
1,
32,
9,
32,
12,
70,
13,
2,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
1,
32,
9,
45,
0,
0,
54,
2,
8,
65,
28,
33,
10,
12,
3,
11,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
1,
32,
9,
45,
0,
0,
34,
9,
54,
2,
8,
65,
28,
65,
28,
65,
28,
65,
3,
32,
9,
32,
13,
114,
65,
31,
112,
32,
9,
65,
32,
113,
114,
27,
32,
11,
65,
8,
71,
27,
65,
28,
32,
39,
32,
10,
118,
27,
32,
10,
65,
15,
75,
27,
33,
10,
12,
2,
11,
32,
9,
32,
12,
70,
13,
0,
32,
8,
32,
9,
65,
1,
106,
54,
2,
0,
32,
1,
32,
9,
45,
0,
0,
34,
9,
54,
2,
8,
65,
28,
65,
28,
65,
3,
32,
9,
32,
13,
114,
65,
31,
112,
32,
9,
65,
32,
113,
114,
27,
32,
11,
65,
8,
71,
27,
33,
10,
12,
1,
11,
11,
65,
2,
33,
14,
32,
27,
33,
10,
11,
65,
0,
33,
11,
32,
10,
65,
255,
1,
113,
34,
2,
65,
1,
70,
13,
1,
32,
10,
33,
16,
32,
2,
65,
252,
1,
70,
13,
2,
11,
32,
8,
32,
8,
40,
2,
12,
34,
2,
32,
8,
40,
2,
0,
32,
8,
40,
2,
4,
107,
32,
3,
106,
34,
9,
32,
2,
65,
3,
118,
34,
2,
32,
2,
32,
9,
75,
27,
34,
2,
65,
3,
116,
107,
54,
2,
12,
65,
0,
32,
2,
107,
33,
11,
12,
1,
11,
65,
2,
65,
1,
32,
5,
32,
15,
70,
27,
33,
16,
11,
32,
1,
32,
14,
58,
0,
152,
82,
32,
1,
32,
8,
40,
2,
12,
34,
2,
54,
2,
0,
32,
1,
32,
8,
40,
2,
16,
54,
2,
28,
32,
1,
32,
8,
41,
2,
20,
55,
2,
32,
32,
1,
32,
8,
40,
2,
8,
65,
127,
32,
2,
65,
31,
113,
116,
65,
127,
115,
113,
54,
2,
52,
2,
64,
2,
64,
2,
64,
32,
7,
65,
9,
113,
65,
0,
32,
16,
65,
24,
116,
65,
24,
117,
65,
127,
74,
27,
69,
4,
64,
32,
15,
32,
6,
107,
33,
15,
12,
1,
11,
32,
15,
32,
6,
73,
13,
1,
32,
15,
32,
5,
75,
13,
2,
32,
8,
32,
1,
40,
2,
24,
34,
2,
59,
1,
32,
32,
8,
32,
2,
65,
16,
118,
59,
1,
34,
32,
8,
65,
32,
106,
32,
4,
32,
6,
106,
32,
15,
32,
6,
107,
34,
15,
16,
93,
32,
1,
32,
8,
40,
2,
32,
34,
2,
54,
2,
24,
32,
36,
69,
32,
16,
65,
255,
1,
113,
114,
13,
0,
65,
0,
65,
126,
32,
2,
32,
1,
40,
2,
12,
70,
27,
33,
16,
11,
32,
0,
32,
16,
58,
0,
4,
32,
0,
32,
15,
54,
2,
8,
32,
0,
32,
8,
40,
2,
0,
32,
3,
32,
11,
106,
106,
32,
8,
40,
2,
4,
107,
54,
2,
0,
12,
3,
11,
32,
6,
32,
15,
65,
156,
191,
192,
0,
16,
105,
0,
11,
32,
15,
32,
5,
65,
156,
191,
192,
0,
16,
104,
0,
11,
32,
0,
65,
0,
54,
2,
8,
32,
0,
65,
0,
54,
2,
0,
32,
0,
65,
253,
1,
58,
0,
4,
11,
32,
8,
65,
48,
106,
36,
0,
15,
11,
65,
2,
32,
9,
65,
220,
184,
192,
0,
16,
104,
0,
11,
32,
15,
32,
5,
65,
152,
193,
192,
0,
16,
103,
0,
11,
32,
9,
65,
192,
4,
65,
204,
184,
192,
0,
16,
103,
0,
11,
191,
45,
2,
13,
127,
2,
126,
35,
0,
65,
144,
5,
107,
34,
9,
36,
0,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
3,
69,
4,
64,
32,
0,
65,
1,
59,
1,
128,
4,
32,
9,
32,
0,
54,
2,
0,
32,
0,
65,
0,
65,
160,
2,
65,
15,
65,
0,
16,
6,
32,
0,
65,
1,
65,
32,
65,
15,
65,
0,
16,
6,
32,
0,
65,
157,
29,
106,
45,
0,
0,
13,
2,
65,
1,
33,
11,
32,
0,
65,
156,
29,
106,
45,
0,
0,
69,
13,
1,
12,
2,
11,
32,
0,
65,
128,
27,
106,
65,
8,
65,
144,
1,
16,
139,
1,
26,
32,
0,
65,
144,
28,
106,
65,
9,
65,
240,
0,
16,
139,
1,
26,
32,
0,
65,
144,
29,
106,
66,
135,
142,
156,
184,
240,
224,
193,
131,
7,
55,
1,
0,
32,
0,
65,
136,
29,
106,
66,
135,
142,
156,
184,
240,
224,
193,
131,
7,
55,
1,
0,
32,
0,
65,
128,
29,
106,
66,
135,
142,
156,
184,
240,
224,
193,
131,
7,
55,
1,
0,
32,
0,
65,
160,
29,
106,
66,
133,
138,
148,
168,
208,
160,
193,
130,
5,
55,
1,
0,
32,
0,
65,
152,
29,
106,
66,
136,
144,
160,
192,
128,
129,
130,
132,
8,
55,
1,
0,
32,
0,
65,
168,
29,
106,
66,
133,
138,
148,
168,
208,
160,
193,
130,
5,
55,
1,
0,
32,
0,
65,
176,
29,
106,
66,
133,
138,
148,
168,
208,
160,
193,
130,
5,
55,
1,
0,
32,
0,
65,
184,
29,
106,
66,
133,
138,
148,
168,
208,
160,
193,
130,
5,
55,
1,
0,
32,
0,
65,
0,
65,
160,
2,
65,
15,
65,
1,
16,
6,
32,
0,
65,
1,
65,
32,
65,
15,
65,
1,
16,
6,
32,
1,
32,
1,
40,
2,
16,
34,
3,
65,
2,
106,
34,
6,
54,
2,
16,
32,
1,
32,
1,
40,
2,
12,
65,
1,
32,
3,
65,
31,
113,
116,
114,
34,
3,
54,
2,
12,
32,
6,
65,
8,
73,
13,
2,
32,
1,
40,
2,
8,
33,
4,
3,
64,
32,
4,
32,
1,
40,
2,
4,
34,
5,
73,
4,
64,
32,
1,
40,
2,
0,
32,
4,
106,
32,
3,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
4,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
3,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
6,
54,
2,
16,
32,
6,
65,
7,
75,
13,
1,
12,
4,
11,
11,
12,
7,
11,
65,
2,
33,
11,
32,
0,
65,
155,
29,
106,
45,
0,
0,
13,
0,
65,
3,
33,
11,
32,
0,
65,
154,
29,
106,
45,
0,
0,
13,
0,
65,
4,
33,
11,
32,
0,
65,
153,
29,
106,
45,
0,
0,
13,
0,
65,
5,
33,
11,
32,
0,
65,
152,
29,
106,
45,
0,
0,
13,
0,
65,
6,
33,
11,
32,
0,
65,
151,
29,
106,
45,
0,
0,
13,
0,
65,
7,
33,
11,
32,
0,
65,
150,
29,
106,
45,
0,
0,
13,
0,
65,
8,
33,
11,
32,
0,
65,
149,
29,
106,
45,
0,
0,
13,
0,
65,
9,
33,
11,
32,
0,
65,
148,
29,
106,
45,
0,
0,
13,
0,
65,
10,
33,
11,
32,
0,
65,
147,
29,
106,
45,
0,
0,
13,
0,
65,
11,
33,
11,
32,
0,
65,
146,
29,
106,
45,
0,
0,
13,
0,
65,
12,
33,
11,
32,
0,
65,
145,
29,
106,
45,
0,
0,
13,
0,
65,
13,
33,
11,
32,
0,
65,
144,
29,
106,
45,
0,
0,
13,
0,
65,
14,
33,
11,
32,
0,
65,
143,
29,
106,
45,
0,
0,
13,
0,
65,
15,
33,
11,
32,
0,
65,
142,
29,
106,
45,
0,
0,
13,
0,
65,
16,
33,
11,
32,
0,
65,
141,
29,
106,
45,
0,
0,
13,
0,
65,
17,
33,
11,
32,
0,
65,
140,
29,
106,
45,
0,
0,
13,
0,
65,
18,
33,
11,
32,
0,
65,
139,
29,
106,
45,
0,
0,
13,
0,
65,
19,
33,
11,
32,
0,
65,
138,
29,
106,
45,
0,
0,
13,
0,
65,
20,
33,
11,
32,
0,
65,
137,
29,
106,
45,
0,
0,
13,
0,
65,
21,
33,
11,
32,
0,
65,
136,
29,
106,
45,
0,
0,
13,
0,
65,
22,
33,
11,
32,
0,
65,
135,
29,
106,
45,
0,
0,
13,
0,
65,
23,
33,
11,
32,
0,
65,
134,
29,
106,
45,
0,
0,
13,
0,
65,
24,
33,
11,
32,
0,
65,
133,
29,
106,
45,
0,
0,
13,
0,
65,
25,
33,
11,
32,
0,
65,
132,
29,
106,
45,
0,
0,
13,
0,
65,
26,
33,
11,
32,
0,
65,
131,
29,
106,
45,
0,
0,
13,
0,
65,
27,
33,
11,
32,
0,
65,
130,
29,
106,
45,
0,
0,
13,
0,
65,
28,
65,
29,
32,
0,
65,
129,
29,
106,
45,
0,
0,
27,
33,
11,
11,
65,
158,
2,
32,
11,
107,
33,
3,
2,
64,
32,
0,
65,
189,
29,
106,
45,
0,
0,
13,
0,
65,
1,
33,
10,
32,
0,
65,
188,
29,
106,
45,
0,
0,
13,
0,
65,
2,
33,
10,
32,
0,
65,
187,
29,
106,
45,
0,
0,
13,
0,
65,
3,
33,
10,
32,
0,
65,
186,
29,
106,
45,
0,
0,
13,
0,
65,
4,
33,
10,
32,
0,
65,
185,
29,
106,
45,
0,
0,
13,
0,
65,
5,
33,
10,
32,
0,
65,
184,
29,
106,
45,
0,
0,
13,
0,
65,
6,
33,
10,
32,
0,
65,
183,
29,
106,
45,
0,
0,
13,
0,
65,
7,
33,
10,
32,
0,
65,
182,
29,
106,
45,
0,
0,
13,
0,
65,
8,
33,
10,
32,
0,
65,
181,
29,
106,
45,
0,
0,
13,
0,
65,
9,
33,
10,
32,
0,
65,
180,
29,
106,
45,
0,
0,
13,
0,
65,
10,
33,
10,
32,
0,
65,
179,
29,
106,
45,
0,
0,
13,
0,
65,
11,
33,
10,
32,
0,
65,
178,
29,
106,
45,
0,
0,
13,
0,
65,
12,
33,
10,
32,
0,
65,
177,
29,
106,
45,
0,
0,
13,
0,
65,
13,
33,
10,
32,
0,
65,
176,
29,
106,
45,
0,
0,
13,
0,
65,
14,
33,
10,
32,
0,
65,
175,
29,
106,
45,
0,
0,
13,
0,
65,
15,
33,
10,
32,
0,
65,
174,
29,
106,
45,
0,
0,
13,
0,
65,
16,
33,
10,
32,
0,
65,
173,
29,
106,
45,
0,
0,
13,
0,
65,
17,
33,
10,
32,
0,
65,
172,
29,
106,
45,
0,
0,
13,
0,
65,
18,
33,
10,
32,
0,
65,
171,
29,
106,
45,
0,
0,
13,
0,
65,
19,
33,
10,
32,
0,
65,
170,
29,
106,
45,
0,
0,
13,
0,
65,
20,
33,
10,
32,
0,
65,
169,
29,
106,
45,
0,
0,
13,
0,
65,
21,
33,
10,
32,
0,
65,
168,
29,
106,
45,
0,
0,
13,
0,
65,
22,
33,
10,
32,
0,
65,
167,
29,
106,
45,
0,
0,
13,
0,
65,
23,
33,
10,
32,
0,
65,
166,
29,
106,
45,
0,
0,
13,
0,
65,
24,
33,
10,
32,
0,
65,
165,
29,
106,
45,
0,
0,
13,
0,
65,
25,
33,
10,
32,
0,
65,
164,
29,
106,
45,
0,
0,
13,
0,
65,
26,
33,
10,
32,
0,
65,
163,
29,
106,
45,
0,
0,
13,
0,
65,
27,
33,
10,
32,
0,
65,
162,
29,
106,
45,
0,
0,
13,
0,
65,
28,
65,
29,
32,
0,
65,
161,
29,
106,
45,
0,
0,
27,
33,
10,
11,
32,
9,
65,
4,
106,
65,
0,
65,
192,
2,
16,
139,
1,
26,
32,
9,
65,
196,
2,
106,
65,
0,
65,
192,
2,
16,
139,
1,
26,
2,
64,
32,
3,
65,
193,
2,
73,
4,
64,
32,
3,
65,
161,
2,
73,
4,
64,
32,
9,
65,
4,
106,
32,
0,
65,
128,
27,
106,
32,
3,
16,
125,
26,
65,
30,
32,
10,
107,
34,
5,
32,
3,
106,
34,
4,
32,
3,
79,
4,
64,
32,
4,
65,
192,
2,
77,
4,
64,
32,
5,
65,
161,
2,
73,
4,
64,
32,
9,
65,
4,
106,
32,
3,
106,
32,
0,
65,
160,
29,
106,
32,
5,
16,
125,
26,
32,
0,
65,
128,
9,
106,
65,
0,
65,
38,
16,
139,
1,
26,
32,
0,
33,
5,
2,
64,
2,
64,
2,
64,
2,
64,
32,
4,
69,
13,
0,
65,
188,
2,
32,
10,
32,
11,
106,
107,
33,
15,
32,
9,
40,
2,
0,
33,
13,
32,
9,
65,
4,
106,
33,
8,
32,
0,
33,
12,
65,
0,
33,
3,
65,
255,
1,
33,
7,
65,
0,
33,
4,
3,
64,
32,
7,
33,
14,
2,
64,
2,
64,
2,
64,
32,
8,
45,
0,
0,
34,
7,
4,
64,
32,
3,
69,
4,
64,
32,
4,
33,
5,
12,
2,
11,
2,
64,
32,
3,
65,
3,
79,
4,
64,
32,
3,
65,
11,
73,
13,
1,
32,
12,
65,
164,
9,
106,
34,
5,
32,
5,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
4,
65,
125,
75,
13,
8,
32,
4,
65,
2,
106,
34,
5,
65,
192,
2,
75,
13,
8,
32,
9,
65,
196,
2,
106,
32,
4,
106,
34,
4,
32,
3,
65,
117,
106,
58,
0,
1,
32,
4,
65,
18,
58,
0,
0,
12,
3,
11,
32,
12,
32,
12,
47,
1,
128,
9,
32,
3,
106,
59,
1,
128,
9,
32,
3,
32,
4,
106,
34,
5,
32,
4,
73,
32,
5,
65,
192,
2,
75,
114,
13,
7,
32,
9,
65,
196,
2,
106,
32,
4,
106,
65,
0,
32,
3,
16,
139,
1,
26,
12,
2,
11,
32,
12,
65,
162,
9,
106,
34,
5,
32,
5,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
4,
65,
125,
75,
13,
6,
32,
4,
65,
2,
106,
34,
5,
65,
192,
2,
75,
13,
6,
32,
9,
65,
196,
2,
106,
32,
4,
106,
34,
4,
32,
3,
65,
125,
106,
58,
0,
1,
32,
4,
65,
17,
58,
0,
0,
12,
1,
11,
2,
64,
32,
6,
69,
4,
64,
32,
4,
33,
5,
12,
1,
11,
32,
6,
65,
3,
79,
4,
64,
32,
12,
65,
160,
9,
106,
34,
5,
32,
5,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
4,
65,
125,
75,
13,
7,
32,
4,
65,
2,
106,
34,
5,
65,
192,
2,
75,
13,
7,
32,
9,
65,
196,
2,
106,
32,
4,
106,
34,
4,
32,
6,
65,
125,
106,
58,
0,
1,
32,
4,
65,
16,
58,
0,
0,
12,
1,
11,
32,
12,
32,
14,
65,
255,
1,
113,
65,
1,
116,
106,
65,
128,
9,
106,
34,
5,
32,
5,
47,
1,
0,
32,
6,
106,
59,
1,
0,
32,
9,
32,
14,
58,
0,
134,
5,
32,
9,
32,
14,
58,
0,
133,
5,
32,
9,
32,
14,
58,
0,
132,
5,
32,
4,
32,
6,
106,
34,
5,
32,
4,
73,
32,
5,
65,
192,
2,
75,
114,
13,
6,
32,
9,
65,
196,
2,
106,
32,
4,
106,
32,
9,
65,
132,
5,
106,
32,
6,
16,
125,
26,
11,
65,
0,
33,
6,
32,
3,
65,
1,
106,
34,
3,
65,
138,
1,
71,
4,
64,
32,
5,
33,
4,
12,
3,
11,
32,
13,
32,
13,
47,
1,
164,
9,
65,
1,
106,
59,
1,
164,
9,
32,
5,
65,
125,
75,
13,
5,
32,
5,
65,
2,
106,
34,
4,
65,
192,
2,
75,
13,
5,
32,
9,
65,
196,
2,
106,
32,
5,
106,
65,
146,
254,
1,
59,
0,
0,
12,
1,
11,
2,
64,
32,
14,
65,
255,
1,
113,
34,
3,
32,
7,
70,
4,
64,
65,
0,
33,
3,
32,
6,
65,
1,
106,
34,
6,
65,
6,
70,
13,
1,
32,
5,
33,
4,
12,
3,
11,
2,
64,
32,
6,
69,
13,
0,
32,
6,
65,
3,
79,
4,
64,
32,
12,
65,
160,
9,
106,
34,
3,
32,
3,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
5,
65,
125,
75,
13,
7,
32,
5,
65,
2,
106,
34,
3,
65,
192,
2,
75,
13,
7,
32,
9,
65,
196,
2,
106,
32,
5,
106,
34,
4,
32,
6,
65,
125,
106,
58,
0,
1,
32,
4,
65,
16,
58,
0,
0,
32,
3,
33,
5,
12,
1,
11,
32,
12,
32,
3,
65,
1,
116,
106,
65,
128,
9,
106,
34,
3,
32,
3,
47,
1,
0,
32,
6,
106,
59,
1,
0,
32,
9,
32,
14,
58,
0,
134,
5,
32,
9,
32,
14,
58,
0,
133,
5,
32,
9,
32,
14,
58,
0,
132,
5,
32,
5,
32,
6,
106,
34,
3,
32,
5,
73,
32,
3,
65,
192,
2,
75,
114,
13,
6,
32,
9,
65,
196,
2,
106,
32,
5,
106,
32,
9,
65,
132,
5,
106,
32,
6,
16,
125,
26,
32,
13,
33,
12,
32,
3,
33,
5,
11,
32,
12,
32,
7,
65,
1,
116,
106,
65,
128,
9,
106,
34,
3,
32,
3,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
5,
65,
1,
106,
34,
4,
32,
5,
73,
32,
4,
65,
192,
2,
75,
114,
13,
5,
32,
9,
65,
196,
2,
106,
32,
5,
106,
32,
7,
58,
0,
0,
12,
1,
11,
32,
12,
65,
160,
9,
106,
34,
3,
32,
3,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
5,
65,
125,
75,
13,
4,
32,
5,
65,
2,
106,
34,
4,
65,
192,
2,
75,
13,
4,
32,
9,
65,
196,
2,
106,
32,
5,
106,
65,
144,
6,
59,
0,
0,
11,
65,
0,
33,
3,
65,
0,
33,
6,
11,
32,
8,
65,
1,
106,
33,
8,
32,
13,
33,
12,
32,
15,
65,
127,
106,
34,
15,
13,
0,
11,
32,
9,
40,
2,
0,
33,
5,
32,
6,
69,
4,
64,
32,
3,
69,
4,
64,
32,
4,
33,
12,
12,
2,
11,
2,
64,
32,
3,
65,
3,
79,
4,
64,
32,
3,
65,
11,
73,
13,
1,
32,
5,
65,
164,
9,
106,
34,
7,
32,
7,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
4,
65,
125,
75,
13,
4,
32,
4,
65,
2,
106,
34,
12,
65,
192,
2,
75,
13,
4,
32,
9,
65,
196,
2,
106,
32,
4,
106,
34,
4,
32,
3,
65,
117,
106,
58,
0,
1,
32,
4,
65,
18,
58,
0,
0,
12,
3,
11,
32,
5,
32,
5,
47,
1,
128,
9,
32,
3,
106,
59,
1,
128,
9,
32,
3,
32,
4,
106,
34,
12,
32,
4,
73,
32,
12,
65,
192,
2,
75,
114,
13,
3,
32,
9,
65,
196,
2,
106,
32,
4,
106,
65,
0,
32,
3,
16,
139,
1,
26,
12,
2,
11,
32,
5,
65,
162,
9,
106,
34,
7,
32,
7,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
4,
65,
125,
75,
13,
2,
32,
4,
65,
2,
106,
34,
12,
65,
192,
2,
75,
13,
2,
32,
9,
65,
196,
2,
106,
32,
4,
106,
34,
4,
32,
3,
65,
125,
106,
58,
0,
1,
32,
4,
65,
17,
58,
0,
0,
12,
1,
11,
32,
6,
65,
3,
79,
4,
64,
32,
5,
65,
160,
9,
106,
34,
3,
32,
3,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
4,
65,
125,
75,
13,
2,
32,
4,
65,
2,
106,
34,
12,
65,
192,
2,
75,
13,
2,
32,
9,
65,
196,
2,
106,
32,
4,
106,
34,
3,
32,
6,
65,
125,
106,
58,
0,
1,
32,
3,
65,
16,
58,
0,
0,
12,
1,
11,
32,
5,
32,
7,
65,
1,
116,
106,
65,
128,
9,
106,
34,
3,
32,
3,
47,
1,
0,
32,
6,
106,
59,
1,
0,
32,
9,
32,
7,
58,
0,
134,
5,
32,
9,
32,
7,
58,
0,
133,
5,
32,
9,
32,
7,
58,
0,
132,
5,
32,
4,
32,
6,
106,
34,
12,
32,
4,
73,
32,
12,
65,
192,
2,
75,
114,
13,
1,
32,
9,
65,
196,
2,
106,
32,
4,
106,
32,
9,
65,
132,
5,
106,
32,
6,
16,
125,
26,
32,
9,
40,
2,
0,
33,
5,
11,
32,
5,
65,
2,
65,
19,
65,
7,
65,
0,
16,
6,
32,
1,
32,
1,
40,
2,
16,
34,
3,
65,
2,
106,
34,
6,
54,
2,
16,
32,
1,
32,
1,
40,
2,
12,
65,
2,
32,
3,
65,
31,
113,
116,
114,
34,
7,
54,
2,
12,
32,
6,
65,
8,
79,
4,
64,
32,
1,
40,
2,
8,
33,
3,
3,
64,
32,
3,
32,
1,
40,
2,
4,
34,
4,
79,
13,
17,
32,
1,
40,
2,
0,
32,
3,
106,
32,
7,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
3,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
7,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
6,
54,
2,
16,
32,
6,
65,
7,
75,
13,
0,
11,
11,
65,
29,
32,
11,
107,
34,
3,
65,
31,
75,
13,
16,
32,
1,
32,
6,
65,
5,
106,
34,
4,
54,
2,
16,
32,
1,
32,
3,
32,
6,
116,
32,
7,
114,
34,
5,
54,
2,
12,
32,
6,
65,
3,
79,
4,
64,
32,
1,
40,
2,
8,
33,
3,
3,
64,
32,
3,
32,
1,
40,
2,
4,
34,
4,
79,
13,
17,
32,
1,
40,
2,
0,
32,
3,
106,
32,
5,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
3,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
5,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
4,
54,
2,
16,
32,
4,
65,
7,
75,
13,
0,
11,
11,
65,
29,
32,
10,
107,
34,
3,
65,
31,
75,
13,
16,
32,
1,
32,
4,
65,
5,
106,
34,
7,
54,
2,
16,
32,
1,
32,
3,
32,
4,
116,
32,
5,
114,
34,
5,
54,
2,
12,
32,
4,
65,
3,
79,
4,
64,
32,
1,
40,
2,
8,
33,
3,
3,
64,
32,
3,
32,
1,
40,
2,
4,
34,
4,
79,
13,
4,
32,
1,
40,
2,
0,
32,
3,
106,
32,
5,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
3,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
5,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
7,
54,
2,
16,
32,
7,
65,
7,
75,
13,
0,
11,
11,
65,
0,
33,
4,
65,
0,
33,
3,
32,
9,
40,
2,
0,
34,
8,
65,
207,
31,
106,
45,
0,
0,
13,
8,
65,
1,
33,
3,
32,
8,
65,
193,
31,
106,
45,
0,
0,
69,
13,
1,
12,
8,
11,
65,
2,
33,
6,
12,
12,
11,
65,
2,
33,
3,
32,
8,
65,
206,
31,
106,
45,
0,
0,
13,
6,
65,
3,
33,
3,
32,
8,
65,
194,
31,
106,
45,
0,
0,
13,
6,
65,
4,
33,
3,
32,
8,
65,
205,
31,
106,
45,
0,
0,
13,
6,
65,
5,
33,
3,
32,
8,
65,
195,
31,
106,
45,
0,
0,
13,
6,
65,
6,
33,
3,
32,
8,
65,
204,
31,
106,
45,
0,
0,
13,
6,
65,
7,
33,
3,
32,
8,
65,
196,
31,
106,
45,
0,
0,
13,
6,
65,
8,
33,
3,
32,
8,
65,
203,
31,
106,
45,
0,
0,
13,
6,
65,
9,
33,
3,
32,
8,
65,
197,
31,
106,
45,
0,
0,
13,
6,
65,
10,
33,
3,
32,
8,
65,
202,
31,
106,
45,
0,
0,
13,
6,
65,
11,
33,
3,
32,
8,
65,
198,
31,
106,
45,
0,
0,
13,
6,
65,
12,
33,
3,
32,
8,
65,
201,
31,
106,
45,
0,
0,
13,
6,
65,
13,
33,
3,
32,
8,
65,
199,
31,
106,
45,
0,
0,
13,
6,
65,
14,
33,
3,
32,
8,
65,
200,
31,
106,
45,
0,
0,
13,
6,
65,
15,
33,
3,
32,
8,
65,
192,
31,
106,
45,
0,
0,
13,
6,
65,
16,
33,
3,
32,
8,
65,
210,
31,
106,
45,
0,
0,
13,
6,
65,
17,
33,
3,
32,
8,
65,
209,
31,
106,
45,
0,
0,
13,
6,
65,
18,
65,
19,
32,
8,
65,
208,
31,
106,
45,
0,
0,
27,
33,
3,
12,
6,
11,
12,
12,
11,
32,
5,
65,
160,
2,
65,
200,
159,
192,
0,
16,
104,
0,
11,
32,
4,
65,
192,
2,
65,
184,
159,
192,
0,
16,
104,
0,
11,
32,
3,
32,
4,
65,
184,
159,
192,
0,
16,
105,
0,
11,
32,
3,
65,
160,
2,
65,
168,
159,
192,
0,
16,
104,
0,
11,
32,
3,
65,
192,
2,
65,
152,
159,
192,
0,
16,
104,
0,
11,
65,
4,
33,
8,
2,
64,
2,
64,
2,
64,
65,
19,
32,
3,
107,
34,
6,
65,
5,
79,
4,
64,
32,
6,
33,
8,
65,
15,
32,
3,
107,
34,
4,
65,
15,
75,
13,
11,
11,
32,
1,
32,
7,
65,
4,
106,
34,
6,
54,
2,
16,
32,
1,
32,
4,
32,
7,
65,
31,
113,
116,
32,
5,
114,
34,
3,
54,
2,
12,
32,
6,
65,
8,
79,
4,
64,
32,
1,
40,
2,
8,
33,
4,
3,
64,
32,
4,
32,
1,
40,
2,
4,
34,
5,
79,
13,
10,
32,
1,
40,
2,
0,
32,
4,
106,
32,
3,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
4,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
3,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
6,
54,
2,
16,
32,
6,
65,
7,
75,
13,
0,
11,
32,
8,
65,
20,
79,
13,
1,
11,
32,
8,
69,
13,
2,
65,
216,
159,
192,
0,
33,
7,
32,
8,
65,
216,
159,
192,
0,
106,
33,
5,
32,
9,
40,
2,
0,
33,
8,
3,
64,
2,
64,
2,
64,
32,
8,
32,
7,
45,
0,
0,
106,
65,
192,
31,
106,
45,
0,
0,
34,
13,
65,
248,
1,
113,
69,
4,
64,
32,
1,
32,
6,
65,
3,
106,
34,
4,
54,
2,
16,
32,
1,
32,
13,
32,
6,
65,
31,
113,
116,
32,
3,
114,
34,
3,
54,
2,
12,
32,
4,
65,
8,
79,
13,
1,
32,
4,
33,
6,
12,
2,
11,
12,
13,
11,
32,
1,
40,
2,
8,
33,
4,
3,
64,
32,
4,
32,
1,
40,
2,
4,
34,
6,
79,
13,
4,
32,
1,
40,
2,
0,
32,
4,
106,
32,
3,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
4,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
3,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
6,
54,
2,
16,
32,
6,
65,
7,
75,
13,
0,
11,
11,
32,
7,
65,
1,
106,
34,
7,
32,
5,
71,
13,
0,
11,
12,
2,
11,
32,
8,
65,
19,
65,
236,
159,
192,
0,
16,
104,
0,
11,
32,
4,
32,
6,
65,
152,
155,
192,
0,
16,
103,
0,
11,
32,
12,
69,
13,
0,
65,
0,
33,
7,
32,
9,
40,
2,
0,
33,
13,
2,
64,
2,
64,
3,
64,
32,
7,
65,
191,
2,
77,
4,
64,
32,
9,
65,
196,
2,
106,
32,
7,
106,
45,
0,
0,
34,
8,
65,
19,
79,
13,
6,
32,
13,
32,
8,
65,
1,
116,
106,
65,
192,
22,
106,
47,
1,
0,
34,
5,
32,
8,
32,
13,
106,
65,
192,
31,
106,
45,
0,
0,
34,
4,
65,
31,
113,
118,
13,
11,
32,
1,
32,
4,
32,
6,
106,
34,
4,
54,
2,
16,
32,
1,
32,
5,
32,
6,
65,
31,
113,
116,
32,
3,
114,
34,
3,
54,
2,
12,
32,
4,
65,
8,
79,
4,
64,
32,
1,
40,
2,
8,
33,
6,
3,
64,
32,
6,
32,
1,
40,
2,
4,
34,
4,
79,
13,
7,
32,
1,
40,
2,
0,
32,
6,
106,
32,
3,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
6,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
3,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
4,
54,
2,
16,
32,
4,
65,
7,
75,
13,
0,
11,
11,
32,
7,
65,
1,
106,
33,
5,
2,
127,
32,
8,
65,
16,
73,
4,
64,
32,
4,
33,
6,
32,
5,
12,
1,
11,
32,
7,
65,
190,
2,
75,
13,
3,
32,
9,
65,
196,
2,
106,
32,
5,
106,
45,
0,
0,
33,
5,
32,
9,
65,
7,
54,
2,
140,
5,
32,
9,
66,
130,
128,
128,
128,
48,
55,
2,
132,
5,
32,
8,
65,
112,
106,
34,
8,
65,
2,
75,
13,
4,
32,
5,
32,
9,
65,
132,
5,
106,
32,
8,
65,
2,
116,
106,
40,
2,
0,
34,
8,
65,
31,
113,
118,
13,
12,
32,
1,
32,
4,
32,
8,
106,
34,
6,
54,
2,
16,
32,
1,
32,
5,
32,
4,
116,
32,
3,
114,
34,
3,
54,
2,
12,
32,
6,
65,
8,
79,
4,
64,
32,
1,
40,
2,
8,
33,
4,
3,
64,
32,
4,
32,
1,
40,
2,
4,
34,
5,
79,
13,
12,
32,
1,
40,
2,
0,
32,
4,
106,
32,
3,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
4,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
3,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
6,
54,
2,
16,
32,
6,
65,
7,
75,
13,
0,
11,
11,
32,
7,
65,
2,
106,
11,
34,
7,
32,
12,
73,
13,
1,
12,
4,
11,
11,
32,
7,
65,
192,
2,
65,
252,
159,
192,
0,
16,
103,
0,
11,
32,
5,
65,
192,
2,
65,
200,
160,
192,
0,
16,
103,
0,
11,
32,
8,
65,
3,
65,
216,
160,
192,
0,
16,
103,
0,
11,
32,
2,
40,
2,
0,
34,
13,
65,
129,
128,
4,
73,
4,
64,
32,
3,
173,
33,
17,
32,
13,
69,
13,
3,
32,
2,
65,
16,
106,
33,
14,
65,
0,
33,
5,
65,
1,
33,
8,
2,
64,
2,
64,
3,
64,
2,
64,
2,
64,
2,
127,
32,
8,
65,
1,
71,
4,
64,
32,
5,
33,
12,
32,
8,
12,
1,
11,
32,
5,
65,
1,
106,
33,
12,
32,
2,
32,
5,
106,
65,
16,
106,
45,
0,
0,
65,
128,
2,
114,
11,
34,
7,
65,
1,
113,
69,
4,
64,
32,
12,
32,
14,
106,
33,
10,
32,
12,
65,
3,
106,
33,
5,
65,
0,
33,
3,
32,
6,
33,
4,
2,
64,
3,
64,
32,
3,
65,
3,
70,
4,
64,
32,
7,
33,
8,
12,
4,
11,
32,
3,
32,
12,
106,
34,
6,
32,
13,
79,
13,
1,
32,
7,
65,
1,
118,
33,
8,
32,
0,
32,
3,
32,
10,
106,
45,
0,
0,
34,
11,
65,
1,
116,
106,
65,
192,
13,
106,
51,
1,
0,
32,
4,
65,
63,
113,
173,
134,
32,
17,
132,
33,
17,
32,
3,
65,
1,
106,
33,
3,
32,
4,
32,
0,
32,
11,
106,
65,
128,
27,
106,
45,
0,
0,
106,
33,
4,
32,
6,
65,
1,
106,
32,
13,
73,
4,
64,
32,
7,
65,
2,
113,
32,
8,
33,
7,
69,
13,
1,
11,
11,
32,
3,
32,
12,
106,
33,
5,
12,
2,
11,
32,
6,
32,
13,
65,
188,
178,
192,
0,
16,
103,
0,
11,
2,
127,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
12,
32,
13,
73,
4,
64,
32,
12,
65,
1,
106,
34,
5,
32,
13,
79,
13,
4,
32,
12,
65,
2,
106,
34,
8,
32,
13,
79,
13,
5,
32,
2,
32,
12,
106,
65,
16,
106,
45,
0,
0,
34,
11,
65,
1,
116,
65,
184,
161,
192,
0,
106,
47,
1,
0,
34,
3,
65,
159,
2,
75,
13,
1,
32,
11,
65,
140,
166,
192,
0,
106,
45,
0,
0,
34,
4,
65,
16,
75,
13,
2,
32,
0,
32,
3,
106,
65,
128,
27,
106,
45,
0,
0,
33,
16,
32,
0,
32,
3,
65,
1,
116,
106,
65,
192,
13,
106,
51,
1,
0,
33,
18,
32,
5,
32,
14,
106,
45,
0,
0,
32,
8,
32,
14,
106,
45,
0,
0,
34,
5,
65,
8,
116,
114,
34,
3,
65,
128,
4,
73,
13,
6,
32,
3,
65,
16,
116,
65,
16,
117,
65,
127,
76,
13,
3,
32,
5,
65,
156,
176,
192,
0,
106,
33,
15,
32,
5,
65,
172,
177,
192,
0,
106,
12,
7,
11,
32,
12,
32,
13,
65,
168,
161,
192,
0,
16,
103,
0,
11,
32,
3,
65,
160,
2,
65,
184,
165,
192,
0,
16,
103,
0,
11,
32,
4,
65,
17,
65,
140,
168,
192,
0,
16,
103,
0,
11,
32,
5,
65,
128,
1,
65,
156,
177,
192,
0,
16,
103,
0,
11,
32,
5,
32,
13,
65,
248,
153,
192,
0,
16,
103,
0,
11,
32,
8,
32,
13,
65,
136,
154,
192,
0,
16,
103,
0,
11,
32,
3,
65,
156,
168,
192,
0,
106,
33,
15,
32,
3,
65,
156,
172,
192,
0,
106,
11,
45,
0,
0,
34,
10,
65,
16,
75,
13,
1,
32,
7,
65,
1,
118,
33,
8,
32,
12,
65,
3,
106,
33,
5,
32,
18,
32,
6,
65,
63,
113,
173,
134,
32,
17,
132,
32,
4,
65,
2,
116,
65,
200,
165,
192,
0,
106,
53,
2,
0,
32,
11,
173,
131,
32,
6,
32,
16,
106,
34,
7,
65,
63,
113,
173,
134,
132,
32,
0,
32,
15,
45,
0,
0,
34,
6,
65,
1,
116,
106,
65,
128,
18,
106,
51,
1,
0,
32,
4,
32,
7,
106,
34,
4,
65,
63,
113,
173,
134,
132,
32,
10,
65,
2,
116,
65,
200,
165,
192,
0,
106,
53,
2,
0,
32,
3,
173,
131,
32,
4,
32,
0,
32,
6,
106,
65,
160,
29,
106,
45,
0,
0,
106,
34,
3,
65,
63,
113,
173,
134,
132,
33,
17,
32,
3,
32,
10,
106,
33,
4,
11,
32,
1,
40,
2,
8,
34,
3,
65,
8,
106,
33,
7,
32,
3,
65,
119,
75,
13,
2,
32,
1,
40,
2,
4,
34,
6,
32,
7,
73,
13,
3,
32,
1,
40,
2,
0,
32,
3,
106,
32,
17,
55,
0,
0,
65,
2,
33,
6,
32,
1,
40,
2,
8,
34,
7,
32,
4,
65,
3,
118,
106,
34,
3,
32,
7,
73,
13,
8,
32,
3,
32,
1,
40,
2,
4,
75,
13,
8,
32,
1,
32,
3,
54,
2,
8,
32,
4,
65,
7,
113,
33,
6,
32,
17,
32,
4,
65,
56,
113,
173,
136,
33,
17,
32,
5,
32,
13,
73,
13,
1,
12,
7,
11,
11,
32,
10,
65,
17,
65,
172,
178,
192,
0,
16,
103,
0,
11,
32,
3,
32,
7,
65,
168,
155,
192,
0,
16,
105,
0,
11,
32,
7,
32,
6,
65,
168,
155,
192,
0,
16,
104,
0,
11,
32,
13,
65,
128,
128,
4,
65,
204,
178,
192,
0,
16,
104,
0,
11,
32,
6,
32,
4,
65,
152,
155,
192,
0,
16,
103,
0,
11,
65,
140,
160,
192,
0,
65,
43,
65,
184,
160,
192,
0,
16,
119,
0,
11,
32,
1,
66,
0,
55,
2,
12,
65,
0,
33,
7,
2,
64,
32,
6,
69,
4,
64,
65,
0,
33,
4,
12,
1,
11,
65,
0,
33,
4,
3,
64,
2,
64,
2,
64,
2,
64,
32,
6,
65,
16,
32,
6,
65,
16,
73,
27,
34,
5,
65,
2,
116,
65,
200,
165,
192,
0,
106,
40,
2,
0,
32,
17,
167,
113,
34,
3,
32,
5,
118,
69,
4,
64,
32,
1,
32,
4,
32,
5,
106,
34,
2,
54,
2,
16,
32,
1,
32,
3,
32,
4,
116,
32,
7,
114,
34,
7,
54,
2,
12,
32,
2,
65,
8,
79,
13,
1,
32,
2,
33,
4,
12,
2,
11,
12,
8,
11,
32,
1,
40,
2,
8,
33,
3,
3,
64,
32,
3,
32,
1,
40,
2,
4,
34,
2,
79,
13,
2,
32,
1,
40,
2,
0,
32,
3,
106,
32,
7,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
3,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
7,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
4,
54,
2,
16,
32,
4,
65,
7,
75,
13,
0,
11,
11,
32,
17,
32,
5,
173,
136,
33,
17,
32,
6,
32,
5,
107,
34,
6,
13,
1,
12,
2,
11,
11,
32,
3,
32,
2,
65,
152,
155,
192,
0,
16,
103,
0,
11,
32,
0,
65,
192,
17,
106,
47,
1,
0,
34,
2,
32,
0,
65,
128,
29,
106,
45,
0,
0,
34,
0,
65,
31,
113,
118,
69,
4,
64,
32,
1,
32,
0,
32,
4,
106,
34,
0,
54,
2,
16,
32,
1,
32,
2,
32,
4,
116,
32,
7,
114,
34,
4,
54,
2,
12,
65,
1,
33,
6,
32,
0,
65,
8,
73,
13,
1,
32,
1,
40,
2,
8,
33,
3,
3,
64,
32,
3,
32,
1,
40,
2,
4,
34,
0,
73,
4,
64,
32,
1,
40,
2,
0,
32,
3,
106,
32,
4,
58,
0,
0,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
34,
3,
54,
2,
8,
32,
1,
32,
1,
40,
2,
12,
65,
8,
118,
34,
4,
54,
2,
12,
32,
1,
32,
1,
40,
2,
16,
65,
120,
106,
34,
0,
54,
2,
16,
32,
0,
65,
7,
75,
13,
1,
12,
3,
11,
11,
32,
3,
32,
0,
65,
152,
155,
192,
0,
16,
103,
0,
11,
12,
3,
11,
32,
9,
65,
144,
5,
106,
36,
0,
32,
6,
15,
11,
32,
4,
32,
5,
65,
152,
155,
192,
0,
16,
103,
0,
11,
32,
3,
32,
4,
65,
152,
155,
192,
0,
16,
103,
0,
11,
65,
216,
154,
192,
0,
65,
48,
65,
136,
155,
192,
0,
16,
119,
0,
11,
238,
43,
2,
35,
127,
1,
126,
35,
0,
65,
48,
107,
34,
13,
36,
0,
32,
1,
65,
172,
128,
4,
106,
66,
0,
55,
2,
0,
32,
1,
65,
198,
128,
4,
106,
34,
4,
45,
0,
0,
33,
5,
32,
4,
32,
3,
58,
0,
0,
2,
64,
2,
64,
2,
64,
2,
64,
32,
1,
65,
180,
128,
4,
106,
40,
2,
0,
32,
5,
65,
4,
70,
32,
3,
65,
255,
1,
113,
65,
4,
71,
113,
114,
69,
4,
64,
32,
1,
65,
144,
128,
4,
106,
33,
24,
2,
64,
32,
1,
65,
164,
128,
4,
106,
40,
2,
0,
13,
0,
32,
1,
65,
199,
128,
4,
106,
45,
0,
0,
13,
0,
2,
64,
2,
64,
2,
64,
2,
64,
32,
24,
40,
2,
0,
65,
255,
159,
45,
113,
65,
129,
128,
1,
71,
4,
64,
32,
2,
40,
2,
0,
34,
26,
69,
13,
3,
32,
1,
65,
204,
128,
4,
106,
33,
31,
32,
1,
65,
156,
128,
4,
106,
40,
2,
0,
33,
3,
32,
1,
65,
152,
128,
4,
106,
40,
2,
0,
33,
17,
32,
1,
65,
197,
128,
4,
106,
45,
0,
0,
33,
19,
32,
1,
65,
224,
128,
4,
106,
40,
2,
0,
33,
16,
32,
1,
65,
220,
128,
4,
106,
40,
2,
0,
33,
7,
32,
2,
40,
2,
4,
33,
18,
32,
1,
65,
212,
128,
4,
106,
33,
14,
2,
64,
2,
64,
3,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
18,
32,
12,
77,
4,
64,
32,
7,
69,
13,
1,
32,
1,
45,
0,
198,
128,
4,
69,
13,
1,
11,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
65,
130,
2,
32,
7,
107,
34,
4,
32,
18,
32,
12,
107,
34,
5,
32,
5,
32,
4,
75,
27,
34,
6,
4,
64,
32,
1,
40,
2,
228,
128,
4,
32,
7,
106,
65,
1,
75,
13,
1,
11,
32,
6,
32,
12,
106,
34,
5,
32,
6,
73,
13,
2,
32,
18,
32,
5,
73,
13,
3,
32,
6,
4,
64,
32,
12,
32,
26,
106,
33,
12,
32,
7,
32,
16,
106,
33,
10,
65,
0,
33,
4,
3,
64,
32,
4,
32,
10,
106,
34,
11,
65,
255,
255,
1,
113,
34,
8,
32,
14,
40,
2,
0,
106,
65,
128,
128,
8,
106,
32,
4,
32,
12,
106,
45,
0,
0,
34,
9,
58,
0,
0,
32,
8,
65,
128,
2,
77,
4,
64,
32,
8,
65,
128,
128,
2,
114,
34,
8,
65,
129,
130,
2,
75,
13,
4,
32,
14,
40,
2,
0,
32,
8,
106,
65,
128,
128,
8,
106,
32,
9,
58,
0,
0,
11,
32,
1,
40,
2,
228,
128,
4,
32,
4,
32,
7,
106,
106,
65,
1,
106,
65,
3,
79,
4,
64,
32,
14,
40,
2,
0,
34,
8,
32,
11,
65,
126,
106,
34,
15,
65,
255,
255,
1,
113,
34,
20,
65,
1,
116,
106,
32,
8,
32,
9,
32,
8,
65,
128,
128,
8,
106,
34,
9,
32,
11,
65,
127,
106,
65,
255,
255,
1,
113,
106,
45,
0,
0,
65,
5,
116,
115,
32,
9,
32,
20,
106,
45,
0,
0,
65,
10,
116,
65,
128,
248,
1,
113,
115,
65,
1,
116,
34,
11,
106,
65,
128,
128,
4,
106,
47,
1,
0,
59,
1,
0,
32,
14,
40,
2,
0,
32,
11,
106,
65,
128,
128,
4,
106,
32,
15,
59,
1,
0,
11,
32,
6,
32,
4,
65,
1,
106,
34,
4,
71,
13,
0,
11,
32,
4,
32,
7,
106,
33,
7,
11,
32,
5,
33,
12,
12,
6,
11,
32,
6,
32,
12,
106,
34,
11,
32,
6,
73,
13,
3,
32,
18,
32,
11,
73,
13,
4,
32,
14,
40,
2,
0,
34,
8,
65,
128,
128,
8,
106,
34,
9,
32,
7,
32,
16,
106,
34,
5,
65,
126,
106,
34,
4,
65,
255,
255,
1,
113,
106,
45,
0,
0,
65,
5,
116,
32,
9,
32,
5,
65,
127,
106,
65,
255,
255,
1,
113,
106,
45,
0,
0,
115,
33,
10,
32,
6,
32,
7,
106,
33,
7,
32,
6,
65,
127,
106,
33,
9,
32,
12,
32,
26,
106,
33,
6,
3,
64,
2,
64,
32,
8,
32,
5,
65,
255,
255,
1,
113,
34,
5,
106,
65,
128,
128,
8,
106,
32,
6,
45,
0,
0,
34,
8,
58,
0,
0,
32,
5,
65,
128,
2,
77,
4,
64,
32,
5,
65,
128,
128,
2,
114,
34,
12,
65,
129,
130,
2,
75,
13,
1,
32,
14,
40,
2,
0,
32,
12,
106,
65,
128,
128,
8,
106,
32,
8,
58,
0,
0,
11,
32,
14,
40,
2,
0,
34,
12,
32,
4,
65,
255,
255,
1,
113,
65,
1,
116,
106,
32,
12,
32,
10,
65,
5,
116,
65,
224,
255,
1,
113,
32,
8,
115,
34,
10,
65,
1,
116,
34,
8,
106,
65,
128,
128,
4,
106,
47,
1,
0,
59,
1,
0,
32,
14,
40,
2,
0,
32,
8,
106,
65,
128,
128,
4,
106,
32,
4,
59,
1,
0,
32,
9,
4,
64,
32,
6,
65,
1,
106,
33,
6,
32,
9,
65,
127,
106,
33,
9,
32,
5,
65,
1,
106,
33,
5,
32,
4,
65,
1,
106,
33,
4,
32,
14,
40,
2,
0,
33,
8,
12,
2,
5,
32,
11,
33,
12,
12,
8,
11,
0,
11,
11,
32,
12,
65,
130,
130,
2,
65,
140,
181,
192,
0,
16,
103,
0,
11,
32,
8,
65,
130,
130,
2,
65,
172,
181,
192,
0,
16,
103,
0,
11,
32,
12,
32,
5,
65,
156,
181,
192,
0,
16,
105,
0,
11,
32,
5,
32,
18,
65,
156,
181,
192,
0,
16,
104,
0,
11,
32,
12,
32,
11,
65,
252,
180,
192,
0,
16,
105,
0,
11,
32,
11,
32,
18,
65,
252,
180,
192,
0,
16,
104,
0,
11,
32,
1,
32,
1,
40,
2,
228,
128,
4,
34,
4,
65,
128,
128,
2,
32,
7,
107,
34,
5,
32,
5,
32,
4,
75,
27,
34,
27,
54,
2,
228,
128,
4,
32,
7,
65,
129,
2,
77,
4,
64,
32,
1,
45,
0,
198,
128,
4,
69,
13,
1,
11,
32,
16,
65,
255,
255,
1,
113,
33,
10,
32,
3,
65,
2,
32,
3,
27,
33,
5,
32,
1,
40,
2,
144,
128,
4,
34,
22,
65,
128,
128,
36,
113,
69,
4,
64,
65,
0,
33,
11,
32,
7,
65,
130,
2,
32,
7,
65,
130,
2,
73,
27,
34,
15,
32,
5,
65,
1,
32,
5,
65,
1,
75,
27,
34,
5,
77,
13,
13,
32,
5,
32,
10,
106,
34,
8,
65,
127,
106,
34,
4,
65,
129,
130,
2,
75,
13,
2,
32,
4,
65,
129,
130,
2,
70,
13,
3,
32,
31,
32,
5,
65,
31,
75,
65,
2,
116,
106,
40,
2,
0,
65,
127,
106,
34,
28,
69,
13,
13,
32,
14,
40,
2,
0,
34,
20,
32,
10,
106,
34,
29,
65,
128,
128,
8,
106,
47,
0,
0,
33,
32,
32,
20,
65,
128,
128,
8,
106,
34,
23,
32,
8,
106,
45,
0,
0,
65,
8,
116,
32,
4,
32,
23,
106,
45,
0,
0,
114,
33,
30,
32,
20,
65,
130,
128,
8,
106,
33,
33,
65,
128,
130,
2,
32,
10,
107,
34,
34,
65,
248,
255,
3,
113,
33,
35,
32,
10,
33,
4,
3,
64,
65,
4,
33,
9,
2,
64,
2,
64,
3,
64,
32,
9,
65,
127,
106,
34,
9,
69,
13,
1,
32,
4,
65,
255,
255,
1,
75,
13,
2,
32,
20,
32,
4,
65,
1,
116,
106,
47,
1,
0,
34,
4,
69,
13,
17,
32,
16,
32,
4,
107,
65,
255,
255,
3,
113,
34,
8,
32,
27,
75,
13,
17,
32,
4,
65,
255,
255,
1,
113,
34,
4,
32,
5,
106,
34,
21,
65,
127,
106,
34,
6,
65,
129,
130,
2,
75,
13,
8,
32,
6,
65,
129,
130,
2,
70,
13,
9,
32,
6,
32,
23,
106,
45,
0,
0,
32,
21,
32,
23,
106,
45,
0,
0,
65,
8,
116,
114,
32,
30,
71,
13,
0,
11,
32,
8,
69,
13,
16,
32,
4,
32,
20,
106,
65,
128,
128,
8,
106,
47,
0,
0,
32,
32,
71,
13,
0,
32,
4,
32,
33,
106,
33,
21,
65,
128,
130,
2,
32,
4,
107,
34,
25,
65,
248,
255,
3,
113,
65,
8,
106,
33,
36,
65,
0,
33,
6,
3,
64,
32,
6,
65,
128,
2,
70,
13,
16,
32,
6,
32,
35,
70,
13,
10,
32,
36,
32,
6,
65,
8,
106,
34,
9,
70,
13,
11,
32,
6,
32,
21,
106,
32,
6,
32,
29,
106,
33,
38,
32,
9,
33,
6,
41,
0,
0,
32,
38,
65,
130,
128,
8,
106,
41,
0,
0,
133,
34,
39,
80,
13,
0,
11,
32,
39,
122,
167,
34,
21,
65,
3,
118,
34,
25,
32,
9,
106,
65,
122,
106,
34,
6,
32,
5,
77,
13,
0,
32,
15,
32,
6,
77,
13,
15,
32,
10,
32,
25,
106,
32,
9,
106,
34,
5,
65,
121,
106,
65,
129,
130,
2,
75,
13,
11,
32,
5,
65,
248,
253,
125,
106,
69,
13,
12,
32,
25,
32,
29,
106,
32,
9,
106,
65,
249,
255,
7,
106,
47,
0,
0,
33,
30,
32,
6,
33,
5,
32,
8,
33,
11,
11,
32,
28,
65,
127,
106,
34,
28,
69,
13,
15,
12,
1,
11,
11,
32,
4,
65,
128,
128,
2,
65,
248,
160,
192,
0,
16,
103,
0,
11,
65,
0,
33,
11,
32,
27,
69,
32,
22,
65,
128,
128,
32,
113,
114,
13,
12,
32,
7,
32,
10,
106,
34,
4,
32,
7,
73,
13,
9,
32,
4,
65,
130,
130,
2,
75,
13,
10,
2,
64,
32,
7,
69,
4,
64,
65,
0,
33,
4,
12,
1,
11,
32,
14,
40,
2,
0,
34,
4,
32,
16,
65,
127,
106,
65,
255,
255,
1,
113,
106,
65,
128,
128,
8,
106,
45,
0,
0,
33,
5,
32,
4,
32,
10,
106,
65,
128,
128,
8,
106,
33,
11,
65,
0,
33,
4,
3,
64,
32,
4,
32,
11,
106,
45,
0,
0,
32,
5,
71,
13,
1,
32,
7,
32,
4,
65,
1,
106,
34,
4,
71,
13,
0,
11,
32,
7,
33,
4,
11,
65,
0,
32,
4,
32,
4,
65,
3,
73,
27,
33,
5,
32,
4,
65,
2,
75,
33,
11,
12,
12,
11,
32,
1,
32,
16,
54,
2,
224,
128,
4,
32,
1,
32,
7,
54,
2,
220,
128,
4,
32,
1,
32,
12,
54,
2,
172,
128,
4,
32,
1,
32,
19,
58,
0,
197,
128,
4,
32,
1,
32,
3,
54,
2,
156,
128,
4,
32,
1,
32,
17,
54,
2,
152,
128,
4,
12,
17,
11,
32,
4,
65,
130,
130,
2,
65,
248,
153,
192,
0,
16,
103,
0,
11,
32,
8,
65,
130,
130,
2,
65,
136,
154,
192,
0,
16,
103,
0,
11,
32,
6,
65,
130,
130,
2,
65,
248,
153,
192,
0,
16,
103,
0,
11,
32,
21,
65,
130,
130,
2,
65,
136,
154,
192,
0,
16,
103,
0,
11,
32,
34,
65,
248,
255,
3,
113,
32,
10,
106,
65,
10,
106,
65,
130,
130,
2,
65,
232,
160,
192,
0,
16,
104,
0,
11,
32,
4,
32,
25,
65,
248,
255,
3,
113,
106,
65,
10,
106,
65,
130,
130,
2,
65,
232,
160,
192,
0,
16,
104,
0,
11,
32,
16,
65,
255,
255,
1,
113,
32,
21,
65,
3,
118,
106,
32,
9,
106,
65,
121,
106,
65,
130,
130,
2,
65,
248,
153,
192,
0,
16,
103,
0,
11,
32,
16,
65,
255,
255,
1,
113,
32,
21,
65,
3,
118,
106,
32,
9,
106,
65,
122,
106,
65,
130,
130,
2,
65,
136,
154,
192,
0,
16,
103,
0,
11,
32,
10,
32,
4,
65,
188,
181,
192,
0,
16,
105,
0,
11,
32,
4,
65,
130,
130,
2,
65,
188,
181,
192,
0,
16,
104,
0,
11,
32,
15,
33,
5,
32,
8,
33,
11,
11,
65,
0,
32,
11,
32,
22,
65,
17,
118,
32,
5,
65,
6,
73,
113,
32,
5,
65,
3,
70,
32,
11,
65,
255,
63,
75,
113,
114,
32,
10,
32,
11,
70,
114,
34,
4,
27,
33,
11,
65,
0,
32,
5,
32,
4,
27,
33,
5,
2,
127,
2,
127,
2,
64,
2,
64,
2,
64,
2,
64,
32,
3,
69,
4,
64,
32,
11,
69,
13,
3,
32,
22,
65,
128,
128,
4,
113,
32,
5,
65,
255,
0,
75,
114,
69,
4,
64,
32,
1,
45,
0,
196,
128,
4,
69,
13,
5,
11,
12,
1,
11,
32,
1,
40,
2,
200,
128,
4,
33,
4,
32,
5,
32,
3,
77,
4,
64,
32,
4,
32,
1,
32,
3,
32,
17,
16,
36,
32,
3,
65,
127,
106,
33,
4,
65,
0,
12,
6,
11,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
54,
2,
8,
32,
1,
40,
2,
0,
34,
3,
65,
128,
128,
4,
79,
13,
17,
32,
1,
32,
3,
106,
65,
16,
106,
32,
19,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
1,
40,
2,
4,
34,
3,
65,
128,
128,
4,
79,
13,
7,
32,
1,
32,
3,
106,
65,
16,
106,
34,
3,
32,
3,
45,
0,
0,
65,
1,
118,
58,
0,
0,
32,
1,
32,
1,
40,
2,
12,
65,
127,
106,
34,
3,
54,
2,
12,
32,
3,
69,
4,
64,
32,
1,
65,
8,
54,
2,
12,
32,
1,
32,
1,
40,
2,
0,
34,
3,
54,
2,
4,
32,
1,
32,
3,
65,
1,
106,
54,
2,
0,
11,
32,
4,
32,
19,
65,
1,
116,
106,
34,
3,
32,
3,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
5,
65,
128,
1,
73,
13,
1,
11,
32,
1,
40,
2,
200,
128,
4,
32,
1,
32,
5,
32,
11,
16,
36,
32,
5,
33,
4,
65,
0,
12,
4,
11,
32,
14,
40,
2,
0,
32,
10,
106,
65,
128,
128,
8,
106,
45,
0,
0,
12,
2,
11,
32,
14,
40,
2,
0,
32,
10,
106,
65,
128,
128,
8,
106,
45,
0,
0,
33,
3,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
54,
2,
8,
32,
1,
40,
2,
0,
34,
4,
65,
128,
128,
4,
79,
13,
15,
32,
1,
40,
2,
200,
128,
4,
32,
1,
32,
4,
106,
65,
16,
106,
32,
3,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
1,
40,
2,
4,
34,
4,
65,
128,
128,
4,
79,
13,
16,
32,
1,
32,
4,
106,
65,
16,
106,
34,
4,
32,
4,
45,
0,
0,
65,
1,
118,
58,
0,
0,
32,
1,
32,
1,
40,
2,
12,
65,
127,
106,
34,
4,
54,
2,
12,
32,
4,
69,
4,
64,
32,
1,
65,
8,
54,
2,
12,
32,
1,
32,
1,
40,
2,
0,
34,
4,
54,
2,
4,
32,
1,
32,
4,
65,
1,
106,
54,
2,
0,
11,
65,
1,
33,
4,
32,
3,
65,
1,
116,
106,
34,
3,
32,
3,
47,
1,
0,
65,
1,
106,
59,
1,
0,
65,
0,
12,
2,
11,
32,
14,
40,
2,
0,
32,
10,
106,
65,
128,
128,
8,
106,
45,
0,
0,
11,
33,
19,
65,
1,
33,
4,
32,
11,
33,
17,
32,
5,
11,
33,
3,
32,
7,
32,
4,
73,
13,
2,
32,
4,
32,
16,
106,
33,
16,
32,
1,
32,
1,
40,
2,
228,
128,
4,
32,
4,
106,
34,
5,
65,
128,
128,
2,
32,
5,
65,
128,
128,
2,
73,
27,
54,
2,
228,
128,
4,
32,
7,
32,
4,
107,
33,
7,
32,
1,
40,
2,
0,
33,
4,
2,
64,
32,
1,
40,
2,
8,
34,
5,
65,
128,
248,
1,
75,
4,
64,
32,
4,
65,
248,
255,
3,
75,
32,
4,
65,
243,
0,
108,
65,
7,
118,
32,
5,
79,
114,
13,
1,
32,
1,
40,
2,
144,
128,
4,
65,
128,
128,
32,
113,
69,
13,
2,
12,
1,
11,
32,
4,
65,
249,
255,
3,
73,
13,
1,
11,
32,
1,
32,
16,
54,
2,
224,
128,
4,
32,
1,
32,
7,
54,
2,
220,
128,
4,
32,
1,
32,
12,
54,
2,
172,
128,
4,
32,
13,
65,
24,
106,
32,
1,
32,
2,
65,
0,
16,
5,
65,
127,
32,
13,
40,
2,
28,
32,
13,
40,
2,
24,
27,
34,
4,
69,
13,
0,
11,
32,
1,
32,
3,
54,
2,
156,
128,
4,
32,
1,
32,
17,
54,
2,
152,
128,
4,
32,
1,
32,
19,
58,
0,
197,
128,
4,
32,
4,
65,
0,
74,
13,
4,
32,
1,
40,
2,
172,
128,
4,
33,
8,
12,
3,
11,
32,
3,
65,
128,
128,
4,
65,
152,
161,
192,
0,
16,
103,
0,
11,
65,
204,
181,
192,
0,
65,
47,
65,
252,
181,
192,
0,
16,
119,
0,
11,
32,
2,
40,
2,
0,
34,
16,
69,
13,
2,
32,
1,
65,
224,
128,
4,
106,
40,
2,
0,
34,
11,
65,
255,
255,
1,
113,
33,
5,
32,
2,
40,
2,
4,
33,
12,
32,
1,
40,
2,
220,
128,
4,
33,
3,
32,
1,
65,
212,
128,
4,
106,
33,
17,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
3,
64,
2,
64,
2,
64,
32,
12,
32,
8,
77,
4,
64,
32,
3,
69,
13,
1,
32,
1,
45,
0,
198,
128,
4,
69,
13,
1,
11,
65,
128,
32,
32,
3,
107,
34,
4,
32,
12,
32,
8,
107,
34,
6,
32,
6,
32,
4,
75,
27,
34,
4,
4,
64,
32,
3,
32,
11,
106,
33,
10,
32,
8,
33,
9,
32,
4,
33,
6,
3,
64,
32,
6,
65,
128,
128,
2,
32,
10,
65,
255,
255,
1,
113,
34,
15,
107,
34,
8,
32,
8,
32,
6,
75,
27,
34,
7,
32,
15,
106,
34,
10,
65,
131,
130,
2,
79,
13,
21,
32,
7,
32,
9,
106,
34,
8,
32,
7,
73,
13,
20,
32,
12,
32,
8,
73,
13,
19,
32,
17,
40,
2,
0,
32,
15,
106,
65,
128,
128,
8,
106,
32,
9,
32,
16,
106,
34,
19,
32,
7,
16,
125,
26,
32,
15,
65,
128,
2,
77,
4,
64,
65,
129,
2,
32,
15,
107,
34,
14,
32,
7,
32,
7,
32,
14,
75,
27,
34,
14,
32,
15,
65,
128,
128,
2,
114,
34,
18,
106,
34,
15,
65,
131,
130,
2,
79,
13,
19,
32,
9,
32,
14,
106,
34,
15,
32,
14,
73,
13,
18,
32,
12,
32,
15,
73,
13,
17,
32,
17,
40,
2,
0,
32,
18,
106,
65,
128,
128,
8,
106,
32,
19,
32,
14,
16,
125,
26,
11,
32,
8,
33,
9,
32,
6,
32,
7,
107,
34,
6,
13,
0,
11,
11,
32,
1,
32,
1,
40,
2,
228,
128,
4,
34,
6,
65,
128,
128,
2,
32,
3,
32,
4,
106,
34,
10,
107,
34,
3,
32,
3,
32,
6,
75,
27,
54,
2,
228,
128,
4,
32,
10,
65,
255,
31,
75,
13,
1,
32,
1,
45,
0,
198,
128,
4,
13,
1,
32,
10,
33,
3,
11,
32,
1,
32,
11,
54,
2,
224,
128,
4,
32,
1,
32,
3,
54,
2,
220,
128,
4,
32,
1,
32,
8,
54,
2,
172,
128,
4,
12,
20,
11,
2,
64,
32,
10,
65,
4,
79,
4,
64,
3,
64,
32,
17,
40,
2,
0,
34,
3,
32,
3,
32,
5,
65,
255,
255,
1,
113,
106,
65,
128,
128,
8,
106,
40,
0,
0,
34,
6,
65,
255,
255,
255,
7,
113,
34,
4,
65,
17,
118,
32,
6,
65,
255,
31,
113,
115,
65,
1,
116,
106,
65,
128,
128,
4,
106,
34,
9,
47,
1,
0,
33,
3,
32,
9,
32,
11,
59,
1,
0,
2,
64,
32,
11,
32,
3,
107,
34,
15,
65,
255,
255,
3,
113,
34,
7,
32,
1,
40,
2,
228,
128,
4,
75,
13,
0,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
4,
32,
17,
40,
2,
0,
34,
4,
32,
3,
65,
255,
255,
1,
113,
34,
9,
106,
65,
128,
128,
8,
106,
40,
0,
0,
65,
255,
255,
255,
7,
113,
71,
4,
64,
32,
1,
40,
2,
0,
34,
3,
65,
128,
128,
4,
79,
13,
36,
32,
1,
32,
3,
106,
65,
16,
106,
32,
6,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
1,
40,
2,
4,
34,
4,
65,
128,
128,
4,
73,
13,
1,
12,
38,
11,
32,
4,
65,
131,
128,
8,
106,
34,
3,
32,
9,
106,
33,
14,
32,
3,
32,
5,
106,
33,
19,
65,
255,
129,
2,
32,
9,
107,
34,
18,
65,
248,
255,
3,
113,
65,
8,
106,
33,
20,
65,
0,
33,
3,
2,
64,
3,
64,
32,
3,
65,
128,
2,
70,
4,
64,
65,
130,
2,
33,
3,
32,
7,
13,
7,
12,
2,
11,
32,
3,
32,
5,
106,
34,
4,
65,
3,
106,
65,
119,
75,
13,
3,
32,
4,
65,
11,
106,
65,
130,
130,
2,
75,
13,
4,
32,
20,
32,
3,
65,
8,
106,
34,
4,
70,
13,
5,
32,
3,
32,
19,
106,
33,
22,
32,
3,
32,
14,
106,
32,
4,
33,
3,
41,
0,
0,
32,
22,
41,
0,
0,
133,
34,
39,
80,
13,
0,
11,
32,
39,
122,
167,
65,
3,
118,
32,
4,
106,
34,
4,
65,
123,
106,
34,
3,
65,
3,
73,
13,
0,
32,
4,
65,
120,
106,
32,
7,
65,
128,
192,
0,
73,
114,
13,
5,
11,
32,
1,
40,
2,
0,
34,
3,
65,
128,
128,
4,
79,
13,
35,
32,
1,
32,
3,
106,
65,
16,
106,
32,
6,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
1,
40,
2,
4,
34,
4,
65,
128,
128,
4,
73,
13,
0,
12,
37,
11,
65,
1,
33,
3,
32,
1,
32,
4,
106,
65,
16,
106,
34,
4,
32,
4,
45,
0,
0,
65,
1,
118,
58,
0,
0,
32,
6,
65,
255,
1,
113,
33,
4,
12,
4,
11,
32,
4,
65,
3,
106,
32,
4,
65,
11,
106,
65,
232,
160,
192,
0,
16,
105,
0,
11,
32,
4,
65,
11,
106,
65,
130,
130,
2,
65,
232,
160,
192,
0,
16,
104,
0,
11,
32,
18,
65,
248,
255,
3,
113,
32,
9,
106,
65,
11,
106,
65,
130,
130,
2,
65,
232,
160,
192,
0,
16,
104,
0,
11,
32,
1,
40,
2,
0,
34,
4,
65,
128,
128,
4,
79,
13,
31,
32,
1,
32,
4,
106,
65,
16,
106,
32,
10,
32,
3,
32,
3,
32,
10,
75,
27,
34,
3,
65,
125,
106,
34,
6,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
34,
4,
54,
2,
0,
32,
4,
65,
128,
128,
4,
79,
13,
31,
32,
1,
32,
4,
106,
65,
16,
106,
32,
15,
65,
127,
106,
34,
4,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
34,
9,
54,
2,
0,
32,
9,
65,
128,
128,
4,
79,
13,
10,
32,
1,
32,
9,
106,
65,
16,
106,
32,
4,
65,
128,
254,
3,
113,
65,
8,
118,
34,
9,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
1,
40,
2,
4,
34,
7,
65,
128,
128,
4,
79,
13,
11,
32,
1,
32,
7,
106,
65,
16,
106,
34,
7,
32,
7,
45,
0,
0,
65,
1,
118,
58,
0,
0,
32,
1,
40,
2,
4,
34,
7,
65,
128,
128,
4,
79,
13,
12,
32,
1,
32,
7,
106,
65,
16,
106,
34,
7,
32,
7,
45,
0,
0,
65,
128,
1,
114,
58,
0,
0,
2,
127,
32,
4,
65,
255,
255,
3,
113,
34,
7,
65,
128,
4,
79,
4,
64,
32,
4,
65,
16,
116,
65,
16,
117,
65,
127,
76,
13,
6,
32,
9,
65,
156,
176,
192,
0,
106,
12,
1,
11,
32,
7,
65,
156,
168,
192,
0,
106,
11,
33,
4,
32,
1,
40,
2,
200,
128,
4,
32,
4,
45,
0,
0,
65,
1,
116,
106,
65,
192,
4,
106,
34,
4,
32,
4,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
6,
65,
255,
1,
75,
13,
6,
32,
6,
65,
1,
116,
65,
184,
161,
192,
0,
106,
47,
1,
0,
34,
4,
65,
160,
2,
73,
13,
0,
32,
4,
65,
160,
2,
65,
236,
182,
192,
0,
16,
103,
0,
11,
32,
1,
40,
2,
200,
128,
4,
32,
4,
65,
1,
116,
106,
34,
4,
32,
4,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
1,
32,
1,
40,
2,
12,
65,
127,
106,
34,
4,
54,
2,
12,
2,
64,
32,
4,
4,
64,
32,
1,
40,
2,
0,
33,
4,
12,
1,
11,
32,
1,
65,
8,
54,
2,
12,
32,
1,
32,
1,
40,
2,
0,
34,
4,
54,
2,
4,
32,
1,
32,
4,
65,
1,
106,
34,
4,
54,
2,
0,
11,
32,
1,
32,
1,
40,
2,
8,
32,
3,
106,
54,
2,
8,
32,
1,
32,
1,
40,
2,
228,
128,
4,
32,
3,
106,
34,
6,
65,
128,
128,
2,
32,
6,
65,
128,
128,
2,
73,
27,
54,
2,
228,
128,
4,
32,
10,
32,
3,
107,
33,
10,
32,
3,
32,
11,
106,
33,
11,
32,
3,
32,
5,
106,
65,
255,
255,
1,
113,
33,
5,
32,
4,
65,
249,
255,
3,
73,
13,
0,
32,
1,
32,
11,
54,
2,
224,
128,
4,
32,
1,
32,
10,
54,
2,
220,
128,
4,
32,
13,
65,
16,
106,
32,
1,
32,
2,
65,
0,
16,
5,
32,
13,
40,
2,
16,
13,
8,
32,
13,
40,
2,
20,
34,
3,
13,
7,
32,
1,
40,
2,
224,
128,
4,
33,
11,
32,
1,
40,
2,
220,
128,
4,
33,
10,
11,
32,
10,
65,
3,
75,
13,
0,
11,
11,
65,
0,
33,
3,
32,
10,
69,
13,
1,
3,
64,
32,
5,
65,
129,
130,
2,
75,
13,
4,
32,
17,
40,
2,
0,
32,
5,
106,
65,
128,
128,
8,
106,
45,
0,
0,
33,
4,
32,
1,
32,
1,
40,
2,
8,
65,
1,
106,
54,
2,
8,
32,
1,
40,
2,
0,
34,
6,
65,
128,
128,
4,
79,
13,
10,
32,
1,
32,
6,
106,
65,
16,
106,
32,
4,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
1,
40,
2,
4,
34,
6,
65,
128,
128,
4,
79,
13,
11,
32,
1,
32,
6,
106,
65,
16,
106,
34,
6,
32,
6,
45,
0,
0,
65,
1,
118,
58,
0,
0,
32,
1,
32,
1,
40,
2,
12,
65,
127,
106,
34,
6,
54,
2,
12,
32,
6,
69,
4,
64,
32,
1,
65,
8,
54,
2,
12,
32,
1,
32,
1,
40,
2,
0,
34,
6,
54,
2,
4,
32,
1,
32,
6,
65,
1,
106,
54,
2,
0,
11,
32,
1,
40,
2,
200,
128,
4,
32,
4,
65,
1,
116,
106,
34,
4,
32,
4,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
1,
32,
1,
40,
2,
228,
128,
4,
65,
1,
106,
34,
4,
65,
128,
128,
2,
32,
4,
65,
128,
128,
2,
73,
27,
54,
2,
228,
128,
4,
32,
10,
65,
127,
106,
33,
10,
32,
11,
65,
1,
106,
33,
11,
32,
1,
40,
2,
0,
65,
249,
255,
3,
79,
4,
64,
32,
1,
32,
11,
54,
2,
224,
128,
4,
32,
1,
32,
10,
54,
2,
220,
128,
4,
32,
13,
65,
8,
106,
32,
1,
32,
2,
65,
0,
16,
5,
32,
13,
40,
2,
8,
13,
13,
32,
13,
40,
2,
12,
34,
4,
13,
14,
32,
1,
40,
2,
220,
128,
4,
33,
10,
32,
1,
40,
2,
224,
128,
4,
33,
11,
11,
32,
5,
65,
1,
106,
65,
255,
255,
1,
113,
33,
5,
32,
10,
13,
0,
11,
12,
1,
11,
11,
32,
9,
65,
128,
1,
65,
204,
182,
192,
0,
16,
103,
0,
11,
32,
6,
65,
128,
2,
65,
220,
182,
192,
0,
16,
103,
0,
11,
32,
5,
65,
130,
130,
2,
65,
252,
182,
192,
0,
16,
103,
0,
11,
32,
1,
32,
8,
54,
2,
172,
128,
4,
32,
3,
65,
1,
72,
13,
14,
12,
15,
11,
32,
1,
65,
127,
54,
2,
180,
128,
4,
32,
1,
32,
8,
54,
2,
172,
128,
4,
12,
13,
11,
32,
9,
65,
128,
128,
4,
65,
136,
161,
192,
0,
16,
103,
0,
11,
32,
7,
65,
128,
128,
4,
65,
152,
161,
192,
0,
16,
103,
0,
11,
32,
7,
65,
128,
128,
4,
65,
152,
161,
192,
0,
16,
103,
0,
11,
32,
6,
65,
128,
128,
4,
65,
136,
161,
192,
0,
16,
103,
0,
11,
32,
6,
65,
128,
128,
4,
65,
152,
161,
192,
0,
16,
103,
0,
11,
32,
1,
32,
8,
54,
2,
172,
128,
4,
32,
1,
65,
127,
54,
2,
180,
128,
4,
12,
7,
11,
32,
1,
32,
8,
54,
2,
172,
128,
4,
32,
4,
65,
0,
74,
13,
7,
12,
6,
11,
32,
15,
32,
12,
65,
188,
182,
192,
0,
16,
104,
0,
11,
32,
9,
32,
15,
65,
188,
182,
192,
0,
16,
105,
0,
11,
32,
15,
65,
130,
130,
2,
65,
172,
182,
192,
0,
16,
104,
0,
11,
32,
8,
32,
12,
65,
156,
182,
192,
0,
16,
104,
0,
11,
32,
9,
32,
8,
65,
156,
182,
192,
0,
16,
105,
0,
11,
32,
10,
65,
130,
130,
2,
65,
140,
182,
192,
0,
16,
104,
0,
11,
32,
0,
32,
8,
54,
2,
4,
32,
0,
32,
1,
40,
2,
176,
128,
4,
54,
2,
8,
32,
0,
32,
1,
40,
2,
180,
128,
4,
54,
2,
0,
12,
5,
11,
32,
2,
40,
2,
0,
34,
4,
69,
13,
0,
32,
24,
65,
1,
106,
45,
0,
0,
65,
48,
113,
69,
13,
0,
32,
2,
40,
2,
4,
34,
5,
32,
1,
40,
2,
172,
128,
4,
34,
3,
73,
13,
1,
32,
13,
32,
1,
40,
2,
168,
128,
4,
34,
5,
65,
16,
118,
59,
1,
34,
32,
13,
32,
5,
59,
1,
32,
32,
13,
65,
32,
106,
32,
4,
32,
3,
16,
93,
32,
1,
32,
13,
40,
2,
32,
54,
2,
168,
128,
4,
11,
2,
64,
32,
1,
45,
0,
198,
128,
4,
34,
3,
69,
13,
0,
32,
1,
40,
2,
172,
128,
4,
32,
2,
40,
2,
4,
65,
0,
32,
2,
40,
2,
0,
27,
71,
13,
0,
32,
1,
65,
220,
128,
4,
106,
40,
2,
0,
32,
1,
40,
2,
164,
128,
4,
114,
13,
0,
32,
13,
32,
1,
32,
2,
32,
3,
16,
5,
32,
13,
40,
2,
0,
4,
64,
32,
1,
65,
127,
54,
2,
180,
128,
4,
32,
0,
65,
127,
54,
2,
0,
32,
0,
32,
1,
41,
2,
172,
128,
4,
55,
2,
4,
12,
5,
11,
32,
13,
40,
2,
4,
65,
127,
76,
4,
64,
32,
0,
32,
1,
40,
2,
176,
128,
4,
54,
2,
8,
32,
0,
32,
1,
40,
2,
172,
128,
4,
54,
2,
4,
32,
0,
32,
1,
40,
2,
180,
128,
4,
54,
2,
0,
12,
5,
11,
32,
1,
32,
1,
45,
0,
198,
128,
4,
34,
3,
65,
4,
70,
58,
0,
199,
128,
4,
32,
3,
65,
3,
71,
13,
0,
32,
1,
65,
212,
128,
4,
106,
34,
3,
40,
2,
0,
65,
128,
128,
4,
106,
65,
0,
65,
128,
128,
4,
16,
139,
1,
26,
32,
3,
40,
2,
0,
65,
0,
65,
128,
128,
4,
16,
139,
1,
26,
32,
1,
65,
228,
128,
4,
106,
65,
0,
54,
2,
0,
11,
32,
13,
65,
32,
106,
32,
2,
32,
24,
16,
60,
32,
1,
32,
13,
40,
2,
32,
54,
2,
180,
128,
4,
32,
0,
32,
13,
41,
3,
32,
55,
2,
0,
32,
0,
65,
8,
106,
32,
13,
65,
40,
106,
40,
2,
0,
54,
2,
0,
12,
3,
11,
32,
3,
32,
5,
65,
172,
183,
192,
0,
16,
104,
0,
11,
32,
13,
65,
32,
106,
32,
2,
32,
24,
16,
60,
32,
1,
32,
13,
40,
2,
32,
54,
2,
180,
128,
4,
32,
0,
32,
13,
41,
3,
32,
55,
2,
0,
32,
0,
65,
8,
106,
32,
13,
65,
40,
106,
40,
2,
0,
54,
2,
0,
12,
1,
11,
32,
0,
65,
0,
54,
2,
8,
32,
0,
66,
254,
255,
255,
255,
15,
55,
2,
0,
32,
1,
65,
126,
54,
2,
180,
128,
4,
11,
32,
13,
65,
48,
106,
36,
0,
15,
11,
32,
3,
65,
128,
128,
4,
65,
136,
161,
192,
0,
16,
103,
0,
11,
32,
4,
65,
128,
128,
4,
65,
136,
161,
192,
0,
16,
103,
0,
11,
32,
4,
65,
128,
128,
4,
65,
152,
161,
192,
0,
16,
103,
0,
11,
211,
26,
1,
9,
127,
35,
0,
65,
32,
107,
34,
4,
36,
0,
65,
1,
33,
5,
32,
1,
65,
192,
128,
4,
106,
40,
2,
0,
33,
8,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
2,
40,
2,
16,
65,
1,
71,
13,
0,
32,
2,
65,
24,
106,
40,
2,
0,
34,
7,
32,
1,
65,
176,
128,
4,
106,
40,
2,
0,
34,
6,
107,
65,
204,
153,
5,
73,
13,
0,
32,
6,
65,
188,
153,
5,
106,
33,
8,
32,
6,
65,
195,
230,
122,
75,
13,
1,
32,
7,
32,
8,
73,
13,
2,
32,
2,
65,
20,
106,
40,
2,
0,
32,
6,
106,
33,
8,
65,
0,
33,
5,
11,
32,
4,
32,
5,
58,
0,
28,
32,
4,
66,
188,
153,
5,
55,
2,
12,
32,
4,
32,
8,
54,
2,
8,
32,
4,
32,
1,
65,
184,
128,
4,
106,
40,
2,
0,
34,
9,
54,
2,
20,
32,
4,
32,
1,
65,
188,
128,
4,
106,
40,
2,
0,
34,
6,
54,
2,
24,
32,
1,
65,
146,
128,
4,
106,
45,
0,
0,
65,
8,
113,
69,
13,
2,
65,
1,
33,
11,
32,
1,
65,
224,
128,
4,
106,
40,
2,
0,
32,
1,
65,
216,
128,
4,
106,
40,
2,
0,
107,
32,
1,
65,
228,
128,
4,
106,
40,
2,
0,
75,
13,
2,
12,
3,
11,
32,
6,
32,
8,
65,
200,
154,
192,
0,
16,
105,
0,
11,
32,
8,
32,
7,
65,
200,
154,
192,
0,
16,
104,
0,
11,
65,
0,
33,
11,
11,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
1,
65,
164,
128,
4,
106,
40,
2,
0,
69,
4,
64,
32,
1,
65,
160,
128,
4,
106,
66,
0,
55,
2,
0,
32,
1,
40,
2,
4,
34,
5,
65,
128,
128,
4,
73,
4,
64,
32,
1,
32,
5,
106,
65,
16,
106,
33,
5,
2,
64,
32,
1,
40,
2,
12,
34,
7,
65,
8,
71,
4,
64,
32,
5,
32,
5,
45,
0,
0,
32,
7,
65,
7,
113,
118,
58,
0,
0,
12,
1,
11,
32,
5,
65,
0,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
127,
106,
54,
2,
0,
11,
65,
0,
33,
5,
2,
64,
32,
1,
40,
2,
144,
128,
4,
34,
10,
65,
128,
32,
113,
69,
13,
0,
32,
1,
65,
148,
128,
4,
106,
40,
2,
0,
13,
0,
32,
4,
32,
6,
65,
8,
106,
34,
7,
54,
2,
24,
32,
4,
65,
248,
0,
32,
6,
65,
31,
113,
116,
32,
9,
114,
34,
9,
54,
2,
20,
32,
10,
65,
255,
31,
113,
34,
5,
65,
1,
75,
65,
3,
65,
2,
32,
5,
65,
255,
5,
75,
27,
32,
10,
65,
128,
128,
1,
113,
27,
65,
6,
116,
34,
10,
65,
128,
240,
1,
114,
65,
31,
112,
33,
12,
65,
0,
33,
5,
2,
64,
32,
6,
65,
119,
75,
13,
0,
32,
8,
32,
9,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
9,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
7,
54,
2,
24,
32,
7,
65,
8,
73,
13,
0,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
6,
79,
13,
20,
32,
4,
40,
2,
8,
32,
5,
106,
32,
9,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
9,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
7,
54,
2,
24,
32,
7,
65,
7,
75,
13,
0,
11,
11,
32,
4,
32,
7,
65,
8,
106,
34,
6,
54,
2,
24,
32,
4,
32,
10,
32,
12,
114,
65,
31,
115,
32,
7,
65,
31,
113,
116,
32,
9,
114,
34,
9,
54,
2,
20,
32,
7,
65,
119,
75,
13,
0,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
6,
79,
13,
19,
32,
4,
40,
2,
8,
32,
5,
106,
32,
9,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
9,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
6,
54,
2,
24,
32,
6,
65,
7,
75,
13,
0,
11,
11,
65,
1,
33,
8,
32,
4,
32,
6,
65,
1,
106,
34,
7,
54,
2,
24,
32,
4,
32,
3,
65,
255,
1,
113,
65,
4,
70,
32,
6,
65,
31,
113,
116,
32,
9,
114,
34,
6,
54,
2,
20,
32,
7,
65,
8,
79,
4,
64,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
7,
79,
13,
4,
32,
4,
40,
2,
8,
32,
5,
106,
32,
6,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
6,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
7,
54,
2,
24,
32,
7,
65,
7,
75,
13,
0,
11,
11,
32,
4,
45,
0,
28,
33,
9,
32,
11,
69,
4,
64,
32,
1,
40,
2,
200,
128,
4,
32,
4,
65,
8,
106,
32,
1,
32,
1,
40,
2,
144,
128,
4,
65,
128,
128,
16,
113,
65,
18,
118,
32,
1,
40,
2,
8,
65,
48,
73,
114,
16,
3,
65,
255,
1,
113,
34,
8,
65,
2,
70,
13,
16,
32,
8,
69,
33,
8,
11,
32,
1,
40,
2,
8,
34,
10,
65,
32,
77,
13,
3,
32,
4,
40,
2,
16,
32,
5,
107,
65,
1,
106,
32,
10,
73,
13,
3,
32,
11,
32,
1,
65,
224,
128,
4,
106,
40,
2,
0,
32,
1,
65,
216,
128,
4,
106,
40,
2,
0,
107,
32,
1,
65,
228,
128,
4,
106,
40,
2,
0,
77,
114,
13,
4,
12,
5,
11,
32,
5,
65,
128,
128,
4,
65,
152,
161,
192,
0,
16,
103,
0,
11,
65,
220,
178,
192,
0,
65,
47,
65,
140,
179,
192,
0,
16,
119,
0,
11,
32,
5,
32,
7,
65,
152,
155,
192,
0,
16,
103,
0,
11,
32,
11,
69,
13,
1,
11,
32,
4,
32,
9,
58,
0,
28,
32,
4,
32,
5,
54,
2,
16,
32,
4,
32,
6,
54,
2,
20,
32,
4,
32,
7,
65,
2,
106,
54,
2,
24,
32,
7,
65,
6,
73,
13,
1,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
8,
79,
13,
15,
32,
4,
40,
2,
8,
32,
5,
106,
32,
6,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
6,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
8,
54,
2,
24,
32,
8,
65,
7,
75,
13,
0,
11,
32,
8,
13,
1,
65,
0,
33,
7,
12,
2,
11,
32,
8,
69,
13,
2,
32,
4,
32,
9,
58,
0,
28,
32,
4,
32,
7,
54,
2,
24,
32,
4,
32,
6,
54,
2,
20,
32,
4,
32,
5,
54,
2,
16,
32,
1,
40,
2,
200,
128,
4,
32,
4,
65,
8,
106,
32,
1,
65,
1,
16,
3,
65,
255,
1,
113,
65,
2,
70,
13,
9,
12,
2,
11,
32,
4,
65,
8,
54,
2,
24,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
8,
79,
13,
13,
32,
4,
40,
2,
8,
32,
5,
106,
32,
6,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
6,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
7,
54,
2,
24,
32,
7,
65,
7,
75,
13,
0,
11,
11,
32,
4,
32,
7,
65,
16,
106,
54,
2,
24,
32,
4,
32,
1,
47,
1,
8,
32,
7,
116,
32,
6,
114,
34,
6,
54,
2,
20,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
8,
79,
13,
12,
32,
4,
40,
2,
8,
32,
5,
106,
32,
6,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
6,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
34,
7,
65,
120,
106,
34,
8,
54,
2,
24,
32,
8,
65,
7,
75,
13,
0,
11,
32,
4,
32,
7,
65,
8,
106,
54,
2,
24,
32,
4,
32,
1,
47,
1,
8,
65,
255,
255,
3,
115,
32,
8,
116,
32,
6,
114,
34,
7,
54,
2,
20,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
6,
79,
13,
10,
32,
4,
40,
2,
8,
32,
5,
106,
32,
7,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
7,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
6,
54,
2,
24,
32,
6,
65,
7,
75,
13,
0,
11,
32,
1,
40,
2,
8,
34,
11,
69,
13,
0,
65,
0,
33,
9,
3,
64,
32,
1,
40,
2,
212,
128,
4,
32,
1,
40,
2,
216,
128,
4,
32,
9,
106,
65,
255,
255,
1,
113,
106,
65,
128,
128,
8,
106,
45,
0,
0,
33,
10,
32,
4,
32,
6,
65,
8,
106,
34,
8,
54,
2,
24,
32,
4,
32,
10,
32,
6,
65,
31,
113,
116,
32,
7,
114,
34,
7,
54,
2,
20,
2,
64,
32,
6,
65,
119,
75,
4,
64,
32,
8,
33,
6,
12,
1,
11,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
6,
79,
13,
12,
32,
4,
40,
2,
8,
32,
5,
106,
32,
7,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
7,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
6,
54,
2,
24,
32,
6,
65,
7,
75,
13,
0,
11,
11,
32,
9,
65,
1,
106,
34,
9,
32,
11,
71,
13,
0,
11,
11,
2,
64,
32,
3,
65,
255,
1,
113,
34,
6,
69,
13,
0,
32,
4,
40,
2,
24,
33,
3,
32,
6,
65,
4,
71,
4,
64,
32,
4,
32,
3,
65,
3,
106,
34,
7,
54,
2,
24,
32,
4,
40,
2,
20,
33,
6,
32,
7,
65,
8,
79,
4,
64,
32,
4,
40,
2,
16,
33,
5,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
3,
79,
13,
13,
32,
4,
40,
2,
8,
32,
5,
106,
32,
6,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
6,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
7,
54,
2,
24,
32,
7,
65,
7,
75,
13,
0,
11,
11,
32,
4,
2,
127,
32,
7,
69,
4,
64,
32,
4,
40,
2,
16,
33,
5,
65,
16,
12,
1,
11,
32,
4,
65,
8,
54,
2,
24,
32,
4,
40,
2,
16,
33,
5,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
3,
79,
13,
13,
32,
4,
40,
2,
8,
32,
5,
106,
32,
6,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
6,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
34,
3,
65,
120,
106,
34,
8,
54,
2,
24,
32,
8,
65,
7,
75,
13,
0,
11,
32,
3,
65,
8,
106,
11,
54,
2,
24,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
3,
79,
13,
12,
32,
4,
40,
2,
8,
32,
5,
106,
32,
6,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
6,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
34,
8,
65,
120,
106,
34,
3,
54,
2,
24,
32,
3,
65,
7,
75,
13,
0,
11,
32,
4,
32,
8,
65,
8,
106,
54,
2,
24,
32,
4,
65,
255,
255,
3,
32,
3,
116,
32,
6,
114,
34,
6,
54,
2,
20,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
3,
73,
4,
64,
32,
4,
40,
2,
8,
32,
5,
106,
32,
6,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
6,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
3,
54,
2,
24,
32,
3,
65,
7,
75,
13,
1,
12,
3,
11,
11,
12,
11,
11,
2,
64,
32,
3,
69,
4,
64,
65,
0,
33,
6,
12,
1,
11,
32,
4,
65,
8,
54,
2,
24,
32,
4,
40,
2,
16,
33,
5,
32,
4,
40,
2,
20,
33,
7,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
3,
79,
13,
12,
32,
4,
40,
2,
8,
32,
5,
106,
32,
7,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
7,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
6,
54,
2,
24,
32,
6,
65,
7,
75,
13,
0,
11,
11,
32,
1,
65,
145,
128,
4,
106,
45,
0,
0,
65,
16,
113,
69,
13,
0,
32,
4,
32,
6,
65,
8,
106,
54,
2,
24,
32,
4,
32,
4,
40,
2,
20,
32,
1,
65,
168,
128,
4,
106,
40,
2,
0,
34,
3,
65,
24,
118,
32,
6,
116,
114,
34,
7,
54,
2,
20,
32,
4,
40,
2,
16,
33,
5,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
6,
79,
13,
10,
32,
4,
40,
2,
8,
32,
5,
106,
32,
7,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
7,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
34,
8,
65,
120,
106,
34,
6,
54,
2,
24,
32,
6,
65,
7,
75,
13,
0,
11,
32,
4,
32,
8,
54,
2,
24,
32,
4,
32,
3,
65,
16,
118,
65,
255,
1,
113,
32,
6,
116,
32,
7,
114,
34,
7,
54,
2,
20,
32,
3,
65,
255,
1,
113,
33,
8,
32,
4,
40,
2,
16,
33,
5,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
6,
79,
13,
10,
32,
4,
40,
2,
8,
32,
5,
106,
32,
7,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
7,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
34,
9,
65,
120,
106,
34,
6,
54,
2,
24,
32,
6,
65,
7,
75,
13,
0,
11,
32,
4,
32,
9,
54,
2,
24,
32,
4,
32,
3,
65,
8,
118,
65,
255,
1,
113,
32,
6,
116,
32,
7,
114,
34,
7,
54,
2,
20,
32,
4,
40,
2,
16,
33,
5,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
6,
79,
13,
10,
32,
4,
40,
2,
8,
32,
5,
106,
32,
7,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
7,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
34,
6,
65,
120,
106,
34,
3,
54,
2,
24,
32,
3,
65,
7,
75,
13,
0,
11,
32,
4,
32,
6,
54,
2,
24,
32,
4,
32,
8,
32,
3,
116,
32,
7,
114,
34,
7,
54,
2,
20,
32,
4,
40,
2,
16,
33,
5,
3,
64,
32,
5,
32,
4,
40,
2,
12,
34,
6,
79,
13,
10,
32,
4,
40,
2,
8,
32,
5,
106,
32,
7,
58,
0,
0,
32,
4,
32,
4,
40,
2,
16,
65,
1,
106,
34,
5,
54,
2,
16,
32,
4,
32,
4,
40,
2,
20,
65,
8,
118,
34,
7,
54,
2,
20,
32,
4,
32,
4,
40,
2,
24,
65,
120,
106,
34,
3,
54,
2,
24,
32,
3,
65,
7,
75,
13,
0,
11,
11,
65,
0,
33,
5,
32,
1,
40,
2,
200,
128,
4,
65,
0,
65,
192,
4,
16,
139,
1,
26,
32,
1,
40,
2,
200,
128,
4,
65,
192,
4,
106,
65,
0,
65,
192,
0,
16,
139,
1,
26,
32,
1,
65,
8,
54,
2,
12,
32,
1,
66,
1,
55,
2,
0,
32,
1,
40,
2,
8,
33,
3,
32,
1,
65,
0,
54,
2,
8,
32,
1,
32,
4,
41,
2,
20,
55,
2,
184,
128,
4,
32,
1,
65,
216,
128,
4,
106,
34,
6,
32,
3,
32,
6,
40,
2,
0,
106,
54,
2,
0,
32,
1,
65,
148,
128,
4,
106,
34,
3,
32,
3,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
4,
40,
2,
16,
34,
3,
69,
13,
0,
32,
4,
45,
0,
28,
33,
6,
32,
2,
40,
2,
8,
34,
8,
4,
64,
32,
8,
32,
1,
65,
172,
128,
4,
106,
40,
2,
0,
54,
2,
0,
11,
32,
2,
40,
2,
16,
65,
1,
70,
4,
64,
32,
6,
69,
4,
64,
32,
1,
32,
1,
40,
2,
176,
128,
4,
32,
3,
106,
54,
2,
176,
128,
4,
12,
7,
11,
32,
2,
65,
24,
106,
40,
2,
0,
34,
7,
32,
1,
40,
2,
176,
128,
4,
34,
8,
107,
34,
9,
32,
3,
32,
9,
32,
3,
73,
27,
34,
6,
32,
8,
106,
34,
5,
32,
6,
73,
13,
2,
32,
7,
32,
5,
73,
13,
3,
32,
6,
65,
205,
153,
5,
79,
13,
4,
32,
2,
40,
2,
20,
32,
8,
106,
32,
1,
40,
2,
192,
128,
4,
32,
6,
16,
125,
26,
32,
1,
32,
1,
40,
2,
176,
128,
4,
32,
6,
106,
54,
2,
176,
128,
4,
32,
9,
32,
3,
79,
13,
6,
32,
1,
32,
6,
54,
2,
160,
128,
4,
32,
1,
32,
3,
32,
6,
107,
54,
2,
164,
128,
4,
12,
6,
11,
32,
3,
65,
205,
153,
5,
79,
13,
4,
32,
2,
40,
2,
20,
32,
1,
40,
2,
192,
128,
4,
32,
3,
32,
2,
65,
24,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
13,
5,
65,
127,
33,
6,
32,
1,
65,
180,
128,
4,
106,
65,
127,
54,
2,
0,
12,
7,
11,
32,
1,
40,
2,
164,
128,
4,
33,
6,
12,
6,
11,
32,
8,
32,
5,
65,
168,
154,
192,
0,
16,
105,
0,
11,
32,
5,
32,
7,
65,
168,
154,
192,
0,
16,
104,
0,
11,
32,
6,
65,
204,
153,
5,
65,
184,
154,
192,
0,
16,
104,
0,
11,
32,
3,
65,
204,
153,
5,
65,
152,
154,
192,
0,
16,
104,
0,
11,
32,
1,
40,
2,
164,
128,
4,
33,
6,
65,
0,
33,
5,
12,
1,
11,
65,
1,
33,
5,
11,
32,
0,
32,
6,
54,
2,
4,
32,
0,
32,
5,
54,
2,
0,
32,
4,
65,
32,
106,
36,
0,
15,
11,
32,
5,
32,
6,
65,
152,
155,
192,
0,
16,
103,
0,
11,
32,
5,
32,
3,
65,
152,
155,
192,
0,
16,
103,
0,
11,
32,
5,
32,
8,
65,
152,
155,
192,
0,
16,
103,
0,
11,
183,
22,
1,
14,
127,
35,
0,
65,
144,
44,
107,
34,
10,
36,
0,
32,
10,
65,
8,
106,
65,
0,
65,
132,
1,
16,
139,
1,
26,
32,
10,
65,
140,
1,
106,
65,
0,
65,
132,
1,
16,
139,
1,
26,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
127,
2,
64,
2,
64,
2,
64,
2,
64,
65,
1,
65,
2,
2,
127,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
4,
69,
4,
64,
32,
10,
65,
144,
2,
106,
65,
0,
65,
128,
9,
16,
139,
1,
26,
32,
10,
65,
144,
11,
106,
65,
0,
65,
128,
9,
16,
139,
1,
26,
32,
2,
13,
1,
32,
10,
65,
144,
20,
106,
65,
0,
65,
128,
16,
16,
139,
1,
26,
65,
0,
12,
6,
11,
32,
2,
69,
13,
16,
32,
0,
32,
1,
65,
160,
2,
108,
106,
65,
128,
27,
106,
33,
4,
32,
2,
33,
5,
3,
64,
32,
4,
45,
0,
0,
34,
7,
65,
32,
75,
13,
2,
32,
10,
65,
8,
106,
32,
7,
65,
2,
116,
106,
34,
7,
32,
7,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
4,
65,
1,
106,
33,
4,
32,
5,
65,
127,
106,
34,
5,
13,
0,
11,
12,
16,
11,
32,
0,
32,
1,
65,
192,
4,
108,
106,
33,
5,
65,
0,
33,
4,
3,
64,
32,
4,
65,
160,
2,
70,
13,
2,
32,
5,
47,
1,
0,
34,
7,
4,
64,
32,
6,
65,
159,
2,
75,
13,
4,
32,
10,
65,
144,
2,
106,
32,
6,
65,
2,
116,
106,
34,
11,
32,
4,
59,
1,
2,
32,
11,
32,
7,
59,
1,
0,
32,
6,
65,
1,
106,
33,
6,
11,
32,
5,
65,
2,
106,
33,
5,
32,
4,
65,
1,
106,
34,
4,
32,
2,
71,
13,
0,
11,
12,
3,
11,
32,
7,
65,
33,
65,
232,
157,
192,
0,
16,
103,
0,
11,
65,
160,
2,
65,
160,
2,
65,
248,
157,
192,
0,
16,
103,
0,
11,
32,
6,
65,
160,
2,
65,
136,
158,
192,
0,
16,
103,
0,
11,
32,
6,
65,
161,
2,
79,
13,
1,
32,
10,
65,
144,
20,
106,
65,
0,
65,
128,
16,
16,
139,
1,
26,
65,
0,
32,
6,
69,
13,
0,
26,
32,
6,
65,
2,
116,
33,
5,
32,
10,
65,
144,
2,
106,
33,
4,
3,
64,
32,
10,
65,
144,
20,
106,
32,
4,
45,
0,
0,
65,
2,
116,
106,
34,
7,
32,
7,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
4,
45,
0,
1,
65,
2,
116,
32,
10,
106,
65,
144,
28,
106,
34,
7,
32,
7,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
4,
65,
4,
106,
33,
4,
32,
5,
65,
124,
106,
34,
5,
13,
0,
11,
32,
6,
33,
14,
32,
10,
40,
2,
144,
28,
11,
32,
14,
70,
27,
33,
15,
32,
10,
65,
144,
20,
106,
33,
12,
32,
10,
65,
144,
11,
106,
33,
9,
32,
10,
65,
144,
2,
106,
33,
4,
32,
14,
34,
5,
33,
7,
65,
0,
33,
6,
3,
64,
32,
7,
33,
8,
32,
9,
33,
11,
32,
5,
33,
7,
32,
4,
33,
9,
32,
10,
65,
144,
36,
106,
65,
0,
65,
128,
8,
16,
139,
1,
26,
32,
6,
65,
2,
70,
13,
2,
65,
0,
33,
4,
65,
0,
33,
5,
3,
64,
32,
10,
65,
144,
36,
106,
32,
4,
106,
32,
5,
54,
2,
0,
32,
4,
32,
12,
106,
40,
2,
0,
32,
5,
106,
33,
5,
32,
4,
65,
4,
106,
34,
4,
65,
128,
8,
71,
13,
0,
11,
32,
7,
4,
64,
32,
9,
32,
7,
65,
2,
116,
106,
33,
16,
32,
6,
65,
3,
116,
65,
8,
113,
33,
17,
32,
9,
33,
4,
3,
64,
32,
10,
65,
144,
36,
106,
32,
4,
47,
1,
0,
34,
18,
32,
17,
118,
65,
255,
1,
113,
65,
2,
116,
106,
34,
5,
40,
2,
0,
34,
13,
32,
8,
79,
13,
5,
32,
11,
32,
13,
65,
2,
116,
106,
34,
13,
32,
4,
65,
2,
106,
47,
1,
0,
59,
1,
2,
32,
13,
32,
18,
59,
1,
0,
32,
5,
32,
5,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
4,
65,
4,
106,
34,
4,
32,
16,
71,
13,
0,
11,
11,
32,
12,
65,
128,
8,
106,
33,
12,
32,
11,
33,
4,
32,
8,
33,
5,
32,
6,
65,
1,
106,
34,
13,
33,
6,
32,
13,
32,
15,
71,
13,
0,
11,
2,
64,
32,
8,
65,
1,
77,
4,
64,
32,
8,
65,
1,
107,
13,
8,
12,
1,
11,
32,
11,
32,
11,
47,
1,
0,
32,
11,
47,
1,
4,
106,
59,
1,
0,
32,
8,
65,
127,
106,
34,
4,
65,
2,
73,
13,
4,
32,
11,
65,
4,
106,
33,
6,
65,
0,
33,
5,
65,
2,
33,
9,
65,
2,
33,
12,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
3,
64,
32,
9,
65,
127,
106,
33,
7,
2,
64,
2,
64,
32,
12,
32,
8,
73,
4,
64,
32,
5,
32,
8,
79,
13,
4,
32,
11,
32,
5,
65,
2,
116,
106,
47,
1,
0,
32,
11,
32,
12,
65,
2,
116,
106,
47,
1,
0,
34,
13,
79,
13,
1,
11,
32,
5,
32,
8,
79,
13,
4,
32,
7,
32,
8,
79,
13,
5,
32,
6,
32,
11,
32,
5,
65,
2,
116,
106,
34,
13,
47,
1,
0,
59,
1,
0,
32,
13,
32,
7,
59,
1,
0,
32,
5,
65,
1,
106,
33,
5,
12,
1,
11,
32,
7,
32,
8,
79,
13,
5,
32,
6,
32,
13,
59,
1,
0,
32,
12,
65,
1,
106,
33,
12,
11,
2,
64,
2,
64,
32,
12,
32,
8,
79,
4,
64,
32,
7,
32,
8,
73,
13,
1,
12,
24,
11,
2,
64,
32,
5,
32,
7,
73,
4,
64,
32,
5,
32,
8,
79,
13,
9,
32,
11,
32,
5,
65,
2,
116,
106,
47,
1,
0,
32,
11,
32,
12,
65,
2,
116,
106,
47,
1,
0,
73,
13,
1,
11,
32,
7,
32,
8,
79,
13,
10,
32,
6,
32,
11,
32,
12,
65,
2,
116,
106,
47,
1,
0,
32,
6,
47,
1,
0,
106,
59,
1,
0,
32,
12,
65,
1,
106,
33,
12,
12,
2,
11,
32,
7,
32,
8,
79,
13,
23,
11,
32,
5,
32,
8,
79,
13,
7,
32,
6,
32,
11,
32,
5,
65,
2,
116,
106,
34,
13,
47,
1,
0,
32,
6,
47,
1,
0,
106,
59,
1,
0,
32,
13,
32,
7,
59,
1,
0,
32,
5,
65,
1,
106,
33,
5,
11,
32,
6,
65,
4,
106,
33,
6,
32,
8,
32,
9,
65,
1,
106,
34,
9,
71,
13,
0,
11,
32,
8,
65,
126,
106,
33,
9,
32,
8,
65,
1,
77,
13,
7,
32,
11,
32,
9,
65,
2,
116,
106,
65,
0,
59,
1,
0,
65,
0,
32,
9,
69,
13,
15,
26,
32,
8,
65,
125,
106,
33,
6,
32,
11,
32,
8,
65,
2,
116,
106,
65,
116,
106,
33,
5,
3,
64,
32,
6,
32,
8,
79,
13,
9,
32,
8,
32,
5,
47,
1,
0,
34,
7,
77,
13,
10,
32,
5,
32,
11,
32,
7,
65,
2,
116,
106,
47,
1,
0,
65,
1,
106,
59,
1,
0,
32,
5,
65,
124,
106,
33,
5,
32,
6,
65,
127,
106,
34,
6,
65,
127,
71,
13,
0,
11,
32,
9,
12,
15,
11,
32,
5,
32,
8,
65,
216,
155,
192,
0,
16,
103,
0,
11,
32,
5,
32,
8,
65,
232,
155,
192,
0,
16,
103,
0,
11,
32,
9,
65,
127,
106,
32,
8,
65,
248,
155,
192,
0,
16,
103,
0,
11,
32,
9,
65,
127,
106,
32,
8,
65,
136,
156,
192,
0,
16,
103,
0,
11,
32,
5,
32,
8,
65,
152,
156,
192,
0,
16,
103,
0,
11,
32,
5,
32,
8,
65,
184,
156,
192,
0,
16,
103,
0,
11,
32,
9,
65,
127,
106,
32,
8,
65,
200,
156,
192,
0,
16,
103,
0,
11,
32,
9,
32,
8,
65,
216,
156,
192,
0,
16,
103,
0,
11,
32,
6,
32,
8,
65,
232,
156,
192,
0,
16,
103,
0,
11,
32,
7,
32,
8,
65,
248,
156,
192,
0,
16,
103,
0,
11,
32,
11,
65,
1,
59,
1,
0,
32,
11,
65,
4,
106,
33,
6,
12,
5,
11,
32,
6,
65,
160,
2,
65,
152,
158,
192,
0,
16,
104,
0,
11,
65,
2,
65,
2,
65,
184,
155,
192,
0,
16,
103,
0,
11,
32,
13,
32,
8,
65,
200,
155,
192,
0,
16,
103,
0,
11,
32,
8,
65,
2,
116,
32,
11,
106,
65,
120,
106,
65,
0,
59,
1,
0,
65,
0,
11,
33,
7,
65,
0,
33,
9,
65,
1,
33,
13,
2,
64,
3,
64,
2,
64,
32,
7,
65,
0,
72,
4,
64,
65,
0,
33,
6,
12,
1,
11,
32,
11,
32,
7,
65,
2,
116,
106,
33,
12,
65,
0,
33,
6,
32,
7,
33,
5,
3,
64,
32,
5,
32,
8,
73,
4,
64,
32,
12,
47,
1,
0,
32,
9,
65,
255,
255,
3,
113,
71,
4,
64,
32,
5,
33,
7,
12,
3,
11,
32,
12,
65,
124,
106,
33,
12,
32,
6,
65,
1,
106,
33,
6,
32,
5,
65,
0,
74,
32,
5,
65,
127,
106,
34,
7,
33,
5,
13,
1,
12,
2,
11,
11,
32,
5,
32,
8,
65,
136,
157,
192,
0,
16,
103,
0,
11,
32,
13,
32,
6,
74,
4,
64,
32,
11,
32,
4,
65,
2,
116,
106,
33,
5,
3,
64,
32,
4,
32,
8,
79,
13,
3,
32,
5,
32,
9,
59,
1,
0,
32,
5,
65,
124,
106,
33,
5,
32,
4,
65,
127,
106,
33,
4,
32,
13,
65,
127,
106,
34,
13,
32,
6,
74,
13,
0,
11,
11,
32,
9,
65,
1,
106,
33,
9,
32,
6,
65,
1,
116,
34,
13,
65,
0,
74,
13,
0,
11,
32,
8,
69,
13,
2,
32,
11,
32,
8,
65,
2,
116,
106,
33,
6,
12,
1,
11,
32,
4,
32,
8,
65,
152,
157,
192,
0,
16,
103,
0,
11,
32,
11,
33,
4,
3,
64,
32,
4,
47,
1,
0,
34,
5,
65,
33,
79,
13,
3,
32,
10,
65,
8,
106,
32,
5,
65,
2,
116,
106,
34,
5,
32,
5,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
6,
32,
4,
65,
4,
106,
34,
4,
71,
13,
0,
11,
12,
1,
11,
65,
0,
33,
8,
11,
2,
64,
2,
64,
2,
64,
32,
14,
65,
2,
73,
13,
0,
32,
3,
65,
1,
106,
34,
9,
65,
34,
79,
13,
2,
2,
64,
32,
9,
65,
33,
70,
4,
64,
32,
10,
65,
8,
106,
32,
3,
65,
2,
116,
106,
34,
7,
40,
2,
0,
33,
6,
12,
1,
11,
32,
3,
65,
2,
116,
33,
4,
32,
10,
65,
12,
106,
33,
7,
65,
0,
33,
5,
3,
64,
32,
4,
32,
7,
106,
40,
2,
0,
32,
5,
106,
33,
5,
32,
4,
65,
4,
106,
34,
4,
65,
128,
1,
71,
13,
0,
11,
32,
10,
65,
8,
106,
32,
3,
65,
2,
116,
106,
34,
7,
32,
7,
40,
2,
0,
32,
5,
106,
34,
6,
54,
2,
0,
32,
9,
69,
13,
2,
32,
3,
69,
13,
1,
11,
32,
6,
33,
9,
32,
3,
65,
1,
71,
4,
64,
32,
3,
65,
2,
116,
32,
10,
106,
65,
4,
106,
33,
4,
65,
1,
33,
5,
3,
64,
32,
4,
40,
2,
0,
32,
5,
65,
31,
113,
116,
32,
9,
106,
33,
9,
32,
4,
65,
124,
106,
33,
4,
32,
3,
32,
5,
65,
1,
106,
34,
5,
71,
13,
0,
11,
11,
65,
1,
32,
3,
65,
31,
113,
116,
34,
13,
32,
9,
79,
13,
0,
32,
3,
65,
2,
116,
32,
10,
106,
65,
12,
106,
33,
12,
2,
64,
3,
64,
32,
7,
32,
6,
65,
127,
106,
54,
2,
0,
32,
13,
65,
1,
106,
33,
13,
32,
12,
33,
5,
32,
3,
33,
4,
2,
64,
2,
64,
3,
64,
32,
4,
65,
2,
73,
13,
1,
32,
4,
65,
127,
106,
34,
6,
65,
33,
79,
13,
2,
32,
5,
65,
120,
106,
32,
5,
65,
124,
106,
34,
15,
33,
5,
32,
6,
33,
4,
40,
2,
0,
34,
16,
69,
13,
0,
11,
32,
15,
65,
124,
106,
32,
16,
65,
127,
106,
54,
2,
0,
32,
6,
65,
1,
106,
65,
32,
75,
13,
3,
32,
15,
32,
15,
40,
2,
0,
65,
2,
106,
54,
2,
0,
11,
32,
9,
32,
13,
70,
13,
3,
32,
7,
40,
2,
0,
33,
6,
12,
1,
11,
11,
32,
4,
65,
127,
106,
65,
33,
65,
200,
157,
192,
0,
16,
103,
0,
11,
32,
6,
65,
1,
106,
65,
33,
65,
216,
157,
192,
0,
16,
103,
0,
11,
32,
0,
32,
1,
65,
160,
2,
108,
106,
34,
7,
65,
128,
27,
106,
65,
0,
65,
160,
2,
16,
139,
1,
26,
32,
0,
32,
1,
65,
192,
4,
108,
106,
65,
192,
13,
106,
65,
0,
65,
192,
4,
16,
139,
1,
26,
32,
3,
69,
13,
4,
32,
11,
65,
2,
106,
33,
11,
65,
1,
33,
6,
3,
64,
32,
14,
33,
5,
2,
64,
2,
64,
2,
64,
2,
64,
32,
6,
65,
33,
73,
4,
64,
32,
5,
32,
10,
65,
8,
106,
32,
6,
65,
2,
116,
106,
40,
2,
0,
34,
4,
107,
33,
14,
32,
5,
32,
4,
73,
13,
2,
32,
8,
32,
5,
73,
13,
3,
32,
4,
69,
13,
4,
65,
0,
32,
4,
65,
2,
116,
107,
33,
4,
32,
11,
32,
5,
65,
2,
116,
106,
33,
9,
3,
64,
32,
4,
32,
9,
106,
47,
1,
0,
34,
5,
65,
159,
2,
75,
13,
2,
32,
5,
32,
7,
106,
65,
128,
27,
106,
32,
6,
58,
0,
0,
32,
4,
65,
4,
106,
34,
4,
13,
0,
11,
12,
4,
11,
32,
6,
65,
33,
65,
184,
158,
192,
0,
16,
103,
0,
11,
32,
5,
65,
160,
2,
65,
216,
158,
192,
0,
16,
103,
0,
11,
32,
14,
32,
5,
65,
200,
158,
192,
0,
16,
105,
0,
11,
32,
5,
32,
8,
65,
200,
158,
192,
0,
16,
104,
0,
11,
32,
6,
32,
3,
79,
32,
6,
32,
6,
32,
3,
73,
106,
34,
6,
32,
3,
75,
114,
69,
13,
0,
11,
12,
4,
11,
65,
1,
65,
0,
65,
184,
157,
192,
0,
16,
105,
0,
11,
32,
9,
65,
33,
65,
168,
157,
192,
0,
16,
105,
0,
11,
32,
5,
65,
33,
65,
168,
158,
192,
0,
16,
103,
0,
11,
32,
9,
65,
127,
106,
32,
8,
65,
168,
156,
192,
0,
16,
103,
0,
11,
65,
0,
33,
5,
32,
10,
65,
0,
54,
2,
144,
1,
2,
64,
32,
3,
65,
2,
73,
13,
0,
65,
2,
33,
4,
3,
64,
32,
4,
65,
127,
106,
34,
7,
65,
33,
79,
4,
64,
32,
7,
65,
33,
65,
232,
158,
192,
0,
16,
103,
0,
11,
32,
4,
65,
32,
77,
4,
64,
32,
4,
32,
3,
79,
32,
10,
65,
140,
1,
106,
32,
4,
65,
2,
116,
106,
32,
10,
65,
8,
106,
32,
7,
65,
2,
116,
106,
40,
2,
0,
32,
5,
106,
65,
1,
116,
34,
5,
54,
2,
0,
32,
4,
32,
4,
32,
3,
73,
106,
34,
7,
33,
4,
32,
7,
32,
3,
75,
114,
69,
13,
1,
12,
2,
11,
11,
32,
4,
65,
33,
65,
248,
158,
192,
0,
16,
103,
0,
11,
2,
64,
32,
2,
69,
13,
0,
32,
0,
32,
1,
65,
160,
2,
108,
106,
34,
3,
65,
160,
29,
106,
33,
7,
32,
3,
65,
128,
27,
106,
33,
12,
32,
0,
32,
1,
65,
192,
4,
108,
106,
65,
192,
13,
106,
33,
8,
3,
64,
32,
7,
32,
12,
70,
13,
1,
2,
64,
32,
12,
45,
0,
0,
34,
0,
4,
64,
32,
0,
65,
32,
75,
13,
1,
32,
10,
65,
140,
1,
106,
32,
0,
65,
2,
116,
106,
34,
1,
32,
1,
40,
2,
0,
34,
4,
65,
1,
106,
54,
2,
0,
65,
0,
33,
5,
65,
0,
33,
6,
3,
64,
32,
4,
65,
1,
113,
32,
5,
65,
1,
116,
114,
33,
5,
32,
4,
65,
1,
118,
33,
4,
32,
6,
65,
1,
106,
34,
6,
65,
255,
1,
113,
32,
0,
73,
13,
0,
11,
32,
8,
32,
5,
59,
1,
0,
11,
32,
8,
65,
2,
106,
33,
8,
32,
12,
65,
1,
106,
33,
12,
32,
2,
65,
127,
106,
34,
2,
13,
1,
12,
2,
11,
11,
32,
0,
65,
33,
65,
136,
159,
192,
0,
16,
103,
0,
11,
32,
10,
65,
144,
44,
106,
36,
0,
11,
136,
13,
1,
11,
127,
35,
0,
65,
16,
107,
34,
8,
36,
0,
2,
64,
2,
64,
32,
6,
65,
3,
71,
4,
64,
32,
1,
45,
0,
240,
213,
2,
33,
11,
32,
1,
65,
0,
58,
0,
240,
213,
2,
32,
1,
44,
0,
243,
213,
2,
65,
0,
78,
4,
64,
32,
1,
45,
0,
242,
213,
2,
33,
7,
32,
6,
65,
4,
70,
34,
12,
69,
65,
0,
32,
1,
45,
0,
241,
213,
2,
34,
9,
27,
69,
4,
64,
65,
8,
65,
9,
32,
7,
27,
33,
7,
32,
1,
32,
12,
32,
9,
65,
0,
71,
114,
58,
0,
241,
213,
2,
32,
11,
65,
0,
32,
6,
65,
4,
70,
27,
69,
4,
64,
32,
0,
2,
127,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
1,
40,
2,
236,
85,
34,
9,
69,
4,
64,
32,
7,
32,
7,
65,
2,
114,
32,
6,
65,
4,
70,
27,
33,
14,
32,
1,
65,
240,
213,
0,
106,
33,
15,
32,
1,
40,
2,
232,
85,
33,
7,
32,
3,
69,
13,
1,
32,
8,
32,
1,
32,
2,
32,
3,
32,
15,
65,
128,
128,
2,
32,
7,
32,
14,
16,
2,
32,
1,
32,
8,
45,
0,
4,
34,
11,
58,
0,
243,
213,
2,
32,
8,
40,
2,
0,
34,
9,
32,
3,
75,
13,
6,
32,
8,
40,
2,
8,
33,
7,
32,
6,
65,
4,
70,
13,
5,
65,
0,
33,
12,
3,
64,
32,
1,
32,
7,
54,
2,
236,
85,
32,
1,
40,
2,
232,
85,
34,
6,
32,
5,
32,
7,
32,
7,
32,
5,
75,
27,
34,
10,
106,
34,
7,
32,
6,
73,
13,
8,
32,
7,
65,
128,
128,
2,
75,
13,
19,
32,
9,
32,
13,
106,
33,
13,
32,
4,
32,
1,
32,
6,
106,
65,
240,
213,
0,
106,
32,
10,
16,
125,
33,
16,
32,
1,
32,
1,
40,
2,
236,
85,
32,
10,
107,
34,
4,
54,
2,
236,
85,
32,
1,
32,
1,
40,
2,
232,
85,
32,
10,
106,
65,
255,
255,
1,
113,
34,
17,
54,
2,
232,
85,
32,
10,
32,
12,
106,
33,
12,
32,
11,
65,
24,
116,
65,
24,
117,
65,
127,
76,
13,
9,
32,
11,
65,
255,
1,
113,
34,
11,
69,
33,
6,
32,
4,
69,
33,
7,
32,
4,
32,
11,
69,
114,
13,
3,
32,
5,
32,
10,
107,
34,
5,
69,
13,
3,
32,
3,
32,
9,
107,
34,
3,
69,
13,
3,
32,
10,
32,
16,
106,
33,
4,
32,
8,
32,
1,
32,
2,
32,
9,
106,
34,
2,
32,
3,
32,
15,
65,
128,
128,
2,
32,
17,
32,
14,
16,
2,
32,
1,
32,
8,
45,
0,
4,
34,
11,
58,
0,
243,
213,
2,
32,
8,
40,
2,
8,
33,
7,
32,
3,
32,
8,
40,
2,
0,
34,
9,
79,
13,
0,
11,
12,
6,
11,
2,
64,
32,
1,
40,
2,
232,
85,
34,
3,
32,
5,
32,
9,
32,
9,
32,
5,
75,
27,
34,
2,
106,
34,
5,
32,
3,
79,
4,
64,
32,
5,
65,
128,
128,
2,
75,
13,
1,
32,
4,
32,
1,
32,
3,
106,
65,
240,
213,
0,
106,
32,
2,
16,
125,
26,
32,
0,
65,
0,
54,
2,
8,
32,
0,
32,
2,
54,
2,
4,
32,
0,
65,
0,
54,
2,
0,
32,
1,
32,
1,
40,
2,
236,
85,
32,
2,
107,
34,
3,
54,
2,
236,
85,
32,
1,
32,
1,
40,
2,
232,
85,
32,
2,
106,
65,
255,
255,
1,
113,
54,
2,
232,
85,
32,
0,
65,
12,
106,
32,
3,
32,
1,
45,
0,
243,
213,
2,
114,
69,
54,
2,
0,
12,
18,
11,
32,
3,
32,
5,
65,
176,
194,
192,
0,
16,
105,
0,
11,
32,
5,
65,
128,
128,
2,
65,
176,
194,
192,
0,
16,
104,
0,
11,
65,
0,
33,
3,
32,
8,
32,
1,
32,
2,
65,
0,
32,
15,
65,
128,
128,
2,
32,
7,
32,
14,
16,
2,
32,
1,
32,
8,
44,
0,
4,
34,
11,
58,
0,
243,
213,
2,
32,
8,
40,
2,
0,
34,
9,
13,
4,
32,
8,
40,
2,
8,
33,
7,
32,
6,
65,
4,
70,
4,
64,
65,
0,
33,
9,
65,
0,
33,
12,
3,
64,
32,
1,
32,
7,
54,
2,
236,
85,
32,
1,
40,
2,
232,
85,
34,
6,
32,
5,
32,
7,
32,
7,
32,
5,
75,
27,
34,
10,
106,
34,
7,
32,
6,
73,
13,
3,
32,
7,
65,
128,
128,
2,
75,
13,
4,
32,
9,
32,
13,
106,
33,
13,
32,
4,
32,
1,
32,
6,
106,
65,
240,
213,
0,
106,
32,
10,
16,
125,
32,
1,
32,
1,
40,
2,
236,
85,
32,
10,
107,
34,
6,
54,
2,
236,
85,
32,
1,
32,
1,
40,
2,
232,
85,
32,
10,
106,
65,
255,
255,
1,
113,
34,
7,
54,
2,
232,
85,
32,
10,
32,
12,
106,
33,
12,
32,
11,
65,
24,
116,
65,
24,
117,
65,
0,
72,
13,
8,
32,
11,
65,
255,
1,
113,
34,
11,
65,
1,
77,
4,
64,
65,
123,
33,
1,
32,
11,
65,
1,
107,
13,
11,
12,
10,
11,
32,
5,
32,
10,
107,
34,
5,
69,
13,
11,
32,
10,
106,
33,
4,
32,
8,
32,
1,
32,
2,
32,
9,
106,
34,
2,
32,
3,
32,
9,
107,
34,
3,
32,
15,
65,
128,
128,
2,
32,
7,
32,
14,
16,
2,
32,
1,
32,
8,
45,
0,
4,
34,
11,
58,
0,
243,
213,
2,
32,
8,
40,
2,
8,
33,
7,
32,
3,
32,
8,
40,
2,
0,
34,
9,
79,
13,
0,
11,
12,
5,
11,
32,
1,
32,
7,
54,
2,
236,
85,
32,
1,
40,
2,
232,
85,
34,
6,
32,
5,
32,
7,
32,
7,
32,
5,
75,
27,
34,
12,
106,
34,
7,
32,
6,
73,
13,
1,
32,
7,
65,
128,
128,
2,
75,
13,
2,
32,
4,
32,
1,
32,
6,
106,
65,
240,
213,
0,
106,
32,
12,
16,
125,
26,
32,
1,
32,
1,
40,
2,
236,
85,
32,
12,
107,
34,
2,
54,
2,
236,
85,
32,
1,
32,
1,
40,
2,
232,
85,
32,
12,
106,
65,
255,
255,
1,
113,
54,
2,
232,
85,
32,
11,
65,
0,
72,
13,
6,
65,
123,
33,
1,
32,
11,
65,
1,
70,
13,
7,
32,
11,
69,
33,
6,
32,
2,
69,
33,
7,
11,
32,
6,
32,
7,
113,
33,
1,
65,
0,
12,
9,
11,
32,
6,
32,
7,
65,
176,
194,
192,
0,
16,
105,
0,
11,
32,
7,
65,
128,
128,
2,
65,
176,
194,
192,
0,
16,
104,
0,
11,
65,
0,
33,
12,
3,
64,
32,
1,
32,
7,
54,
2,
236,
85,
32,
1,
40,
2,
232,
85,
34,
6,
32,
5,
32,
7,
32,
7,
32,
5,
75,
27,
34,
10,
106,
34,
7,
32,
6,
73,
13,
2,
32,
7,
65,
128,
128,
2,
75,
13,
13,
32,
9,
32,
13,
106,
33,
13,
32,
4,
32,
1,
32,
6,
106,
65,
240,
213,
0,
106,
32,
10,
16,
125,
32,
1,
32,
1,
40,
2,
236,
85,
32,
10,
107,
34,
6,
54,
2,
236,
85,
32,
1,
32,
1,
40,
2,
232,
85,
32,
10,
106,
65,
255,
255,
1,
113,
34,
7,
54,
2,
232,
85,
32,
10,
32,
12,
106,
33,
12,
32,
11,
65,
24,
116,
65,
24,
117,
65,
0,
72,
13,
3,
32,
11,
65,
255,
1,
113,
69,
13,
5,
32,
5,
32,
10,
107,
34,
5,
69,
13,
6,
32,
10,
106,
33,
4,
32,
8,
32,
1,
32,
2,
32,
9,
106,
34,
2,
32,
3,
32,
9,
107,
34,
3,
32,
15,
65,
128,
128,
2,
32,
7,
32,
14,
16,
2,
32,
1,
32,
8,
45,
0,
4,
34,
11,
58,
0,
243,
213,
2,
32,
8,
40,
2,
8,
33,
7,
32,
3,
32,
8,
40,
2,
0,
34,
9,
79,
13,
0,
11,
11,
32,
9,
32,
3,
65,
160,
194,
192,
0,
16,
105,
0,
11,
32,
6,
32,
7,
65,
176,
194,
192,
0,
16,
105,
0,
11,
65,
125,
33,
1,
11,
65,
1,
12,
2,
11,
65,
123,
65,
1,
32,
6,
27,
33,
1,
32,
6,
65,
0,
71,
12,
1,
11,
65,
123,
33,
1,
65,
1,
11,
54,
2,
8,
32,
0,
32,
12,
54,
2,
4,
32,
0,
32,
13,
54,
2,
0,
32,
0,
65,
12,
106,
32,
1,
54,
2,
0,
12,
4,
11,
65,
0,
33,
6,
32,
8,
32,
1,
32,
2,
32,
3,
32,
4,
32,
5,
65,
0,
32,
7,
65,
4,
114,
16,
2,
32,
1,
32,
8,
44,
0,
4,
34,
2,
58,
0,
243,
213,
2,
32,
8,
40,
2,
8,
33,
3,
32,
8,
40,
2,
0,
33,
4,
2,
127,
32,
2,
65,
0,
72,
4,
64,
65,
1,
33,
6,
65,
125,
12,
1,
11,
65,
1,
32,
2,
69,
13,
0,
26,
32,
1,
65,
255,
1,
58,
0,
243,
213,
2,
65,
1,
33,
6,
65,
123,
11,
33,
1,
32,
0,
32,
6,
54,
2,
8,
32,
0,
32,
3,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
32,
0,
65,
12,
106,
32,
1,
54,
2,
0,
12,
3,
11,
32,
0,
66,
129,
128,
128,
128,
96,
55,
2,
8,
32,
0,
66,
0,
55,
2,
0,
12,
2,
11,
32,
0,
66,
129,
128,
128,
128,
80,
55,
2,
8,
32,
0,
66,
0,
55,
2,
0,
12,
1,
11,
32,
0,
66,
129,
128,
128,
128,
96,
55,
2,
8,
32,
0,
66,
0,
55,
2,
0,
11,
32,
8,
65,
16,
106,
36,
0,
15,
11,
32,
7,
65,
128,
128,
2,
65,
176,
194,
192,
0,
16,
104,
0,
11,
215,
12,
1,
4,
127,
32,
0,
40,
2,
0,
65,
127,
115,
33,
4,
2,
64,
32,
2,
65,
192,
0,
73,
4,
64,
32,
2,
33,
5,
12,
1,
11,
32,
1,
65,
63,
106,
33,
3,
32,
2,
65,
64,
106,
34,
6,
65,
63,
113,
33,
5,
32,
6,
65,
64,
113,
32,
1,
106,
65,
64,
107,
33,
1,
3,
64,
32,
3,
65,
116,
106,
45,
0,
0,
32,
3,
65,
100,
106,
45,
0,
0,
32,
3,
65,
84,
106,
45,
0,
0,
32,
3,
65,
65,
106,
45,
0,
0,
32,
4,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
188,
193,
0,
106,
40,
2,
0,
32,
3,
65,
66,
106,
45,
0,
0,
32,
4,
65,
8,
118,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
180,
193,
0,
106,
40,
2,
0,
32,
3,
65,
67,
106,
45,
0,
0,
32,
4,
65,
16,
118,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
172,
193,
0,
106,
40,
2,
0,
32,
3,
65,
68,
106,
45,
0,
0,
32,
4,
65,
24,
118,
115,
65,
2,
116,
65,
128,
164,
193,
0,
106,
40,
2,
0,
32,
3,
65,
69,
106,
45,
0,
0,
65,
2,
116,
65,
128,
156,
193,
0,
106,
40,
2,
0,
32,
3,
65,
70,
106,
45,
0,
0,
65,
2,
116,
65,
128,
148,
193,
0,
106,
40,
2,
0,
32,
3,
65,
71,
106,
45,
0,
0,
65,
2,
116,
65,
128,
140,
193,
0,
106,
40,
2,
0,
32,
3,
65,
72,
106,
45,
0,
0,
65,
2,
116,
65,
128,
132,
193,
0,
106,
40,
2,
0,
32,
3,
65,
73,
106,
45,
0,
0,
65,
2,
116,
65,
128,
252,
192,
0,
106,
40,
2,
0,
32,
3,
65,
74,
106,
45,
0,
0,
65,
2,
116,
65,
128,
244,
192,
0,
106,
40,
2,
0,
32,
3,
65,
75,
106,
45,
0,
0,
65,
2,
116,
65,
128,
236,
192,
0,
106,
40,
2,
0,
32,
3,
65,
76,
106,
45,
0,
0,
65,
2,
116,
65,
128,
228,
192,
0,
106,
40,
2,
0,
32,
3,
65,
77,
106,
45,
0,
0,
65,
2,
116,
65,
128,
220,
192,
0,
106,
40,
2,
0,
32,
3,
65,
78,
106,
45,
0,
0,
65,
2,
116,
65,
128,
212,
192,
0,
106,
40,
2,
0,
32,
3,
65,
79,
106,
45,
0,
0,
65,
2,
116,
65,
128,
204,
192,
0,
106,
40,
2,
0,
32,
3,
65,
80,
106,
45,
0,
0,
65,
2,
116,
65,
128,
196,
192,
0,
106,
40,
2,
0,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
34,
4,
65,
24,
118,
115,
65,
2,
116,
65,
128,
164,
193,
0,
106,
40,
2,
0,
32,
3,
65,
85,
106,
45,
0,
0,
65,
2,
116,
65,
128,
156,
193,
0,
106,
40,
2,
0,
32,
3,
65,
86,
106,
45,
0,
0,
65,
2,
116,
65,
128,
148,
193,
0,
106,
40,
2,
0,
32,
3,
65,
87,
106,
45,
0,
0,
65,
2,
116,
65,
128,
140,
193,
0,
106,
40,
2,
0,
32,
3,
65,
88,
106,
45,
0,
0,
65,
2,
116,
65,
128,
132,
193,
0,
106,
40,
2,
0,
32,
3,
65,
89,
106,
45,
0,
0,
65,
2,
116,
65,
128,
252,
192,
0,
106,
40,
2,
0,
32,
3,
65,
90,
106,
45,
0,
0,
65,
2,
116,
65,
128,
244,
192,
0,
106,
40,
2,
0,
32,
3,
65,
91,
106,
45,
0,
0,
65,
2,
116,
65,
128,
236,
192,
0,
106,
40,
2,
0,
32,
3,
65,
92,
106,
45,
0,
0,
65,
2,
116,
65,
128,
228,
192,
0,
106,
40,
2,
0,
32,
3,
65,
93,
106,
45,
0,
0,
65,
2,
116,
65,
128,
220,
192,
0,
106,
40,
2,
0,
32,
3,
65,
94,
106,
45,
0,
0,
65,
2,
116,
65,
128,
212,
192,
0,
106,
40,
2,
0,
32,
3,
65,
95,
106,
45,
0,
0,
65,
2,
116,
65,
128,
204,
192,
0,
106,
40,
2,
0,
32,
3,
65,
96,
106,
45,
0,
0,
65,
2,
116,
65,
128,
196,
192,
0,
106,
40,
2,
0,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
32,
3,
65,
83,
106,
45,
0,
0,
32,
4,
65,
16,
118,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
172,
193,
0,
106,
40,
2,
0,
115,
32,
3,
65,
82,
106,
45,
0,
0,
32,
4,
65,
8,
118,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
180,
193,
0,
106,
40,
2,
0,
115,
32,
3,
65,
81,
106,
45,
0,
0,
32,
4,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
188,
193,
0,
106,
40,
2,
0,
115,
34,
4,
65,
24,
118,
115,
65,
2,
116,
65,
128,
164,
193,
0,
106,
40,
2,
0,
32,
3,
65,
101,
106,
45,
0,
0,
65,
2,
116,
65,
128,
156,
193,
0,
106,
40,
2,
0,
32,
3,
65,
102,
106,
45,
0,
0,
65,
2,
116,
65,
128,
148,
193,
0,
106,
40,
2,
0,
32,
3,
65,
103,
106,
45,
0,
0,
65,
2,
116,
65,
128,
140,
193,
0,
106,
40,
2,
0,
32,
3,
65,
104,
106,
45,
0,
0,
65,
2,
116,
65,
128,
132,
193,
0,
106,
40,
2,
0,
32,
3,
65,
105,
106,
45,
0,
0,
65,
2,
116,
65,
128,
252,
192,
0,
106,
40,
2,
0,
32,
3,
65,
106,
106,
45,
0,
0,
65,
2,
116,
65,
128,
244,
192,
0,
106,
40,
2,
0,
32,
3,
65,
107,
106,
45,
0,
0,
65,
2,
116,
65,
128,
236,
192,
0,
106,
40,
2,
0,
32,
3,
65,
108,
106,
45,
0,
0,
65,
2,
116,
65,
128,
228,
192,
0,
106,
40,
2,
0,
32,
3,
65,
109,
106,
45,
0,
0,
65,
2,
116,
65,
128,
220,
192,
0,
106,
40,
2,
0,
32,
3,
65,
110,
106,
45,
0,
0,
65,
2,
116,
65,
128,
212,
192,
0,
106,
40,
2,
0,
32,
3,
65,
111,
106,
45,
0,
0,
65,
2,
116,
65,
128,
204,
192,
0,
106,
40,
2,
0,
32,
3,
65,
112,
106,
45,
0,
0,
65,
2,
116,
65,
128,
196,
192,
0,
106,
40,
2,
0,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
32,
3,
65,
99,
106,
45,
0,
0,
32,
4,
65,
16,
118,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
172,
193,
0,
106,
40,
2,
0,
115,
32,
3,
65,
98,
106,
45,
0,
0,
32,
4,
65,
8,
118,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
180,
193,
0,
106,
40,
2,
0,
115,
32,
3,
65,
97,
106,
45,
0,
0,
32,
4,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
188,
193,
0,
106,
40,
2,
0,
115,
34,
4,
65,
24,
118,
115,
65,
2,
116,
65,
128,
164,
193,
0,
106,
40,
2,
0,
32,
3,
65,
117,
106,
45,
0,
0,
65,
2,
116,
65,
128,
156,
193,
0,
106,
40,
2,
0,
32,
3,
65,
118,
106,
45,
0,
0,
65,
2,
116,
65,
128,
148,
193,
0,
106,
40,
2,
0,
32,
3,
65,
119,
106,
45,
0,
0,
65,
2,
116,
65,
128,
140,
193,
0,
106,
40,
2,
0,
32,
3,
65,
120,
106,
45,
0,
0,
65,
2,
116,
65,
128,
132,
193,
0,
106,
40,
2,
0,
32,
3,
65,
121,
106,
45,
0,
0,
65,
2,
116,
65,
128,
252,
192,
0,
106,
40,
2,
0,
32,
3,
65,
122,
106,
45,
0,
0,
65,
2,
116,
65,
128,
244,
192,
0,
106,
40,
2,
0,
32,
3,
65,
123,
106,
45,
0,
0,
65,
2,
116,
65,
128,
236,
192,
0,
106,
40,
2,
0,
32,
3,
65,
124,
106,
45,
0,
0,
65,
2,
116,
65,
128,
228,
192,
0,
106,
40,
2,
0,
32,
3,
65,
125,
106,
45,
0,
0,
65,
2,
116,
65,
128,
220,
192,
0,
106,
40,
2,
0,
32,
3,
65,
126,
106,
45,
0,
0,
65,
2,
116,
65,
128,
212,
192,
0,
106,
40,
2,
0,
32,
3,
65,
127,
106,
45,
0,
0,
65,
2,
116,
65,
128,
204,
192,
0,
106,
40,
2,
0,
32,
3,
45,
0,
0,
65,
2,
116,
65,
128,
196,
192,
0,
106,
40,
2,
0,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
32,
3,
65,
115,
106,
45,
0,
0,
32,
4,
65,
16,
118,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
172,
193,
0,
106,
40,
2,
0,
115,
32,
3,
65,
114,
106,
45,
0,
0,
32,
4,
65,
8,
118,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
180,
193,
0,
106,
40,
2,
0,
115,
32,
3,
65,
113,
106,
45,
0,
0,
32,
4,
65,
255,
1,
113,
115,
65,
2,
116,
65,
128,
188,
193,
0,
106,
40,
2,
0,
115,
33,
4,
32,
3,
65,
64,
107,
33,
3,
32,
2,
65,
64,
106,
34,
2,
65,
63,
75,
13,
0,
11,
11,
32,
5,
4,
64,
3,
64,
32,
1,
45,
0,
0,
32,
4,
115,
65,
255,
1,
113,
65,
2,
116,
65,
128,
196,
192,
0,
106,
40,
2,
0,
32,
4,
65,
8,
118,
115,
33,
4,
32,
1,
65,
1,
106,
33,
1,
32,
5,
65,
127,
106,
34,
5,
13,
0,
11,
11,
32,
0,
32,
4,
65,
127,
115,
54,
2,
0,
11,
219,
11,
2,
15,
127,
2,
126,
35,
0,
65,
208,
0,
107,
34,
2,
36,
0,
32,
2,
16,
127,
32,
2,
32,
1,
54,
2,
24,
32,
2,
65,
40,
106,
65,
0,
59,
1,
0,
32,
2,
66,
0,
55,
3,
32,
32,
2,
65,
64,
107,
32,
2,
32,
2,
65,
32,
106,
65,
10,
16,
68,
32,
2,
40,
2,
68,
33,
1,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
2,
40,
2,
64,
34,
3,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
3,
65,
3,
113,
65,
2,
70,
4,
64,
32,
1,
40,
2,
0,
32,
1,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
1,
40,
2,
4,
34,
3,
40,
2,
4,
34,
4,
4,
64,
32,
1,
40,
2,
0,
32,
4,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
1,
65,
12,
65,
4,
16,
162,
1,
11,
32,
2,
45,
0,
32,
65,
31,
71,
13,
1,
32,
2,
45,
0,
33,
65,
139,
1,
71,
13,
1,
32,
2,
45,
0,
34,
65,
8,
71,
13,
2,
32,
2,
45,
0,
41,
33,
11,
32,
2,
40,
2,
36,
33,
12,
32,
2,
45,
0,
35,
34,
6,
65,
4,
113,
13,
3,
65,
0,
33,
4,
12,
4,
11,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
3,
173,
32,
1,
173,
66,
32,
134,
132,
55,
2,
4,
12,
4,
11,
32,
2,
65,
64,
107,
16,
133,
1,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
2,
41,
3,
64,
55,
2,
4,
12,
3,
11,
32,
2,
65,
64,
107,
16,
133,
1,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
2,
41,
3,
64,
55,
2,
4,
12,
2,
11,
32,
2,
65,
0,
59,
1,
48,
32,
2,
65,
64,
107,
32,
2,
32,
2,
65,
48,
106,
65,
2,
16,
68,
32,
2,
41,
3,
64,
34,
17,
167,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
2,
40,
2,
68,
33,
1,
32,
2,
40,
2,
64,
65,
3,
113,
65,
2,
70,
4,
64,
32,
1,
40,
2,
0,
32,
1,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
1,
40,
2,
4,
34,
3,
40,
2,
4,
34,
4,
4,
64,
32,
1,
40,
2,
0,
32,
4,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
1,
65,
12,
65,
4,
16,
162,
1,
11,
2,
64,
2,
127,
32,
2,
47,
1,
48,
34,
7,
69,
4,
64,
65,
1,
33,
4,
65,
0,
12,
1,
11,
32,
7,
16,
147,
1,
34,
4,
69,
13,
1,
32,
7,
11,
33,
8,
32,
2,
65,
64,
107,
32,
2,
32,
4,
32,
7,
16,
68,
32,
2,
40,
2,
68,
33,
1,
32,
2,
40,
2,
64,
34,
3,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
3,
65,
3,
113,
65,
2,
71,
13,
3,
32,
1,
40,
2,
0,
32,
1,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
1,
40,
2,
4,
34,
3,
40,
2,
4,
34,
5,
4,
64,
32,
1,
40,
2,
0,
32,
5,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
1,
65,
12,
65,
4,
16,
162,
1,
12,
3,
11,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
3,
173,
32,
1,
173,
66,
32,
134,
132,
55,
2,
4,
32,
8,
69,
13,
3,
32,
4,
32,
8,
65,
1,
16,
162,
1,
12,
3,
11,
32,
7,
16,
168,
1,
0,
11,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
17,
55,
2,
4,
12,
1,
11,
2,
64,
2,
64,
32,
6,
65,
8,
113,
4,
64,
32,
2,
65,
0,
54,
2,
56,
32,
2,
66,
1,
55,
3,
48,
32,
2,
32,
2,
54,
2,
60,
32,
2,
65,
64,
107,
32,
2,
65,
60,
106,
16,
67,
2,
64,
32,
2,
45,
0,
64,
34,
1,
65,
2,
70,
13,
0,
3,
64,
32,
1,
65,
255,
1,
113,
65,
1,
70,
13,
3,
32,
2,
45,
0,
65,
34,
3,
69,
13,
1,
32,
2,
40,
2,
56,
34,
1,
32,
2,
40,
2,
52,
70,
4,
127,
32,
2,
65,
48,
106,
32,
1,
65,
1,
16,
85,
32,
2,
40,
2,
56,
5,
32,
1,
11,
32,
2,
40,
2,
48,
106,
32,
3,
58,
0,
0,
32,
2,
32,
2,
40,
2,
56,
65,
1,
106,
54,
2,
56,
32,
2,
65,
64,
107,
32,
2,
65,
60,
106,
16,
67,
32,
2,
45,
0,
64,
34,
1,
65,
2,
71,
13,
0,
11,
11,
32,
2,
40,
2,
48,
33,
9,
32,
2,
40,
2,
56,
33,
13,
32,
2,
40,
2,
52,
33,
5,
11,
2,
64,
2,
64,
32,
6,
65,
16,
113,
4,
127,
32,
2,
65,
0,
54,
2,
56,
32,
2,
66,
1,
55,
3,
48,
32,
2,
32,
2,
54,
2,
60,
32,
2,
65,
64,
107,
32,
2,
65,
60,
106,
16,
67,
2,
64,
32,
2,
45,
0,
64,
34,
1,
65,
2,
70,
13,
0,
3,
64,
2,
64,
32,
1,
65,
255,
1,
113,
65,
1,
71,
4,
64,
32,
2,
45,
0,
65,
34,
3,
13,
1,
12,
3,
11,
32,
2,
53,
2,
72,
33,
17,
32,
2,
53,
2,
68,
33,
18,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
18,
32,
17,
66,
32,
134,
132,
55,
2,
4,
32,
2,
40,
2,
52,
34,
0,
69,
13,
4,
32,
2,
40,
2,
48,
32,
0,
65,
1,
16,
162,
1,
12,
4,
11,
32,
2,
40,
2,
56,
34,
1,
32,
2,
40,
2,
52,
70,
4,
127,
32,
2,
65,
48,
106,
32,
1,
65,
1,
16,
85,
32,
2,
40,
2,
56,
5,
32,
1,
11,
32,
2,
40,
2,
48,
106,
32,
3,
58,
0,
0,
32,
2,
32,
2,
40,
2,
56,
65,
1,
106,
54,
2,
56,
32,
2,
65,
64,
107,
32,
2,
65,
60,
106,
16,
67,
32,
2,
45,
0,
64,
34,
1,
65,
2,
71,
13,
0,
11,
11,
32,
2,
40,
2,
52,
33,
3,
32,
2,
40,
2,
56,
33,
14,
32,
2,
40,
2,
48,
5,
65,
0,
11,
33,
10,
32,
6,
65,
2,
113,
69,
13,
1,
32,
2,
16,
154,
1,
33,
6,
32,
2,
65,
0,
59,
1,
48,
32,
2,
65,
64,
107,
32,
2,
32,
2,
65,
48,
106,
65,
2,
16,
68,
2,
64,
32,
2,
41,
3,
64,
34,
17,
167,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
2,
40,
2,
68,
33,
1,
32,
2,
40,
2,
64,
65,
3,
113,
65,
2,
70,
4,
64,
32,
1,
40,
2,
0,
32,
1,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
1,
40,
2,
4,
34,
15,
40,
2,
4,
34,
16,
4,
64,
32,
1,
40,
2,
0,
32,
16,
32,
15,
40,
2,
8,
16,
162,
1,
11,
32,
1,
65,
12,
65,
4,
16,
162,
1,
11,
32,
2,
47,
1,
48,
32,
6,
65,
255,
255,
3,
113,
70,
13,
3,
32,
2,
65,
64,
107,
16,
132,
1,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
2,
41,
3,
64,
55,
2,
4,
12,
1,
11,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
17,
55,
2,
4,
11,
32,
10,
69,
32,
3,
69,
114,
13,
0,
32,
10,
32,
3,
65,
1,
16,
162,
1,
11,
32,
9,
69,
32,
5,
69,
114,
13,
2,
32,
9,
32,
5,
65,
1,
16,
162,
1,
12,
2,
11,
32,
0,
32,
4,
54,
2,
4,
32,
0,
65,
0,
54,
2,
0,
32,
0,
65,
44,
106,
32,
11,
58,
0,
0,
32,
0,
65,
40,
106,
32,
12,
54,
2,
0,
32,
0,
65,
36,
106,
32,
14,
54,
2,
0,
32,
0,
65,
32,
106,
32,
3,
54,
2,
0,
32,
0,
65,
28,
106,
32,
10,
54,
2,
0,
32,
0,
65,
24,
106,
32,
13,
54,
2,
0,
32,
0,
65,
20,
106,
32,
5,
54,
2,
0,
32,
0,
65,
16,
106,
32,
9,
54,
2,
0,
32,
0,
65,
12,
106,
32,
7,
54,
2,
0,
32,
0,
65,
8,
106,
32,
8,
54,
2,
0,
12,
2,
11,
32,
2,
53,
2,
72,
33,
17,
32,
2,
53,
2,
68,
33,
18,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
18,
32,
17,
66,
32,
134,
132,
55,
2,
4,
32,
2,
40,
2,
52,
34,
0,
69,
13,
0,
32,
2,
40,
2,
48,
32,
0,
65,
1,
16,
162,
1,
11,
32,
8,
69,
32,
4,
69,
114,
13,
0,
32,
4,
32,
8,
65,
1,
16,
162,
1,
11,
32,
2,
65,
208,
0,
106,
36,
0,
11,
144,
11,
1,
27,
127,
35,
0,
65,
144,
1,
107,
34,
2,
36,
0,
32,
0,
40,
2,
20,
34,
5,
65,
2,
77,
4,
64,
32,
0,
65,
56,
106,
33,
21,
32,
2,
65,
56,
106,
33,
22,
32,
2,
65,
40,
106,
33,
23,
32,
2,
65,
32,
106,
33,
24,
32,
2,
65,
24,
106,
33,
25,
32,
2,
65,
16,
106,
33,
26,
3,
64,
32,
0,
32,
5,
65,
2,
116,
106,
65,
40,
106,
40,
2,
0,
33,
12,
32,
2,
65,
64,
107,
66,
0,
55,
3,
0,
32,
22,
66,
0,
55,
3,
0,
32,
2,
65,
48,
106,
66,
0,
55,
3,
0,
32,
23,
66,
0,
55,
3,
0,
32,
24,
66,
0,
55,
3,
0,
32,
25,
66,
0,
55,
3,
0,
32,
26,
66,
0,
55,
3,
0,
32,
2,
66,
0,
55,
3,
8,
32,
2,
65,
204,
0,
106,
65,
0,
65,
196,
0,
16,
139,
1,
26,
32,
0,
32,
5,
65,
160,
27,
108,
34,
27,
106,
34,
13,
65,
56,
106,
65,
0,
65,
128,
16,
16,
139,
1,
33,
28,
32,
13,
65,
184,
16,
106,
65,
0,
65,
128,
9,
16,
139,
1,
26,
2,
127,
2,
64,
32,
12,
65,
161,
2,
73,
4,
64,
32,
12,
69,
4,
64,
65,
0,
33,
5,
65,
0,
33,
6,
65,
0,
33,
9,
65,
0,
33,
10,
65,
0,
33,
8,
65,
0,
33,
11,
65,
0,
33,
7,
65,
0,
33,
14,
65,
0,
33,
15,
65,
0,
33,
16,
65,
0,
33,
17,
65,
0,
33,
18,
65,
0,
33,
19,
65,
0,
33,
20,
65,
0,
12,
3,
11,
32,
13,
65,
184,
25,
106,
33,
5,
32,
12,
33,
6,
3,
64,
32,
5,
45,
0,
0,
34,
4,
65,
15,
77,
4,
64,
32,
2,
65,
8,
106,
32,
4,
65,
2,
116,
106,
34,
4,
32,
4,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
5,
65,
1,
106,
33,
5,
32,
6,
65,
127,
106,
34,
6,
13,
1,
12,
3,
11,
11,
32,
4,
65,
16,
65,
156,
185,
192,
0,
16,
103,
0,
11,
32,
12,
65,
160,
2,
65,
140,
185,
192,
0,
16,
104,
0,
11,
32,
2,
40,
2,
68,
33,
5,
32,
2,
40,
2,
64,
33,
6,
32,
2,
40,
2,
56,
33,
9,
32,
2,
40,
2,
52,
33,
10,
32,
2,
40,
2,
48,
33,
8,
32,
2,
40,
2,
44,
33,
11,
32,
2,
40,
2,
40,
33,
7,
32,
2,
40,
2,
36,
33,
14,
32,
2,
40,
2,
32,
33,
15,
32,
2,
40,
2,
28,
33,
16,
32,
2,
40,
2,
24,
33,
17,
32,
2,
40,
2,
20,
33,
18,
32,
2,
40,
2,
16,
33,
19,
32,
2,
40,
2,
12,
33,
20,
32,
2,
40,
2,
60,
11,
33,
4,
32,
2,
32,
20,
65,
1,
116,
34,
3,
54,
2,
84,
32,
2,
32,
3,
32,
19,
106,
65,
1,
116,
34,
3,
54,
2,
88,
32,
2,
32,
3,
32,
18,
106,
65,
1,
116,
34,
3,
54,
2,
92,
32,
2,
32,
3,
32,
17,
106,
65,
1,
116,
34,
3,
54,
2,
96,
32,
2,
32,
3,
32,
16,
106,
65,
1,
116,
34,
3,
54,
2,
100,
32,
2,
32,
3,
32,
15,
106,
65,
1,
116,
34,
3,
54,
2,
104,
32,
2,
32,
3,
32,
14,
106,
65,
1,
116,
34,
3,
54,
2,
108,
32,
2,
32,
3,
32,
7,
106,
65,
1,
116,
34,
3,
54,
2,
112,
32,
2,
32,
3,
32,
11,
106,
65,
1,
116,
34,
3,
54,
2,
116,
32,
2,
32,
3,
32,
8,
106,
65,
1,
116,
34,
3,
54,
2,
120,
32,
2,
32,
3,
32,
10,
106,
65,
1,
116,
34,
3,
54,
2,
124,
32,
2,
32,
3,
32,
9,
106,
65,
1,
116,
34,
3,
54,
2,
128,
1,
32,
2,
32,
3,
32,
4,
106,
65,
1,
116,
34,
3,
54,
2,
132,
1,
32,
2,
32,
3,
32,
6,
106,
65,
1,
116,
34,
3,
54,
2,
136,
1,
32,
2,
32,
3,
32,
5,
106,
65,
1,
116,
34,
3,
54,
2,
140,
1,
2,
64,
2,
127,
65,
27,
32,
3,
65,
128,
128,
4,
70,
32,
5,
32,
6,
32,
4,
32,
9,
32,
10,
32,
8,
32,
11,
32,
7,
32,
14,
32,
15,
32,
16,
32,
17,
32,
18,
32,
19,
32,
20,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
65,
2,
73,
114,
69,
13,
0,
26,
2,
64,
32,
12,
69,
13,
0,
32,
21,
32,
27,
106,
33,
14,
65,
0,
33,
11,
65,
255,
255,
3,
33,
7,
3,
64,
2,
64,
2,
64,
2,
64,
32,
11,
34,
9,
65,
159,
2,
77,
4,
64,
32,
9,
65,
1,
106,
33,
11,
2,
64,
2,
64,
32,
9,
32,
13,
106,
65,
184,
25,
106,
45,
0,
0,
34,
8,
69,
13,
0,
32,
8,
65,
17,
79,
13,
3,
32,
2,
65,
204,
0,
106,
32,
8,
65,
2,
116,
106,
34,
4,
32,
4,
40,
2,
0,
34,
6,
65,
1,
106,
54,
2,
0,
65,
0,
33,
5,
65,
0,
33,
4,
3,
64,
32,
6,
65,
1,
113,
32,
5,
34,
10,
65,
1,
116,
114,
33,
5,
32,
6,
65,
1,
118,
33,
6,
32,
4,
65,
1,
106,
34,
4,
65,
255,
1,
113,
32,
8,
73,
13,
0,
11,
32,
8,
65,
11,
79,
13,
1,
32,
5,
65,
255,
7,
75,
13,
0,
32,
8,
65,
9,
116,
32,
9,
114,
33,
4,
32,
14,
32,
5,
65,
1,
116,
106,
33,
6,
65,
1,
32,
8,
65,
31,
113,
116,
34,
9,
65,
1,
116,
33,
10,
3,
64,
32,
6,
32,
4,
59,
1,
0,
32,
6,
32,
10,
106,
33,
6,
32,
5,
32,
9,
106,
34,
5,
65,
128,
8,
73,
13,
0,
11,
11,
32,
11,
32,
12,
73,
13,
5,
12,
6,
11,
2,
127,
32,
7,
32,
28,
32,
5,
65,
255,
7,
113,
65,
1,
116,
106,
34,
4,
47,
1,
0,
34,
6,
13,
0,
26,
32,
4,
32,
7,
59,
1,
0,
32,
7,
34,
6,
65,
126,
106,
11,
33,
4,
32,
10,
65,
8,
118,
65,
255,
255,
255,
3,
113,
33,
10,
32,
8,
65,
12,
73,
4,
64,
32,
4,
33,
7,
12,
4,
11,
65,
11,
33,
5,
3,
64,
32,
10,
65,
1,
118,
34,
10,
65,
1,
113,
32,
6,
65,
127,
115,
106,
34,
6,
65,
16,
116,
65,
16,
117,
33,
7,
32,
6,
65,
255,
255,
3,
113,
65,
191,
4,
75,
13,
3,
32,
5,
65,
1,
106,
33,
5,
2,
64,
32,
13,
32,
7,
65,
1,
116,
106,
65,
184,
16,
106,
34,
7,
47,
1,
0,
34,
6,
4,
64,
32,
4,
33,
7,
12,
1,
11,
32,
7,
32,
4,
59,
1,
0,
32,
4,
34,
6,
65,
126,
106,
34,
7,
33,
4,
11,
32,
5,
65,
255,
1,
113,
32,
8,
73,
13,
0,
11,
12,
3,
11,
32,
9,
65,
160,
2,
65,
172,
185,
192,
0,
16,
103,
0,
11,
32,
8,
65,
17,
65,
188,
185,
192,
0,
16,
103,
0,
11,
32,
7,
65,
192,
4,
65,
204,
185,
192,
0,
16,
103,
0,
11,
32,
10,
65,
1,
118,
65,
1,
113,
32,
6,
65,
127,
115,
106,
34,
6,
65,
16,
116,
65,
16,
117,
33,
4,
32,
6,
65,
255,
255,
3,
113,
65,
192,
4,
73,
4,
64,
32,
13,
32,
4,
65,
1,
116,
106,
65,
184,
16,
106,
32,
9,
59,
1,
0,
32,
11,
32,
12,
73,
13,
1,
12,
2,
11,
11,
32,
4,
65,
192,
4,
65,
220,
185,
192,
0,
16,
103,
0,
11,
32,
0,
40,
2,
20,
34,
4,
65,
2,
75,
13,
1,
2,
64,
2,
64,
32,
4,
65,
1,
107,
14,
2,
3,
0,
1,
11,
32,
1,
65,
0,
54,
2,
12,
65,
10,
12,
1,
11,
32,
1,
65,
0,
54,
2,
12,
65,
12,
11,
32,
2,
65,
144,
1,
106,
36,
0,
65,
8,
116,
65,
1,
114,
15,
11,
32,
0,
32,
4,
65,
127,
106,
34,
5,
54,
2,
20,
32,
5,
65,
3,
73,
13,
0,
11,
11,
32,
5,
65,
3,
65,
252,
184,
192,
0,
16,
103,
0,
11,
230,
10,
2,
18,
127,
5,
126,
35,
0,
65,
160,
1,
107,
34,
4,
36,
0,
2,
64,
2,
64,
2,
64,
2,
64,
32,
3,
4,
64,
32,
1,
65,
208,
0,
106,
33,
16,
32,
1,
65,
232,
0,
106,
33,
11,
32,
1,
65,
140,
1,
106,
33,
17,
32,
4,
65,
16,
106,
65,
4,
114,
33,
18,
32,
4,
65,
252,
0,
106,
33,
12,
32,
1,
65,
216,
0,
106,
33,
14,
32,
1,
65,
148,
1,
106,
33,
10,
32,
1,
65,
252,
0,
106,
33,
19,
32,
1,
65,
240,
0,
106,
33,
20,
32,
1,
65,
228,
0,
106,
33,
21,
3,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
1,
40,
2,
92,
65,
1,
70,
4,
64,
32,
4,
65,
240,
0,
106,
32,
1,
32,
2,
32,
3,
16,
37,
32,
4,
40,
2,
120,
33,
6,
32,
4,
40,
2,
116,
33,
5,
32,
4,
40,
2,
112,
34,
7,
65,
1,
70,
13,
3,
32,
7,
69,
32,
5,
65,
255,
1,
113,
65,
2,
73,
114,
69,
4,
64,
32,
6,
40,
2,
0,
32,
6,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
6,
40,
2,
4,
34,
7,
40,
2,
4,
34,
8,
4,
64,
32,
6,
40,
2,
0,
32,
8,
32,
7,
40,
2,
8,
16,
162,
1,
11,
32,
6,
65,
12,
65,
4,
16,
162,
1,
11,
32,
6,
65,
255,
1,
113,
65,
2,
71,
32,
3,
32,
5,
77,
114,
69,
4,
64,
32,
14,
40,
2,
0,
34,
8,
65,
7,
77,
13,
2,
11,
32,
4,
65,
0,
54,
2,
16,
32,
4,
32,
5,
54,
2,
20,
12,
2,
11,
32,
4,
65,
0,
54,
2,
52,
32,
4,
65,
0,
58,
0,
48,
32,
4,
32,
3,
54,
2,
44,
32,
4,
32,
2,
54,
2,
40,
32,
4,
32,
10,
40,
2,
0,
54,
2,
36,
32,
4,
32,
1,
40,
2,
140,
1,
54,
2,
32,
32,
4,
65,
240,
0,
106,
32,
4,
65,
32,
106,
16,
9,
32,
4,
65,
232,
0,
106,
32,
12,
65,
32,
106,
40,
2,
0,
34,
5,
54,
2,
0,
32,
4,
65,
224,
0,
106,
32,
12,
65,
24,
106,
41,
2,
0,
34,
23,
55,
3,
0,
32,
4,
65,
216,
0,
106,
32,
12,
65,
16,
106,
41,
2,
0,
34,
24,
55,
3,
0,
32,
4,
65,
208,
0,
106,
32,
12,
65,
8,
106,
41,
2,
0,
34,
25,
55,
3,
0,
32,
4,
32,
12,
41,
2,
0,
34,
26,
55,
3,
72,
32,
4,
41,
2,
116,
33,
22,
32,
4,
40,
2,
112,
32,
4,
40,
2,
52,
33,
7,
32,
4,
65,
64,
107,
34,
8,
32,
5,
54,
2,
0,
32,
4,
65,
56,
106,
34,
5,
32,
23,
55,
3,
0,
32,
4,
65,
48,
106,
34,
15,
32,
24,
55,
3,
0,
32,
4,
65,
40,
106,
34,
9,
32,
25,
55,
3,
0,
32,
4,
32,
26,
55,
3,
32,
69,
4,
64,
32,
4,
65,
144,
1,
106,
34,
6,
32,
8,
40,
2,
0,
54,
2,
0,
32,
4,
65,
136,
1,
106,
34,
8,
32,
5,
41,
3,
0,
55,
3,
0,
32,
4,
65,
128,
1,
106,
34,
5,
32,
15,
41,
3,
0,
55,
3,
0,
32,
4,
65,
248,
0,
106,
34,
15,
32,
9,
41,
3,
0,
55,
3,
0,
32,
4,
32,
4,
41,
3,
32,
55,
3,
112,
2,
64,
32,
1,
40,
2,
92,
69,
13,
0,
2,
64,
32,
1,
40,
2,
96,
34,
9,
69,
13,
0,
32,
21,
40,
2,
0,
34,
13,
69,
13,
0,
32,
9,
32,
13,
65,
1,
16,
162,
1,
11,
2,
64,
32,
1,
40,
2,
108,
34,
9,
69,
13,
0,
32,
20,
40,
2,
0,
34,
13,
69,
13,
0,
32,
9,
32,
13,
65,
1,
16,
162,
1,
11,
32,
1,
40,
2,
120,
34,
9,
69,
13,
0,
32,
19,
40,
2,
0,
34,
13,
69,
13,
0,
32,
9,
32,
13,
65,
1,
16,
162,
1,
11,
32,
1,
32,
22,
55,
2,
96,
32,
1,
65,
1,
54,
2,
92,
32,
11,
32,
4,
41,
3,
112,
55,
2,
0,
32,
11,
65,
8,
106,
32,
15,
41,
3,
0,
55,
2,
0,
32,
11,
65,
16,
106,
32,
5,
41,
3,
0,
55,
2,
0,
32,
11,
65,
24,
106,
32,
8,
41,
3,
0,
55,
2,
0,
32,
11,
65,
32,
106,
32,
6,
40,
2,
0,
54,
2,
0,
32,
10,
40,
2,
0,
33,
5,
32,
10,
65,
0,
54,
2,
0,
32,
4,
65,
0,
54,
2,
16,
32,
4,
32,
7,
32,
5,
107,
34,
5,
54,
2,
20,
12,
2,
11,
32,
4,
32,
22,
55,
3,
112,
32,
4,
65,
240,
0,
106,
16,
141,
1,
65,
255,
1,
113,
65,
17,
71,
4,
64,
32,
4,
32,
4,
41,
3,
112,
55,
2,
20,
32,
4,
65,
1,
54,
2,
16,
12,
4,
11,
32,
17,
32,
10,
40,
2,
0,
32,
3,
16,
85,
32,
10,
40,
2,
0,
34,
5,
32,
1,
40,
2,
140,
1,
106,
32,
3,
32,
2,
32,
3,
16,
80,
32,
10,
32,
3,
32,
5,
106,
54,
2,
0,
32,
4,
32,
3,
54,
2,
20,
32,
4,
65,
0,
54,
2,
16,
32,
4,
45,
0,
112,
65,
1,
77,
4,
64,
32,
3,
33,
5,
12,
2,
11,
32,
4,
40,
2,
116,
34,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
5,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
4,
40,
2,
116,
65,
12,
65,
4,
16,
162,
1,
32,
4,
40,
2,
16,
65,
1,
70,
13,
3,
32,
4,
40,
2,
20,
33,
5,
12,
1,
11,
65,
8,
32,
8,
107,
34,
6,
32,
3,
32,
5,
107,
34,
7,
32,
7,
32,
6,
75,
27,
34,
7,
32,
5,
106,
34,
6,
32,
7,
73,
13,
6,
32,
6,
32,
3,
75,
13,
7,
32,
16,
32,
8,
32,
7,
16,
85,
32,
14,
40,
2,
0,
34,
8,
32,
1,
40,
2,
80,
106,
32,
7,
32,
2,
32,
5,
106,
32,
7,
16,
80,
32,
14,
32,
7,
32,
8,
106,
54,
2,
0,
32,
4,
32,
6,
54,
2,
20,
32,
4,
65,
0,
54,
2,
16,
32,
6,
33,
5,
11,
32,
5,
69,
4,
64,
32,
4,
65,
8,
106,
65,
252,
128,
192,
0,
65,
28,
16,
78,
32,
4,
65,
240,
0,
106,
65,
14,
32,
4,
40,
2,
8,
32,
4,
40,
2,
12,
16,
94,
32,
0,
32,
4,
41,
3,
112,
55,
2,
0,
12,
9,
11,
32,
3,
32,
5,
73,
13,
7,
32,
2,
32,
5,
106,
33,
2,
32,
3,
32,
5,
107,
33,
3,
12,
2,
11,
32,
4,
65,
1,
54,
2,
16,
32,
4,
32,
5,
173,
32,
6,
173,
66,
32,
134,
132,
55,
2,
20,
11,
32,
18,
16,
141,
1,
65,
255,
1,
113,
65,
15,
71,
4,
64,
32,
0,
32,
4,
41,
2,
20,
55,
2,
0,
12,
7,
11,
32,
4,
40,
2,
16,
69,
13,
0,
32,
4,
45,
0,
20,
65,
2,
73,
13,
0,
32,
4,
40,
2,
24,
34,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
5,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
4,
40,
2,
24,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
13,
0,
11,
11,
32,
0,
65,
3,
58,
0,
0,
12,
3,
11,
32,
5,
32,
6,
65,
132,
130,
192,
0,
16,
105,
0,
11,
32,
6,
32,
3,
65,
132,
130,
192,
0,
16,
104,
0,
11,
32,
5,
32,
3,
65,
236,
128,
192,
0,
16,
105,
0,
11,
32,
4,
65,
160,
1,
106,
36,
0,
11,
143,
10,
2,
12,
127,
1,
126,
35,
0,
65,
32,
107,
34,
8,
36,
0,
65,
1,
33,
10,
2,
64,
2,
64,
32,
2,
40,
2,
24,
65,
34,
32,
2,
65,
28,
106,
40,
2,
0,
40,
2,
16,
17,
0,
0,
13,
0,
2,
64,
32,
1,
69,
4,
64,
12,
1,
11,
32,
0,
32,
1,
106,
33,
12,
32,
0,
33,
6,
3,
64,
2,
64,
32,
6,
33,
14,
32,
6,
65,
1,
106,
33,
5,
2,
64,
2,
127,
32,
6,
44,
0,
0,
34,
7,
65,
127,
76,
4,
64,
2,
127,
32,
5,
32,
12,
70,
4,
64,
65,
0,
33,
3,
32,
12,
12,
1,
11,
32,
6,
45,
0,
1,
65,
63,
113,
33,
3,
32,
6,
65,
2,
106,
34,
5,
11,
33,
6,
32,
7,
65,
31,
113,
33,
13,
32,
3,
32,
13,
65,
6,
116,
114,
32,
7,
65,
255,
1,
113,
34,
11,
65,
223,
1,
77,
13,
1,
26,
2,
127,
32,
6,
32,
12,
70,
4,
64,
65,
0,
33,
10,
32,
12,
12,
1,
11,
32,
6,
45,
0,
0,
65,
63,
113,
33,
10,
32,
6,
65,
1,
106,
34,
5,
11,
33,
7,
32,
10,
32,
3,
65,
6,
116,
114,
33,
3,
32,
3,
32,
13,
65,
12,
116,
114,
32,
11,
65,
240,
1,
73,
13,
1,
26,
2,
127,
32,
7,
32,
12,
70,
4,
64,
32,
5,
33,
6,
65,
0,
12,
1,
11,
32,
7,
65,
1,
106,
33,
6,
32,
7,
45,
0,
0,
65,
63,
113,
11,
32,
13,
65,
18,
116,
65,
128,
128,
240,
0,
113,
32,
3,
65,
6,
116,
114,
114,
34,
3,
65,
128,
128,
196,
0,
71,
13,
2,
12,
3,
11,
32,
7,
65,
255,
1,
113,
11,
33,
3,
32,
5,
33,
6,
11,
65,
2,
33,
5,
2,
64,
2,
64,
2,
64,
2,
64,
32,
3,
65,
119,
106,
34,
11,
65,
30,
75,
4,
64,
32,
3,
65,
220,
0,
71,
13,
1,
12,
2,
11,
65,
244,
0,
33,
7,
2,
64,
2,
64,
32,
11,
65,
1,
107,
14,
30,
1,
2,
2,
0,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
2,
2,
2,
2,
3,
4,
11,
65,
242,
0,
33,
7,
12,
3,
11,
65,
238,
0,
33,
7,
12,
2,
11,
2,
64,
32,
3,
16,
38,
13,
0,
2,
64,
32,
3,
65,
128,
128,
4,
79,
4,
64,
32,
3,
65,
128,
128,
8,
73,
13,
1,
32,
3,
65,
144,
252,
71,
106,
65,
144,
252,
11,
73,
32,
3,
65,
181,
217,
115,
106,
65,
181,
219,
43,
73,
114,
32,
3,
65,
226,
139,
116,
106,
65,
226,
11,
73,
32,
3,
65,
159,
168,
116,
106,
65,
159,
24,
73,
114,
114,
32,
3,
65,
254,
255,
255,
0,
113,
65,
158,
240,
10,
70,
32,
3,
65,
222,
226,
116,
106,
65,
14,
73,
114,
32,
3,
65,
162,
178,
117,
106,
65,
34,
73,
32,
3,
65,
203,
145,
117,
106,
65,
10,
77,
114,
114,
114,
13,
2,
12,
5,
11,
32,
3,
65,
160,
213,
193,
0,
65,
41,
65,
242,
213,
193,
0,
65,
162,
2,
65,
148,
216,
193,
0,
65,
181,
2,
16,
41,
69,
13,
1,
12,
4,
11,
32,
3,
65,
201,
218,
193,
0,
65,
38,
65,
149,
219,
193,
0,
65,
175,
1,
65,
196,
220,
193,
0,
65,
163,
3,
16,
41,
13,
3,
11,
32,
3,
65,
1,
114,
103,
65,
2,
118,
65,
7,
115,
173,
66,
128,
128,
128,
128,
208,
0,
132,
33,
15,
65,
3,
33,
5,
11,
32,
3,
33,
7,
11,
32,
8,
32,
1,
54,
2,
4,
32,
8,
32,
0,
54,
2,
0,
32,
8,
32,
4,
54,
2,
8,
32,
8,
32,
9,
54,
2,
12,
2,
64,
2,
64,
32,
9,
32,
4,
73,
13,
0,
32,
4,
69,
32,
1,
32,
4,
70,
114,
69,
4,
64,
32,
4,
32,
1,
79,
13,
1,
32,
0,
32,
4,
106,
44,
0,
0,
65,
191,
127,
76,
13,
1,
11,
32,
9,
69,
32,
1,
32,
9,
70,
114,
69,
4,
64,
32,
9,
32,
1,
79,
13,
1,
32,
0,
32,
9,
106,
44,
0,
0,
65,
191,
127,
76,
13,
1,
11,
32,
2,
40,
2,
24,
32,
0,
32,
4,
106,
32,
9,
32,
4,
107,
32,
2,
40,
2,
28,
40,
2,
12,
17,
2,
0,
69,
13,
1,
65,
1,
33,
10,
12,
6,
11,
32,
8,
32,
8,
65,
12,
106,
54,
2,
24,
32,
8,
32,
8,
65,
8,
106,
54,
2,
20,
32,
8,
32,
8,
54,
2,
16,
32,
8,
65,
16,
106,
16,
146,
1,
0,
11,
3,
64,
32,
5,
33,
11,
65,
1,
33,
10,
65,
220,
0,
33,
4,
65,
1,
33,
5,
2,
64,
2,
126,
2,
64,
2,
64,
2,
64,
2,
64,
32,
11,
65,
1,
107,
14,
3,
1,
5,
0,
2,
11,
2,
64,
2,
64,
2,
64,
2,
64,
32,
15,
66,
32,
136,
167,
65,
255,
1,
113,
65,
1,
107,
14,
5,
3,
2,
1,
0,
6,
5,
11,
32,
15,
66,
255,
255,
255,
255,
143,
96,
131,
66,
128,
128,
128,
128,
48,
132,
33,
15,
65,
3,
33,
5,
65,
245,
0,
33,
4,
12,
7,
11,
32,
15,
66,
255,
255,
255,
255,
143,
96,
131,
66,
128,
128,
128,
128,
32,
132,
33,
15,
65,
3,
33,
5,
65,
251,
0,
33,
4,
12,
6,
11,
32,
7,
32,
15,
167,
34,
5,
65,
2,
116,
65,
28,
113,
118,
65,
15,
113,
34,
11,
65,
48,
114,
32,
11,
65,
215,
0,
106,
32,
11,
65,
10,
73,
27,
33,
4,
32,
15,
66,
127,
124,
66,
255,
255,
255,
255,
15,
131,
32,
15,
66,
128,
128,
128,
128,
112,
131,
132,
32,
5,
13,
4,
26,
32,
15,
66,
255,
255,
255,
255,
143,
96,
131,
66,
128,
128,
128,
128,
16,
132,
12,
4,
11,
32,
15,
66,
255,
255,
255,
255,
143,
96,
131,
33,
15,
65,
3,
33,
5,
65,
253,
0,
33,
4,
12,
4,
11,
65,
0,
33,
5,
32,
7,
33,
4,
12,
3,
11,
2,
127,
65,
1,
32,
3,
65,
128,
1,
73,
13,
0,
26,
65,
2,
32,
3,
65,
128,
16,
73,
13,
0,
26,
65,
3,
65,
4,
32,
3,
65,
128,
128,
4,
73,
27,
11,
32,
9,
106,
33,
4,
12,
4,
11,
32,
15,
66,
255,
255,
255,
255,
143,
96,
131,
66,
128,
128,
128,
128,
192,
0,
132,
11,
33,
15,
65,
3,
33,
5,
11,
32,
2,
40,
2,
24,
32,
4,
32,
2,
40,
2,
28,
40,
2,
16,
17,
0,
0,
69,
13,
0,
11,
12,
4,
11,
32,
9,
32,
14,
107,
32,
6,
106,
33,
9,
32,
6,
32,
12,
71,
13,
1,
11,
11,
32,
4,
69,
32,
1,
32,
4,
70,
114,
13,
0,
32,
4,
32,
1,
79,
13,
2,
32,
0,
32,
4,
106,
44,
0,
0,
65,
191,
127,
76,
13,
2,
11,
65,
1,
33,
10,
32,
2,
40,
2,
24,
32,
0,
32,
4,
106,
32,
1,
32,
4,
107,
32,
2,
40,
2,
28,
40,
2,
12,
17,
2,
0,
13,
0,
32,
2,
40,
2,
24,
65,
34,
32,
2,
40,
2,
28,
40,
2,
16,
17,
0,
0,
33,
10,
11,
32,
8,
65,
32,
106,
36,
0,
32,
10,
15,
11,
32,
0,
32,
1,
32,
4,
32,
1,
65,
240,
210,
193,
0,
16,
14,
0,
11,
164,
9,
2,
5,
127,
1,
126,
35,
0,
65,
240,
3,
107,
34,
3,
36,
0,
32,
3,
65,
216,
2,
106,
16,
127,
32,
3,
65,
248,
2,
106,
34,
4,
65,
0,
54,
2,
0,
32,
3,
66,
1,
55,
3,
240,
2,
32,
3,
65,
168,
1,
106,
65,
0,
16,
144,
1,
32,
3,
65,
32,
106,
32,
4,
41,
3,
0,
55,
3,
0,
32,
3,
65,
24,
106,
32,
3,
41,
3,
240,
2,
55,
3,
0,
32,
3,
65,
16,
106,
32,
3,
65,
232,
2,
106,
41,
3,
0,
55,
3,
0,
32,
3,
65,
8,
106,
32,
3,
65,
224,
2,
106,
41,
3,
0,
55,
3,
0,
32,
3,
32,
3,
41,
3,
216,
2,
55,
3,
0,
2,
64,
2,
64,
2,
64,
65,
128,
128,
2,
65,
1,
16,
156,
1,
34,
4,
4,
64,
32,
3,
65,
196,
0,
106,
66,
128,
128,
2,
55,
2,
0,
32,
3,
65,
56,
106,
32,
3,
65,
184,
1,
106,
41,
3,
0,
55,
3,
0,
32,
3,
65,
48,
106,
32,
3,
65,
176,
1,
106,
41,
3,
0,
55,
3,
0,
32,
3,
32,
3,
41,
3,
168,
1,
55,
3,
40,
32,
3,
32,
4,
54,
2,
64,
65,
8,
65,
1,
16,
156,
1,
34,
4,
69,
13,
1,
32,
3,
65,
148,
1,
106,
65,
0,
54,
2,
0,
32,
3,
65,
212,
0,
106,
66,
8,
55,
2,
0,
32,
3,
66,
1,
55,
2,
140,
1,
32,
3,
65,
0,
54,
2,
92,
32,
3,
32,
4,
54,
2,
80,
32,
3,
65,
200,
2,
106,
32,
3,
32,
1,
32,
2,
16,
11,
32,
3,
65,
168,
1,
106,
32,
3,
65,
152,
1,
16,
125,
26,
2,
127,
2,
64,
2,
64,
32,
3,
45,
0,
200,
2,
65,
3,
71,
4,
64,
32,
3,
32,
3,
41,
3,
200,
2,
34,
8,
55,
2,
156,
1,
32,
3,
65,
1,
54,
2,
152,
1,
2,
64,
32,
3,
40,
2,
192,
1,
69,
13,
0,
32,
3,
65,
216,
2,
106,
32,
3,
65,
168,
1,
106,
16,
72,
32,
3,
45,
0,
216,
2,
65,
2,
70,
4,
64,
32,
3,
40,
2,
220,
2,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
5,
40,
2,
4,
34,
6,
4,
64,
32,
4,
40,
2,
0,
32,
6,
32,
5,
40,
2,
8,
16,
162,
1,
11,
32,
4,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
40,
2,
192,
1,
34,
4,
69,
13,
0,
32,
3,
40,
2,
196,
1,
34,
5,
69,
13,
0,
32,
4,
32,
5,
65,
1,
16,
162,
1,
11,
32,
3,
65,
224,
1,
106,
40,
2,
0,
65,
244,
213,
2,
65,
4,
16,
162,
1,
32,
3,
65,
236,
1,
106,
40,
2,
0,
34,
4,
4,
64,
32,
3,
40,
2,
232,
1,
32,
4,
65,
1,
16,
162,
1,
11,
32,
3,
65,
252,
1,
106,
40,
2,
0,
34,
4,
4,
64,
32,
3,
40,
2,
248,
1,
32,
4,
65,
1,
16,
162,
1,
11,
2,
64,
32,
3,
40,
2,
132,
2,
69,
13,
0,
2,
64,
32,
3,
65,
136,
2,
106,
40,
2,
0,
34,
4,
69,
13,
0,
32,
3,
65,
140,
2,
106,
40,
2,
0,
34,
5,
69,
13,
0,
32,
4,
32,
5,
65,
1,
16,
162,
1,
11,
2,
64,
32,
3,
65,
148,
2,
106,
40,
2,
0,
34,
4,
69,
13,
0,
32,
3,
65,
152,
2,
106,
40,
2,
0,
34,
5,
69,
13,
0,
32,
4,
32,
5,
65,
1,
16,
162,
1,
11,
32,
3,
65,
160,
2,
106,
40,
2,
0,
34,
4,
69,
13,
0,
32,
3,
65,
164,
2,
106,
40,
2,
0,
34,
5,
69,
13,
0,
32,
4,
32,
5,
65,
1,
16,
162,
1,
11,
32,
3,
65,
184,
2,
106,
40,
2,
0,
34,
4,
69,
13,
1,
32,
3,
40,
2,
180,
2,
32,
4,
65,
1,
16,
162,
1,
12,
1,
11,
32,
3,
65,
216,
2,
106,
32,
3,
65,
168,
1,
106,
65,
152,
1,
16,
125,
26,
32,
3,
65,
152,
1,
106,
32,
3,
65,
216,
2,
106,
16,
35,
32,
3,
40,
2,
152,
1,
65,
1,
71,
13,
1,
32,
3,
41,
2,
156,
1,
33,
8,
11,
32,
3,
32,
8,
55,
3,
192,
2,
32,
3,
65,
192,
2,
106,
16,
141,
1,
33,
4,
32,
3,
65,
180,
1,
106,
65,
9,
54,
2,
0,
32,
3,
65,
236,
2,
106,
65,
2,
54,
2,
0,
32,
3,
65,
10,
54,
2,
172,
1,
32,
3,
66,
2,
55,
2,
220,
2,
32,
3,
65,
160,
136,
192,
0,
54,
2,
216,
2,
32,
3,
32,
4,
58,
0,
215,
2,
32,
3,
32,
3,
65,
192,
2,
106,
54,
2,
176,
1,
32,
3,
32,
3,
65,
215,
2,
106,
54,
2,
168,
1,
32,
3,
32,
3,
65,
168,
1,
106,
54,
2,
232,
2,
32,
3,
65,
200,
2,
106,
32,
3,
65,
216,
2,
106,
16,
45,
32,
3,
40,
2,
200,
2,
34,
4,
32,
3,
40,
2,
208,
2,
16,
0,
33,
5,
32,
3,
40,
2,
204,
2,
34,
6,
4,
64,
32,
4,
32,
6,
65,
1,
16,
162,
1,
11,
32,
3,
45,
0,
192,
2,
65,
2,
79,
4,
64,
32,
3,
40,
2,
196,
2,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
4,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
3,
40,
2,
196,
2,
65,
12,
65,
4,
16,
162,
1,
11,
65,
1,
12,
1,
11,
32,
3,
65,
160,
1,
106,
41,
3,
0,
33,
8,
32,
3,
40,
2,
156,
1,
33,
5,
65,
0,
11,
32,
2,
4,
64,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
13,
2,
2,
64,
32,
8,
167,
34,
1,
32,
8,
66,
32,
136,
167,
34,
2,
70,
4,
64,
32,
5,
33,
4,
32,
1,
33,
2,
12,
1,
11,
2,
64,
32,
1,
32,
2,
79,
4,
64,
32,
1,
13,
1,
32,
5,
33,
4,
12,
2,
11,
65,
248,
134,
192,
0,
65,
36,
65,
140,
136,
192,
0,
16,
119,
0,
11,
32,
2,
69,
4,
64,
65,
1,
33,
4,
32,
5,
32,
1,
65,
1,
16,
162,
1,
12,
1,
11,
32,
5,
32,
1,
32,
2,
16,
151,
1,
34,
4,
69,
13,
4,
11,
32,
0,
32,
2,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
32,
3,
65,
240,
3,
106,
36,
0,
15,
11,
65,
128,
128,
2,
16,
168,
1,
0,
11,
65,
8,
16,
168,
1,
0,
11,
32,
5,
16,
174,
1,
0,
11,
32,
2,
65,
1,
16,
171,
1,
0,
11,
148,
8,
1,
6,
127,
35,
0,
65,
240,
0,
107,
34,
5,
36,
0,
32,
5,
32,
3,
54,
2,
12,
32,
5,
32,
2,
54,
2,
8,
65,
1,
33,
8,
32,
1,
33,
7,
2,
64,
32,
1,
65,
129,
2,
73,
13,
0,
65,
0,
32,
1,
107,
33,
9,
65,
128,
2,
33,
6,
3,
64,
2,
64,
32,
6,
32,
1,
79,
13,
0,
65,
0,
33,
8,
32,
0,
32,
6,
106,
44,
0,
0,
65,
191,
127,
76,
13,
0,
32,
6,
33,
7,
12,
2,
11,
32,
6,
65,
127,
106,
33,
7,
65,
0,
33,
8,
32,
6,
65,
1,
70,
13,
1,
32,
6,
32,
9,
106,
32,
7,
33,
6,
65,
1,
71,
13,
0,
11,
11,
32,
5,
32,
7,
54,
2,
20,
32,
5,
32,
0,
54,
2,
16,
32,
5,
65,
0,
65,
5,
32,
8,
27,
54,
2,
28,
32,
5,
65,
228,
204,
193,
0,
65,
128,
211,
193,
0,
32,
8,
27,
54,
2,
24,
2,
64,
2,
64,
2,
64,
2,
64,
32,
2,
32,
1,
75,
34,
7,
32,
3,
32,
1,
75,
114,
69,
4,
64,
32,
2,
32,
3,
75,
13,
1,
2,
64,
32,
2,
69,
32,
1,
32,
2,
70,
114,
69,
4,
64,
32,
1,
32,
2,
77,
13,
1,
32,
0,
32,
2,
106,
44,
0,
0,
65,
64,
72,
13,
1,
11,
32,
3,
33,
2,
11,
32,
5,
32,
2,
54,
2,
32,
32,
2,
69,
32,
1,
32,
2,
70,
114,
13,
2,
32,
1,
65,
1,
106,
33,
3,
3,
64,
32,
2,
32,
1,
73,
4,
64,
32,
0,
32,
2,
106,
44,
0,
0,
65,
64,
78,
13,
4,
11,
32,
2,
65,
127,
106,
33,
8,
32,
2,
65,
1,
70,
13,
4,
32,
2,
32,
3,
70,
32,
8,
33,
2,
69,
13,
0,
11,
12,
3,
11,
32,
5,
32,
2,
32,
3,
32,
7,
27,
54,
2,
40,
32,
5,
65,
196,
0,
106,
65,
3,
54,
2,
0,
32,
5,
65,
220,
0,
106,
65,
61,
54,
2,
0,
32,
5,
65,
212,
0,
106,
65,
61,
54,
2,
0,
32,
5,
66,
3,
55,
2,
52,
32,
5,
65,
168,
211,
193,
0,
54,
2,
48,
32,
5,
65,
55,
54,
2,
76,
32,
5,
32,
5,
65,
200,
0,
106,
54,
2,
64,
32,
5,
32,
5,
65,
24,
106,
54,
2,
88,
32,
5,
32,
5,
65,
16,
106,
54,
2,
80,
32,
5,
32,
5,
65,
40,
106,
54,
2,
72,
12,
3,
11,
32,
5,
65,
228,
0,
106,
65,
61,
54,
2,
0,
32,
5,
65,
220,
0,
106,
65,
61,
54,
2,
0,
32,
5,
65,
212,
0,
106,
65,
55,
54,
2,
0,
32,
5,
65,
196,
0,
106,
65,
4,
54,
2,
0,
32,
5,
66,
4,
55,
2,
52,
32,
5,
65,
228,
211,
193,
0,
54,
2,
48,
32,
5,
65,
55,
54,
2,
76,
32,
5,
32,
5,
65,
200,
0,
106,
54,
2,
64,
32,
5,
32,
5,
65,
24,
106,
54,
2,
96,
32,
5,
32,
5,
65,
16,
106,
54,
2,
88,
32,
5,
32,
5,
65,
12,
106,
54,
2,
80,
32,
5,
32,
5,
65,
8,
106,
54,
2,
72,
12,
2,
11,
32,
2,
33,
8,
11,
2,
64,
32,
1,
32,
8,
70,
13,
0,
65,
1,
33,
6,
2,
64,
2,
64,
2,
64,
32,
0,
32,
8,
106,
34,
3,
44,
0,
0,
34,
2,
65,
127,
76,
4,
64,
65,
0,
33,
6,
32,
0,
32,
1,
106,
34,
1,
33,
7,
32,
1,
32,
3,
65,
1,
106,
71,
4,
64,
32,
3,
45,
0,
1,
65,
63,
113,
33,
6,
32,
3,
65,
2,
106,
33,
7,
11,
32,
2,
65,
31,
113,
33,
9,
32,
2,
65,
255,
1,
113,
65,
223,
1,
75,
13,
1,
32,
6,
32,
9,
65,
6,
116,
114,
33,
2,
12,
2,
11,
32,
5,
32,
2,
65,
255,
1,
113,
54,
2,
36,
32,
5,
65,
40,
106,
33,
1,
12,
2,
11,
65,
0,
33,
0,
32,
1,
33,
3,
32,
1,
32,
7,
71,
4,
127,
32,
7,
65,
1,
106,
33,
3,
32,
7,
45,
0,
0,
65,
63,
113,
5,
32,
0,
11,
32,
6,
65,
6,
116,
114,
33,
0,
32,
2,
65,
255,
1,
113,
65,
240,
1,
73,
4,
64,
32,
0,
32,
9,
65,
12,
116,
114,
33,
2,
12,
1,
11,
65,
0,
33,
2,
32,
1,
32,
3,
71,
4,
127,
32,
3,
45,
0,
0,
65,
63,
113,
5,
32,
2,
11,
32,
9,
65,
18,
116,
65,
128,
128,
240,
0,
113,
32,
0,
65,
6,
116,
114,
114,
34,
2,
65,
128,
128,
196,
0,
70,
13,
2,
11,
32,
5,
32,
2,
54,
2,
36,
65,
1,
33,
6,
32,
5,
65,
40,
106,
33,
1,
32,
2,
65,
128,
1,
73,
13,
0,
65,
2,
33,
6,
32,
2,
65,
128,
16,
73,
13,
0,
65,
3,
65,
4,
32,
2,
65,
128,
128,
4,
73,
27,
33,
6,
11,
32,
5,
32,
8,
54,
2,
40,
32,
5,
32,
6,
32,
8,
106,
54,
2,
44,
32,
5,
65,
196,
0,
106,
65,
5,
54,
2,
0,
32,
5,
65,
236,
0,
106,
65,
61,
54,
2,
0,
32,
5,
65,
228,
0,
106,
65,
61,
54,
2,
0,
32,
5,
65,
220,
0,
106,
65,
62,
54,
2,
0,
32,
5,
65,
212,
0,
106,
65,
63,
54,
2,
0,
32,
5,
66,
5,
55,
2,
52,
32,
5,
65,
184,
212,
193,
0,
54,
2,
48,
32,
5,
32,
1,
54,
2,
88,
32,
5,
65,
55,
54,
2,
76,
32,
5,
32,
5,
65,
200,
0,
106,
54,
2,
64,
32,
5,
32,
5,
65,
24,
106,
54,
2,
104,
32,
5,
32,
5,
65,
16,
106,
54,
2,
96,
32,
5,
32,
5,
65,
36,
106,
54,
2,
80,
32,
5,
32,
5,
65,
32,
106,
54,
2,
72,
12,
1,
11,
65,
240,
204,
193,
0,
65,
43,
32,
4,
16,
119,
0,
11,
32,
5,
65,
48,
106,
32,
4,
16,
137,
1,
0,
11,
227,
7,
2,
11,
127,
2,
126,
32,
1,
65,
33,
106,
45,
0,
0,
33,
11,
32,
1,
65,
24,
106,
40,
2,
0,
33,
8,
32,
1,
65,
16,
106,
40,
2,
0,
33,
6,
32,
1,
40,
2,
28,
33,
9,
32,
1,
45,
0,
32,
33,
12,
32,
1,
40,
2,
20,
33,
3,
32,
1,
40,
2,
12,
33,
5,
32,
1,
41,
2,
4,
33,
14,
32,
1,
40,
2,
0,
33,
7,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
65,
10,
16,
147,
1,
34,
1,
4,
64,
32,
0,
32,
1,
54,
2,
0,
32,
0,
65,
4,
106,
34,
10,
66,
138,
128,
128,
128,
160,
1,
55,
2,
0,
2,
64,
32,
7,
69,
13,
0,
32,
0,
65,
10,
65,
1,
16,
85,
32,
0,
40,
2,
0,
32,
0,
65,
8,
106,
34,
1,
40,
2,
0,
106,
32,
14,
66,
32,
136,
34,
15,
60,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
34,
4,
54,
2,
0,
32,
10,
40,
2,
0,
32,
4,
70,
4,
127,
32,
0,
32,
4,
65,
1,
16,
85,
32,
1,
40,
2,
0,
5,
32,
4,
11,
32,
0,
40,
2,
0,
106,
32,
14,
66,
40,
136,
60,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
34,
4,
54,
2,
0,
32,
0,
32,
4,
32,
15,
167,
34,
4,
16,
85,
32,
0,
40,
2,
0,
32,
1,
40,
2,
0,
106,
32,
7,
32,
4,
16,
125,
26,
32,
1,
32,
1,
40,
2,
0,
32,
4,
106,
54,
2,
0,
65,
4,
33,
4,
32,
14,
167,
34,
1,
69,
13,
0,
32,
7,
32,
1,
65,
1,
16,
162,
1,
11,
2,
64,
32,
5,
69,
13,
0,
32,
0,
32,
0,
65,
8,
106,
34,
1,
40,
2,
0,
32,
6,
16,
85,
32,
4,
65,
8,
114,
33,
4,
32,
6,
69,
4,
64,
32,
5,
65,
0,
58,
0,
0,
12,
1,
11,
32,
5,
32,
6,
106,
33,
7,
32,
1,
40,
2,
0,
34,
10,
32,
0,
40,
2,
0,
106,
33,
13,
65,
0,
33,
1,
3,
64,
32,
1,
32,
13,
106,
32,
1,
32,
5,
106,
45,
0,
0,
58,
0,
0,
32,
6,
32,
1,
65,
1,
106,
34,
1,
71,
13,
0,
11,
32,
0,
65,
8,
106,
32,
7,
32,
10,
32,
5,
107,
106,
54,
2,
0,
32,
5,
65,
0,
58,
0,
0,
32,
6,
69,
13,
0,
32,
5,
32,
6,
65,
1,
16,
162,
1,
11,
2,
64,
32,
3,
69,
13,
0,
32,
0,
32,
0,
65,
8,
106,
34,
1,
40,
2,
0,
32,
8,
16,
85,
32,
4,
65,
16,
114,
33,
4,
32,
8,
69,
4,
64,
32,
3,
65,
0,
58,
0,
0,
12,
1,
11,
32,
3,
32,
8,
106,
33,
5,
32,
1,
40,
2,
0,
34,
6,
32,
0,
40,
2,
0,
106,
33,
7,
65,
0,
33,
1,
3,
64,
32,
1,
32,
7,
106,
32,
1,
32,
3,
106,
45,
0,
0,
58,
0,
0,
32,
8,
32,
1,
65,
1,
106,
34,
1,
71,
13,
0,
11,
32,
0,
65,
8,
106,
32,
5,
32,
6,
32,
3,
107,
106,
54,
2,
0,
32,
3,
65,
0,
58,
0,
0,
32,
8,
69,
13,
0,
32,
3,
32,
8,
65,
1,
16,
162,
1,
11,
32,
0,
65,
8,
106,
34,
1,
40,
2,
0,
69,
13,
1,
32,
0,
40,
2,
0,
65,
31,
58,
0,
0,
32,
1,
40,
2,
0,
34,
1,
65,
1,
77,
13,
2,
32,
0,
40,
2,
0,
65,
139,
1,
58,
0,
1,
32,
0,
65,
8,
106,
34,
1,
40,
2,
0,
34,
3,
65,
2,
77,
13,
3,
32,
0,
40,
2,
0,
65,
8,
58,
0,
2,
32,
1,
40,
2,
0,
34,
1,
65,
3,
77,
13,
4,
32,
0,
40,
2,
0,
32,
4,
58,
0,
3,
32,
0,
65,
8,
106,
34,
1,
40,
2,
0,
34,
3,
65,
4,
77,
13,
5,
32,
0,
40,
2,
0,
32,
9,
58,
0,
4,
32,
1,
40,
2,
0,
34,
1,
65,
5,
77,
13,
6,
32,
0,
40,
2,
0,
32,
9,
65,
8,
118,
58,
0,
5,
32,
0,
65,
8,
106,
34,
1,
40,
2,
0,
34,
3,
65,
6,
77,
13,
7,
32,
0,
40,
2,
0,
32,
9,
65,
16,
118,
58,
0,
6,
32,
1,
40,
2,
0,
34,
1,
65,
7,
77,
13,
8,
32,
0,
40,
2,
0,
32,
9,
65,
24,
118,
58,
0,
7,
32,
0,
65,
8,
106,
34,
1,
40,
2,
0,
34,
3,
65,
8,
77,
13,
9,
32,
0,
40,
2,
0,
32,
2,
65,
2,
73,
65,
2,
116,
65,
2,
32,
2,
65,
9,
73,
27,
58,
0,
8,
32,
1,
40,
2,
0,
34,
1,
65,
9,
77,
13,
10,
32,
0,
40,
2,
0,
32,
11,
65,
127,
32,
12,
27,
58,
0,
9,
15,
11,
65,
10,
16,
168,
1,
0,
11,
65,
0,
65,
0,
65,
248,
146,
192,
0,
16,
103,
0,
11,
65,
1,
32,
1,
65,
136,
147,
192,
0,
16,
103,
0,
11,
65,
2,
32,
3,
65,
152,
147,
192,
0,
16,
103,
0,
11,
65,
3,
32,
1,
65,
168,
147,
192,
0,
16,
103,
0,
11,
65,
4,
32,
3,
65,
184,
147,
192,
0,
16,
103,
0,
11,
65,
5,
32,
1,
65,
200,
147,
192,
0,
16,
103,
0,
11,
65,
6,
32,
3,
65,
216,
147,
192,
0,
16,
103,
0,
11,
65,
7,
32,
1,
65,
232,
147,
192,
0,
16,
103,
0,
11,
65,
8,
32,
3,
65,
248,
147,
192,
0,
16,
103,
0,
11,
65,
9,
32,
1,
65,
136,
148,
192,
0,
16,
103,
0,
11,
175,
7,
2,
6,
127,
1,
126,
35,
0,
65,
192,
1,
107,
34,
3,
36,
0,
32,
3,
65,
8,
106,
65,
0,
16,
144,
1,
2,
64,
2,
64,
65,
128,
128,
2,
65,
1,
16,
156,
1,
34,
4,
4,
64,
32,
3,
65,
48,
106,
34,
5,
66,
128,
128,
2,
55,
3,
0,
32,
3,
65,
40,
106,
34,
6,
65,
0,
54,
2,
0,
32,
3,
32,
4,
54,
2,
44,
32,
3,
66,
1,
55,
3,
32,
32,
3,
65,
128,
1,
106,
32,
3,
65,
8,
106,
32,
1,
32,
2,
16,
63,
32,
3,
65,
240,
0,
106,
34,
4,
32,
5,
41,
3,
0,
55,
3,
0,
32,
3,
65,
232,
0,
106,
34,
5,
32,
6,
41,
3,
0,
55,
3,
0,
32,
3,
65,
224,
0,
106,
34,
6,
32,
3,
41,
3,
32,
55,
3,
0,
32,
3,
65,
216,
0,
106,
34,
7,
32,
3,
65,
24,
106,
41,
3,
0,
55,
3,
0,
32,
3,
65,
208,
0,
106,
34,
8,
32,
3,
65,
16,
106,
41,
3,
0,
55,
3,
0,
32,
3,
32,
3,
41,
3,
8,
55,
3,
72,
2,
127,
2,
64,
2,
64,
32,
3,
45,
0,
128,
1,
65,
3,
71,
4,
64,
32,
3,
32,
3,
41,
3,
128,
1,
34,
9,
55,
2,
60,
32,
3,
65,
1,
54,
2,
56,
2,
64,
32,
3,
40,
2,
96,
69,
13,
0,
32,
3,
65,
144,
1,
106,
32,
3,
65,
200,
0,
106,
16,
57,
32,
3,
45,
0,
144,
1,
65,
2,
70,
4,
64,
32,
3,
40,
2,
148,
1,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
5,
40,
2,
4,
34,
6,
4,
64,
32,
4,
40,
2,
0,
32,
6,
32,
5,
40,
2,
8,
16,
162,
1,
11,
32,
4,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
40,
2,
96,
34,
4,
69,
13,
0,
32,
3,
65,
228,
0,
106,
40,
2,
0,
34,
5,
69,
13,
0,
32,
4,
32,
5,
65,
1,
16,
162,
1,
11,
32,
3,
40,
2,
88,
65,
244,
213,
2,
65,
4,
16,
162,
1,
32,
3,
65,
240,
0,
106,
40,
2,
0,
34,
4,
69,
13,
1,
32,
3,
40,
2,
108,
32,
4,
65,
1,
16,
162,
1,
12,
1,
11,
32,
3,
65,
184,
1,
106,
32,
4,
41,
3,
0,
55,
3,
0,
32,
3,
65,
176,
1,
106,
32,
5,
41,
3,
0,
55,
3,
0,
32,
3,
65,
168,
1,
106,
32,
6,
41,
3,
0,
55,
3,
0,
32,
3,
65,
160,
1,
106,
32,
7,
41,
3,
0,
55,
3,
0,
32,
3,
65,
152,
1,
106,
32,
8,
41,
3,
0,
55,
3,
0,
32,
3,
32,
3,
41,
3,
72,
55,
3,
144,
1,
32,
3,
65,
56,
106,
32,
3,
65,
144,
1,
106,
16,
39,
32,
3,
40,
2,
56,
65,
1,
71,
13,
1,
32,
3,
41,
2,
60,
33,
9,
11,
32,
3,
32,
9,
55,
3,
120,
32,
3,
65,
248,
0,
106,
16,
141,
1,
33,
4,
32,
3,
65,
212,
0,
106,
65,
9,
54,
2,
0,
32,
3,
65,
164,
1,
106,
65,
2,
54,
2,
0,
32,
3,
65,
10,
54,
2,
76,
32,
3,
66,
2,
55,
2,
148,
1,
32,
3,
65,
160,
136,
192,
0,
54,
2,
144,
1,
32,
3,
32,
4,
58,
0,
143,
1,
32,
3,
32,
3,
65,
248,
0,
106,
54,
2,
80,
32,
3,
32,
3,
65,
143,
1,
106,
54,
2,
72,
32,
3,
32,
3,
65,
200,
0,
106,
54,
2,
160,
1,
32,
3,
65,
128,
1,
106,
32,
3,
65,
144,
1,
106,
16,
45,
32,
3,
40,
2,
128,
1,
34,
4,
32,
3,
40,
2,
136,
1,
16,
0,
33,
5,
32,
3,
40,
2,
132,
1,
34,
6,
4,
64,
32,
4,
32,
6,
65,
1,
16,
162,
1,
11,
32,
3,
45,
0,
120,
65,
2,
79,
4,
64,
32,
3,
40,
2,
124,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
4,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
3,
40,
2,
124,
65,
12,
65,
4,
16,
162,
1,
11,
65,
1,
12,
1,
11,
32,
3,
65,
64,
107,
41,
3,
0,
33,
9,
32,
3,
40,
2,
60,
33,
5,
65,
0,
11,
32,
2,
4,
64,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
13,
1,
2,
64,
32,
9,
167,
34,
1,
32,
9,
66,
32,
136,
167,
34,
2,
70,
4,
64,
32,
5,
33,
4,
32,
1,
33,
2,
12,
1,
11,
2,
64,
32,
1,
32,
2,
79,
4,
64,
32,
1,
13,
1,
32,
5,
33,
4,
12,
2,
11,
65,
248,
134,
192,
0,
65,
36,
65,
140,
136,
192,
0,
16,
119,
0,
11,
32,
2,
69,
4,
64,
65,
1,
33,
4,
32,
5,
32,
1,
65,
1,
16,
162,
1,
12,
1,
11,
32,
5,
32,
1,
32,
2,
16,
151,
1,
34,
4,
69,
13,
3,
11,
32,
0,
32,
2,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
32,
3,
65,
192,
1,
106,
36,
0,
15,
11,
65,
128,
128,
2,
16,
168,
1,
0,
11,
32,
5,
16,
174,
1,
0,
11,
32,
2,
65,
1,
16,
171,
1,
0,
11,
175,
7,
2,
6,
127,
1,
126,
35,
0,
65,
192,
1,
107,
34,
3,
36,
0,
32,
3,
65,
8,
106,
65,
1,
16,
144,
1,
2,
64,
2,
64,
65,
128,
128,
2,
65,
1,
16,
156,
1,
34,
4,
4,
64,
32,
3,
65,
48,
106,
34,
5,
66,
128,
128,
2,
55,
3,
0,
32,
3,
65,
40,
106,
34,
6,
65,
0,
54,
2,
0,
32,
3,
32,
4,
54,
2,
44,
32,
3,
66,
1,
55,
3,
32,
32,
3,
65,
128,
1,
106,
32,
3,
65,
8,
106,
32,
1,
32,
2,
16,
61,
32,
3,
65,
240,
0,
106,
34,
4,
32,
5,
41,
3,
0,
55,
3,
0,
32,
3,
65,
232,
0,
106,
34,
5,
32,
6,
41,
3,
0,
55,
3,
0,
32,
3,
65,
224,
0,
106,
34,
6,
32,
3,
41,
3,
32,
55,
3,
0,
32,
3,
65,
216,
0,
106,
34,
7,
32,
3,
65,
24,
106,
41,
3,
0,
55,
3,
0,
32,
3,
65,
208,
0,
106,
34,
8,
32,
3,
65,
16,
106,
41,
3,
0,
55,
3,
0,
32,
3,
32,
3,
41,
3,
8,
55,
3,
72,
2,
127,
2,
64,
2,
64,
32,
3,
45,
0,
128,
1,
65,
3,
71,
4,
64,
32,
3,
32,
3,
41,
3,
128,
1,
34,
9,
55,
2,
60,
32,
3,
65,
1,
54,
2,
56,
2,
64,
32,
3,
40,
2,
96,
69,
13,
0,
32,
3,
65,
144,
1,
106,
32,
3,
65,
200,
0,
106,
16,
57,
32,
3,
45,
0,
144,
1,
65,
2,
70,
4,
64,
32,
3,
40,
2,
148,
1,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
5,
40,
2,
4,
34,
6,
4,
64,
32,
4,
40,
2,
0,
32,
6,
32,
5,
40,
2,
8,
16,
162,
1,
11,
32,
4,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
40,
2,
96,
34,
4,
69,
13,
0,
32,
3,
65,
228,
0,
106,
40,
2,
0,
34,
5,
69,
13,
0,
32,
4,
32,
5,
65,
1,
16,
162,
1,
11,
32,
3,
40,
2,
88,
65,
244,
213,
2,
65,
4,
16,
162,
1,
32,
3,
65,
240,
0,
106,
40,
2,
0,
34,
4,
69,
13,
1,
32,
3,
40,
2,
108,
32,
4,
65,
1,
16,
162,
1,
12,
1,
11,
32,
3,
65,
184,
1,
106,
32,
4,
41,
3,
0,
55,
3,
0,
32,
3,
65,
176,
1,
106,
32,
5,
41,
3,
0,
55,
3,
0,
32,
3,
65,
168,
1,
106,
32,
6,
41,
3,
0,
55,
3,
0,
32,
3,
65,
160,
1,
106,
32,
7,
41,
3,
0,
55,
3,
0,
32,
3,
65,
152,
1,
106,
32,
8,
41,
3,
0,
55,
3,
0,
32,
3,
32,
3,
41,
3,
72,
55,
3,
144,
1,
32,
3,
65,
56,
106,
32,
3,
65,
144,
1,
106,
16,
39,
32,
3,
40,
2,
56,
65,
1,
71,
13,
1,
32,
3,
41,
2,
60,
33,
9,
11,
32,
3,
32,
9,
55,
3,
120,
32,
3,
65,
248,
0,
106,
16,
141,
1,
33,
4,
32,
3,
65,
212,
0,
106,
65,
9,
54,
2,
0,
32,
3,
65,
164,
1,
106,
65,
2,
54,
2,
0,
32,
3,
65,
10,
54,
2,
76,
32,
3,
66,
2,
55,
2,
148,
1,
32,
3,
65,
160,
136,
192,
0,
54,
2,
144,
1,
32,
3,
32,
4,
58,
0,
143,
1,
32,
3,
32,
3,
65,
248,
0,
106,
54,
2,
80,
32,
3,
32,
3,
65,
143,
1,
106,
54,
2,
72,
32,
3,
32,
3,
65,
200,
0,
106,
54,
2,
160,
1,
32,
3,
65,
128,
1,
106,
32,
3,
65,
144,
1,
106,
16,
45,
32,
3,
40,
2,
128,
1,
34,
4,
32,
3,
40,
2,
136,
1,
16,
0,
33,
5,
32,
3,
40,
2,
132,
1,
34,
6,
4,
64,
32,
4,
32,
6,
65,
1,
16,
162,
1,
11,
32,
3,
45,
0,
120,
65,
2,
79,
4,
64,
32,
3,
40,
2,
124,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
4,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
3,
40,
2,
124,
65,
12,
65,
4,
16,
162,
1,
11,
65,
1,
12,
1,
11,
32,
3,
65,
64,
107,
41,
3,
0,
33,
9,
32,
3,
40,
2,
60,
33,
5,
65,
0,
11,
32,
2,
4,
64,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
13,
1,
2,
64,
32,
9,
167,
34,
1,
32,
9,
66,
32,
136,
167,
34,
2,
70,
4,
64,
32,
5,
33,
4,
32,
1,
33,
2,
12,
1,
11,
2,
64,
32,
1,
32,
2,
79,
4,
64,
32,
1,
13,
1,
32,
5,
33,
4,
12,
2,
11,
65,
248,
134,
192,
0,
65,
36,
65,
140,
136,
192,
0,
16,
119,
0,
11,
32,
2,
69,
4,
64,
65,
1,
33,
4,
32,
5,
32,
1,
65,
1,
16,
162,
1,
12,
1,
11,
32,
5,
32,
1,
32,
2,
16,
151,
1,
34,
4,
69,
13,
3,
11,
32,
0,
32,
2,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
32,
3,
65,
192,
1,
106,
36,
0,
15,
11,
65,
128,
128,
2,
16,
168,
1,
0,
11,
32,
5,
16,
174,
1,
0,
11,
32,
2,
65,
1,
16,
171,
1,
0,
11,
194,
6,
1,
12,
127,
32,
0,
40,
2,
16,
33,
3,
2,
64,
2,
64,
2,
64,
2,
64,
32,
0,
40,
2,
8,
34,
13,
65,
1,
71,
4,
64,
32,
3,
65,
1,
70,
13,
1,
32,
0,
40,
2,
24,
32,
1,
32,
2,
32,
0,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
33,
3,
12,
3,
11,
32,
3,
65,
1,
71,
13,
1,
11,
2,
64,
32,
2,
69,
4,
64,
65,
0,
33,
2,
12,
1,
11,
32,
1,
32,
2,
106,
33,
7,
32,
0,
65,
20,
106,
40,
2,
0,
65,
1,
106,
33,
10,
32,
1,
34,
3,
33,
11,
3,
64,
32,
3,
65,
1,
106,
33,
5,
2,
64,
2,
127,
32,
3,
44,
0,
0,
34,
4,
65,
127,
76,
4,
64,
2,
127,
32,
5,
32,
7,
70,
4,
64,
65,
0,
33,
8,
32,
7,
12,
1,
11,
32,
3,
45,
0,
1,
65,
63,
113,
33,
8,
32,
3,
65,
2,
106,
34,
5,
11,
33,
3,
32,
4,
65,
31,
113,
33,
9,
32,
8,
32,
9,
65,
6,
116,
114,
32,
4,
65,
255,
1,
113,
34,
14,
65,
223,
1,
77,
13,
1,
26,
2,
127,
32,
3,
32,
7,
70,
4,
64,
65,
0,
33,
12,
32,
7,
12,
1,
11,
32,
3,
45,
0,
0,
65,
63,
113,
33,
12,
32,
3,
65,
1,
106,
34,
5,
11,
33,
4,
32,
12,
32,
8,
65,
6,
116,
114,
33,
8,
32,
8,
32,
9,
65,
12,
116,
114,
32,
14,
65,
240,
1,
73,
13,
1,
26,
2,
127,
32,
4,
32,
7,
70,
4,
64,
32,
5,
33,
3,
65,
0,
12,
1,
11,
32,
4,
65,
1,
106,
33,
3,
32,
4,
45,
0,
0,
65,
63,
113,
11,
32,
9,
65,
18,
116,
65,
128,
128,
240,
0,
113,
32,
8,
65,
6,
116,
114,
114,
34,
4,
65,
128,
128,
196,
0,
71,
13,
2,
12,
4,
11,
32,
4,
65,
255,
1,
113,
11,
33,
4,
32,
5,
33,
3,
11,
32,
10,
65,
127,
106,
34,
10,
4,
64,
32,
6,
32,
11,
107,
32,
3,
106,
33,
6,
32,
3,
33,
11,
32,
3,
32,
7,
71,
13,
1,
12,
2,
11,
11,
32,
4,
65,
128,
128,
196,
0,
70,
13,
0,
2,
64,
32,
6,
69,
32,
2,
32,
6,
70,
114,
69,
4,
64,
65,
0,
33,
3,
32,
6,
32,
2,
79,
13,
1,
32,
1,
32,
6,
106,
44,
0,
0,
65,
64,
72,
13,
1,
11,
32,
1,
33,
3,
11,
32,
6,
32,
2,
32,
3,
27,
33,
2,
32,
3,
32,
1,
32,
3,
27,
33,
1,
11,
32,
13,
65,
1,
70,
13,
0,
12,
2,
11,
65,
0,
33,
5,
32,
2,
4,
64,
32,
2,
33,
4,
32,
1,
33,
3,
3,
64,
32,
5,
32,
3,
45,
0,
0,
65,
192,
1,
113,
65,
128,
1,
70,
106,
33,
5,
32,
3,
65,
1,
106,
33,
3,
32,
4,
65,
127,
106,
34,
4,
13,
0,
11,
11,
32,
2,
32,
5,
107,
32,
0,
40,
2,
12,
34,
7,
79,
13,
1,
65,
0,
33,
6,
65,
0,
33,
5,
32,
2,
4,
64,
32,
2,
33,
4,
32,
1,
33,
3,
3,
64,
32,
5,
32,
3,
45,
0,
0,
65,
192,
1,
113,
65,
128,
1,
70,
106,
33,
5,
32,
3,
65,
1,
106,
33,
3,
32,
4,
65,
127,
106,
34,
4,
13,
0,
11,
11,
32,
5,
32,
2,
107,
32,
7,
106,
34,
3,
33,
4,
2,
64,
2,
64,
2,
64,
65,
0,
32,
0,
45,
0,
32,
34,
5,
32,
5,
65,
3,
70,
27,
65,
1,
107,
14,
3,
1,
0,
1,
2,
11,
32,
3,
65,
1,
118,
33,
6,
32,
3,
65,
1,
106,
65,
1,
118,
33,
4,
12,
1,
11,
65,
0,
33,
4,
32,
3,
33,
6,
11,
32,
6,
65,
1,
106,
33,
3,
2,
64,
3,
64,
32,
3,
65,
127,
106,
34,
3,
69,
13,
1,
32,
0,
40,
2,
24,
32,
0,
40,
2,
4,
32,
0,
40,
2,
28,
40,
2,
16,
17,
0,
0,
69,
13,
0,
11,
65,
1,
15,
11,
32,
0,
40,
2,
4,
33,
5,
65,
1,
33,
3,
32,
0,
40,
2,
24,
32,
1,
32,
2,
32,
0,
40,
2,
28,
40,
2,
12,
17,
2,
0,
13,
0,
32,
4,
65,
1,
106,
33,
3,
32,
0,
40,
2,
28,
33,
1,
32,
0,
40,
2,
24,
33,
0,
3,
64,
32,
3,
65,
127,
106,
34,
3,
69,
4,
64,
65,
0,
15,
11,
32,
0,
32,
5,
32,
1,
40,
2,
16,
17,
0,
0,
69,
13,
0,
11,
65,
1,
15,
11,
32,
3,
15,
11,
32,
0,
40,
2,
24,
32,
1,
32,
2,
32,
0,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
11,
150,
6,
2,
4,
127,
1,
126,
35,
0,
65,
192,
1,
107,
34,
5,
36,
0,
32,
5,
65,
8,
106,
32,
3,
4,
127,
32,
4,
5,
65,
6,
11,
65,
0,
16,
130,
1,
2,
64,
2,
64,
65,
128,
128,
2,
65,
1,
16,
156,
1,
34,
3,
4,
64,
32,
5,
65,
48,
106,
34,
4,
66,
128,
128,
2,
55,
3,
0,
32,
5,
65,
40,
106,
34,
6,
65,
0,
54,
2,
0,
32,
5,
32,
3,
54,
2,
44,
32,
5,
66,
1,
55,
3,
32,
32,
5,
65,
128,
1,
106,
32,
5,
65,
8,
106,
32,
1,
32,
2,
16,
64,
32,
5,
65,
240,
0,
106,
34,
3,
32,
4,
41,
3,
0,
55,
3,
0,
32,
5,
65,
232,
0,
106,
34,
4,
32,
6,
41,
3,
0,
55,
3,
0,
32,
5,
65,
224,
0,
106,
34,
6,
32,
5,
41,
3,
32,
55,
3,
0,
32,
5,
65,
216,
0,
106,
34,
7,
32,
5,
65,
24,
106,
41,
3,
0,
55,
3,
0,
32,
5,
65,
208,
0,
106,
34,
8,
32,
5,
65,
16,
106,
41,
3,
0,
55,
3,
0,
32,
5,
32,
5,
41,
3,
8,
55,
3,
72,
2,
127,
2,
64,
2,
64,
32,
5,
45,
0,
128,
1,
65,
3,
71,
4,
64,
32,
5,
32,
5,
41,
3,
128,
1,
34,
9,
55,
2,
60,
32,
5,
65,
1,
54,
2,
56,
32,
5,
65,
200,
0,
106,
16,
75,
12,
1,
11,
32,
5,
65,
184,
1,
106,
32,
3,
41,
3,
0,
55,
3,
0,
32,
5,
65,
176,
1,
106,
32,
4,
41,
3,
0,
55,
3,
0,
32,
5,
65,
168,
1,
106,
32,
6,
41,
3,
0,
55,
3,
0,
32,
5,
65,
160,
1,
106,
32,
7,
41,
3,
0,
55,
3,
0,
32,
5,
65,
152,
1,
106,
32,
8,
41,
3,
0,
55,
3,
0,
32,
5,
32,
5,
41,
3,
72,
55,
3,
144,
1,
32,
5,
65,
56,
106,
32,
5,
65,
144,
1,
106,
16,
76,
32,
5,
40,
2,
56,
65,
1,
71,
13,
1,
32,
5,
41,
2,
60,
33,
9,
11,
32,
5,
32,
9,
55,
3,
120,
32,
5,
65,
248,
0,
106,
16,
141,
1,
33,
3,
32,
5,
65,
212,
0,
106,
65,
9,
54,
2,
0,
32,
5,
65,
164,
1,
106,
65,
2,
54,
2,
0,
32,
5,
65,
10,
54,
2,
76,
32,
5,
66,
2,
55,
2,
148,
1,
32,
5,
65,
160,
136,
192,
0,
54,
2,
144,
1,
32,
5,
32,
3,
58,
0,
143,
1,
32,
5,
32,
5,
65,
248,
0,
106,
54,
2,
80,
32,
5,
32,
5,
65,
143,
1,
106,
54,
2,
72,
32,
5,
32,
5,
65,
200,
0,
106,
54,
2,
160,
1,
32,
5,
65,
128,
1,
106,
32,
5,
65,
144,
1,
106,
16,
45,
32,
5,
40,
2,
128,
1,
34,
4,
32,
5,
40,
2,
136,
1,
16,
0,
33,
3,
32,
5,
40,
2,
132,
1,
34,
6,
4,
64,
32,
4,
32,
6,
65,
1,
16,
162,
1,
11,
32,
5,
45,
0,
120,
65,
2,
79,
4,
64,
32,
5,
40,
2,
124,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
4,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
5,
40,
2,
124,
65,
12,
65,
4,
16,
162,
1,
11,
65,
1,
12,
1,
11,
32,
5,
65,
64,
107,
41,
3,
0,
33,
9,
32,
5,
40,
2,
60,
33,
3,
65,
0,
11,
32,
2,
4,
64,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
13,
1,
2,
64,
32,
9,
167,
34,
1,
32,
9,
66,
32,
136,
167,
34,
2,
70,
4,
64,
32,
3,
33,
4,
32,
1,
33,
2,
12,
1,
11,
2,
64,
32,
1,
32,
2,
79,
4,
64,
32,
1,
13,
1,
32,
3,
33,
4,
12,
2,
11,
65,
248,
134,
192,
0,
65,
36,
65,
140,
136,
192,
0,
16,
119,
0,
11,
32,
2,
69,
4,
64,
65,
1,
33,
4,
32,
3,
32,
1,
65,
1,
16,
162,
1,
12,
1,
11,
32,
3,
32,
1,
32,
2,
16,
151,
1,
34,
4,
69,
13,
3,
11,
32,
0,
32,
2,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
32,
5,
65,
192,
1,
106,
36,
0,
15,
11,
65,
128,
128,
2,
16,
168,
1,
0,
11,
32,
3,
16,
174,
1,
0,
11,
32,
2,
65,
1,
16,
171,
1,
0,
11,
150,
6,
2,
4,
127,
1,
126,
35,
0,
65,
192,
1,
107,
34,
5,
36,
0,
32,
5,
65,
8,
106,
32,
3,
4,
127,
32,
4,
5,
65,
6,
11,
65,
1,
16,
130,
1,
2,
64,
2,
64,
65,
128,
128,
2,
65,
1,
16,
156,
1,
34,
3,
4,
64,
32,
5,
65,
48,
106,
34,
4,
66,
128,
128,
2,
55,
3,
0,
32,
5,
65,
40,
106,
34,
6,
65,
0,
54,
2,
0,
32,
5,
32,
3,
54,
2,
44,
32,
5,
66,
1,
55,
3,
32,
32,
5,
65,
128,
1,
106,
32,
5,
65,
8,
106,
32,
1,
32,
2,
16,
62,
32,
5,
65,
240,
0,
106,
34,
3,
32,
4,
41,
3,
0,
55,
3,
0,
32,
5,
65,
232,
0,
106,
34,
4,
32,
6,
41,
3,
0,
55,
3,
0,
32,
5,
65,
224,
0,
106,
34,
6,
32,
5,
41,
3,
32,
55,
3,
0,
32,
5,
65,
216,
0,
106,
34,
7,
32,
5,
65,
24,
106,
41,
3,
0,
55,
3,
0,
32,
5,
65,
208,
0,
106,
34,
8,
32,
5,
65,
16,
106,
41,
3,
0,
55,
3,
0,
32,
5,
32,
5,
41,
3,
8,
55,
3,
72,
2,
127,
2,
64,
2,
64,
32,
5,
45,
0,
128,
1,
65,
3,
71,
4,
64,
32,
5,
32,
5,
41,
3,
128,
1,
34,
9,
55,
2,
60,
32,
5,
65,
1,
54,
2,
56,
32,
5,
65,
200,
0,
106,
16,
75,
12,
1,
11,
32,
5,
65,
184,
1,
106,
32,
3,
41,
3,
0,
55,
3,
0,
32,
5,
65,
176,
1,
106,
32,
4,
41,
3,
0,
55,
3,
0,
32,
5,
65,
168,
1,
106,
32,
6,
41,
3,
0,
55,
3,
0,
32,
5,
65,
160,
1,
106,
32,
7,
41,
3,
0,
55,
3,
0,
32,
5,
65,
152,
1,
106,
32,
8,
41,
3,
0,
55,
3,
0,
32,
5,
32,
5,
41,
3,
72,
55,
3,
144,
1,
32,
5,
65,
56,
106,
32,
5,
65,
144,
1,
106,
16,
76,
32,
5,
40,
2,
56,
65,
1,
71,
13,
1,
32,
5,
41,
2,
60,
33,
9,
11,
32,
5,
32,
9,
55,
3,
120,
32,
5,
65,
248,
0,
106,
16,
141,
1,
33,
3,
32,
5,
65,
212,
0,
106,
65,
9,
54,
2,
0,
32,
5,
65,
164,
1,
106,
65,
2,
54,
2,
0,
32,
5,
65,
10,
54,
2,
76,
32,
5,
66,
2,
55,
2,
148,
1,
32,
5,
65,
160,
136,
192,
0,
54,
2,
144,
1,
32,
5,
32,
3,
58,
0,
143,
1,
32,
5,
32,
5,
65,
248,
0,
106,
54,
2,
80,
32,
5,
32,
5,
65,
143,
1,
106,
54,
2,
72,
32,
5,
32,
5,
65,
200,
0,
106,
54,
2,
160,
1,
32,
5,
65,
128,
1,
106,
32,
5,
65,
144,
1,
106,
16,
45,
32,
5,
40,
2,
128,
1,
34,
4,
32,
5,
40,
2,
136,
1,
16,
0,
33,
3,
32,
5,
40,
2,
132,
1,
34,
6,
4,
64,
32,
4,
32,
6,
65,
1,
16,
162,
1,
11,
32,
5,
45,
0,
120,
65,
2,
79,
4,
64,
32,
5,
40,
2,
124,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
4,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
5,
40,
2,
124,
65,
12,
65,
4,
16,
162,
1,
11,
65,
1,
12,
1,
11,
32,
5,
65,
64,
107,
41,
3,
0,
33,
9,
32,
5,
40,
2,
60,
33,
3,
65,
0,
11,
32,
2,
4,
64,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
13,
1,
2,
64,
32,
9,
167,
34,
1,
32,
9,
66,
32,
136,
167,
34,
2,
70,
4,
64,
32,
3,
33,
4,
32,
1,
33,
2,
12,
1,
11,
2,
64,
32,
1,
32,
2,
79,
4,
64,
32,
1,
13,
1,
32,
3,
33,
4,
12,
2,
11,
65,
248,
134,
192,
0,
65,
36,
65,
140,
136,
192,
0,
16,
119,
0,
11,
32,
2,
69,
4,
64,
65,
1,
33,
4,
32,
3,
32,
1,
65,
1,
16,
162,
1,
12,
1,
11,
32,
3,
32,
1,
32,
2,
16,
151,
1,
34,
4,
69,
13,
3,
11,
32,
0,
32,
2,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
32,
5,
65,
192,
1,
106,
36,
0,
15,
11,
65,
128,
128,
2,
16,
168,
1,
0,
11,
32,
3,
16,
174,
1,
0,
11,
32,
2,
65,
1,
16,
171,
1,
0,
11,
155,
6,
1,
9,
127,
35,
0,
65,
48,
107,
34,
7,
36,
0,
2,
64,
2,
64,
2,
64,
32,
5,
4,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
1,
65,
180,
128,
4,
106,
40,
2,
0,
65,
1,
71,
4,
64,
32,
6,
65,
4,
71,
13,
1,
3,
64,
32,
7,
32,
5,
54,
2,
40,
32,
7,
32,
4,
54,
2,
36,
32,
7,
65,
1,
54,
2,
32,
32,
7,
66,
0,
55,
3,
24,
32,
7,
32,
2,
54,
2,
16,
32,
7,
32,
3,
54,
2,
20,
32,
7,
32,
1,
32,
7,
65,
16,
106,
65,
4,
16,
4,
32,
3,
32,
7,
40,
2,
4,
34,
9,
73,
13,
12,
32,
5,
32,
7,
40,
2,
8,
34,
8,
73,
13,
6,
32,
8,
32,
11,
106,
33,
11,
32,
9,
32,
10,
106,
33,
10,
2,
64,
32,
7,
40,
2,
0,
65,
2,
106,
34,
6,
65,
3,
75,
13,
0,
65,
1,
33,
13,
65,
240,
177,
127,
33,
12,
32,
6,
65,
1,
107,
14,
3,
4,
0,
5,
9,
11,
32,
3,
32,
9,
107,
33,
3,
32,
2,
32,
9,
106,
33,
2,
32,
4,
32,
8,
106,
33,
4,
32,
5,
32,
8,
107,
34,
5,
13,
0,
11,
12,
6,
11,
32,
0,
66,
0,
55,
2,
0,
32,
6,
65,
4,
71,
4,
64,
32,
0,
65,
1,
54,
2,
8,
12,
9,
11,
32,
0,
65,
0,
54,
2,
8,
65,
1,
33,
12,
12,
9,
11,
65,
3,
32,
6,
65,
2,
70,
65,
1,
116,
32,
6,
65,
3,
70,
34,
14,
27,
33,
8,
32,
6,
65,
2,
70,
4,
64,
3,
64,
32,
7,
32,
5,
54,
2,
40,
32,
7,
32,
4,
54,
2,
36,
32,
7,
65,
1,
54,
2,
32,
32,
7,
66,
0,
55,
3,
24,
32,
7,
32,
2,
54,
2,
16,
32,
7,
32,
3,
54,
2,
20,
32,
7,
32,
1,
32,
7,
65,
16,
106,
32,
8,
16,
4,
32,
3,
32,
7,
40,
2,
4,
34,
9,
73,
13,
11,
32,
5,
32,
7,
40,
2,
8,
34,
8,
73,
13,
5,
32,
8,
32,
11,
106,
33,
11,
32,
9,
32,
10,
106,
33,
10,
2,
64,
32,
7,
40,
2,
0,
65,
2,
106,
34,
14,
65,
3,
75,
13,
0,
65,
1,
33,
13,
65,
240,
177,
127,
33,
12,
32,
14,
65,
1,
107,
14,
3,
3,
0,
4,
8,
11,
32,
5,
32,
8,
107,
34,
5,
69,
13,
6,
32,
3,
32,
9,
107,
34,
3,
69,
13,
4,
32,
2,
32,
9,
106,
33,
2,
32,
4,
32,
8,
106,
33,
4,
65,
2,
33,
8,
12,
0,
11,
0,
11,
65,
3,
65,
0,
32,
14,
27,
33,
14,
3,
64,
32,
7,
32,
5,
54,
2,
40,
32,
7,
32,
4,
54,
2,
36,
32,
7,
65,
1,
54,
2,
32,
32,
7,
66,
0,
55,
3,
24,
32,
7,
32,
2,
54,
2,
16,
32,
7,
32,
3,
54,
2,
20,
32,
7,
32,
1,
32,
7,
65,
16,
106,
32,
8,
16,
4,
32,
3,
32,
7,
40,
2,
4,
34,
9,
73,
13,
10,
32,
5,
32,
7,
40,
2,
8,
34,
8,
73,
13,
4,
32,
8,
32,
11,
106,
33,
11,
32,
9,
32,
10,
106,
33,
10,
2,
64,
32,
7,
40,
2,
0,
65,
2,
106,
34,
15,
65,
3,
75,
13,
0,
65,
1,
33,
13,
65,
240,
177,
127,
33,
12,
32,
15,
65,
1,
107,
14,
3,
2,
0,
3,
7,
11,
32,
5,
32,
8,
107,
34,
5,
69,
13,
5,
32,
3,
32,
9,
107,
34,
3,
69,
13,
3,
32,
2,
32,
9,
106,
33,
2,
32,
4,
32,
8,
106,
33,
4,
32,
14,
33,
8,
12,
0,
11,
0,
11,
65,
126,
33,
12,
12,
4,
11,
65,
0,
33,
13,
65,
1,
33,
12,
12,
3,
11,
65,
0,
65,
123,
32,
6,
32,
10,
114,
32,
11,
114,
34,
1,
27,
33,
12,
32,
1,
69,
33,
13,
12,
2,
11,
32,
8,
32,
5,
65,
240,
195,
192,
0,
16,
105,
0,
11,
65,
0,
33,
12,
65,
0,
33,
13,
11,
32,
0,
32,
13,
54,
2,
8,
32,
0,
32,
11,
54,
2,
4,
32,
0,
32,
10,
54,
2,
0,
12,
2,
11,
32,
0,
65,
1,
54,
2,
8,
32,
0,
66,
0,
55,
2,
0,
11,
65,
123,
33,
12,
11,
32,
0,
65,
12,
106,
32,
12,
54,
2,
0,
32,
7,
65,
48,
106,
36,
0,
15,
11,
32,
9,
32,
3,
65,
224,
195,
192,
0,
16,
105,
0,
11,
251,
5,
1,
7,
127,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
4,
65,
2,
118,
34,
11,
4,
64,
32,
0,
32,
3,
106,
33,
12,
3,
64,
32,
2,
32,
6,
106,
34,
9,
32,
5,
113,
34,
7,
32,
1,
79,
13,
2,
32,
3,
32,
6,
106,
34,
8,
32,
1,
79,
13,
3,
32,
6,
32,
12,
106,
34,
10,
32,
0,
32,
7,
106,
45,
0,
0,
58,
0,
0,
32,
9,
65,
1,
106,
34,
9,
32,
5,
113,
34,
7,
32,
1,
79,
13,
4,
32,
8,
65,
1,
106,
32,
1,
79,
13,
5,
32,
10,
65,
1,
106,
32,
0,
32,
7,
106,
45,
0,
0,
58,
0,
0,
32,
9,
65,
1,
106,
34,
9,
32,
5,
113,
34,
7,
32,
1,
79,
13,
6,
32,
8,
65,
2,
106,
32,
1,
79,
13,
7,
32,
10,
65,
2,
106,
32,
0,
32,
7,
106,
45,
0,
0,
58,
0,
0,
32,
9,
65,
1,
106,
32,
5,
113,
34,
7,
32,
1,
79,
13,
8,
32,
8,
65,
3,
106,
32,
1,
79,
13,
9,
32,
10,
65,
3,
106,
32,
0,
32,
7,
106,
45,
0,
0,
58,
0,
0,
32,
6,
65,
4,
106,
33,
6,
32,
11,
65,
127,
106,
34,
11,
13,
0,
11,
32,
3,
32,
6,
106,
33,
3,
32,
2,
32,
6,
106,
33,
2,
11,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
4,
65,
3,
113,
65,
1,
107,
14,
3,
0,
1,
2,
4,
11,
32,
2,
32,
5,
113,
34,
6,
32,
1,
79,
13,
21,
32,
3,
32,
1,
73,
13,
2,
32,
3,
32,
1,
65,
156,
188,
192,
0,
16,
103,
0,
11,
32,
2,
32,
5,
113,
34,
4,
32,
1,
79,
13,
17,
32,
3,
32,
1,
79,
13,
18,
32,
0,
32,
3,
106,
32,
0,
32,
4,
106,
45,
0,
0,
58,
0,
0,
32,
2,
65,
1,
106,
32,
5,
113,
34,
6,
32,
1,
79,
13,
19,
32,
3,
65,
1,
106,
34,
3,
32,
1,
73,
13,
1,
32,
3,
32,
1,
65,
252,
187,
192,
0,
16,
103,
0,
11,
32,
2,
32,
5,
113,
34,
4,
32,
1,
79,
13,
10,
32,
3,
32,
1,
79,
13,
11,
32,
0,
32,
3,
106,
32,
0,
32,
4,
106,
45,
0,
0,
58,
0,
0,
32,
2,
65,
1,
106,
32,
5,
113,
34,
4,
32,
1,
79,
13,
12,
32,
3,
65,
1,
106,
34,
6,
32,
1,
79,
13,
13,
32,
0,
32,
6,
106,
32,
0,
32,
4,
106,
45,
0,
0,
58,
0,
0,
32,
2,
65,
2,
106,
32,
5,
113,
34,
6,
32,
1,
79,
13,
14,
32,
3,
65,
2,
106,
34,
3,
32,
1,
79,
13,
15,
11,
32,
0,
32,
3,
106,
32,
0,
32,
6,
106,
45,
0,
0,
58,
0,
0,
11,
15,
11,
32,
7,
32,
1,
65,
236,
185,
192,
0,
16,
103,
0,
11,
32,
8,
32,
1,
65,
252,
185,
192,
0,
16,
103,
0,
11,
32,
7,
32,
1,
65,
140,
186,
192,
0,
16,
103,
0,
11,
32,
8,
65,
1,
106,
32,
1,
65,
156,
186,
192,
0,
16,
103,
0,
11,
32,
7,
32,
1,
65,
172,
186,
192,
0,
16,
103,
0,
11,
32,
8,
65,
2,
106,
32,
1,
65,
188,
186,
192,
0,
16,
103,
0,
11,
32,
7,
32,
1,
65,
204,
186,
192,
0,
16,
103,
0,
11,
32,
8,
65,
3,
106,
32,
1,
65,
220,
186,
192,
0,
16,
103,
0,
11,
32,
4,
32,
1,
65,
236,
186,
192,
0,
16,
103,
0,
11,
32,
3,
32,
1,
65,
252,
186,
192,
0,
16,
103,
0,
11,
32,
4,
32,
1,
65,
140,
187,
192,
0,
16,
103,
0,
11,
32,
6,
32,
1,
65,
156,
187,
192,
0,
16,
103,
0,
11,
32,
6,
32,
1,
65,
172,
187,
192,
0,
16,
103,
0,
11,
32,
3,
32,
1,
65,
188,
187,
192,
0,
16,
103,
0,
11,
32,
4,
32,
1,
65,
204,
187,
192,
0,
16,
103,
0,
11,
32,
3,
32,
1,
65,
220,
187,
192,
0,
16,
103,
0,
11,
32,
6,
32,
1,
65,
236,
187,
192,
0,
16,
103,
0,
11,
32,
6,
32,
1,
65,
140,
188,
192,
0,
16,
103,
0,
11,
135,
6,
1,
9,
127,
35,
0,
65,
48,
107,
34,
3,
36,
0,
32,
3,
65,
36,
106,
32,
1,
54,
2,
0,
32,
3,
65,
3,
58,
0,
40,
32,
3,
66,
128,
128,
128,
128,
128,
4,
55,
3,
8,
32,
3,
32,
0,
54,
2,
32,
32,
3,
65,
0,
54,
2,
24,
32,
3,
65,
0,
54,
2,
16,
2,
127,
2,
64,
2,
64,
2,
64,
32,
2,
40,
2,
8,
34,
4,
4,
64,
32,
2,
40,
2,
0,
33,
5,
32,
2,
40,
2,
4,
34,
8,
32,
2,
65,
12,
106,
40,
2,
0,
34,
6,
32,
6,
32,
8,
75,
27,
34,
6,
69,
13,
1,
32,
2,
65,
20,
106,
40,
2,
0,
33,
7,
32,
2,
40,
2,
16,
33,
9,
32,
0,
32,
5,
40,
2,
0,
32,
5,
40,
2,
4,
32,
1,
40,
2,
12,
17,
2,
0,
13,
3,
32,
5,
65,
12,
106,
33,
2,
2,
64,
2,
64,
3,
64,
32,
3,
32,
4,
65,
4,
106,
40,
2,
0,
54,
2,
12,
32,
3,
32,
4,
65,
28,
106,
45,
0,
0,
58,
0,
40,
32,
3,
32,
4,
65,
8,
106,
40,
2,
0,
54,
2,
8,
32,
4,
65,
24,
106,
40,
2,
0,
33,
0,
65,
0,
33,
1,
2,
64,
2,
64,
2,
64,
32,
4,
65,
20,
106,
40,
2,
0,
65,
1,
107,
14,
2,
0,
2,
1,
11,
32,
0,
32,
7,
79,
13,
3,
32,
0,
65,
3,
116,
32,
9,
106,
34,
10,
40,
2,
4,
65,
192,
0,
71,
13,
1,
32,
10,
40,
2,
0,
40,
2,
0,
33,
0,
11,
65,
1,
33,
1,
11,
32,
3,
32,
0,
54,
2,
20,
32,
3,
32,
1,
54,
2,
16,
32,
4,
65,
16,
106,
40,
2,
0,
33,
0,
65,
0,
33,
1,
2,
64,
2,
64,
2,
64,
32,
4,
65,
12,
106,
40,
2,
0,
65,
1,
107,
14,
2,
0,
2,
1,
11,
32,
0,
32,
7,
79,
13,
4,
32,
0,
65,
3,
116,
32,
9,
106,
34,
10,
40,
2,
4,
65,
192,
0,
71,
13,
1,
32,
10,
40,
2,
0,
40,
2,
0,
33,
0,
11,
65,
1,
33,
1,
11,
32,
3,
32,
0,
54,
2,
28,
32,
3,
32,
1,
54,
2,
24,
32,
4,
40,
2,
0,
34,
0,
32,
7,
73,
4,
64,
32,
9,
32,
0,
65,
3,
116,
106,
34,
0,
40,
2,
0,
32,
3,
65,
8,
106,
32,
0,
40,
2,
4,
17,
0,
0,
13,
7,
32,
11,
65,
1,
106,
34,
11,
32,
6,
79,
13,
6,
32,
4,
65,
32,
106,
33,
4,
32,
2,
65,
124,
106,
33,
0,
32,
2,
40,
2,
0,
33,
1,
32,
2,
65,
8,
106,
33,
2,
32,
3,
40,
2,
32,
32,
0,
40,
2,
0,
32,
1,
32,
3,
40,
2,
36,
40,
2,
12,
17,
2,
0,
69,
13,
1,
12,
7,
11,
11,
32,
0,
32,
7,
65,
212,
208,
193,
0,
16,
103,
0,
11,
32,
0,
32,
7,
65,
228,
208,
193,
0,
16,
103,
0,
11,
32,
0,
32,
7,
65,
228,
208,
193,
0,
16,
103,
0,
11,
32,
2,
40,
2,
0,
33,
5,
32,
2,
40,
2,
4,
34,
8,
32,
2,
65,
20,
106,
40,
2,
0,
34,
4,
32,
4,
32,
8,
75,
27,
34,
6,
69,
13,
0,
32,
2,
40,
2,
16,
33,
4,
32,
0,
32,
5,
40,
2,
0,
32,
5,
40,
2,
4,
32,
1,
40,
2,
12,
17,
2,
0,
13,
2,
32,
5,
65,
12,
106,
33,
2,
65,
0,
33,
0,
3,
64,
32,
4,
40,
2,
0,
32,
3,
65,
8,
106,
32,
4,
65,
4,
106,
40,
2,
0,
17,
0,
0,
13,
3,
32,
0,
65,
1,
106,
34,
0,
32,
6,
79,
13,
2,
32,
4,
65,
8,
106,
33,
4,
32,
2,
65,
124,
106,
33,
1,
32,
2,
40,
2,
0,
33,
7,
32,
2,
65,
8,
106,
33,
2,
32,
3,
40,
2,
32,
32,
1,
40,
2,
0,
32,
7,
32,
3,
40,
2,
36,
40,
2,
12,
17,
2,
0,
69,
13,
0,
11,
12,
2,
11,
65,
0,
33,
6,
11,
32,
8,
32,
6,
75,
4,
64,
32,
3,
40,
2,
32,
32,
5,
32,
6,
65,
3,
116,
106,
34,
0,
40,
2,
0,
32,
0,
40,
2,
4,
32,
3,
40,
2,
36,
40,
2,
12,
17,
2,
0,
13,
1,
11,
65,
0,
12,
1,
11,
65,
1,
11,
32,
3,
65,
48,
106,
36,
0,
11,
230,
5,
1,
6,
127,
2,
127,
32,
1,
4,
64,
65,
43,
65,
128,
128,
196,
0,
32,
0,
40,
2,
0,
34,
9,
65,
1,
113,
34,
1,
27,
33,
10,
32,
1,
32,
5,
106,
12,
1,
11,
32,
0,
40,
2,
0,
33,
9,
65,
45,
33,
10,
32,
5,
65,
1,
106,
11,
33,
8,
2,
64,
32,
9,
65,
4,
113,
69,
4,
64,
65,
0,
33,
2,
12,
1,
11,
32,
3,
4,
64,
32,
3,
33,
6,
32,
2,
33,
1,
3,
64,
32,
7,
32,
1,
45,
0,
0,
65,
192,
1,
113,
65,
128,
1,
70,
106,
33,
7,
32,
1,
65,
1,
106,
33,
1,
32,
6,
65,
127,
106,
34,
6,
13,
0,
11,
11,
32,
3,
32,
8,
106,
32,
7,
107,
33,
8,
11,
65,
1,
33,
1,
2,
64,
32,
0,
40,
2,
8,
65,
1,
71,
4,
64,
32,
0,
32,
10,
32,
2,
32,
3,
16,
116,
13,
1,
32,
0,
40,
2,
24,
32,
4,
32,
5,
32,
0,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
33,
1,
12,
1,
11,
32,
0,
65,
12,
106,
40,
2,
0,
34,
6,
32,
8,
77,
4,
64,
32,
0,
32,
10,
32,
2,
32,
3,
16,
116,
13,
1,
32,
0,
40,
2,
24,
32,
4,
32,
5,
32,
0,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
15,
11,
2,
64,
32,
9,
65,
8,
113,
69,
4,
64,
65,
0,
33,
1,
32,
6,
32,
8,
107,
34,
6,
33,
8,
2,
64,
2,
64,
2,
64,
65,
1,
32,
0,
45,
0,
32,
34,
7,
32,
7,
65,
3,
70,
27,
65,
1,
107,
14,
3,
1,
0,
1,
2,
11,
32,
6,
65,
1,
118,
33,
1,
32,
6,
65,
1,
106,
65,
1,
118,
33,
8,
12,
1,
11,
65,
0,
33,
8,
32,
6,
33,
1,
11,
32,
1,
65,
1,
106,
33,
1,
3,
64,
32,
1,
65,
127,
106,
34,
1,
69,
13,
2,
32,
0,
40,
2,
24,
32,
0,
40,
2,
4,
32,
0,
40,
2,
28,
40,
2,
16,
17,
0,
0,
69,
13,
0,
11,
65,
1,
15,
11,
32,
0,
40,
2,
4,
33,
9,
32,
0,
65,
48,
54,
2,
4,
32,
0,
45,
0,
32,
33,
11,
32,
0,
65,
1,
58,
0,
32,
32,
0,
32,
10,
32,
2,
32,
3,
16,
116,
13,
1,
65,
0,
33,
1,
32,
6,
32,
8,
107,
34,
2,
33,
3,
2,
64,
2,
64,
2,
64,
65,
1,
32,
0,
45,
0,
32,
34,
6,
32,
6,
65,
3,
70,
27,
65,
1,
107,
14,
3,
1,
0,
1,
2,
11,
32,
2,
65,
1,
118,
33,
1,
32,
2,
65,
1,
106,
65,
1,
118,
33,
3,
12,
1,
11,
65,
0,
33,
3,
32,
2,
33,
1,
11,
32,
1,
65,
1,
106,
33,
1,
2,
64,
3,
64,
32,
1,
65,
127,
106,
34,
1,
69,
13,
1,
32,
0,
40,
2,
24,
32,
0,
40,
2,
4,
32,
0,
40,
2,
28,
40,
2,
16,
17,
0,
0,
69,
13,
0,
11,
65,
1,
15,
11,
32,
0,
40,
2,
4,
33,
2,
65,
1,
33,
1,
32,
0,
40,
2,
24,
32,
4,
32,
5,
32,
0,
40,
2,
28,
40,
2,
12,
17,
2,
0,
13,
1,
32,
3,
65,
1,
106,
33,
7,
32,
0,
40,
2,
28,
33,
3,
32,
0,
40,
2,
24,
33,
4,
3,
64,
32,
7,
65,
127,
106,
34,
7,
4,
64,
32,
4,
32,
2,
32,
3,
40,
2,
16,
17,
0,
0,
69,
13,
1,
12,
3,
11,
11,
32,
0,
32,
11,
58,
0,
32,
32,
0,
32,
9,
54,
2,
4,
65,
0,
15,
11,
32,
0,
40,
2,
4,
33,
6,
65,
1,
33,
1,
32,
0,
32,
10,
32,
2,
32,
3,
16,
116,
13,
0,
32,
0,
40,
2,
24,
32,
4,
32,
5,
32,
0,
40,
2,
28,
40,
2,
12,
17,
2,
0,
13,
0,
32,
8,
65,
1,
106,
33,
7,
32,
0,
40,
2,
28,
33,
2,
32,
0,
40,
2,
24,
33,
0,
3,
64,
32,
7,
65,
127,
106,
34,
7,
69,
4,
64,
65,
0,
15,
11,
32,
0,
32,
6,
32,
2,
40,
2,
16,
17,
0,
0,
69,
13,
0,
11,
11,
32,
1,
11,
218,
5,
2,
3,
127,
1,
126,
35,
0,
65,
176,
2,
107,
34,
5,
36,
0,
32,
5,
65,
0,
54,
2,
224,
1,
32,
5,
66,
1,
55,
3,
216,
1,
32,
5,
32,
5,
65,
216,
1,
106,
32,
3,
4,
127,
32,
4,
5,
65,
6,
11,
16,
55,
32,
5,
65,
200,
1,
106,
32,
5,
32,
1,
32,
2,
16,
26,
32,
5,
65,
232,
0,
106,
32,
5,
65,
216,
0,
16,
125,
26,
2,
127,
2,
64,
2,
64,
32,
5,
45,
0,
200,
1,
65,
3,
71,
4,
64,
32,
5,
32,
5,
41,
3,
200,
1,
34,
8,
55,
2,
92,
32,
5,
65,
1,
54,
2,
88,
2,
64,
32,
5,
40,
2,
128,
1,
69,
13,
0,
32,
5,
65,
216,
1,
106,
32,
5,
65,
232,
0,
106,
16,
32,
32,
5,
45,
0,
216,
1,
65,
2,
71,
13,
0,
32,
5,
40,
2,
220,
1,
34,
3,
40,
2,
0,
32,
3,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
3,
40,
2,
4,
34,
4,
40,
2,
4,
34,
6,
4,
64,
32,
3,
40,
2,
0,
32,
6,
32,
4,
40,
2,
8,
16,
162,
1,
11,
32,
3,
65,
12,
65,
4,
16,
162,
1,
11,
32,
5,
65,
232,
0,
106,
16,
75,
32,
5,
65,
184,
1,
106,
40,
2,
0,
34,
3,
69,
13,
1,
32,
5,
40,
2,
180,
1,
32,
3,
65,
1,
16,
162,
1,
12,
1,
11,
32,
5,
65,
216,
1,
106,
32,
5,
65,
232,
0,
106,
65,
216,
0,
16,
125,
26,
32,
5,
65,
216,
0,
106,
32,
5,
65,
216,
1,
106,
16,
74,
32,
5,
40,
2,
88,
65,
1,
71,
13,
1,
32,
5,
41,
2,
92,
33,
8,
11,
32,
5,
32,
8,
55,
3,
192,
1,
32,
5,
65,
192,
1,
106,
16,
141,
1,
33,
3,
32,
5,
65,
244,
0,
106,
65,
9,
54,
2,
0,
32,
5,
65,
236,
1,
106,
65,
2,
54,
2,
0,
32,
5,
65,
10,
54,
2,
108,
32,
5,
66,
2,
55,
2,
220,
1,
32,
5,
65,
160,
136,
192,
0,
54,
2,
216,
1,
32,
5,
32,
3,
58,
0,
215,
1,
32,
5,
32,
5,
65,
192,
1,
106,
54,
2,
112,
32,
5,
32,
5,
65,
215,
1,
106,
54,
2,
104,
32,
5,
32,
5,
65,
232,
0,
106,
54,
2,
232,
1,
32,
5,
65,
200,
1,
106,
32,
5,
65,
216,
1,
106,
16,
45,
32,
5,
40,
2,
200,
1,
34,
4,
32,
5,
40,
2,
208,
1,
16,
0,
33,
3,
32,
5,
40,
2,
204,
1,
34,
6,
4,
64,
32,
4,
32,
6,
65,
1,
16,
162,
1,
11,
32,
5,
45,
0,
192,
1,
65,
2,
79,
4,
64,
32,
5,
40,
2,
196,
1,
34,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
4,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
5,
40,
2,
196,
1,
65,
12,
65,
4,
16,
162,
1,
11,
65,
1,
12,
1,
11,
32,
5,
65,
224,
0,
106,
41,
3,
0,
33,
8,
32,
5,
40,
2,
92,
33,
3,
65,
0,
11,
33,
4,
32,
2,
4,
64,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
2,
64,
32,
4,
69,
4,
64,
2,
64,
32,
8,
167,
34,
1,
32,
8,
66,
32,
136,
167,
34,
2,
70,
4,
64,
32,
3,
33,
4,
32,
1,
33,
2,
12,
1,
11,
2,
64,
32,
1,
32,
2,
79,
4,
64,
32,
1,
13,
1,
32,
3,
33,
4,
12,
2,
11,
65,
248,
134,
192,
0,
65,
36,
65,
140,
136,
192,
0,
16,
119,
0,
11,
32,
2,
69,
4,
64,
65,
1,
33,
4,
32,
3,
32,
1,
65,
1,
16,
162,
1,
12,
1,
11,
32,
3,
32,
1,
32,
2,
16,
151,
1,
34,
4,
69,
13,
2,
11,
32,
0,
32,
2,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
32,
5,
65,
176,
2,
106,
36,
0,
15,
11,
32,
3,
16,
174,
1,
0,
11,
32,
2,
65,
1,
16,
171,
1,
0,
11,
220,
5,
1,
11,
127,
35,
0,
65,
208,
0,
107,
34,
4,
36,
0,
2,
64,
2,
64,
2,
64,
32,
3,
4,
64,
32,
1,
65,
24,
106,
33,
10,
32,
1,
65,
48,
106,
33,
12,
32,
1,
65,
200,
0,
106,
33,
11,
32,
4,
65,
16,
106,
65,
4,
114,
33,
13,
32,
1,
65,
212,
0,
106,
33,
8,
32,
1,
65,
32,
106,
33,
9,
3,
64,
2,
64,
32,
11,
40,
2,
0,
69,
4,
64,
32,
8,
40,
2,
0,
34,
5,
69,
13,
1,
32,
10,
40,
2,
0,
4,
64,
3,
64,
32,
1,
40,
2,
76,
33,
6,
32,
10,
32,
9,
40,
2,
0,
32,
5,
16,
85,
32,
9,
40,
2,
0,
34,
7,
32,
1,
40,
2,
24,
106,
32,
5,
32,
6,
32,
5,
16,
80,
32,
9,
32,
5,
32,
7,
106,
54,
2,
0,
32,
8,
40,
2,
0,
34,
6,
32,
5,
73,
13,
6,
32,
8,
65,
0,
54,
2,
0,
32,
6,
32,
5,
107,
34,
6,
69,
13,
3,
32,
1,
40,
2,
76,
34,
7,
32,
5,
32,
7,
106,
32,
6,
16,
99,
32,
8,
32,
6,
54,
2,
0,
32,
6,
33,
5,
32,
1,
40,
2,
24,
13,
0,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
180,
133,
192,
0,
16,
119,
0,
11,
32,
4,
65,
196,
0,
106,
65,
1,
54,
2,
0,
32,
4,
65,
52,
106,
65,
2,
54,
2,
0,
32,
4,
32,
11,
54,
2,
72,
32,
4,
66,
3,
55,
2,
36,
32,
4,
65,
212,
130,
192,
0,
54,
2,
32,
32,
4,
65,
1,
54,
2,
60,
32,
4,
65,
148,
130,
192,
0,
54,
2,
76,
32,
4,
32,
4,
65,
56,
106,
54,
2,
48,
32,
4,
32,
4,
65,
204,
0,
106,
54,
2,
64,
32,
4,
32,
4,
65,
200,
0,
106,
54,
2,
56,
32,
4,
65,
32,
106,
16,
136,
1,
0,
11,
32,
4,
65,
32,
106,
32,
1,
32,
2,
32,
3,
16,
27,
32,
4,
40,
2,
40,
33,
6,
32,
4,
40,
2,
36,
33,
5,
2,
64,
2,
64,
2,
64,
32,
4,
40,
2,
32,
34,
7,
65,
1,
77,
4,
64,
32,
7,
65,
1,
107,
13,
1,
12,
2,
11,
32,
5,
65,
255,
1,
113,
65,
2,
73,
13,
0,
32,
6,
40,
2,
0,
32,
6,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
6,
40,
2,
4,
34,
7,
40,
2,
4,
34,
14,
4,
64,
32,
6,
40,
2,
0,
32,
14,
32,
7,
40,
2,
8,
16,
162,
1,
11,
32,
6,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
32,
5,
73,
13,
5,
32,
12,
32,
2,
32,
5,
16,
149,
1,
32,
4,
65,
0,
54,
2,
16,
32,
4,
32,
5,
54,
2,
20,
32,
5,
69,
4,
64,
32,
4,
65,
8,
106,
65,
252,
128,
192,
0,
65,
28,
16,
78,
32,
4,
65,
32,
106,
65,
14,
32,
4,
40,
2,
8,
32,
4,
40,
2,
12,
16,
94,
32,
0,
32,
4,
41,
3,
32,
55,
2,
0,
12,
7,
11,
32,
2,
32,
5,
106,
33,
2,
32,
3,
32,
5,
107,
33,
3,
12,
1,
11,
32,
4,
65,
1,
54,
2,
16,
32,
4,
32,
5,
173,
32,
6,
173,
66,
32,
134,
132,
55,
2,
20,
32,
13,
16,
141,
1,
65,
255,
1,
113,
65,
15,
71,
4,
64,
32,
0,
32,
4,
41,
2,
20,
55,
2,
0,
12,
6,
11,
32,
4,
40,
2,
16,
69,
13,
0,
32,
4,
45,
0,
20,
65,
2,
73,
13,
0,
32,
4,
40,
2,
24,
34,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
6,
40,
2,
4,
34,
7,
4,
64,
32,
5,
40,
2,
0,
32,
7,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
4,
40,
2,
24,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
13,
0,
11,
11,
32,
0,
65,
3,
58,
0,
0,
12,
2,
11,
32,
5,
32,
6,
16,
102,
0,
11,
32,
5,
32,
3,
65,
232,
131,
192,
0,
16,
104,
0,
11,
32,
4,
65,
208,
0,
106,
36,
0,
11,
207,
4,
2,
8,
127,
1,
126,
35,
0,
65,
32,
107,
34,
6,
36,
0,
2,
64,
2,
64,
2,
64,
32,
1,
65,
44,
106,
40,
2,
0,
34,
4,
69,
13,
0,
32,
1,
40,
2,
24,
4,
64,
32,
1,
65,
24,
106,
33,
10,
32,
1,
65,
32,
106,
33,
7,
32,
1,
65,
44,
106,
33,
8,
3,
64,
32,
1,
40,
2,
36,
33,
5,
32,
10,
32,
7,
40,
2,
0,
32,
4,
16,
85,
32,
7,
40,
2,
0,
34,
9,
32,
1,
40,
2,
24,
106,
32,
4,
32,
5,
32,
4,
16,
80,
32,
7,
32,
4,
32,
9,
106,
54,
2,
0,
32,
8,
40,
2,
0,
34,
5,
32,
4,
73,
13,
3,
32,
8,
65,
0,
54,
2,
0,
32,
5,
32,
4,
107,
34,
5,
69,
13,
2,
32,
1,
40,
2,
36,
34,
9,
32,
4,
32,
9,
106,
32,
5,
16,
99,
32,
8,
32,
5,
54,
2,
0,
32,
5,
33,
4,
32,
1,
40,
2,
24,
13,
0,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
164,
133,
192,
0,
16,
119,
0,
11,
32,
1,
65,
36,
106,
33,
10,
2,
64,
32,
3,
4,
64,
32,
1,
65,
24,
106,
33,
9,
32,
1,
65,
44,
106,
33,
7,
32,
1,
65,
32,
106,
33,
8,
3,
64,
32,
1,
41,
3,
0,
33,
12,
32,
6,
65,
8,
106,
32,
1,
32,
2,
32,
3,
32,
10,
65,
0,
16,
54,
32,
6,
45,
0,
8,
33,
4,
32,
1,
41,
3,
0,
32,
12,
125,
34,
12,
167,
13,
2,
66,
0,
33,
12,
32,
4,
65,
255,
1,
113,
13,
2,
32,
6,
45,
0,
9,
65,
2,
70,
13,
2,
32,
7,
40,
2,
0,
34,
4,
69,
13,
0,
32,
9,
40,
2,
0,
4,
64,
3,
64,
32,
1,
40,
2,
36,
33,
5,
32,
9,
32,
8,
40,
2,
0,
32,
4,
16,
85,
32,
8,
40,
2,
0,
34,
11,
32,
1,
40,
2,
24,
106,
32,
4,
32,
5,
32,
4,
16,
80,
32,
8,
32,
4,
32,
11,
106,
54,
2,
0,
32,
7,
40,
2,
0,
34,
5,
32,
4,
73,
13,
6,
32,
7,
65,
0,
54,
2,
0,
32,
5,
32,
4,
107,
34,
5,
69,
13,
2,
32,
1,
40,
2,
36,
34,
11,
32,
4,
32,
11,
106,
32,
5,
16,
99,
32,
7,
32,
5,
54,
2,
0,
32,
5,
33,
4,
32,
1,
40,
2,
24,
13,
0,
11,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
164,
133,
192,
0,
16,
119,
0,
11,
32,
1,
41,
3,
0,
33,
12,
32,
6,
65,
8,
106,
32,
1,
32,
2,
65,
0,
32,
10,
65,
0,
16,
54,
32,
1,
41,
3,
0,
32,
12,
125,
33,
12,
32,
6,
45,
0,
8,
33,
4,
11,
65,
1,
33,
1,
2,
64,
32,
4,
65,
255,
1,
113,
65,
1,
70,
4,
64,
32,
6,
65,
140,
133,
192,
0,
65,
22,
16,
78,
32,
6,
65,
24,
106,
65,
11,
32,
6,
40,
2,
0,
32,
6,
40,
2,
4,
16,
94,
32,
0,
32,
6,
41,
3,
24,
55,
2,
4,
12,
1,
11,
32,
0,
32,
12,
62,
2,
4,
65,
0,
33,
1,
11,
32,
0,
32,
1,
54,
2,
0,
32,
6,
65,
32,
106,
36,
0,
15,
11,
32,
4,
32,
5,
16,
102,
0,
11,
32,
4,
32,
5,
16,
102,
0,
11,
207,
4,
2,
8,
127,
1,
126,
35,
0,
65,
32,
107,
34,
6,
36,
0,
2,
64,
2,
64,
2,
64,
32,
1,
65,
44,
106,
40,
2,
0,
34,
4,
69,
13,
0,
32,
1,
40,
2,
24,
4,
64,
32,
1,
65,
24,
106,
33,
10,
32,
1,
65,
32,
106,
33,
7,
32,
1,
65,
44,
106,
33,
8,
3,
64,
32,
1,
40,
2,
36,
33,
5,
32,
10,
32,
7,
40,
2,
0,
32,
4,
16,
85,
32,
7,
40,
2,
0,
34,
9,
32,
1,
40,
2,
24,
106,
32,
4,
32,
5,
32,
4,
16,
80,
32,
7,
32,
4,
32,
9,
106,
54,
2,
0,
32,
8,
40,
2,
0,
34,
5,
32,
4,
73,
13,
3,
32,
8,
65,
0,
54,
2,
0,
32,
5,
32,
4,
107,
34,
5,
69,
13,
2,
32,
1,
40,
2,
36,
34,
9,
32,
4,
32,
9,
106,
32,
5,
16,
99,
32,
8,
32,
5,
54,
2,
0,
32,
5,
33,
4,
32,
1,
40,
2,
24,
13,
0,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
164,
133,
192,
0,
16,
119,
0,
11,
32,
1,
65,
36,
106,
33,
10,
2,
64,
32,
3,
4,
64,
32,
1,
65,
24,
106,
33,
9,
32,
1,
65,
44,
106,
33,
7,
32,
1,
65,
32,
106,
33,
8,
3,
64,
32,
1,
41,
3,
0,
33,
12,
32,
6,
65,
8,
106,
32,
1,
32,
2,
32,
3,
32,
10,
65,
0,
16,
114,
32,
6,
45,
0,
8,
33,
4,
32,
1,
41,
3,
0,
32,
12,
125,
34,
12,
167,
13,
2,
66,
0,
33,
12,
32,
4,
65,
255,
1,
113,
13,
2,
32,
6,
45,
0,
9,
65,
2,
70,
13,
2,
32,
7,
40,
2,
0,
34,
4,
69,
13,
0,
32,
9,
40,
2,
0,
4,
64,
3,
64,
32,
1,
40,
2,
36,
33,
5,
32,
9,
32,
8,
40,
2,
0,
32,
4,
16,
85,
32,
8,
40,
2,
0,
34,
11,
32,
1,
40,
2,
24,
106,
32,
4,
32,
5,
32,
4,
16,
80,
32,
8,
32,
4,
32,
11,
106,
54,
2,
0,
32,
7,
40,
2,
0,
34,
5,
32,
4,
73,
13,
6,
32,
7,
65,
0,
54,
2,
0,
32,
5,
32,
4,
107,
34,
5,
69,
13,
2,
32,
1,
40,
2,
36,
34,
11,
32,
4,
32,
11,
106,
32,
5,
16,
99,
32,
7,
32,
5,
54,
2,
0,
32,
5,
33,
4,
32,
1,
40,
2,
24,
13,
0,
11,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
164,
133,
192,
0,
16,
119,
0,
11,
32,
1,
41,
3,
0,
33,
12,
32,
6,
65,
8,
106,
32,
1,
32,
2,
65,
0,
32,
10,
65,
0,
16,
114,
32,
1,
41,
3,
0,
32,
12,
125,
33,
12,
32,
6,
45,
0,
8,
33,
4,
11,
65,
1,
33,
1,
2,
64,
32,
4,
65,
255,
1,
113,
65,
1,
70,
4,
64,
32,
6,
65,
140,
133,
192,
0,
65,
22,
16,
78,
32,
6,
65,
24,
106,
65,
11,
32,
6,
40,
2,
0,
32,
6,
40,
2,
4,
16,
94,
32,
0,
32,
6,
41,
3,
24,
55,
2,
4,
12,
1,
11,
32,
0,
32,
12,
62,
2,
4,
65,
0,
33,
1,
11,
32,
0,
32,
1,
54,
2,
0,
32,
6,
65,
32,
106,
36,
0,
15,
11,
32,
4,
32,
5,
16,
102,
0,
11,
32,
4,
32,
5,
16,
102,
0,
11,
208,
5,
1,
3,
127,
35,
0,
65,
64,
106,
34,
2,
36,
0,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
0,
45,
0,
0,
65,
1,
107,
14,
2,
0,
2,
1,
11,
65,
211,
196,
193,
0,
33,
3,
65,
22,
33,
4,
2,
64,
2,
127,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
0,
45,
0,
1,
65,
1,
107,
14,
17,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
18,
0,
11,
65,
236,
198,
193,
0,
33,
3,
65,
16,
33,
4,
12,
17,
11,
65,
219,
198,
193,
0,
33,
3,
65,
17,
33,
4,
12,
16,
11,
65,
201,
198,
193,
0,
33,
3,
65,
18,
33,
4,
12,
15,
11,
65,
185,
198,
193,
0,
33,
3,
65,
16,
33,
4,
12,
14,
11,
65,
167,
198,
193,
0,
33,
3,
65,
18,
33,
4,
12,
13,
11,
65,
154,
198,
193,
0,
33,
3,
65,
13,
33,
4,
12,
12,
11,
65,
140,
198,
193,
0,
12,
10,
11,
65,
247,
197,
193,
0,
33,
3,
65,
21,
33,
4,
12,
10,
11,
65,
236,
197,
193,
0,
33,
3,
65,
11,
33,
4,
12,
9,
11,
65,
215,
197,
193,
0,
33,
3,
65,
21,
33,
4,
12,
8,
11,
65,
194,
197,
193,
0,
33,
3,
65,
21,
33,
4,
12,
7,
11,
65,
171,
197,
193,
0,
33,
3,
65,
23,
33,
4,
12,
6,
11,
65,
159,
197,
193,
0,
33,
3,
65,
12,
33,
4,
12,
5,
11,
65,
150,
197,
193,
0,
33,
3,
65,
9,
33,
4,
12,
4,
11,
65,
140,
197,
193,
0,
33,
3,
65,
10,
33,
4,
12,
3,
11,
65,
247,
196,
193,
0,
33,
3,
65,
21,
33,
4,
12,
2,
11,
65,
233,
196,
193,
0,
11,
33,
3,
65,
14,
33,
4,
11,
32,
2,
65,
60,
106,
65,
1,
54,
2,
0,
32,
2,
32,
4,
54,
2,
28,
32,
2,
32,
3,
54,
2,
24,
32,
2,
65,
41,
54,
2,
12,
32,
2,
66,
1,
55,
2,
44,
32,
2,
65,
252,
198,
193,
0,
54,
2,
40,
32,
2,
32,
2,
65,
24,
106,
54,
2,
8,
32,
2,
32,
2,
65,
8,
106,
54,
2,
56,
32,
1,
32,
2,
65,
40,
106,
16,
107,
33,
0,
12,
2,
11,
32,
2,
32,
0,
65,
4,
106,
40,
2,
0,
54,
2,
4,
65,
20,
65,
1,
16,
156,
1,
34,
0,
69,
13,
2,
32,
2,
66,
20,
55,
2,
44,
32,
2,
32,
0,
54,
2,
40,
32,
2,
65,
40,
106,
65,
20,
16,
84,
32,
2,
40,
2,
48,
34,
3,
32,
2,
40,
2,
40,
106,
34,
0,
65,
216,
201,
193,
0,
41,
0,
0,
55,
0,
0,
32,
0,
65,
8,
106,
65,
224,
201,
193,
0,
41,
0,
0,
55,
0,
0,
32,
0,
65,
16,
106,
65,
232,
201,
193,
0,
40,
0,
0,
54,
0,
0,
32,
2,
65,
16,
106,
32,
3,
65,
20,
106,
54,
2,
0,
32,
2,
32,
2,
41,
3,
40,
55,
3,
8,
32,
2,
65,
60,
106,
65,
2,
54,
2,
0,
32,
2,
65,
36,
106,
65,
42,
54,
2,
0,
32,
2,
66,
3,
55,
2,
44,
32,
2,
65,
144,
199,
193,
0,
54,
2,
40,
32,
2,
65,
43,
54,
2,
28,
32,
2,
32,
2,
65,
24,
106,
54,
2,
56,
32,
2,
32,
2,
65,
4,
106,
54,
2,
32,
32,
2,
32,
2,
65,
8,
106,
54,
2,
24,
32,
1,
32,
2,
65,
40,
106,
16,
107,
33,
0,
32,
2,
40,
2,
8,
34,
1,
69,
13,
1,
32,
2,
40,
2,
12,
34,
3,
69,
13,
1,
32,
1,
32,
3,
65,
1,
16,
162,
1,
12,
1,
11,
32,
0,
65,
4,
106,
40,
2,
0,
34,
0,
40,
2,
0,
32,
1,
32,
0,
40,
2,
4,
40,
2,
32,
17,
0,
0,
33,
0,
11,
32,
2,
65,
64,
107,
36,
0,
32,
0,
15,
11,
65,
20,
16,
168,
1,
0,
11,
177,
4,
1,
8,
127,
2,
64,
32,
2,
40,
2,
0,
34,
5,
4,
64,
32,
1,
65,
127,
106,
33,
10,
32,
0,
65,
2,
116,
33,
9,
65,
0,
32,
1,
107,
33,
11,
3,
64,
32,
5,
65,
8,
106,
33,
6,
32,
5,
40,
2,
8,
34,
7,
65,
1,
113,
4,
64,
3,
64,
32,
6,
32,
7,
65,
126,
113,
54,
2,
0,
2,
127,
65,
0,
32,
5,
40,
2,
4,
34,
7,
65,
124,
113,
34,
6,
69,
13,
0,
26,
65,
0,
32,
6,
32,
6,
45,
0,
0,
65,
1,
113,
27,
11,
33,
1,
2,
64,
32,
5,
40,
2,
0,
34,
8,
65,
124,
113,
34,
12,
69,
13,
0,
65,
0,
32,
12,
32,
8,
65,
2,
113,
27,
34,
8,
69,
13,
0,
32,
8,
32,
8,
40,
2,
4,
65,
3,
113,
32,
6,
114,
54,
2,
4,
32,
5,
40,
2,
4,
34,
7,
65,
124,
113,
33,
6,
11,
32,
5,
32,
6,
4,
127,
32,
6,
32,
6,
40,
2,
0,
65,
3,
113,
32,
5,
40,
2,
0,
65,
124,
113,
114,
54,
2,
0,
32,
5,
40,
2,
4,
5,
32,
7,
11,
65,
3,
113,
54,
2,
4,
32,
5,
32,
5,
40,
2,
0,
34,
5,
65,
3,
113,
54,
2,
0,
32,
5,
65,
2,
113,
4,
64,
32,
1,
32,
1,
40,
2,
0,
65,
2,
114,
54,
2,
0,
11,
32,
2,
32,
1,
54,
2,
0,
32,
1,
65,
8,
106,
33,
6,
32,
1,
34,
5,
40,
2,
8,
34,
7,
65,
1,
113,
13,
0,
11,
11,
2,
64,
32,
5,
40,
2,
0,
65,
124,
113,
34,
1,
32,
6,
107,
32,
9,
73,
13,
0,
32,
6,
32,
3,
32,
0,
32,
4,
40,
2,
16,
17,
0,
0,
65,
2,
116,
106,
65,
8,
106,
32,
1,
32,
9,
107,
32,
11,
113,
34,
1,
75,
4,
64,
32,
6,
32,
10,
113,
13,
1,
32,
2,
32,
6,
40,
2,
0,
65,
124,
113,
54,
2,
0,
32,
5,
33,
1,
12,
4,
11,
32,
1,
65,
0,
54,
2,
0,
32,
1,
65,
120,
106,
34,
1,
66,
0,
55,
2,
0,
32,
1,
32,
5,
40,
2,
0,
65,
124,
113,
54,
2,
0,
2,
64,
32,
5,
40,
2,
0,
34,
0,
65,
124,
113,
34,
2,
69,
13,
0,
65,
0,
32,
2,
32,
0,
65,
2,
113,
27,
34,
0,
69,
13,
0,
32,
0,
32,
0,
40,
2,
4,
65,
3,
113,
32,
1,
114,
54,
2,
4,
11,
32,
1,
32,
1,
40,
2,
4,
65,
3,
113,
32,
5,
114,
54,
2,
4,
32,
5,
32,
5,
40,
2,
0,
65,
3,
113,
32,
1,
114,
54,
2,
0,
32,
6,
32,
6,
40,
2,
0,
65,
126,
113,
54,
2,
0,
32,
5,
40,
2,
0,
34,
0,
65,
2,
113,
69,
13,
3,
32,
5,
32,
0,
65,
125,
113,
54,
2,
0,
32,
1,
32,
1,
40,
2,
0,
65,
2,
114,
54,
2,
0,
12,
3,
11,
32,
2,
32,
5,
40,
2,
8,
34,
5,
54,
2,
0,
32,
5,
13,
0,
11,
11,
65,
0,
15,
11,
32,
1,
32,
1,
40,
2,
0,
65,
1,
114,
54,
2,
0,
32,
1,
65,
8,
106,
11,
185,
5,
2,
4,
127,
1,
126,
65,
1,
32,
1,
40,
2,
24,
65,
39,
32,
1,
65,
28,
106,
40,
2,
0,
40,
2,
16,
17,
0,
0,
69,
4,
64,
65,
2,
33,
2,
2,
64,
2,
64,
2,
64,
32,
0,
40,
2,
0,
34,
0,
65,
119,
106,
34,
4,
65,
30,
75,
4,
64,
32,
0,
65,
220,
0,
71,
13,
1,
12,
2,
11,
65,
244,
0,
33,
3,
2,
64,
2,
64,
32,
4,
65,
1,
107,
14,
30,
1,
2,
2,
0,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
2,
2,
2,
2,
3,
4,
11,
65,
242,
0,
33,
3,
12,
3,
11,
65,
238,
0,
33,
3,
12,
2,
11,
2,
64,
2,
126,
32,
0,
16,
38,
69,
4,
64,
2,
64,
2,
64,
32,
0,
65,
128,
128,
4,
79,
4,
64,
32,
0,
65,
128,
128,
8,
73,
13,
1,
32,
0,
65,
144,
252,
71,
106,
65,
144,
252,
11,
73,
32,
0,
65,
181,
217,
115,
106,
65,
181,
219,
43,
73,
114,
32,
0,
65,
226,
139,
116,
106,
65,
226,
11,
73,
32,
0,
65,
159,
168,
116,
106,
65,
159,
24,
73,
114,
114,
32,
0,
65,
254,
255,
255,
0,
113,
65,
158,
240,
10,
70,
32,
0,
65,
222,
226,
116,
106,
65,
14,
73,
114,
32,
0,
65,
162,
178,
117,
106,
65,
34,
73,
114,
114,
13,
2,
32,
0,
65,
203,
145,
117,
106,
65,
10,
75,
13,
5,
12,
2,
11,
32,
0,
65,
160,
213,
193,
0,
65,
41,
65,
242,
213,
193,
0,
65,
162,
2,
65,
148,
216,
193,
0,
65,
181,
2,
16,
41,
69,
13,
1,
12,
4,
11,
32,
0,
65,
201,
218,
193,
0,
65,
38,
65,
149,
219,
193,
0,
65,
175,
1,
65,
196,
220,
193,
0,
65,
163,
3,
16,
41,
13,
3,
11,
32,
0,
65,
1,
114,
103,
65,
2,
118,
65,
7,
115,
173,
66,
128,
128,
128,
128,
208,
0,
132,
12,
1,
11,
32,
0,
65,
1,
114,
103,
65,
2,
118,
65,
7,
115,
173,
66,
128,
128,
128,
128,
208,
0,
132,
11,
33,
6,
65,
3,
33,
2,
12,
1,
11,
65,
1,
33,
2,
11,
32,
0,
33,
3,
11,
3,
64,
32,
2,
33,
4,
65,
220,
0,
33,
0,
65,
1,
33,
2,
2,
64,
2,
126,
2,
64,
2,
64,
2,
64,
2,
64,
32,
4,
65,
1,
107,
14,
3,
1,
5,
0,
2,
11,
2,
64,
2,
64,
2,
64,
2,
64,
32,
6,
66,
32,
136,
167,
65,
255,
1,
113,
65,
1,
107,
14,
5,
3,
2,
1,
0,
6,
5,
11,
65,
245,
0,
33,
0,
32,
6,
66,
255,
255,
255,
255,
143,
96,
131,
66,
128,
128,
128,
128,
48,
132,
12,
6,
11,
65,
251,
0,
33,
0,
32,
6,
66,
255,
255,
255,
255,
143,
96,
131,
66,
128,
128,
128,
128,
32,
132,
12,
5,
11,
32,
3,
32,
6,
167,
34,
2,
65,
2,
116,
65,
28,
113,
118,
65,
15,
113,
34,
0,
65,
48,
114,
32,
0,
65,
215,
0,
106,
32,
0,
65,
10,
73,
27,
33,
0,
32,
6,
66,
127,
124,
66,
255,
255,
255,
255,
15,
131,
32,
6,
66,
128,
128,
128,
128,
112,
131,
132,
32,
2,
13,
4,
26,
32,
6,
66,
255,
255,
255,
255,
143,
96,
131,
66,
128,
128,
128,
128,
16,
132,
12,
4,
11,
65,
253,
0,
33,
0,
32,
6,
66,
255,
255,
255,
255,
143,
96,
131,
12,
3,
11,
65,
0,
33,
2,
32,
3,
33,
0,
12,
3,
11,
32,
1,
40,
2,
24,
65,
39,
32,
1,
40,
2,
28,
40,
2,
16,
17,
0,
0,
15,
11,
32,
6,
66,
255,
255,
255,
255,
143,
96,
131,
66,
128,
128,
128,
128,
192,
0,
132,
11,
33,
6,
65,
3,
33,
2,
11,
32,
1,
40,
2,
24,
32,
0,
32,
1,
40,
2,
28,
40,
2,
16,
17,
0,
0,
69,
13,
0,
11,
11,
11,
199,
4,
1,
7,
127,
35,
0,
65,
16,
107,
34,
4,
36,
0,
2,
64,
2,
64,
2,
64,
2,
64,
32,
1,
65,
212,
0,
106,
40,
2,
0,
34,
2,
69,
13,
0,
32,
1,
40,
2,
24,
4,
64,
32,
1,
65,
24,
106,
33,
8,
32,
1,
65,
32,
106,
33,
5,
32,
1,
65,
212,
0,
106,
33,
6,
3,
64,
32,
1,
40,
2,
76,
33,
3,
32,
8,
32,
5,
40,
2,
0,
32,
2,
16,
85,
32,
5,
40,
2,
0,
34,
7,
32,
1,
40,
2,
24,
106,
32,
2,
32,
3,
32,
2,
16,
80,
32,
5,
32,
2,
32,
7,
106,
54,
2,
0,
32,
6,
40,
2,
0,
34,
3,
32,
2,
73,
13,
3,
32,
6,
65,
0,
54,
2,
0,
32,
3,
32,
2,
107,
34,
3,
69,
13,
2,
32,
1,
40,
2,
76,
34,
7,
32,
2,
32,
7,
106,
32,
3,
16,
99,
32,
6,
32,
3,
54,
2,
0,
32,
3,
33,
2,
32,
1,
40,
2,
24,
13,
0,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
180,
133,
192,
0,
16,
119,
0,
11,
32,
4,
65,
8,
106,
32,
1,
16,
58,
32,
4,
40,
2,
12,
33,
2,
2,
64,
32,
4,
40,
2,
8,
34,
3,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
3,
65,
3,
113,
65,
2,
70,
4,
64,
32,
2,
40,
2,
0,
32,
2,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
2,
40,
2,
4,
34,
3,
40,
2,
4,
34,
5,
4,
64,
32,
2,
40,
2,
0,
32,
5,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
2,
65,
12,
65,
4,
16,
162,
1,
11,
32,
1,
40,
2,
72,
65,
7,
77,
4,
64,
32,
1,
65,
24,
106,
33,
6,
32,
1,
65,
48,
106,
33,
8,
32,
1,
65,
32,
106,
33,
3,
3,
64,
32,
8,
16,
154,
1,
33,
2,
32,
4,
32,
8,
40,
2,
16,
34,
5,
65,
24,
118,
58,
0,
15,
32,
4,
32,
5,
65,
16,
118,
58,
0,
14,
32,
4,
32,
5,
65,
8,
118,
58,
0,
13,
32,
4,
32,
5,
58,
0,
12,
32,
4,
32,
2,
65,
24,
118,
58,
0,
11,
32,
4,
32,
2,
65,
16,
118,
58,
0,
10,
32,
4,
32,
2,
65,
8,
118,
58,
0,
9,
32,
4,
32,
2,
58,
0,
8,
32,
6,
40,
2,
0,
69,
13,
5,
32,
1,
40,
2,
72,
34,
5,
65,
9,
79,
13,
6,
32,
6,
32,
3,
40,
2,
0,
65,
8,
32,
5,
107,
34,
2,
16,
85,
32,
3,
40,
2,
0,
34,
7,
32,
1,
40,
2,
24,
106,
32,
2,
32,
4,
65,
8,
106,
32,
5,
106,
32,
2,
16,
80,
32,
3,
32,
2,
32,
7,
106,
54,
2,
0,
32,
1,
32,
1,
40,
2,
72,
32,
2,
106,
34,
2,
54,
2,
72,
32,
2,
65,
8,
73,
13,
0,
11,
11,
32,
0,
65,
3,
58,
0,
0,
12,
1,
11,
32,
0,
32,
3,
173,
32,
2,
173,
66,
32,
134,
132,
55,
2,
0,
11,
32,
4,
65,
16,
106,
36,
0,
15,
11,
32,
2,
32,
3,
16,
102,
0,
11,
65,
248,
131,
192,
0,
65,
43,
65,
180,
133,
192,
0,
16,
119,
0,
11,
32,
5,
65,
8,
65,
244,
129,
192,
0,
16,
105,
0,
11,
192,
4,
1,
6,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
32,
1,
65,
1,
32,
1,
27,
33,
1,
2,
64,
32,
0,
4,
64,
32,
0,
65,
3,
106,
34,
3,
65,
2,
118,
33,
4,
2,
64,
32,
1,
65,
4,
75,
13,
0,
32,
4,
65,
127,
106,
34,
0,
65,
255,
1,
75,
13,
0,
32,
2,
65,
248,
230,
193,
0,
54,
2,
20,
32,
2,
32,
0,
65,
2,
116,
65,
252,
230,
193,
0,
106,
34,
7,
40,
2,
0,
54,
2,
24,
2,
64,
32,
4,
32,
1,
32,
2,
65,
24,
106,
32,
2,
65,
20,
106,
65,
160,
143,
192,
0,
16,
30,
34,
0,
13,
0,
32,
2,
32,
2,
40,
2,
20,
34,
5,
40,
2,
0,
54,
2,
28,
2,
64,
32,
4,
65,
2,
106,
34,
0,
32,
0,
108,
34,
0,
65,
128,
16,
32,
0,
65,
128,
16,
75,
27,
34,
6,
65,
4,
32,
2,
65,
28,
106,
65,
240,
142,
192,
0,
65,
240,
142,
192,
0,
16,
30,
34,
3,
4,
64,
32,
5,
32,
2,
40,
2,
28,
54,
2,
0,
12,
1,
11,
65,
0,
33,
0,
32,
2,
65,
8,
106,
65,
240,
142,
192,
0,
32,
6,
65,
4,
65,
252,
142,
192,
0,
40,
2,
0,
17,
5,
0,
32,
2,
40,
2,
8,
4,
64,
32,
5,
32,
2,
40,
2,
28,
54,
2,
0,
12,
2,
11,
32,
2,
40,
2,
12,
34,
3,
32,
2,
40,
2,
28,
54,
2,
8,
32,
2,
32,
3,
54,
2,
28,
32,
6,
65,
4,
32,
2,
65,
28,
106,
65,
240,
142,
192,
0,
65,
240,
142,
192,
0,
16,
30,
33,
3,
32,
5,
32,
2,
40,
2,
28,
54,
2,
0,
32,
3,
69,
13,
1,
11,
32,
3,
65,
0,
54,
2,
4,
32,
3,
32,
2,
40,
2,
24,
54,
2,
8,
32,
3,
32,
3,
32,
6,
65,
2,
116,
106,
65,
2,
114,
54,
2,
0,
32,
2,
32,
3,
54,
2,
24,
32,
4,
32,
1,
32,
2,
65,
24,
106,
32,
2,
65,
20,
106,
65,
160,
143,
192,
0,
16,
30,
33,
0,
11,
32,
7,
32,
2,
40,
2,
24,
54,
2,
0,
12,
2,
11,
32,
2,
65,
248,
230,
193,
0,
40,
2,
0,
54,
2,
28,
2,
64,
32,
4,
32,
1,
32,
2,
65,
28,
106,
65,
136,
143,
192,
0,
65,
136,
143,
192,
0,
16,
30,
34,
0,
13,
0,
32,
3,
65,
124,
113,
34,
0,
32,
1,
65,
3,
116,
65,
128,
128,
1,
106,
34,
3,
32,
0,
32,
3,
75,
27,
65,
135,
128,
4,
106,
34,
3,
65,
16,
118,
64,
0,
34,
0,
65,
127,
70,
4,
64,
65,
0,
33,
0,
12,
1,
11,
32,
0,
65,
16,
116,
34,
0,
32,
0,
32,
3,
65,
128,
128,
124,
113,
106,
65,
2,
114,
54,
2,
0,
32,
0,
65,
0,
54,
2,
4,
32,
0,
32,
2,
40,
2,
28,
54,
2,
8,
32,
2,
32,
0,
54,
2,
28,
32,
4,
32,
1,
32,
2,
65,
28,
106,
65,
136,
143,
192,
0,
65,
136,
143,
192,
0,
16,
30,
33,
0,
11,
65,
248,
230,
193,
0,
32,
2,
40,
2,
28,
54,
2,
0,
12,
1,
11,
32,
1,
33,
0,
11,
32,
2,
65,
32,
106,
36,
0,
32,
0,
11,
146,
4,
1,
7,
127,
35,
0,
65,
48,
107,
34,
3,
36,
0,
2,
127,
65,
0,
32,
2,
69,
13,
0,
26,
32,
3,
65,
40,
106,
33,
8,
2,
64,
2,
64,
2,
64,
2,
64,
3,
64,
32,
0,
40,
2,
8,
45,
0,
0,
4,
64,
32,
0,
40,
2,
0,
65,
156,
206,
193,
0,
65,
4,
32,
0,
40,
2,
4,
40,
2,
12,
17,
2,
0,
13,
5,
11,
32,
3,
65,
10,
54,
2,
40,
32,
3,
66,
138,
128,
128,
128,
16,
55,
3,
32,
32,
3,
32,
2,
54,
2,
28,
32,
3,
65,
0,
54,
2,
24,
32,
3,
32,
2,
54,
2,
20,
32,
3,
32,
1,
54,
2,
16,
32,
3,
65,
8,
106,
65,
10,
32,
1,
32,
2,
16,
43,
2,
127,
2,
64,
2,
64,
32,
3,
40,
2,
8,
65,
1,
70,
4,
64,
32,
3,
40,
2,
12,
33,
4,
3,
64,
32,
3,
32,
4,
32,
3,
40,
2,
24,
106,
65,
1,
106,
34,
4,
54,
2,
24,
2,
64,
32,
4,
32,
3,
40,
2,
36,
34,
5,
73,
4,
64,
32,
3,
40,
2,
20,
33,
7,
12,
1,
11,
32,
3,
40,
2,
20,
34,
7,
32,
4,
73,
13,
0,
32,
5,
65,
5,
79,
13,
7,
32,
4,
32,
5,
107,
34,
6,
32,
3,
40,
2,
16,
106,
34,
9,
32,
8,
70,
13,
4,
32,
9,
32,
8,
32,
5,
16,
115,
69,
13,
4,
11,
32,
3,
40,
2,
28,
34,
6,
32,
4,
73,
32,
7,
32,
6,
73,
114,
13,
2,
32,
3,
32,
3,
32,
5,
106,
65,
39,
106,
45,
0,
0,
32,
3,
40,
2,
16,
32,
4,
106,
32,
6,
32,
4,
107,
16,
43,
32,
3,
40,
2,
4,
33,
4,
32,
3,
40,
2,
0,
65,
1,
70,
13,
0,
11,
11,
32,
3,
32,
3,
40,
2,
28,
54,
2,
24,
11,
32,
0,
40,
2,
8,
65,
0,
58,
0,
0,
32,
2,
12,
1,
11,
32,
0,
40,
2,
8,
65,
1,
58,
0,
0,
32,
6,
65,
1,
106,
11,
33,
4,
32,
0,
40,
2,
4,
33,
5,
32,
0,
40,
2,
0,
32,
4,
69,
32,
2,
32,
4,
70,
114,
34,
6,
69,
4,
64,
32,
2,
32,
4,
77,
13,
3,
32,
1,
32,
4,
106,
44,
0,
0,
65,
191,
127,
76,
13,
3,
11,
32,
1,
32,
4,
32,
5,
40,
2,
12,
17,
2,
0,
13,
4,
32,
6,
69,
4,
64,
32,
2,
32,
4,
77,
13,
4,
32,
1,
32,
4,
106,
44,
0,
0,
65,
191,
127,
76,
13,
4,
11,
32,
1,
32,
4,
106,
33,
1,
32,
2,
32,
4,
107,
34,
2,
13,
0,
11,
65,
0,
12,
4,
11,
32,
5,
65,
4,
65,
168,
210,
193,
0,
16,
104,
0,
11,
32,
1,
32,
2,
65,
0,
32,
4,
65,
224,
210,
193,
0,
16,
14,
0,
11,
32,
1,
32,
2,
32,
4,
32,
2,
65,
240,
210,
193,
0,
16,
14,
0,
11,
65,
1,
11,
32,
3,
65,
48,
106,
36,
0,
11,
150,
4,
2,
7,
127,
1,
126,
35,
0,
34,
3,
33,
6,
32,
3,
65,
32,
107,
65,
96,
113,
34,
3,
36,
0,
32,
3,
32,
1,
16,
72,
32,
3,
40,
2,
4,
33,
4,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
3,
40,
2,
0,
34,
2,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
2,
65,
3,
113,
65,
2,
70,
4,
64,
32,
4,
40,
2,
0,
32,
4,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
4,
40,
2,
4,
34,
2,
40,
2,
4,
34,
5,
4,
64,
32,
4,
40,
2,
0,
32,
5,
32,
2,
40,
2,
8,
16,
162,
1,
11,
32,
4,
65,
12,
65,
4,
16,
162,
1,
11,
2,
64,
32,
1,
65,
216,
0,
106,
40,
2,
0,
65,
8,
71,
13,
0,
32,
1,
40,
2,
24,
69,
13,
2,
32,
1,
40,
2,
80,
34,
2,
45,
0,
7,
33,
4,
32,
2,
45,
0,
6,
33,
5,
32,
2,
45,
0,
5,
33,
7,
32,
2,
45,
0,
4,
33,
8,
32,
2,
40,
0,
0,
32,
1,
16,
154,
1,
71,
13,
0,
32,
1,
40,
2,
24,
69,
13,
3,
32,
1,
40,
2,
16,
32,
7,
65,
8,
116,
32,
8,
114,
32,
5,
65,
16,
116,
114,
32,
4,
65,
24,
116,
114,
70,
13,
5,
11,
32,
3,
16,
132,
1,
32,
3,
41,
3,
0,
34,
9,
167,
33,
2,
12,
3,
11,
32,
4,
173,
66,
32,
134,
33,
9,
12,
2,
11,
65,
248,
131,
192,
0,
65,
43,
65,
196,
133,
192,
0,
16,
119,
0,
11,
65,
248,
131,
192,
0,
65,
43,
65,
196,
133,
192,
0,
16,
119,
0,
11,
32,
2,
65,
255,
1,
113,
65,
3,
71,
13,
1,
32,
2,
65,
3,
113,
65,
2,
71,
13,
0,
32,
9,
66,
32,
136,
167,
34,
2,
40,
2,
0,
32,
2,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
2,
40,
2,
4,
34,
4,
40,
2,
4,
34,
5,
4,
64,
32,
2,
40,
2,
0,
32,
5,
32,
4,
40,
2,
8,
16,
162,
1,
11,
32,
2,
65,
12,
65,
4,
16,
162,
1,
11,
32,
1,
32,
3,
41,
3,
16,
55,
3,
16,
32,
1,
32,
3,
41,
3,
8,
55,
3,
8,
32,
1,
32,
3,
41,
3,
0,
55,
3,
0,
65,
0,
33,
2,
32,
3,
65,
0,
54,
2,
24,
32,
1,
65,
24,
106,
34,
4,
41,
3,
0,
33,
9,
32,
4,
32,
3,
41,
3,
24,
55,
3,
0,
32,
9,
167,
69,
13,
2,
32,
0,
65,
12,
106,
32,
1,
65,
32,
106,
41,
2,
0,
62,
2,
0,
32,
0,
32,
9,
55,
2,
4,
12,
1,
11,
32,
0,
32,
2,
173,
32,
9,
66,
128,
128,
128,
128,
112,
131,
132,
55,
2,
4,
65,
1,
33,
2,
11,
32,
0,
32,
2,
54,
2,
0,
32,
1,
16,
42,
32,
6,
36,
0,
15,
11,
65,
248,
131,
192,
0,
65,
43,
65,
252,
132,
192,
0,
16,
119,
0,
11,
138,
4,
1,
2,
127,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
2,
65,
3,
79,
4,
64,
32,
3,
69,
13,
1,
32,
3,
65,
128,
128,
2,
75,
13,
4,
32,
1,
32,
1,
40,
2,
8,
32,
2,
106,
54,
2,
8,
32,
1,
40,
2,
0,
34,
4,
65,
128,
128,
4,
79,
13,
5,
32,
1,
32,
4,
106,
65,
16,
106,
32,
2,
65,
125,
106,
34,
2,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
34,
4,
54,
2,
0,
32,
4,
65,
128,
128,
4,
79,
13,
5,
32,
1,
32,
4,
106,
65,
16,
106,
32,
3,
65,
127,
106,
34,
3,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
34,
4,
54,
2,
0,
32,
4,
65,
128,
128,
4,
79,
13,
5,
32,
1,
32,
4,
106,
65,
16,
106,
32,
3,
65,
8,
118,
34,
5,
58,
0,
0,
32,
1,
32,
1,
40,
2,
0,
65,
1,
106,
54,
2,
0,
32,
1,
40,
2,
4,
34,
4,
65,
128,
128,
4,
79,
13,
2,
32,
1,
32,
4,
106,
65,
16,
106,
34,
4,
32,
4,
45,
0,
0,
65,
1,
118,
58,
0,
0,
32,
1,
40,
2,
4,
34,
4,
65,
128,
128,
4,
79,
13,
3,
32,
1,
32,
4,
106,
65,
16,
106,
34,
4,
32,
4,
45,
0,
0,
65,
128,
1,
114,
58,
0,
0,
32,
1,
32,
1,
40,
2,
12,
65,
127,
106,
34,
4,
54,
2,
12,
32,
4,
69,
4,
64,
32,
1,
65,
8,
54,
2,
12,
32,
1,
32,
1,
40,
2,
0,
34,
4,
54,
2,
4,
32,
1,
32,
4,
65,
1,
106,
54,
2,
0,
11,
32,
0,
32,
3,
65,
156,
168,
192,
0,
106,
32,
5,
65,
156,
176,
192,
0,
106,
32,
3,
65,
128,
4,
73,
27,
45,
0,
0,
65,
1,
116,
106,
65,
192,
4,
106,
34,
1,
32,
1,
47,
1,
0,
65,
1,
106,
59,
1,
0,
2,
64,
32,
2,
65,
128,
2,
73,
4,
64,
32,
2,
65,
1,
116,
65,
184,
161,
192,
0,
106,
47,
1,
0,
34,
1,
65,
159,
2,
75,
13,
1,
32,
0,
32,
1,
65,
1,
116,
106,
34,
0,
32,
0,
47,
1,
0,
65,
1,
106,
59,
1,
0,
15,
11,
32,
2,
65,
128,
2,
65,
220,
180,
192,
0,
16,
103,
0,
11,
32,
1,
65,
160,
2,
65,
236,
180,
192,
0,
16,
103,
0,
11,
65,
156,
179,
192,
0,
65,
51,
65,
208,
179,
192,
0,
16,
119,
0,
11,
65,
224,
179,
192,
0,
65,
33,
65,
132,
180,
192,
0,
16,
119,
0,
11,
32,
4,
65,
128,
128,
4,
65,
152,
161,
192,
0,
16,
103,
0,
11,
32,
4,
65,
128,
128,
4,
65,
152,
161,
192,
0,
16,
103,
0,
11,
65,
148,
180,
192,
0,
65,
53,
65,
204,
180,
192,
0,
16,
119,
0,
11,
32,
4,
65,
128,
128,
4,
65,
136,
161,
192,
0,
16,
103,
0,
11,
221,
3,
2,
6,
127,
1,
126,
35,
0,
65,
32,
107,
34,
4,
36,
0,
32,
4,
65,
8,
106,
32,
1,
16,
82,
32,
4,
40,
2,
12,
33,
5,
2,
64,
2,
64,
2,
64,
32,
4,
40,
2,
8,
34,
6,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
1,
65,
64,
107,
33,
9,
32,
1,
65,
40,
106,
33,
7,
32,
3,
69,
13,
1,
3,
64,
32,
6,
65,
3,
113,
65,
2,
70,
4,
64,
32,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
6,
40,
2,
4,
34,
8,
4,
64,
32,
5,
40,
2,
0,
32,
8,
32,
6,
40,
2,
8,
16,
162,
1,
11,
32,
5,
65,
12,
65,
4,
16,
162,
1,
11,
32,
7,
41,
3,
0,
33,
10,
32,
4,
65,
8,
106,
32,
7,
32,
2,
32,
3,
32,
9,
65,
0,
16,
114,
32,
4,
45,
0,
9,
33,
8,
32,
4,
45,
0,
8,
33,
5,
32,
7,
41,
3,
0,
32,
10,
125,
167,
34,
6,
13,
3,
65,
0,
33,
6,
32,
5,
65,
255,
1,
113,
32,
8,
65,
2,
70,
114,
13,
3,
32,
4,
65,
8,
106,
32,
1,
16,
82,
32,
4,
40,
2,
12,
33,
5,
32,
4,
40,
2,
8,
34,
6,
65,
255,
1,
113,
65,
3,
70,
13,
0,
11,
11,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
6,
173,
32,
5,
173,
66,
32,
134,
132,
55,
2,
4,
12,
2,
11,
32,
6,
65,
3,
113,
65,
2,
70,
4,
64,
32,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
1,
40,
2,
4,
34,
3,
4,
64,
32,
5,
40,
2,
0,
32,
3,
32,
1,
40,
2,
8,
16,
162,
1,
11,
32,
5,
65,
12,
65,
4,
16,
162,
1,
11,
32,
7,
41,
3,
0,
33,
10,
32,
4,
65,
8,
106,
32,
7,
32,
2,
65,
0,
32,
9,
65,
0,
16,
114,
32,
7,
41,
3,
0,
32,
10,
125,
167,
33,
6,
32,
4,
45,
0,
9,
33,
8,
32,
4,
45,
0,
8,
33,
5,
11,
32,
5,
65,
255,
1,
113,
65,
1,
70,
4,
64,
32,
4,
65,
140,
133,
192,
0,
65,
22,
16,
78,
32,
4,
65,
24,
106,
65,
11,
32,
4,
40,
2,
0,
32,
4,
40,
2,
4,
16,
94,
32,
0,
32,
4,
41,
3,
24,
55,
2,
4,
32,
0,
65,
1,
54,
2,
0,
12,
1,
11,
32,
0,
32,
6,
54,
2,
4,
32,
0,
65,
8,
106,
32,
8,
58,
0,
0,
32,
0,
65,
0,
54,
2,
0,
11,
32,
4,
65,
32,
106,
36,
0,
11,
147,
3,
1,
4,
127,
2,
64,
2,
64,
65,
0,
65,
15,
32,
0,
65,
164,
154,
4,
73,
27,
34,
1,
32,
1,
65,
8,
106,
34,
1,
32,
1,
65,
2,
116,
65,
196,
224,
193,
0,
106,
40,
2,
0,
65,
11,
116,
32,
0,
65,
11,
116,
34,
2,
75,
27,
34,
1,
32,
1,
65,
4,
106,
34,
1,
32,
1,
65,
2,
116,
65,
196,
224,
193,
0,
106,
40,
2,
0,
65,
11,
116,
32,
2,
75,
27,
34,
1,
32,
1,
65,
2,
106,
34,
1,
32,
1,
65,
2,
116,
65,
196,
224,
193,
0,
106,
40,
2,
0,
65,
11,
116,
32,
2,
75,
27,
34,
1,
32,
1,
65,
1,
106,
34,
1,
32,
1,
65,
2,
116,
65,
196,
224,
193,
0,
106,
40,
2,
0,
65,
11,
116,
32,
2,
75,
27,
34,
3,
65,
2,
116,
65,
196,
224,
193,
0,
106,
40,
2,
0,
65,
11,
116,
34,
1,
32,
2,
70,
32,
1,
32,
2,
73,
106,
32,
3,
106,
34,
2,
65,
30,
77,
4,
64,
65,
177,
5,
33,
4,
32,
2,
65,
30,
71,
4,
64,
32,
2,
65,
2,
116,
65,
200,
224,
193,
0,
106,
40,
2,
0,
65,
21,
118,
33,
4,
11,
65,
0,
33,
1,
32,
2,
65,
127,
106,
34,
3,
32,
2,
77,
4,
64,
32,
3,
65,
31,
79,
13,
3,
32,
3,
65,
2,
116,
65,
196,
224,
193,
0,
106,
40,
2,
0,
65,
255,
255,
255,
0,
113,
33,
1,
11,
2,
64,
32,
4,
32,
2,
65,
2,
116,
65,
196,
224,
193,
0,
106,
40,
2,
0,
65,
21,
118,
34,
3,
65,
1,
106,
70,
13,
0,
32,
0,
32,
1,
107,
33,
2,
32,
4,
65,
127,
106,
33,
1,
65,
0,
33,
0,
3,
64,
32,
3,
65,
176,
5,
75,
13,
3,
32,
0,
32,
3,
65,
192,
225,
193,
0,
106,
45,
0,
0,
106,
34,
0,
32,
2,
75,
13,
1,
32,
1,
32,
3,
65,
1,
106,
34,
3,
71,
13,
0,
11,
32,
1,
33,
3,
11,
32,
3,
65,
1,
113,
15,
11,
32,
2,
65,
31,
65,
140,
224,
193,
0,
16,
103,
0,
11,
32,
3,
65,
177,
5,
65,
156,
224,
193,
0,
16,
103,
0,
11,
32,
3,
65,
31,
65,
172,
224,
193,
0,
16,
103,
0,
11,
165,
3,
2,
4,
127,
1,
126,
35,
0,
65,
16,
107,
34,
3,
36,
0,
32,
3,
65,
8,
106,
32,
1,
16,
57,
32,
3,
40,
2,
12,
33,
2,
2,
64,
2,
64,
32,
3,
40,
2,
8,
34,
4,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
4,
65,
3,
113,
65,
2,
70,
4,
64,
32,
2,
40,
2,
0,
32,
2,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
2,
40,
2,
4,
34,
4,
40,
2,
4,
34,
5,
4,
64,
32,
2,
40,
2,
0,
32,
5,
32,
4,
40,
2,
8,
16,
162,
1,
11,
32,
2,
65,
12,
65,
4,
16,
162,
1,
11,
32,
1,
40,
2,
24,
33,
2,
32,
1,
65,
0,
54,
2,
24,
32,
2,
69,
13,
2,
32,
1,
65,
28,
106,
41,
2,
0,
33,
6,
32,
0,
32,
2,
54,
2,
4,
32,
0,
65,
0,
54,
2,
0,
32,
0,
65,
8,
106,
32,
6,
55,
2,
0,
32,
1,
40,
2,
16,
65,
244,
213,
2,
65,
4,
16,
162,
1,
32,
1,
65,
40,
106,
40,
2,
0,
34,
0,
69,
13,
1,
32,
1,
40,
2,
36,
32,
0,
65,
1,
16,
162,
1,
12,
1,
11,
32,
0,
65,
1,
54,
2,
0,
32,
0,
32,
4,
173,
32,
2,
173,
66,
32,
134,
132,
55,
2,
4,
2,
64,
32,
1,
40,
2,
24,
69,
13,
0,
32,
3,
65,
8,
106,
32,
1,
16,
57,
32,
3,
45,
0,
8,
65,
2,
70,
4,
64,
32,
3,
40,
2,
12,
34,
0,
40,
2,
0,
32,
0,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
0,
40,
2,
4,
34,
2,
40,
2,
4,
34,
4,
4,
64,
32,
0,
40,
2,
0,
32,
4,
32,
2,
40,
2,
8,
16,
162,
1,
11,
32,
0,
65,
12,
65,
4,
16,
162,
1,
11,
32,
1,
40,
2,
24,
34,
0,
69,
13,
0,
32,
1,
65,
28,
106,
40,
2,
0,
34,
2,
69,
13,
0,
32,
0,
32,
2,
65,
1,
16,
162,
1,
11,
32,
1,
40,
2,
16,
65,
244,
213,
2,
65,
4,
16,
162,
1,
32,
1,
65,
40,
106,
40,
2,
0,
34,
0,
69,
13,
0,
32,
1,
40,
2,
36,
32,
0,
65,
1,
16,
162,
1,
11,
32,
3,
65,
16,
106,
36,
0,
15,
11,
65,
248,
131,
192,
0,
65,
43,
65,
252,
132,
192,
0,
16,
119,
0,
11,
163,
3,
2,
4,
127,
2,
126,
35,
0,
65,
64,
106,
34,
2,
36,
0,
65,
1,
33,
4,
2,
64,
32,
0,
45,
0,
4,
13,
0,
32,
0,
45,
0,
5,
33,
5,
32,
0,
40,
2,
0,
34,
3,
45,
0,
0,
65,
4,
113,
69,
4,
64,
32,
3,
40,
2,
24,
65,
165,
206,
193,
0,
65,
167,
206,
193,
0,
32,
5,
27,
65,
2,
65,
3,
32,
5,
27,
32,
3,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
13,
1,
32,
0,
40,
2,
0,
34,
3,
40,
2,
24,
65,
188,
145,
192,
0,
65,
16,
32,
3,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
13,
1,
32,
0,
40,
2,
0,
34,
3,
40,
2,
24,
65,
155,
205,
193,
0,
65,
2,
32,
3,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
13,
1,
32,
1,
32,
0,
40,
2,
0,
65,
216,
145,
192,
0,
40,
2,
0,
17,
0,
0,
33,
4,
12,
1,
11,
32,
5,
69,
4,
64,
32,
3,
40,
2,
24,
65,
160,
206,
193,
0,
65,
3,
32,
3,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
13,
1,
32,
0,
40,
2,
0,
33,
3,
11,
32,
2,
65,
1,
58,
0,
23,
32,
2,
65,
52,
106,
65,
132,
206,
193,
0,
54,
2,
0,
32,
2,
32,
3,
41,
2,
24,
55,
3,
8,
32,
2,
32,
2,
65,
23,
106,
54,
2,
16,
32,
3,
41,
2,
8,
33,
6,
32,
3,
41,
2,
16,
33,
7,
32,
2,
32,
3,
45,
0,
32,
58,
0,
56,
32,
2,
32,
7,
55,
3,
40,
32,
2,
32,
6,
55,
3,
32,
32,
2,
32,
3,
41,
2,
0,
55,
3,
24,
32,
2,
32,
2,
65,
8,
106,
54,
2,
48,
32,
2,
65,
8,
106,
65,
188,
145,
192,
0,
65,
16,
16,
34,
13,
0,
32,
2,
65,
8,
106,
65,
155,
205,
193,
0,
65,
2,
16,
34,
13,
0,
32,
1,
32,
2,
65,
24,
106,
65,
216,
145,
192,
0,
40,
2,
0,
17,
0,
0,
13,
0,
32,
2,
40,
2,
48,
65,
163,
206,
193,
0,
65,
2,
32,
2,
40,
2,
52,
40,
2,
12,
17,
2,
0,
33,
4,
11,
32,
0,
65,
1,
58,
0,
5,
32,
0,
32,
4,
58,
0,
4,
32,
2,
65,
64,
107,
36,
0,
11,
222,
2,
1,
7,
127,
65,
1,
33,
9,
2,
64,
2,
64,
32,
2,
69,
13,
0,
32,
1,
32,
2,
65,
1,
116,
106,
33,
10,
32,
0,
65,
128,
254,
3,
113,
65,
8,
118,
33,
11,
32,
0,
65,
255,
1,
113,
33,
13,
2,
64,
3,
64,
32,
1,
65,
2,
106,
33,
12,
32,
7,
32,
1,
45,
0,
1,
34,
2,
106,
33,
8,
32,
11,
32,
1,
45,
0,
0,
34,
1,
71,
4,
64,
32,
1,
32,
11,
75,
13,
3,
32,
8,
33,
7,
32,
12,
34,
1,
32,
10,
71,
13,
1,
12,
3,
11,
32,
8,
32,
7,
79,
4,
64,
32,
8,
32,
4,
75,
13,
2,
32,
3,
32,
7,
106,
33,
1,
2,
64,
3,
64,
32,
2,
69,
13,
1,
32,
2,
65,
127,
106,
33,
2,
32,
1,
45,
0,
0,
32,
1,
65,
1,
106,
33,
1,
32,
13,
71,
13,
0,
11,
65,
0,
33,
9,
12,
5,
11,
32,
8,
33,
7,
32,
12,
34,
1,
32,
10,
71,
13,
1,
12,
3,
11,
11,
32,
7,
32,
8,
65,
128,
213,
193,
0,
16,
105,
0,
11,
32,
8,
32,
4,
65,
128,
213,
193,
0,
16,
104,
0,
11,
32,
6,
69,
13,
0,
32,
5,
32,
6,
106,
33,
3,
32,
0,
65,
255,
255,
3,
113,
33,
1,
3,
64,
2,
64,
32,
5,
65,
1,
106,
33,
0,
2,
127,
32,
0,
32,
5,
45,
0,
0,
34,
2,
65,
24,
116,
65,
24,
117,
34,
4,
65,
0,
78,
13,
0,
26,
32,
0,
32,
3,
70,
13,
1,
32,
5,
45,
0,
1,
32,
4,
65,
255,
0,
113,
65,
8,
116,
114,
33,
2,
32,
5,
65,
2,
106,
11,
33,
5,
32,
1,
32,
2,
107,
34,
1,
65,
0,
72,
13,
2,
32,
9,
65,
1,
115,
33,
9,
32,
3,
32,
5,
71,
13,
1,
12,
2,
11,
11,
65,
240,
204,
193,
0,
65,
43,
65,
144,
213,
193,
0,
16,
119,
0,
11,
32,
9,
65,
1,
113,
11,
245,
2,
1,
4,
127,
35,
0,
65,
16,
107,
34,
3,
36,
0,
2,
64,
32,
0,
65,
24,
106,
40,
2,
0,
69,
13,
0,
32,
3,
65,
8,
106,
32,
0,
16,
72,
32,
3,
45,
0,
8,
65,
2,
70,
4,
64,
32,
3,
40,
2,
12,
34,
1,
40,
2,
0,
32,
1,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
1,
40,
2,
4,
34,
2,
40,
2,
4,
34,
4,
4,
64,
32,
1,
40,
2,
0,
32,
4,
32,
2,
40,
2,
8,
16,
162,
1,
11,
32,
1,
65,
12,
65,
4,
16,
162,
1,
11,
32,
0,
65,
24,
106,
40,
2,
0,
34,
1,
69,
13,
0,
32,
0,
65,
28,
106,
40,
2,
0,
34,
2,
69,
13,
0,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
32,
0,
65,
56,
106,
40,
2,
0,
65,
244,
213,
2,
65,
4,
16,
162,
1,
32,
0,
65,
196,
0,
106,
40,
2,
0,
34,
1,
4,
64,
32,
0,
40,
2,
64,
32,
1,
65,
1,
16,
162,
1,
11,
32,
0,
65,
212,
0,
106,
40,
2,
0,
34,
1,
4,
64,
32,
0,
40,
2,
80,
32,
1,
65,
1,
16,
162,
1,
11,
2,
64,
32,
0,
40,
2,
92,
69,
13,
0,
2,
64,
32,
0,
65,
224,
0,
106,
40,
2,
0,
34,
1,
69,
13,
0,
32,
0,
65,
228,
0,
106,
40,
2,
0,
34,
2,
69,
13,
0,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
2,
64,
32,
0,
65,
236,
0,
106,
40,
2,
0,
34,
1,
69,
13,
0,
32,
0,
65,
240,
0,
106,
40,
2,
0,
34,
2,
69,
13,
0,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
32,
0,
65,
248,
0,
106,
40,
2,
0,
34,
1,
69,
13,
0,
32,
0,
65,
252,
0,
106,
40,
2,
0,
34,
2,
69,
13,
0,
32,
1,
32,
2,
65,
1,
16,
162,
1,
11,
32,
0,
65,
144,
1,
106,
40,
2,
0,
34,
1,
4,
64,
32,
0,
40,
2,
140,
1,
32,
1,
65,
1,
16,
162,
1,
11,
32,
3,
65,
16,
106,
36,
0,
11,
203,
2,
1,
5,
127,
2,
64,
2,
64,
2,
64,
2,
64,
32,
2,
65,
3,
113,
34,
4,
69,
13,
0,
65,
4,
32,
4,
107,
34,
4,
69,
13,
0,
32,
3,
32,
4,
32,
4,
32,
3,
75,
27,
34,
4,
69,
13,
0,
32,
1,
65,
255,
1,
113,
33,
5,
3,
64,
32,
2,
32,
6,
106,
45,
0,
0,
32,
5,
70,
13,
2,
32,
4,
32,
6,
65,
1,
106,
34,
6,
71,
13,
0,
11,
32,
4,
33,
5,
11,
32,
3,
65,
8,
73,
13,
1,
32,
5,
32,
3,
65,
120,
106,
34,
8,
75,
13,
1,
32,
1,
65,
255,
1,
113,
65,
129,
130,
132,
8,
108,
33,
7,
3,
64,
32,
2,
32,
5,
106,
34,
6,
65,
4,
106,
40,
2,
0,
32,
7,
115,
34,
4,
65,
127,
115,
32,
4,
65,
255,
253,
251,
119,
106,
113,
32,
6,
40,
2,
0,
32,
7,
115,
34,
4,
65,
127,
115,
32,
4,
65,
255,
253,
251,
119,
106,
113,
114,
65,
128,
129,
130,
132,
120,
113,
69,
4,
64,
32,
5,
65,
8,
106,
34,
5,
32,
8,
77,
13,
1,
11,
11,
32,
5,
32,
3,
77,
13,
1,
32,
5,
32,
3,
65,
144,
209,
193,
0,
16,
105,
0,
11,
65,
1,
33,
4,
12,
1,
11,
65,
0,
33,
6,
65,
0,
33,
4,
32,
3,
32,
5,
71,
4,
64,
32,
2,
32,
5,
106,
33,
2,
32,
3,
32,
5,
107,
33,
3,
32,
1,
65,
255,
1,
113,
33,
1,
2,
64,
3,
64,
32,
2,
32,
6,
106,
45,
0,
0,
32,
1,
70,
13,
1,
32,
3,
32,
6,
65,
1,
106,
34,
6,
71,
13,
0,
11,
32,
3,
32,
5,
106,
33,
6,
12,
2,
11,
65,
1,
33,
4,
11,
32,
5,
32,
6,
106,
33,
6,
11,
32,
0,
32,
6,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
11,
201,
2,
1,
4,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
2,
64,
32,
0,
40,
2,
0,
34,
0,
2,
127,
2,
64,
32,
1,
65,
128,
1,
79,
4,
64,
32,
2,
65,
0,
54,
2,
12,
32,
1,
65,
128,
16,
73,
13,
1,
32,
2,
65,
12,
106,
33,
3,
32,
1,
65,
128,
128,
4,
73,
4,
64,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
14,
32,
2,
32,
1,
65,
12,
118,
65,
224,
1,
114,
58,
0,
12,
32,
2,
32,
1,
65,
6,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
65,
3,
12,
3,
11,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
15,
32,
2,
32,
1,
65,
18,
118,
65,
240,
1,
114,
58,
0,
12,
32,
2,
32,
1,
65,
6,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
14,
32,
2,
32,
1,
65,
12,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
65,
4,
12,
2,
11,
32,
0,
40,
2,
8,
34,
3,
32,
0,
65,
4,
106,
40,
2,
0,
70,
4,
127,
32,
0,
65,
1,
16,
84,
32,
0,
40,
2,
8,
5,
32,
3,
11,
32,
0,
40,
2,
0,
106,
32,
1,
58,
0,
0,
32,
0,
32,
0,
40,
2,
8,
65,
1,
106,
54,
2,
8,
12,
2,
11,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
32,
2,
32,
1,
65,
6,
118,
65,
192,
1,
114,
58,
0,
12,
32,
2,
65,
12,
106,
33,
3,
65,
2,
11,
34,
1,
16,
84,
32,
0,
65,
8,
106,
34,
4,
40,
2,
0,
34,
5,
32,
0,
40,
2,
0,
106,
32,
3,
32,
1,
16,
125,
26,
32,
4,
32,
1,
32,
5,
106,
54,
2,
0,
11,
32,
2,
65,
16,
106,
36,
0,
65,
0,
11,
203,
2,
1,
6,
127,
35,
0,
65,
32,
107,
34,
3,
36,
0,
32,
1,
40,
2,
0,
33,
7,
2,
64,
32,
1,
40,
2,
4,
34,
6,
65,
3,
116,
34,
5,
69,
4,
64,
12,
1,
11,
32,
7,
65,
4,
106,
33,
2,
3,
64,
32,
2,
40,
2,
0,
32,
4,
106,
33,
4,
32,
2,
65,
8,
106,
33,
2,
32,
5,
65,
120,
106,
34,
5,
13,
0,
11,
11,
2,
64,
2,
64,
32,
1,
65,
20,
106,
40,
2,
0,
69,
4,
64,
32,
4,
33,
2,
12,
1,
11,
32,
6,
69,
4,
64,
65,
0,
65,
0,
65,
204,
202,
193,
0,
16,
103,
0,
11,
65,
0,
33,
5,
65,
1,
33,
6,
32,
4,
65,
15,
77,
4,
64,
32,
7,
65,
4,
106,
40,
2,
0,
69,
13,
2,
11,
32,
4,
32,
4,
106,
34,
2,
32,
4,
73,
13,
1,
11,
32,
2,
65,
127,
74,
4,
64,
32,
2,
69,
4,
64,
65,
0,
33,
5,
65,
1,
33,
6,
12,
2,
11,
32,
2,
33,
5,
32,
2,
65,
1,
16,
156,
1,
34,
6,
13,
1,
32,
2,
16,
168,
1,
0,
11,
16,
175,
1,
0,
11,
32,
0,
65,
0,
54,
2,
8,
32,
0,
32,
6,
54,
2,
0,
32,
0,
32,
5,
54,
2,
4,
32,
3,
32,
0,
54,
2,
4,
32,
3,
65,
24,
106,
32,
1,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
3,
65,
16,
106,
32,
1,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
3,
32,
1,
41,
2,
0,
55,
3,
8,
32,
3,
65,
4,
106,
65,
236,
201,
193,
0,
32,
3,
65,
8,
106,
16,
23,
69,
4,
64,
32,
3,
65,
32,
106,
36,
0,
15,
11,
65,
236,
202,
193,
0,
65,
51,
32,
3,
65,
8,
106,
65,
220,
202,
193,
0,
65,
180,
203,
193,
0,
16,
98,
0,
11,
226,
2,
1,
4,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
2,
64,
32,
0,
40,
2,
24,
69,
13,
0,
32,
2,
65,
8,
106,
32,
0,
16,
32,
32,
2,
45,
0,
8,
65,
2,
70,
4,
64,
32,
2,
40,
2,
12,
34,
1,
40,
2,
0,
32,
1,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
1,
40,
2,
4,
34,
3,
40,
2,
4,
34,
4,
4,
64,
32,
1,
40,
2,
0,
32,
4,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
1,
65,
12,
65,
4,
16,
162,
1,
11,
32,
0,
40,
2,
24,
69,
13,
0,
32,
2,
65,
8,
106,
32,
0,
16,
58,
32,
2,
45,
0,
8,
65,
2,
70,
4,
64,
32,
2,
40,
2,
12,
34,
1,
40,
2,
0,
32,
1,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
1,
40,
2,
4,
34,
3,
40,
2,
4,
34,
4,
4,
64,
32,
1,
40,
2,
0,
32,
4,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
1,
65,
12,
65,
4,
16,
162,
1,
11,
32,
0,
40,
2,
24,
34,
1,
69,
13,
0,
32,
0,
65,
28,
106,
40,
2,
0,
34,
3,
69,
13,
0,
32,
1,
32,
3,
65,
1,
16,
162,
1,
11,
32,
0,
40,
2,
16,
34,
1,
65,
192,
128,
4,
106,
40,
2,
0,
65,
204,
153,
5,
65,
1,
16,
162,
1,
32,
1,
40,
2,
200,
128,
4,
65,
224,
33,
65,
2,
16,
162,
1,
32,
1,
65,
212,
128,
4,
106,
40,
2,
0,
65,
130,
130,
10,
65,
2,
16,
162,
1,
32,
0,
40,
2,
16,
65,
232,
128,
4,
65,
4,
16,
162,
1,
32,
0,
65,
40,
106,
40,
2,
0,
34,
1,
4,
64,
32,
0,
40,
2,
36,
32,
1,
65,
1,
16,
162,
1,
11,
32,
0,
65,
208,
0,
106,
40,
2,
0,
34,
1,
4,
64,
32,
0,
40,
2,
76,
32,
1,
65,
1,
16,
162,
1,
11,
32,
2,
65,
16,
106,
36,
0,
11,
199,
2,
1,
3,
127,
32,
0,
40,
2,
0,
34,
4,
65,
0,
54,
2,
0,
32,
4,
65,
120,
106,
34,
5,
32,
5,
40,
2,
0,
65,
126,
113,
54,
2,
0,
2,
64,
32,
2,
32,
3,
40,
2,
20,
17,
6,
0,
69,
13,
0,
2,
64,
32,
4,
65,
124,
106,
34,
3,
40,
2,
0,
65,
124,
113,
34,
0,
4,
64,
32,
0,
40,
2,
0,
34,
6,
65,
1,
113,
69,
13,
1,
11,
32,
5,
40,
2,
0,
34,
0,
65,
124,
113,
34,
2,
69,
13,
1,
65,
0,
32,
2,
32,
0,
65,
2,
113,
27,
34,
0,
69,
13,
1,
32,
0,
45,
0,
0,
65,
1,
113,
13,
1,
32,
4,
32,
0,
40,
2,
8,
65,
124,
113,
54,
2,
0,
32,
0,
32,
5,
65,
1,
114,
54,
2,
8,
15,
11,
2,
64,
2,
64,
32,
5,
40,
2,
0,
34,
4,
65,
124,
113,
34,
2,
69,
4,
64,
32,
0,
33,
1,
12,
1,
11,
32,
0,
33,
1,
65,
0,
32,
2,
32,
4,
65,
2,
113,
27,
34,
4,
69,
13,
0,
32,
4,
32,
4,
40,
2,
4,
65,
3,
113,
32,
0,
114,
54,
2,
4,
32,
3,
40,
2,
0,
34,
2,
65,
124,
113,
34,
1,
69,
13,
1,
32,
5,
40,
2,
0,
65,
124,
113,
33,
2,
32,
1,
40,
2,
0,
33,
6,
11,
32,
1,
32,
6,
65,
3,
113,
32,
2,
114,
54,
2,
0,
32,
3,
40,
2,
0,
33,
2,
11,
32,
3,
32,
2,
65,
3,
113,
54,
2,
0,
32,
5,
32,
5,
40,
2,
0,
34,
1,
65,
3,
113,
54,
2,
0,
32,
1,
65,
2,
113,
4,
64,
32,
0,
32,
0,
40,
2,
0,
65,
2,
114,
54,
2,
0,
11,
15,
11,
32,
4,
32,
1,
40,
2,
0,
54,
2,
0,
32,
1,
32,
5,
54,
2,
0,
11,
192,
2,
2,
5,
127,
1,
126,
35,
0,
65,
48,
107,
34,
5,
36,
0,
65,
39,
33,
3,
2,
64,
32,
0,
66,
144,
206,
0,
84,
4,
64,
32,
0,
33,
8,
12,
1,
11,
3,
64,
32,
5,
65,
9,
106,
32,
3,
106,
34,
4,
65,
124,
106,
32,
0,
32,
0,
66,
144,
206,
0,
128,
34,
8,
66,
144,
206,
0,
126,
125,
167,
34,
6,
65,
255,
255,
3,
113,
65,
228,
0,
110,
34,
7,
65,
1,
116,
65,
218,
206,
193,
0,
106,
47,
0,
0,
59,
0,
0,
32,
4,
65,
126,
106,
32,
6,
32,
7,
65,
228,
0,
108,
107,
65,
255,
255,
3,
113,
65,
1,
116,
65,
218,
206,
193,
0,
106,
47,
0,
0,
59,
0,
0,
32,
3,
65,
124,
106,
33,
3,
32,
0,
66,
255,
193,
215,
47,
86,
32,
8,
33,
0,
13,
0,
11,
11,
32,
8,
167,
34,
4,
65,
227,
0,
74,
4,
64,
32,
3,
65,
126,
106,
34,
3,
32,
5,
65,
9,
106,
106,
32,
8,
167,
34,
4,
32,
4,
65,
255,
255,
3,
113,
65,
228,
0,
110,
34,
4,
65,
228,
0,
108,
107,
65,
255,
255,
3,
113,
65,
1,
116,
65,
218,
206,
193,
0,
106,
47,
0,
0,
59,
0,
0,
11,
2,
64,
32,
4,
65,
10,
78,
4,
64,
32,
3,
65,
126,
106,
34,
3,
32,
5,
65,
9,
106,
106,
32,
4,
65,
1,
116,
65,
218,
206,
193,
0,
106,
47,
0,
0,
59,
0,
0,
12,
1,
11,
32,
3,
65,
127,
106,
34,
3,
32,
5,
65,
9,
106,
106,
32,
4,
65,
48,
106,
58,
0,
0,
11,
32,
2,
32,
1,
65,
228,
204,
193,
0,
65,
0,
32,
5,
65,
9,
106,
32,
3,
106,
65,
39,
32,
3,
107,
16,
24,
32,
5,
65,
48,
106,
36,
0,
11,
183,
2,
1,
3,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
2,
64,
32,
0,
2,
127,
2,
64,
32,
1,
65,
128,
1,
79,
4,
64,
32,
2,
65,
0,
54,
2,
12,
32,
1,
65,
128,
16,
73,
13,
1,
32,
1,
65,
128,
128,
4,
73,
4,
64,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
14,
32,
2,
32,
1,
65,
12,
118,
65,
224,
1,
114,
58,
0,
12,
32,
2,
32,
1,
65,
6,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
65,
3,
12,
3,
11,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
15,
32,
2,
32,
1,
65,
18,
118,
65,
240,
1,
114,
58,
0,
12,
32,
2,
32,
1,
65,
6,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
14,
32,
2,
32,
1,
65,
12,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
65,
4,
12,
2,
11,
32,
0,
40,
2,
8,
34,
3,
32,
0,
65,
4,
106,
40,
2,
0,
70,
4,
127,
32,
0,
65,
1,
16,
84,
32,
0,
40,
2,
8,
5,
32,
3,
11,
32,
0,
40,
2,
0,
106,
32,
1,
58,
0,
0,
32,
0,
32,
0,
40,
2,
8,
65,
1,
106,
54,
2,
8,
12,
2,
11,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
32,
2,
32,
1,
65,
6,
118,
65,
192,
1,
114,
58,
0,
12,
65,
2,
11,
34,
1,
16,
84,
32,
0,
65,
8,
106,
34,
3,
40,
2,
0,
34,
4,
32,
0,
40,
2,
0,
106,
32,
2,
65,
12,
106,
32,
1,
16,
125,
26,
32,
3,
32,
1,
32,
4,
106,
54,
2,
0,
11,
32,
2,
65,
16,
106,
36,
0,
11,
202,
2,
1,
1,
127,
35,
0,
65,
32,
107,
34,
7,
36,
0,
32,
7,
65,
8,
106,
32,
6,
65,
255,
1,
113,
16,
124,
32,
7,
40,
2,
12,
33,
6,
32,
7,
40,
2,
8,
69,
4,
64,
32,
7,
65,
16,
106,
32,
1,
40,
2,
16,
32,
2,
32,
3,
32,
4,
32,
5,
32,
6,
16,
7,
32,
1,
32,
1,
41,
3,
0,
32,
7,
53,
2,
16,
124,
55,
3,
0,
32,
1,
32,
1,
41,
3,
8,
32,
7,
53,
2,
20,
124,
55,
3,
8,
32,
7,
65,
28,
106,
40,
2,
0,
33,
2,
32,
0,
2,
127,
2,
64,
2,
64,
32,
7,
40,
2,
24,
65,
1,
70,
4,
64,
32,
2,
65,
123,
70,
13,
1,
32,
0,
65,
4,
106,
65,
0,
54,
2,
0,
65,
1,
12,
3,
11,
2,
64,
2,
64,
2,
64,
32,
2,
65,
1,
107,
14,
2,
2,
0,
1,
11,
2,
64,
2,
64,
32,
1,
40,
2,
16,
34,
2,
65,
152,
210,
0,
106,
45,
0,
0,
34,
3,
69,
13,
0,
32,
2,
65,
24,
106,
40,
2,
0,
33,
1,
32,
3,
65,
103,
106,
65,
255,
1,
113,
65,
9,
73,
32,
2,
65,
4,
106,
40,
2,
0,
69,
13,
0,
69,
13,
1,
11,
65,
0,
33,
1,
11,
32,
0,
65,
8,
106,
32,
1,
54,
2,
0,
32,
0,
65,
4,
106,
65,
1,
54,
2,
0,
65,
1,
12,
4,
11,
32,
0,
65,
0,
58,
0,
1,
65,
0,
12,
3,
11,
32,
0,
65,
2,
58,
0,
1,
12,
1,
11,
32,
0,
65,
1,
58,
0,
1,
11,
65,
0,
11,
58,
0,
0,
32,
7,
65,
32,
106,
36,
0,
15,
11,
32,
7,
32,
6,
54,
2,
16,
65,
232,
148,
192,
0,
65,
43,
32,
7,
65,
16,
106,
65,
148,
149,
192,
0,
65,
128,
150,
192,
0,
16,
98,
0,
11,
176,
2,
1,
3,
127,
35,
0,
65,
128,
1,
107,
34,
4,
36,
0,
2,
64,
2,
64,
2,
127,
2,
64,
32,
1,
40,
2,
0,
34,
3,
65,
16,
113,
69,
4,
64,
32,
0,
40,
2,
0,
33,
2,
32,
3,
65,
32,
113,
13,
1,
32,
2,
173,
65,
1,
32,
1,
16,
48,
12,
2,
11,
32,
0,
40,
2,
0,
33,
2,
65,
0,
33,
0,
3,
64,
32,
0,
32,
4,
106,
65,
255,
0,
106,
32,
2,
65,
15,
113,
34,
3,
65,
48,
114,
32,
3,
65,
215,
0,
106,
32,
3,
65,
10,
73,
27,
58,
0,
0,
32,
0,
65,
127,
106,
33,
0,
32,
2,
65,
4,
118,
34,
2,
13,
0,
11,
32,
0,
65,
128,
1,
106,
34,
2,
65,
129,
1,
79,
13,
2,
32,
1,
65,
1,
65,
216,
206,
193,
0,
65,
2,
32,
0,
32,
4,
106,
65,
128,
1,
106,
65,
0,
32,
0,
107,
16,
24,
12,
1,
11,
65,
0,
33,
0,
3,
64,
32,
0,
32,
4,
106,
65,
255,
0,
106,
32,
2,
65,
15,
113,
34,
3,
65,
48,
114,
32,
3,
65,
55,
106,
32,
3,
65,
10,
73,
27,
58,
0,
0,
32,
0,
65,
127,
106,
33,
0,
32,
2,
65,
4,
118,
34,
2,
13,
0,
11,
32,
0,
65,
128,
1,
106,
34,
2,
65,
129,
1,
79,
13,
2,
32,
1,
65,
1,
65,
216,
206,
193,
0,
65,
2,
32,
0,
32,
4,
106,
65,
128,
1,
106,
65,
0,
32,
0,
107,
16,
24,
11,
32,
4,
65,
128,
1,
106,
36,
0,
15,
11,
32,
2,
65,
128,
1,
65,
200,
206,
193,
0,
16,
105,
0,
11,
32,
2,
65,
128,
1,
65,
200,
206,
193,
0,
16,
105,
0,
11,
246,
2,
1,
3,
127,
35,
0,
65,
240,
128,
4,
107,
34,
0,
36,
0,
2,
64,
65,
232,
128,
4,
65,
4,
16,
156,
1,
34,
1,
4,
64,
32,
0,
65,
8,
106,
34,
2,
65,
16,
106,
65,
0,
65,
128,
128,
4,
16,
139,
1,
26,
32,
2,
66,
128,
128,
128,
128,
128,
1,
55,
2,
8,
32,
2,
66,
1,
55,
2,
0,
32,
0,
65,
152,
128,
4,
106,
16,
95,
65,
224,
33,
65,
2,
16,
156,
1,
34,
2,
69,
13,
1,
32,
2,
65,
0,
65,
224,
33,
16,
139,
1,
26,
32,
0,
65,
208,
128,
4,
106,
16,
101,
32,
1,
32,
0,
65,
8,
106,
65,
144,
128,
4,
16,
125,
34,
1,
32,
2,
54,
2,
200,
128,
4,
32,
1,
65,
192,
128,
4,
106,
32,
0,
65,
200,
128,
4,
106,
41,
3,
0,
55,
2,
0,
32,
1,
65,
184,
128,
4,
106,
32,
0,
65,
192,
128,
4,
106,
41,
3,
0,
55,
2,
0,
32,
1,
65,
176,
128,
4,
106,
32,
0,
65,
184,
128,
4,
106,
41,
3,
0,
55,
2,
0,
32,
1,
65,
168,
128,
4,
106,
32,
0,
65,
176,
128,
4,
106,
41,
3,
0,
55,
2,
0,
32,
1,
65,
160,
128,
4,
106,
32,
0,
65,
168,
128,
4,
106,
41,
3,
0,
55,
2,
0,
32,
1,
65,
152,
128,
4,
106,
32,
0,
65,
160,
128,
4,
106,
41,
3,
0,
55,
2,
0,
32,
1,
32,
0,
41,
3,
152,
128,
4,
55,
2,
144,
128,
4,
32,
1,
32,
0,
41,
3,
208,
128,
4,
55,
2,
204,
128,
4,
32,
1,
65,
212,
128,
4,
106,
32,
0,
65,
216,
128,
4,
106,
41,
3,
0,
55,
2,
0,
32,
1,
65,
220,
128,
4,
106,
32,
0,
65,
224,
128,
4,
106,
41,
3,
0,
55,
2,
0,
32,
1,
65,
228,
128,
4,
106,
32,
0,
65,
232,
128,
4,
106,
40,
2,
0,
54,
2,
0,
32,
0,
65,
240,
128,
4,
106,
36,
0,
32,
1,
15,
11,
65,
232,
128,
4,
65,
4,
16,
171,
1,
0,
11,
65,
224,
33,
65,
2,
16,
171,
1,
0,
11,
186,
2,
1,
5,
127,
35,
0,
65,
64,
106,
34,
2,
36,
0,
32,
1,
40,
2,
4,
34,
3,
69,
4,
64,
32,
1,
65,
4,
106,
33,
3,
32,
1,
40,
2,
0,
33,
4,
32,
2,
65,
0,
54,
2,
32,
32,
2,
66,
1,
55,
3,
24,
32,
2,
32,
2,
65,
24,
106,
54,
2,
36,
32,
2,
65,
56,
106,
32,
4,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
2,
65,
48,
106,
32,
4,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
2,
32,
4,
41,
2,
0,
55,
3,
40,
32,
2,
65,
36,
106,
65,
128,
196,
193,
0,
32,
2,
65,
40,
106,
16,
23,
26,
32,
2,
65,
16,
106,
34,
4,
32,
2,
40,
2,
32,
54,
2,
0,
32,
2,
32,
2,
41,
3,
24,
55,
3,
8,
2,
64,
32,
1,
40,
2,
4,
34,
5,
69,
13,
0,
32,
1,
65,
8,
106,
40,
2,
0,
34,
6,
69,
13,
0,
32,
5,
32,
6,
65,
1,
16,
162,
1,
11,
32,
3,
32,
2,
41,
3,
8,
55,
2,
0,
32,
3,
65,
8,
106,
32,
4,
40,
2,
0,
54,
2,
0,
32,
3,
40,
2,
0,
33,
3,
11,
32,
1,
65,
1,
54,
2,
4,
32,
1,
65,
12,
106,
40,
2,
0,
33,
4,
32,
1,
65,
8,
106,
34,
1,
40,
2,
0,
33,
5,
32,
1,
66,
0,
55,
2,
0,
65,
12,
65,
4,
16,
156,
1,
34,
1,
69,
4,
64,
65,
12,
65,
4,
16,
171,
1,
0,
11,
32,
1,
32,
4,
54,
2,
8,
32,
1,
32,
5,
54,
2,
4,
32,
1,
32,
3,
54,
2,
0,
32,
0,
65,
244,
199,
193,
0,
54,
2,
4,
32,
0,
32,
1,
54,
2,
0,
32,
2,
65,
64,
107,
36,
0,
11,
179,
2,
2,
5,
127,
2,
126,
35,
0,
65,
32,
107,
34,
6,
36,
0,
32,
1,
65,
8,
106,
34,
8,
41,
3,
0,
33,
11,
32,
4,
65,
8,
106,
40,
2,
0,
33,
7,
32,
4,
65,
4,
106,
40,
2,
0,
33,
9,
32,
4,
40,
2,
0,
33,
10,
32,
6,
65,
8,
106,
32,
5,
65,
255,
1,
113,
16,
124,
32,
6,
40,
2,
12,
33,
5,
2,
64,
32,
6,
40,
2,
8,
69,
4,
64,
32,
6,
65,
16,
106,
32,
1,
40,
2,
16,
32,
2,
32,
3,
32,
7,
32,
10,
106,
32,
9,
32,
7,
107,
32,
5,
16,
21,
32,
1,
32,
1,
41,
3,
0,
32,
6,
53,
2,
16,
124,
55,
3,
0,
32,
8,
32,
8,
41,
3,
0,
32,
6,
53,
2,
20,
124,
34,
12,
55,
3,
0,
32,
6,
65,
28,
106,
40,
2,
0,
33,
1,
2,
127,
65,
1,
65,
3,
32,
1,
65,
123,
70,
27,
32,
6,
40,
2,
24,
65,
1,
70,
13,
0,
26,
65,
128,
132,
12,
32,
1,
65,
3,
116,
65,
248,
255,
255,
7,
113,
118,
11,
33,
1,
32,
4,
65,
8,
106,
32,
7,
32,
12,
32,
11,
125,
167,
106,
54,
2,
0,
32,
1,
65,
255,
1,
113,
65,
3,
70,
13,
1,
32,
0,
65,
0,
58,
0,
0,
32,
0,
32,
1,
58,
0,
1,
32,
6,
65,
32,
106,
36,
0,
15,
11,
32,
6,
32,
5,
54,
2,
16,
65,
232,
148,
192,
0,
65,
43,
32,
6,
65,
16,
106,
65,
148,
149,
192,
0,
65,
144,
150,
192,
0,
16,
98,
0,
11,
65,
224,
143,
192,
0,
65,
43,
32,
6,
65,
16,
106,
65,
140,
144,
192,
0,
65,
152,
145,
192,
0,
16,
98,
0,
11,
168,
2,
1,
3,
127,
35,
0,
65,
224,
0,
107,
34,
3,
36,
0,
32,
3,
16,
145,
1,
32,
3,
65,
216,
0,
106,
32,
3,
65,
32,
106,
40,
2,
0,
54,
2,
0,
32,
3,
65,
208,
0,
106,
32,
3,
65,
24,
106,
41,
3,
0,
55,
3,
0,
32,
3,
65,
200,
0,
106,
34,
5,
32,
3,
65,
16,
106,
41,
3,
0,
55,
3,
0,
32,
3,
65,
64,
107,
34,
4,
32,
3,
65,
8,
106,
41,
3,
0,
55,
3,
0,
32,
3,
32,
3,
41,
3,
0,
55,
3,
56,
32,
3,
65,
40,
106,
32,
3,
65,
56,
106,
32,
2,
16,
15,
32,
4,
32,
1,
65,
8,
106,
40,
2,
0,
54,
2,
0,
32,
3,
32,
1,
41,
2,
0,
55,
3,
56,
32,
0,
32,
2,
65,
0,
16,
130,
1,
65,
128,
128,
2,
65,
1,
16,
156,
1,
34,
1,
69,
4,
64,
65,
128,
128,
2,
16,
168,
1,
0,
11,
32,
0,
32,
3,
41,
3,
56,
55,
2,
24,
32,
0,
32,
1,
54,
2,
36,
32,
0,
65,
40,
106,
66,
128,
128,
2,
55,
2,
0,
32,
0,
65,
32,
106,
32,
4,
40,
2,
0,
54,
2,
0,
32,
3,
65,
56,
106,
16,
127,
32,
0,
65,
0,
54,
2,
72,
32,
0,
65,
64,
107,
32,
5,
41,
3,
0,
55,
3,
0,
32,
0,
65,
56,
106,
32,
4,
41,
3,
0,
55,
3,
0,
32,
0,
32,
3,
41,
3,
56,
55,
3,
48,
32,
0,
32,
3,
41,
3,
40,
55,
2,
76,
32,
0,
65,
212,
0,
106,
32,
3,
65,
48,
106,
40,
2,
0,
54,
2,
0,
32,
3,
65,
224,
0,
106,
36,
0,
11,
195,
2,
2,
3,
127,
2,
126,
35,
0,
65,
64,
106,
34,
3,
36,
0,
32,
0,
2,
127,
65,
1,
32,
0,
45,
0,
8,
13,
0,
26,
32,
0,
40,
2,
4,
33,
5,
32,
0,
40,
2,
0,
34,
4,
45,
0,
0,
65,
4,
113,
69,
4,
64,
65,
1,
32,
4,
40,
2,
24,
65,
165,
206,
193,
0,
65,
175,
206,
193,
0,
32,
5,
27,
65,
2,
65,
1,
32,
5,
27,
32,
4,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
13,
1,
26,
32,
1,
32,
0,
40,
2,
0,
32,
2,
40,
2,
12,
17,
0,
0,
12,
1,
11,
32,
5,
69,
4,
64,
65,
1,
32,
4,
40,
2,
24,
65,
173,
206,
193,
0,
65,
2,
32,
4,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
13,
1,
26,
32,
0,
40,
2,
0,
33,
4,
11,
32,
3,
65,
1,
58,
0,
23,
32,
3,
65,
52,
106,
65,
132,
206,
193,
0,
54,
2,
0,
32,
3,
32,
4,
41,
2,
24,
55,
3,
8,
32,
3,
32,
3,
65,
23,
106,
54,
2,
16,
32,
4,
41,
2,
8,
33,
6,
32,
4,
41,
2,
16,
33,
7,
32,
3,
32,
4,
45,
0,
32,
58,
0,
56,
32,
3,
32,
7,
55,
3,
40,
32,
3,
32,
6,
55,
3,
32,
32,
3,
32,
4,
41,
2,
0,
55,
3,
24,
32,
3,
32,
3,
65,
8,
106,
54,
2,
48,
65,
1,
32,
1,
32,
3,
65,
24,
106,
32,
2,
40,
2,
12,
17,
0,
0,
13,
0,
26,
32,
3,
40,
2,
48,
65,
163,
206,
193,
0,
65,
2,
32,
3,
40,
2,
52,
40,
2,
12,
17,
2,
0,
11,
58,
0,
8,
32,
0,
32,
0,
40,
2,
4,
65,
1,
106,
54,
2,
4,
32,
3,
65,
64,
107,
36,
0,
11,
169,
2,
2,
8,
127,
1,
126,
35,
0,
65,
16,
107,
34,
4,
36,
0,
32,
1,
65,
24,
106,
33,
8,
32,
1,
65,
36,
106,
33,
9,
32,
1,
65,
44,
106,
33,
5,
32,
1,
65,
32,
106,
33,
6,
2,
64,
2,
64,
3,
64,
2,
64,
32,
5,
40,
2,
0,
34,
2,
69,
13,
0,
32,
8,
40,
2,
0,
4,
64,
3,
64,
32,
1,
40,
2,
36,
33,
7,
32,
8,
32,
6,
40,
2,
0,
32,
2,
16,
85,
32,
6,
40,
2,
0,
34,
3,
32,
1,
40,
2,
24,
106,
32,
2,
32,
7,
32,
2,
16,
80,
32,
6,
32,
2,
32,
3,
106,
54,
2,
0,
32,
5,
40,
2,
0,
34,
3,
32,
2,
73,
13,
5,
32,
5,
65,
0,
54,
2,
0,
32,
3,
32,
2,
107,
34,
3,
69,
13,
2,
32,
1,
40,
2,
36,
34,
7,
32,
2,
32,
7,
106,
32,
3,
16,
99,
32,
5,
32,
3,
54,
2,
0,
32,
3,
33,
2,
32,
1,
40,
2,
24,
13,
0,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
164,
133,
192,
0,
16,
119,
0,
11,
32,
1,
16,
169,
1,
33,
10,
32,
4,
32,
1,
65,
180,
133,
192,
0,
65,
0,
32,
9,
65,
4,
16,
114,
32,
4,
45,
0,
0,
65,
1,
70,
4,
64,
32,
4,
32,
4,
40,
2,
4,
32,
4,
40,
2,
8,
16,
135,
1,
32,
0,
32,
4,
41,
3,
0,
55,
2,
0,
12,
2,
11,
32,
1,
16,
169,
1,
32,
10,
82,
13,
0,
11,
32,
0,
65,
3,
58,
0,
0,
11,
32,
4,
65,
16,
106,
36,
0,
15,
11,
32,
2,
32,
3,
16,
102,
0,
11,
169,
2,
2,
8,
127,
1,
126,
35,
0,
65,
16,
107,
34,
4,
36,
0,
32,
1,
65,
24,
106,
33,
8,
32,
1,
65,
36,
106,
33,
9,
32,
1,
65,
44,
106,
33,
5,
32,
1,
65,
32,
106,
33,
6,
2,
64,
2,
64,
3,
64,
2,
64,
32,
5,
40,
2,
0,
34,
2,
69,
13,
0,
32,
8,
40,
2,
0,
4,
64,
3,
64,
32,
1,
40,
2,
36,
33,
7,
32,
8,
32,
6,
40,
2,
0,
32,
2,
16,
85,
32,
6,
40,
2,
0,
34,
3,
32,
1,
40,
2,
24,
106,
32,
2,
32,
7,
32,
2,
16,
80,
32,
6,
32,
2,
32,
3,
106,
54,
2,
0,
32,
5,
40,
2,
0,
34,
3,
32,
2,
73,
13,
5,
32,
5,
65,
0,
54,
2,
0,
32,
3,
32,
2,
107,
34,
3,
69,
13,
2,
32,
1,
40,
2,
36,
34,
7,
32,
2,
32,
7,
106,
32,
3,
16,
99,
32,
5,
32,
3,
54,
2,
0,
32,
3,
33,
2,
32,
1,
40,
2,
24,
13,
0,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
164,
133,
192,
0,
16,
119,
0,
11,
32,
1,
16,
169,
1,
33,
10,
32,
4,
32,
1,
65,
180,
133,
192,
0,
65,
0,
32,
9,
65,
4,
16,
54,
32,
4,
45,
0,
0,
65,
1,
70,
4,
64,
32,
4,
32,
4,
40,
2,
4,
32,
4,
40,
2,
8,
16,
135,
1,
32,
0,
32,
4,
41,
3,
0,
55,
2,
0,
12,
2,
11,
32,
1,
16,
169,
1,
32,
10,
82,
13,
0,
11,
32,
0,
65,
3,
58,
0,
0,
11,
32,
4,
65,
16,
106,
36,
0,
15,
11,
32,
2,
32,
3,
16,
102,
0,
11,
139,
3,
1,
1,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
0,
45,
0,
0,
65,
1,
107,
14,
17,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
0,
1,
11,
32,
2,
32,
1,
65,
132,
200,
193,
0,
65,
13,
16,
134,
1,
12,
17,
11,
32,
2,
32,
1,
65,
208,
201,
193,
0,
65,
8,
16,
134,
1,
12,
16,
11,
32,
2,
32,
1,
65,
192,
201,
193,
0,
65,
16,
16,
134,
1,
12,
15,
11,
32,
2,
32,
1,
65,
175,
201,
193,
0,
65,
17,
16,
134,
1,
12,
14,
11,
32,
2,
32,
1,
65,
160,
201,
193,
0,
65,
15,
16,
134,
1,
12,
13,
11,
32,
2,
32,
1,
65,
143,
201,
193,
0,
65,
17,
16,
134,
1,
12,
12,
11,
32,
2,
32,
1,
65,
131,
201,
193,
0,
65,
12,
16,
134,
1,
12,
11,
11,
32,
2,
32,
1,
65,
250,
200,
193,
0,
65,
9,
16,
134,
1,
12,
10,
11,
32,
2,
32,
1,
65,
234,
200,
193,
0,
65,
16,
16,
134,
1,
12,
9,
11,
32,
2,
32,
1,
65,
224,
200,
193,
0,
65,
10,
16,
134,
1,
12,
8,
11,
32,
2,
32,
1,
65,
211,
200,
193,
0,
65,
13,
16,
134,
1,
12,
7,
11,
32,
2,
32,
1,
65,
201,
200,
193,
0,
65,
10,
16,
134,
1,
12,
6,
11,
32,
2,
32,
1,
65,
189,
200,
193,
0,
65,
12,
16,
134,
1,
12,
5,
11,
32,
2,
32,
1,
65,
178,
200,
193,
0,
65,
11,
16,
134,
1,
12,
4,
11,
32,
2,
32,
1,
65,
170,
200,
193,
0,
65,
8,
16,
134,
1,
12,
3,
11,
32,
2,
32,
1,
65,
161,
200,
193,
0,
65,
9,
16,
134,
1,
12,
2,
11,
32,
2,
32,
1,
65,
150,
200,
193,
0,
65,
11,
16,
134,
1,
12,
1,
11,
32,
2,
32,
1,
65,
145,
200,
193,
0,
65,
5,
16,
134,
1,
11,
32,
2,
16,
92,
32,
2,
65,
16,
106,
36,
0,
11,
161,
2,
1,
4,
127,
32,
0,
65,
0,
54,
2,
8,
32,
0,
65,
0,
54,
2,
0,
32,
0,
32,
2,
40,
2,
28,
54,
2,
4,
2,
64,
2,
64,
2,
64,
2,
64,
32,
1,
40,
2,
16,
65,
1,
70,
4,
64,
32,
2,
32,
2,
40,
2,
20,
34,
3,
32,
1,
65,
24,
106,
40,
2,
0,
34,
5,
32,
2,
40,
2,
32,
34,
6,
107,
34,
4,
32,
4,
32,
3,
75,
27,
34,
4,
4,
127,
32,
4,
32,
6,
106,
34,
3,
32,
4,
73,
13,
2,
32,
5,
32,
3,
73,
13,
3,
32,
2,
40,
2,
16,
34,
3,
32,
4,
106,
34,
5,
32,
3,
73,
13,
4,
32,
5,
65,
204,
153,
5,
75,
13,
5,
32,
1,
65,
20,
106,
40,
2,
0,
32,
6,
106,
32,
2,
40,
2,
48,
32,
3,
106,
32,
4,
16,
125,
26,
32,
2,
40,
2,
20,
33,
3,
32,
2,
40,
2,
32,
5,
32,
6,
11,
32,
4,
106,
34,
1,
54,
2,
32,
32,
2,
32,
3,
32,
4,
107,
54,
2,
20,
32,
0,
32,
1,
54,
2,
8,
32,
2,
32,
2,
40,
2,
16,
32,
4,
106,
54,
2,
16,
11,
2,
64,
32,
2,
45,
0,
55,
69,
13,
0,
32,
2,
40,
2,
20,
13,
0,
32,
0,
65,
1,
54,
2,
0,
11,
15,
11,
32,
6,
32,
3,
65,
140,
183,
192,
0,
16,
105,
0,
11,
32,
3,
32,
5,
65,
140,
183,
192,
0,
16,
104,
0,
11,
32,
3,
32,
5,
65,
156,
183,
192,
0,
16,
105,
0,
11,
32,
5,
65,
204,
153,
5,
65,
156,
183,
192,
0,
16,
104,
0,
11,
152,
2,
1,
5,
127,
35,
0,
65,
32,
107,
34,
4,
36,
0,
2,
64,
2,
64,
32,
3,
4,
64,
32,
4,
65,
8,
106,
65,
4,
114,
33,
6,
3,
64,
32,
4,
65,
8,
106,
32,
1,
32,
2,
32,
3,
16,
28,
2,
64,
32,
4,
40,
2,
8,
65,
1,
71,
4,
64,
32,
4,
40,
2,
12,
34,
5,
69,
4,
64,
32,
4,
65,
172,
137,
192,
0,
65,
28,
16,
78,
32,
4,
65,
24,
106,
65,
14,
32,
4,
40,
2,
0,
32,
4,
40,
2,
4,
16,
94,
32,
0,
32,
4,
41,
3,
24,
55,
2,
0,
12,
6,
11,
32,
3,
32,
5,
73,
13,
4,
32,
2,
32,
5,
106,
33,
2,
32,
3,
32,
5,
107,
33,
3,
12,
1,
11,
32,
6,
16,
141,
1,
65,
255,
1,
113,
65,
15,
71,
4,
64,
32,
0,
32,
4,
41,
2,
12,
55,
2,
0,
12,
5,
11,
32,
4,
40,
2,
8,
69,
13,
0,
32,
4,
45,
0,
12,
65,
2,
73,
13,
0,
32,
4,
40,
2,
16,
34,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
7,
40,
2,
4,
34,
8,
4,
64,
32,
5,
40,
2,
0,
32,
8,
32,
7,
40,
2,
8,
16,
162,
1,
11,
32,
4,
40,
2,
16,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
13,
0,
11,
11,
32,
0,
65,
3,
58,
0,
0,
12,
1,
11,
32,
5,
32,
3,
65,
156,
137,
192,
0,
16,
105,
0,
11,
32,
4,
65,
32,
106,
36,
0,
11,
152,
2,
1,
5,
127,
35,
0,
65,
32,
107,
34,
4,
36,
0,
2,
64,
2,
64,
32,
3,
4,
64,
32,
4,
65,
8,
106,
65,
4,
114,
33,
6,
3,
64,
32,
4,
65,
8,
106,
32,
1,
32,
2,
32,
3,
16,
27,
2,
64,
32,
4,
40,
2,
8,
65,
1,
71,
4,
64,
32,
4,
40,
2,
12,
34,
5,
69,
4,
64,
32,
4,
65,
172,
137,
192,
0,
65,
28,
16,
78,
32,
4,
65,
24,
106,
65,
14,
32,
4,
40,
2,
0,
32,
4,
40,
2,
4,
16,
94,
32,
0,
32,
4,
41,
3,
24,
55,
2,
0,
12,
6,
11,
32,
3,
32,
5,
73,
13,
4,
32,
2,
32,
5,
106,
33,
2,
32,
3,
32,
5,
107,
33,
3,
12,
1,
11,
32,
6,
16,
141,
1,
65,
255,
1,
113,
65,
15,
71,
4,
64,
32,
0,
32,
4,
41,
2,
12,
55,
2,
0,
12,
5,
11,
32,
4,
40,
2,
8,
69,
13,
0,
32,
4,
45,
0,
12,
65,
2,
73,
13,
0,
32,
4,
40,
2,
16,
34,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
7,
40,
2,
4,
34,
8,
4,
64,
32,
5,
40,
2,
0,
32,
8,
32,
7,
40,
2,
8,
16,
162,
1,
11,
32,
4,
40,
2,
16,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
13,
0,
11,
11,
32,
0,
65,
3,
58,
0,
0,
12,
1,
11,
32,
5,
32,
3,
65,
156,
137,
192,
0,
16,
105,
0,
11,
32,
4,
65,
32,
106,
36,
0,
11,
152,
2,
1,
5,
127,
35,
0,
65,
32,
107,
34,
4,
36,
0,
2,
64,
2,
64,
32,
3,
4,
64,
32,
4,
65,
8,
106,
65,
4,
114,
33,
6,
3,
64,
32,
4,
65,
8,
106,
32,
1,
32,
2,
32,
3,
16,
28,
2,
64,
32,
4,
40,
2,
8,
65,
1,
71,
4,
64,
32,
4,
40,
2,
12,
34,
5,
69,
4,
64,
32,
4,
65,
196,
138,
192,
0,
65,
28,
16,
78,
32,
4,
65,
24,
106,
65,
14,
32,
4,
40,
2,
0,
32,
4,
40,
2,
4,
16,
94,
32,
0,
32,
4,
41,
3,
24,
55,
2,
0,
12,
6,
11,
32,
3,
32,
5,
73,
13,
4,
32,
2,
32,
5,
106,
33,
2,
32,
3,
32,
5,
107,
33,
3,
12,
1,
11,
32,
6,
16,
141,
1,
65,
255,
1,
113,
65,
15,
71,
4,
64,
32,
0,
32,
4,
41,
2,
12,
55,
2,
0,
12,
5,
11,
32,
4,
40,
2,
8,
69,
13,
0,
32,
4,
45,
0,
12,
65,
2,
73,
13,
0,
32,
4,
40,
2,
16,
34,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
7,
40,
2,
4,
34,
8,
4,
64,
32,
5,
40,
2,
0,
32,
8,
32,
7,
40,
2,
8,
16,
162,
1,
11,
32,
4,
40,
2,
16,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
13,
0,
11,
11,
32,
0,
65,
3,
58,
0,
0,
12,
1,
11,
32,
5,
32,
3,
65,
180,
138,
192,
0,
16,
105,
0,
11,
32,
4,
65,
32,
106,
36,
0,
11,
152,
2,
1,
5,
127,
35,
0,
65,
32,
107,
34,
4,
36,
0,
2,
64,
2,
64,
32,
3,
4,
64,
32,
4,
65,
8,
106,
65,
4,
114,
33,
6,
3,
64,
32,
4,
65,
8,
106,
32,
1,
32,
2,
32,
3,
16,
27,
2,
64,
32,
4,
40,
2,
8,
65,
1,
71,
4,
64,
32,
4,
40,
2,
12,
34,
5,
69,
4,
64,
32,
4,
65,
196,
138,
192,
0,
65,
28,
16,
78,
32,
4,
65,
24,
106,
65,
14,
32,
4,
40,
2,
0,
32,
4,
40,
2,
4,
16,
94,
32,
0,
32,
4,
41,
3,
24,
55,
2,
0,
12,
6,
11,
32,
3,
32,
5,
73,
13,
4,
32,
2,
32,
5,
106,
33,
2,
32,
3,
32,
5,
107,
33,
3,
12,
1,
11,
32,
6,
16,
141,
1,
65,
255,
1,
113,
65,
15,
71,
4,
64,
32,
0,
32,
4,
41,
2,
12,
55,
2,
0,
12,
5,
11,
32,
4,
40,
2,
8,
69,
13,
0,
32,
4,
45,
0,
12,
65,
2,
73,
13,
0,
32,
4,
40,
2,
16,
34,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
7,
40,
2,
4,
34,
8,
4,
64,
32,
5,
40,
2,
0,
32,
8,
32,
7,
40,
2,
8,
16,
162,
1,
11,
32,
4,
40,
2,
16,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
13,
0,
11,
11,
32,
0,
65,
3,
58,
0,
0,
12,
1,
11,
32,
5,
32,
3,
65,
180,
138,
192,
0,
16,
105,
0,
11,
32,
4,
65,
32,
106,
36,
0,
11,
252,
1,
1,
2,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
32,
0,
40,
2,
0,
32,
2,
65,
0,
54,
2,
12,
2,
127,
2,
64,
2,
64,
32,
1,
65,
128,
1,
79,
4,
64,
32,
1,
65,
128,
16,
73,
13,
1,
32,
2,
65,
12,
106,
33,
0,
32,
1,
65,
128,
128,
4,
79,
13,
2,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
14,
32,
2,
32,
1,
65,
12,
118,
65,
224,
1,
114,
58,
0,
12,
32,
2,
32,
1,
65,
6,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
65,
3,
12,
3,
11,
32,
2,
32,
1,
58,
0,
12,
32,
2,
65,
12,
106,
33,
0,
65,
1,
12,
2,
11,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
32,
2,
32,
1,
65,
6,
118,
65,
192,
1,
114,
58,
0,
12,
32,
2,
65,
12,
106,
33,
0,
65,
2,
12,
1,
11,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
15,
32,
2,
32,
1,
65,
18,
118,
65,
240,
1,
114,
58,
0,
12,
32,
2,
32,
1,
65,
6,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
14,
32,
2,
32,
1,
65,
12,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
65,
4,
11,
33,
1,
32,
0,
32,
1,
16,
34,
32,
2,
65,
16,
106,
36,
0,
11,
249,
1,
1,
2,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
32,
2,
65,
0,
54,
2,
12,
2,
127,
2,
64,
2,
64,
32,
1,
65,
128,
1,
79,
4,
64,
32,
1,
65,
128,
16,
73,
13,
1,
32,
2,
65,
12,
106,
33,
3,
32,
1,
65,
128,
128,
4,
79,
13,
2,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
14,
32,
2,
32,
1,
65,
12,
118,
65,
224,
1,
114,
58,
0,
12,
32,
2,
32,
1,
65,
6,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
65,
3,
12,
3,
11,
32,
2,
32,
1,
58,
0,
12,
32,
2,
65,
12,
106,
33,
3,
65,
1,
12,
2,
11,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
32,
2,
32,
1,
65,
6,
118,
65,
192,
1,
114,
58,
0,
12,
32,
2,
65,
12,
106,
33,
3,
65,
2,
12,
1,
11,
32,
2,
32,
1,
65,
63,
113,
65,
128,
1,
114,
58,
0,
15,
32,
2,
32,
1,
65,
18,
118,
65,
240,
1,
114,
58,
0,
12,
32,
2,
32,
1,
65,
6,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
14,
32,
2,
32,
1,
65,
12,
118,
65,
63,
113,
65,
128,
1,
114,
58,
0,
13,
65,
4,
11,
33,
1,
32,
0,
32,
3,
32,
1,
16,
34,
32,
2,
65,
16,
106,
36,
0,
11,
132,
2,
1,
5,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
32,
2,
65,
0,
58,
0,
15,
32,
2,
65,
16,
106,
32,
1,
40,
2,
0,
32,
2,
65,
15,
106,
65,
1,
16,
79,
2,
64,
2,
64,
32,
2,
40,
2,
16,
65,
1,
70,
4,
64,
32,
2,
65,
16,
106,
65,
4,
114,
33,
4,
3,
64,
32,
4,
16,
141,
1,
65,
255,
1,
113,
65,
15,
71,
13,
2,
2,
64,
32,
2,
40,
2,
16,
69,
13,
0,
32,
2,
45,
0,
20,
65,
2,
73,
13,
0,
32,
2,
40,
2,
24,
34,
3,
40,
2,
0,
32,
3,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
3,
40,
2,
4,
34,
5,
40,
2,
4,
34,
6,
4,
64,
32,
3,
40,
2,
0,
32,
6,
32,
5,
40,
2,
8,
16,
162,
1,
11,
32,
2,
40,
2,
24,
65,
12,
65,
4,
16,
162,
1,
11,
32,
2,
65,
16,
106,
32,
1,
40,
2,
0,
32,
2,
65,
15,
106,
65,
1,
16,
79,
32,
2,
40,
2,
16,
65,
1,
70,
13,
0,
11,
11,
32,
2,
40,
2,
20,
69,
4,
64,
32,
0,
65,
2,
58,
0,
0,
12,
2,
11,
32,
0,
32,
2,
45,
0,
15,
58,
0,
1,
32,
0,
65,
0,
58,
0,
0,
12,
1,
11,
32,
0,
65,
1,
58,
0,
0,
32,
0,
65,
4,
106,
32,
2,
41,
2,
20,
55,
0,
0,
11,
32,
2,
65,
32,
106,
36,
0,
11,
250,
1,
1,
5,
127,
35,
0,
65,
16,
107,
34,
4,
36,
0,
2,
64,
2,
64,
2,
64,
32,
3,
4,
64,
32,
4,
65,
4,
114,
33,
6,
3,
64,
32,
4,
32,
1,
32,
2,
32,
3,
16,
79,
2,
64,
32,
4,
40,
2,
0,
65,
1,
71,
4,
64,
32,
4,
40,
2,
4,
34,
5,
69,
13,
4,
32,
3,
32,
5,
73,
13,
5,
32,
2,
32,
5,
106,
33,
2,
32,
3,
32,
5,
107,
33,
3,
12,
1,
11,
32,
6,
16,
141,
1,
65,
255,
1,
113,
65,
15,
71,
4,
64,
32,
0,
32,
4,
41,
2,
4,
55,
2,
0,
12,
6,
11,
32,
4,
40,
2,
0,
69,
13,
0,
32,
4,
45,
0,
4,
65,
2,
73,
13,
0,
32,
4,
40,
2,
8,
34,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
7,
40,
2,
4,
34,
8,
4,
64,
32,
5,
40,
2,
0,
32,
8,
32,
7,
40,
2,
8,
16,
162,
1,
11,
32,
4,
40,
2,
8,
65,
12,
65,
4,
16,
162,
1,
11,
32,
3,
13,
0,
11,
11,
32,
0,
65,
3,
58,
0,
0,
12,
2,
11,
32,
4,
16,
87,
32,
0,
32,
4,
41,
3,
0,
55,
2,
0,
12,
1,
11,
32,
5,
32,
3,
65,
204,
139,
192,
0,
16,
105,
0,
11,
32,
4,
65,
16,
106,
36,
0,
11,
251,
1,
1,
4,
127,
2,
64,
2,
64,
32,
1,
45,
0,
16,
69,
4,
64,
32,
1,
40,
2,
4,
34,
4,
32,
4,
32,
3,
32,
4,
32,
3,
73,
27,
34,
4,
107,
33,
5,
32,
1,
40,
2,
0,
34,
6,
32,
4,
106,
33,
7,
32,
4,
65,
1,
70,
4,
64,
32,
3,
4,
64,
32,
2,
32,
6,
45,
0,
0,
58,
0,
0,
32,
1,
32,
5,
54,
2,
4,
32,
1,
32,
7,
54,
2,
0,
12,
3,
11,
65,
0,
65,
0,
65,
192,
134,
192,
0,
16,
103,
0,
11,
32,
2,
32,
6,
32,
4,
16,
125,
26,
32,
1,
32,
5,
54,
2,
4,
32,
1,
32,
7,
54,
2,
0,
32,
3,
69,
32,
4,
114,
13,
1,
32,
1,
65,
1,
58,
0,
16,
11,
32,
1,
40,
2,
8,
33,
5,
2,
64,
32,
1,
65,
12,
106,
40,
2,
0,
34,
6,
32,
3,
32,
6,
32,
3,
73,
27,
34,
4,
65,
1,
71,
4,
64,
32,
2,
32,
5,
32,
4,
16,
125,
26,
12,
1,
11,
32,
3,
69,
13,
2,
32,
2,
32,
5,
45,
0,
0,
58,
0,
0,
11,
32,
1,
32,
6,
32,
4,
107,
54,
2,
12,
32,
1,
32,
4,
32,
5,
106,
54,
2,
8,
11,
32,
0,
65,
0,
54,
2,
0,
32,
0,
32,
4,
54,
2,
4,
15,
11,
65,
0,
65,
0,
65,
192,
134,
192,
0,
16,
103,
0,
11,
242,
1,
1,
1,
127,
32,
2,
32,
3,
107,
32,
5,
113,
33,
3,
32,
4,
65,
3,
71,
4,
64,
32,
0,
32,
1,
32,
3,
32,
2,
32,
4,
32,
5,
16,
22,
15,
11,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
3,
32,
1,
73,
4,
64,
32,
2,
32,
1,
79,
13,
1,
32,
0,
32,
2,
106,
32,
0,
32,
3,
106,
45,
0,
0,
58,
0,
0,
32,
3,
65,
1,
106,
32,
5,
113,
34,
4,
32,
1,
79,
13,
2,
32,
2,
65,
1,
106,
34,
6,
32,
1,
79,
13,
3,
32,
0,
32,
6,
106,
32,
0,
32,
4,
106,
45,
0,
0,
58,
0,
0,
32,
3,
65,
2,
106,
32,
5,
113,
34,
3,
32,
1,
79,
13,
4,
32,
2,
65,
2,
106,
34,
2,
32,
1,
79,
13,
5,
32,
0,
32,
2,
106,
32,
0,
32,
3,
106,
45,
0,
0,
58,
0,
0,
15,
11,
32,
3,
32,
1,
65,
172,
188,
192,
0,
16,
103,
0,
11,
32,
2,
32,
1,
65,
188,
188,
192,
0,
16,
103,
0,
11,
32,
4,
32,
1,
65,
204,
188,
192,
0,
16,
103,
0,
11,
32,
6,
32,
1,
65,
220,
188,
192,
0,
16,
103,
0,
11,
32,
3,
32,
1,
65,
236,
188,
192,
0,
16,
103,
0,
11,
32,
2,
32,
1,
65,
252,
188,
192,
0,
16,
103,
0,
11,
246,
1,
2,
3,
127,
1,
126,
35,
0,
65,
32,
107,
34,
3,
36,
0,
2,
64,
2,
64,
32,
2,
65,
127,
74,
4,
64,
2,
127,
32,
2,
69,
4,
64,
65,
1,
33,
5,
65,
0,
12,
1,
11,
32,
2,
65,
1,
16,
156,
1,
34,
5,
69,
13,
2,
32,
2,
11,
33,
4,
32,
3,
65,
0,
54,
2,
24,
32,
3,
32,
5,
54,
2,
16,
32,
3,
32,
4,
54,
2,
20,
32,
3,
65,
16,
106,
65,
0,
32,
2,
16,
85,
32,
3,
40,
2,
24,
34,
4,
32,
3,
40,
2,
16,
106,
32,
2,
32,
1,
32,
2,
16,
81,
32,
3,
65,
8,
106,
32,
2,
32,
4,
106,
34,
1,
54,
2,
0,
32,
3,
32,
1,
54,
2,
24,
32,
3,
32,
3,
41,
3,
16,
34,
6,
55,
3,
0,
32,
3,
65,
24,
106,
34,
2,
32,
1,
54,
2,
0,
32,
3,
32,
6,
55,
3,
16,
65,
12,
65,
4,
16,
156,
1,
34,
1,
69,
13,
2,
32,
1,
32,
3,
41,
3,
16,
55,
2,
0,
32,
1,
65,
8,
106,
32,
2,
40,
2,
0,
54,
2,
0,
32,
0,
65,
192,
148,
192,
0,
54,
2,
4,
32,
0,
32,
1,
54,
2,
0,
32,
3,
65,
32,
106,
36,
0,
15,
11,
16,
175,
1,
0,
11,
32,
2,
16,
168,
1,
0,
11,
65,
12,
65,
4,
16,
171,
1,
0,
11,
238,
1,
2,
6,
127,
1,
126,
35,
0,
65,
16,
107,
34,
2,
36,
0,
32,
1,
65,
64,
107,
33,
6,
32,
1,
65,
40,
106,
33,
5,
2,
64,
2,
64,
2,
64,
3,
64,
32,
2,
32,
1,
16,
82,
32,
2,
40,
2,
4,
33,
3,
32,
2,
40,
2,
0,
34,
4,
65,
255,
1,
113,
65,
3,
71,
13,
1,
32,
4,
65,
3,
113,
65,
2,
70,
4,
64,
32,
3,
40,
2,
0,
32,
3,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
3,
40,
2,
4,
34,
4,
40,
2,
4,
34,
7,
4,
64,
32,
3,
40,
2,
0,
32,
7,
32,
4,
40,
2,
8,
16,
162,
1,
11,
32,
3,
65,
12,
65,
4,
16,
162,
1,
11,
32,
5,
16,
169,
1,
33,
8,
32,
2,
32,
5,
65,
180,
133,
192,
0,
65,
0,
32,
6,
65,
4,
16,
114,
32,
2,
45,
0,
0,
65,
1,
70,
13,
2,
32,
5,
16,
169,
1,
32,
8,
82,
13,
0,
11,
32,
0,
65,
3,
58,
0,
0,
12,
2,
11,
32,
0,
32,
4,
173,
32,
3,
173,
66,
32,
134,
132,
55,
2,
0,
12,
1,
11,
32,
2,
32,
2,
40,
2,
4,
32,
2,
40,
2,
8,
16,
135,
1,
32,
0,
32,
2,
41,
3,
0,
55,
2,
0,
11,
32,
2,
65,
16,
106,
36,
0,
11,
227,
1,
1,
4,
127,
35,
0,
65,
64,
106,
34,
2,
36,
0,
32,
1,
65,
4,
106,
33,
4,
32,
1,
40,
2,
4,
69,
4,
64,
32,
1,
40,
2,
0,
33,
3,
32,
2,
65,
0,
54,
2,
32,
32,
2,
66,
1,
55,
3,
24,
32,
2,
32,
2,
65,
24,
106,
54,
2,
36,
32,
2,
65,
56,
106,
32,
3,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
2,
65,
48,
106,
32,
3,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
2,
32,
3,
41,
2,
0,
55,
3,
40,
32,
2,
65,
36,
106,
65,
128,
196,
193,
0,
32,
2,
65,
40,
106,
16,
23,
26,
32,
2,
65,
16,
106,
34,
3,
32,
2,
40,
2,
32,
54,
2,
0,
32,
2,
32,
2,
41,
3,
24,
55,
3,
8,
2,
64,
32,
1,
40,
2,
4,
34,
5,
69,
13,
0,
32,
1,
65,
8,
106,
40,
2,
0,
34,
1,
69,
13,
0,
32,
5,
32,
1,
65,
1,
16,
162,
1,
11,
32,
4,
32,
2,
41,
3,
8,
55,
2,
0,
32,
4,
65,
8,
106,
32,
3,
40,
2,
0,
54,
2,
0,
11,
32,
0,
65,
244,
199,
193,
0,
54,
2,
4,
32,
0,
32,
4,
54,
2,
0,
32,
2,
65,
64,
107,
36,
0,
11,
225,
1,
2,
4,
127,
1,
126,
35,
0,
65,
16,
107,
34,
4,
36,
0,
32,
4,
65,
8,
106,
32,
1,
16,
32,
32,
4,
40,
2,
12,
33,
2,
2,
64,
2,
64,
32,
4,
40,
2,
8,
34,
3,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
3,
65,
3,
113,
65,
2,
70,
4,
64,
32,
2,
40,
2,
0,
32,
2,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
2,
40,
2,
4,
34,
3,
40,
2,
4,
34,
5,
4,
64,
32,
2,
40,
2,
0,
32,
5,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
2,
65,
12,
65,
4,
16,
162,
1,
11,
32,
1,
40,
2,
24,
33,
2,
65,
0,
33,
3,
32,
1,
65,
0,
54,
2,
24,
32,
2,
69,
13,
2,
32,
1,
65,
28,
106,
41,
2,
0,
33,
6,
32,
0,
32,
2,
54,
2,
4,
32,
0,
65,
8,
106,
32,
6,
55,
2,
0,
12,
1,
11,
32,
0,
32,
3,
173,
32,
2,
173,
66,
32,
134,
132,
55,
2,
4,
65,
1,
33,
3,
11,
32,
0,
32,
3,
54,
2,
0,
32,
1,
16,
46,
32,
4,
65,
16,
106,
36,
0,
15,
11,
65,
248,
131,
192,
0,
65,
43,
65,
252,
132,
192,
0,
16,
119,
0,
11,
240,
1,
1,
4,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
2,
64,
32,
0,
40,
2,
24,
69,
13,
0,
32,
2,
65,
8,
106,
32,
0,
16,
58,
32,
2,
45,
0,
8,
65,
2,
70,
4,
64,
32,
2,
40,
2,
12,
34,
1,
40,
2,
0,
32,
1,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
1,
40,
2,
4,
34,
3,
40,
2,
4,
34,
4,
4,
64,
32,
1,
40,
2,
0,
32,
4,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
1,
65,
12,
65,
4,
16,
162,
1,
11,
32,
0,
40,
2,
24,
34,
1,
69,
13,
0,
32,
0,
65,
28,
106,
40,
2,
0,
34,
3,
69,
13,
0,
32,
1,
32,
3,
65,
1,
16,
162,
1,
11,
32,
0,
40,
2,
16,
34,
1,
65,
192,
128,
4,
106,
40,
2,
0,
65,
204,
153,
5,
65,
1,
16,
162,
1,
32,
1,
40,
2,
200,
128,
4,
65,
224,
33,
65,
2,
16,
162,
1,
32,
1,
65,
212,
128,
4,
106,
40,
2,
0,
65,
130,
130,
10,
65,
2,
16,
162,
1,
32,
0,
40,
2,
16,
65,
232,
128,
4,
65,
4,
16,
162,
1,
32,
0,
65,
40,
106,
40,
2,
0,
34,
1,
4,
64,
32,
0,
40,
2,
36,
32,
1,
65,
1,
16,
162,
1,
11,
32,
2,
65,
16,
106,
36,
0,
11,
225,
1,
2,
4,
127,
1,
126,
35,
0,
65,
16,
107,
34,
4,
36,
0,
32,
4,
65,
8,
106,
32,
1,
16,
58,
32,
4,
40,
2,
12,
33,
2,
2,
64,
2,
64,
32,
4,
40,
2,
8,
34,
3,
65,
255,
1,
113,
65,
3,
70,
4,
64,
32,
3,
65,
3,
113,
65,
2,
70,
4,
64,
32,
2,
40,
2,
0,
32,
2,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
2,
40,
2,
4,
34,
3,
40,
2,
4,
34,
5,
4,
64,
32,
2,
40,
2,
0,
32,
5,
32,
3,
40,
2,
8,
16,
162,
1,
11,
32,
2,
65,
12,
65,
4,
16,
162,
1,
11,
32,
1,
40,
2,
24,
33,
2,
65,
0,
33,
3,
32,
1,
65,
0,
54,
2,
24,
32,
2,
69,
13,
2,
32,
1,
65,
28,
106,
41,
2,
0,
33,
6,
32,
0,
32,
2,
54,
2,
4,
32,
0,
65,
8,
106,
32,
6,
55,
2,
0,
12,
1,
11,
32,
0,
32,
3,
173,
32,
2,
173,
66,
32,
134,
132,
55,
2,
4,
65,
1,
33,
3,
11,
32,
0,
32,
3,
54,
2,
0,
32,
1,
16,
75,
32,
4,
65,
16,
106,
36,
0,
15,
11,
65,
248,
131,
192,
0,
65,
43,
65,
252,
132,
192,
0,
16,
119,
0,
11,
241,
1,
1,
1,
127,
35,
0,
65,
16,
107,
34,
3,
36,
0,
32,
3,
32,
1,
40,
2,
0,
34,
1,
40,
2,
0,
54,
2,
12,
2,
127,
2,
64,
32,
2,
65,
2,
106,
34,
2,
32,
2,
108,
34,
2,
65,
128,
16,
32,
2,
65,
128,
16,
75,
27,
34,
4,
65,
4,
32,
3,
65,
12,
106,
65,
240,
142,
192,
0,
65,
240,
142,
192,
0,
16,
30,
34,
2,
4,
64,
32,
1,
32,
3,
40,
2,
12,
54,
2,
0,
12,
1,
11,
32,
3,
65,
240,
142,
192,
0,
32,
4,
65,
4,
16,
97,
2,
64,
32,
3,
40,
2,
0,
4,
64,
32,
1,
32,
3,
40,
2,
12,
54,
2,
0,
12,
1,
11,
32,
3,
40,
2,
4,
34,
2,
32,
3,
40,
2,
12,
54,
2,
8,
32,
3,
32,
2,
54,
2,
12,
32,
4,
65,
4,
32,
3,
65,
12,
106,
65,
240,
142,
192,
0,
65,
240,
142,
192,
0,
16,
30,
33,
2,
32,
1,
32,
3,
40,
2,
12,
54,
2,
0,
32,
2,
13,
1,
11,
65,
1,
12,
1,
11,
32,
2,
66,
0,
55,
2,
4,
32,
2,
32,
2,
32,
4,
65,
2,
116,
106,
65,
2,
114,
54,
2,
0,
65,
0,
11,
33,
1,
32,
0,
32,
2,
54,
2,
4,
32,
0,
32,
1,
54,
2,
0,
32,
3,
65,
16,
106,
36,
0,
11,
222,
1,
1,
3,
127,
35,
0,
65,
32,
107,
34,
3,
36,
0,
2,
64,
2,
64,
32,
2,
65,
127,
74,
4,
64,
2,
127,
32,
2,
69,
4,
64,
65,
1,
33,
5,
65,
0,
12,
1,
11,
32,
2,
65,
1,
16,
156,
1,
34,
5,
69,
13,
2,
32,
2,
11,
33,
4,
32,
3,
65,
0,
54,
2,
8,
32,
3,
32,
5,
54,
2,
0,
32,
3,
32,
4,
54,
2,
4,
32,
3,
65,
0,
32,
2,
16,
85,
32,
3,
40,
2,
8,
34,
4,
32,
3,
40,
2,
0,
106,
32,
2,
32,
1,
32,
2,
16,
80,
32,
3,
32,
2,
32,
4,
106,
34,
1,
54,
2,
8,
32,
3,
65,
24,
106,
34,
2,
32,
1,
54,
2,
0,
32,
3,
32,
3,
41,
3,
0,
55,
3,
16,
65,
12,
65,
4,
16,
156,
1,
34,
1,
69,
13,
2,
32,
1,
32,
3,
41,
3,
16,
55,
2,
0,
32,
1,
65,
8,
106,
32,
2,
40,
2,
0,
54,
2,
0,
32,
0,
65,
208,
134,
192,
0,
54,
2,
4,
32,
0,
32,
1,
54,
2,
0,
32,
3,
65,
32,
106,
36,
0,
15,
11,
16,
175,
1,
0,
11,
32,
2,
16,
168,
1,
0,
11,
65,
12,
65,
4,
16,
171,
1,
0,
11,
224,
1,
1,
6,
127,
35,
0,
65,
16,
107,
34,
6,
36,
0,
32,
6,
32,
1,
40,
2,
24,
34,
9,
32,
2,
32,
3,
16,
69,
65,
1,
33,
7,
32,
6,
65,
8,
106,
40,
2,
0,
33,
5,
32,
6,
40,
2,
4,
33,
4,
2,
64,
2,
64,
32,
6,
40,
2,
0,
34,
8,
65,
1,
71,
4,
64,
32,
8,
69,
32,
4,
65,
255,
1,
113,
65,
2,
73,
114,
69,
4,
64,
32,
5,
40,
2,
0,
32,
5,
40,
2,
4,
40,
2,
0,
17,
1,
0,
32,
5,
40,
2,
4,
34,
7,
40,
2,
4,
34,
8,
4,
64,
32,
5,
40,
2,
0,
32,
8,
32,
7,
40,
2,
8,
16,
162,
1,
11,
32,
5,
65,
12,
65,
4,
16,
162,
1,
11,
32,
9,
32,
9,
40,
2,
20,
32,
4,
106,
54,
2,
20,
32,
4,
32,
3,
75,
13,
2,
32,
1,
32,
2,
32,
4,
16,
149,
1,
32,
0,
32,
4,
54,
2,
4,
65,
0,
33,
7,
12,
1,
11,
32,
0,
32,
4,
173,
32,
5,
173,
66,
32,
134,
132,
55,
2,
4,
11,
32,
0,
32,
7,
54,
2,
0,
32,
6,
65,
16,
106,
36,
0,
15,
11,
32,
4,
32,
3,
65,
208,
140,
192,
0,
16,
104,
0,
11,
222,
1,
1,
1,
127,
35,
0,
65,
224,
0,
107,
34,
4,
36,
0,
32,
4,
32,
1,
54,
2,
8,
32,
4,
32,
3,
54,
2,
12,
32,
1,
32,
3,
70,
4,
64,
32,
0,
32,
2,
32,
1,
16,
125,
26,
32,
4,
65,
224,
0,
106,
36,
0,
15,
11,
32,
4,
65,
60,
106,
65,
11,
54,
2,
0,
32,
4,
65,
52,
106,
65,
1,
54,
2,
0,
32,
4,
65,
36,
106,
65,
3,
54,
2,
0,
32,
4,
32,
4,
65,
8,
106,
54,
2,
64,
32,
4,
32,
4,
65,
12,
106,
54,
2,
68,
32,
4,
65,
220,
0,
106,
65,
0,
54,
2,
0,
32,
4,
66,
3,
55,
2,
20,
32,
4,
65,
156,
141,
192,
0,
54,
2,
16,
32,
4,
65,
1,
54,
2,
44,
32,
4,
65,
240,
141,
192,
0,
54,
2,
88,
32,
4,
66,
1,
55,
2,
76,
32,
4,
65,
232,
141,
192,
0,
54,
2,
72,
32,
4,
32,
4,
65,
40,
106,
54,
2,
32,
32,
4,
32,
4,
65,
200,
0,
106,
54,
2,
56,
32,
4,
32,
4,
65,
196,
0,
106,
54,
2,
48,
32,
4,
32,
4,
65,
64,
107,
54,
2,
40,
32,
4,
65,
16,
106,
65,
224,
142,
192,
0,
16,
137,
1,
0,
11,
222,
1,
1,
1,
127,
35,
0,
65,
224,
0,
107,
34,
4,
36,
0,
32,
4,
32,
1,
54,
2,
8,
32,
4,
32,
3,
54,
2,
12,
32,
1,
32,
3,
70,
4,
64,
32,
0,
32,
2,
32,
1,
16,
125,
26,
32,
4,
65,
224,
0,
106,
36,
0,
15,
11,
32,
4,
65,
60,
106,
65,
11,
54,
2,
0,
32,
4,
65,
52,
106,
65,
40,
54,
2,
0,
32,
4,
65,
36,
106,
65,
3,
54,
2,
0,
32,
4,
32,
4,
65,
8,
106,
54,
2,
64,
32,
4,
32,
4,
65,
12,
106,
54,
2,
68,
32,
4,
65,
220,
0,
106,
65,
0,
54,
2,
0,
32,
4,
66,
3,
55,
2,
20,
32,
4,
65,
188,
151,
192,
0,
54,
2,
16,
32,
4,
65,
40,
54,
2,
44,
32,
4,
65,
144,
152,
192,
0,
54,
2,
88,
32,
4,
66,
1,
55,
2,
76,
32,
4,
65,
136,
152,
192,
0,
54,
2,
72,
32,
4,
32,
4,
65,
40,
106,
54,
2,
32,
32,
4,
32,
4,
65,
200,
0,
106,
54,
2,
56,
32,
4,
32,
4,
65,
196,
0,
106,
54,
2,
48,
32,
4,
32,
4,
65,
64,
107,
54,
2,
40,
32,
4,
65,
16,
106,
65,
128,
153,
192,
0,
16,
137,
1,
0,
11,
208,
1,
1,
6,
127,
2,
64,
2,
64,
32,
1,
65,
200,
0,
106,
40,
2,
0,
34,
2,
69,
13,
0,
32,
1,
40,
2,
24,
4,
64,
32,
1,
65,
24,
106,
33,
7,
32,
1,
65,
32,
106,
33,
5,
32,
1,
65,
200,
0,
106,
33,
6,
3,
64,
32,
1,
40,
2,
64,
33,
4,
32,
7,
32,
5,
40,
2,
0,
32,
2,
16,
85,
32,
5,
40,
2,
0,
34,
3,
32,
1,
40,
2,
24,
106,
32,
2,
32,
4,
32,
2,
16,
80,
32,
5,
32,
2,
32,
3,
106,
54,
2,
0,
32,
1,
32,
4,
32,
2,
16,
149,
1,
32,
6,
40,
2,
0,
34,
3,
32,
2,
73,
13,
3,
32,
6,
65,
0,
54,
2,
0,
32,
3,
32,
2,
107,
34,
3,
69,
13,
2,
32,
1,
40,
2,
64,
34,
4,
32,
2,
32,
4,
106,
32,
3,
16,
99,
32,
6,
32,
3,
54,
2,
0,
32,
3,
33,
2,
32,
1,
40,
2,
24,
13,
0,
11,
11,
65,
248,
131,
192,
0,
65,
43,
65,
164,
133,
192,
0,
16,
119,
0,
11,
32,
0,
65,
3,
58,
0,
0,
15,
11,
32,
2,
32,
3,
16,
102,
0,
11,
139,
2,
1,
2,
127,
35,
0,
65,
32,
107,
34,
3,
36,
0,
65,
1,
33,
4,
2,
64,
2,
64,
2,
64,
65,
176,
239,
193,
0,
40,
2,
0,
65,
1,
71,
4,
64,
65,
176,
239,
193,
0,
66,
129,
128,
128,
128,
16,
55,
3,
0,
12,
1,
11,
65,
180,
239,
193,
0,
65,
180,
239,
193,
0,
40,
2,
0,
65,
1,
106,
34,
4,
54,
2,
0,
32,
4,
65,
2,
75,
13,
1,
11,
32,
3,
32,
2,
54,
2,
28,
32,
3,
32,
1,
54,
2,
24,
32,
3,
65,
152,
196,
193,
0,
54,
2,
20,
32,
3,
65,
152,
196,
193,
0,
54,
2,
16,
65,
160,
239,
193,
0,
40,
2,
0,
34,
1,
65,
127,
76,
13,
0,
65,
160,
239,
193,
0,
32,
1,
65,
1,
106,
34,
1,
54,
2,
0,
65,
160,
239,
193,
0,
65,
168,
239,
193,
0,
40,
2,
0,
34,
2,
4,
127,
65,
164,
239,
193,
0,
40,
2,
0,
32,
3,
65,
8,
106,
32,
0,
65,
240,
199,
193,
0,
40,
2,
0,
17,
3,
0,
32,
3,
32,
3,
41,
3,
8,
55,
3,
16,
32,
3,
65,
16,
106,
32,
2,
40,
2,
12,
17,
3,
0,
65,
160,
239,
193,
0,
40,
2,
0,
5,
32,
1,
11,
65,
127,
106,
54,
2,
0,
32,
4,
65,
1,
77,
13,
1,
11,
0,
11,
35,
0,
65,
16,
107,
34,
1,
36,
0,
32,
1,
65,
224,
199,
193,
0,
54,
2,
12,
32,
1,
32,
0,
54,
2,
8,
0,
11,
177,
1,
1,
2,
127,
2,
64,
2,
64,
32,
0,
65,
4,
106,
40,
2,
0,
34,
3,
32,
0,
40,
2,
8,
34,
2,
107,
32,
1,
73,
4,
64,
32,
1,
32,
2,
106,
34,
1,
32,
2,
73,
13,
1,
32,
3,
65,
1,
116,
34,
2,
32,
1,
32,
2,
32,
1,
75,
27,
34,
1,
65,
8,
32,
1,
65,
8,
75,
27,
34,
2,
65,
0,
72,
13,
1,
2,
64,
32,
0,
40,
2,
0,
65,
0,
32,
3,
27,
34,
1,
4,
64,
32,
2,
32,
3,
70,
13,
1,
32,
3,
69,
4,
64,
32,
2,
65,
1,
16,
156,
1,
33,
1,
12,
2,
11,
32,
1,
32,
3,
32,
2,
16,
151,
1,
33,
1,
12,
1,
11,
32,
2,
65,
1,
16,
156,
1,
33,
1,
11,
32,
1,
69,
13,
2,
32,
0,
32,
1,
54,
2,
0,
32,
0,
65,
4,
106,
32,
2,
54,
2,
0,
11,
15,
11,
16,
164,
1,
0,
11,
32,
2,
65,
1,
16,
171,
1,
0,
11,
174,
1,
1,
1,
127,
32,
0,
65,
4,
106,
40,
2,
0,
34,
3,
32,
1,
107,
32,
2,
73,
4,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
1,
32,
2,
106,
34,
2,
32,
1,
73,
13,
0,
32,
3,
65,
1,
116,
34,
1,
32,
2,
32,
1,
32,
2,
75,
27,
34,
1,
65,
8,
32,
1,
65,
8,
75,
27,
34,
1,
65,
0,
72,
13,
0,
32,
0,
40,
2,
0,
65,
0,
32,
3,
27,
34,
2,
4,
64,
32,
1,
32,
3,
70,
13,
4,
32,
3,
13,
2,
32,
1,
65,
1,
16,
156,
1,
34,
2,
13,
4,
12,
3,
11,
32,
1,
65,
1,
16,
156,
1,
34,
2,
69,
13,
2,
12,
3,
11,
16,
164,
1,
0,
11,
32,
2,
32,
3,
32,
1,
16,
151,
1,
34,
2,
13,
1,
11,
32,
1,
65,
1,
16,
171,
1,
0,
11,
32,
0,
32,
2,
54,
2,
0,
32,
0,
65,
4,
106,
32,
1,
54,
2,
0,
11,
11,
182,
1,
1,
1,
127,
35,
0,
65,
16,
107,
34,
3,
36,
0,
2,
64,
32,
0,
69,
13,
0,
32,
3,
32,
0,
54,
2,
4,
32,
1,
69,
13,
0,
2,
64,
32,
2,
65,
4,
75,
13,
0,
32,
1,
65,
3,
106,
65,
2,
118,
65,
127,
106,
34,
0,
65,
255,
1,
75,
13,
0,
32,
3,
65,
248,
230,
193,
0,
54,
2,
8,
32,
3,
32,
0,
65,
2,
116,
65,
252,
230,
193,
0,
106,
34,
0,
40,
2,
0,
54,
2,
12,
32,
3,
65,
4,
106,
32,
3,
65,
12,
106,
32,
3,
65,
8,
106,
65,
160,
143,
192,
0,
16,
47,
32,
0,
32,
3,
40,
2,
12,
54,
2,
0,
12,
1,
11,
32,
3,
65,
248,
230,
193,
0,
40,
2,
0,
54,
2,
12,
32,
3,
65,
4,
106,
32,
3,
65,
12,
106,
65,
136,
143,
192,
0,
65,
136,
143,
192,
0,
16,
47,
65,
248,
230,
193,
0,
32,
3,
40,
2,
12,
54,
2,
0,
11,
32,
3,
65,
16,
106,
36,
0,
11,
170,
1,
1,
3,
127,
35,
0,
65,
48,
107,
34,
1,
36,
0,
32,
1,
65,
8,
106,
16,
112,
32,
1,
65,
0,
54,
2,
24,
32,
1,
32,
1,
41,
3,
8,
55,
3,
16,
32,
1,
65,
16,
106,
65,
0,
65,
27,
16,
85,
32,
1,
40,
2,
24,
34,
2,
32,
1,
40,
2,
16,
106,
65,
27,
65,
220,
139,
192,
0,
65,
27,
16,
80,
32,
1,
32,
2,
65,
27,
106,
34,
2,
54,
2,
24,
32,
1,
65,
40,
106,
34,
3,
32,
2,
54,
2,
0,
32,
1,
32,
1,
41,
3,
16,
55,
3,
32,
65,
12,
65,
4,
16,
156,
1,
34,
2,
69,
4,
64,
65,
12,
65,
4,
16,
171,
1,
0,
11,
32,
2,
32,
1,
41,
3,
32,
55,
2,
0,
32,
2,
65,
8,
106,
32,
3,
40,
2,
0,
54,
2,
0,
32,
0,
65,
17,
32,
2,
65,
208,
134,
192,
0,
16,
94,
32,
1,
65,
48,
106,
36,
0,
11,
184,
1,
1,
1,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
2,
64,
32,
0,
40,
2,
0,
65,
6,
106,
34,
0,
65,
5,
77,
4,
64,
32,
0,
65,
1,
107,
14,
5,
5,
4,
3,
2,
1,
6,
11,
32,
2,
32,
1,
65,
192,
194,
192,
0,
65,
5,
16,
134,
1,
12,
6,
11,
32,
2,
32,
1,
65,
220,
194,
192,
0,
65,
5,
16,
134,
1,
12,
5,
11,
32,
2,
32,
1,
65,
214,
194,
192,
0,
65,
6,
16,
134,
1,
12,
4,
11,
32,
2,
32,
1,
65,
210,
194,
192,
0,
65,
4,
16,
134,
1,
12,
3,
11,
32,
2,
32,
1,
65,
207,
194,
192,
0,
65,
3,
16,
134,
1,
12,
2,
11,
32,
2,
32,
1,
65,
204,
194,
192,
0,
65,
3,
16,
134,
1,
12,
1,
11,
32,
2,
32,
1,
65,
197,
194,
192,
0,
65,
7,
16,
134,
1,
11,
32,
2,
16,
92,
32,
2,
65,
16,
106,
36,
0,
11,
141,
1,
1,
3,
127,
35,
0,
65,
128,
1,
107,
34,
3,
36,
0,
32,
0,
40,
2,
0,
33,
2,
65,
0,
33,
0,
3,
64,
32,
0,
32,
3,
106,
65,
255,
0,
106,
32,
2,
65,
15,
113,
34,
4,
65,
48,
114,
32,
4,
65,
215,
0,
106,
32,
4,
65,
10,
73,
27,
58,
0,
0,
32,
0,
65,
127,
106,
33,
0,
32,
2,
65,
4,
118,
34,
2,
13,
0,
11,
32,
0,
65,
128,
1,
106,
34,
2,
65,
129,
1,
79,
4,
64,
32,
2,
65,
128,
1,
65,
200,
206,
193,
0,
16,
105,
0,
11,
32,
1,
65,
1,
65,
216,
206,
193,
0,
65,
2,
32,
0,
32,
3,
106,
65,
128,
1,
106,
65,
0,
32,
0,
107,
16,
24,
32,
3,
65,
128,
1,
106,
36,
0,
11,
140,
1,
1,
3,
127,
35,
0,
65,
128,
1,
107,
34,
3,
36,
0,
32,
0,
40,
2,
0,
33,
2,
65,
0,
33,
0,
3,
64,
32,
0,
32,
3,
106,
65,
255,
0,
106,
32,
2,
65,
15,
113,
34,
4,
65,
48,
114,
32,
4,
65,
55,
106,
32,
4,
65,
10,
73,
27,
58,
0,
0,
32,
0,
65,
127,
106,
33,
0,
32,
2,
65,
4,
118,
34,
2,
13,
0,
11,
32,
0,
65,
128,
1,
106,
34,
2,
65,
129,
1,
79,
4,
64,
32,
2,
65,
128,
1,
65,
200,
206,
193,
0,
16,
105,
0,
11,
32,
1,
65,
1,
65,
216,
206,
193,
0,
65,
2,
32,
0,
32,
3,
106,
65,
128,
1,
106,
65,
0,
32,
0,
107,
16,
24,
32,
3,
65,
128,
1,
106,
36,
0,
11,
135,
1,
1,
1,
127,
32,
0,
32,
2,
65,
255,
1,
113,
34,
2,
65,
10,
32,
2,
65,
10,
73,
27,
65,
2,
116,
65,
188,
183,
192,
0,
106,
40,
2,
0,
32,
2,
65,
4,
73,
65,
14,
116,
114,
34,
3,
32,
3,
65,
128,
32,
114,
32,
1,
27,
34,
1,
32,
1,
65,
128,
128,
32,
114,
32,
2,
27,
34,
1,
54,
2,
144,
128,
4,
32,
0,
65,
196,
128,
4,
106,
32,
1,
65,
14,
118,
65,
1,
113,
58,
0,
0,
32,
0,
32,
1,
65,
255,
31,
113,
34,
0,
65,
2,
118,
65,
2,
106,
65,
3,
110,
65,
1,
106,
173,
66,
32,
134,
32,
0,
65,
2,
106,
65,
3,
110,
65,
1,
106,
173,
132,
55,
2,
204,
128,
4,
11,
150,
1,
1,
2,
127,
32,
0,
45,
0,
8,
33,
1,
32,
0,
40,
2,
4,
34,
2,
4,
64,
32,
1,
65,
255,
1,
113,
33,
1,
32,
0,
2,
127,
65,
1,
32,
1,
13,
0,
26,
2,
64,
32,
2,
65,
1,
71,
13,
0,
32,
0,
45,
0,
9,
69,
13,
0,
32,
0,
40,
2,
0,
34,
2,
45,
0,
0,
65,
4,
113,
13,
0,
65,
1,
32,
2,
40,
2,
24,
65,
176,
206,
193,
0,
65,
1,
32,
2,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
13,
1,
26,
11,
32,
0,
40,
2,
0,
34,
1,
40,
2,
24,
65,
177,
206,
193,
0,
65,
1,
32,
1,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
11,
34,
1,
58,
0,
8,
11,
32,
1,
65,
255,
1,
113,
65,
0,
71,
11,
135,
1,
1,
5,
127,
32,
0,
47,
1,
2,
33,
3,
32,
0,
47,
1,
0,
33,
4,
32,
2,
4,
64,
3,
64,
32,
2,
32,
2,
65,
176,
43,
32,
2,
65,
176,
43,
73,
27,
34,
5,
107,
33,
2,
32,
5,
4,
64,
32,
5,
33,
7,
32,
1,
33,
6,
3,
64,
32,
4,
32,
6,
45,
0,
0,
106,
34,
4,
32,
3,
106,
33,
3,
32,
6,
65,
1,
106,
33,
6,
32,
7,
65,
127,
106,
34,
7,
13,
0,
11,
11,
32,
1,
32,
5,
106,
33,
1,
32,
3,
65,
241,
255,
3,
112,
33,
3,
32,
4,
65,
241,
255,
3,
112,
33,
4,
32,
2,
13,
0,
11,
11,
32,
0,
32,
3,
59,
1,
2,
32,
0,
32,
4,
59,
1,
0,
11,
131,
1,
1,
2,
127,
35,
0,
65,
16,
107,
34,
5,
36,
0,
65,
12,
65,
4,
16,
156,
1,
34,
4,
69,
4,
64,
65,
12,
65,
4,
16,
171,
1,
0,
11,
32,
4,
32,
1,
58,
0,
8,
32,
4,
32,
3,
54,
2,
4,
32,
4,
32,
2,
54,
2,
0,
32,
4,
32,
5,
47,
0,
13,
59,
0,
9,
32,
4,
65,
11,
106,
32,
5,
65,
15,
106,
45,
0,
0,
58,
0,
0,
32,
0,
65,
2,
58,
0,
0,
32,
0,
32,
5,
47,
0,
10,
59,
0,
1,
32,
0,
65,
3,
106,
32,
5,
65,
12,
106,
45,
0,
0,
58,
0,
0,
32,
0,
65,
4,
106,
32,
4,
54,
2,
0,
32,
5,
65,
16,
106,
36,
0,
11,
136,
1,
1,
1,
127,
65,
204,
153,
5,
65,
1,
16,
156,
1,
34,
1,
69,
4,
64,
65,
204,
153,
5,
65,
1,
16,
171,
1,
0,
11,
32,
1,
65,
0,
65,
204,
153,
5,
16,
139,
1,
33,
1,
32,
0,
65,
0,
58,
0,
55,
32,
0,
65,
0,
59,
0,
53,
32,
0,
65,
144,
32,
54,
2,
0,
32,
0,
66,
0,
55,
2,
4,
32,
0,
65,
12,
106,
66,
0,
55,
2,
0,
32,
0,
66,
0,
55,
2,
28,
32,
0,
65,
20,
106,
66,
128,
128,
128,
128,
16,
55,
2,
0,
32,
0,
65,
36,
106,
66,
0,
55,
2,
0,
32,
0,
65,
44,
106,
65,
0,
54,
2,
0,
32,
0,
32,
1,
54,
2,
48,
32,
0,
65,
0,
58,
0,
52,
11,
116,
1,
3,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
2,
64,
32,
0,
32,
1,
16,
51,
69,
4,
64,
32,
1,
65,
28,
106,
40,
2,
0,
33,
3,
32,
1,
40,
2,
24,
32,
2,
65,
28,
106,
65,
0,
54,
2,
0,
32,
2,
65,
228,
204,
193,
0,
54,
2,
24,
32,
2,
66,
1,
55,
2,
12,
32,
2,
65,
232,
204,
193,
0,
54,
2,
8,
32,
3,
32,
2,
65,
8,
106,
16,
23,
69,
13,
1,
11,
32,
2,
65,
32,
106,
36,
0,
65,
1,
15,
11,
32,
0,
65,
4,
106,
32,
1,
16,
51,
32,
2,
65,
32,
106,
36,
0,
11,
113,
0,
2,
127,
32,
2,
65,
2,
116,
34,
1,
32,
3,
65,
3,
116,
65,
128,
128,
1,
106,
34,
2,
32,
1,
32,
2,
75,
27,
65,
135,
128,
4,
106,
34,
1,
65,
16,
118,
64,
0,
34,
2,
65,
127,
70,
4,
64,
65,
0,
33,
3,
65,
1,
12,
1,
11,
32,
2,
65,
16,
116,
34,
3,
66,
0,
55,
3,
0,
32,
3,
65,
0,
54,
2,
8,
32,
3,
32,
3,
32,
1,
65,
128,
128,
124,
113,
106,
65,
2,
114,
54,
2,
0,
65,
0,
11,
33,
2,
32,
0,
32,
3,
54,
2,
4,
32,
0,
32,
2,
54,
2,
0,
11,
127,
1,
1,
127,
35,
0,
65,
64,
106,
34,
5,
36,
0,
32,
5,
32,
1,
54,
2,
12,
32,
5,
32,
0,
54,
2,
8,
32,
5,
32,
3,
54,
2,
20,
32,
5,
32,
2,
54,
2,
16,
32,
5,
65,
44,
106,
65,
2,
54,
2,
0,
32,
5,
65,
60,
106,
65,
193,
0,
54,
2,
0,
32,
5,
66,
2,
55,
2,
28,
32,
5,
65,
160,
205,
193,
0,
54,
2,
24,
32,
5,
65,
61,
54,
2,
52,
32,
5,
32,
5,
65,
48,
106,
54,
2,
40,
32,
5,
32,
5,
65,
16,
106,
54,
2,
56,
32,
5,
32,
5,
65,
8,
106,
54,
2,
48,
32,
5,
65,
24,
106,
32,
4,
16,
137,
1,
0,
11,
103,
0,
2,
64,
32,
1,
32,
0,
79,
4,
64,
32,
2,
69,
13,
1,
3,
64,
32,
0,
32,
1,
45,
0,
0,
58,
0,
0,
32,
1,
65,
1,
106,
33,
1,
32,
0,
65,
1,
106,
33,
0,
32,
2,
65,
127,
106,
34,
2,
13,
0,
11,
12,
1,
11,
32,
2,
69,
13,
0,
32,
1,
65,
127,
106,
33,
1,
32,
0,
65,
127,
106,
33,
0,
3,
64,
32,
0,
32,
2,
106,
32,
1,
32,
2,
106,
45,
0,
0,
58,
0,
0,
32,
2,
65,
127,
106,
34,
2,
13,
0,
11,
11,
11,
120,
1,
2,
127,
32,
0,
45,
0,
4,
33,
1,
32,
0,
45,
0,
5,
4,
64,
32,
1,
65,
255,
1,
113,
33,
2,
32,
0,
2,
127,
65,
1,
32,
2,
13,
0,
26,
32,
0,
40,
2,
0,
34,
1,
65,
28,
106,
40,
2,
0,
40,
2,
12,
33,
2,
32,
1,
40,
2,
24,
33,
0,
32,
1,
45,
0,
0,
65,
4,
113,
69,
4,
64,
32,
0,
65,
171,
206,
193,
0,
65,
2,
32,
2,
17,
2,
0,
12,
1,
11,
32,
0,
65,
170,
206,
193,
0,
65,
1,
32,
2,
17,
2,
0,
11,
34,
1,
58,
0,
4,
11,
32,
1,
65,
255,
1,
113,
65,
0,
71,
11,
77,
1,
1,
127,
65,
130,
130,
10,
65,
2,
16,
156,
1,
34,
1,
69,
4,
64,
65,
130,
130,
10,
65,
2,
16,
171,
1,
0,
11,
32,
1,
65,
0,
65,
130,
130,
10,
16,
139,
1,
33,
1,
32,
0,
66,
0,
55,
2,
12,
32,
0,
32,
1,
54,
2,
8,
32,
0,
65,
20,
106,
66,
0,
55,
2,
0,
32,
0,
66,
135,
128,
128,
128,
48,
55,
2,
0,
11,
112,
1,
1,
127,
35,
0,
65,
48,
107,
34,
2,
36,
0,
32,
2,
32,
1,
54,
2,
4,
32,
2,
32,
0,
54,
2,
0,
32,
2,
65,
28,
106,
65,
2,
54,
2,
0,
32,
2,
65,
44,
106,
65,
55,
54,
2,
0,
32,
2,
66,
3,
55,
2,
12,
32,
2,
65,
188,
204,
193,
0,
54,
2,
8,
32,
2,
65,
55,
54,
2,
36,
32,
2,
32,
2,
65,
32,
106,
54,
2,
24,
32,
2,
32,
2,
65,
4,
106,
54,
2,
40,
32,
2,
32,
2,
54,
2,
32,
32,
2,
65,
8,
106,
65,
212,
204,
193,
0,
16,
137,
1,
0,
11,
109,
1,
1,
127,
35,
0,
65,
48,
107,
34,
3,
36,
0,
32,
3,
32,
1,
54,
2,
4,
32,
3,
32,
0,
54,
2,
0,
32,
3,
65,
28,
106,
65,
2,
54,
2,
0,
32,
3,
65,
44,
106,
65,
55,
54,
2,
0,
32,
3,
66,
2,
55,
2,
12,
32,
3,
65,
244,
205,
193,
0,
54,
2,
8,
32,
3,
65,
55,
54,
2,
36,
32,
3,
32,
3,
65,
32,
106,
54,
2,
24,
32,
3,
32,
3,
54,
2,
40,
32,
3,
32,
3,
65,
4,
106,
54,
2,
32,
32,
3,
65,
8,
106,
32,
2,
16,
137,
1,
0,
11,
109,
1,
1,
127,
35,
0,
65,
48,
107,
34,
3,
36,
0,
32,
3,
32,
1,
54,
2,
4,
32,
3,
32,
0,
54,
2,
0,
32,
3,
65,
28,
106,
65,
2,
54,
2,
0,
32,
3,
65,
44,
106,
65,
55,
54,
2,
0,
32,
3,
66,
2,
55,
2,
12,
32,
3,
65,
200,
209,
193,
0,
54,
2,
8,
32,
3,
65,
55,
54,
2,
36,
32,
3,
32,
3,
65,
32,
106,
54,
2,
24,
32,
3,
32,
3,
65,
4,
106,
54,
2,
40,
32,
3,
32,
3,
54,
2,
32,
32,
3,
65,
8,
106,
32,
2,
16,
137,
1,
0,
11,
109,
1,
1,
127,
35,
0,
65,
48,
107,
34,
3,
36,
0,
32,
3,
32,
1,
54,
2,
4,
32,
3,
32,
0,
54,
2,
0,
32,
3,
65,
28,
106,
65,
2,
54,
2,
0,
32,
3,
65,
44,
106,
65,
55,
54,
2,
0,
32,
3,
66,
2,
55,
2,
12,
32,
3,
65,
252,
209,
193,
0,
54,
2,
8,
32,
3,
65,
55,
54,
2,
36,
32,
3,
32,
3,
65,
32,
106,
54,
2,
24,
32,
3,
32,
3,
65,
4,
106,
54,
2,
40,
32,
3,
32,
3,
54,
2,
32,
32,
3,
65,
8,
106,
32,
2,
16,
137,
1,
0,
11,
86,
1,
2,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
32,
1,
65,
28,
106,
40,
2,
0,
33,
3,
32,
1,
40,
2,
24,
32,
2,
65,
24,
106,
32,
0,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
2,
65,
16,
106,
32,
0,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
2,
32,
0,
41,
2,
0,
55,
3,
8,
32,
3,
32,
2,
65,
8,
106,
16,
23,
32,
2,
65,
32,
106,
36,
0,
11,
86,
1,
2,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
32,
0,
65,
28,
106,
40,
2,
0,
33,
3,
32,
0,
40,
2,
24,
32,
2,
65,
24,
106,
32,
1,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
2,
65,
16,
106,
32,
1,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
2,
32,
1,
41,
2,
0,
55,
3,
8,
32,
3,
32,
2,
65,
8,
106,
16,
23,
32,
2,
65,
32,
106,
36,
0,
11,
89,
1,
1,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
32,
2,
32,
0,
40,
2,
0,
54,
2,
4,
32,
2,
65,
24,
106,
32,
1,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
2,
65,
16,
106,
32,
1,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
2,
32,
1,
41,
2,
0,
55,
3,
8,
32,
2,
65,
4,
106,
65,
128,
196,
193,
0,
32,
2,
65,
8,
106,
16,
23,
32,
2,
65,
32,
106,
36,
0,
11,
89,
1,
1,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
32,
2,
32,
0,
40,
2,
0,
54,
2,
4,
32,
2,
65,
24,
106,
32,
1,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
2,
65,
16,
106,
32,
1,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
2,
32,
1,
41,
2,
0,
55,
3,
8,
32,
2,
65,
4,
106,
65,
236,
201,
193,
0,
32,
2,
65,
8,
106,
16,
23,
32,
2,
65,
32,
106,
36,
0,
11,
89,
1,
1,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
32,
2,
32,
0,
40,
2,
0,
54,
2,
4,
32,
2,
65,
24,
106,
32,
1,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
2,
65,
16,
106,
32,
1,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
2,
32,
1,
41,
2,
0,
55,
3,
8,
32,
2,
65,
4,
106,
65,
164,
208,
193,
0,
32,
2,
65,
8,
106,
16,
23,
32,
2,
65,
32,
106,
36,
0,
11,
86,
1,
1,
127,
35,
0,
65,
32,
107,
34,
2,
36,
0,
32,
2,
32,
0,
54,
2,
4,
32,
2,
65,
24,
106,
32,
1,
65,
16,
106,
41,
2,
0,
55,
3,
0,
32,
2,
65,
16,
106,
32,
1,
65,
8,
106,
41,
2,
0,
55,
3,
0,
32,
2,
32,
1,
41,
2,
0,
55,
3,
8,
32,
2,
65,
4,
106,
65,
164,
208,
193,
0,
32,
2,
65,
8,
106,
16,
23,
32,
2,
65,
32,
106,
36,
0,
11,
37,
1,
1,
127,
65,
27,
65,
1,
16,
156,
1,
34,
1,
4,
64,
32,
0,
32,
1,
54,
2,
0,
32,
0,
65,
27,
54,
2,
4,
15,
11,
65,
27,
16,
168,
1,
0,
11,
97,
1,
1,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
2,
64,
32,
0,
40,
2,
0,
34,
0,
40,
2,
0,
65,
1,
70,
4,
64,
32,
2,
32,
1,
65,
160,
150,
192,
0,
65,
4,
16,
134,
1,
32,
2,
32,
0,
65,
4,
106,
54,
2,
12,
32,
2,
32,
2,
65,
12,
106,
65,
164,
150,
192,
0,
16,
56,
12,
1,
11,
32,
2,
32,
1,
65,
180,
150,
192,
0,
65,
4,
16,
134,
1,
11,
32,
2,
16,
92,
32,
2,
65,
16,
106,
36,
0,
11,
76,
2,
1,
127,
1,
126,
32,
1,
65,
8,
106,
34,
6,
41,
3,
0,
33,
7,
32,
0,
32,
1,
32,
2,
32,
3,
32,
4,
65,
8,
106,
34,
1,
40,
2,
0,
34,
0,
32,
4,
40,
2,
0,
106,
32,
4,
65,
4,
106,
40,
2,
0,
32,
0,
107,
32,
5,
16,
50,
32,
1,
32,
0,
32,
6,
41,
3,
0,
32,
7,
125,
167,
106,
54,
2,
0,
11,
67,
1,
3,
127,
2,
64,
32,
2,
69,
13,
0,
3,
64,
32,
0,
45,
0,
0,
34,
4,
32,
1,
45,
0,
0,
34,
5,
70,
4,
64,
32,
0,
65,
1,
106,
33,
0,
32,
1,
65,
1,
106,
33,
1,
32,
2,
65,
127,
106,
34,
2,
13,
1,
12,
2,
11,
11,
32,
4,
32,
5,
107,
33,
3,
11,
32,
3,
11,
74,
0,
2,
127,
32,
1,
65,
128,
128,
196,
0,
71,
4,
64,
65,
1,
32,
0,
40,
2,
24,
32,
1,
32,
0,
65,
28,
106,
40,
2,
0,
40,
2,
16,
17,
0,
0,
13,
1,
26,
11,
32,
2,
69,
4,
64,
65,
0,
15,
11,
32,
0,
40,
2,
24,
32,
2,
32,
3,
32,
0,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
11,
11,
54,
1,
1,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
32,
0,
40,
2,
0,
33,
0,
32,
2,
32,
1,
16,
138,
1,
32,
2,
32,
0,
54,
2,
12,
32,
2,
32,
2,
65,
12,
106,
16,
40,
32,
2,
16,
100,
32,
2,
65,
16,
106,
36,
0,
11,
86,
1,
1,
127,
65,
244,
213,
2,
65,
4,
16,
156,
1,
34,
1,
69,
4,
64,
65,
244,
213,
2,
65,
4,
16,
171,
1,
0,
11,
32,
1,
65,
232,
213,
0,
106,
65,
0,
65,
136,
128,
2,
16,
139,
1,
26,
32,
1,
65,
0,
65,
230,
213,
0,
16,
139,
1,
34,
1,
65,
1,
58,
0,
243,
213,
2,
32,
1,
65,
1,
59,
1,
240,
213,
2,
32,
1,
32,
0,
58,
0,
242,
213,
2,
32,
1,
11,
72,
1,
1,
127,
35,
0,
65,
32,
107,
34,
3,
36,
0,
32,
3,
65,
20,
106,
65,
0,
54,
2,
0,
32,
3,
65,
228,
204,
193,
0,
54,
2,
16,
32,
3,
66,
1,
55,
2,
4,
32,
3,
32,
1,
54,
2,
28,
32,
3,
32,
0,
54,
2,
24,
32,
3,
32,
3,
65,
24,
106,
54,
2,
0,
32,
3,
32,
2,
16,
137,
1,
0,
11,
64,
0,
35,
0,
65,
32,
107,
34,
0,
36,
0,
32,
0,
65,
28,
106,
65,
0,
54,
2,
0,
32,
0,
65,
192,
144,
192,
0,
54,
2,
24,
32,
0,
66,
1,
55,
2,
12,
32,
0,
65,
184,
144,
192,
0,
54,
2,
8,
32,
1,
32,
0,
65,
8,
106,
16,
107,
32,
0,
65,
32,
106,
36,
0,
11,
59,
1,
1,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
32,
2,
32,
1,
65,
220,
145,
192,
0,
65,
15,
16,
134,
1,
32,
2,
32,
0,
54,
2,
12,
32,
2,
32,
2,
65,
12,
106,
65,
236,
145,
192,
0,
16,
56,
32,
2,
16,
92,
32,
2,
65,
16,
106,
36,
0,
11,
59,
1,
1,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
32,
2,
32,
1,
65,
252,
145,
192,
0,
65,
13,
16,
134,
1,
32,
2,
32,
0,
54,
2,
12,
32,
2,
32,
2,
65,
12,
106,
65,
140,
146,
192,
0,
16,
56,
32,
2,
16,
92,
32,
2,
65,
16,
106,
36,
0,
11,
91,
1,
3,
127,
35,
0,
65,
16,
107,
34,
1,
36,
0,
32,
0,
40,
2,
12,
34,
2,
69,
4,
64,
65,
168,
196,
193,
0,
65,
43,
65,
192,
199,
193,
0,
16,
119,
0,
11,
32,
0,
40,
2,
8,
34,
3,
69,
4,
64,
65,
168,
196,
193,
0,
65,
43,
65,
208,
199,
193,
0,
16,
119,
0,
11,
32,
1,
65,
0,
54,
2,
4,
32,
1,
32,
3,
54,
2,
0,
32,
1,
32,
0,
40,
2,
8,
32,
2,
16,
83,
0,
11,
59,
1,
1,
127,
2,
127,
32,
1,
65,
4,
75,
4,
64,
65,
240,
177,
127,
33,
2,
65,
1,
12,
1,
11,
32,
1,
65,
2,
116,
65,
228,
194,
192,
0,
106,
40,
2,
0,
33,
2,
65,
0,
11,
33,
1,
32,
0,
32,
2,
54,
2,
4,
32,
0,
32,
1,
54,
2,
0,
11,
51,
1,
1,
127,
32,
2,
4,
64,
32,
0,
33,
3,
3,
64,
32,
3,
32,
1,
45,
0,
0,
58,
0,
0,
32,
3,
65,
1,
106,
33,
3,
32,
1,
65,
1,
106,
33,
1,
32,
2,
65,
127,
106,
34,
2,
13,
0,
11,
11,
32,
0,
11,
42,
1,
1,
127,
32,
2,
65,
1,
16,
33,
34,
3,
4,
64,
32,
3,
32,
0,
32,
2,
32,
1,
32,
1,
32,
2,
75,
27,
16,
125,
26,
32,
0,
32,
1,
65,
1,
16,
86,
11,
32,
3,
11,
67,
2,
1,
127,
1,
126,
35,
0,
65,
16,
107,
34,
1,
36,
0,
32,
1,
65,
0,
54,
2,
8,
32,
1,
66,
0,
55,
3,
0,
32,
1,
41,
3,
0,
33,
2,
32,
0,
32,
1,
40,
2,
8,
54,
2,
8,
32,
0,
32,
2,
55,
3,
0,
32,
0,
65,
0,
54,
2,
16,
32,
1,
65,
16,
106,
36,
0,
11,
43,
0,
2,
64,
32,
0,
65,
124,
75,
13,
0,
32,
0,
69,
4,
64,
65,
4,
15,
11,
32,
0,
32,
0,
65,
125,
73,
65,
2,
116,
16,
156,
1,
34,
0,
69,
13,
0,
32,
0,
15,
11,
0,
11,
52,
1,
2,
127,
32,
0,
40,
2,
0,
34,
0,
32,
2,
16,
84,
32,
0,
65,
8,
106,
34,
3,
40,
2,
0,
34,
4,
32,
0,
40,
2,
0,
106,
32,
1,
32,
2,
16,
125,
26,
32,
3,
32,
2,
32,
4,
106,
54,
2,
0,
65,
0,
11,
50,
1,
1,
127,
16,
52,
34,
3,
32,
2,
65,
1,
115,
32,
1,
65,
1,
32,
1,
65,
128,
2,
73,
27,
16,
91,
32,
0,
66,
0,
55,
3,
0,
32,
0,
32,
3,
54,
2,
16,
32,
0,
65,
8,
106,
66,
0,
55,
3,
0,
11,
60,
0,
32,
0,
40,
2,
0,
33,
0,
32,
1,
45,
0,
0,
65,
16,
113,
65,
4,
118,
69,
4,
64,
32,
1,
45,
0,
0,
65,
32,
113,
65,
5,
118,
69,
4,
64,
32,
0,
32,
1,
16,
166,
1,
15,
11,
32,
0,
32,
1,
16,
90,
15,
11,
32,
0,
32,
1,
16,
89,
11,
50,
1,
1,
127,
35,
0,
65,
16,
107,
34,
1,
36,
0,
32,
1,
65,
8,
106,
65,
184,
150,
192,
0,
65,
53,
16,
71,
32,
0,
65,
11,
32,
1,
40,
2,
8,
32,
1,
40,
2,
12,
16,
94,
32,
1,
65,
16,
106,
36,
0,
11,
50,
1,
1,
127,
35,
0,
65,
16,
107,
34,
1,
36,
0,
32,
1,
65,
8,
106,
65,
237,
150,
192,
0,
65,
19,
16,
71,
32,
0,
65,
11,
32,
1,
40,
2,
8,
32,
1,
40,
2,
12,
16,
94,
32,
1,
65,
16,
106,
36,
0,
11,
52,
0,
32,
0,
32,
1,
40,
2,
24,
32,
2,
32,
3,
32,
1,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
58,
0,
8,
32,
0,
32,
1,
54,
2,
0,
32,
0,
32,
3,
69,
58,
0,
9,
32,
0,
65,
0,
54,
2,
4,
11,
52,
1,
1,
127,
65,
8,
65,
4,
16,
156,
1,
34,
3,
69,
4,
64,
65,
8,
65,
4,
16,
171,
1,
0,
11,
32,
3,
32,
2,
54,
2,
4,
32,
3,
32,
1,
54,
2,
0,
32,
0,
65,
16,
32,
3,
65,
152,
148,
192,
0,
16,
94,
11,
55,
1,
1,
127,
35,
0,
65,
16,
107,
34,
1,
36,
0,
32,
1,
65,
216,
131,
192,
0,
54,
2,
12,
32,
1,
32,
0,
54,
2,
8,
32,
1,
65,
152,
196,
193,
0,
54,
2,
4,
32,
1,
65,
152,
196,
193,
0,
54,
2,
0,
32,
1,
16,
123,
0,
11,
52,
1,
1,
127,
35,
0,
65,
16,
107,
34,
2,
36,
0,
32,
2,
32,
1,
54,
2,
12,
32,
2,
32,
0,
54,
2,
8,
32,
2,
65,
176,
205,
193,
0,
54,
2,
4,
32,
2,
65,
228,
204,
193,
0,
54,
2,
0,
32,
2,
16,
123,
0,
11,
53,
1,
1,
127,
32,
1,
40,
2,
24,
65,
168,
145,
192,
0,
65,
20,
32,
1,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
33,
2,
32,
0,
65,
0,
58,
0,
5,
32,
0,
32,
2,
58,
0,
4,
32,
0,
32,
1,
54,
2,
0,
11,
41,
1,
1,
127,
32,
2,
4,
64,
32,
0,
33,
3,
3,
64,
32,
3,
32,
1,
58,
0,
0,
32,
3,
65,
1,
106,
33,
3,
32,
2,
65,
127,
106,
34,
2,
13,
0,
11,
11,
32,
0,
11,
37,
1,
1,
126,
32,
0,
40,
2,
0,
34,
0,
172,
34,
2,
32,
2,
66,
63,
135,
34,
2,
124,
32,
2,
133,
32,
0,
65,
127,
115,
65,
31,
118,
32,
1,
16,
48,
11,
51,
1,
1,
127,
65,
16,
33,
1,
2,
64,
2,
64,
2,
64,
32,
0,
45,
0,
0,
65,
1,
107,
14,
2,
0,
1,
2,
11,
32,
0,
45,
0,
1,
15,
11,
32,
0,
65,
4,
106,
40,
2,
0,
45,
0,
8,
33,
1,
11,
32,
1,
11,
39,
1,
1,
127,
2,
64,
32,
0,
40,
2,
0,
34,
1,
69,
13,
0,
32,
0,
65,
4,
106,
40,
2,
0,
34,
0,
69,
13,
0,
32,
1,
32,
0,
65,
1,
16,
162,
1,
11,
11,
39,
1,
1,
127,
2,
64,
32,
0,
40,
2,
4,
34,
1,
69,
13,
0,
32,
0,
65,
8,
106,
40,
2,
0,
34,
0,
69,
13,
0,
32,
1,
32,
0,
65,
1,
16,
162,
1,
11,
11,
35,
0,
32,
1,
65,
1,
115,
16,
118,
33,
1,
32,
0,
66,
0,
55,
3,
0,
32,
0,
32,
1,
54,
2,
16,
32,
0,
65,
8,
106,
66,
0,
55,
3,
0,
11,
37,
0,
32,
0,
65,
0,
58,
0,
32,
32,
0,
65,
0,
54,
2,
20,
32,
0,
65,
0,
54,
2,
12,
32,
0,
65,
0,
54,
2,
0,
32,
0,
65,
0,
54,
2,
28,
11,
43,
1,
1,
127,
32,
0,
40,
2,
0,
34,
1,
40,
2,
0,
32,
1,
40,
2,
4,
32,
0,
40,
2,
4,
40,
2,
0,
32,
0,
40,
2,
8,
40,
2,
0,
65,
208,
210,
193,
0,
16,
14,
0,
11,
27,
1,
1,
127,
32,
0,
65,
1,
16,
33,
34,
1,
4,
64,
32,
1,
65,
0,
32,
0,
16,
139,
1,
26,
11,
32,
1,
11,
29,
1,
1,
127,
32,
0,
65,
4,
106,
40,
2,
0,
34,
1,
4,
64,
32,
0,
40,
2,
0,
32,
1,
65,
1,
16,
162,
1,
11,
11,
40,
0,
32,
0,
32,
0,
40,
2,
16,
32,
2,
106,
54,
2,
16,
32,
0,
32,
0,
41,
3,
0,
32,
2,
173,
124,
55,
3,
0,
32,
0,
65,
8,
106,
32,
1,
32,
2,
16,
8,
11,
28,
0,
32,
1,
40,
2,
24,
65,
188,
224,
193,
0,
65,
5,
32,
1,
65,
28,
106,
40,
2,
0,
40,
2,
12,
17,
2,
0,
11,
10,
0,
32,
0,
32,
1,
32,
2,
16,
126,
11,
16,
0,
32,
1,
4,
64,
32,
0,
32,
1,
65,
4,
16,
162,
1,
11,
11,
22,
0,
32,
0,
32,
1,
40,
2,
8,
54,
2,
4,
32,
0,
32,
1,
40,
2,
0,
54,
2,
0,
11,
16,
0,
32,
0,
41,
3,
0,
26,
32,
0,
65,
8,
106,
40,
2,
0,
11,
20,
0,
32,
0,
40,
2,
0,
32,
1,
32,
0,
40,
2,
4,
40,
2,
12,
17,
0,
0,
11,
8,
0,
32,
0,
32,
1,
16,
33,
11,
19,
0,
32,
0,
65,
40,
54,
2,
4,
32,
0,
65,
184,
143,
192,
0,
54,
2,
0,
11,
17,
0,
32,
0,
40,
2,
0,
32,
0,
40,
2,
4,
32,
1,
16,
172,
1,
11,
17,
0,
32,
0,
40,
2,
0,
32,
0,
40,
2,
8,
32,
1,
16,
172,
1,
11,
16,
0,
32,
0,
40,
2,
0,
32,
0,
40,
2,
8,
32,
1,
16,
12,
11,
16,
0,
32,
1,
32,
0,
40,
2,
0,
32,
0,
40,
2,
4,
16,
18,
11,
10,
0,
32,
0,
32,
1,
32,
2,
16,
86,
11,
13,
0,
32,
0,
40,
2,
0,
32,
1,
16,
49,
65,
0,
11,
17,
0,
65,
219,
203,
193,
0,
65,
17,
65,
236,
203,
193,
0,
16,
119,
0,
11,
14,
0,
32,
0,
40,
2,
0,
26,
3,
64,
12,
0,
11,
0,
11,
13,
0,
32,
0,
53,
2,
0,
65,
1,
32,
1,
16,
48,
11,
13,
0,
32,
0,
40,
2,
0,
32,
1,
32,
2,
16,
34,
11,
10,
0,
32,
0,
65,
1,
16,
171,
1,
0,
11,
10,
0,
32,
0,
65,
8,
106,
41,
3,
0,
11,
13,
0,
32,
1,
65,
144,
153,
192,
0,
65,
2,
16,
18,
11,
25,
0,
32,
0,
32,
1,
65,
156,
239,
193,
0,
40,
2,
0,
34,
0,
65,
44,
32,
0,
27,
17,
3,
0,
0,
11,
10,
0,
32,
2,
32,
0,
32,
1,
16,
18,
11,
9,
0,
32,
0,
65,
0,
54,
2,
0,
11,
7,
0,
32,
0,
16,
1,
0,
11,
6,
0,
16,
164,
1,
0,
11,
13,
0,
66,
136,
203,
200,
238,
171,
195,
223,
148,
182,
127,
11,
4,
0,
65,
0,
11,
4,
0,
32,
1,
11,
5,
0,
65,
128,
4,
11,
4,
0,
65,
1,
11,
12,
0,
66,
139,
226,
218,
134,
181,
152,
219,
135,
34,
11,
12,
0,
66,
143,
185,
199,
134,
207,
149,
144,
189,
87,
11,
12,
0,
66,
196,
135,
168,
178,
189,
161,
180,
200,
72,
11,
3,
0,
1,
11,
3,
0,
1,
11,
11,
248,
230,
1,
3,
0,
65,
128,
128,
192,
0,
11,
138,
38,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
115,
116,
100,
47,
105,
111,
47,
109,
111,
100,
46,
114,
115,
0,
0,
0,
0,
16,
0,
106,
0,
0,
0,
125,
5,
0,
0,
33,
0,
0,
0,
102,
97,
105,
108,
101,
100,
32,
116,
111,
32,
119,
114,
105,
116,
101,
32,
119,
104,
111,
108,
101,
32,
98,
117,
102,
102,
101,
114,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
102,
108,
97,
116,
101,
50,
45,
49,
46,
48,
46,
49,
54,
92,
115,
114,
99,
92,
103,
122,
92,
119,
114,
105,
116,
101,
46,
114,
115,
152,
0,
16,
0,
92,
0,
0,
0,
112,
0,
0,
0,
34,
0,
0,
0,
152,
0,
16,
0,
92,
0,
0,
0,
119,
1,
0,
0,
44,
0,
0,
0,
0,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
96,
40,
108,
101,
102,
116,
32,
61,
61,
32,
114,
105,
103,
104,
116,
41,
96,
10,
32,
32,
108,
101,
102,
116,
58,
32,
96,
96,
44,
10,
32,
114,
105,
103,
104,
116,
58,
32,
96,
96,
0,
0,
24,
1,
16,
0,
45,
0,
0,
0,
69,
1,
16,
0,
12,
0,
0,
0,
81,
1,
16,
0,
1,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
115,
116,
100,
47,
109,
97,
99,
114,
111,
115,
46,
114,
115,
0,
0,
108,
1,
16,
0,
106,
0,
0,
0,
16,
0,
0,
0,
9,
0,
0,
0,
152,
0,
16,
0,
92,
0,
0,
0,
150,
0,
0,
0,
26,
0,
0,
0,
99,
97,
108,
108,
101,
100,
32,
96,
79,
112,
116,
105,
111,
110,
58,
58,
117,
110,
119,
114,
97,
112,
40,
41,
96,
32,
111,
110,
32,
97,
32,
96,
78,
111,
110,
101,
96,
32,
118,
97,
108,
117,
101,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
102,
108,
97,
116,
101,
50,
45,
49,
46,
48,
46,
49,
54,
92,
115,
114,
99,
92,
122,
105,
111,
46,
114,
115,
0,
0,
35,
2,
16,
0,
87,
0,
0,
0,
198,
0,
0,
0,
9,
0,
0,
0,
99,
111,
114,
114,
117,
112,
116,
32,
100,
101,
102,
108,
97,
116,
101,
32,
115,
116,
114,
101,
97,
109,
0,
0,
35,
2,
16,
0,
87,
0,
0,
0,
244,
0,
0,
0,
21,
0,
0,
0,
35,
2,
16,
0,
87,
0,
0,
0,
190,
0,
0,
0,
9,
0,
0,
0,
35,
2,
16,
0,
87,
0,
0,
0,
186,
0,
0,
0,
9,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
115,
116,
100,
47,
105,
111,
47,
105,
109,
112,
108,
115,
46,
114,
115,
212,
2,
16,
0,
108,
0,
0,
0,
241,
0,
0,
0,
13,
0,
0,
0,
2,
0,
0,
0,
12,
0,
0,
0,
4,
0,
0,
0,
3,
0,
0,
0,
4,
0,
0,
0,
5,
0,
0,
0,
6,
0,
0,
0,
3,
0,
0,
0,
7,
0,
0,
0,
8,
0,
0,
0,
84,
114,
105,
101,
100,
32,
116,
111,
32,
115,
104,
114,
105,
110,
107,
32,
116,
111,
32,
97,
32,
108,
97,
114,
103,
101,
114,
32,
99,
97,
112,
97,
99,
105,
116,
121,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
109,
97,
99,
114,
111,
115,
47,
109,
111,
100,
46,
114,
115,
0,
156,
3,
16,
0,
111,
0,
0,
0,
10,
0,
0,
0,
9,
0,
0,
0,
58,
32,
0,
0,
28,
4,
16,
0,
0,
0,
0,
0,
28,
4,
16,
0,
2,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
115,
116,
100,
47,
105,
111,
47,
109,
111,
100,
46,
114,
115,
0,
0,
48,
4,
16,
0,
106,
0,
0,
0,
125,
5,
0,
0,
33,
0,
0,
0,
102,
97,
105,
108,
101,
100,
32,
116,
111,
32,
119,
114,
105,
116,
101,
32,
119,
104,
111,
108,
101,
32,
98,
117,
102,
102,
101,
114,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
115,
116,
100,
47,
105,
111,
47,
109,
111,
100,
46,
114,
115,
0,
0,
200,
4,
16,
0,
106,
0,
0,
0,
125,
5,
0,
0,
33,
0,
0,
0,
102,
97,
105,
108,
101,
100,
32,
116,
111,
32,
119,
114,
105,
116,
101,
32,
119,
104,
111,
108,
101,
32,
98,
117,
102,
102,
101,
114,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
115,
116,
100,
47,
105,
111,
47,
109,
111,
100,
46,
114,
115,
0,
0,
96,
5,
16,
0,
106,
0,
0,
0,
23,
3,
0,
0,
32,
0,
0,
0,
102,
97,
105,
108,
101,
100,
32,
116,
111,
32,
102,
105,
108,
108,
32,
119,
104,
111,
108,
101,
32,
98,
117,
102,
102,
101,
114,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
102,
108,
97,
116,
101,
50,
45,
49,
46,
48,
46,
49,
54,
92,
115,
114,
99,
92,
99,
114,
99,
46,
114,
115,
0,
0,
247,
5,
16,
0,
87,
0,
0,
0,
105,
0,
0,
0,
26,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
96,
40,
108,
101,
102,
116,
32,
61,
61,
32,
114,
105,
103,
104,
116,
41,
96,
10,
32,
32,
108,
101,
102,
116,
58,
32,
96,
96,
44,
10,
32,
114,
105,
103,
104,
116,
58,
32,
96,
96,
58,
32,
96,
6,
16,
0,
45,
0,
0,
0,
141,
6,
16,
0,
12,
0,
0,
0,
153,
6,
16,
0,
3,
0,
0,
0,
100,
101,
115,
116,
105,
110,
97,
116,
105,
111,
110,
32,
97,
110,
100,
32,
115,
111,
117,
114,
99,
101,
32,
115,
108,
105,
99,
101,
115,
32,
104,
97,
118,
101,
32,
100,
105,
102,
102,
101,
114,
101,
110,
116,
32,
108,
101,
110,
103,
116,
104,
115,
180,
6,
16,
0,
52,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
109,
97,
99,
114,
111,
115,
47,
109,
111,
100,
46,
114,
115,
0,
240,
6,
16,
0,
111,
0,
0,
0,
16,
0,
0,
0,
9,
0,
0,
0,
12,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
13,
0,
0,
0,
14,
0,
0,
0,
15,
0,
0,
0,
16,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
13,
0,
0,
0,
14,
0,
0,
0,
15,
0,
0,
0,
16,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
17,
0,
0,
0,
18,
0,
0,
0,
19,
0,
0,
0,
100,
101,
115,
99,
114,
105,
112,
116,
105,
111,
110,
40,
41,
32,
105,
115,
32,
100,
101,
112,
114,
101,
99,
97,
116,
101,
100,
59,
32,
117,
115,
101,
32,
68,
105,
115,
112,
108,
97,
121,
99,
97,
108,
108,
101,
100,
32,
96,
82,
101,
115,
117,
108,
116,
58,
58,
117,
110,
119,
114,
97,
112,
40,
41,
96,
32,
111,
110,
32,
97,
110,
32,
96,
69,
114,
114,
96,
32,
118,
97,
108,
117,
101,
0,
20,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
21,
0,
0,
0,
100,
101,
102,
108,
97,
116,
101,
32,
100,
101,
99,
111,
109,
112,
114,
101,
115,
115,
105,
111,
110,
32,
101,
114,
114,
111,
114,
0,
28,
8,
16,
0,
27,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
102,
108,
97,
116,
101,
50,
45,
49,
46,
48,
46,
49,
54,
92,
115,
114,
99,
92,
122,
105,
111,
46,
114,
115,
0,
64,
8,
16,
0,
87,
0,
0,
0,
54,
0,
0,
0,
12,
0,
0,
0,
68,
101,
99,
111,
109,
112,
114,
101,
115,
115,
69,
114,
114,
111,
114,
73,
110,
110,
101,
114,
110,
101,
101,
100,
115,
95,
100,
105,
99,
116,
105,
111,
110,
97,
114,
121,
20,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
22,
0,
0,
0,
68,
101,
99,
111,
109,
112,
114,
101,
115,
115,
69,
114,
114,
111,
114,
0,
20,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
23,
0,
0,
0,
67,
111,
109,
112,
114,
101,
115,
115,
69,
114,
114,
111,
114,
0,
0,
0,
20,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
24,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
102,
108,
97,
116,
101,
50,
45,
49,
46,
48,
46,
49,
54,
92,
115,
114,
99,
92,
103,
122,
92,
109,
111,
100,
46,
114,
115,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
230,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
231,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
232,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
233,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
234,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
235,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
236,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
237,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
238,
0,
0,
0,
9,
0,
0,
0,
28,
9,
16,
0,
90,
0,
0,
0,
250,
0,
0,
0,
9,
0,
0,
0,
25,
0,
0,
0,
8,
0,
0,
0,
4,
0,
0,
0,
26,
0,
0,
0,
27,
0,
0,
0,
28,
0,
0,
0,
29,
0,
0,
0,
26,
0,
0,
0,
30,
0,
0,
0,
31,
0,
0,
0,
32,
0,
0,
0,
12,
0,
0,
0,
4,
0,
0,
0,
33,
0,
0,
0,
34,
0,
0,
0,
35,
0,
0,
0,
6,
0,
0,
0,
33,
0,
0,
0,
7,
0,
0,
0,
8,
0,
0,
0,
99,
97,
108,
108,
101,
100,
32,
96,
82,
101,
115,
117,
108,
116,
58,
58,
117,
110,
119,
114,
97,
112,
40,
41,
96,
32,
111,
110,
32,
97,
110,
32,
96,
69,
114,
114,
96,
32,
118,
97,
108,
117,
101,
0,
36,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
37,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
102,
108,
97,
116,
101,
50,
45,
49,
46,
48,
46,
49,
54,
92,
115,
114,
99,
92,
102,
102,
105,
92,
114,
117,
115,
116,
46,
114,
115,
164,
10,
16,
0,
92,
0,
0,
0,
65,
0,
0,
0,
21,
0,
0,
0,
164,
10,
16,
0,
92,
0,
0,
0,
148,
0,
0,
0,
21,
0,
0,
0,
83,
111,
109,
101,
38,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
39,
0,
0,
0,
78,
111,
110,
101,
99,
111,
114,
114,
117,
112,
116,
32,
103,
122,
105,
112,
32,
115,
116,
114,
101,
97,
109,
32,
100,
111,
101,
115,
32,
110,
111,
116,
32,
104,
97,
118,
101,
32,
97,
32,
109,
97,
116,
99,
104,
105,
110,
103,
32,
99,
104,
101,
99,
107,
115,
117,
109,
105,
110,
118,
97,
108,
105,
100,
32,
103,
122,
105,
112,
32,
104,
101,
97,
100,
101,
114,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
96,
40,
108,
101,
102,
116,
32,
61,
61,
32,
114,
105,
103,
104,
116,
41,
96,
10,
32,
32,
108,
101,
102,
116,
58,
32,
96,
96,
44,
10,
32,
114,
105,
103,
104,
116,
58,
32,
96,
96,
58,
32,
128,
11,
16,
0,
45,
0,
0,
0,
173,
11,
16,
0,
12,
0,
0,
0,
185,
11,
16,
0,
3,
0,
0,
0,
100,
101,
115,
116,
105,
110,
97,
116,
105,
111,
110,
32,
97,
110,
100,
32,
115,
111,
117,
114,
99,
101,
32,
115,
108,
105,
99,
101,
115,
32,
104,
97,
118,
101,
32,
100,
105,
102,
102,
101,
114,
101,
110,
116,
32,
108,
101,
110,
103,
116,
104,
115,
212,
11,
16,
0,
52,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
114,
117,
115,
116,
117,
112,
92,
116,
111,
111,
108,
99,
104,
97,
105,
110,
115,
92,
110,
105,
103,
104,
116,
108,
121,
45,
120,
56,
54,
95,
54,
52,
45,
112,
99,
45,
119,
105,
110,
100,
111,
119,
115,
45,
109,
115,
118,
99,
92,
108,
105,
98,
47,
114,
117,
115,
116,
108,
105,
98,
47,
115,
114,
99,
47,
114,
117,
115,
116,
92,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
109,
97,
99,
114,
111,
115,
47,
109,
111,
100,
46,
114,
115,
0,
16,
12,
16,
0,
111,
0,
0,
0,
16,
0,
0,
0,
9,
0,
0,
0,
40,
41,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
109,
105,
110,
105,
122,
95,
111,
120,
105,
100,
101,
45,
48,
46,
52,
46,
48,
92,
115,
114,
99,
92,
100,
101,
102,
108,
97,
116,
101,
92,
99,
111,
114,
101,
46,
114,
115,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
134,
1,
0,
0,
5,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
134,
1,
0,
0,
27,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
15,
2,
0,
0,
49,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
41,
2,
0,
0,
19,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
42,
2,
0,
0,
35,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
73,
2,
0,
0,
22,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
98,
105,
116,
115,
32,
60,
61,
32,
40,
40,
49,
117,
51,
50,
32,
60,
60,
32,
108,
101,
110,
41,
32,
45,
32,
49,
117,
51,
50,
41,
146,
12,
16,
0,
100,
0,
0,
0,
155,
2,
0,
0,
9,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
159,
2,
0,
0,
13,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
212,
2,
0,
0,
30,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
93,
3,
0,
0,
27,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
98,
3,
0,
0,
17,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
117,
3,
0,
0,
40,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
118,
3,
0,
0,
45,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
118,
3,
0,
0,
25,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
122,
3,
0,
0,
25,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
126,
3,
0,
0,
55,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
127,
3,
0,
0,
45,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
127,
3,
0,
0,
76,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
131,
3,
0,
0,
45,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
136,
3,
0,
0,
17,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
138,
3,
0,
0,
49,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
138,
3,
0,
0,
41,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
147,
3,
0,
0,
43,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
152,
3,
0,
0,
25,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
169,
3,
0,
0,
37,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
170,
3,
0,
0,
21,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
179,
3,
0,
0,
20,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
181,
3,
0,
0,
21,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
200,
3,
0,
0,
17,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
214,
3,
0,
0,
20,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
215,
3,
0,
0,
21,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
224,
3,
0,
0,
22,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
230,
3,
0,
0,
17,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
240,
3,
0,
0,
36,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
241,
3,
0,
0,
32,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
242,
3,
0,
0,
21,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
251,
3,
0,
0,
22,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
252,
3,
0,
0,
13,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
8,
4,
0,
0,
28,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
60,
4,
0,
0,
9,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
60,
4,
0,
0,
62,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
62,
4,
0,
0,
9,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
63,
4,
0,
0,
31,
0,
0,
0,
16,
17,
18,
0,
8,
7,
9,
6,
10,
5,
11,
4,
12,
3,
13,
2,
14,
1,
15,
0,
146,
12,
16,
0,
100,
0,
0,
0,
120,
4,
0,
0,
26,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
129,
4,
0,
0,
24,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
99,
111,
100,
101,
32,
60,
32,
77,
65,
88,
95,
72,
85,
70,
70,
95,
83,
89,
77,
66,
79,
76,
83,
95,
50,
0,
146,
12,
16,
0,
100,
0,
0,
0,
131,
4,
0,
0,
13,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
138,
4,
0,
0,
31,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
139,
4,
0,
0,
21,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
213,
4,
0,
0,
30,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
14,
5,
0,
0,
42,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
180,
5,
0,
0,
9,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
194,
5,
0,
0,
14,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
236,
5,
0,
0,
29,
0,
0,
0,
1,
1,
2,
1,
3,
1,
4,
1,
5,
1,
6,
1,
7,
1,
8,
1,
9,
1,
9,
1,
10,
1,
10,
1,
11,
1,
11,
1,
12,
1,
12,
1,
13,
1,
13,
1,
13,
1,
13,
1,
14,
1,
14,
1,
14,
1,
14,
1,
15,
1,
15,
1,
15,
1,
15,
1,
16,
1,
16,
1,
16,
1,
16,
1,
17,
1,
17,
1,
17,
1,
17,
1,
17,
1,
17,
1,
17,
1,
17,
1,
18,
1,
18,
1,
18,
1,
18,
1,
18,
1,
18,
1,
18,
1,
18,
1,
19,
1,
19,
1,
19,
1,
19,
1,
19,
1,
19,
1,
19,
1,
19,
1,
20,
1,
20,
1,
20,
1,
20,
1,
20,
1,
20,
1,
20,
1,
20,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
21,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
22,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
23,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
24,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
25,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
26,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
27,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
28,
1,
29,
1,
146,
12,
16,
0,
100,
0,
0,
0,
244,
5,
0,
0,
27,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
3,
0,
0,
0,
7,
0,
0,
0,
15,
0,
0,
0,
31,
0,
0,
0,
63,
0,
0,
0,
127,
0,
0,
0,
255,
0,
0,
0,
255,
1,
0,
0,
255,
3,
0,
0,
255,
7,
0,
0,
255,
15,
0,
0,
255,
31,
0,
0,
255,
63,
0,
0,
255,
127,
0,
0,
255,
255,
0,
65,
148,
166,
192,
0,
11,
245,
22,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
0,
146,
12,
16,
0,
100,
0,
0,
0,
248,
5,
0,
0,
46,
0,
0,
0,
0,
1,
2,
3,
4,
4,
5,
5,
6,
6,
6,
6,
7,
7,
7,
7,
8,
8,
8,
8,
8,
8,
8,
8,
9,
9,
9,
9,
9,
9,
9,
9,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
0,
0,
0,
0,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
0,
0,
18,
19,
20,
20,
21,
21,
22,
22,
22,
22,
23,
23,
23,
23,
24,
24,
24,
24,
24,
24,
24,
24,
25,
25,
25,
25,
25,
25,
25,
25,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
146,
12,
16,
0,
100,
0,
0,
0,
0,
6,
0,
0,
23,
0,
0,
0,
0,
0,
8,
8,
9,
9,
9,
9,
10,
10,
10,
10,
10,
10,
10,
10,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
146,
12,
16,
0,
100,
0,
0,
0,
10,
6,
0,
0,
51,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
17,
6,
0,
0,
27,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
65,
6,
0,
0,
38,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
100,
46,
112,
97,
114,
97,
109,
115,
46,
102,
108,
117,
115,
104,
95,
114,
101,
109,
97,
105,
110,
105,
110,
103,
32,
61,
61,
32,
48,
0,
146,
12,
16,
0,
100,
0,
0,
0,
84,
6,
0,
0,
9,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
109,
97,
116,
99,
104,
95,
108,
101,
110,
32,
62,
61,
32,
77,
73,
78,
95,
77,
65,
84,
67,
72,
95,
76,
69,
78,
46,
105,
110,
116,
111,
40,
41,
0,
146,
12,
16,
0,
100,
0,
0,
0,
196,
6,
0,
0,
5,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
109,
97,
116,
99,
104,
95,
100,
105,
115,
116,
32,
62,
61,
32,
49,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
197,
6,
0,
0,
5,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
109,
97,
116,
99,
104,
95,
100,
105,
115,
116,
32,
97,
115,
32,
117,
115,
105,
122,
101,
32,
60,
61,
32,
76,
90,
95,
68,
73,
67,
84,
95,
83,
73,
90,
69,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
198,
6,
0,
0,
5,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
217,
6,
0,
0,
16,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
217,
6,
0,
0,
5,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
252,
6,
0,
0,
24,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
0,
7,
0,
0,
21,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
14,
7,
0,
0,
24,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
18,
7,
0,
0,
21,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
56,
7,
0,
0,
33,
0,
0,
0,
97,
115,
115,
101,
114,
116,
105,
111,
110,
32,
102,
97,
105,
108,
101,
100,
58,
32,
108,
111,
111,
107,
97,
104,
101,
97,
100,
95,
115,
105,
122,
101,
32,
62,
61,
32,
108,
101,
110,
95,
116,
111,
95,
109,
111,
118,
101,
0,
146,
12,
16,
0,
100,
0,
0,
0,
124,
7,
0,
0,
9,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
184,
7,
0,
0,
13,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
184,
7,
0,
0,
66,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
188,
7,
0,
0,
17,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
189,
7,
0,
0,
39,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
15,
8,
0,
0,
34,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
18,
8,
0,
0,
41,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
18,
8,
0,
0,
25,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
60,
8,
0,
0,
23,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
107,
8,
0,
0,
19,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
108,
8,
0,
0,
35,
0,
0,
0,
146,
12,
16,
0,
100,
0,
0,
0,
218,
8,
0,
0,
66,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
6,
0,
0,
0,
32,
0,
0,
0,
16,
0,
0,
0,
32,
0,
0,
0,
128,
0,
0,
0,
0,
1,
0,
0,
0,
2,
0,
0,
0,
3,
0,
0,
220,
5,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
109,
105,
110,
105,
122,
95,
111,
120,
105,
100,
101,
45,
48,
46,
52,
46,
48,
92,
115,
114,
99,
92,
105,
110,
102,
108,
97,
116,
101,
92,
99,
111,
114,
101,
46,
114,
115,
232,
27,
16,
0,
100,
0,
0,
0,
55,
0,
0,
0,
32,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
83,
1,
0,
0,
25,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
215,
1,
0,
0,
29,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
116,
2,
0,
0,
26,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
123,
2,
0,
0,
28,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
124,
2,
0,
0,
13,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
143,
2,
0,
0,
29,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
148,
2,
0,
0,
32,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
176,
2,
0,
0,
20,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
187,
2,
0,
0,
13,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
242,
2,
0,
0,
30,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
242,
2,
0,
0,
9,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
243,
2,
0,
0,
34,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
243,
2,
0,
0,
9,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
244,
2,
0,
0,
34,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
244,
2,
0,
0,
9,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
245,
2,
0,
0,
34,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
245,
2,
0,
0,
9,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
2,
3,
0,
0,
34,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
2,
3,
0,
0,
13,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
3,
3,
0,
0,
38,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
3,
3,
0,
0,
13,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
4,
3,
0,
0,
38,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
4,
3,
0,
0,
13,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
254,
2,
0,
0,
34,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
254,
2,
0,
0,
13,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
255,
2,
0,
0,
38,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
255,
2,
0,
0,
13,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
252,
2,
0,
0,
35,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
252,
2,
0,
0,
14,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
25,
3,
0,
0,
30,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
25,
3,
0,
0,
9,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
26,
3,
0,
0,
34,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
26,
3,
0,
0,
9,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
27,
3,
0,
0,
34,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
27,
3,
0,
0,
9,
0,
65,
148,
189,
192,
0,
11,
220,
169,
1,
1,
1,
1,
1,
2,
2,
2,
2,
3,
3,
3,
3,
4,
4,
4,
4,
5,
5,
5,
5,
0,
0,
0,
0,
3,
0,
4,
0,
5,
0,
6,
0,
7,
0,
8,
0,
9,
0,
10,
0,
11,
0,
13,
0,
15,
0,
17,
0,
19,
0,
23,
0,
27,
0,
31,
0,
35,
0,
43,
0,
51,
0,
59,
0,
67,
0,
83,
0,
99,
0,
115,
0,
131,
0,
163,
0,
195,
0,
227,
0,
2,
1,
0,
2,
0,
2,
0,
2,
0,
0,
0,
0,
1,
1,
2,
2,
3,
3,
4,
4,
5,
5,
6,
6,
7,
7,
8,
8,
9,
9,
10,
10,
11,
11,
12,
12,
13,
13,
13,
13,
1,
0,
2,
0,
3,
0,
4,
0,
5,
0,
7,
0,
9,
0,
13,
0,
17,
0,
25,
0,
33,
0,
49,
0,
65,
0,
97,
0,
129,
0,
193,
0,
1,
1,
129,
1,
1,
2,
1,
3,
1,
4,
1,
6,
1,
8,
1,
12,
1,
16,
1,
24,
1,
32,
1,
48,
1,
64,
1,
96,
0,
128,
0,
128,
232,
27,
16,
0,
100,
0,
0,
0,
11,
6,
0,
0,
31,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
0,
5,
0,
0,
21,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
6,
5,
0,
0,
21,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
7,
5,
0,
0,
43,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
188,
4,
0,
0,
42,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
86,
6,
0,
0,
60,
0,
0,
0,
1,
1,
1,
0,
4,
0,
16,
17,
18,
0,
8,
7,
9,
6,
10,
5,
11,
4,
12,
3,
13,
2,
14,
1,
15,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
224,
4,
0,
0,
40,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
242,
4,
0,
0,
33,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
248,
4,
0,
0,
47,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
18,
5,
0,
0,
35,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
20,
5,
0,
0,
25,
0,
0,
0,
232,
27,
16,
0,
100,
0,
0,
0,
26,
5,
0,
0,
30,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
109,
105,
110,
105,
122,
95,
111,
120,
105,
100,
101,
45,
48,
46,
52,
46,
48,
92,
115,
114,
99,
92,
105,
110,
102,
108,
97,
116,
101,
92,
111,
117,
116,
112,
117,
116,
95,
98,
117,
102,
102,
101,
114,
46,
114,
115,
0,
0,
0,
40,
32,
16,
0,
109,
0,
0,
0,
32,
0,
0,
0,
9,
0,
0,
0,
40,
32,
16,
0,
109,
0,
0,
0,
42,
0,
0,
0,
9,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
109,
105,
110,
105,
122,
95,
111,
120,
105,
100,
101,
45,
48,
46,
52,
46,
48,
92,
115,
114,
99,
92,
105,
110,
102,
108,
97,
116,
101,
92,
115,
116,
114,
101,
97,
109,
46,
114,
115,
0,
0,
184,
32,
16,
0,
102,
0,
0,
0,
242,
0,
0,
0,
21,
0,
0,
0,
184,
32,
16,
0,
102,
0,
0,
0,
34,
1,
0,
0,
38,
0,
0,
0,
80,
97,
114,
97,
109,
86,
101,
114,
115,
105,
111,
110,
66,
117,
102,
77,
101,
109,
68,
97,
116,
97,
83,
116,
114,
101,
97,
109,
69,
114,
114,
78,
111,
0,
0,
0,
0,
0,
0,
0,
2,
0,
0,
0,
2,
0,
0,
0,
3,
0,
0,
0,
4,
0,
0,
0,
67,
58,
92,
85,
115,
101,
114,
115,
92,
104,
117,
103,
111,
103,
92,
46,
99,
97,
114,
103,
111,
92,
114,
101,
103,
105,
115,
116,
114,
121,
92,
115,
114,
99,
92,
103,
105,
116,
104,
117,
98,
46,
99,
111,
109,
45,
49,
101,
99,
99,
54,
50,
57,
57,
100,
98,
57,
101,
99,
56,
50,
51,
92,
109,
105,
110,
105,
122,
95,
111,
120,
105,
100,
101,
45,
48,
46,
52,
46,
48,
92,
115,
114,
99,
92,
100,
101,
102,
108,
97,
116,
101,
92,
115,
116,
114,
101,
97,
109,
46,
114,
115,
0,
0,
120,
33,
16,
0,
102,
0,
0,
0,
58,
0,
0,
0,
20,
0,
0,
0,
120,
33,
16,
0,
102,
0,
0,
0,
59,
0,
0,
0,
25,
0,
0,
0,
0,
0,
0,
0,
150,
48,
7,
119,
44,
97,
14,
238,
186,
81,
9,
153,
25,
196,
109,
7,
143,
244,
106,
112,
53,
165,
99,
233,
163,
149,
100,
158,
50,
136,
219,
14,
164,
184,
220,
121,
30,
233,
213,
224,
136,
217,
210,
151,
43,
76,
182,
9,
189,
124,
177,
126,
7,
45,
184,
231,
145,
29,
191,
144,
100,
16,
183,
29,
242,
32,
176,
106,
72,
113,
185,
243,
222,
65,
190,
132,
125,
212,
218,
26,
235,
228,
221,
109,
81,
181,
212,
244,
199,
133,
211,
131,
86,
152,
108,
19,
192,
168,
107,
100,
122,
249,
98,
253,
236,
201,
101,
138,
79,
92,
1,
20,
217,
108,
6,
99,
99,
61,
15,
250,
245,
13,
8,
141,
200,
32,
110,
59,
94,
16,
105,
76,
228,
65,
96,
213,
114,
113,
103,
162,
209,
228,
3,
60,
71,
212,
4,
75,
253,
133,
13,
210,
107,
181,
10,
165,
250,
168,
181,
53,
108,
152,
178,
66,
214,
201,
187,
219,
64,
249,
188,
172,
227,
108,
216,
50,
117,
92,
223,
69,
207,
13,
214,
220,
89,
61,
209,
171,
172,
48,
217,
38,
58,
0,
222,
81,
128,
81,
215,
200,
22,
97,
208,
191,
181,
244,
180,
33,
35,
196,
179,
86,
153,
149,
186,
207,
15,
165,
189,
184,
158,
184,
2,
40,
8,
136,
5,
95,
178,
217,
12,
198,
36,
233,
11,
177,
135,
124,
111,
47,
17,
76,
104,
88,
171,
29,
97,
193,
61,
45,
102,
182,
144,
65,
220,
118,
6,
113,
219,
1,
188,
32,
210,
152,
42,
16,
213,
239,
137,
133,
177,
113,
31,
181,
182,
6,
165,
228,
191,
159,
51,
212,
184,
232,
162,
201,
7,
120,
52,
249,
0,
15,
142,
168,
9,
150,
24,
152,
14,
225,
187,
13,
106,
127,
45,
61,
109,
8,
151,
108,
100,
145,
1,
92,
99,
230,
244,
81,
107,
107,
98,
97,
108,
28,
216,
48,
101,
133,
78,
0,
98,
242,
237,
149,
6,
108,
123,
165,
1,
27,
193,
244,
8,
130,
87,
196,
15,
245,
198,
217,
176,
101,
80,
233,
183,
18,
234,
184,
190,
139,
124,
136,
185,
252,
223,
29,
221,
98,
73,
45,
218,
21,
243,
124,
211,
140,
101,
76,
212,
251,
88,
97,
178,
77,
206,
81,
181,
58,
116,
0,
188,
163,
226,
48,
187,
212,
65,
165,
223,
74,
215,
149,
216,
61,
109,
196,
209,
164,
251,
244,
214,
211,
106,
233,
105,
67,
252,
217,
110,
52,
70,
136,
103,
173,
208,
184,
96,
218,
115,
45,
4,
68,
229,
29,
3,
51,
95,
76,
10,
170,
201,
124,
13,
221,
60,
113,
5,
80,
170,
65,
2,
39,
16,
16,
11,
190,
134,
32,
12,
201,
37,
181,
104,
87,
179,
133,
111,
32,
9,
212,
102,
185,
159,
228,
97,
206,
14,
249,
222,
94,
152,
201,
217,
41,
34,
152,
208,
176,
180,
168,
215,
199,
23,
61,
179,
89,
129,
13,
180,
46,
59,
92,
189,
183,
173,
108,
186,
192,
32,
131,
184,
237,
182,
179,
191,
154,
12,
226,
182,
3,
154,
210,
177,
116,
57,
71,
213,
234,
175,
119,
210,
157,
21,
38,
219,
4,
131,
22,
220,
115,
18,
11,
99,
227,
132,
59,
100,
148,
62,
106,
109,
13,
168,
90,
106,
122,
11,
207,
14,
228,
157,
255,
9,
147,
39,
174,
0,
10,
177,
158,
7,
125,
68,
147,
15,
240,
210,
163,
8,
135,
104,
242,
1,
30,
254,
194,
6,
105,
93,
87,
98,
247,
203,
103,
101,
128,
113,
54,
108,
25,
231,
6,
107,
110,
118,
27,
212,
254,
224,
43,
211,
137,
90,
122,
218,
16,
204,
74,
221,
103,
111,
223,
185,
249,
249,
239,
190,
142,
67,
190,
183,
23,
213,
142,
176,
96,
232,
163,
214,
214,
126,
147,
209,
161,
196,
194,
216,
56,
82,
242,
223,
79,
241,
103,
187,
209,
103,
87,
188,
166,
221,
6,
181,
63,
75,
54,
178,
72,
218,
43,
13,
216,
76,
27,
10,
175,
246,
74,
3,
54,
96,
122,
4,
65,
195,
239,
96,
223,
85,
223,
103,
168,
239,
142,
110,
49,
121,
190,
105,
70,
140,
179,
97,
203,
26,
131,
102,
188,
160,
210,
111,
37,
54,
226,
104,
82,
149,
119,
12,
204,
3,
71,
11,
187,
185,
22,
2,
34,
47,
38,
5,
85,
190,
59,
186,
197,
40,
11,
189,
178,
146,
90,
180,
43,
4,
106,
179,
92,
167,
255,
215,
194,
49,
207,
208,
181,
139,
158,
217,
44,
29,
174,
222,
91,
176,
194,
100,
155,
38,
242,
99,
236,
156,
163,
106,
117,
10,
147,
109,
2,
169,
6,
9,
156,
63,
54,
14,
235,
133,
103,
7,
114,
19,
87,
0,
5,
130,
74,
191,
149,
20,
122,
184,
226,
174,
43,
177,
123,
56,
27,
182,
12,
155,
142,
210,
146,
13,
190,
213,
229,
183,
239,
220,
124,
33,
223,
219,
11,
212,
210,
211,
134,
66,
226,
212,
241,
248,
179,
221,
104,
110,
131,
218,
31,
205,
22,
190,
129,
91,
38,
185,
246,
225,
119,
176,
111,
119,
71,
183,
24,
230,
90,
8,
136,
112,
106,
15,
255,
202,
59,
6,
102,
92,
11,
1,
17,
255,
158,
101,
143,
105,
174,
98,
248,
211,
255,
107,
97,
69,
207,
108,
22,
120,
226,
10,
160,
238,
210,
13,
215,
84,
131,
4,
78,
194,
179,
3,
57,
97,
38,
103,
167,
247,
22,
96,
208,
77,
71,
105,
73,
219,
119,
110,
62,
74,
106,
209,
174,
220,
90,
214,
217,
102,
11,
223,
64,
240,
59,
216,
55,
83,
174,
188,
169,
197,
158,
187,
222,
127,
207,
178,
71,
233,
255,
181,
48,
28,
242,
189,
189,
138,
194,
186,
202,
48,
147,
179,
83,
166,
163,
180,
36,
5,
54,
208,
186,
147,
6,
215,
205,
41,
87,
222,
84,
191,
103,
217,
35,
46,
122,
102,
179,
184,
74,
97,
196,
2,
27,
104,
93,
148,
43,
111,
42,
55,
190,
11,
180,
161,
142,
12,
195,
27,
223,
5,
90,
141,
239,
2,
45,
0,
0,
0,
0,
65,
49,
27,
25,
130,
98,
54,
50,
195,
83,
45,
43,
4,
197,
108,
100,
69,
244,
119,
125,
134,
167,
90,
86,
199,
150,
65,
79,
8,
138,
217,
200,
73,
187,
194,
209,
138,
232,
239,
250,
203,
217,
244,
227,
12,
79,
181,
172,
77,
126,
174,
181,
142,
45,
131,
158,
207,
28,
152,
135,
81,
18,
194,
74,
16,
35,
217,
83,
211,
112,
244,
120,
146,
65,
239,
97,
85,
215,
174,
46,
20,
230,
181,
55,
215,
181,
152,
28,
150,
132,
131,
5,
89,
152,
27,
130,
24,
169,
0,
155,
219,
250,
45,
176,
154,
203,
54,
169,
93,
93,
119,
230,
28,
108,
108,
255,
223,
63,
65,
212,
158,
14,
90,
205,
162,
36,
132,
149,
227,
21,
159,
140,
32,
70,
178,
167,
97,
119,
169,
190,
166,
225,
232,
241,
231,
208,
243,
232,
36,
131,
222,
195,
101,
178,
197,
218,
170,
174,
93,
93,
235,
159,
70,
68,
40,
204,
107,
111,
105,
253,
112,
118,
174,
107,
49,
57,
239,
90,
42,
32,
44,
9,
7,
11,
109,
56,
28,
18,
243,
54,
70,
223,
178,
7,
93,
198,
113,
84,
112,
237,
48,
101,
107,
244,
247,
243,
42,
187,
182,
194,
49,
162,
117,
145,
28,
137,
52,
160,
7,
144,
251,
188,
159,
23,
186,
141,
132,
14,
121,
222,
169,
37,
56,
239,
178,
60,
255,
121,
243,
115,
190,
72,
232,
106,
125,
27,
197,
65,
60,
42,
222,
88,
5,
79,
121,
240,
68,
126,
98,
233,
135,
45,
79,
194,
198,
28,
84,
219,
1,
138,
21,
148,
64,
187,
14,
141,
131,
232,
35,
166,
194,
217,
56,
191,
13,
197,
160,
56,
76,
244,
187,
33,
143,
167,
150,
10,
206,
150,
141,
19,
9,
0,
204,
92,
72,
49,
215,
69,
139,
98,
250,
110,
202,
83,
225,
119,
84,
93,
187,
186,
21,
108,
160,
163,
214,
63,
141,
136,
151,
14,
150,
145,
80,
152,
215,
222,
17,
169,
204,
199,
210,
250,
225,
236,
147,
203,
250,
245,
92,
215,
98,
114,
29,
230,
121,
107,
222,
181,
84,
64,
159,
132,
79,
89,
88,
18,
14,
22,
25,
35,
21,
15,
218,
112,
56,
36,
155,
65,
35,
61,
167,
107,
253,
101,
230,
90,
230,
124,
37,
9,
203,
87,
100,
56,
208,
78,
163,
174,
145,
1,
226,
159,
138,
24,
33,
204,
167,
51,
96,
253,
188,
42,
175,
225,
36,
173,
238,
208,
63,
180,
45,
131,
18,
159,
108,
178,
9,
134,
171,
36,
72,
201,
234,
21,
83,
208,
41,
70,
126,
251,
104,
119,
101,
226,
246,
121,
63,
47,
183,
72,
36,
54,
116,
27,
9,
29,
53,
42,
18,
4,
242,
188,
83,
75,
179,
141,
72,
82,
112,
222,
101,
121,
49,
239,
126,
96,
254,
243,
230,
231,
191,
194,
253,
254,
124,
145,
208,
213,
61,
160,
203,
204,
250,
54,
138,
131,
187,
7,
145,
154,
120,
84,
188,
177,
57,
101,
167,
168,
75,
152,
131,
59,
10,
169,
152,
34,
201,
250,
181,
9,
136,
203,
174,
16,
79,
93,
239,
95,
14,
108,
244,
70,
205,
63,
217,
109,
140,
14,
194,
116,
67,
18,
90,
243,
2,
35,
65,
234,
193,
112,
108,
193,
128,
65,
119,
216,
71,
215,
54,
151,
6,
230,
45,
142,
197,
181,
0,
165,
132,
132,
27,
188,
26,
138,
65,
113,
91,
187,
90,
104,
152,
232,
119,
67,
217,
217,
108,
90,
30,
79,
45,
21,
95,
126,
54,
12,
156,
45,
27,
39,
221,
28,
0,
62,
18,
0,
152,
185,
83,
49,
131,
160,
144,
98,
174,
139,
209,
83,
181,
146,
22,
197,
244,
221,
87,
244,
239,
196,
148,
167,
194,
239,
213,
150,
217,
246,
233,
188,
7,
174,
168,
141,
28,
183,
107,
222,
49,
156,
42,
239,
42,
133,
237,
121,
107,
202,
172,
72,
112,
211,
111,
27,
93,
248,
46,
42,
70,
225,
225,
54,
222,
102,
160,
7,
197,
127,
99,
84,
232,
84,
34,
101,
243,
77,
229,
243,
178,
2,
164,
194,
169,
27,
103,
145,
132,
48,
38,
160,
159,
41,
184,
174,
197,
228,
249,
159,
222,
253,
58,
204,
243,
214,
123,
253,
232,
207,
188,
107,
169,
128,
253,
90,
178,
153,
62,
9,
159,
178,
127,
56,
132,
171,
176,
36,
28,
44,
241,
21,
7,
53,
50,
70,
42,
30,
115,
119,
49,
7,
180,
225,
112,
72,
245,
208,
107,
81,
54,
131,
70,
122,
119,
178,
93,
99,
78,
215,
250,
203,
15,
230,
225,
210,
204,
181,
204,
249,
141,
132,
215,
224,
74,
18,
150,
175,
11,
35,
141,
182,
200,
112,
160,
157,
137,
65,
187,
132,
70,
93,
35,
3,
7,
108,
56,
26,
196,
63,
21,
49,
133,
14,
14,
40,
66,
152,
79,
103,
3,
169,
84,
126,
192,
250,
121,
85,
129,
203,
98,
76,
31,
197,
56,
129,
94,
244,
35,
152,
157,
167,
14,
179,
220,
150,
21,
170,
27,
0,
84,
229,
90,
49,
79,
252,
153,
98,
98,
215,
216,
83,
121,
206,
23,
79,
225,
73,
86,
126,
250,
80,
149,
45,
215,
123,
212,
28,
204,
98,
19,
138,
141,
45,
82,
187,
150,
52,
145,
232,
187,
31,
208,
217,
160,
6,
236,
243,
126,
94,
173,
194,
101,
71,
110,
145,
72,
108,
47,
160,
83,
117,
232,
54,
18,
58,
169,
7,
9,
35,
106,
84,
36,
8,
43,
101,
63,
17,
228,
121,
167,
150,
165,
72,
188,
143,
102,
27,
145,
164,
39,
42,
138,
189,
224,
188,
203,
242,
161,
141,
208,
235,
98,
222,
253,
192,
35,
239,
230,
217,
189,
225,
188,
20,
252,
208,
167,
13,
63,
131,
138,
38,
126,
178,
145,
63,
185,
36,
208,
112,
248,
21,
203,
105,
59,
70,
230,
66,
122,
119,
253,
91,
181,
107,
101,
220,
244,
90,
126,
197,
55,
9,
83,
238,
118,
56,
72,
247,
177,
174,
9,
184,
240,
159,
18,
161,
51,
204,
63,
138,
114,
253,
36,
147,
0,
0,
0,
0,
55,
106,
194,
1,
110,
212,
132,
3,
89,
190,
70,
2,
220,
168,
9,
7,
235,
194,
203,
6,
178,
124,
141,
4,
133,
22,
79,
5,
184,
81,
19,
14,
143,
59,
209,
15,
214,
133,
151,
13,
225,
239,
85,
12,
100,
249,
26,
9,
83,
147,
216,
8,
10,
45,
158,
10,
61,
71,
92,
11,
112,
163,
38,
28,
71,
201,
228,
29,
30,
119,
162,
31,
41,
29,
96,
30,
172,
11,
47,
27,
155,
97,
237,
26,
194,
223,
171,
24,
245,
181,
105,
25,
200,
242,
53,
18,
255,
152,
247,
19,
166,
38,
177,
17,
145,
76,
115,
16,
20,
90,
60,
21,
35,
48,
254,
20,
122,
142,
184,
22,
77,
228,
122,
23,
224,
70,
77,
56,
215,
44,
143,
57,
142,
146,
201,
59,
185,
248,
11,
58,
60,
238,
68,
63,
11,
132,
134,
62,
82,
58,
192,
60,
101,
80,
2,
61,
88,
23,
94,
54,
111,
125,
156,
55,
54,
195,
218,
53,
1,
169,
24,
52,
132,
191,
87,
49,
179,
213,
149,
48,
234,
107,
211,
50,
221,
1,
17,
51,
144,
229,
107,
36,
167,
143,
169,
37,
254,
49,
239,
39,
201,
91,
45,
38,
76,
77,
98,
35,
123,
39,
160,
34,
34,
153,
230,
32,
21,
243,
36,
33,
40,
180,
120,
42,
31,
222,
186,
43,
70,
96,
252,
41,
113,
10,
62,
40,
244,
28,
113,
45,
195,
118,
179,
44,
154,
200,
245,
46,
173,
162,
55,
47,
192,
141,
154,
112,
247,
231,
88,
113,
174,
89,
30,
115,
153,
51,
220,
114,
28,
37,
147,
119,
43,
79,
81,
118,
114,
241,
23,
116,
69,
155,
213,
117,
120,
220,
137,
126,
79,
182,
75,
127,
22,
8,
13,
125,
33,
98,
207,
124,
164,
116,
128,
121,
147,
30,
66,
120,
202,
160,
4,
122,
253,
202,
198,
123,
176,
46,
188,
108,
135,
68,
126,
109,
222,
250,
56,
111,
233,
144,
250,
110,
108,
134,
181,
107,
91,
236,
119,
106,
2,
82,
49,
104,
53,
56,
243,
105,
8,
127,
175,
98,
63,
21,
109,
99,
102,
171,
43,
97,
81,
193,
233,
96,
212,
215,
166,
101,
227,
189,
100,
100,
186,
3,
34,
102,
141,
105,
224,
103,
32,
203,
215,
72,
23,
161,
21,
73,
78,
31,
83,
75,
121,
117,
145,
74,
252,
99,
222,
79,
203,
9,
28,
78,
146,
183,
90,
76,
165,
221,
152,
77,
152,
154,
196,
70,
175,
240,
6,
71,
246,
78,
64,
69,
193,
36,
130,
68,
68,
50,
205,
65,
115,
88,
15,
64,
42,
230,
73,
66,
29,
140,
139,
67,
80,
104,
241,
84,
103,
2,
51,
85,
62,
188,
117,
87,
9,
214,
183,
86,
140,
192,
248,
83,
187,
170,
58,
82,
226,
20,
124,
80,
213,
126,
190,
81,
232,
57,
226,
90,
223,
83,
32,
91,
134,
237,
102,
89,
177,
135,
164,
88,
52,
145,
235,
93,
3,
251,
41,
92,
90,
69,
111,
94,
109,
47,
173,
95,
128,
27,
53,
225,
183,
113,
247,
224,
238,
207,
177,
226,
217,
165,
115,
227,
92,
179,
60,
230,
107,
217,
254,
231,
50,
103,
184,
229,
5,
13,
122,
228,
56,
74,
38,
239,
15,
32,
228,
238,
86,
158,
162,
236,
97,
244,
96,
237,
228,
226,
47,
232,
211,
136,
237,
233,
138,
54,
171,
235,
189,
92,
105,
234,
240,
184,
19,
253,
199,
210,
209,
252,
158,
108,
151,
254,
169,
6,
85,
255,
44,
16,
26,
250,
27,
122,
216,
251,
66,
196,
158,
249,
117,
174,
92,
248,
72,
233,
0,
243,
127,
131,
194,
242,
38,
61,
132,
240,
17,
87,
70,
241,
148,
65,
9,
244,
163,
43,
203,
245,
250,
149,
141,
247,
205,
255,
79,
246,
96,
93,
120,
217,
87,
55,
186,
216,
14,
137,
252,
218,
57,
227,
62,
219,
188,
245,
113,
222,
139,
159,
179,
223,
210,
33,
245,
221,
229,
75,
55,
220,
216,
12,
107,
215,
239,
102,
169,
214,
182,
216,
239,
212,
129,
178,
45,
213,
4,
164,
98,
208,
51,
206,
160,
209,
106,
112,
230,
211,
93,
26,
36,
210,
16,
254,
94,
197,
39,
148,
156,
196,
126,
42,
218,
198,
73,
64,
24,
199,
204,
86,
87,
194,
251,
60,
149,
195,
162,
130,
211,
193,
149,
232,
17,
192,
168,
175,
77,
203,
159,
197,
143,
202,
198,
123,
201,
200,
241,
17,
11,
201,
116,
7,
68,
204,
67,
109,
134,
205,
26,
211,
192,
207,
45,
185,
2,
206,
64,
150,
175,
145,
119,
252,
109,
144,
46,
66,
43,
146,
25,
40,
233,
147,
156,
62,
166,
150,
171,
84,
100,
151,
242,
234,
34,
149,
197,
128,
224,
148,
248,
199,
188,
159,
207,
173,
126,
158,
150,
19,
56,
156,
161,
121,
250,
157,
36,
111,
181,
152,
19,
5,
119,
153,
74,
187,
49,
155,
125,
209,
243,
154,
48,
53,
137,
141,
7,
95,
75,
140,
94,
225,
13,
142,
105,
139,
207,
143,
236,
157,
128,
138,
219,
247,
66,
139,
130,
73,
4,
137,
181,
35,
198,
136,
136,
100,
154,
131,
191,
14,
88,
130,
230,
176,
30,
128,
209,
218,
220,
129,
84,
204,
147,
132,
99,
166,
81,
133,
58,
24,
23,
135,
13,
114,
213,
134,
160,
208,
226,
169,
151,
186,
32,
168,
206,
4,
102,
170,
249,
110,
164,
171,
124,
120,
235,
174,
75,
18,
41,
175,
18,
172,
111,
173,
37,
198,
173,
172,
24,
129,
241,
167,
47,
235,
51,
166,
118,
85,
117,
164,
65,
63,
183,
165,
196,
41,
248,
160,
243,
67,
58,
161,
170,
253,
124,
163,
157,
151,
190,
162,
208,
115,
196,
181,
231,
25,
6,
180,
190,
167,
64,
182,
137,
205,
130,
183,
12,
219,
205,
178,
59,
177,
15,
179,
98,
15,
73,
177,
85,
101,
139,
176,
104,
34,
215,
187,
95,
72,
21,
186,
6,
246,
83,
184,
49,
156,
145,
185,
180,
138,
222,
188,
131,
224,
28,
189,
218,
94,
90,
191,
237,
52,
152,
190,
0,
0,
0,
0,
101,
103,
188,
184,
139,
200,
9,
170,
238,
175,
181,
18,
87,
151,
98,
143,
50,
240,
222,
55,
220,
95,
107,
37,
185,
56,
215,
157,
239,
40,
180,
197,
138,
79,
8,
125,
100,
224,
189,
111,
1,
135,
1,
215,
184,
191,
214,
74,
221,
216,
106,
242,
51,
119,
223,
224,
86,
16,
99,
88,
159,
87,
25,
80,
250,
48,
165,
232,
20,
159,
16,
250,
113,
248,
172,
66,
200,
192,
123,
223,
173,
167,
199,
103,
67,
8,
114,
117,
38,
111,
206,
205,
112,
127,
173,
149,
21,
24,
17,
45,
251,
183,
164,
63,
158,
208,
24,
135,
39,
232,
207,
26,
66,
143,
115,
162,
172,
32,
198,
176,
201,
71,
122,
8,
62,
175,
50,
160,
91,
200,
142,
24,
181,
103,
59,
10,
208,
0,
135,
178,
105,
56,
80,
47,
12,
95,
236,
151,
226,
240,
89,
133,
135,
151,
229,
61,
209,
135,
134,
101,
180,
224,
58,
221,
90,
79,
143,
207,
63,
40,
51,
119,
134,
16,
228,
234,
227,
119,
88,
82,
13,
216,
237,
64,
104,
191,
81,
248,
161,
248,
43,
240,
196,
159,
151,
72,
42,
48,
34,
90,
79,
87,
158,
226,
246,
111,
73,
127,
147,
8,
245,
199,
125,
167,
64,
213,
24,
192,
252,
109,
78,
208,
159,
53,
43,
183,
35,
141,
197,
24,
150,
159,
160,
127,
42,
39,
25,
71,
253,
186,
124,
32,
65,
2,
146,
143,
244,
16,
247,
232,
72,
168,
61,
88,
20,
155,
88,
63,
168,
35,
182,
144,
29,
49,
211,
247,
161,
137,
106,
207,
118,
20,
15,
168,
202,
172,
225,
7,
127,
190,
132,
96,
195,
6,
210,
112,
160,
94,
183,
23,
28,
230,
89,
184,
169,
244,
60,
223,
21,
76,
133,
231,
194,
209,
224,
128,
126,
105,
14,
47,
203,
123,
107,
72,
119,
195,
162,
15,
13,
203,
199,
104,
177,
115,
41,
199,
4,
97,
76,
160,
184,
217,
245,
152,
111,
68,
144,
255,
211,
252,
126,
80,
102,
238,
27,
55,
218,
86,
77,
39,
185,
14,
40,
64,
5,
182,
198,
239,
176,
164,
163,
136,
12,
28,
26,
176,
219,
129,
127,
215,
103,
57,
145,
120,
210,
43,
244,
31,
110,
147,
3,
247,
38,
59,
102,
144,
154,
131,
136,
63,
47,
145,
237,
88,
147,
41,
84,
96,
68,
180,
49,
7,
248,
12,
223,
168,
77,
30,
186,
207,
241,
166,
236,
223,
146,
254,
137,
184,
46,
70,
103,
23,
155,
84,
2,
112,
39,
236,
187,
72,
240,
113,
222,
47,
76,
201,
48,
128,
249,
219,
85,
231,
69,
99,
156,
160,
63,
107,
249,
199,
131,
211,
23,
104,
54,
193,
114,
15,
138,
121,
203,
55,
93,
228,
174,
80,
225,
92,
64,
255,
84,
78,
37,
152,
232,
246,
115,
136,
139,
174,
22,
239,
55,
22,
248,
64,
130,
4,
157,
39,
62,
188,
36,
31,
233,
33,
65,
120,
85,
153,
175,
215,
224,
139,
202,
176,
92,
51,
59,
182,
89,
237,
94,
209,
229,
85,
176,
126,
80,
71,
213,
25,
236,
255,
108,
33,
59,
98,
9,
70,
135,
218,
231,
233,
50,
200,
130,
142,
142,
112,
212,
158,
237,
40,
177,
249,
81,
144,
95,
86,
228,
130,
58,
49,
88,
58,
131,
9,
143,
167,
230,
110,
51,
31,
8,
193,
134,
13,
109,
166,
58,
181,
164,
225,
64,
189,
193,
134,
252,
5,
47,
41,
73,
23,
74,
78,
245,
175,
243,
118,
34,
50,
150,
17,
158,
138,
120,
190,
43,
152,
29,
217,
151,
32,
75,
201,
244,
120,
46,
174,
72,
192,
192,
1,
253,
210,
165,
102,
65,
106,
28,
94,
150,
247,
121,
57,
42,
79,
151,
150,
159,
93,
242,
241,
35,
229,
5,
25,
107,
77,
96,
126,
215,
245,
142,
209,
98,
231,
235,
182,
222,
95,
82,
142,
9,
194,
55,
233,
181,
122,
217,
70,
0,
104,
188,
33,
188,
208,
234,
49,
223,
136,
143,
86,
99,
48,
97,
249,
214,
34,
4,
158,
106,
154,
189,
166,
189,
7,
216,
193,
1,
191,
54,
110,
180,
173,
83,
9,
8,
21,
154,
78,
114,
29,
255,
41,
206,
165,
17,
134,
123,
183,
116,
225,
199,
15,
205,
217,
16,
146,
168,
190,
172,
42,
70,
17,
25,
56,
35,
118,
165,
128,
117,
102,
198,
216,
16,
1,
122,
96,
254,
174,
207,
114,
155,
201,
115,
202,
34,
241,
164,
87,
71,
150,
24,
239,
169,
57,
173,
253,
204,
94,
17,
69,
6,
238,
77,
118,
99,
137,
241,
206,
141,
38,
68,
220,
232,
65,
248,
100,
81,
121,
47,
249,
52,
30,
147,
65,
218,
177,
38,
83,
191,
214,
154,
235,
233,
198,
249,
179,
140,
161,
69,
11,
98,
14,
240,
25,
7,
105,
76,
161,
190,
81,
155,
60,
219,
54,
39,
132,
53,
153,
146,
150,
80,
254,
46,
46,
153,
185,
84,
38,
252,
222,
232,
158,
18,
113,
93,
140,
119,
22,
225,
52,
206,
46,
54,
169,
171,
73,
138,
17,
69,
230,
63,
3,
32,
129,
131,
187,
118,
145,
224,
227,
19,
246,
92,
91,
253,
89,
233,
73,
152,
62,
85,
241,
33,
6,
130,
108,
68,
97,
62,
212,
170,
206,
139,
198,
207,
169,
55,
126,
56,
65,
127,
214,
93,
38,
195,
110,
179,
137,
118,
124,
214,
238,
202,
196,
111,
214,
29,
89,
10,
177,
161,
225,
228,
30,
20,
243,
129,
121,
168,
75,
215,
105,
203,
19,
178,
14,
119,
171,
92,
161,
194,
185,
57,
198,
126,
1,
128,
254,
169,
156,
229,
153,
21,
36,
11,
54,
160,
54,
110,
81,
28,
142,
167,
22,
102,
134,
194,
113,
218,
62,
44,
222,
111,
44,
73,
185,
211,
148,
240,
129,
4,
9,
149,
230,
184,
177,
123,
73,
13,
163,
30,
46,
177,
27,
72,
62,
210,
67,
45,
89,
110,
251,
195,
246,
219,
233,
166,
145,
103,
81,
31,
169,
176,
204,
122,
206,
12,
116,
148,
97,
185,
102,
241,
6,
5,
222,
0,
0,
0,
0,
176,
41,
96,
61,
96,
83,
192,
122,
208,
122,
160,
71,
192,
166,
128,
245,
112,
143,
224,
200,
160,
245,
64,
143,
16,
220,
32,
178,
193,
75,
112,
48,
113,
98,
16,
13,
161,
24,
176,
74,
17,
49,
208,
119,
1,
237,
240,
197,
177,
196,
144,
248,
97,
190,
48,
191,
209,
151,
80,
130,
130,
151,
224,
96,
50,
190,
128,
93,
226,
196,
32,
26,
82,
237,
64,
39,
66,
49,
96,
149,
242,
24,
0,
168,
34,
98,
160,
239,
146,
75,
192,
210,
67,
220,
144,
80,
243,
245,
240,
109,
35,
143,
80,
42,
147,
166,
48,
23,
131,
122,
16,
165,
51,
83,
112,
152,
227,
41,
208,
223,
83,
0,
176,
226,
4,
47,
193,
193,
180,
6,
161,
252,
100,
124,
1,
187,
212,
85,
97,
134,
196,
137,
65,
52,
116,
160,
33,
9,
164,
218,
129,
78,
20,
243,
225,
115,
197,
100,
177,
241,
117,
77,
209,
204,
165,
55,
113,
139,
21,
30,
17,
182,
5,
194,
49,
4,
181,
235,
81,
57,
101,
145,
241,
126,
213,
184,
145,
67,
134,
184,
33,
161,
54,
145,
65,
156,
230,
235,
225,
219,
86,
194,
129,
230,
70,
30,
161,
84,
246,
55,
193,
105,
38,
77,
97,
46,
150,
100,
1,
19,
71,
243,
81,
145,
247,
218,
49,
172,
39,
160,
145,
235,
151,
137,
241,
214,
135,
85,
209,
100,
55,
124,
177,
89,
231,
6,
17,
30,
87,
47,
113,
35,
73,
88,
243,
88,
249,
113,
147,
101,
41,
11,
51,
34,
153,
34,
83,
31,
137,
254,
115,
173,
57,
215,
19,
144,
233,
173,
179,
215,
89,
132,
211,
234,
136,
19,
131,
104,
56,
58,
227,
85,
232,
64,
67,
18,
88,
105,
35,
47,
72,
181,
3,
157,
248,
156,
99,
160,
40,
230,
195,
231,
152,
207,
163,
218,
203,
207,
19,
56,
123,
230,
115,
5,
171,
156,
211,
66,
27,
181,
179,
127,
11,
105,
147,
205,
187,
64,
243,
240,
107,
58,
83,
183,
219,
19,
51,
138,
10,
132,
99,
8,
186,
173,
3,
53,
106,
215,
163,
114,
218,
254,
195,
79,
202,
34,
227,
253,
122,
11,
131,
192,
170,
113,
35,
135,
26,
88,
67,
186,
77,
119,
50,
153,
253,
94,
82,
164,
45,
36,
242,
227,
157,
13,
146,
222,
141,
209,
178,
108,
61,
248,
210,
81,
237,
130,
114,
22,
93,
171,
18,
43,
140,
60,
66,
169,
60,
21,
34,
148,
236,
111,
130,
211,
92,
70,
226,
238,
76,
154,
194,
92,
252,
179,
162,
97,
44,
201,
2,
38,
156,
224,
98,
27,
207,
224,
210,
249,
127,
201,
178,
196,
175,
179,
18,
131,
31,
154,
114,
190,
15,
70,
82,
12,
191,
111,
50,
49,
111,
21,
146,
118,
223,
60,
242,
75,
14,
171,
162,
201,
190,
130,
194,
244,
110,
248,
98,
179,
222,
209,
2,
142,
206,
13,
34,
60,
126,
36,
66,
1,
174,
94,
226,
70,
30,
119,
130,
123,
146,
176,
230,
177,
34,
153,
134,
140,
242,
227,
38,
203,
66,
202,
70,
246,
82,
22,
102,
68,
226,
63,
6,
121,
50,
69,
166,
62,
130,
108,
198,
3,
83,
251,
150,
129,
227,
210,
246,
188,
51,
168,
86,
251,
131,
129,
54,
198,
147,
93,
22,
116,
35,
116,
118,
73,
243,
14,
214,
14,
67,
39,
182,
51,
16,
39,
6,
209,
160,
14,
102,
236,
112,
116,
198,
171,
192,
93,
166,
150,
208,
129,
134,
36,
96,
168,
230,
25,
176,
210,
70,
94,
0,
251,
38,
99,
209,
108,
118,
225,
97,
69,
22,
220,
177,
63,
182,
155,
1,
22,
214,
166,
17,
202,
246,
20,
161,
227,
150,
41,
113,
153,
54,
110,
193,
176,
86,
83,
150,
159,
39,
112,
38,
182,
71,
77,
246,
204,
231,
10,
70,
229,
135,
55,
86,
57,
167,
133,
230,
16,
199,
184,
54,
106,
103,
255,
134,
67,
7,
194,
87,
212,
87,
64,
231,
253,
55,
125,
55,
135,
151,
58,
135,
174,
247,
7,
151,
114,
215,
181,
39,
91,
183,
136,
247,
33,
23,
207,
71,
8,
119,
242,
20,
8,
199,
16,
164,
33,
167,
45,
116,
91,
7,
106,
196,
114,
103,
87,
212,
174,
71,
229,
100,
135,
39,
216,
180,
253,
135,
159,
4,
212,
231,
162,
213,
67,
183,
32,
101,
106,
215,
29,
181,
16,
119,
90,
5,
57,
23,
103,
21,
229,
55,
213,
165,
204,
87,
232,
117,
182,
247,
175,
197,
159,
151,
146,
219,
232,
21,
233,
107,
193,
117,
212,
187,
187,
213,
147,
11,
146,
181,
174,
27,
78,
149,
28,
171,
103,
245,
33,
123,
29,
85,
102,
203,
52,
53,
91,
26,
163,
101,
217,
170,
138,
5,
228,
122,
240,
165,
163,
202,
217,
197,
158,
218,
5,
229,
44,
106,
44,
133,
17,
186,
86,
37,
86,
10,
127,
69,
107,
89,
127,
245,
137,
233,
86,
149,
180,
57,
44,
53,
243,
137,
5,
85,
206,
153,
217,
117,
124,
41,
240,
21,
65,
249,
138,
181,
6,
73,
163,
213,
59,
152,
52,
133,
185,
40,
29,
229,
132,
248,
103,
69,
195,
72,
78,
37,
254,
88,
146,
5,
76,
232,
187,
101,
113,
56,
193,
197,
54,
136,
232,
165,
11,
223,
199,
212,
40,
111,
238,
180,
21,
191,
148,
20,
82,
15,
189,
116,
111,
31,
97,
84,
221,
175,
72,
52,
224,
127,
50,
148,
167,
207,
27,
244,
154,
30,
140,
164,
24,
174,
165,
196,
37,
126,
223,
100,
98,
206,
246,
4,
95,
222,
42,
36,
237,
110,
3,
68,
208,
190,
121,
228,
151,
14,
80,
132,
170,
93,
80,
52,
72,
237,
121,
84,
117,
61,
3,
244,
50,
141,
42,
148,
15,
157,
246,
180,
189,
45,
223,
212,
128,
253,
165,
116,
199,
77,
140,
20,
250,
156,
27,
68,
120,
44,
50,
36,
69,
252,
72,
132,
2,
76,
97,
228,
63,
92,
189,
196,
141,
236,
148,
164,
176,
60,
238,
4,
247,
140,
199,
100,
202,
0,
0,
0,
0,
165,
211,
92,
203,
11,
161,
200,
77,
174,
114,
148,
134,
22,
66,
145,
155,
179,
145,
205,
80,
29,
227,
89,
214,
184,
48,
5,
29,
109,
130,
83,
236,
200,
81,
15,
39,
102,
35,
155,
161,
195,
240,
199,
106,
123,
192,
194,
119,
222,
19,
158,
188,
112,
97,
10,
58,
213,
178,
86,
241,
155,
2,
214,
3,
62,
209,
138,
200,
144,
163,
30,
78,
53,
112,
66,
133,
141,
64,
71,
152,
40,
147,
27,
83,
134,
225,
143,
213,
35,
50,
211,
30,
246,
128,
133,
239,
83,
83,
217,
36,
253,
33,
77,
162,
88,
242,
17,
105,
224,
194,
20,
116,
69,
17,
72,
191,
235,
99,
220,
57,
78,
176,
128,
242,
54,
5,
172,
7,
147,
214,
240,
204,
61,
164,
100,
74,
152,
119,
56,
129,
32,
71,
61,
156,
133,
148,
97,
87,
43,
230,
245,
209,
142,
53,
169,
26,
91,
135,
255,
235,
254,
84,
163,
32,
80,
38,
55,
166,
245,
245,
107,
109,
77,
197,
110,
112,
232,
22,
50,
187,
70,
100,
166,
61,
227,
183,
250,
246,
173,
7,
122,
4,
8,
212,
38,
207,
166,
166,
178,
73,
3,
117,
238,
130,
187,
69,
235,
159,
30,
150,
183,
84,
176,
228,
35,
210,
21,
55,
127,
25,
192,
133,
41,
232,
101,
86,
117,
35,
203,
36,
225,
165,
110,
247,
189,
110,
214,
199,
184,
115,
115,
20,
228,
184,
221,
102,
112,
62,
120,
181,
44,
245,
108,
10,
88,
15,
201,
217,
4,
196,
103,
171,
144,
66,
194,
120,
204,
137,
122,
72,
201,
148,
223,
155,
149,
95,
113,
233,
1,
217,
212,
58,
93,
18,
1,
136,
11,
227,
164,
91,
87,
40,
10,
41,
195,
174,
175,
250,
159,
101,
23,
202,
154,
120,
178,
25,
198,
179,
28,
107,
82,
53,
185,
184,
14,
254,
247,
8,
142,
12,
82,
219,
210,
199,
252,
169,
70,
65,
89,
122,
26,
138,
225,
74,
31,
151,
68,
153,
67,
92,
234,
235,
215,
218,
79,
56,
139,
17,
154,
138,
221,
224,
63,
89,
129,
43,
145,
43,
21,
173,
52,
248,
73,
102,
140,
200,
76,
123,
41,
27,
16,
176,
135,
105,
132,
54,
34,
186,
216,
253,
90,
15,
244,
8,
255,
220,
168,
195,
81,
174,
60,
69,
244,
125,
96,
142,
76,
77,
101,
147,
233,
158,
57,
88,
71,
236,
173,
222,
226,
63,
241,
21,
55,
141,
167,
228,
146,
94,
251,
47,
60,
44,
111,
169,
153,
255,
51,
98,
33,
207,
54,
127,
132,
28,
106,
180,
42,
110,
254,
50,
143,
189,
162,
249,
193,
13,
34,
11,
100,
222,
126,
192,
202,
172,
234,
70,
111,
127,
182,
141,
215,
79,
179,
144,
114,
156,
239,
91,
220,
238,
123,
221,
121,
61,
39,
22,
172,
143,
113,
231,
9,
92,
45,
44,
167,
46,
185,
170,
2,
253,
229,
97,
186,
205,
224,
124,
31,
30,
188,
183,
177,
108,
40,
49,
20,
191,
116,
250,
216,
20,
176,
30,
125,
199,
236,
213,
211,
181,
120,
83,
118,
102,
36,
152,
206,
86,
33,
133,
107,
133,
125,
78,
197,
247,
233,
200,
96,
36,
181,
3,
181,
150,
227,
242,
16,
69,
191,
57,
190,
55,
43,
191,
27,
228,
119,
116,
163,
212,
114,
105,
6,
7,
46,
162,
168,
117,
186,
36,
13,
166,
230,
239,
67,
22,
102,
29,
230,
197,
58,
214,
72,
183,
174,
80,
237,
100,
242,
155,
85,
84,
247,
134,
240,
135,
171,
77,
94,
245,
63,
203,
251,
38,
99,
0,
46,
148,
53,
241,
139,
71,
105,
58,
37,
53,
253,
188,
128,
230,
161,
119,
56,
214,
164,
106,
157,
5,
248,
161,
51,
119,
108,
39,
150,
164,
48,
236,
238,
17,
28,
25,
75,
194,
64,
210,
229,
176,
212,
84,
64,
99,
136,
159,
248,
83,
141,
130,
93,
128,
209,
73,
243,
242,
69,
207,
86,
33,
25,
4,
131,
147,
79,
245,
38,
64,
19,
62,
136,
50,
135,
184,
45,
225,
219,
115,
149,
209,
222,
110,
48,
2,
130,
165,
158,
112,
22,
35,
59,
163,
74,
232,
117,
19,
202,
26,
208,
192,
150,
209,
126,
178,
2,
87,
219,
97,
94,
156,
99,
81,
91,
129,
198,
130,
7,
74,
104,
240,
147,
204,
205,
35,
207,
7,
24,
145,
153,
246,
189,
66,
197,
61,
19,
48,
81,
187,
182,
227,
13,
112,
14,
211,
8,
109,
171,
0,
84,
166,
5,
114,
192,
32,
160,
161,
156,
235,
180,
30,
232,
17,
17,
205,
180,
218,
191,
191,
32,
92,
26,
108,
124,
151,
162,
92,
121,
138,
7,
143,
37,
65,
169,
253,
177,
199,
12,
46,
237,
12,
217,
156,
187,
253,
124,
79,
231,
54,
210,
61,
115,
176,
119,
238,
47,
123,
207,
222,
42,
102,
106,
13,
118,
173,
196,
127,
226,
43,
97,
172,
190,
224,
47,
28,
62,
18,
138,
207,
98,
217,
36,
189,
246,
95,
129,
110,
170,
148,
57,
94,
175,
137,
156,
141,
243,
66,
50,
255,
103,
196,
151,
44,
59,
15,
66,
158,
109,
254,
231,
77,
49,
53,
73,
63,
165,
179,
236,
236,
249,
120,
84,
220,
252,
101,
241,
15,
160,
174,
95,
125,
52,
40,
250,
174,
104,
227,
130,
27,
68,
22,
39,
200,
24,
221,
137,
186,
140,
91,
44,
105,
208,
144,
148,
89,
213,
141,
49,
138,
137,
70,
159,
248,
29,
192,
58,
43,
65,
11,
239,
153,
23,
250,
74,
74,
75,
49,
228,
56,
223,
183,
65,
235,
131,
124,
249,
219,
134,
97,
92,
8,
218,
170,
242,
122,
78,
44,
87,
169,
18,
231,
25,
25,
146,
21,
188,
202,
206,
222,
18,
184,
90,
88,
183,
107,
6,
147,
15,
91,
3,
142,
170,
136,
95,
69,
4,
250,
203,
195,
161,
41,
151,
8,
116,
155,
193,
249,
209,
72,
157,
50,
127,
58,
9,
180,
218,
233,
85,
127,
98,
217,
80,
98,
199,
10,
12,
169,
105,
120,
152,
47,
204,
171,
196,
228,
0,
0,
0,
0,
180,
11,
119,
166,
41,
17,
159,
151,
157,
26,
232,
49,
19,
36,
79,
244,
167,
47,
56,
82,
58,
53,
208,
99,
142,
62,
167,
197,
103,
78,
239,
51,
211,
69,
152,
149,
78,
95,
112,
164,
250,
84,
7,
2,
116,
106,
160,
199,
192,
97,
215,
97,
93,
123,
63,
80,
233,
112,
72,
246,
206,
156,
222,
103,
122,
151,
169,
193,
231,
141,
65,
240,
83,
134,
54,
86,
221,
184,
145,
147,
105,
179,
230,
53,
244,
169,
14,
4,
64,
162,
121,
162,
169,
210,
49,
84,
29,
217,
70,
242,
128,
195,
174,
195,
52,
200,
217,
101,
186,
246,
126,
160,
14,
253,
9,
6,
147,
231,
225,
55,
39,
236,
150,
145,
156,
57,
189,
207,
40,
50,
202,
105,
181,
40,
34,
88,
1,
35,
85,
254,
143,
29,
242,
59,
59,
22,
133,
157,
166,
12,
109,
172,
18,
7,
26,
10,
251,
119,
82,
252,
79,
124,
37,
90,
210,
102,
205,
107,
102,
109,
186,
205,
232,
83,
29,
8,
92,
88,
106,
174,
193,
66,
130,
159,
117,
73,
245,
57,
82,
165,
99,
168,
230,
174,
20,
14,
123,
180,
252,
63,
207,
191,
139,
153,
65,
129,
44,
92,
245,
138,
91,
250,
104,
144,
179,
203,
220,
155,
196,
109,
53,
235,
140,
155,
129,
224,
251,
61,
28,
250,
19,
12,
168,
241,
100,
170,
38,
207,
195,
111,
146,
196,
180,
201,
15,
222,
92,
248,
187,
213,
43,
94,
121,
117,
11,
68,
205,
126,
124,
226,
80,
100,
148,
211,
228,
111,
227,
117,
106,
81,
68,
176,
222,
90,
51,
22,
67,
64,
219,
39,
247,
75,
172,
129,
30,
59,
228,
119,
170,
48,
147,
209,
55,
42,
123,
224,
131,
33,
12,
70,
13,
31,
171,
131,
185,
20,
220,
37,
36,
14,
52,
20,
144,
5,
67,
178,
183,
233,
213,
35,
3,
226,
162,
133,
158,
248,
74,
180,
42,
243,
61,
18,
164,
205,
154,
215,
16,
198,
237,
113,
141,
220,
5,
64,
57,
215,
114,
230,
208,
167,
58,
16,
100,
172,
77,
182,
249,
182,
165,
135,
77,
189,
210,
33,
195,
131,
117,
228,
119,
136,
2,
66,
234,
146,
234,
115,
94,
153,
157,
213,
229,
76,
182,
139,
81,
71,
193,
45,
204,
93,
41,
28,
120,
86,
94,
186,
246,
104,
249,
127,
66,
99,
142,
217,
223,
121,
102,
232,
107,
114,
17,
78,
130,
2,
89,
184,
54,
9,
46,
30,
171,
19,
198,
47,
31,
24,
177,
137,
145,
38,
22,
76,
37,
45,
97,
234,
184,
55,
137,
219,
12,
60,
254,
125,
43,
208,
104,
236,
159,
219,
31,
74,
2,
193,
247,
123,
182,
202,
128,
221,
56,
244,
39,
24,
140,
255,
80,
190,
17,
229,
184,
143,
165,
238,
207,
41,
76,
158,
135,
223,
248,
149,
240,
121,
101,
143,
24,
72,
209,
132,
111,
238,
95,
186,
200,
43,
235,
177,
191,
141,
118,
171,
87,
188,
194,
160,
32,
26,
242,
234,
22,
136,
70,
225,
97,
46,
219,
251,
137,
31,
111,
240,
254,
185,
225,
206,
89,
124,
85,
197,
46,
218,
200,
223,
198,
235,
124,
212,
177,
77,
149,
164,
249,
187,
33,
175,
142,
29,
188,
181,
102,
44,
8,
190,
17,
138,
134,
128,
182,
79,
50,
139,
193,
233,
175,
145,
41,
216,
27,
154,
94,
126,
60,
118,
200,
239,
136,
125,
191,
73,
21,
103,
87,
120,
161,
108,
32,
222,
47,
82,
135,
27,
155,
89,
240,
189,
6,
67,
24,
140,
178,
72,
111,
42,
91,
56,
39,
220,
239,
51,
80,
122,
114,
41,
184,
75,
198,
34,
207,
237,
72,
28,
104,
40,
252,
23,
31,
142,
97,
13,
247,
191,
213,
6,
128,
25,
110,
211,
171,
71,
218,
216,
220,
225,
71,
194,
52,
208,
243,
201,
67,
118,
125,
247,
228,
179,
201,
252,
147,
21,
84,
230,
123,
36,
224,
237,
12,
130,
9,
157,
68,
116,
189,
150,
51,
210,
32,
140,
219,
227,
148,
135,
172,
69,
26,
185,
11,
128,
174,
178,
124,
38,
51,
168,
148,
23,
135,
163,
227,
177,
160,
79,
117,
32,
20,
68,
2,
134,
137,
94,
234,
183,
61,
85,
157,
17,
179,
107,
58,
212,
7,
96,
77,
114,
154,
122,
165,
67,
46,
113,
210,
229,
199,
1,
154,
19,
115,
10,
237,
181,
238,
16,
5,
132,
90,
27,
114,
34,
212,
37,
213,
231,
96,
46,
162,
65,
253,
52,
74,
112,
73,
63,
61,
214,
139,
159,
29,
204,
63,
148,
106,
106,
162,
142,
130,
91,
22,
133,
245,
253,
152,
187,
82,
56,
44,
176,
37,
158,
177,
170,
205,
175,
5,
161,
186,
9,
236,
209,
242,
255,
88,
218,
133,
89,
197,
192,
109,
104,
113,
203,
26,
206,
255,
245,
189,
11,
75,
254,
202,
173,
214,
228,
34,
156,
98,
239,
85,
58,
69,
3,
195,
171,
241,
8,
180,
13,
108,
18,
92,
60,
216,
25,
43,
154,
86,
39,
140,
95,
226,
44,
251,
249,
127,
54,
19,
200,
203,
61,
100,
110,
34,
77,
44,
152,
150,
70,
91,
62,
11,
92,
179,
15,
191,
87,
196,
169,
49,
105,
99,
108,
133,
98,
20,
202,
24,
120,
252,
251,
172,
115,
139,
93,
23,
166,
160,
3,
163,
173,
215,
165,
62,
183,
63,
148,
138,
188,
72,
50,
4,
130,
239,
247,
176,
137,
152,
81,
45,
147,
112,
96,
153,
152,
7,
198,
112,
232,
79,
48,
196,
227,
56,
150,
89,
249,
208,
167,
237,
242,
167,
1,
99,
204,
0,
196,
215,
199,
119,
98,
74,
221,
159,
83,
254,
214,
232,
245,
217,
58,
126,
100,
109,
49,
9,
194,
240,
43,
225,
243,
68,
32,
150,
85,
202,
30,
49,
144,
126,
21,
70,
54,
227,
15,
174,
7,
87,
4,
217,
161,
190,
116,
145,
87,
10,
127,
230,
241,
151,
101,
14,
192,
35,
110,
121,
102,
173,
80,
222,
163,
25,
91,
169,
5,
132,
65,
65,
52,
48,
74,
54,
146,
0,
0,
0,
0,
158,
0,
170,
204,
125,
7,
37,
66,
227,
7,
143,
142,
250,
14,
74,
132,
100,
14,
224,
72,
135,
9,
111,
198,
25,
9,
197,
10,
181,
27,
229,
211,
43,
27,
79,
31,
200,
28,
192,
145,
86,
28,
106,
93,
79,
21,
175,
87,
209,
21,
5,
155,
50,
18,
138,
21,
172,
18,
32,
217,
43,
49,
187,
124,
181,
49,
17,
176,
86,
54,
158,
62,
200,
54,
52,
242,
209,
63,
241,
248,
79,
63,
91,
52,
172,
56,
212,
186,
50,
56,
126,
118,
158,
42,
94,
175,
0,
42,
244,
99,
227,
45,
123,
237,
125,
45,
209,
33,
100,
36,
20,
43,
250,
36,
190,
231,
25,
35,
49,
105,
135,
35,
155,
165,
86,
98,
118,
249,
200,
98,
220,
53,
43,
101,
83,
187,
181,
101,
249,
119,
172,
108,
60,
125,
50,
108,
150,
177,
209,
107,
25,
63,
79,
107,
179,
243,
227,
121,
147,
42,
125,
121,
57,
230,
158,
126,
182,
104,
0,
126,
28,
164,
25,
119,
217,
174,
135,
119,
115,
98,
100,
112,
252,
236,
250,
112,
86,
32,
125,
83,
205,
133,
227,
83,
103,
73,
0,
84,
232,
199,
158,
84,
66,
11,
135,
93,
135,
1,
25,
93,
45,
205,
250,
90,
162,
67,
100,
90,
8,
143,
200,
72,
40,
86,
86,
72,
130,
154,
181,
79,
13,
20,
43,
79,
167,
216,
50,
70,
98,
210,
172,
70,
200,
30,
79,
65,
71,
144,
209,
65,
237,
92,
237,
194,
157,
41,
115,
194,
55,
229,
144,
197,
184,
107,
14,
197,
18,
167,
23,
204,
215,
173,
137,
204,
125,
97,
106,
203,
242,
239,
244,
203,
88,
35,
88,
217,
120,
250,
198,
217,
210,
54,
37,
222,
93,
184,
187,
222,
247,
116,
162,
215,
50,
126,
60,
215,
152,
178,
223,
208,
23,
60,
65,
208,
189,
240,
198,
243,
38,
85,
88,
243,
140,
153,
187,
244,
3,
23,
37,
244,
169,
219,
60,
253,
108,
209,
162,
253,
198,
29,
65,
250,
73,
147,
223,
250,
227,
95,
115,
232,
195,
134,
237,
232,
105,
74,
14,
239,
230,
196,
144,
239,
76,
8,
137,
230,
137,
2,
23,
230,
35,
206,
244,
225,
172,
64,
106,
225,
6,
140,
187,
160,
235,
208,
37,
160,
65,
28,
198,
167,
206,
146,
88,
167,
100,
94,
65,
174,
161,
84,
223,
174,
11,
152,
60,
169,
132,
22,
162,
169,
46,
218,
14,
187,
14,
3,
144,
187,
164,
207,
115,
188,
43,
65,
237,
188,
129,
141,
244,
181,
68,
135,
106,
181,
238,
75,
137,
178,
97,
197,
23,
178,
203,
9,
144,
145,
80,
172,
14,
145,
250,
96,
237,
150,
117,
238,
115,
150,
223,
34,
106,
159,
26,
40,
244,
159,
176,
228,
23,
152,
63,
106,
137,
152,
149,
166,
37,
138,
181,
127,
187,
138,
31,
179,
88,
141,
144,
61,
198,
141,
58,
241,
223,
132,
255,
251,
65,
132,
85,
55,
162,
131,
218,
185,
60,
131,
112,
117,
218,
133,
59,
83,
68,
133,
145,
159,
167,
130,
30,
17,
57,
130,
180,
221,
32,
139,
113,
215,
190,
139,
219,
27,
93,
140,
84,
149,
195,
140,
254,
89,
111,
158,
222,
128,
241,
158,
116,
76,
18,
153,
251,
194,
140,
153,
81,
14,
149,
144,
148,
4,
11,
144,
62,
200,
232,
151,
177,
70,
118,
151,
27,
138,
241,
180,
128,
47,
111,
180,
42,
227,
140,
179,
165,
109,
18,
179,
15,
161,
11,
186,
202,
171,
149,
186,
96,
103,
118,
189,
239,
233,
232,
189,
69,
37,
68,
175,
101,
252,
218,
175,
207,
48,
57,
168,
64,
190,
167,
168,
234,
114,
190,
161,
47,
120,
32,
161,
133,
180,
195,
166,
10,
58,
93,
166,
160,
246,
140,
231,
77,
170,
18,
231,
231,
102,
241,
224,
104,
232,
111,
224,
194,
36,
118,
233,
7,
46,
232,
233,
173,
226,
11,
238,
34,
108,
149,
238,
136,
160,
57,
252,
168,
121,
167,
252,
2,
181,
68,
251,
141,
59,
218,
251,
39,
247,
195,
242,
226,
253,
93,
242,
72,
49,
190,
245,
199,
191,
32,
245,
109,
115,
167,
214,
246,
214,
57,
214,
92,
26,
218,
209,
211,
148,
68,
209,
121,
88,
93,
216,
188,
82,
195,
216,
22,
158,
32,
223,
153,
16,
190,
223,
51,
220,
18,
205,
19,
5,
140,
205,
185,
201,
111,
202,
54,
71,
241,
202,
156,
139,
232,
195,
89,
129,
118,
195,
243,
77,
149,
196,
124,
195,
11,
196,
214,
15,
55,
71,
166,
122,
169,
71,
12,
182,
74,
64,
131,
56,
212,
64,
41,
244,
205,
73,
236,
254,
83,
73,
70,
50,
176,
78,
201,
188,
46,
78,
99,
112,
130,
92,
67,
169,
28,
92,
233,
101,
255,
91,
102,
235,
97,
91,
204,
39,
120,
82,
9,
45,
230,
82,
163,
225,
5,
85,
44,
111,
155,
85,
134,
163,
28,
118,
29,
6,
130,
118,
183,
202,
97,
113,
56,
68,
255,
113,
146,
136,
230,
120,
87,
130,
120,
120,
253,
78,
155,
127,
114,
192,
5,
127,
216,
12,
169,
109,
248,
213,
55,
109,
82,
25,
212,
106,
221,
151,
74,
106,
119,
91,
83,
99,
178,
81,
205,
99,
24,
157,
46,
100,
151,
19,
176,
100,
61,
223,
97,
37,
208,
131,
255,
37,
122,
79,
28,
34,
245,
193,
130,
34,
95,
13,
155,
43,
154,
7,
5,
43,
48,
203,
230,
44,
191,
69,
120,
44,
21,
137,
212,
62,
53,
80,
74,
62,
159,
156,
169,
57,
16,
18,
55,
57,
186,
222,
46,
48,
127,
212,
176,
48,
213,
24,
83,
55,
90,
150,
205,
55,
240,
90,
74,
20,
107,
255,
212,
20,
193,
51,
55,
19,
78,
189,
169,
19,
228,
113,
176,
26,
33,
123,
46,
26,
139,
183,
205,
29,
4,
57,
83,
29,
174,
245,
255,
15,
142,
44,
97,
15,
36,
224,
130,
8,
171,
110,
28,
8,
1,
162,
5,
1,
196,
168,
155,
1,
110,
100,
120,
6,
225,
234,
230,
6,
75,
38,
0,
0,
0,
0,
67,
20,
123,
23,
134,
40,
246,
46,
197,
60,
141,
57,
12,
81,
236,
93,
79,
69,
151,
74,
138,
121,
26,
115,
201,
109,
97,
100,
24,
162,
216,
187,
91,
182,
163,
172,
158,
138,
46,
149,
221,
158,
85,
130,
20,
243,
52,
230,
87,
231,
79,
241,
146,
219,
194,
200,
209,
207,
185,
223,
113,
66,
192,
172,
50,
86,
187,
187,
247,
106,
54,
130,
180,
126,
77,
149,
125,
19,
44,
241,
62,
7,
87,
230,
251,
59,
218,
223,
184,
47,
161,
200,
105,
224,
24,
23,
42,
244,
99,
0,
239,
200,
238,
57,
172,
220,
149,
46,
101,
177,
244,
74,
38,
165,
143,
93,
227,
153,
2,
100,
160,
141,
121,
115,
163,
130,
241,
130,
224,
150,
138,
149,
37,
170,
7,
172,
102,
190,
124,
187,
175,
211,
29,
223,
236,
199,
102,
200,
41,
251,
235,
241,
106,
239,
144,
230,
187,
32,
41,
57,
248,
52,
82,
46,
61,
8,
223,
23,
126,
28,
164,
0,
183,
113,
197,
100,
244,
101,
190,
115,
49,
89,
51,
74,
114,
77,
72,
93,
210,
192,
49,
46,
145,
212,
74,
57,
84,
232,
199,
0,
23,
252,
188,
23,
222,
145,
221,
115,
157,
133,
166,
100,
88,
185,
43,
93,
27,
173,
80,
74,
202,
98,
233,
149,
137,
118,
146,
130,
76,
74,
31,
187,
15,
94,
100,
172,
198,
51,
5,
200,
133,
39,
126,
223,
64,
27,
243,
230,
3,
15,
136,
241,
7,
3,
146,
222,
68,
23,
233,
201,
129,
43,
100,
240,
194,
63,
31,
231,
11,
82,
126,
131,
72,
70,
5,
148,
141,
122,
136,
173,
206,
110,
243,
186,
31,
161,
74,
101,
92,
181,
49,
114,
153,
137,
188,
75,
218,
157,
199,
92,
19,
240,
166,
56,
80,
228,
221,
47,
149,
216,
80,
22,
214,
204,
43,
1,
118,
65,
82,
114,
53,
85,
41,
101,
240,
105,
164,
92,
179,
125,
223,
75,
122,
16,
190,
47,
57,
4,
197,
56,
252,
56,
72,
1,
191,
44,
51,
22,
110,
227,
138,
201,
45,
247,
241,
222,
232,
203,
124,
231,
171,
223,
7,
240,
98,
178,
102,
148,
33,
166,
29,
131,
228,
154,
144,
186,
167,
142,
235,
173,
164,
129,
99,
92,
231,
149,
24,
75,
34,
169,
149,
114,
97,
189,
238,
101,
168,
208,
143,
1,
235,
196,
244,
22,
46,
248,
121,
47,
109,
236,
2,
56,
188,
35,
187,
231,
255,
55,
192,
240,
58,
11,
77,
201,
121,
31,
54,
222,
176,
114,
87,
186,
243,
102,
44,
173,
54,
90,
161,
148,
117,
78,
218,
131,
213,
195,
163,
240,
150,
215,
216,
231,
83,
235,
85,
222,
16,
255,
46,
201,
217,
146,
79,
173,
154,
134,
52,
186,
95,
186,
185,
131,
28,
174,
194,
148,
205,
97,
123,
75,
142,
117,
0,
92,
75,
73,
141,
101,
8,
93,
246,
114,
193,
48,
151,
22,
130,
36,
236,
1,
71,
24,
97,
56,
4,
12,
26,
47,
79,
0,
85,
102,
12,
20,
46,
113,
201,
40,
163,
72,
138,
60,
216,
95,
67,
81,
185,
59,
0,
69,
194,
44,
197,
121,
79,
21,
134,
109,
52,
2,
87,
162,
141,
221,
20,
182,
246,
202,
209,
138,
123,
243,
146,
158,
0,
228,
91,
243,
97,
128,
24,
231,
26,
151,
221,
219,
151,
174,
158,
207,
236,
185,
62,
66,
149,
202,
125,
86,
238,
221,
184,
106,
99,
228,
251,
126,
24,
243,
50,
19,
121,
151,
113,
7,
2,
128,
180,
59,
143,
185,
247,
47,
244,
174,
38,
224,
77,
113,
101,
244,
54,
102,
160,
200,
187,
95,
227,
220,
192,
72,
42,
177,
161,
44,
105,
165,
218,
59,
172,
153,
87,
2,
239,
141,
44,
21,
236,
130,
164,
228,
175,
150,
223,
243,
106,
170,
82,
202,
41,
190,
41,
221,
224,
211,
72,
185,
163,
199,
51,
174,
102,
251,
190,
151,
37,
239,
197,
128,
244,
32,
124,
95,
183,
52,
7,
72,
114,
8,
138,
113,
49,
28,
241,
102,
248,
113,
144,
2,
187,
101,
235,
21,
126,
89,
102,
44,
61,
77,
29,
59,
157,
192,
100,
72,
222,
212,
31,
95,
27,
232,
146,
102,
88,
252,
233,
113,
145,
145,
136,
21,
210,
133,
243,
2,
23,
185,
126,
59,
84,
173,
5,
44,
133,
98,
188,
243,
198,
118,
199,
228,
3,
74,
74,
221,
64,
94,
49,
202,
137,
51,
80,
174,
202,
39,
43,
185,
15,
27,
166,
128,
76,
15,
221,
151,
72,
3,
199,
184,
11,
23,
188,
175,
206,
43,
49,
150,
141,
63,
74,
129,
68,
82,
43,
229,
7,
70,
80,
242,
194,
122,
221,
203,
129,
110,
166,
220,
80,
161,
31,
3,
19,
181,
100,
20,
214,
137,
233,
45,
149,
157,
146,
58,
92,
240,
243,
94,
31,
228,
136,
73,
218,
216,
5,
112,
153,
204,
126,
103,
57,
65,
7,
20,
122,
85,
124,
3,
191,
105,
241,
58,
252,
125,
138,
45,
53,
16,
235,
73,
118,
4,
144,
94,
179,
56,
29,
103,
240,
44,
102,
112,
33,
227,
223,
175,
98,
247,
164,
184,
167,
203,
41,
129,
228,
223,
82,
150,
45,
178,
51,
242,
110,
166,
72,
229,
171,
154,
197,
220,
232,
142,
190,
203,
235,
129,
54,
58,
168,
149,
77,
45,
109,
169,
192,
20,
46,
189,
187,
3,
231,
208,
218,
103,
164,
196,
161,
112,
97,
248,
44,
73,
34,
236,
87,
94,
243,
35,
238,
129,
176,
55,
149,
150,
117,
11,
24,
175,
54,
31,
99,
184,
255,
114,
2,
220,
188,
102,
121,
203,
121,
90,
244,
242,
58,
78,
143,
229,
154,
195,
246,
150,
217,
215,
141,
129,
28,
235,
0,
184,
95,
255,
123,
175,
150,
146,
26,
203,
213,
134,
97,
220,
16,
186,
236,
229,
83,
174,
151,
242,
130,
97,
46,
45,
193,
117,
85,
58,
4,
73,
216,
3,
71,
93,
163,
20,
142,
48,
194,
112,
205,
36,
185,
103,
8,
24,
52,
94,
75,
12,
79,
73,
0,
0,
0,
0,
62,
107,
194,
239,
61,
208,
245,
4,
3,
187,
55,
235,
122,
160,
235,
9,
68,
203,
41,
230,
71,
112,
30,
13,
121,
27,
220,
226,
244,
64,
215,
19,
202,
43,
21,
252,
201,
144,
34,
23,
247,
251,
224,
248,
142,
224,
60,
26,
176,
139,
254,
245,
179,
48,
201,
30,
141,
91,
11,
241,
232,
129,
174,
39,
214,
234,
108,
200,
213,
81,
91,
35,
235,
58,
153,
204,
146,
33,
69,
46,
172,
74,
135,
193,
175,
241,
176,
42,
145,
154,
114,
197,
28,
193,
121,
52,
34,
170,
187,
219,
33,
17,
140,
48,
31,
122,
78,
223,
102,
97,
146,
61,
88,
10,
80,
210,
91,
177,
103,
57,
101,
218,
165,
214,
208,
3,
93,
79,
238,
104,
159,
160,
237,
211,
168,
75,
211,
184,
106,
164,
170,
163,
182,
70,
148,
200,
116,
169,
151,
115,
67,
66,
169,
24,
129,
173,
36,
67,
138,
92,
26,
40,
72,
179,
25,
147,
127,
88,
39,
248,
189,
183,
94,
227,
97,
85,
96,
136,
163,
186,
99,
51,
148,
81,
93,
88,
86,
190,
56,
130,
243,
104,
6,
233,
49,
135,
5,
82,
6,
108,
59,
57,
196,
131,
66,
34,
24,
97,
124,
73,
218,
142,
127,
242,
237,
101,
65,
153,
47,
138,
204,
194,
36,
123,
242,
169,
230,
148,
241,
18,
209,
127,
207,
121,
19,
144,
182,
98,
207,
114,
136,
9,
13,
157,
139,
178,
58,
118,
181,
217,
248,
153,
160,
7,
186,
158,
158,
108,
120,
113,
157,
215,
79,
154,
163,
188,
141,
117,
218,
167,
81,
151,
228,
204,
147,
120,
231,
119,
164,
147,
217,
28,
102,
124,
84,
71,
109,
141,
106,
44,
175,
98,
105,
151,
152,
137,
87,
252,
90,
102,
46,
231,
134,
132,
16,
140,
68,
107,
19,
55,
115,
128,
45,
92,
177,
111,
72,
134,
20,
185,
118,
237,
214,
86,
117,
86,
225,
189,
75,
61,
35,
82,
50,
38,
255,
176,
12,
77,
61,
95,
15,
246,
10,
180,
49,
157,
200,
91,
188,
198,
195,
170,
130,
173,
1,
69,
129,
22,
54,
174,
191,
125,
244,
65,
198,
102,
40,
163,
248,
13,
234,
76,
251,
182,
221,
167,
197,
221,
31,
72,
112,
4,
231,
209,
78,
111,
37,
62,
77,
212,
18,
213,
115,
191,
208,
58,
10,
164,
12,
216,
52,
207,
206,
55,
55,
116,
249,
220,
9,
31,
59,
51,
132,
68,
48,
194,
186,
47,
242,
45,
185,
148,
197,
198,
135,
255,
7,
41,
254,
228,
219,
203,
192,
143,
25,
36,
195,
52,
46,
207,
253,
95,
236,
32,
152,
133,
73,
246,
166,
238,
139,
25,
165,
85,
188,
242,
155,
62,
126,
29,
226,
37,
162,
255,
220,
78,
96,
16,
223,
245,
87,
251,
225,
158,
149,
20,
108,
197,
158,
229,
82,
174,
92,
10,
81,
21,
107,
225,
111,
126,
169,
14,
22,
101,
117,
236,
40,
14,
183,
3,
43,
181,
128,
232,
21,
222,
66,
7,
1,
9,
5,
230,
63,
98,
199,
9,
60,
217,
240,
226,
2,
178,
50,
13,
123,
169,
238,
239,
69,
194,
44,
0,
70,
121,
27,
235,
120,
18,
217,
4,
245,
73,
210,
245,
203,
34,
16,
26,
200,
153,
39,
241,
246,
242,
229,
30,
143,
233,
57,
252,
177,
130,
251,
19,
178,
57,
204,
248,
140,
82,
14,
23,
233,
136,
171,
193,
215,
227,
105,
46,
212,
88,
94,
197,
234,
51,
156,
42,
147,
40,
64,
200,
173,
67,
130,
39,
174,
248,
181,
204,
144,
147,
119,
35,
29,
200,
124,
210,
35,
163,
190,
61,
32,
24,
137,
214,
30,
115,
75,
57,
103,
104,
151,
219,
89,
3,
85,
52,
90,
184,
98,
223,
100,
211,
160,
48,
209,
10,
88,
169,
239,
97,
154,
70,
236,
218,
173,
173,
210,
177,
111,
66,
171,
170,
179,
160,
149,
193,
113,
79,
150,
122,
70,
164,
168,
17,
132,
75,
37,
74,
143,
186,
27,
33,
77,
85,
24,
154,
122,
190,
38,
241,
184,
81,
95,
234,
100,
179,
97,
129,
166,
92,
98,
58,
145,
183,
92,
81,
83,
88,
57,
139,
246,
142,
7,
224,
52,
97,
4,
91,
3,
138,
58,
48,
193,
101,
67,
43,
29,
135,
125,
64,
223,
104,
126,
251,
232,
131,
64,
144,
42,
108,
205,
203,
33,
157,
243,
160,
227,
114,
240,
27,
212,
153,
206,
112,
22,
118,
183,
107,
202,
148,
137,
0,
8,
123,
138,
187,
63,
144,
180,
208,
253,
127,
161,
14,
191,
120,
159,
101,
125,
151,
156,
222,
74,
124,
162,
181,
136,
147,
219,
174,
84,
113,
229,
197,
150,
158,
230,
126,
161,
117,
216,
21,
99,
154,
85,
78,
104,
107,
107,
37,
170,
132,
104,
158,
157,
111,
86,
245,
95,
128,
47,
238,
131,
98,
17,
133,
65,
141,
18,
62,
118,
102,
44,
85,
180,
137,
73,
143,
17,
95,
119,
228,
211,
176,
116,
95,
228,
91,
74,
52,
38,
180,
51,
47,
250,
86,
13,
68,
56,
185,
14,
255,
15,
82,
48,
148,
205,
189,
189,
207,
198,
76,
131,
164,
4,
163,
128,
31,
51,
72,
190,
116,
241,
167,
199,
111,
45,
69,
249,
4,
239,
170,
250,
191,
216,
65,
196,
212,
26,
174,
113,
13,
226,
55,
79,
102,
32,
216,
76,
221,
23,
51,
114,
182,
213,
220,
11,
173,
9,
62,
53,
198,
203,
209,
54,
125,
252,
58,
8,
22,
62,
213,
133,
77,
53,
36,
187,
38,
247,
203,
184,
157,
192,
32,
134,
246,
2,
207,
255,
237,
222,
45,
193,
134,
28,
194,
194,
61,
43,
41,
252,
86,
233,
198,
153,
140,
76,
16,
167,
231,
142,
255,
164,
92,
185,
20,
154,
55,
123,
251,
227,
44,
167,
25,
221,
71,
101,
246,
222,
252,
82,
29,
224,
151,
144,
242,
109,
204,
155,
3,
83,
167,
89,
236,
80,
28,
110,
7,
110,
119,
172,
232,
23,
108,
112,
10,
41,
7,
178,
229,
42,
188,
133,
14,
20,
215,
71,
225,
0,
0,
0,
0,
192,
223,
142,
193,
193,
185,
108,
88,
1,
102,
226,
153,
130,
115,
217,
176,
66,
172,
87,
113,
67,
202,
181,
232,
131,
21,
59,
41,
69,
225,
195,
186,
133,
62,
77,
123,
132,
88,
175,
226,
68,
135,
33,
35,
199,
146,
26,
10,
7,
77,
148,
203,
6,
43,
118,
82,
198,
244,
248,
147,
203,
196,
246,
174,
11,
27,
120,
111,
10,
125,
154,
246,
202,
162,
20,
55,
73,
183,
47,
30,
137,
104,
161,
223,
136,
14,
67,
70,
72,
209,
205,
135,
142,
37,
53,
20,
78,
250,
187,
213,
79,
156,
89,
76,
143,
67,
215,
141,
12,
86,
236,
164,
204,
137,
98,
101,
205,
239,
128,
252,
13,
48,
14,
61,
215,
143,
156,
134,
23,
80,
18,
71,
22,
54,
240,
222,
214,
233,
126,
31,
85,
252,
69,
54,
149,
35,
203,
247,
148,
69,
41,
110,
84,
154,
167,
175,
146,
110,
95,
60,
82,
177,
209,
253,
83,
215,
51,
100,
147,
8,
189,
165,
16,
29,
134,
140,
208,
194,
8,
77,
209,
164,
234,
212,
17,
123,
100,
21,
28,
75,
106,
40,
220,
148,
228,
233,
221,
242,
6,
112,
29,
45,
136,
177,
158,
56,
179,
152,
94,
231,
61,
89,
95,
129,
223,
192,
159,
94,
81,
1,
89,
170,
169,
146,
153,
117,
39,
83,
152,
19,
197,
202,
88,
204,
75,
11,
219,
217,
112,
34,
27,
6,
254,
227,
26,
96,
28,
122,
218,
191,
146,
187,
239,
25,
72,
214,
47,
198,
198,
23,
46,
160,
36,
142,
238,
127,
170,
79,
109,
106,
145,
102,
173,
181,
31,
167,
172,
211,
253,
62,
108,
12,
115,
255,
170,
248,
139,
108,
106,
39,
5,
173,
107,
65,
231,
52,
171,
158,
105,
245,
40,
139,
82,
220,
232,
84,
220,
29,
233,
50,
62,
132,
41,
237,
176,
69,
36,
221,
190,
120,
228,
2,
48,
185,
229,
100,
210,
32,
37,
187,
92,
225,
166,
174,
103,
200,
102,
113,
233,
9,
103,
23,
11,
144,
167,
200,
133,
81,
97,
60,
125,
194,
161,
227,
243,
3,
160,
133,
17,
154,
96,
90,
159,
91,
227,
79,
164,
114,
35,
144,
42,
179,
34,
246,
200,
42,
226,
41,
70,
235,
56,
150,
212,
80,
248,
73,
90,
145,
249,
47,
184,
8,
57,
240,
54,
201,
186,
229,
13,
224,
122,
58,
131,
33,
123,
92,
97,
184,
187,
131,
239,
121,
125,
119,
23,
234,
189,
168,
153,
43,
188,
206,
123,
178,
124,
17,
245,
115,
255,
4,
206,
90,
63,
219,
64,
155,
62,
189,
162,
2,
254,
98,
44,
195,
243,
82,
34,
254,
51,
141,
172,
63,
50,
235,
78,
166,
242,
52,
192,
103,
113,
33,
251,
78,
177,
254,
117,
143,
176,
152,
151,
22,
112,
71,
25,
215,
182,
179,
225,
68,
118,
108,
111,
133,
119,
10,
141,
28,
183,
213,
3,
221,
52,
192,
56,
244,
244,
31,
182,
53,
245,
121,
84,
172,
53,
166,
218,
109,
159,
53,
225,
119,
95,
234,
111,
182,
94,
140,
141,
47,
158,
83,
3,
238,
29,
70,
56,
199,
221,
153,
182,
6,
220,
255,
84,
159,
28,
32,
218,
94,
218,
212,
34,
205,
26,
11,
172,
12,
27,
109,
78,
149,
219,
178,
192,
84,
88,
167,
251,
125,
152,
120,
117,
188,
153,
30,
151,
37,
89,
193,
25,
228,
84,
241,
23,
217,
148,
46,
153,
24,
149,
72,
123,
129,
85,
151,
245,
64,
214,
130,
206,
105,
22,
93,
64,
168,
23,
59,
162,
49,
215,
228,
44,
240,
17,
16,
212,
99,
209,
207,
90,
162,
208,
169,
184,
59,
16,
118,
54,
250,
147,
99,
13,
211,
83,
188,
131,
18,
82,
218,
97,
139,
146,
5,
239,
74,
72,
186,
125,
241,
136,
101,
243,
48,
137,
3,
17,
169,
73,
220,
159,
104,
202,
201,
164,
65,
10,
22,
42,
128,
11,
112,
200,
25,
203,
175,
70,
216,
13,
91,
190,
75,
205,
132,
48,
138,
204,
226,
210,
19,
12,
61,
92,
210,
143,
40,
103,
251,
79,
247,
233,
58,
78,
145,
11,
163,
142,
78,
133,
98,
131,
126,
139,
95,
67,
161,
5,
158,
66,
199,
231,
7,
130,
24,
105,
198,
1,
13,
82,
239,
193,
210,
220,
46,
192,
180,
62,
183,
0,
107,
176,
118,
198,
159,
72,
229,
6,
64,
198,
36,
7,
38,
36,
189,
199,
249,
170,
124,
68,
236,
145,
85,
132,
51,
31,
148,
133,
85,
253,
13,
69,
138,
115,
204,
112,
44,
169,
161,
176,
243,
39,
96,
177,
149,
197,
249,
113,
74,
75,
56,
242,
95,
112,
17,
50,
128,
254,
208,
51,
230,
28,
73,
243,
57,
146,
136,
53,
205,
106,
27,
245,
18,
228,
218,
244,
116,
6,
67,
52,
171,
136,
130,
183,
190,
179,
171,
119,
97,
61,
106,
118,
7,
223,
243,
182,
216,
81,
50,
187,
232,
95,
15,
123,
55,
209,
206,
122,
81,
51,
87,
186,
142,
189,
150,
57,
155,
134,
191,
249,
68,
8,
126,
248,
34,
234,
231,
56,
253,
100,
38,
254,
9,
156,
181,
62,
214,
18,
116,
63,
176,
240,
237,
255,
111,
126,
44,
124,
122,
69,
5,
188,
165,
203,
196,
189,
195,
41,
93,
125,
28,
167,
156,
167,
163,
53,
39,
103,
124,
187,
230,
102,
26,
89,
127,
166,
197,
215,
190,
37,
208,
236,
151,
229,
15,
98,
86,
228,
105,
128,
207,
36,
182,
14,
14,
226,
66,
246,
157,
34,
157,
120,
92,
35,
251,
154,
197,
227,
36,
20,
4,
96,
49,
47,
45,
160,
238,
161,
236,
161,
136,
67,
117,
97,
87,
205,
180,
108,
103,
195,
137,
172,
184,
77,
72,
173,
222,
175,
209,
109,
1,
33,
16,
238,
20,
26,
57,
46,
203,
148,
248,
47,
173,
118,
97,
239,
114,
248,
160,
41,
134,
0,
51,
233,
89,
142,
242,
232,
63,
108,
107,
40,
224,
226,
170,
171,
245,
217,
131,
107,
42,
87,
66,
106,
76,
181,
219,
170,
147,
59,
26,
0,
0,
0,
0,
111,
76,
165,
155,
159,
158,
59,
236,
240,
210,
158,
119,
127,
59,
6,
3,
16,
119,
163,
152,
224,
165,
61,
239,
143,
233,
152,
116,
254,
118,
12,
6,
145,
58,
169,
157,
97,
232,
55,
234,
14,
164,
146,
113,
129,
77,
10,
5,
238,
1,
175,
158,
30,
211,
49,
233,
113,
159,
148,
114,
252,
237,
24,
12,
147,
161,
189,
151,
99,
115,
35,
224,
12,
63,
134,
123,
131,
214,
30,
15,
236,
154,
187,
148,
28,
72,
37,
227,
115,
4,
128,
120,
2,
155,
20,
10,
109,
215,
177,
145,
157,
5,
47,
230,
242,
73,
138,
125,
125,
160,
18,
9,
18,
236,
183,
146,
226,
62,
41,
229,
141,
114,
140,
126,
248,
219,
49,
24,
151,
151,
148,
131,
103,
69,
10,
244,
8,
9,
175,
111,
135,
224,
55,
27,
232,
172,
146,
128,
24,
126,
12,
247,
119,
50,
169,
108,
6,
173,
61,
30,
105,
225,
152,
133,
153,
51,
6,
242,
246,
127,
163,
105,
121,
150,
59,
29,
22,
218,
158,
134,
230,
8,
0,
241,
137,
68,
165,
106,
4,
54,
41,
20,
107,
122,
140,
143,
155,
168,
18,
248,
244,
228,
183,
99,
123,
13,
47,
23,
20,
65,
138,
140,
228,
147,
20,
251,
139,
223,
177,
96,
250,
64,
37,
18,
149,
12,
128,
137,
101,
222,
30,
254,
10,
146,
187,
101,
133,
123,
35,
17,
234,
55,
134,
138,
26,
229,
24,
253,
117,
169,
189,
102,
240,
183,
99,
48,
159,
251,
198,
171,
111,
41,
88,
220,
0,
101,
253,
71,
143,
140,
101,
51,
224,
192,
192,
168,
16,
18,
94,
223,
127,
94,
251,
68,
14,
193,
111,
54,
97,
141,
202,
173,
145,
95,
84,
218,
254,
19,
241,
65,
113,
250,
105,
53,
30,
182,
204,
174,
238,
100,
82,
217,
129,
40,
247,
66,
12,
90,
123,
60,
99,
22,
222,
167,
147,
196,
64,
208,
252,
136,
229,
75,
115,
97,
125,
63,
28,
45,
216,
164,
236,
255,
70,
211,
131,
179,
227,
72,
242,
44,
119,
58,
157,
96,
210,
161,
109,
178,
76,
214,
2,
254,
233,
77,
141,
23,
113,
57,
226,
91,
212,
162,
18,
137,
74,
213,
125,
197,
239,
78,
8,
108,
82,
40,
103,
32,
247,
179,
151,
242,
105,
196,
248,
190,
204,
95,
119,
87,
84,
43,
24,
27,
241,
176,
232,
201,
111,
199,
135,
133,
202,
92,
246,
26,
94,
46,
153,
86,
251,
181,
105,
132,
101,
194,
6,
200,
192,
89,
137,
33,
88,
45,
230,
109,
253,
182,
22,
191,
99,
193,
121,
243,
198,
90,
244,
129,
74,
36,
155,
205,
239,
191,
107,
31,
113,
200,
4,
83,
212,
83,
139,
186,
76,
39,
228,
246,
233,
188,
20,
36,
119,
203,
123,
104,
210,
80,
10,
247,
70,
34,
101,
187,
227,
185,
149,
105,
125,
206,
250,
37,
216,
85,
117,
204,
64,
33,
26,
128,
229,
186,
234,
82,
123,
205,
133,
30,
222,
86,
224,
111,
199,
96,
143,
35,
98,
251,
127,
241,
252,
140,
16,
189,
89,
23,
159,
84,
193,
99,
240,
24,
100,
248,
0,
202,
250,
143,
111,
134,
95,
20,
30,
25,
203,
102,
113,
85,
110,
253,
129,
135,
240,
138,
238,
203,
85,
17,
97,
34,
205,
101,
14,
110,
104,
254,
254,
188,
246,
137,
145,
240,
83,
18,
28,
130,
223,
108,
115,
206,
122,
247,
131,
28,
228,
128,
236,
80,
65,
27,
99,
185,
217,
111,
12,
245,
124,
244,
252,
39,
226,
131,
147,
107,
71,
24,
226,
244,
211,
106,
141,
184,
118,
241,
125,
106,
232,
134,
18,
38,
77,
29,
157,
207,
213,
105,
242,
131,
112,
242,
2,
81,
238,
133,
109,
29,
75,
30,
24,
180,
246,
120,
119,
248,
83,
227,
135,
42,
205,
148,
232,
102,
104,
15,
103,
143,
240,
123,
8,
195,
85,
224,
248,
17,
203,
151,
151,
93,
110,
12,
230,
194,
250,
126,
137,
142,
95,
229,
121,
92,
193,
146,
22,
16,
100,
9,
153,
249,
252,
125,
246,
181,
89,
230,
6,
103,
199,
145,
105,
43,
98,
10,
228,
89,
238,
116,
139,
21,
75,
239,
123,
199,
213,
152,
20,
139,
112,
3,
155,
98,
232,
119,
244,
46,
77,
236,
4,
252,
211,
155,
107,
176,
118,
0,
26,
47,
226,
114,
117,
99,
71,
233,
133,
177,
217,
158,
234,
253,
124,
5,
101,
20,
228,
113,
10,
88,
65,
234,
250,
138,
223,
157,
149,
198,
122,
6,
16,
216,
164,
80,
127,
148,
1,
203,
143,
70,
159,
188,
224,
10,
58,
39,
111,
227,
162,
83,
0,
175,
7,
200,
240,
125,
153,
191,
159,
49,
60,
36,
238,
174,
168,
86,
129,
226,
13,
205,
113,
48,
147,
186,
30,
124,
54,
33,
145,
149,
174,
85,
254,
217,
11,
206,
14,
11,
149,
185,
97,
71,
48,
34,
236,
53,
188,
92,
131,
121,
25,
199,
115,
171,
135,
176,
28,
231,
34,
43,
147,
14,
186,
95,
252,
66,
31,
196,
12,
144,
129,
179,
99,
220,
36,
40,
18,
67,
176,
90,
125,
15,
21,
193,
141,
221,
139,
182,
226,
145,
46,
45,
109,
120,
182,
89,
2,
52,
19,
194,
242,
230,
141,
181,
157,
170,
40,
46,
232,
3,
149,
72,
135,
79,
48,
211,
119,
157,
174,
164,
24,
209,
11,
63,
151,
56,
147,
75,
248,
116,
54,
208,
8,
166,
168,
167,
103,
234,
13,
60,
22,
117,
153,
78,
121,
57,
60,
213,
137,
235,
162,
162,
230,
167,
7,
57,
105,
78,
159,
77,
6,
2,
58,
214,
246,
208,
164,
161,
153,
156,
1,
58,
20,
238,
141,
68,
123,
162,
40,
223,
139,
112,
182,
168,
228,
60,
19,
51,
107,
213,
139,
71,
4,
153,
46,
220,
244,
75,
176,
171,
155,
7,
21,
48,
234,
152,
129,
66,
133,
212,
36,
217,
117,
6,
186,
174,
26,
74,
31,
53,
149,
163,
135,
65,
250,
239,
34,
218,
10,
61,
188,
173,
101,
113,
25,
54,
0,
0,
0,
0,
133,
217,
150,
221,
75,
181,
92,
96,
206,
108,
202,
189,
150,
106,
185,
192,
19,
179,
47,
29,
221,
223,
229,
160,
88,
6,
115,
125,
109,
211,
3,
90,
232,
10,
149,
135,
38,
102,
95,
58,
163,
191,
201,
231,
251,
185,
186,
154,
126,
96,
44,
71,
176,
12,
230,
250,
53,
213,
112,
39,
218,
166,
7,
180,
95,
127,
145,
105,
145,
19,
91,
212,
20,
202,
205,
9,
76,
204,
190,
116,
201,
21,
40,
169,
7,
121,
226,
20,
130,
160,
116,
201,
183,
117,
4,
238,
50,
172,
146,
51,
252,
192,
88,
142,
121,
25,
206,
83,
33,
31,
189,
46,
164,
198,
43,
243,
106,
170,
225,
78,
239,
115,
119,
147,
245,
75,
126,
179,
112,
146,
232,
110,
190,
254,
34,
211,
59,
39,
180,
14,
99,
33,
199,
115,
230,
248,
81,
174,
40,
148,
155,
19,
173,
77,
13,
206,
152,
152,
125,
233,
29,
65,
235,
52,
211,
45,
33,
137,
86,
244,
183,
84,
14,
242,
196,
41,
139,
43,
82,
244,
69,
71,
152,
73,
192,
158,
14,
148,
47,
237,
121,
7,
170,
52,
239,
218,
100,
88,
37,
103,
225,
129,
179,
186,
185,
135,
192,
199,
60,
94,
86,
26,
242,
50,
156,
167,
119,
235,
10,
122,
66,
62,
122,
93,
199,
231,
236,
128,
9,
139,
38,
61,
140,
82,
176,
224,
212,
84,
195,
157,
81,
141,
85,
64,
159,
225,
159,
253,
26,
56,
9,
32,
171,
145,
141,
189,
46,
72,
27,
96,
224,
36,
209,
221,
101,
253,
71,
0,
61,
251,
52,
125,
184,
34,
162,
160,
118,
78,
104,
29,
243,
151,
254,
192,
198,
66,
142,
231,
67,
155,
24,
58,
141,
247,
210,
135,
8,
46,
68,
90,
80,
40,
55,
39,
213,
241,
161,
250,
27,
157,
107,
71,
158,
68,
253,
154,
113,
55,
138,
9,
244,
238,
28,
212,
58,
130,
214,
105,
191,
91,
64,
180,
231,
93,
51,
201,
98,
132,
165,
20,
172,
232,
111,
169,
41,
49,
249,
116,
28,
228,
137,
83,
153,
61,
31,
142,
87,
81,
213,
51,
210,
136,
67,
238,
138,
142,
48,
147,
15,
87,
166,
78,
193,
59,
108,
243,
68,
226,
250,
46,
94,
218,
243,
14,
219,
3,
101,
211,
21,
111,
175,
110,
144,
182,
57,
179,
200,
176,
74,
206,
77,
105,
220,
19,
131,
5,
22,
174,
6,
220,
128,
115,
51,
9,
240,
84,
182,
208,
102,
137,
120,
188,
172,
52,
253,
101,
58,
233,
165,
99,
73,
148,
32,
186,
223,
73,
238,
214,
21,
244,
107,
15,
131,
41,
132,
124,
244,
186,
1,
165,
98,
103,
207,
201,
168,
218,
74,
16,
62,
7,
18,
22,
77,
122,
151,
207,
219,
167,
89,
163,
17,
26,
220,
122,
135,
199,
233,
175,
247,
224,
108,
118,
97,
61,
162,
26,
171,
128,
39,
195,
61,
93,
127,
197,
78,
32,
250,
28,
216,
253,
52,
112,
18,
64,
177,
169,
132,
157,
23,
37,
106,
160,
146,
252,
252,
125,
92,
144,
54,
192,
217,
73,
160,
29,
129,
79,
211,
96,
4,
150,
69,
189,
202,
250,
143,
0,
79,
35,
25,
221,
122,
246,
105,
250,
255,
47,
255,
39,
49,
67,
53,
154,
180,
154,
163,
71,
236,
156,
208,
58,
105,
69,
70,
231,
167,
41,
140,
90,
34,
240,
26,
135,
205,
131,
109,
20,
72,
90,
251,
201,
134,
54,
49,
116,
3,
239,
167,
169,
91,
233,
212,
212,
222,
48,
66,
9,
16,
92,
136,
180,
149,
133,
30,
105,
160,
80,
110,
78,
37,
137,
248,
147,
235,
229,
50,
46,
110,
60,
164,
243,
54,
58,
215,
142,
179,
227,
65,
83,
125,
143,
139,
238,
248,
86,
29,
51,
226,
110,
20,
19,
103,
183,
130,
206,
169,
219,
72,
115,
44,
2,
222,
174,
116,
4,
173,
211,
241,
221,
59,
14,
63,
177,
241,
179,
186,
104,
103,
110,
143,
189,
23,
73,
10,
100,
129,
148,
196,
8,
75,
41,
65,
209,
221,
244,
25,
215,
174,
137,
156,
14,
56,
84,
82,
98,
242,
233,
215,
187,
100,
52,
56,
200,
19,
167,
189,
17,
133,
122,
115,
125,
79,
199,
246,
164,
217,
26,
174,
162,
170,
103,
43,
123,
60,
186,
229,
23,
246,
7,
96,
206,
96,
218,
85,
27,
16,
253,
208,
194,
134,
32,
30,
174,
76,
157,
155,
119,
218,
64,
195,
113,
169,
61,
70,
168,
63,
224,
136,
196,
245,
93,
13,
29,
99,
128,
188,
180,
231,
29,
57,
109,
113,
192,
247,
1,
187,
125,
114,
216,
45,
160,
42,
222,
94,
221,
175,
7,
200,
0,
97,
107,
2,
189,
228,
178,
148,
96,
209,
103,
228,
71,
84,
190,
114,
154,
154,
210,
184,
39,
31,
11,
46,
250,
71,
13,
93,
135,
194,
212,
203,
90,
12,
184,
1,
231,
137,
97,
151,
58,
102,
18,
224,
169,
227,
203,
118,
116,
45,
167,
188,
201,
168,
126,
42,
20,
240,
120,
89,
105,
117,
161,
207,
180,
187,
205,
5,
9,
62,
20,
147,
212,
11,
193,
227,
243,
142,
24,
117,
46,
64,
116,
191,
147,
197,
173,
41,
78,
157,
171,
90,
51,
24,
114,
204,
238,
214,
30,
6,
83,
83,
199,
144,
142,
73,
255,
153,
174,
204,
38,
15,
115,
2,
74,
197,
206,
135,
147,
83,
19,
223,
149,
32,
110,
90,
76,
182,
179,
148,
32,
124,
14,
17,
249,
234,
211,
36,
44,
154,
244,
161,
245,
12,
41,
111,
153,
198,
148,
234,
64,
80,
73,
178,
70,
35,
52,
55,
159,
181,
233,
249,
243,
127,
84,
124,
42,
233,
137,
147,
89,
158,
26,
22,
128,
8,
199,
216,
236,
194,
122,
93,
53,
84,
167,
5,
51,
39,
218,
128,
234,
177,
7,
78,
134,
123,
186,
203,
95,
237,
103,
254,
138,
157,
64,
123,
83,
11,
157,
181,
63,
193,
32,
48,
230,
87,
253,
104,
224,
36,
128,
237,
57,
178,
93,
35,
85,
120,
224,
166,
140,
238,
61,
0,
0,
0,
0,
118,
225,
15,
157,
173,
196,
110,
225,
219,
37,
97,
124,
27,
143,
172,
25,
109,
110,
163,
132,
182,
75,
194,
248,
192,
170,
205,
101,
54,
30,
89,
51,
64,
255,
86,
174,
155,
218,
55,
210,
237,
59,
56,
79,
45,
145,
245,
42,
91,
112,
250,
183,
128,
85,
155,
203,
246,
180,
148,
86,
108,
60,
178,
102,
26,
221,
189,
251,
193,
248,
220,
135,
183,
25,
211,
26,
119,
179,
30,
127,
1,
82,
17,
226,
218,
119,
112,
158,
172,
150,
127,
3,
90,
34,
235,
85,
44,
195,
228,
200,
247,
230,
133,
180,
129,
7,
138,
41,
65,
173,
71,
76,
55,
76,
72,
209,
236,
105,
41,
173,
154,
136,
38,
48,
216,
120,
100,
205,
174,
153,
107,
80,
117,
188,
10,
44,
3,
93,
5,
177,
195,
247,
200,
212,
181,
22,
199,
73,
110,
51,
166,
53,
24,
210,
169,
168,
238,
102,
61,
254,
152,
135,
50,
99,
67,
162,
83,
31,
53,
67,
92,
130,
245,
233,
145,
231,
131,
8,
158,
122,
88,
45,
255,
6,
46,
204,
240,
155,
180,
68,
214,
171,
194,
165,
217,
54,
25,
128,
184,
74,
111,
97,
183,
215,
175,
203,
122,
178,
217,
42,
117,
47,
2,
15,
20,
83,
116,
238,
27,
206,
130,
90,
143,
152,
244,
187,
128,
5,
47,
158,
225,
121,
89,
127,
238,
228,
153,
213,
35,
129,
239,
52,
44,
28,
52,
17,
77,
96,
66,
240,
66,
253,
241,
247,
185,
65,
135,
22,
182,
220,
92,
51,
215,
160,
42,
210,
216,
61,
234,
120,
21,
88,
156,
153,
26,
197,
71,
188,
123,
185,
49,
93,
116,
36,
199,
233,
224,
114,
177,
8,
239,
239,
106,
45,
142,
147,
28,
204,
129,
14,
220,
102,
76,
107,
170,
135,
67,
246,
113,
162,
34,
138,
7,
67,
45,
23,
157,
203,
11,
39,
235,
42,
4,
186,
48,
15,
101,
198,
70,
238,
106,
91,
134,
68,
167,
62,
240,
165,
168,
163,
43,
128,
201,
223,
93,
97,
198,
66,
171,
213,
82,
20,
221,
52,
93,
137,
6,
17,
60,
245,
112,
240,
51,
104,
176,
90,
254,
13,
198,
187,
241,
144,
29,
158,
144,
236,
107,
127,
159,
113,
41,
143,
221,
140,
95,
110,
210,
17,
132,
75,
179,
109,
242,
170,
188,
240,
50,
0,
113,
149,
68,
225,
126,
8,
159,
196,
31,
116,
233,
37,
16,
233,
31,
145,
132,
191,
105,
112,
139,
34,
178,
85,
234,
94,
196,
180,
229,
195,
4,
30,
40,
166,
114,
255,
39,
59,
169,
218,
70,
71,
223,
59,
73,
218,
69,
179,
111,
234,
51,
82,
96,
119,
232,
119,
1,
11,
158,
150,
14,
150,
94,
60,
195,
243,
40,
221,
204,
110,
243,
248,
173,
18,
133,
25,
162,
143,
115,
173,
54,
217,
5,
76,
57,
68,
222,
105,
88,
56,
168,
136,
87,
165,
104,
34,
154,
192,
30,
195,
149,
93,
197,
230,
244,
33,
179,
7,
251,
188,
226,
239,
115,
131,
148,
14,
124,
30,
79,
43,
29,
98,
57,
202,
18,
255,
249,
96,
223,
154,
143,
129,
208,
7,
84,
164,
177,
123,
34,
69,
190,
230,
212,
241,
42,
176,
162,
16,
37,
45,
121,
53,
68,
81,
15,
212,
75,
204,
207,
126,
134,
169,
185,
159,
137,
52,
98,
186,
232,
72,
20,
91,
231,
213,
142,
211,
193,
229,
248,
50,
206,
120,
35,
23,
175,
4,
85,
246,
160,
153,
149,
92,
109,
252,
227,
189,
98,
97,
56,
152,
3,
29,
78,
121,
12,
128,
184,
205,
152,
214,
206,
44,
151,
75,
21,
9,
246,
55,
99,
232,
249,
170,
163,
66,
52,
207,
213,
163,
59,
82,
14,
134,
90,
46,
120,
103,
85,
179,
58,
151,
23,
78,
76,
118,
24,
211,
151,
83,
121,
175,
225,
178,
118,
50,
33,
24,
187,
87,
87,
249,
180,
202,
140,
220,
213,
182,
250,
61,
218,
43,
12,
137,
78,
125,
122,
104,
65,
224,
161,
77,
32,
156,
215,
172,
47,
1,
23,
6,
226,
100,
97,
231,
237,
249,
186,
194,
140,
133,
204,
35,
131,
24,
86,
171,
165,
40,
32,
74,
170,
181,
251,
111,
203,
201,
141,
142,
196,
84,
77,
36,
9,
49,
59,
197,
6,
172,
224,
224,
103,
208,
150,
1,
104,
77,
96,
181,
252,
27,
22,
84,
243,
134,
205,
113,
146,
250,
187,
144,
157,
103,
123,
58,
80,
2,
13,
219,
95,
159,
214,
254,
62,
227,
160,
31,
49,
126,
19,
24,
202,
194,
101,
249,
197,
95,
190,
220,
164,
35,
200,
61,
171,
190,
8,
151,
102,
219,
126,
118,
105,
70,
165,
83,
8,
58,
211,
178,
7,
167,
37,
6,
147,
241,
83,
231,
156,
108,
136,
194,
253,
16,
254,
35,
242,
141,
62,
137,
63,
232,
72,
104,
48,
117,
147,
77,
81,
9,
229,
172,
94,
148,
127,
36,
120,
164,
9,
197,
119,
57,
210,
224,
22,
69,
164,
1,
25,
216,
100,
171,
212,
189,
18,
74,
219,
32,
201,
111,
186,
92,
191,
142,
181,
193,
73,
58,
33,
151,
63,
219,
46,
10,
228,
254,
79,
118,
146,
31,
64,
235,
82,
181,
141,
142,
36,
84,
130,
19,
255,
113,
227,
111,
137,
144,
236,
242,
203,
96,
174,
15,
189,
129,
161,
146,
102,
164,
192,
238,
16,
69,
207,
115,
208,
239,
2,
22,
166,
14,
13,
139,
125,
43,
108,
247,
11,
202,
99,
106,
253,
126,
247,
60,
139,
159,
248,
161,
80,
186,
153,
221,
38,
91,
150,
64,
230,
241,
91,
37,
144,
16,
84,
184,
75,
53,
53,
196,
61,
212,
58,
89,
167,
92,
28,
105,
209,
189,
19,
244,
10,
152,
114,
136,
124,
121,
125,
21,
188,
211,
176,
112,
202,
50,
191,
237,
17,
23,
222,
145,
103,
246,
209,
12,
145,
66,
69,
90,
231,
163,
74,
199,
60,
134,
43,
187,
74,
103,
36,
38,
138,
205,
233,
67,
252,
44,
230,
222,
39,
9,
135,
162,
81,
232,
136,
63,
0,
0,
0,
0,
232,
219,
251,
185,
145,
177,
134,
168,
121,
106,
125,
17,
99,
101,
124,
138,
139,
190,
135,
51,
242,
212,
250,
34,
26,
15,
1,
155,
135,
204,
137,
207,
111,
23,
114,
118,
22,
125,
15,
103,
254,
166,
244,
222,
228,
169,
245,
69,
12,
114,
14,
252,
117,
24,
115,
237,
157,
195,
136,
84,
79,
159,
98,
68,
167,
68,
153,
253,
222,
46,
228,
236,
54,
245,
31,
85,
44,
250,
30,
206,
196,
33,
229,
119,
189,
75,
152,
102,
85,
144,
99,
223,
200,
83,
235,
139,
32,
136,
16,
50,
89,
226,
109,
35,
177,
57,
150,
154,
171,
54,
151,
1,
67,
237,
108,
184,
58,
135,
17,
169,
210,
92,
234,
16,
158,
62,
197,
136,
118,
229,
62,
49,
15,
143,
67,
32,
231,
84,
184,
153,
253,
91,
185,
2,
21,
128,
66,
187,
108,
234,
63,
170,
132,
49,
196,
19,
25,
242,
76,
71,
241,
41,
183,
254,
136,
67,
202,
239,
96,
152,
49,
86,
122,
151,
48,
205,
146,
76,
203,
116,
235,
38,
182,
101,
3,
253,
77,
220,
209,
161,
167,
204,
57,
122,
92,
117,
64,
16,
33,
100,
168,
203,
218,
221,
178,
196,
219,
70,
90,
31,
32,
255,
35,
117,
93,
238,
203,
174,
166,
87,
86,
109,
46,
3,
190,
182,
213,
186,
199,
220,
168,
171,
47,
7,
83,
18,
53,
8,
82,
137,
221,
211,
169,
48,
164,
185,
212,
33,
76,
98,
47,
152,
125,
123,
251,
202,
149,
160,
0,
115,
236,
202,
125,
98,
4,
17,
134,
219,
30,
30,
135,
64,
246,
197,
124,
249,
143,
175,
1,
232,
103,
116,
250,
81,
250,
183,
114,
5,
18,
108,
137,
188,
107,
6,
244,
173,
131,
221,
15,
20,
153,
210,
14,
143,
113,
9,
245,
54,
8,
99,
136,
39,
224,
184,
115,
158,
50,
228,
153,
142,
218,
63,
98,
55,
163,
85,
31,
38,
75,
142,
228,
159,
81,
129,
229,
4,
185,
90,
30,
189,
192,
48,
99,
172,
40,
235,
152,
21,
181,
40,
16,
65,
93,
243,
235,
248,
36,
153,
150,
233,
204,
66,
109,
80,
214,
77,
108,
203,
62,
150,
151,
114,
71,
252,
234,
99,
175,
39,
17,
218,
227,
69,
62,
66,
11,
158,
197,
251,
114,
244,
184,
234,
154,
47,
67,
83,
128,
32,
66,
200,
104,
251,
185,
113,
17,
145,
196,
96,
249,
74,
63,
217,
100,
137,
183,
141,
140,
82,
76,
52,
245,
56,
49,
37,
29,
227,
202,
156,
7,
236,
203,
7,
239,
55,
48,
190,
150,
93,
77,
175,
126,
134,
182,
22,
172,
218,
92,
6,
68,
1,
167,
191,
61,
107,
218,
174,
213,
176,
33,
23,
207,
191,
32,
140,
39,
100,
219,
53,
94,
14,
166,
36,
182,
213,
93,
157,
43,
22,
213,
201,
195,
205,
46,
112,
186,
167,
83,
97,
82,
124,
168,
216,
72,
115,
169,
67,
160,
168,
82,
250,
217,
194,
47,
235,
49,
25,
212,
82,
187,
240,
135,
78,
83,
43,
124,
247,
42,
65,
1,
230,
194,
154,
250,
95,
216,
149,
251,
196,
48,
78,
0,
125,
73,
36,
125,
108,
161,
255,
134,
213,
60,
60,
14,
129,
212,
231,
245,
56,
173,
141,
136,
41,
69,
86,
115,
144,
95,
89,
114,
11,
183,
130,
137,
178,
206,
232,
244,
163,
38,
51,
15,
26,
244,
111,
229,
10,
28,
180,
30,
179,
101,
222,
99,
162,
141,
5,
152,
27,
151,
10,
153,
128,
127,
209,
98,
57,
6,
187,
31,
40,
238,
96,
228,
145,
115,
163,
108,
197,
155,
120,
151,
124,
226,
18,
234,
109,
10,
201,
17,
212,
16,
198,
16,
79,
248,
29,
235,
246,
129,
119,
150,
231,
105,
172,
109,
94,
37,
206,
66,
198,
205,
21,
185,
127,
180,
127,
196,
110,
92,
164,
63,
215,
70,
171,
62,
76,
174,
112,
197,
245,
215,
26,
184,
228,
63,
193,
67,
93,
162,
2,
203,
9,
74,
217,
48,
176,
51,
179,
77,
161,
219,
104,
182,
24,
193,
103,
183,
131,
41,
188,
76,
58,
80,
214,
49,
43,
184,
13,
202,
146,
106,
81,
32,
130,
130,
138,
219,
59,
251,
224,
166,
42,
19,
59,
93,
147,
9,
52,
92,
8,
225,
239,
167,
177,
152,
133,
218,
160,
112,
94,
33,
25,
237,
157,
169,
77,
5,
70,
82,
244,
124,
44,
47,
229,
148,
247,
212,
92,
142,
248,
213,
199,
102,
35,
46,
126,
31,
73,
83,
111,
247,
146,
168,
214,
198,
139,
124,
132,
46,
80,
135,
61,
87,
58,
250,
44,
191,
225,
1,
149,
165,
238,
0,
14,
77,
53,
251,
183,
52,
95,
134,
166,
220,
132,
125,
31,
65,
71,
245,
75,
169,
156,
14,
242,
208,
246,
115,
227,
56,
45,
136,
90,
34,
34,
137,
193,
202,
249,
114,
120,
179,
147,
15,
105,
91,
72,
244,
208,
137,
20,
30,
192,
97,
207,
229,
121,
24,
165,
152,
104,
240,
126,
99,
209,
234,
113,
98,
74,
2,
170,
153,
243,
123,
192,
228,
226,
147,
27,
31,
91,
14,
216,
151,
15,
230,
3,
108,
182,
159,
105,
17,
167,
119,
178,
234,
30,
109,
189,
235,
133,
133,
102,
16,
60,
252,
12,
109,
45,
20,
215,
150,
148,
88,
181,
185,
12,
176,
110,
66,
181,
201,
4,
63,
164,
33,
223,
196,
29,
59,
208,
197,
134,
211,
11,
62,
63,
170,
97,
67,
46,
66,
186,
184,
151,
223,
121,
48,
195,
55,
162,
203,
122,
78,
200,
182,
107,
166,
19,
77,
210,
188,
28,
76,
73,
84,
199,
183,
240,
45,
173,
202,
225,
197,
118,
49,
88,
23,
42,
219,
72,
255,
241,
32,
241,
134,
155,
93,
224,
110,
64,
166,
89,
116,
79,
167,
194,
156,
148,
92,
123,
229,
254,
33,
106,
13,
37,
218,
211,
144,
230,
82,
135,
120,
61,
169,
62,
1,
87,
212,
47,
233,
140,
47,
150,
243,
131,
46,
13,
27,
88,
213,
180,
98,
50,
168,
165,
138,
233,
83,
28,
0,
0,
0,
0,
145,
145,
104,
174,
99,
37,
160,
135,
242,
180,
200,
41,
135,
76,
49,
212,
22,
221,
89,
122,
228,
105,
145,
83,
117,
248,
249,
253,
79,
159,
19,
115,
222,
14,
123,
221,
44,
186,
179,
244,
189,
43,
219,
90,
200,
211,
34,
167,
89,
66,
74,
9,
171,
246,
130,
32,
58,
103,
234,
142,
158,
62,
39,
230,
15,
175,
79,
72,
253,
27,
135,
97,
108,
138,
239,
207,
25,
114,
22,
50,
136,
227,
126,
156,
122,
87,
182,
181,
235,
198,
222,
27,
209,
161,
52,
149,
64,
48,
92,
59,
178,
132,
148,
18,
35,
21,
252,
188,
86,
237,
5,
65,
199,
124,
109,
239,
53,
200,
165,
198,
164,
89,
205,
104,
125,
123,
63,
23,
236,
234,
87,
185,
30,
94,
159,
144,
143,
207,
247,
62,
250,
55,
14,
195,
107,
166,
102,
109,
153,
18,
174,
68,
8,
131,
198,
234,
50,
228,
44,
100,
163,
117,
68,
202,
81,
193,
140,
227,
192,
80,
228,
77,
181,
168,
29,
176,
36,
57,
117,
30,
214,
141,
189,
55,
71,
28,
213,
153,
227,
69,
24,
241,
114,
212,
112,
95,
128,
96,
184,
118,
17,
241,
208,
216,
100,
9,
41,
37,
245,
152,
65,
139,
7,
44,
137,
162,
150,
189,
225,
12,
172,
218,
11,
130,
61,
75,
99,
44,
207,
255,
171,
5,
94,
110,
195,
171,
43,
150,
58,
86,
186,
7,
82,
248,
72,
179,
154,
209,
217,
34,
242,
127,
250,
246,
126,
46,
107,
103,
22,
128,
153,
211,
222,
169,
8,
66,
182,
7,
125,
186,
79,
250,
236,
43,
39,
84,
30,
159,
239,
125,
143,
14,
135,
211,
181,
105,
109,
93,
36,
248,
5,
243,
214,
76,
205,
218,
71,
221,
165,
116,
50,
37,
92,
137,
163,
180,
52,
39,
81,
0,
252,
14,
192,
145,
148,
160,
100,
200,
89,
200,
245,
89,
49,
102,
7,
237,
249,
79,
150,
124,
145,
225,
227,
132,
104,
28,
114,
21,
0,
178,
128,
161,
200,
155,
17,
48,
160,
53,
43,
87,
74,
187,
186,
198,
34,
21,
72,
114,
234,
60,
217,
227,
130,
146,
172,
27,
123,
111,
61,
138,
19,
193,
207,
62,
219,
232,
94,
175,
179,
70,
135,
141,
65,
57,
22,
28,
41,
151,
228,
168,
225,
190,
117,
57,
137,
16,
0,
193,
112,
237,
145,
80,
24,
67,
99,
228,
208,
106,
242,
117,
184,
196,
200,
18,
82,
74,
89,
131,
58,
228,
171,
55,
242,
205,
58,
166,
154,
99,
79,
94,
99,
158,
222,
207,
11,
48,
44,
123,
195,
25,
189,
234,
171,
183,
25,
179,
102,
223,
136,
34,
14,
113,
122,
150,
198,
88,
235,
7,
174,
246,
158,
255,
87,
11,
15,
110,
63,
165,
253,
218,
247,
140,
108,
75,
159,
34,
86,
44,
117,
172,
199,
189,
29,
2,
53,
9,
213,
43,
164,
152,
189,
133,
209,
96,
68,
120,
64,
241,
44,
214,
178,
69,
228,
255,
35,
212,
140,
81,
244,
237,
253,
92,
101,
124,
149,
242,
151,
200,
93,
219,
6,
89,
53,
117,
115,
161,
204,
136,
226,
48,
164,
38,
16,
132,
108,
15,
129,
21,
4,
161,
187,
114,
238,
47,
42,
227,
134,
129,
216,
87,
78,
168,
73,
198,
38,
6,
60,
62,
223,
251,
173,
175,
183,
85,
95,
27,
127,
124,
206,
138,
23,
210,
106,
211,
218,
186,
251,
66,
178,
20,
9,
246,
122,
61,
152,
103,
18,
147,
237,
159,
235,
110,
124,
14,
131,
192,
142,
186,
75,
233,
31,
43,
35,
71,
37,
76,
201,
201,
180,
221,
161,
103,
70,
105,
105,
78,
215,
248,
1,
224,
162,
0,
248,
29,
51,
145,
144,
179,
193,
37,
88,
154,
80,
180,
48,
52,
137,
150,
194,
75,
24,
7,
170,
229,
234,
179,
98,
204,
123,
34,
10,
98,
14,
218,
243,
159,
159,
75,
155,
49,
109,
255,
83,
24,
252,
110,
59,
182,
198,
9,
209,
56,
87,
152,
185,
150,
165,
44,
113,
191,
52,
189,
25,
17,
65,
69,
224,
236,
208,
212,
136,
66,
34,
96,
64,
107,
179,
241,
40,
197,
23,
168,
229,
173,
134,
57,
141,
3,
116,
141,
69,
42,
229,
28,
45,
132,
144,
228,
212,
121,
1,
117,
188,
215,
243,
193,
116,
254,
98,
80,
28,
80,
88,
55,
246,
222,
201,
166,
158,
112,
59,
18,
86,
89,
170,
131,
62,
247,
223,
123,
199,
10,
78,
234,
175,
164,
188,
94,
103,
141,
45,
207,
15,
35,
14,
27,
131,
114,
159,
138,
235,
220,
109,
62,
35,
245,
252,
175,
75,
91,
137,
87,
178,
166,
24,
198,
218,
8,
234,
114,
18,
33,
123,
227,
122,
143,
65,
132,
144,
1,
208,
21,
248,
175,
34,
161,
48,
134,
179,
48,
88,
40,
198,
200,
161,
213,
87,
89,
201,
123,
165,
237,
1,
82,
52,
124,
105,
252,
144,
37,
164,
148,
1,
180,
204,
58,
243,
0,
4,
19,
98,
145,
108,
189,
23,
105,
149,
64,
134,
248,
253,
238,
116,
76,
53,
199,
229,
221,
93,
105,
223,
186,
183,
231,
78,
43,
223,
73,
188,
159,
23,
96,
45,
14,
127,
206,
88,
246,
134,
51,
201,
103,
238,
157,
59,
211,
38,
180,
170,
66,
78,
26,
115,
96,
188,
101,
226,
241,
212,
203,
16,
69,
28,
226,
129,
212,
116,
76,
244,
44,
141,
177,
101,
189,
229,
31,
151,
9,
45,
54,
6,
152,
69,
152,
60,
255,
175,
22,
173,
110,
199,
184,
95,
218,
15,
145,
206,
75,
103,
63,
187,
179,
158,
194,
42,
34,
246,
108,
216,
150,
62,
69,
73,
7,
86,
235,
237,
94,
155,
131,
124,
207,
243,
45,
142,
123,
59,
4,
31,
234,
83,
170,
106,
18,
170,
87,
251,
131,
194,
249,
9,
55,
10,
208,
152,
166,
98,
126,
162,
193,
136,
240,
51,
80,
224,
94,
193,
228,
40,
119,
80,
117,
64,
217,
37,
141,
185,
36,
180,
28,
209,
138,
70,
168,
25,
163,
215,
57,
113,
13,
45,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
46,
0,
0,
0,
47,
0,
0,
0,
48,
0,
0,
0,
45,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
49,
0,
0,
0,
99,
97,
108,
108,
101,
100,
32,
96,
79,
112,
116,
105,
111,
110,
58,
58,
117,
110,
119,
114,
97,
112,
40,
41,
96,
32,
111,
110,
32,
97,
32,
96,
78,
111,
110,
101,
96,
32,
118,
97,
108,
117,
101,
117,
110,
101,
120,
112,
101,
99,
116,
101,
100,
32,
101,
110,
100,
32,
111,
102,
32,
102,
105,
108,
101,
111,
116,
104,
101,
114,
32,
111,
115,
32,
101,
114,
114,
111,
114,
111,
112,
101,
114,
97,
116,
105,
111,
110,
32,
105,
110,
116,
101,
114,
114,
117,
112,
116,
101,
100,
119,
114,
105,
116,
101,
32,
122,
101,
114,
111,
116,
105,
109,
101,
100,
32,
111,
117,
116,
105,
110,
118,
97,
108,
105,
100,
32,
100,
97,
116,
97,
105,
110,
118,
97,
108,
105,
100,
32,
105,
110,
112,
117,
116,
32,
112,
97,
114,
97,
109,
101,
116,
101,
114,
111,
112,
101,
114,
97,
116,
105,
111,
110,
32,
119,
111,
117,
108,
100,
32,
98,
108,
111,
99,
107,
101,
110,
116,
105,
116,
121,
32,
97,
108,
114,
101,
97,
100,
121,
32,
101,
120,
105,
115,
116,
115,
98,
114,
111,
107,
101,
110,
32,
112,
105,
112,
101,
97,
100,
100,
114,
101,
115,
115,
32,
110,
111,
116,
32,
97,
118,
97,
105,
108,
97,
98,
108,
101,
97,
100,
100,
114,
101,
115,
115,
32,
105,
110,
32,
117,
115,
101,
110,
111,
116,
32,
99,
111,
110,
110,
101,
99,
116,
101,
100,
99,
111,
110,
110,
101,
99,
116,
105,
111,
110,
32,
97,
98,
111,
114,
116,
101,
100,
99,
111,
110,
110,
101,
99,
116,
105,
111,
110,
32,
114,
101,
115,
101,
116,
99,
111,
110,
110,
101,
99,
116,
105,
111,
110,
32,
114,
101,
102,
117,
115,
101,
100,
112,
101,
114,
109,
105,
115,
115,
105,
111,
110,
32,
100,
101,
110,
105,
101,
100,
101,
110,
116,
105,
116,
121,
32,
110,
111,
116,
32,
102,
111,
117,
110,
100,
24,
98,
16,
0,
0,
0,
0,
0,
32,
40,
111,
115,
32,
101,
114,
114,
111,
114,
32,
41,
24,
98,
16,
0,
0,
0,
0,
0,
132,
99,
16,
0,
11,
0,
0,
0,
143,
99,
16,
0,
1,
0,
0,
0,
115,
114,
99,
47,
108,
105,
98,
115,
116,
100,
47,
112,
97,
110,
105,
99,
107,
105,
110,
103,
46,
114,
115,
0,
168,
99,
16,
0,
23,
0,
0,
0,
127,
1,
0,
0,
15,
0,
0,
0,
168,
99,
16,
0,
23,
0,
0,
0,
128,
1,
0,
0,
15,
0,
0,
0,
50,
0,
0,
0,
16,
0,
0,
0,
4,
0,
0,
0,
51,
0,
0,
0,
52,
0,
0,
0,
53,
0,
0,
0,
12,
0,
0,
0,
4,
0,
0,
0,
54,
0,
0,
0,
85,
110,
101,
120,
112,
101,
99,
116,
101,
100,
69,
111,
102,
79,
116,
104,
101,
114,
73,
110,
116,
101,
114,
114,
117,
112,
116,
101,
100,
87,
114,
105,
116,
101,
90,
101,
114,
111,
84,
105,
109,
101,
100,
79,
117,
116,
73,
110,
118,
97,
108,
105,
100,
68,
97,
116,
97,
73,
110,
118,
97,
108,
105,
100,
73,
110,
112,
117,
116,
87,
111,
117,
108,
100,
66,
108,
111,
99,
107,
65,
108,
114,
101,
97,
100,
121,
69,
120,
105,
115,
116,
115,
66,
114,
111,
107,
101,
110,
80,
105,
112,
101,
65,
100,
100,
114,
78,
111,
116,
65,
118,
97,
105,
108,
97,
98,
108,
101,
65,
100,
100,
114,
73,
110,
85,
115,
101,
78,
111,
116,
67,
111,
110,
110,
101,
99,
116,
101,
100,
67,
111,
110,
110,
101,
99,
116,
105,
111,
110,
65,
98,
111,
114,
116,
101,
100,
67,
111,
110,
110,
101,
99,
116,
105,
111,
110,
82,
101,
115,
101,
116,
67,
111,
110,
110,
101,
99,
116,
105,
111,
110,
82,
101,
102,
117,
115,
101,
100,
80,
101,
114,
109,
105,
115,
115,
105,
111,
110,
68,
101,
110,
105,
101,
100,
78,
111,
116,
70,
111,
117,
110,
100,
111,
112,
101,
114,
97,
116,
105,
111,
110,
32,
115,
117,
99,
99,
101,
115,
115,
102,
117,
108,
56,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
57,
0,
0,
0,
58,
0,
0,
0,
59,
0,
0,
0,
47,
114,
117,
115,
116,
99,
47,
102,
100,
52,
98,
49,
55,
55,
97,
97,
98,
98,
57,
55,
52,
57,
100,
102,
98,
53,
54,
50,
99,
52,
56,
101,
52,
55,
51,
55,
57,
99,
101,
97,
56,
49,
100,
99,
50,
55,
55,
47,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
102,
109,
116,
47,
109,
111,
100,
46,
114,
115,
0,
0,
4,
101,
16,
0,
70,
0,
0,
0,
104,
1,
0,
0,
19,
0,
0,
0,
56,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
60,
0,
0,
0,
97,
32,
102,
111,
114,
109,
97,
116,
116,
105,
110,
103,
32,
116,
114,
97,
105,
116,
32,
105,
109,
112,
108,
101,
109,
101,
110,
116,
97,
116,
105,
111,
110,
32,
114,
101,
116,
117,
114,
110,
101,
100,
32,
97,
110,
32,
101,
114,
114,
111,
114,
115,
114,
99,
47,
108,
105,
98,
97,
108,
108,
111,
99,
47,
102,
109,
116,
46,
114,
115,
0,
0,
159,
101,
16,
0,
19,
0,
0,
0,
74,
2,
0,
0,
5,
0,
0,
0,
115,
114,
99,
47,
108,
105,
98,
97,
108,
108,
111,
99,
47,
114,
97,
119,
95,
118,
101,
99,
46,
114,
115,
99,
97,
112,
97,
99,
105,
116,
121,
32,
111,
118,
101,
114,
102,
108,
111,
119,
196,
101,
16,
0,
23,
0,
0,
0,
66,
2,
0,
0,
5,
0,
0,
0,
41,
115,
114,
99,
47,
108,
105,
98,
97,
108,
108,
111,
99,
47,
118,
101,
99,
46,
114,
115,
41,
32,
115,
104,
111,
117,
108,
100,
32,
98,
101,
32,
60,
61,
32,
108,
101,
110,
32,
40,
105,
115,
32,
101,
110,
100,
32,
100,
114,
97,
105,
110,
32,
105,
110,
100,
101,
120,
32,
40,
105,
115,
32,
0,
39,
102,
16,
0,
20,
0,
0,
0,
16,
102,
16,
0,
23,
0,
0,
0,
252,
101,
16,
0,
1,
0,
0,
0,
253,
101,
16,
0,
19,
0,
0,
0,
56,
5,
0,
0,
13,
0,
0,
0,
96,
46,
46,
0,
101,
102,
16,
0,
2,
0,
0,
0,
99,
97,
108,
108,
101,
100,
32,
96,
79,
112,
116,
105,
111,
110,
58,
58,
117,
110,
119,
114,
97,
112,
40,
41,
96,
32,
111,
110,
32,
97,
32,
96,
78,
111,
110,
101,
96,
32,
118,
97,
108,
117,
101,
58,
32,
0,
0,
0,
100,
102,
16,
0,
0,
0,
0,
0,
155,
102,
16,
0,
2,
0,
0,
0,
66,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
67,
0,
0,
0,
105,
110,
100,
101,
120,
32,
111,
117,
116,
32,
111,
102,
32,
98,
111,
117,
110,
100,
115,
58,
32,
116,
104,
101,
32,
108,
101,
110,
32,
105,
115,
32,
32,
98,
117,
116,
32,
116,
104,
101,
32,
105,
110,
100,
101,
120,
32,
105,
115,
32,
0,
0,
192,
102,
16,
0,
32,
0,
0,
0,
224,
102,
16,
0,
18,
0,
0,
0,
66,
0,
0,
0,
12,
0,
0,
0,
4,
0,
0,
0,
68,
0,
0,
0,
69,
0,
0,
0,
70,
0,
0,
0,
32,
32,
32,
32,
32,
123,
10,
44,
10,
44,
32,
32,
123,
32,
125,
32,
125,
40,
10,
40,
44,
41,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
102,
109,
116,
47,
110,
117,
109,
46,
114,
115,
50,
103,
16,
0,
22,
0,
0,
0,
84,
0,
0,
0,
20,
0,
0,
0,
48,
120,
48,
48,
48,
49,
48,
50,
48,
51,
48,
52,
48,
53,
48,
54,
48,
55,
48,
56,
48,
57,
49,
48,
49,
49,
49,
50,
49,
51,
49,
52,
49,
53,
49,
54,
49,
55,
49,
56,
49,
57,
50,
48,
50,
49,
50,
50,
50,
51,
50,
52,
50,
53,
50,
54,
50,
55,
50,
56,
50,
57,
51,
48,
51,
49,
51,
50,
51,
51,
51,
52,
51,
53,
51,
54,
51,
55,
51,
56,
51,
57,
52,
48,
52,
49,
52,
50,
52,
51,
52,
52,
52,
53,
52,
54,
52,
55,
52,
56,
52,
57,
53,
48,
53,
49,
53,
50,
53,
51,
53,
52,
53,
53,
53,
54,
53,
55,
53,
56,
53,
57,
54,
48,
54,
49,
54,
50,
54,
51,
54,
52,
54,
53,
54,
54,
54,
55,
54,
56,
54,
57,
55,
48,
55,
49,
55,
50,
55,
51,
55,
52,
55,
53,
55,
54,
55,
55,
55,
56,
55,
57,
56,
48,
56,
49,
56,
50,
56,
51,
56,
52,
56,
53,
56,
54,
56,
55,
56,
56,
56,
57,
57,
48,
57,
49,
57,
50,
57,
51,
57,
52,
57,
53,
57,
54,
57,
55,
57,
56,
57,
57,
0,
0,
66,
0,
0,
0,
4,
0,
0,
0,
4,
0,
0,
0,
71,
0,
0,
0,
72,
0,
0,
0,
73,
0,
0,
0,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
102,
109,
116,
47,
109,
111,
100,
46,
114,
115,
0,
0,
60,
104,
16,
0,
22,
0,
0,
0,
83,
4,
0,
0,
17,
0,
0,
0,
60,
104,
16,
0,
22,
0,
0,
0,
93,
4,
0,
0,
36,
0,
0,
0,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
115,
108,
105,
99,
101,
47,
109,
101,
109,
99,
104,
114,
46,
114,
115,
0,
116,
104,
16,
0,
27,
0,
0,
0,
82,
0,
0,
0,
5,
0,
0,
0,
105,
110,
100,
101,
120,
32,
32,
111,
117,
116,
32,
111,
102,
32,
114,
97,
110,
103,
101,
32,
102,
111,
114,
32,
115,
108,
105,
99,
101,
32,
111,
102,
32,
108,
101,
110,
103,
116,
104,
32,
160,
104,
16,
0,
6,
0,
0,
0,
166,
104,
16,
0,
34,
0,
0,
0,
115,
108,
105,
99,
101,
32,
105,
110,
100,
101,
120,
32,
115,
116,
97,
114,
116,
115,
32,
97,
116,
32,
32,
98,
117,
116,
32,
101,
110,
100,
115,
32,
97,
116,
32,
0,
216,
104,
16,
0,
22,
0,
0,
0,
238,
104,
16,
0,
13,
0,
0,
0,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
115,
116,
114,
47,
112,
97,
116,
116,
101,
114,
110,
46,
114,
115,
0,
0,
12,
105,
16,
0,
26,
0,
0,
0,
139,
1,
0,
0,
38,
0,
0,
0,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
115,
116,
114,
47,
109,
111,
100,
46,
114,
115,
0,
0,
56,
105,
16,
0,
22,
0,
0,
0,
128,
7,
0,
0,
47,
0,
0,
0,
56,
105,
16,
0,
22,
0,
0,
0,
195,
7,
0,
0,
47,
0,
0,
0,
56,
105,
16,
0,
22,
0,
0,
0,
4,
8,
0,
0,
47,
0,
0,
0,
91,
46,
46,
46,
93,
98,
121,
116,
101,
32,
105,
110,
100,
101,
120,
32,
32,
105,
115,
32,
111,
117,
116,
32,
111,
102,
32,
98,
111,
117,
110,
100,
115,
32,
111,
102,
32,
96,
0,
0,
133,
105,
16,
0,
11,
0,
0,
0,
144,
105,
16,
0,
22,
0,
0,
0,
100,
102,
16,
0,
1,
0,
0,
0,
98,
101,
103,
105,
110,
32,
60,
61,
32,
101,
110,
100,
32,
40,
32,
60,
61,
32,
41,
32,
119,
104,
101,
110,
32,
115,
108,
105,
99,
105,
110,
103,
32,
96,
0,
0,
192,
105,
16,
0,
14,
0,
0,
0,
206,
105,
16,
0,
4,
0,
0,
0,
210,
105,
16,
0,
16,
0,
0,
0,
100,
102,
16,
0,
1,
0,
0,
0,
32,
105,
115,
32,
110,
111,
116,
32,
97,
32,
99,
104,
97,
114,
32,
98,
111,
117,
110,
100,
97,
114,
121,
59,
32,
105,
116,
32,
105,
115,
32,
105,
110,
115,
105,
100,
101,
32,
32,
40,
98,
121,
116,
101,
115,
32,
41,
32,
111,
102,
32,
96,
133,
105,
16,
0,
11,
0,
0,
0,
4,
106,
16,
0,
38,
0,
0,
0,
42,
106,
16,
0,
8,
0,
0,
0,
50,
106,
16,
0,
6,
0,
0,
0,
100,
102,
16,
0,
1,
0,
0,
0,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
117,
110,
105,
99,
111,
100,
101,
47,
112,
114,
105,
110,
116,
97,
98,
108,
101,
46,
114,
115,
96,
106,
16,
0,
32,
0,
0,
0,
10,
0,
0,
0,
28,
0,
0,
0,
96,
106,
16,
0,
32,
0,
0,
0,
26,
0,
0,
0,
40,
0,
0,
0,
0,
1,
3,
5,
5,
6,
6,
3,
7,
6,
8,
8,
9,
17,
10,
28,
11,
25,
12,
20,
13,
16,
14,
13,
15,
4,
16,
3,
18,
18,
19,
9,
22,
1,
23,
5,
24,
2,
25,
3,
26,
7,
28,
2,
29,
1,
31,
22,
32,
3,
43,
3,
44,
2,
45,
11,
46,
1,
48,
3,
49,
2,
50,
1,
167,
2,
169,
2,
170,
4,
171,
8,
250,
2,
251,
5,
253,
4,
254,
3,
255,
9,
173,
120,
121,
139,
141,
162,
48,
87,
88,
139,
140,
144,
28,
29,
221,
14,
15,
75,
76,
251,
252,
46,
47,
63,
92,
93,
95,
181,
226,
132,
141,
142,
145,
146,
169,
177,
186,
187,
197,
198,
201,
202,
222,
228,
229,
255,
0,
4,
17,
18,
41,
49,
52,
55,
58,
59,
61,
73,
74,
93,
132,
142,
146,
169,
177,
180,
186,
187,
198,
202,
206,
207,
228,
229,
0,
4,
13,
14,
17,
18,
41,
49,
52,
58,
59,
69,
70,
73,
74,
94,
100,
101,
132,
145,
155,
157,
201,
206,
207,
13,
17,
41,
69,
73,
87,
100,
101,
141,
145,
169,
180,
186,
187,
197,
201,
223,
228,
229,
240,
13,
17,
69,
73,
100,
101,
128,
132,
178,
188,
190,
191,
213,
215,
240,
241,
131,
133,
139,
164,
166,
190,
191,
197,
199,
206,
207,
218,
219,
72,
152,
189,
205,
198,
206,
207,
73,
78,
79,
87,
89,
94,
95,
137,
142,
143,
177,
182,
183,
191,
193,
198,
199,
215,
17,
22,
23,
91,
92,
246,
247,
254,
255,
128,
13,
109,
113,
222,
223,
14,
15,
31,
110,
111,
28,
29,
95,
125,
126,
174,
175,
187,
188,
250,
22,
23,
30,
31,
70,
71,
78,
79,
88,
90,
92,
94,
126,
127,
181,
197,
212,
213,
220,
240,
241,
245,
114,
115,
143,
116,
117,
150,
47,
95,
38,
46,
47,
167,
175,
183,
191,
199,
207,
215,
223,
154,
64,
151,
152,
48,
143,
31,
192,
193,
206,
255,
78,
79,
90,
91,
7,
8,
15,
16,
39,
47,
238,
239,
110,
111,
55,
61,
63,
66,
69,
144,
145,
254,
255,
83,
103,
117,
200,
201,
208,
209,
216,
217,
231,
254,
255,
0,
32,
95,
34,
130,
223,
4,
130,
68,
8,
27,
4,
6,
17,
129,
172,
14,
128,
171,
53,
40,
11,
128,
224,
3,
25,
8,
1,
4,
47,
4,
52,
4,
7,
3,
1,
7,
6,
7,
17,
10,
80,
15,
18,
7,
85,
7,
3,
4,
28,
10,
9,
3,
8,
3,
7,
3,
2,
3,
3,
3,
12,
4,
5,
3,
11,
6,
1,
14,
21,
5,
58,
3,
17,
7,
6,
5,
16,
7,
87,
7,
2,
7,
21,
13,
80,
4,
67,
3,
45,
3,
1,
4,
17,
6,
15,
12,
58,
4,
29,
37,
95,
32,
109,
4,
106,
37,
128,
200,
5,
130,
176,
3,
26,
6,
130,
253,
3,
89,
7,
21,
11,
23,
9,
20,
12,
20,
12,
106,
6,
10,
6,
26,
6,
89,
7,
43,
5,
70,
10,
44,
4,
12,
4,
1,
3,
49,
11,
44,
4,
26,
6,
11,
3,
128,
172,
6,
10,
6,
33,
63,
76,
4,
45,
3,
116,
8,
60,
3,
15,
3,
60,
7,
56,
8,
43,
5,
130,
255,
17,
24,
8,
47,
17,
45,
3,
32,
16,
33,
15,
128,
140,
4,
130,
151,
25,
11,
21,
136,
148,
5,
47,
5,
59,
7,
2,
14,
24,
9,
128,
179,
45,
116,
12,
128,
214,
26,
12,
5,
128,
255,
5,
128,
223,
12,
238,
13,
3,
132,
141,
3,
55,
9,
129,
92,
20,
128,
184,
8,
128,
203,
42,
56,
3,
10,
6,
56,
8,
70,
8,
12,
6,
116,
11,
30,
3,
90,
4,
89,
9,
128,
131,
24,
28,
10,
22,
9,
76,
4,
128,
138,
6,
171,
164,
12,
23,
4,
49,
161,
4,
129,
218,
38,
7,
12,
5,
5,
128,
165,
17,
129,
109,
16,
120,
40,
42,
6,
76,
4,
128,
141,
4,
128,
190,
3,
27,
3,
15,
13,
0,
6,
1,
1,
3,
1,
4,
2,
8,
8,
9,
2,
10,
5,
11,
2,
14,
4,
16,
1,
17,
2,
18,
5,
19,
17,
20,
1,
21,
2,
23,
2,
25,
13,
28,
5,
29,
8,
36,
1,
106,
3,
107,
2,
188,
2,
209,
2,
212,
12,
213,
9,
214,
2,
215,
2,
218,
1,
224,
5,
225,
2,
232,
2,
238,
32,
240,
4,
248,
2,
249,
2,
250,
2,
251,
1,
12,
39,
59,
62,
78,
79,
143,
158,
158,
159,
6,
7,
9,
54,
61,
62,
86,
243,
208,
209,
4,
20,
24,
54,
55,
86,
87,
127,
170,
174,
175,
189,
53,
224,
18,
135,
137,
142,
158,
4,
13,
14,
17,
18,
41,
49,
52,
58,
69,
70,
73,
74,
78,
79,
100,
101,
92,
182,
183,
27,
28,
7,
8,
10,
11,
20,
23,
54,
57,
58,
168,
169,
216,
217,
9,
55,
144,
145,
168,
7,
10,
59,
62,
102,
105,
143,
146,
111,
95,
238,
239,
90,
98,
154,
155,
39,
40,
85,
157,
160,
161,
163,
164,
167,
168,
173,
186,
188,
196,
6,
11,
12,
21,
29,
58,
63,
69,
81,
166,
167,
204,
205,
160,
7,
25,
26,
34,
37,
62,
63,
197,
198,
4,
32,
35,
37,
38,
40,
51,
56,
58,
72,
74,
76,
80,
83,
85,
86,
88,
90,
92,
94,
96,
99,
101,
102,
107,
115,
120,
125,
127,
138,
164,
170,
175,
176,
192,
208,
174,
175,
121,
204,
110,
111,
147,
94,
34,
123,
5,
3,
4,
45,
3,
102,
3,
1,
47,
46,
128,
130,
29,
3,
49,
15,
28,
4,
36,
9,
30,
5,
43,
5,
68,
4,
14,
42,
128,
170,
6,
36,
4,
36,
4,
40,
8,
52,
11,
1,
128,
144,
129,
55,
9,
22,
10,
8,
128,
152,
57,
3,
99,
8,
9,
48,
22,
5,
33,
3,
27,
5,
1,
64,
56,
4,
75,
5,
47,
4,
10,
7,
9,
7,
64,
32,
39,
4,
12,
9,
54,
3,
58,
5,
26,
7,
4,
12,
7,
80,
73,
55,
51,
13,
51,
7,
46,
8,
10,
129,
38,
82,
78,
40,
8,
42,
86,
28,
20,
23,
9,
78,
4,
30,
15,
67,
14,
25,
7,
10,
6,
72,
8,
39,
9,
117,
11,
63,
65,
42,
6,
59,
5,
10,
6,
81,
6,
1,
5,
16,
3,
5,
128,
139,
98,
30,
72,
8,
10,
128,
166,
94,
34,
69,
11,
10,
6,
13,
19,
57,
7,
10,
54,
44,
4,
16,
128,
192,
60,
100,
83,
12,
72,
9,
10,
70,
69,
27,
72,
8,
83,
29,
57,
129,
7,
70,
10,
29,
3,
71,
73,
55,
3,
14,
8,
10,
6,
57,
7,
10,
129,
54,
25,
128,
183,
1,
15,
50,
13,
131,
155,
102,
117,
11,
128,
196,
138,
188,
132,
47,
143,
209,
130,
71,
161,
185,
130,
57,
7,
42,
4,
2,
96,
38,
10,
70,
10,
40,
5,
19,
130,
176,
91,
101,
75,
4,
57,
7,
17,
64,
5,
11,
2,
14,
151,
248,
8,
132,
214,
42,
9,
162,
247,
129,
31,
49,
3,
17,
4,
8,
129,
140,
137,
4,
107,
5,
13,
3,
9,
7,
16,
147,
96,
128,
246,
10,
115,
8,
110,
23,
70,
128,
154,
20,
12,
87,
9,
25,
128,
135,
129,
71,
3,
133,
66,
15,
21,
133,
80,
43,
128,
213,
45,
3,
26,
4,
2,
129,
112,
58,
5,
1,
133,
0,
128,
215,
41,
76,
4,
10,
4,
2,
131,
17,
68,
76,
61,
128,
194,
60,
6,
1,
4,
85,
5,
27,
52,
2,
129,
14,
44,
4,
100,
12,
86,
10,
128,
174,
56,
29,
13,
44,
4,
9,
7,
2,
14,
6,
128,
154,
131,
216,
8,
13,
3,
13,
3,
116,
12,
89,
7,
12,
20,
12,
4,
56,
8,
10,
6,
40,
8,
34,
78,
129,
84,
12,
21,
3,
3,
5,
7,
9,
25,
7,
7,
9,
3,
13,
7,
41,
128,
203,
37,
10,
132,
6,
115,
114,
99,
47,
108,
105,
98,
99,
111,
114,
101,
47,
117,
110,
105,
99,
111,
100,
101,
47,
117,
110,
105,
99,
111,
100,
101,
95,
100,
97,
116,
97,
46,
114,
115,
0,
0,
231,
111,
16,
0,
35,
0,
0,
0,
75,
0,
0,
0,
40,
0,
0,
0,
231,
111,
16,
0,
35,
0,
0,
0,
87,
0,
0,
0,
22,
0,
0,
0,
231,
111,
16,
0,
35,
0,
0,
0,
82,
0,
0,
0,
62,
0,
0,
0,
69,
114,
114,
111,
114,
0,
0,
0,
0,
3,
0,
0,
131,
4,
32,
0,
145,
5,
96,
0,
93,
19,
160,
0,
18,
23,
160,
30,
12,
32,
224,
30,
239,
44,
32,
43,
42,
48,
160,
43,
111,
166,
96,
44,
2,
168,
224,
44,
30,
251,
224,
45,
0,
254,
160,
53,
158,
255,
224,
53,
253,
1,
97,
54,
1,
10,
161,
54,
36,
13,
97,
55,
171,
14,
225,
56,
47,
24,
33,
57,
48,
28,
97,
70,
243,
30,
161,
74,
240,
106,
97,
78,
79,
111,
161,
78,
157,
188,
33,
79,
101,
209,
225,
79,
0,
218,
33,
80,
0,
224,
225,
81,
48,
225,
97,
83,
236,
226,
161,
84,
208,
232,
225,
84,
32,
0,
46,
85,
240,
1,
191,
85,
0,
112,
0,
7,
0,
45,
1,
1,
1,
2,
1,
2,
1,
1,
72,
11,
48,
21,
16,
1,
101,
7,
2,
6,
2,
2,
1,
4,
35,
1,
30,
27,
91,
11,
58,
9,
9,
1,
24,
4,
1,
9,
1,
3,
1,
5,
43,
3,
119,
15,
1,
32,
55,
1,
1,
1,
4,
8,
4,
1,
3,
7,
10,
2,
29,
1,
58,
1,
1,
1,
2,
4,
8,
1,
9,
1,
10,
2,
26,
1,
2,
2,
57,
1,
4,
2,
4,
2,
2,
3,
3,
1,
30,
2,
3,
1,
11,
2,
57,
1,
4,
5,
1,
2,
4,
1,
20,
2,
22,
6,
1,
1,
58,
1,
1,
2,
1,
4,
8,
1,
7,
3,
10,
2,
30,
1,
59,
1,
1,
1,
12,
1,
9,
1,
40,
1,
3,
1,
57,
3,
5,
3,
1,
4,
7,
2,
11,
2,
29,
1,
58,
1,
2,
1,
2,
1,
3,
1,
5,
2,
7,
2,
11,
2,
28,
2,
57,
2,
1,
1,
2,
4,
8,
1,
9,
1,
10,
2,
29,
1,
72,
1,
4,
1,
2,
3,
1,
1,
8,
1,
81,
1,
2,
7,
12,
8,
98,
1,
2,
9,
11,
6,
74,
2,
27,
1,
1,
1,
1,
1,
55,
14,
1,
5,
1,
2,
5,
11,
1,
36,
9,
1,
102,
4,
1,
6,
1,
2,
2,
2,
25,
2,
4,
3,
16,
4,
13,
1,
2,
2,
6,
1,
15,
1,
0,
3,
0,
3,
29,
3,
29,
2,
30,
2,
64,
2,
1,
7,
8,
1,
2,
11,
9,
1,
45,
3,
119,
2,
34,
1,
118,
3,
4,
2,
9,
1,
6,
3,
219,
2,
2,
1,
58,
1,
1,
7,
1,
1,
1,
1,
2,
8,
6,
10,
2,
1,
48,
17,
63,
4,
48,
7,
1,
1,
5,
1,
40,
9,
12,
2,
32,
4,
2,
2,
1,
3,
56,
1,
1,
2,
3,
1,
1,
3,
58,
8,
2,
2,
152,
3,
1,
13,
1,
7,
4,
1,
6,
1,
3,
2,
198,
58,
1,
5,
0,
1,
195,
33,
0,
3,
141,
1,
96,
32,
0,
6,
105,
2,
0,
4,
1,
10,
32,
2,
80,
2,
0,
1,
3,
1,
4,
1,
25,
2,
5,
1,
151,
2,
26,
18,
13,
1,
38,
8,
25,
11,
46,
3,
48,
1,
2,
4,
2,
2,
39,
1,
67,
6,
2,
2,
2,
2,
12,
1,
8,
1,
47,
1,
51,
1,
1,
3,
2,
2,
5,
2,
1,
1,
42,
2,
8,
1,
238,
1,
2,
1,
4,
1,
0,
1,
0,
16,
16,
16,
0,
2,
0,
1,
226,
1,
149,
5,
0,
3,
1,
2,
5,
4,
40,
3,
4,
1,
165,
2,
0,
4,
0,
2,
153,
11,
176,
1,
54,
15,
56,
3,
49,
4,
2,
2,
69,
3,
36,
5,
1,
8,
62,
1,
12,
2,
52,
9,
10,
4,
2,
1,
95,
3,
2,
1,
1,
2,
6,
1,
160,
1,
3,
8,
21,
2,
57,
2,
1,
1,
1,
1,
22,
1,
14,
7,
3,
5,
195,
8,
2,
3,
1,
1,
23,
1,
81,
1,
2,
6,
1,
1,
2,
1,
1,
2,
1,
2,
235,
1,
2,
4,
6,
2,
1,
2,
27,
2,
85,
8,
2,
1,
1,
2,
106,
1,
1,
1,
2,
6,
1,
1,
101,
3,
2,
4,
1,
5,
0,
9,
1,
2,
245,
1,
10,
2,
1,
1,
4,
1,
144,
4,
2,
2,
4,
1,
32,
10,
40,
6,
2,
4,
8,
1,
9,
6,
2,
3,
46,
13,
1,
2,
0,
7,
1,
6,
1,
1,
82,
22,
2,
7,
1,
2,
1,
2,
122,
6,
3,
1,
1,
2,
1,
7,
1,
1,
72,
2,
3,
1,
1,
1,
0,
2,
0,
5,
59,
7,
0,
1,
63,
4,
81,
1,
0,
2,
0,
1,
1,
3,
4,
5,
8,
8,
2,
7,
30,
4,
148,
3,
0,
55,
4,
50,
8,
1,
14,
1,
22,
5,
1,
15,
0,
7,
1,
17,
2,
7,
1,
2,
1,
5,
0,
7,
0,
4,
0,
7,
109,
7,
0,
96,
128,
240,
0,
131,
1,
9,
112,
114,
111,
100,
117,
99,
101,
114,
115,
2,
8,
108,
97,
110,
103,
117,
97,
103,
101,
1,
4,
82,
117,
115,
116,
0,
12,
112,
114,
111,
99,
101,
115,
115,
101,
100,
45,
98,
121,
3,
5,
114,
117,
115,
116,
99,
37,
49,
46,
52,
54,
46,
48,
45,
110,
105,
103,
104,
116,
108,
121,
32,
40,
102,
100,
52,
98,
49,
55,
55,
97,
97,
32,
50,
48,
50,
48,
45,
48,
54,
45,
48,
56,
41,
6,
119,
97,
108,
114,
117,
115,
6,
48,
46,
49,
55,
46,
48,
12,
119,
97,
115,
109,
45,
98,
105,
110,
100,
103,
101,
110,
18,
48,
46,
50,
46,
54,
51,
32,
40,
100,
102,
56,
48,
57,
100,
102,
57,
97,
41
]);
await init(wasm1);
const base64abc = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"+",
"/"
];
function encode(data) {
const uint8 = typeof data === "string" ? new TextEncoder().encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data);
let result = "", i;
const l = uint8.length;
for(i = 2; i < l; i += 3){
result += base64abc[uint8[i - 2] >> 2];
result += base64abc[(uint8[i - 2] & 3) << 4 | uint8[i - 1] >> 4];
result += base64abc[(uint8[i - 1] & 15) << 2 | uint8[i] >> 6];
result += base64abc[uint8[i] & 63];
}
if (i === l + 1) {
result += base64abc[uint8[i - 2] >> 2];
result += base64abc[(uint8[i - 2] & 3) << 4];
result += "==";
}
if (i === l) {
result += base64abc[uint8[i - 2] >> 2];
result += base64abc[(uint8[i - 2] & 3) << 4 | uint8[i - 1] >> 4];
result += base64abc[(uint8[i - 1] & 15) << 2];
result += "=";
}
return result;
}
const fetchLocal = async (url, onlyData)=>{
const file = await Deno.readFile(url);
const data = encode(file);
const contentType = `image/${url.split(".").reverse()[0]}`;
return onlyData ? data : `data:${contentType};base64,${data}`;
};
const fetchRemote = async (url, onlyData)=>{
const resp = await fetch(url);
if (resp.status !== 200) throw new Error(`Request Failed. Server responsed with code ${resp.status}`);
const contentType = resp.headers.get('content-type') ?? 'application/octet-stream';
const buff = await resp.arrayBuffer();
const data = encode(buff);
return onlyData ? data : `data:${contentType};base64,${data}`;
};
const fetchAuto1 = (path, onlyData)=>{
try {
new URL(path);
return fetchRemote(path, onlyData);
} catch (e) {
return fetchLocal(path, onlyData);
}
};
class DenoStdInternalError extends Error {
constructor(message3){
super(message3);
this.name = "DenoStdInternalError";
}
}
function assert(expr, msg = "") {
if (!expr) {
throw new DenoStdInternalError(msg);
}
}
const osType = (()=>{
if (globalThis.Deno != null) {
return Deno.build.os;
}
const navigator = globalThis.navigator;
if (navigator?.appVersion?.includes?.("Win") ?? false) {
return "windows";
}
return "linux";
})();
const isWindows = osType === "windows";
const CHAR_FORWARD_SLASH = 47;
function assertPath(path) {
if (typeof path !== "string") {
throw new TypeError(`Path must be a string. Received ${JSON.stringify(path)}`);
}
}
function isPosixPathSeparator(code) {
return code === 47;
}
function isPathSeparator(code) {
return isPosixPathSeparator(code) || code === 92;
}
function isWindowsDeviceRoot(code) {
return code >= 97 && code <= 122 || code >= 65 && code <= 90;
}
function normalizeString(path, allowAboveRoot, separator, isPathSeparator1) {
let res = "";
let lastSegmentLength = 0;
let lastSlash = -1;
let dots = 0;
let code;
for(let i = 0, len = path.length; i <= len; ++i){
if (i < len) code = path.charCodeAt(i);
else if (isPathSeparator1(code)) break;
else code = CHAR_FORWARD_SLASH;
if (isPathSeparator1(code)) {
if (lastSlash === i - 1 || dots === 1) {
} else if (lastSlash !== i - 1 && dots === 2) {
if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 || res.charCodeAt(res.length - 2) !== 46) {
if (res.length > 2) {
const lastSlashIndex = res.lastIndexOf(separator);
if (lastSlashIndex === -1) {
res = "";
lastSegmentLength = 0;
} else {
res = res.slice(0, lastSlashIndex);
lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
}
lastSlash = i;
dots = 0;
continue;
} else if (res.length === 2 || res.length === 1) {
res = "";
lastSegmentLength = 0;
lastSlash = i;
dots = 0;
continue;
}
}
if (allowAboveRoot) {
if (res.length > 0) res += `${separator}..`;
else res = "..";
lastSegmentLength = 2;
}
} else {
if (res.length > 0) res += separator + path.slice(lastSlash + 1, i);
else res = path.slice(lastSlash + 1, i);
lastSegmentLength = i - lastSlash - 1;
}
lastSlash = i;
dots = 0;
} else if (code === 46 && dots !== -1) {
++dots;
} else {
dots = -1;
}
}
return res;
}
function _format(sep, pathObject) {
const dir = pathObject.dir || pathObject.root;
const base = pathObject.base || (pathObject.name || "") + (pathObject.ext || "");
if (!dir) return base;
if (dir === pathObject.root) return dir + base;
return dir + sep + base;
}
const sep = "\\";
const delimiter = ";";
function resolve(...pathSegments) {
let resolvedDevice = "";
let resolvedTail = "";
let resolvedAbsolute = false;
for(let i = pathSegments.length - 1; i >= -1; i--){
let path;
if (i >= 0) {
path = pathSegments[i];
} else if (!resolvedDevice) {
if (globalThis.Deno == null) {
throw new TypeError("Resolved a drive-letter-less path without a CWD.");
}
path = Deno.cwd();
} else {
if (globalThis.Deno == null) {
throw new TypeError("Resolved a relative path without a CWD.");
}
path = Deno.env.get(`=${resolvedDevice}`) || Deno.cwd();
if (path === undefined || path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\`) {
path = `${resolvedDevice}\\`;
}
}
assertPath(path);
const len = path.length;
if (len === 0) continue;
let rootEnd = 0;
let device = "";
let isAbsolute = false;
const code = path.charCodeAt(0);
if (len > 1) {
if (isPathSeparator(code)) {
isAbsolute = true;
if (isPathSeparator(path.charCodeAt(1))) {
let j = 2;
let last = j;
for(; j < len; ++j){
if (isPathSeparator(path.charCodeAt(j))) break;
}
if (j < len && j !== last) {
const firstPart = path.slice(last, j);
last = j;
for(; j < len; ++j){
if (!isPathSeparator(path.charCodeAt(j))) break;
}
if (j < len && j !== last) {
last = j;
for(; j < len; ++j){
if (isPathSeparator(path.charCodeAt(j))) break;
}
if (j === len) {
device = `\\\\${firstPart}\\${path.slice(last)}`;
rootEnd = j;
} else if (j !== last) {
device = `\\\\${firstPart}\\${path.slice(last, j)}`;
rootEnd = j;
}
}
}
} else {
rootEnd = 1;
}
} else if (isWindowsDeviceRoot(code)) {
if (path.charCodeAt(1) === 58) {
device = path.slice(0, 2);
rootEnd = 2;
if (len > 2) {
if (isPathSeparator(path.charCodeAt(2))) {
isAbsolute = true;
rootEnd = 3;
}
}
}
}
} else if (isPathSeparator(code)) {
rootEnd = 1;
isAbsolute = true;
}
if (device.length > 0 && resolvedDevice.length > 0 && device.toLowerCase() !== resolvedDevice.toLowerCase()) {
continue;
}
if (resolvedDevice.length === 0 && device.length > 0) {
resolvedDevice = device;
}
if (!resolvedAbsolute) {
resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`;
resolvedAbsolute = isAbsolute;
}
if (resolvedAbsolute && resolvedDevice.length > 0) break;
}
resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, "\\", isPathSeparator);
return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || ".";
}
function normalize(path) {
assertPath(path);
const len = path.length;
if (len === 0) return ".";
let rootEnd = 0;
let device;
let isAbsolute = false;
const code = path.charCodeAt(0);
if (len > 1) {
if (isPathSeparator(code)) {
isAbsolute = true;
if (isPathSeparator(path.charCodeAt(1))) {
let j = 2;
let last = j;
for(; j < len; ++j){
if (isPathSeparator(path.charCodeAt(j))) break;
}
if (j < len && j !== last) {
const firstPart = path.slice(last, j);
last = j;
for(; j < len; ++j){
if (!isPathSeparator(path.charCodeAt(j))) break;
}
if (j < len && j !== last) {
last = j;
for(; j < len; ++j){
if (isPathSeparator(path.charCodeAt(j))) break;
}
if (j === len) {
return `\\\\${firstPart}\\${path.slice(last)}\\`;
} else if (j !== last) {
device = `\\\\${firstPart}\\${path.slice(last, j)}`;
rootEnd = j;
}
}
}
} else {
rootEnd = 1;
}
} else if (isWindowsDeviceRoot(code)) {
if (path.charCodeAt(1) === 58) {
device = path.slice(0, 2);
rootEnd = 2;
if (len > 2) {
if (isPathSeparator(path.charCodeAt(2))) {
isAbsolute = true;
rootEnd = 3;
}
}
}
}
} else if (isPathSeparator(code)) {
return "\\";
}
let tail;
if (rootEnd < len) {
tail = normalizeString(path.slice(rootEnd), !isAbsolute, "\\", isPathSeparator);
} else {
tail = "";
}
if (tail.length === 0 && !isAbsolute) tail = ".";
if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {
tail += "\\";
}
if (device === undefined) {
if (isAbsolute) {
if (tail.length > 0) return `\\${tail}`;
else return "\\";
} else if (tail.length > 0) {
return tail;
} else {
return "";
}
} else if (isAbsolute) {
if (tail.length > 0) return `${device}\\${tail}`;
else return `${device}\\`;
} else if (tail.length > 0) {
return device + tail;
} else {
return device;
}
}
function isAbsolute(path) {
assertPath(path);
const len = path.length;
if (len === 0) return false;
const code = path.charCodeAt(0);
if (isPathSeparator(code)) {
return true;
} else if (isWindowsDeviceRoot(code)) {
if (len > 2 && path.charCodeAt(1) === 58) {
if (isPathSeparator(path.charCodeAt(2))) return true;
}
}
return false;
}
function join(...paths) {
const pathsCount = paths.length;
if (pathsCount === 0) return ".";
let joined;
let firstPart = null;
for(let i = 0; i < pathsCount; ++i){
const path = paths[i];
assertPath(path);
if (path.length > 0) {
if (joined === undefined) joined = firstPart = path;
else joined += `\\${path}`;
}
}
if (joined === undefined) return ".";
let needsReplace = true;
let slashCount = 0;
assert(firstPart != null);
if (isPathSeparator(firstPart.charCodeAt(0))) {
++slashCount;
const firstLen = firstPart.length;
if (firstLen > 1) {
if (isPathSeparator(firstPart.charCodeAt(1))) {
++slashCount;
if (firstLen > 2) {
if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount;
else {
needsReplace = false;
}
}
}
}
}
if (needsReplace) {
for(; slashCount < joined.length; ++slashCount){
if (!isPathSeparator(joined.charCodeAt(slashCount))) break;
}
if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`;
}
return normalize(joined);
}
function relative(from, to) {
assertPath(from);
assertPath(to);
if (from === to) return "";
const fromOrig = resolve(from);
const toOrig = resolve(to);
if (fromOrig === toOrig) return "";
from = fromOrig.toLowerCase();
to = toOrig.toLowerCase();
if (from === to) return "";
let fromStart = 0;
let fromEnd = from.length;
for(; fromStart < fromEnd; ++fromStart){
if (from.charCodeAt(fromStart) !== 92) break;
}
for(; fromEnd - 1 > fromStart; --fromEnd){
if (from.charCodeAt(fromEnd - 1) !== 92) break;
}
const fromLen = fromEnd - fromStart;
let toStart = 0;
let toEnd = to.length;
for(; toStart < toEnd; ++toStart){
if (to.charCodeAt(toStart) !== 92) break;
}
for(; toEnd - 1 > toStart; --toEnd){
if (to.charCodeAt(toEnd - 1) !== 92) break;
}
const toLen = toEnd - toStart;
const length = fromLen < toLen ? fromLen : toLen;
let lastCommonSep = -1;
let i = 0;
for(; i <= length; ++i){
if (i === length) {
if (toLen > length) {
if (to.charCodeAt(toStart + i) === 92) {
return toOrig.slice(toStart + i + 1);
} else if (i === 2) {
return toOrig.slice(toStart + i);
}
}
if (fromLen > length) {
if (from.charCodeAt(fromStart + i) === 92) {
lastCommonSep = i;
} else if (i === 2) {
lastCommonSep = 3;
}
}
break;
}
const fromCode = from.charCodeAt(fromStart + i);
const toCode = to.charCodeAt(toStart + i);
if (fromCode !== toCode) break;
else if (fromCode === 92) lastCommonSep = i;
}
if (i !== length && lastCommonSep === -1) {
return toOrig;
}
let out = "";
if (lastCommonSep === -1) lastCommonSep = 0;
for(i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i){
if (i === fromEnd || from.charCodeAt(i) === 92) {
if (out.length === 0) out += "..";
else out += "\\..";
}
}
if (out.length > 0) {
return out + toOrig.slice(toStart + lastCommonSep, toEnd);
} else {
toStart += lastCommonSep;
if (toOrig.charCodeAt(toStart) === 92) ++toStart;
return toOrig.slice(toStart, toEnd);
}
}
function toNamespacedPath(path) {
if (typeof path !== "string") return path;
if (path.length === 0) return "";
const resolvedPath = resolve(path);
if (resolvedPath.length >= 3) {
if (resolvedPath.charCodeAt(0) === 92) {
if (resolvedPath.charCodeAt(1) === 92) {
const code = resolvedPath.charCodeAt(2);
if (code !== 63 && code !== 46) {
return `\\\\?\\UNC\\${resolvedPath.slice(2)}`;
}
}
} else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) {
if (resolvedPath.charCodeAt(1) === 58 && resolvedPath.charCodeAt(2) === 92) {
return `\\\\?\\${resolvedPath}`;
}
}
}
return path;
}
function dirname(path) {
assertPath(path);
const len = path.length;
if (len === 0) return ".";
let rootEnd = -1;
let end = -1;
let matchedSlash = true;
let offset = 0;
const code = path.charCodeAt(0);
if (len > 1) {
if (isPathSeparator(code)) {
rootEnd = offset = 1;
if (isPathSeparator(path.charCodeAt(1))) {
let j = 2;
let last = j;
for(; j < len; ++j){
if (isPathSeparator(path.charCodeAt(j))) break;
}
if (j < len && j !== last) {
last = j;
for(; j < len; ++j){
if (!isPathSeparator(path.charCodeAt(j))) break;
}
if (j < len && j !== last) {
last = j;
for(; j < len; ++j){
if (isPathSeparator(path.charCodeAt(j))) break;
}
if (j === len) {
return path;
}
if (j !== last) {
rootEnd = offset = j + 1;
}
}
}
}
} else if (isWindowsDeviceRoot(code)) {
if (path.charCodeAt(1) === 58) {
rootEnd = offset = 2;
if (len > 2) {
if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3;
}
}
}
} else if (isPathSeparator(code)) {
return path;
}
for(let i = len - 1; i >= offset; --i){
if (isPathSeparator(path.charCodeAt(i))) {
if (!matchedSlash) {
end = i;
break;
}
} else {
matchedSlash = false;
}
}
if (end === -1) {
if (rootEnd === -1) return ".";
else end = rootEnd;
}
return path.slice(0, end);
}
function basename(path, ext = "") {
if (ext !== undefined && typeof ext !== "string") {
throw new TypeError('"ext" argument must be a string');
}
assertPath(path);
let start = 0;
let end = -1;
let matchedSlash = true;
let i;
if (path.length >= 2) {
const drive = path.charCodeAt(0);
if (isWindowsDeviceRoot(drive)) {
if (path.charCodeAt(1) === 58) start = 2;
}
}
if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {
if (ext.length === path.length && ext === path) return "";
let extIdx = ext.length - 1;
let firstNonSlashEnd = -1;
for(i = path.length - 1; i >= start; --i){
const code = path.charCodeAt(i);
if (isPathSeparator(code)) {
if (!matchedSlash) {
start = i + 1;
break;
}
} else {
if (firstNonSlashEnd === -1) {
matchedSlash = false;
firstNonSlashEnd = i + 1;
}
if (extIdx >= 0) {
if (code === ext.charCodeAt(extIdx)) {
if ((--extIdx) === -1) {
end = i;
}
} else {
extIdx = -1;
end = firstNonSlashEnd;
}
}
}
}
if (start === end) end = firstNonSlashEnd;
else if (end === -1) end = path.length;
return path.slice(start, end);
} else {
for(i = path.length - 1; i >= start; --i){
if (isPathSeparator(path.charCodeAt(i))) {
if (!matchedSlash) {
start = i + 1;
break;
}
} else if (end === -1) {
matchedSlash = false;
end = i + 1;
}
}
if (end === -1) return "";
return path.slice(start, end);
}
}
function extname(path) {
assertPath(path);
let start = 0;
let startDot = -1;
let startPart = 0;
let end = -1;
let matchedSlash = true;
let preDotState = 0;
if (path.length >= 2 && path.charCodeAt(1) === 58 && isWindowsDeviceRoot(path.charCodeAt(0))) {
start = startPart = 2;
}
for(let i = path.length - 1; i >= start; --i){
const code = path.charCodeAt(i);
if (isPathSeparator(code)) {
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
matchedSlash = false;
end = i + 1;
}
if (code === 46) {
if (startDot === -1) startDot = i;
else if (preDotState !== 1) preDotState = 1;
} else if (startDot !== -1) {
preDotState = -1;
}
}
if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
return "";
}
return path.slice(startDot, end);
}
function format3(pathObject) {
if (pathObject === null || typeof pathObject !== "object") {
throw new TypeError(`The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`);
}
return _format("\\", pathObject);
}
function parse(path) {
assertPath(path);
const ret = {
root: "",
dir: "",
base: "",
ext: "",
name: ""
};
const len = path.length;
if (len === 0) return ret;
let rootEnd = 0;
let code = path.charCodeAt(0);
if (len > 1) {
if (isPathSeparator(code)) {
rootEnd = 1;
if (isPathSeparator(path.charCodeAt(1))) {
let j = 2;
let last = j;
for(; j < len; ++j){
if (isPathSeparator(path.charCodeAt(j))) break;
}
if (j < len && j !== last) {
last = j;
for(; j < len; ++j){
if (!isPathSeparator(path.charCodeAt(j))) break;
}
if (j < len && j !== last) {
last = j;
for(; j < len; ++j){
if (isPathSeparator(path.charCodeAt(j))) break;
}
if (j === len) {
rootEnd = j;
} else if (j !== last) {
rootEnd = j + 1;
}
}
}
}
} else if (isWindowsDeviceRoot(code)) {
if (path.charCodeAt(1) === 58) {
rootEnd = 2;
if (len > 2) {
if (isPathSeparator(path.charCodeAt(2))) {
if (len === 3) {
ret.root = ret.dir = path;
return ret;
}
rootEnd = 3;
}
} else {
ret.root = ret.dir = path;
return ret;
}
}
}
} else if (isPathSeparator(code)) {
ret.root = ret.dir = path;
return ret;
}
if (rootEnd > 0) ret.root = path.slice(0, rootEnd);
let startDot = -1;
let startPart = rootEnd;
let end = -1;
let matchedSlash = true;
let i = path.length - 1;
let preDotState = 0;
for(; i >= rootEnd; --i){
code = path.charCodeAt(i);
if (isPathSeparator(code)) {
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
matchedSlash = false;
end = i + 1;
}
if (code === 46) {
if (startDot === -1) startDot = i;
else if (preDotState !== 1) preDotState = 1;
} else if (startDot !== -1) {
preDotState = -1;
}
}
if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
if (end !== -1) {
ret.base = ret.name = path.slice(startPart, end);
}
} else {
ret.name = path.slice(startPart, startDot);
ret.base = path.slice(startPart, end);
ret.ext = path.slice(startDot, end);
}
if (startPart > 0 && startPart !== rootEnd) {
ret.dir = path.slice(0, startPart - 1);
} else ret.dir = ret.root;
return ret;
}
function fromFileUrl(url) {
url = url instanceof URL ? url : new URL(url);
if (url.protocol != "file:") {
throw new TypeError("Must be a file URL.");
}
let path = decodeURIComponent(url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25")).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\");
if (url.hostname != "") {
path = `\\\\${url.hostname}${path}`;
}
return path;
}
function toFileUrl(path) {
if (!isAbsolute(path)) {
throw new TypeError("Must be an absolute path.");
}
const [, hostname, pathname] = path.match(/^(?:[/\\]{2}([^/\\]+)(?=[/\\][^/\\]))?(.*)/);
const url = new URL("file:///");
url.pathname = pathname.replace(/%/g, "%25");
if (hostname != null) {
url.hostname = hostname;
if (!url.hostname) {
throw new TypeError("Invalid hostname.");
}
}
return url;
}
const mod2 = function() {
return {
sep: sep,
delimiter: delimiter,
resolve: resolve,
normalize: normalize,
isAbsolute: isAbsolute,
join: join,
relative: relative,
toNamespacedPath: toNamespacedPath,
dirname: dirname,
basename: basename,
extname: extname,
format: format3,
parse: parse,
fromFileUrl: fromFileUrl,
toFileUrl: toFileUrl
};
}();
const sep1 = "/";
const delimiter1 = ":";
function resolve1(...pathSegments) {
let resolvedPath = "";
let resolvedAbsolute = false;
for(let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--){
let path;
if (i >= 0) path = pathSegments[i];
else {
if (globalThis.Deno == null) {
throw new TypeError("Resolved a relative path without a CWD.");
}
path = Deno.cwd();
}
assertPath(path);
if (path.length === 0) {
continue;
}
resolvedPath = `${path}/${resolvedPath}`;
resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;
}
resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, "/", isPosixPathSeparator);
if (resolvedAbsolute) {
if (resolvedPath.length > 0) return `/${resolvedPath}`;
else return "/";
} else if (resolvedPath.length > 0) return resolvedPath;
else return ".";
}
function normalize1(path) {
assertPath(path);
if (path.length === 0) return ".";
const isAbsolute1 = path.charCodeAt(0) === 47;
const trailingSeparator = path.charCodeAt(path.length - 1) === 47;
path = normalizeString(path, !isAbsolute1, "/", isPosixPathSeparator);
if (path.length === 0 && !isAbsolute1) path = ".";
if (path.length > 0 && trailingSeparator) path += "/";
if (isAbsolute1) return `/${path}`;
return path;
}
function isAbsolute1(path) {
assertPath(path);
return path.length > 0 && path.charCodeAt(0) === 47;
}
function join1(...paths) {
if (paths.length === 0) return ".";
let joined;
for(let i = 0, len = paths.length; i < len; ++i){
const path = paths[i];
assertPath(path);
if (path.length > 0) {
if (!joined) joined = path;
else joined += `/${path}`;
}
}
if (!joined) return ".";
return normalize1(joined);
}
function relative1(from, to) {
assertPath(from);
assertPath(to);
if (from === to) return "";
from = resolve1(from);
to = resolve1(to);
if (from === to) return "";
let fromStart = 1;
const fromEnd = from.length;
for(; fromStart < fromEnd; ++fromStart){
if (from.charCodeAt(fromStart) !== 47) break;
}
const fromLen = fromEnd - fromStart;
let toStart = 1;
const toEnd = to.length;
for(; toStart < toEnd; ++toStart){
if (to.charCodeAt(toStart) !== 47) break;
}
const toLen = toEnd - toStart;
const length = fromLen < toLen ? fromLen : toLen;
let lastCommonSep = -1;
let i = 0;
for(; i <= length; ++i){
if (i === length) {
if (toLen > length) {
if (to.charCodeAt(toStart + i) === 47) {
return to.slice(toStart + i + 1);
} else if (i === 0) {
return to.slice(toStart + i);
}
} else if (fromLen > length) {
if (from.charCodeAt(fromStart + i) === 47) {
lastCommonSep = i;
} else if (i === 0) {
lastCommonSep = 0;
}
}
break;
}
const fromCode = from.charCodeAt(fromStart + i);
const toCode = to.charCodeAt(toStart + i);
if (fromCode !== toCode) break;
else if (fromCode === 47) lastCommonSep = i;
}
let out = "";
for(i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i){
if (i === fromEnd || from.charCodeAt(i) === 47) {
if (out.length === 0) out += "..";
else out += "/..";
}
}
if (out.length > 0) return out + to.slice(toStart + lastCommonSep);
else {
toStart += lastCommonSep;
if (to.charCodeAt(toStart) === 47) ++toStart;
return to.slice(toStart);
}
}
function toNamespacedPath1(path) {
return path;
}
function dirname1(path) {
assertPath(path);
if (path.length === 0) return ".";
const hasRoot = path.charCodeAt(0) === 47;
let end = -1;
let matchedSlash = true;
for(let i = path.length - 1; i >= 1; --i){
if (path.charCodeAt(i) === 47) {
if (!matchedSlash) {
end = i;
break;
}
} else {
matchedSlash = false;
}
}
if (end === -1) return hasRoot ? "/" : ".";
if (hasRoot && end === 1) return "//";
return path.slice(0, end);
}
function basename1(path, ext = "") {
if (ext !== undefined && typeof ext !== "string") {
throw new TypeError('"ext" argument must be a string');
}
assertPath(path);
let start = 0;
let end = -1;
let matchedSlash = true;
let i;
if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {
if (ext.length === path.length && ext === path) return "";
let extIdx = ext.length - 1;
let firstNonSlashEnd = -1;
for(i = path.length - 1; i >= 0; --i){
const code = path.charCodeAt(i);
if (code === 47) {
if (!matchedSlash) {
start = i + 1;
break;
}
} else {
if (firstNonSlashEnd === -1) {
matchedSlash = false;
firstNonSlashEnd = i + 1;
}
if (extIdx >= 0) {
if (code === ext.charCodeAt(extIdx)) {
if ((--extIdx) === -1) {
end = i;
}
} else {
extIdx = -1;
end = firstNonSlashEnd;
}
}
}
}
if (start === end) end = firstNonSlashEnd;
else if (end === -1) end = path.length;
return path.slice(start, end);
} else {
for(i = path.length - 1; i >= 0; --i){
if (path.charCodeAt(i) === 47) {
if (!matchedSlash) {
start = i + 1;
break;
}
} else if (end === -1) {
matchedSlash = false;
end = i + 1;
}
}
if (end === -1) return "";
return path.slice(start, end);
}
}
function extname1(path) {
assertPath(path);
let startDot = -1;
let startPart = 0;
let end = -1;
let matchedSlash = true;
let preDotState = 0;
for(let i = path.length - 1; i >= 0; --i){
const code = path.charCodeAt(i);
if (code === 47) {
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
matchedSlash = false;
end = i + 1;
}
if (code === 46) {
if (startDot === -1) startDot = i;
else if (preDotState !== 1) preDotState = 1;
} else if (startDot !== -1) {
preDotState = -1;
}
}
if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
return "";
}
return path.slice(startDot, end);
}
function format1(pathObject) {
if (pathObject === null || typeof pathObject !== "object") {
throw new TypeError(`The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`);
}
return _format("/", pathObject);
}
function parse1(path) {
assertPath(path);
const ret = {
root: "",
dir: "",
base: "",
ext: "",
name: ""
};
if (path.length === 0) return ret;
const isAbsolute2 = path.charCodeAt(0) === 47;
let start;
if (isAbsolute2) {
ret.root = "/";
start = 1;
} else {
start = 0;
}
let startDot = -1;
let startPart = 0;
let end = -1;
let matchedSlash = true;
let i = path.length - 1;
let preDotState = 0;
for(; i >= start; --i){
const code = path.charCodeAt(i);
if (code === 47) {
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
matchedSlash = false;
end = i + 1;
}
if (code === 46) {
if (startDot === -1) startDot = i;
else if (preDotState !== 1) preDotState = 1;
} else if (startDot !== -1) {
preDotState = -1;
}
}
if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
if (end !== -1) {
if (startPart === 0 && isAbsolute2) {
ret.base = ret.name = path.slice(1, end);
} else {
ret.base = ret.name = path.slice(startPart, end);
}
}
} else {
if (startPart === 0 && isAbsolute2) {
ret.name = path.slice(1, startDot);
ret.base = path.slice(1, end);
} else {
ret.name = path.slice(startPart, startDot);
ret.base = path.slice(startPart, end);
}
ret.ext = path.slice(startDot, end);
}
if (startPart > 0) ret.dir = path.slice(0, startPart - 1);
else if (isAbsolute2) ret.dir = "/";
return ret;
}
function fromFileUrl1(url) {
url = url instanceof URL ? url : new URL(url);
if (url.protocol != "file:") {
throw new TypeError("Must be a file URL.");
}
return decodeURIComponent(url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"));
}
function toFileUrl1(path) {
if (!isAbsolute1(path)) {
throw new TypeError("Must be an absolute path.");
}
const url = new URL("file:///");
url.pathname = path.replace(/%/g, "%25").replace(/\\/g, "%5C");
return url;
}
const mod1 = function() {
return {
sep: sep1,
delimiter: delimiter1,
resolve: resolve1,
normalize: normalize1,
isAbsolute: isAbsolute1,
join: join1,
relative: relative1,
toNamespacedPath: toNamespacedPath1,
dirname: dirname1,
basename: basename1,
extname: extname1,
format: format1,
parse: parse1,
fromFileUrl: fromFileUrl1,
toFileUrl: toFileUrl1
};
}();
const path1 = isWindows ? mod2 : mod1;
const { basename: basename2 , delimiter: delimiter2 , dirname: dirname2 , extname: extname2 , format: format2 , fromFileUrl: fromFileUrl2 , isAbsolute: isAbsolute2 , join: join2 , normalize: normalize2 , parse: parse2 , relative: relative2 , resolve: resolve2 , sep: sep2 , toFileUrl: toFileUrl2 , toNamespacedPath: toNamespacedPath2 , } = path1;
async function _createWalkEntry(path1) {
path1 = normalize2(path1);
const name = basename2(path1);
const info = await Deno.stat(path1);
return {
path: path1,
name,
isFile: info.isFile,
isDirectory: info.isDirectory,
isSymlink: info.isSymlink
};
}
function include(path1, exts, match, skip) {
if (exts && !exts.some((ext)=>path1.endsWith(ext)
)) {
return false;
}
if (match && !match.some((pattern)=>!!path1.match(pattern)
)) {
return false;
}
if (skip && skip.some((pattern)=>!!path1.match(pattern)
)) {
return false;
}
return true;
}
async function* walk(root, { maxDepth =Infinity , includeFiles =true , includeDirs =true , followSymlinks =false , exts =undefined , match =undefined , skip =undefined } = {
}) {
if (maxDepth < 0) {
return;
}
if (includeDirs && include(root, exts, match, skip)) {
yield await _createWalkEntry(root);
}
if (maxDepth < 1 || !include(root, undefined, undefined, skip)) {
return;
}
for await (const entry of Deno.readDir(root)){
assert(entry.name != null);
let path1 = join2(root, entry.name);
if (entry.isSymlink) {
if (followSymlinks) {
path1 = await Deno.realPath(path1);
} else {
continue;
}
}
if (entry.isFile) {
if (includeFiles && include(path1, exts, match, skip)) {
yield {
path: path1,
...entry
};
}
} else {
yield* walk(path1, {
maxDepth: maxDepth - 1,
includeFiles,
includeDirs,
followSymlinks,
exts,
match,
skip
});
}
}
}
var G = Object.create, b1 = Object.defineProperty, H = Object.getPrototypeOf, J = Object.prototype.hasOwnProperty, Q = Object.getOwnPropertyNames, R = Object.getOwnPropertyDescriptor;
var U = (e)=>b1(e, "__esModule", {
value: !0
})
;
var h = (e, t)=>()=>(t || e((t = {
exports: {
}
}).exports, t), t.exports)
;
var V = (e, t, o)=>{
if (t && typeof t == "object" || typeof t == "function") for (let r of Q(t))!J.call(e, r) && r !== "default" && b1(e, r, {
get: ()=>t[r]
,
enumerable: !(o = R(t, r)) || o.enumerable
});
return e;
}, I = (e)=>V(U(b1(e != null ? G(H(e)) : {
}, "default", e && e.__esModule && "default" in e ? {
get: ()=>e.default
,
enumerable: !0
} : {
value: e,
enumerable: !0
})), e)
;
var m = h((u)=>{
"use strict";
Object.defineProperty(u, "__esModule", {
value: !0
});
u.flatten = u.unique = u.softMixProtos = u.hardMixProtos = u.nearestCommonProto = u.protoChain = u.copyProps = void 0;
var X = w1();
u.copyProps = (e, t, o = [])=>{
let r = Object.getOwnPropertyDescriptors(t);
for (let n of o)delete r[n];
Object.defineProperties(e, r);
};
u.protoChain = (e, t = [
e
])=>{
let o = Object.getPrototypeOf(e);
return o === null ? t : u.protoChain(o, [
...t,
o
]);
};
u.nearestCommonProto = (...e)=>{
if (e.length === 0) return;
let t, o = e.map((r)=>u.protoChain(r)
);
for(; o.every((r)=>r.length > 0
);){
let r = o.map((i)=>i.pop()
), n = r[0];
if (r.every((i)=>i === n
)) t = n;
else break;
}
return t;
};
u.hardMixProtos = (e, t, o = [])=>{
var r;
let n = (r = u.nearestCommonProto(...e)) !== null && r !== void 0 ? r : Object.prototype, i = Object.create(n), a = u.protoChain(n);
for (let l of e){
let s = u.protoChain(l);
for(let c = s.length - 1; c >= 0; c--){
let d = s[c];
a.indexOf(d) === -1 && (u.copyProps(i, d, [
"constructor",
...o
]), a.push(d));
}
}
return i.constructor = t, i;
};
u.softMixProtos = (e, t)=>X.proxyMix([
...e,
{
constructor: t
}
])
;
u.unique = (e)=>e.filter((t, o)=>e.indexOf(t) == o
)
;
u.flatten = (e)=>e.length === 0 ? [] : e.length === 1 ? e[0] : e.reduce((t, o)=>[
...t,
...o
]
)
;
});
var w1 = h((f)=>{
"use strict";
Object.defineProperty(f, "__esModule", {
value: !0
});
f.proxyMix = f.getIngredientWithProp = void 0;
var Y = m();
f.getIngredientWithProp = (e, t)=>{
let o = t.map((i)=>Y.protoChain(i)
), r = 0, n = !0;
for(; n;){
n = !1;
for(let i = t.length - 1; i >= 0; i--){
let a = o[i][r];
if (a != null && (n = !0, Object.getOwnPropertyDescriptor(a, e) != null)) return o[i][0];
}
r++;
}
};
f.proxyMix = (e, t = Object.prototype)=>new Proxy({
}, {
getPrototypeOf () {
return t;
},
setPrototypeOf () {
throw Error("Cannot set prototype of Proxies created by ts-mixer");
},
getOwnPropertyDescriptor (o, r) {
return Object.getOwnPropertyDescriptor(f.getIngredientWithProp(r, e) || {
}, r);
},
defineProperty () {
throw new Error("Cannot define new properties on Proxies created by ts-mixer");
},
has (o, r) {
return f.getIngredientWithProp(r, e) !== void 0 || t[r] !== void 0;
},
get (o, r) {
return (f.getIngredientWithProp(r, e) || t)[r];
},
set (o, r, n) {
let i = f.getIngredientWithProp(r, e);
if (i === void 0) throw new Error("Cannot set new properties on Proxies created by ts-mixer");
return (i[r] = n, !0);
},
deleteProperty () {
throw new Error("Cannot delete properties on Proxies created by ts-mixer");
},
ownKeys () {
return e.map(Object.getOwnPropertyNames).reduce((o, r)=>r.concat(o.filter((n)=>r.indexOf(n) < 0
))
);
}
})
;
});
var D = h((P)=>{
"use strict";
Object.defineProperty(P, "__esModule", {
value: !0
});
P.settings = void 0;
P.settings = {
initFunction: null,
staticsStrategy: "copy",
prototypeStrategy: "copy",
decoratorInheritance: "deep"
};
});
var C = h((y)=>{
"use strict";
Object.defineProperty(y, "__esModule", {
value: !0
});
y.hasMixin = y.registerMixins = y.getMixinsForClass = void 0;
var Z = m(), F = new Map;
y.getMixinsForClass = (e)=>F.get(e)
;
y.registerMixins = (e, t)=>F.set(e, t)
;
y.hasMixin = (e, t)=>{
if (e instanceof t) return !0;
let o = e.constructor, r = new Set, n = new Set;
for(n.add(o); n.size > 0;){
if (n.has(t)) return !0;
n.forEach((a)=>r.add(a)
);
let i = new Set;
n.forEach((a)=>{
var l;
let s = (l = F.get(a)) !== null && l !== void 0 ? l : Z.protoChain(a.prototype).map((c)=>c.constructor
).filter((c)=>c !== null
);
s && s.forEach((c)=>{
!r.has(c) && !n.has(c) && i.add(c);
});
}), n = i;
}
return !1;
};
});
var q = h((p)=>{
"use strict";
Object.defineProperty(p, "__esModule", {
value: !0
});
p.decorate = p.getDecoratorsForClass = p.directDecoratorSearch = p.deepDecoratorSearch = void 0;
var O = m(), $ = C(), T = (e, t)=>{
var o, r;
let n = O.unique([
...Object.getOwnPropertyNames(e),
...Object.getOwnPropertyNames(t)
]), i = {
};
for (let a of n)i[a] = O.unique([
...(o = e == null ? void 0 : e[a]) !== null && o !== void 0 ? o : [],
...(r = t == null ? void 0 : t[a]) !== null && r !== void 0 ? r : []
]);
return i;
}, k = (e, t)=>{
var o, r, n, i;
return {
property: T((o = e == null ? void 0 : e.property) !== null && o !== void 0 ? o : {
}, (r = t == null ? void 0 : t.property) !== null && r !== void 0 ? r : {
}),
method: T((n = e == null ? void 0 : e.method) !== null && n !== void 0 ? n : {
}, (i = t == null ? void 0 : t.method) !== null && i !== void 0 ? i : {
})
};
}, E = (e, t)=>{
var o, r, n, i, a, l;
return {
class: O.unique([
...(o = e == null ? void 0 : e.class) !== null && o !== void 0 ? o : [],
...(r = t == null ? void 0 : t.class) !== null && r !== void 0 ? r : []
]),
static: k((n = e == null ? void 0 : e.static) !== null && n !== void 0 ? n : {
}, (i = t == null ? void 0 : t.static) !== null && i !== void 0 ? i : {
}),
instance: k((a = e == null ? void 0 : e.instance) !== null && a !== void 0 ? a : {
}, (l = t == null ? void 0 : t.instance) !== null && l !== void 0 ? l : {
})
};
}, j = new Map, ee = (...e)=>{
var t;
let o = new Set, r = new Set([
...e
]);
for(; r.size > 0;)for (let n of r){
let i = O.protoChain(n.prototype).map((c)=>c.constructor
), a = (t = $.getMixinsForClass(n)) !== null && t !== void 0 ? t : [], s = [
...i,
...a
].filter((c)=>!o.has(c)
);
for (let c of s)r.add(c);
o.add(n), r.delete(n);
}
return [
...o
];
};
p.deepDecoratorSearch = (...e)=>{
let t = ee(...e).map((o)=>j.get(o)
).filter((o)=>!!o
);
return t.length == 0 ? {
} : t.length == 1 ? t[0] : t.reduce((o, r)=>E(o, r)
);
};
p.directDecoratorSearch = (...e)=>{
let t = e.map((o)=>p.getDecoratorsForClass(o)
);
return t.length === 0 ? {
} : t.length === 1 ? t[1] : t.reduce((o, r)=>E(o, r)
);
};
p.getDecoratorsForClass = (e)=>{
let t = j.get(e);
return t || (t = {
}, j.set(e, t)), t;
};
var te = (e)=>(t)=>{
let o = p.getDecoratorsForClass(t), r = o.class;
return r || (r = [], o.class = r), r.push(e), e(t);
}
, re = (e)=>(t, o, ...r)=>{
let n = typeof t == "function" ? "static" : "instance", i = typeof t[o] == "function" ? "method" : "property", a = n === "static" ? t : t.constructor, l = p.getDecoratorsForClass(a), s = l == null ? void 0 : l[n];
s || (s = {
}, l[n] = s);
let c = s == null ? void 0 : s[i];
c || (c = {
}, s[i] = c);
let d = c == null ? void 0 : c[o];
return d || (d = [], c[o] = d), d.push(e), e(t, o, ...r);
}
;
p.decorate = (e)=>(...t)=>t.length === 1 ? te(e)(t[0]) : re(e)(...t)
;
});
var K = h((g)=>{
"use strict";
Object.defineProperty(g, "__esModule", {
value: !0
});
g.mix = g.Mixin = void 0;
var oe = w1(), _ = D(), M = m(), W = q(), ne = C();
function A(...e) {
var t, o, r;
let n = e.map((s)=>s.prototype
), i = _.settings.initFunction;
if (i !== null) {
let s = n.map((x)=>x[i]
).filter((x)=>typeof x == "function"
), c = function(...x) {
for (let B of s)B.apply(this, x);
}, d = {
[i]: c
};
n.push(d);
}
function a(...s) {
for (let c of e)M.copyProps(this, new c(...s));
i !== null && typeof this[i] == "function" && this[i].apply(this, s);
}
a.prototype = _.settings.prototypeStrategy === "copy" ? M.hardMixProtos(n, a) : M.softMixProtos(n, a), Object.setPrototypeOf(a, _.settings.staticsStrategy === "copy" ? M.hardMixProtos(e, null, [
"prototype"
]) : oe.proxyMix(e, Function.prototype));
let l = a;
if (_.settings.decoratorInheritance !== "none") {
let s = _.settings.decoratorInheritance === "deep" ? W.deepDecoratorSearch(...e) : W.directDecoratorSearch(...e);
for (let c of (t = s == null ? void 0 : s.class) !== null && t !== void 0 ? t : [])l = c(l);
N((o = s == null ? void 0 : s.static) !== null && o !== void 0 ? o : {
}, l), N((r = s == null ? void 0 : s.instance) !== null && r !== void 0 ? r : {
}, l.prototype);
}
return ne.registerMixins(l, e), l;
}
g.Mixin = A;
var N = (e, t)=>{
let o = e.property, r = e.method;
if (o) for(let n in o)for (let i of o[n])i(t, n);
if (r) for(let n1 in r)for (let i1 of r[n1])i1(t, n1, Object.getOwnPropertyDescriptor(t, n1));
}, ie = (...e)=>(t)=>{
let o = A(...e.concat([
t
]));
return Object.defineProperty(o, "name", {
value: t.name,
writable: !1
}), o;
}
;
g.mix = ie;
});
var S = h((v)=>{
"use strict";
Object.defineProperty(v, "__esModule", {
value: !0
});
var z = K();
Object.defineProperty(v, "Mixin", {
enumerable: !0,
get: function() {
return z.Mixin;
}
});
Object.defineProperty(v, "mix", {
enumerable: !0,
get: function() {
return z.mix;
}
});
var se = D();
Object.defineProperty(v, "settings", {
enumerable: !0,
get: function() {
return se.settings;
}
});
var ce = q();
Object.defineProperty(v, "decorate", {
enumerable: !0,
get: function() {
return ce.decorate;
}
});
var ae = C();
Object.defineProperty(v, "hasMixin", {
enumerable: !0,
get: function() {
return ae.hasMixin;
}
});
});
var le = I(S()), { __esModule: me1 , Mixin: _e , mix: Pe , settings: Ce , decorate: Oe , hasMixin: Me } = le;
const Constants = {
DISCORD_API_URL: 'https://discord.com/api',
DISCORD_GATEWAY_URL: 'wss://gateway.discord.gg',
DISCORD_CDN_URL: 'https://cdn.discordapp.com',
DISCORD_API_VERSION: 8,
DISCORD_VOICE_VERSION: 4
};
const GUILDS = ()=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds`
;
const GUILD = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}`
;
const GUILD_EMOJI = (guildID, emojiID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/emojis/${emojiID}`
;
const GUILD_EMOJIS = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/emojis`
;
const GUILD_ROLE = (guildID, roleID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/roles/${roleID}`
;
const GUILD_ROLES = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/roles`
;
const GUILD_INTEGRATIONS = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/integrations`
;
const GUILD_BAN = (guildID, userID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/bans/${userID}`
;
const GUILD_BANS = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/bans`
;
const GUILD_CHANNELS = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/channels`
;
const GUILD_MEMBER = (guildID, memberID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/members/${memberID}`
;
const GUILD_MEMBER_ROLE = (guildID, memberID, roleID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/members/${memberID}/roles/${roleID}`
;
const GUILD_INVITES = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/invites`
;
const GUILD_PRUNE = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/prune`
;
const GUILD_PREVIEW = (guildID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/preview`
;
const CHANNEL = (channelID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/channels/${channelID}`
;
const CHANNEL_MESSAGE = (channelID, messageID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}`
;
const MESSAGE_REACTIONS = (channelID, messageID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions`
;
const MESSAGE_REACTION = (channelID, messageID, emoji)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emoji}`
;
const MESSAGE_REACTION_ME = (channelID, messageID, emojiID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emojiID}/@me`
;
const MESSAGE_REACTION_USER = (channelID, messageID, emojiID, userID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emojiID}/${userID}`
;
const CHANNEL_INVITES = (channelID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/channels/${channelID}/invites`
;
const USER = (userID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/users/${userID}`
;
const CUSTOM_EMOJI = (emojiID)=>`${Constants.DISCORD_CDN_URL}/emojis/${emojiID}`
;
const GUILD_ICON = (guildID, iconID)=>`${Constants.DISCORD_CDN_URL}/icons/${guildID}/${iconID}`
;
const GUILD_SPLASH = (guildID, guildSPLASH)=>`${Constants.DISCORD_CDN_URL}/splashes/${guildID}/${guildSPLASH}`
;
const GUILD_DISCOVERY_SPLASH = (guildID, guildDiscoverySplash)=>`${Constants.DISCORD_CDN_URL}/discovery-splashes/${guildID}/${guildDiscoverySplash}`
;
const GUILD_BANNER = (guildID, guildBANNER)=>`${Constants.DISCORD_CDN_URL}/banners/${guildID}/${guildBANNER}`
;
const DEFAULT_USER_AVATAR = (iconID)=>`${Constants.DISCORD_CDN_URL}/embed/avatars/${iconID}`
;
const USER_AVATAR = (userID, iconID)=>`${Constants.DISCORD_CDN_URL}/avatars/${userID}/${iconID}`
;
const EMOJI = (guildID, emojiID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/${guildID}/emojis/${emojiID}`
;
const TEMPLATE = (templateCODE)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/guilds/templates/${templateCODE}`
;
const INVITE = (inviteCODE)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/invites/${inviteCODE}`
;
const CLIENT_USER = ()=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/users/@me`
;
const WEBHOOK_MESSAGE = (id1, token, msgID)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/webhooks/${id1}/${token}/messages/${msgID}`
;
const INTERACTION_CALLBACK = (id1, token)=>`${Constants.DISCORD_API_URL}/v${Constants.DISCORD_API_VERSION}/interactions/${id1}/${token}/callback`
;
const UserFlags1 = {
DISCORD_EMPLOYEE: 1 << 0,
PARTNERED_SERVER_OWNER: 1 << 1,
HYPESQUAD_EVENTS: 1 << 2,
BUGHUNTER_LEVEL_1: 1 << 3,
HOUSE_BRAVERY: 1 << 6,
HOUSE_BRILLIANCE: 1 << 7,
HOUSE_BALANCE: 1 << 8,
EARLY_SUPPORTER: 1 << 9,
TEAM_USER: 1 << 10,
SYSTEM: 1 << 12,
BUGHUNTER_LEVEL_2: 1 << 14,
VERIFIED_BOT: 1 << 16,
EARLY_VERIFIED_DEVELOPER: 1 << 17
};
class BitField1 {
#flags={
};
constructor(flags1, bits1){
this.#flags = flags1;
this.bitfield = BitField1.resolve(this.#flags, bits1);
}
any(bit) {
return (this.bitfield & BitField1.resolve(this.#flags, bit)) !== 0n;
}
equals(bit) {
return this.bitfield === BitField1.resolve(this.#flags, bit);
}
has(bit, ...args) {
if (Array.isArray(bit)) return bit.every((p)=>this.has(p)
);
bit = BitField1.resolve(this.#flags, bit);
return (this.bitfield & bit) === bit;
}
missing(bits, ...hasParams) {
if (!Array.isArray(bits)) bits = new BitField1(this.#flags, bits).toArray(false);
return bits.filter((p)=>!this.has(p, ...hasParams)
);
}
freeze() {
return Object.freeze(this);
}
add(...bits) {
let total = 0n;
for (const bit of bits){
total |= BitField1.resolve(this.#flags, bit);
}
if (Object.isFrozen(this)) return new BitField1(this.#flags, this.bitfield | total);
this.bitfield |= total;
return this;
}
remove(...bits) {
let total = 0n;
for (const bit of bits){
total |= BitField1.resolve(this.#flags, bit);
}
if (Object.isFrozen(this)) return new BitField1(this.#flags, this.bitfield & ~total);
this.bitfield &= ~total;
return this;
}
flags() {
return this.#flags;
}
serialize(...hasParams) {
const serialized = {
};
for (const [flag, bit] of Object.entries(this.#flags))serialized[flag] = this.has(BitField1.resolve(this.#flags, bit), ...hasParams);
return serialized;
}
toArray(...hasParams) {
return Object.keys(this.#flags).filter((bit)=>this.has(BitField1.resolve(this.#flags, bit), ...hasParams)
);
}
toJSON() {
return this.bitfield.toString();
}
valueOf() {
return this.bitfield;
}
*[Symbol.iterator]() {
yield* this.toArray();
}
static resolve(flags, bit = 0n) {
if (typeof bit === 'bigint') return bit;
if (typeof bit === 'string' && !isNaN(parseInt(bit))) return BigInt(bit);
if (typeof bit === 'number' && bit >= 0) return BigInt(bit);
if (bit instanceof BitField1) return this.resolve(flags, bit.bitfield);
if (Array.isArray(bit)) return bit.map((p)=>this.resolve(flags, p)
).reduce((prev, p)=>prev | p
, 0n);
if (typeof bit === 'string' && typeof flags[bit] !== 'undefined') return BigInt(flags[bit]);
const error = new RangeError('BITFIELD_INVALID');
throw error;
}
}
export { BitField1 as BitField };
class UserFlagsManager1 extends BitField1 {
constructor(bits2){
super(UserFlags1, bits2);
}
}
const ImageURL = (url, format3 = 'png', size = 128)=>{
if (url.includes('a_')) {
return `${url}.${format3 === 'dynamic' ? 'gif' : format3}?size=${size}`;
} else return `${url}.${format3 === 'gif' || format3 === 'dynamic' ? 'png' : format3}?size=${size}`;
};
class User1 extends SnowflakeBase {
get tag() {
return `${this.username}#${this.discriminator}`;
}
get nickMention() {
return `<@!${this.id}>`;
}
get mention() {
return `<@${this.id}>`;
}
avatarURL(format = 'png', size = 512) {
return this.avatar != null ? `${ImageURL(USER_AVATAR(this.id, this.avatar), format, size)}` : `${DEFAULT_USER_AVATAR(String(Number(this.discriminator) % 5))}.png`;
}
get defaultAvatarURL() {
return `${DEFAULT_USER_AVATAR(String(Number(this.discriminator) % 5))}.png`;
}
constructor(client1, data1){
super(client1, data1);
this.id = data1.id;
this.username = data1.username;
this.discriminator = data1.discriminator;
this.avatar = data1.avatar;
this.bot = data1.bot;
this.system = data1.system;
this.mfaEnabled = data1.mfa_enabled;
this.locale = data1.locale;
this.verified = data1.verified;
this.email = data1.email;
this.flags = new UserFlagsManager1(data1.flags);
this.premiumType = data1.premium_type;
this.publicFlags = new UserFlagsManager1(data1.public_flags);
}
readFromData(data) {
this.username = data.username ?? this.username;
this.discriminator = data.discriminator ?? this.discriminator;
this.avatar = data.avatar ?? this.avatar;
this.bot = data.bot ?? this.bot;
this.system = data.system ?? this.system;
this.mfaEnabled = data.mfa_enabled ?? this.mfaEnabled;
this.locale = data.locale ?? this.locale;
this.verified = data.verified ?? this.verified;
this.email = data.email ?? this.email;
this.flags = data.flags !== undefined ? new UserFlagsManager1(data.flags) : this.flags;
this.premiumType = data.premium_type ?? this.premiumType;
this.publicFlags = data.public_flags !== undefined ? new UserFlagsManager1(data.public_flags) : this.publicFlags;
}
toString() {
return this.mention;
}
async createDM() {
return this.client.createDM(this);
}
}
var OverwriteType1;
(function(OverwriteType1) {
OverwriteType1[OverwriteType1["ROLE"] = 0] = "ROLE";
OverwriteType1[OverwriteType1["USER"] = 1] = "USER";
})(OverwriteType1 || (OverwriteType1 = {
}));
var OverrideType1;
(function(OverrideType1) {
OverrideType1[OverrideType1["ADD"] = 0] = "ADD";
OverrideType1[OverrideType1["REMOVE"] = 1] = "REMOVE";
OverrideType1[OverrideType1["REPLACE"] = 2] = "REPLACE";
})(OverrideType1 || (OverrideType1 = {
}));
var ChannelTypes1;
(function(ChannelTypes1) {
ChannelTypes1[ChannelTypes1["GUILD_TEXT"] = 0] = "GUILD_TEXT";
ChannelTypes1[ChannelTypes1["DM"] = 1] = "DM";
ChannelTypes1[ChannelTypes1["GUILD_VOICE"] = 2] = "GUILD_VOICE";
ChannelTypes1[ChannelTypes1["GROUP_DM"] = 3] = "GROUP_DM";
ChannelTypes1[ChannelTypes1["GUILD_CATEGORY"] = 4] = "GUILD_CATEGORY";
ChannelTypes1[ChannelTypes1["GUILD_NEWS"] = 5] = "GUILD_NEWS";
ChannelTypes1[ChannelTypes1["GUILD_STORE"] = 6] = "GUILD_STORE";
})(ChannelTypes1 || (ChannelTypes1 = {
}));
var AllowedMentionType;
(function(AllowedMentionType1) {
AllowedMentionType1["Roles"] = 'roles';
AllowedMentionType1["Users"] = 'users';
AllowedMentionType1["Everyone"] = 'everyone';
})(AllowedMentionType || (AllowedMentionType = {
}));
var MessageTypes;
(function(MessageTypes1) {
MessageTypes1[MessageTypes1["DEFAULT"] = 0] = "DEFAULT";
MessageTypes1[MessageTypes1["RECIPIENT_ADD"] = 1] = "RECIPIENT_ADD";
MessageTypes1[MessageTypes1["RECIPIENT_REMOVE"] = 2] = "RECIPIENT_REMOVE";
MessageTypes1[MessageTypes1["CALL"] = 3] = "CALL";
MessageTypes1[MessageTypes1["CHANNEL_NAME_CHANGE"] = 4] = "CHANNEL_NAME_CHANGE";
MessageTypes1[MessageTypes1["CHANNEL_ICON_CHANGE"] = 5] = "CHANNEL_ICON_CHANGE";
MessageTypes1[MessageTypes1["CHANNEL_PINNED_MESSAGE"] = 6] = "CHANNEL_PINNED_MESSAGE";
MessageTypes1[MessageTypes1["GUILD_MEMBER_JOIN"] = 7] = "GUILD_MEMBER_JOIN";
MessageTypes1[MessageTypes1["USER_PREMIUM_GUILD_SUBSCRIPTION"] = 8] = "USER_PREMIUM_GUILD_SUBSCRIPTION";
MessageTypes1[MessageTypes1["USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1"] = 9] = "USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1";
MessageTypes1[MessageTypes1["USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2"] = 10] = "USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2";
MessageTypes1[MessageTypes1["USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3"] = 11] = "USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3";
MessageTypes1[MessageTypes1["CHANNEL_FOLLOW_ADD"] = 12] = "CHANNEL_FOLLOW_ADD";
MessageTypes1[MessageTypes1["GUILD_DISCOVERY_DISQUALIFIED"] = 14] = "GUILD_DISCOVERY_DISQUALIFIED";
MessageTypes1[MessageTypes1["GUILD_DISCOVERY_REQUALIFIED"] = 15] = "GUILD_DISCOVERY_REQUALIFIED";
})(MessageTypes || (MessageTypes = {
}));
var MessageActivityTypes;
(function(MessageActivityTypes1) {
MessageActivityTypes1[MessageActivityTypes1["JOIN"] = 1] = "JOIN";
MessageActivityTypes1[MessageActivityTypes1["SPECTATE"] = 2] = "SPECTATE";
MessageActivityTypes1[MessageActivityTypes1["LISTEN"] = 3] = "LISTEN";
MessageActivityTypes1[MessageActivityTypes1["JOIN_REQUEST"] = 4] = "JOIN_REQUEST";
})(MessageActivityTypes || (MessageActivityTypes = {
}));
var MessageFlags;
(function(MessageFlags1) {
MessageFlags1[MessageFlags1["CROSSPOSTED"] = 1] = "CROSSPOSTED";
MessageFlags1[MessageFlags1["IS_CROSSPOST"] = 2] = "IS_CROSSPOST";
MessageFlags1[MessageFlags1["SUPPRESS_EMBEDS"] = 4] = "SUPPRESS_EMBEDS";
MessageFlags1[MessageFlags1["SOURCE_MESSAGE_DELETED"] = 8] = "SOURCE_MESSAGE_DELETED";
MessageFlags1[MessageFlags1["URGENT"] = 16] = "URGENT";
})(MessageFlags || (MessageFlags = {
}));
var MessageStickerFormatTypes;
(function(MessageStickerFormatTypes1) {
MessageStickerFormatTypes1[MessageStickerFormatTypes1["PNG"] = 1] = "PNG";
MessageStickerFormatTypes1[MessageStickerFormatTypes1["APNG"] = 2] = "APNG";
MessageStickerFormatTypes1[MessageStickerFormatTypes1["LOTTIE"] = 3] = "LOTTIE";
})(MessageStickerFormatTypes || (MessageStickerFormatTypes = {
}));
class Collection1 extends Map {
set(key, value) {
return super.set(key, value);
}
array() {
return [
...this.values()
];
}
first(amount) {
if (typeof amount === 'undefined') return this.values().next().value;
if (amount < 0) return this.last(amount * -1);
amount = Math.min(this.size, amount);
const iter = this.values();
return Array.from({
length: amount
}, ()=>iter.next().value
);
}
last(amount) {
const arr = this.array();
if (typeof amount === 'undefined') return arr[arr.length - 1];
if (amount < 0) return this.first(amount * -1);
if (!amount) return [];
return arr.slice(-amount);
}
random(amount) {
let arr = this.array();
if (typeof amount === 'undefined') return arr[Math.floor(Math.random() * arr.length)];
if (arr.length === 0 || !amount) return [];
arr = arr.slice();
return Array.from({
length: amount
}, ()=>arr.splice(Math.floor(Math.random() * arr.length), 1)[0]
);
}
find(callback) {
for (const key of this.keys()){
const value = this.get(key);
if (callback(value, key)) return value;
}
}
filter(callback) {
const relevant = new Collection1();
this.forEach((value, key)=>{
if (callback(value, key)) relevant.set(key, value);
});
return relevant;
}
map(callback) {
const results = [];
for (const key of this.keys()){
const value = this.get(key);
results.push(callback(value, key));
}
return results;
}
some(callback) {
for (const key of this.keys()){
const value = this.get(key);
if (callback(value, key)) return true;
}
return false;
}
every(callback) {
for (const key of this.keys()){
const value = this.get(key);
if (!callback(value, key)) return false;
}
return true;
}
reduce(callback, initialValue) {
let accumulator = initialValue;
for (const key of this.keys()){
const value = this.get(key);
accumulator = callback(accumulator, value, key);
}
return accumulator;
}
static fromObject(object) {
return new Collection1(Object.entries(object));
}
toObject() {
return Object.fromEntries(this);
}
}
const PermissionFlags1 = {
CREATE_INSTANT_INVITE: 1n << 0n,
KICK_MEMBERS: 1n << 1n,
BAN_MEMBERS: 1n << 2n,
ADMINISTRATOR: 1n << 3n,
MANAGE_CHANNELS: 1n << 4n,
MANAGE_GUILD: 1n << 5n,
ADD_REACTIONS: 1n << 6n,
VIEW_AUDIT_LOG: 1n << 7n,
PRIORITY_SPEAKER: 1n << 8n,
STREAM: 1n << 9n,
VIEW_CHANNEL: 1n << 10n,
SEND_MESSAGES: 1n << 11n,
SEND_TTS_MESSAGES: 1n << 12n,
MANAGE_MESSAGES: 1n << 13n,
EMBED_LINKS: 1n << 14n,
ATTACH_FILES: 1n << 15n,
READ_MESSAGE_HISTORY: 1n << 16n,
MENTION_EVERYONE: 1n << 17n,
USE_EXTERNAL_EMOJIS: 1n << 18n,
VIEW_GUILD_INSIGHTS: 1n << 19n,
CONNECT: 1n << 20n,
SPEAK: 1n << 21n,
MUTE_MEMBERS: 1n << 22n,
DEAFEN_MEMBERS: 1n << 23n,
MOVE_MEMBERS: 1n << 24n,
USE_VAD: 1n << 25n,
CHANGE_NICKNAME: 1n << 26n,
MANAGE_NICKNAMES: 1n << 27n,
MANAGE_ROLES: 1n << 28n,
MANAGE_WEBHOOKS: 1n << 29n,
MANAGE_EMOJIS: 1n << 30n,
USE_SLASH_COMMANDS: 1n << 31n
};
class Permissions1 extends BitField1 {
static DEFAULT = 104324673n;
static ALL = Object.values(PermissionFlags1).reduce((all, p)=>BigInt(all) | BigInt(p)
, 0n);
constructor(bits3){
super(PermissionFlags1, bits3);
}
any(permission, checkAdmin = true) {
return checkAdmin && super.has(this.flags().ADMINISTRATOR) || super.any(permission);
}
has(permission, checkAdmin = true) {
return checkAdmin && super.has(this.flags().ADMINISTRATOR) || super.has(permission);
}
}
export { Permissions1 as Permissions };
class Role1 extends SnowflakeBase {
constructor(client2, data2, guild17){
super(client2, data2);
this.id = data2.id;
this.guild = guild17;
this.name = data2.name;
this.color = data2.color;
this.hoist = data2.hoist;
this.position = data2.position;
this.permissions = new Permissions1(data2.permissions);
this.managed = data2.managed;
this.mentionable = data2.mentionable;
this.tags = data2.tags !== undefined ? {
botID: data2.tags?.bot_id,
integrationID: data2.tags?.integration_id,
premiumSubscriber: 'premium_subscriber' in (data2.tags ?? {
})
} : undefined;
}
readFromData(data) {
this.name = data.name ?? this.name;
this.color = data.color ?? this.color;
this.hoist = data.hoist ?? this.hoist;
this.position = data.position ?? this.position;
this.permissions = data.permissions !== undefined ? new Permissions1(data.permissions) : this.permissions;
this.managed = data.managed ?? this.managed;
this.mentionable = data.mentionable ?? this.mentionable;
}
async delete() {
return this.guild.roles.delete(this);
}
async edit(options) {
return this.guild.roles.edit(this, options);
}
async addTo(member) {
if (member instanceof User1) {
member = member.id;
}
if (typeof member === 'string') {
const tempMember = await this.guild.members.get(member);
if (tempMember === undefined) {
throw new Error(`Couldn't find the member ${member}.`);
} else {
member = tempMember;
}
}
return member.roles.add(this.id);
}
async removeFrom(member) {
if (member instanceof User1) {
member = member.id;
}
if (typeof member === 'string') {
const tempMember = await this.guild.members.get(member);
if (tempMember === undefined) {
throw new Error(`Couldn't find the member ${member}.`);
} else {
member = tempMember;
}
}
return member.roles.remove(this.id);
}
}
class Emoji1 extends Base1 {
get snowflake() {
return this.id === null ? null : new Snowflake1(this.id);
}
get timestamp() {
return this.snowflake === null ? null : new Date(this.snowflake.timestamp);
}
get getEmojiString() {
if (this.id === null) {
return this.name;
} else {
if (this.animated === false) {
return `<:${this.name}:${this.id}>`;
} else return `<a:${this.name}:${this.id}>`;
}
}
toString() {
return this.getEmojiString;
}
constructor(client3, data3){
super(client3, data3);
this.id = data3.id;
this.name = data3.name;
if (data3.user !== undefined) this.user = new User1(this.client, data3.user);
this.roles = data3.roles;
this.requireColons = data3.require_colons;
this.managed = data3.managed;
this.animated = data3.animated;
this.available = data3.available;
}
emojiImageURL(format = 'png', size = 512) {
return this.id != null ? `${ImageURL(CUSTOM_EMOJI(this.id), format, size)}` : undefined;
}
async edit(data) {
if (this.id === null) throw new Error('Emoji ID is not valid.');
if (this.guild === undefined) throw new Error('Guild is undefined');
const roles = Array.isArray(data.roles) ? data.roles.map((role)=>role instanceof Role1 ? role.id : role
) : [
data.roles instanceof Role1 ? data.roles.id : data.roles
];
const res = await this.client.rest.patch(EMOJI(this.guild.id, this.id), {
...data,
roles
});
return new Emoji1(this.client, res);
}
async delete() {
if (this.id === null) return false;
if (this.guild === undefined) return false;
await this.client.rest.delete(EMOJI(this.guild.id, this.id));
return true;
}
readFromData(data) {
this.id = data.id ?? this.id;
this.name = data.name ?? this.name;
this.roles = data.roles ?? this.roles;
this.requireColons = data.require_colons ?? this.requireColons;
this.managed = data.managed ?? this.managed;
this.animated = data.animated ?? this.animated;
this.available = data.available ?? this.available;
if (data.user !== undefined) this.user = new User1(this.client, data.user);
}
}
class BaseManager1 {
constructor(client4, cacheName1, DataType){
this.client = client4;
this.cacheName = cacheName1;
this.DataType = DataType;
}
async _get(key) {
return this.client.cache.get(this.cacheName, key);
}
async get(key) {
const raw = await this._get(key);
if (raw === undefined) return;
return new this.DataType(this.client, raw);
}
async set(key, value) {
return this.client.cache.set(this.cacheName, key, value);
}
async _delete(key) {
return this.client.cache.delete(this.cacheName, key);
}
async array() {
let arr = await this.client.cache.array(this.cacheName);
if (arr === undefined) arr = [];
return arr.map((e)=>new this.DataType(this.client, e)
);
}
async collection() {
const arr = await this.array();
if (arr === undefined) return new Collection1();
const collection = new Collection1();
for (const elem of arr){
collection.set(elem.id, elem);
}
return collection;
}
async *[Symbol.asyncIterator]() {
const arr = await this.array() ?? [];
const { readable , writable } = new TransformStream();
arr.forEach((el)=>writable.getWriter().write(el)
);
yield* readable;
}
async fetch(...args) {
return undefined;
}
async resolve(key) {
const cacheValue = await this.get(key);
if (cacheValue !== undefined) return cacheValue;
else {
const fetchValue = await this.fetch(key).catch(()=>undefined
);
if (fetchValue !== undefined) return fetchValue;
}
}
flush() {
return this.client.cache.deleteCache(this.cacheName);
}
}
class ColorUtil1 {
constructor(){
throw new Error(`The ${this.constructor.name} class may not be instantiated!`);
}
static intToHex(color) {
if (!ColorUtil1.validateColor(color)) throw new Error('Invalid color');
return `#${color.toString(16)}`;
}
static validateColor(color) {
if (color < 0 || color > 16777215) return false;
return true;
}
static resolveRGB(color) {
return (color[0] << 16) + (color[1] << 8) + color[2];
}
static resolveHex(hexcode) {
if (!ColorUtil1.isHex(hexcode)) throw new Error('Invalid hex code');
return parseInt(hexcode.replace('#', ''), 16);
}
static isHex(hexcode) {
return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(hexcode);
}
static randomHex() {
const code = `#${Math.floor(Math.random() * (16777215 + 1)).toString(16)}`;
if (!ColorUtil1.isHex(code)) return '#000000';
return code;
}
static resolveColor(color) {
if (!color) return 0;
if (color === 'RANDOM') return Math.floor(Math.random() * (16777215 + 1));
return ColorUtil1.colorList[color];
}
static get colorList() {
return {
DEFAULT: 0,
WHITE: 16777215,
AQUA: 1752220,
GREEN: 3066993,
BLUE: 3447003,
YELLOW: 16776960,
PURPLE: 10181046,
LUMINOUS_VIVID_PINK: 15277667,
GOLD: 15844367,
ORANGE: 15105570,
RED: 15158332,
GREY: 9807270,
NAVY: 3426654,
DARK_AQUA: 1146986,
DARK_GREEN: 2067276,
DARK_BLUE: 2123412,
DARK_PURPLE: 7419530,
DARK_VIVID_PINK: 11342935,
DARK_GOLD: 12745742,
DARK_ORANGE: 11027200,
DARK_RED: 10038562,
DARK_GREY: 9936031,
DARKER_GREY: 8359053,
LIGHT_GREY: 12370112,
DARK_NAVY: 2899536,
BLURPLE: 7506394,
DARK_BLURPLE: 5070484,
GREYPLE: 10070709,
DARK_BUT_NOT_BLACK: 2895667,
NOT_QUITE_BLACK: 2303786,
aliceblue: 15792383,
antiquewhite: 16444375,
aqua: 65535,
aquamarine: 8388564,
azure: 15794175,
beige: 16119260,
bisque: 16770244,
black: 0,
blanchedalmond: 16772045,
blue: 255,
blueviolet: 9055202,
brown: 10824234,
burlywood: 14596231,
cadetblue: 6266528,
chartreuse: 8388352,
chocolate: 13789470,
coral: 16744272,
cornflowerblue: 6591981,
cornsilk: 16775388,
crimson: 14423100,
cyan: 65535,
darkblue: 139,
darkcyan: 35723,
darkgoldenrod: 12092939,
darkgray: 11119017,
darkgreen: 25600,
darkgrey: 11119017,
darkkhaki: 12433259,
darkmagenta: 9109643,
darkolivegreen: 5597999,
darkorange: 16747520,
darkorchid: 10040012,
darkred: 9109504,
darksalmon: 15308410,
darkseagreen: 9419919,
darkslateblue: 4734347,
darkslategray: 3100495,
darkslategrey: 3100495,
darkturquoise: 52945,
darkviolet: 9699539,
deeppink: 16716947,
deepskyblue: 49151,
dimgray: 6908265,
dimgrey: 6908265,
dodgerblue: 2003199,
firebrick: 11674146,
floralwhite: 16775920,
forestgreen: 2263842,
fuchsia: 16711935,
gainsboro: 14474460,
ghostwhite: 16316671,
goldenrod: 14329120,
gold: 16766720,
gray: 8421504,
green: 32768,
greenyellow: 11403055,
grey: 8421504,
honeydew: 15794160,
hotpink: 16738740,
indianred: 13458524,
indigo: 4915330,
ivory: 16777200,
khaki: 15787660,
lavenderblush: 16773365,
lavender: 15132410,
lawngreen: 8190976,
lemonchiffon: 16775885,
lightblue: 11393254,
lightcoral: 15761536,
lightcyan: 14745599,
lightgoldenrodyellow: 16448210,
lightgray: 13882323,
lightgreen: 9498256,
lightgrey: 13882323,
lightpink: 16758465,
lightsalmon: 16752762,
lightseagreen: 2142890,
lightskyblue: 8900346,
lightslategray: 7833753,
lightslategrey: 7833753,
lightsteelblue: 11584734,
lightyellow: 16777184,
lime: 65280,
limegreen: 3329330,
linen: 16445670,
magenta: 16711935,
maroon: 8388608,
mediumaquamarine: 6737322,
mediumblue: 205,
mediumorchid: 12211667,
mediumpurple: 9662683,
mediumseagreen: 3978097,
mediumslateblue: 8087790,
mediumspringgreen: 64154,
mediumturquoise: 4772300,
mediumvioletred: 13047173,
midnightblue: 1644912,
mintcream: 16121850,
mistyrose: 16770273,
moccasin: 16770229,
navajowhite: 16768685,
navy: 128,
oldlace: 16643558,
olive: 8421376,
olivedrab: 7048739,
orange: 16753920,
orangered: 16729344,
orchid: 14315734,
palegoldenrod: 15657130,
palegreen: 10025880,
paleturquoise: 11529966,
palevioletred: 14381203,
papayawhip: 16773077,
peachpuff: 16767673,
peru: 13468991,
pink: 16761035,
plum: 14524637,
powderblue: 11591910,
purple: 8388736,
rebeccapurple: 6697881,
red: 16711680,
rosybrown: 12357519,
royalblue: 4286945,
saddlebrown: 9127187,
salmon: 16416882,
sandybrown: 16032864,
seagreen: 3050327,
seashell: 16774638,
sienna: 10506797,
silver: 12632256,
skyblue: 8900331,
slateblue: 6970061,
slategray: 7372944,
slategrey: 7372944,
snow: 16775930,
springgreen: 65407,
steelblue: 4620980,
tan: 13808780,
teal: 32896,
thistle: 14204888,
tomato: 16737095,
turquoise: 4251856,
violet: 15631086,
wheat: 16113331,
white: 16777215,
whitesmoke: 16119285,
yellow: 16776960,
yellowgreen: 10145074
};
}
static toJSON() {
return ColorUtil1.colorList;
}
}
class Embed1 {
files = [];
static MAX_TITLE_LENGTH = 256;
static MAX_DESCRIPTION_LENGTH = 2048;
static MAX_FIELD_NAME_LENGTH = 256;
static MAX_FIELD_VALUE_LENGTH = 1024;
static MAX_FIELDS_LENGTH = 25;
static MAX_FOOTER_TEXT_LENGTH = 2048;
static MAX_AUTHOR_NAME_LENGTH = 256;
static MAX_EMBED_LENGTH = 6000;
constructor(data4){
this.title = data4?.title;
this.type = data4?.type;
this.description = data4?.description;
this.url = data4?.url;
this.timestamp = data4?.timestamp;
this.color = data4?.color;
this.footer = data4?.footer;
this.image = data4?.image;
this.thumbnail = data4?.thumbnail;
this.video = data4?.video;
this.provider = data4?.provider;
this.author = data4?.author;
this.fields = data4?.fields;
}
toJSON() {
let total = 0;
if (this.title?.length !== undefined && this.title?.length > Embed1.MAX_TITLE_LENGTH) {
total += Number(this.title.length);
throw new Error(`Embed title cannot exceed ${Embed1.MAX_TITLE_LENGTH} characters.`);
}
if (this.description?.length !== undefined && this.description?.length > Embed1.MAX_DESCRIPTION_LENGTH) {
total += Number(this.description.length);
throw new Error(`Embed description cannot exceed ${Embed1.MAX_DESCRIPTION_LENGTH} characters.`);
}
if (this.fields?.length !== undefined) {
this.fields.forEach((field)=>{
if (field.name.length > Embed1.MAX_FIELD_NAME_LENGTH) {
total += Number(field.name.length);
throw new Error(`Embed field name cannot exceed ${Embed1.MAX_FIELD_NAME_LENGTH} characters.`);
}
if (field.value.length > Embed1.MAX_FIELD_VALUE_LENGTH) {
total += Number(field.value.length);
throw new Error(`Embed field value cannot exceed ${Embed1.MAX_FIELD_VALUE_LENGTH} characters.`);
}
});
if (this.fields.length > Embed1.MAX_FIELDS_LENGTH) throw new Error('Embed fields cannot exceed 25 field objects.');
}
if (this.footer?.text?.length !== undefined && this.footer?.text?.length > Embed1.MAX_FOOTER_TEXT_LENGTH) {
total += Number(this.footer?.text?.length);
throw new Error(`Embed footer text cannot exceed ${Embed1.MAX_FOOTER_TEXT_LENGTH}.`);
}
if (this.author?.name?.length !== undefined && this.author?.name?.length > Embed1.MAX_AUTHOR_NAME_LENGTH) {
total += Number(this.author?.name?.length);
throw new Error(`Embed author name cannot exceed ${Embed1.MAX_AUTHOR_NAME_LENGTH}.`);
}
if (total > Embed1.MAX_EMBED_LENGTH) throw new Error(`Embed characters cannot exceed ${Embed1.MAX_EMBED_LENGTH} characters in total.`);
return {
title: this.title,
type: this.type,
description: this.description,
url: this.url,
timestamp: this.timestamp,
color: this.color,
footer: this.footer,
image: this.image,
thumbnail: this.thumbnail,
video: this.video,
provider: this.provider,
author: this.author,
fields: this.fields
};
}
setTitle(title) {
this.title = title;
return this;
}
setDescription(description) {
this.description = description;
return this;
}
attach(...files) {
for (const file of files){
this.files.push(file);
}
return this;
}
setType(type) {
this.type = type;
return this;
}
setURL(url) {
this.url = typeof url === 'object' ? url.toString() : url;
return this;
}
setTimestamp(timestamp) {
this.timestamp = new Date(timestamp).toISOString();
return this;
}
setColor(color, g, b) {
if (typeof color === 'number' && g === undefined && b === undefined) {
this.color = color;
} else if (typeof color === 'string' && color.toLowerCase() === 'random') {
this.color = ColorUtil1.resolveHex(ColorUtil1.randomHex());
} else if (typeof color === 'string' && color.startsWith('#')) {
this.color = ColorUtil1.resolveHex(color);
} else if (typeof color === 'number' && g !== undefined && b !== undefined) {
this.color = ColorUtil1.resolveRGB([
color,
g,
b
]);
} else if (typeof color === 'string') {
this.color = ColorUtil1.resolveColor(color);
} else throw new Error('Invalid Embed Color. Must be RGB, Hex (string or number), valid color name or a valid CSS color.');
return this;
}
setFooter(footer, icon) {
this.footer = typeof footer === 'string' ? {
text: footer,
icon_url: icon
} : footer;
return this;
}
setImage(image) {
this.image = typeof image === 'string' ? {
url: image
} : image;
return this;
}
setThumbnail(thumbnail) {
this.thumbnail = typeof thumbnail === 'string' ? {
url: thumbnail
} : thumbnail;
return this;
}
setVideo(video) {
this.video = typeof video === 'string' ? {
url: video
} : video;
return this;
}
setProvider(provider, url) {
this.provider = typeof provider === 'string' ? {
name: provider,
url
} : provider;
return this;
}
setAuthor(author, image) {
this.author = typeof author === 'string' ? {
name: author,
icon_url: image
} : author;
return this;
}
setFields(fields) {
this.fields = fields;
return this;
}
addField(name, value, inline) {
if (typeof name !== 'object' && value === undefined) throw new Error('field value is required');
const field = typeof name === 'object' ? name : {
name,
value: value,
inline
};
if (this.fields === undefined) {
this.fields = [
field
];
} else {
this.fields.push(field);
}
return this;
}
addFields(...fields) {
for (const field of fields){
this.addField(field);
}
return this;
}
}
class MessageMentions1 {
users = new Collection1();
roles = new Collection1();
channels = new Collection1();
everyone = false;
static EVERYONE_MENTION = /@(everyone|here)/g;
static USER_MENTION = /<@!?(\d{17,19})>/g;
static ROLE_MENTION = /<@&(\d{17,19})>/g;
static CHANNEL_MENTION = /<#(\d{17,19})>/g;
constructor(client5, message1){
this.client = client5;
this.message = message1;
}
async fromPayload(payload) {
if (this.message === undefined) return this;
if (payload.mentions !== undefined) payload.mentions.forEach((rawUser)=>{
this.users.set(rawUser.id, new User1(this.client, rawUser));
});
if (this.message.guild !== undefined) {
for (const id1 of payload.mention_roles){
const role = await this.message.guild.roles.get(id1);
if (role !== undefined) this.roles.set(role.id, role);
}
}
if (payload.mention_channels !== undefined) {
for (const mentionChannel of payload.mention_channels){
const channel = await this.client.channels.get(mentionChannel.id);
if (channel !== undefined) this.channels.set(channel.id, channel);
}
}
const matchChannels = this.message.content.match(MessageMentions1.CHANNEL_MENTION);
if (matchChannels !== null) {
for (const id1 of matchChannels){
const parsedID = id1.substr(2, id1.length - 3);
const channel = await this.client.channels.get(parsedID);
if (channel !== undefined) this.channels.set(channel.id, channel);
}
}
this.everyone = payload.mention_everyone;
return this;
}
}
class MessageSticker extends SnowflakeBase {
constructor(client6, data5){
super(client6);
this.id = data5.id;
this.packID = data5.pack_id;
this.name = data5.name;
this.description = data5.description;
this.tags = data5.tags !== undefined ? data5.tags.split(', ') : undefined;
this.asset = data5.asset;
this.previewAsset = data5.preview_asset;
this.formatType = data5.format_type;
}
readFromData(data) {
this.id = data.id ?? this.id;
this.packID = data.pack_id ?? this.packID;
this.name = data.name ?? this.name;
this.description = data.description ?? this.description;
this.tags = data.tags !== undefined ? data.tags.split(', ') : this.tags;
this.asset = data.asset ?? this.asset;
this.previewAsset = data.preview_asset ?? this.previewAsset;
this.formatType = data.format_type ?? this.formatType;
}
}
const encoder = new TextEncoder();
const decoder = new TextDecoder('utf-8');
function encodeText(str) {
return encoder.encode(str);
}
function decodeText(bytes) {
return decoder.decode(bytes);
}
class UsersManager1 extends BaseManager1 {
constructor(client7){
super(client7, 'users', User1);
}
async fetch(id) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(USER(id)).then((data6)=>{
this.set(id, data6);
resolve3(new User1(this.client, data6));
}).catch((e)=>reject(e)
);
});
}
}
class ReactionUsersManager1 extends UsersManager1 {
constructor(client8, reaction){
super(client8);
this.cacheName = `reaction_users:${reaction.message.id}`;
this.reaction = reaction;
}
async removeAll() {
await this.reaction.message.reactions.removeEmoji(this.reaction.emoji);
}
async remove(user) {
await this.reaction.message.reactions.removeUser(this.reaction.emoji, user);
}
}
class MessageReaction1 extends Base1 {
count = 0;
me = false;
constructor(client9, data6, message2, emoji1){
super(client9, data6);
this.message = message2;
this.emoji = emoji1;
this.count = data6.count;
this.me = data6.me;
this.users = new ReactionUsersManager1(client9, this);
}
fromPayload(data) {
this.count = data.count;
this.me = data.me;
}
}
class RolesManager1 extends BaseManager1 {
constructor(client10, guild1){
super(client10, `roles:${guild1.id}`, Role1);
this.guild = guild1;
}
async fetch(id) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(GUILD_ROLE(this.guild.id, id)).then(async (data7)=>{
await this.set(id, data7);
resolve3(await this.get(id));
}).catch((e)=>reject(e)
);
});
}
async get(key) {
const raw = await this._get(key);
if (raw === undefined) return;
return new Role1(this.client, raw, this.guild);
}
async array() {
let arr = await this.client.cache.array(this.cacheName);
if (arr === undefined) arr = [];
return arr.map((e)=>new Role1(this.client, e, this.guild)
);
}
async fromPayload(roles) {
for (const role of roles){
await this.set(role.id, role);
}
return true;
}
async create(data) {
if (typeof data?.color === 'string') {
if (data.color.startsWith('#')) data.color = data.color.slice(1);
}
const roleRaw = await this.client.rest.post(GUILD_ROLES(this.guild.id), {
name: data?.name,
permissions: data?.permissions === undefined ? undefined : (typeof data.permissions === 'object' ? data.permissions.bitfield : data.permissions).toString(),
color: data?.color === undefined ? undefined : typeof data.color === 'string' ? isNaN(parseInt(data.color, 16)) ? 0 : parseInt(data.color, 16) : data.color,
hoist: data?.hoist ?? false,
mentionable: data?.mentionable ?? false
});
await this.set(roleRaw.id, roleRaw);
return await this.get(roleRaw.id);
}
async delete(role) {
const oldRole = await this.get(typeof role === 'object' ? role.id : role);
await this.client.rest.delete(GUILD_ROLE(this.guild.id, typeof role === 'object' ? role.id : role));
return oldRole;
}
async edit(role, options) {
if (role instanceof Role1) {
role = role.id;
}
const resp = await this.client.rest.patch(GUILD_ROLE(this.guild.id, role), options);
return new Role1(this.client, resp, this.guild);
}
async editPositions(...positions) {
if (positions.length === 0) throw new Error('No role positions to change specified');
await this.client.rest.api.guilds[this.guild.id].roles.patch(positions.map((e)=>({
id: typeof e.id === 'string' ? e.id : e.id.id,
position: e.position ?? null
})
));
return this;
}
}
class Invite1 extends Base1 {
get createdAt() {
return this.createdAtTimestamp === undefined ? undefined : new Date(this.createdAtTimestamp);
}
get link() {
return `https://discord.gg/${this.code}`;
}
toString() {
return this.link;
}
constructor(client11, data7){
super(client11);
this.code = data7.code;
this.guild = data7.guild;
this.channel = data7.channel;
this.inviter = data7.inviter;
this.targetUser = data7.target_user;
this.targetUserType = data7.target_user_type;
this.approximateMemberCount = data7.approximate_member_count;
this.approximatePresenceCount = data7.approximate_presence_count;
this.uses = data7.uses;
this.maxUses = data7.maxUses;
this.maxAge = data7.maxAge;
this.temporary = data7.temporary;
this.createdAtTimestamp = data7.createdAtTimestamp;
}
async delete() {
const res = await this.client.rest.delete(INVITE(this.code));
return new Invite1(this.client, res);
}
readFromData(data) {
this.code = data.code ?? this.code;
this.guild = data.guild ?? this.guild;
this.channel = data.channel ?? this.channel;
this.inviter = data.inviter ?? this.inviter;
this.targetUser = data.target_user ?? this.targetUser;
this.targetUserType = data.target_user_type ?? this.targetUserType;
this.approximateMemberCount = data.approximate_member_count ?? this.approximateMemberCount;
this.approximatePresenceCount = data.approximate_presence_count ?? this.approximatePresenceCount;
this.uses = data.uses ?? this.uses;
this.maxUses = data.maxUses ?? this.maxUses;
this.maxAge = data.maxAge ?? this.maxAge;
this.temporary = data.temporary ?? this.temporary;
this.createdAtTimestamp = data.createdAtTimestamp ?? this.createdAtTimestamp;
}
}
var InviteTargetUserType;
(function(InviteTargetUserType1) {
InviteTargetUserType1[InviteTargetUserType1["STREAM"] = 1] = "STREAM";
})(InviteTargetUserType || (InviteTargetUserType = {
}));
class InviteManager1 extends BaseManager1 {
constructor(client12, guild2){
super(client12, `invites:${guild2.id}`, Invite1);
this.guild = guild2;
}
async get(key) {
const raw = await this._get(key);
if (raw === undefined) return;
return new Invite1(this.client, raw);
}
async fetch(id, withCounts = true) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(`${INVITE(id)}${withCounts ? '?with_counts=true' : ''}`).then(async (data8)=>{
this.set(id, data8);
const newInvite = await this.get(data8.code);
resolve3(newInvite);
}).catch((e)=>reject(e)
);
});
}
async fetchAll(channel) {
const rawInvites = await this.client.rest.get(channel === undefined ? GUILD_INVITES(this.guild.id) : CHANNEL_INVITES(typeof channel === 'string' ? channel : channel.id));
const res = [];
for (const raw of rawInvites){
await this.set(raw.code, raw);
res.push(new Invite1(this.client, raw));
}
return res;
}
async delete(invite) {
await this.client.rest.delete(INVITE(typeof invite === 'string' ? invite : invite.code));
return true;
}
async create(channel, options) {
const raw = await this.client.rest.post(CHANNEL_INVITES(typeof channel === 'string' ? channel : channel.id), {
max_age: options?.maxAge,
max_uses: options?.maxUses,
temporary: options?.temporary,
unique: options?.unique,
target_user: options?.targetUser === undefined ? undefined : typeof options.targetUser === 'string' ? options.targetUser : options.targetUser.id,
target_user_type: options?.targetUserType
});
return new Invite1(this.client, raw);
}
async fromPayload(invites) {
for (const invite of invites){
await this.set(invite.code, invite);
}
return true;
}
}
class BaseChildManager1 {
constructor(client13, parent){
this.client = client13;
this.parent = parent;
}
async get(key) {
return this.parent.get(key);
}
async set(key, value) {
return this.parent.set(key, value);
}
async delete(key) {
return false;
}
async array() {
return this.parent.array();
}
async collection() {
const arr = await this.array();
if (arr === undefined) return new Collection1();
const collection = new Collection1();
for (const elem of arr){
collection.set(elem.id, elem);
}
return collection;
}
async *[Symbol.asyncIterator]() {
const arr = await this.array() ?? [];
const { readable , writable } = new TransformStream();
arr.forEach((el)=>writable.getWriter().write(el)
);
yield* readable;
}
async fetch(...args) {
return this.parent.fetch(...args);
}
async resolve(key) {
const cacheValue = await this.get(key);
if (cacheValue !== undefined) return cacheValue;
else {
const fetchValue = await this.fetch(key).catch(()=>undefined
);
if (fetchValue !== undefined) return fetchValue;
}
}
}
class GuildChannelsManager1 extends BaseChildManager1 {
constructor(client14, parent1, guild3){
super(client14, parent1);
this.guild = guild3;
}
async get(id) {
const res = await this.parent.get(id);
if (res !== undefined && res.guild.id === this.guild.id) return res;
else return undefined;
}
async delete(id) {
return this.client.rest.delete(CHANNEL(id));
}
async array() {
const arr = await this.parent.array();
return arr.filter((c)=>c.guild !== undefined && c.guild.id === this.guild.id
);
}
async flush() {
const arr = await this.array();
for (const elem of arr){
this.parent._delete(elem.id);
}
return true;
}
async create(options) {
if (options.name === undefined) throw new Error('name is required for GuildChannelsManager#create');
const res = await this.client.rest.post(GUILD_CHANNELS(this.guild.id), {
name: options.name,
type: options.type,
topic: options.topic,
bitrate: options.bitrate,
user_limit: options.userLimit,
rate_limit_per_user: options.rateLimitPerUser,
position: options.position,
permission_overwrites: options.permissionOverwrites,
parent_id: options.parent === undefined ? undefined : typeof options.parent === 'object' ? options.parent.id : options.parent,
nsfw: options.nsfw
});
await this.set(res.id, res);
const channel = await this.get(res.id);
return channel;
}
async editPositions(...positions) {
if (positions.length === 0) throw new Error('No channel positions to change specified');
await this.client.rest.api.guilds[this.guild.id].channels.patch(positions.map((e)=>({
id: typeof e.id === 'string' ? e.id : e.id.id,
position: e.position ?? null
})
));
return this;
}
}
class GuildEmojisManager1 extends BaseChildManager1 {
constructor(client15, parent2, guild4){
super(client15, parent2);
this.guild = guild4;
}
async get(id) {
const res = await this.parent.get(id);
if (res !== undefined && res.guild?.id === this.guild.id) return res;
else return undefined;
}
async delete(id) {
return this.client.rest.delete(CHANNEL(id));
}
async fetch(id) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(GUILD_EMOJI(this.guild.id, id)).then(async (data8)=>{
const emoji1 = new Emoji1(this.client, data8);
data8.guild_id = this.guild.id;
await this.set(id, data8);
emoji1.guild = this.guild;
resolve3(emoji1);
}).catch((e)=>reject(e)
);
});
}
async create(name, url, roles) {
let data8 = url;
if (!data8.startsWith('data:')) {
data8 = await fetchAuto(url);
}
return await new Promise((resolve3, reject)=>{
let roleIDs = [];
if (roles !== undefined && typeof roles === 'string') roleIDs = [
roles
];
else if (roles !== undefined) {
if (roles?.length === 0) reject(new Error('Empty Roles array was provided'));
if (roles[0] instanceof Role1) roleIDs = roles.map((r)=>r.id
);
else roleIDs = roles;
} else roles = [
this.guild.id
];
this.client.rest.post(GUILD_EMOJIS(this.guild.id), {
name,
image: data8,
roles: roleIDs
}).then(async (data9)=>{
const emoji1 = new Emoji1(this.client, data9);
data9.guild_id = this.guild.id;
await this.set(data9.id, data9);
emoji1.guild = this.guild;
resolve3(emoji1);
}).catch((e)=>reject(e)
);
});
}
async array() {
const arr = await this.parent.array();
return arr.filter((c)=>c.guild !== undefined && c.guild.id === this.guild.id
);
}
async flush() {
const arr = await this.array();
for (const elem of arr){
const emojiID = elem.id !== null ? elem.id : elem.name;
this.parent._delete(emojiID);
}
return true;
}
}
class Application1 extends SnowflakeBase {
constructor(client16, data8){
super(client16, data8);
this.id = data8.id;
this.name = data8.name;
this.icon = data8.icon;
this.description = data8.description;
this.summary = data8.summary;
this.bot = data8.bot !== undefined ? new User1(client16, data8.bot) : undefined;
}
}
class VoiceState extends Base1 {
constructor(client17, data9, _data1){
super(client17, data9);
this.channelID = data9.channel_id;
this.channel = _data1.channel;
this.sessionID = data9.session_id;
this.user = _data1.user;
this.member = _data1.member;
this.guild = _data1.guild;
this.deaf = data9.deaf;
this.mute = data9.mute;
this.selfDeaf = data9.self_deaf;
this.selfMute = data9.self_mute;
this.stream = data9.self_stream;
this.video = data9.self_video;
this.suppress = data9.suppress;
}
readFromData(data) {
this.sessionID = data.session_id ?? this.sessionID;
this.deaf = data.deaf ?? this.deaf;
this.channelID = data.channel_id ?? this.channelID;
this.mute = data.mute ?? this.mute;
this.selfDeaf = data.self_deaf ?? this.selfDeaf;
this.selfMute = data.self_mute ?? this.selfMute;
this.stream = data.self_stream ?? this.stream;
this.video = data.self_video ?? this.video;
this.suppress = data.suppress ?? this.suppress;
}
async disconnect() {
const result = this.member?.disconnectVoice();
if (result !== undefined) {
this.channelID = null;
this.channel = null;
}
return result;
}
async moveChannel(channel) {
const result = this.member?.moveVoiceChannel(channel);
if (result !== undefined) {
let channelFetched;
let channelID;
if (typeof channel === 'string') {
channelID = channel;
const channelCached = await this.guild?.channels.fetch(channel);
if (channelCached?.type === ChannelTypes1.GUILD_VOICE) {
channelFetched = channelCached;
} else {
throw new Error(`Channel ${channel} is not a VoiceChannel.`);
}
} else {
channelID = channel?.id ?? null;
channelFetched = channel ?? null;
}
this.channelID = channelID;
this.channel = channelFetched;
}
return result;
}
async setMute(mute) {
return this.member?.setMute(mute);
}
async setDeaf(deaf) {
return this.member?.setDeaf(deaf);
}
async unmute() {
return await this.setMute(false);
}
async undeaf() {
return await this.setDeaf(false);
}
}
class GuildVoiceStatesManager extends BaseManager1 {
constructor(client18, guild5){
super(client18, `vs:${guild5.id}`, VoiceState);
this.guild = guild5;
}
async me() {
const member = await this.guild.me();
return await this.get(member.id);
}
async get(key) {
const raw = await this._get(key);
if (raw === undefined) return;
const guild6 = raw.guild_id === undefined ? this.guild : await this.client.guilds.get(raw.guild_id);
return new VoiceState(this.client, raw, {
user: await this.client.users.get(raw.user_id),
channel: raw.channel_id === null ? null : await this.client.channels.get(raw.channel_id),
guild: guild6,
member: guild6 === undefined ? undefined : await guild6.members.get(raw.user_id)
});
}
async array() {
let arr = await this.client.cache.array(this.cacheName);
if (arr === undefined) arr = [];
return await Promise.all(arr.map(async (raw)=>{
const guild6 = raw.guild_id === undefined ? this.guild : await this.client.guilds.get(raw.guild_id);
return new VoiceState(this.client, raw, {
user: await this.client.users.get(raw.user_id),
channel: raw.channel_id === null ? null : await this.client.channels.get(raw.channel_id),
guild: guild6,
member: guild6 === undefined ? undefined : await guild6.members.get(raw.user_id)
});
}));
}
async fromPayload(d) {
for (const data10 of d){
await this.set(data10.user_id, data10);
}
}
}
var ActivityTypes1;
(function(ActivityTypes1) {
ActivityTypes1[ActivityTypes1["PLAYING"] = 0] = "PLAYING";
ActivityTypes1[ActivityTypes1["STREAMING"] = 1] = "STREAMING";
ActivityTypes1[ActivityTypes1["LISTENING"] = 2] = "LISTENING";
ActivityTypes1[ActivityTypes1["WATCHING"] = 3] = "WATCHING";
ActivityTypes1[ActivityTypes1["CUSTOM_STATUS"] = 4] = "CUSTOM_STATUS";
ActivityTypes1[ActivityTypes1["COMPETING"] = 5] = "COMPETING";
})(ActivityTypes1 || (ActivityTypes1 = {
}));
class Presence1 extends Base1 {
constructor(client19, data10, user1, guild6){
super(client19, data10);
this.user = user1;
this.guild = guild6;
this.status = data10.status;
this.activities = data10.activities;
this.clientStatus = data10.client_status;
}
fromPayload(data) {
this.status = data.status;
this.activities = data.activities;
this.clientStatus = data.client_status;
return this;
}
}
class ClientPresence1 {
status = 'online';
constructor(data11){
if (data11 !== undefined) {
if (data11.activity !== undefined) {
Object.assign(this, data11);
} else if (data11.activities !== undefined) {
this.parse(data11);
} else if (data11.name !== undefined) {
if (this.activity === undefined) {
this.activity = data11;
} else if (this.activity instanceof Array) {
this.activity.push(data11);
} else this.activity = [
this.activity,
data11
];
}
}
}
parse(payload) {
this.afk = payload.afk;
this.activity = payload.activities ?? undefined;
this.since = payload.since;
this.status = payload.status;
return this;
}
static parse(payload) {
return new ClientPresence1().parse(payload);
}
create() {
return {
afk: this.afk === undefined ? false : this.afk,
activities: this.createActivity(),
since: this.since === undefined ? null : this.since,
status: this.status === undefined ? 'online' : this.status
};
}
createActivity() {
const activity = this.activity === undefined ? null : this.activity instanceof Array ? this.activity : [
this.activity
];
if (activity === null) return activity;
else {
activity.map((e)=>{
if (typeof e.type === 'string') e.type = ActivityTypes1[e.type];
return e;
});
return activity;
}
}
setStatus(status) {
this.status = status;
return this;
}
setActivity(activity) {
this.activity = activity;
return this;
}
setActivities(activities) {
this.activity = activities;
return this;
}
setAFK(afk) {
this.afk = afk;
return this;
}
removeAFK() {
this.afk = false;
return this;
}
toggleAFK() {
this.afk = this.afk === undefined ? true : !this.afk;
return this;
}
setSince(since) {
this.since = since;
return this;
}
}
class GuildPresencesManager extends BaseManager1 {
constructor(client20, guild7){
super(client20, `presences:${guild7.id}`, Presence1);
this.guild = guild7;
}
async get(id) {
const raw = await this._get(id);
if (raw === undefined) return;
let user1 = await this.client.users.get(raw.user.id);
if (user1 === undefined) user1 = new User1(this.client, raw.user);
const guild8 = await this.client.guilds.get(raw.guild_id);
if (guild8 === undefined) return;
const presence = new Presence1(this.client, raw, user1, guild8);
return presence;
}
async array() {
let arr = await this.client.cache.array(this.cacheName);
if (arr === undefined) arr = [];
const result = [];
await Promise.all(arr.map(async (raw)=>{
let user1 = await this.client.users.get(raw.user.id);
if (user1 === undefined) user1 = new User1(this.client, raw.user);
const guild8 = await this.client.guilds.get(raw.guild_id);
if (guild8 === undefined) return;
result.push(new Presence1(this.client, raw, user1, guild8));
}));
return result;
}
async fromPayload(data) {
await this.flush();
for (const pres of data){
await this.set(pres.user.id, pres);
}
return this;
}
}
function simplifyAPIError(errors) {
const res = {
};
function fmt(obj, acum = '') {
if (typeof obj._errors === 'object' && Array.isArray(obj._errors)) res[acum] = obj._errors.map((e)=>`${e.code}: ${e.message}`
);
else {
Object.entries(obj).forEach((obj1)=>{
const arrayIndex = !isNaN(Number(obj1[0]));
if (arrayIndex) obj1[0] = `[${obj1[0]}]`;
if (acum !== '' && !arrayIndex) acum += '.';
fmt(obj1[1], acum += obj1[0]);
});
}
}
Object.entries(errors).forEach((obj)=>{
fmt(obj[1], obj[0]);
});
return res;
}
var HttpResponseCode1;
(function(HttpResponseCode1) {
HttpResponseCode1[HttpResponseCode1["Ok"] = 200] = "Ok";
HttpResponseCode1[HttpResponseCode1["Created"] = 201] = "Created";
HttpResponseCode1[HttpResponseCode1["NoContent"] = 204] = "NoContent";
HttpResponseCode1[HttpResponseCode1["NotModified"] = 304] = "NotModified";
HttpResponseCode1[HttpResponseCode1["BadRequest"] = 400] = "BadRequest";
HttpResponseCode1[HttpResponseCode1["Unauthorized"] = 401] = "Unauthorized";
HttpResponseCode1[HttpResponseCode1["Forbidden"] = 403] = "Forbidden";
HttpResponseCode1[HttpResponseCode1["NotFound"] = 404] = "NotFound";
HttpResponseCode1[HttpResponseCode1["MethodNotAllowed"] = 405] = "MethodNotAllowed";
HttpResponseCode1[HttpResponseCode1["TooManyRequests"] = 429] = "TooManyRequests";
HttpResponseCode1[HttpResponseCode1["GatewayUnavailable"] = 502] = "GatewayUnavailable";
})(HttpResponseCode1 || (HttpResponseCode1 = {
}));
const METHODS = [
'get',
'post',
'patch',
'put',
'delete',
'head'
];
class DiscordAPIError1 extends Error {
name = 'DiscordAPIError';
constructor(error1){
super();
const fmt = Object.entries(typeof error1 === 'object' ? simplifyAPIError(error1.errors) : {
});
this.message = typeof error1 === 'string' ? `${error1} ` : `\n${error1.method} ${error1.url.slice(7)} returned ${error1.status}\n(${error1.code ?? 'unknown'}) ${error1.message}${fmt.length === 0 ? '' : `\n${fmt.map((e)=>` at ${e[0]}:\n${e[1].map((e1)=>` - ${e1}`
).join('\n')}`
).join('\n')}\n`}`;
if (typeof error1 === 'object') this.error = error1;
}
}
const builder = (rest, acum = '/')=>{
const routes = {
};
const proxy = new Proxy(routes, {
get: (_, p, __)=>{
if (p === 'toString') return ()=>acum
;
if (METHODS.includes(String(p)) === true) {
const method = rest[String(p)];
return async (...args)=>await method.bind(rest)(`${Constants.DISCORD_API_URL}/v${rest.version}${acum.substring(0, acum.length - 1)}`, ...args)
;
}
return builder(rest, acum + String(p) + '/');
}
});
return proxy;
};
var TokenType1;
(function(TokenType1) {
TokenType1["Bot"] = 'Bot';
TokenType1["Bearer"] = 'Bearer';
TokenType1["None"] = '';
})(TokenType1 || (TokenType1 = {
}));
class RESTManager1 {
queues = {
};
rateLimits = new Collection1();
globalRateLimit = false;
processing = false;
version = 8;
tokenType = TokenType1.Bot;
headers = {
};
constructor(options1){
this.api = builder(this);
if (options1?.token !== undefined) this.token = options1.token;
if (options1?.version !== undefined) this.version = options1.version;
if (options1?.headers !== undefined) this.headers = options1.headers;
if (options1?.tokenType !== undefined) this.tokenType = options1.tokenType;
if (options1?.userAgent !== undefined) this.userAgent = options1.userAgent;
if (options1?.canary !== undefined) this.canary = options1.canary;
if (options1?.client !== undefined) this.client = options1.client;
this.handleRateLimits();
}
checkQueues() {
Object.entries(this.queues).forEach(([key, value])=>{
if (value.length === 0) {
delete this.queues[key];
}
});
}
queue(request) {
const route = request.url.substring(Number(Constants.DISCORD_API_URL.length) + 1);
const parts = route.split('/');
parts.shift();
const [id2] = parts;
if (this.queues[id2] !== undefined) {
this.queues[id2].push(request);
} else {
this.queues[id2] = [
request
];
}
}
async processQueue() {
if (Object.keys(this.queues).length !== 0 && !this.globalRateLimit) {
await Promise.allSettled(Object.values(this.queues).map(async (pathQueue)=>{
const request = pathQueue.shift();
if (request === undefined) return;
const rateLimitedURLResetIn = await this.isRateLimited(request.url);
if (typeof request.bucket === 'string') {
const rateLimitResetIn = await this.isRateLimited(request.bucket);
if (rateLimitResetIn !== false) {
this.queue(request);
} else {
const result = await request.onComplete();
if (result?.rateLimited !== undefined) {
this.queue({
...request,
bucket: result.bucket ?? request.bucket
});
}
}
} else {
if (rateLimitedURLResetIn !== false) {
this.queue(request);
} else {
const result = await request.onComplete();
if (result?.rateLimited !== undefined) {
this.queue({
...request,
bucket: result.bucket ?? request.bucket
});
}
}
}
}));
}
if (Object.keys(this.queues).length !== 0) {
this.processQueue();
this.checkQueues();
} else this.processing = false;
}
prepare(body, method) {
const headers = {
'User-Agent': this.userAgent ?? `DiscordBot (harmony, https://github.com/harmonyland/harmony)`
};
if (this.token !== undefined) {
const token = typeof this.token === 'string' ? this.token : this.token();
if (token !== undefined) headers.Authorization = `${this.tokenType} ${token}`.trim();
}
if (method === 'get' || method === 'head' || method === 'delete') body = undefined;
if (body?.reason !== undefined) {
headers['X-Audit-Log-Reason'] = encodeURIComponent(body.reason);
}
let _files;
if (body?.embed?.files !== undefined && Array.isArray(body?.embed?.files)) {
_files = body?.embed?.files;
}
if (body?.embeds !== undefined && Array.isArray(body?.embeds)) {
const files1 = body?.embeds.map((e)=>e.files
).filter((e)=>e !== undefined
);
for (const files of files1){
for (const file of files){
if (_files === undefined) _files = [];
_files?.push(file);
}
}
}
if (body?.file !== undefined || body?.files !== undefined || _files !== undefined) {
const files = [];
if (body?.file !== undefined) files.push(body.file);
if (body?.files !== undefined && Array.isArray(body.files)) {
for (const file of body.files){
files.push(file);
}
}
if (_files !== undefined) {
for (const file of _files){
files.push(file);
}
}
const form = new FormData();
files.forEach((file, index)=>form.append(`file${index + 1}`, file.blob, file.name)
);
const json = JSON.stringify(body);
form.append('payload_json', json);
if (body === undefined) body = {
};
body.file = form;
} else if (body !== undefined && ![
'get',
'delete'
].includes(method.toLowerCase())) {
headers['Content-Type'] = 'application/json';
}
if (this.headers !== undefined) Object.assign(headers, this.headers);
const data12 = {
headers,
body: body?.file ?? JSON.stringify(body),
method: method.toUpperCase()
};
return data12;
}
isRateLimited(url) {
const global = this.rateLimits.get('global');
const rateLimited = this.rateLimits.get(url);
const now = Date.now();
if (rateLimited !== undefined && now < rateLimited.resetAt) {
return rateLimited.resetAt - now;
}
if (global !== undefined && now < global.resetAt) {
return global.resetAt - now;
}
return false;
}
processHeaders(url, headers) {
let rateLimited = false;
const global = headers.get('x-ratelimit-global');
const bucket = headers.get('x-ratelimit-bucket');
const remaining = headers.get('x-ratelimit-remaining');
const resetAt = headers.get('x-ratelimit-reset');
const retryAfter = headers.get('retry-after');
if (remaining !== null && remaining === '0') {
rateLimited = true;
this.rateLimits.set(url, {
url,
resetAt: Number(resetAt) * 1000,
bucket
});
if (bucket !== null) {
this.rateLimits.set(bucket, {
url,
resetAt: Number(resetAt) * 1000,
bucket
});
}
}
if (global !== null) {
const reset = Date.now() + Number(retryAfter);
this.globalRateLimit = true;
rateLimited = true;
this.rateLimits.set('global', {
url: 'global',
resetAt: reset,
bucket
});
if (bucket !== null) {
this.rateLimits.set(bucket, {
url: 'global',
resetAt: reset,
bucket
});
}
}
return rateLimited ? bucket : undefined;
}
handleStatusCode(response, body, data, reject) {
const status = response.status;
if (status === HttpResponseCode1.TooManyRequests) {
if (this.client !== undefined) this.client.emit('rateLimit', {
method: data.method,
url: response.url,
body
});
reject(new Error('RateLimited'));
return;
}
if (status >= 200 && status < 400 || status === HttpResponseCode1.NoContent) return;
let text = Deno.inspect(body.errors === undefined ? body : body.errors);
if (text === 'undefined') text = undefined;
if (status === HttpResponseCode1.Unauthorized) reject(new DiscordAPIError1(`Request was Unauthorized. Invalid Token.\n${text}`));
const _data2 = {
...data
};
if (_data2?.headers !== undefined) delete _data2.headers;
if (_data2?.method !== undefined) delete _data2.method;
const error1 = {
url: new URL(response.url).pathname,
status,
method: data.method,
code: body?.code,
message: body?.message,
errors: body?.errors ?? {
},
requestData: _data2
};
if ([
HttpResponseCode1.BadRequest,
HttpResponseCode1.NotFound,
HttpResponseCode1.Forbidden,
HttpResponseCode1.MethodNotAllowed
].includes(status)) {
reject(new DiscordAPIError1(error1));
} else if (status === HttpResponseCode1.GatewayUnavailable) {
reject(new DiscordAPIError1(error1));
} else reject(new DiscordAPIError1('Request - Unknown Error'));
}
async make(method, url, body, maxRetries = 0, bucket, rawResponse) {
return await new Promise((resolve3, reject)=>{
const onComplete = async ()=>{
try {
const rateLimitResetIn = await this.isRateLimited(url);
if (rateLimitResetIn !== false) {
return {
rateLimited: rateLimitResetIn,
before: true,
bucket
};
}
const query = method === 'get' && body !== undefined ? Object.entries(body).filter(([k, v])=>v !== undefined
).map(([key, value])=>`${encodeURIComponent(key)}=${encodeURIComponent(value)}`
).join('&') : '';
let urlToUse = method === 'get' && query !== '' ? `${url}?${query}` : url;
if (!urlToUse.startsWith('http')) {
if (!urlToUse.startsWith('/')) urlToUse = `/${urlToUse}`;
urlToUse = Constants.DISCORD_API_URL + '/v' + Constants.DISCORD_API_VERSION + urlToUse;
}
if (this.canary === true && urlToUse.startsWith('http')) {
const split = urlToUse.split('//');
urlToUse = split[0] + '//canary.' + split[1];
}
const requestData = this.prepare(body, method);
const response = await fetch(urlToUse, requestData);
const bucketFromHeaders = this.processHeaders(url, response.headers);
if (response.status === 204) return resolve3(rawResponse === true ? {
response,
body: null
} : undefined);
const json = await response.json();
await this.handleStatusCode(response, json, requestData, reject);
if (json.retry_after !== undefined || json.message === 'You are being rate limited.') {
if (maxRetries > 10) {
throw new Error('Max RateLimit Retries hit');
}
return {
rateLimited: json.retry_after,
before: false,
bucket: bucketFromHeaders
};
}
return resolve3(rawResponse === true ? {
response,
body: json
} : json);
} catch (error1) {
return reject(error1);
}
};
this.queue({
onComplete,
bucket,
url
});
if (!this.processing) {
this.processing = true;
this.processQueue();
}
});
}
handleRateLimits() {
const now = Date.now();
this.rateLimits.forEach((value, key)=>{
if (value.resetAt > now) return;
this.rateLimits.delete(key);
if (key === 'global') this.globalRateLimit = false;
});
}
async get(url, body, maxRetries = 0, bucket, rawResponse) {
return await this.make('get', url, body, maxRetries, bucket, rawResponse);
}
async post(url, body, maxRetries = 0, bucket, rawResponse) {
return await this.make('post', url, body, maxRetries, bucket, rawResponse);
}
async delete(url, body, maxRetries = 0, bucket, rawResponse) {
return await this.make('delete', url, body, maxRetries, bucket, rawResponse);
}
async patch(url, body, maxRetries = 0, bucket, rawResponse) {
return await this.make('patch', url, body, maxRetries, bucket, rawResponse);
}
async put(url, body, maxRetries = 0, bucket, rawResponse) {
return await this.make('put', url, body, maxRetries, bucket, rawResponse);
}
}
class MemberRolesManager extends BaseChildManager1 {
constructor(client21, parent3, member1){
super(client21, parent3);
this.member = member1;
}
async get(id) {
const res = await this.parent.get(id);
const mem = await this.parent.guild.members._get(this.member.id);
if (res !== undefined && (mem.roles.includes(res.id) === true || res.id === this.member.guild.id)) return res;
else return undefined;
}
async array() {
const arr = await this.parent.array();
const mem = await this.parent.guild.members._get(this.member.id);
return arr.filter((c)=>mem.roles.includes(c.id) || c.id === this.member.guild.id
);
}
async flush() {
const arr = await this.array();
for (const elem of arr){
this.parent._delete(elem.id);
}
return true;
}
async add(role) {
const res = await this.client.rest.put(GUILD_MEMBER_ROLE(this.member.guild.id, this.member.id, typeof role === 'string' ? role : role.id), undefined, undefined, undefined, true);
return res.response.status === 204;
}
async remove(role) {
const res = await this.client.rest.delete(GUILD_MEMBER_ROLE(this.member.guild.id, this.member.id, typeof role === 'string' ? role : role.id), undefined, undefined, undefined, true);
return res.response.status === 204;
}
}
class GuildChannelVoiceStatesManager extends BaseChildManager1 {
constructor(client22, parent4, channel2){
super(client22, parent4);
this.channel = channel2;
}
async get(id) {
const res = await this.parent.get(id);
if (res !== undefined && res.channel?.id === this.channel.id) return res;
else return undefined;
}
async array() {
const arr = await this.parent.array();
return arr.filter((c)=>c.channel?.id === this.channel.id
);
}
async fromPayload(d) {
for (const data12 of d){
await this.set(data12.user_id, data12);
}
}
}
class Channel1 extends SnowflakeBase {
static cacheName = 'channel';
get mention() {
return `<#${this.id}>`;
}
constructor(client23, data12){
super(client23, data12);
this.type = data12.type;
this.id = data12.id;
}
readFromData(data) {
this.type = data.type ?? this.type;
this.id = data.id ?? this.id;
}
}
class GuildChannel1 extends Channel1 {
constructor(client24, data13, guild8){
super(client24, data13);
this.guildID = data13.guild_id;
this.name = data13.name;
this.guild = guild8;
this.position = data13.position;
this.permissionOverwrites = data13.permission_overwrites;
this.nsfw = data13.nsfw;
this.parentID = data13.parent_id;
}
readFromData(data) {
super.readFromData(data);
this.guildID = data.guild_id ?? this.guildID;
this.name = data.name ?? this.name;
this.position = data.position ?? this.position;
this.permissionOverwrites = data.permission_overwrites ?? this.permissionOverwrites;
this.nsfw = data.nsfw ?? this.nsfw;
this.parentID = data.parent_id ?? this.parentID;
}
async overwritesFor(target) {
const stringToObject = typeof target === 'string' ? await this.guild.members.get(target) ?? await this.guild.roles.get(target) : target;
if (stringToObject === undefined) {
throw new Error('Member or Role not found');
} else {
target = stringToObject;
}
const roles = target instanceof Member ? await target.roles.array() : undefined;
const overwrites = [];
for (const overwrite of this.permissionOverwrites){
if (overwrite.id === this.guild.id || roles?.some((e)=>e.id === overwrite.id
) === true || overwrite.id === target.id) {
const id2 = (await this.guild.members.get(overwrite.id) ?? await this.guild.roles.get(overwrite.id)) ?? overwrite.id;
const allow = new Permissions1(overwrite.allow);
const deny = new Permissions1(overwrite.deny);
overwrites.push({
id: id2,
type: overwrite.type,
allow,
deny
});
}
}
return overwrites;
}
async permissionsFor(target) {
const id2 = typeof target === 'string' ? target : target.id;
if (id2 === this.guild.ownerID) return new Permissions1(Permissions1.ALL);
const stringToObject = typeof target === 'string' ? await this.guild.members.get(target) ?? await this.guild.roles.get(target) : target;
if (stringToObject === undefined) {
throw new Error('Member or Role not found');
} else {
target = stringToObject;
}
if (target.permissions.has('ADMINISTRATOR') === true) return new Permissions1(Permissions1.ALL);
const overwrites = await this.overwritesFor(target);
const everyoneOW = overwrites.find((e)=>e.id === this.guild.id
);
const roleOWs = overwrites.filter((e)=>e.type === 0
);
const memberOWs = overwrites.filter((e)=>e.type === 1
);
return target.permissions.remove(everyoneOW !== undefined ? Number(everyoneOW.deny) : 0).add(everyoneOW !== undefined ? Number(everyoneOW.allow) : 0).remove(roleOWs.length === 0 ? 0 : roleOWs.map((e)=>Number(e.deny)
)).add(roleOWs.length === 0 ? 0 : roleOWs.map((e)=>Number(e.allow)
)).remove(memberOWs.length === 0 ? 0 : memberOWs.map((e)=>Number(e.deny)
)).add(memberOWs.length === 0 ? 0 : memberOWs.map((e)=>Number(e.allow)
));
}
async edit(options) {
const body = {
name: options?.name,
position: options?.position,
permission_overwrites: options?.permissionOverwrites,
parent_id: options?.parentID,
nsfw: options?.nsfw
};
const resp = await this.client.rest.patch(CHANNEL(this.id), body);
return getChannelByType(this.client, resp, this.guild) ?? new GuildChannel1(this.client, resp, this.guild);
}
async setName(name) {
return await this.edit({
name
});
}
async setNSFW(nsfw) {
return await this.edit({
nsfw
});
}
async setOverwrites(overwrites) {
const result = overwrites.map((overwrite)=>{
const id2 = typeof overwrite.id === 'string' ? overwrite.id : overwrite.id.id;
const allow = typeof overwrite.allow === 'string' ? overwrite.allow : overwrite.allow?.toJSON() ?? '0';
const deny = typeof overwrite.deny === 'string' ? overwrite.deny : overwrite.deny?.toJSON() ?? '0';
const type = overwrite.id instanceof Role1 ? 0 : overwrite.id instanceof Member ? 1 : overwrite.type;
if (type === undefined) {
throw new Error('Overwrite type is undefined.');
}
return {
id: id2,
type,
allow,
deny
};
});
return await this.edit({
permissionOverwrites: result
});
}
async addOverwrite(overwrite) {
const overwrites = this.permissionOverwrites;
const id2 = typeof overwrite.id === 'string' ? overwrite.id : overwrite.id.id;
const allow = typeof overwrite.allow === 'string' ? overwrite.allow : overwrite.allow?.toJSON() ?? '0';
const deny = typeof overwrite.deny === 'string' ? overwrite.deny : overwrite.deny?.toJSON() ?? '0';
const type = overwrite.id instanceof Role1 ? 0 : overwrite.id instanceof Member ? 1 : overwrite.type;
if (type === undefined) {
throw new Error('Overwrite type is undefined.');
}
overwrites.push({
id: id2,
type,
allow,
deny
});
return await this.edit({
permissionOverwrites: overwrites
});
}
async removeOverwrite(target) {
target = typeof target === 'string' ? target : target.id;
if (this.permissionOverwrites.find((e)=>e.id === target
) === undefined) throw new Error('Permission Overwrite not found');
const overwrites = this.permissionOverwrites.filter((e)=>e.id !== target
);
return await this.edit({
permissionOverwrites: overwrites
});
}
async editOverwrite(overwrite, { allow: overwriteAllow = OverrideType1.ADD , deny: overwriteDeny = OverrideType1.ADD }) {
const id2 = typeof overwrite.id === 'string' ? overwrite.id : overwrite.id.id;
const index = this.permissionOverwrites.findIndex((e)=>e.id === id2
);
if (index < 0) throw new Error('Permission Overwrite not found');
const overwrites = this.permissionOverwrites;
let allow;
let deny;
if (overwrite.allow !== undefined && overwriteAllow !== OverrideType1.REPLACE) {
switch(overwriteAllow){
case OverrideType1.ADD:
{
const originalAllow = new Permissions1(overwrites[index].allow);
const newAllow = new Permissions1(overwrite.allow);
allow = originalAllow.add([
newAllow
]).toJSON();
break;
}
case OverrideType1.REMOVE:
{
const originalAllow = new Permissions1(overwrites[index].allow);
const newAllow = new Permissions1(overwrite.allow);
allow = originalAllow.remove([
newAllow
]).toJSON();
break;
}
}
} else {
allow = typeof overwrite.allow === 'string' ? overwrite.allow : overwrite.allow?.toJSON() ?? overwrites[index].allow;
}
if (overwrite.deny !== undefined && overwriteDeny !== OverrideType1.REPLACE) {
switch(overwriteDeny){
case OverrideType1.ADD:
{
const originalDeny = new Permissions1(overwrites[index].deny);
const newDeny = new Permissions1(overwrite.deny);
deny = originalDeny.add([
newDeny
]).toJSON();
break;
}
case OverrideType1.REMOVE:
{
const originalDeny = new Permissions1(overwrites[index].deny);
const newDeny = new Permissions1(overwrite.deny);
deny = originalDeny.remove([
newDeny
]).toJSON();
break;
}
}
} else {
deny = typeof overwrite.deny === 'string' ? overwrite.deny : overwrite.deny?.toJSON() ?? overwrites[index].deny;
}
const type = overwrite.id instanceof Role1 ? 0 : overwrite.id instanceof Member ? 1 : overwrite.type;
if (type === undefined) {
throw new Error('Overwrite type is undefined.');
}
overwrites[index] = {
id: id2,
type,
allow,
deny
};
return await this.edit({
permissionOverwrites: overwrites
});
}
async setPosition(position) {
return await this.edit({
position
});
}
}
class CategoryChannel1 extends GuildChannel1 {
readFromData(data) {
super.readFromData(data);
}
async edit(options) {
const body = {
name: options?.name,
position: options?.position,
permission_overwrites: options?.permissionOverwrites,
parent_id: options?.parentID
};
const resp = await this.client.rest.patch(CHANNEL(this.id), body);
return new CategoryChannel1(this.client, resp, this.guild);
}
}
class MessagesManager1 extends BaseManager1 {
constructor(client25, channel1){
super(client25, 'messages', Message1);
this.channel = channel1;
}
async get(key) {
const raw = await this._get(key);
if (raw === undefined) return;
if (raw.author === undefined) return;
let channel2 = await this.client.channels.get(raw.channel_id);
if (channel2 === undefined) channel2 = await this.client.channels.fetch(raw.channel_id);
let author = await this.client.users.get(raw.author.id);
if (author === undefined) author = new User1(this.client, raw.author);
const res = new this.DataType(this.client, raw, channel2, author);
await res.mentions.fromPayload(raw);
return res;
}
async set(key, value) {
return this.client.cache.set(this.cacheName, key, value, this.client.messageCacheLifetime);
}
async array() {
let arr = await this.client.cache.array(this.cacheName);
if (arr === undefined) arr = [];
const result = [];
await Promise.all(arr.map(async (raw)=>{
if (raw.author === undefined) return;
let channel2 = await this.client.channels.get(raw.channel_id);
if (channel2 === undefined) channel2 = await this.client.channels.fetch(raw.channel_id);
if (channel2 === undefined) return;
let author = await this.client.users.get(raw.author.id);
if (author === undefined) author = new User1(this.client, raw.author);
const res = new Message1(this.client, raw, channel2, author);
await res.mentions.fromPayload(raw);
result.push(res);
}));
return result;
}
async fetch(id) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(CHANNEL_MESSAGE(this.channel.id, id)).then(async (data14)=>{
await this.set(id, data14);
let channel2 = await this.client.channels.get(this.channel.id);
if (channel2 === undefined) channel2 = await this.client.channels.fetch(this.channel.id);
await this.client.users.set(data14.author.id, data14.author);
const res = await this.get(data14.id);
await res.mentions.fromPayload(data14);
resolve3(res);
}).catch((e)=>reject(e)
);
});
}
}
class TextChannel1 extends Channel1 {
constructor(client26, data14){
super(client26, data14);
this.messages = new MessagesManager1(this.client, this);
this.lastMessageID = data14.last_message_id;
this.lastPinTimestamp = data14.last_pin_timestamp;
}
readFromData(data) {
super.readFromData(data);
this.lastMessageID = data.last_message_id ?? this.lastMessageID;
this.lastPinTimestamp = data.last_pin_timestamp ?? this.lastPinTimestamp;
}
async send(content, option, reply) {
return this.client.channels.sendMessage(this, content, Object.assign(option ?? {
}, {
reply
}));
}
async editMessage(message, text, option) {
return this.client.channels.editMessage(this, message, text, option);
}
async addReaction(message, emoji) {
if (emoji instanceof Emoji1) {
emoji = `${emoji.name}:${emoji.id}`;
} else if (emoji.length > 4) {
if (!isNaN(Number(emoji))) {
const findEmoji = await this.client.emojis.get(emoji);
if (findEmoji !== undefined) emoji = `${findEmoji.name}:${findEmoji.id}`;
else throw new Error(`Emoji not found: ${emoji}`);
}
}
if (message instanceof Message1) message = message.id;
const encodedEmoji = encodeURI(emoji);
await this.client.rest.put(MESSAGE_REACTION_ME(this.id, message, encodedEmoji));
}
async removeReaction(message, emoji, user) {
if (emoji instanceof Emoji1) {
emoji = `${emoji.name}:${emoji.id}`;
} else if (emoji.length > 4) {
if (!isNaN(Number(emoji))) {
const findEmoji = await this.client.emojis.get(emoji);
if (findEmoji !== undefined) emoji = `${findEmoji.name}:${findEmoji.id}`;
else throw new Error(`Emoji not found: ${emoji}`);
}
}
if (message instanceof Message1) message = message.id;
if (user !== undefined) {
if (typeof user !== 'string') {
user = user.id;
}
}
const encodedEmoji = encodeURI(emoji);
if (user === undefined) {
await this.client.rest.delete(MESSAGE_REACTION_ME(this.id, message, encodedEmoji));
} else {
await this.client.rest.delete(MESSAGE_REACTION_USER(this.id, message, encodedEmoji, user));
}
}
async fetchMessages(options) {
const res = new Collection1();
const raws = await this.client.rest.api.channels[this.id].messages.get({
limit: options?.limit ?? 50,
around: options?.around === undefined ? undefined : typeof options.around === 'string' ? options.around : options.around.id,
before: options?.before === undefined ? undefined : typeof options.before === 'string' ? options.before : options.before.id,
after: options?.after === undefined ? undefined : typeof options.after === 'string' ? options.after : options.after.id
});
for (const raw of raws){
await this.messages.set(raw.id, raw);
const msg = await this.messages.get(raw.id);
res.set(msg.id, msg);
}
return res;
}
async triggerTyping() {
await this.client.rest.api.channels[this.id].typing.post();
return this;
}
}
const GUILD_TEXT_BASED_CHANNEL_TYPES = [
ChannelTypes1.GUILD_TEXT,
ChannelTypes1.GUILD_NEWS
];
class GuildTextBasedChannel1 extends _e(TextChannel1, GuildChannel1) {
get mention() {
return `<#${this.id}>`;
}
toString() {
return this.mention;
}
constructor(client27, data15, guild9){
super(client27, data15, guild9);
this.topic = data15.topic;
}
readFromData(data) {
super.readFromData(data);
this.topic = data.topic ?? this.topic;
}
async edit(options) {
const body = {
name: options?.name,
position: options?.position,
permission_overwrites: options?.permissionOverwrites,
parent_id: options?.parentID,
nsfw: options?.nsfw,
topic: options?.topic
};
const resp = await this.client.rest.patch(CHANNEL(this.id), body);
return new GuildTextBasedChannel1(this.client, resp, this.guild);
}
async bulkDelete(messages) {
let ids = [];
if (Array.isArray(messages)) ids = messages.map((e)=>typeof e === 'string' ? e : e.id
);
else {
let list = await this.messages.array();
if (list.length < messages) list = (await this.fetchMessages()).array();
ids = list.sort((b2, a)=>a.createdAt.getTime() - b2.createdAt.getTime()
).filter((e, i)=>i < messages
).filter((e)=>new Date().getTime() - e.createdAt.getTime() <= 1000 * 60 * 60 * 24 * 14
).map((e)=>e.id
);
}
ids = [
...new Set(ids)
];
if (ids.length < 2 || ids.length > 100) throw new Error('bulkDelete can only delete messages in range 2-100');
await this.client.rest.api.channels[this.id].messages['bulk-delete'].post({
messages: ids
});
return this;
}
async createInvite(options) {
return this.guild.invites.create(this.id, options);
}
async setTopic(topic) {
return await this.edit({
topic
});
}
async setCategory(category) {
return await this.edit({
parentID: typeof category === 'object' ? category.id : category
});
}
}
class NewsChannel1 extends GuildTextBasedChannel1 {
}
const checkGuildTextBasedChannel1 = (channel2)=>GUILD_TEXT_BASED_CHANNEL_TYPES.includes(channel2.type)
;
class GuildTextChannel1 extends GuildTextBasedChannel1 {
constructor(client28, data16, guild10){
super(client28, data16, guild10);
this.slowmode = data16.rate_limit_per_user;
}
readFromData(data) {
super.readFromData(data);
this.slowmode = data.rate_limit_per_user ?? this.slowmode;
}
async edit(options) {
const body = {
name: options?.name,
position: options?.position,
permission_overwrites: options?.permissionOverwrites,
parent_id: options?.parentID,
nsfw: options?.nsfw,
topic: options?.topic,
rate_limit_per_user: options?.slowmode
};
const resp = await this.client.rest.patch(CHANNEL(this.id), body);
return new GuildTextChannel1(this.client, resp, this.guild);
}
async setSlowmode(slowmode) {
return await this.edit({
slowmode: slowmode ?? null
});
}
}
class VoiceChannel1 extends GuildChannel1 {
voiceStates = new GuildChannelVoiceStatesManager(this.client, this.guild.voiceStates, this);
constructor(client29, data17, guild11){
super(client29, data17, guild11);
this.bitrate = data17.bitrate;
this.userLimit = data17.user_limit;
}
async join(options) {
return await new Promise((resolve3, reject)=>{
let vcdata;
let sessionID;
let done = 0;
const onVoiceStateAdd = (state)=>{
if (state.user.id !== this.client.user?.id) return;
if (state.channel?.id !== this.id) return;
this.client.off('voiceStateAdd', onVoiceStateAdd);
done++;
sessionID = state.sessionID;
if (done >= 2) {
vcdata.sessionID = sessionID;
if (options?.onlyJoin !== true) {
}
resolve3(vcdata);
}
};
const onVoiceServerUpdate = (data18)=>{
if (data18.guild.id !== this.guild.id) return;
vcdata = data18;
this.client.off('voiceServerUpdate', onVoiceServerUpdate);
done++;
if (done >= 2) {
vcdata.sessionID = sessionID;
resolve3(vcdata);
}
};
this.client.shards.get(this.guild.shardID)?.updateVoiceState(this.guild.id, this.id, options);
this.client.on('voiceStateAdd', onVoiceStateAdd);
this.client.on('voiceServerUpdate', onVoiceServerUpdate);
setTimeout(()=>{
if (done < 2) {
this.client.off('voiceServerUpdate', onVoiceServerUpdate);
this.client.off('voiceStateAdd', onVoiceStateAdd);
reject(new Error("Connection timed out - couldn't connect to Voice Channel"));
}
}, 1000 * 60);
});
}
leave() {
this.client.shards.get(this.guild.shardID)?.updateVoiceState(this.guild.id, undefined);
}
readFromData(data) {
super.readFromData(data);
this.bitrate = data.bitrate ?? this.bitrate;
this.userLimit = data.user_limit ?? this.userLimit;
}
async edit(options) {
const body = {
name: options?.name,
position: options?.position,
permission_overwrites: options?.permissionOverwrites,
parent_id: options?.parentID,
bitrate: options?.bitrate,
user_limit: options?.userLimit
};
const resp = await this.client.rest.patch(CHANNEL(this.id), body);
return new VoiceChannel1(this.client, resp, this.guild);
}
async disconnectMember(member) {
const memberID = typeof member === 'string' ? member : member.id;
const memberVoiceState = await this.voiceStates.get(memberID);
return memberVoiceState?.disconnect();
}
async disconnectAll() {
const members = [];
for await (const memberVoiceState of this.voiceStates){
const member2 = await memberVoiceState.disconnect();
if (member2 !== undefined) {
members.push(member2);
}
}
return members;
}
}
class DMChannel1 extends TextChannel1 {
constructor(client30, data18){
super(client30, data18);
this.recipients = data18.recipients;
}
readFromData(data) {
super.readFromData(data);
this.recipients = data.recipients ?? this.recipients;
}
}
class GroupDMChannel1 extends Channel1 {
constructor(client31, data19){
super(client31, data19);
this.name = data19.name;
this.icon = data19.icon;
this.ownerID = data19.owner_id;
}
readFromData(data) {
super.readFromData(data);
this.name = data.name ?? this.name;
this.icon = data.icon ?? this.icon;
this.ownerID = data.owner_id ?? this.ownerID;
}
}
const getChannelByType = (client32, data20, guild12)=>{
switch(data20.type){
case ChannelTypes1.GUILD_CATEGORY:
if (guild12 === undefined) throw new Error('No Guild was provided to construct Channel');
return new CategoryChannel1(client32, data20, guild12);
case ChannelTypes1.GUILD_NEWS:
if (guild12 === undefined) throw new Error('No Guild was provided to construct Channel');
return new NewsChannel1(client32, data20, guild12);
case ChannelTypes1.GUILD_TEXT:
if (guild12 === undefined) throw new Error('No Guild was provided to construct Channel');
return new GuildTextChannel1(client32, data20, guild12);
case ChannelTypes1.GUILD_VOICE:
if (guild12 === undefined) throw new Error('No Guild was provided to construct Channel');
return new VoiceChannel1(client32, data20, guild12);
case ChannelTypes1.DM:
return new DMChannel1(client32, data20);
case ChannelTypes1.GROUP_DM:
return new GroupDMChannel1(client32, data20);
}
};
class Member extends SnowflakeBase {
constructor(client32, data20, user2, guild12, perms1){
super(client32);
this.id = data20.user.id;
this.user = user2;
this.nick = data20.nick;
this.guild = guild12;
this.roles = new MemberRolesManager(this.client, this.guild.roles, this);
this.joinedAt = data20.joined_at;
this.premiumSince = data20.premium_since;
this.deaf = data20.deaf;
this.mute = data20.mute;
if (perms1 !== undefined) this.permissions = perms1;
else this.permissions = new Permissions1(Permissions1.DEFAULT);
}
get displayName() {
return this.nick !== null ? this.nick : this.user.username;
}
toString() {
return this.user.nickMention;
}
readFromData(data) {
this.nick = data.nick ?? this.nick;
this.joinedAt = data.joined_at ?? this.joinedAt;
this.premiumSince = data.premium_since ?? this.premiumSince;
this.deaf = data.deaf ?? this.deaf;
this.mute = data.mute ?? this.mute;
}
async fetch() {
const raw = await this.client.rest.get(this.id);
if (typeof raw !== 'object') throw new Error('Member not found');
await this.guild.members.set(this.id, raw);
this.readFromData(raw);
return this;
}
async edit(data) {
const payload = {
nick: data.nick,
roles: data.roles?.map((e)=>typeof e === 'string' ? e : e.id
),
deaf: data.deaf,
mute: data.mute,
channel_id: data.channel instanceof VoiceChannel1 ? data.channel.id : data.channel
};
const res = await this.client.rest.patch(GUILD_MEMBER(this.guild.id, this.id), payload, undefined, null, true);
if (res.ok === true) {
if (data.nick !== undefined) this.nick = data.nick === null ? null : data.nick;
if (data.deaf !== undefined) this.deaf = data.deaf;
if (data.mute !== undefined) this.mute = data.mute;
}
return this;
}
async setNickname(nick) {
return await this.edit({
nick: nick === undefined ? null : nick
});
}
async resetNickname() {
return await this.setNickname();
}
async setMute(mute) {
return await this.edit({
mute: mute ?? false
});
}
async setDeaf(deaf) {
return await this.edit({
deaf: deaf ?? false
});
}
async moveVoiceChannel(channel) {
return await this.edit({
channel: channel ?? null
});
}
async disconnectVoice() {
return await this.edit({
channel: null
});
}
async unmute() {
return await this.setMute(false);
}
async undeaf() {
return await this.setDeaf(false);
}
async kick() {
const resp = await this.client.rest.delete(GUILD_MEMBER(this.guild.id, this.id), undefined, undefined, null, true);
if (resp.ok !== true) return false;
else return true;
}
async ban(reason, deleteOldMessages) {
return this.guild.bans.add(this.id, reason, deleteOldMessages);
}
}
class MembersManager1 extends BaseManager1 {
constructor(client33, guild13){
super(client33, `members:${guild13.id}`, Member);
this.guild = guild13;
}
async get(key) {
const raw = await this._get(key);
if (raw === undefined) return;
const user3 = new User1(this.client, raw.user);
const roles = await this.guild.roles.array();
let permissions = new Permissions1(Permissions1.DEFAULT);
if (roles !== undefined) {
const mRoles = roles.filter((r)=>raw.roles.includes(r.id) || r.id === this.guild.id
);
permissions = new Permissions1(mRoles.map((r)=>r.permissions
));
}
const res = new this.DataType(this.client, raw, user3, this.guild, permissions);
return res;
}
async array() {
let arr = await this.client.cache.array(this.cacheName);
if (arr === undefined) arr = [];
return await Promise.all(arr.map(async (raw)=>{
const user3 = new User1(this.client, raw.user);
const roles = await this.guild.roles.array();
let permissions = new Permissions1(Permissions1.DEFAULT);
if (roles !== undefined) {
const mRoles = roles.filter((r)=>raw.roles.includes(r.id) || r.id === this.guild.id
);
permissions = new Permissions1(mRoles.map((r)=>r.permissions
));
}
return new Member(this.client, raw, user3, this.guild, permissions);
}));
}
async fetch(id) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(GUILD_MEMBER(this.guild.id, id)).then(async (data21)=>{
await this.set(id, data21);
const user3 = new User1(this.client, data21.user);
const roles = await this.guild.roles.array();
let permissions = new Permissions1(Permissions1.DEFAULT);
if (roles !== undefined) {
const mRoles = roles.filter((r)=>data21.roles.includes(r.id) || r.id === this.guild.id
);
permissions = new Permissions1(mRoles.map((r)=>r.permissions
));
}
const res = new Member(this.client, data21, user3, this.guild, permissions);
resolve3(res);
}).catch((e)=>reject(e)
);
});
}
async fromPayload(members) {
for (const member2 of members){
await this.set(member2.user.id, member2);
}
}
}
class GuildBan1 extends Base1 {
constructor(client34, data21, guild14){
super(client34, data21);
this.guild = guild14;
this.reason = data21.reason === null ? undefined : data21.reason;
this.user = new User1(client34, data21.user);
}
}
class GuildBans1 {
constructor(client35, guild15){
this.client = client35;
this.guild = guild15;
}
async all() {
const res = await this.client.rest.get(GUILD_BANS(this.guild.id));
if (typeof res !== 'object' || !Array.isArray(res)) throw new Error('Failed to fetch Guild Bans');
const bans = res.map((ban)=>new GuildBan1(this.client, ban, this.guild)
);
return bans;
}
async get(user) {
const res = await this.client.rest.get(GUILD_BAN(this.guild.id, typeof user === 'string' ? user : user.id));
if (typeof res !== 'object') throw new Error('Failed to fetch Guild Ban');
return new GuildBan1(this.client, res, this.guild);
}
async add(user, reason, deleteMessagesDays) {
const res = await this.client.rest.put(GUILD_BAN(this.guild.id, typeof user === 'string' ? user : user.id), {
reason,
delete_message_days: deleteMessagesDays
}, undefined, null, true);
if (res.response.status !== 204) throw new Error('Failed to Add Guild Ban');
}
async remove(user) {
const res = await this.client.rest.delete(GUILD_BAN(this.guild.id, typeof user === 'string' ? user : user.id), undefined, undefined, null, true);
if (res.response.status !== 204) return false;
else return true;
}
}
class Guild1 extends SnowflakeBase {
get shardID() {
return Number((BigInt(this.id) << 22n) % BigInt(this.client.shardCount));
}
constructor(client36, data22){
super(client36, data22);
this.id = data22.id;
this.unavailable = data22.unavailable;
this.readFromData(data22);
this.bans = new GuildBans1(client36, this);
this.members = new MembersManager1(this.client, this);
this.voiceStates = new GuildVoiceStatesManager(client36, this);
this.presences = new GuildPresencesManager(client36, this);
this.channels = new GuildChannelsManager1(this.client, this.client.channels, this);
this.roles = new RolesManager1(this.client, this);
this.emojis = new GuildEmojisManager1(this.client, this.client.emojis, this);
this.invites = new InviteManager1(this.client, this);
}
readFromData(data) {
this.id = data.id ?? this.id;
this.unavailable = data.unavailable ?? this.unavailable;
if (!this.unavailable) {
this.name = data.name ?? this.name;
this.icon = data.icon ?? this.icon;
this.iconHash = data.icon_hash ?? this.iconHash;
this.splash = data.splash ?? this.splash;
this.discoverySplash = data.discovery_splash ?? this.discoverySplash;
this.owner = data.owner ?? this.owner;
this.ownerID = data.owner_id ?? this.ownerID;
this.permissions = data.permissions ?? this.permissions;
this.region = data.region ?? this.region;
this.afkTimeout = data.afk_timeout ?? this.afkTimeout;
this.afkChannelID = data.afk_channel_id ?? this.afkChannelID;
this.widgetEnabled = data.widget_enabled ?? this.widgetEnabled;
this.widgetChannelID = data.widget_channel_id ?? this.widgetChannelID;
this.verificationLevel = data.verification_level ?? this.verificationLevel;
this.defaultMessageNotifications = data.default_message_notifications ?? this.defaultMessageNotifications;
this.explicitContentFilter = data.explicit_content_filter ?? this.explicitContentFilter;
this.features = data.features ?? this.features;
this.mfaLevel = data.mfa_level ?? this.mfaLevel;
this.systemChannelID = data.system_channel_id ?? this.systemChannelID;
this.systemChannelFlags = data.system_channel_flags ?? this.systemChannelFlags;
this.rulesChannelID = data.rules_channel_id ?? this.rulesChannelID;
this.joinedAt = data.joined_at ?? this.joinedAt;
this.large = data.large ?? this.large;
this.memberCount = data.member_count ?? this.memberCount;
this.maxPresences = data.max_presences ?? this.maxPresences;
this.maxMembers = data.max_members ?? this.maxMembers;
this.vanityURLCode = data.vanity_url_code ?? this.vanityURLCode;
this.description = data.description ?? this.description;
this.banner = data.banner ?? this.banner;
this.premiumTier = data.premium_tier ?? this.premiumTier;
this.premiumSubscriptionCount = data.premium_subscription_count ?? this.premiumSubscriptionCount;
this.preferredLocale = data.preferred_locale ?? this.preferredLocale;
this.publicUpdatesChannelID = data.public_updates_channel_id ?? this.publicUpdatesChannelID;
this.maxVideoChannelUsers = data.max_video_channel_users ?? this.maxVideoChannelUsers;
this.approximateNumberCount = data.approximate_number_count ?? this.approximateNumberCount;
this.approximatePresenceCount = data.approximate_presence_count ?? this.approximatePresenceCount;
}
}
iconURL(format = 'png', size = 512) {
return this.icon != null ? `${ImageURL(GUILD_ICON(this.id, this.icon), format, size)}` : undefined;
}
splashURL(format = 'png', size = 512) {
return this.splash != null ? `${ImageURL(GUILD_SPLASH(this.id, this.splash), format, size)}` : undefined;
}
discoverSplashURL(format = 'png', size = 512) {
return this.discoverySplash != null ? `${ImageURL(GUILD_DISCOVERY_SPLASH(this.id, this.discoverySplash), format, size)}` : undefined;
}
bannerURL(format = 'png', size = 512) {
return this.banner != null ? `${ImageURL(GUILD_BANNER(this.id, this.banner), format, size)}` : undefined;
}
async getEveryoneRole() {
return await this.roles.get(this.id);
}
async me() {
const get = await this.members.get(this.client.user?.id);
if (get === undefined) throw new Error('Guild#me is not cached');
return get;
}
async fetchIntegrations() {
const raw = await this.client.rest.get(GUILD_INTEGRATIONS(this.id));
return raw.map((e)=>new GuildIntegration1(this.client, e)
);
}
async createChannel(options) {
return this.channels.create(options);
}
async createRole(options) {
return this.roles.create(options);
}
async chunk(options, wait = false, timeout = 60000) {
return await new Promise((resolve3, reject)=>{
this.client.shards.get(this.shardID)?.requestMembers(this.id, options);
if (!wait) return resolve3(this);
else {
let chunked = false;
const listener = (guild16)=>{
if (guild16.id === this.id) {
chunked = true;
this.client.off('guildMembersChunked', listener);
resolve3(this);
}
};
this.client.on('guildMembersChunked', listener);
setTimeout(()=>{
if (!chunked) {
this.client.off('guildMembersChunked', listener);
}
}, timeout);
}
});
}
async awaitAvailability(timeout = 1000) {
return await new Promise((resolve3, reject)=>{
if (!this.unavailable) resolve3(this);
const listener = (guild16)=>{
if (guild16.id === this.id) {
this.client.off('guildLoaded', listener);
resolve3(this);
}
};
this.client.on('guildLoaded', listener);
setTimeout(()=>{
this.client.off('guildLoaded', listener);
reject(Error("Timeout. Guild didn't arrive in time."));
}, timeout);
});
}
async createIntegration(id, type) {
await this.client.rest.api.guilds[this.id].integrations.post({
id,
type
});
return this;
}
async editIntegration(id, data) {
await this.client.rest.api.guilds[this.id].integrations[id].patch({
expire_behaviour: data.expireBehavior,
expire_grace_period: data.expireGracePeriod,
enable_emoticons: data.enableEmoticons
});
return this;
}
async deleteIntegration(id) {
await this.client.rest.api.guilds[this.id].integrations[id].delete();
return this;
}
async syncIntegration(id) {
await this.client.rest.api.guilds[this.id].integrations[id].sync.post();
return this;
}
async getWidget() {
return this.client.rest.api.guilds[this.id]['widget.json'].get();
}
async editWidget(data) {
await this.client.rest.api.guilds[this.id].widget.patch({
enabled: data.enabled,
channel_id: typeof data.channel === 'object' ? data.channel.id : data.channel
});
return this;
}
async getVanity() {
try {
const value = await this.client.rest.api.guilds[this.id]['vanity-url'].get();
return value;
} catch (error1) {
if (error1 instanceof DiscordAPIError1) {
if (error1.error?.code === 50020) {
return {
code: null,
uses: 0
};
}
}
throw error1;
}
}
getWidgetImageURL(style) {
return `https://discord.com/api/v${this.client.rest.version ?? 8}/guilds/${this.id}/widget.png${style !== undefined ? `?style=${style}` : ''}`;
}
async leave() {
await this.client.rest.api.users['@me'].guilds[this.id].delete();
return this.client;
}
async getTemplates() {
return this.client.rest.api.guilds[this.id].templates.get().then((temps)=>temps.map((temp)=>new Template(this.client, temp)
)
);
}
async createTemplate(name, description) {
const payload = await this.client.rest.api.guilds[this.id].templates.post({
name,
description
});
return new Template(this.client, payload);
}
async syncTemplate(code) {
const payload = await this.client.rest.api.guilds[this.id].templates[code].put();
return new Template(this.client, payload);
}
async editTemplate(code, data) {
const payload = await this.client.rest.api.guilds[this.id].templates[code].patch({
name: data.name,
description: data.description
});
return new Template(this.client, payload);
}
async deleteTemplate(code) {
await this.client.rest.api.guilds[this.id].templates[code].delete();
return this;
}
async preview() {
return this.client.guilds.preview(this.id);
}
async edit(options) {
const result = await this.client.guilds.edit(this.id, options, true);
this.readFromData(result);
return new Guild1(this.client, result);
}
async delete() {
const result = await this.client.guilds.delete(this.id);
return result === undefined ? this : result;
}
async getPruneCount(options) {
const query = {
days: options?.days,
include_roles: options?.includeRoles?.map((role)=>role instanceof Role1 ? role.id : role
).join(',')
};
const result = await this.client.rest.get(GUILD_PRUNE(this.id) + '?' + Object.entries(query).map(([key, value])=>`${key}=${value}`
).join('&'));
return result.pruned;
}
async prune(options) {
const body = {
days: options?.days,
compute_prune_count: options?.computePruneCount,
include_roles: options?.includeRoles?.map((role)=>role instanceof Role1 ? role.id : role
)
};
const result = await this.client.rest.post(GUILD_PRUNE(this.id), body);
return result.pruned;
}
}
class MessageReactionsManager1 extends BaseManager1 {
constructor(client37, message4){
super(client37, `reactions:${message4.id}`, Guild1);
this.message = message4;
}
async updateRefs() {
const newVal = await this.message.channel.messages.get(this.message.id);
if (newVal !== undefined) {
this.message = newVal;
}
await this.message.updateRefs();
}
async get(id) {
const raw = await this._get(id);
if (raw === undefined) return;
const emojiID = raw.emoji.id !== null ? raw.emoji.id : raw.emoji.name;
let emoji2 = await this.client.emojis.get(emojiID);
if (emoji2 === undefined) emoji2 = new Emoji1(this.client, raw.emoji);
await this.updateRefs();
const reaction1 = new MessageReaction1(this.client, raw, this.message, emoji2);
return reaction1;
}
async set(key, value) {
return this.client.cache.set(this.cacheName, key, value, this.client.reactionCacheLifetime);
}
async array() {
let arr = await this.client.cache.array(this.cacheName);
if (arr === undefined) arr = [];
return await Promise.all(arr.map(async (raw)=>{
const emojiID = raw.emoji.id !== null ? raw.emoji.id : raw.emoji.name;
let emoji2 = await this.client.emojis.get(emojiID);
if (emoji2 === undefined) emoji2 = new Emoji1(this.client, raw.emoji);
return new MessageReaction1(this.client, raw, this.message, emoji2);
}));
}
async flush() {
await this.client.cache.deleteCache(`reaction_users:${this.message.id}`);
return this.client.cache.deleteCache(this.cacheName);
}
async removeAll() {
await this.client.rest.delete(MESSAGE_REACTIONS(this.message.channel.id, this.message.id));
}
async removeEmoji(emoji) {
const val = encodeURIComponent(typeof emoji === 'object' ? emoji.id ?? emoji.name : emoji);
await this.client.rest.delete(MESSAGE_REACTION(this.message.channel.id, this.message.id, val));
return this;
}
async removeUser(emoji, user) {
const val = encodeURIComponent(typeof emoji === 'object' ? emoji.id ?? emoji.name : emoji);
await this.client.rest.delete(MESSAGE_REACTION_USER(this.message.channel.id, this.message.id, val, typeof user === 'string' ? user : user.id));
return this;
}
}
class MessageInteraction1 extends SnowflakeBase {
constructor(client38, data23){
super(client38);
this.id = data23.id;
this.name = data23.name;
this.type = data23.type;
this.user = new User1(this.client, data23.user);
}
}
class Template extends Base1 {
constructor(client39, data24){
super(client39, data24);
this.code = data24.code;
this.name = data24.name;
this.description = data24.description;
this.usageCount = data24.usage_count;
this.creatorID = data24.creator_id;
this.creator = new User1(client39, data24.creator);
this.createdAt = Date.parse(data24.created_at);
this.updatedAt = Date.parse(data24.updated_at);
this.sourceGuildID = data24.source_guild_id;
this.serializedSourceGuild = new Guild1(client39, data24.serialized_source_guild);
this.isDirty = Boolean(data24.is_dirty);
}
async edit(data) {
const res = await this.client.rest.patch(TEMPLATE(this.code), data);
return new Template(this.client, res);
}
async delete() {
const res = await this.client.rest.delete(TEMPLATE(this.code));
return new Template(this.client, res);
}
async sync() {
const res = await this.client.rest.put(TEMPLATE(this.code));
return new Template(this.client, res);
}
}
class GuildIntegration1 extends Base1 {
constructor(client40, data25){
super(client40, data25);
this.id = data25.id;
this.name = data25.name;
this.type = data25.type;
this.enabled = data25.enabled;
this.syncing = data25.syncing;
this.roleID = data25.role_id;
this.enableEmoticons = data25.enable_emoticons;
this.expireBehaviour = data25.expire_behaviour;
this.expireGracePeriod = data25.expire_grace_period;
this.user = data25.user !== undefined ? new User1(client40, data25.user) : undefined;
this.account = data25.account;
this.syncedAt = data25.synced_at;
this.subscriberCount = data25.subscriber_count;
this.revoked = data25.revoked;
this.application = data25.application !== undefined ? new Application1(client40, data25.application) : undefined;
}
}
class Message1 extends SnowflakeBase {
get createdAt() {
return new Date(this.timestamp);
}
constructor(client41, data26, channel3, author){
super(client41);
this.id = data26.id;
this.channelID = data26.channel_id;
this.guildID = data26.guild_id;
this.author = author;
this.content = data26.content;
this.editedTimestamp = data26.edited_timestamp === undefined ? undefined : new Date(data26.edited_timestamp);
this.tts = data26.tts;
this.mentions = new MessageMentions1(this.client, this);
this.attachments = data26.attachments;
this.embeds = data26.embeds.map((v)=>new Embed1(v)
);
this.reactions = new MessageReactionsManager1(this.client, this);
this.nonce = data26.nonce;
this.pinned = data26.pinned;
this.webhookID = data26.webhook_id;
this.type = data26.type;
this.activity = data26.activity;
this.application = data26.application;
this.messageReference = data26.message_reference;
this.flags = data26.flags;
this.channel = channel3;
this.stickers = data26.stickers !== undefined ? data26.stickers.map((payload)=>new MessageSticker(this.client, payload)
) : undefined;
this.interaction = data26.interaction === undefined ? undefined : new MessageInteraction1(this.client, data26.interaction);
}
readFromData(data) {
this.channelID = data.channel_id ?? this.channelID;
this.guildID = data.guild_id ?? this.guildID;
this.content = data.content ?? this.content;
this.editedTimestamp = data.edited_timestamp === undefined ? this.editedTimestamp : new Date(data.edited_timestamp);
this.tts = data.tts ?? this.tts;
this.attachments = data.attachments ?? this.attachments;
this.embeds = data.embeds.map((v)=>new Embed1(v)
) ?? this.embeds;
this.nonce = data.nonce ?? this.nonce;
this.pinned = data.pinned ?? this.pinned;
this.webhookID = data.webhook_id ?? this.webhookID;
this.type = data.type ?? this.type;
this.activity = data.activity ?? this.activity;
this.application = data.application ?? this.application;
this.messageReference = data.message_reference ?? this.messageReference;
this.flags = data.flags ?? this.flags;
this.stickers = data.stickers !== undefined ? data.stickers.map((payload)=>new MessageSticker(this.client, payload)
) : this.stickers;
}
async updateRefs() {
if (this.guildID !== undefined) this.guild = await this.client.guilds.get(this.guildID);
const newVal = await this.client.channels.get(this.channelID);
if (newVal !== undefined) this.channel = newVal;
const newUser = await this.client.users.get(this.author.id);
if (newUser !== undefined) this.author = newUser;
if (this.member !== undefined) {
const newMember = await this.guild?.members.get(this.member?.id);
if (newMember !== undefined) this.member = newMember;
}
if (this.channel.guild !== undefined) this.guild = this.channel.guild;
if (this.guild !== undefined && this.guildID === undefined) this.guildID = this.guild.id;
}
async edit(content, option) {
if (typeof content === 'object') {
option = content;
content = undefined;
}
if (content === undefined && option === undefined) {
throw new Error('Either text or option is necessary.');
}
if (option instanceof Embed1) {
option = {
embed: option
};
}
if (this.client.user !== undefined && this.author.id !== this.client.user?.id) {
throw new Error("Cannot edit other users' messages");
}
return this.channel.editMessage(this.id, content, option);
}
async reply(content, option) {
return this.channel.send(content, option, this);
}
async delete() {
return this.client.rest.delete(CHANNEL_MESSAGE(this.channelID, this.id));
}
async addReaction(emoji) {
return this.channel.addReaction(this, emoji);
}
async removeReaction(emoji, user) {
return this.channel.removeReaction(this, emoji, user);
}
}
class MessageAttachment1 {
constructor(name1, blob){
this.name = name1;
this.blob = typeof blob === 'string' ? new Blob([
encodeText(blob)
]) : blob instanceof Uint8Array ? new Blob([
blob
]) : blob;
}
static async load(path, filename) {
const blob1 = path.startsWith('http') ? await fetch(path).then((res)=>res.blob()
) : await Deno.readFile(path);
if (filename === undefined) {
const split = path.replaceAll('\\', '/').split('/').pop();
if (split !== undefined) filename = split.split('?')[0].split('#')[0];
else filename = 'unnamed_attachment';
}
return new MessageAttachment1(filename, blob1);
}
}
const channelCreate = async (gateway, d)=>{
const guild16 = 'guild_id' in d ? await gateway.client.guilds.get(d.guild_id) : undefined;
const channel4 = getChannelByType(gateway.client, d, guild16);
if (channel4 !== undefined) {
await gateway.client.channels.set(d.id, d);
gateway.client.emit('channelCreate', channel4);
}
};
const channelDelete = async (gateway, d)=>{
const channel4 = await gateway.client.channels.get(d.id);
if (channel4 !== undefined) {
await gateway.client.channels._delete(d.id);
gateway.client.emit('channelDelete', channel4);
}
};
const channelUpdate = async (gateway, d)=>{
const oldChannel = await gateway.client.channels.get(d.id);
await gateway.client.channels.set(d.id, d);
const newChannel = await gateway.client.channels.get(d.id);
if (oldChannel !== undefined) {
gateway.client.emit('channelUpdate', oldChannel, newChannel);
} else gateway.client.emit('channelUpdateUncached', newChannel);
};
const channelPinsUpdate = async (gateway, d)=>{
const before = await gateway.client.channels.get(d.channel_id);
if (before !== undefined) {
const raw = await gateway.client.channels._get(d.channel_id);
if (raw === undefined) return;
await gateway.client.channels.set(raw.id, Object.assign(raw, {
last_pin_timestamp: d.last_pin_timestamp
}));
const after = await gateway.client.channels.get(d.channel_id);
gateway.client.emit('channelPinsUpdate', before, after);
}
};
const guildCreate = async (gateway, d)=>{
const hasGuild = await gateway.client.guilds.get(d.id);
await gateway.client.guilds.set(d.id, d);
const guild16 = await gateway.client.guilds.get(d.id);
if (d.members !== undefined) await guild16.members.fromPayload(d.members);
if (d.channels !== undefined) {
for (const ch of d.channels){
ch.guild_id = d.id;
await gateway.client.channels.set(ch.id, ch);
}
}
await guild16.roles.fromPayload(d.roles);
if (d.presences !== undefined) await guild16.presences.fromPayload(d.presences);
if (d.voice_states !== undefined) await guild16.voiceStates.fromPayload(d.voice_states);
for (const emojiPayload of d.emojis){
if (emojiPayload.id === null) continue;
await gateway.client.emojis.set(emojiPayload.id, emojiPayload);
}
if (hasGuild === undefined) {
gateway.client.emit('guildCreate', guild16);
} else gateway.client.emit('guildLoaded', guild16);
};
const guildDelete = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.id);
if (guild16 !== undefined) {
await guild16.members.flush();
await guild16.channels.flush();
await guild16.roles.flush();
await guild16.presences.flush();
await guild16.emojis.flush();
await gateway.client.guilds._delete(d.id);
gateway.client.emit('guildDelete', guild16);
}
};
const guildUpdate = async (gateway, d)=>{
const before = await gateway.client.guilds.get(d.id);
if (before === undefined) return;
await gateway.client.guilds.set(d.id, d);
const after = await gateway.client.guilds.get(d.id);
gateway.client.emit('guildUpdate', before, after);
};
const guildBanAdd = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
const user3 = await gateway.client.users.get(d.user.id) ?? new User1(gateway.client, d.user);
if (guild16 !== undefined) {
gateway.client.emit('guildBanAdd', guild16, user3);
}
};
const ready1 = async (gateway, d)=>{
gateway.client.upSince = new Date();
if ('application' in d) {
gateway.client.applicationID = d.application.id;
gateway.client.applicationFlags = d.application.flags;
}
await gateway.client.guilds.flush();
await gateway.client.users.set(d.user.id, d.user);
gateway.client.user = new User1(gateway.client, d.user);
gateway.sessionID = d.session_id;
gateway.debug(`Received READY. Session: ${gateway.sessionID}`);
await gateway.cache.set('session_id', gateway.sessionID);
d.guilds.forEach((guild16)=>{
gateway.client.guilds.set(guild16.id, guild16);
});
gateway.client.emit('ready', gateway.shards?.[0] ?? 0);
};
const guildBanRemove = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
const user3 = await gateway.client.users.get(d.user.id) ?? new User1(gateway.client, d.user);
if (guild16 !== undefined) {
gateway.client.emit('guildBanRemove', guild16, user3);
}
};
const messageCreate = async (gateway, d)=>{
let channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) channel4 = await gateway.client.channels.fetch(d.channel_id);
await channel4.messages.set(d.id, d);
const user3 = new User1(gateway.client, d.author);
await gateway.client.users.set(d.author.id, d.author);
let guild16;
let member2;
if (d.guild_id !== undefined) {
guild16 = await gateway.client.guilds.get(d.guild_id);
}
if (guild16 !== undefined && d.member !== undefined) {
d.member.user = d.author;
await guild16.members.set(d.author.id, d.member);
member2 = await guild16.members.get(d.author.id);
}
const message5 = new Message1(gateway.client, d, channel4, user3);
if (guild16 !== undefined) message5.guild = guild16;
await message5.mentions.fromPayload(d);
message5.member = member2;
if (message5.member !== undefined) {
if (message5.member.user === undefined) {
const user4 = await gateway.client.users.get(message5.member.id);
if (user4 !== undefined) {
message5.member.user = user4;
}
}
}
gateway.client.emit('messageCreate', message5);
};
const resume = async (gateway, d)=>{
gateway.debug(`Session Resumed!`);
gateway.client.emit('resumed', gateway.shards?.[0] ?? 0);
if (gateway.client.user === undefined) gateway.client.user = new User1(gateway.client, await gateway.client.rest.get(CLIENT_USER()));
gateway.client.emit('ready', gateway.shards?.[0] ?? 0);
};
const reconnect = async (gateway, d)=>{
gateway.client.emit('reconnect', gateway.shards?.[0] ?? 0);
gateway.reconnect();
};
const messageDelete = async (gateway, d)=>{
let channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) channel4 = await gateway.client.channels.fetch(d.channel_id);
const message5 = await channel4.messages.get(d.id);
if (message5 === undefined) return gateway.client.emit('messageDeleteUncached', d);
await channel4.messages._delete(d.id);
gateway.client.emit('messageDelete', message5);
};
const messageUpdate = async (gateway, d)=>{
let channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) channel4 = await gateway.client.channels.fetch(d.channel_id);
if (channel4 === undefined) return;
const message5 = await channel4.messages.get(d.id);
if (message5 === undefined) return;
const raw = await channel4.messages._get(d.id);
if (raw === undefined) return;
const newRaw = raw;
Object.assign(newRaw, d);
await channel4.messages.set(d.id, newRaw);
const newMsg = await channel4.messages.get(d.id);
gateway.client.emit('messageUpdate', message5, newMsg);
};
const guildEmojiUpdate = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 !== undefined) {
const emojis = await guild16.emojis.collection();
const deleted = [];
const added = [];
const updated = [];
const _updated = [];
for (const raw of d.emojis){
const emojiID = raw.id !== null ? raw.id : raw.name;
const has = emojis.get(emojiID);
if (has === undefined) {
await guild16.emojis.set(emojiID, raw);
const emoji2 = await guild16.emojis.get(emojiID);
added.push(emoji2);
} else _updated.push(raw);
}
for (const emoji2 of emojis.values()){
const emojiID = emoji2.id !== null ? emoji2.id : emoji2.name;
const find = _updated.find((e)=>{
const eID = e.id !== null ? e.id : e.name;
return emojiID === eID;
});
if (find === undefined) {
await guild16.emojis.delete(emojiID);
deleted.push(emoji2);
} else {
const foundID = find.id !== null ? find.id : find.name;
const before = await guild16.emojis.get(foundID);
await guild16.emojis.set(foundID, find);
const after = await guild16.emojis.get(foundID);
updated.push({
before,
after
});
}
}
gateway.client.emit('guildEmojisUpdate', guild16);
for (const emoji3 of deleted){
gateway.client.emit('guildEmojiDelete', emoji3);
}
for (const emoji4 of added){
gateway.client.emit('guildEmojiAdd', emoji4);
}
for (const emoji5 of updated){
gateway.client.emit('guildEmojiUpdate', emoji5.before, emoji5.after);
}
}
};
const guildMemberAdd = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
await guild16.members.set(d.user.id, d);
const member2 = await guild16.members.get(d.user.id);
gateway.client.emit('guildMemberAdd', member2);
};
const guildMemberRemove = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
const member2 = await guild16.members.get(d.user.id);
await guild16.members._delete(d.user.id);
if (member2 !== undefined) gateway.client.emit('guildMemberRemove', member2);
else {
const user3 = new User1(gateway.client, d.user);
gateway.client.emit('guildMemberRemoveUncached', user3);
}
};
const guildMemberUpdate = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
const member2 = await guild16.members.get(d.user.id);
const newMemberPayload = {
user: d.user,
roles: d.roles,
joined_at: d.joined_at,
nick: d.nick,
premium_since: d.premium_since,
deaf: member2?.deaf ?? false,
mute: member2?.mute ?? false
};
await guild16.members.set(d.user.id, newMemberPayload);
const newMember = await guild16.members.get(d.user.id);
if (member2 !== undefined) gateway.client.emit('guildMemberUpdate', member2, newMember);
else {
gateway.client.emit('guildMemberUpdateUncached', newMember);
}
};
const guildRoleCreate = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
await guild16.roles.set(d.role.id, d.role);
const role = await guild16.roles.get(d.role.id);
gateway.client.emit('guildRoleCreate', role);
};
const guildRoleDelete = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
const role = await guild16.roles.get(d.role_id);
if (role === undefined) return;
await guild16.roles._delete(d.role_id);
gateway.client.emit('guildRoleDelete', role);
};
const guildRoleUpdate = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
const role = await guild16.roles.get(d.role.id);
await guild16.roles.set(d.role.id, d.role);
const newRole = await guild16.roles.get(d.role.id);
if (role === undefined) return gateway.client.emit('guildRoleUpdateUncached', newRole);
gateway.client.emit('guildRoleUpdate', role, newRole);
};
const guildIntegrationsUpdate = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
gateway.client.emit('guildIntegrationsUpdate', guild16);
};
const webhooksUpdate = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
const channel4 = await guild16.channels.get(d.channel_id);
if (channel4 === undefined) gateway.client.emit('webhooksUpdateUncached', guild16, d.channel_id);
else gateway.client.emit('webhooksUpdate', guild16, channel4);
};
const messageDeleteBulk = async (gateway, d)=>{
let channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) channel4 = await gateway.client.channels.fetch(d.channel_id);
const messages = new Collection1();
const uncached = new Set();
for (const id2 of d.ids){
const message5 = await channel4.messages.get(id2);
if (message5 === undefined) uncached.add(id2);
else {
messages.set(id2, message5);
await channel4.messages._delete(id2);
}
}
gateway.client.emit('messageDeleteBulk', channel4, messages, uncached);
};
const userUpdate = async (gateway, d)=>{
const oldUser = await gateway.client.users.get(d.id);
await gateway.client.users.set(d.id, d);
const newUser = await gateway.client.users.get(d.id);
if (oldUser !== undefined) {
gateway.client.emit('userUpdate', oldUser, newUser);
} else gateway.client.emit('userUpdateUncached', newUser);
};
const typingStart = async (gateway, d)=>{
const user3 = await gateway.client.users.get(d.user_id);
if (user3 === undefined) return;
const channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) return;
const guild16 = d.guild_id !== undefined ? await gateway.client.guilds.get(d.guild_id) : undefined;
if (guild16 === undefined && d.guild_id !== undefined) return;
const member2 = d.member !== undefined && guild16 !== undefined ? new Member(gateway.client, d.member, user3, guild16) : undefined;
gateway.client.emit('typingStart', user3, channel4, new Date(d.timestamp), guild16 !== undefined && member2 !== undefined ? {
guild: guild16,
member: member2
} : undefined);
};
const voiceServerUpdate = async (gateway, d)=>{
gateway.client.emit('voiceServerUpdate', {
token: d.token,
endpoint: d.endpoint,
guild: await gateway.client.guilds.get(d.guild_id)
});
};
const voiceStateUpdate = async (gateway, d)=>{
if (d.guild_id === undefined) return;
const guild16 = await gateway.client.guilds.get(d.guild_id);
const voiceState = await guild16.voiceStates.get(d.user_id);
if (d.channel_id === null) {
if (voiceState === undefined) {
await guild16.members.set(d.user_id, d.member);
const member2 = await guild16.members.get(d.user_id);
return gateway.client.emit('voiceStateRemoveUncached', {
guild: guild16,
member: member2
});
}
await guild16.voiceStates._delete(d.user_id);
gateway.client.emit('voiceStateRemove', voiceState);
return;
}
await guild16.voiceStates.set(d.user_id, d);
const newVoiceState = await guild16.voiceStates.get(d.user_id);
if (voiceState === undefined) {
gateway.client.emit('voiceStateAdd', newVoiceState);
} else {
gateway.client.emit('voiceStateUpdate', voiceState, newVoiceState);
}
};
const messageReactionAdd = async (gateway, d)=>{
let channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) channel4 = await gateway.client.channels.fetch(d.channel_id);
if (channel4 === undefined) return;
let message5 = await channel4.messages.get(d.message_id);
if (message5 === undefined) {
if (gateway.client.fetchUncachedReactions === true) {
message5 = await channel4.messages.fetch(d.message_id);
if (message5 === undefined) return;
} else return;
}
let user3 = await gateway.client.users.get(d.user_id);
if (user3 === undefined) {
if (gateway.client.fetchUncachedReactions === true) {
user3 = await gateway.client.users.fetch(d.user_id);
if (user3 === undefined) return;
} else return;
}
const emojiID = d.emoji.id !== null ? d.emoji.id : d.emoji.name;
let reaction1 = await message5.reactions.get(emojiID);
if (reaction1 === undefined) {
await message5.reactions.set(emojiID, {
count: 1,
emoji: d.emoji,
me: d.user_id === gateway.client.user?.id
});
reaction1 = await message5.reactions.get(emojiID);
}
const rawUser = await gateway.client.users.get(d.user_id);
reaction1.users.set(rawUser.id, rawUser);
gateway.client.emit('messageReactionAdd', reaction1, user3);
};
const messageReactionRemove = async (gateway, d)=>{
let channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) channel4 = await gateway.client.channels.fetch(d.channel_id);
if (channel4 === undefined) return;
let message5 = await channel4.messages.get(d.message_id);
if (message5 === undefined) {
if (gateway.client.fetchUncachedReactions === true) {
message5 = await channel4.messages.fetch(d.message_id);
if (message5 === undefined) return;
} else return;
}
let user3 = await gateway.client.users.get(d.user_id);
if (user3 === undefined) {
if (gateway.client.fetchUncachedReactions === true) {
user3 = await gateway.client.users.fetch(d.user_id);
if (user3 === undefined) return;
} else return;
}
const emojiID = d.emoji.id !== null ? d.emoji.id : d.emoji.name;
const reaction1 = await message5.reactions.get(emojiID);
if (reaction1 === undefined) return;
reaction1.users._delete(d.user_id);
gateway.client.emit('messageReactionRemove', reaction1, user3);
};
const messageReactionRemoveAll = async (gateway, d)=>{
let channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) channel4 = await gateway.client.channels.fetch(d.channel_id);
if (channel4 === undefined) return;
let message5 = await channel4.messages.get(d.message_id);
if (message5 === undefined) {
if (gateway.client.fetchUncachedReactions === true) {
message5 = await channel4.messages.fetch(d.message_id);
if (message5 === undefined) return;
} else return;
}
await message5.reactions.flush();
gateway.client.emit('messageReactionRemoveAll', message5);
};
const messageReactionRemoveEmoji = async (gateway, d)=>{
let channel4 = await gateway.client.channels.get(d.channel_id);
if (channel4 === undefined) channel4 = await gateway.client.channels.fetch(d.channel_id);
if (channel4 === undefined) return;
let message5 = await channel4.messages.get(d.message_id);
if (message5 === undefined) {
if (gateway.client.fetchUncachedReactions === true) {
message5 = await channel4.messages.fetch(d.message_id);
if (message5 === undefined) return;
} else return;
}
const emojiID = d.emoji.id !== null ? d.emoji.id : d.emoji.name;
const reaction1 = await message5.reactions.get(emojiID);
if (reaction1 === undefined) return;
await reaction1.users.flush();
gateway.client.emit('messageReactionRemoveEmoji', message5, reaction1.emoji);
};
const guildMembersChunk = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
for (const member2 of d.members){
await guild16.members.set(member2.user.id, member2);
}
if (d.chunk_index === 0) await guild16.presences.flush();
if (d.presences !== undefined) {
for (const pres of d.presences){
await guild16.presences.set(pres.user.id, pres);
}
}
gateway.client.emit('guildMembersChunk', guild16, {
members: d.members.map((m1)=>m1.user.id
),
presences: d.presences === undefined ? undefined : d.presences.map((p)=>p.user.id
),
chunkIndex: d.chunk_index,
chunkCount: d.chunk_count
});
if (d.chunk_index >= d.chunk_count - 1) {
gateway.client.emit('guildMembersChunked', guild16, d.chunk_count);
}
};
const presenceUpdate = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
await guild16.presences.set(d.user.id, d);
const presence = await guild16.presences.get(d.user.id);
if (presence === undefined) return;
gateway.client.emit('presenceUpdate', presence);
};
const inviteCreate = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
const cachedChannel = await gateway.client.channels._get(d.channel_id);
const cachedGuild = d.guild_id === undefined ? undefined : await guild16.client.guilds._get(d.guild_id);
const dataConverted = {
code: d.code,
guild: cachedGuild,
channel: cachedChannel,
inviter: d.inviter,
target_user: d.target_user,
target_user_type: d.target_user_type
};
await guild16.invites.set(d.code, dataConverted);
const invite = await guild16.invites.get(d.code);
gateway.client.emit('inviteCreate', invite);
};
const inviteDelete = async (gateway, d)=>{
const guild16 = await gateway.client.guilds.get(d.guild_id);
if (guild16 === undefined) return;
const cachedInvite = await guild16.invites.get(d.code);
const cachedChannel = await gateway.client.channels.get(d.channel_id);
const cachedGuild = await gateway.client.guilds.get(d.guild_id);
if (cachedInvite === undefined) {
const uncachedInvite = {
guild: cachedGuild,
channel: cachedChannel,
code: d.code
};
return gateway.client.emit('inviteDeleteUncached', uncachedInvite);
} else {
await guild16.invites._delete(d.code);
gateway.client.emit('inviteDelete', cachedInvite);
}
};
var InteractionType1;
(function(InteractionType1) {
InteractionType1[InteractionType1["PING"] = 1] = "PING";
InteractionType1[InteractionType1["APPLICATION_COMMAND"] = 2] = "APPLICATION_COMMAND";
})(InteractionType1 || (InteractionType1 = {
}));
var SlashCommandOptionType1;
(function(SlashCommandOptionType1) {
SlashCommandOptionType1[SlashCommandOptionType1["SUB_COMMAND"] = 1] = "SUB_COMMAND";
SlashCommandOptionType1[SlashCommandOptionType1["SUB_COMMAND_GROUP"] = 2] = "SUB_COMMAND_GROUP";
SlashCommandOptionType1[SlashCommandOptionType1["STRING"] = 3] = "STRING";
SlashCommandOptionType1[SlashCommandOptionType1["INTEGER"] = 4] = "INTEGER";
SlashCommandOptionType1[SlashCommandOptionType1["BOOLEAN"] = 5] = "BOOLEAN";
SlashCommandOptionType1[SlashCommandOptionType1["USER"] = 6] = "USER";
SlashCommandOptionType1[SlashCommandOptionType1["CHANNEL"] = 7] = "CHANNEL";
SlashCommandOptionType1[SlashCommandOptionType1["ROLE"] = 8] = "ROLE";
})(SlashCommandOptionType1 || (SlashCommandOptionType1 = {
}));
var InteractionResponseType1;
(function(InteractionResponseType1) {
InteractionResponseType1[InteractionResponseType1["PONG"] = 1] = "PONG";
InteractionResponseType1[InteractionResponseType1["ACKNOWLEDGE"] = 2] = "ACKNOWLEDGE";
InteractionResponseType1[InteractionResponseType1["CHANNEL_MESSAGE"] = 3] = "CHANNEL_MESSAGE";
InteractionResponseType1[InteractionResponseType1["CHANNEL_MESSAGE_WITH_SOURCE"] = 4] = "CHANNEL_MESSAGE_WITH_SOURCE";
InteractionResponseType1[InteractionResponseType1["DEFERRED_CHANNEL_MESSAGE"] = 5] = "DEFERRED_CHANNEL_MESSAGE";
})(InteractionResponseType1 || (InteractionResponseType1 = {
}));
var InteractionResponseFlags1;
(function(InteractionResponseFlags1) {
InteractionResponseFlags1[InteractionResponseFlags1["EPHEMERAL"] = 64] = "EPHEMERAL";
})(InteractionResponseFlags1 || (InteractionResponseFlags1 = {
}));
export { InteractionType1 as InteractionType };
export { SlashCommandOptionType1 as SlashCommandOptionType };
export { InteractionResponseType1 as InteractionResponseType };
export { InteractionResponseFlags1 as InteractionResponseFlags };
class InteractionChannel1 extends SnowflakeBase {
constructor(client42, data27){
super(client42);
this.id = data27.id;
this.name = data27.name;
this.type = data27.type;
this.permissions = new Permissions1(data27.permissions);
}
async resolve() {
return this.client.channels.get(this.id);
}
}
class InteractionUser1 extends User1 {
}
class Interaction1 extends SnowflakeBase {
responded = false;
deferred = false;
constructor(client43, data28, others){
super(client43);
this.type = data28.type;
this.token = data28.token;
this.member = others.member;
this.id = data28.id;
this.applicationID = data28.application_id;
this.user = others.user;
this.data = data28.data;
this.guild = others.guild;
this.channel = others.channel;
this.resolved = others.resolved;
}
get name() {
return this.data?.name;
}
get options() {
return this.data?.options ?? [];
}
option(name) {
const op = this.options.find((e)=>e.name === name
);
if (op === undefined || op.value === undefined) return undefined;
if (op.type === SlashCommandOptionType1.USER) {
const u = this.resolved.users[op.value];
if (this.resolved.members[op.value] !== undefined) u.member = this.resolved.members[op.value];
return u;
} else if (op.type === SlashCommandOptionType1.ROLE) return this.resolved.roles[op.value];
else if (op.type === SlashCommandOptionType1.CHANNEL) return this.resolved.channels[op.value];
else return op.value;
}
async respond(data) {
if (this.responded) throw new Error('Already responded to Interaction');
let flags2 = 0;
if (data.ephemeral === true) flags2 |= InteractionResponseFlags1.EPHEMERAL;
if (data.flags !== undefined) {
if (Array.isArray(data.flags)) flags2 = data.flags.reduce((p, a)=>p | a
, flags2);
else if (typeof data.flags === 'number') flags2 |= data.flags;
}
const payload = {
type: data.type ?? InteractionResponseType1.CHANNEL_MESSAGE_WITH_SOURCE,
data: data.type === undefined || data.type === InteractionResponseType1.CHANNEL_MESSAGE_WITH_SOURCE || data.type === InteractionResponseType1.CHANNEL_MESSAGE ? {
content: data.content ?? '',
embeds: data.embeds,
tts: data.tts ?? false,
flags: flags2,
allowed_mentions: data.allowedMentions ?? undefined
} : undefined
};
if (this._httpRespond !== undefined && this._httpResponded !== true) {
this._httpResponded = true;
await this._httpRespond(payload);
} else await this.client.rest.post(INTERACTION_CALLBACK(this.id, this.token), payload);
this.responded = true;
return this;
}
async defer(ephemeral = false) {
await this.respond({
type: InteractionResponseType1.DEFERRED_CHANNEL_MESSAGE,
flags: ephemeral ? 1 << 6 : 0
});
this.deferred = true;
return this;
}
async reply(content, messageOptions) {
let options2 = typeof content === 'object' ? content : messageOptions;
if (typeof content === 'object' && messageOptions !== undefined && options2 !== undefined) Object.assign(options2, messageOptions);
if (options2 === undefined) options2 = {
};
if (typeof content === 'string') Object.assign(options2, {
content
});
if (this.deferred && this.responded) {
await this.editResponse({
content: options2.content,
embeds: options2.embeds,
flags: options2.flags,
allowedMentions: options2.allowedMentions
});
} else await this.respond(Object.assign(options2, {
type: InteractionResponseType1.CHANNEL_MESSAGE_WITH_SOURCE
}));
return this;
}
async editResponse(data) {
const url = WEBHOOK_MESSAGE(this.applicationID, this.token, '@original');
await this.client.rest.patch(url, {
content: data.content ?? '',
embeds: data.embeds ?? [],
flags: typeof data.flags === 'object' ? data.flags.reduce((p, a)=>p | a
, 0) : data.flags,
allowed_mentions: data.allowedMentions
});
return this;
}
async deleteResponse() {
const url = WEBHOOK_MESSAGE(this.applicationID, this.token, '@original');
await this.client.rest.delete(url);
return this;
}
get url() {
return `https://discord.com/api/v8/webhooks/${this.applicationID}/${this.token}`;
}
async send(text, option) {
if (typeof text === 'object') {
option = text;
text = undefined;
}
if (text === undefined && option === undefined) {
throw new Error('Either text or option is necessary.');
}
if (option instanceof Embed1) option = {
embeds: [
option
]
};
const payload = {
content: text,
embeds: option?.embed !== undefined ? [
option.embed
] : option?.embeds !== undefined ? option.embeds : undefined,
file: option?.file,
files: option?.files,
tts: option?.tts,
allowed_mentions: option?.allowedMentions
};
if (option?.name !== undefined) {
payload.username = option?.name;
}
if (option?.avatar !== undefined) {
payload.avatar = option?.avatar;
}
if (payload.embeds !== undefined && payload.embeds instanceof Array && payload.embeds.length > 10) throw new Error(`Cannot send more than 10 embeds through Interaction Webhook`);
const resp = await this.client.rest.post(`${this.url}?wait=true`, payload);
const res = new Message1(this.client, resp, this, this);
await res.mentions.fromPayload(resp);
return res;
}
async editMessage(msg, data) {
await this.client.rest.patch(WEBHOOK_MESSAGE(this.applicationID, this.token ?? this.client.token, typeof msg === 'string' ? msg : msg.id), data);
return this;
}
async deleteMessage(msg) {
await this.client.rest.delete(WEBHOOK_MESSAGE(this.applicationID, this.token ?? this.client.token, typeof msg === 'string' ? msg : msg.id));
return this;
}
}
export { InteractionChannel1 as InteractionChannel };
export { InteractionUser1 as InteractionUser };
export { Interaction1 as Interaction };
const interactionCreate = async (gateway, d)=>{
if (d.channel_id === undefined) return;
const guild16 = d.guild_id === undefined ? undefined : await gateway.client.guilds.get(d.guild_id);
if (d.member !== undefined) await guild16?.members.set(d.member.user.id, d.member);
const member2 = d.member !== undefined ? await guild16?.members.get(d.member.user.id) : undefined;
if (d.user !== undefined) await gateway.client.users.set(d.user.id, d.user);
const dmUser = d.user !== undefined ? await gateway.client.users.get(d.user.id) : undefined;
const user3 = member2 !== undefined ? member2.user : dmUser;
if (user3 === undefined) return;
const channel4 = await gateway.client.channels.get(d.channel_id) ?? await gateway.client.channels.fetch(d.channel_id);
const resolved = {
users: {
},
channels: {
},
members: {
},
roles: {
}
};
if (d.data?.resolved !== undefined) {
for (const [id2, data29] of Object.entries(d.data.resolved.users ?? {
})){
await gateway.client.users.set(id2, data29);
resolved.users[id2] = await gateway.client.users.get(id2);
if (resolved.members[id2] !== undefined) resolved.users[id2].member = resolved.members[id2];
}
for (const [id3, data30] of Object.entries(d.data.resolved.members ?? {
})){
const roles = await guild16?.roles.array();
let permissions = new Permissions1(Permissions1.DEFAULT);
if (roles !== undefined) {
const mRoles = roles.filter((r)=>data30?.roles?.includes(r.id) || r.id === guild16?.id
);
permissions = new Permissions1(mRoles.map((r)=>r.permissions
));
}
data30.user = d.data.resolved.users?.[id3];
resolved.members[id3] = new Member(gateway.client, data30, resolved.users[id3], guild16, permissions);
}
for (const [id4, data31] of Object.entries(d.data.resolved.roles ?? {
})){
if (guild16 !== undefined) {
await guild16.roles.set(id4, data31);
resolved.roles[id4] = await guild16.roles.get(id4);
} else {
resolved.roles[id4] = new Role1(gateway.client, data31, guild16);
}
}
for (const [id5, data32] of Object.entries(d.data.resolved.channels ?? {
})){
resolved.channels[id5] = new InteractionChannel1(gateway.client, data32);
}
}
const interaction = new Interaction1(gateway.client, d, {
member: member2,
guild: guild16,
channel: channel4,
user: user3,
resolved
});
gateway.client.emit('interactionCreate', interaction);
};
class SlashCommand1 {
constructor(manager, data29, guild16){
this.slash = manager;
this.id = data29.id;
this.applicationID = data29.application_id;
this.name = data29.name;
this.description = data29.description;
this.options = data29.options ?? [];
this.guild = guild16;
}
async delete() {
await this.slash.delete(this.id, this._guild);
}
async edit(data) {
await this.slash.edit(this.id, data, this._guild);
}
handle(func, options) {
this.slash.slash.handle({
name: this.name,
parent: options?.parent,
group: options?.group,
guild: this._guild,
handler: func
});
return this;
}
}
function createSlashOption(type, data30) {
return {
name: data30.name,
type,
description: type === 0 || type === 1 ? undefined : data30.description ?? 'No description.',
options: data30.options?.map((e)=>typeof e === 'function' ? e(SlashOption1) : e
),
choices: data30.choices === undefined ? undefined : data30.choices.map((e)=>typeof e === 'string' ? {
name: e,
value: e
} : e
)
};
}
class SlashOption1 {
static string(data) {
return createSlashOption(SlashCommandOptionType1.STRING, data);
}
static bool(data) {
return createSlashOption(SlashCommandOptionType1.BOOLEAN, data);
}
static subCommand(data) {
return createSlashOption(SlashCommandOptionType1.SUB_COMMAND, data);
}
static subCommandGroup(data) {
return createSlashOption(SlashCommandOptionType1.SUB_COMMAND_GROUP, data);
}
static role(data) {
return createSlashOption(SlashCommandOptionType1.ROLE, data);
}
static channel(data) {
return createSlashOption(SlashCommandOptionType1.CHANNEL, data);
}
static user(data) {
return createSlashOption(SlashCommandOptionType1.USER, data);
}
static number(data) {
return createSlashOption(SlashCommandOptionType1.INTEGER, data);
}
}
function buildOptionsArray(options2) {
return Array.isArray(options2) ? options2.map((op)=>typeof op === 'function' ? op(SlashOption1) : op
) : Object.entries(options2).map((entry)=>typeof entry[1] === 'function' ? entry[1](SlashOption1) : Object.assign(entry[1], {
name: entry[0]
})
);
}
class SlashBuilder1 {
constructor(name2, description1, options2){
this.data = {
name: name2 ?? '',
description: description1 ?? 'No description.',
options: options2 === undefined ? [] : buildOptionsArray(options2)
};
}
name(name) {
this.data.name = name;
return this;
}
description(desc) {
this.data.description = desc;
return this;
}
option(option) {
if (this.data.options === undefined) this.data.options = [];
this.data.options.push(typeof option === 'function' ? option(SlashOption1) : option);
return this;
}
options(options) {
this.data.options = buildOptionsArray(options);
return this;
}
export() {
if (this.data.name === '') throw new Error('Name was not provided in Slash Builder');
return this.data;
}
}
class SlashCommandsManager1 {
constructor(client44){
this.slash = client44;
this.rest = client44.rest;
}
async all() {
const col = new Collection1();
const res = await this.rest.api.applications[this.slash.getID()].commands.get();
if (!Array.isArray(res)) return col;
for (const raw of res){
const cmd = new SlashCommand1(this, raw);
col.set(raw.id, cmd);
}
return col;
}
async guild(guild) {
const col = new Collection1();
const res = await this.rest.api.applications[this.slash.getID()].guilds[typeof guild === 'string' ? guild : guild.id].commands.get();
if (!Array.isArray(res)) return col;
const _guild = typeof guild === 'object' ? guild : await this.slash.client?.guilds.get(guild);
for (const raw of res){
const cmd = new SlashCommand1(this, raw, _guild);
cmd._guild = typeof guild === 'string' ? guild : guild.id;
col.set(raw.id, cmd);
}
return col;
}
async create(data, guild) {
const route = guild === undefined ? this.rest.api.applications[this.slash.getID()].commands : this.rest.api.applications[this.slash.getID()].guilds[typeof guild === 'string' ? guild : guild.id].commands;
const payload = await route.post(data);
const _guild = typeof guild === 'object' ? guild : guild === undefined ? undefined : await this.slash.client?.guilds.get(guild);
const cmd = new SlashCommand1(this, payload, _guild);
cmd._guild = typeof guild === 'string' || guild === undefined ? guild : guild.id;
return cmd;
}
async edit(id, data, guild) {
const route = guild === undefined ? this.rest.api.applications[this.slash.getID()].commands[id] : this.rest.api.applications[this.slash.getID()].guilds[typeof guild === 'string' ? guild : guild.id].commands[id];
await route.patch(data);
return this;
}
async delete(id, guild) {
const route = guild === undefined ? this.rest.api.applications[this.slash.getID()].commands[id] : this.rest.api.applications[this.slash.getID()].guilds[typeof guild === 'string' ? guild : guild.id].commands[id];
await route.delete();
return this;
}
async get(id, guild) {
const route = guild === undefined ? this.rest.api.applications[this.slash.getID()].commands[id] : this.rest.api.applications[this.slash.getID()].guilds[typeof guild === 'string' ? guild : guild.id].commands[id];
const data30 = await route.get();
const _guild = typeof guild === 'object' ? guild : guild === undefined ? undefined : await this.slash.client?.guilds.get(guild);
return new SlashCommand1(this, data30, _guild);
}
async bulkEdit(cmds, guild) {
const route = guild === undefined ? this.rest.api.applications[this.slash.getID()].commands : this.rest.api.applications[this.slash.getID()].guilds[typeof guild === 'string' ? guild : guild.id].commands;
await route.put(cmds);
return this;
}
}
export { SlashCommand1 as SlashCommand };
export { SlashOption1 as SlashOption };
export { SlashBuilder1 as SlashBuilder };
export { SlashCommandsManager1 as SlashCommandsManager };
const applicationCommandCreate = async (gateway, d)=>{
const guild18 = d.guild_id === undefined ? undefined : await gateway.client.guilds.get(d.guild_id);
const cmd = new SlashCommand1(gateway.client.slash.commands, d, guild18);
gateway.client.emit('slashCommandCreate', cmd);
};
const applicationCommandDelete = async (gateway, d)=>{
const guild18 = d.guild_id === undefined ? undefined : await gateway.client.guilds.get(d.guild_id);
const cmd = new SlashCommand1(gateway.client.slash.commands, d, guild18);
gateway.client.emit('slashCommandDelete', cmd);
};
const applicationCommandUpdate = async (gateway, d)=>{
const guild18 = d.guild_id === undefined ? undefined : await gateway.client.guilds.get(d.guild_id);
const cmd = new SlashCommand1(gateway.client.slash.commands, d, guild18);
gateway.client.emit('slashCommandUpdate', cmd);
};
const gatewayHandlers = {
READY: ready1,
APPLICATION_COMMAND_CREATE: applicationCommandCreate,
APPLICATION_COMMAND_DELETE: applicationCommandDelete,
APPLICATION_COMMAND_UPDATE: applicationCommandUpdate,
RECONNECT: reconnect,
RESUMED: resume,
CHANNEL_CREATE: channelCreate,
CHANNEL_DELETE: channelDelete,
CHANNEL_UPDATE: channelUpdate,
CHANNEL_PINS_UPDATE: channelPinsUpdate,
GUILD_CREATE: guildCreate,
GUILD_DELETE: guildDelete,
GUILD_UPDATE: guildUpdate,
GUILD_BAN_ADD: guildBanAdd,
GUILD_BAN_REMOVE: guildBanRemove,
GUILD_EMOJIS_UPDATE: guildEmojiUpdate,
GUILD_INTEGRATIONS_UPDATE: guildIntegrationsUpdate,
GUILD_MEMBER_ADD: guildMemberAdd,
GUILD_MEMBER_REMOVE: guildMemberRemove,
GUILD_MEMBER_UPDATE: guildMemberUpdate,
GUILD_MEMBERS_CHUNK: guildMembersChunk,
GUILD_ROLE_CREATE: guildRoleCreate,
GUILD_ROLE_UPDATE: guildRoleUpdate,
GUILD_ROLE_DELETE: guildRoleDelete,
INVITE_CREATE: inviteCreate,
INVITE_DELETE: inviteDelete,
MESSAGE_CREATE: messageCreate,
MESSAGE_UPDATE: messageUpdate,
MESSAGE_DELETE: messageDelete,
MESSAGE_DELETE_BULK: messageDeleteBulk,
MESSAGE_REACTION_ADD: messageReactionAdd,
MESSAGE_REACTION_REMOVE: messageReactionRemove,
MESSAGE_REACTION_REMOVE_ALL: messageReactionRemoveAll,
MESSAGE_REACTION_REMOVE_EMOJI: messageReactionRemoveEmoji,
PRESENCE_UPDATE: presenceUpdate,
TYPING_START: typingStart,
USER_UPDATE: userUpdate,
VOICE_STATE_UPDATE: voiceStateUpdate,
VOICE_SERVER_UPDATE: voiceServerUpdate,
WEBHOOKS_UPDATE: webhooksUpdate,
INTERACTION_CREATE: interactionCreate
};
class GatewayCache1 {
cacheName = 'discord_gateway_cache';
constructor(client45, cacheName2){
this.client = client45;
if (cacheName2 !== undefined) this.cacheName = cacheName2;
}
async get(key) {
const result = await this.client.cache.get(this.cacheName, key);
return result;
}
async set(key, value) {
const result = await this.client.cache.set(this.cacheName, key, value);
return result;
}
async delete(key) {
const result = await this.client.cache.delete(this.cacheName, key);
return result;
}
}
const delay = async (ms)=>await new Promise((resolve3, reject)=>{
setTimeout(()=>resolve3(true)
, ms);
})
;
class HarmonyEventEmitter1 extends EventEmitter {
async waitFor(event, checkFunction = ()=>true
, timeout) {
return await new Promise((resolve3)=>{
let timeoutID;
if (timeout !== undefined) {
timeoutID = setTimeout(()=>{
this.off(event, eventFunc);
resolve3([]);
}, timeout);
}
const eventFunc = (...args)=>{
if (checkFunction(...args)) {
resolve3(args);
this.off(event, eventFunc);
if (timeoutID !== undefined) clearTimeout(timeoutID);
}
};
this.on(event, eventFunc);
});
}
}
const RECONNECT_REASON = 'harmony-reconnect';
class Gateway1 extends HarmonyEventEmitter1 {
connected = false;
initialized = false;
heartbeatInterval = 0;
lastPingTimestamp = 0;
heartbeatServerResponded = false;
timedIdentify = null;
constructor(client46, shards){
super();
this.client = client46;
this.cache = new GatewayCache1(client46);
this.shards = shards;
}
onopen() {
this.connected = true;
this.debug('Connected to Gateway!');
this.emit('connect');
}
async onmessage(event) {
let data30 = event.data;
if (data30 instanceof ArrayBuffer) {
data30 = new Uint8Array(data30);
}
if (data30 instanceof Uint8Array) {
data30 = unzlib(data30);
data30 = decodeText(data30);
}
const { op , d , s , t } = JSON.parse(data30);
switch(op){
case GatewayOpcodes.HELLO:
this.heartbeatInterval = d.heartbeat_interval;
this.debug(`Received HELLO. Heartbeat Interval: ${this.heartbeatInterval}`);
this.sendHeartbeat();
this.heartbeatIntervalID = setInterval(()=>{
this.heartbeat();
}, this.heartbeatInterval);
if (!this.initialized) {
this.initialized = true;
this.enqueueIdentify(this.client.forceNewSession);
} else {
this.sendResume();
}
break;
case GatewayOpcodes.HEARTBEAT_ACK:
this.heartbeatServerResponded = true;
this.client.ping = Date.now() - this.lastPingTimestamp;
this.emit('ping', this.client.ping);
this.debug(`Received Heartbeat Ack. Ping Recognized: ${this.client.ping}ms`);
break;
case GatewayOpcodes.INVALID_SESSION:
this.debug(`Invalid Session received! Resumeable? ${d === true ? 'Yes' : 'No'}`);
if (d !== true) {
this.debug(`Session was invalidated, deleting from cache`);
await this.cache.delete(`session_id_${this.shards?.join('-') ?? '0'}`);
await this.cache.delete(`seq_${this.shards?.join('-') ?? '0'}`);
this.sessionID = undefined;
this.sequenceID = undefined;
}
this.timedIdentify = setTimeout(async ()=>{
this.timedIdentify = null;
this.enqueueIdentify(!d);
}, 5000);
break;
case GatewayOpcodes.DISPATCH:
{
this.heartbeatServerResponded = true;
if (s !== null) {
this.sequenceID = s;
await this.cache.set(`seq_${this.shards?.join('-') ?? '0'}`, s);
}
if (t !== null && t !== undefined) {
this.emit(t, d);
this.client.emit('raw', t, d);
const handler = gatewayHandlers[t];
if (handler !== undefined && d !== null) {
handler(this, d);
}
}
break;
}
case GatewayOpcodes.RESUME:
{
this.sessionID = d.session_id;
this.sequenceID = d.seq;
await this.cache.set(`seq_${this.shards?.join('-') ?? '0'}`, d.seq);
await this.cache.set(`session_id_${this.shards?.join('-') ?? '0'}`, this.sessionID);
this.emit('resume');
break;
}
case GatewayOpcodes.RECONNECT:
{
this.emit('reconnectRequired');
this.debug('Received OpCode RECONNECT');
await this.reconnect();
break;
}
default: break;
}
}
async onclose({ reason , code }) {
if (reason === RECONNECT_REASON) return;
this.emit('close', code, reason);
this.debug(`Connection Closed with code: ${code}`);
switch(code){
case GatewayCloseCodes.UNKNOWN_ERROR:
this.debug('API has encountered Unknown Error. Reconnecting...');
await this.reconnect();
break;
case GatewayCloseCodes.UNKNOWN_OPCODE:
throw new Error("Invalid OP Code or Payload was sent. This shouldn't happen!");
case GatewayCloseCodes.DECODE_ERROR:
throw new Error("Invalid Payload was sent. This shouldn't happen!");
case GatewayCloseCodes.NOT_AUTHENTICATED:
throw new Error('Not Authorized: Payload was sent before Identifying.');
case GatewayCloseCodes.AUTHENTICATION_FAILED:
throw new Error('Invalid Token provided!');
case GatewayCloseCodes.INVALID_SEQ:
this.debug('Invalid Seq was sent. Reconnecting.');
await this.reconnect();
break;
case GatewayCloseCodes.RATE_LIMITED:
throw new Error("You're ratelimited. Calm down.");
case GatewayCloseCodes.SESSION_TIMED_OUT:
this.debug('Session Timeout. Reconnecting.');
await this.reconnect(true);
break;
case GatewayCloseCodes.INVALID_SHARD:
this.debug('Invalid Shard was sent. Reconnecting.');
await this.reconnect();
break;
case GatewayCloseCodes.SHARDING_REQUIRED:
throw new Error("Couldn't connect. Sharding is required!");
case GatewayCloseCodes.INVALID_API_VERSION:
throw new Error("Invalid API Version was used. This shouldn't happen!");
case GatewayCloseCodes.INVALID_INTENTS:
throw new Error('Invalid Intents');
case GatewayCloseCodes.DISALLOWED_INTENTS:
throw new Error("Given Intents aren't allowed");
default:
this.debug('Unknown Close code, probably connection error. Reconnecting in 5s.');
if (this.timedIdentify !== null) {
clearTimeout(this.timedIdentify);
this.debug('Timed Identify found. Cleared timeout.');
}
await delay(5000);
await this.reconnect(true);
break;
}
}
async onerror(event) {
const error1 = new Error(Deno.inspect({
message: event.message,
error: event.error,
type: event.type,
target: event.target
}));
error1.name = 'ErrorEvent';
console.log(error1);
this.emit('error', error1, event);
this.client.emit('gatewayError', event, this.shards);
}
enqueueIdentify(forceNew) {
this.client.shards.enqueueIdentify(async ()=>await this.sendIdentify(forceNew)
);
}
async sendIdentify(forceNewSession) {
if (typeof this.client.token !== 'string') throw new Error('Token not specified');
if (typeof this.client.intents !== 'object') throw new Error('Intents not specified');
if (this.client.fetchGatewayInfo === true) {
this.debug('Fetching /gateway/bot...');
const info = await this.client.rest.api.gateway.bot.get();
if (info.session_start_limit.remaining === 0) throw new Error(`Session Limit Reached. Retry After ${info.session_start_limit.reset_after}ms`);
this.debug(`Recommended Shards: ${info.shards}`);
this.debug('=== Session Limit Info ===');
this.debug(`Remaining: ${info.session_start_limit.remaining}/${info.session_start_limit.total}`);
this.debug(`Reset After: ${info.session_start_limit.reset_after}ms`);
}
if (forceNewSession === undefined || !forceNewSession) {
const sessionIDCached = await this.cache.get(`session_id_${this.shards?.join('-') ?? '0'}`);
if (sessionIDCached !== undefined) {
this.debug(`Found Cached SessionID: ${sessionIDCached}`);
this.sessionID = sessionIDCached;
return await this.sendResume();
}
}
const payload = {
token: this.client.token,
properties: {
$os: this.client.clientProperties.os ?? Deno.build.os,
$browser: this.client.clientProperties.browser ?? 'harmony',
$device: this.client.clientProperties.device ?? 'harmony'
},
compress: true,
shard: this.shards === undefined ? [
0,
1
] : [
this.shards[0] ?? 0,
this.shards[1] ?? 1
],
intents: this.client.intents.reduce((previous, current)=>previous | current
, 0),
presence: this.client.presence.create()
};
this.debug('Sending Identify payload...');
this.emit('sentIdentify');
this.send({
op: GatewayOpcodes.IDENTIFY,
d: payload
});
}
async sendResume() {
if (typeof this.client.token !== 'string') throw new Error('Token not specified');
if (this.sessionID === undefined) {
this.sessionID = await this.cache.get(`session_id_${this.shards?.join('-') ?? '0'}`);
if (this.sessionID === undefined) return this.enqueueIdentify();
}
this.debug(`Preparing to resume with Session: ${this.sessionID}`);
if (this.sequenceID === undefined) {
const cached = await this.cache.get(`seq_${this.shards?.join('-') ?? '0'}`);
if (cached !== undefined) this.sequenceID = typeof cached === 'string' ? parseInt(cached) : cached;
}
const resumePayload = {
op: GatewayOpcodes.RESUME,
d: {
token: this.client.token,
session_id: this.sessionID,
seq: this.sequenceID ?? null
}
};
this.emit('sentResume');
this.debug('Sending Resume payload...');
this.send(resumePayload);
}
requestMembers(guild, options = {
}) {
if (options.query !== undefined && options.limit === undefined) throw new Error('Missing limit property when specifying query for Requesting Members!');
const nonce = `${guild}_${new Date().getTime()}`;
this.send({
op: GatewayOpcodes.REQUEST_GUILD_MEMBERS,
d: {
guild_id: guild,
query: options.query ?? '',
limit: options.limit ?? 0,
presences: options.presences,
user_ids: options.users,
nonce
}
});
return nonce;
}
updateVoiceState(guild, channel, voiceOptions = {
}) {
this.send({
op: GatewayOpcodes.VOICE_STATE_UPDATE,
d: {
guild_id: typeof guild === 'string' ? guild : guild.id,
channel_id: channel === undefined ? null : typeof channel === 'string' ? channel : channel?.id,
self_mute: voiceOptions.mute === undefined ? false : voiceOptions.mute,
self_deaf: voiceOptions.deaf === undefined ? false : voiceOptions.deaf
}
});
}
debug(msg) {
this.client.debug('Gateway', msg);
}
async reconnect(forceNew) {
this.emit('reconnecting');
this.debug('Reconnecting... (force new: ' + String(forceNew) + ')');
clearInterval(this.heartbeatIntervalID);
if (forceNew === true) {
await this.cache.delete(`session_id_${this.shards?.join('-') ?? '0'}`);
await this.cache.delete(`seq_${this.shards?.join('-') ?? '0'}`);
}
this.close(1000, RECONNECT_REASON);
this.initWebsocket();
}
initWebsocket() {
this.emit('init');
this.debug('Initializing WebSocket...');
this.websocket = new WebSocket(`${Constants.DISCORD_GATEWAY_URL}/?v=${Constants.DISCORD_API_VERSION}&encoding=json`, []);
this.websocket.binaryType = 'arraybuffer';
this.websocket.onopen = this.onopen.bind(this);
this.websocket.onmessage = this.onmessage.bind(this);
this.websocket.onclose = this.onclose.bind(this);
this.websocket.onerror = this.onerror.bind(this);
}
close(code = 1000, reason) {
this.debug(`Closing with code ${code}${reason !== undefined && reason !== '' ? ` and reason ${reason}` : ''}`);
return this.websocket?.close(code, reason);
}
send(data) {
if (this.websocket?.readyState !== this.websocket?.OPEN) return false;
const packet = JSON.stringify({
op: data.op,
d: data.d,
s: typeof data.s === 'number' ? data.s : null,
t: data.t === undefined ? null : data.t
});
this.websocket?.send(packet);
return true;
}
sendPresence(data) {
this.send({
op: GatewayOpcodes.PRESENCE_UPDATE,
d: data
});
}
sendHeartbeat() {
const payload = {
op: GatewayOpcodes.HEARTBEAT,
d: this.sequenceID ?? null
};
this.send(payload);
this.lastPingTimestamp = Date.now();
}
heartbeat() {
if (this.heartbeatServerResponded) {
this.heartbeatServerResponded = false;
} else {
this.debug('Found dead connection, reconnecting...');
clearInterval(this.heartbeatIntervalID);
this.reconnect();
return;
}
this.sendHeartbeat();
}
}
class DefaultCacheAdapter {
data = {
};
async get(cacheName, key) {
const cache = this.data[cacheName];
if (cache === undefined) return;
return cache.get(key);
}
async set(cacheName, key, value, expire) {
let cache = this.data[cacheName];
if (cache === undefined) {
this.data[cacheName] = new Collection1();
cache = this.data[cacheName];
}
cache.set(key, value);
if (expire !== undefined) setTimeout(()=>{
cache.delete(key);
}, expire);
}
async delete(cacheName, key) {
const cache = this.data[cacheName];
if (cache === undefined) return false;
return cache.delete(key);
}
async array(cacheName) {
const cache = this.data[cacheName];
if (cache === undefined) return;
return cache.array();
}
async deleteCache(cacheName) {
return delete this.data[cacheName];
}
}
class GuildManager1 extends BaseManager1 {
constructor(client47){
super(client47, 'guilds', Guild1);
}
async fetch(id) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(GUILD(id)).then(async (data30)=>{
await this.set(id, data30);
const guild18 = new Guild1(this.client, data30);
if (data30.members !== undefined) {
const members = new MembersManager1(this.client, guild18);
await members.fromPayload(data30.members);
guild18.members = members;
}
resolve3(guild18);
}).catch((e)=>reject(e)
);
});
}
async createFromTemplate(template, name, icon) {
if (icon?.startsWith('http') === true) icon = await fetchAuto(icon);
const guild18 = await this.client.rest.api.guilds.templates[typeof template === 'object' ? template.code : template].post({
name,
icon
});
return new Guild1(this.client, guild18);
}
async create(options) {
if (options.icon !== undefined && !options.icon.startsWith('data:')) {
options.icon = await fetchAuto(options.icon);
}
if (options.roles !== undefined && options.roles[0].name !== '@everyone') {
options.roles.unshift({
id: Math.floor(Math.random() * 18392375458).toString(),
name: '@everyone'
});
}
const body = {
name: options.name,
region: options.region,
icon: options.icon,
verification_level: options.verificationLevel,
roles: options.roles?.map((obj)=>{
let result;
if (obj instanceof Role1) {
result = {
id: obj.id,
name: obj.name,
color: obj.color,
hoist: obj.hoist,
position: obj.position,
permissions: obj.permissions.bitfield.toString(),
managed: obj.managed,
mentionable: obj.mentionable
};
} else {
result = obj;
}
return result;
}),
channels: options.channels?.map((obj)=>({
id: obj.id,
name: obj.name,
type: obj.type,
parent_id: obj.parentID
})
),
afk_channel_id: options.afkChannelID,
afk_timeout: options.afkTimeout,
system_channel_id: options.systemChannelID
};
const result = await this.client.rest.post(GUILDS(), body);
const guild18 = new Guild1(this.client, result);
return guild18;
}
async preview(guildID) {
const resp = await this.client.rest.get(GUILD_PREVIEW(guildID));
const result = {
id: resp.id,
name: resp.name,
icon: resp.icon,
splash: resp.splash,
discoverySplash: resp.discovery_splash,
emojis: resp.emojis.map((emoji2)=>new Emoji1(this.client, emoji2)
),
features: resp.features,
approximateMemberCount: resp.approximate_member_count,
approximatePresenceCount: resp.approximate_presence_count,
description: resp.description
};
return result;
}
async set(key, value) {
value = {
...value
};
if ('roles' in value) value.roles = [];
if ('emojis' in value) value.emojis = [];
if ('members' in value) value.members = [];
if ('presences' in value) value.presences = [];
if ('voice_states' in value) value.voice_states = [];
return this.client.cache.set(this.cacheName, key, value);
}
async edit(guild, options, asRaw = false) {
if (options.icon !== undefined && options.icon !== null && !options.icon.startsWith('data:')) {
options.icon = await fetchAuto(options.icon);
}
if (options.splash !== undefined && options.splash !== null && !options.splash.startsWith('data:')) {
options.splash = await fetchAuto(options.splash);
}
if (options.banner !== undefined && options.banner !== null && !options.banner.startsWith('data:')) {
options.banner = await fetchAuto(options.banner);
}
if (guild instanceof Guild1) {
guild = guild.id;
}
const body = {
name: options.name,
region: options.region,
verification_level: options.verificationLevel,
default_message_notifications: options.defaultMessageNotifications,
explicit_content_filter: options.explicitContentFilter,
afk_channel_id: options.afkChannelID,
afk_timeout: options.afkTimeout,
owner_id: options.ownerID,
icon: options.icon,
splash: options.splash,
banner: options.banner,
system_channel_id: options.systemChannelID,
rules_channel_id: options.rulesChannelID,
public_updates_channel_id: options.publicUpdatesChannelID,
preferred_locale: options.preferredLocale
};
const result = await this.client.rest.patch(GUILD(guild), body);
if (asRaw) {
const guild18 = new Guild1(this.client, result);
return guild18;
} else {
return result;
}
}
async delete(guild) {
if (guild instanceof Guild1) {
guild = guild.id;
}
const oldGuild = await this.get(guild);
await this.client.rest.delete(GUILD(guild));
return oldGuild;
}
}
class ChannelsManager1 extends BaseManager1 {
constructor(client48){
super(client48, 'channels', Channel1);
}
async get(key) {
const data30 = await this._get(key);
if (data30 === undefined) return;
let guild18;
if ('guild_id' in data30) {
guild18 = await this.client.guilds.get(data30.guild_id);
}
const res = getChannelByType(this.client, data30, guild18);
return res;
}
async array() {
const arr = await this.client.cache.array(this.cacheName);
if (arr === undefined) return [];
const result = [];
for (const elem of arr){
let guild18;
if ('guild_id' in elem) {
guild18 = await this.client.guilds.get(elem.guild_id);
}
result.push(getChannelByType(this.client, elem, guild18));
}
return result;
}
async fetch(id) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(CHANNEL(id)).then(async (data30)=>{
this.set(id, data30);
let guild18;
if (data30.guild_id !== undefined) {
guild18 = await this.client.guilds.get(data30.guild_id);
}
resolve3(getChannelByType(this.client, data30, guild18));
}).catch((e)=>reject(e)
);
});
}
async sendMessage(channel, content, option) {
const channelID = typeof channel === 'string' ? channel : channel.id;
if (typeof content === 'object') {
option = content;
content = undefined;
}
if (content === undefined && option === undefined) {
throw new Error('Either text or option is necessary.');
}
if (option instanceof Embed1) {
option = {
embed: option
};
}
const payload = {
content: content,
embed: option?.embed,
file: option?.file,
files: option?.files,
tts: option?.tts,
allowed_mentions: option?.allowedMentions,
message_reference: option?.reply === undefined ? undefined : typeof option.reply === 'string' ? {
message_id: option.reply
} : typeof option.reply === 'object' ? option.reply instanceof Message1 ? {
message_id: option.reply.id,
channel_id: option.reply.channel.id,
guild_id: option.reply.guild?.id
} : option.reply : undefined
};
const resp = await this.client.rest.api.channels[channelID].messages.post(payload);
const chan = typeof channel === 'string' ? await this.get(channel) : channel;
const res = new Message1(this.client, resp, chan, this.client.user);
await res.mentions.fromPayload(resp);
return res;
}
async editMessage(channel, message, text, option) {
const channelID = typeof channel === 'string' ? channel : channel.id;
if (text === undefined && option === undefined) {
throw new Error('Either text or option is necessary.');
}
if (this.client.user === undefined) {
throw new Error('Client user has not initialized.');
}
if (typeof text === 'object') {
if (typeof option === 'object') Object.assign(option, text);
else option = text;
text = undefined;
}
const newMsg = await this.client.rest.api.channels[channelID].messages[typeof message === 'string' ? message : message.id].patch({
content: text,
embed: option?.embed !== undefined ? option.embed.toJSON() : undefined,
tts: option?.tts,
allowed_mentions: option?.allowedMentions
});
const chan = typeof channel === 'string' ? await this.get(channel) : channel;
const res = new Message1(this.client, newMsg, chan, this.client.user);
await res.mentions.fromPayload(newMsg);
return res;
}
}
class EmojisManager1 extends BaseManager1 {
constructor(client49){
super(client49, `emojis`, Emoji1);
}
async get(key) {
const raw = await this._get(key);
if (raw === undefined) return;
const emoji2 = new this.DataType(this.client, raw);
if (raw.guild_id !== undefined) {
const guild18 = await this.client.guilds.get(raw.guild_id);
if (guild18 !== undefined) emoji2.guild = guild18;
}
return emoji2;
}
async fetch(guildID, id) {
return await new Promise((resolve3, reject)=>{
this.client.rest.get(GUILD_EMOJI(guildID, id)).then(async (data30)=>{
await this.set(id, data30);
resolve3(new Emoji1(this.client, data30));
}).catch((e)=>reject(e)
);
});
}
}
const CURVE = {
a: -1n,
d: 37095705934669439343138083508754565189542113879843219016388785533085940283555n,
P: 2n ** 255n - 19n,
n: 2n ** 252n + 27742317777372353535851937790883648493n,
h: 8n,
Gx: 15112221349535400772501151409588531511454012693041857206046113283949847762202n,
Gy: 46316835694926478169428394003475163141307993866256225615783033603165251855960n
};
const ENCODING_LENGTH = 32;
const DIV_8_MINUS_3 = (CURVE.P + 3n) / 8n;
const I1 = powMod(2n, (CURVE.P + 1n) / 4n, CURVE.P);
const SQRT_M1 = 19681161376707505956807079304988542015446066515923890162744021073123829784752n;
const INVSQRT_A_MINUS_D = 54469307008909316920995813868745141605393597292927456921205312896311721017578n;
const SQRT_AD_MINUS_ONE = 25063068953384623474111414158702152701244531502492656460079210482610430750235n;
class ExtendedPoint {
constructor(x, y, z, t){
this.x = x;
this.y = y;
this.z = z;
this.t = t;
}
static BASE = new ExtendedPoint(CURVE.Gx, CURVE.Gy, 1n, mod3(CURVE.Gx * CURVE.Gy));
static ZERO = new ExtendedPoint(0n, 1n, 1n, 0n);
static fromAffine(p) {
if (!(p instanceof Point)) {
throw new TypeError('ExtendedPoint#fromAffine: expected Point');
}
if (p.equals(Point.ZERO)) return ExtendedPoint.ZERO;
return new ExtendedPoint(p.x, p.y, 1n, mod3(p.x * p.y));
}
static toAffineBatch(points) {
const toInv = invertBatch(points.map((p)=>p.z
));
return points.map((p, i)=>p.toAffine(toInv[i])
);
}
static normalizeZ(points) {
return this.toAffineBatch(points).map(this.fromAffine);
}
static fromRistrettoHash(hash) {
const r1 = bytesToNumberRst(hash.slice(0, 32));
const R1 = this.elligatorRistrettoFlavor(r1);
const r2 = bytesToNumberRst(hash.slice(32, 32 * 2));
const R2 = this.elligatorRistrettoFlavor(r2);
return R1.add(R2);
}
static elligatorRistrettoFlavor(r0) {
const { d } = CURVE;
const oneMinusDSq = mod3(1n - d ** 2n);
const dMinusOneSq = (d - 1n) ** 2n;
const r = SQRT_M1 * (r0 * r0);
const NS = mod3((r + 1n) * oneMinusDSq);
let c = mod3(-1n);
const D1 = mod3((c - d * r) * mod3(r + d));
let { isNotZeroSquare , value: S1 } = sqrtRatio(NS, D1);
let sPrime = mod3(S1 * r0);
sPrime = edIsNegative(sPrime) ? sPrime : mod3(-sPrime);
S1 = isNotZeroSquare ? S1 : sPrime;
c = isNotZeroSquare ? c : r;
const NT = c * (r - 1n) * dMinusOneSq - D1;
const sSquared = S1 * S1;
const W0 = (S1 + S1) * D1;
const W1 = NT * SQRT_AD_MINUS_ONE;
const W2 = 1n - sSquared;
const W3 = 1n + sSquared;
return new ExtendedPoint(mod3(W0 * W3), mod3(W2 * W1), mod3(W1 * W3), mod3(W0 * W2));
}
static fromRistrettoBytes(bytes) {
const s = bytesToNumberRst(bytes);
const sEncodingIsCanonical = equalBytes(numberToBytesPadded(s, 32), bytes);
const sIsNegative = edIsNegative(s);
if (!sEncodingIsCanonical || sIsNegative) {
throw new Error('Cannot convert bytes to Ristretto Point');
}
const s2 = s * s;
const u1 = 1n - s2;
const u2 = 1n + s2;
const squaredU2 = u2 * u2;
const v = u1 * u1 * -CURVE.d - squaredU2;
const { isNotZeroSquare , value: I2 } = invertSqrt(mod3(v * squaredU2));
const Dx = I2 * u2;
const Dy = I2 * Dx * v;
let x1 = mod3((s + s) * Dx);
if (edIsNegative(x1)) x1 = mod3(-x1);
const y1 = mod3(u1 * Dy);
const t1 = mod3(x1 * y1);
if (!isNotZeroSquare || edIsNegative(t1) || y1 === 0n) {
throw new Error('Cannot convert bytes to Ristretto Point');
}
return new ExtendedPoint(x1, y1, 1n, t1);
}
toRistrettoBytes() {
let { x: x1 , y: y1 , z: z1 , t: t1 } = this;
const u1 = (z1 + y1) * (z1 - y1);
const u2 = x1 * y1;
const { value: invsqrt } = invertSqrt(mod3(u2 ** 2n * u1));
const i1 = invsqrt * u1;
const i2 = invsqrt * u2;
const invz = i1 * i2 * t1;
let invDeno = i2;
if (edIsNegative(t1 * invz)) {
const iX = mod3(x1 * SQRT_M1);
const iY = mod3(y1 * SQRT_M1);
x1 = iY;
y1 = iX;
invDeno = mod3(i1 * INVSQRT_A_MINUS_D);
}
if (edIsNegative(x1 * invz)) y1 = mod3(-y1);
let s = mod3((z1 - y1) * invDeno);
if (edIsNegative(s)) s = mod3(-s);
return numberToBytesPadded(s, 32);
}
equals(other) {
const a = this;
const b2 = other;
const [T1, T2, Z1, Z2] = [
a.t,
b2.t,
a.z,
b2.z
];
return mod3(T1 * Z2) === mod3(T2 * Z1);
}
negate() {
return new ExtendedPoint(mod3(-this.x), this.y, this.z, mod3(-this.t));
}
double() {
const X1 = this.x;
const Y1 = this.y;
const Z1 = this.z;
const { a } = CURVE;
const A = mod3(X1 ** 2n);
const B = mod3(Y1 ** 2n);
const C1 = mod3(2n * Z1 ** 2n);
const D1 = mod3(a * A);
const E = mod3((X1 + Y1) ** 2n - A - B);
const G1 = mod3(D1 + B);
const F = mod3(G1 - C1);
const H1 = mod3(D1 - B);
const X3 = mod3(E * F);
const Y3 = mod3(G1 * H1);
const T3 = mod3(E * H1);
const Z3 = mod3(F * G1);
return new ExtendedPoint(X3, Y3, Z3, T3);
}
add(other) {
const X1 = this.x;
const Y1 = this.y;
const Z1 = this.z;
const T1 = this.t;
const X2 = other.x;
const Y2 = other.y;
const Z2 = other.z;
const T2 = other.t;
const A = mod3((Y1 - X1) * (Y2 + X2));
const B = mod3((Y1 + X1) * (Y2 - X2));
const F = mod3(B - A);
if (F === 0n) {
return this.double();
}
const C1 = mod3(Z1 * 2n * T2);
const D1 = mod3(T1 * 2n * Z2);
const E = mod3(D1 + C1);
const G1 = mod3(B + A);
const H1 = mod3(D1 - C1);
const X3 = mod3(E * F);
const Y3 = mod3(G1 * H1);
const T3 = mod3(E * H1);
const Z3 = mod3(F * G1);
return new ExtendedPoint(X3, Y3, Z3, T3);
}
subtract(other) {
return this.add(other.negate());
}
multiplyUnsafe(scalar) {
if (typeof scalar !== 'number' && typeof scalar !== 'bigint') {
throw new TypeError('Point#multiply: expected number or bigint');
}
let n = mod3(BigInt(scalar), CURVE.n);
if (n <= 0) {
throw new Error('Point#multiply: invalid scalar, expected positive integer');
}
let p = ExtendedPoint.ZERO;
let d = this;
while(n > 0n){
if (n & 1n) p = p.add(d);
d = d.double();
n >>= 1n;
}
return p;
}
precomputeWindow(W) {
const windows = 256 / W + 1;
let points = [];
let p = this;
let base = p;
for(let window = 0; window < windows; window++){
base = p;
points.push(base);
for(let i = 1; i < 2 ** (W - 1); i++){
base = base.add(p);
points.push(base);
}
p = base.double();
}
return points;
}
wNAF(n, affinePoint) {
if (!affinePoint && this.equals(ExtendedPoint.BASE)) affinePoint = Point.BASE;
const W = affinePoint && affinePoint._WINDOW_SIZE || 1;
if (256 % W) {
throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');
}
let precomputes = affinePoint && pointPrecomputes.get(affinePoint);
if (!precomputes) {
precomputes = this.precomputeWindow(W);
if (affinePoint && W !== 1) {
precomputes = ExtendedPoint.normalizeZ(precomputes);
pointPrecomputes.set(affinePoint, precomputes);
}
}
let p = ExtendedPoint.ZERO;
let f = ExtendedPoint.ZERO;
const windows = 256 / W + 1;
const windowSize = 2 ** (W - 1);
const mask = BigInt(2 ** W - 1);
const maxNumber = 2 ** W;
const shiftBy = BigInt(W);
for(let window = 0; window < windows; window++){
const offset = window * windowSize;
let wbits = Number(n & mask);
n >>= shiftBy;
if (wbits > windowSize) {
wbits -= maxNumber;
n += 1n;
}
if (wbits === 0) {
f = f.add(window % 2 ? precomputes[offset].negate() : precomputes[offset]);
} else {
const cached = precomputes[offset + Math.abs(wbits) - 1];
p = p.add(wbits < 0 ? cached.negate() : cached);
}
}
return [
p,
f
];
}
multiply(scalar, affinePoint) {
if (typeof scalar !== 'number' && typeof scalar !== 'bigint') {
throw new TypeError('Point#multiply: expected number or bigint');
}
const n = mod3(BigInt(scalar), CURVE.n);
if (n <= 0) {
throw new Error('Point#multiply: invalid scalar, expected positive integer');
}
return ExtendedPoint.normalizeZ(this.wNAF(n, affinePoint))[0];
}
toAffine(invZ = invert(this.z)) {
const x1 = mod3(this.x * invZ);
const y1 = mod3(this.y * invZ);
return new Point(x1, y1);
}
}
const pointPrecomputes = new WeakMap();
class Point {
static BASE = new Point(CURVE.Gx, CURVE.Gy);
static ZERO = new Point(0n, 1n);
constructor(x1, y1){
this.x = x1;
this.y = y1;
}
_setWindowSize(windowSize) {
this._WINDOW_SIZE = windowSize;
pointPrecomputes.delete(this);
}
static fromHex(hash) {
const { d , P } = CURVE;
const bytes = hash instanceof Uint8Array ? hash : hexToBytes(hash);
const len = bytes.length - 1;
const normedLast = bytes[len] & ~128;
const isLastByteOdd = (bytes[len] & 128) !== 0;
const normed = Uint8Array.from(Array.from(bytes.slice(0, len)).concat(normedLast));
const y2 = bytesToNumberLE(normed);
if (y2 >= P) {
throw new Error('Point#fromHex expects hex <= Fp');
}
const sqrY = y2 * y2;
const sqrX = mod3((sqrY - 1n) * invert(d * sqrY + 1n));
let x2 = powMod(sqrX, DIV_8_MINUS_3);
if (mod3(x2 * x2 - sqrX) !== 0n) {
x2 = mod3(x2 * I1);
}
const isXOdd = (x2 & 1n) === 1n;
if (isLastByteOdd !== isXOdd) {
x2 = mod3(-x2);
}
return new Point(x2, y2);
}
toRawBytes() {
const hex = numberToHex(this.y);
const u8 = new Uint8Array(32);
for(let i = hex.length - 2, j = 0; j < 32 && i >= 0; i -= 2, j++){
u8[j] = parseInt(hex[i] + hex[i + 1], 16);
}
const mask = this.x & 1n ? 128 : 0;
u8[ENCODING_LENGTH - 1] |= mask;
return u8;
}
toHex() {
return bytesToHex(this.toRawBytes());
}
toX25519() {
return mod3((1n + this.y) * invert(1n - this.y));
}
equals(other) {
return this.x === other.x && this.y === other.y;
}
negate() {
return new Point(this.x, mod3(-this.y));
}
add(other) {
return ExtendedPoint.fromAffine(this).add(ExtendedPoint.fromAffine(other)).toAffine();
}
subtract(other) {
return this.add(other.negate());
}
multiply(scalar) {
return ExtendedPoint.fromAffine(this).multiply(scalar, this).toAffine();
}
}
class SignResult {
constructor(r1, s){
this.r = r1;
this.s = s;
}
static fromHex(hex) {
hex = ensureBytes(hex);
const r1 = Point.fromHex(hex.slice(0, 32));
const s1 = bytesToNumberLE(hex.slice(32));
return new SignResult(r1, s1);
}
toRawBytes() {
const numberBytes = hexToBytes(numberToHex(this.s)).reverse();
const sBytes = new Uint8Array(32);
sBytes.set(numberBytes);
const res = new Uint8Array(32 * 2);
res.set(this.r.toRawBytes());
res.set(sBytes, 32);
return res;
}
toHex() {
return bytesToHex(this.toRawBytes());
}
}
function concatBytes(...arrays) {
if (arrays.length === 1) return arrays[0];
const length = arrays.reduce((a, arr)=>a + arr.length
, 0);
const result = new Uint8Array(length);
for(let i = 0, pad = 0; i < arrays.length; i++){
const arr = arrays[i];
result.set(arr, pad);
pad += arr.length;
}
return result;
}
function bytesToHex(uint8a) {
let hex = '';
for(let i = 0; i < uint8a.length; i++){
hex += uint8a[i].toString(16).padStart(2, '0');
}
return hex;
}
function hexToBytes(hex) {
hex = hex.length & 1 ? `0${hex}` : hex;
const array = new Uint8Array(hex.length / 2);
for(let i = 0; i < array.length; i++){
let j = i * 2;
array[i] = Number.parseInt(hex.slice(j, j + 2), 16);
}
return array;
}
function numberToHex(num) {
const hex = num.toString(16);
return hex.length & 1 ? `0${hex}` : hex;
}
function numberToBytesPadded(num, length = 32) {
const hex = numberToHex(num).padStart(length * 2, '0');
return hexToBytes(hex).reverse();
}
function edIsNegative(num) {
const hex = numberToHex(mod3(num));
const __byte = Number.parseInt(hex.slice(hex.length - 2, hex.length), 16);
return Boolean(__byte & 1);
}
function bytesToNumberLE(uint8a) {
let value = 0n;
for(let i = 0; i < uint8a.length; i++){
value += BigInt(uint8a[i]) << 8n * BigInt(i);
}
return value;
}
function load8(input, padding = 0) {
return BigInt(input[0 + padding]) | BigInt(input[1 + padding]) << 8n | BigInt(input[2 + padding]) << 16n | BigInt(input[3 + padding]) << 24n | BigInt(input[4 + padding]) << 32n | BigInt(input[5 + padding]) << 40n | BigInt(input[6 + padding]) << 48n | BigInt(input[7 + padding]) << 56n;
}
const low51bitMask = (1n << 51n) - 1n;
function bytesToNumberRst(bytes) {
const octet1 = load8(bytes, 0) & low51bitMask;
const octet2 = load8(bytes, 6) >> 3n & low51bitMask;
const octet3 = load8(bytes, 12) >> 6n & low51bitMask;
const octet4 = load8(bytes, 19) >> 1n & low51bitMask;
const octet5 = load8(bytes, 24) >> 12n & low51bitMask;
return mod3(octet1 + (octet2 << 51n) + (octet3 << 102n) + (octet4 << 153n) + (octet5 << 204n));
}
function mod3(a, b2 = CURVE.P) {
const res = a % b2;
return res >= 0n ? res : b2 + res;
}
function powMod(a, power, m1 = CURVE.P) {
let res = 1n;
while(power > 0n){
if (power & 1n) {
res = mod3(res * a, m1);
}
power >>= 1n;
a = mod3(a * a, m1);
}
return res;
}
function egcd(a, b2) {
let [x2, y2, u, v] = [
0n,
1n,
1n,
0n
];
while(a !== 0n){
let q1 = b2 / a;
let r1 = b2 % a;
let m1 = x2 - u * q1;
let n = y2 - v * q1;
[b2, a] = [
a,
r1
];
[x2, y2] = [
u,
v
];
[u, v] = [
m1,
n
];
}
let gcd = b2;
return [
gcd,
x2,
y2
];
}
function invert(number, modulo = CURVE.P) {
if (number === 0n || modulo <= 0n) {
throw new Error('invert: expected positive integers');
}
let [gcd, x2] = egcd(mod3(number, modulo), modulo);
if (gcd !== 1n) {
throw new Error('invert: does not exist');
}
return mod3(x2, modulo);
}
function invertBatch(nums, n = CURVE.P) {
const len = nums.length;
const scratch = new Array(len);
let acc = 1n;
for(let i = 0; i < len; i++){
if (nums[i] === 0n) continue;
scratch[i] = acc;
acc = mod3(acc * nums[i], n);
}
acc = invert(acc, n);
for(let i1 = len - 1; i1 >= 0; i1--){
if (nums[i1] === 0n) continue;
let tmp = mod3(acc * nums[i1], n);
nums[i1] = mod3(acc * scratch[i1], n);
acc = tmp;
}
return nums;
}
function invertSqrt(number) {
return sqrtRatio(1n, number);
}
function powMod2(t1, power) {
const { P } = CURVE;
let res = t1;
while((power--) > 0n){
res *= res;
res %= P;
}
return res;
}
function pow_2_252_3(t1) {
t1 = mod3(t1);
const { P } = CURVE;
const t0 = t1 * t1 % P;
const t11 = t0 ** 4n % P;
const t2 = t1 * t11 % P;
const t3 = t0 * t2 % P;
const t4 = t3 ** 2n % P;
const t5 = t2 * t4 % P;
const t6 = powMod2(t5, 5n);
const t7 = t6 * t5 % P;
const t8 = powMod2(t7, 10n);
const t9 = t8 * t7 % P;
const t10 = powMod2(t9, 20n);
const t111 = t10 * t9 % P;
const t12 = powMod2(t111, 10n);
const t13 = t12 * t7 % P;
const t14 = powMod2(t13, 50n);
const t15 = t14 * t13 % P;
const t16 = powMod2(t15, 100n);
const t17 = t16 * t15 % P;
const t18 = powMod2(t17, 50n);
const t19 = t18 * t13 % P;
const t20 = t19 * t19 % P;
const t21 = t20 * t20 * t1 % P;
return t21;
}
function sqrtRatio(t1, v) {
const v3 = mod3(v * v * v);
const v7 = mod3(v3 * v3 * v);
let r1 = mod3(pow_2_252_3(t1 * v7) * t1 * v3);
const check = mod3(r1 * r1 * v);
const i = SQRT_M1;
const correctSignSqrt = check === t1;
const flippedSignSqrt = check === mod3(-t1);
const flippedSignSqrtI = check === mod3(mod3(-t1) * i);
const rPrime = mod3(SQRT_M1 * r1);
r1 = flippedSignSqrt || flippedSignSqrtI ? rPrime : r1;
if (edIsNegative(r1)) r1 = mod3(-r1);
const isNotZeroSquare = correctSignSqrt || flippedSignSqrt;
return {
isNotZeroSquare,
value: mod3(r1)
};
}
async function sha512ToNumberLE(...args) {
const messageArray = concatBytes(...args);
const hash = await utils.sha512(messageArray);
const value = bytesToNumberLE(hash);
return mod3(value, CURVE.n);
}
function ensureBytes(hash) {
return hash instanceof Uint8Array ? hash : hexToBytes(hash);
}
function equalBytes(b11, b2) {
if (b11.length !== b2.length) {
return false;
}
for(let i = 0; i < b11.length; i++){
if (b11[i] !== b2[i]) {
return false;
}
}
return true;
}
async function verify(signature, hash, publicKey) {
hash = ensureBytes(hash);
if (!(publicKey instanceof Point)) publicKey = Point.fromHex(publicKey);
if (!(signature instanceof SignResult)) signature = SignResult.fromHex(signature);
const h1 = await sha512ToNumberLE(signature.r.toRawBytes(), publicKey.toRawBytes(), hash);
const Ph = ExtendedPoint.fromAffine(publicKey).multiplyUnsafe(h1);
const Gs = ExtendedPoint.BASE.multiply(signature.s);
const RPh = ExtendedPoint.fromAffine(signature.r).add(Ph);
return Gs.equals(RPh);
}
Point.BASE._setWindowSize(8);
const utils = {
TORSION_SUBGROUP: [
'0100000000000000000000000000000000000000000000000000000000000000',
'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',
'0000000000000000000000000000000000000000000000000000000000000080',
'26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',
'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',
'26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',
'0000000000000000000000000000000000000000000000000000000000000000',
'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',
],
randomPrivateKey: (bytesLength = 32)=>{
if (typeof window == 'object' && 'crypto' in window) {
return window.crypto.getRandomValues(new Uint8Array(bytesLength));
} else if (typeof process === 'object' && 'node' in process.versions) {
const { randomBytes } = require('crypto');
return new Uint8Array(randomBytes(bytesLength).buffer);
} else {
throw new Error("The environment doesn't have randomBytes function");
}
},
sha512: async (message5)=>{
if (typeof window == 'object' && 'crypto' in window) {
const buffer = await window.crypto.subtle.digest('SHA-512', message5.buffer);
return new Uint8Array(buffer);
} else if (typeof process === 'object' && 'node' in process.versions) {
const { createHash } = require('crypto');
const hash = createHash('sha512');
hash.update(message5);
return Uint8Array.from(hash.digest());
} else {
throw new Error("The environment doesn't have sha512 function");
}
},
precompute (windowSize = 8, point = Point.BASE) {
const cached = point.equals(Point.BASE) ? point : new Point(point.x, point.y);
cached._setWindowSize(windowSize);
cached.multiply(1n);
return cached;
}
};
function getLengths(b64) {
const len = b64.length;
let validLen = b64.indexOf("=");
if (validLen === -1) {
validLen = len;
}
const placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
return [
validLen,
placeHoldersLen
];
}
function init1(lookup, revLookup, urlsafe = false) {
function _byteLength(validLen, placeHoldersLen) {
return Math.floor((validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen);
}
function tripletToBase64(num) {
return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];
}
function encodeChunk(buf, start, end) {
const out = new Array((end - start) / 3);
for(let i = start, curTriplet = 0; i < end; i += 3){
out[curTriplet++] = tripletToBase64((buf[i] << 16) + (buf[i + 1] << 8) + buf[i + 2]);
}
return out.join("");
}
return {
byteLength (b64) {
return _byteLength.apply(null, getLengths(b64));
},
toUint8Array (b64) {
const [validLen, placeHoldersLen] = getLengths(b64);
const buf = new Uint8Array(_byteLength(validLen, placeHoldersLen));
const len = placeHoldersLen ? validLen - 4 : validLen;
let tmp;
let curByte = 0;
let i;
for(i = 0; i < len; i += 4){
tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
buf[curByte++] = tmp >> 16 & 255;
buf[curByte++] = tmp >> 8 & 255;
buf[curByte++] = tmp & 255;
}
if (placeHoldersLen === 2) {
tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
buf[curByte++] = tmp & 255;
} else if (placeHoldersLen === 1) {
tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
buf[curByte++] = tmp >> 8 & 255;
buf[curByte++] = tmp & 255;
}
return buf;
},
fromUint8Array (buf) {
const maxChunkLength = 16383;
const len = buf.length;
const extraBytes = len % 3;
const len2 = len - extraBytes;
const parts = new Array(Math.ceil(len2 / 16383) + (extraBytes ? 1 : 0));
let curChunk = 0;
let chunkEnd;
for(let i = 0; i < len2; i += maxChunkLength){
chunkEnd = i + maxChunkLength;
parts[curChunk++] = encodeChunk(buf, i, chunkEnd > len2 ? len2 : chunkEnd);
}
let tmp;
if (extraBytes === 1) {
tmp = buf[len2];
parts[curChunk] = lookup[tmp >> 2] + lookup[tmp << 4 & 63];
if (!urlsafe) parts[curChunk] += "==";
} else if (extraBytes === 2) {
tmp = buf[len2] << 8 | buf[len2 + 1] & 255;
parts[curChunk] = lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63];
if (!urlsafe) parts[curChunk] += "=";
}
return parts.join("");
}
};
}
const lookup = [];
const revLookup = [];
const code2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
for(let i2 = 0, l = code2.length; i2 < l; ++i2){
lookup[i2] = code2[i2];
revLookup[code2.charCodeAt(i2)] = i2;
}
revLookup["-".charCodeAt(0)] = 62;
revLookup["_".charCodeAt(0)] = 63;
const { byteLength , toUint8Array , fromUint8Array } = init1(lookup, revLookup);
const lookup1 = [];
const revLookup1 = [];
const code1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
for(let i1 = 0, l1 = code1.length; i1 < l1; ++i1){
lookup1[i1] = code1[i1];
revLookup1[code1.charCodeAt(i1)] = i1;
}
const { byteLength: byteLength1 , toUint8Array: toUint8Array1 , fromUint8Array: fromUint8Array1 } = init1(lookup1, revLookup1, true);
const decoder1 = new TextDecoder();
const encoder1 = new TextEncoder();
function toHexString(buf) {
return buf.reduce((hex, __byte)=>`${hex}${__byte < 16 ? "0" : ""}${__byte.toString(16)}`
, "");
}
function fromHexString(hex) {
const len = hex.length;
if (len % 2 || !/^[0-9a-fA-F]+$/.test(hex)) {
throw new TypeError("Invalid hex string.");
}
hex = hex.toLowerCase();
const buf = new Uint8Array(Math.floor(len / 2));
const end = len / 2;
for(let i2 = 0; i2 < end; ++i2){
buf[i2] = parseInt(hex.substr(i2 * 2, 2), 16);
}
return buf;
}
function decode(buf, encoding = "utf8") {
if (/^utf-?8$/i.test(encoding)) {
return decoder1.decode(buf);
} else if (/^base64$/i.test(encoding)) {
return fromUint8Array(buf);
} else if (/^base64url$/i.test(encoding)) {
return fromUint8Array1(buf);
} else if (/^hex(?:adecimal)?$/i.test(encoding)) {
return toHexString(buf);
} else {
throw new TypeError("Unsupported string encoding.");
}
}
function encode1(str, encoding = "utf8") {
if (/^utf-?8$/i.test(encoding)) {
return encoder1.encode(str);
} else if (/^base64(?:url)?$/i.test(encoding)) {
return toUint8Array(str);
} else if (/^hex(?:adecimal)?$/i.test(encoding)) {
return fromHexString(str);
} else {
throw new TypeError("Unsupported string encoding.");
}
}
class SHA512 {
hashSize = 64;
_buffer = new Uint8Array(128);
constructor(){
this._K = new Uint32Array([
1116352408,
3609767458,
1899447441,
602891725,
3049323471,
3964484399,
3921009573,
2173295548,
961987163,
4081628472,
1508970993,
3053834265,
2453635748,
2937671579,
2870763221,
3664609560,
3624381080,
2734883394,
310598401,
1164996542,
607225278,
1323610764,
1426881987,
3590304994,
1925078388,
4068182383,
2162078206,
991336113,
2614888103,
633803317,
3248222580,
3479774868,
3835390401,
2666613458,
4022224774,
944711139,
264347078,
2341262773,
604807628,
2007800933,
770255983,
1495990901,
1249150122,
1856431235,
1555081692,
3175218132,
1996064986,
2198950837,
2554220882,
3999719339,
2821834349,
766784016,
2952996808,
2566594879,
3210313671,
3203337956,
3336571891,
1034457026,
3584528711,
2466948901,
113926993,
3758326383,
338241895,
168717936,
666307205,
1188179964,
773529912,
1546045734,
1294757372,
1522805485,
1396182291,
2643833823,
1695183700,
2343527390,
1986661051,
1014477480,
2177026350,
1206759142,
2456956037,
344077627,
2730485921,
1290863460,
2820302411,
3158454273,
3259730800,
3505952657,
3345764771,
106217008,
3516065817,
3606008344,
3600352804,
1432725776,
4094571909,
1467031594,
275423344,
851169720,
430227734,
3100823752,
506948616,
1363258195,
659060556,
3750685593,
883997877,
3785050280,
958139571,
3318307427,
1322822218,
3812723403,
1537002063,
2003034995,
1747873779,
3602036899,
1955562222,
1575990012,
2024104815,
1125592928,
2227730452,
2716904306,
2361852424,
442776044,
2428436474,
593698344,
2756734187,
3733110249,
3204031479,
2999351573,
3329325298,
3815920427,
3391569614,
3928383900,
3515267271,
566280711,
3940187606,
3454069534,
4118630271,
4000239992,
116418474,
1914138554,
174292421,
2731055270,
289380356,
3203993006,
460393269,
320620315,
685471733,
587496836,
852142971,
1086792851,
1017036298,
365543100,
1126000580,
2618297676,
1288033470,
3409855158,
1501505948,
4234509866,
1607167915,
987167468,
1816402316,
1246189591
]);
this.init();
}
init() {
this._H = new Uint32Array([
1779033703,
4089235720,
3144134277,
2227873595,
1013904242,
4271175723,
2773480762,
1595750129,
1359893119,
2917565137,
2600822924,
725511199,
528734635,
4215389547,
1541459225,
327033209
]);
this._bufferIndex = 0;
this._count = new Uint32Array(2);
this._buffer.fill(0);
this._finalized = false;
return this;
}
update(msg, inputEncoding) {
if (msg === null) {
throw new TypeError("msg must be a string or Uint8Array.");
} else if (typeof msg === "string") {
msg = encode1(msg, inputEncoding);
}
for(let i2 = 0; i2 < msg.length; i2++){
this._buffer[this._bufferIndex++] = msg[i2];
if (this._bufferIndex === 128) {
this.transform();
this._bufferIndex = 0;
}
}
let c = this._count;
if ((c[0] += msg.length << 3) < msg.length << 3) {
c[1]++;
}
c[1] += msg.length >>> 29;
return this;
}
digest(outputEncoding) {
if (this._finalized) {
throw new Error("digest has already been called.");
}
this._finalized = true;
var b2 = this._buffer, idx = this._bufferIndex;
b2[idx++] = 128;
while(idx !== 112){
if (idx === 128) {
this.transform();
idx = 0;
}
b2[idx++] = 0;
}
let c = this._count;
b2[112] = b2[113] = b2[114] = b2[115] = b2[116] = b2[117] = b2[118] = b2[119] = 0;
b2[120] = c[1] >>> 24 & 255;
b2[121] = c[1] >>> 16 & 255;
b2[122] = c[1] >>> 8 & 255;
b2[123] = c[1] >>> 0 & 255;
b2[124] = c[0] >>> 24 & 255;
b2[125] = c[0] >>> 16 & 255;
b2[126] = c[0] >>> 8 & 255;
b2[127] = c[0] >>> 0 & 255;
this.transform();
let i2, hash = new Uint8Array(64);
for(i2 = 0; i2 < 16; i2++){
hash[(i2 << 2) + 0] = this._H[i2] >>> 24 & 255;
hash[(i2 << 2) + 1] = this._H[i2] >>> 16 & 255;
hash[(i2 << 2) + 2] = this._H[i2] >>> 8 & 255;
hash[(i2 << 2) + 3] = this._H[i2] & 255;
}
this.init();
return outputEncoding ? decode(hash, outputEncoding) : hash;
}
transform() {
let h1 = this._H, h0h = h1[0], h0l = h1[1], h1h = h1[2], h1l = h1[3], h2h = h1[4], h2l = h1[5], h3h = h1[6], h3l = h1[7], h4h = h1[8], h4l = h1[9], h5h = h1[10], h5l = h1[11], h6h = h1[12], h6l = h1[13], h7h = h1[14], h7l = h1[15];
let ah = h0h, al = h0l, bh = h1h, bl = h1l, ch = h2h, cl = h2l, dh = h3h, dl = h3l, eh = h4h, el = h4l, fh = h5h, fl = h5l, gh = h6h, gl = h6l, hh = h7h, hl = h7l;
let i2, w1 = new Uint32Array(160);
for(i2 = 0; i2 < 32; i2++){
w1[i2] = this._buffer[(i2 << 2) + 3] | this._buffer[(i2 << 2) + 2] << 8 | this._buffer[(i2 << 2) + 1] << 16 | this._buffer[i2 << 2] << 24;
}
let gamma0xl, gamma0xh, gamma0l, gamma0h, gamma1xl, gamma1xh, gamma1l, gamma1h, wrl, wrh, wr7l, wr7h, wr16l, wr16h;
for(i2 = 16; i2 < 80; i2++){
gamma0xh = w1[(i2 - 15) * 2];
gamma0xl = w1[(i2 - 15) * 2 + 1];
gamma0h = (gamma0xl << 31 | gamma0xh >>> 1) ^ (gamma0xl << 24 | gamma0xh >>> 8) ^ gamma0xh >>> 7;
gamma0l = (gamma0xh << 31 | gamma0xl >>> 1) ^ (gamma0xh << 24 | gamma0xl >>> 8) ^ (gamma0xh << 25 | gamma0xl >>> 7);
gamma1xh = w1[(i2 - 2) * 2];
gamma1xl = w1[(i2 - 2) * 2 + 1];
gamma1h = (gamma1xl << 13 | gamma1xh >>> 19) ^ (gamma1xh << 3 | gamma1xl >>> 29) ^ gamma1xh >>> 6;
gamma1l = (gamma1xh << 13 | gamma1xl >>> 19) ^ (gamma1xl << 3 | gamma1xh >>> 29) ^ (gamma1xh << 26 | gamma1xl >>> 6);
wr7h = w1[(i2 - 7) * 2], wr7l = w1[(i2 - 7) * 2 + 1], wr16h = w1[(i2 - 16) * 2], wr16l = w1[(i2 - 16) * 2 + 1];
wrl = gamma0l + wr7l;
wrh = gamma0h + wr7h + (wrl >>> 0 < gamma0l >>> 0 ? 1 : 0);
wrl += gamma1l;
wrh += gamma1h + (wrl >>> 0 < gamma1l >>> 0 ? 1 : 0);
wrl += wr16l;
wrh += wr16h + (wrl >>> 0 < wr16l >>> 0 ? 1 : 0);
w1[i2 * 2] = wrh;
w1[i2 * 2 + 1] = wrl;
}
let chl, chh, majl, majh, sig0l, sig0h, sig1l, sig1h, krl, krh, t1l, t1h, t2l, t2h;
for(i2 = 0; i2 < 80; i2++){
chh = eh & fh ^ ~eh & gh;
chl = el & fl ^ ~el & gl;
majh = ah & bh ^ ah & ch ^ bh & ch;
majl = al & bl ^ al & cl ^ bl & cl;
sig0h = (al << 4 | ah >>> 28) ^ (ah << 30 | al >>> 2) ^ (ah << 25 | al >>> 7);
sig0l = (ah << 4 | al >>> 28) ^ (al << 30 | ah >>> 2) ^ (al << 25 | ah >>> 7);
sig1h = (el << 18 | eh >>> 14) ^ (el << 14 | eh >>> 18) ^ (eh << 23 | el >>> 9);
sig1l = (eh << 18 | el >>> 14) ^ (eh << 14 | el >>> 18) ^ (el << 23 | eh >>> 9);
krh = this._K[i2 * 2];
krl = this._K[i2 * 2 + 1];
t1l = hl + sig1l;
t1h = hh + sig1h + (t1l >>> 0 < hl >>> 0 ? 1 : 0);
t1l += chl;
t1h += chh + (t1l >>> 0 < chl >>> 0 ? 1 : 0);
t1l += krl;
t1h += krh + (t1l >>> 0 < krl >>> 0 ? 1 : 0);
t1l = t1l + w1[i2 * 2 + 1];
t1h += w1[i2 * 2] + (t1l >>> 0 < w1[i2 * 2 + 1] >>> 0 ? 1 : 0);
t2l = sig0l + majl;
t2h = sig0h + majh + (t2l >>> 0 < sig0l >>> 0 ? 1 : 0);
hh = gh;
hl = gl;
gh = fh;
gl = fl;
fh = eh;
fl = el;
el = dl + t1l | 0;
eh = dh + t1h + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
dh = ch;
dl = cl;
ch = bh;
cl = bl;
bh = ah;
bl = al;
al = t1l + t2l | 0;
ah = t1h + t2h + (al >>> 0 < t1l >>> 0 ? 1 : 0) | 0;
}
h0l = h1[1] = h0l + al | 0;
h1[0] = h0h + ah + (h0l >>> 0 < al >>> 0 ? 1 : 0) | 0;
h1l = h1[3] = h1l + bl | 0;
h1[2] = h1h + bh + (h1l >>> 0 < bl >>> 0 ? 1 : 0) | 0;
h2l = h1[5] = h2l + cl | 0;
h1[4] = h2h + ch + (h2l >>> 0 < cl >>> 0 ? 1 : 0) | 0;
h3l = h1[7] = h3l + dl | 0;
h1[6] = h3h + dh + (h3l >>> 0 < dl >>> 0 ? 1 : 0) | 0;
h4l = h1[9] = h4l + el | 0;
h1[8] = h4h + eh + (h4l >>> 0 < el >>> 0 ? 1 : 0) | 0;
h5l = h1[11] = h5l + fl | 0;
h1[10] = h5h + fh + (h5l >>> 0 < fl >>> 0 ? 1 : 0) | 0;
h6l = h1[13] = h6l + gl | 0;
h1[12] = h6h + gh + (h6l >>> 0 < gl >>> 0 ? 1 : 0) | 0;
h7l = h1[15] = h7l + hl | 0;
h1[14] = h7h + hh + (h7l >>> 0 < hl >>> 0 ? 1 : 0) | 0;
}
}
utils.sha512 = async (message5)=>{
return new SHA512().update(message5).digest();
};
class SlashClient1 extends HarmonyEventEmitter1 {
enabled = true;
handlers = [];
modules = [];
constructor(options3){
super();
let id2 = options3.id;
if (options3.token !== undefined) id2 = atob(options3.token?.split('.')[0]);
if (id2 === undefined) throw new Error('ID could not be found. Pass at least client or token');
this.id = id2;
this.client = options3.client;
this.token = options3.token;
this.publicKey = options3.publicKey;
this.enabled = options3.enabled ?? true;
if (this.client?._decoratedSlash !== undefined) {
this.client._decoratedSlash.forEach((e)=>{
e.handler = e.handler.bind(this.client);
this.handlers.push(e);
});
}
if (this._decoratedSlash !== undefined) {
this._decoratedSlash.forEach((e)=>{
e.handler = e.handler.bind(this.client);
this.handlers.push(e);
});
}
this.rest = options3.client === undefined ? options3.rest === undefined ? new RESTManager1({
token: this.token
}) : options3.rest : options3.client.rest;
this.client?.on('interactionCreate', async (interaction)=>await this._process(interaction)
);
this.commands = new SlashCommandsManager1(this);
}
getID() {
return typeof this.id === 'string' ? this.id : this.id();
}
handle(handler) {
this.handlers.push(handler);
return this;
}
loadModule(module) {
this.modules.push(module);
return this;
}
getHandlers() {
let res = this.handlers;
for (const mod4 of this.modules){
if (mod4 === undefined) continue;
res = [
...res,
...mod4.commands.map((cmd)=>{
cmd.handler = cmd.handler.bind(mod4);
return cmd;
})
];
}
return res;
}
_getCommand(i) {
return this.getHandlers().find((e)=>{
const hasGroupOrParent = e.group !== undefined || e.parent !== undefined;
const groupMatched = e.group !== undefined && e.parent !== undefined ? i.options.find((o)=>o.name === e.group && o.type === SlashCommandOptionType1.SUB_COMMAND_GROUP
)?.options?.find((o)=>o.name === e.name
) !== undefined : true;
const subMatched = e.group === undefined && e.parent !== undefined ? i.options.find((o)=>o.name === e.name && o.type === SlashCommandOptionType1.SUB_COMMAND
) !== undefined : true;
const nameMatched1 = e.name === i.name;
const parentMatched = hasGroupOrParent ? e.parent === i.name : true;
const nameMatched = hasGroupOrParent ? parentMatched : nameMatched1;
const matched = groupMatched && subMatched && nameMatched;
return matched;
});
}
async _process(interaction) {
if (!this.enabled) return;
if (interaction.type !== InteractionType1.APPLICATION_COMMAND || interaction.data === undefined) return;
const cmd = this._getCommand(interaction);
if (cmd?.group !== undefined) interaction.data.options = interaction.data.options[0].options ?? [];
if (cmd?.parent !== undefined) interaction.data.options = interaction.data.options[0].options ?? [];
if (cmd === undefined) return;
await this.emit('interaction', interaction);
try {
await cmd.handler(interaction);
} catch (e) {
await this.emit('interactionError', e);
}
}
async verifyKey(rawBody, signature, timestamp) {
if (this.publicKey === undefined) throw new Error('Public Key is not present');
const fullBody = new Uint8Array([
...typeof timestamp === 'string' ? encodeText(timestamp) : timestamp,
...typeof rawBody === 'string' ? encodeText(rawBody) : rawBody
]);
return verify(signature, fullBody, this.publicKey).catch(()=>false
);
}
async verifyServerRequest(req) {
if (req.method.toLowerCase() !== 'post') return false;
const signature = req.headers.get('x-signature-ed25519');
const timestamp = req.headers.get('x-signature-timestamp');
if (signature === null || timestamp === null) return false;
const rawbody = req.body instanceof Uint8Array ? req.body : await Deno.readAll(req.body);
const verify1 = await this.verifyKey(rawbody, signature, timestamp);
if (!verify1) return false;
try {
const payload = JSON.parse(decodeText(rawbody));
const res = new Interaction1(this, payload, {
user: new User1(this, payload.member?.user ?? payload.user),
member: payload.member,
guild: payload.guild_id,
channel: payload.channel_id,
resolved: payload.data?.resolved ?? {
users: {
},
members: {
},
roles: {
},
channels: {
}
}
});
res._httpRespond = async (d)=>await req.respond({
status: 200,
headers: new Headers({
'content-type': d instanceof FormData ? 'multipart/form-data' : 'application/json'
}),
body: d instanceof FormData ? d : JSON.stringify(d)
})
;
return res;
} catch (e) {
return false;
}
}
async verifyFetchEvent({ request: req , respondWith }) {
if (req.bodyUsed === true) throw new Error('Request Body already used');
if (req.body === null) return false;
const body = (await req.body.getReader().read()).value;
if (body === undefined) return false;
return await this.verifyServerRequest({
headers: req.headers,
body,
method: req.method,
respond: async (options4)=>{
await respondWith(new Response(options4.body, {
headers: options4.headers,
status: options4.status
}));
}
});
}
async verifyOpineRequest(req) {
const signature = req.headers.get('x-signature-ed25519');
const timestamp = req.headers.get('x-signature-timestamp');
const contentLength = req.headers.get('content-length');
if (signature === null || timestamp === null || contentLength === null) return false;
const body = new Uint8Array(parseInt(contentLength));
await req.body.read(body);
const verified = await this.verifyKey(body, signature, timestamp);
if (!verified) return false;
return true;
}
async verifyOpineMiddleware(req, res, next) {
const verified = await this.verifyOpineRequest(req);
if (!verified) return res.setStatus(401).end();
await next();
return true;
}
async verifyOakRequest(ctx) {
const signature = ctx.request.headers.get('x-signature-ed25519');
const timestamp = ctx.request.headers.get('x-signature-timestamp');
const contentLength = ctx.request.headers.get('content-length');
if (signature === null || timestamp === null || contentLength === null || ctx.request.hasBody !== true) {
return false;
}
const body = await ctx.request.body().value;
const verified = await this.verifyKey(body, signature, timestamp);
if (!verified) return false;
return true;
}
}
function slash1(name3, guild18) {
return function(client50, prop) {
if (client50._decoratedSlash === undefined) client50._decoratedSlash = [];
const item = client50[prop];
if (typeof item !== 'function') {
throw new Error('@slash decorator requires a function');
} else client50._decoratedSlash.push({
name: name3 ?? prop,
guild: guild18,
handler: item
});
};
}
function subslash1(parent5, name3, guild18) {
return function(client50, prop) {
if (client50._decoratedSlash === undefined) client50._decoratedSlash = [];
const item = client50[prop];
if (typeof item !== 'function') {
throw new Error('@subslash decorator requires a function');
} else client50._decoratedSlash.push({
parent: parent5,
name: name3 ?? prop,
guild: guild18,
handler: item
});
};
}
function groupslash1(parent5, group, name3, guild18) {
return function(client50, prop) {
if (client50._decoratedSlash === undefined) client50._decoratedSlash = [];
const item = client50[prop];
if (typeof item !== 'function') {
throw new Error('@groupslash decorator requires a function');
} else client50._decoratedSlash.push({
group,
parent: parent5,
name: name3 ?? prop,
guild: guild18,
handler: item
});
};
}
export { SlashClient1 as SlashClient };
export { slash1 as slash };
export { subslash1 as subslash };
export { groupslash1 as groupslash };
class ShardManager1 extends HarmonyEventEmitter1 {
list = new Collection1();
queueProcessing = false;
queue = [];
get rest() {
return this.client.rest;
}
constructor(client50){
super();
this.client = client50;
}
debug(msg) {
this.client.debug('Shards', msg);
}
enqueueIdentify(fn) {
this.queue.push(fn);
if (!this.queueProcessing) this.processQueue();
return this;
}
async processQueue() {
if (this.queueProcessing || this.queue.length === 0) return;
this.queueProcessing = true;
const item = this.queue[0];
await item();
this.queue.shift();
await delay(5000);
this.queueProcessing = false;
if (this.queue.length === 0) {
this.queueProcessing = false;
} else {
await this.processQueue();
}
}
async getShardCount() {
let shardCount;
if (this.cachedShardCount !== undefined) shardCount = this.cachedShardCount;
else {
if (this.client.shardCount === 'auto') {
const info = await this.client.rest.api.gateway.bot.get();
shardCount = info.shards;
} else shardCount = this.client.shardCount ?? 1;
}
this.cachedShardCount = shardCount;
return this.cachedShardCount;
}
async launch(id) {
if (this.list.has(id.toString()) === true) throw new Error(`Shard ${id} already launched`);
this.debug(`Launching Shard: ${id}`);
const shardCount = await this.getShardCount();
const gw = new Gateway1(this.client, [
Number(id),
shardCount
]);
this.list.set(id.toString(), gw);
gw.initWebsocket();
this.emit('launch', id);
gw.on(GatewayEvents.Ready, ()=>this.emit('shardReady', id)
);
gw.on('error', (err, evt)=>this.emit('shardError', id, err, evt)
);
gw.on(GatewayEvents.Resumed, ()=>this.emit('shardResume', id)
);
gw.on('close', (code2, reason)=>this.emit('shardDisconnect', id, code2, reason)
);
return gw.waitFor(GatewayEvents.Ready, ()=>true
).then(()=>this
);
}
async connect() {
const shardCount = await this.getShardCount();
this.client.shardCount = shardCount;
this.debug(`Launching ${shardCount} shard${shardCount === 1 ? '' : 's'}...`);
const startTime = Date.now();
for(let i3 = 0; i3 < shardCount; i3++){
await this.launch(i3);
}
const endTime = Date.now();
const diff = endTime - startTime;
this.debug(`Launched ${shardCount} shards! Time taken: ${Math.floor(diff / 1000)}s`);
return this;
}
get(id) {
return this.list.get(id.toString());
}
}
export { ShardManager1 as ShardManager };
class Client1 extends HarmonyEventEmitter1 {
ping = 0;
cache = new DefaultCacheAdapter();
messageCacheLifetime = 3600000;
reactionCacheLifetime = 3600000;
fetchUncachedReactions = false;
fetchGatewayInfo = true;
users = new UsersManager1(this);
guilds = new GuildManager1(this);
channels = new ChannelsManager1(this);
emojis = new EmojisManager1(this);
presence = new ClientPresence1();
shardCount = 'auto';
collectors = new Set();
get uptime() {
if (this.upSince === undefined) return 0;
else {
const dif = Date.now() - this.upSince.getTime();
if (dif < 0) return 0;
else return dif;
}
}
get gateway() {
return this.shards.list.get('0');
}
constructor(options4 = {
}){
super();
this._id = options4.id;
this.token = options4.token;
this.intents = options4.intents;
this.shards = new ShardManager1(this);
this.forceNewSession = options4.forceNewSession;
if (options4.cache !== undefined) this.cache = options4.cache;
if (options4.presence !== undefined) this.presence = options4.presence instanceof ClientPresence1 ? options4.presence : new ClientPresence1(options4.presence);
if (options4.messageCacheLifetime !== undefined) this.messageCacheLifetime = options4.messageCacheLifetime;
if (options4.reactionCacheLifetime !== undefined) this.reactionCacheLifetime = options4.reactionCacheLifetime;
if (options4.fetchUncachedReactions === true) this.fetchUncachedReactions = true;
if (this._decoratedEvents !== undefined && Object.keys(this._decoratedEvents).length !== 0) {
Object.entries(this._decoratedEvents).forEach((entry)=>{
this.on(entry[0], entry[1].bind(this));
});
this._decoratedEvents = undefined;
}
this.clientProperties = options4.clientProperties === undefined ? {
os: Deno.build.os,
browser: 'harmony',
device: 'harmony'
} : options4.clientProperties;
if (options4.shard !== undefined) this.shard = options4.shard;
if (options4.shardCount !== undefined) this.shardCount = options4.shardCount;
this.fetchGatewayInfo = options4.fetchGatewayInfo ?? true;
if (this.token === undefined) {
try {
const token = Deno.env.get('DISCORD_TOKEN');
if (token !== undefined) {
this.token = token;
this.debug('Info', 'Found token in ENV');
}
} catch (e) {
}
}
const restOptions = {
token: ()=>this.token
,
tokenType: TokenType1.Bot,
canary: options4.canary,
client: this
};
if (options4.restOptions !== undefined) Object.assign(restOptions, options4.restOptions);
this.rest = new RESTManager1(restOptions);
this.slash = new SlashClient1({
id: ()=>this.getEstimatedID()
,
client: this,
enabled: options4.enableSlash
});
}
setAdapter(adapter) {
this.cache = adapter;
return this;
}
setPresence(presence) {
if (presence instanceof ClientPresence1) {
this.presence = presence;
} else this.presence = new ClientPresence1(presence);
this.gateway?.sendPresence(this.presence.create());
}
debug(tag, msg) {
this.emit('debug', `[${tag}] ${msg}`);
}
getEstimatedID() {
if (this.user !== undefined) return this.user.id;
else if (this.token !== undefined) {
try {
return atob(this.token.split('.')[0]);
} catch (e) {
return this._id ?? 'unknown';
}
} else {
return this._id ?? 'unknown';
}
}
async fetchApplication() {
const app = await this.rest.api.oauth2.applications['@me'].get();
return new Application1(this, app);
}
async fetchInvite(id) {
return await new Promise((resolve3, reject)=>{
this.rest.get(INVITE(id)).then((data30)=>{
resolve3(new Invite1(this, data30));
}).catch((e)=>reject(e)
);
});
}
async connect(token, intents) {
token ??= this.token;
if (token === undefined) throw new Error('No Token Provided');
this.token = token;
if (intents !== undefined && this.intents !== undefined) {
this.debug('client', 'Intents were set in both client and connect function. Using the one in the connect function...');
} else if (intents === undefined && this.intents !== undefined) {
intents = this.intents;
} else if (intents !== undefined && this.intents === undefined) {
this.intents = intents;
} else throw new Error('No Gateway Intents were provided');
this.rest.token = token;
if (this.shard !== undefined) {
if (typeof this.shardCount === 'number') this.shards.cachedShardCount = this.shardCount;
await this.shards.launch(this.shard);
} else await this.shards.connect();
return this.waitFor('ready', ()=>true
).then(()=>this
);
}
async destroy() {
this.gateway.initialized = false;
this.gateway.sequenceID = undefined;
this.gateway.sessionID = undefined;
await this.gateway.cache.delete('seq');
await this.gateway.cache.delete('session_id');
this.gateway.close();
this.user = undefined;
this.upSince = undefined;
return this;
}
async reconnect() {
this.gateway.close();
this.gateway.initWebsocket();
return this.waitFor('ready', ()=>true
).then(()=>this
);
}
addCollector(collector) {
if (this.collectors.has(collector)) return false;
else {
this.collectors.add(collector);
return true;
}
}
removeCollector(collector) {
if (!this.collectors.has(collector)) return false;
else {
this.collectors.delete(collector);
return true;
}
}
async emit(event, ...args) {
const collectors = [];
for (const collector of this.collectors.values()){
if (collector.event === event) collectors.push(collector);
}
if (collectors.length !== 0) {
this.collectors.forEach((collector1)=>collector1._fire(...args)
);
}
return super.emit(event, ...args);
}
async fetchVoiceRegions() {
return this.rest.api.voice.regions.get();
}
async editUser(data) {
if (data.username === undefined && data.avatar === undefined) throw new Error('Either username or avatar or both must be specified to edit');
if (data.avatar?.startsWith('http') === true) {
data.avatar = await fetchAuto(data.avatar);
}
await this.rest.api.users['@me'].patch({
username: data.username,
avatar: data.avatar
});
return this;
}
async setUsername(username) {
return await this.editUser({
username
});
}
async setAvatar(avatar) {
return await this.editUser({
avatar
});
}
async createDM(user) {
const id3 = typeof user === 'object' ? user.id : user;
const dmPayload = await this.rest.api.users['@me'].channels.post({
recipient_id: id3
});
await this.channels.set(dmPayload.id, dmPayload);
return this.channels.get(dmPayload.id);
}
async fetchTemplate(code) {
const payload = await this.rest.api.guilds.templates[code].get();
return new Template(this, payload);
}
}
function event1(name3) {
return function(client51, prop) {
const listener = client51[prop];
if (typeof listener !== 'function') throw new Error('@event decorator requires a function');
if (client51._decoratedEvents === undefined) client51._decoratedEvents = {
};
const key = name3 === undefined ? prop : name3;
client51._decoratedEvents[key] = listener;
};
}
export { Client1 as Client };
export { event1 as event };
class Collector1 extends HarmonyEventEmitter1 {
_started = false;
filter = ()=>true
;
collected = new Collection1();
deinitOnEnd = false;
get started() {
return this._started;
}
set started(d) {
if (d !== this._started) {
this._started = d;
if (d) this.emit('start');
else {
if (this.deinitOnEnd && this.client !== undefined) this.deinit(this.client);
this.emit('end');
}
}
}
constructor(options5){
super();
if (typeof options5 === 'string') this.event = options5;
else {
this.event = options5.event;
this.client = options5.client;
this.filter = options5.filter ?? (()=>true
);
this.max = options5.max;
this.deinitOnEnd = options5.deinitOnEnd ?? false;
this.timeout = options5.timeout;
}
}
collect() {
this.started = true;
if (this.client !== undefined) this.init(this.client);
if (this._timer !== undefined) clearTimeout(this._timer);
if (this.timeout !== undefined) {
this._timer = setTimeout(()=>{
this.end();
}, this.timeout);
}
return this;
}
end() {
this.started = false;
if (this._timer !== undefined) clearTimeout(this._timer);
return this;
}
reset() {
this.collected = new Collection1();
this.collect();
return this;
}
init(client) {
this.client = client;
client.addCollector(this);
return this;
}
deinit(client) {
client.removeCollector(this);
return this;
}
check(..._args) {
return true;
}
async _fire(...args) {
if (!this.started) return;
const check = await this.check(...args);
if (!check) return;
const filter = await this.filter(...args);
if (!filter) return;
this.collected.set((Number(this.collected.size) + 1).toString(), args);
this.emit('collect', ...args);
if (this.max !== undefined && this.max < Number(this.collected.size) + 1) {
this.end();
}
}
when(filter) {
this.filter = filter;
return this;
}
each(handler) {
this.on('collect', ()=>handler()
);
return this;
}
async wait(timeout) {
if (timeout === undefined) timeout = this.timeout ?? 0;
return await new Promise((resolve3, reject)=>{
if (!timeout) throw new Error('Timeout is required parameter if not given in CollectorOptions');
let done = false;
const onend = ()=>{
done = true;
this.off('end', onend);
resolve3(this);
};
this.on('end', onend);
setTimeout(()=>{
if (!done) {
this.off('end', onend);
reject(new Error('Timeout'));
}
}, timeout);
});
}
}
export { Collector1 as Collector };
class SlashModule1 {
name = '';
commands = [];
constructor(){
if (this._decoratedSlash !== undefined) {
this.commands = this._decoratedSlash;
}
}
add(handler) {
this.commands.push(handler);
return this;
}
}
class Command1 {
name = '';
onError(ctx, error) {
}
beforeExecute(ctx) {
return true;
}
execute(ctx) {
}
afterExecute(ctx, executeResult) {
}
toString() {
return `Command: ${this.name}${this.extension !== undefined && this.extension.name !== '' ? ` [${this.extension.name}]` : this.category !== undefined ? ` [${this.category}]` : ''}`;
}
}
class CommandCategory1 {
name = '';
}
class CommandBuilder1 extends Command1 {
setName(name) {
this.name = name;
return this;
}
setDescription(description) {
this.description = description;
return this;
}
setCategory(category) {
this.category = category;
return this;
}
setAlias(alias) {
this.aliases = alias;
return this;
}
addAlias(alias) {
if (this.aliases === undefined) this.aliases = [];
if (typeof this.aliases === 'string') this.aliases = [
this.aliases
];
this.aliases = [
...new Set(...this.aliases, ...typeof alias === 'string' ? [
alias
] : alias)
];
return this;
}
setExtension(extension) {
this.extension = extension;
return this;
}
setUsage(usage) {
this.usage = usage;
return this;
}
addUsage(usage) {
if (this.usage === undefined) this.usage = [];
if (typeof this.usage === 'string') this.usage = [
this.usage
];
this.aliases = [
...new Set(...this.usage, ...typeof usage === 'string' ? [
usage
] : usage)
];
return this;
}
setExample(examples) {
this.examples = examples;
return this;
}
addExample(examples) {
if (this.examples === undefined) this.examples = [];
if (typeof this.examples === 'string') this.examples = [
this.examples
];
this.examples = [
...new Set(...this.examples, ...typeof examples === 'string' ? [
examples
] : examples)
];
return this;
}
setPermissions(perms) {
this.permissions = perms;
return this;
}
setUserPermissions(perms) {
this.userPermissions = perms;
return this;
}
setBotPermissions(perms) {
this.botPermissions = perms;
return this;
}
setRoles(roles) {
this.roles = roles;
return this;
}
setWhitelistedGuilds(list) {
this.whitelistedGuilds = list;
return this;
}
setWhitelistedUsers(list) {
this.whitelistedUsers = list;
return this;
}
setWhitelistedChannels(list) {
this.whitelistedChannels = list;
return this;
}
setGuildOnly(value = true) {
this.guildOnly = value;
return this;
}
setNSFW(value = true) {
this.nsfw = value;
return this;
}
setOwnerOnly(value = true) {
this.ownerOnly = value;
return this;
}
onBeforeExecute(fn) {
this.beforeExecute = fn;
return this;
}
onExecute(fn) {
this.execute = fn;
return this;
}
onAfterExecute(fn) {
this.afterExecute = fn;
return this;
}
}
class CommandsLoader1 {
#importSeq={
};
constructor(client52){
this.client = client52;
}
async load(filePath, exportName = 'default', onlyRead) {
const stat = await Deno.stat(filePath).catch(()=>undefined
);
if (stat === undefined || stat.isFile !== true) throw new Error(`File not found on path ${filePath}`);
let seq;
if (this.#importSeq[filePath] !== undefined) seq = this.#importSeq[filePath];
const mod4 = await import('file:///' + join2(Deno.cwd(), filePath) + (seq === undefined ? '' : `#${seq}`));
if (this.#importSeq[filePath] === undefined) this.#importSeq[filePath] = 0;
else this.#importSeq[filePath]++;
const Cmd = mod4[exportName];
if (Cmd === undefined) throw new Error(`Command not exported as ${exportName} from ${filePath}`);
let cmd;
try {
if (Cmd instanceof Command1) cmd = Cmd;
else cmd = new Cmd();
if (!(cmd instanceof Command1)) throw new Error('failed');
} catch (e) {
throw new Error(`Failed to load Command from ${filePath}`);
}
if (onlyRead !== true) this.client.commands.add(cmd);
return cmd;
}
async loadDirectory(path, options) {
const commands = [];
for await (const entry of walk(path, {
maxDepth: options?.maxDepth,
exts: options?.exts,
includeDirs: false
})){
if (entry.isFile !== true) continue;
const cmd = await this.load(entry.path, options?.exportName, options?.onlyRead);
commands.push(cmd);
}
return commands;
}
}
class CommandsManager1 {
list = new Collection1();
disabled = new Set();
constructor(client53){
this.client = client53;
this.loader = new CommandsLoader1(client53);
}
get count() {
return this.list.size;
}
filter(search, subPrefix) {
if (this.client.caseSensitive === false) search = search.toLowerCase();
return this.list.filter((cmd)=>{
if (subPrefix !== undefined) {
if (this.client.caseSensitive === true ? subPrefix !== cmd.extension?.subPrefix : subPrefix.toLowerCase() !== cmd.extension?.subPrefix?.toLowerCase()) {
return false;
}
} else if (subPrefix === undefined && cmd.extension?.subPrefix !== undefined) {
return false;
}
const name3 = this.client.caseSensitive === true ? cmd.name : cmd.name.toLowerCase();
if (name3 === search) {
return true;
} else if (cmd.aliases !== undefined) {
let aliases;
if (typeof cmd.aliases === 'string') aliases = [
cmd.aliases
];
else aliases = cmd.aliases;
if (this.client.caseSensitive === false) aliases = aliases.map((e)=>e.toLowerCase()
);
return aliases.includes(search);
} else {
return false;
}
});
}
find(search, subPrefix) {
const filtered = this.filter(search, subPrefix);
return filtered.first();
}
fetch(parsed, bypassDisable) {
let cmd = this.find(parsed.name);
if (cmd?.extension?.subPrefix !== undefined) cmd = undefined;
if (cmd === undefined && parsed.args.length > 0) {
cmd = this.find(parsed.args[0], parsed.name);
if (cmd === undefined || cmd.extension?.subPrefix === undefined) return;
if (this.client.caseSensitive === true ? cmd.extension.subPrefix !== parsed.name : cmd.extension.subPrefix.toLowerCase() !== parsed.name.toLowerCase()) return;
parsed.args.shift();
}
if (cmd === undefined) return;
if (this.isDisabled(cmd) && bypassDisable !== true) return;
return cmd;
}
exists(search, subPrefix) {
let exists = false;
if (typeof search === 'string') return this.find(search, subPrefix) !== undefined;
else {
exists = this.find(search.name, subPrefix === undefined ? search.extension?.subPrefix : subPrefix) !== undefined;
if (search.aliases !== undefined) {
const aliases = typeof search.aliases === 'string' ? [
search.aliases
] : search.aliases;
exists = aliases.map((alias)=>this.find(alias) !== undefined
).find((e)=>e
) ?? false;
}
return exists;
}
}
add(cmd) {
if (!(cmd instanceof Command1)) cmd = new cmd();
if (this.exists(cmd, cmd.extension?.subPrefix)) throw new Error(`Failed to add Command '${cmd.toString()}' with name/alias already exists.`);
this.list.set(`${cmd.name}-${this.list.filter((e)=>this.client.caseSensitive === true ? e.name === cmd.name : e.name.toLowerCase() === cmd.name.toLowerCase()
).size}`, cmd);
return true;
}
delete(cmd) {
const find = typeof cmd === 'string' ? this.find(cmd) : cmd;
if (find === undefined) return false;
else return this.list.delete(find.name);
}
isDisabled(name) {
const cmd = typeof name === 'string' ? this.find(name) : name;
if (cmd === undefined) return false;
const exists = this.exists(name);
if (!exists) return false;
return this.disabled.has(cmd.name);
}
disable(name) {
const cmd = typeof name === 'string' ? this.find(name) : name;
if (cmd === undefined) return false;
if (this.isDisabled(cmd)) return false;
this.disabled.add(cmd.name);
return true;
}
category(category) {
return this.list.filter((cmd)=>cmd.category !== undefined && cmd.category === category
);
}
}
class CategoriesManager1 {
list = new Collection1();
constructor(client54){
this.client = client54;
}
all() {
return this.list;
}
names() {
return [
...this.list.keys()
];
}
has(category) {
return this.list.has(typeof category === 'string' ? category : category.name);
}
get(name) {
return this.list.get(name);
}
add(category) {
if (this.has(category)) throw new Error(`Category ${category.name} already exists`);
this.list.set(category.name, category);
return this;
}
remove(category) {
if (!this.has(category)) return false;
this.list.delete(typeof category === 'string' ? category : category.name);
return true;
}
}
const parseCommand = (client55, msg, prefix)=>{
let content = msg.content.slice(prefix.length);
if (client55.spacesAfterPrefix === true) content = content.trim();
const args = content.split(' ');
const name3 = args.shift();
if (name3 === undefined) return;
const argString = content.slice(name3.length).trim();
return {
name: name3,
args,
argString
};
};
class ExtensionCommands1 {
constructor(ext1){
this.extension = ext1;
}
get list() {
return this.extension.client.commands.list.filter((c)=>c.extension?.name === this.extension.name
);
}
get(cmd) {
const find = this.extension.client.commands.find(cmd);
if (find === undefined) return undefined;
else if (find.extension === undefined) return undefined;
else if (find.extension.name !== this.extension.name) return undefined;
else return find;
}
add(Cmd) {
const cmd = Cmd instanceof Command1 ? Cmd : new Cmd();
cmd.extension = this.extension;
return this.extension.client.commands.add(cmd);
}
delete(cmd) {
const find = this.extension.client.commands.find(typeof cmd === 'string' ? cmd : cmd.name);
if (find === undefined) return false;
if (find.extension !== undefined && find.extension.name !== this.extension.name) return false;
else return this.extension.client.commands.delete(find);
}
deleteAll() {
for (const [cmd] of this.list){
this.delete(cmd);
}
}
}
class Extension1 {
name = '';
commands = new ExtensionCommands1(this);
events = {
};
constructor(client55){
this.client = client55;
if (this._decoratedCommands !== undefined) {
Object.entries(this._decoratedCommands).forEach((entry)=>{
entry[1].extension = this;
this.commands.add(entry[1]);
});
this._decoratedCommands = undefined;
}
if (this._decoratedEvents !== undefined && Object.keys(this._decoratedEvents).length !== 0) {
Object.entries(this._decoratedEvents).forEach((entry)=>{
this.listen(entry[0], entry[1].bind(this));
});
this._decoratedEvents = undefined;
}
}
listen(event, cb) {
if (this.events[event] !== undefined) return false;
else {
const fn = (...args)=>{
cb(this, ...args);
};
this.client.on(event, fn);
this.events[event] = fn;
return true;
}
}
load() {
}
unload() {
}
}
class ExtensionsManager1 {
list = new Collection1();
constructor(client56){
this.client = client56;
}
get(ext) {
return this.list.get(ext);
}
exists(ext) {
return this.get(ext) !== undefined;
}
load(ext) {
if (!(ext instanceof Extension1)) ext = new ext(this.client);
if (this.exists(ext.name)) throw new Error(`Extension with name '${ext.name}' already exists`);
this.list.set(ext.name, ext);
ext.load();
}
unload(ext) {
const name3 = typeof ext === 'string' ? ext : ext.name;
const extension = this.get(name3);
if (extension === undefined) return false;
extension.commands.deleteAll();
for (const [k, v] of Object.entries(extension.events)){
this.client.off(k, v);
delete extension.events[k];
}
extension.unload();
return this.list.delete(name3);
}
}
class CommandClient1 extends Client1 {
extensions = new ExtensionsManager1(this);
commands = new CommandsManager1(this);
categories = new CategoriesManager1(this);
constructor(options6){
super(options6);
this.prefix = options6.prefix;
this.mentionPrefix = options6.mentionPrefix === undefined ? false : options6.mentionPrefix;
this.getGuildPrefix = options6.getGuildPrefix === undefined ? (id3)=>this.prefix
: options6.getGuildPrefix;
this.getUserPrefix = options6.getUserPrefix === undefined ? (id3)=>this.prefix
: options6.getUserPrefix;
this.getChannelPrefix = options6.getChannelPrefix === undefined ? (id3)=>this.prefix
: options6.getChannelPrefix;
this.isUserBlacklisted = options6.isUserBlacklisted === undefined ? (id3)=>false
: options6.isUserBlacklisted;
this.isGuildBlacklisted = options6.isGuildBlacklisted === undefined ? (id3)=>false
: options6.isGuildBlacklisted;
this.isChannelBlacklisted = options6.isChannelBlacklisted === undefined ? (id3)=>false
: options6.isChannelBlacklisted;
this.spacesAfterPrefix = options6.spacesAfterPrefix === undefined ? false : options6.spacesAfterPrefix;
this.owners = options6.owners === undefined ? [] : options6.owners;
this.allowBots = options6.allowBots === undefined ? false : options6.allowBots;
this.allowDMs = options6.allowDMs === undefined ? true : options6.allowDMs;
this.caseSensitive = options6.caseSensitive === undefined ? false : options6.caseSensitive;
if (this._decoratedCommands !== undefined) {
Object.values(this._decoratedCommands).forEach((entry)=>{
this.commands.add(entry);
});
this._decoratedCommands = undefined;
}
this.on('messageCreate', async (msg)=>await this.processMessage(msg)
);
}
async processMessage(msg) {
if (!this.allowBots && msg.author.bot === true) return;
const isUserBlacklisted = await this.isUserBlacklisted(msg.author.id);
if (isUserBlacklisted) return;
const isChannelBlacklisted = await this.isChannelBlacklisted(msg.channel.id);
if (isChannelBlacklisted) return;
if (msg.guild !== undefined) {
const isGuildBlacklisted = await this.isGuildBlacklisted(msg.guild.id);
if (isGuildBlacklisted) return;
}
let prefix = [];
if (typeof this.prefix === 'string') prefix = [
...prefix,
this.prefix
];
else prefix = [
...prefix,
...this.prefix
];
const userPrefix = await this.getUserPrefix(msg.author.id);
if (userPrefix !== undefined) {
if (typeof userPrefix === 'string') prefix = [
...prefix,
userPrefix
];
else prefix = [
...prefix,
...userPrefix
];
}
if (msg.guild !== undefined) {
const guildPrefix = await this.getGuildPrefix(msg.guild.id);
if (guildPrefix !== undefined) {
if (typeof guildPrefix === 'string') prefix = [
...prefix,
guildPrefix
];
else prefix = [
...prefix,
...guildPrefix
];
}
}
prefix = [
...new Set(prefix)
];
let mentionPrefix = false;
let usedPrefix = prefix.filter((v)=>msg.content.startsWith(v)
).sort((b3, a)=>a.length - b3.length
)[0];
if (usedPrefix === undefined && this.mentionPrefix) mentionPrefix = true;
if (mentionPrefix) {
if (msg.content.startsWith(this.user?.mention) === true) usedPrefix = this.user?.mention;
else if (msg.content.startsWith(this.user?.nickMention) === true) usedPrefix = this.user?.nickMention;
else return;
}
if (typeof usedPrefix !== 'string') return;
prefix = usedPrefix;
const parsed = parseCommand(this, msg, prefix);
if (parsed === undefined) return;
const command = this.commands.fetch(parsed);
if (command === undefined) return;
const category = command.category !== undefined ? this.categories.get(command.category) : undefined;
if (command.whitelistedGuilds === undefined && category?.whitelistedGuilds !== undefined && msg.guild !== undefined && category.whitelistedGuilds.includes(msg.guild.id) === false) return;
if (command.whitelistedGuilds !== undefined && msg.guild !== undefined && command.whitelistedGuilds.includes(msg.guild.id) === false) return;
if (command.whitelistedChannels === undefined && category?.whitelistedChannels !== undefined && category.whitelistedChannels.includes(msg.channel.id) === false) return;
if (command.whitelistedChannels !== undefined && command.whitelistedChannels.includes(msg.channel.id) === false) return;
if (command.whitelistedUsers === undefined && category?.whitelistedUsers !== undefined && category.whitelistedUsers.includes(msg.author.id) === false) return;
if (command.whitelistedUsers !== undefined && command.whitelistedUsers.includes(msg.author.id) === false) return;
const ctx = {
client: this,
name: parsed.name,
prefix,
args: parsed.args,
argString: parsed.argString,
message: msg,
author: msg.author,
command,
channel: msg.channel,
guild: msg.guild
};
if ((command.ownerOnly !== undefined || category === undefined ? command.ownerOnly : category.ownerOnly) === true && !this.owners.includes(msg.author.id)) return this.emit('commandOwnerOnly', ctx);
if ((command.guildOnly !== undefined || category === undefined ? command.guildOnly : category.guildOnly) === true && msg.guild === undefined) return this.emit('commandGuildOnly', ctx);
if ((command.dmOnly !== undefined || category === undefined ? command.dmOnly : category.dmOnly) === true && msg.guild !== undefined) return this.emit('commandDmOnly', ctx);
if (command.nsfw === true && (msg.guild === undefined || msg.channel.nsfw !== true)) return this.emit('commandNSFW', ctx);
const allPermissions = command.permissions !== undefined ? command.permissions : category?.permissions;
if ((command.botPermissions !== undefined || category?.botPermissions !== undefined || allPermissions !== undefined) && msg.guild !== undefined) {
const me2 = await msg.guild.me();
const missing = [];
let permissions = command.botPermissions === undefined ? category?.permissions : command.botPermissions;
if (permissions !== undefined) {
if (typeof permissions === 'string') permissions = [
permissions
];
if (allPermissions !== undefined) permissions = [
...new Set(...permissions, ...allPermissions)
];
for (const perm of permissions){
if (me2.permissions.has(perm) === false) missing.push(perm);
}
if (missing.length !== 0) return this.emit('commandBotMissingPermissions', ctx, missing);
}
}
if ((command.userPermissions !== undefined || category?.userPermissions !== undefined || allPermissions !== undefined) && msg.guild !== undefined) {
let permissions = command.userPermissions !== undefined ? command.userPermissions : category?.userPermissions;
if (permissions !== undefined) {
if (typeof permissions === 'string') permissions = [
permissions
];
if (allPermissions !== undefined) permissions = [
...new Set(...permissions, ...allPermissions)
];
const missing = [];
for (const perm of permissions){
const has = msg.member?.permissions.has(perm);
if (has !== true) missing.push(perm);
}
if (missing.length !== 0) return this.emit('commandUserMissingPermissions', ctx, missing);
}
}
if (command.args !== undefined) {
if (typeof command.args === 'boolean' && parsed.args.length === 0) return this.emit('commandMissingArgs', ctx);
else if (typeof command.args === 'number' && parsed.args.length < command.args) this.emit('commandMissingArgs', ctx);
}
try {
this.emit('commandUsed', ctx);
const beforeExecute = await command.beforeExecute(ctx);
if (beforeExecute === false) return;
const result = await command.execute(ctx);
await command.afterExecute(ctx, result);
} catch (e) {
await command.onError(ctx, e).catch((e1)=>this.emit('commandError', ctx, e1)
);
this.emit('commandError', ctx, e);
}
}
}
function command1(options7) {
return function(target, name3) {
if (target._decoratedCommands === undefined) target._decoratedCommands = {
};
const prop = target[name3];
if (typeof prop !== 'function') throw new Error('@command decorator can only be used on class methods');
const command1 = new Command1();
command1.name = name3;
command1.execute = prop;
if (options7 !== undefined) Object.assign(command1, options7);
if (target instanceof Extension1) command1.extension = target;
target._decoratedCommands[command1.name] = command1;
};
}
class Webhook1 {
get url() {
return `${Constants.DISCORD_API_URL}/v${this.rest.version ?? Constants.DISCORD_API_VERSION}/webhooks/${this.id}/${this.token}`;
}
constructor(data30, client57, rest){
this.id = data30.id;
this.type = data30.type;
this.channelID = data30.channel_id;
this.guildID = data30.guild_id;
this.user = data30.user === undefined || client57 === undefined ? undefined : new User1(client57, data30.user);
if (data30.user !== undefined && client57 === undefined) this.userRaw = data30.user;
this.name = data30.name;
this.avatar = data30.avatar;
this.token = data30.token;
this.applicationID = data30.application_id;
if (rest !== undefined) this.rest = rest;
else if (client57 !== undefined) this.rest = client57.rest;
else this.rest = new RESTManager1();
}
fromPayload(data) {
this.id = data.id;
this.type = data.type;
this.channelID = data.channel_id;
this.guildID = data.guild_id;
this.user = data.user === undefined || this.client === undefined ? undefined : new User1(this.client, data.user);
if (data.user !== undefined && this.client === undefined) this.userRaw = data.user;
this.name = data.name;
this.avatar = data.avatar;
this.token = data.token;
this.applicationID = data.application_id;
return this;
}
async send(text, option) {
if (typeof text === 'object') {
option = text;
text = undefined;
}
if (text === undefined && option === undefined) {
throw new Error('Either text or option is necessary.');
}
if (option instanceof Embed1) option = {
embeds: [
option
]
};
const payload = {
content: text,
embeds: option?.embed !== undefined ? [
option.embed
] : option?.embeds !== undefined ? option.embeds : undefined,
file: option?.file,
tts: option?.tts,
allowed_mentions: option?.allowedMentions
};
if (option?.name !== undefined) {
payload.username = option?.name;
}
if (option?.avatar !== undefined) {
payload.avatar = option?.avatar;
}
if (payload.embeds !== undefined && payload.embeds instanceof Array && payload.embeds.length > 10) throw new Error(`Cannot send more than 10 embeds through Webhook`);
const resp = await this.rest.post(this.url + '?wait=true', payload);
const res = new Message1(this.client, resp, this, this);
await res.mentions.fromPayload(resp);
return res;
}
static async fromURL(url, client) {
const rest1 = client !== undefined ? client.rest : new RESTManager1();
const raw = await rest1.get(typeof url === 'string' ? url : url.toString());
if (typeof raw !== 'object') throw new Error(`Failed to load Webhook from URL: ${url}`);
const webhook = new Webhook1(raw, client, rest1);
return webhook;
}
async edit(options) {
if (options.channelID !== undefined && this.client === undefined) throw new Error('Authentication is required for editing Webhook Channel');
if (options.avatar !== undefined && (options.avatar.startsWith('http:') || options.avatar.startsWith('https:'))) {
options.avatar = await fetchAuto(options.avatar);
}
const data31 = await this.rest.patch(this.url, options);
this.fromPayload(data31);
return this;
}
async delete() {
const resp = await this.rest.delete(this.url, undefined, 0, undefined, true);
if (resp.response.status !== 204) return false;
else return true;
}
async editMessage(message, data) {
await this.client?.rest.patch(WEBHOOK_MESSAGE(this.id, this.token ?? this.client.token, typeof message === 'string' ? message : message.id), data);
return this;
}
async deleteMessage(message) {
await this.client?.rest.delete(WEBHOOK_MESSAGE(this.id, this.token ?? this.client.token, typeof message === 'string' ? message : message.id));
return this;
}
}
class Intents1 {
static NonPrivileged = [
GatewayIntents1.GUILD_MESSAGES,
GatewayIntents1.DIRECT_MESSAGES,
GatewayIntents1.DIRECT_MESSAGE_REACTIONS,
GatewayIntents1.DIRECT_MESSAGE_TYPING,
GatewayIntents1.GUILDS,
GatewayIntents1.GUILD_BANS,
GatewayIntents1.GUILD_EMOJIS,
GatewayIntents1.GUILD_INTEGRATIONS,
GatewayIntents1.GUILD_INVITES,
GatewayIntents1.GUILD_MESSAGE_REACTIONS,
GatewayIntents1.GUILD_MESSAGE_TYPING,
GatewayIntents1.GUILD_VOICE_STATES,
GatewayIntents1.GUILD_WEBHOOKS
];
static All = [
GatewayIntents1.GUILD_MEMBERS,
GatewayIntents1.GUILD_PRESENCES,
...Intents1.NonPrivileged
];
static Presence = [
GatewayIntents1.GUILD_PRESENCES,
...Intents1.NonPrivileged
];
static GuildMembers = [
GatewayIntents1.GUILD_MEMBERS,
...Intents1.NonPrivileged
];
static None = [
...Intents1.NonPrivileged
];
static create(privileged, disable) {
let intents = [
...Intents1.NonPrivileged
];
if (privileged !== undefined && privileged.length !== 0) {
if (privileged.includes('GUILD_MEMBERS')) intents.push(GatewayIntents1.GUILD_MEMBERS);
if (privileged.includes('GUILD_PRESENCES')) intents.push(GatewayIntents1.GUILD_PRESENCES);
}
if (disable !== undefined) {
intents = intents.filter((intent)=>!disable.includes(intent)
);
}
return intents;
}
}
var MessageNotification;
(function(MessageNotification1) {
MessageNotification1[MessageNotification1["ALL_MESSAGES"] = 0] = "ALL_MESSAGES";
MessageNotification1[MessageNotification1["ONLY_MENTIONS"] = 1] = "ONLY_MENTIONS";
})(MessageNotification || (MessageNotification = {
}));
var ContentFilter;
(function(ContentFilter1) {
ContentFilter1[ContentFilter1["DISABLED"] = 0] = "DISABLED";
ContentFilter1[ContentFilter1["MEMBERS_WITHOUT_ROLES"] = 1] = "MEMBERS_WITHOUT_ROLES";
ContentFilter1[ContentFilter1["ALL_MEMBERS"] = 2] = "ALL_MEMBERS";
})(ContentFilter || (ContentFilter = {
}));
var MFA;
(function(MFA1) {
MFA1[MFA1["NONE"] = 0] = "NONE";
MFA1[MFA1["ELEVATED"] = 1] = "ELEVATED";
})(MFA || (MFA = {
}));
var Verification1;
(function(Verification1) {
Verification1[Verification1["NONE"] = 0] = "NONE";
Verification1[Verification1["LOW"] = 1] = "LOW";
Verification1[Verification1["MEDIUM"] = 2] = "MEDIUM";
Verification1[Verification1["HIGH"] = 3] = "HIGH";
Verification1[Verification1["VERY_HIGH"] = 4] = "VERY_HIGH";
})(Verification1 || (Verification1 = {
}));
var PremiumTier;
(function(PremiumTier1) {
PremiumTier1[PremiumTier1["NONE"] = 0] = "NONE";
PremiumTier1[PremiumTier1["TIER_1"] = 1] = "TIER_1";
PremiumTier1[PremiumTier1["TIER_2"] = 2] = "TIER_2";
PremiumTier1[PremiumTier1["TIER_3"] = 3] = "TIER_3";
})(PremiumTier || (PremiumTier = {
}));
var SystemChannelFlags;
(function(SystemChannelFlags1) {
SystemChannelFlags1[SystemChannelFlags1["SUPPRESS_JOIN_NOTIFICATIONS"] = 1] = "SUPPRESS_JOIN_NOTIFICATIONS";
SystemChannelFlags1[SystemChannelFlags1["SUPPRESS_PREMIUM_SUBSCRIPTIONS"] = 2] = "SUPPRESS_PREMIUM_SUBSCRIPTIONS";
})(SystemChannelFlags || (SystemChannelFlags = {
}));
var IntegrationExpireBehavior;
(function(IntegrationExpireBehavior1) {
IntegrationExpireBehavior1[IntegrationExpireBehavior1["REMOVE_ROLE"] = 0] = "REMOVE_ROLE";
IntegrationExpireBehavior1[IntegrationExpireBehavior1["KICK"] = 1] = "KICK";
})(IntegrationExpireBehavior || (IntegrationExpireBehavior = {
}));
class EOFError extends Error {
}
class ErrorReplyError extends Error {
}
class InvalidStateError extends Error {
constructor(){
super("Invalid state");
}
}
const IntegerReplyCode = ":".charCodeAt(0);
const BulkReplyCode = "$".charCodeAt(0);
const SimpleStringCode = "+".charCodeAt(0);
const ArrayReplyCode = "*".charCodeAt(0);
const ErrorReplyCode = "-".charCodeAt(0);
const encoder2 = new TextEncoder();
const decoder2 = new TextDecoder();
function createRequest(command1, args) {
const _args = args.filter((v)=>v !== void 0 && v !== null
);
let msg = "";
msg += `*${1 + _args.length}\r\n`;
msg += `$${command1.length}\r\n`;
msg += `${command1}\r\n`;
for (const arg of _args){
const val = String(arg);
const bytesLen = encoder2.encode(val).byteLength;
msg += `$${bytesLen}\r\n`;
msg += `${val}\r\n`;
}
return msg;
}
async function sendCommand(writer, reader, command1, ...args) {
const msg = createRequest(command1, args);
await writer.write(encoder2.encode(msg));
await writer.flush();
return readReply(reader);
}
async function sendCommands(writer, reader, commands) {
const msg = commands.map((c)=>createRequest(c.command, c.args)
).join("");
await writer.write(encoder2.encode(msg));
await writer.flush();
const ret = [];
for(let i3 = 0; i3 < commands.length; i3++){
try {
const rep = await readReply(reader);
ret.push(rep);
} catch (e) {
if (e instanceof ErrorReplyError) {
ret.push([
"error",
e
]);
} else {
throw e;
}
}
}
return ret;
}
async function readReply(reader) {
const res = await reader.peek(1);
if (res === null) {
throw new EOFError();
}
switch(res[0]){
case IntegerReplyCode:
return [
"integer",
await readIntegerReply(reader)
];
case SimpleStringCode:
return [
"status",
await readStatusReply(reader)
];
case BulkReplyCode:
return [
"bulk",
await readBulkReply(reader)
];
case ArrayReplyCode:
return [
"array",
await readArrayReply(reader)
];
case ErrorReplyCode:
tryParseErrorReply(await readLine(reader));
}
throw new InvalidStateError();
}
async function readLine(reader) {
const buf = new Uint8Array(1024);
let loc = 0;
let d = null;
while((d = await reader.readByte()) && d !== null){
if (d === "\r".charCodeAt(0)) {
const d1 = await reader.readByte();
if (d1 === "\n".charCodeAt(0)) {
buf[loc++] = d;
buf[loc++] = d1;
return decoder2.decode(new Deno.Buffer(buf.subarray(0, loc)).bytes());
}
}
buf[loc++] = d;
}
throw new InvalidStateError();
}
async function readStatusReply(reader) {
const line = await readLine(reader);
if (line[0] === "+") {
return line.substr(1, line.length - 3);
}
tryParseErrorReply(line);
}
async function readIntegerReply(reader) {
const line = await readLine(reader);
if (line[0] === ":") {
const str = line.substr(1, line.length - 3);
return parseInt(str);
}
tryParseErrorReply(line);
}
async function readBulkReply(reader) {
const line = await readLine(reader);
if (line[0] !== "$") {
tryParseErrorReply(line);
}
const sizeStr = line.substr(1, line.length - 3);
const size = parseInt(sizeStr);
if (size < 0) {
return undefined;
}
const dest = new Uint8Array(size + 2);
await reader.readFull(dest);
return decoder2.decode(new Deno.Buffer(dest.subarray(0, dest.length - 2)).bytes());
}
async function readArrayReply(reader) {
const line = await readLine(reader);
const argCount = parseInt(line.substr(1, line.length - 3));
const result = [];
for(let i3 = 0; i3 < argCount; i3++){
const res = await reader.peek(1);
if (res === null) {
throw new EOFError();
}
switch(res[0]){
case SimpleStringCode:
result.push(await readStatusReply(reader));
break;
case BulkReplyCode:
result.push(await readBulkReply(reader));
break;
case IntegerReplyCode:
result.push(await readIntegerReply(reader));
break;
case ArrayReplyCode:
result.push(await readArrayReply(reader));
break;
}
}
return result;
}
function tryParseErrorReply(line) {
const code3 = line[0];
if (code3 === "-") {
throw new ErrorReplyError(line);
}
throw new Error(`invalid line: ${line}`);
}
function copyBytes(src, dst, off = 0) {
off = Math.max(0, Math.min(off, dst.byteLength));
const dstBytesAvailable = dst.byteLength - off;
if (src.byteLength > dstBytesAvailable) {
src = src.subarray(0, dstBytesAvailable);
}
dst.set(src, off);
return src.byteLength;
}
class DenoStdInternalError1 extends Error {
constructor(message5){
super(message5);
this.name = "DenoStdInternalError";
}
}
function assert1(expr, msg = "") {
if (!expr) {
throw new DenoStdInternalError1(msg);
}
}
const DEFAULT_BUF_SIZE = 4096;
const MIN_BUF_SIZE = 16;
const CR = "\r".charCodeAt(0);
const LF = "\n".charCodeAt(0);
class BufferFullError extends Error {
name = "BufferFullError";
constructor(partial){
super("Buffer full");
this.partial = partial;
}
}
class PartialReadError extends Deno.errors.UnexpectedEof {
name = "PartialReadError";
constructor(){
super("Encountered UnexpectedEof, data only partially read");
}
}
class BufReader {
r = 0;
w = 0;
eof = false;
static create(r, size = 4096) {
return r instanceof BufReader ? r : new BufReader(r, size);
}
constructor(rd1, size1 = 4096){
if (size1 < 16) {
size1 = MIN_BUF_SIZE;
}
this._reset(new Uint8Array(size1), rd1);
}
size() {
return this.buf.byteLength;
}
buffered() {
return this.w - this.r;
}
async _fill() {
if (this.r > 0) {
this.buf.copyWithin(0, this.r, this.w);
this.w -= this.r;
this.r = 0;
}
if (this.w >= this.buf.byteLength) {
throw Error("bufio: tried to fill full buffer");
}
for(let i3 = 100; i3 > 0; i3--){
const rr = await this.rd.read(this.buf.subarray(this.w));
if (rr === null) {
this.eof = true;
return;
}
assert1(rr >= 0, "negative read");
this.w += rr;
if (rr > 0) {
return;
}
}
throw new Error(`No progress after ${100} read() calls`);
}
reset(r) {
this._reset(this.buf, r);
}
_reset(buf, rd) {
this.buf = buf;
this.rd = rd;
this.eof = false;
}
async read(p) {
let rr = p.byteLength;
if (p.byteLength === 0) return rr;
if (this.r === this.w) {
if (p.byteLength >= this.buf.byteLength) {
const rr1 = await this.rd.read(p);
const nread = rr1 ?? 0;
assert1(nread >= 0, "negative read");
return rr1;
}
this.r = 0;
this.w = 0;
rr = await this.rd.read(this.buf);
if (rr === 0 || rr === null) return rr;
assert1(rr >= 0, "negative read");
this.w += rr;
}
const copied = copyBytes(this.buf.subarray(this.r, this.w), p, 0);
this.r += copied;
return copied;
}
async readFull(p) {
let bytesRead = 0;
while(bytesRead < p.length){
try {
const rr = await this.read(p.subarray(bytesRead));
if (rr === null) {
if (bytesRead === 0) {
return null;
} else {
throw new PartialReadError();
}
}
bytesRead += rr;
} catch (err) {
err.partial = p.subarray(0, bytesRead);
throw err;
}
}
return p;
}
async readByte() {
while(this.r === this.w){
if (this.eof) return null;
await this._fill();
}
const c = this.buf[this.r];
this.r++;
return c;
}
async readString(delim) {
if (delim.length !== 1) {
throw new Error("Delimiter should be a single character");
}
const buffer = await this.readSlice(delim.charCodeAt(0));
if (buffer === null) return null;
return new TextDecoder().decode(buffer);
}
async readLine() {
let line;
try {
line = await this.readSlice(LF);
} catch (err) {
let { partial: partial1 } = err;
assert1(partial1 instanceof Uint8Array, "bufio: caught error from `readSlice()` without `partial` property");
if (!(err instanceof BufferFullError)) {
throw err;
}
if (!this.eof && partial1.byteLength > 0 && partial1[partial1.byteLength - 1] === CR) {
assert1(this.r > 0, "bufio: tried to rewind past start of buffer");
this.r--;
partial1 = partial1.subarray(0, partial1.byteLength - 1);
}
return {
line: partial1,
more: !this.eof
};
}
if (line === null) {
return null;
}
if (line.byteLength === 0) {
return {
line,
more: false
};
}
if (line[line.byteLength - 1] == LF) {
let drop = 1;
if (line.byteLength > 1 && line[line.byteLength - 2] === CR) {
drop = 2;
}
line = line.subarray(0, line.byteLength - drop);
}
return {
line,
more: false
};
}
async readSlice(delim) {
let s1 = 0;
let slice;
while(true){
let i3 = this.buf.subarray(this.r + s1, this.w).indexOf(delim);
if (i3 >= 0) {
i3 += s1;
slice = this.buf.subarray(this.r, this.r + i3 + 1);
this.r += i3 + 1;
break;
}
if (this.eof) {
if (this.r === this.w) {
return null;
}
slice = this.buf.subarray(this.r, this.w);
this.r = this.w;
break;
}
if (this.buffered() >= this.buf.byteLength) {
this.r = this.w;
const oldbuf = this.buf;
const newbuf = this.buf.slice(0);
this.buf = newbuf;
throw new BufferFullError(oldbuf);
}
s1 = this.w - this.r;
try {
await this._fill();
} catch (err) {
err.partial = slice;
throw err;
}
}
return slice;
}
async peek(n) {
if (n < 0) {
throw Error("negative count");
}
let avail = this.w - this.r;
while(avail < n && avail < this.buf.byteLength && !this.eof){
try {
await this._fill();
} catch (err) {
err.partial = this.buf.subarray(this.r, this.w);
throw err;
}
avail = this.w - this.r;
}
if (avail === 0 && this.eof) {
return null;
} else if (avail < n && this.eof) {
return this.buf.subarray(this.r, this.r + avail);
} else if (avail < n) {
throw new BufferFullError(this.buf.subarray(this.r, this.w));
}
return this.buf.subarray(this.r, this.r + n);
}
}
class AbstractBufBase {
usedBufferBytes = 0;
err = null;
size() {
return this.buf.byteLength;
}
available() {
return this.buf.byteLength - this.usedBufferBytes;
}
buffered() {
return this.usedBufferBytes;
}
}
class BufWriter extends AbstractBufBase {
static create(writer, size = 4096) {
return writer instanceof BufWriter ? writer : new BufWriter(writer, size);
}
constructor(writer1, size2 = 4096){
super();
this.writer = writer1;
if (size2 <= 0) {
size2 = DEFAULT_BUF_SIZE;
}
this.buf = new Uint8Array(size2);
}
reset(w) {
this.err = null;
this.usedBufferBytes = 0;
this.writer = w;
}
async flush() {
if (this.err !== null) throw this.err;
if (this.usedBufferBytes === 0) return;
try {
await Deno.writeAll(this.writer, this.buf.subarray(0, this.usedBufferBytes));
} catch (e) {
this.err = e;
throw e;
}
this.buf = new Uint8Array(this.buf.length);
this.usedBufferBytes = 0;
}
async write(data) {
if (this.err !== null) throw this.err;
if (data.length === 0) return 0;
let totalBytesWritten = 0;
let numBytesWritten = 0;
while(data.byteLength > this.available()){
if (this.buffered() === 0) {
try {
numBytesWritten = await this.writer.write(data);
} catch (e) {
this.err = e;
throw e;
}
} else {
numBytesWritten = copyBytes(data, this.buf, this.usedBufferBytes);
this.usedBufferBytes += numBytesWritten;
await this.flush();
}
totalBytesWritten += numBytesWritten;
data = data.subarray(numBytesWritten);
}
numBytesWritten = copyBytes(data, this.buf, this.usedBufferBytes);
this.usedBufferBytes += numBytesWritten;
totalBytesWritten += numBytesWritten;
return totalBytesWritten;
}
}
class BufWriterSync extends AbstractBufBase {
static create(writer, size = 4096) {
return writer instanceof BufWriterSync ? writer : new BufWriterSync(writer, size);
}
constructor(writer2, size3 = 4096){
super();
this.writer = writer2;
if (size3 <= 0) {
size3 = DEFAULT_BUF_SIZE;
}
this.buf = new Uint8Array(size3);
}
reset(w) {
this.err = null;
this.usedBufferBytes = 0;
this.writer = w;
}
flush() {
if (this.err !== null) throw this.err;
if (this.usedBufferBytes === 0) return;
try {
Deno.writeAllSync(this.writer, this.buf.subarray(0, this.usedBufferBytes));
} catch (e) {
this.err = e;
throw e;
}
this.buf = new Uint8Array(this.buf.length);
this.usedBufferBytes = 0;
}
writeSync(data) {
if (this.err !== null) throw this.err;
if (data.length === 0) return 0;
let totalBytesWritten = 0;
let numBytesWritten = 0;
while(data.byteLength > this.available()){
if (this.buffered() === 0) {
try {
numBytesWritten = this.writer.writeSync(data);
} catch (e) {
this.err = e;
throw e;
}
} else {
numBytesWritten = copyBytes(data, this.buf, this.usedBufferBytes);
this.usedBufferBytes += numBytesWritten;
this.flush();
}
totalBytesWritten += numBytesWritten;
data = data.subarray(numBytesWritten);
}
numBytesWritten = copyBytes(data, this.buf, this.usedBufferBytes);
this.usedBufferBytes += numBytesWritten;
totalBytesWritten += numBytesWritten;
return totalBytesWritten;
}
}
class RedisConnection {
name = null;
maxRetryCount = 0;
retryInterval = 1200;
retryCount = 0;
_isClosed = false;
_isConnected = false;
get isClosed() {
return this._isClosed;
}
get isConnected() {
return this._isConnected;
}
get isRetriable() {
return this.maxRetryCount > 0;
}
constructor(hostname1, port1, options7){
this.options = options7;
this.connectThunkified = this.thunkifyConnect(hostname1, port1, options7);
}
thunkifyConnect(hostname, port, options) {
return async ()=>{
const dialOpts = {
hostname,
port: parsePortLike(port)
};
const conn = options?.tls ? await Deno.connectTls(dialOpts) : await Deno.connect(dialOpts);
if (options.name) {
this.name = options.name;
}
if (options.maxRetryCount) {
this.maxRetryCount = options.maxRetryCount;
}
if (options.retryInterval) {
this.retryInterval = options.retryInterval;
}
this.closer = conn;
this.reader = new BufReader(conn);
this.writer = new BufWriter(conn);
this._isClosed = false;
this._isConnected = true;
try {
if (options?.password != null) {
await this.authenticate(options.password);
}
if (options?.db) {
await this.selectDb(options.db);
}
} catch (error2) {
this.close();
throw error2;
}
return this;
};
}
authenticate(password) {
return sendCommand(this.writer, this.reader, "AUTH", password);
}
selectDb(db = this.options.db) {
if (!db) throw new Error("The database index is undefined.");
return sendCommand(this.writer, this.reader, "SELECT", db);
}
async connect() {
await this.connectThunkified();
}
close() {
this._isClosed = true;
this._isConnected = false;
try {
this.closer.close();
} catch (error2) {
if (!(error2 instanceof Deno.errors.BadResource)) throw error2;
}
}
async reconnect() {
if (!this.reader.peek(1)) {
throw new Error("Client is closed.");
}
try {
await sendCommand(this.writer, this.reader, "PING");
this._isConnected = true;
} catch (error2) {
this._isConnected = false;
return new Promise((resolve3, reject)=>{
const interval = setInterval(async ()=>{
if (this.retryCount > this.maxRetryCount) {
this.close();
clearInterval(interval);
reject(new Error("Could not reconnect"));
}
try {
this.close();
await this.connect();
await sendCommand(this.writer, this.reader, "PING");
this._isConnected = true;
this.retryCount = 0;
clearInterval(interval);
resolve3();
} catch (err) {
} finally{
this.retryCount++;
}
}, this.retryInterval);
});
}
}
forceRetry() {
this.maxRetryCount = 10;
}
}
function parsePortLike(port2) {
let parsedPort;
if (typeof port2 === "string") {
parsedPort = parseInt(port2);
} else if (typeof port2 === "number") {
parsedPort = port2;
} else {
parsedPort = 6379;
}
if (!Number.isSafeInteger(parsedPort)) {
throw new Error("Port is invalid");
}
return parsedPort;
}
class CommandExecutor {
constructor(connection){
this.connection = connection;
}
}
class MuxExecutor extends CommandExecutor {
queue = [];
exec(command, ...args) {
const d = deferred();
this.queue.push({
command,
args,
d
});
if (this.queue.length === 1) {
this.dequeue();
}
return d;
}
dequeue() {
const [e] = this.queue;
if (!e) return;
sendCommand(this.connection.writer, this.connection.reader, e.command, ...e.args).then(e.d.resolve).catch(async (error2)=>{
if (this.connection.maxRetryCount > 0 && (error2 instanceof Deno.errors.BadResource && !this.connection.isClosed || error2 instanceof Deno.errors.BrokenPipe || error2 instanceof Deno.errors.ConnectionAborted || error2 instanceof Deno.errors.ConnectionRefused || error2 instanceof Deno.errors.ConnectionReset || error2 instanceof EOFError)) {
await this.connection.reconnect();
} else e.d.reject(error2);
}).finally(()=>{
this.queue.shift();
this.dequeue();
});
}
}
class RedisSubscriptionImpl {
get isConnected() {
return this.connection.isConnected;
}
get isClosed() {
return this.connection.isClosed;
}
channels = Object.create(null);
patterns = Object.create(null);
constructor(connection1){
this.connection = connection1;
if (!connection1.isRetriable) connection1.forceRetry();
}
async psubscribe(...patterns) {
await sendCommand(this.connection.writer, this.connection.reader, "PSUBSCRIBE", ...patterns);
for (const pat of patterns){
this.patterns[pat] = true;
}
}
async punsubscribe(...patterns) {
await sendCommand(this.connection.writer, this.connection.reader, "PUNSUBSCRIBE", ...patterns);
for (const pat of patterns){
delete this.patterns[pat];
}
}
async subscribe(...channels) {
await sendCommand(this.connection.writer, this.connection.reader, "SUBSCRIBE", ...channels);
for (const chan of channels){
this.channels[chan] = true;
}
}
async unsubscribe(...channels) {
await sendCommand(this.connection.writer, this.connection.reader, "UNSUBSCRIBE", ...channels);
for (const chan of channels){
delete this.channels[chan];
}
}
async *receive() {
let forceReconnect = false;
while(this.isConnected){
try {
let rep;
try {
rep = await readArrayReply(this.connection.reader);
} catch (err) {
if (err instanceof Deno.errors.BadResource) {
this.connection.close();
break;
}
throw err;
}
const ev = rep[0];
if (ev === "message" && rep.length === 3) {
yield {
channel: rep[1],
message: rep[2]
};
} else if (ev === "pmessage" && rep.length === 4) {
yield {
pattern: rep[1],
channel: rep[2],
message: rep[3]
};
}
} catch (error2) {
if (error2 instanceof InvalidStateError || error2 instanceof Deno.errors.BadResource) {
forceReconnect = true;
} else throw error2;
} finally{
if (!this.isClosed && !this.isConnected || forceReconnect) {
await this.connection.reconnect();
forceReconnect = false;
if (Object.keys(this.channels).length > 0) {
await this.subscribe(...Object.keys(this.channels));
}
if (Object.keys(this.patterns).length > 0) {
await this.psubscribe(...Object.keys(this.patterns));
}
}
}
}
}
async close() {
try {
await this.unsubscribe(...Object.keys(this.channels));
await this.punsubscribe(...Object.keys(this.patterns));
} finally{
this.connection.close();
}
}
}
async function subscribe(connection2, ...channels) {
const sub = new RedisSubscriptionImpl(connection2);
await sub.subscribe(...channels);
return sub;
}
async function psubscribe(connection2, ...patterns) {
const sub = new RedisSubscriptionImpl(connection2);
await sub.psubscribe(...patterns);
return sub;
}
function parseXMessage(raw) {
const fieldValues = new Map();
let f = undefined;
let m1 = 0;
for (const data31 of raw[1]){
if (m1 % 2 === 0) {
f = data31;
} else if (f) {
fieldValues.set(f, data31);
}
m1++;
}
return {
xid: parseXId(raw[0]),
field_values: fieldValues
};
}
function convertMap(raw) {
const fieldValues = new Map();
let f = undefined;
let m1 = 0;
for (const data31 of raw){
if (m1 % 2 === 0 && typeof data31 === "string") {
f = data31;
} else if (m1 % 2 === 1 && f) {
fieldValues.set(f, data31);
}
m1++;
}
return fieldValues;
}
function parseXReadReply(raw) {
const out = [];
for (const [key, idData] of raw){
const messages = [];
for (const rawMsg of idData){
messages.push(parseXMessage(rawMsg));
}
out.push({
key,
messages
});
}
return out;
}
function parseXId(raw) {
const [ms, sn] = raw.split("-");
return {
unixMs: parseInt(ms),
seqNo: parseInt(sn)
};
}
function parseXPendingConsumers(raws) {
const out = [];
for (const raw of raws){
if (isCondArray(raw) && isString(raw[0]) && isString(raw[1])) {
out.push({
name: raw[0],
pending: parseInt(raw[1])
});
}
}
return out;
}
function parseXPendingCounts(raw) {
const infos = [];
for (const r2 of raw){
if (isCondArray(r2) && isString(r2[0]) && isString(r2[1]) && isNumber(r2[2]) && isNumber(r2[3])) {
infos.push({
xid: parseXId(r2[0]),
owner: r2[1],
lastDeliveredMs: r2[2],
timesDelivered: r2[3]
});
}
}
return infos;
}
function parseXGroupDetail(rawGroups) {
const out = [];
for (const rawGroup of rawGroups){
if (isCondArray(rawGroup)) {
const data31 = convertMap(rawGroup);
const consDeets = data31.get("consumers");
out.push({
name: rawstr(data31.get("name")),
lastDeliveredId: parseXId(rawstr(data31.get("last-delivered-id"))),
pelCount: rawnum(data31.get("pel-count")),
pending: parseXPendingCounts(data31.get("pending")),
consumers: parseXConsumerDetail(consDeets)
});
}
}
return out;
}
function parseXConsumerDetail(nestedRaws) {
const out = [];
for (const raws of nestedRaws){
const data31 = convertMap(raws);
const pending = data31.get("pending").map((p)=>{
return {
xid: parseXId(rawstr(p[0])),
lastDeliveredMs: rawnum(p[1]),
timesDelivered: rawnum(p[2])
};
});
const r2 = {
name: rawstr(data31.get("name")),
seenTime: rawnum(data31.get("seen-time")),
pelCount: rawnum(data31.get("pel-count")),
pending
};
out.push(r2);
}
return out;
}
function xidstr(xid) {
if (typeof xid === "string") return xid;
if (typeof xid === "number") return `${xid}-0`;
if (xid instanceof Array && xid.length > 1) return `${xid[0]}-${xid[1]}`;
if (isXId(xid)) return `${xid.unixMs}-${xid.seqNo}`;
throw "fail";
}
function rawnum(raw) {
return raw ? +raw.toString() : 0;
}
function rawstr(raw) {
return raw ? raw.toString() : "";
}
function isString(x2) {
return typeof x2 === "string";
}
function isNumber(x2) {
return typeof x2 === "number";
}
function isCondArray(x2) {
const l2 = x2.length;
if (l2 > 0 || l2 < 1) return true;
else return false;
}
function isXId(xid) {
return xid.unixMs !== undefined;
}
function createRedisPipeline(connection2, tx = false) {
const executor = new PipelineExecutor(connection2, tx);
function flush() {
return executor.flush();
}
const client58 = new RedisImpl(connection2, executor);
return Object.assign(client58, {
flush
});
}
class RedisImpl {
get isClosed() {
return this.connection.isClosed;
}
get isConnected() {
return this.connection.isConnected;
}
constructor(connection2, executor){
this.connection = connection2;
this.executor = executor;
}
close() {
this.connection.close();
}
async execStatusReply(command, ...args) {
const [_, reply] = await this.executor.exec(command, ...args);
return reply;
}
async execIntegerReply(command, ...args) {
const [_, reply] = await this.executor.exec(command, ...args);
return reply;
}
async execBulkReply(command, ...args) {
const [_, reply] = await this.executor.exec(command, ...args);
return reply;
}
async execArrayReply(command, ...args) {
const [_, reply] = await this.executor.exec(command, ...args);
return reply;
}
async execIntegerOrNilReply(command, ...args) {
const [_, reply] = await this.executor.exec(command, ...args);
return reply;
}
async execStatusOrNilReply(command, ...args) {
const [_, reply] = await this.executor.exec(command, ...args);
return reply;
}
acl_cat(categoryname) {
if (categoryname !== undefined) {
return this.execArrayReply("ACL", "CAT", categoryname);
}
return this.execArrayReply("ACL", "CAT");
}
acl_deluser(...usernames) {
return this.execIntegerReply("ACL", "DELUSER", ...usernames);
}
acl_genpass(bits) {
if (bits !== undefined) {
return this.execBulkReply("ACL", "GENPASS", bits);
}
return this.execBulkReply("ACL", "GENPASS");
}
acl_getuser(username) {
return this.execArrayReply("ACL", "GETUSER", username);
}
acl_help() {
return this.execArrayReply("ACL", "HELP");
}
acl_list() {
return this.execArrayReply("ACL", "LIST");
}
acl_load() {
return this.execStatusReply("ACL", "LOAD");
}
acl_log(param) {
if (param === "RESET") {
return this.execStatusReply("ACL", "LOG", "RESET");
}
return this.execArrayReply("ACL", "LOG", param);
}
acl_save() {
return this.execStatusReply("ACL", "SAVE");
}
acl_setuser(username, ...rules) {
return this.execStatusReply("ACL", "SETUSER", username, ...rules);
}
acl_users() {
return this.execArrayReply("ACL", "USERS");
}
acl_whoami() {
return this.execBulkReply("ACL", "WHOAMI");
}
append(key, value) {
return this.execIntegerReply("APPEND", key, value);
}
auth(param1, param2) {
if (param2 !== undefined) {
return this.execStatusReply("AUTH", param1, param2);
}
return this.execStatusReply("AUTH", param1);
}
bgrewriteaof() {
return this.execStatusReply("BGREWRITEAOF");
}
bgsave() {
return this.execStatusReply("BGSAVE");
}
bitcount(key, start, end) {
if (start !== undefined && end !== undefined) {
return this.execIntegerReply("BITCOUNT", key, start, end);
}
return this.execIntegerReply("BITCOUNT", key);
}
bitfield(key, opts) {
const args = [
key
];
if (opts?.get) {
const { type , offset } = opts.get;
args.push("GET", type, offset);
}
if (opts?.set) {
const { type , offset , value } = opts.set;
args.push("SET", type, offset, value);
}
if (opts?.incrby) {
const { type , offset , increment } = opts.incrby;
args.push("INCRBY", type, offset, increment);
}
if (opts?.overflow) {
args.push("OVERFLOW", opts.overflow);
}
return this.execArrayReply("BITFIELD", ...args);
}
bitop(operation, destkey, ...keys) {
return this.execIntegerReply("BITOP", operation, destkey, ...keys);
}
bitpos(key, bit, start, end) {
if (start !== undefined && end !== undefined) {
return this.execIntegerReply("BITPOS", key, bit, start, end);
}
if (start !== undefined) {
return this.execIntegerReply("BITPOS", key, bit, start);
}
return this.execIntegerReply("BITPOS", key, bit);
}
blpop(timeout, ...keys) {
return this.execArrayReply("BLPOP", ...keys, timeout);
}
brpop(timeout, ...keys) {
return this.execArrayReply("BRPOP", ...keys, timeout);
}
brpoplpush(source, destination, timeout) {
return this.execBulkReply("BRPOPLPUSH", source, destination, timeout);
}
bzpopmin(timeout, ...keys) {
return this.execArrayReply("BZPOPMIN", ...keys, timeout);
}
bzpopmax(timeout, ...keys) {
return this.execArrayReply("BZPOPMAX", ...keys, timeout);
}
cluster_addslots(...slots) {
return this.execStatusReply("CLUSTER", "ADDSLOTS", ...slots);
}
cluster_countfailurereports(nodeId) {
return this.execIntegerReply("CLUSTER", "COUNT-FAILURE-REPORTS", nodeId);
}
cluster_countkeysinslot(slot) {
return this.execIntegerReply("CLUSTER", "COUNTKEYSINSLOT", slot);
}
cluster_delslots(...slots) {
return this.execStatusReply("CLUSTER", "DELSLOTS", ...slots);
}
cluster_failover(mode) {
if (mode) {
return this.execStatusReply("CLUSTER", "FAILOVER", mode);
}
return this.execStatusReply("CLUSTER", "FAILOVER");
}
cluster_flushslots() {
return this.execStatusReply("CLUSTER", "FLUSHSLOTS");
}
cluster_forget(nodeId) {
return this.execStatusReply("CLUSTER", "FORGET", nodeId);
}
cluster_getkeysinslot(slot, count) {
return this.execArrayReply("CLUSTER", "GETKEYSINSLOT", slot, count);
}
cluster_info() {
return this.execStatusReply("CLUSTER", "INFO");
}
cluster_keyslot(key) {
return this.execIntegerReply("CLUSTER", "KEYSLOT", key);
}
cluster_meet(ip, port) {
return this.execStatusReply("CLUSTER", "MEET", ip, port);
}
cluster_myid() {
return this.execStatusReply("CLUSTER", "MYID");
}
cluster_nodes() {
return this.execBulkReply("CLUSTER", "NODES");
}
cluster_replicas(nodeId) {
return this.execArrayReply("CLUSTER", "REPLICAS", nodeId);
}
cluster_replicate(nodeId) {
return this.execStatusReply("CLUSTER", "REPLICATE", nodeId);
}
cluster_reset(mode) {
if (mode) {
return this.execStatusReply("CLUSTER", "RESET", mode);
}
return this.execStatusReply("CLUSTER", "RESET");
}
cluster_saveconfig() {
return this.execStatusReply("CLUSTER", "SAVECONFIG");
}
cluster_setslot(slot, subcommand, nodeId) {
if (nodeId !== undefined) {
return this.execStatusReply("CLUSTER", "SETSLOT", slot, subcommand, nodeId);
}
return this.execStatusReply("CLUSTER", "SETSLOT", slot, subcommand);
}
cluster_slaves(nodeId) {
return this.execArrayReply("CLUSTER", "SLAVES", nodeId);
}
cluster_slots() {
return this.execArrayReply("CLUSTER", "SLOTS");
}
command() {
return this.execArrayReply("COMMAND");
}
command_count() {
return this.execIntegerReply("COMMAND", "COUNT");
}
command_getkeys() {
return this.execArrayReply("COMMAND", "GETKEYS");
}
command_info(...commandNames) {
return this.execArrayReply("COMMAND", "INFO", ...commandNames);
}
config_get(parameter) {
return this.execArrayReply("CONFIG", "GET", parameter);
}
config_resetstat() {
return this.execStatusReply("CONFIG", "RESETSTAT");
}
config_rewrite() {
return this.execStatusReply("CONFIG", "REWRITE");
}
config_set(parameter, value) {
return this.execStatusReply("CONFIG", "SET", parameter, value);
}
dbsize() {
return this.execIntegerReply("DBSIZE");
}
debug_object(key) {
return this.execStatusReply("DEBUG", "OBJECT", key);
}
debug_segfault() {
return this.execStatusReply("DEBUG", "SEGFAULT");
}
decr(key) {
return this.execIntegerReply("DECR", key);
}
decrby(key, decrement) {
return this.execIntegerReply("DECRBY", key, decrement);
}
del(...keys) {
return this.execIntegerReply("DEL", ...keys);
}
discard() {
return this.execStatusReply("DISCARD");
}
dump(key) {
return this.execBulkReply("DUMP", key);
}
echo(message) {
return this.execBulkReply("ECHO", message);
}
async eval(script, keys, args) {
const [_, raw] = await this.executor.exec("EVAL", script, keys.length, ...keys, ...args);
return raw;
}
async evalsha(sha1, keys, args) {
const [_, raw] = await this.executor.exec("EVALSHA", sha1, keys.length, ...keys, ...args);
return raw;
}
exec() {
return this.execArrayReply("EXEC");
}
exists(...keys) {
return this.execIntegerReply("EXISTS", ...keys);
}
expire(key, seconds) {
return this.execIntegerReply("EXPIRE", key, seconds);
}
expireat(key, timestamp) {
return this.execIntegerReply("EXPIREAT", key, timestamp);
}
flushall(async) {
if (async) {
return this.execStatusReply("FLUSHALL", "ASYNC");
}
return this.execStatusReply("FLUSHALL");
}
flushdb(async) {
if (async) {
return this.execStatusReply("FLUSHDB", "ASYNC");
}
return this.execStatusReply("FLUSHDB");
}
geoadd(key, ...params) {
const args = [
key
];
if (Array.isArray(params[0])) {
args.push(...params.flatMap((e)=>e
));
} else if (typeof params[0] === "object") {
for (const [member2, lnglat] of Object.entries(params[0])){
args.push(...lnglat, member2);
}
} else {
args.push(...params);
}
return this.execIntegerReply("GEOADD", ...args);
}
geohash(key, ...members) {
return this.execArrayReply("GEOHASH", key, ...members);
}
geopos(key, ...members) {
return this.execArrayReply("GEOPOS", key, ...members);
}
geodist(key, member1, member2, unit) {
if (unit) {
return this.execBulkReply("GEODIST", key, member1, member2, unit);
}
return this.execBulkReply("GEODIST", key, member1, member2);
}
georadius(key, longitude, latitude, radius, unit, opts) {
const args = this.pushGeoRadiusOpts([
key,
longitude,
latitude,
radius,
unit
], opts);
return this.execArrayReply("GEORADIUS", ...args);
}
georadiusbymember(key, member, radius, unit, opts) {
const args = this.pushGeoRadiusOpts([
key,
member,
radius,
unit
], opts);
return this.execArrayReply("GEORADIUSBYMEMBER", ...args);
}
pushGeoRadiusOpts(args, opts) {
if (opts?.with_coord) {
args.push("WITHCOORD");
}
if (opts?.with_dist) {
args.push("WITHDIST");
}
if (opts?.with_hash) {
args.push("WITHHASH");
}
if (opts?.count !== undefined) {
args.push(opts.count);
}
if (opts?.sort) {
args.push(opts.sort);
}
if (opts?.store !== undefined) {
args.push(opts.store);
}
if (opts?.store_dist !== undefined) {
args.push(opts.store_dist);
}
return args;
}
get(key) {
return this.execBulkReply("GET", key);
}
getbit(key, offset) {
return this.execIntegerReply("GETBIT", key, offset);
}
getrange(key, start, end) {
return this.execBulkReply("GETRANGE", key, start, end);
}
getset(key, value) {
return this.execBulkReply("GETSET", key, value);
}
hdel(key, ...fields) {
return this.execIntegerReply("HDEL", key, ...fields);
}
hexists(key, field) {
return this.execIntegerReply("HEXISTS", key, field);
}
hget(key, field) {
return this.execBulkReply("HGET", key, field);
}
hgetall(key) {
return this.execArrayReply("HGETALL", key);
}
hincrby(key, field, increment) {
return this.execIntegerReply("HINCRBY", key, field, increment);
}
hincrbyfloat(key, field, increment) {
return this.execBulkReply("HINCRBYFLOAT", key, field, increment);
}
hkeys(key) {
return this.execArrayReply("HKEYS", key);
}
hlen(key) {
return this.execIntegerReply("HLEN", key);
}
hmget(key, ...fields) {
return this.execArrayReply("HMGET", key, ...fields);
}
hmset(key, ...params) {
const args = [
key
];
if (Array.isArray(params[0])) {
args.push(...params.flatMap((e)=>e
));
} else if (typeof params[0] === "object") {
for (const [field, value] of Object.entries(params[0])){
args.push(field, value);
}
} else {
args.push(...params);
}
return this.execStatusReply("HMSET", ...args);
}
hset(key, ...params) {
const args = [
key
];
if (Array.isArray(params[0])) {
args.push(...params.flatMap((e)=>e
));
} else if (typeof params[0] === "object") {
for (const [field, value] of Object.entries(params[0])){
args.push(field, value);
}
} else {
args.push(...params);
}
return this.execIntegerReply("HSET", ...args);
}
hsetnx(key, field, value) {
return this.execIntegerReply("HSETNX", key, field, value);
}
hstrlen(key, field) {
return this.execIntegerReply("HSTRLEN", key, field);
}
hvals(key) {
return this.execArrayReply("HVALS", key);
}
incr(key) {
return this.execIntegerReply("INCR", key);
}
incrby(key, increment) {
return this.execIntegerReply("INCRBY", key, increment);
}
incrbyfloat(key, increment) {
return this.execBulkReply("INCRBYFLOAT", key, increment);
}
info(section) {
if (section !== undefined) {
return this.execStatusReply("INFO", section);
}
return this.execStatusReply("INFO");
}
keys(pattern) {
return this.execArrayReply("KEYS", pattern);
}
lastsave() {
return this.execIntegerReply("LASTSAVE");
}
lindex(key, index) {
return this.execBulkReply("LINDEX", key, index);
}
linsert(key, loc, pivot, value) {
return this.execIntegerReply("LINSERT", key, loc, pivot, value);
}
llen(key) {
return this.execIntegerReply("LLEN", key);
}
lpop(key) {
return this.execBulkReply("LPOP", key);
}
lpush(key, ...elements) {
return this.execIntegerReply("LPUSH", key, ...elements);
}
lpushx(key, ...elements) {
return this.execIntegerReply("LPUSHX", key, ...elements);
}
lrange(key, start, stop) {
return this.execArrayReply("LRANGE", key, start, stop);
}
lrem(key, count, element) {
return this.execIntegerReply("LREM", key, count, element);
}
lset(key, index, element) {
return this.execStatusReply("LSET", key, index, element);
}
ltrim(key, start, stop) {
return this.execStatusReply("LTRIM", key, start, stop);
}
memory_doctor() {
return this.execBulkReply("MEMORY", "DOCTOR");
}
memory_help() {
return this.execArrayReply("MEMORY", "HELP");
}
memory_malloc_stats() {
return this.execBulkReply("MEMORY", "MALLOC", "STATS");
}
memory_purge() {
return this.execStatusReply("MEMORY", "PURGE");
}
memory_stats() {
return this.execArrayReply("MEMORY", "STATS");
}
memory_usage(key, opts) {
const args = [
key
];
if (opts?.samples !== undefined) {
args.push("SAMPLES", opts.samples);
}
return this.execIntegerReply("MEMORY", "USAGE", ...args);
}
mget(...keys) {
return this.execArrayReply("MGET", ...keys);
}
migrate(host, port, key, destinationDB, timeout, opts) {
const args = [
host,
port,
key,
destinationDB,
timeout
];
if (opts?.copy) {
args.push("COPY");
}
if (opts?.replace) {
args.push("REPLACE");
}
if (opts?.auth !== undefined) {
args.push("AUTH", opts.auth);
}
if (opts?.keys) {
args.push("KEYS", ...opts.keys);
}
return this.execStatusReply("MIGRATE", ...args);
}
module_list() {
return this.execArrayReply("MODULE", "LIST");
}
module_load(path, ...args) {
return this.execStatusReply("MODULE", "LOAD", path, ...args);
}
module_unload(name) {
return this.execStatusReply("MODULE", "UNLOAD", name);
}
monitor() {
throw new Error("not supported yet");
}
move(key, db) {
return this.execIntegerReply("MOVE", key, db);
}
mset(...params) {
const args = [];
if (Array.isArray(params[0])) {
args.push(...params.flatMap((e)=>e
));
} else if (typeof params[0] === "object") {
for (const [key, value] of Object.entries(params[0])){
args.push(key, value);
}
} else {
args.push(...params);
}
return this.execStatusReply("MSET", ...args);
}
msetnx(...params) {
const args = [];
if (Array.isArray(params[0])) {
args.push(...params.flatMap((e)=>e
));
} else if (typeof params[0] === "object") {
for (const [key, value] of Object.entries(params[0])){
args.push(key, value);
}
} else {
args.push(...params);
}
return this.execIntegerReply("MSETNX", ...args);
}
multi() {
return this.execStatusReply("MULTI");
}
object_encoding(key) {
return this.execBulkReply("OBJECT", "ENCODING", key);
}
object_freq(key) {
return this.execIntegerOrNilReply("OBJECT", "FREQ", key);
}
object_help() {
return this.execArrayReply("OBJECT", "HELP");
}
object_idletime(key) {
return this.execIntegerOrNilReply("OBJECT", "IDLETIME", key);
}
object_refcount(key) {
return this.execIntegerOrNilReply("OBJECT", "REFCOUNT", key);
}
persist(key) {
return this.execIntegerReply("PERSIST", key);
}
pexpire(key, milliseconds) {
return this.execIntegerReply("PEXPIRE", key, milliseconds);
}
pexpireat(key, millisecondsTimestamp) {
return this.execIntegerReply("PEXPIREAT", key, millisecondsTimestamp);
}
pfadd(key, ...elements) {
return this.execIntegerReply("PFADD", key, ...elements);
}
pfcount(...keys) {
return this.execIntegerReply("PFCOUNT", ...keys);
}
pfmerge(destkey, ...sourcekeys) {
return this.execStatusReply("PFMERGE", destkey, ...sourcekeys);
}
ping(message) {
if (message) {
return this.execBulkReply("PING", message);
}
return this.execStatusReply("PING");
}
psetex(key, milliseconds, value) {
return this.execStatusReply("PSETEX", key, milliseconds, value);
}
publish(channel, message) {
return this.execIntegerReply("PUBLISH", channel, message);
}
subscribe(...channels) {
return subscribe(this.connection, ...channels);
}
psubscribe(...patterns) {
return psubscribe(this.connection, ...patterns);
}
pubsub_channels(pattern) {
if (pattern !== undefined) {
return this.execArrayReply("PUBSUB", "CHANNELS", pattern);
}
return this.execArrayReply("PUBSUB", "CHANNELS");
}
pubsub_numpat() {
return this.execIntegerReply("PUBSUB", "NUMPAT");
}
pubsub_numsub(...channels) {
return this.execArrayReply("PUBSUB", "NUMSUBS", ...channels);
}
pttl(key) {
return this.execIntegerReply("PTTL", key);
}
quit() {
return this.execStatusReply("QUIT").finally(()=>this.close()
);
}
randomkey() {
return this.execBulkReply("RANDOMKEY");
}
readonly() {
return this.execStatusReply("READONLY");
}
readwrite() {
return this.execStatusReply("READWRITE");
}
rename(key, newkey) {
return this.execStatusReply("RENAME", key, newkey);
}
renamenx(key, newkey) {
return this.execIntegerReply("RENAMENX", key, newkey);
}
restore(key, ttl, serializedValue, opts) {
const args = [
key,
ttl,
serializedValue
];
if (opts?.replace) {
args.push("REPLACE");
}
if (opts?.absttl) {
args.push("ABSTTL");
}
if (opts?.idletime !== undefined) {
args.push("IDLETIME", opts.idletime);
}
if (opts?.freq !== undefined) {
args.push("FREQ", opts.freq);
}
return this.execStatusReply("RESTORE", ...args);
}
role() {
return this.execArrayReply("ROLE");
}
rpop(key) {
return this.execBulkReply("RPOP", key);
}
rpoplpush(source, destination) {
return this.execBulkReply("RPOPLPUSH", source, destination);
}
rpush(key, ...elements) {
return this.execIntegerReply("RPUSH", key, ...elements);
}
rpushx(key, ...elements) {
return this.execIntegerReply("RPUSHX", key, ...elements);
}
sadd(key, ...members) {
return this.execIntegerReply("SADD", key, ...members);
}
save() {
return this.execStatusReply("SAVE");
}
scard(key) {
return this.execIntegerReply("SCARD", key);
}
script_debug(mode) {
return this.execStatusReply("SCRIPT", "DEBUG", mode);
}
script_exists(...sha1s) {
return this.execArrayReply("SCRIPT", "EXISTS", ...sha1s);
}
script_flush() {
return this.execStatusReply("SCRIPT", "FLUSH");
}
script_kill() {
return this.execStatusReply("SCRIPT", "KILL");
}
script_load(script) {
return this.execStatusReply("SCRIPT", "LOAD", script);
}
sdiff(...keys) {
return this.execArrayReply("SDIFF", ...keys);
}
sdiffstore(destination, ...keys) {
return this.execIntegerReply("SDIFFSTORE", destination, ...keys);
}
select(index) {
return this.execStatusReply("SELECT", index);
}
set(key, value, opts) {
const args = [
key,
value
];
if (opts?.ex !== undefined) {
args.push("EX", opts.ex);
} else if (opts?.px !== undefined) {
args.push("PX", opts.px);
}
if (opts?.keepttl) {
args.push("KEEPTTL");
}
if (opts?.mode) {
args.push(opts.mode);
return this.execStatusOrNilReply("SET", ...args);
}
return this.execStatusReply("SET", ...args);
}
setbit(key, offset, value) {
return this.execIntegerReply("SETBIT", key, offset, value);
}
setex(key, seconds, value) {
return this.execStatusReply("SETEX", key, seconds, value);
}
setnx(key, value) {
return this.execIntegerReply("SETNX", key, value);
}
setrange(key, offset, value) {
return this.execIntegerReply("SETRANGE", key, offset, value);
}
shutdown(mode) {
if (mode) {
return this.execStatusReply("SHUTDOWN", mode);
}
return this.execStatusReply("SHUTDOWN");
}
sinter(...keys) {
return this.execArrayReply("SINTER", ...keys);
}
sinterstore(destination, ...keys) {
return this.execIntegerReply("SINTERSTORE", destination, ...keys);
}
sismember(key, member) {
return this.execIntegerReply("SISMEMBER", key, member);
}
slaveof(host, port) {
return this.execStatusReply("SLAVEOF", host, port);
}
slaveof_no_one() {
return this.execStatusReply("SLAVEOF", "NO ONE");
}
replicaof(host, port) {
return this.execStatusReply("REPLICAOF", host, port);
}
replicaof_no_one() {
return this.execStatusReply("REPLICAOF", "NO ONE");
}
slowlog(subcommand, ...args) {
return this.execArrayReply("SLOWLOG", subcommand, ...args);
}
smembers(key) {
return this.execArrayReply("SMEMBERS", key);
}
smove(source, destination, member) {
return this.execIntegerReply("SMOVE", source, destination, member);
}
sort(key, opts) {
const args = [
key
];
if (opts?.by !== undefined) {
args.push("BY", opts.by);
}
if (opts?.limit) {
args.push("LIMIT", opts.limit.offset, opts.limit.count);
}
if (opts?.patterns) {
args.push("GET", ...opts.patterns);
}
if (opts?.order) {
args.push(opts.order);
}
if (opts?.alpha) {
args.push("ALPHA");
}
if (opts?.destination !== undefined) {
args.push("STORE", opts.destination);
return this.execIntegerReply("SORT", ...args);
}
return this.execArrayReply("SORT", ...args);
}
spop(key, count) {
if (count !== undefined) {
return this.execArrayReply("SPOP", key, count);
}
return this.execBulkReply("SPOP", key);
}
srandmember(key, count) {
if (count !== undefined) {
return this.execArrayReply("SRANDMEMBER", key, count);
}
return this.execBulkReply("SRANDMEMBER", key);
}
srem(key, ...members) {
return this.execIntegerReply("SREM", key, ...members);
}
stralgo(algorithm, target, a, b, opts) {
const args = [];
if (opts?.idx) {
args.push("IDX");
}
if (opts?.len) {
args.push("LEN");
}
if (opts?.withmatchlen) {
args.push("WITHMATCHLEN");
}
if (opts?.minmatchlen) {
args.push("MINMATCHLEN");
args.push(opts.minmatchlen);
}
return this.execBulkReply("STRALGO", "LCS", target, a, b, ...args);
}
strlen(key) {
return this.execIntegerReply("STRLEN", key);
}
sunion(...keys) {
return this.execArrayReply("SUNION", ...keys);
}
sunionstore(destination, ...keys) {
return this.execIntegerReply("SUNIONSTORE", destination, ...keys);
}
swapdb(index1, index2) {
return this.execStatusReply("SWAPDB", index1, index2);
}
sync() {
throw new Error("not implemented");
}
time() {
return this.execArrayReply("TIME");
}
touch(...keys) {
return this.execIntegerReply("TOUCH", ...keys);
}
ttl(key) {
return this.execIntegerReply("TTL", key);
}
type(key) {
return this.execStatusReply("TYPE", key);
}
unlink(...keys) {
return this.execIntegerReply("UNLINK", ...keys);
}
unwatch() {
return this.execStatusReply("UNWATCH");
}
wait(numreplicas, timeout) {
return this.execIntegerReply("WAIT", numreplicas, timeout);
}
watch(...keys) {
return this.execStatusReply("WATCH", ...keys);
}
xack(key, group, ...xids) {
return this.execIntegerReply("XACK", key, group, ...xids.map((xid)=>xidstr(xid)
));
}
xadd(key, xid, fieldValues, maxlen = undefined) {
const args = [
key
];
if (maxlen) {
args.push("MAXLEN");
if (maxlen.approx) {
args.push("~");
}
args.push(maxlen.elements.toString());
}
args.push(xidstr(xid));
if (fieldValues instanceof Map) {
for (const [f, v] of fieldValues){
args.push(f);
args.push(v);
}
} else {
for (const [f, v] of Object.entries(fieldValues)){
args.push(f);
args.push(v);
}
}
return this.execBulkReply("XADD", ...args).then((rawId)=>parseXId(rawId)
);
}
xclaim(key, opts, ...xids) {
const args = [];
if (opts.idle) {
args.push("IDLE");
args.push(opts.idle);
}
if (opts.time) {
args.push("TIME");
args.push(opts.time);
}
if (opts.retryCount) {
args.push("RETRYCOUNT");
args.push(opts.retryCount);
}
if (opts.force) {
args.push("FORCE");
}
if (opts.justXId) {
args.push("JUSTID");
}
return this.execArrayReply("XCLAIM", key, opts.group, opts.consumer, opts.minIdleTime, ...xids.map((xid)=>xidstr(xid)
), ...args).then((raw)=>{
if (opts.justXId) {
const xids = [];
for (const r2 of raw){
if (typeof r2 === "string") {
xids.push(parseXId(r2));
}
}
const payload = {
kind: "justxid",
xids
};
return payload;
}
const messages = [];
for (const r2 of raw){
if (typeof r2 !== "string") {
messages.push(parseXMessage(r2));
}
}
const payload = {
kind: "messages",
messages
};
return payload;
});
}
xdel(key, ...xids) {
return this.execIntegerReply("XDEL", key, ...xids.map((rawId)=>xidstr(rawId)
));
}
xlen(key) {
return this.execIntegerReply("XLEN", key);
}
xgroup_create(key, groupName, xid, mkstream) {
const args = [];
if (mkstream) {
args.push("MKSTREAM");
}
return this.execStatusReply("XGROUP", "CREATE", key, groupName, xidstr(xid), ...args);
}
xgroup_delconsumer(key, groupName, consumerName) {
return this.execIntegerReply("XGROUP", "DELCONSUMER", key, groupName, consumerName);
}
xgroup_destroy(key, groupName) {
return this.execIntegerReply("XGROUP", "DESTROY", key, groupName);
}
xgroup_help() {
return this.execBulkReply("XGROUP", "HELP");
}
xgroup_setid(key, groupName, xid) {
return this.execStatusReply("XGROUP", "SETID", key, groupName, xidstr(xid));
}
xinfo_stream(key) {
return this.execArrayReply("XINFO", "STREAM", key).then((raw)=>{
const data31 = convertMap(raw);
const firstEntry = parseXMessage(data31.get("first-entry"));
const lastEntry = parseXMessage(data31.get("last-entry"));
return {
length: rawnum(data31.get("length")),
radixTreeKeys: rawnum(data31.get("radix-tree-keys")),
radixTreeNodes: rawnum(data31.get("radix-tree-nodes")),
groups: rawnum(data31.get("groups")),
lastGeneratedId: parseXId(rawstr(data31.get("last-generated-id"))),
firstEntry,
lastEntry
};
});
}
xinfo_stream_full(key, count) {
const args = [];
if (count) {
args.push("COUNT");
args.push(count);
}
return this.execArrayReply("XINFO", "STREAM", key, "FULL", ...args).then((raw)=>{
if (raw === undefined) throw "no data";
const data31 = convertMap(raw);
if (data31 === undefined) throw "no data converted";
const entries = data31.get("entries").map((raw1)=>parseXMessage(raw1)
);
return {
length: rawnum(data31.get("length")),
radixTreeKeys: rawnum(data31.get("radix-tree-keys")),
radixTreeNodes: rawnum(data31.get("radix-tree-nodes")),
lastGeneratedId: parseXId(rawstr(data31.get("last-generated-id"))),
entries,
groups: parseXGroupDetail(data31.get("groups"))
};
});
}
xinfo_groups(key) {
return this.execArrayReply("XINFO", "GROUPS", key).then((raws)=>raws.map((raw)=>{
const data31 = convertMap(raw);
return {
name: rawstr(data31.get("name")),
consumers: rawnum(data31.get("consumers")),
pending: rawnum(data31.get("pending")),
lastDeliveredId: parseXId(rawstr(data31.get("last-delivered-id")))
};
})
);
}
xinfo_consumers(key, group) {
return this.execArrayReply("XINFO", "CONSUMERS", key, group).then((raws)=>raws.map((raw)=>{
const data31 = convertMap(raw);
return {
name: rawstr(data31.get("name")),
pending: rawnum(data31.get("pending")),
idle: rawnum(data31.get("idle"))
};
})
);
}
xpending(key, group) {
return this.execArrayReply("XPENDING", key, group).then((raw)=>{
if (isNumber(raw[0]) && isString(raw[1]) && isString(raw[2]) && isCondArray(raw[3])) {
return {
count: raw[0],
startId: parseXId(raw[1]),
endId: parseXId(raw[2]),
consumers: parseXPendingConsumers(raw[3])
};
} else {
throw "parse err";
}
});
}
xpending_count(key, group, startEndCount, consumer) {
const args = [];
args.push(startEndCount.start);
args.push(startEndCount.end);
args.push(startEndCount.count);
if (consumer) {
args.push(consumer);
}
return this.execArrayReply("XPENDING", key, group, ...args).then((raw)=>parseXPendingCounts(raw)
);
}
xrange(key, start, end, count) {
const args = [
key,
xidstr(start),
xidstr(end)
];
if (count) {
args.push("COUNT");
args.push(count);
}
return this.execArrayReply("XRANGE", ...args).then((raw)=>raw.map((m1)=>parseXMessage(m1)
)
);
}
xrevrange(key, start, end, count) {
const args = [
key,
xidstr(start),
xidstr(end)
];
if (count) {
args.push("COUNT");
args.push(count);
}
return this.execArrayReply("XREVRANGE", ...args).then((raw)=>raw.map((m1)=>parseXMessage(m1)
)
);
}
xread(keyXIds, opts) {
const args = [];
if (opts) {
if (opts.count) {
args.push("COUNT");
args.push(opts.count);
}
if (opts.block) {
args.push("BLOCK");
args.push(opts.block);
}
}
args.push("STREAMS");
const theKeys = [];
const theXIds = [];
for (const a of keyXIds){
if (a instanceof Array) {
theKeys.push(a[0]);
theXIds.push(xidstr(a[1]));
} else {
theKeys.push(a.key);
theXIds.push(xidstr(a.xid));
}
}
return this.execArrayReply("XREAD", ...args.concat(theKeys).concat(theXIds)).then((raw)=>parseXReadReply(raw)
);
}
xreadgroup(keyXIds, { group , consumer , count , block }) {
const args = [
"GROUP",
group,
consumer,
];
if (count) {
args.push("COUNT");
args.push(count);
}
if (block) {
args.push("BLOCK");
args.push(block);
}
args.push("STREAMS");
const theKeys = [];
const theXIds = [];
for (const a of keyXIds){
if (a instanceof Array) {
theKeys.push(a[0]);
theXIds.push(a[1] === ">" ? ">" : xidstr(a[1]));
} else {
theKeys.push(a.key);
theXIds.push(a.xid === ">" ? ">" : xidstr(a.xid));
}
}
return this.execArrayReply("XREADGROUP", ...args.concat(theKeys).concat(theXIds)).then((raw)=>parseXReadReply(raw)
);
}
xtrim(key, maxlen) {
const args = [];
if (maxlen.approx) {
args.push("~");
}
args.push(maxlen.elements);
return this.execIntegerReply("XTRIM", key, "MAXLEN", ...args);
}
zadd(key, param1, param2, opts) {
const args = [
key
];
if (Array.isArray(param1)) {
args.push(...param1.flatMap((e)=>e
));
opts = param2;
} else if (typeof param1 === "object") {
for (const [member2, score] of Object.entries(param1)){
args.push(score, member2);
}
opts = param2;
} else {
args.push(param1, param2);
}
if (opts?.mode) {
args.push(opts.mode);
}
if (opts?.ch) {
args.push("CH");
}
return this.execIntegerReply("ZADD", ...args);
}
zadd_incr(key, score, member, opts) {
const args = [
key,
score,
member
];
if (opts?.mode) {
args.push(opts.mode);
}
if (opts?.ch) {
args.push("CH");
}
args.push("INCR");
return this.execBulkReply("ZADD", ...args);
}
zcard(key) {
return this.execIntegerReply("ZCARD", key);
}
zcount(key, min, max) {
return this.execIntegerReply("ZCOUNT", key, min, max);
}
zincrby(key, increment, member) {
return this.execBulkReply("ZINCRBY", key, increment, member);
}
zinterstore(destination, keys, opts) {
const args = this.pushZStoreArgs([
destination
], keys, opts);
return this.execIntegerReply("ZINTERSTORE", ...args);
}
zunionstore(destination, keys, opts) {
const args = this.pushZStoreArgs([
destination
], keys, opts);
return this.execIntegerReply("ZUNIONSTORE", ...args);
}
pushZStoreArgs(args, keys, opts) {
if (Array.isArray(keys)) {
args.push(keys.length);
if (Array.isArray(keys[0])) {
keys = keys;
args.push(...keys.map((e)=>e[0]
));
args.push("WEIGHTS");
args.push(...keys.map((e)=>e[1]
));
} else {
args.push(...keys);
}
} else {
args.push(Object.keys(keys).length);
args.push(...Object.keys(keys));
args.push("WEIGHTS");
args.push(...Object.values(keys));
}
if (opts?.aggregate) {
args.push("AGGREGATE", opts.aggregate);
}
return args;
}
zlexcount(key, min, max) {
return this.execIntegerReply("ZLEXCOUNT", key, min, max);
}
zpopmax(key, count) {
if (count !== undefined) {
return this.execArrayReply("ZPOPMAX", key, count);
}
return this.execArrayReply("ZPOPMAX", key);
}
zpopmin(key, count) {
if (count !== undefined) {
return this.execArrayReply("ZPOPMIN", key, count);
}
return this.execArrayReply("ZPOPMIN", key);
}
zrange(key, start, stop, opts) {
const args = this.pushZRangeOpts([
key,
start,
stop
], opts);
return this.execArrayReply("ZRANGE", ...args);
}
zrangebylex(key, min, max, opts) {
const args = this.pushZRangeOpts([
key,
min,
max
], opts);
return this.execArrayReply("ZRANGEBYLEX", ...args);
}
zrangebyscore(key, min, max, opts) {
const args = this.pushZRangeOpts([
key,
min,
max
], opts);
return this.execArrayReply("ZRANGEBYSCORE", ...args);
}
zrank(key, member) {
return this.execIntegerOrNilReply("ZRANK", key, member);
}
zrem(key, ...members) {
return this.execIntegerReply("ZREM", key, ...members);
}
zremrangebylex(key, min, max) {
return this.execIntegerReply("ZREMRANGEBYLEX", key, min, max);
}
zremrangebyrank(key, start, stop) {
return this.execIntegerReply("ZREMRANGEBYRANK", key, start, stop);
}
zremrangebyscore(key, min, max) {
return this.execIntegerReply("ZREMRANGEBYSCORE", key, min, max);
}
zrevrange(key, start, stop, opts) {
const args = this.pushZRangeOpts([
key,
start,
stop
], opts);
return this.execArrayReply("ZREVRANGE", ...args);
}
zrevrangebylex(key, max, min, opts) {
const args = this.pushZRangeOpts([
key,
min,
max
], opts);
return this.execArrayReply("ZREVRANGEBYLEX", ...args);
}
zrevrangebyscore(key, max, min, opts) {
const args = this.pushZRangeOpts([
key,
max,
min
], opts);
return this.execArrayReply("ZREVRANGEBYSCORE", ...args);
}
pushZRangeOpts(args, opts) {
if (opts?.with_score) {
args.push("WITHSCORES");
}
if (opts?.limit) {
args.push("LIMIT", opts.limit.offset, opts.limit.count);
}
return args;
}
zrevrank(key, member) {
return this.execIntegerOrNilReply("ZREVRANK", key, member);
}
zscore(key, member) {
return this.execBulkReply("ZSCORE", key, member);
}
scan(cursor, opts) {
const args = this.pushScanOpts([
cursor
], opts);
return this.execArrayReply("SCAN", ...args);
}
sscan(key, cursor, opts) {
const args = this.pushScanOpts([
key,
cursor
], opts);
return this.execArrayReply("SSCAN", ...args);
}
hscan(key, cursor, opts) {
const args = this.pushScanOpts([
key,
cursor
], opts);
return this.execArrayReply("HSCAN", ...args);
}
zscan(key, cursor, opts) {
const args = this.pushScanOpts([
key,
cursor
], opts);
return this.execArrayReply("ZSCAN", ...args);
}
pushScanOpts(args, opts) {
if (opts?.pattern !== undefined) {
args.push("MATCH", opts.pattern);
}
if (opts?.count !== undefined) {
args.push("COUNT", opts.count);
}
if (opts?.type !== undefined) {
args.push("TYPE", opts.type);
}
return args;
}
tx() {
return createRedisPipeline(this.connection, true);
}
pipeline() {
return createRedisPipeline(this.connection);
}
}
class PipelineExecutor extends CommandExecutor {
commands = [];
queue = [];
constructor(connection3, tx){
super(connection3);
this.tx = tx;
}
exec(command, ...args) {
this.commands.push({
command,
args
});
return Promise.resolve([
"status",
"OK"
]);
}
flush() {
if (this.tx) {
this.commands.unshift({
command: "MULTI",
args: []
});
this.commands.push({
command: "EXEC",
args: []
});
}
const d = deferred();
this.queue.push({
commands: [
...this.commands
],
d
});
if (this.queue.length === 1) {
this.dequeue();
}
this.commands = [];
return d;
}
dequeue() {
const [e] = this.queue;
if (!e) return;
sendCommands(this.connection.writer, this.connection.reader, e.commands).then(e.d.resolve).catch(e.d.reject).finally(()=>{
this.queue.shift();
this.dequeue();
});
}
}
async function connect(options8) {
const { hostname: hostname2 , port: port2 = 6379 , ...opts } = options8;
const connection4 = new RedisConnection(hostname2, port2, opts);
await connection4.connect();
const executor1 = new MuxExecutor(connection4);
return new RedisImpl(connection4, executor1);
}
class RedisCacheAdapter1 {
ready = false;
_expireIntervalTimer = 5000;
constructor(options8){
this._redis = connect(options8);
this._redis.then((redis)=>{
this.redis = redis;
this.ready = true;
this._startExpireInterval();
}, ()=>{
});
}
_startExpireInterval() {
this._expireInterval = setInterval(()=>{
this.redis?.scan(0, {
pattern: '*:expires'
}).then(([_, names])=>{
for (const name3 of names){
this.redis?.hvals(name3).then((vals)=>{
for (const val of vals){
const expireVal = JSON.parse(val);
const expired = new Date().getTime() > expireVal.at;
if (expired) this.redis?.hdel(expireVal.name, expireVal.key);
}
});
}
});
}, this._expireIntervalTimer);
}
async _checkReady() {
if (!this.ready) await this._redis;
}
async get(cacheName, key) {
await this._checkReady();
const cache = await this.redis?.hget(cacheName, key);
if (cache === undefined) return;
try {
return JSON.parse(cache);
} catch (e) {
return cache;
}
}
async set(cacheName, key, value, expire) {
await this._checkReady();
const result = await this.redis?.hset(cacheName, key, typeof value === 'object' ? JSON.stringify(value) : value);
if (expire !== undefined) {
await this.redis?.hset(`${cacheName}:expires`, key, JSON.stringify({
name: cacheName,
key,
at: new Date().getTime() + expire
}));
}
return result;
}
async delete(cacheName, key) {
await this._checkReady();
const exists = await this.redis?.hexists(cacheName, key);
if (exists === 0) return false;
await this.redis?.hdel(cacheName, key);
return true;
}
async array(cacheName) {
await this._checkReady();
const data31 = await this.redis?.hvals(cacheName);
return data31?.map((e)=>JSON.parse(e)
);
}
async deleteCache(cacheName) {
await this._checkReady();
return await this.redis?.del(cacheName) !== 0;
}
}
export { RedisCacheAdapter1 as RedisCacheAdapter };
export { GatewayIntents1 as GatewayIntents };
export { Base1 as Base };
export { Gateway1 as Gateway };
export { RESTManager1 as RESTManager, TokenType1 as TokenType, HttpResponseCode1 as HttpResponseCode, DiscordAPIError1 as DiscordAPIError };
export { Command1 as Command, CommandBuilder1 as CommandBuilder, CommandCategory1 as CommandCategory, CommandsManager1 as CommandsManager, CategoriesManager1 as CategoriesManager, CommandsLoader1 as CommandsLoader };
export { Extension1 as Extension, ExtensionCommands1 as ExtensionCommands, ExtensionsManager1 as ExtensionsManager };
export { SlashModule1 as SlashModule };
export { CommandClient1 as CommandClient, command1 as command };
export { BaseManager1 as BaseManager };
export { BaseChildManager1 as BaseChildManager };
export { ChannelsManager1 as ChannelsManager };
export { EmojisManager1 as EmojisManager };
export { GatewayCache1 as GatewayCache };
export { GuildChannelsManager1 as GuildChannelsManager };
export { GuildManager1 as GuildManager };
export { GuildEmojisManager1 as GuildEmojisManager };
export { MembersManager1 as MembersManager };
export { MessageReactionsManager1 as MessageReactionsManager };
export { ReactionUsersManager1 as ReactionUsersManager };
export { MessagesManager1 as MessagesManager };
export { RolesManager1 as RolesManager };
export { UsersManager1 as UsersManager };
export { InviteManager1 as InviteManager };
export { Application1 as Application };
export { Channel1 as Channel, GuildChannel1 as GuildChannel };
export { DMChannel1 as DMChannel };
export { Embed1 as Embed };
export { Emoji1 as Emoji };
export { GroupDMChannel1 as GroupDMChannel };
export { Guild1 as Guild, GuildBan1 as GuildBan, GuildBans1 as GuildBans, GuildIntegration1 as GuildIntegration };
export { CategoryChannel1 as CategoryChannel };
export { NewsChannel1 as NewsChannel };
export { VoiceChannel1 as VoiceChannel };
export { Invite1 as Invite };
export { Message1 as Message, MessageAttachment1 as MessageAttachment, MessageInteraction1 as MessageInteraction };
export { MessageMentions1 as MessageMentions };
export { Presence1 as Presence, ClientPresence1 as ClientPresence, ActivityTypes1 as ActivityTypes };
export { Role1 as Role };
export { Snowflake1 as Snowflake };
export { TextChannel1 as TextChannel };
export { GuildTextBasedChannel1 as GuildTextBasedChannel, GuildTextChannel1 as GuildTextChannel, checkGuildTextBasedChannel1 as checkGuildTextBasedChannel };
export { MessageReaction1 as MessageReaction };
export { User1 as User };
export { Webhook1 as Webhook };
export { Collection1 as Collection };
export { Intents1 as Intents };
export { UserFlagsManager1 as UserFlagsManager };
export { HarmonyEventEmitter1 as HarmonyEventEmitter };
export { ChannelTypes1 as ChannelTypes, OverwriteType1 as OverwriteType, OverrideType1 as OverrideType };
export { Verification1 as Verification };
export { PermissionFlags1 as PermissionFlags };
export { UserFlags1 as UserFlags };
export { ColorUtil1 as ColorUtil };