diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..f8f9788 --- /dev/null +++ b/Pipfile @@ -0,0 +1,20 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +pywinauto = "*" +pillow = "*" +psutil = "*" +pytesseract = "*" +pyinstaller = "*" +httpx = {extras = ["brotli", "http2"], version = "*"} +tqdm = "*" +rapidfuzz = "*" + +[dev-packages] + +[requires] +python_version = "3.11" +python_full_version = "3.11.5" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..6a1a84e --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,524 @@ +{ + "_meta": { + "hash": { + "sha256": "cd3f12ab9e04f6f3f5949a12cd0ff2221ba1a12584ad3096659443a37e92ea79" + }, + "pipfile-spec": 6, + "requires": { + "python_full_version": "3.11.5", + "python_version": "3.11" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "altgraph": { + "hashes": [ + "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406", + "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff" + ], + "version": "==0.17.4" + }, + "anyio": { + "hashes": [ + "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f", + "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a" + ], + "markers": "python_version >= '3.8'", + "version": "==4.0.0" + }, + "brotli": { + "hashes": [ + "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208", + "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48", + "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354", + "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a", + "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128", + "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c", + "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088", + "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9", + "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a", + "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3", + "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438", + "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578", + "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b", + "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b", + "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68", + "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d", + "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd", + "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409", + "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da", + "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50", + "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0", + "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180", + "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d", + "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112", + "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc", + "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265", + "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327", + "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95", + "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd", + "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914", + "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0", + "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a", + "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7", + "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0", + "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451", + "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f", + "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e", + "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248", + "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91", + "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724", + "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966", + "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97", + "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d", + "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf", + "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac", + "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951", + "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74", + "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60", + "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c", + "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1", + "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8", + "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d", + "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc", + "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61", + "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460", + "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751", + "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9", + "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1", + "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474", + "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2", + "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6", + "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9", + "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2", + "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467", + "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619", + "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf", + "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408", + "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579", + "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84", + "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b", + "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59", + "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752", + "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80", + "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0", + "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2", + "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3", + "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64", + "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643", + "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e", + "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985", + "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596", + "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2", + "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064" + ], + "version": "==1.1.0" + }, + "certifi": { + "hashes": [ + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.7.22" + }, + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "markers": "platform_system == 'Windows'", + "version": "==0.4.6" + }, + "comtypes": { + "hashes": [ + "sha256:26f261b1eed6972d5cdaa3af1fadb3fa76fc59877d0a1293835327a76573380d", + "sha256:c8f2f0e995d73baf0bd899a948d62adeb9ab908c8270c66a67ff09dfcf4872b7" + ], + "version": "==1.2.0" + }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, + "h2": { + "hashes": [ + "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d", + "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb" + ], + "version": "==4.1.0" + }, + "hpack": { + "hashes": [ + "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c", + "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095" + ], + "markers": "python_full_version >= '3.6.1'", + "version": "==4.0.0" + }, + "httpcore": { + "hashes": [ + "sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9", + "sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced" + ], + "markers": "python_version >= '3.8'", + "version": "==0.18.0" + }, + "httpx": { + "extras": [ + "brotli", + "http2" + ], + "hashes": [ + "sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100", + "sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875" + ], + "markers": "python_version >= '3.8'", + "version": "==0.25.0" + }, + "hyperframe": { + "hashes": [ + "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15", + "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914" + ], + "markers": "python_full_version >= '3.6.1'", + "version": "==6.0.1" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "packaging": { + "hashes": [ + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + ], + "markers": "python_version >= '3.7'", + "version": "==23.2" + }, + "pefile": { + "hashes": [ + "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc", + "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6" + ], + "markers": "sys_platform == 'win32'", + "version": "==2023.2.7" + }, + "pillow": { + "hashes": [ + "sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff", + "sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f", + "sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21", + "sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635", + "sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a", + "sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f", + "sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1", + "sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d", + "sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db", + "sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849", + "sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7", + "sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876", + "sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3", + "sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317", + "sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91", + "sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d", + "sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b", + "sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd", + "sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed", + "sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500", + "sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7", + "sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a", + "sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a", + "sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0", + "sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf", + "sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f", + "sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1", + "sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088", + "sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971", + "sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a", + "sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205", + "sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54", + "sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08", + "sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21", + "sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d", + "sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08", + "sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e", + "sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf", + "sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b", + "sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145", + "sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2", + "sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d", + "sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d", + "sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf", + "sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad", + "sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d", + "sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1", + "sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4", + "sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2", + "sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19", + "sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37", + "sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4", + "sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68", + "sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==10.0.1" + }, + "psutil": { + "hashes": [ + "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d", + "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217", + "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4", + "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c", + "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f", + "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da", + "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4", + "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42", + "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5", + "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4", + "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9", + "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f", + "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30", + "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==5.9.5" + }, + "pyinstaller": { + "hashes": [ + "sha256:0ad7cc3776ca17d0bededcc352cba2b1c89eb4817bfabaf05972b9da8c424935", + "sha256:16a473065291dd7879bf596fa20e65bd9d1e8aafc2cef1bffa3e42e707e2e68e", + "sha256:438a9e0d72a57d5bba4f112d256e39ea4033c76c65414c0693d8311faa14b090", + "sha256:4a75bde5cda259bb31f2294960d75b9d5c148001b2b0bd20a91f9c2116675a6c", + "sha256:52e5b3a2371d7231de17515c7c78d8d4a39d70c8c095e71d55b3b83434a193a8", + "sha256:5314f6f08d2bcbc031778618ba97d9098d106119c2e616b3b081171fe42f5415", + "sha256:68769f5e6722474bb1038e35560444659db8b951388bfe0c669bb52a640cd0eb", + "sha256:aa922d1d73881d0820a341d2c406a571cc94630bdcdc275427c844a12e6e376e", + "sha256:cccdad6cfe7a5db7d7eb8df2e5678f8375268739d5933214e180da300aa54e37", + "sha256:d702cff041f30e7a53500b630e07b081e5328d4655023319253d73935e75ade2", + "sha256:d84b06fb9002109bfc542e76860b81459a8585af0bbdabcfc5dcf272ef230de7", + "sha256:fb6af82989dac7c58bd25ed9ba3323bc443f8c1f03804f69c9f5e363bf4a021c" + ], + "index": "pypi", + "markers": "python_version < '3.13' and python_version >= '3.8'", + "version": "==6.0.0" + }, + "pyinstaller-hooks-contrib": { + "hashes": [ + "sha256:76084b5988e3957a9df169d2a935d65500136967e710ddebf57263f1a909cd80", + "sha256:f34f4c6807210025c8073ebe665f422a3aa2ac5f4c7ebf4c2a26cc77bebf63b5" + ], + "markers": "python_version >= '3.7'", + "version": "==2023.9" + }, + "pytesseract": { + "hashes": [ + "sha256:8f22cc98f765bf13517ead0c70effedb46c153540d25783e04014f28b55a5fc6", + "sha256:f1c3a8b0f07fd01a1085d451f5b8315be6eec1d5577a6796d46dc7a62bd4120f" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==0.3.10" + }, + "pywin32": { + "hashes": [ + "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d", + "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65", + "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e", + "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b", + "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4", + "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040", + "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a", + "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36", + "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8", + "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e", + "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802", + "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a", + "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407", + "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0" + ], + "version": "==306" + }, + "pywin32-ctypes": { + "hashes": [ + "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60", + "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7" + ], + "markers": "sys_platform == 'win32'", + "version": "==0.2.2" + }, + "pywinauto": { + "hashes": [ + "sha256:931ce622d7f402b1892ab472987a1332e4c0681bf87e106f798390d16ca95e58", + "sha256:de23f1e977cc51e7eddd95c8f365710343136433968d1e2ad377962d6bd6540a" + ], + "index": "pypi", + "version": "==0.6.8" + }, + "rapidfuzz": { + "hashes": [ + "sha256:01013ee67fb15608c8c5961af3bc2b1f242cff94c19f53237c9b3f0edb8e0a2d", + "sha256:01d64710060bc3241c08ac1f1a9012c7184f3f4c3d6e2eebb16c6093a03f6a67", + "sha256:02afbe7ed12e9191082ed7bda43398baced1d9d805302b7b010d397de3ae973f", + "sha256:0b9197656a6d71483959bf7d216e7fb7a6b80ca507433bcb3015fb92abc266f8", + "sha256:0d8c6cb80b5d2edf88bf6a88ac6827a353c974405c2d7e3025ed9527a5dbe1a6", + "sha256:0df66e07e42e2831fae84dea481f7803bec7cfa53c31d770e86ac47bb18dcd57", + "sha256:124578029d926b2be32d60b748be95ee0de6cb2753eb49d6d1d6146269b428b9", + "sha256:1276c7f50cd90a48b00084feb25256135c9ace6c599295dd5932949ec30c0e70", + "sha256:1438e68fe8869fe6819a313140e98641b34bfc89234b82486d8fd02044a067e8", + "sha256:1a733c10b1fcc47f837c23ab4a255cc4021a88939ff81baa64d6738231cba33d", + "sha256:1bafbd3e2e9e0b5f740f66155cc7e1e23eee1e1f2c44eff12daf14f90af0e8ab", + "sha256:1ebee7313719dfe652debb74bdd4024e8cf381a59adc6d065520ff927f3445f4", + "sha256:233bf022938c38060a93863ec548e624d69a56d7384634d8bea435b915b88e52", + "sha256:23b07685c21c93cdf6d68b49eccacfe975651b8d99ea8a02687400c60315e5bc", + "sha256:2543fd8d0fb3b1ac065bf94ee54c0ea33343c62481d8e54b6117a88c92c9b721", + "sha256:273c7c7f5b405f2f54d41e805883572d57e1f0a56861f93ca5a6733672088acb", + "sha256:28d03cd33817f6e0bea9b618b460f85ff9c9c3fedc6c19cfa0992f719a0d1801", + "sha256:2e49151572b842d290dcee2cc6f9ce7a7b40b77cc20d0f6d6b54e7afb7bafa5c", + "sha256:3456f4df5b8800315fd161045c996479016c112228e4da370d09ed80c24853e5", + "sha256:37d5f0fbad6c092c89840eea2c4c845564d40849785de74c5e6ff48b47b0ecf6", + "sha256:3af0384132e79fe6f6370d49347649382e04f689277525903bef84d30f3992fd", + "sha256:3db79070888d0dcd4f6a20fd30b8184dd975d6b0f7818acff5d7e07eba19b71f", + "sha256:437508ec1ea6e71a77126715ac6208cb9c3e74272536ebfa79be9dd008cfb85f", + "sha256:46efc5e4675e2bd5118427513f86eaf3689e1482ebd309ad4532bcefae78179d", + "sha256:4fd94acab871afbc845400814134a83512a711e824dc2c9a9776d6123464a221", + "sha256:50ad7bac98a0f00492687eddda73d2c0bdf71c78b52fddaa5901634ae323d3ce", + "sha256:51d47d52c890cbdb2d8b2085d747e557f15efd9c990cb6ae624c8f6948c4aa3a", + "sha256:52c6b7a178f0e800488fa1aede17b00f6397cab0b79d48531504b0d89e45315f", + "sha256:53bbef345644eac1c2d7cc21ade4fe9554fa289f60eb2c576f7fdc454dbc0641", + "sha256:55efb3231bb954f3597313ebdf104289b8d139d5429ad517051855f84e12b94e", + "sha256:59f851c7a54a9652b9598553547e0940244bfce7c9b672bac728efa0b9028d03", + "sha256:5b9a7ab061c1b75b274fc2ebd1d29cfa2e510c36e2f4cd9518a6d56d589003c8", + "sha256:5fe3ef7daecd79f852936528e37528fd88818bc000991e0fea23b9ac5b79e875", + "sha256:61f16bb0f3026853500e7968261831a2e1a35d56947752bb6cf6953afd70b9de", + "sha256:6286510910fcd649471a7f5b77fcc971e673729e7c84216dbf321bead580d5a1", + "sha256:63933792146f3d333680d415cecc237e6275b42ad948d0a798f9a81325517666", + "sha256:66ff93b81b382269dc7c2d46c839ce72e2d2331ad46a06321770bc94016fe236", + "sha256:698488002eb7be2f737e48679ed0cd310b76291f26d8ec792db8345d13eb6573", + "sha256:6b8258846e56b03230fa733d29bb4f9fb1f4790ac97d1ebe9faa3ff9d2850999", + "sha256:6d38596c804a9f2bd49360c15e1f4afbf016f181fe37fc4f1a4ddd247d3e91e5", + "sha256:6f5c8b901b6d3be63591c68e2612f76ad85af27193d0a88d4d87bb047aeafcb3", + "sha256:712dd91d429afaddbf7e86662155f2ad9bc8135fca5803a01035a3c1d76c5977", + "sha256:734046d557550589edb83d5ad1468a1341d1092f1c64f26fd0b1fc50f9efdce1", + "sha256:74b9a1c1fc139d325fb0b89ccc85527d27096a76f6ed690ee3378143cc38e91d", + "sha256:75d1365387ec8ef2128fd7e2f7436aa1a04a1953bc6d7068835bb769cd07c146", + "sha256:76f4162ce5fe08609455d318936ed4aa709f40784be61fb4e200a378137b0230", + "sha256:7f497f850d46c5e08f3340343842a28ede5d3997e5d1cadbd265793cf47417e5", + "sha256:805dc2aa3ac295dcbf2df8c1e420e8a73b1f632d6820a5a1c8506d22c11e0f27", + "sha256:83387fb81c4c0234b199110655779762dd5982cdf9de4f7c321110713193133e", + "sha256:87409e12f9a82aa33a5b845c49dd8d5d4264f2f171f0a69ddc638e100fcc50de", + "sha256:8756461e7ee79723b8f762fc6db226e65eb453bf9fa64b14fc0274d4aaaf9e21", + "sha256:8b38d7677b2f20b137bb7aaf0dcd3d8ac2a2cde65f09f5621bf3f57d9a1e5d6e", + "sha256:8eb33895353bfcc33ccf4b4bae837c0afb4eaf20a0361aa6f0800cef12505e91", + "sha256:8f5d2adc48c181486125d42230e80479a1e0568942e883d1ebdeb76cd3f83470", + "sha256:929e6b71e5b36caee2ee11c209e75a0fcbd716a1b76ae6162b89ee9b591b63b1", + "sha256:93ceb62ade1a0e62696487274002157a58bb751fc82cd25016fc5523ba558ca5", + "sha256:950d1dfd2927cd45c9bb2927933926718f0a17792841e651d42f4d1cb04a5c1d", + "sha256:9814905414696080d8448d6e6df788a0148954ab34d7cd8d75bcb85ba30e0b25", + "sha256:9e1142c8d35fa6f3af8150d02ff8edcbea3723c851d889e8b2172e0d1b99f3f7", + "sha256:9f295842c282fe7fe93bfe7a20e78f33f43418f47fb601f2f0a05df8a8282b43", + "sha256:a0750278693525b5ce58d3b313e432dfa5d90f00d06ae54fa8cde87f2a397eb0", + "sha256:a716efcfc92659d8695291f07da4fa60f42a131dc4ceab583931452dd5662e92", + "sha256:a7215f7c5de912b364d5cf7c4c66915ccf4acf71aafbb8da62ad346569196e15", + "sha256:a74112e2126b428c77db5e96f7ce34e91e750552147305b2d361122cbede2955", + "sha256:a7d6a9f04ea1277add8943d4e144e59215009f54f2668124ff26dee18a875343", + "sha256:a80f9aa4245a49e0677896d1b51b2b3bc36472aff7cec31c4a96f789135f03fe", + "sha256:ab981f9091ae8bd32bca9289fa1019b4ec656543489e7e13e64882d57d989282", + "sha256:b05c7d4b4ddb617e977d648689013e50e5688140ee03538d3760a3a11d4fa8a2", + "sha256:b38c7021f6114cfacba5717192fb3e1e50053261d49a774e645021a2f77e20a3", + "sha256:b6fe2aff0d9b35191701714e05afe08f79eaea376a3a6ca802b72d9e5b48b545", + "sha256:b81b8bc29114ca861fed23da548a837832b85495b0c1b2600e6060e3cf4d50aa", + "sha256:bbb05b1203f683b341f44ebe8fe38afed6e56f606094f9840d6406e4a7bf0eab", + "sha256:bd10d68baabb63a3bb36b683f98fc481fcc62230e493e4b31e316bd5b299ef68", + "sha256:bd50bc90167601963e2a90b820fb862d239ecb096a991bf3ce33ffaa1d6eedee", + "sha256:bf58ba21df06fc8aeef3056fd137eca0a593c2f5c82923a4524d251dc5f3df5d", + "sha256:bfe14711b9a7b744e242a482c6cabb696517a1a9946fc1e88d353cd3eb384788", + "sha256:c006aa481d1b91c2600920ce16e42d208a4b6f318d393aef4dd2172d568f2641", + "sha256:c0150d521199277b5ad8bd3b060a5f3c1dbdf11df0533b4d79f458ef11d07e8c", + "sha256:c2a564f748497b6a5e08a1dc0ac06655f65377cf072c4f0e2c73818acc655d36", + "sha256:c56073ba1d1b25585359ad9769163cb2f3183e7a03c03b914a0667fcbd95dc5c", + "sha256:c67f5ced39aff6277dd772b239ef8aa8fc810200a3b42f69ddbb085ea0e18232", + "sha256:c7f4f6dac25c120de8845a65a97090658c8a976827ac22b6b86e2a16a60bb820", + "sha256:c92d847c997c384670e3b4cf6727cb73a4d7a7ba6457310e2083cf06d56013c4", + "sha256:cc3efc06db79e818f4a6783a4e001b3c8b2c61bd05c0d5c4d333adaf64ed1b34", + "sha256:cfdc74afd93ac71270b5be5c25cb864b733b9ae32b07495705a6ac294ac4c390", + "sha256:d0bda173b0ec1fa546f123088c0d42c9096304771b4c0555d4e08a66a246b3f6", + "sha256:d15c364c5aa8f032dadf5b82fa02b7a4bd9688a961a27961cd5b985203f58037", + "sha256:d188e8fb5a9709931c6a48cc62c4ac9b9d163969333711e426d9dbd134c1489b", + "sha256:d1d81d380ceabc8297880525c9d8b9e93fead38d3d2254e558c36c18aaf2553f", + "sha256:d3198f70b97127e52a4f96bb2f7de447f89baa338ff398eb126930c8e3137ad1", + "sha256:d904ac97f2e370f91e8170802669c8ad68641bf84d742968416b53c5960410c6", + "sha256:da2764604a31fd1e3f1cacf226b43a871cc9f28844a3196c2a6b1ba52ae12922", + "sha256:dd54dd0355225dc3c1d55e233d510adcccee9bb25d656b4cf1136114b92e7bf3", + "sha256:e14799297f194a4480f373e45142ef16d5dc68a42084c0e2018e0bdba56a8fef", + "sha256:e182ea5c809e7ed36ebfbcef4bb1808e213d27b33c036007a33bcbb7ba498356", + "sha256:e77873126eb07e7461f0b675263e6c5d42c8a952e88e4a44eeff96f237b2b024", + "sha256:ed0d5761b44d9dd87278d5c32903bb55632346e4d84ea67ba2e4a84afc3b7d45", + "sha256:ed3da08830c08c8bcd49414cc06b704a760d3067804775facc0df725b52085a4", + "sha256:ef30b5f2720f0acbcfba0e0661a4cc118621c47cf69b5fe92531dfed1e369e1c", + "sha256:f0075ff8990437923da42202b60cf04b5c122ee2856f0cf2344fb890cadecf57", + "sha256:f1e91460baa42f5408f3c062913456a24b2fc1a181959b58a9c06b5eef700ca6", + "sha256:f3effbe9c677658b3149da0d2778a740a6b7d8190c1407fd0c0770a4e223cfe0", + "sha256:f5921780e7995e9ac3cea41fa57b623159d7295788618d3f2946d61328c25c25", + "sha256:f71454249ddd29d8ba5415ed7307e7b7493fc7e9018f1ff496127b8b9a8df94b", + "sha256:f723197f2dbce508a7030dcf6d3fc940117aa54fc876021bf6f6feeaf3825ba1", + "sha256:f7f5ea97886d2ec7b2b9a8172812a76e1d243f2ce705c2f24baf46f9ef5d3951", + "sha256:f813fb663d90038c1171d30ea1b6b275e09fced32f1d12b972c6045d9d4233f2", + "sha256:fc4b1b69a64d337c40fa07a721dae1b1550d90f17973fb348055f6440d597e26" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==3.4.0" + }, + "setuptools": { + "hashes": [ + "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", + "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" + ], + "markers": "python_version >= '3.8'", + "version": "==68.2.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "sniffio": { + "hashes": [ + "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101", + "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384" + ], + "markers": "python_version >= '3.7'", + "version": "==1.3.0" + }, + "tqdm": { + "hashes": [ + "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", + "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==4.66.1" + } + }, + "develop": {} +} diff --git a/assets/gc_achievements.json b/assets/gc_achievements.json new file mode 100644 index 0000000..c907abb --- /dev/null +++ b/assets/gc_achievements.json @@ -0,0 +1,6572 @@ +{ + "1": { + "id": 1, + "name": "Tales of Monstrous Madness", + "category_id": 0, + "primo": 5 + }, + "2": { + "id": 2, + "name": "Illustrious in Inazuma", + "category_id": 0, + "primo": 20 + }, + "3": { + "id": 3, + "name": "Overlooking View", + "category_id": 0, + "primo": 5 + }, + "4": { + "id": 4, + "name": "The Remains of the Gale", + "category_id": 0, + "primo": 5 + }, + "5": { + "id": 5, + "name": "\"Seeds of Stories, Brought by the Wind...\"", + "category_id": 0, + "primo": 5 + }, + "6": { + "id": 6, + "name": "Unswerving", + "category_id": 0, + "primo": 5 + }, + "7": { + "id": 7, + "name": "Initiating Warp Drive!", + "category_id": 0, + "primo": 5 + }, + "8": { + "id": 8, + "name": "Beloved of the Anemo Archon", + "category_id": 0, + "primo": 5 + }, + "9": { + "id": 9, + "name": "The Best Sword in the Cemetery", + "category_id": 0, + "primo": 5 + }, + "10": { + "id": 10, + "name": "Hidden Palace of Guizang Formula", + "category_id": 0, + "primo": 5 + }, + "11": { + "id": 11, + "name": "Cecilia Garden", + "category_id": 0, + "primo": 5 + }, + "12": { + "id": 12, + "name": "Hidden Palace of Zhou Formula", + "category_id": 0, + "primo": 5 + }, + "13": { + "id": 13, + "name": "\"If you put your heart into it...\"", + "category_id": 0, + "primo": 5 + }, + "14": { + "id": 14, + "name": "\"...Anyone can be a gourmet.\"", + "category_id": 0, + "primo": 5 + }, + "15": { + "id": 15, + "name": "Boared to Death", + "category_id": 0, + "primo": 5 + }, + "16": { + "id": 16, + "name": "Golden Gliding License", + "category_id": 0, + "primo": 10 + }, + "17": { + "id": 17, + "name": "It's the Same As Having Wings", + "category_id": 0, + "primo": 10 + }, + "18": { + "id": 18, + "name": "Quick As Lightning", + "category_id": 0, + "primo": 10 + }, + "19": { + "id": 19, + "name": "Friends the World Over", + "category_id": 0, + "primo": 10 + }, + "20": { + "id": 20, + "name": "Megastar in Mondstadt", + "category_id": 0, + "primo": 20 + }, + "21": { + "id": 21, + "name": "Legend in Liyue", + "category_id": 0, + "primo": 20 + }, + "22": { + "id": 22, + "name": "QUEST CLEAR", + "category_id": 0, + "primo": 5 + }, + "23": { + "id": 23, + "name": "QUEST CLEAR", + "category_id": 0, + "primo": 10 + }, + "24": { + "id": 24, + "name": "QUEST CLEAR", + "category_id": 0, + "primo": 20 + }, + "25": { + "id": 25, + "name": "Hero-in-Training", + "category_id": 0, + "primo": 5 + }, + "26": { + "id": 26, + "name": "Hero-in-Training", + "category_id": 0, + "primo": 10 + }, + "27": { + "id": 27, + "name": "Hero-in-Training", + "category_id": 0, + "primo": 20 + }, + "28": { + "id": 28, + "name": "QUEST FAILED", + "category_id": 0, + "primo": 5 + }, + "29": { + "id": 29, + "name": "The Bleak Midwinter", + "category_id": 0, + "primo": 5 + }, + "30": { + "id": 30, + "name": "Priest, Princess, and Scribe", + "category_id": 0, + "primo": 5 + }, + "31": { + "id": 31, + "name": "Prodigal Son's Return", + "category_id": 0, + "primo": 5 + }, + "32": { + "id": 32, + "name": "Snow-Stored History", + "category_id": 0, + "primo": 5 + }, + "33": { + "id": 33, + "name": "Glacial Steel", + "category_id": 0, + "primo": 5 + }, + "34": { + "id": 34, + "name": "Futile Endeavor", + "category_id": 0, + "primo": 5 + }, + "35": { + "id": 35, + "name": "Untellable Tale", + "category_id": 0, + "primo": 5 + }, + "36": { + "id": 36, + "name": "Towering Achievement", + "category_id": 0, + "primo": 5 + }, + "37": { + "id": 37, + "name": "Winter Wonderland", + "category_id": 0, + "primo": 5 + }, + "38": { + "id": 38, + "name": "The Hunter Becomes the Hunted", + "category_id": 0, + "primo": 5 + }, + "39": { + "id": 39, + "name": "Chill Out!", + "category_id": 0, + "primo": 5 + }, + "40": { + "id": 40, + "name": "Glutton for Goulash", + "category_id": 0, + "primo": 5 + }, + "41": { + "id": 41, + "name": "Wrath of the Gods", + "category_id": 0, + "primo": 5 + }, + "42": { + "id": 42, + "name": "Sky High", + "category_id": 0, + "primo": 5 + }, + "43": { + "id": 43, + "name": "Transmutation Nuclide", + "category_id": 0, + "primo": 5 + }, + "44": { + "id": 44, + "name": "...You could hear Paimon all along, couldn't you?", + "category_id": 0, + "primo": 5 + }, + "45": { + "id": 45, + "name": "Yo-Ho-Ho, and a Bottle of Dandelion Wine", + "category_id": 0, + "primo": 5 + }, + "46": { + "id": 46, + "name": "Mighty and Illuminated Wave Rider", + "category_id": 0, + "primo": 5 + }, + "47": { + "id": 47, + "name": "Nice Boat!", + "category_id": 0, + "primo": 5 + }, + "48": { + "id": 48, + "name": "...And Her Name Is the Mary Celeste", + "category_id": 0, + "primo": 5 + }, + "49": { + "id": 49, + "name": "Déjà Vu!", + "category_id": 0, + "primo": 5 + }, + "50": { + "id": 50, + "name": "Yamada Go's Wooden Mallet", + "category_id": 0, + "primo": 5 + }, + "51": { + "id": 51, + "name": "\"Kujirai Art, Temari Jutsu\"", + "category_id": 0, + "primo": 5 + }, + "52": { + "id": 52, + "name": "Temari for Life", + "category_id": 0, + "primo": 5 + }, + "53": { + "id": 53, + "name": "Paimon's Lucky Day!", + "category_id": 0, + "primo": 5 + }, + "54": { + "id": 54, + "name": "Just My Luck...", + "category_id": 0, + "primo": 5 + }, + "55": { + "id": 55, + "name": "Underground... Overrated?", + "category_id": 0, + "primo": 5 + }, + "56": { + "id": 56, + "name": "SHUUMATSU GAIDEN", + "category_id": 0, + "primo": 5 + }, + "57": { + "id": 57, + "name": "Iwakura Out", + "category_id": 0, + "primo": 5 + }, + "58": { + "id": 58, + "name": "Who Let the Dogs Out", + "category_id": 0, + "primo": 5 + }, + "59": { + "id": 59, + "name": "You Can't Help Your Feelings", + "category_id": 0, + "primo": 5 + }, + "61": { + "id": 61, + "name": "They Shall Not Grow Old", + "category_id": 0, + "primo": 5 + }, + "62": { + "id": 62, + "name": "Oh, the Humanity!", + "category_id": 0, + "primo": 5 + }, + "63": { + "id": 63, + "name": "A Hollow Soul", + "category_id": 0, + "primo": 5 + }, + "64": { + "id": 64, + "name": "Rise and Shrine", + "category_id": 0, + "primo": 5 + }, + "65": { + "id": 65, + "name": "...And I Would Walk 3,000 More", + "category_id": 0, + "primo": 5 + }, + "66": { + "id": 66, + "name": "A Doctor's Odyssey", + "category_id": 0, + "primo": 5 + }, + "67": { + "id": 67, + "name": "Knock Knock", + "category_id": 0, + "primo": 5 + }, + "68": { + "id": 68, + "name": "Kannazuka Battle Plan", + "category_id": 0, + "primo": 5 + }, + "69": { + "id": 69, + "name": "Why We Fight", + "category_id": 0, + "primo": 5 + }, + "70": { + "id": 70, + "name": "Oowazamono", + "category_id": 0, + "primo": 5 + }, + "71": { + "id": 71, + "name": "Second Blooming", + "category_id": 0, + "primo": 5 + }, + "72": { + "id": 72, + "name": "Thank You, Come Again", + "category_id": 0, + "primo": 5 + }, + "73": { + "id": 73, + "name": "Shocking... Positively Shocking", + "category_id": 0, + "primo": 5 + }, + "74": { + "id": 74, + "name": "Jackpot", + "category_id": 0, + "primo": 5 + }, + "75": { + "id": 75, + "name": "Blade of Tatara", + "category_id": 0, + "primo": 5 + }, + "77": { + "id": 77, + "name": "Rest in Peace", + "category_id": 0, + "primo": 5 + }, + "78": { + "id": 78, + "name": "Juggernaut", + "category_id": 0, + "primo": 10 + }, + "79": { + "id": 79, + "name": "The PRISM Program", + "category_id": 0, + "primo": 10 + }, + "80": { + "id": 80, + "name": "\"That's one big Crystalfly\"", + "category_id": 0, + "primo": 10 + }, + "81": { + "id": 81, + "name": "\"...Not indicative of final product\"", + "category_id": 0, + "primo": 10 + }, + "82": { + "id": 82, + "name": "The Bigger They Are...", + "category_id": 0, + "primo": 5 + }, + "83": { + "id": 83, + "name": "Through Pass", + "category_id": 0, + "primo": 5 + }, + "84": { + "id": 84, + "name": "Dolorous Stroke", + "category_id": 0, + "primo": 5 + }, + "85": { + "id": 85, + "name": "Hilichurl Champion", + "category_id": 0, + "primo": 10 + }, + "86": { + "id": 86, + "name": "Bon Appétit", + "category_id": 0, + "primo": 10 + }, + "87": { + "id": 87, + "name": "Purveyor of Punishment", + "category_id": 0, + "primo": 5 + }, + "88": { + "id": 88, + "name": "Purveyor of Punishment", + "category_id": 0, + "primo": 10 + }, + "89": { + "id": 89, + "name": "Purveyor of Punishment", + "category_id": 0, + "primo": 20 + }, + "90": { + "id": 90, + "name": "Fantastic Four", + "category_id": 0, + "primo": 10 + }, + "91": { + "id": 91, + "name": "\"Take That, You Overblown Mist Flower!\"", + "category_id": 0, + "primo": 10 + }, + "92": { + "id": 92, + "name": "\"That Was Blooming Hot\"", + "category_id": 0, + "primo": 10 + }, + "93": { + "id": 93, + "name": "Outlander Vs. Outlander", + "category_id": 0, + "primo": 10 + }, + "94": { + "id": 94, + "name": "Penalty", + "category_id": 0, + "primo": 5 + }, + "95": { + "id": 95, + "name": "Force Field Erosion", + "category_id": 0, + "primo": 5 + }, + "96": { + "id": 96, + "name": "\"...Lizard-Spock\"", + "category_id": 0, + "primo": 5 + }, + "97": { + "id": 97, + "name": "A House Ill-Founded", + "category_id": 0, + "primo": 5 + }, + "98": { + "id": 98, + "name": "None Stand Secure", + "category_id": 0, + "primo": 5 + }, + "99": { + "id": 99, + "name": "Back With the Wind", + "category_id": 0, + "primo": 5 + }, + "100": { + "id": 100, + "name": "Core Meltdown", + "category_id": 0, + "primo": 5 + }, + "101": { + "id": 101, + "name": "Knockout", + "category_id": 0, + "primo": 5 + }, + "102": { + "id": 102, + "name": "\"...Till Debt Do Us Part\"", + "category_id": 0, + "primo": 5 + }, + "103": { + "id": 103, + "name": "\"Melting... Away...\"", + "category_id": 0, + "primo": 5 + }, + "104": { + "id": 104, + "name": "And You Call Yourself One of the Four Winds", + "category_id": 0, + "primo": 5 + }, + "105": { + "id": 105, + "name": "Touch and Go", + "category_id": 0, + "primo": 5 + }, + "106": { + "id": 106, + "name": "Deflection!", + "category_id": 0, + "primo": 5 + }, + "107": { + "id": 107, + "name": "You Can Have Those Back!", + "category_id": 0, + "primo": 5 + }, + "108": { + "id": 108, + "name": "Sternest of Souls", + "category_id": 0, + "primo": 20 + }, + "109": { + "id": 109, + "name": "\"...A Single Night's Work\"", + "category_id": 0, + "primo": 5 + }, + "110": { + "id": 110, + "name": "\"Knee-Deep Snow...\"", + "category_id": 0, + "primo": 5 + }, + "111": { + "id": 111, + "name": "If I Run Fast Enough...", + "category_id": 0, + "primo": 10 + }, + "112": { + "id": 112, + "name": "In This Solemn Matter Let No One Interfere!", + "category_id": 0, + "primo": 5 + }, + "113": { + "id": 113, + "name": "Fine, I'll Do It Myself", + "category_id": 0, + "primo": 5 + }, + "114": { + "id": 114, + "name": "Burned Yourself, Did You?", + "category_id": 0, + "primo": 5 + }, + "115": { + "id": 115, + "name": "Smells like Animal Spirit!", + "category_id": 0, + "primo": 5 + }, + "116": { + "id": 116, + "name": "Core Breakthrough", + "category_id": 0, + "primo": 10 + }, + "117": { + "id": 117, + "name": "Could All Uninvolved Machinery Please Leave Immediately?", + "category_id": 0, + "primo": 10 + }, + "118": { + "id": 118, + "name": "Fight Fire With Fire", + "category_id": 0, + "primo": 5 + }, + "119": { + "id": 119, + "name": "Ride the Lightning", + "category_id": 0, + "primo": 5 + }, + "120": { + "id": 120, + "name": "I Hear Thunder...", + "category_id": 0, + "primo": 10 + }, + "121": { + "id": 121, + "name": "The End of the Beginning", + "category_id": 0, + "primo": 20 + }, + "122": { + "id": 122, + "name": "The Outlander Who Caught the Wind", + "category_id": 0, + "primo": 10 + }, + "123": { + "id": 123, + "name": "For a Tomorrow Without Tears", + "category_id": 0, + "primo": 10 + }, + "124": { + "id": 124, + "name": "Song of the Dragon and Freedom", + "category_id": 0, + "primo": 10 + }, + "125": { + "id": 125, + "name": "Let the Wind Lead", + "category_id": 0, + "primo": 5 + }, + "126": { + "id": 126, + "name": "...Or a New Storm?", + "category_id": 0, + "primo": 5 + }, + "127": { + "id": 127, + "name": "Knighthood Excellence", + "category_id": 0, + "primo": 5 + }, + "128": { + "id": 128, + "name": "Knights and Their Knotty Issues", + "category_id": 0, + "primo": 5 + }, + "129": { + "id": 129, + "name": "Winds Change Their Course", + "category_id": 0, + "primo": 5 + }, + "130": { + "id": 130, + "name": "Of the Land Amidst Monoliths", + "category_id": 0, + "primo": 10 + }, + "131": { + "id": 131, + "name": "Farewell, Archaic Lord", + "category_id": 0, + "primo": 10 + }, + "132": { + "id": 132, + "name": "Outlandish Behavior", + "category_id": 0, + "primo": 5 + }, + "133": { + "id": 133, + "name": "Silly-Billy Churlish Ghoul", + "category_id": 0, + "primo": 5 + }, + "134": { + "id": 134, + "name": "That Smells Divine", + "category_id": 0, + "primo": 5 + }, + "135": { + "id": 135, + "name": "It's Bigger on the Inside", + "category_id": 0, + "primo": 5 + }, + "136": { + "id": 136, + "name": "Ticked, Tacked, and Towed", + "category_id": 0, + "primo": 5 + }, + "137": { + "id": 137, + "name": "Respecting Cultural Heritage", + "category_id": 0, + "primo": 5 + }, + "138": { + "id": 138, + "name": "The Long Goodbye", + "category_id": 0, + "primo": 5 + }, + "139": { + "id": 139, + "name": "Icing on the Slime", + "category_id": 0, + "primo": 5 + }, + "140": { + "id": 140, + "name": "Sky's the Limit", + "category_id": 0, + "primo": 5 + }, + "141": { + "id": 141, + "name": "Lily Loves Music", + "category_id": 0, + "primo": 5 + }, + "142": { + "id": 142, + "name": "I'll Let You Off... This Time", + "category_id": 0, + "primo": 5 + }, + "143": { + "id": 143, + "name": "Derailed", + "category_id": 0, + "primo": 5 + }, + "144": { + "id": 144, + "name": "Final Farewell", + "category_id": 0, + "primo": 5 + }, + "145": { + "id": 145, + "name": "A New Star Approaches", + "category_id": 0, + "primo": 5 + }, + "146": { + "id": 146, + "name": "Pirates! Argh!", + "category_id": 0, + "primo": 5 + }, + "147": { + "id": 147, + "name": "A Nourishing Friendship", + "category_id": 0, + "primo": 5 + }, + "148": { + "id": 148, + "name": "Love Is All Around", + "category_id": 0, + "primo": 5 + }, + "149": { + "id": 149, + "name": "For the Love of Godwin", + "category_id": 0, + "primo": 5 + }, + "150": { + "id": 150, + "name": "Level Up", + "category_id": 0, + "primo": 5 + }, + "151": { + "id": 151, + "name": "Beginner's Luck", + "category_id": 0, + "primo": 5 + }, + "152": { + "id": 152, + "name": "Taking Responsibility for Your Actions", + "category_id": 0, + "primo": 5 + }, + "153": { + "id": 153, + "name": "Making Do", + "category_id": 0, + "primo": 5 + }, + "154": { + "id": 154, + "name": "\"Dear Daddy...\"", + "category_id": 0, + "primo": 5 + }, + "155": { + "id": 155, + "name": "Marvelous Medicine", + "category_id": 0, + "primo": 5 + }, + "156": { + "id": 156, + "name": "In the Name of Favonius", + "category_id": 0, + "primo": 5 + }, + "157": { + "id": 157, + "name": "Scholarly Pretensions", + "category_id": 0, + "primo": 5 + }, + "158": { + "id": 158, + "name": "Poet Vs. Paycheck", + "category_id": 0, + "primo": 5 + }, + "159": { + "id": 159, + "name": "All's Well That Ends Well", + "category_id": 0, + "primo": 5 + }, + "160": { + "id": 160, + "name": "This Novel Is Amazing!", + "category_id": 0, + "primo": 5 + }, + "161": { + "id": 161, + "name": "Open to Interpretation", + "category_id": 0, + "primo": 5 + }, + "162": { + "id": 162, + "name": "Get Your Own Emergency Food!", + "category_id": 0, + "primo": 5 + }, + "163": { + "id": 163, + "name": "Hidden in Plain Sight", + "category_id": 0, + "primo": 5 + }, + "164": { + "id": 164, + "name": "Is There But One Truth...?", + "category_id": 0, + "primo": 5 + }, + "165": { + "id": 165, + "name": "Liyue Ichiban", + "category_id": 0, + "primo": 5 + }, + "166": { + "id": 166, + "name": "Boom Shaka-Laka, More Boom-Shaka-Laka", + "category_id": 0, + "primo": 5 + }, + "167": { + "id": 167, + "name": "Meal For Two", + "category_id": 0, + "primo": 5 + }, + "168": { + "id": 168, + "name": "A Question of Diet", + "category_id": 0, + "primo": 5 + }, + "169": { + "id": 169, + "name": "Samurice", + "category_id": 0, + "primo": 5 + }, + "170": { + "id": 170, + "name": "\"Sorry for the Trouble!\"", + "category_id": 0, + "primo": 5 + }, + "171": { + "id": 171, + "name": "Samurai Gourmet", + "category_id": 0, + "primo": 5 + }, + "172": { + "id": 172, + "name": "Hello...! Anyone in here...?", + "category_id": 0, + "primo": 5 + }, + "173": { + "id": 173, + "name": "Editorial Opinion", + "category_id": 0, + "primo": 5 + }, + "174": { + "id": 174, + "name": "You Should Start A Doushin Dojo", + "category_id": 0, + "primo": 5 + }, + "175": { + "id": 175, + "name": "Guess Who?", + "category_id": 0, + "primo": 5 + }, + "176": { + "id": 176, + "name": "Nothing to Lose But Time", + "category_id": 0, + "primo": 5 + }, + "177": { + "id": 177, + "name": "Interview With a Bygone God", + "category_id": 0, + "primo": 5 + }, + "178": { + "id": 178, + "name": "Crouching Dragon, Hidden Chi", + "category_id": 0, + "primo": 5 + }, + "179": { + "id": 179, + "name": "Scourge of the Battlefield", + "category_id": 0, + "primo": 5 + }, + "180": { + "id": 180, + "name": "Shadow Over Luhua Pool", + "category_id": 0, + "primo": 5 + }, + "181": { + "id": 181, + "name": "Ready Player Zero", + "category_id": 0, + "primo": 5 + }, + "182": { + "id": 182, + "name": "Trees Should Blend Their Roots and Shade, for That Is Where the Home Is Made", + "category_id": 0, + "primo": 5 + }, + "183": { + "id": 183, + "name": "Gears of Destiny", + "category_id": 0, + "primo": 5 + }, + "184": { + "id": 184, + "name": "The Bandit, the Lunatic, and the Pitch-Black Enigma", + "category_id": 0, + "primo": 5 + }, + "185": { + "id": 185, + "name": "Where Fate Comes to a Crossroads", + "category_id": 0, + "primo": 5 + }, + "186": { + "id": 186, + "name": "Sneering at the Power of the Gods", + "category_id": 0, + "primo": 5 + }, + "187": { + "id": 187, + "name": "Silence, You Raving Lunatic", + "category_id": 0, + "primo": 5 + }, + "188": { + "id": 188, + "name": "We Will Be Reunited", + "category_id": 0, + "primo": 5 + }, + "189": { + "id": 189, + "name": "The Gathering Storm", + "category_id": 0, + "primo": 5 + }, + "190": { + "id": 190, + "name": "Ready, Fight!", + "category_id": 0, + "primo": 5 + }, + "191": { + "id": 191, + "name": "Autumn Winds, Scarlet Leaves", + "category_id": 0, + "primo": 10 + }, + "192": { + "id": 192, + "name": "Through the Storm", + "category_id": 0, + "primo": 5 + }, + "193": { + "id": 193, + "name": "Hiiragi Sanjuuro", + "category_id": 0, + "primo": 5 + }, + "194": { + "id": 194, + "name": "The Aspirations of All", + "category_id": 0, + "primo": 5 + }, + "195": { + "id": 195, + "name": "The Princess Behind the Curtain", + "category_id": 0, + "primo": 5 + }, + "196": { + "id": 196, + "name": "Omamori, Justice, Number One", + "category_id": 0, + "primo": 5 + }, + "197": { + "id": 197, + "name": "Jailhouse Fiesta", + "category_id": 0, + "primo": 5 + }, + "198": { + "id": 198, + "name": "To Brave the Lightning's Glow", + "category_id": 0, + "primo": 5 + }, + "199": { + "id": 199, + "name": "Revolutionary Outlander", + "category_id": 0, + "primo": 5 + }, + "200": { + "id": 200, + "name": "The Immovable God and the Eternal Euthymia", + "category_id": 0, + "primo": 10 + }, + "201": { + "id": 201, + "name": "Stillness, the Sublimation of Shadow", + "category_id": 0, + "primo": 10 + }, + "202": { + "id": 202, + "name": "Fantastic Voyage: Prologue", + "category_id": 17, + "primo": 20 + }, + "203": { + "id": 203, + "name": "Archaic Lord of Lightning and Blitz", + "category_id": 17, + "primo": 5 + }, + "204": { + "id": 204, + "name": "The Power of Luck", + "category_id": 17, + "primo": 5 + }, + "205": { + "id": 205, + "name": "Evil Is Banished", + "category_id": 17, + "primo": 20 + }, + "206": { + "id": 206, + "name": "Behold, Mine Evil-Espying Eye!", + "category_id": 17, + "primo": 5 + }, + "207": { + "id": 207, + "name": "Red Hot Chili Popsicles", + "category_id": 17, + "primo": 5 + }, + "208": { + "id": 208, + "name": "A Line That May Be Crossed", + "category_id": 17, + "primo": 20 + }, + "209": { + "id": 209, + "name": "An Idol's Last Line of Defense", + "category_id": 17, + "primo": 5 + }, + "210": { + "id": 210, + "name": "Mondstadt's Spiciest Surprise", + "category_id": 17, + "primo": 5 + }, + "211": { + "id": 211, + "name": "A Maid of Strength and Virtue", + "category_id": 17, + "primo": 20 + }, + "212": { + "id": 212, + "name": "\"...For I Am Duty Bound\"", + "category_id": 17, + "primo": 5 + }, + "213": { + "id": 213, + "name": "A World Known Only Unto Roses", + "category_id": 17, + "primo": 5 + }, + "214": { + "id": 214, + "name": "Stress Relief", + "category_id": 17, + "primo": 20 + }, + "215": { + "id": 215, + "name": "Invulnerable Maid-Knight", + "category_id": 17, + "primo": 5 + }, + "216": { + "id": 216, + "name": "Mondstadt's Note-Taker General", + "category_id": 17, + "primo": 5 + }, + "217": { + "id": 217, + "name": "Diona Special, Stirred, Not Shaken", + "category_id": 17, + "primo": 20 + }, + "218": { + "id": 218, + "name": "But There's a Catch...", + "category_id": 17, + "primo": 5 + }, + "219": { + "id": 219, + "name": "Kitten Queen", + "category_id": 17, + "primo": 5 + }, + "220": { + "id": 220, + "name": "The Wind and The Star Traveler", + "category_id": 1, + "primo": 5 + }, + "221": { + "id": 221, + "name": "Of Mountains High", + "category_id": 1, + "primo": 5 + }, + "222": { + "id": 222, + "name": "The Voice of Flowing Water", + "category_id": 1, + "primo": 5 + }, + "223": { + "id": 223, + "name": "The Divine Halberd Mocks the Heavens", + "category_id": 1, + "primo": 5 + }, + "224": { + "id": 224, + "name": "The Drunkard and the Wolf", + "category_id": 1, + "primo": 5 + }, + "225": { + "id": 225, + "name": "Spring, White Horse and Moonlight", + "category_id": 1, + "primo": 5 + }, + "226": { + "id": 226, + "name": "Unlimited Power!", + "category_id": 22, + "primo": 5 + }, + "227": { + "id": 227, + "name": "Land of Dandelions", + "category_id": 22, + "primo": 5 + }, + "228": { + "id": 228, + "name": "True Friendship Takes Sacrifice", + "category_id": 22, + "primo": 5 + }, + "229": { + "id": 229, + "name": "Eternal Youth", + "category_id": 22, + "primo": 5 + }, + "230": { + "id": 230, + "name": "Hilichurlian Studies Expert", + "category_id": 22, + "primo": 5 + }, + "231": { + "id": 231, + "name": "Taking Shape", + "category_id": 2, + "primo": 10 + }, + "232": { + "id": 232, + "name": "Survival Expert", + "category_id": 2, + "primo": 5 + }, + "233": { + "id": 233, + "name": "Survival Expert", + "category_id": 2, + "primo": 10 + }, + "234": { + "id": 234, + "name": "Survival Expert", + "category_id": 2, + "primo": 20 + }, + "235": { + "id": 235, + "name": "Star Chef", + "category_id": 2, + "primo": 5 + }, + "236": { + "id": 236, + "name": "Star Chef", + "category_id": 2, + "primo": 10 + }, + "237": { + "id": 237, + "name": "Star Chef", + "category_id": 2, + "primo": 20 + }, + "238": { + "id": 238, + "name": "Onward and Upward", + "category_id": 3, + "primo": 5 + }, + "239": { + "id": 239, + "name": "Onward and Upward", + "category_id": 3, + "primo": 10 + }, + "240": { + "id": 240, + "name": "Onward and Upward", + "category_id": 3, + "primo": 20 + }, + "241": { + "id": 241, + "name": "Re-Armed, Re-Forged", + "category_id": 3, + "primo": 5 + }, + "242": { + "id": 242, + "name": "Re-Armed, Re-Forged", + "category_id": 3, + "primo": 10 + }, + "243": { + "id": 243, + "name": "Re-Armed, Re-Forged", + "category_id": 3, + "primo": 20 + }, + "244": { + "id": 244, + "name": "Hitherto Unknown", + "category_id": 3, + "primo": 5 + }, + "245": { + "id": 245, + "name": "Hitherto Unknown", + "category_id": 3, + "primo": 10 + }, + "246": { + "id": 246, + "name": "Hitherto Unknown", + "category_id": 3, + "primo": 20 + }, + "247": { + "id": 247, + "name": "Bounty of the Earth", + "category_id": 3, + "primo": 5 + }, + "248": { + "id": 248, + "name": "Bounty of the Earth", + "category_id": 3, + "primo": 10 + }, + "249": { + "id": 249, + "name": "Bounty of the Earth", + "category_id": 3, + "primo": 20 + }, + "250": { + "id": 250, + "name": "Hero's Gift", + "category_id": 3, + "primo": 5 + }, + "251": { + "id": 251, + "name": "Echoing Song", + "category_id": 3, + "primo": 10 + }, + "252": { + "id": 252, + "name": "Legendary Treasure", + "category_id": 3, + "primo": 5 + }, + "253": { + "id": 253, + "name": "Sacred Canto", + "category_id": 3, + "primo": 10 + }, + "254": { + "id": 254, + "name": "Continental Explorer: Mondstadt", + "category_id": 4, + "primo": 5 + }, + "255": { + "id": 255, + "name": "Brush of a Thousand Winds", + "category_id": 4, + "primo": 5 + }, + "256": { + "id": 256, + "name": "Let the Wind Lead", + "category_id": 4, + "primo": 20 + }, + "257": { + "id": 257, + "name": "Sanctuary Pilgrim: Mondstadt", + "category_id": 4, + "primo": 10 + }, + "258": { + "id": 258, + "name": "Guiding Wind", + "category_id": 4, + "primo": 5 + }, + "259": { + "id": 259, + "name": "Guiding Wind", + "category_id": 4, + "primo": 10 + }, + "260": { + "id": 260, + "name": "Guiding Wind", + "category_id": 4, + "primo": 20 + }, + "261": { + "id": 261, + "name": "Wind-Chasing Treasure Hunter", + "category_id": 4, + "primo": 5 + }, + "262": { + "id": 262, + "name": "Wind-Chasing Treasure Hunter", + "category_id": 4, + "primo": 10 + }, + "263": { + "id": 263, + "name": "Wind-Chasing Treasure Hunter", + "category_id": 4, + "primo": 20 + }, + "264": { + "id": 264, + "name": "Wind-Chasing Adventurer", + "category_id": 4, + "primo": 5 + }, + "265": { + "id": 265, + "name": "Wind-Chasing Adventurer", + "category_id": 4, + "primo": 10 + }, + "266": { + "id": 266, + "name": "Wind-Chasing Adventurer", + "category_id": 4, + "primo": 20 + }, + "267": { + "id": 267, + "name": "Continental Explorer: Liyue", + "category_id": 5, + "primo": 5 + }, + "268": { + "id": 268, + "name": "Surveyor of Stone", + "category_id": 5, + "primo": 5 + }, + "269": { + "id": 269, + "name": "Unmovable Mountain", + "category_id": 5, + "primo": 20 + }, + "270": { + "id": 270, + "name": "Sanctuary Pilgrim: Liyue", + "category_id": 5, + "primo": 10 + }, + "271": { + "id": 271, + "name": "Lithic Guide", + "category_id": 5, + "primo": 5 + }, + "272": { + "id": 272, + "name": "Lithic Guide", + "category_id": 5, + "primo": 10 + }, + "273": { + "id": 273, + "name": "Lithic Guide", + "category_id": 5, + "primo": 20 + }, + "274": { + "id": 274, + "name": "Rock-Steady Treasure Hunter", + "category_id": 5, + "primo": 5 + }, + "275": { + "id": 275, + "name": "Rock-Steady Treasure Hunter", + "category_id": 5, + "primo": 10 + }, + "276": { + "id": 276, + "name": "Rock-Steady Treasure Hunter", + "category_id": 5, + "primo": 20 + }, + "277": { + "id": 277, + "name": "Rock-Steady Adventurer", + "category_id": 5, + "primo": 5 + }, + "278": { + "id": 278, + "name": "Rock-Steady Adventurer", + "category_id": 5, + "primo": 10 + }, + "279": { + "id": 279, + "name": "Rock-Steady Adventurer", + "category_id": 5, + "primo": 20 + }, + "280": { + "id": 280, + "name": "Cool It!", + "category_id": 6, + "primo": 5 + }, + "281": { + "id": 281, + "name": "Cool It!", + "category_id": 6, + "primo": 10 + }, + "282": { + "id": 282, + "name": "Cool It!", + "category_id": 6, + "primo": 20 + }, + "283": { + "id": 283, + "name": "Go With the Wind!", + "category_id": 6, + "primo": 5 + }, + "284": { + "id": 284, + "name": "Go With the Wind!", + "category_id": 6, + "primo": 10 + }, + "285": { + "id": 285, + "name": "Go With the Wind!", + "category_id": 6, + "primo": 20 + }, + "286": { + "id": 286, + "name": "Season's Greetings", + "category_id": 6, + "primo": 5 + }, + "287": { + "id": 287, + "name": "Season's Greetings", + "category_id": 6, + "primo": 10 + }, + "288": { + "id": 288, + "name": "Season's Greetings", + "category_id": 6, + "primo": 20 + }, + "289": { + "id": 289, + "name": "Performance May Decline in Low Temperatures", + "category_id": 6, + "primo": 5 + }, + "290": { + "id": 290, + "name": "Performance May Decline in Low Temperatures", + "category_id": 6, + "primo": 10 + }, + "291": { + "id": 291, + "name": "Performance May Decline in Low Temperatures", + "category_id": 6, + "primo": 20 + }, + "292": { + "id": 292, + "name": "The Art of War", + "category_id": 6, + "primo": 5 + }, + "293": { + "id": 293, + "name": "The Art of War", + "category_id": 6, + "primo": 10 + }, + "294": { + "id": 294, + "name": "The Art of War", + "category_id": 6, + "primo": 20 + }, + "295": { + "id": 295, + "name": "Melt You Down Like Ice Cream", + "category_id": 6, + "primo": 5 + }, + "296": { + "id": 296, + "name": "Melt You Down Like Ice Cream", + "category_id": 6, + "primo": 10 + }, + "297": { + "id": 297, + "name": "Melt You Down Like Ice Cream", + "category_id": 6, + "primo": 20 + }, + "298": { + "id": 298, + "name": "A Little Less Shocking Than Love at First Sight", + "category_id": 6, + "primo": 5 + }, + "299": { + "id": 299, + "name": "A Little Less Shocking Than Love at First Sight", + "category_id": 6, + "primo": 10 + }, + "300": { + "id": 300, + "name": "A Little Less Shocking Than Love at First Sight", + "category_id": 6, + "primo": 20 + }, + "301": { + "id": 301, + "name": "Nothing Special, Just Practice", + "category_id": 7, + "primo": 5 + }, + "302": { + "id": 302, + "name": "Master Sniper", + "category_id": 7, + "primo": 5 + }, + "303": { + "id": 303, + "name": "Der Freischütz", + "category_id": 7, + "primo": 5 + }, + "304": { + "id": 304, + "name": "Full Metal What Now?", + "category_id": 8, + "primo": 5 + }, + "305": { + "id": 305, + "name": "Are Plasma Globes Still in Fashion?", + "category_id": 8, + "primo": 5 + }, + "306": { + "id": 306, + "name": "Rhythm Tengoku", + "category_id": 8, + "primo": 5 + }, + "307": { + "id": 307, + "name": "Blazing Dadaupa", + "category_id": 8, + "primo": 5 + }, + "308": { + "id": 308, + "name": "Hydro Hunter", + "category_id": 14, + "primo": 5 + }, + "309": { + "id": 309, + "name": "Dip, Duck, Dive, Dodge, Defeat", + "category_id": 14, + "primo": 10 + }, + "310": { + "id": 310, + "name": "...Well, That Was Strange", + "category_id": 14, + "primo": 5 + }, + "311": { + "id": 311, + "name": "...Well, That Was Strange", + "category_id": 14, + "primo": 10 + }, + "312": { + "id": 312, + "name": "...Well, That Was Strange", + "category_id": 14, + "primo": 20 + }, + "313": { + "id": 313, + "name": "Extreme Gardening", + "category_id": 14, + "primo": 5 + }, + "314": { + "id": 314, + "name": "Gardener Extraordinaire", + "category_id": 14, + "primo": 5 + }, + "315": { + "id": 315, + "name": "Geronimo!", + "category_id": 14, + "primo": 5 + }, + "316": { + "id": 316, + "name": "Vicious Circle", + "category_id": 14, + "primo": 10 + }, + "317": { + "id": 317, + "name": "Shield Me From the World", + "category_id": 14, + "primo": 10 + }, + "318": { + "id": 318, + "name": "Turnover", + "category_id": 15, + "primo": 5 + }, + "319": { + "id": 319, + "name": "Tear Down This Wall!", + "category_id": 15, + "primo": 5 + }, + "320": { + "id": 320, + "name": "No Ice for Me, Thanks", + "category_id": 15, + "primo": 5 + }, + "321": { + "id": 321, + "name": "...The Harder They Fall", + "category_id": 15, + "primo": 5 + }, + "322": { + "id": 322, + "name": "Chilly-Churl", + "category_id": 15, + "primo": 10 + }, + "323": { + "id": 323, + "name": "\"Rosebud...\"", + "category_id": 15, + "primo": 5 + }, + "324": { + "id": 324, + "name": "Assassin of Kings", + "category_id": 15, + "primo": 10 + }, + "325": { + "id": 325, + "name": "David and Goliath", + "category_id": 15, + "primo": 5 + }, + "326": { + "id": 326, + "name": "...Geovishap, Solarvishap, Lunarvishap...", + "category_id": 20, + "primo": 5 + }, + "327": { + "id": 327, + "name": "Geo Elemental Reaction?", + "category_id": 20, + "primo": 10 + }, + "328": { + "id": 328, + "name": "Puppet Show-Off", + "category_id": 20, + "primo": 5 + }, + "329": { + "id": 329, + "name": "Totaled Totem", + "category_id": 20, + "primo": 5 + }, + "330": { + "id": 330, + "name": "Did My Hand Fall From My Wrist?", + "category_id": 20, + "primo": 5 + }, + "331": { + "id": 331, + "name": "I'll Skip the Spa, Thanks", + "category_id": 20, + "primo": 5 + }, + "332": { + "id": 332, + "name": "It's Quiet... Too Quiet...", + "category_id": 20, + "primo": 5 + }, + "333": { + "id": 333, + "name": "The Battle of Narukami Island", + "category_id": 20, + "primo": 5 + }, + "334": { + "id": 334, + "name": "The Finishing Touch", + "category_id": 20, + "primo": 10 + }, + "335": { + "id": 335, + "name": "Down We Go", + "category_id": 9, + "primo": 5 + }, + "336": { + "id": 336, + "name": "Down We Go", + "category_id": 9, + "primo": 10 + }, + "337": { + "id": 337, + "name": "Down We Go", + "category_id": 9, + "primo": 20 + }, + "338": { + "id": 338, + "name": "Down to Dodge", + "category_id": 9, + "primo": 5 + }, + "339": { + "id": 339, + "name": "Down to Dodge", + "category_id": 9, + "primo": 10 + }, + "340": { + "id": 340, + "name": "Down to Dodge", + "category_id": 9, + "primo": 20 + }, + "341": { + "id": 341, + "name": "My Precious", + "category_id": 9, + "primo": 10 + }, + "342": { + "id": 342, + "name": "Abyssal Crusader", + "category_id": 9, + "primo": 20 + }, + "343": { + "id": 343, + "name": "...Odomu?", + "category_id": 10, + "primo": 5 + }, + "344": { + "id": 344, + "name": "Yo dala?", + "category_id": 10, + "primo": 5 + }, + "345": { + "id": 345, + "name": "Perfectionist", + "category_id": 11, + "primo": 5 + }, + "346": { + "id": 346, + "name": "Telling It How It Is", + "category_id": 11, + "primo": 5 + }, + "347": { + "id": 347, + "name": "Geo Archon Anecdotes", + "category_id": 12, + "primo": 5 + }, + "348": { + "id": 348, + "name": "Friends, Travelers, Lend Me Your Ears...", + "category_id": 12, + "primo": 5 + }, + "349": { + "id": 349, + "name": "Once Upon a Time...", + "category_id": 12, + "primo": 5 + }, + "350": { + "id": 350, + "name": "You Came, You Saw, We Co-Oped", + "category_id": 13, + "primo": 5 + }, + "351": { + "id": 351, + "name": "You Came, You Saw, We Co-Oped", + "category_id": 13, + "primo": 10 + }, + "352": { + "id": 352, + "name": "You Came, You Saw, We Co-Oped", + "category_id": 13, + "primo": 20 + }, + "353": { + "id": 353, + "name": "I Came, I Saw, I Conquered", + "category_id": 13, + "primo": 5 + }, + "354": { + "id": 354, + "name": "I Came, I Saw, I Conquered", + "category_id": 13, + "primo": 10 + }, + "355": { + "id": 355, + "name": "I Came, I Saw, I Conquered", + "category_id": 13, + "primo": 20 + }, + "356": { + "id": 356, + "name": "That's One Big Crystalfly", + "category_id": 13, + "primo": 10 + }, + "357": { + "id": 357, + "name": "...And Still Smiling!", + "category_id": 13, + "primo": 10 + }, + "358": { + "id": 358, + "name": "You Have to Hit the Pillars", + "category_id": 13, + "primo": 10 + }, + "359": { + "id": 359, + "name": "Just Me and You, the Sky So Blue, and Almost Getting Killed by a Cryo Regisvine", + "category_id": 13, + "primo": 10 + }, + "360": { + "id": 360, + "name": "This Is Fine", + "category_id": 13, + "primo": 10 + }, + "361": { + "id": 361, + "name": "A Fish Called Rhodeia", + "category_id": 13, + "primo": 10 + }, + "362": { + "id": 362, + "name": "Wolf Pact", + "category_id": 13, + "primo": 10 + }, + "363": { + "id": 363, + "name": "A Delusion's Abilities Don't Decide a Battle's Outcome", + "category_id": 21, + "primo": 10 + }, + "364": { + "id": 364, + "name": "Moving Mountains", + "category_id": 21, + "primo": 10 + }, + "365": { + "id": 365, + "name": "Blast From the Past", + "category_id": 21, + "primo": 10 + }, + "366": { + "id": 366, + "name": "Put on Ice", + "category_id": 21, + "primo": 10 + }, + "367": { + "id": 367, + "name": "No Strings Attached, Anymore", + "category_id": 21, + "primo": 10 + }, + "368": { + "id": 368, + "name": "Operation Bonfire", + "category_id": 21, + "primo": 10 + }, + "369": { + "id": 369, + "name": "The Not-So-Perpetual Mechanical Array", + "category_id": 21, + "primo": 10 + }, + "370": { + "id": 370, + "name": "Continental Explorer: Dragonspine", + "category_id": 16, + "primo": 5 + }, + "371": { + "id": 371, + "name": "Peak Hopper", + "category_id": 16, + "primo": 5 + }, + "372": { + "id": 372, + "name": "Seelie in the Snow", + "category_id": 16, + "primo": 5 + }, + "373": { + "id": 373, + "name": "Seelie in the Snow", + "category_id": 16, + "primo": 10 + }, + "374": { + "id": 374, + "name": "Seelie in the Snow", + "category_id": 16, + "primo": 20 + }, + "375": { + "id": 375, + "name": "Mountain of Treasure", + "category_id": 16, + "primo": 5 + }, + "376": { + "id": 376, + "name": "Mountain of Treasure", + "category_id": 16, + "primo": 10 + }, + "377": { + "id": 377, + "name": "Mountain of Treasure", + "category_id": 16, + "primo": 20 + }, + "378": { + "id": 378, + "name": "Scarlet Sprouts", + "category_id": 16, + "primo": 5 + }, + "379": { + "id": 379, + "name": "Scarlet Sprouts", + "category_id": 16, + "primo": 10 + }, + "380": { + "id": 380, + "name": "Scarlet Sprouts", + "category_id": 16, + "primo": 20 + }, + "381": { + "id": 381, + "name": "Skyfrost Nail", + "category_id": 16, + "primo": 10 + }, + "382": { + "id": 382, + "name": "Dragonspear", + "category_id": 16, + "primo": 10 + }, + "383": { + "id": 383, + "name": "Realm Sans Frontières", + "category_id": 18, + "primo": 5 + }, + "384": { + "id": 384, + "name": "High Adeptal Energy Readings Ahead", + "category_id": 18, + "primo": 5 + }, + "385": { + "id": 385, + "name": "High Adeptal Energy Readings Ahead", + "category_id": 18, + "primo": 10 + }, + "386": { + "id": 386, + "name": "High Adeptal Energy Readings Ahead", + "category_id": 18, + "primo": 20 + }, + "387": { + "id": 387, + "name": "Friend of the Realm", + "category_id": 18, + "primo": 5 + }, + "388": { + "id": 388, + "name": "Friend of the Realm", + "category_id": 18, + "primo": 10 + }, + "389": { + "id": 389, + "name": "Friend of the Realm", + "category_id": 18, + "primo": 20 + }, + "390": { + "id": 390, + "name": "T—T—T—Timberhochwandi", + "category_id": 18, + "primo": 5 + }, + "391": { + "id": 391, + "name": "T—T—T—Timberhochwandi", + "category_id": 18, + "primo": 10 + }, + "392": { + "id": 392, + "name": "T—T—T—Timberhochwandi", + "category_id": 18, + "primo": 20 + }, + "393": { + "id": 393, + "name": "If I Were a Rich Man", + "category_id": 18, + "primo": 5 + }, + "394": { + "id": 394, + "name": "If I Were a Rich Man", + "category_id": 18, + "primo": 10 + }, + "395": { + "id": 395, + "name": "If I Were a Rich Man", + "category_id": 18, + "primo": 20 + }, + "396": { + "id": 396, + "name": "Not Just a Small Bench", + "category_id": 18, + "primo": 5 + }, + "397": { + "id": 397, + "name": "Not Just a Small Bench", + "category_id": 18, + "primo": 10 + }, + "398": { + "id": 398, + "name": "Not Just a Small Bench", + "category_id": 18, + "primo": 20 + }, + "399": { + "id": 399, + "name": "Color It In", + "category_id": 18, + "primo": 5 + }, + "400": { + "id": 400, + "name": "Color It In", + "category_id": 18, + "primo": 10 + }, + "401": { + "id": 401, + "name": "Color It In", + "category_id": 18, + "primo": 20 + }, + "402": { + "id": 402, + "name": "Precision Modeling", + "category_id": 18, + "primo": 5 + }, + "403": { + "id": 403, + "name": "Precision Modeling", + "category_id": 18, + "primo": 10 + }, + "404": { + "id": 404, + "name": "Precision Modeling", + "category_id": 18, + "primo": 20 + }, + "405": { + "id": 405, + "name": "My... Territory", + "category_id": 18, + "primo": 5 + }, + "406": { + "id": 406, + "name": "My... Territory", + "category_id": 18, + "primo": 10 + }, + "407": { + "id": 407, + "name": "My... Territory", + "category_id": 18, + "primo": 20 + }, + "408": { + "id": 408, + "name": "Honored Guest of the Realm", + "category_id": 19, + "primo": 5 + }, + "409": { + "id": 409, + "name": "Fireside Chats", + "category_id": 19, + "primo": 5 + }, + "410": { + "id": 410, + "name": "Fireside Chats", + "category_id": 19, + "primo": 10 + }, + "411": { + "id": 411, + "name": "Fireside Chats", + "category_id": 19, + "primo": 20 + }, + "412": { + "id": 412, + "name": "Gifts All Around", + "category_id": 19, + "primo": 5 + }, + "413": { + "id": 413, + "name": "Gifts All Around", + "category_id": 19, + "primo": 10 + }, + "414": { + "id": 414, + "name": "Gifts All Around", + "category_id": 19, + "primo": 20 + }, + "415": { + "id": 415, + "name": "Just Like a Game of Chess", + "category_id": 23, + "primo": 5 + }, + "416": { + "id": 416, + "name": "We're Going to Need More Crops!", + "category_id": 23, + "primo": 5 + }, + "417": { + "id": 417, + "name": "We're Going to Need More Crops!", + "category_id": 23, + "primo": 10 + }, + "418": { + "id": 418, + "name": "We're Going to Need More Crops!", + "category_id": 23, + "primo": 20 + }, + "419": { + "id": 419, + "name": "My Blooming Abode", + "category_id": 23, + "primo": 5 + }, + "420": { + "id": 420, + "name": "My Blooming Abode", + "category_id": 23, + "primo": 10 + }, + "421": { + "id": 421, + "name": "My Blooming Abode", + "category_id": 23, + "primo": 20 + }, + "422": { + "id": 422, + "name": "Stop! Gather Time.", + "category_id": 23, + "primo": 5 + }, + "423": { + "id": 423, + "name": "Stop! Gather Time.", + "category_id": 23, + "primo": 10 + }, + "424": { + "id": 424, + "name": "Stop! Gather Time.", + "category_id": 23, + "primo": 20 + }, + "425": { + "id": 425, + "name": "Continental Explorer: Land of Surging Thunder (I)", + "category_id": 24, + "primo": 5 + }, + "426": { + "id": 426, + "name": "Thunderbolting Across the Land (I)", + "category_id": 24, + "primo": 5 + }, + "427": { + "id": 427, + "name": "Sanctuary Pilgrim: Inazuma Tenryou (I)", + "category_id": 24, + "primo": 10 + }, + "428": { + "id": 428, + "name": "Eternal Thunder", + "category_id": 24, + "primo": 20 + }, + "429": { + "id": 429, + "name": "Divine Roots", + "category_id": 24, + "primo": 20 + }, + "430": { + "id": 430, + "name": "Naku Weed Whacker (I)", + "category_id": 24, + "primo": 5 + }, + "431": { + "id": 431, + "name": "Naku Weed Whacker (I)", + "category_id": 24, + "primo": 10 + }, + "432": { + "id": 432, + "name": "Naku Weed Whacker (I)", + "category_id": 24, + "primo": 20 + }, + "433": { + "id": 433, + "name": "Lights Will Guide You Home (I)", + "category_id": 24, + "primo": 5 + }, + "434": { + "id": 434, + "name": "Lights Will Guide You Home (I)", + "category_id": 24, + "primo": 10 + }, + "435": { + "id": 435, + "name": "Lights Will Guide You Home (I)", + "category_id": 24, + "primo": 20 + }, + "436": { + "id": 436, + "name": "Lightning-Riding Treasure Hunter (I)", + "category_id": 24, + "primo": 5 + }, + "437": { + "id": 437, + "name": "Lightning-Riding Treasure Hunter (I)", + "category_id": 24, + "primo": 10 + }, + "438": { + "id": 438, + "name": "Lightning-Riding Treasure Hunter (I)", + "category_id": 24, + "primo": 20 + }, + "439": { + "id": 439, + "name": "Lightning-Riding Adventurer (I)", + "category_id": 24, + "primo": 5 + }, + "440": { + "id": 440, + "name": "Lightning-Riding Adventurer (I)", + "category_id": 24, + "primo": 10 + }, + "441": { + "id": 441, + "name": "Lightning-Riding Adventurer (I)", + "category_id": 24, + "primo": 20 + }, + "442": { + "id": 442, + "name": "Spring Cleaning", + "category_id": 24, + "primo": 10 + }, + "443": { + "id": 443, + "name": "Tatara Tales", + "category_id": 24, + "primo": 10 + }, + "444": { + "id": 444, + "name": "Echo of Fury", + "category_id": 24, + "primo": 10 + }, + "445": { + "id": 445, + "name": "Continental Explorer: Land of Surging Thunder (II)", + "category_id": 26, + "primo": 5 + }, + "446": { + "id": 446, + "name": "Thunderbolting Across the Land (II)", + "category_id": 26, + "primo": 5 + }, + "447": { + "id": 447, + "name": "Sanctuary Pilgrim: Inazuma Tenryou (II)", + "category_id": 26, + "primo": 10 + }, + "448": { + "id": 448, + "name": "Naku Weed Whacker (II)", + "category_id": 26, + "primo": 5 + }, + "449": { + "id": 449, + "name": "Naku Weed Whacker (II)", + "category_id": 26, + "primo": 10 + }, + "450": { + "id": 450, + "name": "Naku Weed Whacker (II)", + "category_id": 26, + "primo": 20 + }, + "451": { + "id": 451, + "name": "Lights Will Guide You Home (II)", + "category_id": 26, + "primo": 5 + }, + "452": { + "id": 452, + "name": "Lightning-Riding Treasure Hunter (II)", + "category_id": 26, + "primo": 5 + }, + "453": { + "id": 453, + "name": "Lightning-Riding Treasure Hunter (II)", + "category_id": 26, + "primo": 10 + }, + "454": { + "id": 454, + "name": "Lightning-Riding Treasure Hunter (II)", + "category_id": 26, + "primo": 20 + }, + "455": { + "id": 455, + "name": "Lightning-Riding Adventurer (II)", + "category_id": 26, + "primo": 5 + }, + "456": { + "id": 456, + "name": "Lightning-Riding Adventurer (II)", + "category_id": 26, + "primo": 10 + }, + "457": { + "id": 457, + "name": "Lightning-Riding Adventurer (II)", + "category_id": 26, + "primo": 20 + }, + "458": { + "id": 458, + "name": "Seirai Stormchasers", + "category_id": 26, + "primo": 10 + }, + "459": { + "id": 459, + "name": "The Same Moonlight", + "category_id": 26, + "primo": 10 + }, + "460": { + "id": 460, + "name": "Amateurs Hammer Nails Into Hooks", + "category_id": 25, + "primo": 5 + }, + "461": { + "id": 461, + "name": "\"Do you need a fishtank to go with that?\"", + "category_id": 25, + "primo": 10 + }, + "462": { + "id": 462, + "name": "Yon Mirror'd Moon, Broken", + "category_id": 25, + "primo": 5 + }, + "463": { + "id": 463, + "name": "Ding Ding Ding!", + "category_id": 25, + "primo": 5 + }, + "464": { + "id": 464, + "name": "Ding Ding Ding!", + "category_id": 25, + "primo": 10 + }, + "465": { + "id": 465, + "name": "Ding Ding Ding!", + "category_id": 25, + "primo": 20 + }, + "466": { + "id": 466, + "name": "\"Call Me Ishmael.\"", + "category_id": 25, + "primo": 5 + }, + "467": { + "id": 467, + "name": "Fishy Motive", + "category_id": 25, + "primo": 10 + }, + "468": { + "id": 468, + "name": "Into the Waters", + "category_id": 25, + "primo": 5 + }, + "469": { + "id": 469, + "name": "A Right Proper Angler", + "category_id": 25, + "primo": 10 + }, + "470": { + "id": 470, + "name": "\"That's What They Call a Getaway!\"", + "category_id": 0, + "primo": 5 + }, + "471": { + "id": 471, + "name": "\"Oh, so That's How You Fish...\"", + "category_id": 0, + "primo": 5 + }, + "472": { + "id": 472, + "name": "Stabilizer", + "category_id": 25, + "primo": 5 + }, + "473": { + "id": 473, + "name": "Intermission", + "category_id": 25, + "primo": 5 + }, + "474": { + "id": 474, + "name": "As You Wish", + "category_id": 0, + "primo": 5 + }, + "475": { + "id": 475, + "name": "A Mermaid's Tale", + "category_id": 0, + "primo": 5 + }, + "476": { + "id": 476, + "name": "A Distant Sea Shepherd's Treasure", + "category_id": 0, + "primo": 5 + }, + "477": { + "id": 477, + "name": "Long John Silver", + "category_id": 0, + "primo": 5 + }, + "478": { + "id": 478, + "name": "Today, This Seal — Tomorrow, Watatsumi Island!", + "category_id": 0, + "primo": 5 + }, + "479": { + "id": 479, + "name": "Palace in a Pool", + "category_id": 0, + "primo": 5 + }, + "480": { + "id": 480, + "name": "The Stranding of the Beagle", + "category_id": 0, + "primo": 5 + }, + "481": { + "id": 481, + "name": "\"I am a cat named Neko.\"", + "category_id": 0, + "primo": 5 + }, + "482": { + "id": 482, + "name": "Cat in the Clouds", + "category_id": 0, + "primo": 5 + }, + "483": { + "id": 483, + "name": "A Cat's Gift", + "category_id": 0, + "primo": 5 + }, + "484": { + "id": 484, + "name": "It Has to Be Treasure", + "category_id": 0, + "primo": 5 + }, + "485": { + "id": 485, + "name": "On the Other Side of Homesickness", + "category_id": 0, + "primo": 5 + }, + "486": { + "id": 486, + "name": "This and That...", + "category_id": 0, + "primo": 5 + }, + "487": { + "id": 487, + "name": "Davy Jones' Locker", + "category_id": 0, + "primo": 5 + }, + "488": { + "id": 488, + "name": "Sea of Puzzles", + "category_id": 0, + "primo": 5 + }, + "489": { + "id": 489, + "name": "Great Amakumo Peak", + "category_id": 0, + "primo": 5 + }, + "490": { + "id": 490, + "name": "Dry Clean", + "category_id": 0, + "primo": 5 + }, + "491": { + "id": 491, + "name": "Bio-Oceanic Weapon", + "category_id": 0, + "primo": 5 + }, + "492": { + "id": 492, + "name": "Love and Non-Communication", + "category_id": 0, + "primo": 5 + }, + "493": { + "id": 493, + "name": "Thunder Fall", + "category_id": 0, + "primo": 5 + }, + "494": { + "id": 494, + "name": "Icy Rivers, Crimson Witch", + "category_id": 0, + "primo": 10 + }, + "495": { + "id": 495, + "name": "SWORDFISH II", + "category_id": 0, + "primo": 5 + }, + "496": { + "id": 496, + "name": "Though Their Wishes Be Like Morning Dew...", + "category_id": 0, + "primo": 5 + }, + "497": { + "id": 497, + "name": "Fantabulous Firework Fiesta", + "category_id": 0, + "primo": 5 + }, + "498": { + "id": 498, + "name": "Duel Before the Throne", + "category_id": 0, + "primo": 5 + }, + "499": { + "id": 499, + "name": "Their Wishes", + "category_id": 0, + "primo": 5 + }, + "500": { + "id": 500, + "name": "Omnipresence Over Mortals", + "category_id": 0, + "primo": 10 + }, + "501": { + "id": 501, + "name": "Well, At Least It Ended", + "category_id": 0, + "primo": 5 + }, + "502": { + "id": 502, + "name": "Her and Her Cat", + "category_id": 0, + "primo": 5 + }, + "503": { + "id": 503, + "name": "Continental Explorer: Tsurumi Island", + "category_id": 27, + "primo": 5 + }, + "504": { + "id": 504, + "name": "Fog's Edge", + "category_id": 27, + "primo": 5 + }, + "505": { + "id": 505, + "name": "Sanctuary Pilgrim: Tsurumi Island", + "category_id": 27, + "primo": 10 + }, + "506": { + "id": 506, + "name": "Flashes in the Night", + "category_id": 27, + "primo": 5 + }, + "507": { + "id": 507, + "name": "Foggy Guidance", + "category_id": 27, + "primo": 5 + }, + "508": { + "id": 508, + "name": "Lost Treasure Hunter", + "category_id": 27, + "primo": 5 + }, + "509": { + "id": 509, + "name": "Lost Treasure Hunter", + "category_id": 27, + "primo": 10 + }, + "510": { + "id": 510, + "name": "Lost Treasure Hunter", + "category_id": 27, + "primo": 20 + }, + "511": { + "id": 511, + "name": "Lost Adventurer", + "category_id": 27, + "primo": 5 + }, + "512": { + "id": 512, + "name": "Lost Adventurer", + "category_id": 27, + "primo": 10 + }, + "513": { + "id": 513, + "name": "Lost Adventurer", + "category_id": 27, + "primo": 20 + }, + "514": { + "id": 514, + "name": "Thunder Is Forever", + "category_id": 27, + "primo": 10 + }, + "515": { + "id": 515, + "name": "Traverse the Fog Door", + "category_id": 0, + "primo": 5 + }, + "516": { + "id": 516, + "name": "Nihil Sub Caligine Novum", + "category_id": 0, + "primo": 5 + }, + "517": { + "id": 517, + "name": "White's Illusion", + "category_id": 0, + "primo": 5 + }, + "518": { + "id": 518, + "name": "\"Lovely Sights, Further Than the Eye Can See\"", + "category_id": 0, + "primo": 5 + }, + "519": { + "id": 519, + "name": "A Tale of Two Cities", + "category_id": 0, + "primo": 5 + }, + "520": { + "id": 520, + "name": "\"My Life as an Adventurer\"", + "category_id": 0, + "primo": 5 + }, + "521": { + "id": 521, + "name": "Light Up the Fog", + "category_id": 0, + "primo": 5 + }, + "522": { + "id": 522, + "name": "\"P—Paimon ate it...\"", + "category_id": 0, + "primo": 5 + }, + "523": { + "id": 523, + "name": "Guessing Game", + "category_id": 0, + "primo": 5 + }, + "524": { + "id": 524, + "name": "Thunderbird's Lineage", + "category_id": 0, + "primo": 5 + }, + "525": { + "id": 525, + "name": "Seven Letters", + "category_id": 0, + "primo": 5 + }, + "526": { + "id": 526, + "name": "Moshiri Kara", + "category_id": 0, + "primo": 5 + }, + "527": { + "id": 527, + "name": "Across the Misty River", + "category_id": 0, + "primo": 5 + }, + "528": { + "id": 528, + "name": "Everyone's Happy", + "category_id": 17, + "primo": 20 + }, + "529": { + "id": 529, + "name": "Housekeeper Extraordinaire", + "category_id": 17, + "primo": 5 + }, + "530": { + "id": 530, + "name": "From the Sea Never Returning", + "category_id": 17, + "primo": 5 + }, + "531": { + "id": 531, + "name": "Taller by Half", + "category_id": 17, + "primo": 20 + }, + "532": { + "id": 532, + "name": "Mujina-Class Ninja", + "category_id": 17, + "primo": 5 + }, + "533": { + "id": 533, + "name": "Dish Effect: Mobility Decreased", + "category_id": 17, + "primo": 5 + }, + "534": { + "id": 534, + "name": "Zoo Tycoon", + "category_id": 0, + "primo": 5 + }, + "535": { + "id": 535, + "name": "Zoo Tycoon", + "category_id": 0, + "primo": 10 + }, + "536": { + "id": 536, + "name": "Zoo Tycoon", + "category_id": 0, + "primo": 20 + }, + "537": { + "id": 537, + "name": "\"Not Flyin' Away This Time!\"", + "category_id": 0, + "primo": 5 + }, + "538": { + "id": 538, + "name": "The Net Closes In", + "category_id": 0, + "primo": 5 + }, + "539": { + "id": 539, + "name": "Honorary Crux Member", + "category_id": 17, + "primo": 20 + }, + "540": { + "id": 540, + "name": "Wine Unburdens", + "category_id": 17, + "primo": 5 + }, + "541": { + "id": 541, + "name": "Guyun Buyers' Club", + "category_id": 17, + "primo": 5 + }, + "542": { + "id": 542, + "name": "General of Watatsumi", + "category_id": 17, + "primo": 20 + }, + "543": { + "id": 543, + "name": "Changing Times", + "category_id": 17, + "primo": 5 + }, + "544": { + "id": 544, + "name": "To Tell or Not to Tell, That Is the Question", + "category_id": 17, + "primo": 5 + }, + "545": { + "id": 545, + "name": "\"...You Do Not Know the Night...\"", + "category_id": 28, + "primo": 5 + }, + "546": { + "id": 546, + "name": "The Highest Authority in the Land", + "category_id": 28, + "primo": 5 + }, + "547": { + "id": 547, + "name": "Phosphoros' Guidance", + "category_id": 28, + "primo": 5 + }, + "548": { + "id": 548, + "name": "Phosphoros' Guidance", + "category_id": 28, + "primo": 10 + }, + "549": { + "id": 549, + "name": "Phosphoros' Guidance", + "category_id": 28, + "primo": 20 + }, + "550": { + "id": 550, + "name": "Hesperus' Boons", + "category_id": 28, + "primo": 5 + }, + "551": { + "id": 551, + "name": "Hesperus' Boons", + "category_id": 28, + "primo": 10 + }, + "552": { + "id": 552, + "name": "Hesperus' Boons", + "category_id": 28, + "primo": 20 + }, + "553": { + "id": 553, + "name": "Kairos' Constancy", + "category_id": 28, + "primo": 5 + }, + "554": { + "id": 554, + "name": "Kairos' Constancy", + "category_id": 28, + "primo": 10 + }, + "555": { + "id": 555, + "name": "Kairos' Constancy", + "category_id": 28, + "primo": 20 + }, + "556": { + "id": 556, + "name": "Fire Rat's Robe, Dragon-Head Pearl, Sacred Offering Bowl, and...", + "category_id": 28, + "primo": 10 + }, + "557": { + "id": 557, + "name": "N-Thousand Leagues Under the Sea", + "category_id": 0, + "primo": 5 + }, + "558": { + "id": 558, + "name": "Flowing Sunfire, Also Known as Marishi", + "category_id": 0, + "primo": 5 + }, + "559": { + "id": 559, + "name": "Of Sun and Moon", + "category_id": 0, + "primo": 5 + }, + "560": { + "id": 560, + "name": "\"Extensive And Meticulous\"", + "category_id": 0, + "primo": 5 + }, + "561": { + "id": 561, + "name": "\"The Eel in Winter Sought\"", + "category_id": 0, + "primo": 5 + }, + "562": { + "id": 562, + "name": "\"Unmatched Throughout Tokoyo\"", + "category_id": 0, + "primo": 5 + }, + "563": { + "id": 563, + "name": "\"Maybe Get Yourself a More Social Hobby...\"", + "category_id": 0, + "primo": 5 + }, + "564": { + "id": 564, + "name": "\"If Tokoyo Ookami Knew of This...\"", + "category_id": 0, + "primo": 5 + }, + "565": { + "id": 565, + "name": "\"What Difference Does This Make?\"", + "category_id": 0, + "primo": 5 + }, + "566": { + "id": 566, + "name": "The Children of God Shall Dance", + "category_id": 0, + "primo": 5 + }, + "567": { + "id": 567, + "name": "Light and Dark, Dusk and Dawn", + "category_id": 0, + "primo": 5 + }, + "568": { + "id": 568, + "name": "Step Right Up!", + "category_id": 0, + "primo": 5 + }, + "569": { + "id": 569, + "name": "The Ill-Starred Legacy of Iwakura", + "category_id": 0, + "primo": 5 + }, + "570": { + "id": 570, + "name": "One Key for Each Lock", + "category_id": 0, + "primo": 10 + }, + "571": { + "id": 571, + "name": "\"All Is Well\"", + "category_id": 0, + "primo": 5 + }, + "572": { + "id": 572, + "name": "Rise of the Jade Chamber", + "category_id": 0, + "primo": 5 + }, + "573": { + "id": 573, + "name": "Majesty of the Deep", + "category_id": 0, + "primo": 5 + }, + "574": { + "id": 574, + "name": "A Former Dream", + "category_id": 0, + "primo": 5 + }, + "575": { + "id": 575, + "name": "The Crane Returns on the Wind", + "category_id": 0, + "primo": 10 + }, + "576": { + "id": 576, + "name": "Anna's Adventures", + "category_id": 0, + "primo": 5 + }, + "577": { + "id": 577, + "name": "Prelude to the Journey", + "category_id": 0, + "primo": 5 + }, + "578": { + "id": 578, + "name": "Megrez's Companion Star", + "category_id": 17, + "primo": 20 + }, + "579": { + "id": 579, + "name": "You've Got to Have Reserves", + "category_id": 17, + "primo": 5 + }, + "580": { + "id": 580, + "name": "Overprotectiveness", + "category_id": 17, + "primo": 5 + }, + "581": { + "id": 581, + "name": "The Lingering Song", + "category_id": 17, + "primo": 20 + }, + "582": { + "id": 582, + "name": "May This Moment Be Made to Last", + "category_id": 17, + "primo": 5 + }, + "583": { + "id": 583, + "name": "A Strict Master Trains a Talented Pupil", + "category_id": 17, + "primo": 5 + }, + "584": { + "id": 584, + "name": "Inugami's End", + "category_id": 0, + "primo": 5 + }, + "585": { + "id": 585, + "name": "Hard Landing", + "category_id": 0, + "primo": 5 + }, + "586": { + "id": 586, + "name": "Impeccable Judgment", + "category_id": 0, + "primo": 5 + }, + "587": { + "id": 587, + "name": "Beware of Angry Dog", + "category_id": 0, + "primo": 5 + }, + "588": { + "id": 588, + "name": "Basically Harmless", + "category_id": 0, + "primo": 5 + }, + "589": { + "id": 589, + "name": "It's Yesterday Once More", + "category_id": 0, + "primo": 5 + }, + "590": { + "id": 590, + "name": "It's Yesterday Once More", + "category_id": 0, + "primo": 10 + }, + "591": { + "id": 591, + "name": "It's Yesterday Once More", + "category_id": 0, + "primo": 20 + }, + "592": { + "id": 592, + "name": "Chasm Conqueror", + "category_id": 30, + "primo": 5 + }, + "593": { + "id": 593, + "name": "Perilous Plunge", + "category_id": 30, + "primo": 5 + }, + "594": { + "id": 594, + "name": "Into the Depths", + "category_id": 30, + "primo": 5 + }, + "595": { + "id": 595, + "name": "Gorge Guide", + "category_id": 30, + "primo": 5 + }, + "596": { + "id": 596, + "name": "Gorge Guide", + "category_id": 30, + "primo": 10 + }, + "597": { + "id": 597, + "name": "Gorge Guide", + "category_id": 30, + "primo": 20 + }, + "598": { + "id": 598, + "name": "Chasm Treasure Hunter", + "category_id": 30, + "primo": 5 + }, + "599": { + "id": 599, + "name": "Chasm Treasure Hunter", + "category_id": 30, + "primo": 10 + }, + "600": { + "id": 600, + "name": "Chasm Treasure Hunter", + "category_id": 30, + "primo": 20 + }, + "601": { + "id": 601, + "name": "Chasm Adventurer", + "category_id": 30, + "primo": 5 + }, + "602": { + "id": 602, + "name": "Chasm Adventurer", + "category_id": 30, + "primo": 10 + }, + "603": { + "id": 603, + "name": "Chasm Adventurer", + "category_id": 30, + "primo": 20 + }, + "604": { + "id": 604, + "name": "Arch-Illuminator", + "category_id": 30, + "primo": 20 + }, + "605": { + "id": 605, + "name": "\"When the Seal Is Broken...\"", + "category_id": 30, + "primo": 10 + }, + "606": { + "id": 606, + "name": "Exploration Underway", + "category_id": 30, + "primo": 10 + }, + "607": { + "id": 607, + "name": "The Lost Valley", + "category_id": 0, + "primo": 5 + }, + "608": { + "id": 608, + "name": "The Chasm Mining Records", + "category_id": 0, + "primo": 5 + }, + "609": { + "id": 609, + "name": "People of the Valley of Life", + "category_id": 0, + "primo": 5 + }, + "610": { + "id": 610, + "name": "CREDE TENEBRIS", + "category_id": 0, + "primo": 5 + }, + "611": { + "id": 611, + "name": "The Nine-Word Rumor", + "category_id": 0, + "primo": 5 + }, + "612": { + "id": 612, + "name": "Den of Thieves", + "category_id": 0, + "primo": 5 + }, + "613": { + "id": 613, + "name": "Ding Ding Ding, We Have a Winner! Again!", + "category_id": 0, + "primo": 5 + }, + "614": { + "id": 614, + "name": "Of the Human Heart Many Essays Written", + "category_id": 0, + "primo": 5 + }, + "615": { + "id": 615, + "name": "If Not Us, Then Who?", + "category_id": 0, + "primo": 5 + }, + "616": { + "id": 616, + "name": "Maintain Safety Distance", + "category_id": 0, + "primo": 5 + }, + "617": { + "id": 617, + "name": "Birth Pains of the Dark Fog", + "category_id": 0, + "primo": 5 + }, + "618": { + "id": 618, + "name": "The Alchemistake", + "category_id": 0, + "primo": 5 + }, + "619": { + "id": 619, + "name": "Valor's Afterglow", + "category_id": 0, + "primo": 5 + }, + "620": { + "id": 620, + "name": "Not for Long-Term Consumption", + "category_id": 0, + "primo": 5 + }, + "621": { + "id": 621, + "name": "The Mushroom That Asks Too Much", + "category_id": 0, + "primo": 5 + }, + "622": { + "id": 622, + "name": "The Millelith Shall Never Be Moved", + "category_id": 0, + "primo": 5 + }, + "623": { + "id": 623, + "name": "Jack of No Trades", + "category_id": 0, + "primo": 5 + }, + "624": { + "id": 624, + "name": "Well Done, Stierlitz!", + "category_id": 0, + "primo": 5 + }, + "625": { + "id": 625, + "name": "Yet the Darkness Did Not Overcome It...", + "category_id": 0, + "primo": 5 + }, + "626": { + "id": 626, + "name": "\"...Smells Like Asphalt.\"", + "category_id": 0, + "primo": 5 + }, + "627": { + "id": 627, + "name": "Light Up the Dark", + "category_id": 0, + "primo": 5 + }, + "628": { + "id": 628, + "name": "\"All We Need Is Some Firewood and Some Vinegar...\"", + "category_id": 0, + "primo": 5 + }, + "629": { + "id": 629, + "name": "The Tome of Taliesin", + "category_id": 0, + "primo": 5 + }, + "630": { + "id": 630, + "name": "Salt for My Foes, and Water for Me", + "category_id": 29, + "primo": 5 + }, + "631": { + "id": 631, + "name": "The Fraught Return", + "category_id": 29, + "primo": 5 + }, + "632": { + "id": 632, + "name": "Moment of Destruction", + "category_id": 29, + "primo": 10 + }, + "633": { + "id": 633, + "name": "Electric Escape", + "category_id": 29, + "primo": 5 + }, + "634": { + "id": 634, + "name": "Radio Silence", + "category_id": 29, + "primo": 5 + }, + "635": { + "id": 635, + "name": "Swimming Prohibited", + "category_id": 29, + "primo": 5 + }, + "636": { + "id": 636, + "name": "Death Proof", + "category_id": 29, + "primo": 10 + }, + "637": { + "id": 637, + "name": "Overflowing Light", + "category_id": 0, + "primo": 5 + }, + "638": { + "id": 638, + "name": "Ouroboros", + "category_id": 29, + "primo": 5 + }, + "639": { + "id": 639, + "name": "When One Gazes Into the Abyss...", + "category_id": 0, + "primo": 5 + }, + "640": { + "id": 640, + "name": "The Beautiful and Damned", + "category_id": 0, + "primo": 5 + }, + "641": { + "id": 641, + "name": "The Will to Live and the Depths of Lamentation", + "category_id": 0, + "primo": 5 + }, + "642": { + "id": 642, + "name": "May Glory Go With You", + "category_id": 0, + "primo": 10 + }, + "643": { + "id": 643, + "name": "No Way Home", + "category_id": 0, + "primo": 5 + }, + "644": { + "id": 644, + "name": "Layers of Fear", + "category_id": 0, + "primo": 5 + }, + "645": { + "id": 645, + "name": "Of Heart and Soul", + "category_id": 0, + "primo": 10 + }, + "646": { + "id": 646, + "name": "Arataki Gang Chief Advisor", + "category_id": 17, + "primo": 20 + }, + "647": { + "id": 647, + "name": "One More Look!", + "category_id": 17, + "primo": 5 + }, + "648": { + "id": 648, + "name": "\"Upstairs...\"", + "category_id": 17, + "primo": 5 + }, + "649": { + "id": 649, + "name": "You Thought We Were For Real, Eh?", + "category_id": 17, + "primo": 20 + }, + "650": { + "id": 650, + "name": "An Ideal Detective Am I", + "category_id": 17, + "primo": 5 + }, + "651": { + "id": 651, + "name": "Sangonomiya Supplications", + "category_id": 17, + "primo": 5 + }, + "652": { + "id": 652, + "name": "Continental Explorer: Sumeru Boscage", + "category_id": 31, + "primo": 5 + }, + "653": { + "id": 653, + "name": "Forest Roamer", + "category_id": 31, + "primo": 5 + }, + "654": { + "id": 654, + "name": "Sanctuary Pilgrim: Sumeru Boscage", + "category_id": 31, + "primo": 10 + }, + "655": { + "id": 655, + "name": "Fluorescent Bloom", + "category_id": 31, + "primo": 20 + }, + "656": { + "id": 656, + "name": "Culmination of the Great Dream", + "category_id": 31, + "primo": 20 + }, + "657": { + "id": 657, + "name": "Woodland Guide", + "category_id": 31, + "primo": 5 + }, + "658": { + "id": 658, + "name": "Woodland Guide", + "category_id": 31, + "primo": 10 + }, + "659": { + "id": 659, + "name": "Woodland Guide", + "category_id": 31, + "primo": 20 + }, + "660": { + "id": 660, + "name": "Treasure Hunter of the Shimmering Woods", + "category_id": 31, + "primo": 5 + }, + "661": { + "id": 661, + "name": "Treasure Hunter of the Shimmering Woods", + "category_id": 31, + "primo": 10 + }, + "662": { + "id": 662, + "name": "Treasure Hunter of the Shimmering Woods", + "category_id": 31, + "primo": 20 + }, + "663": { + "id": 663, + "name": "Adventurer of the Shimmering Woods", + "category_id": 31, + "primo": 5 + }, + "664": { + "id": 664, + "name": "Adventurer of the Shimmering Woods", + "category_id": 31, + "primo": 10 + }, + "665": { + "id": 665, + "name": "Adventurer of the Shimmering Woods", + "category_id": 31, + "primo": 20 + }, + "666": { + "id": 666, + "name": "The Forest Will Remember", + "category_id": 31, + "primo": 10 + }, + "667": { + "id": 667, + "name": "The Essence of Flora", + "category_id": 32, + "primo": 5 + }, + "668": { + "id": 668, + "name": "Reminiscence of Gurabad", + "category_id": 32, + "primo": 5 + }, + "669": { + "id": 669, + "name": "Bright as a Flame", + "category_id": 32, + "primo": 5 + }, + "670": { + "id": 670, + "name": "Farris' Journey", + "category_id": 32, + "primo": 5 + }, + "671": { + "id": 671, + "name": "Nature's Infinite Wit", + "category_id": 0, + "primo": 20 + }, + "672": { + "id": 672, + "name": "For Meritorious Service", + "category_id": 0, + "primo": 5 + }, + "673": { + "id": 673, + "name": "Portal of Marvels", + "category_id": 0, + "primo": 5 + }, + "674": { + "id": 674, + "name": "Perched Between Dream and Reality", + "category_id": 0, + "primo": 5 + }, + "675": { + "id": 675, + "name": "Music of the Forest", + "category_id": 0, + "primo": 5 + }, + "676": { + "id": 676, + "name": "A Leisurely Journey", + "category_id": 0, + "primo": 5 + }, + "677": { + "id": 677, + "name": "Glittering Melody", + "category_id": 0, + "primo": 5 + }, + "678": { + "id": 678, + "name": "The Tale of the Forest", + "category_id": 0, + "primo": 5 + }, + "679": { + "id": 679, + "name": "A Once-Emerald Nursery", + "category_id": 0, + "primo": 5 + }, + "680": { + "id": 680, + "name": "The End of Annihilation", + "category_id": 0, + "primo": 5 + }, + "681": { + "id": 681, + "name": "Though to the Earth I May Return...", + "category_id": 0, + "primo": 5 + }, + "682": { + "id": 682, + "name": "Ever an Outcast in the Forest", + "category_id": 0, + "primo": 5 + }, + "683": { + "id": 683, + "name": "Master Chef: Vanarana", + "category_id": 0, + "primo": 5 + }, + "684": { + "id": 684, + "name": "Open Sesame!", + "category_id": 0, + "primo": 5 + }, + "685": { + "id": 685, + "name": "A Conversation with the Treasure Chest Owner", + "category_id": 0, + "primo": 5 + }, + "686": { + "id": 686, + "name": "Vamadha-Go-Round", + "category_id": 0, + "primo": 5 + }, + "687": { + "id": 687, + "name": "In the Name of Anfortas", + "category_id": 0, + "primo": 5 + }, + "688": { + "id": 688, + "name": "Call of the Nameless City", + "category_id": 0, + "primo": 5 + }, + "689": { + "id": 689, + "name": "Walking with Water and Wind", + "category_id": 0, + "primo": 5 + }, + "690": { + "id": 690, + "name": "...Let Me Fade With Memory", + "category_id": 0, + "primo": 10 + }, + "691": { + "id": 691, + "name": "Now Let Time Resume", + "category_id": 0, + "primo": 5 + }, + "692": { + "id": 692, + "name": "Please Play Safely", + "category_id": 0, + "primo": 5 + }, + "693": { + "id": 693, + "name": "Eternal Sustenance", + "category_id": 0, + "primo": 5 + }, + "694": { + "id": 694, + "name": "When the Dreams Bloom", + "category_id": 0, + "primo": 5 + }, + "695": { + "id": 695, + "name": "A Walnut Tree Amidst the Gardens", + "category_id": 0, + "primo": 5 + }, + "696": { + "id": 696, + "name": "Sumeru Monster Ecology Survey", + "category_id": 0, + "primo": 5 + }, + "697": { + "id": 697, + "name": "As the Lion Searched for Courage...", + "category_id": 0, + "primo": 5 + }, + "698": { + "id": 698, + "name": "Summit of Wisdom", + "category_id": 0, + "primo": 5 + }, + "699": { + "id": 699, + "name": "Explorer", + "category_id": 0, + "primo": 5 + }, + "700": { + "id": 700, + "name": "The Jasmines Whisper, the Pomegranates Are Glad", + "category_id": 0, + "primo": 10 + }, + "701": { + "id": 701, + "name": "Swift as the Wind", + "category_id": 0, + "primo": 5 + }, + "702": { + "id": 702, + "name": "The Rule of Three", + "category_id": 0, + "primo": 5 + }, + "703": { + "id": 703, + "name": "The Bitter Fruit of Dreams", + "category_id": 0, + "primo": 5 + }, + "704": { + "id": 704, + "name": "The Rain Seeps Into the Soil", + "category_id": 0, + "primo": 10 + }, + "705": { + "id": 705, + "name": "They Enter the Flow", + "category_id": 0, + "primo": 5 + }, + "706": { + "id": 706, + "name": "Weather Control Activated", + "category_id": 0, + "primo": 5 + }, + "707": { + "id": 707, + "name": "Oh, Frabjous Day!", + "category_id": 0, + "primo": 5 + }, + "708": { + "id": 708, + "name": "Kara's Child", + "category_id": 0, + "primo": 5 + }, + "709": { + "id": 709, + "name": "The Lengthy Reunion", + "category_id": 0, + "primo": 5 + }, + "710": { + "id": 710, + "name": "\"I've Got It! I've Got It!\"", + "category_id": 0, + "primo": 5 + }, + "711": { + "id": 711, + "name": "Song of Night and Dawn", + "category_id": 0, + "primo": 5 + }, + "712": { + "id": 712, + "name": "\"Han Always Shoots First...\"", + "category_id": 0, + "primo": 5 + }, + "713": { + "id": 713, + "name": "Opportunistic Gain", + "category_id": 0, + "primo": 5 + }, + "714": { + "id": 714, + "name": "\"Get Over Here!\"", + "category_id": 0, + "primo": 5 + }, + "715": { + "id": 715, + "name": "When Autumn and Dew Meet", + "category_id": 0, + "primo": 5 + }, + "716": { + "id": 716, + "name": "Three Strikes", + "category_id": 0, + "primo": 5 + }, + "717": { + "id": 717, + "name": "Voice of Akasha", + "category_id": 0, + "primo": 5 + }, + "718": { + "id": 718, + "name": "The Merchant and the Gate of Knowledge", + "category_id": 0, + "primo": 5 + }, + "719": { + "id": 719, + "name": "The House of Canned Time", + "category_id": 0, + "primo": 5 + }, + "720": { + "id": 720, + "name": "Through Mists of Smoke and Forests Dark", + "category_id": 0, + "primo": 10 + }, + "721": { + "id": 721, + "name": "The Flavor of Déjà Vu", + "category_id": 0, + "primo": 5 + }, + "722": { + "id": 722, + "name": "Even Paimon Wouldn't Eat That!", + "category_id": 0, + "primo": 5 + }, + "723": { + "id": 723, + "name": "All Dreams Must End With an Awakening", + "category_id": 0, + "primo": 5 + }, + "724": { + "id": 724, + "name": "The Morn a Thousand Roses Brings", + "category_id": 0, + "primo": 10 + }, + "725": { + "id": 725, + "name": "Aha! What's on the Hook?", + "category_id": 0, + "primo": 5 + }, + "726": { + "id": 726, + "name": "Kalimi's Fungus", + "category_id": 0, + "primo": 5 + }, + "727": { + "id": 727, + "name": "When Wealth Comes A-Knockin'", + "category_id": 0, + "primo": 5 + }, + "728": { + "id": 728, + "name": "Catch Me-ow if You Can!", + "category_id": 0, + "primo": 5 + }, + "729": { + "id": 729, + "name": "Principia Arithmetica", + "category_id": 0, + "primo": 5 + }, + "730": { + "id": 730, + "name": "\"It's My Job.\"", + "category_id": 0, + "primo": 5 + }, + "731": { + "id": 731, + "name": "Relaxation Therapy", + "category_id": 0, + "primo": 5 + }, + "732": { + "id": 732, + "name": "Up by the Roots", + "category_id": 0, + "primo": 5 + }, + "733": { + "id": 733, + "name": "Date of Departure", + "category_id": 0, + "primo": 5 + }, + "734": { + "id": 734, + "name": "Don't Blame the Mora!", + "category_id": 0, + "primo": 5 + }, + "735": { + "id": 735, + "name": "The Sky is Vast; The Earth...", + "category_id": 0, + "primo": 5 + }, + "736": { + "id": 736, + "name": "Answer Time", + "category_id": 0, + "primo": 5 + }, + "737": { + "id": 737, + "name": "The Random Circumstances of a Rose's Blooming", + "category_id": 0, + "primo": 5 + }, + "738": { + "id": 738, + "name": "Where Have You Gone, My Dream?", + "category_id": 0, + "primo": 5 + }, + "739": { + "id": 739, + "name": "Non-Obligatory Request", + "category_id": 0, + "primo": 5 + }, + "740": { + "id": 740, + "name": "The Ship Has It", + "category_id": 0, + "primo": 5 + }, + "741": { + "id": 741, + "name": "What's the Matter?", + "category_id": 0, + "primo": 5 + }, + "742": { + "id": 742, + "name": "Scholarly in Sumeru", + "category_id": 0, + "primo": 5 + }, + "743": { + "id": 743, + "name": "Our Hearts as One", + "category_id": 33, + "primo": 10 + }, + "744": { + "id": 744, + "name": "Water, Basically", + "category_id": 33, + "primo": 10 + }, + "745": { + "id": 745, + "name": "Dashing Through the Snow... and the Flames", + "category_id": 33, + "primo": 10 + }, + "746": { + "id": 746, + "name": "The Whisperer in Darkness", + "category_id": 33, + "primo": 10 + }, + "747": { + "id": 747, + "name": "Brave the Lightning's Glow...", + "category_id": 33, + "primo": 10 + }, + "748": { + "id": 748, + "name": "Surpassing the Ancients' Wisdom", + "category_id": 33, + "primo": 10 + }, + "749": { + "id": 749, + "name": "I'm a Flexitarian", + "category_id": 33, + "primo": 10 + }, + "750": { + "id": 750, + "name": "Electric Shock Hazard", + "category_id": 33, + "primo": 10 + }, + "751": { + "id": 751, + "name": "Continental Explorer: Dune Dreams (I)", + "category_id": 35, + "primo": 5 + }, + "752": { + "id": 752, + "name": "Over Sandstorms and Mirages (I)", + "category_id": 35, + "primo": 5 + }, + "753": { + "id": 753, + "name": "Sanctuary Pilgrim: Dune Dreams (I)", + "category_id": 35, + "primo": 10 + }, + "754": { + "id": 754, + "name": "The Desert Will Guide You Home (I)", + "category_id": 35, + "primo": 5 + }, + "755": { + "id": 755, + "name": "The Desert Will Guide You Home (I)", + "category_id": 35, + "primo": 10 + }, + "756": { + "id": 756, + "name": "The Desert Will Guide You Home (I)", + "category_id": 35, + "primo": 20 + }, + "757": { + "id": 757, + "name": "Quicksand Treasure Hunter (I)", + "category_id": 35, + "primo": 5 + }, + "758": { + "id": 758, + "name": "Quicksand Treasure Hunter (I)", + "category_id": 35, + "primo": 10 + }, + "759": { + "id": 759, + "name": "Quicksand Treasure Hunter (I)", + "category_id": 35, + "primo": 20 + }, + "760": { + "id": 760, + "name": "Quicksand Adventurer (I)", + "category_id": 35, + "primo": 5 + }, + "761": { + "id": 761, + "name": "Quicksand Adventurer (I)", + "category_id": 35, + "primo": 10 + }, + "762": { + "id": 762, + "name": "Quicksand Adventurer (I)", + "category_id": 35, + "primo": 20 + }, + "763": { + "id": 763, + "name": "Slumber, the Brother Of...", + "category_id": 35, + "primo": 10 + }, + "764": { + "id": 764, + "name": "Close Encounters of the Which Kind?", + "category_id": 0, + "primo": 5 + }, + "765": { + "id": 765, + "name": "Exploration in the Desert", + "category_id": 0, + "primo": 5 + }, + "766": { + "id": 766, + "name": "Thinking Like a Vahumana Scholar", + "category_id": 0, + "primo": 5 + }, + "767": { + "id": 767, + "name": "Fata Morgana", + "category_id": 0, + "primo": 5 + }, + "768": { + "id": 768, + "name": "Create, Swap, Store, and Use", + "category_id": 0, + "primo": 5 + }, + "769": { + "id": 769, + "name": "The Amazing Pyramid", + "category_id": 0, + "primo": 5 + }, + "770": { + "id": 770, + "name": "Walk Like King Deshret's People", + "category_id": 0, + "primo": 5 + }, + "771": { + "id": 771, + "name": "The Straight Path", + "category_id": 0, + "primo": 5 + }, + "772": { + "id": 772, + "name": "The Path to Enlightenment", + "category_id": 0, + "primo": 5 + }, + "773": { + "id": 773, + "name": "Encore!", + "category_id": 0, + "primo": 5 + }, + "774": { + "id": 774, + "name": "Reclining on Top of the World", + "category_id": 0, + "primo": 10 + }, + "775": { + "id": 775, + "name": "What Does This Button Do?", + "category_id": 0, + "primo": 5 + }, + "776": { + "id": 776, + "name": "The Breakthrough", + "category_id": 0, + "primo": 5 + }, + "777": { + "id": 777, + "name": "What's the Password?", + "category_id": 0, + "primo": 5 + }, + "778": { + "id": 778, + "name": "The End of the Corridor", + "category_id": 0, + "primo": 5 + }, + "779": { + "id": 779, + "name": "The King of Four Lands", + "category_id": 0, + "primo": 5 + }, + "780": { + "id": 780, + "name": "Scarlet Reign's Great Red Sand", + "category_id": 0, + "primo": 5 + }, + "781": { + "id": 781, + "name": "Engraved", + "category_id": 0, + "primo": 5 + }, + "782": { + "id": 782, + "name": "Before My Time", + "category_id": 0, + "primo": 5 + }, + "783": { + "id": 783, + "name": "The Illusory City", + "category_id": 0, + "primo": 5 + }, + "784": { + "id": 784, + "name": "How Do You Write the Excavation Report?", + "category_id": 0, + "primo": 5 + }, + "785": { + "id": 785, + "name": "Drifting in the Wind", + "category_id": 0, + "primo": 5 + }, + "786": { + "id": 786, + "name": "One Flew Over the Sick Men's Rest", + "category_id": 0, + "primo": 5 + }, + "787": { + "id": 787, + "name": "A Well-Trained Archaeologist", + "category_id": 0, + "primo": 5 + }, + "788": { + "id": 788, + "name": "Beyond the Shadow of Time", + "category_id": 0, + "primo": 5 + }, + "789": { + "id": 789, + "name": "The Mad Flower at the End of the Road", + "category_id": 34, + "primo": 5 + }, + "790": { + "id": 790, + "name": "I Can't Take It Anymore!", + "category_id": 34, + "primo": 5 + }, + "791": { + "id": 791, + "name": "The Smell of Grilled Mushrooms in the Morning", + "category_id": 34, + "primo": 5 + }, + "792": { + "id": 792, + "name": "Dragonslayer", + "category_id": 34, + "primo": 5 + }, + "793": { + "id": 793, + "name": "Victory is a Mindset", + "category_id": 34, + "primo": 5 + }, + "794": { + "id": 794, + "name": "Resistance is Futile!", + "category_id": 34, + "primo": 5 + }, + "795": { + "id": 795, + "name": "System Shock", + "category_id": 34, + "primo": 5 + }, + "796": { + "id": 796, + "name": "Daisy, Daisy", + "category_id": 34, + "primo": 5 + }, + "797": { + "id": 797, + "name": "Stop It, Mr. Robot!", + "category_id": 0, + "primo": 5 + }, + "798": { + "id": 798, + "name": "Nanomachines, Son!", + "category_id": 0, + "primo": 5 + }, + "799": { + "id": 799, + "name": "Establishing a Beachhead", + "category_id": 0, + "primo": 5 + }, + "800": { + "id": 800, + "name": "The Invisible Hand", + "category_id": 0, + "primo": 5 + }, + "801": { + "id": 801, + "name": "Grassy Blasty, Sparks 'n' Splash", + "category_id": 36, + "primo": 5 + }, + "802": { + "id": 802, + "name": "Grassy Blasty, Sparks 'n' Splash", + "category_id": 36, + "primo": 10 + }, + "803": { + "id": 803, + "name": "Grassy Blasty, Sparks 'n' Splash", + "category_id": 36, + "primo": 20 + }, + "804": { + "id": 804, + "name": "Hyperblooming Circus", + "category_id": 36, + "primo": 5 + }, + "805": { + "id": 805, + "name": "Hyperblooming Circus", + "category_id": 36, + "primo": 10 + }, + "806": { + "id": 806, + "name": "Hyperblooming Circus", + "category_id": 36, + "primo": 20 + }, + "807": { + "id": 807, + "name": "Active Camouflage", + "category_id": 36, + "primo": 5 + }, + "808": { + "id": 808, + "name": "The Soul Transposed", + "category_id": 0, + "primo": 5 + }, + "809": { + "id": 809, + "name": "Triumph of the Imagination", + "category_id": 0, + "primo": 5 + }, + "810": { + "id": 810, + "name": "The God Gazes Back", + "category_id": 0, + "primo": 5 + }, + "811": { + "id": 811, + "name": "Dreams, Emptiness, Deception", + "category_id": 0, + "primo": 10 + }, + "812": { + "id": 812, + "name": "Desert Raider", + "category_id": 0, + "primo": 5 + }, + "813": { + "id": 813, + "name": "When the Dark Sun Passes", + "category_id": 0, + "primo": 5 + }, + "814": { + "id": 814, + "name": "King Deshret and the Three Magi", + "category_id": 0, + "primo": 10 + }, + "815": { + "id": 815, + "name": "One Step Too Far", + "category_id": 0, + "primo": 5 + }, + "816": { + "id": 816, + "name": "Doctor's Handwriting", + "category_id": 0, + "primo": 5 + }, + "817": { + "id": 817, + "name": "A Lingering Fragrance", + "category_id": 0, + "primo": 5 + }, + "818": { + "id": 818, + "name": "The Marvelous Uses of Nitrogen Fixation", + "category_id": 0, + "primo": 5 + }, + "819": { + "id": 819, + "name": "Records of the Fall", + "category_id": 0, + "primo": 5 + }, + "820": { + "id": 820, + "name": "It All Comes Tumbling Down", + "category_id": 0, + "primo": 10 + }, + "821": { + "id": 821, + "name": "Causality of Birth and Extinction", + "category_id": 0, + "primo": 10 + }, + "822": { + "id": 822, + "name": "Eremitis ne credite", + "category_id": 0, + "primo": 5 + }, + "823": { + "id": 823, + "name": "Victory Road", + "category_id": 0, + "primo": 5 + }, + "824": { + "id": 824, + "name": "The Longest Day", + "category_id": 0, + "primo": 5 + }, + "825": { + "id": 825, + "name": "...I'm Sorry, Sir, But You're Ineligible", + "category_id": 0, + "primo": 5 + }, + "826": { + "id": 826, + "name": "Akasha Pulses, the Kalpa Flame Rises", + "category_id": 0, + "primo": 10 + }, + "827": { + "id": 827, + "name": "Visible, Yet Invisible", + "category_id": 37, + "primo": 5 + }, + "828": { + "id": 828, + "name": "Win-Loss Ratio", + "category_id": 37, + "primo": 10 + }, + "829": { + "id": 829, + "name": "A Riotous Response", + "category_id": 37, + "primo": 5 + }, + "830": { + "id": 830, + "name": "A Riotous Response", + "category_id": 37, + "primo": 10 + }, + "831": { + "id": 831, + "name": "A Riotous Response", + "category_id": 37, + "primo": 20 + }, + "832": { + "id": 832, + "name": "Victory at Hand", + "category_id": 37, + "primo": 5 + }, + "833": { + "id": 833, + "name": "Victory at Hand", + "category_id": 37, + "primo": 10 + }, + "834": { + "id": 834, + "name": "Victory at Hand", + "category_id": 37, + "primo": 20 + }, + "835": { + "id": 835, + "name": "\"Well, Let's See It, Partner...\"", + "category_id": 37, + "primo": 5 + }, + "836": { + "id": 836, + "name": "\"Well, Let's See It, Partner...\"", + "category_id": 37, + "primo": 10 + }, + "837": { + "id": 837, + "name": "\"Well, Let's See It, Partner...\"", + "category_id": 37, + "primo": 20 + }, + "838": { + "id": 838, + "name": "Attack! Attack! Attack!", + "category_id": 37, + "primo": 5 + }, + "839": { + "id": 839, + "name": "Attack! Attack! Attack!", + "category_id": 37, + "primo": 10 + }, + "840": { + "id": 840, + "name": "Attack! Attack! Attack!", + "category_id": 37, + "primo": 20 + }, + "841": { + "id": 841, + "name": "A Candle in the Wind?", + "category_id": 37, + "primo": 5 + }, + "842": { + "id": 842, + "name": "A Candle in the Wind?", + "category_id": 37, + "primo": 10 + }, + "843": { + "id": 843, + "name": "A Candle in the Wind?", + "category_id": 37, + "primo": 20 + }, + "844": { + "id": 844, + "name": "Chaos Divided", + "category_id": 37, + "primo": 5 + }, + "845": { + "id": 845, + "name": "Chaos Divided", + "category_id": 37, + "primo": 10 + }, + "846": { + "id": 846, + "name": "Chaos Divided", + "category_id": 37, + "primo": 20 + }, + "847": { + "id": 847, + "name": "Legendary High Roller", + "category_id": 37, + "primo": 5 + }, + "848": { + "id": 848, + "name": "Legendary High Roller", + "category_id": 37, + "primo": 10 + }, + "849": { + "id": 849, + "name": "Legendary High Roller", + "category_id": 37, + "primo": 20 + }, + "850": { + "id": 850, + "name": "Miniaturized Dice-Shaker", + "category_id": 37, + "primo": 5 + }, + "851": { + "id": 851, + "name": "Miniaturized Dice-Shaker", + "category_id": 37, + "primo": 10 + }, + "852": { + "id": 852, + "name": "Miniaturized Dice-Shaker", + "category_id": 37, + "primo": 20 + }, + "853": { + "id": 853, + "name": "Mystery of Tatarasuna", + "category_id": 0, + "primo": 5 + }, + "854": { + "id": 854, + "name": "Echoes of History", + "category_id": 0, + "primo": 5 + }, + "855": { + "id": 855, + "name": "Parinama: Fox, Cat, Bird, and Monster", + "category_id": 0, + "primo": 5 + }, + "856": { + "id": 856, + "name": "Me, Myself, But Not I", + "category_id": 0, + "primo": 5 + }, + "857": { + "id": 857, + "name": "Inversion of Genesis", + "category_id": 0, + "primo": 10 + }, + "858": { + "id": 858, + "name": "Swordseeker", + "category_id": 0, + "primo": 5 + }, + "859": { + "id": 859, + "name": "To Walk The Horizon...?", + "category_id": 0, + "primo": 5 + }, + "860": { + "id": 860, + "name": "Continental Explorer: Dune Dreams (II)", + "category_id": 38, + "primo": 5 + }, + "861": { + "id": 861, + "name": "Over Sandstorms and Mirages (II)", + "category_id": 38, + "primo": 5 + }, + "862": { + "id": 862, + "name": "Sanctuary Pilgrim: Dune Dreams (II)", + "category_id": 38, + "primo": 10 + }, + "863": { + "id": 863, + "name": "The Dirge of Bilqis", + "category_id": 38, + "primo": 10 + }, + "864": { + "id": 864, + "name": "The Desert Will Guide You Home (II)", + "category_id": 38, + "primo": 5 + }, + "865": { + "id": 865, + "name": "The Desert Will Guide You Home (II)", + "category_id": 38, + "primo": 10 + }, + "866": { + "id": 866, + "name": "The Desert Will Guide You Home (II)", + "category_id": 38, + "primo": 20 + }, + "867": { + "id": 867, + "name": "Quicksand Treasure Hunter (II)", + "category_id": 38, + "primo": 5 + }, + "868": { + "id": 868, + "name": "Quicksand Treasure Hunter (II)", + "category_id": 38, + "primo": 10 + }, + "869": { + "id": 869, + "name": "Quicksand Treasure Hunter (II)", + "category_id": 38, + "primo": 20 + }, + "870": { + "id": 870, + "name": "Quicksand Adventurer (II)", + "category_id": 38, + "primo": 5 + }, + "871": { + "id": 871, + "name": "Quicksand Adventurer (II)", + "category_id": 38, + "primo": 10 + }, + "872": { + "id": 872, + "name": "Quicksand Adventurer (II)", + "category_id": 38, + "primo": 20 + }, + "873": { + "id": 873, + "name": "\"If They Had Known the Unseen...\"", + "category_id": 0, + "primo": 5 + }, + "874": { + "id": 874, + "name": "\"It's Only an Eternity of Servitude!\"", + "category_id": 0, + "primo": 5 + }, + "875": { + "id": 875, + "name": "The Nameless City's Past", + "category_id": 0, + "primo": 5 + }, + "877": { + "id": 877, + "name": "The Silent, Dreamless Paradise", + "category_id": 0, + "primo": 5 + }, + "878": { + "id": 878, + "name": "\"...For She Shall Surely Requite.\"", + "category_id": 0, + "primo": 5 + }, + "879": { + "id": 879, + "name": "La Luna Rossa", + "category_id": 0, + "primo": 5 + }, + "880": { + "id": 880, + "name": "Flat Out", + "category_id": 0, + "primo": 5 + }, + "881": { + "id": 881, + "name": "\"I Hate 'Em Myself!\"", + "category_id": 0, + "primo": 5 + }, + "882": { + "id": 882, + "name": "Genesis of the Rift", + "category_id": 0, + "primo": 5 + }, + "883": { + "id": 883, + "name": "Didn't Even Need a Manual...", + "category_id": 0, + "primo": 5 + }, + "884": { + "id": 884, + "name": "Hunter's Mercy", + "category_id": 0, + "primo": 5 + }, + "885": { + "id": 885, + "name": "On a Magic Carpet Ride", + "category_id": 0, + "primo": 5 + }, + "886": { + "id": 886, + "name": "\"Isn't Life Wondrous?\"", + "category_id": 0, + "primo": 5 + }, + "887": { + "id": 887, + "name": "The Ancient Orchard and Spring", + "category_id": 0, + "primo": 5 + }, + "888": { + "id": 888, + "name": "In Her Full Glory...", + "category_id": 0, + "primo": 5 + }, + "889": { + "id": 889, + "name": "\"...Shew the Kingdoms Thy Shame.\"", + "category_id": 0, + "primo": 5 + }, + "890": { + "id": 890, + "name": "From Soil You Are, and to the Sand You Shall Return...", + "category_id": 0, + "primo": 5 + }, + "891": { + "id": 891, + "name": "The Perfect Sandstorm", + "category_id": 0, + "primo": 5 + }, + "892": { + "id": 892, + "name": "The Loveless Tarantula", + "category_id": 0, + "primo": 5 + }, + "893": { + "id": 893, + "name": "Parvezravan Khwarrah", + "category_id": 0, + "primo": 5 + }, + "894": { + "id": 894, + "name": "A Very Long Engagement", + "category_id": 0, + "primo": 5 + }, + "895": { + "id": 895, + "name": "He Who Controls the Spice...", + "category_id": 0, + "primo": 5 + }, + "896": { + "id": 896, + "name": "Star-Crossed Night", + "category_id": 0, + "primo": 5 + }, + "897": { + "id": 897, + "name": "The Sickness Unto Near-Death", + "category_id": 0, + "primo": 5 + }, + "898": { + "id": 898, + "name": "The Far Side of Fate", + "category_id": 0, + "primo": 5 + }, + "899": { + "id": 899, + "name": "Caribert", + "category_id": 0, + "primo": 10 + }, + "900": { + "id": 900, + "name": "Optimal Solution", + "category_id": 17, + "primo": 20 + }, + "901": { + "id": 901, + "name": "To You in a Hundred Years", + "category_id": 17, + "primo": 5 + }, + "902": { + "id": 902, + "name": "Mechanics: From Beginner to...?", + "category_id": 17, + "primo": 5 + }, + "903": { + "id": 903, + "name": "Continental Explorer: Blessed Hamada", + "category_id": 41, + "primo": 5 + }, + "904": { + "id": 904, + "name": "Descending Into the Depths of Desolation", + "category_id": 41, + "primo": 5 + }, + "905": { + "id": 905, + "name": "Sanctuary Pilgrim: Blessed Hamada", + "category_id": 41, + "primo": 10 + }, + "906": { + "id": 906, + "name": "Dune Guide", + "category_id": 41, + "primo": 5 + }, + "907": { + "id": 907, + "name": "Dune Guide", + "category_id": 41, + "primo": 10 + }, + "908": { + "id": 908, + "name": "Dune Guide", + "category_id": 41, + "primo": 20 + }, + "909": { + "id": 909, + "name": "Badlands Treasure Hunter", + "category_id": 41, + "primo": 5 + }, + "910": { + "id": 910, + "name": "Badlands Treasure Hunter", + "category_id": 41, + "primo": 10 + }, + "911": { + "id": 911, + "name": "Badlands Treasure Hunter", + "category_id": 41, + "primo": 20 + }, + "912": { + "id": 912, + "name": "Badlands Adventurer", + "category_id": 41, + "primo": 5 + }, + "913": { + "id": 913, + "name": "Badlands Adventurer", + "category_id": 41, + "primo": 10 + }, + "914": { + "id": 914, + "name": "Badlands Adventurer", + "category_id": 41, + "primo": 20 + }, + "915": { + "id": 915, + "name": "Alkanet Amrita", + "category_id": 41, + "primo": 20 + }, + "916": { + "id": 916, + "name": "Khvarena of Good and Evil", + "category_id": 41, + "primo": 10 + }, + "917": { + "id": 917, + "name": "Where the Light Touches", + "category_id": 0, + "primo": 5 + }, + "918": { + "id": 918, + "name": "Like a Morning Sun Coming Out of Gloomy Mountains", + "category_id": 0, + "primo": 5 + }, + "919": { + "id": 919, + "name": "The Tree on the Hill", + "category_id": 0, + "primo": 5 + }, + "920": { + "id": 920, + "name": "Beneath the Fog", + "category_id": 0, + "primo": 5 + }, + "921": { + "id": 921, + "name": "Hic Pulso", + "category_id": 0, + "primo": 5 + }, + "922": { + "id": 922, + "name": "Vyakarana of the Birds", + "category_id": 0, + "primo": 5 + }, + "923": { + "id": 923, + "name": "Behold My Righteous Strike!", + "category_id": 0, + "primo": 5 + }, + "924": { + "id": 924, + "name": "\"...Abandon All Hope, Ye Who Enter Here.\"", + "category_id": 0, + "primo": 5 + }, + "925": { + "id": 925, + "name": "Fabricator-General", + "category_id": 0, + "primo": 5 + }, + "926": { + "id": 926, + "name": "Trial of Haft-Vádí", + "category_id": 0, + "primo": 5 + }, + "927": { + "id": 927, + "name": "A Rope Over an Abyss", + "category_id": 0, + "primo": 5 + }, + "928": { + "id": 928, + "name": "The Camel, the Lion, and the Child", + "category_id": 0, + "primo": 5 + }, + "929": { + "id": 929, + "name": "The Day of Tirgan", + "category_id": 0, + "primo": 5 + }, + "930": { + "id": 930, + "name": "A Fascinating Journey", + "category_id": 0, + "primo": 5 + }, + "931": { + "id": 931, + "name": "\"This Mystery Is Solved!\"", + "category_id": 0, + "primo": 5 + }, + "932": { + "id": 932, + "name": "Homeward-Bound Spirits", + "category_id": 0, + "primo": 5 + }, + "933": { + "id": 933, + "name": "The Sea of Fertility", + "category_id": 0, + "primo": 5 + }, + "934": { + "id": 934, + "name": "The Brave Shall Not Falter", + "category_id": 0, + "primo": 5 + }, + "935": { + "id": 935, + "name": "Bifröst", + "category_id": 0, + "primo": 5 + }, + "936": { + "id": 936, + "name": "Seven Dish Dance", + "category_id": 0, + "primo": 5 + }, + "937": { + "id": 937, + "name": "Shining in the Mire", + "category_id": 0, + "primo": 5 + }, + "938": { + "id": 938, + "name": "When the Red Scarf Transforms Into a Bird in Flight...", + "category_id": 0, + "primo": 5 + }, + "939": { + "id": 939, + "name": "Soaring in the Skies of Sary-Ozek", + "category_id": 0, + "primo": 5 + }, + "940": { + "id": 940, + "name": "Whose Descendant Are You, and What's Your Name?", + "category_id": 0, + "primo": 5 + }, + "941": { + "id": 941, + "name": "Use the Force, Sorush", + "category_id": 0, + "primo": 5 + }, + "942": { + "id": 942, + "name": "Refusal of Thorns", + "category_id": 39, + "primo": 5 + }, + "943": { + "id": 943, + "name": "Back for More", + "category_id": 39, + "primo": 5 + }, + "944": { + "id": 944, + "name": "Like Hopscotch?", + "category_id": 39, + "primo": 5 + }, + "945": { + "id": 945, + "name": "...It's Payback Time", + "category_id": 39, + "primo": 10 + }, + "946": { + "id": 946, + "name": "Now That's What You Call the Four Winds!", + "category_id": 39, + "primo": 5 + }, + "947": { + "id": 947, + "name": "Despite the Barrier Between Us...", + "category_id": 39, + "primo": 10 + }, + "948": { + "id": 948, + "name": "Proof by Exhaustion", + "category_id": 39, + "primo": 5 + }, + "949": { + "id": 949, + "name": "When You Say Nothing at All", + "category_id": 0, + "primo": 5 + }, + "950": { + "id": 950, + "name": "Like the Sun's Passage", + "category_id": 39, + "primo": 10 + }, + "951": { + "id": 951, + "name": "The Name Is Layla", + "category_id": 17, + "primo": 20 + }, + "952": { + "id": 952, + "name": "She's Already Tense", + "category_id": 17, + "primo": 5 + }, + "953": { + "id": 953, + "name": "Secret of Seelie and the Star-Lit Sky", + "category_id": 17, + "primo": 5 + }, + "954": { + "id": 954, + "name": "Art and Life", + "category_id": 17, + "primo": 20 + }, + "955": { + "id": 955, + "name": "School Days", + "category_id": 17, + "primo": 5 + }, + "956": { + "id": 956, + "name": "An Architect's Romanticism", + "category_id": 17, + "primo": 5 + }, + "957": { + "id": 957, + "name": "Make Merry", + "category_id": 17, + "primo": 20 + }, + "958": { + "id": 958, + "name": "Lucky Coin", + "category_id": 17, + "primo": 5 + }, + "959": { + "id": 959, + "name": "Shh... Listen!", + "category_id": 17, + "primo": 5 + }, + "960": { + "id": 960, + "name": "Continental Explorer: Land of Harmonious Springs (I)", + "category_id": 42, + "primo": 5 + }, + "961": { + "id": 961, + "name": "Font of All Waters (I)", + "category_id": 42, + "primo": 5 + }, + "962": { + "id": 962, + "name": "Sanctuary Pilgrim: Land of Harmonious Springs (I)", + "category_id": 42, + "primo": 10 + }, + "963": { + "id": 963, + "name": "Like Waters Clear", + "category_id": 42, + "primo": 20 + }, + "964": { + "id": 964, + "name": "Dew Song", + "category_id": 42, + "primo": 20 + }, + "965": { + "id": 965, + "name": "Tides Will Guide You Home (I)", + "category_id": 42, + "primo": 5 + }, + "966": { + "id": 966, + "name": "Tides Will Guide You Home (I)", + "category_id": 42, + "primo": 10 + }, + "967": { + "id": 967, + "name": "Tides Will Guide You Home (I)", + "category_id": 42, + "primo": 20 + }, + "968": { + "id": 968, + "name": "Waveriding Treasure Hunter (I)", + "category_id": 42, + "primo": 5 + }, + "969": { + "id": 969, + "name": "Waveriding Treasure Hunter (I)", + "category_id": 42, + "primo": 10 + }, + "970": { + "id": 970, + "name": "Waveriding Treasure Hunter (I)", + "category_id": 42, + "primo": 20 + }, + "971": { + "id": 971, + "name": "Waveriding Adventurer (I)", + "category_id": 42, + "primo": 5 + }, + "972": { + "id": 972, + "name": "Waveriding Adventurer (I)", + "category_id": 42, + "primo": 10 + }, + "973": { + "id": 973, + "name": "Waveriding Adventurer (I)", + "category_id": 42, + "primo": 20 + }, + "974": { + "id": 974, + "name": "Ann in Wonderland", + "category_id": 42, + "primo": 10 + }, + "975": { + "id": 975, + "name": "Limner, Dreamer, and Robotic Dog", + "category_id": 42, + "primo": 10 + }, + "976": { + "id": 976, + "name": "Land of Fair Springs", + "category_id": 43, + "primo": 5 + }, + "977": { + "id": 977, + "name": "Renart the Deceiver", + "category_id": 43, + "primo": 5 + }, + "978": { + "id": 978, + "name": "Robben versus Chesterton", + "category_id": 43, + "primo": 5 + }, + "979": { + "id": 979, + "name": "Compendium of Misery", + "category_id": 43, + "primo": 5 + }, + "980": { + "id": 980, + "name": "Angle Eraser", + "category_id": 0, + "primo": 5 + }, + "981": { + "id": 981, + "name": "Core Cooling", + "category_id": 0, + "primo": 5 + }, + "982": { + "id": 982, + "name": "The White Ship", + "category_id": 0, + "primo": 5 + }, + "983": { + "id": 983, + "name": "Encyclopedia of Natural Philosophy", + "category_id": 0, + "primo": 5 + }, + "984": { + "id": 984, + "name": "A Fontainian Message", + "category_id": 0, + "primo": 5 + }, + "985": { + "id": 985, + "name": "Nothing but a Hound Dog...", + "category_id": 0, + "primo": 5 + }, + "986": { + "id": 986, + "name": "It's Fish, I Added Fish", + "category_id": 0, + "primo": 5 + }, + "987": { + "id": 987, + "name": "Welcome to Fontaine", + "category_id": 0, + "primo": 5 + }, + "988": { + "id": 988, + "name": "Sogno di Volare", + "category_id": 0, + "primo": 5 + }, + "989": { + "id": 989, + "name": "Birth of the Modern Clock", + "category_id": 0, + "primo": 5 + }, + "990": { + "id": 990, + "name": "Waterworld Future", + "category_id": 0, + "primo": 5 + }, + "991": { + "id": 991, + "name": "Aesthetics of Ugliness", + "category_id": 0, + "primo": 5 + }, + "992": { + "id": 992, + "name": "Like Tears in the Rain", + "category_id": 0, + "primo": 5 + }, + "993": { + "id": 993, + "name": "These Are a Few of My...", + "category_id": 0, + "primo": 5 + }, + "994": { + "id": 994, + "name": "An Eye for an Eye", + "category_id": 0, + "primo": 5 + }, + "995": { + "id": 995, + "name": "Do You Believe In Rapture?", + "category_id": 0, + "primo": 5 + }, + "996": { + "id": 996, + "name": "Hardships Experienced...", + "category_id": 0, + "primo": 5 + }, + "997": { + "id": 997, + "name": "And After That...", + "category_id": 0, + "primo": 5 + }, + "998": { + "id": 998, + "name": "A Study in Sable", + "category_id": 0, + "primo": 5 + }, + "999": { + "id": 999, + "name": "Twenty Thousand Leagues Under the Sea", + "category_id": 0, + "primo": 5 + }, + "1000": { + "id": 1000, + "name": "Truly Mouthwatering!", + "category_id": 0, + "primo": 5 + }, + "1001": { + "id": 1001, + "name": "Song of the Ancients", + "category_id": 0, + "primo": 5 + }, + "1002": { + "id": 1002, + "name": "Ninianne of the Lake", + "category_id": 0, + "primo": 5 + }, + "1003": { + "id": 1003, + "name": "Vivianne of the Lake", + "category_id": 0, + "primo": 5 + }, + "1004": { + "id": 1004, + "name": "Fontaine Expects That Everyone Will Do Their Duty", + "category_id": 0, + "primo": 5 + }, + "1005": { + "id": 1005, + "name": "In Search of Frittered Time", + "category_id": 0, + "primo": 20 + }, + "1006": { + "id": 1006, + "name": "Blubby, Chubby, Creative Evolution", + "category_id": 0, + "primo": 5 + }, + "1007": { + "id": 1007, + "name": "Ocean Circuit Judge", + "category_id": 0, + "primo": 5 + }, + "1008": { + "id": 1008, + "name": "Iron Viscount", + "category_id": 0, + "primo": 5 + }, + "1009": { + "id": 1009, + "name": "Dobharcu, Lord of the Hidden", + "category_id": 0, + "primo": 5 + }, + "1010": { + "id": 1010, + "name": "Fading Veteran", + "category_id": 0, + "primo": 5 + }, + "1011": { + "id": 1011, + "name": "Swords of the Gorge", + "category_id": 0, + "primo": 5 + }, + "1012": { + "id": 1012, + "name": "The Fairy Knight Twins", + "category_id": 0, + "primo": 5 + }, + "1013": { + "id": 1013, + "name": "The White Path Between Two Rivers", + "category_id": 0, + "primo": 5 + }, + "1014": { + "id": 1014, + "name": "Cell, Splinter", + "category_id": 0, + "primo": 5 + }, + "1015": { + "id": 1015, + "name": "Too Hot to Handle!", + "category_id": 0, + "primo": 5 + }, + "1016": { + "id": 1016, + "name": "Funerary Storm", + "category_id": 0, + "primo": 5 + }, + "1017": { + "id": 1017, + "name": "The King Is Dead, Long Live the King!", + "category_id": 0, + "primo": 5 + }, + "1018": { + "id": 1018, + "name": "Icebound Oath", + "category_id": 0, + "primo": 5 + }, + "1019": { + "id": 1019, + "name": "Like Water Disappearing Into Water", + "category_id": 0, + "primo": 5 + }, + "1020": { + "id": 1020, + "name": "A Detective in Action", + "category_id": 0, + "primo": 5 + }, + "1021": { + "id": 1021, + "name": "A Twist of Great Magic", + "category_id": 0, + "primo": 5 + }, + "1022": { + "id": 1022, + "name": "Prelude of Blancheur and Noirceur", + "category_id": 0, + "primo": 10 + }, + "1023": { + "id": 1023, + "name": "Lennék én folyóvíz", + "category_id": 0, + "primo": 5 + }, + "1024": { + "id": 1024, + "name": "Once Upon a Time in Fleuve Cendre", + "category_id": 0, + "primo": 5 + }, + "1025": { + "id": 1025, + "name": "Tragedy Repeats Itself", + "category_id": 0, + "primo": 5 + }, + "1026": { + "id": 1026, + "name": "As Light Rain Falls Without Reason", + "category_id": 0, + "primo": 10 + }, + "1027": { + "id": 1027, + "name": "Office on the Avenue", + "category_id": 0, + "primo": 5 + }, + "1028": { + "id": 1028, + "name": "Not Your Average Joe", + "category_id": 0, + "primo": 5 + }, + "1029": { + "id": 1029, + "name": "Aesthetic Critique", + "category_id": 0, + "primo": 5 + }, + "1030": { + "id": 1030, + "name": "Second Childhood", + "category_id": 0, + "primo": 5 + }, + "1031": { + "id": 1031, + "name": "A Sudden Squall", + "category_id": 0, + "primo": 5 + }, + "1032": { + "id": 1032, + "name": "End of the Eternal Return", + "category_id": 44, + "primo": 10 + }, + "1033": { + "id": 1033, + "name": "Ever So Slightly Inferior", + "category_id": 44, + "primo": 10 + }, + "1034": { + "id": 1034, + "name": "The Greenery Out of Space", + "category_id": 44, + "primo": 10 + }, + "1035": { + "id": 1035, + "name": "Dance Like You Want to Win!", + "category_id": 44, + "primo": 10 + }, + "1036": { + "id": 1036, + "name": "Desert-Dwellers' Rite of Passage", + "category_id": 44, + "primo": 10 + }, + "1037": { + "id": 1037, + "name": "Presumption of Guilt", + "category_id": 44, + "primo": 10 + }, + "1038": { + "id": 1038, + "name": "Proof of the Reed Sea Conqueror", + "category_id": 44, + "primo": 10 + }, + "1039": { + "id": 1039, + "name": "The Power of Science is Staggering!", + "category_id": 44, + "primo": 10 + }, + "1040": { + "id": 1040, + "name": "A Successful Hunt", + "category_id": 44, + "primo": 10 + }, + "1041": { + "id": 1041, + "name": "Continental Explorer: Land of Harmonious Springs (II)", + "category_id": 45, + "primo": 5 + }, + "1042": { + "id": 1042, + "name": "Font of All Waters (II)", + "category_id": 45, + "primo": 5 + }, + "1043": { + "id": 1043, + "name": "Sanctuary Pilgrim: Land of Harmonious Springs (II)", + "category_id": 45, + "primo": 10 + }, + "1044": { + "id": 1044, + "name": "Tidal Guide (II)", + "category_id": 45, + "primo": 5 + }, + "1045": { + "id": 1045, + "name": "Tidal Guide (II)", + "category_id": 45, + "primo": 10 + }, + "1046": { + "id": 1046, + "name": "Tidal Guide (II)", + "category_id": 45, + "primo": 20 + }, + "1047": { + "id": 1047, + "name": "Waveriding Treasure Hunter (II)", + "category_id": 45, + "primo": 5 + }, + "1048": { + "id": 1048, + "name": "Waveriding Treasure Hunter (II)", + "category_id": 45, + "primo": 10 + }, + "1049": { + "id": 1049, + "name": "Waveriding Treasure Hunter (II)", + "category_id": 45, + "primo": 20 + }, + "1050": { + "id": 1050, + "name": "Waveriding Adventurer (II)", + "category_id": 45, + "primo": 5 + }, + "1051": { + "id": 1051, + "name": "Waveriding Adventurer (II)", + "category_id": 45, + "primo": 10 + }, + "1052": { + "id": 1052, + "name": "Waveriding Adventurer (II)", + "category_id": 45, + "primo": 20 + }, + "1053": { + "id": 1053, + "name": "There Is One Spectacle Grander Than the Sea, That Is the Sky", + "category_id": 45, + "primo": 10 + }, + "1054": { + "id": 1054, + "name": "This Ends Here", + "category_id": 45, + "primo": 10 + }, + "1055": { + "id": 1055, + "name": "Consumer Society", + "category_id": 0, + "primo": 5 + }, + "1056": { + "id": 1056, + "name": "When the Clock Strikes Midnight", + "category_id": 0, + "primo": 5 + }, + "1057": { + "id": 1057, + "name": "Non-Zero-Sum Game", + "category_id": 0, + "primo": 5 + }, + "1058": { + "id": 1058, + "name": "The Superfluous Man's Account", + "category_id": 0, + "primo": 5 + }, + "1059": { + "id": 1059, + "name": "Les Quatre Coups", + "category_id": 0, + "primo": 5 + }, + "1060": { + "id": 1060, + "name": "What Lies at the End of the Rainbow...?", + "category_id": 0, + "primo": 5 + }, + "1061": { + "id": 1061, + "name": "Come on out, Mystery Ore! Grant my wish!", + "category_id": 0, + "primo": 5 + }, + "1062": { + "id": 1062, + "name": "Not So Strait Is the Gate", + "category_id": 0, + "primo": 5 + }, + "1063": { + "id": 1063, + "name": "The Remains of the Day", + "category_id": 0, + "primo": 5 + }, + "1064": { + "id": 1064, + "name": "The Calendar of the Future Is Longer Than the Diary of the Past", + "category_id": 0, + "primo": 5 + }, + "1065": { + "id": 1065, + "name": "Break the Time Zone", + "category_id": 0, + "primo": 5 + }, + "1066": { + "id": 1066, + "name": "The Forgotten Ream", + "category_id": 0, + "primo": 5 + }, + "1067": { + "id": 1067, + "name": "While Motors Sleep...", + "category_id": 0, + "primo": 5 + }, + "1068": { + "id": 1068, + "name": "The Worst! Fontaine's Eight Evil Clockwork Knights!", + "category_id": 0, + "primo": 5 + }, + "1069": { + "id": 1069, + "name": "\"Automated Supercomputing Field Generator\"", + "category_id": 0, + "primo": 5 + }, + "1070": { + "id": 1070, + "name": "Slam-Bang No-Holds Barred Meropide-Style Pankration", + "category_id": 0, + "primo": 5 + }, + "1071": { + "id": 1071, + "name": "Undocumented Feature", + "category_id": 0, + "primo": 5 + }, + "1072": { + "id": 1072, + "name": "Le Scaphandre et le Pufferfruit", + "category_id": 0, + "primo": 5 + }, + "1073": { + "id": 1073, + "name": "\"Luachra the Brilliant\"", + "category_id": 0, + "primo": 5 + }, + "1075": { + "id": 1075, + "name": "Mired in Red Tape", + "category_id": 0, + "primo": 5 + }, + "1076": { + "id": 1076, + "name": "Solitary Report", + "category_id": 0, + "primo": 5 + }, + "1078": { + "id": 1078, + "name": "The Red Meanies' Revenge", + "category_id": 0, + "primo": 5 + }, + "1079": { + "id": 1079, + "name": "The Final Fonta Sea", + "category_id": 0, + "primo": 5 + }, + "1080": { + "id": 1080, + "name": "\"...What New Tide?\"", + "category_id": 0, + "primo": 5 + }, + "1081": { + "id": 1081, + "name": "A Perfect Yesterday", + "category_id": 0, + "primo": 5 + }, + "1082": { + "id": 1082, + "name": "Thanks For Your Patronage!", + "category_id": 0, + "primo": 5 + }, + "1083": { + "id": 1083, + "name": "The Final Fonta Sea", + "category_id": 0, + "primo": 5 + }, + "1084": { + "id": 1084, + "name": "The Final Fonta Sea", + "category_id": 0, + "primo": 5 + }, + "1085": { + "id": 1085, + "name": "\"Yseut\"", + "category_id": 0, + "primo": 5 + }, + "1086": { + "id": 1086, + "name": "The Distance of the Moon", + "category_id": 40, + "primo": 5 + }, + "1087": { + "id": 1087, + "name": "Gravity Front", + "category_id": 40, + "primo": 5 + }, + "1088": { + "id": 1088, + "name": "Shackle Me, That I Might Willingly Be Destroyed", + "category_id": 40, + "primo": 5 + }, + "1089": { + "id": 1089, + "name": "Crabs for the Crab Throne", + "category_id": 40, + "primo": 5 + }, + "1090": { + "id": 1090, + "name": "Collezione di Sabbia", + "category_id": 40, + "primo": 5 + }, + "1091": { + "id": 1091, + "name": "Fulgura Frango", + "category_id": 40, + "primo": 5 + }, + "1092": { + "id": 1092, + "name": "Visitor to the \"Aquarium\"", + "category_id": 0, + "primo": 5 + }, + "1093": { + "id": 1093, + "name": "A Vision in a Dream", + "category_id": 0, + "primo": 5 + }, + "1094": { + "id": 1094, + "name": "Fortress Corner Society's Rules", + "category_id": 0, + "primo": 5 + }, + "1095": { + "id": 1095, + "name": "To the Stars Shining in the Depths", + "category_id": 0, + "primo": 10 + }, + "1096": { + "id": 1096, + "name": "Le Déluge", + "category_id": 0, + "primo": 5 + }, + "1097": { + "id": 1097, + "name": "The Secret of Blue Water", + "category_id": 0, + "primo": 5 + }, + "1098": { + "id": 1098, + "name": "Out of the Aeons", + "category_id": 0, + "primo": 5 + }, + "1099": { + "id": 1099, + "name": "Cataclysm's Quickening", + "category_id": 0, + "primo": 10 + }, + "1100": { + "id": 1100, + "name": "New Inspiration! New Products!", + "category_id": 0, + "primo": 5 + } +} \ No newline at end of file diff --git a/assets/gc_categories.json b/assets/gc_categories.json new file mode 100644 index 0000000..1c206bd --- /dev/null +++ b/assets/gc_categories.json @@ -0,0 +1,48 @@ +{ + "0": "Wonders of the World", + "1": "Mortal Travails: Series I", + "2": "The Art of Adventure", + "3": "The Hero's Journey", + "4": "Mondstadt: The City of Wind and Song", + "5": "Liyue: The Harbor of Stone and Contracts", + "6": "Elemental Specialist: Series I", + "7": "Marksmanship", + "8": "Challenger: Series I", + "9": "Domains and Spiral Abyss: Series I", + "10": "Olah!: Series I", + "11": "Snezhnaya Does Not Believe in Tears: Series I", + "12": "Stone Harbor's Nostalgia: Series I", + "13": "Meetings in Outrealm: Series I", + "14": "Challenger: Series II", + "15": "Challenger: Series III", + "16": "Visitors on the Icy Mountain", + "17": "Memories of the Heart", + "18": "A Realm Beyond: Series I", + "19": "A Realm Beyond: Series II", + "20": "Challenger: Series IV", + "21": "Meetings in Outrealm: Series II", + "22": "Mortal Travails: Series II", + "23": "A Realm Beyond: Series III", + "24": "Inazuma: The Islands of Thunder and Eternity - Series I", + "25": "Teyvat Fishing Guide: Series I", + "26": "Inazuma: The Islands of Thunder and Eternity - Series II", + "27": "The Chronicles of the Sea of Fog", + "28": "The Light of Day", + "29": "Challenger: Series V", + "30": "Chasmlighter", + "31": "Sumeru: The Rainforest of Lore", + "32": "Mortal Travails: Series III", + "33": "Meetings in Outrealm: Series III", + "34": "Challenger: Series VI", + "35": "Sumeru: The Gilded Desert - Series I", + "36": "Elemental Specialist: Series II", + "37": "Genius Invokation TCG", + "38": "Sumeru: The Gilded Desert - Series II", + "39": "Challenger: Series VII", + "40": "Challenger: Series VIII", + "41": "Blessed Hamada", + "42": "Fontaine: Dance of the Dew-White Springs (I)", + "43": "Mortal Travails: Series IV", + "44": "Meetings in Outrealm: Series IV", + "45": "Fontaine: Dance of the Dew-White Springs (II)" +} \ No newline at end of file diff --git a/build.cmd b/build.cmd new file mode 100644 index 0000000..81721e8 --- /dev/null +++ b/build.cmd @@ -0,0 +1,2 @@ +pyinstaller main.spec +pyinstaller submit_to_gc.spec \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..68c7369 --- /dev/null +++ b/main.py @@ -0,0 +1,380 @@ +import ctypes +import io +import json +import logging +import sys +from time import sleep +from typing import Dict, List, Tuple + +from PIL import ImageOps, Image +from rapidfuzz import process, fuzz +from rapidfuzz.utils import default_process +from pywinauto import Application +from pywinauto.controls.hwndwrapper import DialogWrapper +from pywinauto.win32structures import RECT + +from utils import find_process, scale_coords_to_resolution, scale_box_to_resolution, bold_color_mask, \ + generate_achievement_boxes, scan_image, get_asset_path + +button_coords = { + "main_achievement_button": (885, 542), + "main_achievement_category": (249, 384), + "achievement_category": (500, 290), + "achievement_scroll": (969, 448), + "category_scroll": (53, 448), +} +box_coords = { + "achievement_category": RECT(152, 240, 658, 106), + # "achievement": RECT(1167, 208, 878, 138), + # "achievement_categories": RECT(1167, 393, 878, 138), + # "achievement_status": RECT(2208, 195, 220, 161), +} + + +class AchievementScanner(object): + debug_mode: bool = True + debug_disable_postprocessing: bool = False + window_rect: RECT = None + + buttons: Dict[str, tuple] = {} # both are scaled for user's resolution + boxes: Dict[str, RECT] = {} + + achievements: Dict[str, bool] = {} # title - completed + categories: List[str] = [] + database: List[str] = [] + + # loop + achievement_id: int = 0 + category_id: int = 0 + + def scale_for_resolution(self): + end_achievement = RECT(1167, 1148, 881, 140) + end_achievement_status = RECT(2219, 1148, 220, 140) + end_achievement_adjust = 167 + box_coords.update(generate_achievement_boxes(end_achievement, end_achievement_status, end_achievement_adjust, + key="end_achievement", count=5)) + + end_category = RECT(173, 1213, 697, 109) + end_category_adjust = 138 + box_coords.update(generate_achievement_boxes(end_category, None, end_category_adjust, + key="end_category", count=7)) + + start_achievement_category = RECT(1167, 400, 900, 126) + start_achievement_category_status = RECT(2224, 400, 192, 126) + start_achievement_category_adjust = 167 + box_coords.update( + generate_achievement_boxes(start_achievement_category, start_achievement_category_status, + start_achievement_category_adjust, + key="start_achievement_category", count=5, inversed=True)) + + start_achievement = RECT(1167, 176, 878, 138) + start_achievement_status = RECT(2208, 176, 220, 138) + start_achievement_adjust = 167 + box_coords.update( + generate_achievement_boxes(start_achievement, start_achievement_status, start_achievement_adjust, + key="start_achievement", count=5, inversed=True)) + + self.window_rect = self.window.element_info.rectangle + resolution = (self.window_rect.width(), self.window_rect.height()) + self.buttons = {k: scale_coords_to_resolution(v, resolution) for k, v in button_coords.items()} + self.boxes = {k: scale_box_to_resolution(v, self.window_rect) for k, v in box_coords.items()} + self.logger.debug('ready') + + def __init__(self, window: DialogWrapper): + self.window = window + self.logger = logging.getLogger("AchievementScanner") + self.scale_for_resolution() + + def scroll_mouse(self, steps: int, coords: tuple): + self.logger.debug(f"Scrolling {steps} times at {coords}") + max_scroll = steps + scrolled = 0 + while scrolled < max_scroll: + self.window.wheel_mouse_input(coords=coords, wheel_dist=-100) + scrolled += 1 + sleep(0.02) + self.logger.debug(f"{scrolled} / {max_scroll}") + sleep(0.5) + + def adjust_scroll_steps(self, category: bool = False): + steps = 35 + if self.achievement_id % 15 == 0: + steps -= 1 + """ + if self.achievement_id % 14 == 0 or self.achievement_id % 41 == 0: + steps -= 1 + if self.achievement_id % 42 == 0: + steps += 1 + """ + + if category: + steps = 6 + if self.category_id % 4 == 0: + steps -= 1 + if self.category_id % 33 == 0: + steps -= 1 + + return steps + + @staticmethod + def improve_achievement_text(image: Image.Image) -> Image.Image: + improved = ImageOps.expand(image, border=20, fill='#f0e9dc') + improved = bold_color_mask(improved) + improved = ImageOps.grayscale(improved) + return improved + + @staticmethod + def improve_achievement_status(image: Image.Image) -> Image.Image: + improved = bold_color_mask(image, target_color=(187, 167, 145), threshold=50) + improved = ImageOps.grayscale(improved) + return improved + + @staticmethod + def improve_achievement_category(image: Image.Image) -> Image.Image: + improved = bold_color_mask(image, target_color=(73, 83, 102), threshold=100) + improved = ImageOps.grayscale(improved) + return improved + + def left_click(self, coords: tuple): + self.logger.debug(f"Clicking at {coords}") + max_width, max_height = self.window_rect.width(), self.window_rect.height() + if coords[0] > max_width or coords[1] > max_height: + self.logger.warning(f"Coords {coords} are out of window bounds ({max_width}, {max_height})") + + self.window.click_input(button='left', coords=coords) + + def go_to_achievements(self): + for _ in range(0, 4): + self.window.type_keys('{ESC}') + sleep(1) + self.left_click(coords=self.buttons['main_achievement_button']) + sleep(2) + self.left_click(coords=self.buttons['main_achievement_category']) + sleep(2) + + def load_database(self): + if len(self.database) == 0: + assets = get_asset_path() + + with open(assets['gc_achievements.json'], "r", encoding='utf-8') as file: + gc_achievements = json.load(file) + gc_achievements = [v['name'] for k, v in gc_achievements.items()] + with open(assets['gc_categories.json'], "r", encoding='utf-8') as file: + gc_categories = json.load(file) + gc_categories = [v for k, v in gc_categories.items()] + self.database = gc_achievements + gc_categories + self.database.sort() # Leads to faster results down the line + return + + def fix_title_by_database(self, title: str): + self.load_database() + result, confidence, choices_type = process.extractOne(title, self.database, processor=default_process) + self.logger.info(f"fix_title_by_database: {title} -> {result} ({confidence} / {choices_type})") + if confidence >= 90.0: + return result + else: + return title + + def capture_image(self, box: RECT, improve_func: callable = None, debug_name: str = None): + image = self.window.capture_as_image(rect=box) + if improve_func and not self.debug_disable_postprocessing: + image = improve_func(image) + image_bytes = io.BytesIO() + image.save(image_bytes, format='PNG') + if self.debug_mode: + image_path = f'results\\debug_images\\{debug_name}.png' + image.save(image_path) + + return image_bytes + + def get_center_of_rect(self, box: RECT) -> Tuple[int, int]: + x, y = int(box.left), int(box.top) + x += int(box.width() / 2) + y += int(box.height() / 2) + # it needs to be within window coords for some reason, when capturing is not + if self.window_rect.left != 0: + x -= self.window_rect.left + if self.window_rect.top != 0: + y -= self.window_rect.top + + return x, y + + def scan_achievement(self, achievement_name_rect: RECT, status_rect: RECT): + # Capture + self.logger.info(f"Capturing achievement {self.achievement_id}") + self.left_click(coords=self.get_center_of_rect(achievement_name_rect)) + title_image_bytes = self.capture_image(achievement_name_rect, improve_func=self.improve_achievement_text, + debug_name=f"{self.achievement_id}") + status_image_bytes = self.capture_image(status_rect, improve_func=self.improve_achievement_status, + debug_name=f"{self.achievement_id}_status") + + # Scan + self.logger.info(f"Sending {self.achievement_id} over for scanning to OCR server") + self.left_click(coords=self.get_center_of_rect(status_rect)) + scanned_title: str = scan_image(title_image_bytes.getvalue()) + scanned_status: str = scan_image(status_image_bytes.getvalue()) + + # Fix small fuckups + scanned_title = scanned_title.strip() + if scanned_title == '': + return '', False + if scanned_title == "": + scanned_title = "\n" # so .splitlines doesn't crash the thing + scanned_title = scanned_title.splitlines()[0].replace( + "”", "\"").replace("“", "\"").replace('Deja', 'Déjà') + scanned_title = self.fix_title_by_database(scanned_title) + + # OCR Result + self.logger.info(f"Found achievement {self.achievement_id}: {scanned_title}") + self.logger.info(f"Status: {scanned_status}") + return scanned_title, fuzz.partial_ratio("Completed", scanned_status, processor=default_process) >= 90.0 + + def scan_category(self, category_name_rect, skip: bool = False): + end_of_list_mode = False # debug switch + if end_of_list_mode: + for _ in range(int(285 / 5)): + self.scroll_mouse(35, self.buttons['achievement_scroll']) + + category_image_bytes = self.capture_image(category_name_rect, improve_func=self.improve_achievement_category, + debug_name=f"category_{self.category_id}") + scanned_category: str = scan_image(category_image_bytes.getvalue()).strip().replace('and\nEternity', + 'and Eternity') + scanned_category = self.fix_title_by_database(scanned_category) + self.logger.info(f"Found category {self.category_id}: {scanned_category}") + if scanned_category in self.categories or skip: + return scanned_category + self.categories.append(scanned_category) + + last_achievement = None + skip_scroll = True + scanned = [] + while not end_of_list_mode: + if not skip_scroll: + self.logger.info(f"Scrolling...") + self.scroll_mouse(self.adjust_scroll_steps(), self.buttons['achievement_scroll']) + sleep(0.5) + + for i in range(0, 5): # scan start-of-page items + self.achievement_id += 1 + skip_scroll = False + + if self.category_id <= 2: + self.logger.info('Selected normal achievement boxes') + achievement_name_rect = self.boxes[f"start_achievement_{i}"] + status_rect = self.boxes[f"start_achievement_{i}_status"] + else: + self.logger.info('Selected namecard achievement boxes') + achievement_name_rect = self.boxes[f"start_achievement_category_{i}"] + status_rect = self.boxes[f"start_achievement_category_{i}_status"] + + title, completed = self.scan_achievement(achievement_name_rect, status_rect) + + # In-case we are stuck (end-of-page) + if last_achievement == title or title in scanned: + end_of_list_mode = True + break + else: + last_achievement = title + scanned.append(title) + + if completed: + self.achievements[title] = completed + + for i in range(0, 5): # scan end-of-page items + self.achievement_id += 1 + achievement_name_rect = self.boxes[f"end_achievement_{i}"] + status_rect = self.boxes[f"end_achievement_{i}_status"] + + title, completed = self.scan_achievement(achievement_name_rect, status_rect) + if completed: + self.achievements[title] = completed + + if title in scanned: # leave faster whenever possible (caught on Challenger IV) + break + + return scanned_category + + def scan_categories(self): + skip_data = False # debug switch + + last_category = None + while True: + self.category_id += 1 + if self.category_id != 1: + self.logger.info(f"Scrolling to category {self.category_id}") + self.left_click(coords=self.buttons['category_scroll']) + sleep(0.5) + self.scroll_mouse(self.adjust_scroll_steps(category=True), self.buttons['category_scroll']) + sleep(0.5) + self.logger.info(f"Clicking on category {self.category_id}") + self.left_click(coords=self.buttons['achievement_category']) + sleep(0.5) + + self.logger.info(f"Scanning category {self.category_id}") + category_name = self.scan_category(self.boxes['achievement_category'], skip=skip_data) + if category_name == last_category: + break + last_category = category_name + sleep(1) + + for i in range(0, 7): + self.category_id += 1 + self.logger.info(f"Scanning category (end-of-page) {self.category_id}") + category_box: RECT = self.boxes[f"end_category_{i}"] + self.left_click(coords=self.get_center_of_rect(category_box)) + sleep(0.5) + category_name = self.scan_category(category_box, skip=skip_data) + if category_name is None: + break + + return + + @classmethod + def run(cls): + app = Application().connect(process=find_process("GenshinImpact.exe").pid) + main_window: DialogWrapper = app.windows()[0] + main_window.set_focus() + + inst = cls(main_window) + inst.go_to_achievements() + inst.scan_categories() + with open('results\\achievements.json', 'w') as file: + json.dump(inst.achievements, file, indent=4) + return inst + + +def is_admin(): + try: + return ctypes.windll.shell32.IsUserAnAdmin() + except: + return False + + +def check_if_tesseract_is_available(): + default_tesseract_path = "C:\\Program Files\\Tesseract-OCR\\tesseract.exe" + import os + if not os.path.exists(default_tesseract_path): + print("Tesseract не установлен. Пожалуйста, установите его из интернета.") + print("Tesseract is not installed. Please, install it from the web.") + print("https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-5.3.3.20231005.exe") + return False + return True + + +if __name__ == '__main__': + if is_admin(): + logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') + logging.getLogger('PIL').setLevel(logging.WARNING) + # logging.getLogger('PIL.PngImagePlugin').setLevel(logging.WARNING) + if not check_if_tesseract_is_available(): + input("Press \"Enter\" to exit ") + sys.exit(1) + # input("Press \"Enter\" to start ") + try: + AchievementScanner.run() + except Exception as exc: + logging.exception(exc) + input("Press \"Enter\" to exit ") + else: + # Re-run the program with admin rights + ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1) diff --git a/main.spec b/main.spec new file mode 100644 index 0000000..319b042 --- /dev/null +++ b/main.spec @@ -0,0 +1,37 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=[('C:\\Users\\Levent\\Stuff\\Projects\\GI_AchievementParser\\client\\assets\\', './assets/')], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='GI_AchievementParser', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/submit_to_gc.py b/submit_to_gc.py new file mode 100644 index 0000000..341d2f4 --- /dev/null +++ b/submit_to_gc.py @@ -0,0 +1,56 @@ +import json +import logging +from time import sleep + +import httpx +from tqdm import tqdm + +from utils import get_asset_path + + +def submit_ids(ids_to_submit: list[int], cookies: str): + cookies_as_dict = {cookie.split('=', 1)[0]: cookie.split('=', 1)[1] for cookie in cookies.split(';')} + + with httpx.Client(http2=True, cookies=cookies_as_dict) as client: + for id_to_submit in tqdm(ids_to_submit): + # print(f'Загружаем achievementId {id_to_submit}') + result = client.post('https://genshin-center.com/api/achievements/update', + json={'achievementId': id_to_submit, 'done': True}) + result.raise_for_status() + sleep(0.1) + + +def main(): + cookies = input('Введите свои куки из genshin-center.com и нажмите "Enter": ') + assets = get_asset_path() + with open("results\\achievements.json", "r", encoding='utf-8') as file: + completed_achievements = json.load(file) + with open(assets['gc_achievements.json'], "r", encoding='utf-8') as file: + gc_achievements = json.load(file) + # gc_map = {v['name']: k for k, v in gc_achievements.items()} + gc_map = {} + for k, v in gc_achievements.items(): + ach_name = v['name'] + if gc_map.get(ach_name): + gc_map[ach_name].append(int(k)) + else: + gc_map[ach_name] = [int(k)] + + ids_to_submit = [] + for k in completed_achievements.keys(): + gc_ids = gc_map.get(k) + if not gc_ids: + print(f'Пропускаем {k} (нет в базе)') + continue + if gc_achievements.get(str(gc_ids[0]), {'category_id': 123})['category_id'] == 0: + ids_to_submit += gc_ids + submit_ids(ids_to_submit, cookies) + + +if __name__ == "__main__": + logging.basicConfig(level=logging.WARN, format='%(asctime)s %(levelname)s %(message)s') + try: + main() + except Exception as exc: + logging.exception(exc) + input('Нажмите "Enter" для выхода.') diff --git a/submit_to_gc.spec b/submit_to_gc.spec new file mode 100644 index 0000000..8d875e7 --- /dev/null +++ b/submit_to_gc.spec @@ -0,0 +1,37 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['submit_to_gc.py'], + pathex=[], + binaries=[], + datas=[('C:\\Users\\Levent\\Stuff\\Projects\\GI_AchievementParser\\client\\assets\\', './assets/')], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='Загрузчик в Genshin Center', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/upx.exe b/upx.exe new file mode 100644 index 0000000..8ea99a7 Binary files /dev/null and b/upx.exe differ diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..4f3eaf8 --- /dev/null +++ b/utils.py @@ -0,0 +1,104 @@ +import io +import os.path +import sys +import threading +import timeit + +import psutil +import pytesseract +from PIL import Image, ImageChops +from pywinauto.win32structures import RECT + + +def find_process(name: str): + matching = [x for x in psutil.process_iter() if x.name() == name] + if len(matching) == 0: + return None + return matching[0] + + +def scale_coords_to_resolution(coords: tuple, resolution: tuple): + x, y = coords + base_x, base_y = x / 2560, y / 1440 + return int(base_x * resolution[0]), int(base_y * resolution[1]) + + +def scale_box_to_resolution(box: RECT, window_rect: RECT): + left, top, right, bottom = int(box.left), int(box.top), int(box.right), int(box.bottom) + base_left, base_top, base_right, base_bottom = left / 2560, top / 1440, right / 2560, bottom / 1440 + low_res_left = int(base_left * window_rect.width()) + int(window_rect.left) + low_res_top = int(base_top * window_rect.height()) + int(window_rect.top) + low_res_right = int(base_right * window_rect.width()) + low_res_left + low_res_bottom = int(base_bottom * window_rect.height()) + low_res_top + return RECT(low_res_left, low_res_top, low_res_right, low_res_bottom) + + +def bold_color_mask(image: Image.Image, target_color=(85, 85, 85), threshold=50): + # Create a mask for the gradient effect + start_mask = timeit.default_timer() + + mask = Image.new("L", image.size) + for x in range(image.width): + for y in range(image.height): + pixel = image.getpixel((x, y)) + color_difference = sum((a - b) ** 2 for a, b in zip(pixel, target_color)) + if color_difference <= threshold ** 2: + mask.putpixel((x, y), 0) + else: + mask.putpixel((x, y), 255) + + end_mask = timeit.default_timer() + + # Apply the mask to the original image + composited = ImageChops.composite(Image.new("RGB", image.size, (255, 255, 255)), image, mask) + end_composite = timeit.default_timer() + # print(f"Mask: {end_mask - start_mask}, Composite: {end_composite - end_mask}") + return composited + + +def generate_achievement_boxes(achievement: RECT, status: RECT | None, height_adjust: int, + key: str = "end_achievement", count: int = 6, inversed: bool = False) -> dict: + box_coords = {} + + for adjust_count in range(0, count): + generated_achievement_y = int(achievement.top) - (adjust_count * height_adjust) + if inversed: + generated_achievement_y = int(achievement.top) + (adjust_count * height_adjust) + + box_coords[f"{key}_{adjust_count}"] = RECT(achievement.left, generated_achievement_y, + achievement.right, + achievement.bottom) # it's actually width and height + if status is not None: + generated_status_y = int(status.top) - (adjust_count * height_adjust) + if inversed: + generated_status_y = int(status.top) + (adjust_count * height_adjust) + + box_coords[f"{key}_{adjust_count}_status"] = RECT(status.left, generated_status_y, + status.right, status.bottom) + + return box_coords + + +def scan_image(image: str | bytes) -> str: + data = image + if isinstance(image, str): + with open(image, 'rb') as file: + data = file.read() + + default_tesseract_path = "C:\\Program Files\\Tesseract-OCR\\tesseract.exe" + if not os.path.exists(default_tesseract_path): + raise Exception(f"Can't find tesseract at {default_tesseract_path}") + else: + pytesseract.pytesseract.tesseract_cmd = default_tesseract_path + fake_file = io.BytesIO(data) + return pytesseract.image_to_string(Image.open(fake_file), lang='eng') + + +def get_asset_path(): + assets = { + 'gc_achievements.json': 'assets\\gc_achievements.json', + 'gc_categories.json': 'assets\\gc_categories.json', + } + if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'): + return {k: os.path.join(sys._MEIPASS, v) for k, v in assets.items()} + return assets