Jump to content

User:TimoVM/RAM Writer setups: Difference between revisions

m
 
(31 intermediate revisions by the same user not shown)
Line 15:
General installation overview:
# Assemble 8 items to form a text converter item code.
# Catch 1514 pokémon (any species is fine), give 12 of them specific nicknames and store them in the currently loaded box. Use your ACE item.
# Use the nickname writer to write the large RAM writer in memory.
# The RAM Writer will automatically take care of the final setup upon first execution
Line 97:
This item code looks at the nicknames of the pokémon in the currently stored box, then uses pairs of text characters to write a new program. After it finishes, it immediately jumps to execute the newly written program.
 
==Step 2: Catching and nicknaming 1514 pokémon to build a nickname writer==
 
The item code we have assembled converts nicknames into code, which means we'll have to catch pokémon with the right nicknames to do something useful. The pokémon we'll be catching will be stored in a storage box. Make sure the box you pick fulfils the following requirements:
 
* The box needs to be set as the active box.
* If on VC, doit NOTis recommended to not pick box 1 since that's the box Poké Transporter connects to.
 
Once that is done, we will fill the box with nicknamed pokémon. We'll be making a list with nicknames using Scottey's nickname converter tool. Simply copy paste the entire code below into the converter, then press the "Run" button to display the list of nicknames. '''Ignore the checksums for now.'''
Line 113:
! Red/Blue !! Yellow
|-
! Nickname writer (1514 codes) || Nickname writer (1514 codes)
|-
| <pre>00 00 00 00 00 11 9C D8 D5 D5 06 01 21 5C 65
CD06 D6 35 0E 8001 21 4B 0A 745C 65 77CD 26D6 CF35 D10E 2A80
21 4B CF D1 2A 87 30 09 86 12 13 23 81 12 4F 18 F3 21 29 C4
0E13 0123 D581 CD12 DF4F 1518 CDF3 3121 3829 D1 F0 B5 A7 28 EEC4
0E 01 D5 CD DF 15 CD 31 38 D1
0F 38 CA 0F 38 06 0F D0 1B 1B 1B 1B 1B 18 DF</pre>||<pre>00 00 00 00 00 11 9B D8 D5 D5 06 01 21 CD 62
CDF0 84B5 3EA7 0E28 80EE 210F 4A 0A 74 65 77 2638 CF D11B 2A0F
8738 30E7 090F 86D0 121B 131B 231B 811B 1218 4FC3 18</pre>||<pre>00 F300 2100 00 C400 11 9B D8 D5 D5
0E06 01 D521 CD BF 1362 CD 1E84 383E D1 F0 B5 A7 280E EE80
21 4A CF D1 2A 87 30 09 86 12
0F 38 CA 0F 38 06 0F D0 1B 1B 1B 1B 1B 18 DF </pre>
13 23 81 12 4F 18 F3 21 29 C4
0E 01 D5 CD BF 13 CD 1E 38 D1
F0 B5 A7 28 EE 0F 38 CF 1B 0F
38 E7 0F D0 1B 1B 1B 1B 18 C3 </pre>
|}
 
Line 141 ⟶ 145:
 
During the input phase, the controls are as follows:
* '''Press BA''' for the program to ask for a new nickname and convert that to the next five bytes to be written.
* '''Press DOWNSELECT''' to go back onefive bytebytes atand ask for a timenew nickname to correct errors. '''IfUse this if the printed checksum doesn'tdoes not match the expectedpredicted checksum, pressand DOWNthe 16last timeswritten tonickname retrycontained theten last mailcharacters.''' This will also overwrite the printed checksum with the value at the currently selected address, giving you a method to check how far back you're going.
* '''Press B''' to go back one byte at a time. The checksum will automatically be overwritten by the value written at the current selected address, giving you a measure of how far back you're going. '''This function is only needed if you accidentally confirmed a nickname without writing all 10 characters.'''
* '''Press any other button (except A)''' to immediately start executing the newly written program. '''Only do this when you've finished writing everything.'''
 
Line 150 ⟶ 155:
![[File:RB Name writer write mode.png|thumb]]!![[File:RB Name writer input mode.png|thumb]]
|-
| Press select to switch between uppercase/lowercase || MChecksum andis Odisplayed ofright POKéMONnext replacedto by the checksumITEM
|}
 
