-
Notifications
You must be signed in to change notification settings - Fork 16
Home
This is not the current version of the API. Please see the new API v2 documentation for the latest version. Some features are not yet available in the newer version, but those that are should be preferred to v1 for future compatibility.
The osu! API is intended to allow the creation of third-party awesomeness. It is still in its infancy and has primarily been written based on requests of users. If you have any additions you would like to see in the API, please file issues in this GitHub repository. Including a use case will help speed up implementation – if I see that it is going to be used for something cool I will be more likely to add it immediately.
Use the API for good. Don't overdo it. If in doubt, ask before (ab)using :). this section may expand as necessary.
The current rate limit is set at an insanely high 1200 requests per minute, with a burst capability of up to 200 beyond that. If you require more, you probably fall into the above category of abuse. If you are doing more than 60 requests a minute, you should probably give peppy a yell.
You may request an API key from https://osu.ppy.sh/p/api/.
Retrieve general beatmap information.
/api/get_beatmaps
-
k
- API key (required). -
since
- return all beatmaps ranked or loved since this date. Must be a MySQL date. In UTC -
s
- specify a beatmapset_id to return metadata from. -
b
- specify a beatmap_id to return metadata from. -
u
- specify a user_id or a username to return metadata from. -
type
- specify ifu
is a user_id or a username. Usestring
for usernames orid
for user_ids. Optional, default behaviour is automatic recognition (may be problematic for usernames made up of digits only). -
m
- mode (0 = osu!, 1 = Taiko, 2 = CtB, 3 = osu!mania). Optional, maps of all modes are returned by default. -
a
- specify whether converted beatmaps are included (0 = not included, 1 = included). Only has an effect ifm
is chosen and not 0. Converted maps show their converted difficulty rating. Optional, default is 0. -
h
- the beatmap hash. It can be used, for instance, if you're trying to get what beatmap has a replay played in, as .osr replays only provide beatmap hashes (example of hash: a5b99395a42bd55bc5eb1d2411cbdf8b). Optional, by default all beatmaps are returned independently from the hash. -
limit
- the amount of results. Optional, default and maximum are 500. -
mods
- mods that applies to the beatmap requested. Optional, default is 0. (Refer to the Mods section below, note that requesting multiple mods is supported, but it should not contain any non-difficulty-increasing mods or the return value will be invalid.)
A JSON list containing all beatmaps (one per difficulty) matching criteria.
[{
"approved" : "1", // 4 = loved, 3 = qualified, 2 = approved, 1 = ranked, 0 = pending, -1 = WIP, -2 = graveyard
"submit_date" : "2013-05-15 11:32:26", // date submitted, in UTC
"approved_date" : "2013-07-06 08:54:46", // date ranked, in UTC
"last_update" : "2013-07-06 08:51:22", // last update date, in UTC. May be after approved_date if map was unranked and reranked.
"artist" : "Luxion",
"beatmap_id" : "252002", // beatmap_id is per difficulty
"beatmapset_id" : "93398", // beatmapset_id groups difficulties into a set
"bpm" : "196",
"creator" : "RikiH_",
"creator_id" : "686209",
"difficultyrating" : "5.744717597961426", // The number of stars the map would have in-game and on the website
"diff_aim" : "2.7706098556518555",
"diff_speed" : "2.9062750339508057",
"diff_size" : "4", // Circle size value (CS)
"diff_overall" : "8", // Overall difficulty (OD)
"diff_approach" : "9", // Approach Rate (AR)
"diff_drain" : "7", // Health drain (HP)
"hit_length" : "114", // seconds from first note to last note not including breaks
"source" : "BMS",
"genre_id" : "2", // 0 = any, 1 = unspecified, 2 = video game, 3 = anime, 4 = rock, 5 = pop, 6 = other, 7 = novelty, 9 = hip hop, 10 = electronic, 11 = metal, 12 = classical, 13 = folk, 14 = jazz (note that there's no 8)
"language_id" : "5", // 0 = any, 1 = unspecified, 2 = english, 3 = japanese, 4 = chinese, 5 = instrumental, 6 = korean, 7 = french, 8 = german, 9 = swedish, 10 = spanish, 11 = italian, 12 = russian, 13 = polish, 14 = other
"title" : "High-Priestess", // song name
"total_length" : "146", // seconds from first note to last note including breaks
"version" : "Overkill", // difficulty name
"file_md5" : "c8f08438204abfcdd1a748ebfae67421",
// md5 hash of the beatmap
"mode" : "0", // game mode,
"tags" : "kloyd flower roxas", // Beatmap tags separated by spaces.
"favourite_count" : "140", // Number of times the beatmap was favourited. (Americans: notice the ou!)
"rating" : "9.44779",
"playcount" : "94637", // Number of times the beatmap was played
"passcount" : "10599", // Number of times the beatmap was passed, completed (the user didn't fail or retry)
"count_normal" : "388",
"count_slider" : "222",
"count_spinner" : "3",
"max_combo" : "899", // The maximum combo a user can reach playing this beatmap.
"storyboard" : "0", // If this beatmap has a storyboard
"video" : "0", // If this beatmap has a video
"download_unavailable" : "0", // If the download for this beatmap is unavailable (old map, etc.)
"audio_unavailable" : "0" // If the audio for this beatmap is unavailable (DMCA takedown, etc.)
}, { ... }, ...]
https://assets.ppy.sh/beatmaps/<beatmapset_id>/covers/cover.jpg
Note: you have to use the beatmapset_id not the beatmap_id
https://b.ppy.sh/thumb/<beatmapset_id>l.jpg
Note: you have to use the beatmapset_id not the beatmap_id
Retrieve general user information.
/api/get_user
-
k
- API key (required). -
u
- specify a user_id or a username to return metadata from (required). -
m
- mode (0 = osu!, 1 = Taiko, 2 = CtB, 3 = osu!mania). Optional, default value is 0. -
type
- specify ifu
is a user_id or a username. Usestring
for usernames orid
for user_ids. Optional, default behaviour is automatic recognition (may be problematic for usernames made up of digits only). -
event_days
- Max number of days between now and last event date. Range of 1-31. Optional, default value is 1.
A JSON list containing user information.
[{
"user_id" : "1",
"username" : "User name",
"join_date" : "2014-07-13 06:26:30", // In UTC
"count300" : "1337", // Total amount for all ranked, approved, and loved beatmaps played
"count100" : "123", // Total amount for all ranked, approved, and loved beatmaps played
"count50" : "69", // Total amount for all ranked, approved, and loved beatmaps played
"playcount" : "42", // Only counts ranked, approved, and loved beatmaps
"ranked_score" : "666666", // Counts the best individual score on each ranked, approved, and loved beatmaps
"total_score" : "999999998", // Counts every score on ranked, approved, and loved beatmaps
"pp_rank" : "2442",
"level" : "50.5050",
"pp_raw" : "3113", // For inactive players this will be 0 to purge them from leaderboards
"accuracy" : "98.1234",
"count_rank_ss" : "54",
"count_rank_ssh" : "54",
"count_rank_s" : "81", // Counts for SS/SSH/S/SH/A ranks on maps
"count_rank_sh" : "81",
"count_rank_a" : "862",
"country" : "DE", // Uses the ISO3166-1 alpha-2 country code naming. See this for more information: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
"total_seconds_played" : "1823790",
"pp_country_rank" :"1337", // The user's rank in the country.
"events" : [{ // Contains events for this user
"display_html" : "<img src='\/images\/A_small.png'\/>...",
"beatmap_id" : "222342",
"beatmapset_id" : "54851",
"date" : "2013-07-07 22:34:04", // In UTC
"epicfactor" : "1" // How "epic" this event is (between 1 and 32)
}, { ... }, ...]
}]
https://a.ppy.sh/user_id
Retrieve information about the top 100 scores of a specified beatmap.
/api/get_scores
-
k
- API key (required). -
b
- specify a beatmap_id to return score information from (required). -
u
- specify a user_id or a username to return score information for. -
m
- mode (0 = osu!, 1 = Taiko, 2 = CtB, 3 = osu!mania). Optional, default value is 0. -
mods
- specify a mod or mod combination (See the bitwise enum) -
type
- specify ifu
is a user_id or a username. Usestring
for usernames orid
for user_ids. Optional, default behaviour is automatic recognition (may be problematic for usernames made up of digits only). -
limit
- the number of results from the top (range between 1 and 100 - defaults to 50).
A JSON list containing the top 100 scores of the specified beatmap.
[{
"score_id" : "7654321",
"score" : "1234567",
"username" : "User name",
"count300" : "300",
"count100" : "50",
"count50" : "10",
"countmiss" : "1",
"maxcombo" : "421",
"countkatu" : "10",
"countgeki" : "50",
"perfect" : "0", // 1 = maximum combo of map reached, 0 otherwise
"enabled_mods" : "76", // bitwise flag representation of mods used. see reference
"user_id" : "1",
"date" : "2013-06-22 9:11:16", // in UTC
"rank" : "SH",
"pp" : "1.3019", //Float value , 4 decimals
"replay_available" : "1" // 1 = replay is available for download, 0 = replay is unavailable
}, { ... }, ...]
Get the top scores for the specified user.
/api/get_user_best
-
k
- API key (required). -
u
- specify a user_id or a username to return best scores from (required). -
m
- mode (0 = osu!, 1 = Taiko, 2 = CtB, 3 = osu!mania). Optional, default value is 0. -
limit
- amount of results (range between 1 and 100 - defaults to 10). -
type
- specify ifu
is a user_id or a username. Usestring
for usernames orid
for user_ids. Optional, default behavior is automatic recognition (may be problematic for usernames made up of digits only).
A JSON list containing the top 10 scores for the specified user.
[{
"beatmap_id" : "1582674",
"score_id" : "2791309545",
"score" : "5320058",
"maxcombo" : "472",
"count50" : "0",
"count100" : "28",
"count300" : "325",
"countmiss" : "0",
"countkatu" : "21",
"countgeki" : "64",
"perfect" : "0", // 1 = maximum combo of map reached, 0 otherwise
"enabled_mods" : "64", // bitwise flag representation of mods used. see reference
"user_id" : "3117824",
"date" : "2019-04-27 13:52:15", // in UTC
"rank" : "S",
"pp" : "467.557" // float value, 4 decimals
"replay_available" : "1" // 1 = replay is available for download, 0 = replay is unavailable
}, { ... }, ...]
Gets the user's ten most recent plays over the last 24 hours.
/api/get_user_recent
-
k
- API key (required). -
u
- specify a user_id or a username to return recent plays from (required). -
m
- mode (0 = osu!, 1 = Taiko, 2 = CtB, 3 = osu!mania). Optional, default value is 0. -
limit
- amount of results (range between 1 and 50 - defaults to 10). -
type
- specify ifu
is a user_id or a username. Usestring
for usernames orid
for user_ids. Optional, default behavior is automatic recognition (may be problematic for usernames made up of digits only).
A JSON list containing the user's ten most recent songs played.
[{
"beatmap_id" : "987654",
"score" : "1234567",
"maxcombo" : "421",
"count50" : "10",
"count100" : "50",
"count300" : "300",
"countmiss" : "1",
"countkatu" : "10",
"countgeki" : "50",
"perfect" : "0", // 1 = maximum combo of map reached, 0 otherwise
"enabled_mods" : "76", // bitwise flag representation of mods used. see reference
"user_id" : "1",
"date" : "2013-06-22 9:11:16", // in UTC
"rank" : "SH"
}, { ... }, ...]
Retrieve information about a multiplayer match.
/api/get_match
-
k
- API key (required). -
mp
- match id to get information from (required).
A JSON object containing match information, and the player's result.
{
"match":{
"match_id" : "1936471",
"name" : "Marcin's game",
"start_time" : "2013-10-06 03:34:54", // in UTC
"end_time" : null // null if not ended, date in UTC when match is disbanded
},
"games":[{
"game_id" : "45668898",
"start_time" : "2013-10-06 03:36:27", // in UTC
"end_time" : "2013-10-06 03:40:01", // in UTC
"beatmap_id" : "181717",
"play_mode" : "0", // standard = 0, taiko = 1, ctb = 2, o!m = 3
"match_type" : "0", // couldn't find
"scoring_type" : "0", // winning condition: score = 0, accuracy = 1, combo = 2, score v2 = 3
"team_type" : "0", // Head to head = 0, Tag Co-op = 1, Team vs = 2, Tag Team vs = 3
"mods" : "0", // global mods, see reference below
"scores" : [{
"slot" : "0", // 0 based index of player's slot
"team" : "0", // if mode doesn't support teams it is 0, otherwise 1 = blue, 2 = red
"user_id" : "722665",
"score" : "3415874",
"maxcombo" : "411",
"rank" : "0", // not used
"count50" : "0",
"count100" : "11",
"count300" : "425",
"countmiss" : "1",
"countgeki" : "67",
"countkatu" : "9",
"perfect" : "0", // full combo
"pass" : "1", // if the player failed at the end of the map it is 0, otherwise (pass or revive) it is 1
"enabled_mods" : null
},{ ... } ...]
}, { ... }, ...]
}
Get the replay data of a user's score on a map.
As this is quite a load-heavy request, it has special rules about rate limiting. You are only allowed to do 10 requests per minute. Also, please note that this request is not intended for batch retrievals.
/api/get_replay
-
k
- API key (required). -
b
- the beatmap ID (not beatmap set ID!) in which the replay was played (required). -
u
- the user that has played the beatmap (required). -
m
- the mode the score was played in. -
s
- specify a score id to retrieve the replay data for. May be passed instead ofb
andu
. -
type
- specify ifu
is a user_id or a username. Usestring
for usernames orid
for user_ids. Optional, default behaviour is automatic recognition (may be problematic for usernames made up of digits only). -
mods
- specify a mod or mod combination (See the bitwise enum)
A JSON object containing the key "content", which is a base64-encoded replay.
{"content":"XQAAIAAxBAEAAAAAAAAYHwJDUQO0AFVX2FOrBLOurDaUjNcwzeDGkQtz38zEbEFpZuM4MpM0yJ3N0oJX5y8OdbLhhy7aiayXgHl\/0jAmRwVRqciqUc13xh\/vpW7nyfqcGYucj3rljHxXReWfnl1K3TYC+d2859vxwkUvNkdLN\/3BeAT2ltauxpFOD3GDclboOkexvWhhfNSPc4kee9t4mvKSu7vFVlnoRF7k\/pEZKh4MrZIiEboB9bCoH\/ubR5KP+bKn\/uFzgKDocRTIJjbSel+04J0On2RZJ7pB5GoZzP12M9X6NXU09xsrYkCYHSZyhlbIA6sA+5jAGFQmxKKEiErF2Kqbaahi7RcRABcT5anMEVj\/nQkDVUMy38OSy0DgpDjNkOhb8BwZNKNBvAgL1IevnY4gz\/bgWKKkdfs9Z8HeNPlno0CIm01KXZiWZAf0B8Ykmcc\/OmEvMOk\/GcrQFA3mxeq882l5ETmZGquuHRCEctHhhZspHVklq3pnxH4LshAJZtMcZLNg2aGFIEP0Ik6zyo3Lko7Wc3Lzrz+q\/95rhf8ECBPbHKyEqCtT2poy5wKe3R5OF9FmHn1LXwn43IOLw\/qutvtygI7mZoKHVY0sA+M4Eb2dL09mBVpqVDq\/+c4Ia4Lip2qfYGVECEbKqlWlfFYVq82115pct8inaDfJMdg8IOPP8upPAfxCQzsV84TxtnE9xi3++HpOPgjzgFjnW0T2uQm3HPbC45UIKBtKruuO3BBeJtoZtv3Uc0MqZmFlol5uwRQHhjCq5Ezg\/myqjC4Ep2vTqXd\/fV5XFdVDwXTnFqevPeXxDV5PxK8574DFa596Xrx9QwqkGVN+eCt8ZEchx9Uvm737jU5\/8\/0\/qzfrR8aMlZ0QSv8iPYitqf1h2OqRSrP4hML1NJ1Gz0Di1SoqazNUjTKXWS6EDWqtiPlsoUo4gpgagNcirE+W+Kpu70Szd9DEsbcv\/Qcuh9z\/HvIIP\/66icWFkF6BH0VST6CzjtiFIwbBihxp8mfn\/1C9J1AvosQUNirBJu39TAYtbWp\/1eMzkluoW5YuGpM0yXYpaXwpgakvlMXbWWt4H7mVtnCf2KbroMj7BwW3SVx0v7Qu\/RlbVykqEt89knd7ZiklwNKK9Mq9UrnYqKdFMx6tFDz0WivGPlulgvJxJMz\/T3VjpcEwJu2qDlEtd2cX9emjhvF7iR4pYOgPEexMYyzBLUffgMY+rDiRaVGaVbubjuPimweYKS+j8o4\/uWanNl9lk41qnJO3ckf2024q1LrQwupR8EZJOutZP5hkgB8IGpGBMkL2iZeSbRYc5uzHCUFhnZUJZk5hL9JlHL2X\/X2z3ASWk8pDEO+0FpKp8abisOG2aqPZrRE04Ff\/MkHFH5KjC5zJiIVhIqK+eS4Hx0Sq\/NG2pgyhwnA3iO\/6TeBxW5CnEL5bt99T6fiLWQ63TP4aUGLGfLrkwwWL9ks41F2xi87Ls6qi56iS3w94bn0RJz75+6gtklBD5xUtNm3Yp\/JDHeCJ1ncIeqfVmMTftmjk18EGYxDDDtD5EnPzV1DRUlEB3hCR4AmSvUqLQzKhVnwbehSf+9XC4A9LE\/6fbs9c7A5mdCeaOSjtG8P5pm+gEU9cfzUsA6dUm7Ej6kwhecMQr5T4ABvECJ7ZI3R41N9Vlnthvsc6YF1UyIiYJbtaAlzO5CBxGi6z0n6wWrz4etykbd6Ug+0UxJ3\/jX3qx0yfg0tn7xo+gYkhW2avIGXjpszF5c\/YBkb0mOSX\/ro7q5FljD4p4oX\/pLIOtXxdQMEZBILX\/SuJaAkyW+j28hAbSkdOudFDp\/\/0zSylHvmbHj4zW4TN6QoSzpM3lQc8Cb6CtlFRJVGHLcLowOO0OrJIuLEfwmnaZtgPGsU1pqrTnt3mItB864XsW7v\/3q\/6mFIG83YSQB059iEKg92\/PeoQZaFC49G2AWlmH8b+GU4SAanVO3hmt42ovwjoEKGqVJLEiZ0Mm9J5YMfGgU1EKaaCj7+HenrgsiWg3q7\/2hjNF5YjxIeKlMXrZMunOTef3YeQB7db9USMsFFvEZHKA1Ug0UqF0Diq75u\/z5WbJpRtfbhqp8jCtNl9DQHNkTRjSz1ajjMWR1cbeCVSGVo9EhTwgkyF26XKb9JWTou6sDxMzArbX4VphEil4M5hkcn412ml7zQuqR3AkNs2xGwPFjF4dg3mYDNHPVuNMuYQ38dpgNvIpiI0W0JwWNJ4JhltM+7Wpu86Ufwk11NTQLhV2igwaWz6ejiEUFmE8e4kF0EzJ1rH5OeVX3WRJLY81zmLoZqOftliQMw5mBxJ0pTQjkOkOyK8TOCDRtyGG0cKmTX64kGua4zeov6xN9rD\/NxSgpSzu+A\/\/h\/0C8uwur\/BQHy\/wj70U0OJy92XxonNdc1sWX1F6xRuYI\/1bR86X5+MdBpqfLRJsZh3TrPBBa43zlqh6zn0A\/vU0e02HTaWIJBFTjh6sn581zkiT4goUmIeVkYl\/4nLxrvEWR0JQL+lIU1d59PQWHpsNNZnJw3biDNuo7WiU+whR90iSfmNPp8ui3yiUN\/ctAtpzHv3UBrDEKR1eJfDeg+hjTxLtEsuKAK+N5Rmv7c0+Yl3OsijSMNcpEcb6almlJqi7d8txwd+pR5GtmYdugGLAOLCfh0mhm5\/cSxMNxBBVa9P2akTeTwqDOI\/3X0hoMqqoLx2vvyoSU\/9BwM+51x4iMvaIG+sjLpUPIu11yEWBwF4FjuBv72879ZPtzxRQqSVia8Ro4N1eviNJa70D7Dz9gA6Q78I6DPiEw\/nDxZdv+3h5oQ+EqrE2r9CqUuuQ2aKsJBKfy3xcXoughGZcT\/3JjiYL9IkkKnsbKUu+WlFdUwAAIqoqGzl2\/z3Pf5lE2bvequRcXChIJT0djVXBLPFna4QNcOnNdM3njzfidbHDIteZrPqAbnUIz\/v+Y+jhwinth\/cZo+HD5JzGh3zfSruaA0LWw1rBHtxhWqZkQJKzl9+Hle6qiOqcXWvxBMzxHzyQZ2stYERp0luVuRlRdQNB3vMiFH+nPjMB0OEEb2YnDn7hrrbej4YgsTJvS9saDhaubPuew+70bpKdFwFIpwqWRI\/Wurm+Qryh1SOTdJHjox+h9bbvff8JFV9YxzFMli\/iGUEMSNeNgdmf+k2XM\/kC0nB9kJBA0cVJ86iLH2HGjl6QlqstRdVjLL6EaqdndmvPs\/wuTr4itYoEssVb5FYO1E8f6WUIIXlvAxPWzK\/iHJlxw\/EiQPVwPdpGQpVTfMoPUcKaybylMRoZTpm6+aTYKnTJ\/qAkMVD9rBeKLmTkDg87WYG917s4nCGoU4MHa+eZmcFZeb0nKhh+CFBeOv48v64NbqcZhoNAdAkEY1EbcBBSn5So4AYgr4tQ4QbHDtFr\/cDapzyfJRnmaDM63SWqODsgm0NDdtZex1mLqu2VVu5MCwU2wW\/dnT6cuEV6+NsjrAzR76E9B3cdF\/yvS3cZ7nNz0G7bnRRdtZcioSBMKUMqEaDBEtJytZwkrYPWDsl7tTK31a9hdfk5svKGCEu12i\/4eG+\/V8w8Cp7FEkqh1ty2JmgdK+E5nJbXMMlGKF2ZD91cS9UilXJ9uplceIV47472rZt7kavTiDmTWP6KAV8La9EFHmdrl30OYZMgZoYtQqiCK9MWEXzy4UiRrzdAx9zqcNIGNNfbK+Lu9Lq0cAULzOt1aMBo7wWPpFNz1bw0zl\/\/fOU7w5B0S8ntj7vjYUNw72kKkliRXGsl2WcnZCvfMaN1++B7FnuGrPML5FN0LogdEaRra6tbiIk6ozRuyEBemQRQVxw1TP7itTp6ukL6R8GvFBMh6A83VbBPBrHACf7Kll8GIrQLDeKi6lu4bHkPjmqaqdTK6AypyudidvlFLzj2I0kqO\/q9BcELhiZe0ryz1pd5MbQSpz\/drC73JQEQfXBZ29+kodxs\/T9\/eqgglHuszy0j74clfOJ6fZhFpiHIGnxR8hGQAwF7c59+obiU3eCqrE8t+KtJQ9QbRLxfDj80eFz04aQNSxpNx3iWIq7IFJNcZaQFdKYTgn\/j6yTeao\/i8p3Fdc4qicYA8CDSzCSR6eHdmdU9moT65c8p+Jy8bqJaJwsAJiQZxmvE14FilRAq7nhro1kPFFf0PWVGV2em5r4\/yjKL0Ks\/7M65ev9l+Mc+TQAwswTGdZT5lEnYEbkRjqorEA+NsudcDiy2C8rb9\/RSHNQRRuxuLbWCeq\/Dfuivz1tM4PjP7o+wXUgfB9pCm7S9AvB02Bs+krXa8K1d367m2APlYegWEZjzspWWlnEDcsaPHp+m+CnqPLU5V9+KuDJEWryPryT6GvaT+ARvRlVHMclud8TQpBARsAl851SYvNvKaXGzSZmSH1Y+MrzZNRHxB8WW\/0HrJXOrQrZ4vf7D\/2TsozS3dLTqMHWrQkPbbV8dozdP5P+BPlF2hiiuCXlZZYwDyOO+TzemJgKu5sy8R8egkmlrkX1U5Tbd7oeG3T3dA6OIgmhIZ5tAlUs4noPBUDWJBf682kptqNYJEm\/XzKBLVPt6iCb6RZFNzEMhQJAzuKMR4mXWTidiY7S6hTZ\/y+l0j11vm4xTcf2HkwOUWPMOXwDL8MhlczdDq2PyR74OeuskjJ45t2Wq0FNgYy8mM8FzeCZxXtZt9tiZAwAJiDVrzpHg6UF977stx1ycoPnj75F2GpF8vc4tpA4oTVdJ0Sq1+zL6dBKEuqyyEJLXQDTLHJLLcY8aWbUgVDL\/m1XwDkRh0C5di6TN3pNXrT2l5yEAY6pcRJ31ig+lzKpK7XKAnjpGw+6rkpXuxKAaliTjFTGlRcQ+IYwGAEmemxRndUOAABm6gUSsiw7InJcFwcGc7Y\/XiuKyoM76WXPGQCp5ZMl6nbHFAAss0xy8z39\/UZwidrR2DYi9i2DDn\/YHRds8h6oJcVDdjHpWE+B2hKF2aOtpDWm4lsRlH4b6AKiuZJeLwoXKS2llbLVbH3jzi6gesY2MPZMZuwzocrDSrHwSS7fquQOnqxQclqe45O5lbPNAZMAFt0iyLiUu62PtJRbf2sRAvC3RhEJ5\/ZSaWP4uCWuqwNIHClN+y70QZRXGr0hq9H2D\/3zO6xJltpWibBO387VbqyqiJS3is\/ZzN1kwYGei242TmKX9J2CWlP7BnXKuuXROk6IqhA93TMcOwLvcMQ8\/SblS0rbqL9ywi7EqywAsmFRdmE9o5LArurdxTHuN3M8zlHPSYcOOLVw7COoBnA2yafgxpS8RBY1fZT0S\/9aP+6\/f5lz14IuN5ChWNktFyuJCYm0xYcejYA1Mgl9BgVZRizq19eBX99x4+nE28mKOhFNrfPgG8eQ1kdQc1VAnVW7pH3tvKWEr9F\/oZyypZZd4QLh3fbOG50hJZm3vIEnPRJO879XTjNeIWERueK6B\/vGsFyBkr8vJM4rjsNA8xT0yADMVbhknBXkvXDcY1ntmE3Vi1kH8yH04isEr7ahnb67k\/J2B1cgpSknLCZSPpscjnBjSg4CcAvaYs0EqUmgAoxcA+MS2Ba86EGSVokhd623qYorQbiECG40e\/AgiNpEMuoyXDzsjvLi6iRwPpLaoaF4KGGjh74o22tP64yt+YemV4c5KKBQHzq0h4D\/ZIKA6bgFfUXl2RJFzCIYQlxpbJZ9TMGulukcGUVf\/EU4R5Re4iVhWhGz5F\/Cj2BzVFb6YtlU\/6BSm46gA3prg1Dh8ExfsoNkVYbXKWbxHfFCEJJJzQISes\/6axiyi9dhViEYuGH+PnikSex0kzczsogWIs46Y5+bpAKDgkefSBL+VbWIf6AJgO8BfRB2Abu8hio0owpfA6Ll2BhRuYD3zZCYctYFtvNXh702OPPMtNmIaBuFLYBA1IMdchxQ+xFs1jHeY4nu7sUVwMwSbOJPbWhq4FqfpLawasnLzDtP6IkKMv7V9ssFk2YqfmyPw0UlvCYAmouifr0EEe0g+NoWFTQJxCCzIBjGc5PqGjUoGKlXxlQUnTgJHysbruJvTTJleMfG2oHy+42MaC7wwRtiqgjpvO2RhHj+vjTi33dGNmTymPheJCjdLba8TXhJFa8Dz01go3yH+dx\/wyhRnvK9Zct5YE4vRkmAZ2TuMkohurMBY2kMr8xbXNnfPhKR3Sq7OP2VpryzkGsoE\/q5Rpmb22u\/UKXoPNEHYfS35zMFFkqaBMygpy\/s0oicI4iKDABaPh5SjzvcvGUPLrrtbrmlWOJ\/hX0bA5dxpvEK74BO1zRUHU2TWcTYT5OJf0ubuMaoxR+kHBubDfQulocgpuw6lQvQ4rm+bGK5fNq3NwdvjcO83wCSphlcrp2YeXF+K3s42W+MlHlZ1AQVc7VW8D5A58W8Sj4TDsdNZYzrTKTvWqzWhtku3E5urqsni37NVoYIOAKBLyri6Mf4uC54XmWoowl+qMJi0iqtSAB4OtECLnX26VBimMi8nVMPi+qgxMzVlAaeS6owrgTRc0ys3y5+M3iF8TWFdSRBlZAu6n5TZ1ObH1rlEyef5Vrna4nzUI5mSyws133mD\/t1GrATq2zXJrs+9GjZeBjP\/wJhEBWzvWo6HE7Mx2xTH5Vb24eEKrrXoevH9ugvoYWvg5fWR1EleArztcHABIHFEVXGenvHDxSL6VMmXkRva52MsF4E1ivK522Cw6kgcFPXdAlRo084xintexHJvU0q1zmmPkweIH\/d66\/WIfKsVPLYHcDKeF2F5\/R1DVz0zvfV28iYyNlabP2QmwlC8HI6bd55s6H7hO3CuJOq7ioLcevSY9wL3BCF1cWyMKcvN2xWt3gkZ6JBWoknoVeqxBQJwa\/r5HO2wvb\/Zf8KgLooZvTfM4WtWpAUoM0IEODtWmlWJr3gL11xPOFBgek1Bbp8CMopmz3\/MtKEyeAmkr8w0GDdzAwRlWC5IbTK6Z5+bHU6GZyulEpKSZEv0GH8DR5gTHkFD7B0zZkbt2ttBTy\/zP5CWPOjqbVV4NB1\/ttMOkt+r3NX6hpNEYE1X19WpHbQA17m35tdBIYQgJhMeooDAlOcQf5eukOibCe2csdgWluSyakOYCLScowCKUzlo1x\/jym1Kj0MXfb+i4i+NIS+F+qEpUn9kRYwCHoQigHig9\/B+SpE7GhekATLAD2tpy2ms\/H5DiiKP+7Wqq7WwUkgp2kt8dIZ2yxzeOZ\/oV4HM94z3XXxTHDwlmSTWiXe50UzTfMNRU11tdZOpHn9RE\/+HqQED+OIKEdDAoFhi1OYl2v\/WJ5aKugeT2dyZaXCW\/PcewVO7pF\/wZ3W88rTCj8I5V7T10B6+lHihZM\/uUzPukQjmXqAYAmUvLRPPRO9tFwo261v2zmCJpn\/2Mc11SnirR8EsdrOmBH1jpO0OA\/cvRkuNrxKnexF6xLnZF40a01mDv37pSe5UU1J1X4YVx5HQhI0oZE8N47G4oeh\/n7WxFL3Q\/v8X2rLJzLbmydyNwJXL13aGDZ74cGbvA2Eodv3BncP5pxbrX5l8otCoToeAGLz8Ovbgpeijo56fW6ZY+gPk2vtroQCDQ9o9g1OlKpUADQLqau0denJMVR5ZifI2PEObB0r12+\/6r7WwEymjj7rPhQH2AwhZq4FRO9FMbaKBbqUzEeG74lHl+URKfneq00NXJ8zYoCM6pdgRNOpDxW\/ZpEQmM+T6RAXSkkA9g0DkC35VTubVuXLE0d+iWeOFVlZoa0ilIOzgzDqhuRGoDJSqm5p7t8XFo3AOE51fRNA6QoYJBLbL1Zbahu+VTgkxplhubKecNLcWe5NSUvo3tkZ78bpSQLdXVtpQrSCXQrZP8\/L0ddpPhGrunUgB29IbNA9N+v2Emkf9n4\/pUx77b1+HHWruWVObip1Urr1ouWRsoalgO1zdkFHh2PHB2Q8rep87+YjOQ5TWMR3Z8NSNZIn32JHdhIZAbonWmVsK2nckVkczPrbjtvyHbMBzOHLtMcvaeICsw4f9Uj3EqtgB05NtEO0HZhMQRdmssXD6Q6Jqy629i7imgA7Wo2ZkT1ylAK+tDJuZC1a5wxoHC96o+m+64ER1P1Y4GuJv9evWskw7n9RLb1xYTo+kuJ0g73GhkEQucgq7cm7mFBuPS2HgcCBs\/t2UJQb77yaVqvM7UeYIEpKmLD6q02aY3F9HaneUWAadlVvQfcOExeSU5NeO3HZEJ+7k\/pknEZE32mnbkVVWu6qr17d6C4AaFL9TkbbyctSdr5Key23ucYaWfInOzZ+RQBuUnrifdl775+s21Spb4uyV5dMCQI4nYmkdQh5f4eeHX3O1ueJ3rl2eKjL5kL1zLyXeHm3Sqqx\/VFo2RRNouMYBZ9FKR4li6\/0xpW6xXB43pnteUJmM3BzsV839gGe0pIcnbC1xyUj2qkuEGuYpasZK3yIRztPbPkuCrD+NZH0VBxk3WppmlJWJOWz45v2V1+o7GM+ZKTpoD+me6b\/Fk+EfOsrBWnZyWgKBCSz+9N2rJQy2sK80TKwRonwhiGxGl9FqNn37mgXcLpjgZvrYYVYze2pQLKO0l0I0TuE3bIvVFniyc+L6jBCkfu+cTlAAioQUUlDd\/jRdi\/K\/6sOGsbnGD2rLVW2DGzPRobqNOzQtmssLnvAG6MnD2t842JrcyhRjUF\/fu0WnOWSPpF8gjETHxBd8ZGxzeLU0O4pyQQBGy\/NKO9u0zSg3c9uZPNhMbbfQK29aQlGK6gqfMy+1noSAWE9BLpMFdyxx+OquGd8XOyTty4mdU0aNxk7eHLgHU7nOIdJQIRFv7A6vWKj\/CWZoeMvEkosGv0arqL4FlrBoZYFF+bBK2uSe9qeDLqPwMKE6tAZ3Sx3rVRl57uPpTqtifoBndi4vMYfu4KZWYMIG3dGhJYUYqAE5mnW99\/x1\/dySx6ORCcqp4jU25oY4PqhgK6qzsamcjNhpEO83uWImvPa2TSytRp\/jeWMANqWu9KtoRhUaCwoQrrLfqpvjWyAGLXVzIwsMpFfrHuaMcVodglw4ZJgbA7f02pnmjpHU\/Vk9wk1b0I7bnbBK3ezvbUZSwPTdtlkOcqEajXbeXNNjgNFpbNyaqar0ULy+HQ531SNbGd8VyIUcat4R76JMnrxKj0i3vG2gc3z5ST8RLTivMWqOTrvae7vwf72sDv4XmDu0xwifSPtsJ7A8qQxm1w2tXC2+PXFsMifhHKS7vKZuW0LEPLPvydEyBeHAq8q3vA7EmQjO0GoL6JDPjmBJDCUBcIV7C1rJbdv6UPQG+cz5bAUMnXo5ECGnjk1\/\/M3vbhJpxtfAaclTIe9nZdJktrB9+tlt+kxCXYAB8aWmxnUB0PsS8NGAJrDWWr8cau3990NZEKW0LG6kxwLZX4vrGD3CM8KLoVl2b8n8nI8GUDbueBZrZB2ZGH7Q9vrFdCFffPF5YFTMDReMycK0+RhBpKeTDE48upDGErBCkrnlGbCyGvWhSpwT11tKrZ20mqaeBa2C1cf\/s5mGIPCVfMN+xYPvvhyC5lkoSZQNAT0+MpavUUV0EJPF8GWHi4yrbKjecJ8xUyyplvgfFaLv6MNksotvYP9nW\/diiovC3mIpjUAnOrBRDsJB5Bj73\/gLHs4byLxvBTGkAACKvykWiYb7h2divAIifPXjArQYg1sT7Tx\/j9eiTWS0ndniREBwYIkRL8HdUg23cIneLs7qKov9a9V79pD5fQO2kEx2heE0qoY25f5e7c6SDWm9Z0YBx6BOVwNR+yACx79XKlk3NtaXN6PU9TGVx1JerRjkw6MvNeLgE+uuCd9ZGyxsTzdDIuTyjcP9Y\/srwpJZu3tQYdGD9mvEVG1cZr\/IeikEq0Dew1FN\/YJ6x8VfA8SWtWMHFu0MP23JeO+It1GYt0VGVTbVVw55fPwbZWyO64MK6fhlnnPUb8yB7rvYZGIa29rglixF0ldxoziMI27a\/3A3vdFEQLrK2o51LGN93obW4ACltbtPBcjEiFZfBVGUqvoiqISUOcWrTJCvPjejIOgA0vZOhXihhxXXCmOCuKQomMC80JvtTY6Y4TlcJ0GGoP2952qgl2ZpuWXrVwYiIW7nZ3xrUUHpvzP861teCtP5Yi7TBTg3evOsr0csosJYja9sOienBywjYeTozovrTs87wZXw\/jqDxb6E7vj9tUM+76IR9JKJGmxc1D5HtBDe\/tfmW79XFpKZep94ad\/3wQA84LgbherL1Xt9G1sLvGMoPsPVHZzI1oB3HbiQzOZaAf6td61r+6n8fOTlP8pcVStVnT\/M91OqDiEgci5AZFLLIS\/OR6jtvyR+OUMrpAPp9fwgC52oEco27lOml5MOaIkkCCbodmn2\/k9pyDTrSyd8G89DgrPLi0uqC9UK\/bZcSUJh\/ZtPcXQcjgikz7Rz4Q2TfllTmUH7rlLtuQeBW7aLjk4Q7AUj\/qGG+4A3SanT5Nc8jU1sDajEttkiS5R4m\/qHRrTBDeU3EykSBl5tQJv+H1Uo7LbFjcIHoIxfyEUB++m4krvycTUF6p4YDoAK5WigWDYvN3h9OdwCfeC4JnY9NfrJVfXx7lsv\/MKWwgje+Qxrs1uAE6TB31y3KDD8RRoRyASkQECQ1p4OAihaON7dY4rRTYX2w1wHMv53\/cCeKIJatGup+zhg5H9ekbNEU\/Ql3H6VS+JBU3D9TqYVFSr0\/2tbvl3KEUDDTO\/YHLJQ0gKSaRA0mGvsAh9vP07cuieXoEndcmGktbTq8WnCUFHYjW4bqnmVb9sz1BPov1QsyQxSujLOS8Pw40xzCpmdVntHDqtoCzy1Ugk\/t709iLeL6tQZ54P3ZuLQMJ99fkPs69TRGk7innsW7W6A9nuhX9SicwLqK+mjdibagwZ0ch4QnwD49EMCnSCmSAOvEa7hjN81UMGe2ksn5p78zQctsX0f0vqBouUs38rckVy2m01PuzbUfTxWaZImnXU0PB1GmGFj1mmOScbgmLSi6qc0FYIo+OXYf3m1Ia0WrPtioh148uOIRzzS+BQxJDnt8sOpCEsvQytBxofxkOWy\/D250NVzvzxqczlXQLLRUMEHQSbELvS6Cl5Ds61pbYTaCB2kpQXw5yWtwP5qPzYvnnWblbGXG9675R69hcG7x0scfh9gR71B7yzcDywUvbwjGGjHgg5VfIO3NeMyx6hJRWaAXjl8tOhC1wH4LYJeFl3VTRLJ9hBT0J6bWCWdkGHED5nK+wIEQF7+cPEok3xOwkrWHFL6K4XUtWkE4gAD+nj2ye2w1tqKgzLxni6xmqrwYK2fkmeQR9m84076SwPSL2ixz88drFJyLbTr4IR2Dg4hr2KQMvjkYJ6p+ORIdoWyhCtsPkYbmxYiL3rBVTLAcEsTglwq0U95LqPcDGhZ\/chyGW1MBehyiiNktFi\/1puwJG5ifYb5uDf34z3XTFIzM16IEmbLJD0Zwp4dPAep6IP2v7V5s5WV94KEKH0XYd49LyaAqr1hBpmf2+Jux9623M0qThwjg7qwwLL8yG176T5jBsvnr+iLq7PRWOsaIXRxt\/bYnJdF9iUzM2oToJ1ocbUDgDt00xEkkk1KK5bAts3N+SO0sd5KcqJ9xhIV7PdSJY\/CpZVjnTK8RbnN2zP49LGsBatX8EwcZav1PL\/OXWz5E1RjGxcmBwV8YT4EsfF2PlOw98p\/mMjRm3\/VMQRxtJIMxPA7HyeXim1YtoHhnikxP+ImzB0wQToVIKETXXnrHO1D3sN9GZEgNjSnMj5HFg3Nt7M5jbyqGSeKtXHxKVcvr\/rE3MnPFV4bDg+CS6aLisq31Qpn4m7Z4kzhGl1B6SL7udQggNJvgXg9qzkowvSdxHOuvoVnmFPNA97SCYkCFuqNsxw980YoVkK5BIplZzhw9zgmf7YJmKLdZz8mCqyCAtCyHehtW2Z3F2grMJmrlUdJAfSCet3U0U4ZFPRMH7DGxQPijim9OeYYBWU+rKRUB4kDH5HlJdLuMZjY8y8ECXYQc0Nr6StyiOD47K+2FIuETs6ofxCHV0PI0Mn0OKcP7EgBS7ZJp9OalgZuaplM5v\/QQs6bu15ACOFzGpXDzMgOfEVbyLVesLaxcNCqet8DgIwY3vKtKfhhXXvlwnVKktai+RX4vEd7M3Cf6sY9HhB6FouxJUBOlksMHMy7ZfIi0bM9wtEojwD7fZAopag+02NFKykvqzZsPmKBBdzynDOzL\/qnRxCWX6S35Mv6hgEPkxa6+cLQgjacS2JJVJLsyzInRbANdLaDU181uddKJA0wVtEI7CrobEiR0oREzS5HWfB\/jVb3q72aL+\/tcLubdFjVT8ZGZDcEM7c7UlBo2wDnKJjMWBqT4mSJFA68PZGgt3iLe22NsjrjS5VqRTDO0aUntSxSeu9R35MG2ZsL29JLQTWOHRdsKfG2bsnSfosj2ZLwq2LXn7YM4KBxMQVXT9wiS2SW5UBna9uHEXPNXFxkhYC+dOSt5sYFhx4J7ZIeTqgZtMHT4tj\/wPEYp5Eyi7RQfge7oeqKkiAxyhiqac5777TFpGTUz88Ph9CS0Ho0AWWbJ7Q775ihnvljYe1QCe6r8u+fhTsKu6fED5fb4jTU0v75h3NcCqMnD0qDl8yjGNpy6q779rjNkZdkK7ZHZfHWFCfp4Xb4oL5vL90e2boribomPEuEjLcb8nRsAbejj0v8ouFrdILPIC5D+2UBmwGBhQTUCARnZdEAGv2J2+HPA3bgnoTPOJEVoBavtbXDv81NX+sKJOJETkyTCe8\/9MbJuH\/JlL7+CKSkDZ9zPT31ze7R+l0J6QFbPsHU1onrWbeoObLS+pXJ7f1Am5lpy1a7ZJjyumRi9Jm7xkrYk4UpylWu4YfyVPEq7N0oDwrQf2QONGBO\/P8KZqh8U\/9wPtkOOvt7lkw9TVZwBjpoC8Atr36CKW8i0HQfoD6WZ06UGmzTHy63C6gHDVpJjZOVGpCfD7FWARxlZGnpQByUBwq3CGREI0X3xN\/oIyXQmZBWcn1RYxWETwMKltW3x2EmI3BBRgkBh+OPN\/YMtlabbKzXZGA7tcX0OhLwYEwm+cG9K7H4gUFTH3n0mN14l+Iv4LyJWwaE+evKKrBjcxE2XQf\/+DovEKhQVxbnJJ6b5IaeS11nUWdrQn7Wqeb8EVJUMyfWAgeTeBnehNUSU0ycO4DaxvJCoT9WxjM++bp1axf4JricNyk9XFs+9vmsEfyBwXVs7KwEXWdB3Mz+dIwfuDbmk3Mt5cudfzciEbT3Uv3KJgKXLmujMh7q+nlTSCWAM\/J2aTuw9jejlfXAhgRuxn\/PVr2pLy514CN4CXCw3FTvgsORFJKuz0Y5+0TVqCY0\/lyE5RcoVF68c2LyPJCjzeofC08pISvOR\/W++FzeWCIcvu6yngXGwIKdsdGv7Yiq31I\/7Ty+ajzENhJO\/WADLniEgBrVaIq3mSbNpI6Ymn\/wdtHsacDFiNHlHcjymGTm2y9y8RV6qStiVu6HlwgvNTjjPGAo3OUie7Yuiv\/QD+yzHkcJScoYIHm5Kih1CAUCeEyq5FlT7P1Oy3BXFWt0renkNvYYjHofJw1ciFUpJkMlRTNfr24CHi1qZtGzAaJ3k3bSqIWE3WYLecxZwrwNmKVVQBfEBdLX4LCb4q2144YNsl\/opq3byagKN5cMAh3ildynjYWALbGm8yjX0u7WvMreDKzJuSgkc3IwBvYJNy4h8aXTWWf7k\/HR2iqWhnhXUNFlbqI\/aTC3C78MrWIxcKWHFm2avuerJa5h\/N5S1K0fG3dR8zczFDz3rIPRbPAvgelDUUKUZDtDshmJBB8+lXtFiyyI+A4BQolj3pDCZuhY2PKtDy8yzxaqEj4XJTa6zlLtW1+RGfgs3aAtycPl0uBa5PF0mKVqIs7rmWTg12vkQ9YWyE25mpbJyFIgjbsYdv1\/RIdTq1r+ykLVLcEIFqvOPm1bDjRmwbAb0DUDmnha5l73nYTV1E2qApNl2VnQCGDxRC0++rQgh744mcUNJ6AWALV3E2n7qRmL2sC15kFxWX\/CoFYnEMOScvuaavyQt3YvoBz22n\/s2aULnqdI2YoK8PgEz1uJv09Rx8C2ckNG0yDp53SBbcpAfbP2EGZ2RD4jpmDEwdy1H+jhsG6ay0W2MkH0gBpMXiV\/fRZRWc5aweqEQ6t0zqY7ZnXHYMZKUyIKL\/wK+UpDBrB4NNFCzZc5BSpZcv033ZslMS3d\/kpaBEFGSiuKvNsuyEBBhF8MqO77Do+gOXDvkDnCMsITGU5FDyw7\/Qul2XTjN6zHIus5rxGCei4UKtOuBOPRlxhrIy6twHsxIUBwvZIoHRxqF923J8ltBWajFuLm4bnzd+h\/RJm\/ji2MzF3\/7QOQlu1m\/80VtIqI20z8tH6yyYP9mX9hEtAuSDtgMBpc8yhwZAKlH2kWLB\/AglZrGh+RNmkfUn3nSjMlce9EgzIYouGsaedqgEOBreiPOzHdnL0gyXlGC2DbHLNIqHPPRR1fM61Ip0TgMoedE7MGKNnDMx+TPpmsWKqtHcEIDsGquTjvMUaXukfnbUFqaMWXLrLfdtoJyJ3MEM\/eEChEUR+2h6u+Aw2PQ3q66+riC7\/q2gXZFrBDvCs+DkYTbAu\/uuOJf\/IGQiw+ZFhBvny2VLpAsZQREbIi\/LGjojoDeDH\/F0K3BmpAIQNOs8glzYEZK\/P0crkSfPeFMYZE6+AuZOV9u95k5x8k3ggvmnYe4nPenhN2fgFsKyoe\/hGwBNQwJAYsSbpmCWXvoeSIPnm6DoCKJdZSeqpM7gnKPDJmjcEZDTSzIMYVBIexaQGPhVLBiBIbyxxpb7ke0KH0pB8xo5D19KHb++ISZxJE4tt6uWkn6GG3Zaooh2Y1YfequKuOs3LLUljQraGlG7BXESoxdZbCkJVuujSRur6tLegZ470pePGkjAGedx1op7QJe8vlUyAiP0YfzI\/lFzfAh9LJZmnSOntYGCY7jqjydMF7674OQ22DdhVaY3HwRGlomT\/tm3Zv+T7ewsQe74nOzqPe0GLAnQ9Sypg6ej0dPtUSO2EATGloD1VhupyS784zFb2HliuNsAIWiTbDV0Smq0dtItLaeK2tIHR9rV7D1r1Tf3Ni8507Wqvnk7yaC6wkbfblJuvFSKd8l1xV1NSEB4wmS6+N31ZlGWKfRUMow5dw93V7ZBZ8coG4Xzf1Kn23N\/hLIkmNkeJC6c835Kdp+sGAVLhQMUKPzF9mXeAukIGIM89a2TfoBFndPQ\/hp9FA\/XQa2VzutsgrfraSjrEaEwRW\/xP2Cl6mkWTkMo\/XIOtF4\/husMPYwKANBCl1Vvn9Wctd8q\/Taxa3dzK\/BaYeaL9xdnzeygXMSDd\/mL6hKbl6uifEADpE73BMCLnKvvyhO5qx6ghtIkudRJQF2XVsNlLlX91+Wdf1TaOGXOZ5Gml7I7lGQ\/gRKwR+ehn1jod1tS9q8f8dCt7FJ+hd56J+iKLMvftHElCWlHicpYni+ZkIXZw287P65ok\/RpEuFSH4VU\/lxaHDsh8HRuy+b4lUExcMTurpLaDUupvrpGZDVjqVk8VHUj15dxEN5wO5\/\/lsaRYcmJfbw9alxqjqk8X3+BGznU625\/x3h\/q7Uzfb3g\/n2igOKY9HlAO\/mVP4oGjHKlpC3Vw0jbemHnhp82zQQPNSS3zLCz2WqAwCU28AGMI86DZ+IBVfvrw1M+7DcqBjdPlWwxy5evP0Pwn1YlJf+pInK2nYPp0EAiLxL9g3CylLAXc8iUlcunJtxgeb4cJ7p0R\/YlLnKznNpGPPDBdzylUmOw2W31LfiODPSbP\/zban+Yg0RlkgAGpYbLeJ+OfRtdddGzQmJONKxmSgUehnszmmUh0SQwJ\/nhVdIh0rNuVtHyXrDDaQo8dGBUtFuluq+eK+FC83w+lwQAyNbBl6yR5WZMsCGaqpxZCQrzBW0y+V5tDgD9ZAt\/03zBzWq5HkB4seaPVYEDzVDmoOkOrMrq\/7J5pAVY5W4V76EHrCUJKe08rclP3wsWQ+cMZ51bNOqq3oo1Mt2vaKEx6g8h32Z0CpAM6NDNPjI51+SeXRMPoTGSTj+\/ZA7utdrAe\/Z4ifmBigsMWis7X8IHh2aYpnPcHeCqpjDq6ti1lry5zRx+h9HzxJl5Pg\/Syqw6iCbURYJhNzx8ch8SeltYzkNWgM1ZjBvHJFMD8pqdk2oVN7c\/0YO+nENOz9w4VOzmIT7nRHlDnD\/mlPX8vsAGP+gFrRckUci6jIO\/\/z0M0c2wrU1Ilnr0BWWBFa9U4ScR2dsvEixowBf3zUxVoBtWoydljcb2\/WSXVcIEE5WC9XGSyn55Dg4zBpq+9XZBD7dxcvm1rw83tuhmCojKYHKPaa3Ll8EPtmJLJ7V4hzjUmNswMEOIIaUvInD2gpW4Avdbq5uUZl1TiqMFVN5Ig0n9LX4BGyyxDxjFvKa4A4RPcEUiFw\/sLmDSRw73zjgTHIHgRNUHDTtDs0sQGQg\/Q5vRLvikeb2seoI4SBITHLTFQTr1Ol63MTLiUEcQGWuSmJL7IqX8JdAPyTdrWi+00p+rLsiTu6TXOVsafFGOIq6dDEx5xfHnshBOqnuCNNI4kFgFXyqfBQVCD2kDcW\/y3pubvWydLcfW6MDDzQOIGJgJ1gyYD86lLBhw22A6GcyD14E2tK0zVNvdYI6z6VP7YWZE98\/hjkmQNFtFqBNM29HQEAlf9dUptRg59KGq6cY03fhSn68QVgYdMIZ8oblPUPcEwFu2XLJCnK74aZmIKAAwjJ7MDKKQymzEXgGE6ciuhx47U08BOH\/euQfOeGJavz5SKTqyqjHU6RTRBfaP3VrpZaMG9cTxjYc7Nxhy6PZUOlnM5956XDvDQMfMr9bB4lScu72ue9VZxzRx\/LpsZeDtWIsGrtdOVdrHIS6s2VszjczlffAykx5eClmBx\/mK5Wh52p2md0UXrBubPS+QQFt4Fk6RxehEk8Lupu+639tsNblOhBpQ\/N44DsPIrS67ohwbmP5mmXHCNCFl5dvIAjcFgu6z4SfDw\/+T0hUFZVs5v8HN\/\/E7eZkpNIGULbXKnW1qK9ZYNKg5KhYKf2t1zvT7BaIoaZJSBxngHSvqvF+2eoOEAmbtdQ3cfyj4EXRkZyD2lkQVEuUXcuM8WHKrKFtmgESF0sAbNjV25FvqdKGyt\/1Qs7qa\/vrw\/UCotvJewzdnoplwU2m4qJxRNsYSiVXbSgd9xuo0suLRMfmbb2jlY3MspWte5VLVosuZK+FwTiaeBUBqvzDNTxAqav1PpKZ4BbNswXKlY1YZ\/cDTBblMfVmIvMaZkcQ33\/K5TZ6dMwkuSEVU+UkA1Agx0+BFWwJamKmkYLALVrwsWSpYX7B6IwfbIooi+Gi95ufxjoSqU5+lA7oQjvno8qt+wnfE9A9AC7QgOtYFbXhlhUtjjHb6zB7qAiNIXDf7gY3KvtggyKWOavSxatHv2IBxGly9GR29\/29B04GYx5NVBE0r4yHwPjxn9bOS0HruHpDBPjglEJEv3pAxyQpdPBlsWkuDnGwn0gPATwjRCHB++Uw15cF5GzidWZKeSYE6il1KIK04c8cF9TPoxWaDYMEehgenwDUrxjeyt3kVJSD9uj8ttOnKepc2urtbhsv0qsMslDTCQksDxu63GUCAoNd4PTkjSze9UYjHvo1RFbEgWnK47Dw\/VvUOqDq41rIUSrEx9hpaEOZmGR5baNhH3LXQPGnHqe437xtYGUVv4sBMbJv5iOWAUwZmq1u23kh3AaIq9tzbYgWLdQMCfaIn5Qv0sya0BMhyXuhriOddDuRGzLstAdXPrB7wCvXsO41seWKGhU4RBlZH6Ydq8+CcOJixfhe6G2+bubC7LejtwTx2pGoEtYSR4eWURmhXjqi67jChd5BDihYS8df9P5Hp60TvNdnonqyf0tLJ+WQ2xzlqHxDIDj51Bg12F4DCpQwm6PMYEtFzTXUvj8De4hkKHwVI\/\/YO8lEpa84OJ5LdM84tHS6pilWZiYjJbI\/Vb\/WVCcULmp9lRTesXzImTK928EwSovymtBgH8\/BXzPote+StPtZGdAey9DYsERnor4IiW3VEEcMz5wavhFaLVjfVm4Qd0pEBtYq1OuLoUtd9\/X+XejIJz0p1SxRretSKIyq8pfeyNXtRQqf0d2JGEyVw1hAJRQYnuHSDOs4eNFj1Sy9+VcsvWpOlbH\/flV\/453emoh\/zBKaI3qvupu71eKx0hZ2H1E2vqpgKFqj6+LILNirzWFAYKukoNStkIsI7onAEs8UJAd9V+PmTdV0AHEYLTg3TsMV7I2RMFRtlCEtjNNR6ZbSKlL+G61Va7tze4Iv5cf+7mWGtorxyAFD+REZE3LXLekPixImr+RPo75fy+jCaEX9hEN4u05qjUpzM2Mm\/9WvoiOQ2K8w4fOHG2svAQ8Z6UNVe7pGEdHoyo+WWQ7Y62dErrXm2IlKzrpzMX\/GtTy3KThBehktT1eNTnTllXb\/5LIkJg6BuyAE1cjR9sI1gHQ7E3xdajUgVGctz+ZWMJgDPDuXndI0hy5ZU5J0jN7J9mepugdh5aX4cp6w0wi4TRBhu9DpDgYcGmWb3UMuUDcqC77rgtm32TVFqE3MYa6mKYCIoENwMNJjbM2gGuonhQ1h5Igj\/7gxguxBDcD3O5RuzxlTkd2Rw9nuDouOdMRQg3ebaPsYmyjBlam\/oJsQJJvmTvk4c47sgeIiTgBdBM4EjA8dj9jN3IN+W2sDa6Y9kK9Iy5uh0zyFEMzNhGKWy0R\/HiOgARjYQlsHiFRAwsF7A\/VVomCGPFJ7a5+RDR9AFZQazKVWzWxqufEDnwup7DKZ9IkhSnxpsjMY\/LosOnwZdlKV9WCvz\/wLzbTk2XlSamXzPqqDkDzQfx5U1DuaWQRcCHLa69nJ\/p8rybV7CVBxoLUfgm+zgUOyWDqtv3PQhTTH9K8lpqh9Y4NejCu7eJ8bwpUvd8su1F0xrDobQVjKIg6QW0hZ+0Dnci65IkIl96dVJKRnCyQAoRYi44t\/dG4HsRn1HG9SitMPJ9+SQZnuZAGfI293TpDzGNo70pzlYOvOjgcVC4V1+NIgiQRDRbGZBFInacVxUKdnbYcrXn9QT31ljUZ6\/dBY\/X8FSpG+4bOzviwHSPb5k3qt1LwYpEe5uK2FyhhvDveDxyMOXToQPIPl8VM1ZAuX\/3ZKpyXs9ZLnd8u6MbV+hp\/FwJ3juU3e23A4DbxFvBdFZqtMQUzUJe\/3CggVswpmBCMhcQvvFPvi5WGoO310S0so2KW1LroRXeIH0JQF9dlsNfS8L9CDelKVG3s+GGmUuwAsoTChE0HmY5t0lhw733LKvXefYpz3r2L96eA6apsRBDkbrW9KKg54rtHHYf7rtdQ58pRX3fISw=","encoding":"base64"}
Note that the binary data you get when you decode above base64-string, is not the contents of an .osr
-file. It is the LZMA stream referred to by the osu-wiki here:
The remaining data contains information about mouse movement and key presses in an wikipedia:LZMA stream (https://osu.ppy.sh/help/wiki/osu!_File_Formats/Osr_(file_format))
Bitwise enum representing a combination of enabled mods.
enum Mods
{
None = 0,
NoFail = 1,
Easy = 2,
TouchDevice = 4,
Hidden = 8,
HardRock = 16,
SuddenDeath = 32,
DoubleTime = 64,
Relax = 128,
HalfTime = 256,
Nightcore = 512, // Only set along with DoubleTime. i.e: NC only gives 576
Flashlight = 1024,
Autoplay = 2048,
SpunOut = 4096,
Relax2 = 8192, // Autopilot
Perfect = 16384, // Only set along with SuddenDeath. i.e: PF only gives 16416
Key4 = 32768,
Key5 = 65536,
Key6 = 131072,
Key7 = 262144,
Key8 = 524288,
FadeIn = 1048576,
Random = 2097152,
Cinema = 4194304,
Target = 8388608,
Key9 = 16777216,
KeyCoop = 33554432,
Key1 = 67108864,
Key3 = 134217728,
Key2 = 268435456,
ScoreV2 = 536870912,
Mirror = 1073741824,
KeyMod = Key1 | Key2 | Key3 | Key4 | Key5 | Key6 | Key7 | Key8 | Key9 | KeyCoop,
FreeModAllowed = NoFail | Easy | Hidden | HardRock | SuddenDeath | Flashlight | FadeIn | Relax | Relax2 | SpunOut | KeyMod,
ScoreIncreaseMods = Hidden | HardRock | DoubleTime | Flashlight | FadeIn
}
schema | Description |
---|---|
osu://mp/<int mpID>/[<string password>] |
Link to a multiplayer match. mpID is an ID to a multiplayer match (does not work with the API call /api/get_match !), while password is the password to the multiplayer lobby (if it has one, that is). |
osu://edit/<xx:xx:xxx>[ (x,x,x,x...)] |
x is an integer from 0 to 9. xx:xx:xxx represents the position in time of a song, while (x,x,x,x...) represents the selected hit objects such as sliders, circles, and spinners. This link is added automatically in mods such as this one when xx:xx:xxx (x,x,x,x...) is written. The numbers aren't typically written by hand. Usually, modders select a few notes from the in-game editor and use ctrl+c to copy xx:xx:xxx (x,x,x,x...) to the clipboard. |
osu://chan/#<string ChanName> |
Link to a channel in the osu! chat. (e.g. osu://chan/#italian). When clicked, the channel is automatically opened in osu!. If you want to do a sort of integration of your tool, you can change it with an irc link to cho.ppy.sh on channel ChanName, although it will require authentication with a password that can be obtained going to this page. |
osu://dl/<int mapsetID> |
Link to an osu!direct download. osu!direct is a supporter-only feature. You can get data of the beatmap by doing an API request (/api/get_beatmap?k=&s=). osu://s/<int mapsetID> does the same thing. If you don't have supporter, it opens the mapset page (https://osu.ppy.sh/s/<int mapsetID> ) |
osu://b/<int mapID> |
Same as osu://s/<int mapID> , but uses mapID. Similarly, redirects to map page (https://osu.ppy.sh/b/<int mapID> ) if you don't have supporter |
osu://spectate/<String username or int userid> |
Starts spectating the user with the given name or id. |