diff --git a/lib/index.d.ts b/lib/index.d.ts new file mode 100644 index 0000000..738e3fb --- /dev/null +++ b/lib/index.d.ts @@ -0,0 +1,561 @@ +import { EventMap, EventEmitter } from '@war3js/events'; +export { TextDecoder, TextEncoder } from 'text-decoding'; +import { Headers } from '@war3js/headers-polyfill'; +export { Headers } from '@war3js/headers-polyfill'; + +declare class Console { + trace(...args: any): void; + debug(...args: any): void; + info(...args: any): void; + warn(...args: any): void; + error(...args: any): void; + log(...args: any): void; +} + +type HandleConstructor = new (handle: HandleHolder) => H; +interface HandleEventMap extends EventMap { + error: (error: Error) => void; + remove: () => void; +} +declare class Handle extends EventEmitter { + #private; + constructor(handleHolder: Handle | HandleHolder); + get handle(): HandleHolder; + equals(anotherHandle: Handle): boolean; +} + +interface Ability { + get handle(): HandleHolder<"ability">; +} +declare class Ability extends Handle { + constructor(itemHandle: HandleHolder<"ability">); + constructor(itemHandle: Ability); + constructor(abilCode: number); +} + +interface AbilityLevelAccessorNatives { + get: (ability: HandleHolder<"ability">, field: HandleHolder<"_enum">, level: number) => T; + set: (ability: HandleHolder<"ability">, field: HandleHolder<"_enum">, level: number, value: T) => boolean; + baseGet: (abilId: number, field: HandleHolder<"_enum">, level: number) => T; + baseSet: (ability: number, field: HandleHolder<"_enum">, level: number, value: T) => boolean; +} +declare class AbilityLevelAccessor implements Iterable { + #private; + constructor(abilityData: AbilityData, field: HandleHolder<"_enum">, accessNatives: AbilityLevelAccessorNatives); + [Symbol.iterator](): Iterator; + getLength(): number; + getIndexValue(index: number): T; + setIndexValue(index: number, value: T): boolean; +} +interface AbilityData { + instance: number | Ability; +} +declare class AbilityData { + #private; + constructor(instance: number | Ability); +} + +interface IndexAccessArray extends Iterable { + [key: number]: T; + [key: string]: any; + [key: symbol]: any; +} + +interface WidgetEventMap extends HandleEventMap { + death: (event: any) => void; + damaging: () => void; + damaged: () => void; +} +declare class Widget extends Handle { + constructor(handleHolder: HandleHolder<"widget" | "unit" | "item" | "destructable"> | Widget); +} + +interface PlayerEventMap extends HandleEventMap { +} +interface Player { + get handle(): HandleHolder<"player">; +} +declare class Player extends Handle { + constructor(handleHolder: HandleHolder<"player">); + static getById(slot: number): T; + static localPlayer(): T; +} + +interface DestructableEventMap extends WidgetEventMap { +} +declare class Destructable extends Widget { + constructor(destructableHandle: HandleHolder<"item">); + constructor(destructableHandle: Destructable); + constructor(destructableId: number, x: number, y: number, face: number, scale: number, variation: number); +} + +interface ItemEventMap extends WidgetEventMap { +} +declare class Item extends Widget { + constructor(itemHandle: HandleHolder<"item">); + constructor(itemHandle: Item); + constructor(itemId: number, x: number, y: number); +} + +type HUnitEvent = HandleHolder<"unitevent">; +type HTrigger = HandleHolder<"trigger">; +type HTriggerAction = HandleHolder<"triggeraction">; +type HEvent = HandleHolder<"event">; +type HUnitState = HandleHolder<"unitstate">; +type HLocation = HandleHolder<"location">; +type HBuff = HandleHolder<"buff">; +type HAbility = HandleHolder<"ability">; +type HProjectile = HandleHolder<"projectile">; +type JassCodeCallback = () => number | void; + +type UnitEventType = keyof typeof stringToHandle; +declare const stringToHandle: { + damaged: HUnitEvent; + damaging: HUnitEvent; + selected: HUnitEvent; + deselected: HUnitEvent; + death: HUnitEvent; + decay: HUnitEvent; + detected: HUnitEvent; + hidden: HUnitEvent; + stateLimit: HUnitEvent; + acquiredTarget: HUnitEvent; + targetInRange: HUnitEvent; + attacked: HUnitEvent; + rescued: HUnitEvent; + constructCancel: HUnitEvent; + constructFinish: HUnitEvent; + upgradeStart: HUnitEvent; + upgradeCancel: HUnitEvent; + upgradeFinish: HUnitEvent; + trainStart: HUnitEvent; + trainCancel: HUnitEvent; + trainFinish: HUnitEvent; + researchStart: HUnitEvent; + researchCancel: HUnitEvent; + researchFinish: HUnitEvent; + issuedOrder: HUnitEvent; + issuedPointOrder: HUnitEvent; + issuedTargetOrder: HUnitEvent; + heroLevel: HUnitEvent; + heroSkill: HUnitEvent; + heroRevivable: HUnitEvent; + heroReviveStart: HUnitEvent; + heroReviveCancel: HUnitEvent; + heroReviveFinish: HUnitEvent; + summon: HUnitEvent; + dropItem: HUnitEvent; + pickupItem: HUnitEvent; + useItem: HUnitEvent; + loaded: HUnitEvent; + attackFinished: HUnitEvent; + decayFinished: HUnitEvent; + buffReceived: HUnitEvent; + buffRefreshed: HUnitEvent; + buffEnded: HUnitEvent; + projectileLaunch: HUnitEvent; + projectileHit: HUnitEvent; + abilityAdded: HUnitEvent; + abilityRemoved: HUnitEvent; + abilityAutocastOn: HUnitEvent; + abilityAutocastOff: HUnitEvent; + spellChannel: HUnitEvent; + spellCast: HUnitEvent; + spellEffect: HUnitEvent; + spellFinish: HUnitEvent; + spellEndcast: HUnitEvent; +}; + +declare class TriggerEvent { + readonly event: E; + constructor(event: E); +} + +declare class TriggerUnitEvent extends TriggerEvent { + readonly triggerUnit: Unit; + constructor(event: E); +} + +declare class UnitEventDeath extends TriggerUnitEvent<"death"> { + readonly killingUnit: Unit; + constructor(); +} + +declare class UnitEventDetected extends TriggerUnitEvent<"detected"> { + readonly detectingPlayer: Player; + constructor(); +} + +declare class UnitEventAcquiredTarget extends TriggerUnitEvent<"acquiredTarget"> { + readonly target: Unit; + constructor(); +} + +declare class UnitEventTargetInRange extends TriggerUnitEvent<"targetInRange"> { + readonly target: Unit; + constructor(); +} + +declare class UnitEventAttacked extends TriggerUnitEvent<"attacked"> { + readonly attacker: Unit; + constructor(); +} + +declare class UnitEventRescued extends TriggerUnitEvent<"rescued"> { + readonly rescuer: Unit; + constructor(); +} + +declare class UnitEventConstructFinish extends TriggerUnitEvent<"constructFinish"> { + readonly constructedStructure: Unit; + constructor(); +} + +declare class UnitEventTrainStart extends TriggerUnitEvent<"trainStart"> { + readonly trainedUnitType: number; + constructor(); +} + +declare class UnitEventTrainCancel extends TriggerUnitEvent<"trainCancel"> { + readonly trainedUnitType: number; + constructor(); +} + +declare class UnitEventTrainFinish extends TriggerUnitEvent<"trainFinish"> { + readonly trainedUnit: Unit; + constructor(); +} + +declare class UnitEventResearchStart extends TriggerUnitEvent<"researchStart"> { + readonly researched: number; + constructor(); +} + +declare class UnitEventResearchCancel extends TriggerUnitEvent<"researchCancel"> { + readonly researched: number; + constructor(); +} + +declare class UnitEventResearchFinish extends TriggerUnitEvent<"researchFinish"> { + readonly researched: number; + constructor(); +} + +declare class UnitEventIssuedOrder extends TriggerUnitEvent<"issuedOrder"> { + readonly issuedOrderId: number; + constructor(); +} + +declare class UnitEventIssuedPointOrder extends TriggerUnitEvent<"issuedPointOrder"> { + readonly issuedOrderId: number; + readonly orderPointX: number; + readonly orderPointY: number; + constructor(); +} + +declare class UnitEventIssuedTargetOrder extends TriggerUnitEvent<"issuedTargetOrder"> { + readonly issuedOrderId: number; + readonly orderTarget: Widget; + constructor(); +} + +declare class UnitEventHeroSkill extends TriggerUnitEvent<"heroSkill"> { + readonly learnedSkill: number; + readonly learnedSkillLevel: number; + constructor(); +} + +declare class UnitEventHeroRevivable extends TriggerUnitEvent<"heroRevivable"> { + readonly revivableUnit: Unit; + constructor(); +} + +declare class UnitEventHeroReviveStart extends TriggerUnitEvent<"heroReviveStart"> { + readonly revivingUnit: Unit; + constructor(); +} + +declare class UnitEventHeroReviveCancel extends TriggerUnitEvent<"heroReviveCancel"> { + readonly revivingUnit: Unit; + constructor(); +} + +declare class UnitEventHeroReviveFinish extends TriggerUnitEvent<"heroReviveFinish"> { + readonly revivingUnit: Unit; + constructor(); +} + +declare class UnitEventSummon extends TriggerUnitEvent<"summon"> { + readonly summonedUnit: Unit; + constructor(); +} + +declare class UnitEventDropItem extends TriggerUnitEvent<"dropItem"> { + readonly droppedItem: Item; + constructor(); +} + +declare class UnitEventPickupItem extends TriggerUnitEvent<"pickupItem"> { + readonly pickedupItem: Item; + constructor(); +} + +declare class UnitEventUseItem extends TriggerUnitEvent<"useItem"> { + readonly usedItem: Item; + constructor(); +} + +declare class UnitEventLoaded extends TriggerUnitEvent<"loaded"> { + readonly transport: Unit; + constructor(); +} + +declare class UnitEventStateLimit extends TriggerUnitEvent<"stateLimit"> { + readonly eventUnitState: HUnitState; + constructor(); +} + +interface IDisposable { + dispose: () => void; +} + +declare const enum UnitState { + Life = 0, + MaxLife = 1, + Mana = 2, + MaxMana = 3 +} +declare const enum LimitOp { + lt = 0, + le = 1, + eq = 2, + gt = 3, + ge = 4 +} +declare class UnitStateEmiter implements IDisposable { + #private; + constructor(target: Unit, unitState: UnitState, limitOp: LimitOp, value: number); + get unitState(): UnitState; + get limitOp(): LimitOp; + get value(): number; + get emitSymbol(): StateEventSymbol; + dispose(): void; +} + +declare class UnitEventBuffReceived extends TriggerUnitEvent<"buffReceived"> { + readonly recievedBuff: HBuff; + readonly sourceAbility: HAbility; + readonly sourceUnit: Unit; + constructor(); +} + +declare class UnitEventBuffRefreshed extends TriggerUnitEvent<"buffRefreshed"> { + readonly recievedBuff: HBuff; + readonly sourceAbility: HAbility; + readonly sourceUnit: Unit; + constructor(); +} + +declare class UnitEventBuffEnded extends TriggerUnitEvent<"buffEnded"> { + readonly recievedBuff: HBuff; + readonly sourceAbility: HAbility; + readonly sourceUnit: Unit; + constructor(); +} + +declare class UnitEventProjectileLaunch extends TriggerUnitEvent<"projectileLaunch"> { + readonly target: Widget; + readonly projecitle: HProjectile; + constructor(); +} + +declare class UnitEventProjectileHit extends TriggerUnitEvent<"projectileHit"> { + readonly source: Unit; + readonly projectile: HProjectile; + constructor(); +} + +declare class UnitEventSpellChannel extends TriggerUnitEvent<"spellChannel"> { + readonly abilityId: number; + readonly ability: HAbility; + readonly targetX: number; + readonly targetY: number; + readonly targetDestructable: Destructable; + readonly targetItem: Item; + readonly targetUnit: Unit; + constructor(); +} + +declare class UnitEventSpellCast extends TriggerUnitEvent<"spellCast"> { + readonly abilityId: number; + readonly ability: HAbility; + readonly targetX: number; + readonly targetY: number; + readonly targetDestructable: Destructable; + readonly targetItem: Item; + readonly targetUnit: Unit; + constructor(); +} + +declare class UnitEventSpellEffect extends TriggerUnitEvent<"spellEffect"> { + readonly abilityId: number; + readonly ability: HAbility; + readonly targetX: number; + readonly targetY: number; + readonly targetDestructable: Destructable; + readonly targetItem: Item; + readonly targetUnit: Unit; + constructor(); +} + +declare class UnitEventSpellFinish extends TriggerUnitEvent<"spellFinish"> { + readonly abilityId: number; + readonly ability: HAbility; + readonly targetX: number; + readonly targetY: number; + readonly targetDestructable: Destructable; + readonly targetItem: Item; + readonly targetUnit: Unit; + constructor(); +} + +declare class UnitEventSpellEndcast extends TriggerUnitEvent<"spellEndcast"> { + readonly abilityId: number; + readonly ability: HAbility; + readonly targetX: number; + readonly targetY: number; + readonly targetDestructable: Destructable; + readonly targetItem: Item; + readonly targetUnit: Unit; + constructor(); +} + +declare const stateEvent: unique symbol; +type StateEventSymbol = typeof stateEvent; +interface UnitEventMap extends WidgetEventMap { + selected: (event: TriggerUnitEvent<"selected">) => void; + deselected: (event: TriggerUnitEvent<"deselected">) => void; + damaged: () => void; + damaging: () => void; + death: (event: UnitEventDeath) => void; + decay: (event: TriggerUnitEvent<"decay">) => void; + detected: (event: UnitEventDetected) => void; + hidden: (event: TriggerUnitEvent<"hidden">) => void; + stateLimit: (event: UnitEventStateLimit) => void; + acquiredTarget: (event: UnitEventAcquiredTarget) => void; + targetInRange: (event: UnitEventTargetInRange) => void; + attacked: (event: UnitEventAttacked) => void; + rescued: (event: UnitEventRescued) => void; + constructCancel: (event: TriggerUnitEvent<"constructCancel">) => void; + constructFinish: (event: UnitEventConstructFinish) => void; + upgradeStart: (event: TriggerUnitEvent<"upgradeStart">) => void; + upgradeCancel: (event: TriggerUnitEvent<"upgradeCancel">) => void; + upgradeFinish: (event: TriggerUnitEvent<"upgradeFinish">) => void; + trainStart: (event: UnitEventTrainStart) => void; + trainCancel: (event: UnitEventTrainCancel) => void; + trainFinish: (event: UnitEventTrainFinish) => void; + researchStart: (event: UnitEventResearchStart) => void; + researchCancel: (event: UnitEventResearchCancel) => void; + researchFinish: (event: UnitEventResearchFinish) => void; + issuedOrder: (event: UnitEventIssuedOrder) => void; + issuedPointOrder: (event: UnitEventIssuedPointOrder) => void; + issuedTargetOrder: (event: UnitEventIssuedTargetOrder) => void; + heroLevel: (event: TriggerUnitEvent<"heroLevel">) => void; + heroSkill: (event: UnitEventHeroSkill) => void; + heroRevivable: (event: UnitEventHeroRevivable) => void; + heroReviveStart: (event: UnitEventHeroReviveStart) => void; + heroReviveCancel: (event: UnitEventHeroReviveCancel) => void; + heroReviveFinish: (event: UnitEventHeroReviveFinish) => void; + summon: (event: UnitEventSummon) => void; + dropItem: (event: UnitEventDropItem) => void; + pickupItem: (event: UnitEventPickupItem) => void; + useItem: (event: UnitEventUseItem) => void; + loaded: (event: UnitEventLoaded) => void; + attackFinished: (event: TriggerUnitEvent<"attackFinished">) => void; + decayFinished: (event: TriggerUnitEvent<"decayFinished">) => void; + buffReceived: (event: UnitEventBuffReceived) => void; + buffRefreshed: (event: UnitEventBuffRefreshed) => void; + buffEnded: (event: UnitEventBuffEnded) => void; + projectileLaunch: (event: UnitEventProjectileLaunch) => void; + projectileHit: (event: UnitEventProjectileHit) => void; + abilityAdded: (event: TriggerUnitEvent<"abilityAdded">) => void; + abilityRemoved: (event: TriggerUnitEvent<"abilityRemoved">) => void; + abilityAutocastOn: (event: TriggerUnitEvent<"abilityAutocastOn">) => void; + abilityAutocastOff: (event: TriggerUnitEvent<"abilityAutocastOff">) => void; + spellChannel: (event: UnitEventSpellChannel) => void; + spellCast: (event: UnitEventSpellCast) => void; + spellEffect: (event: UnitEventSpellEffect) => void; + spellFinish: (event: UnitEventSpellFinish) => void; + spellEndcast: (event: UnitEventSpellEndcast) => void; + [stateEvent]: (event: UnitEventStateLimit, emiter: UnitStateEmiter) => void; +} +type UnitOptions = { + type: "building"; + isAutoBuild?: boolean; + workersCanAssist?: boolean; +} | { + type: "illusion"; +} | { + type: "corpse"; +}; +type UnitIllusionOptions = { + copyPassives: boolean; +}; +interface Unit { + get handle(): HandleHolder<"unit">; +} +declare class Unit extends Widget { + constructor(unitHandle: HandleHolder<"unit">); + constructor(unitobject: Unit); + constructor(unitobject: Player, unitId: number, x: number, y: number, facing: number); + onUnitState(unitState: UnitState, limitOp: LimitOp, value: number, callback: UnitEventMap[StateEventSymbol]): UnitStateEmiter; + static createIllusionFromUnit(unit: Unit, options?: UnitIllusionOptions): Unit; + onEmitterAddListener(event: UnitEventType | number | symbol, listener: (...args: any[]) => void): void; +} + +interface WebsocketEvents extends EventMap { + open: () => void; + message: (message: string | ArrayBuffer) => void; +} +declare class Websocket extends EventEmitter { + #private; + static CONNECTING: number; + static OPEN: number; + static CLOSING: number; + static CLOSED: number; + get readyState(): number; + get bufferedAmount(): number; + constructor(url: string, headers?: Headers); + send(message: string | ArrayBuffer | Uint8Array): void; + close(code?: number, reason?: string): void; +} + +declare const stream: any; +declare const buffer: any; +declare const isUjApi: boolean; +declare const console: Console; + +declare global { + /** + * A low-level object that replaces the handle type in war3js. + * It is not recommended to use it as an object, as some fields may start to be used by the war3js backend. + */ + interface HandleHolder { + /** + * Returns jass handle type. For fake handles this is _enum. + */ + get type(): T; + /** + * The library object this handle is bound to + */ + payload: P; + /** + * Compares handle's internal pointers as numbers. ``null`` is interpreted as 0 + * @param handle another handle for compare + * @returns true if jass + */ + equals: (handle: HandleHolder | null) => boolean; + } +} + +export { AbilityData, AbilityLevelAccessor, type AbilityLevelAccessorNatives, Destructable, type DestructableEventMap, type HEvent, type HLocation, type HTrigger, type HTriggerAction, type HUnitEvent, type HUnitState, Handle, type HandleConstructor, type HandleEventMap, type IndexAccessArray, Item, type ItemEventMap, type JassCodeCallback, LimitOp, Player, type PlayerEventMap, type StateEventSymbol, Unit, type UnitEventMap, type UnitIllusionOptions, type UnitOptions, UnitState, Websocket, Widget, type WidgetEventMap, buffer, console, isUjApi, stream }; diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..3e6ea13 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,28622 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { + get: (a, b) => (typeof require !== "undefined" ? require : a)[b] +}) : x)(function(x) { + if (typeof require !== "undefined") + return require.apply(this, arguments); + throw Error('Dynamic require of "' + x + '" is not supported'); +}); +var __commonJS = (cb, mod) => function __require2() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; +var __privateMethod = (obj, member, method) => { + __accessCheck(obj, member, "access private method"); + return method; +}; + +// node_modules/readable-stream/lib/ours/primordials.js +var require_primordials = __commonJS({ + "node_modules/readable-stream/lib/ours/primordials.js"(exports, module) { + "use strict"; + module.exports = { + ArrayIsArray(self) { + return Array.isArray(self); + }, + ArrayPrototypeIncludes(self, el) { + return self.includes(el); + }, + ArrayPrototypeIndexOf(self, el) { + return self.indexOf(el); + }, + ArrayPrototypeJoin(self, sep) { + return self.join(sep); + }, + ArrayPrototypeMap(self, fn) { + return self.map(fn); + }, + ArrayPrototypePop(self, el) { + return self.pop(el); + }, + ArrayPrototypePush(self, el) { + return self.push(el); + }, + ArrayPrototypeSlice(self, start, end) { + return self.slice(start, end); + }, + Error, + FunctionPrototypeCall(fn, thisArgs, ...args) { + return fn.call(thisArgs, ...args); + }, + FunctionPrototypeSymbolHasInstance(self, instance) { + return Function.prototype[Symbol.hasInstance].call(self, instance); + }, + MathFloor: Math.floor, + Number, + NumberIsInteger: Number.isInteger, + NumberIsNaN: Number.isNaN, + NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER, + NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER, + NumberParseInt: Number.parseInt, + ObjectDefineProperties(self, props) { + return Object.defineProperties(self, props); + }, + ObjectDefineProperty(self, name, prop) { + return Object.defineProperty(self, name, prop); + }, + ObjectGetOwnPropertyDescriptor(self, name) { + return Object.getOwnPropertyDescriptor(self, name); + }, + ObjectKeys(obj) { + return Object.keys(obj); + }, + ObjectSetPrototypeOf(target, proto) { + return Object.setPrototypeOf(target, proto); + }, + Promise, + PromisePrototypeCatch(self, fn) { + return self.catch(fn); + }, + PromisePrototypeThen(self, thenFn, catchFn) { + return self.then(thenFn, catchFn); + }, + PromiseReject(err) { + return Promise.reject(err); + }, + PromiseResolve(val) { + return Promise.resolve(val); + }, + ReflectApply: Reflect.apply, + RegExpPrototypeTest(self, value) { + return self.test(value); + }, + SafeSet: Set, + String, + StringPrototypeSlice(self, start, end) { + return self.slice(start, end); + }, + StringPrototypeToLowerCase(self) { + return self.toLowerCase(); + }, + StringPrototypeToUpperCase(self) { + return self.toUpperCase(); + }, + StringPrototypeTrim(self) { + return self.trim(); + }, + Symbol, + SymbolFor: Symbol.for, + SymbolAsyncIterator: Symbol.asyncIterator, + SymbolHasInstance: Symbol.hasInstance, + SymbolIterator: Symbol.iterator, + SymbolDispose: Symbol.dispose || Symbol("Symbol.dispose"), + SymbolAsyncDispose: Symbol.asyncDispose || Symbol("Symbol.asyncDispose"), + TypedArrayPrototypeSet(self, buf, len) { + return self.set(buf, len); + }, + Boolean, + Uint8Array + }; + } +}); + +// node_modules/event-target-shim/dist/event-target-shim.js +var require_event_target_shim = __commonJS({ + "node_modules/event-target-shim/dist/event-target-shim.js"(exports, module) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var privateData = /* @__PURE__ */ new WeakMap(); + var wrappers = /* @__PURE__ */ new WeakMap(); + function pd(event) { + const retv = privateData.get(event); + console.assert( + retv != null, + "'this' is expected an Event object, but got", + event + ); + return retv; + } + function setCancelFlag(data) { + if (data.passiveListener != null) { + if (typeof console !== "undefined" && typeof console.error === "function") { + console.error( + "Unable to preventDefault inside passive event listener invocation.", + data.passiveListener + ); + } + return; + } + if (!data.event.cancelable) { + return; + } + data.canceled = true; + if (typeof data.event.preventDefault === "function") { + data.event.preventDefault(); + } + } + function Event(eventTarget, event) { + privateData.set(this, { + eventTarget, + event, + eventPhase: 2, + currentTarget: eventTarget, + canceled: false, + stopped: false, + immediateStopped: false, + passiveListener: null, + timeStamp: event.timeStamp || Date.now() + }); + Object.defineProperty(this, "isTrusted", { value: false, enumerable: true }); + const keys = Object.keys(event); + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + if (!(key in this)) { + Object.defineProperty(this, key, defineRedirectDescriptor(key)); + } + } + } + Event.prototype = { + /** + * The type of this event. + * @type {string} + */ + get type() { + return pd(this).event.type; + }, + /** + * The target of this event. + * @type {EventTarget} + */ + get target() { + return pd(this).eventTarget; + }, + /** + * The target of this event. + * @type {EventTarget} + */ + get currentTarget() { + return pd(this).currentTarget; + }, + /** + * @returns {EventTarget[]} The composed path of this event. + */ + composedPath() { + const currentTarget = pd(this).currentTarget; + if (currentTarget == null) { + return []; + } + return [currentTarget]; + }, + /** + * Constant of NONE. + * @type {number} + */ + get NONE() { + return 0; + }, + /** + * Constant of CAPTURING_PHASE. + * @type {number} + */ + get CAPTURING_PHASE() { + return 1; + }, + /** + * Constant of AT_TARGET. + * @type {number} + */ + get AT_TARGET() { + return 2; + }, + /** + * Constant of BUBBLING_PHASE. + * @type {number} + */ + get BUBBLING_PHASE() { + return 3; + }, + /** + * The target of this event. + * @type {number} + */ + get eventPhase() { + return pd(this).eventPhase; + }, + /** + * Stop event bubbling. + * @returns {void} + */ + stopPropagation() { + const data = pd(this); + data.stopped = true; + if (typeof data.event.stopPropagation === "function") { + data.event.stopPropagation(); + } + }, + /** + * Stop event bubbling. + * @returns {void} + */ + stopImmediatePropagation() { + const data = pd(this); + data.stopped = true; + data.immediateStopped = true; + if (typeof data.event.stopImmediatePropagation === "function") { + data.event.stopImmediatePropagation(); + } + }, + /** + * The flag to be bubbling. + * @type {boolean} + */ + get bubbles() { + return Boolean(pd(this).event.bubbles); + }, + /** + * The flag to be cancelable. + * @type {boolean} + */ + get cancelable() { + return Boolean(pd(this).event.cancelable); + }, + /** + * Cancel this event. + * @returns {void} + */ + preventDefault() { + setCancelFlag(pd(this)); + }, + /** + * The flag to indicate cancellation state. + * @type {boolean} + */ + get defaultPrevented() { + return pd(this).canceled; + }, + /** + * The flag to be composed. + * @type {boolean} + */ + get composed() { + return Boolean(pd(this).event.composed); + }, + /** + * The unix time of this event. + * @type {number} + */ + get timeStamp() { + return pd(this).timeStamp; + }, + /** + * The target of this event. + * @type {EventTarget} + * @deprecated + */ + get srcElement() { + return pd(this).eventTarget; + }, + /** + * The flag to stop event bubbling. + * @type {boolean} + * @deprecated + */ + get cancelBubble() { + return pd(this).stopped; + }, + set cancelBubble(value) { + if (!value) { + return; + } + const data = pd(this); + data.stopped = true; + if (typeof data.event.cancelBubble === "boolean") { + data.event.cancelBubble = true; + } + }, + /** + * The flag to indicate cancellation state. + * @type {boolean} + * @deprecated + */ + get returnValue() { + return !pd(this).canceled; + }, + set returnValue(value) { + if (!value) { + setCancelFlag(pd(this)); + } + }, + /** + * Initialize this event object. But do nothing under event dispatching. + * @param {string} type The event type. + * @param {boolean} [bubbles=false] The flag to be possible to bubble up. + * @param {boolean} [cancelable=false] The flag to be possible to cancel. + * @deprecated + */ + initEvent() { + } + }; + Object.defineProperty(Event.prototype, "constructor", { + value: Event, + configurable: true, + writable: true + }); + if (typeof window !== "undefined" && typeof window.Event !== "undefined") { + Object.setPrototypeOf(Event.prototype, window.Event.prototype); + wrappers.set(window.Event.prototype, Event); + } + function defineRedirectDescriptor(key) { + return { + get() { + return pd(this).event[key]; + }, + set(value) { + pd(this).event[key] = value; + }, + configurable: true, + enumerable: true + }; + } + function defineCallDescriptor(key) { + return { + value() { + const event = pd(this).event; + return event[key].apply(event, arguments); + }, + configurable: true, + enumerable: true + }; + } + function defineWrapper(BaseEvent, proto) { + const keys = Object.keys(proto); + if (keys.length === 0) { + return BaseEvent; + } + function CustomEvent(eventTarget, event) { + BaseEvent.call(this, eventTarget, event); + } + CustomEvent.prototype = Object.create(BaseEvent.prototype, { + constructor: { value: CustomEvent, configurable: true, writable: true } + }); + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + if (!(key in BaseEvent.prototype)) { + const descriptor = Object.getOwnPropertyDescriptor(proto, key); + const isFunc = typeof descriptor.value === "function"; + Object.defineProperty( + CustomEvent.prototype, + key, + isFunc ? defineCallDescriptor(key) : defineRedirectDescriptor(key) + ); + } + } + return CustomEvent; + } + function getWrapper(proto) { + if (proto == null || proto === Object.prototype) { + return Event; + } + let wrapper2 = wrappers.get(proto); + if (wrapper2 == null) { + wrapper2 = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto); + wrappers.set(proto, wrapper2); + } + return wrapper2; + } + function wrapEvent(eventTarget, event) { + const Wrapper = getWrapper(Object.getPrototypeOf(event)); + return new Wrapper(eventTarget, event); + } + function isStopped(event) { + return pd(event).immediateStopped; + } + function setEventPhase(event, eventPhase) { + pd(event).eventPhase = eventPhase; + } + function setCurrentTarget(event, currentTarget) { + pd(event).currentTarget = currentTarget; + } + function setPassiveListener(event, passiveListener) { + pd(event).passiveListener = passiveListener; + } + var listenersMap = /* @__PURE__ */ new WeakMap(); + var CAPTURE = 1; + var BUBBLE = 2; + var ATTRIBUTE = 3; + function isObject(x) { + return x !== null && typeof x === "object"; + } + function getListeners(eventTarget) { + const listeners = listenersMap.get(eventTarget); + if (listeners == null) { + throw new TypeError( + "'this' is expected an EventTarget object, but got another value." + ); + } + return listeners; + } + function defineEventAttributeDescriptor(eventName) { + return { + get() { + const listeners = getListeners(this); + let node = listeners.get(eventName); + while (node != null) { + if (node.listenerType === ATTRIBUTE) { + return node.listener; + } + node = node.next; + } + return null; + }, + set(listener) { + if (typeof listener !== "function" && !isObject(listener)) { + listener = null; + } + const listeners = getListeners(this); + let prev = null; + let node = listeners.get(eventName); + while (node != null) { + if (node.listenerType === ATTRIBUTE) { + if (prev !== null) { + prev.next = node.next; + } else if (node.next !== null) { + listeners.set(eventName, node.next); + } else { + listeners.delete(eventName); + } + } else { + prev = node; + } + node = node.next; + } + if (listener !== null) { + const newNode = { + listener, + listenerType: ATTRIBUTE, + passive: false, + once: false, + next: null + }; + if (prev === null) { + listeners.set(eventName, newNode); + } else { + prev.next = newNode; + } + } + }, + configurable: true, + enumerable: true + }; + } + function defineEventAttribute(eventTargetPrototype, eventName) { + Object.defineProperty( + eventTargetPrototype, + `on${eventName}`, + defineEventAttributeDescriptor(eventName) + ); + } + function defineCustomEventTarget(eventNames) { + function CustomEventTarget() { + EventTarget.call(this); + } + CustomEventTarget.prototype = Object.create(EventTarget.prototype, { + constructor: { + value: CustomEventTarget, + configurable: true, + writable: true + } + }); + for (let i = 0; i < eventNames.length; ++i) { + defineEventAttribute(CustomEventTarget.prototype, eventNames[i]); + } + return CustomEventTarget; + } + function EventTarget() { + if (this instanceof EventTarget) { + listenersMap.set(this, /* @__PURE__ */ new Map()); + return; + } + if (arguments.length === 1 && Array.isArray(arguments[0])) { + return defineCustomEventTarget(arguments[0]); + } + if (arguments.length > 0) { + const types = new Array(arguments.length); + for (let i = 0; i < arguments.length; ++i) { + types[i] = arguments[i]; + } + return defineCustomEventTarget(types); + } + throw new TypeError("Cannot call a class as a function"); + } + EventTarget.prototype = { + /** + * Add a given listener to this event target. + * @param {string} eventName The event name to add. + * @param {Function} listener The listener to add. + * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener. + * @returns {void} + */ + addEventListener(eventName, listener, options) { + if (listener == null) { + return; + } + if (typeof listener !== "function" && !isObject(listener)) { + throw new TypeError("'listener' should be a function or an object."); + } + const listeners = getListeners(this); + const optionsIsObj = isObject(options); + const capture = optionsIsObj ? Boolean(options.capture) : Boolean(options); + const listenerType = capture ? CAPTURE : BUBBLE; + const newNode = { + listener, + listenerType, + passive: optionsIsObj && Boolean(options.passive), + once: optionsIsObj && Boolean(options.once), + next: null + }; + let node = listeners.get(eventName); + if (node === void 0) { + listeners.set(eventName, newNode); + return; + } + let prev = null; + while (node != null) { + if (node.listener === listener && node.listenerType === listenerType) { + return; + } + prev = node; + node = node.next; + } + prev.next = newNode; + }, + /** + * Remove a given listener from this event target. + * @param {string} eventName The event name to remove. + * @param {Function} listener The listener to remove. + * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener. + * @returns {void} + */ + removeEventListener(eventName, listener, options) { + if (listener == null) { + return; + } + const listeners = getListeners(this); + const capture = isObject(options) ? Boolean(options.capture) : Boolean(options); + const listenerType = capture ? CAPTURE : BUBBLE; + let prev = null; + let node = listeners.get(eventName); + while (node != null) { + if (node.listener === listener && node.listenerType === listenerType) { + if (prev !== null) { + prev.next = node.next; + } else if (node.next !== null) { + listeners.set(eventName, node.next); + } else { + listeners.delete(eventName); + } + return; + } + prev = node; + node = node.next; + } + }, + /** + * Dispatch a given event. + * @param {Event|{type:string}} event The event to dispatch. + * @returns {boolean} `false` if canceled. + */ + dispatchEvent(event) { + if (event == null || typeof event.type !== "string") { + throw new TypeError('"event.type" should be a string.'); + } + const listeners = getListeners(this); + const eventName = event.type; + let node = listeners.get(eventName); + if (node == null) { + return true; + } + const wrappedEvent = wrapEvent(this, event); + let prev = null; + while (node != null) { + if (node.once) { + if (prev !== null) { + prev.next = node.next; + } else if (node.next !== null) { + listeners.set(eventName, node.next); + } else { + listeners.delete(eventName); + } + } else { + prev = node; + } + setPassiveListener( + wrappedEvent, + node.passive ? node.listener : null + ); + if (typeof node.listener === "function") { + try { + node.listener.call(this, wrappedEvent); + } catch (err) { + if (typeof console !== "undefined" && typeof console.error === "function") { + console.error(err); + } + } + } else if (node.listenerType !== ATTRIBUTE && typeof node.listener.handleEvent === "function") { + node.listener.handleEvent(wrappedEvent); + } + if (isStopped(wrappedEvent)) { + break; + } + node = node.next; + } + setPassiveListener(wrappedEvent, null); + setEventPhase(wrappedEvent, 0); + setCurrentTarget(wrappedEvent, null); + return !wrappedEvent.defaultPrevented; + } + }; + Object.defineProperty(EventTarget.prototype, "constructor", { + value: EventTarget, + configurable: true, + writable: true + }); + if (typeof window !== "undefined" && typeof window.EventTarget !== "undefined") { + Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype); + } + exports.defineEventAttribute = defineEventAttribute; + exports.EventTarget = EventTarget; + exports.default = EventTarget; + module.exports = EventTarget; + module.exports.EventTarget = module.exports["default"] = EventTarget; + module.exports.defineEventAttribute = defineEventAttribute; + } +}); + +// node_modules/abort-controller/dist/abort-controller.js +var require_abort_controller = __commonJS({ + "node_modules/abort-controller/dist/abort-controller.js"(exports, module) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var eventTargetShim = require_event_target_shim(); + var AbortSignal = class extends eventTargetShim.EventTarget { + /** + * AbortSignal cannot be constructed directly. + */ + constructor() { + super(); + throw new TypeError("AbortSignal cannot be constructed directly"); + } + /** + * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise. + */ + get aborted() { + const aborted = abortedFlags.get(this); + if (typeof aborted !== "boolean") { + throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? "null" : typeof this}`); + } + return aborted; + } + }; + eventTargetShim.defineEventAttribute(AbortSignal.prototype, "abort"); + function createAbortSignal() { + const signal = Object.create(AbortSignal.prototype); + eventTargetShim.EventTarget.call(signal); + abortedFlags.set(signal, false); + return signal; + } + function abortSignal(signal) { + if (abortedFlags.get(signal) !== false) { + return; + } + abortedFlags.set(signal, true); + signal.dispatchEvent({ type: "abort" }); + } + var abortedFlags = /* @__PURE__ */ new WeakMap(); + Object.defineProperties(AbortSignal.prototype, { + aborted: { enumerable: true } + }); + if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") { + Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, { + configurable: true, + value: "AbortSignal" + }); + } + var AbortController = class { + /** + * Initialize this controller. + */ + constructor() { + signals.set(this, createAbortSignal()); + } + /** + * Returns the `AbortSignal` object associated with this object. + */ + get signal() { + return getSignal(this); + } + /** + * Abort and signal to any observers that the associated activity is to be aborted. + */ + abort() { + abortSignal(getSignal(this)); + } + }; + var signals = /* @__PURE__ */ new WeakMap(); + function getSignal(controller) { + const signal = signals.get(controller); + if (signal == null) { + throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? "null" : typeof controller}`); + } + return signal; + } + Object.defineProperties(AbortController.prototype, { + signal: { enumerable: true }, + abort: { enumerable: true } + }); + if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") { + Object.defineProperty(AbortController.prototype, Symbol.toStringTag, { + configurable: true, + value: "AbortController" + }); + } + exports.AbortController = AbortController; + exports.AbortSignal = AbortSignal; + exports.default = AbortController; + module.exports = AbortController; + module.exports.AbortController = module.exports["default"] = AbortController; + module.exports.AbortSignal = AbortSignal; + } +}); + +// node_modules/readable-stream/lib/ours/util.js +var require_util = __commonJS({ + "node_modules/readable-stream/lib/ours/util.js"(exports, module) { + "use strict"; + var bufferModule = __require("buffer"); + var { kResistStopPropagation, SymbolDispose } = require_primordials(); + var AbortSignal = globalThis.AbortSignal || require_abort_controller().AbortSignal; + var AbortController = globalThis.AbortController || require_abort_controller().AbortController; + var AsyncFunction = Object.getPrototypeOf(async function() { + }).constructor; + var Blob = globalThis.Blob || bufferModule.Blob; + var isBlob = typeof Blob !== "undefined" ? function isBlob2(b) { + return b instanceof Blob; + } : function isBlob2(b) { + return false; + }; + var validateAbortSignal = (signal, name) => { + if (signal !== void 0 && (signal === null || typeof signal !== "object" || !("aborted" in signal))) { + throw new ERR_INVALID_ARG_TYPE(name, "AbortSignal", signal); + } + }; + var validateFunction = (value, name) => { + if (typeof value !== "function") + throw new ERR_INVALID_ARG_TYPE(name, "Function", value); + }; + var AggregateError = class extends Error { + constructor(errors) { + if (!Array.isArray(errors)) { + throw new TypeError(`Expected input to be an Array, got ${typeof errors}`); + } + let message = ""; + for (let i = 0; i < errors.length; i++) { + message += ` ${errors[i].stack} +`; + } + super(message); + this.name = "AggregateError"; + this.errors = errors; + } + }; + module.exports = { + AggregateError, + kEmptyObject: Object.freeze({}), + once(callback) { + let called = false; + return function(...args) { + if (called) { + return; + } + called = true; + callback.apply(this, args); + }; + }, + createDeferredPromise: function() { + let resolve; + let reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { + promise, + resolve, + reject + }; + }, + promisify(fn) { + return new Promise((resolve, reject) => { + fn((err, ...args) => { + if (err) { + return reject(err); + } + return resolve(...args); + }); + }); + }, + debuglog() { + return function() { + }; + }, + format(format, ...args) { + return format.replace(/%([sdifj])/g, function(...[_unused, type]) { + const replacement = args.shift(); + if (type === "f") { + return replacement.toFixed(6); + } else if (type === "j") { + return JSON.stringify(replacement); + } else if (type === "s" && typeof replacement === "object") { + const ctor = replacement.constructor !== Object ? replacement.constructor.name : ""; + return `${ctor} {}`.trim(); + } else { + return replacement.toString(); + } + }); + }, + inspect(value) { + switch (typeof value) { + case "string": + if (value.includes("'")) { + if (!value.includes('"')) { + return `"${value}"`; + } else if (!value.includes("`") && !value.includes("${")) { + return `\`${value}\``; + } + } + return `'${value}'`; + case "number": + if (isNaN(value)) { + return "NaN"; + } else if (Object.is(value, -0)) { + return String(value); + } + return value; + case "bigint": + return `${String(value)}n`; + case "boolean": + case "undefined": + return String(value); + case "object": + return "{}"; + } + }, + types: { + isAsyncFunction(fn) { + return fn instanceof AsyncFunction; + }, + isArrayBufferView(arr) { + return ArrayBuffer.isView(arr); + } + }, + isBlob, + deprecate(fn, message) { + return fn; + }, + addAbortListener: __require("events").addAbortListener || function addAbortListener(signal, listener) { + if (signal === void 0) { + throw new ERR_INVALID_ARG_TYPE("signal", "AbortSignal", signal); + } + validateAbortSignal(signal, "signal"); + validateFunction(listener, "listener"); + let removeEventListener; + if (signal.aborted) { + queueMicrotask(() => listener()); + } else { + signal.addEventListener("abort", listener, { + __proto__: null, + once: true, + [kResistStopPropagation]: true + }); + removeEventListener = () => { + signal.removeEventListener("abort", listener); + }; + } + return { + __proto__: null, + [SymbolDispose]() { + var _removeEventListener; + (_removeEventListener = removeEventListener) === null || _removeEventListener === void 0 ? void 0 : _removeEventListener(); + } + }; + }, + AbortSignalAny: AbortSignal.any || function AbortSignalAny(signals) { + if (signals.length === 1) { + return signals[0]; + } + const ac = new AbortController(); + const abort = () => ac.abort(); + signals.forEach((signal) => { + validateAbortSignal(signal, "signals"); + signal.addEventListener("abort", abort, { + once: true + }); + }); + ac.signal.addEventListener( + "abort", + () => { + signals.forEach((signal) => signal.removeEventListener("abort", abort)); + }, + { + once: true + } + ); + return ac.signal; + } + }; + module.exports.promisify.custom = Symbol.for("nodejs.util.promisify.custom"); + } +}); + +// node_modules/readable-stream/lib/ours/errors.js +var require_errors = __commonJS({ + "node_modules/readable-stream/lib/ours/errors.js"(exports, module) { + "use strict"; + var { format, inspect, AggregateError: CustomAggregateError } = require_util(); + var AggregateError = globalThis.AggregateError || CustomAggregateError; + var kIsNodeError = Symbol("kIsNodeError"); + var kTypes = [ + "string", + "function", + "number", + "object", + // Accept 'Function' and 'Object' as alternative to the lower cased version. + "Function", + "Object", + "boolean", + "bigint", + "symbol" + ]; + var classRegExp = /^([A-Z][a-z0-9]*)+$/; + var nodeInternalPrefix = "__node_internal_"; + var codes = {}; + function assert(value, message) { + if (!value) { + throw new codes.ERR_INTERNAL_ASSERTION(message); + } + } + function addNumericalSeparator(val) { + let res = ""; + let i = val.length; + const start = val[0] === "-" ? 1 : 0; + for (; i >= start + 4; i -= 3) { + res = `_${val.slice(i - 3, i)}${res}`; + } + return `${val.slice(0, i)}${res}`; + } + function getMessage(key, msg, args) { + if (typeof msg === "function") { + assert( + msg.length <= args.length, + // Default options do not count. + `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).` + ); + return msg(...args); + } + const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length; + assert( + expectedLength === args.length, + `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).` + ); + if (args.length === 0) { + return msg; + } + return format(msg, ...args); + } + function E(code, message, Base) { + if (!Base) { + Base = Error; + } + class NodeError extends Base { + constructor(...args) { + super(getMessage(code, message, args)); + } + toString() { + return `${this.name} [${code}]: ${this.message}`; + } + } + Object.defineProperties(NodeError.prototype, { + name: { + value: Base.name, + writable: true, + enumerable: false, + configurable: true + }, + toString: { + value() { + return `${this.name} [${code}]: ${this.message}`; + }, + writable: true, + enumerable: false, + configurable: true + } + }); + NodeError.prototype.code = code; + NodeError.prototype[kIsNodeError] = true; + codes[code] = NodeError; + } + function hideStackFrames(fn) { + const hidden = nodeInternalPrefix + fn.name; + Object.defineProperty(fn, "name", { + value: hidden + }); + return fn; + } + function aggregateTwoErrors(innerError, outerError) { + if (innerError && outerError && innerError !== outerError) { + if (Array.isArray(outerError.errors)) { + outerError.errors.push(innerError); + return outerError; + } + const err = new AggregateError([outerError, innerError], outerError.message); + err.code = outerError.code; + return err; + } + return innerError || outerError; + } + var AbortError = class extends Error { + constructor(message = "The operation was aborted", options = void 0) { + if (options !== void 0 && typeof options !== "object") { + throw new codes.ERR_INVALID_ARG_TYPE("options", "Object", options); + } + super(message, options); + this.code = "ABORT_ERR"; + this.name = "AbortError"; + } + }; + E("ERR_ASSERTION", "%s", Error); + E( + "ERR_INVALID_ARG_TYPE", + (name, expected, actual) => { + assert(typeof name === "string", "'name' must be a string"); + if (!Array.isArray(expected)) { + expected = [expected]; + } + let msg = "The "; + if (name.endsWith(" argument")) { + msg += `${name} `; + } else { + msg += `"${name}" ${name.includes(".") ? "property" : "argument"} `; + } + msg += "must be "; + const types = []; + const instances = []; + const other = []; + for (const value of expected) { + assert(typeof value === "string", "All expected entries have to be of type string"); + if (kTypes.includes(value)) { + types.push(value.toLowerCase()); + } else if (classRegExp.test(value)) { + instances.push(value); + } else { + assert(value !== "object", 'The value "object" should be written as "Object"'); + other.push(value); + } + } + if (instances.length > 0) { + const pos = types.indexOf("object"); + if (pos !== -1) { + types.splice(types, pos, 1); + instances.push("Object"); + } + } + if (types.length > 0) { + switch (types.length) { + case 1: + msg += `of type ${types[0]}`; + break; + case 2: + msg += `one of type ${types[0]} or ${types[1]}`; + break; + default: { + const last = types.pop(); + msg += `one of type ${types.join(", ")}, or ${last}`; + } + } + if (instances.length > 0 || other.length > 0) { + msg += " or "; + } + } + if (instances.length > 0) { + switch (instances.length) { + case 1: + msg += `an instance of ${instances[0]}`; + break; + case 2: + msg += `an instance of ${instances[0]} or ${instances[1]}`; + break; + default: { + const last = instances.pop(); + msg += `an instance of ${instances.join(", ")}, or ${last}`; + } + } + if (other.length > 0) { + msg += " or "; + } + } + switch (other.length) { + case 0: + break; + case 1: + if (other[0].toLowerCase() !== other[0]) { + msg += "an "; + } + msg += `${other[0]}`; + break; + case 2: + msg += `one of ${other[0]} or ${other[1]}`; + break; + default: { + const last = other.pop(); + msg += `one of ${other.join(", ")}, or ${last}`; + } + } + if (actual == null) { + msg += `. Received ${actual}`; + } else if (typeof actual === "function" && actual.name) { + msg += `. Received function ${actual.name}`; + } else if (typeof actual === "object") { + var _actual$constructor; + if ((_actual$constructor = actual.constructor) !== null && _actual$constructor !== void 0 && _actual$constructor.name) { + msg += `. Received an instance of ${actual.constructor.name}`; + } else { + const inspected = inspect(actual, { + depth: -1 + }); + msg += `. Received ${inspected}`; + } + } else { + let inspected = inspect(actual, { + colors: false + }); + if (inspected.length > 25) { + inspected = `${inspected.slice(0, 25)}...`; + } + msg += `. Received type ${typeof actual} (${inspected})`; + } + return msg; + }, + TypeError + ); + E( + "ERR_INVALID_ARG_VALUE", + (name, value, reason = "is invalid") => { + let inspected = inspect(value); + if (inspected.length > 128) { + inspected = inspected.slice(0, 128) + "..."; + } + const type = name.includes(".") ? "property" : "argument"; + return `The ${type} '${name}' ${reason}. Received ${inspected}`; + }, + TypeError + ); + E( + "ERR_INVALID_RETURN_VALUE", + (input, name, value) => { + var _value$constructor; + const type = value !== null && value !== void 0 && (_value$constructor = value.constructor) !== null && _value$constructor !== void 0 && _value$constructor.name ? `instance of ${value.constructor.name}` : `type ${typeof value}`; + return `Expected ${input} to be returned from the "${name}" function but got ${type}.`; + }, + TypeError + ); + E( + "ERR_MISSING_ARGS", + (...args) => { + assert(args.length > 0, "At least one arg needs to be specified"); + let msg; + const len = args.length; + args = (Array.isArray(args) ? args : [args]).map((a) => `"${a}"`).join(" or "); + switch (len) { + case 1: + msg += `The ${args[0]} argument`; + break; + case 2: + msg += `The ${args[0]} and ${args[1]} arguments`; + break; + default: + { + const last = args.pop(); + msg += `The ${args.join(", ")}, and ${last} arguments`; + } + break; + } + return `${msg} must be specified`; + }, + TypeError + ); + E( + "ERR_OUT_OF_RANGE", + (str, range, input) => { + assert(range, 'Missing "range" argument'); + let received; + if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { + received = addNumericalSeparator(String(input)); + } else if (typeof input === "bigint") { + received = String(input); + if (input > 2n ** 32n || input < -(2n ** 32n)) { + received = addNumericalSeparator(received); + } + received += "n"; + } else { + received = inspect(input); + } + return `The value of "${str}" is out of range. It must be ${range}. Received ${received}`; + }, + RangeError + ); + E("ERR_MULTIPLE_CALLBACK", "Callback called multiple times", Error); + E("ERR_METHOD_NOT_IMPLEMENTED", "The %s method is not implemented", Error); + E("ERR_STREAM_ALREADY_FINISHED", "Cannot call %s after a stream was finished", Error); + E("ERR_STREAM_CANNOT_PIPE", "Cannot pipe, not readable", Error); + E("ERR_STREAM_DESTROYED", "Cannot call %s after a stream was destroyed", Error); + E("ERR_STREAM_NULL_VALUES", "May not write null values to stream", TypeError); + E("ERR_STREAM_PREMATURE_CLOSE", "Premature close", Error); + E("ERR_STREAM_PUSH_AFTER_EOF", "stream.push() after EOF", Error); + E("ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "stream.unshift() after end event", Error); + E("ERR_STREAM_WRITE_AFTER_END", "write after end", Error); + E("ERR_UNKNOWN_ENCODING", "Unknown encoding: %s", TypeError); + module.exports = { + AbortError, + aggregateTwoErrors: hideStackFrames(aggregateTwoErrors), + hideStackFrames, + codes + }; + } +}); + +// node_modules/readable-stream/lib/internal/validators.js +var require_validators = __commonJS({ + "node_modules/readable-stream/lib/internal/validators.js"(exports, module) { + "use strict"; + var { + ArrayIsArray, + ArrayPrototypeIncludes, + ArrayPrototypeJoin, + ArrayPrototypeMap, + NumberIsInteger, + NumberIsNaN, + NumberMAX_SAFE_INTEGER, + NumberMIN_SAFE_INTEGER, + NumberParseInt, + ObjectPrototypeHasOwnProperty, + RegExpPrototypeExec, + String: String2, + StringPrototypeToUpperCase, + StringPrototypeTrim + } = require_primordials(); + var { + hideStackFrames, + codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL } + } = require_errors(); + var { normalizeEncoding } = require_util(); + var { isAsyncFunction, isArrayBufferView } = require_util().types; + var signals = {}; + function isInt32(value) { + return value === (value | 0); + } + function isUint32(value) { + return value === value >>> 0; + } + var octalReg = /^[0-7]+$/; + var modeDesc = "must be a 32-bit unsigned integer or an octal string"; + function parseFileMode(value, name, def) { + if (typeof value === "undefined") { + value = def; + } + if (typeof value === "string") { + if (RegExpPrototypeExec(octalReg, value) === null) { + throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc); + } + value = NumberParseInt(value, 8); + } + validateUint32(value, name); + return value; + } + var validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => { + if (typeof value !== "number") + throw new ERR_INVALID_ARG_TYPE2(name, "number", value); + if (!NumberIsInteger(value)) + throw new ERR_OUT_OF_RANGE(name, "an integer", value); + if (value < min || value > max) + throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); + }); + var validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => { + if (typeof value !== "number") { + throw new ERR_INVALID_ARG_TYPE2(name, "number", value); + } + if (!NumberIsInteger(value)) { + throw new ERR_OUT_OF_RANGE(name, "an integer", value); + } + if (value < min || value > max) { + throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); + } + }); + var validateUint32 = hideStackFrames((value, name, positive = false) => { + if (typeof value !== "number") { + throw new ERR_INVALID_ARG_TYPE2(name, "number", value); + } + if (!NumberIsInteger(value)) { + throw new ERR_OUT_OF_RANGE(name, "an integer", value); + } + const min = positive ? 1 : 0; + const max = 4294967295; + if (value < min || value > max) { + throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); + } + }); + function validateString(value, name) { + if (typeof value !== "string") + throw new ERR_INVALID_ARG_TYPE2(name, "string", value); + } + function validateNumber(value, name, min = void 0, max) { + if (typeof value !== "number") + throw new ERR_INVALID_ARG_TYPE2(name, "number", value); + if (min != null && value < min || max != null && value > max || (min != null || max != null) && NumberIsNaN(value)) { + throw new ERR_OUT_OF_RANGE( + name, + `${min != null ? `>= ${min}` : ""}${min != null && max != null ? " && " : ""}${max != null ? `<= ${max}` : ""}`, + value + ); + } + } + var validateOneOf = hideStackFrames((value, name, oneOf) => { + if (!ArrayPrototypeIncludes(oneOf, value)) { + const allowed = ArrayPrototypeJoin( + ArrayPrototypeMap(oneOf, (v) => typeof v === "string" ? `'${v}'` : String2(v)), + ", " + ); + const reason = "must be one of: " + allowed; + throw new ERR_INVALID_ARG_VALUE(name, value, reason); + } + }); + function validateBoolean(value, name) { + if (typeof value !== "boolean") + throw new ERR_INVALID_ARG_TYPE2(name, "boolean", value); + } + function getOwnPropertyValueOrDefault(options, key, defaultValue) { + return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]; + } + var validateObject = hideStackFrames((value, name, options = null) => { + const allowArray = getOwnPropertyValueOrDefault(options, "allowArray", false); + const allowFunction = getOwnPropertyValueOrDefault(options, "allowFunction", false); + const nullable = getOwnPropertyValueOrDefault(options, "nullable", false); + if (!nullable && value === null || !allowArray && ArrayIsArray(value) || typeof value !== "object" && (!allowFunction || typeof value !== "function")) { + throw new ERR_INVALID_ARG_TYPE2(name, "Object", value); + } + }); + var validateDictionary = hideStackFrames((value, name) => { + if (value != null && typeof value !== "object" && typeof value !== "function") { + throw new ERR_INVALID_ARG_TYPE2(name, "a dictionary", value); + } + }); + var validateArray = hideStackFrames((value, name, minLength = 0) => { + if (!ArrayIsArray(value)) { + throw new ERR_INVALID_ARG_TYPE2(name, "Array", value); + } + if (value.length < minLength) { + const reason = `must be longer than ${minLength}`; + throw new ERR_INVALID_ARG_VALUE(name, value, reason); + } + }); + function validateStringArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateString(value[i], `${name}[${i}]`); + } + } + function validateBooleanArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateBoolean(value[i], `${name}[${i}]`); + } + } + function validateAbortSignalArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + const signal = value[i]; + const indexedName = `${name}[${i}]`; + if (signal == null) { + throw new ERR_INVALID_ARG_TYPE2(indexedName, "AbortSignal", signal); + } + validateAbortSignal(signal, indexedName); + } + } + function validateSignalName(signal, name = "signal") { + validateString(signal, name); + if (signals[signal] === void 0) { + if (signals[StringPrototypeToUpperCase(signal)] !== void 0) { + throw new ERR_UNKNOWN_SIGNAL(signal + " (signals must use all capital letters)"); + } + throw new ERR_UNKNOWN_SIGNAL(signal); + } + } + var validateBuffer = hideStackFrames((buffer2, name = "buffer") => { + if (!isArrayBufferView(buffer2)) { + throw new ERR_INVALID_ARG_TYPE2(name, ["Buffer", "TypedArray", "DataView"], buffer2); + } + }); + function validateEncoding(data, encoding) { + const normalizedEncoding = normalizeEncoding(encoding); + const length = data.length; + if (normalizedEncoding === "hex" && length % 2 !== 0) { + throw new ERR_INVALID_ARG_VALUE("encoding", encoding, `is invalid for data of length ${length}`); + } + } + function validatePort(port, name = "Port", allowZero = true) { + if (typeof port !== "number" && typeof port !== "string" || typeof port === "string" && StringPrototypeTrim(port).length === 0 || +port !== +port >>> 0 || port > 65535 || port === 0 && !allowZero) { + throw new ERR_SOCKET_BAD_PORT(name, port, allowZero); + } + return port | 0; + } + var validateAbortSignal = hideStackFrames((signal, name) => { + if (signal !== void 0 && (signal === null || typeof signal !== "object" || !("aborted" in signal))) { + throw new ERR_INVALID_ARG_TYPE2(name, "AbortSignal", signal); + } + }); + var validateFunction = hideStackFrames((value, name) => { + if (typeof value !== "function") + throw new ERR_INVALID_ARG_TYPE2(name, "Function", value); + }); + var validatePlainFunction = hideStackFrames((value, name) => { + if (typeof value !== "function" || isAsyncFunction(value)) + throw new ERR_INVALID_ARG_TYPE2(name, "Function", value); + }); + var validateUndefined = hideStackFrames((value, name) => { + if (value !== void 0) + throw new ERR_INVALID_ARG_TYPE2(name, "undefined", value); + }); + function validateUnion(value, name, union) { + if (!ArrayPrototypeIncludes(union, value)) { + throw new ERR_INVALID_ARG_TYPE2(name, `('${ArrayPrototypeJoin(union, "|")}')`, value); + } + } + var linkValueRegExp = /^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/; + function validateLinkHeaderFormat(value, name) { + if (typeof value === "undefined" || !RegExpPrototypeExec(linkValueRegExp, value)) { + throw new ERR_INVALID_ARG_VALUE( + name, + value, + 'must be an array or string of format "; rel=preload; as=style"' + ); + } + } + function validateLinkHeaderValue(hints) { + if (typeof hints === "string") { + validateLinkHeaderFormat(hints, "hints"); + return hints; + } else if (ArrayIsArray(hints)) { + const hintsLength = hints.length; + let result = ""; + if (hintsLength === 0) { + return result; + } + for (let i = 0; i < hintsLength; i++) { + const link = hints[i]; + validateLinkHeaderFormat(link, "hints"); + result += link; + if (i !== hintsLength - 1) { + result += ", "; + } + } + return result; + } + throw new ERR_INVALID_ARG_VALUE( + "hints", + hints, + 'must be an array or string of format "; rel=preload; as=style"' + ); + } + module.exports = { + isInt32, + isUint32, + parseFileMode, + validateArray, + validateStringArray, + validateBooleanArray, + validateAbortSignalArray, + validateBoolean, + validateBuffer, + validateDictionary, + validateEncoding, + validateFunction, + validateInt32, + validateInteger, + validateNumber, + validateObject, + validateOneOf, + validatePlainFunction, + validatePort, + validateSignalName, + validateString, + validateUint32, + validateUndefined, + validateUnion, + validateAbortSignal, + validateLinkHeaderValue + }; + } +}); + +// node_modules/process/index.js +var require_process = __commonJS({ + "node_modules/process/index.js"(exports, module) { + module.exports = global.process; + } +}); + +// node_modules/readable-stream/lib/internal/streams/utils.js +var require_utils = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/utils.js"(exports, module) { + "use strict"; + var { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require_primordials(); + var kIsDestroyed = SymbolFor("nodejs.stream.destroyed"); + var kIsErrored = SymbolFor("nodejs.stream.errored"); + var kIsReadable = SymbolFor("nodejs.stream.readable"); + var kIsWritable = SymbolFor("nodejs.stream.writable"); + var kIsDisturbed = SymbolFor("nodejs.stream.disturbed"); + var kIsClosedPromise = SymbolFor("nodejs.webstream.isClosedPromise"); + var kControllerErrorFunction = SymbolFor("nodejs.webstream.controllerErrorFunction"); + function isReadableNodeStream(obj, strict = false) { + var _obj$_readableState; + return !!(obj && typeof obj.pipe === "function" && typeof obj.on === "function" && (!strict || typeof obj.pause === "function" && typeof obj.resume === "function") && (!obj._writableState || ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === void 0 ? void 0 : _obj$_readableState.readable) !== false) && // Duplex + (!obj._writableState || obj._readableState)); + } + function isWritableNodeStream(obj) { + var _obj$_writableState; + return !!(obj && typeof obj.write === "function" && typeof obj.on === "function" && (!obj._readableState || ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === void 0 ? void 0 : _obj$_writableState.writable) !== false)); + } + function isDuplexNodeStream(obj) { + return !!(obj && typeof obj.pipe === "function" && obj._readableState && typeof obj.on === "function" && typeof obj.write === "function"); + } + function isNodeStream(obj) { + return obj && (obj._readableState || obj._writableState || typeof obj.write === "function" && typeof obj.on === "function" || typeof obj.pipe === "function" && typeof obj.on === "function"); + } + function isReadableStream(obj) { + return !!(obj && !isNodeStream(obj) && typeof obj.pipeThrough === "function" && typeof obj.getReader === "function" && typeof obj.cancel === "function"); + } + function isWritableStream(obj) { + return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === "function" && typeof obj.abort === "function"); + } + function isTransformStream(obj) { + return !!(obj && !isNodeStream(obj) && typeof obj.readable === "object" && typeof obj.writable === "object"); + } + function isWebStream(obj) { + return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj); + } + function isIterable(obj, isAsync) { + if (obj == null) + return false; + if (isAsync === true) + return typeof obj[SymbolAsyncIterator] === "function"; + if (isAsync === false) + return typeof obj[SymbolIterator] === "function"; + return typeof obj[SymbolAsyncIterator] === "function" || typeof obj[SymbolIterator] === "function"; + } + function isDestroyed(stream2) { + if (!isNodeStream(stream2)) + return null; + const wState = stream2._writableState; + const rState = stream2._readableState; + const state = wState || rState; + return !!(stream2.destroyed || stream2[kIsDestroyed] || state !== null && state !== void 0 && state.destroyed); + } + function isWritableEnded(stream2) { + if (!isWritableNodeStream(stream2)) + return null; + if (stream2.writableEnded === true) + return true; + const wState = stream2._writableState; + if (wState !== null && wState !== void 0 && wState.errored) + return false; + if (typeof (wState === null || wState === void 0 ? void 0 : wState.ended) !== "boolean") + return null; + return wState.ended; + } + function isWritableFinished(stream2, strict) { + if (!isWritableNodeStream(stream2)) + return null; + if (stream2.writableFinished === true) + return true; + const wState = stream2._writableState; + if (wState !== null && wState !== void 0 && wState.errored) + return false; + if (typeof (wState === null || wState === void 0 ? void 0 : wState.finished) !== "boolean") + return null; + return !!(wState.finished || strict === false && wState.ended === true && wState.length === 0); + } + function isReadableEnded(stream2) { + if (!isReadableNodeStream(stream2)) + return null; + if (stream2.readableEnded === true) + return true; + const rState = stream2._readableState; + if (!rState || rState.errored) + return false; + if (typeof (rState === null || rState === void 0 ? void 0 : rState.ended) !== "boolean") + return null; + return rState.ended; + } + function isReadableFinished(stream2, strict) { + if (!isReadableNodeStream(stream2)) + return null; + const rState = stream2._readableState; + if (rState !== null && rState !== void 0 && rState.errored) + return false; + if (typeof (rState === null || rState === void 0 ? void 0 : rState.endEmitted) !== "boolean") + return null; + return !!(rState.endEmitted || strict === false && rState.ended === true && rState.length === 0); + } + function isReadable(stream2) { + if (stream2 && stream2[kIsReadable] != null) + return stream2[kIsReadable]; + if (typeof (stream2 === null || stream2 === void 0 ? void 0 : stream2.readable) !== "boolean") + return null; + if (isDestroyed(stream2)) + return false; + return isReadableNodeStream(stream2) && stream2.readable && !isReadableFinished(stream2); + } + function isWritable(stream2) { + if (stream2 && stream2[kIsWritable] != null) + return stream2[kIsWritable]; + if (typeof (stream2 === null || stream2 === void 0 ? void 0 : stream2.writable) !== "boolean") + return null; + if (isDestroyed(stream2)) + return false; + return isWritableNodeStream(stream2) && stream2.writable && !isWritableEnded(stream2); + } + function isFinished(stream2, opts) { + if (!isNodeStream(stream2)) { + return null; + } + if (isDestroyed(stream2)) { + return true; + } + if ((opts === null || opts === void 0 ? void 0 : opts.readable) !== false && isReadable(stream2)) { + return false; + } + if ((opts === null || opts === void 0 ? void 0 : opts.writable) !== false && isWritable(stream2)) { + return false; + } + return true; + } + function isWritableErrored(stream2) { + var _stream$_writableStat, _stream$_writableStat2; + if (!isNodeStream(stream2)) { + return null; + } + if (stream2.writableErrored) { + return stream2.writableErrored; + } + return (_stream$_writableStat = (_stream$_writableStat2 = stream2._writableState) === null || _stream$_writableStat2 === void 0 ? void 0 : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== void 0 ? _stream$_writableStat : null; + } + function isReadableErrored(stream2) { + var _stream$_readableStat, _stream$_readableStat2; + if (!isNodeStream(stream2)) { + return null; + } + if (stream2.readableErrored) { + return stream2.readableErrored; + } + return (_stream$_readableStat = (_stream$_readableStat2 = stream2._readableState) === null || _stream$_readableStat2 === void 0 ? void 0 : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== void 0 ? _stream$_readableStat : null; + } + function isClosed(stream2) { + if (!isNodeStream(stream2)) { + return null; + } + if (typeof stream2.closed === "boolean") { + return stream2.closed; + } + const wState = stream2._writableState; + const rState = stream2._readableState; + if (typeof (wState === null || wState === void 0 ? void 0 : wState.closed) === "boolean" || typeof (rState === null || rState === void 0 ? void 0 : rState.closed) === "boolean") { + return (wState === null || wState === void 0 ? void 0 : wState.closed) || (rState === null || rState === void 0 ? void 0 : rState.closed); + } + if (typeof stream2._closed === "boolean" && isOutgoingMessage(stream2)) { + return stream2._closed; + } + return null; + } + function isOutgoingMessage(stream2) { + return typeof stream2._closed === "boolean" && typeof stream2._defaultKeepAlive === "boolean" && typeof stream2._removedConnection === "boolean" && typeof stream2._removedContLen === "boolean"; + } + function isServerResponse(stream2) { + return typeof stream2._sent100 === "boolean" && isOutgoingMessage(stream2); + } + function isServerRequest(stream2) { + var _stream$req; + return typeof stream2._consuming === "boolean" && typeof stream2._dumped === "boolean" && ((_stream$req = stream2.req) === null || _stream$req === void 0 ? void 0 : _stream$req.upgradeOrConnect) === void 0; + } + function willEmitClose(stream2) { + if (!isNodeStream(stream2)) + return null; + const wState = stream2._writableState; + const rState = stream2._readableState; + const state = wState || rState; + return !state && isServerResponse(stream2) || !!(state && state.autoDestroy && state.emitClose && state.closed === false); + } + function isDisturbed(stream2) { + var _stream$kIsDisturbed; + return !!(stream2 && ((_stream$kIsDisturbed = stream2[kIsDisturbed]) !== null && _stream$kIsDisturbed !== void 0 ? _stream$kIsDisturbed : stream2.readableDidRead || stream2.readableAborted)); + } + function isErrored(stream2) { + var _ref, _ref2, _ref3, _ref4, _ref5, _stream$kIsErrored, _stream$_readableStat3, _stream$_writableStat3, _stream$_readableStat4, _stream$_writableStat4; + return !!(stream2 && ((_ref = (_ref2 = (_ref3 = (_ref4 = (_ref5 = (_stream$kIsErrored = stream2[kIsErrored]) !== null && _stream$kIsErrored !== void 0 ? _stream$kIsErrored : stream2.readableErrored) !== null && _ref5 !== void 0 ? _ref5 : stream2.writableErrored) !== null && _ref4 !== void 0 ? _ref4 : (_stream$_readableStat3 = stream2._readableState) === null || _stream$_readableStat3 === void 0 ? void 0 : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== void 0 ? _ref3 : (_stream$_writableStat3 = stream2._writableState) === null || _stream$_writableStat3 === void 0 ? void 0 : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== void 0 ? _ref2 : (_stream$_readableStat4 = stream2._readableState) === null || _stream$_readableStat4 === void 0 ? void 0 : _stream$_readableStat4.errored) !== null && _ref !== void 0 ? _ref : (_stream$_writableStat4 = stream2._writableState) === null || _stream$_writableStat4 === void 0 ? void 0 : _stream$_writableStat4.errored)); + } + module.exports = { + isDestroyed, + kIsDestroyed, + isDisturbed, + kIsDisturbed, + isErrored, + kIsErrored, + isReadable, + kIsReadable, + kIsClosedPromise, + kControllerErrorFunction, + kIsWritable, + isClosed, + isDuplexNodeStream, + isFinished, + isIterable, + isReadableNodeStream, + isReadableStream, + isReadableEnded, + isReadableFinished, + isReadableErrored, + isNodeStream, + isWebStream, + isWritable, + isWritableNodeStream, + isWritableStream, + isWritableEnded, + isWritableFinished, + isWritableErrored, + isServerRequest, + isServerResponse, + willEmitClose, + isTransformStream + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/end-of-stream.js +var require_end_of_stream = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/end-of-stream.js"(exports, module) { + var process2 = require_process(); + var { AbortError, codes } = require_errors(); + var { ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2, ERR_STREAM_PREMATURE_CLOSE } = codes; + var { kEmptyObject, once: once2 } = require_util(); + var { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require_validators(); + var { Promise: Promise2, PromisePrototypeThen, SymbolDispose } = require_primordials(); + var { + isClosed, + isReadable, + isReadableNodeStream, + isReadableStream, + isReadableFinished, + isReadableErrored, + isWritable, + isWritableNodeStream, + isWritableStream, + isWritableFinished, + isWritableErrored, + isNodeStream, + willEmitClose: _willEmitClose, + kIsClosedPromise + } = require_utils(); + var addAbortListener; + function isRequest(stream2) { + return stream2.setHeader && typeof stream2.abort === "function"; + } + var nop = () => { + }; + function eos(stream2, options, callback) { + var _options$readable, _options$writable; + if (arguments.length === 2) { + callback = options; + options = kEmptyObject; + } else if (options == null) { + options = kEmptyObject; + } else { + validateObject(options, "options"); + } + validateFunction(callback, "callback"); + validateAbortSignal(options.signal, "options.signal"); + callback = once2(callback); + if (isReadableStream(stream2) || isWritableStream(stream2)) { + return eosWeb(stream2, options, callback); + } + if (!isNodeStream(stream2)) { + throw new ERR_INVALID_ARG_TYPE2("stream", ["ReadableStream", "WritableStream", "Stream"], stream2); + } + const readable = (_options$readable = options.readable) !== null && _options$readable !== void 0 ? _options$readable : isReadableNodeStream(stream2); + const writable = (_options$writable = options.writable) !== null && _options$writable !== void 0 ? _options$writable : isWritableNodeStream(stream2); + const wState = stream2._writableState; + const rState = stream2._readableState; + const onlegacyfinish = () => { + if (!stream2.writable) { + onfinish(); + } + }; + let willEmitClose = _willEmitClose(stream2) && isReadableNodeStream(stream2) === readable && isWritableNodeStream(stream2) === writable; + let writableFinished = isWritableFinished(stream2, false); + const onfinish = () => { + writableFinished = true; + if (stream2.destroyed) { + willEmitClose = false; + } + if (willEmitClose && (!stream2.readable || readable)) { + return; + } + if (!readable || readableFinished) { + callback.call(stream2); + } + }; + let readableFinished = isReadableFinished(stream2, false); + const onend = () => { + readableFinished = true; + if (stream2.destroyed) { + willEmitClose = false; + } + if (willEmitClose && (!stream2.writable || writable)) { + return; + } + if (!writable || writableFinished) { + callback.call(stream2); + } + }; + const onerror = (err) => { + callback.call(stream2, err); + }; + let closed = isClosed(stream2); + const onclose = () => { + closed = true; + const errored = isWritableErrored(stream2) || isReadableErrored(stream2); + if (errored && typeof errored !== "boolean") { + return callback.call(stream2, errored); + } + if (readable && !readableFinished && isReadableNodeStream(stream2, true)) { + if (!isReadableFinished(stream2, false)) + return callback.call(stream2, new ERR_STREAM_PREMATURE_CLOSE()); + } + if (writable && !writableFinished) { + if (!isWritableFinished(stream2, false)) + return callback.call(stream2, new ERR_STREAM_PREMATURE_CLOSE()); + } + callback.call(stream2); + }; + const onclosed = () => { + closed = true; + const errored = isWritableErrored(stream2) || isReadableErrored(stream2); + if (errored && typeof errored !== "boolean") { + return callback.call(stream2, errored); + } + callback.call(stream2); + }; + const onrequest = () => { + stream2.req.on("finish", onfinish); + }; + if (isRequest(stream2)) { + stream2.on("complete", onfinish); + if (!willEmitClose) { + stream2.on("abort", onclose); + } + if (stream2.req) { + onrequest(); + } else { + stream2.on("request", onrequest); + } + } else if (writable && !wState) { + stream2.on("end", onlegacyfinish); + stream2.on("close", onlegacyfinish); + } + if (!willEmitClose && typeof stream2.aborted === "boolean") { + stream2.on("aborted", onclose); + } + stream2.on("end", onend); + stream2.on("finish", onfinish); + if (options.error !== false) { + stream2.on("error", onerror); + } + stream2.on("close", onclose); + if (closed) { + process2.nextTick(onclose); + } else if (wState !== null && wState !== void 0 && wState.errorEmitted || rState !== null && rState !== void 0 && rState.errorEmitted) { + if (!willEmitClose) { + process2.nextTick(onclosed); + } + } else if (!readable && (!willEmitClose || isReadable(stream2)) && (writableFinished || isWritable(stream2) === false)) { + process2.nextTick(onclosed); + } else if (!writable && (!willEmitClose || isWritable(stream2)) && (readableFinished || isReadable(stream2) === false)) { + process2.nextTick(onclosed); + } else if (rState && stream2.req && stream2.aborted) { + process2.nextTick(onclosed); + } + const cleanup = () => { + callback = nop; + stream2.removeListener("aborted", onclose); + stream2.removeListener("complete", onfinish); + stream2.removeListener("abort", onclose); + stream2.removeListener("request", onrequest); + if (stream2.req) + stream2.req.removeListener("finish", onfinish); + stream2.removeListener("end", onlegacyfinish); + stream2.removeListener("close", onlegacyfinish); + stream2.removeListener("finish", onfinish); + stream2.removeListener("end", onend); + stream2.removeListener("error", onerror); + stream2.removeListener("close", onclose); + }; + if (options.signal && !closed) { + const abort = () => { + const endCallback = callback; + cleanup(); + endCallback.call( + stream2, + new AbortError(void 0, { + cause: options.signal.reason + }) + ); + }; + if (options.signal.aborted) { + process2.nextTick(abort); + } else { + addAbortListener = addAbortListener || require_util().addAbortListener; + const disposable = addAbortListener(options.signal, abort); + const originalCallback = callback; + callback = once2((...args) => { + disposable[SymbolDispose](); + originalCallback.apply(stream2, args); + }); + } + } + return cleanup; + } + function eosWeb(stream2, options, callback) { + let isAborted = false; + let abort = nop; + if (options.signal) { + abort = () => { + isAborted = true; + callback.call( + stream2, + new AbortError(void 0, { + cause: options.signal.reason + }) + ); + }; + if (options.signal.aborted) { + process2.nextTick(abort); + } else { + addAbortListener = addAbortListener || require_util().addAbortListener; + const disposable = addAbortListener(options.signal, abort); + const originalCallback = callback; + callback = once2((...args) => { + disposable[SymbolDispose](); + originalCallback.apply(stream2, args); + }); + } + } + const resolverFn = (...args) => { + if (!isAborted) { + process2.nextTick(() => callback.apply(stream2, args)); + } + }; + PromisePrototypeThen(stream2[kIsClosedPromise].promise, resolverFn, resolverFn); + return nop; + } + function finished3(stream2, opts) { + var _opts; + let autoCleanup = false; + if (opts === null) { + opts = kEmptyObject; + } + if ((_opts = opts) !== null && _opts !== void 0 && _opts.cleanup) { + validateBoolean(opts.cleanup, "cleanup"); + autoCleanup = opts.cleanup; + } + return new Promise2((resolve, reject) => { + const cleanup = eos(stream2, opts, (err) => { + if (autoCleanup) { + cleanup(); + } + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + } + module.exports = eos; + module.exports.finished = finished3; + } +}); + +// node_modules/readable-stream/lib/internal/streams/destroy.js +var require_destroy = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/destroy.js"(exports, module) { + "use strict"; + var process2 = require_process(); + var { + aggregateTwoErrors, + codes: { ERR_MULTIPLE_CALLBACK }, + AbortError + } = require_errors(); + var { Symbol: Symbol2 } = require_primordials(); + var { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require_utils(); + var kDestroy = Symbol2("kDestroy"); + var kConstruct = Symbol2("kConstruct"); + function checkError(err, w, r) { + if (err) { + err.stack; + if (w && !w.errored) { + w.errored = err; + } + if (r && !r.errored) { + r.errored = err; + } + } + } + function destroy(err, cb) { + const r = this._readableState; + const w = this._writableState; + const s = w || r; + if (w !== null && w !== void 0 && w.destroyed || r !== null && r !== void 0 && r.destroyed) { + if (typeof cb === "function") { + cb(); + } + return this; + } + checkError(err, w, r); + if (w) { + w.destroyed = true; + } + if (r) { + r.destroyed = true; + } + if (!s.constructed) { + this.once(kDestroy, function(er) { + _destroy(this, aggregateTwoErrors(er, err), cb); + }); + } else { + _destroy(this, err, cb); + } + return this; + } + function _destroy(self, err, cb) { + let called = false; + function onDestroy(err2) { + if (called) { + return; + } + called = true; + const r = self._readableState; + const w = self._writableState; + checkError(err2, w, r); + if (w) { + w.closed = true; + } + if (r) { + r.closed = true; + } + if (typeof cb === "function") { + cb(err2); + } + if (err2) { + process2.nextTick(emitErrorCloseNT, self, err2); + } else { + process2.nextTick(emitCloseNT, self); + } + } + try { + self._destroy(err || null, onDestroy); + } catch (err2) { + onDestroy(err2); + } + } + function emitErrorCloseNT(self, err) { + emitErrorNT(self, err); + emitCloseNT(self); + } + function emitCloseNT(self) { + const r = self._readableState; + const w = self._writableState; + if (w) { + w.closeEmitted = true; + } + if (r) { + r.closeEmitted = true; + } + if (w !== null && w !== void 0 && w.emitClose || r !== null && r !== void 0 && r.emitClose) { + self.emit("close"); + } + } + function emitErrorNT(self, err) { + const r = self._readableState; + const w = self._writableState; + if (w !== null && w !== void 0 && w.errorEmitted || r !== null && r !== void 0 && r.errorEmitted) { + return; + } + if (w) { + w.errorEmitted = true; + } + if (r) { + r.errorEmitted = true; + } + self.emit("error", err); + } + function undestroy() { + const r = this._readableState; + const w = this._writableState; + if (r) { + r.constructed = true; + r.closed = false; + r.closeEmitted = false; + r.destroyed = false; + r.errored = null; + r.errorEmitted = false; + r.reading = false; + r.ended = r.readable === false; + r.endEmitted = r.readable === false; + } + if (w) { + w.constructed = true; + w.destroyed = false; + w.closed = false; + w.closeEmitted = false; + w.errored = null; + w.errorEmitted = false; + w.finalCalled = false; + w.prefinished = false; + w.ended = w.writable === false; + w.ending = w.writable === false; + w.finished = w.writable === false; + } + } + function errorOrDestroy(stream2, err, sync) { + const r = stream2._readableState; + const w = stream2._writableState; + if (w !== null && w !== void 0 && w.destroyed || r !== null && r !== void 0 && r.destroyed) { + return this; + } + if (r !== null && r !== void 0 && r.autoDestroy || w !== null && w !== void 0 && w.autoDestroy) + stream2.destroy(err); + else if (err) { + err.stack; + if (w && !w.errored) { + w.errored = err; + } + if (r && !r.errored) { + r.errored = err; + } + if (sync) { + process2.nextTick(emitErrorNT, stream2, err); + } else { + emitErrorNT(stream2, err); + } + } + } + function construct(stream2, cb) { + if (typeof stream2._construct !== "function") { + return; + } + const r = stream2._readableState; + const w = stream2._writableState; + if (r) { + r.constructed = false; + } + if (w) { + w.constructed = false; + } + stream2.once(kConstruct, cb); + if (stream2.listenerCount(kConstruct) > 1) { + return; + } + process2.nextTick(constructNT, stream2); + } + function constructNT(stream2) { + let called = false; + function onConstruct(err) { + if (called) { + errorOrDestroy(stream2, err !== null && err !== void 0 ? err : new ERR_MULTIPLE_CALLBACK()); + return; + } + called = true; + const r = stream2._readableState; + const w = stream2._writableState; + const s = w || r; + if (r) { + r.constructed = true; + } + if (w) { + w.constructed = true; + } + if (s.destroyed) { + stream2.emit(kDestroy, err); + } else if (err) { + errorOrDestroy(stream2, err, true); + } else { + process2.nextTick(emitConstructNT, stream2); + } + } + try { + stream2._construct((err) => { + process2.nextTick(onConstruct, err); + }); + } catch (err) { + process2.nextTick(onConstruct, err); + } + } + function emitConstructNT(stream2) { + stream2.emit(kConstruct); + } + function isRequest(stream2) { + return (stream2 === null || stream2 === void 0 ? void 0 : stream2.setHeader) && typeof stream2.abort === "function"; + } + function emitCloseLegacy(stream2) { + stream2.emit("close"); + } + function emitErrorCloseLegacy(stream2, err) { + stream2.emit("error", err); + process2.nextTick(emitCloseLegacy, stream2); + } + function destroyer(stream2, err) { + if (!stream2 || isDestroyed(stream2)) { + return; + } + if (!err && !isFinished(stream2)) { + err = new AbortError(); + } + if (isServerRequest(stream2)) { + stream2.socket = null; + stream2.destroy(err); + } else if (isRequest(stream2)) { + stream2.abort(); + } else if (isRequest(stream2.req)) { + stream2.req.abort(); + } else if (typeof stream2.destroy === "function") { + stream2.destroy(err); + } else if (typeof stream2.close === "function") { + stream2.close(); + } else if (err) { + process2.nextTick(emitErrorCloseLegacy, stream2, err); + } else { + process2.nextTick(emitCloseLegacy, stream2); + } + if (!stream2.destroyed) { + stream2[kIsDestroyed] = true; + } + } + module.exports = { + construct, + destroyer, + destroy, + undestroy, + errorOrDestroy + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/legacy.js +var require_legacy = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/legacy.js"(exports, module) { + "use strict"; + var { ArrayIsArray, ObjectSetPrototypeOf } = require_primordials(); + var { EventEmitter: EE } = __require("events"); + function Stream2(opts) { + EE.call(this, opts); + } + ObjectSetPrototypeOf(Stream2.prototype, EE.prototype); + ObjectSetPrototypeOf(Stream2, EE); + Stream2.prototype.pipe = function(dest, options) { + const source = this; + function ondata(chunk) { + if (dest.writable && dest.write(chunk) === false && source.pause) { + source.pause(); + } + } + source.on("data", ondata); + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + dest.on("drain", ondrain); + if (!dest._isStdio && (!options || options.end !== false)) { + source.on("end", onend); + source.on("close", onclose); + } + let didOnEnd = false; + function onend() { + if (didOnEnd) + return; + didOnEnd = true; + dest.end(); + } + function onclose() { + if (didOnEnd) + return; + didOnEnd = true; + if (typeof dest.destroy === "function") + dest.destroy(); + } + function onerror(er) { + cleanup(); + if (EE.listenerCount(this, "error") === 0) { + this.emit("error", er); + } + } + prependListener(source, "error", onerror); + prependListener(dest, "error", onerror); + function cleanup() { + source.removeListener("data", ondata); + dest.removeListener("drain", ondrain); + source.removeListener("end", onend); + source.removeListener("close", onclose); + source.removeListener("error", onerror); + dest.removeListener("error", onerror); + source.removeListener("end", cleanup); + source.removeListener("close", cleanup); + dest.removeListener("close", cleanup); + } + source.on("end", cleanup); + source.on("close", cleanup); + dest.on("close", cleanup); + dest.emit("pipe", source); + return dest; + }; + function prependListener(emitter, event, fn) { + if (typeof emitter.prependListener === "function") + return emitter.prependListener(event, fn); + if (!emitter._events || !emitter._events[event]) + emitter.on(event, fn); + else if (ArrayIsArray(emitter._events[event])) + emitter._events[event].unshift(fn); + else + emitter._events[event] = [fn, emitter._events[event]]; + } + module.exports = { + Stream: Stream2, + prependListener + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/add-abort-signal.js +var require_add_abort_signal = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/add-abort-signal.js"(exports, module) { + "use strict"; + var { SymbolDispose } = require_primordials(); + var { AbortError, codes } = require_errors(); + var { isNodeStream, isWebStream, kControllerErrorFunction } = require_utils(); + var eos = require_end_of_stream(); + var { ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2 } = codes; + var addAbortListener; + var validateAbortSignal = (signal, name) => { + if (typeof signal !== "object" || !("aborted" in signal)) { + throw new ERR_INVALID_ARG_TYPE2(name, "AbortSignal", signal); + } + }; + module.exports.addAbortSignal = function addAbortSignal(signal, stream2) { + validateAbortSignal(signal, "signal"); + if (!isNodeStream(stream2) && !isWebStream(stream2)) { + throw new ERR_INVALID_ARG_TYPE2("stream", ["ReadableStream", "WritableStream", "Stream"], stream2); + } + return module.exports.addAbortSignalNoValidate(signal, stream2); + }; + module.exports.addAbortSignalNoValidate = function(signal, stream2) { + if (typeof signal !== "object" || !("aborted" in signal)) { + return stream2; + } + const onAbort = isNodeStream(stream2) ? () => { + stream2.destroy( + new AbortError(void 0, { + cause: signal.reason + }) + ); + } : () => { + stream2[kControllerErrorFunction]( + new AbortError(void 0, { + cause: signal.reason + }) + ); + }; + if (signal.aborted) { + onAbort(); + } else { + addAbortListener = addAbortListener || require_util().addAbortListener; + const disposable = addAbortListener(signal, onAbort); + eos(stream2, disposable[SymbolDispose]); + } + return stream2; + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/buffer_list.js +var require_buffer_list = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/buffer_list.js"(exports, module) { + "use strict"; + var { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array: Uint8Array2 } = require_primordials(); + var { Buffer: Buffer2 } = __require("buffer"); + var { inspect } = require_util(); + module.exports = class BufferList { + constructor() { + this.head = null; + this.tail = null; + this.length = 0; + } + push(v) { + const entry = { + data: v, + next: null + }; + if (this.length > 0) + this.tail.next = entry; + else + this.head = entry; + this.tail = entry; + ++this.length; + } + unshift(v) { + const entry = { + data: v, + next: this.head + }; + if (this.length === 0) + this.tail = entry; + this.head = entry; + ++this.length; + } + shift() { + if (this.length === 0) + return; + const ret = this.head.data; + if (this.length === 1) + this.head = this.tail = null; + else + this.head = this.head.next; + --this.length; + return ret; + } + clear() { + this.head = this.tail = null; + this.length = 0; + } + join(s) { + if (this.length === 0) + return ""; + let p = this.head; + let ret = "" + p.data; + while ((p = p.next) !== null) + ret += s + p.data; + return ret; + } + concat(n) { + if (this.length === 0) + return Buffer2.alloc(0); + const ret = Buffer2.allocUnsafe(n >>> 0); + let p = this.head; + let i = 0; + while (p) { + TypedArrayPrototypeSet(ret, p.data, i); + i += p.data.length; + p = p.next; + } + return ret; + } + // Consumes a specified amount of bytes or characters from the buffered data. + consume(n, hasStrings) { + const data = this.head.data; + if (n < data.length) { + const slice = data.slice(0, n); + this.head.data = data.slice(n); + return slice; + } + if (n === data.length) { + return this.shift(); + } + return hasStrings ? this._getString(n) : this._getBuffer(n); + } + first() { + return this.head.data; + } + *[SymbolIterator]() { + for (let p = this.head; p; p = p.next) { + yield p.data; + } + } + // Consumes a specified amount of characters from the buffered data. + _getString(n) { + let ret = ""; + let p = this.head; + let c = 0; + do { + const str = p.data; + if (n > str.length) { + ret += str; + n -= str.length; + } else { + if (n === str.length) { + ret += str; + ++c; + if (p.next) + this.head = p.next; + else + this.head = this.tail = null; + } else { + ret += StringPrototypeSlice(str, 0, n); + this.head = p; + p.data = StringPrototypeSlice(str, n); + } + break; + } + ++c; + } while ((p = p.next) !== null); + this.length -= c; + return ret; + } + // Consumes a specified amount of bytes from the buffered data. + _getBuffer(n) { + const ret = Buffer2.allocUnsafe(n); + const retLen = n; + let p = this.head; + let c = 0; + do { + const buf = p.data; + if (n > buf.length) { + TypedArrayPrototypeSet(ret, buf, retLen - n); + n -= buf.length; + } else { + if (n === buf.length) { + TypedArrayPrototypeSet(ret, buf, retLen - n); + ++c; + if (p.next) + this.head = p.next; + else + this.head = this.tail = null; + } else { + TypedArrayPrototypeSet(ret, new Uint8Array2(buf.buffer, buf.byteOffset, n), retLen - n); + this.head = p; + p.data = buf.slice(n); + } + break; + } + ++c; + } while ((p = p.next) !== null); + this.length -= c; + return ret; + } + // Make sure the linked list only shows the minimal necessary information. + [Symbol.for("nodejs.util.inspect.custom")](_, options) { + return inspect(this, { + ...options, + // Only inspect one level. + depth: 0, + // It should not recurse. + customInspect: false + }); + } + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/state.js +var require_state = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/state.js"(exports, module) { + "use strict"; + var { MathFloor, NumberIsInteger } = require_primordials(); + var { validateInteger } = require_validators(); + var { ERR_INVALID_ARG_VALUE } = require_errors().codes; + var defaultHighWaterMarkBytes = 16 * 1024; + var defaultHighWaterMarkObjectMode = 16; + function highWaterMarkFrom(options, isDuplex, duplexKey) { + return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; + } + function getDefaultHighWaterMark(objectMode) { + return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes; + } + function setDefaultHighWaterMark(objectMode, value) { + validateInteger(value, "value", 0); + if (objectMode) { + defaultHighWaterMarkObjectMode = value; + } else { + defaultHighWaterMarkBytes = value; + } + } + function getHighWaterMark(state, options, duplexKey, isDuplex) { + const hwm = highWaterMarkFrom(options, isDuplex, duplexKey); + if (hwm != null) { + if (!NumberIsInteger(hwm) || hwm < 0) { + const name = isDuplex ? `options.${duplexKey}` : "options.highWaterMark"; + throw new ERR_INVALID_ARG_VALUE(name, hwm); + } + return MathFloor(hwm); + } + return getDefaultHighWaterMark(state.objectMode); + } + module.exports = { + getHighWaterMark, + getDefaultHighWaterMark, + setDefaultHighWaterMark + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/from.js +var require_from = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/from.js"(exports, module) { + "use strict"; + var process2 = require_process(); + var { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require_primordials(); + var { Buffer: Buffer2 } = __require("buffer"); + var { ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2, ERR_STREAM_NULL_VALUES } = require_errors().codes; + function from(Readable2, iterable, opts) { + let iterator; + if (typeof iterable === "string" || iterable instanceof Buffer2) { + return new Readable2({ + objectMode: true, + ...opts, + read() { + this.push(iterable); + this.push(null); + } + }); + } + let isAsync; + if (iterable && iterable[SymbolAsyncIterator]) { + isAsync = true; + iterator = iterable[SymbolAsyncIterator](); + } else if (iterable && iterable[SymbolIterator]) { + isAsync = false; + iterator = iterable[SymbolIterator](); + } else { + throw new ERR_INVALID_ARG_TYPE2("iterable", ["Iterable"], iterable); + } + const readable = new Readable2({ + objectMode: true, + highWaterMark: 1, + // TODO(ronag): What options should be allowed? + ...opts + }); + let reading = false; + readable._read = function() { + if (!reading) { + reading = true; + next(); + } + }; + readable._destroy = function(error, cb) { + PromisePrototypeThen( + close(error), + () => process2.nextTick(cb, error), + // nextTick is here in case cb throws + (e) => process2.nextTick(cb, e || error) + ); + }; + async function close(error) { + const hadError = error !== void 0 && error !== null; + const hasThrow = typeof iterator.throw === "function"; + if (hadError && hasThrow) { + const { value, done } = await iterator.throw(error); + await value; + if (done) { + return; + } + } + if (typeof iterator.return === "function") { + const { value } = await iterator.return(); + await value; + } + } + async function next() { + for (; ; ) { + try { + const { value, done } = isAsync ? await iterator.next() : iterator.next(); + if (done) { + readable.push(null); + } else { + const res = value && typeof value.then === "function" ? await value : value; + if (res === null) { + reading = false; + throw new ERR_STREAM_NULL_VALUES(); + } else if (readable.push(res)) { + continue; + } else { + reading = false; + } + } + } catch (err) { + readable.destroy(err); + } + break; + } + } + return readable; + } + module.exports = from; + } +}); + +// node_modules/readable-stream/lib/internal/streams/readable.js +var require_readable = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/readable.js"(exports, module) { + var process2 = require_process(); + var { + ArrayPrototypeIndexOf, + NumberIsInteger, + NumberIsNaN, + NumberParseInt, + ObjectDefineProperties, + ObjectKeys, + ObjectSetPrototypeOf, + Promise: Promise2, + SafeSet, + SymbolAsyncDispose, + SymbolAsyncIterator, + Symbol: Symbol2 + } = require_primordials(); + module.exports = Readable2; + Readable2.ReadableState = ReadableState; + var { EventEmitter: EE } = __require("events"); + var { Stream: Stream2, prependListener } = require_legacy(); + var { Buffer: Buffer2 } = __require("buffer"); + var { addAbortSignal } = require_add_abort_signal(); + var eos = require_end_of_stream(); + var debug = require_util().debuglog("stream", (fn) => { + debug = fn; + }); + var BufferList = require_buffer_list(); + var destroyImpl = require_destroy(); + var { getHighWaterMark, getDefaultHighWaterMark } = require_state(); + var { + aggregateTwoErrors, + codes: { + ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2, + ERR_METHOD_NOT_IMPLEMENTED, + ERR_OUT_OF_RANGE, + ERR_STREAM_PUSH_AFTER_EOF, + ERR_STREAM_UNSHIFT_AFTER_END_EVENT + }, + AbortError + } = require_errors(); + var { validateObject } = require_validators(); + var kPaused = Symbol2("kPaused"); + var { StringDecoder } = __require("string_decoder"); + var from = require_from(); + ObjectSetPrototypeOf(Readable2.prototype, Stream2.prototype); + ObjectSetPrototypeOf(Readable2, Stream2); + var nop = () => { + }; + var { errorOrDestroy } = destroyImpl; + var kObjectMode = 1 << 0; + var kEnded = 1 << 1; + var kEndEmitted = 1 << 2; + var kReading = 1 << 3; + var kConstructed = 1 << 4; + var kSync = 1 << 5; + var kNeedReadable = 1 << 6; + var kEmittedReadable = 1 << 7; + var kReadableListening = 1 << 8; + var kResumeScheduled = 1 << 9; + var kErrorEmitted = 1 << 10; + var kEmitClose = 1 << 11; + var kAutoDestroy = 1 << 12; + var kDestroyed = 1 << 13; + var kClosed = 1 << 14; + var kCloseEmitted = 1 << 15; + var kMultiAwaitDrain = 1 << 16; + var kReadingMore = 1 << 17; + var kDataEmitted = 1 << 18; + function makeBitMapDescriptor(bit) { + return { + enumerable: false, + get() { + return (this.state & bit) !== 0; + }, + set(value) { + if (value) + this.state |= bit; + else + this.state &= ~bit; + } + }; + } + ObjectDefineProperties(ReadableState.prototype, { + objectMode: makeBitMapDescriptor(kObjectMode), + ended: makeBitMapDescriptor(kEnded), + endEmitted: makeBitMapDescriptor(kEndEmitted), + reading: makeBitMapDescriptor(kReading), + // Stream is still being constructed and cannot be + // destroyed until construction finished or failed. + // Async construction is opt in, therefore we start as + // constructed. + constructed: makeBitMapDescriptor(kConstructed), + // A flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + sync: makeBitMapDescriptor(kSync), + // Whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + needReadable: makeBitMapDescriptor(kNeedReadable), + emittedReadable: makeBitMapDescriptor(kEmittedReadable), + readableListening: makeBitMapDescriptor(kReadableListening), + resumeScheduled: makeBitMapDescriptor(kResumeScheduled), + // True if the error was already emitted and should not be thrown again. + errorEmitted: makeBitMapDescriptor(kErrorEmitted), + emitClose: makeBitMapDescriptor(kEmitClose), + autoDestroy: makeBitMapDescriptor(kAutoDestroy), + // Has it been destroyed. + destroyed: makeBitMapDescriptor(kDestroyed), + // Indicates whether the stream has finished destroying. + closed: makeBitMapDescriptor(kClosed), + // True if close has been emitted or would have been emitted + // depending on emitClose. + closeEmitted: makeBitMapDescriptor(kCloseEmitted), + multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain), + // If true, a maybeReadMore has been scheduled. + readingMore: makeBitMapDescriptor(kReadingMore), + dataEmitted: makeBitMapDescriptor(kDataEmitted) + }); + function ReadableState(options, stream2, isDuplex) { + if (typeof isDuplex !== "boolean") + isDuplex = stream2 instanceof require_duplex(); + this.state = kEmitClose | kAutoDestroy | kConstructed | kSync; + if (options && options.objectMode) + this.state |= kObjectMode; + if (isDuplex && options && options.readableObjectMode) + this.state |= kObjectMode; + this.highWaterMark = options ? getHighWaterMark(this, options, "readableHighWaterMark", isDuplex) : getDefaultHighWaterMark(false); + this.buffer = new BufferList(); + this.length = 0; + this.pipes = []; + this.flowing = null; + this[kPaused] = null; + if (options && options.emitClose === false) + this.state &= ~kEmitClose; + if (options && options.autoDestroy === false) + this.state &= ~kAutoDestroy; + this.errored = null; + this.defaultEncoding = options && options.defaultEncoding || "utf8"; + this.awaitDrainWriters = null; + this.decoder = null; + this.encoding = null; + if (options && options.encoding) { + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } + } + function Readable2(options) { + if (!(this instanceof Readable2)) + return new Readable2(options); + const isDuplex = this instanceof require_duplex(); + this._readableState = new ReadableState(options, this, isDuplex); + if (options) { + if (typeof options.read === "function") + this._read = options.read; + if (typeof options.destroy === "function") + this._destroy = options.destroy; + if (typeof options.construct === "function") + this._construct = options.construct; + if (options.signal && !isDuplex) + addAbortSignal(options.signal, this); + } + Stream2.call(this, options); + destroyImpl.construct(this, () => { + if (this._readableState.needReadable) { + maybeReadMore(this, this._readableState); + } + }); + } + Readable2.prototype.destroy = destroyImpl.destroy; + Readable2.prototype._undestroy = destroyImpl.undestroy; + Readable2.prototype._destroy = function(err, cb) { + cb(err); + }; + Readable2.prototype[EE.captureRejectionSymbol] = function(err) { + this.destroy(err); + }; + Readable2.prototype[SymbolAsyncDispose] = function() { + let error; + if (!this.destroyed) { + error = this.readableEnded ? null : new AbortError(); + this.destroy(error); + } + return new Promise2((resolve, reject) => eos(this, (err) => err && err !== error ? reject(err) : resolve(null))); + }; + Readable2.prototype.push = function(chunk, encoding) { + return readableAddChunk(this, chunk, encoding, false); + }; + Readable2.prototype.unshift = function(chunk, encoding) { + return readableAddChunk(this, chunk, encoding, true); + }; + function readableAddChunk(stream2, chunk, encoding, addToFront) { + debug("readableAddChunk", chunk); + const state = stream2._readableState; + let err; + if ((state.state & kObjectMode) === 0) { + if (typeof chunk === "string") { + encoding = encoding || state.defaultEncoding; + if (state.encoding !== encoding) { + if (addToFront && state.encoding) { + chunk = Buffer2.from(chunk, encoding).toString(state.encoding); + } else { + chunk = Buffer2.from(chunk, encoding); + encoding = ""; + } + } + } else if (chunk instanceof Buffer2) { + encoding = ""; + } else if (Stream2._isUint8Array(chunk)) { + chunk = Stream2._uint8ArrayToBuffer(chunk); + encoding = ""; + } else if (chunk != null) { + err = new ERR_INVALID_ARG_TYPE2("chunk", ["string", "Buffer", "Uint8Array"], chunk); + } + } + if (err) { + errorOrDestroy(stream2, err); + } else if (chunk === null) { + state.state &= ~kReading; + onEofChunk(stream2, state); + } else if ((state.state & kObjectMode) !== 0 || chunk && chunk.length > 0) { + if (addToFront) { + if ((state.state & kEndEmitted) !== 0) + errorOrDestroy(stream2, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT()); + else if (state.destroyed || state.errored) + return false; + else + addChunk(stream2, state, chunk, true); + } else if (state.ended) { + errorOrDestroy(stream2, new ERR_STREAM_PUSH_AFTER_EOF()); + } else if (state.destroyed || state.errored) { + return false; + } else { + state.state &= ~kReading; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) + addChunk(stream2, state, chunk, false); + else + maybeReadMore(stream2, state); + } else { + addChunk(stream2, state, chunk, false); + } + } + } else if (!addToFront) { + state.state &= ~kReading; + maybeReadMore(stream2, state); + } + return !state.ended && (state.length < state.highWaterMark || state.length === 0); + } + function addChunk(stream2, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync && stream2.listenerCount("data") > 0) { + if ((state.state & kMultiAwaitDrain) !== 0) { + state.awaitDrainWriters.clear(); + } else { + state.awaitDrainWriters = null; + } + state.dataEmitted = true; + stream2.emit("data", chunk); + } else { + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) + state.buffer.unshift(chunk); + else + state.buffer.push(chunk); + if ((state.state & kNeedReadable) !== 0) + emitReadable(stream2); + } + maybeReadMore(stream2, state); + } + Readable2.prototype.isPaused = function() { + const state = this._readableState; + return state[kPaused] === true || state.flowing === false; + }; + Readable2.prototype.setEncoding = function(enc) { + const decoder = new StringDecoder(enc); + this._readableState.decoder = decoder; + this._readableState.encoding = this._readableState.decoder.encoding; + const buffer2 = this._readableState.buffer; + let content = ""; + for (const data of buffer2) { + content += decoder.write(data); + } + buffer2.clear(); + if (content !== "") + buffer2.push(content); + this._readableState.length = content.length; + return this; + }; + var MAX_HWM = 1073741824; + function computeNewHighWaterMark(n) { + if (n > MAX_HWM) { + throw new ERR_OUT_OF_RANGE("size", "<= 1GiB", n); + } else { + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; + } + function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) + return 0; + if ((state.state & kObjectMode) !== 0) + return 1; + if (NumberIsNaN(n)) { + if (state.flowing && state.length) + return state.buffer.first().length; + return state.length; + } + if (n <= state.length) + return n; + return state.ended ? state.length : 0; + } + Readable2.prototype.read = function(n) { + debug("read", n); + if (n === void 0) { + n = NaN; + } else if (!NumberIsInteger(n)) { + n = NumberParseInt(n, 10); + } + const state = this._readableState; + const nOrig = n; + if (n > state.highWaterMark) + state.highWaterMark = computeNewHighWaterMark(n); + if (n !== 0) + state.state &= ~kEmittedReadable; + if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { + debug("read: emitReadable", state.length, state.ended); + if (state.length === 0 && state.ended) + endReadable(this); + else + emitReadable(this); + return null; + } + n = howMuchToRead(n, state); + if (n === 0 && state.ended) { + if (state.length === 0) + endReadable(this); + return null; + } + let doRead = (state.state & kNeedReadable) !== 0; + debug("need readable", doRead); + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug("length less than watermark", doRead); + } + if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) { + doRead = false; + debug("reading, ended or constructing", doRead); + } else if (doRead) { + debug("do read"); + state.state |= kReading | kSync; + if (state.length === 0) + state.state |= kNeedReadable; + try { + this._read(state.highWaterMark); + } catch (err) { + errorOrDestroy(this, err); + } + state.state &= ~kSync; + if (!state.reading) + n = howMuchToRead(nOrig, state); + } + let ret; + if (n > 0) + ret = fromList(n, state); + else + ret = null; + if (ret === null) { + state.needReadable = state.length <= state.highWaterMark; + n = 0; + } else { + state.length -= n; + if (state.multiAwaitDrain) { + state.awaitDrainWriters.clear(); + } else { + state.awaitDrainWriters = null; + } + } + if (state.length === 0) { + if (!state.ended) + state.needReadable = true; + if (nOrig !== n && state.ended) + endReadable(this); + } + if (ret !== null && !state.errorEmitted && !state.closeEmitted) { + state.dataEmitted = true; + this.emit("data", ret); + } + return ret; + }; + function onEofChunk(stream2, state) { + debug("onEofChunk"); + if (state.ended) + return; + if (state.decoder) { + const chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + if (state.sync) { + emitReadable(stream2); + } else { + state.needReadable = false; + state.emittedReadable = true; + emitReadable_(stream2); + } + } + function emitReadable(stream2) { + const state = stream2._readableState; + debug("emitReadable", state.needReadable, state.emittedReadable); + state.needReadable = false; + if (!state.emittedReadable) { + debug("emitReadable", state.flowing); + state.emittedReadable = true; + process2.nextTick(emitReadable_, stream2); + } + } + function emitReadable_(stream2) { + const state = stream2._readableState; + debug("emitReadable_", state.destroyed, state.length, state.ended); + if (!state.destroyed && !state.errored && (state.length || state.ended)) { + stream2.emit("readable"); + state.emittedReadable = false; + } + state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; + flow(stream2); + } + function maybeReadMore(stream2, state) { + if (!state.readingMore && state.constructed) { + state.readingMore = true; + process2.nextTick(maybeReadMore_, stream2, state); + } + } + function maybeReadMore_(stream2, state) { + while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { + const len = state.length; + debug("maybeReadMore read 0"); + stream2.read(0); + if (len === state.length) + break; + } + state.readingMore = false; + } + Readable2.prototype._read = function(n) { + throw new ERR_METHOD_NOT_IMPLEMENTED("_read()"); + }; + Readable2.prototype.pipe = function(dest, pipeOpts) { + const src = this; + const state = this._readableState; + if (state.pipes.length === 1) { + if (!state.multiAwaitDrain) { + state.multiAwaitDrain = true; + state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : []); + } + } + state.pipes.push(dest); + debug("pipe count=%d opts=%j", state.pipes.length, pipeOpts); + const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process2.stdout && dest !== process2.stderr; + const endFn = doEnd ? onend : unpipe; + if (state.endEmitted) + process2.nextTick(endFn); + else + src.once("end", endFn); + dest.on("unpipe", onunpipe); + function onunpipe(readable, unpipeInfo) { + debug("onunpipe"); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + function onend() { + debug("onend"); + dest.end(); + } + let ondrain; + let cleanedUp = false; + function cleanup() { + debug("cleanup"); + dest.removeListener("close", onclose); + dest.removeListener("finish", onfinish); + if (ondrain) { + dest.removeListener("drain", ondrain); + } + dest.removeListener("error", onerror); + dest.removeListener("unpipe", onunpipe); + src.removeListener("end", onend); + src.removeListener("end", unpipe); + src.removeListener("data", ondata); + cleanedUp = true; + if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) + ondrain(); + } + function pause() { + if (!cleanedUp) { + if (state.pipes.length === 1 && state.pipes[0] === dest) { + debug("false write response, pause", 0); + state.awaitDrainWriters = dest; + state.multiAwaitDrain = false; + } else if (state.pipes.length > 1 && state.pipes.includes(dest)) { + debug("false write response, pause", state.awaitDrainWriters.size); + state.awaitDrainWriters.add(dest); + } + src.pause(); + } + if (!ondrain) { + ondrain = pipeOnDrain(src, dest); + dest.on("drain", ondrain); + } + } + src.on("data", ondata); + function ondata(chunk) { + debug("ondata"); + const ret = dest.write(chunk); + debug("dest.write", ret); + if (ret === false) { + pause(); + } + } + function onerror(er) { + debug("onerror", er); + unpipe(); + dest.removeListener("error", onerror); + if (dest.listenerCount("error") === 0) { + const s = dest._writableState || dest._readableState; + if (s && !s.errorEmitted) { + errorOrDestroy(dest, er); + } else { + dest.emit("error", er); + } + } + } + prependListener(dest, "error", onerror); + function onclose() { + dest.removeListener("finish", onfinish); + unpipe(); + } + dest.once("close", onclose); + function onfinish() { + debug("onfinish"); + dest.removeListener("close", onclose); + unpipe(); + } + dest.once("finish", onfinish); + function unpipe() { + debug("unpipe"); + src.unpipe(dest); + } + dest.emit("pipe", src); + if (dest.writableNeedDrain === true) { + pause(); + } else if (!state.flowing) { + debug("pipe resume"); + src.resume(); + } + return dest; + }; + function pipeOnDrain(src, dest) { + return function pipeOnDrainFunctionResult() { + const state = src._readableState; + if (state.awaitDrainWriters === dest) { + debug("pipeOnDrain", 1); + state.awaitDrainWriters = null; + } else if (state.multiAwaitDrain) { + debug("pipeOnDrain", state.awaitDrainWriters.size); + state.awaitDrainWriters.delete(dest); + } + if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount("data")) { + src.resume(); + } + }; + } + Readable2.prototype.unpipe = function(dest) { + const state = this._readableState; + const unpipeInfo = { + hasUnpiped: false + }; + if (state.pipes.length === 0) + return this; + if (!dest) { + const dests = state.pipes; + state.pipes = []; + this.pause(); + for (let i = 0; i < dests.length; i++) + dests[i].emit("unpipe", this, { + hasUnpiped: false + }); + return this; + } + const index2 = ArrayPrototypeIndexOf(state.pipes, dest); + if (index2 === -1) + return this; + state.pipes.splice(index2, 1); + if (state.pipes.length === 0) + this.pause(); + dest.emit("unpipe", this, unpipeInfo); + return this; + }; + Readable2.prototype.on = function(ev, fn) { + const res = Stream2.prototype.on.call(this, ev, fn); + const state = this._readableState; + if (ev === "data") { + state.readableListening = this.listenerCount("readable") > 0; + if (state.flowing !== false) + this.resume(); + } else if (ev === "readable") { + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.flowing = false; + state.emittedReadable = false; + debug("on readable", state.length, state.reading); + if (state.length) { + emitReadable(this); + } else if (!state.reading) { + process2.nextTick(nReadingNextTick, this); + } + } + } + return res; + }; + Readable2.prototype.addListener = Readable2.prototype.on; + Readable2.prototype.removeListener = function(ev, fn) { + const res = Stream2.prototype.removeListener.call(this, ev, fn); + if (ev === "readable") { + process2.nextTick(updateReadableListening, this); + } + return res; + }; + Readable2.prototype.off = Readable2.prototype.removeListener; + Readable2.prototype.removeAllListeners = function(ev) { + const res = Stream2.prototype.removeAllListeners.apply(this, arguments); + if (ev === "readable" || ev === void 0) { + process2.nextTick(updateReadableListening, this); + } + return res; + }; + function updateReadableListening(self) { + const state = self._readableState; + state.readableListening = self.listenerCount("readable") > 0; + if (state.resumeScheduled && state[kPaused] === false) { + state.flowing = true; + } else if (self.listenerCount("data") > 0) { + self.resume(); + } else if (!state.readableListening) { + state.flowing = null; + } + } + function nReadingNextTick(self) { + debug("readable nexttick read 0"); + self.read(0); + } + Readable2.prototype.resume = function() { + const state = this._readableState; + if (!state.flowing) { + debug("resume"); + state.flowing = !state.readableListening; + resume(this, state); + } + state[kPaused] = false; + return this; + }; + function resume(stream2, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process2.nextTick(resume_, stream2, state); + } + } + function resume_(stream2, state) { + debug("resume", state.reading); + if (!state.reading) { + stream2.read(0); + } + state.resumeScheduled = false; + stream2.emit("resume"); + flow(stream2); + if (state.flowing && !state.reading) + stream2.read(0); + } + Readable2.prototype.pause = function() { + debug("call pause flowing=%j", this._readableState.flowing); + if (this._readableState.flowing !== false) { + debug("pause"); + this._readableState.flowing = false; + this.emit("pause"); + } + this._readableState[kPaused] = true; + return this; + }; + function flow(stream2) { + const state = stream2._readableState; + debug("flow", state.flowing); + while (state.flowing && stream2.read() !== null) + ; + } + Readable2.prototype.wrap = function(stream2) { + let paused = false; + stream2.on("data", (chunk) => { + if (!this.push(chunk) && stream2.pause) { + paused = true; + stream2.pause(); + } + }); + stream2.on("end", () => { + this.push(null); + }); + stream2.on("error", (err) => { + errorOrDestroy(this, err); + }); + stream2.on("close", () => { + this.destroy(); + }); + stream2.on("destroy", () => { + this.destroy(); + }); + this._read = () => { + if (paused && stream2.resume) { + paused = false; + stream2.resume(); + } + }; + const streamKeys = ObjectKeys(stream2); + for (let j = 1; j < streamKeys.length; j++) { + const i = streamKeys[j]; + if (this[i] === void 0 && typeof stream2[i] === "function") { + this[i] = stream2[i].bind(stream2); + } + } + return this; + }; + Readable2.prototype[SymbolAsyncIterator] = function() { + return streamToAsyncIterator(this); + }; + Readable2.prototype.iterator = function(options) { + if (options !== void 0) { + validateObject(options, "options"); + } + return streamToAsyncIterator(this, options); + }; + function streamToAsyncIterator(stream2, options) { + if (typeof stream2.read !== "function") { + stream2 = Readable2.wrap(stream2, { + objectMode: true + }); + } + const iter = createAsyncIterator(stream2, options); + iter.stream = stream2; + return iter; + } + async function* createAsyncIterator(stream2, options) { + let callback = nop; + function next(resolve) { + if (this === stream2) { + callback(); + callback = nop; + } else { + callback = resolve; + } + } + stream2.on("readable", next); + let error; + const cleanup = eos( + stream2, + { + writable: false + }, + (err) => { + error = err ? aggregateTwoErrors(error, err) : null; + callback(); + callback = nop; + } + ); + try { + while (true) { + const chunk = stream2.destroyed ? null : stream2.read(); + if (chunk !== null) { + yield chunk; + } else if (error) { + throw error; + } else if (error === null) { + return; + } else { + await new Promise2(next); + } + } + } catch (err) { + error = aggregateTwoErrors(error, err); + throw error; + } finally { + if ((error || (options === null || options === void 0 ? void 0 : options.destroyOnReturn) !== false) && (error === void 0 || stream2._readableState.autoDestroy)) { + destroyImpl.destroyer(stream2, null); + } else { + stream2.off("readable", next); + cleanup(); + } + } + } + ObjectDefineProperties(Readable2.prototype, { + readable: { + __proto__: null, + get() { + const r = this._readableState; + return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted; + }, + set(val) { + if (this._readableState) { + this._readableState.readable = !!val; + } + } + }, + readableDidRead: { + __proto__: null, + enumerable: false, + get: function() { + return this._readableState.dataEmitted; + } + }, + readableAborted: { + __proto__: null, + enumerable: false, + get: function() { + return !!(this._readableState.readable !== false && (this._readableState.destroyed || this._readableState.errored) && !this._readableState.endEmitted); + } + }, + readableHighWaterMark: { + __proto__: null, + enumerable: false, + get: function() { + return this._readableState.highWaterMark; + } + }, + readableBuffer: { + __proto__: null, + enumerable: false, + get: function() { + return this._readableState && this._readableState.buffer; + } + }, + readableFlowing: { + __proto__: null, + enumerable: false, + get: function() { + return this._readableState.flowing; + }, + set: function(state) { + if (this._readableState) { + this._readableState.flowing = state; + } + } + }, + readableLength: { + __proto__: null, + enumerable: false, + get() { + return this._readableState.length; + } + }, + readableObjectMode: { + __proto__: null, + enumerable: false, + get() { + return this._readableState ? this._readableState.objectMode : false; + } + }, + readableEncoding: { + __proto__: null, + enumerable: false, + get() { + return this._readableState ? this._readableState.encoding : null; + } + }, + errored: { + __proto__: null, + enumerable: false, + get() { + return this._readableState ? this._readableState.errored : null; + } + }, + closed: { + __proto__: null, + get() { + return this._readableState ? this._readableState.closed : false; + } + }, + destroyed: { + __proto__: null, + enumerable: false, + get() { + return this._readableState ? this._readableState.destroyed : false; + }, + set(value) { + if (!this._readableState) { + return; + } + this._readableState.destroyed = value; + } + }, + readableEnded: { + __proto__: null, + enumerable: false, + get() { + return this._readableState ? this._readableState.endEmitted : false; + } + } + }); + ObjectDefineProperties(ReadableState.prototype, { + // Legacy getter for `pipesCount`. + pipesCount: { + __proto__: null, + get() { + return this.pipes.length; + } + }, + // Legacy property for `paused`. + paused: { + __proto__: null, + get() { + return this[kPaused] !== false; + }, + set(value) { + this[kPaused] = !!value; + } + } + }); + Readable2._fromList = fromList; + function fromList(n, state) { + if (state.length === 0) + return null; + let ret; + if (state.objectMode) + ret = state.buffer.shift(); + else if (!n || n >= state.length) { + if (state.decoder) + ret = state.buffer.join(""); + else if (state.buffer.length === 1) + ret = state.buffer.first(); + else + ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + ret = state.buffer.consume(n, state.decoder); + } + return ret; + } + function endReadable(stream2) { + const state = stream2._readableState; + debug("endReadable", state.endEmitted); + if (!state.endEmitted) { + state.ended = true; + process2.nextTick(endReadableNT, state, stream2); + } + } + function endReadableNT(state, stream2) { + debug("endReadableNT", state.endEmitted, state.length); + if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream2.emit("end"); + if (stream2.writable && stream2.allowHalfOpen === false) { + process2.nextTick(endWritableNT, stream2); + } else if (state.autoDestroy) { + const wState = stream2._writableState; + const autoDestroy = !wState || wState.autoDestroy && // We don't expect the writable to ever 'finish' + // if writable is explicitly set to false. + (wState.finished || wState.writable === false); + if (autoDestroy) { + stream2.destroy(); + } + } + } + } + function endWritableNT(stream2) { + const writable = stream2.writable && !stream2.writableEnded && !stream2.destroyed; + if (writable) { + stream2.end(); + } + } + Readable2.from = function(iterable, opts) { + return from(Readable2, iterable, opts); + }; + var webStreamsAdapters; + function lazyWebStreams() { + if (webStreamsAdapters === void 0) + webStreamsAdapters = {}; + return webStreamsAdapters; + } + Readable2.fromWeb = function(readableStream, options) { + return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options); + }; + Readable2.toWeb = function(streamReadable, options) { + return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options); + }; + Readable2.wrap = function(src, options) { + var _ref, _src$readableObjectMo; + return new Readable2({ + objectMode: (_ref = (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== void 0 ? _src$readableObjectMo : src.objectMode) !== null && _ref !== void 0 ? _ref : true, + ...options, + destroy(err, callback) { + destroyImpl.destroyer(src, err); + callback(err); + } + }).wrap(src); + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/writable.js +var require_writable = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/writable.js"(exports, module) { + var process2 = require_process(); + var { + ArrayPrototypeSlice, + Error: Error2, + FunctionPrototypeSymbolHasInstance, + ObjectDefineProperty, + ObjectDefineProperties, + ObjectSetPrototypeOf, + StringPrototypeToLowerCase, + Symbol: Symbol2, + SymbolHasInstance + } = require_primordials(); + module.exports = Writable2; + Writable2.WritableState = WritableState; + var { EventEmitter: EE } = __require("events"); + var Stream2 = require_legacy().Stream; + var { Buffer: Buffer2 } = __require("buffer"); + var destroyImpl = require_destroy(); + var { addAbortSignal } = require_add_abort_signal(); + var { getHighWaterMark, getDefaultHighWaterMark } = require_state(); + var { + ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2, + ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK, + ERR_STREAM_CANNOT_PIPE, + ERR_STREAM_DESTROYED, + ERR_STREAM_ALREADY_FINISHED, + ERR_STREAM_NULL_VALUES, + ERR_STREAM_WRITE_AFTER_END, + ERR_UNKNOWN_ENCODING + } = require_errors().codes; + var { errorOrDestroy } = destroyImpl; + ObjectSetPrototypeOf(Writable2.prototype, Stream2.prototype); + ObjectSetPrototypeOf(Writable2, Stream2); + function nop() { + } + var kOnFinished = Symbol2("kOnFinished"); + function WritableState(options, stream2, isDuplex) { + if (typeof isDuplex !== "boolean") + isDuplex = stream2 instanceof require_duplex(); + this.objectMode = !!(options && options.objectMode); + if (isDuplex) + this.objectMode = this.objectMode || !!(options && options.writableObjectMode); + this.highWaterMark = options ? getHighWaterMark(this, options, "writableHighWaterMark", isDuplex) : getDefaultHighWaterMark(false); + this.finalCalled = false; + this.needDrain = false; + this.ending = false; + this.ended = false; + this.finished = false; + this.destroyed = false; + const noDecode = !!(options && options.decodeStrings === false); + this.decodeStrings = !noDecode; + this.defaultEncoding = options && options.defaultEncoding || "utf8"; + this.length = 0; + this.writing = false; + this.corked = 0; + this.sync = true; + this.bufferProcessing = false; + this.onwrite = onwrite.bind(void 0, stream2); + this.writecb = null; + this.writelen = 0; + this.afterWriteTickInfo = null; + resetBuffer(this); + this.pendingcb = 0; + this.constructed = true; + this.prefinished = false; + this.errorEmitted = false; + this.emitClose = !options || options.emitClose !== false; + this.autoDestroy = !options || options.autoDestroy !== false; + this.errored = null; + this.closed = false; + this.closeEmitted = false; + this[kOnFinished] = []; + } + function resetBuffer(state) { + state.buffered = []; + state.bufferedIndex = 0; + state.allBuffers = true; + state.allNoop = true; + } + WritableState.prototype.getBuffer = function getBuffer() { + return ArrayPrototypeSlice(this.buffered, this.bufferedIndex); + }; + ObjectDefineProperty(WritableState.prototype, "bufferedRequestCount", { + __proto__: null, + get() { + return this.buffered.length - this.bufferedIndex; + } + }); + function Writable2(options) { + const isDuplex = this instanceof require_duplex(); + if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable2, this)) + return new Writable2(options); + this._writableState = new WritableState(options, this, isDuplex); + if (options) { + if (typeof options.write === "function") + this._write = options.write; + if (typeof options.writev === "function") + this._writev = options.writev; + if (typeof options.destroy === "function") + this._destroy = options.destroy; + if (typeof options.final === "function") + this._final = options.final; + if (typeof options.construct === "function") + this._construct = options.construct; + if (options.signal) + addAbortSignal(options.signal, this); + } + Stream2.call(this, options); + destroyImpl.construct(this, () => { + const state = this._writableState; + if (!state.writing) { + clearBuffer(this, state); + } + finishMaybe(this, state); + }); + } + ObjectDefineProperty(Writable2, SymbolHasInstance, { + __proto__: null, + value: function(object) { + if (FunctionPrototypeSymbolHasInstance(this, object)) + return true; + if (this !== Writable2) + return false; + return object && object._writableState instanceof WritableState; + } + }); + Writable2.prototype.pipe = function() { + errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); + }; + function _write(stream2, chunk, encoding, cb) { + const state = stream2._writableState; + if (typeof encoding === "function") { + cb = encoding; + encoding = state.defaultEncoding; + } else { + if (!encoding) + encoding = state.defaultEncoding; + else if (encoding !== "buffer" && !Buffer2.isEncoding(encoding)) + throw new ERR_UNKNOWN_ENCODING(encoding); + if (typeof cb !== "function") + cb = nop; + } + if (chunk === null) { + throw new ERR_STREAM_NULL_VALUES(); + } else if (!state.objectMode) { + if (typeof chunk === "string") { + if (state.decodeStrings !== false) { + chunk = Buffer2.from(chunk, encoding); + encoding = "buffer"; + } + } else if (chunk instanceof Buffer2) { + encoding = "buffer"; + } else if (Stream2._isUint8Array(chunk)) { + chunk = Stream2._uint8ArrayToBuffer(chunk); + encoding = "buffer"; + } else { + throw new ERR_INVALID_ARG_TYPE2("chunk", ["string", "Buffer", "Uint8Array"], chunk); + } + } + let err; + if (state.ending) { + err = new ERR_STREAM_WRITE_AFTER_END(); + } else if (state.destroyed) { + err = new ERR_STREAM_DESTROYED("write"); + } + if (err) { + process2.nextTick(cb, err); + errorOrDestroy(stream2, err, true); + return err; + } + state.pendingcb++; + return writeOrBuffer(stream2, state, chunk, encoding, cb); + } + Writable2.prototype.write = function(chunk, encoding, cb) { + return _write(this, chunk, encoding, cb) === true; + }; + Writable2.prototype.cork = function() { + this._writableState.corked++; + }; + Writable2.prototype.uncork = function() { + const state = this._writableState; + if (state.corked) { + state.corked--; + if (!state.writing) + clearBuffer(this, state); + } + }; + Writable2.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + if (typeof encoding === "string") + encoding = StringPrototypeToLowerCase(encoding); + if (!Buffer2.isEncoding(encoding)) + throw new ERR_UNKNOWN_ENCODING(encoding); + this._writableState.defaultEncoding = encoding; + return this; + }; + function writeOrBuffer(stream2, state, chunk, encoding, callback) { + const len = state.objectMode ? 1 : chunk.length; + state.length += len; + const ret = state.length < state.highWaterMark; + if (!ret) + state.needDrain = true; + if (state.writing || state.corked || state.errored || !state.constructed) { + state.buffered.push({ + chunk, + encoding, + callback + }); + if (state.allBuffers && encoding !== "buffer") { + state.allBuffers = false; + } + if (state.allNoop && callback !== nop) { + state.allNoop = false; + } + } else { + state.writelen = len; + state.writecb = callback; + state.writing = true; + state.sync = true; + stream2._write(chunk, encoding, state.onwrite); + state.sync = false; + } + return ret && !state.errored && !state.destroyed; + } + function doWrite(stream2, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (state.destroyed) + state.onwrite(new ERR_STREAM_DESTROYED("write")); + else if (writev) + stream2._writev(chunk, state.onwrite); + else + stream2._write(chunk, encoding, state.onwrite); + state.sync = false; + } + function onwriteError(stream2, state, er, cb) { + --state.pendingcb; + cb(er); + errorBuffer(state); + errorOrDestroy(stream2, er); + } + function onwrite(stream2, er) { + const state = stream2._writableState; + const sync = state.sync; + const cb = state.writecb; + if (typeof cb !== "function") { + errorOrDestroy(stream2, new ERR_MULTIPLE_CALLBACK()); + return; + } + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; + if (er) { + er.stack; + if (!state.errored) { + state.errored = er; + } + if (stream2._readableState && !stream2._readableState.errored) { + stream2._readableState.errored = er; + } + if (sync) { + process2.nextTick(onwriteError, stream2, state, er, cb); + } else { + onwriteError(stream2, state, er, cb); + } + } else { + if (state.buffered.length > state.bufferedIndex) { + clearBuffer(stream2, state); + } + if (sync) { + if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) { + state.afterWriteTickInfo.count++; + } else { + state.afterWriteTickInfo = { + count: 1, + cb, + stream: stream2, + state + }; + process2.nextTick(afterWriteTick, state.afterWriteTickInfo); + } + } else { + afterWrite(stream2, state, 1, cb); + } + } + } + function afterWriteTick({ stream: stream2, state, count, cb }) { + state.afterWriteTickInfo = null; + return afterWrite(stream2, state, count, cb); + } + function afterWrite(stream2, state, count, cb) { + const needDrain = !state.ending && !stream2.destroyed && state.length === 0 && state.needDrain; + if (needDrain) { + state.needDrain = false; + stream2.emit("drain"); + } + while (count-- > 0) { + state.pendingcb--; + cb(); + } + if (state.destroyed) { + errorBuffer(state); + } + finishMaybe(stream2, state); + } + function errorBuffer(state) { + if (state.writing) { + return; + } + for (let n = state.bufferedIndex; n < state.buffered.length; ++n) { + var _state$errored; + const { chunk, callback } = state.buffered[n]; + const len = state.objectMode ? 1 : chunk.length; + state.length -= len; + callback( + (_state$errored = state.errored) !== null && _state$errored !== void 0 ? _state$errored : new ERR_STREAM_DESTROYED("write") + ); + } + const onfinishCallbacks = state[kOnFinished].splice(0); + for (let i = 0; i < onfinishCallbacks.length; i++) { + var _state$errored2; + onfinishCallbacks[i]( + (_state$errored2 = state.errored) !== null && _state$errored2 !== void 0 ? _state$errored2 : new ERR_STREAM_DESTROYED("end") + ); + } + resetBuffer(state); + } + function clearBuffer(stream2, state) { + if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) { + return; + } + const { buffered, bufferedIndex, objectMode } = state; + const bufferedLength = buffered.length - bufferedIndex; + if (!bufferedLength) { + return; + } + let i = bufferedIndex; + state.bufferProcessing = true; + if (bufferedLength > 1 && stream2._writev) { + state.pendingcb -= bufferedLength - 1; + const callback = state.allNoop ? nop : (err) => { + for (let n = i; n < buffered.length; ++n) { + buffered[n].callback(err); + } + }; + const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i); + chunks.allBuffers = state.allBuffers; + doWrite(stream2, state, true, state.length, chunks, "", callback); + resetBuffer(state); + } else { + do { + const { chunk, encoding, callback } = buffered[i]; + buffered[i++] = null; + const len = objectMode ? 1 : chunk.length; + doWrite(stream2, state, false, len, chunk, encoding, callback); + } while (i < buffered.length && !state.writing); + if (i === buffered.length) { + resetBuffer(state); + } else if (i > 256) { + buffered.splice(0, i); + state.bufferedIndex = 0; + } else { + state.bufferedIndex = i; + } + } + state.bufferProcessing = false; + } + Writable2.prototype._write = function(chunk, encoding, cb) { + if (this._writev) { + this._writev( + [ + { + chunk, + encoding + } + ], + cb + ); + } else { + throw new ERR_METHOD_NOT_IMPLEMENTED("_write()"); + } + }; + Writable2.prototype._writev = null; + Writable2.prototype.end = function(chunk, encoding, cb) { + const state = this._writableState; + if (typeof chunk === "function") { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === "function") { + cb = encoding; + encoding = null; + } + let err; + if (chunk !== null && chunk !== void 0) { + const ret = _write(this, chunk, encoding); + if (ret instanceof Error2) { + err = ret; + } + } + if (state.corked) { + state.corked = 1; + this.uncork(); + } + if (err) { + } else if (!state.errored && !state.ending) { + state.ending = true; + finishMaybe(this, state, true); + state.ended = true; + } else if (state.finished) { + err = new ERR_STREAM_ALREADY_FINISHED("end"); + } else if (state.destroyed) { + err = new ERR_STREAM_DESTROYED("end"); + } + if (typeof cb === "function") { + if (err || state.finished) { + process2.nextTick(cb, err); + } else { + state[kOnFinished].push(cb); + } + } + return this; + }; + function needFinish(state) { + return state.ending && !state.destroyed && state.constructed && state.length === 0 && !state.errored && state.buffered.length === 0 && !state.finished && !state.writing && !state.errorEmitted && !state.closeEmitted; + } + function callFinal(stream2, state) { + let called = false; + function onFinish(err) { + if (called) { + errorOrDestroy(stream2, err !== null && err !== void 0 ? err : ERR_MULTIPLE_CALLBACK()); + return; + } + called = true; + state.pendingcb--; + if (err) { + const onfinishCallbacks = state[kOnFinished].splice(0); + for (let i = 0; i < onfinishCallbacks.length; i++) { + onfinishCallbacks[i](err); + } + errorOrDestroy(stream2, err, state.sync); + } else if (needFinish(state)) { + state.prefinished = true; + stream2.emit("prefinish"); + state.pendingcb++; + process2.nextTick(finish, stream2, state); + } + } + state.sync = true; + state.pendingcb++; + try { + stream2._final(onFinish); + } catch (err) { + onFinish(err); + } + state.sync = false; + } + function prefinish(stream2, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream2._final === "function" && !state.destroyed) { + state.finalCalled = true; + callFinal(stream2, state); + } else { + state.prefinished = true; + stream2.emit("prefinish"); + } + } + } + function finishMaybe(stream2, state, sync) { + if (needFinish(state)) { + prefinish(stream2, state); + if (state.pendingcb === 0) { + if (sync) { + state.pendingcb++; + process2.nextTick( + (stream3, state2) => { + if (needFinish(state2)) { + finish(stream3, state2); + } else { + state2.pendingcb--; + } + }, + stream2, + state + ); + } else if (needFinish(state)) { + state.pendingcb++; + finish(stream2, state); + } + } + } + } + function finish(stream2, state) { + state.pendingcb--; + state.finished = true; + const onfinishCallbacks = state[kOnFinished].splice(0); + for (let i = 0; i < onfinishCallbacks.length; i++) { + onfinishCallbacks[i](); + } + stream2.emit("finish"); + if (state.autoDestroy) { + const rState = stream2._readableState; + const autoDestroy = !rState || rState.autoDestroy && // We don't expect the readable to ever 'end' + // if readable is explicitly set to false. + (rState.endEmitted || rState.readable === false); + if (autoDestroy) { + stream2.destroy(); + } + } + } + ObjectDefineProperties(Writable2.prototype, { + closed: { + __proto__: null, + get() { + return this._writableState ? this._writableState.closed : false; + } + }, + destroyed: { + __proto__: null, + get() { + return this._writableState ? this._writableState.destroyed : false; + }, + set(value) { + if (this._writableState) { + this._writableState.destroyed = value; + } + } + }, + writable: { + __proto__: null, + get() { + const w = this._writableState; + return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended; + }, + set(val) { + if (this._writableState) { + this._writableState.writable = !!val; + } + } + }, + writableFinished: { + __proto__: null, + get() { + return this._writableState ? this._writableState.finished : false; + } + }, + writableObjectMode: { + __proto__: null, + get() { + return this._writableState ? this._writableState.objectMode : false; + } + }, + writableBuffer: { + __proto__: null, + get() { + return this._writableState && this._writableState.getBuffer(); + } + }, + writableEnded: { + __proto__: null, + get() { + return this._writableState ? this._writableState.ending : false; + } + }, + writableNeedDrain: { + __proto__: null, + get() { + const wState = this._writableState; + if (!wState) + return false; + return !wState.destroyed && !wState.ending && wState.needDrain; + } + }, + writableHighWaterMark: { + __proto__: null, + get() { + return this._writableState && this._writableState.highWaterMark; + } + }, + writableCorked: { + __proto__: null, + get() { + return this._writableState ? this._writableState.corked : 0; + } + }, + writableLength: { + __proto__: null, + get() { + return this._writableState && this._writableState.length; + } + }, + errored: { + __proto__: null, + enumerable: false, + get() { + return this._writableState ? this._writableState.errored : null; + } + }, + writableAborted: { + __proto__: null, + enumerable: false, + get: function() { + return !!(this._writableState.writable !== false && (this._writableState.destroyed || this._writableState.errored) && !this._writableState.finished); + } + } + }); + var destroy = destroyImpl.destroy; + Writable2.prototype.destroy = function(err, cb) { + const state = this._writableState; + if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) { + process2.nextTick(errorBuffer, state); + } + destroy.call(this, err, cb); + return this; + }; + Writable2.prototype._undestroy = destroyImpl.undestroy; + Writable2.prototype._destroy = function(err, cb) { + cb(err); + }; + Writable2.prototype[EE.captureRejectionSymbol] = function(err) { + this.destroy(err); + }; + var webStreamsAdapters; + function lazyWebStreams() { + if (webStreamsAdapters === void 0) + webStreamsAdapters = {}; + return webStreamsAdapters; + } + Writable2.fromWeb = function(writableStream, options) { + return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options); + }; + Writable2.toWeb = function(streamWritable) { + return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable); + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/duplexify.js +var require_duplexify = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/duplexify.js"(exports, module) { + var process2 = require_process(); + var bufferModule = __require("buffer"); + var { + isReadable, + isWritable, + isIterable, + isNodeStream, + isReadableNodeStream, + isWritableNodeStream, + isDuplexNodeStream, + isReadableStream, + isWritableStream + } = require_utils(); + var eos = require_end_of_stream(); + var { + AbortError, + codes: { ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2, ERR_INVALID_RETURN_VALUE } + } = require_errors(); + var { destroyer } = require_destroy(); + var Duplex2 = require_duplex(); + var Readable2 = require_readable(); + var Writable2 = require_writable(); + var { createDeferredPromise } = require_util(); + var from = require_from(); + var Blob = globalThis.Blob || bufferModule.Blob; + var isBlob = typeof Blob !== "undefined" ? function isBlob2(b) { + return b instanceof Blob; + } : function isBlob2(b) { + return false; + }; + var AbortController = globalThis.AbortController || require_abort_controller().AbortController; + var { FunctionPrototypeCall } = require_primordials(); + var Duplexify = class extends Duplex2 { + constructor(options) { + super(options); + if ((options === null || options === void 0 ? void 0 : options.readable) === false) { + this._readableState.readable = false; + this._readableState.ended = true; + this._readableState.endEmitted = true; + } + if ((options === null || options === void 0 ? void 0 : options.writable) === false) { + this._writableState.writable = false; + this._writableState.ending = true; + this._writableState.ended = true; + this._writableState.finished = true; + } + } + }; + module.exports = function duplexify(body, name) { + if (isDuplexNodeStream(body)) { + return body; + } + if (isReadableNodeStream(body)) { + return _duplexify({ + readable: body + }); + } + if (isWritableNodeStream(body)) { + return _duplexify({ + writable: body + }); + } + if (isNodeStream(body)) { + return _duplexify({ + writable: false, + readable: false + }); + } + if (isReadableStream(body)) { + return _duplexify({ + readable: Readable2.fromWeb(body) + }); + } + if (isWritableStream(body)) { + return _duplexify({ + writable: Writable2.fromWeb(body) + }); + } + if (typeof body === "function") { + const { value, write, final, destroy } = fromAsyncGen(body); + if (isIterable(value)) { + return from(Duplexify, value, { + // TODO (ronag): highWaterMark? + objectMode: true, + write, + final, + destroy + }); + } + const then2 = value === null || value === void 0 ? void 0 : value.then; + if (typeof then2 === "function") { + let d; + const promise = FunctionPrototypeCall( + then2, + value, + (val) => { + if (val != null) { + throw new ERR_INVALID_RETURN_VALUE("nully", "body", val); + } + }, + (err) => { + destroyer(d, err); + } + ); + return d = new Duplexify({ + // TODO (ronag): highWaterMark? + objectMode: true, + readable: false, + write, + final(cb) { + final(async () => { + try { + await promise; + process2.nextTick(cb, null); + } catch (err) { + process2.nextTick(cb, err); + } + }); + }, + destroy + }); + } + throw new ERR_INVALID_RETURN_VALUE("Iterable, AsyncIterable or AsyncFunction", name, value); + } + if (isBlob(body)) { + return duplexify(body.arrayBuffer()); + } + if (isIterable(body)) { + return from(Duplexify, body, { + // TODO (ronag): highWaterMark? + objectMode: true, + writable: false + }); + } + if (isReadableStream(body === null || body === void 0 ? void 0 : body.readable) && isWritableStream(body === null || body === void 0 ? void 0 : body.writable)) { + return Duplexify.fromWeb(body); + } + if (typeof (body === null || body === void 0 ? void 0 : body.writable) === "object" || typeof (body === null || body === void 0 ? void 0 : body.readable) === "object") { + const readable = body !== null && body !== void 0 && body.readable ? isReadableNodeStream(body === null || body === void 0 ? void 0 : body.readable) ? body === null || body === void 0 ? void 0 : body.readable : duplexify(body.readable) : void 0; + const writable = body !== null && body !== void 0 && body.writable ? isWritableNodeStream(body === null || body === void 0 ? void 0 : body.writable) ? body === null || body === void 0 ? void 0 : body.writable : duplexify(body.writable) : void 0; + return _duplexify({ + readable, + writable + }); + } + const then = body === null || body === void 0 ? void 0 : body.then; + if (typeof then === "function") { + let d; + FunctionPrototypeCall( + then, + body, + (val) => { + if (val != null) { + d.push(val); + } + d.push(null); + }, + (err) => { + destroyer(d, err); + } + ); + return d = new Duplexify({ + objectMode: true, + writable: false, + read() { + } + }); + } + throw new ERR_INVALID_ARG_TYPE2( + name, + [ + "Blob", + "ReadableStream", + "WritableStream", + "Stream", + "Iterable", + "AsyncIterable", + "Function", + "{ readable, writable } pair", + "Promise" + ], + body + ); + }; + function fromAsyncGen(fn) { + let { promise, resolve } = createDeferredPromise(); + const ac = new AbortController(); + const signal = ac.signal; + const value = fn( + async function* () { + while (true) { + const _promise = promise; + promise = null; + const { chunk, done, cb } = await _promise; + process2.nextTick(cb); + if (done) + return; + if (signal.aborted) + throw new AbortError(void 0, { + cause: signal.reason + }); + ({ promise, resolve } = createDeferredPromise()); + yield chunk; + } + }(), + { + signal + } + ); + return { + value, + write(chunk, encoding, cb) { + const _resolve = resolve; + resolve = null; + _resolve({ + chunk, + done: false, + cb + }); + }, + final(cb) { + const _resolve = resolve; + resolve = null; + _resolve({ + done: true, + cb + }); + }, + destroy(err, cb) { + ac.abort(); + cb(err); + } + }; + } + function _duplexify(pair) { + const r = pair.readable && typeof pair.readable.read !== "function" ? Readable2.wrap(pair.readable) : pair.readable; + const w = pair.writable; + let readable = !!isReadable(r); + let writable = !!isWritable(w); + let ondrain; + let onfinish; + let onreadable; + let onclose; + let d; + function onfinished(err) { + const cb = onclose; + onclose = null; + if (cb) { + cb(err); + } else if (err) { + d.destroy(err); + } + } + d = new Duplexify({ + // TODO (ronag): highWaterMark? + readableObjectMode: !!(r !== null && r !== void 0 && r.readableObjectMode), + writableObjectMode: !!(w !== null && w !== void 0 && w.writableObjectMode), + readable, + writable + }); + if (writable) { + eos(w, (err) => { + writable = false; + if (err) { + destroyer(r, err); + } + onfinished(err); + }); + d._write = function(chunk, encoding, callback) { + if (w.write(chunk, encoding)) { + callback(); + } else { + ondrain = callback; + } + }; + d._final = function(callback) { + w.end(); + onfinish = callback; + }; + w.on("drain", function() { + if (ondrain) { + const cb = ondrain; + ondrain = null; + cb(); + } + }); + w.on("finish", function() { + if (onfinish) { + const cb = onfinish; + onfinish = null; + cb(); + } + }); + } + if (readable) { + eos(r, (err) => { + readable = false; + if (err) { + destroyer(r, err); + } + onfinished(err); + }); + r.on("readable", function() { + if (onreadable) { + const cb = onreadable; + onreadable = null; + cb(); + } + }); + r.on("end", function() { + d.push(null); + }); + d._read = function() { + while (true) { + const buf = r.read(); + if (buf === null) { + onreadable = d._read; + return; + } + if (!d.push(buf)) { + return; + } + } + }; + } + d._destroy = function(err, callback) { + if (!err && onclose !== null) { + err = new AbortError(); + } + onreadable = null; + ondrain = null; + onfinish = null; + if (onclose === null) { + callback(err); + } else { + onclose = callback; + destroyer(w, err); + destroyer(r, err); + } + }; + return d; + } + } +}); + +// node_modules/readable-stream/lib/internal/streams/duplex.js +var require_duplex = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/duplex.js"(exports, module) { + "use strict"; + var { + ObjectDefineProperties, + ObjectGetOwnPropertyDescriptor, + ObjectKeys, + ObjectSetPrototypeOf + } = require_primordials(); + module.exports = Duplex2; + var Readable2 = require_readable(); + var Writable2 = require_writable(); + ObjectSetPrototypeOf(Duplex2.prototype, Readable2.prototype); + ObjectSetPrototypeOf(Duplex2, Readable2); + { + const keys = ObjectKeys(Writable2.prototype); + for (let i = 0; i < keys.length; i++) { + const method = keys[i]; + if (!Duplex2.prototype[method]) + Duplex2.prototype[method] = Writable2.prototype[method]; + } + } + function Duplex2(options) { + if (!(this instanceof Duplex2)) + return new Duplex2(options); + Readable2.call(this, options); + Writable2.call(this, options); + if (options) { + this.allowHalfOpen = options.allowHalfOpen !== false; + if (options.readable === false) { + this._readableState.readable = false; + this._readableState.ended = true; + this._readableState.endEmitted = true; + } + if (options.writable === false) { + this._writableState.writable = false; + this._writableState.ending = true; + this._writableState.ended = true; + this._writableState.finished = true; + } + } else { + this.allowHalfOpen = true; + } + } + ObjectDefineProperties(Duplex2.prototype, { + writable: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writable") + }, + writableHighWaterMark: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writableHighWaterMark") + }, + writableObjectMode: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writableObjectMode") + }, + writableBuffer: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writableBuffer") + }, + writableLength: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writableLength") + }, + writableFinished: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writableFinished") + }, + writableCorked: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writableCorked") + }, + writableEnded: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writableEnded") + }, + writableNeedDrain: { + __proto__: null, + ...ObjectGetOwnPropertyDescriptor(Writable2.prototype, "writableNeedDrain") + }, + destroyed: { + __proto__: null, + get() { + if (this._readableState === void 0 || this._writableState === void 0) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set(value) { + if (this._readableState && this._writableState) { + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } + } + } + }); + var webStreamsAdapters; + function lazyWebStreams() { + if (webStreamsAdapters === void 0) + webStreamsAdapters = {}; + return webStreamsAdapters; + } + Duplex2.fromWeb = function(pair, options) { + return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options); + }; + Duplex2.toWeb = function(duplex) { + return lazyWebStreams().newReadableWritablePairFromDuplex(duplex); + }; + var duplexify; + Duplex2.from = function(body) { + if (!duplexify) { + duplexify = require_duplexify(); + } + return duplexify(body, "body"); + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/transform.js +var require_transform = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/transform.js"(exports, module) { + "use strict"; + var { ObjectSetPrototypeOf, Symbol: Symbol2 } = require_primordials(); + module.exports = Transform2; + var { ERR_METHOD_NOT_IMPLEMENTED } = require_errors().codes; + var Duplex2 = require_duplex(); + var { getHighWaterMark } = require_state(); + ObjectSetPrototypeOf(Transform2.prototype, Duplex2.prototype); + ObjectSetPrototypeOf(Transform2, Duplex2); + var kCallback = Symbol2("kCallback"); + function Transform2(options) { + if (!(this instanceof Transform2)) + return new Transform2(options); + const readableHighWaterMark = options ? getHighWaterMark(this, options, "readableHighWaterMark", true) : null; + if (readableHighWaterMark === 0) { + options = { + ...options, + highWaterMark: null, + readableHighWaterMark, + // TODO (ronag): 0 is not optimal since we have + // a "bug" where we check needDrain before calling _write and not after. + // Refs: https://github.com/nodejs/node/pull/32887 + // Refs: https://github.com/nodejs/node/pull/35941 + writableHighWaterMark: options.writableHighWaterMark || 0 + }; + } + Duplex2.call(this, options); + this._readableState.sync = false; + this[kCallback] = null; + if (options) { + if (typeof options.transform === "function") + this._transform = options.transform; + if (typeof options.flush === "function") + this._flush = options.flush; + } + this.on("prefinish", prefinish); + } + function final(cb) { + if (typeof this._flush === "function" && !this.destroyed) { + this._flush((er, data) => { + if (er) { + if (cb) { + cb(er); + } else { + this.destroy(er); + } + return; + } + if (data != null) { + this.push(data); + } + this.push(null); + if (cb) { + cb(); + } + }); + } else { + this.push(null); + if (cb) { + cb(); + } + } + } + function prefinish() { + if (this._final !== final) { + final.call(this); + } + } + Transform2.prototype._final = final; + Transform2.prototype._transform = function(chunk, encoding, callback) { + throw new ERR_METHOD_NOT_IMPLEMENTED("_transform()"); + }; + Transform2.prototype._write = function(chunk, encoding, callback) { + const rState = this._readableState; + const wState = this._writableState; + const length = rState.length; + this._transform(chunk, encoding, (err, val) => { + if (err) { + callback(err); + return; + } + if (val != null) { + this.push(val); + } + if (wState.ended || // Backwards compat. + length === rState.length || // Backwards compat. + rState.length < rState.highWaterMark) { + callback(); + } else { + this[kCallback] = callback; + } + }); + }; + Transform2.prototype._read = function() { + if (this[kCallback]) { + const callback = this[kCallback]; + this[kCallback] = null; + callback(); + } + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/passthrough.js +var require_passthrough = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/passthrough.js"(exports, module) { + "use strict"; + var { ObjectSetPrototypeOf } = require_primordials(); + module.exports = PassThrough; + var Transform2 = require_transform(); + ObjectSetPrototypeOf(PassThrough.prototype, Transform2.prototype); + ObjectSetPrototypeOf(PassThrough, Transform2); + function PassThrough(options) { + if (!(this instanceof PassThrough)) + return new PassThrough(options); + Transform2.call(this, options); + } + PassThrough.prototype._transform = function(chunk, encoding, cb) { + cb(null, chunk); + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/pipeline.js +var require_pipeline = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/pipeline.js"(exports, module) { + var process2 = require_process(); + var { ArrayIsArray, Promise: Promise2, SymbolAsyncIterator, SymbolDispose } = require_primordials(); + var eos = require_end_of_stream(); + var { once: once2 } = require_util(); + var destroyImpl = require_destroy(); + var Duplex2 = require_duplex(); + var { + aggregateTwoErrors, + codes: { + ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2, + ERR_INVALID_RETURN_VALUE, + ERR_MISSING_ARGS, + ERR_STREAM_DESTROYED, + ERR_STREAM_PREMATURE_CLOSE + }, + AbortError + } = require_errors(); + var { validateFunction, validateAbortSignal } = require_validators(); + var { + isIterable, + isReadable, + isReadableNodeStream, + isNodeStream, + isTransformStream, + isWebStream, + isReadableStream, + isReadableFinished + } = require_utils(); + var AbortController = globalThis.AbortController || require_abort_controller().AbortController; + var PassThrough; + var Readable2; + var addAbortListener; + function destroyer(stream2, reading, writing) { + let finished3 = false; + stream2.on("close", () => { + finished3 = true; + }); + const cleanup = eos( + stream2, + { + readable: reading, + writable: writing + }, + (err) => { + finished3 = !err; + } + ); + return { + destroy: (err) => { + if (finished3) + return; + finished3 = true; + destroyImpl.destroyer(stream2, err || new ERR_STREAM_DESTROYED("pipe")); + }, + cleanup + }; + } + function popCallback(streams) { + validateFunction(streams[streams.length - 1], "streams[stream.length - 1]"); + return streams.pop(); + } + function makeAsyncIterable(val) { + if (isIterable(val)) { + return val; + } else if (isReadableNodeStream(val)) { + return fromReadable(val); + } + throw new ERR_INVALID_ARG_TYPE2("val", ["Readable", "Iterable", "AsyncIterable"], val); + } + async function* fromReadable(val) { + if (!Readable2) { + Readable2 = require_readable(); + } + yield* Readable2.prototype[SymbolAsyncIterator].call(val); + } + async function pumpToNode(iterable, writable, finish, { end }) { + let error; + let onresolve = null; + const resume = (err) => { + if (err) { + error = err; + } + if (onresolve) { + const callback = onresolve; + onresolve = null; + callback(); + } + }; + const wait = () => new Promise2((resolve, reject) => { + if (error) { + reject(error); + } else { + onresolve = () => { + if (error) { + reject(error); + } else { + resolve(); + } + }; + } + }); + writable.on("drain", resume); + const cleanup = eos( + writable, + { + readable: false + }, + resume + ); + try { + if (writable.writableNeedDrain) { + await wait(); + } + for await (const chunk of iterable) { + if (!writable.write(chunk)) { + await wait(); + } + } + if (end) { + writable.end(); + await wait(); + } + finish(); + } catch (err) { + finish(error !== err ? aggregateTwoErrors(error, err) : err); + } finally { + cleanup(); + writable.off("drain", resume); + } + } + async function pumpToWeb(readable, writable, finish, { end }) { + if (isTransformStream(writable)) { + writable = writable.writable; + } + const writer = writable.getWriter(); + try { + for await (const chunk of readable) { + await writer.ready; + writer.write(chunk).catch(() => { + }); + } + await writer.ready; + if (end) { + await writer.close(); + } + finish(); + } catch (err) { + try { + await writer.abort(err); + finish(err); + } catch (err2) { + finish(err2); + } + } + } + function pipeline2(...streams) { + return pipelineImpl(streams, once2(popCallback(streams))); + } + function pipelineImpl(streams, callback, opts) { + if (streams.length === 1 && ArrayIsArray(streams[0])) { + streams = streams[0]; + } + if (streams.length < 2) { + throw new ERR_MISSING_ARGS("streams"); + } + const ac = new AbortController(); + const signal = ac.signal; + const outerSignal = opts === null || opts === void 0 ? void 0 : opts.signal; + const lastStreamCleanup = []; + validateAbortSignal(outerSignal, "options.signal"); + function abort() { + finishImpl(new AbortError()); + } + addAbortListener = addAbortListener || require_util().addAbortListener; + let disposable; + if (outerSignal) { + disposable = addAbortListener(outerSignal, abort); + } + let error; + let value; + const destroys = []; + let finishCount = 0; + function finish(err) { + finishImpl(err, --finishCount === 0); + } + function finishImpl(err, final) { + var _disposable; + if (err && (!error || error.code === "ERR_STREAM_PREMATURE_CLOSE")) { + error = err; + } + if (!error && !final) { + return; + } + while (destroys.length) { + destroys.shift()(error); + } + ; + (_disposable = disposable) === null || _disposable === void 0 ? void 0 : _disposable[SymbolDispose](); + ac.abort(); + if (final) { + if (!error) { + lastStreamCleanup.forEach((fn) => fn()); + } + process2.nextTick(callback, error, value); + } + } + let ret; + for (let i = 0; i < streams.length; i++) { + const stream2 = streams[i]; + const reading = i < streams.length - 1; + const writing = i > 0; + const end = reading || (opts === null || opts === void 0 ? void 0 : opts.end) !== false; + const isLastStream = i === streams.length - 1; + if (isNodeStream(stream2)) { + let onError2 = function(err) { + if (err && err.name !== "AbortError" && err.code !== "ERR_STREAM_PREMATURE_CLOSE") { + finish(err); + } + }; + var onError = onError2; + if (end) { + const { destroy, cleanup } = destroyer(stream2, reading, writing); + destroys.push(destroy); + if (isReadable(stream2) && isLastStream) { + lastStreamCleanup.push(cleanup); + } + } + stream2.on("error", onError2); + if (isReadable(stream2) && isLastStream) { + lastStreamCleanup.push(() => { + stream2.removeListener("error", onError2); + }); + } + } + if (i === 0) { + if (typeof stream2 === "function") { + ret = stream2({ + signal + }); + if (!isIterable(ret)) { + throw new ERR_INVALID_RETURN_VALUE("Iterable, AsyncIterable or Stream", "source", ret); + } + } else if (isIterable(stream2) || isReadableNodeStream(stream2) || isTransformStream(stream2)) { + ret = stream2; + } else { + ret = Duplex2.from(stream2); + } + } else if (typeof stream2 === "function") { + if (isTransformStream(ret)) { + var _ret; + ret = makeAsyncIterable((_ret = ret) === null || _ret === void 0 ? void 0 : _ret.readable); + } else { + ret = makeAsyncIterable(ret); + } + ret = stream2(ret, { + signal + }); + if (reading) { + if (!isIterable(ret, true)) { + throw new ERR_INVALID_RETURN_VALUE("AsyncIterable", `transform[${i - 1}]`, ret); + } + } else { + var _ret2; + if (!PassThrough) { + PassThrough = require_passthrough(); + } + const pt = new PassThrough({ + objectMode: true + }); + const then = (_ret2 = ret) === null || _ret2 === void 0 ? void 0 : _ret2.then; + if (typeof then === "function") { + finishCount++; + then.call( + ret, + (val) => { + value = val; + if (val != null) { + pt.write(val); + } + if (end) { + pt.end(); + } + process2.nextTick(finish); + }, + (err) => { + pt.destroy(err); + process2.nextTick(finish, err); + } + ); + } else if (isIterable(ret, true)) { + finishCount++; + pumpToNode(ret, pt, finish, { + end + }); + } else if (isReadableStream(ret) || isTransformStream(ret)) { + const toRead = ret.readable || ret; + finishCount++; + pumpToNode(toRead, pt, finish, { + end + }); + } else { + throw new ERR_INVALID_RETURN_VALUE("AsyncIterable or Promise", "destination", ret); + } + ret = pt; + const { destroy, cleanup } = destroyer(ret, false, true); + destroys.push(destroy); + if (isLastStream) { + lastStreamCleanup.push(cleanup); + } + } + } else if (isNodeStream(stream2)) { + if (isReadableNodeStream(ret)) { + finishCount += 2; + const cleanup = pipe(ret, stream2, finish, { + end + }); + if (isReadable(stream2) && isLastStream) { + lastStreamCleanup.push(cleanup); + } + } else if (isTransformStream(ret) || isReadableStream(ret)) { + const toRead = ret.readable || ret; + finishCount++; + pumpToNode(toRead, stream2, finish, { + end + }); + } else if (isIterable(ret)) { + finishCount++; + pumpToNode(ret, stream2, finish, { + end + }); + } else { + throw new ERR_INVALID_ARG_TYPE2( + "val", + ["Readable", "Iterable", "AsyncIterable", "ReadableStream", "TransformStream"], + ret + ); + } + ret = stream2; + } else if (isWebStream(stream2)) { + if (isReadableNodeStream(ret)) { + finishCount++; + pumpToWeb(makeAsyncIterable(ret), stream2, finish, { + end + }); + } else if (isReadableStream(ret) || isIterable(ret)) { + finishCount++; + pumpToWeb(ret, stream2, finish, { + end + }); + } else if (isTransformStream(ret)) { + finishCount++; + pumpToWeb(ret.readable, stream2, finish, { + end + }); + } else { + throw new ERR_INVALID_ARG_TYPE2( + "val", + ["Readable", "Iterable", "AsyncIterable", "ReadableStream", "TransformStream"], + ret + ); + } + ret = stream2; + } else { + ret = Duplex2.from(stream2); + } + } + if (signal !== null && signal !== void 0 && signal.aborted || outerSignal !== null && outerSignal !== void 0 && outerSignal.aborted) { + process2.nextTick(abort); + } + return ret; + } + function pipe(src, dst, finish, { end }) { + let ended = false; + dst.on("close", () => { + if (!ended) { + finish(new ERR_STREAM_PREMATURE_CLOSE()); + } + }); + src.pipe(dst, { + end: false + }); + if (end) { + let endFn2 = function() { + ended = true; + dst.end(); + }; + var endFn = endFn2; + if (isReadableFinished(src)) { + process2.nextTick(endFn2); + } else { + src.once("end", endFn2); + } + } else { + finish(); + } + eos( + src, + { + readable: true, + writable: false + }, + (err) => { + const rState = src._readableState; + if (err && err.code === "ERR_STREAM_PREMATURE_CLOSE" && rState && rState.ended && !rState.errored && !rState.errorEmitted) { + src.once("end", finish).once("error", finish); + } else { + finish(err); + } + } + ); + return eos( + dst, + { + readable: false, + writable: true + }, + finish + ); + } + module.exports = { + pipelineImpl, + pipeline: pipeline2 + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/compose.js +var require_compose = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/compose.js"(exports, module) { + "use strict"; + var { pipeline: pipeline2 } = require_pipeline(); + var Duplex2 = require_duplex(); + var { destroyer } = require_destroy(); + var { + isNodeStream, + isReadable, + isWritable, + isWebStream, + isTransformStream, + isWritableStream, + isReadableStream + } = require_utils(); + var { + AbortError, + codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS } + } = require_errors(); + var eos = require_end_of_stream(); + module.exports = function compose(...streams) { + if (streams.length === 0) { + throw new ERR_MISSING_ARGS("streams"); + } + if (streams.length === 1) { + return Duplex2.from(streams[0]); + } + const orgStreams = [...streams]; + if (typeof streams[0] === "function") { + streams[0] = Duplex2.from(streams[0]); + } + if (typeof streams[streams.length - 1] === "function") { + const idx = streams.length - 1; + streams[idx] = Duplex2.from(streams[idx]); + } + for (let n = 0; n < streams.length; ++n) { + if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) { + continue; + } + if (n < streams.length - 1 && !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))) { + throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], "must be readable"); + } + if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) { + throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], "must be writable"); + } + } + let ondrain; + let onfinish; + let onreadable; + let onclose; + let d; + function onfinished(err) { + const cb = onclose; + onclose = null; + if (cb) { + cb(err); + } else if (err) { + d.destroy(err); + } else if (!readable && !writable) { + d.destroy(); + } + } + const head = streams[0]; + const tail = pipeline2(streams, onfinished); + const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head)); + const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail)); + d = new Duplex2({ + // TODO (ronag): highWaterMark? + writableObjectMode: !!(head !== null && head !== void 0 && head.writableObjectMode), + readableObjectMode: !!(tail !== null && tail !== void 0 && tail.readableObjectMode), + writable, + readable + }); + if (writable) { + if (isNodeStream(head)) { + d._write = function(chunk, encoding, callback) { + if (head.write(chunk, encoding)) { + callback(); + } else { + ondrain = callback; + } + }; + d._final = function(callback) { + head.end(); + onfinish = callback; + }; + head.on("drain", function() { + if (ondrain) { + const cb = ondrain; + ondrain = null; + cb(); + } + }); + } else if (isWebStream(head)) { + const writable2 = isTransformStream(head) ? head.writable : head; + const writer = writable2.getWriter(); + d._write = async function(chunk, encoding, callback) { + try { + await writer.ready; + writer.write(chunk).catch(() => { + }); + callback(); + } catch (err) { + callback(err); + } + }; + d._final = async function(callback) { + try { + await writer.ready; + writer.close().catch(() => { + }); + onfinish = callback; + } catch (err) { + callback(err); + } + }; + } + const toRead = isTransformStream(tail) ? tail.readable : tail; + eos(toRead, () => { + if (onfinish) { + const cb = onfinish; + onfinish = null; + cb(); + } + }); + } + if (readable) { + if (isNodeStream(tail)) { + tail.on("readable", function() { + if (onreadable) { + const cb = onreadable; + onreadable = null; + cb(); + } + }); + tail.on("end", function() { + d.push(null); + }); + d._read = function() { + while (true) { + const buf = tail.read(); + if (buf === null) { + onreadable = d._read; + return; + } + if (!d.push(buf)) { + return; + } + } + }; + } else if (isWebStream(tail)) { + const readable2 = isTransformStream(tail) ? tail.readable : tail; + const reader = readable2.getReader(); + d._read = async function() { + while (true) { + try { + const { value, done } = await reader.read(); + if (!d.push(value)) { + return; + } + if (done) { + d.push(null); + return; + } + } catch { + return; + } + } + }; + } + } + d._destroy = function(err, callback) { + if (!err && onclose !== null) { + err = new AbortError(); + } + onreadable = null; + ondrain = null; + onfinish = null; + if (onclose === null) { + callback(err); + } else { + onclose = callback; + if (isNodeStream(tail)) { + destroyer(tail, err); + } + } + }; + return d; + }; + } +}); + +// node_modules/readable-stream/lib/internal/streams/operators.js +var require_operators = __commonJS({ + "node_modules/readable-stream/lib/internal/streams/operators.js"(exports, module) { + "use strict"; + var AbortController = globalThis.AbortController || require_abort_controller().AbortController; + var { + codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE: ERR_INVALID_ARG_TYPE2, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE }, + AbortError + } = require_errors(); + var { validateAbortSignal, validateInteger, validateObject } = require_validators(); + var kWeakHandler = require_primordials().Symbol("kWeak"); + var kResistStopPropagation = require_primordials().Symbol("kResistStopPropagation"); + var { finished: finished3 } = require_end_of_stream(); + var staticCompose = require_compose(); + var { addAbortSignalNoValidate } = require_add_abort_signal(); + var { isWritable, isNodeStream } = require_utils(); + var { deprecate } = require_util(); + var { + ArrayPrototypePush, + Boolean: Boolean2, + MathFloor, + Number: Number2, + NumberIsNaN, + Promise: Promise2, + PromiseReject, + PromiseResolve, + PromisePrototypeThen, + Symbol: Symbol2 + } = require_primordials(); + var kEmpty = Symbol2("kEmpty"); + var kEof = Symbol2("kEof"); + function compose(stream2, options) { + if (options != null) { + validateObject(options, "options"); + } + if ((options === null || options === void 0 ? void 0 : options.signal) != null) { + validateAbortSignal(options.signal, "options.signal"); + } + if (isNodeStream(stream2) && !isWritable(stream2)) { + throw new ERR_INVALID_ARG_VALUE("stream", stream2, "must be writable"); + } + const composedStream = staticCompose(this, stream2); + if (options !== null && options !== void 0 && options.signal) { + addAbortSignalNoValidate(options.signal, composedStream); + } + return composedStream; + } + function map(fn, options) { + if (typeof fn !== "function") { + throw new ERR_INVALID_ARG_TYPE2("fn", ["Function", "AsyncFunction"], fn); + } + if (options != null) { + validateObject(options, "options"); + } + if ((options === null || options === void 0 ? void 0 : options.signal) != null) { + validateAbortSignal(options.signal, "options.signal"); + } + let concurrency = 1; + if ((options === null || options === void 0 ? void 0 : options.concurrency) != null) { + concurrency = MathFloor(options.concurrency); + } + let highWaterMark = concurrency - 1; + if ((options === null || options === void 0 ? void 0 : options.highWaterMark) != null) { + highWaterMark = MathFloor(options.highWaterMark); + } + validateInteger(concurrency, "options.concurrency", 1); + validateInteger(highWaterMark, "options.highWaterMark", 0); + highWaterMark += concurrency; + return async function* map2() { + const signal = require_util().AbortSignalAny( + [options === null || options === void 0 ? void 0 : options.signal].filter(Boolean2) + ); + const stream2 = this; + const queue = []; + const signalOpt = { + signal + }; + let next; + let resume; + let done = false; + let cnt = 0; + function onCatch() { + done = true; + afterItemProcessed(); + } + function afterItemProcessed() { + cnt -= 1; + maybeResume(); + } + function maybeResume() { + if (resume && !done && cnt < concurrency && queue.length < highWaterMark) { + resume(); + resume = null; + } + } + async function pump() { + try { + for await (let val of stream2) { + if (done) { + return; + } + if (signal.aborted) { + throw new AbortError(); + } + try { + val = fn(val, signalOpt); + if (val === kEmpty) { + continue; + } + val = PromiseResolve(val); + } catch (err) { + val = PromiseReject(err); + } + cnt += 1; + PromisePrototypeThen(val, afterItemProcessed, onCatch); + queue.push(val); + if (next) { + next(); + next = null; + } + if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) { + await new Promise2((resolve) => { + resume = resolve; + }); + } + } + queue.push(kEof); + } catch (err) { + const val = PromiseReject(err); + PromisePrototypeThen(val, afterItemProcessed, onCatch); + queue.push(val); + } finally { + done = true; + if (next) { + next(); + next = null; + } + } + } + pump(); + try { + while (true) { + while (queue.length > 0) { + const val = await queue[0]; + if (val === kEof) { + return; + } + if (signal.aborted) { + throw new AbortError(); + } + if (val !== kEmpty) { + yield val; + } + queue.shift(); + maybeResume(); + } + await new Promise2((resolve) => { + next = resolve; + }); + } + } finally { + done = true; + if (resume) { + resume(); + resume = null; + } + } + }.call(this); + } + function asIndexedPairs(options = void 0) { + if (options != null) { + validateObject(options, "options"); + } + if ((options === null || options === void 0 ? void 0 : options.signal) != null) { + validateAbortSignal(options.signal, "options.signal"); + } + return async function* asIndexedPairs2() { + let index2 = 0; + for await (const val of this) { + var _options$signal; + if (options !== null && options !== void 0 && (_options$signal = options.signal) !== null && _options$signal !== void 0 && _options$signal.aborted) { + throw new AbortError({ + cause: options.signal.reason + }); + } + yield [index2++, val]; + } + }.call(this); + } + async function some(fn, options = void 0) { + for await (const unused of filter.call(this, fn, options)) { + return true; + } + return false; + } + async function every(fn, options = void 0) { + if (typeof fn !== "function") { + throw new ERR_INVALID_ARG_TYPE2("fn", ["Function", "AsyncFunction"], fn); + } + return !await some.call( + this, + async (...args) => { + return !await fn(...args); + }, + options + ); + } + async function find(fn, options) { + for await (const result of filter.call(this, fn, options)) { + return result; + } + return void 0; + } + async function forEach(fn, options) { + if (typeof fn !== "function") { + throw new ERR_INVALID_ARG_TYPE2("fn", ["Function", "AsyncFunction"], fn); + } + async function forEachFn(value, options2) { + await fn(value, options2); + return kEmpty; + } + for await (const unused of map.call(this, forEachFn, options)) + ; + } + function filter(fn, options) { + if (typeof fn !== "function") { + throw new ERR_INVALID_ARG_TYPE2("fn", ["Function", "AsyncFunction"], fn); + } + async function filterFn(value, options2) { + if (await fn(value, options2)) { + return value; + } + return kEmpty; + } + return map.call(this, filterFn, options); + } + var ReduceAwareErrMissingArgs = class extends ERR_MISSING_ARGS { + constructor() { + super("reduce"); + this.message = "Reduce of an empty stream requires an initial value"; + } + }; + async function reduce(reducer, initialValue, options) { + var _options$signal2; + if (typeof reducer !== "function") { + throw new ERR_INVALID_ARG_TYPE2("reducer", ["Function", "AsyncFunction"], reducer); + } + if (options != null) { + validateObject(options, "options"); + } + if ((options === null || options === void 0 ? void 0 : options.signal) != null) { + validateAbortSignal(options.signal, "options.signal"); + } + let hasInitialValue = arguments.length > 1; + if (options !== null && options !== void 0 && (_options$signal2 = options.signal) !== null && _options$signal2 !== void 0 && _options$signal2.aborted) { + const err = new AbortError(void 0, { + cause: options.signal.reason + }); + this.once("error", () => { + }); + await finished3(this.destroy(err)); + throw err; + } + const ac = new AbortController(); + const signal = ac.signal; + if (options !== null && options !== void 0 && options.signal) { + const opts = { + once: true, + [kWeakHandler]: this, + [kResistStopPropagation]: true + }; + options.signal.addEventListener("abort", () => ac.abort(), opts); + } + let gotAnyItemFromStream = false; + try { + for await (const value of this) { + var _options$signal3; + gotAnyItemFromStream = true; + if (options !== null && options !== void 0 && (_options$signal3 = options.signal) !== null && _options$signal3 !== void 0 && _options$signal3.aborted) { + throw new AbortError(); + } + if (!hasInitialValue) { + initialValue = value; + hasInitialValue = true; + } else { + initialValue = await reducer(initialValue, value, { + signal + }); + } + } + if (!gotAnyItemFromStream && !hasInitialValue) { + throw new ReduceAwareErrMissingArgs(); + } + } finally { + ac.abort(); + } + return initialValue; + } + async function toArray(options) { + if (options != null) { + validateObject(options, "options"); + } + if ((options === null || options === void 0 ? void 0 : options.signal) != null) { + validateAbortSignal(options.signal, "options.signal"); + } + const result = []; + for await (const val of this) { + var _options$signal4; + if (options !== null && options !== void 0 && (_options$signal4 = options.signal) !== null && _options$signal4 !== void 0 && _options$signal4.aborted) { + throw new AbortError(void 0, { + cause: options.signal.reason + }); + } + ArrayPrototypePush(result, val); + } + return result; + } + function flatMap(fn, options) { + const values = map.call(this, fn, options); + return async function* flatMap2() { + for await (const val of values) { + yield* val; + } + }.call(this); + } + function toIntegerOrInfinity(number) { + number = Number2(number); + if (NumberIsNaN(number)) { + return 0; + } + if (number < 0) { + throw new ERR_OUT_OF_RANGE("number", ">= 0", number); + } + return number; + } + function drop(number, options = void 0) { + if (options != null) { + validateObject(options, "options"); + } + if ((options === null || options === void 0 ? void 0 : options.signal) != null) { + validateAbortSignal(options.signal, "options.signal"); + } + number = toIntegerOrInfinity(number); + return async function* drop2() { + var _options$signal5; + if (options !== null && options !== void 0 && (_options$signal5 = options.signal) !== null && _options$signal5 !== void 0 && _options$signal5.aborted) { + throw new AbortError(); + } + for await (const val of this) { + var _options$signal6; + if (options !== null && options !== void 0 && (_options$signal6 = options.signal) !== null && _options$signal6 !== void 0 && _options$signal6.aborted) { + throw new AbortError(); + } + if (number-- <= 0) { + yield val; + } + } + }.call(this); + } + function take(number, options = void 0) { + if (options != null) { + validateObject(options, "options"); + } + if ((options === null || options === void 0 ? void 0 : options.signal) != null) { + validateAbortSignal(options.signal, "options.signal"); + } + number = toIntegerOrInfinity(number); + return async function* take2() { + var _options$signal7; + if (options !== null && options !== void 0 && (_options$signal7 = options.signal) !== null && _options$signal7 !== void 0 && _options$signal7.aborted) { + throw new AbortError(); + } + for await (const val of this) { + var _options$signal8; + if (options !== null && options !== void 0 && (_options$signal8 = options.signal) !== null && _options$signal8 !== void 0 && _options$signal8.aborted) { + throw new AbortError(); + } + if (number-- > 0) { + yield val; + } + if (number <= 0) { + return; + } + } + }.call(this); + } + module.exports.streamReturningOperators = { + asIndexedPairs: deprecate(asIndexedPairs, "readable.asIndexedPairs will be removed in a future version."), + drop, + filter, + flatMap, + map, + take, + compose + }; + module.exports.promiseReturningOperators = { + every, + forEach, + reduce, + toArray, + some, + find + }; + } +}); + +// node_modules/readable-stream/lib/stream/promises.js +var require_promises = __commonJS({ + "node_modules/readable-stream/lib/stream/promises.js"(exports, module) { + "use strict"; + var { ArrayPrototypePop, Promise: Promise2 } = require_primordials(); + var { isIterable, isNodeStream, isWebStream } = require_utils(); + var { pipelineImpl: pl } = require_pipeline(); + var { finished: finished3 } = require_end_of_stream(); + require_stream(); + function pipeline2(...streams) { + return new Promise2((resolve, reject) => { + let signal; + let end; + const lastArg = streams[streams.length - 1]; + if (lastArg && typeof lastArg === "object" && !isNodeStream(lastArg) && !isIterable(lastArg) && !isWebStream(lastArg)) { + const options = ArrayPrototypePop(streams); + signal = options.signal; + end = options.end; + } + pl( + streams, + (err, value) => { + if (err) { + reject(err); + } else { + resolve(value); + } + }, + { + signal, + end + } + ); + }); + } + module.exports = { + finished: finished3, + pipeline: pipeline2 + }; + } +}); + +// node_modules/readable-stream/lib/stream.js +var require_stream = __commonJS({ + "node_modules/readable-stream/lib/stream.js"(exports, module) { + var { Buffer: Buffer2 } = __require("buffer"); + var { ObjectDefineProperty, ObjectKeys, ReflectApply } = require_primordials(); + var { + promisify: { custom: customPromisify } + } = require_util(); + var { streamReturningOperators, promiseReturningOperators } = require_operators(); + var { + codes: { ERR_ILLEGAL_CONSTRUCTOR } + } = require_errors(); + var compose = require_compose(); + var { setDefaultHighWaterMark, getDefaultHighWaterMark } = require_state(); + var { pipeline: pipeline2 } = require_pipeline(); + var { destroyer } = require_destroy(); + var eos = require_end_of_stream(); + var promises = require_promises(); + var utils = require_utils(); + var Stream2 = module.exports = require_legacy().Stream; + Stream2.isDestroyed = utils.isDestroyed; + Stream2.isDisturbed = utils.isDisturbed; + Stream2.isErrored = utils.isErrored; + Stream2.isReadable = utils.isReadable; + Stream2.isWritable = utils.isWritable; + Stream2.Readable = require_readable(); + for (const key of ObjectKeys(streamReturningOperators)) { + let fn2 = function(...args) { + if (new.target) { + throw ERR_ILLEGAL_CONSTRUCTOR(); + } + return Stream2.Readable.from(ReflectApply(op, this, args)); + }; + fn = fn2; + const op = streamReturningOperators[key]; + ObjectDefineProperty(fn2, "name", { + __proto__: null, + value: op.name + }); + ObjectDefineProperty(fn2, "length", { + __proto__: null, + value: op.length + }); + ObjectDefineProperty(Stream2.Readable.prototype, key, { + __proto__: null, + value: fn2, + enumerable: false, + configurable: true, + writable: true + }); + } + var fn; + for (const key of ObjectKeys(promiseReturningOperators)) { + let fn2 = function(...args) { + if (new.target) { + throw ERR_ILLEGAL_CONSTRUCTOR(); + } + return ReflectApply(op, this, args); + }; + fn = fn2; + const op = promiseReturningOperators[key]; + ObjectDefineProperty(fn2, "name", { + __proto__: null, + value: op.name + }); + ObjectDefineProperty(fn2, "length", { + __proto__: null, + value: op.length + }); + ObjectDefineProperty(Stream2.Readable.prototype, key, { + __proto__: null, + value: fn2, + enumerable: false, + configurable: true, + writable: true + }); + } + var fn; + Stream2.Writable = require_writable(); + Stream2.Duplex = require_duplex(); + Stream2.Transform = require_transform(); + Stream2.PassThrough = require_passthrough(); + Stream2.pipeline = pipeline2; + var { addAbortSignal } = require_add_abort_signal(); + Stream2.addAbortSignal = addAbortSignal; + Stream2.finished = eos; + Stream2.destroy = destroyer; + Stream2.compose = compose; + Stream2.setDefaultHighWaterMark = setDefaultHighWaterMark; + Stream2.getDefaultHighWaterMark = getDefaultHighWaterMark; + ObjectDefineProperty(Stream2, "promises", { + __proto__: null, + configurable: true, + enumerable: true, + get() { + return promises; + } + }); + ObjectDefineProperty(pipeline2, customPromisify, { + __proto__: null, + enumerable: true, + get() { + return promises.pipeline; + } + }); + ObjectDefineProperty(eos, customPromisify, { + __proto__: null, + enumerable: true, + get() { + return promises.finished; + } + }); + Stream2.Stream = Stream2; + Stream2._isUint8Array = function isUint8Array(value) { + return value instanceof Uint8Array; + }; + Stream2._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) { + return Buffer2.from(chunk.buffer, chunk.byteOffset, chunk.byteLength); + }; + } +}); + +// node_modules/readable-stream/lib/ours/index.js +var require_ours = __commonJS({ + "node_modules/readable-stream/lib/ours/index.js"(exports, module) { + "use strict"; + var Stream2 = __require("stream"); + if (Stream2 && process.env.READABLE_STREAM === "disable") { + const promises = Stream2.promises; + module.exports._uint8ArrayToBuffer = Stream2._uint8ArrayToBuffer; + module.exports._isUint8Array = Stream2._isUint8Array; + module.exports.isDisturbed = Stream2.isDisturbed; + module.exports.isErrored = Stream2.isErrored; + module.exports.isReadable = Stream2.isReadable; + module.exports.Readable = Stream2.Readable; + module.exports.Writable = Stream2.Writable; + module.exports.Duplex = Stream2.Duplex; + module.exports.Transform = Stream2.Transform; + module.exports.PassThrough = Stream2.PassThrough; + module.exports.addAbortSignal = Stream2.addAbortSignal; + module.exports.finished = Stream2.finished; + module.exports.destroy = Stream2.destroy; + module.exports.pipeline = Stream2.pipeline; + module.exports.compose = Stream2.compose; + Object.defineProperty(Stream2, "promises", { + configurable: true, + enumerable: true, + get() { + return promises; + } + }); + module.exports.Stream = Stream2.Stream; + } else { + const CustomStream = require_stream(); + const promises = require_promises(); + const originalDestroy = CustomStream.Readable.destroy; + module.exports = CustomStream.Readable; + module.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer; + module.exports._isUint8Array = CustomStream._isUint8Array; + module.exports.isDisturbed = CustomStream.isDisturbed; + module.exports.isErrored = CustomStream.isErrored; + module.exports.isReadable = CustomStream.isReadable; + module.exports.Readable = CustomStream.Readable; + module.exports.Writable = CustomStream.Writable; + module.exports.Duplex = CustomStream.Duplex; + module.exports.Transform = CustomStream.Transform; + module.exports.PassThrough = CustomStream.PassThrough; + module.exports.addAbortSignal = CustomStream.addAbortSignal; + module.exports.finished = CustomStream.finished; + module.exports.destroy = CustomStream.destroy; + module.exports.destroy = originalDestroy; + module.exports.pipeline = CustomStream.pipeline; + module.exports.compose = CustomStream.compose; + Object.defineProperty(CustomStream, "promises", { + configurable: true, + enumerable: true, + get() { + return promises; + } + }); + module.exports.Stream = CustomStream.Stream; + } + module.exports.default = module.exports; + } +}); + +// ../unsafe/dist/lib/natives/HandleHolder.js +var HandleHolder2 = function() { + function HandleHolder3(type) { + this.type = type; + } + HandleHolder3.prototype.equals = function(holder) { + return this === holder; + }; + return HandleHolder3; +}(); + +// ../unsafe/dist/lib/database/natives.js +var natives_default = { + ConvertRace: { returnType: "race", args: [{ name: "i", type: "integer" }] }, + ConvertAllianceType: { returnType: "alliancetype", args: [{ name: "i", type: "integer" }] }, + ConvertRacePref: { returnType: "racepreference", args: [{ name: "i", type: "integer" }] }, + ConvertIGameState: { returnType: "igamestate", args: [{ name: "i", type: "integer" }] }, + ConvertFGameState: { returnType: "fgamestate", args: [{ name: "i", type: "integer" }] }, + ConvertPlayerState: { returnType: "playerstate", args: [{ name: "i", type: "integer" }] }, + ConvertPlayerScore: { returnType: "playerscore", args: [{ name: "i", type: "integer" }] }, + ConvertPlayerGameResult: { returnType: "playergameresult", args: [{ name: "i", type: "integer" }] }, + ConvertUnitState: { returnType: "unitstate", args: [{ name: "i", type: "integer" }] }, + ConvertAIDifficulty: { returnType: "aidifficulty", args: [{ name: "i", type: "integer" }] }, + ConvertGameEvent: { returnType: "gameevent", args: [{ name: "i", type: "integer" }] }, + ConvertPlayerEvent: { returnType: "playerevent", args: [{ name: "i", type: "integer" }] }, + ConvertPlayerUnitEvent: { returnType: "playerunitevent", args: [{ name: "i", type: "integer" }] }, + ConvertWidgetEvent: { returnType: "widgetevent", args: [{ name: "i", type: "integer" }] }, + ConvertDialogEvent: { returnType: "dialogevent", args: [{ name: "i", type: "integer" }] }, + ConvertUnitEvent: { returnType: "unitevent", args: [{ name: "i", type: "integer" }] }, + ConvertLimitOp: { returnType: "limitop", args: [{ name: "i", type: "integer" }] }, + ConvertUnitType: { returnType: "unittype", args: [{ name: "i", type: "integer" }] }, + ConvertGameSpeed: { returnType: "gamespeed", args: [{ name: "i", type: "integer" }] }, + ConvertPlacement: { returnType: "placement", args: [{ name: "i", type: "integer" }] }, + ConvertStartLocPrio: { returnType: "startlocprio", args: [{ name: "i", type: "integer" }] }, + ConvertGameDifficulty: { returnType: "gamedifficulty", args: [{ name: "i", type: "integer" }] }, + ConvertGameType: { returnType: "gametype", args: [{ name: "i", type: "integer" }] }, + ConvertMapFlag: { returnType: "mapflag", args: [{ name: "i", type: "integer" }] }, + ConvertMapVisibility: { returnType: "mapvisibility", args: [{ name: "i", type: "integer" }] }, + ConvertMapSetting: { returnType: "mapsetting", args: [{ name: "i", type: "integer" }] }, + ConvertMapDensity: { returnType: "mapdensity", args: [{ name: "i", type: "integer" }] }, + ConvertMapControl: { returnType: "mapcontrol", args: [{ name: "i", type: "integer" }] }, + ConvertPlayerColor: { returnType: "playercolor", args: [{ name: "i", type: "integer" }] }, + ConvertPlayerSlotState: { returnType: "playerslotstate", args: [{ name: "i", type: "integer" }] }, + ConvertVolumeGroup: { returnType: "volumegroup", args: [{ name: "i", type: "integer" }] }, + ConvertCameraField: { returnType: "camerafield", args: [{ name: "i", type: "integer" }] }, + ConvertBlendMode: { returnType: "blendmode", args: [{ name: "i", type: "integer" }] }, + ConvertRarityControl: { returnType: "raritycontrol", args: [{ name: "i", type: "integer" }] }, + ConvertTexMapFlags: { returnType: "texmapflags", args: [{ name: "i", type: "integer" }] }, + ConvertFogState: { returnType: "fogstate", args: [{ name: "i", type: "integer" }] }, + ConvertEffectType: { returnType: "effecttype", args: [{ name: "i", type: "integer" }] }, + ConvertVersion: { returnType: "version", args: [{ name: "i", type: "integer" }] }, + ConvertItemType: { returnType: "itemtype", args: [{ name: "i", type: "integer" }] }, + ConvertAttackType: { returnType: "attacktype", args: [{ name: "i", type: "integer" }] }, + ConvertDamageType: { returnType: "damagetype", args: [{ name: "i", type: "integer" }] }, + ConvertWeaponType: { returnType: "weapontype", args: [{ name: "i", type: "integer" }] }, + ConvertSoundType: { returnType: "soundtype", args: [{ name: "i", type: "integer" }] }, + ConvertPathingType: { returnType: "pathingtype", args: [{ name: "i", type: "integer" }] }, + ConvertProjectileType: { returnType: "projectiletype", args: [{ name: "i", type: "integer" }] }, + ConvertMappedField: { returnType: "mappedfield", args: [{ name: "i", type: "integer" }] }, + ConvertAttachmentType: { returnType: "attachmenttype", args: [{ name: "i", type: "integer" }] }, + ConvertBoneType: { returnType: "bonetype", args: [{ name: "i", type: "integer" }] }, + ConvertAnimType: { returnType: "animtype", args: [{ name: "i", type: "integer" }] }, + ConvertSubAnimType: { returnType: "subanimtype", args: [{ name: "i", type: "integer" }] }, + ConvertCursorAnimType: { returnType: "cursoranimtype", args: [{ name: "i", type: "integer" }] }, + ConvertOriginFrameType: { returnType: "originframetype", args: [{ name: "i", type: "integer" }] }, + ConvertFramePointType: { returnType: "framepointtype", args: [{ name: "i", type: "integer" }] }, + ConvertTextAlignType: { returnType: "textaligntype", args: [{ name: "i", type: "integer" }] }, + ConvertFrameEventType: { returnType: "frameeventtype", args: [{ name: "i", type: "integer" }] }, + ConvertOsKeyType: { returnType: "oskeytype", args: [{ name: "i", type: "integer" }] }, + ConvertMouseButtonType: { returnType: "mousebuttontype", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityIntegerField: { returnType: "abilityintegerfield", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityRealField: { returnType: "abilityrealfield", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityBooleanField: { returnType: "abilitybooleanfield", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityStringField: { returnType: "abilitystringfield", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityIntegerLevelField: { returnType: "abilityintegerlevelfield", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityRealLevelField: { returnType: "abilityreallevelfield", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityBooleanLevelField: { returnType: "abilitybooleanlevelfield", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityStringLevelField: { returnType: "abilitystringlevelfield", args: [{ name: "i", type: "integer" }] }, + ConvertAbilityIntegerLevelArrayField: { + returnType: "abilityintegerlevelarrayfield", + args: [{ name: "i", type: "integer" }] + }, + ConvertAbilityRealLevelArrayField: { + returnType: "abilityreallevelarrayfield", + args: [{ name: "i", type: "integer" }] + }, + ConvertAbilityBooleanLevelArrayField: { + returnType: "abilitybooleanlevelarrayfield", + args: [{ name: "i", type: "integer" }] + }, + ConvertAbilityStringLevelArrayField: { + returnType: "abilitystringlevelarrayfield", + args: [{ name: "i", type: "integer" }] + }, + ConvertUnitIntegerField: { returnType: "unitintegerfield", args: [{ name: "i", type: "integer" }] }, + ConvertUnitRealField: { returnType: "unitrealfield", args: [{ name: "i", type: "integer" }] }, + ConvertUnitBooleanField: { returnType: "unitbooleanfield", args: [{ name: "i", type: "integer" }] }, + ConvertUnitStringField: { returnType: "unitstringfield", args: [{ name: "i", type: "integer" }] }, + ConvertUnitWeaponIntegerField: { returnType: "unitweaponintegerfield", args: [{ name: "i", type: "integer" }] }, + ConvertUnitWeaponRealField: { returnType: "unitweaponrealfield", args: [{ name: "i", type: "integer" }] }, + ConvertUnitWeaponBooleanField: { returnType: "unitweaponbooleanfield", args: [{ name: "i", type: "integer" }] }, + ConvertUnitWeaponStringField: { returnType: "unitweaponstringfield", args: [{ name: "i", type: "integer" }] }, + ConvertItemIntegerField: { returnType: "itemintegerfield", args: [{ name: "i", type: "integer" }] }, + ConvertItemRealField: { returnType: "itemrealfield", args: [{ name: "i", type: "integer" }] }, + ConvertItemBooleanField: { returnType: "itembooleanfield", args: [{ name: "i", type: "integer" }] }, + ConvertItemStringField: { returnType: "itemstringfield", args: [{ name: "i", type: "integer" }] }, + ConvertMoveType: { returnType: "movetype", args: [{ name: "i", type: "integer" }] }, + ConvertPathingAIType: { returnType: "pathingaitype", args: [{ name: "i", type: "integer" }] }, + ConvertCollisionType: { returnType: "collisiontype", args: [{ name: "i", type: "integer" }] }, + ConvertTargetFlag: { returnType: "targetflag", args: [{ name: "i", type: "integer" }] }, + ConvertArmorType: { returnType: "armortype", args: [{ name: "i", type: "integer" }] }, + ConvertHeroAttribute: { returnType: "heroattribute", args: [{ name: "i", type: "integer" }] }, + ConvertDefenseType: { returnType: "defensetype", args: [{ name: "i", type: "integer" }] }, + ConvertRegenType: { returnType: "regentype", args: [{ name: "i", type: "integer" }] }, + ConvertUnitCategory: { returnType: "unitcategory", args: [{ name: "i", type: "integer" }] }, + ConvertPathingFlag: { returnType: "pathingflag", args: [{ name: "i", type: "integer" }] }, + ConvertTimeType: { returnType: "timetype", args: [{ name: "i", type: "integer" }] }, + ConvertVariableType: { returnType: "variabletype", args: [{ name: "i", type: "integer" }] }, + ConvertRenderStage: { returnType: "renderstage", args: [{ name: "i", type: "integer" }] }, + OrderId: { returnType: "integer", args: [{ name: "orderIdString", type: "string" }] }, + OrderId2String: { returnType: "string", args: [{ name: "orderId", type: "integer" }] }, + UnitId: { returnType: "integer", args: [{ name: "unitIdString", type: "string" }] }, + UnitId2String: { returnType: "string", args: [{ name: "unitId", type: "integer" }] }, + AbilityId: { returnType: "integer", args: [{ name: "abilityIdString", type: "string" }] }, + AbilityId2String: { returnType: "string", args: [{ name: "abilityId", type: "integer" }] }, + GetObjectName: { returnType: "string", args: [{ name: "objectId", type: "integer" }] }, + GetBJMaxPlayers: { returnType: "integer", args: [] }, + GetBJPlayerNeutralVictim: { returnType: "integer", args: [] }, + GetBJPlayerNeutralExtra: { returnType: "integer", args: [] }, + GetBJMaxPlayerSlots: { returnType: "integer", args: [] }, + GetPlayerNeutralPassive: { returnType: "integer", args: [] }, + GetPlayerNeutralAggressive: { returnType: "integer", args: [] }, + GetJassArrayLimit: { returnType: "integer", args: [] }, + GetTextTagLimit: { returnType: "integer", args: [] }, + Deg2Rad: { returnType: "real", args: [{ name: "degrees", type: "real" }] }, + Rad2Deg: { returnType: "real", args: [{ name: "radians", type: "real" }] }, + Sin: { returnType: "real", args: [{ name: "radians", type: "real" }] }, + Cos: { returnType: "real", args: [{ name: "radians", type: "real" }] }, + Tan: { returnType: "real", args: [{ name: "radians", type: "real" }] }, + Asin: { returnType: "real", args: [{ name: "y", type: "real" }] }, + Acos: { returnType: "real", args: [{ name: "x", type: "real" }] }, + Atan: { returnType: "real", args: [{ name: "x", type: "real" }] }, + Atan2: { + returnType: "real", + args: [ + { name: "y", type: "real" }, + { name: "x", type: "real" } + ] + }, + SquareRoot: { returnType: "real", args: [{ name: "x", type: "real" }] }, + Pow: { + returnType: "real", + args: [ + { name: "x", type: "real" }, + { name: "power", type: "real" } + ] + }, + I2R: { returnType: "real", args: [{ name: "i", type: "integer" }] }, + R2I: { returnType: "integer", args: [{ name: "r", type: "real" }] }, + I2S: { returnType: "string", args: [{ name: "i", type: "integer" }] }, + R2S: { returnType: "string", args: [{ name: "r", type: "real" }] }, + R2SW: { + returnType: "string", + args: [ + { name: "r", type: "real" }, + { name: "width", type: "integer" }, + { name: "precision", type: "integer" } + ] + }, + S2I: { returnType: "integer", args: [{ name: "s", type: "string" }] }, + S2R: { returnType: "real", args: [{ name: "s", type: "string" }] }, + GetHandleId: { returnType: "integer", args: [{ name: "h", type: "handle" }] }, + SubString: { + returnType: "string", + args: [ + { name: "source", type: "string" }, + { name: "start", type: "integer" }, + { name: "end", type: "integer" } + ] + }, + StringLength: { returnType: "integer", args: [{ name: "s", type: "string" }] }, + StringCase: { + returnType: "string", + args: [ + { name: "source", type: "string" }, + { name: "upper", type: "boolean" } + ] + }, + StringHash: { returnType: "integer", args: [{ name: "s", type: "string" }] }, + GetLocalizedString: { returnType: "string", args: [{ name: "source", type: "string" }] }, + GetLocalizedHotkey: { returnType: "integer", args: [{ name: "source", type: "string" }] }, + SetMapName: { returnType: "nothing", args: [{ name: "name", type: "string" }] }, + SetMapDescription: { returnType: "nothing", args: [{ name: "description", type: "string" }] }, + SetTeams: { returnType: "nothing", args: [{ name: "teamcount", type: "integer" }] }, + SetPlayers: { returnType: "nothing", args: [{ name: "playercount", type: "integer" }] }, + DefineStartLocation: { + returnType: "nothing", + args: [ + { name: "whichStartLoc", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + DefineStartLocationLoc: { + returnType: "nothing", + args: [ + { name: "whichStartLoc", type: "integer" }, + { name: "whichLocation", type: "location" } + ] + }, + SetStartLocPrioCount: { + returnType: "nothing", + args: [ + { name: "whichStartLoc", type: "integer" }, + { name: "prioSlotCount", type: "integer" } + ] + }, + SetStartLocPrio: { + returnType: "nothing", + args: [ + { name: "whichStartLoc", type: "integer" }, + { name: "prioSlotIndex", type: "integer" }, + { name: "otherStartLocIndex", type: "integer" }, + { name: "priority", type: "startlocprio" } + ] + }, + GetStartLocPrioSlot: { + returnType: "integer", + args: [ + { name: "whichStartLoc", type: "integer" }, + { name: "prioSlotIndex", type: "integer" } + ] + }, + GetStartLocPrio: { + returnType: "startlocprio", + args: [ + { name: "whichStartLoc", type: "integer" }, + { name: "prioSlotIndex", type: "integer" } + ] + }, + SetGameTypeSupported: { + returnType: "nothing", + args: [ + { name: "whichGameType", type: "gametype" }, + { name: "value", type: "boolean" } + ] + }, + SetMapFlag: { + returnType: "nothing", + args: [ + { name: "whichMapFlag", type: "mapflag" }, + { name: "value", type: "boolean" } + ] + }, + SetGamePlacement: { returnType: "nothing", args: [{ name: "whichPlacementType", type: "placement" }] }, + SetGameSpeed: { returnType: "nothing", args: [{ name: "whichspeed", type: "gamespeed" }] }, + SetGameDifficulty: { returnType: "nothing", args: [{ name: "whichdifficulty", type: "gamedifficulty" }] }, + SetResourceDensity: { returnType: "nothing", args: [{ name: "whichdensity", type: "mapdensity" }] }, + SetCreatureDensity: { returnType: "nothing", args: [{ name: "whichdensity", type: "mapdensity" }] }, + GetTeams: { returnType: "integer", args: [] }, + GetPlayers: { returnType: "integer", args: [] }, + IsGameTypeSupported: { returnType: "boolean", args: [{ name: "whichGameType", type: "gametype" }] }, + GetGameTypeSelected: { returnType: "gametype", args: [] }, + IsMapFlagSet: { returnType: "boolean", args: [{ name: "whichMapFlag", type: "mapflag" }] }, + GetGamePlacement: { returnType: "placement", args: [] }, + GetGameSpeed: { returnType: "gamespeed", args: [] }, + GetGameDifficulty: { returnType: "gamedifficulty", args: [] }, + GetResourceDensity: { returnType: "mapdensity", args: [] }, + GetCreatureDensity: { returnType: "mapdensity", args: [] }, + GetStartLocationX: { returnType: "real", args: [{ name: "whichStartLocation", type: "integer" }] }, + GetStartLocationY: { returnType: "real", args: [{ name: "whichStartLocation", type: "integer" }] }, + GetStartLocationLoc: { returnType: "location", args: [{ name: "whichStartLocation", type: "integer" }] }, + SetPlayerTeam: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "whichTeam", type: "integer" } + ] + }, + SetPlayerStartLocation: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "startLocIndex", type: "integer" } + ] + }, + ForcePlayerStartLocation: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "startLocIndex", type: "integer" } + ] + }, + SetPlayerColor: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "color", type: "playercolor" } + ] + }, + SetPlayerAlliance: { + returnType: "nothing", + args: [ + { name: "sourcePlayer", type: "player" }, + { name: "otherPlayer", type: "player" }, + { name: "whichAllianceSetting", type: "alliancetype" }, + { name: "value", type: "boolean" } + ] + }, + SetPlayerTaxRate: { + returnType: "nothing", + args: [ + { name: "sourcePlayer", type: "player" }, + { name: "otherPlayer", type: "player" }, + { name: "whichResource", type: "playerstate" }, + { name: "rate", type: "integer" } + ] + }, + SetPlayerRacePreference: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "whichRacePreference", type: "racepreference" } + ] + }, + SetPlayerRaceSelectable: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "value", type: "boolean" } + ] + }, + SetPlayerController: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "controlType", type: "mapcontrol" } + ] + }, + SetPlayerName: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "name", type: "string" } + ] + }, + SetPlayerOnScoreScreen: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "flag", type: "boolean" } + ] + }, + GetPlayerTeam: { returnType: "integer", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerStartLocation: { returnType: "integer", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerColor: { returnType: "playercolor", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerSelectable: { returnType: "boolean", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerController: { returnType: "mapcontrol", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerSlotState: { returnType: "playerslotstate", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerTaxRate: { + returnType: "integer", + args: [ + { name: "sourcePlayer", type: "player" }, + { name: "otherPlayer", type: "player" }, + { name: "whichResource", type: "playerstate" } + ] + }, + IsPlayerRacePrefSet: { + returnType: "boolean", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "pref", type: "racepreference" } + ] + }, + GetPlayerName: { returnType: "string", args: [{ name: "whichPlayer", type: "player" }] }, + CreateTimer: { returnType: "timer", args: [] }, + DestroyTimer: { returnType: "nothing", args: [{ name: "whichTimer", type: "timer" }] }, + TimerStart: { + returnType: "nothing", + args: [ + { name: "whichTimer", type: "timer" }, + { name: "timeout", type: "real" }, + { name: "periodic", type: "boolean" }, + { name: "handlerFunc", type: "code" } + ] + }, + TimerGetElapsed: { returnType: "real", args: [{ name: "whichTimer", type: "timer" }] }, + TimerGetRemaining: { returnType: "real", args: [{ name: "whichTimer", type: "timer" }] }, + TimerGetTimeout: { returnType: "real", args: [{ name: "whichTimer", type: "timer" }] }, + PauseTimer: { returnType: "nothing", args: [{ name: "whichTimer", type: "timer" }] }, + ResumeTimer: { returnType: "nothing", args: [{ name: "whichTimer", type: "timer" }] }, + GetExpiredTimer: { returnType: "timer", args: [] }, + CreateGroup: { returnType: "group", args: [] }, + DestroyGroup: { returnType: "nothing", args: [{ name: "whichGroup", type: "group" }] }, + GroupAddUnit: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "whichUnit", type: "unit" } + ] + }, + GroupRemoveUnit: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "whichUnit", type: "unit" } + ] + }, + GroupClear: { returnType: "nothing", args: [{ name: "whichGroup", type: "group" }] }, + GroupEnumUnitsOfType: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "unitname", type: "string" }, + { name: "filter", type: "boolexpr" } + ] + }, + GroupEnumUnitsOfPlayer: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "whichPlayer", type: "player" }, + { name: "filter", type: "boolexpr" } + ] + }, + GroupEnumUnitsOfTypeCounted: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "unitname", type: "string" }, + { name: "filter", type: "boolexpr" }, + { name: "countLimit", type: "integer" } + ] + }, + GroupEnumUnitsInRect: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "r", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + GroupEnumUnitsInRectCounted: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "r", type: "rect" }, + { name: "filter", type: "boolexpr" }, + { name: "countLimit", type: "integer" } + ] + }, + GroupEnumUnitsInRange: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + GroupEnumUnitsInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + GroupEnumUnitsInRangeCounted: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" }, + { name: "countLimit", type: "integer" } + ] + }, + GroupEnumUnitsInRangeOfLocCounted: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" }, + { name: "countLimit", type: "integer" } + ] + }, + GroupEnumUnitsSelected: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "whichPlayer", type: "player" }, + { name: "filter", type: "boolexpr" } + ] + }, + GroupImmediateOrder: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "order", type: "string" } + ] + }, + GroupImmediateOrderById: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "order", type: "integer" } + ] + }, + GroupPointOrder: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "order", type: "string" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + GroupPointOrderLoc: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "order", type: "string" }, + { name: "whichLocation", type: "location" } + ] + }, + GroupPointOrderById: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "order", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + GroupPointOrderByIdLoc: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "order", type: "integer" }, + { name: "whichLocation", type: "location" } + ] + }, + GroupTargetOrder: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "order", type: "string" }, + { name: "targetWidget", type: "widget" } + ] + }, + GroupTargetOrderById: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "order", type: "integer" }, + { name: "targetWidget", type: "widget" } + ] + }, + ForGroup: { + returnType: "nothing", + args: [ + { name: "whichGroup", type: "group" }, + { name: "callback", type: "code" } + ] + }, + FirstOfGroup: { returnType: "unit", args: [{ name: "whichGroup", type: "group" }] }, + CreateForce: { returnType: "force", args: [] }, + DestroyForce: { returnType: "nothing", args: [{ name: "whichForce", type: "force" }] }, + ForceAddPlayer: { + returnType: "nothing", + args: [ + { name: "whichForce", type: "force" }, + { name: "whichPlayer", type: "player" } + ] + }, + ForceRemovePlayer: { + returnType: "nothing", + args: [ + { name: "whichForce", type: "force" }, + { name: "whichPlayer", type: "player" } + ] + }, + ForceClear: { returnType: "nothing", args: [{ name: "whichForce", type: "force" }] }, + ForceEnumPlayers: { + returnType: "nothing", + args: [ + { name: "whichForce", type: "force" }, + { name: "filter", type: "boolexpr" } + ] + }, + ForceEnumPlayersCounted: { + returnType: "nothing", + args: [ + { name: "whichForce", type: "force" }, + { name: "filter", type: "boolexpr" }, + { name: "countLimit", type: "integer" } + ] + }, + ForceEnumAllies: { + returnType: "nothing", + args: [ + { name: "whichForce", type: "force" }, + { name: "whichPlayer", type: "player" }, + { name: "filter", type: "boolexpr" } + ] + }, + ForceEnumEnemies: { + returnType: "nothing", + args: [ + { name: "whichForce", type: "force" }, + { name: "whichPlayer", type: "player" }, + { name: "filter", type: "boolexpr" } + ] + }, + ForForce: { + returnType: "nothing", + args: [ + { name: "whichForce", type: "force" }, + { name: "callback", type: "code" } + ] + }, + Rect: { + returnType: "rect", + args: [ + { name: "minx", type: "real" }, + { name: "miny", type: "real" }, + { name: "maxx", type: "real" }, + { name: "maxy", type: "real" } + ] + }, + RectFromLoc: { + returnType: "rect", + args: [ + { name: "min", type: "location" }, + { name: "max", type: "location" } + ] + }, + RemoveRect: { returnType: "nothing", args: [{ name: "whichRect", type: "rect" }] }, + SetRect: { + returnType: "nothing", + args: [ + { name: "whichRect", type: "rect" }, + { name: "minx", type: "real" }, + { name: "miny", type: "real" }, + { name: "maxx", type: "real" }, + { name: "maxy", type: "real" } + ] + }, + SetRectFromLoc: { + returnType: "nothing", + args: [ + { name: "whichRect", type: "rect" }, + { name: "min", type: "location" }, + { name: "max", type: "location" } + ] + }, + MoveRectTo: { + returnType: "nothing", + args: [ + { name: "whichRect", type: "rect" }, + { name: "newCenterX", type: "real" }, + { name: "newCenterY", type: "real" } + ] + }, + MoveRectToLoc: { + returnType: "nothing", + args: [ + { name: "whichRect", type: "rect" }, + { name: "newCenterLoc", type: "location" } + ] + }, + GetRectCenterX: { returnType: "real", args: [{ name: "whichRect", type: "rect" }] }, + GetRectCenterY: { returnType: "real", args: [{ name: "whichRect", type: "rect" }] }, + GetRectMinX: { returnType: "real", args: [{ name: "whichRect", type: "rect" }] }, + GetRectMinY: { returnType: "real", args: [{ name: "whichRect", type: "rect" }] }, + GetRectMaxX: { returnType: "real", args: [{ name: "whichRect", type: "rect" }] }, + GetRectMaxY: { returnType: "real", args: [{ name: "whichRect", type: "rect" }] }, + CreateRegion: { returnType: "region", args: [] }, + RemoveRegion: { returnType: "nothing", args: [{ name: "whichRegion", type: "region" }] }, + RegionAddRect: { + returnType: "nothing", + args: [ + { name: "whichRegion", type: "region" }, + { name: "r", type: "rect" } + ] + }, + RegionClearRect: { + returnType: "nothing", + args: [ + { name: "whichRegion", type: "region" }, + { name: "r", type: "rect" } + ] + }, + RegionAddCell: { + returnType: "nothing", + args: [ + { name: "whichRegion", type: "region" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + RegionAddCellAtLoc: { + returnType: "nothing", + args: [ + { name: "whichRegion", type: "region" }, + { name: "whichLocation", type: "location" } + ] + }, + RegionClearCell: { + returnType: "nothing", + args: [ + { name: "whichRegion", type: "region" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + RegionClearCellAtLoc: { + returnType: "nothing", + args: [ + { name: "whichRegion", type: "region" }, + { name: "whichLocation", type: "location" } + ] + }, + Location: { + returnType: "location", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + RemoveLocation: { returnType: "nothing", args: [{ name: "whichLocation", type: "location" }] }, + MoveLocation: { + returnType: "nothing", + args: [ + { name: "whichLocation", type: "location" }, + { name: "newX", type: "real" }, + { name: "newY", type: "real" } + ] + }, + GetLocationX: { returnType: "real", args: [{ name: "whichLocation", type: "location" }] }, + GetLocationY: { returnType: "real", args: [{ name: "whichLocation", type: "location" }] }, + GetLocationZ: { returnType: "real", args: [{ name: "whichLocation", type: "location" }] }, + IsUnitInRegion: { + returnType: "boolean", + args: [ + { name: "whichRegion", type: "region" }, + { name: "whichUnit", type: "unit" } + ] + }, + IsPointInRegion: { + returnType: "boolean", + args: [ + { name: "whichRegion", type: "region" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + IsLocationInRegion: { + returnType: "boolean", + args: [ + { name: "whichRegion", type: "region" }, + { name: "whichLocation", type: "location" } + ] + }, + GetWorldBounds: { returnType: "rect", args: [] }, + CreateTrigger: { returnType: "trigger", args: [] }, + DestroyTrigger: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + ResetTrigger: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + EnableTrigger: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + DisableTrigger: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + IsTriggerEnabled: { returnType: "boolean", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerWaitOnSleeps: { + returnType: "nothing", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "flag", type: "boolean" } + ] + }, + IsTriggerWaitOnSleeps: { returnType: "boolean", args: [{ name: "whichTrigger", type: "trigger" }] }, + GetFilterUnit: { returnType: "unit", args: [] }, + GetEnumUnit: { returnType: "unit", args: [] }, + GetFilterDestructable: { returnType: "destructable", args: [] }, + GetEnumDestructable: { returnType: "destructable", args: [] }, + GetFilterItem: { returnType: "item", args: [] }, + GetEnumItem: { returnType: "item", args: [] }, + GetFilterPlayer: { returnType: "player", args: [] }, + GetEnumPlayer: { returnType: "player", args: [] }, + GetTriggeringTrigger: { returnType: "trigger", args: [] }, + GetTriggerEventId: { returnType: "eventid", args: [] }, + GetTriggerEvalCount: { returnType: "integer", args: [{ name: "whichTrigger", type: "trigger" }] }, + GetTriggerExecCount: { returnType: "integer", args: [{ name: "whichTrigger", type: "trigger" }] }, + ExecuteFunc: { returnType: "nothing", args: [{ name: "funcName", type: "string" }] }, + And: { + returnType: "boolexpr", + args: [ + { name: "operandA", type: "boolexpr" }, + { name: "operandB", type: "boolexpr" } + ] + }, + Or: { + returnType: "boolexpr", + args: [ + { name: "operandA", type: "boolexpr" }, + { name: "operandB", type: "boolexpr" } + ] + }, + Not: { returnType: "boolexpr", args: [{ name: "operand", type: "boolexpr" }] }, + Condition: { returnType: "conditionfunc", args: [{ name: "func", type: "code" }] }, + DestroyCondition: { returnType: "nothing", args: [{ name: "c", type: "conditionfunc" }] }, + Filter: { returnType: "filterfunc", args: [{ name: "func", type: "code" }] }, + DestroyFilter: { returnType: "nothing", args: [{ name: "f", type: "filterfunc" }] }, + DestroyBoolExpr: { returnType: "nothing", args: [{ name: "e", type: "boolexpr" }] }, + TriggerRegisterVariableEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "varName", type: "string" }, + { name: "opcode", type: "limitop" }, + { name: "limitval", type: "real" } + ] + }, + TriggerRegisterTimerEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "timeout", type: "real" }, + { name: "periodic", type: "boolean" } + ] + }, + TriggerRegisterTimerExpireEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "t", type: "timer" } + ] + }, + TriggerRegisterGameStateEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichState", type: "gamestate" }, + { name: "opcode", type: "limitop" }, + { name: "limitval", type: "real" } + ] + }, + TriggerRegisterDialogEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichDialog", type: "dialog" } + ] + }, + TriggerRegisterDialogButtonEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichButton", type: "button" } + ] + }, + GetEventGameState: { returnType: "gamestate", args: [] }, + TriggerRegisterGameEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichGameEvent", type: "gameevent" } + ] + }, + GetWinningPlayer: { returnType: "player", args: [] }, + TriggerRegisterEnterRegion: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichRegion", type: "region" }, + { name: "filter", type: "boolexpr" } + ] + }, + GetTriggeringRegion: { returnType: "region", args: [] }, + GetEnteringUnit: { returnType: "unit", args: [] }, + TriggerRegisterLeaveRegion: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichRegion", type: "region" }, + { name: "filter", type: "boolexpr" } + ] + }, + GetLeavingUnit: { returnType: "unit", args: [] }, + TriggerRegisterTrackableHitEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "t", type: "trackable" } + ] + }, + TriggerRegisterTrackableTrackEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "t", type: "trackable" } + ] + }, + GetTriggeringTrackable: { returnType: "trackable", args: [] }, + GetClickedButton: { returnType: "button", args: [] }, + GetClickedDialog: { returnType: "dialog", args: [] }, + GetTournamentFinishSoonTimeRemaining: { returnType: "real", args: [] }, + GetTournamentFinishNowRule: { returnType: "integer", args: [] }, + GetTournamentFinishNowPlayer: { returnType: "player", args: [] }, + GetTournamentScore: { returnType: "integer", args: [{ name: "whichPlayer", type: "player" }] }, + GetSaveBasicFilename: { returnType: "string", args: [] }, + TriggerRegisterPlayerEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "whichPlayerEvent", type: "playerevent" } + ] + }, + GetTriggerPlayer: { returnType: "player", args: [] }, + TriggerRegisterPlayerUnitEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "whichPlayerUnitEvent", type: "playerunitevent" }, + { name: "filter", type: "boolexpr" } + ] + }, + GetLevelingUnit: { returnType: "unit", args: [] }, + GetLearningUnit: { returnType: "unit", args: [] }, + GetLearnedSkill: { returnType: "integer", args: [] }, + GetLearnedSkillLevel: { returnType: "integer", args: [] }, + GetRevivableUnit: { returnType: "unit", args: [] }, + GetRevivingUnit: { returnType: "unit", args: [] }, + GetAttacker: { returnType: "unit", args: [] }, + GetRescuer: { returnType: "unit", args: [] }, + GetDyingUnit: { returnType: "unit", args: [] }, + GetKillingUnit: { returnType: "unit", args: [] }, + GetDecayingUnit: { returnType: "unit", args: [] }, + GetConstructingStructure: { returnType: "unit", args: [] }, + GetCancelledStructure: { returnType: "unit", args: [] }, + GetConstructedStructure: { returnType: "unit", args: [] }, + GetResearchingUnit: { returnType: "unit", args: [] }, + GetResearched: { returnType: "integer", args: [] }, + GetTrainedUnitType: { returnType: "integer", args: [] }, + GetTrainedUnit: { returnType: "unit", args: [] }, + GetDetectedUnit: { returnType: "unit", args: [] }, + GetSummoningUnit: { returnType: "unit", args: [] }, + GetSummonedUnit: { returnType: "unit", args: [] }, + GetTransportUnit: { returnType: "unit", args: [] }, + GetLoadedUnit: { returnType: "unit", args: [] }, + GetSellingUnit: { returnType: "unit", args: [] }, + GetSoldUnit: { returnType: "unit", args: [] }, + GetBuyingUnit: { returnType: "unit", args: [] }, + GetSoldItem: { returnType: "item", args: [] }, + GetChangingUnit: { returnType: "unit", args: [] }, + GetChangingUnitPrevOwner: { returnType: "player", args: [] }, + GetManipulatingUnit: { returnType: "unit", args: [] }, + GetManipulatedItem: { returnType: "item", args: [] }, + GetOrderedUnit: { returnType: "unit", args: [] }, + GetIssuedOrderId: { returnType: "integer", args: [] }, + GetOrderPointX: { returnType: "real", args: [] }, + GetOrderPointY: { returnType: "real", args: [] }, + GetOrderPointLoc: { returnType: "location", args: [] }, + GetOrderTarget: { returnType: "widget", args: [] }, + GetOrderTargetDestructable: { returnType: "destructable", args: [] }, + GetOrderTargetItem: { returnType: "item", args: [] }, + GetOrderTargetUnit: { returnType: "unit", args: [] }, + GetSpellAbilityUnit: { returnType: "unit", args: [] }, + GetSpellAbilityId: { returnType: "integer", args: [] }, + GetSpellAbility: { returnType: "ability", args: [] }, + GetSpellTargetLoc: { returnType: "location", args: [] }, + GetSpellTargetX: { returnType: "real", args: [] }, + GetSpellTargetY: { returnType: "real", args: [] }, + GetSpellTargetDestructable: { returnType: "destructable", args: [] }, + GetSpellTargetItem: { returnType: "item", args: [] }, + GetSpellTargetUnit: { returnType: "unit", args: [] }, + TriggerRegisterPlayerAllianceChange: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "whichAlliance", type: "alliancetype" } + ] + }, + TriggerRegisterPlayerStateEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "whichState", type: "playerstate" }, + { name: "opcode", type: "limitop" }, + { name: "limitval", type: "real" } + ] + }, + GetEventPlayerState: { returnType: "playerstate", args: [] }, + TriggerRegisterPlayerChatEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "chatMessageToDetect", type: "string" }, + { name: "exactMatchOnly", type: "boolean" } + ] + }, + GetEventPlayerChatString: { returnType: "string", args: [] }, + GetEventPlayerChatStringMatched: { returnType: "string", args: [] }, + TriggerRegisterDeathEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichWidget", type: "widget" } + ] + }, + GetTriggerUnit: { returnType: "unit", args: [] }, + TriggerRegisterUnitStateEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichUnit", type: "unit" }, + { name: "whichState", type: "unitstate" }, + { name: "opcode", type: "limitop" }, + { name: "limitval", type: "real" } + ] + }, + GetEventUnitState: { returnType: "unitstate", args: [] }, + TriggerRegisterUnitEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichUnit", type: "unit" }, + { name: "whichEvent", type: "unitevent" } + ] + }, + GetEventDamage: { returnType: "real", args: [] }, + GetEventDamageSource: { returnType: "unit", args: [] }, + GetEventDetectingPlayer: { returnType: "player", args: [] }, + TriggerRegisterFilterUnitEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichUnit", type: "unit" }, + { name: "whichEvent", type: "unitevent" }, + { name: "filter", type: "boolexpr" } + ] + }, + GetEventTargetUnit: { returnType: "unit", args: [] }, + TriggerRegisterUnitInRange: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichUnit", type: "unit" }, + { name: "range", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + TriggerAddCondition: { + returnType: "triggercondition", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "condition", type: "boolexpr" } + ] + }, + TriggerRemoveCondition: { + returnType: "nothing", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichCondition", type: "triggercondition" } + ] + }, + TriggerClearConditions: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerAddAction: { + returnType: "triggeraction", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "actionFunc", type: "code" } + ] + }, + TriggerRemoveAction: { + returnType: "nothing", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichAction", type: "triggeraction" } + ] + }, + TriggerClearActions: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerSleepAction: { returnType: "nothing", args: [{ name: "timeout", type: "real" }] }, + TriggerWaitForSound: { + returnType: "nothing", + args: [ + { name: "whichSound", type: "sound" }, + { name: "offset", type: "real" } + ] + }, + TriggerEvaluate: { returnType: "boolean", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerExecute: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerExecuteWait: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerSyncStart: { returnType: "nothing", args: [] }, + TriggerSyncReady: { returnType: "nothing", args: [] }, + GetWidgetLife: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetLife: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "newLife", type: "real" } + ] + }, + GetWidgetX: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + GetWidgetY: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + GetTriggerWidget: { returnType: "widget", args: [] }, + CreateDestructable: { + returnType: "destructable", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" } + ] + }, + CreateDestructableZ: { + returnType: "destructable", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" } + ] + }, + CreateDeadDestructable: { + returnType: "destructable", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" } + ] + }, + CreateDeadDestructableZ: { + returnType: "destructable", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" } + ] + }, + RemoveDestructable: { returnType: "nothing", args: [{ name: "d", type: "destructable" }] }, + KillDestructable: { returnType: "nothing", args: [{ name: "d", type: "destructable" }] }, + SetDestructableInvulnerable: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "flag", type: "boolean" } + ] + }, + IsDestructableInvulnerable: { returnType: "boolean", args: [{ name: "d", type: "destructable" }] }, + EnumDestructablesInRect: { + returnType: "nothing", + args: [ + { name: "r", type: "rect" }, + { name: "filter", type: "boolexpr" }, + { name: "actionFunc", type: "code" } + ] + }, + GetDestructableTypeId: { returnType: "integer", args: [{ name: "d", type: "destructable" }] }, + GetDestructableX: { returnType: "real", args: [{ name: "d", type: "destructable" }] }, + GetDestructableY: { returnType: "real", args: [{ name: "d", type: "destructable" }] }, + SetDestructableLife: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "life", type: "real" } + ] + }, + GetDestructableLife: { returnType: "real", args: [{ name: "d", type: "destructable" }] }, + SetDestructableMaxLife: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "max", type: "real" } + ] + }, + GetDestructableMaxLife: { returnType: "real", args: [{ name: "d", type: "destructable" }] }, + DestructableRestoreLife: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "life", type: "real" }, + { name: "birth", type: "boolean" } + ] + }, + QueueDestructableAnimation: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "whichAnimation", type: "string" } + ] + }, + SetDestructableAnimation: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "whichAnimation", type: "string" } + ] + }, + SetDestructableAnimationSpeed: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "speedFactor", type: "real" } + ] + }, + ShowDestructable: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "flag", type: "boolean" } + ] + }, + GetDestructableOccluderHeight: { returnType: "real", args: [{ name: "d", type: "destructable" }] }, + SetDestructableOccluderHeight: { + returnType: "nothing", + args: [ + { name: "d", type: "destructable" }, + { name: "height", type: "real" } + ] + }, + GetDestructableName: { returnType: "string", args: [{ name: "d", type: "destructable" }] }, + GetTriggerDestructable: { returnType: "destructable", args: [] }, + CreateItem: { + returnType: "item", + args: [ + { name: "itemid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + RemoveItem: { returnType: "nothing", args: [{ name: "whichItem", type: "item" }] }, + GetItemPlayer: { returnType: "player", args: [{ name: "whichItem", type: "item" }] }, + GetItemTypeId: { returnType: "integer", args: [{ name: "i", type: "item" }] }, + GetItemX: { returnType: "real", args: [{ name: "i", type: "item" }] }, + GetItemY: { returnType: "real", args: [{ name: "i", type: "item" }] }, + SetItemPosition: { + returnType: "nothing", + args: [ + { name: "i", type: "item" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetItemDropOnDeath: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "flag", type: "boolean" } + ] + }, + SetItemDroppable: { + returnType: "nothing", + args: [ + { name: "i", type: "item" }, + { name: "flag", type: "boolean" } + ] + }, + SetItemPawnable: { + returnType: "nothing", + args: [ + { name: "i", type: "item" }, + { name: "flag", type: "boolean" } + ] + }, + SetItemPlayer: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichPlayer", type: "player" }, + { name: "changeColor", type: "boolean" } + ] + }, + SetItemInvulnerable: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "flag", type: "boolean" } + ] + }, + IsItemInvulnerable: { returnType: "boolean", args: [{ name: "whichItem", type: "item" }] }, + SetItemVisible: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "show", type: "boolean" } + ] + }, + IsItemVisible: { returnType: "boolean", args: [{ name: "whichItem", type: "item" }] }, + IsItemOwned: { returnType: "boolean", args: [{ name: "whichItem", type: "item" }] }, + IsItemPowerup: { returnType: "boolean", args: [{ name: "whichItem", type: "item" }] }, + IsItemSellable: { returnType: "boolean", args: [{ name: "whichItem", type: "item" }] }, + IsItemPawnable: { returnType: "boolean", args: [{ name: "whichItem", type: "item" }] }, + IsItemIdPowerup: { returnType: "boolean", args: [{ name: "itemId", type: "integer" }] }, + IsItemIdSellable: { returnType: "boolean", args: [{ name: "itemId", type: "integer" }] }, + IsItemIdPawnable: { returnType: "boolean", args: [{ name: "itemId", type: "integer" }] }, + EnumItemsInRect: { + returnType: "nothing", + args: [ + { name: "r", type: "rect" }, + { name: "filter", type: "boolexpr" }, + { name: "actionFunc", type: "code" } + ] + }, + GetItemLevel: { returnType: "integer", args: [{ name: "whichItem", type: "item" }] }, + GetItemType: { returnType: "itemtype", args: [{ name: "whichItem", type: "item" }] }, + SetItemDropID: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "unitId", type: "integer" } + ] + }, + GetItemName: { returnType: "string", args: [{ name: "whichItem", type: "item" }] }, + GetItemCharges: { returnType: "integer", args: [{ name: "whichItem", type: "item" }] }, + SetItemCharges: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "charges", type: "integer" } + ] + }, + GetItemUserData: { returnType: "integer", args: [{ name: "whichItem", type: "item" }] }, + SetItemUserData: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "data", type: "integer" } + ] + }, + CreateUnit: { + returnType: "unit", + args: [ + { name: "id", type: "player" }, + { name: "unitid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" } + ] + }, + CreateUnitByName: { + returnType: "unit", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "unitname", type: "string" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" } + ] + }, + CreateUnitAtLoc: { + returnType: "unit", + args: [ + { name: "id", type: "player" }, + { name: "unitid", type: "integer" }, + { name: "whichLocation", type: "location" }, + { name: "face", type: "real" } + ] + }, + CreateUnitAtLocByName: { + returnType: "unit", + args: [ + { name: "id", type: "player" }, + { name: "unitname", type: "string" }, + { name: "whichLocation", type: "location" }, + { name: "face", type: "real" } + ] + }, + CreateCorpse: { + returnType: "unit", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "unitid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" } + ] + }, + KillUnit: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + RemoveUnit: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + ShowUnit: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "show", type: "boolean" } + ] + }, + SetUnitState: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichUnitState", type: "unitstate" }, + { name: "newVal", type: "real" } + ] + }, + SetUnitX: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newX", type: "real" } + ] + }, + SetUnitY: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newY", type: "real" } + ] + }, + SetUnitPosition: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newX", type: "real" }, + { name: "newY", type: "real" } + ] + }, + SetUnitPositionLoc: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichLocation", type: "location" } + ] + }, + SetUnitFacing: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "facingAngle", type: "real" } + ] + }, + SetUnitFacingTimed: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "facingAngle", type: "real" }, + { name: "duration", type: "real" } + ] + }, + SetUnitMoveSpeed: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newSpeed", type: "real" } + ] + }, + SetUnitFlyHeight: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newHeight", type: "real" }, + { name: "rate", type: "real" } + ] + }, + SetUnitTurnSpeed: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newTurnSpeed", type: "real" } + ] + }, + SetUnitPropWindow: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newPropWindowAngle", type: "real" } + ] + }, + SetUnitAcquireRange: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newAcquireRange", type: "real" } + ] + }, + SetUnitCreepGuard: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "creepGuard", type: "boolean" } + ] + }, + GetUnitAcquireRange: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitTurnSpeed: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitPropWindow: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitFlyHeight: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitDefaultAcquireRange: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitDefaultTurnSpeed: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitDefaultPropWindow: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitDefaultFlyHeight: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitOwner: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" }, + { name: "changeColor", type: "boolean" } + ] + }, + SetUnitColor: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichColor", type: "playercolor" } + ] + }, + SetUnitScale: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "scaleX", type: "real" }, + { name: "scaleY", type: "real" }, + { name: "scaleZ", type: "real" } + ] + }, + SetUnitTimeScale: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "timeScale", type: "real" } + ] + }, + SetUnitBlendTime: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "blendTime", type: "real" } + ] + }, + SetUnitVertexColor: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + QueueUnitAnimation: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichAnimation", type: "string" } + ] + }, + SetUnitAnimation: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichAnimation", type: "string" } + ] + }, + SetUnitAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichAnimation", type: "integer" } + ] + }, + SetUnitAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichAnimation", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + AddUnitAnimationProperties: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "animProperties", type: "string" }, + { name: "add", type: "boolean" } + ] + }, + SetUnitLookAt: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichBone", type: "string" }, + { name: "lookAtTarget", type: "unit" }, + { name: "offsetX", type: "real" }, + { name: "offsetY", type: "real" }, + { name: "offsetZ", type: "real" } + ] + }, + ResetUnitLookAt: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitRescuable: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "byWhichPlayer", type: "player" }, + { name: "flag", type: "boolean" } + ] + }, + SetUnitRescueRange: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "range", type: "real" } + ] + }, + SetHeroStr: { + returnType: "nothing", + args: [ + { name: "whichHero", type: "unit" }, + { name: "newStr", type: "integer" }, + { name: "permanent", type: "boolean" } + ] + }, + SetHeroAgi: { + returnType: "nothing", + args: [ + { name: "whichHero", type: "unit" }, + { name: "newAgi", type: "integer" }, + { name: "permanent", type: "boolean" } + ] + }, + SetHeroInt: { + returnType: "nothing", + args: [ + { name: "whichHero", type: "unit" }, + { name: "newInt", type: "integer" }, + { name: "permanent", type: "boolean" } + ] + }, + GetHeroStr: { + returnType: "integer", + args: [ + { name: "whichHero", type: "unit" }, + { name: "includeBonuses", type: "boolean" } + ] + }, + GetHeroAgi: { + returnType: "integer", + args: [ + { name: "whichHero", type: "unit" }, + { name: "includeBonuses", type: "boolean" } + ] + }, + GetHeroInt: { + returnType: "integer", + args: [ + { name: "whichHero", type: "unit" }, + { name: "includeBonuses", type: "boolean" } + ] + }, + UnitStripHeroLevel: { + returnType: "boolean", + args: [ + { name: "whichHero", type: "unit" }, + { name: "howManyLevels", type: "integer" } + ] + }, + GetHeroXP: { returnType: "integer", args: [{ name: "whichHero", type: "unit" }] }, + SetHeroXP: { + returnType: "nothing", + args: [ + { name: "whichHero", type: "unit" }, + { name: "newXpVal", type: "integer" }, + { name: "showEyeCandy", type: "boolean" } + ] + }, + GetHeroSkillPoints: { returnType: "integer", args: [{ name: "whichHero", type: "unit" }] }, + UnitModifySkillPoints: { + returnType: "boolean", + args: [ + { name: "whichHero", type: "unit" }, + { name: "skillPointDelta", type: "integer" } + ] + }, + AddHeroXP: { + returnType: "nothing", + args: [ + { name: "whichHero", type: "unit" }, + { name: "xpToAdd", type: "integer" }, + { name: "showEyeCandy", type: "boolean" } + ] + }, + SetHeroLevel: { + returnType: "nothing", + args: [ + { name: "whichHero", type: "unit" }, + { name: "level", type: "integer" }, + { name: "showEyeCandy", type: "boolean" } + ] + }, + GetHeroLevel: { returnType: "integer", args: [{ name: "whichHero", type: "unit" }] }, + GetUnitLevel: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetHeroProperName: { returnType: "string", args: [{ name: "whichHero", type: "unit" }] }, + SuspendHeroXP: { + returnType: "nothing", + args: [ + { name: "whichHero", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + IsSuspendedXP: { returnType: "boolean", args: [{ name: "whichHero", type: "unit" }] }, + SelectHeroSkill: { + returnType: "nothing", + args: [ + { name: "whichHero", type: "unit" }, + { name: "abilcode", type: "integer" } + ] + }, + GetUnitAbilityLevel: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilcode", type: "integer" } + ] + }, + DecUnitAbilityLevel: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilcode", type: "integer" } + ] + }, + IncUnitAbilityLevel: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilcode", type: "integer" } + ] + }, + SetUnitAbilityLevel: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilcode", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + ReviveHero: { + returnType: "boolean", + args: [ + { name: "whichHero", type: "unit" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "doEyecandy", type: "boolean" } + ] + }, + ReviveHeroLoc: { + returnType: "boolean", + args: [ + { name: "whichHero", type: "unit" }, + { name: "loc", type: "location" }, + { name: "doEyecandy", type: "boolean" } + ] + }, + SetUnitExploded: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "exploded", type: "boolean" } + ] + }, + SetUnitInvulnerable: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + PauseUnit: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + IsUnitPaused: { returnType: "boolean", args: [{ name: "whichHero", type: "unit" }] }, + SetUnitPathing: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + ClearSelection: { returnType: "nothing", args: [] }, + SelectUnit: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + GetUnitPointValue: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitPointValueByType: { returnType: "integer", args: [{ name: "unitType", type: "integer" }] }, + SetUnitPointValueByType: { + returnType: "nothing", + args: [ + { name: "unitType", type: "integer" }, + { name: "newPointValue", type: "integer" } + ] + }, + UnitAddItem: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" } + ] + }, + UnitAddItemById: { + returnType: "item", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "itemId", type: "integer" } + ] + }, + UnitAddItemToSlotById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "itemId", type: "integer" }, + { name: "itemSlot", type: "integer" } + ] + }, + UnitRemoveItem: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" } + ] + }, + UnitRemoveItemFromSlot: { + returnType: "item", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "itemSlot", type: "integer" } + ] + }, + UnitHasItem: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" } + ] + }, + UnitItemInSlot: { + returnType: "item", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "itemSlot", type: "integer" } + ] + }, + UnitInventorySize: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + UnitDropItemPoint: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + UnitDropItemSlot: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" }, + { name: "slot", type: "integer" } + ] + }, + UnitDropItemTarget: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" }, + { name: "target", type: "widget" } + ] + }, + UnitUseItem: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" } + ] + }, + UnitUseItemPoint: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + UnitUseItemTarget: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" }, + { name: "target", type: "widget" } + ] + }, + GetUnitX: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitY: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitLoc: { returnType: "location", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitFacing: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitMoveSpeed: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitDefaultMoveSpeed: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitState: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichUnitState", type: "unitstate" } + ] + }, + GetOwningPlayer: { returnType: "player", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitTypeId: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitRace: { returnType: "race", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitName: { returnType: "string", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitFoodUsed: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitFoodMade: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetFoodMade: { returnType: "integer", args: [{ name: "unitId", type: "integer" }] }, + GetFoodUsed: { returnType: "integer", args: [{ name: "unitId", type: "integer" }] }, + SetUnitUseFood: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "useFood", type: "boolean" } + ] + }, + GetUnitRallyPoint: { returnType: "location", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitRallyUnit: { returnType: "unit", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitRallyDestructable: { returnType: "destructable", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitInGroup: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichGroup", type: "group" } + ] + }, + IsUnitInForce: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichForce", type: "force" } + ] + }, + IsUnitOwnedByPlayer: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitAlly: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitEnemy: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitVisible: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitDetected: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitInvisible: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitFogged: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitMasked: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitSelected: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsUnitRace: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichRace", type: "race" } + ] + }, + IsUnitType: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichUnitType", type: "unittype" } + ] + }, + IsUnit: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichSpecifiedUnit", type: "unit" } + ] + }, + IsUnitInRange: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "otherUnit", type: "unit" }, + { name: "distance", type: "real" } + ] + }, + IsUnitInRangeXY: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "distance", type: "real" } + ] + }, + IsUnitInRangeLoc: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichLocation", type: "location" }, + { name: "distance", type: "real" } + ] + }, + IsUnitHidden: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitIllusion: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitInTransport: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichTransport", type: "unit" } + ] + }, + IsUnitLoaded: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsHeroUnitId: { returnType: "boolean", args: [{ name: "unitId", type: "integer" }] }, + IsUnitIdType: { + returnType: "boolean", + args: [ + { name: "unitId", type: "integer" }, + { name: "whichUnitType", type: "unittype" } + ] + }, + UnitShareVision: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" }, + { name: "share", type: "boolean" } + ] + }, + UnitSuspendDecay: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "suspend", type: "boolean" } + ] + }, + UnitAddType: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichUnitType", type: "unittype" } + ] + }, + UnitRemoveType: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichUnitType", type: "unittype" } + ] + }, + UnitAddAbility: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" } + ] + }, + UnitRemoveAbility: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" } + ] + }, + UnitMakeAbilityPermanent: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "permanent", type: "boolean" }, + { name: "abilityId", type: "integer" } + ] + }, + UnitRemoveBuffs: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "removePositive", type: "boolean" }, + { name: "removeNegative", type: "boolean" } + ] + }, + UnitRemoveBuffsEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "removePositive", type: "boolean" }, + { name: "removeNegative", type: "boolean" }, + { name: "magic", type: "boolean" }, + { name: "physical", type: "boolean" }, + { name: "timedLife", type: "boolean" }, + { name: "aura", type: "boolean" }, + { name: "autoDispel", type: "boolean" } + ] + }, + UnitHasBuffsEx: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "removePositive", type: "boolean" }, + { name: "removeNegative", type: "boolean" }, + { name: "magic", type: "boolean" }, + { name: "physical", type: "boolean" }, + { name: "timedLife", type: "boolean" }, + { name: "aura", type: "boolean" }, + { name: "autoDispel", type: "boolean" } + ] + }, + UnitCountBuffsEx: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "removePositive", type: "boolean" }, + { name: "removeNegative", type: "boolean" }, + { name: "magic", type: "boolean" }, + { name: "physical", type: "boolean" }, + { name: "timedLife", type: "boolean" }, + { name: "aura", type: "boolean" }, + { name: "autoDispel", type: "boolean" } + ] + }, + UnitAddSleep: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "add", type: "boolean" } + ] + }, + UnitCanSleep: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitAddSleepPerm: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "add", type: "boolean" } + ] + }, + UnitCanSleepPerm: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitIsSleeping: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitWakeUp: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + UnitApplyTimedLife: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "buffId", type: "integer" }, + { name: "duration", type: "real" } + ] + }, + UnitIgnoreAlarm: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + UnitIgnoreAlarmToggled: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitResetCooldown: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + UnitSetConstructionProgress: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "constructionPercentage", type: "integer" } + ] + }, + UnitSetUpgradeProgress: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "upgradePercentage", type: "integer" } + ] + }, + UnitPauseTimedLife: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + UnitSetUsesAltIcon: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + UnitDamagePoint: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "delay", type: "real" }, + { name: "radius", type: "real" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "amount", type: "real" }, + { name: "attack", type: "boolean" }, + { name: "ranged", type: "boolean" }, + { name: "attackType", type: "attacktype" }, + { name: "damageType", type: "damagetype" }, + { name: "weaponType", type: "weapontype" } + ] + }, + UnitDamageTarget: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "target", type: "widget" }, + { name: "amount", type: "real" }, + { name: "attack", type: "boolean" }, + { name: "ranged", type: "boolean" }, + { name: "attackType", type: "attacktype" }, + { name: "damageType", type: "damagetype" }, + { name: "weaponType", type: "weapontype" } + ] + }, + IssueImmediateOrder: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "string" } + ] + }, + IssueImmediateOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" } + ] + }, + IssuePointOrder: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "string" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + IssuePointOrderLoc: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "string" }, + { name: "whichLocation", type: "location" } + ] + }, + IssuePointOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + IssuePointOrderByIdLoc: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "whichLocation", type: "location" } + ] + }, + IssueTargetOrder: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "string" }, + { name: "targetWidget", type: "widget" } + ] + }, + IssueTargetOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "targetWidget", type: "widget" } + ] + }, + IssueInstantPointOrder: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "string" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "instantTargetWidget", type: "widget" } + ] + }, + IssueInstantPointOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "instantTargetWidget", type: "widget" } + ] + }, + IssueInstantTargetOrder: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "string" }, + { name: "targetWidget", type: "widget" }, + { name: "instantTargetWidget", type: "widget" } + ] + }, + IssueInstantTargetOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "targetWidget", type: "widget" }, + { name: "instantTargetWidget", type: "widget" } + ] + }, + IssueBuildOrder: { + returnType: "boolean", + args: [ + { name: "whichPeon", type: "unit" }, + { name: "unitToBuild", type: "string" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + IssueBuildOrderById: { + returnType: "boolean", + args: [ + { name: "whichPeon", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + IssueNeutralImmediateOrder: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitToBuild", type: "string" } + ] + }, + IssueNeutralImmediateOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" } + ] + }, + IssueNeutralPointOrder: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitToBuild", type: "string" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + IssueNeutralPointOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + IssueNeutralTargetOrder: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitToBuild", type: "string" }, + { name: "target", type: "widget" } + ] + }, + IssueNeutralTargetOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "target", type: "widget" } + ] + }, + GetUnitCurrentOrder: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + SetResourceAmount: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "amount", type: "integer" } + ] + }, + AddResourceAmount: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "amount", type: "integer" } + ] + }, + GetResourceAmount: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + WaygateGetDestinationX: { returnType: "real", args: [{ name: "waygate", type: "unit" }] }, + WaygateGetDestinationY: { returnType: "real", args: [{ name: "waygate", type: "unit" }] }, + WaygateSetDestination: { + returnType: "nothing", + args: [ + { name: "waygate", type: "unit" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + WaygateActivate: { + returnType: "nothing", + args: [ + { name: "waygate", type: "unit" }, + { name: "activate", type: "boolean" } + ] + }, + WaygateIsActive: { returnType: "boolean", args: [{ name: "waygate", type: "unit" }] }, + AddItemToAllStock: { + returnType: "nothing", + args: [ + { name: "itemId", type: "integer" }, + { name: "currentStock", type: "integer" }, + { name: "stockMax", type: "integer" } + ] + }, + AddItemToStock: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "itemId", type: "integer" }, + { name: "currentStock", type: "integer" }, + { name: "stockMax", type: "integer" } + ] + }, + AddUnitToAllStock: { + returnType: "nothing", + args: [ + { name: "unitId", type: "integer" }, + { name: "currentStock", type: "integer" }, + { name: "stockMax", type: "integer" } + ] + }, + AddUnitToStock: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "currentStock", type: "integer" }, + { name: "stockMax", type: "integer" } + ] + }, + RemoveItemFromAllStock: { returnType: "nothing", args: [{ name: "itemId", type: "integer" }] }, + RemoveItemFromStock: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "itemId", type: "integer" } + ] + }, + RemoveUnitFromAllStock: { returnType: "nothing", args: [{ name: "unitId", type: "integer" }] }, + RemoveUnitFromStock: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "unitId", type: "integer" } + ] + }, + SetAllItemTypeSlots: { returnType: "nothing", args: [{ name: "slots", type: "integer" }] }, + SetAllUnitTypeSlots: { returnType: "nothing", args: [{ name: "slots", type: "integer" }] }, + SetItemTypeSlots: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "slots", type: "integer" } + ] + }, + SetUnitTypeSlots: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "slots", type: "integer" } + ] + }, + GetUnitUserData: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitUserData: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "data", type: "integer" } + ] + }, + Player: { returnType: "player", args: [{ name: "number", type: "integer" }] }, + GetLocalPlayer: { returnType: "player", args: [] }, + IsPlayerAlly: { + returnType: "boolean", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "otherPlayer", type: "player" } + ] + }, + IsPlayerEnemy: { + returnType: "boolean", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "otherPlayer", type: "player" } + ] + }, + IsPlayerInForce: { + returnType: "boolean", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "whichForce", type: "force" } + ] + }, + IsPlayerObserver: { returnType: "boolean", args: [{ name: "whichPlayer", type: "player" }] }, + IsVisibleToPlayer: { + returnType: "boolean", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsLocationVisibleToPlayer: { + returnType: "boolean", + args: [ + { name: "whichLocation", type: "location" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsFoggedToPlayer: { + returnType: "boolean", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsLocationFoggedToPlayer: { + returnType: "boolean", + args: [ + { name: "whichLocation", type: "location" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsMaskedToPlayer: { + returnType: "boolean", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "whichPlayer", type: "player" } + ] + }, + IsLocationMaskedToPlayer: { + returnType: "boolean", + args: [ + { name: "whichLocation", type: "location" }, + { name: "whichPlayer", type: "player" } + ] + }, + GetPlayerRace: { returnType: "race", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerId: { returnType: "integer", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerUnitCount: { + returnType: "integer", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "includeIncomplete", type: "boolean" } + ] + }, + GetPlayerTypedUnitCount: { + returnType: "integer", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "unitName", type: "string" }, + { name: "includeIncomplete", type: "boolean" }, + { name: "includeUpgrades", type: "boolean" } + ] + }, + GetPlayerStructureCount: { + returnType: "integer", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "includeIncomplete", type: "boolean" } + ] + }, + GetPlayerState: { + returnType: "integer", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "whichPlayerState", type: "playerstate" } + ] + }, + GetPlayerScore: { + returnType: "integer", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "whichPlayerScore", type: "playerscore" } + ] + }, + GetPlayerAlliance: { + returnType: "boolean", + args: [ + { name: "sourcePlayer", type: "player" }, + { name: "otherPlayer", type: "player" }, + { name: "whichAllianceSetting", type: "alliancetype" } + ] + }, + GetPlayerHandicap: { returnType: "real", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerHandicapXP: { returnType: "real", args: [{ name: "whichPlayer", type: "player" }] }, + SetPlayerHandicap: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "handicap", type: "real" } + ] + }, + SetPlayerHandicapXP: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "handicap", type: "real" } + ] + }, + SetPlayerTechMaxAllowed: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "techid", type: "integer" }, + { name: "maximum", type: "integer" } + ] + }, + GetPlayerTechMaxAllowed: { + returnType: "integer", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "techid", type: "integer" } + ] + }, + AddPlayerTechResearched: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "techid", type: "integer" }, + { name: "levels", type: "integer" } + ] + }, + SetPlayerTechResearched: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "techid", type: "integer" }, + { name: "setToLevel", type: "integer" } + ] + }, + GetPlayerTechResearched: { + returnType: "boolean", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "techid", type: "integer" }, + { name: "specificonly", type: "boolean" } + ] + }, + GetPlayerTechCount: { + returnType: "integer", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "techid", type: "integer" }, + { name: "specificonly", type: "boolean" } + ] + }, + SetPlayerUnitsOwner: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "newOwner", type: "integer" } + ] + }, + CripplePlayer: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "toWhichPlayers", type: "force" }, + { name: "flag", type: "boolean" } + ] + }, + SetPlayerAbilityAvailable: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "abilid", type: "integer" }, + { name: "avail", type: "boolean" } + ] + }, + SetPlayerState: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "whichPlayerState", type: "playerstate" }, + { name: "value", type: "integer" } + ] + }, + RemovePlayer: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "gameResult", type: "playergameresult" } + ] + }, + CachePlayerHeroData: { returnType: "nothing", args: [{ name: "whichPlayer", type: "player" }] }, + SetFogStateRect: { + returnType: "nothing", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "whichState", type: "fogstate" }, + { name: "where", type: "rect" }, + { name: "useSharedVision", type: "boolean" } + ] + }, + SetFogStateRadius: { + returnType: "nothing", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "whichState", type: "fogstate" }, + { name: "centerx", type: "real" }, + { name: "centerY", type: "real" }, + { name: "radius", type: "real" }, + { name: "useSharedVision", type: "boolean" } + ] + }, + SetFogStateRadiusLoc: { + returnType: "nothing", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "whichState", type: "fogstate" }, + { name: "center", type: "location" }, + { name: "radius", type: "real" }, + { name: "useSharedVision", type: "boolean" } + ] + }, + FogMaskEnable: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + IsFogMaskEnabled: { returnType: "boolean", args: [] }, + FogEnable: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + IsFogEnabled: { returnType: "boolean", args: [] }, + CreateFogModifierRect: { + returnType: "fogmodifier", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "whichState", type: "fogstate" }, + { name: "where", type: "rect" }, + { name: "useSharedVision", type: "boolean" }, + { name: "afterUnits", type: "boolean" } + ] + }, + CreateFogModifierRadius: { + returnType: "fogmodifier", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "whichState", type: "fogstate" }, + { name: "centerx", type: "real" }, + { name: "centerY", type: "real" }, + { name: "radius", type: "real" }, + { name: "useSharedVision", type: "boolean" }, + { name: "afterUnits", type: "boolean" } + ] + }, + CreateFogModifierRadiusLoc: { + returnType: "fogmodifier", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "whichState", type: "fogstate" }, + { name: "center", type: "location" }, + { name: "radius", type: "real" }, + { name: "useSharedVision", type: "boolean" }, + { name: "afterUnits", type: "boolean" } + ] + }, + DestroyFogModifier: { returnType: "nothing", args: [{ name: "whichFogModifier", type: "fogmodifier" }] }, + FogModifierStart: { returnType: "nothing", args: [{ name: "whichFogModifier", type: "fogmodifier" }] }, + FogModifierStop: { returnType: "nothing", args: [{ name: "whichFogModifier", type: "fogmodifier" }] }, + VersionGet: { returnType: "version", args: [] }, + VersionCompatible: { returnType: "boolean", args: [{ name: "whichVersion", type: "version" }] }, + VersionSupported: { returnType: "boolean", args: [{ name: "whichVersion", type: "version" }] }, + EndGame: { returnType: "nothing", args: [{ name: "doScoreScreen", type: "boolean" }] }, + ChangeLevel: { + returnType: "nothing", + args: [ + { name: "newLevel", type: "string" }, + { name: "doScoreScreen", type: "boolean" } + ] + }, + RestartGame: { returnType: "nothing", args: [{ name: "doScoreScreen", type: "boolean" }] }, + ReloadGame: { returnType: "nothing", args: [] }, + SetCampaignMenuRace: { returnType: "nothing", args: [{ name: "r", type: "race" }] }, + SetCampaignMenuRaceEx: { returnType: "nothing", args: [{ name: "campaignIndex", type: "integer" }] }, + ForceCampaignSelectScreen: { returnType: "nothing", args: [] }, + LoadGame: { + returnType: "nothing", + args: [ + { name: "saveFileName", type: "string" }, + { name: "doScoreScreen", type: "boolean" } + ] + }, + SaveGame: { returnType: "nothing", args: [{ name: "saveFileName", type: "string" }] }, + RenameSaveDirectory: { + returnType: "boolean", + args: [ + { name: "sourceDirName", type: "string" }, + { name: "destDirName", type: "string" } + ] + }, + RemoveSaveDirectory: { returnType: "boolean", args: [{ name: "sourceDirName", type: "string" }] }, + CopySaveGame: { + returnType: "boolean", + args: [ + { name: "sourceSaveName", type: "string" }, + { name: "destSaveName", type: "string" } + ] + }, + SaveGameExists: { returnType: "boolean", args: [{ name: "saveName", type: "string" }] }, + SyncSelections: { returnType: "nothing", args: [] }, + SetFloatGameState: { + returnType: "nothing", + args: [ + { name: "whichFloatGameState", type: "fgamestate" }, + { name: "value", type: "real" } + ] + }, + GetFloatGameState: { returnType: "real", args: [{ name: "whichFloatGameState", type: "fgamestate" }] }, + SetIntegerGameState: { + returnType: "nothing", + args: [ + { name: "whichIntegerGameState", type: "igamestate" }, + { name: "value", type: "integer" } + ] + }, + GetIntegerGameState: { returnType: "integer", args: [{ name: "whichIntegerGameState", type: "igamestate" }] }, + SetTutorialCleared: { returnType: "nothing", args: [{ name: "cleared", type: "boolean" }] }, + SetMissionAvailable: { + returnType: "nothing", + args: [ + { name: "campaignNumber", type: "integer" }, + { name: "missionNumber", type: "integer" }, + { name: "available", type: "boolean" } + ] + }, + SetCampaignAvailable: { + returnType: "nothing", + args: [ + { name: "campaignNumber", type: "integer" }, + { name: "available", type: "boolean" } + ] + }, + SetOpCinematicAvailable: { + returnType: "nothing", + args: [ + { name: "campaignNumber", type: "integer" }, + { name: "available", type: "boolean" } + ] + }, + SetEdCinematicAvailable: { + returnType: "nothing", + args: [ + { name: "campaignNumber", type: "integer" }, + { name: "available", type: "boolean" } + ] + }, + GetDefaultDifficulty: { returnType: "gamedifficulty", args: [] }, + SetDefaultDifficulty: { returnType: "nothing", args: [{ name: "g", type: "gamedifficulty" }] }, + SetCustomCampaignButtonVisible: { + returnType: "nothing", + args: [ + { name: "whichButton", type: "integer" }, + { name: "visible", type: "boolean" } + ] + }, + GetCustomCampaignButtonVisible: { returnType: "boolean", args: [{ name: "whichButton", type: "integer" }] }, + DoNotSaveReplay: { returnType: "nothing", args: [] }, + DialogCreate: { returnType: "dialog", args: [] }, + DialogDestroy: { returnType: "nothing", args: [{ name: "whichDialog", type: "dialog" }] }, + DialogClear: { returnType: "nothing", args: [{ name: "whichDialog", type: "dialog" }] }, + DialogSetMessage: { + returnType: "nothing", + args: [ + { name: "whichDialog", type: "dialog" }, + { name: "messageText", type: "string" } + ] + }, + DialogAddButton: { + returnType: "button", + args: [ + { name: "whichDialog", type: "dialog" }, + { name: "buttonText", type: "string" }, + { name: "hotkey", type: "integer" } + ] + }, + DialogAddQuitButton: { + returnType: "button", + args: [ + { name: "whichDialog", type: "dialog" }, + { name: "doScoreScreen", type: "boolean" }, + { name: "buttonText", type: "string" }, + { name: "hotkey", type: "integer" } + ] + }, + DialogDisplay: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "whichDialog", type: "dialog" }, + { name: "flag", type: "boolean" } + ] + }, + ReloadGameCachesFromDisk: { returnType: "boolean", args: [] }, + InitGameCache: { returnType: "gamecache", args: [{ name: "campaignFile", type: "string" }] }, + SaveGameCache: { returnType: "boolean", args: [{ name: "whichCache", type: "gamecache" }] }, + StoreInteger: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" }, + { name: "value", type: "integer" } + ] + }, + StoreReal: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" }, + { name: "value", type: "real" } + ] + }, + StoreBoolean: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" }, + { name: "value", type: "boolean" } + ] + }, + StoreUnit: { + returnType: "boolean", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" }, + { name: "whichUnit", type: "unit" } + ] + }, + StoreString: { + returnType: "boolean", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" }, + { name: "value", type: "string" } + ] + }, + SyncStoredInteger: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + SyncStoredReal: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + SyncStoredBoolean: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + SyncStoredUnit: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + SyncStoredString: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + HaveStoredInteger: { + returnType: "boolean", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + HaveStoredReal: { + returnType: "boolean", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + HaveStoredBoolean: { + returnType: "boolean", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + HaveStoredUnit: { + returnType: "boolean", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + HaveStoredString: { + returnType: "boolean", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + FlushGameCache: { returnType: "nothing", args: [{ name: "cache", type: "gamecache" }] }, + FlushStoredMission: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" } + ] + }, + FlushStoredInteger: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + FlushStoredReal: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + FlushStoredBoolean: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + FlushStoredUnit: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + FlushStoredString: { + returnType: "nothing", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + GetStoredInteger: { + returnType: "integer", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + GetStoredReal: { + returnType: "real", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + GetStoredBoolean: { + returnType: "boolean", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + GetStoredString: { + returnType: "string", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" } + ] + }, + RestoreUnit: { + returnType: "unit", + args: [ + { name: "cache", type: "gamecache" }, + { name: "missionKey", type: "string" }, + { name: "key", type: "string" }, + { name: "forWhichPlayer", type: "player" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "facing", type: "real" } + ] + }, + InitHashtable: { returnType: "hashtable", args: [] }, + SaveInteger: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + SaveReal: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "value", type: "real" } + ] + }, + SaveBoolean: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + SaveStr: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "value", type: "string" } + ] + }, + SavePlayerHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichPlayer", type: "player" } + ] + }, + SaveWidgetHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichWidget", type: "widget" } + ] + }, + SaveDestructableHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichDestructable", type: "destructable" } + ] + }, + SaveItemHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichItem", type: "item" } + ] + }, + SaveUnitHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichUnit", type: "unit" } + ] + }, + SaveAbilityHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichAbility", type: "ability" } + ] + }, + SaveTimerHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichTimer", type: "timer" } + ] + }, + SaveTriggerHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichTrigger", type: "trigger" } + ] + }, + SaveTriggerConditionHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichTriggercondition", type: "triggercondition" } + ] + }, + SaveTriggerActionHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichTriggeraction", type: "triggeraction" } + ] + }, + SaveTriggerEventHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichEvent", type: "event" } + ] + }, + SaveForceHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichForce", type: "force" } + ] + }, + SaveGroupHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichGroup", type: "group" } + ] + }, + SaveLocationHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichLocation", type: "location" } + ] + }, + SaveRectHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichRect", type: "rect" } + ] + }, + SaveBooleanExprHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichBoolexpr", type: "boolexpr" } + ] + }, + SaveSoundHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichSound", type: "sound" } + ] + }, + SaveEffectHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichEffect", type: "effect" } + ] + }, + SaveUnitPoolHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichUnitpool", type: "unitpool" } + ] + }, + SaveItemPoolHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichItempool", type: "itempool" } + ] + }, + SaveQuestHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichQuest", type: "quest" } + ] + }, + SaveQuestItemHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichQuestitem", type: "questitem" } + ] + }, + SaveDefeatConditionHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichDefeatcondition", type: "defeatcondition" } + ] + }, + SaveTimerDialogHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichTimerdialog", type: "timerdialog" } + ] + }, + SaveLeaderboardHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichLeaderboard", type: "leaderboard" } + ] + }, + SaveMultiboardHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichMultiboard", type: "multiboard" } + ] + }, + SaveMultiboardItemHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichMultiboarditem", type: "multiboarditem" } + ] + }, + SaveTrackableHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichTrackable", type: "trackable" } + ] + }, + SaveDialogHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichDialog", type: "dialog" } + ] + }, + SaveButtonHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichButton", type: "button" } + ] + }, + SaveTextTagHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichTexttag", type: "texttag" } + ] + }, + SaveLightningHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichLightning", type: "lightning" } + ] + }, + SaveImageHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichImage", type: "image" } + ] + }, + SaveUbersplatHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichUbersplat", type: "ubersplat" } + ] + }, + SaveRegionHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichRegion", type: "region" } + ] + }, + SaveFogStateHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichFogState", type: "fogstate" } + ] + }, + SaveFogModifierHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichFogModifier", type: "fogmodifier" } + ] + }, + SaveAgentHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichAgent", type: "agent" } + ] + }, + SaveHashtableHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichHashtable", type: "hashtable" } + ] + }, + LoadInteger: { + returnType: "integer", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadReal: { + returnType: "real", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadBoolean: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadStr: { + returnType: "string", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadPlayerHandle: { + returnType: "player", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadWidgetHandle: { + returnType: "widget", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadDestructableHandle: { + returnType: "destructable", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadItemHandle: { + returnType: "item", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadUnitHandle: { + returnType: "unit", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadAbilityHandle: { + returnType: "ability", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTimerHandle: { + returnType: "timer", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTriggerHandle: { + returnType: "trigger", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTriggerConditionHandle: { + returnType: "triggercondition", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTriggerActionHandle: { + returnType: "triggeraction", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTriggerEventHandle: { + returnType: "event", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadForceHandle: { + returnType: "force", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadGroupHandle: { + returnType: "group", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadLocationHandle: { + returnType: "location", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadRectHandle: { + returnType: "rect", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadBooleanExprHandle: { + returnType: "boolexpr", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadSoundHandle: { + returnType: "sound", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadEffectHandle: { + returnType: "effect", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadUnitPoolHandle: { + returnType: "unitpool", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadItemPoolHandle: { + returnType: "itempool", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadQuestHandle: { + returnType: "quest", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadQuestItemHandle: { + returnType: "questitem", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadDefeatConditionHandle: { + returnType: "defeatcondition", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTimerDialogHandle: { + returnType: "timerdialog", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadLeaderboardHandle: { + returnType: "leaderboard", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadMultiboardHandle: { + returnType: "multiboard", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadMultiboardItemHandle: { + returnType: "multiboarditem", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTrackableHandle: { + returnType: "trackable", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadDialogHandle: { + returnType: "dialog", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadButtonHandle: { + returnType: "button", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTextTagHandle: { + returnType: "texttag", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadLightningHandle: { + returnType: "lightning", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadImageHandle: { + returnType: "image", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadUbersplatHandle: { + returnType: "ubersplat", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadRegionHandle: { + returnType: "region", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadFogStateHandle: { + returnType: "fogstate", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadFogModifierHandle: { + returnType: "fogmodifier", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadHashtableHandle: { + returnType: "hashtable", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + HaveSavedInteger: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + HaveSavedReal: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + HaveSavedBoolean: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + HaveSavedString: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + HaveSavedHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + RemoveSavedInteger: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + RemoveSavedReal: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + RemoveSavedBoolean: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + RemoveSavedString: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + RemoveSavedHandle: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + FlushParentHashtable: { returnType: "nothing", args: [{ name: "table", type: "hashtable" }] }, + FlushChildHashtable: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" } + ] + }, + GetRandomInt: { + returnType: "integer", + args: [ + { name: "lowBound", type: "integer" }, + { name: "highBound", type: "integer" } + ] + }, + GetRandomReal: { + returnType: "real", + args: [ + { name: "lowBound", type: "real" }, + { name: "highBound", type: "real" } + ] + }, + CreateUnitPool: { returnType: "unitpool", args: [] }, + DestroyUnitPool: { returnType: "nothing", args: [{ name: "whichPool", type: "unitpool" }] }, + UnitPoolAddUnitType: { + returnType: "nothing", + args: [ + { name: "whichPool", type: "unitpool" }, + { name: "unitId", type: "integer" }, + { name: "weight", type: "real" } + ] + }, + UnitPoolRemoveUnitType: { + returnType: "nothing", + args: [ + { name: "whichPool", type: "unitpool" }, + { name: "unitId", type: "integer" } + ] + }, + PlaceRandomUnit: { + returnType: "unit", + args: [ + { name: "whichPool", type: "unitpool" }, + { name: "forWhichPlayer", type: "player" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "facing", type: "real" } + ] + }, + CreateItemPool: { returnType: "itempool", args: [] }, + DestroyItemPool: { returnType: "nothing", args: [{ name: "whichItemPool", type: "itempool" }] }, + ItemPoolAddItemType: { + returnType: "nothing", + args: [ + { name: "whichItemPool", type: "itempool" }, + { name: "itemId", type: "integer" }, + { name: "weight", type: "real" } + ] + }, + ItemPoolRemoveItemType: { + returnType: "nothing", + args: [ + { name: "whichItemPool", type: "itempool" }, + { name: "itemId", type: "integer" } + ] + }, + PlaceRandomItem: { + returnType: "item", + args: [ + { name: "whichItemPool", type: "itempool" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + ChooseRandomCreep: { returnType: "integer", args: [{ name: "level", type: "integer" }] }, + ChooseRandomNPBuilding: { returnType: "integer", args: [] }, + ChooseRandomItem: { returnType: "integer", args: [{ name: "level", type: "integer" }] }, + ChooseRandomItemEx: { + returnType: "integer", + args: [ + { name: "whichType", type: "itemtype" }, + { name: "level", type: "integer" } + ] + }, + SetRandomSeed: { returnType: "nothing", args: [{ name: "seed", type: "integer" }] }, + SetTerrainFog: { + returnType: "nothing", + args: [ + { name: "a", type: "real" }, + { name: "b", type: "real" }, + { name: "c", type: "real" }, + { name: "d", type: "real" }, + { name: "e", type: "real" } + ] + }, + ResetTerrainFog: { returnType: "nothing", args: [] }, + SetUnitFog: { + returnType: "nothing", + args: [ + { name: "a", type: "real" }, + { name: "b", type: "real" }, + { name: "c", type: "real" }, + { name: "d", type: "real" }, + { name: "e", type: "real" } + ] + }, + SetTerrainFogEx: { + returnType: "nothing", + args: [ + { name: "style", type: "integer" }, + { name: "zstart", type: "real" }, + { name: "zend", type: "real" }, + { name: "density", type: "real" }, + { name: "red", type: "real" }, + { name: "green", type: "real" }, + { name: "blue", type: "real" } + ] + }, + DisplayTextToPlayer: { + returnType: "nothing", + args: [ + { name: "toPlayer", type: "player" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "message", type: "string" } + ] + }, + DisplayTimedTextToPlayer: { + returnType: "nothing", + args: [ + { name: "toPlayer", type: "player" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "duration", type: "real" }, + { name: "message", type: "string" } + ] + }, + DisplayTimedTextFromPlayer: { + returnType: "nothing", + args: [ + { name: "toPlayer", type: "player" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "duration", type: "real" }, + { name: "message", type: "string" } + ] + }, + ClearTextMessages: { returnType: "nothing", args: [] }, + SetDayNightModels: { + returnType: "nothing", + args: [ + { name: "terrainDNCFile", type: "string" }, + { name: "unitDNCFile", type: "string" } + ] + }, + SetSkyModel: { returnType: "nothing", args: [{ name: "skyModelFile", type: "string" }] }, + EnableUserControl: { returnType: "nothing", args: [{ name: "b", type: "boolean" }] }, + EnableUserUI: { returnType: "nothing", args: [{ name: "b", type: "boolean" }] }, + SuspendTimeOfDay: { returnType: "nothing", args: [{ name: "b", type: "boolean" }] }, + SetTimeOfDayScale: { returnType: "nothing", args: [{ name: "r", type: "real" }] }, + GetTimeOfDayScale: { returnType: "real", args: [] }, + ShowInterface: { + returnType: "nothing", + args: [ + { name: "flag", type: "boolean" }, + { name: "fadeDuration", type: "real" } + ] + }, + PauseGame: { returnType: "nothing", args: [{ name: "flag", type: "boolean" }] }, + UnitAddIndicator: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + AddIndicator: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + PingMinimap: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "duration", type: "real" } + ] + }, + PingMinimapEx: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "duration", type: "real" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "extraEffects", type: "boolean" } + ] + }, + EnableOcclusion: { returnType: "nothing", args: [{ name: "flag", type: "boolean" }] }, + SetIntroShotText: { returnType: "nothing", args: [{ name: "introText", type: "string" }] }, + SetIntroShotModel: { returnType: "nothing", args: [{ name: "introModelPath", type: "string" }] }, + EnableWorldFogBoundary: { returnType: "nothing", args: [{ name: "b", type: "boolean" }] }, + PlayModelCinematic: { returnType: "nothing", args: [{ name: "modelName", type: "string" }] }, + PlayCinematic: { returnType: "nothing", args: [{ name: "movieName", type: "string" }] }, + ForceUIKey: { returnType: "nothing", args: [{ name: "key", type: "string" }] }, + ForceUICancel: { returnType: "nothing", args: [] }, + DisplayLoadDialog: { returnType: "nothing", args: [] }, + SetAltMinimapIcon: { returnType: "nothing", args: [{ name: "iconPath", type: "string" }] }, + DisableRestartMission: { returnType: "nothing", args: [{ name: "flag", type: "boolean" }] }, + CreateTextTag: { returnType: "texttag", args: [] }, + DestroyTextTag: { returnType: "nothing", args: [{ name: "t", type: "texttag" }] }, + SetTextTagText: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "s", type: "string" }, + { name: "height", type: "real" } + ] + }, + SetTextTagPos: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "heightOffset", type: "real" } + ] + }, + SetTextTagPosUnit: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "whichUnit", type: "unit" }, + { name: "heightOffset", type: "real" } + ] + }, + SetTextTagColor: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetTextTagVelocity: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "xvel", type: "real" }, + { name: "yvel", type: "real" } + ] + }, + SetTextTagVisibility: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "flag", type: "boolean" } + ] + }, + SetTextTagSuspended: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "flag", type: "boolean" } + ] + }, + SetTextTagPermanent: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "flag", type: "boolean" } + ] + }, + SetTextTagAge: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "age", type: "real" } + ] + }, + SetTextTagLifespan: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "lifespan", type: "real" } + ] + }, + SetTextTagFadepoint: { + returnType: "nothing", + args: [ + { name: "t", type: "texttag" }, + { name: "fadepoint", type: "real" } + ] + }, + SetReservedLocalHeroButtons: { returnType: "nothing", args: [{ name: "reserved", type: "integer" }] }, + GetAllyColorFilterState: { returnType: "integer", args: [] }, + SetAllyColorFilterState: { returnType: "nothing", args: [{ name: "state", type: "integer" }] }, + GetCreepCampFilterState: { returnType: "boolean", args: [] }, + SetCreepCampFilterState: { returnType: "nothing", args: [{ name: "state", type: "boolean" }] }, + EnableMinimapFilterButtons: { + returnType: "nothing", + args: [ + { name: "enableAlly", type: "boolean" }, + { name: "enableCreep", type: "boolean" } + ] + }, + EnableDragSelect: { + returnType: "nothing", + args: [ + { name: "state", type: "boolean" }, + { name: "ui", type: "boolean" } + ] + }, + EnablePreSelect: { + returnType: "nothing", + args: [ + { name: "state", type: "boolean" }, + { name: "ui", type: "boolean" } + ] + }, + EnableSelect: { + returnType: "nothing", + args: [ + { name: "state", type: "boolean" }, + { name: "ui", type: "boolean" } + ] + }, + CreateTrackable: { + returnType: "trackable", + args: [ + { name: "trackableModelPath", type: "string" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "facing", type: "real" } + ] + }, + CreateQuest: { returnType: "quest", args: [] }, + DestroyQuest: { returnType: "nothing", args: [{ name: "whichQuest", type: "quest" }] }, + QuestSetTitle: { + returnType: "nothing", + args: [ + { name: "whichQuest", type: "quest" }, + { name: "title", type: "string" } + ] + }, + QuestSetDescription: { + returnType: "nothing", + args: [ + { name: "whichQuest", type: "quest" }, + { name: "description", type: "string" } + ] + }, + QuestSetIconPath: { + returnType: "nothing", + args: [ + { name: "whichQuest", type: "quest" }, + { name: "iconPath", type: "string" } + ] + }, + QuestSetRequired: { + returnType: "nothing", + args: [ + { name: "whichQuest", type: "quest" }, + { name: "required", type: "boolean" } + ] + }, + QuestSetCompleted: { + returnType: "nothing", + args: [ + { name: "whichQuest", type: "quest" }, + { name: "completed", type: "boolean" } + ] + }, + QuestSetDiscovered: { + returnType: "nothing", + args: [ + { name: "whichQuest", type: "quest" }, + { name: "discovered", type: "boolean" } + ] + }, + QuestSetFailed: { + returnType: "nothing", + args: [ + { name: "whichQuest", type: "quest" }, + { name: "failed", type: "boolean" } + ] + }, + QuestSetEnabled: { + returnType: "nothing", + args: [ + { name: "whichQuest", type: "quest" }, + { name: "enabled", type: "boolean" } + ] + }, + IsQuestRequired: { returnType: "boolean", args: [{ name: "whichQuest", type: "quest" }] }, + IsQuestCompleted: { returnType: "boolean", args: [{ name: "whichQuest", type: "quest" }] }, + IsQuestDiscovered: { returnType: "boolean", args: [{ name: "whichQuest", type: "quest" }] }, + IsQuestFailed: { returnType: "boolean", args: [{ name: "whichQuest", type: "quest" }] }, + IsQuestEnabled: { returnType: "boolean", args: [{ name: "whichQuest", type: "quest" }] }, + QuestCreateItem: { returnType: "questitem", args: [{ name: "whichQuest", type: "quest" }] }, + QuestItemSetDescription: { + returnType: "nothing", + args: [ + { name: "whichQuestItem", type: "questitem" }, + { name: "description", type: "string" } + ] + }, + QuestItemSetCompleted: { + returnType: "nothing", + args: [ + { name: "whichQuestItem", type: "questitem" }, + { name: "completed", type: "boolean" } + ] + }, + IsQuestItemCompleted: { returnType: "boolean", args: [{ name: "whichQuestItem", type: "questitem" }] }, + CreateDefeatCondition: { returnType: "defeatcondition", args: [] }, + DestroyDefeatCondition: { returnType: "nothing", args: [{ name: "whichCondition", type: "defeatcondition" }] }, + DefeatConditionSetDescription: { + returnType: "nothing", + args: [ + { name: "whichCondition", type: "defeatcondition" }, + { name: "description", type: "string" } + ] + }, + FlashQuestDialogButton: { returnType: "nothing", args: [] }, + ForceQuestDialogUpdate: { returnType: "nothing", args: [] }, + CreateTimerDialog: { returnType: "timerdialog", args: [{ name: "t", type: "timer" }] }, + DestroyTimerDialog: { returnType: "nothing", args: [{ name: "whichDialog", type: "timerdialog" }] }, + TimerDialogSetTitle: { + returnType: "nothing", + args: [ + { name: "whichDialog", type: "timerdialog" }, + { name: "title", type: "string" } + ] + }, + TimerDialogSetTitleColor: { + returnType: "nothing", + args: [ + { name: "whichDialog", type: "timerdialog" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + TimerDialogSetTimeColor: { + returnType: "nothing", + args: [ + { name: "whichDialog", type: "timerdialog" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + TimerDialogSetSpeed: { + returnType: "nothing", + args: [ + { name: "whichDialog", type: "timerdialog" }, + { name: "speedMultFactor", type: "real" } + ] + }, + TimerDialogDisplay: { + returnType: "nothing", + args: [ + { name: "whichDialog", type: "timerdialog" }, + { name: "display", type: "boolean" } + ] + }, + IsTimerDialogDisplayed: { returnType: "boolean", args: [{ name: "whichDialog", type: "timerdialog" }] }, + TimerDialogSetRealTimeRemaining: { + returnType: "nothing", + args: [ + { name: "whichDialog", type: "timerdialog" }, + { name: "timeRemaining", type: "real" } + ] + }, + CreateLeaderboard: { returnType: "leaderboard", args: [] }, + DestroyLeaderboard: { returnType: "nothing", args: [{ name: "lb", type: "leaderboard" }] }, + LeaderboardDisplay: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "show", type: "boolean" } + ] + }, + IsLeaderboardDisplayed: { returnType: "boolean", args: [{ name: "lb", type: "leaderboard" }] }, + LeaderboardGetItemCount: { returnType: "integer", args: [{ name: "lb", type: "leaderboard" }] }, + LeaderboardSetSizeByItemCount: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "count", type: "integer" } + ] + }, + LeaderboardAddItem: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "label", type: "string" }, + { name: "value", type: "integer" }, + { name: "p", type: "player" } + ] + }, + LeaderboardRemoveItem: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "index", type: "integer" } + ] + }, + LeaderboardRemovePlayerItem: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "p", type: "player" } + ] + }, + LeaderboardClear: { returnType: "nothing", args: [{ name: "lb", type: "leaderboard" }] }, + LeaderboardSortItemsByValue: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "ascending", type: "boolean" } + ] + }, + LeaderboardSortItemsByPlayer: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "ascending", type: "boolean" } + ] + }, + LeaderboardSortItemsByLabel: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "ascending", type: "boolean" } + ] + }, + LeaderboardHasPlayerItem: { + returnType: "boolean", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "p", type: "player" } + ] + }, + LeaderboardGetPlayerIndex: { + returnType: "integer", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "p", type: "player" } + ] + }, + LeaderboardSetLabel: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "label", type: "string" } + ] + }, + LeaderboardGetLabelText: { returnType: "string", args: [{ name: "lb", type: "leaderboard" }] }, + PlayerSetLeaderboard: { + returnType: "nothing", + args: [ + { name: "toPlayer", type: "player" }, + { name: "lb", type: "leaderboard" } + ] + }, + PlayerGetLeaderboard: { returnType: "leaderboard", args: [{ name: "toPlayer", type: "player" }] }, + LeaderboardSetLabelColor: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + LeaderboardSetValueColor: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + LeaderboardSetStyle: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "showLabel", type: "boolean" }, + { name: "showNames", type: "boolean" }, + { name: "showValues", type: "boolean" }, + { name: "showIcons", type: "boolean" } + ] + }, + LeaderboardSetItemValue: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "whichItem", type: "integer" }, + { name: "val", type: "integer" } + ] + }, + LeaderboardSetItemLabel: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "whichItem", type: "integer" }, + { name: "val", type: "string" } + ] + }, + LeaderboardSetItemStyle: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "whichItem", type: "integer" }, + { name: "showLabel", type: "boolean" }, + { name: "showValue", type: "boolean" }, + { name: "showIcon", type: "boolean" } + ] + }, + LeaderboardSetItemLabelColor: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "whichItem", type: "integer" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + LeaderboardSetItemValueColor: { + returnType: "nothing", + args: [ + { name: "lb", type: "leaderboard" }, + { name: "whichItem", type: "integer" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + CreateMultiboard: { returnType: "multiboard", args: [] }, + DestroyMultiboard: { returnType: "nothing", args: [{ name: "lb", type: "multiboard" }] }, + MultiboardDisplay: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "show", type: "boolean" } + ] + }, + IsMultiboardDisplayed: { returnType: "boolean", args: [{ name: "lb", type: "multiboard" }] }, + MultiboardMinimize: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "minimize", type: "boolean" } + ] + }, + IsMultiboardMinimized: { returnType: "boolean", args: [{ name: "lb", type: "multiboard" }] }, + MultiboardClear: { returnType: "nothing", args: [{ name: "lb", type: "multiboard" }] }, + MultiboardSetTitleText: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "label", type: "string" } + ] + }, + MultiboardGetTitleText: { returnType: "string", args: [{ name: "lb", type: "multiboard" }] }, + MultiboardSetTitleTextColor: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + MultiboardGetRowCount: { returnType: "integer", args: [{ name: "lb", type: "multiboard" }] }, + MultiboardGetColumnCount: { returnType: "integer", args: [{ name: "lb", type: "multiboard" }] }, + MultiboardSetColumnCount: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "count", type: "integer" } + ] + }, + MultiboardSetRowCount: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "count", type: "integer" } + ] + }, + MultiboardSetItemsStyle: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "showValues", type: "boolean" }, + { name: "showIcons", type: "boolean" } + ] + }, + MultiboardSetItemsValue: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "value", type: "string" } + ] + }, + MultiboardSetItemsValueColor: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + MultiboardSetItemsWidth: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "width", type: "real" } + ] + }, + MultiboardSetItemsIcon: { + returnType: "nothing", + args: [ + { name: "lb", type: "multiboard" }, + { name: "iconPath", type: "string" } + ] + }, + MultiboardGetItem: { + returnType: "multiboarditem", + args: [ + { name: "lb", type: "multiboard" }, + { name: "row", type: "integer" }, + { name: "column", type: "integer" } + ] + }, + MultiboardReleaseItem: { returnType: "nothing", args: [{ name: "mbi", type: "multiboarditem" }] }, + MultiboardSetItemStyle: { + returnType: "nothing", + args: [ + { name: "mbi", type: "multiboarditem" }, + { name: "showValue", type: "boolean" }, + { name: "showIcon", type: "boolean" } + ] + }, + MultiboardSetItemValue: { + returnType: "nothing", + args: [ + { name: "mbi", type: "multiboarditem" }, + { name: "val", type: "string" } + ] + }, + MultiboardSetItemValueColor: { + returnType: "nothing", + args: [ + { name: "mbi", type: "multiboarditem" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + MultiboardSetItemWidth: { + returnType: "nothing", + args: [ + { name: "mbi", type: "multiboarditem" }, + { name: "width", type: "real" } + ] + }, + MultiboardSetItemIcon: { + returnType: "nothing", + args: [ + { name: "mbi", type: "multiboarditem" }, + { name: "iconFileName", type: "string" } + ] + }, + MultiboardSuppressDisplay: { returnType: "nothing", args: [{ name: "flag", type: "boolean" }] }, + SetCameraPosition: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetCameraQuickPosition: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetCameraBounds: { + returnType: "nothing", + args: [ + { name: "x1", type: "real" }, + { name: "y1", type: "real" }, + { name: "x2", type: "real" }, + { name: "y2", type: "real" }, + { name: "x3", type: "real" }, + { name: "y3", type: "real" }, + { name: "x4", type: "real" }, + { name: "y4", type: "real" } + ] + }, + StopCamera: { returnType: "nothing", args: [] }, + ResetToGameCamera: { returnType: "nothing", args: [{ name: "duration", type: "real" }] }, + PanCameraTo: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + PanCameraToTimed: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "duration", type: "real" } + ] + }, + PanCameraToWithZ: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "zOffsetDest", type: "real" } + ] + }, + PanCameraToTimedWithZ: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "zOffsetDest", type: "real" }, + { name: "duration", type: "real" } + ] + }, + SetCinematicCamera: { returnType: "nothing", args: [{ name: "cameraModelFile", type: "string" }] }, + SetCameraRotateMode: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radiansToSweep", type: "real" }, + { name: "duration", type: "real" } + ] + }, + SetCameraField: { + returnType: "nothing", + args: [ + { name: "whichField", type: "camerafield" }, + { name: "value", type: "real" }, + { name: "duration", type: "real" } + ] + }, + AdjustCameraField: { + returnType: "nothing", + args: [ + { name: "whichField", type: "camerafield" }, + { name: "offset", type: "real" }, + { name: "duration", type: "real" } + ] + }, + SetCameraTargetController: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "xoffset", type: "real" }, + { name: "yoffset", type: "real" }, + { name: "inheritOrientation", type: "boolean" } + ] + }, + SetCameraOrientController: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "xoffset", type: "real" }, + { name: "yoffset", type: "real" } + ] + }, + CreateCameraSetup: { returnType: "camerasetup", args: [] }, + CameraSetupSetField: { + returnType: "nothing", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "whichField", type: "camerafield" }, + { name: "value", type: "real" }, + { name: "duration", type: "real" } + ] + }, + CameraSetupGetField: { + returnType: "real", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "whichField", type: "camerafield" } + ] + }, + CameraSetupSetDestPosition: { + returnType: "nothing", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "duration", type: "real" } + ] + }, + CameraSetupGetDestPositionLoc: { returnType: "location", args: [{ name: "whichSetup", type: "camerasetup" }] }, + CameraSetupGetDestPositionX: { returnType: "real", args: [{ name: "whichSetup", type: "camerasetup" }] }, + CameraSetupGetDestPositionY: { returnType: "real", args: [{ name: "whichSetup", type: "camerasetup" }] }, + CameraSetupApply: { + returnType: "nothing", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "doPan", type: "boolean" }, + { name: "panTimed", type: "boolean" } + ] + }, + CameraSetupApplyWithZ: { + returnType: "nothing", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "zDestOffset", type: "real" } + ] + }, + CameraSetupApplyForceDuration: { + returnType: "nothing", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "doPan", type: "boolean" }, + { name: "forceDuration", type: "real" } + ] + }, + CameraSetupApplyForceDurationWithZ: { + returnType: "nothing", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "zDestOffset", type: "real" }, + { name: "forceDuration", type: "real" } + ] + }, + CameraSetTargetNoise: { + returnType: "nothing", + args: [ + { name: "mag", type: "real" }, + { name: "velocity", type: "real" } + ] + }, + CameraSetSourceNoise: { + returnType: "nothing", + args: [ + { name: "mag", type: "real" }, + { name: "velocity", type: "real" } + ] + }, + CameraSetTargetNoiseEx: { + returnType: "nothing", + args: [ + { name: "mag", type: "real" }, + { name: "velocity", type: "real" }, + { name: "vertOnly", type: "boolean" } + ] + }, + CameraSetSourceNoiseEx: { + returnType: "nothing", + args: [ + { name: "mag", type: "real" }, + { name: "velocity", type: "real" }, + { name: "vertOnly", type: "boolean" } + ] + }, + CameraSetSmoothingFactor: { returnType: "nothing", args: [{ name: "factor", type: "real" }] }, + SetCineFilterTexture: { returnType: "nothing", args: [{ name: "filename", type: "string" }] }, + SetCineFilterBlendMode: { returnType: "nothing", args: [{ name: "whichMode", type: "blendmode" }] }, + SetCineFilterTexMapFlags: { returnType: "nothing", args: [{ name: "whichFlags", type: "texmapflags" }] }, + SetCineFilterStartUV: { + returnType: "nothing", + args: [ + { name: "minu", type: "real" }, + { name: "minv", type: "real" }, + { name: "maxu", type: "real" }, + { name: "maxv", type: "real" } + ] + }, + SetCineFilterEndUV: { + returnType: "nothing", + args: [ + { name: "minu", type: "real" }, + { name: "minv", type: "real" }, + { name: "maxu", type: "real" }, + { name: "maxv", type: "real" } + ] + }, + SetCineFilterStartColor: { + returnType: "nothing", + args: [ + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetCineFilterEndColor: { + returnType: "nothing", + args: [ + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetCineFilterDuration: { returnType: "nothing", args: [{ name: "duration", type: "real" }] }, + DisplayCineFilter: { returnType: "nothing", args: [{ name: "flag", type: "boolean" }] }, + IsCineFilterDisplayed: { returnType: "boolean", args: [] }, + SetCinematicScene: { + returnType: "nothing", + args: [ + { name: "portraitUnitId", type: "integer" }, + { name: "color", type: "playercolor" }, + { name: "speakerTitle", type: "string" }, + { name: "text", type: "string" }, + { name: "sceneDuration", type: "real" }, + { name: "voiceoverDuration", type: "real" } + ] + }, + EndCinematicScene: { returnType: "nothing", args: [] }, + ForceCinematicSubtitles: { returnType: "nothing", args: [{ name: "flag", type: "boolean" }] }, + GetCameraMargin: { returnType: "real", args: [{ name: "whichMargin", type: "integer" }] }, + GetCameraBoundMinX: { returnType: "real", args: [] }, + GetCameraBoundMinY: { returnType: "real", args: [] }, + GetCameraBoundMaxX: { returnType: "real", args: [] }, + GetCameraBoundMaxY: { returnType: "real", args: [] }, + GetCameraField: { returnType: "real", args: [{ name: "whichField", type: "camerafield" }] }, + GetCameraTargetPositionX: { returnType: "real", args: [] }, + GetCameraTargetPositionY: { returnType: "real", args: [] }, + GetCameraTargetPositionZ: { returnType: "real", args: [] }, + GetCameraTargetPositionLoc: { returnType: "location", args: [] }, + GetCameraEyePositionX: { returnType: "real", args: [] }, + GetCameraEyePositionY: { returnType: "real", args: [] }, + GetCameraEyePositionZ: { returnType: "real", args: [] }, + GetCameraEyePositionLoc: { returnType: "location", args: [] }, + NewSoundEnvironment: { returnType: "nothing", args: [{ name: "environmentName", type: "string" }] }, + CreateSound: { + returnType: "sound", + args: [ + { name: "fileName", type: "string" }, + { name: "looping", type: "boolean" }, + { name: "is3D", type: "boolean" }, + { name: "stopwhenoutofrange", type: "boolean" }, + { name: "fadeInRate", type: "integer" }, + { name: "fadeOutRate", type: "integer" }, + { name: "eaxSetting", type: "string" } + ] + }, + CreateSoundFilenameWithLabel: { + returnType: "sound", + args: [ + { name: "fileName", type: "string" }, + { name: "looping", type: "boolean" }, + { name: "is3D", type: "boolean" }, + { name: "stopwhenoutofrange", type: "boolean" }, + { name: "fadeInRate", type: "integer" }, + { name: "fadeOutRate", type: "integer" }, + { name: "SLKEntryName", type: "string" } + ] + }, + CreateSoundFromLabel: { + returnType: "sound", + args: [ + { name: "soundLabel", type: "string" }, + { name: "looping", type: "boolean" }, + { name: "is3D", type: "boolean" }, + { name: "stopwhenoutofrange", type: "boolean" }, + { name: "fadeInRate", type: "integer" }, + { name: "fadeOutRate", type: "integer" } + ] + }, + CreateMIDISound: { + returnType: "sound", + args: [ + { name: "soundLabel", type: "string" }, + { name: "fadeInRate", type: "integer" }, + { name: "fadeOutRate", type: "integer" } + ] + }, + SetSoundParamsFromLabel: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "soundLabel", type: "string" } + ] + }, + SetSoundDistanceCutoff: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "cutoff", type: "real" } + ] + }, + SetSoundChannel: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "channel", type: "integer" } + ] + }, + SetSoundVolume: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "volume", type: "integer" } + ] + }, + SetSoundPitch: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "pitch", type: "real" } + ] + }, + SetSoundPlayPosition: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "millisecs", type: "integer" } + ] + }, + SetSoundDistances: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "minDist", type: "real" }, + { name: "maxDist", type: "real" } + ] + }, + SetSoundConeAngles: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "inside", type: "real" }, + { name: "outside", type: "real" }, + { name: "outsideVolume", type: "integer" } + ] + }, + SetSoundConeOrientation: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + SetSoundPosition: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + SetSoundVelocity: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + AttachSoundToUnit: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "whichUnit", type: "unit" } + ] + }, + StartSound: { returnType: "nothing", args: [{ name: "soundHandle", type: "sound" }] }, + StopSound: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "killWhenDone", type: "boolean" }, + { name: "fadeOut", type: "boolean" } + ] + }, + KillSoundWhenDone: { returnType: "nothing", args: [{ name: "soundHandle", type: "sound" }] }, + SetMapMusic: { + returnType: "nothing", + args: [ + { name: "musicName", type: "string" }, + { name: "random", type: "boolean" }, + { name: "index", type: "integer" } + ] + }, + ClearMapMusic: { returnType: "nothing", args: [] }, + PlayMusic: { returnType: "nothing", args: [{ name: "musicName", type: "string" }] }, + PlayMusicEx: { + returnType: "nothing", + args: [ + { name: "musicName", type: "string" }, + { name: "frommsecs", type: "integer" }, + { name: "fadeinmsecs", type: "integer" } + ] + }, + StopMusic: { returnType: "nothing", args: [{ name: "fadeOut", type: "boolean" }] }, + ResumeMusic: { returnType: "nothing", args: [] }, + PlayThematicMusic: { returnType: "nothing", args: [{ name: "musicFileName", type: "string" }] }, + PlayThematicMusicEx: { + returnType: "nothing", + args: [ + { name: "musicFileName", type: "string" }, + { name: "frommsecs", type: "integer" } + ] + }, + EndThematicMusic: { returnType: "nothing", args: [] }, + SetMusicVolume: { returnType: "nothing", args: [{ name: "volume", type: "integer" }] }, + SetMusicPlayPosition: { returnType: "nothing", args: [{ name: "millisecs", type: "integer" }] }, + SetThematicMusicPlayPosition: { returnType: "nothing", args: [{ name: "millisecs", type: "integer" }] }, + SetSoundDuration: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "duration", type: "integer" } + ] + }, + GetSoundDuration: { returnType: "integer", args: [{ name: "soundHandle", type: "sound" }] }, + GetSoundFileDuration: { returnType: "integer", args: [{ name: "musicFileName", type: "string" }] }, + VolumeGroupSetVolume: { + returnType: "nothing", + args: [ + { name: "vgroup", type: "volumegroup" }, + { name: "scale", type: "real" } + ] + }, + VolumeGroupReset: { returnType: "nothing", args: [] }, + GetSoundIsPlaying: { returnType: "boolean", args: [{ name: "soundHandle", type: "sound" }] }, + GetSoundIsLoading: { returnType: "boolean", args: [{ name: "soundHandle", type: "sound" }] }, + RegisterStackedSound: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "byPosition", type: "boolean" }, + { name: "rectwidth", type: "real" }, + { name: "rectheight", type: "real" } + ] + }, + UnregisterStackedSound: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "byPosition", type: "boolean" }, + { name: "rectwidth", type: "real" }, + { name: "rectheight", type: "real" } + ] + }, + AddWeatherEffect: { + returnType: "weathereffect", + args: [ + { name: "where", type: "rect" }, + { name: "effectID", type: "integer" } + ] + }, + RemoveWeatherEffect: { returnType: "nothing", args: [{ name: "whichEffect", type: "weathereffect" }] }, + EnableWeatherEffect: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "weathereffect" }, + { name: "enable", type: "boolean" } + ] + }, + TerrainDeformCrater: { + returnType: "terraindeformation", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "depth", type: "real" }, + { name: "duration", type: "integer" }, + { name: "permanent", type: "boolean" } + ] + }, + TerrainDeformRipple: { + returnType: "terraindeformation", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "depth", type: "real" }, + { name: "duration", type: "integer" }, + { name: "count", type: "integer" }, + { name: "spaceWaves", type: "real" }, + { name: "timeWaves", type: "real" }, + { name: "radiusStartPct", type: "real" }, + { name: "limitNeg", type: "boolean" } + ] + }, + TerrainDeformWave: { + returnType: "terraindeformation", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "dirX", type: "real" }, + { name: "dirY", type: "real" }, + { name: "distance", type: "real" }, + { name: "speed", type: "real" }, + { name: "radius", type: "real" }, + { name: "depth", type: "real" }, + { name: "trailTime", type: "integer" }, + { name: "count", type: "integer" } + ] + }, + TerrainDeformRandom: { + returnType: "terraindeformation", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "minDelta", type: "real" }, + { name: "maxDelta", type: "real" }, + { name: "duration", type: "integer" }, + { name: "updateInterval", type: "integer" } + ] + }, + TerrainDeformStop: { + returnType: "nothing", + args: [ + { name: "deformation", type: "terraindeformation" }, + { name: "duration", type: "integer" } + ] + }, + TerrainDeformStopAll: { returnType: "nothing", args: [] }, + AddSpecialEffect: { + returnType: "effect", + args: [ + { name: "modelName", type: "string" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + AddSpecialEffectLoc: { + returnType: "effect", + args: [ + { name: "modelName", type: "string" }, + { name: "where", type: "location" } + ] + }, + AddSpecialEffectTarget: { + returnType: "effect", + args: [ + { name: "modelName", type: "string" }, + { name: "targetWidget", type: "widget" }, + { name: "attachPointName", type: "string" } + ] + }, + DestroyEffect: { returnType: "nothing", args: [{ name: "whichEffect", type: "effect" }] }, + AddSpellEffect: { + returnType: "effect", + args: [ + { name: "abilityString", type: "string" }, + { name: "t", type: "effecttype" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + AddSpellEffectLoc: { + returnType: "effect", + args: [ + { name: "abilityString", type: "string" }, + { name: "t", type: "effecttype" }, + { name: "where", type: "location" } + ] + }, + AddSpellEffectById: { + returnType: "effect", + args: [ + { name: "abilityId", type: "integer" }, + { name: "t", type: "effecttype" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + AddSpellEffectByIdLoc: { + returnType: "effect", + args: [ + { name: "abilityId", type: "integer" }, + { name: "t", type: "effecttype" }, + { name: "where", type: "location" } + ] + }, + AddSpellEffectTarget: { + returnType: "effect", + args: [ + { name: "modelName", type: "string" }, + { name: "t", type: "effecttype" }, + { name: "targetWidget", type: "widget" }, + { name: "attachPoint", type: "string" } + ] + }, + AddSpellEffectTargetById: { + returnType: "effect", + args: [ + { name: "abilityId", type: "integer" }, + { name: "t", type: "effecttype" }, + { name: "targetWidget", type: "widget" }, + { name: "attachPoint", type: "string" } + ] + }, + AddLightning: { + returnType: "lightning", + args: [ + { name: "codeName", type: "string" }, + { name: "checkVisibility", type: "boolean" }, + { name: "x1", type: "real" }, + { name: "y1", type: "real" }, + { name: "x2", type: "real" }, + { name: "y2", type: "real" } + ] + }, + AddLightningEx: { + returnType: "lightning", + args: [ + { name: "codeName", type: "string" }, + { name: "checkVisibility", type: "boolean" }, + { name: "x1", type: "real" }, + { name: "y1", type: "real" }, + { name: "z1", type: "real" }, + { name: "x2", type: "real" }, + { name: "y2", type: "real" }, + { name: "z2", type: "real" } + ] + }, + DestroyLightning: { returnType: "boolean", args: [{ name: "whichBolt", type: "lightning" }] }, + MoveLightning: { + returnType: "boolean", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "checkVisibility", type: "boolean" }, + { name: "x1", type: "real" }, + { name: "y1", type: "real" }, + { name: "x2", type: "real" }, + { name: "y2", type: "real" } + ] + }, + MoveLightningEx: { + returnType: "boolean", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "checkVisibility", type: "boolean" }, + { name: "x1", type: "real" }, + { name: "y1", type: "real" }, + { name: "z1", type: "real" }, + { name: "x2", type: "real" }, + { name: "y2", type: "real" }, + { name: "z2", type: "real" } + ] + }, + GetLightningColorA: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningColorR: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningColorG: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningColorB: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningColor: { + returnType: "boolean", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "r", type: "real" }, + { name: "g", type: "real" }, + { name: "b", type: "real" }, + { name: "a", type: "real" } + ] + }, + GetAbilityEffect: { + returnType: "string", + args: [ + { name: "abilityString", type: "string" }, + { name: "t", type: "effecttype" }, + { name: "index", type: "integer" } + ] + }, + GetAbilityEffectById: { + returnType: "string", + args: [ + { name: "abilityId", type: "integer" }, + { name: "t", type: "effecttype" }, + { name: "index", type: "integer" } + ] + }, + GetAbilitySound: { + returnType: "string", + args: [ + { name: "abilityString", type: "string" }, + { name: "t", type: "soundtype" } + ] + }, + GetAbilitySoundById: { + returnType: "string", + args: [ + { name: "abilityId", type: "integer" }, + { name: "t", type: "soundtype" } + ] + }, + GetTerrainCliffLevel: { + returnType: "integer", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetWaterBaseColor: { + returnType: "nothing", + args: [ + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetWaterDeforms: { returnType: "nothing", args: [{ name: "val", type: "boolean" }] }, + GetTerrainType: { + returnType: "integer", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + GetTerrainVariance: { + returnType: "integer", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetTerrainType: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "terrainType", type: "integer" }, + { name: "variation", type: "integer" }, + { name: "area", type: "integer" }, + { name: "shape", type: "integer" } + ] + }, + IsTerrainPathable: { + returnType: "boolean", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "t", type: "pathingtype" } + ] + }, + SetTerrainPathable: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "t", type: "pathingtype" }, + { name: "flag", type: "boolean" } + ] + }, + CreateImage: { + returnType: "image", + args: [ + { name: "file", type: "string" }, + { name: "sizeX", type: "real" }, + { name: "sizeY", type: "real" }, + { name: "sizeZ", type: "real" }, + { name: "posX", type: "real" }, + { name: "posY", type: "real" }, + { name: "posZ", type: "real" }, + { name: "originX", type: "real" }, + { name: "originY", type: "real" }, + { name: "originZ", type: "real" }, + { name: "imageType", type: "integer" } + ] + }, + DestroyImage: { returnType: "nothing", args: [{ name: "whichImage", type: "image" }] }, + ShowImage: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "flag", type: "boolean" } + ] + }, + SetImageConstantHeight: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "flag", type: "boolean" }, + { name: "height", type: "real" } + ] + }, + SetImagePosition: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + SetImageColor: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetImageRender: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "flag", type: "boolean" } + ] + }, + SetImageRenderAlways: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "flag", type: "boolean" } + ] + }, + SetImageAboveWater: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "flag", type: "boolean" }, + { name: "useWaterAlpha", type: "boolean" } + ] + }, + SetImageType: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "imageType", type: "integer" } + ] + }, + CreateUbersplat: { + returnType: "ubersplat", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "name", type: "string" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" }, + { name: "forcePaused", type: "boolean" }, + { name: "noBirthTime", type: "boolean" } + ] + }, + DestroyUbersplat: { returnType: "nothing", args: [{ name: "whichSplat", type: "ubersplat" }] }, + ResetUbersplat: { returnType: "nothing", args: [{ name: "whichSplat", type: "ubersplat" }] }, + FinishUbersplat: { returnType: "nothing", args: [{ name: "whichSplat", type: "ubersplat" }] }, + ShowUbersplat: { + returnType: "nothing", + args: [ + { name: "whichSplat", type: "ubersplat" }, + { name: "flag", type: "boolean" } + ] + }, + SetUbersplatRender: { + returnType: "nothing", + args: [ + { name: "whichSplat", type: "ubersplat" }, + { name: "flag", type: "boolean" } + ] + }, + SetUbersplatRenderAlways: { + returnType: "nothing", + args: [ + { name: "whichSplat", type: "ubersplat" }, + { name: "flag", type: "boolean" } + ] + }, + SetBlight: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "addBlight", type: "boolean" } + ] + }, + SetBlightRect: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "r", type: "rect" }, + { name: "addBlight", type: "boolean" } + ] + }, + SetBlightPoint: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "addBlight", type: "boolean" } + ] + }, + SetBlightLoc: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "addBlight", type: "boolean" } + ] + }, + CreateBlightedGoldmine: { + returnType: "unit", + args: [ + { name: "id", type: "player" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" } + ] + }, + IsPointBlighted: { + returnType: "boolean", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetDoodadAnimation: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "doodadID", type: "integer" }, + { name: "nearestOnly", type: "boolean" }, + { name: "animName", type: "string" }, + { name: "animRandom", type: "boolean" } + ] + }, + SetDoodadAnimationRect: { + returnType: "nothing", + args: [ + { name: "r", type: "rect" }, + { name: "doodadID", type: "integer" }, + { name: "animName", type: "string" }, + { name: "animRandom", type: "boolean" } + ] + }, + StartMeleeAI: { + returnType: "nothing", + args: [ + { name: "num", type: "player" }, + { name: "script", type: "string" } + ] + }, + StartCampaignAI: { + returnType: "nothing", + args: [ + { name: "num", type: "player" }, + { name: "script", type: "string" } + ] + }, + CommandAI: { + returnType: "nothing", + args: [ + { name: "num", type: "player" }, + { name: "command", type: "integer" }, + { name: "data", type: "integer" } + ] + }, + PauseCompAI: { + returnType: "nothing", + args: [ + { name: "p", type: "player" }, + { name: "pause", type: "boolean" } + ] + }, + GetAIDifficulty: { returnType: "aidifficulty", args: [{ name: "num", type: "player" }] }, + RemoveGuardPosition: { returnType: "nothing", args: [{ name: "hUnit", type: "unit" }] }, + RecycleGuardPosition: { returnType: "nothing", args: [{ name: "hUnit", type: "unit" }] }, + RemoveAllGuardPositions: { returnType: "nothing", args: [{ name: "num", type: "player" }] }, + Cheat: { returnType: "nothing", args: [{ name: "cheatStr", type: "string" }] }, + IsNoVictoryCheat: { returnType: "boolean", args: [] }, + IsNoDefeatCheat: { returnType: "boolean", args: [] }, + Preload: { returnType: "nothing", args: [{ name: "filename", type: "string" }] }, + PreloadEnd: { returnType: "nothing", args: [{ name: "timeout", type: "real" }] }, + PreloadStart: { returnType: "nothing", args: [] }, + PreloadRefresh: { returnType: "nothing", args: [] }, + PreloadEndEx: { returnType: "nothing", args: [] }, + PreloadGenClear: { returnType: "nothing", args: [] }, + PreloadGenStart: { returnType: "nothing", args: [] }, + PreloadGenEnd: { returnType: "nothing", args: [{ name: "filename", type: "string" }] }, + Preloader: { returnType: "nothing", args: [{ name: "filename", type: "string" }] }, + BitwiseGetBit: { + returnType: "integer", + args: [ + { name: "i", type: "integer" }, + { name: "bitIndex", type: "integer" } + ] + }, + BitwiseSetBit: { + returnType: "integer", + args: [ + { name: "i", type: "integer" }, + { name: "bitIndex", type: "integer" }, + { name: "bitValue", type: "integer" } + ] + }, + BitwiseGetByte: { + returnType: "integer", + args: [ + { name: "i", type: "integer" }, + { name: "byteIndex", type: "integer" } + ] + }, + BitwiseSetByte: { + returnType: "integer", + args: [ + { name: "i", type: "integer" }, + { name: "byteIndex", type: "integer" }, + { name: "byteValue", type: "integer" } + ] + }, + BitwiseNOT: { returnType: "integer", args: [{ name: "i", type: "integer" }] }, + BitwiseAND: { + returnType: "integer", + args: [ + { name: "bit1", type: "integer" }, + { name: "bit2", type: "integer" } + ] + }, + BitwiseOR: { + returnType: "integer", + args: [ + { name: "bit1", type: "integer" }, + { name: "bit2", type: "integer" } + ] + }, + BitwiseXOR: { + returnType: "integer", + args: [ + { name: "bit1", type: "integer" }, + { name: "bit2", type: "integer" } + ] + }, + BitwiseShiftLeft: { + returnType: "integer", + args: [ + { name: "i", type: "integer" }, + { name: "bitsToShift", type: "integer" } + ] + }, + BitwiseShiftRight: { + returnType: "integer", + args: [ + { name: "i", type: "integer" }, + { name: "bitsToShift", type: "integer" } + ] + }, + BitwiseToInteger: { + returnType: "integer", + args: [ + { name: "byte1", type: "integer" }, + { name: "byte2", type: "integer" }, + { name: "byte3", type: "integer" }, + { name: "byte4", type: "integer" } + ] + }, + Id2String: { returnType: "string", args: [{ name: "i", type: "integer" }] }, + String2Id: { returnType: "integer", args: [{ name: "idString", type: "string" }] }, + IntToHex: { returnType: "string", args: [{ name: "i", type: "integer" }] }, + IntToChar: { returnType: "string", args: [{ name: "i", type: "integer" }] }, + ConvertColour: { + returnType: "integer", + args: [ + { name: "alpha", type: "integer" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" } + ] + }, + IntegerToHandle: { returnType: "handle", args: [{ name: "i", type: "integer" }] }, + AddressToHandle: { returnType: "handle", args: [{ name: "i", type: "integer" }] }, + HandleToAddress: { returnType: "integer", args: [{ name: "h", type: "handle" }] }, + I2C: { returnType: "code", args: [{ name: "i", type: "integer" }] }, + C2I: { returnType: "integer", args: [{ name: "c", type: "code" }] }, + HandleToHandle: { returnType: "handle", args: [{ name: "h", type: "handle" }] }, + HandleToAgent: { returnType: "agent", args: [{ name: "h", type: "handle" }] }, + HandleToEvent: { returnType: "event", args: [{ name: "h", type: "handle" }] }, + HandleToWidget: { returnType: "widget", args: [{ name: "h", type: "handle" }] }, + HandleToUnit: { returnType: "unit", args: [{ name: "h", type: "handle" }] }, + HandleToDestructable: { returnType: "destructable", args: [{ name: "h", type: "handle" }] }, + HandleToItem: { returnType: "item", args: [{ name: "h", type: "handle" }] }, + HandleToAbility: { returnType: "ability", args: [{ name: "h", type: "handle" }] }, + HandleToBuff: { returnType: "buff", args: [{ name: "h", type: "handle" }] }, + HandleToForce: { returnType: "force", args: [{ name: "h", type: "handle" }] }, + HandleToGroup: { returnType: "group", args: [{ name: "h", type: "handle" }] }, + HandleToTrigger: { returnType: "trigger", args: [{ name: "h", type: "handle" }] }, + HandleToTriggercondition: { returnType: "triggercondition", args: [{ name: "h", type: "handle" }] }, + HandleToTriggeraction: { returnType: "triggeraction", args: [{ name: "h", type: "handle" }] }, + HandleToTimer: { returnType: "timer", args: [{ name: "h", type: "handle" }] }, + HandleToLocation: { returnType: "location", args: [{ name: "h", type: "handle" }] }, + HandleToRegion: { returnType: "region", args: [{ name: "h", type: "handle" }] }, + HandleToRect: { returnType: "rect", args: [{ name: "h", type: "handle" }] }, + HandleToBoolexpr: { returnType: "boolexpr", args: [{ name: "h", type: "handle" }] }, + HandleToSound: { returnType: "sound", args: [{ name: "h", type: "handle" }] }, + HandleToConditionfunc: { returnType: "conditionfunc", args: [{ name: "h", type: "handle" }] }, + HandleToFilterfunc: { returnType: "filterfunc", args: [{ name: "h", type: "handle" }] }, + HandleToUnitpool: { returnType: "unitpool", args: [{ name: "h", type: "handle" }] }, + HandleToItempool: { returnType: "itempool", args: [{ name: "h", type: "handle" }] }, + HandleToRace: { returnType: "race", args: [{ name: "h", type: "handle" }] }, + HandleToAlliancetype: { returnType: "alliancetype", args: [{ name: "h", type: "handle" }] }, + HandleToRacepreference: { returnType: "racepreference", args: [{ name: "h", type: "handle" }] }, + HandleToGamestate: { returnType: "gamestate", args: [{ name: "h", type: "handle" }] }, + HandleToIGamestate: { returnType: "igamestate", args: [{ name: "h", type: "handle" }] }, + HandleToFGamestate: { returnType: "fgamestate", args: [{ name: "h", type: "handle" }] }, + HandleToPlayerstate: { returnType: "playerstate", args: [{ name: "h", type: "handle" }] }, + HandleToPlayerscore: { returnType: "playerscore", args: [{ name: "h", type: "handle" }] }, + HandleToPlayergameresult: { returnType: "playergameresult", args: [{ name: "h", type: "handle" }] }, + HandleToUnitstate: { returnType: "unitstate", args: [{ name: "h", type: "handle" }] }, + HandleToAIDifficulty: { returnType: "aidifficulty", args: [{ name: "h", type: "handle" }] }, + HandleToEventid: { returnType: "eventid", args: [{ name: "h", type: "handle" }] }, + HandleToGameevent: { returnType: "gameevent", args: [{ name: "h", type: "handle" }] }, + HandleToPlayerevent: { returnType: "playerevent", args: [{ name: "h", type: "handle" }] }, + HandleToPlayerunitevent: { returnType: "playerunitevent", args: [{ name: "h", type: "handle" }] }, + HandleToUnitevent: { returnType: "unitevent", args: [{ name: "h", type: "handle" }] }, + HandleToLimitop: { returnType: "limitop", args: [{ name: "h", type: "handle" }] }, + HandleToWidgetevent: { returnType: "widgetevent", args: [{ name: "h", type: "handle" }] }, + HandleToDialogevent: { returnType: "dialogevent", args: [{ name: "h", type: "handle" }] }, + HandleToUnittype: { returnType: "unittype", args: [{ name: "h", type: "handle" }] }, + HandleToGamespeed: { returnType: "gamespeed", args: [{ name: "h", type: "handle" }] }, + HandleToGamedifficulty: { returnType: "gamedifficulty", args: [{ name: "h", type: "handle" }] }, + HandleToGametype: { returnType: "gametype", args: [{ name: "h", type: "handle" }] }, + HandleToMapflag: { returnType: "mapflag", args: [{ name: "h", type: "handle" }] }, + HandleToMapvisibility: { returnType: "mapvisibility", args: [{ name: "h", type: "handle" }] }, + HandleToMapsetting: { returnType: "mapsetting", args: [{ name: "h", type: "handle" }] }, + HandleToMapdensity: { returnType: "mapdensity", args: [{ name: "h", type: "handle" }] }, + HandleToMapcontrol: { returnType: "mapcontrol", args: [{ name: "h", type: "handle" }] }, + HandleToPlayerslotstate: { returnType: "playerslotstate", args: [{ name: "h", type: "handle" }] }, + HandleToVolumegroup: { returnType: "volumegroup", args: [{ name: "h", type: "handle" }] }, + HandleToCamerafield: { returnType: "camerafield", args: [{ name: "h", type: "handle" }] }, + HandleToCamerasetup: { returnType: "camerasetup", args: [{ name: "h", type: "handle" }] }, + HandleToPlayercolor: { returnType: "playercolor", args: [{ name: "h", type: "handle" }] }, + HandleToPlacement: { returnType: "placement", args: [{ name: "h", type: "handle" }] }, + HandleToStartlocprio: { returnType: "startlocprio", args: [{ name: "h", type: "handle" }] }, + HandleToRaritycontrol: { returnType: "raritycontrol", args: [{ name: "h", type: "handle" }] }, + HandleToBlendmode: { returnType: "blendmode", args: [{ name: "h", type: "handle" }] }, + HandleToTexmapflags: { returnType: "texmapflags", args: [{ name: "h", type: "handle" }] }, + HandleToEffect: { returnType: "effect", args: [{ name: "h", type: "handle" }] }, + HandleToEffecttype: { returnType: "effecttype", args: [{ name: "h", type: "handle" }] }, + HandleToWeathereffect: { returnType: "weathereffect", args: [{ name: "h", type: "handle" }] }, + HandleToTerraindeformation: { returnType: "terraindeformation", args: [{ name: "h", type: "handle" }] }, + HandleToFogstate: { returnType: "fogstate", args: [{ name: "h", type: "handle" }] }, + HandleToFogmodifier: { returnType: "fogmodifier", args: [{ name: "h", type: "handle" }] }, + HandleToDialog: { returnType: "dialog", args: [{ name: "h", type: "handle" }] }, + HandleToButton: { returnType: "button", args: [{ name: "h", type: "handle" }] }, + HandleToQuest: { returnType: "quest", args: [{ name: "h", type: "handle" }] }, + HandleToQuestitem: { returnType: "questitem", args: [{ name: "h", type: "handle" }] }, + HandleToDefeatcondition: { returnType: "defeatcondition", args: [{ name: "h", type: "handle" }] }, + HandleToTimerdialog: { returnType: "timerdialog", args: [{ name: "h", type: "handle" }] }, + HandleToLeaderboard: { returnType: "leaderboard", args: [{ name: "h", type: "handle" }] }, + HandleToMultiboard: { returnType: "multiboard", args: [{ name: "h", type: "handle" }] }, + HandleToMultiboarditem: { returnType: "multiboarditem", args: [{ name: "h", type: "handle" }] }, + HandleToTrackable: { returnType: "trackable", args: [{ name: "h", type: "handle" }] }, + HandleToGamecache: { returnType: "gamecache", args: [{ name: "h", type: "handle" }] }, + HandleToVersion: { returnType: "version", args: [{ name: "h", type: "handle" }] }, + HandleToItemtype: { returnType: "itemtype", args: [{ name: "h", type: "handle" }] }, + HandleToTexttag: { returnType: "texttag", args: [{ name: "h", type: "handle" }] }, + HandleToAttacktype: { returnType: "attacktype", args: [{ name: "h", type: "handle" }] }, + HandleToDamagetype: { returnType: "damagetype", args: [{ name: "h", type: "handle" }] }, + HandleToWeapontype: { returnType: "weapontype", args: [{ name: "h", type: "handle" }] }, + HandleToSoundtype: { returnType: "soundtype", args: [{ name: "h", type: "handle" }] }, + HandleToLightning: { returnType: "lightning", args: [{ name: "h", type: "handle" }] }, + HandleToPathingtype: { returnType: "pathingtype", args: [{ name: "h", type: "handle" }] }, + HandleToImage: { returnType: "image", args: [{ name: "h", type: "handle" }] }, + HandleToUbersplat: { returnType: "ubersplat", args: [{ name: "h", type: "handle" }] }, + HandleToHashtable: { returnType: "hashtable", args: [{ name: "h", type: "handle" }] }, + HandleToAnimType: { returnType: "animtype", args: [{ name: "h", type: "handle" }] }, + HandleToSubAnimType: { returnType: "subanimtype", args: [{ name: "h", type: "handle" }] }, + GetHandleCount: { returnType: "integer", args: [] }, + GetNextHandleIndex: { returnType: "integer", args: [] }, + GetStringCount: { returnType: "integer", args: [] }, + GetJassMainThread: { returnType: "jassthread", args: [] }, + GetJassCurrentThread: { returnType: "jassthread", args: [] }, + RunJassScriptEx: { + returnType: "jassthread", + args: [ + { name: "parentScriptFile", type: "string" }, + { name: "helperScriptFile", type: "string" }, + { name: "jassScriptFile", type: "string" } + ] + }, + RunJassScript: { + returnType: "jassthread", + args: [ + { name: "helperScriptFile", type: "string" }, + { name: "jassScriptFile", type: "string" } + ] + }, + RunJassScriptSimple: { returnType: "jassthread", args: [{ name: "jassScriptFile", type: "string" }] }, + StopJassThread: { returnType: "boolean", args: [{ name: "thread", type: "jassthread" }] }, + GetJassGlobalInteger: { + returnType: "integer", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" } + ] + }, + GetJassGlobalReal: { + returnType: "real", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" } + ] + }, + GetJassGlobalString: { + returnType: "string", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" } + ] + }, + GetJassGlobalHandle: { + returnType: "handle", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" } + ] + }, + GetJassGlobalBoolean: { + returnType: "boolean", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" } + ] + }, + SetJassGlobalInteger: { + returnType: "boolean", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" }, + { name: "value", type: "integer" } + ] + }, + SetJassGlobalReal: { + returnType: "boolean", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" }, + { name: "value", type: "real" } + ] + }, + SetJassGlobalString: { + returnType: "boolean", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" }, + { name: "value", type: "string" } + ] + }, + SetJassGlobalHandle: { + returnType: "boolean", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" }, + { name: "value", type: "handle" } + ] + }, + SetJassGlobalBoolean: { + returnType: "boolean", + args: [ + { name: "thread", type: "jassthread" }, + { name: "variableName", type: "string" }, + { name: "value", type: "boolean" } + ] + }, + IsOperationLimitEnabled: { returnType: "boolean", args: [] }, + EnableOperationLimit: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + GetCodeByName: { returnType: "code", args: [{ name: "funcName", type: "string" }] }, + ExecuteCode: { returnType: "nothing", args: [{ name: "c", type: "code" }] }, + ExecuteFuncEx: { returnType: "nothing", args: [{ name: "funcName", type: "string" }] }, + MathRound: { returnType: "integer", args: [{ name: "r", type: "real" }] }, + MathRealRound: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathRealFloor: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathRealCeil: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathRealAbs: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathRealLog: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathRealLn: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathRealModulo: { + returnType: "real", + args: [ + { name: "dividend", type: "real" }, + { name: "divisor", type: "real" } + ] + }, + MathRealMin: { + returnType: "real", + args: [ + { name: "a", type: "real" }, + { name: "b", type: "real" } + ] + }, + MathRealMax: { + returnType: "real", + args: [ + { name: "a", type: "real" }, + { name: "b", type: "real" } + ] + }, + MathRealSign: { returnType: "integer", args: [{ name: "r", type: "real" }] }, + MathRealClamp: { + returnType: "real", + args: [ + { name: "value", type: "real" }, + { name: "min", type: "real" }, + { name: "max", type: "real" } + ] + }, + MathRealLerp: { + returnType: "real", + args: [ + { name: "a", type: "real" }, + { name: "b", type: "real" }, + { name: "t", type: "real" } + ] + }, + MathIntegerAbs: { returnType: "integer", args: [{ name: "i", type: "integer" }] }, + MathIntegerLog: { returnType: "real", args: [{ name: "i", type: "integer" }] }, + MathIntegerLn: { returnType: "real", args: [{ name: "i", type: "integer" }] }, + MathIntegerModulo: { + returnType: "integer", + args: [ + { name: "dividend", type: "integer" }, + { name: "divisor", type: "integer" } + ] + }, + MathIntegerMin: { + returnType: "integer", + args: [ + { name: "a", type: "integer" }, + { name: "b", type: "integer" } + ] + }, + MathIntegerMax: { + returnType: "integer", + args: [ + { name: "a", type: "integer" }, + { name: "b", type: "integer" } + ] + }, + MathIntegerSign: { returnType: "integer", args: [{ name: "i", type: "integer" }] }, + MathIntegerClamp: { + returnType: "integer", + args: [ + { name: "value", type: "integer" }, + { name: "min", type: "integer" }, + { name: "max", type: "integer" } + ] + }, + MathSinDeg: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathCosDeg: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathTanDeg: { returnType: "real", args: [{ name: "r", type: "real" }] }, + MathPointProjectionX: { + returnType: "real", + args: [ + { name: "x", type: "real" }, + { name: "angle", type: "real" }, + { name: "distance", type: "real" } + ] + }, + MathPointProjectionY: { + returnType: "real", + args: [ + { name: "y", type: "real" }, + { name: "angle", type: "real" }, + { name: "distance", type: "real" } + ] + }, + MathAngleBetweenPoints: { + returnType: "real", + args: [ + { name: "fromX", type: "real" }, + { name: "fromY", type: "real" }, + { name: "toX", type: "real" }, + { name: "toY", type: "real" } + ] + }, + MathDistanceBetweenPoints: { + returnType: "real", + args: [ + { name: "fromX", type: "real" }, + { name: "fromY", type: "real" }, + { name: "toX", type: "real" }, + { name: "toY", type: "real" } + ] + }, + MathAngleBetweenLocations: { + returnType: "real", + args: [ + { name: "fromLoc", type: "location" }, + { name: "toLoc", type: "location" } + ] + }, + MathDistanceBetweenLocations: { + returnType: "real", + args: [ + { name: "fromLoc", type: "location" }, + { name: "toLoc", type: "location" } + ] + }, + GetAxisZ: { + returnType: "real", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + StringContains: { + returnType: "boolean", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringFind: { + returnType: "integer", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringFindFirstOf: { + returnType: "integer", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringFindFirstNotOf: { + returnType: "integer", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringFindLastOf: { + returnType: "integer", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringFindLastNotOf: { + returnType: "integer", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringCount: { + returnType: "integer", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringTrimLeft: { + returnType: "string", + args: [ + { name: "s", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringTrimRight: { + returnType: "string", + args: [ + { name: "s", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringTrim: { + returnType: "string", + args: [ + { name: "s", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringReverse: { + returnType: "string", + args: [ + { name: "s", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringReplace: { + returnType: "string", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "replaceWith", type: "string" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + StringInsert: { + returnType: "string", + args: [ + { name: "s", type: "string" }, + { name: "whichString", type: "string" }, + { name: "whichPosition", type: "integer" }, + { name: "caseSensitive", type: "boolean" } + ] + }, + ConsoleEnable: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + ConsolePrint: { returnType: "nothing", args: [{ name: "s", type: "string" }] }, + ConsolePause: { returnType: "nothing", args: [{ name: "s", type: "string" }] }, + TextFileOpen: { returnType: "textfilehandle", args: [{ name: "filePath", type: "string" }] }, + TextFileExists: { returnType: "boolean", args: [{ name: "filePath", type: "string" }] }, + TextFileGetSizeByPath: { returnType: "integer", args: [{ name: "filePath", type: "string" }] }, + TextFileGetSize: { returnType: "integer", args: [{ name: "whichTextFile", type: "textfilehandle" }] }, + TextFileGetPath: { returnType: "string", args: [{ name: "whichTextFile", type: "textfilehandle" }] }, + TextFileClose: { returnType: "nothing", args: [{ name: "whichTextFile", type: "textfilehandle" }] }, + TextFileClear: { returnType: "nothing", args: [{ name: "whichTextFile", type: "textfilehandle" }] }, + TextFileDelete: { returnType: "nothing", args: [{ name: "whichTextFile", type: "textfilehandle" }] }, + TextFileCountLines: { returnType: "integer", args: [{ name: "whichTextFile", type: "textfilehandle" }] }, + TextFileReadLine: { + returnType: "string", + args: [ + { name: "whichTextFile", type: "textfilehandle" }, + { name: "lineNumber", type: "integer" } + ] + }, + TextFileReadAll: { returnType: "string", args: [{ name: "whichTextFile", type: "textfilehandle" }] }, + TextFileWriteLine: { + returnType: "nothing", + args: [ + { name: "whichTextFile", type: "textfilehandle" }, + { name: "text", type: "string" } + ] + }, + GetUjAPIVersion: { returnType: "string", args: [] }, + GetLocale: { returnType: "string", args: [] }, + GetMiscDataString: { + returnType: "string", + args: [ + { name: "sectionName", type: "string" }, + { name: "optionName", type: "string" }, + { name: "index", type: "integer" } + ] + }, + SetMiscDataString: { + returnType: "nothing", + args: [ + { name: "sectionName", type: "string" }, + { name: "optionName", type: "string" }, + { name: "index", type: "integer" }, + { name: "value", type: "string" } + ] + }, + GetSkinDataString: { + returnType: "string", + args: [ + { name: "raceName", type: "string" }, + { name: "sectionName", type: "string" }, + { name: "optionName", type: "string" }, + { name: "index", type: "integer" } + ] + }, + SetSkinDataString: { + returnType: "nothing", + args: [ + { name: "raceName", type: "string" }, + { name: "sectionName", type: "string" }, + { name: "optionName", type: "string" }, + { name: "index", type: "integer" }, + { name: "value", type: "string" } + ] + }, + GetFDFDataString: { returnType: "string", args: [{ name: "sectionName", type: "string" }] }, + SetFDFDataString: { + returnType: "nothing", + args: [ + { name: "sectionName", type: "string" }, + { name: "value", type: "string" } + ] + }, + GetFPS: { returnType: "real", args: [] }, + GetAttackSpeedMinBonus: { returnType: "real", args: [] }, + SetAttackSpeedMinBonus: { returnType: "nothing", args: [{ name: "value", type: "real" }] }, + GetAttackSpeedMaxBonus: { returnType: "real", args: [] }, + SetAttackSpeedMaxBonus: { returnType: "nothing", args: [{ name: "value", type: "real" }] }, + GetMoveSpeedMinAllowed: { returnType: "real", args: [] }, + SetMoveSpeedMinAllowed: { returnType: "nothing", args: [{ name: "value", type: "real" }] }, + GetMoveSpeedMaxAllowed: { returnType: "real", args: [] }, + SetMoveSpeedMaxAllowed: { returnType: "nothing", args: [{ name: "value", type: "real" }] }, + GetMappedTypeName: { + returnType: "string", + args: [ + { name: "whichField", type: "mappedfield" }, + { name: "whichMapType", type: "mappedtype" } + ] + }, + IsSelectionEnabled: { returnType: "boolean", args: [] }, + EnableSelection: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + IsSelectionCircleEnabled: { returnType: "boolean", args: [] }, + EnableSelectionCircle: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + IsTargetIndicatorEnabled: { returnType: "boolean", args: [] }, + EnableTargetIndicator: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + IsRenderStage: { returnType: "boolean", args: [{ name: "renderStage", type: "renderstage" }] }, + EnableRenderStage: { + returnType: "nothing", + args: [ + { name: "renderStage", type: "renderstage" }, + { name: "enable", type: "boolean" } + ] + }, + IsStatbarEnabled: { returnType: "boolean", args: [] }, + EnableStatbar: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + TriggerCountEvents: { returnType: "integer", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerCountConditions: { returnType: "integer", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerCountActions: { returnType: "integer", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerRemoveEvent: { + returnType: "nothing", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichEvent", type: "event" } + ] + }, + TriggerRemoveEventId: { + returnType: "nothing", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichEventId", type: "eventid" }, + { name: "removeAllOccurences", type: "boolean" } + ] + }, + TriggerClearEvents: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + TriggerClear: { returnType: "nothing", args: [{ name: "whichTrigger", type: "trigger" }] }, + RemoveSound: { returnType: "nothing", args: [{ name: "whichSound", type: "sound" }] }, + ReplaceSound: { + returnType: "sound", + args: [ + { name: "whichSound", type: "sound" }, + { name: "fileName", type: "string" }, + { name: "looping", type: "boolean" }, + { name: "is3D", type: "boolean" }, + { name: "stopwhenoutofrange", type: "boolean" }, + { name: "fadeInRate", type: "integer" }, + { name: "fadeOutRate", type: "integer" }, + { name: "eaxSetting", type: "string" } + ] + }, + ReplaceSoundWithLabel: { + returnType: "sound", + args: [ + { name: "whichSound", type: "sound" }, + { name: "fileName", type: "string" }, + { name: "looping", type: "boolean" }, + { name: "is3D", type: "boolean" }, + { name: "stopwhenoutofrange", type: "boolean" }, + { name: "fadeInRate", type: "integer" }, + { name: "fadeOutRate", type: "integer" }, + { name: "SLKEntryName", type: "string" } + ] + }, + ReplaceSoundFromLabel: { + returnType: "sound", + args: [ + { name: "whichSound", type: "sound" }, + { name: "soundLabel", type: "string" }, + { name: "looping", type: "boolean" }, + { name: "is3D", type: "boolean" }, + { name: "stopwhenoutofrange", type: "boolean" }, + { name: "fadeInRate", type: "integer" }, + { name: "fadeOutRate", type: "integer" } + ] + }, + ReplaceMIDISound: { + returnType: "sound", + args: [ + { name: "whichSound", type: "sound" }, + { name: "soundLabel", type: "string" }, + { name: "fadeInRate", type: "integer" }, + { name: "fadeOutRate", type: "integer" } + ] + }, + GetSystemTime: { returnType: "integer", args: [{ name: "whichTimeType", type: "timetype" }] }, + GetLocalTime: { returnType: "integer", args: [{ name: "whichTimeType", type: "timetype" }] }, + GetTimeStamp: { + returnType: "string", + args: [ + { name: "isLocalTime", type: "boolean" }, + { name: "isMiliseconds", type: "integer" } + ] + }, + GetTickCount: { returnType: "integer", args: [] }, + SetScreenFieldOfView: { returnType: "nothing", args: [{ name: "fov", type: "real" }] }, + SetWidescreenState: { returnType: "nothing", args: [{ name: "flag", type: "boolean" }] }, + IsWindowActive: { returnType: "boolean", args: [] }, + GetWindowWidth: { returnType: "integer", args: [] }, + GetWindowHeight: { returnType: "integer", args: [] }, + GetClientWidth: { returnType: "integer", args: [] }, + GetClientHeight: { returnType: "integer", args: [] }, + GetWindowX: { returnType: "integer", args: [] }, + GetWindowY: { returnType: "integer", args: [] }, + GetWindowCenterX: { returnType: "integer", args: [] }, + GetWindowCenterY: { returnType: "integer", args: [] }, + IsCursorEnabled: { returnType: "boolean", args: [] }, + SetCursorEnabled: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + IsCursorAnimationLocked: { returnType: "boolean", args: [] }, + SetCursorAnimationLocked: { returnType: "nothing", args: [{ name: "isLock", type: "boolean" }] }, + GetMouseScreenX: { returnType: "real", args: [] }, + GetMouseScreenY: { returnType: "real", args: [] }, + SetMouseScreenX: { returnType: "nothing", args: [{ name: "x", type: "real" }] }, + SetMouseScreenY: { returnType: "nothing", args: [{ name: "y", type: "real" }] }, + SetMouseScreenPosition: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + GetMouseScreenPixelX: { returnType: "integer", args: [] }, + GetMouseScreenPixelY: { returnType: "integer", args: [] }, + SetMouseScreenPixelX: { returnType: "nothing", args: [{ name: "x", type: "integer" }] }, + SetMouseScreenPixelY: { returnType: "nothing", args: [{ name: "y", type: "integer" }] }, + SetMouseScreenPixelPosition: { + returnType: "nothing", + args: [ + { name: "x", type: "integer" }, + { name: "y", type: "integer" } + ] + }, + GetMouseWorldX: { returnType: "real", args: [] }, + GetMouseWorldY: { returnType: "real", args: [] }, + GetMouseWorldZ: { returnType: "real", args: [] }, + DisplayWarningMessage: { + returnType: "nothing", + args: [ + { name: "toPlayer", type: "player" }, + { name: "message", type: "string" } + ] + }, + DisplayTimedWarningMessage: { + returnType: "nothing", + args: [ + { name: "toPlayer", type: "player" }, + { name: "duration", type: "real" }, + { name: "message", type: "string" } + ] + }, + DisplayChatMessage: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "recipient", type: "integer" }, + { name: "message", type: "string" } + ] + }, + DisplayTimedChatMessage: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "recipient", type: "integer" }, + { name: "duration", type: "real" }, + { name: "message", type: "string" } + ] + }, + DisplayTopMessage: { + returnType: "nothing", + args: [ + { name: "toPlayer", type: "player" }, + { name: "message", type: "string" } + ] + }, + DisplayTimedTopMessage: { + returnType: "nothing", + args: [ + { name: "toPlayer", type: "player" }, + { name: "duration", type: "real" }, + { name: "message", type: "string" } + ] + }, + GetHandleReferenceCount: { returnType: "integer", args: [{ name: "whichHandle", type: "handle" }] }, + GetHandleBaseTypeId: { returnType: "integer", args: [{ name: "whichHandle", type: "handle" }] }, + GetHandleBaseTypeName: { returnType: "string", args: [{ name: "whichHandle", type: "handle" }] }, + GetFilterHandle: { returnType: "handle", args: [] }, + GetEnumHandle: { returnType: "handle", args: [] }, + EnumHandlesOfType: { + returnType: "nothing", + args: [ + { name: "handleBaseTypeId", type: "integer" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + AntiHackEnable: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + AntiHackEnableEx: { + returnType: "nothing", + args: [ + { name: "enable", type: "boolean" }, + { name: "isModuleCheck", type: "boolean" }, + { name: "isProcessCheck", type: "boolean" } + ] + }, + AntiHackEnableModuleCheck: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + AntiHackEnableProcessCheck: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + SaveHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichHandle", type: "handle" } + ] + }, + SaveCode: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichCode", type: "code" } + ] + }, + SaveAttackTypeHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichAttackType", type: "attacktype" } + ] + }, + SaveDamageTypeHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichDamageType", type: "damagetype" } + ] + }, + SaveWeaponTypeHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichWeaponType", type: "weapontype" } + ] + }, + SaveSpriteHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichsprite", type: "sprite" } + ] + }, + SaveDoodadHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichDoodad", type: "doodad" } + ] + }, + SaveTextFileHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichFile", type: "textfilehandle" } + ] + }, + SaveProjectileHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichProjectile", type: "projectile" } + ] + }, + SaveFrameHandle: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichFrame", type: "framehandle" } + ] + }, + SaveHandleList: { + returnType: "boolean", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" }, + { name: "whichHandleList", type: "handlelist" } + ] + }, + LoadHandle: { + returnType: "handle", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadCode: { + returnType: "code", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadAttackTypeHandle: { + returnType: "attacktype", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadDamageTypeHandle: { + returnType: "damagetype", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadWeaponTypeHandle: { + returnType: "weapontype", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadSpriteHandle: { + returnType: "sprite", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadDoodadHandle: { + returnType: "doodad", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadTextFileHandle: { + returnType: "textfilehandle", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadProjectileHandle: { + returnType: "projectile", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadFrameHandle: { + returnType: "framehandle", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + LoadHandleList: { + returnType: "handlelist", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + ForceHasPlayer: { + returnType: "boolean", + args: [ + { name: "whichForce", type: "force" }, + { name: "whichPlayer", type: "player" } + ] + }, + ForceCountPlayers: { returnType: "integer", args: [{ name: "whichForce", type: "force" }] }, + GetHostPlayer: { returnType: "player", args: [] }, + IsReplay: { returnType: "boolean", args: [] }, + GroupGetCount: { returnType: "integer", args: [{ name: "whichGroup", type: "group" }] }, + GroupContainsUnit: { + returnType: "boolean", + args: [ + { name: "whichGroup", type: "group" }, + { name: "whichUnit", type: "unit" } + ] + }, + GroupGetUnitByIndex: { + returnType: "unit", + args: [ + { name: "whichGroup", type: "group" }, + { name: "index", type: "integer" } + ] + }, + GroupForEachUnit: { returnType: "unit", args: [{ name: "whichGroup", type: "group" }] }, + GroupAddGroupEx: { + returnType: "integer", + args: [ + { name: "destGroup", type: "group" }, + { name: "sourceGroup", type: "group" } + ] + }, + GroupRemoveGroupEx: { + returnType: "integer", + args: [ + { name: "destGroup", type: "group" }, + { name: "sourceGroup", type: "group" } + ] + }, + HandleListCreate: { returnType: "handlelist", args: [] }, + HandleListDestroy: { returnType: "nothing", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListAddHandle: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichHandle", type: "handle" } + ] + }, + HandleListRemoveHandle: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichHandle", type: "handle" } + ] + }, + HandleListAddList: { + returnType: "integer", + args: [ + { name: "destHandleList", type: "handlelist" }, + { name: "sourceHandleList", type: "handlelist" } + ] + }, + HandleListRemoveList: { + returnType: "integer", + args: [ + { name: "destHandleList", type: "handlelist" }, + { name: "sourceHandleList", type: "handlelist" } + ] + }, + HandleListRemoveEmpty: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListClear: { returnType: "nothing", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListContainsHandle: { + returnType: "boolean", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichHandle", type: "handle" } + ] + }, + HandleListContainsTypeId: { + returnType: "boolean", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "typeId", type: "integer" } + ] + }, + HandleListGetCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetCountEx: { + returnType: "integer", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "handleTypeId", type: "integer" } + ] + }, + HandleListGetAgentCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetWidgetCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetUnitCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetItemCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetDestructableCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetDoodadCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetAbilityCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetBuffCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetSpriteCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetEffectCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetProjectileCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetFrameCount: { returnType: "integer", args: [{ name: "whichHandleList", type: "handlelist" }] }, + HandleListGetHandleByIndex: { + returnType: "handle", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetHandleByIndexEx: { + returnType: "handle", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "handleTypeId", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetHandleByTypeId: { + returnType: "handle", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "typeId", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetAgentByIndex: { + returnType: "agent", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetWidgetByIndex: { + returnType: "widget", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetUnitByIndex: { + returnType: "unit", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetItemByIndex: { + returnType: "item", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetDestructableByIndex: { + returnType: "destructable", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetDoodadByIndex: { + returnType: "doodad", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetAbilityByIndex: { + returnType: "ability", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetBuffByIndex: { + returnType: "buff", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetSpriteByIndex: { + returnType: "sprite", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetEffectByIndex: { + returnType: "effect", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetProjectileByIndex: { + returnType: "projectile", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetFrameByIndex: { + returnType: "framehandle", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "index", type: "integer" } + ] + }, + HandleListGetFilterHandle: { returnType: "handle", args: [] }, + HandleListGetFilterAgent: { returnType: "agent", args: [] }, + HandleListGetFilterWidget: { returnType: "widget", args: [] }, + HandleListGetFilterUnit: { returnType: "unit", args: [] }, + HandleListGetFilterItem: { returnType: "item", args: [] }, + HandleListGetFilterDestructable: { returnType: "destructable", args: [] }, + HandleListGetFilterDoodad: { returnType: "doodad", args: [] }, + HandleListGetFilterAbility: { returnType: "ability", args: [] }, + HandleListGetFilterBuff: { returnType: "buff", args: [] }, + HandleListGetFilterSprite: { returnType: "sprite", args: [] }, + HandleListGetFilterEffect: { returnType: "effect", args: [] }, + HandleListGetFilterProjectile: { returnType: "projectile", args: [] }, + HandleListGetFilterFrame: { returnType: "framehandle", args: [] }, + HandleListGetEnumHandle: { returnType: "handle", args: [] }, + HandleListGetEnumAgent: { returnType: "agent", args: [] }, + HandleListGetEnumWidget: { returnType: "widget", args: [] }, + HandleListGetEnumUnit: { returnType: "unit", args: [] }, + HandleListGetEnumItem: { returnType: "item", args: [] }, + HandleListGetEnumDestructable: { returnType: "destructable", args: [] }, + HandleListGetEnumDoodad: { returnType: "doodad", args: [] }, + HandleListGetEnumAbility: { returnType: "ability", args: [] }, + HandleListGetEnumBuff: { returnType: "buff", args: [] }, + HandleListGetEnumSprite: { returnType: "sprite", args: [] }, + HandleListGetEnumEffect: { returnType: "effect", args: [] }, + HandleListGetEnumProjectile: { returnType: "projectile", args: [] }, + HandleListGetEnumFrame: { returnType: "framehandle", args: [] }, + HandleListEnumInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumInRangeEx: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "handleTypeId", type: "integer" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumAgentsInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumWidgetsInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumUnitsInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumItemsInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumDestructablesInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumDoodadsInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumEffectsInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumProjectilesInRange: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumInRangeOfLocEx: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "handleTypeId", type: "integer" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumAgentsInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumWidgetsInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumUnitsInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumItemsInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumDestructablesInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumDoodadsInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumEffectsInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumProjectilesInRangeOfLoc: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichLocation", type: "location" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumInRectEx: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "handleTypeId", type: "integer" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumAgentsInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumWidgetsInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumUnitsInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumItemsInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumDestructablesInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumDoodadsInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumEffectsInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumProjectilesInRect: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumByTypeId: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "handleTypeId", type: "integer" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumByTypeIdEx: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "handleTypeId", type: "integer" }, + { name: "typeId", type: "integer" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumUnitAbilities: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichUnit", type: "unit" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListEnumUnitBuffs: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "whichUnit", type: "unit" }, + { name: "filter", type: "boolexpr" } + ] + }, + HandleListForEach: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "c", type: "code" } + ] + }, + HandleListForEachByTypeId: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "handleTypeId", type: "integer" }, + { name: "c", type: "code" } + ] + }, + HandleListForEachByTypeIdEx: { + returnType: "nothing", + args: [ + { name: "whichHandleList", type: "handlelist" }, + { name: "handleTypeId", type: "integer" }, + { name: "typeId", type: "integer" }, + { name: "c", type: "code" } + ] + }, + IsTextTagVisible: { returnType: "boolean", args: [{ name: "whichTextTag", type: "texttag" }] }, + IsTextTagSuspended: { returnType: "boolean", args: [{ name: "whichTextTag", type: "texttag" }] }, + IsTextTagPermanent: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + GetTextTagX: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagX: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "x", type: "real" } + ] + }, + GetTextTagY: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagY: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "y", type: "real" } + ] + }, + GetTextTagZ: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagZ: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "z", type: "real" } + ] + }, + GetTextTagScreenX: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + GetTextTagScreenY: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + GetTextTagHeight: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagHeight: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "height", type: "real" } + ] + }, + GetTextTagPositionLoc: { returnType: "location", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagPositionLoc: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "whichLocation", type: "location" } + ] + }, + GetTextTagColour: { returnType: "integer", args: [{ name: "whichTextTag", type: "texttag" }] }, + GetTextTagAlpha: { returnType: "integer", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagAlpha: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "alpha", type: "integer" } + ] + }, + GetTextTagVelocityX: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagVelocityX: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "velX", type: "real" } + ] + }, + GetTextTagVelocityY: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagVelocityY: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "velY", type: "real" } + ] + }, + GetTextTagVelocityZ: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagVelocityZ: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "velZ", type: "real" } + ] + }, + GetTextTagAge: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + GetTextTagLifespan: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + GetTextTagFadepoint: { returnType: "real", args: [{ name: "whichTextTag", type: "texttag" }] }, + GetTextTagShadowColour: { returnType: "integer", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagShadowColour: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "colour", type: "integer" } + ] + }, + GetTextTagShadowAlpha: { returnType: "integer", args: [{ name: "whichTextTag", type: "texttag" }] }, + SetTextTagShadowAlpha: { + returnType: "nothing", + args: [ + { name: "whichTextTag", type: "texttag" }, + { name: "alpha", type: "integer" } + ] + }, + GetTextTagText: { returnType: "string", args: [{ name: "whichTextTag", type: "texttag" }] }, + GetLightningSourceX: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningSourceX: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningSourceY: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningSourceY: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningSourceZ: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningSourceZ: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningSourcePositionLoc: { returnType: "location", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningSourcePositionLoc: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "whichLocation", type: "location" } + ] + }, + GetLightningTargetX: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningTargetX: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningTargetY: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningTargetY: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningTargetZ: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningTargetZ: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningTargetPositionLoc: { returnType: "location", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningTargetPositionLoc: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "whichLocation", type: "location" } + ] + }, + GetLightningScreenX: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningScreenY: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningColour: { returnType: "integer", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningColourA: { returnType: "integer", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningColourR: { returnType: "integer", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningColourG: { returnType: "integer", args: [{ name: "whichBolt", type: "lightning" }] }, + GetLightningColourB: { returnType: "integer", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningColour: { + returnType: "boolean", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + GetLightningLength: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningLength: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningNoiseScaling: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningNoiseScaling: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningTextureCoordinates: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningTextureCoordinates: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningDuration: { returnType: "real", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningDuration: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "value", type: "real" } + ] + }, + GetLightningTexture: { returnType: "string", args: [{ name: "whichBolt", type: "lightning" }] }, + SetLightningTexture: { + returnType: "nothing", + args: [ + { name: "whichBolt", type: "lightning" }, + { name: "textureName", type: "string" } + ] + }, + CreateImageSimple: { + returnType: "image", + args: [ + { name: "file", type: "string" }, + { name: "sizeX", type: "real" }, + { name: "sizeY", type: "real" }, + { name: "posX", type: "real" }, + { name: "posY", type: "real" }, + { name: "posZ", type: "real" }, + { name: "imageType", type: "integer" } + ] + }, + GetImageType: { returnType: "integer", args: [{ name: "whichImage", type: "image" }] }, + GetImageX: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + SetImageX: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "sizeX", type: "real" } + ] + }, + GetImageY: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + SetImageY: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "sizeY", type: "real" } + ] + }, + GetImageZ: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + SetImageZ: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "sizeZ", type: "real" } + ] + }, + GetImagePositionLoc: { returnType: "location", args: [{ name: "whichImage", type: "image" }] }, + SetImagePositionLoc: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "whichLocation", type: "location" } + ] + }, + GetImageScreenX: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + GetImageScreenY: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + GetImageOriginX: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + SetImageOriginX: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "originX", type: "real" } + ] + }, + GetImageOriginY: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + SetImageOriginY: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "originY", type: "real" } + ] + }, + SetImageOrigin: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "origin", type: "real" } + ] + }, + SetImageOriginEx: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "originX", type: "real" }, + { name: "originY", type: "real" } + ] + }, + GetImageSizeX: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + SetImageSizeX: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "sizeX", type: "real" } + ] + }, + GetImageSizeY: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + SetImageSizeY: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "sizeY", type: "real" } + ] + }, + SetImageSize: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "size", type: "real" } + ] + }, + SetImageSizeEx: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "sizeX", type: "real" }, + { name: "sizeY", type: "real" } + ] + }, + GetImageColour: { returnType: "integer", args: [{ name: "whichImage", type: "image" }] }, + IsImageRendered: { returnType: "boolean", args: [{ name: "whichImage", type: "image" }] }, + IsImageRenderAlways: { returnType: "boolean", args: [{ name: "whichImage", type: "image" }] }, + IsImageRenderAboveWater: { returnType: "boolean", args: [{ name: "whichImage", type: "image" }] }, + IsImageVisible: { returnType: "boolean", args: [{ name: "whichImage", type: "image" }] }, + GetImageConstantHeight: { returnType: "real", args: [{ name: "whichImage", type: "image" }] }, + GetImageTexture: { returnType: "string", args: [{ name: "whichImage", type: "image" }] }, + SetImageTexture: { + returnType: "nothing", + args: [ + { name: "whichImage", type: "image" }, + { name: "imagePath", type: "string" } + ] + }, + TimerIsPaused: { returnType: "boolean", args: [{ name: "whichTimer", type: "timer" }] }, + TimerRestart: { returnType: "nothing", args: [{ name: "whichTimer", type: "timer" }] }, + TimerIsPeriodic: { returnType: "boolean", args: [{ name: "whichTimer", type: "timer" }] }, + TimerSetPeriodic: { + returnType: "nothing", + args: [ + { name: "whichTimer", type: "timer" }, + { name: "isPeriodic", type: "boolean" } + ] + }, + TimerSetRemaining: { + returnType: "nothing", + args: [ + { name: "whichTimer", type: "timer" }, + { name: "remaining", type: "real" } + ] + }, + TimerSetTimeout: { + returnType: "nothing", + args: [ + { name: "whichTimer", type: "timer" }, + { name: "timeout", type: "real" } + ] + }, + TimerGetCallback: { returnType: "code", args: [{ name: "whichTimer", type: "timer" }] }, + TimerSetCallback: { + returnType: "nothing", + args: [ + { name: "whichTimer", type: "timer" }, + { name: "whichFunction", type: "code" } + ] + }, + CreateDoodad: { + returnType: "doodad", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" } + ] + }, + CreateDoodadZ: { + returnType: "doodad", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" } + ] + }, + RemoveDoodad: { returnType: "nothing", args: [{ name: "whichDoodad", type: "doodad" }] }, + GetDoodadCount: { returnType: "integer", args: [] }, + GetDoodadByIndex: { returnType: "doodad", args: [{ name: "index", type: "integer" }] }, + GetDoodadIndex: { returnType: "integer", args: [{ name: "whichDoodad", type: "doodad" }] }, + GetDoodadColour: { returnType: "integer", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadColour: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "colour", type: "integer" } + ] + }, + SetDoodadVertexColour: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + GetDoodadScale: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadScale: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "facing", type: "real" } + ] + }, + GetDoodadX: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadX: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "x", type: "real" } + ] + }, + GetDoodadY: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadY: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "y", type: "real" } + ] + }, + GetDoodadZ: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadZ: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "z", type: "real" } + ] + }, + SetDoodadPosition: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetDoodadPositionWithZ: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + GetDoodadPositionLoc: { returnType: "location", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadPositionLoc: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "whichLocation", type: "location" } + ] + }, + GetDoodadScreenX: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + GetDoodadScreenY: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetDoodadMatrix: { returnType: "nothing", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + GetDoodadYaw: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadYaw: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "yaw", type: "real" } + ] + }, + GetDoodadFacing: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadFacing: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "facing", type: "real" } + ] + }, + GetDoodadPitch: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadPitch: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "pitch", type: "real" } + ] + }, + GetDoodadRoll: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadRoll: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "roll", type: "real" } + ] + }, + SetDoodadOrientation: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + GetDoodadModel: { returnType: "string", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadModel: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "whichModel", type: "string" } + ] + }, + IsDoodadVisible: { returnType: "boolean", args: [{ name: "whichDoodad", type: "doodad" }] }, + ShowDoodad: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "isShow", type: "boolean" } + ] + }, + SetDoodadAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetDoodadAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetDoodadAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "animIndex", type: "integer" } + ] + }, + SetDoodadAnimationEx: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "animationName", type: "string" } + ] + }, + QueueDoodadAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueDoodadAnimation: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "animationName", type: "string" } + ] + }, + GetDoodadAnimationOffsetPercent: { returnType: "real", args: [{ name: "whichDoodad", type: "doodad" }] }, + SetDoodadAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichDoodad", type: "doodad" }, + { name: "percent", type: "real" } + ] + }, + GetFilterDoodad: { returnType: "doodad", args: [] }, + GetEnumDoodad: { returnType: "doodad", args: [] }, + EnumDoodadsInRange: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + EnumDoodadsInRangeEx: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "typeId", type: "integer" }, + { name: "nearestOnly", type: "boolean" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + EnumDoodadsInRect: { + returnType: "nothing", + args: [ + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + EnumDoodadsInRectEx: { + returnType: "nothing", + args: [ + { name: "whichRect", type: "rect" }, + { name: "typeId", type: "integer" }, + { name: "nearestOnly", type: "boolean" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + GetAbilityBaseIntegerFieldById: { + returnType: "integer", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityintegerfield" } + ] + }, + SetAbilityBaseIntegerFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityintegerfield" }, + { name: "value", type: "integer" } + ] + }, + GetAbilityBaseBooleanFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitybooleanfield" } + ] + }, + SetAbilityBaseBooleanFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitybooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + GetAbilityBaseRealFieldById: { + returnType: "real", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityrealfield" } + ] + }, + SetAbilityBaseRealFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityrealfield" }, + { name: "value", type: "real" } + ] + }, + GetAbilityBaseStringFieldById: { + returnType: "string", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitystringfield" } + ] + }, + SetAbilityBaseStringFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitystringfield" }, + { name: "value", type: "string" } + ] + }, + GetAbilityBaseIntegerLevelFieldById: { + returnType: "integer", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityintegerlevelfield" }, + { name: "level", type: "integer" } + ] + }, + SetAbilityBaseIntegerLevelFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityintegerlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + GetAbilityBaseBooleanLevelFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitybooleanlevelfield" }, + { name: "level", type: "integer" } + ] + }, + SetAbilityBaseBooleanLevelFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitybooleanlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + GetAbilityBaseRealLevelFieldById: { + returnType: "real", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityreallevelfield" }, + { name: "level", type: "integer" } + ] + }, + SetAbilityBaseRealLevelFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityreallevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + GetAbilityBaseStringLevelFieldById: { + returnType: "string", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitystringlevelfield" }, + { name: "level", type: "integer" } + ] + }, + SetAbilityBaseStringLevelFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitystringlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + GetAbilityBaseIntegerLevelArrayFieldById: { + returnType: "integer", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + SetAbilityBaseIntegerLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + AddAbilityBaseIntegerLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + RemoveAbilityBaseIntegerLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + GetAbilityBaseBooleanLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + SetAbilityBaseBooleanLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + AddAbilityBaseBooleanLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + RemoveAbilityBaseBooleanLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + GetAbilityBaseRealLevelArrayFieldById: { + returnType: "real", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + SetAbilityBaseRealLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "real" } + ] + }, + AddAbilityBaseRealLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + RemoveAbilityBaseRealLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + GetAbilityBaseStringLevelArrayFieldById: { + returnType: "string", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + SetAbilityBaseStringLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "string" } + ] + }, + AddAbilityBaseStringLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + RemoveAbilityBaseStringLevelArrayFieldById: { + returnType: "boolean", + args: [ + { name: "aid", type: "integer" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + GetAbilityIntegerField: { + returnType: "integer", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerfield" } + ] + }, + SetAbilityIntegerField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerfield" }, + { name: "value", type: "integer" } + ] + }, + GetAbilityBooleanField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanfield" } + ] + }, + SetAbilityBooleanField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + GetAbilityRealField: { + returnType: "real", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityrealfield" } + ] + }, + SetAbilityRealField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityrealfield" }, + { name: "value", type: "real" } + ] + }, + GetAbilityStringField: { + returnType: "string", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringfield" } + ] + }, + SetAbilityStringField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringfield" }, + { name: "value", type: "string" } + ] + }, + GetAbilityIntegerLevelField: { + returnType: "integer", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelfield" }, + { name: "level", type: "integer" } + ] + }, + SetAbilityIntegerLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + GetAbilityBooleanLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelfield" }, + { name: "level", type: "integer" } + ] + }, + SetAbilityBooleanLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + GetAbilityRealLevelField: { + returnType: "real", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelfield" }, + { name: "level", type: "integer" } + ] + }, + SetAbilityRealLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + GetAbilityStringLevelField: { + returnType: "string", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelfield" }, + { name: "level", type: "integer" } + ] + }, + SetAbilityStringLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + GetAbilityIntegerLevelArrayField: { + returnType: "integer", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + SetAbilityIntegerLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + AddAbilityIntegerLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + RemoveAbilityIntegerLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + GetAbilityBooleanLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + SetAbilityBooleanLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + AddAbilityBooleanLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + RemoveAbilityBooleanLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + GetAbilityRealLevelArrayField: { + returnType: "real", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + SetAbilityRealLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "real" } + ] + }, + AddAbilityRealLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + RemoveAbilityRealLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + GetAbilityStringLevelArrayField: { + returnType: "string", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + SetAbilityStringLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "string" } + ] + }, + AddAbilityStringLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + RemoveAbilityStringLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + ResetAbilityFieldData: { returnType: "boolean", args: [{ name: "whichAbility", type: "ability" }] }, + IsAbilityBaseTargetAllowed: { + returnType: "boolean", + args: [ + { name: "abilityId", type: "integer" }, + { name: "source", type: "widget" }, + { name: "target", type: "widget" } + ] + }, + CreateAbility: { returnType: "ability", args: [{ name: "abilityId", type: "integer" }] }, + GetAbilityOwner: { returnType: "unit", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityOwner: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichUnit", type: "unit" } + ] + }, + GetAbilityOwningItem: { returnType: "item", args: [{ name: "whichAbility", type: "ability" }] }, + GetAbilityOrderId: { returnType: "integer", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityOrderId: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "orderId", type: "integer" } + ] + }, + GetAbilityLevel: { returnType: "integer", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityLevel: { + returnType: "integer", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "level", type: "integer" } + ] + }, + GetAbilityBaseTypeId: { returnType: "integer", args: [{ name: "whichAbility", type: "ability" }] }, + GetAbilityTypeId: { returnType: "integer", args: [{ name: "whichAbility", type: "ability" }] }, + IsAbilityTargetAllowed: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichWidget", type: "widget" } + ] + }, + IsAbilityOnCooldown: { returnType: "boolean", args: [{ name: "whichAbility", type: "ability" }] }, + IsAbilityEnabled: { returnType: "boolean", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityEnabled: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "enable", type: "boolean" } + ] + }, + IsAbilityVisible: { returnType: "boolean", args: [{ name: "whichAbility", type: "ability" }] }, + ShowAbility: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "show", type: "boolean" } + ] + }, + IsAbilityEnabledEx: { returnType: "boolean", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityEnabledEx: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "enable", type: "boolean" } + ] + }, + IsAbilityUsable: { returnType: "boolean", args: [{ name: "whichAbility", type: "ability" }] }, + GetAbilityCastTime: { returnType: "real", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityCastTime: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "castTime", type: "real" } + ] + }, + GetAbilityCastPoint: { returnType: "real", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityCastPoint: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "castPoint", type: "real" } + ] + }, + GetAbilityBackswing: { returnType: "real", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityBackswing: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "backswing", type: "real" } + ] + }, + GetAbilityCooldown: { returnType: "real", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityCooldown: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "cooldown", type: "real" } + ] + }, + GetAbilityRemainingCooldown: { returnType: "real", args: [{ name: "whichAbility", type: "ability" }] }, + SetAbilityRemainingCooldown: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "cooldown", type: "real" } + ] + }, + StartAbilityCooldown: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "cooldown", type: "real" } + ] + }, + DisableAbility: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "hide", type: "boolean" }, + { name: "disable", type: "boolean" } + ] + }, + EnableAbility: { + returnType: "nothing", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "show", type: "boolean" }, + { name: "enable", type: "boolean" } + ] + }, + CastAbility: { returnType: "boolean", args: [{ name: "whichAbility", type: "ability" }] }, + CastAbilityGround: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "targX", type: "real" }, + { name: "targY", type: "real" } + ] + }, + CastAbilityTarget: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "target", type: "widget" } + ] + }, + GetFilterAbility: { returnType: "ability", args: [] }, + GetEnumAbility: { returnType: "ability", args: [] }, + EnumUnitAbilities: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichBoolexpr", type: "boolexpr" }, + { name: "whichCode", type: "code" } + ] + }, + GetBuffBaseStringFieldById: { + returnType: "string", + args: [ + { name: "buffId", type: "integer" }, + { name: "whichField", type: "abilitystringfield" } + ] + }, + SetBuffBaseStringFieldById: { + returnType: "boolean", + args: [ + { name: "buffId", type: "integer" }, + { name: "whichField", type: "abilitystringfield" }, + { name: "value", type: "string" } + ] + }, + GetBuffIntegerField: { + returnType: "integer", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichField", type: "abilityintegerfield" } + ] + }, + SetBuffIntegerField: { + returnType: "boolean", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichField", type: "abilityintegerfield" }, + { name: "value", type: "integer" } + ] + }, + GetBuffBooleanField: { + returnType: "boolean", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichField", type: "abilitybooleanfield" } + ] + }, + SetBuffBooleanField: { + returnType: "boolean", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichField", type: "abilitybooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + GetBuffRealField: { + returnType: "real", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichField", type: "abilityrealfield" } + ] + }, + SetBuffRealField: { + returnType: "boolean", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichField", type: "abilityrealfield" }, + { name: "value", type: "real" } + ] + }, + GetBuffStringField: { + returnType: "string", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichField", type: "abilitystringfield" } + ] + }, + SetBuffStringField: { + returnType: "boolean", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichField", type: "abilitystringfield" }, + { name: "value", type: "string" } + ] + }, + ResetBuffFieldData: { returnType: "boolean", args: [{ name: "whichBuff", type: "buff" }] }, + CreateBuff: { returnType: "buff", args: [{ name: "buffId", type: "integer" }] }, + GetBuffTypeId: { returnType: "integer", args: [{ name: "whichBuff", type: "buff" }] }, + GetBuffBaseTypeId: { returnType: "integer", args: [{ name: "whichBuff", type: "buff" }] }, + GetBuffOwner: { returnType: "unit", args: [{ name: "whichbuff", type: "buff" }] }, + SetBuffOwner: { + returnType: "nothing", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "whichUnit", type: "unit" } + ] + }, + GetBuffLevel: { returnType: "integer", args: [{ name: "whichBuff", type: "buff" }] }, + SetBuffLevel: { + returnType: "nothing", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "level", type: "integer" } + ] + }, + GetBuffRemainingDuration: { returnType: "real", args: [{ name: "whichBuff", type: "buff" }] }, + SetBuffRemainingDuration: { + returnType: "boolean", + args: [ + { name: "whichBuff", type: "buff" }, + { name: "duration", type: "real" } + ] + }, + RefreshBuff: { returnType: "boolean", args: [{ name: "whichBuff", type: "buff" }] }, + GetFilterBuff: { returnType: "buff", args: [] }, + GetEnumBuff: { returnType: "buff", args: [] }, + EnumUnitBuffs: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichBoolexpr", type: "boolexpr" }, + { name: "whichCode", type: "code" } + ] + }, + GetTriggerBuff: { returnType: "buff", args: [] }, + GetTriggerBuffSourceAbility: { returnType: "ability", args: [] }, + GetTriggerBuffSourceUnit: { returnType: "unit", args: [] }, + GetTriggerBuffTarget: { returnType: "unit", args: [] }, + CreateSprite: { returnType: "sprite", args: [{ name: "isUber", type: "boolean" }] }, + AttachSpriteToTarget: { + returnType: "sprite", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "targetSprite", type: "sprite" }, + { name: "attachPointName", type: "string" } + ] + }, + AddSpriteToTarget: { + returnType: "sprite", + args: [ + { name: "modelName", type: "string" }, + { name: "targetSprite", type: "sprite" }, + { name: "attachPointName", type: "string" } + ] + }, + GetSpriteChildrenCount: { returnType: "integer", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpriteChildById: { + returnType: "sprite", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "index", type: "integer" } + ] + }, + DetachSprite: { returnType: "nothing", args: [{ name: "whichSprite", type: "sprite" }] }, + RemoveSprite: { returnType: "nothing", args: [{ name: "whichSprite", type: "sprite" }] }, + IsSpriteUber: { returnType: "boolean", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpriteX: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpriteY: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpriteZ: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpriteHeight: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpritePositionLoc: { returnType: "location", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpritePositionWithZ: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + SetSpritePosition: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetSpritePositionLoc: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "loc", type: "location" } + ] + }, + SetSpriteX: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "x", type: "real" } + ] + }, + SetSpriteY: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "y", type: "real" } + ] + }, + SetSpriteZ: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "z", type: "real" } + ] + }, + SetSpriteHeight: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "height", type: "real" } + ] + }, + GetSpriteScreenX: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpriteScreenY: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpriteScale: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteScale: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "scale", type: "real" } + ] + }, + GetSpriteTimeScale: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteTimeScale: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "timescale", type: "real" } + ] + }, + SetSpritePlayerColour: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "color", type: "playercolor" } + ] + }, + GetSpriteColour: { returnType: "integer", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteColour: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "colour", type: "integer" } + ] + }, + SetSpriteAlpha: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "alpha", type: "integer" } + ] + }, + SetSpriteVertexColour: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetSpriteMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetSpriteMatrix: { returnType: "nothing", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + GetSpriteYaw: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteYaw: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "yaw", type: "real" } + ] + }, + GetSpriteFacing: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteFacing: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "facing", type: "real" } + ] + }, + GetSpritePitch: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpritePitch: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "pitch", type: "real" } + ] + }, + GetSpriteRoll: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteRoll: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "roll", type: "real" } + ] + }, + SetSpriteOrientation: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + SetSpriteMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetSpriteTexture: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetSpriteReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetSpriteModel: { returnType: "string", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteModel: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "modelName", type: "string" } + ] + }, + SetSpriteModelEx: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "modelName", type: "string" }, + { name: "playerColour", type: "integer" } + ] + }, + GetSpriteModelObjectX: { + returnType: "real", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "whichObject", type: "string" } + ] + }, + GetSpriteModelObjectY: { + returnType: "real", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "whichObject", type: "string" } + ] + }, + GetSpriteModelObjectZ: { + returnType: "real", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "whichObject", type: "string" } + ] + }, + GetSpriteModelObjectPositionLoc: { + returnType: "location", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "whichObject", type: "string" } + ] + }, + GetSpriteCurrentAnimationId: { returnType: "integer", args: [{ name: "whichSprite", type: "sprite" }] }, + GetSpriteCurrentAnimationName: { returnType: "string", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetSpriteAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetSpriteAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "animIndex", type: "integer" } + ] + }, + SetSpriteAnimation: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "animationName", type: "string" } + ] + }, + QueueSpriteAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueSpriteAnimation: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "animationName", type: "string" } + ] + }, + GetSpriteAnimationOffsetPercent: { returnType: "real", args: [{ name: "whichSprite", type: "sprite" }] }, + SetSpriteAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichSprite", type: "sprite" }, + { name: "percent", type: "real" } + ] + }, + GetSpecialEffectSprite: { returnType: "sprite", args: [{ name: "whichEffect", type: "effect" }] }, + IsSpecialEffectVisible: { returnType: "boolean", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectVisibility: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "visibility", type: "boolean" } + ] + }, + GetSpecialEffectX: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + GetSpecialEffectY: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + GetSpecialEffectZ: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + GetSpecialEffectHeight: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + GetSpecialEffectPositionLoc: { returnType: "location", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectPositionWithZ: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + SetSpecialEffectPosition: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetSpecialEffectPositionLoc: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "loc", type: "location" } + ] + }, + SetSpecialEffectX: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "x", type: "real" } + ] + }, + SetSpecialEffectY: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "y", type: "real" } + ] + }, + SetSpecialEffectZ: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "z", type: "real" } + ] + }, + SetSpecialEffectHeight: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "height", type: "real" } + ] + }, + GetSpecialEffectScreenX: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + GetSpecialEffectScreenY: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + GetSpecialEffectScale: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectScale: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "scale", type: "real" } + ] + }, + GetSpecialEffectTimeScale: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectTimeScale: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "timescale", type: "real" } + ] + }, + SetSpecialEffectPlayerColour: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "color", type: "playercolor" } + ] + }, + GetSpecialEffectColour: { returnType: "integer", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectColour: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "colour", type: "integer" } + ] + }, + SetSpecialEffectAlpha: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "alpha", type: "integer" } + ] + }, + SetSpecialEffectVertexColour: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetSpecialEffectMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetSpecialEffectMatrix: { returnType: "nothing", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + GetSpecialEffectYaw: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectYaw: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "yaw", type: "real" } + ] + }, + GetSpecialEffectFacing: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectFacing: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "facing", type: "real" } + ] + }, + GetSpecialEffectPitch: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectPitch: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "pitch", type: "real" } + ] + }, + GetSpecialEffectRoll: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectRoll: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "roll", type: "real" } + ] + }, + SetSpecialEffectOrientation: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + SetSpecialEffectMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetSpecialEffectTexture: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetSpecialEffectReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetSpecialEffectModel: { returnType: "string", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectModel: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "modelName", type: "string" } + ] + }, + SetSpecialEffectModelEx: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "modelName", type: "string" }, + { name: "playerColour", type: "integer" } + ] + }, + GetSpecialEffectModelObjectX: { + returnType: "real", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichObject", type: "string" } + ] + }, + GetSpecialEffectModelObjectY: { + returnType: "real", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichObject", type: "string" } + ] + }, + GetSpecialEffectModelObjectZ: { + returnType: "real", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichObject", type: "string" } + ] + }, + GetSpecialEffectModelObjectPositionLoc: { + returnType: "location", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichObject", type: "string" } + ] + }, + GetSpecialEffectCurrentAnimationId: { returnType: "integer", args: [{ name: "whichEffect", type: "effect" }] }, + GetSpecialEffectCurrentAnimationName: { returnType: "string", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetSpecialEffectAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetSpecialEffectAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "animIndex", type: "integer" } + ] + }, + SetSpecialEffectAnimation: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "animationName", type: "string" } + ] + }, + QueueSpecialEffectAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueSpecialEffectAnimation: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "animationName", type: "string" } + ] + }, + GetSpecialEffectAnimationOffsetPercent: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + SetSpecialEffectAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "percent", type: "real" } + ] + }, + GetTriggerSpecialEffect: { returnType: "effect", args: [] }, + GetFilterSpecialEffect: { returnType: "effect", args: [] }, + GetEnumSpecialEffect: { returnType: "effect", args: [] }, + EnumSpecialEffectsInRange: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + GetTrackableSprite: { returnType: "sprite", args: [{ name: "whichTrackable", type: "trackable" }] }, + IsTrackableVisible: { returnType: "boolean", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableVisibility: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "visibility", type: "boolean" } + ] + }, + GetTrackableX: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + GetTrackableY: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + GetTrackableZ: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + GetTrackableHeight: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + GetTrackablePositionLoc: { returnType: "location", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackablePositionWithZ: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + SetTrackablePosition: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetTrackablePositionLoc: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "loc", type: "location" } + ] + }, + SetTrackableX: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "x", type: "real" } + ] + }, + SetTrackableY: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "y", type: "real" } + ] + }, + SetTrackableZ: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "z", type: "real" } + ] + }, + SetTrackableHeight: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "height", type: "real" } + ] + }, + GetTrackableScreenX: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + GetTrackableScreenY: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + GetTrackableScale: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableScale: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "scale", type: "real" } + ] + }, + GetTrackableTimeScale: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableTimeScale: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "timescale", type: "real" } + ] + }, + SetTrackablePlayerColour: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "color", type: "playercolor" } + ] + }, + GetTrackableColour: { returnType: "integer", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableColour: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "colour", type: "integer" } + ] + }, + SetTrackableAlpha: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "alpha", type: "integer" } + ] + }, + SetTrackableVertexColour: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetTrackableEffectMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetTrackableMatrix: { returnType: "nothing", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + GetTrackableYaw: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableYaw: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "yaw", type: "real" } + ] + }, + GetTrackableFacing: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableFacing: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "facing", type: "real" } + ] + }, + GetTrackablePitch: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackablePitch: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "pitch", type: "real" } + ] + }, + GetTrackableRoll: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableRoll: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "roll", type: "real" } + ] + }, + SetTrackableOrientation: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + SetTrackableMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetTrackableTexture: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetTrackableReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetTrackableModel: { returnType: "string", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableModel: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "modelName", type: "string" } + ] + }, + SetTrackableModelEx: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "modelName", type: "string" }, + { name: "playerColour", type: "integer" } + ] + }, + GetTrackableModelObjectX: { + returnType: "real", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "whichObject", type: "string" } + ] + }, + GetTrackableModelObjectY: { + returnType: "real", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "whichObject", type: "string" } + ] + }, + GetTrackableModelObjectZ: { + returnType: "real", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "whichObject", type: "string" } + ] + }, + GetTrackableModelObjectPositionLoc: { + returnType: "location", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "whichObject", type: "string" } + ] + }, + GetTrackableCurrentAnimationId: { returnType: "integer", args: [{ name: "whichTrackable", type: "trackable" }] }, + GetTrackableCurrentAnimationName: { returnType: "string", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetTrackableAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetTrackableAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "animIndex", type: "integer" } + ] + }, + SetTrackableAnimation: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "animationName", type: "string" } + ] + }, + QueueTrackableAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueTrackableAnimation: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "animationName", type: "string" } + ] + }, + GetTrackableAnimationOffsetPercent: { returnType: "real", args: [{ name: "whichTrackable", type: "trackable" }] }, + SetTrackableAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichTrackable", type: "trackable" }, + { name: "percent", type: "real" } + ] + }, + GetTriggerTrackable: { returnType: "trackable", args: [] }, + GetFilterTrackable: { returnType: "trackable", args: [] }, + GetEnumTrackable: { returnType: "trackable", args: [] }, + EnumTrackablesInRange: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + GetWidgetSprite: { returnType: "sprite", args: [{ name: "whichWidget", type: "widget" }] }, + GetWidgetTypeId: { returnType: "integer", args: [{ name: "whichWidget", type: "widget" }] }, + IsWidgetTipEnabled: { returnType: "boolean", args: [] }, + SetWidgetTipEnabled: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + IsWidgetVisible: { returnType: "boolean", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetVisible: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "visible", type: "boolean" } + ] + }, + IsWidgetInvulnerable: { returnType: "boolean", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetInvulnerable: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "invulnerable", type: "boolean" } + ] + }, + IsWidgetTargetAllowed: { + returnType: "boolean", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "target", type: "widget" }, + { name: "whichFlags", type: "targetflag" } + ] + }, + GetWidgetPositionLoc: { returnType: "location", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetPositionLoc: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "whichLocation", type: "location" } + ] + }, + SetWidgetPosition: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetWidgetX: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "x", type: "real" } + ] + }, + SetWidgetY: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "y", type: "real" } + ] + }, + GetWidgetScreenX: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + GetWidgetScreenY: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + GetWidgetVertexColour: { returnType: "integer", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetVertexColour: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + GetWidgetTimeScale: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetTimeScale: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "timeScale", type: "real" } + ] + }, + GetWidgetScale: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetScale: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "scale", type: "real" } + ] + }, + GetWidgetFacing: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetFacing: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "facing", type: "real" }, + { name: "isInstant", type: "boolean" } + ] + }, + SetWidgetMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetWidgetMatrix: { returnType: "nothing", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + SetWidgetOrientation: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + GetWidgetYaw: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetYaw: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "yaw", type: "real" } + ] + }, + GetWidgetPitch: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetPitch: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "pitch", type: "real" } + ] + }, + GetWidgetRoll: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetRoll: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "roll", type: "real" } + ] + }, + GetWidgetModel: { returnType: "string", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetModel: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "modelFile", type: "string" } + ] + }, + SetWidgetModelEx: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "modelFile", type: "string" }, + { name: "playerId", type: "integer" } + ] + }, + SetWidgetMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetWidgetTexture: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetWidgetReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetWidgetModelObjectX: { + returnType: "real", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "whichObject", type: "string" } + ] + }, + GetWidgetModelObjectY: { + returnType: "real", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "whichObject", type: "string" } + ] + }, + GetWidgetModelObjectZ: { + returnType: "real", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "whichObject", type: "string" } + ] + }, + GetWidgetModelObjectPositionLoc: { + returnType: "location", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "whichObject", type: "string" } + ] + }, + GetWidgetCurrentAnimationId: { returnType: "integer", args: [{ name: "whichWidget", type: "widget" }] }, + GetWidgetCurrentAnimationName: { returnType: "string", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetWidgetAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetWidgetAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "animIndex", type: "integer" } + ] + }, + SetWidgetAnimation: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "animationName", type: "string" } + ] + }, + QueueWidgetAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueWidgetAnimation: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "animationName", type: "string" } + ] + }, + GetWidgetAnimationOffsetPercent: { returnType: "real", args: [{ name: "whichWidget", type: "widget" }] }, + SetWidgetAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichWidget", type: "widget" }, + { name: "percent", type: "real" } + ] + }, + TriggerRegisterWidgetEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichWidget", type: "widget" }, + { name: "whichWidgetEvent", type: "widgetevent" } + ] + }, + GetDestructableVariation: { returnType: "integer", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableVariation: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "variation", type: "integer" } + ] + }, + SetDestructableVariationEx: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "variation", type: "integer" }, + { name: "ignoreStateCheck", type: "boolean" } + ] + }, + IsDestructableBlighted: { returnType: "boolean", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableBlighted: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "flag", type: "boolean" } + ] + }, + GetDestructableSprite: { returnType: "sprite", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructablePositionWithZ: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + SetDestructablePosition: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + GetDestructablePositionLoc: { returnType: "location", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructablePositionLoc: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "whichLocation", type: "location" } + ] + }, + SetDestructableX: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "x", type: "real" } + ] + }, + SetDestructableY: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "y", type: "real" } + ] + }, + SetDestructableZ: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "z", type: "real" } + ] + }, + GetDestructableScreenX: { returnType: "real", args: [{ name: "whichDestructable", type: "destructable" }] }, + GetDestructableScreenY: { returnType: "real", args: [{ name: "whichDestructable", type: "destructable" }] }, + GetDestructableVertexColour: { returnType: "integer", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableVertexColour: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + GetDestructableTimeScale: { returnType: "real", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableTimeScale: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "timeScale", type: "real" } + ] + }, + GetDestructableScale: { returnType: "real", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableScale: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "scale", type: "real" } + ] + }, + GetDestructableFacing: { returnType: "real", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableFacing: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "facing", type: "real" }, + { name: "isInstant", type: "boolean" } + ] + }, + SetDestructableMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetDestructableMatrix: { returnType: "nothing", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + SetDestructableOrientation: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + GetDestructableYaw: { returnType: "real", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableYaw: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "yaw", type: "real" } + ] + }, + GetDestructablePitch: { returnType: "real", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructablePitch: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "pitch", type: "real" } + ] + }, + GetDestructableRoll: { returnType: "real", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableRoll: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "roll", type: "real" } + ] + }, + GetDestructableModel: { returnType: "string", args: [{ name: "whichDestructable", type: "destructable" }] }, + SetDestructableModel: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "modelFile", type: "string" } + ] + }, + SetDestructableModelEx: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "modelFile", type: "string" }, + { name: "playerId", type: "integer" } + ] + }, + SetDestructableMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetDestructableTexture: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetDestructableReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetDestructableModelObjectX: { + returnType: "real", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "whichObject", type: "string" } + ] + }, + GetDestructableModelObjectY: { + returnType: "real", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "whichObject", type: "string" } + ] + }, + GetDestructableModelObjectZ: { + returnType: "real", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "whichObject", type: "string" } + ] + }, + GetDestructableModelObjectPositionLoc: { + returnType: "location", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "whichObject", type: "string" } + ] + }, + GetDestructableCurrentAnimationId: { + returnType: "integer", + args: [{ name: "whichDestructable", type: "destructable" }] + }, + GetDestructableCurrentAnimationName: { + returnType: "string", + args: [{ name: "whichDestructable", type: "destructable" }] + }, + SetDestructableAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetDestructableAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetDestructableAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueDestructableAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "animIndex", type: "integer" } + ] + }, + GetDestructableAnimationOffsetPercent: { + returnType: "real", + args: [{ name: "whichDestructable", type: "destructable" }] + }, + SetDestructableAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichDestructable", type: "destructable" }, + { name: "percent", type: "real" } + ] + }, + EnumDestructablesInRange: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + GetBaseItemIntegerFieldById: { + returnType: "integer", + args: [ + { name: "itemId", type: "integer" }, + { name: "whichField", type: "itemintegerfield" } + ] + }, + SetBaseItemIntegerFieldById: { + returnType: "boolean", + args: [ + { name: "itemId", type: "integer" }, + { name: "whichField", type: "itemintegerfield" }, + { name: "value", type: "integer" } + ] + }, + GetBaseItemBooleanFieldById: { + returnType: "boolean", + args: [ + { name: "itemId", type: "integer" }, + { name: "whichField", type: "itembooleanfield" } + ] + }, + SetBaseItemBooleanFieldById: { + returnType: "boolean", + args: [ + { name: "itemId", type: "integer" }, + { name: "whichField", type: "itembooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + GetBaseItemRealFieldById: { + returnType: "real", + args: [ + { name: "itemId", type: "integer" }, + { name: "whichField", type: "itemrealfield" } + ] + }, + SetBaseItemRealFieldById: { + returnType: "boolean", + args: [ + { name: "itemId", type: "integer" }, + { name: "whichField", type: "itemrealfield" }, + { name: "value", type: "real" } + ] + }, + GetBaseItemStringFieldById: { + returnType: "string", + args: [ + { name: "itemId", type: "integer" }, + { name: "whichField", type: "itemstringfield" } + ] + }, + SetBaseItemStringFieldById: { + returnType: "boolean", + args: [ + { name: "itemId", type: "integer" }, + { name: "whichField", type: "itemstringfield" }, + { name: "value", type: "string" } + ] + }, + GetItemIntegerField: { + returnType: "integer", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemintegerfield" } + ] + }, + SetItemIntegerField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemintegerfield" }, + { name: "value", type: "integer" } + ] + }, + GetItemBooleanField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itembooleanfield" } + ] + }, + SetItemBooleanField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itembooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + GetItemRealField: { + returnType: "real", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemrealfield" } + ] + }, + SetItemRealField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemrealfield" }, + { name: "value", type: "real" } + ] + }, + GetItemStringField: { + returnType: "string", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemstringfield" } + ] + }, + SetItemStringField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemstringfield" }, + { name: "value", type: "string" } + ] + }, + GetItemSprite: { returnType: "sprite", args: [{ name: "whichItem", type: "item" }] }, + GetItemScreenX: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + GetItemScreenY: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + GetItemLife: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemLife: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "life", type: "real" } + ] + }, + GetItemMaxLife: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemMaxLife: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "maxLife", type: "real" } + ] + }, + GetItemAbility: { + returnType: "ability", + args: [ + { name: "whichItem", type: "item" }, + { name: "abilityId", type: "integer" } + ] + }, + GetItemAbilityByIndex: { + returnType: "ability", + args: [ + { name: "whichItem", type: "item" }, + { name: "abilityIndex", type: "integer" } + ] + }, + GetItemCooldown: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemCooldown: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "cooldown", type: "real" } + ] + }, + StartItemCooldown: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichItem", type: "item" }, + { name: "cooldown", type: "real" } + ] + }, + GetItemRemainingCooldown: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemRemainingCooldown: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "cooldown", type: "real" } + ] + }, + GetItemVertexColour: { returnType: "integer", args: [{ name: "whichItem", type: "item" }] }, + SetItemVertexColour: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + GetItemTimeScale: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemTimeScale: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "timeScale", type: "real" } + ] + }, + GetItemScale: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemScale: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "scale", type: "real" } + ] + }, + GetItemFacing: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemFacing: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "facing", type: "real" }, + { name: "isInstant", type: "boolean" } + ] + }, + SetItemMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetItemMatrix: { returnType: "nothing", args: [{ name: "whichItem", type: "item" }] }, + SetItemOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + SetItemOrientation: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + GetItemYaw: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemYaw: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "yaw", type: "real" } + ] + }, + GetItemPitch: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemPitch: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "pitch", type: "real" } + ] + }, + GetItemRoll: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemRoll: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "roll", type: "real" } + ] + }, + GetItemModel: { returnType: "string", args: [{ name: "whichItem", type: "item" }] }, + SetItemModel: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "modelFile", type: "string" } + ] + }, + SetItemModelEx: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "modelFile", type: "string" }, + { name: "playerColourId", type: "integer" } + ] + }, + SetItemMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetItemTexture: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetItemReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetItemModelObjectX: { + returnType: "real", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichObject", type: "string" } + ] + }, + GetItemModelObjectY: { + returnType: "real", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichObject", type: "string" } + ] + }, + GetItemModelObjectZ: { + returnType: "real", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichObject", type: "string" } + ] + }, + GetItemModelObjectPositionLoc: { + returnType: "location", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichObject", type: "string" } + ] + }, + GetItemCurrentAnimationId: { returnType: "integer", args: [{ name: "whichItem", type: "item" }] }, + GetItemCurrentAnimationName: { returnType: "string", args: [{ name: "whichItem", type: "item" }] }, + SetItemAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetItemAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetItemAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "animIndex", type: "integer" } + ] + }, + SetItemAnimation: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "animationName", type: "string" } + ] + }, + QueueItemAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueItemAnimation: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "animationName", type: "string" } + ] + }, + GetItemAnimationOffsetPercent: { returnType: "real", args: [{ name: "whichItem", type: "item" }] }, + SetItemAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "percent", type: "real" } + ] + }, + EnumItemsInRange: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + GetUnitBaseIntegerFieldById: { + returnType: "integer", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitintegerfield" } + ] + }, + SetUnitBaseIntegerFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitintegerfield" }, + { name: "value", type: "integer" } + ] + }, + GetUnitBaseBooleanFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitbooleanfield" } + ] + }, + SetUnitBaseBooleanFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitbooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + GetUnitBaseRealFieldById: { + returnType: "real", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitrealfield" } + ] + }, + SetUnitBaseRealFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitrealfield" }, + { name: "value", type: "real" } + ] + }, + GetUnitBaseStringFieldById: { + returnType: "string", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitstringfield" } + ] + }, + SetUnitBaseStringFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitstringfield" }, + { name: "value", type: "string" } + ] + }, + GetUnitBaseWeaponIntegerFieldById: { + returnType: "integer", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitweaponintegerfield" }, + { name: "index", type: "integer" } + ] + }, + SetUnitBaseWeaponIntegerFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitweaponintegerfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + GetUnitBaseWeaponBooleanFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitweaponbooleanfield" }, + { name: "index", type: "integer" } + ] + }, + SetUnitBaseWeaponBooleanFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitweaponbooleanfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + GetUnitBaseWeaponRealFieldById: { + returnType: "real", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitweaponrealfield" }, + { name: "index", type: "integer" } + ] + }, + SetUnitBaseWeaponRealFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitweaponrealfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "real" } + ] + }, + GetUnitBaseWeaponStringFieldById: { + returnType: "string", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitweaponstringfield" }, + { name: "index", type: "integer" } + ] + }, + SetUnitBaseWeaponStringFieldById: { + returnType: "boolean", + args: [ + { name: "unitTypeId", type: "integer" }, + { name: "whichField", type: "unitweaponstringfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "string" } + ] + }, + GetUnitIntegerField: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitintegerfield" } + ] + }, + SetUnitIntegerField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitintegerfield" }, + { name: "value", type: "integer" } + ] + }, + GetUnitBooleanField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitbooleanfield" } + ] + }, + SetUnitBooleanField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitbooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + GetUnitRealField: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitrealfield" } + ] + }, + SetUnitRealField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitrealfield" }, + { name: "value", type: "real" } + ] + }, + GetUnitStringField: { + returnType: "string", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitstringfield" } + ] + }, + SetUnitStringField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitstringfield" }, + { name: "value", type: "string" } + ] + }, + GetUnitWeaponIntegerField: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponintegerfield" }, + { name: "index", type: "integer" } + ] + }, + SetUnitWeaponIntegerField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponintegerfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + GetUnitWeaponBooleanField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponbooleanfield" }, + { name: "index", type: "integer" } + ] + }, + SetUnitWeaponBooleanField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponbooleanfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + GetUnitWeaponRealField: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponrealfield" }, + { name: "index", type: "integer" } + ] + }, + SetUnitWeaponRealField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponrealfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "real" } + ] + }, + GetUnitWeaponStringField: { + returnType: "string", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponstringfield" }, + { name: "index", type: "integer" } + ] + }, + SetUnitWeaponStringField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponstringfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "string" } + ] + }, + GetUnitSprite: { returnType: "sprite", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitScreenX: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitScreenY: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitTypeId: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "newId", type: "integer" } + ] + }, + GetUnitUnderCursor: { returnType: "unit", args: [] }, + GetUnitSelectedCountByPlayer: { returnType: "integer", args: [{ name: "whichPlayer", type: "player" }] }, + GetUnitSelected: { returnType: "unit", args: [{ name: "whichPlayer", type: "player" }] }, + GetUnitInSelectionByIndex: { + returnType: "unit", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "index", type: "integer" } + ] + }, + GetFirstUnitInSelection: { returnType: "unit", args: [{ name: "whichPlayer", type: "player" }] }, + GetLastUnitInSelection: { returnType: "unit", args: [{ name: "whichPlayer", type: "player" }] }, + IsUnitAlive: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitDead: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitMoving: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitStunned: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitInvulnerable: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitHero: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitTower: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitShop: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitInventoryEnabled: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitEnableInventory: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "enable", type: "boolean" }, + { name: "ignoreErrorMessages", type: "boolean" } + ] + }, + IsUnitMovementEnabled: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitEnableMovement: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "enable", type: "boolean" }, + { name: "fullDisable", type: "boolean" } + ] + }, + IsUnitAttackEnabled: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitEnableAttack: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "enable", type: "boolean" }, + { name: "extraFlag", type: "boolean" } + ] + }, + IsUnitStateNormal: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "additionalCheck", type: "boolean" } + ] + }, + RedrawUnit: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + UpdateUnitInfoBar: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + UnitUnapplyUpgrades: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + UnitApplyUpgrades: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitAbility: { + returnType: "ability", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "aid", type: "integer" } + ] + }, + GetUnitAbilityByIndex: { + returnType: "ability", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "index", type: "integer" } + ] + }, + UnitAddAbilityEx: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" }, + { name: "checkForDuplicates", type: "boolean" } + ] + }, + UnitRemoveAbilityEx: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" }, + { name: "removeDuplicates", type: "boolean" } + ] + }, + IsUnitAbilityVisible: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" } + ] + }, + ShowUnitAbility: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" }, + { name: "show", type: "boolean" } + ] + }, + ShowUnitAbilityEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" }, + { name: "show", type: "boolean" }, + { name: "checkDuplicates", type: "boolean" } + ] + }, + DisableUnitAbility: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" }, + { name: "hide", type: "boolean" }, + { name: "disable", type: "boolean" } + ] + }, + DisableUnitAbilityEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" }, + { name: "hide", type: "boolean" }, + { name: "disable", type: "boolean" }, + { name: "checkDuplicates", type: "boolean" } + ] + }, + EnableUnitAbility: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" }, + { name: "show", type: "boolean" }, + { name: "enable", type: "boolean" } + ] + }, + EnableUnitAbilityEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilityId", type: "integer" }, + { name: "show", type: "boolean" }, + { name: "enable", type: "boolean" }, + { name: "checkDuplicates", type: "boolean" } + ] + }, + UnitAddBuff: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichBuff", type: "buff" } + ] + }, + UnitAddBuffEx: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichBuff", type: "buff" }, + { name: "checkForDuplicates", type: "boolean" } + ] + }, + UnitAddBuffById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "buffId", type: "integer" } + ] + }, + UnitAddBuffByIdEx: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "buffId", type: "integer" }, + { name: "checkForDuplicates", type: "boolean" } + ] + }, + GetUnitBuff: { + returnType: "buff", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "buffId", type: "integer" } + ] + }, + GetUnitBuffByIndex: { + returnType: "buff", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "index", type: "integer" } + ] + }, + GetUnitBuffLevel: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "buffId", type: "integer" } + ] + }, + UnitCancelTimedLife: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitRemainingTimedLife: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitRemainingTimedLife: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "duration", type: "real" } + ] + }, + IsUnitSelectable: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitSelectable: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "selectable", type: "boolean" } + ] + }, + IsUnitTargetable: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitTargetable: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "targetable", type: "boolean" } + ] + }, + IsUnitTruesightImmune: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitTruesightImmuneState: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "state", type: "boolean" } + ] + }, + SetUnitVisibleByPlayer: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" }, + { name: "flag", type: "boolean" } + ] + }, + SetUnitDetectableByPlayer: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichPlayer", type: "player" }, + { name: "flag", type: "boolean" } + ] + }, + GetUnitZ: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitDamageReduction: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitMagicResistByType: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "resistType", type: "integer" } + ] + }, + GetUnitEluneMagicResist: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitRunicMagicResist: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitTotalMagicResist: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + IsUnitGatherer: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitCurrentResources: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitCurrentSight: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitCurrentSight: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "realValue", type: "real" } + ] + }, + GetUnitAttackRemainingCooldown: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitAttackRemainingCooldown: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "time", type: "real" } + ] + }, + GetUnitAttackRemainingDamagePoint: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitAttackRemainingDamagePoint: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "time", type: "real" } + ] + }, + GetUnitAttackRemainingBackswing: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitAttackRemainingBackswing: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "time", type: "real" } + ] + }, + UnitAttackTarget: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichTarget", type: "widget" }, + { name: "ignoreDistance", type: "boolean" }, + { name: "isInstant", type: "boolean" } + ] + }, + UnitAttackTargetPointZ: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" }, + { name: "ignoreDistance", type: "boolean" }, + { name: "isInstant", type: "boolean" } + ] + }, + UnitAttackTargetPoint: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "ignoreDistance", type: "boolean" }, + { name: "isInstant", type: "boolean" } + ] + }, + UnitAttackTargetPointLoc: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichLocation", type: "location" }, + { name: "ignoreDistance", type: "boolean" }, + { name: "isInstant", type: "boolean" } + ] + }, + UnitAttackCancel: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitAttackRestart: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitAttackFinish: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitAttackTypeByIndex: { + returnType: "attacktype", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitAttackTypeByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "whichAttackType", type: "attacktype" } + ] + }, + GetUnitWeaponTypeByIndex: { + returnType: "weapontype", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitWeaponTypeByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "whichWeaponType", type: "weapontype" } + ] + }, + GetUnitWeaponSoundByIndex: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitWeaponSoundByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "weaponSound", type: "integer" } + ] + }, + GetUnitBaseDamageByIndex: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitBaseDamageByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "damage", type: "integer" } + ] + }, + GetUnitBonusDamageByIndex: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitBonusDamageByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "bonusDamage", type: "integer" } + ] + }, + GetUnitDamageDicesSideByIndex: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitDamageDicesSideByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "dicesSides", type: "integer" } + ] + }, + GetUnitDamageDicesByIndex: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitDamageDicesByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "dices", type: "integer" } + ] + }, + GetUnitMinimumDamageByIndex: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + GetUnitMaximumDamageByIndex: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + GetUnitAttackRangeByIndex: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitAttackRangeByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "range", type: "real" } + ] + }, + GetUnitAttackSpeed: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitAttackSpeed: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackSpeed", type: "real" } + ] + }, + GetUnitAttackCooldownByIndex: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitAttackCooldownByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "attackCooldown", type: "real" } + ] + }, + GetUnitBackswingPointByIndex: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitBackswingPointByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "backswing", type: "real" } + ] + }, + GetUnitDamagePointByIndex: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetUnitDamagePointByIndex: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "attackIndex", type: "integer" }, + { name: "damagePoint", type: "real" } + ] + }, + GetUnitAttacksEnabledIndex: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitArmourType: { returnType: "defensetype", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitArmourType: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichArmour", type: "defensetype" } + ] + }, + GetUnitArmour: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitArmour: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "armour", type: "real" } + ] + }, + GetUnitTimeScale: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitBaseMoveSpeed: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitBaseMoveSpeed: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "baseMoveSpeed", type: "real" } + ] + }, + GetUnitTotalMoveSpeed: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitBonusMoveSpeedPercent: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitBonusMoveSpeedPercent: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "bonusMoveSpeedPercent", type: "real" } + ] + }, + GetUnitVertexColour: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitCurrentLife: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitCurrentLife: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "life", type: "real" } + ] + }, + GetUnitMaxLife: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitMaxLife: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "maxLife", type: "real" } + ] + }, + GetUnitLifeRegen: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitLifeRegen: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "lifeRegen", type: "real" } + ] + }, + GetUnitCurrentMana: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitCurrentMana: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "mana", type: "real" } + ] + }, + GetUnitMaxMana: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitMaxMana: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "maxMana", type: "real" } + ] + }, + GetUnitManaRegen: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitManaRegen: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "manaRegen", type: "real" } + ] + }, + GetUnitPrimaryStat: { returnType: "heroattribute", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitPrimaryStat: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichHeroAttribute", type: "heroattribute" } + ] + }, + GetUnitModel: { returnType: "string", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitModel: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "modelName", type: "string" } + ] + }, + SetUnitModelEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "modelName", type: "string" }, + { name: "playercolourId", type: "integer" } + ] + }, + SetUnitMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetUnitTexture: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetUnitReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetUnitCollisionType: { returnType: "collisiontype", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitCollisionType: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "collisionType", type: "collisiontype" } + ] + }, + GetUnitPathingAIType: { returnType: "pathingaitype", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitPathingAIType: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "pathingAIType", type: "pathingaitype" } + ] + }, + GetUnitPathingType: { returnType: "pathingtype", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitPathingType: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "pathingType", type: "pathingtype" } + ] + }, + GetUnitItemSlots: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitItemSlots: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "itemSlots", type: "integer" } + ] + }, + SetUnitFacingEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "facing", type: "real" }, + { name: "isInstant", type: "boolean" } + ] + }, + SetUnitFacingInstant: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "facing", type: "real" } + ] + }, + GetUnitMinimapX: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitMinimapY: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitRallyPointX: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitRallyPointY: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + GetHeroMaxLevelExperienceNeeded: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetHeroExperienceNeeded: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "forLevel", type: "integer" } + ] + }, + UnitApplySilence: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "state", type: "boolean" } + ] + }, + UnitDisableAbilities: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "state", type: "boolean" } + ] + }, + PauseUnitEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "pause", type: "boolean" } + ] + }, + SetUnitStunned: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "state", type: "boolean" } + ] + }, + GetUnitStunCounter: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitStunCounter: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "stunCounter", type: "integer" } + ] + }, + SetUnitKiller: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "killer", type: "unit" } + ] + }, + KillUnitEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "killer", type: "unit" } + ] + }, + GetUnitTarget: { returnType: "widget", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitTargetUnit: { returnType: "unit", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitTargetItem: { returnType: "item", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitTargetDestructable: { returnType: "destructable", args: [{ name: "whichUnit", type: "unit" }] }, + MorphUnitToTypeIdEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "uid", type: "integer" }, + { name: "unitFlags", type: "integer" }, + { name: "updateHealthState", type: "boolean" }, + { name: "updateManaState", type: "boolean" }, + { name: "healthStateId", type: "integer" }, + { name: "manaStateId", type: "integer" }, + { name: "updateScale", type: "boolean" }, + { name: "replaceAbilities", type: "boolean" }, + { name: "whichAbility", type: "ability" }, + { name: "resetBuildingAnimation", type: "boolean" } + ] + }, + MorphUnitToTypeId: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "uid", type: "integer" } + ] + }, + GetUnitModelObjectX: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichObject", type: "string" } + ] + }, + GetUnitModelObjectY: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichObject", type: "string" } + ] + }, + GetUnitModelObjectZ: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichObject", type: "string" } + ] + }, + GetUnitModelObjectPositionLoc: { + returnType: "location", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichObject", type: "string" } + ] + }, + GetUnitCurrentAnimationId: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitCurrentAnimationName: { returnType: "string", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitAnimationOffsetPercent: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "percent", type: "real" } + ] + }, + IsUnitAutoOrientationEnabled: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + UnitEnableAutoOrientation: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "enable", type: "boolean" } + ] + }, + GetUnitYaw: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitYaw: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "yaw", type: "real" } + ] + }, + GetUnitPitch: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitPitch: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "pitch", type: "real" } + ] + }, + GetUnitRoll: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitRoll: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "roll", type: "real" } + ] + }, + SetUnitMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetUnitMatrix: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + SetUnitOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + SetUnitOrientation: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + CreateBuilding: { + returnType: "unit", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "unitTypeId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "facing", type: "real" } + ] + }, + CreateBuildingEx: { + returnType: "unit", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "unitTypeId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "facing", type: "real" }, + { name: "isAutoBuild", type: "boolean" }, + { name: "workersCanAssist", type: "boolean" } + ] + }, + UnitGetConstructionProgress: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + UnitGetConstructionRemainingTime: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + UnitSetConstructionRemainingTime: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "time", type: "real" } + ] + }, + UnitGetUpgradeProgress: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + UnitGetUpgradeRemainingTime: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + UnitSetUpgradeRemainingTime: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "time", type: "real" } + ] + }, + CreateIllusion: { + returnType: "unit", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "unitTypeId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "facing", type: "real" } + ] + }, + CreateIllusionAtLoc: { + returnType: "unit", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "unitTypeId", type: "integer" }, + { name: "whichLocation", type: "location" }, + { name: "facing", type: "real" } + ] + }, + CreateIllusionFromUnit: { returnType: "unit", args: [{ name: "whichUnit", type: "unit" }] }, + CreateIllusionFromUnitEx: { + returnType: "unit", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "copyPassives", type: "boolean" } + ] + }, + GetIllusionDamageDealt: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetIllusionDamageDealt: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "multiplier", type: "real" } + ] + }, + GetIllusionDamageReceived: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + SetIllusionDamageReceived: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "multiplier", type: "real" } + ] + }, + QueueImmediateOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" } + ] + }, + QueuePointOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + QueueTargetOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "targetWidget", type: "widget" } + ] + }, + QueueInstantPointOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "instantTargetWidget", type: "widget" } + ] + }, + QueueInstantTargetOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "targetWidget", type: "widget" }, + { name: "instantTargetWidget", type: "widget" } + ] + }, + QueueBuildOrderById: { + returnType: "boolean", + args: [ + { name: "whichPeon", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + QueueNeutralImmediateOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" } + ] + }, + QueueNeutralPointOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + QueueNeutralTargetOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "target", type: "widget" } + ] + }, + GetUnitOrderCount: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + GetUnitOrderIdByIndex: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "index", type: "integer" } + ] + }, + UnitClearOrders: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "onlyQueued", type: "boolean" } + ] + }, + UnitForceStopOrder: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "clearQueue", type: "boolean" } + ] + }, + CreateProjectile: { returnType: "projectile", args: [{ name: "projectileTypeId", type: "integer" }] }, + CreateProjectileEx: { + returnType: "projectile", + args: [ + { name: "owner", type: "unit" }, + { name: "projectileTypeId", type: "integer" }, + { name: "attackIndex", type: "integer" } + ] + }, + SetProjectileUnitData: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "owner", type: "unit" }, + { name: "attackIndex", type: "integer" } + ] + }, + KillProjectile: { returnType: "nothing", args: [{ name: "whichProjectile", type: "projectile" }] }, + RemoveProjectile: { returnType: "nothing", args: [{ name: "whichProjectile", type: "projectile" }] }, + LaunchProjectile: { returnType: "nothing", args: [{ name: "whichProjectile", type: "projectile" }] }, + LaunchProjectileTarget: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichWidget", type: "widget" } + ] + }, + LaunchProjectileAt: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + GetProjectileSprite: { returnType: "sprite", args: [{ name: "whichProjectile", type: "projectile" }] }, + IsProjectileType: { + returnType: "boolean", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichType", type: "projectiletype" } + ] + }, + IsProjectileAlive: { returnType: "boolean", args: [{ name: "whichProjectile", type: "projectile" }] }, + IsProjectileVisible: { returnType: "boolean", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileVisible: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "visibility", type: "boolean" } + ] + }, + GetProjectileX: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileX: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "x", type: "real" } + ] + }, + GetProjectileY: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileY: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "y", type: "real" } + ] + }, + GetProjectileZ: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileZ: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "z", type: "real" } + ] + }, + GetProjectileScreenX: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + GetProjectileScreenY: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + GetProjectileHeight: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileHeight: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "height", type: "real" } + ] + }, + GetProjectilePositionLoc: { returnType: "location", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectilePositionWithZ: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + SetProjectilePosition: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetProjectilePositionLoc: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "loc", type: "location" } + ] + }, + GetProjectileScale: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileScale: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "scale", type: "real" } + ] + }, + GetProjectileTimeScale: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileTimeScale: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "timescale", type: "real" } + ] + }, + SetProjectilePlayerColour: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "color", type: "playercolor" } + ] + }, + GetProjectileColour: { returnType: "integer", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileColour: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "colour", type: "integer" } + ] + }, + SetProjectileAlpha: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "alpha", type: "integer" } + ] + }, + SetProjectileVertexColour: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetProjectileMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + ResetProjectileMatrix: { returnType: "nothing", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileOrientationEx: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + GetProjectileYaw: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileYaw: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "yaw", type: "real" } + ] + }, + GetProjectileFacing: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileFacing: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "facing", type: "real" } + ] + }, + GetProjectilePitch: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectilePitch: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "pitch", type: "real" } + ] + }, + GetProjectileRoll: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileRoll: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "roll", type: "real" } + ] + }, + SetProjectileOrientation: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + SetProjectileMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetProjectileTexture: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetProjectileReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetProjectileModel: { returnType: "string", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileModel: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "modelName", type: "string" } + ] + }, + SetProjectileModelEx: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "modelName", type: "string" }, + { name: "playerColour", type: "integer" } + ] + }, + GetProjectileModelObjectX: { + returnType: "real", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichObject", type: "string" } + ] + }, + GetProjectileModelObjectY: { + returnType: "real", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichObject", type: "string" } + ] + }, + GetProjectileModelObjectZ: { + returnType: "real", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichObject", type: "string" } + ] + }, + GetProjectileModelObjectPositionLoc: { + returnType: "location", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichObject", type: "string" } + ] + }, + GetProjectileCurrentAnimationId: { returnType: "integer", args: [{ name: "whichProjectile", type: "projectile" }] }, + GetProjectileCurrentAnimationName: { + returnType: "string", + args: [{ name: "whichProjectile", type: "projectile" }] + }, + SetProjectileAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetProjectileAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetProjectileAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "animIndex", type: "integer" } + ] + }, + SetProjectileAnimation: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "animationName", type: "string" } + ] + }, + QueueProjectileAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueProjectileAnimation: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "animationName", type: "string" } + ] + }, + GetProjectileAnimationOffsetPercent: { + returnType: "real", + args: [{ name: "whichProjectile", type: "projectile" }] + }, + SetProjectileAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "percent", type: "real" } + ] + }, + GetProjectileSource: { returnType: "unit", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileSource: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichUnit", type: "unit" } + ] + }, + GetProjectileTargetX: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileTargetX: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "x", type: "real" } + ] + }, + GetProjectileTargetY: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileTargetY: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "y", type: "real" } + ] + }, + GetProjectileTargetZ: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileTargetZ: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "z", type: "real" } + ] + }, + GetProjectileTargetPositionLoc: { returnType: "location", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileTargetPositionLoc: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "loc", type: "location" } + ] + }, + SetProjectileTargetPosition: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetProjectileTargetPositionWithZ: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + GetProjectileTarget: { returnType: "widget", args: [{ name: "whichProjectile", type: "projectile" }] }, + GetProjectileTargetUnit: { returnType: "unit", args: [{ name: "whichProjectile", type: "projectile" }] }, + GetProjectileTargetItem: { returnType: "item", args: [{ name: "whichProjectile", type: "projectile" }] }, + GetProjectileTargetDestructable: { + returnType: "destructable", + args: [{ name: "whichProjectile", type: "projectile" }] + }, + SetProjectileTarget: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichWidget", type: "widget" } + ] + }, + GetProjectileAttackType: { returnType: "attacktype", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileAttackType: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichAttackType", type: "attacktype" } + ] + }, + GetProjectileDamage: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileDamage: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "damage", type: "real" } + ] + }, + GetProjectileAreaOfEffectFullDamage: { + returnType: "real", + args: [{ name: "whichProjectile", type: "projectile" }] + }, + SetProjectileAreaOfEffectFullDamage: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "area", type: "real" } + ] + }, + GetProjectileAreaOfEffectMediumDamage: { + returnType: "real", + args: [{ name: "whichProjectile", type: "projectile" }] + }, + SetProjectileAreaOfEffectMediumDamage: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "area", type: "real" } + ] + }, + GetProjectileAreaOfEffectSmallDamage: { + returnType: "real", + args: [{ name: "whichProjectile", type: "projectile" }] + }, + SetProjectileAreaOfEffectSmallDamage: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "area", type: "real" } + ] + }, + GetProjectileAreaOfEffectMediumDamageFactor: { + returnType: "real", + args: [{ name: "whichProjectile", type: "projectile" }] + }, + SetProjectileAreaOfEffectMediumDamageFactor: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "factor", type: "real" } + ] + }, + GetProjectileAreaOfEffectSmallDamageFactor: { + returnType: "real", + args: [{ name: "whichProjectile", type: "projectile" }] + }, + SetProjectileAreaOfEffectSmallDamageFactor: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "factor", type: "real" } + ] + }, + GetProjectileSpeed: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileSpeed: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "speed", type: "real" } + ] + }, + GetProjectileArc: { returnType: "real", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileArc: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "arc", type: "real" } + ] + }, + GetProjectileWeaponType: { returnType: "weapontype", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileWeaponType: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichWeaponType", type: "weapontype" } + ] + }, + GetProjectileDamageType: { returnType: "damagetype", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileDamageType: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "whichDamageType", type: "damagetype" } + ] + }, + GetProjectileDamageFlags: { returnType: "integer", args: [{ name: "whichProjectile", type: "projectile" }] }, + SetProjectileDamageFlags: { + returnType: "nothing", + args: [ + { name: "whichProjectile", type: "projectile" }, + { name: "flags", type: "integer" } + ] + }, + GetTriggerProjectile: { returnType: "projectile", args: [] }, + GetFilterProjectile: { returnType: "projectile", args: [] }, + GetEnumProjectile: { returnType: "projectile", args: [] }, + GetTriggerProjectileSource: { returnType: "unit", args: [] }, + GetTriggerProjectileTarget: { returnType: "widget", args: [] }, + GetTriggerProjectileTargetUnit: { returnType: "unit", args: [] }, + GetTriggerProjectileTargetItem: { returnType: "item", args: [] }, + GetTriggerProjectileTargetDestructable: { returnType: "destructable", args: [] }, + EnumProjectilesInRange: { + returnType: "nothing", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "radius", type: "real" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + EnumProjectilesInRect: { + returnType: "nothing", + args: [ + { name: "whichRect", type: "rect" }, + { name: "filter", type: "boolexpr" }, + { name: "handlerFunc", type: "code" } + ] + }, + GetOriginFrame: { + returnType: "framehandle", + args: [ + { name: "whichType", type: "originframetype" }, + { name: "index", type: "integer" } + ] + }, + HideOriginFrames: { returnType: "nothing", args: [{ name: "flag", type: "boolean" }] }, + EditBlackBorders: { + returnType: "nothing", + args: [ + { name: "upperHeight", type: "real" }, + { name: "bottomHeight", type: "real" } + ] + }, + LoadTOCFile: { returnType: "boolean", args: [{ name: "TOCFile", type: "string" }] }, + CreateFrame: { + returnType: "framehandle", + args: [ + { name: "templateName", type: "string" }, + { name: "whichParent", type: "framehandle" }, + { name: "priority", type: "integer" }, + { name: "createContext", type: "integer" } + ] + }, + CreateSimpleFrame: { + returnType: "framehandle", + args: [ + { name: "templateName", type: "string" }, + { name: "whichParent", type: "framehandle" }, + { name: "createContext", type: "integer" } + ] + }, + CreateSimpleGlueFrame: { + returnType: "framehandle", + args: [ + { name: "whichSimpleParent", type: "framehandle" }, + { name: "whichSpriteFrame", type: "framehandle" } + ] + }, + CreateFrameByType: { + returnType: "framehandle", + args: [ + { name: "frameType", type: "string" }, + { name: "contextName", type: "string" }, + { name: "whichParent", type: "framehandle" }, + { name: "templateName", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + IsFrameRegion: { returnType: "boolean", args: [{ name: "whichFrame", type: "framehandle" }] }, + IsFrameSimple: { returnType: "boolean", args: [{ name: "whichFrame", type: "framehandle" }] }, + IsFrameComplex: { returnType: "boolean", args: [{ name: "whichFrame", type: "framehandle" }] }, + DestroyFrame: { returnType: "nothing", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameRelativePoint: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "point", type: "framepointtype" }, + { name: "relativeFrame", type: "framehandle" }, + { name: "relativePoint", type: "framepointtype" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + SetFrameAbsolutePoint: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "point", type: "framepointtype" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + ClearFrameAllPoints: { returnType: "nothing", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameAllPoints: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "relativeFrame", type: "framehandle" } + ] + }, + ShowFrame: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "isShow", type: "boolean" } + ] + }, + IsFrameVisible: { returnType: "boolean", args: [{ name: "whichFrame", type: "framehandle" }] }, + GetFrameByName: { + returnType: "framehandle", + args: [ + { name: "frameName", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + GetCFrameByName: { + returnType: "framehandle", + args: [ + { name: "frameName", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + GetCSimpleFontStringByName: { + returnType: "framehandle", + args: [ + { name: "frameName", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + GetCSimpleTextureByName: { + returnType: "framehandle", + args: [ + { name: "frameName", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + GetCSimpleFrameByName: { + returnType: "framehandle", + args: [ + { name: "frameName", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + GetFrameUnderCursor: { returnType: "framehandle", args: [] }, + GetFrameTypeName: { returnType: "string", args: [{ name: "whichFrame", type: "framehandle" }] }, + GetFrameName: { returnType: "string", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameName: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "contextName", type: "string" } + ] + }, + GetFrameContext: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameContext: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "createContext", type: "integer" } + ] + }, + SetFrameContextName: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "contextName", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + ClickFrameEx: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "whichMouseButton", type: "mousebuttontype" } + ] + }, + ClickFrame: { returnType: "nothing", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameText: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "text", type: "string" } + ] + }, + GetFrameText: { returnType: "string", args: [{ name: "whichFrame", type: "framehandle" }] }, + AddFrameText: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "text", type: "string" } + ] + }, + SetFrameTextSizeLimit: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textSize", type: "integer" } + ] + }, + GetFrameTextSizeLimit: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + GetFrameTextColourEx: { + returnType: "integer", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "stateId", type: "integer" } + ] + }, + SetFrameTextColourEx: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "stateId", type: "integer" }, + { name: "colour", type: "integer" } + ] + }, + GetFrameTextColour: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameTextColour: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "colour", type: "integer" } + ] + }, + SetFrameFocus: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "isFocus", type: "boolean" } + ] + }, + GetFrameModel: { returnType: "string", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameModel: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "model", type: "string" }, + { name: "cameraIndex", type: "integer" } + ] + }, + IsFrameEnabled: { returnType: "boolean", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameEnabled: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "enabled", type: "boolean" } + ] + }, + IsFrameDraggable: { returnType: "boolean", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameDraggable: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "enabled", type: "boolean" } + ] + }, + GetFrameTrackState: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameTrackState: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "trackState", type: "integer" } + ] + }, + GetFrameColourEx: { + returnType: "integer", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureId", type: "integer" } + ] + }, + SetFrameColourEx: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureId", type: "integer" }, + { name: "colour", type: "integer" } + ] + }, + GetFrameColour: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameColour: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "colour", type: "integer" } + ] + }, + GetFrameAlphaEx: { + returnType: "integer", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureId", type: "integer" } + ] + }, + SetFrameAlphaEx: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureId", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + GetFrameAlpha: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameAlpha: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "alpha", type: "integer" } + ] + }, + GetFrameTexture: { + returnType: "string", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureId", type: "integer" } + ] + }, + SetFrameBackdropTexture: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureId", type: "integer" }, + { name: "backgroundTextureFile", type: "string" }, + { name: "allowTransparency", type: "boolean" }, + { name: "blend", type: "boolean" }, + { name: "borderTextureFile", type: "string" }, + { name: "borderFlags", type: "integer" }, + { name: "isControlBackdrop", type: "boolean" } + ] + }, + SetFrameTextureEx: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureId", type: "integer" }, + { name: "backgroundTextureFile", type: "string" }, + { name: "blend", type: "boolean" }, + { name: "borderTextureFile", type: "string" }, + { name: "borderFlags", type: "integer" } + ] + }, + SetFrameTexture: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureFile", type: "string" }, + { name: "textureId", type: "integer" }, + { name: "blend", type: "boolean" } + ] + }, + SetFrameTooltip: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "tooltipFrame", type: "framehandle" } + ] + }, + SetFrameMouseCaged: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "enable", type: "boolean" } + ] + }, + GetFrameValue: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameValue: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "value", type: "real" } + ] + }, + SetFrameValueEx: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "value", type: "real" }, + { name: "isFireEvent", type: "boolean" } + ] + }, + SetFrameMinMaxValues: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "minVal", type: "real" }, + { name: "maxVal", type: "real" } + ] + }, + GetFrameStepSize: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameStepSize: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "stepSize", type: "real" } + ] + }, + GetFrameWidth: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameWidth: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "width", type: "real" } + ] + }, + GetFrameHeight: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameHeight: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "height", type: "real" } + ] + }, + SetFrameSize: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "width", type: "real" }, + { name: "height", type: "real" } + ] + }, + SetFrameScale: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "scale", type: "real" } + ] + }, + SetFrameVertexColourEx: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "alpha", type: "integer" }, + { name: "red", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "green", type: "integer" } + ] + }, + SetFrameVertexColour: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "colour", type: "integer" } + ] + }, + GetFramePriority: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFramePriority: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "priority", type: "integer" } + ] + }, + SetFrameParent: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "whichParent", type: "framehandle" } + ] + }, + GetFrameParent: { returnType: "framehandle", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameFont: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "fontName", type: "string" }, + { name: "size", type: "real" }, + { name: "flags", type: "integer" } + ] + }, + SetFrameTextAlignment: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "verticalAlign", type: "textaligntype" }, + { name: "horizontalAlign", type: "textaligntype" } + ] + }, + SetFrameTextVerticalAlignment: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "verticalAlign", type: "textaligntype" } + ] + }, + SetFrameTextHorizontalAlignment: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "horizontalAlign", type: "textaligntype" } + ] + }, + GetFrameChildrenCount: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + GetFrameChild: { + returnType: "framehandle", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "index", type: "integer" } + ] + }, + GetFrameCheckState: { returnType: "boolean", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameCheckState: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "isCheck", type: "boolean" } + ] + }, + SetMiniMapTexture: { returnType: "boolean", args: [{ name: "texturePath", type: "string" }] }, + GetFrameItemsBorder: { returnType: "real", args: [{ name: "listBox", type: "framehandle" }] }, + SetFrameItemsBorder: { + returnType: "nothing", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "value", type: "real" } + ] + }, + GetFrameItemsHeight: { returnType: "real", args: [{ name: "listBox", type: "framehandle" }] }, + SetFrameItemsHeight: { + returnType: "nothing", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "value", type: "real" } + ] + }, + AddFrameListItem: { + returnType: "framehandle", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "text", type: "string" }, + { name: "whichFrame", type: "framehandle" } + ] + }, + GetFrameListItemCount: { returnType: "integer", args: [{ name: "listBox", type: "framehandle" }] }, + GetFrameListItemById: { + returnType: "framehandle", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "id", type: "integer" } + ] + }, + SetFrameListItemById: { + returnType: "nothing", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "id", type: "integer" }, + { name: "whichFrame", type: "framehandle" } + ] + }, + GetFrameListItemByFrame: { + returnType: "framehandle", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "frameToFind", type: "framehandle" } + ] + }, + SetFrameListItemByFrame: { + returnType: "nothing", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "frameToFind", type: "framehandle" }, + { name: "whichFrame", type: "framehandle" } + ] + }, + RemoveFrameListItem: { + returnType: "nothing", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "whichFrame", type: "framehandle" } + ] + }, + RemoveFrameListItemById: { + returnType: "nothing", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "id", type: "integer" } + ] + }, + RemoveFrameListItemByFrame: { + returnType: "nothing", + args: [ + { name: "listBox", type: "framehandle" }, + { name: "whichFrame", type: "framehandle" } + ] + }, + GetFrameItemOwner: { returnType: "framehandle", args: [{ name: "listBoxItem", type: "framehandle" }] }, + SetFrameItemOwner: { + returnType: "nothing", + args: [ + { name: "listBoxItem", type: "framehandle" }, + { name: "whichFrame", type: "framehandle" } + ] + }, + GetFrameBorderFlags: { + returnType: "integer", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" } + ] + }, + SetFrameBorderFlags: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" }, + { name: "cornerFlag", type: "integer" } + ] + }, + GetFrameBorderSize: { + returnType: "real", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" } + ] + }, + SetFrameBorderSize: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" }, + { name: "value", type: "real" } + ] + }, + GetFrameBackgroundSize: { + returnType: "real", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" } + ] + }, + SetFrameBackgroundSize: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" }, + { name: "value", type: "real" } + ] + }, + GetFrameBackgroundInsetById: { + returnType: "real", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" }, + { name: "insetId", type: "integer" } + ] + }, + SetFrameBackgroundInsetById: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" }, + { name: "insetId", type: "integer" }, + { name: "value", type: "real" } + ] + }, + SetFrameBackgroundInsets: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "backdropId", type: "integer" }, + { name: "minX", type: "real" }, + { name: "minY", type: "real" }, + { name: "maxX", type: "real" }, + { name: "maxY", type: "real" } + ] + }, + GetTriggerFrame: { returnType: "framehandle", args: [] }, + GetTriggerFrameEvent: { returnType: "frameeventtype", args: [] }, + GetTriggerFrameVariableType: { returnType: "variabletype", args: [] }, + GetTriggerFrameInteger: { returnType: "integer", args: [] }, + GetTriggerFrameReal: { returnType: "real", args: [] }, + GetTriggerFrameBoolean: { returnType: "boolean", args: [] }, + GetTriggerFrameString: { returnType: "string", args: [] }, + GetTriggerFrameMouseButton: { returnType: "mousebuttontype", args: [] }, + TriggerRegisterFrameEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichFrame", type: "framehandle" }, + { name: "frameEvent", type: "frameeventtype" } + ] + }, + RegisterFrameMouseButton: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "whichButton", type: "mousebuttontype" }, + { name: "isAdd", type: "boolean" } + ] + }, + GetFrameSprite: { returnType: "sprite", args: [{ name: "whichFrame", type: "framehandle" }] }, + GetFrameSpriteScale: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteScale: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "scale", type: "real" } + ] + }, + GetFrameSpriteTimeScale: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteTimeScale: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "timescale", type: "real" } + ] + }, + SetFrameSpritePlayerColour: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "color", type: "playercolor" } + ] + }, + GetFrameSpriteAlpha: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteAlpha: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "alpha", type: "integer" } + ] + }, + GetFrameSpriteColour: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteColour: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "colour", type: "integer" } + ] + }, + SetFrameSpriteVertexColour: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "alpha", type: "integer" } + ] + }, + SetFrameSpriteOrientationEx: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" }, + { name: "eulerOrder", type: "integer" } + ] + }, + GetFrameSpriteYaw: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteYaw: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "yaw", type: "real" } + ] + }, + GetFrameSpriteFacing: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteFacing: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "facing", type: "real" } + ] + }, + GetFrameSpritePitch: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpritePitch: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "pitch", type: "real" } + ] + }, + GetFrameSpriteRoll: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteRoll: { + returnType: "boolean", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "roll", type: "real" } + ] + }, + SetFrameSpriteOrientation: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + SetFrameSpriteMaterialTexture: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureName", type: "string" }, + { name: "materialId", type: "integer" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetFrameSpriteMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "sizeX", type: "real" }, + { name: "sizeY", type: "real" }, + { name: "sizeZ", type: "real" } + ] + }, + ResetFrameSpriteMatrix: { returnType: "nothing", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteTexture: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + SetFrameSpriteReplaceableTexture: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "textureName", type: "string" }, + { name: "textureIndex", type: "integer" } + ] + }, + GetFrameSpriteModel: { returnType: "string", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteModel: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "modelName", type: "string" } + ] + }, + SetFrameSpriteModelEx: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "modelName", type: "string" }, + { name: "playerColour", type: "integer" } + ] + }, + GetFrameSpriteCurrentAnimationId: { returnType: "integer", args: [{ name: "whichFrame", type: "framehandle" }] }, + GetFrameSpriteCurrentAnimationName: { returnType: "string", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteAnimationWithRarityByIndex: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "animIndex", type: "integer" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetFrameSpriteAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "animIndex", type: "integer" } + ] + }, + QueueFrameSpriteAnimationByIndex: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "animIndex", type: "integer" } + ] + }, + SetFrameSpriteAnimationWithRarity: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "animationName", type: "string" }, + { name: "rarity", type: "raritycontrol" } + ] + }, + SetFrameSpriteAnimation: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "animationName", type: "string" } + ] + }, + QueueFrameSpriteAnimation: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "animationName", type: "string" } + ] + }, + GetFrameSpriteAnimationOffsetPercent: { returnType: "real", args: [{ name: "whichFrame", type: "framehandle" }] }, + SetFrameSpriteAnimationOffsetPercent: { + returnType: "nothing", + args: [ + { name: "whichFrame", type: "framehandle" }, + { name: "percent", type: "real" } + ] + }, + GetTriggerSyncPlayer: { returnType: "player", args: [] }, + GetSyncedVariableType: { returnType: "variabletype", args: [] }, + GetSyncedVariableName: { returnType: "string", args: [] }, + GetSyncedInteger: { returnType: "integer", args: [] }, + GetSyncedReal: { returnType: "real", args: [] }, + GetSyncedString: { returnType: "string", args: [] }, + GetSyncedHandle: { returnType: "handle", args: [] }, + GetSyncedBoolean: { returnType: "boolean", args: [] }, + SyncInteger: { returnType: "nothing", args: [{ name: "variableName", type: "string" }] }, + SyncReal: { returnType: "nothing", args: [{ name: "variableName", type: "string" }] }, + SyncString: { returnType: "nothing", args: [{ name: "variableName", type: "string" }] }, + SyncHandle: { returnType: "nothing", args: [{ name: "variableName", type: "string" }] }, + SyncBoolean: { returnType: "nothing", args: [{ name: "variableName", type: "string" }] }, + TriggerRegisterPlayerVariableSyncEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "variableName", type: "string" } + ] + }, + GetSyncSavedVariableType: { returnType: "variabletype", args: [] }, + GetSyncSavedHashtable: { returnType: "hashtable", args: [] }, + GetSyncSavedParentKey: { returnType: "integer", args: [] }, + GetSyncSavedChildKey: { returnType: "integer", args: [] }, + SyncSavedInteger: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + SyncSavedReal: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + SyncSavedString: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + SyncSavedHandle: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + SyncSavedBoolean: { + returnType: "nothing", + args: [ + { name: "table", type: "hashtable" }, + { name: "parentKey", type: "integer" }, + { name: "childKey", type: "integer" } + ] + }, + TriggerRegisterPlayerHashtableDataSyncEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "whichHashtable", type: "hashtable" } + ] + }, + GetTriggerSyncPrefix: { returnType: "string", args: [] }, + GetTriggerSyncData: { returnType: "string", args: [] }, + SendSyncData: { + returnType: "boolean", + args: [ + { name: "prefix", type: "string" }, + { name: "data", type: "string" } + ] + }, + TriggerRegisterPlayerSyncEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "prefix", type: "string" }, + { name: "fromServer", type: "boolean" } + ] + }, + IsKeyPressed: { returnType: "boolean", args: [{ name: "key", type: "oskeytype" }] }, + IsMouseKeyPressed: { returnType: "boolean", args: [{ name: "mouseKey", type: "mousebuttontype" }] }, + GetTriggerPlayerKey: { returnType: "oskeytype", args: [] }, + GetTriggerPlayerMouseButton: { returnType: "mousebuttontype", args: [] }, + GetTriggerPlayerMetaKey: { returnType: "integer", args: [] }, + GetTriggerPlayerIsKeyDown: { returnType: "boolean", args: [] }, + TriggerRegisterPlayerKeyEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "whichKey", type: "oskeytype" }, + { name: "whichMetaKey", type: "integer" }, + { name: "isKeyDown", type: "boolean" } + ] + }, + GetTriggerPlayerMouseWorldX: { returnType: "real", args: [] }, + GetTriggerPlayerMouseWorldY: { returnType: "real", args: [] }, + GetTriggerPlayerMouseWorldZ: { returnType: "real", args: [] }, + GetTriggerPlayerMouseScreenX: { returnType: "real", args: [] }, + GetTriggerPlayerMouseScreenY: { returnType: "real", args: [] }, + GetEventDamageFlags: { returnType: "integer", args: [] }, + SetEventDamageFlags: { returnType: "boolean", args: [{ name: "flags", type: "integer" }] }, + GetEventDamageAbilityId: { returnType: "integer", args: [] }, + GetEventDamageTarget: { returnType: "unit", args: [] }, + GetEventAttackType: { returnType: "attacktype", args: [] }, + SetEventAttackType: { returnType: "boolean", args: [{ name: "attackType", type: "attacktype" }] }, + GetEventDamageType: { returnType: "damagetype", args: [] }, + SetEventDamageType: { returnType: "boolean", args: [{ name: "damageType", type: "damagetype" }] }, + GetEventDamageTypeFlags: { returnType: "integer", args: [] }, + SetEventDamageTypeFlags: { returnType: "boolean", args: [{ name: "damageFlags", type: "integer" }] }, + GetEventWeaponType: { returnType: "weapontype", args: [] }, + SetEventWeaponType: { returnType: "boolean", args: [{ name: "weaponType", type: "weapontype" }] }, + GetEventIsAttack: { returnType: "boolean", args: [] }, + GetEventIsRanged: { returnType: "boolean", args: [] }, + GetEventPreDamage: { returnType: "real", args: [] }, + SetEventDamage: { returnType: "nothing", args: [{ name: "damage", type: "real" }] }, + SetEnemyStartLocPrioCount: { + returnType: "nothing", + args: [ + { name: "whichStartLoc", type: "integer" }, + { name: "prioSlotCount", type: "integer" } + ] + }, + SetEnemyStartLocPrio: { + returnType: "nothing", + args: [ + { name: "whichStartLoc", type: "integer" }, + { name: "prioSlotIndex", type: "integer" }, + { name: "otherStartLocIndex", type: "integer" }, + { name: "priority", type: "startlocprio" } + ] + }, + BlzGroupAddGroupFast: { + returnType: "integer", + args: [ + { name: "whichGroup", type: "group" }, + { name: "addGroup", type: "group" } + ] + }, + BlzGroupRemoveGroupFast: { + returnType: "integer", + args: [ + { name: "whichGroup", type: "group" }, + { name: "removeGroup", type: "group" } + ] + }, + BlzGroupGetSize: { returnType: "integer", args: [{ name: "whichGroup", type: "group" }] }, + BlzGroupUnitAt: { + returnType: "unit", + args: [ + { name: "whichGroup", type: "group" }, + { name: "index", type: "integer" } + ] + }, + BlzForceHasPlayer: { + returnType: "boolean", + args: [ + { name: "whichForce", type: "force" }, + { name: "whichPlayer", type: "player" } + ] + }, + ParseTags: { returnType: "string", args: [{ name: "taggedString", type: "string" }] }, + TriggerRegisterCommandEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichAbility", type: "integer" }, + { name: "order", type: "string" } + ] + }, + TriggerRegisterUpgradeCommandEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichUpgrade", type: "integer" } + ] + }, + BlzGetAbsorbingItem: { returnType: "item", args: [] }, + BlzGetManipulatedItemWasAbsorbed: { returnType: "boolean", args: [] }, + BlzGetStackingItemSource: { returnType: "item", args: [] }, + BlzGetStackingItemTarget: { returnType: "item", args: [] }, + BlzGetStackingItemTargetPreviousCharges: { returnType: "integer", args: [] }, + GetPlayerHandicapReviveTime: { returnType: "real", args: [{ name: "whichPlayer", type: "player" }] }, + GetPlayerHandicapDamage: { returnType: "real", args: [{ name: "whichPlayer", type: "player" }] }, + SetPlayerHandicapReviveTime: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "handicap", type: "real" } + ] + }, + SetPlayerHandicapDamage: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "handicap", type: "real" } + ] + }, + SetMaxCheckpointSaves: { returnType: "nothing", args: [{ name: "maxCheckpointSaves", type: "integer" }] }, + SaveGameCheckpoint: { + returnType: "nothing", + args: [ + { name: "saveFileName", type: "string" }, + { name: "showWindow", type: "boolean" } + ] + }, + SetPortraitLight: { returnType: "nothing", args: [{ name: "portraitDNCFile", type: "string" }] }, + CreateMinimapIconOnUnit: { + returnType: "minimapicon", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "pingPath", type: "string" }, + { name: "fogVisibility", type: "fogstate" } + ] + }, + CreateMinimapIconAtLoc: { + returnType: "minimapicon", + args: [ + { name: "where", type: "location" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "pingPath", type: "string" }, + { name: "fogVisibility", type: "fogstate" } + ] + }, + CreateMinimapIcon: { + returnType: "minimapicon", + args: [ + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "red", type: "integer" }, + { name: "green", type: "integer" }, + { name: "blue", type: "integer" }, + { name: "pingPath", type: "string" }, + { name: "fogVisibility", type: "fogstate" } + ] + }, + SkinManagerGetLocalPath: { returnType: "string", args: [{ name: "key", type: "string" }] }, + DestroyMinimapIcon: { returnType: "nothing", args: [{ name: "pingId", type: "minimapicon" }] }, + SetMinimapIconVisible: { + returnType: "nothing", + args: [ + { name: "whichMinimapIcon", type: "minimapicon" }, + { name: "visible", type: "boolean" } + ] + }, + SetMinimapIconOrphanDestroy: { + returnType: "nothing", + args: [ + { name: "whichMinimapIcon", type: "minimapicon" }, + { name: "doDestroy", type: "boolean" } + ] + }, + BlzCameraSetupSetLabel: { + returnType: "nothing", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "label", type: "string" } + ] + }, + BlzCameraSetupGetLabel: { returnType: "string", args: [{ name: "whichSetup", type: "camerasetup" }] }, + CameraSetFocalDistance: { returnType: "nothing", args: [{ name: "distance", type: "real" }] }, + CameraSetDepthOfFieldScale: { returnType: "nothing", args: [{ name: "scale", type: "real" }] }, + SetCinematicAudio: { returnType: "nothing", args: [{ name: "cinematicAudio", type: "boolean" }] }, + StartSoundEx: { + returnType: "nothing", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "fadeIn", type: "boolean" } + ] + }, + SetThematicMusicVolume: { returnType: "nothing", args: [{ name: "volume", type: "integer" }] }, + SetSoundFacialAnimationLabel: { + returnType: "boolean", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "animationLabel", type: "string" } + ] + }, + SetSoundFacialAnimationGroupLabel: { + returnType: "boolean", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "groupLabel", type: "string" } + ] + }, + SetSoundFacialAnimationSetFilepath: { + returnType: "boolean", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "animationSetFilepath", type: "string" } + ] + }, + SetDialogueSpeakerNameKey: { + returnType: "boolean", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "speakerName", type: "string" } + ] + }, + GetDialogueSpeakerNameKey: { returnType: "string", args: [{ name: "soundHandle", type: "sound" }] }, + SetDialogueTextKey: { + returnType: "boolean", + args: [ + { name: "soundHandle", type: "sound" }, + { name: "dialogueText", type: "string" } + ] + }, + GetDialogueTextKey: { returnType: "string", args: [{ name: "soundHandle", type: "sound" }] }, + BlzHideCinematicPanels: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + AutomationSetTestType: { returnType: "nothing", args: [{ name: "testType", type: "string" }] }, + AutomationTestStart: { returnType: "nothing", args: [{ name: "testName", type: "string" }] }, + AutomationTestEnd: { returnType: "nothing", args: [] }, + AutomationTestingFinished: { returnType: "nothing", args: [] }, + BlzGetTriggerPlayerMouseX: { returnType: "real", args: [] }, + BlzGetTriggerPlayerMouseY: { returnType: "real", args: [] }, + BlzGetTriggerPlayerMousePosition: { returnType: "location", args: [] }, + BlzGetTriggerPlayerMouseButton: { returnType: "mousebuttontype", args: [] }, + BlzSetAbilityTooltip: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "tooltip", type: "string" }, + { name: "level", type: "integer" } + ] + }, + BlzSetAbilityActivatedTooltip: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "tooltip", type: "string" }, + { name: "level", type: "integer" } + ] + }, + BlzSetAbilityExtendedTooltip: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "extendedTooltip", type: "string" }, + { name: "level", type: "integer" } + ] + }, + BlzSetAbilityActivatedExtendedTooltip: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "extendedTooltip", type: "string" }, + { name: "level", type: "integer" } + ] + }, + BlzSetAbilityResearchTooltip: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "researchTooltip", type: "string" }, + { name: "level", type: "integer" } + ] + }, + BlzSetAbilityResearchExtendedTooltip: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "researchExtendedTooltip", type: "string" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityTooltip: { + returnType: "string", + args: [ + { name: "abilCode", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityActivatedTooltip: { + returnType: "string", + args: [ + { name: "abilCode", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityExtendedTooltip: { + returnType: "string", + args: [ + { name: "abilCode", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityActivatedExtendedTooltip: { + returnType: "string", + args: [ + { name: "abilCode", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityResearchTooltip: { + returnType: "string", + args: [ + { name: "abilCode", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityResearchExtendedTooltip: { + returnType: "string", + args: [ + { name: "abilCode", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzSetAbilityIcon: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "iconPath", type: "string" } + ] + }, + BlzGetAbilityIcon: { returnType: "string", args: [{ name: "abilCode", type: "integer" }] }, + BlzSetAbilityActivatedIcon: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "iconPath", type: "string" } + ] + }, + BlzGetAbilityActivatedIcon: { returnType: "string", args: [{ name: "abilCode", type: "integer" }] }, + BlzGetAbilityPosX: { returnType: "integer", args: [{ name: "abilCode", type: "integer" }] }, + BlzGetAbilityPosY: { returnType: "integer", args: [{ name: "abilCode", type: "integer" }] }, + BlzSetAbilityPosX: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "x", type: "integer" } + ] + }, + BlzSetAbilityPosY: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "y", type: "integer" } + ] + }, + BlzGetAbilityActivatedPosX: { returnType: "integer", args: [{ name: "abilCode", type: "integer" }] }, + BlzGetAbilityActivatedPosY: { returnType: "integer", args: [{ name: "abilCode", type: "integer" }] }, + BlzSetAbilityActivatedPosX: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "x", type: "integer" } + ] + }, + BlzSetAbilityActivatedPosY: { + returnType: "nothing", + args: [ + { name: "abilCode", type: "integer" }, + { name: "y", type: "integer" } + ] + }, + BlzGetUnitMaxHP: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + BlzSetUnitMaxHP: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "hp", type: "integer" } + ] + }, + BlzGetUnitMaxMana: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + BlzSetUnitMaxMana: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "mana", type: "integer" } + ] + }, + BlzSetItemName: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "name", type: "string" } + ] + }, + BlzSetItemDescription: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "description", type: "string" } + ] + }, + BlzGetItemDescription: { returnType: "string", args: [{ name: "whichItem", type: "item" }] }, + BlzSetItemTooltip: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "tooltip", type: "string" } + ] + }, + BlzGetItemTooltip: { returnType: "string", args: [{ name: "whichItem", type: "item" }] }, + BlzSetItemExtendedTooltip: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "extendedTooltip", type: "string" } + ] + }, + BlzGetItemExtendedTooltip: { returnType: "string", args: [{ name: "whichItem", type: "item" }] }, + BlzSetItemIconPath: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "iconPath", type: "string" } + ] + }, + BlzGetItemIconPath: { returnType: "string", args: [{ name: "whichItem", type: "item" }] }, + BlzSetUnitName: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "name", type: "string" } + ] + }, + BlzSetHeroProperName: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "heroProperName", type: "string" } + ] + }, + BlzGetUnitBaseDamage: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "weaponIndex", type: "integer" } + ] + }, + BlzSetUnitBaseDamage: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "baseDamage", type: "integer" }, + { name: "weaponIndex", type: "integer" } + ] + }, + BlzGetUnitDiceNumber: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "weaponIndex", type: "integer" } + ] + }, + BlzSetUnitDiceNumber: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "diceNumber", type: "integer" }, + { name: "weaponIndex", type: "integer" } + ] + }, + BlzGetUnitDiceSides: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "weaponIndex", type: "integer" } + ] + }, + BlzSetUnitDiceSides: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "diceSides", type: "integer" }, + { name: "weaponIndex", type: "integer" } + ] + }, + BlzGetUnitAttackCooldown: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "weaponIndex", type: "integer" } + ] + }, + BlzSetUnitAttackCooldown: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "cooldown", type: "real" }, + { name: "weaponIndex", type: "integer" } + ] + }, + BlzSetSpecialEffectColorByPlayer: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichPlayer", type: "player" } + ] + }, + BlzSetSpecialEffectColor: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "r", type: "integer" }, + { name: "g", type: "integer" }, + { name: "b", type: "integer" } + ] + }, + BlzSetSpecialEffectAlpha: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "alpha", type: "integer" } + ] + }, + BlzSetSpecialEffectScale: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "scale", type: "real" } + ] + }, + BlzSetSpecialEffectPosition: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + BlzSetSpecialEffectHeight: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "height", type: "real" } + ] + }, + BlzSetSpecialEffectTimeScale: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "timeScale", type: "real" } + ] + }, + BlzSetSpecialEffectTime: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "time", type: "real" } + ] + }, + BlzSetSpecialEffectOrientation: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "yaw", type: "real" }, + { name: "pitch", type: "real" }, + { name: "roll", type: "real" } + ] + }, + BlzSetSpecialEffectYaw: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "yaw", type: "real" } + ] + }, + BlzSetSpecialEffectPitch: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "pitch", type: "real" } + ] + }, + BlzSetSpecialEffectRoll: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "roll", type: "real" } + ] + }, + BlzSetSpecialEffectX: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "x", type: "real" } + ] + }, + BlzSetSpecialEffectY: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "y", type: "real" } + ] + }, + BlzSetSpecialEffectZ: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "z", type: "real" } + ] + }, + BlzSetSpecialEffectPositionLoc: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "loc", type: "location" } + ] + }, + BlzGetLocalSpecialEffectX: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + BlzGetLocalSpecialEffectY: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + BlzGetLocalSpecialEffectZ: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + BlzSpecialEffectClearSubAnimations: { returnType: "nothing", args: [{ name: "whichEffect", type: "effect" }] }, + BlzSpecialEffectRemoveSubAnimation: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichSubAnim", type: "subanimtype" } + ] + }, + BlzSpecialEffectAddSubAnimation: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichSubAnim", type: "subanimtype" } + ] + }, + BlzPlaySpecialEffect: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichAnim", type: "animtype" } + ] + }, + BlzPlaySpecialEffectWithTimeScale: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "whichAnim", type: "animtype" }, + { name: "timeScale", type: "real" } + ] + }, + BlzGetAnimName: { returnType: "string", args: [{ name: "whichAnim", type: "animtype" }] }, + BlzGetUnitArmor: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + BlzSetUnitArmor: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "armorAmount", type: "real" } + ] + }, + BlzUnitHideAbility: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilId", type: "integer" }, + { name: "flag", type: "boolean" } + ] + }, + BlzUnitDisableAbility: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilId", type: "integer" }, + { name: "flag", type: "boolean" }, + { name: "hideUI", type: "boolean" } + ] + }, + BlzUnitCancelTimedLife: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + BlzIsUnitSelectable: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + BlzIsUnitInvulnerable: { returnType: "boolean", args: [{ name: "whichUnit", type: "unit" }] }, + BlzUnitInterruptAttack: { returnType: "nothing", args: [{ name: "whichUnit", type: "unit" }] }, + BlzGetUnitCollisionSize: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + BlzGetAbilityManaCost: { + returnType: "integer", + args: [ + { name: "abilId", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityCooldown: { + returnType: "real", + args: [ + { name: "abilId", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzSetUnitAbilityCooldown: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilId", type: "integer" }, + { name: "level", type: "integer" }, + { name: "cooldown", type: "real" } + ] + }, + BlzGetUnitAbilityCooldown: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilId", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzGetUnitAbilityCooldownRemaining: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilId", type: "integer" } + ] + }, + BlzEndUnitAbilityCooldown: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilCode", type: "integer" } + ] + }, + BlzStartUnitAbilityCooldown: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilCode", type: "integer" }, + { name: "cooldown", type: "real" } + ] + }, + BlzGetUnitAbilityManaCost: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilId", type: "integer" }, + { name: "level", type: "integer" } + ] + }, + BlzSetUnitAbilityManaCost: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilId", type: "integer" }, + { name: "level", type: "integer" }, + { name: "manaCost", type: "integer" } + ] + }, + BlzGetLocalUnitZ: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + BlzDecPlayerTechResearched: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "techid", type: "integer" }, + { name: "levels", type: "integer" } + ] + }, + BlzSetEventDamage: { returnType: "nothing", args: [{ name: "damage", type: "real" }] }, + BlzGetEventDamageTarget: { returnType: "unit", args: [] }, + BlzGetEventAttackType: { returnType: "attacktype", args: [] }, + BlzGetEventDamageType: { returnType: "damagetype", args: [] }, + BlzGetEventWeaponType: { returnType: "weapontype", args: [] }, + BlzSetEventAttackType: { returnType: "boolean", args: [{ name: "attackType", type: "attacktype" }] }, + BlzSetEventDamageType: { returnType: "boolean", args: [{ name: "damageType", type: "damagetype" }] }, + BlzSetEventWeaponType: { returnType: "boolean", args: [{ name: "weaponType", type: "weapontype" }] }, + BlzGetEventIsAttack: { returnType: "boolean", args: [] }, + BlzGetUnitZ: { returnType: "real", args: [{ name: "whichUnit", type: "unit" }] }, + BlzEnableSelections: { + returnType: "nothing", + args: [ + { name: "enableSelection", type: "boolean" }, + { name: "enableSelectionCircle", type: "boolean" } + ] + }, + BlzIsSelectionEnabled: { returnType: "boolean", args: [] }, + BlzIsSelectionCircleEnabled: { returnType: "boolean", args: [] }, + BlzCameraSetupApplyForceDurationSmooth: { + returnType: "nothing", + args: [ + { name: "whichSetup", type: "camerasetup" }, + { name: "doPan", type: "boolean" }, + { name: "forcedDuration", type: "real" }, + { name: "easeInDuration", type: "real" }, + { name: "easeOutDuration", type: "real" }, + { name: "smoothFactor", type: "real" } + ] + }, + BlzEnableTargetIndicator: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + BlzIsTargetIndicatorEnabled: { returnType: "boolean", args: [] }, + BlzShowTerrain: { returnType: "nothing", args: [{ name: "show", type: "boolean" }] }, + BlzShowSkyBox: { returnType: "nothing", args: [{ name: "show", type: "boolean" }] }, + BlzStartRecording: { returnType: "nothing", args: [{ name: "fps", type: "integer" }] }, + BlzEndRecording: { returnType: "nothing", args: [] }, + BlzShowUnitTeamGlow: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "show", type: "boolean" } + ] + }, + BlzGetOriginFrame: { + returnType: "framehandle", + args: [ + { name: "frameType", type: "originframetype" }, + { name: "index", type: "integer" } + ] + }, + BlzEnableUIAutoPosition: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + BlzHideOriginFrames: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + BlzConvertColor: { + returnType: "integer", + args: [ + { name: "a", type: "integer" }, + { name: "r", type: "integer" }, + { name: "g", type: "integer" }, + { name: "b", type: "integer" } + ] + }, + BlzLoadTOCFile: { returnType: "boolean", args: [{ name: "TOCFile", type: "string" }] }, + BlzCreateFrame: { + returnType: "framehandle", + args: [ + { name: "name", type: "string" }, + { name: "owner", type: "framehandle" }, + { name: "priority", type: "integer" }, + { name: "createContext", type: "integer" } + ] + }, + BlzCreateSimpleFrame: { + returnType: "framehandle", + args: [ + { name: "name", type: "string" }, + { name: "owner", type: "framehandle" }, + { name: "createContext", type: "integer" } + ] + }, + BlzCreateFrameByType: { + returnType: "framehandle", + args: [ + { name: "typeName", type: "string" }, + { name: "name", type: "string" }, + { name: "owner", type: "framehandle" }, + { name: "inherits", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + BlzDestroyFrame: { returnType: "nothing", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameSetPoint: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "point", type: "framepointtype" }, + { name: "relative", type: "framehandle" }, + { name: "relativePoint", type: "framepointtype" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + BlzFrameSetAbsPoint: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "point", type: "framepointtype" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + BlzFrameClearAllPoints: { returnType: "nothing", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameSetAllPoints: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "relative", type: "framehandle" } + ] + }, + BlzFrameSetVisible: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "visible", type: "boolean" } + ] + }, + BlzFrameIsVisible: { returnType: "boolean", args: [{ name: "frame", type: "framehandle" }] }, + BlzGetFrameByName: { + returnType: "framehandle", + args: [ + { name: "name", type: "string" }, + { name: "createContext", type: "integer" } + ] + }, + BlzFrameGetName: { returnType: "string", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameClick: { returnType: "nothing", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameSetText: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "text", type: "string" } + ] + }, + BlzFrameGetText: { returnType: "string", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameAddText: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "text", type: "string" } + ] + }, + BlzFrameSetTextSizeLimit: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "size", type: "integer" } + ] + }, + BlzFrameGetTextSizeLimit: { returnType: "integer", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameSetTextColor: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "color", type: "integer" } + ] + }, + BlzFrameSetFocus: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "flag", type: "boolean" } + ] + }, + BlzFrameSetModel: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "modelFile", type: "string" }, + { name: "cameraIndex", type: "integer" } + ] + }, + BlzFrameSetEnable: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "enabled", type: "boolean" } + ] + }, + BlzFrameGetEnable: { returnType: "boolean", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameSetAlpha: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "alpha", type: "integer" } + ] + }, + BlzFrameGetAlpha: { returnType: "integer", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameSetSpriteAnimate: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "primaryProp", type: "integer" }, + { name: "flags", type: "integer" } + ] + }, + BlzFrameSetTexture: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "texFile", type: "string" }, + { name: "flag", type: "integer" }, + { name: "blend", type: "boolean" } + ] + }, + BlzFrameSetScale: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "scale", type: "real" } + ] + }, + BlzFrameSetTooltip: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "tooltip", type: "framehandle" } + ] + }, + BlzFrameCageMouse: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "enable", type: "boolean" } + ] + }, + BlzFrameSetValue: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "value", type: "real" } + ] + }, + BlzFrameGetValue: { returnType: "real", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameSetMinMaxValue: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "minValue", type: "real" }, + { name: "maxValue", type: "real" } + ] + }, + BlzFrameSetStepSize: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "stepSize", type: "real" } + ] + }, + BlzFrameSetSize: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "width", type: "real" }, + { name: "height", type: "real" } + ] + }, + BlzFrameSetVertexColor: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "color", type: "integer" } + ] + }, + BlzFrameSetLevel: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "level", type: "integer" } + ] + }, + BlzFrameSetParent: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "parent", type: "framehandle" } + ] + }, + BlzFrameGetParent: { returnType: "framehandle", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameGetHeight: { returnType: "real", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameGetWidth: { returnType: "real", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameSetFont: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "fileName", type: "string" }, + { name: "height", type: "real" }, + { name: "flags", type: "integer" } + ] + }, + BlzFrameSetTextAlignment: { + returnType: "nothing", + args: [ + { name: "frame", type: "framehandle" }, + { name: "vert", type: "textaligntype" }, + { name: "horz", type: "textaligntype" } + ] + }, + BlzFrameGetChildrenCount: { returnType: "integer", args: [{ name: "frame", type: "framehandle" }] }, + BlzFrameGetChild: { + returnType: "framehandle", + args: [ + { name: "frame", type: "framehandle" }, + { name: "index", type: "integer" } + ] + }, + BlzTriggerRegisterFrameEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "frame", type: "framehandle" }, + { name: "eventId", type: "frameeventtype" } + ] + }, + BlzGetTriggerFrame: { returnType: "framehandle", args: [] }, + BlzGetTriggerFrameEvent: { returnType: "frameeventtype", args: [] }, + BlzGetTriggerFrameValue: { returnType: "real", args: [] }, + BlzGetTriggerFrameText: { returnType: "string", args: [] }, + BlzTriggerRegisterPlayerSyncEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "prefix", type: "string" }, + { name: "fromServer", type: "boolean" } + ] + }, + BlzSendSyncData: { + returnType: "boolean", + args: [ + { name: "prefix", type: "string" }, + { name: "data", type: "string" } + ] + }, + BlzGetTriggerSyncPrefix: { returnType: "string", args: [] }, + BlzGetTriggerSyncData: { returnType: "string", args: [] }, + BlzTriggerRegisterPlayerKeyEvent: { + returnType: "event", + args: [ + { name: "whichTrigger", type: "trigger" }, + { name: "whichPlayer", type: "player" }, + { name: "key", type: "oskeytype" }, + { name: "metaKey", type: "integer" }, + { name: "keyDown", type: "boolean" } + ] + }, + BlzGetTriggerPlayerKey: { returnType: "oskeytype", args: [] }, + BlzGetTriggerPlayerMetaKey: { returnType: "integer", args: [] }, + BlzGetTriggerPlayerIsKeyDown: { returnType: "boolean", args: [] }, + BlzEnableCursor: { returnType: "nothing", args: [{ name: "enable", type: "boolean" }] }, + BlzSetMousePos: { + returnType: "nothing", + args: [ + { name: "x", type: "integer" }, + { name: "y", type: "integer" } + ] + }, + BlzGetLocalClientWidth: { returnType: "integer", args: [] }, + BlzGetLocalClientHeight: { returnType: "integer", args: [] }, + BlzIsLocalClientActive: { returnType: "boolean", args: [] }, + BlzGetMouseFocusUnit: { returnType: "unit", args: [] }, + BlzChangeMinimapTerrainTex: { returnType: "boolean", args: [{ name: "texFile", type: "string" }] }, + BlzGetLocale: { returnType: "string", args: [] }, + BlzGetSpecialEffectScale: { returnType: "real", args: [{ name: "whichEffect", type: "effect" }] }, + BlzSetSpecialEffectMatrixScale: { + returnType: "nothing", + args: [ + { name: "whichEffect", type: "effect" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" } + ] + }, + BlzResetSpecialEffectMatrix: { returnType: "nothing", args: [{ name: "whichEffect", type: "effect" }] }, + BlzGetUnitAbility: { + returnType: "ability", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "abilId", type: "integer" } + ] + }, + BlzGetUnitAbilityByIndex: { + returnType: "ability", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "index", type: "integer" } + ] + }, + BlzGetAbilityId: { returnType: "integer", args: [{ name: "whichAbility", type: "ability" }] }, + BlzDisplayChatMessage: { + returnType: "nothing", + args: [ + { name: "whichPlayer", type: "player" }, + { name: "recipient", type: "integer" }, + { name: "message", type: "string" } + ] + }, + BlzPauseUnitEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "flag", type: "boolean" } + ] + }, + BlzSetUnitFacingEx: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "facingAngle", type: "real" } + ] + }, + CreateCommandButtonEffect: { + returnType: "commandbuttoneffect", + args: [ + { name: "abilityId", type: "integer" }, + { name: "order", type: "string" } + ] + }, + CreateUpgradeCommandButtonEffect: { + returnType: "commandbuttoneffect", + args: [{ name: "whichUprgade", type: "integer" }] + }, + CreateLearnCommandButtonEffect: { + returnType: "commandbuttoneffect", + args: [{ name: "abilityId", type: "integer" }] + }, + DestroyCommandButtonEffect: { returnType: "nothing", args: [{ name: "whichEffect", type: "commandbuttoneffect" }] }, + BlzBitOr: { + returnType: "integer", + args: [ + { name: "x", type: "integer" }, + { name: "y", type: "integer" } + ] + }, + BlzBitAnd: { + returnType: "integer", + args: [ + { name: "x", type: "integer" }, + { name: "y", type: "integer" } + ] + }, + BlzBitXor: { + returnType: "integer", + args: [ + { name: "x", type: "integer" }, + { name: "y", type: "integer" } + ] + }, + BlzGetAbilityBooleanField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanfield" } + ] + }, + BlzGetAbilityIntegerField: { + returnType: "integer", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerfield" } + ] + }, + BlzGetAbilityRealField: { + returnType: "real", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityrealfield" } + ] + }, + BlzGetAbilityStringField: { + returnType: "string", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringfield" } + ] + }, + BlzGetAbilityBooleanLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelfield" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityIntegerLevelField: { + returnType: "integer", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelfield" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityRealLevelField: { + returnType: "real", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelfield" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityStringLevelField: { + returnType: "string", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelfield" }, + { name: "level", type: "integer" } + ] + }, + BlzGetAbilityBooleanLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + BlzGetAbilityIntegerLevelArrayField: { + returnType: "integer", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + BlzGetAbilityRealLevelArrayField: { + returnType: "real", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + BlzGetAbilityStringLevelArrayField: { + returnType: "string", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" } + ] + }, + BlzSetAbilityBooleanField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + BlzSetAbilityIntegerField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerfield" }, + { name: "value", type: "integer" } + ] + }, + BlzSetAbilityRealField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityrealfield" }, + { name: "value", type: "real" } + ] + }, + BlzSetAbilityStringField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringfield" }, + { name: "value", type: "string" } + ] + }, + BlzSetAbilityBooleanLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + BlzSetAbilityIntegerLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + BlzSetAbilityRealLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + BlzSetAbilityStringLevelField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + BlzSetAbilityBooleanLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + BlzSetAbilityIntegerLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + BlzSetAbilityRealLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "real" } + ] + }, + BlzSetAbilityStringLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "index", type: "integer" }, + { name: "value", type: "string" } + ] + }, + BlzAddAbilityBooleanLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + BlzAddAbilityIntegerLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + BlzAddAbilityRealLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + BlzAddAbilityStringLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + BlzRemoveAbilityBooleanLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitybooleanlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + BlzRemoveAbilityIntegerLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityintegerlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + BlzRemoveAbilityRealLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilityreallevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "real" } + ] + }, + BlzRemoveAbilityStringLevelArrayField: { + returnType: "boolean", + args: [ + { name: "whichAbility", type: "ability" }, + { name: "whichField", type: "abilitystringlevelarrayfield" }, + { name: "level", type: "integer" }, + { name: "value", type: "string" } + ] + }, + BlzGetItemAbilityByIndex: { + returnType: "ability", + args: [ + { name: "whichItem", type: "item" }, + { name: "index", type: "integer" } + ] + }, + BlzGetItemAbility: { + returnType: "ability", + args: [ + { name: "whichItem", type: "item" }, + { name: "abilCode", type: "integer" } + ] + }, + BlzItemAddAbility: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "abilCode", type: "integer" } + ] + }, + BlzGetItemBooleanField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itembooleanfield" } + ] + }, + BlzGetItemIntegerField: { + returnType: "integer", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemintegerfield" } + ] + }, + BlzGetItemRealField: { + returnType: "real", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemrealfield" } + ] + }, + BlzGetItemStringField: { + returnType: "string", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemstringfield" } + ] + }, + BlzSetItemBooleanField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itembooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + BlzSetItemIntegerField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemintegerfield" }, + { name: "value", type: "integer" } + ] + }, + BlzSetItemRealField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemrealfield" }, + { name: "value", type: "real" } + ] + }, + BlzSetItemStringField: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "whichField", type: "itemstringfield" }, + { name: "value", type: "string" } + ] + }, + BlzItemRemoveAbility: { + returnType: "boolean", + args: [ + { name: "whichItem", type: "item" }, + { name: "abilCode", type: "integer" } + ] + }, + BlzGetUnitBooleanField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitbooleanfield" } + ] + }, + BlzGetUnitIntegerField: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitintegerfield" } + ] + }, + BlzGetUnitRealField: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitrealfield" } + ] + }, + BlzGetUnitStringField: { + returnType: "string", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitstringfield" } + ] + }, + BlzSetUnitBooleanField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitbooleanfield" }, + { name: "value", type: "boolean" } + ] + }, + BlzSetUnitIntegerField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitintegerfield" }, + { name: "value", type: "integer" } + ] + }, + BlzSetUnitRealField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitrealfield" }, + { name: "value", type: "real" } + ] + }, + BlzSetUnitStringField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitstringfield" }, + { name: "value", type: "string" } + ] + }, + BlzGetUnitWeaponBooleanField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponbooleanfield" }, + { name: "index", type: "integer" } + ] + }, + BlzGetUnitWeaponIntegerField: { + returnType: "integer", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponintegerfield" }, + { name: "index", type: "integer" } + ] + }, + BlzGetUnitWeaponRealField: { + returnType: "real", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponrealfield" }, + { name: "index", type: "integer" } + ] + }, + BlzGetUnitWeaponStringField: { + returnType: "string", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponstringfield" }, + { name: "index", type: "integer" } + ] + }, + BlzSetUnitWeaponBooleanField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponbooleanfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "boolean" } + ] + }, + BlzSetUnitWeaponIntegerField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponintegerfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "integer" } + ] + }, + BlzSetUnitWeaponRealField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponrealfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "real" } + ] + }, + BlzSetUnitWeaponStringField: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "whichField", type: "unitweaponstringfield" }, + { name: "index", type: "integer" }, + { name: "value", type: "string" } + ] + }, + BlzGetUnitSkin: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + BlzGetItemSkin: { returnType: "integer", args: [{ name: "whichItem", type: "item" }] }, + BlzSetUnitSkin: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "skinId", type: "integer" } + ] + }, + BlzSetItemSkin: { + returnType: "nothing", + args: [ + { name: "whichItem", type: "item" }, + { name: "skinId", type: "integer" } + ] + }, + BlzCreateItemWithSkin: { + returnType: "item", + args: [ + { name: "itemid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "skinId", type: "integer" } + ] + }, + BlzCreateUnitWithSkin: { + returnType: "unit", + args: [ + { name: "id", type: "player" }, + { name: "unitid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" }, + { name: "skinId", type: "integer" } + ] + }, + BlzCreateDestructableWithSkin: { + returnType: "destructable", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" }, + { name: "skinId", type: "integer" } + ] + }, + BlzCreateDestructableZWithSkin: { + returnType: "destructable", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" }, + { name: "skinId", type: "integer" } + ] + }, + BlzCreateDeadDestructableWithSkin: { + returnType: "destructable", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" }, + { name: "skinId", type: "integer" } + ] + }, + BlzCreateDeadDestructableZWithSkin: { + returnType: "destructable", + args: [ + { name: "objectid", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "z", type: "real" }, + { name: "face", type: "real" }, + { name: "scale", type: "real" }, + { name: "variation", type: "integer" }, + { name: "skinId", type: "integer" } + ] + }, + BlzGetPlayerTownHallCount: { returnType: "integer", args: [{ name: "whichPlayer", type: "player" }] }, + BlzQueueImmediateOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" } + ] + }, + BlzQueuePointOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + BlzQueueTargetOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "targetWidget", type: "widget" } + ] + }, + BlzQueueInstantPointOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" }, + { name: "instantTargetWidget", type: "widget" } + ] + }, + BlzQueueInstantTargetOrderById: { + returnType: "boolean", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "order", type: "integer" }, + { name: "targetWidget", type: "widget" }, + { name: "instantTargetWidget", type: "widget" } + ] + }, + BlzQueueBuildOrderById: { + returnType: "boolean", + args: [ + { name: "whichPeon", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + BlzQueueNeutralImmediateOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" } + ] + }, + BlzQueueNeutralPointOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "x", type: "real" }, + { name: "y", type: "real" } + ] + }, + BlzQueueNeutralTargetOrderById: { + returnType: "boolean", + args: [ + { name: "forWhichPlayer", type: "player" }, + { name: "neutralStructure", type: "unit" }, + { name: "unitId", type: "integer" }, + { name: "target", type: "widget" } + ] + }, + BlzGetUnitOrderCount: { returnType: "integer", args: [{ name: "whichUnit", type: "unit" }] }, + BlzUnitClearOrders: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "onlyQueued", type: "boolean" } + ] + }, + BlzUnitForceStopOrder: { + returnType: "nothing", + args: [ + { name: "whichUnit", type: "unit" }, + { name: "clearQueue", type: "boolean" } + ] + } +}; + +// ../unsafe/dist/lib/events/index.js +var callbacks = {}; +var setToHandleHolder = function(callback) { + callbacks.toHandleHolder = callback; +}; +var setOnNewHandle = function(callback) { + callbacks.onNewHandle = callback; +}; +var setOnHandleDestroy = function(callback) { + callbacks.onHandleDestroy = callback; +}; + +// ../unsafe/dist/lib/natives/index.js +var primitiveMapping = { + integer: "I", + real: "R", + code: "C", + boolean: "B", + string: "S", + nothing: "V" +}; +var isDestructor = function(nativeName) { + return nativeName.startsWith("Destroy") || nativeName.startsWith("Remove"); +}; +var isValueType = function(value, type) { + if (type === "S") + return true; + if (type === "I") + return Number.isInteger(Number(value)); + if (type === "R") + return typeof value === "number" && !isNaN(value) && isFinite(value); + if (type === "C") + return typeof value === "function"; + return value instanceof HandleHolder2; +}; +function getNativeByName(name, binaryMode, noNotify, noWrap) { + var native = natives_default[name]; + if (!native) + return null; + var returnType = native.returnType; + var parametres = native.args; + var nativeMeta = { + parametres: parametres.map(function(i) { + return primitiveMapping[i.type] || i.type; + }), + parametresName: parametres.map(function(i) { + return i.name; + }), + returnType: primitiveMapping[returnType] || returnType, + binaryMode, + noNotify, + noWrap, + nativeName: name + }; + var nativeFunc = function() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + for (var i = 0; i < args.length; ++i) { + if (!isValueType(args[i], nativeMeta.parametres[i])) { + throw new TypeError("Error in parameter type ".concat(i + 1, ". Exception ").concat(nativeMeta.parametres[i], " got ").concat(args[i])); + } + } + if (returnType === "V" && parametres.length === 1 && args[0] instanceof HandleHolder2 && isDestructor(name) && callbacks.onHandleDestroy) { + callbacks.onHandleDestroy(args[0]); + } + if (nativeMeta.returnType === "I") + return 0; + if (nativeMeta.returnType === "R") + return 0.1; + if (nativeMeta.returnType === "C") + return function() { + }; + if (nativeMeta.returnType === "B") + return binaryMode; + if (nativeMeta.returnType === "S") + return ""; + if (nativeMeta.returnType === "V") + return; + var newHandle = new HandleHolder2(returnType); + if (callbacks.onNewHandle && !noNotify) + callbacks.onNewHandle(newHandle, name); + return newHandle; + }; + return Object.assign(nativeFunc, nativeMeta); +} +var getListNatives = function() { + var result = {}; + Object.keys(natives_default).forEach(function(i) { + result[i] = getNativeByName(i); + }); + return result; +}; + +// ../unsafe/dist/lib/console/index.js +var consoleLog = function(kind) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + switch (kind) { + case 0: + console.log.apply(console, args); + break; + case 1: + console.trace.apply(console, args); + break; + case 2: + console.debug.apply(console, args); + break; + case 3: + console.info.apply(console, args); + break; + case 4: + console.error.apply(console, args); + break; + case 5: + console.warn.apply(console, args); + break; + } +}; + +// ../unsafe/dist/lib/database/globals.js +var globals_default = { + FALSE: "boolean", + TRUE: "boolean", + JASS_MAX_ARRAY_SIZE: "integer", + TEXT_TAG_MAX_SIZE: "integer", + PLAYER_NEUTRAL_PASSIVE: "integer", + PLAYER_NEUTRAL_AGGRESSIVE: "integer", + PLAYER_COLOR_RED: "playercolor", + PLAYER_COLOR_BLUE: "playercolor", + PLAYER_COLOR_CYAN: "playercolor", + PLAYER_COLOR_PURPLE: "playercolor", + PLAYER_COLOR_YELLOW: "playercolor", + PLAYER_COLOR_ORANGE: "playercolor", + PLAYER_COLOR_GREEN: "playercolor", + PLAYER_COLOR_PINK: "playercolor", + PLAYER_COLOR_LIGHT_GRAY: "playercolor", + PLAYER_COLOR_LIGHT_BLUE: "playercolor", + PLAYER_COLOR_AQUA: "playercolor", + PLAYER_COLOR_BROWN: "playercolor", + PLAYER_COLOR_MAROON: "playercolor", + PLAYER_COLOR_NAVY: "playercolor", + PLAYER_COLOR_TURQUOISE: "playercolor", + PLAYER_COLOR_VIOLET: "playercolor", + PLAYER_COLOR_WHEAT: "playercolor", + PLAYER_COLOR_PEACH: "playercolor", + PLAYER_COLOR_MINT: "playercolor", + PLAYER_COLOR_LAVENDER: "playercolor", + PLAYER_COLOR_COAL: "playercolor", + PLAYER_COLOR_SNOW: "playercolor", + PLAYER_COLOR_EMERALD: "playercolor", + PLAYER_COLOR_PEANUT: "playercolor", + RACE_HUMAN: "race", + RACE_ORC: "race", + RACE_UNDEAD: "race", + RACE_NIGHTELF: "race", + RACE_DEMON: "race", + RACE_OTHER: "race", + PLAYER_GAME_RESULT_VICTORY: "playergameresult", + PLAYER_GAME_RESULT_DEFEAT: "playergameresult", + PLAYER_GAME_RESULT_TIE: "playergameresult", + PLAYER_GAME_RESULT_NEUTRAL: "playergameresult", + ALLIANCE_PASSIVE: "alliancetype", + ALLIANCE_HELP_REQUEST: "alliancetype", + ALLIANCE_HELP_RESPONSE: "alliancetype", + ALLIANCE_SHARED_XP: "alliancetype", + ALLIANCE_SHARED_SPELLS: "alliancetype", + ALLIANCE_SHARED_VISION: "alliancetype", + ALLIANCE_SHARED_CONTROL: "alliancetype", + ALLIANCE_SHARED_ADVANCED_CONTROL: "alliancetype", + ALLIANCE_RESCUABLE: "alliancetype", + ALLIANCE_SHARED_VISION_FORCED: "alliancetype", + VERSION_REIGN_OF_CHAOS: "version", + VERSION_FROZEN_THRONE: "version", + ATTACK_TYPE_NORMAL: "attacktype", + ATTACK_TYPE_MELEE: "attacktype", + ATTACK_TYPE_PIERCE: "attacktype", + ATTACK_TYPE_SIEGE: "attacktype", + ATTACK_TYPE_MAGIC: "attacktype", + ATTACK_TYPE_CHAOS: "attacktype", + ATTACK_TYPE_HERO: "attacktype", + DAMAGE_TYPE_UNKNOWN: "damagetype", + DAMAGE_TYPE_NORMAL: "damagetype", + DAMAGE_TYPE_ENHANCED: "damagetype", + DAMAGE_TYPE_FIRE: "damagetype", + DAMAGE_TYPE_COLD: "damagetype", + DAMAGE_TYPE_LIGHTNING: "damagetype", + DAMAGE_TYPE_POISON: "damagetype", + DAMAGE_TYPE_DISEASE: "damagetype", + DAMAGE_TYPE_DIVINE: "damagetype", + DAMAGE_TYPE_MAGIC: "damagetype", + DAMAGE_TYPE_SONIC: "damagetype", + DAMAGE_TYPE_ACID: "damagetype", + DAMAGE_TYPE_FORCE: "damagetype", + DAMAGE_TYPE_DEATH: "damagetype", + DAMAGE_TYPE_MIND: "damagetype", + DAMAGE_TYPE_PLANT: "damagetype", + DAMAGE_TYPE_DEFENSIVE: "damagetype", + DAMAGE_TYPE_DEMOLITION: "damagetype", + DAMAGE_TYPE_SLOW_POISON: "damagetype", + DAMAGE_TYPE_SPIRIT_LINK: "damagetype", + DAMAGE_TYPE_SHADOW_STRIKE: "damagetype", + DAMAGE_TYPE_UNIVERSAL: "damagetype", + WEAPON_TYPE_WHOKNOWS: "weapontype", + WEAPON_TYPE_METAL_LIGHT_CHOP: "weapontype", + WEAPON_TYPE_METAL_MEDIUM_CHOP: "weapontype", + WEAPON_TYPE_METAL_HEAVY_CHOP: "weapontype", + WEAPON_TYPE_METAL_LIGHT_SLICE: "weapontype", + WEAPON_TYPE_METAL_MEDIUM_SLICE: "weapontype", + WEAPON_TYPE_METAL_HEAVY_SLICE: "weapontype", + WEAPON_TYPE_METAL_MEDIUM_BASH: "weapontype", + WEAPON_TYPE_METAL_HEAVY_BASH: "weapontype", + WEAPON_TYPE_METAL_MEDIUM_STAB: "weapontype", + WEAPON_TYPE_METAL_HEAVY_STAB: "weapontype", + WEAPON_TYPE_WOOD_LIGHT_SLICE: "weapontype", + WEAPON_TYPE_WOOD_MEDIUM_SLICE: "weapontype", + WEAPON_TYPE_WOOD_HEAVY_SLICE: "weapontype", + WEAPON_TYPE_WOOD_LIGHT_BASH: "weapontype", + WEAPON_TYPE_WOOD_MEDIUM_BASH: "weapontype", + WEAPON_TYPE_WOOD_HEAVY_BASH: "weapontype", + WEAPON_TYPE_WOOD_LIGHT_STAB: "weapontype", + WEAPON_TYPE_WOOD_MEDIUM_STAB: "weapontype", + WEAPON_TYPE_CLAW_LIGHT_SLICE: "weapontype", + WEAPON_TYPE_CLAW_MEDIUM_SLICE: "weapontype", + WEAPON_TYPE_CLAW_HEAVY_SLICE: "weapontype", + WEAPON_TYPE_AXE_MEDIUM_CHOP: "weapontype", + WEAPON_TYPE_ROCK_HEAVY_BASH: "weapontype", + PATHING_TYPE_ANY: "pathingtype", + PATHING_TYPE_WALKABILITY: "pathingtype", + PATHING_TYPE_FLYABILITY: "pathingtype", + PATHING_TYPE_BUILDABILITY: "pathingtype", + PATHING_TYPE_PEONHARVESTPATHING: "pathingtype", + PATHING_TYPE_BLIGHTPATHING: "pathingtype", + PATHING_TYPE_FLOATABILITY: "pathingtype", + PATHING_TYPE_AMPHIBIOUSPATHING: "pathingtype", + MAPPED_FIELD_ATTACHMENT: "mappedfield", + MAPPED_FIELD_BONE: "mappedfield", + MAPPED_FIELD_ANIMATION: "mappedfield", + MAPPED_FIELD_SUB_ANIMATION: "mappedfield", + MAPPED_CURSOR_SUB_ANIMATION: "mappedfield", + ATTACHMENT_TYPE_CHEST: "attachmenttype", + ATTACHMENT_TYPE_FEET: "attachmenttype", + ATTACHMENT_TYPE_FOOT: "attachmenttype", + ATTACHMENT_TYPE_HAND: "attachmenttype", + ATTACHMENT_TYPE_HEAD: "attachmenttype", + ATTACHMENT_TYPE_ORIGIN: "attachmenttype", + ATTACHMENT_TYPE_OVERHEAD: "attachmenttype", + ATTACHMENT_TYPE_SPRITE: "attachmenttype", + ATTACHMENT_TYPE_WEAPON: "attachmenttype", + ATTACHMENT_TYPE_ALTERNATE: "attachmenttype", + ATTACHMENT_TYPE_LEFT: "attachmenttype", + ATTACHMENT_TYPE_RIGHT: "attachmenttype", + ATTACHMENT_TYPE_MOUNT: "attachmenttype", + ATTACHMENT_TYPE_REAR: "attachmenttype", + ATTACHMENT_TYPE_SMART: "attachmenttype", + ATTACHMENT_TYPE_FIRST: "attachmenttype", + ATTACHMENT_TYPE_SECOND: "attachmenttype", + ATTACHMENT_TYPE_THIRD: "attachmenttype", + ATTACHMENT_TYPE_FOURTH: "attachmenttype", + ATTACHMENT_TYPE_FIFTH: "attachmenttype", + ATTACHMENT_TYPE_SIXTH: "attachmenttype", + ATTACHMENT_TYPE_SMALL: "attachmenttype", + ATTACHMENT_TYPE_MEDIUM: "attachmenttype", + ATTACHMENT_TYPE_LARGE: "attachmenttype", + ATTACHMENT_TYPE_GOLD: "attachmenttype", + ATTACHMENT_TYPE_RALLYPOINT: "attachmenttype", + ATTACHMENT_TYPE_EAT_TREE: "attachmenttype", + BONE_TYPE_CHEST: "bonetype", + BONE_TYPE_FOOT: "bonetype", + BONE_TYPE_HAND: "bonetype", + BONE_TYPE_HEAD: "bonetype", + BONE_TYPE_TURRET: "bonetype", + BONE_TYPE_ALTERNATE: "bonetype", + BONE_TYPE_LEFT: "bonetype", + BONE_TYPE_RIGHT: "bonetype", + BONE_TYPE_MOUNT: "bonetype", + BONE_TYPE_SMART: "bonetype", + ANIM_TYPE_BIRTH: "animtype", + ANIM_TYPE_DEATH: "animtype", + ANIM_TYPE_DECAY: "animtype", + ANIM_TYPE_DISSIPATE: "animtype", + ANIM_TYPE_STAND: "animtype", + ANIM_TYPE_WALK: "animtype", + ANIM_TYPE_ATTACK: "animtype", + ANIM_TYPE_MORPH: "animtype", + ANIM_TYPE_SLEEP: "animtype", + ANIM_TYPE_SPELL: "animtype", + ANIM_TYPE_PORTRAIT: "animtype", + SUBANIM_TYPE_ROOTED: "subanimtype", + SUBANIM_TYPE_ALTERNATE_EX: "subanimtype", + SUBANIM_TYPE_LOOPING: "subanimtype", + SUBANIM_TYPE_SLAM: "subanimtype", + SUBANIM_TYPE_THROW: "subanimtype", + SUBANIM_TYPE_SPIKED: "subanimtype", + SUBANIM_TYPE_FAST: "subanimtype", + SUBANIM_TYPE_SPIN: "subanimtype", + SUBANIM_TYPE_READY: "subanimtype", + SUBANIM_TYPE_CHANNEL: "subanimtype", + SUBANIM_TYPE_DEFEND: "subanimtype", + SUBANIM_TYPE_VICTORY: "subanimtype", + SUBANIM_TYPE_TURN: "subanimtype", + SUBANIM_TYPE_LEFT: "subanimtype", + SUBANIM_TYPE_RIGHT: "subanimtype", + SUBANIM_TYPE_FIRE: "subanimtype", + SUBANIM_TYPE_FLESH: "subanimtype", + SUBANIM_TYPE_HIT: "subanimtype", + SUBANIM_TYPE_WOUNDED: "subanimtype", + SUBANIM_TYPE_LIGHT: "subanimtype", + SUBANIM_TYPE_MODERATE: "subanimtype", + SUBANIM_TYPE_SEVERE: "subanimtype", + SUBANIM_TYPE_CRITICAL: "subanimtype", + SUBANIM_TYPE_COMPLETE: "subanimtype", + SUBANIM_TYPE_GOLD: "subanimtype", + SUBANIM_TYPE_LUMBER: "subanimtype", + SUBANIM_TYPE_WORK: "subanimtype", + SUBANIM_TYPE_TALK: "subanimtype", + SUBANIM_TYPE_FIRST: "subanimtype", + SUBANIM_TYPE_SECOND: "subanimtype", + SUBANIM_TYPE_THIRD: "subanimtype", + SUBANIM_TYPE_FOURTH: "subanimtype", + SUBANIM_TYPE_FIFTH: "subanimtype", + SUBANIM_TYPE_ONE: "subanimtype", + SUBANIM_TYPE_TWO: "subanimtype", + SUBANIM_TYPE_THREE: "subanimtype", + SUBANIM_TYPE_FOUR: "subanimtype", + SUBANIM_TYPE_FIVE: "subanimtype", + SUBANIM_TYPE_SMALL: "subanimtype", + SUBANIM_TYPE_MEDIUM: "subanimtype", + SUBANIM_TYPE_LARGE: "subanimtype", + SUBANIM_TYPE_UPGRADE: "subanimtype", + SUBANIM_TYPE_DRAIN: "subanimtype", + SUBANIM_TYPE_FILL: "subanimtype", + SUBANIM_TYPE_CHAINLIGHTNING: "subanimtype", + SUBANIM_TYPE_EATTREE: "subanimtype", + SUBANIM_TYPE_PUKE: "subanimtype", + SUBANIM_TYPE_FLAIL: "subanimtype", + SUBANIM_TYPE_OFF: "subanimtype", + SUBANIM_TYPE_SWIM: "subanimtype", + SUBANIM_TYPE_ENTANGLE: "subanimtype", + SUBANIM_TYPE_BERSERK: "subanimtype", + CURSORANIM_TYPE_NORMAL: "cursoranimtype", + CURSORANIM_TYPE_SELECT: "cursoranimtype", + CURSORANIM_TYPE_TARGET: "cursoranimtype", + CURSORANIM_TYPE_TARGET_SELECT: "cursoranimtype", + CURSORANIM_TYPE_INVALID_TARGET: "cursoranimtype", + CURSORANIM_TYPE_HOLD_ITEM: "cursoranimtype", + CURSORANIM_TYPE_SCROLL: "cursoranimtype", + CURSORANIM_TYPE_LEFT: "cursoranimtype", + CURSORANIM_TYPE_RIGHT: "cursoranimtype", + CURSORANIM_TYPE_UP: "cursoranimtype", + CURSORANIM_TYPE_DOWN: "cursoranimtype", + RACE_PREF_HUMAN: "racepreference", + RACE_PREF_ORC: "racepreference", + RACE_PREF_NIGHTELF: "racepreference", + RACE_PREF_UNDEAD: "racepreference", + RACE_PREF_DEMON: "racepreference", + RACE_PREF_RANDOM: "racepreference", + RACE_PREF_USER_SELECTABLE: "racepreference", + MAP_CONTROL_USER: "mapcontrol", + MAP_CONTROL_COMPUTER: "mapcontrol", + MAP_CONTROL_RESCUABLE: "mapcontrol", + MAP_CONTROL_NEUTRAL: "mapcontrol", + MAP_CONTROL_CREEP: "mapcontrol", + MAP_CONTROL_NONE: "mapcontrol", + GAME_TYPE_MELEE: "gametype", + GAME_TYPE_FFA: "gametype", + GAME_TYPE_USE_MAP_SETTINGS: "gametype", + GAME_TYPE_BLIZ: "gametype", + GAME_TYPE_ONE_ON_ONE: "gametype", + GAME_TYPE_TWO_TEAM_PLAY: "gametype", + GAME_TYPE_THREE_TEAM_PLAY: "gametype", + GAME_TYPE_FOUR_TEAM_PLAY: "gametype", + MAP_FOG_HIDE_TERRAIN: "mapflag", + MAP_FOG_MAP_EXPLORED: "mapflag", + MAP_FOG_ALWAYS_VISIBLE: "mapflag", + MAP_USE_HANDICAPS: "mapflag", + MAP_OBSERVERS: "mapflag", + MAP_OBSERVERS_ON_DEATH: "mapflag", + MAP_FIXED_COLORS: "mapflag", + MAP_LOCK_RESOURCE_TRADING: "mapflag", + MAP_RESOURCE_TRADING_ALLIES_ONLY: "mapflag", + MAP_LOCK_ALLIANCE_CHANGES: "mapflag", + MAP_ALLIANCE_CHANGES_HIDDEN: "mapflag", + MAP_CHEATS: "mapflag", + MAP_CHEATS_HIDDEN: "mapflag", + MAP_LOCK_SPEED: "mapflag", + MAP_LOCK_RANDOM_SEED: "mapflag", + MAP_SHARED_ADVANCED_CONTROL: "mapflag", + MAP_RANDOM_HERO: "mapflag", + MAP_RANDOM_RACES: "mapflag", + MAP_RELOADED: "mapflag", + MAP_PLACEMENT_RANDOM: "placement", + MAP_PLACEMENT_FIXED: "placement", + MAP_PLACEMENT_USE_MAP_SETTINGS: "placement", + MAP_PLACEMENT_TEAMS_TOGETHER: "placement", + MAP_LOC_PRIO_LOW: "startlocprio", + MAP_LOC_PRIO_HIGH: "startlocprio", + MAP_LOC_PRIO_NOT: "startlocprio", + MAP_DENSITY_NONE: "mapdensity", + MAP_DENSITY_LIGHT: "mapdensity", + MAP_DENSITY_MEDIUM: "mapdensity", + MAP_DENSITY_HEAVY: "mapdensity", + MAP_DIFFICULTY_EASY: "gamedifficulty", + MAP_DIFFICULTY_NORMAL: "gamedifficulty", + MAP_DIFFICULTY_HARD: "gamedifficulty", + MAP_DIFFICULTY_INSANE: "gamedifficulty", + MAP_SPEED_SLOWEST: "gamespeed", + MAP_SPEED_SLOW: "gamespeed", + MAP_SPEED_NORMAL: "gamespeed", + MAP_SPEED_FAST: "gamespeed", + MAP_SPEED_FASTEST: "gamespeed", + PLAYER_SLOT_STATE_EMPTY: "playerslotstate", + PLAYER_SLOT_STATE_PLAYING: "playerslotstate", + PLAYER_SLOT_STATE_LEFT: "playerslotstate", + SOUND_VOLUMEGROUP_UNITMOVEMENT: "volumegroup", + SOUND_VOLUMEGROUP_UNITSOUNDS: "volumegroup", + SOUND_VOLUMEGROUP_COMBAT: "volumegroup", + SOUND_VOLUMEGROUP_SPELLS: "volumegroup", + SOUND_VOLUMEGROUP_UI: "volumegroup", + SOUND_VOLUMEGROUP_MUSIC: "volumegroup", + SOUND_VOLUMEGROUP_AMBIENTSOUNDS: "volumegroup", + SOUND_VOLUMEGROUP_FIRE: "volumegroup", + GAME_STATE_DIVINE_INTERVENTION: "igamestate", + GAME_STATE_DISCONNECTED: "igamestate", + GAME_STATE_TIME_OF_DAY: "fgamestate", + PLAYER_STATE_GAME_RESULT: "playerstate", + PLAYER_STATE_RESOURCE_GOLD: "playerstate", + PLAYER_STATE_RESOURCE_LUMBER: "playerstate", + PLAYER_STATE_RESOURCE_HERO_TOKENS: "playerstate", + PLAYER_STATE_RESOURCE_FOOD_CAP: "playerstate", + PLAYER_STATE_RESOURCE_FOOD_USED: "playerstate", + PLAYER_STATE_FOOD_CAP_CEILING: "playerstate", + PLAYER_STATE_GIVES_BOUNTY: "playerstate", + PLAYER_STATE_ALLIED_VICTORY: "playerstate", + PLAYER_STATE_PLACED: "playerstate", + PLAYER_STATE_OBSERVER_ON_DEATH: "playerstate", + PLAYER_STATE_OBSERVER: "playerstate", + PLAYER_STATE_UNFOLLOWABLE: "playerstate", + PLAYER_STATE_GOLD_UPKEEP_RATE: "playerstate", + PLAYER_STATE_LUMBER_UPKEEP_RATE: "playerstate", + PLAYER_STATE_GOLD_GATHERED: "playerstate", + PLAYER_STATE_LUMBER_GATHERED: "playerstate", + PLAYER_STATE_NO_CREEP_SLEEP: "playerstate", + UNIT_STATE_LIFE: "unitstate", + UNIT_STATE_MAX_LIFE: "unitstate", + UNIT_STATE_MANA: "unitstate", + UNIT_STATE_MAX_MANA: "unitstate", + AI_DIFFICULTY_NEWBIE: "aidifficulty", + AI_DIFFICULTY_NORMAL: "aidifficulty", + AI_DIFFICULTY_INSANE: "aidifficulty", + PLAYER_SCORE_UNITS_TRAINED: "playerscore", + PLAYER_SCORE_UNITS_KILLED: "playerscore", + PLAYER_SCORE_STRUCT_BUILT: "playerscore", + PLAYER_SCORE_STRUCT_RAZED: "playerscore", + PLAYER_SCORE_TECH_PERCENT: "playerscore", + PLAYER_SCORE_FOOD_MAXPROD: "playerscore", + PLAYER_SCORE_FOOD_MAXUSED: "playerscore", + PLAYER_SCORE_HEROES_KILLED: "playerscore", + PLAYER_SCORE_ITEMS_GAINED: "playerscore", + PLAYER_SCORE_MERCS_HIRED: "playerscore", + PLAYER_SCORE_GOLD_MINED_TOTAL: "playerscore", + PLAYER_SCORE_GOLD_MINED_UPKEEP: "playerscore", + PLAYER_SCORE_GOLD_LOST_UPKEEP: "playerscore", + PLAYER_SCORE_GOLD_LOST_TAX: "playerscore", + PLAYER_SCORE_GOLD_GIVEN: "playerscore", + PLAYER_SCORE_GOLD_RECEIVED: "playerscore", + PLAYER_SCORE_LUMBER_TOTAL: "playerscore", + PLAYER_SCORE_LUMBER_LOST_UPKEEP: "playerscore", + PLAYER_SCORE_LUMBER_LOST_TAX: "playerscore", + PLAYER_SCORE_LUMBER_GIVEN: "playerscore", + PLAYER_SCORE_LUMBER_RECEIVED: "playerscore", + PLAYER_SCORE_UNIT_TOTAL: "playerscore", + PLAYER_SCORE_HERO_TOTAL: "playerscore", + PLAYER_SCORE_RESOURCE_TOTAL: "playerscore", + PLAYER_SCORE_TOTAL: "playerscore", + EVENT_GAME_VICTORY: "gameevent", + EVENT_GAME_END_LEVEL: "gameevent", + EVENT_GAME_VARIABLE_LIMIT: "gameevent", + EVENT_GAME_STATE_LIMIT: "gameevent", + EVENT_GAME_TIMER_EXPIRED: "gameevent", + EVENT_GAME_ENTER_REGION: "gameevent", + EVENT_GAME_LEAVE_REGION: "gameevent", + EVENT_GAME_TRACKABLE_HIT: "gameevent", + EVENT_GAME_TRACKABLE_TRACK: "gameevent", + EVENT_GAME_SHOW_SKILL: "gameevent", + EVENT_GAME_BUILD_SUBMENU: "gameevent", + EVENT_PLAYER_STATE_LIMIT: "playerevent", + EVENT_PLAYER_ALLIANCE_CHANGED: "playerevent", + EVENT_PLAYER_DEFEAT: "playerevent", + EVENT_PLAYER_VICTORY: "playerevent", + EVENT_PLAYER_LEAVE: "playerevent", + EVENT_PLAYER_CHAT: "playerevent", + EVENT_PLAYER_END_CINEMATIC: "playerevent", + EVENT_PLAYER_UNIT_ATTACKED: "playerunitevent", + EVENT_PLAYER_UNIT_RESCUED: "playerunitevent", + EVENT_PLAYER_UNIT_DEATH: "playerunitevent", + EVENT_PLAYER_UNIT_DECAY: "playerunitevent", + EVENT_PLAYER_UNIT_DETECTED: "playerunitevent", + EVENT_PLAYER_UNIT_HIDDEN: "playerunitevent", + EVENT_PLAYER_UNIT_SELECTED: "playerunitevent", + EVENT_PLAYER_UNIT_DESELECTED: "playerunitevent", + EVENT_PLAYER_UNIT_CONSTRUCT_START: "playerunitevent", + EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL: "playerunitevent", + EVENT_PLAYER_UNIT_CONSTRUCT_FINISH: "playerunitevent", + EVENT_PLAYER_UNIT_UPGRADE_START: "playerunitevent", + EVENT_PLAYER_UNIT_UPGRADE_CANCEL: "playerunitevent", + EVENT_PLAYER_UNIT_UPGRADE_FINISH: "playerunitevent", + EVENT_PLAYER_UNIT_TRAIN_START: "playerunitevent", + EVENT_PLAYER_UNIT_TRAIN_CANCEL: "playerunitevent", + EVENT_PLAYER_UNIT_TRAIN_FINISH: "playerunitevent", + EVENT_PLAYER_UNIT_RESEARCH_START: "playerunitevent", + EVENT_PLAYER_UNIT_RESEARCH_CANCEL: "playerunitevent", + EVENT_PLAYER_UNIT_RESEARCH_FINISH: "playerunitevent", + EVENT_PLAYER_UNIT_ISSUED_ORDER: "playerunitevent", + EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER: "playerunitevent", + EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER: "playerunitevent", + EVENT_PLAYER_UNIT_ISSUED_UNIT_ORDER: "playerunitevent", + EVENT_PLAYER_HERO_LEVEL: "playerunitevent", + EVENT_PLAYER_HERO_SKILL: "playerunitevent", + EVENT_PLAYER_HERO_REVIVABLE: "playerunitevent", + EVENT_PLAYER_HERO_REVIVE_START: "playerunitevent", + EVENT_PLAYER_HERO_REVIVE_CANCEL: "playerunitevent", + EVENT_PLAYER_HERO_REVIVE_FINISH: "playerunitevent", + EVENT_PLAYER_UNIT_SUMMON: "playerunitevent", + EVENT_PLAYER_UNIT_DROP_ITEM: "playerunitevent", + EVENT_PLAYER_UNIT_PICKUP_ITEM: "playerunitevent", + EVENT_PLAYER_UNIT_USE_ITEM: "playerunitevent", + EVENT_PLAYER_UNIT_LOADED: "playerunitevent", + EVENT_PLAYER_UNIT_DAMAGED: "playerunitevent", + EVENT_PLAYER_UNIT_DAMAGING: "playerunitevent", + EVENT_PLAYER_UNIT_ATTACK_FINISHED: "playerunitevent", + EVENT_PLAYER_UNIT_DECAY_FINISHED: "playerunitevent", + EVENT_UNIT_DAMAGED: "unitevent", + EVENT_UNIT_DAMAGING: "unitevent", + EVENT_UNIT_DEATH: "unitevent", + EVENT_UNIT_DECAY: "unitevent", + EVENT_UNIT_DETECTED: "unitevent", + EVENT_UNIT_HIDDEN: "unitevent", + EVENT_UNIT_SELECTED: "unitevent", + EVENT_UNIT_DESELECTED: "unitevent", + EVENT_UNIT_STATE_LIMIT: "unitevent", + EVENT_UNIT_ACQUIRED_TARGET: "unitevent", + EVENT_UNIT_TARGET_IN_RANGE: "unitevent", + EVENT_UNIT_ATTACKED: "unitevent", + EVENT_UNIT_RESCUED: "unitevent", + EVENT_UNIT_CONSTRUCT_CANCEL: "unitevent", + EVENT_UNIT_CONSTRUCT_FINISH: "unitevent", + EVENT_UNIT_UPGRADE_START: "unitevent", + EVENT_UNIT_UPGRADE_CANCEL: "unitevent", + EVENT_UNIT_UPGRADE_FINISH: "unitevent", + EVENT_UNIT_TRAIN_START: "unitevent", + EVENT_UNIT_TRAIN_CANCEL: "unitevent", + EVENT_UNIT_TRAIN_FINISH: "unitevent", + EVENT_UNIT_RESEARCH_START: "unitevent", + EVENT_UNIT_RESEARCH_CANCEL: "unitevent", + EVENT_UNIT_RESEARCH_FINISH: "unitevent", + EVENT_UNIT_ISSUED_ORDER: "unitevent", + EVENT_UNIT_ISSUED_POINT_ORDER: "unitevent", + EVENT_UNIT_ISSUED_TARGET_ORDER: "unitevent", + EVENT_UNIT_HERO_LEVEL: "unitevent", + EVENT_UNIT_HERO_SKILL: "unitevent", + EVENT_UNIT_HERO_REVIVABLE: "unitevent", + EVENT_UNIT_HERO_REVIVE_START: "unitevent", + EVENT_UNIT_HERO_REVIVE_CANCEL: "unitevent", + EVENT_UNIT_HERO_REVIVE_FINISH: "unitevent", + EVENT_UNIT_SUMMON: "unitevent", + EVENT_UNIT_DROP_ITEM: "unitevent", + EVENT_UNIT_PICKUP_ITEM: "unitevent", + EVENT_UNIT_USE_ITEM: "unitevent", + EVENT_UNIT_LOADED: "unitevent", + EVENT_UNIT_ATTACK_FINISHED: "unitevent", + EVENT_UNIT_DECAY_FINISHED: "unitevent", + EVENT_WIDGET_DEATH: "widgetevent", + EVENT_WIDGET_DAMAGING: "widgetevent", + EVENT_WIDGET_DAMAGED: "widgetevent", + EVENT_DIALOG_BUTTON_CLICK: "dialogevent", + EVENT_DIALOG_CLICK: "dialogevent", + EVENT_GAME_LOADED: "gameevent", + EVENT_GAME_TOURNAMENT_FINISH_SOON: "gameevent", + EVENT_GAME_TOURNAMENT_FINISH_NOW: "gameevent", + EVENT_GAME_SAVE: "gameevent", + EVENT_PLAYER_ARROW_LEFT_DOWN: "playerevent", + EVENT_PLAYER_ARROW_LEFT_UP: "playerevent", + EVENT_PLAYER_ARROW_RIGHT_DOWN: "playerevent", + EVENT_PLAYER_ARROW_RIGHT_UP: "playerevent", + EVENT_PLAYER_ARROW_DOWN_DOWN: "playerevent", + EVENT_PLAYER_ARROW_DOWN_UP: "playerevent", + EVENT_PLAYER_ARROW_UP_DOWN: "playerevent", + EVENT_PLAYER_ARROW_UP_UP: "playerevent", + EVENT_PLAYER_MOUSE_DOWN: "playerevent", + EVENT_PLAYER_MOUSE_UP: "playerevent", + EVENT_PLAYER_MOUSE_MOVE: "playerevent", + EVENT_PLAYER_SYNC_DATA: "playerevent", + EVENT_PLAYER_KEY: "playerevent", + EVENT_PLAYER_KEY_DOWN: "playerevent", + EVENT_PLAYER_KEY_UP: "playerevent", + EVENT_PLAYER_UNIT_SELL: "playerunitevent", + EVENT_PLAYER_UNIT_CHANGE_OWNER: "playerunitevent", + EVENT_PLAYER_UNIT_SELL_ITEM: "playerunitevent", + EVENT_PLAYER_UNIT_SPELL_CHANNEL: "playerunitevent", + EVENT_PLAYER_UNIT_SPELL_CAST: "playerunitevent", + EVENT_PLAYER_UNIT_SPELL_EFFECT: "playerunitevent", + EVENT_PLAYER_UNIT_SPELL_FINISH: "playerunitevent", + EVENT_PLAYER_UNIT_SPELL_ENDCAST: "playerunitevent", + EVENT_PLAYER_UNIT_PAWN_ITEM: "playerunitevent", + EVENT_PLAYER_UNIT_BUFF_RECEIVED: "playerunitevent", + EVENT_PLAYER_UNIT_BUFF_REFRESHED: "playerunitevent", + EVENT_PLAYER_UNIT_BUFF_ENDED: "playerunitevent", + EVENT_PLAYER_UNIT_PROJECTILE_LAUNCH: "playerunitevent", + EVENT_PLAYER_UNIT_PROJECTILE_HIT: "playerunitevent", + EVENT_UNIT_SELL: "unitevent", + EVENT_UNIT_CHANGE_OWNER: "unitevent", + EVENT_UNIT_SELL_ITEM: "unitevent", + EVENT_UNIT_SPELL_CHANNEL: "unitevent", + EVENT_UNIT_SPELL_CAST: "unitevent", + EVENT_UNIT_SPELL_EFFECT: "unitevent", + EVENT_UNIT_SPELL_FINISH: "unitevent", + EVENT_UNIT_SPELL_ENDCAST: "unitevent", + EVENT_UNIT_PAWN_ITEM: "unitevent", + EVENT_UNIT_BUFF_RECEIVED: "unitevent", + EVENT_UNIT_BUFF_REFRESHED: "unitevent", + EVENT_UNIT_BUFF_ENDED: "unitevent", + EVENT_UNIT_PROJECTILE_LAUNCH: "unitevent", + EVENT_UNIT_PROJECTILE_HIT: "unitevent", + LESS_THAN: "limitop", + LESS_THAN_OR_EQUAL: "limitop", + EQUAL: "limitop", + GREATER_THAN_OR_EQUAL: "limitop", + GREATER_THAN: "limitop", + NOT_EQUAL: "limitop", + UNIT_TYPE_HERO: "unittype", + UNIT_TYPE_DEAD: "unittype", + UNIT_TYPE_STRUCTURE: "unittype", + UNIT_TYPE_FLYING: "unittype", + UNIT_TYPE_GROUND: "unittype", + UNIT_TYPE_ATTACKS_FLYING: "unittype", + UNIT_TYPE_ATTACKS_GROUND: "unittype", + UNIT_TYPE_MELEE_ATTACKER: "unittype", + UNIT_TYPE_RANGED_ATTACKER: "unittype", + UNIT_TYPE_GIANT: "unittype", + UNIT_TYPE_SUMMONED: "unittype", + UNIT_TYPE_STUNNED: "unittype", + UNIT_TYPE_PLAGUED: "unittype", + UNIT_TYPE_SNARED: "unittype", + UNIT_TYPE_UNDEAD: "unittype", + UNIT_TYPE_MECHANICAL: "unittype", + UNIT_TYPE_PEON: "unittype", + UNIT_TYPE_SAPPER: "unittype", + UNIT_TYPE_TOWNHALL: "unittype", + UNIT_TYPE_ANCIENT: "unittype", + UNIT_TYPE_TAUREN: "unittype", + UNIT_TYPE_POISONED: "unittype", + UNIT_TYPE_POLYMORPHED: "unittype", + UNIT_TYPE_SLEEPING: "unittype", + UNIT_TYPE_RESISTANT: "unittype", + UNIT_TYPE_ETHEREAL: "unittype", + UNIT_TYPE_MAGIC_IMMUNE: "unittype", + PROJECTILE_TYPE_BULLET: "projectiletype", + PROJECTILE_TYPE_MISSILE: "projectiletype", + PROJECTILE_TYPE_ARTILLERY: "projectiletype", + PROJECTILE_TYPE_VISIBLE: "projectiletype", + PROJECTILE_TYPE_DEAD: "projectiletype", + ITEM_TYPE_PERMANENT: "itemtype", + ITEM_TYPE_CHARGED: "itemtype", + ITEM_TYPE_POWERUP: "itemtype", + ITEM_TYPE_ARTIFACT: "itemtype", + ITEM_TYPE_PURCHASABLE: "itemtype", + ITEM_TYPE_CAMPAIGN: "itemtype", + ITEM_TYPE_MISCELLANEOUS: "itemtype", + ITEM_TYPE_UNKNOWN: "itemtype", + ITEM_TYPE_ANY: "itemtype", + ITEM_TYPE_TOME: "itemtype", + CAMERA_FIELD_TARGET_DISTANCE: "camerafield", + CAMERA_FIELD_FARZ: "camerafield", + CAMERA_FIELD_ANGLE_OF_ATTACK: "camerafield", + CAMERA_FIELD_FIELD_OF_VIEW: "camerafield", + CAMERA_FIELD_ROLL: "camerafield", + CAMERA_FIELD_ROTATION: "camerafield", + CAMERA_FIELD_ZOFFSET: "camerafield", + CAMERA_FIELD_NEARZ: "camerafield", + CAMERA_FIELD_LOCAL_PITCH: "camerafield", + CAMERA_FIELD_LOCAL_YAW: "camerafield", + CAMERA_FIELD_LOCAL_ROLL: "camerafield", + BLEND_MODE_NONE: "blendmode", + BLEND_MODE_DONT_CARE: "blendmode", + BLEND_MODE_KEYALPHA: "blendmode", + BLEND_MODE_BLEND: "blendmode", + BLEND_MODE_ADDITIVE: "blendmode", + BLEND_MODE_MODULATE: "blendmode", + BLEND_MODE_MODULATE_2X: "blendmode", + RARITY_FREQUENT: "raritycontrol", + RARITY_RARE: "raritycontrol", + RARITY_QUEUE: "raritycontrol", + TEXMAP_FLAG_NONE: "texmapflags", + TEXMAP_FLAG_WRAP_U: "texmapflags", + TEXMAP_FLAG_WRAP_V: "texmapflags", + TEXMAP_FLAG_WRAP_UV: "texmapflags", + FOG_OF_WAR_MASKED: "fogstate", + FOG_OF_WAR_FOGGED: "fogstate", + FOG_OF_WAR_VISIBLE: "fogstate", + CAMERA_MARGIN_LEFT: "integer", + CAMERA_MARGIN_RIGHT: "integer", + CAMERA_MARGIN_TOP: "integer", + CAMERA_MARGIN_BOTTOM: "integer", + EFFECT_TYPE_EFFECT: "effecttype", + EFFECT_TYPE_TARGET: "effecttype", + EFFECT_TYPE_CASTER: "effecttype", + EFFECT_TYPE_SPECIAL: "effecttype", + EFFECT_TYPE_AREA_EFFECT: "effecttype", + EFFECT_TYPE_MISSILE: "effecttype", + EFFECT_TYPE_LIGHTNING: "effecttype", + SOUND_TYPE_EFFECT: "soundtype", + SOUND_TYPE_EFFECT_LOOPED: "soundtype", + ORIGIN_FRAME_GAME_UI: "originframetype", + ORIGIN_FRAME_COMMAND_BUTTON: "originframetype", + ORIGIN_FRAME_HERO_BAR: "originframetype", + ORIGIN_FRAME_HERO_BUTTON: "originframetype", + ORIGIN_FRAME_HERO_HP_BAR: "originframetype", + ORIGIN_FRAME_HERO_MANA_BAR: "originframetype", + ORIGIN_FRAME_HERO_BUTTON_INDICATOR: "originframetype", + ORIGIN_FRAME_ITEM_BUTTON: "originframetype", + ORIGIN_FRAME_MINIMAP: "originframetype", + ORIGIN_FRAME_MINIMAP_BUTTON: "originframetype", + ORIGIN_FRAME_SYSTEM_BUTTON: "originframetype", + ORIGIN_FRAME_TOOLTIP: "originframetype", + ORIGIN_FRAME_UBERTOOLTIP: "originframetype", + ORIGIN_FRAME_CHAT_MSG: "originframetype", + ORIGIN_FRAME_UNIT_MSG: "originframetype", + ORIGIN_FRAME_TOP_MSG: "originframetype", + ORIGIN_FRAME_PORTRAIT: "originframetype", + ORIGIN_FRAME_WORLD_FRAME: "originframetype", + ORIGIN_FRAME_CONSOLE_UI: "originframetype", + ORIGIN_FRAME_PORTRAIT_TEXT: "originframetype", + ORIGIN_FRAME_BUFF_BAR: "originframetype", + ORIGIN_FRAME_BUFF_BAR_TEXT: "originframetype", + ORIGIN_FRAME_BUFF_BAR_INDICATOR: "originframetype", + ORIGIN_FRAME_TIME_OF_DAY_INDICATOR: "originframetype", + ORIGIN_FRAME_LEADERBOARD: "originframetype", + ORIGIN_FRAME_MULTIBOARD: "originframetype", + ORIGIN_FRAME_INFO_BAR: "originframetype", + ORIGIN_FRAME_COMMAND_BAR: "originframetype", + ORIGIN_FRAME_RESOURCE_BAR: "originframetype", + ORIGIN_FRAME_RESOURCE_BAR_TEXTURE: "originframetype", + ORIGIN_FRAME_RESOURCE_BAR_TEXT: "originframetype", + ORIGIN_FRAME_UPPERBUTTON_BAR: "originframetype", + ORIGIN_FRAME_UPPERBUTTON_BAR_BUTTON: "originframetype", + ORIGIN_FRAME_PEON_BAR: "originframetype", + ORIGIN_FRAME_PLAYER_MESSAGE: "originframetype", + ORIGIN_FRAME_UNIT_MESSAGE: "originframetype", + ORIGIN_FRAME_CHAT_MESSAGE: "originframetype", + ORIGIN_FRAME_TOP_MESSAGE: "originframetype", + ORIGIN_FRAME_CHAT_EDITBAR: "originframetype", + ORIGIN_FRAME_CINEMATIC_PANEL: "originframetype", + ORIGIN_FRAME_COMMAND_BUTTON_COOLDOWN_INDICATOR: "originframetype", + ORIGIN_FRAME_COMMAND_BUTTON_AUTOCAST_FRAME: "originframetype", + ORIGIN_FRAME_COMMAND_BUTTON_CHARGES_FRAME: "originframetype", + ORIGIN_FRAME_COMMAND_BUTTON_CHARGES_TEXT: "originframetype", + ORIGIN_FRAME_CURSOR_FRAME: "originframetype", + ORIGIN_FRAME_INVENTORY_COVER_FRAME: "originframetype", + ORIGIN_FRAME_UNIT_TIP: "originframetype", + ORIGIN_FRAME_ITEM_BUTTON_COOLDOWN_INDICATOR: "originframetype", + ORIGIN_FRAME_ITEM_BUTTON_AUTOCAST_FRAME: "originframetype", + ORIGIN_FRAME_ITEM_BUTTON_CHARGES_FRAME: "originframetype", + ORIGIN_FRAME_ITEM_BUTTON_CHARGES_TEXT: "originframetype", + ORIGIN_FRAME_TRAINABLE_BUTTON: "originframetype", + ORIGIN_FRAME_CARGO_BUTTON: "originframetype", + ORIGIN_FRAME_GROUP_BUTTON: "originframetype", + FRAMEPOINT_TOPLEFT: "framepointtype", + FRAMEPOINT_TOP: "framepointtype", + FRAMEPOINT_TOPRIGHT: "framepointtype", + FRAMEPOINT_LEFT: "framepointtype", + FRAMEPOINT_CENTER: "framepointtype", + FRAMEPOINT_RIGHT: "framepointtype", + FRAMEPOINT_BOTTOMLEFT: "framepointtype", + FRAMEPOINT_BOTTOM: "framepointtype", + FRAMEPOINT_BOTTOMRIGHT: "framepointtype", + TEXT_JUSTIFY_TOP: "textaligntype", + TEXT_JUSTIFY_MIDDLE: "textaligntype", + TEXT_JUSTIFY_BOTTOM: "textaligntype", + TEXT_JUSTIFY_LEFT: "textaligntype", + TEXT_JUSTIFY_CENTER: "textaligntype", + TEXT_JUSTIFY_RIGHT: "textaligntype", + FRAMEEVENT_CONTROL_CLICK: "frameeventtype", + FRAMEEVENT_MOUSE_ENTER: "frameeventtype", + FRAMEEVENT_MOUSE_LEAVE: "frameeventtype", + FRAMEEVENT_MOUSE_UP: "frameeventtype", + FRAMEEVENT_MOUSE_DOWN: "frameeventtype", + FRAMEEVENT_MOUSE_WHEEL: "frameeventtype", + FRAMEEVENT_CHECKBOX_CHECKED: "frameeventtype", + FRAMEEVENT_CHECKBOX_UNCHECKED: "frameeventtype", + FRAMEEVENT_EDITBOX_TEXT_CHANGED: "frameeventtype", + FRAMEEVENT_POPUPMENU_ITEM_CHANGED: "frameeventtype", + FRAMEEVENT_MOUSE_DOUBLECLICK: "frameeventtype", + FRAMEEVENT_SPRITE_ANIM_UPDATE: "frameeventtype", + FRAMEEVENT_SLIDER_VALUE_CHANGED: "frameeventtype", + FRAMEEVENT_DIALOG_CANCEL: "frameeventtype", + FRAMEEVENT_DIALOG_ACCEPT: "frameeventtype", + FRAMEEVENT_EDITBOX_ENTER: "frameeventtype", + FRAMEEVENT_CHECKBOX_CHANGED: "frameeventtype", + FRAMEEVENT_CONTROL_RELEASE: "frameeventtype", + FRAMEEVENT_CONTROL_DRAG: "frameeventtype", + OSKEY_LBUTTON: "oskeytype", + OSKEY_RBUTTON: "oskeytype", + OSKEY_CANCEL: "oskeytype", + OSKEY_MBUTTON: "oskeytype", + OSKEY_XBUTTON1: "oskeytype", + OSKEY_XBUTTON2: "oskeytype", + OSKEY_UNDEFINED: "oskeytype", + OSKEY_BACKSPACE: "oskeytype", + OSKEY_TAB: "oskeytype", + OSKEY_CLEAR: "oskeytype", + OSKEY_RETURN: "oskeytype", + OSKEY_SHIFT: "oskeytype", + OSKEY_CONTROL: "oskeytype", + OSKEY_ALT: "oskeytype", + OSKEY_PAUSE: "oskeytype", + OSKEY_CAPSLOCK: "oskeytype", + OSKEY_KANA: "oskeytype", + OSKEY_HANGUL: "oskeytype", + OSKEY_JUNJA: "oskeytype", + OSKEY_FINAL: "oskeytype", + OSKEY_HANJA: "oskeytype", + OSKEY_KANJI: "oskeytype", + OSKEY_ESCAPE: "oskeytype", + OSKEY_CONVERT: "oskeytype", + OSKEY_NONCONVERT: "oskeytype", + OSKEY_ACCEPT: "oskeytype", + OSKEY_MODECHANGE: "oskeytype", + OSKEY_SPACE: "oskeytype", + OSKEY_PAGEUP: "oskeytype", + OSKEY_PAGEDOWN: "oskeytype", + OSKEY_END: "oskeytype", + OSKEY_HOME: "oskeytype", + OSKEY_LEFT: "oskeytype", + OSKEY_UP: "oskeytype", + OSKEY_RIGHT: "oskeytype", + OSKEY_DOWN: "oskeytype", + OSKEY_SELECT: "oskeytype", + OSKEY_PRINT: "oskeytype", + OSKEY_EXECUTE: "oskeytype", + OSKEY_PRINTSCREEN: "oskeytype", + OSKEY_INSERT: "oskeytype", + OSKEY_DELETE: "oskeytype", + OSKEY_HELP: "oskeytype", + OSKEY_0: "oskeytype", + OSKEY_1: "oskeytype", + OSKEY_2: "oskeytype", + OSKEY_3: "oskeytype", + OSKEY_4: "oskeytype", + OSKEY_5: "oskeytype", + OSKEY_6: "oskeytype", + OSKEY_7: "oskeytype", + OSKEY_8: "oskeytype", + OSKEY_9: "oskeytype", + OSKEY_A: "oskeytype", + OSKEY_B: "oskeytype", + OSKEY_C: "oskeytype", + OSKEY_D: "oskeytype", + OSKEY_E: "oskeytype", + OSKEY_F: "oskeytype", + OSKEY_G: "oskeytype", + OSKEY_H: "oskeytype", + OSKEY_I: "oskeytype", + OSKEY_J: "oskeytype", + OSKEY_K: "oskeytype", + OSKEY_L: "oskeytype", + OSKEY_M: "oskeytype", + OSKEY_N: "oskeytype", + OSKEY_O: "oskeytype", + OSKEY_P: "oskeytype", + OSKEY_Q: "oskeytype", + OSKEY_R: "oskeytype", + OSKEY_S: "oskeytype", + OSKEY_T: "oskeytype", + OSKEY_U: "oskeytype", + OSKEY_V: "oskeytype", + OSKEY_W: "oskeytype", + OSKEY_X: "oskeytype", + OSKEY_Y: "oskeytype", + OSKEY_Z: "oskeytype", + OSKEY_LMETA: "oskeytype", + OSKEY_RMETA: "oskeytype", + OSKEY_APPS: "oskeytype", + OSKEY_SLEEP: "oskeytype", + OSKEY_NUMPAD0: "oskeytype", + OSKEY_NUMPAD1: "oskeytype", + OSKEY_NUMPAD2: "oskeytype", + OSKEY_NUMPAD3: "oskeytype", + OSKEY_NUMPAD4: "oskeytype", + OSKEY_NUMPAD5: "oskeytype", + OSKEY_NUMPAD6: "oskeytype", + OSKEY_NUMPAD7: "oskeytype", + OSKEY_NUMPAD8: "oskeytype", + OSKEY_NUMPAD9: "oskeytype", + OSKEY_MULTIPLY: "oskeytype", + OSKEY_ADD: "oskeytype", + OSKEY_SEPARATOR: "oskeytype", + OSKEY_SUBTRACT: "oskeytype", + OSKEY_DECIMAL: "oskeytype", + OSKEY_DIVIDE: "oskeytype", + OSKEY_F1: "oskeytype", + OSKEY_F2: "oskeytype", + OSKEY_F3: "oskeytype", + OSKEY_F4: "oskeytype", + OSKEY_F5: "oskeytype", + OSKEY_F6: "oskeytype", + OSKEY_F7: "oskeytype", + OSKEY_F8: "oskeytype", + OSKEY_F9: "oskeytype", + OSKEY_F10: "oskeytype", + OSKEY_F11: "oskeytype", + OSKEY_F12: "oskeytype", + OSKEY_F13: "oskeytype", + OSKEY_F14: "oskeytype", + OSKEY_F15: "oskeytype", + OSKEY_F16: "oskeytype", + OSKEY_F17: "oskeytype", + OSKEY_F18: "oskeytype", + OSKEY_F19: "oskeytype", + OSKEY_F20: "oskeytype", + OSKEY_F21: "oskeytype", + OSKEY_F22: "oskeytype", + OSKEY_F23: "oskeytype", + OSKEY_F24: "oskeytype", + OSKEY_NUMLOCK: "oskeytype", + OSKEY_SCROLLLOCK: "oskeytype", + OSKEY_OEM_NEC_EQUAL: "oskeytype", + OSKEY_OEM_FJ_JISHO: "oskeytype", + OSKEY_OEM_FJ_MASSHOU: "oskeytype", + OSKEY_OEM_FJ_TOUROKU: "oskeytype", + OSKEY_OEM_FJ_LOYA: "oskeytype", + OSKEY_OEM_FJ_ROYA: "oskeytype", + OSKEY_LSHIFT: "oskeytype", + OSKEY_RSHIFT: "oskeytype", + OSKEY_LCONTROL: "oskeytype", + OSKEY_RCONTROL: "oskeytype", + OSKEY_LALT: "oskeytype", + OSKEY_RALT: "oskeytype", + OSKEY_BROWSER_BACK: "oskeytype", + OSKEY_BROWSER_FORWARD: "oskeytype", + OSKEY_BROWSER_REFRESH: "oskeytype", + OSKEY_BROWSER_STOP: "oskeytype", + OSKEY_BROWSER_SEARCH: "oskeytype", + OSKEY_BROWSER_FAVORITES: "oskeytype", + OSKEY_BROWSER_HOME: "oskeytype", + OSKEY_VOLUME_MUTE: "oskeytype", + OSKEY_VOLUME_DOWN: "oskeytype", + OSKEY_VOLUME_UP: "oskeytype", + OSKEY_MEDIA_NEXT_TRACK: "oskeytype", + OSKEY_MEDIA_PREV_TRACK: "oskeytype", + OSKEY_MEDIA_STOP: "oskeytype", + OSKEY_MEDIA_PLAY_PAUSE: "oskeytype", + OSKEY_LAUNCH_MAIL: "oskeytype", + OSKEY_LAUNCH_MEDIA_SELECT: "oskeytype", + OSKEY_LAUNCH_APP1: "oskeytype", + OSKEY_LAUNCH_APP2: "oskeytype", + OSKEY_OEM_1: "oskeytype", + OSKEY_OEM_PLUS: "oskeytype", + OSKEY_OEM_COMMA: "oskeytype", + OSKEY_OEM_MINUS: "oskeytype", + OSKEY_OEM_PERIOD: "oskeytype", + OSKEY_OEM_2: "oskeytype", + OSKEY_OEM_3: "oskeytype", + OSKEY_OEM_4: "oskeytype", + OSKEY_OEM_5: "oskeytype", + OSKEY_OEM_6: "oskeytype", + OSKEY_OEM_7: "oskeytype", + OSKEY_OEM_8: "oskeytype", + OSKEY_OEM_AX: "oskeytype", + OSKEY_OEM_102: "oskeytype", + OSKEY_ICO_HELP: "oskeytype", + OSKEY_ICO_00: "oskeytype", + OSKEY_PROCESSKEY: "oskeytype", + OSKEY_ICO_CLEAR: "oskeytype", + OSKEY_PACKET: "oskeytype", + OSKEY_OEM_RESET: "oskeytype", + OSKEY_OEM_JUMP: "oskeytype", + OSKEY_OEM_PA1: "oskeytype", + OSKEY_OEM_PA2: "oskeytype", + OSKEY_OEM_PA3: "oskeytype", + OSKEY_OEM_WSCTRL: "oskeytype", + OSKEY_OEM_CUSEL: "oskeytype", + OSKEY_OEM_ATTN: "oskeytype", + OSKEY_OEM_FINISH: "oskeytype", + OSKEY_OEM_COPY: "oskeytype", + OSKEY_OEM_AUTO: "oskeytype", + OSKEY_OEM_ENLW: "oskeytype", + OSKEY_OEM_BACKTAB: "oskeytype", + OSKEY_ATTN: "oskeytype", + OSKEY_CRSEL: "oskeytype", + OSKEY_EXSEL: "oskeytype", + OSKEY_EREOF: "oskeytype", + OSKEY_PLAY: "oskeytype", + OSKEY_ZOOM: "oskeytype", + OSKEY_NONAME: "oskeytype", + OSKEY_PA1: "oskeytype", + OSKEY_OEM_CLEAR: "oskeytype", + MOUSE_BUTTON_TYPE_LEFT: "mousebuttontype", + MOUSE_BUTTON_TYPE_MIDDLE: "mousebuttontype", + MOUSE_BUTTON_TYPE_RIGHT: "mousebuttontype", + META_KEY_NONE: "integer", + META_KEY_SHIFT: "integer", + META_KEY_CONTROL: "integer", + META_KEY_ALT: "integer", + META_KEY_WINDOWS: "integer", + CHAT_RECIPIENT_ALL: "integer", + CHAT_RECIPIENT_ALLIES: "integer", + CHAT_RECIPIENT_REFEREES: "integer", + CHAT_RECIPIENT_OBSERVERS: "integer", + CHAT_RECIPIENT_PRIVATE: "integer", + ABILITY_IF_BUTTON_POSITION_NORMAL_X: "abilityintegerfield", + ABILITY_IF_BUTTON_POSITION_NORMAL_Y: "abilityintegerfield", + ABILITY_IF_BUTTON_HOTKEY_NORMAL: "abilityintegerfield", + ABILITY_IF_BUTTON_HOTKEY_ACTIVATED: "abilityintegerfield", + ABILITY_IF_BUTTON_POSITION_ACTIVATED_X: "abilityintegerfield", + ABILITY_IF_BUTTON_POSITION_ACTIVATED_Y: "abilityintegerfield", + ABILITY_IF_BUTTON_HOTKEY_RESEARCH: "abilityintegerfield", + ABILITY_IF_BUTTON_POSITION_RESEARCH_X: "abilityintegerfield", + ABILITY_IF_BUTTON_POSITION_RESEARCH_Y: "abilityintegerfield", + ABILITY_IF_BUTTON_HOTKEY_ALL: "abilityintegerfield", + ABILITY_IF_MISSILE_SPEED: "abilityintegerfield", + ABILITY_IF_TARGET_ATTACHMENTS: "abilityintegerfield", + ABILITY_IF_CASTER_ATTACHMENTS: "abilityintegerfield", + ABILITY_IF_PRIORITY: "abilityintegerfield", + ABILITY_IF_LEVELS: "abilityintegerfield", + ABILITY_IF_REQUIRED_LEVEL: "abilityintegerfield", + ABILITY_IF_LEVEL_SKIP_REQUIREMENT: "abilityintegerfield", + ABILITY_BF_HERO_ABILITY: "abilitybooleanfield", + ABILITY_BF_ITEM_ABILITY: "abilitybooleanfield", + ABILITY_BF_CHECK_DEPENDENCIES: "abilitybooleanfield", + ABILITY_BF_HOMING: "abilitybooleanfield", + ABILITY_RF_ARF_MISSILE_ARC: "abilityrealfield", + ABILITY_RF_AURA_REFRESH_TIME: "abilityrealfield", + ABILITY_SF_NAME: "abilitystringfield", + ABILITY_SF_ICON_NORMAL: "abilitystringfield", + ABILITY_SF_ICON_ACTIVATED: "abilitystringfield", + ABILITY_SF_ICON_RESEARCH: "abilitystringfield", + ABILITY_SF_EFFECT_SOUND: "abilitystringfield", + ABILITY_SF_EFFECT_SOUND_LOOPING: "abilitystringfield", + ABILITY_ILF_MANA_COST: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_WAVES: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_SHARDS: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_UNITS_TELEPORTED: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_COUNT_HWE2: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_IMAGES: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_CORPSES_RAISED_UAN1: "abilityintegerlevelfield", + ABILITY_ILF_MORPHING_FLAGS: "abilityintegerlevelfield", + ABILITY_ILF_STRENGTH_BONUS_NRG5: "abilityintegerlevelfield", + ABILITY_ILF_DEFENSE_BONUS_NRG6: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_TARGETS_HIT: "abilityintegerlevelfield", + ABILITY_ILF_DETECTION_TYPE_OFS1: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_SUMMONED_UNITS_OSF2: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_SUMMONED_UNITS_EFN1: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_CORPSES_RAISED_HRE1: "abilityintegerlevelfield", + ABILITY_ILF_STACK_FLAGS: "abilityintegerlevelfield", + ABILITY_ILF_MINIMUM_NUMBER_OF_UNITS: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_NUMBER_OF_UNITS_NDP3: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_UNITS_CREATED_NRC2: "abilityintegerlevelfield", + ABILITY_ILF_SHIELD_LIFE: "abilityintegerlevelfield", + ABILITY_ILF_MANA_LOSS_AMS4: "abilityintegerlevelfield", + ABILITY_ILF_GOLD_PER_INTERVAL_BGM1: "abilityintegerlevelfield", + ABILITY_ILF_MAX_NUMBER_OF_MINERS: "abilityintegerlevelfield", + ABILITY_ILF_CARGO_CAPACITY: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_CREEP_LEVEL_DEV3: "abilityintegerlevelfield", + ABILITY_ILF_MAX_CREEP_LEVEL_DEV1: "abilityintegerlevelfield", + ABILITY_ILF_GOLD_PER_INTERVAL_EGM1: "abilityintegerlevelfield", + ABILITY_ILF_DEFENSE_REDUCTION: "abilityintegerlevelfield", + ABILITY_ILF_DETECTION_TYPE_FLA1: "abilityintegerlevelfield", + ABILITY_ILF_FLARE_COUNT: "abilityintegerlevelfield", + ABILITY_ILF_MAX_GOLD: "abilityintegerlevelfield", + ABILITY_ILF_MINING_CAPACITY: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_NUMBER_OF_CORPSES_GYD1: "abilityintegerlevelfield", + ABILITY_ILF_DAMAGE_TO_TREE: "abilityintegerlevelfield", + ABILITY_ILF_LUMBER_CAPACITY: "abilityintegerlevelfield", + ABILITY_ILF_GOLD_CAPACITY: "abilityintegerlevelfield", + ABILITY_ILF_DEFENSE_INCREASE_INF2: "abilityintegerlevelfield", + ABILITY_ILF_INTERACTION_TYPE: "abilityintegerlevelfield", + ABILITY_ILF_GOLD_COST_NDT1: "abilityintegerlevelfield", + ABILITY_ILF_LUMBER_COST_NDT2: "abilityintegerlevelfield", + ABILITY_ILF_DETECTION_TYPE_NDT3: "abilityintegerlevelfield", + ABILITY_ILF_STACKING_TYPE_POI4: "abilityintegerlevelfield", + ABILITY_ILF_STACKING_TYPE_POA5: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_CREEP_LEVEL_PLY1: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_CREEP_LEVEL_POS1: "abilityintegerlevelfield", + ABILITY_ILF_MOVEMENT_UPDATE_FREQUENCY_PRG1: "abilityintegerlevelfield", + ABILITY_ILF_ATTACK_UPDATE_FREQUENCY_PRG2: "abilityintegerlevelfield", + ABILITY_ILF_MANA_LOSS_PRG6: "abilityintegerlevelfield", + ABILITY_ILF_UNITS_SUMMONED_TYPE_ONE: "abilityintegerlevelfield", + ABILITY_ILF_UNITS_SUMMONED_TYPE_TWO: "abilityintegerlevelfield", + ABILITY_ILF_MAX_UNITS_SUMMONED: "abilityintegerlevelfield", + ABILITY_ILF_ALLOW_WHEN_FULL_REJ3: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_UNITS_CHARGED_TO_CASTER: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_UNITS_AFFECTED: "abilityintegerlevelfield", + ABILITY_ILF_DEFENSE_INCREASE_ROA2: "abilityintegerlevelfield", + ABILITY_ILF_MAX_UNITS_ROA7: "abilityintegerlevelfield", + ABILITY_ILF_ROOTED_WEAPONS: "abilityintegerlevelfield", + ABILITY_ILF_UPROOTED_WEAPONS: "abilityintegerlevelfield", + ABILITY_ILF_UPROOTED_DEFENSE_TYPE: "abilityintegerlevelfield", + ABILITY_ILF_ACCUMULATION_STEP: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_OWLS: "abilityintegerlevelfield", + ABILITY_ILF_STACKING_TYPE_SPO4: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_UNITS: "abilityintegerlevelfield", + ABILITY_ILF_SPIDER_CAPACITY: "abilityintegerlevelfield", + ABILITY_ILF_INTERVALS_BEFORE_CHANGING_TREES: "abilityintegerlevelfield", + ABILITY_ILF_AGILITY_BONUS: "abilityintegerlevelfield", + ABILITY_ILF_INTELLIGENCE_BONUS: "abilityintegerlevelfield", + ABILITY_ILF_STRENGTH_BONUS_ISTR: "abilityintegerlevelfield", + ABILITY_ILF_ATTACK_BONUS: "abilityintegerlevelfield", + ABILITY_ILF_DEFENSE_BONUS_IDEF: "abilityintegerlevelfield", + ABILITY_ILF_SUMMON_1_AMOUNT: "abilityintegerlevelfield", + ABILITY_ILF_SUMMON_2_AMOUNT: "abilityintegerlevelfield", + ABILITY_ILF_EXPERIENCE_GAINED: "abilityintegerlevelfield", + ABILITY_ILF_HIT_POINTS_GAINED_IHPG: "abilityintegerlevelfield", + ABILITY_ILF_MANA_POINTS_GAINED_IMPG: "abilityintegerlevelfield", + ABILITY_ILF_HIT_POINTS_GAINED_IHP2: "abilityintegerlevelfield", + ABILITY_ILF_MANA_POINTS_GAINED_IMP2: "abilityintegerlevelfield", + ABILITY_ILF_DAMAGE_BONUS_DICE: "abilityintegerlevelfield", + ABILITY_ILF_ARMOR_PENALTY_IARP: "abilityintegerlevelfield", + ABILITY_ILF_ENABLED_ATTACK_INDEX_IOB5: "abilityintegerlevelfield", + ABILITY_ILF_LEVELS_GAINED: "abilityintegerlevelfield", + ABILITY_ILF_MAX_LIFE_GAINED: "abilityintegerlevelfield", + ABILITY_ILF_MAX_MANA_GAINED: "abilityintegerlevelfield", + ABILITY_ILF_GOLD_GIVEN: "abilityintegerlevelfield", + ABILITY_ILF_LUMBER_GIVEN: "abilityintegerlevelfield", + ABILITY_ILF_DETECTION_TYPE_IFA1: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_CREEP_LEVEL_ICRE: "abilityintegerlevelfield", + ABILITY_ILF_MOVEMENT_SPEED_BONUS: "abilityintegerlevelfield", + ABILITY_ILF_HIT_POINTS_REGENERATED_PER_SECOND: "abilityintegerlevelfield", + ABILITY_ILF_SIGHT_RANGE_BONUS: "abilityintegerlevelfield", + ABILITY_ILF_DAMAGE_PER_DURATION: "abilityintegerlevelfield", + ABILITY_ILF_MANA_USED_PER_SECOND: "abilityintegerlevelfield", + ABILITY_ILF_EXTRA_MANA_REQUIRED: "abilityintegerlevelfield", + ABILITY_ILF_DETECTION_RADIUS_IDET: "abilityintegerlevelfield", + ABILITY_ILF_MANA_LOSS_PER_UNIT_IDIM: "abilityintegerlevelfield", + ABILITY_ILF_DAMAGE_TO_SUMMONED_UNITS_IDID: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_NUMBER_OF_UNITS_IREC: "abilityintegerlevelfield", + ABILITY_ILF_DELAY_AFTER_DEATH_SECONDS: "abilityintegerlevelfield", + ABILITY_ILF_RESTORED_LIFE: "abilityintegerlevelfield", + ABILITY_ILF_RESTORED_MANA_1_FOR_CURRENT: "abilityintegerlevelfield", + ABILITY_ILF_HIT_POINTS_RESTORED: "abilityintegerlevelfield", + ABILITY_ILF_MANA_POINTS_RESTORED: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_NUMBER_OF_UNITS_ITPM: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_CORPSES_RAISED_CAD1: "abilityintegerlevelfield", + ABILITY_ILF_TERRAIN_DEFORMATION_DURATION_MS: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_UNITS: "abilityintegerlevelfield", + ABILITY_ILF_DETECTION_TYPE_DET1: "abilityintegerlevelfield", + ABILITY_ILF_GOLD_COST_PER_STRUCTURE: "abilityintegerlevelfield", + ABILITY_ILF_LUMBER_COST_PER_USE: "abilityintegerlevelfield", + ABILITY_ILF_DETECTION_TYPE_NSP3: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_SWARM_UNITS: "abilityintegerlevelfield", + ABILITY_ILF_MAX_SWARM_UNITS_PER_TARGET: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_SUMMONED_UNITS_NBA2: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_CREEP_LEVEL_NCH1: "abilityintegerlevelfield", + ABILITY_ILF_ATTACKS_PREVENTED: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_NUMBER_OF_TARGETS_EFK3: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_SUMMONED_UNITS_ESV1: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_NUMBER_OF_CORPSES_EXH1: "abilityintegerlevelfield", + ABILITY_ILF_ITEM_CAPACITY: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_NUMBER_OF_TARGETS_SPL2: "abilityintegerlevelfield", + ABILITY_ILF_ALLOW_WHEN_FULL_IRL3: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_DISPELLED_UNITS: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_LURES: "abilityintegerlevelfield", + ABILITY_ILF_NEW_TIME_OF_DAY_HOUR: "abilityintegerlevelfield", + ABILITY_ILF_NEW_TIME_OF_DAY_MINUTE: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_UNITS_CREATED_MEC1: "abilityintegerlevelfield", + ABILITY_ILF_MINIMUM_SPELLS: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_SPELLS: "abilityintegerlevelfield", + ABILITY_ILF_DISABLED_ATTACK_INDEX: "abilityintegerlevelfield", + ABILITY_ILF_ENABLED_ATTACK_INDEX_GRA4: "abilityintegerlevelfield", + ABILITY_ILF_MAXIMUM_ATTACKS: "abilityintegerlevelfield", + ABILITY_ILF_BUILDING_TYPES_ALLOWED_NPR1: "abilityintegerlevelfield", + ABILITY_ILF_BUILDING_TYPES_ALLOWED_NSA1: "abilityintegerlevelfield", + ABILITY_ILF_ATTACK_MODIFICATION: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_COUNT_NPA5: "abilityintegerlevelfield", + ABILITY_ILF_UPGRADE_LEVELS: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_SUMMONED_UNITS_NDO2: "abilityintegerlevelfield", + ABILITY_ILF_BEASTS_PER_SECOND: "abilityintegerlevelfield", + ABILITY_ILF_TARGETS_ALLOWED: "abilityintegerlevelfield", + ABILITY_ILF_TARGET_TYPE: "abilityintegerlevelfield", + ABILITY_ILF_OPTIONS: "abilityintegerlevelfield", + ABILITY_ILF_ARMOR_PENALTY_NAB3: "abilityintegerlevelfield", + ABILITY_ILF_WAVE_COUNT_NHS6: "abilityintegerlevelfield", + ABILITY_ILF_MAX_CREEP_LEVEL_NTM3: "abilityintegerlevelfield", + ABILITY_ILF_MISSILE_COUNT: "abilityintegerlevelfield", + ABILITY_ILF_SPLIT_ATTACK_COUNT: "abilityintegerlevelfield", + ABILITY_ILF_GENERATION_COUNT: "abilityintegerlevelfield", + ABILITY_ILF_ROCK_RING_COUNT: "abilityintegerlevelfield", + ABILITY_ILF_WAVE_COUNT_NVC2: "abilityintegerlevelfield", + ABILITY_ILF_PREFER_HOSTILES_TAU1: "abilityintegerlevelfield", + ABILITY_ILF_PREFER_FRIENDLIES_TAU2: "abilityintegerlevelfield", + ABILITY_ILF_MAX_UNITS_TAU3: "abilityintegerlevelfield", + ABILITY_ILF_NUMBER_OF_PULSES: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_TYPE_HWE1: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_UIN4: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_OSF1: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_TYPE_EFNU: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_TYPE_NBAU: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_TYPE_NTOU: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_TYPE_ESVU: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_TYPES: "abilityintegerlevelfield", + ABILITY_ILF_SUMMONED_UNIT_TYPE_NDOU: "abilityintegerlevelfield", + ABILITY_ILF_ALTERNATE_FORM_UNIT_EMEU: "abilityintegerlevelfield", + ABILITY_ILF_PLAGUE_WARD_UNIT_TYPE: "abilityintegerlevelfield", + ABILITY_ILF_ALLOWED_UNIT_TYPE_BTL1: "abilityintegerlevelfield", + ABILITY_ILF_NEW_UNIT_TYPE: "abilityintegerlevelfield", + ABILITY_ILF_RESULTING_UNIT_TYPE_ENT1: "abilityintegerlevelfield", + ABILITY_ILF_CORPSE_UNIT_TYPE: "abilityintegerlevelfield", + ABILITY_ILF_ALLOWED_UNIT_TYPE_LOA1: "abilityintegerlevelfield", + ABILITY_ILF_UNIT_TYPE_FOR_LIMIT_CHECK: "abilityintegerlevelfield", + ABILITY_ILF_WARD_UNIT_TYPE_STAU: "abilityintegerlevelfield", + ABILITY_ILF_EFFECT_ABILITY: "abilityintegerlevelfield", + ABILITY_ILF_CONVERSION_UNIT: "abilityintegerlevelfield", + ABILITY_ILF_UNIT_TO_PRESERVE: "abilityintegerlevelfield", + ABILITY_ILF_UNIT_TYPE_ALLOWED: "abilityintegerlevelfield", + ABILITY_ILF_SWARM_UNIT_TYPE: "abilityintegerlevelfield", + ABILITY_ILF_RESULTING_UNIT_TYPE_COAU: "abilityintegerlevelfield", + ABILITY_ILF_UNIT_TYPE_EXHU: "abilityintegerlevelfield", + ABILITY_ILF_WARD_UNIT_TYPE_HWDU: "abilityintegerlevelfield", + ABILITY_ILF_LURE_UNIT_TYPE: "abilityintegerlevelfield", + ABILITY_ILF_UNIT_TYPE_IPMU: "abilityintegerlevelfield", + ABILITY_ILF_FACTORY_UNIT_ID: "abilityintegerlevelfield", + ABILITY_ILF_SPAWN_UNIT_ID_NFYU: "abilityintegerlevelfield", + ABILITY_ILF_DESTRUCTIBLE_ID: "abilityintegerlevelfield", + ABILITY_ILF_UPGRADE_TYPE: "abilityintegerlevelfield", + ABILITY_RLF_CASTING_TIME: "abilityreallevelfield", + ABILITY_RLF_CAST_BACK_SWING: "abilityreallevelfield", + ABILITY_RLF_CAST_POINT: "abilityreallevelfield", + ABILITY_RLF_DURATION_NORMAL: "abilityreallevelfield", + ABILITY_RLF_DURATION_HERO: "abilityreallevelfield", + ABILITY_RLF_COOLDOWN: "abilityreallevelfield", + ABILITY_RLF_AREA_OF_EFFECT: "abilityreallevelfield", + ABILITY_RLF_CAST_RANGE: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_HBZ2: "abilityreallevelfield", + ABILITY_RLF_BUILDING_REDUCTION_HBZ4: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_HBZ5: "abilityreallevelfield", + ABILITY_RLF_MAXIMUM_DAMAGE_PER_WAVE: "abilityreallevelfield", + ABILITY_RLF_MANA_REGENERATION_INCREASE: "abilityreallevelfield", + ABILITY_RLF_CASTING_DELAY: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_OWW1: "abilityreallevelfield", + ABILITY_RLF_MAGIC_DAMAGE_REDUCTION_OWW2: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_CRITICAL_STRIKE: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_MULTIPLIER_OCR2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_OCR3: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_EVADE_OCR4: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_DEALT_PERCENT_OMI2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_TAKEN_PERCENT_OMI3: "abilityreallevelfield", + ABILITY_RLF_ANIMATION_DELAY: "abilityreallevelfield", + ABILITY_RLF_TRANSITION_TIME: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_INCREASE_PERCENT_OWK2: "abilityreallevelfield", + ABILITY_RLF_BACKSTAB_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_AMOUNT_HEALED_DAMAGED_UDC1: "abilityreallevelfield", + ABILITY_RLF_LIFE_CONVERTED_TO_MANA: "abilityreallevelfield", + ABILITY_RLF_LIFE_CONVERTED_TO_LIFE: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_INCREASE_PERCENT_UAU1: "abilityreallevelfield", + ABILITY_RLF_LIFE_REGENERATION_INCREASE_PERCENT: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_EVADE_EEV1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_INTERVAL: "abilityreallevelfield", + ABILITY_RLF_MANA_DRAINED_PER_SECOND_EIM2: "abilityreallevelfield", + ABILITY_RLF_BUFFER_MANA_REQUIRED: "abilityreallevelfield", + ABILITY_RLF_MAX_MANA_DRAINED: "abilityreallevelfield", + ABILITY_RLF_BOLT_DELAY: "abilityreallevelfield", + ABILITY_RLF_BOLT_LIFETIME: "abilityreallevelfield", + ABILITY_RLF_ALTITUDE_ADJUSTMENT_DURATION: "abilityreallevelfield", + ABILITY_RLF_LANDING_DELAY_TIME: "abilityreallevelfield", + ABILITY_RLF_ALTERNATE_FORM_HIT_POINT_BONUS: "abilityreallevelfield", + ABILITY_RLF_MOVE_SPEED_BONUS_INFO_PANEL_ONLY: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_BONUS_INFO_PANEL_ONLY: "abilityreallevelfield", + ABILITY_RLF_LIFE_REGENERATION_RATE_PER_SECOND: "abilityreallevelfield", + ABILITY_RLF_STUN_DURATION_USL1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_DAMAGE_STOLEN_PERCENT: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_UCS1: "abilityreallevelfield", + ABILITY_RLF_MAX_DAMAGE_UCS2: "abilityreallevelfield", + ABILITY_RLF_DISTANCE_UCS3: "abilityreallevelfield", + ABILITY_RLF_FINAL_AREA_UCS4: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_UIN1: "abilityreallevelfield", + ABILITY_RLF_DURATION: "abilityreallevelfield", + ABILITY_RLF_IMPACT_DELAY: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_TARGET_OCL1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_REDUCTION_PER_TARGET: "abilityreallevelfield", + ABILITY_RLF_EFFECT_DELAY_OEQ1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_TO_BUILDINGS: "abilityreallevelfield", + ABILITY_RLF_UNITS_SLOWED_PERCENT: "abilityreallevelfield", + ABILITY_RLF_FINAL_AREA_OEQ4: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_EER1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_DEALT_TO_ATTACKERS: "abilityreallevelfield", + ABILITY_RLF_LIFE_HEALED: "abilityreallevelfield", + ABILITY_RLF_HEAL_INTERVAL: "abilityreallevelfield", + ABILITY_RLF_BUILDING_REDUCTION_ETQ3: "abilityreallevelfield", + ABILITY_RLF_INITIAL_IMMUNITY_DURATION: "abilityreallevelfield", + ABILITY_RLF_MAX_LIFE_DRAINED_PER_SECOND_PERCENT: "abilityreallevelfield", + ABILITY_RLF_BUILDING_REDUCTION_UDD2: "abilityreallevelfield", + ABILITY_RLF_ARMOR_DURATION: "abilityreallevelfield", + ABILITY_RLF_ARMOR_BONUS_UFA2: "abilityreallevelfield", + ABILITY_RLF_AREA_OF_EFFECT_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_SPECIFIC_TARGET_DAMAGE_UFN2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_HFA1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_DEALT_ESF1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_INTERVAL_ESF2: "abilityreallevelfield", + ABILITY_RLF_BUILDING_REDUCTION_ESF3: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_PERCENT: "abilityreallevelfield", + ABILITY_RLF_DEFENSE_BONUS_HAV1: "abilityreallevelfield", + ABILITY_RLF_HIT_POINT_BONUS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_HAV3: "abilityreallevelfield", + ABILITY_RLF_MAGIC_DAMAGE_REDUCTION_HAV4: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_BASH: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_MULTIPLIER_HBH2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_HBH3: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_MISS_HBH4: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_HTB1: "abilityreallevelfield", + ABILITY_RLF_AOE_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_SPECIFIC_TARGET_DAMAGE_HTC2: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_REDUCTION_PERCENT_HTC3: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_REDUCTION_PERCENT_HTC4: "abilityreallevelfield", + ABILITY_RLF_ARMOR_BONUS_HAD1: "abilityreallevelfield", + ABILITY_RLF_AMOUNT_HEALED_DAMAGED_HHB1: "abilityreallevelfield", + ABILITY_RLF_EXTRA_DAMAGE_HCA1: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_FACTOR_HCA2: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_FACTOR_HCA3: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_INCREASE_PERCENT_OAE1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_INCREASE_PERCENT_OAE2: "abilityreallevelfield", + ABILITY_RLF_REINCARNATION_DELAY: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_OSH1: "abilityreallevelfield", + ABILITY_RLF_MAXIMUM_DAMAGE_OSH2: "abilityreallevelfield", + ABILITY_RLF_DISTANCE_OSH3: "abilityreallevelfield", + ABILITY_RLF_FINAL_AREA_OSH4: "abilityreallevelfield", + ABILITY_RLF_GRAPHIC_DELAY_NFD1: "abilityreallevelfield", + ABILITY_RLF_GRAPHIC_DURATION_NFD2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_NFD3: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DAMAGE_AMS1: "abilityreallevelfield", + ABILITY_RLF_MAGIC_DAMAGE_REDUCTION_AMS2: "abilityreallevelfield", + ABILITY_RLF_AURA_DURATION: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_APL2: "abilityreallevelfield", + ABILITY_RLF_DURATION_OF_PLAGUE_WARD: "abilityreallevelfield", + ABILITY_RLF_AMOUNT_OF_HIT_POINTS_REGENERATED: "abilityreallevelfield", + ABILITY_RLF_ATTACK_DAMAGE_INCREASE_AKB1: "abilityreallevelfield", + ABILITY_RLF_MANA_LOSS_ADM1: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DAMAGE_ADM2: "abilityreallevelfield", + ABILITY_RLF_EXPANSION_AMOUNT: "abilityreallevelfield", + ABILITY_RLF_INTERVAL_DURATION_BGM2: "abilityreallevelfield", + ABILITY_RLF_RADIUS_OF_MINING_RING: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_INCREASE_PERCENT_BLO1: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_INCREASE_PERCENT_BLO2: "abilityreallevelfield", + ABILITY_RLF_SCALING_FACTOR: "abilityreallevelfield", + ABILITY_RLF_HIT_POINTS_PER_SECOND_CAN1: "abilityreallevelfield", + ABILITY_RLF_MAX_HIT_POINTS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_DEV2: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_UPDATE_FREQUENCY_CHD1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_UPDATE_FREQUENCY_CHD2: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DAMAGE_CHD3: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_REDUCTION_PERCENT_CRI1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_REDUCTION_PERCENT_CRI2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_REDUCTION_CRI3: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_MISS_CRS: "abilityreallevelfield", + ABILITY_RLF_FULL_DAMAGE_RADIUS_DDA1: "abilityreallevelfield", + ABILITY_RLF_FULL_DAMAGE_AMOUNT_DDA2: "abilityreallevelfield", + ABILITY_RLF_PARTIAL_DAMAGE_RADIUS: "abilityreallevelfield", + ABILITY_RLF_PARTIAL_DAMAGE_AMOUNT: "abilityreallevelfield", + ABILITY_RLF_BUILDING_DAMAGE_FACTOR_SDS1: "abilityreallevelfield", + ABILITY_RLF_MAX_DAMAGE_UCO5: "abilityreallevelfield", + ABILITY_RLF_MOVE_SPEED_BONUS_UCO6: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_TAKEN_PERCENT_DEF1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_DEALT_PERCENT_DEF2: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_FACTOR_DEF3: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_FACTOR_DEF4: "abilityreallevelfield", + ABILITY_RLF_MAGIC_DAMAGE_REDUCTION_DEF5: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_DEFLECT: "abilityreallevelfield", + ABILITY_RLF_DEFLECT_DAMAGE_TAKEN_PIERCING: "abilityreallevelfield", + ABILITY_RLF_DEFLECT_DAMAGE_TAKEN_SPELLS: "abilityreallevelfield", + ABILITY_RLF_RIP_DELAY: "abilityreallevelfield", + ABILITY_RLF_EAT_DELAY: "abilityreallevelfield", + ABILITY_RLF_HIT_POINTS_GAINED_EAT3: "abilityreallevelfield", + ABILITY_RLF_AIR_UNIT_LOWER_DURATION: "abilityreallevelfield", + ABILITY_RLF_AIR_UNIT_HEIGHT: "abilityreallevelfield", + ABILITY_RLF_MELEE_ATTACK_RANGE: "abilityreallevelfield", + ABILITY_RLF_INTERVAL_DURATION_EGM2: "abilityreallevelfield", + ABILITY_RLF_EFFECT_DELAY_FLA2: "abilityreallevelfield", + ABILITY_RLF_MINING_DURATION: "abilityreallevelfield", + ABILITY_RLF_RADIUS_OF_GRAVESTONES: "abilityreallevelfield", + ABILITY_RLF_RADIUS_OF_CORPSES: "abilityreallevelfield", + ABILITY_RLF_HIT_POINTS_GAINED_HEA1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_INCREASE_PERCENT_INF1: "abilityreallevelfield", + ABILITY_RLF_AUTOCAST_RANGE: "abilityreallevelfield", + ABILITY_RLF_LIFE_REGEN_RATE: "abilityreallevelfield", + ABILITY_RLF_GRAPHIC_DELAY_LIT1: "abilityreallevelfield", + ABILITY_RLF_GRAPHIC_DURATION_LIT2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_LSH1: "abilityreallevelfield", + ABILITY_RLF_MANA_GAINED: "abilityreallevelfield", + ABILITY_RLF_HIT_POINTS_GAINED_MBT2: "abilityreallevelfield", + ABILITY_RLF_AUTOCAST_REQUIREMENT: "abilityreallevelfield", + ABILITY_RLF_WATER_HEIGHT: "abilityreallevelfield", + ABILITY_RLF_ACTIVATION_DELAY_MIN1: "abilityreallevelfield", + ABILITY_RLF_INVISIBILITY_TRANSITION_TIME: "abilityreallevelfield", + ABILITY_RLF_ACTIVATION_RADIUS: "abilityreallevelfield", + ABILITY_RLF_AMOUNT_REGENERATED: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_POI1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_FACTOR_POI2: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_FACTOR_POI3: "abilityreallevelfield", + ABILITY_RLF_EXTRA_DAMAGE_POA1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_POA2: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_FACTOR_POA3: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_FACTOR_POA4: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_AMPLIFICATION: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_STOMP_PERCENT: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_DEALT_WAR2: "abilityreallevelfield", + ABILITY_RLF_FULL_DAMAGE_RADIUS_WAR3: "abilityreallevelfield", + ABILITY_RLF_HALF_DAMAGE_RADIUS_WAR4: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DAMAGE_PRG3: "abilityreallevelfield", + ABILITY_RLF_UNIT_PAUSE_DURATION: "abilityreallevelfield", + ABILITY_RLF_HERO_PAUSE_DURATION: "abilityreallevelfield", + ABILITY_RLF_HIT_POINTS_GAINED_REJ1: "abilityreallevelfield", + ABILITY_RLF_MANA_POINTS_GAINED_REJ2: "abilityreallevelfield", + ABILITY_RLF_MINIMUM_LIFE_REQUIRED: "abilityreallevelfield", + ABILITY_RLF_MINIMUM_MANA_REQUIRED: "abilityreallevelfield", + ABILITY_RLF_REPAIR_COST_RATIO: "abilityreallevelfield", + ABILITY_RLF_REPAIR_TIME_RATIO: "abilityreallevelfield", + ABILITY_RLF_POWERBUILD_COST: "abilityreallevelfield", + ABILITY_RLF_POWERBUILD_RATE: "abilityreallevelfield", + ABILITY_RLF_NAVAL_RANGE_BONUS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_INCREASE_PERCENT_ROA1: "abilityreallevelfield", + ABILITY_RLF_LIFE_REGENERATION_RATE: "abilityreallevelfield", + ABILITY_RLF_MANA_REGEN: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_INCREASE: "abilityreallevelfield", + ABILITY_RLF_SALVAGE_COST_RATIO: "abilityreallevelfield", + ABILITY_RLF_IN_FLIGHT_SIGHT_RADIUS: "abilityreallevelfield", + ABILITY_RLF_HOVERING_SIGHT_RADIUS: "abilityreallevelfield", + ABILITY_RLF_HOVERING_HEIGHT: "abilityreallevelfield", + ABILITY_RLF_DURATION_OF_OWLS: "abilityreallevelfield", + ABILITY_RLF_FADE_DURATION: "abilityreallevelfield", + ABILITY_RLF_DAY_NIGHT_DURATION: "abilityreallevelfield", + ABILITY_RLF_ACTION_DURATION: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_FACTOR_SLO1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_FACTOR_SLO2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_SPO1: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_FACTOR_SPO2: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_FACTOR_SPO3: "abilityreallevelfield", + ABILITY_RLF_ACTIVATION_DELAY_STA1: "abilityreallevelfield", + ABILITY_RLF_DETECTION_RADIUS_STA2: "abilityreallevelfield", + ABILITY_RLF_DETONATION_RADIUS: "abilityreallevelfield", + ABILITY_RLF_STUN_DURATION_STA4: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_BONUS_PERCENT: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_UHF2: "abilityreallevelfield", + ABILITY_RLF_LUMBER_PER_INTERVAL: "abilityreallevelfield", + ABILITY_RLF_ART_ATTACHMENT_HEIGHT: "abilityreallevelfield", + ABILITY_RLF_TELEPORT_AREA_WIDTH: "abilityreallevelfield", + ABILITY_RLF_TELEPORT_AREA_HEIGHT: "abilityreallevelfield", + ABILITY_RLF_LIFE_STOLEN_PER_ATTACK: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_IDAM: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_HIT_UNITS_PERCENT: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_HIT_HEROS_PERCENT: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_HIT_SUMMONS_PERCENT: "abilityreallevelfield", + ABILITY_RLF_DELAY_FOR_TARGET_EFFECT: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_DEALT_PERCENT_OF_NORMAL: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_RECEIVED_MULTIPLIER: "abilityreallevelfield", + ABILITY_RLF_MANA_REGENERATION_BONUS_AS_FRACTION_OF_NORMAL: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_INCREASE_ISPI: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_IDPS: "abilityreallevelfield", + ABILITY_RLF_ATTACK_DAMAGE_INCREASE_CAC1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_COR1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_INCREASE_ISX1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_WRS1: "abilityreallevelfield", + ABILITY_RLF_TERRAIN_DEFORMATION_AMPLITUDE: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_CTC1: "abilityreallevelfield", + ABILITY_RLF_EXTRA_DAMAGE_TO_TARGET: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_REDUCTION_CTC3: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_REDUCTION_CTC4: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_CTB1: "abilityreallevelfield", + ABILITY_RLF_CASTING_DELAY_SECONDS: "abilityreallevelfield", + ABILITY_RLF_MANA_LOSS_PER_UNIT_DTN1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_TO_SUMMONED_UNITS_DTN2: "abilityreallevelfield", + ABILITY_RLF_TRANSITION_TIME_SECONDS: "abilityreallevelfield", + ABILITY_RLF_MANA_DRAINED_PER_SECOND_NMR1: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_REDUCE_DAMAGE_PERCENT: "abilityreallevelfield", + ABILITY_RLF_MINIMUM_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_IGNORED_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_FULL_DAMAGE_DEALT: "abilityreallevelfield", + ABILITY_RLF_FULL_DAMAGE_INTERVAL: "abilityreallevelfield", + ABILITY_RLF_HALF_DAMAGE_DEALT: "abilityreallevelfield", + ABILITY_RLF_HALF_DAMAGE_INTERVAL: "abilityreallevelfield", + ABILITY_RLF_BUILDING_REDUCTION_HFS5: "abilityreallevelfield", + ABILITY_RLF_MAXIMUM_DAMAGE_HFS6: "abilityreallevelfield", + ABILITY_RLF_MANA_PER_HIT_POINT: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_ABSORBED_PERCENT: "abilityreallevelfield", + ABILITY_RLF_WAVE_DISTANCE: "abilityreallevelfield", + ABILITY_RLF_WAVE_TIME_SECONDS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_DEALT_UIM3: "abilityreallevelfield", + ABILITY_RLF_AIR_TIME_SECONDS_UIM4: "abilityreallevelfield", + ABILITY_RLF_UNIT_RELEASE_INTERVAL_SECONDS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_RETURN_FACTOR: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_RETURN_THRESHOLD: "abilityreallevelfield", + ABILITY_RLF_RETURNED_DAMAGE_FACTOR: "abilityreallevelfield", + ABILITY_RLF_RECEIVED_DAMAGE_FACTOR: "abilityreallevelfield", + ABILITY_RLF_DEFENSE_BONUS_UTS3: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_NBA1: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DURATION_SECONDS_NBA3: "abilityreallevelfield", + ABILITY_RLF_MANA_PER_SUMMONED_HITPOINT: "abilityreallevelfield", + ABILITY_RLF_CHARGE_FOR_CURRENT_LIFE: "abilityreallevelfield", + ABILITY_RLF_HIT_POINTS_DRAINED: "abilityreallevelfield", + ABILITY_RLF_MANA_POINTS_DRAINED: "abilityreallevelfield", + ABILITY_RLF_DRAIN_INTERVAL_SECONDS: "abilityreallevelfield", + ABILITY_RLF_LIFE_TRANSFERRED_PER_SECOND: "abilityreallevelfield", + ABILITY_RLF_MANA_TRANSFERRED_PER_SECOND: "abilityreallevelfield", + ABILITY_RLF_BONUS_LIFE_FACTOR: "abilityreallevelfield", + ABILITY_RLF_BONUS_LIFE_DECAY: "abilityreallevelfield", + ABILITY_RLF_BONUS_MANA_FACTOR: "abilityreallevelfield", + ABILITY_RLF_BONUS_MANA_DECAY: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_MISS_PERCENT: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_MODIFIER: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_MODIFIER: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_TDG1: "abilityreallevelfield", + ABILITY_RLF_MEDIUM_DAMAGE_RADIUS_TDG2: "abilityreallevelfield", + ABILITY_RLF_MEDIUM_DAMAGE_PER_SECOND: "abilityreallevelfield", + ABILITY_RLF_SMALL_DAMAGE_RADIUS_TDG4: "abilityreallevelfield", + ABILITY_RLF_SMALL_DAMAGE_PER_SECOND: "abilityreallevelfield", + ABILITY_RLF_AIR_TIME_SECONDS_TSP1: "abilityreallevelfield", + ABILITY_RLF_MINIMUM_HIT_INTERVAL_SECONDS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_NBF5: "abilityreallevelfield", + ABILITY_RLF_MAXIMUM_RANGE: "abilityreallevelfield", + ABILITY_RLF_MINIMUM_RANGE: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_TARGET_EFK1: "abilityreallevelfield", + ABILITY_RLF_MAXIMUM_TOTAL_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_MAXIMUM_SPEED_ADJUSTMENT: "abilityreallevelfield", + ABILITY_RLF_DECAYING_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_FACTOR_ESH2: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_FACTOR_ESH3: "abilityreallevelfield", + ABILITY_RLF_DECAY_POWER: "abilityreallevelfield", + ABILITY_RLF_INITIAL_DAMAGE_ESH5: "abilityreallevelfield", + ABILITY_RLF_MAXIMUM_LIFE_ABSORBED: "abilityreallevelfield", + ABILITY_RLF_MAXIMUM_MANA_ABSORBED: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_INCREASE_BSK1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_INCREASE_BSK2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_TAKEN_INCREASE: "abilityreallevelfield", + ABILITY_RLF_LIFE_PER_UNIT: "abilityreallevelfield", + ABILITY_RLF_MANA_PER_UNIT: "abilityreallevelfield", + ABILITY_RLF_LIFE_PER_BUFF: "abilityreallevelfield", + ABILITY_RLF_MANA_PER_BUFF: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DAMAGE_DVM5: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_FAK1: "abilityreallevelfield", + ABILITY_RLF_MEDIUM_DAMAGE_FACTOR_FAK2: "abilityreallevelfield", + ABILITY_RLF_SMALL_DAMAGE_FACTOR_FAK3: "abilityreallevelfield", + ABILITY_RLF_FULL_DAMAGE_RADIUS_FAK4: "abilityreallevelfield", + ABILITY_RLF_HALF_DAMAGE_RADIUS_FAK5: "abilityreallevelfield", + ABILITY_RLF_EXTRA_DAMAGE_PER_SECOND: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_REDUCTION_LIQ2: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_REDUCTION_LIQ3: "abilityreallevelfield", + ABILITY_RLF_MAGIC_DAMAGE_FACTOR: "abilityreallevelfield", + ABILITY_RLF_UNIT_DAMAGE_PER_MANA_POINT: "abilityreallevelfield", + ABILITY_RLF_HERO_DAMAGE_PER_MANA_POINT: "abilityreallevelfield", + ABILITY_RLF_UNIT_MAXIMUM_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_HERO_MAXIMUM_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_COOLDOWN: "abilityreallevelfield", + ABILITY_RLF_DISTRIBUTED_DAMAGE_FACTOR_SPL1: "abilityreallevelfield", + ABILITY_RLF_LIFE_REGENERATED: "abilityreallevelfield", + ABILITY_RLF_MANA_REGENERATED: "abilityreallevelfield", + ABILITY_RLF_MANA_LOSS_PER_UNIT_IDC1: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DAMAGE_IDC2: "abilityreallevelfield", + ABILITY_RLF_ACTIVATION_DELAY_IMO2: "abilityreallevelfield", + ABILITY_RLF_LURE_INTERVAL_SECONDS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_ISR1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_REDUCTION_ISR2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_IPV1: "abilityreallevelfield", + ABILITY_RLF_LIFE_STEAL_AMOUNT: "abilityreallevelfield", + ABILITY_RLF_LIFE_RESTORED_FACTOR: "abilityreallevelfield", + ABILITY_RLF_MANA_RESTORED_FACTOR: "abilityreallevelfield", + ABILITY_RLF_ATTACH_DELAY: "abilityreallevelfield", + ABILITY_RLF_REMOVE_DELAY: "abilityreallevelfield", + ABILITY_RLF_HERO_REGENERATION_DELAY: "abilityreallevelfield", + ABILITY_RLF_UNIT_REGENERATION_DELAY: "abilityreallevelfield", + ABILITY_RLF_MAGIC_DAMAGE_REDUCTION_NSA4: "abilityreallevelfield", + ABILITY_RLF_HIT_POINTS_PER_SECOND_NSA5: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_TO_SUMMONED_UNITS_IXS1: "abilityreallevelfield", + ABILITY_RLF_MAGIC_DAMAGE_REDUCTION_IXS2: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DURATION: "abilityreallevelfield", + ABILITY_RLF_SHIELD_COOLDOWN_TIME: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_NDO1: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_UNIT_DURATION_SECONDS_NDO3: "abilityreallevelfield", + ABILITY_RLF_MEDIUM_DAMAGE_RADIUS_FLK1: "abilityreallevelfield", + ABILITY_RLF_SMALL_DAMAGE_RADIUS_FLK2: "abilityreallevelfield", + ABILITY_RLF_FULL_DAMAGE_AMOUNT_FLK3: "abilityreallevelfield", + ABILITY_RLF_MEDIUM_DAMAGE_AMOUNT: "abilityreallevelfield", + ABILITY_RLF_SMALL_DAMAGE_AMOUNT: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_REDUCTION_PERCENT_HBN1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_REDUCTION_PERCENT_HBN2: "abilityreallevelfield", + ABILITY_RLF_MAX_MANA_DRAINED_UNITS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_RATIO_UNITS_PERCENT: "abilityreallevelfield", + ABILITY_RLF_MAX_MANA_DRAINED_HEROS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_RATIO_HEROS_PERCENT: "abilityreallevelfield", + ABILITY_RLF_SUMMONED_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_DISTRIBUTED_DAMAGE_FACTOR_NCA1: "abilityreallevelfield", + ABILITY_RLF_INITIAL_DAMAGE_PXF1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_PXF2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PER_SECOND_MLS1: "abilityreallevelfield", + ABILITY_RLF_BEAST_COLLISION_RADIUS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_AMOUNT_NST3: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_RADIUS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_DELAY: "abilityreallevelfield", + ABILITY_RLF_FOLLOW_THROUGH_TIME: "abilityreallevelfield", + ABILITY_RLF_ART_DURATION: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_REDUCTION_PERCENT_NAB1: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_REDUCTION_PERCENT_NAB2: "abilityreallevelfield", + ABILITY_RLF_PRIMARY_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_SECONDARY_DAMAGE: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_INTERVAL_NAB6: "abilityreallevelfield", + ABILITY_RLF_GOLD_COST_FACTOR: "abilityreallevelfield", + ABILITY_RLF_LUMBER_COST_FACTOR: "abilityreallevelfield", + ABILITY_RLF_MOVE_SPEED_BONUS_NEG1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_BONUS_NEG2: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_AMOUNT_NCS1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_INTERVAL_NCS2: "abilityreallevelfield", + ABILITY_RLF_MAX_DAMAGE_NCS4: "abilityreallevelfield", + ABILITY_RLF_BUILDING_DAMAGE_FACTOR_NCS5: "abilityreallevelfield", + ABILITY_RLF_EFFECT_DURATION: "abilityreallevelfield", + ABILITY_RLF_SPAWN_INTERVAL_NSY1: "abilityreallevelfield", + ABILITY_RLF_SPAWN_UNIT_DURATION: "abilityreallevelfield", + ABILITY_RLF_SPAWN_UNIT_OFFSET: "abilityreallevelfield", + ABILITY_RLF_LEASH_RANGE_NSY5: "abilityreallevelfield", + ABILITY_RLF_SPAWN_INTERVAL_NFY1: "abilityreallevelfield", + ABILITY_RLF_LEASH_RANGE_NFY2: "abilityreallevelfield", + ABILITY_RLF_CHANCE_TO_DEMOLISH: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_MULTIPLIER_BUILDINGS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_MULTIPLIER_UNITS: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_MULTIPLIER_HEROES: "abilityreallevelfield", + ABILITY_RLF_BONUS_DAMAGE_MULTIPLIER: "abilityreallevelfield", + ABILITY_RLF_DEATH_DAMAGE_FULL_AMOUNT: "abilityreallevelfield", + ABILITY_RLF_DEATH_DAMAGE_FULL_AREA: "abilityreallevelfield", + ABILITY_RLF_DEATH_DAMAGE_HALF_AMOUNT: "abilityreallevelfield", + ABILITY_RLF_DEATH_DAMAGE_HALF_AREA: "abilityreallevelfield", + ABILITY_RLF_DEATH_DAMAGE_DELAY: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_AMOUNT_NSO1: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PERIOD: "abilityreallevelfield", + ABILITY_RLF_DAMAGE_PENALTY: "abilityreallevelfield", + ABILITY_RLF_MOVEMENT_SPEED_REDUCTION_PERCENT_NSO4: "abilityreallevelfield", + ABILITY_RLF_ATTACK_SPEED_REDUCTION_PERCENT_NSO5: "abilityreallevelfield", + ABILITY_RLF_SPLIT_DELAY: "abilityreallevelfield", + ABILITY_RLF_MAX_HITPOINT_FACTOR: "abilityreallevelfield", + ABILITY_RLF_LIFE_DURATION_SPLIT_BONUS: "abilityreallevelfield", + ABILITY_RLF_WAVE_INTERVAL: "abilityreallevelfield", + ABILITY_RLF_BUILDING_DAMAGE_FACTOR_NVC4: "abilityreallevelfield", + ABILITY_RLF_FULL_DAMAGE_AMOUNT_NVC5: "abilityreallevelfield", + ABILITY_RLF_HALF_DAMAGE_FACTOR: "abilityreallevelfield", + ABILITY_RLF_INTERVAL_BETWEEN_PULSES: "abilityreallevelfield", + ABILITY_BLF_PERCENT_BONUS_HAB2: "abilitybooleanlevelfield", + ABILITY_BLF_USE_TELEPORT_CLUSTERING_HMT3: "abilitybooleanlevelfield", + ABILITY_BLF_NEVER_MISS_OCR5: "abilitybooleanlevelfield", + ABILITY_BLF_EXCLUDE_ITEM_DAMAGE: "abilitybooleanlevelfield", + ABILITY_BLF_BACKSTAB_DAMAGE: "abilitybooleanlevelfield", + ABILITY_BLF_INHERIT_UPGRADES_UAN3: "abilitybooleanlevelfield", + ABILITY_BLF_MANA_CONVERSION_AS_PERCENT: "abilitybooleanlevelfield", + ABILITY_BLF_LIFE_CONVERSION_AS_PERCENT: "abilitybooleanlevelfield", + ABILITY_BLF_LEAVE_TARGET_ALIVE: "abilitybooleanlevelfield", + ABILITY_BLF_PERCENT_BONUS_UAU3: "abilitybooleanlevelfield", + ABILITY_BLF_DAMAGE_IS_PERCENT_RECEIVED: "abilitybooleanlevelfield", + ABILITY_BLF_MELEE_BONUS: "abilitybooleanlevelfield", + ABILITY_BLF_RANGED_BONUS: "abilitybooleanlevelfield", + ABILITY_BLF_FLAT_BONUS: "abilitybooleanlevelfield", + ABILITY_BLF_NEVER_MISS_HBH5: "abilitybooleanlevelfield", + ABILITY_BLF_PERCENT_BONUS_HAD2: "abilitybooleanlevelfield", + ABILITY_BLF_CAN_DEACTIVATE: "abilitybooleanlevelfield", + ABILITY_BLF_RAISED_UNITS_ARE_INVULNERABLE: "abilitybooleanlevelfield", + ABILITY_BLF_PERCENTAGE_OAR2: "abilitybooleanlevelfield", + ABILITY_BLF_SUMMON_BUSY_UNITS: "abilitybooleanlevelfield", + ABILITY_BLF_CREATES_BLIGHT: "abilitybooleanlevelfield", + ABILITY_BLF_EXPLODES_ON_DEATH: "abilitybooleanlevelfield", + ABILITY_BLF_ALWAYS_AUTOCAST_FAE2: "abilitybooleanlevelfield", + ABILITY_BLF_REGENERATE_ONLY_AT_NIGHT: "abilitybooleanlevelfield", + ABILITY_BLF_SHOW_SELECT_UNIT_BUTTON: "abilitybooleanlevelfield", + ABILITY_BLF_SHOW_UNIT_INDICATOR: "abilitybooleanlevelfield", + ABILITY_BLF_CHARGE_OWNING_PLAYER: "abilitybooleanlevelfield", + ABILITY_BLF_PERCENTAGE_ARM2: "abilitybooleanlevelfield", + ABILITY_BLF_TARGET_IS_INVULNERABLE: "abilitybooleanlevelfield", + ABILITY_BLF_TARGET_IS_MAGIC_IMMUNE: "abilitybooleanlevelfield", + ABILITY_BLF_KILL_ON_CASTER_DEATH: "abilitybooleanlevelfield", + ABILITY_BLF_NO_TARGET_REQUIRED_REJ4: "abilitybooleanlevelfield", + ABILITY_BLF_ACCEPTS_GOLD: "abilitybooleanlevelfield", + ABILITY_BLF_ACCEPTS_LUMBER: "abilitybooleanlevelfield", + ABILITY_BLF_PREFER_HOSTILES_ROA5: "abilitybooleanlevelfield", + ABILITY_BLF_PREFER_FRIENDLIES_ROA6: "abilitybooleanlevelfield", + ABILITY_BLF_ROOTED_TURNING: "abilitybooleanlevelfield", + ABILITY_BLF_ALWAYS_AUTOCAST_SLO3: "abilitybooleanlevelfield", + ABILITY_BLF_HIDE_BUTTON: "abilitybooleanlevelfield", + ABILITY_BLF_USE_TELEPORT_CLUSTERING_ITP2: "abilitybooleanlevelfield", + ABILITY_BLF_IMMUNE_TO_MORPH_EFFECTS: "abilitybooleanlevelfield", + ABILITY_BLF_DOES_NOT_BLOCK_BUILDINGS: "abilitybooleanlevelfield", + ABILITY_BLF_AUTO_ACQUIRE_ATTACK_TARGETS: "abilitybooleanlevelfield", + ABILITY_BLF_IMMUNE_TO_MORPH_EFFECTS_GHO2: "abilitybooleanlevelfield", + ABILITY_BLF_DO_NOT_BLOCK_BUILDINGS: "abilitybooleanlevelfield", + ABILITY_BLF_INCLUDE_RANGED_DAMAGE: "abilitybooleanlevelfield", + ABILITY_BLF_INCLUDE_MELEE_DAMAGE: "abilitybooleanlevelfield", + ABILITY_BLF_MOVE_TO_PARTNER: "abilitybooleanlevelfield", + ABILITY_BLF_CAN_BE_DISPELLED: "abilitybooleanlevelfield", + ABILITY_BLF_IGNORE_FRIENDLY_BUFFS: "abilitybooleanlevelfield", + ABILITY_BLF_DROP_ITEMS_ON_DEATH: "abilitybooleanlevelfield", + ABILITY_BLF_CAN_USE_ITEMS: "abilitybooleanlevelfield", + ABILITY_BLF_CAN_GET_ITEMS: "abilitybooleanlevelfield", + ABILITY_BLF_CAN_DROP_ITEMS: "abilitybooleanlevelfield", + ABILITY_BLF_REPAIRS_ALLOWED: "abilitybooleanlevelfield", + ABILITY_BLF_CASTER_ONLY_SPLASH: "abilitybooleanlevelfield", + ABILITY_BLF_NO_TARGET_REQUIRED_IRL4: "abilitybooleanlevelfield", + ABILITY_BLF_DISPEL_ON_ATTACK: "abilitybooleanlevelfield", + ABILITY_BLF_AMOUNT_IS_RAW_VALUE: "abilitybooleanlevelfield", + ABILITY_BLF_SHARED_SPELL_COOLDOWN: "abilitybooleanlevelfield", + ABILITY_BLF_SLEEP_ONCE: "abilitybooleanlevelfield", + ABILITY_BLF_ALLOW_ON_ANY_PLAYER_SLOT: "abilitybooleanlevelfield", + ABILITY_BLF_DISABLE_OTHER_ABILITIES: "abilitybooleanlevelfield", + ABILITY_BLF_ALLOW_BOUNTY: "abilitybooleanlevelfield", + ABILITY_SLF_ICON_NORMAL: "abilitystringlevelfield", + ABILITY_SLF_CASTER: "abilitystringlevelfield", + ABILITY_SLF_TARGET: "abilitystringlevelfield", + ABILITY_SLF_SPECIAL: "abilitystringlevelfield", + ABILITY_SLF_EFFECT: "abilitystringlevelfield", + ABILITY_SLF_AREA_EFFECT: "abilitystringlevelfield", + ABILITY_SLF_LIGHTNING_EFFECTS: "abilitystringlevelfield", + ABILITY_SLF_MISSILE_ART: "abilitystringlevelfield", + ABILITY_SLF_TOOLTIP_LEARN: "abilitystringlevelfield", + ABILITY_SLF_TOOLTIP_LEARN_EXTENDED: "abilitystringlevelfield", + ABILITY_SLF_TOOLTIP_NORMAL: "abilitystringlevelfield", + ABILITY_SLF_TOOLTIP_TURN_OFF: "abilitystringlevelfield", + ABILITY_SLF_TOOLTIP_NORMAL_EXTENDED: "abilitystringlevelfield", + ABILITY_SLF_TOOLTIP_TURN_OFF_EXTENDED: "abilitystringlevelfield", + ABILITY_SLF_NORMAL_FORM_UNIT_EME1: "abilitystringlevelfield", + ABILITY_SLF_SPAWNED_UNITS: "abilitystringlevelfield", + ABILITY_SLF_ABILITY_FOR_UNIT_CREATION: "abilitystringlevelfield", + ABILITY_SLF_NORMAL_FORM_UNIT_MIL1: "abilitystringlevelfield", + ABILITY_SLF_ALTERNATE_FORM_UNIT_MIL2: "abilitystringlevelfield", + ABILITY_SLF_BASE_ORDER_ID_ANS5: "abilitystringlevelfield", + ABILITY_SLF_MORPH_UNITS_GROUND: "abilitystringlevelfield", + ABILITY_SLF_MORPH_UNITS_AIR: "abilitystringlevelfield", + ABILITY_SLF_MORPH_UNITS_AMPHIBIOUS: "abilitystringlevelfield", + ABILITY_SLF_MORPH_UNITS_WATER: "abilitystringlevelfield", + ABILITY_SLF_UNIT_TYPE_ONE: "abilitystringlevelfield", + ABILITY_SLF_UNIT_TYPE_TWO: "abilitystringlevelfield", + ABILITY_SLF_UNIT_TYPE_SOD2: "abilitystringlevelfield", + ABILITY_SLF_SUMMON_1_UNIT_TYPE: "abilitystringlevelfield", + ABILITY_SLF_SUMMON_2_UNIT_TYPE: "abilitystringlevelfield", + ABILITY_SLF_RACE_TO_CONVERT: "abilitystringlevelfield", + ABILITY_SLF_PARTNER_UNIT_TYPE: "abilitystringlevelfield", + ABILITY_SLF_PARTNER_UNIT_TYPE_ONE: "abilitystringlevelfield", + ABILITY_SLF_PARTNER_UNIT_TYPE_TWO: "abilitystringlevelfield", + ABILITY_SLF_REQUIRED_UNIT_TYPE: "abilitystringlevelfield", + ABILITY_SLF_CONVERTED_UNIT_TYPE: "abilitystringlevelfield", + ABILITY_SLF_SPELL_LIST: "abilitystringlevelfield", + ABILITY_SLF_BASE_ORDER_ID_SPB5: "abilitystringlevelfield", + ABILITY_SLF_BASE_ORDER_ID_NCL6: "abilitystringlevelfield", + ABILITY_SLF_ABILITY_UPGRADE_1: "abilitystringlevelfield", + ABILITY_SLF_ABILITY_UPGRADE_2: "abilitystringlevelfield", + ABILITY_SLF_ABILITY_UPGRADE_3: "abilitystringlevelfield", + ABILITY_SLF_ABILITY_UPGRADE_4: "abilitystringlevelfield", + ABILITY_SLF_SPAWN_UNIT_ID_NSY2: "abilitystringlevelfield", + BUFF_SF_ICON_NORMAL: "abilitystringfield", + BUFF_SF_TOOLTIP_NORMAL: "abilitystringfield", + BUFF_SF_TOOLTIP_NORMAL_EXTENDED: "abilitystringfield", + ITEM_IF_TINTING_COLOR: "itemintegerfield", + ITEM_IF_TINTING_COLOR_RED: "itemintegerfield", + ITEM_IF_TINTING_COLOR_GREEN: "itemintegerfield", + ITEM_IF_TINTING_COLOR_BLUE: "itemintegerfield", + ITEM_IF_TINTING_COLOR_ALPHA: "itemintegerfield", + ITEM_IF_ARMOR_TYPE: "itemintegerfield", + ITEM_IF_COOLDOWN_GROUP: "itemintegerfield", + ITEM_IF_GOLD_COST: "itemintegerfield", + ITEM_IF_HIT_POINTS: "itemintegerfield", + ITEM_IF_LEVEL_UNCLASSIFIED: "itemintegerfield", + ITEM_IF_LEVEL: "itemintegerfield", + ITEM_IF_LUMBER_COST: "itemintegerfield", + ITEM_IF_NUMBER_OF_CHARGES: "itemintegerfield", + ITEM_IF_PRIORITY: "itemintegerfield", + ITEM_IF_STOCK_MAXIMUM: "itemintegerfield", + ITEM_IF_STOCK_REPLENISH_INTERVAL: "itemintegerfield", + ITEM_IF_STOCK_START_DELAY: "itemintegerfield", + ITEM_IF_MAX_HIT_POINTS: "itemintegerfield", + ITEM_RF_SCALING_VALUE: "itemrealfield", + ITEM_RF_SELECTION_SIZE: "itemrealfield", + ITEM_BF_ACTIVELY_USED: "itembooleanfield", + ITEM_BF_CAN_BE_DROPPED: "itembooleanfield", + ITEM_BF_CAN_BE_SOLD_TO_MERCHANTS: "itembooleanfield", + ITEM_BF_DROPPED_WHEN_CARRIER_DIES: "itembooleanfield", + ITEM_BF_IGNORE_COOLDOWN: "itembooleanfield", + ITEM_BF_INCLUDE_AS_RANDOM_CHOICE: "itembooleanfield", + ITEM_BF_PERISHABLE: "itembooleanfield", + ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED: "itembooleanfield", + ITEM_BF_VALID_FOR_TRANSFORMATION: "itembooleanfield", + ITEM_SF_ABILITY_LIST: "itemstringfield", + ITEM_SF_ICON: "itemstringfield", + ITEM_SF_MODEL_USED: "itemstringfield", + ITEM_SF_DESCRIPTION: "itemstringfield", + ITEM_SF_NAME: "itemstringfield", + ITEM_SF_TOOLTIP_NORMAL: "itemstringfield", + ITEM_SF_TOOLTIP_EXTENDED: "itemstringfield", + UNIT_IF_DEFENSE_TYPE: "unitintegerfield", + UNIT_IF_ARMOR_TYPE: "unitintegerfield", + UNIT_IF_LOOPING_FADE_IN_RATE: "unitintegerfield", + UNIT_IF_LOOPING_FADE_OUT_RATE: "unitintegerfield", + UNIT_IF_STRENGTH_BASE: "unitintegerfield", + UNIT_IF_AGILITY_BASE: "unitintegerfield", + UNIT_IF_INTELLIGENCE_BASE: "unitintegerfield", + UNIT_IF_STRENGTH: "unitintegerfield", + UNIT_IF_AGILITY: "unitintegerfield", + UNIT_IF_INTELLIGENCE: "unitintegerfield", + UNIT_IF_STRENGTH_PERMANENT: "unitintegerfield", + UNIT_IF_AGILITY_PERMANENT: "unitintegerfield", + UNIT_IF_INTELLIGENCE_PERMANENT: "unitintegerfield", + UNIT_IF_STRENGTH_WITH_BONUS: "unitintegerfield", + UNIT_IF_AGILITY_WITH_BONUS: "unitintegerfield", + UNIT_IF_INTELLIGENCE_WITH_BONUS: "unitintegerfield", + UNIT_IF_STRENGTH_BONUS: "unitintegerfield", + UNIT_IF_AGILITY_BONUS: "unitintegerfield", + UNIT_IF_INTELLIGENCE_BONUS: "unitintegerfield", + UNIT_IF_FOOD_USED: "unitintegerfield", + UNIT_IF_FOOD_PRODUCED: "unitintegerfield", + UNIT_IF_GOLD_COST: "unitintegerfield", + UNIT_IF_GOLD_BOUNTY_AWARDED_NUMBER_OF_DICE: "unitintegerfield", + UNIT_IF_GOLD_BOUNTY_AWARDED_BASE: "unitintegerfield", + UNIT_IF_GOLD_BOUNTY_AWARDED_SIDES_PER_DIE: "unitintegerfield", + UNIT_IF_LUMBER_COST: "unitintegerfield", + UNIT_IF_LUMBER_BOUNTY_AWARDED_NUMBER_OF_DICE: "unitintegerfield", + UNIT_IF_LUMBER_BOUNTY_AWARDED_BASE: "unitintegerfield", + UNIT_IF_LUMBER_BOUNTY_AWARDED_SIDES_PER_DIE: "unitintegerfield", + UNIT_IF_LEVEL: "unitintegerfield", + UNIT_IF_FORMATION_RANK: "unitintegerfield", + UNIT_IF_ORIENTATION_INTERPOLATION: "unitintegerfield", + UNIT_IF_ELEVATION_SAMPLE_POINTS: "unitintegerfield", + UNIT_IF_PROPER_NAMES_COUNT: "unitintegerfield", + UNIT_IF_HOTKEY: "unitintegerfield", + UNIT_IF_TINTING_COLOR: "unitintegerfield", + UNIT_IF_TINTING_COLOR_RED: "unitintegerfield", + UNIT_IF_TINTING_COLOR_GREEN: "unitintegerfield", + UNIT_IF_TINTING_COLOR_BLUE: "unitintegerfield", + UNIT_IF_TINTING_COLOR_ALPHA: "unitintegerfield", + UNIT_IF_MOVE_TYPE: "unitintegerfield", + UNIT_IF_TARGETED_AS: "unitintegerfield", + UNIT_IF_UNIT_CLASSIFICATION: "unitintegerfield", + UNIT_IF_HIT_POINTS_REGENERATION_TYPE: "unitintegerfield", + UNIT_IF_PLACEMENT_PREVENTED_BY: "unitintegerfield", + UNIT_IF_PRIMARY_ATTRIBUTE: "unitintegerfield", + UNIT_IF_COLLISION_TYPE: "unitintegerfield", + UNIT_IF_PATHING_AI: "unitintegerfield", + UNIT_IF_PATHING_TYPE: "unitintegerfield", + UNIT_RF_STRENGTH_PER_LEVEL: "unitrealfield", + UNIT_RF_AGILITY_PER_LEVEL: "unitrealfield", + UNIT_RF_INTELLIGENCE_PER_LEVEL: "unitrealfield", + UNIT_RF_HIT_POINTS_REGENERATION_RATE: "unitrealfield", + UNIT_RF_MANA_REGENERATION: "unitrealfield", + UNIT_RF_DEATH_TIME: "unitrealfield", + UNIT_RF_FLY_HEIGHT: "unitrealfield", + UNIT_RF_TURN_RATE: "unitrealfield", + UNIT_RF_ELEVATION_SAMPLE_RADIUS: "unitrealfield", + UNIT_RF_FOG_OF_WAR_SAMPLE_RADIUS: "unitrealfield", + UNIT_RF_MAXIMUM_PITCH_ANGLE_DEGREES: "unitrealfield", + UNIT_RF_MAXIMUM_ROLL_ANGLE_DEGREES: "unitrealfield", + UNIT_RF_SCALING_VALUE: "unitrealfield", + UNIT_RF_ANIMATION_RUN_SPEED: "unitrealfield", + UNIT_RF_SELECTION_SCALE: "unitrealfield", + UNIT_RF_SELECTION_CIRCLE_HEIGHT: "unitrealfield", + UNIT_RF_SHADOW_IMAGE_HEIGHT: "unitrealfield", + UNIT_RF_SHADOW_IMAGE_WIDTH: "unitrealfield", + UNIT_RF_SHADOW_IMAGE_CENTER_X: "unitrealfield", + UNIT_RF_SHADOW_IMAGE_CENTER_Y: "unitrealfield", + UNIT_RF_ANIMATION_WALK_SPEED: "unitrealfield", + UNIT_RF_DEFENSE: "unitrealfield", + UNIT_RF_SIGHT_RADIUS: "unitrealfield", + UNIT_RF_SIGHT_RADIUS_DAY: "unitrealfield", + UNIT_RF_SIGHT_RADIUS_NIGHT: "unitrealfield", + UNIT_RF_PRIORITY: "unitrealfield", + UNIT_RF_SPEED: "unitrealfield", + UNIT_RF_OCCLUDER_HEIGHT: "unitrealfield", + UNIT_RF_HP: "unitrealfield", + UNIT_RF_MANA: "unitrealfield", + UNIT_RF_ACQUISITION_RANGE: "unitrealfield", + UNIT_RF_CAST_BACK_SWING: "unitrealfield", + UNIT_RF_CAST_POINT: "unitrealfield", + UNIT_RF_MINIMUM_ATTACK_RANGE: "unitrealfield", + UNIT_RF_COLLISION_SIZE: "unitrealfield", + UNIT_RF_HEALTH_FROM_BONUS_STRENGTH: "unitrealfield", + UNIT_RF_MANA_FROM_BONUS_INTELLIGENCE: "unitrealfield", + UNIT_RF_DEFENSE_BONUS: "unitrealfield", + UNIT_RF_DEFENSE_BASE: "unitrealfield", + UNIT_RF_SPEED_BONUS: "unitrealfield", + UNIT_BF_RAISABLE: "unitbooleanfield", + UNIT_BF_DECAYABLE: "unitbooleanfield", + UNIT_BF_IS_A_BUILDING: "unitbooleanfield", + UNIT_BF_USE_EXTENDED_LINE_OF_SIGHT: "unitbooleanfield", + UNIT_BF_NEUTRAL_BUILDING_SHOWS_MINIMAP_ICON: "unitbooleanfield", + UNIT_BF_HERO_HIDE_HERO_INTERFACE_ICON: "unitbooleanfield", + UNIT_BF_HERO_HIDE_HERO_MINIMAP_DISPLAY: "unitbooleanfield", + UNIT_BF_HERO_HIDE_HERO_DEATH_MESSAGE: "unitbooleanfield", + UNIT_BF_HIDE_MINIMAP_DISPLAY: "unitbooleanfield", + UNIT_BF_SCALE_PROJECTILES: "unitbooleanfield", + UNIT_BF_SELECTION_CIRCLE_ON_WATER: "unitbooleanfield", + UNIT_BF_HAS_WATER_SHADOW: "unitbooleanfield", + UNIT_SF_HERO_ABILITY_LIST: "unitstringfield", + UNIT_SF_ABILITY_LIST: "unitstringfield", + UNIT_SF_ICON_NORMAL: "unitstringfield", + UNIT_SF_ICON_SCORE_SCREEN: "unitstringfield", + UNIT_SF_MODEL: "unitstringfield", + UNIT_SF_PORTRAIT: "unitstringfield", + UNIT_SF_SHADOW_IMAGE_UNIT: "unitstringfield", + UNIT_SF_GROUND_TEXTURE: "unitstringfield", + UNIT_SF_SPECIAL: "unitstringfield", + UNIT_SF_NAME: "unitstringfield", + UNIT_SF_PROPER_NAMES: "unitstringfield", + UNIT_SF_PROPER_NAME: "unitstringfield", + UNIT_SF_TOOLTIP_AWAKEN: "unitstringfield", + UNIT_SF_TOOLTIP_NORMAL: "unitstringfield", + UNIT_SF_TOOLTIP_EXTENDED: "unitstringfield", + UNIT_SF_TOOLTIP_REVIVE: "unitstringfield", + UNIT_WEAPON_IF_ATTACKS_ENABLED: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_DAMAGE_NUMBER_OF_DICE: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_DAMAGE_BASE: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_DAMAGE_SIDES_PER_DIE: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_MAXIMUM_NUMBER_OF_TARGETS: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_ATTACK_TYPE: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_WEAPON_TYPE: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_WEAPON_SOUND: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_AREA_OF_EFFECT_TARGETS: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_DAMAGE_BASE_MINIMUM: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_DAMAGE_BASE_MAXIMUM: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_DAMAGE_BONUS: "unitweaponintegerfield", + UNIT_WEAPON_IF_ATTACK_DAMAGE_BONUS_FROM_STATS: "unitweaponintegerfield", + UNIT_WEAPON_RF_ATTACK_BACKSWING_POINT: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_DAMAGE_LOSS_FACTOR: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_DAMAGE_FACTOR_MEDIUM: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_DAMAGE_FACTOR_SMALL: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_DAMAGE_SPILL_DISTANCE: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_DAMAGE_SPILL_RADIUS: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_AREA_OF_EFFECT_FULL_DAMAGE: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_AREA_OF_EFFECT_MEDIUM_DAMAGE: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_AREA_OF_EFFECT_SMALL_DAMAGE: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_RANGE: "unitweaponrealfield", + UNIT_WEAPON_RF_ATTACK_SPEED_BONUS: "unitweaponrealfield", + UNIT_WEAPON_BF_ATTACK_SHOW_UI: "unitweaponbooleanfield", + UNIT_WEAPON_BF_ATTACKS_ENABLED: "unitweaponbooleanfield", + UNIT_WEAPON_BF_ATTACK_PROJECTILE_HOMING_ENABLED: "unitweaponbooleanfield", + UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART: "unitweaponstringfield", + MOVE_TYPE_UNKNOWN: "movetype", + MOVE_TYPE_FOOT: "movetype", + MOVE_TYPE_FLY: "movetype", + MOVE_TYPE_HORSE: "movetype", + MOVE_TYPE_HOVER: "movetype", + MOVE_TYPE_FLOAT: "movetype", + MOVE_TYPE_AMPHIBIOUS: "movetype", + MOVE_TYPE_UNBUILDABLE: "movetype", + PATHING_AI_TYPE_FOOT: "pathingaitype", + PATHING_AI_TYPE_AMPHIBIOUS: "pathingaitype", + PATHING_AI_TYPE_FLOAT: "pathingaitype", + PATHING_AI_TYPE_FLY: "pathingaitype", + COLLISION_TYPE_NONE: "collisiontype", + COLLISION_TYPE_ANY: "collisiontype", + COLLISION_TYPE_FOOT: "collisiontype", + COLLISION_TYPE_AIR: "collisiontype", + COLLISION_TYPE_BUILDING: "collisiontype", + COLLISION_TYPE_HARVESTER: "collisiontype", + COLLISION_TYPE_BLIGHTED: "collisiontype", + COLLISION_TYPE_FLOAT: "collisiontype", + COLLISION_TYPE_AMPHIBIOUS: "collisiontype", + COLLISION_TYPE_GROUND: "collisiontype", + TARGET_FLAG_NONE: "targetflag", + TARGET_FLAG_GROUND: "targetflag", + TARGET_FLAG_AIR: "targetflag", + TARGET_FLAG_STRUCTURE: "targetflag", + TARGET_FLAG_WARD: "targetflag", + TARGET_FLAG_ITEM: "targetflag", + TARGET_FLAG_TREE: "targetflag", + TARGET_FLAG_WALL: "targetflag", + TARGET_FLAG_DEBRIS: "targetflag", + TARGET_FLAG_DECORATION: "targetflag", + TARGET_FLAG_BRIDGE: "targetflag", + TARGET_FLAG_SELF: "targetflag", + TARGET_FLAG_PLAYER_UNITS: "targetflag", + TARGET_FLAG_ALLIED: "targetflag", + TARGET_FLAG_FRIEND: "targetflag", + TARGET_FLAG_NEUTRAL: "targetflag", + TARGET_FLAG_ENEMY: "targetflag", + TARGET_FLAG_NOT_SELF: "targetflag", + TARGET_FLAG_VULNERABLE: "targetflag", + TARGET_FLAG_INVULNERABLE: "targetflag", + TARGET_FLAG_HERO: "targetflag", + TARGET_FLAG_NON_HERO: "targetflag", + TARGET_FLAG_ALIVE: "targetflag", + TARGET_FLAG_DEAD: "targetflag", + TARGET_FLAG_ORGANIC: "targetflag", + TARGET_FLAG_MECHANICAL: "targetflag", + TARGET_FLAG_NON_SUICIDAL: "targetflag", + TARGET_FLAG_SUICIDAL: "targetflag", + TARGET_FLAG_NON_ANCIENT: "targetflag", + TARGET_FLAG_ANCIENT: "targetflag", + TARGET_FLAG_EMPTY: "targetflag", + DEFENSE_TYPE_LIGHT: "defensetype", + DEFENSE_TYPE_MEDIUM: "defensetype", + DEFENSE_TYPE_LARGE: "defensetype", + DEFENSE_TYPE_FORT: "defensetype", + DEFENSE_TYPE_NORMAL: "defensetype", + DEFENSE_TYPE_HERO: "defensetype", + DEFENSE_TYPE_DIVINE: "defensetype", + DEFENSE_TYPE_NONE: "defensetype", + HERO_ATTRIBUTE_STR: "heroattribute", + HERO_ATTRIBUTE_INT: "heroattribute", + HERO_ATTRIBUTE_AGI: "heroattribute", + ARMOR_TYPE_WHOKNOWS: "armortype", + ARMOR_TYPE_FLESH: "armortype", + ARMOR_TYPE_METAL: "armortype", + ARMOR_TYPE_WOOD: "armortype", + ARMOR_TYPE_ETHREAL: "armortype", + ARMOR_TYPE_STONE: "armortype", + REGENERATION_TYPE_NONE: "regentype", + REGENERATION_TYPE_ALWAYS: "regentype", + REGENERATION_TYPE_BLIGHT: "regentype", + REGENERATION_TYPE_DAY: "regentype", + REGENERATION_TYPE_NIGHT: "regentype", + UNIT_CATEGORY_GIANT: "unitcategory", + UNIT_CATEGORY_UNDEAD: "unitcategory", + UNIT_CATEGORY_SUMMONED: "unitcategory", + UNIT_CATEGORY_MECHANICAL: "unitcategory", + UNIT_CATEGORY_PEON: "unitcategory", + UNIT_CATEGORY_SAPPER: "unitcategory", + UNIT_CATEGORY_TOWNHALL: "unitcategory", + UNIT_CATEGORY_ANCIENT: "unitcategory", + UNIT_CATEGORY_NEUTRAL: "unitcategory", + UNIT_CATEGORY_WARD: "unitcategory", + UNIT_CATEGORY_STANDON: "unitcategory", + UNIT_CATEGORY_TAUREN: "unitcategory", + PATHING_FLAG_UNWALKABLE: "pathingflag", + PATHING_FLAG_UNFLYABLE: "pathingflag", + PATHING_FLAG_UNBUILDABLE: "pathingflag", + PATHING_FLAG_UNPEONHARVEST: "pathingflag", + PATHING_FLAG_BLIGHTED: "pathingflag", + PATHING_FLAG_UNFLOATABLE: "pathingflag", + PATHING_FLAG_UNAMPHIBIOUS: "pathingflag", + PATHING_FLAG_UNITEMPLACABLE: "pathingflag", + TIME_TYPE_YEAR: "timetype", + TIME_TYPE_MONTH: "timetype", + TIME_TYPE_DAY_OF_WEEK: "timetype", + TIME_TYPE_DAY: "timetype", + TIME_TYPE_HOUR: "timetype", + TIME_TYPE_MINUTE: "timetype", + TIME_TYPE_SECOND: "timetype", + TIME_TYPE_MILLISECOND: "timetype", + VARIABLE_TYPE_NOTHING: "variabletype", + VARIABLE_TYPE_UNKNOWN: "variabletype", + VARIABLE_TYPE_NULL: "variabletype", + VARIABLE_TYPE_CODE: "variabletype", + VARIABLE_TYPE_INTEGER: "variabletype", + VARIABLE_TYPE_REAL: "variabletype", + VARIABLE_TYPE_STRING: "variabletype", + VARIABLE_TYPE_HANDLE: "variabletype", + VARIABLE_TYPE_BOOLEAN: "variabletype", + VARIABLE_TYPE_INTEGER_ARRAY: "variabletype", + VARIABLE_TYPE_REAL_ARRAY: "variabletype", + VARIABLE_TYPE_STRING_ARRAY: "variabletype", + VARIABLE_TYPE_HANDLE_ARRAY: "variabletype", + VARIABLE_TYPE_BOOLEAN_ARRAY: "variabletype", + RENDER_STAGE_SKYBOX: "renderstage", + RENDER_STAGE_TERRAIN: "renderstage", + RENDER_STAGE_FOG_OF_WAR: "renderstage", + RENDER_STAGE_TERRAIN_SHADOW: "renderstage", + RENDER_STAGE_WATER_SHADOW: "renderstage", + RENDER_STAGE_BLIGHT: "renderstage", + RENDER_STAGE_WEATHER: "renderstage", + RENDER_STAGE_SELECTION_CIRCLE: "renderstage", + RENDER_STAGE_INDICATOR: "renderstage", + RENDER_STAGE_FOOTPRINT: "renderstage", + RENDER_STAGE_DOODAD: "renderstage", + RENDER_STAGE_SPRITE: "renderstage", + RENDER_STAGE_SELECTION_SPRITE: "renderstage", + RENDER_STAGE_DECORATION: "renderstage", + RENDER_STAGE_WATER: "renderstage", + RENDER_STAGE_SELECTION_BOX: "renderstage", + RENDER_STAGE_TEXTURE: "renderstage", + RENDER_STAGE_OCCLUSION_MASK: "renderstage", + RENDER_STAGE_BUILDING: "renderstage", + RENDER_STAGE_UBERSPLAT: "renderstage", + RENDER_STAGE_LIGHTNING: "renderstage", + RENDER_STAGE_TEXTTAG: "renderstage", + BORDER_FLAG_UPPER_LEFT: "integer", + BORDER_FLAG_UPPER_RIGHT: "integer", + BORDER_FLAG_BOTTOM_LEFT: "integer", + BORDER_FLAG_BOTTOM_RIGHT: "integer", + BORDER_FLAG_TOP: "integer", + BORDER_FLAG_LEFT: "integer", + BORDER_FLAG_BOTTOM: "integer", + BORDER_FLAG_RIGHT: "integer", + BORDER_FLAG_ALL: "integer", + bj_PI: "real", + bj_E: "real", + bj_CELLWIDTH: "real", + bj_CLIFFHEIGHT: "real", + bj_UNIT_FACING: "real", + bj_RADTODEG: "real", + bj_DEGTORAD: "real", + bj_TEXT_DELAY_QUEST: "real", + bj_TEXT_DELAY_QUESTUPDATE: "real", + bj_TEXT_DELAY_QUESTDONE: "real", + bj_TEXT_DELAY_QUESTFAILED: "real", + bj_TEXT_DELAY_QUESTREQUIREMENT: "real", + bj_TEXT_DELAY_MISSIONFAILED: "real", + bj_TEXT_DELAY_ALWAYSHINT: "real", + bj_TEXT_DELAY_HINT: "real", + bj_TEXT_DELAY_SECRET: "real", + bj_TEXT_DELAY_UNITACQUIRED: "real", + bj_TEXT_DELAY_UNITAVAILABLE: "real", + bj_TEXT_DELAY_ITEMACQUIRED: "real", + bj_TEXT_DELAY_WARNING: "real", + bj_QUEUE_DELAY_QUEST: "real", + bj_QUEUE_DELAY_HINT: "real", + bj_QUEUE_DELAY_SECRET: "real", + bj_HANDICAP_EASY: "real", + bj_GAME_STARTED_THRESHOLD: "real", + bj_WAIT_FOR_COND_MIN_INTERVAL: "real", + bj_POLLED_WAIT_INTERVAL: "real", + bj_POLLED_WAIT_SKIP_THRESHOLD: "real", + bj_MAX_INVENTORY: "integer", + bj_MAX_PLAYERS: "integer", + bj_PLAYER_NEUTRAL_VICTIM: "integer", + bj_PLAYER_NEUTRAL_EXTRA: "integer", + bj_MAX_PLAYER_SLOTS: "integer", + bj_MAX_SKELETONS: "integer", + bj_MAX_STOCK_ITEM_SLOTS: "integer", + bj_MAX_STOCK_UNIT_SLOTS: "integer", + bj_MAX_ITEM_LEVEL: "integer", + bj_TOD_DAWN: "real", + bj_TOD_DUSK: "real", + bj_MELEE_STARTING_TOD: "real", + bj_MELEE_STARTING_GOLD_V0: "integer", + bj_MELEE_STARTING_GOLD_V1: "integer", + bj_MELEE_STARTING_LUMBER_V0: "integer", + bj_MELEE_STARTING_LUMBER_V1: "integer", + bj_MELEE_STARTING_HERO_TOKENS: "integer", + bj_MELEE_HERO_LIMIT: "integer", + bj_MELEE_HERO_TYPE_LIMIT: "integer", + bj_MELEE_MINE_SEARCH_RADIUS: "real", + bj_MELEE_CLEAR_UNITS_RADIUS: "real", + bj_MELEE_CRIPPLE_TIMEOUT: "real", + bj_MELEE_CRIPPLE_MSG_DURATION: "real", + bj_MELEE_MAX_TWINKED_HEROES_V0: "integer", + bj_MELEE_MAX_TWINKED_HEROES_V1: "integer", + bj_CREEP_ITEM_DELAY: "real", + bj_STOCK_RESTOCK_INITIAL_DELAY: "real", + bj_STOCK_RESTOCK_INTERVAL: "real", + bj_STOCK_MAX_ITERATIONS: "integer", + bj_MAX_DEST_IN_REGION_EVENTS: "integer", + bj_CAMERA_MIN_FARZ: "integer", + bj_CAMERA_DEFAULT_DISTANCE: "integer", + bj_CAMERA_DEFAULT_FARZ: "integer", + bj_CAMERA_DEFAULT_AOA: "integer", + bj_CAMERA_DEFAULT_FOV: "integer", + bj_CAMERA_DEFAULT_ROLL: "integer", + bj_CAMERA_DEFAULT_ROTATION: "integer", + bj_RESCUE_PING_TIME: "real", + bj_NOTHING_SOUND_DURATION: "real", + bj_TRANSMISSION_PING_TIME: "real", + bj_TRANSMISSION_IND_RED: "integer", + bj_TRANSMISSION_IND_BLUE: "integer", + bj_TRANSMISSION_IND_GREEN: "integer", + bj_TRANSMISSION_IND_ALPHA: "integer", + bj_TRANSMISSION_PORT_HANGTIME: "real", + bj_CINEMODE_INTERFACEFADE: "real", + bj_CINEMODE_GAMESPEED: "gamespeed", + bj_CINEMODE_VOLUME_UNITMOVEMENT: "real", + bj_CINEMODE_VOLUME_UNITSOUNDS: "real", + bj_CINEMODE_VOLUME_COMBAT: "real", + bj_CINEMODE_VOLUME_SPELLS: "real", + bj_CINEMODE_VOLUME_UI: "real", + bj_CINEMODE_VOLUME_MUSIC: "real", + bj_CINEMODE_VOLUME_AMBIENTSOUNDS: "real", + bj_CINEMODE_VOLUME_FIRE: "real", + bj_SPEECH_VOLUME_UNITMOVEMENT: "real", + bj_SPEECH_VOLUME_UNITSOUNDS: "real", + bj_SPEECH_VOLUME_COMBAT: "real", + bj_SPEECH_VOLUME_SPELLS: "real", + bj_SPEECH_VOLUME_UI: "real", + bj_SPEECH_VOLUME_MUSIC: "real", + bj_SPEECH_VOLUME_AMBIENTSOUNDS: "real", + bj_SPEECH_VOLUME_FIRE: "real", + bj_SMARTPAN_TRESHOLD_PAN: "real", + bj_SMARTPAN_TRESHOLD_SNAP: "real", + bj_MAX_QUEUED_TRIGGERS: "integer", + bj_QUEUED_TRIGGER_TIMEOUT: "real", + bj_CAMPAIGN_INDEX_T: "integer", + bj_CAMPAIGN_INDEX_H: "integer", + bj_CAMPAIGN_INDEX_U: "integer", + bj_CAMPAIGN_INDEX_O: "integer", + bj_CAMPAIGN_INDEX_N: "integer", + bj_CAMPAIGN_INDEX_XN: "integer", + bj_CAMPAIGN_INDEX_XH: "integer", + bj_CAMPAIGN_INDEX_XU: "integer", + bj_CAMPAIGN_INDEX_XO: "integer", + bj_CAMPAIGN_OFFSET_T: "integer", + bj_CAMPAIGN_OFFSET_H: "integer", + bj_CAMPAIGN_OFFSET_U: "integer", + bj_CAMPAIGN_OFFSET_O: "integer", + bj_CAMPAIGN_OFFSET_N: "integer", + bj_CAMPAIGN_OFFSET_XN: "integer", + bj_CAMPAIGN_OFFSET_XH: "integer", + bj_CAMPAIGN_OFFSET_XU: "integer", + bj_CAMPAIGN_OFFSET_XO: "integer", + bj_MISSION_INDEX_T00: "integer", + bj_MISSION_INDEX_T01: "integer", + bj_MISSION_INDEX_H00: "integer", + bj_MISSION_INDEX_H01: "integer", + bj_MISSION_INDEX_H02: "integer", + bj_MISSION_INDEX_H03: "integer", + bj_MISSION_INDEX_H04: "integer", + bj_MISSION_INDEX_H05: "integer", + bj_MISSION_INDEX_H06: "integer", + bj_MISSION_INDEX_H07: "integer", + bj_MISSION_INDEX_H08: "integer", + bj_MISSION_INDEX_H09: "integer", + bj_MISSION_INDEX_H10: "integer", + bj_MISSION_INDEX_H11: "integer", + bj_MISSION_INDEX_U00: "integer", + bj_MISSION_INDEX_U01: "integer", + bj_MISSION_INDEX_U02: "integer", + bj_MISSION_INDEX_U03: "integer", + bj_MISSION_INDEX_U05: "integer", + bj_MISSION_INDEX_U07: "integer", + bj_MISSION_INDEX_U08: "integer", + bj_MISSION_INDEX_U09: "integer", + bj_MISSION_INDEX_U10: "integer", + bj_MISSION_INDEX_U11: "integer", + bj_MISSION_INDEX_O00: "integer", + bj_MISSION_INDEX_O01: "integer", + bj_MISSION_INDEX_O02: "integer", + bj_MISSION_INDEX_O03: "integer", + bj_MISSION_INDEX_O04: "integer", + bj_MISSION_INDEX_O05: "integer", + bj_MISSION_INDEX_O06: "integer", + bj_MISSION_INDEX_O07: "integer", + bj_MISSION_INDEX_O08: "integer", + bj_MISSION_INDEX_O09: "integer", + bj_MISSION_INDEX_O10: "integer", + bj_MISSION_INDEX_N00: "integer", + bj_MISSION_INDEX_N01: "integer", + bj_MISSION_INDEX_N02: "integer", + bj_MISSION_INDEX_N03: "integer", + bj_MISSION_INDEX_N04: "integer", + bj_MISSION_INDEX_N05: "integer", + bj_MISSION_INDEX_N06: "integer", + bj_MISSION_INDEX_N07: "integer", + bj_MISSION_INDEX_N08: "integer", + bj_MISSION_INDEX_N09: "integer", + bj_MISSION_INDEX_XN00: "integer", + bj_MISSION_INDEX_XN01: "integer", + bj_MISSION_INDEX_XN02: "integer", + bj_MISSION_INDEX_XN03: "integer", + bj_MISSION_INDEX_XN04: "integer", + bj_MISSION_INDEX_XN05: "integer", + bj_MISSION_INDEX_XN06: "integer", + bj_MISSION_INDEX_XN07: "integer", + bj_MISSION_INDEX_XN08: "integer", + bj_MISSION_INDEX_XN09: "integer", + bj_MISSION_INDEX_XN10: "integer", + bj_MISSION_INDEX_XH00: "integer", + bj_MISSION_INDEX_XH01: "integer", + bj_MISSION_INDEX_XH02: "integer", + bj_MISSION_INDEX_XH03: "integer", + bj_MISSION_INDEX_XH04: "integer", + bj_MISSION_INDEX_XH05: "integer", + bj_MISSION_INDEX_XH06: "integer", + bj_MISSION_INDEX_XH07: "integer", + bj_MISSION_INDEX_XH08: "integer", + bj_MISSION_INDEX_XH09: "integer", + bj_MISSION_INDEX_XU00: "integer", + bj_MISSION_INDEX_XU01: "integer", + bj_MISSION_INDEX_XU02: "integer", + bj_MISSION_INDEX_XU03: "integer", + bj_MISSION_INDEX_XU04: "integer", + bj_MISSION_INDEX_XU05: "integer", + bj_MISSION_INDEX_XU06: "integer", + bj_MISSION_INDEX_XU07: "integer", + bj_MISSION_INDEX_XU08: "integer", + bj_MISSION_INDEX_XU09: "integer", + bj_MISSION_INDEX_XU10: "integer", + bj_MISSION_INDEX_XU11: "integer", + bj_MISSION_INDEX_XU12: "integer", + bj_MISSION_INDEX_XU13: "integer", + bj_MISSION_INDEX_XO00: "integer", + bj_CINEMATICINDEX_TOP: "integer", + bj_CINEMATICINDEX_HOP: "integer", + bj_CINEMATICINDEX_HED: "integer", + bj_CINEMATICINDEX_OOP: "integer", + bj_CINEMATICINDEX_OED: "integer", + bj_CINEMATICINDEX_UOP: "integer", + bj_CINEMATICINDEX_UED: "integer", + bj_CINEMATICINDEX_NOP: "integer", + bj_CINEMATICINDEX_NED: "integer", + bj_CINEMATICINDEX_XOP: "integer", + bj_CINEMATICINDEX_XED: "integer", + bj_ALLIANCE_UNALLIED: "integer", + bj_ALLIANCE_UNALLIED_VISION: "integer", + bj_ALLIANCE_ALLIED: "integer", + bj_ALLIANCE_ALLIED_VISION: "integer", + bj_ALLIANCE_ALLIED_UNITS: "integer", + bj_ALLIANCE_ALLIED_ADVUNITS: "integer", + bj_ALLIANCE_NEUTRAL: "integer", + bj_ALLIANCE_NEUTRAL_VISION: "integer", + bj_KEYEVENTTYPE_DEPRESS: "integer", + bj_KEYEVENTTYPE_RELEASE: "integer", + bj_KEYEVENTKEY_LEFT: "integer", + bj_KEYEVENTKEY_RIGHT: "integer", + bj_KEYEVENTKEY_DOWN: "integer", + bj_KEYEVENTKEY_UP: "integer", + bj_TIMETYPE_ADD: "integer", + bj_TIMETYPE_SET: "integer", + bj_TIMETYPE_SUB: "integer", + bj_CAMERABOUNDS_ADJUST_ADD: "integer", + bj_CAMERABOUNDS_ADJUST_SUB: "integer", + bj_QUESTTYPE_REQ_DISCOVERED: "integer", + bj_QUESTTYPE_REQ_UNDISCOVERED: "integer", + bj_QUESTTYPE_OPT_DISCOVERED: "integer", + bj_QUESTTYPE_OPT_UNDISCOVERED: "integer", + bj_QUESTMESSAGE_DISCOVERED: "integer", + bj_QUESTMESSAGE_UPDATED: "integer", + bj_QUESTMESSAGE_COMPLETED: "integer", + bj_QUESTMESSAGE_FAILED: "integer", + bj_QUESTMESSAGE_REQUIREMENT: "integer", + bj_QUESTMESSAGE_MISSIONFAILED: "integer", + bj_QUESTMESSAGE_ALWAYSHINT: "integer", + bj_QUESTMESSAGE_HINT: "integer", + bj_QUESTMESSAGE_SECRET: "integer", + bj_QUESTMESSAGE_UNITACQUIRED: "integer", + bj_QUESTMESSAGE_UNITAVAILABLE: "integer", + bj_QUESTMESSAGE_ITEMACQUIRED: "integer", + bj_QUESTMESSAGE_WARNING: "integer", + bj_SORTTYPE_SORTBYVALUE: "integer", + bj_SORTTYPE_SORTBYPLAYER: "integer", + bj_SORTTYPE_SORTBYLABEL: "integer", + bj_CINEFADETYPE_FADEIN: "integer", + bj_CINEFADETYPE_FADEOUT: "integer", + bj_CINEFADETYPE_FADEOUTIN: "integer", + bj_REMOVEBUFFS_POSITIVE: "integer", + bj_REMOVEBUFFS_NEGATIVE: "integer", + bj_REMOVEBUFFS_ALL: "integer", + bj_REMOVEBUFFS_NONTLIFE: "integer", + bj_BUFF_POLARITY_POSITIVE: "integer", + bj_BUFF_POLARITY_NEGATIVE: "integer", + bj_BUFF_POLARITY_EITHER: "integer", + bj_BUFF_RESIST_MAGIC: "integer", + bj_BUFF_RESIST_PHYSICAL: "integer", + bj_BUFF_RESIST_EITHER: "integer", + bj_BUFF_RESIST_BOTH: "integer", + bj_HEROSTAT_STR: "integer", + bj_HEROSTAT_AGI: "integer", + bj_HEROSTAT_INT: "integer", + bj_MODIFYMETHOD_ADD: "integer", + bj_MODIFYMETHOD_SUB: "integer", + bj_MODIFYMETHOD_SET: "integer", + bj_UNIT_STATE_METHOD_ABSOLUTE: "integer", + bj_UNIT_STATE_METHOD_RELATIVE: "integer", + bj_UNIT_STATE_METHOD_DEFAULTS: "integer", + bj_UNIT_STATE_METHOD_MAXIMUM: "integer", + bj_GATEOPERATION_CLOSE: "integer", + bj_GATEOPERATION_OPEN: "integer", + bj_GATEOPERATION_DESTROY: "integer", + bj_GAMECACHE_BOOLEAN: "integer", + bj_GAMECACHE_INTEGER: "integer", + bj_GAMECACHE_REAL: "integer", + bj_GAMECACHE_UNIT: "integer", + bj_GAMECACHE_STRING: "integer", + bj_HASHTABLE_BOOLEAN: "integer", + bj_HASHTABLE_INTEGER: "integer", + bj_HASHTABLE_REAL: "integer", + bj_HASHTABLE_STRING: "integer", + bj_HASHTABLE_HANDLE: "integer", + bj_ITEM_STATUS_HIDDEN: "integer", + bj_ITEM_STATUS_OWNED: "integer", + bj_ITEM_STATUS_INVULNERABLE: "integer", + bj_ITEM_STATUS_POWERUP: "integer", + bj_ITEM_STATUS_SELLABLE: "integer", + bj_ITEM_STATUS_PAWNABLE: "integer", + bj_ITEMCODE_STATUS_POWERUP: "integer", + bj_ITEMCODE_STATUS_SELLABLE: "integer", + bj_ITEMCODE_STATUS_PAWNABLE: "integer", + bj_MINIMAPPINGSTYLE_SIMPLE: "integer", + bj_MINIMAPPINGSTYLE_FLASHY: "integer", + bj_MINIMAPPINGSTYLE_ATTACK: "integer", + bj_CORPSE_MAX_DEATH_TIME: "real", + bj_CORPSETYPE_FLESH: "integer", + bj_CORPSETYPE_BONE: "integer", + bj_ELEVATOR_BLOCKER_CODE: "integer", + bj_ELEVATOR_CODE01: "integer", + bj_ELEVATOR_CODE02: "integer", + bj_ELEVATOR_WALL_TYPE_ALL: "integer", + bj_ELEVATOR_WALL_TYPE_EAST: "integer", + bj_ELEVATOR_WALL_TYPE_NORTH: "integer", + bj_ELEVATOR_WALL_TYPE_SOUTH: "integer", + bj_ELEVATOR_WALL_TYPE_WEST: "integer" +}; + +// ../unsafe/dist/lib/constants/index.js +var globalHandleTypes = {}; +var getGlobal = function(name) { + if (typeof name !== "string") + return; + var nameLower = name.toLowerCase(); + if (nameLower.match("oskey") || nameLower.match("type") || nameLower.match("event") || nameLower.match("frame") || nameLower.match("flag")) { + return new HandleHolder2(fakeHandleType); + } + if (nameLower.startsWith("bj_")) + return 0; + if (globalHandleTypes[name]) + return new HandleHolder2(globalHandleTypes[name]); + return void 0; +}; + +// ../unsafe/dist/lib/index.js +globalThis.HandleHolder = HandleHolder2; +var fakeHandleType = "_enum"; +var getGlobalsKeys = function() { + return Object.keys(globals_default); +}; + +// src/console/Console.ts +var Console = class { + trace(...args) { + consoleLog(1, ...args); + } + debug(...args) { + consoleLog(2, ...args); + } + info(...args) { + consoleLog(3, ...args); + } + warn(...args) { + consoleLog(4, ...args); + } + error(...args) { + consoleLog(5, ...args); + } + log(...args) { + consoleLog(0, ...args); + } +}; + +// node_modules/@war3js/events/events.js +import events from "events"; +var EventEmitter = events; +var once = events.once; + +// src/handles/Handle.ts +var _handle; +var _Handle = class _Handle extends EventEmitter { + constructor(handleHolder) { + super(); + __privateAdd(this, _handle, void 0); + let targetHandleHolder; + if (handleHolder instanceof HandleHolder) + targetHandleHolder = handleHolder; + if (handleHolder instanceof _Handle) + targetHandleHolder = __privateGet(handleHolder, _handle); + targetHandleHolder.payload = this; + __privateSet(this, _handle, targetHandleHolder); + } + get handle() { + return __privateGet(this, _handle); + } + equals(anotherHandle) { + return __privateGet(this, _handle).equals(anotherHandle ? __privateGet(anotherHandle, _handle) : null); + } +}; +_handle = new WeakMap(); +var Handle = _Handle; + +// src/utils/ToHandleHolder.ts +function toHandleHolderSoft(value) { + if (value instanceof Handle) { + return value.handle; + } + return value; +} + +// src/utils/FromHandleHolder.ts +function fromHandleHolderSoft(arg) { + if (arg instanceof HandleHolder) + return arg.payload || arg; + return arg; +} + +// src/utils/runtime.ts +var isNode = "process" in globalThis && globalThis?.process?.versions?.node; + +// src/utils/common.ts +var CreateDestructableNe = getNativeByName("CreateDestructable", false, true); +var CreateItemNe = getNativeByName("CreateItem", false, true); +var CreateTriggerNe = getNativeByName("CreateTrigger", false, true); +var GetTriggeringTriggerNe = getNativeByName("GetTriggeringTrigger", false, true); +var CreateTimerNe = getNativeByName("CreateTimer", false, true); +var CreateUnitNe = getNativeByName("CreateUnit", false, true); +var CreateAbilityNe = getNativeByName("CreateAbility", false, true); +var CreateCorpseNe = getNativeByName("CreateCorpse", false, true); +var CreateBuildingExNe = getNativeByName("CreateBuildingEx", false, true); +var CreateIllusionNe = getNativeByName("CreateIllusion", false, true); +var CreateIllusionFromUnitExNe = getNativeByName( + "CreateIllusionFromUnitEx", + false, + true +); +var DestroyTrigger = getNativeByName("DestroyTrigger"); +var DestroyTimer = getNativeByName("DestroyTimer"); +var ResetTrigger = getNativeByName("ResetTrigger"); +var EnableTrigger = getNativeByName("EnableTrigger"); +var DisableTrigger = getNativeByName("DisableTrigger"); +var IsTriggerEnabled = getNativeByName("IsTriggerEnabled"); +var TimerStart = getNativeByName( + "TimerStart" +); +var PlayerNative = getNativeByName("Player"); +var GetLocalPlayer = getNativeByName("GetLocalPlayer"); +var GetAbilityBaseRealFieldById = getNativeByName( + "GetAbilityBaseRealFieldById" +); +var GetAbilityBaseIntegerFieldById = getNativeByName( + "GetAbilityBaseIntegerFieldById" +); +var GetAbilityBaseBooleanFieldById = getNativeByName( + "GetAbilityBaseBooleanFieldById" +); +var GetAbilityBaseStringFieldById = getNativeByName( + "GetAbilityBaseStringFieldById" +); +var GetAbilityBaseRealLevelFieldById = getNativeByName( + "GetAbilityBaseRealLevelFieldById" +); +var GetAbilityBaseIntegerLevelFieldById = getNativeByName( + "GetAbilityBaseIntegerLevelFieldById" +); +var GetAbilityBaseBooleanLevelFieldById = getNativeByName( + "GetAbilityBaseBooleanLevelFieldById" +); +var GetAbilityBaseStringLevelFieldById = getNativeByName( + "GetAbilityBaseStringLevelFieldById" +); +var SetAbilityBaseBooleanFieldById = getNativeByName( + "SetAbilityBaseBooleanFieldById" +); +var SetAbilityBaseStringFieldById = getNativeByName( + "SetAbilityBaseStringFieldById" +); +var SetAbilityBaseRealFieldById = getNativeByName( + "SetAbilityBaseRealFieldById" +); +var SetAbilityBaseIntegerFieldById = getNativeByName( + "SetAbilityBaseIntegerFieldById" +); +var SetAbilityBaseRealLevelFieldById = getNativeByName("SetAbilityBaseRealLevelFieldById"); +var SetAbilityBaseIntegerLevelFieldById = getNativeByName("SetAbilityBaseIntegerLevelFieldById"); +var SetAbilityBaseBooleanLevelFieldById = getNativeByName("SetAbilityBaseBooleanLevelFieldById"); +var SetAbilityBaseStringLevelFieldById = getNativeByName("SetAbilityBaseStringLevelFieldById"); +var GetAbilityRealField = getNativeByName( + "GetAbilityRealField" +); +var GetAbilityIntegerField = getNativeByName( + "GetAbilityIntegerField" +); +var GetAbilityBooleanField = getNativeByName( + "GetAbilityBooleanField" +); +var GetAbilityStringField = getNativeByName( + "GetAbilityStringField" +); +var GetAbilityRealLevelField = getNativeByName("GetAbilityRealLevelField"); +var GetAbilityIntegerLevelField = getNativeByName("GetAbilityIntegerLevelField"); +var GetAbilityBooleanLevelField = getNativeByName("GetAbilityBooleanLevelField"); +var GetAbilityStringLevelField = getNativeByName("GetAbilityStringLevelField"); +var SetAbilityBooleanField = getNativeByName("SetAbilityBooleanField"); +var SetAbilityStringField = getNativeByName( + "SetAbilityStringField" +); +var SetAbilityRealField = getNativeByName( + "SetAbilityRealField" +); +var SetAbilityIntegerField = getNativeByName("SetAbilityIntegerField"); +var SetAbilityRealLevelField = getNativeByName("SetAbilityRealLevelField"); +var SetAbilityIntegerLevelField = getNativeByName("SetAbilityIntegerLevelField"); +var SetAbilityBooleanLevelField = getNativeByName("SetAbilityBooleanLevelField"); +var SetAbilityStringLevelField = getNativeByName("SetAbilityStringLevelField"); +var GetTriggerUnit = getNativeByName("GetTriggerUnit"); +var GetEventDamage = getNativeByName("GetEventDamage"); +var GetEventDamageSource = getNativeByName("GetEventDamageSource"); +var GetKillingUnit = getNativeByName("GetKillingUnit"); +var GetEventDetectingPlayer = getNativeByName("GetEventDetectingPlayer"); +var GetEventUnitState = getNativeByName("GetEventUnitState"); +var GetEventTargetUnit = getNativeByName("GetEventTargetUnit"); +var GetAttacker = getNativeByName("GetAttacker"); +var GetRescuer = getNativeByName("GetRescuer"); +var GetConstructedStructure = getNativeByName("GetConstructedStructure"); +var GetTrainedUnitType = getNativeByName("GetTrainedUnitType"); +var GetTrainedUnit = getNativeByName("GetTrainedUnit"); +var GetResearched = getNativeByName("GetResearched"); +var GetIssuedOrderId = getNativeByName("GetIssuedOrderId"); +var GetOrderPointX = getNativeByName("GetOrderPointX"); +var GetOrderPointY = getNativeByName("GetOrderPointY"); +var GetOrderPointLoc = getNativeByName("GetOrderPointLoc"); +var GetOrderTarget = getNativeByName("GetOrderTarget"); +var GetOrderTargetDestructable = getNativeByName("GetOrderTargetDestructable"); +var GetOrderTargetItem = getNativeByName("GetOrderTargetItem"); +var GetOrderTargetUnit = getNativeByName("GetOrderTargetUnit"); +var GetLearnedSkill = getNativeByName("GetLearnedSkill"); +var GetLearnedSkillLevel = getNativeByName("GetLearnedSkillLevel"); +var GetRevivableUnit = getNativeByName("GetRevivableUnit"); +var GetRevivingUnit = getNativeByName("GetRevivingUnit"); +var GetSummonedUnit = getNativeByName("GetSummonedUnit"); +var GetManipulatedItem = getNativeByName("GetManipulatedItem"); +var GetTransportUnit = getNativeByName("GetTransportUnit"); +var GetTriggerBuff = getNativeByName("GetTriggerBuff"); +var GetTriggerBuffSourceAbility = getNativeByName("GetTriggerBuffSourceAbility"); +var GetTriggerBuffSourceUnit = getNativeByName("GetTriggerBuffSourceUnit"); +var GetTriggerBuffTarget = getNativeByName("GetTriggerBuffTarget"); +var GetTriggerProjectileTarget = getNativeByName("GetTriggerProjectileTarget"); +var GetTriggerProjectileSource = getNativeByName("GetTriggerProjectileSource"); +var GetTriggerProjectile = getNativeByName("GetTriggerProjectile"); +var GetSpellAbilityId = getNativeByName("GetSpellAbilityId"); +var GetSpellAbility = getNativeByName("GetSpellAbility"); +var GetSpellTargetX = getNativeByName("GetSpellTargetX"); +var GetSpellTargetY = getNativeByName("GetSpellTargetY"); +var GetSpellTargetDestructable = getNativeByName("GetSpellTargetDestructable"); +var GetSpellTargetItem = getNativeByName("GetSpellTargetItem"); +var GetSpellTargetUnit = getNativeByName("GetSpellTargetUnit"); +var TriggerRegisterUnitEventNe = getNativeByName( + "TriggerRegisterUnitEvent", + false, + true +); +var TriggerRegisterUnitStateEventNe = getNativeByName("TriggerRegisterUnitStateEvent", false, true); +var TriggerAddActionNe = getNativeByName( + "TriggerAddAction", + false, + true +); +var ABILITY_IF_LEVELS = getGlobal("ABILITY_IF_LEVELS"); +var UnitStates = { + UNIT_STATE_LIFE: getGlobal("UNIT_STATE_LIFE"), + UNIT_STATE_MAX_LIFE: getGlobal("UNIT_STATE_MAX_LIFE"), + UNIT_STATE_MANA: getGlobal("UNIT_STATE_MANA"), + UNIT_STATE_MAX_MANA: getGlobal("UNIT_STATE_MAX_MANA") +}; +var LimitOps = { + LESS_THAN: getGlobal("LESS_THAN"), + LESS_THAN_OR_EQUAL: getGlobal("LESS_THAN_OR_EQUAL"), + EQUAL: getGlobal("EQUAL"), + GREATER_THAN_OR_EQUAL: getGlobal("GREATER_THAN_OR_EQUAL"), + GREATER_THAN: getGlobal("GREATER_THAN"), + NOT_EQUAL: getGlobal("NOT_EQUAL") +}; +var UnitEvents = { + EVENT_UNIT_DAMAGED: getGlobal("EVENT_UNIT_DAMAGED"), + EVENT_UNIT_DAMAGING: getGlobal("EVENT_UNIT_DAMAGING"), + EVENT_UNIT_DEATH: getGlobal("EVENT_UNIT_DEATH"), + EVENT_UNIT_DECAY: getGlobal("EVENT_UNIT_DECAY"), + EVENT_UNIT_DETECTED: getGlobal("EVENT_UNIT_DETECTED"), + EVENT_UNIT_HIDDEN: getGlobal("EVENT_UNIT_HIDDEN"), + EVENT_UNIT_SELECTED: getGlobal("EVENT_UNIT_SELECTED"), + EVENT_UNIT_DESELECTED: getGlobal("EVENT_UNIT_DESELECTED"), + EVENT_UNIT_STATE_LIMIT: getGlobal("EVENT_UNIT_STATE_LIMIT"), + EVENT_UNIT_ACQUIRED_TARGET: getGlobal("EVENT_UNIT_ACQUIRED_TARGET"), + EVENT_UNIT_TARGET_IN_RANGE: getGlobal("EVENT_UNIT_TARGET_IN_RANGE"), + EVENT_UNIT_ATTACKED: getGlobal("EVENT_UNIT_ATTACKED"), + EVENT_UNIT_RESCUED: getGlobal("EVENT_UNIT_RESCUED"), + EVENT_UNIT_CONSTRUCT_CANCEL: getGlobal("EVENT_UNIT_CONSTRUCT_CANCEL"), + EVENT_UNIT_CONSTRUCT_FINISH: getGlobal("EVENT_UNIT_CONSTRUCT_FINISH"), + EVENT_UNIT_UPGRADE_START: getGlobal("EVENT_UNIT_UPGRADE_START"), + EVENT_UNIT_UPGRADE_CANCEL: getGlobal("EVENT_UNIT_UPGRADE_CANCEL"), + EVENT_UNIT_UPGRADE_FINISH: getGlobal("EVENT_UNIT_UPGRADE_FINISH"), + EVENT_UNIT_TRAIN_START: getGlobal("EVENT_UNIT_TRAIN_START"), + EVENT_UNIT_TRAIN_CANCEL: getGlobal("EVENT_UNIT_TRAIN_CANCEL"), + EVENT_UNIT_TRAIN_FINISH: getGlobal("EVENT_UNIT_TRAIN_FINISH"), + EVENT_UNIT_RESEARCH_START: getGlobal("EVENT_UNIT_RESEARCH_START"), + EVENT_UNIT_RESEARCH_CANCEL: getGlobal("EVENT_UNIT_RESEARCH_CANCEL"), + EVENT_UNIT_RESEARCH_FINISH: getGlobal("EVENT_UNIT_RESEARCH_FINISH"), + EVENT_UNIT_ISSUED_ORDER: getGlobal("EVENT_UNIT_ISSUED_ORDER"), + EVENT_UNIT_ISSUED_POINT_ORDER: getGlobal("EVENT_UNIT_ISSUED_POINT_ORDER"), + EVENT_UNIT_ISSUED_TARGET_ORDER: getGlobal("EVENT_UNIT_ISSUED_TARGET_ORDER"), + EVENT_UNIT_HERO_LEVEL: getGlobal("EVENT_UNIT_HERO_LEVEL"), + EVENT_UNIT_HERO_SKILL: getGlobal("EVENT_UNIT_HERO_SKILL"), + EVENT_UNIT_HERO_REVIVABLE: getGlobal("EVENT_UNIT_HERO_REVIVABLE"), + EVENT_UNIT_HERO_REVIVE_START: getGlobal("EVENT_UNIT_HERO_REVIVE_START"), + EVENT_UNIT_HERO_REVIVE_CANCEL: getGlobal("EVENT_UNIT_HERO_REVIVE_CANCEL"), + EVENT_UNIT_HERO_REVIVE_FINISH: getGlobal("EVENT_UNIT_HERO_REVIVE_FINISH"), + EVENT_UNIT_SUMMON: getGlobal("EVENT_UNIT_SUMMON"), + EVENT_UNIT_DROP_ITEM: getGlobal("EVENT_UNIT_DROP_ITEM"), + EVENT_UNIT_PICKUP_ITEM: getGlobal("EVENT_UNIT_PICKUP_ITEM"), + EVENT_UNIT_USE_ITEM: getGlobal("EVENT_UNIT_USE_ITEM"), + EVENT_UNIT_LOADED: getGlobal("EVENT_UNIT_LOADED"), + EVENT_UNIT_ATTACK_FINISHED: getGlobal("EVENT_UNIT_ATTACK_FINISHED"), + EVENT_UNIT_DECAY_FINISHED: getGlobal("EVENT_UNIT_DECAY_FINISHED"), + EVENT_UNIT_BUFF_RECEIVED: getGlobal("EVENT_UNIT_BUFF_RECEIVED"), + EVENT_UNIT_BUFF_REFRESHED: getGlobal("EVENT_UNIT_BUFF_REFRESHED"), + EVENT_UNIT_BUFF_ENDED: getGlobal("EVENT_UNIT_BUFF_ENDED"), + EVENT_UNIT_PROJECTILE_LAUNCH: getGlobal("EVENT_UNIT_PROJECTILE_LAUNCH"), + EVENT_UNIT_PROJECTILE_HIT: getGlobal("EVENT_UNIT_PROJECTILE_HIT"), + EVENT_UNIT_ABILITY_ADDED: getGlobal("EVENT_UNIT_ABILITY_ADDED"), + EVENT_UNIT_ABILITY_REMOVED: getGlobal("EVENT_UNIT_ABILITY_REMOVED"), + EVENT_UNIT_ABILITY_AUTOCAST_ON: getGlobal("EVENT_UNIT_ABILITY_AUTOCAST_ON"), + EVENT_UNIT_ABILITY_AUTOCAST_OFF: getGlobal("EVENT_UNIT_ABILITY_AUTOCAST_OFF"), + EVENT_UNIT_SPELL_CHANNEL: getGlobal("EVENT_UNIT_SPELL_CHANNEL"), + EVENT_UNIT_SPELL_CAST: getGlobal("EVENT_UNIT_SPELL_CAST"), + EVENT_UNIT_SPELL_EFFECT: getGlobal("EVENT_UNIT_SPELL_EFFECT"), + EVENT_UNIT_SPELL_FINISH: getGlobal("EVENT_UNIT_SPELL_FINISH"), + EVENT_UNIT_SPELL_ENDCAST: getGlobal("EVENT_UNIT_SPELL_ENDCAST") +}; + +// src/handles/instanceApi/AbilityData.ts +var _abilityData, _field, _accessorNatives; +var AbilityLevelAccessor = class { + constructor(abilityData, field, accessNatives) { + __privateAdd(this, _abilityData, void 0); + __privateAdd(this, _field, void 0); + __privateAdd(this, _accessorNatives, void 0); + __privateSet(this, _abilityData, abilityData); + __privateSet(this, _field, field); + __privateSet(this, _accessorNatives, accessNatives); + } + *[Symbol.iterator]() { + for (let i = 0; i < this.getLength(); ++i) { + yield this.getIndexValue(i); + } + } + getLength() { + return typeof __privateGet(this, _abilityData).instance === "number" ? GetAbilityBaseIntegerFieldById(__privateGet(this, _abilityData).instance, ABILITY_IF_LEVELS) : GetAbilityIntegerField(__privateGet(this, _abilityData).instance.handle, ABILITY_IF_LEVELS); + } + getIndexValue(index2) { + return typeof __privateGet(this, _abilityData).instance === "number" ? __privateGet(this, _accessorNatives).baseGet(__privateGet(this, _abilityData).instance, __privateGet(this, _field), index2) : __privateGet(this, _accessorNatives).get(__privateGet(this, _abilityData).instance.handle, __privateGet(this, _field), index2); + } + setIndexValue(index2, value) { + return typeof __privateGet(this, _abilityData).instance === "number" ? __privateGet(this, _accessorNatives).baseSet(__privateGet(this, _abilityData).instance, __privateGet(this, _field), index2, value) : __privateGet(this, _accessorNatives).set(__privateGet(this, _abilityData).instance.handle, __privateGet(this, _field), index2, value); + } +}; +_abilityData = new WeakMap(); +_field = new WeakMap(); +_accessorNatives = new WeakMap(); +var __instance; +var AbilityData = class { + constructor(instance) { + __privateAdd(this, __instance, void 0); + __privateSet(this, __instance, instance); + Object.defineProperty(this, "instance", { + value: instance, + writable: false + }); + } +}; +__instance = new WeakMap(); + +// src/utils/utils.ts +function screamCaseToCamelCase(screamCase) { + const words = screamCase.split("_"); + const camelCaseWords = words.map((word, index2) => { + if (index2 === 0) { + return word.toLowerCase(); + } else { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + } + }); + const camelCase = camelCaseWords.join(""); + return camelCase; +} + +// src/services/ClassBuilder.ts +var typeNameToTypePart = (typeName) => { + return typeName.charAt(0).toLocaleUpperCase() + typeName.substring(1); +}; +var toHandleHolderArgs = (args) => { + return args.map((i) => toHandleHolderSoft(i)); +}; +var typeGenMetaSymbol = Symbol("typeGenMeta"); +var typeGenNeedAssist = isNode; +var HandleBuilder = class { + constructor(nativeList) { + nativeList = nativeList || getListNatives(); + this.nativesMeta = {}; + Object.entries(nativeList).forEach((i) => { + this.nativesMeta[i[0]] = { + native: i[1], + useCount: 0 + }; + }); + this.unusedNatives = { ...this.nativesMeta }; + } + addMethods(target, handleType) { + if (typeGenNeedAssist) { + target[typeGenMetaSymbol] = true; + } + const typePart = typeNameToTypePart(handleType); + const methodNatives = Object.entries(this.unusedNatives).filter((i) => { + const native = i[1].native; + return native.parametres.length >= 1 && native.parametres[0] === handleType; + }); + const methods = methodNatives.map((i) => { + let methodName = i[0].replace(typePart, ""); + methodName = methodName.charAt(0).toLocaleLowerCase() + methodName.substring(1); + return { + name: methodName, + callNative: i[1].native + }; + }); + methods.forEach((method) => { + target.prototype[method.name] = function(...args) { + if (!(this instanceof target)) + throw new TypeError("Illegal call"); + return fromHandleHolderSoft(method.callNative(this.handle, ...toHandleHolderArgs(args))); + }; + if (typeGenNeedAssist) { + const methodMeta = { + methodType: "method", + nativeName: method.callNative.nativeName, + argTypes: [...method.callNative.parametres].splice(1), + argNames: [...method.callNative.parametresName].splice(1), + returnType: method.callNative.returnType + }; + target.prototype[method.name][typeGenMetaSymbol] = methodMeta; + } + }); + } + addChainProperties(target, handleType) { + if (typeGenNeedAssist) { + target[typeGenMetaSymbol] = true; + } + const typePart = typeNameToTypePart(handleType); + const properties = new Array(); + const setNatives = Object.entries(this.unusedNatives).filter((i) => { + const native = i[1].native; + return i[0].startsWith("Set") && i[0].substring(3).startsWith(typePart) && native.parametres.length === 2 && native.returnType === "V" && native.parametres[0] === handleType; + }); + const getNatives = Object.entries(this.unusedNatives).filter((i) => { + let nativeName = i[0]; + const native = i[1].native; + if (!nativeName.startsWith("Get") && !nativeName.startsWith("Is")) + return false; + nativeName = nativeName.substring(nativeName.startsWith("Get") ? 3 : 2); + if (!nativeName.startsWith(typePart)) + return false; + nativeName = nativeName.substring(typePart.length); + if (native.parametres.length !== 1 || native.parametres[0] !== handleType) + return false; + const setterNative = setNatives.find((j) => { + return j[0].endsWith(nativeName); + }); + if (!setterNative) + return false; + if (setterNative[1].native.parametres[1] !== native.returnType) + return false; + properties.push({ + getterNative: native, + setterNative: setterNative[1].native, + name: nativeName.charAt(0).toLocaleLowerCase() + nativeName.substring(1), + argumentType: native.returnType + }); + return true; + }); + properties.forEach((property) => { + target.prototype[property.name] = function(value) { + if (!(this instanceof target)) + throw new TypeError("Illegal call"); + if (value === void 0) { + return fromHandleHolderSoft(property.getterNative(this.handle)); + } + let newValue = value; + if (typeof value === "function") { + newValue = value.call(this, fromHandleHolderSoft(property.getterNative(this.handle))); + } + property.setterNative(this.handle, toHandleHolderSoft(newValue)); + return this; + }; + if (typeGenNeedAssist) { + const methodMeta = { + getNativeName: property.getterNative.nativeName, + setNativeName: property.setterNative.nativeName, + methodType: "chainProperty", + type: property.argumentType + }; + target.prototype[property.name][typeGenMetaSymbol] = methodMeta; + } + }); + this.markNativesAsUsed(getNatives.map((i) => i[0])); + this.markNativesAsUsed(setNatives.map((i) => i[0])); + } + markNativesAsUsed(natives) { + natives.forEach((i) => { + this.markNativeAsUsed(i); + }); + } + markNativeAsUsed(natives) { + if (!this.unusedNatives[natives]) + return; + this.unusedNatives[natives].useCount++; + delete this.unusedNatives[natives]; + } +}; +var InstanceApiBuilder = class { + appendAbilityData(abilityData) { + const abilityFieldGlobals = getGlobalsKeys().filter((i) => i.startsWith("ABILITY")); + const abilityLevelRealFields = new Array(); + const abilityLevelBooleanFields = new Array(); + const abilityLevelIntegerFields = new Array(); + const abilityLevelStringFields = new Array(); + const abilityRealFields = new Array(); + const abilityBooleanFields = new Array(); + const abilityIntegerFields = new Array(); + const abilityStringFields = new Array(); + abilityFieldGlobals.forEach((i) => { + const globalNameTokens = i.split("_"); + if (globalNameTokens.length < 2) + return; + switch (globalNameTokens[1]) { + case "IF": + abilityIntegerFields.push(i); + break; + case "BF": + abilityBooleanFields.push(i); + break; + case "RF": + abilityRealFields.push(i); + break; + case "SF": + abilityStringFields.push(i); + break; + case "ILF": + abilityLevelIntegerFields.push(i); + break; + case "BLF": + abilityLevelBooleanFields.push(i); + break; + case "RLF": + abilityLevelRealFields.push(i); + break; + case "SLF": + abilityLevelStringFields.push(i); + break; + } + }); + if (typeGenNeedAssist) { + abilityData[typeGenMetaSymbol] = {}; + } + { + let defineAccessor = function(accessNatives, propertyName, fieldId, isReadOnly) { + propertyName = accessNatives.get.returnType.toLocaleLowerCase() + propertyName.charAt(0).toUpperCase() + propertyName.substring(1); + if (typeGenNeedAssist) { + abilityData[typeGenMetaSymbol][propertyName] = { + methodType: "instanceApiAccessor", + isIndexAccess: false, + readonly: isReadOnly, + type: accessNatives.get.returnType + // Ебать я гений + }; + } + const propertyDesctiptor = { + get() { + return typeof this.instance === "number" ? accessNatives.baseGet(this.instance, fieldId) : accessNatives.get(this.instance.handle, fieldId); + }, + enumerable: true + }; + if (!isReadOnly) { + propertyDesctiptor.set = function(value) { + return typeof this.instance === "number" ? accessNatives.baseSet(this.instance, fieldId, value) : accessNatives.set(this.instance.handle, fieldId, value); + }; + } + Object.defineProperty(abilityData.prototype, propertyName, propertyDesctiptor); + }; + abilityRealFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityRealField, + baseGet: GetAbilityBaseRealFieldById, + set: SetAbilityRealField, + baseSet: SetAbilityBaseRealFieldById + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i), + false + ); + }); + abilityIntegerFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityIntegerField, + baseGet: GetAbilityBaseIntegerFieldById, + set: SetAbilityIntegerField, + baseSet: SetAbilityBaseIntegerFieldById + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i), + false + ); + }); + abilityBooleanFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityBooleanField, + baseGet: GetAbilityBaseBooleanFieldById, + set: SetAbilityBooleanField, + baseSet: SetAbilityBaseBooleanFieldById + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i), + false + ); + }); + abilityStringFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityStringField, + baseGet: GetAbilityBaseStringFieldById, + set: SetAbilityStringField, + baseSet: SetAbilityBaseStringFieldById + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i), + false + ); + }); + } + { + let defineAccessor = function(accessNatives, propertyName, fieldId, isReadOnly) { + propertyName = accessNatives.get.returnType.toLocaleLowerCase() + "l" + propertyName.charAt(0).toUpperCase() + propertyName.substring(1); + if (typeGenNeedAssist) { + abilityData[typeGenMetaSymbol][propertyName] = { + methodType: "instanceApiAccessor", + isIndexAccess: true, + readonly: isReadOnly, + type: accessNatives.get.returnType + }; + } + let levelAabilityAccessor = null; + let levelAabilityAccessorProxy = null; + function createProxy(levelAabilityAccessor2) { + return new Proxy(levelAabilityAccessor2, { + get(target, p) { + if (typeof p === "symbol") + return target[p]; + if (p === "length") + return target.getLength(); + const inxex = Number(p); + if (!Number.isInteger(inxex)) + return target[p]; + return target.getIndexValue(inxex); + }, + set(target, p, newValue) { + if (typeof p === "symbol") { + target[p] = newValue; + return true; + } + if (p === "length") + return false; + const inxex = Number(p); + if (!Number.isInteger(inxex)) { + target[p] = newValue; + return true; + } + return target.setIndexValue(inxex, newValue); + }, + getOwnPropertyDescriptor(target, p) { + const inxex = Number(p); + if (Number.isInteger(inxex)) { + if (inxex < target.getLength()) + return { + enumerable: true + }; + return { + enumerable: false + }; + } + return Object.getOwnPropertyDescriptor(target, p); + }, + ownKeys(target) { + const numbersArray = []; + const length = target.getLength(); + for (let i = 0; i < length; i++) { + numbersArray.push(String(i)); + } + return [...Reflect.ownKeys(target), ...numbersArray]; + } + }); + } + const propertyDesctiptor = { + get() { + if (!levelAabilityAccessor) { + levelAabilityAccessor = new AbilityLevelAccessor(this, fieldId, accessNatives); + levelAabilityAccessorProxy = createProxy(levelAabilityAccessor); + } + return levelAabilityAccessorProxy; + }, + enumerable: true + }; + if (!isReadOnly) { + propertyDesctiptor.set = function(value) { + if (!levelAabilityAccessor) { + levelAabilityAccessor = new AbilityLevelAccessor(this, fieldId, accessNatives); + levelAabilityAccessorProxy = createProxy(levelAabilityAccessor); + } + if (typeof value === "object" && Symbol.iterator in value) { + let i = 0; + for (const itValue in value) { + levelAabilityAccessor.setIndexValue(i++, itValue); + } + } + }; + } + Object.defineProperty(abilityData.prototype, propertyName, propertyDesctiptor); + }; + abilityLevelRealFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityRealLevelField, + baseGet: GetAbilityBaseRealLevelFieldById, + set: SetAbilityRealLevelField, + baseSet: SetAbilityBaseRealLevelFieldById + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i), + false + ); + }); + abilityLevelIntegerFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityIntegerLevelField, + baseGet: GetAbilityBaseIntegerLevelFieldById, + set: SetAbilityIntegerLevelField, + baseSet: SetAbilityBaseIntegerLevelFieldById + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i), + false + ); + }); + abilityLevelBooleanFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityBooleanLevelField, + baseGet: GetAbilityBaseBooleanLevelFieldById, + set: SetAbilityBooleanLevelField, + baseSet: SetAbilityBaseBooleanLevelFieldById + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i), + false + ); + }); + abilityLevelStringFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityStringLevelField, + baseGet: GetAbilityBaseStringLevelFieldById, + set: SetAbilityStringLevelField, + baseSet: SetAbilityBaseStringLevelFieldById + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i), + false + ); + }); + } + } +}; + +// src/handles/Widget.ts +var Widget = class extends Handle { + constructor(handleHolder) { + super(handleHolder); + } +}; + +// src/handles/Player.ts +var Player = class extends Handle { + constructor(arg1) { + super(arg1); + } + static getById(slot) { + return PlayerNative(slot).payload; + } + static localPlayer() { + return GetLocalPlayer().payload; + } +}; + +// src/utils/EventEmitterHook.ts +var EventEmitterHook = class _EventEmitterHook extends EventEmitter { + constructor() { + super(); + } + static hookAddListener(eventEmitter) { + eventEmitter.prototype["addListener"] = _EventEmitterHook.prototype.addListener; + eventEmitter.prototype["on"] = _EventEmitterHook.prototype.on; + eventEmitter.prototype["once"] = _EventEmitterHook.prototype.once; + eventEmitter.prototype["prependListener"] = _EventEmitterHook.prototype.prependListener; + eventEmitter.prototype["prependOnceListener"] = _EventEmitterHook.prototype.prependOnceListener; + } + addListener(event, listener) { + try { + this.onEmitterAddListener(event, listener); + } catch (e) { + } + super.addListener(event, listener); + return this; + } + on(event, listener) { + try { + this.onEmitterAddListener(event, listener); + } catch (e) { + } + super.on(event, listener); + return this; + } + once(event, listener) { + try { + this.onEmitterAddListener(event, listener); + } catch (e) { + } + super.once(event, listener); + return this; + } + prependListener(event, listener) { + try { + this.onEmitterAddListener(event, listener); + } catch (e) { + } + super.prependListener(event, listener); + return this; + } + prependOnceListener(event, listener) { + try { + this.onEmitterAddListener(event, listener); + } catch (e) { + } + super.prependOnceListener(event, listener); + return this; + } +}; + +// src/triggerEvents/TriggerEvent.ts +var TriggerEvent = class { + constructor(event) { + this.event = event; + } +}; + +// src/triggerEvents/unit/TriggerUnitEvent.ts +var TriggerUnitEvent = class extends TriggerEvent { + constructor(event) { + super(event); + this.triggerUnit = fromHandleHolderSoft(GetTriggerUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventDeath.ts +var UnitEventDeath = class extends TriggerUnitEvent { + constructor() { + super("death"); + this.killingUnit = fromHandleHolderSoft(GetKillingUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventAcquiredTarget.ts +var UnitEventAcquiredTarget = class extends TriggerUnitEvent { + constructor() { + super("acquiredTarget"); + this.target = fromHandleHolderSoft(GetEventTargetUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventAttacked.ts +var UnitEventAttacked = class extends TriggerUnitEvent { + constructor() { + super("attacked"); + this.attacker = fromHandleHolderSoft(GetAttacker()); + } +}; + +// src/triggerEvents/unit/UnitEventConstructFinish.ts +var UnitEventConstructFinish = class extends TriggerUnitEvent { + constructor() { + super("constructFinish"); + this.constructedStructure = fromHandleHolderSoft(GetConstructedStructure()); + } +}; + +// src/triggerEvents/unit/UnitEventDetected.ts +var UnitEventDetected = class extends TriggerUnitEvent { + constructor() { + super("detected"); + this.detectingPlayer = fromHandleHolderSoft(GetEventDetectingPlayer()); + } +}; + +// src/triggerEvents/unit/UnitEventStateLimit.ts +var UnitEventStateLimit = class extends TriggerUnitEvent { + constructor() { + super("stateLimit"); + this.eventUnitState = GetEventUnitState(); + } +}; + +// src/triggerEvents/unit/UnitEventTargetInRange.ts +var UnitEventTargetInRange = class extends TriggerUnitEvent { + constructor() { + super("targetInRange"); + this.target = fromHandleHolderSoft(GetEventTargetUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventRescued.ts +var UnitEventRescued = class extends TriggerUnitEvent { + constructor() { + super("rescued"); + this.rescuer = fromHandleHolderSoft(GetRescuer()); + } +}; + +// src/triggerEvents/unit/UnitEventTrainStart.ts +var UnitEventTrainStart = class extends TriggerUnitEvent { + constructor() { + super("trainStart"); + this.trainedUnitType = GetTrainedUnitType(); + } +}; + +// src/triggerEvents/unit/UnitEventTrainCancel.ts +var UnitEventTrainCancel = class extends TriggerUnitEvent { + constructor() { + super("trainCancel"); + this.trainedUnitType = fromHandleHolderSoft(GetTrainedUnitType()); + } +}; + +// src/triggerEvents/unit/UnitEventTrainFinish.ts +var UnitEventTrainFinish = class extends TriggerUnitEvent { + constructor() { + super("trainFinish"); + this.trainedUnit = fromHandleHolderSoft(GetTrainedUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventResearchStart.ts +var UnitEventResearchStart = class extends TriggerUnitEvent { + constructor() { + super("researchStart"); + this.researched = GetResearched(); + } +}; + +// src/triggerEvents/unit/UnitEventResearchCancel.ts +var UnitEventResearchCancel = class extends TriggerUnitEvent { + constructor() { + super("researchCancel"); + this.researched = GetResearched(); + } +}; + +// src/triggerEvents/unit/UnitEventResearchFinish.ts +var UnitEventResearchFinish = class extends TriggerUnitEvent { + constructor() { + super("researchFinish"); + this.researched = GetResearched(); + } +}; + +// src/triggerEvents/unit/UnitEventIssuedOrder.ts +var UnitEventIssuedOrder = class extends TriggerUnitEvent { + constructor() { + super("issuedOrder"); + this.issuedOrderId = fromHandleHolderSoft(GetIssuedOrderId()); + } +}; + +// src/triggerEvents/unit/UnitEventIssuedPointOrder.ts +var UnitEventIssuedPointOrder = class extends TriggerUnitEvent { + constructor() { + super("issuedPointOrder"); + this.issuedOrderId = GetIssuedOrderId(); + this.orderPointX = GetOrderPointX(); + this.orderPointY = GetOrderPointY(); + } +}; + +// src/triggerEvents/unit/UnitEventIssuedTargetOrder.ts +var UnitEventIssuedTargetOrder = class extends TriggerUnitEvent { + constructor() { + super("issuedTargetOrder"); + this.issuedOrderId = GetIssuedOrderId(); + this.orderTarget = fromHandleHolderSoft(GetOrderTarget()); + } +}; + +// src/triggerEvents/unit/UnitEventHeroSkill.ts +var UnitEventHeroSkill = class extends TriggerUnitEvent { + constructor() { + super("heroSkill"); + this.learnedSkill = GetLearnedSkill(); + this.learnedSkillLevel = fromHandleHolderSoft(GetLearnedSkillLevel()); + } +}; + +// src/triggerEvents/unit/UnitEventHeroRevivable.ts +var UnitEventHeroRevivable = class extends TriggerUnitEvent { + constructor() { + super("heroRevivable"); + this.revivableUnit = fromHandleHolderSoft(GetRevivableUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventHeroReviveStart.ts +var UnitEventHeroReviveStart = class extends TriggerUnitEvent { + constructor() { + super("heroReviveStart"); + this.revivingUnit = fromHandleHolderSoft(GetRevivingUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventHeroReviveCancel.ts +var UnitEventHeroReviveCancel = class extends TriggerUnitEvent { + constructor() { + super("heroReviveCancel"); + this.revivingUnit = fromHandleHolderSoft(GetRevivingUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventHeroReviveFinish.ts +var UnitEventHeroReviveFinish = class extends TriggerUnitEvent { + constructor() { + super("heroReviveFinish"); + this.revivingUnit = fromHandleHolderSoft(GetRevivingUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventSummon.ts +var UnitEventSummon = class extends TriggerUnitEvent { + constructor() { + super("summon"); + this.summonedUnit = fromHandleHolderSoft(GetSummonedUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventDropItem.ts +var UnitEventDropItem = class extends TriggerUnitEvent { + constructor() { + super("dropItem"); + this.droppedItem = fromHandleHolderSoft(GetManipulatedItem()); + } +}; + +// src/triggerEvents/unit/UnitEventPickupItem.ts +var UnitEventPickupItem = class extends TriggerUnitEvent { + constructor() { + super("pickupItem"); + this.pickedupItem = fromHandleHolderSoft(GetManipulatedItem()); + } +}; + +// src/triggerEvents/unit/UnitEventUseItem.ts +var UnitEventUseItem = class extends TriggerUnitEvent { + constructor() { + super("useItem"); + this.usedItem = fromHandleHolderSoft(GetManipulatedItem()); + } +}; + +// src/triggerEvents/unit/UnitEventLoaded.ts +var UnitEventLoaded = class extends TriggerUnitEvent { + constructor() { + super("loaded"); + this.transport = fromHandleHolderSoft(GetTransportUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventBuffReceived.ts +var UnitEventBuffReceived = class extends TriggerUnitEvent { + constructor() { + super("buffReceived"); + this.recievedBuff = fromHandleHolderSoft(GetTriggerBuff()); + this.sourceAbility = fromHandleHolderSoft(GetTriggerBuffSourceAbility()); + this.sourceUnit = fromHandleHolderSoft(GetTriggerBuffSourceUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventBuffRefreshed.ts +var UnitEventBuffRefreshed = class extends TriggerUnitEvent { + constructor() { + super("buffRefreshed"); + this.recievedBuff = fromHandleHolderSoft(GetTriggerBuff()); + this.sourceAbility = fromHandleHolderSoft(GetTriggerBuffSourceAbility()); + this.sourceUnit = fromHandleHolderSoft(GetTriggerBuffSourceUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventBuffEnded.ts +var UnitEventBuffEnded = class extends TriggerUnitEvent { + constructor() { + super("buffEnded"); + this.recievedBuff = fromHandleHolderSoft(GetTriggerBuff()); + this.sourceAbility = fromHandleHolderSoft(GetTriggerBuffSourceAbility()); + this.sourceUnit = fromHandleHolderSoft(GetTriggerBuffSourceUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventProjectileLaunch.ts +var UnitEventProjectileLaunch = class extends TriggerUnitEvent { + constructor() { + super("projectileLaunch"); + this.target = fromHandleHolderSoft(GetTriggerProjectileTarget()); + this.projecitle = fromHandleHolderSoft(GetTriggerProjectile()); + } +}; + +// src/triggerEvents/unit/UnitEventProjectileHit.ts +var UnitEventProjectileHit = class extends TriggerUnitEvent { + constructor() { + super("projectileHit"); + this.source = fromHandleHolderSoft(GetTriggerProjectileSource()); + this.projectile = fromHandleHolderSoft(GetTriggerProjectile()); + } +}; + +// src/triggerEvents/unit/UnitEventSpellChannel.ts +var UnitEventSpellChannel = class extends TriggerUnitEvent { + constructor() { + super("spellChannel"); + this.abilityId = GetSpellAbilityId(); + this.ability = fromHandleHolderSoft(GetSpellAbility()); + this.targetX = GetSpellTargetX(); + this.targetY = GetSpellTargetY(); + this.targetDestructable = fromHandleHolderSoft(GetSpellTargetDestructable()); + this.targetItem = fromHandleHolderSoft(GetSpellTargetItem()); + this.targetUnit = fromHandleHolderSoft(GetSpellTargetUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventSpellCast.ts +var UnitEventSpellCast = class extends TriggerUnitEvent { + constructor() { + super("spellCast"); + this.abilityId = GetSpellAbilityId(); + this.ability = fromHandleHolderSoft(GetSpellAbility()); + this.targetX = GetSpellTargetX(); + this.targetY = GetSpellTargetY(); + this.targetDestructable = fromHandleHolderSoft(GetSpellTargetDestructable()); + this.targetItem = fromHandleHolderSoft(GetSpellTargetItem()); + this.targetUnit = fromHandleHolderSoft(GetSpellTargetUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventSpellEffect.ts +var UnitEventSpellEffect = class extends TriggerUnitEvent { + constructor() { + super("spellEffect"); + this.abilityId = GetSpellAbilityId(); + this.ability = fromHandleHolderSoft(GetSpellAbility()); + this.targetX = GetSpellTargetX(); + this.targetY = GetSpellTargetY(); + this.targetDestructable = fromHandleHolderSoft(GetSpellTargetDestructable()); + this.targetItem = fromHandleHolderSoft(GetSpellTargetItem()); + this.targetUnit = fromHandleHolderSoft(GetSpellTargetUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventSpellFinish.ts +var UnitEventSpellFinish = class extends TriggerUnitEvent { + constructor() { + super("spellFinish"); + this.abilityId = GetSpellAbilityId(); + this.ability = fromHandleHolderSoft(GetSpellAbility()); + this.targetX = GetSpellTargetX(); + this.targetY = GetSpellTargetY(); + this.targetDestructable = fromHandleHolderSoft(GetSpellTargetDestructable()); + this.targetItem = fromHandleHolderSoft(GetSpellTargetItem()); + this.targetUnit = fromHandleHolderSoft(GetSpellTargetUnit()); + } +}; + +// src/triggerEvents/unit/UnitEventSpellEndcast.ts +var UnitEventSpellEndcast = class extends TriggerUnitEvent { + constructor() { + super("spellEndcast"); + this.abilityId = GetSpellAbilityId(); + this.ability = fromHandleHolderSoft(GetSpellAbility()); + this.targetX = GetSpellTargetX(); + this.targetY = GetSpellTargetY(); + this.targetDestructable = fromHandleHolderSoft(GetSpellTargetDestructable()); + this.targetItem = fromHandleHolderSoft(GetSpellTargetItem()); + this.targetUnit = fromHandleHolderSoft(GetSpellTargetUnit()); + } +}; + +// src/services/emitters/UnitEmiter.ts +var stringToHandle = { + damaged: UnitEvents.EVENT_UNIT_DAMAGED, + damaging: UnitEvents.EVENT_UNIT_DAMAGING, + selected: UnitEvents.EVENT_UNIT_SELECTED, + deselected: UnitEvents.EVENT_UNIT_DESELECTED, + death: UnitEvents.EVENT_UNIT_DEATH, + decay: UnitEvents.EVENT_UNIT_DECAY, + detected: UnitEvents.EVENT_UNIT_DETECTED, + hidden: UnitEvents.EVENT_UNIT_HIDDEN, + stateLimit: UnitEvents.EVENT_UNIT_STATE_LIMIT, + acquiredTarget: UnitEvents.EVENT_UNIT_ACQUIRED_TARGET, + targetInRange: UnitEvents.EVENT_UNIT_TARGET_IN_RANGE, + attacked: UnitEvents.EVENT_UNIT_ATTACKED, + rescued: UnitEvents.EVENT_UNIT_RESCUED, + constructCancel: UnitEvents.EVENT_UNIT_CONSTRUCT_CANCEL, + constructFinish: UnitEvents.EVENT_UNIT_CONSTRUCT_FINISH, + upgradeStart: UnitEvents.EVENT_UNIT_UPGRADE_START, + upgradeCancel: UnitEvents.EVENT_UNIT_UPGRADE_CANCEL, + upgradeFinish: UnitEvents.EVENT_UNIT_UPGRADE_FINISH, + trainStart: UnitEvents.EVENT_UNIT_TRAIN_START, + trainCancel: UnitEvents.EVENT_UNIT_TRAIN_CANCEL, + trainFinish: UnitEvents.EVENT_UNIT_TRAIN_FINISH, + researchStart: UnitEvents.EVENT_UNIT_RESEARCH_START, + researchCancel: UnitEvents.EVENT_UNIT_RESEARCH_CANCEL, + researchFinish: UnitEvents.EVENT_UNIT_RESEARCH_FINISH, + issuedOrder: UnitEvents.EVENT_UNIT_ISSUED_ORDER, + issuedPointOrder: UnitEvents.EVENT_UNIT_ISSUED_POINT_ORDER, + issuedTargetOrder: UnitEvents.EVENT_UNIT_ISSUED_TARGET_ORDER, + heroLevel: UnitEvents.EVENT_UNIT_HERO_LEVEL, + heroSkill: UnitEvents.EVENT_UNIT_HERO_SKILL, + heroRevivable: UnitEvents.EVENT_UNIT_HERO_REVIVABLE, + heroReviveStart: UnitEvents.EVENT_UNIT_HERO_REVIVE_START, + heroReviveCancel: UnitEvents.EVENT_UNIT_HERO_REVIVE_CANCEL, + heroReviveFinish: UnitEvents.EVENT_UNIT_HERO_REVIVE_FINISH, + summon: UnitEvents.EVENT_UNIT_SUMMON, + dropItem: UnitEvents.EVENT_UNIT_DROP_ITEM, + pickupItem: UnitEvents.EVENT_UNIT_PICKUP_ITEM, + useItem: UnitEvents.EVENT_UNIT_USE_ITEM, + loaded: UnitEvents.EVENT_UNIT_LOADED, + attackFinished: UnitEvents.EVENT_UNIT_ATTACK_FINISHED, + decayFinished: UnitEvents.EVENT_UNIT_DECAY_FINISHED, + buffReceived: UnitEvents.EVENT_UNIT_BUFF_RECEIVED, + buffRefreshed: UnitEvents.EVENT_UNIT_BUFF_REFRESHED, + buffEnded: UnitEvents.EVENT_UNIT_BUFF_ENDED, + projectileLaunch: UnitEvents.EVENT_UNIT_PROJECTILE_LAUNCH, + projectileHit: UnitEvents.EVENT_UNIT_PROJECTILE_HIT, + abilityAdded: UnitEvents.EVENT_UNIT_ABILITY_ADDED, + abilityRemoved: UnitEvents.EVENT_UNIT_ABILITY_REMOVED, + abilityAutocastOn: UnitEvents.EVENT_UNIT_ABILITY_AUTOCAST_ON, + abilityAutocastOff: UnitEvents.EVENT_UNIT_ABILITY_AUTOCAST_OFF, + spellChannel: UnitEvents.EVENT_UNIT_SPELL_CHANNEL, + spellCast: UnitEvents.EVENT_UNIT_SPELL_CAST, + spellEffect: UnitEvents.EVENT_UNIT_SPELL_EFFECT, + spellFinish: UnitEvents.EVENT_UNIT_SPELL_FINISH, + spellEndcast: UnitEvents.EVENT_UNIT_SPELL_ENDCAST +}; +var dispatchUnitEvent = (unit, eventType) => { + switch (eventType) { + case "selected": + case "deselected": + case "decay": + case "hidden": + case "constructCancel": + case "upgradeStart": + case "upgradeFinish": + case "upgradeCancel": + case "heroLevel": + case "attackFinished": + case "decayFinished": + case "abilityAdded": + case "abilityRemoved": + case "abilityAutocastOn": + case "abilityAutocastOff": + unit.emit(eventType, new TriggerUnitEvent(eventType)); + break; + case "damaged": + unit.emit("damaged"); + break; + case "damaging": + unit.emit("damaging"); + break; + case "death": + unit.emit("death", new UnitEventDeath()); + break; + case "acquiredTarget": + unit.emit("acquiredTarget", new UnitEventAcquiredTarget()); + break; + case "attacked": + unit.emit("attacked", new UnitEventAttacked()); + break; + case "constructFinish": + unit.emit("constructFinish", new UnitEventConstructFinish()); + break; + case "detected": + unit.emit("detected", new UnitEventDetected()); + break; + case "stateLimit": + unit.emit("stateLimit", new UnitEventStateLimit()); + break; + case "targetInRange": + unit.emit("targetInRange", new UnitEventTargetInRange()); + break; + case "rescued": + unit.emit("rescued", new UnitEventRescued()); + break; + case "trainStart": + unit.emit("trainStart", new UnitEventTrainStart()); + break; + case "trainCancel": + unit.emit("trainCancel", new UnitEventTrainCancel()); + break; + case "trainFinish": + unit.emit("trainFinish", new UnitEventTrainFinish()); + break; + case "researchStart": + unit.emit("researchStart", new UnitEventResearchStart()); + break; + case "researchCancel": + unit.emit("researchCancel", new UnitEventResearchCancel()); + break; + case "researchFinish": + unit.emit("researchFinish", new UnitEventResearchFinish()); + break; + case "issuedOrder": + unit.emit("issuedOrder", new UnitEventIssuedOrder()); + break; + case "issuedPointOrder": + unit.emit("issuedPointOrder", new UnitEventIssuedPointOrder()); + break; + case "issuedTargetOrder": + unit.emit("issuedTargetOrder", new UnitEventIssuedTargetOrder()); + break; + case "heroSkill": + unit.emit("heroSkill", new UnitEventHeroSkill()); + break; + case "heroRevivable": + unit.emit("heroRevivable", new UnitEventHeroRevivable()); + break; + case "heroReviveStart": + unit.emit("heroReviveStart", new UnitEventHeroReviveStart()); + break; + case "heroReviveCancel": + unit.emit("heroReviveCancel", new UnitEventHeroReviveCancel()); + break; + case "heroReviveFinish": + unit.emit("heroReviveFinish", new UnitEventHeroReviveFinish()); + break; + case "summon": + unit.emit("summon", new UnitEventSummon()); + break; + case "dropItem": + unit.emit("dropItem", new UnitEventDropItem()); + break; + case "pickupItem": + unit.emit("pickupItem", new UnitEventPickupItem()); + break; + case "useItem": + unit.emit("useItem", new UnitEventUseItem()); + break; + case "loaded": + unit.emit("loaded", new UnitEventLoaded()); + break; + case "buffRecieved": + unit.emit("buffReceived", new UnitEventBuffReceived()); + break; + case "buffRefreshed": + unit.emit("buffRefreshed", new UnitEventBuffRefreshed()); + break; + case "buffEnded": + unit.emit("buffEnded", new UnitEventBuffEnded()); + break; + case "projectileLaunch": + unit.emit("projectileLaunch", new UnitEventProjectileLaunch()); + break; + case "projectileHit": + unit.emit("projectileHit", new UnitEventProjectileHit()); + break; + case "spellChannel": + unit.emit("spellChannel", new UnitEventSpellChannel()); + break; + case "spellCast": + unit.emit("spellCast", new UnitEventSpellCast()); + break; + case "spellEffect": + unit.emit("spellEffect", new UnitEventSpellEffect()); + break; + case "spellFinish": + unit.emit("spellFinish", new UnitEventSpellFinish()); + break; + case "spellEndcast": + unit.emit("spellEndcast", new UnitEventSpellEndcast()); + break; + default: + throw new TypeError(`Unexpected eventType: ${eventType}`); + } +}; +var UnitEmiter = class { + constructor() { + this.unitToTriggerMap = /* @__PURE__ */ new Map(); + } + isSupport(eventType) { + return eventType in stringToHandle; + } + subscribe(eventType, unit) { + if (!unit.handle || !stringToHandle[eventType]) + return; + const registerUnitEvents = this.unitToTriggerMap.get(unit) || {}; + if (registerUnitEvents[eventType]) + return; + const newTrigger = CreateTriggerNe(); + TriggerRegisterUnitEventNe(newTrigger, unit.handle, stringToHandle[eventType]); + TriggerAddActionNe(newTrigger, () => { + dispatchUnitEvent(unit, eventType); + }); + registerUnitEvents[eventType] = newTrigger; + this.unitToTriggerMap.set(unit, registerUnitEvents); + } + unsubscribe(eventType, unit) { + const registerUnitEvents = this.unitToTriggerMap.get(unit); + if (!registerUnitEvents) + return; + const trigger = registerUnitEvents[eventType]; + if (!trigger) + return; + DestroyTrigger(trigger); + delete registerUnitEvents[eventType]; + this.unitToTriggerMap.set(unit, registerUnitEvents); + } +}; +var unitEmiter = new UnitEmiter(); + +// src/services/emitters/UnitStateEmiter.ts +var UnitState = /* @__PURE__ */ ((UnitState2) => { + UnitState2[UnitState2["Life"] = 0] = "Life"; + UnitState2[UnitState2["MaxLife"] = 1] = "MaxLife"; + UnitState2[UnitState2["Mana"] = 2] = "Mana"; + UnitState2[UnitState2["MaxMana"] = 3] = "MaxMana"; + return UnitState2; +})(UnitState || {}); +var LimitOp = /* @__PURE__ */ ((LimitOp2) => { + LimitOp2[LimitOp2["lt"] = 0] = "lt"; + LimitOp2[LimitOp2["le"] = 1] = "le"; + LimitOp2[LimitOp2["eq"] = 2] = "eq"; + LimitOp2[LimitOp2["gt"] = 3] = "gt"; + LimitOp2[LimitOp2["ge"] = 4] = "ge"; + return LimitOp2; +})(LimitOp || {}); +var _unit, _trigger, _emitSymbolEvent, _unitState, _limitOp, _value; +var UnitStateEmiter = class { + constructor(target, unitState, limitOp, value) { + __privateAdd(this, _unit, void 0); + __privateAdd(this, _trigger, void 0); + __privateAdd(this, _emitSymbolEvent, void 0); + __privateAdd(this, _unitState, void 0); + __privateAdd(this, _limitOp, void 0); + __privateAdd(this, _value, void 0); + __privateSet(this, _trigger, CreateTriggerNe()); + __privateSet(this, _unit, target); + __privateSet(this, _unitState, unitState); + __privateSet(this, _limitOp, limitOp); + __privateSet(this, _value, value); + let unitStateHandle; + let limitOpHandle; + switch (unitState) { + case 0 /* Life */: + unitStateHandle = UnitStates.UNIT_STATE_LIFE; + break; + case 1 /* MaxLife */: + unitStateHandle = UnitStates.UNIT_STATE_MAX_LIFE; + break; + case 2 /* Mana */: + unitStateHandle = UnitStates.UNIT_STATE_MANA; + break; + case 3 /* MaxMana */: + unitStateHandle = UnitStates.UNIT_STATE_MAX_MANA; + break; + default: + const deadVar = unitState; + } + switch (limitOp) { + case 0 /* lt */: + limitOpHandle = LimitOps.LESS_THAN; + break; + case 1 /* le */: + limitOpHandle = LimitOps.LESS_THAN_OR_EQUAL; + break; + case 2 /* eq */: + limitOpHandle = LimitOps.EQUAL; + break; + case 3 /* gt */: + limitOpHandle = LimitOps.GREATER_THAN; + break; + case 4 /* ge */: + limitOpHandle = LimitOps.GREATER_THAN_OR_EQUAL; + break; + default: + const deadVar = limitOp; + } + __privateSet(this, _emitSymbolEvent, Symbol(`stateEventSymbol-${unitState}-${limitOp}-${value}`)); + TriggerRegisterUnitStateEventNe(__privateGet(this, _trigger), target.handle, unitStateHandle, limitOpHandle, value); + TriggerAddActionNe(__privateGet(this, _trigger), () => { + if (!target.emit(__privateGet(this, _emitSymbolEvent), new UnitEventStateLimit(), this)) { + this.dispose(); + } + }); + __privateGet(this, _unit).on("remove", () => { + this.dispose(); + }); + } + get unitState() { + return __privateGet(this, _unitState); + } + get limitOp() { + return __privateGet(this, _limitOp); + } + get value() { + return __privateGet(this, _value); + } + get emitSymbol() { + return __privateGet(this, _emitSymbolEvent); + } + dispose() { + DestroyTrigger(__privateGet(this, _trigger)); + } +}; +_unit = new WeakMap(); +_trigger = new WeakMap(); +_emitSymbolEvent = new WeakMap(); +_unitState = new WeakMap(); +_limitOp = new WeakMap(); +_value = new WeakMap(); + +// src/handles/Unit.ts +var eventUnitEmiter = unitEmiter; +var stateEvent = Symbol("stateEventSymbol"); +var Unit = class _Unit extends Widget { + constructor(arg, unitId, x, y, facing, options) { + if (arg instanceof _Unit || arg instanceof HandleHolder) + super(arg); + else if (arg instanceof Player) { + if (!options) { + super(CreateUnitNe(arg.handle, unitId, x, y, facing)); + } else if (options.type === "corpse") { + super(CreateCorpseNe(arg.handle, unitId, x, y, facing)); + } else if (options.type === "building") { + super( + CreateBuildingExNe(arg.handle, unitId, x, y, facing, options.isAutoBuild, options.workersCanAssist) + ); + } else if (options.type === "illusion") { + super(CreateIllusionNe(arg.handle, unitId, x, y, facing)); + } + } else { + throw new TypeError("Unknown first arg"); + } + EventEmitterHook.hookAddListener(_Unit); + } + onUnitState(unitState, limitOp, value, callback) { + const stateEmiter = new UnitStateEmiter(this, unitState, limitOp, value); + this.on(stateEmiter.emitSymbol, callback); + return stateEmiter; + } + static createIllusionFromUnit(unit, options) { + const handleHolder = CreateIllusionFromUnitExNe(unit.handle, options?.copyPassives); + return new _Unit(handleHolder); + } + /* eslint-disable @typescript-eslint/no-unused-vars */ + onEmitterAddListener(event, listener) { + if (eventUnitEmiter.isSupport(event) && typeof event === "string") { + eventUnitEmiter.subscribe(event, this); + } + } +}; + +// src/handles/Destructable.ts +var Destructable = class _Destructable extends Widget { + constructor(arg, x, y, face, scale, variation) { + if (arg instanceof _Destructable || arg instanceof HandleHolder) + super(arg); + else if (typeof arg === "number") { + super(CreateDestructableNe(arg, x, y, face, scale, variation)); + } else { + throw new TypeError("Unknown first arg"); + } + } +}; + +// src/handles/Item.ts +var Item = class _Item extends Widget { + constructor(arg, x, y) { + if (arg instanceof _Item || arg instanceof HandleHolder) + super(arg); + else if (typeof arg === "number") { + super(CreateItemNe(arg, x, y)); + } else { + throw new TypeError("Unknown first arg"); + } + } +}; + +// src/services/NativeEvents.ts +var NativeEvents = class extends EventEmitter { +}; +var nativeEvents = new NativeEvents(); +setOnNewHandle((handle, constructorNative) => { + nativeEvents.emit("newHandle", handle, constructorNative); +}); +setOnHandleDestroy((handle) => { + nativeEvents.emit("handleDestroy", handle); +}); + +// src/services/HandleWrapper.ts +var typeToConstructor = { + unit: Unit, + player: Player, + widget: Widget +}; +var _ignoreTypes; +var HandleWrapper = class { + constructor() { + __privateAdd(this, _ignoreTypes, void 0); + /* eslint-disable @typescript-eslint/no-unused-vars */ + this.onNewHandle = (handle, constructorNative) => { + if (handle.type === fakeHandleType) { + handle.payload = handle; + } else if (handle.type in typeToConstructor) { + const handleConstructor = typeToConstructor[handle.type]; + handle.payload = new handleConstructor(handle); + } else { + if (__privateGet(this, _ignoreTypes).indexOf(handle.type) === -1) { + console.warn(`Attempting to create a class from an unknown handle type ${handle.type}`); + __privateGet(this, _ignoreTypes).push(handle.type); + } + handle.payload = handle; + } + }; + __privateSet(this, _ignoreTypes, []); + nativeEvents.addListener("newHandle", this.onNewHandle); + } +}; +_ignoreTypes = new WeakMap(); + +// src/index.ts +var import_readable_stream = __toESM(require_ours(), 1); +import * as _Buffer from "buffer"; + +// node_modules/text-decoding/src/utils.js +function inRange(a, min, max) { + return min <= a && a <= max; +} +var floor = Math.floor; +function stringToCodePoints(string) { + var s = String(string); + var n = s.length; + var i = 0; + var u = []; + while (i < n) { + var c = s.charCodeAt(i); + if (c < 55296 || c > 57343) { + u.push(c); + } else if (56320 <= c && c <= 57343) { + u.push(65533); + } else if (55296 <= c && c <= 56319) { + if (i === n - 1) { + u.push(65533); + } else { + var d = s.charCodeAt(i + 1); + if (56320 <= d && d <= 57343) { + var a = c & 1023; + var b = d & 1023; + u.push(65536 + (a << 10) + b); + i += 1; + } else { + u.push(65533); + } + } + } + i += 1; + } + return u; +} +function codePointsToString(code_points) { + var s = ""; + for (var i = 0; i < code_points.length; ++i) { + var cp = code_points[i]; + if (cp <= 65535) { + s += String.fromCharCode(cp); + } else { + cp -= 65536; + s += String.fromCharCode( + (cp >> 10) + 55296, + (cp & 1023) + 56320 + ); + } + } + return s; +} +function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError("Decoder error"); + return opt_code_point || 65533; +} +function encoderError(code_point) { + throw TypeError("The code point " + code_point + " could not be encoded."); +} +function convertCodeUnitToBytes(code_unit, utf16be) { + const byte1 = code_unit >> 8; + const byte2 = code_unit & 255; + if (utf16be) + return [byte1, byte2]; + return [byte2, byte1]; +} +function isASCIIByte(a) { + return 0 <= a && a <= 127; +} +var isASCIICodePoint = isASCIIByte; +var end_of_stream = -1; +var finished = -1; + +// node_modules/text-decoding/src/encodings.js +var encodings = [ + { + encodings: [ + { + labels: [ + "unicode-1-1-utf-8", + "utf-8", + "utf8" + ], + name: "UTF-8" + } + ], + heading: "The Encoding" + }, + { + encodings: [ + { + labels: [ + "866", + "cp866", + "csibm866", + "ibm866" + ], + name: "IBM866" + }, + { + labels: [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2" + ], + name: "ISO-8859-2" + }, + { + labels: [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3" + ], + name: "ISO-8859-3" + }, + { + labels: [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4" + ], + name: "ISO-8859-4" + }, + { + labels: [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988" + ], + name: "ISO-8859-5" + }, + { + labels: [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987" + ], + name: "ISO-8859-6" + }, + { + labels: [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek" + ], + name: "ISO-8859-7" + }, + { + labels: [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual" + ], + name: "ISO-8859-8" + }, + { + labels: [ + "csiso88598i", + "iso-8859-8-i", + "logical" + ], + name: "ISO-8859-8-I" + }, + { + labels: [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6" + ], + name: "ISO-8859-10" + }, + { + labels: [ + "iso-8859-13", + "iso8859-13", + "iso885913" + ], + name: "ISO-8859-13" + }, + { + labels: [ + "iso-8859-14", + "iso8859-14", + "iso885914" + ], + name: "ISO-8859-14" + }, + { + labels: [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9" + ], + name: "ISO-8859-15" + }, + { + labels: [ + "iso-8859-16" + ], + name: "ISO-8859-16" + }, + { + labels: [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r" + ], + name: "KOI8-R" + }, + { + labels: [ + "koi8-ru", + "koi8-u" + ], + name: "KOI8-U" + }, + { + labels: [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman" + ], + name: "macintosh" + }, + { + labels: [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874" + ], + name: "windows-874" + }, + { + labels: [ + "cp1250", + "windows-1250", + "x-cp1250" + ], + name: "windows-1250" + }, + { + labels: [ + "cp1251", + "windows-1251", + "x-cp1251" + ], + name: "windows-1251" + }, + { + labels: [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252" + ], + name: "windows-1252" + }, + { + labels: [ + "cp1253", + "windows-1253", + "x-cp1253" + ], + name: "windows-1253" + }, + { + labels: [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254" + ], + name: "windows-1254" + }, + { + labels: [ + "cp1255", + "windows-1255", + "x-cp1255" + ], + name: "windows-1255" + }, + { + labels: [ + "cp1256", + "windows-1256", + "x-cp1256" + ], + name: "windows-1256" + }, + { + labels: [ + "cp1257", + "windows-1257", + "x-cp1257" + ], + name: "windows-1257" + }, + { + labels: [ + "cp1258", + "windows-1258", + "x-cp1258" + ], + name: "windows-1258" + }, + { + labels: [ + "x-mac-cyrillic", + "x-mac-ukrainian" + ], + name: "x-mac-cyrillic" + } + ], + heading: "Legacy single-byte encodings" + }, + { + encodings: [ + { + labels: [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk" + ], + name: "GBK" + }, + { + labels: [ + "gb18030" + ], + name: "gb18030" + } + ], + heading: "Legacy multi-byte Chinese (simplified) encodings" + }, + { + encodings: [ + { + labels: [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5" + ], + name: "Big5" + } + ], + heading: "Legacy multi-byte Chinese (traditional) encodings" + }, + { + encodings: [ + { + labels: [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp" + ], + name: "EUC-JP" + }, + { + labels: [ + "csiso2022jp", + "iso-2022-jp" + ], + name: "ISO-2022-JP" + }, + { + labels: [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis" + ], + name: "Shift_JIS" + } + ], + heading: "Legacy multi-byte Japanese encodings" + }, + { + encodings: [ + { + labels: [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949" + ], + name: "EUC-KR" + } + ], + heading: "Legacy multi-byte Korean encodings" + }, + { + encodings: [ + { + labels: [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr" + ], + name: "replacement" + }, + { + labels: [ + "utf-16be" + ], + name: "UTF-16BE" + }, + { + labels: [ + "utf-16", + "utf-16le" + ], + name: "UTF-16LE" + }, + { + labels: [ + "x-user-defined" + ], + name: "x-user-defined" + } + ], + heading: "Legacy miscellaneous encodings" + } +]; +var encodings_default = encodings; + +// node_modules/text-decoding/src/implementations/utf8.js +var UTF8Decoder = class { + /** + * @param {{fatal: boolean}} options + */ + constructor(options) { + const { fatal } = options; + let utf8_code_point = 0, utf8_bytes_seen = 0, utf8_bytes_needed = 0, utf8_lower_boundary = 128, utf8_upper_boundary = 191; + this.handler = function(stream2, bite) { + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0; + return decoderError(fatal); + } + if (bite === end_of_stream) + return finished; + if (utf8_bytes_needed === 0) { + if (inRange(bite, 0, 127)) { + return bite; + } else if (inRange(bite, 194, 223)) { + utf8_bytes_needed = 1; + utf8_code_point = bite & 31; + } else if (inRange(bite, 224, 239)) { + if (bite === 224) + utf8_lower_boundary = 160; + if (bite === 237) + utf8_upper_boundary = 159; + utf8_bytes_needed = 2; + utf8_code_point = bite & 15; + } else if (inRange(bite, 240, 244)) { + if (bite === 240) + utf8_lower_boundary = 144; + if (bite === 244) + utf8_upper_boundary = 143; + utf8_bytes_needed = 3; + utf8_code_point = bite & 7; + } else { + return decoderError(fatal); + } + return null; + } + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + utf8_lower_boundary = 128; + utf8_upper_boundary = 191; + stream2.prepend(bite); + return decoderError(fatal); + } + utf8_lower_boundary = 128; + utf8_upper_boundary = 191; + utf8_code_point = utf8_code_point << 6 | bite & 63; + utf8_bytes_seen += 1; + if (utf8_bytes_seen !== utf8_bytes_needed) + return null; + var code_point = utf8_code_point; + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + return code_point; + }; + } +}; +var UTF8Encoder = class { + constructor() { + this.handler = function(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + var count, offset; + if (inRange(code_point, 128, 2047)) { + count = 1; + offset = 192; + } else if (inRange(code_point, 2048, 65535)) { + count = 2; + offset = 224; + } else if (inRange(code_point, 65536, 1114111)) { + count = 3; + offset = 240; + } + var bytes = [(code_point >> 6 * count) + offset]; + while (count > 0) { + var temp = code_point >> 6 * (count - 1); + bytes.push(128 | temp & 63); + count -= 1; + } + return bytes; + }; + } +}; + +// node_modules/text-decoding/src/implementations/utf16.js +var UTF16Decoder = class { + /** + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + constructor(utf16_be, options) { + const { fatal } = options; + this.utf16_be = utf16_be; + this.fatal = fatal; + this.utf16_lead_byte = null; + this.utf16_lead_surrogate = null; + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream2, bite) { + if (bite === end_of_stream && (this.utf16_lead_byte !== null || this.utf16_lead_surrogate !== null)) { + return decoderError(this.fatal); + } + if (bite === end_of_stream && this.utf16_lead_byte === null && this.utf16_lead_surrogate === null) { + return finished; + } + if (this.utf16_lead_byte === null) { + this.utf16_lead_byte = bite; + return null; + } + let code_unit; + if (this.utf16_be) { + code_unit = (this.utf16_lead_byte << 8) + bite; + } else { + code_unit = (bite << 8) + this.utf16_lead_byte; + } + this.utf16_lead_byte = null; + if (this.utf16_lead_surrogate !== null) { + const lead_surrogate = this.utf16_lead_surrogate; + this.utf16_lead_surrogate = null; + if (inRange(code_unit, 56320, 57343)) { + return 65536 + (lead_surrogate - 55296) * 1024 + (code_unit - 56320); + } + stream2.prepend(convertCodeUnitToBytes(code_unit, this.utf16_be)); + return decoderError(this.fatal); + } + if (inRange(code_unit, 55296, 56319)) { + this.utf16_lead_surrogate = code_unit; + return null; + } + if (inRange(code_unit, 56320, 57343)) + return decoderError(this.fatal); + return code_unit; + } +}; +var UTF16Encoder = class { + /** + * @param {boolean} [utf16_be] True if big-endian, false if little-endian. + */ + constructor(utf16_be = false) { + this.utf16_be = utf16_be; + } + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (inRange(code_point, 0, 65535)) + return convertCodeUnitToBytes(code_point, this.utf16_be); + const lead = convertCodeUnitToBytes( + (code_point - 65536 >> 10) + 55296, + this.utf16_be + ); + const trail = convertCodeUnitToBytes( + (code_point - 65536 & 1023) + 56320, + this.utf16_be + ); + return lead.concat(trail); + } +}; + +// node_modules/text-decoding/src/encoding-indexes.js +var Indexes = { + "big5": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 17392, 19506, 17923, 17830, 17784, 160359, 19831, 17843, 162993, 19682, 163013, 15253, 18230, 18244, 19527, 19520, 148159, 144919, 160594, 159371, 159954, 19543, 172881, 18255, 17882, 19589, 162924, 19719, 19108, 18081, 158499, 29221, 154196, 137827, 146950, 147297, 26189, 22267, null, 32149, 22813, 166841, 15860, 38708, 162799, 23515, 138590, 23204, 13861, 171696, 23249, 23479, 23804, 26478, 34195, 170309, 29793, 29853, 14453, 138579, 145054, 155681, 16108, 153822, 15093, 31484, 40855, 147809, 166157, 143850, 133770, 143966, 17162, 33924, 40854, 37935, 18736, 34323, 22678, 38730, 37400, 31184, 31282, 26208, 27177, 34973, 29772, 31685, 26498, 31276, 21071, 36934, 13542, 29636, 155065, 29894, 40903, 22451, 18735, 21580, 16689, 145038, 22552, 31346, 162661, 35727, 18094, 159368, 16769, 155033, 31662, 140476, 40904, 140481, 140489, 140492, 40905, 34052, 144827, 16564, 40906, 17633, 175615, 25281, 28782, 40907, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 12736, 12737, 12738, 12739, 12740, 131340, 12741, 131281, 131277, 12742, 12743, 131275, 139240, 12744, 131274, 12745, 12746, 12747, 12748, 131342, 12749, 12750, 256, 193, 461, 192, 274, 201, 282, 200, 332, 211, 465, 210, null, 7870, null, 7872, 202, 257, 225, 462, 224, 593, 275, 233, 283, 232, 299, 237, 464, 236, 333, 243, 466, 242, 363, 250, 468, 249, 470, 472, 474, 476, 252, null, 7871, null, 7873, 234, 609, 9178, 9179, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 172969, 135493, null, 25866, null, null, 20029, 28381, 40270, 37343, null, null, 161589, 25745, 20250, 20264, 20392, 20822, 20852, 20892, 20964, 21153, 21160, 21307, 21326, 21457, 21464, 22242, 22768, 22788, 22791, 22834, 22836, 23398, 23454, 23455, 23706, 24198, 24635, 25993, 26622, 26628, 26725, 27982, 28860, 30005, 32420, 32428, 32442, 32455, 32463, 32479, 32518, 32567, 33402, 33487, 33647, 35270, 35774, 35810, 36710, 36711, 36718, 29713, 31996, 32205, 26950, 31433, 21031, null, null, null, null, 37260, 30904, 37214, 32956, null, 36107, 33014, 133607, null, null, 32927, 40647, 19661, 40393, 40460, 19518, 171510, 159758, 40458, 172339, 13761, null, 28314, 33342, 29977, null, 18705, 39532, 39567, 40857, 31111, 164972, 138698, 132560, 142054, 20004, 20097, 20096, 20103, 20159, 20203, 20279, 13388, 20413, 15944, 20483, 20616, 13437, 13459, 13477, 20870, 22789, 20955, 20988, 20997, 20105, 21113, 21136, 21287, 13767, 21417, 13649, 21424, 13651, 21442, 21539, 13677, 13682, 13953, 21651, 21667, 21684, 21689, 21712, 21743, 21784, 21795, 21800, 13720, 21823, 13733, 13759, 21975, 13765, 163204, 21797, null, 134210, 134421, 151851, 21904, 142534, 14828, 131905, 36422, 150968, 169189, 16467, 164030, 30586, 142392, 14900, 18389, 164189, 158194, 151018, 25821, 134524, 135092, 134357, 135412, 25741, 36478, 134806, 134155, 135012, 142505, 164438, 148691, null, 134470, 170573, 164073, 18420, 151207, 142530, 39602, 14951, 169460, 16365, 13574, 152263, 169940, 161992, 142660, 40302, 38933, null, 17369, 155813, 25780, 21731, 142668, 142282, 135287, 14843, 135279, 157402, 157462, 162208, 25834, 151634, 134211, 36456, 139681, 166732, 132913, null, 18443, 131497, 16378, 22643, 142733, null, 148936, 132348, 155799, 134988, 134550, 21881, 16571, 17338, null, 19124, 141926, 135325, 33194, 39157, 134556, 25465, 14846, 141173, 36288, 22177, 25724, 15939, null, 173569, 134665, 142031, 142537, null, 135368, 145858, 14738, 14854, 164507, 13688, 155209, 139463, 22098, 134961, 142514, 169760, 13500, 27709, 151099, null, null, 161140, 142987, 139784, 173659, 167117, 134778, 134196, 157724, 32659, 135375, 141315, 141625, 13819, 152035, 134796, 135053, 134826, 16275, 134960, 134471, 135503, 134732, null, 134827, 134057, 134472, 135360, 135485, 16377, 140950, 25650, 135085, 144372, 161337, 142286, 134526, 134527, 142417, 142421, 14872, 134808, 135367, 134958, 173618, 158544, 167122, 167321, 167114, 38314, 21708, 33476, 21945, null, 171715, 39974, 39606, 161630, 142830, 28992, 33133, 33004, 23580, 157042, 33076, 14231, 21343, 164029, 37302, 134906, 134671, 134775, 134907, 13789, 151019, 13833, 134358, 22191, 141237, 135369, 134672, 134776, 135288, 135496, 164359, 136277, 134777, 151120, 142756, 23124, 135197, 135198, 135413, 135414, 22428, 134673, 161428, 164557, 135093, 134779, 151934, 14083, 135094, 135552, 152280, 172733, 149978, 137274, 147831, 164476, 22681, 21096, 13850, 153405, 31666, 23400, 18432, 19244, 40743, 18919, 39967, 39821, 154484, 143677, 22011, 13810, 22153, 20008, 22786, 138177, 194680, 38737, 131206, 20059, 20155, 13630, 23587, 24401, 24516, 14586, 25164, 25909, 27514, 27701, 27706, 28780, 29227, 20012, 29357, 149737, 32594, 31035, 31993, 32595, 156266, 13505, null, 156491, 32770, 32896, 157202, 158033, 21341, 34916, 35265, 161970, 35744, 36125, 38021, 38264, 38271, 38376, 167439, 38886, 39029, 39118, 39134, 39267, 17e4, 40060, 40479, 40644, 27503, 63751, 20023, 131207, 38429, 25143, 38050, null, 20539, 28158, 171123, 40870, 15817, 34959, 147790, 28791, 23797, 19232, 152013, 13657, 154928, 24866, 166450, 36775, 37366, 29073, 26393, 29626, 144001, 172295, 15499, 137600, 19216, 30948, 29698, 20910, 165647, 16393, 27235, 172730, 16931, 34319, 133743, 31274, 170311, 166634, 38741, 28749, 21284, 139390, 37876, 30425, 166371, 40871, 30685, 20131, 20464, 20668, 20015, 20247, 40872, 21556, 32139, 22674, 22736, 138678, 24210, 24217, 24514, 141074, 25995, 144377, 26905, 27203, 146531, 27903, null, 29184, 148741, 29580, 16091, 150035, 23317, 29881, 35715, 154788, 153237, 31379, 31724, 31939, 32364, 33528, 34199, 40873, 34960, 40874, 36537, 40875, 36815, 34143, 39392, 37409, 40876, 167353, 136255, 16497, 17058, 23066, null, null, null, 39016, 26475, 17014, 22333, null, 34262, 149883, 33471, 160013, 19585, 159092, 23931, 158485, 159678, 40877, 40878, 23446, 40879, 26343, 32347, 28247, 31178, 15752, 17603, 143958, 141206, 17306, 17718, null, 23765, 146202, 35577, 23672, 15634, 144721, 23928, 40882, 29015, 17752, 147692, 138787, 19575, 14712, 13386, 131492, 158785, 35532, 20404, 131641, 22975, 33132, 38998, 170234, 24379, 134047, null, 139713, 166253, 16642, 18107, 168057, 16135, 40883, 172469, 16632, 14294, 18167, 158790, 16764, 165554, 160767, 17773, 14548, 152730, 17761, 17691, 19849, 19579, 19830, 17898, 16328, 150287, 13921, 17630, 17597, 16877, 23870, 23880, 23894, 15868, 14351, 23972, 23993, 14368, 14392, 24130, 24253, 24357, 24451, 14600, 14612, 14655, 14669, 24791, 24893, 23781, 14729, 25015, 25017, 25039, 14776, 25132, 25232, 25317, 25368, 14840, 22193, 14851, 25570, 25595, 25607, 25690, 14923, 25792, 23829, 22049, 40863, 14999, 25990, 15037, 26111, 26195, 15090, 26258, 15138, 26390, 15170, 26532, 26624, 15192, 26698, 26756, 15218, 15217, 15227, 26889, 26947, 29276, 26980, 27039, 27013, 15292, 27094, 15325, 27237, 27252, 27249, 27266, 15340, 27289, 15346, 27307, 27317, 27348, 27382, 27521, 27585, 27626, 27765, 27818, 15563, 27906, 27910, 27942, 28033, 15599, 28068, 28081, 28181, 28184, 28201, 28294, 166336, 28347, 28386, 28378, 40831, 28392, 28393, 28452, 28468, 15686, 147265, 28545, 28606, 15722, 15733, 29111, 23705, 15754, 28716, 15761, 28752, 28756, 28783, 28799, 28809, 131877, 17345, 13809, 134872, 147159, 22462, 159443, 28990, 153568, 13902, 27042, 166889, 23412, 31305, 153825, 169177, 31333, 31357, 154028, 31419, 31408, 31426, 31427, 29137, 156813, 16842, 31450, 31453, 31466, 16879, 21682, 154625, 31499, 31573, 31529, 152334, 154878, 31650, 31599, 33692, 154548, 158847, 31696, 33825, 31634, 31672, 154912, 15789, 154725, 33938, 31738, 31750, 31797, 154817, 31812, 31875, 149634, 31910, 26237, 148856, 31945, 31943, 31974, 31860, 31987, 31989, 31950, 32359, 17693, 159300, 32093, 159446, 29837, 32137, 32171, 28981, 32179, 32210, 147543, 155689, 32228, 15635, 32245, 137209, 32229, 164717, 32285, 155937, 155994, 32366, 32402, 17195, 37996, 32295, 32576, 32577, 32583, 31030, 156368, 39393, 32663, 156497, 32675, 136801, 131176, 17756, 145254, 17667, 164666, 32762, 156809, 32773, 32776, 32797, 32808, 32815, 172167, 158915, 32827, 32828, 32865, 141076, 18825, 157222, 146915, 157416, 26405, 32935, 166472, 33031, 33050, 22704, 141046, 27775, 156824, 151480, 25831, 136330, 33304, 137310, 27219, 150117, 150165, 17530, 33321, 133901, 158290, 146814, 20473, 136445, 34018, 33634, 158474, 149927, 144688, 137075, 146936, 33450, 26907, 194964, 16859, 34123, 33488, 33562, 134678, 137140, 14017, 143741, 144730, 33403, 33506, 33560, 147083, 159139, 158469, 158615, 144846, 15807, 33565, 21996, 33669, 17675, 159141, 33708, 33729, 33747, 13438, 159444, 27223, 34138, 13462, 159298, 143087, 33880, 154596, 33905, 15827, 17636, 27303, 33866, 146613, 31064, 33960, 158614, 159351, 159299, 34014, 33807, 33681, 17568, 33939, 34020, 154769, 16960, 154816, 17731, 34100, 23282, 159385, 17703, 34163, 17686, 26559, 34326, 165413, 165435, 34241, 159880, 34306, 136578, 159949, 194994, 17770, 34344, 13896, 137378, 21495, 160666, 34430, 34673, 172280, 34798, 142375, 34737, 34778, 34831, 22113, 34412, 26710, 17935, 34885, 34886, 161248, 146873, 161252, 34910, 34972, 18011, 34996, 34997, 25537, 35013, 30583, 161551, 35207, 35210, 35238, 35241, 35239, 35260, 166437, 35303, 162084, 162493, 35484, 30611, 37374, 35472, 162393, 31465, 162618, 147343, 18195, 162616, 29052, 35596, 35615, 152624, 152933, 35647, 35660, 35661, 35497, 150138, 35728, 35739, 35503, 136927, 17941, 34895, 35995, 163156, 163215, 195028, 14117, 163155, 36054, 163224, 163261, 36114, 36099, 137488, 36059, 28764, 36113, 150729, 16080, 36215, 36265, 163842, 135188, 149898, 15228, 164284, 160012, 31463, 36525, 36534, 36547, 37588, 36633, 36653, 164709, 164882, 36773, 37635, 172703, 133712, 36787, 18730, 166366, 165181, 146875, 24312, 143970, 36857, 172052, 165564, 165121, 140069, 14720, 159447, 36919, 165180, 162494, 36961, 165228, 165387, 37032, 165651, 37060, 165606, 37038, 37117, 37223, 15088, 37289, 37316, 31916, 166195, 138889, 37390, 27807, 37441, 37474, 153017, 37561, 166598, 146587, 166668, 153051, 134449, 37676, 37739, 166625, 166891, 28815, 23235, 166626, 166629, 18789, 37444, 166892, 166969, 166911, 37747, 37979, 36540, 38277, 38310, 37926, 38304, 28662, 17081, 140922, 165592, 135804, 146990, 18911, 27676, 38523, 38550, 16748, 38563, 159445, 25050, 38582, 30965, 166624, 38589, 21452, 18849, 158904, 131700, 156688, 168111, 168165, 150225, 137493, 144138, 38705, 34370, 38710, 18959, 17725, 17797, 150249, 28789, 23361, 38683, 38748, 168405, 38743, 23370, 168427, 38751, 37925, 20688, 143543, 143548, 38793, 38815, 38833, 38846, 38848, 38866, 38880, 152684, 38894, 29724, 169011, 38911, 38901, 168989, 162170, 19153, 38964, 38963, 38987, 39014, 15118, 160117, 15697, 132656, 147804, 153350, 39114, 39095, 39112, 39111, 19199, 159015, 136915, 21936, 39137, 39142, 39148, 37752, 39225, 150057, 19314, 170071, 170245, 39413, 39436, 39483, 39440, 39512, 153381, 14020, 168113, 170965, 39648, 39650, 170757, 39668, 19470, 39700, 39725, 165376, 20532, 39732, 158120, 14531, 143485, 39760, 39744, 171326, 23109, 137315, 39822, 148043, 39938, 39935, 39948, 171624, 40404, 171959, 172434, 172459, 172257, 172323, 172511, 40318, 40323, 172340, 40462, 26760, 40388, 139611, 172435, 172576, 137531, 172595, 40249, 172217, 172724, 40592, 40597, 40606, 40610, 19764, 40618, 40623, 148324, 40641, 15200, 14821, 15645, 20274, 14270, 166955, 40706, 40712, 19350, 37924, 159138, 40727, 40726, 40761, 22175, 22154, 40773, 39352, 168075, 38898, 33919, 40802, 40809, 31452, 40846, 29206, 19390, 149877, 149947, 29047, 150008, 148296, 150097, 29598, 166874, 137466, 31135, 166270, 167478, 37737, 37875, 166468, 37612, 37761, 37835, 166252, 148665, 29207, 16107, 30578, 31299, 28880, 148595, 148472, 29054, 137199, 28835, 137406, 144793, 16071, 137349, 152623, 137208, 14114, 136955, 137273, 14049, 137076, 137425, 155467, 14115, 136896, 22363, 150053, 136190, 135848, 136134, 136374, 34051, 145062, 34051, 33877, 149908, 160101, 146993, 152924, 147195, 159826, 17652, 145134, 170397, 159526, 26617, 14131, 15381, 15847, 22636, 137506, 26640, 16471, 145215, 147681, 147595, 147727, 158753, 21707, 22174, 157361, 22162, 135135, 134056, 134669, 37830, 166675, 37788, 20216, 20779, 14361, 148534, 20156, 132197, 131967, 20299, 20362, 153169, 23144, 131499, 132043, 14745, 131850, 132116, 13365, 20265, 131776, 167603, 131701, 35546, 131596, 20120, 20685, 20749, 20386, 20227, 150030, 147082, 20290, 20526, 20588, 20609, 20428, 20453, 20568, 20732, 20825, 20827, 20829, 20830, 28278, 144789, 147001, 147135, 28018, 137348, 147081, 20904, 20931, 132576, 17629, 132259, 132242, 132241, 36218, 166556, 132878, 21081, 21156, 133235, 21217, 37742, 18042, 29068, 148364, 134176, 149932, 135396, 27089, 134685, 29817, 16094, 29849, 29716, 29782, 29592, 19342, 150204, 147597, 21456, 13700, 29199, 147657, 21940, 131909, 21709, 134086, 22301, 37469, 38644, 37734, 22493, 22413, 22399, 13886, 22731, 23193, 166470, 136954, 137071, 136976, 23084, 22968, 37519, 23166, 23247, 23058, 153926, 137715, 137313, 148117, 14069, 27909, 29763, 23073, 155267, 23169, 166871, 132115, 37856, 29836, 135939, 28933, 18802, 37896, 166395, 37821, 14240, 23582, 23710, 24158, 24136, 137622, 137596, 146158, 24269, 23375, 137475, 137476, 14081, 137376, 14045, 136958, 14035, 33066, 166471, 138682, 144498, 166312, 24332, 24334, 137511, 137131, 23147, 137019, 23364, 34324, 161277, 34912, 24702, 141408, 140843, 24539, 16056, 140719, 140734, 168072, 159603, 25024, 131134, 131142, 140827, 24985, 24984, 24693, 142491, 142599, 149204, 168269, 25713, 149093, 142186, 14889, 142114, 144464, 170218, 142968, 25399, 173147, 25782, 25393, 25553, 149987, 142695, 25252, 142497, 25659, 25963, 26994, 15348, 143502, 144045, 149897, 144043, 21773, 144096, 137433, 169023, 26318, 144009, 143795, 15072, 16784, 152964, 166690, 152975, 136956, 152923, 152613, 30958, 143619, 137258, 143924, 13412, 143887, 143746, 148169, 26254, 159012, 26219, 19347, 26160, 161904, 138731, 26211, 144082, 144097, 26142, 153714, 14545, 145466, 145340, 15257, 145314, 144382, 29904, 15254, 26511, 149034, 26806, 26654, 15300, 27326, 14435, 145365, 148615, 27187, 27218, 27337, 27397, 137490, 25873, 26776, 27212, 15319, 27258, 27479, 147392, 146586, 37792, 37618, 166890, 166603, 37513, 163870, 166364, 37991, 28069, 28427, 149996, 28007, 147327, 15759, 28164, 147516, 23101, 28170, 22599, 27940, 30786, 28987, 148250, 148086, 28913, 29264, 29319, 29332, 149391, 149285, 20857, 150180, 132587, 29818, 147192, 144991, 150090, 149783, 155617, 16134, 16049, 150239, 166947, 147253, 24743, 16115, 29900, 29756, 37767, 29751, 17567, 159210, 17745, 30083, 16227, 150745, 150790, 16216, 30037, 30323, 173510, 15129, 29800, 166604, 149931, 149902, 15099, 15821, 150094, 16127, 149957, 149747, 37370, 22322, 37698, 166627, 137316, 20703, 152097, 152039, 30584, 143922, 30478, 30479, 30587, 149143, 145281, 14942, 149744, 29752, 29851, 16063, 150202, 150215, 16584, 150166, 156078, 37639, 152961, 30750, 30861, 30856, 30930, 29648, 31065, 161601, 153315, 16654, 31131, 33942, 31141, 27181, 147194, 31290, 31220, 16750, 136934, 16690, 37429, 31217, 134476, 149900, 131737, 146874, 137070, 13719, 21867, 13680, 13994, 131540, 134157, 31458, 23129, 141045, 154287, 154268, 23053, 131675, 30960, 23082, 154566, 31486, 16889, 31837, 31853, 16913, 154547, 155324, 155302, 31949, 150009, 137136, 31886, 31868, 31918, 27314, 32220, 32263, 32211, 32590, 156257, 155996, 162632, 32151, 155266, 17002, 158581, 133398, 26582, 131150, 144847, 22468, 156690, 156664, 149858, 32733, 31527, 133164, 154345, 154947, 31500, 155150, 39398, 34373, 39523, 27164, 144447, 14818, 150007, 157101, 39455, 157088, 33920, 160039, 158929, 17642, 33079, 17410, 32966, 33033, 33090, 157620, 39107, 158274, 33378, 33381, 158289, 33875, 159143, 34320, 160283, 23174, 16767, 137280, 23339, 137377, 23268, 137432, 34464, 195004, 146831, 34861, 160802, 23042, 34926, 20293, 34951, 35007, 35046, 35173, 35149, 153219, 35156, 161669, 161668, 166901, 166873, 166812, 166393, 16045, 33955, 18165, 18127, 14322, 35389, 35356, 169032, 24397, 37419, 148100, 26068, 28969, 28868, 137285, 40301, 35999, 36073, 163292, 22938, 30659, 23024, 17262, 14036, 36394, 36519, 150537, 36656, 36682, 17140, 27736, 28603, 140065, 18587, 28537, 28299, 137178, 39913, 14005, 149807, 37051, 37015, 21873, 18694, 37307, 37892, 166475, 16482, 166652, 37927, 166941, 166971, 34021, 35371, 38297, 38311, 38295, 38294, 167220, 29765, 16066, 149759, 150082, 148458, 16103, 143909, 38543, 167655, 167526, 167525, 16076, 149997, 150136, 147438, 29714, 29803, 16124, 38721, 168112, 26695, 18973, 168083, 153567, 38749, 37736, 166281, 166950, 166703, 156606, 37562, 23313, 35689, 18748, 29689, 147995, 38811, 38769, 39224, 134950, 24001, 166853, 150194, 38943, 169178, 37622, 169431, 37349, 17600, 166736, 150119, 166756, 39132, 166469, 16128, 37418, 18725, 33812, 39227, 39245, 162566, 15869, 39323, 19311, 39338, 39516, 166757, 153800, 27279, 39457, 23294, 39471, 170225, 19344, 170312, 39356, 19389, 19351, 37757, 22642, 135938, 22562, 149944, 136424, 30788, 141087, 146872, 26821, 15741, 37976, 14631, 24912, 141185, 141675, 24839, 40015, 40019, 40059, 39989, 39952, 39807, 39887, 171565, 39839, 172533, 172286, 40225, 19630, 147716, 40472, 19632, 40204, 172468, 172269, 172275, 170287, 40357, 33981, 159250, 159711, 158594, 34300, 17715, 159140, 159364, 159216, 33824, 34286, 159232, 145367, 155748, 31202, 144796, 144960, 18733, 149982, 15714, 37851, 37566, 37704, 131775, 30905, 37495, 37965, 20452, 13376, 36964, 152925, 30781, 30804, 30902, 30795, 137047, 143817, 149825, 13978, 20338, 28634, 28633, 28702, 28702, 21524, 147893, 22459, 22771, 22410, 40214, 22487, 28980, 13487, 147884, 29163, 158784, 151447, 23336, 137141, 166473, 24844, 23246, 23051, 17084, 148616, 14124, 19323, 166396, 37819, 37816, 137430, 134941, 33906, 158912, 136211, 148218, 142374, 148417, 22932, 146871, 157505, 32168, 155995, 155812, 149945, 149899, 166394, 37605, 29666, 16105, 29876, 166755, 137375, 16097, 150195, 27352, 29683, 29691, 16086, 150078, 150164, 137177, 150118, 132007, 136228, 149989, 29768, 149782, 28837, 149878, 37508, 29670, 37727, 132350, 37681, 166606, 166422, 37766, 166887, 153045, 18741, 166530, 29035, 149827, 134399, 22180, 132634, 134123, 134328, 21762, 31172, 137210, 32254, 136898, 150096, 137298, 17710, 37889, 14090, 166592, 149933, 22960, 137407, 137347, 160900, 23201, 14050, 146779, 14e3, 37471, 23161, 166529, 137314, 37748, 15565, 133812, 19094, 14730, 20724, 15721, 15692, 136092, 29045, 17147, 164376, 28175, 168164, 17643, 27991, 163407, 28775, 27823, 15574, 147437, 146989, 28162, 28428, 15727, 132085, 30033, 14012, 13512, 18048, 16090, 18545, 22980, 37486, 18750, 36673, 166940, 158656, 22546, 22472, 14038, 136274, 28926, 148322, 150129, 143331, 135856, 140221, 26809, 26983, 136088, 144613, 162804, 145119, 166531, 145366, 144378, 150687, 27162, 145069, 158903, 33854, 17631, 17614, 159014, 159057, 158850, 159710, 28439, 160009, 33597, 137018, 33773, 158848, 159827, 137179, 22921, 23170, 137139, 23137, 23153, 137477, 147964, 14125, 23023, 137020, 14023, 29070, 37776, 26266, 148133, 23150, 23083, 148115, 27179, 147193, 161590, 148571, 148170, 28957, 148057, 166369, 20400, 159016, 23746, 148686, 163405, 148413, 27148, 148054, 135940, 28838, 28979, 148457, 15781, 27871, 194597, 150095, 32357, 23019, 23855, 15859, 24412, 150109, 137183, 32164, 33830, 21637, 146170, 144128, 131604, 22398, 133333, 132633, 16357, 139166, 172726, 28675, 168283, 23920, 29583, 31955, 166489, 168992, 20424, 32743, 29389, 29456, 162548, 29496, 29497, 153334, 29505, 29512, 16041, 162584, 36972, 29173, 149746, 29665, 33270, 16074, 30476, 16081, 27810, 22269, 29721, 29726, 29727, 16098, 16112, 16116, 16122, 29907, 16142, 16211, 30018, 30061, 30066, 30093, 16252, 30152, 30172, 16320, 30285, 16343, 30324, 16348, 30330, 151388, 29064, 22051, 35200, 22633, 16413, 30531, 16441, 26465, 16453, 13787, 30616, 16490, 16495, 23646, 30654, 30667, 22770, 30744, 28857, 30748, 16552, 30777, 30791, 30801, 30822, 33864, 152885, 31027, 26627, 31026, 16643, 16649, 31121, 31129, 36795, 31238, 36796, 16743, 31377, 16818, 31420, 33401, 16836, 31439, 31451, 16847, 20001, 31586, 31596, 31611, 31762, 31771, 16992, 17018, 31867, 31900, 17036, 31928, 17044, 31981, 36755, 28864, 134351, 32207, 32212, 32208, 32253, 32686, 32692, 29343, 17303, 32800, 32805, 31545, 32814, 32817, 32852, 15820, 22452, 28832, 32951, 33001, 17389, 33036, 29482, 33038, 33042, 30048, 33044, 17409, 15161, 33110, 33113, 33114, 17427, 22586, 33148, 33156, 17445, 33171, 17453, 33189, 22511, 33217, 33252, 33364, 17551, 33446, 33398, 33482, 33496, 33535, 17584, 33623, 38505, 27018, 33797, 28917, 33892, 24803, 33928, 17668, 33982, 34017, 34040, 34064, 34104, 34130, 17723, 34159, 34160, 34272, 17783, 34418, 34450, 34482, 34543, 38469, 34699, 17926, 17943, 34990, 35071, 35108, 35143, 35217, 162151, 35369, 35384, 35476, 35508, 35921, 36052, 36082, 36124, 18328, 22623, 36291, 18413, 20206, 36410, 21976, 22356, 36465, 22005, 36528, 18487, 36558, 36578, 36580, 36589, 36594, 36791, 36801, 36810, 36812, 36915, 39364, 18605, 39136, 37395, 18718, 37416, 37464, 37483, 37553, 37550, 37567, 37603, 37611, 37619, 37620, 37629, 37699, 37764, 37805, 18757, 18769, 40639, 37911, 21249, 37917, 37933, 37950, 18794, 37972, 38009, 38189, 38306, 18855, 38388, 38451, 18917, 26528, 18980, 38720, 18997, 38834, 38850, 22100, 19172, 24808, 39097, 19225, 39153, 22596, 39182, 39193, 20916, 39196, 39223, 39234, 39261, 39266, 19312, 39365, 19357, 39484, 39695, 31363, 39785, 39809, 39901, 39921, 39924, 19565, 39968, 14191, 138178, 40265, 39994, 40702, 22096, 40339, 40381, 40384, 40444, 38134, 36790, 40571, 40620, 40625, 40637, 40646, 38108, 40674, 40689, 40696, 31432, 40772, 131220, 131767, 132e3, 26906, 38083, 22956, 132311, 22592, 38081, 14265, 132565, 132629, 132726, 136890, 22359, 29043, 133826, 133837, 134079, 21610, 194619, 134091, 21662, 134139, 134203, 134227, 134245, 134268, 24807, 134285, 22138, 134325, 134365, 134381, 134511, 134578, 134600, 26965, 39983, 34725, 134660, 134670, 134871, 135056, 134957, 134771, 23584, 135100, 24075, 135260, 135247, 135286, 26398, 135291, 135304, 135318, 13895, 135359, 135379, 135471, 135483, 21348, 33965, 135907, 136053, 135990, 35713, 136567, 136729, 137155, 137159, 20088, 28859, 137261, 137578, 137773, 137797, 138282, 138352, 138412, 138952, 25283, 138965, 139029, 29080, 26709, 139333, 27113, 14024, 139900, 140247, 140282, 141098, 141425, 141647, 33533, 141671, 141715, 142037, 35237, 142056, 36768, 142094, 38840, 142143, 38983, 39613, 142412, null, 142472, 142519, 154600, 142600, 142610, 142775, 142741, 142914, 143220, 143308, 143411, 143462, 144159, 144350, 24497, 26184, 26303, 162425, 144743, 144883, 29185, 149946, 30679, 144922, 145174, 32391, 131910, 22709, 26382, 26904, 146087, 161367, 155618, 146961, 147129, 161278, 139418, 18640, 19128, 147737, 166554, 148206, 148237, 147515, 148276, 148374, 150085, 132554, 20946, 132625, 22943, 138920, 15294, 146687, 148484, 148694, 22408, 149108, 14747, 149295, 165352, 170441, 14178, 139715, 35678, 166734, 39382, 149522, 149755, 150037, 29193, 150208, 134264, 22885, 151205, 151430, 132985, 36570, 151596, 21135, 22335, 29041, 152217, 152601, 147274, 150183, 21948, 152646, 152686, 158546, 37332, 13427, 152895, 161330, 152926, 18200, 152930, 152934, 153543, 149823, 153693, 20582, 13563, 144332, 24798, 153859, 18300, 166216, 154286, 154505, 154630, 138640, 22433, 29009, 28598, 155906, 162834, 36950, 156082, 151450, 35682, 156674, 156746, 23899, 158711, 36662, 156804, 137500, 35562, 150006, 156808, 147439, 156946, 19392, 157119, 157365, 141083, 37989, 153569, 24981, 23079, 194765, 20411, 22201, 148769, 157436, 20074, 149812, 38486, 28047, 158909, 13848, 35191, 157593, 157806, 156689, 157790, 29151, 157895, 31554, 168128, 133649, 157990, 37124, 158009, 31301, 40432, 158202, 39462, 158253, 13919, 156777, 131105, 31107, 158260, 158555, 23852, 144665, 33743, 158621, 18128, 158884, 30011, 34917, 159150, 22710, 14108, 140685, 159819, 160205, 15444, 160384, 160389, 37505, 139642, 160395, 37680, 160486, 149968, 27705, 38047, 160848, 134904, 34855, 35061, 141606, 164979, 137137, 28344, 150058, 137248, 14756, 14009, 23568, 31203, 17727, 26294, 171181, 170148, 35139, 161740, 161880, 22230, 16607, 136714, 14753, 145199, 164072, 136133, 29101, 33638, 162269, 168360, 23143, 19639, 159919, 166315, 162301, 162314, 162571, 163174, 147834, 31555, 31102, 163849, 28597, 172767, 27139, 164632, 21410, 159239, 37823, 26678, 38749, 164207, 163875, 158133, 136173, 143919, 163912, 23941, 166960, 163971, 22293, 38947, 166217, 23979, 149896, 26046, 27093, 21458, 150181, 147329, 15377, 26422, 163984, 164084, 164142, 139169, 164175, 164233, 164271, 164378, 164614, 164655, 164746, 13770, 164968, 165546, 18682, 25574, 166230, 30728, 37461, 166328, 17394, 166375, 17375, 166376, 166726, 166868, 23032, 166921, 36619, 167877, 168172, 31569, 168208, 168252, 15863, 168286, 150218, 36816, 29327, 22155, 169191, 169449, 169392, 169400, 169778, 170193, 170313, 170346, 170435, 170536, 170766, 171354, 171419, 32415, 171768, 171811, 19620, 38215, 172691, 29090, 172799, 19857, 36882, 173515, 19868, 134300, 36798, 21953, 36794, 140464, 36793, 150163, 17673, 32383, 28502, 27313, 20202, 13540, 166700, 161949, 14138, 36480, 137205, 163876, 166764, 166809, 162366, 157359, 15851, 161365, 146615, 153141, 153942, 20122, 155265, 156248, 22207, 134765, 36366, 23405, 147080, 150686, 25566, 25296, 137206, 137339, 25904, 22061, 154698, 21530, 152337, 15814, 171416, 19581, 22050, 22046, 32585, 155352, 22901, 146752, 34672, 19996, 135146, 134473, 145082, 33047, 40286, 36120, 30267, 40005, 30286, 30649, 37701, 21554, 33096, 33527, 22053, 33074, 33816, 32957, 21994, 31074, 22083, 21526, 134813, 13774, 22021, 22001, 26353, 164578, 13869, 30004, 22e3, 21946, 21655, 21874, 134209, 134294, 24272, 151880, 134774, 142434, 134818, 40619, 32090, 21982, 135285, 25245, 38765, 21652, 36045, 29174, 37238, 25596, 25529, 25598, 21865, 142147, 40050, 143027, 20890, 13535, 134567, 20903, 21581, 21790, 21779, 30310, 36397, 157834, 30129, 32950, 34820, 34694, 35015, 33206, 33820, 135361, 17644, 29444, 149254, 23440, 33547, 157843, 22139, 141044, 163119, 147875, 163187, 159440, 160438, 37232, 135641, 37384, 146684, 173737, 134828, 134905, 29286, 138402, 18254, 151490, 163833, 135147, 16634, 40029, 25887, 142752, 18675, 149472, 171388, 135148, 134666, 24674, 161187, 135149, null, 155720, 135559, 29091, 32398, 40272, 19994, 19972, 13687, 23309, 27826, 21351, 13996, 14812, 21373, 13989, 149016, 22682, 150382, 33325, 21579, 22442, 154261, 133497, null, 14930, 140389, 29556, 171692, 19721, 39917, 146686, 171824, 19547, 151465, 169374, 171998, 33884, 146870, 160434, 157619, 145184, 25390, 32037, 147191, 146988, 14890, 36872, 21196, 15988, 13946, 17897, 132238, 30272, 23280, 134838, 30842, 163630, 22695, 16575, 22140, 39819, 23924, 30292, 173108, 40581, 19681, 30201, 14331, 24857, 143578, 148466, null, 22109, 135849, 22439, 149859, 171526, 21044, 159918, 13741, 27722, 40316, 31830, 39737, 22494, 137068, 23635, 25811, 169168, 156469, 160100, 34477, 134440, 159010, 150242, 134513, null, 20990, 139023, 23950, 38659, 138705, 40577, 36940, 31519, 39682, 23761, 31651, 25192, 25397, 39679, 31695, 39722, 31870, 39726, 31810, 31878, 39957, 31740, 39689, 40727, 39963, 149822, 40794, 21875, 23491, 20477, 40600, 20466, 21088, 15878, 21201, 22375, 20566, 22967, 24082, 38856, 40363, 36700, 21609, 38836, 39232, 38842, 21292, 24880, 26924, 21466, 39946, 40194, 19515, 38465, 27008, 20646, 30022, 137069, 39386, 21107, null, 37209, 38529, 37212, null, 37201, 167575, 25471, 159011, 27338, 22033, 37262, 30074, 25221, 132092, 29519, 31856, 154657, 146685, null, 149785, 30422, 39837, 20010, 134356, 33726, 34882, null, 23626, 27072, 20717, 22394, 21023, 24053, 20174, 27697, 131570, 20281, 21660, 21722, 21146, 36226, 13822, 24332, 13811, null, 27474, 37244, 40869, 39831, 38958, 39092, 39610, 40616, 40580, 29050, 31508, null, 27642, 34840, 32632, null, 22048, 173642, 36471, 40787, null, 36308, 36431, 40476, 36353, 25218, 164733, 36392, 36469, 31443, 150135, 31294, 30936, 27882, 35431, 30215, 166490, 40742, 27854, 34774, 30147, 172722, 30803, 194624, 36108, 29410, 29553, 35629, 29442, 29937, 36075, 150203, 34351, 24506, 34976, 17591, null, 137275, 159237, null, 35454, 140571, null, 24829, 30311, 39639, 40260, 37742, 39823, 34805, null, 34831, 36087, 29484, 38689, 39856, 13782, 29362, 19463, 31825, 39242, 155993, 24921, 19460, 40598, 24957, null, 22367, 24943, 25254, 25145, 25294, 14940, 25058, 21418, 144373, 25444, 26626, 13778, 23895, 166850, 36826, 167481, null, 20697, 138566, 30982, 21298, 38456, 134971, 16485, null, 30718, null, 31938, 155418, 31962, 31277, 32870, 32867, 32077, 29957, 29938, 35220, 33306, 26380, 32866, 160902, 32859, 29936, 33027, 30500, 35209, 157644, 30035, 159441, 34729, 34766, 33224, 34700, 35401, 36013, 35651, 30507, 29944, 34010, 13877, 27058, 36262, null, 35241, 29800, 28089, 34753, 147473, 29927, 15835, 29046, 24740, 24988, 15569, 29026, 24695, null, 32625, 166701, 29264, 24809, 19326, 21024, 15384, 146631, 155351, 161366, 152881, 137540, 135934, 170243, 159196, 159917, 23745, 156077, 166415, 145015, 131310, 157766, 151310, 17762, 23327, 156492, 40784, 40614, 156267, 12288, 65292, 12289, 12290, 65294, 8231, 65307, 65306, 65311, 65281, 65072, 8230, 8229, 65104, 65105, 65106, 183, 65108, 65109, 65110, 65111, 65372, 8211, 65073, 8212, 65075, 9588, 65076, 65103, 65288, 65289, 65077, 65078, 65371, 65373, 65079, 65080, 12308, 12309, 65081, 65082, 12304, 12305, 65083, 65084, 12298, 12299, 65085, 65086, 12296, 12297, 65087, 65088, 12300, 12301, 65089, 65090, 12302, 12303, 65091, 65092, 65113, 65114, 65115, 65116, 65117, 65118, 8216, 8217, 8220, 8221, 12317, 12318, 8245, 8242, 65283, 65286, 65290, 8251, 167, 12291, 9675, 9679, 9651, 9650, 9678, 9734, 9733, 9671, 9670, 9633, 9632, 9661, 9660, 12963, 8453, 175, 65507, 65343, 717, 65097, 65098, 65101, 65102, 65099, 65100, 65119, 65120, 65121, 65291, 65293, 215, 247, 177, 8730, 65308, 65310, 65309, 8806, 8807, 8800, 8734, 8786, 8801, 65122, 65123, 65124, 65125, 65126, 65374, 8745, 8746, 8869, 8736, 8735, 8895, 13266, 13265, 8747, 8750, 8757, 8756, 9792, 9794, 8853, 8857, 8593, 8595, 8592, 8594, 8598, 8599, 8601, 8600, 8741, 8739, 65295, 65340, 8725, 65128, 65284, 65509, 12306, 65504, 65505, 65285, 65312, 8451, 8457, 65129, 65130, 65131, 13269, 13212, 13213, 13214, 13262, 13217, 13198, 13199, 13252, 176, 20825, 20827, 20830, 20829, 20833, 20835, 21991, 29929, 31950, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9615, 9614, 9613, 9612, 9611, 9610, 9609, 9532, 9524, 9516, 9508, 9500, 9620, 9472, 9474, 9621, 9484, 9488, 9492, 9496, 9581, 9582, 9584, 9583, 9552, 9566, 9578, 9569, 9698, 9699, 9701, 9700, 9585, 9586, 9587, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 21313, 21316, 21317, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 729, 713, 714, 711, 715, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9249, 8364, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 19968, 20057, 19969, 19971, 20035, 20061, 20102, 20108, 20154, 20799, 20837, 20843, 20960, 20992, 20993, 21147, 21269, 21313, 21340, 21448, 19977, 19979, 19976, 19978, 20011, 20024, 20961, 20037, 20040, 20063, 20062, 20110, 20129, 20800, 20995, 21242, 21315, 21449, 21475, 22303, 22763, 22805, 22823, 22899, 23376, 23377, 23379, 23544, 23567, 23586, 23608, 23665, 24029, 24037, 24049, 24050, 24051, 24062, 24178, 24318, 24331, 24339, 25165, 19985, 19984, 19981, 20013, 20016, 20025, 20043, 23609, 20104, 20113, 20117, 20114, 20116, 20130, 20161, 20160, 20163, 20166, 20167, 20173, 20170, 20171, 20164, 20803, 20801, 20839, 20845, 20846, 20844, 20887, 20982, 20998, 20999, 21e3, 21243, 21246, 21247, 21270, 21305, 21320, 21319, 21317, 21342, 21380, 21451, 21450, 21453, 22764, 22825, 22827, 22826, 22829, 23380, 23569, 23588, 23610, 23663, 24052, 24187, 24319, 24340, 24341, 24515, 25096, 25142, 25163, 25166, 25903, 25991, 26007, 26020, 26041, 26085, 26352, 26376, 26408, 27424, 27490, 27513, 27595, 27604, 27611, 27663, 27700, 28779, 29226, 29238, 29243, 29255, 29273, 29275, 29356, 29579, 19993, 19990, 19989, 19988, 19992, 20027, 20045, 20047, 20046, 20197, 20184, 20180, 20181, 20182, 20183, 20195, 20196, 20185, 20190, 20805, 20804, 20873, 20874, 20908, 20985, 20986, 20984, 21002, 21152, 21151, 21253, 21254, 21271, 21277, 20191, 21322, 21321, 21345, 21344, 21359, 21358, 21435, 21487, 21476, 21491, 21484, 21486, 21481, 21480, 21500, 21496, 21493, 21483, 21478, 21482, 21490, 21489, 21488, 21477, 21485, 21499, 22235, 22234, 22806, 22830, 22833, 22900, 22902, 23381, 23427, 23612, 24040, 24039, 24038, 24066, 24067, 24179, 24188, 24321, 24344, 24343, 24517, 25098, 25171, 25172, 25170, 25169, 26021, 26086, 26414, 26412, 26410, 26411, 26413, 27491, 27597, 27665, 27664, 27704, 27713, 27712, 27710, 29359, 29572, 29577, 29916, 29926, 29976, 29983, 29992, 29993, 3e4, 30001, 30002, 30003, 30091, 30333, 30382, 30399, 30446, 30683, 30690, 30707, 31034, 31166, 31348, 31435, 19998, 19999, 20050, 20051, 20073, 20121, 20132, 20134, 20133, 20223, 20233, 20249, 20234, 20245, 20237, 20240, 20241, 20239, 20210, 20214, 20219, 20208, 20211, 20221, 20225, 20235, 20809, 20807, 20806, 20808, 20840, 20849, 20877, 20912, 21015, 21009, 21010, 21006, 21014, 21155, 21256, 21281, 21280, 21360, 21361, 21513, 21519, 21516, 21514, 21520, 21505, 21515, 21508, 21521, 21517, 21512, 21507, 21518, 21510, 21522, 22240, 22238, 22237, 22323, 22320, 22312, 22317, 22316, 22319, 22313, 22809, 22810, 22839, 22840, 22916, 22904, 22915, 22909, 22905, 22914, 22913, 23383, 23384, 23431, 23432, 23429, 23433, 23546, 23574, 23673, 24030, 24070, 24182, 24180, 24335, 24347, 24537, 24534, 25102, 25100, 25101, 25104, 25187, 25179, 25176, 25910, 26089, 26088, 26092, 26093, 26354, 26355, 26377, 26429, 26420, 26417, 26421, 27425, 27492, 27515, 27670, 27741, 27735, 27737, 27743, 27744, 27728, 27733, 27745, 27739, 27725, 27726, 28784, 29279, 29277, 30334, 31481, 31859, 31992, 32566, 32650, 32701, 32769, 32771, 32780, 32786, 32819, 32895, 32905, 32907, 32908, 33251, 33258, 33267, 33276, 33292, 33307, 33311, 33390, 33394, 33406, 34411, 34880, 34892, 34915, 35199, 38433, 20018, 20136, 20301, 20303, 20295, 20311, 20318, 20276, 20315, 20309, 20272, 20304, 20305, 20285, 20282, 20280, 20291, 20308, 20284, 20294, 20323, 20316, 20320, 20271, 20302, 20278, 20313, 20317, 20296, 20314, 20812, 20811, 20813, 20853, 20918, 20919, 21029, 21028, 21033, 21034, 21032, 21163, 21161, 21162, 21164, 21283, 21363, 21365, 21533, 21549, 21534, 21566, 21542, 21582, 21543, 21574, 21571, 21555, 21576, 21570, 21531, 21545, 21578, 21561, 21563, 21560, 21550, 21557, 21558, 21536, 21564, 21568, 21553, 21547, 21535, 21548, 22250, 22256, 22244, 22251, 22346, 22353, 22336, 22349, 22343, 22350, 22334, 22352, 22351, 22331, 22767, 22846, 22941, 22930, 22952, 22942, 22947, 22937, 22934, 22925, 22948, 22931, 22922, 22949, 23389, 23388, 23386, 23387, 23436, 23435, 23439, 23596, 23616, 23617, 23615, 23614, 23696, 23697, 23700, 23692, 24043, 24076, 24207, 24199, 24202, 24311, 24324, 24351, 24420, 24418, 24439, 24441, 24536, 24524, 24535, 24525, 24561, 24555, 24568, 24554, 25106, 25105, 25220, 25239, 25238, 25216, 25206, 25225, 25197, 25226, 25212, 25214, 25209, 25203, 25234, 25199, 25240, 25198, 25237, 25235, 25233, 25222, 25913, 25915, 25912, 26097, 26356, 26463, 26446, 26447, 26448, 26449, 26460, 26454, 26462, 26441, 26438, 26464, 26451, 26455, 27493, 27599, 27714, 27742, 27801, 27777, 27784, 27785, 27781, 27803, 27754, 27770, 27792, 27760, 27788, 27752, 27798, 27794, 27773, 27779, 27762, 27774, 27764, 27782, 27766, 27789, 27796, 27800, 27778, 28790, 28796, 28797, 28792, 29282, 29281, 29280, 29380, 29378, 29590, 29996, 29995, 30007, 30008, 30338, 30447, 30691, 31169, 31168, 31167, 31350, 31995, 32597, 32918, 32915, 32925, 32920, 32923, 32922, 32946, 33391, 33426, 33419, 33421, 35211, 35282, 35328, 35895, 35910, 35925, 35997, 36196, 36208, 36275, 36523, 36554, 36763, 36784, 36802, 36806, 36805, 36804, 24033, 37009, 37026, 37034, 37030, 37027, 37193, 37318, 37324, 38450, 38446, 38449, 38442, 38444, 20006, 20054, 20083, 20107, 20123, 20126, 20139, 20140, 20335, 20381, 20365, 20339, 20351, 20332, 20379, 20363, 20358, 20355, 20336, 20341, 20360, 20329, 20347, 20374, 20350, 20367, 20369, 20346, 20820, 20818, 20821, 20841, 20855, 20854, 20856, 20925, 20989, 21051, 21048, 21047, 21050, 21040, 21038, 21046, 21057, 21182, 21179, 21330, 21332, 21331, 21329, 21350, 21367, 21368, 21369, 21462, 21460, 21463, 21619, 21621, 21654, 21624, 21653, 21632, 21627, 21623, 21636, 21650, 21638, 21628, 21648, 21617, 21622, 21644, 21658, 21602, 21608, 21643, 21629, 21646, 22266, 22403, 22391, 22378, 22377, 22369, 22374, 22372, 22396, 22812, 22857, 22855, 22856, 22852, 22868, 22974, 22971, 22996, 22969, 22958, 22993, 22982, 22992, 22989, 22987, 22995, 22986, 22959, 22963, 22994, 22981, 23391, 23396, 23395, 23447, 23450, 23448, 23452, 23449, 23451, 23578, 23624, 23621, 23622, 23735, 23713, 23736, 23721, 23723, 23729, 23731, 24088, 24090, 24086, 24085, 24091, 24081, 24184, 24218, 24215, 24220, 24213, 24214, 24310, 24358, 24359, 24361, 24448, 24449, 24447, 24444, 24541, 24544, 24573, 24565, 24575, 24591, 24596, 24623, 24629, 24598, 24618, 24597, 24609, 24615, 24617, 24619, 24603, 25110, 25109, 25151, 25150, 25152, 25215, 25289, 25292, 25284, 25279, 25282, 25273, 25298, 25307, 25259, 25299, 25300, 25291, 25288, 25256, 25277, 25276, 25296, 25305, 25287, 25293, 25269, 25306, 25265, 25304, 25302, 25303, 25286, 25260, 25294, 25918, 26023, 26044, 26106, 26132, 26131, 26124, 26118, 26114, 26126, 26112, 26127, 26133, 26122, 26119, 26381, 26379, 26477, 26507, 26517, 26481, 26524, 26483, 26487, 26503, 26525, 26519, 26479, 26480, 26495, 26505, 26494, 26512, 26485, 26522, 26515, 26492, 26474, 26482, 27427, 27494, 27495, 27519, 27667, 27675, 27875, 27880, 27891, 27825, 27852, 27877, 27827, 27837, 27838, 27836, 27874, 27819, 27861, 27859, 27832, 27844, 27833, 27841, 27822, 27863, 27845, 27889, 27839, 27835, 27873, 27867, 27850, 27820, 27887, 27868, 27862, 27872, 28821, 28814, 28818, 28810, 28825, 29228, 29229, 29240, 29256, 29287, 29289, 29376, 29390, 29401, 29399, 29392, 29609, 29608, 29599, 29611, 29605, 30013, 30109, 30105, 30106, 30340, 30402, 30450, 30452, 30693, 30717, 31038, 31040, 31041, 31177, 31176, 31354, 31353, 31482, 31998, 32596, 32652, 32651, 32773, 32954, 32933, 32930, 32945, 32929, 32939, 32937, 32948, 32938, 32943, 33253, 33278, 33293, 33459, 33437, 33433, 33453, 33469, 33439, 33465, 33457, 33452, 33445, 33455, 33464, 33443, 33456, 33470, 33463, 34382, 34417, 21021, 34920, 36555, 36814, 36820, 36817, 37045, 37048, 37041, 37046, 37319, 37329, 38263, 38272, 38428, 38464, 38463, 38459, 38468, 38466, 38585, 38632, 38738, 38750, 20127, 20141, 20142, 20449, 20405, 20399, 20415, 20448, 20433, 20431, 20445, 20419, 20406, 20440, 20447, 20426, 20439, 20398, 20432, 20420, 20418, 20442, 20430, 20446, 20407, 20823, 20882, 20881, 20896, 21070, 21059, 21066, 21069, 21068, 21067, 21063, 21191, 21193, 21187, 21185, 21261, 21335, 21371, 21402, 21467, 21676, 21696, 21672, 21710, 21705, 21688, 21670, 21683, 21703, 21698, 21693, 21674, 21697, 21700, 21704, 21679, 21675, 21681, 21691, 21673, 21671, 21695, 22271, 22402, 22411, 22432, 22435, 22434, 22478, 22446, 22419, 22869, 22865, 22863, 22862, 22864, 23004, 23e3, 23039, 23011, 23016, 23043, 23013, 23018, 23002, 23014, 23041, 23035, 23401, 23459, 23462, 23460, 23458, 23461, 23553, 23630, 23631, 23629, 23627, 23769, 23762, 24055, 24093, 24101, 24095, 24189, 24224, 24230, 24314, 24328, 24365, 24421, 24456, 24453, 24458, 24459, 24455, 24460, 24457, 24594, 24605, 24608, 24613, 24590, 24616, 24653, 24688, 24680, 24674, 24646, 24643, 24684, 24683, 24682, 24676, 25153, 25308, 25366, 25353, 25340, 25325, 25345, 25326, 25341, 25351, 25329, 25335, 25327, 25324, 25342, 25332, 25361, 25346, 25919, 25925, 26027, 26045, 26082, 26149, 26157, 26144, 26151, 26159, 26143, 26152, 26161, 26148, 26359, 26623, 26579, 26609, 26580, 26576, 26604, 26550, 26543, 26613, 26601, 26607, 26564, 26577, 26548, 26586, 26597, 26552, 26575, 26590, 26611, 26544, 26585, 26594, 26589, 26578, 27498, 27523, 27526, 27573, 27602, 27607, 27679, 27849, 27915, 27954, 27946, 27969, 27941, 27916, 27953, 27934, 27927, 27963, 27965, 27966, 27958, 27931, 27893, 27961, 27943, 27960, 27945, 27950, 27957, 27918, 27947, 28843, 28858, 28851, 28844, 28847, 28845, 28856, 28846, 28836, 29232, 29298, 29295, 29300, 29417, 29408, 29409, 29623, 29642, 29627, 29618, 29645, 29632, 29619, 29978, 29997, 30031, 30028, 30030, 30027, 30123, 30116, 30117, 30114, 30115, 30328, 30342, 30343, 30344, 30408, 30406, 30403, 30405, 30465, 30457, 30456, 30473, 30475, 30462, 30460, 30471, 30684, 30722, 30740, 30732, 30733, 31046, 31049, 31048, 31047, 31161, 31162, 31185, 31186, 31179, 31359, 31361, 31487, 31485, 31869, 32002, 32005, 32e3, 32009, 32007, 32004, 32006, 32568, 32654, 32703, 32772, 32784, 32781, 32785, 32822, 32982, 32997, 32986, 32963, 32964, 32972, 32993, 32987, 32974, 32990, 32996, 32989, 33268, 33314, 33511, 33539, 33541, 33507, 33499, 33510, 33540, 33509, 33538, 33545, 33490, 33495, 33521, 33537, 33500, 33492, 33489, 33502, 33491, 33503, 33519, 33542, 34384, 34425, 34427, 34426, 34893, 34923, 35201, 35284, 35336, 35330, 35331, 35998, 36e3, 36212, 36211, 36276, 36557, 36556, 36848, 36838, 36834, 36842, 36837, 36845, 36843, 36836, 36840, 37066, 37070, 37057, 37059, 37195, 37194, 37325, 38274, 38480, 38475, 38476, 38477, 38754, 38761, 38859, 38893, 38899, 38913, 39080, 39131, 39135, 39318, 39321, 20056, 20147, 20492, 20493, 20515, 20463, 20518, 20517, 20472, 20521, 20502, 20486, 20540, 20511, 20506, 20498, 20497, 20474, 20480, 20500, 20520, 20465, 20513, 20491, 20505, 20504, 20467, 20462, 20525, 20522, 20478, 20523, 20489, 20860, 20900, 20901, 20898, 20941, 20940, 20934, 20939, 21078, 21084, 21076, 21083, 21085, 21290, 21375, 21407, 21405, 21471, 21736, 21776, 21761, 21815, 21756, 21733, 21746, 21766, 21754, 21780, 21737, 21741, 21729, 21769, 21742, 21738, 21734, 21799, 21767, 21757, 21775, 22275, 22276, 22466, 22484, 22475, 22467, 22537, 22799, 22871, 22872, 22874, 23057, 23064, 23068, 23071, 23067, 23059, 23020, 23072, 23075, 23081, 23077, 23052, 23049, 23403, 23640, 23472, 23475, 23478, 23476, 23470, 23477, 23481, 23480, 23556, 23633, 23637, 23632, 23789, 23805, 23803, 23786, 23784, 23792, 23798, 23809, 23796, 24046, 24109, 24107, 24235, 24237, 24231, 24369, 24466, 24465, 24464, 24665, 24675, 24677, 24656, 24661, 24685, 24681, 24687, 24708, 24735, 24730, 24717, 24724, 24716, 24709, 24726, 25159, 25331, 25352, 25343, 25422, 25406, 25391, 25429, 25410, 25414, 25423, 25417, 25402, 25424, 25405, 25386, 25387, 25384, 25421, 25420, 25928, 25929, 26009, 26049, 26053, 26178, 26185, 26191, 26179, 26194, 26188, 26181, 26177, 26360, 26388, 26389, 26391, 26657, 26680, 26696, 26694, 26707, 26681, 26690, 26708, 26665, 26803, 26647, 26700, 26705, 26685, 26612, 26704, 26688, 26684, 26691, 26666, 26693, 26643, 26648, 26689, 27530, 27529, 27575, 27683, 27687, 27688, 27686, 27684, 27888, 28010, 28053, 28040, 28039, 28006, 28024, 28023, 27993, 28051, 28012, 28041, 28014, 27994, 28020, 28009, 28044, 28042, 28025, 28037, 28005, 28052, 28874, 28888, 28900, 28889, 28872, 28879, 29241, 29305, 29436, 29433, 29437, 29432, 29431, 29574, 29677, 29705, 29678, 29664, 29674, 29662, 30036, 30045, 30044, 30042, 30041, 30142, 30149, 30151, 30130, 30131, 30141, 30140, 30137, 30146, 30136, 30347, 30384, 30410, 30413, 30414, 30505, 30495, 30496, 30504, 30697, 30768, 30759, 30776, 30749, 30772, 30775, 30757, 30765, 30752, 30751, 30770, 31061, 31056, 31072, 31071, 31062, 31070, 31069, 31063, 31066, 31204, 31203, 31207, 31199, 31206, 31209, 31192, 31364, 31368, 31449, 31494, 31505, 31881, 32033, 32023, 32011, 32010, 32032, 32034, 32020, 32016, 32021, 32026, 32028, 32013, 32025, 32027, 32570, 32607, 32660, 32709, 32705, 32774, 32792, 32789, 32793, 32791, 32829, 32831, 33009, 33026, 33008, 33029, 33005, 33012, 33030, 33016, 33011, 33032, 33021, 33034, 33020, 33007, 33261, 33260, 33280, 33296, 33322, 33323, 33320, 33324, 33467, 33579, 33618, 33620, 33610, 33592, 33616, 33609, 33589, 33588, 33615, 33586, 33593, 33590, 33559, 33600, 33585, 33576, 33603, 34388, 34442, 34474, 34451, 34468, 34473, 34444, 34467, 34460, 34928, 34935, 34945, 34946, 34941, 34937, 35352, 35344, 35342, 35340, 35349, 35338, 35351, 35347, 35350, 35343, 35345, 35912, 35962, 35961, 36001, 36002, 36215, 36524, 36562, 36564, 36559, 36785, 36865, 36870, 36855, 36864, 36858, 36852, 36867, 36861, 36869, 36856, 37013, 37089, 37085, 37090, 37202, 37197, 37196, 37336, 37341, 37335, 37340, 37337, 38275, 38498, 38499, 38497, 38491, 38493, 38500, 38488, 38494, 38587, 39138, 39340, 39592, 39640, 39717, 39730, 39740, 20094, 20602, 20605, 20572, 20551, 20547, 20556, 20570, 20553, 20581, 20598, 20558, 20565, 20597, 20596, 20599, 20559, 20495, 20591, 20589, 20828, 20885, 20976, 21098, 21103, 21202, 21209, 21208, 21205, 21264, 21263, 21273, 21311, 21312, 21310, 21443, 26364, 21830, 21866, 21862, 21828, 21854, 21857, 21827, 21834, 21809, 21846, 21839, 21845, 21807, 21860, 21816, 21806, 21852, 21804, 21859, 21811, 21825, 21847, 22280, 22283, 22281, 22495, 22533, 22538, 22534, 22496, 22500, 22522, 22530, 22581, 22519, 22521, 22816, 22882, 23094, 23105, 23113, 23142, 23146, 23104, 23100, 23138, 23130, 23110, 23114, 23408, 23495, 23493, 23492, 23490, 23487, 23494, 23561, 23560, 23559, 23648, 23644, 23645, 23815, 23814, 23822, 23835, 23830, 23842, 23825, 23849, 23828, 23833, 23844, 23847, 23831, 24034, 24120, 24118, 24115, 24119, 24247, 24248, 24246, 24245, 24254, 24373, 24375, 24407, 24428, 24425, 24427, 24471, 24473, 24478, 24472, 24481, 24480, 24476, 24703, 24739, 24713, 24736, 24744, 24779, 24756, 24806, 24765, 24773, 24763, 24757, 24796, 24764, 24792, 24789, 24774, 24799, 24760, 24794, 24775, 25114, 25115, 25160, 25504, 25511, 25458, 25494, 25506, 25509, 25463, 25447, 25496, 25514, 25457, 25513, 25481, 25475, 25499, 25451, 25512, 25476, 25480, 25497, 25505, 25516, 25490, 25487, 25472, 25467, 25449, 25448, 25466, 25949, 25942, 25937, 25945, 25943, 21855, 25935, 25944, 25941, 25940, 26012, 26011, 26028, 26063, 26059, 26060, 26062, 26205, 26202, 26212, 26216, 26214, 26206, 26361, 21207, 26395, 26753, 26799, 26786, 26771, 26805, 26751, 26742, 26801, 26791, 26775, 26800, 26755, 26820, 26797, 26758, 26757, 26772, 26781, 26792, 26783, 26785, 26754, 27442, 27578, 27627, 27628, 27691, 28046, 28092, 28147, 28121, 28082, 28129, 28108, 28132, 28155, 28154, 28165, 28103, 28107, 28079, 28113, 28078, 28126, 28153, 28088, 28151, 28149, 28101, 28114, 28186, 28085, 28122, 28139, 28120, 28138, 28145, 28142, 28136, 28102, 28100, 28074, 28140, 28095, 28134, 28921, 28937, 28938, 28925, 28911, 29245, 29309, 29313, 29468, 29467, 29462, 29459, 29465, 29575, 29701, 29706, 29699, 29702, 29694, 29709, 29920, 29942, 29943, 29980, 29986, 30053, 30054, 30050, 30064, 30095, 30164, 30165, 30133, 30154, 30157, 30350, 30420, 30418, 30427, 30519, 30526, 30524, 30518, 30520, 30522, 30827, 30787, 30798, 31077, 31080, 31085, 31227, 31378, 31381, 31520, 31528, 31515, 31532, 31526, 31513, 31518, 31534, 31890, 31895, 31893, 32070, 32067, 32113, 32046, 32057, 32060, 32064, 32048, 32051, 32068, 32047, 32066, 32050, 32049, 32573, 32670, 32666, 32716, 32718, 32722, 32796, 32842, 32838, 33071, 33046, 33059, 33067, 33065, 33072, 33060, 33282, 33333, 33335, 33334, 33337, 33678, 33694, 33688, 33656, 33698, 33686, 33725, 33707, 33682, 33674, 33683, 33673, 33696, 33655, 33659, 33660, 33670, 33703, 34389, 24426, 34503, 34496, 34486, 34500, 34485, 34502, 34507, 34481, 34479, 34505, 34899, 34974, 34952, 34987, 34962, 34966, 34957, 34955, 35219, 35215, 35370, 35357, 35363, 35365, 35377, 35373, 35359, 35355, 35362, 35913, 35930, 36009, 36012, 36011, 36008, 36010, 36007, 36199, 36198, 36286, 36282, 36571, 36575, 36889, 36877, 36890, 36887, 36899, 36895, 36893, 36880, 36885, 36894, 36896, 36879, 36898, 36886, 36891, 36884, 37096, 37101, 37117, 37207, 37326, 37365, 37350, 37347, 37351, 37357, 37353, 38281, 38506, 38517, 38515, 38520, 38512, 38516, 38518, 38519, 38508, 38592, 38634, 38633, 31456, 31455, 38914, 38915, 39770, 40165, 40565, 40575, 40613, 40635, 20642, 20621, 20613, 20633, 20625, 20608, 20630, 20632, 20634, 26368, 20977, 21106, 21108, 21109, 21097, 21214, 21213, 21211, 21338, 21413, 21883, 21888, 21927, 21884, 21898, 21917, 21912, 21890, 21916, 21930, 21908, 21895, 21899, 21891, 21939, 21934, 21919, 21822, 21938, 21914, 21947, 21932, 21937, 21886, 21897, 21931, 21913, 22285, 22575, 22570, 22580, 22564, 22576, 22577, 22561, 22557, 22560, 22777, 22778, 22880, 23159, 23194, 23167, 23186, 23195, 23207, 23411, 23409, 23506, 23500, 23507, 23504, 23562, 23563, 23601, 23884, 23888, 23860, 23879, 24061, 24133, 24125, 24128, 24131, 24190, 24266, 24257, 24258, 24260, 24380, 24429, 24489, 24490, 24488, 24785, 24801, 24754, 24758, 24800, 24860, 24867, 24826, 24853, 24816, 24827, 24820, 24936, 24817, 24846, 24822, 24841, 24832, 24850, 25119, 25161, 25507, 25484, 25551, 25536, 25577, 25545, 25542, 25549, 25554, 25571, 25552, 25569, 25558, 25581, 25582, 25462, 25588, 25578, 25563, 25682, 25562, 25593, 25950, 25958, 25954, 25955, 26001, 26e3, 26031, 26222, 26224, 26228, 26230, 26223, 26257, 26234, 26238, 26231, 26366, 26367, 26399, 26397, 26874, 26837, 26848, 26840, 26839, 26885, 26847, 26869, 26862, 26855, 26873, 26834, 26866, 26851, 26827, 26829, 26893, 26898, 26894, 26825, 26842, 26990, 26875, 27454, 27450, 27453, 27544, 27542, 27580, 27631, 27694, 27695, 27692, 28207, 28216, 28244, 28193, 28210, 28263, 28234, 28192, 28197, 28195, 28187, 28251, 28248, 28196, 28246, 28270, 28205, 28198, 28271, 28212, 28237, 28218, 28204, 28227, 28189, 28222, 28363, 28297, 28185, 28238, 28259, 28228, 28274, 28265, 28255, 28953, 28954, 28966, 28976, 28961, 28982, 29038, 28956, 29260, 29316, 29312, 29494, 29477, 29492, 29481, 29754, 29738, 29747, 29730, 29733, 29749, 29750, 29748, 29743, 29723, 29734, 29736, 29989, 29990, 30059, 30058, 30178, 30171, 30179, 30169, 30168, 30174, 30176, 30331, 30332, 30358, 30355, 30388, 30428, 30543, 30701, 30813, 30828, 30831, 31245, 31240, 31243, 31237, 31232, 31384, 31383, 31382, 31461, 31459, 31561, 31574, 31558, 31568, 31570, 31572, 31565, 31563, 31567, 31569, 31903, 31909, 32094, 32080, 32104, 32085, 32043, 32110, 32114, 32097, 32102, 32098, 32112, 32115, 21892, 32724, 32725, 32779, 32850, 32901, 33109, 33108, 33099, 33105, 33102, 33081, 33094, 33086, 33100, 33107, 33140, 33298, 33308, 33769, 33795, 33784, 33805, 33760, 33733, 33803, 33729, 33775, 33777, 33780, 33879, 33802, 33776, 33804, 33740, 33789, 33778, 33738, 33848, 33806, 33796, 33756, 33799, 33748, 33759, 34395, 34527, 34521, 34541, 34516, 34523, 34532, 34512, 34526, 34903, 35009, 35010, 34993, 35203, 35222, 35387, 35424, 35413, 35422, 35388, 35393, 35412, 35419, 35408, 35398, 35380, 35386, 35382, 35414, 35937, 35970, 36015, 36028, 36019, 36029, 36033, 36027, 36032, 36020, 36023, 36022, 36031, 36024, 36234, 36229, 36225, 36302, 36317, 36299, 36314, 36305, 36300, 36315, 36294, 36603, 36600, 36604, 36764, 36910, 36917, 36913, 36920, 36914, 36918, 37122, 37109, 37129, 37118, 37219, 37221, 37327, 37396, 37397, 37411, 37385, 37406, 37389, 37392, 37383, 37393, 38292, 38287, 38283, 38289, 38291, 38290, 38286, 38538, 38542, 38539, 38525, 38533, 38534, 38541, 38514, 38532, 38593, 38597, 38596, 38598, 38599, 38639, 38642, 38860, 38917, 38918, 38920, 39143, 39146, 39151, 39145, 39154, 39149, 39342, 39341, 40643, 40653, 40657, 20098, 20653, 20661, 20658, 20659, 20677, 20670, 20652, 20663, 20667, 20655, 20679, 21119, 21111, 21117, 21215, 21222, 21220, 21218, 21219, 21295, 21983, 21992, 21971, 21990, 21966, 21980, 21959, 21969, 21987, 21988, 21999, 21978, 21985, 21957, 21958, 21989, 21961, 22290, 22291, 22622, 22609, 22616, 22615, 22618, 22612, 22635, 22604, 22637, 22602, 22626, 22610, 22603, 22887, 23233, 23241, 23244, 23230, 23229, 23228, 23219, 23234, 23218, 23913, 23919, 24140, 24185, 24265, 24264, 24338, 24409, 24492, 24494, 24858, 24847, 24904, 24863, 24819, 24859, 24825, 24833, 24840, 24910, 24908, 24900, 24909, 24894, 24884, 24871, 24845, 24838, 24887, 25121, 25122, 25619, 25662, 25630, 25642, 25645, 25661, 25644, 25615, 25628, 25620, 25613, 25654, 25622, 25623, 25606, 25964, 26015, 26032, 26263, 26249, 26247, 26248, 26262, 26244, 26264, 26253, 26371, 27028, 26989, 26970, 26999, 26976, 26964, 26997, 26928, 27010, 26954, 26984, 26987, 26974, 26963, 27001, 27014, 26973, 26979, 26971, 27463, 27506, 27584, 27583, 27603, 27645, 28322, 28335, 28371, 28342, 28354, 28304, 28317, 28359, 28357, 28325, 28312, 28348, 28346, 28331, 28369, 28310, 28316, 28356, 28372, 28330, 28327, 28340, 29006, 29017, 29033, 29028, 29001, 29031, 29020, 29036, 29030, 29004, 29029, 29022, 28998, 29032, 29014, 29242, 29266, 29495, 29509, 29503, 29502, 29807, 29786, 29781, 29791, 29790, 29761, 29759, 29785, 29787, 29788, 30070, 30072, 30208, 30192, 30209, 30194, 30193, 30202, 30207, 30196, 30195, 30430, 30431, 30555, 30571, 30566, 30558, 30563, 30585, 30570, 30572, 30556, 30565, 30568, 30562, 30702, 30862, 30896, 30871, 30872, 30860, 30857, 30844, 30865, 30867, 30847, 31098, 31103, 31105, 33836, 31165, 31260, 31258, 31264, 31252, 31263, 31262, 31391, 31392, 31607, 31680, 31584, 31598, 31591, 31921, 31923, 31925, 32147, 32121, 32145, 32129, 32143, 32091, 32622, 32617, 32618, 32626, 32681, 32680, 32676, 32854, 32856, 32902, 32900, 33137, 33136, 33144, 33125, 33134, 33139, 33131, 33145, 33146, 33126, 33285, 33351, 33922, 33911, 33853, 33841, 33909, 33894, 33899, 33865, 33900, 33883, 33852, 33845, 33889, 33891, 33897, 33901, 33862, 34398, 34396, 34399, 34553, 34579, 34568, 34567, 34560, 34558, 34555, 34562, 34563, 34566, 34570, 34905, 35039, 35028, 35033, 35036, 35032, 35037, 35041, 35018, 35029, 35026, 35228, 35299, 35435, 35442, 35443, 35430, 35433, 35440, 35463, 35452, 35427, 35488, 35441, 35461, 35437, 35426, 35438, 35436, 35449, 35451, 35390, 35432, 35938, 35978, 35977, 36042, 36039, 36040, 36036, 36018, 36035, 36034, 36037, 36321, 36319, 36328, 36335, 36339, 36346, 36330, 36324, 36326, 36530, 36611, 36617, 36606, 36618, 36767, 36786, 36939, 36938, 36947, 36930, 36948, 36924, 36949, 36944, 36935, 36943, 36942, 36941, 36945, 36926, 36929, 37138, 37143, 37228, 37226, 37225, 37321, 37431, 37463, 37432, 37437, 37440, 37438, 37467, 37451, 37476, 37457, 37428, 37449, 37453, 37445, 37433, 37439, 37466, 38296, 38552, 38548, 38549, 38605, 38603, 38601, 38602, 38647, 38651, 38649, 38646, 38742, 38772, 38774, 38928, 38929, 38931, 38922, 38930, 38924, 39164, 39156, 39165, 39166, 39347, 39345, 39348, 39649, 40169, 40578, 40718, 40723, 40736, 20711, 20718, 20709, 20694, 20717, 20698, 20693, 20687, 20689, 20721, 20686, 20713, 20834, 20979, 21123, 21122, 21297, 21421, 22014, 22016, 22043, 22039, 22013, 22036, 22022, 22025, 22029, 22030, 22007, 22038, 22047, 22024, 22032, 22006, 22296, 22294, 22645, 22654, 22659, 22675, 22666, 22649, 22661, 22653, 22781, 22821, 22818, 22820, 22890, 22889, 23265, 23270, 23273, 23255, 23254, 23256, 23267, 23413, 23518, 23527, 23521, 23525, 23526, 23528, 23522, 23524, 23519, 23565, 23650, 23940, 23943, 24155, 24163, 24149, 24151, 24148, 24275, 24278, 24330, 24390, 24432, 24505, 24903, 24895, 24907, 24951, 24930, 24931, 24927, 24922, 24920, 24949, 25130, 25735, 25688, 25684, 25764, 25720, 25695, 25722, 25681, 25703, 25652, 25709, 25723, 25970, 26017, 26071, 26070, 26274, 26280, 26269, 27036, 27048, 27029, 27073, 27054, 27091, 27083, 27035, 27063, 27067, 27051, 27060, 27088, 27085, 27053, 27084, 27046, 27075, 27043, 27465, 27468, 27699, 28467, 28436, 28414, 28435, 28404, 28457, 28478, 28448, 28460, 28431, 28418, 28450, 28415, 28399, 28422, 28465, 28472, 28466, 28451, 28437, 28459, 28463, 28552, 28458, 28396, 28417, 28402, 28364, 28407, 29076, 29081, 29053, 29066, 29060, 29074, 29246, 29330, 29334, 29508, 29520, 29796, 29795, 29802, 29808, 29805, 29956, 30097, 30247, 30221, 30219, 30217, 30227, 30433, 30435, 30596, 30589, 30591, 30561, 30913, 30879, 30887, 30899, 30889, 30883, 31118, 31119, 31117, 31278, 31281, 31402, 31401, 31469, 31471, 31649, 31637, 31627, 31605, 31639, 31645, 31636, 31631, 31672, 31623, 31620, 31929, 31933, 31934, 32187, 32176, 32156, 32189, 32190, 32160, 32202, 32180, 32178, 32177, 32186, 32162, 32191, 32181, 32184, 32173, 32210, 32199, 32172, 32624, 32736, 32737, 32735, 32862, 32858, 32903, 33104, 33152, 33167, 33160, 33162, 33151, 33154, 33255, 33274, 33287, 33300, 33310, 33355, 33993, 33983, 33990, 33988, 33945, 33950, 33970, 33948, 33995, 33976, 33984, 34003, 33936, 33980, 34001, 33994, 34623, 34588, 34619, 34594, 34597, 34612, 34584, 34645, 34615, 34601, 35059, 35074, 35060, 35065, 35064, 35069, 35048, 35098, 35055, 35494, 35468, 35486, 35491, 35469, 35489, 35475, 35492, 35498, 35493, 35496, 35480, 35473, 35482, 35495, 35946, 35981, 35980, 36051, 36049, 36050, 36203, 36249, 36245, 36348, 36628, 36626, 36629, 36627, 36771, 36960, 36952, 36956, 36963, 36953, 36958, 36962, 36957, 36955, 37145, 37144, 37150, 37237, 37240, 37239, 37236, 37496, 37504, 37509, 37528, 37526, 37499, 37523, 37532, 37544, 37500, 37521, 38305, 38312, 38313, 38307, 38309, 38308, 38553, 38556, 38555, 38604, 38610, 38656, 38780, 38789, 38902, 38935, 38936, 39087, 39089, 39171, 39173, 39180, 39177, 39361, 39599, 39600, 39654, 39745, 39746, 40180, 40182, 40179, 40636, 40763, 40778, 20740, 20736, 20731, 20725, 20729, 20738, 20744, 20745, 20741, 20956, 21127, 21128, 21129, 21133, 21130, 21232, 21426, 22062, 22075, 22073, 22066, 22079, 22068, 22057, 22099, 22094, 22103, 22132, 22070, 22063, 22064, 22656, 22687, 22686, 22707, 22684, 22702, 22697, 22694, 22893, 23305, 23291, 23307, 23285, 23308, 23304, 23534, 23532, 23529, 23531, 23652, 23653, 23965, 23956, 24162, 24159, 24161, 24290, 24282, 24287, 24285, 24291, 24288, 24392, 24433, 24503, 24501, 24950, 24935, 24942, 24925, 24917, 24962, 24956, 24944, 24939, 24958, 24999, 24976, 25003, 24974, 25004, 24986, 24996, 24980, 25006, 25134, 25705, 25711, 25721, 25758, 25778, 25736, 25744, 25776, 25765, 25747, 25749, 25769, 25746, 25774, 25773, 25771, 25754, 25772, 25753, 25762, 25779, 25973, 25975, 25976, 26286, 26283, 26292, 26289, 27171, 27167, 27112, 27137, 27166, 27161, 27133, 27169, 27155, 27146, 27123, 27138, 27141, 27117, 27153, 27472, 27470, 27556, 27589, 27590, 28479, 28540, 28548, 28497, 28518, 28500, 28550, 28525, 28507, 28536, 28526, 28558, 28538, 28528, 28516, 28567, 28504, 28373, 28527, 28512, 28511, 29087, 29100, 29105, 29096, 29270, 29339, 29518, 29527, 29801, 29835, 29827, 29822, 29824, 30079, 30240, 30249, 30239, 30244, 30246, 30241, 30242, 30362, 30394, 30436, 30606, 30599, 30604, 30609, 30603, 30923, 30917, 30906, 30922, 30910, 30933, 30908, 30928, 31295, 31292, 31296, 31293, 31287, 31291, 31407, 31406, 31661, 31665, 31684, 31668, 31686, 31687, 31681, 31648, 31692, 31946, 32224, 32244, 32239, 32251, 32216, 32236, 32221, 32232, 32227, 32218, 32222, 32233, 32158, 32217, 32242, 32249, 32629, 32631, 32687, 32745, 32806, 33179, 33180, 33181, 33184, 33178, 33176, 34071, 34109, 34074, 34030, 34092, 34093, 34067, 34065, 34083, 34081, 34068, 34028, 34085, 34047, 34054, 34690, 34676, 34678, 34656, 34662, 34680, 34664, 34649, 34647, 34636, 34643, 34907, 34909, 35088, 35079, 35090, 35091, 35093, 35082, 35516, 35538, 35527, 35524, 35477, 35531, 35576, 35506, 35529, 35522, 35519, 35504, 35542, 35533, 35510, 35513, 35547, 35916, 35918, 35948, 36064, 36062, 36070, 36068, 36076, 36077, 36066, 36067, 36060, 36074, 36065, 36205, 36255, 36259, 36395, 36368, 36381, 36386, 36367, 36393, 36383, 36385, 36382, 36538, 36637, 36635, 36639, 36649, 36646, 36650, 36636, 36638, 36645, 36969, 36974, 36968, 36973, 36983, 37168, 37165, 37159, 37169, 37255, 37257, 37259, 37251, 37573, 37563, 37559, 37610, 37548, 37604, 37569, 37555, 37564, 37586, 37575, 37616, 37554, 38317, 38321, 38660, 38662, 38663, 38665, 38752, 38797, 38795, 38799, 38945, 38955, 38940, 39091, 39178, 39187, 39186, 39192, 39389, 39376, 39391, 39387, 39377, 39381, 39378, 39385, 39607, 39662, 39663, 39719, 39749, 39748, 39799, 39791, 40198, 40201, 40195, 40617, 40638, 40654, 22696, 40786, 20754, 20760, 20756, 20752, 20757, 20864, 20906, 20957, 21137, 21139, 21235, 22105, 22123, 22137, 22121, 22116, 22136, 22122, 22120, 22117, 22129, 22127, 22124, 22114, 22134, 22721, 22718, 22727, 22725, 22894, 23325, 23348, 23416, 23536, 23566, 24394, 25010, 24977, 25001, 24970, 25037, 25014, 25022, 25034, 25032, 25136, 25797, 25793, 25803, 25787, 25788, 25818, 25796, 25799, 25794, 25805, 25791, 25810, 25812, 25790, 25972, 26310, 26313, 26297, 26308, 26311, 26296, 27197, 27192, 27194, 27225, 27243, 27224, 27193, 27204, 27234, 27233, 27211, 27207, 27189, 27231, 27208, 27481, 27511, 27653, 28610, 28593, 28577, 28611, 28580, 28609, 28583, 28595, 28608, 28601, 28598, 28582, 28576, 28596, 29118, 29129, 29136, 29138, 29128, 29141, 29113, 29134, 29145, 29148, 29123, 29124, 29544, 29852, 29859, 29848, 29855, 29854, 29922, 29964, 29965, 30260, 30264, 30266, 30439, 30437, 30624, 30622, 30623, 30629, 30952, 30938, 30956, 30951, 31142, 31309, 31310, 31302, 31308, 31307, 31418, 31705, 31761, 31689, 31716, 31707, 31713, 31721, 31718, 31957, 31958, 32266, 32273, 32264, 32283, 32291, 32286, 32285, 32265, 32272, 32633, 32690, 32752, 32753, 32750, 32808, 33203, 33193, 33192, 33275, 33288, 33368, 33369, 34122, 34137, 34120, 34152, 34153, 34115, 34121, 34157, 34154, 34142, 34691, 34719, 34718, 34722, 34701, 34913, 35114, 35122, 35109, 35115, 35105, 35242, 35238, 35558, 35578, 35563, 35569, 35584, 35548, 35559, 35566, 35582, 35585, 35586, 35575, 35565, 35571, 35574, 35580, 35947, 35949, 35987, 36084, 36420, 36401, 36404, 36418, 36409, 36405, 36667, 36655, 36664, 36659, 36776, 36774, 36981, 36980, 36984, 36978, 36988, 36986, 37172, 37266, 37664, 37686, 37624, 37683, 37679, 37666, 37628, 37675, 37636, 37658, 37648, 37670, 37665, 37653, 37678, 37657, 38331, 38567, 38568, 38570, 38613, 38670, 38673, 38678, 38669, 38675, 38671, 38747, 38748, 38758, 38808, 38960, 38968, 38971, 38967, 38957, 38969, 38948, 39184, 39208, 39198, 39195, 39201, 39194, 39405, 39394, 39409, 39608, 39612, 39675, 39661, 39720, 39825, 40213, 40227, 40230, 40232, 40210, 40219, 40664, 40660, 40845, 40860, 20778, 20767, 20769, 20786, 21237, 22158, 22144, 22160, 22149, 22151, 22159, 22741, 22739, 22737, 22734, 23344, 23338, 23332, 23418, 23607, 23656, 23996, 23994, 23997, 23992, 24171, 24396, 24509, 25033, 25026, 25031, 25062, 25035, 25138, 25140, 25806, 25802, 25816, 25824, 25840, 25830, 25836, 25841, 25826, 25837, 25986, 25987, 26329, 26326, 27264, 27284, 27268, 27298, 27292, 27355, 27299, 27262, 27287, 27280, 27296, 27484, 27566, 27610, 27656, 28632, 28657, 28639, 28640, 28635, 28644, 28651, 28655, 28544, 28652, 28641, 28649, 28629, 28654, 28656, 29159, 29151, 29166, 29158, 29157, 29165, 29164, 29172, 29152, 29237, 29254, 29552, 29554, 29865, 29872, 29862, 29864, 30278, 30274, 30284, 30442, 30643, 30634, 30640, 30636, 30631, 30637, 30703, 30967, 30970, 30964, 30959, 30977, 31143, 31146, 31319, 31423, 31751, 31757, 31742, 31735, 31756, 31712, 31968, 31964, 31966, 31970, 31967, 31961, 31965, 32302, 32318, 32326, 32311, 32306, 32323, 32299, 32317, 32305, 32325, 32321, 32308, 32313, 32328, 32309, 32319, 32303, 32580, 32755, 32764, 32881, 32882, 32880, 32879, 32883, 33222, 33219, 33210, 33218, 33216, 33215, 33213, 33225, 33214, 33256, 33289, 33393, 34218, 34180, 34174, 34204, 34193, 34196, 34223, 34203, 34183, 34216, 34186, 34407, 34752, 34769, 34739, 34770, 34758, 34731, 34747, 34746, 34760, 34763, 35131, 35126, 35140, 35128, 35133, 35244, 35598, 35607, 35609, 35611, 35594, 35616, 35613, 35588, 35600, 35905, 35903, 35955, 36090, 36093, 36092, 36088, 36091, 36264, 36425, 36427, 36424, 36426, 36676, 36670, 36674, 36677, 36671, 36991, 36989, 36996, 36993, 36994, 36992, 37177, 37283, 37278, 37276, 37709, 37762, 37672, 37749, 37706, 37733, 37707, 37656, 37758, 37740, 37723, 37744, 37722, 37716, 38346, 38347, 38348, 38344, 38342, 38577, 38584, 38614, 38684, 38686, 38816, 38867, 38982, 39094, 39221, 39425, 39423, 39854, 39851, 39850, 39853, 40251, 40255, 40587, 40655, 40670, 40668, 40669, 40667, 40766, 40779, 21474, 22165, 22190, 22745, 22744, 23352, 24413, 25059, 25139, 25844, 25842, 25854, 25862, 25850, 25851, 25847, 26039, 26332, 26406, 27315, 27308, 27331, 27323, 27320, 27330, 27310, 27311, 27487, 27512, 27567, 28681, 28683, 28670, 28678, 28666, 28689, 28687, 29179, 29180, 29182, 29176, 29559, 29557, 29863, 29887, 29973, 30294, 30296, 30290, 30653, 30655, 30651, 30652, 30990, 31150, 31329, 31330, 31328, 31428, 31429, 31787, 31783, 31786, 31774, 31779, 31777, 31975, 32340, 32341, 32350, 32346, 32353, 32338, 32345, 32584, 32761, 32763, 32887, 32886, 33229, 33231, 33290, 34255, 34217, 34253, 34256, 34249, 34224, 34234, 34233, 34214, 34799, 34796, 34802, 34784, 35206, 35250, 35316, 35624, 35641, 35628, 35627, 35920, 36101, 36441, 36451, 36454, 36452, 36447, 36437, 36544, 36681, 36685, 36999, 36995, 37e3, 37291, 37292, 37328, 37780, 37770, 37782, 37794, 37811, 37806, 37804, 37808, 37784, 37786, 37783, 38356, 38358, 38352, 38357, 38626, 38620, 38617, 38619, 38622, 38692, 38819, 38822, 38829, 38905, 38989, 38991, 38988, 38990, 38995, 39098, 39230, 39231, 39229, 39214, 39333, 39438, 39617, 39683, 39686, 39759, 39758, 39757, 39882, 39881, 39933, 39880, 39872, 40273, 40285, 40288, 40672, 40725, 40748, 20787, 22181, 22750, 22751, 22754, 23541, 40848, 24300, 25074, 25079, 25078, 25077, 25856, 25871, 26336, 26333, 27365, 27357, 27354, 27347, 28699, 28703, 28712, 28698, 28701, 28693, 28696, 29190, 29197, 29272, 29346, 29560, 29562, 29885, 29898, 29923, 30087, 30086, 30303, 30305, 30663, 31001, 31153, 31339, 31337, 31806, 31807, 31800, 31805, 31799, 31808, 32363, 32365, 32377, 32361, 32362, 32645, 32371, 32694, 32697, 32696, 33240, 34281, 34269, 34282, 34261, 34276, 34277, 34295, 34811, 34821, 34829, 34809, 34814, 35168, 35167, 35158, 35166, 35649, 35676, 35672, 35657, 35674, 35662, 35663, 35654, 35673, 36104, 36106, 36476, 36466, 36487, 36470, 36460, 36474, 36468, 36692, 36686, 36781, 37002, 37003, 37297, 37294, 37857, 37841, 37855, 37827, 37832, 37852, 37853, 37846, 37858, 37837, 37848, 37860, 37847, 37864, 38364, 38580, 38627, 38698, 38695, 38753, 38876, 38907, 39006, 39e3, 39003, 39100, 39237, 39241, 39446, 39449, 39693, 39912, 39911, 39894, 39899, 40329, 40289, 40306, 40298, 40300, 40594, 40599, 40595, 40628, 21240, 22184, 22199, 22198, 22196, 22204, 22756, 23360, 23363, 23421, 23542, 24009, 25080, 25082, 25880, 25876, 25881, 26342, 26407, 27372, 28734, 28720, 28722, 29200, 29563, 29903, 30306, 30309, 31014, 31018, 31020, 31019, 31431, 31478, 31820, 31811, 31821, 31983, 31984, 36782, 32381, 32380, 32386, 32588, 32768, 33242, 33382, 34299, 34297, 34321, 34298, 34310, 34315, 34311, 34314, 34836, 34837, 35172, 35258, 35320, 35696, 35692, 35686, 35695, 35679, 35691, 36111, 36109, 36489, 36481, 36485, 36482, 37300, 37323, 37912, 37891, 37885, 38369, 38704, 39108, 39250, 39249, 39336, 39467, 39472, 39479, 39477, 39955, 39949, 40569, 40629, 40680, 40751, 40799, 40803, 40801, 20791, 20792, 22209, 22208, 22210, 22804, 23660, 24013, 25084, 25086, 25885, 25884, 26005, 26345, 27387, 27396, 27386, 27570, 28748, 29211, 29351, 29910, 29908, 30313, 30675, 31824, 32399, 32396, 32700, 34327, 34349, 34330, 34851, 34850, 34849, 34847, 35178, 35180, 35261, 35700, 35703, 35709, 36115, 36490, 36493, 36491, 36703, 36783, 37306, 37934, 37939, 37941, 37946, 37944, 37938, 37931, 38370, 38712, 38713, 38706, 38911, 39015, 39013, 39255, 39493, 39491, 39488, 39486, 39631, 39764, 39761, 39981, 39973, 40367, 40372, 40386, 40376, 40605, 40687, 40729, 40796, 40806, 40807, 20796, 20795, 22216, 22218, 22217, 23423, 24020, 24018, 24398, 25087, 25892, 27402, 27489, 28753, 28760, 29568, 29924, 30090, 30318, 30316, 31155, 31840, 31839, 32894, 32893, 33247, 35186, 35183, 35324, 35712, 36118, 36119, 36497, 36499, 36705, 37192, 37956, 37969, 37970, 38717, 38718, 38851, 38849, 39019, 39253, 39509, 39501, 39634, 39706, 40009, 39985, 39998, 39995, 40403, 40407, 40756, 40812, 40810, 40852, 22220, 24022, 25088, 25891, 25899, 25898, 26348, 27408, 29914, 31434, 31844, 31843, 31845, 32403, 32406, 32404, 33250, 34360, 34367, 34865, 35722, 37008, 37007, 37987, 37984, 37988, 38760, 39023, 39260, 39514, 39515, 39511, 39635, 39636, 39633, 40020, 40023, 40022, 40421, 40607, 40692, 22225, 22761, 25900, 28766, 30321, 30322, 30679, 32592, 32648, 34870, 34873, 34914, 35731, 35730, 35734, 33399, 36123, 37312, 37994, 38722, 38728, 38724, 38854, 39024, 39519, 39714, 39768, 40031, 40441, 40442, 40572, 40573, 40711, 40823, 40818, 24307, 27414, 28771, 31852, 31854, 34875, 35264, 36513, 37313, 38002, 38e3, 39025, 39262, 39638, 39715, 40652, 28772, 30682, 35738, 38007, 38857, 39522, 39525, 32412, 35740, 36522, 37317, 38013, 38014, 38012, 40055, 40056, 40695, 35924, 38015, 40474, 29224, 39530, 39729, 40475, 40478, 31858, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 20022, 20031, 20101, 20128, 20866, 20886, 20907, 21241, 21304, 21353, 21430, 22794, 23424, 24027, 12083, 24191, 24308, 24400, 24417, 25908, 26080, 30098, 30326, 36789, 38582, 168, 710, 12541, 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, 65339, 65341, 10045, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 8679, 8632, 8633, 12751, 131276, 20058, 131210, 20994, 17553, 40880, 20872, 40881, 161287, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 65506, 65508, 65287, 65282, 12849, 8470, 8481, 12443, 12444, 11904, 11908, 11910, 11911, 11912, 11914, 11916, 11917, 11925, 11932, 11933, 11941, 11943, 11946, 11948, 11950, 11958, 11964, 11966, 11974, 11978, 11980, 11981, 11983, 11990, 11991, 11998, 12003, null, null, null, 643, 592, 603, 596, 629, 339, 248, 331, 650, 618, 20034, 20060, 20981, 21274, 21378, 19975, 19980, 20039, 20109, 22231, 64012, 23662, 24435, 19983, 20871, 19982, 20014, 20115, 20162, 20169, 20168, 20888, 21244, 21356, 21433, 22304, 22787, 22828, 23568, 24063, 26081, 27571, 27596, 27668, 29247, 20017, 20028, 20200, 20188, 20201, 20193, 20189, 20186, 21004, 21276, 21324, 22306, 22307, 22807, 22831, 23425, 23428, 23570, 23611, 23668, 23667, 24068, 24192, 24194, 24521, 25097, 25168, 27669, 27702, 27715, 27711, 27707, 29358, 29360, 29578, 31160, 32906, 38430, 20238, 20248, 20268, 20213, 20244, 20209, 20224, 20215, 20232, 20253, 20226, 20229, 20258, 20243, 20228, 20212, 20242, 20913, 21011, 21001, 21008, 21158, 21282, 21279, 21325, 21386, 21511, 22241, 22239, 22318, 22314, 22324, 22844, 22912, 22908, 22917, 22907, 22910, 22903, 22911, 23382, 23573, 23589, 23676, 23674, 23675, 23678, 24031, 24181, 24196, 24322, 24346, 24436, 24533, 24532, 24527, 25180, 25182, 25188, 25185, 25190, 25186, 25177, 25184, 25178, 25189, 26095, 26094, 26430, 26425, 26424, 26427, 26426, 26431, 26428, 26419, 27672, 27718, 27730, 27740, 27727, 27722, 27732, 27723, 27724, 28785, 29278, 29364, 29365, 29582, 29994, 30335, 31349, 32593, 33400, 33404, 33408, 33405, 33407, 34381, 35198, 37017, 37015, 37016, 37019, 37012, 38434, 38436, 38432, 38435, 20310, 20283, 20322, 20297, 20307, 20324, 20286, 20327, 20306, 20319, 20289, 20312, 20269, 20275, 20287, 20321, 20879, 20921, 21020, 21022, 21025, 21165, 21166, 21257, 21347, 21362, 21390, 21391, 21552, 21559, 21546, 21588, 21573, 21529, 21532, 21541, 21528, 21565, 21583, 21569, 21544, 21540, 21575, 22254, 22247, 22245, 22337, 22341, 22348, 22345, 22347, 22354, 22790, 22848, 22950, 22936, 22944, 22935, 22926, 22946, 22928, 22927, 22951, 22945, 23438, 23442, 23592, 23594, 23693, 23695, 23688, 23691, 23689, 23698, 23690, 23686, 23699, 23701, 24032, 24074, 24078, 24203, 24201, 24204, 24200, 24205, 24325, 24349, 24440, 24438, 24530, 24529, 24528, 24557, 24552, 24558, 24563, 24545, 24548, 24547, 24570, 24559, 24567, 24571, 24576, 24564, 25146, 25219, 25228, 25230, 25231, 25236, 25223, 25201, 25211, 25210, 25200, 25217, 25224, 25207, 25213, 25202, 25204, 25911, 26096, 26100, 26099, 26098, 26101, 26437, 26439, 26457, 26453, 26444, 26440, 26461, 26445, 26458, 26443, 27600, 27673, 27674, 27768, 27751, 27755, 27780, 27787, 27791, 27761, 27759, 27753, 27802, 27757, 27783, 27797, 27804, 27750, 27763, 27749, 27771, 27790, 28788, 28794, 29283, 29375, 29373, 29379, 29382, 29377, 29370, 29381, 29589, 29591, 29587, 29588, 29586, 30010, 30009, 30100, 30101, 30337, 31037, 32820, 32917, 32921, 32912, 32914, 32924, 33424, 33423, 33413, 33422, 33425, 33427, 33418, 33411, 33412, 35960, 36809, 36799, 37023, 37025, 37029, 37022, 37031, 37024, 38448, 38440, 38447, 38445, 20019, 20376, 20348, 20357, 20349, 20352, 20359, 20342, 20340, 20361, 20356, 20343, 20300, 20375, 20330, 20378, 20345, 20353, 20344, 20368, 20380, 20372, 20382, 20370, 20354, 20373, 20331, 20334, 20894, 20924, 20926, 21045, 21042, 21043, 21062, 21041, 21180, 21258, 21259, 21308, 21394, 21396, 21639, 21631, 21633, 21649, 21634, 21640, 21611, 21626, 21630, 21605, 21612, 21620, 21606, 21645, 21615, 21601, 21600, 21656, 21603, 21607, 21604, 22263, 22265, 22383, 22386, 22381, 22379, 22385, 22384, 22390, 22400, 22389, 22395, 22387, 22388, 22370, 22376, 22397, 22796, 22853, 22965, 22970, 22991, 22990, 22962, 22988, 22977, 22966, 22972, 22979, 22998, 22961, 22973, 22976, 22984, 22964, 22983, 23394, 23397, 23443, 23445, 23620, 23623, 23726, 23716, 23712, 23733, 23727, 23720, 23724, 23711, 23715, 23725, 23714, 23722, 23719, 23709, 23717, 23734, 23728, 23718, 24087, 24084, 24089, 24360, 24354, 24355, 24356, 24404, 24450, 24446, 24445, 24542, 24549, 24621, 24614, 24601, 24626, 24587, 24628, 24586, 24599, 24627, 24602, 24606, 24620, 24610, 24589, 24592, 24622, 24595, 24593, 24588, 24585, 24604, 25108, 25149, 25261, 25268, 25297, 25278, 25258, 25270, 25290, 25262, 25267, 25263, 25275, 25257, 25264, 25272, 25917, 26024, 26043, 26121, 26108, 26116, 26130, 26120, 26107, 26115, 26123, 26125, 26117, 26109, 26129, 26128, 26358, 26378, 26501, 26476, 26510, 26514, 26486, 26491, 26520, 26502, 26500, 26484, 26509, 26508, 26490, 26527, 26513, 26521, 26499, 26493, 26497, 26488, 26489, 26516, 27429, 27520, 27518, 27614, 27677, 27795, 27884, 27883, 27886, 27865, 27830, 27860, 27821, 27879, 27831, 27856, 27842, 27834, 27843, 27846, 27885, 27890, 27858, 27869, 27828, 27786, 27805, 27776, 27870, 27840, 27952, 27853, 27847, 27824, 27897, 27855, 27881, 27857, 28820, 28824, 28805, 28819, 28806, 28804, 28817, 28822, 28802, 28826, 28803, 29290, 29398, 29387, 29400, 29385, 29404, 29394, 29396, 29402, 29388, 29393, 29604, 29601, 29613, 29606, 29602, 29600, 29612, 29597, 29917, 29928, 30015, 30016, 30014, 30092, 30104, 30383, 30451, 30449, 30448, 30453, 30712, 30716, 30713, 30715, 30714, 30711, 31042, 31039, 31173, 31352, 31355, 31483, 31861, 31997, 32821, 32911, 32942, 32931, 32952, 32949, 32941, 33312, 33440, 33472, 33451, 33434, 33432, 33435, 33461, 33447, 33454, 33468, 33438, 33466, 33460, 33448, 33441, 33449, 33474, 33444, 33475, 33462, 33442, 34416, 34415, 34413, 34414, 35926, 36818, 36811, 36819, 36813, 36822, 36821, 36823, 37042, 37044, 37039, 37043, 37040, 38457, 38461, 38460, 38458, 38467, 20429, 20421, 20435, 20402, 20425, 20427, 20417, 20436, 20444, 20441, 20411, 20403, 20443, 20423, 20438, 20410, 20416, 20409, 20460, 21060, 21065, 21184, 21186, 21309, 21372, 21399, 21398, 21401, 21400, 21690, 21665, 21677, 21669, 21711, 21699, 33549, 21687, 21678, 21718, 21686, 21701, 21702, 21664, 21616, 21692, 21666, 21694, 21618, 21726, 21680, 22453, 22430, 22431, 22436, 22412, 22423, 22429, 22427, 22420, 22424, 22415, 22425, 22437, 22426, 22421, 22772, 22797, 22867, 23009, 23006, 23022, 23040, 23025, 23005, 23034, 23037, 23036, 23030, 23012, 23026, 23031, 23003, 23017, 23027, 23029, 23008, 23038, 23028, 23021, 23464, 23628, 23760, 23768, 23756, 23767, 23755, 23771, 23774, 23770, 23753, 23751, 23754, 23766, 23763, 23764, 23759, 23752, 23750, 23758, 23775, 23800, 24057, 24097, 24098, 24099, 24096, 24100, 24240, 24228, 24226, 24219, 24227, 24229, 24327, 24366, 24406, 24454, 24631, 24633, 24660, 24690, 24670, 24645, 24659, 24647, 24649, 24667, 24652, 24640, 24642, 24671, 24612, 24644, 24664, 24678, 24686, 25154, 25155, 25295, 25357, 25355, 25333, 25358, 25347, 25323, 25337, 25359, 25356, 25336, 25334, 25344, 25363, 25364, 25338, 25365, 25339, 25328, 25921, 25923, 26026, 26047, 26166, 26145, 26162, 26165, 26140, 26150, 26146, 26163, 26155, 26170, 26141, 26164, 26169, 26158, 26383, 26384, 26561, 26610, 26568, 26554, 26588, 26555, 26616, 26584, 26560, 26551, 26565, 26603, 26596, 26591, 26549, 26573, 26547, 26615, 26614, 26606, 26595, 26562, 26553, 26574, 26599, 26608, 26546, 26620, 26566, 26605, 26572, 26542, 26598, 26587, 26618, 26569, 26570, 26563, 26602, 26571, 27432, 27522, 27524, 27574, 27606, 27608, 27616, 27680, 27681, 27944, 27956, 27949, 27935, 27964, 27967, 27922, 27914, 27866, 27955, 27908, 27929, 27962, 27930, 27921, 27904, 27933, 27970, 27905, 27928, 27959, 27907, 27919, 27968, 27911, 27936, 27948, 27912, 27938, 27913, 27920, 28855, 28831, 28862, 28849, 28848, 28833, 28852, 28853, 28841, 29249, 29257, 29258, 29292, 29296, 29299, 29294, 29386, 29412, 29416, 29419, 29407, 29418, 29414, 29411, 29573, 29644, 29634, 29640, 29637, 29625, 29622, 29621, 29620, 29675, 29631, 29639, 29630, 29635, 29638, 29624, 29643, 29932, 29934, 29998, 30023, 30024, 30119, 30122, 30329, 30404, 30472, 30467, 30468, 30469, 30474, 30455, 30459, 30458, 30695, 30696, 30726, 30737, 30738, 30725, 30736, 30735, 30734, 30729, 30723, 30739, 31050, 31052, 31051, 31045, 31044, 31189, 31181, 31183, 31190, 31182, 31360, 31358, 31441, 31488, 31489, 31866, 31864, 31865, 31871, 31872, 31873, 32003, 32008, 32001, 32600, 32657, 32653, 32702, 32775, 32782, 32783, 32788, 32823, 32984, 32967, 32992, 32977, 32968, 32962, 32976, 32965, 32995, 32985, 32988, 32970, 32981, 32969, 32975, 32983, 32998, 32973, 33279, 33313, 33428, 33497, 33534, 33529, 33543, 33512, 33536, 33493, 33594, 33515, 33494, 33524, 33516, 33505, 33522, 33525, 33548, 33531, 33526, 33520, 33514, 33508, 33504, 33530, 33523, 33517, 34423, 34420, 34428, 34419, 34881, 34894, 34919, 34922, 34921, 35283, 35332, 35335, 36210, 36835, 36833, 36846, 36832, 37105, 37053, 37055, 37077, 37061, 37054, 37063, 37067, 37064, 37332, 37331, 38484, 38479, 38481, 38483, 38474, 38478, 20510, 20485, 20487, 20499, 20514, 20528, 20507, 20469, 20468, 20531, 20535, 20524, 20470, 20471, 20503, 20508, 20512, 20519, 20533, 20527, 20529, 20494, 20826, 20884, 20883, 20938, 20932, 20933, 20936, 20942, 21089, 21082, 21074, 21086, 21087, 21077, 21090, 21197, 21262, 21406, 21798, 21730, 21783, 21778, 21735, 21747, 21732, 21786, 21759, 21764, 21768, 21739, 21777, 21765, 21745, 21770, 21755, 21751, 21752, 21728, 21774, 21763, 21771, 22273, 22274, 22476, 22578, 22485, 22482, 22458, 22470, 22461, 22460, 22456, 22454, 22463, 22471, 22480, 22457, 22465, 22798, 22858, 23065, 23062, 23085, 23086, 23061, 23055, 23063, 23050, 23070, 23091, 23404, 23463, 23469, 23468, 23555, 23638, 23636, 23788, 23807, 23790, 23793, 23799, 23808, 23801, 24105, 24104, 24232, 24238, 24234, 24236, 24371, 24368, 24423, 24669, 24666, 24679, 24641, 24738, 24712, 24704, 24722, 24705, 24733, 24707, 24725, 24731, 24727, 24711, 24732, 24718, 25113, 25158, 25330, 25360, 25430, 25388, 25412, 25413, 25398, 25411, 25572, 25401, 25419, 25418, 25404, 25385, 25409, 25396, 25432, 25428, 25433, 25389, 25415, 25395, 25434, 25425, 25400, 25431, 25408, 25416, 25930, 25926, 26054, 26051, 26052, 26050, 26186, 26207, 26183, 26193, 26386, 26387, 26655, 26650, 26697, 26674, 26675, 26683, 26699, 26703, 26646, 26673, 26652, 26677, 26667, 26669, 26671, 26702, 26692, 26676, 26653, 26642, 26644, 26662, 26664, 26670, 26701, 26682, 26661, 26656, 27436, 27439, 27437, 27441, 27444, 27501, 32898, 27528, 27622, 27620, 27624, 27619, 27618, 27623, 27685, 28026, 28003, 28004, 28022, 27917, 28001, 28050, 27992, 28002, 28013, 28015, 28049, 28045, 28143, 28031, 28038, 27998, 28007, 28e3, 28055, 28016, 28028, 27999, 28034, 28056, 27951, 28008, 28043, 28030, 28032, 28036, 27926, 28035, 28027, 28029, 28021, 28048, 28892, 28883, 28881, 28893, 28875, 32569, 28898, 28887, 28882, 28894, 28896, 28884, 28877, 28869, 28870, 28871, 28890, 28878, 28897, 29250, 29304, 29303, 29302, 29440, 29434, 29428, 29438, 29430, 29427, 29435, 29441, 29651, 29657, 29669, 29654, 29628, 29671, 29667, 29673, 29660, 29650, 29659, 29652, 29661, 29658, 29655, 29656, 29672, 29918, 29919, 29940, 29941, 29985, 30043, 30047, 30128, 30145, 30139, 30148, 30144, 30143, 30134, 30138, 30346, 30409, 30493, 30491, 30480, 30483, 30482, 30499, 30481, 30485, 30489, 30490, 30498, 30503, 30755, 30764, 30754, 30773, 30767, 30760, 30766, 30763, 30753, 30761, 30771, 30762, 30769, 31060, 31067, 31055, 31068, 31059, 31058, 31057, 31211, 31212, 31200, 31214, 31213, 31210, 31196, 31198, 31197, 31366, 31369, 31365, 31371, 31372, 31370, 31367, 31448, 31504, 31492, 31507, 31493, 31503, 31496, 31498, 31502, 31497, 31506, 31876, 31889, 31882, 31884, 31880, 31885, 31877, 32030, 32029, 32017, 32014, 32024, 32022, 32019, 32031, 32018, 32015, 32012, 32604, 32609, 32606, 32608, 32605, 32603, 32662, 32658, 32707, 32706, 32704, 32790, 32830, 32825, 33018, 33010, 33017, 33013, 33025, 33019, 33024, 33281, 33327, 33317, 33587, 33581, 33604, 33561, 33617, 33573, 33622, 33599, 33601, 33574, 33564, 33570, 33602, 33614, 33563, 33578, 33544, 33596, 33613, 33558, 33572, 33568, 33591, 33583, 33577, 33607, 33605, 33612, 33619, 33566, 33580, 33611, 33575, 33608, 34387, 34386, 34466, 34472, 34454, 34445, 34449, 34462, 34439, 34455, 34438, 34443, 34458, 34437, 34469, 34457, 34465, 34471, 34453, 34456, 34446, 34461, 34448, 34452, 34883, 34884, 34925, 34933, 34934, 34930, 34944, 34929, 34943, 34927, 34947, 34942, 34932, 34940, 35346, 35911, 35927, 35963, 36004, 36003, 36214, 36216, 36277, 36279, 36278, 36561, 36563, 36862, 36853, 36866, 36863, 36859, 36868, 36860, 36854, 37078, 37088, 37081, 37082, 37091, 37087, 37093, 37080, 37083, 37079, 37084, 37092, 37200, 37198, 37199, 37333, 37346, 37338, 38492, 38495, 38588, 39139, 39647, 39727, 20095, 20592, 20586, 20577, 20574, 20576, 20563, 20555, 20573, 20594, 20552, 20557, 20545, 20571, 20554, 20578, 20501, 20549, 20575, 20585, 20587, 20579, 20580, 20550, 20544, 20590, 20595, 20567, 20561, 20944, 21099, 21101, 21100, 21102, 21206, 21203, 21293, 21404, 21877, 21878, 21820, 21837, 21840, 21812, 21802, 21841, 21858, 21814, 21813, 21808, 21842, 21829, 21772, 21810, 21861, 21838, 21817, 21832, 21805, 21819, 21824, 21835, 22282, 22279, 22523, 22548, 22498, 22518, 22492, 22516, 22528, 22509, 22525, 22536, 22520, 22539, 22515, 22479, 22535, 22510, 22499, 22514, 22501, 22508, 22497, 22542, 22524, 22544, 22503, 22529, 22540, 22513, 22505, 22512, 22541, 22532, 22876, 23136, 23128, 23125, 23143, 23134, 23096, 23093, 23149, 23120, 23135, 23141, 23148, 23123, 23140, 23127, 23107, 23133, 23122, 23108, 23131, 23112, 23182, 23102, 23117, 23097, 23116, 23152, 23145, 23111, 23121, 23126, 23106, 23132, 23410, 23406, 23489, 23488, 23641, 23838, 23819, 23837, 23834, 23840, 23820, 23848, 23821, 23846, 23845, 23823, 23856, 23826, 23843, 23839, 23854, 24126, 24116, 24241, 24244, 24249, 24242, 24243, 24374, 24376, 24475, 24470, 24479, 24714, 24720, 24710, 24766, 24752, 24762, 24787, 24788, 24783, 24804, 24793, 24797, 24776, 24753, 24795, 24759, 24778, 24767, 24771, 24781, 24768, 25394, 25445, 25482, 25474, 25469, 25533, 25502, 25517, 25501, 25495, 25515, 25486, 25455, 25479, 25488, 25454, 25519, 25461, 25500, 25453, 25518, 25468, 25508, 25403, 25503, 25464, 25477, 25473, 25489, 25485, 25456, 25939, 26061, 26213, 26209, 26203, 26201, 26204, 26210, 26392, 26745, 26759, 26768, 26780, 26733, 26734, 26798, 26795, 26966, 26735, 26787, 26796, 26793, 26741, 26740, 26802, 26767, 26743, 26770, 26748, 26731, 26738, 26794, 26752, 26737, 26750, 26779, 26774, 26763, 26784, 26761, 26788, 26744, 26747, 26769, 26764, 26762, 26749, 27446, 27443, 27447, 27448, 27537, 27535, 27533, 27534, 27532, 27690, 28096, 28075, 28084, 28083, 28276, 28076, 28137, 28130, 28087, 28150, 28116, 28160, 28104, 28128, 28127, 28118, 28094, 28133, 28124, 28125, 28123, 28148, 28106, 28093, 28141, 28144, 28090, 28117, 28098, 28111, 28105, 28112, 28146, 28115, 28157, 28119, 28109, 28131, 28091, 28922, 28941, 28919, 28951, 28916, 28940, 28912, 28932, 28915, 28944, 28924, 28927, 28934, 28947, 28928, 28920, 28918, 28939, 28930, 28942, 29310, 29307, 29308, 29311, 29469, 29463, 29447, 29457, 29464, 29450, 29448, 29439, 29455, 29470, 29576, 29686, 29688, 29685, 29700, 29697, 29693, 29703, 29696, 29690, 29692, 29695, 29708, 29707, 29684, 29704, 30052, 30051, 30158, 30162, 30159, 30155, 30156, 30161, 30160, 30351, 30345, 30419, 30521, 30511, 30509, 30513, 30514, 30516, 30515, 30525, 30501, 30523, 30517, 30792, 30802, 30793, 30797, 30794, 30796, 30758, 30789, 30800, 31076, 31079, 31081, 31082, 31075, 31083, 31073, 31163, 31226, 31224, 31222, 31223, 31375, 31380, 31376, 31541, 31559, 31540, 31525, 31536, 31522, 31524, 31539, 31512, 31530, 31517, 31537, 31531, 31533, 31535, 31538, 31544, 31514, 31523, 31892, 31896, 31894, 31907, 32053, 32061, 32056, 32054, 32058, 32069, 32044, 32041, 32065, 32071, 32062, 32063, 32074, 32059, 32040, 32611, 32661, 32668, 32669, 32667, 32714, 32715, 32717, 32720, 32721, 32711, 32719, 32713, 32799, 32798, 32795, 32839, 32835, 32840, 33048, 33061, 33049, 33051, 33069, 33055, 33068, 33054, 33057, 33045, 33063, 33053, 33058, 33297, 33336, 33331, 33338, 33332, 33330, 33396, 33680, 33699, 33704, 33677, 33658, 33651, 33700, 33652, 33679, 33665, 33685, 33689, 33653, 33684, 33705, 33661, 33667, 33676, 33693, 33691, 33706, 33675, 33662, 33701, 33711, 33672, 33687, 33712, 33663, 33702, 33671, 33710, 33654, 33690, 34393, 34390, 34495, 34487, 34498, 34497, 34501, 34490, 34480, 34504, 34489, 34483, 34488, 34508, 34484, 34491, 34492, 34499, 34493, 34494, 34898, 34953, 34965, 34984, 34978, 34986, 34970, 34961, 34977, 34975, 34968, 34983, 34969, 34971, 34967, 34980, 34988, 34956, 34963, 34958, 35202, 35286, 35289, 35285, 35376, 35367, 35372, 35358, 35897, 35899, 35932, 35933, 35965, 36005, 36221, 36219, 36217, 36284, 36290, 36281, 36287, 36289, 36568, 36574, 36573, 36572, 36567, 36576, 36577, 36900, 36875, 36881, 36892, 36876, 36897, 37103, 37098, 37104, 37108, 37106, 37107, 37076, 37099, 37100, 37097, 37206, 37208, 37210, 37203, 37205, 37356, 37364, 37361, 37363, 37368, 37348, 37369, 37354, 37355, 37367, 37352, 37358, 38266, 38278, 38280, 38524, 38509, 38507, 38513, 38511, 38591, 38762, 38916, 39141, 39319, 20635, 20629, 20628, 20638, 20619, 20643, 20611, 20620, 20622, 20637, 20584, 20636, 20626, 20610, 20615, 20831, 20948, 21266, 21265, 21412, 21415, 21905, 21928, 21925, 21933, 21879, 22085, 21922, 21907, 21896, 21903, 21941, 21889, 21923, 21906, 21924, 21885, 21900, 21926, 21887, 21909, 21921, 21902, 22284, 22569, 22583, 22553, 22558, 22567, 22563, 22568, 22517, 22600, 22565, 22556, 22555, 22579, 22591, 22582, 22574, 22585, 22584, 22573, 22572, 22587, 22881, 23215, 23188, 23199, 23162, 23202, 23198, 23160, 23206, 23164, 23205, 23212, 23189, 23214, 23095, 23172, 23178, 23191, 23171, 23179, 23209, 23163, 23165, 23180, 23196, 23183, 23187, 23197, 23530, 23501, 23499, 23508, 23505, 23498, 23502, 23564, 23600, 23863, 23875, 23915, 23873, 23883, 23871, 23861, 23889, 23886, 23893, 23859, 23866, 23890, 23869, 23857, 23897, 23874, 23865, 23881, 23864, 23868, 23858, 23862, 23872, 23877, 24132, 24129, 24408, 24486, 24485, 24491, 24777, 24761, 24780, 24802, 24782, 24772, 24852, 24818, 24842, 24854, 24837, 24821, 24851, 24824, 24828, 24830, 24769, 24835, 24856, 24861, 24848, 24831, 24836, 24843, 25162, 25492, 25521, 25520, 25550, 25573, 25576, 25583, 25539, 25757, 25587, 25546, 25568, 25590, 25557, 25586, 25589, 25697, 25567, 25534, 25565, 25564, 25540, 25560, 25555, 25538, 25543, 25548, 25547, 25544, 25584, 25559, 25561, 25906, 25959, 25962, 25956, 25948, 25960, 25957, 25996, 26013, 26014, 26030, 26064, 26066, 26236, 26220, 26235, 26240, 26225, 26233, 26218, 26226, 26369, 26892, 26835, 26884, 26844, 26922, 26860, 26858, 26865, 26895, 26838, 26871, 26859, 26852, 26870, 26899, 26896, 26867, 26849, 26887, 26828, 26888, 26992, 26804, 26897, 26863, 26822, 26900, 26872, 26832, 26877, 26876, 26856, 26891, 26890, 26903, 26830, 26824, 26845, 26846, 26854, 26868, 26833, 26886, 26836, 26857, 26901, 26917, 26823, 27449, 27451, 27455, 27452, 27540, 27543, 27545, 27541, 27581, 27632, 27634, 27635, 27696, 28156, 28230, 28231, 28191, 28233, 28296, 28220, 28221, 28229, 28258, 28203, 28223, 28225, 28253, 28275, 28188, 28211, 28235, 28224, 28241, 28219, 28163, 28206, 28254, 28264, 28252, 28257, 28209, 28200, 28256, 28273, 28267, 28217, 28194, 28208, 28243, 28261, 28199, 28280, 28260, 28279, 28245, 28281, 28242, 28262, 28213, 28214, 28250, 28960, 28958, 28975, 28923, 28974, 28977, 28963, 28965, 28962, 28978, 28959, 28968, 28986, 28955, 29259, 29274, 29320, 29321, 29318, 29317, 29323, 29458, 29451, 29488, 29474, 29489, 29491, 29479, 29490, 29485, 29478, 29475, 29493, 29452, 29742, 29740, 29744, 29739, 29718, 29722, 29729, 29741, 29745, 29732, 29731, 29725, 29737, 29728, 29746, 29947, 29999, 30063, 30060, 30183, 30170, 30177, 30182, 30173, 30175, 30180, 30167, 30357, 30354, 30426, 30534, 30535, 30532, 30541, 30533, 30538, 30542, 30539, 30540, 30686, 30700, 30816, 30820, 30821, 30812, 30829, 30833, 30826, 30830, 30832, 30825, 30824, 30814, 30818, 31092, 31091, 31090, 31088, 31234, 31242, 31235, 31244, 31236, 31385, 31462, 31460, 31562, 31547, 31556, 31560, 31564, 31566, 31552, 31576, 31557, 31906, 31902, 31912, 31905, 32088, 32111, 32099, 32083, 32086, 32103, 32106, 32079, 32109, 32092, 32107, 32082, 32084, 32105, 32081, 32095, 32078, 32574, 32575, 32613, 32614, 32674, 32672, 32673, 32727, 32849, 32847, 32848, 33022, 32980, 33091, 33098, 33106, 33103, 33095, 33085, 33101, 33082, 33254, 33262, 33271, 33272, 33273, 33284, 33340, 33341, 33343, 33397, 33595, 33743, 33785, 33827, 33728, 33768, 33810, 33767, 33764, 33788, 33782, 33808, 33734, 33736, 33771, 33763, 33727, 33793, 33757, 33765, 33752, 33791, 33761, 33739, 33742, 33750, 33781, 33737, 33801, 33807, 33758, 33809, 33798, 33730, 33779, 33749, 33786, 33735, 33745, 33770, 33811, 33731, 33772, 33774, 33732, 33787, 33751, 33762, 33819, 33755, 33790, 34520, 34530, 34534, 34515, 34531, 34522, 34538, 34525, 34539, 34524, 34540, 34537, 34519, 34536, 34513, 34888, 34902, 34901, 35002, 35031, 35001, 35e3, 35008, 35006, 34998, 35004, 34999, 35005, 34994, 35073, 35017, 35221, 35224, 35223, 35293, 35290, 35291, 35406, 35405, 35385, 35417, 35392, 35415, 35416, 35396, 35397, 35410, 35400, 35409, 35402, 35404, 35407, 35935, 35969, 35968, 36026, 36030, 36016, 36025, 36021, 36228, 36224, 36233, 36312, 36307, 36301, 36295, 36310, 36316, 36303, 36309, 36313, 36296, 36311, 36293, 36591, 36599, 36602, 36601, 36582, 36590, 36581, 36597, 36583, 36584, 36598, 36587, 36593, 36588, 36596, 36585, 36909, 36916, 36911, 37126, 37164, 37124, 37119, 37116, 37128, 37113, 37115, 37121, 37120, 37127, 37125, 37123, 37217, 37220, 37215, 37218, 37216, 37377, 37386, 37413, 37379, 37402, 37414, 37391, 37388, 37376, 37394, 37375, 37373, 37382, 37380, 37415, 37378, 37404, 37412, 37401, 37399, 37381, 37398, 38267, 38285, 38284, 38288, 38535, 38526, 38536, 38537, 38531, 38528, 38594, 38600, 38595, 38641, 38640, 38764, 38768, 38766, 38919, 39081, 39147, 40166, 40697, 20099, 20100, 20150, 20669, 20671, 20678, 20654, 20676, 20682, 20660, 20680, 20674, 20656, 20673, 20666, 20657, 20683, 20681, 20662, 20664, 20951, 21114, 21112, 21115, 21116, 21955, 21979, 21964, 21968, 21963, 21962, 21981, 21952, 21972, 21956, 21993, 21951, 21970, 21901, 21967, 21973, 21986, 21974, 21960, 22002, 21965, 21977, 21954, 22292, 22611, 22632, 22628, 22607, 22605, 22601, 22639, 22613, 22606, 22621, 22617, 22629, 22619, 22589, 22627, 22641, 22780, 23239, 23236, 23243, 23226, 23224, 23217, 23221, 23216, 23231, 23240, 23227, 23238, 23223, 23232, 23242, 23220, 23222, 23245, 23225, 23184, 23510, 23512, 23513, 23583, 23603, 23921, 23907, 23882, 23909, 23922, 23916, 23902, 23912, 23911, 23906, 24048, 24143, 24142, 24138, 24141, 24139, 24261, 24268, 24262, 24267, 24263, 24384, 24495, 24493, 24823, 24905, 24906, 24875, 24901, 24886, 24882, 24878, 24902, 24879, 24911, 24873, 24896, 25120, 37224, 25123, 25125, 25124, 25541, 25585, 25579, 25616, 25618, 25609, 25632, 25636, 25651, 25667, 25631, 25621, 25624, 25657, 25655, 25634, 25635, 25612, 25638, 25648, 25640, 25665, 25653, 25647, 25610, 25626, 25664, 25637, 25639, 25611, 25575, 25627, 25646, 25633, 25614, 25967, 26002, 26067, 26246, 26252, 26261, 26256, 26251, 26250, 26265, 26260, 26232, 26400, 26982, 26975, 26936, 26958, 26978, 26993, 26943, 26949, 26986, 26937, 26946, 26967, 26969, 27002, 26952, 26953, 26933, 26988, 26931, 26941, 26981, 26864, 27e3, 26932, 26985, 26944, 26991, 26948, 26998, 26968, 26945, 26996, 26956, 26939, 26955, 26935, 26972, 26959, 26961, 26930, 26962, 26927, 27003, 26940, 27462, 27461, 27459, 27458, 27464, 27457, 27547, 64013, 27643, 27644, 27641, 27639, 27640, 28315, 28374, 28360, 28303, 28352, 28319, 28307, 28308, 28320, 28337, 28345, 28358, 28370, 28349, 28353, 28318, 28361, 28343, 28336, 28365, 28326, 28367, 28338, 28350, 28355, 28380, 28376, 28313, 28306, 28302, 28301, 28324, 28321, 28351, 28339, 28368, 28362, 28311, 28334, 28323, 28999, 29012, 29010, 29027, 29024, 28993, 29021, 29026, 29042, 29048, 29034, 29025, 28994, 29016, 28995, 29003, 29040, 29023, 29008, 29011, 28996, 29005, 29018, 29263, 29325, 29324, 29329, 29328, 29326, 29500, 29506, 29499, 29498, 29504, 29514, 29513, 29764, 29770, 29771, 29778, 29777, 29783, 29760, 29775, 29776, 29774, 29762, 29766, 29773, 29780, 29921, 29951, 29950, 29949, 29981, 30073, 30071, 27011, 30191, 30223, 30211, 30199, 30206, 30204, 30201, 30200, 30224, 30203, 30198, 30189, 30197, 30205, 30361, 30389, 30429, 30549, 30559, 30560, 30546, 30550, 30554, 30569, 30567, 30548, 30553, 30573, 30688, 30855, 30874, 30868, 30863, 30852, 30869, 30853, 30854, 30881, 30851, 30841, 30873, 30848, 30870, 30843, 31100, 31106, 31101, 31097, 31249, 31256, 31257, 31250, 31255, 31253, 31266, 31251, 31259, 31248, 31395, 31394, 31390, 31467, 31590, 31588, 31597, 31604, 31593, 31602, 31589, 31603, 31601, 31600, 31585, 31608, 31606, 31587, 31922, 31924, 31919, 32136, 32134, 32128, 32141, 32127, 32133, 32122, 32142, 32123, 32131, 32124, 32140, 32148, 32132, 32125, 32146, 32621, 32619, 32615, 32616, 32620, 32678, 32677, 32679, 32731, 32732, 32801, 33124, 33120, 33143, 33116, 33129, 33115, 33122, 33138, 26401, 33118, 33142, 33127, 33135, 33092, 33121, 33309, 33353, 33348, 33344, 33346, 33349, 34033, 33855, 33878, 33910, 33913, 33935, 33933, 33893, 33873, 33856, 33926, 33895, 33840, 33869, 33917, 33882, 33881, 33908, 33907, 33885, 34055, 33886, 33847, 33850, 33844, 33914, 33859, 33912, 33842, 33861, 33833, 33753, 33867, 33839, 33858, 33837, 33887, 33904, 33849, 33870, 33868, 33874, 33903, 33989, 33934, 33851, 33863, 33846, 33843, 33896, 33918, 33860, 33835, 33888, 33876, 33902, 33872, 34571, 34564, 34551, 34572, 34554, 34518, 34549, 34637, 34552, 34574, 34569, 34561, 34550, 34573, 34565, 35030, 35019, 35021, 35022, 35038, 35035, 35034, 35020, 35024, 35205, 35227, 35295, 35301, 35300, 35297, 35296, 35298, 35292, 35302, 35446, 35462, 35455, 35425, 35391, 35447, 35458, 35460, 35445, 35459, 35457, 35444, 35450, 35900, 35915, 35914, 35941, 35940, 35942, 35974, 35972, 35973, 36044, 36200, 36201, 36241, 36236, 36238, 36239, 36237, 36243, 36244, 36240, 36242, 36336, 36320, 36332, 36337, 36334, 36304, 36329, 36323, 36322, 36327, 36338, 36331, 36340, 36614, 36607, 36609, 36608, 36613, 36615, 36616, 36610, 36619, 36946, 36927, 36932, 36937, 36925, 37136, 37133, 37135, 37137, 37142, 37140, 37131, 37134, 37230, 37231, 37448, 37458, 37424, 37434, 37478, 37427, 37477, 37470, 37507, 37422, 37450, 37446, 37485, 37484, 37455, 37472, 37479, 37487, 37430, 37473, 37488, 37425, 37460, 37475, 37456, 37490, 37454, 37459, 37452, 37462, 37426, 38303, 38300, 38302, 38299, 38546, 38547, 38545, 38551, 38606, 38650, 38653, 38648, 38645, 38771, 38775, 38776, 38770, 38927, 38925, 38926, 39084, 39158, 39161, 39343, 39346, 39344, 39349, 39597, 39595, 39771, 40170, 40173, 40167, 40576, 40701, 20710, 20692, 20695, 20712, 20723, 20699, 20714, 20701, 20708, 20691, 20716, 20720, 20719, 20707, 20704, 20952, 21120, 21121, 21225, 21227, 21296, 21420, 22055, 22037, 22028, 22034, 22012, 22031, 22044, 22017, 22035, 22018, 22010, 22045, 22020, 22015, 22009, 22665, 22652, 22672, 22680, 22662, 22657, 22655, 22644, 22667, 22650, 22663, 22673, 22670, 22646, 22658, 22664, 22651, 22676, 22671, 22782, 22891, 23260, 23278, 23269, 23253, 23274, 23258, 23277, 23275, 23283, 23266, 23264, 23259, 23276, 23262, 23261, 23257, 23272, 23263, 23415, 23520, 23523, 23651, 23938, 23936, 23933, 23942, 23930, 23937, 23927, 23946, 23945, 23944, 23934, 23932, 23949, 23929, 23935, 24152, 24153, 24147, 24280, 24273, 24279, 24270, 24284, 24277, 24281, 24274, 24276, 24388, 24387, 24431, 24502, 24876, 24872, 24897, 24926, 24945, 24947, 24914, 24915, 24946, 24940, 24960, 24948, 24916, 24954, 24923, 24933, 24891, 24938, 24929, 24918, 25129, 25127, 25131, 25643, 25677, 25691, 25693, 25716, 25718, 25714, 25715, 25725, 25717, 25702, 25766, 25678, 25730, 25694, 25692, 25675, 25683, 25696, 25680, 25727, 25663, 25708, 25707, 25689, 25701, 25719, 25971, 26016, 26273, 26272, 26271, 26373, 26372, 26402, 27057, 27062, 27081, 27040, 27086, 27030, 27056, 27052, 27068, 27025, 27033, 27022, 27047, 27021, 27049, 27070, 27055, 27071, 27076, 27069, 27044, 27092, 27065, 27082, 27034, 27087, 27059, 27027, 27050, 27041, 27038, 27097, 27031, 27024, 27074, 27061, 27045, 27078, 27466, 27469, 27467, 27550, 27551, 27552, 27587, 27588, 27646, 28366, 28405, 28401, 28419, 28453, 28408, 28471, 28411, 28462, 28425, 28494, 28441, 28442, 28455, 28440, 28475, 28434, 28397, 28426, 28470, 28531, 28409, 28398, 28461, 28480, 28464, 28476, 28469, 28395, 28423, 28430, 28483, 28421, 28413, 28406, 28473, 28444, 28412, 28474, 28447, 28429, 28446, 28424, 28449, 29063, 29072, 29065, 29056, 29061, 29058, 29071, 29051, 29062, 29057, 29079, 29252, 29267, 29335, 29333, 29331, 29507, 29517, 29521, 29516, 29794, 29811, 29809, 29813, 29810, 29799, 29806, 29952, 29954, 29955, 30077, 30096, 30230, 30216, 30220, 30229, 30225, 30218, 30228, 30392, 30593, 30588, 30597, 30594, 30574, 30592, 30575, 30590, 30595, 30898, 30890, 30900, 30893, 30888, 30846, 30891, 30878, 30885, 30880, 30892, 30882, 30884, 31128, 31114, 31115, 31126, 31125, 31124, 31123, 31127, 31112, 31122, 31120, 31275, 31306, 31280, 31279, 31272, 31270, 31400, 31403, 31404, 31470, 31624, 31644, 31626, 31633, 31632, 31638, 31629, 31628, 31643, 31630, 31621, 31640, 21124, 31641, 31652, 31618, 31931, 31935, 31932, 31930, 32167, 32183, 32194, 32163, 32170, 32193, 32192, 32197, 32157, 32206, 32196, 32198, 32203, 32204, 32175, 32185, 32150, 32188, 32159, 32166, 32174, 32169, 32161, 32201, 32627, 32738, 32739, 32741, 32734, 32804, 32861, 32860, 33161, 33158, 33155, 33159, 33165, 33164, 33163, 33301, 33943, 33956, 33953, 33951, 33978, 33998, 33986, 33964, 33966, 33963, 33977, 33972, 33985, 33997, 33962, 33946, 33969, 34e3, 33949, 33959, 33979, 33954, 33940, 33991, 33996, 33947, 33961, 33967, 33960, 34006, 33944, 33974, 33999, 33952, 34007, 34004, 34002, 34011, 33968, 33937, 34401, 34611, 34595, 34600, 34667, 34624, 34606, 34590, 34593, 34585, 34587, 34627, 34604, 34625, 34622, 34630, 34592, 34610, 34602, 34605, 34620, 34578, 34618, 34609, 34613, 34626, 34598, 34599, 34616, 34596, 34586, 34608, 34577, 35063, 35047, 35057, 35058, 35066, 35070, 35054, 35068, 35062, 35067, 35056, 35052, 35051, 35229, 35233, 35231, 35230, 35305, 35307, 35304, 35499, 35481, 35467, 35474, 35471, 35478, 35901, 35944, 35945, 36053, 36047, 36055, 36246, 36361, 36354, 36351, 36365, 36349, 36362, 36355, 36359, 36358, 36357, 36350, 36352, 36356, 36624, 36625, 36622, 36621, 37155, 37148, 37152, 37154, 37151, 37149, 37146, 37156, 37153, 37147, 37242, 37234, 37241, 37235, 37541, 37540, 37494, 37531, 37498, 37536, 37524, 37546, 37517, 37542, 37530, 37547, 37497, 37527, 37503, 37539, 37614, 37518, 37506, 37525, 37538, 37501, 37512, 37537, 37514, 37510, 37516, 37529, 37543, 37502, 37511, 37545, 37533, 37515, 37421, 38558, 38561, 38655, 38744, 38781, 38778, 38782, 38787, 38784, 38786, 38779, 38788, 38785, 38783, 38862, 38861, 38934, 39085, 39086, 39170, 39168, 39175, 39325, 39324, 39363, 39353, 39355, 39354, 39362, 39357, 39367, 39601, 39651, 39655, 39742, 39743, 39776, 39777, 39775, 40177, 40178, 40181, 40615, 20735, 20739, 20784, 20728, 20742, 20743, 20726, 20734, 20747, 20748, 20733, 20746, 21131, 21132, 21233, 21231, 22088, 22082, 22092, 22069, 22081, 22090, 22089, 22086, 22104, 22106, 22080, 22067, 22077, 22060, 22078, 22072, 22058, 22074, 22298, 22699, 22685, 22705, 22688, 22691, 22703, 22700, 22693, 22689, 22783, 23295, 23284, 23293, 23287, 23286, 23299, 23288, 23298, 23289, 23297, 23303, 23301, 23311, 23655, 23961, 23959, 23967, 23954, 23970, 23955, 23957, 23968, 23964, 23969, 23962, 23966, 24169, 24157, 24160, 24156, 32243, 24283, 24286, 24289, 24393, 24498, 24971, 24963, 24953, 25009, 25008, 24994, 24969, 24987, 24979, 25007, 25005, 24991, 24978, 25002, 24993, 24973, 24934, 25011, 25133, 25710, 25712, 25750, 25760, 25733, 25751, 25756, 25743, 25739, 25738, 25740, 25763, 25759, 25704, 25777, 25752, 25974, 25978, 25977, 25979, 26034, 26035, 26293, 26288, 26281, 26290, 26295, 26282, 26287, 27136, 27142, 27159, 27109, 27128, 27157, 27121, 27108, 27168, 27135, 27116, 27106, 27163, 27165, 27134, 27175, 27122, 27118, 27156, 27127, 27111, 27200, 27144, 27110, 27131, 27149, 27132, 27115, 27145, 27140, 27160, 27173, 27151, 27126, 27174, 27143, 27124, 27158, 27473, 27557, 27555, 27554, 27558, 27649, 27648, 27647, 27650, 28481, 28454, 28542, 28551, 28614, 28562, 28557, 28553, 28556, 28514, 28495, 28549, 28506, 28566, 28534, 28524, 28546, 28501, 28530, 28498, 28496, 28503, 28564, 28563, 28509, 28416, 28513, 28523, 28541, 28519, 28560, 28499, 28555, 28521, 28543, 28565, 28515, 28535, 28522, 28539, 29106, 29103, 29083, 29104, 29088, 29082, 29097, 29109, 29085, 29093, 29086, 29092, 29089, 29098, 29084, 29095, 29107, 29336, 29338, 29528, 29522, 29534, 29535, 29536, 29533, 29531, 29537, 29530, 29529, 29538, 29831, 29833, 29834, 29830, 29825, 29821, 29829, 29832, 29820, 29817, 29960, 29959, 30078, 30245, 30238, 30233, 30237, 30236, 30243, 30234, 30248, 30235, 30364, 30365, 30366, 30363, 30605, 30607, 30601, 30600, 30925, 30907, 30927, 30924, 30929, 30926, 30932, 30920, 30915, 30916, 30921, 31130, 31137, 31136, 31132, 31138, 31131, 27510, 31289, 31410, 31412, 31411, 31671, 31691, 31678, 31660, 31694, 31663, 31673, 31690, 31669, 31941, 31944, 31948, 31947, 32247, 32219, 32234, 32231, 32215, 32225, 32259, 32250, 32230, 32246, 32241, 32240, 32238, 32223, 32630, 32684, 32688, 32685, 32749, 32747, 32746, 32748, 32742, 32744, 32868, 32871, 33187, 33183, 33182, 33173, 33186, 33177, 33175, 33302, 33359, 33363, 33362, 33360, 33358, 33361, 34084, 34107, 34063, 34048, 34089, 34062, 34057, 34061, 34079, 34058, 34087, 34076, 34043, 34091, 34042, 34056, 34060, 34036, 34090, 34034, 34069, 34039, 34027, 34035, 34044, 34066, 34026, 34025, 34070, 34046, 34088, 34077, 34094, 34050, 34045, 34078, 34038, 34097, 34086, 34023, 34024, 34032, 34031, 34041, 34072, 34080, 34096, 34059, 34073, 34095, 34402, 34646, 34659, 34660, 34679, 34785, 34675, 34648, 34644, 34651, 34642, 34657, 34650, 34641, 34654, 34669, 34666, 34640, 34638, 34655, 34653, 34671, 34668, 34682, 34670, 34652, 34661, 34639, 34683, 34677, 34658, 34663, 34665, 34906, 35077, 35084, 35092, 35083, 35095, 35096, 35097, 35078, 35094, 35089, 35086, 35081, 35234, 35236, 35235, 35309, 35312, 35308, 35535, 35526, 35512, 35539, 35537, 35540, 35541, 35515, 35543, 35518, 35520, 35525, 35544, 35523, 35514, 35517, 35545, 35902, 35917, 35983, 36069, 36063, 36057, 36072, 36058, 36061, 36071, 36256, 36252, 36257, 36251, 36384, 36387, 36389, 36388, 36398, 36373, 36379, 36374, 36369, 36377, 36390, 36391, 36372, 36370, 36376, 36371, 36380, 36375, 36378, 36652, 36644, 36632, 36634, 36640, 36643, 36630, 36631, 36979, 36976, 36975, 36967, 36971, 37167, 37163, 37161, 37162, 37170, 37158, 37166, 37253, 37254, 37258, 37249, 37250, 37252, 37248, 37584, 37571, 37572, 37568, 37593, 37558, 37583, 37617, 37599, 37592, 37609, 37591, 37597, 37580, 37615, 37570, 37608, 37578, 37576, 37582, 37606, 37581, 37589, 37577, 37600, 37598, 37607, 37585, 37587, 37557, 37601, 37574, 37556, 38268, 38316, 38315, 38318, 38320, 38564, 38562, 38611, 38661, 38664, 38658, 38746, 38794, 38798, 38792, 38864, 38863, 38942, 38941, 38950, 38953, 38952, 38944, 38939, 38951, 39090, 39176, 39162, 39185, 39188, 39190, 39191, 39189, 39388, 39373, 39375, 39379, 39380, 39374, 39369, 39382, 39384, 39371, 39383, 39372, 39603, 39660, 39659, 39667, 39666, 39665, 39750, 39747, 39783, 39796, 39793, 39782, 39798, 39797, 39792, 39784, 39780, 39788, 40188, 40186, 40189, 40191, 40183, 40199, 40192, 40185, 40187, 40200, 40197, 40196, 40579, 40659, 40719, 40720, 20764, 20755, 20759, 20762, 20753, 20958, 21300, 21473, 22128, 22112, 22126, 22131, 22118, 22115, 22125, 22130, 22110, 22135, 22300, 22299, 22728, 22717, 22729, 22719, 22714, 22722, 22716, 22726, 23319, 23321, 23323, 23329, 23316, 23315, 23312, 23318, 23336, 23322, 23328, 23326, 23535, 23980, 23985, 23977, 23975, 23989, 23984, 23982, 23978, 23976, 23986, 23981, 23983, 23988, 24167, 24168, 24166, 24175, 24297, 24295, 24294, 24296, 24293, 24395, 24508, 24989, 25e3, 24982, 25029, 25012, 25030, 25025, 25036, 25018, 25023, 25016, 24972, 25815, 25814, 25808, 25807, 25801, 25789, 25737, 25795, 25819, 25843, 25817, 25907, 25983, 25980, 26018, 26312, 26302, 26304, 26314, 26315, 26319, 26301, 26299, 26298, 26316, 26403, 27188, 27238, 27209, 27239, 27186, 27240, 27198, 27229, 27245, 27254, 27227, 27217, 27176, 27226, 27195, 27199, 27201, 27242, 27236, 27216, 27215, 27220, 27247, 27241, 27232, 27196, 27230, 27222, 27221, 27213, 27214, 27206, 27477, 27476, 27478, 27559, 27562, 27563, 27592, 27591, 27652, 27651, 27654, 28589, 28619, 28579, 28615, 28604, 28622, 28616, 28510, 28612, 28605, 28574, 28618, 28584, 28676, 28581, 28590, 28602, 28588, 28586, 28623, 28607, 28600, 28578, 28617, 28587, 28621, 28591, 28594, 28592, 29125, 29122, 29119, 29112, 29142, 29120, 29121, 29131, 29140, 29130, 29127, 29135, 29117, 29144, 29116, 29126, 29146, 29147, 29341, 29342, 29545, 29542, 29543, 29548, 29541, 29547, 29546, 29823, 29850, 29856, 29844, 29842, 29845, 29857, 29963, 30080, 30255, 30253, 30257, 30269, 30259, 30268, 30261, 30258, 30256, 30395, 30438, 30618, 30621, 30625, 30620, 30619, 30626, 30627, 30613, 30617, 30615, 30941, 30953, 30949, 30954, 30942, 30947, 30939, 30945, 30946, 30957, 30943, 30944, 31140, 31300, 31304, 31303, 31414, 31416, 31413, 31409, 31415, 31710, 31715, 31719, 31709, 31701, 31717, 31706, 31720, 31737, 31700, 31722, 31714, 31708, 31723, 31704, 31711, 31954, 31956, 31959, 31952, 31953, 32274, 32289, 32279, 32268, 32287, 32288, 32275, 32270, 32284, 32277, 32282, 32290, 32267, 32271, 32278, 32269, 32276, 32293, 32292, 32579, 32635, 32636, 32634, 32689, 32751, 32810, 32809, 32876, 33201, 33190, 33198, 33209, 33205, 33195, 33200, 33196, 33204, 33202, 33207, 33191, 33266, 33365, 33366, 33367, 34134, 34117, 34155, 34125, 34131, 34145, 34136, 34112, 34118, 34148, 34113, 34146, 34116, 34129, 34119, 34147, 34110, 34139, 34161, 34126, 34158, 34165, 34133, 34151, 34144, 34188, 34150, 34141, 34132, 34149, 34156, 34403, 34405, 34404, 34715, 34703, 34711, 34707, 34706, 34696, 34689, 34710, 34712, 34681, 34695, 34723, 34693, 34704, 34705, 34717, 34692, 34708, 34716, 34714, 34697, 35102, 35110, 35120, 35117, 35118, 35111, 35121, 35106, 35113, 35107, 35119, 35116, 35103, 35313, 35552, 35554, 35570, 35572, 35573, 35549, 35604, 35556, 35551, 35568, 35528, 35550, 35553, 35560, 35583, 35567, 35579, 35985, 35986, 35984, 36085, 36078, 36081, 36080, 36083, 36204, 36206, 36261, 36263, 36403, 36414, 36408, 36416, 36421, 36406, 36412, 36413, 36417, 36400, 36415, 36541, 36662, 36654, 36661, 36658, 36665, 36663, 36660, 36982, 36985, 36987, 36998, 37114, 37171, 37173, 37174, 37267, 37264, 37265, 37261, 37263, 37671, 37662, 37640, 37663, 37638, 37647, 37754, 37688, 37692, 37659, 37667, 37650, 37633, 37702, 37677, 37646, 37645, 37579, 37661, 37626, 37669, 37651, 37625, 37623, 37684, 37634, 37668, 37631, 37673, 37689, 37685, 37674, 37652, 37644, 37643, 37630, 37641, 37632, 37627, 37654, 38332, 38349, 38334, 38329, 38330, 38326, 38335, 38325, 38333, 38569, 38612, 38667, 38674, 38672, 38809, 38807, 38804, 38896, 38904, 38965, 38959, 38962, 39204, 39199, 39207, 39209, 39326, 39406, 39404, 39397, 39396, 39408, 39395, 39402, 39401, 39399, 39609, 39615, 39604, 39611, 39670, 39674, 39673, 39671, 39731, 39808, 39813, 39815, 39804, 39806, 39803, 39810, 39827, 39826, 39824, 39802, 39829, 39805, 39816, 40229, 40215, 40224, 40222, 40212, 40233, 40221, 40216, 40226, 40208, 40217, 40223, 40584, 40582, 40583, 40622, 40621, 40661, 40662, 40698, 40722, 40765, 20774, 20773, 20770, 20772, 20768, 20777, 21236, 22163, 22156, 22157, 22150, 22148, 22147, 22142, 22146, 22143, 22145, 22742, 22740, 22735, 22738, 23341, 23333, 23346, 23331, 23340, 23335, 23334, 23343, 23342, 23419, 23537, 23538, 23991, 24172, 24170, 24510, 24507, 25027, 25013, 25020, 25063, 25056, 25061, 25060, 25064, 25054, 25839, 25833, 25827, 25835, 25828, 25832, 25985, 25984, 26038, 26074, 26322, 27277, 27286, 27265, 27301, 27273, 27295, 27291, 27297, 27294, 27271, 27283, 27278, 27285, 27267, 27304, 27300, 27281, 27263, 27302, 27290, 27269, 27276, 27282, 27483, 27565, 27657, 28620, 28585, 28660, 28628, 28643, 28636, 28653, 28647, 28646, 28638, 28658, 28637, 28642, 28648, 29153, 29169, 29160, 29170, 29156, 29168, 29154, 29555, 29550, 29551, 29847, 29874, 29867, 29840, 29866, 29869, 29873, 29861, 29871, 29968, 29969, 29970, 29967, 30084, 30275, 30280, 30281, 30279, 30372, 30441, 30645, 30635, 30642, 30647, 30646, 30644, 30641, 30632, 30704, 30963, 30973, 30978, 30971, 30972, 30962, 30981, 30969, 30974, 30980, 31147, 31144, 31324, 31323, 31318, 31320, 31316, 31322, 31422, 31424, 31425, 31749, 31759, 31730, 31744, 31743, 31739, 31758, 31732, 31755, 31731, 31746, 31753, 31747, 31745, 31736, 31741, 31750, 31728, 31729, 31760, 31754, 31976, 32301, 32316, 32322, 32307, 38984, 32312, 32298, 32329, 32320, 32327, 32297, 32332, 32304, 32315, 32310, 32324, 32314, 32581, 32639, 32638, 32637, 32756, 32754, 32812, 33211, 33220, 33228, 33226, 33221, 33223, 33212, 33257, 33371, 33370, 33372, 34179, 34176, 34191, 34215, 34197, 34208, 34187, 34211, 34171, 34212, 34202, 34206, 34167, 34172, 34185, 34209, 34170, 34168, 34135, 34190, 34198, 34182, 34189, 34201, 34205, 34177, 34210, 34178, 34184, 34181, 34169, 34166, 34200, 34192, 34207, 34408, 34750, 34730, 34733, 34757, 34736, 34732, 34745, 34741, 34748, 34734, 34761, 34755, 34754, 34764, 34743, 34735, 34756, 34762, 34740, 34742, 34751, 34744, 34749, 34782, 34738, 35125, 35123, 35132, 35134, 35137, 35154, 35127, 35138, 35245, 35247, 35246, 35314, 35315, 35614, 35608, 35606, 35601, 35589, 35595, 35618, 35599, 35602, 35605, 35591, 35597, 35592, 35590, 35612, 35603, 35610, 35919, 35952, 35954, 35953, 35951, 35989, 35988, 36089, 36207, 36430, 36429, 36435, 36432, 36428, 36423, 36675, 36672, 36997, 36990, 37176, 37274, 37282, 37275, 37273, 37279, 37281, 37277, 37280, 37793, 37763, 37807, 37732, 37718, 37703, 37756, 37720, 37724, 37750, 37705, 37712, 37713, 37728, 37741, 37775, 37708, 37738, 37753, 37719, 37717, 37714, 37711, 37745, 37751, 37755, 37729, 37726, 37731, 37735, 37760, 37710, 37721, 38343, 38336, 38345, 38339, 38341, 38327, 38574, 38576, 38572, 38688, 38687, 38680, 38685, 38681, 38810, 38817, 38812, 38814, 38813, 38869, 38868, 38897, 38977, 38980, 38986, 38985, 38981, 38979, 39205, 39211, 39212, 39210, 39219, 39218, 39215, 39213, 39217, 39216, 39320, 39331, 39329, 39426, 39418, 39412, 39415, 39417, 39416, 39414, 39419, 39421, 39422, 39420, 39427, 39614, 39678, 39677, 39681, 39676, 39752, 39834, 39848, 39838, 39835, 39846, 39841, 39845, 39844, 39814, 39842, 39840, 39855, 40243, 40257, 40295, 40246, 40238, 40239, 40241, 40248, 40240, 40261, 40258, 40259, 40254, 40247, 40256, 40253, 32757, 40237, 40586, 40585, 40589, 40624, 40648, 40666, 40699, 40703, 40740, 40739, 40738, 40788, 40864, 20785, 20781, 20782, 22168, 22172, 22167, 22170, 22173, 22169, 22896, 23356, 23657, 23658, 24e3, 24173, 24174, 25048, 25055, 25069, 25070, 25073, 25066, 25072, 25067, 25046, 25065, 25855, 25860, 25853, 25848, 25857, 25859, 25852, 26004, 26075, 26330, 26331, 26328, 27333, 27321, 27325, 27361, 27334, 27322, 27318, 27319, 27335, 27316, 27309, 27486, 27593, 27659, 28679, 28684, 28685, 28673, 28677, 28692, 28686, 28671, 28672, 28667, 28710, 28668, 28663, 28682, 29185, 29183, 29177, 29187, 29181, 29558, 29880, 29888, 29877, 29889, 29886, 29878, 29883, 29890, 29972, 29971, 30300, 30308, 30297, 30288, 30291, 30295, 30298, 30374, 30397, 30444, 30658, 30650, 30975, 30988, 30995, 30996, 30985, 30992, 30994, 30993, 31149, 31148, 31327, 31772, 31785, 31769, 31776, 31775, 31789, 31773, 31782, 31784, 31778, 31781, 31792, 32348, 32336, 32342, 32355, 32344, 32354, 32351, 32337, 32352, 32343, 32339, 32693, 32691, 32759, 32760, 32885, 33233, 33234, 33232, 33375, 33374, 34228, 34246, 34240, 34243, 34242, 34227, 34229, 34237, 34247, 34244, 34239, 34251, 34254, 34248, 34245, 34225, 34230, 34258, 34340, 34232, 34231, 34238, 34409, 34791, 34790, 34786, 34779, 34795, 34794, 34789, 34783, 34803, 34788, 34772, 34780, 34771, 34797, 34776, 34787, 34724, 34775, 34777, 34817, 34804, 34792, 34781, 35155, 35147, 35151, 35148, 35142, 35152, 35153, 35145, 35626, 35623, 35619, 35635, 35632, 35637, 35655, 35631, 35644, 35646, 35633, 35621, 35639, 35622, 35638, 35630, 35620, 35643, 35645, 35642, 35906, 35957, 35993, 35992, 35991, 36094, 36100, 36098, 36096, 36444, 36450, 36448, 36439, 36438, 36446, 36453, 36455, 36443, 36442, 36449, 36445, 36457, 36436, 36678, 36679, 36680, 36683, 37160, 37178, 37179, 37182, 37288, 37285, 37287, 37295, 37290, 37813, 37772, 37778, 37815, 37787, 37789, 37769, 37799, 37774, 37802, 37790, 37798, 37781, 37768, 37785, 37791, 37773, 37809, 37777, 37810, 37796, 37800, 37812, 37795, 37797, 38354, 38355, 38353, 38579, 38615, 38618, 24002, 38623, 38616, 38621, 38691, 38690, 38693, 38828, 38830, 38824, 38827, 38820, 38826, 38818, 38821, 38871, 38873, 38870, 38872, 38906, 38992, 38993, 38994, 39096, 39233, 39228, 39226, 39439, 39435, 39433, 39437, 39428, 39441, 39434, 39429, 39431, 39430, 39616, 39644, 39688, 39684, 39685, 39721, 39733, 39754, 39756, 39755, 39879, 39878, 39875, 39871, 39873, 39861, 39864, 39891, 39862, 39876, 39865, 39869, 40284, 40275, 40271, 40266, 40283, 40267, 40281, 40278, 40268, 40279, 40274, 40276, 40287, 40280, 40282, 40590, 40588, 40671, 40705, 40704, 40726, 40741, 40747, 40746, 40745, 40744, 40780, 40789, 20788, 20789, 21142, 21239, 21428, 22187, 22189, 22182, 22183, 22186, 22188, 22746, 22749, 22747, 22802, 23357, 23358, 23359, 24003, 24176, 24511, 25083, 25863, 25872, 25869, 25865, 25868, 25870, 25988, 26078, 26077, 26334, 27367, 27360, 27340, 27345, 27353, 27339, 27359, 27356, 27344, 27371, 27343, 27341, 27358, 27488, 27568, 27660, 28697, 28711, 28704, 28694, 28715, 28705, 28706, 28707, 28713, 28695, 28708, 28700, 28714, 29196, 29194, 29191, 29186, 29189, 29349, 29350, 29348, 29347, 29345, 29899, 29893, 29879, 29891, 29974, 30304, 30665, 30666, 30660, 30705, 31005, 31003, 31009, 31004, 30999, 31006, 31152, 31335, 31336, 31795, 31804, 31801, 31788, 31803, 31980, 31978, 32374, 32373, 32376, 32368, 32375, 32367, 32378, 32370, 32372, 32360, 32587, 32586, 32643, 32646, 32695, 32765, 32766, 32888, 33239, 33237, 33380, 33377, 33379, 34283, 34289, 34285, 34265, 34273, 34280, 34266, 34263, 34284, 34290, 34296, 34264, 34271, 34275, 34268, 34257, 34288, 34278, 34287, 34270, 34274, 34816, 34810, 34819, 34806, 34807, 34825, 34828, 34827, 34822, 34812, 34824, 34815, 34826, 34818, 35170, 35162, 35163, 35159, 35169, 35164, 35160, 35165, 35161, 35208, 35255, 35254, 35318, 35664, 35656, 35658, 35648, 35667, 35670, 35668, 35659, 35669, 35665, 35650, 35666, 35671, 35907, 35959, 35958, 35994, 36102, 36103, 36105, 36268, 36266, 36269, 36267, 36461, 36472, 36467, 36458, 36463, 36475, 36546, 36690, 36689, 36687, 36688, 36691, 36788, 37184, 37183, 37296, 37293, 37854, 37831, 37839, 37826, 37850, 37840, 37881, 37868, 37836, 37849, 37801, 37862, 37834, 37844, 37870, 37859, 37845, 37828, 37838, 37824, 37842, 37863, 38269, 38362, 38363, 38625, 38697, 38699, 38700, 38696, 38694, 38835, 38839, 38838, 38877, 38878, 38879, 39004, 39001, 39005, 38999, 39103, 39101, 39099, 39102, 39240, 39239, 39235, 39334, 39335, 39450, 39445, 39461, 39453, 39460, 39451, 39458, 39456, 39463, 39459, 39454, 39452, 39444, 39618, 39691, 39690, 39694, 39692, 39735, 39914, 39915, 39904, 39902, 39908, 39910, 39906, 39920, 39892, 39895, 39916, 39900, 39897, 39909, 39893, 39905, 39898, 40311, 40321, 40330, 40324, 40328, 40305, 40320, 40312, 40326, 40331, 40332, 40317, 40299, 40308, 40309, 40304, 40297, 40325, 40307, 40315, 40322, 40303, 40313, 40319, 40327, 40296, 40596, 40593, 40640, 40700, 40749, 40768, 40769, 40781, 40790, 40791, 40792, 21303, 22194, 22197, 22195, 22755, 23365, 24006, 24007, 24302, 24303, 24512, 24513, 25081, 25879, 25878, 25877, 25875, 26079, 26344, 26339, 26340, 27379, 27376, 27370, 27368, 27385, 27377, 27374, 27375, 28732, 28725, 28719, 28727, 28724, 28721, 28738, 28728, 28735, 28730, 28729, 28736, 28731, 28723, 28737, 29203, 29204, 29352, 29565, 29564, 29882, 30379, 30378, 30398, 30445, 30668, 30670, 30671, 30669, 30706, 31013, 31011, 31015, 31016, 31012, 31017, 31154, 31342, 31340, 31341, 31479, 31817, 31816, 31818, 31815, 31813, 31982, 32379, 32382, 32385, 32384, 32698, 32767, 32889, 33243, 33241, 33291, 33384, 33385, 34338, 34303, 34305, 34302, 34331, 34304, 34294, 34308, 34313, 34309, 34316, 34301, 34841, 34832, 34833, 34839, 34835, 34838, 35171, 35174, 35257, 35319, 35680, 35690, 35677, 35688, 35683, 35685, 35687, 35693, 36270, 36486, 36488, 36484, 36697, 36694, 36695, 36693, 36696, 36698, 37005, 37187, 37185, 37303, 37301, 37298, 37299, 37899, 37907, 37883, 37920, 37903, 37908, 37886, 37909, 37904, 37928, 37913, 37901, 37877, 37888, 37879, 37895, 37902, 37910, 37906, 37882, 37897, 37880, 37898, 37887, 37884, 37900, 37878, 37905, 37894, 38366, 38368, 38367, 38702, 38703, 38841, 38843, 38909, 38910, 39008, 39010, 39011, 39007, 39105, 39106, 39248, 39246, 39257, 39244, 39243, 39251, 39474, 39476, 39473, 39468, 39466, 39478, 39465, 39470, 39480, 39469, 39623, 39626, 39622, 39696, 39698, 39697, 39947, 39944, 39927, 39941, 39954, 39928, 4e4, 39943, 39950, 39942, 39959, 39956, 39945, 40351, 40345, 40356, 40349, 40338, 40344, 40336, 40347, 40352, 40340, 40348, 40362, 40343, 40353, 40346, 40354, 40360, 40350, 40355, 40383, 40361, 40342, 40358, 40359, 40601, 40603, 40602, 40677, 40676, 40679, 40678, 40752, 40750, 40795, 40800, 40798, 40797, 40793, 40849, 20794, 20793, 21144, 21143, 22211, 22205, 22206, 23368, 23367, 24011, 24015, 24305, 25085, 25883, 27394, 27388, 27395, 27384, 27392, 28739, 28740, 28746, 28744, 28745, 28741, 28742, 29213, 29210, 29209, 29566, 29975, 30314, 30672, 31021, 31025, 31023, 31828, 31827, 31986, 32394, 32391, 32392, 32395, 32390, 32397, 32589, 32699, 32816, 33245, 34328, 34346, 34342, 34335, 34339, 34332, 34329, 34343, 34350, 34337, 34336, 34345, 34334, 34341, 34857, 34845, 34843, 34848, 34852, 34844, 34859, 34890, 35181, 35177, 35182, 35179, 35322, 35705, 35704, 35653, 35706, 35707, 36112, 36116, 36271, 36494, 36492, 36702, 36699, 36701, 37190, 37188, 37189, 37305, 37951, 37947, 37942, 37929, 37949, 37948, 37936, 37945, 37930, 37943, 37932, 37952, 37937, 38373, 38372, 38371, 38709, 38714, 38847, 38881, 39012, 39113, 39110, 39104, 39256, 39254, 39481, 39485, 39494, 39492, 39490, 39489, 39482, 39487, 39629, 39701, 39703, 39704, 39702, 39738, 39762, 39979, 39965, 39964, 39980, 39971, 39976, 39977, 39972, 39969, 40375, 40374, 40380, 40385, 40391, 40394, 40399, 40382, 40389, 40387, 40379, 40373, 40398, 40377, 40378, 40364, 40392, 40369, 40365, 40396, 40371, 40397, 40370, 40570, 40604, 40683, 40686, 40685, 40731, 40728, 40730, 40753, 40782, 40805, 40804, 40850, 20153, 22214, 22213, 22219, 22897, 23371, 23372, 24021, 24017, 24306, 25889, 25888, 25894, 25890, 27403, 27400, 27401, 27661, 28757, 28758, 28759, 28754, 29214, 29215, 29353, 29567, 29912, 29909, 29913, 29911, 30317, 30381, 31029, 31156, 31344, 31345, 31831, 31836, 31833, 31835, 31834, 31988, 31985, 32401, 32591, 32647, 33246, 33387, 34356, 34357, 34355, 34348, 34354, 34358, 34860, 34856, 34854, 34858, 34853, 35185, 35263, 35262, 35323, 35710, 35716, 35714, 35718, 35717, 35711, 36117, 36501, 36500, 36506, 36498, 36496, 36502, 36503, 36704, 36706, 37191, 37964, 37968, 37962, 37963, 37967, 37959, 37957, 37960, 37961, 37958, 38719, 38883, 39018, 39017, 39115, 39252, 39259, 39502, 39507, 39508, 39500, 39503, 39496, 39498, 39497, 39506, 39504, 39632, 39705, 39723, 39739, 39766, 39765, 40006, 40008, 39999, 40004, 39993, 39987, 40001, 39996, 39991, 39988, 39986, 39997, 39990, 40411, 40402, 40414, 40410, 40395, 40400, 40412, 40401, 40415, 40425, 40409, 40408, 40406, 40437, 40405, 40413, 40630, 40688, 40757, 40755, 40754, 40770, 40811, 40853, 40866, 20797, 21145, 22760, 22759, 22898, 23373, 24024, 34863, 24399, 25089, 25091, 25092, 25897, 25893, 26006, 26347, 27409, 27410, 27407, 27594, 28763, 28762, 29218, 29570, 29569, 29571, 30320, 30676, 31847, 31846, 32405, 33388, 34362, 34368, 34361, 34364, 34353, 34363, 34366, 34864, 34866, 34862, 34867, 35190, 35188, 35187, 35326, 35724, 35726, 35723, 35720, 35909, 36121, 36504, 36708, 36707, 37308, 37986, 37973, 37981, 37975, 37982, 38852, 38853, 38912, 39510, 39513, 39710, 39711, 39712, 40018, 40024, 40016, 40010, 40013, 40011, 40021, 40025, 40012, 40014, 40443, 40439, 40431, 40419, 40427, 40440, 40420, 40438, 40417, 40430, 40422, 40434, 40432, 40418, 40428, 40436, 40435, 40424, 40429, 40642, 40656, 40690, 40691, 40710, 40732, 40760, 40759, 40758, 40771, 40783, 40817, 40816, 40814, 40815, 22227, 22221, 23374, 23661, 25901, 26349, 26350, 27411, 28767, 28769, 28765, 28768, 29219, 29915, 29925, 30677, 31032, 31159, 31158, 31850, 32407, 32649, 33389, 34371, 34872, 34871, 34869, 34891, 35732, 35733, 36510, 36511, 36512, 36509, 37310, 37309, 37314, 37995, 37992, 37993, 38629, 38726, 38723, 38727, 38855, 38885, 39518, 39637, 39769, 40035, 40039, 40038, 40034, 40030, 40032, 40450, 40446, 40455, 40451, 40454, 40453, 40448, 40449, 40457, 40447, 40445, 40452, 40608, 40734, 40774, 40820, 40821, 40822, 22228, 25902, 26040, 27416, 27417, 27415, 27418, 28770, 29222, 29354, 30680, 30681, 31033, 31849, 31851, 31990, 32410, 32408, 32411, 32409, 33248, 33249, 34374, 34375, 34376, 35193, 35194, 35196, 35195, 35327, 35736, 35737, 36517, 36516, 36515, 37998, 37997, 37999, 38001, 38003, 38729, 39026, 39263, 40040, 40046, 40045, 40459, 40461, 40464, 40463, 40466, 40465, 40609, 40693, 40713, 40775, 40824, 40827, 40826, 40825, 22302, 28774, 31855, 34876, 36274, 36518, 37315, 38004, 38008, 38006, 38005, 39520, 40052, 40051, 40049, 40053, 40468, 40467, 40694, 40714, 40868, 28776, 28773, 31991, 34410, 34878, 34877, 34879, 35742, 35996, 36521, 36553, 38731, 39027, 39028, 39116, 39265, 39339, 39524, 39526, 39527, 39716, 40469, 40471, 40776, 25095, 27422, 29223, 34380, 36520, 38018, 38016, 38017, 39529, 39528, 39726, 40473, 29225, 34379, 35743, 38019, 40057, 40631, 30325, 39531, 40058, 40477, 28777, 28778, 40612, 40830, 40777, 40856, 30849, 37561, 35023, 22715, 24658, 31911, 23290, 9556, 9574, 9559, 9568, 9580, 9571, 9562, 9577, 9565, 9554, 9572, 9557, 9566, 9578, 9569, 9560, 9575, 9563, 9555, 9573, 9558, 9567, 9579, 9570, 9561, 9576, 9564, 9553, 9552, 9581, 9582, 9584, 9583, 65517, 132423, 37595, 132575, 147397, 34124, 17077, 29679, 20917, 13897, 149826, 166372, 37700, 137691, 33518, 146632, 30780, 26436, 25311, 149811, 166314, 131744, 158643, 135941, 20395, 140525, 20488, 159017, 162436, 144896, 150193, 140563, 20521, 131966, 24484, 131968, 131911, 28379, 132127, 20605, 20737, 13434, 20750, 39020, 14147, 33814, 149924, 132231, 20832, 144308, 20842, 134143, 139516, 131813, 140592, 132494, 143923, 137603, 23426, 34685, 132531, 146585, 20914, 20920, 40244, 20937, 20943, 20945, 15580, 20947, 150182, 20915, 20962, 21314, 20973, 33741, 26942, 145197, 24443, 21003, 21030, 21052, 21173, 21079, 21140, 21177, 21189, 31765, 34114, 21216, 34317, 158483, 21253, 166622, 21833, 28377, 147328, 133460, 147436, 21299, 21316, 134114, 27851, 136998, 26651, 29653, 24650, 16042, 14540, 136936, 29149, 17570, 21357, 21364, 165547, 21374, 21375, 136598, 136723, 30694, 21395, 166555, 21408, 21419, 21422, 29607, 153458, 16217, 29596, 21441, 21445, 27721, 20041, 22526, 21465, 15019, 134031, 21472, 147435, 142755, 21494, 134263, 21523, 28793, 21803, 26199, 27995, 21613, 158547, 134516, 21853, 21647, 21668, 18342, 136973, 134877, 15796, 134477, 166332, 140952, 21831, 19693, 21551, 29719, 21894, 21929, 22021, 137431, 147514, 17746, 148533, 26291, 135348, 22071, 26317, 144010, 26276, 26285, 22093, 22095, 30961, 22257, 38791, 21502, 22272, 22255, 22253, 166758, 13859, 135759, 22342, 147877, 27758, 28811, 22338, 14001, 158846, 22502, 136214, 22531, 136276, 148323, 22566, 150517, 22620, 22698, 13665, 22752, 22748, 135740, 22779, 23551, 22339, 172368, 148088, 37843, 13729, 22815, 26790, 14019, 28249, 136766, 23076, 21843, 136850, 34053, 22985, 134478, 158849, 159018, 137180, 23001, 137211, 137138, 159142, 28017, 137256, 136917, 23033, 159301, 23211, 23139, 14054, 149929, 23159, 14088, 23190, 29797, 23251, 159649, 140628, 15749, 137489, 14130, 136888, 24195, 21200, 23414, 25992, 23420, 162318, 16388, 18525, 131588, 23509, 24928, 137780, 154060, 132517, 23539, 23453, 19728, 23557, 138052, 23571, 29646, 23572, 138405, 158504, 23625, 18653, 23685, 23785, 23791, 23947, 138745, 138807, 23824, 23832, 23878, 138916, 23738, 24023, 33532, 14381, 149761, 139337, 139635, 33415, 14390, 15298, 24110, 27274, 24181, 24186, 148668, 134355, 21414, 20151, 24272, 21416, 137073, 24073, 24308, 164994, 24313, 24315, 14496, 24316, 26686, 37915, 24333, 131521, 194708, 15070, 18606, 135994, 24378, 157832, 140240, 24408, 140401, 24419, 38845, 159342, 24434, 37696, 166454, 24487, 23990, 15711, 152144, 139114, 159992, 140904, 37334, 131742, 166441, 24625, 26245, 137335, 14691, 15815, 13881, 22416, 141236, 31089, 15936, 24734, 24740, 24755, 149890, 149903, 162387, 29860, 20705, 23200, 24932, 33828, 24898, 194726, 159442, 24961, 20980, 132694, 24967, 23466, 147383, 141407, 25043, 166813, 170333, 25040, 14642, 141696, 141505, 24611, 24924, 25886, 25483, 131352, 25285, 137072, 25301, 142861, 25452, 149983, 14871, 25656, 25592, 136078, 137212, 25744, 28554, 142902, 38932, 147596, 153373, 25825, 25829, 38011, 14950, 25658, 14935, 25933, 28438, 150056, 150051, 25989, 25965, 25951, 143486, 26037, 149824, 19255, 26065, 16600, 137257, 26080, 26083, 24543, 144384, 26136, 143863, 143864, 26180, 143780, 143781, 26187, 134773, 26215, 152038, 26227, 26228, 138813, 143921, 165364, 143816, 152339, 30661, 141559, 39332, 26370, 148380, 150049, 15147, 27130, 145346, 26462, 26471, 26466, 147917, 168173, 26583, 17641, 26658, 28240, 37436, 26625, 144358, 159136, 26717, 144495, 27105, 27147, 166623, 26995, 26819, 144845, 26881, 26880, 15666, 14849, 144956, 15232, 26540, 26977, 166474, 17148, 26934, 27032, 15265, 132041, 33635, 20624, 27129, 144985, 139562, 27205, 145155, 27293, 15347, 26545, 27336, 168348, 15373, 27421, 133411, 24798, 27445, 27508, 141261, 28341, 146139, 132021, 137560, 14144, 21537, 146266, 27617, 147196, 27612, 27703, 140427, 149745, 158545, 27738, 33318, 27769, 146876, 17605, 146877, 147876, 149772, 149760, 146633, 14053, 15595, 134450, 39811, 143865, 140433, 32655, 26679, 159013, 159137, 159211, 28054, 27996, 28284, 28420, 149887, 147589, 159346, 34099, 159604, 20935, 27804, 28189, 33838, 166689, 28207, 146991, 29779, 147330, 31180, 28239, 23185, 143435, 28664, 14093, 28573, 146992, 28410, 136343, 147517, 17749, 37872, 28484, 28508, 15694, 28532, 168304, 15675, 28575, 147780, 28627, 147601, 147797, 147513, 147440, 147380, 147775, 20959, 147798, 147799, 147776, 156125, 28747, 28798, 28839, 28801, 28876, 28885, 28886, 28895, 16644, 15848, 29108, 29078, 148087, 28971, 28997, 23176, 29002, 29038, 23708, 148325, 29007, 37730, 148161, 28972, 148570, 150055, 150050, 29114, 166888, 28861, 29198, 37954, 29205, 22801, 37955, 29220, 37697, 153093, 29230, 29248, 149876, 26813, 29269, 29271, 15957, 143428, 26637, 28477, 29314, 29482, 29483, 149539, 165931, 18669, 165892, 29480, 29486, 29647, 29610, 134202, 158254, 29641, 29769, 147938, 136935, 150052, 26147, 14021, 149943, 149901, 150011, 29687, 29717, 26883, 150054, 29753, 132547, 16087, 29788, 141485, 29792, 167602, 29767, 29668, 29814, 33721, 29804, 14128, 29812, 37873, 27180, 29826, 18771, 150156, 147807, 150137, 166799, 23366, 166915, 137374, 29896, 137608, 29966, 29929, 29982, 167641, 137803, 23511, 167596, 37765, 30029, 30026, 30055, 30062, 151426, 16132, 150803, 30094, 29789, 30110, 30132, 30210, 30252, 30289, 30287, 30319, 30326, 156661, 30352, 33263, 14328, 157969, 157966, 30369, 30373, 30391, 30412, 159647, 33890, 151709, 151933, 138780, 30494, 30502, 30528, 25775, 152096, 30552, 144044, 30639, 166244, 166248, 136897, 30708, 30729, 136054, 150034, 26826, 30895, 30919, 30931, 38565, 31022, 153056, 30935, 31028, 30897, 161292, 36792, 34948, 166699, 155779, 140828, 31110, 35072, 26882, 31104, 153687, 31133, 162617, 31036, 31145, 28202, 160038, 16040, 31174, 168205, 31188], + "euc-kr": [44034, 44035, 44037, 44038, 44043, 44044, 44045, 44046, 44047, 44056, 44062, 44063, 44065, 44066, 44067, 44069, 44070, 44071, 44072, 44073, 44074, 44075, 44078, 44082, 44083, 44084, null, null, null, null, null, null, 44085, 44086, 44087, 44090, 44091, 44093, 44094, 44095, 44097, 44098, 44099, 44100, 44101, 44102, 44103, 44104, 44105, 44106, 44108, 44110, 44111, 44112, 44113, 44114, 44115, 44117, null, null, null, null, null, null, 44118, 44119, 44121, 44122, 44123, 44125, 44126, 44127, 44128, 44129, 44130, 44131, 44132, 44133, 44134, 44135, 44136, 44137, 44138, 44139, 44140, 44141, 44142, 44143, 44146, 44147, 44149, 44150, 44153, 44155, 44156, 44157, 44158, 44159, 44162, 44167, 44168, 44173, 44174, 44175, 44177, 44178, 44179, 44181, 44182, 44183, 44184, 44185, 44186, 44187, 44190, 44194, 44195, 44196, 44197, 44198, 44199, 44203, 44205, 44206, 44209, 44210, 44211, 44212, 44213, 44214, 44215, 44218, 44222, 44223, 44224, 44226, 44227, 44229, 44230, 44231, 44233, 44234, 44235, 44237, 44238, 44239, 44240, 44241, 44242, 44243, 44244, 44246, 44248, 44249, 44250, 44251, 44252, 44253, 44254, 44255, 44258, 44259, 44261, 44262, 44265, 44267, 44269, 44270, 44274, 44276, 44279, 44280, 44281, 44282, 44283, 44286, 44287, 44289, 44290, 44291, 44293, 44295, 44296, 44297, 44298, 44299, 44302, 44304, 44306, 44307, 44308, 44309, 44310, 44311, 44313, 44314, 44315, 44317, 44318, 44319, 44321, 44322, 44323, 44324, 44325, 44326, 44327, 44328, 44330, 44331, 44334, 44335, 44336, 44337, 44338, 44339, null, null, null, null, null, null, 44342, 44343, 44345, 44346, 44347, 44349, 44350, 44351, 44352, 44353, 44354, 44355, 44358, 44360, 44362, 44363, 44364, 44365, 44366, 44367, 44369, 44370, 44371, 44373, 44374, 44375, null, null, null, null, null, null, 44377, 44378, 44379, 44380, 44381, 44382, 44383, 44384, 44386, 44388, 44389, 44390, 44391, 44392, 44393, 44394, 44395, 44398, 44399, 44401, 44402, 44407, 44408, 44409, 44410, 44414, 44416, 44419, 44420, 44421, 44422, 44423, 44426, 44427, 44429, 44430, 44431, 44433, 44434, 44435, 44436, 44437, 44438, 44439, 44440, 44441, 44442, 44443, 44446, 44447, 44448, 44449, 44450, 44451, 44453, 44454, 44455, 44456, 44457, 44458, 44459, 44460, 44461, 44462, 44463, 44464, 44465, 44466, 44467, 44468, 44469, 44470, 44472, 44473, 44474, 44475, 44476, 44477, 44478, 44479, 44482, 44483, 44485, 44486, 44487, 44489, 44490, 44491, 44492, 44493, 44494, 44495, 44498, 44500, 44501, 44502, 44503, 44504, 44505, 44506, 44507, 44509, 44510, 44511, 44513, 44514, 44515, 44517, 44518, 44519, 44520, 44521, 44522, 44523, 44524, 44525, 44526, 44527, 44528, 44529, 44530, 44531, 44532, 44533, 44534, 44535, 44538, 44539, 44541, 44542, 44546, 44547, 44548, 44549, 44550, 44551, 44554, 44556, 44558, 44559, 44560, 44561, 44562, 44563, 44565, 44566, 44567, 44568, 44569, 44570, 44571, 44572, null, null, null, null, null, null, 44573, 44574, 44575, 44576, 44577, 44578, 44579, 44580, 44581, 44582, 44583, 44584, 44585, 44586, 44587, 44588, 44589, 44590, 44591, 44594, 44595, 44597, 44598, 44601, 44603, 44604, null, null, null, null, null, null, 44605, 44606, 44607, 44610, 44612, 44615, 44616, 44617, 44619, 44623, 44625, 44626, 44627, 44629, 44631, 44632, 44633, 44634, 44635, 44638, 44642, 44643, 44644, 44646, 44647, 44650, 44651, 44653, 44654, 44655, 44657, 44658, 44659, 44660, 44661, 44662, 44663, 44666, 44670, 44671, 44672, 44673, 44674, 44675, 44678, 44679, 44680, 44681, 44682, 44683, 44685, 44686, 44687, 44688, 44689, 44690, 44691, 44692, 44693, 44694, 44695, 44696, 44697, 44698, 44699, 44700, 44701, 44702, 44703, 44704, 44705, 44706, 44707, 44708, 44709, 44710, 44711, 44712, 44713, 44714, 44715, 44716, 44717, 44718, 44719, 44720, 44721, 44722, 44723, 44724, 44725, 44726, 44727, 44728, 44729, 44730, 44731, 44735, 44737, 44738, 44739, 44741, 44742, 44743, 44744, 44745, 44746, 44747, 44750, 44754, 44755, 44756, 44757, 44758, 44759, 44762, 44763, 44765, 44766, 44767, 44768, 44769, 44770, 44771, 44772, 44773, 44774, 44775, 44777, 44778, 44780, 44782, 44783, 44784, 44785, 44786, 44787, 44789, 44790, 44791, 44793, 44794, 44795, 44797, 44798, 44799, 44800, 44801, 44802, 44803, 44804, 44805, null, null, null, null, null, null, 44806, 44809, 44810, 44811, 44812, 44814, 44815, 44817, 44818, 44819, 44820, 44821, 44822, 44823, 44824, 44825, 44826, 44827, 44828, 44829, 44830, 44831, 44832, 44833, 44834, 44835, null, null, null, null, null, null, 44836, 44837, 44838, 44839, 44840, 44841, 44842, 44843, 44846, 44847, 44849, 44851, 44853, 44854, 44855, 44856, 44857, 44858, 44859, 44862, 44864, 44868, 44869, 44870, 44871, 44874, 44875, 44876, 44877, 44878, 44879, 44881, 44882, 44883, 44884, 44885, 44886, 44887, 44888, 44889, 44890, 44891, 44894, 44895, 44896, 44897, 44898, 44899, 44902, 44903, 44904, 44905, 44906, 44907, 44908, 44909, 44910, 44911, 44912, 44913, 44914, 44915, 44916, 44917, 44918, 44919, 44920, 44922, 44923, 44924, 44925, 44926, 44927, 44929, 44930, 44931, 44933, 44934, 44935, 44937, 44938, 44939, 44940, 44941, 44942, 44943, 44946, 44947, 44948, 44950, 44951, 44952, 44953, 44954, 44955, 44957, 44958, 44959, 44960, 44961, 44962, 44963, 44964, 44965, 44966, 44967, 44968, 44969, 44970, 44971, 44972, 44973, 44974, 44975, 44976, 44977, 44978, 44979, 44980, 44981, 44982, 44983, 44986, 44987, 44989, 44990, 44991, 44993, 44994, 44995, 44996, 44997, 44998, 45002, 45004, 45007, 45008, 45009, 45010, 45011, 45013, 45014, 45015, 45016, 45017, 45018, 45019, 45021, 45022, 45023, 45024, 45025, null, null, null, null, null, null, 45026, 45027, 45028, 45029, 45030, 45031, 45034, 45035, 45036, 45037, 45038, 45039, 45042, 45043, 45045, 45046, 45047, 45049, 45050, 45051, 45052, 45053, 45054, 45055, 45058, 45059, null, null, null, null, null, null, 45061, 45062, 45063, 45064, 45065, 45066, 45067, 45069, 45070, 45071, 45073, 45074, 45075, 45077, 45078, 45079, 45080, 45081, 45082, 45083, 45086, 45087, 45088, 45089, 45090, 45091, 45092, 45093, 45094, 45095, 45097, 45098, 45099, 45100, 45101, 45102, 45103, 45104, 45105, 45106, 45107, 45108, 45109, 45110, 45111, 45112, 45113, 45114, 45115, 45116, 45117, 45118, 45119, 45120, 45121, 45122, 45123, 45126, 45127, 45129, 45131, 45133, 45135, 45136, 45137, 45138, 45142, 45144, 45146, 45147, 45148, 45150, 45151, 45152, 45153, 45154, 45155, 45156, 45157, 45158, 45159, 45160, 45161, 45162, 45163, 45164, 45165, 45166, 45167, 45168, 45169, 45170, 45171, 45172, 45173, 45174, 45175, 45176, 45177, 45178, 45179, 45182, 45183, 45185, 45186, 45187, 45189, 45190, 45191, 45192, 45193, 45194, 45195, 45198, 45200, 45202, 45203, 45204, 45205, 45206, 45207, 45211, 45213, 45214, 45219, 45220, 45221, 45222, 45223, 45226, 45232, 45234, 45238, 45239, 45241, 45242, 45243, 45245, 45246, 45247, 45248, 45249, 45250, 45251, 45254, 45258, 45259, 45260, 45261, 45262, 45263, 45266, null, null, null, null, null, null, 45267, 45269, 45270, 45271, 45273, 45274, 45275, 45276, 45277, 45278, 45279, 45281, 45282, 45283, 45284, 45286, 45287, 45288, 45289, 45290, 45291, 45292, 45293, 45294, 45295, 45296, null, null, null, null, null, null, 45297, 45298, 45299, 45300, 45301, 45302, 45303, 45304, 45305, 45306, 45307, 45308, 45309, 45310, 45311, 45312, 45313, 45314, 45315, 45316, 45317, 45318, 45319, 45322, 45325, 45326, 45327, 45329, 45332, 45333, 45334, 45335, 45338, 45342, 45343, 45344, 45345, 45346, 45350, 45351, 45353, 45354, 45355, 45357, 45358, 45359, 45360, 45361, 45362, 45363, 45366, 45370, 45371, 45372, 45373, 45374, 45375, 45378, 45379, 45381, 45382, 45383, 45385, 45386, 45387, 45388, 45389, 45390, 45391, 45394, 45395, 45398, 45399, 45401, 45402, 45403, 45405, 45406, 45407, 45409, 45410, 45411, 45412, 45413, 45414, 45415, 45416, 45417, 45418, 45419, 45420, 45421, 45422, 45423, 45424, 45425, 45426, 45427, 45428, 45429, 45430, 45431, 45434, 45435, 45437, 45438, 45439, 45441, 45443, 45444, 45445, 45446, 45447, 45450, 45452, 45454, 45455, 45456, 45457, 45461, 45462, 45463, 45465, 45466, 45467, 45469, 45470, 45471, 45472, 45473, 45474, 45475, 45476, 45477, 45478, 45479, 45481, 45482, 45483, 45484, 45485, 45486, 45487, 45488, 45489, 45490, 45491, 45492, 45493, 45494, 45495, 45496, null, null, null, null, null, null, 45497, 45498, 45499, 45500, 45501, 45502, 45503, 45504, 45505, 45506, 45507, 45508, 45509, 45510, 45511, 45512, 45513, 45514, 45515, 45517, 45518, 45519, 45521, 45522, 45523, 45525, null, null, null, null, null, null, 45526, 45527, 45528, 45529, 45530, 45531, 45534, 45536, 45537, 45538, 45539, 45540, 45541, 45542, 45543, 45546, 45547, 45549, 45550, 45551, 45553, 45554, 45555, 45556, 45557, 45558, 45559, 45560, 45562, 45564, 45566, 45567, 45568, 45569, 45570, 45571, 45574, 45575, 45577, 45578, 45581, 45582, 45583, 45584, 45585, 45586, 45587, 45590, 45592, 45594, 45595, 45596, 45597, 45598, 45599, 45601, 45602, 45603, 45604, 45605, 45606, 45607, 45608, 45609, 45610, 45611, 45612, 45613, 45614, 45615, 45616, 45617, 45618, 45619, 45621, 45622, 45623, 45624, 45625, 45626, 45627, 45629, 45630, 45631, 45632, 45633, 45634, 45635, 45636, 45637, 45638, 45639, 45640, 45641, 45642, 45643, 45644, 45645, 45646, 45647, 45648, 45649, 45650, 45651, 45652, 45653, 45654, 45655, 45657, 45658, 45659, 45661, 45662, 45663, 45665, 45666, 45667, 45668, 45669, 45670, 45671, 45674, 45675, 45676, 45677, 45678, 45679, 45680, 45681, 45682, 45683, 45686, 45687, 45688, 45689, 45690, 45691, 45693, 45694, 45695, 45696, 45697, 45698, 45699, 45702, 45703, 45704, 45706, 45707, 45708, 45709, 45710, null, null, null, null, null, null, 45711, 45714, 45715, 45717, 45718, 45719, 45723, 45724, 45725, 45726, 45727, 45730, 45732, 45735, 45736, 45737, 45739, 45741, 45742, 45743, 45745, 45746, 45747, 45749, 45750, 45751, null, null, null, null, null, null, 45752, 45753, 45754, 45755, 45756, 45757, 45758, 45759, 45760, 45761, 45762, 45763, 45764, 45765, 45766, 45767, 45770, 45771, 45773, 45774, 45775, 45777, 45779, 45780, 45781, 45782, 45783, 45786, 45788, 45790, 45791, 45792, 45793, 45795, 45799, 45801, 45802, 45808, 45809, 45810, 45814, 45820, 45821, 45822, 45826, 45827, 45829, 45830, 45831, 45833, 45834, 45835, 45836, 45837, 45838, 45839, 45842, 45846, 45847, 45848, 45849, 45850, 45851, 45853, 45854, 45855, 45856, 45857, 45858, 45859, 45860, 45861, 45862, 45863, 45864, 45865, 45866, 45867, 45868, 45869, 45870, 45871, 45872, 45873, 45874, 45875, 45876, 45877, 45878, 45879, 45880, 45881, 45882, 45883, 45884, 45885, 45886, 45887, 45888, 45889, 45890, 45891, 45892, 45893, 45894, 45895, 45896, 45897, 45898, 45899, 45900, 45901, 45902, 45903, 45904, 45905, 45906, 45907, 45911, 45913, 45914, 45917, 45920, 45921, 45922, 45923, 45926, 45928, 45930, 45932, 45933, 45935, 45938, 45939, 45941, 45942, 45943, 45945, 45946, 45947, 45948, 45949, 45950, 45951, 45954, 45958, 45959, 45960, 45961, 45962, 45963, 45965, null, null, null, null, null, null, 45966, 45967, 45969, 45970, 45971, 45973, 45974, 45975, 45976, 45977, 45978, 45979, 45980, 45981, 45982, 45983, 45986, 45987, 45988, 45989, 45990, 45991, 45993, 45994, 45995, 45997, null, null, null, null, null, null, 45998, 45999, 46e3, 46001, 46002, 46003, 46004, 46005, 46006, 46007, 46008, 46009, 46010, 46011, 46012, 46013, 46014, 46015, 46016, 46017, 46018, 46019, 46022, 46023, 46025, 46026, 46029, 46031, 46033, 46034, 46035, 46038, 46040, 46042, 46044, 46046, 46047, 46049, 46050, 46051, 46053, 46054, 46055, 46057, 46058, 46059, 46060, 46061, 46062, 46063, 46064, 46065, 46066, 46067, 46068, 46069, 46070, 46071, 46072, 46073, 46074, 46075, 46077, 46078, 46079, 46080, 46081, 46082, 46083, 46084, 46085, 46086, 46087, 46088, 46089, 46090, 46091, 46092, 46093, 46094, 46095, 46097, 46098, 46099, 46100, 46101, 46102, 46103, 46105, 46106, 46107, 46109, 46110, 46111, 46113, 46114, 46115, 46116, 46117, 46118, 46119, 46122, 46124, 46125, 46126, 46127, 46128, 46129, 46130, 46131, 46133, 46134, 46135, 46136, 46137, 46138, 46139, 46140, 46141, 46142, 46143, 46144, 46145, 46146, 46147, 46148, 46149, 46150, 46151, 46152, 46153, 46154, 46155, 46156, 46157, 46158, 46159, 46162, 46163, 46165, 46166, 46167, 46169, 46170, 46171, 46172, 46173, 46174, 46175, 46178, 46180, 46182, null, null, null, null, null, null, 46183, 46184, 46185, 46186, 46187, 46189, 46190, 46191, 46192, 46193, 46194, 46195, 46196, 46197, 46198, 46199, 46200, 46201, 46202, 46203, 46204, 46205, 46206, 46207, 46209, 46210, null, null, null, null, null, null, 46211, 46212, 46213, 46214, 46215, 46217, 46218, 46219, 46220, 46221, 46222, 46223, 46224, 46225, 46226, 46227, 46228, 46229, 46230, 46231, 46232, 46233, 46234, 46235, 46236, 46238, 46239, 46240, 46241, 46242, 46243, 46245, 46246, 46247, 46249, 46250, 46251, 46253, 46254, 46255, 46256, 46257, 46258, 46259, 46260, 46262, 46264, 46266, 46267, 46268, 46269, 46270, 46271, 46273, 46274, 46275, 46277, 46278, 46279, 46281, 46282, 46283, 46284, 46285, 46286, 46287, 46289, 46290, 46291, 46292, 46294, 46295, 46296, 46297, 46298, 46299, 46302, 46303, 46305, 46306, 46309, 46311, 46312, 46313, 46314, 46315, 46318, 46320, 46322, 46323, 46324, 46325, 46326, 46327, 46329, 46330, 46331, 46332, 46333, 46334, 46335, 46336, 46337, 46338, 46339, 46340, 46341, 46342, 46343, 46344, 46345, 46346, 46347, 46348, 46349, 46350, 46351, 46352, 46353, 46354, 46355, 46358, 46359, 46361, 46362, 46365, 46366, 46367, 46368, 46369, 46370, 46371, 46374, 46379, 46380, 46381, 46382, 46383, 46386, 46387, 46389, 46390, 46391, 46393, 46394, 46395, 46396, 46397, 46398, 46399, 46402, 46406, null, null, null, null, null, null, 46407, 46408, 46409, 46410, 46414, 46415, 46417, 46418, 46419, 46421, 46422, 46423, 46424, 46425, 46426, 46427, 46430, 46434, 46435, 46436, 46437, 46438, 46439, 46440, 46441, 46442, null, null, null, null, null, null, 46443, 46444, 46445, 46446, 46447, 46448, 46449, 46450, 46451, 46452, 46453, 46454, 46455, 46456, 46457, 46458, 46459, 46460, 46461, 46462, 46463, 46464, 46465, 46466, 46467, 46468, 46469, 46470, 46471, 46472, 46473, 46474, 46475, 46476, 46477, 46478, 46479, 46480, 46481, 46482, 46483, 46484, 46485, 46486, 46487, 46488, 46489, 46490, 46491, 46492, 46493, 46494, 46495, 46498, 46499, 46501, 46502, 46503, 46505, 46508, 46509, 46510, 46511, 46514, 46518, 46519, 46520, 46521, 46522, 46526, 46527, 46529, 46530, 46531, 46533, 46534, 46535, 46536, 46537, 46538, 46539, 46542, 46546, 46547, 46548, 46549, 46550, 46551, 46553, 46554, 46555, 46556, 46557, 46558, 46559, 46560, 46561, 46562, 46563, 46564, 46565, 46566, 46567, 46568, 46569, 46570, 46571, 46573, 46574, 46575, 46576, 46577, 46578, 46579, 46580, 46581, 46582, 46583, 46584, 46585, 46586, 46587, 46588, 46589, 46590, 46591, 46592, 46593, 46594, 46595, 46596, 46597, 46598, 46599, 46600, 46601, 46602, 46603, 46604, 46605, 46606, 46607, 46610, 46611, 46613, 46614, 46615, 46617, 46618, 46619, 46620, 46621, null, null, null, null, null, null, 46622, 46623, 46624, 46625, 46626, 46627, 46628, 46630, 46631, 46632, 46633, 46634, 46635, 46637, 46638, 46639, 46640, 46641, 46642, 46643, 46645, 46646, 46647, 46648, 46649, 46650, null, null, null, null, null, null, 46651, 46652, 46653, 46654, 46655, 46656, 46657, 46658, 46659, 46660, 46661, 46662, 46663, 46665, 46666, 46667, 46668, 46669, 46670, 46671, 46672, 46673, 46674, 46675, 46676, 46677, 46678, 46679, 46680, 46681, 46682, 46683, 46684, 46685, 46686, 46687, 46688, 46689, 46690, 46691, 46693, 46694, 46695, 46697, 46698, 46699, 46700, 46701, 46702, 46703, 46704, 46705, 46706, 46707, 46708, 46709, 46710, 46711, 46712, 46713, 46714, 46715, 46716, 46717, 46718, 46719, 46720, 46721, 46722, 46723, 46724, 46725, 46726, 46727, 46728, 46729, 46730, 46731, 46732, 46733, 46734, 46735, 46736, 46737, 46738, 46739, 46740, 46741, 46742, 46743, 46744, 46745, 46746, 46747, 46750, 46751, 46753, 46754, 46755, 46757, 46758, 46759, 46760, 46761, 46762, 46765, 46766, 46767, 46768, 46770, 46771, 46772, 46773, 46774, 46775, 46776, 46777, 46778, 46779, 46780, 46781, 46782, 46783, 46784, 46785, 46786, 46787, 46788, 46789, 46790, 46791, 46792, 46793, 46794, 46795, 46796, 46797, 46798, 46799, 46800, 46801, 46802, 46803, 46805, 46806, 46807, 46808, 46809, 46810, 46811, 46812, 46813, null, null, null, null, null, null, 46814, 46815, 46816, 46817, 46818, 46819, 46820, 46821, 46822, 46823, 46824, 46825, 46826, 46827, 46828, 46829, 46830, 46831, 46833, 46834, 46835, 46837, 46838, 46839, 46841, 46842, null, null, null, null, null, null, 46843, 46844, 46845, 46846, 46847, 46850, 46851, 46852, 46854, 46855, 46856, 46857, 46858, 46859, 46860, 46861, 46862, 46863, 46864, 46865, 46866, 46867, 46868, 46869, 46870, 46871, 46872, 46873, 46874, 46875, 46876, 46877, 46878, 46879, 46880, 46881, 46882, 46883, 46884, 46885, 46886, 46887, 46890, 46891, 46893, 46894, 46897, 46898, 46899, 46900, 46901, 46902, 46903, 46906, 46908, 46909, 46910, 46911, 46912, 46913, 46914, 46915, 46917, 46918, 46919, 46921, 46922, 46923, 46925, 46926, 46927, 46928, 46929, 46930, 46931, 46934, 46935, 46936, 46937, 46938, 46939, 46940, 46941, 46942, 46943, 46945, 46946, 46947, 46949, 46950, 46951, 46953, 46954, 46955, 46956, 46957, 46958, 46959, 46962, 46964, 46966, 46967, 46968, 46969, 46970, 46971, 46974, 46975, 46977, 46978, 46979, 46981, 46982, 46983, 46984, 46985, 46986, 46987, 46990, 46995, 46996, 46997, 47002, 47003, 47005, 47006, 47007, 47009, 47010, 47011, 47012, 47013, 47014, 47015, 47018, 47022, 47023, 47024, 47025, 47026, 47027, 47030, 47031, 47033, 47034, 47035, 47036, 47037, 47038, 47039, 47040, 47041, null, null, null, null, null, null, 47042, 47043, 47044, 47045, 47046, 47048, 47050, 47051, 47052, 47053, 47054, 47055, 47056, 47057, 47058, 47059, 47060, 47061, 47062, 47063, 47064, 47065, 47066, 47067, 47068, 47069, null, null, null, null, null, null, 47070, 47071, 47072, 47073, 47074, 47075, 47076, 47077, 47078, 47079, 47080, 47081, 47082, 47083, 47086, 47087, 47089, 47090, 47091, 47093, 47094, 47095, 47096, 47097, 47098, 47099, 47102, 47106, 47107, 47108, 47109, 47110, 47114, 47115, 47117, 47118, 47119, 47121, 47122, 47123, 47124, 47125, 47126, 47127, 47130, 47132, 47134, 47135, 47136, 47137, 47138, 47139, 47142, 47143, 47145, 47146, 47147, 47149, 47150, 47151, 47152, 47153, 47154, 47155, 47158, 47162, 47163, 47164, 47165, 47166, 47167, 47169, 47170, 47171, 47173, 47174, 47175, 47176, 47177, 47178, 47179, 47180, 47181, 47182, 47183, 47184, 47186, 47188, 47189, 47190, 47191, 47192, 47193, 47194, 47195, 47198, 47199, 47201, 47202, 47203, 47205, 47206, 47207, 47208, 47209, 47210, 47211, 47214, 47216, 47218, 47219, 47220, 47221, 47222, 47223, 47225, 47226, 47227, 47229, 47230, 47231, 47232, 47233, 47234, 47235, 47236, 47237, 47238, 47239, 47240, 47241, 47242, 47243, 47244, 47246, 47247, 47248, 47249, 47250, 47251, 47252, 47253, 47254, 47255, 47256, 47257, 47258, 47259, 47260, 47261, 47262, 47263, null, null, null, null, null, null, 47264, 47265, 47266, 47267, 47268, 47269, 47270, 47271, 47273, 47274, 47275, 47276, 47277, 47278, 47279, 47281, 47282, 47283, 47285, 47286, 47287, 47289, 47290, 47291, 47292, 47293, null, null, null, null, null, null, 47294, 47295, 47298, 47300, 47302, 47303, 47304, 47305, 47306, 47307, 47309, 47310, 47311, 47313, 47314, 47315, 47317, 47318, 47319, 47320, 47321, 47322, 47323, 47324, 47326, 47328, 47330, 47331, 47332, 47333, 47334, 47335, 47338, 47339, 47341, 47342, 47343, 47345, 47346, 47347, 47348, 47349, 47350, 47351, 47354, 47356, 47358, 47359, 47360, 47361, 47362, 47363, 47365, 47366, 47367, 47368, 47369, 47370, 47371, 47372, 47373, 47374, 47375, 47376, 47377, 47378, 47379, 47380, 47381, 47382, 47383, 47385, 47386, 47387, 47388, 47389, 47390, 47391, 47393, 47394, 47395, 47396, 47397, 47398, 47399, 47400, 47401, 47402, 47403, 47404, 47405, 47406, 47407, 47408, 47409, 47410, 47411, 47412, 47413, 47414, 47415, 47416, 47417, 47418, 47419, 47422, 47423, 47425, 47426, 47427, 47429, 47430, 47431, 47432, 47433, 47434, 47435, 47437, 47438, 47440, 47442, 47443, 47444, 47445, 47446, 47447, 47450, 47451, 47453, 47454, 47455, 47457, 47458, 47459, 47460, 47461, 47462, 47463, 47466, 47468, 47470, 47471, 47472, 47473, 47474, 47475, 47478, 47479, 47481, 47482, 47483, 47485, null, null, null, null, null, null, 47486, 47487, 47488, 47489, 47490, 47491, 47494, 47496, 47499, 47500, 47503, 47504, 47505, 47506, 47507, 47508, 47509, 47510, 47511, 47512, 47513, 47514, 47515, 47516, 47517, 47518, null, null, null, null, null, null, 47519, 47520, 47521, 47522, 47523, 47524, 47525, 47526, 47527, 47528, 47529, 47530, 47531, 47534, 47535, 47537, 47538, 47539, 47541, 47542, 47543, 47544, 47545, 47546, 47547, 47550, 47552, 47554, 47555, 47556, 47557, 47558, 47559, 47562, 47563, 47565, 47571, 47572, 47573, 47574, 47575, 47578, 47580, 47583, 47584, 47586, 47590, 47591, 47593, 47594, 47595, 47597, 47598, 47599, 47600, 47601, 47602, 47603, 47606, 47611, 47612, 47613, 47614, 47615, 47618, 47619, 47620, 47621, 47622, 47623, 47625, 47626, 47627, 47628, 47629, 47630, 47631, 47632, 47633, 47634, 47635, 47636, 47638, 47639, 47640, 47641, 47642, 47643, 47644, 47645, 47646, 47647, 47648, 47649, 47650, 47651, 47652, 47653, 47654, 47655, 47656, 47657, 47658, 47659, 47660, 47661, 47662, 47663, 47664, 47665, 47666, 47667, 47668, 47669, 47670, 47671, 47674, 47675, 47677, 47678, 47679, 47681, 47683, 47684, 47685, 47686, 47687, 47690, 47692, 47695, 47696, 47697, 47698, 47702, 47703, 47705, 47706, 47707, 47709, 47710, 47711, 47712, 47713, 47714, 47715, 47718, 47722, 47723, 47724, 47725, 47726, 47727, null, null, null, null, null, null, 47730, 47731, 47733, 47734, 47735, 47737, 47738, 47739, 47740, 47741, 47742, 47743, 47744, 47745, 47746, 47750, 47752, 47753, 47754, 47755, 47757, 47758, 47759, 47760, 47761, 47762, null, null, null, null, null, null, 47763, 47764, 47765, 47766, 47767, 47768, 47769, 47770, 47771, 47772, 47773, 47774, 47775, 47776, 47777, 47778, 47779, 47780, 47781, 47782, 47783, 47786, 47789, 47790, 47791, 47793, 47795, 47796, 47797, 47798, 47799, 47802, 47804, 47806, 47807, 47808, 47809, 47810, 47811, 47813, 47814, 47815, 47817, 47818, 47819, 47820, 47821, 47822, 47823, 47824, 47825, 47826, 47827, 47828, 47829, 47830, 47831, 47834, 47835, 47836, 47837, 47838, 47839, 47840, 47841, 47842, 47843, 47844, 47845, 47846, 47847, 47848, 47849, 47850, 47851, 47852, 47853, 47854, 47855, 47856, 47857, 47858, 47859, 47860, 47861, 47862, 47863, 47864, 47865, 47866, 47867, 47869, 47870, 47871, 47873, 47874, 47875, 47877, 47878, 47879, 47880, 47881, 47882, 47883, 47884, 47886, 47888, 47890, 47891, 47892, 47893, 47894, 47895, 47897, 47898, 47899, 47901, 47902, 47903, 47905, 47906, 47907, 47908, 47909, 47910, 47911, 47912, 47914, 47916, 47917, 47918, 47919, 47920, 47921, 47922, 47923, 47927, 47929, 47930, 47935, 47936, 47937, 47938, 47939, 47942, 47944, 47946, 47947, 47948, 47950, 47953, 47954, null, null, null, null, null, null, 47955, 47957, 47958, 47959, 47961, 47962, 47963, 47964, 47965, 47966, 47967, 47968, 47970, 47972, 47973, 47974, 47975, 47976, 47977, 47978, 47979, 47981, 47982, 47983, 47984, 47985, null, null, null, null, null, null, 47986, 47987, 47988, 47989, 47990, 47991, 47992, 47993, 47994, 47995, 47996, 47997, 47998, 47999, 48e3, 48001, 48002, 48003, 48004, 48005, 48006, 48007, 48009, 48010, 48011, 48013, 48014, 48015, 48017, 48018, 48019, 48020, 48021, 48022, 48023, 48024, 48025, 48026, 48027, 48028, 48029, 48030, 48031, 48032, 48033, 48034, 48035, 48037, 48038, 48039, 48041, 48042, 48043, 48045, 48046, 48047, 48048, 48049, 48050, 48051, 48053, 48054, 48056, 48057, 48058, 48059, 48060, 48061, 48062, 48063, 48065, 48066, 48067, 48069, 48070, 48071, 48073, 48074, 48075, 48076, 48077, 48078, 48079, 48081, 48082, 48084, 48085, 48086, 48087, 48088, 48089, 48090, 48091, 48092, 48093, 48094, 48095, 48096, 48097, 48098, 48099, 48100, 48101, 48102, 48103, 48104, 48105, 48106, 48107, 48108, 48109, 48110, 48111, 48112, 48113, 48114, 48115, 48116, 48117, 48118, 48119, 48122, 48123, 48125, 48126, 48129, 48131, 48132, 48133, 48134, 48135, 48138, 48142, 48144, 48146, 48147, 48153, 48154, 48160, 48161, 48162, 48163, 48166, 48168, 48170, 48171, 48172, 48174, 48175, 48178, 48179, 48181, null, null, null, null, null, null, 48182, 48183, 48185, 48186, 48187, 48188, 48189, 48190, 48191, 48194, 48198, 48199, 48200, 48202, 48203, 48206, 48207, 48209, 48210, 48211, 48212, 48213, 48214, 48215, 48216, 48217, null, null, null, null, null, null, 48218, 48219, 48220, 48222, 48223, 48224, 48225, 48226, 48227, 48228, 48229, 48230, 48231, 48232, 48233, 48234, 48235, 48236, 48237, 48238, 48239, 48240, 48241, 48242, 48243, 48244, 48245, 48246, 48247, 48248, 48249, 48250, 48251, 48252, 48253, 48254, 48255, 48256, 48257, 48258, 48259, 48262, 48263, 48265, 48266, 48269, 48271, 48272, 48273, 48274, 48275, 48278, 48280, 48283, 48284, 48285, 48286, 48287, 48290, 48291, 48293, 48294, 48297, 48298, 48299, 48300, 48301, 48302, 48303, 48306, 48310, 48311, 48312, 48313, 48314, 48315, 48318, 48319, 48321, 48322, 48323, 48325, 48326, 48327, 48328, 48329, 48330, 48331, 48332, 48334, 48338, 48339, 48340, 48342, 48343, 48345, 48346, 48347, 48349, 48350, 48351, 48352, 48353, 48354, 48355, 48356, 48357, 48358, 48359, 48360, 48361, 48362, 48363, 48364, 48365, 48366, 48367, 48368, 48369, 48370, 48371, 48375, 48377, 48378, 48379, 48381, 48382, 48383, 48384, 48385, 48386, 48387, 48390, 48392, 48394, 48395, 48396, 48397, 48398, 48399, 48401, 48402, 48403, 48405, 48406, 48407, 48408, 48409, 48410, 48411, 48412, 48413, null, null, null, null, null, null, 48414, 48415, 48416, 48417, 48418, 48419, 48421, 48422, 48423, 48424, 48425, 48426, 48427, 48429, 48430, 48431, 48432, 48433, 48434, 48435, 48436, 48437, 48438, 48439, 48440, 48441, null, null, null, null, null, null, 48442, 48443, 48444, 48445, 48446, 48447, 48449, 48450, 48451, 48452, 48453, 48454, 48455, 48458, 48459, 48461, 48462, 48463, 48465, 48466, 48467, 48468, 48469, 48470, 48471, 48474, 48475, 48476, 48477, 48478, 48479, 48480, 48481, 48482, 48483, 48485, 48486, 48487, 48489, 48490, 48491, 48492, 48493, 48494, 48495, 48496, 48497, 48498, 48499, 48500, 48501, 48502, 48503, 48504, 48505, 48506, 48507, 48508, 48509, 48510, 48511, 48514, 48515, 48517, 48518, 48523, 48524, 48525, 48526, 48527, 48530, 48532, 48534, 48535, 48536, 48539, 48541, 48542, 48543, 48544, 48545, 48546, 48547, 48549, 48550, 48551, 48552, 48553, 48554, 48555, 48556, 48557, 48558, 48559, 48561, 48562, 48563, 48564, 48565, 48566, 48567, 48569, 48570, 48571, 48572, 48573, 48574, 48575, 48576, 48577, 48578, 48579, 48580, 48581, 48582, 48583, 48584, 48585, 48586, 48587, 48588, 48589, 48590, 48591, 48592, 48593, 48594, 48595, 48598, 48599, 48601, 48602, 48603, 48605, 48606, 48607, 48608, 48609, 48610, 48611, 48612, 48613, 48614, 48615, 48616, 48618, 48619, 48620, 48621, 48622, 48623, 48625, null, null, null, null, null, null, 48626, 48627, 48629, 48630, 48631, 48633, 48634, 48635, 48636, 48637, 48638, 48639, 48641, 48642, 48644, 48646, 48647, 48648, 48649, 48650, 48651, 48654, 48655, 48657, 48658, 48659, null, null, null, null, null, null, 48661, 48662, 48663, 48664, 48665, 48666, 48667, 48670, 48672, 48673, 48674, 48675, 48676, 48677, 48678, 48679, 48680, 48681, 48682, 48683, 48684, 48685, 48686, 48687, 48688, 48689, 48690, 48691, 48692, 48693, 48694, 48695, 48696, 48697, 48698, 48699, 48700, 48701, 48702, 48703, 48704, 48705, 48706, 48707, 48710, 48711, 48713, 48714, 48715, 48717, 48719, 48720, 48721, 48722, 48723, 48726, 48728, 48732, 48733, 48734, 48735, 48738, 48739, 48741, 48742, 48743, 48745, 48747, 48748, 48749, 48750, 48751, 48754, 48758, 48759, 48760, 48761, 48762, 48766, 48767, 48769, 48770, 48771, 48773, 48774, 48775, 48776, 48777, 48778, 48779, 48782, 48786, 48787, 48788, 48789, 48790, 48791, 48794, 48795, 48796, 48797, 48798, 48799, 48800, 48801, 48802, 48803, 48804, 48805, 48806, 48807, 48809, 48810, 48811, 48812, 48813, 48814, 48815, 48816, 48817, 48818, 48819, 48820, 48821, 48822, 48823, 48824, 48825, 48826, 48827, 48828, 48829, 48830, 48831, 48832, 48833, 48834, 48835, 48836, 48837, 48838, 48839, 48840, 48841, 48842, 48843, 48844, 48845, 48846, 48847, 48850, 48851, null, null, null, null, null, null, 48853, 48854, 48857, 48858, 48859, 48860, 48861, 48862, 48863, 48865, 48866, 48870, 48871, 48872, 48873, 48874, 48875, 48877, 48878, 48879, 48880, 48881, 48882, 48883, 48884, 48885, null, null, null, null, null, null, 48886, 48887, 48888, 48889, 48890, 48891, 48892, 48893, 48894, 48895, 48896, 48898, 48899, 48900, 48901, 48902, 48903, 48906, 48907, 48908, 48909, 48910, 48911, 48912, 48913, 48914, 48915, 48916, 48917, 48918, 48919, 48922, 48926, 48927, 48928, 48929, 48930, 48931, 48932, 48933, 48934, 48935, 48936, 48937, 48938, 48939, 48940, 48941, 48942, 48943, 48944, 48945, 48946, 48947, 48948, 48949, 48950, 48951, 48952, 48953, 48954, 48955, 48956, 48957, 48958, 48959, 48962, 48963, 48965, 48966, 48967, 48969, 48970, 48971, 48972, 48973, 48974, 48975, 48978, 48979, 48980, 48982, 48983, 48984, 48985, 48986, 48987, 48988, 48989, 48990, 48991, 48992, 48993, 48994, 48995, 48996, 48997, 48998, 48999, 49e3, 49001, 49002, 49003, 49004, 49005, 49006, 49007, 49008, 49009, 49010, 49011, 49012, 49013, 49014, 49015, 49016, 49017, 49018, 49019, 49020, 49021, 49022, 49023, 49024, 49025, 49026, 49027, 49028, 49029, 49030, 49031, 49032, 49033, 49034, 49035, 49036, 49037, 49038, 49039, 49040, 49041, 49042, 49043, 49045, 49046, 49047, 49048, 49049, 49050, 49051, 49052, 49053, null, null, null, null, null, null, 49054, 49055, 49056, 49057, 49058, 49059, 49060, 49061, 49062, 49063, 49064, 49065, 49066, 49067, 49068, 49069, 49070, 49071, 49073, 49074, 49075, 49076, 49077, 49078, 49079, 49080, null, null, null, null, null, null, 49081, 49082, 49083, 49084, 49085, 49086, 49087, 49088, 49089, 49090, 49091, 49092, 49094, 49095, 49096, 49097, 49098, 49099, 49102, 49103, 49105, 49106, 49107, 49109, 49110, 49111, 49112, 49113, 49114, 49115, 49117, 49118, 49120, 49122, 49123, 49124, 49125, 49126, 49127, 49128, 49129, 49130, 49131, 49132, 49133, 49134, 49135, 49136, 49137, 49138, 49139, 49140, 49141, 49142, 49143, 49144, 49145, 49146, 49147, 49148, 49149, 49150, 49151, 49152, 49153, 49154, 49155, 49156, 49157, 49158, 49159, 49160, 49161, 49162, 49163, 49164, 49165, 49166, 49167, 49168, 49169, 49170, 49171, 49172, 49173, 49174, 49175, 49176, 49177, 49178, 49179, 49180, 49181, 49182, 49183, 49184, 49185, 49186, 49187, 49188, 49189, 49190, 49191, 49192, 49193, 49194, 49195, 49196, 49197, 49198, 49199, 49200, 49201, 49202, 49203, 49204, 49205, 49206, 49207, 49208, 49209, 49210, 49211, 49213, 49214, 49215, 49216, 49217, 49218, 49219, 49220, 49221, 49222, 49223, 49224, 49225, 49226, 49227, 49228, 49229, 49230, 49231, 49232, 49234, 49235, 49236, 49237, 49238, 49239, 49241, 49242, 49243, null, null, null, null, null, null, 49245, 49246, 49247, 49249, 49250, 49251, 49252, 49253, 49254, 49255, 49258, 49259, 49260, 49261, 49262, 49263, 49264, 49265, 49266, 49267, 49268, 49269, 49270, 49271, 49272, 49273, null, null, null, null, null, null, 49274, 49275, 49276, 49277, 49278, 49279, 49280, 49281, 49282, 49283, 49284, 49285, 49286, 49287, 49288, 49289, 49290, 49291, 49292, 49293, 49294, 49295, 49298, 49299, 49301, 49302, 49303, 49305, 49306, 49307, 49308, 49309, 49310, 49311, 49314, 49316, 49318, 49319, 49320, 49321, 49322, 49323, 49326, 49329, 49330, 49335, 49336, 49337, 49338, 49339, 49342, 49346, 49347, 49348, 49350, 49351, 49354, 49355, 49357, 49358, 49359, 49361, 49362, 49363, 49364, 49365, 49366, 49367, 49370, 49374, 49375, 49376, 49377, 49378, 49379, 49382, 49383, 49385, 49386, 49387, 49389, 49390, 49391, 49392, 49393, 49394, 49395, 49398, 49400, 49402, 49403, 49404, 49405, 49406, 49407, 49409, 49410, 49411, 49413, 49414, 49415, 49417, 49418, 49419, 49420, 49421, 49422, 49423, 49425, 49426, 49427, 49428, 49430, 49431, 49432, 49433, 49434, 49435, 49441, 49442, 49445, 49448, 49449, 49450, 49451, 49454, 49458, 49459, 49460, 49461, 49463, 49466, 49467, 49469, 49470, 49471, 49473, 49474, 49475, 49476, 49477, 49478, 49479, 49482, 49486, 49487, 49488, 49489, 49490, 49491, 49494, 49495, null, null, null, null, null, null, 49497, 49498, 49499, 49501, 49502, 49503, 49504, 49505, 49506, 49507, 49510, 49514, 49515, 49516, 49517, 49518, 49519, 49521, 49522, 49523, 49525, 49526, 49527, 49529, 49530, 49531, null, null, null, null, null, null, 49532, 49533, 49534, 49535, 49536, 49537, 49538, 49539, 49540, 49542, 49543, 49544, 49545, 49546, 49547, 49551, 49553, 49554, 49555, 49557, 49559, 49560, 49561, 49562, 49563, 49566, 49568, 49570, 49571, 49572, 49574, 49575, 49578, 49579, 49581, 49582, 49583, 49585, 49586, 49587, 49588, 49589, 49590, 49591, 49592, 49593, 49594, 49595, 49596, 49598, 49599, 49600, 49601, 49602, 49603, 49605, 49606, 49607, 49609, 49610, 49611, 49613, 49614, 49615, 49616, 49617, 49618, 49619, 49621, 49622, 49625, 49626, 49627, 49628, 49629, 49630, 49631, 49633, 49634, 49635, 49637, 49638, 49639, 49641, 49642, 49643, 49644, 49645, 49646, 49647, 49650, 49652, 49653, 49654, 49655, 49656, 49657, 49658, 49659, 49662, 49663, 49665, 49666, 49667, 49669, 49670, 49671, 49672, 49673, 49674, 49675, 49678, 49680, 49682, 49683, 49684, 49685, 49686, 49687, 49690, 49691, 49693, 49694, 49697, 49698, 49699, 49700, 49701, 49702, 49703, 49706, 49708, 49710, 49712, 49715, 49717, 49718, 49719, 49720, 49721, 49722, 49723, 49724, 49725, 49726, 49727, 49728, 49729, 49730, 49731, 49732, 49733, null, null, null, null, null, null, 49734, 49735, 49737, 49738, 49739, 49740, 49741, 49742, 49743, 49746, 49747, 49749, 49750, 49751, 49753, 49754, 49755, 49756, 49757, 49758, 49759, 49761, 49762, 49763, 49764, 49766, null, null, null, null, null, null, 49767, 49768, 49769, 49770, 49771, 49774, 49775, 49777, 49778, 49779, 49781, 49782, 49783, 49784, 49785, 49786, 49787, 49790, 49792, 49794, 49795, 49796, 49797, 49798, 49799, 49802, 49803, 49804, 49805, 49806, 49807, 49809, 49810, 49811, 49812, 49813, 49814, 49815, 49817, 49818, 49820, 49822, 49823, 49824, 49825, 49826, 49827, 49830, 49831, 49833, 49834, 49835, 49838, 49839, 49840, 49841, 49842, 49843, 49846, 49848, 49850, 49851, 49852, 49853, 49854, 49855, 49856, 49857, 49858, 49859, 49860, 49861, 49862, 49863, 49864, 49865, 49866, 49867, 49868, 49869, 49870, 49871, 49872, 49873, 49874, 49875, 49876, 49877, 49878, 49879, 49880, 49881, 49882, 49883, 49886, 49887, 49889, 49890, 49893, 49894, 49895, 49896, 49897, 49898, 49902, 49904, 49906, 49907, 49908, 49909, 49911, 49914, 49917, 49918, 49919, 49921, 49922, 49923, 49924, 49925, 49926, 49927, 49930, 49931, 49934, 49935, 49936, 49937, 49938, 49942, 49943, 49945, 49946, 49947, 49949, 49950, 49951, 49952, 49953, 49954, 49955, 49958, 49959, 49962, 49963, 49964, 49965, 49966, 49967, 49968, 49969, 49970, null, null, null, null, null, null, 49971, 49972, 49973, 49974, 49975, 49976, 49977, 49978, 49979, 49980, 49981, 49982, 49983, 49984, 49985, 49986, 49987, 49988, 49990, 49991, 49992, 49993, 49994, 49995, 49996, 49997, null, null, null, null, null, null, 49998, 49999, 5e4, 50001, 50002, 50003, 50004, 50005, 50006, 50007, 50008, 50009, 50010, 50011, 50012, 50013, 50014, 50015, 50016, 50017, 50018, 50019, 50020, 50021, 50022, 50023, 50026, 50027, 50029, 50030, 50031, 50033, 50035, 50036, 50037, 50038, 50039, 50042, 50043, 50046, 50047, 50048, 50049, 50050, 50051, 50053, 50054, 50055, 50057, 50058, 50059, 50061, 50062, 50063, 50064, 50065, 50066, 50067, 50068, 50069, 50070, 50071, 50072, 50073, 50074, 50075, 50076, 50077, 50078, 50079, 50080, 50081, 50082, 50083, 50084, 50085, 50086, 50087, 50088, 50089, 50090, 50091, 50092, 50093, 50094, 50095, 50096, 50097, 50098, 50099, 50100, 50101, 50102, 50103, 50104, 50105, 50106, 50107, 50108, 50109, 50110, 50111, 50113, 50114, 50115, 50116, 50117, 50118, 50119, 50120, 50121, 50122, 50123, 50124, 50125, 50126, 50127, 50128, 50129, 50130, 50131, 50132, 50133, 50134, 50135, 50138, 50139, 50141, 50142, 50145, 50147, 50148, 50149, 50150, 50151, 50154, 50155, 50156, 50158, 50159, 50160, 50161, 50162, 50163, 50166, 50167, 50169, 50170, 50171, 50172, 50173, 50174, null, null, null, null, null, null, 50175, 50176, 50177, 50178, 50179, 50180, 50181, 50182, 50183, 50185, 50186, 50187, 50188, 50189, 50190, 50191, 50193, 50194, 50195, 50196, 50197, 50198, 50199, 50200, 50201, 50202, null, null, null, null, null, null, 50203, 50204, 50205, 50206, 50207, 50208, 50209, 50210, 50211, 50213, 50214, 50215, 50216, 50217, 50218, 50219, 50221, 50222, 50223, 50225, 50226, 50227, 50229, 50230, 50231, 50232, 50233, 50234, 50235, 50238, 50239, 50240, 50241, 50242, 50243, 50244, 50245, 50246, 50247, 50249, 50250, 50251, 50252, 50253, 50254, 50255, 50256, 50257, 50258, 50259, 50260, 50261, 50262, 50263, 50264, 50265, 50266, 50267, 50268, 50269, 50270, 50271, 50272, 50273, 50274, 50275, 50278, 50279, 50281, 50282, 50283, 50285, 50286, 50287, 50288, 50289, 50290, 50291, 50294, 50295, 50296, 50298, 50299, 50300, 50301, 50302, 50303, 50305, 50306, 50307, 50308, 50309, 50310, 50311, 50312, 50313, 50314, 50315, 50316, 50317, 50318, 50319, 50320, 50321, 50322, 50323, 50325, 50326, 50327, 50328, 50329, 50330, 50331, 50333, 50334, 50335, 50336, 50337, 50338, 50339, 50340, 50341, 50342, 50343, 50344, 50345, 50346, 50347, 50348, 50349, 50350, 50351, 50352, 50353, 50354, 50355, 50356, 50357, 50358, 50359, 50361, 50362, 50363, 50365, 50366, 50367, 50368, 50369, 50370, 50371, 50372, 50373, null, null, null, null, null, null, 50374, 50375, 50376, 50377, 50378, 50379, 50380, 50381, 50382, 50383, 50384, 50385, 50386, 50387, 50388, 50389, 50390, 50391, 50392, 50393, 50394, 50395, 50396, 50397, 50398, 50399, null, null, null, null, null, null, 50400, 50401, 50402, 50403, 50404, 50405, 50406, 50407, 50408, 50410, 50411, 50412, 50413, 50414, 50415, 50418, 50419, 50421, 50422, 50423, 50425, 50427, 50428, 50429, 50430, 50434, 50435, 50436, 50437, 50438, 50439, 50440, 50441, 50442, 50443, 50445, 50446, 50447, 50449, 50450, 50451, 50453, 50454, 50455, 50456, 50457, 50458, 50459, 50461, 50462, 50463, 50464, 50465, 50466, 50467, 50468, 50469, 50470, 50471, 50474, 50475, 50477, 50478, 50479, 50481, 50482, 50483, 50484, 50485, 50486, 50487, 50490, 50492, 50494, 50495, 50496, 50497, 50498, 50499, 50502, 50503, 50507, 50511, 50512, 50513, 50514, 50518, 50522, 50523, 50524, 50527, 50530, 50531, 50533, 50534, 50535, 50537, 50538, 50539, 50540, 50541, 50542, 50543, 50546, 50550, 50551, 50552, 50553, 50554, 50555, 50558, 50559, 50561, 50562, 50563, 50565, 50566, 50568, 50569, 50570, 50571, 50574, 50576, 50578, 50579, 50580, 50582, 50585, 50586, 50587, 50589, 50590, 50591, 50593, 50594, 50595, 50596, 50597, 50598, 50599, 50600, 50602, 50603, 50604, 50605, 50606, 50607, 50608, 50609, 50610, 50611, 50614, null, null, null, null, null, null, 50615, 50618, 50623, 50624, 50625, 50626, 50627, 50635, 50637, 50639, 50642, 50643, 50645, 50646, 50647, 50649, 50650, 50651, 50652, 50653, 50654, 50655, 50658, 50660, 50662, 50663, null, null, null, null, null, null, 50664, 50665, 50666, 50667, 50671, 50673, 50674, 50675, 50677, 50680, 50681, 50682, 50683, 50690, 50691, 50692, 50697, 50698, 50699, 50701, 50702, 50703, 50705, 50706, 50707, 50708, 50709, 50710, 50711, 50714, 50717, 50718, 50719, 50720, 50721, 50722, 50723, 50726, 50727, 50729, 50730, 50731, 50735, 50737, 50738, 50742, 50744, 50746, 50748, 50749, 50750, 50751, 50754, 50755, 50757, 50758, 50759, 50761, 50762, 50763, 50764, 50765, 50766, 50767, 50770, 50774, 50775, 50776, 50777, 50778, 50779, 50782, 50783, 50785, 50786, 50787, 50788, 50789, 50790, 50791, 50792, 50793, 50794, 50795, 50797, 50798, 50800, 50802, 50803, 50804, 50805, 50806, 50807, 50810, 50811, 50813, 50814, 50815, 50817, 50818, 50819, 50820, 50821, 50822, 50823, 50826, 50828, 50830, 50831, 50832, 50833, 50834, 50835, 50838, 50839, 50841, 50842, 50843, 50845, 50846, 50847, 50848, 50849, 50850, 50851, 50854, 50856, 50858, 50859, 50860, 50861, 50862, 50863, 50866, 50867, 50869, 50870, 50871, 50875, 50876, 50877, 50878, 50879, 50882, 50884, 50886, 50887, 50888, 50889, 50890, 50891, 50894, null, null, null, null, null, null, 50895, 50897, 50898, 50899, 50901, 50902, 50903, 50904, 50905, 50906, 50907, 50910, 50911, 50914, 50915, 50916, 50917, 50918, 50919, 50922, 50923, 50925, 50926, 50927, 50929, 50930, null, null, null, null, null, null, 50931, 50932, 50933, 50934, 50935, 50938, 50939, 50940, 50942, 50943, 50944, 50945, 50946, 50947, 50950, 50951, 50953, 50954, 50955, 50957, 50958, 50959, 50960, 50961, 50962, 50963, 50966, 50968, 50970, 50971, 50972, 50973, 50974, 50975, 50978, 50979, 50981, 50982, 50983, 50985, 50986, 50987, 50988, 50989, 50990, 50991, 50994, 50996, 50998, 51e3, 51001, 51002, 51003, 51006, 51007, 51009, 51010, 51011, 51013, 51014, 51015, 51016, 51017, 51019, 51022, 51024, 51033, 51034, 51035, 51037, 51038, 51039, 51041, 51042, 51043, 51044, 51045, 51046, 51047, 51049, 51050, 51052, 51053, 51054, 51055, 51056, 51057, 51058, 51059, 51062, 51063, 51065, 51066, 51067, 51071, 51072, 51073, 51074, 51078, 51083, 51084, 51085, 51087, 51090, 51091, 51093, 51097, 51099, 51100, 51101, 51102, 51103, 51106, 51111, 51112, 51113, 51114, 51115, 51118, 51119, 51121, 51122, 51123, 51125, 51126, 51127, 51128, 51129, 51130, 51131, 51134, 51138, 51139, 51140, 51141, 51142, 51143, 51146, 51147, 51149, 51151, 51153, 51154, 51155, 51156, 51157, 51158, 51159, 51161, 51162, 51163, 51164, null, null, null, null, null, null, 51166, 51167, 51168, 51169, 51170, 51171, 51173, 51174, 51175, 51177, 51178, 51179, 51181, 51182, 51183, 51184, 51185, 51186, 51187, 51188, 51189, 51190, 51191, 51192, 51193, 51194, null, null, null, null, null, null, 51195, 51196, 51197, 51198, 51199, 51202, 51203, 51205, 51206, 51207, 51209, 51211, 51212, 51213, 51214, 51215, 51218, 51220, 51223, 51224, 51225, 51226, 51227, 51230, 51231, 51233, 51234, 51235, 51237, 51238, 51239, 51240, 51241, 51242, 51243, 51246, 51248, 51250, 51251, 51252, 51253, 51254, 51255, 51257, 51258, 51259, 51261, 51262, 51263, 51265, 51266, 51267, 51268, 51269, 51270, 51271, 51274, 51275, 51278, 51279, 51280, 51281, 51282, 51283, 51285, 51286, 51287, 51288, 51289, 51290, 51291, 51292, 51293, 51294, 51295, 51296, 51297, 51298, 51299, 51300, 51301, 51302, 51303, 51304, 51305, 51306, 51307, 51308, 51309, 51310, 51311, 51314, 51315, 51317, 51318, 51319, 51321, 51323, 51324, 51325, 51326, 51327, 51330, 51332, 51336, 51337, 51338, 51342, 51343, 51344, 51345, 51346, 51347, 51349, 51350, 51351, 51352, 51353, 51354, 51355, 51356, 51358, 51360, 51362, 51363, 51364, 51365, 51366, 51367, 51369, 51370, 51371, 51372, 51373, 51374, 51375, 51376, 51377, 51378, 51379, 51380, 51381, 51382, 51383, 51384, 51385, 51386, 51387, 51390, 51391, 51392, 51393, null, null, null, null, null, null, 51394, 51395, 51397, 51398, 51399, 51401, 51402, 51403, 51405, 51406, 51407, 51408, 51409, 51410, 51411, 51414, 51416, 51418, 51419, 51420, 51421, 51422, 51423, 51426, 51427, 51429, null, null, null, null, null, null, 51430, 51431, 51432, 51433, 51434, 51435, 51436, 51437, 51438, 51439, 51440, 51441, 51442, 51443, 51444, 51446, 51447, 51448, 51449, 51450, 51451, 51454, 51455, 51457, 51458, 51459, 51463, 51464, 51465, 51466, 51467, 51470, 12288, 12289, 12290, 183, 8229, 8230, 168, 12291, 173, 8213, 8741, 65340, 8764, 8216, 8217, 8220, 8221, 12308, 12309, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 177, 215, 247, 8800, 8804, 8805, 8734, 8756, 176, 8242, 8243, 8451, 8491, 65504, 65505, 65509, 9794, 9792, 8736, 8869, 8978, 8706, 8711, 8801, 8786, 167, 8251, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8594, 8592, 8593, 8595, 8596, 12307, 8810, 8811, 8730, 8765, 8733, 8757, 8747, 8748, 8712, 8715, 8838, 8839, 8834, 8835, 8746, 8745, 8743, 8744, 65506, 51472, 51474, 51475, 51476, 51477, 51478, 51479, 51481, 51482, 51483, 51484, 51485, 51486, 51487, 51488, 51489, 51490, 51491, 51492, 51493, 51494, 51495, 51496, 51497, 51498, 51499, null, null, null, null, null, null, 51501, 51502, 51503, 51504, 51505, 51506, 51507, 51509, 51510, 51511, 51512, 51513, 51514, 51515, 51516, 51517, 51518, 51519, 51520, 51521, 51522, 51523, 51524, 51525, 51526, 51527, null, null, null, null, null, null, 51528, 51529, 51530, 51531, 51532, 51533, 51534, 51535, 51538, 51539, 51541, 51542, 51543, 51545, 51546, 51547, 51548, 51549, 51550, 51551, 51554, 51556, 51557, 51558, 51559, 51560, 51561, 51562, 51563, 51565, 51566, 51567, 8658, 8660, 8704, 8707, 180, 65374, 711, 728, 733, 730, 729, 184, 731, 161, 191, 720, 8750, 8721, 8719, 164, 8457, 8240, 9665, 9664, 9655, 9654, 9828, 9824, 9825, 9829, 9831, 9827, 8857, 9672, 9635, 9680, 9681, 9618, 9636, 9637, 9640, 9639, 9638, 9641, 9832, 9743, 9742, 9756, 9758, 182, 8224, 8225, 8597, 8599, 8601, 8598, 8600, 9837, 9833, 9834, 9836, 12927, 12828, 8470, 13255, 8482, 13250, 13272, 8481, 8364, 174, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 51569, 51570, 51571, 51573, 51574, 51575, 51576, 51577, 51578, 51579, 51581, 51582, 51583, 51584, 51585, 51586, 51587, 51588, 51589, 51590, 51591, 51594, 51595, 51597, 51598, 51599, null, null, null, null, null, null, 51601, 51602, 51603, 51604, 51605, 51606, 51607, 51610, 51612, 51614, 51615, 51616, 51617, 51618, 51619, 51620, 51621, 51622, 51623, 51624, 51625, 51626, 51627, 51628, 51629, 51630, null, null, null, null, null, null, 51631, 51632, 51633, 51634, 51635, 51636, 51637, 51638, 51639, 51640, 51641, 51642, 51643, 51644, 51645, 51646, 51647, 51650, 51651, 51653, 51654, 51657, 51659, 51660, 51661, 51662, 51663, 51666, 51668, 51671, 51672, 51675, 65281, 65282, 65283, 65284, 65285, 65286, 65287, 65288, 65289, 65290, 65291, 65292, 65293, 65294, 65295, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65306, 65307, 65308, 65309, 65310, 65311, 65312, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65339, 65510, 65341, 65342, 65343, 65344, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 65371, 65372, 65373, 65507, 51678, 51679, 51681, 51683, 51685, 51686, 51688, 51689, 51690, 51691, 51694, 51698, 51699, 51700, 51701, 51702, 51703, 51706, 51707, 51709, 51710, 51711, 51713, 51714, 51715, 51716, null, null, null, null, null, null, 51717, 51718, 51719, 51722, 51726, 51727, 51728, 51729, 51730, 51731, 51733, 51734, 51735, 51737, 51738, 51739, 51740, 51741, 51742, 51743, 51744, 51745, 51746, 51747, 51748, 51749, null, null, null, null, null, null, 51750, 51751, 51752, 51754, 51755, 51756, 51757, 51758, 51759, 51760, 51761, 51762, 51763, 51764, 51765, 51766, 51767, 51768, 51769, 51770, 51771, 51772, 51773, 51774, 51775, 51776, 51777, 51778, 51779, 51780, 51781, 51782, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 12644, 12645, 12646, 12647, 12648, 12649, 12650, 12651, 12652, 12653, 12654, 12655, 12656, 12657, 12658, 12659, 12660, 12661, 12662, 12663, 12664, 12665, 12666, 12667, 12668, 12669, 12670, 12671, 12672, 12673, 12674, 12675, 12676, 12677, 12678, 12679, 12680, 12681, 12682, 12683, 12684, 12685, 12686, 51783, 51784, 51785, 51786, 51787, 51790, 51791, 51793, 51794, 51795, 51797, 51798, 51799, 51800, 51801, 51802, 51803, 51806, 51810, 51811, 51812, 51813, 51814, 51815, 51817, 51818, null, null, null, null, null, null, 51819, 51820, 51821, 51822, 51823, 51824, 51825, 51826, 51827, 51828, 51829, 51830, 51831, 51832, 51833, 51834, 51835, 51836, 51838, 51839, 51840, 51841, 51842, 51843, 51845, 51846, null, null, null, null, null, null, 51847, 51848, 51849, 51850, 51851, 51852, 51853, 51854, 51855, 51856, 51857, 51858, 51859, 51860, 51861, 51862, 51863, 51865, 51866, 51867, 51868, 51869, 51870, 51871, 51872, 51873, 51874, 51875, 51876, 51877, 51878, 51879, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, null, null, null, null, null, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, null, null, null, null, null, null, null, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, null, null, null, null, null, null, null, null, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, null, null, null, null, null, null, 51880, 51881, 51882, 51883, 51884, 51885, 51886, 51887, 51888, 51889, 51890, 51891, 51892, 51893, 51894, 51895, 51896, 51897, 51898, 51899, 51902, 51903, 51905, 51906, 51907, 51909, null, null, null, null, null, null, 51910, 51911, 51912, 51913, 51914, 51915, 51918, 51920, 51922, 51924, 51925, 51926, 51927, 51930, 51931, 51932, 51933, 51934, 51935, 51937, 51938, 51939, 51940, 51941, 51942, 51943, null, null, null, null, null, null, 51944, 51945, 51946, 51947, 51949, 51950, 51951, 51952, 51953, 51954, 51955, 51957, 51958, 51959, 51960, 51961, 51962, 51963, 51964, 51965, 51966, 51967, 51968, 51969, 51970, 51971, 51972, 51973, 51974, 51975, 51977, 51978, 9472, 9474, 9484, 9488, 9496, 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475, 9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, 9547, 9504, 9519, 9512, 9527, 9535, 9501, 9520, 9509, 9528, 9538, 9490, 9489, 9498, 9497, 9494, 9493, 9486, 9485, 9502, 9503, 9505, 9506, 9510, 9511, 9513, 9514, 9517, 9518, 9521, 9522, 9525, 9526, 9529, 9530, 9533, 9534, 9536, 9537, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 51979, 51980, 51981, 51982, 51983, 51985, 51986, 51987, 51989, 51990, 51991, 51993, 51994, 51995, 51996, 51997, 51998, 51999, 52002, 52003, 52004, 52005, 52006, 52007, 52008, 52009, null, null, null, null, null, null, 52010, 52011, 52012, 52013, 52014, 52015, 52016, 52017, 52018, 52019, 52020, 52021, 52022, 52023, 52024, 52025, 52026, 52027, 52028, 52029, 52030, 52031, 52032, 52034, 52035, 52036, null, null, null, null, null, null, 52037, 52038, 52039, 52042, 52043, 52045, 52046, 52047, 52049, 52050, 52051, 52052, 52053, 52054, 52055, 52058, 52059, 52060, 52062, 52063, 52064, 52065, 52066, 52067, 52069, 52070, 52071, 52072, 52073, 52074, 52075, 52076, 13205, 13206, 13207, 8467, 13208, 13252, 13219, 13220, 13221, 13222, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217, 13218, 13258, 13197, 13198, 13199, 13263, 13192, 13193, 13256, 13223, 13224, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240, 13241, 13184, 13185, 13186, 13187, 13188, 13242, 13243, 13244, 13245, 13246, 13247, 13200, 13201, 13202, 13203, 13204, 8486, 13248, 13249, 13194, 13195, 13196, 13270, 13253, 13229, 13230, 13231, 13275, 13225, 13226, 13227, 13228, 13277, 13264, 13267, 13251, 13257, 13276, 13254, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52077, 52078, 52079, 52080, 52081, 52082, 52083, 52084, 52085, 52086, 52087, 52090, 52091, 52092, 52093, 52094, 52095, 52096, 52097, 52098, 52099, 52100, 52101, 52102, 52103, 52104, null, null, null, null, null, null, 52105, 52106, 52107, 52108, 52109, 52110, 52111, 52112, 52113, 52114, 52115, 52116, 52117, 52118, 52119, 52120, 52121, 52122, 52123, 52125, 52126, 52127, 52128, 52129, 52130, 52131, null, null, null, null, null, null, 52132, 52133, 52134, 52135, 52136, 52137, 52138, 52139, 52140, 52141, 52142, 52143, 52144, 52145, 52146, 52147, 52148, 52149, 52150, 52151, 52153, 52154, 52155, 52156, 52157, 52158, 52159, 52160, 52161, 52162, 52163, 52164, 198, 208, 170, 294, null, 306, null, 319, 321, 216, 338, 186, 222, 358, 330, null, 12896, 12897, 12898, 12899, 12900, 12901, 12902, 12903, 12904, 12905, 12906, 12907, 12908, 12909, 12910, 12911, 12912, 12913, 12914, 12915, 12916, 12917, 12918, 12919, 12920, 12921, 12922, 12923, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 189, 8531, 8532, 188, 190, 8539, 8540, 8541, 8542, 52165, 52166, 52167, 52168, 52169, 52170, 52171, 52172, 52173, 52174, 52175, 52176, 52177, 52178, 52179, 52181, 52182, 52183, 52184, 52185, 52186, 52187, 52188, 52189, 52190, 52191, null, null, null, null, null, null, 52192, 52193, 52194, 52195, 52197, 52198, 52200, 52202, 52203, 52204, 52205, 52206, 52207, 52208, 52209, 52210, 52211, 52212, 52213, 52214, 52215, 52216, 52217, 52218, 52219, 52220, null, null, null, null, null, null, 52221, 52222, 52223, 52224, 52225, 52226, 52227, 52228, 52229, 52230, 52231, 52232, 52233, 52234, 52235, 52238, 52239, 52241, 52242, 52243, 52245, 52246, 52247, 52248, 52249, 52250, 52251, 52254, 52255, 52256, 52259, 52260, 230, 273, 240, 295, 305, 307, 312, 320, 322, 248, 339, 223, 254, 359, 331, 329, 12800, 12801, 12802, 12803, 12804, 12805, 12806, 12807, 12808, 12809, 12810, 12811, 12812, 12813, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12822, 12823, 12824, 12825, 12826, 12827, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 185, 178, 179, 8308, 8319, 8321, 8322, 8323, 8324, 52261, 52262, 52266, 52267, 52269, 52271, 52273, 52274, 52275, 52276, 52277, 52278, 52279, 52282, 52287, 52288, 52289, 52290, 52291, 52294, 52295, 52297, 52298, 52299, 52301, 52302, null, null, null, null, null, null, 52303, 52304, 52305, 52306, 52307, 52310, 52314, 52315, 52316, 52317, 52318, 52319, 52321, 52322, 52323, 52325, 52327, 52329, 52330, 52331, 52332, 52333, 52334, 52335, 52337, 52338, null, null, null, null, null, null, 52339, 52340, 52342, 52343, 52344, 52345, 52346, 52347, 52348, 52349, 52350, 52351, 52352, 52353, 52354, 52355, 52356, 52357, 52358, 52359, 52360, 52361, 52362, 52363, 52364, 52365, 52366, 52367, 52368, 52369, 52370, 52371, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, null, null, null, null, null, null, null, null, null, null, null, 52372, 52373, 52374, 52375, 52378, 52379, 52381, 52382, 52383, 52385, 52386, 52387, 52388, 52389, 52390, 52391, 52394, 52398, 52399, 52400, 52401, 52402, 52403, 52406, 52407, 52409, null, null, null, null, null, null, 52410, 52411, 52413, 52414, 52415, 52416, 52417, 52418, 52419, 52422, 52424, 52426, 52427, 52428, 52429, 52430, 52431, 52433, 52434, 52435, 52437, 52438, 52439, 52440, 52441, 52442, null, null, null, null, null, null, 52443, 52444, 52445, 52446, 52447, 52448, 52449, 52450, 52451, 52453, 52454, 52455, 52456, 52457, 52458, 52459, 52461, 52462, 52463, 52465, 52466, 52467, 52468, 52469, 52470, 52471, 52472, 52473, 52474, 52475, 52476, 52477, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, null, null, null, null, null, null, null, null, 52478, 52479, 52480, 52482, 52483, 52484, 52485, 52486, 52487, 52490, 52491, 52493, 52494, 52495, 52497, 52498, 52499, 52500, 52501, 52502, 52503, 52506, 52508, 52510, 52511, 52512, null, null, null, null, null, null, 52513, 52514, 52515, 52517, 52518, 52519, 52521, 52522, 52523, 52525, 52526, 52527, 52528, 52529, 52530, 52531, 52532, 52533, 52534, 52535, 52536, 52538, 52539, 52540, 52541, 52542, null, null, null, null, null, null, 52543, 52544, 52545, 52546, 52547, 52548, 52549, 52550, 52551, 52552, 52553, 52554, 52555, 52556, 52557, 52558, 52559, 52560, 52561, 52562, 52563, 52564, 52565, 52566, 52567, 52568, 52569, 52570, 52571, 52573, 52574, 52575, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, null, null, null, null, null, null, null, null, null, null, null, null, null, 52577, 52578, 52579, 52581, 52582, 52583, 52584, 52585, 52586, 52587, 52590, 52592, 52594, 52595, 52596, 52597, 52598, 52599, 52601, 52602, 52603, 52604, 52605, 52606, 52607, 52608, null, null, null, null, null, null, 52609, 52610, 52611, 52612, 52613, 52614, 52615, 52617, 52618, 52619, 52620, 52621, 52622, 52623, 52624, 52625, 52626, 52627, 52630, 52631, 52633, 52634, 52635, 52637, 52638, 52639, null, null, null, null, null, null, 52640, 52641, 52642, 52643, 52646, 52648, 52650, 52651, 52652, 52653, 52654, 52655, 52657, 52658, 52659, 52660, 52661, 52662, 52663, 52664, 52665, 52666, 52667, 52668, 52669, 52670, 52671, 52672, 52673, 52674, 52675, 52677, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52678, 52679, 52680, 52681, 52682, 52683, 52685, 52686, 52687, 52689, 52690, 52691, 52692, 52693, 52694, 52695, 52696, 52697, 52698, 52699, 52700, 52701, 52702, 52703, 52704, 52705, null, null, null, null, null, null, 52706, 52707, 52708, 52709, 52710, 52711, 52713, 52714, 52715, 52717, 52718, 52719, 52721, 52722, 52723, 52724, 52725, 52726, 52727, 52730, 52732, 52734, 52735, 52736, 52737, 52738, null, null, null, null, null, null, 52739, 52741, 52742, 52743, 52745, 52746, 52747, 52749, 52750, 52751, 52752, 52753, 52754, 52755, 52757, 52758, 52759, 52760, 52762, 52763, 52764, 52765, 52766, 52767, 52770, 52771, 52773, 52774, 52775, 52777, 52778, 52779, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52780, 52781, 52782, 52783, 52786, 52788, 52790, 52791, 52792, 52793, 52794, 52795, 52796, 52797, 52798, 52799, 52800, 52801, 52802, 52803, 52804, 52805, 52806, 52807, 52808, 52809, null, null, null, null, null, null, 52810, 52811, 52812, 52813, 52814, 52815, 52816, 52817, 52818, 52819, 52820, 52821, 52822, 52823, 52826, 52827, 52829, 52830, 52834, 52835, 52836, 52837, 52838, 52839, 52842, 52844, null, null, null, null, null, null, 52846, 52847, 52848, 52849, 52850, 52851, 52854, 52855, 52857, 52858, 52859, 52861, 52862, 52863, 52864, 52865, 52866, 52867, 52870, 52872, 52874, 52875, 52876, 52877, 52878, 52879, 52882, 52883, 52885, 52886, 52887, 52889, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52890, 52891, 52892, 52893, 52894, 52895, 52898, 52902, 52903, 52904, 52905, 52906, 52907, 52910, 52911, 52912, 52913, 52914, 52915, 52916, 52917, 52918, 52919, 52920, 52921, 52922, null, null, null, null, null, null, 52923, 52924, 52925, 52926, 52927, 52928, 52930, 52931, 52932, 52933, 52934, 52935, 52936, 52937, 52938, 52939, 52940, 52941, 52942, 52943, 52944, 52945, 52946, 52947, 52948, 52949, null, null, null, null, null, null, 52950, 52951, 52952, 52953, 52954, 52955, 52956, 52957, 52958, 52959, 52960, 52961, 52962, 52963, 52966, 52967, 52969, 52970, 52973, 52974, 52975, 52976, 52977, 52978, 52979, 52982, 52986, 52987, 52988, 52989, 52990, 52991, 44032, 44033, 44036, 44039, 44040, 44041, 44042, 44048, 44049, 44050, 44051, 44052, 44053, 44054, 44055, 44057, 44058, 44059, 44060, 44061, 44064, 44068, 44076, 44077, 44079, 44080, 44081, 44088, 44089, 44092, 44096, 44107, 44109, 44116, 44120, 44124, 44144, 44145, 44148, 44151, 44152, 44154, 44160, 44161, 44163, 44164, 44165, 44166, 44169, 44170, 44171, 44172, 44176, 44180, 44188, 44189, 44191, 44192, 44193, 44200, 44201, 44202, 44204, 44207, 44208, 44216, 44217, 44219, 44220, 44221, 44225, 44228, 44232, 44236, 44245, 44247, 44256, 44257, 44260, 44263, 44264, 44266, 44268, 44271, 44272, 44273, 44275, 44277, 44278, 44284, 44285, 44288, 44292, 44294, 52994, 52995, 52997, 52998, 52999, 53001, 53002, 53003, 53004, 53005, 53006, 53007, 53010, 53012, 53014, 53015, 53016, 53017, 53018, 53019, 53021, 53022, 53023, 53025, 53026, 53027, null, null, null, null, null, null, 53029, 53030, 53031, 53032, 53033, 53034, 53035, 53038, 53042, 53043, 53044, 53045, 53046, 53047, 53049, 53050, 53051, 53052, 53053, 53054, 53055, 53056, 53057, 53058, 53059, 53060, null, null, null, null, null, null, 53061, 53062, 53063, 53064, 53065, 53066, 53067, 53068, 53069, 53070, 53071, 53072, 53073, 53074, 53075, 53078, 53079, 53081, 53082, 53083, 53085, 53086, 53087, 53088, 53089, 53090, 53091, 53094, 53096, 53098, 53099, 53100, 44300, 44301, 44303, 44305, 44312, 44316, 44320, 44329, 44332, 44333, 44340, 44341, 44344, 44348, 44356, 44357, 44359, 44361, 44368, 44372, 44376, 44385, 44387, 44396, 44397, 44400, 44403, 44404, 44405, 44406, 44411, 44412, 44413, 44415, 44417, 44418, 44424, 44425, 44428, 44432, 44444, 44445, 44452, 44471, 44480, 44481, 44484, 44488, 44496, 44497, 44499, 44508, 44512, 44516, 44536, 44537, 44540, 44543, 44544, 44545, 44552, 44553, 44555, 44557, 44564, 44592, 44593, 44596, 44599, 44600, 44602, 44608, 44609, 44611, 44613, 44614, 44618, 44620, 44621, 44622, 44624, 44628, 44630, 44636, 44637, 44639, 44640, 44641, 44645, 44648, 44649, 44652, 44656, 44664, 53101, 53102, 53103, 53106, 53107, 53109, 53110, 53111, 53113, 53114, 53115, 53116, 53117, 53118, 53119, 53121, 53122, 53123, 53124, 53126, 53127, 53128, 53129, 53130, 53131, 53133, null, null, null, null, null, null, 53134, 53135, 53136, 53137, 53138, 53139, 53140, 53141, 53142, 53143, 53144, 53145, 53146, 53147, 53148, 53149, 53150, 53151, 53152, 53154, 53155, 53156, 53157, 53158, 53159, 53161, null, null, null, null, null, null, 53162, 53163, 53164, 53165, 53166, 53167, 53169, 53170, 53171, 53172, 53173, 53174, 53175, 53176, 53177, 53178, 53179, 53180, 53181, 53182, 53183, 53184, 53185, 53186, 53187, 53189, 53190, 53191, 53192, 53193, 53194, 53195, 44665, 44667, 44668, 44669, 44676, 44677, 44684, 44732, 44733, 44734, 44736, 44740, 44748, 44749, 44751, 44752, 44753, 44760, 44761, 44764, 44776, 44779, 44781, 44788, 44792, 44796, 44807, 44808, 44813, 44816, 44844, 44845, 44848, 44850, 44852, 44860, 44861, 44863, 44865, 44866, 44867, 44872, 44873, 44880, 44892, 44893, 44900, 44901, 44921, 44928, 44932, 44936, 44944, 44945, 44949, 44956, 44984, 44985, 44988, 44992, 44999, 45e3, 45001, 45003, 45005, 45006, 45012, 45020, 45032, 45033, 45040, 45041, 45044, 45048, 45056, 45057, 45060, 45068, 45072, 45076, 45084, 45085, 45096, 45124, 45125, 45128, 45130, 45132, 45134, 45139, 45140, 45141, 45143, 45145, 53196, 53197, 53198, 53199, 53200, 53201, 53202, 53203, 53204, 53205, 53206, 53207, 53208, 53209, 53210, 53211, 53212, 53213, 53214, 53215, 53218, 53219, 53221, 53222, 53223, 53225, null, null, null, null, null, null, 53226, 53227, 53228, 53229, 53230, 53231, 53234, 53236, 53238, 53239, 53240, 53241, 53242, 53243, 53245, 53246, 53247, 53249, 53250, 53251, 53253, 53254, 53255, 53256, 53257, 53258, null, null, null, null, null, null, 53259, 53260, 53261, 53262, 53263, 53264, 53266, 53267, 53268, 53269, 53270, 53271, 53273, 53274, 53275, 53276, 53277, 53278, 53279, 53280, 53281, 53282, 53283, 53284, 53285, 53286, 53287, 53288, 53289, 53290, 53291, 53292, 45149, 45180, 45181, 45184, 45188, 45196, 45197, 45199, 45201, 45208, 45209, 45210, 45212, 45215, 45216, 45217, 45218, 45224, 45225, 45227, 45228, 45229, 45230, 45231, 45233, 45235, 45236, 45237, 45240, 45244, 45252, 45253, 45255, 45256, 45257, 45264, 45265, 45268, 45272, 45280, 45285, 45320, 45321, 45323, 45324, 45328, 45330, 45331, 45336, 45337, 45339, 45340, 45341, 45347, 45348, 45349, 45352, 45356, 45364, 45365, 45367, 45368, 45369, 45376, 45377, 45380, 45384, 45392, 45393, 45396, 45397, 45400, 45404, 45408, 45432, 45433, 45436, 45440, 45442, 45448, 45449, 45451, 45453, 45458, 45459, 45460, 45464, 45468, 45480, 45516, 45520, 45524, 45532, 45533, 53294, 53295, 53296, 53297, 53298, 53299, 53302, 53303, 53305, 53306, 53307, 53309, 53310, 53311, 53312, 53313, 53314, 53315, 53318, 53320, 53322, 53323, 53324, 53325, 53326, 53327, null, null, null, null, null, null, 53329, 53330, 53331, 53333, 53334, 53335, 53337, 53338, 53339, 53340, 53341, 53342, 53343, 53345, 53346, 53347, 53348, 53349, 53350, 53351, 53352, 53353, 53354, 53355, 53358, 53359, null, null, null, null, null, null, 53361, 53362, 53363, 53365, 53366, 53367, 53368, 53369, 53370, 53371, 53374, 53375, 53376, 53378, 53379, 53380, 53381, 53382, 53383, 53384, 53385, 53386, 53387, 53388, 53389, 53390, 53391, 53392, 53393, 53394, 53395, 53396, 45535, 45544, 45545, 45548, 45552, 45561, 45563, 45565, 45572, 45573, 45576, 45579, 45580, 45588, 45589, 45591, 45593, 45600, 45620, 45628, 45656, 45660, 45664, 45672, 45673, 45684, 45685, 45692, 45700, 45701, 45705, 45712, 45713, 45716, 45720, 45721, 45722, 45728, 45729, 45731, 45733, 45734, 45738, 45740, 45744, 45748, 45768, 45769, 45772, 45776, 45778, 45784, 45785, 45787, 45789, 45794, 45796, 45797, 45798, 45800, 45803, 45804, 45805, 45806, 45807, 45811, 45812, 45813, 45815, 45816, 45817, 45818, 45819, 45823, 45824, 45825, 45828, 45832, 45840, 45841, 45843, 45844, 45845, 45852, 45908, 45909, 45910, 45912, 45915, 45916, 45918, 45919, 45924, 45925, 53397, 53398, 53399, 53400, 53401, 53402, 53403, 53404, 53405, 53406, 53407, 53408, 53409, 53410, 53411, 53414, 53415, 53417, 53418, 53419, 53421, 53422, 53423, 53424, 53425, 53426, null, null, null, null, null, null, 53427, 53430, 53432, 53434, 53435, 53436, 53437, 53438, 53439, 53442, 53443, 53445, 53446, 53447, 53450, 53451, 53452, 53453, 53454, 53455, 53458, 53462, 53463, 53464, 53465, 53466, null, null, null, null, null, null, 53467, 53470, 53471, 53473, 53474, 53475, 53477, 53478, 53479, 53480, 53481, 53482, 53483, 53486, 53490, 53491, 53492, 53493, 53494, 53495, 53497, 53498, 53499, 53500, 53501, 53502, 53503, 53504, 53505, 53506, 53507, 53508, 45927, 45929, 45931, 45934, 45936, 45937, 45940, 45944, 45952, 45953, 45955, 45956, 45957, 45964, 45968, 45972, 45984, 45985, 45992, 45996, 46020, 46021, 46024, 46027, 46028, 46030, 46032, 46036, 46037, 46039, 46041, 46043, 46045, 46048, 46052, 46056, 46076, 46096, 46104, 46108, 46112, 46120, 46121, 46123, 46132, 46160, 46161, 46164, 46168, 46176, 46177, 46179, 46181, 46188, 46208, 46216, 46237, 46244, 46248, 46252, 46261, 46263, 46265, 46272, 46276, 46280, 46288, 46293, 46300, 46301, 46304, 46307, 46308, 46310, 46316, 46317, 46319, 46321, 46328, 46356, 46357, 46360, 46363, 46364, 46372, 46373, 46375, 46376, 46377, 46378, 46384, 46385, 46388, 46392, 53509, 53510, 53511, 53512, 53513, 53514, 53515, 53516, 53518, 53519, 53520, 53521, 53522, 53523, 53524, 53525, 53526, 53527, 53528, 53529, 53530, 53531, 53532, 53533, 53534, 53535, null, null, null, null, null, null, 53536, 53537, 53538, 53539, 53540, 53541, 53542, 53543, 53544, 53545, 53546, 53547, 53548, 53549, 53550, 53551, 53554, 53555, 53557, 53558, 53559, 53561, 53563, 53564, 53565, 53566, null, null, null, null, null, null, 53567, 53570, 53574, 53575, 53576, 53577, 53578, 53579, 53582, 53583, 53585, 53586, 53587, 53589, 53590, 53591, 53592, 53593, 53594, 53595, 53598, 53600, 53602, 53603, 53604, 53605, 53606, 53607, 53609, 53610, 53611, 53613, 46400, 46401, 46403, 46404, 46405, 46411, 46412, 46413, 46416, 46420, 46428, 46429, 46431, 46432, 46433, 46496, 46497, 46500, 46504, 46506, 46507, 46512, 46513, 46515, 46516, 46517, 46523, 46524, 46525, 46528, 46532, 46540, 46541, 46543, 46544, 46545, 46552, 46572, 46608, 46609, 46612, 46616, 46629, 46636, 46644, 46664, 46692, 46696, 46748, 46749, 46752, 46756, 46763, 46764, 46769, 46804, 46832, 46836, 46840, 46848, 46849, 46853, 46888, 46889, 46892, 46895, 46896, 46904, 46905, 46907, 46916, 46920, 46924, 46932, 46933, 46944, 46948, 46952, 46960, 46961, 46963, 46965, 46972, 46973, 46976, 46980, 46988, 46989, 46991, 46992, 46993, 46994, 46998, 46999, 53614, 53615, 53616, 53617, 53618, 53619, 53620, 53621, 53622, 53623, 53624, 53625, 53626, 53627, 53629, 53630, 53631, 53632, 53633, 53634, 53635, 53637, 53638, 53639, 53641, 53642, null, null, null, null, null, null, 53643, 53644, 53645, 53646, 53647, 53648, 53649, 53650, 53651, 53652, 53653, 53654, 53655, 53656, 53657, 53658, 53659, 53660, 53661, 53662, 53663, 53666, 53667, 53669, 53670, 53671, null, null, null, null, null, null, 53673, 53674, 53675, 53676, 53677, 53678, 53679, 53682, 53684, 53686, 53687, 53688, 53689, 53691, 53693, 53694, 53695, 53697, 53698, 53699, 53700, 53701, 53702, 53703, 53704, 53705, 53706, 53707, 53708, 53709, 53710, 53711, 47e3, 47001, 47004, 47008, 47016, 47017, 47019, 47020, 47021, 47028, 47029, 47032, 47047, 47049, 47084, 47085, 47088, 47092, 47100, 47101, 47103, 47104, 47105, 47111, 47112, 47113, 47116, 47120, 47128, 47129, 47131, 47133, 47140, 47141, 47144, 47148, 47156, 47157, 47159, 47160, 47161, 47168, 47172, 47185, 47187, 47196, 47197, 47200, 47204, 47212, 47213, 47215, 47217, 47224, 47228, 47245, 47272, 47280, 47284, 47288, 47296, 47297, 47299, 47301, 47308, 47312, 47316, 47325, 47327, 47329, 47336, 47337, 47340, 47344, 47352, 47353, 47355, 47357, 47364, 47384, 47392, 47420, 47421, 47424, 47428, 47436, 47439, 47441, 47448, 47449, 47452, 47456, 47464, 47465, 53712, 53713, 53714, 53715, 53716, 53717, 53718, 53719, 53721, 53722, 53723, 53724, 53725, 53726, 53727, 53728, 53729, 53730, 53731, 53732, 53733, 53734, 53735, 53736, 53737, 53738, null, null, null, null, null, null, 53739, 53740, 53741, 53742, 53743, 53744, 53745, 53746, 53747, 53749, 53750, 53751, 53753, 53754, 53755, 53756, 53757, 53758, 53759, 53760, 53761, 53762, 53763, 53764, 53765, 53766, null, null, null, null, null, null, 53768, 53770, 53771, 53772, 53773, 53774, 53775, 53777, 53778, 53779, 53780, 53781, 53782, 53783, 53784, 53785, 53786, 53787, 53788, 53789, 53790, 53791, 53792, 53793, 53794, 53795, 53796, 53797, 53798, 53799, 53800, 53801, 47467, 47469, 47476, 47477, 47480, 47484, 47492, 47493, 47495, 47497, 47498, 47501, 47502, 47532, 47533, 47536, 47540, 47548, 47549, 47551, 47553, 47560, 47561, 47564, 47566, 47567, 47568, 47569, 47570, 47576, 47577, 47579, 47581, 47582, 47585, 47587, 47588, 47589, 47592, 47596, 47604, 47605, 47607, 47608, 47609, 47610, 47616, 47617, 47624, 47637, 47672, 47673, 47676, 47680, 47682, 47688, 47689, 47691, 47693, 47694, 47699, 47700, 47701, 47704, 47708, 47716, 47717, 47719, 47720, 47721, 47728, 47729, 47732, 47736, 47747, 47748, 47749, 47751, 47756, 47784, 47785, 47787, 47788, 47792, 47794, 47800, 47801, 47803, 47805, 47812, 47816, 47832, 47833, 47868, 53802, 53803, 53806, 53807, 53809, 53810, 53811, 53813, 53814, 53815, 53816, 53817, 53818, 53819, 53822, 53824, 53826, 53827, 53828, 53829, 53830, 53831, 53833, 53834, 53835, 53836, null, null, null, null, null, null, 53837, 53838, 53839, 53840, 53841, 53842, 53843, 53844, 53845, 53846, 53847, 53848, 53849, 53850, 53851, 53853, 53854, 53855, 53856, 53857, 53858, 53859, 53861, 53862, 53863, 53864, null, null, null, null, null, null, 53865, 53866, 53867, 53868, 53869, 53870, 53871, 53872, 53873, 53874, 53875, 53876, 53877, 53878, 53879, 53880, 53881, 53882, 53883, 53884, 53885, 53886, 53887, 53890, 53891, 53893, 53894, 53895, 53897, 53898, 53899, 53900, 47872, 47876, 47885, 47887, 47889, 47896, 47900, 47904, 47913, 47915, 47924, 47925, 47926, 47928, 47931, 47932, 47933, 47934, 47940, 47941, 47943, 47945, 47949, 47951, 47952, 47956, 47960, 47969, 47971, 47980, 48008, 48012, 48016, 48036, 48040, 48044, 48052, 48055, 48064, 48068, 48072, 48080, 48083, 48120, 48121, 48124, 48127, 48128, 48130, 48136, 48137, 48139, 48140, 48141, 48143, 48145, 48148, 48149, 48150, 48151, 48152, 48155, 48156, 48157, 48158, 48159, 48164, 48165, 48167, 48169, 48173, 48176, 48177, 48180, 48184, 48192, 48193, 48195, 48196, 48197, 48201, 48204, 48205, 48208, 48221, 48260, 48261, 48264, 48267, 48268, 48270, 48276, 48277, 48279, 53901, 53902, 53903, 53906, 53907, 53908, 53910, 53911, 53912, 53913, 53914, 53915, 53917, 53918, 53919, 53921, 53922, 53923, 53925, 53926, 53927, 53928, 53929, 53930, 53931, 53933, null, null, null, null, null, null, 53934, 53935, 53936, 53938, 53939, 53940, 53941, 53942, 53943, 53946, 53947, 53949, 53950, 53953, 53955, 53956, 53957, 53958, 53959, 53962, 53964, 53965, 53966, 53967, 53968, 53969, null, null, null, null, null, null, 53970, 53971, 53973, 53974, 53975, 53977, 53978, 53979, 53981, 53982, 53983, 53984, 53985, 53986, 53987, 53990, 53991, 53992, 53993, 53994, 53995, 53996, 53997, 53998, 53999, 54002, 54003, 54005, 54006, 54007, 54009, 54010, 48281, 48282, 48288, 48289, 48292, 48295, 48296, 48304, 48305, 48307, 48308, 48309, 48316, 48317, 48320, 48324, 48333, 48335, 48336, 48337, 48341, 48344, 48348, 48372, 48373, 48374, 48376, 48380, 48388, 48389, 48391, 48393, 48400, 48404, 48420, 48428, 48448, 48456, 48457, 48460, 48464, 48472, 48473, 48484, 48488, 48512, 48513, 48516, 48519, 48520, 48521, 48522, 48528, 48529, 48531, 48533, 48537, 48538, 48540, 48548, 48560, 48568, 48596, 48597, 48600, 48604, 48617, 48624, 48628, 48632, 48640, 48643, 48645, 48652, 48653, 48656, 48660, 48668, 48669, 48671, 48708, 48709, 48712, 48716, 48718, 48724, 48725, 48727, 48729, 48730, 48731, 48736, 48737, 48740, 54011, 54012, 54013, 54014, 54015, 54018, 54020, 54022, 54023, 54024, 54025, 54026, 54027, 54031, 54033, 54034, 54035, 54037, 54039, 54040, 54041, 54042, 54043, 54046, 54050, 54051, null, null, null, null, null, null, 54052, 54054, 54055, 54058, 54059, 54061, 54062, 54063, 54065, 54066, 54067, 54068, 54069, 54070, 54071, 54074, 54078, 54079, 54080, 54081, 54082, 54083, 54086, 54087, 54088, 54089, null, null, null, null, null, null, 54090, 54091, 54092, 54093, 54094, 54095, 54096, 54097, 54098, 54099, 54100, 54101, 54102, 54103, 54104, 54105, 54106, 54107, 54108, 54109, 54110, 54111, 54112, 54113, 54114, 54115, 54116, 54117, 54118, 54119, 54120, 54121, 48744, 48746, 48752, 48753, 48755, 48756, 48757, 48763, 48764, 48765, 48768, 48772, 48780, 48781, 48783, 48784, 48785, 48792, 48793, 48808, 48848, 48849, 48852, 48855, 48856, 48864, 48867, 48868, 48869, 48876, 48897, 48904, 48905, 48920, 48921, 48923, 48924, 48925, 48960, 48961, 48964, 48968, 48976, 48977, 48981, 49044, 49072, 49093, 49100, 49101, 49104, 49108, 49116, 49119, 49121, 49212, 49233, 49240, 49244, 49248, 49256, 49257, 49296, 49297, 49300, 49304, 49312, 49313, 49315, 49317, 49324, 49325, 49327, 49328, 49331, 49332, 49333, 49334, 49340, 49341, 49343, 49344, 49345, 49349, 49352, 49353, 49356, 49360, 49368, 49369, 49371, 49372, 49373, 49380, 54122, 54123, 54124, 54125, 54126, 54127, 54128, 54129, 54130, 54131, 54132, 54133, 54134, 54135, 54136, 54137, 54138, 54139, 54142, 54143, 54145, 54146, 54147, 54149, 54150, 54151, null, null, null, null, null, null, 54152, 54153, 54154, 54155, 54158, 54162, 54163, 54164, 54165, 54166, 54167, 54170, 54171, 54173, 54174, 54175, 54177, 54178, 54179, 54180, 54181, 54182, 54183, 54186, 54188, 54190, null, null, null, null, null, null, 54191, 54192, 54193, 54194, 54195, 54197, 54198, 54199, 54201, 54202, 54203, 54205, 54206, 54207, 54208, 54209, 54210, 54211, 54214, 54215, 54218, 54219, 54220, 54221, 54222, 54223, 54225, 54226, 54227, 54228, 54229, 54230, 49381, 49384, 49388, 49396, 49397, 49399, 49401, 49408, 49412, 49416, 49424, 49429, 49436, 49437, 49438, 49439, 49440, 49443, 49444, 49446, 49447, 49452, 49453, 49455, 49456, 49457, 49462, 49464, 49465, 49468, 49472, 49480, 49481, 49483, 49484, 49485, 49492, 49493, 49496, 49500, 49508, 49509, 49511, 49512, 49513, 49520, 49524, 49528, 49541, 49548, 49549, 49550, 49552, 49556, 49558, 49564, 49565, 49567, 49569, 49573, 49576, 49577, 49580, 49584, 49597, 49604, 49608, 49612, 49620, 49623, 49624, 49632, 49636, 49640, 49648, 49649, 49651, 49660, 49661, 49664, 49668, 49676, 49677, 49679, 49681, 49688, 49689, 49692, 49695, 49696, 49704, 49705, 49707, 49709, 54231, 54233, 54234, 54235, 54236, 54237, 54238, 54239, 54240, 54242, 54244, 54245, 54246, 54247, 54248, 54249, 54250, 54251, 54254, 54255, 54257, 54258, 54259, 54261, 54262, 54263, null, null, null, null, null, null, 54264, 54265, 54266, 54267, 54270, 54272, 54274, 54275, 54276, 54277, 54278, 54279, 54281, 54282, 54283, 54284, 54285, 54286, 54287, 54288, 54289, 54290, 54291, 54292, 54293, 54294, null, null, null, null, null, null, 54295, 54296, 54297, 54298, 54299, 54300, 54302, 54303, 54304, 54305, 54306, 54307, 54308, 54309, 54310, 54311, 54312, 54313, 54314, 54315, 54316, 54317, 54318, 54319, 54320, 54321, 54322, 54323, 54324, 54325, 54326, 54327, 49711, 49713, 49714, 49716, 49736, 49744, 49745, 49748, 49752, 49760, 49765, 49772, 49773, 49776, 49780, 49788, 49789, 49791, 49793, 49800, 49801, 49808, 49816, 49819, 49821, 49828, 49829, 49832, 49836, 49837, 49844, 49845, 49847, 49849, 49884, 49885, 49888, 49891, 49892, 49899, 49900, 49901, 49903, 49905, 49910, 49912, 49913, 49915, 49916, 49920, 49928, 49929, 49932, 49933, 49939, 49940, 49941, 49944, 49948, 49956, 49957, 49960, 49961, 49989, 50024, 50025, 50028, 50032, 50034, 50040, 50041, 50044, 50045, 50052, 50056, 50060, 50112, 50136, 50137, 50140, 50143, 50144, 50146, 50152, 50153, 50157, 50164, 50165, 50168, 50184, 50192, 50212, 50220, 50224, 54328, 54329, 54330, 54331, 54332, 54333, 54334, 54335, 54337, 54338, 54339, 54341, 54342, 54343, 54344, 54345, 54346, 54347, 54348, 54349, 54350, 54351, 54352, 54353, 54354, 54355, null, null, null, null, null, null, 54356, 54357, 54358, 54359, 54360, 54361, 54362, 54363, 54365, 54366, 54367, 54369, 54370, 54371, 54373, 54374, 54375, 54376, 54377, 54378, 54379, 54380, 54382, 54384, 54385, 54386, null, null, null, null, null, null, 54387, 54388, 54389, 54390, 54391, 54394, 54395, 54397, 54398, 54401, 54403, 54404, 54405, 54406, 54407, 54410, 54412, 54414, 54415, 54416, 54417, 54418, 54419, 54421, 54422, 54423, 54424, 54425, 54426, 54427, 54428, 54429, 50228, 50236, 50237, 50248, 50276, 50277, 50280, 50284, 50292, 50293, 50297, 50304, 50324, 50332, 50360, 50364, 50409, 50416, 50417, 50420, 50424, 50426, 50431, 50432, 50433, 50444, 50448, 50452, 50460, 50472, 50473, 50476, 50480, 50488, 50489, 50491, 50493, 50500, 50501, 50504, 50505, 50506, 50508, 50509, 50510, 50515, 50516, 50517, 50519, 50520, 50521, 50525, 50526, 50528, 50529, 50532, 50536, 50544, 50545, 50547, 50548, 50549, 50556, 50557, 50560, 50564, 50567, 50572, 50573, 50575, 50577, 50581, 50583, 50584, 50588, 50592, 50601, 50612, 50613, 50616, 50617, 50619, 50620, 50621, 50622, 50628, 50629, 50630, 50631, 50632, 50633, 50634, 50636, 50638, 54430, 54431, 54432, 54433, 54434, 54435, 54436, 54437, 54438, 54439, 54440, 54442, 54443, 54444, 54445, 54446, 54447, 54448, 54449, 54450, 54451, 54452, 54453, 54454, 54455, 54456, null, null, null, null, null, null, 54457, 54458, 54459, 54460, 54461, 54462, 54463, 54464, 54465, 54466, 54467, 54468, 54469, 54470, 54471, 54472, 54473, 54474, 54475, 54477, 54478, 54479, 54481, 54482, 54483, 54485, null, null, null, null, null, null, 54486, 54487, 54488, 54489, 54490, 54491, 54493, 54494, 54496, 54497, 54498, 54499, 54500, 54501, 54502, 54503, 54505, 54506, 54507, 54509, 54510, 54511, 54513, 54514, 54515, 54516, 54517, 54518, 54519, 54521, 54522, 54524, 50640, 50641, 50644, 50648, 50656, 50657, 50659, 50661, 50668, 50669, 50670, 50672, 50676, 50678, 50679, 50684, 50685, 50686, 50687, 50688, 50689, 50693, 50694, 50695, 50696, 50700, 50704, 50712, 50713, 50715, 50716, 50724, 50725, 50728, 50732, 50733, 50734, 50736, 50739, 50740, 50741, 50743, 50745, 50747, 50752, 50753, 50756, 50760, 50768, 50769, 50771, 50772, 50773, 50780, 50781, 50784, 50796, 50799, 50801, 50808, 50809, 50812, 50816, 50824, 50825, 50827, 50829, 50836, 50837, 50840, 50844, 50852, 50853, 50855, 50857, 50864, 50865, 50868, 50872, 50873, 50874, 50880, 50881, 50883, 50885, 50892, 50893, 50896, 50900, 50908, 50909, 50912, 50913, 50920, 54526, 54527, 54528, 54529, 54530, 54531, 54533, 54534, 54535, 54537, 54538, 54539, 54541, 54542, 54543, 54544, 54545, 54546, 54547, 54550, 54552, 54553, 54554, 54555, 54556, 54557, null, null, null, null, null, null, 54558, 54559, 54560, 54561, 54562, 54563, 54564, 54565, 54566, 54567, 54568, 54569, 54570, 54571, 54572, 54573, 54574, 54575, 54576, 54577, 54578, 54579, 54580, 54581, 54582, 54583, null, null, null, null, null, null, 54584, 54585, 54586, 54587, 54590, 54591, 54593, 54594, 54595, 54597, 54598, 54599, 54600, 54601, 54602, 54603, 54606, 54608, 54610, 54611, 54612, 54613, 54614, 54615, 54618, 54619, 54621, 54622, 54623, 54625, 54626, 54627, 50921, 50924, 50928, 50936, 50937, 50941, 50948, 50949, 50952, 50956, 50964, 50965, 50967, 50969, 50976, 50977, 50980, 50984, 50992, 50993, 50995, 50997, 50999, 51004, 51005, 51008, 51012, 51018, 51020, 51021, 51023, 51025, 51026, 51027, 51028, 51029, 51030, 51031, 51032, 51036, 51040, 51048, 51051, 51060, 51061, 51064, 51068, 51069, 51070, 51075, 51076, 51077, 51079, 51080, 51081, 51082, 51086, 51088, 51089, 51092, 51094, 51095, 51096, 51098, 51104, 51105, 51107, 51108, 51109, 51110, 51116, 51117, 51120, 51124, 51132, 51133, 51135, 51136, 51137, 51144, 51145, 51148, 51150, 51152, 51160, 51165, 51172, 51176, 51180, 51200, 51201, 51204, 51208, 51210, 54628, 54630, 54631, 54634, 54636, 54638, 54639, 54640, 54641, 54642, 54643, 54646, 54647, 54649, 54650, 54651, 54653, 54654, 54655, 54656, 54657, 54658, 54659, 54662, 54666, 54667, null, null, null, null, null, null, 54668, 54669, 54670, 54671, 54673, 54674, 54675, 54676, 54677, 54678, 54679, 54680, 54681, 54682, 54683, 54684, 54685, 54686, 54687, 54688, 54689, 54690, 54691, 54692, 54694, 54695, null, null, null, null, null, null, 54696, 54697, 54698, 54699, 54700, 54701, 54702, 54703, 54704, 54705, 54706, 54707, 54708, 54709, 54710, 54711, 54712, 54713, 54714, 54715, 54716, 54717, 54718, 54719, 54720, 54721, 54722, 54723, 54724, 54725, 54726, 54727, 51216, 51217, 51219, 51221, 51222, 51228, 51229, 51232, 51236, 51244, 51245, 51247, 51249, 51256, 51260, 51264, 51272, 51273, 51276, 51277, 51284, 51312, 51313, 51316, 51320, 51322, 51328, 51329, 51331, 51333, 51334, 51335, 51339, 51340, 51341, 51348, 51357, 51359, 51361, 51368, 51388, 51389, 51396, 51400, 51404, 51412, 51413, 51415, 51417, 51424, 51425, 51428, 51445, 51452, 51453, 51456, 51460, 51461, 51462, 51468, 51469, 51471, 51473, 51480, 51500, 51508, 51536, 51537, 51540, 51544, 51552, 51553, 51555, 51564, 51568, 51572, 51580, 51592, 51593, 51596, 51600, 51608, 51609, 51611, 51613, 51648, 51649, 51652, 51655, 51656, 51658, 51664, 51665, 51667, 54730, 54731, 54733, 54734, 54735, 54737, 54739, 54740, 54741, 54742, 54743, 54746, 54748, 54750, 54751, 54752, 54753, 54754, 54755, 54758, 54759, 54761, 54762, 54763, 54765, 54766, null, null, null, null, null, null, 54767, 54768, 54769, 54770, 54771, 54774, 54776, 54778, 54779, 54780, 54781, 54782, 54783, 54786, 54787, 54789, 54790, 54791, 54793, 54794, 54795, 54796, 54797, 54798, 54799, 54802, null, null, null, null, null, null, 54806, 54807, 54808, 54809, 54810, 54811, 54813, 54814, 54815, 54817, 54818, 54819, 54821, 54822, 54823, 54824, 54825, 54826, 54827, 54828, 54830, 54831, 54832, 54833, 54834, 54835, 54836, 54837, 54838, 54839, 54842, 54843, 51669, 51670, 51673, 51674, 51676, 51677, 51680, 51682, 51684, 51687, 51692, 51693, 51695, 51696, 51697, 51704, 51705, 51708, 51712, 51720, 51721, 51723, 51724, 51725, 51732, 51736, 51753, 51788, 51789, 51792, 51796, 51804, 51805, 51807, 51808, 51809, 51816, 51837, 51844, 51864, 51900, 51901, 51904, 51908, 51916, 51917, 51919, 51921, 51923, 51928, 51929, 51936, 51948, 51956, 51976, 51984, 51988, 51992, 52e3, 52001, 52033, 52040, 52041, 52044, 52048, 52056, 52057, 52061, 52068, 52088, 52089, 52124, 52152, 52180, 52196, 52199, 52201, 52236, 52237, 52240, 52244, 52252, 52253, 52257, 52258, 52263, 52264, 52265, 52268, 52270, 52272, 52280, 52281, 52283, 54845, 54846, 54847, 54849, 54850, 54851, 54852, 54854, 54855, 54858, 54860, 54862, 54863, 54864, 54866, 54867, 54870, 54871, 54873, 54874, 54875, 54877, 54878, 54879, 54880, 54881, null, null, null, null, null, null, 54882, 54883, 54884, 54885, 54886, 54888, 54890, 54891, 54892, 54893, 54894, 54895, 54898, 54899, 54901, 54902, 54903, 54904, 54905, 54906, 54907, 54908, 54909, 54910, 54911, 54912, null, null, null, null, null, null, 54913, 54914, 54916, 54918, 54919, 54920, 54921, 54922, 54923, 54926, 54927, 54929, 54930, 54931, 54933, 54934, 54935, 54936, 54937, 54938, 54939, 54940, 54942, 54944, 54946, 54947, 54948, 54949, 54950, 54951, 54953, 54954, 52284, 52285, 52286, 52292, 52293, 52296, 52300, 52308, 52309, 52311, 52312, 52313, 52320, 52324, 52326, 52328, 52336, 52341, 52376, 52377, 52380, 52384, 52392, 52393, 52395, 52396, 52397, 52404, 52405, 52408, 52412, 52420, 52421, 52423, 52425, 52432, 52436, 52452, 52460, 52464, 52481, 52488, 52489, 52492, 52496, 52504, 52505, 52507, 52509, 52516, 52520, 52524, 52537, 52572, 52576, 52580, 52588, 52589, 52591, 52593, 52600, 52616, 52628, 52629, 52632, 52636, 52644, 52645, 52647, 52649, 52656, 52676, 52684, 52688, 52712, 52716, 52720, 52728, 52729, 52731, 52733, 52740, 52744, 52748, 52756, 52761, 52768, 52769, 52772, 52776, 52784, 52785, 52787, 52789, 54955, 54957, 54958, 54959, 54961, 54962, 54963, 54964, 54965, 54966, 54967, 54968, 54970, 54972, 54973, 54974, 54975, 54976, 54977, 54978, 54979, 54982, 54983, 54985, 54986, 54987, null, null, null, null, null, null, 54989, 54990, 54991, 54992, 54994, 54995, 54997, 54998, 55e3, 55002, 55003, 55004, 55005, 55006, 55007, 55009, 55010, 55011, 55013, 55014, 55015, 55017, 55018, 55019, 55020, 55021, null, null, null, null, null, null, 55022, 55023, 55025, 55026, 55027, 55028, 55030, 55031, 55032, 55033, 55034, 55035, 55038, 55039, 55041, 55042, 55043, 55045, 55046, 55047, 55048, 55049, 55050, 55051, 55052, 55053, 55054, 55055, 55056, 55058, 55059, 55060, 52824, 52825, 52828, 52831, 52832, 52833, 52840, 52841, 52843, 52845, 52852, 52853, 52856, 52860, 52868, 52869, 52871, 52873, 52880, 52881, 52884, 52888, 52896, 52897, 52899, 52900, 52901, 52908, 52909, 52929, 52964, 52965, 52968, 52971, 52972, 52980, 52981, 52983, 52984, 52985, 52992, 52993, 52996, 53e3, 53008, 53009, 53011, 53013, 53020, 53024, 53028, 53036, 53037, 53039, 53040, 53041, 53048, 53076, 53077, 53080, 53084, 53092, 53093, 53095, 53097, 53104, 53105, 53108, 53112, 53120, 53125, 53132, 53153, 53160, 53168, 53188, 53216, 53217, 53220, 53224, 53232, 53233, 53235, 53237, 53244, 53248, 53252, 53265, 53272, 53293, 53300, 53301, 53304, 53308, 55061, 55062, 55063, 55066, 55067, 55069, 55070, 55071, 55073, 55074, 55075, 55076, 55077, 55078, 55079, 55082, 55084, 55086, 55087, 55088, 55089, 55090, 55091, 55094, 55095, 55097, null, null, null, null, null, null, 55098, 55099, 55101, 55102, 55103, 55104, 55105, 55106, 55107, 55109, 55110, 55112, 55114, 55115, 55116, 55117, 55118, 55119, 55122, 55123, 55125, 55130, 55131, 55132, 55133, 55134, null, null, null, null, null, null, 55135, 55138, 55140, 55142, 55143, 55144, 55146, 55147, 55149, 55150, 55151, 55153, 55154, 55155, 55157, 55158, 55159, 55160, 55161, 55162, 55163, 55166, 55167, 55168, 55170, 55171, 55172, 55173, 55174, 55175, 55178, 55179, 53316, 53317, 53319, 53321, 53328, 53332, 53336, 53344, 53356, 53357, 53360, 53364, 53372, 53373, 53377, 53412, 53413, 53416, 53420, 53428, 53429, 53431, 53433, 53440, 53441, 53444, 53448, 53449, 53456, 53457, 53459, 53460, 53461, 53468, 53469, 53472, 53476, 53484, 53485, 53487, 53488, 53489, 53496, 53517, 53552, 53553, 53556, 53560, 53562, 53568, 53569, 53571, 53572, 53573, 53580, 53581, 53584, 53588, 53596, 53597, 53599, 53601, 53608, 53612, 53628, 53636, 53640, 53664, 53665, 53668, 53672, 53680, 53681, 53683, 53685, 53690, 53692, 53696, 53720, 53748, 53752, 53767, 53769, 53776, 53804, 53805, 53808, 53812, 53820, 53821, 53823, 53825, 53832, 53852, 55181, 55182, 55183, 55185, 55186, 55187, 55188, 55189, 55190, 55191, 55194, 55196, 55198, 55199, 55200, 55201, 55202, 55203, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 53860, 53888, 53889, 53892, 53896, 53904, 53905, 53909, 53916, 53920, 53924, 53932, 53937, 53944, 53945, 53948, 53951, 53952, 53954, 53960, 53961, 53963, 53972, 53976, 53980, 53988, 53989, 54e3, 54001, 54004, 54008, 54016, 54017, 54019, 54021, 54028, 54029, 54030, 54032, 54036, 54038, 54044, 54045, 54047, 54048, 54049, 54053, 54056, 54057, 54060, 54064, 54072, 54073, 54075, 54076, 54077, 54084, 54085, 54140, 54141, 54144, 54148, 54156, 54157, 54159, 54160, 54161, 54168, 54169, 54172, 54176, 54184, 54185, 54187, 54189, 54196, 54200, 54204, 54212, 54213, 54216, 54217, 54224, 54232, 54241, 54243, 54252, 54253, 54256, 54260, 54268, 54269, 54271, 54273, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 54280, 54301, 54336, 54340, 54364, 54368, 54372, 54381, 54383, 54392, 54393, 54396, 54399, 54400, 54402, 54408, 54409, 54411, 54413, 54420, 54441, 54476, 54480, 54484, 54492, 54495, 54504, 54508, 54512, 54520, 54523, 54525, 54532, 54536, 54540, 54548, 54549, 54551, 54588, 54589, 54592, 54596, 54604, 54605, 54607, 54609, 54616, 54617, 54620, 54624, 54629, 54632, 54633, 54635, 54637, 54644, 54645, 54648, 54652, 54660, 54661, 54663, 54664, 54665, 54672, 54693, 54728, 54729, 54732, 54736, 54738, 54744, 54745, 54747, 54749, 54756, 54757, 54760, 54764, 54772, 54773, 54775, 54777, 54784, 54785, 54788, 54792, 54800, 54801, 54803, 54804, 54805, 54812, 54816, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 54820, 54829, 54840, 54841, 54844, 54848, 54853, 54856, 54857, 54859, 54861, 54865, 54868, 54869, 54872, 54876, 54887, 54889, 54896, 54897, 54900, 54915, 54917, 54924, 54925, 54928, 54932, 54941, 54943, 54945, 54952, 54956, 54960, 54969, 54971, 54980, 54981, 54984, 54988, 54993, 54996, 54999, 55001, 55008, 55012, 55016, 55024, 55029, 55036, 55037, 55040, 55044, 55057, 55064, 55065, 55068, 55072, 55080, 55081, 55083, 55085, 55092, 55093, 55096, 55100, 55108, 55111, 55113, 55120, 55121, 55124, 55126, 55127, 55128, 55129, 55136, 55137, 55139, 55141, 55145, 55148, 55152, 55156, 55164, 55165, 55169, 55176, 55177, 55180, 55184, 55192, 55193, 55195, 55197, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20285, 20339, 20551, 20729, 21152, 21487, 21621, 21733, 22025, 23233, 23478, 26247, 26550, 26551, 26607, 27468, 29634, 30146, 31292, 33499, 33540, 34903, 34952, 35382, 36040, 36303, 36603, 36838, 39381, 21051, 21364, 21508, 24682, 24932, 27580, 29647, 33050, 35258, 35282, 38307, 20355, 21002, 22718, 22904, 23014, 24178, 24185, 25031, 25536, 26438, 26604, 26751, 28567, 30286, 30475, 30965, 31240, 31487, 31777, 32925, 33390, 33393, 35563, 38291, 20075, 21917, 26359, 28212, 30883, 31469, 33883, 35088, 34638, 38824, 21208, 22350, 22570, 23884, 24863, 25022, 25121, 25954, 26577, 27204, 28187, 29976, 30131, 30435, 30640, 32058, 37039, 37969, 37970, 40853, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21283, 23724, 30002, 32987, 37440, 38296, 21083, 22536, 23004, 23713, 23831, 24247, 24378, 24394, 24951, 27743, 30074, 30086, 31968, 32115, 32177, 32652, 33108, 33313, 34193, 35137, 35611, 37628, 38477, 40007, 20171, 20215, 20491, 20977, 22607, 24887, 24894, 24936, 25913, 27114, 28433, 30117, 30342, 30422, 31623, 33445, 33995, 63744, 37799, 38283, 21888, 23458, 22353, 63745, 31923, 32697, 37301, 20520, 21435, 23621, 24040, 25298, 25454, 25818, 25831, 28192, 28844, 31067, 36317, 36382, 63746, 36989, 37445, 37624, 20094, 20214, 20581, 24062, 24314, 24838, 26967, 33137, 34388, 36423, 37749, 39467, 20062, 20625, 26480, 26688, 20745, 21133, 21138, 27298, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30652, 37392, 40660, 21163, 24623, 36850, 20552, 25001, 25581, 25802, 26684, 27268, 28608, 33160, 35233, 38548, 22533, 29309, 29356, 29956, 32121, 32365, 32937, 35211, 35700, 36963, 40273, 25225, 27770, 28500, 32080, 32570, 35363, 20860, 24906, 31645, 35609, 37463, 37772, 20140, 20435, 20510, 20670, 20742, 21185, 21197, 21375, 22384, 22659, 24218, 24465, 24950, 25004, 25806, 25964, 26223, 26299, 26356, 26775, 28039, 28805, 28913, 29855, 29861, 29898, 30169, 30828, 30956, 31455, 31478, 32069, 32147, 32789, 32831, 33051, 33686, 35686, 36629, 36885, 37857, 38915, 38968, 39514, 39912, 20418, 21843, 22586, 22865, 23395, 23622, 24760, 25106, 26690, 26800, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26856, 28330, 30028, 30328, 30926, 31293, 31995, 32363, 32380, 35336, 35489, 35903, 38542, 40388, 21476, 21481, 21578, 21617, 22266, 22993, 23396, 23611, 24235, 25335, 25911, 25925, 25970, 26272, 26543, 27073, 27837, 30204, 30352, 30590, 31295, 32660, 32771, 32929, 33167, 33510, 33533, 33776, 34241, 34865, 34996, 35493, 63747, 36764, 37678, 38599, 39015, 39640, 40723, 21741, 26011, 26354, 26767, 31296, 35895, 40288, 22256, 22372, 23825, 26118, 26801, 26829, 28414, 29736, 34974, 39908, 27752, 63748, 39592, 20379, 20844, 20849, 21151, 23380, 24037, 24656, 24685, 25329, 25511, 25915, 29657, 31354, 34467, 36002, 38799, 20018, 23521, 25096, 26524, 29916, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31185, 33747, 35463, 35506, 36328, 36942, 37707, 38982, 24275, 27112, 34303, 37101, 63749, 20896, 23448, 23532, 24931, 26874, 27454, 28748, 29743, 29912, 31649, 32592, 33733, 35264, 36011, 38364, 39208, 21038, 24669, 25324, 36866, 20362, 20809, 21281, 22745, 24291, 26336, 27960, 28826, 29378, 29654, 31568, 33009, 37979, 21350, 25499, 32619, 20054, 20608, 22602, 22750, 24618, 24871, 25296, 27088, 39745, 23439, 32024, 32945, 36703, 20132, 20689, 21676, 21932, 23308, 23968, 24039, 25898, 25934, 26657, 27211, 29409, 30350, 30703, 32094, 32761, 33184, 34126, 34527, 36611, 36686, 37066, 39171, 39509, 39851, 19992, 20037, 20061, 20167, 20465, 20855, 21246, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21312, 21475, 21477, 21646, 22036, 22389, 22434, 23495, 23943, 24272, 25084, 25304, 25937, 26552, 26601, 27083, 27472, 27590, 27628, 27714, 28317, 28792, 29399, 29590, 29699, 30655, 30697, 31350, 32127, 32777, 33276, 33285, 33290, 33503, 34914, 35635, 36092, 36544, 36881, 37041, 37476, 37558, 39378, 39493, 40169, 40407, 40860, 22283, 23616, 33738, 38816, 38827, 40628, 21531, 31384, 32676, 35033, 36557, 37089, 22528, 23624, 25496, 31391, 23470, 24339, 31353, 31406, 33422, 36524, 20518, 21048, 21240, 21367, 22280, 25331, 25458, 27402, 28099, 30519, 21413, 29527, 34152, 36470, 38357, 26426, 27331, 28528, 35437, 36556, 39243, 63750, 26231, 27512, 36020, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 39740, 63751, 21483, 22317, 22862, 25542, 27131, 29674, 30789, 31418, 31429, 31998, 33909, 35215, 36211, 36917, 38312, 21243, 22343, 30023, 31584, 33740, 37406, 63752, 27224, 20811, 21067, 21127, 25119, 26840, 26997, 38553, 20677, 21156, 21220, 25027, 26020, 26681, 27135, 29822, 31563, 33465, 33771, 35250, 35641, 36817, 39241, 63753, 20170, 22935, 25810, 26129, 27278, 29748, 31105, 31165, 33449, 34942, 34943, 35167, 63754, 37670, 20235, 21450, 24613, 25201, 27762, 32026, 32102, 20120, 20834, 30684, 32943, 20225, 20238, 20854, 20864, 21980, 22120, 22331, 22522, 22524, 22804, 22855, 22931, 23492, 23696, 23822, 24049, 24190, 24524, 25216, 26071, 26083, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26398, 26399, 26462, 26827, 26820, 27231, 27450, 27683, 27773, 27778, 28103, 29592, 29734, 29738, 29826, 29859, 30072, 30079, 30849, 30959, 31041, 31047, 31048, 31098, 31637, 32e3, 32186, 32648, 32774, 32813, 32908, 35352, 35663, 35912, 36215, 37665, 37668, 39138, 39249, 39438, 39439, 39525, 40594, 32202, 20342, 21513, 25326, 26708, 37329, 21931, 20794, 63755, 63756, 23068, 25062, 63757, 25295, 25343, 63758, 63759, 63760, 63761, 63762, 63763, 37027, 63764, 63765, 63766, 63767, 63768, 35582, 63769, 63770, 63771, 63772, 26262, 63773, 29014, 63774, 63775, 38627, 63776, 25423, 25466, 21335, 63777, 26511, 26976, 28275, 63778, 30007, 63779, 63780, 63781, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32013, 63782, 63783, 34930, 22218, 23064, 63784, 63785, 63786, 63787, 63788, 20035, 63789, 20839, 22856, 26608, 32784, 63790, 22899, 24180, 25754, 31178, 24565, 24684, 25288, 25467, 23527, 23511, 21162, 63791, 22900, 24361, 24594, 63792, 63793, 63794, 29785, 63795, 63796, 63797, 63798, 63799, 63800, 39377, 63801, 63802, 63803, 63804, 63805, 63806, 63807, 63808, 63809, 63810, 63811, 28611, 63812, 63813, 33215, 36786, 24817, 63814, 63815, 33126, 63816, 63817, 23615, 63818, 63819, 63820, 63821, 63822, 63823, 63824, 63825, 23273, 35365, 26491, 32016, 63826, 63827, 63828, 63829, 63830, 63831, 33021, 63832, 63833, 23612, 27877, 21311, 28346, 22810, 33590, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20025, 20150, 20294, 21934, 22296, 22727, 24406, 26039, 26086, 27264, 27573, 28237, 30701, 31471, 31774, 32222, 34507, 34962, 37170, 37723, 25787, 28606, 29562, 30136, 36948, 21846, 22349, 25018, 25812, 26311, 28129, 28251, 28525, 28601, 30192, 32835, 33213, 34113, 35203, 35527, 35674, 37663, 27795, 30035, 31572, 36367, 36957, 21776, 22530, 22616, 24162, 25095, 25758, 26848, 30070, 31958, 34739, 40680, 20195, 22408, 22382, 22823, 23565, 23729, 24118, 24453, 25140, 25825, 29619, 33274, 34955, 36024, 38538, 40667, 23429, 24503, 24755, 20498, 20992, 21040, 22294, 22581, 22615, 23566, 23648, 23798, 23947, 24230, 24466, 24764, 25361, 25481, 25623, 26691, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26873, 27330, 28120, 28193, 28372, 28644, 29182, 30428, 30585, 31153, 31291, 33796, 35241, 36077, 36339, 36424, 36867, 36884, 36947, 37117, 37709, 38518, 38876, 27602, 28678, 29272, 29346, 29544, 30563, 31167, 31716, 32411, 35712, 22697, 24775, 25958, 26109, 26302, 27788, 28958, 29129, 35930, 38931, 20077, 31361, 20189, 20908, 20941, 21205, 21516, 24999, 26481, 26704, 26847, 27934, 28540, 30140, 30643, 31461, 33012, 33891, 37509, 20828, 26007, 26460, 26515, 30168, 31431, 33651, 63834, 35910, 36887, 38957, 23663, 33216, 33434, 36929, 36975, 37389, 24471, 23965, 27225, 29128, 30331, 31561, 34276, 35588, 37159, 39472, 21895, 25078, 63835, 30313, 32645, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 34367, 34746, 35064, 37007, 63836, 27931, 28889, 29662, 32097, 33853, 63837, 37226, 39409, 63838, 20098, 21365, 27396, 27410, 28734, 29211, 34349, 40478, 21068, 36771, 23888, 25829, 25900, 27414, 28651, 31811, 32412, 34253, 35172, 35261, 25289, 33240, 34847, 24266, 26391, 28010, 29436, 29701, 29807, 34690, 37086, 20358, 23821, 24480, 33802, 20919, 25504, 30053, 20142, 20486, 20841, 20937, 26753, 27153, 31918, 31921, 31975, 33391, 35538, 36635, 37327, 20406, 20791, 21237, 21570, 24300, 24942, 25150, 26053, 27354, 28670, 31018, 34268, 34851, 38317, 39522, 39530, 40599, 40654, 21147, 26310, 27511, 28701, 31019, 36706, 38722, 24976, 25088, 25891, 28451, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29001, 29833, 32244, 32879, 34030, 36646, 36899, 37706, 20925, 21015, 21155, 27916, 28872, 35010, 24265, 25986, 27566, 28610, 31806, 29557, 20196, 20278, 22265, 63839, 23738, 23994, 24604, 29618, 31533, 32666, 32718, 32838, 36894, 37428, 38646, 38728, 38936, 40801, 20363, 28583, 31150, 37300, 38583, 21214, 63840, 25736, 25796, 27347, 28510, 28696, 29200, 30439, 32769, 34310, 34396, 36335, 36613, 38706, 39791, 40442, 40565, 30860, 31103, 32160, 33737, 37636, 40575, 40595, 35542, 22751, 24324, 26407, 28711, 29903, 31840, 32894, 20769, 28712, 29282, 30922, 36034, 36058, 36084, 38647, 20102, 20698, 23534, 24278, 26009, 29134, 30274, 30637, 32842, 34044, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36988, 39719, 40845, 22744, 23105, 23650, 27155, 28122, 28431, 30267, 32047, 32311, 34078, 35128, 37860, 38475, 21129, 26066, 26611, 27060, 27969, 28316, 28687, 29705, 29792, 30041, 30244, 30827, 35628, 39006, 20845, 25134, 38520, 20374, 20523, 23833, 28138, 32184, 36650, 24459, 24900, 26647, 63841, 38534, 21202, 32907, 20956, 20940, 26974, 31260, 32190, 33777, 38517, 20442, 21033, 21400, 21519, 21774, 23653, 24743, 26446, 26792, 28012, 29313, 29432, 29702, 29827, 63842, 30178, 31852, 32633, 32696, 33673, 35023, 35041, 37324, 37328, 38626, 39881, 21533, 28542, 29136, 29848, 34298, 36522, 38563, 40023, 40607, 26519, 28107, 29747, 33256, 38678, 30764, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31435, 31520, 31890, 25705, 29802, 30194, 30908, 30952, 39340, 39764, 40635, 23518, 24149, 28448, 33180, 33707, 37e3, 19975, 21325, 23081, 24018, 24398, 24930, 25405, 26217, 26364, 28415, 28459, 28771, 30622, 33836, 34067, 34875, 36627, 39237, 39995, 21788, 25273, 26411, 27819, 33545, 35178, 38778, 20129, 22916, 24536, 24537, 26395, 32178, 32596, 33426, 33579, 33725, 36638, 37017, 22475, 22969, 23186, 23504, 26151, 26522, 26757, 27599, 29028, 32629, 36023, 36067, 36993, 39749, 33032, 35978, 38476, 39488, 40613, 23391, 27667, 29467, 30450, 30431, 33804, 20906, 35219, 20813, 20885, 21193, 26825, 27796, 30468, 30496, 32191, 32236, 38754, 40629, 28357, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 34065, 20901, 21517, 21629, 26126, 26269, 26919, 28319, 30399, 30609, 33559, 33986, 34719, 37225, 37528, 40180, 34946, 20398, 20882, 21215, 22982, 24125, 24917, 25720, 25721, 26286, 26576, 27169, 27597, 27611, 29279, 29281, 29761, 30520, 30683, 32791, 33468, 33541, 35584, 35624, 35980, 26408, 27792, 29287, 30446, 30566, 31302, 40361, 27519, 27794, 22818, 26406, 33945, 21359, 22675, 22937, 24287, 25551, 26164, 26483, 28218, 29483, 31447, 33495, 37672, 21209, 24043, 25006, 25035, 25098, 25287, 25771, 26080, 26969, 27494, 27595, 28961, 29687, 30045, 32326, 33310, 33538, 34154, 35491, 36031, 38695, 40289, 22696, 40664, 20497, 21006, 21563, 21839, 25991, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 27766, 32010, 32011, 32862, 34442, 38272, 38639, 21247, 27797, 29289, 21619, 23194, 23614, 23883, 24396, 24494, 26410, 26806, 26979, 28220, 28228, 30473, 31859, 32654, 34183, 35598, 36855, 38753, 40692, 23735, 24758, 24845, 25003, 25935, 26107, 26108, 27665, 27887, 29599, 29641, 32225, 38292, 23494, 34588, 35600, 21085, 21338, 25293, 25615, 25778, 26420, 27192, 27850, 29632, 29854, 31636, 31893, 32283, 33162, 33334, 34180, 36843, 38649, 39361, 20276, 21322, 21453, 21467, 25292, 25644, 25856, 26001, 27075, 27886, 28504, 29677, 30036, 30242, 30436, 30460, 30928, 30971, 31020, 32070, 33324, 34784, 36820, 38930, 39151, 21187, 25300, 25765, 28196, 28497, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30332, 36299, 37297, 37474, 39662, 39747, 20515, 20621, 22346, 22952, 23592, 24135, 24439, 25151, 25918, 26041, 26049, 26121, 26507, 27036, 28354, 30917, 32033, 32938, 33152, 33323, 33459, 33953, 34444, 35370, 35607, 37030, 38450, 40848, 20493, 20467, 63843, 22521, 24472, 25308, 25490, 26479, 28227, 28953, 30403, 32972, 32986, 35060, 35061, 35097, 36064, 36649, 37197, 38506, 20271, 20336, 24091, 26575, 26658, 30333, 30334, 39748, 24161, 27146, 29033, 29140, 30058, 63844, 32321, 34115, 34281, 39132, 20240, 31567, 32624, 38309, 20961, 24070, 26805, 27710, 27726, 27867, 29359, 31684, 33539, 27861, 29754, 20731, 21128, 22721, 25816, 27287, 29863, 30294, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30887, 34327, 38370, 38713, 63845, 21342, 24321, 35722, 36776, 36783, 37002, 21029, 30629, 40009, 40712, 19993, 20482, 20853, 23643, 24183, 26142, 26170, 26564, 26821, 28851, 29953, 30149, 31177, 31453, 36647, 39200, 39432, 20445, 22561, 22577, 23542, 26222, 27493, 27921, 28282, 28541, 29668, 29995, 33769, 35036, 35091, 35676, 36628, 20239, 20693, 21264, 21340, 23443, 24489, 26381, 31119, 33145, 33583, 34068, 35079, 35206, 36665, 36667, 39333, 39954, 26412, 20086, 20472, 22857, 23553, 23791, 23792, 25447, 26834, 28925, 29090, 29739, 32299, 34028, 34562, 36898, 37586, 40179, 19981, 20184, 20463, 20613, 21078, 21103, 21542, 21648, 22496, 22827, 23142, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 23386, 23413, 23500, 24220, 63846, 25206, 25975, 26023, 28014, 28325, 29238, 31526, 31807, 32566, 33104, 33105, 33178, 33344, 33433, 33705, 35331, 36e3, 36070, 36091, 36212, 36282, 37096, 37340, 38428, 38468, 39385, 40167, 21271, 20998, 21545, 22132, 22707, 22868, 22894, 24575, 24996, 25198, 26128, 27774, 28954, 30406, 31881, 31966, 32027, 33452, 36033, 38640, 63847, 20315, 24343, 24447, 25282, 23849, 26379, 26842, 30844, 32323, 40300, 19989, 20633, 21269, 21290, 21329, 22915, 23138, 24199, 24754, 24970, 25161, 25209, 26e3, 26503, 27047, 27604, 27606, 27607, 27608, 27832, 63848, 29749, 30202, 30738, 30865, 31189, 31192, 31875, 32203, 32737, 32933, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 33086, 33218, 33778, 34586, 35048, 35513, 35692, 36027, 37145, 38750, 39131, 40763, 22188, 23338, 24428, 25996, 27315, 27567, 27996, 28657, 28693, 29277, 29613, 36007, 36051, 38971, 24977, 27703, 32856, 39425, 20045, 20107, 20123, 20181, 20282, 20284, 20351, 20447, 20735, 21490, 21496, 21766, 21987, 22235, 22763, 22882, 23057, 23531, 23546, 23556, 24051, 24107, 24473, 24605, 25448, 26012, 26031, 26614, 26619, 26797, 27515, 27801, 27863, 28195, 28681, 29509, 30722, 31038, 31040, 31072, 31169, 31721, 32023, 32114, 32902, 33293, 33678, 34001, 34503, 35039, 35408, 35422, 35613, 36060, 36198, 36781, 37034, 39164, 39391, 40605, 21066, 63849, 26388, 63850, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20632, 21034, 23665, 25955, 27733, 29642, 29987, 30109, 31639, 33948, 37240, 38704, 20087, 25746, 27578, 29022, 34217, 19977, 63851, 26441, 26862, 28183, 33439, 34072, 34923, 25591, 28545, 37394, 39087, 19978, 20663, 20687, 20767, 21830, 21930, 22039, 23360, 23577, 23776, 24120, 24202, 24224, 24258, 24819, 26705, 27233, 28248, 29245, 29248, 29376, 30456, 31077, 31665, 32724, 35059, 35316, 35443, 35937, 36062, 38684, 22622, 29885, 36093, 21959, 63852, 31329, 32034, 33394, 29298, 29983, 29989, 63853, 31513, 22661, 22779, 23996, 24207, 24246, 24464, 24661, 25234, 25471, 25933, 26257, 26329, 26360, 26646, 26866, 29312, 29790, 31598, 32110, 32214, 32626, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32997, 33298, 34223, 35199, 35475, 36893, 37604, 40653, 40736, 22805, 22893, 24109, 24796, 26132, 26227, 26512, 27728, 28101, 28511, 30707, 30889, 33990, 37323, 37675, 20185, 20682, 20808, 21892, 23307, 23459, 25159, 25982, 26059, 28210, 29053, 29697, 29764, 29831, 29887, 30316, 31146, 32218, 32341, 32680, 33146, 33203, 33337, 34330, 34796, 35445, 36323, 36984, 37521, 37925, 39245, 39854, 21352, 23633, 26964, 27844, 27945, 28203, 33292, 34203, 35131, 35373, 35498, 38634, 40807, 21089, 26297, 27570, 32406, 34814, 36109, 38275, 38493, 25885, 28041, 29166, 63854, 22478, 22995, 23468, 24615, 24826, 25104, 26143, 26207, 29481, 29689, 30427, 30465, 31596, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32854, 32882, 33125, 35488, 37266, 19990, 21218, 27506, 27927, 31237, 31545, 32048, 63855, 36016, 21484, 22063, 22609, 23477, 23567, 23569, 24034, 25152, 25475, 25620, 26157, 26803, 27836, 28040, 28335, 28703, 28836, 29138, 29990, 30095, 30094, 30233, 31505, 31712, 31787, 32032, 32057, 34092, 34157, 34311, 35380, 36877, 36961, 37045, 37559, 38902, 39479, 20439, 23660, 26463, 28049, 31903, 32396, 35606, 36118, 36895, 23403, 24061, 25613, 33984, 36956, 39137, 29575, 23435, 24730, 26494, 28126, 35359, 35494, 36865, 38924, 21047, 63856, 28753, 30862, 37782, 34928, 37335, 20462, 21463, 22013, 22234, 22402, 22781, 23234, 23432, 23723, 23744, 24101, 24833, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 25101, 25163, 25480, 25628, 25910, 25976, 27193, 27530, 27700, 27929, 28465, 29159, 29417, 29560, 29703, 29874, 30246, 30561, 31168, 31319, 31466, 31929, 32143, 32172, 32353, 32670, 33065, 33585, 33936, 34010, 34282, 34966, 35504, 35728, 36664, 36930, 36995, 37228, 37526, 37561, 38539, 38567, 38568, 38614, 38656, 38920, 39318, 39635, 39706, 21460, 22654, 22809, 23408, 23487, 28113, 28506, 29087, 29729, 29881, 32901, 33789, 24033, 24455, 24490, 24642, 26092, 26642, 26991, 27219, 27529, 27957, 28147, 29667, 30462, 30636, 31565, 32020, 33059, 33308, 33600, 34036, 34147, 35426, 35524, 37255, 37662, 38918, 39348, 25100, 34899, 36848, 37477, 23815, 23847, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 23913, 29791, 33181, 34664, 28629, 25342, 32722, 35126, 35186, 19998, 20056, 20711, 21213, 21319, 25215, 26119, 32361, 34821, 38494, 20365, 21273, 22070, 22987, 23204, 23608, 23630, 23629, 24066, 24337, 24643, 26045, 26159, 26178, 26558, 26612, 29468, 30690, 31034, 32709, 33940, 33997, 35222, 35430, 35433, 35553, 35925, 35962, 22516, 23508, 24335, 24687, 25325, 26893, 27542, 28252, 29060, 31698, 34645, 35672, 36606, 39135, 39166, 20280, 20353, 20449, 21627, 23072, 23480, 24892, 26032, 26216, 29180, 30003, 31070, 32051, 33102, 33251, 33688, 34218, 34254, 34563, 35338, 36523, 36763, 63857, 36805, 22833, 23460, 23526, 24713, 23529, 23563, 24515, 27777, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63858, 28145, 28683, 29978, 33455, 35574, 20160, 21313, 63859, 38617, 27663, 20126, 20420, 20818, 21854, 23077, 23784, 25105, 29273, 33469, 33706, 34558, 34905, 35357, 38463, 38597, 39187, 40201, 40285, 22538, 23731, 23997, 24132, 24801, 24853, 25569, 27138, 28197, 37122, 37716, 38990, 39952, 40823, 23433, 23736, 25353, 26191, 26696, 30524, 38593, 38797, 38996, 39839, 26017, 35585, 36555, 38332, 21813, 23721, 24022, 24245, 26263, 30284, 33780, 38343, 22739, 25276, 29390, 40232, 20208, 22830, 24591, 26171, 27523, 31207, 40230, 21395, 21696, 22467, 23830, 24859, 26326, 28079, 30861, 33406, 38552, 38724, 21380, 25212, 25494, 28082, 32266, 33099, 38989, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 27387, 32588, 40367, 40474, 20063, 20539, 20918, 22812, 24825, 25590, 26928, 29242, 32822, 63860, 37326, 24369, 63861, 63862, 32004, 33509, 33903, 33979, 34277, 36493, 63863, 20335, 63864, 63865, 22756, 23363, 24665, 25562, 25880, 25965, 26264, 63866, 26954, 27171, 27915, 28673, 29036, 30162, 30221, 31155, 31344, 63867, 32650, 63868, 35140, 63869, 35731, 37312, 38525, 63870, 39178, 22276, 24481, 26044, 28417, 30208, 31142, 35486, 39341, 39770, 40812, 20740, 25014, 25233, 27277, 33222, 20547, 22576, 24422, 28937, 35328, 35578, 23420, 34326, 20474, 20796, 22196, 22852, 25513, 28153, 23978, 26989, 20870, 20104, 20313, 63871, 63872, 63873, 22914, 63874, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63875, 27487, 27741, 63876, 29877, 30998, 63877, 33287, 33349, 33593, 36671, 36701, 63878, 39192, 63879, 63880, 63881, 20134, 63882, 22495, 24441, 26131, 63883, 63884, 30123, 32377, 35695, 63885, 36870, 39515, 22181, 22567, 23032, 23071, 23476, 63886, 24310, 63887, 63888, 25424, 25403, 63889, 26941, 27783, 27839, 28046, 28051, 28149, 28436, 63890, 28895, 28982, 29017, 63891, 29123, 29141, 63892, 30799, 30831, 63893, 31605, 32227, 63894, 32303, 63895, 34893, 36575, 63896, 63897, 63898, 37467, 63899, 40182, 63900, 63901, 63902, 24709, 28037, 63903, 29105, 63904, 63905, 38321, 21421, 63906, 63907, 63908, 26579, 63909, 28814, 28976, 29744, 33398, 33490, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63910, 38331, 39653, 40573, 26308, 63911, 29121, 33865, 63912, 63913, 22603, 63914, 63915, 23992, 24433, 63916, 26144, 26254, 27001, 27054, 27704, 27891, 28214, 28481, 28634, 28699, 28719, 29008, 29151, 29552, 63917, 29787, 63918, 29908, 30408, 31310, 32403, 63919, 63920, 33521, 35424, 36814, 63921, 37704, 63922, 38681, 63923, 63924, 20034, 20522, 63925, 21e3, 21473, 26355, 27757, 28618, 29450, 30591, 31330, 33454, 34269, 34306, 63926, 35028, 35427, 35709, 35947, 63927, 37555, 63928, 38675, 38928, 20116, 20237, 20425, 20658, 21320, 21566, 21555, 21978, 22626, 22714, 22887, 23067, 23524, 24735, 63929, 25034, 25942, 26111, 26212, 26791, 27738, 28595, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 28879, 29100, 29522, 31613, 34568, 35492, 39986, 40711, 23627, 27779, 29508, 29577, 37434, 28331, 29797, 30239, 31337, 32277, 34314, 20800, 22725, 25793, 29934, 29973, 30320, 32705, 37013, 38605, 39252, 28198, 29926, 31401, 31402, 33253, 34521, 34680, 35355, 23113, 23436, 23451, 26785, 26880, 28003, 29609, 29715, 29740, 30871, 32233, 32747, 33048, 33109, 33694, 35916, 38446, 38929, 26352, 24448, 26106, 26505, 27754, 29579, 20525, 23043, 27498, 30702, 22806, 23916, 24013, 29477, 30031, 63930, 63931, 20709, 20985, 22575, 22829, 22934, 23002, 23525, 63932, 63933, 23970, 25303, 25622, 25747, 25854, 63934, 26332, 63935, 27208, 63936, 29183, 29796, 63937, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31368, 31407, 32327, 32350, 32768, 33136, 63938, 34799, 35201, 35616, 36953, 63939, 36992, 39250, 24958, 27442, 28020, 32287, 35109, 36785, 20433, 20653, 20887, 21191, 22471, 22665, 23481, 24248, 24898, 27029, 28044, 28263, 28342, 29076, 29794, 29992, 29996, 32883, 33592, 33993, 36362, 37780, 37854, 63940, 20110, 20305, 20598, 20778, 21448, 21451, 21491, 23431, 23507, 23588, 24858, 24962, 26100, 29275, 29591, 29760, 30402, 31056, 31121, 31161, 32006, 32701, 33419, 34261, 34398, 36802, 36935, 37109, 37354, 38533, 38632, 38633, 21206, 24423, 26093, 26161, 26671, 29020, 31286, 37057, 38922, 20113, 63941, 27218, 27550, 28560, 29065, 32792, 33464, 34131, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36939, 38549, 38642, 38907, 34074, 39729, 20112, 29066, 38596, 20803, 21407, 21729, 22291, 22290, 22435, 23195, 23236, 23491, 24616, 24895, 25588, 27781, 27961, 28274, 28304, 29232, 29503, 29783, 33489, 34945, 36677, 36960, 63942, 38498, 39e3, 40219, 26376, 36234, 37470, 20301, 20553, 20702, 21361, 22285, 22996, 23041, 23561, 24944, 26256, 28205, 29234, 29771, 32239, 32963, 33806, 33894, 34111, 34655, 34907, 35096, 35586, 36949, 38859, 39759, 20083, 20369, 20754, 20842, 63943, 21807, 21929, 23418, 23461, 24188, 24189, 24254, 24736, 24799, 24840, 24841, 25540, 25912, 26377, 63944, 26580, 26586, 63945, 26977, 26978, 27833, 27943, 63946, 28216, 63947, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 28641, 29494, 29495, 63948, 29788, 30001, 63949, 30290, 63950, 63951, 32173, 33278, 33848, 35029, 35480, 35547, 35565, 36400, 36418, 36938, 36926, 36986, 37193, 37321, 37742, 63952, 63953, 22537, 63954, 27603, 32905, 32946, 63955, 63956, 20801, 22891, 23609, 63957, 63958, 28516, 29607, 32996, 36103, 63959, 37399, 38287, 63960, 63961, 63962, 63963, 32895, 25102, 28700, 32104, 34701, 63964, 22432, 24681, 24903, 27575, 35518, 37504, 38577, 20057, 21535, 28139, 34093, 38512, 38899, 39150, 25558, 27875, 37009, 20957, 25033, 33210, 40441, 20381, 20506, 20736, 23452, 24847, 25087, 25836, 26885, 27589, 30097, 30691, 32681, 33380, 34191, 34811, 34915, 35516, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 35696, 37291, 20108, 20197, 20234, 63965, 63966, 22839, 23016, 63967, 24050, 24347, 24411, 24609, 63968, 63969, 63970, 63971, 29246, 29669, 63972, 30064, 30157, 63973, 31227, 63974, 32780, 32819, 32900, 33505, 33617, 63975, 63976, 36029, 36019, 36999, 63977, 63978, 39156, 39180, 63979, 63980, 28727, 30410, 32714, 32716, 32764, 35610, 20154, 20161, 20995, 21360, 63981, 21693, 22240, 23035, 23493, 24341, 24525, 28270, 63982, 63983, 32106, 33589, 63984, 34451, 35469, 63985, 38765, 38775, 63986, 63987, 19968, 20314, 20350, 22777, 26085, 28322, 36920, 37808, 39353, 20219, 22764, 22922, 23001, 24641, 63988, 63989, 31252, 63990, 33615, 36035, 20837, 21316, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63991, 63992, 63993, 20173, 21097, 23381, 33471, 20180, 21050, 21672, 22985, 23039, 23376, 23383, 23388, 24675, 24904, 28363, 28825, 29038, 29574, 29943, 30133, 30913, 32043, 32773, 33258, 33576, 34071, 34249, 35566, 36039, 38604, 20316, 21242, 22204, 26027, 26152, 28796, 28856, 29237, 32189, 33421, 37196, 38592, 40306, 23409, 26855, 27544, 28538, 30430, 23697, 26283, 28507, 31668, 31786, 34870, 38620, 19976, 20183, 21280, 22580, 22715, 22767, 22892, 23559, 24115, 24196, 24373, 25484, 26290, 26454, 27167, 27299, 27404, 28479, 29254, 63994, 29520, 29835, 31456, 31911, 33144, 33247, 33255, 33674, 33900, 34083, 34196, 34255, 35037, 36115, 37292, 38263, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38556, 20877, 21705, 22312, 23472, 25165, 26448, 26685, 26771, 28221, 28371, 28797, 32289, 35009, 36001, 36617, 40779, 40782, 29229, 31631, 35533, 37658, 20295, 20302, 20786, 21632, 22992, 24213, 25269, 26485, 26990, 27159, 27822, 28186, 29401, 29482, 30141, 31672, 32053, 33511, 33785, 33879, 34295, 35419, 36015, 36487, 36889, 37048, 38606, 40799, 21219, 21514, 23265, 23490, 25688, 25973, 28404, 29380, 63995, 30340, 31309, 31515, 31821, 32318, 32735, 33659, 35627, 36042, 36196, 36321, 36447, 36842, 36857, 36969, 37841, 20291, 20346, 20659, 20840, 20856, 21069, 21098, 22625, 22652, 22880, 23560, 23637, 24283, 24731, 25136, 26643, 27583, 27656, 28593, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29006, 29728, 3e4, 30008, 30033, 30322, 31564, 31627, 31661, 31686, 32399, 35438, 36670, 36681, 37439, 37523, 37666, 37931, 38651, 39002, 39019, 39198, 20999, 25130, 25240, 27993, 30308, 31434, 31680, 32118, 21344, 23742, 24215, 28472, 28857, 31896, 38673, 39822, 40670, 25509, 25722, 34678, 19969, 20117, 20141, 20572, 20597, 21576, 22979, 23450, 24128, 24237, 24311, 24449, 24773, 25402, 25919, 25972, 26060, 26230, 26232, 26622, 26984, 27273, 27491, 27712, 28096, 28136, 28191, 28254, 28702, 28833, 29582, 29693, 30010, 30555, 30855, 31118, 31243, 31357, 31934, 32142, 33351, 35330, 35562, 35998, 37165, 37194, 37336, 37478, 37580, 37664, 38662, 38742, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38748, 38914, 40718, 21046, 21137, 21884, 22564, 24093, 24351, 24716, 25552, 26799, 28639, 31085, 31532, 33229, 34234, 35069, 35576, 36420, 37261, 38500, 38555, 38717, 38988, 40778, 20430, 20806, 20939, 21161, 22066, 24340, 24427, 25514, 25805, 26089, 26177, 26362, 26361, 26397, 26781, 26839, 27133, 28437, 28526, 29031, 29157, 29226, 29866, 30522, 31062, 31066, 31199, 31264, 31381, 31895, 31967, 32068, 32368, 32903, 34299, 34468, 35412, 35519, 36249, 36481, 36896, 36973, 37347, 38459, 38613, 40165, 26063, 31751, 36275, 37827, 23384, 23562, 21330, 25305, 29469, 20519, 23447, 24478, 24752, 24939, 26837, 28121, 29742, 31278, 32066, 32156, 32305, 33131, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36394, 36405, 37758, 37912, 20304, 22352, 24038, 24231, 25387, 32618, 20027, 20303, 20367, 20570, 23005, 32964, 21610, 21608, 22014, 22863, 23449, 24030, 24282, 26205, 26417, 26609, 26666, 27880, 27954, 28234, 28557, 28855, 29664, 30087, 31820, 32002, 32044, 32162, 33311, 34523, 35387, 35461, 36208, 36490, 36659, 36913, 37198, 37202, 37956, 39376, 31481, 31909, 20426, 20737, 20934, 22472, 23535, 23803, 26201, 27197, 27994, 28310, 28652, 28940, 30063, 31459, 34850, 36897, 36981, 38603, 39423, 33537, 20013, 20210, 34886, 37325, 21373, 27355, 26987, 27713, 33914, 22686, 24974, 26366, 25327, 28893, 29969, 30151, 32338, 33976, 35657, 36104, 20043, 21482, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21675, 22320, 22336, 24535, 25345, 25351, 25711, 25903, 26088, 26234, 26525, 26547, 27490, 27744, 27802, 28460, 30693, 30757, 31049, 31063, 32025, 32930, 33026, 33267, 33437, 33463, 34584, 35468, 63996, 36100, 36286, 36978, 30452, 31257, 31287, 32340, 32887, 21767, 21972, 22645, 25391, 25634, 26185, 26187, 26733, 27035, 27524, 27941, 28337, 29645, 29800, 29857, 30043, 30137, 30433, 30494, 30603, 31206, 32265, 32285, 33275, 34095, 34967, 35386, 36049, 36587, 36784, 36914, 37805, 38499, 38515, 38663, 20356, 21489, 23018, 23241, 24089, 26702, 29894, 30142, 31209, 31378, 33187, 34541, 36074, 36300, 36845, 26015, 26389, 63997, 22519, 28503, 32221, 36655, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 37878, 38598, 24501, 25074, 28548, 19988, 20376, 20511, 21449, 21983, 23919, 24046, 27425, 27492, 30923, 31642, 63998, 36425, 36554, 36974, 25417, 25662, 30528, 31364, 37679, 38015, 40810, 25776, 28591, 29158, 29864, 29914, 31428, 31762, 32386, 31922, 32408, 35738, 36106, 38013, 39184, 39244, 21049, 23519, 25830, 26413, 32046, 20717, 21443, 22649, 24920, 24921, 25082, 26028, 31449, 35730, 35734, 20489, 20513, 21109, 21809, 23100, 24288, 24432, 24884, 25950, 26124, 26166, 26274, 27085, 28356, 28466, 29462, 30241, 31379, 33081, 33369, 33750, 33980, 20661, 22512, 23488, 23528, 24425, 25505, 30758, 32181, 33756, 34081, 37319, 37365, 20874, 26613, 31574, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36012, 20932, 22971, 24765, 34389, 20508, 63999, 21076, 23610, 24957, 25114, 25299, 25842, 26021, 28364, 30240, 33034, 36448, 38495, 38587, 20191, 21315, 21912, 22825, 24029, 25797, 27849, 28154, 29588, 31359, 33307, 34214, 36068, 36368, 36983, 37351, 38369, 38433, 38854, 20984, 21746, 21894, 24505, 25764, 28552, 32180, 36639, 36685, 37941, 20681, 23574, 27838, 28155, 29979, 30651, 31805, 31844, 35449, 35522, 22558, 22974, 24086, 25463, 29266, 30090, 30571, 35548, 36028, 36626, 24307, 26228, 28152, 32893, 33729, 35531, 38737, 39894, 64e3, 21059, 26367, 28053, 28399, 32224, 35558, 36910, 36958, 39636, 21021, 21119, 21736, 24980, 25220, 25307, 26786, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26898, 26970, 27189, 28818, 28966, 30813, 30977, 30990, 31186, 31245, 32918, 33400, 33493, 33609, 34121, 35970, 36229, 37218, 37259, 37294, 20419, 22225, 29165, 30679, 34560, 35320, 23544, 24534, 26449, 37032, 21474, 22618, 23541, 24740, 24961, 25696, 32317, 32880, 34085, 37507, 25774, 20652, 23828, 26368, 22684, 25277, 25512, 26894, 27e3, 27166, 28267, 30394, 31179, 33467, 33833, 35535, 36264, 36861, 37138, 37195, 37276, 37648, 37656, 37786, 38619, 39478, 39949, 19985, 30044, 31069, 31482, 31569, 31689, 32302, 33988, 36441, 36468, 36600, 36880, 26149, 26943, 29763, 20986, 26414, 40668, 20805, 24544, 27798, 34802, 34909, 34935, 24756, 33205, 33795, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36101, 21462, 21561, 22068, 23094, 23601, 28810, 32736, 32858, 33030, 33261, 36259, 37257, 39519, 40434, 20596, 20164, 21408, 24827, 28204, 23652, 20360, 20516, 21988, 23769, 24159, 24677, 26772, 27835, 28100, 29118, 30164, 30196, 30305, 31258, 31305, 32199, 32251, 32622, 33268, 34473, 36636, 38601, 39347, 40786, 21063, 21189, 39149, 35242, 19971, 26578, 28422, 20405, 23522, 26517, 27784, 28024, 29723, 30759, 37341, 37756, 34756, 31204, 31281, 24555, 20182, 21668, 21822, 22702, 22949, 24816, 25171, 25302, 26422, 26965, 33333, 38464, 39345, 39389, 20524, 21331, 21828, 22396, 64001, 25176, 64002, 25826, 26219, 26589, 28609, 28655, 29730, 29752, 35351, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 37944, 21585, 22022, 22374, 24392, 24986, 27470, 28760, 28845, 32187, 35477, 22890, 33067, 25506, 30472, 32829, 36010, 22612, 25645, 27067, 23445, 24081, 28271, 64003, 34153, 20812, 21488, 22826, 24608, 24907, 27526, 27760, 27888, 31518, 32974, 33492, 36294, 37040, 39089, 64004, 25799, 28580, 25745, 25860, 20814, 21520, 22303, 35342, 24927, 26742, 64005, 30171, 31570, 32113, 36890, 22534, 27084, 33151, 35114, 36864, 38969, 20600, 22871, 22956, 25237, 36879, 39722, 24925, 29305, 38358, 22369, 23110, 24052, 25226, 25773, 25850, 26487, 27874, 27966, 29228, 29750, 30772, 32631, 33453, 36315, 38935, 21028, 22338, 26495, 29256, 29923, 36009, 36774, 37393, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38442, 20843, 21485, 25420, 20329, 21764, 24726, 25943, 27803, 28031, 29260, 29437, 31255, 35207, 35997, 24429, 28558, 28921, 33192, 24846, 20415, 20559, 25153, 29255, 31687, 32232, 32745, 36941, 38829, 39449, 36022, 22378, 24179, 26544, 33805, 35413, 21536, 23318, 24163, 24290, 24330, 25987, 32954, 34109, 38281, 38491, 20296, 21253, 21261, 21263, 21638, 21754, 22275, 24067, 24598, 25243, 25265, 25429, 64006, 27873, 28006, 30129, 30770, 32990, 33071, 33502, 33889, 33970, 34957, 35090, 36875, 37610, 39165, 39825, 24133, 26292, 26333, 28689, 29190, 64007, 20469, 21117, 24426, 24915, 26451, 27161, 28418, 29922, 31080, 34920, 35961, 39111, 39108, 39491, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21697, 31263, 26963, 35575, 35914, 39080, 39342, 24444, 25259, 30130, 30382, 34987, 36991, 38466, 21305, 24380, 24517, 27852, 29644, 30050, 30091, 31558, 33534, 39325, 20047, 36924, 19979, 20309, 21414, 22799, 24264, 26160, 27827, 29781, 33655, 34662, 36032, 36944, 38686, 39957, 22737, 23416, 34384, 35604, 40372, 23506, 24680, 24717, 26097, 27735, 28450, 28579, 28698, 32597, 32752, 38289, 38290, 38480, 38867, 21106, 36676, 20989, 21547, 21688, 21859, 21898, 27323, 28085, 32216, 33382, 37532, 38519, 40569, 21512, 21704, 30418, 34532, 38308, 38356, 38492, 20130, 20233, 23022, 23270, 24055, 24658, 25239, 26477, 26689, 27782, 28207, 32568, 32923, 33322, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 64008, 64009, 38917, 20133, 20565, 21683, 22419, 22874, 23401, 23475, 25032, 26999, 28023, 28707, 34809, 35299, 35442, 35559, 36994, 39405, 39608, 21182, 26680, 20502, 24184, 26447, 33607, 34892, 20139, 21521, 22190, 29670, 37141, 38911, 39177, 39255, 39321, 22099, 22687, 34395, 35377, 25010, 27382, 29563, 36562, 27463, 38570, 39511, 22869, 29184, 36203, 38761, 20436, 23796, 24358, 25080, 26203, 27883, 28843, 29572, 29625, 29694, 30505, 30541, 32067, 32098, 32291, 33335, 34898, 64010, 36066, 37449, 39023, 23377, 31348, 34880, 38913, 23244, 20448, 21332, 22846, 23805, 25406, 28025, 29433, 33029, 33031, 33698, 37583, 38960, 20136, 20804, 21009, 22411, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 24418, 27842, 28366, 28677, 28752, 28847, 29074, 29673, 29801, 33610, 34722, 34913, 36872, 37026, 37795, 39336, 20846, 24407, 24800, 24935, 26291, 34137, 36426, 37295, 38795, 20046, 20114, 21628, 22741, 22778, 22909, 23733, 24359, 25142, 25160, 26122, 26215, 27627, 28009, 28111, 28246, 28408, 28564, 28640, 28649, 28765, 29392, 29733, 29786, 29920, 30355, 31068, 31946, 32286, 32993, 33446, 33899, 33983, 34382, 34399, 34676, 35703, 35946, 37804, 38912, 39013, 24785, 25110, 37239, 23130, 26127, 28151, 28222, 29759, 39746, 24573, 24794, 31503, 21700, 24344, 27742, 27859, 27946, 28888, 32005, 34425, 35340, 40251, 21270, 21644, 23301, 27194, 28779, 30069, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31117, 31166, 33457, 33775, 35441, 35649, 36008, 38772, 64011, 25844, 25899, 30906, 30907, 31339, 20024, 21914, 22864, 23462, 24187, 24739, 25563, 27489, 26213, 26707, 28185, 29029, 29872, 32008, 36996, 39529, 39973, 27963, 28369, 29502, 35905, 38346, 20976, 24140, 24488, 24653, 24822, 24880, 24908, 26179, 26180, 27045, 27841, 28255, 28361, 28514, 29004, 29852, 30343, 31681, 31783, 33618, 34647, 36945, 38541, 40643, 21295, 22238, 24315, 24458, 24674, 24724, 25079, 26214, 26371, 27292, 28142, 28590, 28784, 29546, 32362, 33214, 33588, 34516, 35496, 36036, 21123, 29554, 23446, 27243, 37892, 21742, 22150, 23389, 25928, 25989, 26313, 26783, 28045, 28102, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29243, 32948, 37237, 39501, 20399, 20505, 21402, 21518, 21564, 21897, 21957, 24127, 24460, 26429, 29030, 29661, 36869, 21211, 21235, 22628, 22734, 28932, 29071, 29179, 34224, 35347, 26248, 34216, 21927, 26244, 29002, 33841, 21321, 21913, 27585, 24409, 24509, 25582, 26249, 28999, 35569, 36637, 40638, 20241, 25658, 28875, 30054, 34407, 24676, 35662, 40440, 20807, 20982, 21256, 27958, 33016, 40657, 26133, 27427, 28824, 30165, 21507, 23673, 32007, 35350, 27424, 27453, 27462, 21560, 24688, 27965, 32725, 33288, 20694, 20958, 21916, 22123, 22221, 23020, 23305, 24076, 24985, 24984, 25137, 26206, 26342, 29081, 29113, 29114, 29351, 31143, 31232, 32690, 35440, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + "gb18030": [19970, 19972, 19973, 19974, 19983, 19986, 19991, 19999, 2e4, 20001, 20003, 20006, 20009, 20014, 20015, 20017, 20019, 20021, 20023, 20028, 20032, 20033, 20034, 20036, 20038, 20042, 20049, 20053, 20055, 20058, 20059, 20066, 20067, 20068, 20069, 20071, 20072, 20074, 20075, 20076, 20077, 20078, 20079, 20082, 20084, 20085, 20086, 20087, 20088, 20089, 20090, 20091, 20092, 20093, 20095, 20096, 20097, 20098, 20099, 20100, 20101, 20103, 20106, 20112, 20118, 20119, 20121, 20124, 20125, 20126, 20131, 20138, 20143, 20144, 20145, 20148, 20150, 20151, 20152, 20153, 20156, 20157, 20158, 20168, 20172, 20175, 20176, 20178, 20186, 20187, 20188, 20192, 20194, 20198, 20199, 20201, 20205, 20206, 20207, 20209, 20212, 20216, 20217, 20218, 20220, 20222, 20224, 20226, 20227, 20228, 20229, 20230, 20231, 20232, 20235, 20236, 20242, 20243, 20244, 20245, 20246, 20252, 20253, 20257, 20259, 20264, 20265, 20268, 20269, 20270, 20273, 20275, 20277, 20279, 20281, 20283, 20286, 20287, 20288, 20289, 20290, 20292, 20293, 20295, 20296, 20297, 20298, 20299, 20300, 20306, 20308, 20310, 20321, 20322, 20326, 20328, 20330, 20331, 20333, 20334, 20337, 20338, 20341, 20343, 20344, 20345, 20346, 20349, 20352, 20353, 20354, 20357, 20358, 20359, 20362, 20364, 20366, 20368, 20370, 20371, 20373, 20374, 20376, 20377, 20378, 20380, 20382, 20383, 20385, 20386, 20388, 20395, 20397, 20400, 20401, 20402, 20403, 20404, 20406, 20407, 20408, 20409, 20410, 20411, 20412, 20413, 20414, 20416, 20417, 20418, 20422, 20423, 20424, 20425, 20427, 20428, 20429, 20434, 20435, 20436, 20437, 20438, 20441, 20443, 20448, 20450, 20452, 20453, 20455, 20459, 20460, 20464, 20466, 20468, 20469, 20470, 20471, 20473, 20475, 20476, 20477, 20479, 20480, 20481, 20482, 20483, 20484, 20485, 20486, 20487, 20488, 20489, 20490, 20491, 20494, 20496, 20497, 20499, 20501, 20502, 20503, 20507, 20509, 20510, 20512, 20514, 20515, 20516, 20519, 20523, 20527, 20528, 20529, 20530, 20531, 20532, 20533, 20534, 20535, 20536, 20537, 20539, 20541, 20543, 20544, 20545, 20546, 20548, 20549, 20550, 20553, 20554, 20555, 20557, 20560, 20561, 20562, 20563, 20564, 20566, 20567, 20568, 20569, 20571, 20573, 20574, 20575, 20576, 20577, 20578, 20579, 20580, 20582, 20583, 20584, 20585, 20586, 20587, 20589, 20590, 20591, 20592, 20593, 20594, 20595, 20596, 20597, 20600, 20601, 20602, 20604, 20605, 20609, 20610, 20611, 20612, 20614, 20615, 20617, 20618, 20619, 20620, 20622, 20623, 20624, 20625, 20626, 20627, 20628, 20629, 20630, 20631, 20632, 20633, 20634, 20635, 20636, 20637, 20638, 20639, 20640, 20641, 20642, 20644, 20646, 20650, 20651, 20653, 20654, 20655, 20656, 20657, 20659, 20660, 20661, 20662, 20663, 20664, 20665, 20668, 20669, 20670, 20671, 20672, 20673, 20674, 20675, 20676, 20677, 20678, 20679, 20680, 20681, 20682, 20683, 20684, 20685, 20686, 20688, 20689, 20690, 20691, 20692, 20693, 20695, 20696, 20697, 20699, 20700, 20701, 20702, 20703, 20704, 20705, 20706, 20707, 20708, 20709, 20712, 20713, 20714, 20715, 20719, 20720, 20721, 20722, 20724, 20726, 20727, 20728, 20729, 20730, 20732, 20733, 20734, 20735, 20736, 20737, 20738, 20739, 20740, 20741, 20744, 20745, 20746, 20748, 20749, 20750, 20751, 20752, 20753, 20755, 20756, 20757, 20758, 20759, 20760, 20761, 20762, 20763, 20764, 20765, 20766, 20767, 20768, 20770, 20771, 20772, 20773, 20774, 20775, 20776, 20777, 20778, 20779, 20780, 20781, 20782, 20783, 20784, 20785, 20786, 20787, 20788, 20789, 20790, 20791, 20792, 20793, 20794, 20795, 20796, 20797, 20798, 20802, 20807, 20810, 20812, 20814, 20815, 20816, 20818, 20819, 20823, 20824, 20825, 20827, 20829, 20830, 20831, 20832, 20833, 20835, 20836, 20838, 20839, 20841, 20842, 20847, 20850, 20858, 20862, 20863, 20867, 20868, 20870, 20871, 20874, 20875, 20878, 20879, 20880, 20881, 20883, 20884, 20888, 20890, 20893, 20894, 20895, 20897, 20899, 20902, 20903, 20904, 20905, 20906, 20909, 20910, 20916, 20920, 20921, 20922, 20926, 20927, 20929, 20930, 20931, 20933, 20936, 20938, 20941, 20942, 20944, 20946, 20947, 20948, 20949, 20950, 20951, 20952, 20953, 20954, 20956, 20958, 20959, 20962, 20963, 20965, 20966, 20967, 20968, 20969, 20970, 20972, 20974, 20977, 20978, 20980, 20983, 20990, 20996, 20997, 21001, 21003, 21004, 21007, 21008, 21011, 21012, 21013, 21020, 21022, 21023, 21025, 21026, 21027, 21029, 21030, 21031, 21034, 21036, 21039, 21041, 21042, 21044, 21045, 21052, 21054, 21060, 21061, 21062, 21063, 21064, 21065, 21067, 21070, 21071, 21074, 21075, 21077, 21079, 21080, 21081, 21082, 21083, 21085, 21087, 21088, 21090, 21091, 21092, 21094, 21096, 21099, 21100, 21101, 21102, 21104, 21105, 21107, 21108, 21109, 21110, 21111, 21112, 21113, 21114, 21115, 21116, 21118, 21120, 21123, 21124, 21125, 21126, 21127, 21129, 21130, 21131, 21132, 21133, 21134, 21135, 21137, 21138, 21140, 21141, 21142, 21143, 21144, 21145, 21146, 21148, 21156, 21157, 21158, 21159, 21166, 21167, 21168, 21172, 21173, 21174, 21175, 21176, 21177, 21178, 21179, 21180, 21181, 21184, 21185, 21186, 21188, 21189, 21190, 21192, 21194, 21196, 21197, 21198, 21199, 21201, 21203, 21204, 21205, 21207, 21209, 21210, 21211, 21212, 21213, 21214, 21216, 21217, 21218, 21219, 21221, 21222, 21223, 21224, 21225, 21226, 21227, 21228, 21229, 21230, 21231, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21240, 21243, 21244, 21245, 21249, 21250, 21251, 21252, 21255, 21257, 21258, 21259, 21260, 21262, 21265, 21266, 21267, 21268, 21272, 21275, 21276, 21278, 21279, 21282, 21284, 21285, 21287, 21288, 21289, 21291, 21292, 21293, 21295, 21296, 21297, 21298, 21299, 21300, 21301, 21302, 21303, 21304, 21308, 21309, 21312, 21314, 21316, 21318, 21323, 21324, 21325, 21328, 21332, 21336, 21337, 21339, 21341, 21349, 21352, 21354, 21356, 21357, 21362, 21366, 21369, 21371, 21372, 21373, 21374, 21376, 21377, 21379, 21383, 21384, 21386, 21390, 21391, 21392, 21393, 21394, 21395, 21396, 21398, 21399, 21401, 21403, 21404, 21406, 21408, 21409, 21412, 21415, 21418, 21419, 21420, 21421, 21423, 21424, 21425, 21426, 21427, 21428, 21429, 21431, 21432, 21433, 21434, 21436, 21437, 21438, 21440, 21443, 21444, 21445, 21446, 21447, 21454, 21455, 21456, 21458, 21459, 21461, 21466, 21468, 21469, 21470, 21473, 21474, 21479, 21492, 21498, 21502, 21503, 21504, 21506, 21509, 21511, 21515, 21524, 21528, 21529, 21530, 21532, 21538, 21540, 21541, 21546, 21552, 21555, 21558, 21559, 21562, 21565, 21567, 21569, 21570, 21572, 21573, 21575, 21577, 21580, 21581, 21582, 21583, 21585, 21594, 21597, 21598, 21599, 21600, 21601, 21603, 21605, 21607, 21609, 21610, 21611, 21612, 21613, 21614, 21615, 21616, 21620, 21625, 21626, 21630, 21631, 21633, 21635, 21637, 21639, 21640, 21641, 21642, 21645, 21649, 21651, 21655, 21656, 21660, 21662, 21663, 21664, 21665, 21666, 21669, 21678, 21680, 21682, 21685, 21686, 21687, 21689, 21690, 21692, 21694, 21699, 21701, 21706, 21707, 21718, 21720, 21723, 21728, 21729, 21730, 21731, 21732, 21739, 21740, 21743, 21744, 21745, 21748, 21749, 21750, 21751, 21752, 21753, 21755, 21758, 21760, 21762, 21763, 21764, 21765, 21768, 21770, 21771, 21772, 21773, 21774, 21778, 21779, 21781, 21782, 21783, 21784, 21785, 21786, 21788, 21789, 21790, 21791, 21793, 21797, 21798, 21800, 21801, 21803, 21805, 21810, 21812, 21813, 21814, 21816, 21817, 21818, 21819, 21821, 21824, 21826, 21829, 21831, 21832, 21835, 21836, 21837, 21838, 21839, 21841, 21842, 21843, 21844, 21847, 21848, 21849, 21850, 21851, 21853, 21854, 21855, 21856, 21858, 21859, 21864, 21865, 21867, 21871, 21872, 21873, 21874, 21875, 21876, 21881, 21882, 21885, 21887, 21893, 21894, 21900, 21901, 21902, 21904, 21906, 21907, 21909, 21910, 21911, 21914, 21915, 21918, 21920, 21921, 21922, 21923, 21924, 21925, 21926, 21928, 21929, 21930, 21931, 21932, 21933, 21934, 21935, 21936, 21938, 21940, 21942, 21944, 21946, 21948, 21951, 21952, 21953, 21954, 21955, 21958, 21959, 21960, 21962, 21963, 21966, 21967, 21968, 21973, 21975, 21976, 21977, 21978, 21979, 21982, 21984, 21986, 21991, 21993, 21997, 21998, 22e3, 22001, 22004, 22006, 22008, 22009, 22010, 22011, 22012, 22015, 22018, 22019, 22020, 22021, 22022, 22023, 22026, 22027, 22029, 22032, 22033, 22034, 22035, 22036, 22037, 22038, 22039, 22041, 22042, 22044, 22045, 22048, 22049, 22050, 22053, 22054, 22056, 22057, 22058, 22059, 22062, 22063, 22064, 22067, 22069, 22071, 22072, 22074, 22076, 22077, 22078, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22091, 22095, 22096, 22097, 22098, 22099, 22101, 22102, 22106, 22107, 22109, 22110, 22111, 22112, 22113, 22115, 22117, 22118, 22119, 22125, 22126, 22127, 22128, 22130, 22131, 22132, 22133, 22135, 22136, 22137, 22138, 22141, 22142, 22143, 22144, 22145, 22146, 22147, 22148, 22151, 22152, 22153, 22154, 22155, 22156, 22157, 22160, 22161, 22162, 22164, 22165, 22166, 22167, 22168, 22169, 22170, 22171, 22172, 22173, 22174, 22175, 22176, 22177, 22178, 22180, 22181, 22182, 22183, 22184, 22185, 22186, 22187, 22188, 22189, 22190, 22192, 22193, 22194, 22195, 22196, 22197, 22198, 22200, 22201, 22202, 22203, 22205, 22206, 22207, 22208, 22209, 22210, 22211, 22212, 22213, 22214, 22215, 22216, 22217, 22219, 22220, 22221, 22222, 22223, 22224, 22225, 22226, 22227, 22229, 22230, 22232, 22233, 22236, 22243, 22245, 22246, 22247, 22248, 22249, 22250, 22252, 22254, 22255, 22258, 22259, 22262, 22263, 22264, 22267, 22268, 22272, 22273, 22274, 22277, 22279, 22283, 22284, 22285, 22286, 22287, 22288, 22289, 22290, 22291, 22292, 22293, 22294, 22295, 22296, 22297, 22298, 22299, 22301, 22302, 22304, 22305, 22306, 22308, 22309, 22310, 22311, 22315, 22321, 22322, 22324, 22325, 22326, 22327, 22328, 22332, 22333, 22335, 22337, 22339, 22340, 22341, 22342, 22344, 22345, 22347, 22354, 22355, 22356, 22357, 22358, 22360, 22361, 22370, 22371, 22373, 22375, 22380, 22382, 22384, 22385, 22386, 22388, 22389, 22392, 22393, 22394, 22397, 22398, 22399, 22400, 22401, 22407, 22408, 22409, 22410, 22413, 22414, 22415, 22416, 22417, 22420, 22421, 22422, 22423, 22424, 22425, 22426, 22428, 22429, 22430, 22431, 22437, 22440, 22442, 22444, 22447, 22448, 22449, 22451, 22453, 22454, 22455, 22457, 22458, 22459, 22460, 22461, 22462, 22463, 22464, 22465, 22468, 22469, 22470, 22471, 22472, 22473, 22474, 22476, 22477, 22480, 22481, 22483, 22486, 22487, 22491, 22492, 22494, 22497, 22498, 22499, 22501, 22502, 22503, 22504, 22505, 22506, 22507, 22508, 22510, 22512, 22513, 22514, 22515, 22517, 22518, 22519, 22523, 22524, 22526, 22527, 22529, 22531, 22532, 22533, 22536, 22537, 22538, 22540, 22542, 22543, 22544, 22546, 22547, 22548, 22550, 22551, 22552, 22554, 22555, 22556, 22557, 22559, 22562, 22563, 22565, 22566, 22567, 22568, 22569, 22571, 22572, 22573, 22574, 22575, 22577, 22578, 22579, 22580, 22582, 22583, 22584, 22585, 22586, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22597, 22598, 22599, 22600, 22601, 22602, 22603, 22606, 22607, 22608, 22610, 22611, 22613, 22614, 22615, 22617, 22618, 22619, 22620, 22621, 22623, 22624, 22625, 22626, 22627, 22628, 22630, 22631, 22632, 22633, 22634, 22637, 22638, 22639, 22640, 22641, 22642, 22643, 22644, 22645, 22646, 22647, 22648, 22649, 22650, 22651, 22652, 22653, 22655, 22658, 22660, 22662, 22663, 22664, 22666, 22667, 22668, 22669, 22670, 22671, 22672, 22673, 22676, 22677, 22678, 22679, 22680, 22683, 22684, 22685, 22688, 22689, 22690, 22691, 22692, 22693, 22694, 22695, 22698, 22699, 22700, 22701, 22702, 22703, 22704, 22705, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22713, 22714, 22715, 22717, 22718, 22719, 22720, 22722, 22723, 22724, 22726, 22727, 22728, 22729, 22730, 22731, 22732, 22733, 22734, 22735, 22736, 22738, 22739, 22740, 22742, 22743, 22744, 22745, 22746, 22747, 22748, 22749, 22750, 22751, 22752, 22753, 22754, 22755, 22757, 22758, 22759, 22760, 22761, 22762, 22765, 22767, 22769, 22770, 22772, 22773, 22775, 22776, 22778, 22779, 22780, 22781, 22782, 22783, 22784, 22785, 22787, 22789, 22790, 22792, 22793, 22794, 22795, 22796, 22798, 22800, 22801, 22802, 22803, 22807, 22808, 22811, 22813, 22814, 22816, 22817, 22818, 22819, 22822, 22824, 22828, 22832, 22834, 22835, 22837, 22838, 22843, 22845, 22846, 22847, 22848, 22851, 22853, 22854, 22858, 22860, 22861, 22864, 22866, 22867, 22873, 22875, 22876, 22877, 22878, 22879, 22881, 22883, 22884, 22886, 22887, 22888, 22889, 22890, 22891, 22892, 22893, 22894, 22895, 22896, 22897, 22898, 22901, 22903, 22906, 22907, 22908, 22910, 22911, 22912, 22917, 22921, 22923, 22924, 22926, 22927, 22928, 22929, 22932, 22933, 22936, 22938, 22939, 22940, 22941, 22943, 22944, 22945, 22946, 22950, 22951, 22956, 22957, 22960, 22961, 22963, 22964, 22965, 22966, 22967, 22968, 22970, 22972, 22973, 22975, 22976, 22977, 22978, 22979, 22980, 22981, 22983, 22984, 22985, 22988, 22989, 22990, 22991, 22997, 22998, 23001, 23003, 23006, 23007, 23008, 23009, 23010, 23012, 23014, 23015, 23017, 23018, 23019, 23021, 23022, 23023, 23024, 23025, 23026, 23027, 23028, 23029, 23030, 23031, 23032, 23034, 23036, 23037, 23038, 23040, 23042, 23050, 23051, 23053, 23054, 23055, 23056, 23058, 23060, 23061, 23062, 23063, 23065, 23066, 23067, 23069, 23070, 23073, 23074, 23076, 23078, 23079, 23080, 23082, 23083, 23084, 23085, 23086, 23087, 23088, 23091, 23093, 23095, 23096, 23097, 23098, 23099, 23101, 23102, 23103, 23105, 23106, 23107, 23108, 23109, 23111, 23112, 23115, 23116, 23117, 23118, 23119, 23120, 23121, 23122, 23123, 23124, 23126, 23127, 23128, 23129, 23131, 23132, 23133, 23134, 23135, 23136, 23137, 23139, 23140, 23141, 23142, 23144, 23145, 23147, 23148, 23149, 23150, 23151, 23152, 23153, 23154, 23155, 23160, 23161, 23163, 23164, 23165, 23166, 23168, 23169, 23170, 23171, 23172, 23173, 23174, 23175, 23176, 23177, 23178, 23179, 23180, 23181, 23182, 23183, 23184, 23185, 23187, 23188, 23189, 23190, 23191, 23192, 23193, 23196, 23197, 23198, 23199, 23200, 23201, 23202, 23203, 23204, 23205, 23206, 23207, 23208, 23209, 23211, 23212, 23213, 23214, 23215, 23216, 23217, 23220, 23222, 23223, 23225, 23226, 23227, 23228, 23229, 23231, 23232, 23235, 23236, 23237, 23238, 23239, 23240, 23242, 23243, 23245, 23246, 23247, 23248, 23249, 23251, 23253, 23255, 23257, 23258, 23259, 23261, 23262, 23263, 23266, 23268, 23269, 23271, 23272, 23274, 23276, 23277, 23278, 23279, 23280, 23282, 23283, 23284, 23285, 23286, 23287, 23288, 23289, 23290, 23291, 23292, 23293, 23294, 23295, 23296, 23297, 23298, 23299, 23300, 23301, 23302, 23303, 23304, 23306, 23307, 23308, 23309, 23310, 23311, 23312, 23313, 23314, 23315, 23316, 23317, 23320, 23321, 23322, 23323, 23324, 23325, 23326, 23327, 23328, 23329, 23330, 23331, 23332, 23333, 23334, 23335, 23336, 23337, 23338, 23339, 23340, 23341, 23342, 23343, 23344, 23345, 23347, 23349, 23350, 23352, 23353, 23354, 23355, 23356, 23357, 23358, 23359, 23361, 23362, 23363, 23364, 23365, 23366, 23367, 23368, 23369, 23370, 23371, 23372, 23373, 23374, 23375, 23378, 23382, 23390, 23392, 23393, 23399, 23400, 23403, 23405, 23406, 23407, 23410, 23412, 23414, 23415, 23416, 23417, 23419, 23420, 23422, 23423, 23426, 23430, 23434, 23437, 23438, 23440, 23441, 23442, 23444, 23446, 23455, 23463, 23464, 23465, 23468, 23469, 23470, 23471, 23473, 23474, 23479, 23482, 23483, 23484, 23488, 23489, 23491, 23496, 23497, 23498, 23499, 23501, 23502, 23503, 23505, 23508, 23509, 23510, 23511, 23512, 23513, 23514, 23515, 23516, 23520, 23522, 23523, 23526, 23527, 23529, 23530, 23531, 23532, 23533, 23535, 23537, 23538, 23539, 23540, 23541, 23542, 23543, 23549, 23550, 23552, 23554, 23555, 23557, 23559, 23560, 23563, 23564, 23565, 23566, 23568, 23570, 23571, 23575, 23577, 23579, 23582, 23583, 23584, 23585, 23587, 23590, 23592, 23593, 23594, 23595, 23597, 23598, 23599, 23600, 23602, 23603, 23605, 23606, 23607, 23619, 23620, 23622, 23623, 23628, 23629, 23634, 23635, 23636, 23638, 23639, 23640, 23642, 23643, 23644, 23645, 23647, 23650, 23652, 23655, 23656, 23657, 23658, 23659, 23660, 23661, 23664, 23666, 23667, 23668, 23669, 23670, 23671, 23672, 23675, 23676, 23677, 23678, 23680, 23683, 23684, 23685, 23686, 23687, 23689, 23690, 23691, 23694, 23695, 23698, 23699, 23701, 23709, 23710, 23711, 23712, 23713, 23716, 23717, 23718, 23719, 23720, 23722, 23726, 23727, 23728, 23730, 23732, 23734, 23737, 23738, 23739, 23740, 23742, 23744, 23746, 23747, 23749, 23750, 23751, 23752, 23753, 23754, 23756, 23757, 23758, 23759, 23760, 23761, 23763, 23764, 23765, 23766, 23767, 23768, 23770, 23771, 23772, 23773, 23774, 23775, 23776, 23778, 23779, 23783, 23785, 23787, 23788, 23790, 23791, 23793, 23794, 23795, 23796, 23797, 23798, 23799, 23800, 23801, 23802, 23804, 23805, 23806, 23807, 23808, 23809, 23812, 23813, 23816, 23817, 23818, 23819, 23820, 23821, 23823, 23824, 23825, 23826, 23827, 23829, 23831, 23832, 23833, 23834, 23836, 23837, 23839, 23840, 23841, 23842, 23843, 23845, 23848, 23850, 23851, 23852, 23855, 23856, 23857, 23858, 23859, 23861, 23862, 23863, 23864, 23865, 23866, 23867, 23868, 23871, 23872, 23873, 23874, 23875, 23876, 23877, 23878, 23880, 23881, 23885, 23886, 23887, 23888, 23889, 23890, 23891, 23892, 23893, 23894, 23895, 23897, 23898, 23900, 23902, 23903, 23904, 23905, 23906, 23907, 23908, 23909, 23910, 23911, 23912, 23914, 23917, 23918, 23920, 23921, 23922, 23923, 23925, 23926, 23927, 23928, 23929, 23930, 23931, 23932, 23933, 23934, 23935, 23936, 23937, 23939, 23940, 23941, 23942, 23943, 23944, 23945, 23946, 23947, 23948, 23949, 23950, 23951, 23952, 23953, 23954, 23955, 23956, 23957, 23958, 23959, 23960, 23962, 23963, 23964, 23966, 23967, 23968, 23969, 23970, 23971, 23972, 23973, 23974, 23975, 23976, 23977, 23978, 23979, 23980, 23981, 23982, 23983, 23984, 23985, 23986, 23987, 23988, 23989, 23990, 23992, 23993, 23994, 23995, 23996, 23997, 23998, 23999, 24e3, 24001, 24002, 24003, 24004, 24006, 24007, 24008, 24009, 24010, 24011, 24012, 24014, 24015, 24016, 24017, 24018, 24019, 24020, 24021, 24022, 24023, 24024, 24025, 24026, 24028, 24031, 24032, 24035, 24036, 24042, 24044, 24045, 24048, 24053, 24054, 24056, 24057, 24058, 24059, 24060, 24063, 24064, 24068, 24071, 24073, 24074, 24075, 24077, 24078, 24082, 24083, 24087, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24104, 24105, 24106, 24107, 24108, 24111, 24112, 24114, 24115, 24116, 24117, 24118, 24121, 24122, 24126, 24127, 24128, 24129, 24131, 24134, 24135, 24136, 24137, 24138, 24139, 24141, 24142, 24143, 24144, 24145, 24146, 24147, 24150, 24151, 24152, 24153, 24154, 24156, 24157, 24159, 24160, 24163, 24164, 24165, 24166, 24167, 24168, 24169, 24170, 24171, 24172, 24173, 24174, 24175, 24176, 24177, 24181, 24183, 24185, 24190, 24193, 24194, 24195, 24197, 24200, 24201, 24204, 24205, 24206, 24210, 24216, 24219, 24221, 24225, 24226, 24227, 24228, 24232, 24233, 24234, 24235, 24236, 24238, 24239, 24240, 24241, 24242, 24244, 24250, 24251, 24252, 24253, 24255, 24256, 24257, 24258, 24259, 24260, 24261, 24262, 24263, 24264, 24267, 24268, 24269, 24270, 24271, 24272, 24276, 24277, 24279, 24280, 24281, 24282, 24284, 24285, 24286, 24287, 24288, 24289, 24290, 24291, 24292, 24293, 24294, 24295, 24297, 24299, 24300, 24301, 24302, 24303, 24304, 24305, 24306, 24307, 24309, 24312, 24313, 24315, 24316, 24317, 24325, 24326, 24327, 24329, 24332, 24333, 24334, 24336, 24338, 24340, 24342, 24345, 24346, 24348, 24349, 24350, 24353, 24354, 24355, 24356, 24360, 24363, 24364, 24366, 24368, 24370, 24371, 24372, 24373, 24374, 24375, 24376, 24379, 24381, 24382, 24383, 24385, 24386, 24387, 24388, 24389, 24390, 24391, 24392, 24393, 24394, 24395, 24396, 24397, 24398, 24399, 24401, 24404, 24409, 24410, 24411, 24412, 24414, 24415, 24416, 24419, 24421, 24423, 24424, 24427, 24430, 24431, 24434, 24436, 24437, 24438, 24440, 24442, 24445, 24446, 24447, 24451, 24454, 24461, 24462, 24463, 24465, 24467, 24468, 24470, 24474, 24475, 24477, 24478, 24479, 24480, 24482, 24483, 24484, 24485, 24486, 24487, 24489, 24491, 24492, 24495, 24496, 24497, 24498, 24499, 24500, 24502, 24504, 24505, 24506, 24507, 24510, 24511, 24512, 24513, 24514, 24519, 24520, 24522, 24523, 24526, 24531, 24532, 24533, 24538, 24539, 24540, 24542, 24543, 24546, 24547, 24549, 24550, 24552, 24553, 24556, 24559, 24560, 24562, 24563, 24564, 24566, 24567, 24569, 24570, 24572, 24583, 24584, 24585, 24587, 24588, 24592, 24593, 24595, 24599, 24600, 24602, 24606, 24607, 24610, 24611, 24612, 24620, 24621, 24622, 24624, 24625, 24626, 24627, 24628, 24630, 24631, 24632, 24633, 24634, 24637, 24638, 24640, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24652, 24654, 24655, 24657, 24659, 24660, 24662, 24663, 24664, 24667, 24668, 24670, 24671, 24672, 24673, 24677, 24678, 24686, 24689, 24690, 24692, 24693, 24695, 24702, 24704, 24705, 24706, 24709, 24710, 24711, 24712, 24714, 24715, 24718, 24719, 24720, 24721, 24723, 24725, 24727, 24728, 24729, 24732, 24734, 24737, 24738, 24740, 24741, 24743, 24745, 24746, 24750, 24752, 24755, 24757, 24758, 24759, 24761, 24762, 24765, 24766, 24767, 24768, 24769, 24770, 24771, 24772, 24775, 24776, 24777, 24780, 24781, 24782, 24783, 24784, 24786, 24787, 24788, 24790, 24791, 24793, 24795, 24798, 24801, 24802, 24803, 24804, 24805, 24810, 24817, 24818, 24821, 24823, 24824, 24827, 24828, 24829, 24830, 24831, 24834, 24835, 24836, 24837, 24839, 24842, 24843, 24844, 24848, 24849, 24850, 24851, 24852, 24854, 24855, 24856, 24857, 24859, 24860, 24861, 24862, 24865, 24866, 24869, 24872, 24873, 24874, 24876, 24877, 24878, 24879, 24880, 24881, 24882, 24883, 24884, 24885, 24886, 24887, 24888, 24889, 24890, 24891, 24892, 24893, 24894, 24896, 24897, 24898, 24899, 24900, 24901, 24902, 24903, 24905, 24907, 24909, 24911, 24912, 24914, 24915, 24916, 24918, 24919, 24920, 24921, 24922, 24923, 24924, 24926, 24927, 24928, 24929, 24931, 24932, 24933, 24934, 24937, 24938, 24939, 24940, 24941, 24942, 24943, 24945, 24946, 24947, 24948, 24950, 24952, 24953, 24954, 24955, 24956, 24957, 24958, 24959, 24960, 24961, 24962, 24963, 24964, 24965, 24966, 24967, 24968, 24969, 24970, 24972, 24973, 24975, 24976, 24977, 24978, 24979, 24981, 24982, 24983, 24984, 24985, 24986, 24987, 24988, 24990, 24991, 24992, 24993, 24994, 24995, 24996, 24997, 24998, 25002, 25003, 25005, 25006, 25007, 25008, 25009, 25010, 25011, 25012, 25013, 25014, 25016, 25017, 25018, 25019, 25020, 25021, 25023, 25024, 25025, 25027, 25028, 25029, 25030, 25031, 25033, 25036, 25037, 25038, 25039, 25040, 25043, 25045, 25046, 25047, 25048, 25049, 25050, 25051, 25052, 25053, 25054, 25055, 25056, 25057, 25058, 25059, 25060, 25061, 25063, 25064, 25065, 25066, 25067, 25068, 25069, 25070, 25071, 25072, 25073, 25074, 25075, 25076, 25078, 25079, 25080, 25081, 25082, 25083, 25084, 25085, 25086, 25088, 25089, 25090, 25091, 25092, 25093, 25095, 25097, 25107, 25108, 25113, 25116, 25117, 25118, 25120, 25123, 25126, 25127, 25128, 25129, 25131, 25133, 25135, 25136, 25137, 25138, 25141, 25142, 25144, 25145, 25146, 25147, 25148, 25154, 25156, 25157, 25158, 25162, 25167, 25168, 25173, 25174, 25175, 25177, 25178, 25180, 25181, 25182, 25183, 25184, 25185, 25186, 25188, 25189, 25192, 25201, 25202, 25204, 25205, 25207, 25208, 25210, 25211, 25213, 25217, 25218, 25219, 25221, 25222, 25223, 25224, 25227, 25228, 25229, 25230, 25231, 25232, 25236, 25241, 25244, 25245, 25246, 25251, 25254, 25255, 25257, 25258, 25261, 25262, 25263, 25264, 25266, 25267, 25268, 25270, 25271, 25272, 25274, 25278, 25280, 25281, 25283, 25291, 25295, 25297, 25301, 25309, 25310, 25312, 25313, 25316, 25322, 25323, 25328, 25330, 25333, 25336, 25337, 25338, 25339, 25344, 25347, 25348, 25349, 25350, 25354, 25355, 25356, 25357, 25359, 25360, 25362, 25363, 25364, 25365, 25367, 25368, 25369, 25372, 25382, 25383, 25385, 25388, 25389, 25390, 25392, 25393, 25395, 25396, 25397, 25398, 25399, 25400, 25403, 25404, 25406, 25407, 25408, 25409, 25412, 25415, 25416, 25418, 25425, 25426, 25427, 25428, 25430, 25431, 25432, 25433, 25434, 25435, 25436, 25437, 25440, 25444, 25445, 25446, 25448, 25450, 25451, 25452, 25455, 25456, 25458, 25459, 25460, 25461, 25464, 25465, 25468, 25469, 25470, 25471, 25473, 25475, 25476, 25477, 25478, 25483, 25485, 25489, 25491, 25492, 25493, 25495, 25497, 25498, 25499, 25500, 25501, 25502, 25503, 25505, 25508, 25510, 25515, 25519, 25521, 25522, 25525, 25526, 25529, 25531, 25533, 25535, 25536, 25537, 25538, 25539, 25541, 25543, 25544, 25546, 25547, 25548, 25553, 25555, 25556, 25557, 25559, 25560, 25561, 25562, 25563, 25564, 25565, 25567, 25570, 25572, 25573, 25574, 25575, 25576, 25579, 25580, 25582, 25583, 25584, 25585, 25587, 25589, 25591, 25593, 25594, 25595, 25596, 25598, 25603, 25604, 25606, 25607, 25608, 25609, 25610, 25613, 25614, 25617, 25618, 25621, 25622, 25623, 25624, 25625, 25626, 25629, 25631, 25634, 25635, 25636, 25637, 25639, 25640, 25641, 25643, 25646, 25647, 25648, 25649, 25650, 25651, 25653, 25654, 25655, 25656, 25657, 25659, 25660, 25662, 25664, 25666, 25667, 25673, 25675, 25676, 25677, 25678, 25679, 25680, 25681, 25683, 25685, 25686, 25687, 25689, 25690, 25691, 25692, 25693, 25695, 25696, 25697, 25698, 25699, 25700, 25701, 25702, 25704, 25706, 25707, 25708, 25710, 25711, 25712, 25713, 25714, 25715, 25716, 25717, 25718, 25719, 25723, 25724, 25725, 25726, 25727, 25728, 25729, 25731, 25734, 25736, 25737, 25738, 25739, 25740, 25741, 25742, 25743, 25744, 25747, 25748, 25751, 25752, 25754, 25755, 25756, 25757, 25759, 25760, 25761, 25762, 25763, 25765, 25766, 25767, 25768, 25770, 25771, 25775, 25777, 25778, 25779, 25780, 25782, 25785, 25787, 25789, 25790, 25791, 25793, 25795, 25796, 25798, 25799, 25800, 25801, 25802, 25803, 25804, 25807, 25809, 25811, 25812, 25813, 25814, 25817, 25818, 25819, 25820, 25821, 25823, 25824, 25825, 25827, 25829, 25831, 25832, 25833, 25834, 25835, 25836, 25837, 25838, 25839, 25840, 25841, 25842, 25843, 25844, 25845, 25846, 25847, 25848, 25849, 25850, 25851, 25852, 25853, 25854, 25855, 25857, 25858, 25859, 25860, 25861, 25862, 25863, 25864, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25875, 25876, 25877, 25878, 25879, 25881, 25882, 25883, 25884, 25885, 25886, 25887, 25888, 25889, 25890, 25891, 25892, 25894, 25895, 25896, 25897, 25898, 25900, 25901, 25904, 25905, 25906, 25907, 25911, 25914, 25916, 25917, 25920, 25921, 25922, 25923, 25924, 25926, 25927, 25930, 25931, 25933, 25934, 25936, 25938, 25939, 25940, 25943, 25944, 25946, 25948, 25951, 25952, 25953, 25956, 25957, 25959, 25960, 25961, 25962, 25965, 25966, 25967, 25969, 25971, 25973, 25974, 25976, 25977, 25978, 25979, 25980, 25981, 25982, 25983, 25984, 25985, 25986, 25987, 25988, 25989, 25990, 25992, 25993, 25994, 25997, 25998, 25999, 26002, 26004, 26005, 26006, 26008, 26010, 26013, 26014, 26016, 26018, 26019, 26022, 26024, 26026, 26028, 26030, 26033, 26034, 26035, 26036, 26037, 26038, 26039, 26040, 26042, 26043, 26046, 26047, 26048, 26050, 26055, 26056, 26057, 26058, 26061, 26064, 26065, 26067, 26068, 26069, 26072, 26073, 26074, 26075, 26076, 26077, 26078, 26079, 26081, 26083, 26084, 26090, 26091, 26098, 26099, 26100, 26101, 26104, 26105, 26107, 26108, 26109, 26110, 26111, 26113, 26116, 26117, 26119, 26120, 26121, 26123, 26125, 26128, 26129, 26130, 26134, 26135, 26136, 26138, 26139, 26140, 26142, 26145, 26146, 26147, 26148, 26150, 26153, 26154, 26155, 26156, 26158, 26160, 26162, 26163, 26167, 26168, 26169, 26170, 26171, 26173, 26175, 26176, 26178, 26180, 26181, 26182, 26183, 26184, 26185, 26186, 26189, 26190, 26192, 26193, 26200, 26201, 26203, 26204, 26205, 26206, 26208, 26210, 26211, 26213, 26215, 26217, 26218, 26219, 26220, 26221, 26225, 26226, 26227, 26229, 26232, 26233, 26235, 26236, 26237, 26239, 26240, 26241, 26243, 26245, 26246, 26248, 26249, 26250, 26251, 26253, 26254, 26255, 26256, 26258, 26259, 26260, 26261, 26264, 26265, 26266, 26267, 26268, 26270, 26271, 26272, 26273, 26274, 26275, 26276, 26277, 26278, 26281, 26282, 26283, 26284, 26285, 26287, 26288, 26289, 26290, 26291, 26293, 26294, 26295, 26296, 26298, 26299, 26300, 26301, 26303, 26304, 26305, 26306, 26307, 26308, 26309, 26310, 26311, 26312, 26313, 26314, 26315, 26316, 26317, 26318, 26319, 26320, 26321, 26322, 26323, 26324, 26325, 26326, 26327, 26328, 26330, 26334, 26335, 26336, 26337, 26338, 26339, 26340, 26341, 26343, 26344, 26346, 26347, 26348, 26349, 26350, 26351, 26353, 26357, 26358, 26360, 26362, 26363, 26365, 26369, 26370, 26371, 26372, 26373, 26374, 26375, 26380, 26382, 26383, 26385, 26386, 26387, 26390, 26392, 26393, 26394, 26396, 26398, 26400, 26401, 26402, 26403, 26404, 26405, 26407, 26409, 26414, 26416, 26418, 26419, 26422, 26423, 26424, 26425, 26427, 26428, 26430, 26431, 26433, 26436, 26437, 26439, 26442, 26443, 26445, 26450, 26452, 26453, 26455, 26456, 26457, 26458, 26459, 26461, 26466, 26467, 26468, 26470, 26471, 26475, 26476, 26478, 26481, 26484, 26486, 26488, 26489, 26490, 26491, 26493, 26496, 26498, 26499, 26501, 26502, 26504, 26506, 26508, 26509, 26510, 26511, 26513, 26514, 26515, 26516, 26518, 26521, 26523, 26527, 26528, 26529, 26532, 26534, 26537, 26540, 26542, 26545, 26546, 26548, 26553, 26554, 26555, 26556, 26557, 26558, 26559, 26560, 26562, 26565, 26566, 26567, 26568, 26569, 26570, 26571, 26572, 26573, 26574, 26581, 26582, 26583, 26587, 26591, 26593, 26595, 26596, 26598, 26599, 26600, 26602, 26603, 26605, 26606, 26610, 26613, 26614, 26615, 26616, 26617, 26618, 26619, 26620, 26622, 26625, 26626, 26627, 26628, 26630, 26637, 26640, 26642, 26644, 26645, 26648, 26649, 26650, 26651, 26652, 26654, 26655, 26656, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26676, 26677, 26678, 26682, 26683, 26687, 26695, 26699, 26701, 26703, 26706, 26710, 26711, 26712, 26713, 26714, 26715, 26716, 26717, 26718, 26719, 26730, 26732, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26741, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26751, 26752, 26754, 26756, 26759, 26760, 26761, 26762, 26763, 26764, 26765, 26766, 26768, 26769, 26770, 26772, 26773, 26774, 26776, 26777, 26778, 26779, 26780, 26781, 26782, 26783, 26784, 26785, 26787, 26788, 26789, 26793, 26794, 26795, 26796, 26798, 26801, 26802, 26804, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26817, 26819, 26820, 26821, 26822, 26823, 26824, 26826, 26828, 26830, 26831, 26832, 26833, 26835, 26836, 26838, 26839, 26841, 26843, 26844, 26845, 26846, 26847, 26849, 26850, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26863, 26866, 26867, 26868, 26870, 26871, 26872, 26875, 26877, 26878, 26879, 26880, 26882, 26883, 26884, 26886, 26887, 26888, 26889, 26890, 26892, 26895, 26897, 26899, 26900, 26901, 26902, 26903, 26904, 26905, 26906, 26907, 26908, 26909, 26910, 26913, 26914, 26915, 26917, 26918, 26919, 26920, 26921, 26922, 26923, 26924, 26926, 26927, 26929, 26930, 26931, 26933, 26934, 26935, 26936, 26938, 26939, 26940, 26942, 26944, 26945, 26947, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26965, 26966, 26968, 26969, 26971, 26972, 26975, 26977, 26978, 26980, 26981, 26983, 26984, 26985, 26986, 26988, 26989, 26991, 26992, 26994, 26995, 26996, 26997, 26998, 27002, 27003, 27005, 27006, 27007, 27009, 27011, 27013, 27018, 27019, 27020, 27022, 27023, 27024, 27025, 27026, 27027, 27030, 27031, 27033, 27034, 27037, 27038, 27039, 27040, 27041, 27042, 27043, 27044, 27045, 27046, 27049, 27050, 27052, 27054, 27055, 27056, 27058, 27059, 27061, 27062, 27064, 27065, 27066, 27068, 27069, 27070, 27071, 27072, 27074, 27075, 27076, 27077, 27078, 27079, 27080, 27081, 27083, 27085, 27087, 27089, 27090, 27091, 27093, 27094, 27095, 27096, 27097, 27098, 27100, 27101, 27102, 27105, 27106, 27107, 27108, 27109, 27110, 27111, 27112, 27113, 27114, 27115, 27116, 27118, 27119, 27120, 27121, 27123, 27124, 27125, 27126, 27127, 27128, 27129, 27130, 27131, 27132, 27134, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27147, 27148, 27149, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27161, 27162, 27163, 27164, 27165, 27166, 27168, 27170, 27171, 27172, 27173, 27174, 27175, 27177, 27179, 27180, 27181, 27182, 27184, 27186, 27187, 27188, 27190, 27191, 27192, 27193, 27194, 27195, 27196, 27199, 27200, 27201, 27202, 27203, 27205, 27206, 27208, 27209, 27210, 27211, 27212, 27213, 27214, 27215, 27217, 27218, 27219, 27220, 27221, 27222, 27223, 27226, 27228, 27229, 27230, 27231, 27232, 27234, 27235, 27236, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27250, 27251, 27252, 27253, 27254, 27255, 27256, 27258, 27259, 27261, 27262, 27263, 27265, 27266, 27267, 27269, 27270, 27271, 27272, 27273, 27274, 27275, 27276, 27277, 27279, 27282, 27283, 27284, 27285, 27286, 27288, 27289, 27290, 27291, 27292, 27293, 27294, 27295, 27297, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27306, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 27316, 27317, 27318, 27319, 27320, 27321, 27322, 27323, 27324, 27325, 27326, 27327, 27328, 27329, 27330, 27331, 27332, 27333, 27334, 27335, 27336, 27337, 27338, 27339, 27340, 27341, 27342, 27343, 27344, 27345, 27346, 27347, 27348, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27364, 27365, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27375, 27376, 27377, 27378, 27379, 27380, 27381, 27382, 27383, 27384, 27385, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27393, 27394, 27395, 27396, 27397, 27398, 27399, 27400, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27415, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27429, 27430, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27443, 27444, 27445, 27446, 27448, 27451, 27452, 27453, 27455, 27456, 27457, 27458, 27460, 27461, 27464, 27466, 27467, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27478, 27479, 27480, 27482, 27483, 27484, 27485, 27486, 27487, 27488, 27489, 27496, 27497, 27499, 27500, 27501, 27502, 27503, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27512, 27514, 27517, 27518, 27519, 27520, 27525, 27528, 27532, 27534, 27535, 27536, 27537, 27540, 27541, 27543, 27544, 27545, 27548, 27549, 27550, 27551, 27552, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27574, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27584, 27587, 27588, 27590, 27591, 27592, 27593, 27594, 27596, 27598, 27600, 27601, 27608, 27610, 27612, 27613, 27614, 27615, 27616, 27618, 27619, 27620, 27621, 27622, 27623, 27624, 27625, 27628, 27629, 27630, 27632, 27633, 27634, 27636, 27638, 27639, 27640, 27642, 27643, 27644, 27646, 27647, 27648, 27649, 27650, 27651, 27652, 27656, 27657, 27658, 27659, 27660, 27662, 27666, 27671, 27676, 27677, 27678, 27680, 27683, 27685, 27691, 27692, 27693, 27697, 27699, 27702, 27703, 27705, 27706, 27707, 27708, 27710, 27711, 27715, 27716, 27717, 27720, 27723, 27724, 27725, 27726, 27727, 27729, 27730, 27731, 27734, 27736, 27737, 27738, 27746, 27747, 27749, 27750, 27751, 27755, 27756, 27757, 27758, 27759, 27761, 27763, 27765, 27767, 27768, 27770, 27771, 27772, 27775, 27776, 27780, 27783, 27786, 27787, 27789, 27790, 27793, 27794, 27797, 27798, 27799, 27800, 27802, 27804, 27805, 27806, 27808, 27810, 27816, 27820, 27823, 27824, 27828, 27829, 27830, 27831, 27834, 27840, 27841, 27842, 27843, 27846, 27847, 27848, 27851, 27853, 27854, 27855, 27857, 27858, 27864, 27865, 27866, 27868, 27869, 27871, 27876, 27878, 27879, 27881, 27884, 27885, 27890, 27892, 27897, 27903, 27904, 27906, 27907, 27909, 27910, 27912, 27913, 27914, 27917, 27919, 27920, 27921, 27923, 27924, 27925, 27926, 27928, 27932, 27933, 27935, 27936, 27937, 27938, 27939, 27940, 27942, 27944, 27945, 27948, 27949, 27951, 27952, 27956, 27958, 27959, 27960, 27962, 27967, 27968, 27970, 27972, 27977, 27980, 27984, 27989, 27990, 27991, 27992, 27995, 27997, 27999, 28001, 28002, 28004, 28005, 28007, 28008, 28011, 28012, 28013, 28016, 28017, 28018, 28019, 28021, 28022, 28025, 28026, 28027, 28029, 28030, 28031, 28032, 28033, 28035, 28036, 28038, 28039, 28042, 28043, 28045, 28047, 28048, 28050, 28054, 28055, 28056, 28057, 28058, 28060, 28066, 28069, 28076, 28077, 28080, 28081, 28083, 28084, 28086, 28087, 28089, 28090, 28091, 28092, 28093, 28094, 28097, 28098, 28099, 28104, 28105, 28106, 28109, 28110, 28111, 28112, 28114, 28115, 28116, 28117, 28119, 28122, 28123, 28124, 28127, 28130, 28131, 28133, 28135, 28136, 28137, 28138, 28141, 28143, 28144, 28146, 28148, 28149, 28150, 28152, 28154, 28157, 28158, 28159, 28160, 28161, 28162, 28163, 28164, 28166, 28167, 28168, 28169, 28171, 28175, 28178, 28179, 28181, 28184, 28185, 28187, 28188, 28190, 28191, 28194, 28198, 28199, 28200, 28202, 28204, 28206, 28208, 28209, 28211, 28213, 28214, 28215, 28217, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28239, 28240, 28241, 28242, 28245, 28247, 28249, 28250, 28252, 28253, 28254, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28268, 28269, 28271, 28272, 28273, 28274, 28275, 28276, 28277, 28278, 28279, 28280, 28281, 28282, 28283, 28284, 28285, 28288, 28289, 28290, 28292, 28295, 28296, 28298, 28299, 28300, 28301, 28302, 28305, 28306, 28307, 28308, 28309, 28310, 28311, 28313, 28314, 28315, 28317, 28318, 28320, 28321, 28323, 28324, 28326, 28328, 28329, 28331, 28332, 28333, 28334, 28336, 28339, 28341, 28344, 28345, 28348, 28350, 28351, 28352, 28355, 28356, 28357, 28358, 28360, 28361, 28362, 28364, 28365, 28366, 28368, 28370, 28374, 28376, 28377, 28379, 28380, 28381, 28387, 28391, 28394, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28405, 28406, 28407, 28408, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28419, 28420, 28421, 28423, 28424, 28426, 28427, 28428, 28429, 28430, 28432, 28433, 28434, 28438, 28439, 28440, 28441, 28442, 28443, 28444, 28445, 28446, 28447, 28449, 28450, 28451, 28453, 28454, 28455, 28456, 28460, 28462, 28464, 28466, 28468, 28469, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28479, 28480, 28481, 28482, 28483, 28484, 28485, 28488, 28489, 28490, 28492, 28494, 28495, 28496, 28497, 28498, 28499, 28500, 28501, 28502, 28503, 28505, 28506, 28507, 28509, 28511, 28512, 28513, 28515, 28516, 28517, 28519, 28520, 28521, 28522, 28523, 28524, 28527, 28528, 28529, 28531, 28533, 28534, 28535, 28537, 28539, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28549, 28550, 28551, 28554, 28555, 28559, 28560, 28561, 28562, 28563, 28564, 28565, 28566, 28567, 28568, 28569, 28570, 28571, 28573, 28574, 28575, 28576, 28578, 28579, 28580, 28581, 28582, 28584, 28585, 28586, 28587, 28588, 28589, 28590, 28591, 28592, 28593, 28594, 28596, 28597, 28599, 28600, 28602, 28603, 28604, 28605, 28606, 28607, 28609, 28611, 28612, 28613, 28614, 28615, 28616, 28618, 28619, 28620, 28621, 28622, 28623, 28624, 28627, 28628, 28629, 28630, 28631, 28632, 28633, 28634, 28635, 28636, 28637, 28639, 28642, 28643, 28644, 28645, 28646, 28647, 28648, 28649, 28650, 28651, 28652, 28653, 28656, 28657, 28658, 28659, 28660, 28661, 28662, 28663, 28664, 28665, 28666, 28667, 28668, 28669, 28670, 28671, 28672, 28673, 28674, 28675, 28676, 28677, 28678, 28679, 28680, 28681, 28682, 28683, 28684, 28685, 28686, 28687, 28688, 28690, 28691, 28692, 28693, 28694, 28695, 28696, 28697, 28700, 28701, 28702, 28703, 28704, 28705, 28706, 28708, 28709, 28710, 28711, 28712, 28713, 28714, 28715, 28716, 28717, 28718, 28719, 28720, 28721, 28722, 28723, 28724, 28726, 28727, 28728, 28730, 28731, 28732, 28733, 28734, 28735, 28736, 28737, 28738, 28739, 28740, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28749, 28750, 28752, 28753, 28754, 28755, 28756, 28757, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28767, 28768, 28769, 28770, 28771, 28772, 28773, 28774, 28775, 28776, 28777, 28778, 28782, 28785, 28786, 28787, 28788, 28791, 28793, 28794, 28795, 28797, 28801, 28802, 28803, 28804, 28806, 28807, 28808, 28811, 28812, 28813, 28815, 28816, 28817, 28819, 28823, 28824, 28826, 28827, 28830, 28831, 28832, 28833, 28834, 28835, 28836, 28837, 28838, 28839, 28840, 28841, 28842, 28848, 28850, 28852, 28853, 28854, 28858, 28862, 28863, 28868, 28869, 28870, 28871, 28873, 28875, 28876, 28877, 28878, 28879, 28880, 28881, 28882, 28883, 28884, 28885, 28886, 28887, 28890, 28892, 28893, 28894, 28896, 28897, 28898, 28899, 28901, 28906, 28910, 28912, 28913, 28914, 28915, 28916, 28917, 28918, 28920, 28922, 28923, 28924, 28926, 28927, 28928, 28929, 28930, 28931, 28932, 28933, 28934, 28935, 28936, 28939, 28940, 28941, 28942, 28943, 28945, 28946, 28948, 28951, 28955, 28956, 28957, 28958, 28959, 28960, 28961, 28962, 28963, 28964, 28965, 28967, 28968, 28969, 28970, 28971, 28972, 28973, 28974, 28978, 28979, 28980, 28981, 28983, 28984, 28985, 28986, 28987, 28988, 28989, 28990, 28991, 28992, 28993, 28994, 28995, 28996, 28998, 28999, 29e3, 29001, 29003, 29005, 29007, 29008, 29009, 29010, 29011, 29012, 29013, 29014, 29015, 29016, 29017, 29018, 29019, 29021, 29023, 29024, 29025, 29026, 29027, 29029, 29033, 29034, 29035, 29036, 29037, 29039, 29040, 29041, 29044, 29045, 29046, 29047, 29049, 29051, 29052, 29054, 29055, 29056, 29057, 29058, 29059, 29061, 29062, 29063, 29064, 29065, 29067, 29068, 29069, 29070, 29072, 29073, 29074, 29075, 29077, 29078, 29079, 29082, 29083, 29084, 29085, 29086, 29089, 29090, 29091, 29092, 29093, 29094, 29095, 29097, 29098, 29099, 29101, 29102, 29103, 29104, 29105, 29106, 29108, 29110, 29111, 29112, 29114, 29115, 29116, 29117, 29118, 29119, 29120, 29121, 29122, 29124, 29125, 29126, 29127, 29128, 29129, 29130, 29131, 29132, 29133, 29135, 29136, 29137, 29138, 29139, 29142, 29143, 29144, 29145, 29146, 29147, 29148, 29149, 29150, 29151, 29153, 29154, 29155, 29156, 29158, 29160, 29161, 29162, 29163, 29164, 29165, 29167, 29168, 29169, 29170, 29171, 29172, 29173, 29174, 29175, 29176, 29178, 29179, 29180, 29181, 29182, 29183, 29184, 29185, 29186, 29187, 29188, 29189, 29191, 29192, 29193, 29194, 29195, 29196, 29197, 29198, 29199, 29200, 29201, 29202, 29203, 29204, 29205, 29206, 29207, 29208, 29209, 29210, 29211, 29212, 29214, 29215, 29216, 29217, 29218, 29219, 29220, 29221, 29222, 29223, 29225, 29227, 29229, 29230, 29231, 29234, 29235, 29236, 29242, 29244, 29246, 29248, 29249, 29250, 29251, 29252, 29253, 29254, 29257, 29258, 29259, 29262, 29263, 29264, 29265, 29267, 29268, 29269, 29271, 29272, 29274, 29276, 29278, 29280, 29283, 29284, 29285, 29288, 29290, 29291, 29292, 29293, 29296, 29297, 29299, 29300, 29302, 29303, 29304, 29307, 29308, 29309, 29314, 29315, 29317, 29318, 29319, 29320, 29321, 29324, 29326, 29328, 29329, 29331, 29332, 29333, 29334, 29335, 29336, 29337, 29338, 29339, 29340, 29341, 29342, 29344, 29345, 29346, 29347, 29348, 29349, 29350, 29351, 29352, 29353, 29354, 29355, 29358, 29361, 29362, 29363, 29365, 29370, 29371, 29372, 29373, 29374, 29375, 29376, 29381, 29382, 29383, 29385, 29386, 29387, 29388, 29391, 29393, 29395, 29396, 29397, 29398, 29400, 29402, 29403, 58566, 58567, 58568, 58569, 58570, 58571, 58572, 58573, 58574, 58575, 58576, 58577, 58578, 58579, 58580, 58581, 58582, 58583, 58584, 58585, 58586, 58587, 58588, 58589, 58590, 58591, 58592, 58593, 58594, 58595, 58596, 58597, 58598, 58599, 58600, 58601, 58602, 58603, 58604, 58605, 58606, 58607, 58608, 58609, 58610, 58611, 58612, 58613, 58614, 58615, 58616, 58617, 58618, 58619, 58620, 58621, 58622, 58623, 58624, 58625, 58626, 58627, 58628, 58629, 58630, 58631, 58632, 58633, 58634, 58635, 58636, 58637, 58638, 58639, 58640, 58641, 58642, 58643, 58644, 58645, 58646, 58647, 58648, 58649, 58650, 58651, 58652, 58653, 58654, 58655, 58656, 58657, 58658, 58659, 58660, 58661, 12288, 12289, 12290, 183, 713, 711, 168, 12291, 12293, 8212, 65374, 8214, 8230, 8216, 8217, 8220, 8221, 12308, 12309, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12310, 12311, 12304, 12305, 177, 215, 247, 8758, 8743, 8744, 8721, 8719, 8746, 8745, 8712, 8759, 8730, 8869, 8741, 8736, 8978, 8857, 8747, 8750, 8801, 8780, 8776, 8765, 8733, 8800, 8814, 8815, 8804, 8805, 8734, 8757, 8756, 9794, 9792, 176, 8242, 8243, 8451, 65284, 164, 65504, 65505, 8240, 167, 8470, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 8251, 8594, 8592, 8593, 8595, 12307, 58662, 58663, 58664, 58665, 58666, 58667, 58668, 58669, 58670, 58671, 58672, 58673, 58674, 58675, 58676, 58677, 58678, 58679, 58680, 58681, 58682, 58683, 58684, 58685, 58686, 58687, 58688, 58689, 58690, 58691, 58692, 58693, 58694, 58695, 58696, 58697, 58698, 58699, 58700, 58701, 58702, 58703, 58704, 58705, 58706, 58707, 58708, 58709, 58710, 58711, 58712, 58713, 58714, 58715, 58716, 58717, 58718, 58719, 58720, 58721, 58722, 58723, 58724, 58725, 58726, 58727, 58728, 58729, 58730, 58731, 58732, 58733, 58734, 58735, 58736, 58737, 58738, 58739, 58740, 58741, 58742, 58743, 58744, 58745, 58746, 58747, 58748, 58749, 58750, 58751, 58752, 58753, 58754, 58755, 58756, 58757, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 59238, 59239, 59240, 59241, 59242, 59243, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 8364, 59245, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12840, 12841, 59246, 59247, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 59248, 59249, 58758, 58759, 58760, 58761, 58762, 58763, 58764, 58765, 58766, 58767, 58768, 58769, 58770, 58771, 58772, 58773, 58774, 58775, 58776, 58777, 58778, 58779, 58780, 58781, 58782, 58783, 58784, 58785, 58786, 58787, 58788, 58789, 58790, 58791, 58792, 58793, 58794, 58795, 58796, 58797, 58798, 58799, 58800, 58801, 58802, 58803, 58804, 58805, 58806, 58807, 58808, 58809, 58810, 58811, 58812, 58813, 58814, 58815, 58816, 58817, 58818, 58819, 58820, 58821, 58822, 58823, 58824, 58825, 58826, 58827, 58828, 58829, 58830, 58831, 58832, 58833, 58834, 58835, 58836, 58837, 58838, 58839, 58840, 58841, 58842, 58843, 58844, 58845, 58846, 58847, 58848, 58849, 58850, 58851, 58852, 12288, 65281, 65282, 65283, 65509, 65285, 65286, 65287, 65288, 65289, 65290, 65291, 65292, 65293, 65294, 65295, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65306, 65307, 65308, 65309, 65310, 65311, 65312, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65339, 65340, 65341, 65342, 65343, 65344, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 65371, 65372, 65373, 65507, 58854, 58855, 58856, 58857, 58858, 58859, 58860, 58861, 58862, 58863, 58864, 58865, 58866, 58867, 58868, 58869, 58870, 58871, 58872, 58873, 58874, 58875, 58876, 58877, 58878, 58879, 58880, 58881, 58882, 58883, 58884, 58885, 58886, 58887, 58888, 58889, 58890, 58891, 58892, 58893, 58894, 58895, 58896, 58897, 58898, 58899, 58900, 58901, 58902, 58903, 58904, 58905, 58906, 58907, 58908, 58909, 58910, 58911, 58912, 58913, 58914, 58915, 58916, 58917, 58918, 58919, 58920, 58921, 58922, 58923, 58924, 58925, 58926, 58927, 58928, 58929, 58930, 58931, 58932, 58933, 58934, 58935, 58936, 58937, 58938, 58939, 58940, 58941, 58942, 58943, 58944, 58945, 58946, 58947, 58948, 58949, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 59250, 59251, 59252, 59253, 59254, 59255, 59256, 59257, 59258, 59259, 59260, 58950, 58951, 58952, 58953, 58954, 58955, 58956, 58957, 58958, 58959, 58960, 58961, 58962, 58963, 58964, 58965, 58966, 58967, 58968, 58969, 58970, 58971, 58972, 58973, 58974, 58975, 58976, 58977, 58978, 58979, 58980, 58981, 58982, 58983, 58984, 58985, 58986, 58987, 58988, 58989, 58990, 58991, 58992, 58993, 58994, 58995, 58996, 58997, 58998, 58999, 59e3, 59001, 59002, 59003, 59004, 59005, 59006, 59007, 59008, 59009, 59010, 59011, 59012, 59013, 59014, 59015, 59016, 59017, 59018, 59019, 59020, 59021, 59022, 59023, 59024, 59025, 59026, 59027, 59028, 59029, 59030, 59031, 59032, 59033, 59034, 59035, 59036, 59037, 59038, 59039, 59040, 59041, 59042, 59043, 59044, 59045, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 59261, 59262, 59263, 59264, 59265, 59266, 59267, 59268, 59046, 59047, 59048, 59049, 59050, 59051, 59052, 59053, 59054, 59055, 59056, 59057, 59058, 59059, 59060, 59061, 59062, 59063, 59064, 59065, 59066, 59067, 59068, 59069, 59070, 59071, 59072, 59073, 59074, 59075, 59076, 59077, 59078, 59079, 59080, 59081, 59082, 59083, 59084, 59085, 59086, 59087, 59088, 59089, 59090, 59091, 59092, 59093, 59094, 59095, 59096, 59097, 59098, 59099, 59100, 59101, 59102, 59103, 59104, 59105, 59106, 59107, 59108, 59109, 59110, 59111, 59112, 59113, 59114, 59115, 59116, 59117, 59118, 59119, 59120, 59121, 59122, 59123, 59124, 59125, 59126, 59127, 59128, 59129, 59130, 59131, 59132, 59133, 59134, 59135, 59136, 59137, 59138, 59139, 59140, 59141, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 59269, 59270, 59271, 59272, 59273, 59274, 59275, 59276, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, 59277, 59278, 59279, 59280, 59281, 59282, 59283, 65077, 65078, 65081, 65082, 65087, 65088, 65085, 65086, 65089, 65090, 65091, 65092, 59284, 59285, 65083, 65084, 65079, 65080, 65073, 59286, 65075, 65076, 59287, 59288, 59289, 59290, 59291, 59292, 59293, 59294, 59295, 59142, 59143, 59144, 59145, 59146, 59147, 59148, 59149, 59150, 59151, 59152, 59153, 59154, 59155, 59156, 59157, 59158, 59159, 59160, 59161, 59162, 59163, 59164, 59165, 59166, 59167, 59168, 59169, 59170, 59171, 59172, 59173, 59174, 59175, 59176, 59177, 59178, 59179, 59180, 59181, 59182, 59183, 59184, 59185, 59186, 59187, 59188, 59189, 59190, 59191, 59192, 59193, 59194, 59195, 59196, 59197, 59198, 59199, 59200, 59201, 59202, 59203, 59204, 59205, 59206, 59207, 59208, 59209, 59210, 59211, 59212, 59213, 59214, 59215, 59216, 59217, 59218, 59219, 59220, 59221, 59222, 59223, 59224, 59225, 59226, 59227, 59228, 59229, 59230, 59231, 59232, 59233, 59234, 59235, 59236, 59237, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 59296, 59297, 59298, 59299, 59300, 59301, 59302, 59303, 59304, 59305, 59306, 59307, 59308, 59309, 59310, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 59311, 59312, 59313, 59314, 59315, 59316, 59317, 59318, 59319, 59320, 59321, 59322, 59323, 714, 715, 729, 8211, 8213, 8229, 8245, 8453, 8457, 8598, 8599, 8600, 8601, 8725, 8735, 8739, 8786, 8806, 8807, 8895, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9585, 9586, 9587, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9609, 9610, 9611, 9612, 9613, 9614, 9615, 9619, 9620, 9621, 9660, 9661, 9698, 9699, 9700, 9701, 9737, 8853, 12306, 12317, 12318, 59324, 59325, 59326, 59327, 59328, 59329, 59330, 59331, 59332, 59333, 59334, 257, 225, 462, 224, 275, 233, 283, 232, 299, 237, 464, 236, 333, 243, 466, 242, 363, 250, 468, 249, 470, 472, 474, 476, 252, 234, 593, 7743, 324, 328, 505, 609, 59337, 59338, 59339, 59340, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 59341, 59342, 59343, 59344, 59345, 59346, 59347, 59348, 59349, 59350, 59351, 59352, 59353, 59354, 59355, 59356, 59357, 59358, 59359, 59360, 59361, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12963, 13198, 13199, 13212, 13213, 13214, 13217, 13252, 13262, 13265, 13266, 13269, 65072, 65506, 65508, 59362, 8481, 12849, 59363, 8208, 59364, 59365, 59366, 12540, 12443, 12444, 12541, 12542, 12294, 12445, 12446, 65097, 65098, 65099, 65100, 65101, 65102, 65103, 65104, 65105, 65106, 65108, 65109, 65110, 65111, 65113, 65114, 65115, 65116, 65117, 65118, 65119, 65120, 65121, 65122, 65123, 65124, 65125, 65126, 65128, 65129, 65130, 65131, 12350, 12272, 12273, 12274, 12275, 12276, 12277, 12278, 12279, 12280, 12281, 12282, 12283, 12295, 59380, 59381, 59382, 59383, 59384, 59385, 59386, 59387, 59388, 59389, 59390, 59391, 59392, 9472, 9473, 9474, 9475, 9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 59393, 59394, 59395, 59396, 59397, 59398, 59399, 59400, 59401, 59402, 59403, 59404, 59405, 59406, 59407, 29404, 29405, 29407, 29410, 29411, 29412, 29413, 29414, 29415, 29418, 29419, 29429, 29430, 29433, 29437, 29438, 29439, 29440, 29442, 29444, 29445, 29446, 29447, 29448, 29449, 29451, 29452, 29453, 29455, 29456, 29457, 29458, 29460, 29464, 29465, 29466, 29471, 29472, 29475, 29476, 29478, 29479, 29480, 29485, 29487, 29488, 29490, 29491, 29493, 29494, 29498, 29499, 29500, 29501, 29504, 29505, 29506, 29507, 29508, 29509, 29510, 29511, 29512, 29513, 29514, 29515, 29516, 29518, 29519, 29521, 29523, 29524, 29525, 29526, 29528, 29529, 29530, 29531, 29532, 29533, 29534, 29535, 29537, 29538, 29539, 29540, 29541, 29542, 29543, 29544, 29545, 29546, 29547, 29550, 29552, 29553, 57344, 57345, 57346, 57347, 57348, 57349, 57350, 57351, 57352, 57353, 57354, 57355, 57356, 57357, 57358, 57359, 57360, 57361, 57362, 57363, 57364, 57365, 57366, 57367, 57368, 57369, 57370, 57371, 57372, 57373, 57374, 57375, 57376, 57377, 57378, 57379, 57380, 57381, 57382, 57383, 57384, 57385, 57386, 57387, 57388, 57389, 57390, 57391, 57392, 57393, 57394, 57395, 57396, 57397, 57398, 57399, 57400, 57401, 57402, 57403, 57404, 57405, 57406, 57407, 57408, 57409, 57410, 57411, 57412, 57413, 57414, 57415, 57416, 57417, 57418, 57419, 57420, 57421, 57422, 57423, 57424, 57425, 57426, 57427, 57428, 57429, 57430, 57431, 57432, 57433, 57434, 57435, 57436, 57437, 29554, 29555, 29556, 29557, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29567, 29568, 29569, 29570, 29571, 29573, 29574, 29576, 29578, 29580, 29581, 29583, 29584, 29586, 29587, 29588, 29589, 29591, 29592, 29593, 29594, 29596, 29597, 29598, 29600, 29601, 29603, 29604, 29605, 29606, 29607, 29608, 29610, 29612, 29613, 29617, 29620, 29621, 29622, 29624, 29625, 29628, 29629, 29630, 29631, 29633, 29635, 29636, 29637, 29638, 29639, 29643, 29644, 29646, 29650, 29651, 29652, 29653, 29654, 29655, 29656, 29658, 29659, 29660, 29661, 29663, 29665, 29666, 29667, 29668, 29670, 29672, 29674, 29675, 29676, 29678, 29679, 29680, 29681, 29683, 29684, 29685, 29686, 29687, 57438, 57439, 57440, 57441, 57442, 57443, 57444, 57445, 57446, 57447, 57448, 57449, 57450, 57451, 57452, 57453, 57454, 57455, 57456, 57457, 57458, 57459, 57460, 57461, 57462, 57463, 57464, 57465, 57466, 57467, 57468, 57469, 57470, 57471, 57472, 57473, 57474, 57475, 57476, 57477, 57478, 57479, 57480, 57481, 57482, 57483, 57484, 57485, 57486, 57487, 57488, 57489, 57490, 57491, 57492, 57493, 57494, 57495, 57496, 57497, 57498, 57499, 57500, 57501, 57502, 57503, 57504, 57505, 57506, 57507, 57508, 57509, 57510, 57511, 57512, 57513, 57514, 57515, 57516, 57517, 57518, 57519, 57520, 57521, 57522, 57523, 57524, 57525, 57526, 57527, 57528, 57529, 57530, 57531, 29688, 29689, 29690, 29691, 29692, 29693, 29694, 29695, 29696, 29697, 29698, 29700, 29703, 29704, 29707, 29708, 29709, 29710, 29713, 29714, 29715, 29716, 29717, 29718, 29719, 29720, 29721, 29724, 29725, 29726, 29727, 29728, 29729, 29731, 29732, 29735, 29737, 29739, 29741, 29743, 29745, 29746, 29751, 29752, 29753, 29754, 29755, 29757, 29758, 29759, 29760, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 29776, 29777, 29778, 29779, 29780, 29782, 29784, 29789, 29792, 29793, 29794, 29795, 29796, 29797, 29798, 29799, 29800, 29801, 29802, 29803, 29804, 29806, 29807, 29809, 29810, 29811, 29812, 29813, 29816, 29817, 29818, 57532, 57533, 57534, 57535, 57536, 57537, 57538, 57539, 57540, 57541, 57542, 57543, 57544, 57545, 57546, 57547, 57548, 57549, 57550, 57551, 57552, 57553, 57554, 57555, 57556, 57557, 57558, 57559, 57560, 57561, 57562, 57563, 57564, 57565, 57566, 57567, 57568, 57569, 57570, 57571, 57572, 57573, 57574, 57575, 57576, 57577, 57578, 57579, 57580, 57581, 57582, 57583, 57584, 57585, 57586, 57587, 57588, 57589, 57590, 57591, 57592, 57593, 57594, 57595, 57596, 57597, 57598, 57599, 57600, 57601, 57602, 57603, 57604, 57605, 57606, 57607, 57608, 57609, 57610, 57611, 57612, 57613, 57614, 57615, 57616, 57617, 57618, 57619, 57620, 57621, 57622, 57623, 57624, 57625, 29819, 29820, 29821, 29823, 29826, 29828, 29829, 29830, 29832, 29833, 29834, 29836, 29837, 29839, 29841, 29842, 29843, 29844, 29845, 29846, 29847, 29848, 29849, 29850, 29851, 29853, 29855, 29856, 29857, 29858, 29859, 29860, 29861, 29862, 29866, 29867, 29868, 29869, 29870, 29871, 29872, 29873, 29874, 29875, 29876, 29877, 29878, 29879, 29880, 29881, 29883, 29884, 29885, 29886, 29887, 29888, 29889, 29890, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 29905, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29917, 29919, 29921, 29925, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29936, 29937, 29938, 57626, 57627, 57628, 57629, 57630, 57631, 57632, 57633, 57634, 57635, 57636, 57637, 57638, 57639, 57640, 57641, 57642, 57643, 57644, 57645, 57646, 57647, 57648, 57649, 57650, 57651, 57652, 57653, 57654, 57655, 57656, 57657, 57658, 57659, 57660, 57661, 57662, 57663, 57664, 57665, 57666, 57667, 57668, 57669, 57670, 57671, 57672, 57673, 57674, 57675, 57676, 57677, 57678, 57679, 57680, 57681, 57682, 57683, 57684, 57685, 57686, 57687, 57688, 57689, 57690, 57691, 57692, 57693, 57694, 57695, 57696, 57697, 57698, 57699, 57700, 57701, 57702, 57703, 57704, 57705, 57706, 57707, 57708, 57709, 57710, 57711, 57712, 57713, 57714, 57715, 57716, 57717, 57718, 57719, 29939, 29941, 29944, 29945, 29946, 29947, 29948, 29949, 29950, 29952, 29953, 29954, 29955, 29957, 29958, 29959, 29960, 29961, 29962, 29963, 29964, 29966, 29968, 29970, 29972, 29973, 29974, 29975, 29979, 29981, 29982, 29984, 29985, 29986, 29987, 29988, 29990, 29991, 29994, 29998, 30004, 30006, 30009, 30012, 30013, 30015, 30017, 30018, 30019, 30020, 30022, 30023, 30025, 30026, 30029, 30032, 30033, 30034, 30035, 30037, 30038, 30039, 30040, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30055, 30056, 30057, 30059, 30060, 30061, 30062, 30063, 30064, 30065, 30067, 30069, 30070, 30071, 30074, 30075, 30076, 30077, 30078, 30080, 30081, 30082, 30084, 30085, 30087, 57720, 57721, 57722, 57723, 57724, 57725, 57726, 57727, 57728, 57729, 57730, 57731, 57732, 57733, 57734, 57735, 57736, 57737, 57738, 57739, 57740, 57741, 57742, 57743, 57744, 57745, 57746, 57747, 57748, 57749, 57750, 57751, 57752, 57753, 57754, 57755, 57756, 57757, 57758, 57759, 57760, 57761, 57762, 57763, 57764, 57765, 57766, 57767, 57768, 57769, 57770, 57771, 57772, 57773, 57774, 57775, 57776, 57777, 57778, 57779, 57780, 57781, 57782, 57783, 57784, 57785, 57786, 57787, 57788, 57789, 57790, 57791, 57792, 57793, 57794, 57795, 57796, 57797, 57798, 57799, 57800, 57801, 57802, 57803, 57804, 57805, 57806, 57807, 57808, 57809, 57810, 57811, 57812, 57813, 30088, 30089, 30090, 30092, 30093, 30094, 30096, 30099, 30101, 30104, 30107, 30108, 30110, 30114, 30118, 30119, 30120, 30121, 30122, 30125, 30134, 30135, 30138, 30139, 30143, 30144, 30145, 30150, 30155, 30156, 30158, 30159, 30160, 30161, 30163, 30167, 30169, 30170, 30172, 30173, 30175, 30176, 30177, 30181, 30185, 30188, 30189, 30190, 30191, 30194, 30195, 30197, 30198, 30199, 30200, 30202, 30203, 30205, 30206, 30210, 30212, 30214, 30215, 30216, 30217, 30219, 30221, 30222, 30223, 30225, 30226, 30227, 30228, 30230, 30234, 30236, 30237, 30238, 30241, 30243, 30247, 30248, 30252, 30254, 30255, 30257, 30258, 30262, 30263, 30265, 30266, 30267, 30269, 30273, 30274, 30276, 57814, 57815, 57816, 57817, 57818, 57819, 57820, 57821, 57822, 57823, 57824, 57825, 57826, 57827, 57828, 57829, 57830, 57831, 57832, 57833, 57834, 57835, 57836, 57837, 57838, 57839, 57840, 57841, 57842, 57843, 57844, 57845, 57846, 57847, 57848, 57849, 57850, 57851, 57852, 57853, 57854, 57855, 57856, 57857, 57858, 57859, 57860, 57861, 57862, 57863, 57864, 57865, 57866, 57867, 57868, 57869, 57870, 57871, 57872, 57873, 57874, 57875, 57876, 57877, 57878, 57879, 57880, 57881, 57882, 57883, 57884, 57885, 57886, 57887, 57888, 57889, 57890, 57891, 57892, 57893, 57894, 57895, 57896, 57897, 57898, 57899, 57900, 57901, 57902, 57903, 57904, 57905, 57906, 57907, 30277, 30278, 30279, 30280, 30281, 30282, 30283, 30286, 30287, 30288, 30289, 30290, 30291, 30293, 30295, 30296, 30297, 30298, 30299, 30301, 30303, 30304, 30305, 30306, 30308, 30309, 30310, 30311, 30312, 30313, 30314, 30316, 30317, 30318, 30320, 30321, 30322, 30323, 30324, 30325, 30326, 30327, 30329, 30330, 30332, 30335, 30336, 30337, 30339, 30341, 30345, 30346, 30348, 30349, 30351, 30352, 30354, 30356, 30357, 30359, 30360, 30362, 30363, 30364, 30365, 30366, 30367, 30368, 30369, 30370, 30371, 30373, 30374, 30375, 30376, 30377, 30378, 30379, 30380, 30381, 30383, 30384, 30387, 30389, 30390, 30391, 30392, 30393, 30394, 30395, 30396, 30397, 30398, 30400, 30401, 30403, 21834, 38463, 22467, 25384, 21710, 21769, 21696, 30353, 30284, 34108, 30702, 33406, 30861, 29233, 38552, 38797, 27688, 23433, 20474, 25353, 26263, 23736, 33018, 26696, 32942, 26114, 30414, 20985, 25942, 29100, 32753, 34948, 20658, 22885, 25034, 28595, 33453, 25420, 25170, 21485, 21543, 31494, 20843, 30116, 24052, 25300, 36299, 38774, 25226, 32793, 22365, 38712, 32610, 29240, 30333, 26575, 30334, 25670, 20336, 36133, 25308, 31255, 26001, 29677, 25644, 25203, 33324, 39041, 26495, 29256, 25198, 25292, 20276, 29923, 21322, 21150, 32458, 37030, 24110, 26758, 27036, 33152, 32465, 26834, 30917, 34444, 38225, 20621, 35876, 33502, 32990, 21253, 35090, 21093, 30404, 30407, 30409, 30411, 30412, 30419, 30421, 30425, 30426, 30428, 30429, 30430, 30432, 30433, 30434, 30435, 30436, 30438, 30439, 30440, 30441, 30442, 30443, 30444, 30445, 30448, 30451, 30453, 30454, 30455, 30458, 30459, 30461, 30463, 30464, 30466, 30467, 30469, 30470, 30474, 30476, 30478, 30479, 30480, 30481, 30482, 30483, 30484, 30485, 30486, 30487, 30488, 30491, 30492, 30493, 30494, 30497, 30499, 30500, 30501, 30503, 30506, 30507, 30508, 30510, 30512, 30513, 30514, 30515, 30516, 30521, 30523, 30525, 30526, 30527, 30530, 30532, 30533, 30534, 30536, 30537, 30538, 30539, 30540, 30541, 30542, 30543, 30546, 30547, 30548, 30549, 30550, 30551, 30552, 30553, 30556, 34180, 38649, 20445, 22561, 39281, 23453, 25265, 25253, 26292, 35961, 40077, 29190, 26479, 30865, 24754, 21329, 21271, 36744, 32972, 36125, 38049, 20493, 29384, 22791, 24811, 28953, 34987, 22868, 33519, 26412, 31528, 23849, 32503, 29997, 27893, 36454, 36856, 36924, 40763, 27604, 37145, 31508, 24444, 30887, 34006, 34109, 27605, 27609, 27606, 24065, 24199, 30201, 38381, 25949, 24330, 24517, 36767, 22721, 33218, 36991, 38491, 38829, 36793, 32534, 36140, 25153, 20415, 21464, 21342, 36776, 36777, 36779, 36941, 26631, 24426, 33176, 34920, 40150, 24971, 21035, 30250, 24428, 25996, 28626, 28392, 23486, 25672, 20853, 20912, 26564, 19993, 31177, 39292, 28851, 30557, 30558, 30559, 30560, 30564, 30567, 30569, 30570, 30573, 30574, 30575, 30576, 30577, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30586, 30587, 30588, 30593, 30594, 30595, 30598, 30599, 30600, 30601, 30602, 30603, 30607, 30608, 30611, 30612, 30613, 30614, 30615, 30616, 30617, 30618, 30619, 30620, 30621, 30622, 30625, 30627, 30628, 30630, 30632, 30635, 30637, 30638, 30639, 30641, 30642, 30644, 30646, 30647, 30648, 30649, 30650, 30652, 30654, 30656, 30657, 30658, 30659, 30660, 30661, 30662, 30663, 30664, 30665, 30666, 30667, 30668, 30670, 30671, 30672, 30673, 30674, 30675, 30676, 30677, 30678, 30680, 30681, 30682, 30685, 30686, 30687, 30688, 30689, 30692, 30149, 24182, 29627, 33760, 25773, 25320, 38069, 27874, 21338, 21187, 25615, 38082, 31636, 20271, 24091, 33334, 33046, 33162, 28196, 27850, 39539, 25429, 21340, 21754, 34917, 22496, 19981, 24067, 27493, 31807, 37096, 24598, 25830, 29468, 35009, 26448, 25165, 36130, 30572, 36393, 37319, 24425, 33756, 34081, 39184, 21442, 34453, 27531, 24813, 24808, 28799, 33485, 33329, 20179, 27815, 34255, 25805, 31961, 27133, 26361, 33609, 21397, 31574, 20391, 20876, 27979, 23618, 36461, 25554, 21449, 33580, 33590, 26597, 30900, 25661, 23519, 23700, 24046, 35815, 25286, 26612, 35962, 25600, 25530, 34633, 39307, 35863, 32544, 38130, 20135, 38416, 39076, 26124, 29462, 30694, 30696, 30698, 30703, 30704, 30705, 30706, 30708, 30709, 30711, 30713, 30714, 30715, 30716, 30723, 30724, 30725, 30726, 30727, 30728, 30730, 30731, 30734, 30735, 30736, 30739, 30741, 30745, 30747, 30750, 30752, 30753, 30754, 30756, 30760, 30762, 30763, 30766, 30767, 30769, 30770, 30771, 30773, 30774, 30781, 30783, 30785, 30786, 30787, 30788, 30790, 30792, 30793, 30794, 30795, 30797, 30799, 30801, 30803, 30804, 30808, 30809, 30810, 30811, 30812, 30814, 30815, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823, 30824, 30825, 30831, 30832, 30833, 30834, 30835, 30836, 30837, 30838, 30840, 30841, 30842, 30843, 30845, 30846, 30847, 30848, 30849, 30850, 30851, 22330, 23581, 24120, 38271, 20607, 32928, 21378, 25950, 30021, 21809, 20513, 36229, 25220, 38046, 26397, 22066, 28526, 24034, 21557, 28818, 36710, 25199, 25764, 25507, 24443, 28552, 37108, 33251, 36784, 23576, 26216, 24561, 27785, 38472, 36225, 34924, 25745, 31216, 22478, 27225, 25104, 21576, 20056, 31243, 24809, 28548, 35802, 25215, 36894, 39563, 31204, 21507, 30196, 25345, 21273, 27744, 36831, 24347, 39536, 32827, 40831, 20360, 23610, 36196, 32709, 26021, 28861, 20805, 20914, 34411, 23815, 23456, 25277, 37228, 30068, 36364, 31264, 24833, 31609, 20167, 32504, 30597, 19985, 33261, 21021, 20986, 27249, 21416, 36487, 38148, 38607, 28353, 38500, 26970, 30852, 30853, 30854, 30856, 30858, 30859, 30863, 30864, 30866, 30868, 30869, 30870, 30873, 30877, 30878, 30880, 30882, 30884, 30886, 30888, 30889, 30890, 30891, 30892, 30893, 30894, 30895, 30901, 30902, 30903, 30904, 30906, 30907, 30908, 30909, 30911, 30912, 30914, 30915, 30916, 30918, 30919, 30920, 30924, 30925, 30926, 30927, 30929, 30930, 30931, 30934, 30935, 30936, 30938, 30939, 30940, 30941, 30942, 30943, 30944, 30945, 30946, 30947, 30948, 30949, 30950, 30951, 30953, 30954, 30955, 30957, 30958, 30959, 30960, 30961, 30963, 30965, 30966, 30968, 30969, 30971, 30972, 30973, 30974, 30975, 30976, 30978, 30979, 30980, 30982, 30983, 30984, 30985, 30986, 30987, 30988, 30784, 20648, 30679, 25616, 35302, 22788, 25571, 24029, 31359, 26941, 20256, 33337, 21912, 20018, 30126, 31383, 24162, 24202, 38383, 21019, 21561, 28810, 25462, 38180, 22402, 26149, 26943, 37255, 21767, 28147, 32431, 34850, 25139, 32496, 30133, 33576, 30913, 38604, 36766, 24904, 29943, 35789, 27492, 21050, 36176, 27425, 32874, 33905, 22257, 21254, 20174, 19995, 20945, 31895, 37259, 31751, 20419, 36479, 31713, 31388, 25703, 23828, 20652, 33030, 30209, 31929, 28140, 32736, 26449, 23384, 23544, 30923, 25774, 25619, 25514, 25387, 38169, 25645, 36798, 31572, 30249, 25171, 22823, 21574, 27513, 20643, 25140, 24102, 27526, 20195, 36151, 34955, 24453, 36910, 30989, 30990, 30991, 30992, 30993, 30994, 30996, 30997, 30998, 30999, 31e3, 31001, 31002, 31003, 31004, 31005, 31007, 31008, 31009, 31010, 31011, 31013, 31014, 31015, 31016, 31017, 31018, 31019, 31020, 31021, 31022, 31023, 31024, 31025, 31026, 31027, 31029, 31030, 31031, 31032, 31033, 31037, 31039, 31042, 31043, 31044, 31045, 31047, 31050, 31051, 31052, 31053, 31054, 31055, 31056, 31057, 31058, 31060, 31061, 31064, 31065, 31073, 31075, 31076, 31078, 31081, 31082, 31083, 31084, 31086, 31088, 31089, 31090, 31091, 31092, 31093, 31094, 31097, 31099, 31100, 31101, 31102, 31103, 31106, 31107, 31110, 31111, 31112, 31113, 31115, 31116, 31117, 31118, 31120, 31121, 31122, 24608, 32829, 25285, 20025, 21333, 37112, 25528, 32966, 26086, 27694, 20294, 24814, 28129, 35806, 24377, 34507, 24403, 25377, 20826, 33633, 26723, 20992, 25443, 36424, 20498, 23707, 31095, 23548, 21040, 31291, 24764, 36947, 30423, 24503, 24471, 30340, 36460, 28783, 30331, 31561, 30634, 20979, 37011, 22564, 20302, 28404, 36842, 25932, 31515, 29380, 28068, 32735, 23265, 25269, 24213, 22320, 33922, 31532, 24093, 24351, 36882, 32532, 39072, 25474, 28359, 30872, 28857, 20856, 38747, 22443, 30005, 20291, 30008, 24215, 24806, 22880, 28096, 27583, 30857, 21500, 38613, 20939, 20993, 25481, 21514, 38035, 35843, 36300, 29241, 30879, 34678, 36845, 35853, 21472, 31123, 31124, 31125, 31126, 31127, 31128, 31129, 31131, 31132, 31133, 31134, 31135, 31136, 31137, 31138, 31139, 31140, 31141, 31142, 31144, 31145, 31146, 31147, 31148, 31149, 31150, 31151, 31152, 31153, 31154, 31156, 31157, 31158, 31159, 31160, 31164, 31167, 31170, 31172, 31173, 31175, 31176, 31178, 31180, 31182, 31183, 31184, 31187, 31188, 31190, 31191, 31193, 31194, 31195, 31196, 31197, 31198, 31200, 31201, 31202, 31205, 31208, 31210, 31212, 31214, 31217, 31218, 31219, 31220, 31221, 31222, 31223, 31225, 31226, 31228, 31230, 31231, 31233, 31236, 31237, 31239, 31240, 31241, 31242, 31244, 31247, 31248, 31249, 31250, 31251, 31253, 31254, 31256, 31257, 31259, 31260, 19969, 30447, 21486, 38025, 39030, 40718, 38189, 23450, 35746, 20002, 19996, 20908, 33891, 25026, 21160, 26635, 20375, 24683, 20923, 27934, 20828, 25238, 26007, 38497, 35910, 36887, 30168, 37117, 30563, 27602, 29322, 29420, 35835, 22581, 30585, 36172, 26460, 38208, 32922, 24230, 28193, 22930, 31471, 30701, 38203, 27573, 26029, 32526, 22534, 20817, 38431, 23545, 22697, 21544, 36466, 25958, 39039, 22244, 38045, 30462, 36929, 25479, 21702, 22810, 22842, 22427, 36530, 26421, 36346, 33333, 21057, 24816, 22549, 34558, 23784, 40517, 20420, 39069, 35769, 23077, 24694, 21380, 25212, 36943, 37122, 39295, 24681, 32780, 20799, 32819, 23572, 39285, 27953, 20108, 31261, 31263, 31265, 31266, 31268, 31269, 31270, 31271, 31272, 31273, 31274, 31275, 31276, 31277, 31278, 31279, 31280, 31281, 31282, 31284, 31285, 31286, 31288, 31290, 31294, 31296, 31297, 31298, 31299, 31300, 31301, 31303, 31304, 31305, 31306, 31307, 31308, 31309, 31310, 31311, 31312, 31314, 31315, 31316, 31317, 31318, 31320, 31321, 31322, 31323, 31324, 31325, 31326, 31327, 31328, 31329, 31330, 31331, 31332, 31333, 31334, 31335, 31336, 31337, 31338, 31339, 31340, 31341, 31342, 31343, 31345, 31346, 31347, 31349, 31355, 31356, 31357, 31358, 31362, 31365, 31367, 31369, 31370, 31371, 31372, 31374, 31375, 31376, 31379, 31380, 31385, 31386, 31387, 31390, 31393, 31394, 36144, 21457, 32602, 31567, 20240, 20047, 38400, 27861, 29648, 34281, 24070, 30058, 32763, 27146, 30718, 38034, 32321, 20961, 28902, 21453, 36820, 33539, 36137, 29359, 39277, 27867, 22346, 33459, 26041, 32938, 25151, 38450, 22952, 20223, 35775, 32442, 25918, 33778, 38750, 21857, 39134, 32933, 21290, 35837, 21536, 32954, 24223, 27832, 36153, 33452, 37210, 21545, 27675, 20998, 32439, 22367, 28954, 27774, 31881, 22859, 20221, 24575, 24868, 31914, 20016, 23553, 26539, 34562, 23792, 38155, 39118, 30127, 28925, 36898, 20911, 32541, 35773, 22857, 20964, 20315, 21542, 22827, 25975, 32932, 23413, 25206, 25282, 36752, 24133, 27679, 31526, 20239, 20440, 26381, 31395, 31396, 31399, 31401, 31402, 31403, 31406, 31407, 31408, 31409, 31410, 31412, 31413, 31414, 31415, 31416, 31417, 31418, 31419, 31420, 31421, 31422, 31424, 31425, 31426, 31427, 31428, 31429, 31430, 31431, 31432, 31433, 31434, 31436, 31437, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31447, 31448, 31450, 31451, 31452, 31453, 31457, 31458, 31460, 31463, 31464, 31465, 31466, 31467, 31468, 31470, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31483, 31484, 31486, 31488, 31489, 31490, 31493, 31495, 31497, 31500, 31501, 31502, 31504, 31506, 31507, 31510, 31511, 31512, 31514, 31516, 31517, 31519, 31521, 31522, 31523, 31527, 31529, 31533, 28014, 28074, 31119, 34993, 24343, 29995, 25242, 36741, 20463, 37340, 26023, 33071, 33105, 24220, 33104, 36212, 21103, 35206, 36171, 22797, 20613, 20184, 38428, 29238, 33145, 36127, 23500, 35747, 38468, 22919, 32538, 21648, 22134, 22030, 35813, 25913, 27010, 38041, 30422, 28297, 24178, 29976, 26438, 26577, 31487, 32925, 36214, 24863, 31174, 25954, 36195, 20872, 21018, 38050, 32568, 32923, 32434, 23703, 28207, 26464, 31705, 30347, 39640, 33167, 32660, 31957, 25630, 38224, 31295, 21578, 21733, 27468, 25601, 25096, 40509, 33011, 30105, 21106, 38761, 33883, 26684, 34532, 38401, 38548, 38124, 20010, 21508, 32473, 26681, 36319, 32789, 26356, 24218, 32697, 31535, 31536, 31538, 31540, 31541, 31542, 31543, 31545, 31547, 31549, 31551, 31552, 31553, 31554, 31555, 31556, 31558, 31560, 31562, 31565, 31566, 31571, 31573, 31575, 31577, 31580, 31582, 31583, 31585, 31587, 31588, 31589, 31590, 31591, 31592, 31593, 31594, 31595, 31596, 31597, 31599, 31600, 31603, 31604, 31606, 31608, 31610, 31612, 31613, 31615, 31617, 31618, 31619, 31620, 31622, 31623, 31624, 31625, 31626, 31627, 31628, 31630, 31631, 31633, 31634, 31635, 31638, 31640, 31641, 31642, 31643, 31646, 31647, 31648, 31651, 31652, 31653, 31662, 31663, 31664, 31666, 31667, 31669, 31670, 31671, 31673, 31674, 31675, 31676, 31677, 31678, 31679, 31680, 31682, 31683, 31684, 22466, 32831, 26775, 24037, 25915, 21151, 24685, 40858, 20379, 36524, 20844, 23467, 24339, 24041, 27742, 25329, 36129, 20849, 38057, 21246, 27807, 33503, 29399, 22434, 26500, 36141, 22815, 36764, 33735, 21653, 31629, 20272, 27837, 23396, 22993, 40723, 21476, 34506, 39592, 35895, 32929, 25925, 39038, 22266, 38599, 21038, 29916, 21072, 23521, 25346, 35074, 20054, 25296, 24618, 26874, 20851, 23448, 20896, 35266, 31649, 39302, 32592, 24815, 28748, 36143, 20809, 24191, 36891, 29808, 35268, 22317, 30789, 24402, 40863, 38394, 36712, 39740, 35809, 30328, 26690, 26588, 36330, 36149, 21053, 36746, 28378, 26829, 38149, 37101, 22269, 26524, 35065, 36807, 21704, 31685, 31688, 31689, 31690, 31691, 31693, 31694, 31695, 31696, 31698, 31700, 31701, 31702, 31703, 31704, 31707, 31708, 31710, 31711, 31712, 31714, 31715, 31716, 31719, 31720, 31721, 31723, 31724, 31725, 31727, 31728, 31730, 31731, 31732, 31733, 31734, 31736, 31737, 31738, 31739, 31741, 31743, 31744, 31745, 31746, 31747, 31748, 31749, 31750, 31752, 31753, 31754, 31757, 31758, 31760, 31761, 31762, 31763, 31764, 31765, 31767, 31768, 31769, 31770, 31771, 31772, 31773, 31774, 31776, 31777, 31778, 31779, 31780, 31781, 31784, 31785, 31787, 31788, 31789, 31790, 31791, 31792, 31793, 31794, 31795, 31796, 31797, 31798, 31799, 31801, 31802, 31803, 31804, 31805, 31806, 31810, 39608, 23401, 28023, 27686, 20133, 23475, 39559, 37219, 25e3, 37039, 38889, 21547, 28085, 23506, 20989, 21898, 32597, 32752, 25788, 25421, 26097, 25022, 24717, 28938, 27735, 27721, 22831, 26477, 33322, 22741, 22158, 35946, 27627, 37085, 22909, 32791, 21495, 28009, 21621, 21917, 33655, 33743, 26680, 31166, 21644, 20309, 21512, 30418, 35977, 38402, 27827, 28088, 36203, 35088, 40548, 36154, 22079, 40657, 30165, 24456, 29408, 24680, 21756, 20136, 27178, 34913, 24658, 36720, 21700, 28888, 34425, 40511, 27946, 23439, 24344, 32418, 21897, 20399, 29492, 21564, 21402, 20505, 21518, 21628, 20046, 24573, 29786, 22774, 33899, 32993, 34676, 29392, 31946, 28246, 31811, 31812, 31813, 31814, 31815, 31816, 31817, 31818, 31819, 31820, 31822, 31823, 31824, 31825, 31826, 31827, 31828, 31829, 31830, 31831, 31832, 31833, 31834, 31835, 31836, 31837, 31838, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31846, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31857, 31858, 31861, 31862, 31863, 31864, 31865, 31866, 31870, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 31878, 31879, 31880, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31891, 31892, 31894, 31897, 31898, 31899, 31904, 31905, 31907, 31910, 31911, 31912, 31913, 31915, 31916, 31917, 31919, 31920, 31924, 31925, 31926, 31927, 31928, 31930, 31931, 24359, 34382, 21804, 25252, 20114, 27818, 25143, 33457, 21719, 21326, 29502, 28369, 30011, 21010, 21270, 35805, 27088, 24458, 24576, 28142, 22351, 27426, 29615, 26707, 36824, 32531, 25442, 24739, 21796, 30186, 35938, 28949, 28067, 23462, 24187, 33618, 24908, 40644, 30970, 34647, 31783, 30343, 20976, 24822, 29004, 26179, 24140, 24653, 35854, 28784, 25381, 36745, 24509, 24674, 34516, 22238, 27585, 24724, 24935, 21321, 24800, 26214, 36159, 31229, 20250, 28905, 27719, 35763, 35826, 32472, 33636, 26127, 23130, 39746, 27985, 28151, 35905, 27963, 20249, 28779, 33719, 25110, 24785, 38669, 36135, 31096, 20987, 22334, 22522, 26426, 30072, 31293, 31215, 31637, 31935, 31936, 31938, 31939, 31940, 31942, 31945, 31947, 31950, 31951, 31952, 31953, 31954, 31955, 31956, 31960, 31962, 31963, 31965, 31966, 31969, 31970, 31971, 31972, 31973, 31974, 31975, 31977, 31978, 31979, 31980, 31981, 31982, 31984, 31985, 31986, 31987, 31988, 31989, 31990, 31991, 31993, 31994, 31996, 31997, 31998, 31999, 32e3, 32001, 32002, 32003, 32004, 32005, 32006, 32007, 32008, 32009, 32011, 32012, 32013, 32014, 32015, 32016, 32017, 32018, 32019, 32020, 32021, 32022, 32023, 32024, 32025, 32026, 32027, 32028, 32029, 32030, 32031, 32033, 32035, 32036, 32037, 32038, 32040, 32041, 32042, 32044, 32045, 32046, 32048, 32049, 32050, 32051, 32052, 32053, 32054, 32908, 39269, 36857, 28608, 35749, 40481, 23020, 32489, 32521, 21513, 26497, 26840, 36753, 31821, 38598, 21450, 24613, 30142, 27762, 21363, 23241, 32423, 25380, 20960, 33034, 24049, 34015, 25216, 20864, 23395, 20238, 31085, 21058, 24760, 27982, 23492, 23490, 35745, 35760, 26082, 24524, 38469, 22931, 32487, 32426, 22025, 26551, 22841, 20339, 23478, 21152, 33626, 39050, 36158, 30002, 38078, 20551, 31292, 20215, 26550, 39550, 23233, 27516, 30417, 22362, 23574, 31546, 38388, 29006, 20860, 32937, 33392, 22904, 32516, 33575, 26816, 26604, 30897, 30839, 25315, 25441, 31616, 20461, 21098, 20943, 33616, 27099, 37492, 36341, 36145, 35265, 38190, 31661, 20214, 32055, 32056, 32057, 32058, 32059, 32060, 32061, 32062, 32063, 32064, 32065, 32066, 32067, 32068, 32069, 32070, 32071, 32072, 32073, 32074, 32075, 32076, 32077, 32078, 32079, 32080, 32081, 32082, 32083, 32084, 32085, 32086, 32087, 32088, 32089, 32090, 32091, 32092, 32093, 32094, 32095, 32096, 32097, 32098, 32099, 32100, 32101, 32102, 32103, 32104, 32105, 32106, 32107, 32108, 32109, 32111, 32112, 32113, 32114, 32115, 32116, 32117, 32118, 32120, 32121, 32122, 32123, 32124, 32125, 32126, 32127, 32128, 32129, 32130, 32131, 32132, 32133, 32134, 32135, 32136, 32137, 32138, 32139, 32140, 32141, 32142, 32143, 32144, 32145, 32146, 32147, 32148, 32149, 32150, 32151, 32152, 20581, 33328, 21073, 39279, 28176, 28293, 28071, 24314, 20725, 23004, 23558, 27974, 27743, 30086, 33931, 26728, 22870, 35762, 21280, 37233, 38477, 34121, 26898, 30977, 28966, 33014, 20132, 37066, 27975, 39556, 23047, 22204, 25605, 38128, 30699, 20389, 33050, 29409, 35282, 39290, 32564, 32478, 21119, 25945, 37237, 36735, 36739, 21483, 31382, 25581, 25509, 30342, 31224, 34903, 38454, 25130, 21163, 33410, 26708, 26480, 25463, 30571, 31469, 27905, 32467, 35299, 22992, 25106, 34249, 33445, 30028, 20511, 20171, 30117, 35819, 23626, 24062, 31563, 26020, 37329, 20170, 27941, 35167, 32039, 38182, 20165, 35880, 36827, 38771, 26187, 31105, 36817, 28908, 28024, 32153, 32154, 32155, 32156, 32157, 32158, 32159, 32160, 32161, 32162, 32163, 32164, 32165, 32167, 32168, 32169, 32170, 32171, 32172, 32173, 32175, 32176, 32177, 32178, 32179, 32180, 32181, 32182, 32183, 32184, 32185, 32186, 32187, 32188, 32189, 32190, 32191, 32192, 32193, 32194, 32195, 32196, 32197, 32198, 32199, 32200, 32201, 32202, 32203, 32204, 32205, 32206, 32207, 32208, 32209, 32210, 32211, 32212, 32213, 32214, 32215, 32216, 32217, 32218, 32219, 32220, 32221, 32222, 32223, 32224, 32225, 32226, 32227, 32228, 32229, 32230, 32231, 32232, 32233, 32234, 32235, 32236, 32237, 32238, 32239, 32240, 32241, 32242, 32243, 32244, 32245, 32246, 32247, 32248, 32249, 32250, 23613, 21170, 33606, 20834, 33550, 30555, 26230, 40120, 20140, 24778, 31934, 31923, 32463, 20117, 35686, 26223, 39048, 38745, 22659, 25964, 38236, 24452, 30153, 38742, 31455, 31454, 20928, 28847, 31384, 25578, 31350, 32416, 29590, 38893, 20037, 28792, 20061, 37202, 21417, 25937, 26087, 33276, 33285, 21646, 23601, 30106, 38816, 25304, 29401, 30141, 23621, 39545, 33738, 23616, 21632, 30697, 20030, 27822, 32858, 25298, 25454, 24040, 20855, 36317, 36382, 38191, 20465, 21477, 24807, 28844, 21095, 25424, 40515, 23071, 20518, 30519, 21367, 32482, 25733, 25899, 25225, 25496, 20500, 29237, 35273, 20915, 35776, 32477, 22343, 33740, 38055, 20891, 21531, 23803, 32251, 32252, 32253, 32254, 32255, 32256, 32257, 32258, 32259, 32260, 32261, 32262, 32263, 32264, 32265, 32266, 32267, 32268, 32269, 32270, 32271, 32272, 32273, 32274, 32275, 32276, 32277, 32278, 32279, 32280, 32281, 32282, 32283, 32284, 32285, 32286, 32287, 32288, 32289, 32290, 32291, 32292, 32293, 32294, 32295, 32296, 32297, 32298, 32299, 32300, 32301, 32302, 32303, 32304, 32305, 32306, 32307, 32308, 32309, 32310, 32311, 32312, 32313, 32314, 32316, 32317, 32318, 32319, 32320, 32322, 32323, 32324, 32325, 32326, 32328, 32329, 32330, 32331, 32332, 32333, 32334, 32335, 32336, 32337, 32338, 32339, 32340, 32341, 32342, 32343, 32344, 32345, 32346, 32347, 32348, 32349, 20426, 31459, 27994, 37089, 39567, 21888, 21654, 21345, 21679, 24320, 25577, 26999, 20975, 24936, 21002, 22570, 21208, 22350, 30733, 30475, 24247, 24951, 31968, 25179, 25239, 20130, 28821, 32771, 25335, 28900, 38752, 22391, 33499, 26607, 26869, 30933, 39063, 31185, 22771, 21683, 21487, 28212, 20811, 21051, 23458, 35838, 32943, 21827, 22438, 24691, 22353, 21549, 31354, 24656, 23380, 25511, 25248, 21475, 25187, 23495, 26543, 21741, 31391, 33510, 37239, 24211, 35044, 22840, 22446, 25358, 36328, 33007, 22359, 31607, 20393, 24555, 23485, 27454, 21281, 31568, 29378, 26694, 30719, 30518, 26103, 20917, 20111, 30420, 23743, 31397, 33909, 22862, 39745, 20608, 32350, 32351, 32352, 32353, 32354, 32355, 32356, 32357, 32358, 32359, 32360, 32361, 32362, 32363, 32364, 32365, 32366, 32367, 32368, 32369, 32370, 32371, 32372, 32373, 32374, 32375, 32376, 32377, 32378, 32379, 32380, 32381, 32382, 32383, 32384, 32385, 32387, 32388, 32389, 32390, 32391, 32392, 32393, 32394, 32395, 32396, 32397, 32398, 32399, 32400, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32409, 32410, 32412, 32413, 32414, 32430, 32436, 32443, 32444, 32470, 32484, 32492, 32505, 32522, 32528, 32542, 32567, 32569, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32579, 32582, 32583, 32584, 32585, 32586, 32587, 32588, 32589, 32590, 32591, 32594, 32595, 39304, 24871, 28291, 22372, 26118, 25414, 22256, 25324, 25193, 24275, 38420, 22403, 25289, 21895, 34593, 33098, 36771, 21862, 33713, 26469, 36182, 34013, 23146, 26639, 25318, 31726, 38417, 20848, 28572, 35888, 25597, 35272, 25042, 32518, 28866, 28389, 29701, 27028, 29436, 24266, 37070, 26391, 28010, 25438, 21171, 29282, 32769, 20332, 23013, 37226, 28889, 28061, 21202, 20048, 38647, 38253, 34174, 30922, 32047, 20769, 22418, 25794, 32907, 31867, 27882, 26865, 26974, 20919, 21400, 26792, 29313, 40654, 31729, 29432, 31163, 28435, 29702, 26446, 37324, 40100, 31036, 33673, 33620, 21519, 26647, 20029, 21385, 21169, 30782, 21382, 21033, 20616, 20363, 20432, 32598, 32601, 32603, 32604, 32605, 32606, 32608, 32611, 32612, 32613, 32614, 32615, 32619, 32620, 32621, 32623, 32624, 32627, 32629, 32630, 32631, 32632, 32634, 32635, 32636, 32637, 32639, 32640, 32642, 32643, 32644, 32645, 32646, 32647, 32648, 32649, 32651, 32653, 32655, 32656, 32657, 32658, 32659, 32661, 32662, 32663, 32664, 32665, 32667, 32668, 32672, 32674, 32675, 32677, 32678, 32680, 32681, 32682, 32683, 32684, 32685, 32686, 32689, 32691, 32692, 32693, 32694, 32695, 32698, 32699, 32702, 32704, 32706, 32707, 32708, 32710, 32711, 32712, 32713, 32715, 32717, 32719, 32720, 32721, 32722, 32723, 32726, 32727, 32729, 32730, 32731, 32732, 32733, 32734, 32738, 32739, 30178, 31435, 31890, 27813, 38582, 21147, 29827, 21737, 20457, 32852, 33714, 36830, 38256, 24265, 24604, 28063, 24088, 25947, 33080, 38142, 24651, 28860, 32451, 31918, 20937, 26753, 31921, 33391, 20004, 36742, 37327, 26238, 20142, 35845, 25769, 32842, 20698, 30103, 29134, 23525, 36797, 28518, 20102, 25730, 38243, 24278, 26009, 21015, 35010, 28872, 21155, 29454, 29747, 26519, 30967, 38678, 20020, 37051, 40158, 28107, 20955, 36161, 21533, 25294, 29618, 33777, 38646, 40836, 38083, 20278, 32666, 20940, 28789, 38517, 23725, 39046, 21478, 20196, 28316, 29705, 27060, 30827, 39311, 30041, 21016, 30244, 27969, 26611, 20845, 40857, 32843, 21657, 31548, 31423, 32740, 32743, 32744, 32746, 32747, 32748, 32749, 32751, 32754, 32756, 32757, 32758, 32759, 32760, 32761, 32762, 32765, 32766, 32767, 32770, 32775, 32776, 32777, 32778, 32782, 32783, 32785, 32787, 32794, 32795, 32797, 32798, 32799, 32801, 32803, 32804, 32811, 32812, 32813, 32814, 32815, 32816, 32818, 32820, 32825, 32826, 32828, 32830, 32832, 32833, 32836, 32837, 32839, 32840, 32841, 32846, 32847, 32848, 32849, 32851, 32853, 32854, 32855, 32857, 32859, 32860, 32861, 32862, 32863, 32864, 32865, 32866, 32867, 32868, 32869, 32870, 32871, 32872, 32875, 32876, 32877, 32878, 32879, 32880, 32882, 32883, 32884, 32885, 32886, 32887, 32888, 32889, 32890, 32891, 32892, 32893, 38534, 22404, 25314, 38471, 27004, 23044, 25602, 31699, 28431, 38475, 33446, 21346, 39045, 24208, 28809, 25523, 21348, 34383, 40065, 40595, 30860, 38706, 36335, 36162, 40575, 28510, 31108, 24405, 38470, 25134, 39540, 21525, 38109, 20387, 26053, 23653, 23649, 32533, 34385, 27695, 24459, 29575, 28388, 32511, 23782, 25371, 23402, 28390, 21365, 20081, 25504, 30053, 25249, 36718, 20262, 20177, 27814, 32438, 35770, 33821, 34746, 32599, 36923, 38179, 31657, 39585, 35064, 33853, 27931, 39558, 32476, 22920, 40635, 29595, 30721, 34434, 39532, 39554, 22043, 21527, 22475, 20080, 40614, 21334, 36808, 33033, 30610, 39314, 34542, 28385, 34067, 26364, 24930, 28459, 32894, 32897, 32898, 32901, 32904, 32906, 32909, 32910, 32911, 32912, 32913, 32914, 32916, 32917, 32919, 32921, 32926, 32931, 32934, 32935, 32936, 32940, 32944, 32947, 32949, 32950, 32952, 32953, 32955, 32965, 32967, 32968, 32969, 32970, 32971, 32975, 32976, 32977, 32978, 32979, 32980, 32981, 32984, 32991, 32992, 32994, 32995, 32998, 33006, 33013, 33015, 33017, 33019, 33022, 33023, 33024, 33025, 33027, 33028, 33029, 33031, 33032, 33035, 33036, 33045, 33047, 33049, 33051, 33052, 33053, 33055, 33056, 33057, 33058, 33059, 33060, 33061, 33062, 33063, 33064, 33065, 33066, 33067, 33069, 33070, 33072, 33075, 33076, 33077, 33079, 33081, 33082, 33083, 33084, 33085, 33087, 35881, 33426, 33579, 30450, 27667, 24537, 33725, 29483, 33541, 38170, 27611, 30683, 38086, 21359, 33538, 20882, 24125, 35980, 36152, 20040, 29611, 26522, 26757, 37238, 38665, 29028, 27809, 30473, 23186, 38209, 27599, 32654, 26151, 23504, 22969, 23194, 38376, 38391, 20204, 33804, 33945, 27308, 30431, 38192, 29467, 26790, 23391, 30511, 37274, 38753, 31964, 36855, 35868, 24357, 31859, 31192, 35269, 27852, 34588, 23494, 24130, 26825, 30496, 32501, 20885, 20813, 21193, 23081, 32517, 38754, 33495, 25551, 30596, 34256, 31186, 28218, 24217, 22937, 34065, 28781, 27665, 25279, 30399, 25935, 24751, 38397, 26126, 34719, 40483, 38125, 21517, 21629, 35884, 25720, 33088, 33089, 33090, 33091, 33092, 33093, 33095, 33097, 33101, 33102, 33103, 33106, 33110, 33111, 33112, 33115, 33116, 33117, 33118, 33119, 33121, 33122, 33123, 33124, 33126, 33128, 33130, 33131, 33132, 33135, 33138, 33139, 33141, 33142, 33143, 33144, 33153, 33155, 33156, 33157, 33158, 33159, 33161, 33163, 33164, 33165, 33166, 33168, 33170, 33171, 33172, 33173, 33174, 33175, 33177, 33178, 33182, 33183, 33184, 33185, 33186, 33188, 33189, 33191, 33193, 33195, 33196, 33197, 33198, 33199, 33200, 33201, 33202, 33204, 33205, 33206, 33207, 33208, 33209, 33212, 33213, 33214, 33215, 33220, 33221, 33223, 33224, 33225, 33227, 33229, 33230, 33231, 33232, 33233, 33234, 33235, 25721, 34321, 27169, 33180, 30952, 25705, 39764, 25273, 26411, 33707, 22696, 40664, 27819, 28448, 23518, 38476, 35851, 29279, 26576, 25287, 29281, 20137, 22982, 27597, 22675, 26286, 24149, 21215, 24917, 26408, 30446, 30566, 29287, 31302, 25343, 21738, 21584, 38048, 37027, 23068, 32435, 27670, 20035, 22902, 32784, 22856, 21335, 30007, 38590, 22218, 25376, 33041, 24700, 38393, 28118, 21602, 39297, 20869, 23273, 33021, 22958, 38675, 20522, 27877, 23612, 25311, 20320, 21311, 33147, 36870, 28346, 34091, 25288, 24180, 30910, 25781, 25467, 24565, 23064, 37247, 40479, 23615, 25423, 32834, 23421, 21870, 38218, 38221, 28037, 24744, 26592, 29406, 20957, 23425, 33236, 33237, 33238, 33239, 33240, 33241, 33242, 33243, 33244, 33245, 33246, 33247, 33248, 33249, 33250, 33252, 33253, 33254, 33256, 33257, 33259, 33262, 33263, 33264, 33265, 33266, 33269, 33270, 33271, 33272, 33273, 33274, 33277, 33279, 33283, 33287, 33288, 33289, 33290, 33291, 33294, 33295, 33297, 33299, 33301, 33302, 33303, 33304, 33305, 33306, 33309, 33312, 33316, 33317, 33318, 33319, 33321, 33326, 33330, 33338, 33340, 33341, 33343, 33344, 33345, 33346, 33347, 33349, 33350, 33352, 33354, 33356, 33357, 33358, 33360, 33361, 33362, 33363, 33364, 33365, 33366, 33367, 33369, 33371, 33372, 33373, 33374, 33376, 33377, 33378, 33379, 33380, 33381, 33382, 33383, 33385, 25319, 27870, 29275, 25197, 38062, 32445, 33043, 27987, 20892, 24324, 22900, 21162, 24594, 22899, 26262, 34384, 30111, 25386, 25062, 31983, 35834, 21734, 27431, 40485, 27572, 34261, 21589, 20598, 27812, 21866, 36276, 29228, 24085, 24597, 29750, 25293, 25490, 29260, 24472, 28227, 27966, 25856, 28504, 30424, 30928, 30460, 30036, 21028, 21467, 20051, 24222, 26049, 32810, 32982, 25243, 21638, 21032, 28846, 34957, 36305, 27873, 21624, 32986, 22521, 35060, 36180, 38506, 37197, 20329, 27803, 21943, 30406, 30768, 25256, 28921, 28558, 24429, 34028, 26842, 30844, 31735, 33192, 26379, 40527, 25447, 30896, 22383, 30738, 38713, 25209, 25259, 21128, 29749, 27607, 33386, 33387, 33388, 33389, 33393, 33397, 33398, 33399, 33400, 33403, 33404, 33408, 33409, 33411, 33413, 33414, 33415, 33417, 33420, 33424, 33427, 33428, 33429, 33430, 33434, 33435, 33438, 33440, 33442, 33443, 33447, 33458, 33461, 33462, 33466, 33467, 33468, 33471, 33472, 33474, 33475, 33477, 33478, 33481, 33488, 33494, 33497, 33498, 33501, 33506, 33511, 33512, 33513, 33514, 33516, 33517, 33518, 33520, 33522, 33523, 33525, 33526, 33528, 33530, 33532, 33533, 33534, 33535, 33536, 33546, 33547, 33549, 33552, 33554, 33555, 33558, 33560, 33561, 33565, 33566, 33567, 33568, 33569, 33570, 33571, 33572, 33573, 33574, 33577, 33578, 33582, 33584, 33586, 33591, 33595, 33597, 21860, 33086, 30130, 30382, 21305, 30174, 20731, 23617, 35692, 31687, 20559, 29255, 39575, 39128, 28418, 29922, 31080, 25735, 30629, 25340, 39057, 36139, 21697, 32856, 20050, 22378, 33529, 33805, 24179, 20973, 29942, 35780, 23631, 22369, 27900, 39047, 23110, 30772, 39748, 36843, 31893, 21078, 25169, 38138, 20166, 33670, 33889, 33769, 33970, 22484, 26420, 22275, 26222, 28006, 35889, 26333, 28689, 26399, 27450, 26646, 25114, 22971, 19971, 20932, 28422, 26578, 27791, 20854, 26827, 22855, 27495, 30054, 23822, 33040, 40784, 26071, 31048, 31041, 39569, 36215, 23682, 20062, 20225, 21551, 22865, 30732, 22120, 27668, 36804, 24323, 27773, 27875, 35755, 25488, 33598, 33599, 33601, 33602, 33604, 33605, 33608, 33610, 33611, 33612, 33613, 33614, 33619, 33621, 33622, 33623, 33624, 33625, 33629, 33634, 33648, 33649, 33650, 33651, 33652, 33653, 33654, 33657, 33658, 33662, 33663, 33664, 33665, 33666, 33667, 33668, 33671, 33672, 33674, 33675, 33676, 33677, 33679, 33680, 33681, 33684, 33685, 33686, 33687, 33689, 33690, 33693, 33695, 33697, 33698, 33699, 33700, 33701, 33702, 33703, 33708, 33709, 33710, 33711, 33717, 33723, 33726, 33727, 33730, 33731, 33732, 33734, 33736, 33737, 33739, 33741, 33742, 33744, 33745, 33746, 33747, 33749, 33751, 33753, 33754, 33755, 33758, 33762, 33763, 33764, 33766, 33767, 33768, 33771, 33772, 33773, 24688, 27965, 29301, 25190, 38030, 38085, 21315, 36801, 31614, 20191, 35878, 20094, 40660, 38065, 38067, 21069, 28508, 36963, 27973, 35892, 22545, 23884, 27424, 27465, 26538, 21595, 33108, 32652, 22681, 34103, 24378, 25250, 27207, 38201, 25970, 24708, 26725, 30631, 20052, 20392, 24039, 38808, 25772, 32728, 23789, 20431, 31373, 20999, 33540, 19988, 24623, 31363, 38054, 20405, 20146, 31206, 29748, 21220, 33465, 25810, 31165, 23517, 27777, 38738, 36731, 27682, 20542, 21375, 28165, 25806, 26228, 27696, 24773, 39031, 35831, 24198, 29756, 31351, 31179, 19992, 37041, 29699, 27714, 22234, 37195, 27845, 36235, 21306, 34502, 26354, 36527, 23624, 39537, 28192, 33774, 33775, 33779, 33780, 33781, 33782, 33783, 33786, 33787, 33788, 33790, 33791, 33792, 33794, 33797, 33799, 33800, 33801, 33802, 33808, 33810, 33811, 33812, 33813, 33814, 33815, 33817, 33818, 33819, 33822, 33823, 33824, 33825, 33826, 33827, 33833, 33834, 33835, 33836, 33837, 33838, 33839, 33840, 33842, 33843, 33844, 33845, 33846, 33847, 33849, 33850, 33851, 33854, 33855, 33856, 33857, 33858, 33859, 33860, 33861, 33863, 33864, 33865, 33866, 33867, 33868, 33869, 33870, 33871, 33872, 33874, 33875, 33876, 33877, 33878, 33880, 33885, 33886, 33887, 33888, 33890, 33892, 33893, 33894, 33895, 33896, 33898, 33902, 33903, 33904, 33906, 33908, 33911, 33913, 33915, 33916, 21462, 23094, 40843, 36259, 21435, 22280, 39079, 26435, 37275, 27849, 20840, 30154, 25331, 29356, 21048, 21149, 32570, 28820, 30264, 21364, 40522, 27063, 30830, 38592, 35033, 32676, 28982, 29123, 20873, 26579, 29924, 22756, 25880, 22199, 35753, 39286, 25200, 32469, 24825, 28909, 22764, 20161, 20154, 24525, 38887, 20219, 35748, 20995, 22922, 32427, 25172, 20173, 26085, 25102, 33592, 33993, 33635, 34701, 29076, 28342, 23481, 32466, 20887, 25545, 26580, 32905, 33593, 34837, 20754, 23418, 22914, 36785, 20083, 27741, 20837, 35109, 36719, 38446, 34122, 29790, 38160, 38384, 28070, 33509, 24369, 25746, 27922, 33832, 33134, 40131, 22622, 36187, 19977, 21441, 33917, 33918, 33919, 33920, 33921, 33923, 33924, 33925, 33926, 33930, 33933, 33935, 33936, 33937, 33938, 33939, 33940, 33941, 33942, 33944, 33946, 33947, 33949, 33950, 33951, 33952, 33954, 33955, 33956, 33957, 33958, 33959, 33960, 33961, 33962, 33963, 33964, 33965, 33966, 33968, 33969, 33971, 33973, 33974, 33975, 33979, 33980, 33982, 33984, 33986, 33987, 33989, 33990, 33991, 33992, 33995, 33996, 33998, 33999, 34002, 34004, 34005, 34007, 34008, 34009, 34010, 34011, 34012, 34014, 34017, 34018, 34020, 34023, 34024, 34025, 34026, 34027, 34029, 34030, 34031, 34033, 34034, 34035, 34036, 34037, 34038, 34039, 34040, 34041, 34042, 34043, 34045, 34046, 34048, 34049, 34050, 20254, 25955, 26705, 21971, 20007, 25620, 39578, 25195, 23234, 29791, 33394, 28073, 26862, 20711, 33678, 30722, 26432, 21049, 27801, 32433, 20667, 21861, 29022, 31579, 26194, 29642, 33515, 26441, 23665, 21024, 29053, 34923, 38378, 38485, 25797, 36193, 33203, 21892, 27733, 25159, 32558, 22674, 20260, 21830, 36175, 26188, 19978, 23578, 35059, 26786, 25422, 31245, 28903, 33421, 21242, 38902, 23569, 21736, 37045, 32461, 22882, 36170, 34503, 33292, 33293, 36198, 25668, 23556, 24913, 28041, 31038, 35774, 30775, 30003, 21627, 20280, 36523, 28145, 23072, 32453, 31070, 27784, 23457, 23158, 29978, 32958, 24910, 28183, 22768, 29983, 29989, 29298, 21319, 32499, 34051, 34052, 34053, 34054, 34055, 34056, 34057, 34058, 34059, 34061, 34062, 34063, 34064, 34066, 34068, 34069, 34070, 34072, 34073, 34075, 34076, 34077, 34078, 34080, 34082, 34083, 34084, 34085, 34086, 34087, 34088, 34089, 34090, 34093, 34094, 34095, 34096, 34097, 34098, 34099, 34100, 34101, 34102, 34110, 34111, 34112, 34113, 34114, 34116, 34117, 34118, 34119, 34123, 34124, 34125, 34126, 34127, 34128, 34129, 34130, 34131, 34132, 34133, 34135, 34136, 34138, 34139, 34140, 34141, 34143, 34144, 34145, 34146, 34147, 34149, 34150, 34151, 34153, 34154, 34155, 34156, 34157, 34158, 34159, 34160, 34161, 34163, 34165, 34166, 34167, 34168, 34172, 34173, 34175, 34176, 34177, 30465, 30427, 21097, 32988, 22307, 24072, 22833, 29422, 26045, 28287, 35799, 23608, 34417, 21313, 30707, 25342, 26102, 20160, 39135, 34432, 23454, 35782, 21490, 30690, 20351, 23630, 39542, 22987, 24335, 31034, 22763, 19990, 26623, 20107, 25325, 35475, 36893, 21183, 26159, 21980, 22124, 36866, 20181, 20365, 37322, 39280, 27663, 24066, 24643, 23460, 35270, 35797, 25910, 25163, 39318, 23432, 23551, 25480, 21806, 21463, 30246, 20861, 34092, 26530, 26803, 27530, 25234, 36755, 21460, 33298, 28113, 30095, 20070, 36174, 23408, 29087, 34223, 26257, 26329, 32626, 34560, 40653, 40736, 23646, 26415, 36848, 26641, 26463, 25101, 31446, 22661, 24246, 25968, 28465, 34178, 34179, 34182, 34184, 34185, 34186, 34187, 34188, 34189, 34190, 34192, 34193, 34194, 34195, 34196, 34197, 34198, 34199, 34200, 34201, 34202, 34205, 34206, 34207, 34208, 34209, 34210, 34211, 34213, 34214, 34215, 34217, 34219, 34220, 34221, 34225, 34226, 34227, 34228, 34229, 34230, 34232, 34234, 34235, 34236, 34237, 34238, 34239, 34240, 34242, 34243, 34244, 34245, 34246, 34247, 34248, 34250, 34251, 34252, 34253, 34254, 34257, 34258, 34260, 34262, 34263, 34264, 34265, 34266, 34267, 34269, 34270, 34271, 34272, 34273, 34274, 34275, 34277, 34278, 34279, 34280, 34282, 34283, 34284, 34285, 34286, 34287, 34288, 34289, 34290, 34291, 34292, 34293, 34294, 34295, 34296, 24661, 21047, 32781, 25684, 34928, 29993, 24069, 26643, 25332, 38684, 21452, 29245, 35841, 27700, 30561, 31246, 21550, 30636, 39034, 33308, 35828, 30805, 26388, 28865, 26031, 25749, 22070, 24605, 31169, 21496, 19997, 27515, 32902, 23546, 21987, 22235, 20282, 20284, 39282, 24051, 26494, 32824, 24578, 39042, 36865, 23435, 35772, 35829, 25628, 33368, 25822, 22013, 33487, 37221, 20439, 32032, 36895, 31903, 20723, 22609, 28335, 23487, 35785, 32899, 37240, 33948, 31639, 34429, 38539, 38543, 32485, 39635, 30862, 23681, 31319, 36930, 38567, 31071, 23385, 25439, 31499, 34001, 26797, 21766, 32553, 29712, 32034, 38145, 25152, 22604, 20182, 23427, 22905, 22612, 34297, 34298, 34300, 34301, 34302, 34304, 34305, 34306, 34307, 34308, 34310, 34311, 34312, 34313, 34314, 34315, 34316, 34317, 34318, 34319, 34320, 34322, 34323, 34324, 34325, 34327, 34328, 34329, 34330, 34331, 34332, 34333, 34334, 34335, 34336, 34337, 34338, 34339, 34340, 34341, 34342, 34344, 34346, 34347, 34348, 34349, 34350, 34351, 34352, 34353, 34354, 34355, 34356, 34357, 34358, 34359, 34361, 34362, 34363, 34365, 34366, 34367, 34368, 34369, 34370, 34371, 34372, 34373, 34374, 34375, 34376, 34377, 34378, 34379, 34380, 34386, 34387, 34389, 34390, 34391, 34392, 34393, 34395, 34396, 34397, 34399, 34400, 34401, 34403, 34404, 34405, 34406, 34407, 34408, 34409, 34410, 29549, 25374, 36427, 36367, 32974, 33492, 25260, 21488, 27888, 37214, 22826, 24577, 27760, 22349, 25674, 36138, 30251, 28393, 22363, 27264, 30192, 28525, 35885, 35848, 22374, 27631, 34962, 30899, 25506, 21497, 28845, 27748, 22616, 25642, 22530, 26848, 33179, 21776, 31958, 20504, 36538, 28108, 36255, 28907, 25487, 28059, 28372, 32486, 33796, 26691, 36867, 28120, 38518, 35752, 22871, 29305, 34276, 33150, 30140, 35466, 26799, 21076, 36386, 38161, 25552, 39064, 36420, 21884, 20307, 26367, 22159, 24789, 28053, 21059, 23625, 22825, 28155, 22635, 3e4, 29980, 24684, 33300, 33094, 25361, 26465, 36834, 30522, 36339, 36148, 38081, 24086, 21381, 21548, 28867, 34413, 34415, 34416, 34418, 34419, 34420, 34421, 34422, 34423, 34424, 34435, 34436, 34437, 34438, 34439, 34440, 34441, 34446, 34447, 34448, 34449, 34450, 34452, 34454, 34455, 34456, 34457, 34458, 34459, 34462, 34463, 34464, 34465, 34466, 34469, 34470, 34475, 34477, 34478, 34482, 34483, 34487, 34488, 34489, 34491, 34492, 34493, 34494, 34495, 34497, 34498, 34499, 34501, 34504, 34508, 34509, 34514, 34515, 34517, 34518, 34519, 34522, 34524, 34525, 34528, 34529, 34530, 34531, 34533, 34534, 34535, 34536, 34538, 34539, 34540, 34543, 34549, 34550, 34551, 34554, 34555, 34556, 34557, 34559, 34561, 34564, 34565, 34566, 34571, 34572, 34574, 34575, 34576, 34577, 34580, 34582, 27712, 24311, 20572, 20141, 24237, 25402, 33351, 36890, 26704, 37230, 30643, 21516, 38108, 24420, 31461, 26742, 25413, 31570, 32479, 30171, 20599, 25237, 22836, 36879, 20984, 31171, 31361, 22270, 24466, 36884, 28034, 23648, 22303, 21520, 20820, 28237, 22242, 25512, 39059, 33151, 34581, 35114, 36864, 21534, 23663, 33216, 25302, 25176, 33073, 40501, 38464, 39534, 39548, 26925, 22949, 25299, 21822, 25366, 21703, 34521, 27964, 23043, 29926, 34972, 27498, 22806, 35916, 24367, 28286, 29609, 39037, 20024, 28919, 23436, 30871, 25405, 26202, 30358, 24779, 23451, 23113, 19975, 33109, 27754, 29579, 20129, 26505, 32593, 24448, 26106, 26395, 24536, 22916, 23041, 34585, 34587, 34589, 34591, 34592, 34596, 34598, 34599, 34600, 34602, 34603, 34604, 34605, 34607, 34608, 34610, 34611, 34613, 34614, 34616, 34617, 34618, 34620, 34621, 34624, 34625, 34626, 34627, 34628, 34629, 34630, 34634, 34635, 34637, 34639, 34640, 34641, 34642, 34644, 34645, 34646, 34648, 34650, 34651, 34652, 34653, 34654, 34655, 34657, 34658, 34662, 34663, 34664, 34665, 34666, 34667, 34668, 34669, 34671, 34673, 34674, 34675, 34677, 34679, 34680, 34681, 34682, 34687, 34688, 34689, 34692, 34694, 34695, 34697, 34698, 34700, 34702, 34703, 34704, 34705, 34706, 34708, 34709, 34710, 34712, 34713, 34714, 34715, 34716, 34717, 34718, 34720, 34721, 34722, 34723, 34724, 24013, 24494, 21361, 38886, 36829, 26693, 22260, 21807, 24799, 20026, 28493, 32500, 33479, 33806, 22996, 20255, 20266, 23614, 32428, 26410, 34074, 21619, 30031, 32963, 21890, 39759, 20301, 28205, 35859, 23561, 24944, 21355, 30239, 28201, 34442, 25991, 38395, 32441, 21563, 31283, 32010, 38382, 21985, 32705, 29934, 25373, 34583, 28065, 31389, 25105, 26017, 21351, 25569, 27779, 24043, 21596, 38056, 20044, 27745, 35820, 23627, 26080, 33436, 26791, 21566, 21556, 27595, 27494, 20116, 25410, 21320, 33310, 20237, 20398, 22366, 25098, 38654, 26212, 29289, 21247, 21153, 24735, 35823, 26132, 29081, 26512, 35199, 30802, 30717, 26224, 22075, 21560, 38177, 29306, 34725, 34726, 34727, 34729, 34730, 34734, 34736, 34737, 34738, 34740, 34742, 34743, 34744, 34745, 34747, 34748, 34750, 34751, 34753, 34754, 34755, 34756, 34757, 34759, 34760, 34761, 34764, 34765, 34766, 34767, 34768, 34772, 34773, 34774, 34775, 34776, 34777, 34778, 34780, 34781, 34782, 34783, 34785, 34786, 34787, 34788, 34790, 34791, 34792, 34793, 34795, 34796, 34797, 34799, 34800, 34801, 34802, 34803, 34804, 34805, 34806, 34807, 34808, 34810, 34811, 34812, 34813, 34815, 34816, 34817, 34818, 34820, 34821, 34822, 34823, 34824, 34825, 34827, 34828, 34829, 34830, 34831, 34832, 34833, 34834, 34836, 34839, 34840, 34841, 34842, 34844, 34845, 34846, 34847, 34848, 34851, 31232, 24687, 24076, 24713, 33181, 22805, 24796, 29060, 28911, 28330, 27728, 29312, 27268, 34989, 24109, 20064, 23219, 21916, 38115, 27927, 31995, 38553, 25103, 32454, 30606, 34430, 21283, 38686, 36758, 26247, 23777, 20384, 29421, 19979, 21414, 22799, 21523, 25472, 38184, 20808, 20185, 40092, 32420, 21688, 36132, 34900, 33335, 38386, 28046, 24358, 23244, 26174, 38505, 29616, 29486, 21439, 33146, 39301, 32673, 23466, 38519, 38480, 32447, 30456, 21410, 38262, 39321, 31665, 35140, 28248, 20065, 32724, 31077, 35814, 24819, 21709, 20139, 39033, 24055, 27233, 20687, 21521, 35937, 33831, 30813, 38660, 21066, 21742, 22179, 38144, 28040, 23477, 28102, 26195, 34852, 34853, 34854, 34855, 34856, 34857, 34858, 34859, 34860, 34861, 34862, 34863, 34864, 34865, 34867, 34868, 34869, 34870, 34871, 34872, 34874, 34875, 34877, 34878, 34879, 34881, 34882, 34883, 34886, 34887, 34888, 34889, 34890, 34891, 34894, 34895, 34896, 34897, 34898, 34899, 34901, 34902, 34904, 34906, 34907, 34908, 34909, 34910, 34911, 34912, 34918, 34919, 34922, 34925, 34927, 34929, 34931, 34932, 34933, 34934, 34936, 34937, 34938, 34939, 34940, 34944, 34947, 34950, 34951, 34953, 34954, 34956, 34958, 34959, 34960, 34961, 34963, 34964, 34965, 34967, 34968, 34969, 34970, 34971, 34973, 34974, 34975, 34976, 34977, 34979, 34981, 34982, 34983, 34984, 34985, 34986, 23567, 23389, 26657, 32918, 21880, 31505, 25928, 26964, 20123, 27463, 34638, 38795, 21327, 25375, 25658, 37034, 26012, 32961, 35856, 20889, 26800, 21368, 34809, 25032, 27844, 27899, 35874, 23633, 34218, 33455, 38156, 27427, 36763, 26032, 24571, 24515, 20449, 34885, 26143, 33125, 29481, 24826, 20852, 21009, 22411, 24418, 37026, 34892, 37266, 24184, 26447, 24615, 22995, 20804, 20982, 33016, 21256, 27769, 38596, 29066, 20241, 20462, 32670, 26429, 21957, 38152, 31168, 34966, 32483, 22687, 25100, 38656, 34394, 22040, 39035, 24464, 35768, 33988, 37207, 21465, 26093, 24207, 30044, 24676, 32110, 23167, 32490, 32493, 36713, 21927, 23459, 24748, 26059, 29572, 34988, 34990, 34991, 34992, 34994, 34995, 34996, 34997, 34998, 35e3, 35001, 35002, 35003, 35005, 35006, 35007, 35008, 35011, 35012, 35015, 35016, 35018, 35019, 35020, 35021, 35023, 35024, 35025, 35027, 35030, 35031, 35034, 35035, 35036, 35037, 35038, 35040, 35041, 35046, 35047, 35049, 35050, 35051, 35052, 35053, 35054, 35055, 35058, 35061, 35062, 35063, 35066, 35067, 35069, 35071, 35072, 35073, 35075, 35076, 35077, 35078, 35079, 35080, 35081, 35083, 35084, 35085, 35086, 35087, 35089, 35092, 35093, 35094, 35095, 35096, 35100, 35101, 35102, 35103, 35104, 35106, 35107, 35108, 35110, 35111, 35112, 35113, 35116, 35117, 35118, 35119, 35121, 35122, 35123, 35125, 35127, 36873, 30307, 30505, 32474, 38772, 34203, 23398, 31348, 38634, 34880, 21195, 29071, 24490, 26092, 35810, 23547, 39535, 24033, 27529, 27739, 35757, 35759, 36874, 36805, 21387, 25276, 40486, 40493, 21568, 20011, 33469, 29273, 34460, 23830, 34905, 28079, 38597, 21713, 20122, 35766, 28937, 21693, 38409, 28895, 28153, 30416, 20005, 30740, 34578, 23721, 24310, 35328, 39068, 38414, 28814, 27839, 22852, 25513, 30524, 34893, 28436, 33395, 22576, 29141, 21388, 30746, 38593, 21761, 24422, 28976, 23476, 35866, 39564, 27523, 22830, 40495, 31207, 26472, 25196, 20335, 30113, 32650, 27915, 38451, 27687, 20208, 30162, 20859, 26679, 28478, 36992, 33136, 22934, 29814, 35128, 35129, 35130, 35131, 35132, 35133, 35134, 35135, 35136, 35138, 35139, 35141, 35142, 35143, 35144, 35145, 35146, 35147, 35148, 35149, 35150, 35151, 35152, 35153, 35154, 35155, 35156, 35157, 35158, 35159, 35160, 35161, 35162, 35163, 35164, 35165, 35168, 35169, 35170, 35171, 35172, 35173, 35175, 35176, 35177, 35178, 35179, 35180, 35181, 35182, 35183, 35184, 35185, 35186, 35187, 35188, 35189, 35190, 35191, 35192, 35193, 35194, 35196, 35197, 35198, 35200, 35202, 35204, 35205, 35207, 35208, 35209, 35210, 35211, 35212, 35213, 35214, 35215, 35216, 35217, 35218, 35219, 35220, 35221, 35222, 35223, 35224, 35225, 35226, 35227, 35228, 35229, 35230, 35231, 35232, 35233, 25671, 23591, 36965, 31377, 35875, 23002, 21676, 33280, 33647, 35201, 32768, 26928, 22094, 32822, 29239, 37326, 20918, 20063, 39029, 25494, 19994, 21494, 26355, 33099, 22812, 28082, 19968, 22777, 21307, 25558, 38129, 20381, 20234, 34915, 39056, 22839, 36951, 31227, 20202, 33008, 30097, 27778, 23452, 23016, 24413, 26885, 34433, 20506, 24050, 20057, 30691, 20197, 33402, 25233, 26131, 37009, 23673, 20159, 24441, 33222, 36920, 32900, 30123, 20134, 35028, 24847, 27589, 24518, 20041, 30410, 28322, 35811, 35758, 35850, 35793, 24322, 32764, 32716, 32462, 33589, 33643, 22240, 27575, 38899, 38452, 23035, 21535, 38134, 28139, 23493, 39278, 23609, 24341, 38544, 35234, 35235, 35236, 35237, 35238, 35239, 35240, 35241, 35242, 35243, 35244, 35245, 35246, 35247, 35248, 35249, 35250, 35251, 35252, 35253, 35254, 35255, 35256, 35257, 35258, 35259, 35260, 35261, 35262, 35263, 35264, 35267, 35277, 35283, 35284, 35285, 35287, 35288, 35289, 35291, 35293, 35295, 35296, 35297, 35298, 35300, 35303, 35304, 35305, 35306, 35308, 35309, 35310, 35312, 35313, 35314, 35316, 35317, 35318, 35319, 35320, 35321, 35322, 35323, 35324, 35325, 35326, 35327, 35329, 35330, 35331, 35332, 35333, 35334, 35336, 35337, 35338, 35339, 35340, 35341, 35342, 35343, 35344, 35345, 35346, 35347, 35348, 35349, 35350, 35351, 35352, 35353, 35354, 35355, 35356, 35357, 21360, 33521, 27185, 23156, 40560, 24212, 32552, 33721, 33828, 33829, 33639, 34631, 36814, 36194, 30408, 24433, 39062, 30828, 26144, 21727, 25317, 20323, 33219, 30152, 24248, 38605, 36362, 34553, 21647, 27891, 28044, 27704, 24703, 21191, 29992, 24189, 20248, 24736, 24551, 23588, 30001, 37038, 38080, 29369, 27833, 28216, 37193, 26377, 21451, 21491, 20305, 37321, 35825, 21448, 24188, 36802, 28132, 20110, 30402, 27014, 34398, 24858, 33286, 20313, 20446, 36926, 40060, 24841, 28189, 28180, 38533, 20104, 23089, 38632, 19982, 23679, 31161, 23431, 35821, 32701, 29577, 22495, 33419, 37057, 21505, 36935, 21947, 23786, 24481, 24840, 27442, 29425, 32946, 35465, 35358, 35359, 35360, 35361, 35362, 35363, 35364, 35365, 35366, 35367, 35368, 35369, 35370, 35371, 35372, 35373, 35374, 35375, 35376, 35377, 35378, 35379, 35380, 35381, 35382, 35383, 35384, 35385, 35386, 35387, 35388, 35389, 35391, 35392, 35393, 35394, 35395, 35396, 35397, 35398, 35399, 35401, 35402, 35403, 35404, 35405, 35406, 35407, 35408, 35409, 35410, 35411, 35412, 35413, 35414, 35415, 35416, 35417, 35418, 35419, 35420, 35421, 35422, 35423, 35424, 35425, 35426, 35427, 35428, 35429, 35430, 35431, 35432, 35433, 35434, 35435, 35436, 35437, 35438, 35439, 35440, 35441, 35442, 35443, 35444, 35445, 35446, 35447, 35448, 35450, 35451, 35452, 35453, 35454, 35455, 35456, 28020, 23507, 35029, 39044, 35947, 39533, 40499, 28170, 20900, 20803, 22435, 34945, 21407, 25588, 36757, 22253, 21592, 22278, 29503, 28304, 32536, 36828, 33489, 24895, 24616, 38498, 26352, 32422, 36234, 36291, 38053, 23731, 31908, 26376, 24742, 38405, 32792, 20113, 37095, 21248, 38504, 20801, 36816, 34164, 37213, 26197, 38901, 23381, 21277, 30776, 26434, 26685, 21705, 28798, 23472, 36733, 20877, 22312, 21681, 25874, 26242, 36190, 36163, 33039, 33900, 36973, 31967, 20991, 34299, 26531, 26089, 28577, 34468, 36481, 22122, 36896, 30338, 28790, 29157, 36131, 25321, 21017, 27901, 36156, 24590, 22686, 24974, 26366, 36192, 25166, 21939, 28195, 26413, 36711, 35457, 35458, 35459, 35460, 35461, 35462, 35463, 35464, 35467, 35468, 35469, 35470, 35471, 35472, 35473, 35474, 35476, 35477, 35478, 35479, 35480, 35481, 35482, 35483, 35484, 35485, 35486, 35487, 35488, 35489, 35490, 35491, 35492, 35493, 35494, 35495, 35496, 35497, 35498, 35499, 35500, 35501, 35502, 35503, 35504, 35505, 35506, 35507, 35508, 35509, 35510, 35511, 35512, 35513, 35514, 35515, 35516, 35517, 35518, 35519, 35520, 35521, 35522, 35523, 35524, 35525, 35526, 35527, 35528, 35529, 35530, 35531, 35532, 35533, 35534, 35535, 35536, 35537, 35538, 35539, 35540, 35541, 35542, 35543, 35544, 35545, 35546, 35547, 35548, 35549, 35550, 35551, 35552, 35553, 35554, 35555, 38113, 38392, 30504, 26629, 27048, 21643, 20045, 28856, 35784, 25688, 25995, 23429, 31364, 20538, 23528, 30651, 27617, 35449, 31896, 27838, 30415, 26025, 36759, 23853, 23637, 34360, 26632, 21344, 25112, 31449, 28251, 32509, 27167, 31456, 24432, 28467, 24352, 25484, 28072, 26454, 19976, 24080, 36134, 20183, 32960, 30260, 38556, 25307, 26157, 25214, 27836, 36213, 29031, 32617, 20806, 32903, 21484, 36974, 25240, 21746, 34544, 36761, 32773, 38167, 34071, 36825, 27993, 29645, 26015, 30495, 29956, 30759, 33275, 36126, 38024, 20390, 26517, 30137, 35786, 38663, 25391, 38215, 38453, 33976, 25379, 30529, 24449, 29424, 20105, 24596, 25972, 25327, 27491, 25919, 35556, 35557, 35558, 35559, 35560, 35561, 35562, 35563, 35564, 35565, 35566, 35567, 35568, 35569, 35570, 35571, 35572, 35573, 35574, 35575, 35576, 35577, 35578, 35579, 35580, 35581, 35582, 35583, 35584, 35585, 35586, 35587, 35588, 35589, 35590, 35592, 35593, 35594, 35595, 35596, 35597, 35598, 35599, 35600, 35601, 35602, 35603, 35604, 35605, 35606, 35607, 35608, 35609, 35610, 35611, 35612, 35613, 35614, 35615, 35616, 35617, 35618, 35619, 35620, 35621, 35623, 35624, 35625, 35626, 35627, 35628, 35629, 35630, 35631, 35632, 35633, 35634, 35635, 35636, 35637, 35638, 35639, 35640, 35641, 35642, 35643, 35644, 35645, 35646, 35647, 35648, 35649, 35650, 35651, 35652, 35653, 24103, 30151, 37073, 35777, 33437, 26525, 25903, 21553, 34584, 30693, 32930, 33026, 27713, 20043, 32455, 32844, 30452, 26893, 27542, 25191, 20540, 20356, 22336, 25351, 27490, 36286, 21482, 26088, 32440, 24535, 25370, 25527, 33267, 33268, 32622, 24092, 23769, 21046, 26234, 31209, 31258, 36136, 28825, 30164, 28382, 27835, 31378, 20013, 30405, 24544, 38047, 34935, 32456, 31181, 32959, 37325, 20210, 20247, 33311, 21608, 24030, 27954, 35788, 31909, 36724, 32920, 24090, 21650, 30385, 23449, 26172, 39588, 29664, 26666, 34523, 26417, 29482, 35832, 35803, 36880, 31481, 28891, 29038, 25284, 30633, 22065, 20027, 33879, 26609, 21161, 34496, 36142, 38136, 31569, 35654, 35655, 35656, 35657, 35658, 35659, 35660, 35661, 35662, 35663, 35664, 35665, 35666, 35667, 35668, 35669, 35670, 35671, 35672, 35673, 35674, 35675, 35676, 35677, 35678, 35679, 35680, 35681, 35682, 35683, 35684, 35685, 35687, 35688, 35689, 35690, 35691, 35693, 35694, 35695, 35696, 35697, 35698, 35699, 35700, 35701, 35702, 35703, 35704, 35705, 35706, 35707, 35708, 35709, 35710, 35711, 35712, 35713, 35714, 35715, 35716, 35717, 35718, 35719, 35720, 35721, 35722, 35723, 35724, 35725, 35726, 35727, 35728, 35729, 35730, 35731, 35732, 35733, 35734, 35735, 35736, 35737, 35738, 35739, 35740, 35741, 35742, 35743, 35756, 35761, 35771, 35783, 35792, 35818, 35849, 35870, 20303, 27880, 31069, 39547, 25235, 29226, 25341, 19987, 30742, 36716, 25776, 36186, 31686, 26729, 24196, 35013, 22918, 25758, 22766, 29366, 26894, 38181, 36861, 36184, 22368, 32512, 35846, 20934, 25417, 25305, 21331, 26700, 29730, 33537, 37196, 21828, 30528, 28796, 27978, 20857, 21672, 36164, 23039, 28363, 28100, 23388, 32043, 20180, 31869, 28371, 23376, 33258, 28173, 23383, 39683, 26837, 36394, 23447, 32508, 24635, 32437, 37049, 36208, 22863, 25549, 31199, 36275, 21330, 26063, 31062, 35781, 38459, 32452, 38075, 32386, 22068, 37257, 26368, 32618, 23562, 36981, 26152, 24038, 20304, 26590, 20570, 20316, 22352, 24231, 59408, 59409, 59410, 59411, 59412, 35896, 35897, 35898, 35899, 35900, 35901, 35902, 35903, 35904, 35906, 35907, 35908, 35909, 35912, 35914, 35915, 35917, 35918, 35919, 35920, 35921, 35922, 35923, 35924, 35926, 35927, 35928, 35929, 35931, 35932, 35933, 35934, 35935, 35936, 35939, 35940, 35941, 35942, 35943, 35944, 35945, 35948, 35949, 35950, 35951, 35952, 35953, 35954, 35956, 35957, 35958, 35959, 35963, 35964, 35965, 35966, 35967, 35968, 35969, 35971, 35972, 35974, 35975, 35976, 35979, 35981, 35982, 35983, 35984, 35985, 35986, 35987, 35989, 35990, 35991, 35993, 35994, 35995, 35996, 35997, 35998, 35999, 36e3, 36001, 36002, 36003, 36004, 36005, 36006, 36007, 36008, 36009, 36010, 36011, 36012, 36013, 20109, 19980, 20800, 19984, 24319, 21317, 19989, 20120, 19998, 39730, 23404, 22121, 20008, 31162, 20031, 21269, 20039, 22829, 29243, 21358, 27664, 22239, 32996, 39319, 27603, 30590, 40727, 20022, 20127, 40720, 20060, 20073, 20115, 33416, 23387, 21868, 22031, 20164, 21389, 21405, 21411, 21413, 21422, 38757, 36189, 21274, 21493, 21286, 21294, 21310, 36188, 21350, 21347, 20994, 21e3, 21006, 21037, 21043, 21055, 21056, 21068, 21086, 21089, 21084, 33967, 21117, 21122, 21121, 21136, 21139, 20866, 32596, 20155, 20163, 20169, 20162, 20200, 20193, 20203, 20190, 20251, 20211, 20258, 20324, 20213, 20261, 20263, 20233, 20267, 20318, 20327, 25912, 20314, 20317, 36014, 36015, 36016, 36017, 36018, 36019, 36020, 36021, 36022, 36023, 36024, 36025, 36026, 36027, 36028, 36029, 36030, 36031, 36032, 36033, 36034, 36035, 36036, 36037, 36038, 36039, 36040, 36041, 36042, 36043, 36044, 36045, 36046, 36047, 36048, 36049, 36050, 36051, 36052, 36053, 36054, 36055, 36056, 36057, 36058, 36059, 36060, 36061, 36062, 36063, 36064, 36065, 36066, 36067, 36068, 36069, 36070, 36071, 36072, 36073, 36074, 36075, 36076, 36077, 36078, 36079, 36080, 36081, 36082, 36083, 36084, 36085, 36086, 36087, 36088, 36089, 36090, 36091, 36092, 36093, 36094, 36095, 36096, 36097, 36098, 36099, 36100, 36101, 36102, 36103, 36104, 36105, 36106, 36107, 36108, 36109, 20319, 20311, 20274, 20285, 20342, 20340, 20369, 20361, 20355, 20367, 20350, 20347, 20394, 20348, 20396, 20372, 20454, 20456, 20458, 20421, 20442, 20451, 20444, 20433, 20447, 20472, 20521, 20556, 20467, 20524, 20495, 20526, 20525, 20478, 20508, 20492, 20517, 20520, 20606, 20547, 20565, 20552, 20558, 20588, 20603, 20645, 20647, 20649, 20666, 20694, 20742, 20717, 20716, 20710, 20718, 20743, 20747, 20189, 27709, 20312, 20325, 20430, 40864, 27718, 31860, 20846, 24061, 40649, 39320, 20865, 22804, 21241, 21261, 35335, 21264, 20971, 22809, 20821, 20128, 20822, 20147, 34926, 34980, 20149, 33044, 35026, 31104, 23348, 34819, 32696, 20907, 20913, 20925, 20924, 36110, 36111, 36112, 36113, 36114, 36115, 36116, 36117, 36118, 36119, 36120, 36121, 36122, 36123, 36124, 36128, 36177, 36178, 36183, 36191, 36197, 36200, 36201, 36202, 36204, 36206, 36207, 36209, 36210, 36216, 36217, 36218, 36219, 36220, 36221, 36222, 36223, 36224, 36226, 36227, 36230, 36231, 36232, 36233, 36236, 36237, 36238, 36239, 36240, 36242, 36243, 36245, 36246, 36247, 36248, 36249, 36250, 36251, 36252, 36253, 36254, 36256, 36257, 36258, 36260, 36261, 36262, 36263, 36264, 36265, 36266, 36267, 36268, 36269, 36270, 36271, 36272, 36274, 36278, 36279, 36281, 36283, 36285, 36288, 36289, 36290, 36293, 36295, 36296, 36297, 36298, 36301, 36304, 36306, 36307, 36308, 20935, 20886, 20898, 20901, 35744, 35750, 35751, 35754, 35764, 35765, 35767, 35778, 35779, 35787, 35791, 35790, 35794, 35795, 35796, 35798, 35800, 35801, 35804, 35807, 35808, 35812, 35816, 35817, 35822, 35824, 35827, 35830, 35833, 35836, 35839, 35840, 35842, 35844, 35847, 35852, 35855, 35857, 35858, 35860, 35861, 35862, 35865, 35867, 35864, 35869, 35871, 35872, 35873, 35877, 35879, 35882, 35883, 35886, 35887, 35890, 35891, 35893, 35894, 21353, 21370, 38429, 38434, 38433, 38449, 38442, 38461, 38460, 38466, 38473, 38484, 38495, 38503, 38508, 38514, 38516, 38536, 38541, 38551, 38576, 37015, 37019, 37021, 37017, 37036, 37025, 37044, 37043, 37046, 37050, 36309, 36312, 36313, 36316, 36320, 36321, 36322, 36325, 36326, 36327, 36329, 36333, 36334, 36336, 36337, 36338, 36340, 36342, 36348, 36350, 36351, 36352, 36353, 36354, 36355, 36356, 36358, 36359, 36360, 36363, 36365, 36366, 36368, 36369, 36370, 36371, 36373, 36374, 36375, 36376, 36377, 36378, 36379, 36380, 36384, 36385, 36388, 36389, 36390, 36391, 36392, 36395, 36397, 36400, 36402, 36403, 36404, 36406, 36407, 36408, 36411, 36412, 36414, 36415, 36419, 36421, 36422, 36428, 36429, 36430, 36431, 36432, 36435, 36436, 36437, 36438, 36439, 36440, 36442, 36443, 36444, 36445, 36446, 36447, 36448, 36449, 36450, 36451, 36452, 36453, 36455, 36456, 36458, 36459, 36462, 36465, 37048, 37040, 37071, 37061, 37054, 37072, 37060, 37063, 37075, 37094, 37090, 37084, 37079, 37083, 37099, 37103, 37118, 37124, 37154, 37150, 37155, 37169, 37167, 37177, 37187, 37190, 21005, 22850, 21154, 21164, 21165, 21182, 21759, 21200, 21206, 21232, 21471, 29166, 30669, 24308, 20981, 20988, 39727, 21430, 24321, 30042, 24047, 22348, 22441, 22433, 22654, 22716, 22725, 22737, 22313, 22316, 22314, 22323, 22329, 22318, 22319, 22364, 22331, 22338, 22377, 22405, 22379, 22406, 22396, 22395, 22376, 22381, 22390, 22387, 22445, 22436, 22412, 22450, 22479, 22439, 22452, 22419, 22432, 22485, 22488, 22490, 22489, 22482, 22456, 22516, 22511, 22520, 22500, 22493, 36467, 36469, 36471, 36472, 36473, 36474, 36475, 36477, 36478, 36480, 36482, 36483, 36484, 36486, 36488, 36489, 36490, 36491, 36492, 36493, 36494, 36497, 36498, 36499, 36501, 36502, 36503, 36504, 36505, 36506, 36507, 36509, 36511, 36512, 36513, 36514, 36515, 36516, 36517, 36518, 36519, 36520, 36521, 36522, 36525, 36526, 36528, 36529, 36531, 36532, 36533, 36534, 36535, 36536, 36537, 36539, 36540, 36541, 36542, 36543, 36544, 36545, 36546, 36547, 36548, 36549, 36550, 36551, 36552, 36553, 36554, 36555, 36556, 36557, 36559, 36560, 36561, 36562, 36563, 36564, 36565, 36566, 36567, 36568, 36569, 36570, 36571, 36572, 36573, 36574, 36575, 36576, 36577, 36578, 36579, 36580, 22539, 22541, 22525, 22509, 22528, 22558, 22553, 22596, 22560, 22629, 22636, 22657, 22665, 22682, 22656, 39336, 40729, 25087, 33401, 33405, 33407, 33423, 33418, 33448, 33412, 33422, 33425, 33431, 33433, 33451, 33464, 33470, 33456, 33480, 33482, 33507, 33432, 33463, 33454, 33483, 33484, 33473, 33449, 33460, 33441, 33450, 33439, 33476, 33486, 33444, 33505, 33545, 33527, 33508, 33551, 33543, 33500, 33524, 33490, 33496, 33548, 33531, 33491, 33553, 33562, 33542, 33556, 33557, 33504, 33493, 33564, 33617, 33627, 33628, 33544, 33682, 33596, 33588, 33585, 33691, 33630, 33583, 33615, 33607, 33603, 33631, 33600, 33559, 33632, 33581, 33594, 33587, 33638, 33637, 36581, 36582, 36583, 36584, 36585, 36586, 36587, 36588, 36589, 36590, 36591, 36592, 36593, 36594, 36595, 36596, 36597, 36598, 36599, 36600, 36601, 36602, 36603, 36604, 36605, 36606, 36607, 36608, 36609, 36610, 36611, 36612, 36613, 36614, 36615, 36616, 36617, 36618, 36619, 36620, 36621, 36622, 36623, 36624, 36625, 36626, 36627, 36628, 36629, 36630, 36631, 36632, 36633, 36634, 36635, 36636, 36637, 36638, 36639, 36640, 36641, 36642, 36643, 36644, 36645, 36646, 36647, 36648, 36649, 36650, 36651, 36652, 36653, 36654, 36655, 36656, 36657, 36658, 36659, 36660, 36661, 36662, 36663, 36664, 36665, 36666, 36667, 36668, 36669, 36670, 36671, 36672, 36673, 36674, 36675, 36676, 33640, 33563, 33641, 33644, 33642, 33645, 33646, 33712, 33656, 33715, 33716, 33696, 33706, 33683, 33692, 33669, 33660, 33718, 33705, 33661, 33720, 33659, 33688, 33694, 33704, 33722, 33724, 33729, 33793, 33765, 33752, 22535, 33816, 33803, 33757, 33789, 33750, 33820, 33848, 33809, 33798, 33748, 33759, 33807, 33795, 33784, 33785, 33770, 33733, 33728, 33830, 33776, 33761, 33884, 33873, 33882, 33881, 33907, 33927, 33928, 33914, 33929, 33912, 33852, 33862, 33897, 33910, 33932, 33934, 33841, 33901, 33985, 33997, 34e3, 34022, 33981, 34003, 33994, 33983, 33978, 34016, 33953, 33977, 33972, 33943, 34021, 34019, 34060, 29965, 34104, 34032, 34105, 34079, 34106, 36677, 36678, 36679, 36680, 36681, 36682, 36683, 36684, 36685, 36686, 36687, 36688, 36689, 36690, 36691, 36692, 36693, 36694, 36695, 36696, 36697, 36698, 36699, 36700, 36701, 36702, 36703, 36704, 36705, 36706, 36707, 36708, 36709, 36714, 36736, 36748, 36754, 36765, 36768, 36769, 36770, 36772, 36773, 36774, 36775, 36778, 36780, 36781, 36782, 36783, 36786, 36787, 36788, 36789, 36791, 36792, 36794, 36795, 36796, 36799, 36800, 36803, 36806, 36809, 36810, 36811, 36812, 36813, 36815, 36818, 36822, 36823, 36826, 36832, 36833, 36835, 36839, 36844, 36847, 36849, 36850, 36852, 36853, 36854, 36858, 36859, 36860, 36862, 36863, 36871, 36872, 36876, 36878, 36883, 36885, 36888, 34134, 34107, 34047, 34044, 34137, 34120, 34152, 34148, 34142, 34170, 30626, 34115, 34162, 34171, 34212, 34216, 34183, 34191, 34169, 34222, 34204, 34181, 34233, 34231, 34224, 34259, 34241, 34268, 34303, 34343, 34309, 34345, 34326, 34364, 24318, 24328, 22844, 22849, 32823, 22869, 22874, 22872, 21263, 23586, 23589, 23596, 23604, 25164, 25194, 25247, 25275, 25290, 25306, 25303, 25326, 25378, 25334, 25401, 25419, 25411, 25517, 25590, 25457, 25466, 25486, 25524, 25453, 25516, 25482, 25449, 25518, 25532, 25586, 25592, 25568, 25599, 25540, 25566, 25550, 25682, 25542, 25534, 25669, 25665, 25611, 25627, 25632, 25612, 25638, 25633, 25694, 25732, 25709, 25750, 36889, 36892, 36899, 36900, 36901, 36903, 36904, 36905, 36906, 36907, 36908, 36912, 36913, 36914, 36915, 36916, 36919, 36921, 36922, 36925, 36927, 36928, 36931, 36933, 36934, 36936, 36937, 36938, 36939, 36940, 36942, 36948, 36949, 36950, 36953, 36954, 36956, 36957, 36958, 36959, 36960, 36961, 36964, 36966, 36967, 36969, 36970, 36971, 36972, 36975, 36976, 36977, 36978, 36979, 36982, 36983, 36984, 36985, 36986, 36987, 36988, 36990, 36993, 36996, 36997, 36998, 36999, 37001, 37002, 37004, 37005, 37006, 37007, 37008, 37010, 37012, 37014, 37016, 37018, 37020, 37022, 37023, 37024, 37028, 37029, 37031, 37032, 37033, 37035, 37037, 37042, 37047, 37052, 37053, 37055, 37056, 25722, 25783, 25784, 25753, 25786, 25792, 25808, 25815, 25828, 25826, 25865, 25893, 25902, 24331, 24530, 29977, 24337, 21343, 21489, 21501, 21481, 21480, 21499, 21522, 21526, 21510, 21579, 21586, 21587, 21588, 21590, 21571, 21537, 21591, 21593, 21539, 21554, 21634, 21652, 21623, 21617, 21604, 21658, 21659, 21636, 21622, 21606, 21661, 21712, 21677, 21698, 21684, 21714, 21671, 21670, 21715, 21716, 21618, 21667, 21717, 21691, 21695, 21708, 21721, 21722, 21724, 21673, 21674, 21668, 21725, 21711, 21726, 21787, 21735, 21792, 21757, 21780, 21747, 21794, 21795, 21775, 21777, 21799, 21802, 21863, 21903, 21941, 21833, 21869, 21825, 21845, 21823, 21840, 21820, 37058, 37059, 37062, 37064, 37065, 37067, 37068, 37069, 37074, 37076, 37077, 37078, 37080, 37081, 37082, 37086, 37087, 37088, 37091, 37092, 37093, 37097, 37098, 37100, 37102, 37104, 37105, 37106, 37107, 37109, 37110, 37111, 37113, 37114, 37115, 37116, 37119, 37120, 37121, 37123, 37125, 37126, 37127, 37128, 37129, 37130, 37131, 37132, 37133, 37134, 37135, 37136, 37137, 37138, 37139, 37140, 37141, 37142, 37143, 37144, 37146, 37147, 37148, 37149, 37151, 37152, 37153, 37156, 37157, 37158, 37159, 37160, 37161, 37162, 37163, 37164, 37165, 37166, 37168, 37170, 37171, 37172, 37173, 37174, 37175, 37176, 37178, 37179, 37180, 37181, 37182, 37183, 37184, 37185, 37186, 37188, 21815, 21846, 21877, 21878, 21879, 21811, 21808, 21852, 21899, 21970, 21891, 21937, 21945, 21896, 21889, 21919, 21886, 21974, 21905, 21883, 21983, 21949, 21950, 21908, 21913, 21994, 22007, 21961, 22047, 21969, 21995, 21996, 21972, 21990, 21981, 21956, 21999, 21989, 22002, 22003, 21964, 21965, 21992, 22005, 21988, 36756, 22046, 22024, 22028, 22017, 22052, 22051, 22014, 22016, 22055, 22061, 22104, 22073, 22103, 22060, 22093, 22114, 22105, 22108, 22092, 22100, 22150, 22116, 22129, 22123, 22139, 22140, 22149, 22163, 22191, 22228, 22231, 22237, 22241, 22261, 22251, 22265, 22271, 22276, 22282, 22281, 22300, 24079, 24089, 24084, 24081, 24113, 24123, 24124, 37189, 37191, 37192, 37201, 37203, 37204, 37205, 37206, 37208, 37209, 37211, 37212, 37215, 37216, 37222, 37223, 37224, 37227, 37229, 37235, 37242, 37243, 37244, 37248, 37249, 37250, 37251, 37252, 37254, 37256, 37258, 37262, 37263, 37267, 37268, 37269, 37270, 37271, 37272, 37273, 37276, 37277, 37278, 37279, 37280, 37281, 37284, 37285, 37286, 37287, 37288, 37289, 37291, 37292, 37296, 37297, 37298, 37299, 37302, 37303, 37304, 37305, 37307, 37308, 37309, 37310, 37311, 37312, 37313, 37314, 37315, 37316, 37317, 37318, 37320, 37323, 37328, 37330, 37331, 37332, 37333, 37334, 37335, 37336, 37337, 37338, 37339, 37341, 37342, 37343, 37344, 37345, 37346, 37347, 37348, 37349, 24119, 24132, 24148, 24155, 24158, 24161, 23692, 23674, 23693, 23696, 23702, 23688, 23704, 23705, 23697, 23706, 23708, 23733, 23714, 23741, 23724, 23723, 23729, 23715, 23745, 23735, 23748, 23762, 23780, 23755, 23781, 23810, 23811, 23847, 23846, 23854, 23844, 23838, 23814, 23835, 23896, 23870, 23860, 23869, 23916, 23899, 23919, 23901, 23915, 23883, 23882, 23913, 23924, 23938, 23961, 23965, 35955, 23991, 24005, 24435, 24439, 24450, 24455, 24457, 24460, 24469, 24473, 24476, 24488, 24493, 24501, 24508, 34914, 24417, 29357, 29360, 29364, 29367, 29368, 29379, 29377, 29390, 29389, 29394, 29416, 29423, 29417, 29426, 29428, 29431, 29441, 29427, 29443, 29434, 37350, 37351, 37352, 37353, 37354, 37355, 37356, 37357, 37358, 37359, 37360, 37361, 37362, 37363, 37364, 37365, 37366, 37367, 37368, 37369, 37370, 37371, 37372, 37373, 37374, 37375, 37376, 37377, 37378, 37379, 37380, 37381, 37382, 37383, 37384, 37385, 37386, 37387, 37388, 37389, 37390, 37391, 37392, 37393, 37394, 37395, 37396, 37397, 37398, 37399, 37400, 37401, 37402, 37403, 37404, 37405, 37406, 37407, 37408, 37409, 37410, 37411, 37412, 37413, 37414, 37415, 37416, 37417, 37418, 37419, 37420, 37421, 37422, 37423, 37424, 37425, 37426, 37427, 37428, 37429, 37430, 37431, 37432, 37433, 37434, 37435, 37436, 37437, 37438, 37439, 37440, 37441, 37442, 37443, 37444, 37445, 29435, 29463, 29459, 29473, 29450, 29470, 29469, 29461, 29474, 29497, 29477, 29484, 29496, 29489, 29520, 29517, 29527, 29536, 29548, 29551, 29566, 33307, 22821, 39143, 22820, 22786, 39267, 39271, 39272, 39273, 39274, 39275, 39276, 39284, 39287, 39293, 39296, 39300, 39303, 39306, 39309, 39312, 39313, 39315, 39316, 39317, 24192, 24209, 24203, 24214, 24229, 24224, 24249, 24245, 24254, 24243, 36179, 24274, 24273, 24283, 24296, 24298, 33210, 24516, 24521, 24534, 24527, 24579, 24558, 24580, 24545, 24548, 24574, 24581, 24582, 24554, 24557, 24568, 24601, 24629, 24614, 24603, 24591, 24589, 24617, 24619, 24586, 24639, 24609, 24696, 24697, 24699, 24698, 24642, 37446, 37447, 37448, 37449, 37450, 37451, 37452, 37453, 37454, 37455, 37456, 37457, 37458, 37459, 37460, 37461, 37462, 37463, 37464, 37465, 37466, 37467, 37468, 37469, 37470, 37471, 37472, 37473, 37474, 37475, 37476, 37477, 37478, 37479, 37480, 37481, 37482, 37483, 37484, 37485, 37486, 37487, 37488, 37489, 37490, 37491, 37493, 37494, 37495, 37496, 37497, 37498, 37499, 37500, 37501, 37502, 37503, 37504, 37505, 37506, 37507, 37508, 37509, 37510, 37511, 37512, 37513, 37514, 37515, 37516, 37517, 37519, 37520, 37521, 37522, 37523, 37524, 37525, 37526, 37527, 37528, 37529, 37530, 37531, 37532, 37533, 37534, 37535, 37536, 37537, 37538, 37539, 37540, 37541, 37542, 37543, 24682, 24701, 24726, 24730, 24749, 24733, 24707, 24722, 24716, 24731, 24812, 24763, 24753, 24797, 24792, 24774, 24794, 24756, 24864, 24870, 24853, 24867, 24820, 24832, 24846, 24875, 24906, 24949, 25004, 24980, 24999, 25015, 25044, 25077, 24541, 38579, 38377, 38379, 38385, 38387, 38389, 38390, 38396, 38398, 38403, 38404, 38406, 38408, 38410, 38411, 38412, 38413, 38415, 38418, 38421, 38422, 38423, 38425, 38426, 20012, 29247, 25109, 27701, 27732, 27740, 27722, 27811, 27781, 27792, 27796, 27788, 27752, 27753, 27764, 27766, 27782, 27817, 27856, 27860, 27821, 27895, 27896, 27889, 27863, 27826, 27872, 27862, 27898, 27883, 27886, 27825, 27859, 27887, 27902, 37544, 37545, 37546, 37547, 37548, 37549, 37551, 37552, 37553, 37554, 37555, 37556, 37557, 37558, 37559, 37560, 37561, 37562, 37563, 37564, 37565, 37566, 37567, 37568, 37569, 37570, 37571, 37572, 37573, 37574, 37575, 37577, 37578, 37579, 37580, 37581, 37582, 37583, 37584, 37585, 37586, 37587, 37588, 37589, 37590, 37591, 37592, 37593, 37594, 37595, 37596, 37597, 37598, 37599, 37600, 37601, 37602, 37603, 37604, 37605, 37606, 37607, 37608, 37609, 37610, 37611, 37612, 37613, 37614, 37615, 37616, 37617, 37618, 37619, 37620, 37621, 37622, 37623, 37624, 37625, 37626, 37627, 37628, 37629, 37630, 37631, 37632, 37633, 37634, 37635, 37636, 37637, 37638, 37639, 37640, 37641, 27961, 27943, 27916, 27971, 27976, 27911, 27908, 27929, 27918, 27947, 27981, 27950, 27957, 27930, 27983, 27986, 27988, 27955, 28049, 28015, 28062, 28064, 27998, 28051, 28052, 27996, 28e3, 28028, 28003, 28186, 28103, 28101, 28126, 28174, 28095, 28128, 28177, 28134, 28125, 28121, 28182, 28075, 28172, 28078, 28203, 28270, 28238, 28267, 28338, 28255, 28294, 28243, 28244, 28210, 28197, 28228, 28383, 28337, 28312, 28384, 28461, 28386, 28325, 28327, 28349, 28347, 28343, 28375, 28340, 28367, 28303, 28354, 28319, 28514, 28486, 28487, 28452, 28437, 28409, 28463, 28470, 28491, 28532, 28458, 28425, 28457, 28553, 28557, 28556, 28536, 28530, 28540, 28538, 28625, 37642, 37643, 37644, 37645, 37646, 37647, 37648, 37649, 37650, 37651, 37652, 37653, 37654, 37655, 37656, 37657, 37658, 37659, 37660, 37661, 37662, 37663, 37664, 37665, 37666, 37667, 37668, 37669, 37670, 37671, 37672, 37673, 37674, 37675, 37676, 37677, 37678, 37679, 37680, 37681, 37682, 37683, 37684, 37685, 37686, 37687, 37688, 37689, 37690, 37691, 37692, 37693, 37695, 37696, 37697, 37698, 37699, 37700, 37701, 37702, 37703, 37704, 37705, 37706, 37707, 37708, 37709, 37710, 37711, 37712, 37713, 37714, 37715, 37716, 37717, 37718, 37719, 37720, 37721, 37722, 37723, 37724, 37725, 37726, 37727, 37728, 37729, 37730, 37731, 37732, 37733, 37734, 37735, 37736, 37737, 37739, 28617, 28583, 28601, 28598, 28610, 28641, 28654, 28638, 28640, 28655, 28698, 28707, 28699, 28729, 28725, 28751, 28766, 23424, 23428, 23445, 23443, 23461, 23480, 29999, 39582, 25652, 23524, 23534, 35120, 23536, 36423, 35591, 36790, 36819, 36821, 36837, 36846, 36836, 36841, 36838, 36851, 36840, 36869, 36868, 36875, 36902, 36881, 36877, 36886, 36897, 36917, 36918, 36909, 36911, 36932, 36945, 36946, 36944, 36968, 36952, 36962, 36955, 26297, 36980, 36989, 36994, 37e3, 36995, 37003, 24400, 24407, 24406, 24408, 23611, 21675, 23632, 23641, 23409, 23651, 23654, 32700, 24362, 24361, 24365, 33396, 24380, 39739, 23662, 22913, 22915, 22925, 22953, 22954, 22947, 37740, 37741, 37742, 37743, 37744, 37745, 37746, 37747, 37748, 37749, 37750, 37751, 37752, 37753, 37754, 37755, 37756, 37757, 37758, 37759, 37760, 37761, 37762, 37763, 37764, 37765, 37766, 37767, 37768, 37769, 37770, 37771, 37772, 37773, 37774, 37776, 37777, 37778, 37779, 37780, 37781, 37782, 37783, 37784, 37785, 37786, 37787, 37788, 37789, 37790, 37791, 37792, 37793, 37794, 37795, 37796, 37797, 37798, 37799, 37800, 37801, 37802, 37803, 37804, 37805, 37806, 37807, 37808, 37809, 37810, 37811, 37812, 37813, 37814, 37815, 37816, 37817, 37818, 37819, 37820, 37821, 37822, 37823, 37824, 37825, 37826, 37827, 37828, 37829, 37830, 37831, 37832, 37833, 37835, 37836, 37837, 22935, 22986, 22955, 22942, 22948, 22994, 22962, 22959, 22999, 22974, 23045, 23046, 23005, 23048, 23011, 23e3, 23033, 23052, 23049, 23090, 23092, 23057, 23075, 23059, 23104, 23143, 23114, 23125, 23100, 23138, 23157, 33004, 23210, 23195, 23159, 23162, 23230, 23275, 23218, 23250, 23252, 23224, 23264, 23267, 23281, 23254, 23270, 23256, 23260, 23305, 23319, 23318, 23346, 23351, 23360, 23573, 23580, 23386, 23397, 23411, 23377, 23379, 23394, 39541, 39543, 39544, 39546, 39551, 39549, 39552, 39553, 39557, 39560, 39562, 39568, 39570, 39571, 39574, 39576, 39579, 39580, 39581, 39583, 39584, 39586, 39587, 39589, 39591, 32415, 32417, 32419, 32421, 32424, 32425, 37838, 37839, 37840, 37841, 37842, 37843, 37844, 37845, 37847, 37848, 37849, 37850, 37851, 37852, 37853, 37854, 37855, 37856, 37857, 37858, 37859, 37860, 37861, 37862, 37863, 37864, 37865, 37866, 37867, 37868, 37869, 37870, 37871, 37872, 37873, 37874, 37875, 37876, 37877, 37878, 37879, 37880, 37881, 37882, 37883, 37884, 37885, 37886, 37887, 37888, 37889, 37890, 37891, 37892, 37893, 37894, 37895, 37896, 37897, 37898, 37899, 37900, 37901, 37902, 37903, 37904, 37905, 37906, 37907, 37908, 37909, 37910, 37911, 37912, 37913, 37914, 37915, 37916, 37917, 37918, 37919, 37920, 37921, 37922, 37923, 37924, 37925, 37926, 37927, 37928, 37929, 37930, 37931, 37932, 37933, 37934, 32429, 32432, 32446, 32448, 32449, 32450, 32457, 32459, 32460, 32464, 32468, 32471, 32475, 32480, 32481, 32488, 32491, 32494, 32495, 32497, 32498, 32525, 32502, 32506, 32507, 32510, 32513, 32514, 32515, 32519, 32520, 32523, 32524, 32527, 32529, 32530, 32535, 32537, 32540, 32539, 32543, 32545, 32546, 32547, 32548, 32549, 32550, 32551, 32554, 32555, 32556, 32557, 32559, 32560, 32561, 32562, 32563, 32565, 24186, 30079, 24027, 30014, 37013, 29582, 29585, 29614, 29602, 29599, 29647, 29634, 29649, 29623, 29619, 29632, 29641, 29640, 29669, 29657, 39036, 29706, 29673, 29671, 29662, 29626, 29682, 29711, 29738, 29787, 29734, 29733, 29736, 29744, 29742, 29740, 37935, 37936, 37937, 37938, 37939, 37940, 37941, 37942, 37943, 37944, 37945, 37946, 37947, 37948, 37949, 37951, 37952, 37953, 37954, 37955, 37956, 37957, 37958, 37959, 37960, 37961, 37962, 37963, 37964, 37965, 37966, 37967, 37968, 37969, 37970, 37971, 37972, 37973, 37974, 37975, 37976, 37977, 37978, 37979, 37980, 37981, 37982, 37983, 37984, 37985, 37986, 37987, 37988, 37989, 37990, 37991, 37992, 37993, 37994, 37996, 37997, 37998, 37999, 38e3, 38001, 38002, 38003, 38004, 38005, 38006, 38007, 38008, 38009, 38010, 38011, 38012, 38013, 38014, 38015, 38016, 38017, 38018, 38019, 38020, 38033, 38038, 38040, 38087, 38095, 38099, 38100, 38106, 38118, 38139, 38172, 38176, 29723, 29722, 29761, 29788, 29783, 29781, 29785, 29815, 29805, 29822, 29852, 29838, 29824, 29825, 29831, 29835, 29854, 29864, 29865, 29840, 29863, 29906, 29882, 38890, 38891, 38892, 26444, 26451, 26462, 26440, 26473, 26533, 26503, 26474, 26483, 26520, 26535, 26485, 26536, 26526, 26541, 26507, 26487, 26492, 26608, 26633, 26584, 26634, 26601, 26544, 26636, 26585, 26549, 26586, 26547, 26589, 26624, 26563, 26552, 26594, 26638, 26561, 26621, 26674, 26675, 26720, 26721, 26702, 26722, 26692, 26724, 26755, 26653, 26709, 26726, 26689, 26727, 26688, 26686, 26698, 26697, 26665, 26805, 26767, 26740, 26743, 26771, 26731, 26818, 26990, 26876, 26911, 26912, 26873, 38183, 38195, 38205, 38211, 38216, 38219, 38229, 38234, 38240, 38254, 38260, 38261, 38263, 38264, 38265, 38266, 38267, 38268, 38269, 38270, 38272, 38273, 38274, 38275, 38276, 38277, 38278, 38279, 38280, 38281, 38282, 38283, 38284, 38285, 38286, 38287, 38288, 38289, 38290, 38291, 38292, 38293, 38294, 38295, 38296, 38297, 38298, 38299, 38300, 38301, 38302, 38303, 38304, 38305, 38306, 38307, 38308, 38309, 38310, 38311, 38312, 38313, 38314, 38315, 38316, 38317, 38318, 38319, 38320, 38321, 38322, 38323, 38324, 38325, 38326, 38327, 38328, 38329, 38330, 38331, 38332, 38333, 38334, 38335, 38336, 38337, 38338, 38339, 38340, 38341, 38342, 38343, 38344, 38345, 38346, 38347, 26916, 26864, 26891, 26881, 26967, 26851, 26896, 26993, 26937, 26976, 26946, 26973, 27012, 26987, 27008, 27032, 27e3, 26932, 27084, 27015, 27016, 27086, 27017, 26982, 26979, 27001, 27035, 27047, 27067, 27051, 27053, 27092, 27057, 27073, 27082, 27103, 27029, 27104, 27021, 27135, 27183, 27117, 27159, 27160, 27237, 27122, 27204, 27198, 27296, 27216, 27227, 27189, 27278, 27257, 27197, 27176, 27224, 27260, 27281, 27280, 27305, 27287, 27307, 29495, 29522, 27521, 27522, 27527, 27524, 27538, 27539, 27533, 27546, 27547, 27553, 27562, 36715, 36717, 36721, 36722, 36723, 36725, 36726, 36728, 36727, 36729, 36730, 36732, 36734, 36737, 36738, 36740, 36743, 36747, 38348, 38349, 38350, 38351, 38352, 38353, 38354, 38355, 38356, 38357, 38358, 38359, 38360, 38361, 38362, 38363, 38364, 38365, 38366, 38367, 38368, 38369, 38370, 38371, 38372, 38373, 38374, 38375, 38380, 38399, 38407, 38419, 38424, 38427, 38430, 38432, 38435, 38436, 38437, 38438, 38439, 38440, 38441, 38443, 38444, 38445, 38447, 38448, 38455, 38456, 38457, 38458, 38462, 38465, 38467, 38474, 38478, 38479, 38481, 38482, 38483, 38486, 38487, 38488, 38489, 38490, 38492, 38493, 38494, 38496, 38499, 38501, 38502, 38507, 38509, 38510, 38511, 38512, 38513, 38515, 38520, 38521, 38522, 38523, 38524, 38525, 38526, 38527, 38528, 38529, 38530, 38531, 38532, 38535, 38537, 38538, 36749, 36750, 36751, 36760, 36762, 36558, 25099, 25111, 25115, 25119, 25122, 25121, 25125, 25124, 25132, 33255, 29935, 29940, 29951, 29967, 29969, 29971, 25908, 26094, 26095, 26096, 26122, 26137, 26482, 26115, 26133, 26112, 28805, 26359, 26141, 26164, 26161, 26166, 26165, 32774, 26207, 26196, 26177, 26191, 26198, 26209, 26199, 26231, 26244, 26252, 26279, 26269, 26302, 26331, 26332, 26342, 26345, 36146, 36147, 36150, 36155, 36157, 36160, 36165, 36166, 36168, 36169, 36167, 36173, 36181, 36185, 35271, 35274, 35275, 35276, 35278, 35279, 35280, 35281, 29294, 29343, 29277, 29286, 29295, 29310, 29311, 29316, 29323, 29325, 29327, 29330, 25352, 25394, 25520, 38540, 38542, 38545, 38546, 38547, 38549, 38550, 38554, 38555, 38557, 38558, 38559, 38560, 38561, 38562, 38563, 38564, 38565, 38566, 38568, 38569, 38570, 38571, 38572, 38573, 38574, 38575, 38577, 38578, 38580, 38581, 38583, 38584, 38586, 38587, 38591, 38594, 38595, 38600, 38602, 38603, 38608, 38609, 38611, 38612, 38614, 38615, 38616, 38617, 38618, 38619, 38620, 38621, 38622, 38623, 38625, 38626, 38627, 38628, 38629, 38630, 38631, 38635, 38636, 38637, 38638, 38640, 38641, 38642, 38644, 38645, 38648, 38650, 38651, 38652, 38653, 38655, 38658, 38659, 38661, 38666, 38667, 38668, 38672, 38673, 38674, 38676, 38677, 38679, 38680, 38681, 38682, 38683, 38685, 38687, 38688, 25663, 25816, 32772, 27626, 27635, 27645, 27637, 27641, 27653, 27655, 27654, 27661, 27669, 27672, 27673, 27674, 27681, 27689, 27684, 27690, 27698, 25909, 25941, 25963, 29261, 29266, 29270, 29232, 34402, 21014, 32927, 32924, 32915, 32956, 26378, 32957, 32945, 32939, 32941, 32948, 32951, 32999, 33e3, 33001, 33002, 32987, 32962, 32964, 32985, 32973, 32983, 26384, 32989, 33003, 33009, 33012, 33005, 33037, 33038, 33010, 33020, 26389, 33042, 35930, 33078, 33054, 33068, 33048, 33074, 33096, 33100, 33107, 33140, 33113, 33114, 33137, 33120, 33129, 33148, 33149, 33133, 33127, 22605, 23221, 33160, 33154, 33169, 28373, 33187, 33194, 33228, 26406, 33226, 33211, 38689, 38690, 38691, 38692, 38693, 38694, 38695, 38696, 38697, 38699, 38700, 38702, 38703, 38705, 38707, 38708, 38709, 38710, 38711, 38714, 38715, 38716, 38717, 38719, 38720, 38721, 38722, 38723, 38724, 38725, 38726, 38727, 38728, 38729, 38730, 38731, 38732, 38733, 38734, 38735, 38736, 38737, 38740, 38741, 38743, 38744, 38746, 38748, 38749, 38751, 38755, 38756, 38758, 38759, 38760, 38762, 38763, 38764, 38765, 38766, 38767, 38768, 38769, 38770, 38773, 38775, 38776, 38777, 38778, 38779, 38781, 38782, 38783, 38784, 38785, 38786, 38787, 38788, 38790, 38791, 38792, 38793, 38794, 38796, 38798, 38799, 38800, 38803, 38805, 38806, 38807, 38809, 38810, 38811, 38812, 38813, 33217, 33190, 27428, 27447, 27449, 27459, 27462, 27481, 39121, 39122, 39123, 39125, 39129, 39130, 27571, 24384, 27586, 35315, 26e3, 40785, 26003, 26044, 26054, 26052, 26051, 26060, 26062, 26066, 26070, 28800, 28828, 28822, 28829, 28859, 28864, 28855, 28843, 28849, 28904, 28874, 28944, 28947, 28950, 28975, 28977, 29043, 29020, 29032, 28997, 29042, 29002, 29048, 29050, 29080, 29107, 29109, 29096, 29088, 29152, 29140, 29159, 29177, 29213, 29224, 28780, 28952, 29030, 29113, 25150, 25149, 25155, 25160, 25161, 31035, 31040, 31046, 31049, 31067, 31068, 31059, 31066, 31074, 31063, 31072, 31087, 31079, 31098, 31109, 31114, 31130, 31143, 31155, 24529, 24528, 38814, 38815, 38817, 38818, 38820, 38821, 38822, 38823, 38824, 38825, 38826, 38828, 38830, 38832, 38833, 38835, 38837, 38838, 38839, 38840, 38841, 38842, 38843, 38844, 38845, 38846, 38847, 38848, 38849, 38850, 38851, 38852, 38853, 38854, 38855, 38856, 38857, 38858, 38859, 38860, 38861, 38862, 38863, 38864, 38865, 38866, 38867, 38868, 38869, 38870, 38871, 38872, 38873, 38874, 38875, 38876, 38877, 38878, 38879, 38880, 38881, 38882, 38883, 38884, 38885, 38888, 38894, 38895, 38896, 38897, 38898, 38900, 38903, 38904, 38905, 38906, 38907, 38908, 38909, 38910, 38911, 38912, 38913, 38914, 38915, 38916, 38917, 38918, 38919, 38920, 38921, 38922, 38923, 38924, 38925, 38926, 24636, 24669, 24666, 24679, 24641, 24665, 24675, 24747, 24838, 24845, 24925, 25001, 24989, 25035, 25041, 25094, 32896, 32895, 27795, 27894, 28156, 30710, 30712, 30720, 30729, 30743, 30744, 30737, 26027, 30765, 30748, 30749, 30777, 30778, 30779, 30751, 30780, 30757, 30764, 30755, 30761, 30798, 30829, 30806, 30807, 30758, 30800, 30791, 30796, 30826, 30875, 30867, 30874, 30855, 30876, 30881, 30883, 30898, 30905, 30885, 30932, 30937, 30921, 30956, 30962, 30981, 30964, 30995, 31012, 31006, 31028, 40859, 40697, 40699, 40700, 30449, 30468, 30477, 30457, 30471, 30472, 30490, 30498, 30489, 30509, 30502, 30517, 30520, 30544, 30545, 30535, 30531, 30554, 30568, 38927, 38928, 38929, 38930, 38931, 38932, 38933, 38934, 38935, 38936, 38937, 38938, 38939, 38940, 38941, 38942, 38943, 38944, 38945, 38946, 38947, 38948, 38949, 38950, 38951, 38952, 38953, 38954, 38955, 38956, 38957, 38958, 38959, 38960, 38961, 38962, 38963, 38964, 38965, 38966, 38967, 38968, 38969, 38970, 38971, 38972, 38973, 38974, 38975, 38976, 38977, 38978, 38979, 38980, 38981, 38982, 38983, 38984, 38985, 38986, 38987, 38988, 38989, 38990, 38991, 38992, 38993, 38994, 38995, 38996, 38997, 38998, 38999, 39e3, 39001, 39002, 39003, 39004, 39005, 39006, 39007, 39008, 39009, 39010, 39011, 39012, 39013, 39014, 39015, 39016, 39017, 39018, 39019, 39020, 39021, 39022, 30562, 30565, 30591, 30605, 30589, 30592, 30604, 30609, 30623, 30624, 30640, 30645, 30653, 30010, 30016, 30030, 30027, 30024, 30043, 30066, 30073, 30083, 32600, 32609, 32607, 35400, 32616, 32628, 32625, 32633, 32641, 32638, 30413, 30437, 34866, 38021, 38022, 38023, 38027, 38026, 38028, 38029, 38031, 38032, 38036, 38039, 38037, 38042, 38043, 38044, 38051, 38052, 38059, 38058, 38061, 38060, 38063, 38064, 38066, 38068, 38070, 38071, 38072, 38073, 38074, 38076, 38077, 38079, 38084, 38088, 38089, 38090, 38091, 38092, 38093, 38094, 38096, 38097, 38098, 38101, 38102, 38103, 38105, 38104, 38107, 38110, 38111, 38112, 38114, 38116, 38117, 38119, 38120, 38122, 39023, 39024, 39025, 39026, 39027, 39028, 39051, 39054, 39058, 39061, 39065, 39075, 39080, 39081, 39082, 39083, 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091, 39092, 39093, 39094, 39095, 39096, 39097, 39098, 39099, 39100, 39101, 39102, 39103, 39104, 39105, 39106, 39107, 39108, 39109, 39110, 39111, 39112, 39113, 39114, 39115, 39116, 39117, 39119, 39120, 39124, 39126, 39127, 39131, 39132, 39133, 39136, 39137, 39138, 39139, 39140, 39141, 39142, 39145, 39146, 39147, 39148, 39149, 39150, 39151, 39152, 39153, 39154, 39155, 39156, 39157, 39158, 39159, 39160, 39161, 39162, 39163, 39164, 39165, 39166, 39167, 39168, 39169, 39170, 39171, 39172, 39173, 39174, 39175, 38121, 38123, 38126, 38127, 38131, 38132, 38133, 38135, 38137, 38140, 38141, 38143, 38147, 38146, 38150, 38151, 38153, 38154, 38157, 38158, 38159, 38162, 38163, 38164, 38165, 38166, 38168, 38171, 38173, 38174, 38175, 38178, 38186, 38187, 38185, 38188, 38193, 38194, 38196, 38198, 38199, 38200, 38204, 38206, 38207, 38210, 38197, 38212, 38213, 38214, 38217, 38220, 38222, 38223, 38226, 38227, 38228, 38230, 38231, 38232, 38233, 38235, 38238, 38239, 38237, 38241, 38242, 38244, 38245, 38246, 38247, 38248, 38249, 38250, 38251, 38252, 38255, 38257, 38258, 38259, 38202, 30695, 30700, 38601, 31189, 31213, 31203, 31211, 31238, 23879, 31235, 31234, 31262, 31252, 39176, 39177, 39178, 39179, 39180, 39182, 39183, 39185, 39186, 39187, 39188, 39189, 39190, 39191, 39192, 39193, 39194, 39195, 39196, 39197, 39198, 39199, 39200, 39201, 39202, 39203, 39204, 39205, 39206, 39207, 39208, 39209, 39210, 39211, 39212, 39213, 39215, 39216, 39217, 39218, 39219, 39220, 39221, 39222, 39223, 39224, 39225, 39226, 39227, 39228, 39229, 39230, 39231, 39232, 39233, 39234, 39235, 39236, 39237, 39238, 39239, 39240, 39241, 39242, 39243, 39244, 39245, 39246, 39247, 39248, 39249, 39250, 39251, 39254, 39255, 39256, 39257, 39258, 39259, 39260, 39261, 39262, 39263, 39264, 39265, 39266, 39268, 39270, 39283, 39288, 39289, 39291, 39294, 39298, 39299, 39305, 31289, 31287, 31313, 40655, 39333, 31344, 30344, 30350, 30355, 30361, 30372, 29918, 29920, 29996, 40480, 40482, 40488, 40489, 40490, 40491, 40492, 40498, 40497, 40502, 40504, 40503, 40505, 40506, 40510, 40513, 40514, 40516, 40518, 40519, 40520, 40521, 40523, 40524, 40526, 40529, 40533, 40535, 40538, 40539, 40540, 40542, 40547, 40550, 40551, 40552, 40553, 40554, 40555, 40556, 40561, 40557, 40563, 30098, 30100, 30102, 30112, 30109, 30124, 30115, 30131, 30132, 30136, 30148, 30129, 30128, 30147, 30146, 30166, 30157, 30179, 30184, 30182, 30180, 30187, 30183, 30211, 30193, 30204, 30207, 30224, 30208, 30213, 30220, 30231, 30218, 30245, 30232, 30229, 30233, 39308, 39310, 39322, 39323, 39324, 39325, 39326, 39327, 39328, 39329, 39330, 39331, 39332, 39334, 39335, 39337, 39338, 39339, 39340, 39341, 39342, 39343, 39344, 39345, 39346, 39347, 39348, 39349, 39350, 39351, 39352, 39353, 39354, 39355, 39356, 39357, 39358, 39359, 39360, 39361, 39362, 39363, 39364, 39365, 39366, 39367, 39368, 39369, 39370, 39371, 39372, 39373, 39374, 39375, 39376, 39377, 39378, 39379, 39380, 39381, 39382, 39383, 39384, 39385, 39386, 39387, 39388, 39389, 39390, 39391, 39392, 39393, 39394, 39395, 39396, 39397, 39398, 39399, 39400, 39401, 39402, 39403, 39404, 39405, 39406, 39407, 39408, 39409, 39410, 39411, 39412, 39413, 39414, 39415, 39416, 39417, 30235, 30268, 30242, 30240, 30272, 30253, 30256, 30271, 30261, 30275, 30270, 30259, 30285, 30302, 30292, 30300, 30294, 30315, 30319, 32714, 31462, 31352, 31353, 31360, 31366, 31368, 31381, 31398, 31392, 31404, 31400, 31405, 31411, 34916, 34921, 34930, 34941, 34943, 34946, 34978, 35014, 34999, 35004, 35017, 35042, 35022, 35043, 35045, 35057, 35098, 35068, 35048, 35070, 35056, 35105, 35097, 35091, 35099, 35082, 35124, 35115, 35126, 35137, 35174, 35195, 30091, 32997, 30386, 30388, 30684, 32786, 32788, 32790, 32796, 32800, 32802, 32805, 32806, 32807, 32809, 32808, 32817, 32779, 32821, 32835, 32838, 32845, 32850, 32873, 32881, 35203, 39032, 39040, 39043, 39418, 39419, 39420, 39421, 39422, 39423, 39424, 39425, 39426, 39427, 39428, 39429, 39430, 39431, 39432, 39433, 39434, 39435, 39436, 39437, 39438, 39439, 39440, 39441, 39442, 39443, 39444, 39445, 39446, 39447, 39448, 39449, 39450, 39451, 39452, 39453, 39454, 39455, 39456, 39457, 39458, 39459, 39460, 39461, 39462, 39463, 39464, 39465, 39466, 39467, 39468, 39469, 39470, 39471, 39472, 39473, 39474, 39475, 39476, 39477, 39478, 39479, 39480, 39481, 39482, 39483, 39484, 39485, 39486, 39487, 39488, 39489, 39490, 39491, 39492, 39493, 39494, 39495, 39496, 39497, 39498, 39499, 39500, 39501, 39502, 39503, 39504, 39505, 39506, 39507, 39508, 39509, 39510, 39511, 39512, 39513, 39049, 39052, 39053, 39055, 39060, 39066, 39067, 39070, 39071, 39073, 39074, 39077, 39078, 34381, 34388, 34412, 34414, 34431, 34426, 34428, 34427, 34472, 34445, 34443, 34476, 34461, 34471, 34467, 34474, 34451, 34473, 34486, 34500, 34485, 34510, 34480, 34490, 34481, 34479, 34505, 34511, 34484, 34537, 34545, 34546, 34541, 34547, 34512, 34579, 34526, 34548, 34527, 34520, 34513, 34563, 34567, 34552, 34568, 34570, 34573, 34569, 34595, 34619, 34590, 34597, 34606, 34586, 34622, 34632, 34612, 34609, 34601, 34615, 34623, 34690, 34594, 34685, 34686, 34683, 34656, 34672, 34636, 34670, 34699, 34643, 34659, 34684, 34660, 34649, 34661, 34707, 34735, 34728, 34770, 39514, 39515, 39516, 39517, 39518, 39519, 39520, 39521, 39522, 39523, 39524, 39525, 39526, 39527, 39528, 39529, 39530, 39531, 39538, 39555, 39561, 39565, 39566, 39572, 39573, 39577, 39590, 39593, 39594, 39595, 39596, 39597, 39598, 39599, 39602, 39603, 39604, 39605, 39609, 39611, 39613, 39614, 39615, 39619, 39620, 39622, 39623, 39624, 39625, 39626, 39629, 39630, 39631, 39632, 39634, 39636, 39637, 39638, 39639, 39641, 39642, 39643, 39644, 39645, 39646, 39648, 39650, 39651, 39652, 39653, 39655, 39656, 39657, 39658, 39660, 39662, 39664, 39665, 39666, 39667, 39668, 39669, 39670, 39671, 39672, 39674, 39676, 39677, 39678, 39679, 39680, 39681, 39682, 39684, 39685, 39686, 34758, 34696, 34693, 34733, 34711, 34691, 34731, 34789, 34732, 34741, 34739, 34763, 34771, 34749, 34769, 34752, 34762, 34779, 34794, 34784, 34798, 34838, 34835, 34814, 34826, 34843, 34849, 34873, 34876, 32566, 32578, 32580, 32581, 33296, 31482, 31485, 31496, 31491, 31492, 31509, 31498, 31531, 31503, 31559, 31544, 31530, 31513, 31534, 31537, 31520, 31525, 31524, 31539, 31550, 31518, 31576, 31578, 31557, 31605, 31564, 31581, 31584, 31598, 31611, 31586, 31602, 31601, 31632, 31654, 31655, 31672, 31660, 31645, 31656, 31621, 31658, 31644, 31650, 31659, 31668, 31697, 31681, 31692, 31709, 31706, 31717, 31718, 31722, 31756, 31742, 31740, 31759, 31766, 31755, 39687, 39689, 39690, 39691, 39692, 39693, 39694, 39696, 39697, 39698, 39700, 39701, 39702, 39703, 39704, 39705, 39706, 39707, 39708, 39709, 39710, 39712, 39713, 39714, 39716, 39717, 39718, 39719, 39720, 39721, 39722, 39723, 39724, 39725, 39726, 39728, 39729, 39731, 39732, 39733, 39734, 39735, 39736, 39737, 39738, 39741, 39742, 39743, 39744, 39750, 39754, 39755, 39756, 39758, 39760, 39762, 39763, 39765, 39766, 39767, 39768, 39769, 39770, 39771, 39772, 39773, 39774, 39775, 39776, 39777, 39778, 39779, 39780, 39781, 39782, 39783, 39784, 39785, 39786, 39787, 39788, 39789, 39790, 39791, 39792, 39793, 39794, 39795, 39796, 39797, 39798, 39799, 39800, 39801, 39802, 39803, 31775, 31786, 31782, 31800, 31809, 31808, 33278, 33281, 33282, 33284, 33260, 34884, 33313, 33314, 33315, 33325, 33327, 33320, 33323, 33336, 33339, 33331, 33332, 33342, 33348, 33353, 33355, 33359, 33370, 33375, 33384, 34942, 34949, 34952, 35032, 35039, 35166, 32669, 32671, 32679, 32687, 32688, 32690, 31868, 25929, 31889, 31901, 31900, 31902, 31906, 31922, 31932, 31933, 31937, 31943, 31948, 31949, 31944, 31941, 31959, 31976, 33390, 26280, 32703, 32718, 32725, 32741, 32737, 32742, 32745, 32750, 32755, 31992, 32119, 32166, 32174, 32327, 32411, 40632, 40628, 36211, 36228, 36244, 36241, 36273, 36199, 36205, 35911, 35913, 37194, 37200, 37198, 37199, 37220, 39804, 39805, 39806, 39807, 39808, 39809, 39810, 39811, 39812, 39813, 39814, 39815, 39816, 39817, 39818, 39819, 39820, 39821, 39822, 39823, 39824, 39825, 39826, 39827, 39828, 39829, 39830, 39831, 39832, 39833, 39834, 39835, 39836, 39837, 39838, 39839, 39840, 39841, 39842, 39843, 39844, 39845, 39846, 39847, 39848, 39849, 39850, 39851, 39852, 39853, 39854, 39855, 39856, 39857, 39858, 39859, 39860, 39861, 39862, 39863, 39864, 39865, 39866, 39867, 39868, 39869, 39870, 39871, 39872, 39873, 39874, 39875, 39876, 39877, 39878, 39879, 39880, 39881, 39882, 39883, 39884, 39885, 39886, 39887, 39888, 39889, 39890, 39891, 39892, 39893, 39894, 39895, 39896, 39897, 39898, 39899, 37218, 37217, 37232, 37225, 37231, 37245, 37246, 37234, 37236, 37241, 37260, 37253, 37264, 37261, 37265, 37282, 37283, 37290, 37293, 37294, 37295, 37301, 37300, 37306, 35925, 40574, 36280, 36331, 36357, 36441, 36457, 36277, 36287, 36284, 36282, 36292, 36310, 36311, 36314, 36318, 36302, 36303, 36315, 36294, 36332, 36343, 36344, 36323, 36345, 36347, 36324, 36361, 36349, 36372, 36381, 36383, 36396, 36398, 36387, 36399, 36410, 36416, 36409, 36405, 36413, 36401, 36425, 36417, 36418, 36433, 36434, 36426, 36464, 36470, 36476, 36463, 36468, 36485, 36495, 36500, 36496, 36508, 36510, 35960, 35970, 35978, 35973, 35992, 35988, 26011, 35286, 35294, 35290, 35292, 39900, 39901, 39902, 39903, 39904, 39905, 39906, 39907, 39908, 39909, 39910, 39911, 39912, 39913, 39914, 39915, 39916, 39917, 39918, 39919, 39920, 39921, 39922, 39923, 39924, 39925, 39926, 39927, 39928, 39929, 39930, 39931, 39932, 39933, 39934, 39935, 39936, 39937, 39938, 39939, 39940, 39941, 39942, 39943, 39944, 39945, 39946, 39947, 39948, 39949, 39950, 39951, 39952, 39953, 39954, 39955, 39956, 39957, 39958, 39959, 39960, 39961, 39962, 39963, 39964, 39965, 39966, 39967, 39968, 39969, 39970, 39971, 39972, 39973, 39974, 39975, 39976, 39977, 39978, 39979, 39980, 39981, 39982, 39983, 39984, 39985, 39986, 39987, 39988, 39989, 39990, 39991, 39992, 39993, 39994, 39995, 35301, 35307, 35311, 35390, 35622, 38739, 38633, 38643, 38639, 38662, 38657, 38664, 38671, 38670, 38698, 38701, 38704, 38718, 40832, 40835, 40837, 40838, 40839, 40840, 40841, 40842, 40844, 40702, 40715, 40717, 38585, 38588, 38589, 38606, 38610, 30655, 38624, 37518, 37550, 37576, 37694, 37738, 37834, 37775, 37950, 37995, 40063, 40066, 40069, 40070, 40071, 40072, 31267, 40075, 40078, 40080, 40081, 40082, 40084, 40085, 40090, 40091, 40094, 40095, 40096, 40097, 40098, 40099, 40101, 40102, 40103, 40104, 40105, 40107, 40109, 40110, 40112, 40113, 40114, 40115, 40116, 40117, 40118, 40119, 40122, 40123, 40124, 40125, 40132, 40133, 40134, 40135, 40138, 40139, 39996, 39997, 39998, 39999, 4e4, 40001, 40002, 40003, 40004, 40005, 40006, 40007, 40008, 40009, 40010, 40011, 40012, 40013, 40014, 40015, 40016, 40017, 40018, 40019, 40020, 40021, 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, 40030, 40031, 40032, 40033, 40034, 40035, 40036, 40037, 40038, 40039, 40040, 40041, 40042, 40043, 40044, 40045, 40046, 40047, 40048, 40049, 40050, 40051, 40052, 40053, 40054, 40055, 40056, 40057, 40058, 40059, 40061, 40062, 40064, 40067, 40068, 40073, 40074, 40076, 40079, 40083, 40086, 40087, 40088, 40089, 40093, 40106, 40108, 40111, 40121, 40126, 40127, 40128, 40129, 40130, 40136, 40137, 40145, 40146, 40154, 40155, 40160, 40161, 40140, 40141, 40142, 40143, 40144, 40147, 40148, 40149, 40151, 40152, 40153, 40156, 40157, 40159, 40162, 38780, 38789, 38801, 38802, 38804, 38831, 38827, 38819, 38834, 38836, 39601, 39600, 39607, 40536, 39606, 39610, 39612, 39617, 39616, 39621, 39618, 39627, 39628, 39633, 39749, 39747, 39751, 39753, 39752, 39757, 39761, 39144, 39181, 39214, 39253, 39252, 39647, 39649, 39654, 39663, 39659, 39675, 39661, 39673, 39688, 39695, 39699, 39711, 39715, 40637, 40638, 32315, 40578, 40583, 40584, 40587, 40594, 37846, 40605, 40607, 40667, 40668, 40669, 40672, 40671, 40674, 40681, 40679, 40677, 40682, 40687, 40738, 40748, 40751, 40761, 40759, 40765, 40766, 40772, 40163, 40164, 40165, 40166, 40167, 40168, 40169, 40170, 40171, 40172, 40173, 40174, 40175, 40176, 40177, 40178, 40179, 40180, 40181, 40182, 40183, 40184, 40185, 40186, 40187, 40188, 40189, 40190, 40191, 40192, 40193, 40194, 40195, 40196, 40197, 40198, 40199, 40200, 40201, 40202, 40203, 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40211, 40212, 40213, 40214, 40215, 40216, 40217, 40218, 40219, 40220, 40221, 40222, 40223, 40224, 40225, 40226, 40227, 40228, 40229, 40230, 40231, 40232, 40233, 40234, 40235, 40236, 40237, 40238, 40239, 40240, 40241, 40242, 40243, 40244, 40245, 40246, 40247, 40248, 40249, 40250, 40251, 40252, 40253, 40254, 40255, 40256, 40257, 40258, 57908, 57909, 57910, 57911, 57912, 57913, 57914, 57915, 57916, 57917, 57918, 57919, 57920, 57921, 57922, 57923, 57924, 57925, 57926, 57927, 57928, 57929, 57930, 57931, 57932, 57933, 57934, 57935, 57936, 57937, 57938, 57939, 57940, 57941, 57942, 57943, 57944, 57945, 57946, 57947, 57948, 57949, 57950, 57951, 57952, 57953, 57954, 57955, 57956, 57957, 57958, 57959, 57960, 57961, 57962, 57963, 57964, 57965, 57966, 57967, 57968, 57969, 57970, 57971, 57972, 57973, 57974, 57975, 57976, 57977, 57978, 57979, 57980, 57981, 57982, 57983, 57984, 57985, 57986, 57987, 57988, 57989, 57990, 57991, 57992, 57993, 57994, 57995, 57996, 57997, 57998, 57999, 58e3, 58001, 40259, 40260, 40261, 40262, 40263, 40264, 40265, 40266, 40267, 40268, 40269, 40270, 40271, 40272, 40273, 40274, 40275, 40276, 40277, 40278, 40279, 40280, 40281, 40282, 40283, 40284, 40285, 40286, 40287, 40288, 40289, 40290, 40291, 40292, 40293, 40294, 40295, 40296, 40297, 40298, 40299, 40300, 40301, 40302, 40303, 40304, 40305, 40306, 40307, 40308, 40309, 40310, 40311, 40312, 40313, 40314, 40315, 40316, 40317, 40318, 40319, 40320, 40321, 40322, 40323, 40324, 40325, 40326, 40327, 40328, 40329, 40330, 40331, 40332, 40333, 40334, 40335, 40336, 40337, 40338, 40339, 40340, 40341, 40342, 40343, 40344, 40345, 40346, 40347, 40348, 40349, 40350, 40351, 40352, 40353, 40354, 58002, 58003, 58004, 58005, 58006, 58007, 58008, 58009, 58010, 58011, 58012, 58013, 58014, 58015, 58016, 58017, 58018, 58019, 58020, 58021, 58022, 58023, 58024, 58025, 58026, 58027, 58028, 58029, 58030, 58031, 58032, 58033, 58034, 58035, 58036, 58037, 58038, 58039, 58040, 58041, 58042, 58043, 58044, 58045, 58046, 58047, 58048, 58049, 58050, 58051, 58052, 58053, 58054, 58055, 58056, 58057, 58058, 58059, 58060, 58061, 58062, 58063, 58064, 58065, 58066, 58067, 58068, 58069, 58070, 58071, 58072, 58073, 58074, 58075, 58076, 58077, 58078, 58079, 58080, 58081, 58082, 58083, 58084, 58085, 58086, 58087, 58088, 58089, 58090, 58091, 58092, 58093, 58094, 58095, 40355, 40356, 40357, 40358, 40359, 40360, 40361, 40362, 40363, 40364, 40365, 40366, 40367, 40368, 40369, 40370, 40371, 40372, 40373, 40374, 40375, 40376, 40377, 40378, 40379, 40380, 40381, 40382, 40383, 40384, 40385, 40386, 40387, 40388, 40389, 40390, 40391, 40392, 40393, 40394, 40395, 40396, 40397, 40398, 40399, 40400, 40401, 40402, 40403, 40404, 40405, 40406, 40407, 40408, 40409, 40410, 40411, 40412, 40413, 40414, 40415, 40416, 40417, 40418, 40419, 40420, 40421, 40422, 40423, 40424, 40425, 40426, 40427, 40428, 40429, 40430, 40431, 40432, 40433, 40434, 40435, 40436, 40437, 40438, 40439, 40440, 40441, 40442, 40443, 40444, 40445, 40446, 40447, 40448, 40449, 40450, 58096, 58097, 58098, 58099, 58100, 58101, 58102, 58103, 58104, 58105, 58106, 58107, 58108, 58109, 58110, 58111, 58112, 58113, 58114, 58115, 58116, 58117, 58118, 58119, 58120, 58121, 58122, 58123, 58124, 58125, 58126, 58127, 58128, 58129, 58130, 58131, 58132, 58133, 58134, 58135, 58136, 58137, 58138, 58139, 58140, 58141, 58142, 58143, 58144, 58145, 58146, 58147, 58148, 58149, 58150, 58151, 58152, 58153, 58154, 58155, 58156, 58157, 58158, 58159, 58160, 58161, 58162, 58163, 58164, 58165, 58166, 58167, 58168, 58169, 58170, 58171, 58172, 58173, 58174, 58175, 58176, 58177, 58178, 58179, 58180, 58181, 58182, 58183, 58184, 58185, 58186, 58187, 58188, 58189, 40451, 40452, 40453, 40454, 40455, 40456, 40457, 40458, 40459, 40460, 40461, 40462, 40463, 40464, 40465, 40466, 40467, 40468, 40469, 40470, 40471, 40472, 40473, 40474, 40475, 40476, 40477, 40478, 40484, 40487, 40494, 40496, 40500, 40507, 40508, 40512, 40525, 40528, 40530, 40531, 40532, 40534, 40537, 40541, 40543, 40544, 40545, 40546, 40549, 40558, 40559, 40562, 40564, 40565, 40566, 40567, 40568, 40569, 40570, 40571, 40572, 40573, 40576, 40577, 40579, 40580, 40581, 40582, 40585, 40586, 40588, 40589, 40590, 40591, 40592, 40593, 40596, 40597, 40598, 40599, 40600, 40601, 40602, 40603, 40604, 40606, 40608, 40609, 40610, 40611, 40612, 40613, 40615, 40616, 40617, 40618, 58190, 58191, 58192, 58193, 58194, 58195, 58196, 58197, 58198, 58199, 58200, 58201, 58202, 58203, 58204, 58205, 58206, 58207, 58208, 58209, 58210, 58211, 58212, 58213, 58214, 58215, 58216, 58217, 58218, 58219, 58220, 58221, 58222, 58223, 58224, 58225, 58226, 58227, 58228, 58229, 58230, 58231, 58232, 58233, 58234, 58235, 58236, 58237, 58238, 58239, 58240, 58241, 58242, 58243, 58244, 58245, 58246, 58247, 58248, 58249, 58250, 58251, 58252, 58253, 58254, 58255, 58256, 58257, 58258, 58259, 58260, 58261, 58262, 58263, 58264, 58265, 58266, 58267, 58268, 58269, 58270, 58271, 58272, 58273, 58274, 58275, 58276, 58277, 58278, 58279, 58280, 58281, 58282, 58283, 40619, 40620, 40621, 40622, 40623, 40624, 40625, 40626, 40627, 40629, 40630, 40631, 40633, 40634, 40636, 40639, 40640, 40641, 40642, 40643, 40645, 40646, 40647, 40648, 40650, 40651, 40652, 40656, 40658, 40659, 40661, 40662, 40663, 40665, 40666, 40670, 40673, 40675, 40676, 40678, 40680, 40683, 40684, 40685, 40686, 40688, 40689, 40690, 40691, 40692, 40693, 40694, 40695, 40696, 40698, 40701, 40703, 40704, 40705, 40706, 40707, 40708, 40709, 40710, 40711, 40712, 40713, 40714, 40716, 40719, 40721, 40722, 40724, 40725, 40726, 40728, 40730, 40731, 40732, 40733, 40734, 40735, 40737, 40739, 40740, 40741, 40742, 40743, 40744, 40745, 40746, 40747, 40749, 40750, 40752, 40753, 58284, 58285, 58286, 58287, 58288, 58289, 58290, 58291, 58292, 58293, 58294, 58295, 58296, 58297, 58298, 58299, 58300, 58301, 58302, 58303, 58304, 58305, 58306, 58307, 58308, 58309, 58310, 58311, 58312, 58313, 58314, 58315, 58316, 58317, 58318, 58319, 58320, 58321, 58322, 58323, 58324, 58325, 58326, 58327, 58328, 58329, 58330, 58331, 58332, 58333, 58334, 58335, 58336, 58337, 58338, 58339, 58340, 58341, 58342, 58343, 58344, 58345, 58346, 58347, 58348, 58349, 58350, 58351, 58352, 58353, 58354, 58355, 58356, 58357, 58358, 58359, 58360, 58361, 58362, 58363, 58364, 58365, 58366, 58367, 58368, 58369, 58370, 58371, 58372, 58373, 58374, 58375, 58376, 58377, 40754, 40755, 40756, 40757, 40758, 40760, 40762, 40764, 40767, 40768, 40769, 40770, 40771, 40773, 40774, 40775, 40776, 40777, 40778, 40779, 40780, 40781, 40782, 40783, 40786, 40787, 40788, 40789, 40790, 40791, 40792, 40793, 40794, 40795, 40796, 40797, 40798, 40799, 40800, 40801, 40802, 40803, 40804, 40805, 40806, 40807, 40808, 40809, 40810, 40811, 40812, 40813, 40814, 40815, 40816, 40817, 40818, 40819, 40820, 40821, 40822, 40823, 40824, 40825, 40826, 40827, 40828, 40829, 40830, 40833, 40834, 40845, 40846, 40847, 40848, 40849, 40850, 40851, 40852, 40853, 40854, 40855, 40856, 40860, 40861, 40862, 40865, 40866, 40867, 40868, 40869, 63788, 63865, 63893, 63975, 63985, 58378, 58379, 58380, 58381, 58382, 58383, 58384, 58385, 58386, 58387, 58388, 58389, 58390, 58391, 58392, 58393, 58394, 58395, 58396, 58397, 58398, 58399, 58400, 58401, 58402, 58403, 58404, 58405, 58406, 58407, 58408, 58409, 58410, 58411, 58412, 58413, 58414, 58415, 58416, 58417, 58418, 58419, 58420, 58421, 58422, 58423, 58424, 58425, 58426, 58427, 58428, 58429, 58430, 58431, 58432, 58433, 58434, 58435, 58436, 58437, 58438, 58439, 58440, 58441, 58442, 58443, 58444, 58445, 58446, 58447, 58448, 58449, 58450, 58451, 58452, 58453, 58454, 58455, 58456, 58457, 58458, 58459, 58460, 58461, 58462, 58463, 58464, 58465, 58466, 58467, 58468, 58469, 58470, 58471, 64012, 64013, 64014, 64015, 64017, 64019, 64020, 64024, 64031, 64032, 64033, 64035, 64036, 64039, 64040, 64041, 11905, 59414, 59415, 59416, 11908, 13427, 13383, 11912, 11915, 59422, 13726, 13850, 13838, 11916, 11927, 14702, 14616, 59430, 14799, 14815, 14963, 14800, 59435, 59436, 15182, 15470, 15584, 11943, 59441, 59442, 11946, 16470, 16735, 11950, 17207, 11955, 11958, 11959, 59451, 17329, 17324, 11963, 17373, 17622, 18017, 17996, 59459, 18211, 18217, 18300, 18317, 11978, 18759, 18810, 18813, 18818, 18819, 18821, 18822, 18847, 18843, 18871, 18870, 59476, 59477, 19619, 19615, 19616, 19617, 19575, 19618, 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19886, 59492, 58472, 58473, 58474, 58475, 58476, 58477, 58478, 58479, 58480, 58481, 58482, 58483, 58484, 58485, 58486, 58487, 58488, 58489, 58490, 58491, 58492, 58493, 58494, 58495, 58496, 58497, 58498, 58499, 58500, 58501, 58502, 58503, 58504, 58505, 58506, 58507, 58508, 58509, 58510, 58511, 58512, 58513, 58514, 58515, 58516, 58517, 58518, 58519, 58520, 58521, 58522, 58523, 58524, 58525, 58526, 58527, 58528, 58529, 58530, 58531, 58532, 58533, 58534, 58535, 58536, 58537, 58538, 58539, 58540, 58541, 58542, 58543, 58544, 58545, 58546, 58547, 58548, 58549, 58550, 58551, 58552, 58553, 58554, 58555, 58556, 58557, 58558, 58559, 58560, 58561, 58562, 58563, 58564, 58565], + "gb18030-ranges": [[0, 128], [36, 165], [38, 169], [45, 178], [50, 184], [81, 216], [89, 226], [95, 235], [96, 238], [100, 244], [103, 248], [104, 251], [105, 253], [109, 258], [126, 276], [133, 284], [148, 300], [172, 325], [175, 329], [179, 334], [208, 364], [306, 463], [307, 465], [308, 467], [309, 469], [310, 471], [311, 473], [312, 475], [313, 477], [341, 506], [428, 594], [443, 610], [544, 712], [545, 716], [558, 730], [741, 930], [742, 938], [749, 962], [750, 970], [805, 1026], [819, 1104], [820, 1106], [7922, 8209], [7924, 8215], [7925, 8218], [7927, 8222], [7934, 8231], [7943, 8241], [7944, 8244], [7945, 8246], [7950, 8252], [8062, 8365], [8148, 8452], [8149, 8454], [8152, 8458], [8164, 8471], [8174, 8482], [8236, 8556], [8240, 8570], [8262, 8596], [8264, 8602], [8374, 8713], [8380, 8720], [8381, 8722], [8384, 8726], [8388, 8731], [8390, 8737], [8392, 8740], [8393, 8742], [8394, 8748], [8396, 8751], [8401, 8760], [8406, 8766], [8416, 8777], [8419, 8781], [8424, 8787], [8437, 8802], [8439, 8808], [8445, 8816], [8482, 8854], [8485, 8858], [8496, 8870], [8521, 8896], [8603, 8979], [8936, 9322], [8946, 9372], [9046, 9548], [9050, 9588], [9063, 9616], [9066, 9622], [9076, 9634], [9092, 9652], [9100, 9662], [9108, 9672], [9111, 9676], [9113, 9680], [9131, 9702], [9162, 9735], [9164, 9738], [9218, 9793], [9219, 9795], [11329, 11906], [11331, 11909], [11334, 11913], [11336, 11917], [11346, 11928], [11361, 11944], [11363, 11947], [11366, 11951], [11370, 11956], [11372, 11960], [11375, 11964], [11389, 11979], [11682, 12284], [11686, 12292], [11687, 12312], [11692, 12319], [11694, 12330], [11714, 12351], [11716, 12436], [11723, 12447], [11725, 12535], [11730, 12543], [11736, 12586], [11982, 12842], [11989, 12850], [12102, 12964], [12336, 13200], [12348, 13215], [12350, 13218], [12384, 13253], [12393, 13263], [12395, 13267], [12397, 13270], [12510, 13384], [12553, 13428], [12851, 13727], [12962, 13839], [12973, 13851], [13738, 14617], [13823, 14703], [13919, 14801], [13933, 14816], [14080, 14964], [14298, 15183], [14585, 15471], [14698, 15585], [15583, 16471], [15847, 16736], [16318, 17208], [16434, 17325], [16438, 17330], [16481, 17374], [16729, 17623], [17102, 17997], [17122, 18018], [17315, 18212], [17320, 18218], [17402, 18301], [17418, 18318], [17859, 18760], [17909, 18811], [17911, 18814], [17915, 18820], [17916, 18823], [17936, 18844], [17939, 18848], [17961, 18872], [18664, 19576], [18703, 19620], [18814, 19738], [18962, 19887], [19043, 40870], [33469, 59244], [33470, 59336], [33471, 59367], [33484, 59413], [33485, 59417], [33490, 59423], [33497, 59431], [33501, 59437], [33505, 59443], [33513, 59452], [33520, 59460], [33536, 59478], [33550, 59493], [37845, 63789], [37921, 63866], [37948, 63894], [38029, 63976], [38038, 63986], [38064, 64016], [38065, 64018], [38066, 64021], [38069, 64025], [38075, 64034], [38076, 64037], [38078, 64042], [39108, 65074], [39109, 65093], [39113, 65107], [39114, 65112], [39115, 65127], [39116, 65132], [39265, 65375], [39394, 65510], [189e3, 65536]], + "jis0208": [12288, 12289, 12290, 65292, 65294, 12539, 65306, 65307, 65311, 65281, 12443, 12444, 180, 65344, 168, 65342, 65507, 65343, 12541, 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, 8213, 8208, 65295, 65340, 65374, 8741, 65372, 8230, 8229, 8216, 8217, 8220, 8221, 65288, 65289, 12308, 12309, 65339, 65341, 65371, 65373, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 65291, 65293, 177, 215, 247, 65309, 8800, 65308, 65310, 8806, 8807, 8734, 8756, 9794, 9792, 176, 8242, 8243, 8451, 65509, 65284, 65504, 65505, 65285, 65283, 65286, 65290, 65312, 167, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8251, 12306, 8594, 8592, 8593, 8595, 12307, null, null, null, null, null, null, null, null, null, null, null, 8712, 8715, 8838, 8839, 8834, 8835, 8746, 8745, null, null, null, null, null, null, null, null, 8743, 8744, 65506, 8658, 8660, 8704, 8707, null, null, null, null, null, null, null, null, null, null, null, 8736, 8869, 8978, 8706, 8711, 8801, 8786, 8810, 8811, 8730, 8765, 8733, 8757, 8747, 8748, null, null, null, null, null, null, null, 8491, 8240, 9839, 9837, 9834, 8224, 8225, 182, null, null, null, null, 9711, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, null, null, null, null, null, null, null, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, null, null, null, null, null, null, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, null, null, null, null, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, null, null, null, null, null, null, null, null, null, null, null, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, null, null, null, null, null, null, null, null, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, null, null, null, null, null, null, null, null, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, null, null, null, null, null, null, null, null, null, null, null, null, null, 9472, 9474, 9484, 9488, 9496, 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475, 9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, 9547, 9504, 9519, 9512, 9527, 9535, 9501, 9520, 9509, 9528, 9538, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, null, 13129, 13076, 13090, 13133, 13080, 13095, 13059, 13110, 13137, 13143, 13069, 13094, 13091, 13099, 13130, 13115, 13212, 13213, 13214, 13198, 13199, 13252, 13217, null, null, null, null, null, null, null, null, 13179, 12317, 12319, 8470, 13261, 8481, 12964, 12965, 12966, 12967, 12968, 12849, 12850, 12857, 13182, 13181, 13180, 8786, 8801, 8747, 8750, 8721, 8730, 8869, 8736, 8735, 8895, 8757, 8745, 8746, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20124, 21782, 23043, 38463, 21696, 24859, 25384, 23030, 36898, 33909, 33564, 31312, 24746, 25569, 28197, 26093, 33894, 33446, 39925, 26771, 22311, 26017, 25201, 23451, 22992, 34427, 39156, 32098, 32190, 39822, 25110, 31903, 34999, 23433, 24245, 25353, 26263, 26696, 38343, 38797, 26447, 20197, 20234, 20301, 20381, 20553, 22258, 22839, 22996, 23041, 23561, 24799, 24847, 24944, 26131, 26885, 28858, 30031, 30064, 31227, 32173, 32239, 32963, 33806, 34915, 35586, 36949, 36986, 21307, 20117, 20133, 22495, 32946, 37057, 30959, 19968, 22769, 28322, 36920, 31282, 33576, 33419, 39983, 20801, 21360, 21693, 21729, 22240, 23035, 24341, 39154, 28139, 32996, 34093, 38498, 38512, 38560, 38907, 21515, 21491, 23431, 28879, 32701, 36802, 38632, 21359, 40284, 31418, 19985, 30867, 33276, 28198, 22040, 21764, 27421, 34074, 39995, 23013, 21417, 28006, 29916, 38287, 22082, 20113, 36939, 38642, 33615, 39180, 21473, 21942, 23344, 24433, 26144, 26355, 26628, 27704, 27891, 27945, 29787, 30408, 31310, 38964, 33521, 34907, 35424, 37613, 28082, 30123, 30410, 39365, 24742, 35585, 36234, 38322, 27022, 21421, 20870, 22290, 22576, 22852, 23476, 24310, 24616, 25513, 25588, 27839, 28436, 28814, 28948, 29017, 29141, 29503, 32257, 33398, 33489, 34199, 36960, 37467, 40219, 22633, 26044, 27738, 29989, 20985, 22830, 22885, 24448, 24540, 25276, 26106, 27178, 27431, 27572, 29579, 32705, 35158, 40236, 40206, 40644, 23713, 27798, 33659, 20740, 23627, 25014, 33222, 26742, 29281, 20057, 20474, 21368, 24681, 28201, 31311, 38899, 19979, 21270, 20206, 20309, 20285, 20385, 20339, 21152, 21487, 22025, 22799, 23233, 23478, 23521, 31185, 26247, 26524, 26550, 27468, 27827, 28779, 29634, 31117, 31166, 31292, 31623, 33457, 33499, 33540, 33655, 33775, 33747, 34662, 35506, 22057, 36008, 36838, 36942, 38686, 34442, 20420, 23784, 25105, 29273, 30011, 33253, 33469, 34558, 36032, 38597, 39187, 39381, 20171, 20250, 35299, 22238, 22602, 22730, 24315, 24555, 24618, 24724, 24674, 25040, 25106, 25296, 25913, 39745, 26214, 26800, 28023, 28784, 30028, 30342, 32117, 33445, 34809, 38283, 38542, 35997, 20977, 21182, 22806, 21683, 23475, 23830, 24936, 27010, 28079, 30861, 33995, 34903, 35442, 37799, 39608, 28012, 39336, 34521, 22435, 26623, 34510, 37390, 21123, 22151, 21508, 24275, 25313, 25785, 26684, 26680, 27579, 29554, 30906, 31339, 35226, 35282, 36203, 36611, 37101, 38307, 38548, 38761, 23398, 23731, 27005, 38989, 38990, 25499, 31520, 27179, 27263, 26806, 39949, 28511, 21106, 21917, 24688, 25324, 27963, 28167, 28369, 33883, 35088, 36676, 19988, 39993, 21494, 26907, 27194, 38788, 26666, 20828, 31427, 33970, 37340, 37772, 22107, 40232, 26658, 33541, 33841, 31909, 21e3, 33477, 29926, 20094, 20355, 20896, 23506, 21002, 21208, 21223, 24059, 21914, 22570, 23014, 23436, 23448, 23515, 24178, 24185, 24739, 24863, 24931, 25022, 25563, 25954, 26577, 26707, 26874, 27454, 27475, 27735, 28450, 28567, 28485, 29872, 29976, 30435, 30475, 31487, 31649, 31777, 32233, 32566, 32752, 32925, 33382, 33694, 35251, 35532, 36011, 36996, 37969, 38291, 38289, 38306, 38501, 38867, 39208, 33304, 20024, 21547, 23736, 24012, 29609, 30284, 30524, 23721, 32747, 36107, 38593, 38929, 38996, 39e3, 20225, 20238, 21361, 21916, 22120, 22522, 22855, 23305, 23492, 23696, 24076, 24190, 24524, 25582, 26426, 26071, 26082, 26399, 26827, 26820, 27231, 24112, 27589, 27671, 27773, 30079, 31048, 23395, 31232, 32e3, 24509, 35215, 35352, 36020, 36215, 36556, 36637, 39138, 39438, 39740, 20096, 20605, 20736, 22931, 23452, 25135, 25216, 25836, 27450, 29344, 30097, 31047, 32681, 34811, 35516, 35696, 25516, 33738, 38816, 21513, 21507, 21931, 26708, 27224, 35440, 30759, 26485, 40653, 21364, 23458, 33050, 34384, 36870, 19992, 20037, 20167, 20241, 21450, 21560, 23470, 24339, 24613, 25937, 26429, 27714, 27762, 27875, 28792, 29699, 31350, 31406, 31496, 32026, 31998, 32102, 26087, 29275, 21435, 23621, 24040, 25298, 25312, 25369, 28192, 34394, 35377, 36317, 37624, 28417, 31142, 39770, 20136, 20139, 20140, 20379, 20384, 20689, 20807, 31478, 20849, 20982, 21332, 21281, 21375, 21483, 21932, 22659, 23777, 24375, 24394, 24623, 24656, 24685, 25375, 25945, 27211, 27841, 29378, 29421, 30703, 33016, 33029, 33288, 34126, 37111, 37857, 38911, 39255, 39514, 20208, 20957, 23597, 26241, 26989, 23616, 26354, 26997, 29577, 26704, 31873, 20677, 21220, 22343, 24062, 37670, 26020, 27427, 27453, 29748, 31105, 31165, 31563, 32202, 33465, 33740, 34943, 35167, 35641, 36817, 37329, 21535, 37504, 20061, 20534, 21477, 21306, 29399, 29590, 30697, 33510, 36527, 39366, 39368, 39378, 20855, 24858, 34398, 21936, 31354, 20598, 23507, 36935, 38533, 20018, 27355, 37351, 23633, 23624, 25496, 31391, 27795, 38772, 36705, 31402, 29066, 38536, 31874, 26647, 32368, 26705, 37740, 21234, 21531, 34219, 35347, 32676, 36557, 37089, 21350, 34952, 31041, 20418, 20670, 21009, 20804, 21843, 22317, 29674, 22411, 22865, 24418, 24452, 24693, 24950, 24935, 25001, 25522, 25658, 25964, 26223, 26690, 28179, 30054, 31293, 31995, 32076, 32153, 32331, 32619, 33550, 33610, 34509, 35336, 35427, 35686, 36605, 38938, 40335, 33464, 36814, 39912, 21127, 25119, 25731, 28608, 38553, 26689, 20625, 27424, 27770, 28500, 31348, 32080, 34880, 35363, 26376, 20214, 20537, 20518, 20581, 20860, 21048, 21091, 21927, 22287, 22533, 23244, 24314, 25010, 25080, 25331, 25458, 26908, 27177, 29309, 29356, 29486, 30740, 30831, 32121, 30476, 32937, 35211, 35609, 36066, 36562, 36963, 37749, 38522, 38997, 39443, 40568, 20803, 21407, 21427, 24187, 24358, 28187, 28304, 29572, 29694, 32067, 33335, 35328, 35578, 38480, 20046, 20491, 21476, 21628, 22266, 22993, 23396, 24049, 24235, 24359, 25144, 25925, 26543, 28246, 29392, 31946, 34996, 32929, 32993, 33776, 34382, 35463, 36328, 37431, 38599, 39015, 40723, 20116, 20114, 20237, 21320, 21577, 21566, 23087, 24460, 24481, 24735, 26791, 27278, 29786, 30849, 35486, 35492, 35703, 37264, 20062, 39881, 20132, 20348, 20399, 20505, 20502, 20809, 20844, 21151, 21177, 21246, 21402, 21475, 21521, 21518, 21897, 22353, 22434, 22909, 23380, 23389, 23439, 24037, 24039, 24055, 24184, 24195, 24218, 24247, 24344, 24658, 24908, 25239, 25304, 25511, 25915, 26114, 26179, 26356, 26477, 26657, 26775, 27083, 27743, 27946, 28009, 28207, 28317, 30002, 30343, 30828, 31295, 31968, 32005, 32024, 32094, 32177, 32789, 32771, 32943, 32945, 33108, 33167, 33322, 33618, 34892, 34913, 35611, 36002, 36092, 37066, 37237, 37489, 30783, 37628, 38308, 38477, 38917, 39321, 39640, 40251, 21083, 21163, 21495, 21512, 22741, 25335, 28640, 35946, 36703, 40633, 20811, 21051, 21578, 22269, 31296, 37239, 40288, 40658, 29508, 28425, 33136, 29969, 24573, 24794, 39592, 29403, 36796, 27492, 38915, 20170, 22256, 22372, 22718, 23130, 24680, 25031, 26127, 26118, 26681, 26801, 28151, 30165, 32058, 33390, 39746, 20123, 20304, 21449, 21766, 23919, 24038, 24046, 26619, 27801, 29811, 30722, 35408, 37782, 35039, 22352, 24231, 25387, 20661, 20652, 20877, 26368, 21705, 22622, 22971, 23472, 24425, 25165, 25505, 26685, 27507, 28168, 28797, 37319, 29312, 30741, 30758, 31085, 25998, 32048, 33756, 35009, 36617, 38555, 21092, 22312, 26448, 32618, 36001, 20916, 22338, 38442, 22586, 27018, 32948, 21682, 23822, 22524, 30869, 40442, 20316, 21066, 21643, 25662, 26152, 26388, 26613, 31364, 31574, 32034, 37679, 26716, 39853, 31545, 21273, 20874, 21047, 23519, 25334, 25774, 25830, 26413, 27578, 34217, 38609, 30352, 39894, 25420, 37638, 39851, 30399, 26194, 19977, 20632, 21442, 23665, 24808, 25746, 25955, 26719, 29158, 29642, 29987, 31639, 32386, 34453, 35715, 36059, 37240, 39184, 26028, 26283, 27531, 20181, 20180, 20282, 20351, 21050, 21496, 21490, 21987, 22235, 22763, 22987, 22985, 23039, 23376, 23629, 24066, 24107, 24535, 24605, 25351, 25903, 23388, 26031, 26045, 26088, 26525, 27490, 27515, 27663, 29509, 31049, 31169, 31992, 32025, 32043, 32930, 33026, 33267, 35222, 35422, 35433, 35430, 35468, 35566, 36039, 36060, 38604, 39164, 27503, 20107, 20284, 20365, 20816, 23383, 23546, 24904, 25345, 26178, 27425, 28363, 27835, 29246, 29885, 30164, 30913, 31034, 32780, 32819, 33258, 33940, 36766, 27728, 40575, 24335, 35672, 40235, 31482, 36600, 23437, 38635, 19971, 21489, 22519, 22833, 23241, 23460, 24713, 28287, 28422, 30142, 36074, 23455, 34048, 31712, 20594, 26612, 33437, 23649, 34122, 32286, 33294, 20889, 23556, 25448, 36198, 26012, 29038, 31038, 32023, 32773, 35613, 36554, 36974, 34503, 37034, 20511, 21242, 23610, 26451, 28796, 29237, 37196, 37320, 37675, 33509, 23490, 24369, 24825, 20027, 21462, 23432, 25163, 26417, 27530, 29417, 29664, 31278, 33131, 36259, 37202, 39318, 20754, 21463, 21610, 23551, 25480, 27193, 32172, 38656, 22234, 21454, 21608, 23447, 23601, 24030, 20462, 24833, 25342, 27954, 31168, 31179, 32066, 32333, 32722, 33261, 33311, 33936, 34886, 35186, 35728, 36468, 36655, 36913, 37195, 37228, 38598, 37276, 20160, 20303, 20805, 21313, 24467, 25102, 26580, 27713, 28171, 29539, 32294, 37325, 37507, 21460, 22809, 23487, 28113, 31069, 32302, 31899, 22654, 29087, 20986, 34899, 36848, 20426, 23803, 26149, 30636, 31459, 33308, 39423, 20934, 24490, 26092, 26991, 27529, 28147, 28310, 28516, 30462, 32020, 24033, 36981, 37255, 38918, 20966, 21021, 25152, 26257, 26329, 28186, 24246, 32210, 32626, 26360, 34223, 34295, 35576, 21161, 21465, 22899, 24207, 24464, 24661, 37604, 38500, 20663, 20767, 21213, 21280, 21319, 21484, 21736, 21830, 21809, 22039, 22888, 22974, 23100, 23477, 23558, 23567, 23569, 23578, 24196, 24202, 24288, 24432, 25215, 25220, 25307, 25484, 25463, 26119, 26124, 26157, 26230, 26494, 26786, 27167, 27189, 27836, 28040, 28169, 28248, 28988, 28966, 29031, 30151, 30465, 30813, 30977, 31077, 31216, 31456, 31505, 31911, 32057, 32918, 33750, 33931, 34121, 34909, 35059, 35359, 35388, 35412, 35443, 35937, 36062, 37284, 37478, 37758, 37912, 38556, 38808, 19978, 19976, 19998, 20055, 20887, 21104, 22478, 22580, 22732, 23330, 24120, 24773, 25854, 26465, 26454, 27972, 29366, 30067, 31331, 33976, 35698, 37304, 37664, 22065, 22516, 39166, 25325, 26893, 27542, 29165, 32340, 32887, 33394, 35302, 39135, 34645, 36785, 23611, 20280, 20449, 20405, 21767, 23072, 23517, 23529, 24515, 24910, 25391, 26032, 26187, 26862, 27035, 28024, 28145, 30003, 30137, 30495, 31070, 31206, 32051, 33251, 33455, 34218, 35242, 35386, 36523, 36763, 36914, 37341, 38663, 20154, 20161, 20995, 22645, 22764, 23563, 29978, 23613, 33102, 35338, 36805, 38499, 38765, 31525, 35535, 38920, 37218, 22259, 21416, 36887, 21561, 22402, 24101, 25512, 27700, 28810, 30561, 31883, 32736, 34928, 36930, 37204, 37648, 37656, 38543, 29790, 39620, 23815, 23913, 25968, 26530, 36264, 38619, 25454, 26441, 26905, 33733, 38935, 38592, 35070, 28548, 25722, 23544, 19990, 28716, 30045, 26159, 20932, 21046, 21218, 22995, 24449, 24615, 25104, 25919, 25972, 26143, 26228, 26866, 26646, 27491, 28165, 29298, 29983, 30427, 31934, 32854, 22768, 35069, 35199, 35488, 35475, 35531, 36893, 37266, 38738, 38745, 25993, 31246, 33030, 38587, 24109, 24796, 25114, 26021, 26132, 26512, 30707, 31309, 31821, 32318, 33034, 36012, 36196, 36321, 36447, 30889, 20999, 25305, 25509, 25666, 25240, 35373, 31363, 31680, 35500, 38634, 32118, 33292, 34633, 20185, 20808, 21315, 21344, 23459, 23554, 23574, 24029, 25126, 25159, 25776, 26643, 26676, 27849, 27973, 27927, 26579, 28508, 29006, 29053, 26059, 31359, 31661, 32218, 32330, 32680, 33146, 33307, 33337, 34214, 35438, 36046, 36341, 36984, 36983, 37549, 37521, 38275, 39854, 21069, 21892, 28472, 28982, 20840, 31109, 32341, 33203, 31950, 22092, 22609, 23720, 25514, 26366, 26365, 26970, 29401, 30095, 30094, 30990, 31062, 31199, 31895, 32032, 32068, 34311, 35380, 38459, 36961, 40736, 20711, 21109, 21452, 21474, 20489, 21930, 22766, 22863, 29245, 23435, 23652, 21277, 24803, 24819, 25436, 25475, 25407, 25531, 25805, 26089, 26361, 24035, 27085, 27133, 28437, 29157, 20105, 30185, 30456, 31379, 31967, 32207, 32156, 32865, 33609, 33624, 33900, 33980, 34299, 35013, 36208, 36865, 36973, 37783, 38684, 39442, 20687, 22679, 24974, 33235, 34101, 36104, 36896, 20419, 20596, 21063, 21363, 24687, 25417, 26463, 28204, 36275, 36895, 20439, 23646, 36042, 26063, 32154, 21330, 34966, 20854, 25539, 23384, 23403, 23562, 25613, 26449, 36956, 20182, 22810, 22826, 27760, 35409, 21822, 22549, 22949, 24816, 25171, 26561, 33333, 26965, 38464, 39364, 39464, 20307, 22534, 23550, 32784, 23729, 24111, 24453, 24608, 24907, 25140, 26367, 27888, 28382, 32974, 33151, 33492, 34955, 36024, 36864, 36910, 38538, 40667, 39899, 20195, 21488, 22823, 31532, 37261, 38988, 40441, 28381, 28711, 21331, 21828, 23429, 25176, 25246, 25299, 27810, 28655, 29730, 35351, 37944, 28609, 35582, 33592, 20967, 34552, 21482, 21481, 20294, 36948, 36784, 22890, 33073, 24061, 31466, 36799, 26842, 35895, 29432, 40008, 27197, 35504, 20025, 21336, 22022, 22374, 25285, 25506, 26086, 27470, 28129, 28251, 28845, 30701, 31471, 31658, 32187, 32829, 32966, 34507, 35477, 37723, 22243, 22727, 24382, 26029, 26262, 27264, 27573, 30007, 35527, 20516, 30693, 22320, 24347, 24677, 26234, 27744, 30196, 31258, 32622, 33268, 34584, 36933, 39347, 31689, 30044, 31481, 31569, 33988, 36880, 31209, 31378, 33590, 23265, 30528, 20013, 20210, 23449, 24544, 25277, 26172, 26609, 27880, 34411, 34935, 35387, 37198, 37619, 39376, 27159, 28710, 29482, 33511, 33879, 36015, 19969, 20806, 20939, 21899, 23541, 24086, 24115, 24193, 24340, 24373, 24427, 24500, 25074, 25361, 26274, 26397, 28526, 29266, 30010, 30522, 32884, 33081, 33144, 34678, 35519, 35548, 36229, 36339, 37530, 38263, 38914, 40165, 21189, 25431, 30452, 26389, 27784, 29645, 36035, 37806, 38515, 27941, 22684, 26894, 27084, 36861, 37786, 30171, 36890, 22618, 26626, 25524, 27131, 20291, 28460, 26584, 36795, 34086, 32180, 37716, 26943, 28528, 22378, 22775, 23340, 32044, 29226, 21514, 37347, 40372, 20141, 20302, 20572, 20597, 21059, 35998, 21576, 22564, 23450, 24093, 24213, 24237, 24311, 24351, 24716, 25269, 25402, 25552, 26799, 27712, 30855, 31118, 31243, 32224, 33351, 35330, 35558, 36420, 36883, 37048, 37165, 37336, 40718, 27877, 25688, 25826, 25973, 28404, 30340, 31515, 36969, 37841, 28346, 21746, 24505, 25764, 36685, 36845, 37444, 20856, 22635, 22825, 23637, 24215, 28155, 32399, 29980, 36028, 36578, 39003, 28857, 20253, 27583, 28593, 3e4, 38651, 20814, 21520, 22581, 22615, 22956, 23648, 24466, 26007, 26460, 28193, 30331, 33759, 36077, 36884, 37117, 37709, 30757, 30778, 21162, 24230, 22303, 22900, 24594, 20498, 20826, 20908, 20941, 20992, 21776, 22612, 22616, 22871, 23445, 23798, 23947, 24764, 25237, 25645, 26481, 26691, 26812, 26847, 30423, 28120, 28271, 28059, 28783, 29128, 24403, 30168, 31095, 31561, 31572, 31570, 31958, 32113, 21040, 33891, 34153, 34276, 35342, 35588, 35910, 36367, 36867, 36879, 37913, 38518, 38957, 39472, 38360, 20685, 21205, 21516, 22530, 23566, 24999, 25758, 27934, 30643, 31461, 33012, 33796, 36947, 37509, 23776, 40199, 21311, 24471, 24499, 28060, 29305, 30563, 31167, 31716, 27602, 29420, 35501, 26627, 27233, 20984, 31361, 26932, 23626, 40182, 33515, 23493, 37193, 28702, 22136, 23663, 24775, 25958, 27788, 35930, 36929, 38931, 21585, 26311, 37389, 22856, 37027, 20869, 20045, 20970, 34201, 35598, 28760, 25466, 37707, 26978, 39348, 32260, 30071, 21335, 26976, 36575, 38627, 27741, 20108, 23612, 24336, 36841, 21250, 36049, 32905, 34425, 24319, 26085, 20083, 20837, 22914, 23615, 38894, 20219, 22922, 24525, 35469, 28641, 31152, 31074, 23527, 33905, 29483, 29105, 24180, 24565, 25467, 25754, 29123, 31896, 20035, 24316, 20043, 22492, 22178, 24745, 28611, 32013, 33021, 33075, 33215, 36786, 35223, 34468, 24052, 25226, 25773, 35207, 26487, 27874, 27966, 29750, 30772, 23110, 32629, 33453, 39340, 20467, 24259, 25309, 25490, 25943, 26479, 30403, 29260, 32972, 32954, 36649, 37197, 20493, 22521, 23186, 26757, 26995, 29028, 29437, 36023, 22770, 36064, 38506, 36889, 34687, 31204, 30695, 33833, 20271, 21093, 21338, 25293, 26575, 27850, 30333, 31636, 31893, 33334, 34180, 36843, 26333, 28448, 29190, 32283, 33707, 39361, 40614, 20989, 31665, 30834, 31672, 32903, 31560, 27368, 24161, 32908, 30033, 30048, 20843, 37474, 28300, 30330, 37271, 39658, 20240, 32624, 25244, 31567, 38309, 40169, 22138, 22617, 34532, 38588, 20276, 21028, 21322, 21453, 21467, 24070, 25644, 26001, 26495, 27710, 27726, 29256, 29359, 29677, 30036, 32321, 33324, 34281, 36009, 31684, 37318, 29033, 38930, 39151, 25405, 26217, 30058, 30436, 30928, 34115, 34542, 21290, 21329, 21542, 22915, 24199, 24444, 24754, 25161, 25209, 25259, 26e3, 27604, 27852, 30130, 30382, 30865, 31192, 32203, 32631, 32933, 34987, 35513, 36027, 36991, 38750, 39131, 27147, 31800, 20633, 23614, 24494, 26503, 27608, 29749, 30473, 32654, 40763, 26570, 31255, 21305, 30091, 39661, 24422, 33181, 33777, 32920, 24380, 24517, 30050, 31558, 36924, 26727, 23019, 23195, 32016, 30334, 35628, 20469, 24426, 27161, 27703, 28418, 29922, 31080, 34920, 35413, 35961, 24287, 25551, 30149, 31186, 33495, 37672, 37618, 33948, 34541, 39981, 21697, 24428, 25996, 27996, 28693, 36007, 36051, 38971, 25935, 29942, 19981, 20184, 22496, 22827, 23142, 23500, 20904, 24067, 24220, 24598, 25206, 25975, 26023, 26222, 28014, 29238, 31526, 33104, 33178, 33433, 35676, 36e3, 36070, 36212, 38428, 38468, 20398, 25771, 27494, 33310, 33889, 34154, 37096, 23553, 26963, 39080, 33914, 34135, 20239, 21103, 24489, 24133, 26381, 31119, 33145, 35079, 35206, 28149, 24343, 25173, 27832, 20175, 29289, 39826, 20998, 21563, 22132, 22707, 24996, 25198, 28954, 22894, 31881, 31966, 32027, 38640, 25991, 32862, 19993, 20341, 20853, 22592, 24163, 24179, 24330, 26564, 20006, 34109, 38281, 38491, 31859, 38913, 20731, 22721, 30294, 30887, 21029, 30629, 34065, 31622, 20559, 22793, 29255, 31687, 32232, 36794, 36820, 36941, 20415, 21193, 23081, 24321, 38829, 20445, 33303, 37610, 22275, 25429, 27497, 29995, 35036, 36628, 31298, 21215, 22675, 24917, 25098, 26286, 27597, 31807, 33769, 20515, 20472, 21253, 21574, 22577, 22857, 23453, 23792, 23791, 23849, 24214, 25265, 25447, 25918, 26041, 26379, 27861, 27873, 28921, 30770, 32299, 32990, 33459, 33804, 34028, 34562, 35090, 35370, 35914, 37030, 37586, 39165, 40179, 40300, 20047, 20129, 20621, 21078, 22346, 22952, 24125, 24536, 24537, 25151, 26292, 26395, 26576, 26834, 20882, 32033, 32938, 33192, 35584, 35980, 36031, 37502, 38450, 21536, 38956, 21271, 20693, 21340, 22696, 25778, 26420, 29287, 30566, 31302, 37350, 21187, 27809, 27526, 22528, 24140, 22868, 26412, 32763, 20961, 30406, 25705, 30952, 39764, 40635, 22475, 22969, 26151, 26522, 27598, 21737, 27097, 24149, 33180, 26517, 39850, 26622, 40018, 26717, 20134, 20451, 21448, 25273, 26411, 27819, 36804, 20397, 32365, 40639, 19975, 24930, 28288, 28459, 34067, 21619, 26410, 39749, 24051, 31637, 23724, 23494, 34588, 28234, 34001, 31252, 33032, 22937, 31885, 27665, 30496, 21209, 22818, 28961, 29279, 30683, 38695, 40289, 26891, 23167, 23064, 20901, 21517, 21629, 26126, 30431, 36855, 37528, 40180, 23018, 29277, 28357, 20813, 26825, 32191, 32236, 38754, 40634, 25720, 27169, 33538, 22916, 23391, 27611, 29467, 30450, 32178, 32791, 33945, 20786, 26408, 40665, 30446, 26466, 21247, 39173, 23588, 25147, 31870, 36016, 21839, 24758, 32011, 38272, 21249, 20063, 20918, 22812, 29242, 32822, 37326, 24357, 30690, 21380, 24441, 32004, 34220, 35379, 36493, 38742, 26611, 34222, 37971, 24841, 24840, 27833, 30290, 35565, 36664, 21807, 20305, 20778, 21191, 21451, 23461, 24189, 24736, 24962, 25558, 26377, 26586, 28263, 28044, 29494, 29495, 30001, 31056, 35029, 35480, 36938, 37009, 37109, 38596, 34701, 22805, 20104, 20313, 19982, 35465, 36671, 38928, 20653, 24188, 22934, 23481, 24248, 25562, 25594, 25793, 26332, 26954, 27096, 27915, 28342, 29076, 29992, 31407, 32650, 32768, 33865, 33993, 35201, 35617, 36362, 36965, 38525, 39178, 24958, 25233, 27442, 27779, 28020, 32716, 32764, 28096, 32645, 34746, 35064, 26469, 33713, 38972, 38647, 27931, 32097, 33853, 37226, 20081, 21365, 23888, 27396, 28651, 34253, 34349, 35239, 21033, 21519, 23653, 26446, 26792, 29702, 29827, 30178, 35023, 35041, 37324, 38626, 38520, 24459, 29575, 31435, 33870, 25504, 30053, 21129, 27969, 28316, 29705, 30041, 30827, 31890, 38534, 31452, 40845, 20406, 24942, 26053, 34396, 20102, 20142, 20698, 20001, 20940, 23534, 26009, 26753, 28092, 29471, 30274, 30637, 31260, 31975, 33391, 35538, 36988, 37327, 38517, 38936, 21147, 32209, 20523, 21400, 26519, 28107, 29136, 29747, 33256, 36650, 38563, 40023, 40607, 29792, 22593, 28057, 32047, 39006, 20196, 20278, 20363, 20919, 21169, 23994, 24604, 29618, 31036, 33491, 37428, 38583, 38646, 38666, 40599, 40802, 26278, 27508, 21015, 21155, 28872, 35010, 24265, 24651, 24976, 28451, 29001, 31806, 32244, 32879, 34030, 36899, 37676, 21570, 39791, 27347, 28809, 36034, 36335, 38706, 21172, 23105, 24266, 24324, 26391, 27004, 27028, 28010, 28431, 29282, 29436, 31725, 32769, 32894, 34635, 37070, 20845, 40595, 31108, 32907, 37682, 35542, 20525, 21644, 35441, 27498, 36036, 33031, 24785, 26528, 40434, 20121, 20120, 39952, 35435, 34241, 34152, 26880, 28286, 30871, 33109, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 24332, 19984, 19989, 20010, 20017, 20022, 20028, 20031, 20034, 20054, 20056, 20098, 20101, 35947, 20106, 33298, 24333, 20110, 20126, 20127, 20128, 20130, 20144, 20147, 20150, 20174, 20173, 20164, 20166, 20162, 20183, 20190, 20205, 20191, 20215, 20233, 20314, 20272, 20315, 20317, 20311, 20295, 20342, 20360, 20367, 20376, 20347, 20329, 20336, 20369, 20335, 20358, 20374, 20760, 20436, 20447, 20430, 20440, 20443, 20433, 20442, 20432, 20452, 20453, 20506, 20520, 20500, 20522, 20517, 20485, 20252, 20470, 20513, 20521, 20524, 20478, 20463, 20497, 20486, 20547, 20551, 26371, 20565, 20560, 20552, 20570, 20566, 20588, 20600, 20608, 20634, 20613, 20660, 20658, 20681, 20682, 20659, 20674, 20694, 20702, 20709, 20717, 20707, 20718, 20729, 20725, 20745, 20737, 20738, 20758, 20757, 20756, 20762, 20769, 20794, 20791, 20796, 20795, 20799, 20800, 20818, 20812, 20820, 20834, 31480, 20841, 20842, 20846, 20864, 20866, 22232, 20876, 20873, 20879, 20881, 20883, 20885, 20886, 20900, 20902, 20898, 20905, 20906, 20907, 20915, 20913, 20914, 20912, 20917, 20925, 20933, 20937, 20955, 20960, 34389, 20969, 20973, 20976, 20981, 20990, 20996, 21003, 21012, 21006, 21031, 21034, 21038, 21043, 21049, 21071, 21060, 21067, 21068, 21086, 21076, 21098, 21108, 21097, 21107, 21119, 21117, 21133, 21140, 21138, 21105, 21128, 21137, 36776, 36775, 21164, 21165, 21180, 21173, 21185, 21197, 21207, 21214, 21219, 21222, 39149, 21216, 21235, 21237, 21240, 21241, 21254, 21256, 30008, 21261, 21264, 21263, 21269, 21274, 21283, 21295, 21297, 21299, 21304, 21312, 21318, 21317, 19991, 21321, 21325, 20950, 21342, 21353, 21358, 22808, 21371, 21367, 21378, 21398, 21408, 21414, 21413, 21422, 21424, 21430, 21443, 31762, 38617, 21471, 26364, 29166, 21486, 21480, 21485, 21498, 21505, 21565, 21568, 21548, 21549, 21564, 21550, 21558, 21545, 21533, 21582, 21647, 21621, 21646, 21599, 21617, 21623, 21616, 21650, 21627, 21632, 21622, 21636, 21648, 21638, 21703, 21666, 21688, 21669, 21676, 21700, 21704, 21672, 21675, 21698, 21668, 21694, 21692, 21720, 21733, 21734, 21775, 21780, 21757, 21742, 21741, 21754, 21730, 21817, 21824, 21859, 21836, 21806, 21852, 21829, 21846, 21847, 21816, 21811, 21853, 21913, 21888, 21679, 21898, 21919, 21883, 21886, 21912, 21918, 21934, 21884, 21891, 21929, 21895, 21928, 21978, 21957, 21983, 21956, 21980, 21988, 21972, 22036, 22007, 22038, 22014, 22013, 22043, 22009, 22094, 22096, 29151, 22068, 22070, 22066, 22072, 22123, 22116, 22063, 22124, 22122, 22150, 22144, 22154, 22176, 22164, 22159, 22181, 22190, 22198, 22196, 22210, 22204, 22209, 22211, 22208, 22216, 22222, 22225, 22227, 22231, 22254, 22265, 22272, 22271, 22276, 22281, 22280, 22283, 22285, 22291, 22296, 22294, 21959, 22300, 22310, 22327, 22328, 22350, 22331, 22336, 22351, 22377, 22464, 22408, 22369, 22399, 22409, 22419, 22432, 22451, 22436, 22442, 22448, 22467, 22470, 22484, 22482, 22483, 22538, 22486, 22499, 22539, 22553, 22557, 22642, 22561, 22626, 22603, 22640, 27584, 22610, 22589, 22649, 22661, 22713, 22687, 22699, 22714, 22750, 22715, 22712, 22702, 22725, 22739, 22737, 22743, 22745, 22744, 22757, 22748, 22756, 22751, 22767, 22778, 22777, 22779, 22780, 22781, 22786, 22794, 22800, 22811, 26790, 22821, 22828, 22829, 22834, 22840, 22846, 31442, 22869, 22864, 22862, 22874, 22872, 22882, 22880, 22887, 22892, 22889, 22904, 22913, 22941, 20318, 20395, 22947, 22962, 22982, 23016, 23004, 22925, 23001, 23002, 23077, 23071, 23057, 23068, 23049, 23066, 23104, 23148, 23113, 23093, 23094, 23138, 23146, 23194, 23228, 23230, 23243, 23234, 23229, 23267, 23255, 23270, 23273, 23254, 23290, 23291, 23308, 23307, 23318, 23346, 23248, 23338, 23350, 23358, 23363, 23365, 23360, 23377, 23381, 23386, 23387, 23397, 23401, 23408, 23411, 23413, 23416, 25992, 23418, 23424, 23427, 23462, 23480, 23491, 23495, 23497, 23508, 23504, 23524, 23526, 23522, 23518, 23525, 23531, 23536, 23542, 23539, 23557, 23559, 23560, 23565, 23571, 23584, 23586, 23592, 23608, 23609, 23617, 23622, 23630, 23635, 23632, 23631, 23409, 23660, 23662, 20066, 23670, 23673, 23692, 23697, 23700, 22939, 23723, 23739, 23734, 23740, 23735, 23749, 23742, 23751, 23769, 23785, 23805, 23802, 23789, 23948, 23786, 23819, 23829, 23831, 23900, 23839, 23835, 23825, 23828, 23842, 23834, 23833, 23832, 23884, 23890, 23886, 23883, 23916, 23923, 23926, 23943, 23940, 23938, 23970, 23965, 23980, 23982, 23997, 23952, 23991, 23996, 24009, 24013, 24019, 24018, 24022, 24027, 24043, 24050, 24053, 24075, 24090, 24089, 24081, 24091, 24118, 24119, 24132, 24131, 24128, 24142, 24151, 24148, 24159, 24162, 24164, 24135, 24181, 24182, 24186, 40636, 24191, 24224, 24257, 24258, 24264, 24272, 24271, 24278, 24291, 24285, 24282, 24283, 24290, 24289, 24296, 24297, 24300, 24305, 24307, 24304, 24308, 24312, 24318, 24323, 24329, 24413, 24412, 24331, 24337, 24342, 24361, 24365, 24376, 24385, 24392, 24396, 24398, 24367, 24401, 24406, 24407, 24409, 24417, 24429, 24435, 24439, 24451, 24450, 24447, 24458, 24456, 24465, 24455, 24478, 24473, 24472, 24480, 24488, 24493, 24508, 24534, 24571, 24548, 24568, 24561, 24541, 24755, 24575, 24609, 24672, 24601, 24592, 24617, 24590, 24625, 24603, 24597, 24619, 24614, 24591, 24634, 24666, 24641, 24682, 24695, 24671, 24650, 24646, 24653, 24675, 24643, 24676, 24642, 24684, 24683, 24665, 24705, 24717, 24807, 24707, 24730, 24708, 24731, 24726, 24727, 24722, 24743, 24715, 24801, 24760, 24800, 24787, 24756, 24560, 24765, 24774, 24757, 24792, 24909, 24853, 24838, 24822, 24823, 24832, 24820, 24826, 24835, 24865, 24827, 24817, 24845, 24846, 24903, 24894, 24872, 24871, 24906, 24895, 24892, 24876, 24884, 24893, 24898, 24900, 24947, 24951, 24920, 24921, 24922, 24939, 24948, 24943, 24933, 24945, 24927, 24925, 24915, 24949, 24985, 24982, 24967, 25004, 24980, 24986, 24970, 24977, 25003, 25006, 25036, 25034, 25033, 25079, 25032, 25027, 25030, 25018, 25035, 32633, 25037, 25062, 25059, 25078, 25082, 25076, 25087, 25085, 25084, 25086, 25088, 25096, 25097, 25101, 25100, 25108, 25115, 25118, 25121, 25130, 25134, 25136, 25138, 25139, 25153, 25166, 25182, 25187, 25179, 25184, 25192, 25212, 25218, 25225, 25214, 25234, 25235, 25238, 25300, 25219, 25236, 25303, 25297, 25275, 25295, 25343, 25286, 25812, 25288, 25308, 25292, 25290, 25282, 25287, 25243, 25289, 25356, 25326, 25329, 25383, 25346, 25352, 25327, 25333, 25424, 25406, 25421, 25628, 25423, 25494, 25486, 25472, 25515, 25462, 25507, 25487, 25481, 25503, 25525, 25451, 25449, 25534, 25577, 25536, 25542, 25571, 25545, 25554, 25590, 25540, 25622, 25652, 25606, 25619, 25638, 25654, 25885, 25623, 25640, 25615, 25703, 25711, 25718, 25678, 25898, 25749, 25747, 25765, 25769, 25736, 25788, 25818, 25810, 25797, 25799, 25787, 25816, 25794, 25841, 25831, 33289, 25824, 25825, 25260, 25827, 25839, 25900, 25846, 25844, 25842, 25850, 25856, 25853, 25880, 25884, 25861, 25892, 25891, 25899, 25908, 25909, 25911, 25910, 25912, 30027, 25928, 25942, 25941, 25933, 25944, 25950, 25949, 25970, 25976, 25986, 25987, 35722, 26011, 26015, 26027, 26039, 26051, 26054, 26049, 26052, 26060, 26066, 26075, 26073, 26080, 26081, 26097, 26482, 26122, 26115, 26107, 26483, 26165, 26166, 26164, 26140, 26191, 26180, 26185, 26177, 26206, 26205, 26212, 26215, 26216, 26207, 26210, 26224, 26243, 26248, 26254, 26249, 26244, 26264, 26269, 26305, 26297, 26313, 26302, 26300, 26308, 26296, 26326, 26330, 26336, 26175, 26342, 26345, 26352, 26357, 26359, 26383, 26390, 26398, 26406, 26407, 38712, 26414, 26431, 26422, 26433, 26424, 26423, 26438, 26462, 26464, 26457, 26467, 26468, 26505, 26480, 26537, 26492, 26474, 26508, 26507, 26534, 26529, 26501, 26551, 26607, 26548, 26604, 26547, 26601, 26552, 26596, 26590, 26589, 26594, 26606, 26553, 26574, 26566, 26599, 27292, 26654, 26694, 26665, 26688, 26701, 26674, 26702, 26803, 26667, 26713, 26723, 26743, 26751, 26783, 26767, 26797, 26772, 26781, 26779, 26755, 27310, 26809, 26740, 26805, 26784, 26810, 26895, 26765, 26750, 26881, 26826, 26888, 26840, 26914, 26918, 26849, 26892, 26829, 26836, 26855, 26837, 26934, 26898, 26884, 26839, 26851, 26917, 26873, 26848, 26863, 26920, 26922, 26906, 26915, 26913, 26822, 27001, 26999, 26972, 27e3, 26987, 26964, 27006, 26990, 26937, 26996, 26941, 26969, 26928, 26977, 26974, 26973, 27009, 26986, 27058, 27054, 27088, 27071, 27073, 27091, 27070, 27086, 23528, 27082, 27101, 27067, 27075, 27047, 27182, 27025, 27040, 27036, 27029, 27060, 27102, 27112, 27138, 27163, 27135, 27402, 27129, 27122, 27111, 27141, 27057, 27166, 27117, 27156, 27115, 27146, 27154, 27329, 27171, 27155, 27204, 27148, 27250, 27190, 27256, 27207, 27234, 27225, 27238, 27208, 27192, 27170, 27280, 27277, 27296, 27268, 27298, 27299, 27287, 34327, 27323, 27331, 27330, 27320, 27315, 27308, 27358, 27345, 27359, 27306, 27354, 27370, 27387, 27397, 34326, 27386, 27410, 27414, 39729, 27423, 27448, 27447, 30428, 27449, 39150, 27463, 27459, 27465, 27472, 27481, 27476, 27483, 27487, 27489, 27512, 27513, 27519, 27520, 27524, 27523, 27533, 27544, 27541, 27550, 27556, 27562, 27563, 27567, 27570, 27569, 27571, 27575, 27580, 27590, 27595, 27603, 27615, 27628, 27627, 27635, 27631, 40638, 27656, 27667, 27668, 27675, 27684, 27683, 27742, 27733, 27746, 27754, 27778, 27789, 27802, 27777, 27803, 27774, 27752, 27763, 27794, 27792, 27844, 27889, 27859, 27837, 27863, 27845, 27869, 27822, 27825, 27838, 27834, 27867, 27887, 27865, 27882, 27935, 34893, 27958, 27947, 27965, 27960, 27929, 27957, 27955, 27922, 27916, 28003, 28051, 28004, 27994, 28025, 27993, 28046, 28053, 28644, 28037, 28153, 28181, 28170, 28085, 28103, 28134, 28088, 28102, 28140, 28126, 28108, 28136, 28114, 28101, 28154, 28121, 28132, 28117, 28138, 28142, 28205, 28270, 28206, 28185, 28274, 28255, 28222, 28195, 28267, 28203, 28278, 28237, 28191, 28227, 28218, 28238, 28196, 28415, 28189, 28216, 28290, 28330, 28312, 28361, 28343, 28371, 28349, 28335, 28356, 28338, 28372, 28373, 28303, 28325, 28354, 28319, 28481, 28433, 28748, 28396, 28408, 28414, 28479, 28402, 28465, 28399, 28466, 28364, 28478, 28435, 28407, 28550, 28538, 28536, 28545, 28544, 28527, 28507, 28659, 28525, 28546, 28540, 28504, 28558, 28561, 28610, 28518, 28595, 28579, 28577, 28580, 28601, 28614, 28586, 28639, 28629, 28652, 28628, 28632, 28657, 28654, 28635, 28681, 28683, 28666, 28689, 28673, 28687, 28670, 28699, 28698, 28532, 28701, 28696, 28703, 28720, 28734, 28722, 28753, 28771, 28825, 28818, 28847, 28913, 28844, 28856, 28851, 28846, 28895, 28875, 28893, 28889, 28937, 28925, 28956, 28953, 29029, 29013, 29064, 29030, 29026, 29004, 29014, 29036, 29071, 29179, 29060, 29077, 29096, 29100, 29143, 29113, 29118, 29138, 29129, 29140, 29134, 29152, 29164, 29159, 29173, 29180, 29177, 29183, 29197, 29200, 29211, 29224, 29229, 29228, 29232, 29234, 29243, 29244, 29247, 29248, 29254, 29259, 29272, 29300, 29310, 29314, 29313, 29319, 29330, 29334, 29346, 29351, 29369, 29362, 29379, 29382, 29380, 29390, 29394, 29410, 29408, 29409, 29433, 29431, 20495, 29463, 29450, 29468, 29462, 29469, 29492, 29487, 29481, 29477, 29502, 29518, 29519, 40664, 29527, 29546, 29544, 29552, 29560, 29557, 29563, 29562, 29640, 29619, 29646, 29627, 29632, 29669, 29678, 29662, 29858, 29701, 29807, 29733, 29688, 29746, 29754, 29781, 29759, 29791, 29785, 29761, 29788, 29801, 29808, 29795, 29802, 29814, 29822, 29835, 29854, 29863, 29898, 29903, 29908, 29681, 29920, 29923, 29927, 29929, 29934, 29938, 29936, 29937, 29944, 29943, 29956, 29955, 29957, 29964, 29966, 29965, 29973, 29971, 29982, 29990, 29996, 30012, 30020, 30029, 30026, 30025, 30043, 30022, 30042, 30057, 30052, 30055, 30059, 30061, 30072, 30070, 30086, 30087, 30068, 30090, 30089, 30082, 30100, 30106, 30109, 30117, 30115, 30146, 30131, 30147, 30133, 30141, 30136, 30140, 30129, 30157, 30154, 30162, 30169, 30179, 30174, 30206, 30207, 30204, 30209, 30192, 30202, 30194, 30195, 30219, 30221, 30217, 30239, 30247, 30240, 30241, 30242, 30244, 30260, 30256, 30267, 30279, 30280, 30278, 30300, 30296, 30305, 30306, 30312, 30313, 30314, 30311, 30316, 30320, 30322, 30326, 30328, 30332, 30336, 30339, 30344, 30347, 30350, 30358, 30355, 30361, 30362, 30384, 30388, 30392, 30393, 30394, 30402, 30413, 30422, 30418, 30430, 30433, 30437, 30439, 30442, 34351, 30459, 30472, 30471, 30468, 30505, 30500, 30494, 30501, 30502, 30491, 30519, 30520, 30535, 30554, 30568, 30571, 30555, 30565, 30591, 30590, 30585, 30606, 30603, 30609, 30624, 30622, 30640, 30646, 30649, 30655, 30652, 30653, 30651, 30663, 30669, 30679, 30682, 30684, 30691, 30702, 30716, 30732, 30738, 31014, 30752, 31018, 30789, 30862, 30836, 30854, 30844, 30874, 30860, 30883, 30901, 30890, 30895, 30929, 30918, 30923, 30932, 30910, 30908, 30917, 30922, 30956, 30951, 30938, 30973, 30964, 30983, 30994, 30993, 31001, 31020, 31019, 31040, 31072, 31063, 31071, 31066, 31061, 31059, 31098, 31103, 31114, 31133, 31143, 40779, 31146, 31150, 31155, 31161, 31162, 31177, 31189, 31207, 31212, 31201, 31203, 31240, 31245, 31256, 31257, 31264, 31263, 31104, 31281, 31291, 31294, 31287, 31299, 31319, 31305, 31329, 31330, 31337, 40861, 31344, 31353, 31357, 31368, 31383, 31381, 31384, 31382, 31401, 31432, 31408, 31414, 31429, 31428, 31423, 36995, 31431, 31434, 31437, 31439, 31445, 31443, 31449, 31450, 31453, 31457, 31458, 31462, 31469, 31472, 31490, 31503, 31498, 31494, 31539, 31512, 31513, 31518, 31541, 31528, 31542, 31568, 31610, 31492, 31565, 31499, 31564, 31557, 31605, 31589, 31604, 31591, 31600, 31601, 31596, 31598, 31645, 31640, 31647, 31629, 31644, 31642, 31627, 31634, 31631, 31581, 31641, 31691, 31681, 31692, 31695, 31668, 31686, 31709, 31721, 31761, 31764, 31718, 31717, 31840, 31744, 31751, 31763, 31731, 31735, 31767, 31757, 31734, 31779, 31783, 31786, 31775, 31799, 31787, 31805, 31820, 31811, 31828, 31823, 31808, 31824, 31832, 31839, 31844, 31830, 31845, 31852, 31861, 31875, 31888, 31908, 31917, 31906, 31915, 31905, 31912, 31923, 31922, 31921, 31918, 31929, 31933, 31936, 31941, 31938, 31960, 31954, 31964, 31970, 39739, 31983, 31986, 31988, 31990, 31994, 32006, 32002, 32028, 32021, 32010, 32069, 32075, 32046, 32050, 32063, 32053, 32070, 32115, 32086, 32078, 32114, 32104, 32110, 32079, 32099, 32147, 32137, 32091, 32143, 32125, 32155, 32186, 32174, 32163, 32181, 32199, 32189, 32171, 32317, 32162, 32175, 32220, 32184, 32159, 32176, 32216, 32221, 32228, 32222, 32251, 32242, 32225, 32261, 32266, 32291, 32289, 32274, 32305, 32287, 32265, 32267, 32290, 32326, 32358, 32315, 32309, 32313, 32323, 32311, 32306, 32314, 32359, 32349, 32342, 32350, 32345, 32346, 32377, 32362, 32361, 32380, 32379, 32387, 32213, 32381, 36782, 32383, 32392, 32393, 32396, 32402, 32400, 32403, 32404, 32406, 32398, 32411, 32412, 32568, 32570, 32581, 32588, 32589, 32590, 32592, 32593, 32597, 32596, 32600, 32607, 32608, 32616, 32617, 32615, 32632, 32642, 32646, 32643, 32648, 32647, 32652, 32660, 32670, 32669, 32666, 32675, 32687, 32690, 32697, 32686, 32694, 32696, 35697, 32709, 32710, 32714, 32725, 32724, 32737, 32742, 32745, 32755, 32761, 39132, 32774, 32772, 32779, 32786, 32792, 32793, 32796, 32801, 32808, 32831, 32827, 32842, 32838, 32850, 32856, 32858, 32863, 32866, 32872, 32883, 32882, 32880, 32886, 32889, 32893, 32895, 32900, 32902, 32901, 32923, 32915, 32922, 32941, 20880, 32940, 32987, 32997, 32985, 32989, 32964, 32986, 32982, 33033, 33007, 33009, 33051, 33065, 33059, 33071, 33099, 38539, 33094, 33086, 33107, 33105, 33020, 33137, 33134, 33125, 33126, 33140, 33155, 33160, 33162, 33152, 33154, 33184, 33173, 33188, 33187, 33119, 33171, 33193, 33200, 33205, 33214, 33208, 33213, 33216, 33218, 33210, 33225, 33229, 33233, 33241, 33240, 33224, 33242, 33247, 33248, 33255, 33274, 33275, 33278, 33281, 33282, 33285, 33287, 33290, 33293, 33296, 33302, 33321, 33323, 33336, 33331, 33344, 33369, 33368, 33373, 33370, 33375, 33380, 33378, 33384, 33386, 33387, 33326, 33393, 33399, 33400, 33406, 33421, 33426, 33451, 33439, 33467, 33452, 33505, 33507, 33503, 33490, 33524, 33523, 33530, 33683, 33539, 33531, 33529, 33502, 33542, 33500, 33545, 33497, 33589, 33588, 33558, 33586, 33585, 33600, 33593, 33616, 33605, 33583, 33579, 33559, 33560, 33669, 33690, 33706, 33695, 33698, 33686, 33571, 33678, 33671, 33674, 33660, 33717, 33651, 33653, 33696, 33673, 33704, 33780, 33811, 33771, 33742, 33789, 33795, 33752, 33803, 33729, 33783, 33799, 33760, 33778, 33805, 33826, 33824, 33725, 33848, 34054, 33787, 33901, 33834, 33852, 34138, 33924, 33911, 33899, 33965, 33902, 33922, 33897, 33862, 33836, 33903, 33913, 33845, 33994, 33890, 33977, 33983, 33951, 34009, 33997, 33979, 34010, 34e3, 33985, 33990, 34006, 33953, 34081, 34047, 34036, 34071, 34072, 34092, 34079, 34069, 34068, 34044, 34112, 34147, 34136, 34120, 34113, 34306, 34123, 34133, 34176, 34212, 34184, 34193, 34186, 34216, 34157, 34196, 34203, 34282, 34183, 34204, 34167, 34174, 34192, 34249, 34234, 34255, 34233, 34256, 34261, 34269, 34277, 34268, 34297, 34314, 34323, 34315, 34302, 34298, 34310, 34338, 34330, 34352, 34367, 34381, 20053, 34388, 34399, 34407, 34417, 34451, 34467, 34473, 34474, 34443, 34444, 34486, 34479, 34500, 34502, 34480, 34505, 34851, 34475, 34516, 34526, 34537, 34540, 34527, 34523, 34543, 34578, 34566, 34568, 34560, 34563, 34555, 34577, 34569, 34573, 34553, 34570, 34612, 34623, 34615, 34619, 34597, 34601, 34586, 34656, 34655, 34680, 34636, 34638, 34676, 34647, 34664, 34670, 34649, 34643, 34659, 34666, 34821, 34722, 34719, 34690, 34735, 34763, 34749, 34752, 34768, 38614, 34731, 34756, 34739, 34759, 34758, 34747, 34799, 34802, 34784, 34831, 34829, 34814, 34806, 34807, 34830, 34770, 34833, 34838, 34837, 34850, 34849, 34865, 34870, 34873, 34855, 34875, 34884, 34882, 34898, 34905, 34910, 34914, 34923, 34945, 34942, 34974, 34933, 34941, 34997, 34930, 34946, 34967, 34962, 34990, 34969, 34978, 34957, 34980, 34992, 35007, 34993, 35011, 35012, 35028, 35032, 35033, 35037, 35065, 35074, 35068, 35060, 35048, 35058, 35076, 35084, 35082, 35091, 35139, 35102, 35109, 35114, 35115, 35137, 35140, 35131, 35126, 35128, 35148, 35101, 35168, 35166, 35174, 35172, 35181, 35178, 35183, 35188, 35191, 35198, 35203, 35208, 35210, 35219, 35224, 35233, 35241, 35238, 35244, 35247, 35250, 35258, 35261, 35263, 35264, 35290, 35292, 35293, 35303, 35316, 35320, 35331, 35350, 35344, 35340, 35355, 35357, 35365, 35382, 35393, 35419, 35410, 35398, 35400, 35452, 35437, 35436, 35426, 35461, 35458, 35460, 35496, 35489, 35473, 35493, 35494, 35482, 35491, 35524, 35533, 35522, 35546, 35563, 35571, 35559, 35556, 35569, 35604, 35552, 35554, 35575, 35550, 35547, 35596, 35591, 35610, 35553, 35606, 35600, 35607, 35616, 35635, 38827, 35622, 35627, 35646, 35624, 35649, 35660, 35663, 35662, 35657, 35670, 35675, 35674, 35691, 35679, 35692, 35695, 35700, 35709, 35712, 35724, 35726, 35730, 35731, 35734, 35737, 35738, 35898, 35905, 35903, 35912, 35916, 35918, 35920, 35925, 35938, 35948, 35960, 35962, 35970, 35977, 35973, 35978, 35981, 35982, 35988, 35964, 35992, 25117, 36013, 36010, 36029, 36018, 36019, 36014, 36022, 36040, 36033, 36068, 36067, 36058, 36093, 36090, 36091, 36100, 36101, 36106, 36103, 36111, 36109, 36112, 40782, 36115, 36045, 36116, 36118, 36199, 36205, 36209, 36211, 36225, 36249, 36290, 36286, 36282, 36303, 36314, 36310, 36300, 36315, 36299, 36330, 36331, 36319, 36323, 36348, 36360, 36361, 36351, 36381, 36382, 36368, 36383, 36418, 36405, 36400, 36404, 36426, 36423, 36425, 36428, 36432, 36424, 36441, 36452, 36448, 36394, 36451, 36437, 36470, 36466, 36476, 36481, 36487, 36485, 36484, 36491, 36490, 36499, 36497, 36500, 36505, 36522, 36513, 36524, 36528, 36550, 36529, 36542, 36549, 36552, 36555, 36571, 36579, 36604, 36603, 36587, 36606, 36618, 36613, 36629, 36626, 36633, 36627, 36636, 36639, 36635, 36620, 36646, 36659, 36667, 36665, 36677, 36674, 36670, 36684, 36681, 36678, 36686, 36695, 36700, 36706, 36707, 36708, 36764, 36767, 36771, 36781, 36783, 36791, 36826, 36837, 36834, 36842, 36847, 36999, 36852, 36869, 36857, 36858, 36881, 36885, 36897, 36877, 36894, 36886, 36875, 36903, 36918, 36917, 36921, 36856, 36943, 36944, 36945, 36946, 36878, 36937, 36926, 36950, 36952, 36958, 36968, 36975, 36982, 38568, 36978, 36994, 36989, 36993, 36992, 37002, 37001, 37007, 37032, 37039, 37041, 37045, 37090, 37092, 25160, 37083, 37122, 37138, 37145, 37170, 37168, 37194, 37206, 37208, 37219, 37221, 37225, 37235, 37234, 37259, 37257, 37250, 37282, 37291, 37295, 37290, 37301, 37300, 37306, 37312, 37313, 37321, 37323, 37328, 37334, 37343, 37345, 37339, 37372, 37365, 37366, 37406, 37375, 37396, 37420, 37397, 37393, 37470, 37463, 37445, 37449, 37476, 37448, 37525, 37439, 37451, 37456, 37532, 37526, 37523, 37531, 37466, 37583, 37561, 37559, 37609, 37647, 37626, 37700, 37678, 37657, 37666, 37658, 37667, 37690, 37685, 37691, 37724, 37728, 37756, 37742, 37718, 37808, 37804, 37805, 37780, 37817, 37846, 37847, 37864, 37861, 37848, 37827, 37853, 37840, 37832, 37860, 37914, 37908, 37907, 37891, 37895, 37904, 37942, 37931, 37941, 37921, 37946, 37953, 37970, 37956, 37979, 37984, 37986, 37982, 37994, 37417, 38e3, 38005, 38007, 38013, 37978, 38012, 38014, 38017, 38015, 38274, 38279, 38282, 38292, 38294, 38296, 38297, 38304, 38312, 38311, 38317, 38332, 38331, 38329, 38334, 38346, 28662, 38339, 38349, 38348, 38357, 38356, 38358, 38364, 38369, 38373, 38370, 38433, 38440, 38446, 38447, 38466, 38476, 38479, 38475, 38519, 38492, 38494, 38493, 38495, 38502, 38514, 38508, 38541, 38552, 38549, 38551, 38570, 38567, 38577, 38578, 38576, 38580, 38582, 38584, 38585, 38606, 38603, 38601, 38605, 35149, 38620, 38669, 38613, 38649, 38660, 38662, 38664, 38675, 38670, 38673, 38671, 38678, 38681, 38692, 38698, 38704, 38713, 38717, 38718, 38724, 38726, 38728, 38722, 38729, 38748, 38752, 38756, 38758, 38760, 21202, 38763, 38769, 38777, 38789, 38780, 38785, 38778, 38790, 38795, 38799, 38800, 38812, 38824, 38822, 38819, 38835, 38836, 38851, 38854, 38856, 38859, 38876, 38893, 40783, 38898, 31455, 38902, 38901, 38927, 38924, 38968, 38948, 38945, 38967, 38973, 38982, 38991, 38987, 39019, 39023, 39024, 39025, 39028, 39027, 39082, 39087, 39089, 39094, 39108, 39107, 39110, 39145, 39147, 39171, 39177, 39186, 39188, 39192, 39201, 39197, 39198, 39204, 39200, 39212, 39214, 39229, 39230, 39234, 39241, 39237, 39248, 39243, 39249, 39250, 39244, 39253, 39319, 39320, 39333, 39341, 39342, 39356, 39391, 39387, 39389, 39384, 39377, 39405, 39406, 39409, 39410, 39419, 39416, 39425, 39439, 39429, 39394, 39449, 39467, 39479, 39493, 39490, 39488, 39491, 39486, 39509, 39501, 39515, 39511, 39519, 39522, 39525, 39524, 39529, 39531, 39530, 39597, 39600, 39612, 39616, 39631, 39633, 39635, 39636, 39646, 39647, 39650, 39651, 39654, 39663, 39659, 39662, 39668, 39665, 39671, 39675, 39686, 39704, 39706, 39711, 39714, 39715, 39717, 39719, 39720, 39721, 39722, 39726, 39727, 39730, 39748, 39747, 39759, 39757, 39758, 39761, 39768, 39796, 39827, 39811, 39825, 39830, 39831, 39839, 39840, 39848, 39860, 39872, 39882, 39865, 39878, 39887, 39889, 39890, 39907, 39906, 39908, 39892, 39905, 39994, 39922, 39921, 39920, 39957, 39956, 39945, 39955, 39948, 39942, 39944, 39954, 39946, 39940, 39982, 39963, 39973, 39972, 39969, 39984, 40007, 39986, 40006, 39998, 40026, 40032, 40039, 40054, 40056, 40167, 40172, 40176, 40201, 40200, 40171, 40195, 40198, 40234, 40230, 40367, 40227, 40223, 40260, 40213, 40210, 40257, 40255, 40254, 40262, 40264, 40285, 40286, 40292, 40273, 40272, 40281, 40306, 40329, 40327, 40363, 40303, 40314, 40346, 40356, 40361, 40370, 40388, 40385, 40379, 40376, 40378, 40390, 40399, 40386, 40409, 40403, 40440, 40422, 40429, 40431, 40445, 40474, 40475, 40478, 40565, 40569, 40573, 40577, 40584, 40587, 40588, 40594, 40597, 40593, 40605, 40613, 40617, 40632, 40618, 40621, 38753, 40652, 40654, 40655, 40656, 40660, 40668, 40670, 40669, 40672, 40677, 40680, 40687, 40692, 40694, 40695, 40697, 40699, 40700, 40701, 40711, 40712, 30391, 40725, 40737, 40748, 40766, 40778, 40786, 40788, 40803, 40799, 40800, 40801, 40806, 40807, 40812, 40810, 40823, 40818, 40822, 40853, 40860, 40864, 22575, 27079, 36953, 29796, 20956, 29081, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389, 20008, 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, 20544, 20514, 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, 21469, 64014, 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, 64016, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, 23512, 23532, 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, 24016, 24353, 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, 26171, 26121, 26158, 26142, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272, 26290, 26303, 26362, 26382, 63785, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, 27032, 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, 27759, 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199, 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, 29020, 28998, 28999, 64021, 29121, 29182, 29361, 29374, 29476, 64022, 29559, 29629, 29641, 29654, 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, 30063, 30338, 30364, 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842, 31024, 64024, 64025, 64026, 31124, 64027, 31131, 31441, 31463, 64028, 31467, 31646, 64029, 32072, 32092, 32183, 32160, 32214, 32338, 32583, 32673, 64030, 33537, 33634, 33663, 33735, 33782, 33864, 33972, 34131, 34137, 34155, 64031, 34224, 64032, 64033, 34823, 35061, 35346, 35383, 35449, 35495, 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214, 64035, 36559, 64036, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335, 37342, 37357, 37358, 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, 37479, 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665, 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, 37937, 37957, 37960, 38290, 63964, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, 38737, 38741, 38999, 39013, 64042, 64043, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794, 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, null, null, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 65506, 65508, 65287, 65282, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 65506, 65508, 65287, 65282, 12849, 8470, 8481, 8757, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389, 20008, 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, 20544, 20514, 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, 21469, 64014, 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, 64016, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, 23512, 23532, 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, 24016, 24353, 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, 26171, 26121, 26158, 26142, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272, 26290, 26303, 26362, 26382, 63785, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, 27032, 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, 27759, 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199, 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, 29020, 28998, 28999, 64021, 29121, 29182, 29361, 29374, 29476, 64022, 29559, 29629, 29641, 29654, 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, 30063, 30338, 30364, 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842, 31024, 64024, 64025, 64026, 31124, 64027, 31131, 31441, 31463, 64028, 31467, 31646, 64029, 32072, 32092, 32183, 32160, 32214, 32338, 32583, 32673, 64030, 33537, 33634, 33663, 33735, 33782, 33864, 33972, 34131, 34137, 34155, 64031, 34224, 64032, 64033, 34823, 35061, 35346, 35383, 35449, 35495, 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214, 64035, 36559, 64036, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335, 37342, 37357, 37358, 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, 37479, 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665, 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, 37937, 37957, 37960, 38290, 63964, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, 38737, 38741, 38999, 39013, 64042, 64043, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794, 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + "jis0212": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 728, 711, 184, 729, 733, 175, 731, 730, 65374, 900, 901, null, null, null, null, null, null, null, null, 161, 166, 191, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 186, 170, 169, 174, 8482, 164, 8470, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 902, 904, 905, 906, 938, null, 908, null, 910, 939, null, 911, null, null, null, null, 940, 941, 942, 943, 970, 912, 972, 962, 973, 971, 944, 974, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1038, 1039, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1118, 1119, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 198, 272, null, 294, null, 306, null, 321, 319, null, 330, 216, 338, null, 358, 222, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 230, 273, 240, 295, 305, 307, 312, 322, 320, 329, 331, 248, 339, 223, 359, 254, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 193, 192, 196, 194, 258, 461, 256, 260, 197, 195, 262, 264, 268, 199, 266, 270, 201, 200, 203, 202, 282, 278, 274, 280, null, 284, 286, 290, 288, 292, 205, 204, 207, 206, 463, 304, 298, 302, 296, 308, 310, 313, 317, 315, 323, 327, 325, 209, 211, 210, 214, 212, 465, 336, 332, 213, 340, 344, 342, 346, 348, 352, 350, 356, 354, 218, 217, 220, 219, 364, 467, 368, 362, 370, 366, 360, 471, 475, 473, 469, 372, 221, 376, 374, 377, 381, 379, null, null, null, null, null, null, null, 225, 224, 228, 226, 259, 462, 257, 261, 229, 227, 263, 265, 269, 231, 267, 271, 233, 232, 235, 234, 283, 279, 275, 281, 501, 285, 287, null, 289, 293, 237, 236, 239, 238, 464, null, 299, 303, 297, 309, 311, 314, 318, 316, 324, 328, 326, 241, 243, 242, 246, 244, 466, 337, 333, 245, 341, 345, 343, 347, 349, 353, 351, 357, 355, 250, 249, 252, 251, 365, 468, 369, 363, 371, 367, 361, 472, 476, 474, 470, 373, 253, 255, 375, 378, 382, 380, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 19970, 19972, 19973, 19980, 19986, 19999, 20003, 20004, 20008, 20011, 20014, 20015, 20016, 20021, 20032, 20033, 20036, 20039, 20049, 20058, 20060, 20067, 20072, 20073, 20084, 20085, 20089, 20095, 20109, 20118, 20119, 20125, 20143, 20153, 20163, 20176, 20186, 20187, 20192, 20193, 20194, 20200, 20207, 20209, 20211, 20213, 20221, 20222, 20223, 20224, 20226, 20227, 20232, 20235, 20236, 20242, 20245, 20246, 20247, 20249, 20270, 20273, 20320, 20275, 20277, 20279, 20281, 20283, 20286, 20288, 20290, 20296, 20297, 20299, 20300, 20306, 20308, 20310, 20312, 20319, 20323, 20330, 20332, 20334, 20337, 20343, 20344, 20345, 20346, 20349, 20350, 20353, 20354, 20356, 20357, 20361, 20362, 20364, 20366, 20368, 20370, 20371, 20372, 20375, 20377, 20378, 20382, 20383, 20402, 20407, 20409, 20411, 20412, 20413, 20414, 20416, 20417, 20421, 20422, 20424, 20425, 20427, 20428, 20429, 20431, 20434, 20444, 20448, 20450, 20464, 20466, 20476, 20477, 20479, 20480, 20481, 20484, 20487, 20490, 20492, 20494, 20496, 20499, 20503, 20504, 20507, 20508, 20509, 20510, 20514, 20519, 20526, 20528, 20530, 20531, 20533, 20544, 20545, 20546, 20549, 20550, 20554, 20556, 20558, 20561, 20562, 20563, 20567, 20569, 20575, 20576, 20578, 20579, 20582, 20583, 20586, 20589, 20592, 20593, 20539, 20609, 20611, 20612, 20614, 20618, 20622, 20623, 20624, 20626, 20627, 20628, 20630, 20635, 20636, 20638, 20639, 20640, 20641, 20642, 20650, 20655, 20656, 20665, 20666, 20669, 20672, 20675, 20676, 20679, 20684, 20686, 20688, 20691, 20692, 20696, 20700, 20701, 20703, 20706, 20708, 20710, 20712, 20713, 20719, 20721, 20726, 20730, 20734, 20739, 20742, 20743, 20744, 20747, 20748, 20749, 20750, 20722, 20752, 20759, 20761, 20763, 20764, 20765, 20766, 20771, 20775, 20776, 20780, 20781, 20783, 20785, 20787, 20788, 20789, 20792, 20793, 20802, 20810, 20815, 20819, 20821, 20823, 20824, 20831, 20836, 20838, 20862, 20867, 20868, 20875, 20878, 20888, 20893, 20897, 20899, 20909, 20920, 20922, 20924, 20926, 20927, 20930, 20936, 20943, 20945, 20946, 20947, 20949, 20952, 20958, 20962, 20965, 20974, 20978, 20979, 20980, 20983, 20993, 20994, 20997, 21010, 21011, 21013, 21014, 21016, 21026, 21032, 21041, 21042, 21045, 21052, 21061, 21065, 21077, 21079, 21080, 21082, 21084, 21087, 21088, 21089, 21094, 21102, 21111, 21112, 21113, 21120, 21122, 21125, 21130, 21132, 21139, 21141, 21142, 21143, 21144, 21146, 21148, 21156, 21157, 21158, 21159, 21167, 21168, 21174, 21175, 21176, 21178, 21179, 21181, 21184, 21188, 21190, 21192, 21196, 21199, 21201, 21204, 21206, 21211, 21212, 21217, 21221, 21224, 21225, 21226, 21228, 21232, 21233, 21236, 21238, 21239, 21248, 21251, 21258, 21259, 21260, 21265, 21267, 21272, 21275, 21276, 21278, 21279, 21285, 21287, 21288, 21289, 21291, 21292, 21293, 21296, 21298, 21301, 21308, 21309, 21310, 21314, 21324, 21323, 21337, 21339, 21345, 21347, 21349, 21356, 21357, 21362, 21369, 21374, 21379, 21383, 21384, 21390, 21395, 21396, 21401, 21405, 21409, 21412, 21418, 21419, 21423, 21426, 21428, 21429, 21431, 21432, 21434, 21437, 21440, 21445, 21455, 21458, 21459, 21461, 21466, 21469, 21470, 21472, 21478, 21479, 21493, 21506, 21523, 21530, 21537, 21543, 21544, 21546, 21551, 21553, 21556, 21557, 21571, 21572, 21575, 21581, 21583, 21598, 21602, 21604, 21606, 21607, 21609, 21611, 21613, 21614, 21620, 21631, 21633, 21635, 21637, 21640, 21641, 21645, 21649, 21653, 21654, 21660, 21663, 21665, 21670, 21671, 21673, 21674, 21677, 21678, 21681, 21687, 21689, 21690, 21691, 21695, 21702, 21706, 21709, 21710, 21728, 21738, 21740, 21743, 21750, 21756, 21758, 21759, 21760, 21761, 21765, 21768, 21769, 21772, 21773, 21774, 21781, 21802, 21803, 21810, 21813, 21814, 21819, 21820, 21821, 21825, 21831, 21833, 21834, 21837, 21840, 21841, 21848, 21850, 21851, 21854, 21856, 21857, 21860, 21862, 21887, 21889, 21890, 21894, 21896, 21902, 21903, 21905, 21906, 21907, 21908, 21911, 21923, 21924, 21933, 21938, 21951, 21953, 21955, 21958, 21961, 21963, 21964, 21966, 21969, 21970, 21971, 21975, 21976, 21979, 21982, 21986, 21993, 22006, 22015, 22021, 22024, 22026, 22029, 22030, 22031, 22032, 22033, 22034, 22041, 22060, 22064, 22067, 22069, 22071, 22073, 22075, 22076, 22077, 22079, 22080, 22081, 22083, 22084, 22086, 22089, 22091, 22093, 22095, 22100, 22110, 22112, 22113, 22114, 22115, 22118, 22121, 22125, 22127, 22129, 22130, 22133, 22148, 22149, 22152, 22155, 22156, 22165, 22169, 22170, 22173, 22174, 22175, 22182, 22183, 22184, 22185, 22187, 22188, 22189, 22193, 22195, 22199, 22206, 22213, 22217, 22218, 22219, 22223, 22224, 22220, 22221, 22233, 22236, 22237, 22239, 22241, 22244, 22245, 22246, 22247, 22248, 22257, 22251, 22253, 22262, 22263, 22273, 22274, 22279, 22282, 22284, 22289, 22293, 22298, 22299, 22301, 22304, 22306, 22307, 22308, 22309, 22313, 22314, 22316, 22318, 22319, 22323, 22324, 22333, 22334, 22335, 22341, 22342, 22348, 22349, 22354, 22370, 22373, 22375, 22376, 22379, 22381, 22382, 22383, 22384, 22385, 22387, 22388, 22389, 22391, 22393, 22394, 22395, 22396, 22398, 22401, 22403, 22412, 22420, 22423, 22425, 22426, 22428, 22429, 22430, 22431, 22433, 22421, 22439, 22440, 22441, 22444, 22456, 22461, 22471, 22472, 22476, 22479, 22485, 22493, 22494, 22500, 22502, 22503, 22505, 22509, 22512, 22517, 22518, 22520, 22525, 22526, 22527, 22531, 22532, 22536, 22537, 22497, 22540, 22541, 22555, 22558, 22559, 22560, 22566, 22567, 22573, 22578, 22585, 22591, 22601, 22604, 22605, 22607, 22608, 22613, 22623, 22625, 22628, 22631, 22632, 22648, 22652, 22655, 22656, 22657, 22663, 22664, 22665, 22666, 22668, 22669, 22671, 22672, 22676, 22678, 22685, 22688, 22689, 22690, 22694, 22697, 22705, 22706, 22724, 22716, 22722, 22728, 22733, 22734, 22736, 22738, 22740, 22742, 22746, 22749, 22753, 22754, 22761, 22771, 22789, 22790, 22795, 22796, 22802, 22803, 22804, 34369, 22813, 22817, 22819, 22820, 22824, 22831, 22832, 22835, 22837, 22838, 22847, 22851, 22854, 22866, 22867, 22873, 22875, 22877, 22878, 22879, 22881, 22883, 22891, 22893, 22895, 22898, 22901, 22902, 22905, 22907, 22908, 22923, 22924, 22926, 22930, 22933, 22935, 22943, 22948, 22951, 22957, 22958, 22959, 22960, 22963, 22967, 22970, 22972, 22977, 22979, 22980, 22984, 22986, 22989, 22994, 23005, 23006, 23007, 23011, 23012, 23015, 23022, 23023, 23025, 23026, 23028, 23031, 23040, 23044, 23052, 23053, 23054, 23058, 23059, 23070, 23075, 23076, 23079, 23080, 23082, 23085, 23088, 23108, 23109, 23111, 23112, 23116, 23120, 23125, 23134, 23139, 23141, 23143, 23149, 23159, 23162, 23163, 23166, 23179, 23184, 23187, 23190, 23193, 23196, 23198, 23199, 23200, 23202, 23207, 23212, 23217, 23218, 23219, 23221, 23224, 23226, 23227, 23231, 23236, 23238, 23240, 23247, 23258, 23260, 23264, 23269, 23274, 23278, 23285, 23286, 23293, 23296, 23297, 23304, 23319, 23348, 23321, 23323, 23325, 23329, 23333, 23341, 23352, 23361, 23371, 23372, 23378, 23382, 23390, 23400, 23406, 23407, 23420, 23421, 23422, 23423, 23425, 23428, 23430, 23434, 23438, 23440, 23441, 23443, 23444, 23446, 23464, 23465, 23468, 23469, 23471, 23473, 23474, 23479, 23482, 23484, 23488, 23489, 23501, 23503, 23510, 23511, 23512, 23513, 23514, 23520, 23535, 23537, 23540, 23549, 23564, 23575, 23582, 23583, 23587, 23590, 23593, 23595, 23596, 23598, 23600, 23602, 23605, 23606, 23641, 23642, 23644, 23650, 23651, 23655, 23656, 23657, 23661, 23664, 23668, 23669, 23674, 23675, 23676, 23677, 23687, 23688, 23690, 23695, 23698, 23709, 23711, 23712, 23714, 23715, 23718, 23722, 23730, 23732, 23733, 23738, 23753, 23755, 23762, 23773, 23767, 23790, 23793, 23794, 23796, 23809, 23814, 23821, 23826, 23851, 23843, 23844, 23846, 23847, 23857, 23860, 23865, 23869, 23871, 23874, 23875, 23878, 23880, 23893, 23889, 23897, 23882, 23903, 23904, 23905, 23906, 23908, 23914, 23917, 23920, 23929, 23930, 23934, 23935, 23937, 23939, 23944, 23946, 23954, 23955, 23956, 23957, 23961, 23963, 23967, 23968, 23975, 23979, 23984, 23988, 23992, 23993, 24003, 24007, 24011, 24016, 24014, 24024, 24025, 24032, 24036, 24041, 24056, 24057, 24064, 24071, 24077, 24082, 24084, 24085, 24088, 24095, 24096, 24110, 24104, 24114, 24117, 24126, 24139, 24144, 24137, 24145, 24150, 24152, 24155, 24156, 24158, 24168, 24170, 24171, 24172, 24173, 24174, 24176, 24192, 24203, 24206, 24226, 24228, 24229, 24232, 24234, 24236, 24241, 24243, 24253, 24254, 24255, 24262, 24268, 24267, 24270, 24273, 24274, 24276, 24277, 24284, 24286, 24293, 24299, 24322, 24326, 24327, 24328, 24334, 24345, 24348, 24349, 24353, 24354, 24355, 24356, 24360, 24363, 24364, 24366, 24368, 24372, 24374, 24379, 24381, 24383, 24384, 24388, 24389, 24391, 24397, 24400, 24404, 24408, 24411, 24416, 24419, 24420, 24423, 24431, 24434, 24436, 24437, 24440, 24442, 24445, 24446, 24457, 24461, 24463, 24470, 24476, 24477, 24482, 24487, 24491, 24484, 24492, 24495, 24496, 24497, 24504, 24516, 24519, 24520, 24521, 24523, 24528, 24529, 24530, 24531, 24532, 24542, 24545, 24546, 24552, 24553, 24554, 24556, 24557, 24558, 24559, 24562, 24563, 24566, 24570, 24572, 24583, 24586, 24589, 24595, 24596, 24599, 24600, 24602, 24607, 24612, 24621, 24627, 24629, 24640, 24647, 24648, 24649, 24652, 24657, 24660, 24662, 24663, 24669, 24673, 24679, 24689, 24702, 24703, 24706, 24710, 24712, 24714, 24718, 24721, 24723, 24725, 24728, 24733, 24734, 24738, 24740, 24741, 24744, 24752, 24753, 24759, 24763, 24766, 24770, 24772, 24776, 24777, 24778, 24779, 24782, 24783, 24788, 24789, 24793, 24795, 24797, 24798, 24802, 24805, 24818, 24821, 24824, 24828, 24829, 24834, 24839, 24842, 24844, 24848, 24849, 24850, 24851, 24852, 24854, 24855, 24857, 24860, 24862, 24866, 24874, 24875, 24880, 24881, 24885, 24886, 24887, 24889, 24897, 24901, 24902, 24905, 24926, 24928, 24940, 24946, 24952, 24955, 24956, 24959, 24960, 24961, 24963, 24964, 24971, 24973, 24978, 24979, 24983, 24984, 24988, 24989, 24991, 24992, 24997, 25e3, 25002, 25005, 25016, 25017, 25020, 25024, 25025, 25026, 25038, 25039, 25045, 25052, 25053, 25054, 25055, 25057, 25058, 25063, 25065, 25061, 25068, 25069, 25071, 25089, 25091, 25092, 25095, 25107, 25109, 25116, 25120, 25122, 25123, 25127, 25129, 25131, 25145, 25149, 25154, 25155, 25156, 25158, 25164, 25168, 25169, 25170, 25172, 25174, 25178, 25180, 25188, 25197, 25199, 25203, 25210, 25213, 25229, 25230, 25231, 25232, 25254, 25256, 25267, 25270, 25271, 25274, 25278, 25279, 25284, 25294, 25301, 25302, 25306, 25322, 25330, 25332, 25340, 25341, 25347, 25348, 25354, 25355, 25357, 25360, 25363, 25366, 25368, 25385, 25386, 25389, 25397, 25398, 25401, 25404, 25409, 25410, 25411, 25412, 25414, 25418, 25419, 25422, 25426, 25427, 25428, 25432, 25435, 25445, 25446, 25452, 25453, 25457, 25460, 25461, 25464, 25468, 25469, 25471, 25474, 25476, 25479, 25482, 25488, 25492, 25493, 25497, 25498, 25502, 25508, 25510, 25517, 25518, 25519, 25533, 25537, 25541, 25544, 25550, 25553, 25555, 25556, 25557, 25564, 25568, 25573, 25578, 25580, 25586, 25587, 25589, 25592, 25593, 25609, 25610, 25616, 25618, 25620, 25624, 25630, 25632, 25634, 25636, 25637, 25641, 25642, 25647, 25648, 25653, 25661, 25663, 25675, 25679, 25681, 25682, 25683, 25684, 25690, 25691, 25692, 25693, 25695, 25696, 25697, 25699, 25709, 25715, 25716, 25723, 25725, 25733, 25735, 25743, 25744, 25745, 25752, 25753, 25755, 25757, 25759, 25761, 25763, 25766, 25768, 25772, 25779, 25789, 25790, 25791, 25796, 25801, 25802, 25803, 25804, 25806, 25808, 25809, 25813, 25815, 25828, 25829, 25833, 25834, 25837, 25840, 25845, 25847, 25851, 25855, 25857, 25860, 25864, 25865, 25866, 25871, 25875, 25876, 25878, 25881, 25883, 25886, 25887, 25890, 25894, 25897, 25902, 25905, 25914, 25916, 25917, 25923, 25927, 25929, 25936, 25938, 25940, 25951, 25952, 25959, 25963, 25978, 25981, 25985, 25989, 25994, 26002, 26005, 26008, 26013, 26016, 26019, 26022, 26030, 26034, 26035, 26036, 26047, 26050, 26056, 26057, 26062, 26064, 26068, 26070, 26072, 26079, 26096, 26098, 26100, 26101, 26105, 26110, 26111, 26112, 26116, 26120, 26121, 26125, 26129, 26130, 26133, 26134, 26141, 26142, 26145, 26146, 26147, 26148, 26150, 26153, 26154, 26155, 26156, 26158, 26160, 26161, 26163, 26169, 26167, 26176, 26181, 26182, 26186, 26188, 26193, 26190, 26199, 26200, 26201, 26203, 26204, 26208, 26209, 26363, 26218, 26219, 26220, 26238, 26227, 26229, 26239, 26231, 26232, 26233, 26235, 26240, 26236, 26251, 26252, 26253, 26256, 26258, 26265, 26266, 26267, 26268, 26271, 26272, 26276, 26285, 26289, 26290, 26293, 26299, 26303, 26304, 26306, 26307, 26312, 26316, 26318, 26319, 26324, 26331, 26335, 26344, 26347, 26348, 26350, 26362, 26373, 26375, 26382, 26387, 26393, 26396, 26400, 26402, 26419, 26430, 26437, 26439, 26440, 26444, 26452, 26453, 26461, 26470, 26476, 26478, 26484, 26486, 26491, 26497, 26500, 26510, 26511, 26513, 26515, 26518, 26520, 26521, 26523, 26544, 26545, 26546, 26549, 26555, 26556, 26557, 26617, 26560, 26562, 26563, 26565, 26568, 26569, 26578, 26583, 26585, 26588, 26593, 26598, 26608, 26610, 26614, 26615, 26706, 26644, 26649, 26653, 26655, 26664, 26663, 26668, 26669, 26671, 26672, 26673, 26675, 26683, 26687, 26692, 26693, 26698, 26700, 26709, 26711, 26712, 26715, 26731, 26734, 26735, 26736, 26737, 26738, 26741, 26745, 26746, 26747, 26748, 26754, 26756, 26758, 26760, 26774, 26776, 26778, 26780, 26785, 26787, 26789, 26793, 26794, 26798, 26802, 26811, 26821, 26824, 26828, 26831, 26832, 26833, 26835, 26838, 26841, 26844, 26845, 26853, 26856, 26858, 26859, 26860, 26861, 26864, 26865, 26869, 26870, 26875, 26876, 26877, 26886, 26889, 26890, 26896, 26897, 26899, 26902, 26903, 26929, 26931, 26933, 26936, 26939, 26946, 26949, 26953, 26958, 26967, 26971, 26979, 26980, 26981, 26982, 26984, 26985, 26988, 26992, 26993, 26994, 27002, 27003, 27007, 27008, 27021, 27026, 27030, 27032, 27041, 27045, 27046, 27048, 27051, 27053, 27055, 27063, 27064, 27066, 27068, 27077, 27080, 27089, 27094, 27095, 27106, 27109, 27118, 27119, 27121, 27123, 27125, 27134, 27136, 27137, 27139, 27151, 27153, 27157, 27162, 27165, 27168, 27172, 27176, 27184, 27186, 27188, 27191, 27195, 27198, 27199, 27205, 27206, 27209, 27210, 27214, 27216, 27217, 27218, 27221, 27222, 27227, 27236, 27239, 27242, 27249, 27251, 27262, 27265, 27267, 27270, 27271, 27273, 27275, 27281, 27291, 27293, 27294, 27295, 27301, 27307, 27311, 27312, 27313, 27316, 27325, 27326, 27327, 27334, 27337, 27336, 27340, 27344, 27348, 27349, 27350, 27356, 27357, 27364, 27367, 27372, 27376, 27377, 27378, 27388, 27389, 27394, 27395, 27398, 27399, 27401, 27407, 27408, 27409, 27415, 27419, 27422, 27428, 27432, 27435, 27436, 27439, 27445, 27446, 27451, 27455, 27462, 27466, 27469, 27474, 27478, 27480, 27485, 27488, 27495, 27499, 27502, 27504, 27509, 27517, 27518, 27522, 27525, 27543, 27547, 27551, 27552, 27554, 27555, 27560, 27561, 27564, 27565, 27566, 27568, 27576, 27577, 27581, 27582, 27587, 27588, 27593, 27596, 27606, 27610, 27617, 27619, 27622, 27623, 27630, 27633, 27639, 27641, 27647, 27650, 27652, 27653, 27657, 27661, 27662, 27664, 27666, 27673, 27679, 27686, 27687, 27688, 27692, 27694, 27699, 27701, 27702, 27706, 27707, 27711, 27722, 27723, 27725, 27727, 27730, 27732, 27737, 27739, 27740, 27755, 27757, 27759, 27764, 27766, 27768, 27769, 27771, 27781, 27782, 27783, 27785, 27796, 27797, 27799, 27800, 27804, 27807, 27824, 27826, 27828, 27842, 27846, 27853, 27855, 27856, 27857, 27858, 27860, 27862, 27866, 27868, 27872, 27879, 27881, 27883, 27884, 27886, 27890, 27892, 27908, 27911, 27914, 27918, 27919, 27921, 27923, 27930, 27942, 27943, 27944, 27751, 27950, 27951, 27953, 27961, 27964, 27967, 27991, 27998, 27999, 28001, 28005, 28007, 28015, 28016, 28028, 28034, 28039, 28049, 28050, 28052, 28054, 28055, 28056, 28074, 28076, 28084, 28087, 28089, 28093, 28095, 28100, 28104, 28106, 28110, 28111, 28118, 28123, 28125, 28127, 28128, 28130, 28133, 28137, 28143, 28144, 28148, 28150, 28156, 28160, 28164, 28190, 28194, 28199, 28210, 28214, 28217, 28219, 28220, 28228, 28229, 28232, 28233, 28235, 28239, 28241, 28242, 28243, 28244, 28247, 28252, 28253, 28254, 28258, 28259, 28264, 28275, 28283, 28285, 28301, 28307, 28313, 28320, 28327, 28333, 28334, 28337, 28339, 28347, 28351, 28352, 28353, 28355, 28359, 28360, 28362, 28365, 28366, 28367, 28395, 28397, 28398, 28409, 28411, 28413, 28420, 28424, 28426, 28428, 28429, 28438, 28440, 28442, 28443, 28454, 28457, 28458, 28463, 28464, 28467, 28470, 28475, 28476, 28461, 28495, 28497, 28498, 28499, 28503, 28505, 28506, 28509, 28510, 28513, 28514, 28520, 28524, 28541, 28542, 28547, 28551, 28552, 28555, 28556, 28557, 28560, 28562, 28563, 28564, 28566, 28570, 28575, 28576, 28581, 28582, 28583, 28584, 28590, 28591, 28592, 28597, 28598, 28604, 28613, 28615, 28616, 28618, 28634, 28638, 28648, 28649, 28656, 28661, 28665, 28668, 28669, 28672, 28677, 28678, 28679, 28685, 28695, 28704, 28707, 28719, 28724, 28727, 28729, 28732, 28739, 28740, 28744, 28745, 28746, 28747, 28756, 28757, 28765, 28766, 28750, 28772, 28773, 28780, 28782, 28789, 28790, 28798, 28801, 28805, 28806, 28820, 28821, 28822, 28823, 28824, 28827, 28836, 28843, 28848, 28849, 28852, 28855, 28874, 28881, 28883, 28884, 28885, 28886, 28888, 28892, 28900, 28922, 28931, 28932, 28933, 28934, 28935, 28939, 28940, 28943, 28958, 28960, 28971, 28973, 28975, 28976, 28977, 28984, 28993, 28997, 28998, 28999, 29002, 29003, 29008, 29010, 29015, 29018, 29020, 29022, 29024, 29032, 29049, 29056, 29061, 29063, 29068, 29074, 29082, 29083, 29088, 29090, 29103, 29104, 29106, 29107, 29114, 29119, 29120, 29121, 29124, 29131, 29132, 29139, 29142, 29145, 29146, 29148, 29176, 29182, 29184, 29191, 29192, 29193, 29203, 29207, 29210, 29213, 29215, 29220, 29227, 29231, 29236, 29240, 29241, 29249, 29250, 29251, 29253, 29262, 29263, 29264, 29267, 29269, 29270, 29274, 29276, 29278, 29280, 29283, 29288, 29291, 29294, 29295, 29297, 29303, 29304, 29307, 29308, 29311, 29316, 29321, 29325, 29326, 29331, 29339, 29352, 29357, 29358, 29361, 29364, 29374, 29377, 29383, 29385, 29388, 29397, 29398, 29400, 29407, 29413, 29427, 29428, 29434, 29435, 29438, 29442, 29444, 29445, 29447, 29451, 29453, 29458, 29459, 29464, 29465, 29470, 29474, 29476, 29479, 29480, 29484, 29489, 29490, 29493, 29498, 29499, 29501, 29507, 29517, 29520, 29522, 29526, 29528, 29533, 29534, 29535, 29536, 29542, 29543, 29545, 29547, 29548, 29550, 29551, 29553, 29559, 29561, 29564, 29568, 29569, 29571, 29573, 29574, 29582, 29584, 29587, 29589, 29591, 29592, 29596, 29598, 29599, 29600, 29602, 29605, 29606, 29610, 29611, 29613, 29621, 29623, 29625, 29628, 29629, 29631, 29637, 29638, 29641, 29643, 29644, 29647, 29650, 29651, 29654, 29657, 29661, 29665, 29667, 29670, 29671, 29673, 29684, 29685, 29687, 29689, 29690, 29691, 29693, 29695, 29696, 29697, 29700, 29703, 29706, 29713, 29722, 29723, 29732, 29734, 29736, 29737, 29738, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29753, 29760, 29763, 29764, 29766, 29767, 29771, 29773, 29777, 29778, 29783, 29789, 29794, 29798, 29799, 29800, 29803, 29805, 29806, 29809, 29810, 29824, 29825, 29829, 29830, 29831, 29833, 29839, 29840, 29841, 29842, 29848, 29849, 29850, 29852, 29855, 29856, 29857, 29859, 29862, 29864, 29865, 29866, 29867, 29870, 29871, 29873, 29874, 29877, 29881, 29883, 29887, 29896, 29897, 29900, 29904, 29907, 29912, 29914, 29915, 29918, 29919, 29924, 29928, 29930, 29931, 29935, 29940, 29946, 29947, 29948, 29951, 29958, 29970, 29974, 29975, 29984, 29985, 29988, 29991, 29993, 29994, 29999, 30006, 30009, 30013, 30014, 30015, 30016, 30019, 30023, 30024, 30030, 30032, 30034, 30039, 30046, 30047, 30049, 30063, 30065, 30073, 30074, 30075, 30076, 30077, 30078, 30081, 30085, 30096, 30098, 30099, 30101, 30105, 30108, 30114, 30116, 30132, 30138, 30143, 30144, 30145, 30148, 30150, 30156, 30158, 30159, 30167, 30172, 30175, 30176, 30177, 30180, 30183, 30188, 30190, 30191, 30193, 30201, 30208, 30210, 30211, 30212, 30215, 30216, 30218, 30220, 30223, 30226, 30227, 30229, 30230, 30233, 30235, 30236, 30237, 30238, 30243, 30245, 30246, 30249, 30253, 30258, 30259, 30261, 30264, 30265, 30266, 30268, 30282, 30272, 30273, 30275, 30276, 30277, 30281, 30283, 30293, 30297, 30303, 30308, 30309, 30317, 30318, 30319, 30321, 30324, 30337, 30341, 30348, 30349, 30357, 30363, 30364, 30365, 30367, 30368, 30370, 30371, 30372, 30373, 30374, 30375, 30376, 30378, 30381, 30397, 30401, 30405, 30409, 30411, 30412, 30414, 30420, 30425, 30432, 30438, 30440, 30444, 30448, 30449, 30454, 30457, 30460, 30464, 30470, 30474, 30478, 30482, 30484, 30485, 30487, 30489, 30490, 30492, 30498, 30504, 30509, 30510, 30511, 30516, 30517, 30518, 30521, 30525, 30526, 30530, 30533, 30534, 30538, 30541, 30542, 30543, 30546, 30550, 30551, 30556, 30558, 30559, 30560, 30562, 30564, 30567, 30570, 30572, 30576, 30578, 30579, 30580, 30586, 30589, 30592, 30596, 30604, 30605, 30612, 30613, 30614, 30618, 30623, 30626, 30631, 30634, 30638, 30639, 30641, 30645, 30654, 30659, 30665, 30673, 30674, 30677, 30681, 30686, 30687, 30688, 30692, 30694, 30698, 30700, 30704, 30705, 30708, 30712, 30715, 30725, 30726, 30729, 30733, 30734, 30737, 30749, 30753, 30754, 30755, 30765, 30766, 30768, 30773, 30775, 30787, 30788, 30791, 30792, 30796, 30798, 30802, 30812, 30814, 30816, 30817, 30819, 30820, 30824, 30826, 30830, 30842, 30846, 30858, 30863, 30868, 30872, 30881, 30877, 30878, 30879, 30884, 30888, 30892, 30893, 30896, 30897, 30898, 30899, 30907, 30909, 30911, 30919, 30920, 30921, 30924, 30926, 30930, 30931, 30933, 30934, 30948, 30939, 30943, 30944, 30945, 30950, 30954, 30962, 30963, 30976, 30966, 30967, 30970, 30971, 30975, 30982, 30988, 30992, 31002, 31004, 31006, 31007, 31008, 31013, 31015, 31017, 31021, 31025, 31028, 31029, 31035, 31037, 31039, 31044, 31045, 31046, 31050, 31051, 31055, 31057, 31060, 31064, 31067, 31068, 31079, 31081, 31083, 31090, 31097, 31099, 31100, 31102, 31115, 31116, 31121, 31123, 31124, 31125, 31126, 31128, 31131, 31132, 31137, 31144, 31145, 31147, 31151, 31153, 31156, 31160, 31163, 31170, 31172, 31175, 31176, 31178, 31183, 31188, 31190, 31194, 31197, 31198, 31200, 31202, 31205, 31210, 31211, 31213, 31217, 31224, 31228, 31234, 31235, 31239, 31241, 31242, 31244, 31249, 31253, 31259, 31262, 31265, 31271, 31275, 31277, 31279, 31280, 31284, 31285, 31288, 31289, 31290, 31300, 31301, 31303, 31304, 31308, 31317, 31318, 31321, 31324, 31325, 31327, 31328, 31333, 31335, 31338, 31341, 31349, 31352, 31358, 31360, 31362, 31365, 31366, 31370, 31371, 31376, 31377, 31380, 31390, 31392, 31395, 31404, 31411, 31413, 31417, 31419, 31420, 31430, 31433, 31436, 31438, 31441, 31451, 31464, 31465, 31467, 31468, 31473, 31476, 31483, 31485, 31486, 31495, 31508, 31519, 31523, 31527, 31529, 31530, 31531, 31533, 31534, 31535, 31536, 31537, 31540, 31549, 31551, 31552, 31553, 31559, 31566, 31573, 31584, 31588, 31590, 31593, 31594, 31597, 31599, 31602, 31603, 31607, 31620, 31625, 31630, 31632, 31633, 31638, 31643, 31646, 31648, 31653, 31660, 31663, 31664, 31666, 31669, 31670, 31674, 31675, 31676, 31677, 31682, 31685, 31688, 31690, 31700, 31702, 31703, 31705, 31706, 31707, 31720, 31722, 31730, 31732, 31733, 31736, 31737, 31738, 31740, 31742, 31745, 31746, 31747, 31748, 31750, 31753, 31755, 31756, 31758, 31759, 31769, 31771, 31776, 31781, 31782, 31784, 31788, 31793, 31795, 31796, 31798, 31801, 31802, 31814, 31818, 31829, 31825, 31826, 31827, 31833, 31834, 31835, 31836, 31837, 31838, 31841, 31843, 31847, 31849, 31853, 31854, 31856, 31858, 31865, 31868, 31869, 31878, 31879, 31887, 31892, 31902, 31904, 31910, 31920, 31926, 31927, 31930, 31931, 31932, 31935, 31940, 31943, 31944, 31945, 31949, 31951, 31955, 31956, 31957, 31959, 31961, 31962, 31965, 31974, 31977, 31979, 31989, 32003, 32007, 32008, 32009, 32015, 32017, 32018, 32019, 32022, 32029, 32030, 32035, 32038, 32042, 32045, 32049, 32060, 32061, 32062, 32064, 32065, 32071, 32072, 32077, 32081, 32083, 32087, 32089, 32090, 32092, 32093, 32101, 32103, 32106, 32112, 32120, 32122, 32123, 32127, 32129, 32130, 32131, 32133, 32134, 32136, 32139, 32140, 32141, 32145, 32150, 32151, 32157, 32158, 32166, 32167, 32170, 32179, 32182, 32183, 32185, 32194, 32195, 32196, 32197, 32198, 32204, 32205, 32206, 32215, 32217, 32256, 32226, 32229, 32230, 32234, 32235, 32237, 32241, 32245, 32246, 32249, 32250, 32264, 32272, 32273, 32277, 32279, 32284, 32285, 32288, 32295, 32296, 32300, 32301, 32303, 32307, 32310, 32319, 32324, 32325, 32327, 32334, 32336, 32338, 32344, 32351, 32353, 32354, 32357, 32363, 32366, 32367, 32371, 32376, 32382, 32385, 32390, 32391, 32394, 32397, 32401, 32405, 32408, 32410, 32413, 32414, 32572, 32571, 32573, 32574, 32575, 32579, 32580, 32583, 32591, 32594, 32595, 32603, 32604, 32605, 32609, 32611, 32612, 32613, 32614, 32621, 32625, 32637, 32638, 32639, 32640, 32651, 32653, 32655, 32656, 32657, 32662, 32663, 32668, 32673, 32674, 32678, 32682, 32685, 32692, 32700, 32703, 32704, 32707, 32712, 32718, 32719, 32731, 32735, 32739, 32741, 32744, 32748, 32750, 32751, 32754, 32762, 32765, 32766, 32767, 32775, 32776, 32778, 32781, 32782, 32783, 32785, 32787, 32788, 32790, 32797, 32798, 32799, 32800, 32804, 32806, 32812, 32814, 32816, 32820, 32821, 32823, 32825, 32826, 32828, 32830, 32832, 32836, 32864, 32868, 32870, 32877, 32881, 32885, 32897, 32904, 32910, 32924, 32926, 32934, 32935, 32939, 32952, 32953, 32968, 32973, 32975, 32978, 32980, 32981, 32983, 32984, 32992, 33005, 33006, 33008, 33010, 33011, 33014, 33017, 33018, 33022, 33027, 33035, 33046, 33047, 33048, 33052, 33054, 33056, 33060, 33063, 33068, 33072, 33077, 33082, 33084, 33093, 33095, 33098, 33100, 33106, 33111, 33120, 33121, 33127, 33128, 33129, 33133, 33135, 33143, 33153, 33168, 33156, 33157, 33158, 33163, 33166, 33174, 33176, 33179, 33182, 33186, 33198, 33202, 33204, 33211, 33227, 33219, 33221, 33226, 33230, 33231, 33237, 33239, 33243, 33245, 33246, 33249, 33252, 33259, 33260, 33264, 33265, 33266, 33269, 33270, 33272, 33273, 33277, 33279, 33280, 33283, 33295, 33299, 33300, 33305, 33306, 33309, 33313, 33314, 33320, 33330, 33332, 33338, 33347, 33348, 33349, 33350, 33355, 33358, 33359, 33361, 33366, 33372, 33376, 33379, 33383, 33389, 33396, 33403, 33405, 33407, 33408, 33409, 33411, 33412, 33415, 33417, 33418, 33422, 33425, 33428, 33430, 33432, 33434, 33435, 33440, 33441, 33443, 33444, 33447, 33448, 33449, 33450, 33454, 33456, 33458, 33460, 33463, 33466, 33468, 33470, 33471, 33478, 33488, 33493, 33498, 33504, 33506, 33508, 33512, 33514, 33517, 33519, 33526, 33527, 33533, 33534, 33536, 33537, 33543, 33544, 33546, 33547, 33620, 33563, 33565, 33566, 33567, 33569, 33570, 33580, 33581, 33582, 33584, 33587, 33591, 33594, 33596, 33597, 33602, 33603, 33604, 33607, 33613, 33614, 33617, 33621, 33622, 33623, 33648, 33656, 33661, 33663, 33664, 33666, 33668, 33670, 33677, 33682, 33684, 33685, 33688, 33689, 33691, 33692, 33693, 33702, 33703, 33705, 33708, 33726, 33727, 33728, 33735, 33737, 33743, 33744, 33745, 33748, 33757, 33619, 33768, 33770, 33782, 33784, 33785, 33788, 33793, 33798, 33802, 33807, 33809, 33813, 33817, 33709, 33839, 33849, 33861, 33863, 33864, 33866, 33869, 33871, 33873, 33874, 33878, 33880, 33881, 33882, 33884, 33888, 33892, 33893, 33895, 33898, 33904, 33907, 33908, 33910, 33912, 33916, 33917, 33921, 33925, 33938, 33939, 33941, 33950, 33958, 33960, 33961, 33962, 33967, 33969, 33972, 33978, 33981, 33982, 33984, 33986, 33991, 33992, 33996, 33999, 34003, 34012, 34023, 34026, 34031, 34032, 34033, 34034, 34039, 34098, 34042, 34043, 34045, 34050, 34051, 34055, 34060, 34062, 34064, 34076, 34078, 34082, 34083, 34084, 34085, 34087, 34090, 34091, 34095, 34099, 34100, 34102, 34111, 34118, 34127, 34128, 34129, 34130, 34131, 34134, 34137, 34140, 34141, 34142, 34143, 34144, 34145, 34146, 34148, 34155, 34159, 34169, 34170, 34171, 34173, 34175, 34177, 34181, 34182, 34185, 34187, 34188, 34191, 34195, 34200, 34205, 34207, 34208, 34210, 34213, 34215, 34228, 34230, 34231, 34232, 34236, 34237, 34238, 34239, 34242, 34247, 34250, 34251, 34254, 34221, 34264, 34266, 34271, 34272, 34278, 34280, 34285, 34291, 34294, 34300, 34303, 34304, 34308, 34309, 34317, 34318, 34320, 34321, 34322, 34328, 34329, 34331, 34334, 34337, 34343, 34345, 34358, 34360, 34362, 34364, 34365, 34368, 34370, 34374, 34386, 34387, 34390, 34391, 34392, 34393, 34397, 34400, 34401, 34402, 34403, 34404, 34409, 34412, 34415, 34421, 34422, 34423, 34426, 34445, 34449, 34454, 34456, 34458, 34460, 34465, 34470, 34471, 34472, 34477, 34481, 34483, 34484, 34485, 34487, 34488, 34489, 34495, 34496, 34497, 34499, 34501, 34513, 34514, 34517, 34519, 34522, 34524, 34528, 34531, 34533, 34535, 34440, 34554, 34556, 34557, 34564, 34565, 34567, 34571, 34574, 34575, 34576, 34579, 34580, 34585, 34590, 34591, 34593, 34595, 34600, 34606, 34607, 34609, 34610, 34617, 34618, 34620, 34621, 34622, 34624, 34627, 34629, 34637, 34648, 34653, 34657, 34660, 34661, 34671, 34673, 34674, 34683, 34691, 34692, 34693, 34694, 34695, 34696, 34697, 34699, 34700, 34704, 34707, 34709, 34711, 34712, 34713, 34718, 34720, 34723, 34727, 34732, 34733, 34734, 34737, 34741, 34750, 34751, 34753, 34760, 34761, 34762, 34766, 34773, 34774, 34777, 34778, 34780, 34783, 34786, 34787, 34788, 34794, 34795, 34797, 34801, 34803, 34808, 34810, 34815, 34817, 34819, 34822, 34825, 34826, 34827, 34832, 34841, 34834, 34835, 34836, 34840, 34842, 34843, 34844, 34846, 34847, 34856, 34861, 34862, 34864, 34866, 34869, 34874, 34876, 34881, 34883, 34885, 34888, 34889, 34890, 34891, 34894, 34897, 34901, 34902, 34904, 34906, 34908, 34911, 34912, 34916, 34921, 34929, 34937, 34939, 34944, 34968, 34970, 34971, 34972, 34975, 34976, 34984, 34986, 35002, 35005, 35006, 35008, 35018, 35019, 35020, 35021, 35022, 35025, 35026, 35027, 35035, 35038, 35047, 35055, 35056, 35057, 35061, 35063, 35073, 35078, 35085, 35086, 35087, 35093, 35094, 35096, 35097, 35098, 35100, 35104, 35110, 35111, 35112, 35120, 35121, 35122, 35125, 35129, 35130, 35134, 35136, 35138, 35141, 35142, 35145, 35151, 35154, 35159, 35162, 35163, 35164, 35169, 35170, 35171, 35179, 35182, 35184, 35187, 35189, 35194, 35195, 35196, 35197, 35209, 35213, 35216, 35220, 35221, 35227, 35228, 35231, 35232, 35237, 35248, 35252, 35253, 35254, 35255, 35260, 35284, 35285, 35286, 35287, 35288, 35301, 35305, 35307, 35309, 35313, 35315, 35318, 35321, 35325, 35327, 35332, 35333, 35335, 35343, 35345, 35346, 35348, 35349, 35358, 35360, 35362, 35364, 35366, 35371, 35372, 35375, 35381, 35383, 35389, 35390, 35392, 35395, 35397, 35399, 35401, 35405, 35406, 35411, 35414, 35415, 35416, 35420, 35421, 35425, 35429, 35431, 35445, 35446, 35447, 35449, 35450, 35451, 35454, 35455, 35456, 35459, 35462, 35467, 35471, 35472, 35474, 35478, 35479, 35481, 35487, 35495, 35497, 35502, 35503, 35507, 35510, 35511, 35515, 35518, 35523, 35526, 35528, 35529, 35530, 35537, 35539, 35540, 35541, 35543, 35549, 35551, 35564, 35568, 35572, 35573, 35574, 35580, 35583, 35589, 35590, 35595, 35601, 35612, 35614, 35615, 35594, 35629, 35632, 35639, 35644, 35650, 35651, 35652, 35653, 35654, 35656, 35666, 35667, 35668, 35673, 35661, 35678, 35683, 35693, 35702, 35704, 35705, 35708, 35710, 35713, 35716, 35717, 35723, 35725, 35727, 35732, 35733, 35740, 35742, 35743, 35896, 35897, 35901, 35902, 35909, 35911, 35913, 35915, 35919, 35921, 35923, 35924, 35927, 35928, 35931, 35933, 35929, 35939, 35940, 35942, 35944, 35945, 35949, 35955, 35957, 35958, 35963, 35966, 35974, 35975, 35979, 35984, 35986, 35987, 35993, 35995, 35996, 36004, 36025, 36026, 36037, 36038, 36041, 36043, 36047, 36054, 36053, 36057, 36061, 36065, 36072, 36076, 36079, 36080, 36082, 36085, 36087, 36088, 36094, 36095, 36097, 36099, 36105, 36114, 36119, 36123, 36197, 36201, 36204, 36206, 36223, 36226, 36228, 36232, 36237, 36240, 36241, 36245, 36254, 36255, 36256, 36262, 36267, 36268, 36271, 36274, 36277, 36279, 36281, 36283, 36288, 36293, 36294, 36295, 36296, 36298, 36302, 36305, 36308, 36309, 36311, 36313, 36324, 36325, 36327, 36332, 36336, 36284, 36337, 36338, 36340, 36349, 36353, 36356, 36357, 36358, 36363, 36369, 36372, 36374, 36384, 36385, 36386, 36387, 36390, 36391, 36401, 36403, 36406, 36407, 36408, 36409, 36413, 36416, 36417, 36427, 36429, 36430, 36431, 36436, 36443, 36444, 36445, 36446, 36449, 36450, 36457, 36460, 36461, 36463, 36464, 36465, 36473, 36474, 36475, 36482, 36483, 36489, 36496, 36498, 36501, 36506, 36507, 36509, 36510, 36514, 36519, 36521, 36525, 36526, 36531, 36533, 36538, 36539, 36544, 36545, 36547, 36548, 36551, 36559, 36561, 36564, 36572, 36584, 36590, 36592, 36593, 36599, 36601, 36602, 36589, 36608, 36610, 36615, 36616, 36623, 36624, 36630, 36631, 36632, 36638, 36640, 36641, 36643, 36645, 36647, 36648, 36652, 36653, 36654, 36660, 36661, 36662, 36663, 36666, 36672, 36673, 36675, 36679, 36687, 36689, 36690, 36691, 36692, 36693, 36696, 36701, 36702, 36709, 36765, 36768, 36769, 36772, 36773, 36774, 36789, 36790, 36792, 36798, 36800, 36801, 36806, 36810, 36811, 36813, 36816, 36818, 36819, 36821, 36832, 36835, 36836, 36840, 36846, 36849, 36853, 36854, 36859, 36862, 36866, 36868, 36872, 36876, 36888, 36891, 36904, 36905, 36911, 36906, 36908, 36909, 36915, 36916, 36919, 36927, 36931, 36932, 36940, 36955, 36957, 36962, 36966, 36967, 36972, 36976, 36980, 36985, 36997, 37e3, 37003, 37004, 37006, 37008, 37013, 37015, 37016, 37017, 37019, 37024, 37025, 37026, 37029, 37040, 37042, 37043, 37044, 37046, 37053, 37068, 37054, 37059, 37060, 37061, 37063, 37064, 37077, 37079, 37080, 37081, 37084, 37085, 37087, 37093, 37074, 37110, 37099, 37103, 37104, 37108, 37118, 37119, 37120, 37124, 37125, 37126, 37128, 37133, 37136, 37140, 37142, 37143, 37144, 37146, 37148, 37150, 37152, 37157, 37154, 37155, 37159, 37161, 37166, 37167, 37169, 37172, 37174, 37175, 37177, 37178, 37180, 37181, 37187, 37191, 37192, 37199, 37203, 37207, 37209, 37210, 37211, 37217, 37220, 37223, 37229, 37236, 37241, 37242, 37243, 37249, 37251, 37253, 37254, 37258, 37262, 37265, 37267, 37268, 37269, 37272, 37278, 37281, 37286, 37288, 37292, 37293, 37294, 37296, 37297, 37298, 37299, 37302, 37307, 37308, 37309, 37311, 37314, 37315, 37317, 37331, 37332, 37335, 37337, 37338, 37342, 37348, 37349, 37353, 37354, 37356, 37357, 37358, 37359, 37360, 37361, 37367, 37369, 37371, 37373, 37376, 37377, 37380, 37381, 37382, 37383, 37385, 37386, 37388, 37392, 37394, 37395, 37398, 37400, 37404, 37405, 37411, 37412, 37413, 37414, 37416, 37422, 37423, 37424, 37427, 37429, 37430, 37432, 37433, 37434, 37436, 37438, 37440, 37442, 37443, 37446, 37447, 37450, 37453, 37454, 37455, 37457, 37464, 37465, 37468, 37469, 37472, 37473, 37477, 37479, 37480, 37481, 37486, 37487, 37488, 37493, 37494, 37495, 37496, 37497, 37499, 37500, 37501, 37503, 37512, 37513, 37514, 37517, 37518, 37522, 37527, 37529, 37535, 37536, 37540, 37541, 37543, 37544, 37547, 37551, 37554, 37558, 37560, 37562, 37563, 37564, 37565, 37567, 37568, 37569, 37570, 37571, 37573, 37574, 37575, 37576, 37579, 37580, 37581, 37582, 37584, 37587, 37589, 37591, 37592, 37593, 37596, 37597, 37599, 37600, 37601, 37603, 37605, 37607, 37608, 37612, 37614, 37616, 37625, 37627, 37631, 37632, 37634, 37640, 37645, 37649, 37652, 37653, 37660, 37661, 37662, 37663, 37665, 37668, 37669, 37671, 37673, 37674, 37683, 37684, 37686, 37687, 37703, 37704, 37705, 37712, 37713, 37714, 37717, 37719, 37720, 37722, 37726, 37732, 37733, 37735, 37737, 37738, 37741, 37743, 37744, 37745, 37747, 37748, 37750, 37754, 37757, 37759, 37760, 37761, 37762, 37768, 37770, 37771, 37773, 37775, 37778, 37781, 37784, 37787, 37790, 37793, 37795, 37796, 37798, 37800, 37803, 37812, 37813, 37814, 37818, 37801, 37825, 37828, 37829, 37830, 37831, 37833, 37834, 37835, 37836, 37837, 37843, 37849, 37852, 37854, 37855, 37858, 37862, 37863, 37881, 37879, 37880, 37882, 37883, 37885, 37889, 37890, 37892, 37896, 37897, 37901, 37902, 37903, 37909, 37910, 37911, 37919, 37934, 37935, 37937, 37938, 37939, 37940, 37947, 37951, 37949, 37955, 37957, 37960, 37962, 37964, 37973, 37977, 37980, 37983, 37985, 37987, 37992, 37995, 37997, 37998, 37999, 38001, 38002, 38020, 38019, 38264, 38265, 38270, 38276, 38280, 38284, 38285, 38286, 38301, 38302, 38303, 38305, 38310, 38313, 38315, 38316, 38324, 38326, 38330, 38333, 38335, 38342, 38344, 38345, 38347, 38352, 38353, 38354, 38355, 38361, 38362, 38365, 38366, 38367, 38368, 38372, 38374, 38429, 38430, 38434, 38436, 38437, 38438, 38444, 38449, 38451, 38455, 38456, 38457, 38458, 38460, 38461, 38465, 38482, 38484, 38486, 38487, 38488, 38497, 38510, 38516, 38523, 38524, 38526, 38527, 38529, 38530, 38531, 38532, 38537, 38545, 38550, 38554, 38557, 38559, 38564, 38565, 38566, 38569, 38574, 38575, 38579, 38586, 38602, 38610, 23986, 38616, 38618, 38621, 38622, 38623, 38633, 38639, 38641, 38650, 38658, 38659, 38661, 38665, 38682, 38683, 38685, 38689, 38690, 38691, 38696, 38705, 38707, 38721, 38723, 38730, 38734, 38735, 38741, 38743, 38744, 38746, 38747, 38755, 38759, 38762, 38766, 38771, 38774, 38775, 38776, 38779, 38781, 38783, 38784, 38793, 38805, 38806, 38807, 38809, 38810, 38814, 38815, 38818, 38828, 38830, 38833, 38834, 38837, 38838, 38840, 38841, 38842, 38844, 38846, 38847, 38849, 38852, 38853, 38855, 38857, 38858, 38860, 38861, 38862, 38864, 38865, 38868, 38871, 38872, 38873, 38877, 38878, 38880, 38875, 38881, 38884, 38895, 38897, 38900, 38903, 38904, 38906, 38919, 38922, 38937, 38925, 38926, 38932, 38934, 38940, 38942, 38944, 38947, 38950, 38955, 38958, 38959, 38960, 38962, 38963, 38965, 38949, 38974, 38980, 38983, 38986, 38993, 38994, 38995, 38998, 38999, 39001, 39002, 39010, 39011, 39013, 39014, 39018, 39020, 39083, 39085, 39086, 39088, 39092, 39095, 39096, 39098, 39099, 39103, 39106, 39109, 39112, 39116, 39137, 39139, 39141, 39142, 39143, 39146, 39155, 39158, 39170, 39175, 39176, 39185, 39189, 39190, 39191, 39194, 39195, 39196, 39199, 39202, 39206, 39207, 39211, 39217, 39218, 39219, 39220, 39221, 39225, 39226, 39227, 39228, 39232, 39233, 39238, 39239, 39240, 39245, 39246, 39252, 39256, 39257, 39259, 39260, 39262, 39263, 39264, 39323, 39325, 39327, 39334, 39344, 39345, 39346, 39349, 39353, 39354, 39357, 39359, 39363, 39369, 39379, 39380, 39385, 39386, 39388, 39390, 39399, 39402, 39403, 39404, 39408, 39412, 39413, 39417, 39421, 39422, 39426, 39427, 39428, 39435, 39436, 39440, 39441, 39446, 39454, 39456, 39458, 39459, 39460, 39463, 39469, 39470, 39475, 39477, 39478, 39480, 39495, 39489, 39492, 39498, 39499, 39500, 39502, 39505, 39508, 39510, 39517, 39594, 39596, 39598, 39599, 39602, 39604, 39605, 39606, 39609, 39611, 39614, 39615, 39617, 39619, 39622, 39624, 39630, 39632, 39634, 39637, 39638, 39639, 39643, 39644, 39648, 39652, 39653, 39655, 39657, 39660, 39666, 39667, 39669, 39673, 39674, 39677, 39679, 39680, 39681, 39682, 39683, 39684, 39685, 39688, 39689, 39691, 39692, 39693, 39694, 39696, 39698, 39702, 39705, 39707, 39708, 39712, 39718, 39723, 39725, 39731, 39732, 39733, 39735, 39737, 39738, 39741, 39752, 39755, 39756, 39765, 39766, 39767, 39771, 39774, 39777, 39779, 39781, 39782, 39784, 39786, 39787, 39788, 39789, 39790, 39795, 39797, 39799, 39800, 39801, 39807, 39808, 39812, 39813, 39814, 39815, 39817, 39818, 39819, 39821, 39823, 39824, 39828, 39834, 39837, 39838, 39846, 39847, 39849, 39852, 39856, 39857, 39858, 39863, 39864, 39867, 39868, 39870, 39871, 39873, 39879, 39880, 39886, 39888, 39895, 39896, 39901, 39903, 39909, 39911, 39914, 39915, 39919, 39923, 39927, 39928, 39929, 39930, 39933, 39935, 39936, 39938, 39947, 39951, 39953, 39958, 39960, 39961, 39962, 39964, 39966, 39970, 39971, 39974, 39975, 39976, 39977, 39978, 39985, 39989, 39990, 39991, 39997, 40001, 40003, 40004, 40005, 40009, 40010, 40014, 40015, 40016, 40019, 40020, 40022, 40024, 40027, 40029, 40030, 40031, 40035, 40041, 40042, 40028, 40043, 40040, 40046, 40048, 40050, 40053, 40055, 40059, 40166, 40178, 40183, 40185, 40203, 40194, 40209, 40215, 40216, 40220, 40221, 40222, 40239, 40240, 40242, 40243, 40244, 40250, 40252, 40261, 40253, 40258, 40259, 40263, 40266, 40275, 40276, 40287, 40291, 40290, 40293, 40297, 40298, 40299, 40304, 40310, 40311, 40315, 40316, 40318, 40323, 40324, 40326, 40330, 40333, 40334, 40338, 40339, 40341, 40342, 40343, 40344, 40353, 40362, 40364, 40366, 40369, 40373, 40377, 40380, 40383, 40387, 40391, 40393, 40394, 40404, 40405, 40406, 40407, 40410, 40414, 40415, 40416, 40421, 40423, 40425, 40427, 40430, 40432, 40435, 40436, 40446, 40458, 40450, 40455, 40462, 40464, 40465, 40466, 40469, 40470, 40473, 40476, 40477, 40570, 40571, 40572, 40576, 40578, 40579, 40580, 40581, 40583, 40590, 40591, 40598, 40600, 40603, 40606, 40612, 40616, 40620, 40622, 40623, 40624, 40627, 40628, 40629, 40646, 40648, 40651, 40661, 40671, 40676, 40679, 40684, 40685, 40686, 40688, 40689, 40690, 40693, 40696, 40703, 40706, 40707, 40713, 40719, 40720, 40721, 40722, 40724, 40726, 40727, 40729, 40730, 40731, 40735, 40738, 40742, 40746, 40747, 40751, 40753, 40754, 40756, 40759, 40761, 40762, 40764, 40765, 40767, 40769, 40771, 40772, 40773, 40774, 40775, 40787, 40789, 40790, 40791, 40792, 40794, 40797, 40798, 40808, 40809, 40813, 40814, 40815, 40816, 40817, 40819, 40821, 40826, 40829, 40847, 40848, 40849, 40850, 40852, 40854, 40855, 40862, 40865, 40866, 40867, 40869, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + "ibm866": [1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 9617, 9618, 9619, 9474, 9508, 9569, 9570, 9558, 9557, 9571, 9553, 9559, 9565, 9564, 9563, 9488, 9492, 9524, 9516, 9500, 9472, 9532, 9566, 9567, 9562, 9556, 9577, 9574, 9568, 9552, 9580, 9575, 9576, 9572, 9573, 9561, 9560, 9554, 9555, 9579, 9578, 9496, 9484, 9608, 9604, 9612, 9616, 9600, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1025, 1105, 1028, 1108, 1031, 1111, 1038, 1118, 176, 8729, 183, 8730, 8470, 164, 9632, 160], + "iso-8859-2": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 728, 321, 164, 317, 346, 167, 168, 352, 350, 356, 377, 173, 381, 379, 176, 261, 731, 322, 180, 318, 347, 711, 184, 353, 351, 357, 378, 733, 382, 380, 340, 193, 194, 258, 196, 313, 262, 199, 268, 201, 280, 203, 282, 205, 206, 270, 272, 323, 327, 211, 212, 336, 214, 215, 344, 366, 218, 368, 220, 221, 354, 223, 341, 225, 226, 259, 228, 314, 263, 231, 269, 233, 281, 235, 283, 237, 238, 271, 273, 324, 328, 243, 244, 337, 246, 247, 345, 367, 250, 369, 252, 253, 355, 729], + "iso-8859-3": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 294, 728, 163, 164, null, 292, 167, 168, 304, 350, 286, 308, 173, null, 379, 176, 295, 178, 179, 180, 181, 293, 183, 184, 305, 351, 287, 309, 189, null, 380, 192, 193, 194, null, 196, 266, 264, 199, 200, 201, 202, 203, 204, 205, 206, 207, null, 209, 210, 211, 212, 288, 214, 215, 284, 217, 218, 219, 220, 364, 348, 223, 224, 225, 226, null, 228, 267, 265, 231, 232, 233, 234, 235, 236, 237, 238, 239, null, 241, 242, 243, 244, 289, 246, 247, 285, 249, 250, 251, 252, 365, 349, 729], + "iso-8859-4": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 312, 342, 164, 296, 315, 167, 168, 352, 274, 290, 358, 173, 381, 175, 176, 261, 731, 343, 180, 297, 316, 711, 184, 353, 275, 291, 359, 330, 382, 331, 256, 193, 194, 195, 196, 197, 198, 302, 268, 201, 280, 203, 278, 205, 206, 298, 272, 325, 332, 310, 212, 213, 214, 215, 216, 370, 218, 219, 220, 360, 362, 223, 257, 225, 226, 227, 228, 229, 230, 303, 269, 233, 281, 235, 279, 237, 238, 299, 273, 326, 333, 311, 244, 245, 246, 247, 248, 371, 250, 251, 252, 361, 363, 729], + "iso-8859-5": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 173, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 8470, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 167, 1118, 1119], + "iso-8859-6": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, null, null, null, 164, null, null, null, null, null, null, null, 1548, 173, null, null, null, null, null, null, null, null, null, null, null, null, null, 1563, null, null, null, 1567, null, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, null, null, null, null, null, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, null, null, null, null, null, null, null, null, null, null, null, null, null], + "iso-8859-7": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 8216, 8217, 163, 8364, 8367, 166, 167, 168, 169, 890, 171, 172, 173, null, 8213, 176, 177, 178, 179, 900, 901, 902, 183, 904, 905, 906, 187, 908, 189, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, null, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, null], + "iso-8859-8": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, null, 162, 163, 164, 165, 166, 167, 168, 169, 215, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 247, 187, 188, 189, 190, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 8215, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, null, null, 8206, 8207, null], + "iso-8859-10": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 274, 290, 298, 296, 310, 167, 315, 272, 352, 358, 381, 173, 362, 330, 176, 261, 275, 291, 299, 297, 311, 183, 316, 273, 353, 359, 382, 8213, 363, 331, 256, 193, 194, 195, 196, 197, 198, 302, 268, 201, 280, 203, 278, 205, 206, 207, 208, 325, 332, 211, 212, 213, 214, 360, 216, 370, 218, 219, 220, 221, 222, 223, 257, 225, 226, 227, 228, 229, 230, 303, 269, 233, 281, 235, 279, 237, 238, 239, 240, 326, 333, 243, 244, 245, 246, 361, 248, 371, 250, 251, 252, 253, 254, 312], + "iso-8859-13": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 8221, 162, 163, 164, 8222, 166, 167, 216, 169, 342, 171, 172, 173, 174, 198, 176, 177, 178, 179, 8220, 181, 182, 183, 248, 185, 343, 187, 188, 189, 190, 230, 260, 302, 256, 262, 196, 197, 280, 274, 268, 201, 377, 278, 290, 310, 298, 315, 352, 323, 325, 211, 332, 213, 214, 215, 370, 321, 346, 362, 220, 379, 381, 223, 261, 303, 257, 263, 228, 229, 281, 275, 269, 233, 378, 279, 291, 311, 299, 316, 353, 324, 326, 243, 333, 245, 246, 247, 371, 322, 347, 363, 252, 380, 382, 8217], + "iso-8859-14": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 7682, 7683, 163, 266, 267, 7690, 167, 7808, 169, 7810, 7691, 7922, 173, 174, 376, 7710, 7711, 288, 289, 7744, 7745, 182, 7766, 7809, 7767, 7811, 7776, 7923, 7812, 7813, 7777, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 372, 209, 210, 211, 212, 213, 214, 7786, 216, 217, 218, 219, 220, 221, 374, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 373, 241, 242, 243, 244, 245, 246, 7787, 248, 249, 250, 251, 252, 253, 375, 255], + "iso-8859-15": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 8364, 165, 352, 167, 353, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 381, 181, 182, 183, 382, 185, 186, 187, 338, 339, 376, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255], + "iso-8859-16": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 261, 321, 8364, 8222, 352, 167, 353, 169, 536, 171, 377, 173, 378, 379, 176, 177, 268, 322, 381, 8221, 182, 183, 382, 269, 537, 187, 338, 339, 376, 380, 192, 193, 194, 258, 196, 262, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 272, 323, 210, 211, 212, 336, 214, 346, 368, 217, 218, 219, 220, 280, 538, 223, 224, 225, 226, 259, 228, 263, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 273, 324, 242, 243, 244, 337, 246, 347, 369, 249, 250, 251, 252, 281, 539, 255], + "koi8-r": [9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 8992, 9632, 8729, 8730, 8776, 8804, 8805, 160, 8993, 176, 178, 183, 247, 9552, 9553, 9554, 1105, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 1025, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 169, 1102, 1072, 1073, 1094, 1076, 1077, 1092, 1075, 1093, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1103, 1088, 1089, 1090, 1091, 1078, 1074, 1100, 1099, 1079, 1096, 1101, 1097, 1095, 1098, 1070, 1040, 1041, 1062, 1044, 1045, 1060, 1043, 1061, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1071, 1056, 1057, 1058, 1059, 1046, 1042, 1068, 1067, 1047, 1064, 1069, 1065, 1063, 1066], + "koi8-u": [9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 8992, 9632, 8729, 8730, 8776, 8804, 8805, 160, 8993, 176, 178, 183, 247, 9552, 9553, 9554, 1105, 1108, 9556, 1110, 1111, 9559, 9560, 9561, 9562, 9563, 1169, 1118, 9566, 9567, 9568, 9569, 1025, 1028, 9571, 1030, 1031, 9574, 9575, 9576, 9577, 9578, 1168, 1038, 169, 1102, 1072, 1073, 1094, 1076, 1077, 1092, 1075, 1093, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1103, 1088, 1089, 1090, 1091, 1078, 1074, 1100, 1099, 1079, 1096, 1101, 1097, 1095, 1098, 1070, 1040, 1041, 1062, 1044, 1045, 1060, 1043, 1061, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1071, 1056, 1057, 1058, 1059, 1046, 1042, 1068, 1067, 1047, 1064, 1069, 1065, 1063, 1066], + "macintosh": [196, 197, 199, 201, 209, 214, 220, 225, 224, 226, 228, 227, 229, 231, 233, 232, 234, 235, 237, 236, 238, 239, 241, 243, 242, 244, 246, 245, 250, 249, 251, 252, 8224, 176, 162, 163, 167, 8226, 182, 223, 174, 169, 8482, 180, 168, 8800, 198, 216, 8734, 177, 8804, 8805, 165, 181, 8706, 8721, 8719, 960, 8747, 170, 186, 937, 230, 248, 191, 161, 172, 8730, 402, 8776, 8710, 171, 187, 8230, 160, 192, 195, 213, 338, 339, 8211, 8212, 8220, 8221, 8216, 8217, 247, 9674, 255, 376, 8260, 8364, 8249, 8250, 64257, 64258, 8225, 183, 8218, 8222, 8240, 194, 202, 193, 203, 200, 205, 206, 207, 204, 211, 212, 63743, 210, 218, 219, 217, 305, 710, 732, 175, 728, 729, 730, 184, 733, 731, 711], + "windows-874": [8364, 129, 130, 131, 132, 8230, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 153, 154, 155, 156, 157, 158, 159, 160, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, null, null, null, null, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, null, null, null, null], + "windows-1250": [8364, 129, 8218, 131, 8222, 8230, 8224, 8225, 136, 8240, 352, 8249, 346, 356, 381, 377, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 353, 8250, 347, 357, 382, 378, 160, 711, 728, 321, 164, 260, 166, 167, 168, 169, 350, 171, 172, 173, 174, 379, 176, 177, 731, 322, 180, 181, 182, 183, 184, 261, 351, 187, 317, 733, 318, 380, 340, 193, 194, 258, 196, 313, 262, 199, 268, 201, 280, 203, 282, 205, 206, 270, 272, 323, 327, 211, 212, 336, 214, 215, 344, 366, 218, 368, 220, 221, 354, 223, 341, 225, 226, 259, 228, 314, 263, 231, 269, 233, 281, 235, 283, 237, 238, 271, 273, 324, 328, 243, 244, 337, 246, 247, 345, 367, 250, 369, 252, 253, 355, 729], + "windows-1251": [1026, 1027, 8218, 1107, 8222, 8230, 8224, 8225, 8364, 8240, 1033, 8249, 1034, 1036, 1035, 1039, 1106, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 1113, 8250, 1114, 1116, 1115, 1119, 160, 1038, 1118, 1032, 164, 1168, 166, 167, 1025, 169, 1028, 171, 172, 173, 174, 1031, 176, 177, 1030, 1110, 1169, 181, 182, 183, 1105, 8470, 1108, 187, 1112, 1029, 1109, 1111, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103], + "windows-1252": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255], + "windows-1253": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 136, 8240, 138, 8249, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 154, 8250, 156, 157, 158, 159, 160, 901, 902, 163, 164, 165, 166, 167, 168, 169, null, 171, 172, 173, 174, 8213, 176, 177, 178, 179, 900, 181, 182, 183, 904, 905, 906, 187, 908, 189, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, null, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, null], + "windows-1254": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 158, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 286, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 304, 350, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 287, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 305, 351, 255], + "windows-1255": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 138, 8249, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 154, 8250, 156, 157, 158, 159, 160, 161, 162, 163, 8362, 165, 166, 167, 168, 169, 215, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 247, 187, 188, 189, 190, 191, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1520, 1521, 1522, 1523, 1524, null, null, null, null, null, null, null, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, null, null, 8206, 8207, null], + "windows-1256": [8364, 1662, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 1657, 8249, 338, 1670, 1688, 1672, 1711, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 1705, 8482, 1681, 8250, 339, 8204, 8205, 1722, 160, 1548, 162, 163, 164, 165, 166, 167, 168, 169, 1726, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 1563, 187, 188, 189, 190, 1567, 1729, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 215, 1591, 1592, 1593, 1594, 1600, 1601, 1602, 1603, 224, 1604, 226, 1605, 1606, 1607, 1608, 231, 232, 233, 234, 235, 1609, 1610, 238, 239, 1611, 1612, 1613, 1614, 244, 1615, 1616, 247, 1617, 249, 1618, 251, 252, 8206, 8207, 1746], + "windows-1257": [8364, 129, 8218, 131, 8222, 8230, 8224, 8225, 136, 8240, 138, 8249, 140, 168, 711, 184, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 154, 8250, 156, 175, 731, 159, 160, null, 162, 163, 164, null, 166, 167, 216, 169, 342, 171, 172, 173, 174, 198, 176, 177, 178, 179, 180, 181, 182, 183, 248, 185, 343, 187, 188, 189, 190, 230, 260, 302, 256, 262, 196, 197, 280, 274, 268, 201, 377, 278, 290, 310, 298, 315, 352, 323, 325, 211, 332, 213, 214, 215, 370, 321, 346, 362, 220, 379, 381, 223, 261, 303, 257, 263, 228, 229, 281, 275, 269, 233, 378, 279, 291, 311, 299, 316, 353, 324, 326, 243, 333, 245, 246, 247, 371, 322, 347, 363, 252, 380, 382, 729], + "windows-1258": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 138, 8249, 338, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 154, 8250, 339, 157, 158, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 258, 196, 197, 198, 199, 200, 201, 202, 203, 768, 205, 206, 207, 272, 209, 777, 211, 212, 416, 214, 215, 216, 217, 218, 219, 220, 431, 771, 223, 224, 225, 226, 259, 228, 229, 230, 231, 232, 233, 234, 235, 769, 237, 238, 239, 273, 241, 803, 243, 244, 417, 246, 247, 248, 249, 250, 251, 252, 432, 8363, 255], + "x-mac-cyrillic": [1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 8224, 176, 1168, 163, 167, 8226, 182, 1030, 174, 169, 8482, 1026, 1106, 8800, 1027, 1107, 8734, 177, 8804, 8805, 1110, 181, 1169, 1032, 1028, 1108, 1031, 1111, 1033, 1113, 1034, 1114, 1112, 1029, 172, 8730, 402, 8776, 8710, 171, 187, 8230, 160, 1035, 1115, 1036, 1116, 1109, 8211, 8212, 8220, 8221, 8216, 8217, 247, 8222, 1038, 1118, 1039, 1119, 8470, 1025, 1105, 1103, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 8364] +}; +var encoding_indexes_default = Indexes; + +// node_modules/text-decoding/src/indexes.js +function indexCodePointFor(pointer, i) { + if (!i) + return null; + return i[pointer] || null; +} +function indexPointerFor(code_point, i) { + var pointer = i.indexOf(code_point); + return pointer === -1 ? null : pointer; +} +function index(name) { + return encoding_indexes_default[name]; +} +function indexGB18030RangesCodePointFor(pointer) { + if (pointer > 39419 && pointer < 189e3 || pointer > 1237575) + return null; + if (pointer === 7457) + return 59335; + var offset = 0; + var code_point_offset = 0; + var idx = index("gb18030-ranges"); + var i; + for (i = 0; i < idx.length; ++i) { + var entry = idx[i]; + if (entry[0] <= pointer) { + offset = entry[0]; + code_point_offset = entry[1]; + } else { + break; + } + } + return code_point_offset + pointer - offset; +} +function indexGB18030RangesPointerFor(code_point) { + if (code_point === 59335) + return 7457; + var offset = 0; + var pointer_offset = 0; + var idx = index("gb18030-ranges"); + var i; + for (i = 0; i < idx.length; ++i) { + var entry = idx[i]; + if (entry[1] <= code_point) { + offset = entry[1]; + pointer_offset = entry[0]; + } else { + break; + } + } + return pointer_offset + code_point - offset; +} +function indexShiftJISPointerFor(code_point) { + shift_jis_index = shift_jis_index || index("jis0208").map((cp, pointer) => { + return inRange(pointer, 8272, 8835) ? null : cp; + }); + const index_ = shift_jis_index; + return index_.indexOf(code_point); +} +var shift_jis_index; +function indexBig5PointerFor(code_point) { + big5_index_no_hkscs = big5_index_no_hkscs || index("big5").map((cp, pointer) => { + return pointer < (161 - 129) * 157 ? null : cp; + }); + var index_ = big5_index_no_hkscs; + if (code_point === 9552 || code_point === 9566 || code_point === 9569 || code_point === 9578 || code_point === 21313 || code_point === 21317) { + return index_.lastIndexOf(code_point); + } + return indexPointerFor(code_point, index_); +} +var big5_index_no_hkscs; + +// node_modules/text-decoding/src/implementations/gb18030.js +var GB18030Decoder = class { + constructor(options) { + const { fatal } = options; + this.fatal = fatal; + this.gb18030_first = 0; + this.gb18030_second = 0, this.gb18030_third = 0; + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return The next code point(s) decoded, or null if not enough data exists in the input stream to decode a complete code point. + */ + handler(stream2, bite) { + if (bite === end_of_stream && this.gb18030_first === 0 && this.gb18030_second === 0 && this.gb18030_third === 0) { + return finished; + } + if (bite === end_of_stream && (this.gb18030_first !== 0 || this.gb18030_second !== 0 || this.gb18030_third !== 0)) { + this.gb18030_first = 0; + this.gb18030_second = 0; + this.gb18030_third = 0; + decoderError(this.fatal); + } + var code_point; + if (this.gb18030_third !== 0) { + code_point = null; + if (inRange(bite, 48, 57)) { + code_point = indexGB18030RangesCodePointFor( + (((this.gb18030_first - 129) * 10 + this.gb18030_second - 48) * 126 + this.gb18030_third - 129) * 10 + bite - 48 + ); + } + var buffer2 = [this.gb18030_second, this.gb18030_third, bite]; + this.gb18030_first = 0; + this.gb18030_second = 0; + this.gb18030_third = 0; + if (code_point === null) { + stream2.prepend(buffer2); + return decoderError(this.fatal); + } + return code_point; + } + if (this.gb18030_second !== 0) { + if (inRange(bite, 129, 254)) { + this.gb18030_third = bite; + return null; + } + stream2.prepend([this.gb18030_second, bite]); + this.gb18030_first = 0; + this.gb18030_second = 0; + return decoderError(this.fatal); + } + if (this.gb18030_first !== 0) { + if (inRange(bite, 48, 57)) { + this.gb18030_second = bite; + return null; + } + var lead = this.gb18030_first; + var pointer = null; + this.gb18030_first = 0; + var offset = bite < 127 ? 64 : 65; + if (inRange(bite, 64, 126) || inRange(bite, 128, 254)) + pointer = (lead - 129) * 190 + (bite - offset); + code_point = pointer === null ? null : indexCodePointFor(pointer, index("gb18030")); + if (code_point === null && isASCIIByte(bite)) + stream2.prepend(bite); + if (code_point === null) + return decoderError(this.fatal); + return code_point; + } + if (isASCIIByte(bite)) + return bite; + if (bite === 128) + return 8364; + if (inRange(bite, 129, 254)) { + this.gb18030_first = bite; + return null; + } + return decoderError(this.fatal); + } +}; +var GB18030Encoder = class { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return Byte(s) to emit. + */ + handler(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + if (code_point === 58853) + return encoderError(code_point); + if (this.gbk_flag && code_point === 8364) + return 128; + var pointer = indexPointerFor(code_point, index("gb18030")); + if (pointer !== null) { + var lead = floor(pointer / 190) + 129; + var trail = pointer % 190; + var offset = trail < 63 ? 64 : 65; + return [lead, trail + offset]; + } + if (this.gbk_flag) + return encoderError(code_point); + pointer = indexGB18030RangesPointerFor(code_point); + var byte1 = floor(pointer / 10 / 126 / 10); + pointer = pointer - byte1 * 10 * 126 * 10; + var byte2 = floor(pointer / 10 / 126); + pointer = pointer - byte2 * 10 * 126; + var byte3 = floor(pointer / 10); + var byte4 = pointer - byte3 * 10; + return [ + byte1 + 129, + byte2 + 48, + byte3 + 129, + byte4 + 48 + ]; + } + constructor(options = {}, gbk_flag = false) { + this.gbk_flag = gbk_flag; + } +}; + +// node_modules/text-decoding/src/implementations/big5.js +var Big5Decoder = class { + constructor(options) { + const { fatal } = options; + this.fatal = fatal; + this.Big5_lead = 0; + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream2, bite) { + if (bite === end_of_stream && this.Big5_lead !== 0) { + this.Big5_lead = 0; + return decoderError(this.fatal); + } + if (bite === end_of_stream && this.Big5_lead === 0) + return finished; + if (this.Big5_lead !== 0) { + const lead = this.Big5_lead; + let pointer = null; + this.Big5_lead = 0; + const offset = bite < 127 ? 64 : 98; + if (inRange(bite, 64, 126) || inRange(bite, 161, 254)) + pointer = (lead - 129) * 157 + (bite - offset); + switch (pointer) { + case 1133: + return [202, 772]; + case 1135: + return [202, 780]; + case 1164: + return [234, 772]; + case 1166: + return [234, 780]; + } + const code_point = pointer === null ? null : indexCodePointFor(pointer, index("big5")); + if (code_point === null && isASCIIByte(bite)) + stream2.prepend(bite); + if (code_point === null) + return decoderError(this.fatal); + return code_point; + } + if (isASCIIByte(bite)) + return bite; + if (inRange(bite, 129, 254)) { + this.Big5_lead = bite; + return null; + } + return decoderError(this.fatal); + } +}; +var Big5Encoder = class { + constructor() { + this.handler = function(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + const pointer = indexBig5PointerFor(code_point); + if (pointer === null) + return encoderError(code_point); + const lead = floor(pointer / 157) + 129; + if (lead < 161) + return encoderError(code_point); + const trail = pointer % 157; + const offset = trail < 63 ? 64 : 98; + return [lead, trail + offset]; + }; + } +}; + +// node_modules/text-decoding/src/implementations/euc-jp.js +var EUCJPDecoder = class { + constructor(options) { + const { fatal } = options; + this.fatal = fatal; + this.eucjp_jis0212_flag = false; + this.eucjp_lead = 0; + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream2, bite) { + if (bite === end_of_stream && this.eucjp_lead !== 0) { + this.eucjp_lead = 0; + return decoderError(this.fatal); + } + if (bite === end_of_stream && this.eucjp_lead === 0) + return finished; + if (this.eucjp_lead === 142 && inRange(bite, 161, 223)) { + this.eucjp_lead = 0; + return 65377 - 161 + bite; + } + if (this.eucjp_lead === 143 && inRange(bite, 161, 254)) { + this.eucjp_jis0212_flag = true; + this.eucjp_lead = bite; + return null; + } + if (this.eucjp_lead !== 0) { + const lead = this.eucjp_lead; + this.eucjp_lead = 0; + let code_point = null; + if (inRange(lead, 161, 254) && inRange(bite, 161, 254)) { + code_point = indexCodePointFor( + (lead - 161) * 94 + (bite - 161), + index(!this.eucjp_jis0212_flag ? "jis0208" : "jis0212") + ); + } + this.eucjp_jis0212_flag = false; + if (!inRange(bite, 161, 254)) + stream2.prepend(bite); + if (code_point === null) + return decoderError(this.fatal); + return code_point; + } + if (isASCIIByte(bite)) + return bite; + if (bite === 142 || bite === 143 || inRange(bite, 161, 254)) { + this.eucjp_lead = bite; + return null; + } + return decoderError(this.fatal); + } +}; +var EUCJPEncoder = class { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + if (code_point === 165) + return 92; + if (code_point === 8254) + return 126; + if (inRange(code_point, 65377, 65439)) + return [142, code_point - 65377 + 161]; + if (code_point === 8722) + code_point = 65293; + const pointer = indexPointerFor(code_point, index("jis0208")); + if (pointer === null) + return encoderError(code_point); + const lead = floor(pointer / 94) + 161; + const trail = pointer % 94 + 161; + return [lead, trail]; + } +}; + +// node_modules/text-decoding/src/implementations/euc-kr.js +var EUCKRDecoder = class { + constructor(options) { + const { fatal } = options; + this.fatal = fatal; + this.euckr_lead = 0; + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream2, bite) { + if (bite === end_of_stream && this.euckr_lead !== 0) { + this.euckr_lead = 0; + return decoderError(this.fatal); + } + if (bite === end_of_stream && this.euckr_lead === 0) + return finished; + if (this.euckr_lead !== 0) { + const lead = this.euckr_lead; + let pointer = null; + this.euckr_lead = 0; + if (inRange(bite, 65, 254)) + pointer = (lead - 129) * 190 + (bite - 65); + const code_point = pointer === null ? null : indexCodePointFor(pointer, index("euc-kr")); + if (pointer === null && isASCIIByte(bite)) + stream2.prepend(bite); + if (code_point === null) + return decoderError(this.fatal); + return code_point; + } + if (isASCIIByte(bite)) + return bite; + if (inRange(bite, 129, 254)) { + this.euckr_lead = bite; + return null; + } + return decoderError(this.fatal); + } +}; +var EUCKREncoder = class { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + handler(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + const pointer = indexPointerFor(code_point, index("euc-kr")); + if (pointer === null) + return encoderError(code_point); + const lead = floor(pointer / 190) + 129; + const trail = pointer % 190 + 65; + return [lead, trail]; + } +}; + +// node_modules/text-decoding/src/implementations/iso-2022-jp.js +var ISO2022JPDecoder = class { + constructor(options) { + const { fatal } = options; + this.fatal = fatal; + this.states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6 + }; + this.iso2022jp_decoder_state = this.states.ASCII; + this.iso2022jp_decoder_output_state = this.states.ASCII, this.iso2022jp_lead = 0; + this.iso2022jp_output_flag = false; + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream2, bite) { + switch (this.iso2022jp_decoder_state) { + default: + case this.states.ASCII: + if (bite === 27) { + this.iso2022jp_decoder_state = this.states.EscapeStart; + return null; + } + if (inRange(bite, 0, 127) && bite !== 14 && bite !== 15 && bite !== 27) { + this.iso2022jp_output_flag = false; + return bite; + } + if (bite === end_of_stream) { + return finished; + } + this.iso2022jp_output_flag = false; + return decoderError(this.fatal); + case this.states.Roman: + if (bite === 27) { + this.iso2022jp_decoder_state = this.states.EscapeStart; + return null; + } + if (bite === 92) { + this.iso2022jp_output_flag = false; + return 165; + } + if (bite === 126) { + this.iso2022jp_output_flag = false; + return 8254; + } + if (inRange(bite, 0, 127) && bite !== 14 && bite !== 15 && bite !== 27 && bite !== 92 && bite !== 126) { + this.iso2022jp_output_flag = false; + return bite; + } + if (bite === end_of_stream) { + return finished; + } + this.iso2022jp_output_flag = false; + return decoderError(this.fatal); + case this.states.Katakana: + if (bite === 27) { + this.iso2022jp_decoder_state = this.states.EscapeStart; + return null; + } + if (inRange(bite, 33, 95)) { + this.iso2022jp_output_flag = false; + return 65377 - 33 + bite; + } + if (bite === end_of_stream) { + return finished; + } + this.iso2022jp_output_flag = false; + return decoderError(this.fatal); + case this.states.LeadByte: + if (bite === 27) { + this.iso2022jp_decoder_state = this.states.EscapeStart; + return null; + } + if (inRange(bite, 33, 126)) { + this.iso2022jp_output_flag = false; + this.iso2022jp_lead = bite; + this.iso2022jp_decoder_state = this.states.TrailByte; + return null; + } + if (bite === end_of_stream) { + return finished; + } + this.iso2022jp_output_flag = false; + return decoderError(this.fatal); + case this.states.TrailByte: + if (bite === 27) { + this.iso2022jp_decoder_state = this.states.EscapeStart; + return decoderError(this.fatal); + } + if (inRange(bite, 33, 126)) { + this.iso2022jp_decoder_state = this.states.LeadByte; + const pointer = (this.iso2022jp_lead - 33) * 94 + bite - 33; + const code_point = indexCodePointFor(pointer, index("jis0208")); + if (code_point === null) + return decoderError(this.fatal); + return code_point; + } + if (bite === end_of_stream) { + this.iso2022jp_decoder_state = this.states.LeadByte; + stream2.prepend(bite); + return decoderError(this.fatal); + } + this.iso2022jp_decoder_state = this.states.LeadByte; + return decoderError(this.fatal); + case this.states.EscapeStart: + if (bite === 36 || bite === 40) { + this.iso2022jp_lead = bite; + this.iso2022jp_decoder_state = this.states.Escape; + return null; + } + stream2.prepend(bite); + this.iso2022jp_output_flag = false; + this.iso2022jp_decoder_state = this.iso2022jp_decoder_output_state; + return decoderError(this.fatal); + case this.states.Escape: { + const lead = this.iso2022jp_lead; + this.iso2022jp_lead = 0; + let state = null; + if (lead === 40 && bite === 66) + state = this.states.ASCII; + if (lead === 40 && bite === 74) + state = this.states.Roman; + if (lead === 40 && bite === 73) + state = this.states.Katakana; + if (lead === 36 && (bite === 64 || bite === 66)) + state = this.states.LeadByte; + if (state !== null) { + this.iso2022jp_decoder_state = this.iso2022jp_decoder_state = state; + const output_flag = this.iso2022jp_output_flag; + this.iso2022jp_output_flag = true; + return !output_flag ? null : decoderError(this.fatal); + } + stream2.prepend([lead, bite]); + this.iso2022jp_output_flag = false; + this.iso2022jp_decoder_state = this.iso2022jp_decoder_output_state; + return decoderError(this.fatal); + } + } + } +}; +var ISO2022JPEncoder = class { + constructor() { + this.states = { + ASCII: 0, + Roman: 1, + jis0208: 2 + }; + this.iso2022jp_state = this.states.ASCII; + } + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream2, code_point) { + if (code_point === end_of_stream && this.iso2022jp_state !== this.states.ASCII) { + stream2.prepend(code_point); + this.iso2022jp_state = this.states.ASCII; + return [27, 40, 66]; + } + if (code_point === end_of_stream && this.iso2022jp_state === this.states.ASCII) + return finished; + if ((this.iso2022jp_state === this.states.ASCII || this.iso2022jp_state === this.states.Roman) && (code_point === 14 || code_point === 15 || code_point === 27)) { + return encoderError(65533); + } + if (this.iso2022jp_state === this.states.ASCII && isASCIICodePoint(code_point)) + return code_point; + if (this.iso2022jp_state === this.states.Roman && (isASCIICodePoint(code_point) && code_point !== 92 && code_point !== 126 || (code_point == 165 || code_point == 8254))) { + if (isASCIICodePoint(code_point)) + return code_point; + if (code_point === 165) + return 92; + if (code_point === 8254) + return 126; + } + if (isASCIICodePoint(code_point) && this.iso2022jp_state !== this.states.ASCII) { + stream2.prepend(code_point); + this.iso2022jp_state = this.states.ASCII; + return [27, 40, 66]; + } + if ((code_point === 165 || code_point === 8254) && this.iso2022jp_state !== this.states.Roman) { + stream2.prepend(code_point); + this.iso2022jp_state = this.states.Roman; + return [27, 40, 74]; + } + if (code_point === 8722) + code_point = 65293; + const pointer = indexPointerFor(code_point, index("jis0208")); + if (pointer === null) + return encoderError(code_point); + if (this.iso2022jp_state !== this.states.jis0208) { + stream2.prepend(code_point); + this.iso2022jp_state = this.states.jis0208; + return [27, 36, 66]; + } + const lead = floor(pointer / 94) + 33; + const trail = pointer % 94 + 33; + return [lead, trail]; + } +}; + +// node_modules/text-decoding/src/implementations/x-user-defined.js +var XUserDefinedDecoder = class { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream2, bite) { + if (bite === end_of_stream) + return finished; + if (isASCIIByte(bite)) + return bite; + return 63360 + bite - 128; + } +}; +var XUserDefinedEncoder = class { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + if (inRange(code_point, 63360, 63487)) + return code_point - 63360 + 128; + return encoderError(code_point); + } +}; + +// node_modules/text-decoding/src/implementations/shift-jis.js +var ShiftJISDecoder = class { + constructor(options) { + const { fatal } = options; + this.fatal = fatal; + this.Shift_JIS_lead = 0; + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream2, bite) { + if (bite === end_of_stream && this.Shift_JIS_lead !== 0) { + this.Shift_JIS_lead = 0; + return decoderError(this.fatal); + } + if (bite === end_of_stream && this.Shift_JIS_lead === 0) + return finished; + if (this.Shift_JIS_lead !== 0) { + var lead = this.Shift_JIS_lead; + var pointer = null; + this.Shift_JIS_lead = 0; + var offset = bite < 127 ? 64 : 65; + var lead_offset = lead < 160 ? 129 : 193; + if (inRange(bite, 64, 126) || inRange(bite, 128, 252)) + pointer = (lead - lead_offset) * 188 + bite - offset; + if (inRange(pointer, 8836, 10715)) + return 57344 - 8836 + pointer; + var code_point = pointer === null ? null : indexCodePointFor(pointer, index("jis0208")); + if (code_point === null && isASCIIByte(bite)) + stream2.prepend(bite); + if (code_point === null) + return decoderError(this.fatal); + return code_point; + } + if (isASCIIByte(bite) || bite === 128) + return bite; + if (inRange(bite, 161, 223)) + return 65377 - 161 + bite; + if (inRange(bite, 129, 159) || inRange(bite, 224, 252)) { + this.Shift_JIS_lead = bite; + return null; + } + return decoderError(this.fatal); + } +}; +var ShiftJISEncoder = class { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point) || code_point === 128) + return code_point; + if (code_point === 165) + return 92; + if (code_point === 8254) + return 126; + if (inRange(code_point, 65377, 65439)) + return code_point - 65377 + 161; + if (code_point === 8722) + code_point = 65293; + var pointer = indexShiftJISPointerFor(code_point); + if (pointer === null) + return encoderError(code_point); + var lead = floor(pointer / 188); + var lead_offset = lead < 31 ? 129 : 193; + var trail = pointer % 188; + var offset = trail < 63 ? 64 : 65; + return [lead + lead_offset, trail + offset]; + } +}; + +// node_modules/text-decoding/src/implementations/single-byte.js +var SingleByteDecoder = class { + /** + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + constructor(index2, options) { + const { fatal } = options; + this.fatal = fatal; + this.index = index2; + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream2, bite) { + if (bite === end_of_stream) + return finished; + if (isASCIIByte(bite)) + return bite; + var code_point = this.index[bite - 128]; + if (code_point === null) + return decoderError(this.fatal); + return code_point; + } +}; +var SingleByteEncoder = class { + /** + * @param {!Array.} index The encoding index. + */ + constructor(index2) { + this.index = index2; + } + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + handler(stream2, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + const pointer = indexPointerFor(code_point, this.index); + if (pointer === null) + encoderError(code_point); + return pointer + 128; + } +}; + +// node_modules/text-decoding/src/table.js +var label_to_encoding = {}; +encodings_default.forEach(({ encodings: encodings2 }) => { + encodings2.forEach((encoding) => { + encoding.labels.forEach((label) => { + label_to_encoding[label] = encoding; + }); + }); +}); +var encoders = { + "UTF-8"() { + return new UTF8Encoder(); + }, + "GBK"(options) { + return new GB18030Encoder(options, true); + }, + "gb18030"() { + return new GB18030Encoder(); + }, + "Big5"() { + return new Big5Encoder(); + }, + "EUC-JP"() { + return new EUCJPEncoder(); + }, + "EUC-KR"() { + return new EUCKREncoder(); + }, + "ISO-2022-JP"() { + return new ISO2022JPEncoder(); + }, + "UTF-16BE"() { + return new UTF16Encoder(true); + }, + "UTF-16LE"() { + return new UTF16Encoder(); + }, + "x-user-defined"() { + return new XUserDefinedEncoder(); + }, + "Shift_JIS"() { + return new ShiftJISEncoder(); + } +}; +var decoders = { + "UTF-8"(options) { + return new UTF8Decoder(options); + }, + "GBK"(options) { + return new GB18030Decoder(options); + }, + "gb18030"(options) { + return new GB18030Decoder(options); + }, + "Big5"(options) { + return new Big5Decoder(options); + }, + "EUC-JP"(options) { + return new EUCJPDecoder(options); + }, + "EUC-KR"(options) { + return new EUCKRDecoder(options); + }, + "ISO-2022-JP"(options) { + return new ISO2022JPDecoder(options); + }, + "UTF-16BE"(options) { + return new UTF16Decoder(true, options); + }, + "UTF-16LE"(options) { + return new UTF16Decoder(false, options); + }, + "x-user-defined"() { + return new XUserDefinedDecoder(); + }, + "Shift_JIS"(options) { + return new ShiftJISDecoder(options); + } +}; +encodings_default.forEach(({ heading, encodings: encodings2 }) => { + if (heading != "Legacy single-byte encodings") + return; + encodings2.forEach((encoding) => { + const name = encoding.name; + const idx = index(name.toLowerCase()); + decoders[name] = (options) => { + return new SingleByteDecoder(idx, options); + }; + encoders[name] = (options) => { + return new SingleByteEncoder(idx, options); + }; + }); +}); + +// node_modules/text-decoding/src/lib/index.js +var Stream = class { + /** + * A stream represents an ordered sequence of tokens. + * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide + * the stream. + */ + constructor(tokens) { + this.tokens = [...tokens]; + this.tokens.reverse(); + } + /** + * @returns True if end-of-stream has been hit. + */ + endOfStream() { + return !this.tokens.length; + } + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return Get the next token from the stream, or end_of_stream. + */ + read() { + if (!this.tokens.length) + return end_of_stream; + return this.tokens.pop(); + } + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend(token) { + if (Array.isArray(token)) { + var tokens = ( + /**@type {!Array.}*/ + token + ); + while (tokens.length) + this.tokens.push(tokens.pop()); + } else { + this.tokens.push(token); + } + } + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push(token) { + if (Array.isArray(token)) { + const tokens = ( + /**@type {!Array.}*/ + token + ); + while (tokens.length) + this.tokens.unshift(tokens.shift()); + } else { + this.tokens.unshift(token); + } + } +}; +var DEFAULT_ENCODING = "utf-8"; +function getEncoding(label) { + label = String(label).trim().toLowerCase(); + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label]; + } + return null; +} + +// node_modules/text-decoding/src/lib/TextEncoder.js +var TextEncoder = class { + /** + * @param {string=} label The label of the encoding. NONSTANDARD. + * @param {Object=} [options] NONSTANDARD. + */ + constructor(label, options = {}) { + this._encoding = null; + this._encoder = null; + this._do_not_flush = false; + this._fatal = options["fatal"] ? "fatal" : "replacement"; + if (options["NONSTANDARD_allowLegacyEncoding"]) { + label = label !== void 0 ? String(label) : DEFAULT_ENCODING; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === "replacement") + throw RangeError("Unknown encoding: " + label); + if (!encoders[encoding.name]) { + throw Error("Encoder not present. Did you forget to include encoding-indexes.js first?"); + } + this._encoding = encoding; + } else { + this._encoding = getEncoding("utf-8"); + if (label !== void 0 && "console" in global) { + console.warn("TextEncoder constructor called with encoding label, which is ignored."); + } + } + } + get encoding() { + return this._encoding.name.toLowerCase(); + } + /** + * @param {string=} opt_string The string to encode. + * @param {Object=} options + */ + encode(opt_string = "", options = {}) { + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === "fatal" + }); + this._do_not_flush = Boolean(options["stream"]); + const input = new Stream(stringToCodePoints(opt_string)); + const output = []; + var result; + while (true) { + var token = input.read(); + if (token === end_of_stream) + break; + result = this._encoder.handler(input, token); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply( + output, + /**@type {!Array.}*/ + result + ); + else + output.push(result); + } + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply( + output, + /**@type {!Array.}*/ + result + ); + else + output.push(result); + } + this._encoder = null; + } + return new Uint8Array(output); + } +}; + +// node_modules/text-decoding/src/lib/TextDecoder.js +var TextDecoder = class { + /** + * @param {string=} label The label of the encoding; defaults to 'utf-8'. + * @param {Object=} options + */ + constructor(label = DEFAULT_ENCODING, options = {}) { + this._encoding = null; + this._decoder = null; + this._ignoreBOM = false; + this._BOMseen = false; + this._error_mode = "replacement"; + this._do_not_flush = false; + const encoding = getEncoding(label); + if (encoding === null || encoding.name == "replacement") + throw RangeError("Unknown encoding: " + label); + if (!decoders[encoding.name]) { + throw Error("Decoder not present. Did you forget to include encoding-indexes.js first?"); + } + this._encoding = encoding; + if (options["fatal"]) + this._error_mode = "fatal"; + if (options["ignoreBOM"]) + this._ignoreBOM = true; + } + get encoding() { + return this._encoding.name.toLowerCase(); + } + get fatal() { + return this._error_mode === "fatal"; + } + get ignoreBOM() { + return this._ignoreBOM; + } + /** + * @param {BufferSource=} input The buffer of bytes to decode. + * @param {Object=} options + * @return The decoded string. + */ + decode(input, options = {}) { + let bytes; + if (typeof input === "object" && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input); + } else if (typeof input === "object" && "buffer" in input && input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array( + input.buffer, + input.byteOffset, + input.byteLength + ); + } else { + bytes = new Uint8Array(0); + } + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === "fatal" + }); + this._BOMseen = false; + } + this._do_not_flush = Boolean(options["stream"]); + const input_stream = new Stream(bytes); + const output = []; + let result; + while (true) { + const token = input_stream.read(); + if (token === end_of_stream) + break; + result = this._decoder.handler(input_stream, token); + if (result === finished) + break; + if (result !== null) { + if (Array.isArray(result)) + output.push.apply( + output, + /**@type {!Array.}*/ + result + ); + else + output.push(result); + } + } + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()); + if (result === finished) + break; + if (result === null) + continue; + if (Array.isArray(result)) + output.push.apply( + output, + /**@type {!Array.}*/ + result + ); + else + output.push(result); + } while (!input_stream.endOfStream()); + this._decoder = null; + } + return this.serializeStream(output); + } + // A TextDecoder object also has an associated serialize stream + // algorithm... + /** + * @param {!Array.} stream + */ + serializeStream(stream2) { + if (["UTF-8", "UTF-16LE", "UTF-16BE"].includes(this._encoding.name) && !this._ignoreBOM && !this._BOMseen) { + if (stream2.length > 0 && stream2[0] === 65279) { + this._BOMseen = true; + stream2.shift(); + } else if (stream2.length > 0) { + this._BOMseen = true; + } else { + } + } + return codePointsToString(stream2); + } +}; + +// node_modules/@war3js/headers-polyfill/lib/index.mjs +var __create2 = Object.create; +var __defProp2 = Object.defineProperty; +var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; +var __getOwnPropNames2 = Object.getOwnPropertyNames; +var __getProtoOf2 = Object.getPrototypeOf; +var __hasOwnProp2 = Object.prototype.hasOwnProperty; +var __commonJS2 = (cb, mod) => function __require2() { + return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var require_set_cookie = __commonJS2({ + "node_modules/set-cookie-parser/lib/set-cookie.js"(exports, module) { + "use strict"; + var defaultParseOptions = { + decodeValues: true, + map: false, + silent: false + }; + function isNonEmptyString(str) { + return typeof str === "string" && !!str.trim(); + } + function parseString(setCookieValue, options) { + var parts = setCookieValue.split(";").filter(isNonEmptyString); + var nameValuePairStr = parts.shift(); + var parsed = parseNameValuePair(nameValuePairStr); + var name = parsed.name; + var value = parsed.value; + options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions; + try { + value = options.decodeValues ? decodeURIComponent(value) : value; + } catch (e) { + console.error( + "set-cookie-parser encountered an error while decoding a cookie with value '" + value + "'. Set options.decodeValues to false to disable this feature.", + e + ); + } + var cookie = { + name, + value + }; + parts.forEach(function(part) { + var sides = part.split("="); + var key = sides.shift().trimLeft().toLowerCase(); + var value2 = sides.join("="); + if (key === "expires") { + cookie.expires = new Date(value2); + } else if (key === "max-age") { + cookie.maxAge = parseInt(value2, 10); + } else if (key === "secure") { + cookie.secure = true; + } else if (key === "httponly") { + cookie.httpOnly = true; + } else if (key === "samesite") { + cookie.sameSite = value2; + } else { + cookie[key] = value2; + } + }); + return cookie; + } + function parseNameValuePair(nameValuePairStr) { + var name = ""; + var value = ""; + var nameValueArr = nameValuePairStr.split("="); + if (nameValueArr.length > 1) { + name = nameValueArr.shift(); + value = nameValueArr.join("="); + } else { + value = nameValuePairStr; + } + return { name, value }; + } + function parse(input, options) { + options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions; + if (!input) { + if (!options.map) { + return []; + } else { + return {}; + } + } + if (input.headers) { + if (typeof input.headers.getSetCookie === "function") { + input = input.headers.getSetCookie(); + } else if (input.headers["set-cookie"]) { + input = input.headers["set-cookie"]; + } else { + var sch = input.headers[Object.keys(input.headers).find(function(key) { + return key.toLowerCase() === "set-cookie"; + })]; + if (!sch && input.headers.cookie && !options.silent) { + console.warn( + "Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning." + ); + } + input = sch; + } + } + if (!Array.isArray(input)) { + input = [input]; + } + options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions; + if (!options.map) { + return input.filter(isNonEmptyString).map(function(str) { + return parseString(str, options); + }); + } else { + var cookies = {}; + return input.filter(isNonEmptyString).reduce(function(cookies2, str) { + var cookie = parseString(str, options); + cookies2[cookie.name] = cookie; + return cookies2; + }, cookies); + } + } + function splitCookiesString2(cookiesString) { + if (Array.isArray(cookiesString)) { + return cookiesString; + } + if (typeof cookiesString !== "string") { + return []; + } + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) { + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== "=" && ch !== ";" && ch !== ","; + } + while (pos < cookiesString.length) { + start = pos; + cookiesSeparatorFound = false; + while (skipWhitespace()) { + ch = cookiesString.charAt(pos); + if (ch === ",") { + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while (pos < cookiesString.length && notSpecialChar()) { + pos += 1; + } + if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") { + cookiesSeparatorFound = true; + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; + } + module.exports = parse; + module.exports.parse = parse; + module.exports.parseString = parseString; + module.exports.splitCookiesString = splitCookiesString2; + } +}); +var import_set_cookie_parser = __toESM2(require_set_cookie()); +var HEADERS_INVALID_CHARACTERS = /[^a-z0-9\-#$%&'*+.^_`|~]/i; +function normalizeHeaderName(name) { + if (HEADERS_INVALID_CHARACTERS.test(name) || name.trim() === "") { + throw new TypeError("Invalid character in header field name"); + } + return name.trim().toLowerCase(); +} +var charCodesToRemove = [ + String.fromCharCode(10), + String.fromCharCode(13), + String.fromCharCode(9), + String.fromCharCode(32) +]; +var HEADER_VALUE_REMOVE_REGEXP = new RegExp( + `(^[${charCodesToRemove.join("")}]|$[${charCodesToRemove.join("")}])`, + "g" +); +function normalizeHeaderValue(value) { + const nextValue = value.replace(HEADER_VALUE_REMOVE_REGEXP, ""); + return nextValue; +} +function isValidHeaderName(value) { + if (typeof value !== "string") { + return false; + } + if (value.length === 0) { + return false; + } + for (let i = 0; i < value.length; i++) { + const character = value.charCodeAt(i); + if (character > 127 || !isToken(character)) { + return false; + } + } + return true; +} +function isToken(value) { + return ![ + 127, + 32, + "(", + ")", + "<", + ">", + "@", + ",", + ";", + ":", + "\\", + '"', + "/", + "[", + "]", + "?", + "=", + "{", + "}" + ].includes(value); +} +function isValidHeaderValue(value) { + if (typeof value !== "string") { + return false; + } + if (value.trim() !== value) { + return false; + } + for (let i = 0; i < value.length; i++) { + const character = value.charCodeAt(i); + if ( + // NUL. + character === 0 || // HTTP newline bytes. + character === 10 || character === 13 + ) { + return false; + } + } + return true; +} +var NORMALIZED_HEADERS = Symbol("normalizedHeaders"); +var RAW_HEADER_NAMES = Symbol("rawHeaderNames"); +var HEADER_VALUE_DELIMITER = ", "; +var _a; +var _b; +var Headers = class _Headers { + constructor(init) { + this[_a] = {}; + this[_b] = /* @__PURE__ */ new Map(); + if (["Headers", "HeadersPolyfill"].includes(init?.constructor.name) || init instanceof _Headers || typeof globalThis.Headers !== "undefined" && init instanceof globalThis.Headers) { + const initialHeaders = init; + initialHeaders.forEach((value, name) => { + this.append(name, value); + }, this); + } else if (Array.isArray(init)) { + init.forEach(([name, value]) => { + this.append( + name, + Array.isArray(value) ? value.join(HEADER_VALUE_DELIMITER) : value + ); + }); + } else if (init) { + Object.getOwnPropertyNames(init).forEach((name) => { + const value = init[name]; + this.append( + name, + Array.isArray(value) ? value.join(HEADER_VALUE_DELIMITER) : value + ); + }); + } + } + [(_a = NORMALIZED_HEADERS, _b = RAW_HEADER_NAMES, Symbol.iterator)]() { + return this.entries(); + } + *keys() { + for (const [name] of this.entries()) { + yield name; + } + } + *values() { + for (const [, value] of this.entries()) { + yield value; + } + } + *entries() { + let sortedKeys = Object.keys(this[NORMALIZED_HEADERS]).sort( + (a, b) => a.localeCompare(b) + ); + for (const name of sortedKeys) { + if (name === "set-cookie") { + for (const value of this.getSetCookie()) { + yield [name, value]; + } + } else { + yield [name, this.get(name)]; + } + } + } + /** + * Returns a boolean stating whether a `Headers` object contains a certain header. + */ + has(name) { + if (!isValidHeaderName(name)) { + throw new TypeError(`Invalid header name "${name}"`); + } + return this[NORMALIZED_HEADERS].hasOwnProperty(normalizeHeaderName(name)); + } + /** + * Returns a `ByteString` sequence of all the values of a header with a given name. + */ + get(name) { + if (!isValidHeaderName(name)) { + throw TypeError(`Invalid header name "${name}"`); + } + return this[NORMALIZED_HEADERS][normalizeHeaderName(name)] ?? null; + } + /** + * Sets a new value for an existing header inside a `Headers` object, or adds the header if it does not already exist. + */ + set(name, value) { + if (!isValidHeaderName(name) || !isValidHeaderValue(value)) { + return; + } + const normalizedName = normalizeHeaderName(name); + const normalizedValue = normalizeHeaderValue(value); + this[NORMALIZED_HEADERS][normalizedName] = normalizeHeaderValue(normalizedValue); + this[RAW_HEADER_NAMES].set(normalizedName, name); + } + /** + * Appends a new value onto an existing header inside a `Headers` object, or adds the header if it does not already exist. + */ + append(name, value) { + if (!isValidHeaderName(name) || !isValidHeaderValue(value)) { + return; + } + const normalizedName = normalizeHeaderName(name); + const normalizedValue = normalizeHeaderValue(value); + let resolvedValue = this.has(normalizedName) ? `${this.get(normalizedName)}, ${normalizedValue}` : normalizedValue; + this.set(name, resolvedValue); + } + /** + * Deletes a header from the `Headers` object. + */ + delete(name) { + if (!isValidHeaderName(name)) { + return; + } + if (!this.has(name)) { + return; + } + const normalizedName = normalizeHeaderName(name); + delete this[NORMALIZED_HEADERS][normalizedName]; + this[RAW_HEADER_NAMES].delete(normalizedName); + } + /** + * Traverses the `Headers` object, + * calling the given callback for each header. + */ + forEach(callback, thisArg) { + for (const [name, value] of this.entries()) { + callback.call(thisArg, value, name, this); + } + } + /** + * Returns an array containing the values + * of all Set-Cookie headers associated + * with a response + */ + getSetCookie() { + const setCookieHeader = this.get("set-cookie"); + if (setCookieHeader === null) { + return []; + } + if (setCookieHeader === "") { + return [""]; + } + return (0, import_set_cookie_parser.splitCookiesString)(setCookieHeader); + } +}; +function getRawHeaders(headers) { + const rawHeaders = {}; + for (const [name, value] of headers.entries()) { + rawHeaders[headers[RAW_HEADER_NAMES].get(name)] = value; + } + return rawHeaders; +} + +// node_modules/@war3js/curl/index.js +function stub() { + throw new Error("Not implemented"); +} +var curl_easy_init = stub; +var curl_easy_perform = stub; +var curl_easy_setopt = stub; +var curl_easy_cleanup = stub; +var curl_ws_recv = stub; +var curl_ws_send = stub; +var constants = new Proxy( + {}, + { + get: () => 0 + } +); + +// src/services/websocket/Websocket.ts +var maxReceivedMessageSize = 15 * 1024 * 1024; +var maxReceivedFrameSize = 512 * 1024; +var maxSendedMessageSize = 15 * 1024 * 1024; +var maxSendedFrameSize = 512 * 1024; +var CLOSE_DESCRIPTIONS = { + 1e3: "Normal connection closure", + 1001: "Remote peer is going away", + 1002: "Protocol error", + 1003: "Unprocessable input", + 1004: "Reserved", + 1005: "Reason not provided", + 1006: "Abnormal closure, no further detail available", + 1007: "Invalid data received", + 1008: "Policy violation", + 1009: "Message too big", + 1010: "Extension requested by client is required", + 1011: "Internal Server Error", + 1015: "TLS Handshake Failed" +}; +var _curlHandle, _connectionSate, _incomingMessage, _incomingFrame, _currentOurgoingFrame, _outgoingFrameQueue, _errorThrown, _sendClose, sendClose_fn, _queueFrame, queueFrame_fn, _processSocket, _processIncomingFrame, processIncomingFrame_fn, _free, free_fn, _readSocket, readSocket_fn, _sendSocket, sendSocket_fn, _emitError, emitError_fn, _dropConnection, dropConnection_fn, _validateCloseReason, validateCloseReason_fn, _onCurlPerformEnd; +var _Websocket = class _Websocket extends EventEmitter { + constructor(url, headers) { + super(); + __privateAdd(this, _sendClose); + __privateAdd(this, _queueFrame); + __privateAdd(this, _processIncomingFrame); + __privateAdd(this, _free); + __privateAdd(this, _readSocket); + __privateAdd(this, _sendSocket); + __privateAdd(this, _emitError); + __privateAdd(this, _dropConnection); + __privateAdd(this, _validateCloseReason); + __privateAdd(this, _curlHandle, void 0); + __privateAdd(this, _connectionSate, void 0); + __privateAdd(this, _incomingMessage, void 0); + __privateAdd(this, _incomingFrame, void 0); + __privateAdd(this, _currentOurgoingFrame, void 0); + __privateAdd(this, _outgoingFrameQueue, []); + __privateAdd(this, _errorThrown, false); + __privateAdd(this, _processSocket, () => { + if (__privateGet(this, _connectionSate) === _Websocket.OPEN) { + __privateMethod(this, _readSocket, readSocket_fn).call(this); + } else if (__privateGet(this, _connectionSate) !== _Websocket.CONNECTING || __privateGet(this, _connectionSate) !== _Websocket.CLOSED) { + __privateMethod(this, _sendSocket, sendSocket_fn).call(this); + } + }); + __privateAdd(this, _onCurlPerformEnd, (code, string) => { + if (__privateGet(this, _connectionSate) === _Websocket.CLOSED) { + curl_easy_cleanup(__privateGet(this, _curlHandle)); + return; + } + __privateSet(this, _connectionSate, code === 0 ? _Websocket.OPEN : _Websocket.CLOSED); + if (__privateGet(this, _connectionSate) === _Websocket.CLOSED) { + __privateMethod(this, _emitError, emitError_fn).call(this, new Error(string)); + curl_easy_cleanup(__privateGet(this, _curlHandle)); + __privateSet(this, _curlHandle, null); + } else if (__privateGet(this, _connectionSate) === _Websocket.OPEN) { + this.emit("open"); + TimerStart(CreateTimerNe(), 1, true, __privateGet(this, _processSocket)); + } + }); + __privateSet(this, _curlHandle, curl_easy_init()); + curl_easy_setopt(__privateGet(this, _curlHandle), constants.CURLOPT_URL, url); + if (headers instanceof Headers) + curl_easy_setopt(__privateGet(this, _curlHandle), constants.CURLOPT_HTTPHEADER, getRawHeaders(headers)); + curl_easy_setopt(__privateGet(this, _curlHandle), constants.CURLOPT_CONNECT_ONLY, 2); + curl_easy_setopt(__privateGet(this, _curlHandle), constants.CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_perform(__privateGet(this, _curlHandle), __privateGet(this, _onCurlPerformEnd)); + __privateSet(this, _connectionSate, _Websocket.CONNECTING); + __privateSet(this, _incomingFrame, new Uint8Array(new ArrayBuffer(maxReceivedFrameSize))); + } + get readyState() { + if (__privateGet(this, _connectionSate) === _Websocket.CLOSED && (__privateGet(this, _currentOurgoingFrame) || __privateGet(this, _outgoingFrameQueue).length > 0)) + return _Websocket.CLOSING; + return __privateGet(this, _connectionSate); + } + get bufferedAmount() { + return __privateGet(this, _outgoingFrameQueue).reduce( + (prev, i) => { + return prev + i.frame.byteLength; + }, + __privateGet(this, _currentOurgoingFrame)?.byteLength || 0 + ); + } + send(message) { + if (__privateGet(this, _connectionSate) === _Websocket.CONNECTING) + throw new TypeError("WebSocket still in CONNECTING state."); + if (__privateGet(this, _connectionSate) !== _Websocket.OPEN) + throw new TypeError("WebSocket is already in CLOSING or CLOSED state."); + let messageBuffer; + let messageFlags; + if (message instanceof ArrayBuffer) { + messageBuffer = message; + messageFlags = constants.CURLWS_BINARY; + } else if (message instanceof Uint8Array) { + messageBuffer = message.buffer.slice(message.byteOffset, message.byteLength + message.byteOffset); + messageFlags = constants.CURLWS_BINARY; + } else { + const textEncoder = new TextEncoder(); + messageBuffer = textEncoder.encode(String(message)); + messageFlags = constants.CURLWS_TEXT; + } + __privateMethod(this, _queueFrame, queueFrame_fn).call(this, messageBuffer, messageFlags); + } + close(code, reason) { + if (typeof code !== "number") + code = 1e3; + if (typeof reason !== "string") { + reason = CLOSE_DESCRIPTIONS[code]; + } + if (!__privateMethod(this, _validateCloseReason, validateCloseReason_fn).call(this, code)) { + throw new Error("Close code " + code + " is not valid."); + } + if (reason) { + const textEncoder = new TextEncoder(); + const reasonBytes = textEncoder.encode(reason); + if (reasonBytes.byteLength > 123) { + throw new Error("The message must not be greater than 123 bytes."); + } + __privateMethod(this, _sendClose, sendClose_fn).call(this, code, reasonBytes); + } else { + __privateMethod(this, _sendClose, sendClose_fn).call(this, code); + } + __privateSet(this, _connectionSate, _Websocket.CLOSING); + } +}; +_curlHandle = new WeakMap(); +_connectionSate = new WeakMap(); +_incomingMessage = new WeakMap(); +_incomingFrame = new WeakMap(); +_currentOurgoingFrame = new WeakMap(); +_outgoingFrameQueue = new WeakMap(); +_errorThrown = new WeakMap(); +_sendClose = new WeakSet(); +sendClose_fn = function(code, reasonBytes) { + const body = new ArrayBuffer(2 + (reasonBytes?.byteLength || 0)); + const bodyWriter = new DataView(body); + const bodyBuffer = new Uint8Array(body); + bodyWriter.setUint16(0, code); + if (reasonBytes) + bodyBuffer.set(reasonBytes, 2); + __privateMethod(this, _queueFrame, queueFrame_fn).call(this, body, constants.CURLWS_CLOSE); +}; +_queueFrame = new WeakSet(); +queueFrame_fn = function(payload, flags, front) { + if (payload.byteLength > maxSendedMessageSize) { + throw new Error("Send message too big"); + } + const outgoingFrames = new Array(); + if (payload.byteLength <= maxSendedFrameSize) { + outgoingFrames.push({ + frame: payload, + flags: flags & ~(constants.CURLWS_OFFSET | constants.CURLWS_CONT) + }); + } else { + const totalLength = payload.byteLength; + for (let offset = 0; offset < totalLength; offset += maxSendedFrameSize) { + const chunk = payload.slice(offset, offset + maxSendedFrameSize); + outgoingFrames.push({ + frame: chunk, + flags: flags & ~(constants.CURLWS_OFFSET | constants.CURLWS_CONT) + }); + } + outgoingFrames[outgoingFrames.length - 1].flags &= ~constants.CURLWS_CONT; + } + if (front) + __privateGet(this, _outgoingFrameQueue).unshift(...outgoingFrames); + else + __privateGet(this, _outgoingFrameQueue).push(...outgoingFrames); + try { + __privateMethod(this, _sendSocket, sendSocket_fn).call(this); + } catch (e) { + } +}; +_processSocket = new WeakMap(); +_processIncomingFrame = new WeakSet(); +processIncomingFrame_fn = function(payload, flags) { + if (flags & constants.CURLWS_TEXT || flags & constants.CURLWS_BINARY) { + if (!__privateGet(this, _incomingMessage)) + __privateSet(this, _incomingMessage, { + frames: [], + type: flags & (constants.CURLWS_TEXT | constants.CURLWS_BINARY) + }); + __privateGet(this, _incomingMessage).frames.push(payload); + if (!(flags & constants.CURLWS_CONT)) { + if (__privateGet(this, _incomingMessage).type & constants.CURLWS_TEXT) { + const textDecoder = new TextDecoder("utf8"); + consoleLog(0, __privateGet(this, _incomingMessage).frames.length); + const textMessage = __privateGet(this, _incomingMessage).frames.reduce((prev, currentValue) => { + consoleLog(0, "prev " + prev); + consoleLog(0, "currentValue " + currentValue.byteLength); + return prev + textDecoder.decode(new Uint8Array(currentValue), { stream: true }); + }, ""); + this.emit("message", textMessage); + } else { + const messageSize = __privateGet(this, _incomingMessage).frames.reduce((prev, currentValue) => { + return prev + currentValue.byteLength; + }, 0); + const binaryMessage = new Uint8Array(new ArrayBuffer(messageSize)); + __privateGet(this, _incomingMessage).frames.reduce((prev, currentValue) => { + binaryMessage.set(new Uint8Array(currentValue), prev); + return prev + currentValue.byteLength; + }, 0); + this.emit("message", binaryMessage.buffer); + } + __privateSet(this, _incomingMessage, null); + } else { + const incomingMessageSize = __privateGet(this, _incomingMessage).frames.reduce((prev, currentValue) => { + return prev + currentValue.byteLength; + }, 0); + if (incomingMessageSize > maxReceivedMessageSize) { + __privateMethod(this, _dropConnection, dropConnection_fn).call(this, new Error("Maximum message size exceeded.")); + } + } + } else if (flags & constants.CURLWS_CLOSE) { + consoleLog(0, "#CURLWS_CLOSE"); + if (__privateGet(this, _connectionSate) === _Websocket.CLOSING) { + __privateSet(this, _connectionSate, _Websocket.CLOSED); + __privateMethod(this, _free, free_fn).call(this); + } else { + if (payload.byteLength >= 2) { + __privateSet(this, _connectionSate, _Websocket.CLOSING); + __privateSet(this, _outgoingFrameQueue, []); + __privateMethod(this, _sendClose, sendClose_fn).call(this, new DataView(payload).getUint16(0)); + } + } + } +}; +_free = new WeakSet(); +free_fn = function() { + consoleLog(0, "#free"); + curl_easy_cleanup(__privateGet(this, _curlHandle)); + __privateSet(this, _currentOurgoingFrame, null); + __privateSet(this, _outgoingFrameQueue, []); + __privateSet(this, _incomingMessage, null); + __privateSet(this, _incomingFrame, null); +}; +_readSocket = new WeakSet(); +readSocket_fn = function() { + while (true) { + const readResult = curl_ws_recv(__privateGet(this, _curlHandle), __privateGet(this, _incomingFrame)); + consoleLog(0, "curl_ws_recv", JSON.stringify(readResult)); + if (readResult.result === constants.CURLE_OK) { + if (readResult.recv + readResult.bytesLeft > maxReceivedFrameSize) { + __privateMethod(this, _dropConnection, dropConnection_fn).call(this, new Error("Maximum frame size exceeded.")); + } + __privateSet(this, _incomingFrame, new Uint8Array( + __privateGet(this, _incomingFrame).buffer, + __privateGet(this, _incomingFrame).byteOffset + readResult.recv + )); + if (readResult.bytesLeft === 0) { + __privateMethod(this, _processIncomingFrame, processIncomingFrame_fn).call(this, __privateGet(this, _incomingFrame).buffer.slice(0, __privateGet(this, _incomingFrame).byteOffset), readResult.flags); + __privateSet(this, _incomingFrame, new Uint8Array(__privateGet(this, _incomingFrame).buffer)); + } + if (readResult.recv === 0) { + break; + } + } else if (readResult.result === constants.CURLE_AGAIN) + break; + } +}; +_sendSocket = new WeakSet(); +sendSocket_fn = function() { + if (__privateGet(this, _currentOurgoingFrame)) { + const sendResult = curl_ws_send(__privateGet(this, _curlHandle), __privateGet(this, _currentOurgoingFrame), 0, constants.CURLWS_OFFSET); + consoleLog(0, "curl_ws_send", JSON.stringify(sendResult)); + if (sendResult.result === constants.CURLE_OK) { + if (sendResult.sent === __privateGet(this, _currentOurgoingFrame).byteLength) { + __privateSet(this, _currentOurgoingFrame, null); + } else { + __privateSet(this, _currentOurgoingFrame, new Uint8Array( + __privateGet(this, _currentOurgoingFrame).buffer, + __privateGet(this, _currentOurgoingFrame).byteOffset + sendResult.sent + )); + return; + } + } + } + while (true) { + if (__privateGet(this, _outgoingFrameQueue).length === 0) + return; + const nextFrame = __privateGet(this, _outgoingFrameQueue)[0]; + const sendResult = curl_ws_send( + __privateGet(this, _curlHandle), + nextFrame.frame, + nextFrame.frame.byteLength, + constants.CURLWS_OFFSET | nextFrame.flags + ); + if (sendResult.result === constants.CURLE_OK) { + __privateGet(this, _outgoingFrameQueue).shift(); + if (nextFrame.frame.byteLength !== sendResult.sent) { + __privateSet(this, _currentOurgoingFrame, new Uint8Array(nextFrame.frame, sendResult.sent)); + break; + } + } else if (sendResult.result === constants.CURLE_AGAIN) { + break; + } else if (sendResult.result === constants.CURLE_SEND_ERROR) { + break; + } + } +}; +_emitError = new WeakSet(); +emitError_fn = function(error) { + if (!__privateGet(this, _errorThrown)) { + try { + __privateSet(this, _errorThrown, true); + this.emit("error", error); + } catch (e) { + } + } +}; +_dropConnection = new WeakSet(); +dropConnection_fn = function(e) { + if (e) + __privateMethod(this, _emitError, emitError_fn).call(this, e); + __privateMethod(this, _free, free_fn).call(this); + __privateSet(this, _connectionSate, _Websocket.CLOSED); +}; +_validateCloseReason = new WeakSet(); +validateCloseReason_fn = function(code) { + if (code < 1e3) { + return false; + } + if (code >= 1e3 && code <= 2999) { + return [1e3, 1001, 1002, 1003, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015].indexOf(code) !== -1; + } + if (code >= 3e3 && code <= 3999) { + return true; + } + if (code >= 4e3 && code <= 4999) { + return true; + } + if (code >= 5e3) { + return false; + } +}; +_onCurlPerformEnd = new WeakMap(); +_Websocket.CONNECTING = 0; +_Websocket.OPEN = 1; +_Websocket.CLOSING = 2; +_Websocket.CLOSED = 3; +var Websocket = _Websocket; + +// src/index.ts +var stream = { + Readable: import_readable_stream.Readable, + Writable: import_readable_stream.Writable, + Transform: import_readable_stream.Transform, + Duplex: import_readable_stream.Duplex, + pipeline: import_readable_stream.pipeline, + finished: import_readable_stream.finished +}; +Object.freeze(stream); +var buffer = { + ..._Buffer +}; +Object.freeze(buffer); +var isUjApi = !!getNativeByName("GetUjAPIVersion"); +var console2 = new Console(); +var wrapper = new HandleWrapper(); +setToHandleHolder(toHandleHolderSoft); +var handleBuilder = new HandleBuilder(); +handleBuilder.addChainProperties(Widget, "widget"); +handleBuilder.addChainProperties(Unit, "unit"); +handleBuilder.addChainProperties(Player, "player"); +handleBuilder.addChainProperties(Destructable, "destructable"); +handleBuilder.addChainProperties(Item, "item"); +handleBuilder.addMethods(Widget, "widget"); +handleBuilder.addMethods(Unit, "unit"); +handleBuilder.addMethods(Player, "player"); +handleBuilder.addMethods(Destructable, "destructable"); +handleBuilder.addMethods(Item, "item"); +var instanceApiBuilder = new InstanceApiBuilder(); +instanceApiBuilder.appendAbilityData(AbilityData); +export { + AbilityData, + AbilityLevelAccessor, + Destructable, + Handle, + Headers, + Item, + LimitOp, + Player, + TextDecoder, + TextEncoder, + Unit, + UnitState, + Websocket, + Widget, + buffer, + console2 as console, + isUjApi, + stream +}; diff --git a/package-lock.json b/package-lock.json index 9228b7e..8767e2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "@war3js/bootstrap", "version": "0.0.1", "license": "MIT", + "dependencies": { + "tsup": "^8.0.1" + }, "devDependencies": { "@types/node": "^20.9.0", "@types/readable-stream": "^4.0.10", @@ -64,7 +67,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "devOptional": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -79,7 +82,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -95,7 +97,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -111,7 +112,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -127,7 +127,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -143,7 +142,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -159,7 +157,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -175,7 +172,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -191,7 +187,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -207,7 +202,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -223,7 +217,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -239,7 +232,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -255,7 +247,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -271,7 +262,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -287,7 +277,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -303,7 +292,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -319,7 +307,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -335,7 +322,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -351,7 +337,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -367,7 +352,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -383,7 +367,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -399,7 +382,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -415,7 +397,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -513,11 +494,120 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "engines": { "node": ">=6.0.0" } @@ -525,14 +615,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -542,7 +630,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -555,7 +642,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -564,7 +650,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -573,6 +658,171 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz", + "integrity": "sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz", + "integrity": "sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz", + "integrity": "sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz", + "integrity": "sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz", + "integrity": "sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz", + "integrity": "sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz", + "integrity": "sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz", + "integrity": "sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz", + "integrity": "sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz", + "integrity": "sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz", + "integrity": "sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz", + "integrity": "sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz", + "integrity": "sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@ts-morph/common": { "version": "0.21.0", "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.21.0.tgz", @@ -613,25 +863,30 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "devOptional": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -643,7 +898,7 @@ "version": "20.10.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", - "dev": true, + "devOptional": true, "dependencies": { "undici-types": "~5.26.4" } @@ -915,7 +1170,7 @@ "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, + "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -936,7 +1191,7 @@ "version": "8.3.1", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -961,7 +1216,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -976,7 +1230,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -987,11 +1240,28 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "node_modules/argparse": { "version": "2.0.1", @@ -1003,7 +1273,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { "node": ">=8" } @@ -1011,8 +1280,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -1034,6 +1302,14 @@ } ] }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1048,7 +1324,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1080,6 +1355,28 @@ "ieee754": "^1.2.1" } }, + "node_modules/bundle-require": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.2.tgz", + "integrity": "sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.17" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1105,31 +1402,67 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=12" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", "dev": true }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1140,8 +1473,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/commander": { "version": "2.20.3", @@ -1159,13 +1491,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "devOptional": true }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1179,7 +1510,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1202,7 +1532,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.3.1" } @@ -1211,7 +1541,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -1253,17 +1582,20 @@ "node": ">=14.0.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/esbuild": { "version": "0.19.9", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -1477,6 +1809,28 @@ "node": ">=0.8.x" } }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1487,7 +1841,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -1503,7 +1856,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -1527,7 +1879,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -1548,7 +1899,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1592,12 +1942,51 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1607,6 +1996,17 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -1658,7 +2058,6 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -1689,6 +2088,14 @@ "node": ">=8" } }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -1713,7 +2120,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "dev": true, "engines": { "node": ">= 4" } @@ -1759,11 +2165,21 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1772,7 +2188,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -1781,7 +2196,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -1793,7 +2207,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -1807,11 +2220,38 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } }, "node_modules/jass-to-ast": { "version": "2.0.2", @@ -1826,6 +2266,14 @@ "jass-to-ast": "index.js" } }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "engines": { + "node": ">=10" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1884,6 +2332,27 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -1905,6 +2374,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1927,7 +2401,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "node_modules/marked": { "version": "4.3.0", @@ -1941,11 +2415,15 @@ "node": ">= 12" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -1954,7 +2432,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -1963,6 +2440,14 @@ "node": ">=8.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1975,6 +2460,14 @@ "node": "*" } }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mkdirp": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", @@ -1999,8 +2492,17 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } }, "node_modules/natural-compare": { "version": "1.4.0", @@ -2030,6 +2532,33 @@ "url": "https://nearley.js.org/#give-to-nearley" } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2039,6 +2568,20 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -2126,16 +2669,37 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -2144,7 +2708,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -2152,6 +2715,48 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2189,7 +2794,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "engines": { "node": ">=6" } @@ -2198,7 +2802,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -2249,6 +2852,17 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2280,7 +2894,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -2301,11 +2914,41 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.4.tgz", + "integrity": "sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.4", + "@rollup/rollup-android-arm64": "4.9.4", + "@rollup/rollup-darwin-arm64": "4.9.4", + "@rollup/rollup-darwin-x64": "4.9.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.4", + "@rollup/rollup-linux-arm64-gnu": "4.9.4", + "@rollup/rollup-linux-arm64-musl": "4.9.4", + "@rollup/rollup-linux-riscv64-gnu": "4.9.4", + "@rollup/rollup-linux-x64-gnu": "4.9.4", + "@rollup/rollup-linux-x64-musl": "4.9.4", + "@rollup/rollup-win32-arm64-msvc": "4.9.4", + "@rollup/rollup-win32-ia32-msvc": "4.9.4", + "@rollup/rollup-win32-x64-msvc": "4.9.4", + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -2373,7 +3016,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -2385,7 +3027,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -2402,15 +3043,30 @@ "vscode-textmate": "^8.0.0" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } }, + "node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -2424,7 +3080,20 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2438,7 +3107,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2446,6 +3114,26 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2458,6 +3146,78 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2482,11 +3242,29 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -2494,6 +3272,22 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/ts-api-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", @@ -2506,6 +3300,11 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "node_modules/ts-morph": { "version": "20.0.0", "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-20.0.0.tgz", @@ -2520,7 +3319,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, + "devOptional": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -2566,6 +3365,62 @@ "dev": true, "optional": true }, + "node_modules/tsup": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.0.1.tgz", + "integrity": "sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==", + "dependencies": { + "bundle-require": "^4.0.0", + "cac": "^6.7.12", + "chokidar": "^3.5.1", + "debug": "^4.3.1", + "esbuild": "^0.19.2", + "execa": "^5.0.0", + "globby": "^11.0.3", + "joycon": "^3.0.1", + "postcss-load-config": "^4.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.0.2", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.20.3", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2648,7 +3503,7 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2661,7 +3516,7 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "devOptional": true }, "node_modules/uri-js": { "version": "4.4.1", @@ -2676,7 +3531,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "devOptional": true }, "node_modules/vscode-oniguruma": { "version": "1.7.0", @@ -2690,11 +3545,25 @@ "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -2722,6 +3591,23 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2743,6 +3629,14 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "engines": { + "node": ">= 14" + } + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -2774,7 +3668,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } diff --git a/package.json b/package.json index 73d2ab7..196b811 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "text-decoding": "^1.0.0", "ts-morph": "^20.0.0", "ts-node": "^10.9.1", + "tsup": "^8.0.1", "typed-emitter": "^2.1.0", "typedoc": "^0.25.3", "typescript": "^5.2.2" diff --git a/src/handles/Ability.ts b/src/handles/Ability.ts new file mode 100644 index 0000000..c482ceb --- /dev/null +++ b/src/handles/Ability.ts @@ -0,0 +1,22 @@ +import { CreateAbilityNe } from "../utils/common.js"; +import { Handle, HandleEventMap } from "./Handle.js"; + +export interface AbilityEventMap extends HandleEventMap {} + +export interface Ability { + get handle(): HandleHolder<"ability">; +} + +export class Ability extends Handle { + constructor(itemHandle: HandleHolder<"ability">); + constructor(itemHandle: Ability); + constructor(abilCode: number); + constructor(arg: number | Ability | HandleHolder<"ability">) { + if (arg instanceof Ability || arg instanceof HandleHolder) super(arg); + else if (typeof arg === "number") { + super(CreateAbilityNe(arg)); + } else { + throw new TypeError("Unknown first arg"); + } + } +} diff --git a/src/handles/instanceApi/AbilityData.ts b/src/handles/instanceApi/AbilityData.ts new file mode 100644 index 0000000..e9e3b30 --- /dev/null +++ b/src/handles/instanceApi/AbilityData.ts @@ -0,0 +1,66 @@ +/* eslint-disable matching-export-value-to-file-name */ +import { ABILITY_IF_LEVELS, GetAbilityBaseIntegerFieldById, GetAbilityIntegerField } from "../../utils/common.js"; +import { Ability } from "../Ability.js"; + +export interface AbilityLevelAccessorNatives { + get: (ability: HandleHolder<"ability">, field: HandleHolder<"_enum">, level: number) => T; + set: (ability: HandleHolder<"ability">, field: HandleHolder<"_enum">, level: number, value: T) => boolean; + + baseGet: (abilId: number, field: HandleHolder<"_enum">, level: number) => T; + baseSet: (ability: number, field: HandleHolder<"_enum">, level: number, value: T) => boolean; +} + +export interface AbilityData { + instance: number | Ability; +} + +export class AbilityLevelAccessor implements Iterable { + #abilityData: AbilityData; + #field: HandleHolder<"_enum">; + + #accessorNatives: AbilityLevelAccessorNatives; + + constructor(abilityData: AbilityData, field: HandleHolder<"_enum">, accessNatives: AbilityLevelAccessorNatives) { + this.#abilityData = abilityData; + this.#field = field; + + this.#accessorNatives = accessNatives; + } + + *[Symbol.iterator](): Iterator { + for (let i = 0; i < this.getLength(); ++i) { + yield this.getIndexValue(i); + } + } + + public getLength() { + return typeof this.#abilityData.instance === "number" + ? GetAbilityBaseIntegerFieldById(this.#abilityData.instance, ABILITY_IF_LEVELS) + : GetAbilityIntegerField(this.#abilityData.instance.handle, ABILITY_IF_LEVELS); + } + + public getIndexValue(index: number) { + return typeof this.#abilityData.instance === "number" + ? this.#accessorNatives.baseGet(this.#abilityData.instance, this.#field, index) + : this.#accessorNatives.get(this.#abilityData.instance.handle, this.#field, index); + } + + public setIndexValue(index: number, value: T) { + return typeof this.#abilityData.instance === "number" + ? this.#accessorNatives.baseSet(this.#abilityData.instance, this.#field, index, value) + : this.#accessorNatives.set(this.#abilityData.instance.handle, this.#field, index, value); + } +} + +export class AbilityData { + #_instance: number | Ability; + + constructor(instance: number | Ability) { + this.#_instance = instance; + + Object.defineProperty(this, "instance", { + value: instance, + writable: false, + }); + } +} diff --git a/src/index.ts b/src/index.ts index 6cea30b..d10ef01 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,7 +2,7 @@ import { setToHandleHolder, getNativeByName } from "@war3js/unsafe"; import { Console } from "./console/Console.js"; import { toHandleHolderSoft } from "./utils/ToHandleHolder.js"; -import { HandleBuilder } from "./services/HandleBuilder.js"; +import { HandleBuilder, InstanceApiBuilder } from "./services/ClassBuilder.js"; import { Widget } from "./handles/Widget.js"; import { Unit } from "./handles/Unit.js"; import { Player } from "./handles/Player.js"; @@ -24,6 +24,7 @@ export const stream: any = { Object.freeze(stream); import * as _Buffer from "buffer"; +import { AbilityData } from "./handles/instanceApi/AbilityData.js"; export const buffer: any = { ..._Buffer, @@ -39,19 +40,27 @@ const wrapper = new HandleWrapper(); setToHandleHolder(toHandleHolderSoft); -const builder = new HandleBuilder(); +const handleBuilder = new HandleBuilder(); -builder.addChainProperties(Widget, "widget"); -builder.addChainProperties(Unit, "unit"); -builder.addChainProperties(Player, "player"); -builder.addChainProperties(Destructable, "destructable"); -builder.addChainProperties(Item, "item"); +handleBuilder.addChainProperties(Widget, "widget"); +handleBuilder.addChainProperties(Unit, "unit"); +handleBuilder.addChainProperties(Player, "player"); +handleBuilder.addChainProperties(Destructable, "destructable"); +handleBuilder.addChainProperties(Item, "item"); -builder.addMethods(Widget, "widget"); -builder.addMethods(Unit, "unit"); -builder.addMethods(Player, "player"); -builder.addMethods(Destructable, "destructable"); -builder.addMethods(Item, "item"); +handleBuilder.addMethods(Widget, "widget"); +handleBuilder.addMethods(Unit, "unit"); +handleBuilder.addMethods(Player, "player"); +handleBuilder.addMethods(Destructable, "destructable"); +handleBuilder.addMethods(Item, "item"); + +const instanceApiBuilder = new InstanceApiBuilder(); + +instanceApiBuilder.appendAbilityData(AbilityData); + +export * from "./handles/instanceApi/AbilityData.js"; + +export { IndexAccessArray } from "./services/ClassBuilder.js"; export { TextDecoder, TextEncoder } from "text-decoding"; export { Headers } from "@war3js/headers-polyfill"; diff --git a/src/services/ClassBuilder.ts b/src/services/ClassBuilder.ts new file mode 100644 index 0000000..5d8e844 --- /dev/null +++ b/src/services/ClassBuilder.ts @@ -0,0 +1,639 @@ +import { getNativeByName, getListNatives, getGlobalsKeys, getGlobal } from "@war3js/unsafe"; +import { Handle } from "../handles/Handle.js"; +import { toHandleHolderSoft } from "../utils/ToHandleHolder.js"; +import { fromHandleHolderSoft } from "../utils/FromHandleHolder.js"; +import { isNode } from "../utils/runtime.js"; +import { AbilityData, AbilityLevelAccessor, AbilityLevelAccessorNatives } from "../handles/instanceApi/AbilityData.js"; +import { screamCaseToCamelCase } from "../utils/utils.js"; +import { + GetAbilityBaseBooleanFieldById, + GetAbilityBaseBooleanLevelFieldById, + GetAbilityBaseIntegerFieldById, + GetAbilityBaseIntegerLevelFieldById, + GetAbilityBaseRealFieldById, + GetAbilityBaseRealLevelFieldById, + GetAbilityBaseStringFieldById, + GetAbilityBaseStringLevelFieldById, + GetAbilityBooleanField, + GetAbilityBooleanLevelField, + GetAbilityIntegerField, + GetAbilityIntegerLevelField, + GetAbilityRealField, + GetAbilityRealLevelField, + GetAbilityStringField, + GetAbilityStringLevelField, + SetAbilityBaseBooleanFieldById, + SetAbilityBaseBooleanLevelFieldById, + SetAbilityBaseIntegerFieldById, + SetAbilityBaseIntegerLevelFieldById, + SetAbilityBaseRealFieldById, + SetAbilityBaseRealLevelFieldById, + SetAbilityBaseStringFieldById, + SetAbilityBaseStringLevelFieldById, + SetAbilityBooleanField, + SetAbilityBooleanLevelField, + SetAbilityIntegerField, + SetAbilityIntegerLevelField, + SetAbilityRealField, + SetAbilityRealLevelField, + SetAbilityStringField, + SetAbilityStringLevelField, +} from "../utils/common.js"; + +type NativeFunctionType = ReturnType>; +type AbstractNative = NativeFunctionType; + +type HandleConstructor = { + new (...args: any): Handle; +}; + +export type AutoMappedMethodMetadata = + | { + methodType: "method"; + argTypes: string[]; + argNames: string[]; + returnType: string; + nativeName: string; + } + | { + methodType: "chainProperty"; + type: string; + getNativeName: string; + setNativeName: string; + } + | { + methodType: "instanceApiAccessor"; + type: string; + readonly?: boolean; + isIndexAccess?: boolean; + }; + +interface NativeMeta { + native: AbstractNative; + useCount: number; +} + +interface MethodNativeMeta { + callNative: AbstractNative; + name: string; +} + +interface ChainPropertyNativeMeta { + getterNative: AbstractNative; + setterNative: AbstractNative; + name: string; + argumentType: string; +} + +const typeNameToTypePart = (typeName: string) => { + return typeName.charAt(0).toLocaleUpperCase() + typeName.substring(1); +}; + +const toHandleHolderArgs = (args: any[]) => { + return args.map((i) => toHandleHolderSoft(i)); +}; + +const typeGenMetaSymbol = Symbol("typeGenMeta"); +const typeGenNeedAssist = isNode; + +export const isClassHasModified = (value: any): boolean => { + return !!value[typeGenMetaSymbol]; +}; + +export const getAccessorMeta = (key: string | symbol, clazz: any): AutoMappedMethodMetadata => { + return clazz[typeGenMetaSymbol][key]; +}; + +export const getMethodMeta = (value: any): AutoMappedMethodMetadata => { + return value[typeGenMetaSymbol]; +}; + +export class HandleBuilder { + private nativesMeta: Record; + private unusedNatives: Record; + + constructor(nativeList?: Record) { + nativeList = nativeList || getListNatives(); + + this.nativesMeta = {}; + + Object.entries(nativeList).forEach((i) => { + this.nativesMeta[i[0]] = { + native: i[1], + useCount: 0, + }; + }); + + this.unusedNatives = { ...this.nativesMeta }; + } + + public addMethods(target: HandleConstructor, handleType: string) { + if (typeGenNeedAssist) { + (target as any)[typeGenMetaSymbol] = true; + } + + const typePart = typeNameToTypePart(handleType); + + const methodNatives = Object.entries(this.unusedNatives).filter((i) => { + const native = i[1].native; + return native.parametres.length >= 1 && native.parametres[0] === handleType; + }); + + const methods: Array = methodNatives.map((i) => { + let methodName = i[0].replace(typePart, ""); + methodName = methodName.charAt(0).toLocaleLowerCase() + methodName.substring(1); + + return { + name: methodName, + callNative: i[1].native, + }; + }); + + methods.forEach((method) => { + target.prototype[method.name] = function (this: Handle, ...args: any[]) { + if (!(this instanceof target)) throw new TypeError("Illegal call"); + + return fromHandleHolderSoft(method.callNative(this.handle, ...toHandleHolderArgs(args))); + }; + + if (typeGenNeedAssist) { + const methodMeta: AutoMappedMethodMetadata = { + methodType: "method", + nativeName: method.callNative.nativeName, + argTypes: [...method.callNative.parametres].splice(1), + argNames: [...method.callNative.parametresName].splice(1), + returnType: method.callNative.returnType, + }; + + target.prototype[method.name][typeGenMetaSymbol] = methodMeta; + } + }); + } + + public addChainProperties(target: HandleConstructor, handleType: string) { + if (typeGenNeedAssist) { + (target as any)[typeGenMetaSymbol] = true; + } + + const typePart = typeNameToTypePart(handleType); + + const properties = new Array(); + + // Select set natives + + const setNatives = Object.entries(this.unusedNatives).filter((i) => { + const native = i[1].native; + + return ( + i[0].startsWith("Set") && + i[0].substring(3).startsWith(typePart) && + native.parametres.length === 2 && + native.returnType === "V" && + native.parametres[0] === handleType + ); + }); + + // Select get natives and build property pair + + const getNatives = Object.entries(this.unusedNatives).filter((i) => { + let nativeName = i[0]; + const native = i[1].native; + + if (!nativeName.startsWith("Get") && !nativeName.startsWith("Is")) return false; + + nativeName = nativeName.substring(nativeName.startsWith("Get") ? 3 : 2); + if (!nativeName.startsWith(typePart)) return false; + + nativeName = nativeName.substring(typePart.length); + + if (native.parametres.length !== 1 || native.parametres[0] !== handleType) return false; + + const setterNative = setNatives.find((j) => { + return j[0].endsWith(nativeName); + }); + + if (!setterNative) return false; + + if (setterNative[1].native.parametres[1] !== native.returnType) return false; + + // Append property + + properties.push({ + getterNative: native, + setterNative: setterNative[1].native, + name: nativeName.charAt(0).toLocaleLowerCase() + nativeName.substring(1), + argumentType: native.returnType, + }); + + return true; + }); + + // method + + properties.forEach((property) => { + target.prototype[property.name] = function (this: Handle, value?: any) { + if (!(this instanceof target)) throw new TypeError("Illegal call"); + + if (value === undefined) { + return fromHandleHolderSoft(property.getterNative(this.handle)); + } + + let newValue = value; + + if (typeof value === "function") { + newValue = value.call(this, fromHandleHolderSoft(property.getterNative(this.handle))); + } + + property.setterNative(this.handle, toHandleHolderSoft(newValue)); + + return this; + }; + + if (typeGenNeedAssist) { + const methodMeta: AutoMappedMethodMetadata = { + getNativeName: property.getterNative.nativeName, + setNativeName: property.setterNative.nativeName, + methodType: "chainProperty", + type: property.argumentType, + }; + + target.prototype[property.name][typeGenMetaSymbol] = methodMeta; + } + }); + + this.markNativesAsUsed(getNatives.map((i) => i[0])); + this.markNativesAsUsed(setNatives.map((i) => i[0])); + } + + public markNativesAsUsed(natives: string[]) { + natives.forEach((i) => { + this.markNativeAsUsed(i); + }); + } + + public markNativeAsUsed(natives: string) { + if (!this.unusedNatives[natives]) return; + + this.unusedNatives[natives].useCount++; + delete this.unusedNatives[natives]; + } +} + +export interface IndexAccessArray extends Iterable { + [key: number]: T; + [key: string]: any; + [key: symbol]: any; +} + +export class InstanceApiBuilder { + appendAbilityData(abilityData: new (...args: any[]) => AbilityData) { + const abilityFieldGlobals = getGlobalsKeys().filter((i) => i.startsWith("ABILITY")); + + const abilityLevelRealFields = new Array(); + const abilityLevelBooleanFields = new Array(); + const abilityLevelIntegerFields = new Array(); + const abilityLevelStringFields = new Array(); + + const abilityRealFields = new Array(); + const abilityBooleanFields = new Array(); + const abilityIntegerFields = new Array(); + const abilityStringFields = new Array(); + + abilityFieldGlobals.forEach((i) => { + const globalNameTokens = i.split("_"); + + if (globalNameTokens.length < 2) return; + + switch (globalNameTokens[1]) { + case "IF": + abilityIntegerFields.push(i); + break; + case "BF": + abilityBooleanFields.push(i); + break; + case "RF": + abilityRealFields.push(i); + break; + case "SF": + abilityStringFields.push(i); + break; + + case "ILF": + abilityLevelIntegerFields.push(i); + break; + case "BLF": + abilityLevelBooleanFields.push(i); + break; + case "RLF": + abilityLevelRealFields.push(i); + break; + case "SLF": + abilityLevelStringFields.push(i); + break; + } + }); + + if (typeGenNeedAssist) { + (abilityData as any)[typeGenMetaSymbol] = {}; + } + + // Append plain fields + + { + interface InstanceApiAccessNatives { + get: (ability: HandleHolder<"ability">, field: HandleHolder<"_enum">) => T; + set: (ability: HandleHolder<"ability">, field: HandleHolder<"_enum">, value: T) => boolean; + + baseGet: (abilId: number, field: HandleHolder<"_enum">) => T; + baseSet: (ability: number, field: HandleHolder<"_enum">, value: T) => boolean; + } + + function defineAccessor( + accessNatives: InstanceApiAccessNatives, + propertyName: string, + fieldId: HandleHolder<"_enum">, + isReadOnly: boolean, + ) { + propertyName = + (accessNatives.get as any).returnType.toLocaleLowerCase() + + propertyName.charAt(0).toUpperCase() + + propertyName.substring(1); + + if (typeGenNeedAssist) { + (abilityData as any)[typeGenMetaSymbol][propertyName] = { + methodType: "instanceApiAccessor", + isIndexAccess: false, + readonly: isReadOnly, + type: (accessNatives.get as any).returnType, // Ебать я гений + } as AutoMappedMethodMetadata; + } + + const propertyDesctiptor: PropertyDescriptor = { + get(this: AbilityData) { + return typeof this.instance === "number" + ? accessNatives.baseGet(this.instance, fieldId) + : accessNatives.get(this.instance.handle, fieldId); + }, + enumerable: true, + }; + + if (!isReadOnly) { + propertyDesctiptor.set = function (this: AbilityData, value: T) { + return typeof this.instance === "number" + ? accessNatives.baseSet(this.instance, fieldId, value) + : accessNatives.set(this.instance.handle, fieldId, value); + }; + } + + Object.defineProperty(abilityData.prototype, propertyName, propertyDesctiptor); + } + + // Real + + abilityRealFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityRealField, + baseGet: GetAbilityBaseRealFieldById, + set: SetAbilityRealField, + baseSet: SetAbilityBaseRealFieldById, + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i) as HandleHolder<"_enum">, + false, + ); + }); + + // Integer + + abilityIntegerFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityIntegerField, + baseGet: GetAbilityBaseIntegerFieldById, + set: SetAbilityIntegerField, + baseSet: SetAbilityBaseIntegerFieldById, + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i) as HandleHolder<"_enum">, + false, + ); + }); + + // Boolean + + abilityBooleanFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityBooleanField, + baseGet: GetAbilityBaseBooleanFieldById, + set: SetAbilityBooleanField, + baseSet: SetAbilityBaseBooleanFieldById, + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i) as HandleHolder<"_enum">, + false, + ); + }); + + // String + + abilityStringFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityStringField, + baseGet: GetAbilityBaseStringFieldById, + set: SetAbilityStringField, + baseSet: SetAbilityBaseStringFieldById, + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i) as HandleHolder<"_enum">, + false, + ); + }); + } + + // append level fields + + { + function defineAccessor( + accessNatives: AbilityLevelAccessorNatives, + propertyName: string, + fieldId: HandleHolder<"_enum">, + isReadOnly: boolean, + ) { + propertyName = + (accessNatives.get as any).returnType.toLocaleLowerCase() + + "l" + + propertyName.charAt(0).toUpperCase() + + propertyName.substring(1); + + if (typeGenNeedAssist) { + (abilityData as any)[typeGenMetaSymbol][propertyName] = { + methodType: "instanceApiAccessor", + isIndexAccess: true, + readonly: isReadOnly, + type: (accessNatives.get as any).returnType, + } as AutoMappedMethodMetadata; + } + + let levelAabilityAccessor: AbilityLevelAccessor = null; + let levelAabilityAccessorProxy: IndexAccessArray = null; + + function createProxy(levelAabilityAccessor: AbilityLevelAccessor): IndexAccessArray { + return new Proxy(levelAabilityAccessor, { + get(target, p) { + if (typeof p === "symbol") return (target as any)[p]; + + if (p === "length") return target.getLength(); + + const inxex = Number(p); + if (!Number.isInteger(inxex)) return (target as any)[p]; + + return target.getIndexValue(inxex); + }, + set(target, p, newValue) { + if (typeof p === "symbol") { + (target as any)[p] = newValue; + + return true; + } + + if (p === "length") return false; + + const inxex = Number(p); + if (!Number.isInteger(inxex)) { + (target as any)[p] = newValue; + + return true; + } + + return target.setIndexValue(inxex, newValue); + }, + getOwnPropertyDescriptor(target, p) { + const inxex = Number(p); + + if (Number.isInteger(inxex)) { + if (inxex < target.getLength()) + return { + enumerable: true, + }; + + return { + enumerable: false, + }; + } + + return Object.getOwnPropertyDescriptor(target, p); + }, + ownKeys(target) { + const numbersArray = []; + const length = target.getLength(); + + for (let i = 0; i < length; i++) { + numbersArray.push(String(i)); + } + + return [...Reflect.ownKeys(target), ...numbersArray]; + }, + }) as any as IndexAccessArray; + } + + const propertyDesctiptor: PropertyDescriptor = { + get(this: AbilityData) { + if (!levelAabilityAccessor) { + levelAabilityAccessor = new AbilityLevelAccessor(this, fieldId, accessNatives); + levelAabilityAccessorProxy = createProxy(levelAabilityAccessor); + } + + return levelAabilityAccessorProxy; + }, + enumerable: true, + }; + + if (!isReadOnly) { + propertyDesctiptor.set = function (this: AbilityData, value: unknown) { + if (!levelAabilityAccessor) { + levelAabilityAccessor = new AbilityLevelAccessor(this, fieldId, accessNatives); + levelAabilityAccessorProxy = createProxy(levelAabilityAccessor); + } + + if (typeof value === "object" && Symbol.iterator in value) { + let i = 0; + + for (const itValue in value) { + levelAabilityAccessor.setIndexValue(i++, itValue as T); + } + } + }; + } + + Object.defineProperty(abilityData.prototype, propertyName, propertyDesctiptor); + } + + // Real + + abilityLevelRealFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityRealLevelField, + baseGet: GetAbilityBaseRealLevelFieldById, + set: SetAbilityRealLevelField, + baseSet: SetAbilityBaseRealLevelFieldById, + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i) as HandleHolder<"_enum">, + false, + ); + }); + + // Integer + + abilityLevelIntegerFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityIntegerLevelField, + baseGet: GetAbilityBaseIntegerLevelFieldById, + set: SetAbilityIntegerLevelField, + baseSet: SetAbilityBaseIntegerLevelFieldById, + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i) as HandleHolder<"_enum">, + false, + ); + }); + + // Boolean + + abilityLevelBooleanFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityBooleanLevelField, + baseGet: GetAbilityBaseBooleanLevelFieldById, + set: SetAbilityBooleanLevelField, + baseSet: SetAbilityBaseBooleanLevelFieldById, + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i) as HandleHolder<"_enum">, + false, + ); + }); + + // String + + abilityLevelStringFields.forEach((i) => { + defineAccessor( + { + get: GetAbilityStringLevelField, + baseGet: GetAbilityBaseStringLevelFieldById, + set: SetAbilityStringLevelField, + baseSet: SetAbilityBaseStringLevelFieldById, + }, + screamCaseToCamelCase(i.split("_").slice(2).join("_")), + getGlobal(i) as HandleHolder<"_enum">, + false, + ); + }); + } + } +} diff --git a/src/services/HandleBuilder.ts b/src/services/HandleBuilder.ts deleted file mode 100644 index 2f21dfa..0000000 --- a/src/services/HandleBuilder.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { getNativeByName, getListNatives } from "@war3js/unsafe"; -import { Handle } from "../handles/Handle.js"; -import { toHandleHolderSoft } from "../utils/ToHandleHolder.js"; -import { fromHandleHolderSoft } from "../utils/FromHandleHolder.js"; -import { isNode } from "../utils/runtime.js"; - -type NativeFunctionType = ReturnType>; -type AbstractNative = NativeFunctionType; - -type HandleConstructor = { - new (...args: any): Handle; -}; - -export type AutoMappedMethodMetadata = - | { - methodType: "method"; - argTypes: string[]; - argNames: string[]; - returnType: string; - nativeName: string; - } - | { - methodType: "chainProperty"; - type: string; - getNativeName: string; - setNativeName: string; - }; - -interface NativeMeta { - native: AbstractNative; - useCount: number; -} - -interface MethodNativeMeta { - callNative: AbstractNative; - name: string; -} - -interface ChainPropertyNativeMeta { - getterNative: AbstractNative; - setterNative: AbstractNative; - name: string; - argumentType: string; -} - -const typeNameToTypePart = (typeName: string) => { - return typeName.charAt(0).toLocaleUpperCase() + typeName.substring(1); -}; - -const toHandleHolderArgs = (args: any[]) => { - return args.map((i) => toHandleHolderSoft(i)); -}; - -const typeGenMetaSymbol = Symbol("typeGenMeta"); -const typeGenNeedAssist = isNode; - -export const isClassHasModified = (value: any): boolean => { - return !!value[typeGenMetaSymbol]; -}; - -export const getMethodMeta = (value: any): AutoMappedMethodMetadata => { - return value[typeGenMetaSymbol]; -}; - -export class HandleBuilder { - private nativesMeta: Record; - private unusedNatives: Record; - - constructor(nativeList?: Record) { - nativeList = nativeList || getListNatives(); - - this.nativesMeta = {}; - - Object.entries(nativeList).forEach((i) => { - this.nativesMeta[i[0]] = { - native: i[1], - useCount: 0, - }; - }); - - this.unusedNatives = { ...this.nativesMeta }; - } - - public addMethods(target: HandleConstructor, handleType: string) { - if (typeGenNeedAssist) { - (target as any)[typeGenMetaSymbol] = true; - } - - const typePart = typeNameToTypePart(handleType); - - const methodNatives = Object.entries(this.unusedNatives).filter((i) => { - const native = i[1].native; - return native.parametres.length >= 1 && native.parametres[0] === handleType; - }); - - const methods: Array = methodNatives.map((i) => { - let methodName = i[0].replace(typePart, ""); - methodName = methodName.charAt(0).toLocaleLowerCase() + methodName.substring(1); - - return { - name: methodName, - callNative: i[1].native, - }; - }); - - methods.forEach((method) => { - target.prototype[method.name] = function (this: Handle, ...args: any[]) { - if (!(this instanceof target)) throw new TypeError("Illegal call"); - - return fromHandleHolderSoft(method.callNative(this.handle, ...toHandleHolderArgs(args))); - }; - - if (typeGenNeedAssist) { - const methodMeta: AutoMappedMethodMetadata = { - methodType: "method", - nativeName: method.callNative.nativeName, - argTypes: [...method.callNative.parametres].splice(1), - argNames: [...method.callNative.parametresName].splice(1), - returnType: method.callNative.returnType, - }; - - target.prototype[method.name][typeGenMetaSymbol] = methodMeta; - } - }); - } - - public addChainProperties(target: HandleConstructor, handleType: string) { - if (typeGenNeedAssist) { - (target as any)[typeGenMetaSymbol] = true; - } - - const typePart = typeNameToTypePart(handleType); - - const properties = new Array(); - - // Select set natives - - const setNatives = Object.entries(this.unusedNatives).filter((i) => { - const native = i[1].native; - - return ( - i[0].startsWith("Set") && - i[0].substring(3).startsWith(typePart) && - native.parametres.length === 2 && - native.returnType === "V" && - native.parametres[0] === handleType - ); - }); - - // Select get natives and build property pair - - const getNatives = Object.entries(this.unusedNatives).filter((i) => { - let nativeName = i[0]; - const native = i[1].native; - - if (!nativeName.startsWith("Get") && !nativeName.startsWith("Is")) return false; - - nativeName = nativeName.substring(nativeName.startsWith("Get") ? 3 : 2); - if (!nativeName.startsWith(typePart)) return false; - - nativeName = nativeName.substring(typePart.length); - - if (native.parametres.length !== 1 || native.parametres[0] !== handleType) return false; - - const setterNative = setNatives.find((j) => { - return j[0].endsWith(nativeName); - }); - - if (!setterNative) return false; - - if (setterNative[1].native.parametres[1] !== native.returnType) return false; - - // Append property - - properties.push({ - getterNative: native, - setterNative: setterNative[1].native, - name: nativeName.charAt(0).toLocaleLowerCase() + nativeName.substring(1), - argumentType: native.returnType, - }); - - return true; - }); - - // method - - properties.forEach((property) => { - target.prototype[property.name] = function (this: Handle, value?: any) { - if (!(this instanceof target)) throw new TypeError("Illegal call"); - - if (value === undefined) { - return fromHandleHolderSoft(property.getterNative(this.handle)); - } - - let newValue = value; - - if (typeof value === "function") { - newValue = value.call(this, fromHandleHolderSoft(property.getterNative(this.handle))); - } - - property.setterNative(this.handle, toHandleHolderSoft(newValue)); - - return this; - }; - - if (typeGenNeedAssist) { - const methodMeta: AutoMappedMethodMetadata = { - getNativeName: property.getterNative.nativeName, - setNativeName: property.setterNative.nativeName, - methodType: "chainProperty", - type: property.argumentType, - }; - - target.prototype[property.name][typeGenMetaSymbol] = methodMeta; - } - }); - - this.markNativesAsUsed(getNatives.map((i) => i[0])); - this.markNativesAsUsed(setNatives.map((i) => i[0])); - } - - public markNativesAsUsed(natives: string[]) { - natives.forEach((i) => { - this.markNativeAsUsed(i); - }); - } - - public markNativeAsUsed(natives: string) { - if (!this.unusedNatives[natives]) return; - - this.unusedNatives[natives].useCount++; - delete this.unusedNatives[natives]; - } -} diff --git a/src/test.ts b/src/test.ts index 7810614..fb64b9f 100644 --- a/src/test.ts +++ b/src/test.ts @@ -1,43 +1,14 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { __getDatabaseGlobalType, getNativeByName } from "@war3js/unsafe"; -import { Player, Unit } from "./index.js"; -import { TriggerUnitEvent } from "./triggerEvents/unit/TriggerUnitEvent.js"; -import { isNode } from "./utils/runtime.js"; -import { Readable } from "stream"; +import { InstanceApiBuilder } from "./services/ClassBuilder.js"; +import { AbilityData } from "./handles/instanceApi/AbilityData.js"; -import { curl_easy_init, constants, curl_easy_setopt, curl_easy_perform } from "@war3js/curl"; +const x = new InstanceApiBuilder(); -const curl = curl_easy_init(); +x.appendAbilityData(AbilityData); -curl_easy_setopt(curl, constants.CURLOPT_URL, "wss://test"); +const y = new AbilityData(0) as any; +y.blAlwaysAutocastFae2[0] = true; -curl_easy_perform(curl, () => { - // Ready -}); - -const hpal = new Unit(Player.getById(0), 1215324524, 0, 0, 0); -//const hpalI = Unit.createIllusionFromUnit(hpal); - -hpal.on("selected", (e) => { - //e.triggerUnit.kill(); -}); - -const PlayerNative = getNativeByName, [number]>("Player"); - -console.log(isNode); - -console.log(__getDatabaseGlobalType); - -const u = new Unit(Player.getById(0), 0, 0, 0, 0); -console.log(u); - -u.addListener("damaged", () => {}); -u.addListener("selected", (event) => { - console.log(event); -}); - -u.addListener("acquiredTarget", () => {}); - -u.emit("damaged"); -u.emit("selected", new TriggerUnitEvent<"selected">("selected")); +debugger; diff --git a/src/typesAppener.ts b/src/typesAppener.ts index 7562615..fed14d4 100644 --- a/src/typesAppener.ts +++ b/src/typesAppener.ts @@ -21,7 +21,12 @@ import { import path from "path"; import * as bootstrapExport from "./index.js"; -import { AutoMappedMethodMetadata, getMethodMeta, isClassHasModified } from "./services/HandleBuilder.js"; +import { + AutoMappedMethodMetadata, + getAccessorMeta, + getMethodMeta, + isClassHasModified, +} from "./services/ClassBuilder.js"; import { getListNatives, __getDatabaseDocKey, getGlobalsKeys, __getDatabaseGlobalType } from "@war3js/unsafe"; const project = new Project(); @@ -90,13 +95,20 @@ Object.keys(bootstrapExport).forEach((key) => { const className = value.name; const classDeclaration = declareGlobalBlock.getClassOrThrow(className); - Object.entries(value.prototype).forEach((entry) => { - const [memberName, memberValue] = entry; + Reflect.ownKeys(value.prototype).forEach((member) => { + const property = Reflect.getOwnPropertyDescriptor(value.prototype, member); + const memberValue = property.value; + + if (typeof member === "symbol") return; if (typeof memberValue === "function") { const methodMetadata = getMethodMeta(memberValue); - if (methodMetadata) appendGeneratedClassMethod(classDeclaration, memberName, methodMetadata); + if (methodMetadata) appendGeneratedClassMember(classDeclaration, member, methodMetadata); + } else { + const methodMetadata = getAccessorMeta(member, value); + + if (methodMetadata) appendGeneratedClassMember(classDeclaration, member, methodMetadata); } }); } @@ -226,7 +238,7 @@ function moveExportToGlobal(exportedDeclarations: ExportedDeclarations[], global }); } -function appendGeneratedClassMethod(declaration: ClassDeclaration, name: string, metadata: AutoMappedMethodMetadata) { +function appendGeneratedClassMember(declaration: ClassDeclaration, name: string, metadata: AutoMappedMethodMetadata) { switch (metadata.methodType) { case "method": { const method = declaration.addMember({ @@ -282,5 +294,29 @@ function appendGeneratedClassMethod(declaration: ClassDeclaration, name: string, break; } + case "instanceApiAccessor": { + declaration.addGetAccessor({ + scope: Scope.Public, + name, + returnType: metadata.isIndexAccess + ? `IndexAccessArray<${convertJassTypeToJsType(metadata.type)}>` + : convertJassTypeToJsType(metadata.type), + }); + + if (!metadata.readonly) { + declaration.addSetAccessor({ + scope: Scope.Public, + name, + parameters: [ + { + name: "value", + type: metadata.isIndexAccess + ? `IndexAccessArray<${convertJassTypeToJsType(metadata.type)}>` + : convertJassTypeToJsType(metadata.type), + }, + ], + }); + } + } } } diff --git a/src/utils/common.ts b/src/utils/common.ts index cde55ea..3b03f54 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -43,6 +43,8 @@ export const CreateUnitNe = getNativeByName< [HandleHolder<"player">, number, number, number, number] >("CreateUnit", false, true); +export const CreateAbilityNe = getNativeByName, [number]>("CreateAbility", false, true); + export const CreateCorpseNe = getNativeByName< HandleHolder<"unit">, [HandleHolder<"player">, number, number, number, number] @@ -79,6 +81,153 @@ export const TimerStart = getNativeByName, number, export const PlayerNative = getNativeByName, [number]>("Player"); export const GetLocalPlayer = getNativeByName, []>("GetLocalPlayer"); +// Insance API +// Ability + +export const GetAbilityBaseRealFieldById = getNativeByName]>( + "GetAbilityBaseRealFieldById", +); + +export const GetAbilityBaseIntegerFieldById = getNativeByName]>( + "GetAbilityBaseIntegerFieldById", +); + +export const GetAbilityBaseBooleanFieldById = getNativeByName]>( + "GetAbilityBaseBooleanFieldById", +); + +export const GetAbilityBaseStringFieldById = getNativeByName]>( + "GetAbilityBaseStringFieldById", +); + +export const GetAbilityBaseRealLevelFieldById = getNativeByName, number]>( + "GetAbilityBaseRealLevelFieldById", +); + +export const GetAbilityBaseIntegerLevelFieldById = getNativeByName, number]>( + "GetAbilityBaseIntegerLevelFieldById", +); + +export const GetAbilityBaseBooleanLevelFieldById = getNativeByName, number]>( + "GetAbilityBaseBooleanLevelFieldById", +); + +export const GetAbilityBaseStringLevelFieldById = getNativeByName, number]>( + "GetAbilityBaseStringLevelFieldById", +); + +export const SetAbilityBaseBooleanFieldById = getNativeByName, boolean]>( + "SetAbilityBaseBooleanFieldById", +); + +export const SetAbilityBaseStringFieldById = getNativeByName, string]>( + "SetAbilityBaseStringFieldById", +); + +export const SetAbilityBaseRealFieldById = getNativeByName, number]>( + "SetAbilityBaseRealFieldById", +); + +export const SetAbilityBaseIntegerFieldById = getNativeByName, number]>( + "SetAbilityBaseIntegerFieldById", +); + +export const SetAbilityBaseRealLevelFieldById = getNativeByName< + boolean, + [number, HandleHolder<"_enum">, number, number] +>("SetAbilityBaseRealLevelFieldById"); + +export const SetAbilityBaseIntegerLevelFieldById = getNativeByName< + boolean, + [number, HandleHolder<"_enum">, number, number] +>("SetAbilityBaseIntegerLevelFieldById"); + +export const SetAbilityBaseBooleanLevelFieldById = getNativeByName< + boolean, + [number, HandleHolder<"_enum">, number, boolean] +>("SetAbilityBaseBooleanLevelFieldById"); + +export const SetAbilityBaseStringLevelFieldById = getNativeByName< + boolean, + [number, HandleHolder<"_enum">, number, string] +>("SetAbilityBaseStringLevelFieldById"); + +export const GetAbilityRealField = getNativeByName, HandleHolder<"_enum">]>( + "GetAbilityRealField", +); + +export const GetAbilityIntegerField = getNativeByName, HandleHolder<"_enum">]>( + "GetAbilityIntegerField", +); + +export const GetAbilityBooleanField = getNativeByName, HandleHolder<"_enum">]>( + "GetAbilityBooleanField", +); + +export const GetAbilityStringField = getNativeByName, HandleHolder<"_enum">]>( + "GetAbilityStringField", +); + +export const GetAbilityRealLevelField = getNativeByName< + number, + [HandleHolder<"ability">, HandleHolder<"_enum">, number] +>("GetAbilityRealLevelField"); + +export const GetAbilityIntegerLevelField = getNativeByName< + number, + [HandleHolder<"ability">, HandleHolder<"_enum">, number] +>("GetAbilityIntegerLevelField"); + +export const GetAbilityBooleanLevelField = getNativeByName< + boolean, + [HandleHolder<"ability">, HandleHolder<"_enum">, number] +>("GetAbilityBooleanLevelField"); + +export const GetAbilityStringLevelField = getNativeByName< + string, + [HandleHolder<"ability">, HandleHolder<"_enum">, number] +>("GetAbilityStringLevelField"); + +export const SetAbilityBooleanField = getNativeByName< + boolean, + [HandleHolder<"ability">, HandleHolder<"_enum">, boolean] +>("SetAbilityBooleanField"); + +export const SetAbilityStringField = getNativeByName, HandleHolder<"_enum">, string]>( + "SetAbilityStringField", +); + +export const SetAbilityRealField = getNativeByName, HandleHolder<"_enum">, number]>( + "SetAbilityRealField", +); + +export const SetAbilityIntegerField = getNativeByName< + boolean, + [HandleHolder<"ability">, HandleHolder<"_enum">, number] +>("SetAbilityIntegerField"); + +export const SetAbilityRealLevelField = getNativeByName< + boolean, + [HandleHolder<"ability">, HandleHolder<"_enum">, number, number] +>("SetAbilityRealLevelField"); + +export const SetAbilityIntegerLevelField = getNativeByName< + boolean, + [HandleHolder<"ability">, HandleHolder<"_enum">, number, number] +>("SetAbilityIntegerLevelField"); + +export const SetAbilityBooleanLevelField = getNativeByName< + boolean, + [HandleHolder<"ability">, HandleHolder<"_enum">, number, boolean] +>("SetAbilityBooleanLevelField"); + +export const SetAbilityStringLevelField = getNativeByName< + boolean, + [HandleHolder<"ability">, HandleHolder<"_enum">, number, string] +>("SetAbilityStringLevelField"); + +// Trigger event API + export const GetTriggerUnit = getNativeByName("GetTriggerUnit"); export const GetEventDamage = getNativeByName("GetEventDamage"); export const GetEventDamageSource = getNativeByName("GetEventDamageSource"); @@ -122,6 +271,8 @@ export const GetSpellTargetDestructable = getNativeByName("Ge export const GetSpellTargetItem = getNativeByName("GetSpellTargetItem"); export const GetSpellTargetUnit = getNativeByName("GetSpellTargetUnit"); +// Trigger API + export const TriggerRegisterUnitEventNe = getNativeByName, HUnitEvent]>( "TriggerRegisterUnitEvent", false, @@ -139,6 +290,8 @@ export const TriggerAddActionNe = getNativeByName>>("ABILITY_IF_LEVELS"); + export const UnitStates = { UNIT_STATE_LIFE: getGlobal>("UNIT_STATE_LIFE"), UNIT_STATE_MAX_LIFE: getGlobal>("UNIT_STATE_MAX_LIFE"), diff --git a/src/utils/runtime.ts b/src/utils/runtime.ts index 6bc3b35..e6fd6b3 100644 --- a/src/utils/runtime.ts +++ b/src/utils/runtime.ts @@ -1 +1 @@ -export const isNode = "process" in globalThis && globalThis?.process?.versions?.node; +export const isNode = "process" in globalThis && (globalThis as any)?.process?.versions?.node; diff --git a/src/utils/utils.ts b/src/utils/utils.ts new file mode 100644 index 0000000..d2048f1 --- /dev/null +++ b/src/utils/utils.ts @@ -0,0 +1,27 @@ +export function screamCaseToCamelCase(screamCase: string) { + const words = screamCase.split("_"); + + const camelCaseWords = words.map((word, index) => { + if (index === 0) { + return word.toLowerCase(); + } else { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + } + }); + + const camelCase = camelCaseWords.join(""); + + return camelCase; +} + +export function screamCaseToPascalCase(screamCase: string) { + const words = screamCase.split("_"); + + const camelCaseWords = words.map((word) => { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + }); + + const camelCase = camelCaseWords.join(""); + + return camelCase; +} diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..53d0748 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "module": "ES6", + "target": "es2021", + "lib": ["es2022"], + "moduleResolution": "node", + "noImplicitAny": true, + "removeComments": false, + "preserveConstEnums": true, + "sourceMap": true, + "outDir": "build/tsc/lib", + "declaration": true, + "esModuleInterop": true, + "declarationDir": "build/tsc/types", + "baseUrl": "./src", + "types": ["@war3js/text-decoding-types"] + }, + "include": ["src/**/*"], + "exclude": ["../typesAppenderConfig.d.ts"] +} diff --git a/tsconfig.json b/tsconfig.json index 53d0748..47e1e3e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,7 @@ "esModuleInterop": true, "declarationDir": "build/tsc/types", "baseUrl": "./src", - "types": ["@war3js/text-decoding-types"] + "types": ["@war3js/text-decoding-types", "@types/node"] }, "include": ["src/**/*"], "exclude": ["../typesAppenderConfig.d.ts"] diff --git a/tsup.config.ts b/tsup.config.ts new file mode 100644 index 0000000..c24ff03 --- /dev/null +++ b/tsup.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from "tsup"; + +export default defineConfig([ + { + name: "main", + entry: ["./src/index.ts"], + outDir: "./lib", + format: ["esm"], + sourcemap: false, + clean: true, + bundle: true, + splitting: false, + dts: true, + target: "es5", + tsconfig: "./tsconfig.build.json", + }, +]);