Line 157 ⟶ 162:
{| class="wikitable"
|+ Codes to be used with [https://scotteh.me/ace/nick Scotteh's mail code tool]
|-
! colspan=2 style="text-align: center;" | Red/Blue !! ! colspan=2 style="text-align: center;" | Yellow
|-
! Installation for Red/Blue (50 codes) !! Installation for Yellow (50 codes)
|-
| <pre>213E 4303 0ACD 747A 65 75D9 21 1E D3 36 59
65 01 C8 00 11 53 BA 21 BCBB D8 CD
CD B5 00 11 65 DA D5 0E 1213 C3 B5
B5 00 AF 3C E0 B6 E0 B7 21 00 DA
DA CD 74 C6 E5 11 F8 FF 19 54 5D
5D 01 0C 00 CD DD C6 21 A9 C3 CD
CD 65 C6 3E 7C 22 7A CD 65 C6 7B
7B CD 65 C6 3E E3 22 1A CD 65 C6
C6 36 7C 09 13 7D FE 13 20 E5 26
26 00 74 21 50 C4 36 ED E1 18 C4
C4 F5 CB 37 CD 6C C6 F1 E6 0F C6
C6 F6 F6 80 22 C9 CD BE C6 CB 5F
5F 20 39 CB 57 28 0A 0F 30 01 E9
E9 F0 FE 83 E0 FE C9 0F 30 2A E5
E5 CD DD C6 4E CD BE C6 0F 38 12
12 0F 30 01 4B 79 83 4F 21 50 C4
C4 36 EC 23 CD 65 C6 18 E8 E1 71
71 E5 06 1C 21 CE 77 CD D6 35 E1
E1 C9 0F 30 03 53 1E 00 19 C9 CD
CD 31 38 F0 B5 76 11 00 00 F5 07
07 30 01 13 07 30 01 1B 07 30 03
03 11 F0 FF 07 30 02 1E 10 F1 C9
C9 E5 F0 FE E5 26 0A 74 26 40 77 E1
E1 C9 21 43 0A 74 65 7536 03 0E C8
11 20 C6 D5 21 53 BA C3 B5 00 </pre> || <pre>21 43 0A 74 65 75 21 1D 00D3 36
59 01 C8 00 11 53 BA 21 BB D8
CD B1 00 11 64 DA D5 0E 12 C3
Line 210 ⟶ 213:
C9 E5 F0 FE 26 0A 74 26 40 77
E1 C9 21 43 0A 74 65 75 0E C8
11 78 C9 D5 21 53 BA C3 B1 00 </pre>
|}
 
Line 677 ⟶ 680:
30 01 13 07 30 01 1B 07 30 03 11 F0 FF 07 30 02 1E 10 F1 C9 }}
 
=Gold/Silver/Crystal=
 
General installation overview:
Line 687 ⟶ 690:
==Requirements==
 
In order to install the RAM writer, you need to have an ACE setup that redirects execution to the 1st or 2nd character of box name 1. Available options are either:
 
For Gold & Silver:
 
* [[User:TimoVM/Coin_Case_ACE_with_stat_xp_redirection|Coin Case ACE]] which uses a pokémon's EVs to redirect to the last read mail, which fixes the stack and then redirects to the start of box names.
* Wrong Pocket TM17 ACE using a Quagsire holding TM01 and with Return as first move.
For Crystal:
 
* [[User:TimoVM/TMless_0x1500_ACE|TMless 0x1500 ACE setup]] which uses a bad clone and a pokémon with specific EVs to redirect to the last read mail, which redirects to the start of box names.
* (TODO: add Zodiac's page and/or LuckyTyphlosion's setup)
 
Next, make sure to take care of the following:
* Make sure to empty box 14 of any pokémon you wish to keep. We'll be installing the full RAM writer in the data for box 14, meaning everything inside it will have its data overwritten.
* PutFor Crystal, put any item that you can afford to lose in the first slot of your item pack. This item will be changed to a TM33TM15 at the end ofduring the setup.
 
==Step 1: Setting all TM quantities to 255==
[[File:All TMs box codes.png|thumb|150px|right|Edit the first eight box names until they form the following code.]]
Enter the following box names, then execute ACE.
 
Enter the following box names. After preparations are complete, execute ACE.
<pre>
 
