From f6db60270a04d1af0de56e3f280f012fa9b057ab Mon Sep 17 00:00:00 2001 From: Credence Date: Fri, 18 Oct 2024 23:02:37 +0100 Subject: [PATCH] [contracts + client] season pass (#1862) * season pass wip * season pass contracts * - use order and resource mapping consistent with realms l2 contracts - separate season pass contracts from eternum because of compilation issues - make realm model smaller - use season pass in client * update season pass config & contracts * update indexer script for season pass * update sason pass tests * update bot * comment * season pass contracts test * minor update * update deploy.sh * season pass: client compilation fix * client: update resource ids arrangement * contracts+client: allow lords attachment to season pass * fix tests * fix tests * update world address --- .github/workflows/test-season-pass.yml | 31 + .gitignore | 4 +- .tool-versions | 2 +- client/.env.preview | 2 +- client/.env.production | 6 +- client/src/data/orders.ts | 21 +- client/src/dojo/contractComponents.ts | 28 +- .../__tests__/__BattleManagerMock__.ts | 10 +- client/src/hooks/helpers/useRealm.tsx | 51 +- client/src/hooks/helpers/useStructures.tsx | 2 +- .../cityview/realm/SettleRealmComponent.tsx | 20 +- .../construction/SelectPreviewBuilding.tsx | 2 +- .../components/resources/RealmResourcesIO.tsx | 2 +- .../ui/components/trading/RealmProduction.tsx | 2 +- client/src/ui/utils/packedData.tsx | 21 +- config/index.ts | 7 + contracts/.tool-versions | 2 +- contracts/Scarb.toml | 1 + contracts/scripts/contracts.sh | 6 + contracts/scripts/env_variables.sh | 4 +- contracts/scripts/system_models.json | 40 +- contracts/src/constants.cairo | 77 +- contracts/src/lib.cairo | 1 - contracts/src/models.cairo | 1 + contracts/src/models/config.cairo | 11 + contracts/src/models/event.cairo | 3 +- contracts/src/models/hyperstructure.cairo | 21 - contracts/src/models/metadata.cairo | 11 - contracts/src/models/owner.cairo | 17 +- contracts/src/models/quantity.cairo | 1 + contracts/src/models/realm.cairo | 421 +- contracts/src/models/season.cairo | 24 + contracts/src/models/structure.cairo | 1 - .../src/systems/bank/contracts/bank.cairo | 6 +- .../systems/bank/contracts/liquidity.cairo | 6 +- .../src/systems/bank/contracts/swap.cairo | 6 +- .../src/systems/buildings/contracts.cairo | 15 +- contracts/src/systems/combat/contracts.cairo | 24 +- .../systems/combat/tests/army_buy_test.cairo | 6 +- .../combat/tests/army_create_test.cairo | 5 +- .../combat/tests/battle_leave_test.cairo | 9 +- .../combat/tests/battle_pillage_test.cairo | 6 +- .../combat/tests/battle_start_test.cairo | 9 +- contracts/src/systems/config/contracts.cairo | 35 +- contracts/src/systems/dev/contracts.cairo | 1 + .../src/systems/dev/contracts/realm.cairo | 62 + contracts/src/systems/guild/contracts.cairo | 18 +- .../systems/hyperstructure/contracts.cairo | 12 +- .../src/systems/hyperstructure/tests.cairo | 9 +- contracts/src/systems/map/contracts.cairo | 6 +- contracts/src/systems/map/tests.cairo | 3 +- contracts/src/systems/name/contracts.cairo | 6 +- contracts/src/systems/realm/contracts.cairo | 344 +- contracts/src/systems/realm/tests.cairo | 41 +- .../contracts/resource_bridge_systems.cairo | 90 + .../trade/contracts/trade_systems.cairo | 12 +- .../trade_systems_tests/accept_order.cairo | 7 +- .../trade_systems_tests/cancel_order.cairo | 5 +- .../trade_systems_tests/create_order.cairo | 3 +- .../transport/contracts/travel_systems.cairo | 8 +- contracts/src/utils.cairo | 1 - contracts/src/utils/testing/general.cairo | 26 +- contracts/src/utils/testing/world.cairo | 5 +- contracts/src/utils/unpack.cairo | 48 - discord-bot/Secrets.toml.example | 2 +- discord-bot/src/events.rs | 3 +- discord-bot/src/types.rs | 24 +- scripts/deploy.sh | 29 +- scripts/indexer.sh | 34 +- sdk/packages/eternum/src/config/index.ts | 44 + sdk/packages/eternum/src/constants/global.ts | 34 + sdk/packages/eternum/src/constants/index.ts | 38 +- sdk/packages/eternum/src/constants/orders.ts | 127 +- .../eternum/src/constants/resources.ts | 197 +- sdk/packages/eternum/src/provider/index.ts | 114 +- sdk/packages/eternum/src/types/common.ts | 18 +- sdk/packages/eternum/src/types/provider.ts | 42 +- season_pass/contracts/.tool-versions | 2 + season_pass/contracts/Scarb.lock | 162 + season_pass/contracts/Scarb.toml | 21 + season_pass/contracts/src/contract.cairo | 186 + season_pass/contracts/src/lib.cairo | 11 + season_pass/contracts/src/mock/lords.cairo | 78 + .../contracts/src/mock/realms/metadata.cairo | 8006 +++++++++++++++++ .../contracts/src/mock/realms/realms.cairo | 110 + .../src/tests/test_season_pass.cairo | 220 + season_pass/scripts/deployment/.env.example | 8 + season_pass/scripts/deployment/.gitignore | 1 + .../deployment/addresses/dev/season_pass.json | 10 + .../deployment/addresses/dev/test_lords.json | 6 + .../deployment/addresses/dev/test_realms.json | 6 + season_pass/scripts/deployment/deploy_dev.js | 20 + season_pass/scripts/deployment/deploy_prod.js | 18 + .../scripts/deployment/libs/commands.js | 92 + season_pass/scripts/deployment/libs/common.js | 152 + .../scripts/deployment/libs/network.js | 46 + .../scripts/deployment/package-lock.json | 558 ++ season_pass/scripts/deployment/package.json | 21 + 98 files changed, 11274 insertions(+), 853 deletions(-) create mode 100644 .github/workflows/test-season-pass.yml create mode 100644 contracts/src/models/season.cairo create mode 100644 contracts/src/systems/dev/contracts/realm.cairo delete mode 100644 contracts/src/utils/unpack.cairo create mode 100644 season_pass/contracts/.tool-versions create mode 100644 season_pass/contracts/Scarb.lock create mode 100755 season_pass/contracts/Scarb.toml create mode 100644 season_pass/contracts/src/contract.cairo create mode 100644 season_pass/contracts/src/lib.cairo create mode 100644 season_pass/contracts/src/mock/lords.cairo create mode 100644 season_pass/contracts/src/mock/realms/metadata.cairo create mode 100644 season_pass/contracts/src/mock/realms/realms.cairo create mode 100644 season_pass/contracts/src/tests/test_season_pass.cairo create mode 100644 season_pass/scripts/deployment/.env.example create mode 100644 season_pass/scripts/deployment/.gitignore create mode 100644 season_pass/scripts/deployment/addresses/dev/season_pass.json create mode 100644 season_pass/scripts/deployment/addresses/dev/test_lords.json create mode 100644 season_pass/scripts/deployment/addresses/dev/test_realms.json create mode 100644 season_pass/scripts/deployment/deploy_dev.js create mode 100644 season_pass/scripts/deployment/deploy_prod.js create mode 100644 season_pass/scripts/deployment/libs/commands.js create mode 100644 season_pass/scripts/deployment/libs/common.js create mode 100644 season_pass/scripts/deployment/libs/network.js create mode 100644 season_pass/scripts/deployment/package-lock.json create mode 100644 season_pass/scripts/deployment/package.json diff --git a/.github/workflows/test-season-pass.yml b/.github/workflows/test-season-pass.yml new file mode 100644 index 000000000..c5ae5a2b7 --- /dev/null +++ b/.github/workflows/test-season-pass.yml @@ -0,0 +1,31 @@ +name: test season pass + +on: + pull_request: + paths-ignore: + - "contracts/**" + - "client/**" + - "**/manifest.json" + - "discord-bot/**" + - "config/**" + - ".github/**" + - "pnpm-lock.yaml" + +env: + SCARB_VERSION: v2.8.2 + +jobs: + test-season-pass: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: software-mansion/setup-scarb@v1 + with: + tool-versions: season_pass/contracts/.tool-versions + - uses: foundry-rs/setup-snfoundry@v3 + with: + tool-versions: season_pass/contracts/.tool-versions + - run: scarb build + working-directory: season_pass/contracts + - run: snforge test + working-directory: season_pass/contracts diff --git a/.gitignore b/.gitignore index b512c09d4..4698abb44 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -node_modules \ No newline at end of file +node_modules +target +.snfoundry_cache \ No newline at end of file diff --git a/.tool-versions b/.tool-versions index f3239a05d..1b12dfb21 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ scarb 2.7.0 -dojo 1.0.0-alpha.12 +dojo 1.0.0-alpha.16 diff --git a/client/.env.preview b/client/.env.preview index 2378e57ea..6aa5311a7 100644 --- a/client/.env.preview +++ b/client/.env.preview @@ -1,6 +1,6 @@ VITE_PUBLIC_MASTER_ADDRESS="0x1a3e37c77be7de91a9177c6b57956faa6da25607e567b10a25cf64fea5e533b" VITE_PUBLIC_MASTER_PRIVATE_KEY="0x4ab5a607d92f0870cfd82ef9cecb2fe903830441180fd432b831a8863c08097" -VITE_PUBLIC_WORLD_ADDRESS="0x76ca3dfc3e96843716f882546f0db96b7da0cf988bdba284b469d0defb2f48f" +VITE_PUBLIC_WORLD_ADDRESS="0x320b2713e324fe3125bbc42d85ff69cb3c0908b436fa38a35746dbc45deeb11" VITE_PUBLIC_ACCOUNT_CLASS_HASH="0x05400e90f7e0ae78bd02c77cd75527280470e2fe19c54970dd79dc37a9d3645c" VITE_EVENT_KEY="0x1a2f334228cee715f1f0f54053bb6b5eac54fa336e0bc1aacf7516decb0471d" VITE_PUBLIC_TORII="https://api.cartridge.gg/x/eternum-42/torii" diff --git a/client/.env.production b/client/.env.production index b4d1dc05e..836864bd8 100644 --- a/client/.env.production +++ b/client/.env.production @@ -1,6 +1,6 @@ VITE_PUBLIC_MASTER_ADDRESS="0x779c2c098f066ddde5850ec8426511e46e6499adf0b5c77e8961917413b57db" VITE_PUBLIC_MASTER_PRIVATE_KEY="0x189765c7b9daa2efdd3025d3236a929ce5e510834b8cba4f002a0d5c1accb5a" -VITE_PUBLIC_WORLD_ADDRESS="0x76ca3dfc3e96843716f882546f0db96b7da0cf988bdba284b469d0defb2f48f" +VITE_PUBLIC_WORLD_ADDRESS="0x320b2713e324fe3125bbc42d85ff69cb3c0908b436fa38a35746dbc45deeb11" VITE_PUBLIC_ACCOUNT_CLASS_HASH="0x05400e90f7e0ae78bd02c77cd75527280470e2fe19c54970dd79dc37a9d3645c" VITE_EVENT_KEY="0x1a2f334228cee715f1f0f54053bb6b5eac54fa336e0bc1aacf7516decb0471d" VITE_PUBLIC_TORII="https://api.cartridge.gg/x/eternum-42/torii" @@ -10,3 +10,7 @@ VITE_PUBLIC_GAME_VERSION="v0.9.0" VITE_PUBLIC_SHOW_FPS=false VITE_PUBLIC_GRAPHICS_DEV=false VITE_PUBLIC_TORII_RELAY="/dns4/api.cartridge.gg/tcp/443/x-parity-wss/%2Fx%2Feternum-42%2Ftorii%2Fwss" + +VITE_SEASON_PASS_ADDRESS="0x0" +VITE_REALMS_ADDRESS="0x0" +VITE_LORDS_ADDRESS="0x0" \ No newline at end of file diff --git a/client/src/data/orders.ts b/client/src/data/orders.ts index f73106541..86fc401db 100644 --- a/client/src/data/orders.ts +++ b/client/src/data/orders.ts @@ -1,23 +1,22 @@ export const order_statments = [ - "The Order of Power are one of the oldest orders and fixtures of the history of the realms. They compete by working harder and smarter than everyone else, are natural leaders, and have endless self-confidence. Their confidence can also be their greatest weakness.", - "The Order of Anger loves the intensity of high strung situations, their emotions welling deep inside to provide fuel for the challenge. They are always seeking conflict and particularly so with the Order of Protection, who despises their constant troublemaking. Their need for confrontation can often be their downfall, as there is always a bigger fish.", - "The Order of Brilliance believes that true perfection lies in the school of thought. They are renowned for their academies, in which they provide basic education in order to find the most promising minds. In the lifelong pursuit of knowledge they catalog and store the history of the realms and conduct extensive research into mana usage.", - "The Order of Detection are attuned to empathy. Some use it for good, some use it for manipulation. They can communicate wordlessly. Their leadership hierarchy is through persuasion not physical power, and are masters of propoganda. Their rumors can be enough to change the tides of fate though, as an army location is misreported or a merchant caravan route leaked.", - "The Order of Enlightenment seeks harmony and peace above all else, instead using their intelligence to help guide the world and those around them. The path to enlightenment is unique to every individual, and this Order wishes to turn swords into plows wherever they go. As skilled diplomats many seek them out for negotiations, their wisdom and countenance more valuble than gold. Although strangers to violence in general, their individual defensive measures can be extreme.", + "The Order of Giants values physical might, not just to crush their foes, but as the backbone of the great constructions in the Realms, their strength making them invaluable to Builders. Their size also makes them vulnerable to faster and smaller opponents and their leaders often win their position through combat prowess, which has led to a culture of poor strategic decisions in preference of displaying their full strength.", + "The Order of Perfection loves to both appreciate and create beautiful things. They disregard confrontation in favor of creation, appreciation, and protection of art and and refinement of culture. Although often dismissed as just artists and bards, those with intelligence know that the most dangerous creations originate from the Order of Perfection, and hope to never see those creations come to light.", + "The Order of Rage was said to be birthed from the Order of Anger, as not all could display their anger without losing their life. Instead, the Order of Rage values an implacable front to hide a deep well of anger. When they reach positions of power, they tend to enact schemes of revenge on those who hurt them, and in doing so often dig a grave for two.", "The order of the Fox thrives off of mischief and competition. They can hide, then are sly, they compete with cunning and trickery, not raw strength. The children of the Fox play tricks on other orders, and with age those trucks become increasingly severe.", + "The Twins are another one of the oldest orders. Amongst themselves, they tend to morph to the styles and sensibilities of the most dominant member of their order. They move in-sync with one-another and live communally. Amongst other orders, they have an uncanny ability to mimic the mannerisms and patterns of those they choose. They can change personalities as one would change outfits.", "The Order of Fury values extreme and overwhelming force in all situations. They have a need to dominate, and if they cannot dominate, to destroy it with utter frenzied rage. The Order of Fury has little care for life itself, only the ability to end a life. Their disciples are pitted against each other over years until only the most vicious remain. The nature of the Order ensures competency, but destroys its own power structures constantly due to infighting and assasinations.", - "The Order of Giants values physical might, not just to crush their foes, but as the backbone of the great constructions in the Realms, their strength making them invaluable to Builders. Their size also makes them vulnerable to faster and smaller opponents and their leaders often win their position through combat prowess, which has led to a culture of poor strategic decisions in preference of displaying their full strength.", - "The Order of Perfection loves to both appreciate and create beautiful things. They disregard confrontation in favor of creation, appreciation, and protection of art and and refinement of culture. Although often dismissed as just artists and bards, those with intelligence know that the most dangerous creations originate from the Order of Perfection, and hope to never see those creations come to light.", "The order of Reflection thrives off of time spent with their own thoughts, believing that interaction with an everchanging Realm dulls their ability to see the ethereal. They’re most often found searching for insights into the past and the future by isolating themselves in the darkness. There are rumors of disturbing rituals to aid in conjuring the visions they seek, and their trade in the less savoury markets banned in some Realms does nothing to dispel these rumors.", + "The Order of Detection are attuned to empathy. Some use it for good, some use it for manipulation. They can communicate wordlessly. Their leadership hierarchy is through persuasion not physical power, and are masters of propoganda. Their rumors can be enough to change the tides of fate though, as an army location is misreported or a merchant caravan route leaked.", "The Order of Skill thrives off of constant self-improvement and self-reliance but still prefer to be part of a team. They are energetic and can accomplish any task they set their mind to. They play by the rules and compete based on their own merit. Their need to demonstrate their proficiency can perversely lead to the very opposite, when they show their hand too early in battle or political games.", + "The Order of Brilliance believes that true perfection lies in the school of thought. They are renowned for their academies, in which they provide basic education in order to find the most promising minds. In the lifelong pursuit of knowledge they catalog and store the history of the realms and conduct extensive research into mana usage.", + "The Order of Protection values stability between the Realms, they wish to build economies to help feed and clothe the destitute. They will often create neutral zones such as Inns whereby adventurers can rest at ease. Their desire to do good can often be their downfall, as not all pay kindness for kindness, especially those of the Dark.", + "The Order of Power are one of the oldest orders and fixtures of the history of the realms. They compete by working harder and smarter than everyone else, are natural leaders, and have endless self-confidence. Their confidence can also be their greatest weakness.", "The Order of Titans are said to have come from the Giants and share many similarities. The people say that the Giants are like earth, and the Titans the metal they find within it. They are strongly attuned to a sense of justice in the world, however their justice can vary greatly. For Titans, going against the Lord or Lady of a realm is an unforgivable sin, they play by the rules to a fault and can be caught up in their own rules by a skilled or less honourable enemy.", - "The Twins are another one of the oldest orders. Amongst themselves, they tend to morph to the styles and sensibilities of the most dominant member of their order. They move in-sync with one-another and live communally. Amongst other orders, they have an uncanny ability to mimic the mannerisms and patterns of those they choose. They can change personalities as one would change outfits.", "The order of Vitriol loves debate and offers their opinions with complete disregard to the feelings of others. From an early age they face ruthless criticism from their teachers, parents, and leaders. They hold both themselves and others to impossible standards.", - "The Order of Rage was said to be birthed from the Order of Anger, as not all could display their anger without losing their life. Instead, the Order of Rage values an implacable front to hide a deep well of anger. When they reach positions of power, they tend to enact schemes of revenge on those who hurt them, and in doing so often dig a grave for two.", - - "The Order of Protection values stability between the Realms, they wish to build economies to help feed and clothe the destitute. They will often create neutral zones such as Inns whereby adventurers can rest at ease. Their desire to do good can often be their downfall, as not all pay kindness for kindness, especially those of the Dark.", + "The Order of Anger loves the intensity of high strung situations, their emotions welling deep inside to provide fuel for the challenge. They are always seeking conflict and particularly so with the Order of Protection, who despises their constant troublemaking. Their need for confrontation can often be their downfall, as there is always a bigger fish.", + "The Order of Enlightenment seeks harmony and peace above all else, instead using their intelligence to help guide the world and those around them. The path to enlightenment is unique to every individual, and this Order wishes to turn swords into plows wherever they go. As skilled diplomats many seek them out for negotiations, their wisdom and countenance more valuble than gold. Although strangers to violence in general, their individual defensive measures can be extreme.", ]; diff --git a/client/src/dojo/contractComponents.ts b/client/src/dojo/contractComponents.ts index 818756952..bc455a345 100644 --- a/client/src/dojo/contractComponents.ts +++ b/client/src/dojo/contractComponents.ts @@ -381,20 +381,6 @@ export function defineContractComponents(world: World) { }, ); })(), - EntityMetadata: (() => { - return defineComponent( - world, - { entity_id: RecsType.Number, entity_type: RecsType.Number }, - { - metadata: { - namespace: "eternum", - name: "EntityMetadata", - types: ["u32", "u32"], - customTypes: [], - }, - }, - ); - })(), EntityName: (() => { return defineComponent( world, @@ -948,13 +934,7 @@ export function defineContractComponents(world: World) { { entity_id: RecsType.Number, realm_id: RecsType.Number, - resource_types_packed: RecsType.BigInt, - resource_types_count: RecsType.Number, - cities: RecsType.Number, - harbors: RecsType.Number, - rivers: RecsType.Number, - regions: RecsType.Number, - wonder: RecsType.Number, + produced_resources: RecsType.BigInt, order: RecsType.Number, level: RecsType.Number, }, @@ -962,7 +942,7 @@ export function defineContractComponents(world: World) { metadata: { namespace: "eternum", name: "Realm", - types: ["u32", "u32", "u128", "u8", "u8", "u8", "u8", "u8", "u8", "u8", "u8"], + types: ["u32", "u32", "u128", "u8", "u8"], customTypes: [], }, }, @@ -1710,8 +1690,7 @@ const eventsComponents = (world: World) => { owner_address: RecsType.BigInt, owner_name: RecsType.BigInt, realm_name: RecsType.BigInt, - resource_types_packed: RecsType.BigInt, - resource_types_count: RecsType.Number, + produced_resources: RecsType.BigInt, cities: RecsType.Number, harbors: RecsType.Number, rivers: RecsType.Number, @@ -1740,7 +1719,6 @@ const eventsComponents = (world: World) => { "u8", "u8", "u8", - "u8", "u32", "u32", "u64", diff --git a/client/src/dojo/modelManager/__tests__/__BattleManagerMock__.ts b/client/src/dojo/modelManager/__tests__/__BattleManagerMock__.ts index 0db4d8628..f6065efe5 100644 --- a/client/src/dojo/modelManager/__tests__/__BattleManagerMock__.ts +++ b/client/src/dojo/modelManager/__tests__/__BattleManagerMock__.ts @@ -116,15 +116,9 @@ export const generateMockArmyInfo = ( realm: { entity_id: ARMY_ENTITY_ID, realm_id: 1, - resource_types_packed: 1n, - resource_types_count: 1, - cities: 1, - harbors: 1, - rivers: 1, - regions: 1, - wonder: 1, - order: 1, + produced_resources: 1n, level: 1, + order: 1, }, homePosition: { entity_id: ARMY_ENTITY_ID, x: 0, y: 0 }, }; diff --git a/client/src/hooks/helpers/useRealm.tsx b/client/src/hooks/helpers/useRealm.tsx index 164ca362f..19afc61c7 100644 --- a/client/src/hooks/helpers/useRealm.tsx +++ b/client/src/hooks/helpers/useRealm.tsx @@ -16,12 +16,6 @@ type RealmInfo = { realmId: ID; entityId: ID; name: string; - cities: number; - rivers: number; - wonder: number; - harbors: number; - regions: number; - resourceTypesCount: number; resourceTypesPacked: bigint; order: number; position: ComponentValue; @@ -42,7 +36,7 @@ export function useRealm() { const getQuestResources = () => { const realm = getComponentValue(Realm, getEntityIdFromKeys([BigInt(structureEntityId)])); - const resourcesProduced = realm ? unpackResources(realm.resource_types_packed, realm.resource_types_count) : []; + const resourcesProduced = realm ? unpackResources(realm.produced_resources) : []; return getStartingResources(resourcesProduced); }; @@ -191,19 +185,7 @@ export function useGetRealm(realmEntityId: ID | undefined) { const population = getComponentValue(Population, entityId); if (realm && owner && position) { - const { - realm_id, - entity_id, - cities, - rivers, - wonder, - harbors, - regions, - resource_types_count, - resource_types_packed, - order, - level, - } = realm; + const { realm_id, entity_id, produced_resources, order, level } = realm; const name = getRealmNameById(realm_id); @@ -213,14 +195,8 @@ export function useGetRealm(realmEntityId: ID | undefined) { realmId: realm_id, entityId: entity_id, name, - cities, - rivers, - wonder, - harbors, - regions, level, - resourceTypesCount: resource_types_count, - resourceTypesPacked: resource_types_packed, + resourceTypesPacked: produced_resources, order, position, ...population, @@ -255,18 +231,7 @@ export function getRealms(): RealmInfo[] { if (!realm || !owner || !position) return; - const { - realm_id, - entity_id, - cities, - rivers, - wonder, - harbors, - regions, - resource_types_count, - resource_types_packed, - order, - } = realm; + const { realm_id, entity_id, produced_resources, order } = realm; const name = getRealmNameById(realm_id); @@ -279,13 +244,7 @@ export function getRealms(): RealmInfo[] { realmId: realm_id, entityId: entity_id, name, - cities, - rivers, - wonder, - harbors, - regions, - resourceTypesCount: resource_types_count, - resourceTypesPacked: resource_types_packed, + resourceTypesPacked: produced_resources, order, position, ...population, diff --git a/client/src/hooks/helpers/useStructures.tsx b/client/src/hooks/helpers/useStructures.tsx index afb2c64fd..7bb9ad47f 100644 --- a/client/src/hooks/helpers/useStructures.tsx +++ b/client/src/hooks/helpers/useStructures.tsx @@ -227,7 +227,7 @@ export function useStructuresFromPosition({ position }: { position: Position }) if (!realmData) return undefined; const name = realmData.name; const owner = getComponentValue(Owner, entityId); - const resources = unpackResources(BigInt(realm.resource_types_packed), realm.resource_types_count); + const resources = unpackResources(BigInt(realm.produced_resources)); const distanceFromPosition = calculateDistance(position, realmPosition) ?? 0; diff --git a/client/src/ui/components/cityview/realm/SettleRealmComponent.tsx b/client/src/ui/components/cityview/realm/SettleRealmComponent.tsx index 2f59dd566..37f31c6e1 100644 --- a/client/src/ui/components/cityview/realm/SettleRealmComponent.tsx +++ b/client/src/ui/components/cityview/realm/SettleRealmComponent.tsx @@ -2,10 +2,8 @@ import { useState } from "react"; import Button from "../../../elements/Button"; import { MAX_REALMS } from "@/ui/constants"; -import { toValidAscii } from "@/ui/utils/utils"; import { getOrderName, orders } from "@bibliothecadao/eternum"; import clsx from "clsx"; -import { shortString } from "starknet"; import { order_statments } from "../../../../data/orders"; import { useDojo } from "../../../../hooks/context/DojoContext"; import { useRealm } from "../../../../hooks/helpers/useRealm"; @@ -42,26 +40,12 @@ const SettleRealmComponent = () => { // take next realm id let realm = getRealm(new_realm_id); if (!realm) return; - - const realmNameInAscii = toValidAscii(realm.name); - - calldata.push({ - realm_name: shortString.encodeShortString(realmNameInAscii), - realm_id: Number(realm.realmId), - order: realm.order, - wonder: realm.wonder, - regions: realm.regions, - resource_types_count: realm.resourceTypesCount, - resource_types_packed: realm.resourceTypesPacked, - rivers: realm.rivers, - harbors: realm.harbors, - cities: realm.cities, - }); + calldata.push(Number(realm.realmId)); } await create_multiple_realms({ signer: account, - realms: [calldata[0]], + realm_ids: [calldata[0]], }); setIsLoading(false); playSign(); diff --git a/client/src/ui/components/construction/SelectPreviewBuilding.tsx b/client/src/ui/components/construction/SelectPreviewBuilding.tsx index 9e3d8fda0..0e6b9f177 100644 --- a/client/src/ui/components/construction/SelectPreviewBuilding.tsx +++ b/client/src/ui/components/construction/SelectPreviewBuilding.tsx @@ -70,7 +70,7 @@ export const SelectPreviewBuildingMenu = ({ className, entityId }: { className?: const realmResourceIds = useMemo(() => { if (realm) { - return unpackResources(BigInt(realm.resourceTypesPacked), realm.resourceTypesCount); + return unpackResources(BigInt(realm.resourceTypesPacked)); } else { return []; } diff --git a/client/src/ui/components/resources/RealmResourcesIO.tsx b/client/src/ui/components/resources/RealmResourcesIO.tsx index d56d777fc..001684ad8 100644 --- a/client/src/ui/components/resources/RealmResourcesIO.tsx +++ b/client/src/ui/components/resources/RealmResourcesIO.tsx @@ -17,7 +17,7 @@ export const RealmResourcesIO = ({ }) => { const { realm } = useGetRealm(realmEntityId); - const resourcesProduced = realm ? unpackResources(realm.resourceTypesPacked, realm.resourceTypesCount) : []; + const resourcesProduced = realm ? unpackResources(realm.resourceTypesPacked) : []; const resourcesInputs = configManager.resourceInputs; const resourcesConsumed = [ diff --git a/client/src/ui/components/trading/RealmProduction.tsx b/client/src/ui/components/trading/RealmProduction.tsx index eed4acf43..d8bd32775 100644 --- a/client/src/ui/components/trading/RealmProduction.tsx +++ b/client/src/ui/components/trading/RealmProduction.tsx @@ -33,7 +33,7 @@ export const RealmProduction = () => { realms.map((realm, index) => { if (!realm) return; - const resourcesProduced = unpackResources(realm.resourceTypesPacked, realm.resourceTypesCount); + const resourcesProduced = unpackResources(realm.resourceTypesPacked); if (filterProduced && !resourcesProduced.includes(filterProduced)) return; const resourcesInputs = configManager.resourceInputs; diff --git a/client/src/ui/utils/packedData.tsx b/client/src/ui/utils/packedData.tsx index 11e10110c..00cfb4cd0 100644 --- a/client/src/ui/utils/packedData.tsx +++ b/client/src/ui/utils/packedData.tsx @@ -1,25 +1,24 @@ -export function unpackResources(packedValue: bigint, valueCount: number): number[] { - const MAX_NUMBER_SIZE = 8; +export function unpackResources(packedValue: bigint): number[] { + const MAX_BITS_PER_VALUE = 8; const unpackedNumbers = []; let remainingValue = BigInt(packedValue); - for (let i = 0; i < valueCount; i++) { - const number = remainingValue & BigInt((1 << MAX_NUMBER_SIZE) - 1); + while (remainingValue > 0n) { + const number = remainingValue & BigInt((1 << MAX_BITS_PER_VALUE) - 1); unpackedNumbers.unshift(Number(number)); - remainingValue = remainingValue >> BigInt(MAX_NUMBER_SIZE); + remainingValue = remainingValue >> BigInt(MAX_BITS_PER_VALUE); } - return unpackedNumbers; } export function packResources(numbers: number[]) { const MAX_BITS = 128; - const MAX_NUMBER_SIZE = 8; + const MAX_BITS_PER_VALUE = 8; // Calculate the maximum number of values that can be packed - const maxValues = Math.floor(MAX_BITS / MAX_NUMBER_SIZE); + const maxValues = Math.floor(MAX_BITS / MAX_BITS_PER_VALUE); if (numbers.length > maxValues) { throw new Error(`Exceeded maximum number of values that can be packed: ${maxValues}`); @@ -30,11 +29,11 @@ export function packResources(numbers: number[]) { for (let i = 0; i < numbers.length; i++) { const number = BigInt(numbers[i]); - if (number >= 1 << MAX_NUMBER_SIZE) { - throw new Error(`Number ${number} exceeds maximum size of ${MAX_NUMBER_SIZE} bits`); + if (number >= 1 << MAX_BITS_PER_VALUE) { + throw new Error(`Number ${number} exceeds maximum size of ${MAX_BITS_PER_VALUE} bits`); } - packedValue = (packedValue << BigInt(MAX_NUMBER_SIZE)) | number; + packedValue = (packedValue << BigInt(MAX_BITS_PER_VALUE)) | number; } return packedValue.toString(); diff --git a/config/index.ts b/config/index.ts index 137d99a4b..7186616ba 100644 --- a/config/index.ts +++ b/config/index.ts @@ -53,6 +53,13 @@ const setupConfig: Config = } : EternumGlobalConfig; +// probably should be refactored +setupConfig.season = { + seasonPassAddress: process.env.VITE_SEASON_PASS_ADDRESS!, + realmsAddress: process.env.VITE_REALMS_ADDRESS!, + lordsAddress: process.env.VITE_LORDS_ADDRESS!, +}; + export const config = new EternumConfig(setupConfig); console.log("Setting up config..."); diff --git a/contracts/.tool-versions b/contracts/.tool-versions index f3239a05d..1b12dfb21 100644 --- a/contracts/.tool-versions +++ b/contracts/.tool-versions @@ -1,2 +1,2 @@ scarb 2.7.0 -dojo 1.0.0-alpha.12 +dojo 1.0.0-alpha.16 diff --git a/contracts/Scarb.toml b/contracts/Scarb.toml index e22d6c4d0..7af046ad5 100755 --- a/contracts/Scarb.toml +++ b/contracts/Scarb.toml @@ -10,6 +10,7 @@ dojo = { git = "https://github.com/dojoengine/dojo", tag = "v1.0.0-alpha.16" } alexandria_math = { git = "https://github.com/keep-starknet-strange/alexandria.git", rev = "e1b080577aaa6889116fc8be5dde72b2fd21e397" } alexandria_data_structures = { git = "https://github.com/keep-starknet-strange/alexandria.git", rev = "e1b080577aaa6889116fc8be5dde72b2fd21e397" } cubit = { git = "https://github.com/dojoengine/cubit", branch = "cairo_2.7" } + [[target.dojo]] [tool.fmt] diff --git a/contracts/scripts/contracts.sh b/contracts/scripts/contracts.sh index 9cbec5eae..46b1245a7 100644 --- a/contracts/scripts/contracts.sh +++ b/contracts/scripts/contracts.sh @@ -24,6 +24,8 @@ export TRADE_SYSTEMS=$(get_contract_address "eternum-trade_systems") export RESOURCE_SYSTEMS=$(get_contract_address "eternum-resource_systems") +export RESOURCE_BRIDGE_SYSTEMS=$(get_contract_address "eternum-resource_bridge_systems") + export DONKEY_SYSTEMS=$(get_contract_address "eternum-donkey_systems") export TRAVEL_SYSTEMS=$(get_contract_address "eternum-travel_systems") @@ -54,12 +56,15 @@ export DEV_BANK_SYSTEMS=$(get_contract_address "eternum-dev_bank_systems") export GUILD_SYSTEMS=$(get_contract_address "eternum-guild_systems") +export DEV_REALM_SYSTEMS=$(get_contract_address "eternum-dev_realm_systems") + # Display the addresses echo "-------------------------ADDRESS----------------------------------------" echo world : $DOJO_WORLD_ADDRESS echo config : $CONFIG_SYSTEMS echo trade : $TRADE_SYSTEMS echo resource : $RESOURCE_SYSTEMS +echo resource_bridge : $RESOURCE_BRIDGE_SYSTEMS echo donkey : $DONKEY_SYSTEMS echo travel : $TRAVEL_SYSTEMS echo realm : $REALM_SYSTEMS @@ -75,3 +80,4 @@ echo buildings : $BUILDINGS_SYSTEMS echo maps : $MAP_SYSTEMS echo test_bank : $DEV_BANK_SYSTEMS echo guild : $GUILD_SYSTEMS +echo test_realm : $DEV_REALM_SYSTEMS \ No newline at end of file diff --git a/contracts/scripts/env_variables.sh b/contracts/scripts/env_variables.sh index 24db59d97..dd2ba3342 100755 --- a/contracts/scripts/env_variables.sh +++ b/contracts/scripts/env_variables.sh @@ -4,7 +4,7 @@ STARKNET_RPC_URL="http://localhost:5050" DOJO_ACCOUNT_ADDRESS="0xb3ff441a68610b30fd5e2abbf3a1548eb6ba6f3559f2862bf2dc757e5828ca" DOJO_PRIVATE_KEY="0x2bbf4f9fd0bbb2e60b0316c1fe0b76cf7a4d0198bd493ced9b8df2a3a24d68a" -SOZO_WORLD="0x76ca3dfc3e96843716f882546f0db96b7da0cf988bdba284b469d0defb2f48f" +SOZO_WORLD="0x320b2713e324fe3125bbc42d85ff69cb3c0908b436fa38a35746dbc45deeb11" KATANA_TOML_PATH="./manifests/dev/deployment/manifest.toml" # Check if the first argument is provided and set it to "dev" or "prod" @@ -14,7 +14,7 @@ if [[ ! -z "$1" ]]; then STARKNET_RPC_URL="https://api.cartridge.gg/x/eternum-42/katana/" # DOJO_ACCOUNT_ADDRESS="" # number 4 # DOJO_PRIVATE_KEY="" # number 4 - SOZO_WORLD="0x76ca3dfc3e96843716f882546f0db96b7da0cf988bdba284b469d0defb2f48f" + SOZO_WORLD="0x320b2713e324fe3125bbc42d85ff69cb3c0908b436fa38a35746dbc45deeb11" KATANA_TOML_PATH="./manifests/prod/deployment/manifest.toml" elif [[ "$1" != "dev" ]]; then echo "Invalid argument. Use 'dev' or 'prod'." diff --git a/contracts/scripts/system_models.json b/contracts/scripts/system_models.json index a5dd80181..4183f3950 100644 --- a/contracts/scripts/system_models.json +++ b/contracts/scripts/system_models.json @@ -32,9 +32,27 @@ "ResourceBridgeWhitelistConfig", "RealmLevelConfig", "RealmMaxLevelConfig", - "TravelFoodCostConfig" + "TravelFoodCostConfig", + "SeasonConfig" ], "DEV_RESOURCE_SYSTEMS": ["Resource", "OwnedResourcesTracker", "Production"], + "DEV_REALM_SYSTEMS": [ + "SettlementConfig", + "Owner", + "Realm", + "Position", + "EntityOwner", + "CapacityCategory", + "Movable", + "QuantityTracker", + "Resource", + "OwnedResourcesTracker", + "Tile", + "Production", + "HasClaimedStartingResources", + "Structure", + "StructureCount" + ], "DEV_BANK_SYSTEMS": [ "EntityName", "Tile", @@ -57,7 +75,6 @@ "Owner", "Realm", "Position", - "EntityMetadata", "EntityOwner", "CapacityCategory", "Movable", @@ -101,7 +118,23 @@ "CapacityCategory", "Position", "EntityOwner", - "EntityMetadata", + "Quantity", + "ArrivalTime", + "QuantityTracker" + ], + "RESOURCE_BRIDGE_SYSTEMS": [ + "Resource", + "OwnedResourcesTracker", + "ResourceAllowance", + "Owner", + "Weight", + "DetachedResource", + "ForeignKey", + "Production", + "Movable", + "CapacityCategory", + "Position", + "EntityOwner", "Quantity", "ArrivalTime", "QuantityTracker" @@ -198,7 +231,6 @@ "CapacityCategory", "Position", "EntityOwner", - "EntityMetadata", "Quantity", "ArrivalTime", "QuantityTracker", diff --git a/contracts/src/constants.cairo b/contracts/src/constants.cairo index 8587fd543..6ac958562 100644 --- a/contracts/src/constants.cairo +++ b/contracts/src/constants.cairo @@ -75,28 +75,29 @@ fn all_resource_ids() -> Array { // Note: Please update the all_resources_ids list whenever ResourceTypes are updated mod ResourceTypes { - const WOOD: u8 = 1; - const STONE: u8 = 2; - const COAL: u8 = 3; + const STONE: u8 = 1; + const COAL: u8 = 2; + const WOOD: u8 = 3; const COPPER: u8 = 4; - const OBSIDIAN: u8 = 5; - const SILVER: u8 = 6; - const IRONWOOD: u8 = 7; - const COLD_IRON: u8 = 8; - const GOLD: u8 = 9; - const HARTWOOD: u8 = 10; - const DIAMONDS: u8 = 11; - const SAPPHIRE: u8 = 12; + const IRONWOOD: u8 = 5; + const OBSIDIAN: u8 = 6; + const GOLD: u8 = 7; + const SILVER: u8 = 8; + const MITHRAL: u8 = 9; + const ALCHEMICAL_SILVER: u8 = 10; + const COLD_IRON: u8 = 11; + const DEEP_CRYSTAL: u8 = 12; const RUBY: u8 = 13; - const DEEP_CRYSTAL: u8 = 14; - const IGNIUM: u8 = 15; - const ETHEREAL_SILICA: u8 = 16; - const TRUE_ICE: u8 = 17; - const TWILIGHT_QUARTZ: u8 = 18; - const ALCHEMICAL_SILVER: u8 = 19; - const ADAMANTINE: u8 = 20; - const MITHRAL: u8 = 21; + const DIAMONDS: u8 = 14; + const HARTWOOD: u8 = 15; + const IGNIUM: u8 = 16; + const TWILIGHT_QUARTZ: u8 = 17; + const TRUE_ICE: u8 = 18; + const ADAMANTINE: u8 = 19; + const SAPPHIRE: u8 = 20; + const ETHEREAL_SILICA: u8 = 21; const DRAGONHIDE: u8 = 22; + const DEMONHIDE: u8 = 28; const EARTHEN_SHARD: u8 = 29; @@ -117,47 +118,47 @@ mod ResourceTypes { fn resource_type_name(resource_type: u8) -> ByteArray { if resource_type == 1 { - "WOOD" - } else if resource_type == 2 { "STONE" - } else if resource_type == 3 { + } else if resource_type == 2 { "COAL" + } else if resource_type == 3 { + "WOOD" } else if resource_type == 4 { "COPPER" } else if resource_type == 5 { - "OBSIDIAN" + "IRONWOOD" } else if resource_type == 6 { - "SILVER" + "OBSIDIAN" } else if resource_type == 7 { - "IRONWOOD" + "GOLD" } else if resource_type == 8 { - "COLD IRON" + "SILVER" } else if resource_type == 9 { - "GOLD" + "MITHRAL" } else if resource_type == 10 { - "HARTWOOD" + "ALCHEMICAL SILVER" } else if resource_type == 11 { - "DIAMONDS" + "COLD IRON" } else if resource_type == 12 { - "SAPPHIRE" + "DEEP CRYSTAL" } else if resource_type == 13 { "RUBY" } else if resource_type == 14 { - "DEEP CRYSTAL" + "DIAMONDS" } else if resource_type == 15 { - "IGNIUM" + "HARTWOOD" } else if resource_type == 16 { - "ETHEREAL SILICA" + "IGNIUM" } else if resource_type == 17 { - "TRUE ICE" - } else if resource_type == 18 { "TWILIGHT QUARTZ" + } else if resource_type == 18 { + "TRUE ICE" } else if resource_type == 19 { - "ALCHEMICAL SILVER" - } else if resource_type == 20 { "ADAMANTINE" + } else if resource_type == 20 { + "SAPPHIRE" } else if resource_type == 21 { - "MITHRAL" + "ETHEREAL SILICA" } else if resource_type == 22 { "DRAGONHIDE" } else if resource_type == 28 { diff --git a/contracts/src/lib.cairo b/contracts/src/lib.cairo index 42f2a634c..aafcd6710 100644 --- a/contracts/src/lib.cairo +++ b/contracts/src/lib.cairo @@ -3,4 +3,3 @@ pub mod constants; pub mod models; mod systems; pub mod utils; - diff --git a/contracts/src/models.cairo b/contracts/src/models.cairo index 016e7f617..f885b350a 100644 --- a/contracts/src/models.cairo +++ b/contracts/src/models.cairo @@ -18,6 +18,7 @@ mod production; mod quantity; mod realm; mod resources; +mod season; mod stamina; mod structure; mod trade; diff --git a/contracts/src/models/config.cairo b/contracts/src/models/config.cairo index 5d0a27c25..8e9b4b140 100644 --- a/contracts/src/models/config.cairo +++ b/contracts/src/models/config.cairo @@ -37,6 +37,17 @@ pub struct WorldConfig { realm_l2_contract: ContractAddress, } +#[derive(IntrospectPacked, Copy, Drop, Serde)] +#[dojo::model] +pub struct SeasonConfig { + #[key] + config_id: ID, + season_pass_address: ContractAddress, + realms_address: ContractAddress, + lords_address: ContractAddress, +} + + #[derive(IntrospectPacked, Copy, Drop, Serde)] #[dojo::model] pub struct RealmFreeMintConfig { diff --git a/contracts/src/models/event.cairo b/contracts/src/models/event.cairo index 72815609e..09a25bd86 100644 --- a/contracts/src/models/event.cairo +++ b/contracts/src/models/event.cairo @@ -147,8 +147,7 @@ pub struct SettleRealmData { owner_address: ContractAddress, owner_name: felt252, realm_name: felt252, - resource_types_packed: u128, - resource_types_count: u8, + produced_resources: u128, cities: u8, harbors: u8, rivers: u8, diff --git a/contracts/src/models/hyperstructure.cairo b/contracts/src/models/hyperstructure.cairo index 8c23d2fbd..0b0ba4a11 100644 --- a/contracts/src/models/hyperstructure.cairo +++ b/contracts/src/models/hyperstructure.cairo @@ -17,14 +17,6 @@ use eternum::{ use eternum::{constants::WORLD_CONFIG_ID}; use starknet::ContractAddress; -#[derive(IntrospectPacked, Copy, Drop, Serde)] -#[dojo::model] -pub struct Season { - #[key] - config_id: ID, - is_over: bool, -} - #[derive(IntrospectPacked, Copy, Drop, Serde)] #[dojo::model] pub struct Hyperstructure { @@ -85,19 +77,6 @@ pub impl EpochCustomImpl of EpochCustomTrait { } } -#[generate_trait] -pub impl SeasonCustomImpl of SeasonCustomTrait { - fn end_season(world: IWorldDispatcher) { - set!(world, (Season { config_id: WORLD_CONFIG_ID, is_over: true })); - } - - fn assert_season_is_not_over(world: IWorldDispatcher) { - let season = get!(world, WORLD_CONFIG_ID, Season); - assert!(season.is_over == false, "Season is over"); - } -} - - #[generate_trait] pub impl HyperstructureCustomImpl of HyperstructureCustomTrait { fn assert_access(self: Hyperstructure, world: IWorldDispatcher) { diff --git a/contracts/src/models/metadata.cairo b/contracts/src/models/metadata.cairo index e8e4295f0..8c939a5a4 100644 --- a/contracts/src/models/metadata.cairo +++ b/contracts/src/models/metadata.cairo @@ -1,16 +1,5 @@ use eternum::alias::ID; -// a way to store the type of the entity in addition -// to the list of components which we already have -#[derive(IntrospectPacked, Copy, Drop, Serde)] -#[dojo::model] -pub struct EntityMetadata { - #[key] - entity_id: ID, - entity_type: u32, -} - - // a way to link one entity id to another // e.g. in a caravan, you want to store the list of entities in the caravan // using an index and the foreign key diff --git a/contracts/src/models/owner.cairo b/contracts/src/models/owner.cairo index 94b4e0218..38d495e32 100644 --- a/contracts/src/models/owner.cairo +++ b/contracts/src/models/owner.cairo @@ -58,22 +58,7 @@ mod tests { fn owner_test_entity_owner_get_realm_id() { let world = spawn_eternum(); - set!( - world, - Realm { - entity_id: 1, - realm_id: 3, - resource_types_packed: 0, - resource_types_count: 0, - cities: 0, - harbors: 0, - rivers: 0, - regions: 0, - wonder: 0, - order: 0, - level: 0 - } - ); + set!(world, Realm { entity_id: 1, realm_id: 3, produced_resources: 0, order: 0, level: 0 }); set!(world, EntityOwner { entity_id: 2, entity_owner_id: 1 }); diff --git a/contracts/src/models/quantity.cairo b/contracts/src/models/quantity.cairo index 32595fc96..f814b133f 100644 --- a/contracts/src/models/quantity.cairo +++ b/contracts/src/models/quantity.cairo @@ -26,4 +26,5 @@ pub struct QuantityTracker { mod QuantityTrackerType { const ARMY_COUNT: felt252 = 'army_quantity'; + const REALM_COUNT: felt252 = 'realm_quantity'; } diff --git a/contracts/src/models/realm.cairo b/contracts/src/models/realm.cairo index bc8f5896b..411d4725d 100644 --- a/contracts/src/models/realm.cairo +++ b/contracts/src/models/realm.cairo @@ -1,30 +1,22 @@ +use alexandria_math::{BitShift, pow}; use array::SpanTrait; use dojo::world::IWorldDispatcher; use eternum::alias::ID; use eternum::constants::WORLD_CONFIG_ID; use eternum::models::config::RealmMaxLevelConfig; -use eternum::utils::unpack::unpack_resource_types; use starknet::ContractAddress; use traits::Into; + #[derive(IntrospectPacked, Copy, Drop, Serde)] #[dojo::model] pub struct Realm { #[key] entity_id: ID, realm_id: ID, - // OG Realm Id - // TODO: no need for owner ? since we use Owner component - // packed resource ids of realm - resource_types_packed: u128, // max 16 resources - resource_types_count: u8, - cities: u8, - harbors: u8, - rivers: u8, - regions: u8, - wonder: u8, + produced_resources: u128, order: u8, - level: u8, + level: u8 } @@ -34,22 +26,401 @@ impl RealmCustomImpl of RealmCustomTrait { get!(world, WORLD_CONFIG_ID, RealmMaxLevelConfig).max_level } - fn has_resource(self: Realm, resource_type: u8) -> bool { - let mut resource_types: Span = unpack_resource_types(self.resource_types_packed, self.resource_types_count); - let mut has_resource = false; + fn assert_is_set(self: Realm) { + assert(self.realm_id != 0, 'Entity is not a realm'); + } +} + +#[generate_trait] +impl RealmNameAndAttrsDecodingImpl of RealmNameAndAttrsDecodingTrait { + fn BYTE_LEN() -> u256 { + 8 // a byte is 8 bits + } + + fn MASK_1_BYTE() -> u256 { + 0xff + } + + fn decode(name_and_attrs: felt252) -> (felt252, u8, u8, u8, u8, u8, u8, Array) { + let original_name_and_attrs: u256 = name_and_attrs.into(); + let attrs_len: u256 = original_name_and_attrs & Self::MASK_1_BYTE(); + + // remove name length and attrs length from name_and_attrs + let realm_name_and_attrs: u256 = BitShift::shr(original_name_and_attrs, 2 * Self::BYTE_LEN()); + + let attrs_mask: u256 = pow(2, Self::BYTE_LEN() * attrs_len) - 1; + let attributes: u256 = realm_name_and_attrs & attrs_mask; + + let mut attrs_arr: Span = Self::_encoded_attributes_to_array(attributes); + let region: u8 = *attrs_arr.pop_front().unwrap(); + let cities: u8 = *attrs_arr.pop_front().unwrap(); + let harbors: u8 = *attrs_arr.pop_front().unwrap(); + let rivers: u8 = *attrs_arr.pop_front().unwrap(); + let wonder: u8 = *attrs_arr.pop_back().unwrap(); + let order: u8 = *attrs_arr.pop_back().unwrap(); + + // resources available on realm + let mut resources = array![]; loop { - match resource_types.pop_front() { - Option::Some(v) => { if resource_type == *v { - has_resource = true; - break (); - }; }, - Option::None(_) => { break (); }, - }; + match attrs_arr.pop_front() { + Option::Some(resource) => { resources.append(*resource); }, + Option::None => { break; } + } }; - has_resource + + // realm name + let name: felt252 = BitShift::shr(realm_name_and_attrs, Self::BYTE_LEN() * attrs_len).try_into().unwrap(); + + return (name, region, cities, harbors, rivers, wonder, order, resources); } - fn assert_is_set(self: Realm) { - assert(self.realm_id != 0, 'Entity is not a realm'); + fn _encoded_attributes_to_array(mut value: u256) -> Span { + let mut res: Array = array![]; + while (value > 0) { + let byte: u8 = (value & Self::MASK_1_BYTE()).try_into().unwrap(); + res.append(byte); + + value = BitShift::shr(value, 8); + }; + + return res.span(); + } +} + + +/// References to what each id maps to. +/// These exactly match what is in the Realms L2 contracts (bibliothecadao/lordship repository). +/// +#[generate_trait] +impl RealmReferenceImpl of RealmReferenceTrait { + fn resource_mapping(num: felt252) -> ByteArray { + match num { + 0 => panic!("zero resource"), + 1 => "Stone", + 2 => "Coal", + 3 => "Wood", + 4 => "Copper", + 5 => "Ironwood", + 6 => "Obsidian", + 7 => "Gold", + 8 => "Silver", + 9 => "Mithral", + 10 => "Alchemical Silver", + 11 => "Cold Iron", + 12 => "Deep Crystal", + 13 => "Ruby", + 14 => "Diamonds", + 15 => "Hartwood", + 16 => "Ignium", + 17 => "Twilight Quartz", + 18 => "True Ice", + 19 => "Adamantine", + 20 => "Sapphire", + 21 => "Ethereal Silica", + 22 => "Dragonhide", + _ => panic!("max resource num exceeded") + } + } + + fn order_mapping(num: felt252) -> ByteArray { + match num { + 0 => panic!("zero order"), + 1 => "The Order of Giants", + 2 => "The Order of Perfection", + 3 => "The Order of Rage", + 4 => "The Order of the Fox", + 5 => "The Order of the Twins", + 6 => "The Order of Fury", + 7 => "The Order of Reflection", + 8 => "The Order of Detection", + 9 => "The Order of Skill", + 10 => "The Order of Brilliance", + 11 => "The Order of Protection", + 12 => "The Order of Power", + 13 => "The Order of Titans", + 14 => "The Order of Vitriol", + 15 => "The Order of Anger", + 16 => "The Order of Enlightenment", + _ => panic!("max order num exceeded") + } + } + + + fn wonder_mapping(num: felt252) -> ByteArray { + match num { + 0 => panic!("zero wonder"), + 1 => "None", + 2 => "The Eternal Orchard", + 3 => "The Glowing Geyser", + 4 => "The Pearl Summit", + 5 => "The Pearl River", + 6 => "Altar Of Divine Will", + 7 => "The Fading Yew", + 8 => "Pantheon Of Chaos", + 9 => "The Ancient Lagoon", + 10 => "The Exalted Basin", + 11 => "The Amaranthine Rock", + 12 => "The Pale Pillar", + 13 => "The Mythic Trees", + 14 => "Sanctum Of The Oracle", + 15 => "The Ancestral Willow", + 16 => "The Pale Vertex", + 17 => "Cathedral Of Agony", + 18 => "The Omen Graves", + 19 => "The Crying Oak", + 20 => "The Perpetual Ridge", + 21 => "The Sanctified Fjord", + 22 => "Altar Of Perfection", + 23 => "The Argent Catacombs", + 24 => "The Mirror Grotto", + 25 => "The Mother Grove", + 26 => "The Dark Mountain", + 27 => "The Origin Oasis", + 28 => "The Cerulean Reliquary", + 29 => "Sanctum Of Purpose", + 30 => "Altar Of The Void", + 31 => "Pagoda Of Fortune", + 32 => "The Weeping Willow", + 33 => "Synagogue Of Collapse", + 34 => "Mosque Of Mercy", + 35 => "The Perpetual Fjord", + 36 => "The Ethereal Isle", + 37 => "The Azure Lake", + 38 => "The Celestial Vertex", + 39 => "The Exalted Maple", + 40 => "The Oracle Pool", + 41 => "Infinity Spire", + 42 => "The Exalted Geyser", + 43 => "The Glowing Pinnacle", + 44 => "The Ancestral Trees", + 45 => "The Immortal Hot Spring", + 46 => "The Pure Stone", + 47 => "The Cerulean Chamber", + 48 => "Sanctuary Of The Ancients", + 49 => "The Solemn Catacombs", + 50 => "The Devout Summit", + 51 => "Sky Mast", + _ => panic!("max wonder num exceeded") + } + } +} + + +#[generate_trait] +impl RealmResourcesImpl of RealmResourcesTrait { + fn PACKING_TOTAL_BITS_AVAILABLE() -> u8 { + 128 // 128 bits available for all resources + } + + fn PACKING_MAX_BITS_PER_RESOURCE() -> u8 { + 8 // 8 bits available per resource + } + + fn PACKING_MASK_SIZE() -> u8 { + 0xFF // max value for a u8 + } + + fn pack_resource_types(resource_types: Span) -> u128 { + // ensure all resources can be packed into a u128 + let max_resources: u8 = Self::PACKING_TOTAL_BITS_AVAILABLE() / Self::PACKING_MAX_BITS_PER_RESOURCE(); + assert!(resource_types.len() <= max_resources.into(), "resources are too many to be packed into a u128"); + + // pack the resources into a u128 + let mut produced_resources: u128 = 0; + for resource_type in resource_types { + // ensure resource type is not zero + assert!((*resource_type).is_non_zero(), "resource type is zero"); + + // shift left to make space for the new resource + let masked_produced_resources = BitShift::shl( + produced_resources, Self::PACKING_MAX_BITS_PER_RESOURCE().into() + ); + + // add the new resource + let new_produced_resources = masked_produced_resources | (*resource_type).into(); + + // update the packed value + produced_resources = new_produced_resources; + }; + produced_resources + } + + + fn unpack_resource_types(mut produced_resources: u128) -> Span { + // Iterate over each resource type + let mut resource_types = array![]; + while produced_resources > 0 { + // extract the first 8 bits + let resource_type = produced_resources & Self::PACKING_MASK_SIZE().into(); + resource_types.append(resource_type.try_into().unwrap()); + + // shift right by 8 bits + produced_resources = BitShift::shr(produced_resources, Self::PACKING_MAX_BITS_PER_RESOURCE().into()); + }; + + resource_types.span() + } + + fn produces_resource(self: Realm, check_resource_type: u8) -> bool { + let mut packed = self.produced_resources; + let mut contains_resource = false; + while packed > 0 { + // extract the first 8 bits + let resource_type: u8 = (packed & Self::PACKING_MASK_SIZE().into()).try_into().unwrap(); + if resource_type == check_resource_type { + contains_resource = true; + break; + } + // shift right by 8 bits + packed = BitShift::shr(packed, Self::PACKING_MAX_BITS_PER_RESOURCE().into()); + }; + contains_resource + } +} + +#[cfg(test)] +mod test_realm_name_and_attrs_decode_impl { + use super::{RealmNameAndAttrsDecodingImpl}; + + + fn DATA_ONE() -> felt252 { + 0x53746f6c736c69010102011a1108060708 + } + + fn DATA_TWO() -> felt252 { + 0x5165756a7165756a776f75770107040301281915060c09 + } + + #[test] + fn test_decode_name_and_attrs_one() { + let (name, region, cities, harbors, rivers, wonder, order, resources) = RealmNameAndAttrsDecodingImpl::decode( + DATA_ONE() + ); + assert_eq!(name, 'Stolsli'); + assert_eq!(region, 6); + assert_eq!(cities, 8); + assert_eq!(harbors, 17); + assert_eq!(rivers, 26); + assert_eq!(wonder, 1); + assert_eq!(order, 1); + assert_eq!(resources, array![1, 2]); // stone and coal + } + + + #[test] + fn test_decode_name_and_attrs_two() { + let (name, region, cities, harbors, rivers, wonder, order, resources) = RealmNameAndAttrsDecodingImpl::decode( + DATA_TWO() + ); + assert_eq!(name, 'Qeujqeujwouw'); + assert_eq!(region, 6); + assert_eq!(cities, 21); + assert_eq!(harbors, 25); + assert_eq!(rivers, 40); + assert_eq!(wonder, 1); + assert_eq!(order, 7); + assert_eq!(resources, array![1, 3, 4]); // stone, wood, copper + } +} + +#[cfg(test)] +mod test_realm_resources_impl { + use super::{RealmResourcesImpl, RealmResourcesTrait, Realm}; + + fn mock_realm() -> Realm { + Realm { entity_id: 1, realm_id: 1, order: 0, level: 0, produced_resources: 0, } + } + + + #[test] + fn test_pack_resource_types_empty() { + let resource_types: Array = array![]; + let packed = RealmResourcesImpl::pack_resource_types(resource_types.span()); + assert_eq!(packed, 0, "Packing an empty array should return 0"); + } + + #[test] + fn test_pack_resource_types_single() { + let resource_types: Array = array![42]; + let packed = RealmResourcesImpl::pack_resource_types(resource_types.span()); + assert_eq!(packed, 42, "Packing a single element should return its value"); + } + + #[test] + fn test_pack_unpack_resource_types() { + let resource_types: Array = array![1, 2, 3, 55, 128, 33, 122, 122]; + let resource_types_reversed: Array = array![122, 122, 33, 128, 55, 3, 2, 1]; + let packed = RealmResourcesImpl::pack_resource_types(resource_types.span()); + let unpacked = RealmResourcesImpl::unpack_resource_types(packed); + assert_eq!(unpacked, resource_types_reversed.span(), "Unpacked resources should match the original"); + } + + #[test] + #[should_panic(expected: "resources are too many to be packed into a u128")] + fn test_pack_resource_types_overflow() { + let resource_types: Array = array![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; + RealmResourcesImpl::pack_resource_types(resource_types.span()); + } + + #[test] + fn test_unpack_resource_types_zero() { + let packed: u128 = 0; + let unpacked = RealmResourcesImpl::unpack_resource_types(packed); + let expected: Array = array![]; + assert_eq!(unpacked, expected.span(), "Unpacking zero should return an empty array"); + } + + #[test] + fn test_unpack_resource_types_max_value() { + let packed: u128 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // max u128 value + let unpacked = RealmResourcesImpl::unpack_resource_types(packed); + let expected: Array = array![ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 + ]; + assert_eq!(unpacked, expected.span(), "Unpacked resources should match maximum packed value"); + } + + + #[test] + fn test_contains_resource_present() { + let resource_types: Array = array![10, 20, 30, 40]; + let mut realm = mock_realm(); + realm.produced_resources = RealmResourcesImpl::pack_resource_types(resource_types.span()); + assert!(realm.produces_resource(20), "Resource 20 should be present"); + } + + #[test] + fn test_contains_resource_absent() { + let resource_types: Array = array![10, 20, 30, 40]; + let mut realm = mock_realm(); + realm.produced_resources = RealmResourcesImpl::pack_resource_types(resource_types.span()); + assert!(!realm.produces_resource(50), "Resource 50 should not be present"); + } + + #[test] + fn test_contains_resource_empty() { + let mut realm = mock_realm(); + assert!(!realm.produces_resource(10), "No resources should be present in an empty pack"); + } + + #[test] + fn test_contains_resource_multiple_occurrences() { + let resource_types: Array = array![10, 20, 10, 30]; + let mut realm = mock_realm(); + realm.produced_resources = RealmResourcesImpl::pack_resource_types(resource_types.span()); + assert!(realm.produces_resource(10), "Resource 10 should be present"); + assert!(realm.produces_resource(20), "Resource 20 should be present"); + assert!(realm.produces_resource(30), "Resource 30 should be present"); + assert!(!realm.produces_resource(40), "Resource 40 should not be present"); + } + + #[test] + fn test_contains_resource_max_value() { + let resource_types: Array = array![255, 127, 128]; + let mut realm = mock_realm(); + realm.produced_resources = RealmResourcesImpl::pack_resource_types(resource_types.span()); + assert!(realm.produces_resource(255), "Resource 255 should be present"); + assert!(realm.produces_resource(127), "Resource 127 should be present"); + assert!(realm.produces_resource(128), "Resource 128 should be present"); } } diff --git a/contracts/src/models/season.cairo b/contracts/src/models/season.cairo new file mode 100644 index 000000000..6b50a122c --- /dev/null +++ b/contracts/src/models/season.cairo @@ -0,0 +1,24 @@ +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; +use eternum::{alias::ID, constants::WORLD_CONFIG_ID}; + +#[derive(IntrospectPacked, Copy, Drop, Serde)] +#[dojo::model] +pub struct Season { + #[key] + config_id: ID, + is_over: bool +} + +#[generate_trait] +pub impl SeasonImpl of SeasonTrait { + fn end_season(world: IWorldDispatcher) { + let mut season: Season = get!(world, WORLD_CONFIG_ID, Season); + season.is_over = true; + set!(world, (season)); + } + + fn assert_season_is_not_over(world: IWorldDispatcher) { + let season = get!(world, WORLD_CONFIG_ID, Season); + assert!(season.is_over == false, "Season is over"); + } +} diff --git a/contracts/src/models/structure.cairo b/contracts/src/models/structure.cairo index 0fc39afbe..2a3f8a1f8 100644 --- a/contracts/src/models/structure.cairo +++ b/contracts/src/models/structure.cairo @@ -2,7 +2,6 @@ use array::SpanTrait; use eternum::alias::ID; use eternum::models::config::{BattleConfig, TickConfig, TickTrait}; use eternum::models::position::Coord; -use eternum::utils::unpack::unpack_resource_types; use starknet::ContractAddress; use traits::Into; diff --git a/contracts/src/systems/bank/contracts/bank.cairo b/contracts/src/systems/bank/contracts/bank.cairo index 428b3a891..e5e249a02 100644 --- a/contracts/src/systems/bank/contracts/bank.cairo +++ b/contracts/src/systems/bank/contracts/bank.cairo @@ -31,10 +31,10 @@ mod bank_systems { use eternum::models::bank::bank::{Bank}; use eternum::models::capacity::{CapacityCategory}; use eternum::models::config::{BankConfig, CapacityConfigCategory}; - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::owner::{Owner, EntityOwner}; use eternum::models::position::{Position, Coord}; use eternum::models::resources::{Resource, ResourceCustomImpl}; + use eternum::models::season::SeasonImpl; use eternum::models::structure::{Structure, StructureCategory, StructureCount, StructureCountCustomTrait}; use eternum::systems::resources::contracts::resource_systems::resource_systems::{InternalResourceSystemsImpl}; @@ -51,7 +51,7 @@ mod bank_systems { owner_bridge_fee_dpt_percent: u16, owner_bridge_fee_wtdr_percent: u16 ) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let bank_entity_id: ID = world.uuid(); @@ -98,7 +98,7 @@ mod bank_systems { fn change_owner_amm_fee( ref world: IWorldDispatcher, bank_entity_id: ID, new_owner_fee_num: u128, new_owner_fee_denom: u128, ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let player = starknet::get_caller_address(); diff --git a/contracts/src/systems/bank/contracts/liquidity.cairo b/contracts/src/systems/bank/contracts/liquidity.cairo index aea91be71..2361210f3 100644 --- a/contracts/src/systems/bank/contracts/liquidity.cairo +++ b/contracts/src/systems/bank/contracts/liquidity.cairo @@ -24,9 +24,9 @@ mod liquidity_systems { use eternum::constants::ResourceTypes; use eternum::models::bank::liquidity::{Liquidity}; use eternum::models::bank::market::{Market, MarketCustomTrait}; - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::owner::{Owner, OwnerCustomTrait}; use eternum::models::resources::{Resource, ResourceCustomImpl, ResourceCustomTrait}; + use eternum::models::season::SeasonImpl; use eternum::systems::bank::contracts::bank::bank_systems::{InternalBankSystemsImpl}; #[derive(Copy, Drop, Serde)] @@ -56,7 +56,7 @@ mod liquidity_systems { resource_amount: u128, lords_amount: u128, ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, entity_id, Owner).assert_caller_owner(); let mut resource = ResourceCustomImpl::get(world, (entity_id, resource_type)); @@ -97,7 +97,7 @@ mod liquidity_systems { fn remove( ref world: IWorldDispatcher, bank_entity_id: ID, entity_id: ID, resource_type: u8, shares: Fixed ) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let player = starknet::get_caller_address(); get!(world, entity_id, Owner).assert_caller_owner(); diff --git a/contracts/src/systems/bank/contracts/swap.cairo b/contracts/src/systems/bank/contracts/swap.cairo index 03bfe4fb1..97f9780de 100644 --- a/contracts/src/systems/bank/contracts/swap.cairo +++ b/contracts/src/systems/bank/contracts/swap.cairo @@ -18,8 +18,8 @@ mod swap_systems { use eternum::models::bank::market::{Market, MarketCustomTrait}; use eternum::models::config::{BankConfig}; use eternum::models::config::{TickImpl, TickTrait}; - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::resources::{Resource, ResourceCustomImpl, ResourceCustomTrait}; + use eternum::models::season::SeasonImpl; use eternum::systems::bank::contracts::bank::bank_systems::{InternalBankSystemsImpl}; use option::OptionTrait; @@ -49,7 +49,7 @@ mod swap_systems { #[abi(embed_v0)] impl SwapSystemsImpl of super::ISwapSystems { fn buy(ref world: IWorldDispatcher, bank_entity_id: ID, entity_id: ID, resource_type: u8, amount: u128) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let bank = get!(world, bank_entity_id, Bank); let bank_config = get!(world, WORLD_CONFIG_ID, BankConfig); @@ -101,7 +101,7 @@ mod swap_systems { fn sell(ref world: IWorldDispatcher, bank_entity_id: ID, entity_id: ID, resource_type: u8, amount: u128) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let bank = get!(world, bank_entity_id, Bank); let bank_config = get!(world, WORLD_CONFIG_ID, BankConfig); diff --git a/contracts/src/systems/buildings/contracts.cairo b/contracts/src/systems/buildings/contracts.cairo index 4699f3851..c9847a77f 100644 --- a/contracts/src/systems/buildings/contracts.cairo +++ b/contracts/src/systems/buildings/contracts.cairo @@ -17,12 +17,12 @@ trait IBuildingContract { #[dojo::contract] mod building_systems { use eternum::alias::ID; - use eternum::models::hyperstructure::SeasonCustomImpl; + use eternum::models::season::SeasonImpl; use eternum::models::{ resources::{Resource, ResourceCost}, owner::{EntityOwner, EntityOwnerCustomTrait}, order::Orders, position::{Coord, CoordTrait, Position, PositionCustomTrait, Direction}, buildings::{BuildingCategory, Building, BuildingCustomImpl}, production::{Production, ProductionRateTrait}, - realm::{Realm, RealmCustomImpl} + realm::{Realm, RealmCustomImpl, RealmResourcesTrait} }; #[abi(embed_v0)] @@ -51,12 +51,11 @@ mod building_systems { // ensure that the realm produces the resource if produce_resource_type.is_some() { let resource_type: u8 = produce_resource_type.unwrap(); - let realm_produces_resource = realm.has_resource(resource_type); - assert!(realm_produces_resource, "realm does not produce specified resource"); + assert!(realm.produces_resource(resource_type), "realm does not produce specified resource"); } // check if season is over - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let mut building_coord: Coord = BuildingCustomImpl::center(); loop { @@ -76,19 +75,19 @@ mod building_systems { } fn pause_production(ref world: IWorldDispatcher, entity_id: ID, building_coord: Coord) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); BuildingCustomImpl::pause_production(world, entity_id, building_coord); } fn resume_production(ref world: IWorldDispatcher, entity_id: ID, building_coord: Coord) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); BuildingCustomImpl::resume_production(world, entity_id, building_coord); } fn destroy(ref world: IWorldDispatcher, entity_id: ID, building_coord: Coord) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); BuildingCustomImpl::destroy(world, entity_id, building_coord); } diff --git a/contracts/src/systems/combat/contracts.cairo b/contracts/src/systems/combat/contracts.cairo index 3dedb6c65..9338aa525 100644 --- a/contracts/src/systems/combat/contracts.cairo +++ b/contracts/src/systems/combat/contracts.cairo @@ -408,8 +408,6 @@ mod combat_systems { BattlePillageData }; - use eternum::models::hyperstructure::SeasonCustomImpl; - use eternum::models::movable::{Movable, MovableCustomTrait}; use eternum::models::name::{AddressName, EntityName}; @@ -420,6 +418,8 @@ mod combat_systems { use eternum::models::realm::Realm; use eternum::models::resources::{Resource, ResourceCustomImpl, ResourceCost}; use eternum::models::resources::{ResourceTransferLock, ResourceTransferLockCustomTrait}; + + use eternum::models::season::SeasonImpl; use eternum::models::stamina::{Stamina, StaminaCustomTrait}; use eternum::models::structure::{Structure, StructureCustomTrait, StructureCategory}; use eternum::models::weight::Weight; @@ -445,7 +445,7 @@ mod combat_systems { #[abi(embed_v0)] impl CombatContractImpl of ICombatContract { fn army_create(ref world: IWorldDispatcher, army_owner_id: ID, is_defensive_army: bool) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // ensure caller owns entity that will own army get!(world, army_owner_id, EntityOwner).assert_caller_owner(world); @@ -466,7 +466,7 @@ mod combat_systems { } fn army_delete(ref world: IWorldDispatcher, army_id: ID) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // ensure caller owns the entity paying let mut entity_owner: EntityOwner = get!(world, army_id, EntityOwner); @@ -493,7 +493,7 @@ mod combat_systems { fn army_buy_troops(ref world: IWorldDispatcher, army_id: ID, payer_id: ID, mut troops: Troops) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // ensure troop values are normalized troops.assert_normalized(); @@ -538,7 +538,7 @@ mod combat_systems { fn army_merge_troops(ref world: IWorldDispatcher, from_army_id: ID, to_army_id: ID, troops: Troops,) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // ensure troop values are normalized troops.assert_normalized(); @@ -600,7 +600,7 @@ mod combat_systems { fn battle_start(ref world: IWorldDispatcher, attacking_army_id: ID, defending_army_id: ID) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let mut attacking_army: Army = get!(world, attacking_army_id, Army); attacking_army.assert_not_in_battle(); @@ -750,7 +750,7 @@ mod combat_systems { } fn battle_force_start(ref world: IWorldDispatcher, battle_id: ID, defending_army_id: ID) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, defending_army_id, EntityOwner).assert_caller_owner(world); @@ -773,7 +773,7 @@ mod combat_systems { } fn battle_join(ref world: IWorldDispatcher, battle_id: ID, battle_side: BattleSide, army_id: ID) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); assert!(battle_side != BattleSide::None, "choose correct battle side"); @@ -849,7 +849,7 @@ mod combat_systems { fn battle_leave(ref world: IWorldDispatcher, battle_id: ID, army_id: ID) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // ensure caller owns army get!(world, army_id, EntityOwner).assert_caller_owner(world); @@ -917,7 +917,7 @@ mod combat_systems { fn battle_claim(ref world: IWorldDispatcher, army_id: ID, structure_id: ID) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // ensure caller owns army get!(world, army_id, EntityOwner).assert_caller_owner(world); @@ -981,7 +981,7 @@ mod combat_systems { fn battle_pillage(ref world: IWorldDispatcher, army_id: ID, structure_id: ID,) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // ensure caller owns army get!(world, army_id, EntityOwner).assert_caller_owner(world); diff --git a/contracts/src/systems/combat/tests/army_buy_test.cairo b/contracts/src/systems/combat/tests/army_buy_test.cairo index dc1344be7..a11a982aa 100644 --- a/contracts/src/systems/combat/tests/army_buy_test.cairo +++ b/contracts/src/systems/combat/tests/army_buy_test.cairo @@ -17,7 +17,8 @@ use eternum::systems::{ }; use eternum::utils::testing::{ config::{get_combat_config, set_capacity_config}, world::spawn_eternum, - systems::{deploy_realm_systems, deploy_combat_systems, deploy_system}, general::mint + systems::{deploy_realm_systems, deploy_combat_systems, deploy_system}, + general::{mint, get_default_realm_pos, spawn_realm} }; use starknet::ContractAddress; @@ -58,7 +59,6 @@ fn set_configurations(world: IWorldDispatcher) { fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID) { let world = spawn_eternum(); set_configurations(world); - let realm_system_dispatcher = deploy_realm_systems(world); let combat_system_dispatcher = deploy_combat_systems(world); let config_systems_address = deploy_system(world, config_systems::TEST_CLASS_HASH); @@ -68,7 +68,7 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID) { starknet::testing::set_contract_address(contract_address_const::()); starknet::testing::set_account_contract_address(contract_address_const::()); - let realm_id = realm_system_dispatcher.create('Mysticora', 1, 1, 1, 1, 1, 1, 1, 1, 1); + let realm_id = spawn_realm(world, 1, get_default_realm_pos().into()); mint( world, realm_id, diff --git a/contracts/src/systems/combat/tests/army_create_test.cairo b/contracts/src/systems/combat/tests/army_create_test.cairo index 13a034952..078311a18 100644 --- a/contracts/src/systems/combat/tests/army_create_test.cairo +++ b/contracts/src/systems/combat/tests/army_create_test.cairo @@ -17,7 +17,7 @@ use eternum::systems::{ }; use eternum::utils::testing::{ config::get_combat_config, world::spawn_eternum, systems::deploy_realm_systems, systems::deploy_combat_systems, - general::mint + general::{mint, get_default_realm_pos, spawn_realm} }; use starknet::ContractAddress; use starknet::contract_address_const; @@ -54,14 +54,13 @@ fn set_configurations(world: IWorldDispatcher) { fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID,) { let world = spawn_eternum(); set_configurations(world); - let realm_system_dispatcher = deploy_realm_systems(world); let combat_system_dispatcher = deploy_combat_systems(world); starknet::testing::set_block_timestamp(DEFAULT_BLOCK_TIMESTAMP); starknet::testing::set_contract_address(contract_address_const::()); starknet::testing::set_account_contract_address(contract_address_const::()); - let realm_id = realm_system_dispatcher.create('Mysticora', 1, 1, 1, 1, 1, 1, 1, 1, 1); + let realm_id = spawn_realm(world, 1, get_default_realm_pos().into()); mint( world, realm_id, diff --git a/contracts/src/systems/combat/tests/battle_leave_test.cairo b/contracts/src/systems/combat/tests/battle_leave_test.cairo index 0d914c7be..b939aceac 100644 --- a/contracts/src/systems/combat/tests/battle_leave_test.cairo +++ b/contracts/src/systems/combat/tests/battle_leave_test.cairo @@ -19,7 +19,7 @@ use eternum::systems::{ }; use eternum::utils::testing::{ config::{get_combat_config, set_capacity_config}, world::spawn_eternum, - systems::{deploy_realm_systems, deploy_system, deploy_combat_systems}, general::mint + systems::{deploy_realm_systems, deploy_system, deploy_combat_systems}, general::{mint, spawn_realm} }; use starknet::ContractAddress; use starknet::contract_address_const; @@ -97,7 +97,6 @@ fn set_configurations(world: IWorldDispatcher) { fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID, ID, ID, ID, ID) { let world = spawn_eternum(); set_configurations(world); - let realm_system_dispatcher = deploy_realm_systems(world); let combat_system_dispatcher = deploy_combat_systems(world); let config_systems_address = deploy_system(world, config_systems::TEST_CLASS_HASH); @@ -110,7 +109,7 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID, ID, ID, ID, starknet::testing::set_contract_address(contract_address_const::()); starknet::testing::set_account_contract_address(contract_address_const::()); - let player_1_realm_id = realm_system_dispatcher.create('Mysticora', 1, 1, 1, 1, 1, 1, 1, 1, 1,); + let player_1_realm_id = spawn_realm(world, 1, Coord { x: 1, y: 1 }); mint( world, player_1_realm_id, @@ -137,7 +136,7 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID, ID, ID, ID, starknet::testing::set_contract_address(contract_address_const::()); starknet::testing::set_account_contract_address(contract_address_const::()); - let player_2_realm_id = realm_system_dispatcher.create('Mysticora', 1, 1, 1, 1, 1, 1, 1, 1, 1,); + let player_2_realm_id = spawn_realm(world, 2, Coord { x: 2, y: 2 }); mint( world, player_2_realm_id, @@ -164,7 +163,7 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID, ID, ID, ID, starknet::testing::set_contract_address(contract_address_const::()); starknet::testing::set_account_contract_address(contract_address_const::()); - let player_3_realm_id = realm_system_dispatcher.create('Mysticora', 1, 1, 1, 1, 1, 1, 1, 1, 1,); + let player_3_realm_id = spawn_realm(world, 3, Coord { x: 4, y: 4 }); mint( world, player_3_realm_id, diff --git a/contracts/src/systems/combat/tests/battle_pillage_test.cairo b/contracts/src/systems/combat/tests/battle_pillage_test.cairo index fddcd3467..6f6ecc310 100644 --- a/contracts/src/systems/combat/tests/battle_pillage_test.cairo +++ b/contracts/src/systems/combat/tests/battle_pillage_test.cairo @@ -47,15 +47,13 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID) { set_battle_config(config_systems_address); set_travel_food_cost_config(config_systems_address); - let realm_system_dispatcher = deploy_realm_systems(world); let combat_system_dispatcher = deploy_combat_systems(world); starknet::testing::set_block_timestamp(DEFAULT_BLOCK_TIMESTAMP); // SPAWN ATTACKER REALM & ARMY starknet::testing::set_contract_address(contract_address_const::()); - - let attacker_realm_entity_id = spawn_realm(world, realm_system_dispatcher, Position { entity_id: 0, x: 1, y: 1 }); + let attacker_realm_entity_id = spawn_realm(world, 1, Coord { x: 1, y: 1 }); mint(world, attacker_realm_entity_id, array![(ResourceTypes::KNIGHT, STARTING_KNIGHT_COUNT),].span()); @@ -71,7 +69,7 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID) { starknet::testing::set_contract_address(contract_address_const::()); let defender_realm_entity_id = spawn_realm( - world, realm_system_dispatcher, Position { entity_id: 0, x: DEFENDER_REALM_COORD_X, y: DEFENDER_REALM_COORD_Y } + world, 2, Coord { x: DEFENDER_REALM_COORD_X, y: DEFENDER_REALM_COORD_Y } ); mint( diff --git a/contracts/src/systems/combat/tests/battle_start_test.cairo b/contracts/src/systems/combat/tests/battle_start_test.cairo index 27fc69056..9e757c34d 100644 --- a/contracts/src/systems/combat/tests/battle_start_test.cairo +++ b/contracts/src/systems/combat/tests/battle_start_test.cairo @@ -24,7 +24,7 @@ use eternum::systems::{ }; use eternum::utils::testing::{ config::{get_combat_config, set_capacity_config}, world::spawn_eternum, - systems::{deploy_realm_systems, deploy_system, deploy_combat_systems}, general::{mint, teleport} + systems::{deploy_realm_systems, deploy_system, deploy_combat_systems}, general::{mint, teleport, spawn_realm} }; use starknet::ContractAddress; use starknet::contract_address_const; @@ -97,7 +97,6 @@ fn set_configurations(world: IWorldDispatcher) { fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID, ID, ID, ID, ID) { let world = spawn_eternum(); set_configurations(world); - let realm_system_dispatcher = deploy_realm_systems(world); let combat_system_dispatcher = deploy_combat_systems(world); let config_systems_address = deploy_system(world, config_systems::TEST_CLASS_HASH); @@ -109,7 +108,7 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID, ID, ID, ID, ////////////////////////////////////////////// starknet::testing::set_contract_address(contract_address_const::()); - let player_1_realm_id = realm_system_dispatcher.create('Mysticora1', 1, 1, 1, 1, 1, 1, 1, 1, 1,); + let player_1_realm_id = spawn_realm(world, 1, Coord { x: 1, y: 1 }); mint( world, player_1_realm_id, @@ -135,7 +134,7 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID, ID, ID, ID, ////////////////////////////////////////////// starknet::testing::set_contract_address(contract_address_const::()); - let player_2_realm_id = realm_system_dispatcher.create('Mysticora2', 1, 1, 1, 1, 1, 1, 1, 1, 1,); + let player_2_realm_id = spawn_realm(world, 2, Coord { x: 2, y: 2 }); mint( world, player_2_realm_id, @@ -161,7 +160,7 @@ fn setup() -> (IWorldDispatcher, ICombatContractDispatcher, ID, ID, ID, ID, ID, ////////////////////////////////////////////// starknet::testing::set_contract_address(contract_address_const::()); - let player_3_realm_id = realm_system_dispatcher.create('Mysticora3', 1, 1, 1, 1, 1, 1, 1, 1, 1,); + let player_3_realm_id = spawn_realm(world, 3, Coord { x: 4, y: 4 }); mint( world, player_3_realm_id, diff --git a/contracts/src/systems/config/contracts.cairo b/contracts/src/systems/config/contracts.cairo index 3c52864c8..170f20d50 100644 --- a/contracts/src/systems/config/contracts.cairo +++ b/contracts/src/systems/config/contracts.cairo @@ -4,7 +4,7 @@ use eternum::models::buildings::BuildingCategory; use eternum::models::combat::{Troops}; use eternum::models::config::{ TroopConfig, MapConfig, BattleConfig, MercenariesConfig, CapacityConfig, ResourceBridgeConfig, - ResourceBridgeFeeSplitConfig, ResourceBridgeWhitelistConfig, TravelFoodCostConfig + ResourceBridgeFeeSplitConfig, ResourceBridgeWhitelistConfig, TravelFoodCostConfig, SeasonConfig }; use eternum::models::position::Coord; @@ -17,6 +17,17 @@ trait IWorldConfig { ); } + +#[dojo::interface] +trait ISeasonConfig { + fn set_season_config( + ref world: IWorldDispatcher, + season_pass_address: starknet::ContractAddress, + realms_address: starknet::ContractAddress, + lords_address: starknet::ContractAddress + ); +} + #[dojo::interface] trait IRealmFreeMintConfig { fn set_mint_config(ref world: IWorldDispatcher, config_id: ID, resources: Span<(u8, u128)>); @@ -207,13 +218,13 @@ mod config_systems { PopulationConfig, HyperstructureResourceConfig, HyperstructureConfig, StaminaConfig, StaminaRefillConfig, ResourceBridgeConfig, ResourceBridgeFeeSplitConfig, ResourceBridgeWhitelistConfig, BuildingGeneralConfig, MercenariesConfig, BattleConfig, TravelStaminaCostConfig, SettlementConfig, RealmLevelConfig, - RealmMaxLevelConfig, TravelFoodCostConfig + RealmMaxLevelConfig, TravelFoodCostConfig, SeasonConfig }; - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::position::{Position, PositionCustomTrait, Coord}; use eternum::models::production::{ProductionInput, ProductionOutput}; use eternum::models::resources::{ResourceCost, DetachedResource}; + use eternum::models::season::SeasonImpl; fn assert_caller_is_admin(world: IWorldDispatcher) { @@ -235,6 +246,24 @@ mod config_systems { set!(world, (WorldConfig { config_id: WORLD_CONFIG_ID, admin_address, realm_l2_contract })); } } + + + #[abi(embed_v0)] + impl SeasonConfigCustomImpl of super::ISeasonConfig { + fn set_season_config( + ref world: IWorldDispatcher, + season_pass_address: starknet::ContractAddress, + realms_address: starknet::ContractAddress, + lords_address: starknet::ContractAddress + ) { + assert_caller_is_admin(world); + + set!( + world, (SeasonConfig { config_id: WORLD_CONFIG_ID, season_pass_address, realms_address, lords_address }) + ) + } + } + #[abi(embed_v0)] impl RealmFreeMintConfigCustomImpl of super::IRealmFreeMintConfig { fn set_mint_config(ref world: IWorldDispatcher, config_id: ID, resources: Span<(u8, u128)>) { diff --git a/contracts/src/systems/dev/contracts.cairo b/contracts/src/systems/dev/contracts.cairo index 5ef872232..36d4626b2 100644 --- a/contracts/src/systems/dev/contracts.cairo +++ b/contracts/src/systems/dev/contracts.cairo @@ -1,3 +1,4 @@ mod bank; +mod realm; mod resource; diff --git a/contracts/src/systems/dev/contracts/realm.cairo b/contracts/src/systems/dev/contracts/realm.cairo new file mode 100644 index 000000000..3b7d2252f --- /dev/null +++ b/contracts/src/systems/dev/contracts/realm.cairo @@ -0,0 +1,62 @@ +use dojo::world::IWorldDispatcher; +use eternum::alias::ID; +use starknet::ContractAddress; + +#[starknet::interface] +trait IMint { + fn mint(ref self: TState, token_id: u256); +} + +#[starknet::interface] +trait IERC721Approval { + fn approve(ref self: TState, to: ContractAddress, token_id: u256); +} + +#[dojo::interface] +trait IDevRealmSystems { + fn create(ref world: IWorldDispatcher, realm_id: ID, frontend: ContractAddress); +} + +#[dojo::contract] +mod dev_realm_systems { + use dojo::world::Resource; + use eternum::alias::ID; + use eternum::constants::WORLD_CONFIG_ID; + use eternum::models::config::SeasonConfig; + use eternum::systems::realm::contracts::{IRealmSystemsDispatcher, IRealmSystemsDispatcherTrait}; + use starknet::ContractAddress; + use super::{IMintDispatcher, IMintDispatcherTrait, IERC721ApprovalDispatcher, IERC721ApprovalDispatcherTrait}; + + #[abi(embed_v0)] + impl DevRealmSystemsImpl of super::IDevRealmSystems { + /// A system that simplifies onboarding for test purpose + /// in production, use realms_systems.create() directly + /// + fn create(ref world: IWorldDispatcher, realm_id: ID, frontend: ContractAddress) { + // mint test realm to this contract + let season: SeasonConfig = get!(world, WORLD_CONFIG_ID, SeasonConfig); + IMintDispatcher { contract_address: season.realms_address }.mint(realm_id.into()); + + // mint season pass to this contract + IMintDispatcher { contract_address: season.season_pass_address }.mint(realm_id.into()); + + // mint free lords attached to season pass + IMintDispatcher { contract_address: season.lords_address }.mint(realm_id.into()); + + // approve realms systems contract to spend season passs + let (_realm_systems_class_hash, realm_systems_address) = + match world.resource(selector_from_tag!("eternum-realm_systems")) { + dojo::world::Resource::Contract((class_hash, contract_address)) => (class_hash, contract_address), + _ => (Zeroable::zero(), Zeroable::zero()) + }; + assert!(realm_systems_address != Zeroable::zero(), "realms systems contract not found"); + + IERC721ApprovalDispatcher { contract_address: season.season_pass_address } + .approve(realm_systems_address, realm_id.into()); + + // mint realm to the caller + let caller = starknet::get_caller_address(); + IRealmSystemsDispatcher { contract_address: realm_systems_address }.create(caller, realm_id, frontend); + } + } +} diff --git a/contracts/src/systems/guild/contracts.cairo b/contracts/src/systems/guild/contracts.cairo index 9a6e26c8f..c31a00d15 100644 --- a/contracts/src/systems/guild/contracts.cairo +++ b/contracts/src/systems/guild/contracts.cairo @@ -18,18 +18,18 @@ trait IGuildSystems { mod guild_systems { use eternum::alias::ID; use eternum::models::guild::{Guild, GuildMember, GuildMemberCustomTrait, GuildWhitelist, GuildWhitelistCustomTrait}; - - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::name::AddressName; use eternum::models::name::EntityName; use eternum::models::owner::{Owner, OwnerCustomTrait, EntityOwner, EntityOwnerCustomTrait}; + + use eternum::models::season::SeasonImpl; use starknet::ContractAddress; use starknet::contract_address::contract_address_const; #[abi(embed_v0)] impl GuildSystemsImpl of super::IGuildSystems { fn create_guild(ref world: IWorldDispatcher, is_public: bool, guild_name: felt252) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let caller_address = starknet::get_caller_address(); @@ -55,7 +55,7 @@ mod guild_systems { } fn join_guild(ref world: IWorldDispatcher, guild_entity_id: ID) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let caller_address = starknet::get_caller_address(); @@ -75,7 +75,7 @@ mod guild_systems { fn whitelist_player( ref world: IWorldDispatcher, player_address_to_whitelist: ContractAddress, guild_entity_id: ID ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, guild_entity_id, Owner).assert_caller_owner(); @@ -90,7 +90,7 @@ mod guild_systems { } fn leave_guild(ref world: IWorldDispatcher) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let caller_address = starknet::get_caller_address(); @@ -120,7 +120,7 @@ mod guild_systems { fn transfer_guild_ownership( ref world: IWorldDispatcher, guild_entity_id: ID, to_player_address: ContractAddress ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, guild_entity_id, Owner).assert_caller_owner(); @@ -135,7 +135,7 @@ mod guild_systems { } fn remove_guild_member(ref world: IWorldDispatcher, player_address_to_remove: ContractAddress) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let guild_entity_id = get!(world, starknet::get_caller_address(), GuildMember).guild_entity_id; get!(world, guild_entity_id, Owner).assert_caller_owner(); @@ -154,7 +154,7 @@ mod guild_systems { fn remove_player_from_whitelist( ref world: IWorldDispatcher, player_address_to_remove: ContractAddress, guild_entity_id: ID ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, (player_address_to_remove, guild_entity_id), GuildWhitelist).assert_is_whitelisted(); diff --git a/contracts/src/systems/hyperstructure/contracts.cairo b/contracts/src/systems/hyperstructure/contracts.cairo index 1663a30ab..41083c49c 100644 --- a/contracts/src/systems/hyperstructure/contracts.cairo +++ b/contracts/src/systems/hyperstructure/contracts.cairo @@ -30,7 +30,7 @@ trait IHyperstructureSystems { #[dojo::contract] mod hyperstructure_systems { use core::array::ArrayIndex; - use eternum::models::hyperstructure::SeasonCustomImpl; + use eternum::models::season::SeasonImpl; use eternum::{ alias::ID, constants::{ @@ -103,7 +103,7 @@ mod hyperstructure_systems { #[abi(embed_v0)] impl HyperstructureSystemsImpl of super::IHyperstructureSystems { fn create(ref world: IWorldDispatcher, creator_entity_id: ID, coord: Coord) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, creator_entity_id, Owner).assert_caller_owner(); @@ -170,7 +170,7 @@ mod hyperstructure_systems { contributor_entity_id: ID, contributions: Span<(u8, u128)> ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, contributor_entity_id, Owner).assert_caller_owner(); @@ -219,7 +219,7 @@ mod hyperstructure_systems { fn set_co_owners( ref world: IWorldDispatcher, hyperstructure_entity_id: ID, co_owners: Span<(ContractAddress, u16)> ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); assert!(co_owners.len() <= 10, "too many co-owners"); @@ -291,7 +291,7 @@ mod hyperstructure_systems { hyperstructures_contributed_to: Span, hyperstructure_shareholder_epochs: Span<(ID, u16)> ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let mut total_points: u128 = 0; let hyperstructure_config = get!(world, HYPERSTRUCTURE_CONFIG_ID, HyperstructureConfig); @@ -306,7 +306,7 @@ mod hyperstructure_systems { assert!(total_points >= hyperstructure_config.points_for_win, "Not enough points to end the game"); - SeasonCustomImpl::end_season(world); + SeasonImpl::end_season(world); emit!( world, diff --git a/contracts/src/systems/hyperstructure/tests.cairo b/contracts/src/systems/hyperstructure/tests.cairo index 10cdba61b..974fa89b0 100644 --- a/contracts/src/systems/hyperstructure/tests.cairo +++ b/contracts/src/systems/hyperstructure/tests.cairo @@ -1,9 +1,3 @@ -use core::option::OptionTrait; - -use core::traits::Into; - -use debug::PrintTrait; - use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; use eternum::alias::ID; use eternum::constants::{ResourceTypes, get_resources_without_earthenshards}; @@ -43,14 +37,13 @@ fn setup() -> (IWorldDispatcher, ID, IHyperstructureSystemsDispatcher) { set_capacity_config(config_systems_address); set_settlement_config(config_systems_address); - let realm_systems_dispatcher = deploy_realm_systems(world); let hyperstructure_systems_dispatcher = deploy_hyperstructure_systems(world); starknet::testing::set_account_contract_address(contract_address_const::<'player1'>()); starknet::testing::set_contract_address(contract_address_const::<'player1'>()); starknet::testing::set_account_contract_address(contract_address_const::<'player1'>()); - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); let hyperstructure_config_dispatcher = IHyperstructureConfigDispatcher { contract_address: config_systems_address }; diff --git a/contracts/src/systems/map/contracts.cairo b/contracts/src/systems/map/contracts.cairo index d75da1f4e..d8b7c2eec 100644 --- a/contracts/src/systems/map/contracts.cairo +++ b/contracts/src/systems/map/contracts.cairo @@ -21,8 +21,6 @@ mod map_systems { ProductionConfig, CapacityConfigCategory, MapConfig, MapConfigImpl, MercenariesConfig, TroopConfigCustomImpl, TickImpl, TickTrait, TravelStaminaCostConfig, TravelFoodCostConfig, TravelFoodCostConfigImpl }; - - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::map::Tile; use eternum::models::movable::{Movable, ArrivalTime, MovableCustomTrait, ArrivalTimeCustomTrait}; use eternum::models::owner::{Owner, EntityOwner, OwnerCustomTrait, EntityOwnerCustomTrait}; @@ -33,6 +31,8 @@ mod map_systems { use eternum::models::resources::{ Resource, ResourceCost, ResourceCustomTrait, ResourceFoodImpl, ResourceTransferLock, RESOURCE_PRECISION }; + + use eternum::models::season::SeasonImpl; use eternum::models::stamina::StaminaCustomImpl; use eternum::models::structure::{Structure, StructureCategory, StructureCount, StructureCountCustomTrait}; use eternum::systems::combat::contracts::combat_systems::{InternalCombatImpl}; @@ -79,7 +79,7 @@ mod map_systems { #[abi(embed_v0)] impl MapSystemsImpl of super::IMapSystems { fn explore(ref world: IWorldDispatcher, unit_id: ID, direction: Direction) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // check that caller owns unit get!(world, unit_id, EntityOwner).assert_caller_owner(world); diff --git a/contracts/src/systems/map/tests.cairo b/contracts/src/systems/map/tests.cairo index 169697324..b552923ae 100644 --- a/contracts/src/systems/map/tests.cairo +++ b/contracts/src/systems/map/tests.cairo @@ -203,12 +203,11 @@ fn setup() -> (IWorldDispatcher, ID, ID, IMapSystemsDispatcher, ICombatContractD starknet::testing::set_contract_address(contract_address_const::<'realm_owner'>()); starknet::testing::set_account_contract_address(contract_address_const::<'realm_owner'>()); - let realm_systems_dispatcher = deploy_realm_systems(world); let combat_systems_dispatcher = deploy_combat_systems(world); let map_systems_dispatcher = deploy_map_systems(world); let realm_position = get_default_realm_pos(); - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, realm_position); + let realm_entity_id = spawn_realm(world, 1, realm_position.into()); deploy_dev_resource_systems(world) .mint( diff --git a/contracts/src/systems/name/contracts.cairo b/contracts/src/systems/name/contracts.cairo index 85535ec95..564f7512c 100644 --- a/contracts/src/systems/name/contracts.cairo +++ b/contracts/src/systems/name/contracts.cairo @@ -9,14 +9,14 @@ trait INameSystems { #[dojo::contract] mod name_systems { use eternum::alias::ID; - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::name::{AddressName, EntityName}; use eternum::models::owner::{Owner, OwnerCustomTrait, EntityOwner, EntityOwnerCustomTrait}; + use eternum::models::season::SeasonImpl; #[abi(embed_v0)] impl NameSystemsImpl of super::INameSystems { fn set_address_name(ref world: IWorldDispatcher, name: felt252) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let caller = starknet::get_caller_address(); @@ -29,7 +29,7 @@ mod name_systems { } fn set_entity_name(ref world: IWorldDispatcher, entity_id: ID, name: felt252) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, entity_id, EntityOwner).assert_caller_owner(world); diff --git a/contracts/src/systems/realm/contracts.cairo b/contracts/src/systems/realm/contracts.cairo index 9fe008e3b..39a7bf1b6 100644 --- a/contracts/src/systems/realm/contracts.cairo +++ b/contracts/src/systems/realm/contracts.cairo @@ -1,59 +1,170 @@ use eternum::alias::ID; +use starknet::ContractAddress; + +#[starknet::interface] +trait ISeasonPass { + fn get_encoded_metadata(self: @TState, token_id: u16) -> (felt252, felt252, felt252); + fn transfer_from(self: @TState, from: ContractAddress, to: ContractAddress, token_id: u256); + fn lords_balance(self: @TState, token_id: u256) -> u256; + fn detach_lords(self: @TState, token_id: u256, amount: u256); +} + +#[starknet::interface] +trait IERC20 { + fn approve(ref self: TState, spender: ContractAddress, amount: u256) -> bool; +} + #[dojo::interface] trait IRealmSystems { fn create( - ref world: IWorldDispatcher, - realm_name: felt252, - realm_id: ID, - resource_types_packed: u128, - resource_types_count: u8, - cities: u8, - harbors: u8, - rivers: u8, - regions: u8, - wonder: u8, - order: u8, + ref world: IWorldDispatcher, owner: starknet::ContractAddress, realm_id: ID, frontend: ContractAddress ) -> ID; fn upgrade_level(ref world: IWorldDispatcher, realm_id: ID); fn mint_starting_resources(ref world: IWorldDispatcher, config_id: ID, entity_id: ID) -> ID; } - #[dojo::contract] mod realm_systems { - use core::poseidon::poseidon_hash_span; - use core::traits::Into; - use eternum::alias::ID; - use eternum::constants::REALM_ENTITY_TYPE; - use eternum::constants::{WORLD_CONFIG_ID, REALM_FREE_MINT_CONFIG_ID, MAX_REALMS_PER_ADDRESS}; + use eternum::constants::{WORLD_CONFIG_ID, REALM_FREE_MINT_CONFIG_ID}; use eternum::models::capacity::{CapacityCategory}; use eternum::models::config::{CapacityConfigCategory, RealmLevelConfig, SettlementConfig, SettlementConfigImpl}; - use eternum::models::config::{RealmFreeMintConfig, HasClaimedStartingResources}; + use eternum::models::config::{RealmFreeMintConfig, HasClaimedStartingResources, SeasonConfig}; use eternum::models::event::{SettleRealmData, EventType}; - - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::map::Tile; - use eternum::models::metadata::EntityMetadata; use eternum::models::movable::Movable; use eternum::models::name::{AddressName}; use eternum::models::owner::{Owner, EntityOwner, EntityOwnerCustomTrait}; use eternum::models::position::{Position, Coord}; use eternum::models::quantity::QuantityTracker; - use eternum::models::realm::{Realm, RealmCustomTrait, RealmCustomImpl}; + use eternum::models::realm::{ + Realm, RealmCustomTrait, RealmCustomImpl, RealmResourcesTrait, RealmResourcesImpl, + RealmNameAndAttrsDecodingTrait, RealmNameAndAttrsDecodingImpl + }; use eternum::models::resources::{DetachedResource, Resource, ResourceCustomImpl, ResourceCustomTrait}; + + use eternum::models::season::SeasonImpl; use eternum::models::structure::{Structure, StructureCategory, StructureCount, StructureCountCustomTrait}; use eternum::systems::map::contracts::map_systems::InternalMapSystemsImpl; + use eternum::systems::resources::contracts::resource_bridge_systems::{ + IResourceBridgeSystemsDispatcher, IResourceBridgeSystemsDispatcherTrait + }; use starknet::ContractAddress; + use super::{ISeasonPassDispatcher, ISeasonPassDispatcherTrait, IERC20Dispatcher, IERC20DispatcherTrait}; #[abi(embed_v0)] impl RealmSystemsImpl of super::IRealmSystems { + /// Create a new realm + /// @param owner the address that'll own the realm in the game + /// @param realm_id The ID of the realm + /// @param frontend: address to pay client fees to + /// @return The realm's entity ID + /// + /// @note This function is only callable by the season pass owner + /// and the season pass owner must approve this contract to + /// spend their season pass NFT + /// + fn create(ref world: IWorldDispatcher, owner: ContractAddress, realm_id: ID, frontend: ContractAddress) -> ID { + // check that season is still active + SeasonImpl::assert_season_is_not_over(world); + + // collect season pass + let season: SeasonConfig = get!(world, WORLD_CONFIG_ID, SeasonConfig); + InternalRealmLogicImpl::collect_season_pass(season.season_pass_address, realm_id); + + // retrieve realm metadata + let (realm_name, regions, cities, harbors, rivers, wonder, order, resources) = + InternalRealmLogicImpl::retrieve_metadata_from_season_pass( + season.season_pass_address, realm_id + ); + + // create realm + let mut coord: Coord = InternalRealmLogicImpl::get_new_location(world); + let (entity_id, realm_produced_resources_packed) = InternalRealmLogicImpl::create_realm( + world, owner, realm_id, resources, order, 0, coord + ); + + // collect lords attached to season pass and bridge into the realm + let lords_amount_attached: u256 = InternalRealmLogicImpl::collect_lords_from_season_pass( + season.season_pass_address, realm_id + ); + + // bridge attached lords into the realm + if lords_amount_attached.is_non_zero() { + InternalRealmLogicImpl::bridge_lords_into_realm( + world, season.lords_address, entity_id, lords_amount_attached, frontend + ); + } + + // emit realm settle event + emit!( + world, + (SettleRealmData { + id: world.uuid(), + event_id: EventType::SettleRealm, + entity_id, + owner_address: owner, + owner_name: get!(world, owner, AddressName).name, + realm_name: realm_name, + produced_resources: realm_produced_resources_packed, + cities, + harbors, + rivers, + regions, + wonder, + order, + x: coord.x, + y: coord.y, + timestamp: starknet::get_block_timestamp(), + }), + ); + + entity_id.into() + } + + + fn upgrade_level(ref world: IWorldDispatcher, realm_id: ID) { + // ensure caller owns the realm + get!(world, realm_id, EntityOwner).assert_caller_owner(world); + + // ensure entity is a realm + let mut realm = get!(world, realm_id, Realm); + realm.assert_is_set(); + + // ensure realm is not already at max level + assert(realm.level < realm.max_level(world), 'realm is already at max level'); + + // make payment to upgrade to next level + let next_level = realm.level + 1; + let realm_level_config = get!(world, next_level, RealmLevelConfig); + let required_resources_id = realm_level_config.required_resources_id; + let required_resource_count = realm_level_config.required_resource_count; + let mut index = 0; + loop { + if index == required_resource_count { + break; + } + + let mut required_resource = get!(world, (required_resources_id, index), DetachedResource); + + // burn resource from realm + let mut realm_resource = ResourceCustomImpl::get(world, (realm_id, required_resource.resource_type)); + realm_resource.burn(required_resource.resource_amount); + realm_resource.save(world); + index += 1; + }; + + // set new level + realm.level = next_level; + set!(world, (realm)); + } + fn mint_starting_resources(ref world: IWorldDispatcher, config_id: ID, entity_id: ID) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, (entity_id), Realm).assert_is_set(); @@ -89,146 +200,121 @@ mod realm_systems { entity_id.into() } + } - fn create( - ref world: IWorldDispatcher, - realm_name: felt252, + + #[generate_trait] + impl InternalRealmLogicImpl of InternalRealmLogicTrait { + fn create_realm( + world: IWorldDispatcher, + owner: ContractAddress, realm_id: ID, - resource_types_packed: u128, - resource_types_count: u8, - cities: u8, - harbors: u8, - rivers: u8, - regions: u8, - wonder: u8, + resources: Array, order: u8, - ) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); - - // ensure that the coord is not occupied by any other structure - let timestamp = starknet::get_block_timestamp(); - let mut found_coords = false; - let mut coord: Coord = Coord { x: 0, y: 0 }; - let mut settlement_config = get!(world, WORLD_CONFIG_ID, SettlementConfig); - while (!found_coords) { - coord = settlement_config.get_next_settlement_coord(timestamp); - let structure_count: StructureCount = get!(world, coord, StructureCount); - if structure_count.is_none() { - found_coords = true; - } - }; - // save the new config - set!(world, (settlement_config)); - + level: u8, + coord: Coord + ) -> (ID, u128) { + // create realm + let realm_produced_resources_packed = RealmResourcesImpl::pack_resource_types(resources.span()); let entity_id = world.uuid(); - let caller = starknet::get_caller_address(); - - // Ensure that caller does not have more than `MAX_REALMS_PER_ADDRESS` - - let caller_realm_quantity_arr = array![caller.into(), REALM_ENTITY_TYPE.into()]; - let caller_realm_quantity_key = poseidon_hash_span(caller_realm_quantity_arr.span()); - let mut caller_realms_quantity = get!(world, caller_realm_quantity_key, QuantityTracker); - assert(caller_realms_quantity.count < MAX_REALMS_PER_ADDRESS.into(), 'max num of realms settled'); - - caller_realms_quantity.count += 1; - set!(world, (caller_realms_quantity)); - + let now = starknet::get_block_timestamp(); set!( world, ( - Owner { entity_id: entity_id.into(), address: caller }, + Owner { entity_id: entity_id.into(), address: owner }, EntityOwner { entity_id: entity_id.into(), entity_owner_id: entity_id.into() }, - Structure { - entity_id: entity_id.into(), category: StructureCategory::Realm, created_at: timestamp, - }, + Structure { entity_id: entity_id.into(), category: StructureCategory::Realm, created_at: now, }, StructureCount { coord, count: 1 }, CapacityCategory { entity_id: entity_id.into(), category: CapacityConfigCategory::Structure }, Realm { entity_id: entity_id.into(), realm_id, - resource_types_packed, - resource_types_count, - cities, - harbors, - rivers, - regions, - wonder, + produced_resources: realm_produced_resources_packed, order, - level: 0 + level }, Position { entity_id: entity_id.into(), x: coord.x, y: coord.y, }, - EntityMetadata { entity_id: entity_id.into(), entity_type: REALM_ENTITY_TYPE, } ) ); + // explore tile where realm sits if not already explored let mut tile: Tile = get!(world, (coord.x, coord.y), Tile); - if tile.explored_at == 0 { - // set realm's position tile to explored + if tile.explored_at.is_zero() { InternalMapSystemsImpl::explore(world, entity_id.into(), coord, array![(1, 0)].span()); } - let owner_address = starknet::get_caller_address(); - emit!( - world, - (SettleRealmData { - id: world.uuid(), - event_id: EventType::SettleRealm, - entity_id, - owner_address, - owner_name: get!(world, owner_address, AddressName).name, - realm_name, - resource_types_packed, - resource_types_count, - cities, - harbors, - rivers, - regions, - wonder, - order, - x: coord.x, - y: coord.y, - timestamp, - }), - ); + (entity_id, realm_produced_resources_packed) + } - entity_id.into() + fn collect_season_pass(season_pass_address: ContractAddress, realm_id: ID) { + let caller = starknet::get_caller_address(); + let this = starknet::get_contract_address(); + let season_pass = ISeasonPassDispatcher { contract_address: season_pass_address }; + + // transfer season pass from caller to this + season_pass.transfer_from(caller, this, realm_id.into()); } + fn collect_lords_from_season_pass(season_pass_address: ContractAddress, realm_id: ID) -> u256 { + // detach lords from season pass + let season_pass = ISeasonPassDispatcher { contract_address: season_pass_address }; + let token_lords_balance: u256 = season_pass.lords_balance(realm_id.into()); + season_pass.detach_lords(realm_id.into(), token_lords_balance); + assert!(season_pass.lords_balance(realm_id.into()).is_zero(), "lords amount attached to realm should be 0"); - fn upgrade_level(ref world: IWorldDispatcher, realm_id: ID) { - // ensure caller owns the realm - get!(world, realm_id, EntityOwner).assert_caller_owner(world); + // at this point, this contract's lords balance must have increased by `token_lords_balance` + token_lords_balance + } - // ensure entity is a realm - let mut realm = get!(world, realm_id, Realm); - realm.assert_is_set(); - // ensure realm is not already at max level - assert(realm.level < realm.max_level(world), 'realm is already at max level'); + fn bridge_lords_into_realm( + world: IWorldDispatcher, + lords_address: ContractAddress, + realm_entity_id: ID, + amount: u256, + frontend: ContractAddress + ) { + // get bridge systems address + let (_bridge_systems_class_hash, bridge_systems_address) = + match world.resource(selector_from_tag!("eternum-resource_bridge_systems")) { + dojo::world::Resource::Contract((class_hash, contract_address)) => (class_hash, contract_address), + _ => (Zeroable::zero(), Zeroable::zero()) + }; - // make payment to upgrade to next level - let next_level = realm.level + 1; - let realm_level_config = get!(world, next_level, RealmLevelConfig); - let required_resources_id = realm_level_config.required_resources_id; - let required_resource_count = realm_level_config.required_resource_count; - let mut index = 0; - loop { - if index == required_resource_count { - break; - } + // approve bridge to spend lords + IERC20Dispatcher { contract_address: lords_address }.approve(bridge_systems_address, amount); - let mut required_resource = get!(world, (required_resources_id, index), DetachedResource); + // deposit lords + IResourceBridgeSystemsDispatcher { contract_address: bridge_systems_address } + .deposit_initial(lords_address, realm_entity_id, amount, frontend); + } - // burn resource from realm - let mut realm_resource = ResourceCustomImpl::get(world, (realm_id, required_resource.resource_type)); - realm_resource.burn(required_resource.resource_amount); - realm_resource.save(world); - index += 1; + + fn retrieve_metadata_from_season_pass( + season_pass_address: ContractAddress, realm_id: ID + ) -> (felt252, u8, u8, u8, u8, u8, u8, Array) { + let season_pass = ISeasonPassDispatcher { contract_address: season_pass_address }; + let (name_and_attrs, _urla, _urlb) = season_pass.get_encoded_metadata(realm_id.try_into().unwrap()); + RealmNameAndAttrsDecodingImpl::decode(name_and_attrs) + } + + fn get_new_location(world: IWorldDispatcher) -> Coord { + // ensure that the coord is not occupied by any other structure + let timestamp = starknet::get_block_timestamp(); + let mut found_coords = false; + let mut coord: Coord = Coord { x: 0, y: 0 }; + let mut settlement_config = get!(world, WORLD_CONFIG_ID, SettlementConfig); + while (!found_coords) { + coord = settlement_config.get_next_settlement_coord(timestamp); + let structure_count: StructureCount = get!(world, coord, StructureCount); + if structure_count.is_none() { + found_coords = true; + } }; + // save the new config + set!(world, (settlement_config)); - // set new level - realm.level = next_level; - set!(world, (realm)); + return coord; } } } diff --git a/contracts/src/systems/realm/tests.cairo b/contracts/src/systems/realm/tests.cairo index 187bf7577..eb787f9dd 100644 --- a/contracts/src/systems/realm/tests.cairo +++ b/contracts/src/systems/realm/tests.cairo @@ -67,35 +67,14 @@ fn setup() -> (IWorldDispatcher, IRealmSystemsDispatcher) { #[test] #[available_gas(3000000000000)] fn realm_test_realm_create() { - let (world, realm_systems_dispatcher) = setup(); + let (world, _realm_systems_dispatcher) = setup(); starknet::testing::set_block_timestamp(TIMESTAMP); let realm_id = 1; - let resource_types_packed = 1; - let resource_types_count = 1; - let cities = 6; - let harbors = 5; - let rivers = 5; - let regions = 5; - let wonder = 1; - let order = 1; - starknet::testing::set_contract_address(contract_address_const::<'caller'>()); - let realm_entity_id = realm_systems_dispatcher - .create( - 'Mysticora', - realm_id, - resource_types_packed, - resource_types_count, - cities, - harbors, - rivers, - regions, - wonder, - order, - ); + let realm_entity_id = spawn_realm(world, realm_id, get_default_realm_pos().into()); let position = get!(world, realm_entity_id, Position); @@ -121,7 +100,7 @@ fn realm_test_mint_starting_resources() { starknet::testing::set_block_timestamp(TIMESTAMP); - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); realm_systems_dispatcher.mint_starting_resources(REALM_FREE_MINT_CONFIG_ID, realm_entity_id); @@ -141,7 +120,7 @@ fn realm_test_mint_starting_resources_twice() { starknet::testing::set_block_timestamp(TIMESTAMP); - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); realm_systems_dispatcher.mint_starting_resources(REALM_FREE_MINT_CONFIG_ID, realm_entity_id); @@ -159,7 +138,7 @@ fn realm_test_mint_starting_resources_as_not_realm() { starknet::testing::set_contract_address(contract_address_const::<'caller'>()); starknet::testing::set_account_contract_address(contract_address_const::<'caller'>()); - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); let hyperstructure_entity_id = spawn_hyperstructure( world, hyperstructure_systems_dispatcher, realm_entity_id, get_default_hyperstructure_coord() @@ -174,7 +153,7 @@ fn realm_test_upgrade_level_success() { let (world, realm_systems_dispatcher) = setup(); // Spawn a realm - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); // Add required resources for upgrade let required_resources = array![(ResourceTypes::WHEAT, 100), (ResourceTypes::WOOD, 100),]; @@ -207,7 +186,7 @@ fn realm_test_upgrade_level_not_owner() { let (world, realm_systems_dispatcher) = setup(); // Spawn a realm - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); // Set a different caller starknet::testing::set_contract_address(contract_address_const::<'not_owner'>()); @@ -236,7 +215,7 @@ fn realm_test_upgrade_level_max_level() { let (world, realm_systems_dispatcher) = setup(); // Spawn a realm - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); // Set realm to max level let mut realm = get!(world, realm_entity_id, Realm); @@ -259,7 +238,7 @@ fn realm_test_upgrade_level_insufficient_resources() { let (world, realm_systems_dispatcher) = setup(); // Spawn a realm - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); // Attempt to upgrade level without adding resources realm_systems_dispatcher.upgrade_level(realm_entity_id); @@ -271,7 +250,7 @@ fn realm_test_upgrade_level_multiple_times() { let (world, realm_systems_dispatcher) = setup(); // Spawn a realm - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); // Add more than enough resources for multiple upgrades let required_resources = array![ diff --git a/contracts/src/systems/resources/contracts/resource_bridge_systems.cairo b/contracts/src/systems/resources/contracts/resource_bridge_systems.cairo index 12f13ee8f..0454b443d 100644 --- a/contracts/src/systems/resources/contracts/resource_bridge_systems.cairo +++ b/contracts/src/systems/resources/contracts/resource_bridge_systems.cairo @@ -3,6 +3,45 @@ use starknet::ContractAddress; #[dojo::interface] trait IResourceBridgeSystems { + /// Deposits tokens into the resource bridge, converting them to in-game resources. + /// + /// NOTE: this is only to be called by realms_systems and resources are deposited + /// directly into the realm + /// + /// # Arguments + /// + /// * `token` - The address of the ERC20 token being deposited + /// * `recipient_realm_id` - The ID of the realm receiving the resources + /// * `amount` - The amount of tokens to deposit + /// * `client_fee_recipient` - The address to receive the client fee + /// + /// # Configuration + /// + /// Before calling this function, ensure: + /// - The token is whitelisted in `ResourceBridgeWhitelistConfig` + /// - Deposit is not paused in `ResourceBridgeConfig` + /// - Fee percentages are set in `ResourceBridgeFeeSplitConfig` + /// + /// # Fees + /// + /// Fees are taken in the following order: + /// 1. Non-bank fees (velords, season pool, client) + /// + /// NO BANK FEES ARE TAKEN + /// + /// # Other Notes + /// + /// - The caller must approve this contract to spend the deposit amount + /// - Resources are deposited directly into realm balance + /// + fn deposit_initial( + ref world: IWorldDispatcher, + token: ContractAddress, + recipient_realm_id: ID, + amount: u256, + client_fee_recipient: ContractAddress + ); + /// Deposits tokens into the resource bridge, converting them to in-game resources. /// /// # Arguments @@ -169,6 +208,57 @@ mod resource_bridge_systems { #[abi(embed_v0)] impl ResourceBridgeImpl of super::IResourceBridgeSystems { + fn deposit_initial( + ref world: IWorldDispatcher, + token: ContractAddress, + recipient_realm_id: ID, + amount: u256, + client_fee_recipient: ContractAddress + ) { + // ensure this system can only be called by realms systems contract + let caller = get_caller_address(); + let (_realm_systems_class_hash, realm_systems_address) = + match world.resource(selector_from_tag!("eternum-realm_systems")) { + dojo::world::Resource::Contract((class_hash, contract_address)) => (class_hash, contract_address), + _ => (Zeroable::zero(), Zeroable::zero()) + }; + assert!(caller == realm_systems_address, "only realm systems can call this system"); + + // ensure transfer recipient is a realm + let recipient_structure: Structure = get!(world, recipient_realm_id, Structure); + recipient_structure.assert_is_structure(); + assert!(recipient_structure.category == StructureCategory::Realm, "recipient structure is not a realm"); + + // ensure bridge deposit is not paused + InternalBridgeImpl::assert_deposit_not_paused(world); + + // ensure token is whitelisted + let resource_bridge_token_whitelist = get!(world, token, ResourceBridgeWhitelistConfig); + InternalBridgeImpl::assert_resource_whitelisted(world, resource_bridge_token_whitelist); + + let this = get_contract_address(); + assert!( + ERC20ABIDispatcher { contract_address: token }.transfer_from(realm_systems_address, this, amount), + "Bridge: transfer failed" + ); + + // take non bank fees from deposit + let non_bank_fees = InternalBridgeImpl::send_non_bank_fees( + world, token, client_fee_recipient, amount, TxType::Deposit + ); + + let token_amount_less_non_bank_fees = amount - non_bank_fees; + let resource_amount_less_non_bank_fees = InternalBridgeImpl::token_amount_to_resource_amount( + token, token_amount_less_non_bank_fees + ); + + // transfer the resource to the recipient realm + let resource = array![(resource_bridge_token_whitelist.resource_type, resource_amount_less_non_bank_fees)] + .span(); + InternalResourceSystemsImpl::transfer(world, 0, recipient_realm_id, resource, 0, false, false); + } + + fn deposit( ref world: IWorldDispatcher, token: ContractAddress, diff --git a/contracts/src/systems/trade/contracts/trade_systems.cairo b/contracts/src/systems/trade/contracts/trade_systems.cairo index 11672b130..b77e610e6 100644 --- a/contracts/src/systems/trade/contracts/trade_systems.cairo +++ b/contracts/src/systems/trade/contracts/trade_systems.cairo @@ -37,8 +37,6 @@ mod trade_systems { use eternum::constants::{REALM_ENTITY_TYPE, WORLD_CONFIG_ID, DONKEY_ENTITY_TYPE, ResourceTypes}; use eternum::models::config::{WeightConfig, WeightConfigCustomImpl}; use eternum::models::config::{WorldConfig, SpeedConfig, CapacityConfig, CapacityConfigCustomImpl}; - - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::movable::{Movable, ArrivalTime}; use eternum::models::owner::Owner; use eternum::models::position::{Position, PositionCustomTrait, Coord, TravelTrait}; @@ -47,6 +45,8 @@ mod trade_systems { use eternum::models::resources::{DetachedResource}; use eternum::models::resources::{Resource, ResourceCustomImpl}; + + use eternum::models::season::SeasonImpl; use eternum::models::trade::{Trade, Status, TradeStatus}; use eternum::models::weight::{Weight, WeightCustomTrait}; use eternum::systems::resources::contracts::resource_systems::resource_systems::{ @@ -116,7 +116,7 @@ mod trade_systems { mut taker_gives_resources: Span<(u8, u128)>, expires_at: u64 ) -> ID { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let caller = starknet::get_caller_address(); @@ -242,7 +242,7 @@ mod trade_systems { mut maker_gives_resources: Span<(u8, u128)>, mut taker_gives_resources: Span<(u8, u128)> ) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // check that caller is taker let caller = starknet::get_caller_address(); @@ -263,7 +263,7 @@ mod trade_systems { mut taker_gives_resources: Span<(u8, u128)>, mut taker_gives_actual_amount: u128 ) { // Ensure only one resource type is being traded and input lengths match - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); assert!(taker_gives_actual_amount.is_non_zero(), "amount taker gives must be greater than 0"); assert!(maker_gives_resources.len() == 1, "only one resource type is supported for partial orders"); @@ -437,7 +437,7 @@ mod trade_systems { fn cancel_order(ref world: IWorldDispatcher, trade_id: ID, mut return_resources: Span<(u8, u128)>,) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); let (trade, trade_status) = get!(world, trade_id, (Trade, Status)); let owner = get!(world, trade.maker_id, Owner); diff --git a/contracts/src/systems/trade/tests/trade_systems_tests/accept_order.cairo b/contracts/src/systems/trade/tests/trade_systems_tests/accept_order.cairo index 9529e1e7c..8be199297 100644 --- a/contracts/src/systems/trade/tests/trade_systems_tests/accept_order.cairo +++ b/contracts/src/systems/trade/tests/trade_systems_tests/accept_order.cairo @@ -73,9 +73,8 @@ fn setup(direct_trade: bool) -> (IWorldDispatcher, ID, ID, ID, ITradeSystemsDisp let maker_position = Position { x: 100000, y: 200000, entity_id: 1 }; let taker_position = Position { x: 200000, y: 1000000, entity_id: 1 }; - let realm_systems_dispatcher = deploy_realm_systems(world); - let maker_realm_entity_id = spawn_realm(world, realm_systems_dispatcher, maker_position); - let taker_realm_entity_id = spawn_realm(world, realm_systems_dispatcher, taker_position); + let maker_realm_entity_id = spawn_realm(world, 1, maker_position.into()); + let taker_realm_entity_id = spawn_realm(world, 2, taker_position.into()); let maker_id = maker_realm_entity_id; let taker_id = taker_realm_entity_id; @@ -228,7 +227,7 @@ fn trade_test_caller_not_taker() { #[available_gas(3000000000000)] #[should_panic( expected: ( - "not enough resources, Resource (entity id: 4, resource type: DONKEY, balance: 0). deduction: 1000", + "not enough resources, Resource (entity id: 3, resource type: DONKEY, balance: 0). deduction: 1000", 'ENTRYPOINT_FAILED' ) )] diff --git a/contracts/src/systems/trade/tests/trade_systems_tests/cancel_order.cairo b/contracts/src/systems/trade/tests/trade_systems_tests/cancel_order.cairo index 7bcc4cb74..048346c1c 100644 --- a/contracts/src/systems/trade/tests/trade_systems_tests/cancel_order.cairo +++ b/contracts/src/systems/trade/tests/trade_systems_tests/cancel_order.cairo @@ -69,9 +69,8 @@ fn setup() -> (IWorldDispatcher, ID, ID, ID, ITradeSystemsDispatcher) { let maker_position = Position { x: 100000, y: 2000000, entity_id: 1 }; let taker_position = Position { x: 200000, y: 1000000, entity_id: 1 }; - let realm_systems_dispatcher = deploy_realm_systems(world); - let maker_realm_entity_id = spawn_realm(world, realm_systems_dispatcher, maker_position); - let taker_realm_entity_id = spawn_realm(world, realm_systems_dispatcher, taker_position); + let maker_realm_entity_id = spawn_realm(world, 1, maker_position.into()); + let taker_realm_entity_id = spawn_realm(world, 2, taker_position.into()); let maker_id = maker_realm_entity_id; let taker_id = taker_realm_entity_id; diff --git a/contracts/src/systems/trade/tests/trade_systems_tests/create_order.cairo b/contracts/src/systems/trade/tests/trade_systems_tests/create_order.cairo index 6d80ae970..f691d7f56 100644 --- a/contracts/src/systems/trade/tests/trade_systems_tests/create_order.cairo +++ b/contracts/src/systems/trade/tests/trade_systems_tests/create_order.cairo @@ -35,13 +35,12 @@ fn setup() -> (IWorldDispatcher, ID, ID, ITradeSystemsDispatcher) { let config_systems_address = deploy_system(world, config_systems::TEST_CLASS_HASH); let dev_resource_systems = deploy_dev_resource_systems(world); - let realm_systems_dispatcher = deploy_realm_systems(world); set_settlement_config(config_systems_address); set_capacity_config(config_systems_address); set_weight_config(config_systems_address); - let realm_entity_id = spawn_realm(world, realm_systems_dispatcher, get_default_realm_pos()); + let realm_entity_id = spawn_realm(world, 1, get_default_realm_pos().into()); let maker_id = realm_entity_id; let taker_id = 12; diff --git a/contracts/src/systems/transport/contracts/travel_systems.cairo b/contracts/src/systems/transport/contracts/travel_systems.cairo index 8cee45646..75ae8d512 100644 --- a/contracts/src/systems/transport/contracts/travel_systems.cairo +++ b/contracts/src/systems/transport/contracts/travel_systems.cairo @@ -19,8 +19,6 @@ mod travel_systems { use eternum::constants::{WORLD_CONFIG_ID, TravelTypes}; use eternum::models::combat::Army; use eternum::models::config::{MapConfigImpl, TravelStaminaCostConfig, TravelFoodCostConfigImpl}; - - use eternum::models::hyperstructure::SeasonCustomImpl; use eternum::models::map::Tile; use eternum::models::movable::{Movable, ArrivalTime}; use eternum::models::order::{Orders, OrdersCustomTrait}; @@ -28,6 +26,8 @@ mod travel_systems { use eternum::models::position::{Coord, Position, TravelTrait, CoordTrait, Direction}; use eternum::models::quantity::{Quantity,}; use eternum::models::realm::Realm; + + use eternum::models::season::SeasonImpl; use eternum::models::stamina::StaminaCustomImpl; use eternum::models::weight::Weight; @@ -65,7 +65,7 @@ mod travel_systems { /// * `destination_coord` - The coordinate to travel to /// fn travel(ref world: IWorldDispatcher, travelling_entity_id: ID, destination_coord: Coord) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); // todo@security prevent free transport units from travelling get!(world, travelling_entity_id, EntityOwner).assert_caller_owner(world); @@ -89,7 +89,7 @@ mod travel_systems { fn travel_hex(ref world: IWorldDispatcher, travelling_entity_id: ID, directions: Span) { - SeasonCustomImpl::assert_season_is_not_over(world); + SeasonImpl::assert_season_is_not_over(world); get!(world, travelling_entity_id, EntityOwner).assert_caller_owner(world); diff --git a/contracts/src/utils.cairo b/contracts/src/utils.cairo index b7e7105c2..3abf2d5f2 100644 --- a/contracts/src/utils.cairo +++ b/contracts/src/utils.cairo @@ -4,5 +4,4 @@ pub mod number; pub mod random; #[cfg(test)] pub mod testing; -pub mod unpack; pub mod vrgda; diff --git a/contracts/src/utils/testing/general.cairo b/contracts/src/utils/testing/general.cairo index ae8c91af2..424fe1fe0 100644 --- a/contracts/src/utils/testing/general.cairo +++ b/contracts/src/utils/testing/general.cairo @@ -8,27 +8,19 @@ use eternum::models::resources::{Resource, ResourceCustomImpl, ResourceCustomTra use eternum::models::{map::Tile, position::{Position, Coord, CoordTrait}, combat::Troops}; use eternum::systems::{ hyperstructure::contracts::{IHyperstructureSystemsDispatcher, IHyperstructureSystemsDispatcherTrait}, - realm::contracts::{IRealmSystemsDispatcher, IRealmSystemsDispatcherTrait}, + realm::contracts::realm_systems::InternalRealmLogicImpl, combat::contracts::{combat_systems, ICombatContractDispatcher, ICombatContractDispatcherTrait}, }; use eternum::utils::map::biomes::Biome; -fn spawn_realm(world: IWorldDispatcher, realm_systems_dispatcher: IRealmSystemsDispatcher, position: Position) -> ID { - let realm_entity_id = realm_systems_dispatcher - .create( - 'Mysticora', - 1, // realm id - 0x20309, // resource_types_packed // 2,3,9 // stone, coal, gold - 3, // resource_types_count - 5, // cities - 5, // harbors - 5, // rivers - 5, // regions - 1, // wonder - 1, // order - ); - - set!(world, Position { entity_id: realm_entity_id, x: position.x, y: position.y }); +fn spawn_realm(world: IWorldDispatcher, realm_id: ID, coord: Coord) -> ID { + let owner = starknet::get_contract_address(); + let realm_id = 1; + let produced_resources = array![]; + let order = 1; + let (realm_entity_id, _realm_produced_resources_packed) = InternalRealmLogicImpl::create_realm( + world, owner, realm_id, produced_resources, order, 0, coord.into() + ); realm_entity_id } diff --git a/contracts/src/utils/testing/world.cairo b/contracts/src/utils/testing/world.cairo index aebfee208..73b3e7492 100644 --- a/contracts/src/utils/testing/world.cairo +++ b/contracts/src/utils/testing/world.cairo @@ -22,10 +22,9 @@ use eternum::models::config::{ }; use eternum::models::guild::{guild, guild_member, guild_whitelist}; use eternum::models::hyperstructure::{ - Progress, progress, Contribution, contribution, Hyperstructure, hyperstructure, Epoch, epoch, Season, season + Progress, progress, Contribution, contribution, Hyperstructure, hyperstructure, Epoch, epoch }; use eternum::models::map::tile; -use eternum::models::metadata::{entity_metadata, EntityMetadata}; use eternum::models::metadata::{foreign_key, ForeignKey}; use eternum::models::movable::{movable, Movable, arrival_time, ArrivalTime}; use eternum::models::name::{address_name, AddressName}; @@ -44,6 +43,7 @@ use eternum::models::resources::resource_allowance; use eternum::models::resources::resource_transfer_lock; use eternum::models::resources::{resource, Resource}; use eternum::models::resources::{resource_cost, ResourceCost}; +use eternum::models::season::season; use eternum::models::stamina::stamina; use eternum::models::structure::structure; use eternum::models::structure::structure_count; @@ -103,7 +103,6 @@ fn spawn_eternum() -> IWorldDispatcher { speed_config::TEST_CLASS_HASH, capacity_config::TEST_CLASS_HASH, world_config::TEST_CLASS_HASH, - entity_metadata::TEST_CLASS_HASH, quantity_tracker::TEST_CLASS_HASH, position::TEST_CLASS_HASH, arrival_time::TEST_CLASS_HASH, diff --git a/contracts/src/utils/unpack.cairo b/contracts/src/utils/unpack.cairo deleted file mode 100644 index 5eb31abf5..000000000 --- a/contracts/src/utils/unpack.cairo +++ /dev/null @@ -1,48 +0,0 @@ -use array::ArrayTrait; - -use eternum::constants::RESOURCE_IDS_PACKED_SIZE; -use eternum::utils::math::pow; -use option::OptionTrait; -use traits::{Into, TryInto, BitAnd}; - -fn unpack_resource_types(resource_types_packed: u128, resource_types_count: u8) -> Span { - let mut resource_types = ArrayTrait::::new(); - let mut i = 0_usize; - loop { - if i == resource_types_count.into() { - break (); - } - let mask_size: u128 = (pow(2, RESOURCE_IDS_PACKED_SIZE.into()) - 1).try_into().unwrap(); - let index = i * RESOURCE_IDS_PACKED_SIZE; - let power: u128 = pow(2, index.into()).try_into().unwrap(); - let mask: u128 = mask_size * power; - - // 2. Apply mask using bitwise operation: mask AND data. - let masked: u128 = BitAnd::bitand(mask, resource_types_packed); - - // 3. Shift element right by dividing by the order of the mask. - let result: u128 = masked / power; - - resource_types.append(result.try_into().unwrap()); - - i = i + 1; - }; - - resource_types.span() -} -// #[cfg(test)] -// mod tests { -// use super::unpack_resource_types; -// use traits::BitAnd; - -// #[test] -// #[available_gas(30000000)] -// fn test_unpack_resource_types() { -// let packed_data = 515_u128; -// let resource_types: Span = unpack_resource_types(packed_data, 2); -// assert(*resource_types[0] == 3, 'resource_type should be 3'); -// assert(*resource_types[1] == 2, 'resource_type should be 2'); -// } -// } - - diff --git a/discord-bot/Secrets.toml.example b/discord-bot/Secrets.toml.example index 5ab04b409..28cdfbda8 100644 --- a/discord-bot/Secrets.toml.example +++ b/discord-bot/Secrets.toml.example @@ -2,4 +2,4 @@ DISCORD_TOKEN = "" TORII_URL = "https://api.cartridge.gg/x/eternum-40/torii" NODE_URL = "https://api.cartridge.gg/x/eternum-40/katana/" TORII_RELAY_URL = "" -WORLD_ADDRESS = "0x76ca3dfc3e96843716f882546f0db96b7da0cf988bdba284b469d0defb2f48f" \ No newline at end of file +WORLD_ADDRESS = "0x320b2713e324fe3125bbc42d85ff69cb3c0908b436fa38a35746dbc45deeb11" \ No newline at end of file diff --git a/discord-bot/src/events.rs b/discord-bot/src/events.rs index d9e01d184..12c214017 100644 --- a/discord-bot/src/events.rs +++ b/discord-bot/src/events.rs @@ -281,8 +281,7 @@ pub(crate) struct SettleRealm { pub entity_id: u32, pub owner_name: String, pub realm_name: String, - pub resource_types_packed: u128, - pub resource_types_count: u8, + pub produced_resources: u128, pub cities: u8, pub harbors: u8, pub rivers: u8, diff --git a/discord-bot/src/types.rs b/discord-bot/src/types.rs index 8a238b207..edf020583 100644 --- a/discord-bot/src/types.rs +++ b/discord-bot/src/types.rs @@ -390,17 +390,16 @@ impl EventHandler { let entity_id = self.extract_u32(&model.children[2]); let owner_name: String = self.extract_string(&model.children[3]); let realm_name: String = self.extract_string(&model.children[4]); - let resource_types_packed = self.extract_u128(&model.children[5]); - let resource_types_count = self.extract_u8(&model.children[6]); - let cities = self.extract_u8(&model.children[7]); - let harbors = self.extract_u8(&model.children[8]); - let rivers = self.extract_u8(&model.children[9]); - let regions = self.extract_u8(&model.children[10]); - let wonder = self.extract_u8(&model.children[11]); - let order = self.extract_u8(&model.children[12]); - let x = self.extract_u32(&model.children[13]); - let y = self.extract_u32(&model.children[14]); - let timestamp = self.extract_u64(&model.children[15]); + let produced_resources = self.extract_u128(&model.children[5]); + let cities = self.extract_u8(&model.children[6]); + let harbors = self.extract_u8(&model.children[7]); + let rivers = self.extract_u8(&model.children[8]); + let regions = self.extract_u8(&model.children[9]); + let wonder = self.extract_u8(&model.children[10]); + let order = self.extract_u8(&model.children[11]); + let x = self.extract_u32(&model.children[12]); + let y = self.extract_u32(&model.children[13]); + let timestamp = self.extract_u64(&model.children[14]); Some(GameEventData::SettleRealm(SettleRealm { id, @@ -408,8 +407,7 @@ impl EventHandler { entity_id, owner_name, realm_name, - resource_types_packed, - resource_types_count, + produced_resources, cities, harbors, rivers, diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 0cf1a6147..70cf6ea52 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -1,5 +1,32 @@ #!/bin/bash +# build and deploy season pass contracts +printf "\n\n" +echo "----- Building Eternum Season Pass Contract ----- " + +cd season_pass/contracts && scarb --release build +cd ../scripts/deployment && npm run deploy + +# update the .env.production file with the season pass and test realms contracts addresses +VITE_SEASON_PASS_ADDRESS=$(cat ./addresses/dev/season_pass.json | jq -r '.address') +VITE_REALMS_ADDRESS=$(cat ./addresses/dev/test_realms.json | jq -r '.address') + +# remove the old addresses if they exist +ENV_FILE=../../../client/.env.production +sed -i '' '/VITE_SEASON_PASS_ADDRESS=/d' $ENV_FILE +sed -i '' '/VITE_REALMS_ADDRESS=/d' $ENV_FILE + +# add the new addresses to the ENV file +echo "" >> $ENV_FILE +echo "VITE_SEASON_PASS_ADDRESS=$VITE_SEASON_PASS_ADDRESS" >> $ENV_FILE +echo "VITE_REALMS_ADDRESS=$VITE_REALMS_ADDRESS" >> $ENV_FILE +echo "VITE_LORDS_ADDRESS=$VITE_LORDS_ADDRESS" >> $ENV_FILE + +cd ../../../ +printf "\n\n" + + +# build eternum contracts cd contracts @@ -20,7 +47,7 @@ echo "Migrating world..." sozo --profile prod migrate apply echo "Setting up remote indexer on slot..." -slot deployments create -t epic eternum-42 torii --version v1.0.0-alpha.16 --world 0x76ca3dfc3e96843716f882546f0db96b7da0cf988bdba284b469d0defb2f48f --rpc https://api.cartridge.gg/x/eternum-42/katana --start-block 0 --index-pending true +slot deployments create -t epic eternum-42 torii --version v1.0.0-alpha.16 --world 0x320b2713e324fe3125bbc42d85ff69cb3c0908b436fa38a35746dbc45deeb11 --rpc https://api.cartridge.gg/x/eternum-42/katana --start-block 0 --index-pending true echo "Setting up config..." diff --git a/scripts/indexer.sh b/scripts/indexer.sh index 0fb3b1a2a..497b0ffa4 100755 --- a/scripts/indexer.sh +++ b/scripts/indexer.sh @@ -16,6 +16,38 @@ while [[ "$#" -gt 0 ]]; do esac done +if [[ "$setConfig" == "true" ]]; then + printf "\n\n" + echo "----- Building Eternum Season Pass Contract ----- " + printf "\n\n" + + # build and deploy season pass contract + cd season_pass/contracts && scarb --release build + cd ../scripts/deployment && npm run deploy + + # update the .env.local file with the season pass and test realms contracts addresses + VITE_SEASON_PASS_ADDRESS=$(cat ./addresses/dev/season_pass.json | jq -r '.address') + VITE_REALMS_ADDRESS=$(cat ./addresses/dev/test_realms.json | jq -r '.address') + VITE_LORDS_ADDRESS=$(cat ./addresses/dev/test_lords.json | jq -r '.address') + + # remove the old addresses if they exist + ENV_FILE=../../../client/.env.local + sed -i '' '/VITE_SEASON_PASS_ADDRESS=/d' $ENV_FILE + sed -i '' '/VITE_REALMS_ADDRESS=/d' $ENV_FILE + sed -i '' '/VITE_LORDS_ADDRESS=/d' $ENV_FILE + + # add the new addresses to the .env.local file + echo "" >> $ENV_FILE + echo "VITE_SEASON_PASS_ADDRESS=$VITE_SEASON_PASS_ADDRESS" >> $ENV_FILE + echo "VITE_REALMS_ADDRESS=$VITE_REALMS_ADDRESS" >> $ENV_FILE + echo "VITE_LORDS_ADDRESS=$VITE_LORDS_ADDRESS" >> $ENV_FILE + + cd ../../../ + printf "\n\n" +fi + + +# build and deploy world contracts cd contracts echo "----- Building World -----" @@ -35,4 +67,4 @@ fi echo "----- Started indexer ----- " rm torii.db -torii --world 0x76ca3dfc3e96843716f882546f0db96b7da0cf988bdba284b469d0defb2f48f --database torii.db --allowed-origins "*" +torii --world 0x320b2713e324fe3125bbc42d85ff69cb3c0908b436fa38a35746dbc45deeb11 --database torii.db --allowed-origins "*" diff --git a/sdk/packages/eternum/src/config/index.ts b/sdk/packages/eternum/src/config/index.ts index 92b558f16..9ed480dee 100644 --- a/sdk/packages/eternum/src/config/index.ts +++ b/sdk/packages/eternum/src/config/index.ts @@ -23,6 +23,9 @@ export class EternumConfig { async setup(account: Account, provider: EternumProvider) { const config = { account, provider, config: this.globalConfig }; await setProductionConfig(config); + await setSeasonConfig(config); + await setResourceBridgeWhitlelistConfig(config); + await setResourceBridgeFeesConfig(config); await setBuildingCategoryPopConfig(config); await setPopulationConfig(config); await setBuildingConfig(config); @@ -412,6 +415,47 @@ export const setCapacityConfig = async (config: Config) => { } }; +export const setSeasonConfig = async (config: Config) => { + const tx = await config.provider.set_season_config({ + signer: config.account, + season_pass_address: config.config.season.seasonPassAddress, + realms_address: config.config.season.realmsAddress, + lords_address: config.config.season.lordsAddress, + }); + + console.log(`Configuring season config ${tx.statusReceipt}`); +}; + +export const setResourceBridgeWhitlelistConfig = async (config: Config) => { + // allow bridging in of lords into the game + const tx = await config.provider.set_resource_bridge_whitlelist_config({ + signer: config.account, + token: config.config.season.lordsAddress, + resource_type: ResourcesIds.Lords, + }); + + console.log(`Configuring whitelist for lords for in-game asset bridge ${tx.statusReceipt}`); +}; + +export const setResourceBridgeFeesConfig = async (config: Config) => { + // allow bridging in of lords into the game + const tx = await config.provider.set_resource_bridge_fees_config({ + signer: config.account, + velords_fee_on_dpt_percent: config.config.bridge.velords_fee_on_dpt_percent, + velords_fee_on_wtdr_percent: config.config.bridge.velords_fee_on_wtdr_percent, + season_pool_fee_on_dpt_percent: config.config.bridge.season_pool_fee_on_dpt_percent, + season_pool_fee_on_wtdr_percent: config.config.bridge.season_pool_fee_on_wtdr_percent, + client_fee_on_dpt_percent: config.config.bridge.client_fee_on_dpt_percent, + client_fee_on_wtdr_percent: config.config.bridge.client_fee_on_wtdr_percent, + velords_fee_recipient: config.config.bridge.velords_fee_recipient, + season_pool_fee_recipient: config.config.bridge.season_pool_fee_recipient, + max_bank_fee_dpt_percent: config.config.bridge.max_bank_fee_dpt_percent, + max_bank_fee_wtdr_percent: config.config.bridge.max_bank_fee_wtdr_percent, + }); + + console.log(`Configuring bridge fees ${tx.statusReceipt}`); +}; + export const setSpeedConfig = async (config: Config) => { const txDonkey = await config.provider.set_speed_config({ signer: config.account, diff --git a/sdk/packages/eternum/src/constants/global.ts b/sdk/packages/eternum/src/constants/global.ts index e0fcbc9f4..63c80350f 100644 --- a/sdk/packages/eternum/src/constants/global.ts +++ b/sdk/packages/eternum/src/constants/global.ts @@ -115,6 +115,23 @@ export const SETTLEMENT_MIN_SCALING_FACTOR_SCALED = 1844674407370955161n; export const SETTLEMENT_MIN_ANGLE_INCREASE = 20; export const SETTLEMENT_MAX_ANGLE_INCREASE = 40; +// Season +export const SEASON_PASS_ADDRESS = "0x0"; // set in indexer.sh +export const REALMS_ADDRESS = "0x0"; // set in indexer.sh +export const LORDS_ADDRESS = "0x0"; // set in indexer.sh + +// Bridge Fees (using 10_000 precision) +export const VELORDS_FEE_ON_DEPOSIT = 500; // 5% +export const VELORDS_FEE_ON_WITHDRAWAL = 500; // 5% +export const SEASON_POOL_FEE_ON_DEPOSIT = 250; // 2.5% +export const SEASON_POOL_FEE_ON_WITHDRAWAL = 250; // 2.5% +export const CLIENT_FEE_ON_DEPOSIT = 250; // 2.5% +export const CLIENT_FEE_ON_WITHDRAWAL = 250; // 2.5% +export const VELORDS_FEE_RECIPIENT = "0x1a3e37c77be7de91a9177c6b57956faa6da25607e567b10a25cf64fea5e533b"; +export const SEASON_POOL_FEE_RECIPIENT = "0x1a3e37c77be7de91a9177c6b57956faa6da25607e567b10a25cf64fea5e533b"; +export const MAX_BANK_FEE_ON_DEPOSIT = 1000; // 10% +export const MAX_BANK_FEE_ON_WITHDRAWAL = 1000; // 10% + export const EternumGlobalConfig: Config = { stamina: { travelCost: STAMINA_TRAVEL_COST, @@ -227,6 +244,23 @@ export const EternumGlobalConfig: Config = { hyperstructureTimeBetweenSharesChangeSeconds: HYPERSTRUCTURE_TIME_BETWEEN_SHARES_CHANGE_S, hyperstructurePointsForWin: HYPERSTRUCTURE_POINTS_FOR_WIN, }, + season: { + seasonPassAddress: SEASON_PASS_ADDRESS, + realmsAddress: REALMS_ADDRESS, + lordsAddress: LORDS_ADDRESS, + }, + bridge: { + velords_fee_on_dpt_percent: VELORDS_FEE_ON_DEPOSIT, + velords_fee_on_wtdr_percent: VELORDS_FEE_ON_WITHDRAWAL, + season_pool_fee_on_dpt_percent: SEASON_POOL_FEE_ON_DEPOSIT, + season_pool_fee_on_wtdr_percent: SEASON_POOL_FEE_ON_WITHDRAWAL, + client_fee_on_dpt_percent: CLIENT_FEE_ON_DEPOSIT, + client_fee_on_wtdr_percent: CLIENT_FEE_ON_WITHDRAWAL, + velords_fee_recipient: BigInt(VELORDS_FEE_RECIPIENT), + season_pool_fee_recipient: BigInt(SEASON_POOL_FEE_RECIPIENT), + max_bank_fee_dpt_percent: MAX_BANK_FEE_ON_DEPOSIT, + max_bank_fee_wtdr_percent: MAX_BANK_FEE_ON_WITHDRAWAL, + }, questResources: QUEST_RESOURCES, realmUpgradeCosts: REALM_UPGRADE_COSTS, realmMaxLevel: REALM_MAX_LEVEL, diff --git a/sdk/packages/eternum/src/constants/index.ts b/sdk/packages/eternum/src/constants/index.ts index 9caa84983..caaf9e3de 100644 --- a/sdk/packages/eternum/src/constants/index.ts +++ b/sdk/packages/eternum/src/constants/index.ts @@ -12,27 +12,27 @@ export * from "./troops"; export * from "./utils"; export enum ResourcesIds { - Wood = 1, - Stone = 2, - Coal = 3, + Stone = 1, + Coal = 2, + Wood = 3, Copper = 4, - Obsidian = 5, - Silver = 6, - Ironwood = 7, - ColdIron = 8, - Gold = 9, - Hartwood = 10, - Diamonds = 11, - Sapphire = 12, + Ironwood = 5, + Obsidian = 6, + Gold = 7, + Silver = 8, + Mithral = 9, + AlchemicalSilver = 10, + ColdIron = 11, + DeepCrystal = 12, Ruby = 13, - DeepCrystal = 14, - Ignium = 15, - EtherealSilica = 16, - TrueIce = 17, - TwilightQuartz = 18, - AlchemicalSilver = 19, - Adamantine = 20, - Mithral = 21, + Diamonds = 14, + Hartwood = 15, + Ignium = 16, + TwilightQuartz = 17, + TrueIce = 18, + Adamantine = 19, + Sapphire = 20, + EtherealSilica = 21, Dragonhide = 22, AncientFragment = 29, Donkey = 249, diff --git a/sdk/packages/eternum/src/constants/orders.ts b/sdk/packages/eternum/src/constants/orders.ts index 580ef12db..38f873046 100644 --- a/sdk/packages/eternum/src/constants/orders.ts +++ b/sdk/packages/eternum/src/constants/orders.ts @@ -1,103 +1,102 @@ import { IOrder } from "../types"; export const ORDER_NAME_DICT: { [key: number]: string } = { - 1: "power", - 2: "anger", - 3: "brilliance", - 4: "detection", - 5: "enlightenment", - 6: "fox", - 7: "fury", - 8: "giants", - 9: "perfection", - 10: "reflection", - 11: "skill", - 12: "titans", - 13: "twins", + 1: "giants", + 2: "perfection", + 3: "rage", + 4: "fox", + 5: "twins", + 6: "fury", + 7: "reflection", + 8: "detection", + 9: "skill", + 10: "brilliance", + 11: "protection", + 12: "power", + 13: "titans", 14: "vitriol", - 15: "rage", - 16: "protection", - 17: "gods", + 15: "anger", + 16: "enlightenment", }; export const orders: IOrder[] = [ { orderId: 1, - orderName: "Power", - fullOrderName: "Order of Power", - color: "#F4B547", + orderName: "Giants", + fullOrderName: "Order of Giants", + color: "#EB544D", }, { orderId: 2, - orderName: "Anger", - fullOrderName: "Order of Anger", - color: "#89192D", + orderName: "Perfection", + fullOrderName: "Order of Perfection", + color: "#8E35FF", }, { orderId: 3, - orderName: "Brilliance", - fullOrderName: "Order of Brilliance", - color: "#7DFFBA", + orderName: "Rage", + fullOrderName: "Order of Rage", + color: "#C74800", }, { orderId: 4, - orderName: "Detection", - fullOrderName: "Order of Detection", - color: "#139757", + orderName: "Fox", + fullOrderName: "Order of the Fox", + color: "#D47230", }, { orderId: 5, - orderName: "Enlightenment", - fullOrderName: "Order of Enlightenment", - color: "#1380FF", + orderName: "Twins", + fullOrderName: "Order of the Twins", + color: "#0020C6", }, { orderId: 6, - orderName: "Fox", - fullOrderName: "Order of the Fox", - color: "#D47230", - }, - { - orderId: 7, orderName: "Fury", fullOrderName: "Order of Fury", color: "#82005E", }, + { + orderId: 7, + orderName: "Reflection", + fullOrderName: "Order of Reflection", + color: "#00A2AA", + }, { orderId: 8, - orderName: "Giants", - fullOrderName: "Order of Giants", - color: "#EB544D", + orderName: "Detection", + fullOrderName: "Order of Detection", + color: "#139757", }, { orderId: 9, - orderName: "Perfection", - fullOrderName: "Order of Perfection", - color: "#8E35FF", + orderName: "Skill", + fullOrderName: "Order of Skill", + color: "#706DFF", }, { orderId: 10, - orderName: "Reflection", - fullOrderName: "Order of Reflection", - color: "#00A2AA", + orderName: "Brilliance", + fullOrderName: "Order of Brilliance", + color: "#7DFFBA", }, { orderId: 11, - orderName: "Skill", - fullOrderName: "Order of Skill", - color: "#706DFF", + orderName: "Protection", + fullOrderName: "Order of Protection", + color: "#00C3A1", }, { orderId: 12, - orderName: "Titans", - fullOrderName: "Order of Titans", - color: "#EC68A8", + orderName: "Power", + fullOrderName: "Order of Power", + color: "#F4B547", }, { orderId: 13, - orderName: "Twins", - fullOrderName: "Order of the Twins", - color: "#0020C6", + orderName: "Titans", + fullOrderName: "Order of Titans", + color: "#EC68A8", }, { orderId: 14, @@ -107,21 +106,15 @@ export const orders: IOrder[] = [ }, { orderId: 15, - orderName: "Rage", - fullOrderName: "Order of Rage", - color: "#C74800", + orderName: "Anger", + fullOrderName: "Order of Anger", + color: "#89192D", }, { orderId: 16, - orderName: "Protection", - fullOrderName: "Order of Protection", - color: "#00C3A1", - }, - { - orderId: 17, - orderName: "Gods", - fullOrderName: "Order of the Gods", - color: "#94a3b8", + orderName: "Enlightenment", + fullOrderName: "Order of Enlightenment", + color: "#1380FF", }, ]; diff --git a/sdk/packages/eternum/src/constants/resources.ts b/sdk/packages/eternum/src/constants/resources.ts index b1d2c34a0..3a6f1df94 100644 --- a/sdk/packages/eternum/src/constants/resources.ts +++ b/sdk/packages/eternum/src/constants/resources.ts @@ -2,20 +2,11 @@ import { ResourcesIds } from "."; import { ResourceInputs, ResourceOutputs, Resources } from "../types"; export const resources: Array = [ - { - trait: "Wood", - value: 5015, - colour: "#78350f", - id: 1, - description: "Wood is the backbone of civilization. Fire, industry, and shelter spawned from its sinew and sap.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/1.png?raw=true", - ticker: "$WOOD", - }, { trait: "Stone", value: 3941, colour: "#e0e0e0", - id: 2, + id: 1, description: "Stone masonry is a culture bending the bones of the earth itself to their own purpose.", img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/2.png?raw=true", ticker: "$STONE", @@ -24,12 +15,21 @@ export const resources: Array = [ trait: "Coal", value: 3833, colour: "#757575", - id: 3, + id: 2, description: "Coal is the only answer when fire is not enough to stave off the gnawing, winter cold or the ravenous demands of iron forges.", img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/3.png?raw=true", ticker: "$COAL", }, + { + trait: "Wood", + value: 5015, + colour: "#78350f", + id: 3, + description: "Wood is the backbone of civilization. Fire, industry, and shelter spawned from its sinew and sap.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/1.png?raw=true", + ticker: "$WOOD", + }, { trait: "Copper", value: 2643, @@ -40,84 +40,83 @@ export const resources: Array = [ img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/4.png?raw=true", ticker: "$COPPER", }, + { + trait: "Ironwood", + value: 1179, + colour: "#b91c1c", + id: 5, + description: + "Metallic minerals drawn from the ironwood's deep delving roots are the source of its legendary hardness and appearance.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/7.png?raw=true", + ticker: "$IRNWD", + }, { trait: "Obsidian", value: 2216, colour: "#000000", - id: 5, + id: 6, description: "Hard and brittle, obsidian can be honed to a razors edge nanometers wide, parting armor on an atomic level. The preferred material of assassins and cheap jewelers.", img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/5.png?raw=true", ticker: "$OBS", }, + { + trait: "Gold", + value: 914, + colour: "#fcd34d", + id: 7, + description: "Ripped from its million-year geological womb within the earth to be hoarded in mortal coffers.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/9.png?raw=true", + ticker: "$GOLD", + }, { trait: "Silver", value: 1741, colour: "#eeeeee", - id: 6, + id: 8, description: "The luster and rarity of silver draws out the basest instinct of laymen and nobility alike. Greed.", img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/6.png?raw=true", ticker: "$SILVER", }, - { - trait: "Ironwood", - value: 1179, - colour: "#b91c1c", - id: 7, + trait: "Mithral", + value: 37, + colour: "#60a5fa", + id: 9, description: - "Metallic minerals drawn from the ironwood's deep delving roots are the source of its legendary hardness and appearance.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/7.png?raw=true", - ticker: "$IRNWD", + "This otherworldly metal has the strength of adamantine but is lighter than air. The pieces are held in place by strange gravitational core. Those who spend much time with it slowly succumb to neurotic delusions of a rapturous, divine apocalypse.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/21.png?raw=true", + ticker: "$MITHRL", + }, + { + trait: "Alchemical Silver", + value: 93, + colour: "#bdbdbd", + id: 10, + description: + "Alchemical Silver is found pooled beneath battlegrounds from a forgotten, lost era. It can retain an almost unlimited amount of potential energy, making it the perfect catalyst for those delving into the mysteries of the universe.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/19.png?raw=true", + ticker: "$ALCHMY", }, { trait: "Cold Iron", value: 957, colour: "#fca5a5", - id: 8, + id: 11, description: "Something has infected this metallic ore with a cruel chill and an extraordinary thirst for the warmth of living things.", img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/8.png?raw=true", ticker: "$CLDIRN", }, { - trait: "Gold", - value: 914, - colour: "#fcd34d", - id: 9, - description: "Ripped from its million-year geological womb within the earth to be hoarded in mortal coffers.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/9.png?raw=true", - ticker: "$GOLD", - }, - { - trait: "Hartwood", - value: 594, - colour: "#fca5a5", - id: 10, - description: - "Revered by the Orders of Cunning, hartwood is only cut in dire circumstance. It bleeds like any mortal and some claim to hear voices from its sap long after being tapped from the trunk.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/10.png?raw=true", - ticker: "$HRTWD", - }, - { - trait: "Diamonds", - value: 300, - colour: "#ccbcfb", - id: 11, - description: - "Diamonds carry the hardness of obsidian, the strength of cold iron, and the preciousness of gold. Blood is easily spilled in its name.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/11.png?raw=true", - ticker: "$DMND", - }, - { - trait: "Sapphire", - value: 247, - colour: "#3b82f6", + trait: "Deep Crystal", + value: 239, + colour: "#93c5fd", id: 12, description: - "Sapphires are given birth from titanic forces that crush and grind for thousands of years in a hellscape of heat and pressure. The result is a gemstone accustomed to both pain and beauty.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/12.png?raw=true", - ticker: "$SPHR", + "Deep crystal was imprisoned from the mortal world by a timeless geode, the source of these formations have confounded scholars for centuries. Strange vibrations can be felt when held.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/14.png?raw=true", + ticker: "$CRYSTL", }, { trait: "Ruby", @@ -130,84 +129,84 @@ export const resources: Array = [ ticker: "$RUBY", }, { - trait: "Deep Crystal", - value: 239, - colour: "#93c5fd", + trait: "Diamonds", + value: 300, + colour: "#ccbcfb", id: 14, description: - "Deep crystal was imprisoned from the mortal world by a timeless geode, the source of these formations have confounded scholars for centuries. Strange vibrations can be felt when held.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/14.png?raw=true", - ticker: "$CRYSTL", + "Diamonds carry the hardness of obsidian, the strength of cold iron, and the preciousness of gold. Blood is easily spilled in its name.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/11.png?raw=true", + ticker: "$DMND", + }, + { + trait: "Hartwood", + value: 594, + colour: "#fca5a5", + id: 15, + description: + "Revered by the Orders of Cunning, hartwood is only cut in dire circumstance. It bleeds like any mortal and some claim to hear voices from its sap long after being tapped from the trunk.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/10.png?raw=true", + ticker: "$HRTWD", }, { trait: "Ignium", value: 172, colour: "#ef4444", - id: 15, + id: 16, description: "Some horrible power has irrevocably scarred this ignium stone with an infernal radiation that evaporates water and skin alike.", img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/15.png?raw=true", ticker: "$IGNIUM", }, - { - trait: "Ethereal Silica", - value: 162, - colour: "#10b981", - id: 16, - description: - "Ethereal silica is a glass that funnels and bends light in ways that deviate from known physics. Those exposed for long periods of time experience an all- consuming lethargic bliss.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/16.png?raw=true", - ticker: "$SILICA", - }, - { - trait: "True Ice", - value: 139, - colour: "#ffffff", - id: 17, - description: - "True ice does not melt, it is carved like living stone from frozen abyssal caverns far beneath the earth. Many a careless mason has lost their life when placing this near Ignium.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/17.png?raw=true", - ticker: "$TRUICE", - }, { trait: "Twilight Quartz", value: 111, colour: "#6d28d9", - id: 18, + id: 17, description: "Fortunately, this gemstone grows deep within the earth, far away from the soft flesh of mortal kind. Its elegance hides a tendency to rapidly engulf organic matter it encounters in a matter of hours.", img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/18.png?raw=true", ticker: "$QUARTZ", }, { - trait: "Alchemical Silver", - value: 93, - colour: "#bdbdbd", - id: 19, + trait: "True Ice", + value: 139, + colour: "#ffffff", + id: 18, description: - "Alchemical Silver is found pooled beneath battlegrounds from a forgotten, lost era. It can retain an almost unlimited amount of potential energy, making it the perfect catalyst for those delving into the mysteries of the universe.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/19.png?raw=true", - ticker: "$ALCHMY", + "True ice does not melt, it is carved like living stone from frozen abyssal caverns far beneath the earth. Many a careless mason has lost their life when placing this near Ignium.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/17.png?raw=true", + ticker: "$TRUICE", }, { trait: "Adamantine", value: 55, colour: "#1e3a8a", - id: 20, + id: 19, description: "Adamantine forms around ontological anomalies like the immune response of a planetary entity. It contains the supernatural strength to contain such terrors from spreading. Woe to those who shortsightedly take it from its original purpose.", img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/20.png?raw=true", ticker: "$ADMT", }, { - trait: "Mithral", - value: 37, - colour: "#60a5fa", + trait: "Sapphire", + value: 247, + colour: "#3b82f6", + id: 20, + description: + "Sapphires are given birth from titanic forces that crush and grind for thousands of years in a hellscape of heat and pressure. The result is a gemstone accustomed to both pain and beauty.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/12.png?raw=true", + ticker: "$SPHR", + }, + { + trait: "Ethereal Silica", + value: 162, + colour: "#10b981", id: 21, description: - "This otherworldly metal has the strength of adamantine but is lighter than air. The pieces are held in place by strange gravitational core. Those who spend much time with it slowly succumb to neurotic delusions of a rapturous, divine apocalypse.", - img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/21.png?raw=true", - ticker: "$MITHRL", + "Ethereal silica is a glass that funnels and bends light in ways that deviate from known physics. Those exposed for long periods of time experience an all- consuming lethargic bliss.", + img: "https://github.com/BibliothecaDAO/eternum/blob/main/client/public/images/resources/16.png?raw=true", + ticker: "$SILICA", }, { trait: "Dragonhide", diff --git a/sdk/packages/eternum/src/provider/index.ts b/sdk/packages/eternum/src/provider/index.ts index afa796980..4d9622c4a 100644 --- a/sdk/packages/eternum/src/provider/index.ts +++ b/sdk/packages/eternum/src/provider/index.ts @@ -168,38 +168,15 @@ export class EternumProvider extends EnhancedDojoProvider { } public async create_realm(props: SystemProps.CreateRealmProps) { - const { - realm_name, - realm_id, - resource_types_packed, - resource_types_count, - cities, - harbors, - rivers, - regions, - wonder, - order, - signer, - } = props; + const { realm_id, signer } = props; const tx = await this.execute( signer, [ { - contractAddress: getContractByName(this.manifest, `${NAMESPACE}-realm_systems`), + contractAddress: getContractByName(this.manifest, `${NAMESPACE}-dev_realm_systems`), entrypoint: "create", - calldata: [ - realm_name, - realm_id, - resource_types_packed, - resource_types_count, - cities, - harbors, - rivers, - regions, - wonder, - order, - ], + calldata: [realm_id, "0x1a3e37c77be7de91a9177c6b57956faa6da25607e567b10a25cf64fea5e533b"], }, ], NAMESPACE, @@ -218,41 +195,16 @@ export class EternumProvider extends EnhancedDojoProvider { } create_multiple_realms = async (props: SystemProps.CreateMultipleRealmsProps) => { - let { realms, signer } = props; - - let calldata = realms.flatMap((realm) => { - const { - realm_name, - realm_id, - resource_types_packed, - resource_types_count, - cities, - harbors, - rivers, - regions, - wonder, - order, - } = realm; + let { realm_ids, signer } = props; + let calldata = realm_ids.flatMap((realm_id) => { let calldata = [ { - contractAddress: getContractByName(this.manifest, `${NAMESPACE}-realm_systems`), + contractAddress: getContractByName(this.manifest, `${NAMESPACE}-dev_realm_systems`), entrypoint: "create", - calldata: [ - realm_name, - realm_id, - resource_types_packed, - resource_types_count, - cities, - harbors, - rivers, - regions, - wonder, - order, - ], + calldata: [realm_id, "0x1a3e37c77be7de91a9177c6b57956faa6da25607e567b10a25cf64fea5e533b"], }, ]; - return calldata; }); @@ -782,7 +734,59 @@ export class EternumProvider extends EnhancedDojoProvider { ], }); } + public async set_season_config(props: SystemProps.SetSeasonConfigProps) { + const { season_pass_address, realms_address, lords_address, signer } = props; + return await this.executeAndCheckTransaction(signer, { + contractAddress: getContractByName(this.manifest, `${NAMESPACE}-config_systems`), + entrypoint: "set_season_config", + calldata: [season_pass_address, realms_address, lords_address], + }); + } + + public async set_resource_bridge_whitlelist_config(props: SystemProps.SetResourceBridgeWhitelistConfigProps) { + const { token, resource_type, signer } = props; + + return await this.executeAndCheckTransaction(signer, { + contractAddress: getContractByName(this.manifest, `${NAMESPACE}-config_systems`), + entrypoint: "set_resource_bridge_whitelist_config", + calldata: [token, resource_type], + }); + } + + public async set_resource_bridge_fees_config(props: SystemProps.SetResourceBridgeFeesConfigProps) { + const { + velords_fee_on_dpt_percent, + velords_fee_on_wtdr_percent, + season_pool_fee_on_dpt_percent, + season_pool_fee_on_wtdr_percent, + client_fee_on_dpt_percent, + client_fee_on_wtdr_percent, + velords_fee_recipient, + season_pool_fee_recipient, + max_bank_fee_dpt_percent, + max_bank_fee_wtdr_percent, + signer, + } = props; + + return await this.executeAndCheckTransaction(signer, { + contractAddress: getContractByName(this.manifest, `${NAMESPACE}-config_systems`), + entrypoint: "set_resource_bridge_fee_split_config", + calldata: [ + 0, // config id + velords_fee_on_dpt_percent, + velords_fee_on_wtdr_percent, + season_pool_fee_on_dpt_percent, + season_pool_fee_on_wtdr_percent, + client_fee_on_dpt_percent, + client_fee_on_wtdr_percent, + velords_fee_recipient, + season_pool_fee_recipient, + max_bank_fee_dpt_percent, + max_bank_fee_wtdr_percent, + ], + }); + } public async set_capacity_config(props: SystemProps.SetCapacityConfigProps) { const { category, weight_gram, signer } = props; diff --git a/sdk/packages/eternum/src/types/common.ts b/sdk/packages/eternum/src/types/common.ts index 9fa297e8f..cad569348 100644 --- a/sdk/packages/eternum/src/types/common.ts +++ b/sdk/packages/eternum/src/types/common.ts @@ -349,7 +349,23 @@ export interface Config { min_angle_increase: number; max_angle_increase: number; }; - + season: { + seasonPassAddress: string; + realmsAddress: string; + lordsAddress: string; + }; + bridge: { + velords_fee_on_dpt_percent: number; + velords_fee_on_wtdr_percent: number; + season_pool_fee_on_dpt_percent: number; + season_pool_fee_on_wtdr_percent: number; + client_fee_on_dpt_percent: number; + client_fee_on_wtdr_percent: number; + velords_fee_recipient: ContractAddress; + season_pool_fee_recipient: ContractAddress; + max_bank_fee_dpt_percent: number; + max_bank_fee_wtdr_percent: number; + }; buildings: { buildingCapacity: Partial<{ [key in BuildingType]: number }>; buildingPopulation: Partial<{ [key in BuildingType]: number }>; diff --git a/sdk/packages/eternum/src/types/provider.ts b/sdk/packages/eternum/src/types/provider.ts index c631d3b95..21bdf41de 100644 --- a/sdk/packages/eternum/src/types/provider.ts +++ b/sdk/packages/eternum/src/types/provider.ts @@ -135,24 +135,14 @@ export interface MintResourcesAndClaimProps extends SystemSigner { resources: num.BigNumberish[]; } -interface Realm { - realm_name: string; - realm_id: num.BigNumberish; - resource_types_packed: num.BigNumberish; - resource_types_count: num.BigNumberish; - cities: num.BigNumberish; - harbors: num.BigNumberish; - rivers: num.BigNumberish; - regions: num.BigNumberish; - wonder: num.BigNumberish; - order: num.BigNumberish; +export interface CreateMultipleRealmsProps extends SystemSigner { + realm_ids: num.BigNumberish[]; } -export interface CreateMultipleRealmsProps extends SystemSigner { - realms: Realm[]; +export interface CreateRealmProps extends SystemSigner { + realm_id: num.BigNumberish; } -export interface CreateRealmProps extends Realm, SystemSigner {} export interface UpgradeRealmProps extends SystemSigner { realm_entity_id: num.BigNumberish; } @@ -496,6 +486,30 @@ export interface SetSpeedConfigProps extends SystemSigner { sec_per_km: num.BigNumberish; } +export interface SetSeasonConfigProps extends SystemSigner { + season_pass_address: num.BigNumberish; + realms_address: num.BigNumberish; + lords_address: num.BigNumberish; +} + +export interface SetResourceBridgeWhitelistConfigProps extends SystemSigner { + token: num.BigNumberish; + resource_type: num.BigNumberish; +} + +export interface SetResourceBridgeFeesConfigProps extends SystemSigner { + velords_fee_on_dpt_percent: num.BigNumberish; + velords_fee_on_wtdr_percent: num.BigNumberish; + season_pool_fee_on_dpt_percent: num.BigNumberish; + season_pool_fee_on_wtdr_percent: num.BigNumberish; + client_fee_on_dpt_percent: num.BigNumberish; + client_fee_on_wtdr_percent: num.BigNumberish; + velords_fee_recipient: num.BigNumberish; + season_pool_fee_recipient: num.BigNumberish; + max_bank_fee_dpt_percent: num.BigNumberish; + max_bank_fee_wtdr_percent: num.BigNumberish; +} + export interface SetHyperstructureConfig extends SystemSigner { resources_for_completion: { resource: number; amount: number }[]; time_between_shares_change: num.BigNumberish; diff --git a/season_pass/contracts/.tool-versions b/season_pass/contracts/.tool-versions new file mode 100644 index 000000000..8b889c207 --- /dev/null +++ b/season_pass/contracts/.tool-versions @@ -0,0 +1,2 @@ +scarb 2.8.2 +starknet-foundry 0.31.0 \ No newline at end of file diff --git a/season_pass/contracts/Scarb.lock b/season_pass/contracts/Scarb.lock new file mode 100644 index 000000000..46df43615 --- /dev/null +++ b/season_pass/contracts/Scarb.lock @@ -0,0 +1,162 @@ +# Code generated by scarb DO NOT EDIT. +version = 1 + +[[package]] +name = "alexandria_bytes" +version = "0.1.0" +source = "git+https://github.com/keep-starknet-strange/alexandria.git?rev=e1b080577aaa6889116fc8be5dde72b2fd21e397#e1b080577aaa6889116fc8be5dde72b2fd21e397" +dependencies = [ + "alexandria_data_structures", + "alexandria_math", +] + +[[package]] +name = "alexandria_data_structures" +version = "0.2.0" +source = "git+https://github.com/keep-starknet-strange/alexandria.git?rev=e1b080577aaa6889116fc8be5dde72b2fd21e397#e1b080577aaa6889116fc8be5dde72b2fd21e397" +dependencies = [ + "alexandria_encoding", +] + +[[package]] +name = "alexandria_encoding" +version = "0.1.0" +source = "git+https://github.com/keep-starknet-strange/alexandria.git?rev=e1b080577aaa6889116fc8be5dde72b2fd21e397#e1b080577aaa6889116fc8be5dde72b2fd21e397" +dependencies = [ + "alexandria_bytes", + "alexandria_math", + "alexandria_numeric", +] + +[[package]] +name = "alexandria_math" +version = "0.2.0" +source = "git+https://github.com/keep-starknet-strange/alexandria.git?rev=e1b080577aaa6889116fc8be5dde72b2fd21e397#e1b080577aaa6889116fc8be5dde72b2fd21e397" +dependencies = [ + "alexandria_data_structures", +] + +[[package]] +name = "alexandria_numeric" +version = "0.1.0" +source = "git+https://github.com/keep-starknet-strange/alexandria.git?rev=e1b080577aaa6889116fc8be5dde72b2fd21e397#e1b080577aaa6889116fc8be5dde72b2fd21e397" +dependencies = [ + "alexandria_math", + "alexandria_searching", +] + +[[package]] +name = "alexandria_searching" +version = "0.1.0" +source = "git+https://github.com/keep-starknet-strange/alexandria.git?rev=e1b080577aaa6889116fc8be5dde72b2fd21e397#e1b080577aaa6889116fc8be5dde72b2fd21e397" +dependencies = [ + "alexandria_data_structures", +] + +[[package]] +name = "esp" +version = "1.0.0" +dependencies = [ + "alexandria_math", + "openzeppelin", + "snforge_std", +] + +[[package]] +name = "openzeppelin" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" +dependencies = [ + "openzeppelin_access", + "openzeppelin_account", + "openzeppelin_governance", + "openzeppelin_introspection", + "openzeppelin_presets", + "openzeppelin_security", + "openzeppelin_token", + "openzeppelin_upgrades", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_access" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" +dependencies = [ + "openzeppelin_introspection", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_account" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" +dependencies = [ + "openzeppelin_introspection", + "openzeppelin_token", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_governance" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" +dependencies = [ + "openzeppelin_access", + "openzeppelin_introspection", +] + +[[package]] +name = "openzeppelin_introspection" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" + +[[package]] +name = "openzeppelin_presets" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" +dependencies = [ + "openzeppelin_access", + "openzeppelin_account", + "openzeppelin_introspection", + "openzeppelin_token", + "openzeppelin_upgrades", +] + +[[package]] +name = "openzeppelin_security" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" + +[[package]] +name = "openzeppelin_token" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" +dependencies = [ + "openzeppelin_account", + "openzeppelin_governance", + "openzeppelin_introspection", +] + +[[package]] +name = "openzeppelin_upgrades" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" + +[[package]] +name = "openzeppelin_utils" +version = "0.15.0" +source = "git+https://github.com/openzeppelin/cairo-contracts?tag=v0.15.0#f57642960f1c8cffafefb88bfff418eca8510634" + +[[package]] +name = "snforge_scarb_plugin" +version = "0.31.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.31.0#72ea785ca354e9e506de3e5d687da9fb2c1b3c67" + +[[package]] +name = "snforge_std" +version = "0.31.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.31.0#72ea785ca354e9e506de3e5d687da9fb2c1b3c67" +dependencies = [ + "snforge_scarb_plugin", +] diff --git a/season_pass/contracts/Scarb.toml b/season_pass/contracts/Scarb.toml new file mode 100755 index 000000000..ae037441f --- /dev/null +++ b/season_pass/contracts/Scarb.toml @@ -0,0 +1,21 @@ +[package] +name = "esp" +version = "1.0.0" + +[cairo] +sierra-replace-ids = true + +[dependencies] +alexandria_math = { git = "https://github.com/keep-starknet-strange/alexandria.git", rev = "e1b080577aaa6889116fc8be5dde72b2fd21e397" } +openzeppelin = { git = "https://github.com/openzeppelin/cairo-contracts", tag = "v0.15.0"} + +[dev-dependencies] +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.31.0" } + +[[target.starknet-contract]] +sierra = true +casm = true + +[tool.fmt] +sort-module-level-items = true +max-line-length = 120 \ No newline at end of file diff --git a/season_pass/contracts/src/contract.cairo b/season_pass/contracts/src/contract.cairo new file mode 100644 index 000000000..68f4a3e71 --- /dev/null +++ b/season_pass/contracts/src/contract.cairo @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: MIT +// Compatible with OpenZeppelin Contracts for Cairo ^0.17.0 + +// Eternum Season Pass +#[starknet::interface] +trait IRealmMetadataEncoded { + fn get_encoded_metadata(self: @TState, token_id: u16) -> (felt252, felt252, felt252); +} + +#[starknet::interface] +trait ISeasonPass { + fn mint(ref self: TState, token_id: u256); + fn attach_lords(ref self: TState, token_id: u256, amount: u256); + fn detach_lords(ref self: TState, token_id: u256, amount: u256); + fn lords_balance(self: @TState, token_id: u256) -> u256; +} + + +#[starknet::contract] +mod EternumSeasonPass { + use debug::PrintTrait; + use openzeppelin::access::ownable::OwnableComponent; + use openzeppelin::introspection::src5::SRC5Component; + use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; + use openzeppelin::token::erc721::ERC721Component; + use openzeppelin::token::erc721::ERC721HooksEmptyImpl; + use openzeppelin::token::erc721::interface::{ + IERC721Metadata, IERC721MetadataDispatcher, IERC721MetadataDispatcherTrait, IERC721Dispatcher, + IERC721DispatcherTrait, IERC721MetadataCamelOnly, + }; + use openzeppelin::upgrades::UpgradeableComponent; + use openzeppelin::upgrades::interface::IUpgradeable; + + use starknet::ClassHash; + use starknet::ContractAddress; + use super::{IRealmMetadataEncoded, IRealmMetadataEncodedDispatcher, IRealmMetadataEncodedDispatcherTrait}; + component!(path: ERC721Component, storage: erc721, event: ERC721Event); + component!(path: SRC5Component, storage: src5, event: SRC5Event); + component!(path: OwnableComponent, storage: ownable, event: OwnableEvent); + component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); + + #[abi(embed_v0)] + impl ERC721Impl = ERC721Component::ERC721Impl; + #[abi(embed_v0)] + impl OwnableImpl = OwnableComponent::OwnableImpl; + + impl ERC721InternalImpl = ERC721Component::InternalImpl; + impl OwnableInternalImpl = OwnableComponent::InternalImpl; + impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl; + + #[storage] + struct Storage { + realms: IERC721Dispatcher, + lords: IERC20Dispatcher, + lords_balance: LegacyMap, + #[substorage(v0)] + erc721: ERC721Component::Storage, + #[substorage(v0)] + src5: SRC5Component::Storage, + #[substorage(v0)] + ownable: OwnableComponent::Storage, + #[substorage(v0)] + upgradeable: UpgradeableComponent::Storage, + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + #[flat] + ERC721Event: ERC721Component::Event, + #[flat] + SRC5Event: SRC5Component::Event, + #[flat] + OwnableEvent: OwnableComponent::Event, + #[flat] + UpgradeableEvent: UpgradeableComponent::Event, + } + + #[constructor] + fn constructor( + ref self: ContractState, + owner: ContractAddress, + realms_contract_address: ContractAddress, + lords_contract_address: ContractAddress + ) { + self.erc721.initializer("Eternum Season 0 Pass", "ES0P", ""); + self.ownable.initializer(owner); + self.realms.write(IERC721Dispatcher { contract_address: realms_contract_address }); + self.lords.write(IERC20Dispatcher { contract_address: lords_contract_address }); + } + + #[abi(embed_v0)] + impl UpgradeableImpl of IUpgradeable { + fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { + self.ownable.assert_only_owner(); + self.upgradeable.upgrade(new_class_hash); + } + } + + #[abi(embed_v0)] + impl ERC721Metadata of IERC721Metadata { + /// Returns the NFT name. + fn name(self: @ContractState) -> ByteArray { + self.erc721.ERC721_name.read() + } + + /// Returns the NFT symbol. + fn symbol(self: @ContractState) -> ByteArray { + self.erc721.ERC721_symbol.read() + } + + /// Returns the Uniform Resource Identifier (URI) for the `token_id` token. + /// If the URI is not set, the return value will be an empty ByteArray. + /// + /// Requirements: + /// + /// - `token_id` exists. + fn token_uri(self: @ContractState, token_id: u256) -> ByteArray { + IERC721MetadataDispatcher { contract_address: self.realms.read().contract_address }.token_uri(token_id) + } + } + + + #[abi(embed_v0)] + impl ERC721MetadataCamelOnly of IERC721MetadataCamelOnly { + fn tokenURI(self: @ContractState, tokenId: u256) -> ByteArray { + ERC721Metadata::token_uri(self, tokenId) + } + } + + #[abi(embed_v0)] + impl RealmMetadataEncodedImpl of IRealmMetadataEncoded { + fn get_encoded_metadata(self: @ContractState, token_id: u16) -> (felt252, felt252, felt252) { + IRealmMetadataEncodedDispatcher { contract_address: self.realms.read().contract_address } + .get_encoded_metadata(token_id) + } + } + + #[abi(embed_v0)] + impl SeasonPassImpl of super::ISeasonPass { + fn mint(ref self: ContractState, token_id: u256) { + // ensure only caller is the token owner + let caller = starknet::get_caller_address(); + let current_realm_owner = self.realms.read().owner_of(token_id); + assert!(current_realm_owner == caller, "ESP: Only realm owner can mint season pass"); + + // mint season pass + self.erc721.mint(caller, token_id); + } + + fn attach_lords(ref self: ContractState, token_id: u256, amount: u256) { + // ensure season pass exists + assert!(self.erc721.owner_of(token_id) != Zeroable::zero(), "ESP: Season pass does not exist"); + + // receive lords from caller + let caller = starknet::get_caller_address(); + let this = starknet::get_contract_address(); + + self.lords.read().transfer_from(caller, this, amount); + + // update lords balance + let lords_balance = self.lords_balance.read(token_id); + self.lords_balance.write(token_id, lords_balance + amount); + } + + fn detach_lords(ref self: ContractState, token_id: u256, amount: u256) { + // ensure caller is season pass owner + let caller = starknet::get_caller_address(); + assert!(self.erc721.owner_of(token_id) == caller, "ESP: Only season pass owner can detach lords"); + + // ensure caller has enough lords + let lords_balance = self.lords_balance.read(token_id); + assert!(lords_balance >= amount, "ESP: Insufficient lords balance"); + + // transfer lords to caller + self.lords.read().transfer(caller, amount); + + // update lords balance + self.lords_balance.write(token_id, lords_balance - amount); + } + + fn lords_balance(self: @ContractState, token_id: u256) -> u256 { + self.lords_balance.read(token_id) + } + } +} diff --git a/season_pass/contracts/src/lib.cairo b/season_pass/contracts/src/lib.cairo new file mode 100644 index 000000000..7ecd4b725 --- /dev/null +++ b/season_pass/contracts/src/lib.cairo @@ -0,0 +1,11 @@ +pub mod contract; +pub mod mock { + mod lords; + mod realms { + mod metadata; + mod realms; + } +} +pub mod tests { + mod test_season_pass; +} diff --git a/season_pass/contracts/src/mock/lords.cairo b/season_pass/contracts/src/mock/lords.cairo new file mode 100644 index 000000000..d6a23fc48 --- /dev/null +++ b/season_pass/contracts/src/mock/lords.cairo @@ -0,0 +1,78 @@ +#[starknet::interface] +trait ITestLords { + fn mint(ref self: TContractState, token_id: u256); + fn set_season_pass(ref self: TContractState, address: starknet::ContractAddress); +} + +#[starknet::interface] +trait ISeasonPass { + fn attach_lords(ref self: TContractState, token_id: u256, amount: u256); +} + +#[starknet::contract] +mod TestLords { + use openzeppelin::introspection::src5::SRC5Component; + use openzeppelin::token::erc20::{ERC20Component}; + use openzeppelin::token::erc20::{ERC20HooksEmptyImpl}; + use starknet::{ContractAddress, ClassHash}; + use super::{ISeasonPassDispatcher, ISeasonPassDispatcherTrait}; + + component!(path: ERC20Component, storage: erc20, event: ERC20Event); + component!(path: SRC5Component, storage: src5, event: SRC5Event); + + // ERC20Mixin + #[abi(embed_v0)] + impl ERC20Impl = ERC20Component::ERC20Impl; + #[abi(embed_v0)] + impl ERC20MetadataImpl = ERC20Component::ERC20MetadataImpl; + + impl ERC20InternalImpl = ERC20Component::InternalImpl; + + #[storage] + struct Storage { + #[substorage(v0)] + erc20: ERC20Component::Storage, + #[substorage(v0)] + src5: SRC5Component::Storage, + season_pass: ISeasonPassDispatcher, + minted: LegacyMap + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + ERC20Event: ERC20Component::Event, + SRC5Event: SRC5Component::Event + } + + + #[abi(embed_v0)] + impl TestLordsImpl of super::ITestLords { + fn mint(ref self: ContractState, token_id: u256) { + // ensure this can only be done once per token id + assert!(self.minted.read(token_id) == false, "TL: already minted for token id"); + self.minted.write(token_id, true); + + // mint 1000 lords to this contract + let this = starknet::get_contract_address(); + let amount = 1_000 * 1000000000000000000; // 10 ^ 18 + self.erc20.mint(this, amount); + + // attach minted lords to token id + self.erc20._approve(this, self.season_pass.read().contract_address, amount); + self.season_pass.read().attach_lords(token_id, amount); + } + + fn set_season_pass(ref self: ContractState, address: ContractAddress) { + // ensure it has not been previously added + let current_season_pass = self.season_pass.read(); + assert!(current_season_pass.contract_address.is_zero(), "TL: season pass address already added"); + self.season_pass.write(ISeasonPassDispatcher { contract_address: address }); + } + } + + #[constructor] + fn constructor(ref self: ContractState) { + self.erc20.initializer("Test Lords", "TLORDS"); + } +} diff --git a/season_pass/contracts/src/mock/realms/metadata.cairo b/season_pass/contracts/src/mock/realms/metadata.cairo new file mode 100644 index 000000000..1cb6f7095 --- /dev/null +++ b/season_pass/contracts/src/mock/realms/metadata.cairo @@ -0,0 +1,8006 @@ +fn compressed_name_and_attrs(token_id: felt252) -> felt252 { + match token_id { + 0 => panic!("zero token id"), + 1 => 0x53746f6c736c69010102011a1108060708, + 2 => 0x496c677a68696a616a696c67010202240f15040c07, + 3 => 0x4865746f6b616d6f6875746901030401031d150b020c09, + 4 => 0x45676f6e616c010401020605030413071404060c, + 5 => 0x276f616b204c65756b75650105071e0412040b07, + 6 => 0x4e6f796b6b75796e6f796b0106030204200511050b09, + 7 => 0x74612054696e01070304021c0810040609, + 8 => 0x4d616b6f736b756b0108020108031b070b02080a, + 9 => 0x4e696f747361650106020603200e0a050709, + 10 => 0x27756e70696b0102040308010217031506060b, + 11 => 0x4f7a686563680106021e0815020607, + 12 => 0x4c616e616e67756e01060302180410070808, + 13 => 0x54756c74756c010907011c0606040608, + 14 => 0x74616c20536e69736c6973010202091c0605060b08, + 15 => 0x5165756a7165756a776f75770107040301281915060c09, + 16 => 0x49732d417267010808041d160d020608, + 17 => 0x536b6173736c756b010a02010322020e050809, + 18 => 0x556c6f6c65706f6e0105040201180a0a040809, + 19 => 0x456d696c736820496d6e6f730107040308021c120f020c0a, + 20 => 0x5579716c6179726f73010108200615030907, + 21 => 0x4c656d6f6c746e756c730108010a03081d0715020a0a, + 22 => 0x48656d6d656d736b616e010b05010b0308021a0805030a0c, + 23 => 0x5572204d75726f727a680108010c0b080a17090a020a0b, + 24 => 0x506f69206120506f6c69680102011d0a05030b07, + 25 => 0x41756e6f6d696d01080d04031c0406060709, + 26 => 0x6c656c204b75626b6c6f72010c0307010b0614030c030b0b, + 27 => 0x4b6f6e6c6f6d706f6e01020e230813020907, + 28 => 0x51756f6b71756f6b0106060301021f090804080a, + 29 => 0x6b656e204e696e74616e01040302010b080f1b020a060a0c, + 30 => 0x556d206e796e20416e73796e010d01060f170c05050c09, + 31 => 0x27696c6827696c686d696c010d0402031e130f060b09, + 32 => 0x757020496d6173696d69730104020401200615060b09, + 33 => 0x416e6f6e67616e696d6f6e67010a03050f081d1114070c0a, + 34 => 0x5a687573612d4c657465706f01070e06050302260b13020c0b, + 35 => 0x54656d6c656b6e6f6e6e6570010208050301060b190811020c0c, + 36 => 0x536e75647573756761746f01070210010403250810060b0b, + 37 => 0x57696e646f6d2044756e010b02040b031c0313050a0a, + 38 => 0x536469647a6869736801090b03230407020908, + 39 => 0x4d656e73696e6e6f6e0102020304071f0c0904090a, + 40 => 0x536b61706e61700109050302180a11030709, + 41 => 0x4b65756b2044756f6b6b6f75010a030c0221140a040c09, + 42 => 0x52616e64756c676869640102010203050b1b0b10070a0b, + 43 => 0x4e69736b75010c0125030a020507, + 44 => 0x4475797368626f010e060103040b190d0d04070b, + 45 => 0x4977617720556c756c0104040203011d0c0b04090a, + 46 => 0x4e6f746b61756e01060203040124190c02070a, + 47 => 0x4e69616e656f6e0102040603240d07060709, + 48 => 0x4f722d55726e7069720104040119020c040908, + 49 => 0x4c697368696d610108031e0b0f050707, + 50 => 0x4b6f6e6b6f6e6b696e6e616e0108020301190e09050c09, + 51 => 0x27696c77656c69010d0b040f030219080602070b, + 52 => 0x556e756d2d556e756e616e010c060520070d040b08, + 53 => 0x552d70752d48756e616b010c010f15020b040a08, + 54 => 0x4c6f7365706c616c0106020311260e13040809, + 55 => 0x50696e74656e0109050803180b07050609, + 56 => 0x476f6d706f6e010903101d0313050608, + 57 => 0x4b756d2050696e010c080d021e0a05020709, + 58 => 0x7269656e204b617476696572010a0803210305020c08, + 59 => 0x4e67696d736e67616d67696e01090b0803200912050c09, + 60 => 0x536368696e74697369010e01050221020f030909, + 61 => 0x53697773657973617770010f05040203011f0f0b070a0b, + 62 => 0x456d616c696d0109010b04020328041207060b, + 63 => 0x6173204f6b6574010f020f03041b050f03070a, + 64 => 0x476f786e6c656e010f030806070524151107070b, + 65 => 0x4b6c65686c656b746c696b0101010306041c0d11020b0a, + 66 => 0x4e7269707574616d010f020c12081c090806080a, + 67 => 0x456c6f6c6b616c6e756c010e07040102250308030a0a, + 68 => 0x4c6f756e6c6f756e011003230d10050807, + 69 => 0x5379756e6e616e2d54696e010f03040115090d030b09, + 70 => 0x50776569730110030f1d0910060508, + 71 => 0x50656d2761702050692701010706011c0815040a09, + 72 => 0x4d6f6c656d6f6b61736c756c0108031e0e13060c07, + 73 => 0x4e696b756e204869686e6901100304011e1610060b09, + 74 => 0x50756e73697474696c0101060412200e09040909, + 75 => 0x4875657465756d75616d0106080906210810040a09, + 76 => 0x5367756b20536a616b010a0207230413070908, + 77 => 0x4e616c78676974786d696b010d03010c062b1311070b0a, + 78 => 0x4b6c697473756b0104050402060329121005070b, + 79 => 0x416d74756e756e67010404020703011f050705080b, + 80 => 0x536a6170626a6174736a6170010403060207050b230211030c0c, + 81 => 0x53656c204f6c6e6761727101020502031a080a060b09, + 82 => 0x53696f73756101070104031d0c13060609, + 83 => 0x4d6968696b6f010803200e0f040607, + 84 => 0x4f716f767576010404021d0405030608, + 85 => 0x4d756e736d756d010f0601081f0708040709, + 86 => 0x50656e67736501080f06010221030d03060a, + 87 => 0x4769736c65676f62020502220a06050807, + 88 => 0x4d6f6d736b656d736b656e0110060305011f0310020b0a, + 89 => 0x7368697320546573736d6573010702031c0814030c08, + 90 => 0x4465747573656b20456b656b01010102041b0f0e070c09, + 91 => 0x496475647564696d011001020817090e040809, + 92 => 0x4e656e6e6501011002032d0f13020509, + 93 => 0x5370696e6b6f6e70696e010f05081e0310050a08, + 94 => 0x506f696c7365756c20506f730101020b01281514060c09, + 95 => 0x7368756820537075010b02011f060c060808, + 96 => 0x537573756b6901100304010205180f1105060b, + 97 => 0x5461776d6e75010a080403260206070609, + 98 => 0x536d656e6b696e010d04020b0318040c05070a, + 99 => 0x4e696e74756d0102030d0b020626061306060b, + 100 => 0x4b616174736e6f6f74737475010b05030c01020821060c070c0c, + 101 => 0x556d706f6a6b6d696b706f70010b0108021c0d15060c09, + 102 => 0x4e696f707a686f700106060802030415091107080b, + 103 => 0x53686574657001090301040b280e1005060a, + 104 => 0x4c617671797676696f01090102030422060604090a, + 105 => 0x446177756468696a6b6964010901030e04220310060b0a, + 106 => 0x4c6f7067616368010c06030b041f090905070a, + 107 => 0x53696c6c69205375756c6b6f010303060204011c0a0f050c0b, + 108 => 0x4b6f6d616c690110020401081f0d0803060a, + 109 => 0x5372756c6b72656b756b01100f0b05110301220e0b020a0c, + 110 => 0x52617279726972010a03250208030707, + 111 => 0x4f777577756c010407011b0814030608, + 112 => 0x4b75696d6b756970010d03041c0812070808, + 113 => 0x507572736b69726b6972010f04180d13050a07, + 114 => 0x5463686f6e7463686f01060704061f1112040909, + 115 => 0x6b692d4e6973696c6d010a061d050b050907, + 116 => 0x4b696b27656e6c756c6b696b010204021a0c0f070c08, + 117 => 0x51656e6b6f6e0108020f03051c041203060a, + 118 => 0x536f6e676b656e736f6e67010403050f02290312030b0a, + 119 => 0x436872756b7472696b77696b0101010306131b0e12070c0a, + 120 => 0x4e72616d6b616e01020301191510050708, + 121 => 0x4b69726c69646c69640109010403021b0b0f05090a, + 122 => 0x4d756b69204b616b69011009010b03220b1304090a, + 123 => 0x476c756d7869786b756d01090b080207011c0a05020a0b, + 124 => 0x46646971636875640108020501220a15040809, + 125 => 0x456e68756d010c06030d0223050b05050a, + 126 => 0x447570636869657001040703011d070e030809, + 127 => 0x5573656c6573010105030228120d020609, + 128 => 0x706974204b756b6c616b010501020503160c14050a0a, + 129 => 0x4e616d756d010d0102030522080e02050a, + 130 => 0x4e7275737372696d010502140f22060a070809, + 131 => 0x4d6971616b616d69010e0803200a10060808, + 132 => 0x5a61697a62756e010604010703240f0e07070a, + 133 => 0x41746971696a0108061402250b06070609, + 134 => 0x4e67616e7501100f021b020e060508, + 135 => 0x4c756c752d4c756c7574696b010c0802130403171313070c0b, + 136 => 0x4d616b6b6520736f6b204d69010501260b15030c07, + 137 => 0x53696e73696e73696e010b0b030c04021a0c0b07090b, + 138 => 0x50656e6773656e6701050203051d0609070809, + 139 => 0x5a61726d616c6e010e0b04031001021d0c1103070c, + 140 => 0x506a656e6d6a756d010206250e14040807, + 141 => 0x4f736d6f70010c150201240e0c020509, + 142 => 0x447575204b656d776f6f6e6101060706010212032a020e050c0c, + 143 => 0x736b756e204368756d6b6f6e010e0103220b15070c08, + 144 => 0x556b756c6574756c69706970010a0401220910050c08, + 145 => 0x4e69756e697567616973010203011c080d030a08, + 146 => 0x4768756e62756e010b03240305040707, + 147 => 0x5465736c65736b6c656b01010b0103260608040a09, + 148 => 0x536f6c736f6c6f6c69726f72010d01200813060c07, + 149 => 0x53656d656765010b03251708060607, + 150 => 0x4c65756e686f616c776975010d03041d050d070b08, + 151 => 0x4d696b756b75010b01021e0811070608, + 152 => 0x492d74656b2d53696c010b030f1e0c12050908, + 153 => 0x4e6f6e676b68756e6b616e670108040301160a0a020c09, + 154 => 0x557061687570756d01100408031b0b13060809, + 155 => 0x54656d656c2d54756d74757401070602031f0614070c09, + 156 => 0x476973696b010203060221050a050509, + 157 => 0x537975736873746573010c0b030f070802180a0c07090c, + 158 => 0x496b68696b71696c6f696b010d04240610040b07, + 159 => 0x5a68657a686901030802141b0507050609, + 160 => 0x536e696d7374776e010503231114040807, + 161 => 0x4b65736973656c6d20456c0101010603041f010a070b0a, + 162 => 0x456d2027750110011f080d040507, + 163 => 0x506f696d6d616570706575010403040601021c0e08050b0b, + 164 => 0x536e756e6773756e670108031e0c0a050907, + 165 => 0x47687573736368756d01100c0603210a15060909, + 166 => 0x4e6775696c6c616972010c080304180c07030909, + 167 => 0x54617468616d6b65010f07040f021d020907080a, + 168 => 0x536f6d6d756e010611070301190e1406060a, + 169 => 0x547570746574010a040b0702061d110d07060b, + 170 => 0x736875742055677368756d010814030604011c0815020b0b, + 171 => 0x50756b6e756b010b01240907020607, + 172 => 0x496520546574656573696b750102081d0312030c07, + 173 => 0x4f27696e6577010a040f010821050803060a, + 174 => 0x4e696f6c61656b61650105020f0408240a1404090a, + 175 => 0x4e656e73686e616e010d0603041b0e06070809, + 176 => 0x53616e67756d2041696775690110010302041b0708020c0a, + 177 => 0x54697a67697a67657a6d697a01040106031c040d030c09, + 178 => 0x54756b6e656b010d08211010030607, + 179 => 0x4e756c6d6f70010e0201060f03220b0a02060b, + 180 => 0x4c6f6e6f736b616b010602011d050e030808, + 181 => 0x547573204c756b737573010e05010302200e06020a0a, + 182 => 0x73756e2053686d616d010d01020b220406020909, + 183 => 0x4b6c756e6b6c696e70756e010f0203190d13060b08, + 184 => 0x556e756b7568756b6f6d010c0203041b0a0f030a09, + 185 => 0x4b756c75737573796e010b0b0408010225091303090b, + 186 => 0x4c657720596977010303200e0d070707, + 187 => 0x546f6c70656c010803010b1f0d10050609, + 188 => 0x4f7a6862756201040403020119080c04060a, + 189 => 0x49737a68656b756c61726901041019040f020b07, + 190 => 0x54696c736f6c010b04140906070607, + 191 => 0x4e61756e736d616e736d756d010e080b03041b0807060c0a, + 192 => 0x55686f6d75686f6d616d010e011d090d050a07, + 193 => 0x4b75696d6d69616e01080306021e0e08040809, + 194 => 0x53756e696e010b03021e0a08020508, + 195 => 0x4d757a6864656e010b030205220a08070709, + 196 => 0x556b657461702055687570010a0806180e15040b08, + 197 => 0x496d75776f6775676f6701030205100701170707020a0b, + 198 => 0x4c7575736c756d736c75756d010f0b190511040c07, + 199 => 0x73756e2044616d6b656e010b0f0106140807070a09, + 200 => 0x41616d697a010f0602150810040508, + 201 => 0x416d6c75746c757368010a06021a0f0f040908, + 202 => 0x5461677a69737a697374697401050f05070212030b1e1006050c0d, + 203 => 0x53686f6c6c7572010301140403080221050707070c, + 204 => 0x526f73686e6f6b010102030107230a0b05070a, + 205 => 0x45726b646f726e6d757201060b031f0708030a08, + 206 => 0x497a68617a686173697a680106020401200e10020b09, + 207 => 0x657020416b697065747574010606030208270313060b0a, + 208 => 0x57616d77616d6d756e6b756e0105080401241606040c09, + 209 => 0x546f6e6e656e0108030b011e0e07070609, + 210 => 0x4e6c612777756c0108061f0712020707, + 211 => 0x53726967680104120301261010030509, + 212 => 0x426967686b696b010502041e0d05050708, + 213 => 0x4e61696e756f6e756f706175010f0402031a1714050c09, + 214 => 0x536d616b776127010203011d110c030708, + 215 => 0x54696b6b6575746b6974010c051b090c060a07, + 216 => 0x47697a204c697a010d030201040c1d0d0606070b, + 217 => 0x4c65776b6b656b70696977010b0b0403021c0f07030b0a, + 218 => 0x53616d696b6d696b010d040501021d090b07080a, + 219 => 0x536c617a68677578010203210a0f030807, + 220 => 0x53686f68696801060804060302210d1306060b, + 221 => 0x43686f736f6c0101070311080122030607060b, + 222 => 0x536e6f73736e7562010c10010b04020f20110504080c, + 223 => 0x4d757a68737573680101010414051a0b0906080a, + 224 => 0x5469746e6c65746e6c697401060302190608050b08, + 225 => 0x536f6e6d6c776d6c6a616d010e0207080d12050b08, + 226 => 0x616b20496e6f70010308030402011a0e0f05070b, + 227 => 0x42756c7862617201090106071b0e14020709, + 228 => 0x6c696e204d696e6e616e010d021d0806060a07, + 229 => 0x59616c796e6761010a04250e12050707, + 230 => 0x4b656e746568010905180710040607, + 231 => 0x4c6f6b796f7570010a080d070421060a02070a, + 232 => 0x4b65736c656b010e031a080f020607, + 233 => 0x546174696c6973756d010705030410011d0f0506090b, + 234 => 0x536c756e6e6c696e010403061a0d0a060808, + 235 => 0x47756e756e6771756e0107040f210b0e020908, + 236 => 0x566172696e6701090c0305260e11040609, + 237 => 0x4b756f7a6875616401010722030b020807, + 238 => 0x4a616e73696e01010102031c0f12070609, + 239 => 0x5a756d7a696e010505030f0823091207060a, + 240 => 0x5161756e6e617571010303020f24050d070809, + 241 => 0x546574657a6f01030d12042c1811070609, + 242 => 0x556469646972010405020403010620050505060c, + 243 => 0x547561707469756b747561700110070806011423040c020c0b, + 244 => 0x4e6c61742d4d75746d6c756d010a140304071f060d020c0a, + 245 => 0x5669672050696e670101031402180c0f020809, + 246 => 0x49707a7577010c0103041c0605050509, + 247 => 0x45746574706974616b010a080b01210c0a040909, + 248 => 0x49726972696c6d697201090401030b0d2c0f0805090b, + 249 => 0x5675697279616901060301291508030708, + 250 => 0x4e756e6b6f6e6c616d0107031a0806040907, + 251 => 0x536f6e204e756c756e6d756e010a0601231615070c08, + 252 => 0x41746b72756b726f746b6568010b0a040214050a030c09, + 253 => 0x5570696d696d010403070402260a0804060a, + 254 => 0x536368676f6e74616d72756d01080308041b0714070c09, + 255 => 0x4d6f72737a697a7367756d010403011c070a060b08, + 256 => 0x4c616e6d616d70616e010403011e0308030908, + 257 => 0x4b6f7a687a7569620108020325020c030808, + 258 => 0x4b6f74696d6c697368616e0102070a01191014060b09, + 259 => 0x4c656d656d20456d6501020602032a170c040909, + 260 => 0x416e696d756d20496e6f6d010e0302210707060b08, + 261 => 0x4b6f686f206d75204875686f010b04200d07060c07, + 262 => 0x4c616e676d6f6e6b6f6e67010e04060e280e14050b09, + 263 => 0x416d656e71616e0102030502012a0c1302070a, + 264 => 0x496c716c6f6c757279010d050312070121090805090b, + 265 => 0x4b75616e6d757001030f0217070f050708, + 266 => 0x417a77796f7a680103010508211115050709, + 267 => 0x4d6975204c65697401090601151c0b15040809, + 268 => 0x4d7969746d696c204d616b01020301200e0f070b08, + 269 => 0x47696f7a7a6f6d010a080603010418080c04070b, + 270 => 0x44656e7364756e670101030704060226021302080b, + 271 => 0x4b6f6e646a7574010e0f0807031b0a0907070a, + 272 => 0x62757a205a6f6c7467690107050802040e1e0c11040a0b, + 273 => 0x4765676b696567010308010b03071a150f02070b, + 274 => 0x5069782053657a68010f022b1507070807, + 275 => 0x486f686d6970010b0603050426080c03060a, + 276 => 0x44756b697464756e010e040111031b0a1107080a, + 277 => 0x536f6c6f6e011005030425070e050509, + 278 => 0x5a6172616e7563756363757301080304061e0211070c09, + 279 => 0x546573736f6c746f73010403060216120f040909, + 280 => 0x27696b70697368616b0106080104022c180c06090a, + 281 => 0x456e68696e0108020b1c0e0f050508, + 282 => 0x4b7261756b70617564010902260214020907, + 283 => 0x536c616b27756b70756b010402220b07020a07, + 284 => 0x5374636865746368737a6964010b0604080302140614040c0b, + 285 => 0x4e75686e656b6d7568686f6b010701030402230410040c0a, + 286 => 0x4f73796f6c796f6c6f6b6f7301040302040b0608221913050c0c, + 287 => 0x5527756e756e01050402031e0c0c040609, + 288 => 0x4f756c6b756e01090104030f20110802060a, + 289 => 0x4b6164726f6e010101160613020607, + 290 => 0x4b75656c6c656467697a6801080b0802210b11070b09, + 291 => 0x546175707469696d61690107061d0a09060a07, + 292 => 0x4d616e7362696d010a1304031f0710050709, + 293 => 0x5a726168706f7a74697a011001060402220c0d050a0a, + 294 => 0x4c61736873697368746f736801040b0118050a040c08, + 295 => 0x556b7573756e010f0803211713060608, + 296 => 0x536f736b69726b01050301021c0714030709, + 297 => 0x506c7573626c6f6d6e6c617a010e04220715040c07, + 298 => 0x4d61706d6f0102060803240c0e070509, + 299 => 0x4b616c6d686168696c010303020601081b071202090b, + 300 => 0x4b6c616e2d74696e2d4c656d01080f02220207040c08, + 301 => 0x41732d64756d2d496767697301010a0203050817030b050c0b, + 302 => 0x4970756875777579757a6801010204010a0327110b020b0b, + 303 => 0x4261617361616e010d030b010824111107070a, + 304 => 0x49686e696e696c0109040302241307030709, + 305 => 0x4b7573697020536170746974010105120807060c07, + 306 => 0x4d61707469746e696d010602030620130f030909, + 307 => 0x4b756b756d6e726567726f6d010403040b011c0510040c0a, + 308 => 0x4b6f6e6b6f6e01070206080317060502060a, + 309 => 0x496e6969696d61616c010c050f04030224100806090b, + 310 => 0x4f6e7568616d6f6d6f6d010708060203071a0b10060a0b, + 311 => 0x4e75646475010204051f0708030508, + 312 => 0x416d616e616d65010f0403021e050b040709, + 313 => 0x4e7573616e670101020b1e0c13020608, + 314 => 0x4461646964646f6d010b011b0a0c070807, + 315 => 0x44656e64756d74656e67696e01060e010602031c0613030c0b, + 316 => 0x536c696b736c756c01070618130d020807, + 317 => 0x536c656e77696e01020b200915050707, + 318 => 0x4b696b616e01080103081b1013030509, + 319 => 0x53696d73696d70616e010d0e02032a0414070909, + 320 => 0x4b756d6d69616d2d416d01090501030208250b14070a0b, + 321 => 0x55727475726d6c6f72740108080206031c0a0b050a0a, + 322 => 0x54756d6e7572746172010f030b021c0806040909, + 323 => 0x4d75702d4d6f616d010d04100102060f1b0b0f05080c, + 324 => 0x5368616d756e67756d736861010c050703081a0607030c0a, + 325 => 0x4c6169656965757761756c0110031c0705050b07, + 326 => 0x4e72656e6e72656e010c080103250806030809, + 327 => 0x4b696d6b6901020405060323070704050a, + 328 => 0x50616e206e656e204e696e01040f1101030704230d0d050b0c, + 329 => 0x4e616d7061747574750110040102200e11040909, + 330 => 0x557573206b6f204f73756e010a050f210412070b08, + 331 => 0x536f6b756d6f010e01022c0915070608, + 332 => 0x4d616d6e696d6d6c757001100203140a11070a08, + 333 => 0x5368756e736e756d010e0103081b0707050809, + 334 => 0x4e6f73656b656b656e0109032c1312040907, + 335 => 0x58657377657401030b03010f0c160a0905060b, + 336 => 0x456e656e68616501100802220508030708, + 337 => 0x53616f756e74696f756d010e0a040205080f210c14020a0c, + 338 => 0x4b69726b6970610108030612100e050708, + 339 => 0x496c6e70696c74696c6e011004050302010f190f0b040a0c, + 340 => 0x547572706d756d68650101010226070e040908, + 341 => 0x4b726f6b6b6f6b204b657a68010d14020f010726060b050c0b, + 342 => 0x4b696c696c656b69011003071c0308040808, + 343 => 0x476c616b7a6c65730109080f1e1110020808, + 344 => 0x62757a2047756d737a6162010e0608021301240313040b0b, + 345 => 0x53686d697a736b6f7a7065730105020401270915070c09, + 346 => 0x546f6b736f74746f6c0103010502060f0423021404090c, + 347 => 0x417a68697a6574657a6801030206040324030d040a0a, + 348 => 0x4c696c696c010e0402220813060508, + 349 => 0x4f6c746f6c74656b010c030601021d070507080a, + 350 => 0x4e616d6b61776e6f6d01100401070d0305190e1507090c, + 351 => 0x4f736872617273686562010b0302241311020a08, + 352 => 0x536b6f686e696b6b657a6801050d1c030c050b07, + 353 => 0x536d6f6d736d6f7273706579010c03160505020c07, + 354 => 0x54757174756e01011202080321011405060a, + 355 => 0x42696e6773656e204d6f73690103010708031f010d060c0a, + 356 => 0x546f616c6e756f7065616d010f020801041d0909020b0a, + 357 => 0x4f73796f6b010b080314050618060d02050b, + 358 => 0x556c6d6d6f726801090204010325040c05070a, + 359 => 0x55756e69700101030108200509050509, + 360 => 0x6c65696c2d576c656e6c756d010301071403170807040c0a, + 361 => 0x53756d736e756d6b756d01100304250610060a08, + 362 => 0x4d696b70696b70696b01020308040b070122081304090c, + 363 => 0x496d75726d20416b0105010203060418081202080b, + 364 => 0x4e69726d75010f0b011e0614060508, + 365 => 0x5469746b61696e01010603020408051a0d0d02070c, + 366 => 0x536c6f6e6861770110030104151f0e0e02070a, + 367 => 0x4b696b6b616b70696d010d0104050602030b1d041407090d, + 368 => 0x53612052690110110702241107020509, + 369 => 0x5361727075726b0102020701031e081507070a, + 370 => 0x43687564796f6701050203200809040708, + 371 => 0x416a616a7369776d616a616a01030305250606050c08, + 372 => 0x54697070696d010a080f0402150c0d05060a, + 373 => 0x6c7573204b69736d6173011004070103250310070a0a, + 374 => 0x456e756e746368656e756e010d0102030b23030b050b0a, + 375 => 0x54617473706f6f74010b03080502011e0c1306080b, + 376 => 0x4e61656e6975677569736f69010c0b0103140c05070c09, + 377 => 0x4e756e6e756e6e616d010302190b13050907, + 378 => 0x4b756f7a61616b6a756f01030806041e0815020a09, + 379 => 0x5069737361736e616e6d757401020402010308190913030c0b, + 380 => 0x4964737563680101060302011f081107060a, + 381 => 0x4f617377696b6f706f77696b01060403021b040c020c09, + 382 => 0x556c77776f772701100302210307020708, + 383 => 0x53636870756e7363686e696e010c050102280d11060c09, + 384 => 0x4f6f6c75736f6f6c69700102040b01080203230d15070a0c, + 385 => 0x4c617a687501020603180d13060508, + 386 => 0x456d72656c72656c01040208010b250a0807080a, + 387 => 0x54696e69706901010306010b170c0f04060a, + 388 => 0x4d75736974207574204d656e01050102160b08050c08, + 389 => 0x54696e6e75010f01080f04210a1104050a, + 390 => 0x4e656b73616e0102010b021d0810020609, + 391 => 0x416c616c204b75776d6b6977010e0b02010308250215040c0b, + 392 => 0x556d73616e696d72610107050314210311070909, + 393 => 0x4d7275736876657a01050302081c0609070809, + 394 => 0x476f677a686f7473636801100401030605260c09060a0b, + 395 => 0x536c696c6d6c69732d4c6973010b030821040c040c08, + 396 => 0x6d61742d4d6c6f7070616b01100403081c0a15040b09, + 397 => 0x5461726b6573776c6d7770010d0215020b020b07, + 398 => 0x4b616b617065276d657001090325190a030a07, + 399 => 0x4d7269696d6d7261617401060803230612070a08, + 400 => 0x416c616c756e656d010803101f0112030808, + 401 => 0x4e75616e75656d696101060d0506010224020d04090b, + 402 => 0x5475736c75736c7573746f73010f020601080326080a040c0b, + 403 => 0x456e206761204e67656d650108070102051b0e14040b0a, + 404 => 0x4f6f6b6f6b7573010702050422150e030709, + 405 => 0x4d797173757467796e67746101040205030b010f23080b020c0c, + 406 => 0x41756d61756d010e080206040318091205060b, + 407 => 0x53696e696e6769696e6e696e01070206200b07030c08, + 408 => 0x50756e6b6f01070b080304011c081404050b, + 409 => 0x6275732d526f7a62657963680102080307050621070b040c0b, + 410 => 0x48726970746968706f6d01090f020103150e12070a0a, + 411 => 0x506f6f747a697a64616173010c03070102170709060b0a, + 412 => 0x546f7574746f7501020103260405020708, + 413 => 0x576965687a6f61687a6f6168011003070826050c020c09, + 414 => 0x5a686f6e6b726f6e63686f6d010e01250b11040c07, + 415 => 0x4b756e736c6164736c6962010108050407220d05040b0a, + 416 => 0x4d75756e6f756b657501020107081c080c020909, + 417 => 0x547573756e75204e757368610102020318020d060c08, + 418 => 0x487975736d796573707775780108080b1f0511070c08, + 419 => 0x4465646761726f70010401220313020807, + 420 => 0x456e75687568010f08060b190b05060609, + 421 => 0x4b756c6b6f6c74010a02071f0c0b060708, + 422 => 0x4e6974616775010c05141305020607, + 423 => 0x496d75706f6e010f011a0807050607, + 424 => 0x537465747465746b6f74010d020504031c0d06070a0a, + 425 => 0x476f756b676f6570010b05200507040807, + 426 => 0x5465746d6f0103081e0313060507, + 427 => 0x416b68656b787562010d020b061a0315020809, + 428 => 0x4b6f7a68647573010f0f0503080121080505070b, + 429 => 0x50657a6873617a6801060403251014050808, + 430 => 0x5475646f73616b756e75646101080803220414050c08, + 431 => 0x55736d7572670109060403021e051202060a, + 432 => 0x487574204e69686e617401070103040215060a070a0a, + 433 => 0x4b616b626f73010a041b0507070607, + 434 => 0x4974696b756e0107010a0b1f0614070609, + 435 => 0x4d756c742d6f6c642d4974010b020306290706040b09, + 436 => 0x6d652d4b75010701031d0d09060508, + 437 => 0x53756c6f746f6e010c030c0b0413111007070a, + 438 => 0x506f756b6b6f756d01040306041d0810070809, + 439 => 0x4d656c6573650104020520030a060608, + 440 => 0x4d6f6b6b616e010e03120601070425031507060c, + 441 => 0x536861626501040302180d11020508, + 442 => 0x4f6e6b6f6b01030604030702280b1305050b, + 443 => 0x536b6573786d756e010e030201290408020809, + 444 => 0x5868696c6d6f70010d03260315070707, + 445 => 0x53756e74650107021001031a031504050a, + 446 => 0x4d616c73796f6e0104060102031e090502070a, + 447 => 0x752d4f6e77756e6f6d011006210d0c050907, + 448 => 0x546f6b6e69720104020823060c040608, + 449 => 0x656c2d536f7274010f010306160808070709, + 450 => 0x48696d696e0110041b040c050507, + 451 => 0x616d20427562010a080301200f12060609, + 452 => 0x5461732d4e69736b696b010b020b0103180a09070a0a, + 453 => 0x576177737061700108030401061e0c0c07070a, + 454 => 0x4c756f6d74656f700105030c0f0516051407080a, + 455 => 0x556c756c656b010d14021d1510020608, + 456 => 0x4e6f7574756f0104061e1214060607, + 457 => 0x5275656e2047756573656f0102041305031d0e09030b0a, + 458 => 0x456c6e75726d6527010d0a01020518040803080a, + 459 => 0x5361697074696b6e69757301090e04030125110f070b0a, + 460 => 0x70656c204d696e6b656b0103130602270b0e060a09, + 461 => 0x53616c696c75011004071d0715020608, + 462 => 0x53696d7369737375696c010d0f0301021d060a050a0a, + 463 => 0x536b6f6c736b6f6c6d6f01100503061c0a06030a09, + 464 => 0x4d6f74616d6f011001061b0c05050608, + 465 => 0x54616767696762697201010201031b0906050909, + 466 => 0x4e756b6e756b736c616b010d0b0203041f0705050a0a, + 467 => 0x50697370696d010808210315040607, + 468 => 0x277577696d27616e676e61610105040203180511020c09, + 469 => 0x536d657073746f6e20536e61010c02010604250d0a040c0a, + 470 => 0x70756c2d536572757075720103081a1114040b07, + 471 => 0x4c756c6d697301020d011a0b05040608, + 472 => 0x5761737761736861756b0103030b01021d0805050a0a, + 473 => 0x4e6f6b75204c696b756b750102010d0b060403280208060b0c, + 474 => 0x4d75616b6c696b6e616970011002040f08061c0408030b0b, + 475 => 0x57616c7768756c6e6d6f770104031c0708070b07, + 476 => 0x4d6f7368736877757a68010a0103270f0a050a08, + 477 => 0x50616e6775716769010408070b02290b1003080a, + 478 => 0x5361706d6520466c65666d6101050208170f0d020c08, + 479 => 0x4f6b69746568756d6f6b0105020801031a050f060a0a, + 480 => 0x7369204d696d696d7501100323060c050907, + 481 => 0x54756b756d6f010f0103021a0405030609, + 482 => 0x536d6f6d736e6f6e010c02011d0708060808, + 483 => 0x51656d77656b71656d73616e010301021e0f10030c08, + 484 => 0x4b756b666c7570757001020603250d07070908, + 485 => 0x556c71616c616c71616c010801031a060a050a08, + 486 => 0x57657077756c776570010e101b050a050907, + 487 => 0x4172756d2d556e61726576010c01220508020b07, + 488 => 0x4e7573736d7573736d75730110061b0208070b07, + 489 => 0x45716572756d010d07030122060a070609, + 490 => 0x4d61796c6f796d010e0403010522161205070a, + 491 => 0x536d657474656973010a0b0406021e031506080a, + 492 => 0x4e756d656c74756c6d69010d0201080b340308040a0a, + 493 => 0x536f6e6767656e0107020105031f0a0803070a, + 494 => 0x4c696d6f6e205574697069740104030b050401220807020c0b, + 495 => 0x42756d7a616e6767756e010a0102070824060b020a0a, + 496 => 0x57617764646f6a62010e01260c09020807, + 497 => 0x4b65776d697701020b0306011a131507060a, + 498 => 0x4b756e6f6d73656e010408020704031518091406080c, + 499 => 0x54756d70756c6d757474696c0108021c0f12030c07, + 500 => 0x4b6f706b6f70010b02030105071b0b0f02060b, + 501 => 0x4f6b656b7573696b7375730101061d0a09020b07, + 502 => 0x4e756e2050756e01060406081b0c08030709, + 503 => 0x44756e7364756e7371696d010102031f0609040b08, + 504 => 0x4d697a6f730110140803011b070c05050a, + 505 => 0x4c6f6c736c696c010603041505021f060f02070b, + 506 => 0x696e204f6d616b6964010e0403011c1015070909, + 507 => 0x54616c6f7375010c02060b200709040609, + 508 => 0x43686f7a6864756b7a686f7201050702151f0614020c09, + 509 => 0x5364656e77656d010c01071e0714030708, + 510 => 0x456d6162656b6f7a0110031e090b040807, + 511 => 0x48616b756b01070b0501020426041302050b, + 512 => 0x676865204c656b68756c6f010305020703011f0409070b0b, + 513 => 0x4c6f736b6f6d01020801021e0605070609, + 514 => 0x50656b73686c756b010e030622060d030808, + 515 => 0x4e757a736173647575736475010c0302011c0607030c09, + 516 => 0x41616c7061616d7461610102030605081e0b05040a0a, + 517 => 0x527576746f6775677572010b03230314070a07, + 518 => 0x4d796e616b6c797301050b03010529090703080a, + 519 => 0x4578757865786970010c08060203010521090602080c, + 520 => 0x50756c6c6573706f6e6c75010e04030b0621020a050b0a, + 521 => 0x4d616b7461747475697401010b0802010420100a020a0b, + 522 => 0x456d756c616c61010c12080605011c070503070b, + 523 => 0x4e6f6b756e010d010204031a0b1204050a, + 524 => 0x4f6f70656e01090114070306260e0703050b, + 525 => 0x5075732d7769702d536f6401020702030420090d040b0a, + 526 => 0x4d696e756c6e756c010b081203220e0c030809, + 527 => 0x4170776168010e0622070e040507, + 528 => 0x4e696c616c6e69205065010f010f031d050f020a09, + 529 => 0x546f6d616b6f73010a020301041c060e05070a, + 530 => 0x53687a6973687a696275776901010c04021a090f030c09, + 531 => 0x496775737573696d61677573010d06020401170d05020c0a, + 532 => 0x50756c73696c6b70656c6d010f040302210209020b09, + 533 => 0x5375726f6c6b010e0102270b09050608, + 534 => 0x42616b68692054756c61010305020306150a0c060a0a, + 535 => 0x53706970737573010101180815050707, + 536 => 0x4c776b6c777301080603021c030e050609, + 537 => 0x506c696d73656e0107021f050d040707, + 538 => 0x4c656e6e756e6e65030f02061f050f040808, + 539 => 0x49726d617a696d696c7a010704071503061d0314020a0b, + 540 => 0x5a6f756c74756f6c6c6f756e010b0104190b0e060c08, + 541 => 0x4c75616d656565010a1026030c020707, + 542 => 0x5573757a68010503051f0910050508, + 543 => 0x536b756e736e696e01040203010821020907080a, + 544 => 0x4b6865676865010103200d09070607, + 545 => 0x4c6f6c6f73776f01020b08031a050b020709, + 546 => 0x5369736368656e01030701031d0807030709, + 547 => 0x556e6c7570696e01050619060a070707, + 548 => 0x596f796120766120596f01060503040114050c060a0a, + 549 => 0x4f7a757a757a010e03230814030607, + 550 => 0x4d616d6e6175204861010c0306021c060b030909, + 551 => 0x556a6964696b010c05061e0505020608, + 552 => 0x416c616e757375730105081f030e040807, + 553 => 0x5a686f7a697a6961010a030f0801041c070f04080b, + 554 => 0x4b616e6c656d6c656e01050201080c21091304090a, + 555 => 0x4e6570657201050b0326060c050508, + 556 => 0x4d757a706f7a70757a6801090304021d0b12050a09, + 557 => 0x4e656e6d61736e6f70010d0305061d0c0f030909, + 558 => 0x6e75732044756c616b010203250a0d050907, + 559 => 0x4d756d736d75010a06040c02011e0d1002060b, + 560 => 0x54696e6b656e69696d74696e010f01040302210b12030c0a, + 561 => 0x4c616c706c696e010d03061e0a0a070708, + 562 => 0x4c656f746e6f7573010a040f030221020f06080a, + 563 => 0x4c696e6c616e6c696d010b0625050c030907, + 564 => 0x52697a687562726564010f051408160513070909, + 565 => 0x47696e6e696d2044616e010d020804011b0b06030a0a, + 566 => 0x556b6b756b74756c6b010903190407050907, + 567 => 0x6f622d4f726f7375757a01101104080b12220308040a0b, + 568 => 0x4168746968696d2049696861010103240205050c07, + 569 => 0x5069656b69656b010a030204290708020709, + 570 => 0x4e696e616d65204d616865010201020603081f0b0d020b0b, + 571 => 0x6d656e204b656e6d756d010803250207060a07, + 572 => 0x4e6f6e204e656e67010604081f0609060808, + 573 => 0x4e756b68756e7562010e02140306150121021204080c, + 574 => 0x55736e756d011006030225100c060509, + 575 => 0x546170204e616801050203171312050708, + 576 => 0x506970696b697075010e030828050c040808, + 577 => 0x4d6f75706b6961706977010f030104281311060a09, + 578 => 0x4e75736d757301100102160811070608, + 579 => 0x57617770756368010d040506030123051007070b, + 580 => 0x4c69616d6f6173010c0301040f28010f07070a, + 581 => 0x5279756e6777757404020e08040322041207080a, + 582 => 0x52696b6b696b010305031d110b070608, + 583 => 0x44756c62756c7367616c010d110103210c11070a09, + 584 => 0x4e696b65680103030706010502180f0803050c, + 585 => 0x4e6f6b6b696b617069010103051e0907030908, + 586 => 0x537520696a20436875010f040203220606070909, + 587 => 0x4e696c206b6976204b6974010c0220070d060b07, + 588 => 0x4768616c716964010a030f0208200c1204070a, + 589 => 0x4d656b6574797061010f01021c0e06030808, + 590 => 0x5363686173204f6c01090403011d0408030809, + 591 => 0x536974204d797574010d040501030219060907080b, + 592 => 0x4c696c756e74756d756e7369010b070602010804211009020c0c, + 593 => 0x4f706f6e6f736974010904240410070807, + 594 => 0x4c777075706c7770010b030607021a030704080a, + 595 => 0x4c6f656d20546f6901030605030b0227091305080b, + 596 => 0x276170204869686901030b04060c011e0f0a02080b, + 597 => 0x5061756d6d75616d6d61756b010e040103211511050c09, + 598 => 0x4968696820696e205568697401060204030c1d060b050c0a, + 599 => 0x556e756c204d616b010603022a0b07020808, + 600 => 0x536c697673766973716576010a03190605070b07, + 601 => 0x5461617469746161010a030b010622050c05080a, + 602 => 0x4e756e7570690109020109052b0a0a06060a, + 603 => 0x496c2d52696c67696c01090203190a10040908, + 604 => 0x53796b67616b0106040301190a0c040609, + 605 => 0x4b756d706f6c6d696d01010103052e0710050909, + 606 => 0x446f696b6e75657a6f7501050801180a0f040a08, + 607 => 0x4d6c656b7a6c696b746c6f73010b0608021e1211060c09, + 608 => 0x456e676e67757772010a020103211115060809, + 609 => 0x556e6772696d01060308060212011f0d1502060c, + 610 => 0x6e726570204b7265746e656c01050b0102340f0a050c09, + 611 => 0x59696b79696b010510190c0b040607, + 612 => 0x4e656b756d696b70757501060e140301230607030a0a, + 613 => 0x4c75204e756d010d01180e08020607, + 614 => 0x4e6974736567010506211015020607, + 615 => 0x497a657473636801100403020111060503070a, + 616 => 0x4972746f7269727401041502210411040808, + 617 => 0x69204b696b69010901031a0913040608, + 618 => 0x4b6c696d746c616e010d0708010b0321080706080b, + 619 => 0x4d616d73756e6d756d6d696d01080603020126080e060c0a, + 620 => 0x50696e626c696d010e0b03010222140f04070a, + 621 => 0x4574657065702d4574616b0102011c0210070b07, + 622 => 0x536e616e6e696e73686e756e0109040302010c180b05030c0b, + 623 => 0x54657074756d010608180712020607, + 624 => 0x4c65746e75656d746f75700109010f0b0212200608020b0b, + 625 => 0x59617461636868697a0110020f061c0914030909, + 626 => 0x5369746b756b6b756b70697401060301240913020c08, + 627 => 0x496b6969276127010806031e0308060708, + 628 => 0x53757065706f6b6f7375011002080103281311020a0a, + 629 => 0x4f7573676f7567010101030e06081d081405070b, + 630 => 0x6c65696c205572656c7368010f02011e0c06060b08, + 631 => 0x48756265696b0110080f05231108050609, + 632 => 0x4b616d706c696e010503250711070707, + 633 => 0x546f746f7274736f6e0110060d032f0606030909, + 634 => 0x5362696b6d75730102040205060c011e060c03070c, + 635 => 0x69205574746920550103040302081f040606080a, + 636 => 0x506f63686d756d01020403191108060708, + 637 => 0x44616d6d72616d64616d010c0208170c0b070a08, + 638 => 0x4c616b6e616b0105020703210611050609, + 639 => 0x47656e756e01100102060a04160c0b07050b, + 640 => 0x506f73706f73010305030b18050e060609, + 641 => 0x4e6974706f6c010c1404021c0514040609, + 642 => 0x4b6f6e6f6b6973010e030b100401051d050f05070c, + 643 => 0x536c656d6d6f7001070b081402031d0c0c06070b, + 644 => 0x4b757a687a68616c01020104021e060f060809, + 645 => 0x5370697a687a686f64010b04170d0e030907, + 646 => 0x6e726f6e20556b6f670106010207060522100d03090b, + 647 => 0x54656e67736b6974736f01060502030607240f12050a0b, + 648 => 0x4b726f6e736f6d6b656e0104060223030b050a08, + 649 => 0x4c696868616e6b616b010b0201031d1010030909, + 650 => 0x59656b77656b79696801030610050f02120b1302090b, + 651 => 0x41726172696d6f716967010b0204031f0213070a09, + 652 => 0x4f646f7420446f646f6e010d130502031a030f040a0a, + 653 => 0x5361656c7069656c6b65690105021d0909070b07, + 654 => 0x50696c6d70696c6d696e01100602032a0810070a09, + 655 => 0x53656c656b010401030818040f020509, + 656 => 0x576a61777a7567010c0802061c0f13070709, + 657 => 0x4d75616d756973010f0306021c070f050709, + 658 => 0x4d696d6d75204875686901070f030402081e0715030a0b, + 659 => 0x4d757a6b6969010e0d0405170510070609, + 660 => 0x53646f6c7363686d6f6e01020408230c08040a08, + 661 => 0x43687561676269616e010d0403060b18060c07090a, + 662 => 0x506f6c706f6c0109010803061f030504060a, + 663 => 0x54757020756b20457401080203050124051302090a, + 664 => 0x4b65736b756b01030305021b0a14060609, + 665 => 0x4775656e6e65736d756e011011060203280208030a0a, + 666 => 0x48656e6727756e6f6e676c75010a050206031a0c14050c0a, + 667 => 0x4e65756c756c010c06050c0323050d03060a, + 668 => 0x4b6c6f6e6b6c6f6e010e100103060e021f031404080c, + 669 => 0x506c656e6c696d010f031a0c10070707, + 670 => 0x497363686d7573746167010a030602271015060a09, + 671 => 0x45746f6d696d01070603100c021c0b0c03060b, + 672 => 0x53686d6f6e736b6970010d02260b0d070907, + 673 => 0x4b696e69706e692d4d69010307020d0803231011050a0b, + 674 => 0x4e777a74657a01040401170712040608, + 675 => 0x42656465736101050702040329080f03060a, + 676 => 0x4b696b6b696b010a0103171214070608, + 677 => 0x557275726b6972707572010a040203190a15040a09, + 678 => 0x4b656c656c75010b031d180c070607, + 679 => 0x5574616c756c7570010c06010b03021d080607080b, + 680 => 0x68612d4e616d756e616d6f6b010d031f0b0e050c07, + 681 => 0x576f6d68756c010301021d1010070608, + 682 => 0x6e696e204b7576010204030b0221011405070a, + 683 => 0x476978737475737367696b0108020301220c0b070b09, + 684 => 0x48696e68756d0109020306210d05020609, + 685 => 0x546f6d6f706f010d0b0307121c0f0504060a, + 686 => 0x4e657377656927656b010b02030e23020c040909, + 687 => 0x53716f67686b686f010d0203140d0a070808, + 688 => 0x492049616d010e060a050322131304050a, + 689 => 0x536c6f6e6c756e6c756e05100302170911070a08, + 690 => 0x4b72756a6b756a6d726963680102071c0c11060c07, + 691 => 0x4e756b737a756b736e6f6f7301100806040305230307060c0b, + 692 => 0x6768756b204d6973686b61010204030806220406040b0a, + 693 => 0x416b696b71616b010d03010b1f0514020709, + 694 => 0x53746973206b696b204c696b010c01042d0f0f020c08, + 695 => 0x416b6974696b75740104010b0304180d1204080a, + 696 => 0x546f6d756c736f6c010a0f03041c0811020809, + 697 => 0x53696c7375747570010b031d0c0d060807, + 698 => 0x50726f63687472616d0104010608020327091103090b, + 699 => 0x4d69696d67727564010e031c1613050807, + 700 => 0x4e696c696e6d756d0105030204121c071207080a, + 701 => 0x53686574616c7464656c0107030406131c0614040a0a, + 702 => 0x55686d696d756d6d7570010e0802010325060f040a0a, + 703 => 0x4d656d7465682054656b6f01070801021a1715060b09, + 704 => 0x48696d616e68756d6b616e010e010802140f061c040a070b0c, + 705 => 0x4c756c756b696b6d696c0106030102041f0c09030a0a, + 706 => 0x5075707075706b617401010126010d040907, + 707 => 0x596f6d756e010d0302011c1306020509, + 708 => 0x55636875627579756368010d0b0513031e1308030a0a, + 709 => 0x55776c616c616c0102010b02031f040706070a, + 710 => 0x6d616c20416d010d05020306041b0e0907060b, + 711 => 0x4b657420656b2045746c616c0105011f0710030c07, + 712 => 0x4d6f6e67716f6d6f6e010101150a14020907, + 713 => 0x48756e756d6d756d6e756d7501040b05221406060c08, + 714 => 0x49696e6e757161010203270606030707, + 715 => 0x54756d736f6d010e03040208051e070c02060b, + 716 => 0x506f6c6d6c75730109060304020b1f0a0b03070b, + 717 => 0x556e207269702053756c0106070108031c0915040a0a, + 718 => 0x496e696e696e010e04011c0c0f050608, + 719 => 0x6f6c20456b65746f7365740102031b0312020b07, + 720 => 0x54656e6c696c74656e01020c0706011b0d0b03090a, + 721 => 0x5469746977010107160f05060507, + 722 => 0x536d616b74616b01100206190606030708, + 723 => 0x48616b6b61276c7527276968010c010803022b060d040c0a, + 724 => 0x53757270636161680102030608051a1e0d06080a, + 725 => 0x417273207572204f72010c080103070d02130a0706090c, + 726 => 0x5520696d204b616d0103050b03021c0a0605080a, + 727 => 0x4d756d73656e73656e73750103010305061f0714040b0a, + 728 => 0x5969777965707a69696b0109020803040124010b030a0b, + 729 => 0x4c756b65736d6f736e756b010503021f030d030b08, + 730 => 0x576f6e676b756e676f6e67010302031b080a040b08, + 731 => 0x556d696d73616e010103210b15070707, + 732 => 0x44617269656c6b010402170c10070707, + 733 => 0x4b6c7574656865682d526f6b010502050d231007050c09, + 734 => 0x417369707573756c696b010c01030407061f0a07040a0b, + 735 => 0x536875616b6d656b01020401030f110c1303080a, + 736 => 0x556f74206f6c204c756b6570010c04140702220711040c0a, + 737 => 0x546f67686e616b64757701100e0603221012070a09, + 738 => 0x73657220536d756c737a75010701040803211011030b0a, + 739 => 0x6f7020456b656b7568656b010308030401210b10040b0a, + 740 => 0x556c6e6f7020556c6e6d6573010102030520050e050c09, + 741 => 0x446569736769746469656e010e04080501250313070b0a, + 742 => 0x536f657474616f74010608210b13050807, + 743 => 0x536879616e2d4e79756d010501210608050a07, + 744 => 0x54696b7365740104021f0e10020607, + 745 => 0x53626f67736b6101100315160907070708, + 746 => 0x55736970616d756c616d01070802051c090a070a09, + 747 => 0x75732049756c6173696b6c610108050706010419020d040c0b, + 748 => 0x57616c77696e0101011c100a070607, + 749 => 0x4b6c6f6e6d6f6e010f0b1d0911060707, + 750 => 0x5069706b696e010f0f0403020617060a06060b, + 751 => 0x4e69617370617573010f020106240509040809, + 752 => 0x4c69756b6c7570010b03021a1415040708, + 753 => 0x4e61616e20496e697501020102230e08020908, + 754 => 0x49646963686972010f03061f0a0a020708, + 755 => 0x5475707574010601030216090f060509, + 756 => 0x456c6f77756b65276f68010d0406031f040a060a09, + 757 => 0x41706177617a68010f02201314050707, + 758 => 0x506f6d6e656e0103050603250512020609, + 759 => 0x4b696e6f6e6f6e79010f01240d0e040807, + 760 => 0x4e67756c666c756e6701010103041a0e0f030909, + 761 => 0x53616c6e73696e74696c6e010c02011d0e15070b08, + 762 => 0x4b77616473796573680108021d0a0b070907, + 763 => 0x536574656b010a0311051416130c03050a, + 764 => 0x5564756e756e75646573010f0b0804050201140f0a030a0c, + 765 => 0x496e6b616d696e65686b696d01030d041f100e040c08, + 766 => 0x457573656e6761716f6701050313021b150a020a09, + 767 => 0x706175726720437572637572010f01100302290f14020c0a, + 768 => 0x6e676572204c6f72010f030117090a040808, + 769 => 0x4e6970736c6f6d010e0307051b1309030709, + 770 => 0x4171756c776e67756c01080701040203160c0902090b, + 771 => 0x5375736b6f73010a08050103021d090d07060b, + 772 => 0x476a656e6d777564010902030b1c0615060809, + 773 => 0x4f6e6d6f6d6f746f6e010e070f06020814051f070b03090d, + 774 => 0x56697173696e6701080102031c0713050709, + 775 => 0x5375736d6f6d706970010a050104021d0c0b02090a, + 776 => 0x4e616e6b756e204b6f6d010d03240708060a07, + 777 => 0x48726f6e68726f6e01020203120e0d020808, + 778 => 0x5374756d74696e74696e0103020308051a040a040a0a, + 779 => 0x4f702d4b656f706c757669790106010e0204031b0f0f070c0b, + 780 => 0x44617a6873757374756368011002040301170707070b0a, + 781 => 0x53686b656c010d010314040216070d06050b, + 782 => 0x43686f6b757963686f676f010a030204060105190b0f020b0c, + 783 => 0x556a6b6b6f6a6b6b696d0105040e0103170a0d060a0a, + 784 => 0x54656c74656c6f6c756c6d01090b0306230311040b09, + 785 => 0x5061746d61010e10020324090c040509, + 786 => 0x536d696c6e756c6e756c010e030b011a0512050a09, + 787 => 0x58746f6e6f706d656c010104020318120a030909, + 788 => 0x4e6f6e74696c0103050824030b070608, + 789 => 0x4e75696c736f756b204b6170010102060103190e07070c0a, + 790 => 0x537a6f6d6b6f6e7363616e010308011225070d050b09, + 791 => 0x536d6f746f74736e696c736f010d08041c0d08020c08, + 792 => 0x4f636f63646f73010b0401031d0305020709, + 793 => 0x596f79205761010a07020111170f060609, + 794 => 0x53686c75706c6f6e010202190809060807, + 795 => 0x5365677265647a68616368010b0206031f0c09040b09, + 796 => 0x4e65706d616d010e021d1014020607, + 797 => 0x4768696579616c62010b01041f090b030808, + 798 => 0x6b6579204d61796b6d61796b01070f04030706121e0f0f040c0c, + 799 => 0x5361736170756e010403010b1c080d060709, + 800 => 0x4c61786d69786769786769780107020320060b070c08, + 801 => 0x5065746c617368011004030608190f1102070a, + 802 => 0x4e65736e6573736f7001010223010e060907, + 803 => 0x48656b696868656b01100804020323050e02080a, + 804 => 0x4b69686e65776f770103020306041d060c03080a, + 805 => 0x6e657a204761626e656401020e12290607050a08, + 806 => 0x70756d20536b756d0105070415120f070808, + 807 => 0x52616b7a6861617a6f010605010403200c0803090a, + 808 => 0x4964656e656e0105030a0215130a020609, + 809 => 0x416e6b696e696e74616e010b0f061b0308050a08, + 810 => 0x50617770697070696b011002070d1c1210040909, + 811 => 0x27617370696b6d756b0104060104030222071305090b, + 812 => 0x496e6c696b72756c010c14010325020a060809, + 813 => 0x496d756d6f6e656e01020501180814070808, + 814 => 0x436875746368010d06030225160a070609, + 815 => 0x53696d6e696e0106020803060126010d06060b, + 816 => 0x486c75686168010e020403010625071304060b, + 817 => 0x4d696e6d696e6c6120507501090607030402200607040b0b, + 818 => 0x50696f6865696d6f65010b03170d0e050907, + 819 => 0x4c656c696c6501030302081a0309020609, + 820 => 0x5372656e67706173726570010c040803061c0d07060b0a, + 821 => 0x596f6e676f6e62756e796f6e010103201305030c07, + 822 => 0x506973204c69736e757a010602071a0514070a08, + 823 => 0x48756e7575686e75010e040201140f14040809, + 824 => 0x736167205365766f670110061b080d070907, + 825 => 0x53756e6767656c676f69700102020403240e0c020b09, + 826 => 0x4c79756d6e79756d010e0301231113060808, + 827 => 0x476579696c01030302010724050703050a, + 828 => 0x4b616d6b697070696c0105060b01031a0e0b03090a, + 829 => 0x50656e6b65736e6f70736f6b01060b21040f060c07, + 830 => 0x5864757a680110071c0313070507, + 831 => 0x4f6d61776127010b0b0f0702150f1105060a, + 832 => 0x5661656e7661656e72616f730104020b1c050d020c08, + 833 => 0x416e6d616e206b6f2041616e01060e03131105070c08, + 834 => 0x577570706f6c010a0103250e15030608, + 835 => 0x477579736564010401210a09070607, + 836 => 0x4d756d6c6f010d140603230805050509, + 837 => 0x4d69706d656b01010506020118050c07060a, + 838 => 0x5469706c6f6e6e6569730103080218120a050a08, + 839 => 0x4d6f6b756f060101031c0c06040508, + 840 => 0x5975627769677a696d01030e03020106111d060605090c, + 841 => 0x53656173776573686173010a010518040a020a08, + 842 => 0x73656b20536d6973736573010f0b1c0c0c020b07, + 843 => 0x4b6f6e6c75010b02010c051e071403050a, + 844 => 0x426967757a686978696e75010202031d0405050b08, + 845 => 0x4f72746c65726d75726e010706041f0b05030a08, + 846 => 0x536c6f6e736e696e6e696e010802040301211c0c040b0a, + 847 => 0x49767669706976010d010503061d100504070a, + 848 => 0x537573756b6f01080201030525090f02060a, + 849 => 0x456c6d616a656c6d010908030e0629130707080a, + 850 => 0x4e756d276f6c010d0b03210713020608, + 851 => 0x4e617a6874617368011006110301081f0b0607080b, + 852 => 0x5a656220536d617a63697a010b0802061d090c040b09, + 853 => 0x4f7a68726f0103061e0907030507, + 854 => 0x556368756b75677563680108011e0b0a060a07, + 855 => 0x506c697075706c756d72756b010f0820070b070c07, + 856 => 0x517561717561010d0325120e060607, + 857 => 0x536d756e7327756d736d696e010b0205270106050c08, + 858 => 0x4d75686f2d6e616c2d536875010303021a010a070c08, + 859 => 0x4b696b696b69204368696b6901080803240806040c08, + 860 => 0x49746f6f67696301090102230b13060708, + 861 => 0x426164726f726f626f736b6f010d0208030b01190911070c0b, + 862 => 0x436861737361010b0203270b06070608, + 863 => 0x5465696c6b6f6b010d030501020618071102070b, + 864 => 0x27756d6d7761706d616d0109041b0913020a07, + 865 => 0x4e61697a6d61646d697a01060701250b0f030a08, + 866 => 0x4e657973697a697a69626962010c0201061b070a060c09, + 867 => 0x556b6768696c6169676801100d0102031f0706030a0a, + 868 => 0x4c616c656d20496c73656d01030205220b0a040b08, + 869 => 0x5a68616b616b696b756b01010605020f03230a07070a0b, + 870 => 0x616e20477269672052756e010d030801270f07040b09, + 871 => 0x4c6f6e6e726968010c0601031d0614050709, + 872 => 0x48656c636f6c6a65070508040f0320120b07080a, + 873 => 0x547269736e7275740107030801040621051303080b, + 874 => 0x4b656d6e6f6e796f01080201031e0d05030809, + 875 => 0x50756c74707570750104080201031d101407080a, + 876 => 0x4b6f6c736b6f6c7373656c70010b0302011b0e15050c09, + 877 => 0x4c656c6c656c6e656c010a030d0501120d0e04090a, + 878 => 0x4f7369706174656e67010a030106051e130604090a, + 879 => 0x456e6b696e736f6d736f6d010a03021c040d070b08, + 880 => 0x4c6567636869616b6265656e010b050203060b011c0d0f020c0c, + 881 => 0x4c616b6d616b010d0107081d0c0f060609, + 882 => 0x4b756b6c75700107021c0713060607, + 883 => 0x4d6c656e6b6c756e746c656e010f03040702080f170709060c0c, + 884 => 0x496e2048756e6701040301101b020d050709, + 885 => 0x27757777752701070427050e060607, + 886 => 0x4e657373696c73696c01020721010e060907, + 887 => 0x5a68617368697a6861010b0f0b060221140905090a, + 888 => 0x47696c6c757a68010e07250308040707, + 889 => 0x736c756e204b6c756e6c75730104010b050c02240910060c0b, + 890 => 0x4c75722d436f6c636f6c010b03081f050c020a08, + 891 => 0x4d616e69706f6c65010d0801020317071504080a, + 892 => 0x4d756f6b756f7365746573010108041203021b0d0b050b0b, + 893 => 0x4f70756e6b756b01060301200e0b050708, + 894 => 0x4c796973686574010301101c0414070708, + 895 => 0x516f7061740105061a090c020507, + 896 => 0x4e756e676e6f6e670105051204031f061205080a, + 897 => 0x466d756d6d6970666d756d010c01040320030a070b09, + 898 => 0x4e656e6b756d0110020625040f070608, + 899 => 0x55736f73756d010e0203150606020608, + 900 => 0x57656b6568010b03070806041e040a07050b, + 901 => 0x5261746465727a616201020f0206031a0b1404090a, + 902 => 0x4b696e65204e65706568656e0110031e0609020c07, + 903 => 0x4d75617769610108070301020e1e0e1507060b, + 904 => 0x556e6f706f706f736f6b656b010c0128010e050c07, + 905 => 0x53276f6e68756d70696d0107021f0606040a07, + 906 => 0x476973686d692044696b690110010308230915020b09, + 907 => 0x497327697375730104010406030222020902070b, + 908 => 0x6e652d4f6d010601020b060317120d06050b, + 909 => 0x4c616d7065736d656d7065730101031e0b11030c07, + 910 => 0x53756b6e756d0104022a030b060607, + 911 => 0x5975206765205a686f01030205260e05040908, + 912 => 0x45696e6965746c61756c010e060b0324060c040a09, + 913 => 0x54696475706972757a7501050402210408020a08, + 914 => 0x496e6764616e010601020804031e130f05060b, + 915 => 0x5069646970697473636869010701161d070e070b08, + 916 => 0x736d616d20536e61010c030401022a061007080a, + 917 => 0x50756467757a010f0e071d0508070608, + 918 => 0x55746d656d70696b73656d01070601021e0814050b09, + 919 => 0x756d2057756e010809040f0217121302060a, + 920 => 0x52696e2047756d6c756e01010301190506070a08, + 921 => 0x50756f6c6b75756c6e617577010704060302082c1506070c0b, + 922 => 0x54756c74756c74756c0107080701020622031005090b, + 923 => 0x53617473747574736e69740101061e1013040b07, + 924 => 0x526f6e67656b6e676501010f01080315070d03090a, + 925 => 0x57757079756b6f6d010208230b13040807, + 926 => 0x4e696e6b616d01050f010203041b071307060b, + 927 => 0x507961736e79616b707969740105030401220a0c020c09, + 928 => 0x54616d6d616e010a0304210410050608, + 929 => 0x4e696d6e696d736173650106020421170d060a08, + 930 => 0x5261676869010802010304280d1107050a, + 931 => 0x506173706173010d01280c0b020607, + 932 => 0x4e612061702027616e69011004060f011e0909050a0a, + 933 => 0x4d757373757301030c020401170b0a04060a, + 934 => 0x4b756e6b756e656d010f0607170a09030808, + 935 => 0x547363686f6b6b6174010f0b120f0c020907, + 936 => 0x4c756c69656c6965010d020103270515040809, + 937 => 0x6e6169204d75696a756101100f020801160d09020a0a, + 938 => 0x4c6965686c61706c696568010f041e050f040b07, + 939 => 0x536368757a736368757a010a05080602101b040c040a0b, + 940 => 0x52696c74616c73686973696d010106030102140a0d060c0a, + 941 => 0x4d65776574650109031c160e060607, + 942 => 0x5377656d737165770101030806250112040809, + 943 => 0x547275702d5072656b0101020608031a150705090a, + 944 => 0x50656e6b756e756e6f01090b05260d0a030908, + 945 => 0x436861756368617501060d030104240d0b07080a, + 946 => 0x4b756e6727756e676b696d010c02010b08041d030b060b0b, + 947 => 0x53656c6b6c6f6d010e03190c15020707, + 948 => 0x4d6f6d75706f270102010b0305022d020903070b, + 949 => 0x5a75657a61656c010d0301280211070708, + 950 => 0x5369797a687a68697962010f0806031d0610050a09, + 951 => 0x5065706f6d696d69010d020403280b08050809, + 952 => 0x4c756d6e756d6b6f010412040203190d1206080a, + 953 => 0x53716573716f7120526172010e121102210406040b09, + 954 => 0x476f6e736e756e0103031d0d0a040707, + 955 => 0x536368756967686569010c04031e0313030908, + 956 => 0x536f61736f61010606030704190a1106060a, + 957 => 0x4e61766e6176010d08060b03041e050704060b, + 958 => 0x5374696e70696e6d756d01060504020b031c0d08060a0b, + 959 => 0x507570756b656b616b61687501010b060201240906020c0a, + 960 => 0x4d616e6e6f6e0103010305200807030609, + 961 => 0x4d69746c696b0101030d1a0912070608, + 962 => 0x547573746f7a010e060401031d090806060a, + 963 => 0x4e69746f67010a06011b080c070508, + 964 => 0x536b6174706174747574010201020614281015030a0a, + 965 => 0x5469716b61776c6977010c010204260106050909, + 966 => 0x52616c72616c61726773696c010306011a0f0d030c08, + 967 => 0x57756d70756d010501070603021a070e07060b, + 968 => 0x47756b73676972010c0102030b04240f1203070b, + 969 => 0x486175706b696b0101040305190810060709, + 970 => 0x536175727375657a01090f0301160808070809, + 971 => 0x44657a6e6901070305070218080806050a, + 972 => 0x53686573682d536b757368010c0f010804230510060b0a, + 973 => 0x48617474697401060e030b110706040609, + 974 => 0x4d616c6c696e01080201031f0514070609, + 975 => 0x4d696e62756e636f6e010a04031d1012060908, + 976 => 0x4c756173747569746c756901060f0b030106270212070b0b, + 977 => 0x54756e7573616c6101020601030a1b040e04080a, + 978 => 0x4d616c61746b696e696d70690104021b0411050c07, + 979 => 0x47756b756b7563686d6f6d0105040302190f06050b09, + 980 => 0x4c756c6c75270110010c061b0d09060609, + 981 => 0x5377657773647577737a6970010a03050406021b0407070c0b, + 982 => 0x4f76746a756d7775726a65670107030801061f0c0f020c0a, + 983 => 0x4e6f6b6b6f756b6b656f6b0101030401180610020b09, + 984 => 0x4b61756e6b756e01100508100124080f04070a, + 985 => 0x4c6574756c6170656d6901080803140605070a08, + 986 => 0x556e67756e676f6c010a01060302190b0c02080a, + 987 => 0x55746f6c696c616d6173010b08011e0507070a08, + 988 => 0x4e61756e6d696e205061756d0102010826090a060c08, + 989 => 0x537962747962616b010d12040302200f0703080a, + 990 => 0x597975747979010d02180b11050607, + 991 => 0x42696b746f64204179010a0104030d0b17080c02090b, + 992 => 0x4962756c67010308120d0c040507, + 993 => 0x416d7069696d610101070124050b030708, + 994 => 0x546974696e6f70696b01060103020423061503090a, + 995 => 0x4f7274696c6f6c010e0c06030418070a05070a, + 996 => 0x4c6f73736f697373756f740107030201041e080f020b0a, + 997 => 0x6c756c702d576c27696c010f011a0f0f030a07, + 998 => 0x48612048616b696b69276575010a0304270311070c08, + 999 => 0x4b6f786269626b6f010e060c051f0a0d060809, + 1000 => 0x4b756d6b756d010102051d060f030608, + 1001 => 0x4d656e6775010e060301021e0f1004050a, + 1002 => 0x4e69206865204f010e0804211605040708, + 1003 => 0x4c696d6e696c0108081c0608020607, + 1004 => 0x55756c74757001070503020422021002060a, + 1005 => 0x4f6e656e2d64656d2d4d656e0106031f0806020c07, + 1006 => 0x4b616d6c6901080601030b081a050702050b, + 1007 => 0x4d616d666b697070616d01080403011a0f0c040a09, + 1008 => 0x4e65756e6e75656e65756d010d0403230308050b08, + 1009 => 0x5a756e6d6c696e0109010b070519080c04070a, + 1010 => 0x556c69706973010303040902011f040e03060b, + 1011 => 0x5775736c756b61010d020407081e0b0806070a, + 1012 => 0x5461206a69205275646a697201070f1c100d020c07, + 1013 => 0x6d6120536875726d75726d01060403062a0b15070b09, + 1014 => 0x54726f6d6e6c656e706c656e0106040701200608030c09, + 1015 => 0x53697774747501030103250413040608, + 1016 => 0x4567756469640106031d0609070607, + 1017 => 0x5573757377750109020c220a06020608, + 1018 => 0x47686f6e6768756768696e0110040e0503020c210a11070b0c, + 1019 => 0x4e72616b72656d0104031a0f0b040707, + 1020 => 0x68756e2d4e756e010c0104030f08210a0503070b, + 1021 => 0x4b686565777461616d77656501060f040b0102031d0f0f050c0c, + 1022 => 0x756b205368697373686973010802070a03220306020b0a, + 1023 => 0x4a6c656b6b696b0104020703011f090507070a, + 1024 => 0x4b6f737172656b6d756b0102020307011b0911040a0a, + 1025 => 0x4d656a70746f6a6b756a740109070302180307040b09, + 1026 => 0x446175747a68757a68627567010f03061c0d07040c08, + 1027 => 0x53696e6c696d73756e74696e010802031504010d230a14020c0c, + 1028 => 0x4d75736d75736e617272757601090203200f14060c08, + 1029 => 0x4f6e6f6e2d576f6e7275010d020803011c0a09030a0a, + 1030 => 0x4f646b657974010d0806231506040608, + 1031 => 0x47756f71756501030f020301110c0d06060a, + 1032 => 0x5371656e206e756e2053616e0105020301190708040c09, + 1033 => 0x4f6e6573656b756c657301070403061c1306020a09, + 1034 => 0x5574616d65747574010901240311020807, + 1035 => 0x4e776c73776c730108030107200a11030709, + 1036 => 0x4e727570746c6f74746c6f6d0101020103210e10030c09, + 1037 => 0x50756e27656d686f7570010902030d042a010b040a0a, + 1038 => 0x4d6f6c736c6f6d6d6f6c01080b02180a11070a08, + 1039 => 0x45776977697701011206170312060608, + 1040 => 0x4b61736e617a6e697a6d697a010f0203230412060c08, + 1041 => 0x4c6577736f72737361796977010f05030b220b0a060c09, + 1042 => 0x4f6e676e656d656e010b0104180c11040808, + 1043 => 0x576177616e756e75010b08020407011c0e0f07080b, + 1044 => 0x4b6f70652050656b656b010104020713011d0609040a0b, + 1045 => 0x5a69617a687573746f740104020301060b230907020a0b, + 1046 => 0x44756c646f72010d0308041a0711060609, + 1047 => 0x4b68656e6d756d010a04261912060707, + 1048 => 0x466d6f6e6b696e2d466d6f6d010502010807140c08020c0a, + 1049 => 0x536f6c736901090108061420070f04050a, + 1050 => 0x4e696e696e696e010b0f03041a0b0c070709, + 1051 => 0x4e6570656e65205a696d646f01070e01041a0613070c09, + 1052 => 0x536d756473750105021d0808070607, + 1053 => 0x4973686969010c01030405020616030704050c, + 1054 => 0x27616d6127776101070f04050326060d07070a, + 1055 => 0x4768617368010d0c15180b15040508, + 1056 => 0x4b61707461680105020104200414070609, + 1057 => 0x4b72696d7369736d72617001100402031a0714050b09, + 1058 => 0x4e6c696d736f6e6e6f6e01070306200b15060a08, + 1059 => 0x526968727574686174010d030205200b0c040909, + 1060 => 0x556b6e7275702d49736170010e070803051f090c070b0a, + 1061 => 0x4b656a6e610110040e0b0311080625131407050d, + 1062 => 0x416c6b6f6c6d6b656c6b010102220409060a07, + 1063 => 0x50756e6e6f70010703011d0608030608, + 1064 => 0x4e616b6b756d01080b1f0e11060607, + 1065 => 0x456e67656d74696e67656d0105080210031e030b050b0a, + 1066 => 0x68756d2d4b75686e756e616d010301020e031c120d020c0a, + 1067 => 0x54656c74656c6e6574010102030804061f0d0a04090b, + 1068 => 0x55726e68756d01070f01021c0a0d040609, + 1069 => 0x6b7574204e696d616d010803011a0809060908, + 1070 => 0x706f61204d6f61746b616f6e010f080b030204190711030c0b, + 1071 => 0x557a757a6368617a010d0e02230d0f020808, + 1072 => 0x546574736e6f6e73676f6d010d0323040d030b07, + 1073 => 0x4d6f656874756b010506261514050707, + 1074 => 0x696b204f6b61706b756e756801010203011a080c050c09, + 1075 => 0x53686963686162010306020515020f020709, + 1076 => 0x446173206b6c757a2044657301080c040201081f140f020c0b, + 1077 => 0x4d756b617264756e7775010a0204010f1c0c0a030a0a, + 1078 => 0x5469746b756b75010701200207020707, + 1079 => 0x417961796c7574617975797501100304011d0311030c09, + 1080 => 0x41776e61276177656c6177010b08071e080f050b08, + 1081 => 0x536c6f6d6c756e0107041003011f150b05070a, + 1082 => 0x547574756d757a6d6f010e0801041a0509030909, + 1083 => 0x4173756b756e6973010b030b16020f020808, + 1084 => 0x5573656b757301011608011d0514030609, + 1085 => 0x4d72756c736161742053757301010203220e0a050c08, + 1086 => 0x4570657465726572756b010b03011c0907070a08, + 1087 => 0x4e6f6e617520446f676f010301030b210608020a09, + 1088 => 0x4c6173756b756b010104010503230a0e03070a, + 1089 => 0x4f75777475776e6f757701090703270a07060a08, + 1090 => 0x4e7564707501070205210814060508, + 1091 => 0x4e756c7475706d7574010601030f0602190c1205090b, + 1092 => 0x486f70706f6b2d490106020603041d070f05080a, + 1093 => 0x4f6b746973656b01080103130d0f050708, + 1094 => 0x4b75616d697573617573010405060201130b06030a0a, + 1095 => 0x5269727269726d69796b7564010f02061f0c13020c08, + 1096 => 0x506f6b6e656f6e01020105250815050708, + 1097 => 0x4b697020416b01030102040306220b0607060b, + 1098 => 0x4c756e73756c6e6c756d010e05020306011c0614030a0b, + 1099 => 0x4c6a696e676e6a756e67010e040323050b050a08, + 1100 => 0x5572756e7574010d0208031d0e11060609, + 1101 => 0x5269696c696e72696b010d15030402071b060b04090b, + 1102 => 0x6d6f6d2050696e010b0a0406032a041006070a, + 1103 => 0x457361736973617361706f6b010d01060c0514031d0811070c0c, + 1104 => 0x546967687564657175010c030605190912030909, + 1105 => 0x4e616c6d696b01040318110c040607, + 1106 => 0x4d6170656b7501040306010425071403060a, + 1107 => 0x5568696b756b010f01080e0306250c0e04060b, + 1108 => 0x4d656f6d6d6565736f61010e080103021f0b10050a0a, + 1109 => 0x41736862617301090c03010415020903060a, + 1110 => 0x4d696b7069796b010f130f020b280d1206070a, + 1111 => 0x53656c756c7a656c736368010e010207041e090d060b0a, + 1112 => 0x4d6c656e746f6e746c696d010e0203220609050b08, + 1113 => 0x416e6961697a20496e6964010e0301150d13050b08, + 1114 => 0x536d6f6d70656e67010103021b070a060808, + 1115 => 0x44696f6b74756f647a75656c010d0203060f01260f08020c0b, + 1116 => 0x55736c656b6f6b6c6573656b010f03060201210b05020c0a, + 1117 => 0x4c756c6f6e010b031f0e15020507, + 1118 => 0x55746f6d6f6d756e6f730107010f200c0f030a08, + 1119 => 0x4275672057697a686475740102011a0b13030b07, + 1120 => 0x52696d6c696c72696d74696c0102030b021c0206060c09, + 1121 => 0x536368657363686768696f6c010206080103241706020c0a, + 1122 => 0x4c616c696e010e02010308041e091505050b, + 1123 => 0x4b6f756a6d6f7001040705020322040505070a, + 1124 => 0x6e69205265726d69646f6f01051202061e0310060b09, + 1125 => 0x457475706574010a010210060321091407060b, + 1126 => 0x4e6f6d736e6f6d010803042a020e030708, + 1127 => 0x4e696e72756e01070203012a050d050609, + 1128 => 0x546a656d746a656d7477756e010f0602200a15020c08, + 1129 => 0x4c77696c6c696c0106081e1008040707, + 1130 => 0x54696e74692d4b656b6974010d0c030401220d07070b0a, + 1131 => 0x4d656d65204d65706f746f010e02060108031c0a0c020b0b, + 1132 => 0x51696e676e696e67696b69010c04170d10060b07, + 1133 => 0x4f79757a6f7a68616e010c070302011c050903090a, + 1134 => 0x4173696b756b010b0f020103041e190d06060b, + 1135 => 0x517761616d776a61616d01100f150302200411070a0a, + 1136 => 0x4b616b6b6173010703040f1513070608, + 1137 => 0x41204e6179010b0203041a1112050509, + 1138 => 0x6e6f6f6b20416e756e0110151b0d09040907, + 1139 => 0x4d756c6b756e656d756c010403050f02240b0d030a0a, + 1140 => 0x496c656e756e616e696c6f6b01090102041d1005060c09, + 1141 => 0x53636862756e7362756d010a060302011c0814070a0a, + 1142 => 0x4570676f6b6c756b6b6c656d010e0106080e0319020b040c0b, + 1143 => 0x53726f736a75736e75736a7501050506200510040c08, + 1144 => 0x556d6f6f74756b6f6d20557001090403261009050c08, + 1145 => 0x4e65726e7077726e204f726e0110070302250210050c09, + 1146 => 0x4f6f6d696e010702131c0711060508, + 1147 => 0x4769657a686761757a68010a080106190e0e070a09, + 1148 => 0x54696469672d536769640105070304240a10050a09, + 1149 => 0x4e696d7361616e67010d0704010318071005080a, + 1150 => 0x557a6e617a68010f0b03060118060903060a, + 1151 => 0x5469706e696d2d48616d6174010e0603012b1109030c09, + 1152 => 0x4f676f73696d6f64010203062d1606040808, + 1153 => 0x50656d70696b756d010d03022a0709040808, + 1154 => 0x626574205a6f797961757301100823010a050b07, + 1155 => 0x536e697370616e7370616b69010a0104070203231413020c0b, + 1156 => 0x41706e7574756e0108080607250707030709, + 1157 => 0x4c616f6e676165766b6f69010c0403200707030b08, + 1158 => 0x27756c6b6f6c01030b0306021b0e0e02060a, + 1159 => 0x6b757a20417569616101080103210b09030908, + 1160 => 0x5475657461656b010502010403110b1006070a, + 1161 => 0x727573205a72756d01030f220409050807, + 1162 => 0x53676f7a73676f7a7367657a010503141c0415060c08, + 1163 => 0x45726e67657271010602170b0f070707, + 1164 => 0x5571756261717571010f1402031f0f11020809, + 1165 => 0x4b65736c756d01010106030e21010f04060a, + 1166 => 0x47616e736f6e74656e010605010f031d0d0a02090a, + 1167 => 0x556c616b6f74010e021306011c080e04060a, + 1168 => 0x5573696c7570757301050b030a021e0b1207080a, + 1169 => 0x556c62756c62727573010d0f0203220a0f040909, + 1170 => 0x4f6e656b6f7574010b0301061b0905070709, + 1171 => 0x5570756d696c6173010e03010f020821100c03080b, + 1172 => 0x4d656b756b6d756b010f061c070d050807, + 1173 => 0x557a6172757a68010803060220060a030709, + 1174 => 0x5370616d74756e010e04200605060707, + 1175 => 0x4d6f6b6d6f73756b0101061e0613040807, + 1176 => 0x506c61756e63687269656e010d0301260106030b08, + 1177 => 0x4d6970756b010703060f25030a020509, + 1178 => 0x546c65736d776f7470757001030306021c0a07040b09, + 1179 => 0x51616e676277616e670105030b0501061c0d0502090b, + 1180 => 0x42756c67616c010f0508210d05050608, + 1181 => 0x57756d27616e27696e27696e010b04030d011c0707020c0a, + 1182 => 0x55736e756d010b04020312230c1304050a, + 1183 => 0x4e697a2048617a010401040b0302230b0607070b, + 1184 => 0x536c696e696d01090805030122070d05060a, + 1185 => 0x536b75737573736b696b0101010b07041c0c0d060a0a, + 1186 => 0x516962696c7562696d610110010504080226050d060a0b, + 1187 => 0x5472756d6e6c756e010906011e0d07070808, + 1188 => 0x546f68686c61686568010702030824030e070909, + 1189 => 0x44696864690107060103240306060509, + 1190 => 0x42616d726f6e62616d726f6e010c0106031e0d05040c09, + 1191 => 0x6d75702050756f746d6f68010c01080b021d090d040b0a, + 1192 => 0x4769676973697369010b03180a12020807, + 1193 => 0x536e656b736b6570736c6f6b01100f0402011c050b050c0a, + 1194 => 0x4a6c6977646c69716d696a010b07011a0b05070b08, + 1195 => 0x4d756e696e67616d01060603191109060808, + 1196 => 0x5a756e696e756e696361637501080105042e0507050c09, + 1197 => 0x746568204d756b010304261212020707, + 1198 => 0x486f6b69776f77010504031f0a0d050708, + 1199 => 0x516f6d6768656e010c040206080305130c0506070c, + 1200 => 0x506f6e706f6e0102111d0715040607, + 1201 => 0x49696d6f696e2d6b612d496e01080203061d020c070c09, + 1202 => 0x536e77747374657473746970011008250d08050c07, + 1203 => 0x4b616c73696c6d010601031f0d07050708, + 1204 => 0x4b726f7473697301100320050f060707, + 1205 => 0x4e7563686e756368010607021f020b030808, + 1206 => 0x497227686972776e757201070102031d0807060a09, + 1207 => 0x4f7465736f6e6f6b010b0503010e250f0506080a, + 1208 => 0x43686e69666b696c0102040301230906070809, + 1209 => 0x4d616e796b6e6170010c011206031128041503080b, + 1210 => 0x4c6f696c6f69010d01021e030c070608, + 1211 => 0x4d696c6d696c010b08050204031d080802060b, + 1212 => 0x4f706c6574657401090603010727070f07070a, + 1213 => 0x5375736b7570747573010502120603011c031004090b, + 1214 => 0x5061686b6568707568010f020e031b070a070909, + 1215 => 0x4d6c696e6d69746d6c7573010f02010612031b0a10040b0b, + 1216 => 0x4c656c656c65702d556c01090403011f1215020a09, + 1217 => 0x456c73756c6c6f6c6c6f6c010606200407020b07, + 1218 => 0x536e696b7069746e697001080302200c0c070a08, + 1219 => 0x54756e756e7574750101040106031d090604080a, + 1220 => 0x4b656e646c6f6301030f081e0305050708, + 1221 => 0x44757161736f6c62626f710110050208031a0506040b0a, + 1222 => 0x456d616e67696e676976010805041d0e15030a08, + 1223 => 0x53756c656c646f6c67010e02200710070907, + 1224 => 0x536f7570736f75010b02031d100d050708, + 1225 => 0x4861756e6b6c756e0105020701030b18081305080b, + 1226 => 0x4b75277570656875010a040501111a010604080a, + 1227 => 0x4b6f6e6b696d657301060705030129011507080a, + 1228 => 0x4e6f6d6e6f6d010f06040f02031b051406060b, + 1229 => 0x446164616768616d01080206101e090d030809, + 1230 => 0x5a686f7a686e750102070d020b0817100803070b, + 1231 => 0x4e6965686965796e010204050201170c0e07080a, + 1232 => 0x53616e696e756b01030105080206260e1305070b, + 1233 => 0x556c756c656c626f72010e16021b0507050908, + 1234 => 0x4b6f6e7a6f6d010b0b060c240b13020609, + 1235 => 0x417270657274010f040608010220060e02060b, + 1236 => 0x4d6f6d6f73686d6f7364750110070603151a080c060b0a, + 1237 => 0x4b6968656b7501080403281008060608, + 1238 => 0x54696c736f6b010f0304021d0b11070609, + 1239 => 0x4d756d656e676d756e67010e0703010206220f0a070a0b, + 1240 => 0x54657a74757a74657a0108011f1e0e030907, + 1241 => 0x4f70736f6b01010a190e0d030507, + 1242 => 0x5961796d616779617901070b031a0410040908, + 1243 => 0x506f6b6e756b74656b010e03020a0f090a040909, + 1244 => 0x5061616f6e010503050602010c24050a02050c, + 1245 => 0x42616e6b696e206d7520517501030607030201210f09070c0b, + 1246 => 0x4f6f6d6e616c6d20496b010b0305140b08030a08, + 1247 => 0x576568776577010a0b02060103071e150802060c, + 1248 => 0x7367616e2d5379757a6801040401250b0f030a08, + 1249 => 0x47696761720102040f020728041203050a, + 1250 => 0x476f6d7a756e010c020f1503081f0b1003060b, + 1251 => 0x4b617273736972010c050601210911030709, + 1252 => 0x50696c756c746e696c010e07030201180a0703090a, + 1253 => 0x496c69727369726e010a031d0e05060807, + 1254 => 0x50696e69730110060203280113020509, + 1255 => 0x456f62776520757320496501020203210206020b08, + 1256 => 0x536f736c61010602080b03060e19120b04050c, + 1257 => 0x4e6170617475010101081e1309070608, + 1258 => 0x457364656b0105050203190f0c060509, + 1259 => 0x5374616e677370756d0103060315190e07020909, + 1260 => 0x5261756972696569740109140201210709020909, + 1261 => 0x656e20556d656c010e012b0b0e020707, + 1262 => 0x4b6574756b696b6b656b696b010502180c10050c07, + 1263 => 0x54656d69640108070b0f0203290c1503050b, + 1264 => 0x616e67204b756e676b616e67010b03220509050c07, + 1265 => 0x556e756d616e756d756d010d0e0d200d14060a08, + 1266 => 0x497964617161010b020408140f1c090b03060b, + 1267 => 0x53686c61726b686173010901040603290f1007090a, + 1268 => 0x6b756e2d4e756e0109010f03060421050606070b, + 1269 => 0x476c6f6e6773726f6e67010415020826030b050a09, + 1270 => 0x51757a6873657a6801090108041c050e050809, + 1271 => 0x4d65736e657301030602011e0814020609, + 1272 => 0x55676875640108030401240407020509, + 1273 => 0x6b6520446f737574757475010503021e0c0a060b08, + 1274 => 0x55616b204c696b0101010207040325050903070b, + 1275 => 0x5261736c75730807040302160c14070609, + 1276 => 0x4b696d6b696d6b6f6f6e67010501070304200b0d050b0a, + 1277 => 0x4768726f6e67676872656d01030802010603270e11070b0b, + 1278 => 0x496e696e6f6c0110040603011c090903060a, + 1279 => 0x4b756c27690102010305022b0d0602050a, + 1280 => 0x536768696c6b696b68010204030207240b0d05090a, + 1281 => 0x50756b74696b010a03021f0b06070608, + 1282 => 0x4d616d6e756e6b72616d010806180e07070a07, + 1283 => 0x4e6c75706e6c6f6e72616e010b040503140107200c11050b0c, + 1284 => 0x4e656d6b72756d0102100d03041c071306070a, + 1285 => 0x576c756b676c6967010e0f0c0b04030626030703080c, + 1286 => 0x4f204f6e6c6f6d7a6865616d010e0301080422010b060c0a, + 1287 => 0x4e6761617669010902010603170a0603060a, + 1288 => 0x4d6c69746e756d697401090402030628010c06090a, + 1289 => 0x4b72796e6b6f6e010f0b030e01230f1005070a, + 1290 => 0x546f737061696b6e656c010f02010305210909040a0a, + 1291 => 0x4e756d6b656e6e756e6e756d090401060f1117090b020c0a, + 1292 => 0x4e756c6b74616e756c010a0111230407040908, + 1293 => 0x4d7574756d6f6e6f6c750105050814060403170d07060a0c, + 1294 => 0x4e676573676501060306010b0821050a02060b, + 1295 => 0x6920536f206f20436875736801010307041b0c12050c09, + 1296 => 0x59696b696b010d0220080d070507, + 1297 => 0x49656d696e6368696d010603080c010612120e0a03090c, + 1298 => 0x6e6c616c204f73656e0107051e1505070907, + 1299 => 0x4c69736e65736e756b6d616b01060206200612050c08, + 1300 => 0x4b6c696e67010c010402190909040509, + 1301 => 0x4d756e676b696e67010e060322010b050808, + 1302 => 0x5065757475756d6c6f6501040802040307170707050a0b, + 1303 => 0x4d7974616e756c0101140504061b040d05070a, + 1304 => 0x54696e696e6e696d7469010b08020301042c1514020a0b, + 1305 => 0x4c69204c69746f73010b030201081d090802080a, + 1306 => 0x4a69696d6b616769010201110711020807, + 1307 => 0x496d73616d010e04011c0e0f060508, + 1308 => 0x41626f712d6f2d416b68010a0301250410070a08, + 1309 => 0x53756e73696e747573756e67010d0401031c070e020c09, + 1310 => 0x537a756c73727570010d0b0305120b0c050809, + 1311 => 0x476f7070652055011013010420050b070709, + 1312 => 0x4c756d73756d73616d010e0b03101409050908, + 1313 => 0x50696e697469204c75747501030324050b060b07, + 1314 => 0x4564204f79010f0803040b210f0d04050a, + 1315 => 0x506f6d20656d2053656e010e02050d210414050a09, + 1316 => 0x41626e7573010402010a1d1407030509, + 1317 => 0x4c696e6e7573756d010706010508041b080906080b, + 1318 => 0x4c616d696e6c610106031d0e09040707, + 1319 => 0x54756d6b757368756e0101030b02040826030e05090b, + 1320 => 0x4c75796d690106030102121b080706050a, + 1321 => 0x4b72656b6e72616b01100b03080122030f03080a, + 1322 => 0x4c756b7369730103030102200507070609, + 1323 => 0x4b756c6b65706b657001080203251810050908, + 1324 => 0x49736974616e67010c010f071a0706060709, + 1325 => 0x477573686c696b62656b010a0e050402031b0d0a040a0b, + 1326 => 0x53616c6f6e706974756e01050102071f0e11020a09, + 1327 => 0x4e61756e6d6974010d0e080222050a050709, + 1328 => 0x4c75752d612d556b75756b0110010306021e0d07040b0a, + 1329 => 0x4461736875010b070b04031d0e0e02050a, + 1330 => 0x536c756d7061616e0a0b030801060419141302080b, + 1331 => 0x4e69746c6974736c696c010a0f010427050f020a09, + 1332 => 0x4b6f6e6e696e676b6f6d010803060201180e14030a0a, + 1333 => 0x497a68697a697a0107030201250c09040709, + 1334 => 0x506f6c696c616c696c6f6e65010f030402160608070c09, + 1335 => 0x4d756b6c616b737573010f0501190b12030908, + 1336 => 0x486f7567706f7768010d031e0907060807, + 1337 => 0x4f727373656c6b656c6d010d0402031a0310030a09, + 1338 => 0x536971756e757269010808031e0914060808, + 1339 => 0x5375636861010903170a09020507, + 1340 => 0x556e75707567010b04060308070221060e03060c, + 1341 => 0x53757a6865736162610103030802190906020909, + 1342 => 0x556c6d6e656c01050608010324060d02060a, + 1343 => 0x5361656765696767696101100b04250a05030a08, + 1344 => 0x4e75204c616b01030102200705020608, + 1345 => 0x51656962206574204571010b08010203061e0608060a0b, + 1346 => 0x5562656e7a68697a7061010c0e210207050a07, + 1347 => 0x556d617375707570010f0b031e0b0d030808, + 1348 => 0x4e756b75736f6b01020201031a090c060709, + 1349 => 0x4b616e204e72696e74656e010a030d06011f0b0b060b0a, + 1350 => 0x506f2775706927276568010f0401080d1e0a08030a0a, + 1351 => 0x4f6e67616e670102060503041d0a1506060a, + 1352 => 0x4c75736973697061010e02031c040c070808, + 1353 => 0x5475766e676f766572760108011f040e040a07, + 1354 => 0x516f6f62726f7271776f676801010b02260807070c08, + 1355 => 0x456e656e706c656e7574010308130406031c0306060a0b, + 1356 => 0x53686e696d010e0108031d160e050509, + 1357 => 0x4c757777692777726927010803011d0d15020a08, + 1358 => 0x4f626f62656c6f6b616b01020f080323040a060a09, + 1359 => 0x4c7573736973736973010e021b0c12020907, + 1360 => 0x486f6e6b6f6e68696e010c02170205070907, + 1361 => 0x4c696d696d6c756e696e010704210b07030a07, + 1362 => 0x4d696c6e69706e6f6b010b03120815070907, + 1363 => 0x51696d7572697a7161746173010902260908020c07, + 1364 => 0x4e6f62204f7279756e010a061c050d020907, + 1365 => 0x53696d6c696b0108010604230211040609, + 1366 => 0x546f6c74656c6b74650108020703230e07070909, + 1367 => 0x54756b777562010f070108031d0b1307060a, + 1368 => 0x4765777220476f77010802080610141a050d04080b, + 1369 => 0x556e7573756e676e756d010e03010f0204101508070a0b, + 1370 => 0x4368696b6d726173010403040f0622171007080a, + 1371 => 0x417368776962676564796f6401040316080b020c07, + 1372 => 0x45726d657201090f0304012d0e1006050a, + 1373 => 0x4b616b6b656d010403150212040607, + 1374 => 0x4b6f6b6b69646b6173680106010703051b0b0c050a0a, + 1375 => 0x6b6f6b20536f6b7368746f6b010f020c070601240c09020c0b, + 1376 => 0x457365657a6b69010e02031a0c12040708, + 1377 => 0x5265736c75706c656c6c656c010a0c0601021f0615030c0a, + 1378 => 0x4e677573696e676971757275010b0308190f0b020c08, + 1379 => 0x4e6f696c6b6f61010d08030401260e0e06070a, + 1380 => 0x4f6d74656e70656e010406010205031a040707080b, + 1381 => 0x4b656b73706f73746f730109031501220a09070a09, + 1382 => 0x526567686e656275010906082d020a070808, + 1383 => 0x696c2045706570010b0b03010222070803070a, + 1384 => 0x456b616d6f010e03011f0d05050508, + 1385 => 0x497465746d756c204d6f740108020b240509060b08, + 1386 => 0x4c69756c61756e6169011004081a1207030908, + 1387 => 0x536973652d4b6f6b756e010f02010603271710070a0a, + 1388 => 0x4b616d686f77010d080104050624051006060b, + 1389 => 0x556c61716f737573756c01010d0403010e1c0415050a0b, + 1390 => 0x497661747573010f0b1b0814070607, + 1391 => 0x44617a6874736368757a0110040801020318040b050a0b, + 1392 => 0x536b61746b697401100307060421041106070a, + 1393 => 0x4f6e67616b6f6b616e67010f0c121b070f040a08, + 1394 => 0x4d6f736d6f7301070106032a0209020609, + 1395 => 0x517572656d6c6f676e676f76010c041d1010070c07, + 1396 => 0x4b6f6d65686f010e051a0515040607, + 1397 => 0x53696e7a6869736d6f7501010302062a0207040a09, + 1398 => 0x536564656368696d65010b031d0c0c020907, + 1399 => 0x48697777696b010606100103200e1306060a, + 1400 => 0x53686b756d73686b756d010f0306021d0d15070a09, + 1401 => 0x646f6f6c2055726e010a0207040301260a1402080b, + 1402 => 0x5a6f77757a750109010602030f1b100906060b, + 1403 => 0x53726f6e72696e6368656e0109020520160c060b08, + 1404 => 0x536c69736e6c696b010b012a1c11040807, + 1405 => 0x5361796e7579736b61011004030b010f13020707090b, + 1406 => 0x6b75204b7562747572010601031a0412020908, + 1407 => 0x4f756c6c6f7701040612060c070607, + 1408 => 0x4927657769276577010c03040b0106170b1004080b, + 1409 => 0x416c6d696a6c7075776d756c010c0b0e01020619090a030c0b, + 1410 => 0x536e616c736b75736e610107080501190d14050a09, + 1411 => 0x4d6f65706d75696d01100e0603041417020e02080b, + 1412 => 0x556b757961687579010f0402011b0a12060809, + 1413 => 0x556c6e6776756c010d0506030420061506070a, + 1414 => 0x456e616e2d4f70656e697001080603240811020b08, + 1415 => 0x55796579206d7577204c7577010608041e0706020c08, + 1416 => 0x4b617574737461746c61756d010405040203011d1014060c0b, + 1417 => 0x756c2d5574756b0104010323090f020708, + 1418 => 0x696a20416b7573616b616e010204060103220c13030b0a, + 1419 => 0x4967757562657a756e0109010b031f0508060909, + 1420 => 0x5370656b7475736e65010e030102220b14040909, + 1421 => 0x4d7574656b0108050201030f14060e07050b, + 1422 => 0x5475747475746b7574010f0b0208221407030909, + 1423 => 0x4e756e756d61010906010205030e23111003060c, + 1424 => 0x4c69736d616b7369737465010d0b0320070e040b08, + 1425 => 0x4368756d6368756d0104010b23040d060808, + 1426 => 0x4e656c6b757073706f7001010703050201180a0f020a0b, + 1427 => 0x42617a62652059657368010b020508031b0e0a070a0a, + 1428 => 0x4d616d6d696b6b75706b7570010101030d0402250508030c0b, + 1429 => 0x4f72696c7573696c0104020321050a020808, + 1430 => 0x55706174697401030b1c0706060607, + 1431 => 0x4b6f7374696b74696b6b696b010604200e11030c07, + 1432 => 0x4c697374697420506974010b10030f020b061a0d0b020a0c, + 1433 => 0x486c75276e72692727726f2701020f0208011f1606040c0a, + 1434 => 0x6b65702d4e697468696d01010e03250c10040a08, + 1435 => 0x4b7573736b75736b75700108011c0d12030a07, + 1436 => 0x536f616c7061696b6c616c010b031c0713050b07, + 1437 => 0x53756e73616a010203190811060607, + 1438 => 0x4e75726b616d74696a01030f03060125020a06090a, + 1439 => 0x536169746975772d4d75617201030f1504050624100c070c0b, + 1440 => 0x4d75706173696d61010708030406021c061106080b, + 1441 => 0x4b61776e6368696c010d0b0501190b0b020809, + 1442 => 0x536f6e7369010a050201230c15020509, + 1443 => 0x4461686461680105040203071f0e0d07060a, + 1444 => 0x6e656b204e756b6e756b010310020103071f0606040a0b, + 1445 => 0x53692d6d6f6b2d4d6901030801021d020d070909, + 1446 => 0x52696e746f6d0106020b1e0b15030608, + 1447 => 0x556c686b696e010a030201281513040609, + 1448 => 0x536169717361757701010804140306021c071006080c, + 1449 => 0x4d616c6e73696c7361010c1602030618130702090a, + 1450 => 0x7369204e696e696e75010c0103021d040a060909, + 1451 => 0x506570746f6b656e696c01040320040b050a07, + 1452 => 0x5a6875696d696170746f75010b06070302240f15040b0a, + 1453 => 0x4c757a6e75736d697a010d04210f11070907, + 1454 => 0x4e7568756e610105030e020b210a0505060a, + 1455 => 0x5a7575736f6f74656f010c060504031d0d0f02090a, + 1456 => 0x4d6f7370756c736c69010804012e1009050908, + 1457 => 0x45776172697301020804020526041406060a, + 1458 => 0x4c7573706f730110080402180407050609, + 1459 => 0x5461747075696e6b69656801030304230a14070b08, + 1460 => 0x4b61756c756b010c0214031008170b0f03060b, + 1461 => 0x54616865747465746f0b0101020406031a050506090b, + 1462 => 0x5367656e73776f6e01080103061a0610040809, + 1463 => 0x50656e70697374696d706973010d01070305041f070c040c0b, + 1464 => 0x546f6c6e6f6c747574010c01281206040907, + 1465 => 0x4e72656e6d72656e6272756e010c030602041d0706020c0a, + 1466 => 0x49726c6f6e010b0503080e1f150e02050a, + 1467 => 0x54616a742d5572010107010411031c0b0904070b, + 1468 => 0x5075756e6c6101090401060302071c091506060c, + 1469 => 0x456b69686974696d6f6e010203260111050a07, + 1470 => 0x6c75205a687572756c6173750101081a110d050c07, + 1471 => 0x557570616c6f696c010901070322040d040809, + 1472 => 0x4b756f736175706d616f01060b211814050a07, + 1473 => 0x476f64617368616461010704030b0123020904090a, + 1474 => 0x54756e70656d010b0201030424141202060a, + 1475 => 0x48756168756170697570010f0701030602310b0d060a0b, + 1476 => 0x54616262656162737572010f02010603160a05060a0a, + 1477 => 0x53696f7a6865696d010303021221100b070809, + 1478 => 0x536f726f710103061d0d0b060507, + 1479 => 0x496c68696c01070204260d08070508, + 1480 => 0x4c616b657365730105030601021a050707070a, + 1481 => 0x4e6761204a650105070204011c0d0f05060a, + 1482 => 0x4f6c706f6b6e756e010e0401022b0506020809, + 1483 => 0x416973652d75732d4969010b0102071e0506040a09, + 1484 => 0x47696b67696b7a617a68010f0b01060f0c1f0f14030a0b, + 1485 => 0x4e696e756e73696e010f040103200e0a070809, + 1486 => 0x4e61686e776174010a0302010419050906070a, + 1487 => 0x6c697a2d417861786178010c020319090a060a08, + 1488 => 0x5368616e7368616e010b05240a13030807, + 1489 => 0x5961756b797269657901090115080a040907, + 1490 => 0x45696d656d69656c656d61680106020306120613030c09, + 1491 => 0x4d696d706f6e010b030124030b050608, + 1492 => 0x417a61637562656a01040603010820020a06080a, + 1493 => 0x5520652055756e75011002010a241112020809, + 1494 => 0x4b696e204969010f0302060827110a03060a, + 1495 => 0x4c6927616c69010402061d0c13070608, + 1496 => 0x54696d6d75676d69010d0c0102251314040809, + 1497 => 0x536c7573686c757a010f0c0302061a0b0a06080a, + 1498 => 0x4b756b6f205501030104071e0308040609, + 1499 => 0x4b616e6c756e68756e010e0e260406040907, + 1500 => 0x41706b616c2041706f6c010c07010302240d08040a0a, + 1501 => 0x42696b62726973010c03012b030e040708, + 1502 => 0x6c616e2059616e71756e01090103230910060a08, + 1503 => 0x55737575736e61736d75010a02080618080b040a09, + 1504 => 0x54726968706c61740101040215050e070808, + 1505 => 0x53656b7075746c756b6b6f6c0109050b1c1a12020c08, + 1506 => 0x4b697370696e010f061a0909070607, + 1507 => 0x4d61696d656f6d6d616574010c0304020b082a0208020b0b, + 1508 => 0x4f6d6f736f6c6f74010a030b010f1a0a0703080a, + 1509 => 0x4c61696d7465617074656170010a03010f1b0606040c09, + 1510 => 0x4e616d70696e010d06041403011d031002060b, + 1511 => 0x4e6961736f697301080204031a0b11020709, + 1512 => 0x496b65736b756b696b0103131b0e07070907, + 1513 => 0x4e796b6d61736d61736d65010c020321080e020b08, + 1514 => 0x53756e64756e64656d6b616d010f03200a08050c07, + 1515 => 0x4c616e6e6c616e6c6f6e010904140f02211415030a0a, + 1516 => 0x47686c756b6b6c696b010d040323030f030908, + 1517 => 0x456e746f6e206f20456e6b6f010d061e0514050c07, + 1518 => 0x27726f7327756b0c0804030805010624050803070c, + 1519 => 0x546f74617475010903060508011c040803060b, + 1520 => 0x45696d616d61756c6175740101020306150506060b09, + 1521 => 0x69732d4174756b6f6c0108020301240a0e040909, + 1522 => 0x4e6f6d6f206d61204c6f71650103061d0a05040c07, + 1523 => 0x5577616c61776f68010b030201160814070809, + 1524 => 0x556e676176757101010403020b011f090505070b, + 1525 => 0x4b756e6e75776c696e0105011e1011070907, + 1526 => 0x53696d6b696e6b696e0108010518080e070908, + 1527 => 0x536d6f6e204e69736d696d69010f01150e250514070c09, + 1528 => 0x4b69776d696c01090603040214061205060a, + 1529 => 0x4d696d696d656501100203250211020708, + 1530 => 0x506c616d6b6c616d010912021f0b06020808, + 1531 => 0x4972205069726269727301020d06010324020d020a0a, + 1532 => 0x6c612054750101010b04230b0d070509, + 1533 => 0x4b69776f20526172690102060103210611020909, + 1534 => 0x4368616e6d6f6e6368616d01040b030108210c0a040b0a, + 1535 => 0x4e72697a686e697368010d03060504072c131106090b, + 1536 => 0x54657572726f73010702031d0714030708, + 1537 => 0x4e756b6d75010f0501180408040508, + 1538 => 0x47656d7574650110060803011a050f06060a, + 1539 => 0x5372756d746c696e706c6f6e011003060204081f0411060c0b, + 1540 => 0x4b75736b6f72730104081d1710040707, + 1541 => 0x5a686c696d01080603010e25040a04050a, + 1542 => 0x53696b696b73696b696b010501150910020a07, + 1543 => 0x446974646974657a0104021a0f13040807, + 1544 => 0x5372657a6873726f7301050112020c17111504090a, + 1545 => 0x4d6171616d756e626173010a03020104210813020a0a, + 1546 => 0x55726368656c7a696c6d696c010302030104220406030c0a, + 1547 => 0x656d20546f7068656e010b07030d041202130d0a02090c, + 1548 => 0x546f6d6e756e67010202210413050707, + 1549 => 0x4d696d69736c696e657374650106020801030b04231315020c0c, + 1550 => 0x506f6b696b616b6b69770107021f120f020a07, + 1551 => 0x557275726e6f726d6e6172010c02080601220710040b0a, + 1552 => 0x49736269740110010804020305190d0703050c, + 1553 => 0x4d6c6f78736f73010b031c0513050707, + 1554 => 0x536b656e6f736e6f010403161a090c060808, + 1555 => 0x41676873756d676865726b010c02061d0b13030b08, + 1556 => 0x4d6f716f616169746d6f0108072f0d0e020a07, + 1557 => 0x4962656b756d0101040123030e070608, + 1558 => 0x556c756c616d616d010d0e0503082b020603080a, + 1559 => 0x4e756c206d6f6e20546f730102041f0d0c040b07, + 1560 => 0x546f617474696b010d0b0102251607020709, + 1561 => 0x556e6f6d69276927756c010706230b14020a07, + 1562 => 0x486c65746865686b6c756801090b1d0f0b040b07, + 1563 => 0x416b6f68756e7527010104080106050f02220c0507080d, + 1564 => 0x50616e2769656e010b050611031b0b0d05070a, + 1565 => 0x417267617267687562010a08040201210d1103090a, + 1566 => 0x4b7979706b776968010d0e0302010b0f0a200a0806080d, + 1567 => 0x55737574617201090304021e040d060609, + 1568 => 0x6a756420476c616e6b616701020201030f0a07050b09, + 1569 => 0x4e7570206b7564205375670106030601081c0407040b0a, + 1570 => 0x506c616e73756e6c756c757301020e0104071b0514020c0a, + 1571 => 0x416e6e616e70616d616e010a01030b02051b020c030a0b, + 1572 => 0x416d6d696e696e010202030108041c0d0f03070b, + 1573 => 0x4c7761756e7368776f6e0109061a080d040a07, + 1574 => 0x506c6f6d756d0101020604101e051006060a, + 1575 => 0x506f706f7375706f01010701032b0b0b040809, + 1576 => 0x53696e676d696b6173696e6701090f010324040f040c09, + 1577 => 0x4e6c69706d6c7573010801060f03051c0a1003080b, + 1578 => 0x4b6f6e6f720102010610050c0b1c140505050c, + 1579 => 0x56696d6d656e706f6e706f6e010104020306011c0509060c0b, + 1580 => 0x51616b6c6a756a676f6d010f04060f021e080f040a0a, + 1581 => 0x4d6969706b6174010e0f180811030707, + 1582 => 0x4d756d707574010909050e010220081103060b, + 1583 => 0x48616b68616b696c6b6b61740109041e220d020c07, + 1584 => 0x536871616e01030d021b0f06050508, + 1585 => 0x5579756b686579010a0803041e0a0d050709, + 1586 => 0x436869726e77757a6d6c697a01020708060123080c070c0a, + 1587 => 0x416b616c6977756d616c7577010d01030226090d050c09, + 1588 => 0x7775642d446f74010e0105180414030708, + 1589 => 0x2765657769010b0203011a0b11060509, + 1590 => 0x47726963686769656d01030406160b0a040908, + 1591 => 0x47617a6567617a657a6570610106070301020621070b020c0b, + 1592 => 0x5a616b6d6f736e6f6b0109030f290613020908, + 1593 => 0x5a656b62656b0106150320080c040608, + 1594 => 0x4c656d6d6f6c6d6f6c010f02010306081c080e07090b, + 1595 => 0x4b6f6b616b6f010e0708010225071005060a, + 1596 => 0x487269686865706f6d010e060e020421041203090a, + 1597 => 0x54657368676f730105041e0414030707, + 1598 => 0x4e756e61746101090107030b20030703060a, + 1599 => 0x4d65706b616b010d030508200b0f020609, + 1600 => 0x4a75726e67656c730108141f0613060807, + 1601 => 0x4568656d756d010206040307240e1306060a, + 1602 => 0x4b6f6d696d75696a010a0601031b040a040809, + 1603 => 0x4d696e736e756e676d696e010d03010e200605070b09, + 1604 => 0x4775747363686b72756c0107030823120d040a08, + 1605 => 0x4d616c696c70616c01030403070605180e0e05080b, + 1606 => 0x4562656c6b6c656a6d010d0203210606050908, + 1607 => 0x4d65736b72756b78757301090201030508210f09070a0b, + 1608 => 0x4b696e656d616e6568696b65010b040203161c0c030c09, + 1609 => 0x53696c74696c010805010302081d060806060b, + 1610 => 0x536d696e676d696d01090308050604240e0b05080b, + 1611 => 0x52696f6b2052616f74010502031f0911020908, + 1612 => 0x556e756e696d6172010301031d050f020808, + 1613 => 0x50617369736c696c69010b060104031d0a0507090a, + 1614 => 0x45656e6b696d6c6f6d0106040103190711060909, + 1615 => 0x54696c6d616c737572730108030405250912020a09, + 1616 => 0x64616c2d44697272756e010b01020506190509070a0a, + 1617 => 0x43686f6f72706d6f6c736801080408030601150b05070b0b, + 1618 => 0x53686d6f747368746f6b65010b0402031f0c0f050b09, + 1619 => 0x556e67756c656d010d0b07030128031105070a, + 1620 => 0x47796f626277757162776f70010e0208041e0211050c09, + 1621 => 0x4d757474656d204d7574010303190808020a07, + 1622 => 0x49736d656c736e65796e0104080502031f040b020a0a, + 1623 => 0x4f6a6b756c736d69726f6a6b01060503011a0107050c09, + 1624 => 0x4c75276c75276c696b69770103010603021a0f10030b0a, + 1625 => 0x446f6d7a68697368656d01080703020e20100b060a0a, + 1626 => 0x54616b73726f6b0101021b0707040707, + 1627 => 0x4b69626173610103060402032b191307060a, + 1628 => 0x4d756d6b616d6d756d706f6e0105060b04051d0c06070c0a, + 1629 => 0x7374616d2d536f73736c656c0107031e0709020c07, + 1630 => 0x54656d656e696775010c03131010020807, + 1631 => 0x55736d776b010806031c080b040508, + 1632 => 0x4161656d7461616d650108031f0b10040907, + 1633 => 0x536c656e6b696e010e0406230805050708, + 1634 => 0x55727368756c67696d010c0204030128161504090a, + 1635 => 0x6d6f2d4d6f6e676c696e67010c02030f13190e050b09, + 1636 => 0x4261776861680101010b020327060e06060a, + 1637 => 0x4e6c696e6e696d6e6c756e01020601040d03260407050b0b, + 1638 => 0x5372616c67656d76656c010e010308040b06210510040a0c, + 1639 => 0x5365706574010a0102032a1906020509, + 1640 => 0x536f67736869736a756a01070106030227040f030a0a, + 1641 => 0x4e756d6d616b68756d010d03071e040b060908, + 1642 => 0x497761726977010903170c08060607, + 1643 => 0x48756d6f6d0105040b0108030522090506050c, + 1644 => 0x53756b6d696b0107060f020301111a090506060c, + 1645 => 0x53686e757373686b7574010706010321050b060a09, + 1646 => 0x4f6b656e616e756e6574010c0302280214070a08, + 1647 => 0x466c6f7366747574666c6f73010e0115200505060c08, + 1648 => 0x4f676f6769736f670101080602190412040809, + 1649 => 0x4c616c616d616d6d616d0d06010302210c11020a09, + 1650 => 0x5579697975796c01050b040327080c020709, + 1651 => 0x51616a6573696c75010304011f0311050808, + 1652 => 0x457074726f6e6e676967010503180907040a07, + 1653 => 0x4574616d65610107040f021f0b05060609, + 1654 => 0x4c6f70736f6c01010402030524080805060a, + 1655 => 0x4172646368697264010108010402051e0e0907080b, + 1656 => 0x4b6f6e20696e204f6e011003260315020907, + 1657 => 0x57757377757379697301080302071c0d10040909, + 1658 => 0x5665756e6770696e67010806011d0812050908, + 1659 => 0x536f6e67616e01080603020b0e1e011402060b, + 1660 => 0x4d69656b756e61756e69010303010221060d030a09, + 1661 => 0x5a756c6c6f6c01050402030807180e0f02060b, + 1662 => 0x4772616d6b756d0104130118090b060708, + 1663 => 0x4d72617473756e706c6570010602140603251010030b0a, + 1664 => 0x556e756d2050756d756e010806080104170c0d070a0a, + 1665 => 0x48696e6d7570666d756d010801060307250a11070a0a, + 1666 => 0x47696e6b6c61736368010d03290207040907, + 1667 => 0x57616b2d4c6f6b010d020321030d040708, + 1668 => 0x5574616b2d6f782d4973656b010c0302141c0d0a030c09, + 1669 => 0x4e756e696e6974796d756b6101030302180b0e040c08, + 1670 => 0x4e656e6e6c6f6e010d0304220e0e060708, + 1671 => 0x65742d4979707571010f03200812060807, + 1672 => 0x4163686163686962010c060104191410050809, + 1673 => 0x5475736b69727301050b180513040707, + 1674 => 0x516f6e756d73756e010703210b05060807, + 1675 => 0x536c6570706f740108030212261812070709, + 1676 => 0x556b756b6968010e04060802210b1104060a, + 1677 => 0x4570746574206f6d20556b011003190d13040b07, + 1678 => 0x4b616e73616e0103020f180711050608, + 1679 => 0x5769277363686d6970010a0116080a070907, + 1680 => 0x4c657075756b657770010e050b04030124050506090b, + 1681 => 0x536d75716e6f717367756e67010701060d211410020c09, + 1682 => 0x4c696d6c656e73616d01030403020e0b22050e04090b, + 1683 => 0x5572616a616a01010307200e11020608, + 1684 => 0x44756b656e7169726d010b0607031f030e030909, + 1685 => 0x4b69706d696c68010902030d1a1109040709, + 1686 => 0x4d6c696e6e656e68696e010d010f1403051e0609020a0b, + 1687 => 0x4d6f6e73686f6e736b756e010c04240310020b07, + 1688 => 0x6761692d5a6f69010408010b1f0e05060709, + 1689 => 0x54696d74617401060307081d0b11040609, + 1690 => 0x4d69756d69756d0109110302230310060709, + 1691 => 0x5072756e7072756e010f0207200f0b030808, + 1692 => 0x4b696c6c617401020103080221030706060a, + 1693 => 0x4d6f74736368746f6d6e6974010a1503021d0b0e040c09, + 1694 => 0x48696e706f6d746f6e74756e010c020401071d0c14060c0a, + 1695 => 0x48696c6e74696c7070696c74010f01230205020c07, + 1696 => 0x52692d52697361747261740106060401032d1107060b0a, + 1697 => 0x4968656d6b756e010c010206031d0d0507070a, + 1698 => 0x4d61697074616e6e616168010402011e0606020b08, + 1699 => 0x6f6d204972736368756768010d060208031a0b05050b0a, + 1700 => 0x276c616e6e696d6b616e010601190d13030a07, + 1701 => 0x54696e696e736901060320100a020707, + 1702 => 0x496c6d616c746e756c6b0101031f1307050a07, + 1703 => 0x4f6b656c61647570656c01080f040327090a060a09, + 1704 => 0x53756d6f6b6f6c61010c01030802200d0c03080a, + 1705 => 0x4f6c6f6c6f6b010f02041003190e0504060a, + 1706 => 0x486f736973011001021f020b040508, + 1707 => 0x476974627775636801100206210912060808, + 1708 => 0x4768756768756267687501010603211014070a08, + 1709 => 0x54756d692d4d757675716501030210031c040c030b09, + 1710 => 0x77616d204e77696e6e77696e0106070206081e040a020c0a, + 1711 => 0x426f6c6c756b646562010b031d0c0d020907, + 1712 => 0x6e75732055736e757a010311280913070907, + 1713 => 0x4e7570666c757320536c6973010f0301050208210513020c0b, + 1714 => 0x4c61616d74616174696c0109020305230d0e060a09, + 1715 => 0x496c696c686172700106060301230d0e050809, + 1716 => 0x4e6f73617701090b08040211030507050a, + 1717 => 0x67696368204d6967706167010d070401120f0e040b09, + 1718 => 0x417220457269670106080502240e05070709, + 1719 => 0x496d6974656d0102030e151107050608, + 1720 => 0x53756e6b756e6701030516030704021e0c1305070c, + 1721 => 0x556c6f6b757301060306020417090c06060a, + 1722 => 0x4369736964616c75010e031e060b030807, + 1723 => 0x546f6e6d6f74010f020326080e070608, + 1724 => 0x45656b6161747465656c0108030c220c0d070a08, + 1725 => 0x536b6f6d776f6e010705040c0302260f0a07070b, + 1726 => 0x456b6761737573756b656b0104010226100f040b08, + 1727 => 0x4e6963686e7572010802040315150e040709, + 1728 => 0x4f7a68756c7570756368010e03250e0c070a07, + 1729 => 0x4b696e20506501060201070603230b0e02060b, + 1730 => 0x696a2d4e616a6e756a010e071502031f030f02090a, + 1731 => 0x476f7367697374756f74010d0223030d060a07, + 1732 => 0x5075616d61696c69756c010908021c060c050a08, + 1733 => 0x4b656b79756b6b757370756b010a06031a0310050c08, + 1734 => 0x49726b756b0107030212210909060509, + 1735 => 0x4c696e6c75726d6c697001060201060c251413020a0a, + 1736 => 0x736c6f6d204b6f6e67010e040301181106020909, + 1737 => 0x4c657065276570707570010302030b0623100c070a0a, + 1738 => 0x5375796567010c0b02031d0408020509, + 1739 => 0x536c697727692d5368696869010c0402030e1c0a15020c0a, + 1740 => 0x4e6a757570686a6161270105030b02050d06291412030a0c, + 1741 => 0x4e696e656e6e6174010a0301060e19091105080a, + 1742 => 0x516f7278646f78646f6e756701080601040302210412070c0b, + 1743 => 0x4c6f73706974010c08030223140f030609, + 1744 => 0x5a68757a6801060104230a0d030508, + 1745 => 0x4e697474696c010c0801230405030608, + 1746 => 0x4d756e6b616e6b616e6b696d01010107170a0b020c08, + 1747 => 0x5368696b7368696b010b0d0803200c15060809, + 1748 => 0x4b656e756b656b65010d01080f02050325080f03080c, + 1749 => 0x5075726c6f736f736b6f01080504011e0405020a09, + 1750 => 0x4c656b656c6d010511031d050d060608, + 1751 => 0x74696c204e6f6e756b0106030415070218071303090b, + 1752 => 0x496b696b6974696e616b01020802031a060f070a09, + 1753 => 0x4b7573756d75746175737501040f1b1e12060b07, + 1754 => 0x4e756e756d6f796d6e756b01070412080d070b07, + 1755 => 0x4c6f6c6f204c75736e75010405060802011a0d11020a0b, + 1756 => 0x4a756768626974010d020306011e051403070a, + 1757 => 0x4d69697074616e7461616b01090306010418050e030b0a, + 1758 => 0x5567756775707570010e06070b0205041a060702080c, + 1759 => 0x416b656b616b01090204060108190e1303060b, + 1760 => 0x536861687368756801090213010321060605080a, + 1761 => 0x4d7572696e7463686501040803021d140d020909, + 1762 => 0x47696e73756e010d050304200712020609, + 1763 => 0x4e696d6e6f6e010401250b11040607, + 1764 => 0x536d696b2d6b756d2d4e616b010d06050304210b06060c0a, + 1765 => 0x4b696d756461010403080e24140a060609, + 1766 => 0x4f7361736b6f6b010c0406240611050708, + 1767 => 0x5572707361727a010d0504031d0614040709, + 1768 => 0x4b696c6b756c6a75010e0701031c100d030809, + 1769 => 0x4d697a68617277756e0101110201260208070909, + 1770 => 0x4e6f6d6c696e6d6f6c6e6f6d01020f04210811020c08, + 1771 => 0x4d6f6d74756c68010e01080f0320021307070a, + 1772 => 0x53716f716f726f79716f01070f0102030d240a05070a0b, + 1773 => 0x44757273756261720102060f03040124051402080b, + 1774 => 0x536f75707375616d010d0b02050f24061006080a, + 1775 => 0x4a69746c616768776977010806230a08020a07, + 1776 => 0x4e656e6c6f6c6b616b6f6b61010c0208031f0107030c09, + 1777 => 0x4c65736c696c6c696c6c6f6d010d091f0713050c07, + 1778 => 0x4e67656b6e67656b01040c0408240714040809, + 1779 => 0x4e65757074756f6e74756f6e010e0e02030804200211070c0b, + 1780 => 0x5761727061687572010a0b01031a090f070809, + 1781 => 0x4e77656c65617174756576010d0b171012060b07, + 1782 => 0x556c6d6f6e010a0302010817080607050a, + 1783 => 0x49737573697a6973697001070d06051d0f05030a09, + 1784 => 0x4b757a6b757a010210011a0708030608, + 1785 => 0x4c65716f6a65736f706a650108010a03191108050b09, + 1786 => 0x4e676f6e6775766f74616a010e0602011021070c060b0a, + 1787 => 0x4b696e6d6a696d0108020301270a0c050709, + 1788 => 0x496d6b6f6e204e756e6501010b020e0308140913030a0b, + 1789 => 0x55687a757267756c6d010c03140f0b020907, + 1790 => 0x50756d6f6e0107011e0909030507, + 1791 => 0x4d656e676d656e67010e030801180813070809, + 1792 => 0x6c6f7420596f79746f6b0104030e0220010b020a09, + 1793 => 0x496e6d756e6b696e670110010b06031a060707090a, + 1794 => 0x4d75736d697a010e021c0312020607, + 1795 => 0x50756c70756c7469010b0602032a0e07040809, + 1796 => 0x537475736c6f73010404160e10020707, + 1797 => 0x4f6c73696d0104040f010825031204050a, + 1798 => 0x576972276d7577276577757901070e030821060e070c09, + 1799 => 0x49736c756b6b7573010f0b0f0702030422100a03080c, + 1800 => 0x4177656d7567010c080d1d0f15050608, + 1801 => 0x506174746c61700104020b0604031f1a0e07070b, + 1802 => 0x4d696e677368756e676b616e0110010602170606050c09, + 1803 => 0x496d756d616e010a0b220f07050607, + 1804 => 0x49626164696d61706167010a031507050119030e040a0b, + 1805 => 0x6c756c732050650101070403190b0c030709, + 1806 => 0x4b75726d69204b75720108160217030e070908, + 1807 => 0x556275206e7520456e756e010107040b03190f09060b0a, + 1808 => 0x556b756b757475700105030201251214040809, + 1809 => 0x4b6f73706f640101010506071a0f0707060a, + 1810 => 0x446964696c69010f010b0506021b0c0803060b, + 1811 => 0x4c75756c61696e6c61696e0102060302011e0806030b0a, + 1812 => 0x5a686f626b617a68010e0b021d0d0a020808, + 1813 => 0x547574757469010608020518030f020609, + 1814 => 0x536368747573736573010e06270506030907, + 1815 => 0x4e756d737065010506180506060607, + 1816 => 0x4b656e70796e010208030b1c0a0f020609, + 1817 => 0x5a6f656e65010301230a13070507, + 1818 => 0x49206d6162204167626161010a01080a0304200613030b0b, + 1819 => 0x4c75707a6969010f010314271b12070609, + 1820 => 0x4b65796d6d61796d6e6977010401030b041a0d09030b0a, + 1821 => 0x43686c6f6e7368616e6b6f6d01040104021f0809070c09, + 1822 => 0x54756d736d61747461746d69010d0104180f0a040c08, + 1823 => 0x4d696e74757474617574010603211012020a07, + 1824 => 0x486f6d7568756c010c02260e0c030707, + 1825 => 0x457020496c6e697474656c0109020406030824180e060b0b, + 1826 => 0x536b757374757301090f03080224110603070a, + 1827 => 0x4179766f797965770105060203220512070809, + 1828 => 0x74756d2d4b61726e6f6c01090401200314070a08, + 1829 => 0x556d756d696d010f03211215050607, + 1830 => 0x4b75616b75696e6b756174010805030f021201230a05050b0c, + 1831 => 0x4b65786b6961640101030120030c050708, + 1832 => 0x556c6f742d4f706970010601140a0e030907, + 1833 => 0x5a686c75676e616c7a6c75670101010b021a0f14040c09, + 1834 => 0x7065204d7570010b030b2c170c020608, + 1835 => 0x536b756b7374656e756b010b060105031a0d06050a0a, + 1836 => 0x54756e6f742054757573010403190a06040a07, + 1837 => 0x4d697363686e61736368010a030f1f0911020a08, + 1838 => 0x536e656e6d616d7465740108010308021d0506070a0a, + 1839 => 0x426c6161736873686c75756401040d08011e0b0b070c09, + 1840 => 0x51756d6b616d67756e0107010306021c010703090a, + 1841 => 0x50616d696d757061737501050804020703010627090e070a0d, + 1842 => 0x4167697267010501180b0b020507, + 1843 => 0x4277756e7472756e6d756e01090b060f0403021e020d020b0c, + 1844 => 0x4d756d6b616d6d756d010a03280405060907, + 1845 => 0x59696c7775716c65716c61740102031a060f030c07, + 1846 => 0x41756d6e696501060204031b040b050609, + 1847 => 0x5469746d750108061c0b11050507, + 1848 => 0x557175712067757a20496b010b040102170e0c040b09, + 1849 => 0x506f6e676d756e670106140503011e061407080a, + 1850 => 0x53627562736e6967010a0d0603241315030809, + 1851 => 0x616e204b696d67616e71696d01100407020306230d07040c0b, + 1852 => 0x4d756d6d75687475680101060201210b0d030909, + 1853 => 0x456c68656c696c742d496c74010802081b0c0a030c08, + 1854 => 0x73746f6d204b616e6670616b0101030b0d01061b070a030c0b, + 1855 => 0x55204c75752770697069756b01040301230f15070c08, + 1856 => 0x536f6b61756b2d4d6f756d01050603041a0909020b09, + 1857 => 0x4d756b6b696b6b6173010a021403160b0d070909, + 1858 => 0x4b756e696b696d696d756b7501010b030108240611060c0a, + 1859 => 0x456d6d656e6b68696e01020602180c15050908, + 1860 => 0x44756e616e01080119130e070507, + 1861 => 0x4d7773706f6b666d696d0109020b0103160f13020a0a, + 1862 => 0x50616e6b756e706f6d6b616d0101070203050121060e040c0b, + 1863 => 0x4e77616e6e616c01100e1e0b13050707, + 1864 => 0x4b65656d6b61617a6801070307250d06050908, + 1865 => 0x4b616b6e6974010a030e0402050121020a03060c, + 1866 => 0x4e656b6c65736d7573010f01041e0c10070908, + 1867 => 0x5473636869746b6977010c03041d080e070908, + 1868 => 0x4b656b6b656b656d0101030407010215070e07080b, + 1869 => 0x4b69736d69730102080b010e2b190707060a, + 1870 => 0x576f6e6b690109030118110f070508, + 1871 => 0x4c6f6c6e6d65010b0103231115070608, + 1872 => 0x546968656e20616e204f6e69010c060804020307220607070c0c, + 1873 => 0x4c6f6e70616d70616d010906030d021d081006090a, + 1874 => 0x27797527204d7975686d756d01100b0f0304072c070a040c0b, + 1875 => 0x53756a73756a75776f770109031e0413030a07, + 1876 => 0x5069746d61736d617301040102190c12020908, + 1877 => 0x596c7579796c6973010e01031e0406050808, + 1878 => 0x48776170656d68757068656b0101031f0511050c07, + 1879 => 0x556d206c617420496d6f6d011004030b220505040b09, + 1880 => 0x557a757a6f6e6f7a010b021a070c020807, + 1881 => 0x4e656e2772616e6e6c656e010a041c0412020b07, + 1882 => 0x54656d6f6d776e72756d7269010d031b070b020c07, + 1883 => 0x4e697a27657327657a01020203200215070908, + 1884 => 0x27756b656e6e696b656b756e01030104080503200c0e060c0b, + 1885 => 0x676f6e204d75726a657101060220040e050a07, + 1886 => 0x4c7570747570656b010403040107051b120606080b, + 1887 => 0x51757370756c70756f7901050302081b0c09060a09, + 1888 => 0x5475746c6974650106030718070f040708, + 1889 => 0x546c65706c61746b656b01080403080b0120060e040a0b, + 1890 => 0x536f736973697369736f01070203011c0910020a09, + 1891 => 0x4b6572657268010b02290212050607, + 1892 => 0x4f6d756b20456e756b010b0204230508030908, + 1893 => 0x4e6c696d7075730102080b1406010321071503070c, + 1894 => 0x736f6e2d4c756c2d476c6f62010f0203240f0e070c08, + 1895 => 0x547569757a68697a6801070406050d010e1f061205090c, + 1896 => 0x4173686e726f6b6e726f6b01030317060c060b07, + 1897 => 0x556b756d2053616c0109040203101f040703080a, + 1898 => 0x54756e656b61737501090d0415031e100e02080a, + 1899 => 0x776577204b687564010c02010326090f050809, + 1900 => 0x4e756c63686e616c6b01090805070b20131207090a, + 1901 => 0x4e677569692053616169690102020305041e0d10050b0a, + 1902 => 0x4e6f657365696e6f65010b030207040121090604090b, + 1903 => 0x556e616b6574696b010102250110060807, + 1904 => 0x4d6f6e6d7568010f080f04051c051207060a, + 1905 => 0x54756e616e0106020f04031d100905050a, + 1906 => 0x4d61756e73706f6e6e6f6e670104031f0c09040c07, + 1907 => 0x6e617574204e756e010a0301041a0a10040809, + 1908 => 0x53756f206f79205a65746f01040602040b19110e040b0a, + 1909 => 0x496d616b2041776570696c010a03240a10050b07, + 1910 => 0x52696c6964690106020b0601240a0a05060a, + 1911 => 0x4e69726c65726d61616c010a060b050301230c0e030a0b, + 1912 => 0x497a696b696d696b0106010603290106050809, + 1913 => 0x54756470616b6e756b6972010c031b0d07070b07, + 1914 => 0x53616c73616c696d756b01090c0603010d0a1e2011060a0c, + 1915 => 0x50617361726e0105010b03241508040609, + 1916 => 0x4e6f6e706f756e670104081d0108030807, + 1917 => 0x4d72696d6d616d6b72756d010b08030624080e040b09, + 1918 => 0x53746570736e6f6e0105032b0111020807, + 1919 => 0x4b61706b6170010e0304070216060803060a, + 1920 => 0x53656d626f6d73696d010e0406032a0b05070909, + 1921 => 0x506f70656d706f010e01071d070d020708, + 1922 => 0x51696c6b716f73010a0102280210060708, + 1923 => 0x506168756b69707501040322080c030807, + 1924 => 0x5075736c75737573010608151f1005030808, + 1925 => 0x6c696e2d5327696e010a01021d0608040808, + 1926 => 0x736120476f6e676f6e0107080705200c11050909, + 1927 => 0x4c6973656e6f010b0306080213161004060a, + 1928 => 0x54617374617301060401030824111405060a, + 1929 => 0x4e616970276f65706969010c050302180e06050a09, + 1930 => 0x57616e6a616e6a616d77616e010306010503200a15060c0a, + 1931 => 0x48616868756b68696e010c070112271613020909, + 1932 => 0x4e756e677477616d6b6a756d01060302170a07020c08, + 1933 => 0x64652d52617a61740105071a0706060807, + 1934 => 0x4368616c776f6c010202060d0122150d07070a, + 1935 => 0x446f64736d6f64010602040107081d100b07070b, + 1936 => 0x5461616974616169010a021c0907030807, + 1937 => 0x7769732d4e69732d49730110100601031d0a09060a0a, + 1938 => 0x526f726c6901030302011f0212050509, + 1939 => 0x4765672047656a730101020803250c0e020809, + 1940 => 0x4f27276c6f6e01081403020b0601160a0605060c, + 1941 => 0x50616b7361730110071401061d0c0b06060a, + 1942 => 0x45626562656201090308021a0613040609, + 1943 => 0x4d656c6d6d656c01090403050102290f0a03070b, + 1944 => 0x48696820486968010d121006040120010f03070b, + 1945 => 0x53696573696f7369656d7569010c0614030f0e201d11070c0b, + 1946 => 0x5575746f74010c0208040322031402050a, + 1947 => 0x546f697762756f790104030401220311020809, + 1948 => 0x48697068696b6861680109061b0605050907, + 1949 => 0x53726171716c6f6e67010903011d060e040908, + 1950 => 0x5573686f6d204f746f6e6f74010f140403170810060c09, + 1951 => 0x486973686f7a6801101002030123011504070a, + 1952 => 0x456d7275682d4b6968010601081e0c11020908, + 1953 => 0x456c6e6b656c6e756b0107060301220a07050909, + 1954 => 0x53616e736e756e010306160b0d070707, + 1955 => 0x4775796f6c6e6162616c6d75010204230705030c07, + 1956 => 0x6b75204c616d61010b0313010511021f080b05070c, + 1957 => 0x5061756d697501040e13010220040e03060a, + 1958 => 0x50696773647974736b61700106020306170410070b09, + 1959 => 0x4e6f6e736f6e01100103260c0b060608, + 1960 => 0x57656b77756b010207050312080f040609, + 1961 => 0x47656c707365727a6573010706020b0c011d0212030a0b, + 1962 => 0x4e6f6d746f6d736f756e01070308010621070f030a0a, + 1963 => 0x59696e7a756e0104010203140b11030609, + 1964 => 0x4b656e206b6f6d204d6c756e01040b1f090f070c07, + 1965 => 0x57617368757377617301010304020115030804090a, + 1966 => 0x4c6f6e736c6f6e67656e010a0325060c040a07, + 1967 => 0x46626f6e677368646f6e67010501050c1a090e030b09, + 1968 => 0x4e656c75736e65010f0108041a160d070709, + 1969 => 0x546f6c6e746572616c010702011504031b040902090b, + 1970 => 0x4d6f746d652d546f6d010a03270106070907, + 1971 => 0x53756c73756c0101010f04020d20090607060b, + 1972 => 0x597569727969746173617301020801070b1e150e020b0a, + 1973 => 0x50656d6877656e6e77616d010e1501030204200813060b0b, + 1974 => 0x4d756e616e010106140402031a0a0805050b, + 1975 => 0x4e6f746b6f6e756e01050701040323090b03080a, + 1976 => 0x53616d6775746d616d011001100812240b1406090a, + 1977 => 0x5379756b6e77756b7379756b010a02190715040c07, + 1978 => 0x4b69746f6e656e01080402231a08020708, + 1979 => 0x426973627969727477696d010404010b1203200814070b0b, + 1980 => 0x4c6f7a686e75730102080103260907040709, + 1981 => 0x50696c74696d0101080b010212051e091402060c, + 1982 => 0x497067697a6801090104030618040805060a, + 1983 => 0x44696e2052656e010504081f0708050708, + 1984 => 0x416875696e010c1404020103200a0602050b, + 1985 => 0x4e6f6d73757373676f7368010902080103210c0e060b0a, + 1986 => 0x556d6e756c010c010205031525110c03050b, + 1987 => 0x4d756f6b6f20546565740102070803021e1010040a0a, + 1988 => 0x4d756b6b6f6b01010601080425130602060a, + 1989 => 0x506c61686b7570010b0401220810030708, + 1990 => 0x556d616e756e010f07050c0b0420141507060b, + 1991 => 0x4164656d697401090c02210f0f070608, + 1992 => 0x4b61726b6f6c75726b617201070401210f14070b08, + 1993 => 0x50616970656f7061696d010903012b0315070a08, + 1994 => 0x5520656d204e656e69010a0c04030824110c02090a, + 1995 => 0x496d707574010703021e0f14030508, + 1996 => 0x416e6e6f6e204e61746d6f6d010a081f1408060c07, + 1997 => 0x5475736e756b6d656b010b080201230309070909, + 1998 => 0x54696f746c6f6901060b03011f0312030709, + 1999 => 0x53756e696b75011008031a0513050608, + 2000 => 0x59756c696d77756c696d0103010204031a0f11050a0a, + 2001 => 0x456b2053726f7470697001060604240907020a08, + 2002 => 0x576f686568657a686901031503060f16050902090a, + 2003 => 0x4c756b7469736c756b616b011003020124090a040b09, + 2004 => 0x5a6f737a6f73010e0b06050215011a050c06060c, + 2005 => 0x4e61736e6f736e6f73010c041b1908020907, + 2006 => 0x557a6c657368204c65736865011002010304270d0d050c0a, + 2007 => 0x466e696d666e696d010f01260809040807, + 2008 => 0x53686f73686f73726f7368010908031e0510050b08, + 2009 => 0x4475736e75010e020e010322080506050a, + 2010 => 0x4e67616e747574756c6f010204031c0612030a08, + 2011 => 0x4c6f726e6f74010a010204060f280d0d05060b, + 2012 => 0x4d6c757962617a010d0201210308040708, + 2013 => 0x4573687573616b68616b6801060602240a08020b08, + 2014 => 0x546974616c74697401060204010520030606080a, + 2015 => 0x416c67746f6d74756c7401020220040a060a07, + 2016 => 0x4c6f6b6c756f74010b05060401031b161106070b, + 2017 => 0x706175702d4c65736c6f70010214020703250906060b0a, + 2018 => 0x6c77656c205375746e7765740105040103021f0d0d020c0a, + 2019 => 0x41676861676801070106030c15110a03060a, + 2020 => 0x6e696b682d4d696c6e6979010b020124100f020b08, + 2021 => 0x746f73204e6974747570010e010d1c0305050a08, + 2022 => 0x546961746d61696d6d616901090301210307050b08, + 2023 => 0x53696e696c6e01070302041d080d030609, + 2024 => 0x50696e736b65686e616e0101022c010a070a07, + 2025 => 0x4f7a75726775640109010206031f130905070a, + 2026 => 0x43686b68756c0110020b150c06040608, + 2027 => 0x4e7561736368616f01090106031d0913060809, + 2028 => 0x4b656b205469796f6b68010e0821090e060a07, + 2029 => 0x5279617a726f73010a040f02080527080c07070b, + 2030 => 0x59656e756d01090203060704240c0d04050b, + 2031 => 0x4b756c656d6f010d010e031b0711060609, + 2032 => 0x6b69756e204b61696e68756901040302061f0e15070c09, + 2033 => 0x74692d50696b617a68676174010a0b01080302180b08030c0b, + 2034 => 0x2775277520456d6f010d0521060d020807, + 2035 => 0x4b6f706b616b736f6e01100503010223110702090a, + 2036 => 0x52756b736b616b7461730102070d0b0f0203220214030a0c, + 2037 => 0x53686d756e6e6574010e0103021f0e06020809, + 2038 => 0x4d6570696c6e6d65010d030102200d0c020809, + 2039 => 0x70756b204e6570750102080301041b1a1104080a, + 2040 => 0x4c6f73746f726b706973010203230f0b030a07, + 2041 => 0x4e656e6d6f6e6e756d010206040826150b050909, + 2042 => 0x4e616e7a697401090801031c0d0f040609, + 2043 => 0x416c6d756c70616c6e756c0105010205030b1b1111020b0b, + 2044 => 0x436865726368756c696c0108030208120611070a09, + 2045 => 0x456e756c696e656e6f6e01020e0f0314190811070a0a, + 2046 => 0x5964617368617368617401010305240615050a08, + 2047 => 0x726570204c69626c697a010a01070408061a0807070a0b, + 2048 => 0x436861204b69011006140e0f030607, + 2049 => 0x4d75276e7577010403080b0220060503060a, + 2050 => 0x4e656f6e75616d6d6f61010804031d040a060a08, + 2051 => 0x556e6e61732054756b6c756d010d0f010c1e0e0f070c09, + 2052 => 0x42656c67650105081b0d11060507, + 2053 => 0x4c696e67656e010d0e0306020b1e030e07060b, + 2054 => 0x54616c702d69742d4b697001060604170a09040b08, + 2055 => 0x536c756c74756e736e616e0106020603280305040b09, + 2056 => 0x4b69706c656c010c04210805030607, + 2057 => 0x4e696e6e75706e75706e690106010b0c080306221715050b0c, + 2058 => 0x52616d72696e0104010506031d070a02060a, + 2059 => 0x506173746501070d0301041f011202050a, + 2060 => 0x50756b696d756c696e6901090603040102180b10050a0b, + 2061 => 0x5a756e67646964696469010702041c0a0d050a08, + 2062 => 0x4c656d656c010702010603041b040a04050b, + 2063 => 0x4e7572696c6572656c6d756c0102021e090d020c07, + 2064 => 0x516f75617571717561620102010206051d0a15050a0a, + 2065 => 0x696e672d4a696a73656a61010e0406010208200210030b0b, + 2066 => 0x4d756d6d756b0107032a0113020607, + 2067 => 0x4d69756e6b6965706d6170010a0b0201030823060a040b0b, + 2068 => 0x6c692d4d7569617469696e010a03021e0711040b08, + 2069 => 0x466e656c7368696c0102020305210a0f050809, + 2070 => 0x6b69656175682d48756101090801270411020a08, + 2071 => 0x4d656e2d53756e6e696e01010103201011020a08, + 2072 => 0x54616b6867686975676869010b031d0508020b07, + 2073 => 0x5469706b6f6c6e6c7574010e031d0415030a07, + 2074 => 0x736577702053696f736c6973010b0403011f0d08050c09, + 2075 => 0x586f786f2057756d756768010503020104190b0b070b0a, + 2076 => 0x6b756d20507561706c61756c01100602050403011c0211030c0c, + 2077 => 0x6e756d204d6f696d6d6f696d010a060107020d1f0914040c0b, + 2078 => 0x54696b6e656b010a0e0803210c0e020609, + 2079 => 0x416c62756c010901051d0614050508, + 2080 => 0x456c6179736c69796c0110040608010302260e0e05090c, + 2081 => 0x4c61796b6c796b676f6701070104020f1c0805030a0a, + 2082 => 0x4b616b70656b6e756b01050402230e12070908, + 2083 => 0x6368752043686177647361010102170909060b07, + 2084 => 0x416d616c756b616c7573010703020c1a0310030a09, + 2085 => 0x5461726e6e616b0103061c070e030707, + 2086 => 0x506f6e6d656c686f7770010906040203050121180e030a0c, + 2087 => 0x55756e206d6f20556e617001070e04190709030b08, + 2088 => 0x4167616861716167010201210d06050807, + 2089 => 0x456b657475742d556b65740104030402250f13020b09, + 2090 => 0x5075736f6d6f6c616c75010b03200e15060a07, + 2091 => 0x4d65706f796b6e697469010501240410020a07, + 2092 => 0x4c6573706f6b756c6e616c010b0304051d0c11060b09, + 2093 => 0x4c696b6d696c7369726b616d010601060b02030820030f070c0c, + 2094 => 0x4b6f756d6b756f73010303220a12070807, + 2095 => 0x5469706d756d746568010e0402230d07050908, + 2096 => 0x77757a68204b757a68010c0608010426081203090a, + 2097 => 0x4e67617a6e697a68010303061d0213050808, + 2098 => 0x54756b72696c70757a680106070105251210050a09, + 2099 => 0x52756b206c616b20596f6b0109010203180815050b09, + 2100 => 0x4974616c20496b010a0f140103041f060505070b, + 2101 => 0x49746f65746f206d692055750108040102180615020c09, + 2102 => 0x5761696c6e756c010a0d15060f0214110a02070b, + 2103 => 0x476f62657473636865010401041f020c040908, + 2104 => 0x4c7569747669756d0110030102200e14060809, + 2105 => 0x416d707574696b0107021d0714040707, + 2106 => 0x4c696b6e616b70696b6c696b010808030f0d0602260915070c0c, + 2107 => 0x54757470656b6b6f6e74756b010b04060301230d0e050c0a, + 2108 => 0x456c7a656c7a010b03040b29060a020609, + 2109 => 0x6e752053636861646573010d021e0d11020a07, + 2110 => 0x53756c656c6e010b0304021c0f0e070609, + 2111 => 0x556c616d756c756e01030c040105031f020906080b, + 2112 => 0x5469696e7461617069010101062c020e020908, + 2113 => 0x4e6f6d6f6d010d080b03070222140c07050b, + 2114 => 0x67756e2046726f6e01070302200308050808, + 2115 => 0x4d656d6f6e75010a0708030c150a0605060a, + 2116 => 0x756e20496e696e696e010d0305040701061d030603090c, + 2117 => 0x4a656b736f6d6b69630109040b030f0610030909, + 2118 => 0x42656b646f6b010e0b03010223020607060a, + 2119 => 0x536d756d204d69746c756d010b10080602011d0307020b0b, + 2120 => 0x6574204f6c656c656d010106030102040f1d061306090c, + 2121 => 0x55746c656e6b6c6f6e010d07030123110b070909, + 2122 => 0x487275276d7275276c696b010e031d0507060b07, + 2123 => 0x4b696e6b616d656c696b010f08220507020a07, + 2124 => 0x4e6772757a67757301100402291110070808, + 2125 => 0x5364696d7364696469010d0d080503021b090d05090b, + 2126 => 0x4e727574647275746d7574010308011d0c14060b08, + 2127 => 0x416c68204e69797572756c6e010c030218040d040c08, + 2128 => 0x4e696b73697374757301040401030b0f190f1304090b, + 2129 => 0x506f746c6f730107040f02121e050e02060a, + 2130 => 0x4178756775670109061a0607020607, + 2131 => 0x4869697469750110021c070a050607, + 2132 => 0x4c756c727563687368756c01040b010423160d060b09, + 2133 => 0x4c696c6f6c204f6c0110021e080c020807, + 2134 => 0x4d6a616e73656b010c02081e090e050708, + 2135 => 0x5472696d6872696b706970010b010b03230e0b050b09, + 2136 => 0x4d756d69626d696b6861010a030121070e070a08, + 2137 => 0x4b6a697a7a77697a6b6a697a010602050407082a030d020c0b, + 2138 => 0x4d6f70616e617401090302080105200b0a07070b, + 2139 => 0x456d67756e0109060307160c14020509, + 2140 => 0x54656e6368656d0108060304290713070709, + 2141 => 0x27756b27696b6e6973010e030201210e0d020909, + 2142 => 0x4b686f627775676864696b6801040201030415100b020c0a, + 2143 => 0x496e6b6f6e7520496e69010903040602230714020a0a, + 2144 => 0x416e77696c70010a0108030412190c0b06060b, + 2145 => 0x456c204f77656c0104030d1422050e020709, + 2146 => 0x496d6965746965746974010e040603021f060c060a0a, + 2147 => 0x54696c7574756d61010c080f030525090902080a, + 2148 => 0x596f6c79696c7979616c010a0103080204061a0908040a0c, + 2149 => 0x4967696d76696e67696d010704060f0805240106020a0b, + 2150 => 0x4f6269776f62011002041b0513060608, + 2151 => 0x4e757964706162010403240d06050707, + 2152 => 0x4c6f6c6b6972747465720101060801031c0a14070a0a, + 2153 => 0x4f6d6f6e6d6f74010302061f0706050708, + 2154 => 0x4d656e6968656d010e0301061a0311050709, + 2155 => 0x5975706b77756b756d0108040103060502210d1104090c, + 2156 => 0x586e657a682d586b757a680102020603011c070d040b0a, + 2157 => 0x556e65656e010b0206030b041d040c05050b, + 2158 => 0x557a68656b6f73010e0802230212060708, + 2159 => 0x497061617061617061616d010c030408100508060b09, + 2160 => 0x5a6f657a6801010208070420100f03050a, + 2161 => 0x4f62756368757368656b756e010e010302210307050c09, + 2162 => 0x546c6175736e696b6e696b010a041d1506020b07, + 2163 => 0x4c6f6d6b756c6d65740110020603011d080a07090a, + 2164 => 0x5261617361616c01070302180b07050708, + 2165 => 0x546c6f6e746c6f6e72656e010804030f02011a0c15060b0b, + 2166 => 0x4b6977686e7570707574010a06032e1015050a08, + 2167 => 0x476f7a67617a6b757a010f0306251015060908, + 2168 => 0x5368616e69010703200c15030507, + 2169 => 0x53657264776c73657172656b01050f060105080318100f060c0c, + 2170 => 0x4f68756b756b6f706f6d010203080702012a080d070a0b, + 2171 => 0x50696c736b656301020c03021b070c030709, + 2172 => 0x44696b646173687065626f7a010707010406230509030c0a, + 2173 => 0x50696e6d756e676e756e0109030504270b0e020a09, + 2174 => 0x53636864656d01010620060c020607, + 2175 => 0x417268686573697264010e02050c031c080802090a, + 2176 => 0x4d756d7469746d616c0101010802241006020909, + 2177 => 0x4d61204d69010f06260706060507, + 2178 => 0x51616e672056756c71697901050402200508070b08, + 2179 => 0x5369722d7465742d53650102030802250306020a09, + 2180 => 0x54756b74756b736c616b01030103240311030a08, + 2181 => 0x536e6765676769730101030d290409040808, + 2182 => 0x6c6961762052696f676a6f6501090307061d070f060c09, + 2183 => 0x4b756c706f6c726f6c0101060302041b081302090a, + 2184 => 0x4b696c7375010d07020322050d040509, + 2185 => 0x4f736f73636801070f0c251715060608, + 2186 => 0x4c756e6773616e010c050403191312070709, + 2187 => 0x54616b69746168010f0105170c08020708, + 2188 => 0x456d696d6d696e74756e696e010c060e01220d09040c09, + 2189 => 0x54696174746961746d756174010d050601270208020c09, + 2190 => 0x54657a6f727a6b757263657a0109031b0a11070c07, + 2191 => 0x416c65706570796e010909021f0605050808, + 2192 => 0x44756f73636864696f670105060103081f030d060a0a, + 2193 => 0x486f616e6b616e6e61756d010e05120108041f0d0f020b0b, + 2194 => 0x4b696527616577616501070b06031e0111020909, + 2195 => 0x536e617373616e736e7573010c010203231f13040b09, + 2196 => 0x4e756e6e756d6f6d756b01010203011b0c07020a09, + 2197 => 0x4d696e696e697a617a010b060204200715040909, + 2198 => 0x4c6f6573656f6c6c6f65011001030423020a050a09, + 2199 => 0x4d696e6d616d0109010228010f040608, + 2200 => 0x4f746f6b6f6e6f6b0110030207270a14060809, + 2201 => 0x4d6f61636175010901031d080d060608, + 2202 => 0x4b656c756c010b08140913040507, + 2203 => 0x4972706e65726d010205031d0a09070708, + 2204 => 0x53616e6d752054690107020b04210f13060809, + 2205 => 0x4e656e7363686b6f6f6d010905010206150b07060a0a, + 2206 => 0x446f737061737369720104030201180a06050909, + 2207 => 0x547570616e670109030f040727120906060a, + 2208 => 0x546c756b7872616b6c756b010f0801200112020b08, + 2209 => 0x48616e756d686f6e2048616e010606040203200c0c050c0a, + 2210 => 0x4d756e6d756e64750104060822020c040808, + 2211 => 0x536e617370616b69736e756d010703040d0b0228040a040c0b, + 2212 => 0x486c6f6e7472756e74696e01080302011d0911060b09, + 2213 => 0x5367616d736973690110080b06010403150c0502080c, + 2214 => 0x4d6f6b73656b6e656b73616b010a02061f0e0a020c08, + 2215 => 0x6e756e20416d696e656e010c060203271210020a09, + 2216 => 0x4461656b6f6501040702010e03291d0b05060b, + 2217 => 0x5061726e6f6d010c050f02010315080704060b, + 2218 => 0x6e656b204c69652770616c010f03280712070b07, + 2219 => 0x456d756b656c6e010914030102061d090a05070b, + 2220 => 0x4472616b62696b010c0403020e0f1c1b0d03070b, + 2221 => 0x4e657a68657a74757368657a010504010f1a0a11040c09, + 2222 => 0x536e6f6e736c756e776f6e01090302011d0506070b09, + 2223 => 0x50656e70656e0103031e0a0d020607, + 2224 => 0x53696a736e756c6e756c010f03260912030a07, + 2225 => 0x5761616b686768656b6801030204180b11030a08, + 2226 => 0x556b7574756c010d062c0411050607, + 2227 => 0x416e74756e756d696e01060b04010226020b03090a, + 2228 => 0x6b75742041706173617001090203220308040a08, + 2229 => 0x4c6f6d70756e6c756d6e756e01091505080306210d0d050c0b, + 2230 => 0x4b75746973610103060403080f17070c05060b, + 2231 => 0x4c616c74656e6c616c01060301270d14020908, + 2232 => 0x4c75706b6975700104030814050402220e0505070c, + 2233 => 0x50757470757401080201220705060608, + 2234 => 0x536b696e6173686f0109041d090f070807, + 2235 => 0x2775277069776972706972700102020124110a070c08, + 2236 => 0x417362697301080804030b1a0b0803050a, + 2237 => 0x53697a73697368010e0108070324031406070a, + 2238 => 0x556b686c696c646f6d6f6d01020603220a08030b08, + 2239 => 0x4e616e6b6f6f6e01020501071c0905060709, + 2240 => 0x4f726573686573010202031d0b08060708, + 2241 => 0x536b757a6e657a0104080301210b14070709, + 2242 => 0x5370696d6e697001040403020b0b13020709, + 2243 => 0x4b696d65706d65706d6570010e010e1f110e040b08, + 2244 => 0x54656e74656e010702190b05030607, + 2245 => 0x556d616e756d010e060301021b090e03060a, + 2246 => 0x6d656e20476f6e0102080406170811040709, + 2247 => 0x4e6f796c6c6f6f796e6e6f6d010f0203150d01250c06040c0b, + 2248 => 0x4a69757a6a69757a01070b200f0e050807, + 2249 => 0x4e6f7a6e697a68010201170310030707, + 2250 => 0x4c656c6c656c0107030206180c08060609, + 2251 => 0x54616d204b756d6b756d01020701041502031c0805060a0c, + 2252 => 0x4768726f6c6e697801100706030b15130c07080a, + 2253 => 0x4f6e73616e010a0503280c13060508, + 2254 => 0x5175716e6761766c696b01050406220106050a08, + 2255 => 0x4e756c65204c6f6e6c65010301030206281d13050a0a, + 2256 => 0x496b72616b656c010c011403190e0c050709, + 2257 => 0x4f6b61706f6b7568010503071c1008040808, + 2258 => 0x556c74696c736f6c01100801040227070e07080a, + 2259 => 0x4c696d696e010408021d060b040508, + 2260 => 0x6b7573204b656b74656b65010a040305060201210b10070b0c, + 2261 => 0x4f77756b6f77010a011a1011030607, + 2262 => 0x536573736974010e140308240411020609, + 2263 => 0x496b6173776d010a0701061017180603060a, + 2264 => 0x6d75204d6573010c1001031d0807060609, + 2265 => 0x4d75716b756c01090203231209070608, + 2266 => 0x52657072616b011002010608050319060b02060c, + 2267 => 0x796420597a756b6164796c010301180511070b07, + 2268 => 0x4c696561756b6d696e6175010304031002180413060b0a, + 2269 => 0x456c696c656d01100308180615060608, + 2270 => 0x5368756e68656e010e0f0b030222070b06070a, + 2271 => 0x4d6967206b6f7320526162010901160a05030b07, + 2272 => 0x646f6e2053696d6d656d010b080204031f0b0b030a0a, + 2273 => 0x50756c6c6972657273697201070d040102031f120a040b0b, + 2274 => 0x556d6e696d010a03010222060f070509, + 2275 => 0x68756e204c756b6b656b01060603041f0113050a09, + 2276 => 0x612055777577010d02210c07020607, + 2277 => 0x4d657474726974746574010d120604080203241315030a0c, + 2278 => 0x446f646f6467616b010d0306010419030805080a, + 2279 => 0x4e756e6f7365010e04030108160f1005060a, + 2280 => 0x576f7373656d776f74010f021e1010070907, + 2281 => 0x487568206e6974204f6b69010604030601210a12030b0a, + 2282 => 0x7461204c6973752054757065010f05070301130b09060c0a, + 2283 => 0x536f72736d696c73736f7273010a0401170d12050c08, + 2284 => 0x5075677572756d7501060b012a140f040808, + 2285 => 0x52756c74696c72756c74696c0105011d1905070c07, + 2286 => 0x6b652d5361706170697361010102050406230c0b040b0a, + 2287 => 0x4c756d6c756d6c61010101040603021c0f1102080b, + 2288 => 0x4d756e696d6d756e010c080104031d041304080a, + 2289 => 0x57616c6e656c686f27697201010b0f030210250812070b0b, + 2290 => 0x49737972697369736179011001020803170315030a0a, + 2291 => 0x6461204d6f676c6f0102010203141b060803080a, + 2292 => 0x456d6e6170204f6c6f6e0108051f0a0d040a07, + 2293 => 0x52657176696e67010f0803021f1b08070709, + 2294 => 0x4c7574627275626b757a010a0b040c011d0508040a0a, + 2295 => 0x5469726e6b65010c030406071021110a07060b, + 2296 => 0x456870616e6b6f6e6c756e0104030104071b0512060b0a, + 2297 => 0x54656f74756f6e6f656c010a060304021e0513050a0a, + 2298 => 0x546c61736b6c7574011004031e0c13030808, + 2299 => 0x55736b69737075736973010f02031e0814060a08, + 2300 => 0x457975796f736f71756e6701060502210707030b08, + 2301 => 0x4e757370756b7a75736e7573010802030b210c0b050c09, + 2302 => 0x53686d757373656c01061007010320030a05080a, + 2303 => 0x5a6f6e736901100b21060c070507, + 2304 => 0x4e617473616d736170011006181014020907, + 2305 => 0x4479796b64757368010e15020321010e050809, + 2306 => 0x41706c75706c6f6c01080608050326011204080a, + 2307 => 0x536d696e736d696e73686970010f0322010d020c07, + 2308 => 0x4e756e7363686c6f6e01060302080121071007090a, + 2309 => 0x4c696b6c656b010306031b1407030608, + 2310 => 0x4c616c6c61766e67756c6b010e041d0313030b07, + 2311 => 0x5375737563686e75700105060103220609020909, + 2312 => 0x536862656b73686e756b010403010204140a0e020a0a, + 2313 => 0x6c6574204f6a010e08021f0a0d040608, + 2314 => 0x4f7420456b656b01090401031d140c020709, + 2315 => 0x4973757a657a757a01080619030b060807, + 2316 => 0x556e67796920496d616d0107030106021f0b07020a0a, + 2317 => 0x4b696b657474756e0103060102041b0a1005080a, + 2318 => 0x556d6e656e6e656e0110040102230709070809, + 2319 => 0x4b616e616e696e71656e010f0705020420030a020a0a, + 2320 => 0x4775756d7561736368010b0f0c01020e1a010604090b, + 2321 => 0x4f6861756869702d4f276f27010b08010302042a0305060c0b, + 2322 => 0x557275722d556d6f716172010d06031a0d13070b08, + 2323 => 0x4e656e6d617301060102180612030608, + 2324 => 0x4f6d6f6d72756e72756e01050304200f11070a08, + 2325 => 0x41796c69796b01030b1d0e0e060607, + 2326 => 0x496d75706970696d010a0b03011f080b020809, + 2327 => 0x4b6f6d756c6b697001070604080129090d06080a, + 2328 => 0x546972676869797469720107050b01040326010f020a0b, + 2329 => 0x4861706b756d73707574010708040106160c15020a0a, + 2330 => 0x4e6569796965677a696570010108010206031e0614030b0b, + 2331 => 0x506c6965736d696573010b0602040b03120c0b02090b, + 2332 => 0x4d756c756c75736101080208010321040605080a, + 2333 => 0x537975736b656c6d6176010201050304230e0f040a0a, + 2334 => 0x4e616b74616201060802010320090f03060a, + 2335 => 0x5065726b6b616b0107020120160d040708, + 2336 => 0x456d6d756c6b696c74010b03072d0211060908, + 2337 => 0x42756e6b6920752041010d060304010b1e040e07090b, + 2338 => 0x506170276f6b69276f010b0701020f26130803090a, + 2339 => 0x48756e6d7564010d02040e0319090b03060a, + 2340 => 0x4d6c6f6e204e756e73656e010404120506070b07, + 2341 => 0x4c6965206e6975204c6f696e010205111f0214060c08, + 2342 => 0x546f706f6c01010e0201111d061004050a, + 2343 => 0x5368756e67010504140301021b070505050b, + 2344 => 0x4d616b70696b20536973010c01060e08021b0705040a0b, + 2345 => 0x53616c73756e6c65746e656b010f03040206210d0f070c0a, + 2346 => 0x446574204e6c656c0105030123040d020808, + 2347 => 0x4d757665676b656e6701030301040214070d04090a, + 2348 => 0x42697a62697a62757363680104021d0b08020b07, + 2349 => 0x5a6f7a65204b616c6b616c010b04020b011d0907070b0a, + 2350 => 0x456e6f7420756e20456d656e01010201221307070c08, + 2351 => 0x556e204b656e73656d0103031f0e14070907, + 2352 => 0x5865726f67010a0c021d110e020508, + 2353 => 0x4f6e646f6e01010103020b0f1f0e1204050b, + 2354 => 0x6f642045746571697a010b0f05011e020e040909, + 2355 => 0x43686975730104031c0a0a020507, + 2356 => 0x5368756e7369676f6e746f6e01070308060201230d0b070c0b, + 2357 => 0x4d616e6d616b6b756d6d616b01100220110f070c07, + 2358 => 0x4c6f6c6c656c01030f04082b040b050609, + 2359 => 0x506f6a27656a6f6c010e0b05012c1308040809, + 2360 => 0x4c696d736b756d70756c0104031e040f030a07, + 2361 => 0x476979676d756c010c0402220608040708, + 2362 => 0x4e67756e6772616e70617101030b17040f040b07, + 2363 => 0x752d456e6f6d610108020104031e0c0c06070a, + 2364 => 0x4e616c2d756c742d4e696c01030b03260d0b070b08, + 2365 => 0x4569736564697401090b0f031f0908070709, + 2366 => 0x546f6e2053656d01060406030225060706070a, + 2367 => 0x6b617a2d47757a010102220e06030707, + 2368 => 0x52656c6b68736f626d61616d01050204080307200407040c0b, + 2369 => 0x27756e706f6e6d656e010e021c0906030907, + 2370 => 0x53686e696d010a0819050a030507, + 2371 => 0x536f7363756c01100203250706030608, + 2372 => 0x537165736e65736e757301080e04031f060f060a09, + 2373 => 0x4d616275776e6f010103020506041f090705070b, + 2374 => 0x526967676972676972010e04021001210b1502090a, + 2375 => 0x4c696c6f6c010d040302200513030509, + 2376 => 0x72756e2053656e010a1403021b0312020709, + 2377 => 0x53696d74696e676e696e67010b060405021a0c0a050b0a, + 2378 => 0x5069756763686961010202040327010b050809, + 2379 => 0x486f6e6d616e204b656e010c110301250d11030a09, + 2380 => 0x4e756e646f6e0104010605230a08060609, + 2381 => 0x4d6970697201070302080620080e03050a, + 2382 => 0x4e616e756e61686e61680104060f080103230f11040a0b, + 2383 => 0x4f6b74756b696b72756b010a010407030602190807020a0c, + 2384 => 0x4769726b6a75726d01030c0208030418070503080b, + 2385 => 0x536e796b736e796e0109021501031f041503080a, + 2386 => 0x53756e2053756e7a756e01090e01080403071a0608020a0c, + 2387 => 0x4f6e67656d01080106040b0208240a0707050c, + 2388 => 0x4461756e69656e616b6965010703011f0211020b08, + 2389 => 0x536d756768737769620110060201041a0a0f07090a, + 2390 => 0x47696b74696b74696b67696b010b0f02040320100d070c0a, + 2391 => 0x4775747367757467757368010a01020406171215050b0a, + 2392 => 0x72616e204f6b6f6b6e656c01100220080b070b07, + 2393 => 0x55746967727501090106140f0b060608, + 2394 => 0x5275747275746775726973010d0520190f070b07, + 2395 => 0x54657567656f7474756f636801040401061c1005020c09, + 2396 => 0x59756b7a756b79756b01070103220b06020908, + 2397 => 0x536d756e676f6d0104021c0313060707, + 2398 => 0x506577706577706577010502030708061d051107090b, + 2399 => 0x43686179757a0102031e0d06070607, + 2400 => 0x6f7420496d6f6d616d7567010801080b0f221109020b0a, + 2401 => 0x48756b6f726d656e756c010305030f0401021d0312070a0c, + 2402 => 0x5469736164696e010c030b04150e0c060709, + 2403 => 0x4c75656b74616f010d040e06031c041307070a, + 2404 => 0x576f6b616b6973010a0603020104230c0f06070b, + 2405 => 0x7365204f73756f6f73010d060301041e061004090a, + 2406 => 0x53696b6c656b676f6b0106020103080b18070903090b, + 2407 => 0x4e616e62756e6d616d01070415030f28171503090a, + 2408 => 0x47756c7576757275010e05021b170f020808, + 2409 => 0x496e69207a68752050696e010d01031f140b060b08, + 2410 => 0x4f6b70617301010b0205080129030905050b, + 2411 => 0x416b657072757a686e656e0103041c0b0d060b07, + 2412 => 0x4c69736d69707369697469010903021f050a030b08, + 2413 => 0x4b612777756e776f6b01060103020b16050705090a, + 2414 => 0x4e6f6d62756e011003060b1d0a05020609, + 2415 => 0x4368616470657401030e02030125010803070a, + 2416 => 0x416e616d2d68696e2d416e01050221050d020b07, + 2417 => 0x74757420547275736574756b0109010203061e0614050c0a, + 2418 => 0x4e6761757375696c011001190a0c050807, + 2419 => 0x4d616e73616d0106011c0c0f040607, + 2420 => 0x4f736f6b69786978010d021b070a030807, + 2421 => 0x59756e67796f6e6b6572010f060104032b060c070a0a, + 2422 => 0x5461707069205469686968010d010221010d020b08, + 2423 => 0x4c6f6c796e67696c79696c67010303050620100d040c09, + 2424 => 0x5375706970616c69010f010324040c020808, + 2425 => 0x5374756e7361756b2053616d010205030604160715060c0a, + 2426 => 0x47656e696e01100b01021c0c12020509, + 2427 => 0x4f6e75737574010f02040d011417080605060b, + 2428 => 0x52697a68726f7301080301140509060708, + 2429 => 0x5365736b68756e6e6562010601240e0b020a07, + 2430 => 0x556d756e61740102010306200908030609, + 2431 => 0x536d6f6e6b656d6b756e0103040b03200d15030a09, + 2432 => 0x4d756e676b616e01091004060225150502070a, + 2433 => 0x436869746c757a686c6967010f060102270e13020b09, + 2434 => 0x54656e73616d6d616e73756e01100201031a0515030c09, + 2435 => 0x417361736b697301061405021f0206030709, + 2436 => 0x4475797369796475796b7961010101111e0705040c08, + 2437 => 0x4e676f71757475717501070b210707050907, + 2438 => 0x686c6968204e6c697001030f1b080e050907, + 2439 => 0x5369736d7573010d02031b080c030608, + 2440 => 0x48756d6f2050756875010d0602031f0213020909, + 2441 => 0x4e61746e617468656e0110090206011a050603090a, + 2442 => 0x5472697a68010f060302240a08070509, + 2443 => 0x54656e706f746f010d031d120d060707, + 2444 => 0x6b696b2d4b692768616c01100306011b0614060a09, + 2445 => 0x5370657a6c616173010e02031c050c020808, + 2446 => 0x53696a69736c617a706f7a0108031e1509030b07, + 2447 => 0x416d697369736f6b6973010502010304300215020a0a, + 2448 => 0x4c696d20497374616c6b7573010301200614060c07, + 2449 => 0x6b61204d697269716901100c04060524021106090a, + 2450 => 0x5961797375776c010c031e040b020707, + 2451 => 0x4c656b706568776568010101031b0213020908, + 2452 => 0x52756d6b68756b010c03041b0a13040708, + 2453 => 0x4174656d756d6f7301040102190d13050808, + 2454 => 0x536d757a667065736d6f7a6801020205201613040c08, + 2455 => 0x4b6f7a7075010e031f0606030507, + 2456 => 0x4e6f6e6e6f74204b726f6d010d01060304231513070b0a, + 2457 => 0x537573756d617461010a0118140a030807, + 2458 => 0x5a68617a67696d706564010c080c030123090a070a0a, + 2459 => 0x526f707265730107031f1211030607, + 2460 => 0x53696b6b756b01020f02040708051f020605060c, + 2461 => 0x55617362756b2d416b7a616b010a0106050203190805040c0b, + 2462 => 0x4f6d656c617a682d496c6974010e0306021f0612050c09, + 2463 => 0x49777069682070697020490107080103060226020d070b0b, + 2464 => 0x4b616e6770756e010b07060524040f050709, + 2465 => 0x4e696c70656c7370657369010b070304160208180908050b0c, + 2466 => 0x5a696c6364696c7474697a011007030b180c08030b09, + 2467 => 0x4f6c7364696c6f7264010e0401150320041203090a, + 2468 => 0x65712d45736c696e716c65700106060221100f050c08, + 2469 => 0x4e6f6d2d4c6f6e6b656e010f060a0104030818080d020a0c, + 2470 => 0x53706974756368205372610105140b0603021d0505020b0b, + 2471 => 0x4b617a6869010f050426010e070508, + 2472 => 0x5465766967010302141d060d020508, + 2473 => 0x4c6f6d6e6f276d756c010a0302080623081104090a, + 2474 => 0x496f6c206170204b6f69010c061f0509060a07, + 2475 => 0x5370617073706f6e0102011103021a0f0703080a, + 2476 => 0x4765736772696701021410070319080c05070a, + 2477 => 0x53796170737961707372656c01100b0801031b050f040c0a, + 2478 => 0x496e756e2d4f706f6e010d0d0408020b061b191202090c, + 2479 => 0x4a6f73756b010e0208190812030508, + 2480 => 0x5a6f6b7765626f6d010f0b030104021b0c1304080b, + 2481 => 0x596971696d0102020318080f020508, + 2482 => 0x4b75747469736b75736b756b010b07281308040c07, + 2483 => 0x4d756e616c756d6b756d010801030220120b070a09, + 2484 => 0x53697373697373696b010c08010302160e0e05090a, + 2485 => 0x53756b6b75736164757361010a010f03041a050c040b0a, + 2486 => 0x7a612052696e62696d61756e010b0b021c0a15060c08, + 2487 => 0x4f67756d756d01030205270c0d020608, + 2488 => 0x446973616e697061010c0307010425100d05080a, + 2489 => 0x71756e2d557562697571756901010203230109070c08, + 2490 => 0x4b692d7269712d4b756b6b690104010305220c13020c09, + 2491 => 0x4b6969727069696c2041616c010602030117050a030c09, + 2492 => 0x4573636865736368010104230408050807, + 2493 => 0x4c696c6c61740110010302181007070609, + 2494 => 0x4d75742d746f69702d536f6c010905030620070c050c09, + 2495 => 0x54756d6c616e0110081a0b0e060607, + 2496 => 0x75722055677576010a0301021c0c0b060709, + 2497 => 0x546975756c69617601070203200207020808, + 2498 => 0x5370756e736b616d736b616d0110040b01240507070c09, + 2499 => 0x556b656e756d6f74757401070104210911040a08, + 2500 => 0x4d6c757574010601200f08030507, + 2501 => 0x5574756b7570696e756d011001031c0714040a08, + 2502 => 0x53796570676901030628140b060607, + 2503 => 0x4875746869700106070402050603250b0e03060c, + 2504 => 0x5461746368616e69636869010f03201205070b07, + 2505 => 0x526f6b796c65736768756b01080f0a150d0e050b08, + 2506 => 0x4f796d6d657764010a0803040120130906070a, + 2507 => 0x4d7570657074656c010f03010a051e090b03080a, + 2508 => 0x4d65686527616d6f01090803170715020808, + 2509 => 0x4b6c656c6b72696d74616b0103030d08062a0f13030b0a, + 2510 => 0x536d656e6b756e736b656e67010c080104230b11050c09, + 2511 => 0x4b616f204b6f61010e0403100124090604070a, + 2512 => 0x4e617362726f6b01010e060201031f100f03070b, + 2513 => 0x417469707568010d01230611040607, + 2514 => 0x4b696b6f74656b0107080103021d090f05070a, + 2515 => 0x55726e70656c0108150105041e070c07060a, + 2516 => 0x646c756e2047696e010c0b0702031d0a1007080a, + 2517 => 0x557a75646167616b01060e0605160b0a040809, + 2518 => 0x53756e6774656e6701080703020b1c0f0f03080a, + 2519 => 0x4d6161707561707569730104051008010b03160b0b050a0c, + 2520 => 0x4c77746e616e756e0104040105021e121307080a, + 2521 => 0x6e696d2d53656e74656e01020f1d090a030a07, + 2522 => 0x4c656d205477757474777574010e01041b0c06040c08, + 2523 => 0x7175205161716f737573750106050616080f070b08, + 2524 => 0x27656e6e756b6e6f27010405012a0308050908, + 2525 => 0x4d616c69680104010403250d09050509, + 2526 => 0x546f6d726f6e01010501032c1512040609, + 2527 => 0x4e6c616e6e6f6b73726f6b010a02031e0306050b08, + 2528 => 0x4b61756e6c616f6b01100102031d0912050809, + 2529 => 0x54696e6e756d6e72656e01050603040f01250406060a0b, + 2530 => 0x49726e696c740104020117080e060608, + 2531 => 0x50616e6170696e616b69010803310e09030a07, + 2532 => 0x5369205469737369010c03200f15060807, + 2533 => 0x556c6973696269646964010a0b0103280409050a09, + 2534 => 0x5472756b7075740108061b0b0c040707, + 2535 => 0x556c756b756b010a021e0610070607, + 2536 => 0x547363686962666b61011003021a070a040908, + 2537 => 0x4f6d756c2d4d6f6f736173010f020403240108050b09, + 2538 => 0x5369646b616c69746971010c0b220c13060a07, + 2539 => 0x537a686f6e746f6e01060c1d0f11060807, + 2540 => 0x4e75746e75746e75746e696c01090e0208060105230f0d050c0c, + 2541 => 0x59756c6768757277010d080703021b050705080a, + 2542 => 0x5075706b6f686d6127010e0805240f0b060908, + 2543 => 0x4577616d696c6127010f010e060528111307080a, + 2544 => 0x4e696c696d6b756e7570612701040802030b0423130f040c0b, + 2545 => 0x546173656e73656e7375010d03060420080b070a09, + 2546 => 0x4e656c706e697274010204080302010720081106080c, + 2547 => 0x4d75686570656d65010b020308250b0c050809, + 2548 => 0x4f72206d6f796b20556d010c040512070d050a08, + 2549 => 0x4c756c2055747574010401022b0615030808, + 2550 => 0x556b756b6f6d010f0322030c050607, + 2551 => 0x697770205579204b61796979010c04031d0514020c08, + 2552 => 0x4d6f7320737573204b7570010703200a0c030b07, + 2553 => 0x4b756e73706170010a03160b08050707, + 2554 => 0x4e656e68696e70776e6e656e010d070b030401270808030c0b, + 2555 => 0x54696d6d756e73696e73756e010602011b0a05070c08, + 2556 => 0x4574756d756e696e01030c02120301180e0604080b, + 2557 => 0x427975676368617a67617368010a020103220907050c09, + 2558 => 0x4f796c6d6f796b617901020401051f0808050909, + 2559 => 0x4b7265746b656b6b72696b010e040103191010040b09, + 2560 => 0x446f62206e6c617320586f6c010e060402160415030c09, + 2561 => 0x4f70696c6f6f742d4974657001050203051501230b07060c0b, + 2562 => 0x4469737a68756a010d040b02110b11050709, + 2563 => 0x446164696e7469010d08150e0c040707, + 2564 => 0x7375204d757a680110140b02031c021404070a, + 2565 => 0x54616e72616e01071005030f1b131102060a, + 2566 => 0x5370616b736e69700103060408010320101402080b, + 2567 => 0x5577636869776c75776d010f020a140c10070a08, + 2568 => 0x75204a696c756e6d696d690102061c0708070b07, + 2569 => 0x4c696c6b74656c74616c01080623060e060a07, + 2570 => 0x496c7727756c010a0701061f0615020609, + 2571 => 0x4969626969620110020401031a0b0f02060a, + 2572 => 0x4869686968010903020118090e040509, + 2573 => 0x417270617270757227010a010413060d040908, + 2574 => 0x416d27696c6d01060406021d140d070609, + 2575 => 0x59727579747579010a030f050414080806070a, + 2576 => 0x556d70696573010601200114070607, + 2577 => 0x49766f74690110060214240113030509, + 2578 => 0x4d75756e7372656e6c696e010d031c070e070b07, + 2579 => 0x4d6c616d7472696e204b6f6d0109041001031402170e11060c0c, + 2580 => 0x5a6f7a6f726f7a7a6f010d0302041d1115070909, + 2581 => 0x4b616e736c6f7301040601260f0c030708, + 2582 => 0x4173656e6f6b756b6f6d010808040601031b1012030a0b, + 2583 => 0x536f6d6f79657801100801030218040a06070a, + 2584 => 0x536f6e2d4d756e616e0102020601250d15070909, + 2585 => 0x50757768612770696801020302050b041d0e1404090b, + 2586 => 0x536d756d74610108040108060b021d040e03060c, + 2587 => 0x54756920546f656e706f7574010806010326140e050c09, + 2588 => 0x49736d7573010d090605021a050f03050a, + 2589 => 0x7a6f205573757301070304020620151505070a, + 2590 => 0x4d656c20536d696b736c696d01080126090b030c07, + 2591 => 0x54656b70696b010507200707030607, + 2592 => 0x546c75746c6974010c060102220210070709, + 2593 => 0x4f7269626972696201080401100306160c0e04080b, + 2594 => 0x55746f73656c0106010308020b170b1206060b, + 2595 => 0x44756262726564010e0206140319091502070a, + 2596 => 0x4974656d746570656b656e67010b020607031f0908050c0a, + 2597 => 0x546f746f6d696861010b0f200413050807, + 2598 => 0x5469706f746f74656d010506081302011c090f07090b, + 2599 => 0x5475746368650103011e0815050607, + 2600 => 0x4d756d65730102040301211014020509, + 2601 => 0x4b696c6d73756c74736901010203200515040a08, + 2602 => 0x4b616b616d656b6d656b01080703260409030a08, + 2603 => 0x4d6f6d6e6173010f040201210708070609, + 2604 => 0x746f6b20536f6d650107040b20110f040808, + 2605 => 0x4573656c6c756b010115061c0511060708, + 2606 => 0x557220546f6c73746f6c73010b060302240409020b09, + 2607 => 0x466d69636801060201250113020508, + 2608 => 0x56756c6e677665796c6f01050702130d05050a08, + 2609 => 0x4962746c697301020304180408040608, + 2610 => 0x536d617270696e010a060508030122010c04070b, + 2611 => 0x4c6f73686177617175010c030406200805050909, + 2612 => 0x4e617365616b010f010608271714040609, + 2613 => 0x4d656b746f6c6e75726b010e01030f1a0f0e070a09, + 2614 => 0x4c79697375657074656574010a0803042a0314030b09, + 2615 => 0x4170616d6f6b696e010f05040601081c051507080b, + 2616 => 0x49792d61776e2d4172746979010b0104300f0e070c08, + 2617 => 0x43686e6973756e6174756c010e0408180d09020b08, + 2618 => 0x4f7a617368010d0608011f0c0c070509, + 2619 => 0x48696e68696e68756d010b02221013020907, + 2620 => 0x4e6f6d6d756b656d75736f6e0101031c0112040c07, + 2621 => 0x547574696c6368697264010603200714070a07, + 2622 => 0x4d6f6e672d616d2d4b696e010e08010203180614040b0a, + 2623 => 0x45746e756b010a0305041b0c0c040509, + 2624 => 0x4b696b206d69204b756b010f060103080d0223040a060a0c, + 2625 => 0x4d656d6b6f7801020f061a0312050608, + 2626 => 0x4e6f6d20536861010903071a0e0c040708, + 2627 => 0x4c756e6b776570010805010f0322040802070a, + 2628 => 0x546f6e6e756e706f6e6b656801010b012e080b030c08, + 2629 => 0x5069757765690110011c050e070607, + 2630 => 0x54696d686c696e01040106020d0325030d02070b, + 2631 => 0x4f6c6d6d756d6f6c6d010303020106170a1302090a, + 2632 => 0x4e65736e6f656c2d4b656f6e01100102190c0a020c08, + 2633 => 0x4c616b6f6c010208180409060507, + 2634 => 0x576575677a756163010a030207011e0f0f06080a, + 2635 => 0x50756e737475737374616d01080106020f031e0306040b0b, + 2636 => 0x4b616f746d617574010c080e012c010d070809, + 2637 => 0x50756e686c616e010108011a0709060708, + 2638 => 0x4b69736b697377697a010911011c0912060908, + 2639 => 0x506c6f6b70696c010e0203012a0912030709, + 2640 => 0x4b616b612d4b610104031f070d060707, + 2641 => 0x556e6e6173756e6761010408020321060f040909, + 2642 => 0x4b756c6f6c6f736c6f01020b02240212060908, + 2643 => 0x5a686f6d64756d207520496e010b070102032b110a040c0a, + 2644 => 0x4b726f6e6b6f740101031d050d030707, + 2645 => 0x44726f71736973646c6967680108060b040f20100a070c0a, + 2646 => 0x456e67697075616e010c0601030216111003080a, + 2647 => 0x4b6970756b6e616b6e6170010c060b0203210314070b0a, + 2648 => 0x55702d556c6d756c0102031f0708020807, + 2649 => 0x4e756d204c656e010603011b090a070708, + 2650 => 0x5573756b656d010c01200e11040607, + 2651 => 0x54696e74656d74656d74756e0104060203180b09070c09, + 2652 => 0x6f6d204f6c756b757401080601190706070908, + 2653 => 0x55727571756d6f636801040203061a0912020909, + 2654 => 0x4d7269736d726f6b01060e081a0415050808, + 2655 => 0x4d6174696c697369010c01032b0e12030808, + 2656 => 0x4e696d73656e706f706e696d0108031e0c12030c07, + 2657 => 0x436869727061726b01070225080c050807, + 2658 => 0x4e6168696d20276927696d0e05050302200708060b09, + 2659 => 0x27696e204b696d010c0d02011e0c15030709, + 2660 => 0x4e616b6c616e6c656d746f6b0103060302280d06060c09, + 2661 => 0x4b756e757a01050601190b15050508, + 2662 => 0x4c69736b616b6c616e01100801021e0812040909, + 2663 => 0x536e696e736b69747370750109020b0304200b09050b0a, + 2664 => 0x41736c75700104050402210708070509, + 2665 => 0x4577757565010203040b060220111102050b, + 2666 => 0x53616173616d6b69616e756e0110030204061e0208050c0a, + 2667 => 0x652d4c65696d2d6d612d4f010304010227090c020b09, + 2668 => 0x52696d72696d01050f230306020607, + 2669 => 0x536f6d726f6d0108030608020524130e04060b, + 2670 => 0x4d696e6e69737375736573010a020604010319060a030b0b, + 2671 => 0x6765722d496c73010c080b1210030423010603070c, + 2672 => 0x44616c6c6174636864696c010c15030714011d0e0b050b0b, + 2673 => 0x4b617273696c6d6b6172010904031f0b0c040a08, + 2674 => 0x546f6d736b616e736e7567010d052a0309030b07, + 2675 => 0x4f79746e657270657774010f04030801230d05020a0a, + 2676 => 0x41746f6c6b7469740101060201031a050606080a, + 2677 => 0x506f6c746f6c6e010c0402230306030708, + 2678 => 0x4b616b7573616e696e75010502030605230813030a0a, + 2679 => 0x4d616c776d616c77010e02031b110e040808, + 2680 => 0x536d756e646f6e7372696e010303020c230414070b09, + 2681 => 0x5465727361757467686f75740103021b0a08060c07, + 2682 => 0x47757a686e6961730107020401031d0f1304080a, + 2683 => 0x557a65646f7a68617363680105010b1c140d040b08, + 2684 => 0x45776f6e6570696c010102030136170c030809, + 2685 => 0x59756e6e756e010a0b031e0311050608, + 2686 => 0x53756e2053756e73756e0103030e0106190412060a0a, + 2687 => 0x53696261726162010b04051e080a020708, + 2688 => 0x697320416b7368616b61730103022c010a030b07, + 2689 => 0x55727368617262706974010c021a0509070a07, + 2690 => 0x5375736b656c736f73736f730103040302051e0e0f050c0a, + 2691 => 0x52697364697a6c757a01080603012a0810030909, + 2692 => 0x74752053756761010b06031e1a05060708, + 2693 => 0x4d69757368736965010601031f070d060808, + 2694 => 0x55757a2041737573010a0201140611060808, + 2695 => 0x45204d6565617001090603020812111b060f03070c, + 2696 => 0x49276c656e01020102051b0707050509, + 2697 => 0x686f68204d69686e7568010a02150405060a07, + 2698 => 0x4d6f6d6c756e0103080304230913070609, + 2699 => 0x4d656d666d696e204b616d0109050f0106072f160b020b0b, + 2700 => 0x4e6f6b6d69736d726f6b010c011e1312030a07, + 2701 => 0x4c6f6e6e756e686f68010302011b0e07030908, + 2702 => 0x546f736f7a2d44757a617a0109050203011b1105020b0a, + 2703 => 0x4d77697479696b01010b031d0d15020708, + 2704 => 0x4d6c656d706c75700103020304010b1b0c1005080b, + 2705 => 0x4c756e204e696d6c756e010c030702011a020d050a0a, + 2706 => 0x536b656e6574010703020b1e0605050609, + 2707 => 0x476567657a2074616720556d010f0e021f0315030c08, + 2708 => 0x4f6d7368616e676f6d01070304010f200c1402090a, + 2709 => 0x4d656d6520276f204d65706f010204021f0706020c08, + 2710 => 0x44656d776971656d6d7572010e0401021a0c0a040b09, + 2711 => 0x75742049656c6f6b0105030108230114040809, + 2712 => 0x576e6d776f7770010202070403240c0805070a, + 2713 => 0x54696d6869616d0108040602280310070709, + 2714 => 0x4b69736b6973010b08020603011e031407060b, + 2715 => 0x6d7573204c7570010f0301021b0910050709, + 2716 => 0x4c656d6e656e2d4e756e6b6f010a010b1a1612060c08, + 2717 => 0x5075682d4d757001040302270c0f020708, + 2718 => 0x5372656b6b657a7475756b010f07030b062f1606040b0a, + 2719 => 0x5061687061687075700110030408011a090a06090a, + 2720 => 0x5461736a6c616b0101010503200a13030709, + 2721 => 0x4b656b65206d65204b6569010a080403230c05020b09, + 2722 => 0x536c696e74616e01070f0706050104081e1a1505070d, + 2723 => 0x526f6d2d416e796f6e01100602260e0d070908, + 2724 => 0x4e75746c6f626c6572697a0108011d0305050b07, + 2725 => 0x55646f73756775677567010c04030506191311070a0a, + 2726 => 0x4b696e616e696e010f030114210112020709, + 2727 => 0x4c69696c6b616c7061616e0110081b0305060b07, + 2728 => 0x59616e736b756d736b756d010603261014050b07, + 2729 => 0x526164647569720f03060307041e081203070a, + 2730 => 0x4973657469736973756c6574010202081c0408060c08, + 2731 => 0x4b757a6d697a74617a010a01160610060907, + 2732 => 0x4b75706e756d70756d6d6f6d010f04031c0e11060c08, + 2733 => 0x5375617465756b737561010b0b2a1008020a07, + 2734 => 0x4d756d204d6c696c706c6173010e07020103220610020c0a, + 2735 => 0x446f72626f720106110302200508040609, + 2736 => 0x53686b756e0105010804061d080905050a, + 2737 => 0x4e696a70696a6c0105020a230b07020708, + 2738 => 0x4f6d6f6e756d01030602050b041b0e0804060b, + 2739 => 0x4973657369736f746f78010a030201130b0e020a09, + 2740 => 0x4e696e756b7075700102160503210315070809, + 2741 => 0x496c706572656c6e616c616c0102031e0515040c07, + 2742 => 0x54757375747501041405080b17081002060a, + 2743 => 0x546573686f6e657a6865010204200f10050a07, + 2744 => 0x4e616c6e616c656c010c0201230e08060808, + 2745 => 0x5570616e6775727576010e03220306040907, + 2746 => 0x4a696b77616b6b757a7469010d0703010602230311070b0b, + 2747 => 0x5461617469736c696d6161010b01031a070e040b08, + 2748 => 0x4b756d6b756e6e756d01090601020318120e02090a, + 2749 => 0x48756b204d756d01070708020103180f0e05070b, + 2750 => 0x5a6f747363686f6e01090d03011f050c030809, + 2751 => 0x5372656c7364656b680109081e0511070907, + 2752 => 0x4b657363686f672d43686f6701030123040a070c07, + 2753 => 0x52616c796c1006050201080422070506050b, + 2754 => 0x556b756b757201010104021f050a030609, + 2755 => 0x536f70656b6b657001010b070203011d0c1505080b, + 2756 => 0x4c7975706c696c010a02060b03040a1b050c03070c, + 2757 => 0x5372616e736b696d6e796e010704160215070b07, + 2758 => 0x48756b68656d204d79616d010b0801060322040a050b0a, + 2759 => 0x47696b7a68696b01070401210605020708, + 2760 => 0x5461726f6e010a04011e050d070508, + 2761 => 0x4c65656e696e010406011e0413050608, + 2762 => 0x4e6174736d6f7368010a0103150805070808, + 2763 => 0x486f6d686f6d01050b03010421091102060a, + 2764 => 0x4f6b686f6b68010e011a090d020607, + 2765 => 0x4a69656d6a69656d011001031402190a0d05080a, + 2766 => 0x4c756e6e75746b75740104040301081a060e07090a, + 2767 => 0x56656e6f6d01030203240d08030508, + 2768 => 0x4e696b6c656e746574010e0403061e0f11040909, + 2769 => 0x536c75736870617a76757a010701061e0e0f040b08, + 2770 => 0x4477656d6479756d6d756e010403061a0c11060b08, + 2771 => 0x496e70656e110a0207031d070c060509, + 2772 => 0x4e697373656e6501070406010324060b03070a, + 2773 => 0x4b68756b6801080819070c040507, + 2774 => 0x476f6d204b656774756d0101031c0f09070a07, + 2775 => 0x4b61697a78696101050302220b05030708, + 2776 => 0x456e756e616e0101030201280c0d040609, + 2777 => 0x4f707577617769270107050408230912060809, + 2778 => 0x556b6968757401070618070e050607, + 2779 => 0x4f6d756d616d6f6e010303010206080419050a02080c, + 2780 => 0x4c756e205369746e696c01080b05060301170a14020a0b, + 2781 => 0x47797a6b617a010c05060403011e130806060b, + 2782 => 0x457765706a756c6c656c010604030102180811020a0a, + 2783 => 0x4d75616d6b65700106020703050b0119080602070c, + 2784 => 0x53756c6973696c616e696c010c030102151210050b09, + 2785 => 0x5327696d70656e010104230109030707, + 2786 => 0x5475736c757a010e0b0203201215040609, + 2787 => 0x576927696c01050103070619010906050a, + 2788 => 0x5461732073617320537564010e0603081d0305050b09, + 2789 => 0x4e6c756e6e756d01060a011b0e10060708, + 2790 => 0x4c616d6c69010f020e0801031b050507050b, + 2791 => 0x4e75697473756b01020314011e0d0c060709, + 2792 => 0x4e6f6d20776f2057756e65010702140307260311020b0a, + 2793 => 0x4d656b6e696b6875010504010306020f0c1207080b, + 2794 => 0x556e67696d0105010704030227030505050b, + 2795 => 0x536e6f6d656861010e02280710060707, + 2796 => 0x496b616d696b75747574010b02051d0a12050a08, + 2797 => 0x536173737061730107060301021b020703070a, + 2798 => 0x49736974696e756b01090221050c040807, + 2799 => 0x496a68616a7401100803042e0906060609, + 2800 => 0x55737563756b6163756701090603230d0c060a08, + 2801 => 0x6d7570205375756d6e756d010e0323010d070b07, + 2802 => 0x4c796e656b6b6c796b010405030b04060f250e1005090c, + 2803 => 0x50696d616d61010d060103200c09050609, + 2804 => 0x49736e69730108040107221905050509, + 2805 => 0x556b616b7968797001080307260c0d030808, + 2806 => 0x5365656e706965010f0301070b0810021f0c0b03070d, + 2807 => 0x4869686b6168010e0f021d0809060608, + 2808 => 0x556d7527696c756e616e01100805030102270505030a0b, + 2809 => 0x4d6579726979796f716761710108010302041e0d12030c0a, + 2810 => 0x4e6c6f6a706c65706b6c6f640107040307140e07030c09, + 2811 => 0x536c696e736b616e010501040e210507070809, + 2812 => 0x4c756b65736e656e6e756e010709080f011f0905070b0a, + 2813 => 0x4d6127616b6b616e616b010b011f0505070a07, + 2814 => 0x50756c6f6c011006210315060507, + 2815 => 0x7374697020536e65736c6f010f08230512040b07, + 2816 => 0x616c6d204f6c636863686f6c01070115031c0214050c09, + 2817 => 0x536e756d73686b756e0104031f140c040907, + 2818 => 0x4d696c692d5361796e6d6901090f04050306270a13050b0b, + 2819 => 0x4d6f7a706178746978010e020307290e0a020909, + 2820 => 0x50616d74616d74616d0106060b030f170f1107090a, + 2821 => 0x4172746c616c204c616c6f74010103021b090d070c08, + 2822 => 0x4d696d6d6c6f6e6b697301070e0301170f11060a09, + 2823 => 0x5469736d75706f7363686d75010b070e1f0c0c040c08, + 2824 => 0x486c757374616b010a0701020327080d02070a, + 2825 => 0x4c69726b6b61726b010f070e0c01031d061507080b, + 2826 => 0x4d616f6d6d7569010f01280307070707, + 2827 => 0x4d696d736b690102020501240507040609, + 2828 => 0x536f756d204d69756c0107020114080a060908, + 2829 => 0x53616e7061737361010a0102042a0815030809, + 2830 => 0x52696b6979617269010a0b08050201031e080e06080c, + 2831 => 0x4573657a656c6f7a656b01101003021d0805030a09, + 2832 => 0x456e656e656e010b01030405061f131502060b, + 2833 => 0x536d696e7572737275737275010f040c0302230d05020c0a, + 2834 => 0x5a6f6b7a6562010f02240c09060607, + 2835 => 0x50696e6e616e2054616d0108031d0b07030a07, + 2836 => 0x547567616c6761726a01090c040201071e031002090b, + 2837 => 0x57697377697320426f6b0105020b05011e0214040a0a, + 2838 => 0x727562205a69756d010c0103040d0221071106080b, + 2839 => 0x456c647061726e656c6b0102030c260206070a08, + 2840 => 0x586d756d66646f6e010b0301230315020808, + 2841 => 0x4f776f6d756e6f6d61680107120421010d060a08, + 2842 => 0x44616920447569736961670105030702230c10060b09, + 2843 => 0x517572726f6d01090405020323020805060a, + 2844 => 0x446c616e736c756d6472696e0101040203050e1408220b0a060c0d, + 2845 => 0x50756e6f6c676461730107080f04030215140b03090b, + 2846 => 0x4b616e706975010b01081f0909020608, + 2847 => 0x4c756c70656d0105030b0f0602051c0f1103060c, + 2848 => 0x4a696e676d6c656e0108070305020b14080804080b, + 2849 => 0x536b756d6b656e6b656e010d05010825050d030a09, + 2850 => 0x5a6875726f646f6e646f6e010d041a080e030b07, + 2851 => 0x456e656e726f6d010d03180a0b050707, + 2852 => 0x576c6f6b776f73776f7301020801030204201014040a0b, + 2853 => 0x55737368697368010b02010304210b1305070a, + 2854 => 0x506f6e70696e010b1508020f0323020d03060b, + 2855 => 0x536c69717169700104141b020b060707, + 2856 => 0x556368616d6f64010608020603230c1004070a, + 2857 => 0x4e6c6f6f6e010603110106021d0b0c07050b, + 2858 => 0x4368656d65646f7065746f0103021d110c060b07, + 2859 => 0x50756b6e65736c756b74616b010c0401031d0807030c09, + 2860 => 0x6b696e204e696b747574010301031406180f13060a0a, + 2861 => 0x48656a676572686f6b010b080602030515040505090b, + 2862 => 0x746f2054756b610101030702040123031103070b, + 2863 => 0x416e6771656c79616e67010c021f0914060a07, + 2864 => 0x6e6f772042776973736f64010702040603190d12020b0a, + 2865 => 0x4c756e6c6f756e6c6f7001080201070623130a070a0a, + 2866 => 0x4971616e616e010702041c0512060608, + 2867 => 0x496e676c69796c696b010611030b020d140b0c02090b, + 2868 => 0x696c204f73656b656d6f7301100314080501200612020b0b, + 2869 => 0x536570756c6c6f010c011f0a0f030707, + 2870 => 0x576f6d2d4a656d6b6a756d010208030b1d040d070b09, + 2871 => 0x50696d616d61011002011b040f050608, + 2872 => 0x4b616b6b756b0101020f03210405060609, + 2873 => 0x4e756e2057657765010801030412040a030809, + 2874 => 0x6b697220496c6d756c6b010b0102061c0911060a09, + 2875 => 0x4d616d6d616e6d616d6d617301030b081a080a020c08, + 2876 => 0x5265756e6b6f6c7a696201070102071d0413040a09, + 2877 => 0x54696b7469736e616b010c140d0c031f041102090a, + 2878 => 0x4b6974617065746f0102020308200a09060809, + 2879 => 0x4f776e6e6765776d01010801040e071a0c1307080b, + 2880 => 0x4c6973796f7368010e05030c081a100d06070a, + 2881 => 0x43756b63756b637573627573010202040f05031f0409070c0b, + 2882 => 0x6f7320556c6174656e656c0101020403210307050b09, + 2883 => 0x4c696b616c690107010b0225100e020609, + 2884 => 0x476573676f6b01060302210414070608, + 2885 => 0x4f7375736b6f6b656b6d756b0104030204281314040c09, + 2886 => 0x4c656f6e656f73010f0f010d0b061d150e06070b, + 2887 => 0x4865746168746f74746968010304010315070502210310040b0d, + 2888 => 0x4f746e6174010a020323040c060508, + 2889 => 0x4e75696b6e61617569656e61010e0103250409040c08, + 2890 => 0x54736368696e010803020608200a1407060a, + 2891 => 0x557579756f6e62656e0103020306200410060909, + 2892 => 0x4d696e696d6d696e010a05200115060807, + 2893 => 0x4d6f6d7072696e0104010403210d0c050709, + 2894 => 0x4368696d617301070322120e060607, + 2895 => 0x447577657765640103010222090e060708, + 2896 => 0x4e656e64756e7a656d62616e010103071a0e07030c08, + 2897 => 0x57656b656b656761010301020b1b070f060809, + 2898 => 0x4d6161706d756f6d65750109031d0512030a07, + 2899 => 0x5363686f20546f6b6572010603010614200613040a0a, + 2900 => 0x4c616c6c756b010a0e11280a09050608, + 2901 => 0x556b656e756e01020801020c20050f05060a, + 2902 => 0x4b616e6b61736b616e70750108080104200313050b09, + 2903 => 0x436875776b6f6e7363687572010d0106080302200808020c0b, + 2904 => 0x536174617461706f74656b0105041b0511020b07, + 2905 => 0x426973636861706c6964696e01090401072a0c12030c09, + 2906 => 0x536d61736d690101060401050324081104060b, + 2907 => 0x4927696c6927010f01061f0210020608, + 2908 => 0x52656d7269706570010f05010306041f020a02080b, + 2909 => 0x4d6f6d616c205965730101030605020119040e07090b, + 2910 => 0x53756e756e73756e74656e01020301230614030b08, + 2911 => 0x546c7574746c75746c756b0106071d0308050b07, + 2912 => 0x416d697020616c204f6b657001070b0702060324060a020c0b, + 2913 => 0x4e656c69656574656d01090301210511050908, + 2914 => 0x53756b7475740103031c0407070607, + 2915 => 0x4b617a686c697a6e6f7a010806190f12050a07, + 2916 => 0x54696e756e69010c040302010524020707060b, + 2917 => 0x546f6c6368616a010c0203060119041103070a, + 2918 => 0x546f6e756b746f010502070b10011c021207070b, + 2919 => 0x4e696b61726b010b03051b1105040608, + 2920 => 0x53616f7373616f730104020420050f020808, + 2921 => 0x536f736d6f6c6d01030515041a0a14070709, + 2922 => 0x492d752d556e67010a06020403220d1203070a, + 2923 => 0x456e77656d77656b010902040f080325070d04080b, + 2924 => 0x4b6f6c6b6f6c01030d020b181013050609, + 2925 => 0x506574696b657475010b050401270310050809, + 2926 => 0x536d756d6d756d01080103061f0315070709, + 2927 => 0x536f736f6e616c650108030201050428070c02080b, + 2928 => 0x54656f6e6e7574010c0803020523050602070a, + 2929 => 0x4b617a686e6f6f7a706c7573010b02141114030c07, + 2930 => 0x74756974205469656275697401040604220607020c08, + 2931 => 0x536e65777377657001060306041b060b070809, + 2932 => 0x27696e77616e2769276e6568011002080f031001220b15070c0c, + 2933 => 0x4b696e204c796173010a0104020325100a05080a, + 2934 => 0x57617369776179610110040203230b09070809, + 2935 => 0x497a756d756b0110080301210a05040609, + 2936 => 0x556c707469696c6d69730103050203280f10020a09, + 2937 => 0x73616b2d5a6974750106050206030125041307080b, + 2938 => 0x536574746574010e03020618060a040609, + 2939 => 0x556c67686171646f6c73010c0802031a0809060a09, + 2940 => 0x446f204368756e636865010f031d0c0d060a07, + 2941 => 0x58756e74696e746f6e74756e01100c0b240909050c08, + 2942 => 0x586e75676e69646964696d010c030f011f0411030b09, + 2943 => 0x5365726b6b656c68010c020c06010322040506080b, + 2944 => 0x4e6f6e6c6f6e62656e72756e010e080302240c12020c09, + 2945 => 0x4b6f6e6b616e010a02030f150127130c05060b, + 2946 => 0x53686b7577010b020b08220608040509, + 2947 => 0x537169747367757673716974010b04060302200d0c060c0a, + 2948 => 0x546f6c6f7401050f1e0d0a020507, + 2949 => 0x536b757366706f7a736f7a01040f01050203231114030b0b, + 2950 => 0x5a6861757a6870696101080806150115060908, + 2951 => 0x4472616e6e616d0101010e0203071a0b0805070b, + 2952 => 0x576f70696b690109060b021e0405060609, + 2953 => 0x476f736873686b7567120401042c0f14060908, + 2954 => 0x4d616c6f7301100125050a060507, + 2955 => 0x4e797568697401090102180a09050608, + 2956 => 0x4d6f756e6c756f6e6e7569010706040201031f0a09060b0b, + 2957 => 0x556c756c6e656c716f6c01080b0102030622040b060a0b, + 2958 => 0x4e697272616a010a010203140a08030609, + 2959 => 0x546f6d736c696e01100803010402220a1405070b, + 2960 => 0x4d6f68756c756c65010b021e0e07040807, + 2961 => 0x54696e74696e6e656e6b656d010a01031b0a08020c08, + 2962 => 0x556e6d756e6701040f150910020607, + 2963 => 0x536e696b736e6974010508040b02011e060e04080b, + 2964 => 0x4d6c61746d6c75726d616d0106030e061e0914070b09, + 2965 => 0x5269656c6e6965726e726967010b0105021f0e0e060c09, + 2966 => 0x4c696e7069687769700104030402240715050909, + 2967 => 0x4b6c656e6e6c656e01050304021e1115070809, + 2968 => 0x54616c736f6e73697401100b02160a0c030908, + 2969 => 0x4a756a726f646a6973010b04200810070907, + 2970 => 0x4d756e656b756d75010e0b06010308220e1106080b, + 2971 => 0x577570756c0109011d1409040507, + 2972 => 0x4e696469676901060206041e090d040609, + 2973 => 0x4b75706f746b7567656a01100b080301220b07050a0a, + 2974 => 0x276f6b276f6b27656c27656c010f041f0308060c07, + 2975 => 0x496c6b6e756c74010101080221090d060709, + 2976 => 0x416b2d496b010101041f0412060508, + 2977 => 0x63757a2d54696a696c7a7a69010e02040321090f060c09, + 2978 => 0x4f716f72656d656b656b01010401030d1b0715050a0a, + 2979 => 0x556e6f6d277501050802130e0a030608, + 2980 => 0x536f6e746f736b7570010c02040114060c030909, + 2981 => 0x7377752053776f20536c69010308010326080b030b09, + 2982 => 0x53616d736c616c010903021e0711060708, + 2983 => 0x4b696e6b756b010b0203200608020608, + 2984 => 0x44696d6e6f7401070401070b1e0a0f04060a, + 2985 => 0x4d75616173746161616d010b03150909050a07, + 2986 => 0x53756b68777573696d6c656d010502010603210614040c0a, + 2987 => 0x4d756e756d75706101010102060c0320151106080b, + 2988 => 0x526171756c6172697269010101061f060f060a08, + 2989 => 0x50616c70616c010d05210815020607, + 2990 => 0x456d616b616d0108040207031c120f05060a, + 2991 => 0x4e6f6d204e6f6d27616e0109110b02040e260811020a0b, + 2992 => 0x54756e676d696d616e67010408060204030b1e0307030a0c, + 2993 => 0x726f6e204a6f6e010c041e0705050707, + 2994 => 0x53617a6163682d4163680110030206041b030f020a0a, + 2995 => 0x506579204e7501030204030f062a0c0b05060b, + 2996 => 0x45726a6d6f6c77657277010803020608180615070a0a, + 2997 => 0x526969726e65656e2d456572130701230d08020c07, + 2998 => 0x4e6f6d6d756e010e010203190f0b020609, + 2999 => 0x4d756e77756e6d6f6e77656e010c0e0603080b04021d0d09070c0d, + 3000 => 0x4f77756b756b6f6c6168010c06020301272305030a0a, + 3001 => 0x55726c6f6c700105030201201407030609, + 3002 => 0x4e6968616b6861736d616d6901020c010204031c0210050c0b, + 3003 => 0x42616b697a204b696701010201190c08070908, + 3004 => 0x4e696c6e746f6c6d6f6e010901260707070a07, + 3005 => 0x4c7572756c0108050b030f0e0223041202050c, + 3006 => 0x4e696e696b697461756b75010208210811070b07, + 3007 => 0x53616e6773616e6701040319100b070807, + 3008 => 0x5669776d6b757265730104150501290713020909, + 3009 => 0x457075746f6801100802010322040d02060a, + 3010 => 0x4f7363686f7a686f7a686574010208020304240205020c0a, + 3011 => 0x4e7527276f27010c0302010b1e0b1207060a, + 3012 => 0x5479756b70656b7379756b0105010f200b14030b08, + 3013 => 0x547564716977716977010f050d0327040a070909, + 3014 => 0x47697a67657a680106040103061c0a1304070a, + 3015 => 0x4b6975737375616e01100f140410070807, + 3016 => 0x4e757073727574010d0206011a0a11030709, + 3017 => 0x4170616b2d416e6174010b0311010a0528140f07090b, + 3018 => 0x4c616167646c7563686d7564011003010604190d13060c0a, + 3019 => 0x4977697777616e70696d010a021103041b1b13020a0a, + 3020 => 0x54656f6c73656c74656f6c010e02080f0103041c0c0d030b0c, + 3021 => 0x736b696c2d4b756b6c7573010f06030d02190805020b0a, + 3022 => 0x54756e6b616e736f6d74756e0104080b01040219070c060c0b, + 3023 => 0x53636869727363686972010d10080304072b1014040a0b, + 3024 => 0x4d6177692d5475776967010f02030d240710050a09, + 3025 => 0x556d756b6f79756d6f79010a0e10010321110e020a0a, + 3026 => 0x4e696c646e6964010403070f020d23010c07070b, + 3027 => 0x72617320426c6f716f6c01060f0302220609030a09, + 3028 => 0x4d756b616d696d69010b0301020612051504080a, + 3029 => 0x4c6f6c756b6b6f6c010406020e0b030c1e090b06080c, + 3030 => 0x48616c77776161010f140801031f041503070a, + 3031 => 0x5a777261776c010f0402030115061406060a, + 3032 => 0x6d61204d75746f6d75010f010325020b020908, + 3033 => 0x50696f2050696f64657570010304010602081e0a07040b0b, + 3034 => 0x546f706f706b69746b75010b08030102240710020a0a, + 3035 => 0x4e6f6c6e6f6c736d75740104031e1309070a07, + 3036 => 0x4e6c75736d6973686e6c7573010d0e0b032a040f020c09, + 3037 => 0x27612768612761276b616b6f010b06021e090f020c08, + 3038 => 0x4d656e6c656c6b0109041d0d15040707, + 3039 => 0x5461712d726f712d527574010603251409020b07, + 3040 => 0x56696b717573010c0401230f0f050608, + 3041 => 0x4e6f7468696b746974010f030c06040121011407090b, + 3042 => 0x4d696d6e616e6e756e0109020b0322010f030909, + 3043 => 0x5275746d757368010e0203040d200a0a05070a, + 3044 => 0x476567757465010806020103151e0c0c07060b, + 3045 => 0x44696d656e656501020b0127040e070708, + 3046 => 0x4e6f6e756e6f6e69010710020f0125040a05080a, + 3047 => 0x657a68204f6b736368696e010902150322040d050b09, + 3048 => 0x506f7075626101040207031d0f14030609, + 3049 => 0x756c204d6f6c627572010508100a230306060909, + 3050 => 0x4e696b756d6f6e75010c0205080326110d04080a, + 3051 => 0x546f676f6d6b6f670102040b010d020315101304080c, + 3052 => 0x6e757a20417270657267010c020e0304160f15030a0a, + 3053 => 0x49696e73696974010d010e041f0408020709, + 3054 => 0x50756b73757301010b0402150120060504060b, + 3055 => 0x54616274756401090703010217070504060a, + 3056 => 0x4e65776c656c010e03011e0b09020608, + 3057 => 0x50616e6f6e01100601071b0511040509, + 3058 => 0x517572697069010a030e1a0314070608, + 3059 => 0x6b617320506a696b010c01180a05040807, + 3060 => 0x5475746e756d756c6d756c01040701031b0f11040b09, + 3061 => 0x756720497a68697a6801050102061a0c0e050909, + 3062 => 0x47657a726f6c010f0204010d18081006060a, + 3063 => 0x51656d736f6d72616c01060114110e030907, + 3064 => 0x536e696d63686e696d010e010203130a07060909, + 3065 => 0x4b6c656e736c6f6e6c756e01040807060302250a09020b0b, + 3066 => 0x54616e6b696d0104010f09180815070609, + 3067 => 0x4f676f67676573656d01040403220b09060908, + 3068 => 0x4d6f6e6e756e010e010b210a10020608, + 3069 => 0x54756d74756d62656e01080106040220121205090a, + 3070 => 0x556c7473656b6c61706c6170010e0e04012d0410060c09, + 3071 => 0x4173757269736368756d01020201041b1315070a09, + 3072 => 0x636869636820417a680106030818020c030908, + 3073 => 0x556d616d6d616d6d75010f040201031c010804090a, + 3074 => 0x4e6f756c69616c6f756c656f0104040701030815051b0d0d070c0d, + 3075 => 0x4275736874757368010d06220c05050807, + 3076 => 0x4c696e6b6869676801100b0129120a030808, + 3077 => 0x4f6c757075700109030502200714070609, + 3078 => 0x54756e73686973686901090108030215140e04090a, + 3079 => 0x53716164737777140e0f02061d0b06050709, + 3080 => 0x577568696e77756e67696e67010f0602080121060d050c0a, + 3081 => 0x4b696b6b696b6c696b010e01030215130d030909, + 3082 => 0x53746f736e6f6e010a0f1b0915050707, + 3083 => 0x4d61696b6e7569746368010702011b0a15020a08, + 3084 => 0x5363682769706e612701040b011b0306060908, + 3085 => 0x536c6974736d69747075740104080314180406030b09, + 3086 => 0x49717573756d01100e01140b06040608, + 3087 => 0x5a68756d73756d776f6e010804070f061e0207060a0a, + 3088 => 0x4e697a697a010a0104151a1105020509, + 3089 => 0x576f6f6d68616e010f07060b1b090d040709, + 3090 => 0x657220416e6a61716976010e0d180d0a040a07, + 3091 => 0x547769736b796573010c0613240d0a040808, + 3092 => 0x496c756e6f706f706f70010a08060301190912070a0a, + 3093 => 0x546174696e74656d01050813040614230e0f03080b, + 3094 => 0x4f6d646f6e656d010e0803020c1f030b04070a, + 3095 => 0x4c616d6f6e746c696d010d06020b0125110c06090a, + 3096 => 0x4e756c6e756c707572680102040203270306070a09, + 3097 => 0x50756c7572010808031d040d030508, + 3098 => 0x536e696e2d4b696d6c696e010f110207061c0b0a040b0a, + 3099 => 0x4f6c6e6f746f7075700102041f0514020907, + 3100 => 0x41706170776977690104030201240610020809, + 3101 => 0x416c6973756b010d0407060203110113061502060d, + 3102 => 0x576f276e6f6d6d6f70010e0403010218181307090a, + 3103 => 0x52656d72756b0105030605210811060609, + 3104 => 0x536870756e6d756d6d6f6e01100204250114030b08, + 3105 => 0x4d756b6c756c696b01030603170913020808, + 3106 => 0x536f736e6f6d736c6901010106030c041e190d07090b, + 3107 => 0x4f6d7570756b6f73010301060d0304250c0a04080b, + 3108 => 0x536f67736f6773696b736f67010e01031406070502190e05050c0d, + 3109 => 0x556c7576204973616b01060201081e0815060909, + 3110 => 0x54757a6e697a010802030118080d040609, + 3111 => 0x44616e64616e0107030b08220112020609, + 3112 => 0x5a756d746368756e010d0301250208050808, + 3113 => 0x4b6f6d756d6e6f6b756d6f6e0101010302180d05020c09, + 3114 => 0x42756e6a796d62756e01050c010604031f141104090b, + 3115 => 0x6e726f6d204d6f6e0110040301061d0a0507080a, + 3116 => 0x53686f73686f756b6574617501080204031c0706040c09, + 3117 => 0x4b757069206e65204e6f6e69010b0903020112100b070c0a, + 3118 => 0x506f73746f6b706f7301020503010421020f07090a, + 3119 => 0x47696d2067756e2054796e01070401020b06260409030b0b, + 3120 => 0x436869616867656801100501160e05030808, + 3121 => 0x4e676970656c750104020f0e08200c1302070a, + 3122 => 0x5568756b7579657a0103021a0507030807, + 3123 => 0x56616d76756e70756e72656d011004071f050d050c08, + 3124 => 0x496c706b6970696c6b696c6b010a0102031d1810020c09, + 3125 => 0x6b656e2057796e010703010704060b210e1007070c, + 3126 => 0x447269646772756e010e0102221015060808, + 3127 => 0x4d696d6d696d010703010b120c0c020609, + 3128 => 0x4b7562756b010606021f030c020508, + 3129 => 0x4c6f6c757701050103190510030508, + 3130 => 0x456e75277527776c010802210c07030807, + 3131 => 0x506f6e686c6f6e20506f6e010d010402291014060b09, + 3132 => 0x506f736c65010e03010b160611050509, + 3133 => 0x50616c2d4d616c68616b010c0203010f230705030a0a, + 3134 => 0x5175727175727175726c7572010a070402012b0206060c0a, + 3135 => 0x557074657369740106030c021c0d12030709, + 3136 => 0x4d696e697420696c204974010703040806200508020b0a, + 3137 => 0x4b756e6e756b6c7578010c060f041a0f06040909, + 3138 => 0x4b6c61616e6b6f6b010f030f180e0a040808, + 3139 => 0x5a697469742d546f62610105030b01220505030a09, + 3140 => 0x4b61726b74656c6e656c0102030102081f0106030a0a, + 3141 => 0x6b757720276f777775010e0406020322080b07090a, + 3142 => 0x54617374756c73756f7001080106030205260815030a0b, + 3143 => 0x50617970617901060703010621030503060a, + 3144 => 0x53676f6f6e776f756e01010b0108030719090802090b, + 3145 => 0x556e61682d4f6e6f7001070314061f0606050909, + 3146 => 0x456973636801040501020628051405050a, + 3147 => 0x536c756d6c6f6c0101021e090c040707, + 3148 => 0x4f726e657270010f060301240505030609, + 3149 => 0x5a616b7a616b204e696b010b0222070a050a07, + 3150 => 0x44656f676869776b010c02210f07060807, + 3151 => 0x5573756c75747574697401050201030e22040e050a0a, + 3152 => 0x27696c6c6f27276927276927010503291611060c07, + 3153 => 0x5461736d756c01030702010b03061a100807060c, + 3154 => 0x456d6573686f7a680104050103020421110d02080b, + 3155 => 0x4972706d757475727a68010e070204031b0605050a0a, + 3156 => 0x51696e736368616e64756d010f06030128070d040b09, + 3157 => 0x4b656b6b6f6e6e756b0103030104021f030903090a, + 3158 => 0x556e75747573757368010d0c03060426010904090a, + 3159 => 0x4b696e6c6f6e74696e010f03020b051b060604090a, + 3160 => 0x4c65706d696d010e061e0309070607, + 3161 => 0x50756b6f70610107020317020e030608, + 3162 => 0x4b6f6b706f6c73756c0101030e06021f040503090a, + 3163 => 0x74756e204d756801020d070203011d0c0f03070b, + 3164 => 0x416b6973697401050c03040206210c0f05060b, + 3165 => 0x54756e7374756e011007040b021e080e07070a, + 3166 => 0x4d616b686c616768010e0302220310070808, + 3167 => 0x506927736e696d010e060d010420060b06070a, + 3168 => 0x536c61736e75736d6f01010104121b080d040909, + 3169 => 0x53756d2d4e776e6c616e010204180d10070a07, + 3170 => 0x547570206e6f204d6101021302030429050702090a, + 3171 => 0x506173687475010d040307060526011304060b, + 3172 => 0x4f736c696e676f680106012b0315070807, + 3173 => 0x4d75696d6d75696d6e697201010322110c020b07, + 3174 => 0x4c657a68756c7175010b05010c032c0c0906080a, + 3175 => 0x5369616c7a61697a636f6d010c011b040b070b07, + 3176 => 0x5a696e75676b75010a02250506060707, + 3177 => 0x456b65757501030302250f09060508, + 3178 => 0x54656e6b6c69746d6c696e010d0c01120a06040b08, + 3179 => 0x416c756c756c010d021e0b14070607, + 3180 => 0x546f746f6b75010804080302150c0f03060a, + 3181 => 0x427275626272756201080605010422040905080a, + 3182 => 0x6c656973204b756f730103060701041c041306090a, + 3183 => 0x4f6b686562696b686f7865620106040329030c020c08, + 3184 => 0x536f6573707575730107110122040e040808, + 3185 => 0x4e756c656c6e6f74696b010f0203210b0c050a08, + 3186 => 0x5563696269620107080201041e060802060a, + 3187 => 0x526579657665766e67657901030c0106021e0909040b0a, + 3188 => 0x4f6c6174646c756e756461740106031e0706040c07, + 3189 => 0x48657574756574756f74010b080304190115060a09, + 3190 => 0x457270204368656c7a68656c010d03230e10050c07, + 3191 => 0x44616d6d69736e61010b0105021d0a0d060809, + 3192 => 0x506f7567756f7a7a6f757a0103040108031e080c020b0a, + 3193 => 0x4e756d686f6e0110010f03060b230c0906060b, + 3194 => 0x4b68697372756b756b68656e01010801060424120a070c0a, + 3195 => 0x4c696c6e6c696c756c740102070a0301230209040a0a, + 3196 => 0x756b20496d756c696d696b01060603160f0f030b08, + 3197 => 0x5361676368757401080f021006230e1405070a, + 3198 => 0x536b696e736b696e0106040301021e020e06080a, + 3199 => 0x4f6d656d73696d0106021d0508030707, + 3200 => 0x576c6574777401050103241208060608, + 3201 => 0x4368756e6b656d0105010b031c0410070709, + 3202 => 0x276c6f6d707275270108040319050f070808, + 3203 => 0x557369656d616c617573010206030501021d0d13060a0b, + 3204 => 0x55626577756475677562010b0319120d050a07, + 3205 => 0x44696f636863686f696401100311040806250e0d050a0b, + 3206 => 0x4b75647565750104010506030218071505060b, + 3207 => 0x537a686f6b6e696b6b616b010b07210d05040b07, + 3208 => 0x546c756b206d756b204e616b010a0b0315011f0611030c0a, + 3209 => 0x4f6b6b616d616b204b6f6d010203060501230311040b0a, + 3210 => 0x4f6c6b6f6c6768010b010d021c1106020709, + 3211 => 0x416a6b6e756e616a6b756e0108031d0411030b07, + 3212 => 0x576d74776d010c060f0301141e011203050b, + 3213 => 0x4e616b70756e6c75010501171107050807, + 3214 => 0x4b616c6e696c010b0203080c06042a0a0f02060c, + 3215 => 0x54696d752d6b612d4e757075010c1214260c0f020c08, + 3216 => 0x476963686963686567690104032b070f030a07, + 3217 => 0x426f7361706f01010c03010626021504060a, + 3218 => 0x47756d73756574010b0217120d060707, + 3219 => 0x4475757a6f706f7a757573010e03061d020b020b08, + 3220 => 0x4c656d616d6c656d010402010712031f090707080b, + 3221 => 0x4e6c61737363686973010c0d0501200f12060909, + 3222 => 0x4b656c6f6b656c756b650104032b0d15040a07, + 3223 => 0x57656e6c6f756e6e6c6f756d010d0302041e0215070c09, + 3224 => 0x4b656d2072656b204168010a070104060f0d0b020a0a, + 3225 => 0x4b656e6b756d6a6c6f6e010302071d0614030a08, + 3226 => 0x47696e6f67696e010506071a0c12020708, + 3227 => 0x5375726368627571010f020301260e08030809, + 3228 => 0x416d616d75736801030208031c070b020709, + 3229 => 0x5374756e6f6e747501030806012d1606070809, + 3230 => 0x556c6f706f6d6f6b010f010603180707070809, + 3231 => 0x537661676f6e010502010f1b0d09030609, + 3232 => 0x536c616d6b6c756e010a070203081b041502080a, + 3233 => 0x4b6977707a75010a030701240511070609, + 3234 => 0x4d756c616c7a010b020601030c1c060b03060b, + 3235 => 0x506f746b6f74010e071e0a0a060607, + 3236 => 0x4b696c6e696c73696b0110080504140e06060909, + 3237 => 0x506569776c61756c010f030f190d05070808, + 3238 => 0x5572706c696b010a0807030221050503060a, + 3239 => 0x5465686b776970010908012f160f040708, + 3240 => 0x52756b7570010704010221070a040509, + 3241 => 0x506f6e77696e010503101a050c050608, + 3242 => 0x436869627a687573010e080102160713030809, + 3243 => 0x4f7869736974011004020103061a0b0902060b, + 3244 => 0x50696b6b6c61680102040108022a120604070a, + 3245 => 0x416b616e65276f6b010b01031a0b11070808, + 3246 => 0x53756b73697370757474756d010506170f10060c07, + 3247 => 0x47696d62656e7a616d01100203011d0614070909, + 3248 => 0x58756c787375727801040603020717040703080a, + 3249 => 0x536a65727261676c6f6f64010b0803021e0e13030b09, + 3250 => 0x53706f6e736e65740105040205140d160b0604080b, + 3251 => 0x4e6f70656b65010a0f0d0801031b0b0504060b, + 3252 => 0x5a68726f6e01020701040225071303050a, + 3253 => 0x5061796e6e75616d01050b01040623061302080a, + 3254 => 0x53656e70776f6d01070203230a0e060708, + 3255 => 0x6c75702055700105010605040e1d031204060b, + 3256 => 0x556c6167756e7573756c0110030b01040e1f1415020a0b, + 3257 => 0x5475746f7475010d040b02030525050707060b, + 3258 => 0x446f67682064692042696c010f06110e201a0e070b09, + 3259 => 0x5461707361707361707375730102060801041e090a020c0a, + 3260 => 0x536c6174736e6f6d6c696c010206020301040c1f0a06050b0c, + 3261 => 0x446567646567676f010c06040307200d0503080a, + 3262 => 0x5069706c696c6c6127277527010e0b030a01130b15030c0a, + 3263 => 0x4b75676b616e75010b0601040322111104070a, + 3264 => 0x4b6575706f696b010e04030601071e090f07070b, + 3265 => 0x4b7579736b686973736269770102040106220b15060c09, + 3266 => 0x4b616e6b61010301120b12030507, + 3267 => 0x4b6f6b6b756b6b6f6b010d060e01021b090904090a, + 3268 => 0x4d656774656d010e080e03190609020609, + 3269 => 0x416e6163686162010702040112031c0b1405070b, + 3270 => 0x536875796b68756b68010402010c261708060909, + 3271 => 0x74756b20556c6969010e020429190f040808, + 3272 => 0x4e616e206e752027696e616e010f0601081f0405060c09, + 3273 => 0x4b696e6b656e010b02010c031f0c0c06060a, + 3274 => 0x4269796b6579626e6f7977010f0f0302061d0e13060b0a, + 3275 => 0x4e756d6e756d6e656e6e756e01040308040102170a12050c0b, + 3276 => 0x4b756c6e70616c74756c6e01010201140d15020b08, + 3277 => 0x426169627a6961747a61697a010c03010f21080d040c09, + 3278 => 0x496c74736172010e04021a0b0f020608, + 3279 => 0x4d6f6d206b6f20426f01100301220914040908, + 3280 => 0x506178687578687578010d0402030118090b05090a, + 3281 => 0x50756e68656e6b6f6e010a0320100d070907, + 3282 => 0x4e6f6c696f01100304220c0b070508, + 3283 => 0x536f6c696d6f7a686d6f0108070f0206011b070d040a0b, + 3284 => 0x50756d2077756d2048756e01090201060b03130c14070b0b, + 3285 => 0x4f626f6b756e204568756e0106030604011f0e11060b0a, + 3286 => 0x4c75756e616c2d4368757a01030603021f0e12050b09, + 3287 => 0x446c756d73616e150306011a0a09060708, + 3288 => 0x696e2d416769010a070301210d11040609, + 3289 => 0x456d6970696d697075730104011e0613060a07, + 3290 => 0x54656d6c616d73656d0109020708011f090606090a, + 3291 => 0x4d6c616d6e616d01090503040122070502070a, + 3292 => 0x65642d5574616e6972010e010b05061c081402090a, + 3293 => 0x4e756d736f6e01080502220409060608, + 3294 => 0x4e696e6c616d6c616d010d030602270f0c020909, + 3295 => 0x4c6177707570776f6b010303040201081e160804090b, + 3296 => 0x536574657401070306011c0c09060509, + 3297 => 0x4e756f70706f6974706f69740106030210200b0c040c09, + 3298 => 0x507575746e69756d0105030204010d082a0e0904080c, + 3299 => 0x69204b696d61616b010306020a0323031104080a, + 3300 => 0x507574747574746f6c74757401100104210c0e050c08, + 3301 => 0x53617773696a77010a0e0803221012040709, + 3302 => 0x526f6d696d0105031c1009020507, + 3303 => 0x71616d2d456e616e010c041a0713050807, + 3304 => 0x4c696c6b696c6e676c696c01100203240813040b08, + 3305 => 0x4c75706c6173696c6c6f6e0105040b0f030e230c0a040b0b, + 3306 => 0x4b696d67756d67756e70616e010f040313020601210906050c0c, + 3307 => 0x4e6f6c6b6f6c6d0106140104030a0623020707070c, + 3308 => 0x4e656b68656e6d6c6f6e01030201080406250d07070a0b, + 3309 => 0x4b65696c6b65696c74756501080329150d030b07, + 3310 => 0x4e657a6d697a0105010326070c040608, + 3311 => 0x536964696c6401010805060b01200c0704060b, + 3312 => 0x4e69706d616e0101030227010d020608, + 3313 => 0x4765677a696e010c01021f0514050608, + 3314 => 0x44757769647501030215160b0d030608, + 3315 => 0x4369627a657a736175730108010422050f060a08, + 3316 => 0x4d616d68656e736e756e010c0603070417060d030a0a, + 3317 => 0x50656b656d6f276f010903011c1115020808, + 3318 => 0x4869707377696b6f7016080604020323030603090a, + 3319 => 0x50726f6b2048726f6e010504081203011b0b0604090b, + 3320 => 0x50756b70696b6c696973010b06200712040a07, + 3321 => 0x4570746f74205375746b6f6e010b020807010c0b260913040c0c, + 3322 => 0x546368696e6b616e6b616e01080401032d0d15030b09, + 3323 => 0x626961722d4d65747465696201010212011003180c13030c0b, + 3324 => 0x4f6e746f6e756f6e010d020304151b060e03080a, + 3325 => 0x4c6f6e6d757970010e0801250a12070708, + 3326 => 0x536b756d73616d010f011c0d0f070707, + 3327 => 0x476f73686e616b0109030402011a0c0705070a, + 3328 => 0x4f6e616d616d616d010c0403011d0813050809, + 3329 => 0x4c6f79276f790103100701060525070605060b, + 3330 => 0x4d656d20556e6d616e6e616e0102020b14130c050c08, + 3331 => 0x4d656d6974750104040f0203011e070703060b, + 3332 => 0x4e69736d61736d65700105031c0615040907, + 3333 => 0x4d7577686e75796179010c030f05200c0e030909, + 3334 => 0x4e726f706e726f70010e0504031d0d0b060809, + 3335 => 0x4d72696e6e72696d6c756d0107020403200d12030b09, + 3336 => 0x4a616b616b736f730102040203010f0e30140602080c, + 3337 => 0x4d6972706b69726d20496d010f03081b0808070b08, + 3338 => 0x47616d6769756464697463680103030d061a0a12030c09, + 3339 => 0x4c757777696e756e010f01020f08031b070907080b, + 3340 => 0x44756f7368756f6464657573010b03201207060c07, + 3341 => 0x556e756e7475747501061103060816070d02080a, + 3342 => 0x536d656d612053636868650102120306240711060b09, + 3343 => 0x417a736174657a74657a01070104030619070b050a0a, + 3344 => 0x486f746f6e206120486165010f0f020403061d0908020b0b, + 3345 => 0x4b696b6d756b010507020308011b0d0e02060b, + 3346 => 0x536d697072696e010108040314021d0b0606070b, + 3347 => 0x4e616d6b756c6d696d73656b010a02030f07140d12060c0a, + 3348 => 0x5069746974010f06020803011c020a05050b, + 3349 => 0x4c6f6d656e656e01040c04010322100704070a, + 3350 => 0x53616b2d4b79616b7079756c010d010d0c03150406020c0a, + 3351 => 0x736b652d4c75010a0803052b0310020609, + 3352 => 0x5461756b74616e6e696e010903210d12040a07, + 3353 => 0x5368796f74010f0306010214091406050a, + 3354 => 0x4b616b6b757401090129080a060607, + 3355 => 0x4f74617a686f740104040f08011f070507070a, + 3356 => 0x5573697a7573010303041f0a13020608, + 3357 => 0x6b6f6d2053696d69010f04020f0321071006080a, + 3358 => 0x6e656e2d54756e746c696e01010204211214020b08, + 3359 => 0x41776170204170686177010506032f1611020a08, + 3360 => 0x4c7527612027752057756c7501060803010d02260b07040c0b, + 3361 => 0x536475636864756e0110070103240710050809, + 3362 => 0x496e6e756e64756e69636861010d0308160814040c08, + 3363 => 0x6f7320476f7364657a7573010f04031e0b13020b08, + 3364 => 0x6e616c2d4d756e2d53756d010402031f020d050b08, + 3365 => 0x546175746e696101100217080a050707, + 3366 => 0x41616e67616e67756e67010907200714040a07, + 3367 => 0x6b69204b756e696e7501080407030122070d04090a, + 3368 => 0x4e616e73616e736573616d010d0a260f0c020b07, + 3369 => 0x7375205574756d0102040508010224091304070b, + 3370 => 0x556b6f732053656b01040b021f0608030808, + 3371 => 0x546f206e756b204b6501090b1403011e040b05090a, + 3372 => 0x55726d756c20756c204b756c010d03010f02210708020c0a, + 3373 => 0x4d757273697270010d060401220411060709, + 3374 => 0x5375736864756c74011001040302200c1507080a, + 3375 => 0x416b616b67696b010c060301081e060c06070a, + 3376 => 0x4c6f6e6d6f6e6c656e6b616e010b040b030201240306050c0b, + 3377 => 0x4b6c756d6b6c756e67010c0222040d030907, + 3378 => 0x5475726368010102220911060507, + 3379 => 0x50756e74616d756d750106050706030220040b05090b, + 3380 => 0x46716574757270650104030106051a0d1303080a, + 3381 => 0x496e697a68756d010b0104031c0307060709, + 3382 => 0x536573736f70736f73010603040208011f061406090b, + 3383 => 0x446f205364697374690110061501031d100906090a, + 3384 => 0x6e75204b757375010901081a0a12040708, + 3385 => 0x2765756d2765756d6c75657001071425150e040c07, + 3386 => 0x4970656e65730106030107040c1d090c05060b, + 3387 => 0x476f6e6773696d74656d0108030601170c0e040a09, + 3388 => 0x57756e7363686b616b6b656c0108050b1f0614030c08, + 3389 => 0x4d6f68756b6901070f0b0103190f0603060a, + 3390 => 0x54756e6d6c696e010b03070408011c0d0902070b, + 3391 => 0x4d6973736f010a020306220f15060509, + 3392 => 0x4b75796c7361756e6d79617301070201040503230512040c0b, + 3393 => 0x6b65204e656b750101020501030b1c051306070b, + 3394 => 0x506c6f6d2769656d010b08010d0602031f0a0705080c, + 3395 => 0x536f7475736b6f6c6b01060204260108070908, + 3396 => 0x4973616b20496d696e0102081b1511050907, + 3397 => 0x6a75205573686573010b04021f0b0d070808, + 3398 => 0x496e6e656d0105060203011b090d02050a, + 3399 => 0x4b657474657401090308230605070608, + 3400 => 0x4d696d736368686f6e0107020503071a040f03090a, + 3401 => 0x4c6163686c616368010d08020704011e070703080b, + 3402 => 0x416c65706567010d0e0104031d0e1104060a, + 3403 => 0x5765692d4c6f6977010b07031c020b020808, + 3404 => 0x536968697273696b61010d08031d0605030908, + 3405 => 0x526972747261756c010f040b12080302190b1103080c, + 3406 => 0x53616b6b6573010d0103150c0f050608, + 3407 => 0x4c61626f7a680106010b0304170c0606060a, + 3408 => 0x556e757a7568756d757a68010e100301170c13060b09, + 3409 => 0x4b617074616b6b756b01020d07050803210e0803090b, + 3410 => 0x4b6f6e6d6f74610105100b23090b070708, + 3411 => 0x43686e696e0104020421040e040508, + 3412 => 0x59757267756c6e69756c010106011f0c14060a08, + 3413 => 0x4b727573656c726f6b0108020f0801031c041505090b, + 3414 => 0x4e617573736c6f6b01020301021e0414060809, + 3415 => 0x4f27756e6d6f6b0107040803011c010502070a, + 3416 => 0x4a61727a6873696a6b0101022a0406050907, + 3417 => 0x4b616e67767579010a0203082c0a06040709, + 3418 => 0x4b696e7377696e67736e616e010e0b06041e050a050c09, + 3419 => 0x52656c67686f6c7320496c6401030223040a020c07, + 3420 => 0x54636875796e6f01020302071b0d12020709, + 3421 => 0x27617777656577010a080603241614030709, + 3422 => 0x44656d64756e696d72756e010b01210615060b07, + 3423 => 0x416b696d7568010c080104031e0f0f07060a, + 3424 => 0x536c6f6d737a696c6c75640101081e0507050b07, + 3425 => 0x426f6265626c6962010204280d05020807, + 3426 => 0x54696c6b74756c747572010d01050308021a0b12050a0b, + 3427 => 0x4c616e6c616e6d696d010405040301190e0b05090a, + 3428 => 0x4b61676b616d7461676b616701020603050f02270112060c0b, + 3429 => 0x4d6f746d75656e6b7573010c03011f090c050a08, + 3430 => 0x4b656d73656d6e756e010f0406011d0706060909, + 3431 => 0x416b61736e616b01090803020104180a1106070b, + 3432 => 0x4964696c62010c06081d0905050508, + 3433 => 0x57756368756b6b6f680110040302012a190907090a, + 3434 => 0x48616d6974010602080b0705230b0605050b, + 3435 => 0x50616e6b756e0108021d0711030607, + 3436 => 0x486168696c68696c010c06280612030807, + 3437 => 0x536c696b6c696c736b696e010501031d0805060b08, + 3438 => 0x4c616e61706f01080302060819081002060a, + 3439 => 0x496c7061726d01040803200707020608, + 3440 => 0x53756a67756a6773696a010301030221140c030a09, + 3441 => 0x4f6d616e6b6f6e67696d0109010302071a0e14030a0a, + 3442 => 0x53756d756d6d756e0107010c0f29160c050809, + 3443 => 0x53756c696d7363686c657375010e0703011102220306070c0b, + 3444 => 0x4b756e74656e010b0b06030825160707060a, + 3445 => 0x55726f72756b0109010407021c051307060a, + 3446 => 0x50656d6c616b01060305060102200d0a05060b, + 3447 => 0x47656e6b696e6b696e64696e010101020b031f0c0d050c0a, + 3448 => 0x50616d204d616d7365756c01010803251311040b08, + 3449 => 0x53696b69736573696b69010f110d060103200a15050a0b, + 3450 => 0x5465676f7375676f01090301190e0e020808, + 3451 => 0x4d616c68756c68756c75720104010c051b1015050b09, + 3452 => 0x51696e67737567011001200d0c070707, + 3453 => 0x4e69746c61740101040602031a0e0d05060a, + 3454 => 0x446f6765676501010c031e0c08070608, + 3455 => 0x6e656d204e616d74696e010404021d040e060a08, + 3456 => 0x546572656e7a656d6c756d010706070103180a09070b0a, + 3457 => 0x436869746b6162010301031e0507030708, + 3458 => 0x4e656b6e6f6b6c656b010c0201041a140a070909, + 3459 => 0x486568657401100803040d02210e0e03050b, + 3460 => 0x556e6970696c010d0d0b020323041004060a, + 3461 => 0x4f7a697a65640109030421060e060608, + 3462 => 0x456b696c6d736f6b01080102030824090503080a, + 3463 => 0x536368757461010e0c0803011b081305060a, + 3464 => 0x4e6f796579706d6f7901100215040f03190f0a04090b, + 3465 => 0x55622d4d656d7265746d7562010c02010f160608030c09, + 3466 => 0x43686b6174646f6b6775010d010302221d14030a09, + 3467 => 0x536d756c7574736d7501060d020c0323020a06090a, + 3468 => 0x4977707577010b020e06220506020509, + 3469 => 0x4e75696e6c6f656e01010103070c021b0a1106080b, + 3470 => 0x59696d2d4b656d010a030708040f1a050905070b, + 3471 => 0x53617373696b6b616973010e0103240f14070a08, + 3472 => 0x4d6173207573204b6f6b010a0803020f0105150709030a0c, + 3473 => 0x57696e676c776971010b08030701020b121c180d04080d, + 3474 => 0x456d6f6b6f6d75730108030108210e13040809, + 3475 => 0x457a69736d6f7a68736f7a010402010f0b1e0408050b0a, + 3476 => 0x4e656c6e6761730107080f02010329070f03070b, + 3477 => 0x4b69776e656801050508020127031203060a, + 3478 => 0x4f6c6d20536f726e0102030220020a040808, + 3479 => 0x627520506963686269010104010308200f1203090a, + 3480 => 0x4b757373616b73696b010c080b250510020908, + 3481 => 0x6c6f6c20456b756c756c6e6501080f0603041f0408070c0a, + 3482 => 0x536b6f687069706b756b010102160e12040a07, + 3483 => 0x556c73746368616c746368010e060301190813050b09, + 3484 => 0x4b6f6e6720752054696e6f010d0623080a030b07, + 3485 => 0x4d6f7a6f6475646f7461796f010a0d08031e020b030c09, + 3486 => 0x47656b7161206e6775205161010808031b060b020c08, + 3487 => 0x5761737761730108070103021c0e1106060a, + 3488 => 0x556e756e204f69010f010603130a13070709, + 3489 => 0x59696e73696e010f0503081b0b05020609, + 3490 => 0x4d656f706e616e6c69656c01050302070b01200a10060b0b, + 3491 => 0x416c706f6c010c0603080b0529111405050b, + 3492 => 0x4f736f746f746f740109030107170715050809, + 3493 => 0x51756e6771756e67010b080206031f030a04080a, + 3494 => 0x69792d416461620104060103021f040607070a, + 3495 => 0x5a6869696b656269690109010203051d040f05090a, + 3496 => 0x4d756b75682050796b0102040a1b070a020908, + 3497 => 0x4d75736d7573010b010602181013050609, + 3498 => 0x536b7574736b75740105020b071b060a030809, + 3499 => 0x6b756d204368616d6d69627501070301061e1212050c09, + 3500 => 0x4b756d6775730110060e01031a111505060a, + 3501 => 0x4e756e206e696b204e696e01030302060104260f12040b0b, + 3502 => 0x546f6e616d010105230b14020507, + 3503 => 0x54726f636801010802070120110502050a, + 3504 => 0x4b616c716b616c71204172010d01020506230111020b0a, + 3505 => 0x536f69736e6965646e756b010c0203170706070b08, + 3506 => 0x546a756e6d756e62756e010604020301220f06070a0a, + 3507 => 0x44756e64756e6d6173170d03080f0605011b100b04090c, + 3508 => 0x6c6973205569697469010205030708010224080605090c, + 3509 => 0x556c75736f6b75730105080314021d091105080a, + 3510 => 0x4b72656b746568686574010d02030522090a020a09, + 3511 => 0x4e6a696b6c69746e6a696b010f0801040227100f020b0a, + 3512 => 0x476173204e69010d06030102260e0a02060a, + 3513 => 0x50756d70756e010e010302210b11050609, + 3514 => 0x53626f736c696b01100b080603140a1302070a, + 3515 => 0x4e6f70776f706e6f70010503021f0212030908, + 3516 => 0x5363686a6f74010704060103080f210d1407060c, + 3517 => 0x556e6a616e64696d7a696d01020403021c0511050b09, + 3518 => 0x4c756c70617001030803010522071007060a, + 3519 => 0x55747567616b010e040b1508230f1405060a, + 3520 => 0x4b6f6d6d616e0102021c060e030607, + 3521 => 0x49706b656b010b03020604051522061003050c, + 3522 => 0x496e67756e676170756e670107020d040601180c09030b0b, + 3523 => 0x506f6e6e6f6d010103040802011e0d0a05060b, + 3524 => 0x4a697a204d617a0105060801120c10040709, + 3525 => 0x547574756d656475010303050124070b050809, + 3526 => 0x27756e6768696e6727756e67010f041b0610050c07, + 3527 => 0x5461746d696e01100203011d1105040609, + 3528 => 0x4c6f6c6f6e6b6f6d6b6f6d010501080c031c1008030b0a, + 3529 => 0x5069276f6b6f0106030b01220507070609, + 3530 => 0x536f747379696b796573010a010203181514020a09, + 3531 => 0x55616d6f6b756e0104031f1210070707, + 3532 => 0x556e70756d756d010f03250814050707, + 3533 => 0x5469647368617a6c697567010a061e090a050b07, + 3534 => 0x53756e7075616d010e040807031b060605070a, + 3535 => 0x506f736f730105020506270310040509, + 3536 => 0x44656c6e656c010801030502180a0f02060a, + 3537 => 0x506964706964010c05221611040607, + 3538 => 0x4b6f6d646f6d6d696e646f6e0110030c210e0c040c08, + 3539 => 0x4c69776d6c65686c616b01030501260f0f050a08, + 3540 => 0x536b6f6c6c61736c6f01040b080304010219080a02090c, + 3541 => 0x4c65796768696c010c020103200313060709, + 3542 => 0x4d756d6d6f6e010f020806031f0a0f07060a, + 3543 => 0x4d7573204c69707069700108030801140c15020a09, + 3544 => 0x5368696b697368646164610105110302041f010d070b0a, + 3545 => 0x52756567204761696c01030b01020323140a04090a, + 3546 => 0x44696e64697364696e61640102010d1e040d030b08, + 3547 => 0x536f656e6b616b706974010d050406031f0a12040a0a, + 3548 => 0x4f736f6d6f73010c040b020323100d05060a, + 3549 => 0x4b696c6e7570696d6c696b01050307050801240c14040b0b, + 3550 => 0x4973696d6f737568010d0c0201230a0f030809, + 3551 => 0x4d7568656861010401030523070c020609, + 3552 => 0x52756c64696c73756c620107130f28030c050a08, + 3553 => 0x4e6f706e696e6e616e6e656c01080320040b050c07, + 3554 => 0x54616e756c7561736f6d61010e01040602030d2d0e0c070b0c, + 3555 => 0x507579667a686f7975010101031d0410040908, + 3556 => 0x50756c74696c6e756c01040d0203011c110a05090a, + 3557 => 0x50656d204573010107010504080323060d06060c, + 3558 => 0x47756d7475640107060f040307121b1007060b, + 3559 => 0x556c6e616c70616c736e616c010e030102150809060c09, + 3560 => 0x5375706c61616c70697301100301180411040a08, + 3561 => 0x4e65676765732d476f757301030203080104051f0a06030b0c, + 3562 => 0x59777577756a616b01040c0607200310060809, + 3563 => 0x48756d27696e6768616e010d01190512020a07, + 3564 => 0x4d616b6d696b01030203140609030608, + 3565 => 0x526972626972736e7572010a010a03040213120a060a0b, + 3566 => 0x516f71204f72716f7271010d0203220a0d070a08, + 3567 => 0x4173727573686173617301020406021f0507060a09, + 3568 => 0x417a686d757a686f73010b020103260507020909, + 3569 => 0x6170204964796b69647964010a0f031d0b15060b08, + 3570 => 0x5477677361730109070302230805020609, + 3571 => 0x536e75757a6d6173686f7a68010e01261011020c07, + 3572 => 0x4b756e676d756d706f010608200313040907, + 3573 => 0x4d697470756d01060f0104030b0227100e07060c, + 3574 => 0x4368616462656368010a0302011b080e070809, + 3575 => 0x546f7374697001090803061c0e09030609, + 3576 => 0x557279657264657264011002061a0f10070908, + 3577 => 0x4c696d6b617074757373697301080f01041e0806070c09, + 3578 => 0x77696c205975766b77696c010c07020f2a1510060b09, + 3579 => 0x4e616c68616c74757001100102050f060e260b0602090c, + 3580 => 0x4e6172737475726e0108011406041c0d0805080a, + 3581 => 0x4f6e6f6e756e2d456d6f6e01060405081b120b050b09, + 3582 => 0x5275626b657801030306080e020b25080e07060c, + 3583 => 0x4d756d756b610103060804010b20040c07060b, + 3584 => 0x416e6f74756e656801020203120d12060808, + 3585 => 0x556b75736f6c756b756e756e01040a02220c0d040c08, + 3586 => 0x4b6f6b626f736e6f73010b03061a0607050908, + 3587 => 0x4c696d6c61616d6c696d756e01060806031c0607030c09, + 3588 => 0x536c6573666e6f6c010c0f0d0203040120051202080c, + 3589 => 0x536f7a6b6f737370757a010401030d021b0d09020a0a, + 3590 => 0x47656573686d69696d6461670110011f080c050c07, + 3591 => 0x496e6775676f6e01030403260107040708, + 3592 => 0x4b6f736368766573636801060b03061c140d050a09, + 3593 => 0x586d6f6b7475737870696b01050c0218090e050b08, + 3594 => 0x4c756b6b616d0108081b0512020607, + 3595 => 0x47696b77696a74010410080325080e040709, + 3596 => 0x5469737061736d757373616c010a01270b06020c07, + 3597 => 0x4c7574656e204e6f6e6b690105030601200a14040b09, + 3598 => 0x4d656e74616e6e6c6f6e01010403021d0e0e060a09, + 3599 => 0x547575736e7575757573680110010f210514030b08, + 3600 => 0x686f2d4865706f740101040217080c020808, + 3601 => 0x536b7568707574736b7574010c010e03251a14060b09, + 3602 => 0x50756e70756e010a03061b0510020608, + 3603 => 0x5465776f792054697775797401030803090b220c08070c0a, + 3604 => 0x4b6c6f736d6f73010e0408060501220a1204070b, + 3605 => 0x4b6f74756d7501090103070525030e06060a, + 3606 => 0x5969796167756e756c696e75010d04261110020c07, + 3607 => 0x53686973736b756b010807060403011c0b0605080b, + 3608 => 0x53696c73696c204b61726e010903011504021b020b040b0b, + 3609 => 0x4d757a6870757a686b750107030204151f0a14050a0a, + 3610 => 0x546c656b6d6f6b01060701030228041307070a, + 3611 => 0x57696b68776b6e656b010a0406030121030906090a, + 3612 => 0x506f6d6e756d70696d010301080204270b0606090a, + 3613 => 0x4a756262756b7169616d010c0603010815160b07060a0b, + 3614 => 0x5369706b75726d6b75726d010502030118110a070b09, + 3615 => 0x4c6961706965010603060401180b1504060a, + 3616 => 0x5368616c7368676573686567010706030b1b1315070c09, + 3617 => 0x4c756e74757372756b6c756e010201200911030c07, + 3618 => 0x4527656d6977656d01050204032d1212050809, + 3619 => 0x49276f6d6927696c01030203220415060808, + 3620 => 0x54756a746165726a6f6572010e010714270a09040b09, + 3621 => 0x6970205527696d696d6f6b010f040822110a050b08, + 3622 => 0x4b69752d6b65692d4e6f6970010303022a1c0c060c08, + 3623 => 0x4c69706970696d706968656e010a0604011a0b14060c09, + 3624 => 0x496b696b6c6f706f6b696b010203220b12070b07, + 3625 => 0x50616e70756e70616e010e0b07010218060a03090a, + 3626 => 0x456b656b6174656b01010503260c0b030808, + 3627 => 0x466d6973696d75010f080402030120081305070b, + 3628 => 0x4d75746d757468756b68756b010e01060203200b08070c0a, + 3629 => 0x4f6e6f7a6f6201010e051e1213020608, + 3630 => 0x4d756e6d6a696e0104010321050c030708, + 3631 => 0x5a61617a7a616963010415040205201a1504080a, + 3632 => 0x50616c77756c27756c70010f0104210d13030a08, + 3633 => 0x4b756b756b757375010d0601030b1c0b0a03080a, + 3634 => 0x51616a6f726171010101230d05030707, + 3635 => 0x556d6e756e010b020b040d0828030a02050b, + 3636 => 0x456b61706170010f040105031c060c05060a, + 3637 => 0x557275677567010a0f0308040217040905060b, + 3638 => 0x4d6f6c6f736f6d70656d6f73010402060b011b0315050c0a, + 3639 => 0x416b616d696b696b010f03210a12030807, + 3640 => 0x546f626775677961010403020f08011f040504080b, + 3641 => 0x486f6d706f6e010604081202210e1107060a, + 3642 => 0x54756c75736f010c0402210706070608, + 3643 => 0x53686e61617361707361700102030f0622030d050b09, + 3644 => 0x4b696e676b696d68616e670108020304200e0f040b09, + 3645 => 0x417420556c6e696e6174010d0f14180612070a08, + 3646 => 0x4d77756e6d77756e010a021f1007030807, + 3647 => 0x536e61706b756b746174010c08020304230e0c030a0a, + 3648 => 0x53757375737567756e6701090402170811030a08, + 3649 => 0x4d616c617272616e0109041d060d060807, + 3650 => 0x496b6f6b696b010c04010208031b0d0a03060b, + 3651 => 0x456e6b616e6b616e010503040b011e050b04080a, + 3652 => 0x4d696e696e6b756d6e756e0105011d090c020b07, + 3653 => 0x546977747573010203070f0501220b0e06060b, + 3654 => 0x4e696e756b7568696b756e69010a03061c1113050c08, + 3655 => 0x426f6d6f6e7564756775010c100b0d06230707070a0a, + 3656 => 0x4c69656e67616d69656e010b040b010319060a030a0a, + 3657 => 0x4c656c6b6c656c6b01100308200a0a050808, + 3658 => 0x49706f6d6d750103031d0a11030607, + 3659 => 0x557573756e6f6f6c0108020307040b1d051102080b, + 3660 => 0x49777474697974656c7401080e02180b0a050a08, + 3661 => 0x4d6f6e736c656d736e696d01060b02180513070b08, + 3662 => 0x4d616d6167616d69010c060103041e0e0504080a, + 3663 => 0x48776e6b616d74776e0101060f01080721080f04090b, + 3664 => 0x4d657a6d757a010b02030d060129010907060b, + 3665 => 0x536577737365777373616e010d060301210f0e060b09, + 3666 => 0x547571736b6174737469760108030706021c0312040b0a, + 3667 => 0x4d616d6d75746d616d010c03171405050907, + 3668 => 0x5961726d6972676861726768010f02011e0e15040c08, + 3669 => 0x5372616b6e7261736d72656b0102010218090a030c08, + 3670 => 0x4b61616d75756d62696e010d02040310230a0a060a0a, + 3671 => 0x4b6161756b6b6169696c010d040b05080201140c05020a0c, + 3672 => 0x4f6e6f686f70010b0e03290210020608, + 3673 => 0x4d696d616b010b05020601041f050c05050b, + 3674 => 0x7069616e2052657272657201080106030f1e0314050b0a, + 3675 => 0x556d6f7069706970656b010f0201040308191414060a0b, + 3676 => 0x4c75736f6e73757301070301071c0807030809, + 3677 => 0x57696c797a68756c6f6c01060305250615030a08, + 3678 => 0x576977756e61010f01230305040607, + 3679 => 0x506f6b6d75706f6b010e04160a08030807, + 3680 => 0x27696e27616e616e67756e67010e030e080112180c15050c0b, + 3681 => 0x536d7573646f6201010317110b030707, + 3682 => 0x4d6f73696e6773696e67010c01081f0a0a070a08, + 3683 => 0x536174206c756e20526574010404010320100e060b09, + 3684 => 0x6d656b204869686b756d0108041d0e0b070a07, + 3685 => 0x4e696e6e616e010a041c090f050607, + 3686 => 0x4168696b61680109020312090f070608, + 3687 => 0x4b616d73756d67656e010e100401160b0f030909, + 3688 => 0x53756b736173737573010208060702031e0f1404090b, + 3689 => 0x496b61736d656b6f6e0101030206270a12070909, + 3690 => 0x4c7568696e697069010e060305010218041503080b, + 3691 => 0x49726c657274010e0403240105030608, + 3692 => 0x426977726963680103050603111d060d06070a, + 3693 => 0x4c616e73756e0109060107031f050606060a, + 3694 => 0x556d756d756e6f6f6c010f0104110803240a0703090b, + 3695 => 0x4168616875686170756d0106020103072f020d040a0a, + 3696 => 0x4b656e676d656d68696d010c020603041521080d050a0b, + 3697 => 0x6269756b2054696f74696f010a0603010b1b0b0e060b0a, + 3698 => 0x416e68756e6b756e01040814021d040c050809, + 3699 => 0x537075747520537574610101020b030408160c09020a0b, + 3700 => 0x57756b756b686174756b616e01020628020e050c07, + 3701 => 0x536170696469706101040205032b0215040809, + 3702 => 0x4e696e6b696e676e696d01080e030f081d1814070a0a, + 3703 => 0x4b756d696e656b756e610102031d070e070a07, + 3704 => 0x4c6f736c6f697401070d1e0d0f060707, + 3705 => 0x52656b646f7362656b62656b010e0302011b100b070c09, + 3706 => 0x4769672075204101040f06010821050c03070a, + 3707 => 0x4e696d6c756c0101030104051a050f07060a, + 3708 => 0x4f68206e61204f6e6d616e010e0103270812050b08, + 3709 => 0x4d696b2772616b6c696b010f0213090f070a07, + 3710 => 0x57696d6d756e68656e010a061503011c041205090a, + 3711 => 0x53616d6e6c756e0107140501030214071405070b, + 3712 => 0x4b696b617301020102190b07050508, + 3713 => 0x447570617701090305260510070508, + 3714 => 0x536f756d656974010f020b05060325090f04070b, + 3715 => 0x50617377617370756b010f08020c04210b1305090a, + 3716 => 0x53696d6e756d01010203040b0f1f111105060b, + 3717 => 0x6c6f2042756c6b6579010d06021a0b0f040908, + 3718 => 0x446f746e6f6201030408150709020608, + 3719 => 0x4d696c73696c73696b01050c01050603021e071403090c, + 3720 => 0x496b7570657001040805040c0106031a031403060d, + 3721 => 0x4f6d6968204d696d010904011b0a0a050808, + 3722 => 0x456b69707573010e06051c0e11030608, + 3723 => 0x536c756c7368276f6d6b696e0105031b0213060c07, + 3724 => 0x4b696770657178706973010206200710060a07, + 3725 => 0x4768756c646567686768756c010d0604020f1b0a07030c0a, + 3726 => 0x4b6c65736b756b0110011b0807030707, + 3727 => 0x4d696c736d616d0105010308200408020709, + 3728 => 0x4c696d6d6973706974010d030c210c0a030908, + 3729 => 0x506f2d54756d61010b010c220913070708, + 3730 => 0x50756277756d697a68697a68010e0206040b031b0207060c0b, + 3731 => 0x756420417769736177010408030401111b100b03090b, + 3732 => 0x557574756c6973616b20556b010e060f0504031f0c0f020c0b, + 3733 => 0x4d697a686e697a01100108030220130d02070a, + 3734 => 0x4d616e6970696d616e69707501010201031c150d020c09, + 3735 => 0x4c69746d69736973010a0602031a0d15050809, + 3736 => 0x5361736874696d010f010402031f0e1207070a, + 3737 => 0x57617a686d697368010a0503180e0c020808, + 3738 => 0x506f6c6e68616c707568010f08030106020c280a0e050a0c, + 3739 => 0x4b6f6f6b6f6f6d616d69010a0207030406270209070a0b, + 3740 => 0x54617374696b696b696b011001060326060d020a09, + 3741 => 0x4e69616e7469616c6975010b02011f060f030a08, + 3742 => 0x5364696e73756e736e756e0106040106250c0d050b09, + 3743 => 0x49766f726f766f72010c05031e0413060808, + 3744 => 0x536f736f6d75206e6520536f010a031b1207020c07, + 3745 => 0x4d6f67696769010306140311070c070609, + 3746 => 0x4b6574656c7420416c740108030f060119080e030a0a, + 3747 => 0x4b617274616b7a686178010b0601041a0106020a09, + 3748 => 0x576f6c776f6b6e61657701050103021c1905030a09, + 3749 => 0x52656e6e756e74656e010f031c0815060907, + 3750 => 0x4761756c6f617a6862616f010902080401210505060b0a, + 3751 => 0x50656e73636867656e706f6d010f031c0b0a040c07, + 3752 => 0x4b75696b6b756901060b070103081e060e07070b, + 3753 => 0x4e656b68756e6b696d70656e010d01030206180810060c0a, + 3754 => 0x557373656d696c2d536573010602140e10040b07, + 3755 => 0x55726c696c696c6d6e696c0102030207081f0c15060b0a, + 3756 => 0x417772616e6177010906021b0505070708, + 3757 => 0x476f72626f726368616c0104021e050d070a07, + 3758 => 0x546574746f74010b060e021a1108060609, + 3759 => 0x6b696b20416b6c696b01020205200710030908, + 3760 => 0x4d61672d5475010f04060116050224120c07060c, + 3761 => 0x4e6f6b6e6f6b01090802180915030608, + 3762 => 0x4b757220576974776f6b010c03290b15070a07, + 3763 => 0x4d6f65626e756567727561010b0108021e050d030b09, + 3764 => 0x4e67652072612056756d010f04020301230211020a0a, + 3765 => 0x5463686f7901080201031c070c030509, + 3766 => 0x5370756b736e7573010c110301020829021006080b, + 3767 => 0x51616e206c616e2051756e010f0b040222060d060b09, + 3768 => 0x4b697179756c790106140803260105070709, + 3769 => 0x546972696e69010b0207051c0809070609, + 3770 => 0x4f7263686f700105010502270614030609, + 3771 => 0x4e756d6b65010b02110c081a0e1306050a, + 3772 => 0x546a69707375746b6c696b01030602190c07050b08, + 3773 => 0x4f70617720416b61770108031305020422091202090b, + 3774 => 0x50656e656e010406120501041c0d0b06050b, + 3775 => 0x59757372757301030405010225080e05060a, + 3776 => 0x4d61616d787461616e67010b010b230b14030a08, + 3777 => 0x4d6f6f6b796f67010c03020501040d1a0e0a04070c, + 3778 => 0x536573736573010f06250a0a040607, + 3779 => 0x4b6f6b6d72756b6d6f6d010e0405020607031d0505060a0c, + 3780 => 0x537a75646664756e01060325060c060807, + 3781 => 0x416c65747570010101031e0810030608, + 3782 => 0x52616e67756d01030401061c050f020609, + 3783 => 0x54776c6474776c64010b03220d0f030807, + 3784 => 0x536f6c6c6f6c6b010f041c1115040707, + 3785 => 0x446f6f64746f617401040c05060b080317040706080c, + 3786 => 0x5a692d6e612d54756774756701090204180e11030c08, + 3787 => 0x4775746d6567010804060301240e1205060a, + 3788 => 0x416b6d756b756b01030102230c0a020708, + 3789 => 0x70652d4f6b74756b746f010703020b060516080e040a0b, + 3790 => 0x50696c6e7574010c04020f1a0d0d050609, + 3791 => 0x557475746c756d01090304140a09040708, + 3792 => 0x4d6970736c756e7765706f7701050603010204220e14030c0b, + 3793 => 0x5570756e727572727572010904230f06070a07, + 3794 => 0x446f796f646f010102200f10040607, + 3795 => 0x45706d656d65010103060201220c0602060a, + 3796 => 0x4d75736b6f7a6d617a010a06030214080e070909, + 3797 => 0x5075706e656c010c0306020e041f091503060b, + 3798 => 0x68656e67204d756e67010f01211106020907, + 3799 => 0x5275726f620109050403011217090605050b, + 3800 => 0x54757675790105040103081b010e06050a, + 3801 => 0x50756c6d696c746974010a05011c0608060908, + 3802 => 0x49727470756c6b010c1206020103240a0e05070b, + 3803 => 0x496d20496d6f6a010b1106021e0515030709, + 3804 => 0x4d616c696d6d6f6b6d610103010304021e0608020a0a, + 3805 => 0x536c6f7368204b6c61736801040c200e12020b07, + 3806 => 0x74616e2054656e74656d616d010f0407010f03280610060c0b, + 3807 => 0x4d6f6d746f6e6d6f01060306070127060b06080a, + 3808 => 0x6d656c6d2d456b01080104060821060e06070a, + 3809 => 0x49696963686f010e0302250109070608, + 3810 => 0x487572776e6172772769726b010503050415140e0e060c0a, + 3811 => 0x537574736167010f050803230b0b020609, + 3812 => 0x7369204c756b6f6b010e0103062d1405040809, + 3813 => 0x547567686a756267686c6571010d021a0514020c07, + 3814 => 0x4f6e61206f6d20456b6f756b010e0703011e040f030c09, + 3815 => 0x5a686562207a6f72204d616e0107140d07030102170607050c0c, + 3816 => 0x5769686168010e0603041d0b08050509, + 3817 => 0x4b756b6b757301090201190408020608, + 3818 => 0x4e7570756e756b010901031c0a0a030708, + 3819 => 0x53756e736c616d010d03010627100f020709, + 3820 => 0x4579616b656d657001070113030214061d090e03080c, + 3821 => 0x467a6861617365736461610110040301200c0d070b09, + 3822 => 0x4f6c616c6f73656c6f73010c0609020301230a12050a0b, + 3823 => 0x45707573616b01010801020317090506060a, + 3824 => 0x756c6d20507573707573010507032b0112060a08, + 3825 => 0x537769786e6978736768616b010a0428030b040c07, + 3826 => 0x446564646564204f6464656401100806031c0610060c09, + 3827 => 0x586768757873797562010c020403080627080c06090b, + 3828 => 0x5461756e7375696d6d75616d01040501030d1e0208040c0a, + 3829 => 0x4e6572746f726b010805010b0e03061c080804070c, + 3830 => 0x4368776d6368616e010b01240411030807, + 3831 => 0x457470617475797020416d01050203290306040b08, + 3832 => 0x4967617a6861670106110105020321090d04070b, + 3833 => 0x4b756b2769686927010c03250a10060807, + 3834 => 0x5a617a68697361010c0b06040807170e1304070b, + 3835 => 0x516f6b204f736f6b010e03020121050a020809, + 3836 => 0x4d6973205375736b7573010605020b01040c1f0708040a0c, + 3837 => 0x5769787864657a0101040203011a050c04070a, + 3838 => 0x4b696c75204c616d69010401071a0906020908, + 3839 => 0x4e6c6f776e696e010701021d0d0a050708, + 3840 => 0x53756e6f7475010e0506271b14050608, + 3841 => 0x5372616368010707210a0f060507, + 3842 => 0x4e656e6e756e010a03050102040618010b04060c, + 3843 => 0x556c77756c27010e0c0302070520041006060b, + 3844 => 0x4c6f6170706f616c0108020315070c020808, + 3845 => 0x4e6c656e746c61706e6c656c010103011e0d14030c08, + 3846 => 0x456e7a756e010c040203190b09040509, + 3847 => 0x276127616b61010b030401101107030609, + 3848 => 0x4b6f726b656c74696c6e010e140803070f06230806070a0c, + 3849 => 0x4e756e696e010c0306010225090907050a, + 3850 => 0x4d756c73757a7577010903150808040807, + 3851 => 0x4d6c6174767571010a030221060a060708, + 3852 => 0x53686e65736874617a010508062d0f0e060908, + 3853 => 0x4e6f73726f6d010f01020827170f070609, + 3854 => 0x517573204f6b01090107180710060608, + 3855 => 0x54756b74756b6d6973010d080305220314070909, + 3856 => 0x4c756d656e656e010405031f0706060708, + 3857 => 0x556d656e65736f6d756c656e01010320040f050c07, + 3858 => 0x50616d6e696d204e696d010a03170f06020a07, + 3859 => 0x4c697069700103030806022e131507050a, + 3860 => 0x556e757465680104031e0b11070607, + 3861 => 0x556a686f6a70010a0801020413090607060a, + 3862 => 0x4c69736e6f6c690106030601230707070709, + 3863 => 0x4d756c70756e010f01110410021b0d0b02060b, + 3864 => 0x54757a706173687469736801060f02060426020c040b0a, + 3865 => 0x5377656e7279616e6d696e010c0203011f0505040b09, + 3866 => 0x53696e6c69204c696c696d01091101020e031d0809030b0b, + 3867 => 0x556c756c27756c756c010a040e06080b25060a02090b, + 3868 => 0x41716970697101040119060c070607, + 3869 => 0x496b6f68696d010f030f041c0d06050609, + 3870 => 0x4d6f6e6e6f6e6c616e010603040105020f19051206090c, + 3871 => 0x536d6974737a75737a7562610108040305141d060d060c0a, + 3872 => 0x4d697a6372696a010a031f0c09060707, + 3873 => 0x506f692d576f696c707569010201040311260408040b0a, + 3874 => 0x4e696e73696d656e01030302150119030b03080a, + 3875 => 0x4d656d656d6f6e756b0110010323090f050908, + 3876 => 0x437572736c696201050803010406260b1307070b, + 3877 => 0x4d617364756e73617373696e010c040301170410020c09, + 3878 => 0x4e6c656d204b72696e0104010b0403021e070706090b, + 3879 => 0x4d696e746f6e6d756d010601170f06060907, + 3880 => 0x5a616b6b6f6d637563776f6d010f0301041e0f10060c09, + 3881 => 0x53616e6c6f7301100b08012b0806030609, + 3882 => 0x55706b69736c757274010506210908060907, + 3883 => 0x496e6b752d5461746b616e61010c0e020f28080d040c09, + 3884 => 0x656c2d4f6c6d656c70656c70010c0103180a11060c08, + 3885 => 0x53776f6d746c756c0105060803010218070f05080b, + 3886 => 0x536f6b6973696d6f010d0502042a0a0e040809, + 3887 => 0x4865776d657777656d010706051c0306030908, + 3888 => 0x48616e6d696e70696e68616e010903021b020d060c08, + 3889 => 0x4d696e6d616d6d616d010506070117070a060909, + 3890 => 0x4b65696b706f616b01100218030c030807, + 3891 => 0x5367657367650102060301140d08040609, + 3892 => 0x4e6761736e6761737175720109030e07180e0a060b09, + 3893 => 0x656e205368756d64656e010e08030402210914060a0a, + 3894 => 0x5370756b7374756b0105050201080425020f06080b, + 3895 => 0x52616b72616b72757372756a0102010b0406021d0e0e040c0b, + 3896 => 0x47687269736b616b204d696b010a0f060203180805070c0a, + 3897 => 0x4d61736d617301080b0103040220140f02060b, + 3898 => 0x4d7568656d204e656e617768010d081003061b0b12040c0a, + 3899 => 0x47616473756c6368696c010104061c0915040a08, + 3900 => 0x53776b6e6f74010b0c1e1205070607, + 3901 => 0x5573656b616c010903020f1d0613060609, + 3902 => 0x6b756b204c6f6f6b6e6f6f6c01050702190706030c08, + 3903 => 0x4a75776e65646f6e2d57656b180b0103201312040c08, + 3904 => 0x4f73616c6f756d65617501010803070b281014050a0a, + 3905 => 0x4d616d696d616e7501020b02060518121302080a, + 3906 => 0x4f7375736e6f7a6c757301090201061f100b040a09, + 3907 => 0x57656e6c656e6c6f6e01100b0102030521061406090b, + 3908 => 0x536d617368010704030b0208061c031203050c, + 3909 => 0x496c757320496b697301040605031a0705050909, + 3910 => 0x53636869656e010c020301060422100503060b, + 3911 => 0x556d756d696d696e616b010d08050201031d0608050a0b, + 3912 => 0x486169686961746e61690107020304200210030a09, + 3913 => 0x416e6c69736f2049010c0224070d050807, + 3914 => 0x4e756e696e65010e04021e1b07030608, + 3915 => 0x506c6f6b6d6574010c081d0a0c040707, + 3916 => 0x4f6d776f6c68010604030108180b0a06060a, + 3917 => 0x556775676775676f6e01050302210d10030908, + 3918 => 0x556d656a27706970010603080b0227030604080a, + 3919 => 0x41756d6861756e656e0107011c0912050907, + 3920 => 0x54696d6d696e6768616e010e03012f020b030a08, + 3921 => 0x4b696e636877616d010a06030204051c050c04080b, + 3922 => 0x5075797579756e6f010901080306020e24050a04080c, + 3923 => 0x496d61682d4168756e687568010a04031f0713020c08, + 3924 => 0x536c756e6c756e670106021d0d05050807, + 3925 => 0x457020496b74656c6b01050405031f0c0b070909, + 3926 => 0x4c77756b70776573736f7301050308061e0f08020b09, + 3927 => 0x73796973682050657a68010e0f070104062a060e070a0b, + 3928 => 0x55747574206174204170756d01070301020e0721040f030c0b, + 3929 => 0x6e61204575696e010a08031a0a10050708, + 3930 => 0x496c62616c6e616c6e01070703040128020f02090a, + 3931 => 0x456d6f67696e696e010e0304081e190f030809, + 3932 => 0x416d657365736801030604012c0605050709, + 3933 => 0x416c77696c7379656c616c7701080103061123030b050c0a, + 3934 => 0x506970756d70616a010f0b0325060e050808, + 3935 => 0x53696c756c6d73696c010a040203011c0c1307090a, + 3936 => 0x556c696d616c0105010304100f13080a03060b, + 3937 => 0x42617a62617a6c65626c65620110030206230307060c09, + 3938 => 0x676572204f72010d101d0207040607, + 3939 => 0x4971616d757101100c190d11020607, + 3940 => 0x6d756d2d4775726e7567756d0109061e150e070c07, + 3941 => 0x74756b204b6972696b010e0203010820090902090a, + 3942 => 0x496b696774696774696701070402031b0a0c070a09, + 3943 => 0x44696573636877656f010704150301140222060904090c, + 3944 => 0x536174696b69010c01031f0414060608, + 3945 => 0x4d75656e68656f68686575700110030401240707040c09, + 3946 => 0x41746f74696b0110031d0c05030607, + 3947 => 0x50696e67616e70616e7a756e010b0c08170a11060c08, + 3948 => 0x4e656c756c6e0110030201061a1b1306060a, + 3949 => 0x4f67656b6f6c6f6b010f0306070122080506080a, + 3950 => 0x436875756368750102030401110606070709, + 3951 => 0x50756b736e7573736e757301070f221207050b07, + 3952 => 0x536961706d69740108010604021f010d04070a, + 3953 => 0x5475686174756875010c070b0308020121130606080c, + 3954 => 0x576d6f7061010a0803011f0d0e070509, + 3955 => 0x496b2d4b616c7a6b6172010e080d0e1d0812070a09, + 3956 => 0x4e6f746b6574010805060301022c010807060b, + 3957 => 0x53756e6275205975796f6e67010d030208210915050c09, + 3958 => 0x4e69756e7461696e696101050203200b10050a08, + 3959 => 0x557a6b6f2d5465657a010902250505060907, + 3960 => 0x5169776768696c616768010e0403160d0f070a08, + 3961 => 0x5a756d6e6f63756e01050805030e021c030b03080b, + 3962 => 0x54656e6e756e6e756e0103030204211712030909, + 3963 => 0x41736820536f736e67617368010f060403020b1f090f020c0b, + 3964 => 0x5a686f646272657a68010703061c0708070908, + 3965 => 0x50696c736b7501020f011e0a09060608, + 3966 => 0x5475736f6c6501040e010403071d071305060b, + 3967 => 0x52696e676a697601040203010627091306070a, + 3968 => 0x4d65656c6d656c736f6c6d01100106052a040e030b09, + 3969 => 0x50696e6d756e6d696d0101010604250211070909, + 3970 => 0x416c72696c76010110072a150a070608, + 3971 => 0x4f7375736801060106270911060508, + 3972 => 0x4e6f6e616d204f6e6d756e0106042d0515050b07, + 3973 => 0x4b756b6d756b010f021a080f030607, + 3974 => 0x45736d697a746f7a657a6f7a010b13031c060e020c08, + 3975 => 0x4a6577696768616b68690105011204020b1e0505030a0b, + 3976 => 0x536b656d736d650110042b0312040707, + 3977 => 0x546368617574627564010c070208031017040c06090b, + 3978 => 0x4d61756e736c61756e01080b0302061f051002090a, + 3979 => 0x4d696d6e696c6e616d73616d0109020f08011a0b14020c0a, + 3980 => 0x6b6c617320276c696b777573010903041c0d14050c08, + 3981 => 0x4e616e736e616b010c0302040106072d021005070c, + 3982 => 0x547574617361204e757461010a030802140f10030b09, + 3983 => 0x6b6f6c2d4e6f6c73757001030503260d11060a08, + 3984 => 0x4d756e6e6f6e6e6f6e010a0108031f0c0e070909, + 3985 => 0x6368756e2041756e6d75010d0601021d030f030a09, + 3986 => 0x547573636875676f6765010f010d0403210b10060a0a, + 3987 => 0x526f6c7365010102210c10050507, + 3988 => 0x48696568616101090621010a060607, + 3989 => 0x4c6f7a6b6973636801100104020e03220d0802080b, + 3990 => 0x65697020456974617574756701060d0201270b0e030c09, + 3991 => 0x55616b7a686f75010305031d1415060708, + 3992 => 0x536e797a68010f050d02200b10060509, + 3993 => 0x4965776b68756d010e03191708030707, + 3994 => 0x4d6174736d756d736b756d010b0f070b031c0909040b0a, + 3995 => 0x5369706b61736b617301050305251305020908, + 3996 => 0x4e616b6c616b0103010302042a020e04060a, + 3997 => 0x436879656b62616b010a03060b10050725020704080c, + 3998 => 0x4b6970756e0108011f0309030507, + 3999 => 0x526f71776567686c6571010f03070205180806020a0a, + 4000 => 0x69204d61756d61010701200b05060707, + 4001 => 0x5a6573687a6875010503070b01210b0d06070a, + 4002 => 0x4f6b696d6174010a0306080229060a03060a, + 4003 => 0x546f74746f7401050424020d030607, + 4004 => 0x5572676d756c64756c6d7572010c010e02290d09020c09, + 4005 => 0x617320497475707570617001100307041b080c040b09, + 4006 => 0x4469676e65676e6973646967010d0603021e0411020c09, + 4007 => 0x536e757474697473686e6174010e050302061e1012050c0a, + 4008 => 0x496d6b696e6e616d01040204011f090c060809, + 4009 => 0x4c697a686b697a736901080803110628090603090a, + 4010 => 0x416d616d616d6177010704070124100d020809, + 4011 => 0x416e756d696e010105031c0710040608, + 4012 => 0x4872696d6d656d010f060216050d040708, + 4013 => 0x4b6f6e6f6e6b756e656e0101030501021a080b030a0a, + 4014 => 0x4f726e6f6d6e6f6e676167010e0b120807030b07, + 4015 => 0x5363686f6b697373696b010e0301230405070a08, + 4016 => 0x417262696768010c01150815060607, + 4017 => 0x5369706b756b6d696e736173010a0305010e171d09070c0a, + 4018 => 0x4e7573687520546f6f7a0101030207100b05070a09, + 4019 => 0x6f6720536f74010d030b02240e0b020609, + 4020 => 0x73617a204c6f7a6d6f730109050204030b080122090c020a0d, + 4021 => 0x4d757a68204e7975677a756e0104071d090c020c07, + 4022 => 0x5a69616c61696c01040204290d0d040708, + 4023 => 0x496b2d4b6f6d696b6f68696b0102020b1b0a11070c08, + 4024 => 0x4768656e6768656e01100502251805050808, + 4025 => 0x55736573756b656d756d0106041302051f0b0f050a0a, + 4026 => 0x50616b6c616c610103040103021b060a06070a, + 4027 => 0x4c696c692d4c616d6c756e010c0201031a0e0d040b09, + 4028 => 0x5075206c61204c750108060302290112060809, + 4029 => 0x4d6f20686f6e204e75010b03120205041c061205090b, + 4030 => 0x4b696e656e010703020e1d0607060509, + 4031 => 0x4e6f756e6e6f756e010d07060b0223040b06080a, + 4032 => 0x536f65736f656b736169010201180312020a07, + 4033 => 0x4b756e6d756e6c6f6e01090502120e06050908, + 4034 => 0x4b6f6d276f776f6e0102041e0a07070807, + 4035 => 0x53697374696b73746f73010b020e04081a0511030a0a, + 4036 => 0x5065736573656d7573010d01250a15040907, + 4037 => 0x49676920506976737567010b050d0408061a0c14050a0b, + 4038 => 0x4e6f70736f696d70656b01040504010302270508020a0b, + 4039 => 0x4f796b6c6f796d75796f7701050305020f1404011e120d070b0d, + 4040 => 0x4e776b6e72696b0103080402012a151302070a, + 4041 => 0x4d6c756d756c0109030b01062a020802060a, + 4042 => 0x537574737574010a06050c080122030804060b, + 4043 => 0x4f73696c6f74747574010b0603150422070f05090a, + 4044 => 0x4e69706e6f746e6f740103030b022b040f030909, + 4045 => 0x6e692d54696e6f7061010b040f0203211f0a07090a, + 4046 => 0x53696d7370697001100302041e030d030709, + 4047 => 0x4e6972686e65726e6e697268010701031f0909020c08, + 4048 => 0x4d6f6768736768756201010208180212050908, + 4049 => 0x4674736368656d010e03290805070707, + 4050 => 0x6e7573205361730110030b191309020708, + 4051 => 0x4e756b6e6c7573010b0302200414040708, + 4052 => 0x4d6f6e64696d6f010a0f0701211011070709, + 4053 => 0x446c6f6e776c616e776f6d0110010403060b210408060b0b, + 4054 => 0x5061726d616b01060804260209030608, + 4055 => 0x50797065747901090203200508040608, + 4056 => 0x4b656d656b01100302210205020508, + 4057 => 0x49706179616761676179010c010827130b030a08, + 4058 => 0x276c61272772656b276f6c010201050c1e0707050b09, + 4059 => 0x4b756e6b696e0107031a0d11070607, + 4060 => 0x536c756e6768696e6701070f0502041f0d0d04090a, + 4061 => 0x4c69746b756c6c656c73656c0108060b010f0522160a070c0b, + 4062 => 0x4b6f6e736f6e0110020e041b1009070609, + 4063 => 0x4e7275726e756e7a6c696b01080701030802170914020b0b, + 4064 => 0x556c6e756c010c0f021405031e071206050b, + 4065 => 0x4b69756d20496d6f6e6b6969010e021204031b040d030c0a, + 4066 => 0x54656b74756b010b030b021e0606050609, + 4067 => 0x6d6f6b20586465787965010d021b0206040a07, + 4068 => 0x59696c7567696c750106010508200809070809, + 4069 => 0x54696c6d74696c6d010401061e0215060808, + 4070 => 0x4d756d6d6c69746d756c010805100301250205030a0a, + 4071 => 0x54752d4e65706b650107030802060118040a03080b, + 4072 => 0x4e756e757365736501100f0508031a061004080a, + 4073 => 0x4574656b7568010a0c02171505060608, + 4074 => 0x5579746b6f79746f79010f0102031c0305040909, + 4075 => 0x4a72756a696a6a6c756a010c0608031d120c060a09, + 4076 => 0x4c6f6c6f6462726f6b0103020d010407200f1205090b, + 4077 => 0x516f7363686e69010602031c020b060708, + 4078 => 0x4d617475726e69726e6972010708030b0201210914070b0b, + 4079 => 0x4970757369707570656d011006080201100d260d06060a0c, + 4080 => 0x42756a716975746a616a0104060301041b0e10050a0a, + 4081 => 0x4e696e6e696b6e796e01030b04210515020908, + 4082 => 0x42796c6e6e656c64011001030f1b070e020809, + 4083 => 0x6c6f204c696e6901030405031a0c11060709, + 4084 => 0x54696d756e73756d010901060208210d0b03080a, + 4085 => 0x416c6e756c6b696c6e756c0103070603220e12040b09, + 4086 => 0x6f622d53656701040803010419141402060a, + 4087 => 0x50616e696e6573657465010e0302011d0c06060a09, + 4088 => 0x416c6b6b616c616c010e040601032b020602080a, + 4089 => 0x59757368204b686f79010a01251909040907, + 4090 => 0x54696e75746901070b060402080a1e091404060c, + 4091 => 0x426962692042696e010c04021a1713050808, + 4092 => 0x4472696b6c6973010303010f0210030802070a, + 4093 => 0x416d616b616e6b756d190c0f0807011b040603090a, + 4094 => 0x5362756e736b756e67656e01030206220612030b08, + 4095 => 0x506c756e706c756e706c756e0103020103061f050f040c0a, + 4096 => 0x4b6973204b617a6b6f7a01070102071c0a15060a09, + 4097 => 0x497269626962696d010704010321050d020809, + 4098 => 0x4469777577610109010403020d1f080505060b, + 4099 => 0x64776f732048656e0108050d220412060808, + 4100 => 0x416c70616c6e6f6c6b010603070e0108140d1306090b, + 4101 => 0x536173756c75010f0107080321050505060a, + 4102 => 0x457a6869747363680107021e0812020807, + 4103 => 0x4d756c77757701090b05031c0f0b030609, + 4104 => 0x6d6f72204b617173656c01040803260105040a08, + 4105 => 0x47617a68696467617a68010c020b0301210115060a0a, + 4106 => 0x4b696c77616e77616e01010102031b0d09040909, + 4107 => 0x417375617a6d757a010d0e0f110508020808, + 4108 => 0x4b6f6e756b6f6c75010f02130e05040807, + 4109 => 0x57656b77656b73746573011001050407221514040a0a, + 4110 => 0x54796e7365737a6f677a6f67010701031e0e0a030c08, + 4111 => 0x556c74656c6e6972700104031c070f070907, + 4112 => 0x4d72756d74616d74656e6701100f03041b0708020b09, + 4113 => 0x50657473656b0109010803021a100705060a, + 4114 => 0x4b616e756d01050503061d0309070509, + 4115 => 0x496b656c697273204f6d010d1002200315070a08, + 4116 => 0x4e69737573616c757375010f01070f03200305020a0a, + 4117 => 0x5469736973010a01200b07050507, + 4118 => 0x4c6f6e746f6e6d6f6d0109040306021c0c0603090a, + 4119 => 0x41726d6d6972010504031b080c070608, + 4120 => 0x52617a73617473687a696368010102030701041d0e08050c0b, + 4121 => 0x4b65696e6b656f6d65696b01020c0f0a02030105200605040b0d, + 4122 => 0x547261736b77697a010c03011d0907020808, + 4123 => 0x276f276e6f6c6c6f656c01010f0702030123090c040a0b, + 4124 => 0x4d72756e2d4d756e6d756d0109020a03051b0911050b0a, + 4125 => 0x466c656e676674616e01090322050f060907, + 4126 => 0x4c616b756c010a0401030c021a061206050b, + 4127 => 0x556c76756c76010d031f0a11040607, + 4128 => 0x4e72697a73697a76697a0107010b031d0611030a09, + 4129 => 0x5469756b7469756b0110040805250413020809, + 4130 => 0x536d756e736d75736c756b61010b01030f07081c1112020c0b, + 4131 => 0x41676e7564010a06010402032a020d07050b, + 4132 => 0x4d696e6d656d756d6d656d01040b03150501200211050b0b, + 4133 => 0x536869746d6173680107040501061b040505080a, + 4134 => 0x4e69706e69746e690106050206031a0c0507080a, + 4135 => 0x50726f736f6b010c040802011f021002060a, + 4136 => 0x42617471750101010d0520040a070509, + 4137 => 0x4b756b7370616b74696e010a05030b1d060c040a09, + 4138 => 0x4f7274746f6b686f6c6801010301230e12050a08, + 4139 => 0x45786f6b6f736f6e616b6971010c01080322070f040c09, + 4140 => 0x4d656d6f6c6f010f0608031a0908050609, + 4141 => 0x556b204e69010d04020f060829090c06050b, + 4142 => 0x5576696e67697675670108060104311313050909, + 4143 => 0x47696e72656e01090f03080201260b1506060b, + 4144 => 0x4c756d6e616e0108020103061f100d06060a, + 4145 => 0x4e6f6e73696e6f740105030b1b0808060808, + 4146 => 0x48616c656527692775010e03160608030907, + 4147 => 0x4b65726d6573736572736570010b01070f061e0505020c0a, + 4148 => 0x4c61776d72696e6d696b0101010503061d0714060a0a, + 4149 => 0x6e692d4c69746901050b190606060707, + 4150 => 0x42616e6b686f6d646f6e670109040106260314040b09, + 4151 => 0x696c2d416469676875776171010902050103330c11070c0a, + 4152 => 0x756220456d6f73757001080301220215060908, + 4153 => 0x4f6d756c6f6b756c010f060302260409030809, + 4154 => 0x556d6c6f6d010701030523050a050509, + 4155 => 0x4b696f706b75656e6c7565740101060402030801201114050c0c, + 4156 => 0x4b756b6d656e6b696b73696b010108020106250611040c0a, + 4157 => 0x536f6e6b7570750106010308210a12020709, + 4158 => 0x4c6f6c6f7363687065736368010f0602220512030c08, + 4159 => 0x4c757573686c61616d0109030b02180708020909, + 4160 => 0x5374656e6773636874756e6701060b040115070d050c09, + 4161 => 0x45756e6e656d756e010b030f2a030e040808, + 4162 => 0x756d2d4f70656e010e0714020329191507070a, + 4163 => 0x4272616c646c6974010702240c0f060807, + 4164 => 0x4e756767756701010c0e0204210c0705060a, + 4165 => 0x556d756e2050756e756d616e01070104141015070c08, + 4166 => 0x5379726d79726b706172010803140a15020a07, + 4167 => 0x4e756e20276f6e204c776d01090105121a0312020b09, + 4168 => 0x4c75707a68756e7a68756e010207190a0f050b07, + 4169 => 0x466d616d64697373686b7564010d03012d0e11070c08, + 4170 => 0x546c696e204b696e010e0f0203081d0d0d05080a, + 4171 => 0x556e756e67697270010e05230c0a040807, + 4172 => 0x74696d2053706168010104060302010822011104080c, + 4173 => 0x496469647564204e7261640106060201031f0715020b0a, + 4174 => 0x556e756e696e756b0107082f020f060807, + 4175 => 0x4b6f74656e6f01030102120b12070608, + 4176 => 0x50656b2054726f740107031e0c0a020807, + 4177 => 0x4c796b6b6869737372616b01050f03021d0c0a040b09, + 4178 => 0x4d6c616d73686c756d010b030d020e06231a0c05090b, + 4179 => 0x4475746e75010603080206220a0902050a, + 4180 => 0x4d616e6b72756e010610030120050d070709, + 4181 => 0x456e206b656e204e6501070204060526050d07090a, + 4182 => 0x4d6f6d686f6d0108030106150c08070609, + 4183 => 0x4c617074757470757a6c6170011003022a0509050c08, + 4184 => 0x556b697368656c6f6d010d010304021d071002090a, + 4185 => 0x54697369737065736801010103260f14030908, + 4186 => 0x4d6f6d696d6901090603260410020608, + 4187 => 0x526567682d7775732d556b01010204010319070d050b0a, + 4188 => 0x52756e6d756d72756e73696e010d08150203012f0d0f040c0b, + 4189 => 0x4e69616b696f010a01071b060c060608, + 4190 => 0x4b69726572686f6c6b6972010a04011c1113060b08, + 4191 => 0x5a686f7a70756c6570010d0b060201230c0803090a, + 4192 => 0x536974756e7469010c03260f06050707, + 4193 => 0x59757a6870752050656e696b0103031f1905070c07, + 4194 => 0x4275697a67696f71010b080b03061b101306080a, + 4195 => 0x556d616b616b696b756868750110080623030e020c08, + 4196 => 0x536d652d6c616c2d4d65010503010b0406251f0c020a0b, + 4197 => 0x416e7a756e6c6f6c010703240312070807, + 4198 => 0x416c69676c756d6c756d0104010803190d15030a09, + 4199 => 0x5370756e6d6f6e010a011b0614020707, + 4200 => 0x54756e74756e67756e01050104180d0d020908, + 4201 => 0x487569204c6975010701210914030707, + 4202 => 0x456d6f6e61776f70010501190812030807, + 4203 => 0x42656e6275626f205a750103030501180a0e020a09, + 4204 => 0x4b756e74726f6e746c696e67010b030b290510020c08, + 4205 => 0x4e616b6e72696b010f011c0a0c070707, + 4206 => 0x577574736e7562010c04031c0513020708, + 4207 => 0x41777761776c65770102060b070319060507080a, + 4208 => 0x50696473757a68010f0401250206040708, + 4209 => 0x42757270627572706c7572010b0b010804031b1309070b0b, + 4210 => 0x4d696b6c6970696e6f6b01050402061a0415040a09, + 4211 => 0x536c6f6e6674656e010f0702081e070a040809, + 4212 => 0x456d7a68656e6d7564010404021d0412060908, + 4213 => 0x4b69706b65776d010f02080103041c061404070b, + 4214 => 0x4d61746e616d736d656e01010304021b0c0b050a09, + 4215 => 0x756d2d44756e2d556e010b0403060e25080806090a, + 4216 => 0x5661697970756976010c0201031b1206040809, + 4217 => 0x55716d6f6c67204f6e67010508010306041e0b0b060a0b, + 4218 => 0x4c696b6c696d6e757001090206031f0a10050909, + 4219 => 0x4d6f74692054696d6f010b0321110e040907, + 4220 => 0x52616d7463686c756e6a6f6d0107031c0607070c07, + 4221 => 0x5375696e6d656f01050803010214071406070a, + 4222 => 0x53687a6f747364656c0110020d08261b10070909, + 4223 => 0x4b696e67696e74696e6b696e01060803011c0d05070c09, + 4224 => 0x4d616d6f204d61737377010c0f03260c05050a08, + 4225 => 0x466e616e666e616e70757401020304061c0a0e020b09, + 4226 => 0x4f63686520756e6720450106020305250f14050a09, + 4227 => 0x5368706f6e6e656d204b6f7001100201290a11030c08, + 4228 => 0x4f6c696b6f7301090401062a0811050609, + 4229 => 0x5a757a7a757201100f0b081202011c091305060c, + 4230 => 0x536b6574736e6570011002210e11030807, + 4231 => 0x4775727070756c6e010d030204081c140706080a, + 4232 => 0x537573656e205365737375730102080403170805060c09, + 4233 => 0x61732d556b6b72756e726174010a060302011a1115040c0a, + 4234 => 0x4d7269736b696272756b0110030806200505030a09, + 4235 => 0x47616c696c6f70657065010d04080203190d0b060a0a, + 4236 => 0x6e65616b204e65732054756b010d06010403230513040c0a, + 4237 => 0x50616e756d616861010404240a07060807, + 4238 => 0x496d656e6c696e0110081d110c050707, + 4239 => 0x4e6965656d010a0f060210290a0b03050a, + 4240 => 0x4d61696c746173011005030402010b1d0b0d05070c, + 4241 => 0x537a656d757a736a656a01020b040103021c0512060a0b, + 4242 => 0x4f717a68696d61646f71010a04190813020a07, + 4243 => 0x4d756974697567686175010503240313050a07, + 4244 => 0x536974736974736b617001080604220210070a08, + 4245 => 0x44656e7368756e736f6f6d010f061d0b0c060b07, + 4246 => 0x4275776a6162010a0406020322090e04060a, + 4247 => 0x4d696d70696e6b696e010905280208070907, + 4248 => 0x4c6970204c696d6c69700106020107270f05040a09, + 4249 => 0x53656c65726d73656c011003010508021d041104090b, + 4250 => 0x496e6d756e20416e010903041a110c060808, + 4251 => 0x4c756c6e696d7369706c756c010e0803060102170915030c0b, + 4252 => 0x5573756d616d0101021a0408020607, + 4253 => 0x4a65736a65730104030201081a060905060a, + 4254 => 0x46626168716164010903170e15030707, + 4255 => 0x6e726574736368204e72616401050603220c05060c08, + 4256 => 0x536f67736f670108081c0e12040607, + 4257 => 0x446f6c6b2d72752d44756c740108030205080104230c10050c0c, + 4258 => 0x4d6f686d6f6801070102060b1f0d0504060a, + 4259 => 0x54696e6b756e6e696f68010b03020122040e060a09, + 4260 => 0x4b6f6f6c6e656c7301050402060f19090e07080a, + 4261 => 0x53697a74617a010102031a0d10070608, + 4262 => 0x5472656b6e6c756e0107020b1203061b030a05080b, + 4263 => 0x5479757470756e74696d010c051e0410040a07, + 4264 => 0x53696e746f6d6b69010804030f06011e071306080b, + 4265 => 0x556c6d756c76616c6d756c74010a010b0c031d0b15070c0a, + 4266 => 0x61682045686574756801020b1e050f060907, + 4267 => 0x556b69776d696d746974010e06020401240b13040a0a, + 4268 => 0x4768756368666d756b68010a030b0521090d030a09, + 4269 => 0x4461646963010a010f0506022a171104050b, + 4270 => 0x49746c756b010c030106021d050b05050a, + 4271 => 0x5371756e7379696e010e0b0c031a0e09060809, + 4272 => 0x536f7075746f74756b6f010106010b020425010f020a0b, + 4273 => 0x5165757661696e67617576010d010402210905020b09, + 4274 => 0x4174676c69776c656a010d021b0b12070907, + 4275 => 0x427269646167010d140f0402031f120f03060b, + 4276 => 0x54617275796d01030802011403041f0c0704060c, + 4277 => 0x4d6f77706e6f68010b03010422030d040709, + 4278 => 0x53657373656b6c616b01030420030f030907, + 4279 => 0x476a65656b726f736e696b010703050722060d060b09, + 4280 => 0x626f792042697975777a6801030c01260215030b08, + 4281 => 0x54696e61727475726e736572010f0102241010060c08, + 4282 => 0x48656c756c010d030506210a08030509, + 4283 => 0x556b696e696e756e010e01030221120c020809, + 4284 => 0x45736575736501080b0408231610060609, + 4285 => 0x4c616c6b6c6f6b6c696c01010201051b0c05040a09, + 4286 => 0x4d6172646f6e656e6365727a010a02130803041e0e05050c0b, + 4287 => 0x4d69776e6c757701060601120808070708, + 4288 => 0x506f786b6f6f786d617a01050c0604210f0e050a09, + 4289 => 0x536c656d73616d2d536e696e01020b020301200609070c0a, + 4290 => 0x536b756c736b756c01080c080b03011e090707080b, + 4291 => 0x536f6b756d6101080401280d05020608, + 4292 => 0x416e696b696b6974696e01020103170514030a08, + 4293 => 0x42616b7967690102030401021d100507060a, + 4294 => 0x557a757a756d010f0504010220070606060a, + 4295 => 0x53686b616e73686b756e01070619060e060a07, + 4296 => 0x4b75796d7577736873617973010902010403190513040c0a, + 4297 => 0x597576727573756c6e7501080406010c03081b0f13020a0c, + 4298 => 0x4b696e6b696e6b696e01090201031c0609040909, + 4299 => 0x48612074652054636875010502200b14050a07, + 4300 => 0x556e6b756c7a686f6c620107020103180a08060a09, + 4301 => 0x576f6c6b706f6c6b1a0f040703240a14060809, + 4302 => 0x586c6f6e20546c6f78787567010f080603050222090b040c0b, + 4303 => 0x5374756e6d697473686e7568010708070b010304241b0c050c0c, + 4304 => 0x4f74656c6f6c656c01070406011d0a12040809, + 4305 => 0x4c657a65707570757a656e6501050106080703181010020c0b, + 4306 => 0x54756e646c756e0102020403250a0f070709, + 4307 => 0x496e756c696c010c06030b0823021406060a, + 4308 => 0x44696e204e6f6d6f01020b1403051b071406080a, + 4309 => 0x536865617368010b01021b050d020608, + 4310 => 0x43686962676167010b011b110b040707, + 4311 => 0x4e7569766e6775616b0102020412200410020909, + 4312 => 0x50616e6d6f6d010a010605031f051106060a, + 4313 => 0x5465702070756d204e7574010a020304230207030b09, + 4314 => 0x556c696e20497069736c696e010705240a0c070c07, + 4315 => 0x76756d205675616d676f756c0103022a0409070c07, + 4316 => 0x6b6f7420536974697401100806030204240a0c04090b, + 4317 => 0x4d65697263696574010f040b08031e060604080a, + 4318 => 0x536f6f6b6c69736b757301040302200c12050a08, + 4319 => 0x5572647572640103110403011d010602060a, + 4320 => 0x49696c616c756c696d0104010315061a100506090a, + 4321 => 0x4c6170656b70656b010f0601200711070808, + 4322 => 0x506561277065612768756d0110080b23080a070b08, + 4323 => 0x48656d706f6d6e6f6d706f6d010a03220e13020c07, + 4324 => 0x54616c73656d6c6f6c01010204030625050902090a, + 4325 => 0x556e6869686b61680105032e1011040807, + 4326 => 0x4b6f6e676f6d011001060229050c030609, + 4327 => 0x5275746d75726e6f747574010902040601180815040b0a, + 4328 => 0x557a68757a68756d75736368010204031b0707050c08, + 4329 => 0x5375636873757a680103080502250f11020809, + 4330 => 0x54656e697061204f756e01060502061c0e12030a09, + 4331 => 0x4b69616261756b01020102181108030708, + 4332 => 0x4b6f6c7669726f6c6d656b010d07020301101c1a0d030b0b, + 4333 => 0x536c616e6770616e6c616e6701100201230e06050c08, + 4334 => 0x48696e6d7568010f031f0a0d050607, + 4335 => 0x4564656265647578010c03010f021f071102080a, + 4336 => 0x626c6964204b75747269710106060b010403250315070b0b, + 4337 => 0x54756e746f2054756e010f0402030519040703090a, + 4338 => 0x53756d73706f6b01080b03220c07050708, + 4339 => 0x58696e7567010803180b11060507, + 4340 => 0x556d75737574616b010e060201230e07030809, + 4341 => 0x53696473697301020802010307051e190f06060c, + 4342 => 0x4e6f75746f75010f01041a0615030608, + 4343 => 0x54756b686f73010807060b0403081f091107060c, + 4344 => 0x496e616c616d756e01080102031c0506040809, + 4345 => 0x53687a756d73687a757001100204031b050b020a09, + 4346 => 0x4e6f6e6e6f6e01040307130f07040608, + 4347 => 0x4d69657a75750101060324190a030608, + 4348 => 0x6c6f6c20556c6701090b0602031c0d1503070a, + 4349 => 0x546f657374616501040b240413020707, + 4350 => 0x73696b204d696b746173010e0124090a070a07, + 4351 => 0x5370656e73616c010402140701250b1203070a, + 4352 => 0x53616e6b696d01070103190313060608, + 4353 => 0x447567647567010d040b01080503250a0a06060c, + 4354 => 0x6b612054616d7573616c75010c011e050f060b07, + 4355 => 0x4e6f79707475736d65730105031e0905030a07, + 4356 => 0x4d756e6e756e01051401020314061402060a, + 4357 => 0x4e616b656c6b6b69746f6b01050401260b0f040b08, + 4358 => 0x536c616e70616e01030b01030f1b110b07070a, + 4359 => 0x4e677565717475656d6975010f03060102180d0f030b0a, + 4360 => 0x4e756e757075011001041f0c13060608, + 4361 => 0x546174746573010b06010803041e060804060b, + 4362 => 0x4368696b72656768726972010b04031f0314070b08, + 4363 => 0x4e726f6e6d72616d687269681b0c010319070e020c08, + 4364 => 0x576c616e6c756d0103040305010d1a0a0a07070b, + 4365 => 0x56697267696d0104050f03200b0d020609, + 4366 => 0x4e756b74696b6d616b6e756b01050107061c080e030c09, + 4367 => 0x556e696e616e696b6f6e6f6b0102080203011d0607020c0a, + 4368 => 0x496c70696c656c6c696c01040408031b0412030a09, + 4369 => 0x55756c6975656e011003010a070216041305070b, + 4370 => 0x59617a6768696a010b04020608010c250e0c07070c, + 4371 => 0x4d6f67726f706f726f0104050325060b040908, + 4372 => 0x536d616c6b696c736e69740107020508031a0908070b0a, + 4373 => 0x4377656b7a656b0109021b040f050707, + 4374 => 0x61722045646f6e6f6e0108010803040b19080507090b, + 4375 => 0x546574616d74616d0101030104122c1a0b04080a, + 4376 => 0x50697020736b756d2050616b010802200e08040c07, + 4377 => 0x4c756d706f6d010d0304011c0509020609, + 4378 => 0x4c65746c796f73010202031b040c050708, + 4379 => 0x756e2d4974656c656c010506030b1e0b0e020909, + 4380 => 0x452054616e0108051f070c050507, + 4381 => 0x4d75736564204f736d7564010c0203170a14070b08, + 4382 => 0x4e79617075737a727567010305060208200607030a0a, + 4383 => 0x4e75776d756e010d0508060323030b03060a, + 4384 => 0x4d65736368010c0506030126021407050a, + 4385 => 0x536973736b697473706973010f03080c040201230610060b0c, + 4386 => 0x55736b696b690101020c010320090c07060a, + 4387 => 0x4c756f6c6c6f6d6b756f6c010703041b1011060b08, + 4388 => 0x5877757867686f7a6801010b03010220140705090a, + 4389 => 0x4d616d746c696e70696e0104020b0307011c0815030a0b, + 4390 => 0x4d75727073756d75727001030127160a070a07, + 4391 => 0x4865736865010b0403020514090705050a, + 4392 => 0x4e756e756c6973757375010b10070c0b06200914020a0b, + 4393 => 0x51656c6d656e6d656e010d04030b25030d070909, + 4394 => 0x587461616b74616b6161700102010f051e0c10050b09, + 4395 => 0x4b756b6e6f736b6f6b010f011503080224091403090b, + 4396 => 0x4c756d736d6f6d6b6f6e010c0503020122070a040a0a, + 4397 => 0x537771776b716165730105060403021f031104090a, + 4398 => 0x536c756e736e756e01010b03061e0907070809, + 4399 => 0x536269737368757368010c08200511060907, + 4400 => 0x49747573656b01030201031c0510060609, + 4401 => 0x736d7520537069736e7501010201100803061f0305040a0c, + 4402 => 0x53677567690107040125090f020508, + 4403 => 0x456d61702d456d756b656d010b010b04080306270e11070b0c, + 4404 => 0x5361706e656e756e656b0102020603230706050a09, + 4405 => 0x41706d6f776d616d0104030602210909040809, + 4406 => 0x4e6172737077726b7772740106031f0611060b07, + 4407 => 0x496c6d657270657201020405010316010c04080a, + 4408 => 0x556e6b6f6b756e752d556b7501050701041b010f020c09, + 4409 => 0x5479696e6e79617377696e010a02030b230514040b09, + 4410 => 0x4d756c736f740102050203280713070609, + 4411 => 0x4d756d67616d6e756d010401210715020907, + 4412 => 0x53756e2d4e6c696e010f03270710070807, + 4413 => 0x456d656e617469687570010d0803060214010d190a11030a0d, + 4414 => 0x48656c687572010b0801031c060f070609, + 4415 => 0x476f647361646f7368010f0201040824180904090a, + 4416 => 0x4b6f74696c6f01030403011b1610040609, + 4417 => 0x4d6f6e656d6d656e6d756e010d010203250b12060b09, + 4418 => 0x50617675205061010b02060103200a0e03070a, + 4419 => 0x536f6c74756c616e6d697401040203260711040b08, + 4420 => 0x4179676861796e67686177010b01220915060b07, + 4421 => 0x4e6765726f72616767756d0107030607011a0613070b0a, + 4422 => 0x5573616d7573616d010b0408010326070a02080a, + 4423 => 0x486f6e756d0101060301080b1c090f07050b, + 4424 => 0x552061204e6769750105020103161a061304080a, + 4425 => 0x416a616a61737570616b010d060102200b07070a09, + 4426 => 0x5a616b67697301010f011b0a08070608, + 4427 => 0x516969776e7574656c010f020806230d14050909, + 4428 => 0x75772d55626b75756a6b750105060401120715050b09, + 4429 => 0x53686c696d626c616e01031401240206070908, + 4430 => 0x4775736b75741c0c0b030128030a030609, + 4431 => 0x52692777696b010a0b190a15040607, + 4432 => 0x57696c7761776c6970010c07051f170e040908, + 4433 => 0x556b616d756e616b616e756e010f030b0206180c0d060c0a, + 4434 => 0x4b756e756d6e756d010c020e1d0b12020808, + 4435 => 0x5261756e67010a081f0306020507, + 4436 => 0x54696d74696d01080b0602150e0c070609, + 4437 => 0x556e67756e676e756e67010b0c080307011b130f030a0b, + 4438 => 0x4e7275636874796e010408050304061e050705080b, + 4439 => 0x4e79696d6b6168010b01031c0311030708, + 4440 => 0x416c68756c7001070403190715020608, + 4441 => 0x506f6e61204f757575706f6e010d01020a160510050c09, + 4442 => 0x4b6f757a68757a6868650106010203151404061e0809050a0d, + 4443 => 0x5572204f6c01060203010b06041e0a0702050c, + 4444 => 0x54616e6e696e010f0225040e050607, + 4445 => 0x6920536f6d206d6f204b616e0105080b03021d070a040c0a, + 4446 => 0x507562636861736368617a68010d0301051d0c08030c09, + 4447 => 0x52696e74756e72696e010703081f1008030908, + 4448 => 0x4c65656c69696e6f7465010b080210040301061c0c05050a0d, + 4449 => 0x45616d6965010f020d0706031d110a04050b, + 4450 => 0x54656c75746501020f030125060c030609, + 4451 => 0x4e6f73737573750102010f1002031d060806070b, + 4452 => 0x4e67756e6e67756e0108080d05031a050903080a, + 4453 => 0x426c697a7368656d72696e01050618070c040b07, + 4454 => 0x412769706970697701010802010323020a02080a, + 4455 => 0x53696e7379617669740105030402011b0c1205090a, + 4456 => 0x4b6c756e70696e011001060728090d040709, + 4457 => 0x5075706c6f7075756c6c6f70010a02030122010f020c09, + 4458 => 0x706f68204875686e6f796e0103031c0c09050b07, + 4459 => 0x5465746e65687465740108060315010704210a1103090c, + 4460 => 0x4e676f7470697368796f67010405270405020b07, + 4461 => 0x536f75642d42696f6b68010c15291911030a07, + 4462 => 0x5369616b6169010d0105040307270c0c07060b, + 4463 => 0x5374616b6668616d736d616e01010b1f0614040c07, + 4464 => 0x4c616b6b75736b6f736b616b01090604250812030c08, + 4465 => 0x4e6f6d6e756e67010a05011f0f13070708, + 4466 => 0x536974696d756c6c756c696d010c040b240d09040c08, + 4467 => 0x50696d696d697469010f01031b0914050808, + 4468 => 0x536869736869736872610108020104240f0e050a09, + 4469 => 0x4167686b6875720104050402061a0c0806070a, + 4470 => 0x50656f276e65756e010b0e1b0913040807, + 4471 => 0x6b6c6f6b204f6c011015021d0908040708, + 4472 => 0x57657770757768726f77010d061a0e08020a07, + 4473 => 0x4c65746b72656e70656c656b010206010203240d0b030c0a, + 4474 => 0x536872756b7368746f730106022a0f0a040a07, + 4475 => 0x576f6e7775277772756c010f08020304170506070a0a, + 4476 => 0x4d75696c6561740104041b0809030707, + 4477 => 0x547574612d4e616d616e6901060305020601250512030b0b, + 4478 => 0x4e696e70656e686f6b01080f150103051f120503090b, + 4479 => 0x4d616e6d616e0105010b03110c23120f02060b, + 4480 => 0x506c61736d696d6d6573010b010208240a0a020a09, + 4481 => 0x696c204969010f02200809050507, + 4482 => 0x4e69656e6e6f7974010203081b1506070808, + 4483 => 0x4b6973756e20556d756d01020103021d1113060a09, + 4484 => 0x756c7320556c6e010b03050d110a0c040709, + 4485 => 0x53756d7379656e010908010b0222090c02070a, + 4486 => 0x4c696e6b617301040b03080201200a1204060b, + 4487 => 0x5a75727a757201100407031b0b12060609, + 4488 => 0x4d756f7361657301080504021a110d030709, + 4489 => 0x657420496d696d010701220309040707, + 4490 => 0x65204d756e656b0108080602040316070e07070b, + 4491 => 0x546f656b6d6f7001090201040524061004070a, + 4492 => 0x4d65736b6f6c01010102170510030608, + 4493 => 0x53696b6d696a696b010d0b03021e0610030809, + 4494 => 0x4f6f6e6974657461740106031e0513020907, + 4495 => 0x53696e696d0106010203180907030509, + 4496 => 0x53656b70656d01100503150118071502060a, + 4497 => 0x496c69726d6e69726e6569720101030206220406040c09, + 4498 => 0x51697a796973010c0304061e0308030609, + 4499 => 0x496368616b204564656d656d01060201280609020c08, + 4500 => 0x556e67746f6d01030708020311230c0504060b, + 4501 => 0x46707577667075776c616c010b0704012c150a060b09, + 4502 => 0x696e204f6e706f6e01050803040102190b1202080b, + 4503 => 0x4b6f6c6b656c6e6e656c6c7501090116040302220107070c0b, + 4504 => 0x4e756d6d756e70756e68656d010a01040803230e11030c0a, + 4505 => 0x4e756d6c756e6e756c01050b0105280706060909, + 4506 => 0x4b6c616e2072696e204f6c010c08031e0a13040b08, + 4507 => 0x5265766976697675010e140302051d0d0802080a, + 4508 => 0x456e656c65746574756d010a120801250b10070a09, + 4509 => 0x4b617470656b706f6c01090402010314070b03090a, + 4510 => 0x4d756e6b696b6b696b010506041a0909040908, + 4511 => 0x4b756e756e756b617061010402081f050a070a08, + 4512 => 0x4b75746f737461736b656b010b03011c0611040b08, + 4513 => 0x556b6176697301060206040b0307280e0905060c, + 4514 => 0x5368726f70205368647563680105030618060a070c08, + 4515 => 0x4f7761706977010f02031b0910070608, + 4516 => 0x446c757a6873696c0102080b10030215200e0b03080c, + 4517 => 0x416a696a756a74010f060312311914030709, + 4518 => 0x5370756b706573010a0b1a0911050707, + 4519 => 0x557320556c0109020318130b050508, + 4520 => 0x4d6f686f796e656b6f7701090f02040106231612030a0b, + 4521 => 0x497273697273616c6e0106040c030226081204090a, + 4522 => 0x4d656e6974657a68010904021c0913040808, + 4523 => 0x5570697069706170010e01031a0606040808, + 4524 => 0x4c6975707569010302210306040607, + 4525 => 0x7069742050696e2053757301010103200b15030b08, + 4526 => 0x546f6b736f7301100b12021f0c05040609, + 4527 => 0x4b756e70616e010109060304021d060b07060b, + 4528 => 0x4b6c616d6d72696d0101020301081f101007080a, + 4529 => 0x4c616d6d75727470696b0110020301220b05020a09, + 4530 => 0x4f74657a686f7465640108080301021c070506090a, + 4531 => 0x4b756e676b756e676d616d0104020b25040d040b08, + 4532 => 0x6d61692d5461696e75696d010b08061a070f030b08, + 4533 => 0x50757927757975797770757901060108031f0506060c09, + 4534 => 0x4d656e2047696d0108060203120e14040709, + 4535 => 0x496e626c6f74010f04030f0b28100605060a, + 4536 => 0x50756e756e64696c77756c77011002040307210510030c0a, + 4537 => 0x4d7570617369010f010b030824010b07060a, + 4538 => 0x5a6979696b656b756501040302120a10060908, + 4539 => 0x507574746f73010e0502240414040608, + 4540 => 0x47616d617a7a6979696368010106181214030b07, + 4541 => 0x4b7574696d656b650105090b0105061e080b04080b, + 4542 => 0x4e696e7465736d75656d0102050b0601150509020a0a, + 4543 => 0x55686162617a6564756d010f060c02030422080f040a0b, + 4544 => 0x546368696368010104050c190b10050609, + 4545 => 0x53696573696f73010c06010210030426020507070c, + 4546 => 0x5375736b757301040804060118041005060a, + 4547 => 0x44756e7463686901060603200214060708, + 4548 => 0x506575757401010803010d07021a030a03050c, + 4549 => 0x4e756d756c730104070c021d030c070609, + 4550 => 0x54756c6e6c75010c02240706060607, + 4551 => 0x55726b6d6f746d6f7475726b010d0703081e090c060c09, + 4552 => 0x536d756d750106060304220b0c020509, + 4553 => 0x59656f79686f657961657401090403140d010221050a050b0c, + 4554 => 0x6d72757320417401010f0301201913040709, + 4555 => 0x54696e6e616d6e616d011004230d11050907, + 4556 => 0x536f6d6b756c6d656e011001160b08040907, + 4557 => 0x4c696e676c696e676e756e0106021a0512030b07, + 4558 => 0x64616d2044616e010f0806020518080702070a, + 4559 => 0x596f71726f712d4167686579010501030205041c0d15070c0b, + 4560 => 0x5374756d7374656d6b65700104080603200807030b09, + 4561 => 0x4b6c756c676c6f7a68646970010a05040302171006070c0a, + 4562 => 0x536d616c6d6973736b756d0104010b0306041e0413030b0b, + 4563 => 0x4e616e6c6a696d6e77616e010c03010205071c0f13050b0b, + 4564 => 0x4c697369756975737573010203010402081e0810050a0b, + 4565 => 0x50616175616174010d02061e0515050708, + 4566 => 0x4f6d6f2050696d6f01070a0203010624140a05080b, + 4567 => 0x5269756e7275697a6801010f0d04012c021205090a, + 4568 => 0x546173736b6f73010d0603200709050708, + 4569 => 0x4965686869656c7001010102040308210d1104080b, + 4570 => 0x436875746162756b63686101070403170805060b08, + 4571 => 0x48696b6d6c616801011403110409060708, + 4572 => 0x52616e616e6c696e010504062c0414030808, + 4573 => 0x4e756f706f7573706f757301020b03230213060b08, + 4574 => 0x416d657a6a692041010208031f0c11040808, + 4575 => 0x4e6f6b2073616b205370656b1d0207030221090f040c09, + 4576 => 0x4e696b6e6f6b6e6f6b73616b010106011f0507020c08, + 4577 => 0x4d756d696f6b6101020221020c040707, + 4578 => 0x4461696d736f65010f0321090c070707, + 4579 => 0x4f6d756e616e010e0701020329040905060a, + 4580 => 0x5a686573636862617a697a6801080301021f0306030c09, + 4581 => 0x5275797577721e04040706030123050e07060b, + 4582 => 0x506573706f270105020301240d13030609, + 4583 => 0x4d61616c6c6972010601060205031f080e04070b, + 4584 => 0x4e616d6469617368010f010204061e0a1005080a, + 4585 => 0x4e69676d616e0105050104030628011102060b, + 4586 => 0x70652d537475742d546174010405101e0c0e040b08, + 4587 => 0x6f6d20536574726f6b74616d0101010402080d031a070d050c0c, + 4588 => 0x556b6f716f6a656e6701040403060a23010502090a, + 4589 => 0x557a686173686162757a68010e03210c0d040b07, + 4590 => 0x4e6968696b65204e69706901030c0d041b0b07050b09, + 4591 => 0x4e6f676d6f707365746465010d020403061b0a08030b0a, + 4592 => 0x4e756d74756e666e6f6e010706080122060b030a09, + 4593 => 0x4e656b73656b0101030406021e051507060a, + 4594 => 0x55736f6e7575700103081c0a0e030707, + 4595 => 0x6f6c20416c6e0105020301060b19090703060b, + 4596 => 0x53686d756b7368627573010c0502080603190a0e060a0b, + 4597 => 0x4d656d70756b757001060f0423100b060808, + 4598 => 0x50616e6c756e010e02040106031b0f1106060b, + 4599 => 0x416a6e74616e756e6e65776801060602150910030c08, + 4600 => 0x686f6d20456d010d03160b0f050607, + 4601 => 0x4f6e6f7461736f74010d06010b1a0b0d050809, + 4602 => 0x4b656b7465010e03190c06060507, + 4603 => 0x7370692720536d756d010a050401021b021107090a, + 4604 => 0x4e756d6169010a021a0514040507, + 4605 => 0x75742d556e756b756d757301060702150803061d0608030b0c, + 4606 => 0x4175736973696761616b0101020306200c0e070a09, + 4607 => 0x4c69616174010b03260d06050507, + 4608 => 0x43686f6b6368656b6461616b010f040703011f090c050c0a, + 4609 => 0x4b756e6b756d01090601030218090d03060a, + 4610 => 0x4e69776b6f746c6f6e0110010204031f0a0707090a, + 4611 => 0x43697a6a65706f7264010c0403080217080805090a, + 4612 => 0x546f62746f62010c040e01080330120c03060b, + 4613 => 0x4d72757368010302080504031d080b07050b, + 4614 => 0x44756c72616c01010314080b050607, + 4615 => 0x50756e6f206c7520556d656d010b0302011e030e060c09, + 4616 => 0x4e6f6d656d01060102041e0608040509, + 4617 => 0x4e6f6a6e6e6f6a6e0103021d090e020807, + 4618 => 0x4b6f6e6b6f6e01090106120615020608, + 4619 => 0x556b6562617a61626573010e16140203280809070a0a, + 4620 => 0x49727777697267697a617701051401220310050b08, + 4621 => 0x506127616e6c6177696d010103180c10070a07, + 4622 => 0x6e6c7573205475796b6c7574010f0b040203061f0b0d060c0b, + 4623 => 0x51696768696d756b6869010908160809050a07, + 4624 => 0x48696b6d757370696b707573010a010612070c060c08, + 4625 => 0x4c7570656b6c69010307270108070707, + 4626 => 0x716161792d4b69616b010604021e0809070908, + 4627 => 0x48696a6868696a68010d040501031e080a04080a, + 4628 => 0x4b6973652054756e6c656e010b040301200910060b09, + 4629 => 0x4b696c77696c7a696c01100b02040501180c1002090b, + 4630 => 0x44696e64696e62756d756d010c04010603080b1d170d020b0c, + 4631 => 0x617120416e7472616d6979010e060302012b0c0e070b0a, + 4632 => 0x5275706b697372696d010d03180e11020907, + 4633 => 0x4d6f682d6f682d50656b010d0403011e1010040a09, + 4634 => 0x5a757a6d697a747579011003210208020907, + 4635 => 0x4c616b6f2701100f0801240a0c060509, + 4636 => 0x536c6f6d626f6e20536c6f6d010a050608220310060c09, + 4637 => 0x50756d6173616e69010606020308011e0d1007080b, + 4638 => 0x4f7765706f6b65640104040801230907060809, + 4639 => 0x4e616d6b6f6d6b756e0101150a020318050f02090a, + 4640 => 0x4e696d70756d010a0302041a0309070609, + 4641 => 0x4d6f6d6e6f686e6f680104010203200808040909, + 4642 => 0x4f706579206571204f65657901040106080317090f030c0a, + 4643 => 0x45736573656b0105030f1d0608030608, + 4644 => 0x4168656e6174010c0301062e0e07060609, + 4645 => 0x417a68616e69677567010a03050201240e0606090a, + 4646 => 0x4b72756e6b72756e74726f6d010e0207060301081f1007020c0c, + 4647 => 0x49656c732041756c74010c04071f060b060908, + 4648 => 0x496e7570757075737573010e022d020f020a07, + 4649 => 0x536f6e70696c7001080124110d070707, + 4650 => 0x51696e7361760102060d020124031402060a, + 4651 => 0x506a656c6a656e01040501031f0a0b050709, + 4652 => 0x456d7574697a68697a686f6d010a06040f022f160b020c0a, + 4653 => 0x5370696d7374696d010b0602010820090605080a, + 4654 => 0x50696c6870696c6870696c68010f0406030115090b070c0a, + 4655 => 0x5361736570696e01051401020425031106070a, + 4656 => 0x557769276f7a27757a707501040802031c0e15040b09, + 4657 => 0x69742d50757301030201040f050c280e0607060c, + 4658 => 0x53697473616e6b6f7401030406020b031a0c0c03090b, + 4659 => 0x4c696e696c206c756c204c690109080412090d050c08, + 4660 => 0x546570657a69776573750101040702011a1006060a0a, + 4661 => 0x4b616c6c6f74010e09080b061d050b06060a, + 4662 => 0x4b6c75746b6f6e686c6174010101101303270a0b070b0a, + 4663 => 0x4d656e676e6f6e6770656d010301030206210d11020b0a, + 4664 => 0x4573616d697a686f6f6173010304031d0307030b08, + 4665 => 0x49736f6e670105010308190d0d030509, + 4666 => 0x416d7574204e616d757401070318090c050a07, + 4667 => 0x496b616e657473636801030102041c0109030909, + 4668 => 0x68756e20546c756d010c060403260b11040809, + 4669 => 0x536f6d206d756c2054697301060b020803011d130f070b0b, + 4670 => 0x516f6b71696b71696b0108020704230a0e030909, + 4671 => 0x506170616c75010f03020622090c050609, + 4672 => 0x556c672059756c6b010b021f0507030807, + 4673 => 0x75772d556b616e756d756b010504051e0a0a070b08, + 4674 => 0x4875727475720109040103200f0d030609, + 4675 => 0x537a75677363686f7a0103060203210615060909, + 4676 => 0x477565737368616f670108060427050c040908, + 4677 => 0x4570616b6568616d616d757401040110020603051a080a030c0c, + 4678 => 0x416170756b696e01070302200c0e070708, + 4679 => 0x44696e736368696d616e010b04010e06130c12060a0a, + 4680 => 0x5361746c6f706b696b010802030b05130a1305090a, + 4681 => 0x456b61706f6e010f06140304220f0b03060a, + 4682 => 0x4e756b706920507573706974010607031f2008040c08, + 4683 => 0x416d6568656e756e6968010a06260f09040a07, + 4684 => 0x4b6f6e206b756e204e696d010f0f0105030b021f040e040b0c, + 4685 => 0x4b756b6c756e010b040806010219200b06060b, + 4686 => 0x5269757570727575697368010b01021f0c11050b08, + 4687 => 0x27756f6c276f2727756f6c010d030602220e0a030b09, + 4688 => 0x4d77736d77736d696d01090201180813040908, + 4689 => 0x546f6c2d4c6f746f6c010e0604010802110323110b04090d, + 4690 => 0x4963686963686973756d01060702011c110c050a09, + 4691 => 0x47756e676e617374616d01060123060b070a07, + 4692 => 0x54696c706f746e65756b01040603080f041c0913060a0b, + 4693 => 0x47696f204d61756d6569670110060408031b080c050b0a, + 4694 => 0x4d75277577756d6177750103040327150f050a08, + 4695 => 0x556e6e756d777570010f01140610040807, + 4696 => 0x5572736e75726b6e75726b010605040201031e0614070b0b, + 4697 => 0x54756c756b010802210c05060507, + 4698 => 0x4e656c74616e70696e010a031b1206020907, + 4699 => 0x536c6570796d696d6f010c0b050401031e0c0a04090b, + 4700 => 0x5469747a69706469756801010801270305040a08, + 4701 => 0x53616d6b616d0110020601031c0c0507060a, + 4702 => 0x4c697768617701050302010f240a1007060a, + 4703 => 0x4c6970776927010e0c03061d0215060609, + 4704 => 0x4c776477205a68777363680107030b020e05200610020b0b, + 4705 => 0x54756e6e6f6e70756d01040114200b0f050908, + 4706 => 0x48657568706f75010b040302230109050709, + 4707 => 0x776120496e69616c2049616c010203200814020c07, + 4708 => 0x4174616d20416d617001080204011f0c0f050909, + 4709 => 0x4b6f6f796e0103031d080e070507, + 4710 => 0x5a68616f626368616f01070304080e21021207090a, + 4711 => 0x496e656e73616e67696e010402220605070a07, + 4712 => 0x557a707573616a2d4e757a0103030c0d1424180b030b0a, + 4713 => 0x54757461747577010a0302082c080f030709, + 4714 => 0x4f706f70206c7570205570010106230a0d020b07, + 4715 => 0x53696e616e756b616b75010b0302220514060a08, + 4716 => 0x576f62756275676967690101080302220f0e020a09, + 4717 => 0x54616b74756b73756b010b010221010e040908, + 4718 => 0x53686f736e6173010b0102030823051406070a, + 4719 => 0x556e6765716f71010c010216040e030708, + 4720 => 0x5372756e6b72756d6b6f6e010c0401030b230705060b0a, + 4721 => 0x5069726b2d6572792d47696b010e010308210609020c09, + 4722 => 0x6d6c757573204f676967010f042f030c070a07, + 4723 => 0x5079777461796d61796e010801240c0a070a07, + 4724 => 0x5574752050656e69696c756e010c07031e050c040c08, + 4725 => 0x416c2d4e6f6e27656b6d6f68010e060301260b05070c09, + 4726 => 0x486c756e706c616d01070102180c14030808, + 4727 => 0x5a75776c67696a6c6469010104011f0d09040a08, + 4728 => 0x4b756d6b756e70756d73756e010b0a0107021d040b030c0a, + 4729 => 0x4e756e6e65736e6573010d0b0304060524070e07090b, + 4730 => 0x27697a6d6573010503081c1611030608, + 4731 => 0x4f6b68756768696b0103040119070a030808, + 4732 => 0x4b65737075010c011b100c030507, + 4733 => 0x5363686d6f0105020601040323011005050b, + 4734 => 0x456e697320497475736f7301010604031b1208060b09, + 4735 => 0x41616c756c656c756c010706022a0405070908, + 4736 => 0x5a756e757361736f72657475010403011b0209070c08, + 4737 => 0x616c2d53696e6e6f6b74616c010502080304062c0d0d030c0b, + 4738 => 0x4b6f796e6f7775776d010f0301210c12050908, + 4739 => 0x496c746d616c746f6c010e0503201309050908, + 4740 => 0x527573686d7570690108010229060d070808, + 4741 => 0x4c756e6e616973010a05011f0705040708, + 4742 => 0x726972204f720108120402061f041204060a, + 4743 => 0x4b696e7461616d6d7275756e010a01190915030c07, + 4744 => 0x417720617920507579617968010c0103230b0b020c08, + 4745 => 0x4e6f746f747475010b03010c02041e080607070b, + 4746 => 0x596d7574656b6f73010e080301250b07050809, + 4747 => 0x496c696b616b0107080104030226030903060b, + 4748 => 0x4e756c2050756e736c696b010a0b04060203200714030b0b, + 4749 => 0x4d6f69747369756d1f030103150b240c1407080a, + 4750 => 0x48616e6d7527756e010c03061a0314030808, + 4751 => 0x536f616b6f6173010c06070219100b050709, + 4752 => 0x4c616b7a6869720108020b03011f110803070a, + 4753 => 0x52696e6772696e67011003060b05210a0705080a, + 4754 => 0x497a757a71697a010d0f1d0e08050707, + 4755 => 0x50756e7574757401070701020b23061307070a, + 4756 => 0x4b617074617470656e747574011001080c0603250f13030c0b, + 4757 => 0x5475736e696c646964696e61010c08040203011a0e0a060c0b, + 4758 => 0x516973706572616e670109030405160210060909, + 4759 => 0x4e72696d7469736e726f74010f04011f1209050b08, + 4760 => 0x4461206b68612042690108020401080622070f03090b, + 4761 => 0x65205469757a68690109080104120b0f040809, + 4762 => 0x4c756b756b756975204b69010e0b0403200615030b09, + 4763 => 0x49736c617474617401070802031c0608030809, + 4764 => 0x456d656d757264011001020304071f0e0904070b, + 4765 => 0x496b6c756c756c756c010a14080102040522061006090c, + 4766 => 0x6b75682057696b7765270103110b0301220c11070a0a, + 4767 => 0x4d6c696b616872616d010a061a040f070907, + 4768 => 0x4d696d6b696c746b696c680110030601022b0305020b0a, + 4769 => 0x5369707369707501031504020320030704070a, + 4770 => 0x4d6f7a6d6f7301090402080328030606060a, + 4771 => 0x4c757727696e276527010e08050b0323190d07090a, + 4772 => 0x546f6b737a756b01100403180d0f040708, + 4773 => 0x54757463680107040718090c050508, + 4774 => 0x6f7368204b6f69010d06031f0309060708, + 4775 => 0x4f6e67696e010e070108040324070704050b, + 4776 => 0x4c6f6d6c6f6d010d060103141c090706060a, + 4777 => 0x5a69707269640110080307200308020609, + 4778 => 0x446f676865010305010c25040c020509, + 4779 => 0x496c79616c6b68626964756201090310021d0f09040c09, + 4780 => 0x42696e62726f6d626f6d010e0703060402220d13050a0b, + 4781 => 0x50757474657a74657a010502211411060907, + 4782 => 0x756b2050656b010b020407060124021506060b, + 4783 => 0x476f626261656b010b03120b011c070b02070a, + 4784 => 0x4e6570696e696e0101010b03081c0d0c07070a, + 4785 => 0x54616e6e617401040402060308011f0e0502060c, + 4786 => 0x6f7268204b756c68010a0203011c0908030809, + 4787 => 0x4b757071756d6b75700103081d1006070907, + 4788 => 0x536573736f6d676501080804220c0a050808, + 4789 => 0x4e656e70656d6b656e010802010307260b0603090a, + 4790 => 0x4d6961746b6975736965010c080305021c0810030a0a, + 4791 => 0x5061696c65657374617574011006040b1f0a09020b09, + 4792 => 0x53757372657401070301051a0715040609, + 4793 => 0x4f7361676f726973696b010803290210070a07, + 4794 => 0x50656e70656e70656e01050803061d0110040909, + 4795 => 0x7461782d546f7a6c6f73010d0408051d0806020a09, + 4796 => 0x5573706f2d74616b2d557377010202030a1d0910060c09, + 4797 => 0x536d756b6d697001081404011b080b070709, + 4798 => 0x44656d6d6c616d6c696e67010e08210815040b07, + 4799 => 0x53686567686f6c7368010b04030806131d050f02090b, + 4800 => 0x27776e6c756e27726f6d010503020623120b020a09, + 4801 => 0x4c617267657a6801030103071d090c020709, + 4802 => 0x54757374757320596173010d0624050f050a07, + 4803 => 0x42656c79696c62010303120a13050707, + 4804 => 0x776920276f7765776f6c65010a031c0905020b07, + 4805 => 0x53686b656e7368656e6b616d0103011e0610040c07, + 4806 => 0x4e697074696d6f6c6d010a02081a0707040908, + 4807 => 0x4b72656e6b72656c6b72616b01080103061b1215030c09, + 4808 => 0x587069776b6f7777656e010401220713070a07, + 4809 => 0x4d696c6d6d69746d6974010f021a0a10040a07, + 4810 => 0x49736c6f6b010d0603010425091207050a, + 4811 => 0x4174616c617461740104050204191215070809, + 4812 => 0x4475676761646b65647365670110140d041e0d11050c09, + 4813 => 0x6568204d6f6e6e65706574010d0603021c0613070b09, + 4814 => 0x4564756b757a0105031e0d07050607, + 4815 => 0x556d736368657a0104040105021e0b0604070a, + 4816 => 0x4d6f7368707275736801010105260906070908, + 4817 => 0x53696c206e656f6b204b656e010b03190406040c07, + 4818 => 0x646964204272697a6801060201041e0508040909, + 4819 => 0x4573656c6570010806031a1a0a050608, + 4820 => 0x4e696e757368010c0206030c051e040b05060b, + 4821 => 0x4570656e6570616d010e01061f0e07020808, + 4822 => 0x5370756b6b756b010c0302220706060708, + 4823 => 0x456a6774696720416a73617401090804020601221009070c0b, + 4824 => 0x4c75736e61736b616c6c6170010a0103220214030c08, + 4825 => 0x506f6e6c6f6d736d616d010a06041401260a13030a0a, + 4826 => 0x57757265726f726d0109040203220210070809, + 4827 => 0x4b6c656b6872656d6b6c656b01070305071e0b11060c09, + 4828 => 0x4472657a204e65736e657301070b250d10020b07, + 4829 => 0x6c652d53696e6170690108060301220f0f040909, + 4830 => 0x4e6c696e64616e67616e0106060203041f0710050a0a, + 4831 => 0x4e756d696e696d010b031e0e0c030707, + 4832 => 0x4d696d74696e010f050204010b03200a1204060c, + 4833 => 0x4f6d206d7574204570010e0602010323030707090a, + 4834 => 0x446971617161726d6972620101060103130911030b09, + 4835 => 0x4e75756c70656e70656e01040304150e0c030a08, + 4836 => 0x4b6f6b6d6970011004020c1f080e040609, + 4837 => 0x597573797573690108020301120d0c020709, + 4838 => 0x48696b746f746d697401060226050e050907, + 4839 => 0x53696b6e6f73686e6f7368010302260810030b07, + 4840 => 0x4c75746b6174746c69730106040307210313020a09, + 4841 => 0x4b657320536d6f6b010502080121010c050809, + 4842 => 0x4e756e6768656e67010c041e0d0b040807, + 4843 => 0x506f6c746f6d616c0106081a0405020807, + 4844 => 0x4d65706d75736f6c700106040f290605030908, + 4845 => 0x45726b616c74010a04020b0103220a0605060b, + 4846 => 0x4d656d206e696e204d6f6b010303021d0b06070b08, + 4847 => 0x57696d6a61712055777577010610030801220208040b0a, + 4848 => 0x5a68756b7a6973726173010d04060f050d0112260c10060a0d, + 4849 => 0x43687561670110011b0a0f020507, + 4850 => 0x5269736861746c69646f6b680104060203260f06020c09, + 4851 => 0x417268617264696c010b01140813070807, + 4852 => 0x4f6d6969204e6f6e69696d6f010c010402190c15060c09, + 4853 => 0x4c6f746c69736c6f7401080102030623060b07090a, + 4854 => 0x536b656d74656e70656e0101060102031f0a15060a0a, + 4855 => 0x53686d696b73686d656c010a02250609050a07, + 4856 => 0x5368686f6d2d46686f6e0110060802200215060a09, + 4857 => 0x50696e6d696e010a05010803042f131104060b, + 4858 => 0x566f70717574206f2051757401011204022a0605020c09, + 4859 => 0x4b75706b75700109020e200f0c030608, + 4860 => 0x4c616e6c6573010b080301041d031505060a, + 4861 => 0x546968746f68736e69736e6f010d0319040b050c07, + 4862 => 0x4c696e696c6c75010e0405032c010c040709, + 4863 => 0x476c75676b696e6b696e01030b04031d0407040a09, + 4864 => 0x53616c75737770757377010d0b03210a0e050a08, + 4865 => 0x457a6564657a6173757a010f020603230c15060a09, + 4866 => 0x6f726b2050656d01080e080604021c0b1102070b, + 4867 => 0x4769776368617767756c01100b030207170b09020a0a, + 4868 => 0x4c656e6c656e73756c010904030b200809060909, + 4869 => 0x4e6573756e010d07030201051b0a0e02050b, + 4870 => 0x556d696b696e010f060301081d080504060a, + 4871 => 0x506f72656c010e0803250b0f030508, + 4872 => 0x4e677569747669756c010101031b0915060908, + 4873 => 0x4670616b6e756d01010221060c050707, + 4874 => 0x64696e2054616e010f0203011a0210060709, + 4875 => 0x556b6964756b010d060301220708070609, + 4876 => 0x4b69726e696c732d49726d010106021f0b0f070b08, + 4877 => 0x5a686174204477617a680105060521060c030a08, + 4878 => 0x736c69204d6968010410070d02031e0e1405070b, + 4879 => 0x4b757368686973682048617a010d04190e0d050c07, + 4880 => 0x4875616b7475756b6b6f69010903021a0813060b08, + 4881 => 0x54756b6d697364616e01080802010627010a03090a, + 4882 => 0x6d696c204c696c01060321050f070707, + 4883 => 0x48616120616b20556e6901080e08280607050a08, + 4884 => 0x44696c73686d616d67697368010611030f011b0b08040c0a, + 4885 => 0x69726d2d49726b010e06220311030707, + 4886 => 0x44696b74756701060304062a0509050609, + 4887 => 0x4e756e2d6b6f6e2d50696c010503240206030b07, + 4888 => 0x5570756c616e010f03190606050607, + 4889 => 0x4c616b6c6120576977696c61010b0804051e080b060c09, + 4890 => 0x496b696d6964010615031c1806070608, + 4891 => 0x4d696f6f6b6d6f6f656b010f10260414020a07, + 4892 => 0x5374757a70757a01050605040801021e1a1002070c, + 4893 => 0x54656a67686f7701020b02031b0b13020709, + 4894 => 0x4d65706b75700107020503261414060609, + 4895 => 0x757420457365626f716f6401100324100c030b07, + 4896 => 0x53656f6d69656e7469750106010402061b0c08060a0a, + 4897 => 0x4b656d6d756e6772756e6701080304011e0c14040b09, + 4898 => 0x556e6e65756d01040b02211f15020608, + 4899 => 0x53756c73756c73010b070305011b0b0902070a, + 4900 => 0x436869706765010105010f040813181302060b, + 4901 => 0x4b756c6e696c6e756c0103010322070c070908, + 4902 => 0x656b2d55746e756d6c656d01050106270311020b08, + 4903 => 0x557070696d746f657470696d010103070223090d050c09, + 4904 => 0x74756e204e656e6e72656d010c060307290c06020b09, + 4905 => 0x4e6f6c6d756c70756d73756c010205031207281109020c0a, + 4906 => 0x4671696e676e696e010e0f060b0302012d0b0805080c, + 4907 => 0x776f6c202772616e204e6f70010e030205211c14020c09, + 4908 => 0x506170276977616c0105060f032a1115020809, + 4909 => 0x65742d456577656577010103140505030907, + 4910 => 0x43686f616b75696a6a61650110040302011c0709040b0a, + 4911 => 0x457465746574010a0201210314040608, + 4912 => 0x4d69706964010c08031c0b05030508, + 4913 => 0x53726f6b716c6f6b010b040208051c010903080a, + 4914 => 0x53696d736c6f7301070103052c0f11070709, + 4915 => 0x5370756c736e6f6c746f010708010302061c0f09060a0b, + 4916 => 0x5374696b736b656b6c65740107010d06031c0411060b0a, + 4917 => 0x4d7575657069657777656f7701070305200308030c08, + 4918 => 0x4c65696d746f6c010e080b0302011e070705070b, + 4919 => 0x4d69616d6d75696d0110010203171108070809, + 4920 => 0x556b7574756b0106070420160b050608, + 4921 => 0x54756c6c6f010503260109030507, + 4922 => 0x4f6e726f6e72616e010403020509220d0504080a, + 4923 => 0x53616e6b616e010e060b290e06040608, + 4924 => 0x4c756e6772656e01020204130a07040708, + 4925 => 0x58756f677565010b011e0805030607, + 4926 => 0x68656d20416e6d6f6d0103030c020615050b07090a, + 4927 => 0x77616e204c696e61010e0b06190409070808, + 4928 => 0x55776964696b7577756368010f010b0421090f060b09, + 4929 => 0x4e6f6b20536e756b010807210909020807, + 4930 => 0x6f732055756b6570010b0204200209050808, + 4931 => 0x54656d6d757474696c746f700101020e280d14020c08, + 4932 => 0x556e616b756c6174010c070302150712020809, + 4933 => 0x54616f6e205461010306010308041f0e1103070b, + 4934 => 0x497a687573757a69707520090114021f0410050a09, + 4935 => 0x4e757475707475706b75010c08050304260b11030a0a, + 4936 => 0x496974757069696d616d010e140103111b090b040a0a, + 4937 => 0x5a656e6d6c696d7a6f6e01100301220e11020a08, + 4938 => 0x4465717465737261770110042d0d15040907, + 4939 => 0x44656e7361647361640101040602031e0f1105090a, + 4940 => 0x536c656d74656e6b6174010c01170814020a07, + 4941 => 0x4275697a61690109081a0706040607, + 4942 => 0x4b756b6d756b74756b6d6f73011001160914070c07, + 4943 => 0x4b61746b6974010208140915040607, + 4944 => 0x41747573696e2055736d696d010701031f0705030c08, + 4945 => 0x4d616d6d6c696d010b0b200f13050707, + 4946 => 0x53756e652073687520457575010902011a0513030c08, + 4947 => 0x4c7975756e6e696e010b0326070d040807, + 4948 => 0x53757473656d010c0402011c1207040609, + 4949 => 0x6568205527697769777527010e0601230210070b08, + 4950 => 0x4b7573736f73010a0803021f0510030609, + 4951 => 0x4c6f6e6b6f6e676e6f6d010a0304010223020a020a0a, + 4952 => 0x4d616b6b696b6d656d6b696b0104030c23090b020c08, + 4953 => 0x4d616d6d7574010e080712020120070f03060b, + 4954 => 0x41627a69740109080603040127020803050b, + 4955 => 0x44616c756b010a040203141d0a0a06050a, + 4956 => 0x54756d2044756e64656e01050806031e0512040a09, + 4957 => 0x4775736f6b6d697301050602030401051e030e04080c, + 4958 => 0x49746974656c0103021e0b06020607, + 4959 => 0x496d756f6f0106060304200711070509, + 4960 => 0x5475707475706c756e0108021b0a07020907, + 4961 => 0x44697a64697a64697a01080c0105200813040909, + 4962 => 0x4465646465010f03021f090d050508, + 4963 => 0x5473636875670104040802031e090a02060a, + 4964 => 0x6964204f67776b757a68010e010306021f060d050a0a, + 4965 => 0x736b6164205370616e61010a06010d1f070c070a09, + 4966 => 0x44696769646967690106060f040327141504080a, + 4967 => 0x53657377696e0104020104190815030609, + 4968 => 0x546f697475616c70756f6c010b0b0f020803041e060b040b0c, + 4969 => 0x4c656f6d616971656f0107010502031e0a0a02090a, + 4970 => 0x497461747573010e0411011a0710020609, + 4971 => 0x4e69726b20747572205069010f030102180d09020b09, + 4972 => 0x4c756b6d79656b204c756b010601070308250605020b0a, + 4973 => 0x4972616c6f6b68656d010303210909040907, + 4974 => 0x4d656868756d7465686b696e0110030102081c0b08050c0a, + 4975 => 0x4b696e6c616b0101080402230e10060609, + 4976 => 0x54656e71656d6b690101060d210711050808, + 4977 => 0x477562706970010f0304021b0907050609, + 4978 => 0x4d756b27616b0104031d0c05020607, + 4979 => 0x426961796c6564010d08061d0e14030708, + 4980 => 0x51616576716965010b010b0302180d0502070a, + 4981 => 0x57696e616e010e03010b08021c0d0e07050b, + 4982 => 0x4c61756e69757470616901030102070403260c15070a0b, + 4983 => 0x4170756e616e2d556d617001050d03011c0b08070b09, + 4984 => 0x4b65746b65746d6970010e0308021a0d08030909, + 4985 => 0x416d616e736175010406230a0a040707, + 4986 => 0x54616e736d656d73616e010b040803220708050a09, + 4987 => 0x5465756c6169740107040117060f040708, + 4988 => 0x4c61722d7472696c2d4e69730108031e0e0d070c07, + 4989 => 0x536d656b736d656b736d6f6b01040203041a0a11020c09, + 4990 => 0x53656d6b756e67746f6e6701020302220a06030b08, + 4991 => 0x4368706f70690103030704180f15050609, + 4992 => 0x4e6f736f73616b0110021403260511050709, + 4993 => 0x4b696c6e756c6b7573010d0103231607070908, + 4994 => 0x4c69616d756f64646f616d010108040106021e0707070b0b, + 4995 => 0x506f6e206b6f6d202761756e010c04020103260805030c0a, + 4996 => 0x4e7573736c696c6b6f6c010506020320050b070a09, + 4997 => 0x4b756d276f6b010201200813050607, + 4998 => 0x54697374697373756d6d696c010801080e20060d030c09, + 4999 => 0x4f6f73204f7a01090e0f1d100d050608, + 5000 => 0x4b756b756b75010c0208010627071406060a, + 5001 => 0x4e6f746c656c010a0306020820161504060a, + 5002 => 0x54756174746f697469756e010207210c0c060b07, + 5003 => 0x566f6e6c616e70756d0101040601201712070909, + 5004 => 0x5368696e6f7301060102031b0e0c040609, + 5005 => 0x4c756c73616c6b0101021e0707070707, + 5006 => 0x4c6f7263687572010c03011f0712030708, + 5007 => 0x5261756e6c6172756e726965010101041b0511020c08, + 5008 => 0x59616c696c7320496c7301100f011f0c15070a08, + 5009 => 0x4c616e67736761756e01080102061c0505050909, + 5010 => 0x4b696f6f6e656f6e656f010d03060107170d0c050a0a, + 5011 => 0x5363686f6e7371656e01050b03160915040908, + 5012 => 0x54756e756e74756e616d6d75010b0a0203011f0c15040c0a, + 5013 => 0x4f73746f6b010d06011c0811040508, + 5014 => 0x4d61656d6c656f6d61656d010f0610200d0e030b08, + 5015 => 0x4e756b75726b686b68756b01070103231605030b08, + 5016 => 0x41727069706e796e010902130813040807, + 5017 => 0x456b6f6b6d6f6b0102150208040323171503070b, + 5018 => 0x53686167696d64610110031c0515070807, + 5019 => 0x536f70736f73010803240306070607, + 5020 => 0x4164617a7574617a01060603040802210a0b02080b, + 5021 => 0x6c692d4d696b61010608030417050d070709, + 5022 => 0x4d75737361746c6175700107020603170407030a09, + 5023 => 0x50756c206b656c204c75700102030b230315050b08, + 5024 => 0x457469736368696d6f746164010506190b0e050c07, + 5025 => 0x50696765740105010308290b07040509, + 5026 => 0x4b756d7769010205021c0d13050508, + 5027 => 0x506f6d6f6d010301040302230a1307050a, + 5028 => 0x4e756b756b75010f010602032b020b04060a, + 5029 => 0x436f72676f01070e060108031e0b1202050b, + 5030 => 0x52696b756b75010b07030102041d041206060b, + 5031 => 0x5362756263757a737562010e01180814020a07, + 5032 => 0x5369616e6e6561010b050f0103021c0e1406070b, + 5033 => 0x546c616e70756d7072756d0109040301080602280310020b0c, + 5034 => 0x4b697a686b697a6862657a6801070104061d1407040c09, + 5035 => 0x53617373706973697474690103010302200e0c050b09, + 5036 => 0x5a726f6c6b697a010f031d0b0c020707, + 5037 => 0x5975736e6972737501080102040603200d1506080b, + 5038 => 0x506f776e7065776b0104050102210211020809, + 5039 => 0x4e6f6b6c75726d746572010603220e08060a07, + 5040 => 0x417a72756c01030f0103021f061203050a, + 5041 => 0x5871696e7169787269010e07020118050c050909, + 5042 => 0x7370656d2d50692d536c750104010b02210e10050b09, + 5043 => 0x4b697a6b697a64616470656701100402031a0809030c09, + 5044 => 0x4f74616c6f70656c010f02010620040f070809, + 5045 => 0x6c6f204b6f6d7573757069010306011b0e12020b08, + 5046 => 0x4d6574736b6f6e73616e010e04060807220806060a0a, + 5047 => 0x4c756d6e696e010a0201081e0509070609, + 5048 => 0x4e67696b70756b01100b0807050221081103070b, + 5049 => 0x4b756c706b756c70010501020c031e021304080a, + 5050 => 0x4c65726c657201100e02031d160f060609, + 5051 => 0x50616d68756e736e696d010106040302231209060a0a, + 5052 => 0x556e616e756e010206230514050607, + 5053 => 0x6861682d54756d6d756b01050508240211020a08, + 5054 => 0x4d6573636820476573636801080f060226070e030b09, + 5055 => 0x4b696d74696b010a0302160414030608, + 5056 => 0x476579656b750104010308230f0d050609, + 5057 => 0x61756820276f6569010c03020106041d0b0f06080b, + 5058 => 0x74756b2048750107080703040215060507060b, + 5059 => 0x4564756475676567010908040e150505060809, + 5060 => 0x4b65746e690107040807271a10030509, + 5061 => 0x4e75206d69726b204d756d750104040503011d0b09020c0a, + 5062 => 0x49727a656c636869727a6821100b0106200613050b09, + 5063 => 0x45742041746c65646f747563011003041105011f0a14070c0b, + 5064 => 0x4b686174776f6b68726f6b68010a040301060227130b050c0b, + 5065 => 0x4b61746e696b6e696b6b6174220a04031d090a060c08, + 5066 => 0x4e616b69736e616b69732d49010c0103250512050c08, + 5067 => 0x4c756d6e7265696e6b617701090b0401032e0809060b0a, + 5068 => 0x4c6f6c746e656c011004170a07060707, + 5069 => 0x4c6974747570010d0b0603040227051107060b, + 5070 => 0x4e617073706f7271696b010d0f1e0c14070a07, + 5071 => 0x42656b6368612044756275010801061a0214070b08, + 5072 => 0x47656f77656963687565010c080203220708020a09, + 5073 => 0x48756e6b756e0103030402220b13070609, + 5074 => 0x53696d6e697373696e73696e010a0a0d04200c0c040c09, + 5075 => 0x50756e6f6e6e656d010e0103220d09050808, + 5076 => 0x4b61622054657465010b0401130c0f020808, + 5077 => 0x4572746e756b010f100b0224060a040609, + 5078 => 0x4f276b616e697701020803011a0c09050709, + 5079 => 0x567572757601080e07080319101502050a, + 5080 => 0x50696d756e696e010b0e0306011f080d06070a, + 5081 => 0x5a68756173736368617a680107081203160714020b09, + 5082 => 0x536e7573736e656b010d0103041f0c0d020809, + 5083 => 0x5375206d696e204b7501090312220c12040908, + 5084 => 0x4d6174646f6d6e757401030102170915040908, + 5085 => 0x4f64617573010803240109040507, + 5086 => 0x546170736173746f6b74617401010f060828010d070c09, + 5087 => 0x5a61616464756969680107080f230d13070908, + 5088 => 0x5a68616b6e776f6b626f73010404261a0c060b07, + 5089 => 0x6b6175726d20506175740109020407060b1e0a13070a0b, + 5090 => 0x496b6969696869696b010d0206260a07050908, + 5091 => 0x556d75736964617368696401040c01021e0610050b09, + 5092 => 0x4173616d756c696c0103030f1e0214060808, + 5093 => 0x546174656d010c020806031a041207050a, + 5094 => 0x4d656c6e6b6f6c730102060f0b03020724030a06080c, + 5095 => 0x4c696b6c696c6b616c73010703080121050c060a09, + 5096 => 0x546973736f697301070b1f0811050707, + 5097 => 0x536f716f706501050301020519100f06060a, + 5098 => 0x4765656e6761616801080504010b0306170e0502080c, + 5099 => 0x4b656e6b696e6d616d68696e010d01020f200509070c09, + 5100 => 0x5469617474757073696d010901270507070a07, + 5101 => 0x53696b73696b0109010e0322110d060609, + 5102 => 0x5370696d7069707370696d010808020106171d0e020b0a, + 5103 => 0x4d756c73656c01060b06010d290c1202060a, + 5104 => 0x7172656e2052696e6368656d0109031e080e050c07, + 5105 => 0x6e756e2d4e696e010a041a0b05020707, + 5106 => 0x4b756e6d6f6e01020307160608060608, + 5107 => 0x506f6d6c750102120304021a070b04050a, + 5108 => 0x4e756b752d54616869010b0b02010319070b04090a, + 5109 => 0x57757777757777756d01020807040601031b110f04090c, + 5110 => 0x4b616e6b696d010c080104220f11070609, + 5111 => 0x5461616e6b65656e6769696e010c08020c0316090a050c0a, + 5112 => 0x42696368616c70010501180d11040707, + 5113 => 0x546f726e65726d697274010d03021e1113070a08, + 5114 => 0x4e65756e75010e0307010816061406050a, + 5115 => 0x4869686170610104011403041a101505060a, + 5116 => 0x496475797169640107010304200805030709, + 5117 => 0x4d616e676d756d2027652765010105040203110f0b040c0a, + 5118 => 0x4d6f737375730110020608031d050505060a, + 5119 => 0x477573746501010805060322090d03050a, + 5120 => 0x4c75696927010804030801210e0e05050a, + 5121 => 0x4f746f7475747570010a08010403061f030805080b, + 5122 => 0x53746f73736d6f6d010902070c1503011a020a02080c, + 5123 => 0x67616c20476167756d01090302120615030908, + 5124 => 0x506f6d6e616e6701010414090a050707, + 5125 => 0x4e7577776c7562010c0403021f0405040709, + 5126 => 0x55746e6574010d03040608220d0f02050a, + 5127 => 0x4e6971696e207969204f010d0301260811050a08, + 5128 => 0x4b75747573750105020320150e030608, + 5129 => 0x556d616d696d74696b756e6701080f031c0a08020c08, + 5130 => 0x4e756c6d616c6e0103031f1011020707, + 5131 => 0x57756d64757377756401010307060204200a1206090b, + 5132 => 0x4c616c616d6f6c696c656d6f010101120207081e0e13020c0b, + 5133 => 0x536b69707465706b696b01070f0b082b130d030a09, + 5134 => 0x497a697a757a686f720110040b06010e19060b05090b, + 5135 => 0x4f7a68756368010e040b060217080c07060a, + 5136 => 0x466b656d7367696b0105030102250e14050809, + 5137 => 0x4e657768756c01070308051f080e070609, + 5138 => 0x49777a70696a20416a6201070203041d0512030a09, + 5139 => 0x536574756e67010c010308021c131502060a, + 5140 => 0x4e75726e75726e75726a6f6a01090307010204280c0d050c0b, + 5141 => 0x4479657364796573616d010b0619080f020a07, + 5142 => 0x416b6164756e010c02050601160a0804060a, + 5143 => 0x44756d206b61204d69776b010701020803270213060b0a, + 5144 => 0x4b75747368756b7368756b010703011d090a030b08, + 5145 => 0x746f6e204e6f6e6f6e010f05011d0712030908, + 5146 => 0x4c756e73616d73696e010a01081f0611050908, + 5147 => 0x4e756d6d756e0104040116120a030608, + 5148 => 0x4b757374756e6d6f6e010903150a05020907, + 5149 => 0x536368656c64010e012b0813030607, + 5150 => 0x55626f686f6861736f676f7a010b08020b0c20060f050c0a, + 5151 => 0x4c65756c6f656d756501100305010704220b1005090b, + 5152 => 0x536e696d6769736b756701060203040f151b0405030a0b, + 5153 => 0x53756573616901080b030102041e040f02060b, + 5154 => 0x47686c75626d757301070f060b240205060809, + 5155 => 0x417965792d756e2d4179696e010106270208060c07, + 5156 => 0x6f7320556d656d756c657401080103200706050b08, + 5157 => 0x7374696d204d6f6e6701050301160c10050908, + 5158 => 0x516f6520646f75204c6f750106060302240a15070b09, + 5159 => 0x496e6e656e010c02190907040507, + 5160 => 0x4c69756c756c74616c61616b010e0802030122030a060c0a, + 5161 => 0x50756e6e656d6e656e010c010403021a061503090a, + 5162 => 0x4920616c204175730107020c0107190a1403080a, + 5163 => 0x496e70656c6520496e73616f010b06030402081e0508020c0b, + 5164 => 0x4d6f6d6e656d6d6f6d6e6f6d01070b060301021f0311030c0b, + 5165 => 0x4b617969736174010d0203200e10050708, + 5166 => 0x596f79736f6c726f71010d08230a11070907, + 5167 => 0x45656b65656b2049746f6d0103060401200b11020b09, + 5168 => 0x4c756d6c656e010f0720080c060607, + 5169 => 0x4e6f70656e010a0f0c14010423030e04050b, + 5170 => 0x50616e70616e010106031c0c0f060608, + 5171 => 0x416c6b6b696c010b02030c010f1d080805060b, + 5172 => 0x4974617a617368010c02060e041f070805070a, + 5173 => 0x4d6f73666b6170737061700105011e0707030b07, + 5174 => 0x6b61204d756c6f6e656c6f010108030d1c010e040b09, + 5175 => 0x56697a6873697368736f73680108050804031d0515030c0a, + 5176 => 0x5579696b6f747579010b0105031a0312070809, + 5177 => 0x5669747975727975720106030822060f060908, + 5178 => 0x52696d756d756e0109030204010b1a071404070b, + 5179 => 0x476f7265726d010f020103180911020609, + 5180 => 0x4b756e6c7563680109032a0813060707, + 5181 => 0x4f706579796f6c0104010204081c0a1407070a, + 5182 => 0x4f6b737574736f70737574010e09030106021d0909040b0b, + 5183 => 0x53616e73616e6f0107040601151414070709, + 5184 => 0x506974756b656e2d53696e0106060501210b09070b09, + 5185 => 0x536872697a68010a020525080c070608, + 5186 => 0x4d6965746b65756b010f0102070814031c0a0f07080c, + 5187 => 0x5361756b7361756b01010203011c050d030809, + 5188 => 0x456d6c75736c7573010e020301250909060809, + 5189 => 0x4c616d6c616d010a0301151109020608, + 5190 => 0x53696164697501060501181005020608, + 5191 => 0x53656c657a6874657a010108020f0c09030908, + 5192 => 0x52616e6d696e6e696e67010f1506031b0905060a09, + 5193 => 0x4f6e696e7570656e616e010b061b0b14060a07, + 5194 => 0x496e616e6970616e756b01040207060118130e020a0a, + 5195 => 0x41776d75727001100103070220041104060a, + 5196 => 0x536b616d7370756e6d696e0107010204150a12070b09, + 5197 => 0x6d756e2d4f6e74616e656d010b03120b04081c0a12070b0b, + 5198 => 0x4567696c68010306010f200305040509, + 5199 => 0x4769746573686901060602030727130907070a, + 5200 => 0x476f6e676e6f65720110011a0908070807, + 5201 => 0x496e6776696e670108020b220f14060708, + 5202 => 0x4d756e756e6b61010e01120412020707, + 5203 => 0x537a657a6e656c6572010101060703210a0907090a, + 5204 => 0x48756e6e72696e01090603020124091206070a, + 5205 => 0x50756e6b756d706f6e010e040102190609050909, + 5206 => 0x74696e2053686c6f6e6b756e010703010523090c020c09, + 5207 => 0x53686f6c73686f6c010e01200514020807, + 5208 => 0x54736368756d616d617065011005030b02250a0c030b0a, + 5209 => 0x536867686f7773686d756c010e0b0103121e0610040b0a, + 5210 => 0x54696b6d696b01010408031e0e07030609, + 5211 => 0x557a6869796967010a01031e130f020708, + 5212 => 0x56756c7475676e6970010d01270812060907, + 5213 => 0x436167676963736775010d0308060225050c07090a, + 5214 => 0x50656b68656b6872696b0107080602120419050d060a0b, + 5215 => 0x5375746e6c756e01060603041a0b05030709, + 5216 => 0x4e69746e69746e756d010e03061e0806060908, + 5217 => 0x496c6f6c71696c010101201306050707, + 5218 => 0x4c75276e756d27697727696d01030e03190e0e030c08, + 5219 => 0x68697a682d42757a697a68010e15030201041a0b06050b0b, + 5220 => 0x496d69696d6d696f6e6e656e010b06031c0c0a030c08, + 5221 => 0x547261616d74726f706c616e0102010302241105060c09, + 5222 => 0x4f6c65676f70010e0b040102051f091102060b, + 5223 => 0x6e6f6e2d49730110030204150a14060609, + 5224 => 0x53756c6c756d73756c01050508070304220c0807090b, + 5225 => 0x496e67756e67010e0304060223060a02060a, + 5226 => 0x446973636874736368750103030201220413040a09, + 5227 => 0x536c7573616e75740108030c0b0104071c070704080c, + 5228 => 0x556b756b6f6d6f67756b756e010a040b06270610040c09, + 5229 => 0x4b7568756b75010e061e0505050607, + 5230 => 0x4e726174746973010c06020315041b101505070b, + 5231 => 0x536c6f6e6e6570010c0315011f0513060709, + 5232 => 0x49736368756d6164696b616401030201040321050a070c0a, + 5233 => 0x6d77732050776b6c75730108021401051a0d11070a0a, + 5234 => 0x4d697470756e70756e010208060304021e070804090b, + 5235 => 0x57616d7562757967686901020406010203071b0712070a0c, + 5236 => 0x42756d74757371696e6d6f73010d030215140d0f030c09, + 5237 => 0x50696e70696e6e6f786b6f70010503170b0d040c07, + 5238 => 0x5a686165676c75696c01070801240113050908, + 5239 => 0x4c656c6572756e670104080302210d0d070809, + 5240 => 0x4d756c6d756c20616c204f6c01020c06050203230d12030c0b, + 5241 => 0x4164696e6f776564010e0b0201190d11040809, + 5242 => 0x4d696b6e7573010d0102030824020506060a, + 5243 => 0x4c75676c7567010e04190915020607, + 5244 => 0x4b6161647269696c0106081403161414060809, + 5245 => 0x496c77696c77204f6471696b0110030801140b06070c09, + 5246 => 0x692055647564010d0203290f0a070608, + 5247 => 0x4b656162726f6d010b0403011f0106070709, + 5248 => 0x536f7373686b616e676f73010f08020e031a0711060b0a, + 5249 => 0x476967736f7373696e746973010407140713050c07, + 5250 => 0x4d616b6d6f6d7475736d616b010a02240912070c07, + 5251 => 0x55627572756201060418050f070607, + 5252 => 0x4c69746d616d204c69747469010402041c0508040c08, + 5253 => 0x50657065706574656b6f010306010b031e0612060a0a, + 5254 => 0x536f746d697267010403010d020b1a070e05070b, + 5255 => 0x49697461616461736177010208060321080b060a09, + 5256 => 0x53696d69652053696d010612021c040f070908, + 5257 => 0x75756e2055716971010f0901020315071107080a, + 5258 => 0x4e696c6e696c010e040203150b0d020609, + 5259 => 0x4f73686f6c6d7577010d01060325060c040809, + 5260 => 0x4e6f6e204f7365736501060203210e11040908, + 5261 => 0x4d6920706f204b696c010203060c21070d020909, + 5262 => 0x44756b7a75726b697a68011001070b0803022d0313060a0c, + 5263 => 0x6a656d204e696a616d6f6e6701060608150e13060c08, + 5264 => 0x4b656d6c656d010403210411030607, + 5265 => 0x54696d76616e6b756e67010d040102200b09070a09, + 5266 => 0x47757075716f73650105010406031d021103080a, + 5267 => 0x4e757069700105030401070c1d0e1302050b, + 5268 => 0x536b696e666b6f6b010b040512150906070809, + 5269 => 0x4971657161736f746971010601140304051d050e050a0b, + 5270 => 0x4d656e6d756e6d756d010503040608021b1d1404090b, + 5271 => 0x6572742045726d6865726d011001031b0906060b08, + 5272 => 0x546f73706f736b6973010b010503041e051302090a, + 5273 => 0x536874756d75010f030702210810030609, + 5274 => 0x4b656d27612727617077756d010602030d0701160407050c0b, + 5275 => 0x537574736b75740105080106031c0d0604070a, + 5276 => 0x4c696d726f6c010808030b0204230f0b02060b, + 5277 => 0x4d6573686d657001031515080b030707, + 5278 => 0x5a696c69627501060f0308210a06070609, + 5279 => 0x4974696b7a692044696b010208010403210610060a0a, + 5280 => 0x5573686f67010d101a100e060507, + 5281 => 0x5a656c7a656c2d4d6f6701070301190711030a08, + 5282 => 0x4f69204f656e0107060b0203190b1404060a, + 5283 => 0x4d696b6172696e697161010a0b061c0c0e060a08, + 5284 => 0x416a682048696a68010402031d0612050808, + 5285 => 0x4e72696b6e6f6d6d756d010d06200e0b030a07, + 5286 => 0x44756e73686f6d010103041a050a020708, + 5287 => 0x4d6f6c696c6e010b140410200412040609, + 5288 => 0x4b7261616e6b7261616e01100405071e0712050a09, + 5289 => 0x53706f727365647065670109080201032e020b050a0a, + 5290 => 0x496b20752049010a0306200c0b030608, + 5291 => 0x5377756c756c010e0204010314041506060a, + 5292 => 0x536e696b736d616b736e6573010d010402081a0811030c0a, + 5293 => 0x547579687461770109040114031a170c02070a, + 5294 => 0x4e61772d68616e2d4e7527010d04020c01030b190b0e060b0c, + 5295 => 0x53616b6c757301050406220b14040608, + 5296 => 0x53756b6c69010e05040302260b1404050a, + 5297 => 0x416b6c69746b756d696b696b011001120902031b0f07020c0b, + 5298 => 0x596c6d747974010408020b0125111007060a, + 5299 => 0x506f63646f72646f7201080801040703220d0505090b, + 5300 => 0x4e696c656d01080803190811040508, + 5301 => 0x546c696b746c696b6d6c757301080b0104032c0910030c0a, + 5302 => 0x4a79767169716a7973010e02050b07011b041205090b, + 5303 => 0x456d756e70756d616e01070203011e040e060909, + 5304 => 0x4f6c6573696b0104080a0304011c140f04060b, + 5305 => 0x556c6574696c6b656b010e08260a05070907, + 5306 => 0x676c61732053657368010404010f031025071304090b, + 5307 => 0x5365756e656f730107030201061c051205070a, + 5308 => 0x4d756e6773656d010a03060125020c050709, + 5309 => 0x50756f6b6f6570010c0f03040222030a05070a, + 5310 => 0x48696e6e696b68696e74616e010a022b130b030c07, + 5311 => 0x49727572696d697401050d0104030b26030503080b, + 5312 => 0x4d616c6d7570010a06050401230a1002060a, + 5313 => 0x416c656c2070617220416c01010301041c0807070b09, + 5314 => 0x50696e73686c756e010b01080d0426100805080a, + 5315 => 0x4d756e6d656e010b050204031f0b0906060a, + 5316 => 0x53617a73617a6e696e75730103080603180d12020b09, + 5317 => 0x5169656d696f76010b05030401190b0b02070a, + 5318 => 0x4c757569750110060201041e031104050a, + 5319 => 0x53756e676f6e676f6e67756e0104020806231615050c09, + 5320 => 0x4869796870610103030401151e150d05060a, + 5321 => 0x47697270697273757273010102080706280c10070a0a, + 5322 => 0x54696d706f6f6d736f6e010e1301180814030a08, + 5323 => 0x54616d75680107031d0d0f060507, + 5324 => 0x426c616d626f6e67010c15020e0321060c04080a, + 5325 => 0x4e61757475617301020304330213020708, + 5326 => 0x4461647368696d646967010c0711060201280415020a0b, + 5327 => 0x556d616c69276177010304031e070b050808, + 5328 => 0x4e696a6e690104080302200609070509, + 5329 => 0x54757473657a696a01060e17090b020807, + 5330 => 0x4e756c736c75010903040f0201280c0603060b, + 5331 => 0x5475696e696172756171010d03010b021d0c06040a0a, + 5332 => 0x4e65756c6e7565736e7561730102030102280710050c09, + 5333 => 0x5075696d696f7075690108060302011f110a05090a, + 5334 => 0x5475636963756301090314011b0f14020709, + 5335 => 0x53686d756d7374756e230e11200b0d030907, + 5336 => 0x496c616e61706974696b696b0109060301190c0b070c09, + 5337 => 0x536f74656d757273010402250512070807, + 5338 => 0x436869656e736965720109031d1510020907, + 5339 => 0x436f6d646c756401080b02061a0808040709, + 5340 => 0x48756e2048696e68656d010301020604051c0c0b030a0b, + 5341 => 0x53686e696d6d697001050106020704170e0805080b, + 5342 => 0x4d7770776c7465010b030104190c0d030709, + 5343 => 0x5465696d7465756c74696501020803011c0c11020b09, + 5344 => 0x74756c2d536f6e6f6c6f01010102160f0e060a08, + 5345 => 0x4573757965736f730109080306220f08070809, + 5346 => 0x746f6b2054756b746f7301040603021b0e14070a09, + 5347 => 0x506f6c70656e656b0107061b0d0a020807, + 5348 => 0x61702055707570756d01020103040e180d0704090a, + 5349 => 0x4b697264697a756b73690108031e040f030a07, + 5350 => 0x416d6e756d010f0103160d12050508, + 5351 => 0x4b696b756d75010a0f03150a04070620081203060d, + 5352 => 0x4d6f6b757201080d0820070d040508, + 5353 => 0x446c6f6e746c6f6e010703021b030d050808, + 5354 => 0x4c75706c75700101032c080c030607, + 5355 => 0x47686972204c696b680102030f01260709060909, + 5356 => 0x4b756c6b70696c6b6d616c6d010201031a0c0e040c08, + 5357 => 0x4572706d6f6c6e756c01050301181708030908, + 5358 => 0x4c6167206920416c01070221020b040807, + 5359 => 0x556e67696d0101010304260a12060509, + 5360 => 0x536970736f736f6d6f6c010f01071e0b10040a08, + 5361 => 0x4c61746b6f737372616e0101030412220308020a09, + 5362 => 0x5469656e7574010b01060302210b1005060a, + 5363 => 0x4d6f787465796d6f780104021304010322020f02090b, + 5364 => 0x6b756a20516101040125010c060607, + 5365 => 0x416e67616e676e61707501090603021a0215060a09, + 5366 => 0x5061616c6d7574010b0302010e0417050603070b, + 5367 => 0x4c6f657469616b010803040102190b1302070a, + 5368 => 0x417363686173636801030703240e0c030808, + 5369 => 0x4c7569777565696d6d65616c010906081d0e0d070c08, + 5370 => 0x456275746f79756d756d01090104021e0b07030a09, + 5371 => 0x556e6e696e6b756d6f6e010f050602210f10050a09, + 5372 => 0x556d68696e204265010306070225040b030809, + 5373 => 0x4f72686f726d69727001060804021a020c040909, + 5374 => 0x42756c756c646e696c700105041f0f08030a07, + 5375 => 0x4d6c6f686e6c6f70010e060401071f0a0c06080a, + 5376 => 0x4e696e6e696e010e0506030201041d040903060c, + 5377 => 0x4573756b74656c700102010d061d0512050809, + 5378 => 0x4d6f6f676b6f6b0107060702031e071205070a, + 5379 => 0x4f7461747568616d0110040203012b030a07080a, + 5380 => 0x4b756e6b756e010806030102210d0706060a, + 5381 => 0x50756b656d0102010212120f020508, + 5382 => 0x417a696c616e75700107020307010f230a0802080b, + 5383 => 0x4b61696d6e6f70010c07030d0602260a1403070b, + 5384 => 0x4972696c6163680103010205130f15050709, + 5385 => 0x536e756e20536e616d67756e01080824040b070c07, + 5386 => 0x536b656e6b656e010a03040601200f0502070a, + 5387 => 0x4368756d727572010a060f03230410040709, + 5388 => 0x4f6d696b756b756b010d0306160713050808, + 5389 => 0x416b656c756e7573756e656c011001180d0f040c07, + 5390 => 0x4b696c6e75727473636801080803070f0606070a09, + 5391 => 0x4b696b64696e01070103061b0513030609, + 5392 => 0x756b2055706570657401060403010222021306090a, + 5393 => 0x4b65276e616c6b65270110010803021f0c0707090a, + 5394 => 0x48696b6b75010d0c0102031e060d02050a, + 5395 => 0x4170696368010d02230b14020507, + 5396 => 0x4368756d6e616d010f01041d0615020708, + 5397 => 0x556b756d74697970696e010c15030f0614021d0308070a0c, + 5398 => 0x556c6b6f6c6767657201020b0604050315050707090b, + 5399 => 0x4b6875727769736e756574011003040601260806020b0a, + 5400 => 0x4b6c657a686c75736b6c657a010c08020403120b0d050c0a, + 5401 => 0x54697474750101030602190c06030509, + 5402 => 0x4e67697570010c0b0208011b0c1305050a, + 5403 => 0x4973686f206e69204901050401030b020f1d030502090c, + 5404 => 0x516a756e6a757171756a010f1422040a070a07, + 5405 => 0x536d6f6e204e656e0109020104250e10020809, + 5406 => 0x54696e6d616e010a031a1510050607, + 5407 => 0x4a6f6a6c75710107030b070e23050a07060a, + 5408 => 0x4e69656d65616d65616d6561010e010403200b09020c09, + 5409 => 0x54696e6e6f6c6e656e6f6e0103050f02200113040b09, + 5410 => 0x496d756d6973010a1006040b031e100a05060b, + 5411 => 0x466b756b736b6f68010203081e0509030808, + 5412 => 0x496b74616b01060201060b0327151505050b, + 5413 => 0x4e6f6e204e6f6e70756e010204011a090c070a08, + 5414 => 0x4b61696b61696d6f69736f75010102160c12070c07, + 5415 => 0x426575736d65730103010308020622140d02070b, + 5416 => 0x537475737375736e756e010d051e090d030a07, + 5417 => 0x50656d68756d736e6101050304210f0b070908, + 5418 => 0x5372616e7372616e010c0d03230305020808, + 5419 => 0x6c6575742050697001010301020b190e1006080a, + 5420 => 0x4b696c6b616b616b6c756d0103060b030205231010030b0b, + 5421 => 0x4b61736873686f6c0110020b0f081c0e0a04080a, + 5422 => 0x48756e6877656870796f6801050201031f020a030b09, + 5423 => 0x4c616b6520556e6c65010f03210605030907, + 5424 => 0x446f746368204f6d010406011b0a09060808, + 5425 => 0x537669696b6d6f726b7573010f010408220610020b09, + 5426 => 0x4b756b756b750108031d0908020607, + 5427 => 0x536872756767757201040b110e031b070c03080a, + 5428 => 0x557375747069010406040102032b170803060b, + 5429 => 0x536b756d736b656b75010d0716040f020907, + 5430 => 0x4d616d7573696b69010c060201031c040507080a, + 5431 => 0x576127736d61276c6f770104030208230611050a09, + 5432 => 0x696d2054756e0102021b0a09020607, + 5433 => 0x4e6173686c6f7a010906051f090b020708, + 5434 => 0x54757074757001051102030125070c04060a, + 5435 => 0x4d656b2055756d01020102240e0f030708, + 5436 => 0x4b6f6b7368756b010d03230414040707, + 5437 => 0x486c616c77696c20576c756b010907010328070f040c09, + 5438 => 0x4c6163686173680107020401030815171204070b, + 5439 => 0x446961756d616d01010f02010624151005070a, + 5440 => 0x5567696e74696701070402010318081406070a, + 5441 => 0x456b656b756d010b0608031f0808050609, + 5442 => 0x496d656d61700107060103081a120f06060a, + 5443 => 0x4b6c756e6d696e73756d0109031c0905050a07, + 5444 => 0x4b6c616e676b72696d01050a01041a0310020909, + 5445 => 0x4f6e6765716f6e67756e010502230707030a07, + 5446 => 0x4b756b696b6f010d04031d0e0c020608, + 5447 => 0x53776f6b7368756b010a01210615070807, + 5448 => 0x476574676574010803220c0c070607, + 5449 => 0x4d696c746d756c6d010f030601021e0c0f05080a, + 5450 => 0x4f6f6e62656d6f6b650109020f03250205050909, + 5451 => 0x416e726f6e656d010f0403010b06020a0b0f04070c, + 5452 => 0x4e616e676e756e010f020f0a18080a060709, + 5453 => 0x456c746f6b6f6b01050f01030226151307070a, + 5454 => 0x4e656e6b656d74756d6b656e010f0801060204250309060c0b, + 5455 => 0x75732d496c757001050108250605060708, + 5456 => 0x6861742054696d6d656e010303020a250211030a09, + 5457 => 0x53686d656d736e656d0106032a160c070907, + 5458 => 0x546173626574696b69720102030108041a0905030a0a, + 5459 => 0x54756d74756e746f6d010c0f0302011c151005090a, + 5460 => 0x5461756869656d70617501010201031f0a0d070a09, + 5461 => 0x4e65776e7561276e656d010303010204051a1611050a0b, + 5462 => 0x556c6d756c6d756c6d0104010b04120525021206090b, + 5463 => 0x456e6b6f70656e01040105030226101005070a, + 5464 => 0x5874756e6c696e7874616e010b010603140226060a070b0b, + 5465 => 0x6c756d204975010b010602031c0a0705060a, + 5466 => 0x5a756262617462756475626f0109051e0914060c07, + 5467 => 0x4872656e6c657070656b010d02031c0608030a08, + 5468 => 0x4d75776b73696a6b010b100601030e1b0a0a05080b, + 5469 => 0x6c7520546172657069010d020506011b060d05090a, + 5470 => 0x4c696e20546c6974746c6974010a0407032b060f020c09, + 5471 => 0x457265672d45706570616a010502030f0401271005050b0b, + 5472 => 0x4e6563686e6563686d616a010e0705041c0513050b09, + 5473 => 0x48616e696d696d01010b0801030722050f06070b, + 5474 => 0x4f6f6b6161204d6f6e6f0106021f0806030a07, + 5475 => 0x53656f62726f640109060401030c1026070d05070c, + 5476 => 0x506f6765205269706567657001020208060503011f0213040c0c, + 5477 => 0x4e696c6c757001030b03021d0f14020609, + 5478 => 0x4c656c70616c6b6c656c010f09050203042a0215040a0b, + 5479 => 0x5367697372696c697a010b070301200909020909, + 5480 => 0x546a756c74616b010f030714070f040708, + 5481 => 0x536d69736d69010a03170814020607, + 5482 => 0x586f702d4d6574010b0f02081d0314030709, + 5483 => 0x4b6f6e6b6f6e2d4b6f6d010f040103230c0e020a09, + 5484 => 0x5a687564627561740102040801021d070804080a, + 5485 => 0x456b756e7574010404010f02220c0c04060a, + 5486 => 0x5a75682073697a2057616e01060b010408210813060b0a, + 5487 => 0x536f6b736d6574205175790104060102050326080f020b0b, + 5488 => 0x4b61657a7269650106021c1209050707, + 5489 => 0x496c7675727675736c6f71010403251206020b07, + 5490 => 0x577564626173777564010204270a12070907, + 5491 => 0x4b69706b6970010706160706060607, + 5492 => 0x43686c656e6e6f6e7370756e0107080b0106180f14050c0a, + 5493 => 0x6b616e2053756e6b756d0108080301061a0b12040a0a, + 5494 => 0x6e756c20416c73756c74616c010f0e1c0114030c07, + 5495 => 0x536e65736e6501040102061c0a13040609, + 5496 => 0x736f6c204b7574736d75700110021a0d07070b07, + 5497 => 0x44616e696e6f6e6f6e696e0104020104031d0911060b0a, + 5498 => 0x4769676576756c6e67010906230213030907, + 5499 => 0x5370756e7377696d010c040103190c0a050809, + 5500 => 0x4b696e62616e010a020428060f050608, + 5501 => 0x4f6e77696d6e696e6f6e010f01120408240a11070a0a, + 5502 => 0x4e67696e6a696e010c0805030225020b04070a, + 5503 => 0x4c61736c69010408031b0506030508, + 5504 => 0x4d75646761646b616b6f6701090204101403270a0f030b0b, + 5505 => 0x53656d6b756d70756d01030203011c0d14050909, + 5506 => 0x547565676561010f03010b041c050e06060a, + 5507 => 0x4d61757470696e68616b010e0601020e0b0803240409050a0d, + 5508 => 0x4e696b6b696c6e6970010801080403021e081103090b, + 5509 => 0x497a697a757a6f73757a010501150203230210040a0a, + 5510 => 0x4e75636864656368010b01020f0321140802080a, + 5511 => 0x4b6c7568686c75686f68756b010d03070104020b1e0e10020c0c, + 5512 => 0x617a68204f7a68616d7770010c04150b021d0913050b0a, + 5513 => 0x556c656c6c79746d756c010d0203210b10020a08, + 5514 => 0x4e756e737461706b7574010a0503021f0710050a09, + 5515 => 0x4a616d617077696c01010503010822050903080a, + 5516 => 0x497474696e0107010603240b10030509, + 5517 => 0x686f6f6b2055796b010e0124040e030807, + 5518 => 0x426973204563010c08070102031a040502060b, + 5519 => 0x496e692049696e696b696b01080c031e0f09050b08, + 5520 => 0x6765752044656f726f656e010c0401150e15040b08, + 5521 => 0x4775616c7a616578626175780107021c0613020c07, + 5522 => 0x4c65732d4c756b010201020320050f040709, + 5523 => 0x5363686572736f726e7572010b020301270b0d060b09, + 5524 => 0x4e61736b6f6b010a010b22140a020608, + 5525 => 0x4c696e74696e01100d01030b190d1203060a, + 5526 => 0x48616d686f6e010b0805040103190f0604060b, + 5527 => 0x50656b73656b010d03011e0610060608, + 5528 => 0x4d6f657a796f757a687a656f010a0b030405210c12020c0a, + 5529 => 0x50756c6d756c756c010c0104180415040808, + 5530 => 0x4973696b6973696b010c0b03080602190a0603080b, + 5531 => 0x48656968686569687061650101020104031b0f0a050b0a, + 5532 => 0x526572616d7277776d6c757301040801051527060f040c0a, + 5533 => 0x53686b616e736c69740106031f0511070907, + 5534 => 0x476c7573686e676c75736801090604031f0a0a060b09, + 5535 => 0x556b756d656d656d656b0105060b03250c12030a09, + 5536 => 0x5a757a69736e75010f0e0106020b0323080e07070c, + 5537 => 0x5377656e6d6f6e666d756e010d03040f210f05060b09, + 5538 => 0x44696d676f6e0105080203010b1b040706060b, + 5539 => 0x55727469720110030206040128021003050b, + 5540 => 0x6865204368696368750103030401021e080702090a, + 5541 => 0x47756e206b696d204c7562010f0402030601171c14030b0b, + 5542 => 0x2761756e75616b6d6975010805010403021f0813050a0b, + 5543 => 0x676f20446f010f0403060222051106050a, + 5544 => 0x4e6f6263686f7a686f0101060103020723080c02090b, + 5545 => 0x4175706f6f706e61756c7301051402011e030d060b09, + 5546 => 0x4b6161757370756c70616973010b04050803250212050c0a, + 5547 => 0x4f612d6f742d55746f74697301020103150c08070c08, + 5548 => 0x6d6961204d6575010b01071d0506070708, + 5549 => 0x41646f64757a68010e0403010625050d02070a, + 5550 => 0x526964657169010b020103060418111503060b, + 5551 => 0x4b6f746c6f74736c756d01030e200811070a07, + 5552 => 0x736d65732043686475640101040201240811060a09, + 5553 => 0x5374656e6e616e010c07031a0813060708, + 5554 => 0x417761776577656c696b010603260b13060a07, + 5555 => 0x4b756d68696e74756e6e696d010d0301190911070c08, + 5556 => 0x55706f68756d6f6e75680106040212031c0309060a0a, + 5557 => 0x53697361737369736173010601161205030a07, + 5558 => 0x4c696c6c656d010103011d0d0a070608, + 5559 => 0x536b6f736b6f70756b01060f08050306140d1c081402090d, + 5560 => 0x546f6b6d696d696c6f6d69010502040103170b09060b0a, + 5561 => 0x576974776577011001041d0e07020608, + 5562 => 0x496d746f6e73656e6c616e010c0201170814060b08, + 5563 => 0x536869616d01071020120d050507, + 5564 => 0x496c747369727473696c6e010f0304011e0d10050b09, + 5565 => 0x5370696c736d616b736d75700105050704011b050a050c0a, + 5566 => 0x506f6b70696e7069740107010407031f060603090a, + 5567 => 0x4b752d4f6b7567656e01080703011f0f0e030909, + 5568 => 0x6c75204b69706101070b0108021d050c07070a, + 5569 => 0x61732045736b757573756d010207191b10020b07, + 5570 => 0x4d616e6d696d6d616e74697a010c060102081e0f12040c0a, + 5571 => 0x53696d656e650110070504031a0c0e03060a, + 5572 => 0x4e6f756e6c6f6d6e75730103031a120e050a07, + 5573 => 0x4b656b696c0103060119090f030508, + 5574 => 0x5475706f706f746f70757475010a020b0c030816090b030c0b, + 5575 => 0x4179757a68756e757a68616b010402030b0d011e0610050c0b, + 5576 => 0x55726f6e67756a75726567010f01020406101a0612060b0b, + 5577 => 0x4e69736e69730104050208250407070609, + 5578 => 0x5069627a6f6c01020206300508030608, + 5579 => 0x54616d6d6161746d72696d010f030419110e070b08, + 5580 => 0x496a73656a746b696e01060503021b0606040909, + 5581 => 0x49706e75747269740103010305230d06030809, + 5582 => 0x4d65656b69726b6d65657075010e020307210913030c09, + 5583 => 0x4d756e6d616e6d616e0103032b040a030907, + 5584 => 0x4e696e6e6c616e73686c616d010f080406030f220a12060c0b, + 5585 => 0x5469746e756d746974010a010306240106030909, + 5586 => 0x426c757720446f6201080403060121100706080a, + 5587 => 0x4c616c6d796c6d796c6d796c240701020f03061a0410050c0b, + 5588 => 0x5a6869737a68697301020103042c160c030809, + 5589 => 0x4c65736a6573010f120219110d070608, + 5590 => 0x4e6c656d64696e011002030624060d020709, + 5591 => 0x49736865736801100e03081c0f0d050609, + 5592 => 0x416869706974010703151d0410050608, + 5593 => 0x4974756b756d756d010f021005201012020809, + 5594 => 0x696e204b656e204f6e6f6e010d080203071b0511060b0a, + 5595 => 0x4d72756e7679696e677469730107030801021c1906040c0a, + 5596 => 0x4e79756b7079756e011003060f04021a020f04080b, + 5597 => 0x54697265726e0101080324080e060608, + 5598 => 0x27756a277577696a010b0208070113080b06080a, + 5599 => 0x506f736874757a680107040306240a0a040809, + 5600 => 0x4d696b736d6f6b0106080601190c0c070709, + 5601 => 0x4d6f706d6f6d6c616c6d696d01080301021d0908060c09, + 5602 => 0x556c2d68652d48656c68656c0103040201030b1a1014070c0b, + 5603 => 0x4e616d6574010e06010e021e090a06050a, + 5604 => 0x4861776d612777756e01090403052a100e050909, + 5605 => 0x53697369716f71010303060e01040f0c1506070b, + 5606 => 0x5370696d736c696d70756e67010c0301081d130a030c09, + 5607 => 0x41756e6f7365646f730110020119070b050908, + 5608 => 0x5370756d736e6f71737501091406020f07031b0605060a0c, + 5609 => 0x55736f6d6173617361736173010603050422190e060c09, + 5610 => 0x42756e6773756e73756e01080a1606031f0f0a030a0a, + 5611 => 0x736f204c6f71697365010c010206230311060909, + 5612 => 0x4b616b736b6576010d0103210706020708, + 5613 => 0x4d696e74616e010514070215040f040609, + 5614 => 0x4e6f74736e6f7301100304010b20080803070a, + 5615 => 0x416b696e616e010c03040701021e121207060b, + 5616 => 0x446c6974706c616e01030302150610020808, + 5617 => 0x497974617701040701021b0407040509, + 5618 => 0x50616b6d75700108071b070a040607, + 5619 => 0x5362617a736573706f73010f05030f1e0b08030a09, + 5620 => 0x52757261706172610109020401170f0f040809, + 5621 => 0x457475707570204f74696e0109080402030706280510050b0c, + 5622 => 0x4f706f6e7570657401010203011d0307030809, + 5623 => 0x4173697075706173010906020323180a020809, + 5624 => 0x5368617a6b697a6b75730107090801021d080f070a0a, + 5625 => 0x4d61756d756b7361757401090306010208230306060a0b, + 5626 => 0x536d6f74736d6568010b03140615030807, + 5627 => 0x46706f6b736874696c6d6f6c010607250b0b030c07, + 5628 => 0x5475736b616b010501081c0b0e070608, + 5629 => 0x556d756e756e72696e011006030104071a040503090b, + 5630 => 0x4e616e6c6f6d01050203081f060e060609, + 5631 => 0x5469756e6c7569746c7569740107031501170510020c09, + 5632 => 0x4c617374757a74757a736973010503050604200e08050c0a, + 5633 => 0x50756c6c656c70756c656d011001032f0c0e060b08, + 5634 => 0x4d65686f6d61010a0b1b0709050607, + 5635 => 0x4d756b7572686d6f6d01080e15031c060d020909, + 5636 => 0x4368616d73686569720104080602010f12060907090b, + 5637 => 0x4d6f6b2048757368757301100306180b07020a08, + 5638 => 0x54756b656c6f0105110e0b0420030e03060a, + 5639 => 0x547975756b010f04200e14040507, + 5640 => 0x4c6f72746c6f7274010b0804030113061204080a, + 5641 => 0x5a756c74757701030302290c0e060608, + 5642 => 0x4e75796e657974686577010e05030201120d0a070a0a, + 5643 => 0x45736475716c61736b656d010f03010f1c050d040b09, + 5644 => 0x54616c696c74756c736801100210050803041b090c050a0c, + 5645 => 0x537573686e696c0105010403130908060709, + 5646 => 0x4e696c696d696e0107020106040322040d06070b, + 5647 => 0x4b616e6e696e01060301021e1206070609, + 5648 => 0x557361617301060e020306010421020607050c, + 5649 => 0x4b6961726c7561746b75610107040308240615050b09, + 5650 => 0x4c65616d20696e2045010502230d15040907, + 5651 => 0x497368616b6164756401090301021d0410030909, + 5652 => 0x52652d6b692d4769726f6e010f02030406210f09060b0a, + 5653 => 0x527773656b0103010812030218030e07050b, + 5654 => 0x4b696e756b696e010e05020815011a051505070b, + 5655 => 0x54696c73756c74696c01090301260c07040908, + 5656 => 0x57756c68206d6f6c205568010c040106190c10040b09, + 5657 => 0x55796c7469746e756b010e040b0601021d041405090b, + 5658 => 0x4e7569746d7569010403061d100b050708, + 5659 => 0x42756368610107010f04021b0c0603050a, + 5660 => 0x4b6f6868616d686f6e011003020b010f200a0a03090b, + 5661 => 0x456d7069776b776177776177010a08060201031c0b08050c0b, + 5662 => 0x536f6b6d75756b010204010b081c0d0c02070a, + 5663 => 0x506f6e6d6f6d01060702050315080806060a, + 5664 => 0x4574756e6b756f010201031d0409030708, + 5665 => 0x416d696b20496d616d010b010203120407020909, + 5666 => 0x4e756b696b610106070312050c040608, + 5667 => 0x4b6f6e205a68696e010803260410020807, + 5668 => 0x48696b70696b010a01060307082a0b1105060b, + 5669 => 0x4c696e70656e6d696d010a041a080b020907, + 5670 => 0x546f6b6b6f6173010a05040102031e0f0605070b, + 5671 => 0x6f722d4d757279010b021d0515060707, + 5672 => 0x4d6f6d736f736d750109021d0c09030807, + 5673 => 0x4e6f6f6d616d750104040802010e1f050b03070b, + 5674 => 0x75742d4568656b01100308012a0a0e050709, + 5675 => 0x53616e6964676869736c69010d0802031f0207050b09, + 5676 => 0x4a7573697271656b756a75750107040e08031c0512040c0a, + 5677 => 0x556c7072616c620101031f060e020707, + 5678 => 0x53746368796a010703050801190e1407060a, + 5679 => 0x4475737a7573010c0613020c01051e0a1402060c, + 5680 => 0x53616c6e696e6b656e010d03020128070a060909, + 5681 => 0x42696172696f6b7a68696f70010906031d100f050c08, + 5682 => 0x497970696e65270105021404240c0d060709, + 5683 => 0x4e6f6d6d756c6e010504020306070f1f070c04070c, + 5684 => 0x536e69736f746e6f010b111b070f070807, + 5685 => 0x6b756e204f6e676c756e010e0114020320030a050a0a, + 5686 => 0x536c616e67736d696e67010c06020803241014040a0a, + 5687 => 0x52696e696e62696e010c03011b1105030808, + 5688 => 0x4d756e74696e74616e0103030201061b050a06090a, + 5689 => 0x74696d204b6872696b680105030802050407230f0a040a0c, + 5690 => 0x4d656561707069206d612045010a08010302250e15070c0a, + 5691 => 0x4d75696d6d6f010b14080a031f120902060a, + 5692 => 0x4b696b692047687562750101081407041c130e020a0a, + 5693 => 0x54696e616d010a0201041c0106050509, + 5694 => 0x5365742050756e0107030204011f0d1207070a, + 5695 => 0x4c656b6f6c6e6c656b73756d010e0103220708040c08, + 5696 => 0x4f6b6f77656e0102031c0506040607, + 5697 => 0x4a697275766f01010a02050126101304060a, + 5698 => 0x4a616e6a756e0106070403190d14070609, + 5699 => 0x6c652054697069746f010d010b040226041505090a, + 5700 => 0x53696b726f6e010703021a130f050608, + 5701 => 0x47686961772047686f61010f03010206082c030b020a0b, + 5702 => 0x4b65756c7a7573010d060304011b180905070a, + 5703 => 0x57617a6d697a6b616b657a250108050406030b1c0b0e060b0c, + 5704 => 0x4c69796b756b79617267696c0106030501060f1e0c0b030c0b, + 5705 => 0x4d6c6f73736c6f73010c0b06041b0707060809, + 5706 => 0x5369204b6974746901100f1c0312060807, + 5707 => 0x436875706368756573010f0b030601041d070503090b, + 5708 => 0x4d617262616c64656c64011004060a0103190a06050a0b, + 5709 => 0x4e616d73796d0107061f0606030607, + 5710 => 0x536d696c6973690104011e0a08030707, + 5711 => 0x55636869730110040203170d12030509, + 5712 => 0x4e756d6c69736b6973010e0201070321050503090a, + 5713 => 0x4b796c6e6d796c6b616c73010b03141f0612030b08, + 5714 => 0x4b696e7374616e73616e0101010403280b0e020a09, + 5715 => 0x4f746f706570010104010224030f030609, + 5716 => 0x536867796e7367796d64616d010808200c08020c07, + 5717 => 0x4c6f6d6b756c010d05230913040607, + 5718 => 0x5365742d6b696b2d50617401030204190b10030b08, + 5719 => 0x4b696f766501070b1e0307070507, + 5720 => 0x5568756875616968010d0402010d26060805080a, + 5721 => 0x4d697363687a69730108030402240a06040809, + 5722 => 0x546f6c696e656e61010c040d01031d0e0807080a, + 5723 => 0x5075272d70752d4865686501080603010f02271005070b0b, + 5724 => 0x4e69726b69726e010603020504061a0d0603070b, + 5725 => 0x526167696e676f6f6a75726101040b0f02010403210610030c0c, + 5726 => 0x5369656e7365656e010103011a0712070808, + 5727 => 0x506173736b6f010c010b180715070608, + 5728 => 0x4d7573776b204f73756c6173010b010f08040321060b050c0b, + 5729 => 0x51756e73656d74656e70656e010407030f0208200c0d020c0b, + 5730 => 0x4b616d736368756b616d01020f01031a050e070a09, + 5731 => 0x4b697464697001100403021401210e0c03060b, + 5732 => 0x416b616d756c616b010e02030f1b110c020809, + 5733 => 0x4c75736f6e656b756c7501070802030b041d0a06050a0b, + 5734 => 0x536c656e6b72756d010906021a050e040808, + 5735 => 0x55716e676976010d0102080b0419100703060b, + 5736 => 0x5a6f7a7169757a6875697a68010d041f040a040c07, + 5737 => 0x536475736368647564011006220414030907, + 5738 => 0x5472696b6e726f7468726f6e010b080703260415030c09, + 5739 => 0x4d61756b7475697461756e010203081005170806040b0a, + 5740 => 0x4c6173686e6c7567646f7401070307200715060b08, + 5741 => 0x54696c74747574736901050b0f04021d191404090a, + 5742 => 0x4b696b7472756b6b6c696b01040603081d1308060b09, + 5743 => 0x50616e6b656e666e6f6e0102020522040b030a08, + 5744 => 0x5374756b627570010208010420100c030709, + 5745 => 0x416a65702d61732d54616e010b0e060203011d0810060b0b, + 5746 => 0x54756b6d6f6b010208030702150419040807060c, + 5747 => 0x5069747469617401010b03061d090a060709, + 5748 => 0x4e696c676801090a0b06030127040504050b, + 5749 => 0x57656d6768696d6f010701041d0610070808, + 5750 => 0x4b756e676b756e67756e67010504250512040b07, + 5751 => 0x4b756d6e6f75706d696d2609030219090b040a08, + 5752 => 0x4368617a686c6970010c030b08070e1b0b0804080b, + 5753 => 0x596569736b61756e670105050403210613020909, + 5754 => 0x4d6f6b6a75010a0102031b0f14060509, + 5755 => 0x6f6b20546f74010d010f0b220b0e020609, + 5756 => 0x4b756c74696d74616c01040508200f0e030908, + 5757 => 0x4368616463686164010c020403061d040702080a, + 5758 => 0x496e756e7570616d010f03210d05040807, + 5759 => 0x5574696e70696e6f010c0206170c14040808, + 5760 => 0x4e656e736c656e736c756e010906240e13040b07, + 5761 => 0x536c756d7368756e010e05110304021f090505080b, + 5762 => 0x27756e61204c75686e610110060102080318090c070a0b, + 5763 => 0x537574746974010a1003050204190f0704060b, + 5764 => 0x4b6173776d6b616e69010104031d0614020908, + 5765 => 0x4f6e656e2070656e20506101060602082a0c0c060b09, + 5766 => 0x416b756e616b616b010f02030104081a0e0d03080b, + 5767 => 0x6c6f6a70204b656b0109010f021e0813050809, + 5768 => 0x44616d64616d63756d0108140304021024141202090b, + 5769 => 0x4b6c6f746d757065746c6f6e0102060b01210412020c09, + 5770 => 0x4b69706b6970696e010e0f020804011f0b1506080b, + 5771 => 0x4c797479746d756e01080602040126031004080a, + 5772 => 0x4d6169206e6161204d6f6f01050b0608020f1b060c030b0b, + 5773 => 0x576175756e6e75756e010e060102032a040c03090a, + 5774 => 0x54656b6d657a010e0b021a0d0f020608, + 5775 => 0x4d61756e2d486575740107030619030d050908, + 5776 => 0x4968616e7577756d75770106050609080122030b040a0b, + 5777 => 0x4b756b6c65204f736e69010308010204170a0d070a0a, + 5778 => 0x516f6a76656b6d6f67706571010f010603240c05020c09, + 5779 => 0x4d656e736c616e010702280c0c070707, + 5780 => 0x576f656b75652777756f70010e011f090a060b07, + 5781 => 0x5377656b73656d010401020325140a050709, + 5782 => 0x4572617261730103010205081f090e06060a, + 5783 => 0x5570616d7574616c756d010b060201081c0506070a0a, + 5784 => 0x4968706970686f6e01080e0206220805020809, + 5785 => 0x45696e6f6c6f6e6701100314190412040808, + 5786 => 0x4b6f6b6d696b010c02050125090c060609, + 5787 => 0x4d616e6c6f6e01020305021e070f020609, + 5788 => 0x4b6f6e646c656e74696e010c0203011c1405070a09, + 5789 => 0x506974616d616e79706901040d1f090a040a07, + 5790 => 0x5475736d6c696b01080c170612070707, + 5791 => 0x416d696c2069742055736174010a03080b020705221009070c0c, + 5792 => 0x53656d73656d736574010501200708050907, + 5793 => 0x54616b70696c74617401030203160b14070908, + 5794 => 0x486f6b656e01080802011024040e02050a, + 5795 => 0x5061737061732d4e656c65730105080105030c02211214070c0c, + 5796 => 0x4b6f776e6b6f7965776b01090f250508020a07, + 5797 => 0x42656e706f6e676f6e64756d010d0b070102190f13050c0a, + 5798 => 0x4f6e756d6164756b01080102150e05070808, + 5799 => 0x466e756d6b616d7075730103030801200514070a09, + 5800 => 0x53656d737069737461700104011d0f0a020a07, + 5801 => 0x47756c7364756c7464756c74010601041b2113050c08, + 5802 => 0x4e61757a6e61757a6d65697a01010503110b12050c08, + 5803 => 0x54696e6e72756d68656e67010b080203200908020b09, + 5804 => 0x5465647265620109060203160610040609, + 5805 => 0x546f6a706b6f6a6d01090b290511030807, + 5806 => 0x4e6f6b746c756b010b031f0510070707, + 5807 => 0x556c7374736368756c75720110040e1d090c060b08, + 5808 => 0x54756e616e616e01080102230806050708, + 5809 => 0x4b756e7361736101040103070402230b0c03070b, + 5810 => 0x4d656e70756e706101020320050b070807, + 5811 => 0x486c61616b7568205568010b030602210a10060a09, + 5812 => 0x74692050756d6c697073696c010803241105060c07, + 5813 => 0x4d696e74610109031d0408070507, + 5814 => 0x556b756c617a756401031504010302250e1306080b, + 5815 => 0x52656d6572656e69656e011006010203200d0a030a0a, + 5816 => 0x536e61707370697361706170010203220206020c07, + 5817 => 0x4465736869647368656d6f010c04270607050b07, + 5818 => 0x4c61657274697a010a0605020b1a0a0904070a, + 5819 => 0x5775626977617761010f040106021e041404080a, + 5820 => 0x73756e2053657373616b01080d0402031d090f060a0a, + 5821 => 0x4e776974746a6974736a757001020805220706070c08, + 5822 => 0x4c756c6c756c010c0421030a030607, + 5823 => 0x50696e6977756e20552761010603200909020b07, + 5824 => 0x6875205469776861796d69010c070104020b0619070e020b0c, + 5825 => 0x536f6e20446f6e756d646f6e010b0205031e150b030c09, + 5826 => 0x4c61746e6174736b7574010308030128010b060a09, + 5827 => 0x4d656e696e2047756d6b656e010602031c0710030c08, + 5828 => 0x576c75676862756c010304021d0b06030808, + 5829 => 0x516165706d697571010302160412020807, + 5830 => 0x6e65204e756b6d756e616b010602080103041e0d0e020b0b, + 5831 => 0x56756e676e6775746c750105042f020a070a07, + 5832 => 0x506574616701010103211a14050508, + 5833 => 0x506973687567650103050320020c070708, + 5834 => 0x496b616b20416e616e616b011005010306081b0709030b0b, + 5835 => 0x4b69696c61616c61616d6f01061401081c0a12040b09, + 5836 => 0x4b68756a796f01050602160d05030608, + 5837 => 0x4e616e6d75010d0504010821080f03050a, + 5838 => 0x4f6e69696c6e65656e6574010c0402031f0706050b09, + 5839 => 0x5069747069747465706b6f6e010b06011f0b14020c08, + 5840 => 0x4e6f6d746574656e6c756c7501030106290305050c08, + 5841 => 0x27612720706f27204c6a6f27010c01031f090a050c08, + 5842 => 0x5472756e6b756e010503081407101d080907070b, + 5843 => 0x50696c7374756c010803041a0a0f030708, + 5844 => 0x51657165706b7570736f010301030221090e040a09, + 5845 => 0x556c6473756c64756c0107010308180305020909, + 5846 => 0x417275646c75676475636801040206030105151e0a050b0b, + 5847 => 0x4f6720446f6e6e656b6e657401030603011b0b12020c09, + 5848 => 0x49706b65732d496264696b010502150401031c170a040b0b, + 5849 => 0x4f6d696e20756c205574757401030104110e14050c08, + 5850 => 0x5472656c746f72010a03200a0c070707, + 5851 => 0x50616c74616b010f030f0206011f080c04060b, + 5852 => 0x5570696c20756b20496e656c010c03040b01160c13040c0a, + 5853 => 0x506573746c656b2d51656b010a02010821050f070b09, + 5854 => 0x4e69757768616974686967010502060426030d020b09, + 5855 => 0x5579756b75746f6b011003020b0e1511020809, + 5856 => 0x536f746f706f736f010f0203210114060808, + 5857 => 0x4f6f73696b6f0106030b010e0602170c0d07060c, + 5858 => 0x47687577776f6e75647579010f0b02010c0e14030b09, + 5859 => 0x5072756e6d6c756e74696e01020f1d150c030b07, + 5860 => 0x567573736e61737367617301010325050f070b07, + 5861 => 0x536f6d204b616e6701050801180c0d060808, + 5862 => 0x4e75736e75736b756567010508020126030b070a09, + 5863 => 0x4d6f6b7475204d69730105120d0117080e030909, + 5864 => 0x4e6c61746c616b0107150308011d130906070a, + 5865 => 0x51656b6c75740104040103130a13050609, + 5866 => 0x70756b2d556b6b6973010603010a080619050a07090b, + 5867 => 0x5369726b656c73010d020301050d20060a02070b, + 5868 => 0x5469636874616368010f050604250e10050809, + 5869 => 0x426f6c626f6c01080128130c060607, + 5870 => 0x50616b72756e70726f6e010f010803020a0a06040a0a, + 5871 => 0x4768696520756e2042756e01070f08040301160c0d020b0b, + 5872 => 0x5368757372696c011004030120040a060709, + 5873 => 0x42656b656e0106081d0c07030507, + 5874 => 0x4d756e73756d696d7075010804031b010d040a08, + 5875 => 0x4b616e6b756e6d61010a100403160611020809, + 5876 => 0x5961796973686901030602030c0b11050709, + 5877 => 0x4e6169726f65010a05040301260e0b05060a, + 5878 => 0x2775736d61706d69010d020b210811050808, + 5879 => 0x4d6c616e6d6f6f6e7377696e010d0b01040302150b10040c0b, + 5880 => 0x59757479757401040205040315090505060a, + 5881 => 0x4b696c6b756b6b756b010f03011b0907050908, + 5882 => 0x4179756e67010e08201213070507, + 5883 => 0x4b756e6e616e01070203041a060c020609, + 5884 => 0x48696e68696d616e74756c6e01081403020104071e060d070c0c, + 5885 => 0x53756e204e7573010b0401021c0511040709, + 5886 => 0x5a687562757a680105020c0614011b110b07070b, + 5887 => 0x4e6c656e726574656c010d0508062c0406050909, + 5888 => 0x53756d204d656e011003050b231509050709, + 5889 => 0x496c6972686d6572010401040f1b080a060809, + 5890 => 0x61205961647961646162011008071a0814020a08, + 5891 => 0x717561712054756b74756b010104020108261514040b0a, + 5892 => 0x446c617368010d02040306070125040803050c, + 5893 => 0x50756d6d696d010a01200d11040607, + 5894 => 0x53696b7573757475010b0402290109060808, + 5895 => 0x4972626b6f7270756c64010b0806020e1e0911060a0a, + 5896 => 0x556e72696d0104020a01060422020d03050b, + 5897 => 0x556b696b7570756b6974010c040205010a230a05030a0b, + 5898 => 0x53636874616b7363686c6967010d0402030627070f040c0a, + 5899 => 0x4d756b677573010a0803021a0206040609, + 5900 => 0x546175616761756f736f69010e02030608011a0914060b0b, + 5901 => 0x5363686b756e6e756e01100503070821081104090a, + 5902 => 0x4e6f6e71616e01080710020326120c06060a, + 5903 => 0x57756e6b75010e080b03200d13020509, + 5904 => 0x4272696e6b72696e010a02011f0a0e030808, + 5905 => 0x5372656d6b656c0103030706010525080604070b, + 5906 => 0x5475756b61010901030716040f070509, + 5907 => 0x4e6f6e736f6e01041404050326080f03060a, + 5908 => 0x496d7368756e6d616e01010d0f08010321090a05090b, + 5909 => 0x4c616c736c656c6b6f6b01030f0603050819090e040a0b, + 5910 => 0x4368696c736b616c6b010c020308060b221b0607090b, + 5911 => 0x4d6f657461656d6d696501020504020121040f020a0a, + 5912 => 0x4c69616e6b65696c69616e010e0206260409050b08, + 5913 => 0x596b786173010603021d0608040508, + 5914 => 0x5165776b68756d776f730102150f0d08031e030e070a0b, + 5915 => 0x55776520456d77656e6c650102120708030b191014030b0b, + 5916 => 0x4c756368756c7520696920410109030504061b090e060c0a, + 5917 => 0x4d72656e736f6c0107021204011e190807070a, + 5918 => 0x546f6c656b01020704080322070905050a, + 5919 => 0x557774736368707573616b010d0126050b030b07, + 5920 => 0x756b2d556c75670107030502012f150b05070a, + 5921 => 0x48757575756b756e0108080b0401031b151203080b, + 5922 => 0x4c696d6c7569776d616d010a03040b021c0606030a0a, + 5923 => 0x53656d736e756d0101050402031e070b04070a, + 5924 => 0x536368616c6d656c0106020103160d07040809, + 5925 => 0x44696d6e696c6e010d06220b0e020707, + 5926 => 0x4d6f6e757a010b02030801120a0b02050a, + 5927 => 0x417475742054756b6974010a080603100b011f0512040a0c, + 5928 => 0x4c75707072696870726177010603041c070c070b08, + 5929 => 0x52696e6368696e6772756e01060102031d0908070b09, + 5930 => 0x486f73776168276527010210060b0324010506090a, + 5931 => 0x416b6f6c6f6c75700109010208040618060c02080b, + 5932 => 0x50617a6873687573736875730108010e04031f1215060c0a, + 5933 => 0x4d6174757a696b69010d010b02031b031107080a, + 5934 => 0x6f72204972657269720106030517080b060908, + 5935 => 0x4d75656c756f7301030402011b030c060709, + 5936 => 0x4f6d6f746f6e6f7301020102031b0709060809, + 5937 => 0x54696e7a68696d010702031d1111070708, + 5938 => 0x47687564616e01020f03021d0a0c020609, + 5939 => 0x6674696b2050656e01030301041e0f0d070809, + 5940 => 0x4b6161686b617501080302060723030f03070a, + 5941 => 0x4b727573646c6f64010e01060803021a060507080b, + 5942 => 0x6c6173204c757301030104270a08020708, + 5943 => 0x4b6f63686b61010a07061405042b0b1105060b, + 5944 => 0x6d75616b204b656901050103050f1e161007080a, + 5945 => 0x4e617473756b6c616b010904031b050a030908, + 5946 => 0x5065706f6b6c7570650106080204030d1d030e03090b, + 5947 => 0x476c696c746c6f766b6c656c010303200a13070c07, + 5948 => 0x4b6964696a62010f0801020304210a0a07060b, + 5949 => 0x4b68756b687501090306180813070608, + 5950 => 0x5461736f70736f706c6f6d750106030e050108210613020c0b, + 5951 => 0x4b617073756c6b6b75740101030105170a12030a09, + 5952 => 0x536973696d01080104030521110b04050a, + 5953 => 0x54696c6e6f6c0108041b0515020607, + 5954 => 0x5461627361747372697301020702080301260305020a0b, + 5955 => 0x4c656c6e656d010903081b1013050608, + 5956 => 0x53616c6e65730107031c070c030607, + 5957 => 0x496e616d7573616e01100223070e020807, + 5958 => 0x4b696b6d75680103060203081d1c0d05060a, + 5959 => 0x5069746973696e75010b0704081f0b10060809, + 5960 => 0x4f6e756d656d6d6f6e01060601020318080f07090a, + 5961 => 0x4b616d7368696b616e01040301080221091003090a, + 5962 => 0x5369737369736e6f72736973010605080201031c0c13070c0b, + 5963 => 0x4e6568686c696d01090b010603260c1202070a, + 5964 => 0x4e61626967750109030201120825021203060b, + 5965 => 0x4b6f6c7570617a01090208010317111205070a, + 5966 => 0x4469646761736761737461010c04010817080d060b09, + 5967 => 0x4b75756e736f756e756101090203230306040a08, + 5968 => 0x44656d736368656e64656e01020b0307011b0505050b0a, + 5969 => 0x416d74616e6e696e616e01011402010306200c0b060a0b, + 5970 => 0x7a6f204765726f676f010e04210311060907, + 5971 => 0x736c656e2042616e64776e01040c01031d0c06050b09, + 5972 => 0x57616d77697761010303020b081305041f0b0f03070d, + 5973 => 0x456e6d7573010f050203270a12070509, + 5974 => 0x416e6f706f6e010d15070b020103200f0a05060c, + 5975 => 0x446572656401060d03201105020508, + 5976 => 0x4d696c6e6e6f796e010c140805031b071203080a, + 5977 => 0x736865205368757469617368010d0216090f060c07, + 5978 => 0x536867757975776973686769010b0324100f020c07, + 5979 => 0x4d616e6d6f6e676d6f6e6701020301061b0b07070b09, + 5980 => 0x51696d73686c696d6e656d010c08020b0e0304240105060b0c, + 5981 => 0x50752727656b27616c706f27010804030c01250f0e030c0a, + 5982 => 0x417a686174690102030402011f020b05060a, + 5983 => 0x44756e67696e6d756e010f010426020f050908, + 5984 => 0x416c6d756c70686f6c616c0101030401051c0308050b0a, + 5985 => 0x4d69726b65726e6b65726e010d0114080e030b07, + 5986 => 0x6e65722d4b7772697267686f010305060f190509020c09, + 5987 => 0x596d696e68756e20496e6f6e011006020103041f050b060c0b, + 5988 => 0x5374656d6d696e74696e010508010f030e1e0b12070a0b, + 5989 => 0x4e75727369756b010903081e1b07050708, + 5990 => 0x55696c6920556b010308021d0b12040708, + 5991 => 0x50656d74697370656d0106010802210d0b050909, + 5992 => 0x48616d276168010b03010602230d0605060a, + 5993 => 0x5370756b67656b010e0f020803230f1407070a, + 5994 => 0x5369736e616b73706f6b01080401020703200508070a0b, + 5995 => 0x5379756e64756d01020b0103250e0d050709, + 5996 => 0x6c656e672d59696e67010a0208210a15030908, + 5997 => 0x497365736570616e01090203060f040110140c0c03080d, + 5998 => 0x596c696e79756e79756e010f08030b021d0812050a0a, + 5999 => 0x416b75747574616e010f040118070a030808, + 6000 => 0x496b616d6f62010e040302190910030609, + 6001 => 0x5375727a6e616c7a657201100503021d070a060a09, + 6002 => 0x4c69656e70616e0109031e1510060707, + 6003 => 0x4161696a7573727562010d040201031a070b02090a, + 6004 => 0x27656c736c61736c6101080520060c060907, + 6005 => 0x4d69756d746170010c020f0e1b0808020709, + 6006 => 0x54756e70656e6e696d706f6d0110011d0e07040c07, + 6007 => 0x4c756973756f73010b1203020c061f0d0a07070b, + 6008 => 0x5365736970656d657401030e01071c0411020909, + 6009 => 0x4d61746c616e010807010408160b0505060a, + 6010 => 0x4b75646775736d756e736f010d02031b0913050b08, + 6011 => 0x4b6174706170010b0115060b0809040609, + 6012 => 0x5a6865616e61657a6875697a0109030421070f040c08, + 6013 => 0x50616e706f010d0a0221030d070508, + 6014 => 0x5a69707a6970010a010304111b080705060a, + 6015 => 0x4f756d2d416e6f6f69756d010b0802011f0a06040b09, + 6016 => 0x497265726e67010102040603071f080605060b, + 6017 => 0x51616772696e67010b02010317090f020709, + 6018 => 0x4c752d4d696c010d010604120302200a0d02060c, + 6019 => 0x4d75706d756d61010d0206210d05050708, + 6020 => 0x54697a70657a6b657a01070302041f0b12070909, + 6021 => 0x506f6c2d69772d556c706f6c010f0604011c0805030c09, + 6022 => 0x27656d736e6527010b020304200c15040709, + 6023 => 0x536d7573736d6501060601230f05020708, + 6024 => 0x5369616c6c616d010e03050806011f0f0e06070b, + 6025 => 0x546975742d4b696d74697401030203011e0315050b09, + 6026 => 0x756e204b616e6d756b6f696e010603020107240812040c0a, + 6027 => 0x4f646f6b20496d6f676f67010b04020e01030621090e070b0c, + 6028 => 0x456e6e756d010a0225080d020507, + 6029 => 0x4b616e65696b617572617901040403010802110912030b0b, + 6030 => 0x4b65756e6f6501041402012f0d05020609, + 6031 => 0x416e2d416e73616e73616d01040413130e060b07, + 6032 => 0x4d6c69706e6c7570011003010227010a020809, + 6033 => 0x456c657368657a686573680106010607031e0e05050b0a, + 6034 => 0x4d616b756b6d6973010c01030e210715020809, + 6035 => 0x79696d204d75706e756b010f0f0308070201240709030a0c, + 6036 => 0x506961776e7773776d010c03021e0615020908, + 6037 => 0x757a682d55776967657001040719130a020a07, + 6038 => 0x58656e2d6b656e2d47756e010a010803210b14020b09, + 6039 => 0x4775766179010a020306280213060509, + 6040 => 0x4c6165776d6169010a0102070504032b0b1003070c, + 6041 => 0x41756b65697401090706180d08060608, + 6042 => 0x4c75746b65797373656b010f06030102081d050d030a0b, + 6043 => 0x536865696d01060226070d030507, + 6044 => 0x436c69637a65620103010216050d060708, + 6045 => 0x4d6f71756e6d756d73756e010a0b210b14030b07, + 6046 => 0x556b6f7320616b204f6b010501230f0c050a07, + 6047 => 0x4b616c6e6b77204c6f010a0604030f210b0903090a, + 6048 => 0x436865746c6562010b0302140418050906070a, + 6049 => 0x75772d5579010c070103190910050509, + 6050 => 0x4c6175747469616d0107020804011a060704080a, + 6051 => 0x546c696e746c696e6d616e0110040102031f0c15040b0a, + 6052 => 0x4e756d656d01020403011e0a0d060509, + 6053 => 0x4c6f6c6f206e612050656d690103050b0222080c070c09, + 6054 => 0x5469697370616170010b0f0103050828060607080b, + 6055 => 0x696c2d45726f756c6572010f0f210415040a07, + 6056 => 0x53706f736d610106060e0325130d030609, + 6057 => 0x43687574656c790103030605011c0d0907070a, + 6058 => 0x556e6d756d204172010202031e0c12040808, + 6059 => 0x7370757a204e6f786e757a680106081601020e1e0215060c0b, + 6060 => 0x4d7573696e69010101060203220a1003060a, + 6061 => 0x54696e73656e0107012a110d050607, + 6062 => 0x546970736869736b65736b650107020103200808050c09, + 6063 => 0x487568696e7465680101070824140f020808, + 6064 => 0x6e65796d2d456b68656b01090302011406261109050a0b, + 6065 => 0x496c616e20756d20496e756e010203041412270f05060c0a, + 6066 => 0x43686575736c616a6e616f74010410021c1113060c08, + 6067 => 0x54656c70746574010301240215030707, + 6068 => 0x5562616c756b756c7562756e010a0207040323120a020c0a, + 6069 => 0x506f737364656273637574010703051b0815050b08, + 6070 => 0x4c696965656b6d75696970010a04091b0f0b050b08, + 6071 => 0x477777676964776777670105021c0511040a07, + 6072 => 0x5371696d7367616e7371696d01080408030116090c060c0a, + 6073 => 0x4b696c6b696c01010402050301061c111402060c, + 6074 => 0x457474756b65010503190f0a050607, + 6075 => 0x536e697a73686b69736d697301070302011b0a11050c09, + 6076 => 0x6c75204d6f6c6c6f70010e021e0815030907, + 6077 => 0x53696c6b756c7320556c7301100103150f0a060b08, + 6078 => 0x5363686f757265797a6f6101100b2b0f05040b07, + 6079 => 0x4b75696c6d696f6b010c021d0210060807, + 6080 => 0x4168616b656d6f6b010503071c1105020808, + 6081 => 0x5a68696b756c7275640103070801021c160904090a, + 6082 => 0x536f75706d6f7573736f75700103060b01200e06040c09, + 6083 => 0x4469756469757a736f6901090304020621050a070a0a, + 6084 => 0x5075726d736172010d051d1307060707, + 6085 => 0x4f6979752d566976010c010319020d050808, + 6086 => 0x5368756d73686f6e6b756b7501010302011b0b14060c09, + 6087 => 0x556c70616c616c616c010c01032c0412020908, + 6088 => 0x536167736f74616d776e010905010d08070319160e060a0c, + 6089 => 0x50616d6b756d2d4e756e670109080206280c08040b09, + 6090 => 0x4c616e6c656d6c6f6e0110011d1213030907, + 6091 => 0x4c75726e75727061726c6972270b150326010d070c08, + 6092 => 0x536761676d6164736b6f6d010d05220d05040b07, + 6093 => 0x5075752d70612d416d6901040f06011204031d020d040a0c, + 6094 => 0x5a68617a7a68657a680110040207031d031104090a, + 6095 => 0x4d756e656e6b756e010d07191108060807, + 6096 => 0x4c6f6c6b6174204b617401020e0302170a11020a09, + 6097 => 0x536869647368696d677574010b0f02031a1108020b09, + 6098 => 0x50697368697a68626173010a0307021e0907020a09, + 6099 => 0x4d75696d6c75716e676972010f040323050a020b08, + 6100 => 0x50696c73616c010b02010e25020f070609, + 6101 => 0x50696e6d656e6d696d0109020803010b1f0e1306090b, + 6102 => 0x4d72616d73756e736c7573010e06040320040b050b09, + 6103 => 0x5573756368616401080203040107220f0d07070b, + 6104 => 0x4f6e7465696d65696e010c05080f030206220c0e05090c, + 6105 => 0x416c776f6c736f6c62010f0304220209040908, + 6106 => 0x4d696d736d656d0101030623190d050708, + 6107 => 0x526f6e697001090323120f070507, + 6108 => 0x47656a6461770104030104061f100702060a, + 6109 => 0x546f6e696d0109020301181210020509, + 6110 => 0x4c75746b616d6c616c74616b010501211014030c07, + 6111 => 0x5269626469736c657201010208200c0e040908, + 6112 => 0x556c75747475700108071d200c070707, + 6113 => 0x53686973686f6e010506011d1209020708, + 6114 => 0x4b696c6d6f726c6f72010401081a0414020908, + 6115 => 0x5365756d6469676b65756701050203071e0c15030b09, + 6116 => 0x5570656e6f6e0102040701130522130903060b, + 6117 => 0x506f656c7069706d697001090201150d10070a08, + 6118 => 0x4e6f6b68616b0103010a140302081f0c0902060c, + 6119 => 0x4e656c6b206e6f6c204b756c01051003240f15060c08, + 6120 => 0x536e697362616b010705241107050707, + 6121 => 0x276f61204d6f756b6f6127010b040301180d0c040b09, + 6122 => 0x52756d736f6b6c656c01030102030a20050506090a, + 6123 => 0x50696d786b756d010806080401140b0e02070a, + 6124 => 0x4c697373616e280f040312210914050609, + 6125 => 0x53746368616d010c02080328040d030609, + 6126 => 0x54756e68756e74756e686170010706150102113c150c070c0b, + 6127 => 0x4d757765777579687579010c020e03060708220c09020a0c, + 6128 => 0x536d75746d6f6d01100103260f0e070708, + 6129 => 0x4e756c756c010f0b040310010626050d03050c, + 6130 => 0x54696c2d4d69720103010d0206270b1006070a, + 6131 => 0x576965617a776175757a0104010205160409070a09, + 6132 => 0x4970736920546901090806020321070a06070a, + 6133 => 0x4479697264796167010a01021e0806070808, + 6134 => 0x4368796164010106180411040507, + 6135 => 0x536b6573736b657368010b01190607050907, + 6136 => 0x536f747075010502200b06040507, + 6137 => 0x546c656b746f686f68010401050a0302270c0c06090b, + 6138 => 0x536869707a697a64757970010e02050301220609020b0a, + 6139 => 0x5369736d6170010d02220305060607, + 6140 => 0x476567736265676567010303021b0f0d030908, + 6141 => 0x4b6c69656e010e03011e0e0a060508, + 6142 => 0x4e696b6769636870796974010a060c0203170e15020b0a, + 6143 => 0x536e696e6769677362757a010f031a0410050b07, + 6144 => 0x53756c736c616c736c617301060c04230a06060b08, + 6145 => 0x41796e75777375777301090f140103021d091403090b, + 6146 => 0x53616d736d616e0105032b030a050707, + 6147 => 0x5a68756c747368656c6e010c020301041a0513020a0a, + 6148 => 0x4c6f657069656b0110010d0304200b0d03070a, + 6149 => 0x4e756e676f6e646f6e6d696d010108050f1412090f040c0a, + 6150 => 0x6f6d204b756e6b6f6d756e01020208240c06050b08, + 6151 => 0x4f70616e6f7365730104040106200f0f060809, + 6152 => 0x6174205572696d756c75720109060203080701200b12030b0c, + 6153 => 0x5065736874617368010f030715050c020808, + 6154 => 0x5363686174736368617075010e0b011e0b0c070b08, + 6155 => 0x67686f6e2059656e010107021a1313050808, + 6156 => 0x4879796e6120496d0101040a03190c12070809, + 6157 => 0x45627573756d7572616201050801020b03061b0511020a0c, + 6158 => 0x54756b756c010a010b14060e041f0a0605050c, + 6159 => 0x4b696e67696e010c030802291014070609, + 6160 => 0x456b75687570010a0203040120051305060a, + 6161 => 0x446f6b64756b01080f0302010e16041306060b, + 6162 => 0x496d70756d617370697001040701020527020c020a0a, + 6163 => 0x506f6d736d6f6e67736f6e670106080104180e11040c09, + 6164 => 0x5572757a687571697801090301260c13060908, + 6165 => 0x616b20596b01030405020306230f0806050b, + 6166 => 0x5374696e736d61706e697301020203160c14030b08, + 6167 => 0x416c6979697969766976756c01050e0122080d060c08, + 6168 => 0x4e69746e696b0105061a0914040607, + 6169 => 0x6b6f2d4d6f6e6b616d6b756d0106030121030e060c08, + 6170 => 0x456b75697570656b010c080b1f0b05050808, + 6171 => 0x546f796e6771697772010b0f011b0507020908, + 6172 => 0x5161796574756b65010c0125110c050807, + 6173 => 0x4c757a686c697a680109051b040b040807, + 6174 => 0x496e67616b696e670108030601240a0e060809, + 6175 => 0x506972746b6f726b686f726b010e040b20030b050c08, + 6176 => 0x537564646c656e01090e0802030b240d1106070b, + 6177 => 0x4d612d54696e010b03040f1e0c13020609, + 6178 => 0x4b696c626b696c7371696c6b01070f290d15050c07, + 6179 => 0x44696e6b656e64696e7a656d010e01280515020c07, + 6180 => 0x27696d6d657770656d010c0502072a1b10050909, + 6181 => 0x4e616c74616c6e010d030208190609050709, + 6182 => 0x556e7573656d010501031d0515070608, + 6183 => 0x4e6f75707465746b616f6e010e050204011d0d06070b0a, + 6184 => 0x5a68757a6861640107010406020324020d06070b, + 6185 => 0x5573616c616c756d756c01100302041a0212030a09, + 6186 => 0x4e696d686c6170686c6f68010203040107080f210905030b0c, + 6187 => 0x5461736867757474756b010b010b0222100a060a09, + 6188 => 0x496e69746972010e0b0804031c081007060a, + 6189 => 0x45706174656b6570656c010c010304021a0b0c020a0a, + 6190 => 0x4b6f207a686f6d20416e7375010501020323030a040c09, + 6191 => 0x54636869706f7a0105020f01031e060b06070a, + 6192 => 0x53656e7369010f03052d1208030508, + 6193 => 0x6e656c6e20576c6e6c616c73010f030401160a0d040c09, + 6194 => 0x4f6e6570756b010e02141a050b060608, + 6195 => 0x4c656c616c656d6574696e010d08160b14060b07, + 6196 => 0x53686d756e70696e290a0201060d0803180c0d05080c, + 6197 => 0x536368696e7372696d01010803011f0d10050909, + 6198 => 0x507573756e65010602060b290910060609, + 6199 => 0x4c757a6c65730106032b040a030607, + 6200 => 0x5364696d6d6967736d756701070402060322090f070b0a, + 6201 => 0x5065657270656572746f7201060801250815070b08, + 6202 => 0x50756e6c656e010201250a0b070607, + 6203 => 0x4b6875656e6520490101041102010b03240e0b05080c, + 6204 => 0x4d6c696b6c696e6c6f6c010203221415070a07, + 6205 => 0x4d756b6d75706570650102020712031f121503090a, + 6206 => 0x77752720496e616d01100e081d090c050808, + 6207 => 0x53696d696d69010104060d011b020703060a, + 6208 => 0x416e6f772d50616b6f77010f040503010227030d070a0b, + 6209 => 0x50756e6d6f706e616574010603012a0910050a08, + 6210 => 0x4e72696c75746f6b0105031c0414020807, + 6211 => 0x4e697a6769737a6f6d657a010a0b0802041d0108030b0a, + 6212 => 0x4d756b20416b0110160104080302210c0a07060c, + 6213 => 0x6e75656b204b757301100704030226080c03080a, + 6214 => 0x4174736368776962776962010a0402060329100f070b0a, + 6215 => 0x48757a6668757701020320070f040707, + 6216 => 0x4c757769736875010d03020108230a0c06070a, + 6217 => 0x55737369736d6173696b010703181811020a07, + 6218 => 0x76696e2059656e6b6f6e010f010205220c06070a09, + 6219 => 0x4c75616c6b616901030801041d0e14070709, + 6220 => 0x547573636801020201041b060a020509, + 6221 => 0x446f6b68716567680105030102280411040809, + 6222 => 0x4976696d696c61760106040108240d0e050809, + 6223 => 0x7573204c696c6c696c6c616e010a060e1c0e14070c08, + 6224 => 0x456b65736f6f204b657301050f0104241e0e060a09, + 6225 => 0x47757463686f7463686f6775010404031c1114050c08, + 6226 => 0x5375736c757373756b70756b010e0801200912070c08, + 6227 => 0x496c6e6d616c01080d061401240b1207060a, + 6228 => 0x53756e796173796173010603200205040907, + 6229 => 0x4d756b696b65010a09030d0f040624070707060c, + 6230 => 0x556b20747573204b656b010f0104071e0909030a09, + 6231 => 0x74756820536e61706e756e010802010304160c15050b0a, + 6232 => 0x646973204e756e61010b14030802011d040703080b, + 6233 => 0x4e657361656c756c747501070322090b020a07, + 6234 => 0x5368657373656d726f74010706030205231105050a0a, + 6235 => 0x50696d6d756e68756b0104020103250c11030909, + 6236 => 0x6c656c204d69656d6d696f70010e030504180412030c09, + 6237 => 0x4b757365732d4f6e6d6f73010101030b18060f040b09, + 6238 => 0x4e69757075617475616e010e0f01230210020a08, + 6239 => 0x4f6d20696e20556e010d0603260215030808, + 6240 => 0x556d696e756d6c696e677501050304290311040b08, + 6241 => 0x7672696e2d516c696967010b010803200c0b050a09, + 6242 => 0x547570757565706c61010f040b050323020b03090a, + 6243 => 0x48616e686f6e6f6d01020615100a050807, + 6244 => 0x4f61206f6b204573656b616b01100301140a11020c08, + 6245 => 0x496b6973616e010902030f0128011004060a, + 6246 => 0x4c696c27696c616c01030403060115130e04080a, + 6247 => 0x4f7369746f730110021f0509020607, + 6248 => 0x53756e6e6f6e01090e070114230f0703060a, + 6249 => 0x4461646d6f7201101503060724050a04060a, + 6250 => 0x4e756e70616e20556d616e010203020801190711050b0a, + 6251 => 0x4b696e736f6e74656e01030801030420011205090a, + 6252 => 0x4979737369776d010402040308011e0b0d07070b, + 6253 => 0x53756e67756e67010102030604290a1504070a, + 6254 => 0x44756e616e010701020b031b060803050a, + 6255 => 0x50696e6774696d6e616e67010d040301021b0814040b0a, + 6256 => 0x416d2d417368010202040b22090d070609, + 6257 => 0x4d6f736b75736e75736e6f73010a05080602030f251307030c0c, + 6258 => 0x4d616e6779756e010a040103061e090906070a, + 6259 => 0x456e70656e67010508030601021d0f0702060b, + 6260 => 0x6d756d205075697474756b010805060a0402031e0505050b0c, + 6261 => 0x556b7570746173616c01050508010403200c0e02090b, + 6262 => 0x4b61757a697a680107011c0d07040707, + 6263 => 0x5065656c6f737065656c010302031f0208050a08, + 6264 => 0x5a617377657a70696b77657a0109031004200113030c09, + 6265 => 0x496c7574616b010a0501210f10020608, + 6266 => 0x4e69796d61770109030108061e0f0d07060a, + 6267 => 0x536f73736f73736e6f73010803210715040a07, + 6268 => 0x5361736174010a06021f0706020508, + 6269 => 0x4d6974696e010a08032a0109050508, + 6270 => 0x4b616e696e6e69010e0d03200208040708, + 6271 => 0x4e752d4d756b656b6e7501010301220607070a08, + 6272 => 0x42656b73656b716f730107040226020f060908, + 6273 => 0x4d6f6d656e010608180b10050507, + 6274 => 0x416d20416d616d68756e010a06040f1f0b0b070a09, + 6275 => 0x49727375726b75726b010c070f0b1506031c061005090c, + 6276 => 0x4b696e736c6973706973010303080401190d0e020a0a, + 6277 => 0x4d6172736b616c736d696c73010f04010602031d0f12040c0b, + 6278 => 0x496e696c616768696201020115170e040907, + 6279 => 0x4b756c2d50756c74756c7301090208030501110915020b0b, + 6280 => 0x4d75706f6c010c01170a0c020507, + 6281 => 0x4d7572706f6f6b736a756b010e040201220706040b09, + 6282 => 0x4b6f6b6b6f6c6b656e010a0b0304210412070909, + 6283 => 0x277570636827752763682769010e0304210d06070c08, + 6284 => 0x58756e77756e0108060104250414040609, + 6285 => 0x4a6172756c6e6a6172010d06012a1114040908, + 6286 => 0x4472656e67726f6e6701020304061e0506070909, + 6287 => 0x546f746368626f74636801090c030401021f0608030a0b, + 6288 => 0x486568756e010b0302010b270a0c03050a, + 6289 => 0x4c616e6c616d6b72696e01070f0e1d0b14020a08, + 6290 => 0x5a68616e746f6d010201031e0a11020708, + 6291 => 0x4e616b68617401010302011427060906060a, + 6292 => 0x436870696e636870756d0104081a0d09040a07, + 6293 => 0x5475697061756d6d697573010d0319060a070b07, + 6294 => 0x42656e656d6d756e01060306231012050808, + 6295 => 0x55766d7275760105060504120121100504060b, + 6296 => 0x5065696b6b75656b0102040120170c030808, + 6297 => 0x5061687a656e757a7a650106070401200407050a09, + 6298 => 0x4c6f6c706973616c010f0102160c07060808, + 6299 => 0x4d6a65732050697301100304251507020808, + 6300 => 0x4d756b6e69702d4b7569730109020f010604220208070b0b, + 6301 => 0x456c616c6e756c6d756c6d010d061e0911040b07, + 6302 => 0x4c75696c756968616901100203211208050908, + 6303 => 0x4e757320536e6974736b75010c030208150e15050b09, + 6304 => 0x4f6e7a6f6e010a010308061d0e0d04050a, + 6305 => 0x4c756d61746f6c756c6101010e06030102161309020a0b, + 6306 => 0x4b6f6b7a68617301020106150a11030708, + 6307 => 0x426179736861716e72697368010602010403220506060c0a, + 6308 => 0x4e656e6b757474696573010301021c0f13070a08, + 6309 => 0x4b616c6b756c6b01090208010322091406070a, + 6310 => 0x536f736f204b6f6b6f010c07020122090a070909, + 6311 => 0x47756765766f0109020a05031a0d1407060a, + 6312 => 0x4b616464756e010f07030d160a07050609, + 6313 => 0x4761736d61746761670109080206030c051a070504090c, + 6314 => 0x5069657469656b706965010c02110103210e0d030a0a, + 6315 => 0x556d617a697a6f74657a01050b140428030c040a09, + 6316 => 0x476c697a68010d0118110a040507, + 6317 => 0x536f73736f73736f730106020803130d15050909, + 6318 => 0x5a696e7369010901200605050507, + 6319 => 0x486f6b6875730108020317050e050608, + 6320 => 0x53696e74657473696e010b030104061f0b0d02090a, + 6321 => 0x4c75702d50696c6c616e010607031c010e060a08, + 6322 => 0x696c205368617201010310011f0613070709, + 6323 => 0x696c204170756b01060102031d120d030709, + 6324 => 0x4368697567010f030408010b07021f0c0d02050d, + 6325 => 0x746f6c20556d616c0108101f050f030807, + 6326 => 0x54696e75746979010d02140601031f0b1204070b, + 6327 => 0x53706f6b6501050103021d0513040509, + 6328 => 0x4d65696c736975010401020306120c0e03070a, + 6329 => 0x7579204d75796b75776e6f79010501080302071e0613070c0b, + 6330 => 0x4972697475636570010203041d0f07070808, + 6331 => 0x4d696b6d696b6d696b01070301220509030908, + 6332 => 0x526573736f6b73726f6d010903191007060a07, + 6333 => 0x4775736c656b010504160715060607, + 6334 => 0x706f7320576f6f730102030e010226070b02080a, + 6335 => 0x4b6f6f7a746f7a010c03041b0809050708, + 6336 => 0x73612d4e616d656e610107060304021d0d0806090a, + 6337 => 0x486127756c652775010911070c060429101003080b, + 6338 => 0x496b7570696e7574696c0103030806220611050a09, + 6339 => 0x4b616e6b616e666b6f6b01030102080e03041a0f0a050a0c, + 6340 => 0x54656e6d6572707475686f6d01100605201710020c08, + 6341 => 0x696c2d496d696b01070502011a0613030709, + 6342 => 0x73692d4d616e692d4e69746901100f02230f0e050c08, + 6343 => 0x4472756e62696d0107040b030602260e0806070b, + 6344 => 0x5475727265726c6574010d04020f1a090f060909, + 6345 => 0x457273756c6b010f06030b021b061504060a, + 6346 => 0x536b6f73736e750109010e0308170b0602070a, + 6347 => 0x416d6c656d6c756d0105040301230307030809, + 6348 => 0x4c696d73696e6e756e67010f030b050102151a0509070a0c, + 6349 => 0x5365736573617a010d0821040d020707, + 6350 => 0x5377756b6e7573010f0605080302200e0b03070b, + 6351 => 0x5a6865736863686f7a6775010f040203051e0a0e030b0a, + 6352 => 0x516f7372656b6b686962010a0d031d0506030a08, + 6353 => 0x53616d736974746f6f740106030104240b0b020a09, + 6354 => 0x546f6b6e69736d696b6e756b010c030c1f1015040c08, + 6355 => 0x27756c204c756c6e010b04031c0411060808, + 6356 => 0x4b756d706972010301250e0f020607, + 6357 => 0x4c756e6f6d6e756e0106080602130a0e030809, + 6358 => 0x6d7574204e756e73686f700109011c0713030b07, + 6359 => 0x536f6c6c756c73736f6c74650101031b060d020c07, + 6360 => 0x4d6161617101080608110f01031e080c07050c, + 6361 => 0x4e696d61756d616e696d747501030108031b0d0e070c09, + 6362 => 0x5868756d786c616e01100320080d050807, + 6363 => 0x54696d646f67736775640105040603020107190708060a0c, + 6364 => 0x50756d6c756d73756e010c020306130123060e03090b, + 6365 => 0x4b6965727069657277756801040324010f070b07, + 6366 => 0x50616b6c6f73010706261115020607, + 6367 => 0x736f732047756d204b616b010d050304021e070e070b0a, + 6368 => 0x4c6f736c656c610105070103240414040709, + 6369 => 0x4469656573646f6d010802010804030f1a030d03080c, + 6370 => 0x436870617468757068617401020201031d0706060b09, + 6371 => 0x4c696f6b65756b204d696f010c0106030724060d030b0a, + 6372 => 0x6e79726e2d4e7572010d020301200d05030809, + 6373 => 0x73616e204e616e010d0301190712050708, + 6374 => 0x496b756d696b6f6c6f6d01080b0403230d10020a09, + 6375 => 0x47616d686f6e01020b021d0e14060608, + 6376 => 0x6e67756e2054616d010a060908040326021403080b, + 6377 => 0x54616e6e6974010a03040501062a041206060b, + 6378 => 0x5375696c69616c6c75616d01030103022a0713050b09, + 6379 => 0x55626b6875756d01050e01030623090a06070a, + 6380 => 0x4c61656e7065616d6e616f010c03230207070b07, + 6381 => 0x537571626f790103050221030b040608, + 6382 => 0x4b657a6765702d4d61730105060103250b12020a09, + 6383 => 0x4368757362616b746f6b010c03280307020a07, + 6384 => 0x5374756b7376696a6b6501020702010304240509060a0b, + 6385 => 0x556d657065746570010a03220508050807, + 6386 => 0x556e6e756d70696d010a020401030e20031505080b, + 6387 => 0x4b756b27756b6b756b010603010b1004081b100d04090c, + 6388 => 0x50756d6e696d6d61706d75740105031c0f0d030c07, + 6389 => 0x54756e6e610103010208051d070d06050a, + 6390 => 0x54616c746574746c75740108020103240811040a09, + 6391 => 0x4f6b6f6b6f6b6574010f120201040315101302080b, + 6392 => 0x496e696e6e69011002080110070c23021507060c, + 6393 => 0x53686d656e65740109080301160d08030709, + 6394 => 0x5265736f7972676977730106031e040b070a07, + 6395 => 0x556e7570756e617075746170010a04020a0318070e050c0a, + 6396 => 0x536e616d6e756e7501020b150206031a0a1506080b, + 6397 => 0x4967676167697363680110040102031e0d0802090a, + 6398 => 0x516c616d6e67616b010301031a0706030808, + 6399 => 0x55726e74756c6b75726e010d020605030124060c050a0b, + 6400 => 0x4e656e6e656e616a010103041c0d07070808, + 6401 => 0x4970756d61770104021505031e0a1005060a, + 6402 => 0x757420556e696b6f6b756b010a01140220140f060b09, + 6403 => 0x556871616e69697a010e020806031c080f03080a, + 6404 => 0x4974616b616b616b756b6f6e0108040301200611070c09, + 6405 => 0x546368756a6973696c75010c06020401150b10030a0a, + 6406 => 0x4b6f6b7374696b010f0402071a1012020709, + 6407 => 0x556c7573616d011003110d13050607, + 6408 => 0x54617a756e757065727a010e010d04260910070a09, + 6409 => 0x4d61756d777570777570010e02120327040b050a09, + 6410 => 0x506f6d736b7570746f6c010a030226170b040a08, + 6411 => 0x4d61646f72787875786d6f6b010608070603220d0d060c0a, + 6412 => 0x4e756b70696d2d4e6974010b03020801180714030a0a, + 6413 => 0x4b656d6b65736d6f6c010f05040221090c030909, + 6414 => 0x497570206b756b205465010c0722110f030a07, + 6415 => 0x4d696d6d6f0105020409062e161002050a, + 6416 => 0x4d6f6920536f696d6d6f690102081c0a12070b07, + 6417 => 0x416e73656d010504050201210f0507050a, + 6418 => 0x4b6f7961726f01090503070f022b030a07060b, + 6419 => 0x4e696573616974696f73010f030418070e020a08, + 6420 => 0x4e6f6e6e6f6f746e6f70010b0608070304220c14030a0b, + 6421 => 0x4f65746f746f010d031e0e0a050607, + 6422 => 0x67752051616b010a060201040529010f03060b, + 6423 => 0x556b64616b205368756b6f6b010e0302010e0f2d040e060c0b, + 6424 => 0x496b616b2d49736d696b010e050104140e08050a09, + 6425 => 0x4d6f736c75010c0102030806240a1003050b, + 6426 => 0x496c756e6e776f736c657301010304020108180914020b0b, + 6427 => 0x52777767686f6a01040102031f030c070709, + 6428 => 0x4b696e6c656e010503080e1a0713060609, + 6429 => 0x4d6f72756d6f010b020b03010528030805060b, + 6430 => 0x456e656e617368696b0110030127030c070908, + 6431 => 0x4c6f6b706f6f6c010c07011b030a070708, + 6432 => 0x416c75757061616e756e010b04031c1711060a08, + 6433 => 0x53686e696c6c656c01030817060f030807, + 6434 => 0x4174696d75746f73010f050f03260c07030809, + 6435 => 0x507565737365736d65730103040301150702200407060a0c, + 6436 => 0x53696b6b656b6e676f0103040f07031f0c1503090a, + 6437 => 0x4d696c74616c74010e060302270105070709, + 6438 => 0x53656b6b6973010a030424130b050608, + 6439 => 0x556b756c736170756b010d0503061a080d020909, + 6440 => 0x4172796979010808180c0d050507, + 6441 => 0x4b68656b68616e6f010a081a0906040807, + 6442 => 0x4e75676e616e011010050117080f030609, + 6443 => 0x42697369676901060b1303040f2a0e0d02060b, + 6444 => 0x53776f6d736d6f7a6b6f7a01040302260d12070b08, + 6445 => 0x456c65706570010d010305170505050609, + 6446 => 0x7a6520446f6e010f020703231315070609, + 6447 => 0x4e617a686b65690102010402180513070709, + 6448 => 0x4c756f746561010401230a0d020607, + 6449 => 0x476f7467656e676f6b6f67010107210810040b07, + 6450 => 0x4b6f6e74696e6f77010f0408171105040808, + 6451 => 0x496b6968756d010b061a1010030607, + 6452 => 0x4f72616e616e010206251107050607, + 6453 => 0x4164757375777764010710060d1e0d08040809, + 6454 => 0x597079736f6e6573656d656d01070403020b05011f0507040c0c, + 6455 => 0x4d696d707570010403020418090f050609, + 6456 => 0x5375616c756973010c08010302051a070606070b, + 6457 => 0x506f6e6d616d61686f6e0110011b0a14020a07, + 6458 => 0x736d757a682042617a010505030b220e06030909, + 6459 => 0x74612051756b616b6101090317080f020907, + 6460 => 0x73676168205465747367617701090b040307210311040c0a, + 6461 => 0x54757373696c73696c73756c010b030815011c1810050c0a, + 6462 => 0x50756d6d656d010f0b23090d030607, + 6463 => 0x4b696b69746f6c656d72756e010307081b0a11060c08, + 6464 => 0x4e6f736e65010706011e1006060508, + 6465 => 0x5965776971697177797577010101020314040e020b09, + 6466 => 0x4d756c6d756c6b697373756d0103080302290415050c09, + 6467 => 0x41746161746174616b010d01071d0a05040908, + 6468 => 0x4b6f6d6d6f6e6d6f6e010f0b071203021d0a0c04090b, + 6469 => 0x4f67677572204f67657465740105030108120d09020c09, + 6470 => 0x4b61636873657a6173010604030119050d060909, + 6471 => 0x5362696d736973736b6869010e060403021d0510050b0a, + 6472 => 0x4b69656b6b75616b010f031c0712050807, + 6473 => 0x53756564697573010b020601081b0a1303070a, + 6474 => 0x486c61686b616b6d6c756d010f030401220d0d030b09, + 6475 => 0x536e696e736c61010503011e050b020708, + 6476 => 0x556861616b656e7574010b0301171811070908, + 6477 => 0x496c6c6974696c616e6e6f70011002210212020c07, + 6478 => 0x4b756c746b756c7401030104110217041506080a, + 6479 => 0x556c616c6a6c6f6c70010d060104030f03090704090b, + 6480 => 0x4e616e77756d77756d010f0208061f0907030909, + 6481 => 0x5374656e2d6c656d2d4e756e010803060102170a0b040c0a, + 6482 => 0x626f20596f6861686f6d690106040702210413060b09, + 6483 => 0x4b6173205375736d6f7301030301061c1612020a09, + 6484 => 0x4c617371697301040b03011a0707060609, + 6485 => 0x4b6f6e676b75010f060105081c090a02060a, + 6486 => 0x4e75726d756d011007210413070607, + 6487 => 0x57696c6f6f6e0101060208160a0d030609, + 6488 => 0x436869646368696c63686964010a020a191208070c08, + 6489 => 0x5372756e676d6f6e670102030102220507030909, + 6490 => 0x45206475204461676101040301061224050b05090a, + 6491 => 0x55706c7568276f6c687568010e020103190212050b09, + 6492 => 0x546f686f6d6f0104030401190a09060609, + 6493 => 0x536e756b6974010402031b0e05040608, + 6494 => 0x4475617a680107041f1011030507, + 6495 => 0x4f6c6c6f6c757070696d010c040e210d0e060a08, + 6496 => 0x5a686f756874697501030304240d0a020808, + 6497 => 0x4b756d696e74616c696e010b0405030d1e090e050a0a, + 6498 => 0x546f7073656b6501010302101d0605070709, + 6499 => 0x557573656e7a6f6e6f75010703080b2a0d12030a09, + 6500 => 0x4e6f6e74696b6e6c756e01050305061a0b13020a09, + 6501 => 0x4e7572756e205165706f6e01060302151211060b08, + 6502 => 0x55736e6f696f6f2075204f73011001250a08060c07, + 6503 => 0x546c697270696e747579010602071e0810050a08, + 6504 => 0x547973697401040304251108050508, + 6505 => 0x55702d6e6f792d5562010401040602150c1007090a, + 6506 => 0x556d61736170756d656e2a0208250409060a07, + 6507 => 0x4e697470616d747574010a061d090c070907, + 6508 => 0x53757a6873757a68010e070106032a030b05080a, + 6509 => 0x53616e6e676c616e01070104061a0607030809, + 6510 => 0x2775686b692770692701031108200f08060908, + 6511 => 0x527527726f6e77616e72756d010101030f290d12070c09, + 6512 => 0x6f74204f6f746f6f7a6f730106010c16060a040b08, + 6513 => 0x54756d6d656e74696e6c616d010c0602030118070a040c0a, + 6514 => 0x55737574756b7570010a0102030518080706080a, + 6515 => 0x546977756b010e0506040119081006050a, + 6516 => 0x4f747363687572617a010902080106031d100706090b, + 6517 => 0x48616870617474616874756e010f031d090f030c07, + 6518 => 0x556d6977756d6977010501200a09050807, + 6519 => 0x4e696e6c656e010d021a0605040607, + 6520 => 0x4b756d27756b61756e69656e010b0402032b0615040c09, + 6521 => 0x496d6e696d7461204d61746101060c010503120c07050c0a, + 6522 => 0x416d6d656d7065746d6901100f0601031e0a11040a0a, + 6523 => 0x6b696820546168010901020307240a0906070a, + 6524 => 0x4f726562756b010b01260914060607, + 6525 => 0x48656e6b696d74756e0103020306160910040909, + 6526 => 0x4d6f736873686501090601041d0905060709, + 6527 => 0x54726f726b696576010a06301912050807, + 6528 => 0x4c61617a6801020301060c1d0c1207050a, + 6529 => 0x4e7565676b656973010201240507030807, + 6530 => 0x546f6b7369737065737369730101070105210211040c09, + 6531 => 0x416a2761616a6c2027616a6d01061627040b070c07, + 6532 => 0x506f6b706f6b7368756b01020704020b011b0d11060a0b, + 6533 => 0x4f6f6b7a6c6f6f776c6977010d080c0104250309050b0a, + 6534 => 0x50696d6b696e736f6e74696e010c020301041e0715050c0a, + 6535 => 0x64657320536564646f74010304080b012b1408070a0a, + 6536 => 0x50656a20536f6a6c746f6a6c01060203280906040c08, + 6537 => 0x48696870726f68010c0b050307011b050804070b, + 6538 => 0x50756e70756e6d6f6e010f0207030e0114121207090b, + 6539 => 0x5a72696d64756d6368656e011002250c0b070b07, + 6540 => 0x50657373656d736f73010303250905060907, + 6541 => 0x4d6f6e6f6e01080601021d0410040509, + 6542 => 0x51696e6e77697101080222060e060707, + 6543 => 0x4e656e6d656e6d616d01020e0203220d09050909, + 6544 => 0x59736d72616c7372696b010f010625130c070a08, + 6545 => 0x45746d656c6b65706b6f6e0102040e031a0c09030b09, + 6546 => 0x5375736d757368011003010408240a0705070a, + 6547 => 0x4e756d2d556c6e6e757001080f0501031e050d020a0a, + 6548 => 0x5375697375697269696e6961010608040312160a0f020c0a, + 6549 => 0x5572626c756c01080304011b0905030609, + 6550 => 0x70756c742d4d6f706d6f70010401040307220f15020b0a, + 6551 => 0x73657a204c617a6173010606080323070d050909, + 6552 => 0x417275727573696c61720108040803220d05030a09, + 6553 => 0x4f756f612d4a75750108040b02031a0f1407080a, + 6554 => 0x6b756b2050656b010f08060322080b040709, + 6555 => 0x4d6161726b69796d010d011f090d020807, + 6556 => 0x516f6e7570010305190814060507, + 6557 => 0x4e756c616c756c010b01071c0906030708, + 6558 => 0x4968616b6974696d616b01100b03010421100d060a0a, + 6559 => 0x4d656c6e6d6f6c756c6d010514030121040a060a09, + 6560 => 0x74617520506975010903231113030707, + 6561 => 0x4e6f7463686f676f626f6c7501080b0102191c0c070c09, + 6562 => 0x53756d696d696e75010601031f130a020808, + 6563 => 0x546f74766974767265790104070f03061e1114020a0a, + 6564 => 0x456d6f74696e696e7570656d010a0f021d1910030c08, + 6565 => 0x596179616b0108010308070c25071406050b, + 6566 => 0x496c697475737570010b15030104290b0c06080a, + 6567 => 0x48756b656e7501100802010318051106060a, + 6568 => 0x4b656f6861656b010d0203190812050708, + 6569 => 0x4e6f756b6c756f6e7475656c010708070305170608030c0a, + 6570 => 0x45204465626f01010804260215060608, + 6571 => 0x497474617264756e697401080f0302170315020a09, + 6572 => 0x416c27205069726b010c06040322090d060809, + 6573 => 0x4c77696c6120756c20456d69010c02230d0d060c07, + 6574 => 0x4479616d7379616d61736801090603240b06030b08, + 6575 => 0x4b657465676b656e010c010603040216070602080b, + 6576 => 0x4c756e2d6e69702d4c69616c010a03040102241515050c0a, + 6577 => 0x556b616d756b616d011008011f0207030808, + 6578 => 0x4e6962756b2b0d031d0a10060507, + 6579 => 0x4b6974737261677372616701040103210c13060b08, + 6580 => 0x6b69204d6968696d696e75010808200b12050b07, + 6581 => 0x50756c746f6c746e6f6c010f031a0811040a07, + 6582 => 0x556b616b6f6c756b616d0101050301200e14020a09, + 6583 => 0x4e6172656368756e0102010e0304081c070e06080b, + 6584 => 0x4d756e6b756e6861616e010503040218060a070a09, + 6585 => 0x506f6b61206173204f6b6e6501080314040a030c07, + 6586 => 0x53616e6970696e70696e010a031b0b0c070a07, + 6587 => 0x74696e2d50696e0110031d0911030707, + 6588 => 0x6b6f2027656d27656d6d6527010a08030406200510020c0a, + 6589 => 0x4b616e6b616e70656e756e0104060f0203211312040b0a, + 6590 => 0x4d7572746f6c670106040d03061d120506070a, + 6591 => 0x456e2d4f6d01090f0207120120080b05050b, + 6592 => 0x4d656c736c656c010802010b041b0a0902070a, + 6593 => 0x5563686167757374616e01060302201e14070a08, + 6594 => 0x4b756a6d63757a69776b010702040801240910060a0a, + 6595 => 0x5275636875736f74010502030104270f0b04080a, + 6596 => 0x536e65676e6f6d736e6164010701031e0c0b030b08, + 6597 => 0x54757a6c757a010f0b080103041b0e1504060b, + 6598 => 0x4b6f6e716c6f6e73726f64010b04230d15060b07, + 6599 => 0x506f7770706175797001020825100b070907, + 6600 => 0x5261726d616d726172010e01031d0f0e020908, + 6601 => 0x4b69706f6d20506f6d6b69010b06231315020b07, + 6602 => 0x496d6f74616d6174010408030b010621110d03080b, + 6603 => 0x4e72696e6c617401010501030b061f040a03070b, + 6604 => 0x52697a696269726901100b1c0d07060807, + 6605 => 0x556e616d7573656d01080708150403011d051304080c, + 6606 => 0x47757a756e77756e010d030601021f010505080a, + 6607 => 0x536869726e010b03190712050507, + 6608 => 0x4164652d45656e72656e010e03040e1b0405050a09, + 6609 => 0x4b75736269696b74756b0110030401240815050a09, + 6610 => 0x416475676f706f7473636801040f031d160b070b08, + 6611 => 0x4b65686e617401100302050121051305060a, + 6612 => 0x42757a686465656b010a01041a0c06040808, + 6613 => 0x55646c65676f6e7567010e0b0408190413070909, + 6614 => 0x496c69696c696c616c010c0302241213060908, + 6615 => 0x4e61796874657974010a0403160814050808, + 6616 => 0x4f6e6f6e677576010a01061d090e050708, + 6617 => 0x4c6f6e6773656d73656d01040f051b0909050a08, + 6618 => 0x4269206d756e204d696d010101020803040f160c07030a0c, + 6619 => 0x4e75756e6501030d1f0509050507, + 6620 => 0x536f7a68747569010801020704080b20010d06070c, + 6621 => 0x4e776e616d6865010b03061e0707060708, + 6622 => 0x4d657a61646f6f205a617a6101100305081d0915030c09, + 6623 => 0x557364757a20446f7a0107060f070304021c071407090c, + 6624 => 0x546f6e75706f010902080105230a1307060a, + 6625 => 0x4d69796b6d69796b706f6f6b010e08201a0b020c07, + 6626 => 0x4964696d617368696d010207060317070a020909, + 6627 => 0x4b757273756e757401020206031b080c070809, + 6628 => 0x4d756f70756f0102050e010216061307060a, + 6629 => 0x5365776f6b7261010e110304020b0a29031006070c, + 6630 => 0x4d6f646e7564010201030e0b24081506060a, + 6631 => 0x51756e756d656e0102071b0f0e070707, + 6632 => 0x4f6d7a6573736f63010e010f1c1410050808, + 6633 => 0x50756e6f20546f6c0101030201061d080b05080a, + 6634 => 0x5a656e6b656d7370656d010b0302061024020b060a0a, + 6635 => 0x4265736573736573737a6875010c0f081b0c15040c08, + 6636 => 0x536967696e6573746974010905010216020b040a09, + 6637 => 0x42617a62617a74616270616d0102030e090605022e0c0c050c0c, + 6638 => 0x496c6e696c6e697273010c030602010d22101004090b, + 6639 => 0x4b696d6b756d6d69010c010602230905030809, + 6640 => 0x54656d692d6b656d2d4e6564010a0405060301021c1415030c0c, + 6641 => 0x57616b77756c6e756c011003021e070a020908, + 6642 => 0x526973706f736c757a6d75730101101c0e06020c07, + 6643 => 0x507573736f6b01090106021c0a0f050609, + 6644 => 0x4a656d7a6c657a6765670105040c01210412030a09, + 6645 => 0x556c63686e6f72010802060e0107031c050e02070c, + 6646 => 0x546f73696974011001211c0f020607, + 6647 => 0x506574204d6f6d6f6b0104030106290907060909, + 6648 => 0x4b616e676e756e7061010401031b0512070908, + 6649 => 0x4e756c6c617361010208061d070f070708, + 6650 => 0x756d20416b610104041c080b040607, + 6651 => 0x546f6b6b756b01100602011b0c11070609, + 6652 => 0x4e6f6c696c616c757461010f0e0301041b0512060a0a, + 6653 => 0x496c62696c6e696c62696c64010907020b03251306020c0a, + 6654 => 0x417061706e696d6d756b616b010f100305201210070c09, + 6655 => 0x4469736e656e010d01030b220a0a030609, + 6656 => 0x57756e6e6f010201040d0323021007050a, + 6657 => 0x4d756c6d6d756c6d0105020f010b030420040c05080c, + 6658 => 0x47696567776175617a68010e07010203220c0c060a0a, + 6659 => 0x54756d6d656d6d616368010303220412070a07, + 6660 => 0x4e6f73746f6c616c010f0e03020118061502080a, + 6661 => 0x48756b6e757368756b010c0828050c040907, + 6662 => 0x536e616e74756e0101050a0304200b0904070a, + 6663 => 0x54656b2044696b6b616401040603270a0a070a08, + 6664 => 0x4b6175746e756168010303110b06070807, + 6665 => 0x4f656d656d747501060f110308190b0705070a, + 6666 => 0x4168697469730103080b0525030f060609, + 6667 => 0x552d6c612d53756d6d656c010109030e01190e10030b0a, + 6668 => 0x27656d692765276527656e01070206200d0c020b08, + 6669 => 0x536170756b7570610107020117100d040808, + 6670 => 0x4c6f6c6f6c656c0106030f01210614050709, + 6671 => 0x757720487568777577010603180c11040907, + 6672 => 0x4577756e756e01090603021a090c060609, + 6673 => 0x536f736c6f6b010a050201030420071407060b, + 6674 => 0x4b696f676b756f010e0b0204050320130503070b, + 6675 => 0x4b6f6f617572726175756d010b010307260b11040b09, + 6676 => 0x4d69736e69010201110e0c050507, + 6677 => 0x4368756368636875636801090f030b20070f020a09, + 6678 => 0x536b6f7a7363617a010806080402011c050502080b, + 6679 => 0x416e6970204d69726b616c01071503080402260b0b070b0b, + 6680 => 0x4b6f73656c6b6f6c0106080b0403011e0f0d02080b, + 6681 => 0x416e62616d01030b14080e23020c02050a, + 6682 => 0x456b6775205a6165010c1503040221030a06080a, + 6683 => 0x4e6f6e736f6e0103051f080c060607, + 6684 => 0x52696c7a6f01031503011d0b06030509, + 6685 => 0x4c6f6e6f746f746f746f6d010301021f0914070b08, + 6686 => 0x756e20536f6e2042616e0105021201070f210908040a0b, + 6687 => 0x4c69756b207520507569010f03161b0609020a08, + 6688 => 0x4d756d70696e010210080b1c0914040609, + 6689 => 0x45736d72656c726570011003250114070907, + 6690 => 0x276f6b686f6c010704030201280e0f05060a, + 6691 => 0x7a75722053757a6974010b03081f0c07030908, + 6692 => 0x4c756b6c6f6b6c61010e0201190b0b070808, + 6693 => 0x53616e756b6f6d6b616e616e010d050308220a06060c09, + 6694 => 0x4e6f6e6f204b75646f6d6f010e0106030502180b0c070b0b, + 6695 => 0x73756b2d50656b6e6c756b010d03020106200210070b0a, + 6696 => 0x696820556c756c010e050402030622141204070b, + 6697 => 0x456e69746574010f071406010320080703060b, + 6698 => 0x4e7568697a686e750103080306290e0a040809, + 6699 => 0x6b616e2d4e69616e7065616b010811010203160611040c0a, + 6700 => 0x4f6a736f6a7373656a6e01020125020e040a07, + 6701 => 0x5461796e6e69796e697901090b050403210a11050a0a, + 6702 => 0x4f73736f646b6f6c6768010e040305210d11070a09, + 6703 => 0x4d69656d6561010c060f07020327040e04060b, + 6704 => 0x4e726f6d6e726f6d010d0a210611060807, + 6705 => 0x6c616e204e696c6b616b010b0f0205160811020a09, + 6706 => 0x4b72616d73726f736b616b0105020403011e1511070b0a, + 6707 => 0x6d7720546f73657475736101080103080423050b040b0a, + 6708 => 0x48696b756d6d696d2d557075010806250706020c07, + 6709 => 0x6f6b205465736e696b696b01080408021d060b050b09, + 6710 => 0x53686f6d6e6f6e756d646f6e010d0402081e1511040c09, + 6711 => 0x5574756420417564010202031d0c11050808, + 6712 => 0x757420556d756d7573010101240506020907, + 6713 => 0x416d6b6c756b65700104081c0613020807, + 6714 => 0x496b6b61737573010f0301200307030708, + 6715 => 0x59656e6767690103030f06041c0b1107060a, + 6716 => 0x62696b2041730104060b01210b05050609, + 6717 => 0x4c6f7a686973656e010d0d021f0608070808, + 6718 => 0x4e616b2070756b20487573010d02031c060c060b08, + 6719 => 0x54756b69746b6f010d060e020b08031a0e0b03070c, + 6720 => 0x4e6f6d6e6161656b6b656e01040f020320010b070b09, + 6721 => 0x4775676b6c75676a6c756b010f08010602230c08040b0a, + 6722 => 0x5370696d72796e0104010305020d250a1407070b, + 6723 => 0x5561752d65692d5369657301070e27070b070b07, + 6724 => 0x4c656c6b696c6e6f6c70010802251414020a07, + 6725 => 0x53746573706f6b6e756e652c1006030f0d200307040b0a, + 6726 => 0x4f6c6e6e756d010f02060104100723100f07060c, + 6727 => 0x4e61726d61726e2d4d6172700102030201240905050c09, + 6728 => 0x496e756e6970010d0204010323010b04060a, + 6729 => 0x536b69656263687562010a030b0104020e11070904090c, + 6730 => 0x5472616d6d756e0108050f23070f040708, + 6731 => 0x54696e2054696e6a616e0102010203041a0d08020a0a, + 6732 => 0x4768756d6768756e6768696e0105010b0208230d09020c0a, + 6733 => 0x6e692d4d617361010102031d0508050708, + 6734 => 0x4c756b72756c6b726f27010a0621040a060a07, + 6735 => 0x4c6f6f73696b6175736875010e06080304210505020b0a, + 6736 => 0x4b756b706f6b01060102190907030608, + 6737 => 0x4e6570696e0101030105040206190e1302050c, + 6738 => 0x4b69796b697970616368010b0f080401210d0c050a0a, + 6739 => 0x547269746b6c6574204e656b010d040b0c080703220905020c0c, + 6740 => 0x6973204f716577010e04030129050c020709, + 6741 => 0x4b656e6b616973010b020d030823050f03070a, + 6742 => 0x53757375617469010f0206011d0309040709, + 6743 => 0x55716f77756c7571010b16190b08020807, + 6744 => 0x53696d6c696e204d656e01060206041f0414030a09, + 6745 => 0x5069746d756e756c70697401050206181007040b08, + 6746 => 0x4e67752d5665727375010f0b02080321180f04090a, + 6747 => 0x4c6f6c746f6c74010613011a0307050708, + 6748 => 0x73617573204e756e75010a0206191505050908, + 6749 => 0x4b75656b7075656e010d04210c0d050807, + 6750 => 0x6d756c2d54616c68756d01070408110b09040a08, + 6751 => 0x4c65732d4b696b6179756b69010d0e1403080115070f020c0b, + 6752 => 0x50616b756b6e69726b0102010204030b1d0e0e06090b, + 6753 => 0x4970616b6f6d0105010302060728040507060b, + 6754 => 0x5364697a737261737573010d030204280414060a09, + 6755 => 0x776f6e2d50616e7501010106050403140f0d05080b, + 6756 => 0x4174696c7573616c0108010d041e0606050809, + 6757 => 0x54756e6974616d69747501080e04030106021d0509070a0c, + 6758 => 0x536c6f6b70756b01030322030c050707, + 6759 => 0x48756e27756d010a01030c0e09050608, + 6760 => 0x5375707364756c010e0508020120031402070a, + 6761 => 0x4d656c6b6f6e010e04200e0e050607, + 6762 => 0x496973206e6920496b61010e0501061e0f0e030a09, + 6763 => 0x5570756c756c697a68756c010e030102050e0d07050b0a, + 6764 => 0x54756e616e2053750104021516031f080806080a, + 6765 => 0x53686b756b6d756b0102020501031d0b1302080a, + 6766 => 0x54697069696e6574696b75010901030205240c12060b0a, + 6767 => 0x4c6f726d2761010b02190507060607, + 6768 => 0x5369696b6b65696e736165010b0b010207031f160f060b0b, + 6769 => 0x536870756201100b01040320080c06050a, + 6770 => 0x456c686d6f6e756c6b0110080603021e0d1005090a, + 6771 => 0x4d756d756d71756e756d756d01030b040506031e0310030c0b, + 6772 => 0x4b72696e6d696e204d72756e010f040301270a15030c09, + 6773 => 0x496869677562756301060418080a030807, + 6774 => 0x4b6f6d6d72696b616d01070501030224140907090a, + 6775 => 0x4b696b6e6574010301200c10040607, + 6776 => 0x4e696e752d6c612d556e696c0103030e0104061f030d020c0b, + 6777 => 0x50756c6c6f6d01030401021e0614020609, + 6778 => 0x456e6173616c01030f03021d0c13060609, + 6779 => 0x4c616b68616c69626f6e65010a01060417040b050b09, + 6780 => 0x48616574686569702d4d7565010106030108231413050c0a, + 6781 => 0x4c61776b69276b69706e696c010f0403020525080e020c0a, + 6782 => 0x5a6c7574626c75730110030104230110020809, + 6783 => 0x49716174696b6f7a010705030602210b0502080a, + 6784 => 0x557365732055707570010602061f0606070908, + 6785 => 0x506f637a757365646f646f01010b03020504241010060b0b, + 6786 => 0x54696f6b6169010a011403240112070609, + 6787 => 0x4f736f6b74616e0101010402240410030709, + 6788 => 0x6d696b20557474616e010d0313021f1610020909, + 6789 => 0x546569656465696f010901030205041b0a0504080b, + 6790 => 0x4b6c616c6b6c756b2d08050c041503181a0a06080b, + 6791 => 0x55706f6e656b656e010a030401290f06050809, + 6792 => 0x5a656d737a65740108040124060a060708, + 6793 => 0x4c616e6774756d010c0208071f0406070709, + 6794 => 0x706c616e204e6c6f6d010d0203050f01111d0b0f05090c, + 6795 => 0x552d556b616d010401071e0f0c060608, + 6796 => 0x4877696e6b696d0103010205220508060709, + 6797 => 0x536e656b746f736e656b0101020603011a060d040a0a, + 6798 => 0x4174756b2054616e696d01091108041c0413040a09, + 6799 => 0x59757772616d776568010c050302170e13050909, + 6800 => 0x416c616c6f6b010e03260e05020607, + 6801 => 0x5376756e7370616e010c04030f01230b0906080a, + 6802 => 0x4869616e61610102060104031f050e03060a, + 6803 => 0x4c616e64616e01060301040b1c0a1504060a, + 6804 => 0x4e6f6b6e6f6b6c616b0103050206040323110e02090b, + 6805 => 0x4f6e20536f70736573010805041d0610060908, + 6806 => 0x4769796f6261010306020103240e0806060a, + 6807 => 0x526964676172726964010e060d150409050908, + 6808 => 0x4d756a6b756d6b756d010c070f03171305040909, + 6809 => 0x44697374616b0101020d031a1007060609, + 6810 => 0x6c6f6e204b656e776e776e0103021d0709070b07, + 6811 => 0x496c6972696c670102040102320513060709, + 6812 => 0x557368757a6875730106031c060e060807, + 6813 => 0x53687a68696b010f1408040b0329091205060b, + 6814 => 0x496d7461616d696e74616e0107030104021f1007040b0a, + 6815 => 0x53616e6e696d6901020204050b27060907070a, + 6816 => 0x4d6f6b205365796b756d01060c020103250d07020a0a, + 6817 => 0x58656f72616f6478656f0110010e02031d100d020a0a, + 6818 => 0x4f6f6e696e6968616d01070103041e0a14050909, + 6819 => 0x5365706e6f737475730102031505041e0d0b05090a, + 6820 => 0x747269742055757001090508031c0515050809, + 6821 => 0x567572697675011002040111170b0d07060a, + 6822 => 0x54656b2d496d01040804060119090d07060a, + 6823 => 0x456c656c6f6e696c010804031c0e0d030808, + 6824 => 0x4b616c6e696b010c0803090b071e030902060b, + 6825 => 0x4b6f696c6b6f69010506190b08060707, + 6826 => 0x4269746368706970706970010d060b030224050b020b0a, + 6827 => 0x476f70676162010d041a070b050607, + 6828 => 0x5375726164756e6e750103140803022a081006090a, + 6829 => 0x4e616d6b656e68756d6d756b010501030211081d0a05040c0b, + 6830 => 0x536a6573716f7765777265010b040502230110060b09, + 6831 => 0x4f6d7562756b010b07140103081e040704060b, + 6832 => 0x50756c65700106020325100d040508, + 6833 => 0x4f6c756c6d616c6d0101080f02220310040809, + 6834 => 0x656820556e01020b03040122070b04050a, + 6835 => 0x586d756d73616e01040108030218080c06070a, + 6836 => 0x426f7a617a686f626f0103031c1110040907, + 6837 => 0x52756d6120416d616e69707501070403020105061a040b050c0c, + 6838 => 0x53636869756b010c030223030e060608, + 6839 => 0x48696b696e692d48617a6b69010f04020306050b1d090b050c0c, + 6840 => 0x577368616d776d69736801050302291214070a08, + 6841 => 0x4c6f6c7377616c01010c0a1e1209070708, + 6842 => 0x416368616368010501031d0315040608, + 6843 => 0x4c6f6c736e756e6c6f6c6b6f010c01041e1607020c08, + 6844 => 0x70756c742d55747574010c0508040322080903090a, + 6845 => 0x4b656c6d6b656c6d010d020f0108160a0505080a, + 6846 => 0x4b696e626f6e010a050306011f070a07060a, + 6847 => 0x4b6f646b79617401100305020107230a0b06070b, + 6848 => 0x547269706c756d010a010805020329170d06070b, + 6849 => 0x4e616e6b7761740102040b010329110603070a, + 6850 => 0x5475746e617374756d73657401030b0702010318070f030c0b, + 6851 => 0x596f6e6f796f6c6f716f6e01010803070106170707030b0b, + 6852 => 0x496d6d6f6970656d7069010c07221110020a07, + 6853 => 0x4d656e6f6e61730103060f0205200c0b02070a, + 6854 => 0x706174204c69676e6c757901040304020601170b06040b0b, + 6855 => 0x5a61796f6c70756c73010a0b11081d0c13040909, + 6856 => 0x4c616b69726e73756b010e0205060301200d0d04090b, + 6857 => 0x4d7572616d65646901030107030602160f1307080b, + 6858 => 0x536973696b75010708040702031c051302060b, + 6859 => 0x496c69716f79010e0e04010f0324030c02060b, + 6860 => 0x4b696768617365626f6461010b07020301230310050b0a, + 6861 => 0x57756e6e756e70616e010301022c0d05030908, + 6862 => 0x4e656e6b696e010e070602230507070609, + 6863 => 0x5072696d77756e01040b1408030210091005070b, + 6864 => 0x546574746f6d0110080604050322120704060b, + 6865 => 0x4e7573756b6f7301040207140612050708, + 6866 => 0x5a68756f72656f01090b0203010c0f070f05070b, + 6867 => 0x4b6120556e6b6101020306200215060708, + 6868 => 0x4765756b74756f64656f010e030102071f0a08070a0a, + 6869 => 0x4c757074756e010c0219050e040607, + 6870 => 0x4c6f6e6e656e6c756e70656d010f02250a09020c07, + 6871 => 0x476973686e6f6e010d10031b0c11030708, + 6872 => 0x65762d5675766f76010b050103210814020809, + 6873 => 0x53616e206c756d204b696d010e040302200b09030b09, + 6874 => 0x4b656c6368616c656c010c08190214060907, + 6875 => 0x506f6e6e676f6c6d0106080301180812050809, + 6876 => 0x4b7577746d6979010d0703021b040c040709, + 6877 => 0x4d6f726d696d6d6f726d01080103180514040a08, + 6878 => 0x4f6c686f6c6d010f0403021f0813020609, + 6879 => 0x6c696e2049776c616c011003240d11020907, + 6880 => 0x4d6f73616d736173010a0102031f030b050809, + 6881 => 0x4d6c696d6d6c696d7072756e010a011502080a1d1009050c0b, + 6882 => 0x47616b696d204b696d6b6f010303060801041e0613050b0b, + 6883 => 0x4f74696d7573756c0109011c0805070807, + 6884 => 0x536c6f63680109020324160e050508, + 6885 => 0x4d6f736c6f6b6c6f7301060108071e0712030909, + 6886 => 0x536a696e7362696e6a616e0109080201031504200314020b0c, + 6887 => 0x4973696c6173696c696e01010305020b041d0611060a0b, + 6888 => 0x4b7565706f656e706961010c150f0e08021a0c13030a0b, + 6889 => 0x4c6f6e6b756e01020d04011f010a060609, + 6890 => 0x57756e6e696e01060403290909060608, + 6891 => 0x6d757a682050697a686b617a0108030201071a0d0a050c0a, + 6892 => 0x536a6f6e626a7572736a7573011006050302190908030c0a, + 6893 => 0x4c696e6d61756e010d02030130010f030709, + 6894 => 0x486570616e6f010e0203240515020608, + 6895 => 0x4e616e68656e0108140107051e081106060a, + 6896 => 0x536c6f6e6e656e010e04020603081e070807070b, + 6897 => 0x486c696d74616e67010e06040322030a060809, + 6898 => 0x4b616b656b736f2d4d6f6c010702050604130b0d070b0a, + 6899 => 0x48616b756d616d69726801020623060e070a07, + 6900 => 0x4b756b736e696b736b616b010f03051e0712020b08, + 6901 => 0x54656c2054617401070301230410050708, + 6902 => 0x54756d6e756e73616d010a01040f02061c110802090b, + 6903 => 0x536e6f6c736b7562736b6f7a01080503060d180d10070c0a, + 6904 => 0x496b6f6b6970696d010a040603071b0a0b05080a, + 6905 => 0x5361746b6974736174746974010b14020403180714040c0a, + 6906 => 0x4f70696d696e010202201105030607, + 6907 => 0x4e6f6b6973686f736861010f02040607031a090b060a0b, + 6908 => 0x53656b73686f6e010706021b0d10040708, + 6909 => 0x4b757420447573010f03071f0113060708, + 6910 => 0x4d61706d756d6e756d010d0602210112030908, + 6911 => 0x55647475726b010e05031c0711030608, + 6912 => 0x4b696e70756e01030508210d0b030608, + 6913 => 0x4672616b66626f73010e081c0d07040807, + 6914 => 0x4c69726e6d6972010d0205070408130c0802070b, + 6915 => 0x4d6f6d2054616d6f6d01070203190314030908, + 6916 => 0x5a68697a686d697a68616c010e080203050e240610030b0b, + 6917 => 0x4e75696e6e75696e010601031b0e0d060808, + 6918 => 0x4979767579010f020c010b0703300d1307050c, + 6919 => 0x4d696e68696e6d6c696e0102050206031c0815050a0a, + 6920 => 0x4872697a6872617a0101070e03021b050a07080a, + 6921 => 0x54697469746f6b6e69707573010a0603081f0705060c09, + 6922 => 0x4d6a6573736f73010703020c1e0612070709, + 6923 => 0x4d6973696e010e060b0703040113041503050c, + 6924 => 0x576c75646a6c69746c6972010b01220b07060b07, + 6925 => 0x4b616973727573010d03010f061e091406070a, + 6926 => 0x53756c7469736e7501100103180f09070808, + 6927 => 0x7775722d5a6977757262010f08010b02061c0b0d030a0b, + 6928 => 0x54616e616e750109040612030f150b0c02060b, + 6929 => 0x5a686f6d2d4f6c736f6368010a0c030214221115040b0a, + 6930 => 0x4e756b706c656b0109061f0a06050707, + 6931 => 0x4167686167686c7571010e01031a020a030908, + 6932 => 0x4e7573736d756a732775730103040702031f0d08050b0a, + 6933 => 0x4e75686f73680101050601032a031207060a, + 6934 => 0x506170657365204c756d79010a0602030104190914020b0b, + 6935 => 0x476177616d61676173610104021d0814050a07, + 6936 => 0x537570752054697375707501010b03070201160815060b0b, + 6937 => 0x4c696c6c696927696977010503020401061a0512030a0b, + 6938 => 0x537573736b756c74756d010d06021a0711050a08, + 6939 => 0x4b757469736b75010c0805200210030708, + 6940 => 0x416d65776577696d011003011e0712070808, + 6941 => 0x54656e696b656b65010d04030502200b0a02080a, + 6942 => 0x43686c69656b010702030f1b0411040609, + 6943 => 0x5061696b6e69617061696b010e030e1a0707060b08, + 6944 => 0x496e6774616b75010c06011505020328080e04070c, + 6945 => 0x41206b69682041616b0102020b1c0b0e030908, + 6946 => 0x50756e77616e62616e010106010204031e050602090b, + 6947 => 0x5365737365737465730106080203180505040909, + 6948 => 0x5a68617a6865676f640104140102061e070707090a, + 6949 => 0x587475707370756d010b05031e0511030808, + 6950 => 0x4d616f686575746e6961700107050123030a040b08, + 6951 => 0x61722d41726265726b69726b01070f040102290215030c0a, + 6952 => 0x6f6e20556e6f750107140d0f031d090c05070a, + 6953 => 0x4e756c6e616c6d756c746f6c2e050809030227050f050c0a, + 6954 => 0x496d62657a6f6d6d6963010f0e1f0605020a07, + 6955 => 0x4b6968746f68687568746f700103021d0305030c07, + 6956 => 0x53756d204d756e0105060105210605070709, + 6957 => 0x596965747561676b6f6974010102200d0c040b07, + 6958 => 0x5465746b6973746f6b74657301060305240d0a050c08, + 6959 => 0x4f736f7369706970010f020801031e061105080a, + 6960 => 0x54757475702054617475010e0607020122040d020a0a, + 6961 => 0x4475697368756f20447569010501021e150e060b08, + 6962 => 0x4c617a73617a7a72757a010d08220608040a07, + 6963 => 0x4d656f736f736f736f010a040220120a070908, + 6964 => 0x527578727567716171727572011002240114040c07, + 6965 => 0x50756e6977010402220e0c070507, + 6966 => 0x4e6f6c7065746c696573010402030421050e050a09, + 6967 => 0x53686568656e010108070302011d021402060b, + 6968 => 0x4875696e7561010902011c070b070608, + 6969 => 0x5363686d696d7363686d756d010b0106200208050c08, + 6970 => 0x4c696d6c696d0104041002200b14030609, + 6971 => 0x596969692054696c69676875010c05271109070c07, + 6972 => 0x556b686f716f716164010f0106200a05030908, + 6973 => 0x50756d6e75756d70756d010e030206241908030a09, + 6974 => 0x4e696b656e2d4b656e6d65010702200408060b07, + 6975 => 0x417461742041010d02031d0407040608, + 6976 => 0x4368756e736b696e010108030406021e110d02080b, + 6977 => 0x4e7574757475746f010c01031f0e0d040808, + 6978 => 0x55726b75726b697201040604011d0308040809, + 6979 => 0x736b616c205374617367617301100115190e0a050c08, + 6980 => 0x6c616d2d456e6b657401030502031022030b03090a, + 6981 => 0x48756b6f706927756e75010e08010203230306060a0a, + 6982 => 0x4e696e2073756e20536b756e010902010c23080d060c09, + 6983 => 0x496c656c74696c01030402010320041207070a, + 6984 => 0x506f6c7374656c010b14050301180d1402070a, + 6985 => 0x4c696d70696e6901060304230a14060708, + 6986 => 0x4e696c205475696b010b0803010426060603080a, + 6987 => 0x552050696d6f740107030201230e0b050709, + 6988 => 0x456e746c6f6f6c6c6f6b0106070204220309020a09, + 6989 => 0x526161696972010f08040321070d060609, + 6990 => 0x67696e2d53796e70616d0104040603080225040f060a0b, + 6991 => 0x53656f6e61010c0104030216141002050a, + 6992 => 0x5573616e656e6f640103040206230913020809, + 6993 => 0x5075616d7375736e756e0105010304250605040a09, + 6994 => 0x54656d736b756d010103010d040222011402070b, + 6995 => 0x4b656b656e696d6e696d010304030806020f230208020a0c, + 6996 => 0x4e696e6e696e010801020314041d0a1405060b, + 6997 => 0x497a2074617a20417a68757a010a02290108060c07, + 6998 => 0x42757a73696201090403021b1a0c070609, + 6999 => 0x4e65646e657368010a0631030e020707, + 7000 => 0x5069756e7669696d616967010802040308131314030b0a, + 7001 => 0x5275647a7567010d050d01030225040b07060b, + 7002 => 0x467a68616e6b6f6d01100804051f0814040809, + 7003 => 0x54616b70697461010506020b040c0e0603070a, + 7004 => 0x4b6f706c6f6d0102060807220908030609, + 7005 => 0x4f6e6767657175010b021b0611020707, + 7006 => 0x577474657474776b6b69740108100e031b100e030b09, + 7007 => 0x536c616e676c696e67010a0301020429040905090a, + 7008 => 0x4368757a6368616e6c75640104031b0912050b07, + 7009 => 0x4b696d6b696e010604050f03011e020505060b, + 7010 => 0x5562696b697a6801050102060d07031c031303070c, + 7011 => 0x416c677a68756c77010d0108240c0f020808, + 7012 => 0x456e746f740110031408280f0b060509, + 7013 => 0x276f6c616c77657277656c68010f060302012d0b0b030c0a, + 7014 => 0x5965776b656e7975686b656e01080401150f0f070c08, + 7015 => 0x41707570696b01100602200b0e030608, + 7016 => 0x4f6c68696c6d696c7020456c010601020322140e050c09, + 7017 => 0x557068656761797a75640109070503151c170a020a0a, + 7018 => 0x48697270616c7770696c70010f020301080517090c070b0b, + 7019 => 0x5364757374697363686f7a68010e0106030722040c060c0a, + 7020 => 0x5365736e6f6b010f030f210607070608, + 7021 => 0x4c65206e692053696d01070207010803180a0b06090b, + 7022 => 0x756d204d6f6d697373686567010f011f0415030c07, + 7023 => 0x4e6f6b626163010b060308270808030609, + 7024 => 0x4c696a70750109070b1c0608030508, + 7025 => 0x4b696d6c696e6b696d6b696d010c01081502140b0a030c0a, + 7026 => 0x4c656e757469010f0601041d1712030609, + 7027 => 0x557264616c6801021502031e0c0f050609, + 7028 => 0x4d756e756e70696d6d6f6d010a020104031b0c12030b0a, + 7029 => 0x756d204b756e6f7001070320130a020807, + 7030 => 0x4b757368756b75736801060408010223110e03090a, + 7031 => 0x44616e656d71756e64616e01020c21060f030b07, + 7032 => 0x4c65636864696a010202011d050f050708, + 7033 => 0x4c6f7272657201030d0204200911050609, + 7034 => 0x4e677573636870757a767573010c010302081b0706070c0a, + 7035 => 0x496b6573696c6f6b0105020601290c09040809, + 7036 => 0x4c6169696c69616b0110060b0703131d0d0e04080b, + 7037 => 0x537565736775650110080125060a060708, + 7038 => 0x546f6e6773616c766f6c010f041a030b020a07, + 7039 => 0x4d656c696e010208040502030e1c0c1005050c, + 7040 => 0x4e616e6770656e010203140d02220a0906070a, + 7041 => 0x536d696d746f6e010b0108230408060708, + 7042 => 0x497369696c20497a6101030201031108261b0702090b, + 7043 => 0x48617a6e6573680103020520070b070708, + 7044 => 0x49646972697a0108010302200707020609, + 7045 => 0x4e616c6e756d6e616c01050203040801230f0a06090b, + 7046 => 0x4c656d736d616e010601031d0311070708, + 7047 => 0x4e6964696d61616e0108010f0317060a050809, + 7048 => 0x546f6b656b6c75736e756b010e0504110f021c0605040b0b, + 7049 => 0x54617a68616e697473636875010f0204180808040c08, + 7050 => 0x4e6973736f73736e756b010b010506020403220b0d050a0c, + 7051 => 0x416b6b69730110030b01021d0c0702050a, + 7052 => 0x6b61756c204e75616d73696d010c070402061f0305030c0a, + 7053 => 0x536c756b756469676c6901030403290b10050a08, + 7054 => 0x5465636869010802060323080a070509, + 7055 => 0x677520537564010801080402050622030907060c, + 7056 => 0x736f657420536575706b6f73010f020b031f0313040c09, + 7057 => 0x55776979657773657974011003050d081d0307020a0a, + 7058 => 0x42616b627573010d03120e0b02170e0d06060b, + 7059 => 0x5a696c7a696c72756c010c010305020b1d050d04090b, + 7060 => 0x476f62696e72656d010b040102210d07060809, + 7061 => 0x4e6f696d6f6101040b180a0f030607, + 7062 => 0x506f6d757a6e6f6d6f01100b01270611040908, + 7063 => 0x5363686e756e756e0105020603041f080e07080a, + 7064 => 0x4f736f6c6174010906020323080c060609, + 7065 => 0x276f276c7570276f27276f2701070b1b0609060c07, + 7066 => 0x416d75656e616e20556e616e01040301210407030c08, + 7067 => 0x6b75622d41720110040302230608050609, + 7068 => 0x50757374756d736c756c010502012e0a0f070a08, + 7069 => 0x547363686f010d0f0424040d050508, + 7070 => 0x59657969646179657a6901100f0302160b0f050a09, + 7071 => 0x4e656a6e656a61776d01090e010421180b030909, + 7072 => 0x54696e696c6e73696e0110030122030c020908, + 7073 => 0x4e6f736f622d527501050108200a09070808, + 7074 => 0x5574736368656b656b010e04030602011f0a0e05090b, + 7075 => 0x556c6e6761726f6c70756c010b03020b110601220105040b0c, + 7076 => 0x536574696c756c6c756e6c75010d081d0807060c07, + 7077 => 0x416f6d6d756875756b6d6f6f01080401030e220a0e050c0a, + 7078 => 0x57616475776b6501070406030125041207070a, + 7079 => 0x73616e67204d696e6e756e670105082e040c050c07, + 7080 => 0x4e75657a61756c697572010c01031f1806060a08, + 7081 => 0x4e67657679757273746567010b0b250312040b07, + 7082 => 0x45727369726b65720106080614011f170a06080a, + 7083 => 0x4c7561736175736d6175732f0608120203011a050f040b0b, + 7084 => 0x4d756b647574696464757401050f08060326120d050b0a, + 7085 => 0x4368616775204775616b01030f0703011124120c060a0b, + 7086 => 0x536970696c01071203020621030807050a, + 7087 => 0x4d657a686f7a63686e6f7a010d14020705031f0413040b0b, + 7088 => 0x546573696d69010505020326060e050609, + 7089 => 0x4f6e6720736120456d6f757501060401020508271115050c0b, + 7090 => 0x4c696c6c656c6c616c011001170f10030907, + 7091 => 0x4f726c6f726b616c6b010a020115031c180b03090a, + 7092 => 0x4e7775706e726f6c010d060103230713040809, + 7093 => 0x54756e74616b74756e010d0507031b0f07060909, + 7094 => 0x53746974617401080401200613070608, + 7095 => 0x506574746573010604010319080c060609, + 7096 => 0x4768616d756e67010e021c0915050707, + 7097 => 0x456b69697369696a696964010f03221b0d040b07, + 7098 => 0x5368656b736d756b01070102071e0f11070809, + 7099 => 0x4d6168752050756875747574010707020b0301170b10050c0b, + 7100 => 0x4d69616d6d69616d0106010315041b031307080a, + 7101 => 0x4e757a66707573686667697a01090203220a0d070c08, + 7102 => 0x5363617373696b010f0c230607040707, + 7103 => 0x4e65736c656b010502032d010c050608, + 7104 => 0x486f6f65746f6f69746961740101030225080a060c08, + 7105 => 0x4e75736c75736b6f010f06030705140421060703080c, + 7106 => 0x4e75677368756c7a69010b0803050623161106090a, + 7107 => 0x4c756b687368776f7177656e010f03011c0b0c040c08, + 7108 => 0x4272657373726f6b01080403200f0c040808, + 7109 => 0x4f6e6e656e010303200b0a030507, + 7110 => 0x536e69736b75646d75736765010402010f03280d11070c0a, + 7111 => 0x4e6f6e6e61680109040308130218021003060b, + 7112 => 0x4c6f6d6c6f74010b010419130d060608, + 7113 => 0x53796c73616c6d796b74750105080a0203010634170c050b0c, + 7114 => 0x536c6973676969010303060b1e0a08030709, + 7115 => 0x506961626169626169676169010a0502010b0f03041a050d070c0d, + 7116 => 0x4c6f6b616e696c6c656e696c010f0106050d04021c0b11020c0c, + 7117 => 0x4979717975776b6801070403160413070808, + 7118 => 0x4c6f6c757a686f0109020306011e070807070a, + 7119 => 0x4b69616b6b6127010701031c0e09060708, + 7120 => 0x496c6c69726e20496c01090102032b040d060909, + 7121 => 0x4b6f6e70696e010b0d071b1611050608, + 7122 => 0x416c6172626f6c7a68010c060102290e0f050909, + 7123 => 0x4b696b696b6101080607200e10040608, + 7124 => 0x4d696e737261756e010a04031b0813040808, + 7125 => 0x4568657a205a657a64697a010d080218060f040b08, + 7126 => 0x4f6b616e20696c204573756e010d0103220910060c08, + 7127 => 0x4e616b204b756c7061756b01100215060108031c0308040b0c, + 7128 => 0x4d6c69736d6f7301070308210713060708, + 7129 => 0x4b6f6b6f2048756e6e6f01040b03060121090a040a0a, + 7130 => 0x4b696e7569706d6168010b07010302260c0604090a, + 7131 => 0x526f7a6d726f73010b030104050621020b05070b, + 7132 => 0x53756e70756e73756e0105030118030b050908, + 7133 => 0x617620476569796e67616701040602040126050f060b0a, + 7134 => 0x6469726d2d456c7401020102230c10050808, + 7135 => 0x57776964617a7777010f0406020320120604080a, + 7136 => 0x727568204968010f030601180314030609, + 7137 => 0x4b656f74205075656d0102040803061e110906090a, + 7138 => 0x4e6c616d6b617330090b0304260405040709, + 7139 => 0x536f6e6e696e0108080103241411050609, + 7140 => 0x4570616e756d0102040b031c0807050609, + 7141 => 0x547575727301040414120205030f1f040906050d, + 7142 => 0x506f61736f7573736f75730103080e020301140810060b0b, + 7143 => 0x456b756d6f74010e0801061b030e060609, + 7144 => 0x5374756d736b6901040106041c0407040709, + 7145 => 0x5069706e756d6e616c010806010803101f070c03090b, + 7146 => 0x6c6f6e2d536b6f6e6d616e010e040603250513040b09, + 7147 => 0x4f776b656a0106020f210410070508, + 7148 => 0x4c756d70756e010a0801021e0b05030609, + 7149 => 0x27656d6e6f6d68656d01070708250807060908, + 7150 => 0x466c756627756b6d756d010f0319080d070a07, + 7151 => 0x6b65204d69706c656e6f010a020324160f070a08, + 7152 => 0x4c617574796f75740106020307220114060809, + 7153 => 0x4a757769676967010102051203041c060804070b, + 7154 => 0x546f746c6f70746f746d750107062b160a050b07, + 7155 => 0x4c69706970616c69010e0503211009020808, + 7156 => 0x536f73736f7320536c6f73010903070b020406250710070b0c, + 7157 => 0x417773687a6869776c010506210508070907, + 7158 => 0x55796571756e67756d756d010a030102081a0505020b0a, + 7159 => 0x72696e204e696c756e756e67010f02200912020c07, + 7160 => 0x556b65707567656701040301071f0606020809, + 7161 => 0x57756b77757301060203240c13070608, + 7162 => 0x4e656c647465696c7301010301240705030908, + 7163 => 0x42756c6d696c796b6972010602010f1b1215020a09, + 7164 => 0x4f7368756e74696f6e6e6101030403061e050e030b09, + 7165 => 0x5065706d696b650110080422120f040708, + 7166 => 0x4e6167796173696e6701010103231411050908, + 7167 => 0x5572706e616b69726d6e6170010606230811070c07, + 7168 => 0x47697374776c010e0c02240515070608, + 7169 => 0x45746574616e010c03010f1f0a13020609, + 7170 => 0x586f6b6e697a0106030208150b10030609, + 7171 => 0x4c61756c6b756e01020b0125060c050708, + 7172 => 0x53696c74616b010e06040305240f0e04060a, + 7173 => 0x4b617a736d6f63686d616368011002180407050c07, + 7174 => 0x53656e6c75706c757001020406020323020a02090a, + 7175 => 0x5562696b687573010e06190611020707, + 7176 => 0x4f6275746f6201031502030123110e05060a, + 7177 => 0x4869756b6869756b0103050603011f0b1205080a, + 7178 => 0x4d756c73706f6c010f040203220613030709, + 7179 => 0x4b656e65204f6e6e756e75310d060302011e0b13070b0a, + 7180 => 0x6c696d204e616e610110010604190605030809, + 7181 => 0x54757a72697a6801040c0102200907060709, + 7182 => 0x4b72656e6b726f6e70726f6d0108030201270b07050c09, + 7183 => 0x456c616d6f6d656b616d010c04200713030a07, + 7184 => 0x4b6175716b616f6b7165710106060b04030715040b020b0b, + 7185 => 0x4b696e746f6e010f0203010519070503060a, + 7186 => 0x4d61757461656d6d616901010423090f060a07, + 7187 => 0x416e75777570756d756d010706020104081a120d060a0b, + 7188 => 0x4861756b6e6f6e6c6f6e010f03200d0a040a07, + 7189 => 0x416e756870757475680108050312081e061304090a, + 7190 => 0x547363686564687564010b03240613040907, + 7191 => 0x4b616b696f656b69010301040f240c0a070809, + 7192 => 0x49656b6569646569646f62010a080307011f0311050b0a, + 7193 => 0x4879756b6879756b7075756d01050201040703051c0d08020c0c, + 7194 => 0x536d616e6d696e6b69696e010c0103220813050b08, + 7195 => 0x456c6574757075700103042a0a09020807, + 7196 => 0x4c75726d656c01020108240d14030608, + 7197 => 0x54757275726172010305060b0f1e031307070a, + 7198 => 0x73686c756d20446164010e012f150e030907, + 7199 => 0x53686e756e68756d010e01060420090d040809, + 7200 => 0x52757a737501030e04010229010d05050a, + 7201 => 0x537a657a737a757332070a010c021b050b02080a, + 7202 => 0x4974696b2049686174696b010202010703230413040b0a, + 7203 => 0x5368677573680103030701170e0c070609, + 7204 => 0x5361616e736c69696e010b040125090d050908, + 7205 => 0x4e6f6d2d50756d6f6e0106060102230211040909, + 7206 => 0x556865746f6d6970696d01050703021c070c040a09, + 7207 => 0x48656b696e6527756b010905011403021e0e0f06090b, + 7208 => 0x54756e6e72756e6e72756e010a05031d0e05030b08, + 7209 => 0x4b656e74696d0109030204180c10030609, + 7210 => 0x54696e692d54757369010a0504030601250a1406090b, + 7211 => 0x526f786164696d726f010204030106210d1407090a, + 7212 => 0x4d6568616b68616d0108011e0a0b020807, + 7213 => 0x476920696e204775010a0f070208030628140f05080c, + 7214 => 0x6d612d44697368010308210c10070707, + 7215 => 0x53676f76737475670110010204031c111207080a, + 7216 => 0x57617a686368657a68010c1503041e0b0e030909, + 7217 => 0x4c696c6c756b01100706050222070607060a, + 7218 => 0x4c61736b756b010102240508020607, + 7219 => 0x50616f6870616f68010b0306080420161405080a, + 7220 => 0x54616c736974757401030d040502031b060b06080b, + 7221 => 0x416e696e656d616e010a040201030822010805080b, + 7222 => 0x47656b736e6573010705020d03012d1b0903070b, + 7223 => 0x456e656d6d616e010603180e0c020707, + 7224 => 0x536877656e010d0401032a0213060509, + 7225 => 0x4e75746e75746d65740109030401150722020f03090b, + 7226 => 0x6d69722d4c697a68626562010e060d020401141f0f10040b0c, + 7227 => 0x4f796f79656c656c01100403191513030808, + 7228 => 0x576f6e68616e01090103080221061106060a, + 7229 => 0x576177696c697977010f1006031c0207060809, + 7230 => 0x57617777616d010c030201140b09070609, + 7231 => 0x706a696b204b617301100204031f040b030809, + 7232 => 0x536569706d756c011003220b0b070707, + 7233 => 0x706f6d204b616801070b0f0704020618040704070c, + 7234 => 0x4b756b7574656b0101020601080327020705070b, + 7235 => 0x4e6f6e736f6d010905021b0406020608, + 7236 => 0x52656b696b010607050f0203190b0f05050b, + 7237 => 0x54697574636868616d010f0406050318041502090a, + 7238 => 0x4e72756d6e6c6f6e74756e010706031d1309070b08, + 7239 => 0x4f646b72656e010d0304020119040a05060a, + 7240 => 0x4b756e6b616e01070d0301211106070609, + 7241 => 0x53646f7a736b6f736f0107141d0512040907, + 7242 => 0x54696a6172610110080b1f040f050608, + 7243 => 0x4f647a68756f6501070406160311030708, + 7244 => 0x4b75706e6570010e01032b0d0e070608, + 7245 => 0x50616e676e72696e67010a04031a0a09030908, + 7246 => 0x4d6f6e676d6f6e676f6e0108020f01040503280306020a0c, + 7247 => 0x4e726f686e616e70696e010b04060103160609030a0a, + 7248 => 0x7075742d4b6f6b6d6f6e75011006050319050c060b09, + 7249 => 0x50616e616d70616e01060706020305180d0703080b, + 7250 => 0x51657161617775010401031f030f070708, + 7251 => 0x4b72756d716c696d6e67656e010202041d0505040c08, + 7252 => 0x4d756e677079616e67010e0203220f05040908, + 7253 => 0x536b616e736b696e0107011c0b15050807, + 7254 => 0x4c6f7768652701060201032b0506070609, + 7255 => 0x4c656e756b6c656d70696e010f0408010703021a070f030b0c, + 7256 => 0x5365736e6973736b696c010d040614021f0508040a0a, + 7257 => 0x426f6270697a7a686173010f06040e031b0a0c020a0a, + 7258 => 0x4d6f7269726b65697273010d020301230407030a09, + 7259 => 0x4d656a6d696a74010f021e040a020707, + 7260 => 0x4e616b6c696d6d75736e6973010b0121090f020c07, + 7261 => 0x47696e676b696e6e676901040e04011c080c070a09, + 7262 => 0x536875676775736e6974010b040322070e070a08, + 7263 => 0x536567686f7369776f0109011d040d020907, + 7264 => 0x4768696d656e616e0105010806030519040907080b, + 7265 => 0x537574737574010f0518050e050607, + 7266 => 0x456d6f6e656b01040102041a0b15070609, + 7267 => 0x4e61616d6573696c616b0104080d0102280806040a0a, + 7268 => 0x4c756e6767696e670101010304200206050809, + 7269 => 0x4b616c6e69706972680101031c0f06050907, + 7270 => 0x54656c736b656c6b010b07020401170e0504080a, + 7271 => 0x4e616e70696e70656e27696d010e030601021e0f09020c0a, + 7272 => 0x416b616b6b616b747973010e03040f06011b0507070a0b, + 7273 => 0x4c757975640108060402031a0b0b07050a, + 7274 => 0x4d696d696e6d696d6b616e010808020401100b200507050b0c, + 7275 => 0x47617a6d6f7a204b757a68010b04150705050b07, + 7276 => 0x4b6f69736b616b6b656b010f03040102051b100b060a0b, + 7277 => 0x4c7572756c0102030201040818061304050b, + 7278 => 0x4e6173757374696b616b757301040803040206131407040c0b, + 7279 => 0x4e6f74756e6f74750109020103250512070809, + 7280 => 0x5061776170657061776b656501090203140506050c08, + 7281 => 0x536f6e706f6e20456e73696e01020103190b0b030c08, + 7282 => 0x4b796d692d54656b77756701030402280e0a050b08, + 7283 => 0x517574617374617301050802230a05060808, + 7284 => 0x5a756c6c656c7301070107200408050708, + 7285 => 0x4c75796c6869776c276177011002080125070a030b09, + 7286 => 0x4e776f6e73756e6c756e010c0320030e060a07, + 7287 => 0x476f6c6e6701060302190206070508, + 7288 => 0x54696520546965686f75010d06010207081a020f050a0b, + 7289 => 0x736174204b6f6b0102010220050f050708, + 7290 => 0x43686f727a7a6f72010a06010522020c050809, + 7291 => 0x4f6b626964204c696d01050107021a0509050909, + 7292 => 0x46726f6279757579757501060b031d0c14070a08, + 7293 => 0x54757475747568617074696b01060f03071520130a040c0a, + 7294 => 0x53796d74616e0106030b19090b050608, + 7295 => 0x5769737061612773707527010a070301270b06050b09, + 7296 => 0x4f6c6f746570010f050603071e070806060a, + 7297 => 0x536d61747a617a610101030720080c050808, + 7298 => 0x5469656e6861756e010d0801060203260f0907080b, + 7299 => 0x546f6c73616c740101020b0624070c030709, + 7300 => 0x4d756b69206c616e204d616e01060302140905020c08, + 7301 => 0x52696564756b010905271013020607, + 7302 => 0x556d617020416d756d010f030102260109040909, + 7303 => 0x4964746c6f720102020401230714060609, + 7304 => 0x4b756f6b756f010403081b110a050608, + 7305 => 0x417368736f73010c0221040f050607, + 7306 => 0x4e6f6d6e6f6e6e6f6e6e6f6e01070111080302240e12070c0b, + 7307 => 0x416e6368696d626f6e010b040b0f0319040f06090a, + 7308 => 0x497363686d696b010102041f0b09020708, + 7309 => 0x4d757475737501010501060c081d040e05060b, + 7310 => 0x44696e6e6c616e736c696e01060302230909020b08, + 7311 => 0x72692d4b6f74756b6f6b650102050120040a030b08, + 7312 => 0x6d6127205069706d69010c0225040a030907, + 7313 => 0x4d6c6f7463686d7261746368010f130308140b0e060c09, + 7314 => 0x526f756370617a6c65756c010b0301260810020b08, + 7315 => 0x53756e6772756e67010904050b02062b030602080b, + 7316 => 0x50756f706b6f6b6b6f74010f010c1003230915030a0a, + 7317 => 0x4b6f6e696b6c696b010d031f1009060807, + 7318 => 0x50657361205a617a697361010803020401051b0c13060b0b, + 7319 => 0x4c696e6c696e6c756b010501031d0415030908, + 7320 => 0x53617320416d737573010b020603042a030507090a, + 7321 => 0x4b68656d6b686f6d6461010603010224100e020a09, + 7322 => 0x536e616e736e616e01070b0218070c060808, + 7323 => 0x49726161727073617273010101260808060a07, + 7324 => 0x476c6f67706c65797775730102060802030b01251206020b0c, + 7325 => 0x496e74696e01040108030f20041503050a, + 7326 => 0x4d65756d6f7573636801080204031f190d060909, + 7327 => 0x5573696c6d756d697301050208270212070908, + 7328 => 0x51777a686f0101010403220f09050509, + 7329 => 0x4b6962756b7a616865010303020f0b06120f1003090b, + 7330 => 0x53616e6e69730110021003220205060609, + 7331 => 0x53686e6f6e736b6f6d6e6f6e010106031d1607070c08, + 7332 => 0x70752d4d75686d75680108030c0711140b0e07090a, + 7333 => 0x7a686c616e204d6c616e0104030502200c14020a09, + 7334 => 0x4e69616e61756f6f6b010b1007020301280c0c05090b, + 7335 => 0x4e7975746e616d6d7969730105040601250c09040b09, + 7336 => 0x4d696e6e656e6c756e6d657301060301220f06040c08, + 7337 => 0x4f6e73756e656d010a0302040117101104070a, + 7338 => 0x41616b6f6f6b656b756d656b010d1203270e12030c08, + 7339 => 0x4d6f757027616f27616f0104020b01230c12020a09, + 7340 => 0x496d6b6f6e2070756e20556e010708040b03160e13030c0a, + 7341 => 0x4e6f746e756d6b696d746168010b030f0121090e030c09, + 7342 => 0x54696d706970010e080204011e0a1105060a, + 7343 => 0x4e696e69746f6e01090501061520090a05070a, + 7344 => 0x56616e656c76610101030206081c0a1102070a, + 7345 => 0x4674697073687475010b030710020104230d0806080c, + 7346 => 0x53656d73656d01100d0b030716090a06060a, + 7347 => 0x4d72656e6c697001070402240405050708, + 7348 => 0x4d6970756b6d696b6e696b01010601021f020c060b09, + 7349 => 0x4b657570746f74746f7401040204220908040a08, + 7350 => 0x5573756b656b010a03020b0e0f050608, + 7351 => 0x4b75646f6f6b6c61736865010c010203210615050b09, + 7352 => 0x53687a68656e0104041105150114050605060b, + 7353 => 0x41722d556c6b010e0201270e0a040608, + 7354 => 0x6f732054656b6f6b01040504070308160c0b02080b, + 7355 => 0x6b6968204b616b616b010404140103061d041403090b, + 7356 => 0x456b656e656e61706f68656d01090122090a030c07, + 7357 => 0x5374657320536e6f6f7a010b0502260307060a08, + 7358 => 0x48616b6861010b040103160614050509, + 7359 => 0x4c6f74736c65736768616768010c0a0307080b250614030c0b, + 7360 => 0x5361756e6e72756e6701020308011e050d020909, + 7361 => 0x4572712069672058697264010c06071a1009040b08, + 7362 => 0x6d65204b6f746c6f75010a0a021f090a040908, + 7363 => 0x2765276f6e70757927010d0712011e130a070909, + 7364 => 0x4c756c20456b756c6c756c010704020e1f0413040b09, + 7365 => 0x496e696b616d0103040203180e0a070609, + 7366 => 0x4f736b616d01080601230115050508, + 7367 => 0x546f6e6e756e010b04200f05050607, + 7368 => 0x4e6f726d6e6f7227697277010503060728030d060b09, + 7369 => 0x53656e6f6e656b70616d010c0f021f0510030a08, + 7370 => 0x54756c6974756c6901070b0807062a0c0b07080a, + 7371 => 0x5a687563686e6574010b04030b081a070a07080a, + 7372 => 0x42697a2054656a0108040603020924020c04070b, + 7373 => 0x4d756c6d6f6c6e61700109040305021d010606090a, + 7374 => 0x47686f67686973010c031b0414030707, + 7375 => 0x547569746d616974010801080527020e050809, + 7376 => 0x4e656f776c65756d0104030204241613070809, + 7377 => 0x4c616e20416e616e756e010a0108030704021d0a0e070a0c, + 7378 => 0x536c616e676e656e676f6e67010c03120a12030c07, + 7379 => 0x686127205065276c6527010404010703021c0312050a0b, + 7380 => 0x556e616b68696c01060b0322100f070708, + 7381 => 0x4e756e73656e64756e010a010308220d07050909, + 7382 => 0x4275676869010b0302210b0f020508, + 7383 => 0x556d204d6f6d6e67756d0109021f040e020a07, + 7384 => 0x4f6d6f6e2d4e6f736f747573010f010319050b030c08, + 7385 => 0x536e6f6e6e757373656b010c03210b10070a07, + 7386 => 0x4d6967696c7470697101020506140906070908, + 7387 => 0x42617a706962736469740101010811260b0d050a09, + 7388 => 0x546574746574010401220309050607, + 7389 => 0x536d6f736d656a01020804020326010d07070a, + 7390 => 0x54756c756e7361010403011d0a13070708, + 7391 => 0x4d6568686f70686568010b0105060325061304090a, + 7392 => 0x5772696e70696e010f070211060801031d060c02070d, + 7393 => 0x4d616b70616b77616b01050e180d0f070907, + 7394 => 0x4465736f736465646f6c7401090608031b1807070b09, + 7395 => 0x54656b6e697364756b0102080405141e060a05090a, + 7396 => 0x4869756d61752761756e0105010b050f0c0c070a09, + 7397 => 0x4e756d6e756d756c01090c0306010827070c03080b, + 7398 => 0x496964756969640103010f0704022a050905070b, + 7399 => 0x43696e656e6e616b010602010a07031d0d0d02080b, + 7400 => 0x5a68756d726f7a686b656c010f040325050d040b08, + 7401 => 0x4465656e736161730108140401240114050809, + 7402 => 0x456d70656e656d75736d656c010303051c0a14020c08, + 7403 => 0x536c696368646973010206020b030e0427040e02080c, + 7404 => 0x4e6172206c696d204d6973010d0b060c03021d0a11030b0b, + 7405 => 0x546f726e6c696c716d656c0102030204180306030b09, + 7406 => 0x44696e736b696e74796e01070302011d050b030a09, + 7407 => 0x416c696c68010b050326030e070508, + 7408 => 0x4b656b786978010d15031c060f020608, + 7409 => 0x496b656d696c756d010104030e061c060605080a, + 7410 => 0x53656c6e616c616c0101011f060a070807, + 7411 => 0x53756b696b69010304010c0c08060608, + 7412 => 0x486c696b6c776968687527010d01030f170809070b09, + 7413 => 0x536874697070697473746f6b01101402061a0708030c09, + 7414 => 0x556c75646a756e01040b0304190e15070709, + 7415 => 0x4e6f656b6b656f6e696f010b04080605031c0612030a0b, + 7416 => 0x4e75656d6f6501101501040207290b0d05060b, + 7417 => 0x50652043686c61011006010f0402270b0804070b, + 7418 => 0x4b656e6c756d6e67756d010601081f050b040a08, + 7419 => 0x436861796e626f6b6f6d0106060804030a05190b15060a0c, + 7420 => 0x4972747069726e01060802131a070c070709, + 7421 => 0x696e204f6e696d0109030f0128130a060709, + 7422 => 0x536b616b204d75706d616b010a08031e0e0a050b08, + 7423 => 0x5563757075626f6c61706162010c01210f0e020c07, + 7424 => 0x55726d6970010f040c02011c040a04050a, + 7425 => 0x48616e6d756d6d696e010d070306240d15050909, + 7426 => 0x416b6f7374616b010d0f1f1005030707, + 7427 => 0x53696c6b656e6d656e0107010302270110040909, + 7428 => 0x53616c727501040105021b0e0e060509, + 7429 => 0x4b696c6b6f6b6b75696b01020106041f0a13050a09, + 7430 => 0x506f746f70656e010403062a0105060708, + 7431 => 0x43686f62736963686d656d0101040108120203260209070b0c, + 7432 => 0x506570737475746d6f6b010a160b0103241010050a0a, + 7433 => 0x537269736b726174726173010406030502200715030b0a, + 7434 => 0x4c616d6e6f61736e6f6c010f030102290c0e030a09, + 7435 => 0x4c6561706c61706c7527010d060208011d1312070a0a, + 7436 => 0x65632055636f73010306160d0e050707, + 7437 => 0x4f6e6e656c6e656c696e0110060708181008020a09, + 7438 => 0x5075726b7572746b75726e010d0108031b0607070b09, + 7439 => 0x706f6e20536e6f6e736e6f6e010703201306060c07, + 7440 => 0x45626573686573686171010a080403181613040a09, + 7441 => 0x4b657468756d68756d01020205011f0711020909, + 7442 => 0x4d65656c697469746901070d020119070a070909, + 7443 => 0x5a69736869010c04231410060507, + 7444 => 0x4b756b736e6f7401080204140310020708, + 7445 => 0x4e7570756d01060102031b0911020509, + 7446 => 0x4e7564736861640101080e23020f040708, + 7447 => 0x4e696e6773756e6777616e67010203220a0c060c07, + 7448 => 0x686161742048616968756168010408031d0910040c08, + 7449 => 0x4e616e756c0107040b01021b130605050a, + 7450 => 0x277573706f7a010f0301041d1311030609, + 7451 => 0x4f7574706175204f6f010305060322060b050909, + 7452 => 0x4f6e6764656e6764656e6701100302040b011a060d050b0b, + 7453 => 0x4e696e6c696e01030502081d1108030609, + 7454 => 0x57616c6927616e6875776f01020201031c080b020b09, + 7455 => 0x7363686b6f204d6f746f6e010b0601031c0a0e030b09, + 7456 => 0x50696c696e01040203250d15030508, + 7457 => 0x55736974696b697301070401020f030628120f07080c, + 7458 => 0x4f72756c2050656c756c010a14060103021c080e070a0b, + 7459 => 0x42756e616e62756e01100305040102170b0804080b, + 7460 => 0x5469696e6e756d01010603271c07070708, + 7461 => 0x50696e746174010e0403210909020608, + 7462 => 0x556b696b6e6968756b696e0103060b0201230414060b0a, + 7463 => 0x4d6f6d6e616b6e696868616e010b0103041b0e05040c09, + 7464 => 0x42696b69736f0108010304180e0f020609, + 7465 => 0x50696b20276f7020506970010e03080604190b0c020b0a, + 7466 => 0x4a61697369696b617572010c05080320110a070a09, + 7467 => 0x486f7070757a6368757a68010c05030c1c0507070b09, + 7468 => 0x4e6f6c6e6f6c6b75727001060f020c160c0a070a09, + 7469 => 0x506f6e6f6e756e776f6d01090302200709040a08, + 7470 => 0x4e617a6864797a68010d030b1c0a0c020808, + 7471 => 0x4c616e6c6f6e7379616e010c031a0807050a07, + 7472 => 0x546f65746c6f75747475740105040301220b15040b09, + 7473 => 0x5a72697a7a6962011006180d12020707, + 7474 => 0x5a6875736872757a686f736801030d020401250b0b070c0a, + 7475 => 0x54756b6e616b6d69730102010d070204051a110807090c, + 7476 => 0x556c69206f20416c6d6f6b0106010302200412070b09, + 7477 => 0x4b697a276f7a010e02030608250f0c03060a, + 7478 => 0x7377796e205377796d74756e010a040802070103220206060c0c, + 7479 => 0x4e7567756d757365010a15050302041f100503080b, + 7480 => 0x50756d707568736e7574010503080102230c08050a0a, + 7481 => 0x456b616b696e20496e656b0107050304220306020b09, + 7482 => 0x4c617373656201020d19050a050607, + 7483 => 0x4c657373616b204573010d04010e0c031f020704090b, + 7484 => 0x536b756d6d616e736d6f6e01070b04031f0307030b09, + 7485 => 0x4b75746b656b010b0204080327060507060a, + 7486 => 0x536b69204d61737469010b02011c0d15030908, + 7487 => 0x48616e6e696e6d6170010d050201031c0f0b03090a, + 7488 => 0x4f6d6e75746c616b6f7001080b0203181407030a09, + 7489 => 0x556b70776b01080e01042c0c10040509, + 7490 => 0x526f67766f766f0102060e020325100e05070a, + 7491 => 0x707573204d696d010d0416020121061104070a, + 7492 => 0x527563686c756368676962010e0103200614060b08, + 7493 => 0x536e756b7069740104020503250614040709, + 7494 => 0x4d616e6f6d656d656e6f01060329170b040a07, + 7495 => 0x54756c656c656c010a0f010308051a070f04070b, + 7496 => 0x49736f6d696e676f740110040d03011c111105090a, + 7497 => 0x496b6c757274756c756d010e02031b0a0c070a08, + 7498 => 0x54696e70696e010a0802061e050a040609, + 7499 => 0x456b656b6f6d697a0102031e0215050807, + 7500 => 0x5469737570616b61010c032b050a030807, + 7501 => 0x4c616c20576f7527276f75770107030604010e1e0b07030c0b, + 7502 => 0x51616d2059616d010a02081d0c0d020708, + 7503 => 0x54756d756d01030d1c070f020507, + 7504 => 0x4e657a6e69736e61736e697301050b01230312040c08, + 7505 => 0x4d756c6d6d656c010d090d061c0514020709, + 7506 => 0x5a686965736e6f6967756f01010503021a1106070b09, + 7507 => 0x53706f6e70756d70756d0106061020040b020a08, + 7508 => 0x4d696c706d69730104020d060520090d03070a, + 7509 => 0x496c6577696c01010703060222071503060a, + 7510 => 0x276c756e27727568756b010104011e1015020a08, + 7511 => 0x456e6c696e616e6c696e010b0701220e09050a08, + 7512 => 0x5475746f6c74697470756d01060506190c07050b08, + 7513 => 0x53656c6a696c010f020706010322100802060b, + 7514 => 0x48756a7577010b020408031a0d0802050a, + 7515 => 0x516f6b6e6c75716e6c7571010906041a100d060b08, + 7516 => 0x5a6877657a6874757a680104050a031202061b1405070a0c, + 7517 => 0x4e72696b79696b72616b010a060103170e0b050a09, + 7518 => 0x52616d6f6b0109031e0d05050507, + 7519 => 0x556d756e20696e205570616e0101040302200612020c09, + 7520 => 0x4e756d7375010208030f0b06021e020e05050c, + 7521 => 0x4d7575746b61616d746f6f6b010e050b0e0206250205020c0b, + 7522 => 0x4e6974616e6c6573696e01090b0305060208160f0e040a0c, + 7523 => 0x416b6170616e010202031c0915060608, + 7524 => 0x556a6e6977010908031a0605060508, + 7525 => 0x49646f746f6e6f7401050406031e050e060809, + 7526 => 0x4e75746e65756d010f060203220c0b040709, + 7527 => 0x5069747069746d69726e011014071d0910060a08, + 7528 => 0x446c696e6d6c6f6e010507020301230e1305080a, + 7529 => 0x5361656c6c756501010102081b0b0a020709, + 7530 => 0x456b6f7a69646964010802010b0624141005080a, + 7531 => 0x546973756d756d74696d010315031202010811080c030a0c, + 7532 => 0x4e756b6c7570010e030102210d08020609, + 7533 => 0x50756c687501030b080602210b1403050a, + 7534 => 0x4b69726b2d417201080307010e190e0a07070a, + 7535 => 0x4f656e6f6e010c08030120070d020509, + 7536 => 0x54697a74757a74757870757301050e04240a0a050c08, + 7537 => 0x5069616870616d6b6970010d02060e0308240607060a0b, + 7538 => 0x54756c736c75740107011f060b070707, + 7539 => 0x53756d73756d74656e6d750106010403191009020b09, + 7540 => 0x536f7074756f746e6f756b010602061a0506020b08, + 7541 => 0x53686d61736d657373656c0102010b03220a0a020b09, + 7542 => 0x4e6161706565747363686161010e070e270e07070c08, + 7543 => 0x4761676e756e01070304060527041402060a, + 7544 => 0x4765706f67010a011a0805040507, + 7545 => 0x4e69656e6e69656e64756e0103010306250911040b09, + 7546 => 0x4d6c6974676a757a010b01020b0416041307080a, + 7547 => 0x51616e71616e01040420020e030607, + 7548 => 0x5275686c756b01040803021d0715030609, + 7549 => 0x6b69732053757361010506040103270d1204080a, + 7550 => 0x4d696d6974756d6f010e01031a0413040808, + 7551 => 0x4d6c696d276f6c6d696d010b0601230c15060a08, + 7552 => 0x4f766f72656d6567656d01050308161108070a08, + 7553 => 0x456d6f6e756c6f6e204f6e0110020821090e020b08, + 7554 => 0x457368617368656d010906031d060d020808, + 7555 => 0x4d69706d69707374696b010803250a0e040a07, + 7556 => 0x55726e676c756c676a7576010b0423130e050b07, + 7557 => 0x4f6e2d416d6768756e0102081404031b0a0903090a, + 7558 => 0x5469616d61696b61696e0109041f0311040a07, + 7559 => 0x4c6f204c6f700104061e0e11050607, + 7560 => 0x496d6d6f6d6d656d656d6f010501030222040e020b09, + 7561 => 0x4e616473687269736801011303011f0607070909, + 7562 => 0x5261776e616401030201040321071407060a, + 7563 => 0x4b6f6e73756e73756e6d656e010503020108120d06020c0a, + 7564 => 0x507572616e67756c75010c0110030807061f051407090c, + 7565 => 0x57696b77696b6b68696b0101070403010d061a0b06070a0c, + 7566 => 0x4b616e756861687501060804100f0e020808, + 7567 => 0x5a75627a7562010a020803011c0e0e04060a, + 7568 => 0x4c61756c7a6f7368010f04160411040807, + 7569 => 0x53696a7073617401030804031d0208020709, + 7570 => 0x417a687562756570010603011d0a08050808, + 7571 => 0x50616d696e0102041b0f13040507, + 7572 => 0x4f6b6f6d706f6c656e330e01051c0508030908, + 7573 => 0x5a6174646f72010d05020a040120080707060b, + 7574 => 0x4e697a68777a2054777368010302030408190612050b0a, + 7575 => 0x546f6e7a6f7401050801260511040608, + 7576 => 0x4e6f6f6b6e6f6f6b6c6f696e010e0819050b020c07, + 7577 => 0x4d6570676f730106030c1e0e08060608, + 7578 => 0x48757362650104021c0409030507, + 7579 => 0x55737574205571756e69696b010b030802140c0b030c09, + 7580 => 0x4877656e6b6a6f6d6b77756d0105040102230909060c09, + 7581 => 0x456d6571656e67696e0105011e0d06050907, + 7582 => 0x54756c6f74756c6e7574010b07030102150b0b050a0a, + 7583 => 0x4c6f6e70696e01080306080b190b0a05060a, + 7584 => 0x7375756e2d4c75756574010f080c031a030a020a09, + 7585 => 0x576f736e756b6b6f7301030d020803061b0e0902090b, + 7586 => 0x546c617370657a6871697a680102030108021e1112070c0a, + 7587 => 0x4e696c71757965010b030b040118010702070a, + 7588 => 0x4c69656b6e67616b010d020603260e0e020809, + 7589 => 0x42696162626965626f69010f0203060129050e020a0a, + 7590 => 0x45706f732d6f6e2d556b7574010301051b1412030c08, + 7591 => 0x4e6c656c204e6c69700105030113040220060d05090b, + 7592 => 0x4e756d7075010402040721040f020509, + 7593 => 0x53707574737574010f04030706021e0e1103070b, + 7594 => 0x696b2d596c616e6527010d04031d0715070908, + 7595 => 0x4b726f6b7372616c706c696b01080203061f0507040c09, + 7596 => 0x536e6f747374696b010e030c0204190a0b02080a, + 7597 => 0x55676962757a7562010b0703240a07060808, + 7598 => 0x546f6e746f6e6b750106060f03010b21050903080b, + 7599 => 0x4a6f7269726e6701070201030619030607070a, + 7600 => 0x6b6f726e2d4f726d756e010107010203190f09070a0a, + 7601 => 0x4d6f737a656b01070c080403011d050e02060b, + 7602 => 0x4b6565616101010207180c0e070508, + 7603 => 0x4c757074657001020301230e14060608, + 7604 => 0x576d6f6d756d616c776e0108010b06030a05210607060a0c, + 7605 => 0x5465656e696e697361616d690106080403010b1d0807040c0b, + 7606 => 0x466d696d667a756e010b01070b0426160d02080a, + 7607 => 0x54696474696401070201210c09060608, + 7608 => 0x4e756e6e6f6d010301041a0213020608, + 7609 => 0x41756c617572011007020f240911030609, + 7610 => 0x4f67676c6f67010d0116090d060607, + 7611 => 0x4e69736d6973010d14070223030c060609, + 7612 => 0x4f6e6a756e6e696e6f6e010a0803011d090c030a09, + 7613 => 0x5574616c616e01101303040208200b1103060b, + 7614 => 0x536f6d73656d756d010702031f0313060808, + 7615 => 0x42756c69647501100311012e0707020609, + 7616 => 0x5377656d7377656d737765770102020601250711050c09, + 7617 => 0x4f6c6d756c736f7273616c010c0306010f251905040b0a, + 7618 => 0x42756b7372756b010502180a0b050707, + 7619 => 0x54656b73756b01050104030b271f0704060a, + 7620 => 0x5361736d617373697301031620030d060907, + 7621 => 0x54697069706f74697061010b020a061c0505060a09, + 7622 => 0x536870756d73706968010c0108210f08030908, + 7623 => 0x4f6f706f6c696e01081204010320070606070a, + 7624 => 0x5574756c204f73706f740110080f0304290e14070a0a, + 7625 => 0x53616d6f737065010c0f0102031d0d0806070a, + 7626 => 0x4d7275746c656874756d01010405010302190905020a0b, + 7627 => 0x4d616b6869726177756b6861010711040e011d0209030c0a, + 7628 => 0x536e616e74796d010c0604031e1215030709, + 7629 => 0x416e6173616e6f6f010c04011d0910020808, + 7630 => 0x4d7573616e75737475736e610107081401021c1409050c0a, + 7631 => 0x6e72697a20437265737a6570010f050104021c0314030c0a, + 7632 => 0x4f7475706173010d1401021c0307050609, + 7633 => 0x4574657a682045746570010c02230315060a07, + 7634 => 0x526967727562706562010f0314250b15020908, + 7635 => 0x4e75736e6f70010b02081006011d0c1407060b, + 7636 => 0x5461687077696d0104030807230b11020709, + 7637 => 0x45736b756b6573010101020f03250a1302070a, + 7638 => 0x4d696e73686b756d73757401040304280506060b08, + 7639 => 0x5a61646265617a7a75790107061b020e060a07, + 7640 => 0x4b65706c6f726b0108080e14210512020709, + 7641 => 0x6c61756e20537565010a010306230805040809, + 7642 => 0x5475706d697901010b03011d0a08040609, + 7643 => 0x4a6572626574736368010c03020401180b0d02090a, + 7644 => 0x49736165730107100504011424130906050b, + 7645 => 0x706f20536f70010c020323090f050608, + 7646 => 0x4d692d5561010b0107081c0711060509, + 7647 => 0x4768696b6d756368010e0610200711020808, + 7648 => 0x4368696b7368726f7301050b051e1312050908, + 7649 => 0x556b204d756b70756e01100302011c0d12040909, + 7650 => 0x4f6d6d6f6d01020102180608020508, + 7651 => 0x4b756e6d656e676d656e01060e0420030c050a08, + 7652 => 0x54616f722d4b6f726a656e01080327110b040b07, + 7653 => 0x506f6e676c756e0102010f03220813060709, + 7654 => 0x556e6774636861616e010b01031f0814030908, + 7655 => 0x527578726f7474616b6875710109050604230c0c020c09, + 7656 => 0x737469712053636865010802151a1010060908, + 7657 => 0x416c617270010606010407031e040b02050b, + 7658 => 0x4e616d6e756e676368656e6701060204230708020c08, + 7659 => 0x596d6d656d6b616b0110080402240213030809, + 7660 => 0x56656d736d656c010f0601021c0b0b050709, + 7661 => 0x4e6f6d6d6f6e6b756d68756e011004030b02011f0107060c0b, + 7662 => 0x536f756e6c756f6c6b657574010d030107180409030c09, + 7663 => 0x456c6b756c010d03050d0401121d070803050c, + 7664 => 0x54757a616e647501060603050127060a06070a, + 7665 => 0x5375756b757572010d06220314070707, + 7666 => 0x55746f762d4f76696c01020508061103010d1c060603090d, + 7667 => 0x536e696b73756b0106060f0301121a0f0806070b, + 7668 => 0x44697a697a6167697a64697a01030603241808020c08, + 7669 => 0x4c656d616c6b69010e020801270311050709, + 7670 => 0x4e7573686e7573686e75736801020723020a040c07, + 7671 => 0x416c7069726d010d0703280205030608, + 7672 => 0x4d65746d6568010703081e0914060608, + 7673 => 0x546964756d616c690108020104230814030809, + 7674 => 0x416b696b756b6f6c010d020f0103160c0607080a, + 7675 => 0x4b6c75736a756b747275730109010207031a0e10030b0a, + 7676 => 0x4b6c696e6d696d010f030205220c12020709, + 7677 => 0x44696465746163686563680104011e1009070b07, + 7678 => 0x456c6e616c6d696c696d010a030801231405030a09, + 7679 => 0x4e696e2d4d616d010a030604180413060709, + 7680 => 0x4b65746c656c7375010c141d0a0a040807, + 7681 => 0x4d75696d6d61696d6d61696d0101010305022a0112050c0a, + 7682 => 0x4a6f6c6162690106050308060219121205060b, + 7683 => 0x556c6d6b756c73656c0110021f0506040907, + 7684 => 0x516f6d6e6f67686f01080313220a09070808, + 7685 => 0x4b6f6e6c6f6f6e010d1401030621020c04070a, + 7686 => 0x5269726e696c74696c010d012b1609040907, + 7687 => 0x4b756b646f73010d04020106031e020506060b, + 7688 => 0x476170626167756d2d496701020415161213020b08, + 7689 => 0x416a756c6f6b010904050c1b050a040609, + 7690 => 0x4e77746574656e756e65010d010804060f0318150e020a0c, + 7691 => 0x4c696e696d61706c6173010d060103230d0e030a09, + 7692 => 0x4a696e72696e01030b021f0a0f060608, + 7693 => 0x496c73686d617772010a01210e0a070807, + 7694 => 0x4e656e756e010d14040103061b050e03050b, + 7695 => 0x70657a204e67617a6871697a010d0503250b11030c08, + 7696 => 0x4b75276b610105030508011f051504050a, + 7697 => 0x48656977205463686f75740107020305250e09020b09, + 7698 => 0x416d69766173010906020e011007041f050c05060d, + 7699 => 0x546c616d6b6174010e04010b0306051a090804070c, + 7700 => 0x416c6d706f6c6d010b010803290f15020709, + 7701 => 0x5a65637a696e010e0706030b25130d02060a, + 7702 => 0x54697374656e6d756e0108010407031d0d0f04090a, + 7703 => 0x736571204e6c6971010d020b04200d07050809, + 7704 => 0x556e6f6c656c0107032d030e070607, + 7705 => 0x4e6f7262756d6f6c01100603230905060808, + 7706 => 0x4f7020547574010f0b011a070b050608, + 7707 => 0x42656e62656e0101030102220a06020609, + 7708 => 0x4b6f746b696b706f7001090b011f0a05040908, + 7709 => 0x4b77696d747769700109020f03011c0b0e07080a, + 7710 => 0x5072696d6a7568010702060403150c0702070a, + 7711 => 0x53616b6b756b010501021d180f070608, + 7712 => 0x4d756e756d750102020803161013040609, + 7713 => 0x74756d2d42616e2d4c616e010f03050418120f070b09, + 7714 => 0x4b656e6b656e01060201031e0f09070609, + 7715 => 0x75622d496e6f6b68696e010803290a15020a07, + 7716 => 0x4e6573686e657368010d070301041d070604080a, + 7717 => 0x416b67756b010e0d04011e0606020509, + 7718 => 0x4b61756b6e69740103020301220d0a030709, + 7719 => 0x4b756b6c756568686f756b010e030105270315030b09, + 7720 => 0x546f73746f73746f73010d020308011d070f05090a, + 7721 => 0x576f696b75657701010104030516060902070a, + 7722 => 0x4f74706570746f74010f080403230606040809, + 7723 => 0x4173737974010205070317060d060509, + 7724 => 0x4b6f6b6e6f7301040402210709020608, + 7725 => 0x496768656a6571010a020a03250615040709, + 7726 => 0x4f6d6d616e6c696d6f6e010e0405201007030a08, + 7727 => 0x5374756d74696e6b696e01090d0313070f040a08, + 7728 => 0x417574616c617574010c07030d171007040809, + 7729 => 0x4d61696d7375696d6c69757301090302012a1013050c09, + 7730 => 0x54616b7461730101060214190f0f020609, + 7731 => 0x4b6c756b6b6c756b010603190812020807, + 7732 => 0x54616d656e67696e6701080408020325020607090a, + 7733 => 0x4d6f6f6b736f6b2d4f73750109010f03041d0608050b0a, + 7734 => 0x476975647075647368616e01010f0308010502061d0708020b0d, + 7735 => 0x50696e6b696e696d010c0408030226050b03080a, + 7736 => 0x4368756e6720536b696d01090314040721040f040a0a, + 7737 => 0x506f6e616e0107061102031b060803050a, + 7738 => 0x5475726e6b657475726e6d61010c042a040e020c07, + 7739 => 0x5079696e6b616d010a06100222040a020709, + 7740 => 0x5369746e69720107010314050c030608, + 7741 => 0x4d6975736961777569646961010703020619120d070c09, + 7742 => 0x4f72706f72700108021f0505060607, + 7743 => 0x4c616c6c6f77010202141a0a12060608, + 7744 => 0x4c697474757374696d01050304170b07070908, + 7745 => 0x5475627472656e0105041406031f070804070a, + 7746 => 0x496e746f6d01090b03020f220d1503050a, + 7747 => 0x4f726d72657368696e010a050f01081b0d0e06090a, + 7748 => 0x506f6e676e756e70696e010e0301070d21020d070a0a, + 7749 => 0x536f65736f010411030102060821081403050c, + 7750 => 0x536b68756e011008010317070f030509, + 7751 => 0x4c696c6d6d6f6c656c01010125030d040907, + 7752 => 0x4e757073686775010d05020312160a050709, + 7753 => 0x4d7573646f6e01070503010219090e03060a, + 7754 => 0x4b726f6d6b616e6b72656e010c080403011f0711020b0a, + 7755 => 0x726f272057656b01050208060301220b1503070b, + 7756 => 0x536275727362696373696b01090501240814040b08, + 7757 => 0x536979737269670109010f0304021d091002070b, + 7758 => 0x4c6f706f7370656e010e020d251111070808, + 7759 => 0x4b616170756d61770106021008170a10060809, + 7760 => 0x50757a6869010a0b061c0215030508, + 7761 => 0x4d6f6f6e716f756e010f050408020319011005080b, + 7762 => 0x4f706573756d65736573616b010e0807230b0e040c08, + 7763 => 0x507975276c77617701100601020324040704080a, + 7764 => 0x4f796c6f796c010e0b02031f0405040609, + 7765 => 0x4d756e6c756d010a020301082d160f02060a, + 7766 => 0x5475736c75206e6120536e61010a03061e0d06020c08, + 7767 => 0x6869702d506974616861010f03131b090d020a08, + 7768 => 0x4b6969796e69697901070403080e26060f02080a, + 7769 => 0x4e616e6e696e010703020a010725090e02060b, + 7770 => 0x4570757a756b756b0104020403180908040809, + 7771 => 0x52656d206e6f6d20416d656e010f08010205041c1108050c0b, + 7772 => 0x456e756b204f6b696b01060603041b090c020909, + 7773 => 0x4872756e74696e6872696e01070b140e0f070b07, + 7774 => 0x4e6f6e6f7a686f75010802031f0108040808, + 7775 => 0x626120536869736869736869010f01231011050c07, + 7776 => 0x496c6e6d696b696c6b010e060325080a060908, + 7777 => 0x53686d756e010408120b0307011c161205050c, + 7778 => 0x416c696b7570616c01091507020b0301270b1402080c, + 7779 => 0x50657a686b6f7a010e01070b200a0b050709, + 7780 => 0x506f736e657a010a0b04170507040608, + 7781 => 0x53616b737469730104020f0103230d0b04070a, + 7782 => 0x4d6f6c736c756d6d6f010f06011a110a030908, + 7783 => 0x556e73616b010d03021b0c07060508, + 7784 => 0x496875686568657065706570010a0201040317070f040c0a, + 7785 => 0x41617268756c7069696c01101201020503241412030a0b, + 7786 => 0x4d616d6173696b6f01010201230e0e040808, + 7787 => 0x5a68697a6867617a68010703210f0a020907, + 7788 => 0x4d616e7520536b757370617401050206180c11050c08, + 7789 => 0x4c616c206d6974204e6974010a0803130714020b08, + 7790 => 0x5368656b687475797372617901100106031f0b0b050c09, + 7791 => 0x4b656b6e756b74756d6e756b010a031a0f13070c07, + 7792 => 0x752720556d616d756c6f68011006080b03210b12060b0a, + 7793 => 0x4261726f6261010504080103200a0e04060a, + 7794 => 0x49776b6f77737567010401030b1a0606070809, + 7795 => 0x4d756e75777401020b02051c070a020609, + 7796 => 0x53656d73616e6d616e0101060b02231312070909, + 7797 => 0x53617a7369736873697368010a030b011a020f020b09, + 7798 => 0x4368656c62656c74656c01030302011b0a06050a09, + 7799 => 0x4769726767756d6d616e010301200d11070a07, + 7800 => 0x506f6e68697901060701081d0909020609, + 7801 => 0x73612d4e6f6c6e676f6c010202041d0e13030a08, + 7802 => 0x5469746974757061010903011c0c0a040808, + 7803 => 0x476f6c6b75626f6d6775010a0103260e09070a08, + 7804 => 0x4c696d6d697374616d0106080207010320080b06090b, + 7805 => 0x5a61742062616720576f646f01070602031a0f0b050c09, + 7806 => 0x416c746e756c6e75707570010d040102030725130f030b0b, + 7807 => 0x4e656b656e75011003040f1e0214030609, + 7808 => 0x4a6f6e6a6f6e746c756e01080a120712020a07, + 7809 => 0x416b6174616d010b041c0b0b050607, + 7810 => 0x4b657075736175747375740105021b0c0e040b07, + 7811 => 0x41746974697a697a6174010b020f05080321100e040a0b, + 7812 => 0x5568656d656d010b0b01170d09070608, + 7813 => 0x48756e6768616d68756e670109021f0c13060b07, + 7814 => 0x53757a7a757301100403050806210c1304060b, + 7815 => 0x4d756b7374616b6e7570010605061b080f070a08, + 7816 => 0x6d616d20556e670108021e0307060707, + 7817 => 0x4d656f766f656e676f750103080325080d070a08, + 7818 => 0x44656e736368696e01100c0201030622160603080b, + 7819 => 0x4b6973656273746562010604021e0107070908, + 7820 => 0x45727572737572747365726b010803170d08040c07, + 7821 => 0x4b6c65657301060308101c040a040509, + 7822 => 0x5570656e656e010d031a0205030607, + 7823 => 0x536e6574736d756d73686974010a010203170614030c09, + 7824 => 0x4b696c736b616b0108030206071b090f02070a, + 7825 => 0x546174656e756d6d69010402060324090e050909, + 7826 => 0x4e7520556b616b6e75730110070410061c0f0c020a0a, + 7827 => 0x4d756d6e75702d556b6e7570010f03040106071d070c070c0b, + 7828 => 0x53686d6f6e7368706f6b010d0508031f010e060a09, + 7829 => 0x4768697372616b74616b0110061d0513050a07, + 7830 => 0x4d796e65706501010102290415040608, + 7831 => 0x48656c777570657775010b031e0413020907, + 7832 => 0x4569746569746d7265696d010501241112020b07, + 7833 => 0x546f6e736c756e74756e010b0b030501180614050a0a, + 7834 => 0x68756e2050616d7874696e010302200b0e050b07, + 7835 => 0x44752d54756e010e0326040b050607, + 7836 => 0x5061726e69727301030208281305070708, + 7837 => 0x51756c78205a757273727571010f06030501200e0f060c0a, + 7838 => 0x4d6f6b706f6b01020201031e0c08060609, + 7839 => 0x50696e6f726e010a031d0d08070607, + 7840 => 0x4e6769796979750110020b06031a070505070a, + 7841 => 0x6b612054616b75010a06200c0a070707, + 7842 => 0x56757a686b697368010502061a0614030808, + 7843 => 0x50616d756d74756e73756e01050305020401160614030b0b, + 7844 => 0x4e6961746c61696c0103010b04020828010806080b, + 7845 => 0x4f6e696e676e656d01010601110823071006080a, + 7846 => 0x53616b7375736b656b010a03200514030907, + 7847 => 0x466e6f6e6766746f6e6701020308010b20020e030a0a, + 7848 => 0x41737365206f204969010501030f230c10050909, + 7849 => 0x487520696d20456d656d010504020310201209020a0a, + 7850 => 0x4e7577204e656e6e656e010502051e1214040a08, + 7851 => 0x536d61276120536861276101070102051b040a020b09, + 7852 => 0x417475612055706165610105082b0107070a07, + 7853 => 0x476f6d6f6f64010c0207270213060608, + 7854 => 0x536a656a736e757674756c01100407021b0b11030b09, + 7855 => 0x5065746c65746b617401100f0104031e0e1302090a, + 7856 => 0x55706d696d010404010b030f240b1402050b, + 7857 => 0x55616e7368756d010b0313020420060804070a, + 7858 => 0x4c756b6f7301070302010622040d03050a, + 7859 => 0x48616e6b6168010e120c030208012a0f0f02060c, + 7860 => 0x487577696e276f686e6f27010814011c0f05060b08, + 7861 => 0x4e6171617401060b081a0613060508, + 7862 => 0x4e696c73686c616c6b696c0104020d200311020b08, + 7863 => 0x45746d75706b657473616e010303190b0c020b07, + 7864 => 0x5972696e64616e0106030102060f1b0f0b03070b, + 7865 => 0x576f6c6c656c010902040b011d020704060a, + 7866 => 0x546f6e736f6e0105010b2a0e0e030608, + 7867 => 0x6e7973204c7974010d05030601160c0c07070a, + 7868 => 0x50656e6c656e20546f6d011003081e0208070a08, + 7869 => 0x4c69776c7469770104040f1f0b13060708, + 7870 => 0x4f726469726461720104020328060d040808, + 7871 => 0x497775776b75776b010701031d0a07030808, + 7872 => 0x416e6b756d01020828140a020507, + 7873 => 0x4e61696c776965686c656f6e0106030b15200c14020c09, + 7874 => 0x516971616c71616c717571010902160511040b07, + 7875 => 0x5475706d69746d696b010903210c10070907, + 7876 => 0x456c746f73696c6b010702080d230809070809, + 7877 => 0x50656c7571010c120f02230b0f050509, + 7878 => 0x5475737475737469746e756d010a0603020122040a020c0a, + 7879 => 0x4d6970616d696d7369700105040114031d0d07030a0a, + 7880 => 0x5072616e204b756e0106040322020f060808, + 7881 => 0x556c277069726e6972696c0104011c0715030b07, + 7882 => 0x456d696e6c616e756e010f08031f0b14020908, + 7883 => 0x5475726f726d6972700102080301291009030909, + 7884 => 0x48696e6d756e01050802041401310f0803060b, + 7885 => 0x486c6f6d68726f6d686c696b010f031a150d030c07, + 7886 => 0x4761696b7a686169011004200d0b070807, + 7887 => 0x4e7569736e6570204e75697301080604250406050c08, + 7888 => 0x4d616d75736501030408010f20040f04060a, + 7889 => 0x59756e79756e010e01200a0e020607, + 7890 => 0x50616e68616d0102020603220f0e030609, + 7891 => 0x4e6f726720546f7274010e02180510020907, + 7892 => 0x546169746d697576010402060104030f21090f06080c, + 7893 => 0x4f746f6c616c01050406130c08050608, + 7894 => 0x54656c697370756b01071201080315061e060c03080c, + 7895 => 0x5a697275727a680101010803260906060709, + 7896 => 0x4d696e74656b6f6e01070b061f090c070808, + 7897 => 0x6e696e2d53696e6472696e01100204010314200405030b0b, + 7898 => 0x476f736b6f73676f6b010b0403260e0f050908, + 7899 => 0x456868756865686c7577756c010d0502010328130c020c0a, + 7900 => 0x4d756e677571010c01080322020e040609, + 7901 => 0x4c696b6b696b01050305020622080703060a, + 7902 => 0x4e656e656b6574756e656e6501100401020e21170c070c0a, + 7903 => 0x4f686f6d6f6865707574010c060302011e070c030a0a, + 7904 => 0x41736368756c6f730109020306041b0b1307080a, + 7905 => 0x5169756771697567010103020129010e050809, + 7906 => 0x4c69276577696d65010308030207011b140504080b, + 7907 => 0x4d756e6f204d656d6d61680106010b04180d05070b09, + 7908 => 0x4e656c6b726570204e6f6d010a0b140803250206060b0a, + 7909 => 0x416b6173616b67656b0107040103180a11040909, + 7910 => 0x5469706d6c756e0101030408020625020d07070b, + 7911 => 0x416c6973696b6973757301050301020604190315070a0b, + 7912 => 0x53706f6e616d6b69726b6901020208010b031c0514070b0b, + 7913 => 0x41757074756e6f6e6e656c010d0304200d0b070b08, + 7914 => 0x556e20616e20556e696e67010a0206010e200a09040b0a, + 7915 => 0x45736e657a680108031b0912050607, + 7916 => 0x4b696b6b696b74616b010c030207040b27011305090b, + 7917 => 0x5a756769204469676977690110030207050b011023040f060b0d, + 7918 => 0x4c616b6d616b010101021d020f050608, + 7919 => 0x48697074696801020b040103021a070b05060b, + 7920 => 0x55686b756b756e6b7574010b021a0315070a07, + 7921 => 0x4e696b616c010f0103081b0b07050509, + 7922 => 0x55756b756b6c616b696b010502030b110122020c040a0b, + 7923 => 0x48756b7a756b7a756b01030b02030119051304090a, + 7924 => 0x4d656e204b68696e736c656e01050b100608190508020c0a, + 7925 => 0x5069707779692701010f06210414060708, + 7926 => 0x536b616b736c6f6b736b6f6b010a100301022f1a08060c0a, + 7927 => 0x53757674656a0102040e0b07031a021107060b, + 7928 => 0x486f6b686f6b6e6c752701100c050217050f030a09, + 7929 => 0x536b6f7a68736e75736368010d0417060e040b07, + 7930 => 0x53616b2d74692d4173687564010901150b03021e0908060c0b, + 7931 => 0x54756365682d657a2d5a6f010b012a060f030b07, + 7932 => 0x4d72656e6c6f70010802030401170a1405070a, + 7933 => 0x536b69737367617273676970010e04200c08070c07, + 7934 => 0x54656569696c6c6f656574010d0d0b03160d12070b09, + 7935 => 0x4d79697461616d010b03082a1205050708, + 7936 => 0x48616e7461686e796e74796e0107061d1005030c07, + 7937 => 0x556b756b6174616e7570756b010f03020104260406020c0a, + 7938 => 0x506f746c6f6b6c6f6e010c02031b1008020908, + 7939 => 0x556c73756c676b756c6d01020403021e0c08030a09, + 7940 => 0x556d6e696e6d616d27696d0109041d0109070b07, + 7941 => 0x4b6f6d6f6d01010103051c0b0d050509, + 7942 => 0x4d6f73736c6170010c0610070103021e111405070c, + 7943 => 0x54756e2d54756d0109080e0203011c0f1307070b, + 7944 => 0x51696e7371696d6e67696e6701090b050f011b0405060c0a, + 7945 => 0x536b656b74756b7374616b01070304071f0b15060b09, + 7946 => 0x5a75697370656173676f75010402060304200a0d020b0a, + 7947 => 0x4e656e756e616b20416b6e650110030204011a0b05020c0a, + 7948 => 0x47686f6e7368696e010501250a05060807, + 7949 => 0x4c656b6c656b6b756e0102020f0d0425111507090a, + 7950 => 0x452072617a20456e676f7a010208030701061f120b030b0b, + 7951 => 0x5563687572636875720108080213011d0c0904090a, + 7952 => 0x556b7570757401090607041f0b0a030609, + 7953 => 0x536e6f6e736e6f746b6f740101060203042d1309050b0a, + 7954 => 0x616b2053696b73696b010f0e0514070115080d04090b, + 7955 => 0x496b70697370756d010408030c01200e0802080a, + 7956 => 0x5375726f6c010608020c24180b070509, + 7957 => 0x417564656269657265697a680107030607011e120e070c0a, + 7958 => 0x4d75656e6f616e01010b020f012b041104070a, + 7959 => 0x4b6f63682d42656a01070206040822071102080a, + 7960 => 0x4879616d27697777756e010f0b01032c020f070a09, + 7961 => 0x486c656e6e6c756e6e6c756e010107110d10020c07, + 7962 => 0x54656e656e64656e6e6501100204150309050a08, + 7963 => 0x426f64626f642d427562010105010321090f040a09, + 7964 => 0x4f706f706f2775770102020403010825100506080b, + 7965 => 0x5461747374690103030d210e12040608, + 7966 => 0x49776d6f77732d49776d011006020708011403240b13040a0d, + 7967 => 0x4e757320756b2055796b010502061a0b13030a08, + 7968 => 0x5365737372616b73726173010f040327040c060b08, + 7969 => 0x4d61647567010707040225080f030509, + 7970 => 0x476f7a6162650102090406010218091107060b, + 7971 => 0x41756a616a6875777577010c030d1c100f040a08, + 7972 => 0x5775726e757775010e010803041e0a0d03070a, + 7973 => 0x496d6b756e616e010302031b0d0f040708, + 7974 => 0x75742041737573706961010d0b030102081d0f11050a0b, + 7975 => 0x50696b70696b01050603140401260f0707060b, + 7976 => 0x47756c73676f676f646f6c010a010312021a080e070b0a, + 7977 => 0x5a616d756b6368756b6101080b1f040a060a07, + 7978 => 0x50696520486964696d68696501050502200912070c08, + 7979 => 0x4b616e696e2065204f706f6e010710020103061d0f08030c0b, + 7980 => 0x4b656d752027652765010c0402130911060908, + 7981 => 0x4f6d7570656c656d756e01080407030c0510050f060a0b, + 7982 => 0x27757a757a68276f7a75780105030116090f050b08, + 7983 => 0x416f6e676b696e01080306010226021002070a, + 7984 => 0x4e6c656d6c77656e6c77656e0104040308011c1808030c0a, + 7985 => 0x556d73696e73616e616e696e010403010428010c020c09, + 7986 => 0x536e7573736d756e0110032a0210020807, + 7987 => 0x506165736f696d6b697773010813020c042d1609040b0a, + 7988 => 0x426f6167686175010c06041a130c060708, + 7989 => 0x4e65736c6501090603220606040508, + 7990 => 0x4c7769706d61277077696e010c04010528110a040b09, + 7991 => 0x536d6973736d757a6d6173010c0301040806200a0b050b0b, + 7992 => 0x546569736f6570616973010206020801031a0608040a0b, + 7993 => 0x4e6173756c2d4e7572676e6101100f0301022d1413070c0a, + 7994 => 0x4d6168616e61010f021a040a050607, + 7995 => 0x4b656d70756b0101040302081e060b04060a, + 7996 => 0x4b616e2054756e73756e01060203190a11040a08, + 7997 => 0x496d6b696e01040c031c100e050508, + 7998 => 0x4e616f6c6c6f706d696f6c01080401150b0f070b08, + 7999 => 0x4c75746f6c746c75010e070802240215070809, + 8000 => 0x4b696c766b69706b696c76010b020d040308281208070b0b, + _ => panic!("max token id exceeded") + } +} diff --git a/season_pass/contracts/src/mock/realms/realms.cairo b/season_pass/contracts/src/mock/realms/realms.cairo new file mode 100644 index 000000000..958a0e73d --- /dev/null +++ b/season_pass/contracts/src/mock/realms/realms.cairo @@ -0,0 +1,110 @@ +#[starknet::interface] +trait IRealmMetadataEncoded { + fn get_encoded_metadata(self: @TState, token_id: u16) -> (felt252, felt252, felt252); +} + +#[starknet::interface] +trait IERC721Minter { + fn mint(ref self: TState, token_id: u256); +} + +#[starknet::contract] +mod TestRealm { + use openzeppelin::access::ownable::OwnableComponent; + use openzeppelin::introspection::src5::SRC5Component; + use openzeppelin::token::erc721::interface::{IERC721Metadata}; + use openzeppelin::token::erc721::{ERC721Component, ERC721HooksEmptyImpl}; + use openzeppelin::upgrades::UpgradeableComponent; + use openzeppelin::upgrades::interface::IUpgradeable; + + use starknet::{ContractAddress, ClassHash}; + use super::super::metadata::compressed_name_and_attrs; + use super::{IRealmMetadataEncoded, IERC721Minter}; + + component!(path: ERC721Component, storage: erc721, event: ERC721Event); + component!(path: OwnableComponent, storage: ownable, event: OwnableEvent); + component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); + component!(path: SRC5Component, storage: src5, event: SRC5Event); + + // ERC721 + #[abi(embed_v0)] + impl ERC721Impl = ERC721Component::ERC721Impl; + // Ownables + #[abi(embed_v0)] + impl OwnableImpl = OwnableComponent::OwnableImpl; + + + impl ERC721InternalImpl = ERC721Component::InternalImpl; + impl OwnableInternalImpl = OwnableComponent::InternalImpl; + impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl; + + #[storage] + struct Storage { + #[substorage(v0)] + erc721: ERC721Component::Storage, + #[substorage(v0)] + ownable: OwnableComponent::Storage, + #[substorage(v0)] + upgradeable: UpgradeableComponent::Storage, + #[substorage(v0)] + src5: SRC5Component::Storage + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + #[flat] + ERC721Event: ERC721Component::Event, + #[flat] + OwnableEvent: OwnableComponent::Event, + #[flat] + UpgradeableEvent: UpgradeableComponent::Event, + #[flat] + SRC5Event: SRC5Component::Event + } + + + #[abi(embed_v0)] + impl ERC721Metadata of IERC721Metadata { + fn name(self: @ContractState) -> ByteArray { + self.erc721.ERC721_name.read() + } + + fn symbol(self: @ContractState) -> ByteArray { + self.erc721.ERC721_symbol.read() + } + + fn token_uri(self: @ContractState, token_id: u256) -> ByteArray { + "" + } + } + + #[abi(embed_v0)] + impl RealmMetadataEncoded of IRealmMetadataEncoded { + fn get_encoded_metadata(self: @ContractState, token_id: u16) -> (felt252, felt252, felt252) { + (compressed_name_and_attrs(token_id.into()), 0, 0) + } + } + + #[abi(embed_v0)] + impl UpgradeableImpl of IUpgradeable { + fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { + self.ownable.assert_only_owner(); + self.upgradeable.upgrade(new_class_hash); + } + } + + #[abi(embed_v0)] + impl ERC721MinterImpl of IERC721Minter { + fn mint(ref self: ContractState, token_id: u256) { + // allow anyone mint + self.erc721.mint(starknet::get_caller_address(), token_id); + } + } + + #[constructor] + fn constructor(ref self: ContractState, owner: ContractAddress) { + self.erc721.initializer("Test Realms (for Adventurers)", "TestLootRealm", ""); + self.ownable.initializer(owner); + } +} diff --git a/season_pass/contracts/src/tests/test_season_pass.cairo b/season_pass/contracts/src/tests/test_season_pass.cairo new file mode 100644 index 000000000..43986bc8e --- /dev/null +++ b/season_pass/contracts/src/tests/test_season_pass.cairo @@ -0,0 +1,220 @@ +#[cfg(test)] +mod tests { + use esp::contract::{EternumSeasonPass as season_pass_contract, ISeasonPassDispatcher, ISeasonPassDispatcherTrait}; + use esp::mock::lords::{ITestLords, ITestLordsDispatcher, ITestLordsDispatcherTrait}; + use esp::mock::realms::realms::{IRealmMetadataEncodedDispatcher, IRealmMetadataEncodedDispatcherTrait}; + use esp::mock::realms::realms::{ + TestRealm as realms_contract, IERC721MinterDispatcher, IERC721MinterDispatcherTrait + }; + + use openzeppelin::access::ownable::interface::{IOwnableDispatcher, IOwnableDispatcherTrait}; + use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; + use openzeppelin::token::erc721::interface::{IERC721Dispatcher, IERC721DispatcherTrait}; + use openzeppelin::upgrades::interface::{IUpgradeableDispatcher, IUpgradeableDispatcherTrait}; + use snforge_std::{ + cheatcodes::{l1_handler::L1HandlerTrait}, declare, ContractClass, ContractClassTrait, + start_cheat_caller_address, stop_cheat_caller_address, get_class_hash, spy_events, DeclareResultTrait + }; + + use starknet::{ContractAddress, ClassHash, EthAddress}; + + fn ADMIN() -> ContractAddress { + starknet::contract_address_const::<'ADMIN'>() + } + + fn ALICE() -> ContractAddress { + starknet::contract_address_const::<'ALICE'>() + } + + fn BOB() -> ContractAddress { + starknet::contract_address_const::<'BOB'>() + } + + fn ALICE_REALMS_ID() -> u256 { + 1 + } + + fn BOB_REALMS_ID() -> u256 { + 2 + } + + + fn TEST_REALMS() -> ContractAddress { + let realms_class = declare("TestRealm").unwrap().contract_class(); + let (addr, _) = realms_class.deploy(@array![ADMIN().into()]).unwrap(); + addr + } + + fn TEST_LORDS() -> ContractAddress { + let lords_class = declare("TestLords").unwrap().contract_class(); + let (addr, _) = lords_class.deploy(@array![]).unwrap(); + addr + } + + fn SEASON_PASS() -> (ContractAddress, ContractAddress, ContractAddress) { + let season_pass_class = declare("EternumSeasonPass").unwrap().contract_class(); + let realms = TEST_REALMS(); + let lords = TEST_LORDS(); + + // deploy season pass contract + let mut constructor_calldata = array![]; + ADMIN().serialize(ref constructor_calldata); + realms.serialize(ref constructor_calldata); + lords.serialize(ref constructor_calldata); + let (addr, _) = season_pass_class.deploy(@constructor_calldata).unwrap(); + + // set season pass address in lords contract + ITestLordsDispatcher { contract_address: lords }.set_season_pass(addr); + + (addr, realms, lords) + } + + + #[test] + fn test_mint_pass() { + let (season_pass, realms, _) = SEASON_PASS(); + + let realms_mint_dispatcher = IERC721MinterDispatcher { contract_address: realms }; + let season_pass_dispatcher = ISeasonPassDispatcher { contract_address: season_pass }; + let season_pass_erc721_dispatcher = IERC721Dispatcher { contract_address: season_pass }; + + // ensure alice has no pass + assert!(season_pass_erc721_dispatcher.balance_of(ALICE()).is_zero(), "expected alice to have no pass"); + + // alice buys realms nft + start_cheat_caller_address(realms, ALICE()); + realms_mint_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(realms); + + // alice gets pass using realms nft + start_cheat_caller_address(season_pass, ALICE()); + season_pass_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(season_pass); + + // ensure alice has pass + assert!(season_pass_erc721_dispatcher.balance_of(ALICE()) == 1, "expected alice to have pass"); + + // ensure encoded metadata is correct + let (realms_metadata, _a, _b) = IRealmMetadataEncodedDispatcher { contract_address: realms } + .get_encoded_metadata(ALICE_REALMS_ID().try_into().unwrap()); + + let (season_pass_metadata, _a, _b) = IRealmMetadataEncodedDispatcher { contract_address: season_pass } + .get_encoded_metadata(ALICE_REALMS_ID().try_into().unwrap()); + assert!( + realms_metadata == season_pass_metadata, "expected realms metadata to be equal to season pass metadata" + ); + } + + #[test] + fn test_attach_lords_to_pass() { + let (season_pass, realms, lords) = SEASON_PASS(); + + let lords_dispatcher = ITestLordsDispatcher { contract_address: lords }; + let realms_mint_dispatcher = IERC721MinterDispatcher { contract_address: realms }; + let season_pass_dispatcher = ISeasonPassDispatcher { contract_address: season_pass }; + + // alice buys realms nft + start_cheat_caller_address(realms, ALICE()); + realms_mint_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(realms); + + // alice gets pass using realms nft + start_cheat_caller_address(season_pass, ALICE()); + season_pass_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(season_pass); + + // get free lords from pass + lords_dispatcher.mint(ALICE_REALMS_ID()); + // ensure amount attached to token is non zero + assert!( + season_pass_dispatcher.lords_balance(ALICE_REALMS_ID().into()) > 0, "expected alice to have some lords" + ); + } + + + #[test] + fn test_detach_lords_from_pass() { + let (season_pass, realms, lords) = SEASON_PASS(); + + let lords_dispatcher = ITestLordsDispatcher { contract_address: lords }; + let realms_mint_dispatcher = IERC721MinterDispatcher { contract_address: realms }; + let season_pass_dispatcher = ISeasonPassDispatcher { contract_address: season_pass }; + + // alice buys realms nft + start_cheat_caller_address(realms, ALICE()); + realms_mint_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(realms); + + // alice gets pass using realms nft + start_cheat_caller_address(season_pass, ALICE()); + season_pass_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(season_pass); + + // get free lords from pass + lords_dispatcher.mint(ALICE_REALMS_ID()); + + // detach amount + let minted_lords_amount = season_pass_dispatcher.lords_balance(ALICE_REALMS_ID().into()); + start_cheat_caller_address(season_pass, ALICE()); + season_pass_dispatcher.detach_lords(ALICE_REALMS_ID().into(), minted_lords_amount); + stop_cheat_caller_address(season_pass); + + // ensure detachment was successful + assert!( + IERC20Dispatcher { contract_address: lords }.balance_of(ALICE()) == minted_lords_amount, + "expected alice to actual lords in balance" + ); + assert!( + season_pass_dispatcher.lords_balance(ALICE_REALMS_ID().into()) == 0, "expected attached balance to be 0" + ); + } + + #[test] + #[should_panic(expected: "ESP: Only season pass owner can detach lords")] + fn test_detach_lords_from_pass_only_owner() { + let (season_pass, realms, lords) = SEASON_PASS(); + + let lords_dispatcher = ITestLordsDispatcher { contract_address: lords }; + let realms_mint_dispatcher = IERC721MinterDispatcher { contract_address: realms }; + let season_pass_dispatcher = ISeasonPassDispatcher { contract_address: season_pass }; + + // alice buys realms nft + start_cheat_caller_address(realms, ALICE()); + realms_mint_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(realms); + + // alice gets pass using realms nft + start_cheat_caller_address(season_pass, ALICE()); + season_pass_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(season_pass); + + // get free lords from pass + lords_dispatcher.mint(ALICE_REALMS_ID()); + + // attempt detach + let minted_lords_amount = season_pass_dispatcher.lords_balance(ALICE_REALMS_ID().into()); + season_pass_dispatcher.detach_lords(ALICE_REALMS_ID().into(), minted_lords_amount); + } + + #[test] + #[should_panic(expected: "ESP: Only realm owner can mint season pass")] + fn test_only_owner_can_mint_pass() { + let (season_pass, realms, _) = SEASON_PASS(); + + let realms_mint_dispatcher = IERC721MinterDispatcher { contract_address: realms }; + let season_pass_dispatcher = ISeasonPassDispatcher { contract_address: season_pass }; + let season_pass_erc721_dispatcher = IERC721Dispatcher { contract_address: season_pass }; + + // ensure alice has no pass + assert!(season_pass_erc721_dispatcher.balance_of(ALICE()).is_zero(), "expected alice to have no pass"); + + // alice buys realms nft + start_cheat_caller_address(realms, ALICE()); + realms_mint_dispatcher.mint(ALICE_REALMS_ID()); + stop_cheat_caller_address(realms); + + // bob tries to mint pass + start_cheat_caller_address(season_pass, BOB()); + season_pass_dispatcher.mint(ALICE_REALMS_ID()); + } +} diff --git a/season_pass/scripts/deployment/.env.example b/season_pass/scripts/deployment/.env.example new file mode 100644 index 000000000..5b1700a22 --- /dev/null +++ b/season_pass/scripts/deployment/.env.example @@ -0,0 +1,8 @@ + +export RPC_API_KEY=http://127.0.0.1:5050 +export STARKNET_NETWORK=local +export STARKNET_ACCOUNT_ADDRESS=0xb3ff441a68610b30fd5e2abbf3a1548eb6ba6f3559f2862bf2dc757e5828ca +export STARKNET_ACCOUNT_PRIVATE_KEY=0x2bbf4f9fd0bbb2e60b0316c1fe0b76cf7a4d0198bd493ced9b8df2a3a24d68a + +export DEPLOYMENT_ADDRESSES_FOLDER=addresses/dev # change to addresses/prod for prod +export SEASON_PASS_ADMIN=0x1a3e37c77be7de91a9177c6b57956faa6da25607e567b10a25cf64fea5e533b # change to prod admin address \ No newline at end of file diff --git a/season_pass/scripts/deployment/.gitignore b/season_pass/scripts/deployment/.gitignore new file mode 100644 index 000000000..2eea525d8 --- /dev/null +++ b/season_pass/scripts/deployment/.gitignore @@ -0,0 +1 @@ +.env \ No newline at end of file diff --git a/season_pass/scripts/deployment/addresses/dev/season_pass.json b/season_pass/scripts/deployment/addresses/dev/season_pass.json new file mode 100644 index 000000000..0821fb4b8 --- /dev/null +++ b/season_pass/scripts/deployment/addresses/dev/season_pass.json @@ -0,0 +1,10 @@ +{ + "address": "0x69094dae62b02e63ddb0e52986db1175608de6944ff0ef37c736b4cd94762d3", + "calldata": [ + "0x1a3e37c77be7de91a9177c6b57956faa6da25607e567b10a25cf64fea5e533b", + "0x5eda62b7df3205bcf19a302a6628431876c2459877369df927e47ae396acb14", + "0x3d5dd2d7f4a672c15c879e0298fe1efae6f5c462e2328600c9a785270f571ea" + ], + "deployed_at": 1729253392316, + "deployed_at_readable": "Fri, 18 Oct 2024 12:09:52 GMT" +} diff --git a/season_pass/scripts/deployment/addresses/dev/test_lords.json b/season_pass/scripts/deployment/addresses/dev/test_lords.json new file mode 100644 index 000000000..af04ba9e5 --- /dev/null +++ b/season_pass/scripts/deployment/addresses/dev/test_lords.json @@ -0,0 +1,6 @@ +{ + "address": "0x3d5dd2d7f4a672c15c879e0298fe1efae6f5c462e2328600c9a785270f571ea", + "calldata": [], + "deployed_at": 1729253357617, + "deployed_at_readable": "Fri, 18 Oct 2024 12:09:17 GMT" +} diff --git a/season_pass/scripts/deployment/addresses/dev/test_realms.json b/season_pass/scripts/deployment/addresses/dev/test_realms.json new file mode 100644 index 000000000..0efbb4e24 --- /dev/null +++ b/season_pass/scripts/deployment/addresses/dev/test_realms.json @@ -0,0 +1,6 @@ +{ + "address": "0x5eda62b7df3205bcf19a302a6628431876c2459877369df927e47ae396acb14", + "calldata": ["0x1a3e37c77be7de91a9177c6b57956faa6da25607e567b10a25cf64fea5e533b"], + "deployed_at": 1729253324782, + "deployed_at_readable": "Fri, 18 Oct 2024 12:08:44 GMT" +} diff --git a/season_pass/scripts/deployment/deploy_dev.js b/season_pass/scripts/deployment/deploy_dev.js new file mode 100644 index 000000000..b2ca23b0a --- /dev/null +++ b/season_pass/scripts/deployment/deploy_dev.js @@ -0,0 +1,20 @@ +import { + deploySeasonPassContract, + deployTestLordsContract, + deployTestRealmsContract, + setSeasonPassAddressTestLordsContract, +} from "./libs/commands.js"; + +console.log(` ____ _ `.red); +console.log(` | \\ ___ ___| |___ _ _ `.red); +console.log(` | | | -_| . | | . | | |`.red); +console.log(` |____/|___| _|_|___|_ |`.red); +console.log(` |_| |___|`.red); + +const testRealmsContractAddress = await deployTestRealmsContract(); +let testLordsContractAddress = await deployTestLordsContract(); +let seasonPassAddress = await deploySeasonPassContract( + BigInt(testRealmsContractAddress), + BigInt(testLordsContractAddress), +); +await setSeasonPassAddressTestLordsContract(BigInt(testLordsContractAddress), BigInt(seasonPassAddress)); diff --git a/season_pass/scripts/deployment/deploy_prod.js b/season_pass/scripts/deployment/deploy_prod.js new file mode 100644 index 000000000..b3525c9f5 --- /dev/null +++ b/season_pass/scripts/deployment/deploy_prod.js @@ -0,0 +1,18 @@ +import { deploySeasonPassContract } from "./libs/commands.js"; + +console.log(` ____ _ `.red); +console.log(` | \\ ___ ___| |___ _ _ `.red); +console.log(` | | | -_| . | | . | | |`.red); +console.log(` |____/|___| _|_|___|_ |`.red); +console.log(` |_| |___|`.red); + +const realmsContractAddress = BigInt(0); // set the address here +const lordsContractAddress = BigInt(0); // set the address here +const seasonPassContractAddress = await deploySeasonPassContract( + BigInt(realmsContractAddress), + BigInt(lordsContractAddress), +); + +console.log(`Realms Contract Address: ${realmsContractAddress}`); +console.log(`Lords Contract Address: ${lordsContractAddress}`); +console.log(`Season Pass Contract Address: ${seasonPassContractAddress}`); diff --git a/season_pass/scripts/deployment/libs/commands.js b/season_pass/scripts/deployment/libs/commands.js new file mode 100644 index 000000000..4055de2d9 --- /dev/null +++ b/season_pass/scripts/deployment/libs/commands.js @@ -0,0 +1,92 @@ +import "dotenv/config"; +import * as path from "path"; +import { fileURLToPath } from "url"; +import { declare, deploy, getContractPath } from "./common.js"; +import { getAccount, getNetwork } from "./network.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const TARGET_PATH = path.join(__dirname, "..", "..", "..", "contracts", "target", "release"); + +export const deploySeasonPassContract = async (realmsContractAddress, lordsContractAddress) => { + /////////////////////////////////////////// + //////// Season Pass Contract ////////// + /////////////////////////////////////////// + + // declare contract + let casualName = "season_pass"; + let projectName = "esp"; // eternum season pass + let contractName = "EternumSeasonPass"; + const class_hash = (await declare(getContractPath(TARGET_PATH, projectName, contractName), casualName)).class_hash; + + // deploy contract + let SEASON_PASS_ADMIN = BigInt(process.env.SEASON_PASS_ADMIN); + let SEASON_PASS_REALMS_CONTRACT = BigInt(realmsContractAddress); + let SEASON_PASS_LORDS_CONTRACT = BigInt(lordsContractAddress); + + let constructorCalldata = [SEASON_PASS_ADMIN, SEASON_PASS_REALMS_CONTRACT, SEASON_PASS_LORDS_CONTRACT]; + let address = await deploy(casualName, class_hash, constructorCalldata); + return address; +}; + +export const deployTestRealmsContract = async () => { + /////////////////////////////////////////// + //////// Test Realms Contract //////// + /////////////////////////////////////////// + + // declare contract + let casualName = "test_realms"; + let projectName = "esp"; // eternum season pass + let contractName = "TestRealm"; + const class_hash = (await declare(getContractPath(TARGET_PATH, projectName, contractName), casualName)).class_hash; + + // deploy contract + let TEST_REALMS_ADMIN = BigInt(process.env.SEASON_PASS_ADMIN); + let constructorCalldata = [TEST_REALMS_ADMIN]; + let address = await deploy(casualName, class_hash, constructorCalldata); + return address; +}; + +export const deployTestLordsContract = async () => { + /////////////////////////////////////////// + //////// Test Lords Contract //////// + /////////////////////////////////////////// + + // declare contract + let casualName = "test_lords"; + let projectName = "esp"; // eternum season pass + let contractName = "TestLords"; + const class_hash = (await declare(getContractPath(TARGET_PATH, projectName, contractName), casualName)).class_hash; + + // deploy contract + let constructorCalldata = []; + let address = await deploy(casualName, class_hash, constructorCalldata); + return address; +}; + +export const setSeasonPassAddressTestLordsContract = async (lordsContractAddress, seasonPassAddress) => { + /////////////////////////////////////////// + // Set Season Pass Addr in TLords Contract + /////////////////////////////////////////// + + const account = getAccount(); + console.log(`\n Setting Season Pass Addr in Test Lords Contract ... \n\n`.green); + + const contract = await account.execute([ + { + contractAddress: lordsContractAddress, + entrypoint: "set_season_pass", + calldata: [seasonPassAddress], + }, + ]); + + // Wait for transaction + let network = getNetwork(process.env.STARKNET_NETWORK); + console.log("Tx hash: ".green, `${network.explorer_url}/tx/${contract.transaction_hash})`); + await account.waitForTransaction(contract.transaction_hash); + + console.log( + `Successfully season pass address to ${seasonPassAddress} in test lords contract ${lordsContractAddress}`.green, + "\n\n", + ); +}; diff --git a/season_pass/scripts/deployment/libs/common.js b/season_pass/scripts/deployment/libs/common.js new file mode 100644 index 000000000..2c6f6058a --- /dev/null +++ b/season_pass/scripts/deployment/libs/common.js @@ -0,0 +1,152 @@ +import colors from "colors"; +import "dotenv/config"; +import * as fs from "fs"; +import * as path from "path"; +import { json } from "starknet"; +import { promisify } from "util"; +import { getAccount, getNetwork } from "./network.js"; + +colors.america; +export const getContracts = (TARGET_PATH) => { + if (!fs.existsSync(TARGET_PATH)) { + throw new Error(`Target directory not found at path: ${TARGET_PATH}`); + } + const contracts = fs.readdirSync(TARGET_PATH).filter((contract) => contract.includes(".contract_class.json")); + if (contracts.length === 0) { + throw new Error("No build files found. Run `scarb build` first"); + } + return contracts; +}; + +export const getContractPath = (TARGET_PATH, project_name, contract_name) => { + const fileName = `${project_name}_${contract_name}`; + const contracts = getContracts(TARGET_PATH); + const c = contracts.find((contract) => contract.includes(fileName)); + if (!c) { + throw new Error(`Contract not found: ${fileName}`); + } + console.log(`\nFound contract path at ${c}...\n`.blue); + return path.join(TARGET_PATH, c); +}; + +export const declare = async (filepath, contract_name) => { + console.log(`\nDeclaring ${contract_name}...\n\n`.magenta); + const compiledSierraCasm = filepath.replace(".contract_class.json", ".compiled_contract_class.json"); + const compiledFile = json.parse(fs.readFileSync(filepath).toString("ascii")); + const compiledSierraCasmFile = json.parse(fs.readFileSync(compiledSierraCasm).toString("ascii")); + + const account = getAccount(); + const contract = await account.declareIfNot({ + contract: compiledFile, + casm: compiledSierraCasmFile, + }); + + const network = getNetwork(process.env.STARKNET_NETWORK); + console.log(`- Class Hash: `.magenta, `${contract.class_hash}`); + if (contract.transaction_hash) { + console.log("- Tx Hash: ".magenta, `${network.explorer_url}/tx/${contract.transaction_hash})`); + await account.waitForTransaction(contract.transaction_hash); + } else { + console.log("- Tx Hash: ".magenta, "Already declared"); + } + + return contract; +}; + +export const deploy = async (name, class_hash, constructorCalldata) => { + // Deploy contract + const account = getAccount(); + console.log(`\nDeploying ${name} ... \n\n`.green); + let contract = await account.deployContract({ + classHash: class_hash, + constructorCalldata: constructorCalldata, + }); + + // Wait for transaction + let network = getNetwork(process.env.STARKNET_NETWORK); + console.log("Tx hash: ".green, `${network.explorer_url}/tx/${contract.transaction_hash})`); + let a = await account.waitForTransaction(contract.transaction_hash); + console.log("Contract Address: ".green, contract.address, "\n\n"); + + await writeDeploymentToFile(name, contract.address, constructorCalldata); + + return contract.address; +}; + +const mkdirAsync = promisify(fs.mkdir); +const writeFileAsync = promisify(fs.writeFile); +export const writeDeploymentToFile = async (contractName, address, calldata) => { + try { + const folderPath = process.env.DEPLOYMENT_ADDRESSES_FOLDER; + await mkdirAsync(folderPath, { recursive: true }); + + const fileName = path.join(folderPath, `${contractName}.json`); + + const data = { + address, + calldata, + deployed_at: Date.now(), + deployed_at_readable: new Date().toUTCString(), + }; + + // Convert BigInt to hex string + const jsonString = JSON.stringify( + data, + (key, value) => { + if (typeof value === "bigint") { + return "0x" + value.toString(16); + } + return value; + }, + 2, + ); + + await writeFileAsync(fileName, jsonString); + console.log(`"${fileName}" has been saved or overwritten`); + } catch (err) { + console.error("Error writing file", err); + throw err; // Re-throw the error so the caller knows something went wrong + } +}; + +const readFileAsync = promisify(fs.readFile); + +export const getDeployedAddress = async (contractName) => { + const folderPath = process.env.DEPLOYMENT_ADDRESSES_FOLDER; + const fileName = path.join(folderPath, `${contractName}.json`); + + try { + const data = await readFileAsync(fileName, "utf8"); + const jsonData = JSON.parse(data); + return jsonData.address; + } catch (err) { + if (err.code === "ENOENT") { + console.error(`File not found: ${fileName}`); + } else if (err instanceof SyntaxError) { + console.error("Error parsing JSON:", err); + } else { + console.error("Error reading file:", err); + } + throw err; // Re-throw the error so the caller knows something went wrong + } +}; + +export const getProxyAddress = async (contractName) => { + const folderPath = process.env.DEPLOYMENT_ADDRESSES_FOLDER; + const fileName = path.join(folderPath, `${contractName}.json`); + + try { + const data = await readFileAsync(fileName, "utf8"); + const jsonData = JSON.parse(data); + return jsonData.data.proxy_address; + } catch (err) { + if (err.code === "ENOENT") { + console.error(`File not found: ${fileName}`); + } else if (err instanceof SyntaxError) { + console.error("Error parsing JSON:", err); + } else { + console.error("Error reading file:", err); + } + throw err; // Re-throw the error so the caller knows something went wrong + } +}; diff --git a/season_pass/scripts/deployment/libs/network.js b/season_pass/scripts/deployment/libs/network.js new file mode 100644 index 000000000..6f57b58c9 --- /dev/null +++ b/season_pass/scripts/deployment/libs/network.js @@ -0,0 +1,46 @@ +import "dotenv/config"; +import { Account, RpcProvider } from "starknet"; + +const NETWORKS = { + mainnet: { + name: "mainnet", + explorer_url: "https://voyager.online", + rpc_url: `${process.env.RPC_API_KEY}`, + feeder_gateway_url: "https://alpha-mainnet.starknet.io/feeder_gateway", + gateway_url: "https://alpha-mainnet.starknet.io/gateway", + }, + sepolia: { + name: "sepolia", + explorer_url: "https://sepolia.voyager.online", + rpc_url: `https://free-rpc.nethermind.io/sepolia-juno`, + feeder_gateway_url: "https://alpha-sepolia.starknet.io/feeder_gateway", + gateway_url: "https://alpha-sepolia.starknet.io/gateway", + }, + local: { + name: "local", + explorer_url: "http://127.0.0.1:8000", + rpc_url: `http://127.0.0.1:5050`, + feeder_gateway_url: "http://127.0.0.1:5050/feeder_gateway", + gateway_url: "http://127.0.0.1:5050/gateway", + }, +}; + +export const getNetwork = (network) => { + if (!NETWORKS[network.toLowerCase()]) { + throw new Error(`Network ${network} not found`); + } + return NETWORKS[network.toLowerCase()]; +}; + +export const getProvider = () => { + let network = getNetwork(process.env.STARKNET_NETWORK); + return new RpcProvider({ nodeUrl: network.rpc_url }); +}; + +export const getAccount = () => { + const provider = getProvider(); + const accountAddress = process.env.STARKNET_ACCOUNT_ADDRESS; + const privateKey = process.env.STARKNET_ACCOUNT_PRIVATE_KEY; + const cairoVersion = "1"; + return new Account(provider, accountAddress, privateKey, cairoVersion); +}; diff --git a/season_pass/scripts/deployment/package-lock.json b/season_pass/scripts/deployment/package-lock.json new file mode 100644 index 000000000..46f833531 --- /dev/null +++ b/season_pass/scripts/deployment/package-lock.json @@ -0,0 +1,558 @@ +{ + "name": "scripts", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "scripts", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "colors": "^1.4.0", + "dotenv": "^16.3.1", + "starknet": "^6.8.0" + }, + "devDependencies": { + "prettier": "3.1.1" + } + }, + "node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/starknet": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@scure/starknet/-/starknet-1.0.0.tgz", + "integrity": "sha512-o5J57zY0f+2IL/mq8+AYJJ4Xpc1fOtDhr+mFQKbHnYFmm3WQrC+8zj2HEgxak1a+x86mhmBC1Kq305KUpVf0wg==", + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/starknet/node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/starknet/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@starknet-io/types-js": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@starknet-io/types-js/-/types-js-0.7.7.tgz", + "integrity": "sha512-WLrpK7LIaIb8Ymxu6KF/6JkGW1sso988DweWu7p5QY/3y7waBIiPvzh27D9bX5KIJNRDyOoOVoHVEKYUYWZ/RQ==" + }, + "node_modules/abi-wan-kanabi": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/abi-wan-kanabi/-/abi-wan-kanabi-2.2.3.tgz", + "integrity": "sha512-JlqiAl9CPvTm5kKG0QXmVCWNWoC/XyRMOeT77cQlbxXWllgjf6SqUmaNqFon72C2o5OSZids+5FvLdsw6dvWaw==", + "dependencies": { + "ansicolors": "^0.3.2", + "cardinal": "^2.1.1", + "fs-extra": "^10.0.0", + "yargs": "^17.7.2" + }, + "bin": { + "generate": "dist/generate.js" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "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==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "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==" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fetch-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-3.0.1.tgz", + "integrity": "sha512-ZGXe8Y5Z/1FWqQ9q/CrJhkUD73DyBU9VF0hBQmEO/wPHe4A9PKTjplFDLeFX8aOsYypZUcX5Ji/eByn3VCVO3Q==", + "dependencies": { + "set-cookie-parser": "^2.4.8", + "tough-cookie": "^4.0.0" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-starknet-core": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-starknet-core/-/get-starknet-core-4.0.0.tgz", + "integrity": "sha512-6pLmidQZkC3wZsrHY99grQHoGpuuXqkbSP65F8ov1/JsEI8DDLkhsAuLCKFzNOK56cJp+f1bWWfTJ57e9r5eqQ==", + "dependencies": { + "@starknet-io/types-js": "^0.7.7" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/is-fullwidth-code-point": { + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lossless-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lossless-json/-/lossless-json-4.0.2.tgz", + "integrity": "sha512-+z0EaLi2UcWi8MZRxA5iTb6m4Ys4E80uftGY+yG5KNFJb5EceQXOhdW/pWJZ8m97s26u7yZZAYMcKWNztSZssA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/prettier": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", + "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz", + "integrity": "sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==" + }, + "node_modules/starknet": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/starknet/-/starknet-6.11.0.tgz", + "integrity": "sha512-u50KrGDi9fbu1Ogu7ynwF/tSeFlp3mzOg1/Y5x50tYFICImo3OfY4lOz9OtYDk404HK4eUujKkhov9tG7GAKlg==", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "^1.4.0", + "@scure/base": "~1.1.3", + "@scure/starknet": "~1.0.0", + "abi-wan-kanabi": "^2.2.2", + "fetch-cookie": "^3.0.0", + "get-starknet-core": "^4.0.0-next.3", + "isomorphic-fetch": "^3.0.0", + "lossless-json": "^4.0.1", + "pako": "^2.0.4", + "starknet-types-07": "npm:@starknet-io/types-js@^0.7.7", + "ts-mixer": "^6.0.3", + "url-join": "^4.0.1" + } + }, + "node_modules/starknet-types-07": { + "name": "@starknet-io/types-js", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@starknet-io/types-js/-/types-js-0.7.7.tgz", + "integrity": "sha512-WLrpK7LIaIb8Ymxu6KF/6JkGW1sso988DweWu7p5QY/3y7waBIiPvzh27D9bX5KIJNRDyOoOVoHVEKYUYWZ/RQ==" + }, + "node_modules/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", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-mixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/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/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/season_pass/scripts/deployment/package.json b/season_pass/scripts/deployment/package.json new file mode 100644 index 000000000..985b77ba0 --- /dev/null +++ b/season_pass/scripts/deployment/package.json @@ -0,0 +1,21 @@ +{ + "name": "scripts", + "version": "1.0.0", + "type": "module", + "description": "", + "main": "index.js", + "scripts": { + "deploy": "node deploy_dev", + "deploy::prod": "node deploy_prod" + }, + "author": "", + "license": "ISC", + "dependencies": { + "colors": "^1.4.0", + "dotenv": "^16.3.1", + "starknet": "^6.8.0" + }, + "devDependencies": { + "prettier": "3.1.1" + } +}