{| class="wikitable"
|+ Caption text
|-
! Gold & Silver !! Crystal
|-
| <pre>
Box 1: A p 'v C é 2 2 5
Box 2: 'v j 'v u é 1 2 5
Line 709 ⟶ 723:
Box 7: 0 9 ♀ 5 ♀ 5 5 5
Box 8: 5 5 5 5 5 5 x 'd
</pre> || | <pre>
Box 1: p 'v 9 é 'd 5 'v *
Box 2: é H 5 'v ♂ é G 5
Box 3: A 4 é m 5 'v 9 5
Box 4: é k 5 F é 'l 5 F
Box 5: 0 B 's 'v 5 u 'v c
Box 6: é n 5 's k 5 'v B
Box 7: 'd 5 5 2 p é 'm 5
Box 8: 'v 'd é 't 5 'v ♂ 5
Box 9: é 's 5 é n 5 v 5
Box 10: 'v L é T 2 0 9 5
Box 11: 5 5 5 5 'm 5 5 ♀
Box 12: 'v F 's k 5 F ? E
Box 13: 's k 5 * 'm k 5 5
</pre>
|}
 
This will set the quantities of all 50 TMs to 255. For Crystal, this will also change the first item to a TM15 and install a bootstrap to redirect execution to the TM/HM pocket. Do not use this TM15 yet.
 
===What to do now you have 255 of every TM===
 
At this moment, there are two main options.
# You can use the quantities in the TM/HM pocket to easily write out simple codes. A list of TM codes can be found on [[User:TimoVM/TM_codes | this page]]. (Currently only supported for Gold/Silver)
# You can continue with the guide and build a RAM writer in order to achieve near-complete ACE control.
 
Line 722 ⟶ 751:
 
Sell TMs such that you get the following quantities:
 
[[File:Mail writer TM codes.png|150px|thumb|right|Sell or toss TMs until the quantities match the following amounts.]]
===Version independent TMs===
 
{| class="wikitable"
! TM !! Final Quantity !! Amount to sell || Sell value
|-
|TM01 DYNAMICPUNCH ||x17 ||x238357000 ||357000
|-
|TM02 HEADBUTT ||x85 Colspan = "2" ||x170 SEE NEXT TABLE ||170000
|-
|TM03 CURSE ||x221 Colspan = "2" ||x34 ||51000 SEE NEXT TABLE
|-
|TM04 ROLLOUT ||x213 ||x42 ||42000
|-
|TM05 ROAR ||x213 ||x42 ||21000
|-
|TM06 TOXIC ||x213 ||x42 ||63000
|-
|TM07 ZAP CANNON ||x62x33 ||x193222000 ||193000
|-
|TM08 ROCK SMASH ||x04 Colspan = "2" ||x251 SEE NEXT TABLE ||125500
|-
|TM09 PSYCH UP ||x33 Colspan = "2" ||x222 ||111000 SEE NEXT TABLE
|-
|TM10 HIDDEN POWER ||x66x207 ||x18972000 ||283500
|-
|TM11 SUNNY DAY ||x98x225 ||x157 ||15700030000
|-
|TM12 SWEET SCENT ||x207x209 ||x4823000 ||24000
|-
|TM13 SNORE ||x225x42 ||x30 ||15000106500
|-
|TM14 BLIZZARD ||x209x254 ||x46 ||690001500
|-
|TM15 HYPER BEAM ||x42x80 ||x213262500 ||319500
|-
|TM16 ICY WIND ||x135x56 ||x120298500 ||180000
|-
|TM17 PROTECT ||x48x251 ||x207 ||3105006000
|-
|TM18 RAIN DANCE ||x07x40 ||x248215000 ||248000
|-
|TM19 GIGA DRAIN ||x134x10 ||x121367500 ||181500
|-
|TM20 ENDURE ||x18x135 ||x237180000 ||355500
|-
|TM21 FRUSTRATION ||x19x134 ||x23660500 ||118000
|-
|TM22 SOLARBEAM ||x129x18 ||x126355500 ||189000
|-
|TM23 IRON TAIL ||x79x19 ||x176354000 ||264000
|-
|TM24 DRAGONBREATH ||x18x35 ||x237330000 ||355500
|-
|TM25 THUNDER ||x42x129 ||x213126000 ||213000
|-
|TM26 EARTHQUAKE ||x39x79 ||x216264000 ||324000
|-
|TM27 RETURN ||x32x18 ||x223118500 ||111500
|-
|TM28 DIG ||x242x24 ||x13 ||13000231000
|-
|TM29 PSYCHIC ||x33x239 ||x222 ||22200016000
|-
|TM30 SHADOW BALL ||x1x33 ||x254333000 ||381000
|-
|TM31 MUD-SLAP ||x196x1 ||x59381000 ||88500
|-
|TM32 DOUBLE TEAM ||x77 Colspan = "2" ||x178 SEE NEXT TABLE ||178000
|-
|TM33 ICE PUNCH ||x205x77 ||x50267000 ||75000
|-
|TM34 SWAGGER ||x240x205 ||x15 ||750025000
|-
|TM35 SLEEP TALK ||x58 Colspan = "2" ||x197 SEE NEXT TABLE ||98500
|-
|TM36 SLUDGE BOMB ||x27 Colspan = "2" ||x228 SEE NEXT TABLE ||114000
|-
|TM37 SANDSTORM ||x205x27 ||x50228000 ||50000
|-
|TM38 FIRE BLAST ||x144x205 ||x11150000 ||111000
|-
|TM39 SWIFT ||x55 Colspan = "2" ||x200 ||200000 SEE NEXT TABLE
|-
|TM40 DEFENSE CURL ||x240 Colspan = "2" ||x15 SEE NEXT TABLE ||7500
|-
|TM41 THUNDERPUNCH ||x171x189 ||x8499000 ||126000
|-
|TM42 DREAM EATER ||x189x40 ||x66322500 ||99000
|-
|TM43 DETECT ||x40x217 ||x215 ||10750019000
|-
|TM44 REST ||x216x56 ||x39 ||58500298500
|-
|TM45 ATTRACT ||x56x240 ||x199 ||29850022500
|-
|TM46 THIEF ||x238x254 ||x17 ||255001500
|-
|TM47 STEEL WING ||x7x08 ||x248 ||372000370500
|-
|TM48 FIRE PUNCH ||x208x200 ||x4782500 ||70500
|-
|TM49 FURY CUTTER ||x24 ||x231 ||346500
|-
|TM50 NIGHTMARE ||x241x242 ||x14 ||1400013000
|}
 
===WhatVersion to do in case you sell too manydependent TMs===
 
If you accidentally sell too much any TM, you can use the following box name code to set that TM back to x255:
 
{| class="wikitable"
! Rowspan = "2" | TM || Colspan = "2" | Gold & Silver || Colspan = "2" | Crystal
!Box number !! Box name
|-
| Box 1 || A p 0 9 é _ ♀ 'd
|-
! Final Quantity !! Sell value !! Final Quantity !! Sell value
| Other || Can be left as they are
|}
 
Replace _ with the character that corresponds to the TM you want to set to x255:
{| class="wikitable"
! TM !! character
|-
|TM02 HEADBUTT ||x85 ||170000||x128 ||127000
| TM02 || (space)
|-
|TM03 CURSE ||x221 ||51000||x210 ||67500
| TM03 || A
|-
|TM08 ROCK SMASH ||x66 ||94500 ||x117 ||69000
| TM04 || B
|-
|TM09 PSYCH UP ||x98 ||78500 ||x94 ||80500
| TM05 || C
|-
|TM32 DOUBLE TEAM ||x196 ||59000 ||x197 ||58000
| TM06 || D
|-
|TM35 SLEEP TALK ||x239 ||8000 ||x204 ||25500
| TM07 || E
|-
|TM36 SLUDGE BOMB ||x58 ||98500 ||x56 ||99500
| TM08 || F
|-
|TM39 SWIFT ||x144 ||111000 ||x75 ||180000
| TM09 || G
|-
|TM40 DEFENSE CURL ||x55 ||100000 ||x53 ||101000
| TM10 || H
|-
| TM11 || I
|-
| TM12 || J
|-
| TM13 || K
|-
| TM14 || L
|-
| TM15 || M
|-
| TM16 || N
|-
| TM17 || O
|-
| TM18 || P
|-
| TM19 || Q
|-
| TM20 || R
|-
| TM21 || S
|-
| TM22 || T
|-
| TM23 || U
|-
| TM24 || V
|-
| TM25 || W
|-
| TM26 || X
|-
| TM27 || Y
|-
| TM28 || Z
|-
| TM29 || (
|-
| TM30 || )
|-
| TM31 || :
|-
| TM32 || ;
|-
| TM33 || [
|-
| TM34 || ]
|-
| TM35 || a
|-
| TM36 || b
|-
| TM37 || c
|-
| TM38 || d
|-
| TM39 || e
|-
| TM40 || f
|-
| TM41 || g
|-
| TM42 || h
|-
| TM43 || i
|-
| TM44 || j
|-
| TM45 || k
|-
| TM46 || l
|-
| TM47 || m
|-
| TM48 || n
|-
| TM49 || o
|-
| TM50 || p
|}
 
===What to do now you have sold TMs===
 
Once you've finished selling TMs, set up box names according to the following codes. This code will redirect execution from box names to TMs.
 
[[File:Redirect to TMs codes.png|thumb|right|Enter box names such that they match the above codes in-game.]]
'''For Crystal, you already have a TM15 that will redirect execution to the TM/HM pocket, meaning you can skip setting up this box code.'''
 
{| class="wikitable"
Line 951 ⟶ 895:
| Box 1 || A p 'v C é 'd 2 5
|-
| Box 2 || 5 5 5 5p 5'v 56 h 'm
|-
| Box 3 || ♀
Line 957 ⟶ 901:
| Other || Can be left as they are
|}
 
Once everything has been double checked, you can use your ACE item in order to start up the mail writer. '''Make sure to save prior to this step. Once you start the mail writer you'll need to finish writing all mail codes before you have an opportunity to save again.'''
 
==Step 3: Using the mail writer==
 
Once everything has been double checked, you can use your ACE item (In Crystal, use TM15) in order to start up the mail writer. '''Make sure to save prior to this step. Once you start the mail writer you'll need to finish writing all mail codes before you have an opportunity to save again.'''
 
===Controls===
Line 969 ⟶ 913:
 
Alongside these actions, the mail writer will now request user input:
* '''Press A + BSELECT''' together to open a new mail and continue writing data.
* '''Press START''' to immediately jump to and start executing the newly written program. '''Only use this when you've finished every mail.'''
* '''Press DOWN''' to go back one byte at a time to correct errors. '''If the printed checksum doesn't match the expected checksum, press DOWN 16 times to retry the last mail.''' This will also overwrite the printed checksum with the value at the currently selected address, giving you a method to check how far back you're going.
* '''Press any other button''' to go back one byte at a time to correct errors. '''If the printed checksum doesn't match the expected checksum, press DOWN 16 times to retry the last mail.''' This will also overwrite the printed checksum with the value at the currently selected address, giving you a method to check how far back you're going.
* '''Press any other button''' to immediately jump to and start executing the newly written program. '''Only use this when you've finished every mail.'''
 
{| class="wikitable"
Line 986 ⟶ 930:
|+ Codes to be used with [https://scotteh.me/ace/mail/ Scotteh's mail code tool]
|-
! InstallationGold at& $DD55Silver (18 codes) || Crystal (18 codes)
|-
| <pre>3E 03 CD E1 30 0E CE 11 E1 B9 21 747A DD CD 1A 31
0E 2D 11 18 D4 D5 CD 1A 31 3E21 E1 EAD5 B834 D57D C94E AF09
22 AF 3D 22 C9 AF 3C E0 D6 21 00 DA CD 21 DF E5 11 F8 FF 19 54 5D
11 F8 FF 19 54 5D 01 0C 00 F0 FE 21 A9 C3 CD E1 30 CD 65 CC 3E 7C
22 7A30 CD 65 CC 7B3E 7C 22 7A CD 65 CC 3E E3 22 1A7B CD 65 CC 3E
E3 22 1A CD 65 CC 36 7C 09 13 7D FE 13 20 E5 CD F1 30 21 50 C4 36
F1 30 21 50 C4 36 ED E1 18 C2 F5 CB 37 CD 6C CC F1 E6 0F C6 F6 F6
F1 E6 0F C6 F6 F6 80 22 C9 CD 90 37 F0 AB 11 00 00 07 30 01 13 07F0
AB 07 30 01 1B13 07 30 0301 11 F0 FF1B 07 30 0203 1E11 10F0 07FF C907
30 02 1E 10 07 C9 CD 74 CC 38 41 07 30 0B 07 07 30 01 E9 F0 FE 83
30 01 E9 F0 FE 83 E0 FE C9 07 30 03 53 1E 00 19 07 30 2A E5 F0 FE
07 30 2A E5 F0 FE CD E1 30 46 CD 74 CC 07 07 30 01 43 07 38 0E 78
01 43 07 38 0E 78 83 47 21 50 C4 36 EC 23 CD 65 CC 18 E7 E1 70 E5
CC 18 E7 E1 70 E5 3E 05 21 FD 4D CF E1 C9 FA AB CE FE E1 C0 FA C2
CE FE E1 C0 FA C2 CE FE 90 C0 3E 0D EA E0 CE C9 C3 01 DF 3E 03 CD
C3 01 DF 3E 03 CD E1 30 0E 71 11 20 CC D5 21 E1 B9 CD 1A 31 0E 48
11 21 DFB9 CD 1A 31 0E 1248 11 0F21 DF CD 1A 31 0E 0312 11 0F
DF CD 1A 31 0E 03 11 8A FF CD 1A 31 AF E0 89 C9 </pre>||<pre>3E 03 CD CB 2F 0E D0 11 E1 B9 21 A6 D2 CD 26 30
0E 2A 11 47 DA D5 CD 26 30 21 BC D8 34 3E D0 4E
09 22 AF 3D 22 C9 AF 3C E0 D4 21 00 DA CD 21 C0
E5 11 F8 FF 19 54 5D 01 0C 00 F0 FE 21 A9 C4 CD
CB 2F CD 65 CD 3E 7C 22 7A CD 65 CD 7B CD 65 CD
3E E3 22 1A CD 65 CD 36 7C 09 13 7D FE 13 20 E5
CD E1 2F 21 50 C5 36 ED E1 18 C2 F5 CB 37 CD 6C
CD F1 E6 0F C6 F6 F6 80 22 C9 CD 4B 35 11 00 00
F0 A9 07 30 01 13 07 30 01 1B 07 30 03 11 F0 FF
07 30 02 1E 10 07 C9 FA 74 CF FE D0 C0 FA 8B CF
FE 90 C0 3E 0D EA A9 CF C9 CD 74 CD 38 41 07 30
0B 07 07 30 01 E9 F0 FE 83 E0 FE C9 07 30 03 53
1E 00 19 07 30 2A E5 F0 FE CD CB 2F 46 CD 74 CD
07 07 30 01 43 07 38 0E 78 83 47 21 50 C5 36 EC
23 CD 65 CD 18 E7 E1 70 E5 3E 05 21 13 4E CF E1
C9 20 8B C3 00 C0 3E 03 CD CB 2F 0E 71 11 20 CD
D5 21 E1 B9 CD 26 30 0E 5A 11 0F C0 CD 26 30 0E
05 11 F9 FF CD 26 30 3E 70 E0 88 3E 18 E0 87 C9 </pre>
|}
 
Line 1,021 ⟶ 982:
 
* Save the RAM writer to the contents of box 14.
* ChangeAdd theTM33 first(G/S) itemor slotTM17 in(C) yourto itemthe packKey toItem TM33pocket.
* Install setup to make sure that using TM33/TM17 from the key item packpocket will start the RAM writer.
* Automatically start the RAM writer.
 
Starting the RAM writer, either automatically or through using wrong pocket TM33/TM17, will activate the following effects:
* Copy the necessary data to memory to activate the RAM writer.
* Deploy setup that will enable the use of TM33/TM17 during battle.
* Start the RAM writer.
 
After exiting the RAM writer, you can restart the RAM writer by using TM33 from the item pack. In battle, you can activate the RAM writer by using TM33/TM17 and selecting "QUIT". Please note that the setup to enable the use of TM33/TM17 during battle does not persist between resets, you can reenable this function by using the RAM writer outside of battle at least once.
 
As you can see in the screenshots below, the RAM writer will draw various values on the screen. The leftmost 4 columns describe the addresses that are currently in view. The rightmost two columns describe the values at each of these addresses. All values on screen are represented in hexadecimal format.
Line 1,441 ⟶ 1,402:
C9 ret ; due to earlier push, jump to CC20
</pre>
 
=Crystal=
 
 
1,540

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.