[Question]
  [
*Inspired by [this comment...](https://codegolf.stackexchange.com/questions/61115/make-your-language-unusable#comment147104_61115)*
*Thanks to users [Step Hen](https://codegolf.stackexchange.com/users/65836/step-hen), [Wheat-Wizard](https://codegolf.stackexchange.com/users/56656/wheat-wizard), and [Dennis](https://codegolf.stackexchange.com/users/12012/dennis) for helping my solidify the specification of this challenge before posting it!*
*This is the Robber's thread! For the Cops' thread, go [here](https://codegolf.stackexchange.com/q/133174/31716)*
---
In [this challenge](https://codegolf.stackexchange.com/q/61115/31716), you are tasked with running some code that makes it so that your language no longer satisfies our criteria of being a programming language. In that challenge, that means making it so that the language can no longer...
* Take numerical input and output
* Add two numbers together
* Test if a certain number is a prime or not.
This is a [cops-and-robbers](/questions/tagged/cops-and-robbers "show questions tagged 'cops-and-robbers'") challenge, where there are two different challenges with two different objectives: The *Cops* will try to write some code that makes the language *mostly* unusable, and the *robbers* will try to find the hidden workaround that allows the cops to recover their language.
The cops will write two snippets of code: 
1. One that makes their language mostly unusable, e.g. by removing built in functions for taking input/output and numerical operations. This code is **not** allowed to crash or exit. It should be possible to add code to the end of this snippet, and that code *will get evaluated*. And
2. A snippet of code that takes two numbers as input, adds them together, and outputs their sum. This snippet must still correctly function even after running the first snippet. When the two snippets are combined together, they must form a full program that adds two numbers, or define a function that adds two numbers. This snippet will probably rely upon obscure behavior, and be hard to find.
The cops will also choose any [standard method of input and output](https://codegolf.meta.stackexchange.com/questions/2447/default-for-code-golf-input-output-methods?answertab=votes#tab-top). However, they must reveal exactly which format (input and output) they are using. For you to crack their answer, you must follow the same input/output format, or your crack does not count.
A cops answer will always reveal
* The *first* snippet (obviously not the second).
* Language (including minor version, since most submissions will probably rely on strange edge-cases)
* IO format, including whether it's a function or full program. Robbers *must* use the same format to be a valid crack.
* Any strange edge cases required for their answer to work. For example, *only runs on linux*, or *requires an Internet connection*.
As a robber, you must look at one of the cops submissions, and attempt to crack it. You may crack it by writing *any* valid snippet that could work as snippet 2 (adding two numbers together after the language is made mostly unusable). This does *not* have to be the same snippet that the cop originally wrote. Once you have an answer cracked, post your code as an answer on this thread, and post a link to your answer as a comment on the cop's answer. Then, that post will be edited to indicate is has been cracked.
Here's an example. For the first snippet, you might see the following python 3 program as a cops answer:
> 
> # Python 3
> 
> 
> 
> ```
> print=None
> 
> ```
> 
> Takes input from STDIN and output to STDOUT
> 
> 
> 
A valid second snippet could be
```
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
```
This is valid because it will take two numbers as input, and output their sum even if you join the two snippets together, e.g.
```
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
```
This is a valid crack to their answer.
If a cop's answer remains uncracked for one whole week, they may edit in their second snippet, and indicate that their answer is now *safe*. Once it is edited to be safe, you may no longer attempt to crack it. If they do not edit it as safe, you may continue to try to crack it until they do.
The winner of the robber's thread is the user who has cracked the most answers, with the tie-breaker being the time they reached **N** cracks. (so if two different users each have 5 cracks for example, the user who posted their 5th crack first is the winner) After sufficient time has passed, I will accept the winner's answer with the most votes.
Have fun!
# Rule clarifications
* The first snippet must run correctly *without taking any input*. It may output whatever you like, and this output will be ignored. As long as after the snippet is done, the second snippet runs correctly.
* The second snippet *must actually be executed* for your answer to be valid. This means an answer like
```
import sys
sys.exit()
```
is not valid because it doesn't break the language. It simply quits.
* After being safe, your score is the byte count *of both snippets*.
* This goes back to *Please reveal any strange edge cases required for your answer to work*... Your submission must contain enough information *before* being revealed to be reproducible *after* being revealed. This means that if your answer becomes safe, and then you edit in: *Here's my answer. Oh ya, BTW this only works if you run it on Solaris, jokes on you!* your answer is invalid and will be deleted and not considered eligible for winning.
* The second snippet is allowed to crash after outputting the sum. As long as the output is still correct (for example, if you choose to output to STDERR, and then you get a bunch of crash information, this is invalid)
# Leaderboard
Here is a list of every user with at least one crack, ordered by score and then name (alphabetical). If you submit a crack, please update your score accordingly.
```
#User                       #Score
Ilmari Karonen              8
Dennis                      5
Olivier Grégoire            4
Sisyphus                    3
Veedrac                     3
Arnold Palmer               2
Bruce Forte                 2
DJMcMayhem                  2
Dom Hastings                2
ppperry                     2
1bluston                    1
2012rcampion                1
Ben                         1
BlackCap                    1
Christian Sievers           1
Cody Gray                   1
HyperNeutrino               1
Joshua                      1
Kaz                         1
Mark                        1
Mayube                      1
Xnor                        1
zbw                         1
```
  
[Answer]
## [C (GCC/Linux) by Sisyphus](https://codegolf.stackexchange.com/a/133324/39174)
This snippet closes the provided function and starts a new one (classic code injection), which itself redefines `close` so that instead of closing the fd, runs our desired code.
```
}
int close(int x) {
  int a, b;
  scanf("%d %d", &a, &b);
  printf("%d\n", a + b);
  exit(0);
```
[Answer]
# Python, Wheat Wizard's solution [here](https://codegolf.stackexchange.com/a/133198/68942)
```
import sys
c="".join(open(__file__).read().split('\n')[4:])
if set(c)-set(' &)(,.:[]a`cdfijmonrt~')or"import"in c:sys.setrecursionlimit(1)
f=lambda\
:[]                                                      # my code starts here
sys.setrecursionlimit(1000)
print(int(input())+int(input()))
```
I mean, you can just set the recursion limit back, and nothing bad happens...
[Works on TIO](https://tio.run/##dY1BCsIwFET3OUXJwuajhipaodCTtCXGNMFf2iQk6aIbr14rbty4GIaBxxu/pKez53XFybuQsrhEompK@eDQMue1ZUIYHLUQwIOWPQMe/YiJ5a3NoblUHRA0WdSJKTh@Ks92wA68ajp5V73BYXI2pFcOLtDvC0WbqWq74hsftJpDRGdHnDbtCYipRzk9etmSzUH@YEVRAPEBbWLf@DkxgP3vgHW9lqS8vQE)
# Note
This is my first ever CnR submission, so if this breaks any rules, please tell me and I'll delete this.
[Answer]
## Haskell by Ben
```
import Prelude(getLine,print)
a=a
[]++s=s
(a:as)++s=a:(as++s)
r""=""
r(c:s)=(r s)++[c]
t(_:r)=r
ts l=l:ts(t l)
x[_](v:_)=v
x(_:r)(_:s)=x r s
d(a:_:_:_:_:_:_:_:_:_:r)=a:d r
(a:_)!!""=a
l!!(n:m)=d(x['0'..n](ts l))!!m
a+b=[[0..]!!a..]!!b
a-b=let n=[0..]!!a;m=[0..]!!b in
    case [n..m] of
      [] ->   x[m..n][0..]
      l  -> -(x l    [0..])
add('-':x)('-':y)= -(r x+r y)
add('-':x)y=r y-r x
add x('-':y)=r x-r y
add x y=x+y
main=do a<-getLine;b<-getLine;print(add a b)
```
I still have literal numbers and chars (I use `0`, `'0'` and `'-'`), and `[a..]` and `[a..b]` which are very useful. And I have unary `-`, but I could do without.
I recreate `++` to implement `r` (`reverse`) and define `t` and `ts` which are `tail` and `tails`. `x a b` returns the `n`th element of `b`, where `n` is the length of `a` minus one. `x` could usually be defined as `snd.last.zip`. The function `d` takes a list and returns a list with the elements from those positions that are multiples of ten. `l!!s` returns the `n`th element of `l`, where `s` is the reversed string representation of `n`. `+` returns as integer the sum of two natural numbers given as reversed strings, likewise `-` for the difference. `add` returns as integer the sum of two possibly negative integers given as strings.
I wonder if this is somewhat similar to what Ben had in mind.
[Answer]
# [C (gcc) by Conor O'Brien](https://codegolf.stackexchange.com/a/133211/12012)
```
void post_main() __attribute__ ((destructor));
void post_main()
{
    int a, b;
    char sum[11];
    void *stdin = fdopen(0, "r");
    fscanf(stdin, "%u %u", &a, &b);
    sprintf(sum, "%u", a + b);
    write(1, sum, strlen(sum));
}
```
[Try it online!](https://tio.run/##ZVHLboMwEDzDV6xSJTItTUrbW9Rb/qKqkDFLQAKM/EgaRfl2ul4gOfQ0sw/PDoN6PSo1jk8lVk2PcBBVctJNCZUIkOzjgxhM07sqodGdDd6pCSzBEZ2qpXn0qwXRGG2Y6PDMoCxDpVptMZC5cTaZ45qU7IysrwfspgP28dwq2Qc1i67wgeAvqnbBYbYxGeIWzuRE2Mm21WppDHey7ATdi3V89m7zbBr2R3b6yTYmMUUB1pVNv2fayaYXyTXe7S7aG1C6RDhqtFCjwe12W2ON8S3mcAdtXT49gDyXzpmm8A7zHIQo0TrjlaPcKP1/@/E1jsI5mUKxj6PwmWB9951lP1Ty9jO7gi@oymBYvKWwMqsgFlWcneAF6q49rP0qhQ2pbQraiOz0iwVJ8pyGEl6AZ5yCyFLgIblsSZx48Hkbx@wdPj7/AA "C (gcc) – Try It Online")
[Answer]
# [Python 2 by Wheat Wizard](https://codegolf.stackexchange.com/a/133229/20260) (fourth iteration)
```
import sys
if set("".join(open(__file__).read().split('\n')[4:]))-set(' &)(,.:[]a`cdfijmonrt~'):sys.setrecursionlimit(1)
for m in sys.modules:sys.modules[m]=None
del sys;f=lambda\
c,d:(`int([]in[])`[:[]in[]]).join([((c)and`dict([((int([]in[])),(int([]in[])))])`[(int([]in[[]])):][(int([]in[[]]))].join([`dict([((int([]in[])),(int([]in[])))])`[(int([]in[]))],`dict([((int([]in[])),c)])`[(int([]in[[]])):][(int([]in[[]])):][(int([]in[[]])):][(int([]in[[]])):]])or`int([]in[])`[:[]in[]]).format((int([]in[]))),((d)and`dict([((int([]in[])),(int([]in[])))])`[(int([]in[[]])):][(int([]in[[]]))].join([`dict([((int([]in[])),(int([]in[])))])`[(int([]in[]))],`dict([((int([]in[])),d)])`[(int([]in[[]])):][(int([]in[[]])):][(int([]in[[]])):][(int([]in[[]])):]])or`int([]in[])`[:[]in[]]).format((int([]in[]))),`(int([]in[]))`]).rfind(`(int([]in[]))`)
```
[Try it online!](https://tio.run/##zVDLSgMxFN3PVwxdOLkwBhRXkf6CP5CGSUwyeEseQ5IuuvHXx4QKtkWhrnR3z@E8Lmc5lrcYHtcV/RJT6fMxdzj32Ray2dB9xEDiYgOZphmdnSagySpDgObFYSHDLgzAn5gAuG@eob8DMlLGhZLazLj3MaTyPgCrwbQqktWHlDEGh776H6CbY@p9j6FVUx/NwdnMzm7uxfYlBtsZ65rmed465V@N2nV6NIxIDIVwgYELkJydLgGn3zkhGlQw0qAuDZ2JYbxA0OxfTMsAJq4Z8Zn7@8BmHr@36du6b2MExPTTJnVrr8ple/2amP@/kfnbjeQFllWXZgyGXPGwrh8 "Python 2 – Try It Online")
No exploits, just a function to add using only characters `' &)(,.:[]a`cdfijmonrt~'`, as intended (actually only `'(),.:[]`acdfijmnort'`). 
I made no attempt to make it short; I just wrote subexpressions for intermediate values like 0 and the empty string and string-substituted those in.
```
def f(c,d):
	FALSE = []in[]
	TRUE = []in[[]]
	ZERO = int([]in[])
	ONE = int(TRUE)
	EMPTY = `int([]in[])`[:[]in[]]
	ZERO_STR = `ZERO`
	ONE_STR = `ONE`
	ZERO_DICT = dict([(ZERO,ZERO)])
	ZERO_DICT_STR = `ZERO_DICT`
	OPEN_BRACE = ZERO_DICT_STR[ZERO]
	COLON = ZERO_DICT_STR[ONE:][ONE]
	CLOSE_BRACE = ZERO_DICT_STR[ONE:][ONE:][ONE:][ONE:][ONE]
	C_STR = `c`
	D_STR = `d`
	FORMAT_STR_C = ''.join([OPEN_BRACE, ZERO_STR, COLON, C_STR, CLOSE_BRACE])
	FORMAT_STR_D = ''.join([OPEN_BRACE, ZERO_STR, COLON, D_STR, CLOSE_BRACE])
	LENGTH_C_STR = c and FORMAT_STR_C.format(ONE_STR) or EMPTY
	LENGTH_D_STR = d and FORMAT_STR_D.format(ONE_STR) or EMPTY
	TOTAL_STR = EMPTY.join([LENGTH_C_STR, LENGTH_D_STR, ZERO_STR])
	RESULT = TOTAL_STR.find(ZERO_STR)
	return RESULT
```
[Try it online!](https://tio.run/##jVLBToNAED3DV8ylYYmkBxMvTTwgbNWEsg3QgxICDRSliUuDePDrcYayFFubeBl2Hm/evNmdw3f7Xsvbrit2JZQstwpzoWtL2ws53EOcVDJOdC0KNmMaJwi88kAgUMmWHTmmrgmfDxDREeCrdfSCUDahZfHieBpE0jAKiELnrNdQCB4zfSC5z06EWFHlKMQIsiiY1HYkTKV6gMrFmvvpQ2A75O0XNaYMXTjCE/7FT@y@SCgSwxMhvyIy8i5jgu0dZSrH4VyVFORsKYKV3YukDoKGMd/XlWTxybEF6oYs6F3iZ8hOjugKJlLuv6Xcv6R0zeP@Y/SUKuM5bGUBU6/zsm4@ti0bnsqEuoH@pcdaNWdxXuter8UdE5HtDZU9NgwxNWTBtMVpKLqEgIcbj7ZkFJqXlSyY4tBwza79aiQcqR2agQoXFpqtfNuxO9p8wvZnmHZocIPBmH3CDWC4x2DAjFXW3iopmmb3Aw "Python 2 – Try It Online")
The core idea is that string format `'{0:5}'.format('1')` pads the number zero to a length of `5` like `'1 '`. By concatenation two such strings using `''.join`, the sum of their length is the sum of the input numbers. Then, we tack on a `0` to the end and call `.find()` to the final position, which is the sum.
The string `'{0:5}'` to format is produced by extracting the `{:}` characters from string reprs of dictionaries, created with `dict`. The string repr of each successive summand is placed where the 5 would be. I wanted to use a dict like `{0:5}` itself, but its repr includes a space that messed it up. 
Inputs of 0 mess up the process because the string sub has a minimum length of 1. We have those with an `and/or` to give the empty string in this case.
[Answer]
# [Haskell, by Laikoni](https://codegolf.stackexchange.com/a/133239/17061)
```
main=main--
 & ((+) <$> readLn <*> readLn >>= print)
i&o=o
```
[Answer]
# [x86 16-bit real-mode assembly, by Joshua](https://codegolf.stackexchange.com/a/133212/58518)
```
    int  0x3                  ; <---  this is the "robber" portion
    ; -- begin code to print numbers in real-mode asm using ROM BIOS video interrupts --
    add  dx, cx               ; add input values together
    mov  ax, dx               ; move result into AX
    push WORD 0xB800
    pop  ds                   ; DS == starting address of text-mode video buffer
    xor  cx, cx               ; digit counter
    xor  di, di               ; position counter
    mov  bx, 0xA              ; divisor
    test ax, ax               ; is number negative?
    jns  .GetDigits
    neg  ax                   ; convert negative number to positive
    mov  WORD ds:[di], 0x4F2D ; output leading negative sign, in white-on-red
    add  di, 2                ; increment position counter
.GetDigits:
    xor  dx, dx
    div  bx                   ; divide DX:AX by 10 (AX == quotient, DX == remainder)
    push dx                   ; push digit onto stack
    inc  cx                   ; increment digit counter
    test ax, ax
    jnz  .GetDigits           ; keep looping until we've got 'em all
.PrintDigits:
    pop  dx                   ; get digit off of stack
    dec  cx                   ; decrement digit counter
    mov  dh, 0x4F             ; high byte: color attribute (white-on-red)
    add  dl, 0x30             ; low  byte: convert to ASCII
    mov  WORD ds:[di], dx     ; output digit
    add  di, 2                ; increment position counter
    test cx, cx
    jnz  .PrintDigits         ; keep looping until we've printed 'em all
    cli
    hlt
```
[![screenshot of Debug dump of code, along with output in upper-left corner](https://i.stack.imgur.com/Nt0Tz.png)](https://i.stack.imgur.com/Nt0Tz.png)
**Explanation:**
The "breakage" introduced by Joshua's code is the setting of the trap flag (TF), which puts the CPU into single-step mode. This means that only a single instruction will be executed at a time, before the CPU stops (traps) with a type-1 interrupt. This is what allows debuggers to implement single-stepping of code—quite handy there, but a real PITA if you want to run the code outside the context of a debugger!
It is the following section of code that turns on the trap flag:
```
pushf               ; push the FLAGS register onto the top of the stack
mov bp, sp          ; load the pointer to the top of the stack into BP
or word [bp], 256   ; bitwise-OR the WORD at the top of the stack (the copy of FLAGS)
                    ;  with 0x100, which turns on bit 8 (TF)
popf                ; pop the modified flags back off the stack into FLAGS
```
The implementation of the trap flag means that we get a chance to execute exactly one instruction before the CPU traps—that is the one that comes immediately after the `POPF` here. So, we need to make this one count.
The trick is the `INT 3` instruction, which invokes interrupt number 3. There are two reasons why this works to "unbreak" the code:
1. The trap flag is cleared in interrupt handlers. This is just part of Intel's design, but it was presumably done for basic sanity reasons. Remember that the implementation of the trap flag is that a type-1 interrupt is invoked after execution of each instruction, so if TF *wasn't* cleared, `INT 1` would *itself* trigger an interrupt—it would be interrupts all the way down. Also, having interrupts clear TF just makes it easier to debug the code, much like an IDE that automatically steps over calls to library functions.
2. The way interrupts work is essentially the same as a far `CALL`. They invoke the interrupt handler whose address is stored at the corresponding position in the global interrupt vector table. Since this table begins at address `0x0000:0000`, and is stored in a 4-byte `segment:offset` format, calculating the address is as simple as multiplying 4 by the interrupt vector/number. In this case, we invoke interrupt 3, so that would be 4×3=12.
…and you'll notice that Joshua thoughtfully set this up for us. Prior to enabling the trap flag, he has the following code:
```
mov  di, 12
mov  [di], si
mov  [di + 2], bp
```
which sets `0x0000:000C` (the interrupt handler for `INT 3`) to `BP:SI`. That means whenever `INT 3` is invoked, it pushes the FLAGS register onto the stack, followed by the return address, and then branches to `BP:SI`, which allows us to start executing code again, in a context where the trap flag is turned off.
It's all downhill after `INT 3`. All we need to do is add two numbers together and print the result. Except that this isn't as simple in assembly language as it would be in other languages, so this is where the bulk of the code is spent.
[Joshua is allowing the robber to specify any I/O mechanism (s)he wants](https://codegolf.stackexchange.com/questions/133174/make-your-language-mostly-unusable-cops-thread?page=1&tab=votes#comment327233_133212), so I'm taking the simplistic approach of assuming that the values are passed in the `DX` and `CX` registers. That is reasonable, since these are not clobbered anywhere by his "prologue" code.
The output then is done by storing ASCII bytes directly into video memory. The video buffer starts at `0xB800:0000` on a text-mode CGA, EGA, and/or VGA, so we start printing there. The format is: character in the low byte, and color attribute in the high byte. That means each character is on a 2-byte offset. We just iterate through each of the digits in the number (base-10), converting them to ASCII and printing them one at a time to the screen. Yes, this is a *lot* of code. There are no library functions to help us in assembly language. This can almost certainly be optimized further, but I got tired of working on it...
After the output is displayed, the code is allowed to crash or do whatever, so we just clear interrupts and halt the CPU.
[Answer]
# [Haskell](https://codegolf.stahckexchange.com/a/133931/43037) by [zbw](https://codegolf.stackexchange.com/users/69259/zbw)
```
{-#OPTIONS_GHC -fth -w#-}
module M where
import Language.Haskell.TH.Syntax
import System.IO.Unsafe
a = $( runIO $ TupE[] <$
              do x <- readLn :: IO Integer
                 y <- readLn
                 print $ x + y )
```
Can't run code at run-time? Run it at compile time!
This was a lot of fun, I did not know template haskell before this challenge.
[Answer]
# [Python 2 by TwiNight](https://codegolf.stackexchange.com/a/133210/12012)
```
print input()+input() #
```
[Try it online!](https://tio.run/##LY7disMgFITv8xSWXCShu3LiT@IW@iSlBKvHKqRGYhbap08t9GoY@D5m0mvzS2T7Hh5pWTeSX/nH6@zncKvMeUkY22lyYcZp6uiK2rYdzWkOW9tdfvtrFRwxh3NTNzpa8hVp9prJoTUd9fi04Y654IXCQQBYO/CRc9sDGhAMuWEKODdOK4m9ZdLd0CkABqoHw6Wwo/krnBK8OZV7FJ@fdVJXaQ1xIyGm/9KP3yT1vgtWyfEN "Python 2 – Try It Online")
[Answer]
# [Python 3](https://docs.python.org/3/), [ppperry](https://codegolf.stackexchange.com/users/46076/ppperry)'s [2nd Challenge](https://codegolf.stackexchange.com/a/133602/69259)
Wow, this was fun! I enjoyed solving this.
Edit: OK, I fixed it. It seems like the classes were at a different index in the subclass list on TIO than on my computer, so I made it work for both, and added a TIO.
```
import sys
for mod in sys.modules.values():mod.__dict__.clear()
1+1
# My code begins here
str = "Hello!".__class__
int = (37).__class__
object = str.__base__
def find_subclass(superclass, name):
	for cls in superclass.__subclasses__():
		if cls.__name__ == name:
			return cls
_io_IOBase      = find_subclass(object, '_IOBase')        # <class '_io._IOBase'>
_io_RawIOBase   = find_subclass(_io_IOBase, '_RawIOBase') # <class '_io._RawIOBase'>
_ioFileIO       = find_subclass(_io_RawIOBase, 'FileIO')  # <class '_io.FileIO'>
stdout = _ioFileIO('stdout', mode='w', opener=lambda name,flags: 1) # FD for stdout is 1
stdin  = _ioFileIO('stdin',  mode='r', opener=lambda name,flags: 0) # FD for stdin is 0
nums = str(stdin.read(), encoding='utf-8').split()
stdout.write(str(int(nums[0]) + int(nums[1])).encode('utf-8') + b'\n')
stdout.flush()
```
[Try it online!](https://tio.run/##fZJPb5wwEMXP608xTQ4YhaJFUf9oVXKoqqg5VJFybSPLwLDrytjIhq7202/HhiXdbRSfzHszPz8x0x@GnTW3x6PqeusG8AfPWuugsw0oEz5zuo4aff5H6hE9Tzck5EI0qh6EyGuN0vGUFTcFY9fw4wC1bRAq3CrjYYcOmR8clHD1HbW2766otdbSeyGYMgMZ/PZT@o9oq99YB53aSK6kR1JZgy20yjTCj1Us5X7s0cVrBkZ2mG7YKkSvtY/RF5sopyakF3goXKk2FJIVWoWAsoyQYK0cDqMzwWdMKCseHr9SCoinvEgxxc0gmauSFOZzDV9iCVnK5if7LhKf5H6BXhJfXgzUpZLAF8QXK0LvlcaHR3g95tmjxJ2KQ9hz6Kzf0dAaO4YxLGSeTFqShe3AMtnTzfZo0JVadlUj4x/MWi23fgNFyHv/DcJIZpjyUAQwTec/sDJEm8HuTfD6HEww4q6ZGTs/bQ2Pau5QNjzNAA1tpDLbMhmH9v3nJM19r9VAOzvFyvdODchDIy0kD5yf6@cUbmD5LJ7TNI8c5CcK@VXyyyQLptWj3xH1ePwAH@Ev "Python 3 – Try It Online")
[Answer]
# [Java 8 by Olivier Grégoire](https://codegolf.stackexchange.com/a/133579)
```
class A {
  public A() {
    String[] args = System.lineSeparator().split(",");
    System.out.print(Integer.parseInt(args[0]) + Integer.parseInt(args[1]));
  }
}
```
[Try it online!](https://tio.run/##lVZhb9s2EP2eX3H2l8iYq64Dhg01is1YW9RFkw5LgaEo8oGmzhZjiRRIyq6W@q8ve5RkWXacpZFhhBZ57@7evTvmRqzFM1OwvklWdyovjPV0g3exMvFblfGfbHPlnDJ6ctbfzoRexn9kwrkJ9Z/nz@nSkLeV0kuynPBC6bCsj8YPQHwwImE72UMYS72N@1ZX3gJ0cuQYVs3GCYPKec6PDaY6ocToc08@VXpFM1oYuzSemuODEzgsS6t89ear5MIHVgLOZ1PSpsbJlU7GtFFZRpUpf7sP8Fepvcp5chjI@9L54JuWxiSUs3Cl5RNsfUqt2Yh51rOH9ew8oVR4Jm/qBNiT0Ufmmn18ZeSK/UMVdW1qcf@ADFWo9@l2S6cfRHAT4ncm5NwSmjPs8orMRlPjxRH4lcLyosyyigprPEvPCeLUnu1CSKYLoTTdPuAEunJeeCVpniGTmi84HJzRdzyh2pkzY3ofcvkVBGXVd1t@5mJMn2YfaWEV6ySrYNiGsjYKBUPYUSO9L9ckRpAT6uSoKxfd1q4EvSLNm1alX368ntxzVSsBJEjhuLZBK7XWRDv1XQgtlmzJ5TvAw41o1JkQ/f5xzdaqhKko59kuZJmyXO0rHe2XVGDZB6A2XtLwFjZjKOxS5ByNJr1DakER/ugYzKDafyufRkPHfjg6yWnK1Rg8CX9e62SnvjFp9B/Kat1xeb59OwK3LJIT6ABvNBj2UadysXgMaflgmGthlSldPSCWih1qI7MyCXTAiPU6vo8dOMI5ONCSzYIO5@geW6NdseUeRzju3FFokgYBjb0xdnWAUcvvQBjdvIqGl5j2g@FB6bZn91f/JxsLCOurqZTo8lb4tOLqUDWPRBEmQA3TNTKCCkm9C8qYna8xz1JTLlNPYm5KdAXGtDEDejl6WrhvvrLcBSnz5AlBXpSpCJ8BZk/cp2znd7t71VwYsdKxzIwLndFOLKWL0reH0Mq3vWsttFFj13sZjeIMi/pNNJzC6VYKL9NoP0t41I3iMPwpnK87huppPaY5yJq1PYDb1yuRqX8Y/A0Oo0VzHg8Ol3dZPjlS3DGbWavZ3WjYUh09RfWxS@PfmlInHcXIpasGcnltQveHTmuSaFKQVrg0PoTrs9EhNLXk1vNZ@G7PmusZ3BhoI2XLg/DqHe6cl0DmcG2Khjia4uL2KX62EpIG2dhSemNj1BI6RMC6zMM/Glh211Z8t7MPkbTG024I7y8Gu3QYoS37mdJ8xYWwAvgg0xWZ8tFwvNNZewzKjwsA@GgGf6hRDBPH@BEFPFwiI/qBTu@9uB7VYODh7u5fU1Pu7p69Dq5R/db3qxe/jH/6@T8 "Java (OpenJDK 8) – Try It Online")
Since Olivier [explicitly allowed](https://codegolf.stackexchange.com/questions/133174/make-your-language-mostly-unusable-cops-thread/133579?noredirect=1#comment328421_133579) passing input via properties set using VM arguments, I'll specify that the input should be given in the VM argument `-Dline.separator=X,Y`, where `X` and `Y` are the numbers to be added. That is, to e.g. add the numbers 17 and 25, the program should be invoked as:
```
java -Dline.separator=17,25 Main
```
I believe this should work on any system than can run Java programs on the command line. Even on systems that don't have a command line, any other equivalent mechanism for setting system properties could be used to pass the input to the VM.
---
Ps. Here's my earlier cracking attempt, which was deemed invalid due to using JVM-specific features:
```
class SecurityManager extends sun.awt.AWTSecurityManager {
  static {
    String[] args = System.getProperty("sun.java.command").split(" ");
    int a = Integer.parseInt(args[args.length-2]);
    int b = Integer.parseInt(args[args.length-1]);
    System.out.println(a+b);
  }
}
```
[Try it online!](https://tio.run/##lVZbb9s2FH7Przj2S2TUZXd7GGoMm7G1qIslHdYARRHkgaaOJcYUKZCUHc31b3cPdbN8yZLIsE2TPN/5zt33fMVfmxz1fbzcySw31sM97TFp2Hup8B@0mXROGj256B8rrhP2p@LOTaD/vHkD1wa8LaVOwGKMC6nDsrrKHoH42/AY7WQPYSz0Dk6lPntLoJMjxSRVH5wRKJ3H7FhgqmOIjb704FOplzCDhbGJ8VBfH5zBQVFY6ct3DwJzH7wScL6aAtYVTiZ1PIa1VApKU/x@CvBvob3McHJI5GPhfNANiTExZMhdYfGMt25Sa9Z8rnryJD27jCHlHsGbygD0YPSRuEbPPhuxRP9YRF1jGutfECEK1TlstnD@IQb3gb8zwebGoRmSXFaCWWuotTgg/wpucVEoVUJujUfhMSae2qNdcIFwxaWGzSNKKK@c514KmCuypPIXKRxcwDOeEG3lzBg@Blt@JQep8tmSXzEfw83sEyysRB2rkgQbKisjKWBEO6pT7/YO@IjSieLkoAsXbCpVHH4DjesmS29/uJucqKoygZwguMNKhkqpkQZos@@Ka56gBZe1gIcH0agTAfjj0wqtlTFCXsxVS1mkKJb7SEf7JeS07ANAwxc0aQuHjDLsmmcYjSa9S3IBEX1pRp6haH@RPo2GDv1wdNanKZZj8hP3l1WetNk3Bk31R2G17jg8374dgVvk8Rl0Aq9zMJxTnIrF4imk5FGaK26lKVzVIBKJjmIjVBEHd5AQ6hU7xQ4@onukQAs0Czjso3tsTeVKR@5phOPKHYUiqRGosNfGLg8wqvQ7SIyuX0XDa@r2g@FB6LYXp6v/SxtLENaXUyGoypvEhyWWh1nzBIvQASqYrpCJVDDqQ8iM2eWK@llqiiT1wOemoKqgNm3MAN6OXkb33QOKlqTI4heQvCpSHl4D6j2s77JW77bdqgcGk5oJZVyojKZjSZ0XvrlEpbzpjbVQRrVcbzMaMUWLaicaTknpVnAv0mjfS3DUteLQ/CHcryoGqm49hjk5a9bUAE1fL7mS/yH5b3DIlorzuHG4rLPyxUxpxqxnTc62rWELFXuIqmvXxr83hY47F5MtXTTIlr9MqP5QabURtQnCcpeyQ7i@NzqEOpbYaL4I7@1FPZ7JN4ZyI0WLg7D1gWbOW0LGMDZ57TiY0uD2Kf1sUkgYssYWwhvLKJaUh0RYF1n4o0HLbmyxXS1/3J7xgRpE7MAVmvG1Z9MvN8dXNvtJUluxnyI2cdRvm1BRANqqo6ZKeNXIFibLuKYeyFyupI@G0CYpcaumzYw4kh6Wc@uQfkQB9jZ8MIU68enrn@56IvNnifzYijTkqDhZTrS90hF/Na8OyfW73e7n3S/fAQ "Java (OpenJDK 8) – Try It Online")
This turned out a lot less verbose than [the previous one](https://codegolf.stackexchange.com/a/133568). The hard part was finding a subclass of `SecurityManager` that didn't live in a namespace beginning with "`java.`". I suspect this is still not the intended solution, but it works.\*
\*) On TIO, at least; the `sun.awt.AWTSecurityManager` class and the `sun.java.command` property don't seem to be officially documented, and may not be available on all JVMs.
[Answer]
# [Jelly by hyper neutrino](https://codegolf.stackexchange.com/a/133203/31716)
```
+
```
Super simple. The Newline causes the first link to not be called.
[Try it online!](https://tio.run/##y0rNyan8//9Rw5y0/CKFZIXMPIXk/JTU@ILE9FQrLoXMNIhYYkl@brEVmIxOjtVLTszJsfXLz0t91DD36KSwwzu4tP///2/83xQA "Jelly – Try It Online")
[Answer]
# [Python 2 by Wheat Wizard](https://codegolf.stackexchange.com/a/133220/48931)
```
import sys
c="".join(open(__file__).read().split('\n')[4:])
if set(c)-set(' &)(,.:[]a`cdfijmonrt~')or"import"in c:sys.setrecursionlimit(1)
sys.modules['sys'],sys.modules['os']=None,None;del sys;f=lambda\
a,b:a+b
__import__('sysconfig').__dict__['os'].__dict__['sys'].setrecursionlimit(1000)
print(f(1,2))
```
[Try it online!](https://tio.run/##bY47bsMwEER7nkJQEXIRhZCNVDJ0hVxAFhiKn2QNfgSSLtzk6goVNQmQZhczu5g366N8xnDeNvRrTKXJj0zU2Lb8FjGwuJrAhLDojBDAk5GaAc@rw8LoNVCYXocZCNomm8IUvOyLNk/AOj5Ms3xX2uLNx5DKF4WY2oPSYmjUUFG8/iej7iljDA59jT0B2Q8@6rszeaJV0Ln7Y8XqjG8xmG4fF23cXvtiRyf9ouWVyG4Z5PNChDh4QrA9R8Vg8YMCF0Kjqu4R9Uv@wP4r1fc9kDVhKMyyU3cG2LZv "Python 2 – Try It Online")
[Answer]
# [Java by LordFarquaad](https://codegolf.stackexchange.com/a/133355/16236)
Blocking the access to the objects at the source level was really smart (and annoying when testing), well done!
```
public class java {
  public static void main(String[] s) {
    //there is no executable code in snippet one.
    //your code here.
    try {
      ClassLoader cl = ClassLoader.getSystemClassLoader();
      Object in = cl.loadClass("java.lang.System").getDeclaredField("in").get(null);
      Object out = cl.loadClass("java.lang.System").getDeclaredField("out").get(null);
      Object scanner = cl.loadClass("java.util.Scanner").getConstructor(cl.loadClass("java.io.InputStream")).newInstance(in);
      int i = (Integer)cl.loadClass("java.util.Scanner").getMethod("nextInt").invoke(scanner);
      int j = (Integer)cl.loadClass("java.util.Scanner").getMethod("nextInt").invoke(scanner);
      cl.loadClass("java.io.PrintStream").getMethod("println", Object.class).invoke(out, i+j);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  class Class {}
  class Method {}
  class System {}
  class FileDescriptor {}
  class Logger {}
  class Runtime {}
  class Scanner {}
}
```
[Answer]
# [Ruby by histocrat](https://codegolf.stackexchange.com/a/133456/12012)
```
BEGIN{exit(gets.to_i + gets.to_i)}
```
[Try it online!](https://tio.run/##KypNqvz/39XPpTq1IrNEwaCWy8nV3dMPzNNITy0p1ivJj89U0FaAszVr//835jIBAA "Ruby – Try It Online")
[Answer]
# [JavaScript by Daniel Franklin](https://codegolf.stackexchange.com/a/133452)
```
location="data:text/html;base64,PHNjcmlwdD5jb25zb2xlLmxvZygxKnByb21wdCgpKzEqcHJvbXB0KCkpPC9zY3JpcHQ+"
```
This might be considered a slightly cheaty solution, but it does work for me on Chromium 59 / Linux, even if I do also receive a warning saying:
> 
> Upcoming versions will block content-initiated top frame navigations to data: URLs. For more information, see [https://­goo.gl/BaZAea](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/GbVcuwg_QjM).
> 
> 
> 
Ps. Here's another crack, this time without warnings:
```
Node.prototype.removeChild=function(){}
document.body.innerHTML='<iframe src="data:text/html;base64,PHNjcmlwdD5jb25zb2xlLmxvZygxKnByb21wdCgpKzEqcHJvbXB0KCkpPC9zY3JpcHQ+"/>'
```
[Answer]
# [Inform 7, by Ilmari Karonen](https://codegolf.stackexchange.com/questions/133174/make-your-language-mostly-unusable-cops-thread/133686#133686)
Blantant abuse of ambiguous nouns ...
My code begins with `factory is a room`. The previous line is the cop's code. Type `add 1 and 1` to get 2, for example.
```
For reading a command: Rule fails
factory is a room.
The adder one is a thing. The adder two is a thing. The adder one is in factory. The adder two is in factory.
Before reading a command: change the text of the player's command to "examine adder"
For printing a parser error: 
    if the player's command includes "add [number] ":
        let N be the number understood;
        if the player's command includes "and [number]":
            say the number understood plus N;
```
[Answer]
# [Java, Roman Gräf](https://codegolf.stackexchange.com/a/133265/64109)
```
public class Main {
    public static void main(String... args){
        System.setOut(null);
        System.setErr(null);
        System.setOut(new java.io.PrintStream(new java.io.FileOutputStream(java.io.FileDescriptor.out)));
        System.setErr(new java.io.PrintStream(new java.io.FileOutputStream(java.io.FileDescriptor.err)));
        System.out.println("This");
        System.err.println("works");
    }
}
```
Sets `stdout` and `stderr` back to their initial values.
I believe I am able to use the fully qualified name instead of an import, if I am wrong please correct me (this is my first post here.) This could probably be done using reflection as well.
Edit: here's a reflective solution using only `java.lang.reflect.*`:
```
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class Test {
    public static void main(String... args) {
        System.setOut(null);
        System.setErr(null);
        try {
            Class<?> psClass = Class.forName("java.io.PrintStream");
            Class<?> fsClass = Class.forName("java.io.FileOutputStream");
            Class<?> osClass = Class.forName("java.io.OutputStream");
            Class<?> fdClass = Class.forName("java.io.FileDescriptor");
            Class<System> sClass = System.class;
            Constructor psCtor = psClass.getConstructor(osClass);
            Constructor fsCtor = fsClass.getConstructor(fdClass);
            Field modifiersField = Field.class.getDeclaredField("modifiers");
            modifiersField.setAccessible(true);
            Object sout = psCtor.newInstance(fsCtor.newInstance(fdClass.getDeclaredField("out").get(null)));
            Field outField = sClass.getDeclaredField("out");
            modifiersField.setInt(outField, outField.getModifiers() & ~Modifier.FINAL);
            outField.set(null, sout);
            Object serr = psCtor.newInstance(fsCtor.newInstance(fdClass.getDeclaredField("err").get(null)));
            Field errField = sClass.getDeclaredField("err");
            modifiersField.setInt(errField, outField.getModifiers() & ~Modifier.FINAL);
            errField.set(null, serr);
            System.out.println("This");
            System.err.println("works");
        } catch (Exception ignore) {
        }
    }
}
```
[Answer]
# [cQuents](https://github.com/stestoltz/cQuents), [Step Hen](https://codegolf.stackexchange.com/a/133207/44998), 3 bytes
```
+BC
```
[Try it online!](https://tio.run/##Sy4sTc0rKf7/X7nGUMfQylHbyfn/fxNzBVNjAA "cQuents – Try It Online")
Took a lot of talking to Step Hen to figure out how the hell his weird language works, but in short:
His code was `#|1,1:A`. `#|1,1` is the default input, meaning any input given to the program is appended by 2 1's. (IE if you pass a 47 and a 53, your input is `[47, 53, 1, 1]`.
`:` simply sets the mode, which will output the `n`th item in the sequence if `n` is set, and otherwise output the entire sequence.
Finally `A` gets the first input.
Because we have 4 inputs `[47, 53, 1, 1]`, adding `BC` to the end would also fetch the 2nd and 3rd input, and the 4th input implicitly becomes `n`.
Because our sequence is `ABC`, it's parsed algebraically, meaning it becomes `A*B*C`. We don't want that, but if we insert a `+` between A and B, it becomes `A+B*C`, where `A` and `B` are our inputs, and `C` is 1.
[Answer]
# [RProgN2 by @ATaco](https://codegolf.stackexchange.com/a/133230/72137)
```
"+-/*÷^"{²[[\=};
{"D"=11{‹1D&¬\D›]"D"=}:]1\2\Š1{[\D‹|"D"=};D¬{1"D"=1\2\Š1{[D‹"D"=};}{[}?D}"~"={"d"="g"=g~d&gd~&|}"±"={"H"="I"=11{‹H1&I1&±\H›"H"=I›"I"=H¬¬I¬¬|}:1\2\Š1{[H‹|"H"=};H}"×"={"J"="K"=1{JK&‹JK×"K"=]"J"=}:JK|}"+"=
```
[Try it online!](https://tio.run/##PY4xDoJAEEV7T2Gm2EJCzGIH2dhsscARWKxI6NTQLkO8ha0HoNHGYLnEi3gRnMFgs5N9L/P/NOfmVB/DaJogCLeb8XkA5x9FYRUmKwcalJTucxmkFr63@nN5lQwxLqWN7PsmXcF0aGeaaN87OW8tluXPoStwrxE6UA4qUFCDqrtK1FUnWgR/Z26Ip0upkSKVwt@toV5WKU/Sxve@T/lpMf5XmfkOw10GYbxyXkZ5OeW5LBeks5ww/UsWGGc5FQegpmi9WwfTFw "RProgN 2 – Try It Online")
This is by far not the best answer I could've given, but it allows adding numbers together again. Had I actually went through and did proper stack handling, I could probably golf this quite a bit, but as of now I'm happy with the answer.
In ATaco's original post he effectively just reassigned all of the main arithmetic operators to destroy their inputs. To fix this problem I redefined what addition was in terms of its binary operations, which was a pain because [RProgN2](https://github.com/TehFlaminTaco/RProgN-2) doesn't have a binary negation operator or xor.
Note: If you want to test the input, numbers with more than one digit need to be in the form `"XX..." n` to be converted into an actual number since RProgN2 takes each character as is unless it's a concept or string. Edit: @ATaco noted that adding a '$' before a multidigit number will do the same thing.
EDIT: Here is the logic for my solution. As you can see, most definitely not the most refined code, but it works.
```
{"D"=11{‹1D&¬\D›]"D"=}:]1\2\Š1{[\D‹|"D"=};D¬{1"D"=1\2\Š1{[D‹"D"=};}{[}?D}"~"= # Defines the ~ operator which negates a number
{"D"=                                                                   }     # Remove the top of the stack and assign D with the popped value
     11                                                                       # Push 2 1's to the stack.  The first is used as a counter, the second if the initial truthy value for the loop
       {             }:                                                       # Start a while loop if the top of the stack (popped) is truthy (removes final falsey value)
        ‹                                                                     # Left shift the counter variable
         1D&¬                                                                 # Push negation of last bit of D
             \                                                                # Swap the counter (index 1) and the negated bit (index 0)
              D›]"D"=                                                         # Push D, right shift it, duplicate the value on the stack, then pop and assign the top to D
                       ]1\                                                    # Duplicate the counter, push 1, and swap the counter to the top of the stack
                          2\Š                                                 # Push 2, swap with the counter, then take the log (log_2(counter))
                             1{         };                                    # Run the for loop "for (i=1;i<=log_2(counter);i+=1)"
                               [\                                             # Pop off i, then swap the original counter with the next bit to append
                                 D‹|"D"=                                      # Left shift D, or it with the next bit, then assign D the new value
                                          D¬                                  # Need to check if D was 0 or not (in the case of 0b11...1~)
                                            {                     }{ }?       # Conditional on the truthiness of not D
                                             1"D"=                            # If D was 0, we assign it as 1, then start to bit shift it up
                                                  1\2\Š1{       };            # Same for loop as earlier since the original counter is still on the top of the stack
                                                         [D‹"D"=              # Pop off i, left shift D, then reassign it
                                                                    [         # Else D was non-zero, so just pop off the counter we've been carrying around
                                                                       D      # Push the final value to the top of the stack as a return
                                                                         "~"= # Assign the function between the {}'s to the character '~'
{"d"="g"=g~d&gd~&|}"±"=                                                       # Defines the ± operator which performs a single bit xor
{"d"="g"=         }                                                           # Assign d and g the first and second values on the stack respectively
         g~d&                                                                 # Push ~g&d to the top of the stack
             gd~&                                                             # Push g&~d to the top of the stack
                 |                                                            # Or the top 2 values giving us (~g&d)|(g&~d)
                   "±"=                                                       # Assign this function to the ± operator
{"H"="I"=11{‹H1&I1&±\H›"H"=I›"I"=H¬¬I¬¬|}:1\2\Š1{[H‹|"H"=};H}"×"=             # Defines the × operator which performs a full number xor
{"H"="I"=                                                   }                 # Store the top 2 stack values in H and I (in that order)
         11{                            }:                                    # Another while loop with the first one being a counter for later, and the second is our truthy value to start the loop
            ‹H1&I1&±                                                          # Left shift the counter, then push the bit xor of H's and I's lowest bit ((H&1)±(I&1) in infix notation)
                    \                                                         # Swap the calculated bit and the counter
                     H›"H"=I›"I"=                                             # Right shift both variables and store the values back in them
                                 H¬¬I¬¬|                                      # Effectively pushing the value (H!=0 | I != 0)
                                          1\2\Š1{        };                   # Same for loop as the ones above
                                                 [H‹|"H"=                     # Pop off the for loop counter, left shift H, or it with the next bit, and reassign
                                                           H                  # Push the final computed xor value to the top of the stack
                                                             "×"=             # Assign this whole function to the × operator
{"J"="K"=1{JK&‹JK×"K"=]"J"=}:JK|}"+"=                                         # Finally, a function redefining addition as the "+" operator
{"J"="K"=                       }                                             # Store the top 2 stack values in J and K respectively
         1{                }:                                                 # An initial truthy value to start the while loop and the loop itself
           JK&‹                                                               # Push (J&K)<<1 to the stack
               JK×                                                            # Compute the full xor of J and K (J^K in Python)
                  "K"=                                                        # Assign K the value of J xor K
                      ]"J"=                                                   # Duplicate (J&K)<<1 and assign 1 copy to J, leaving (J&K)<<1 as our while check (while ((J&K)<<1))
                             JK|                                              # Finally push the value J|K to the stack to get the addition
                                 "+"=                                         # Assign this function to the "+" operator, restoring it
```
[Answer]
# [Java 8 by Olivier Grégoire](https://codegolf.stackexchange.com/a/133535)
A hugely verbose crack for a hugely verbose challenge. :) The pain of working indirectly with classes that you cannot name is palpable.
```
    try {
      Class loader = Class.class.getMethod("getClassLoader").getReturnType();
      Object sysLoader = loader.getMethod("getSystemClassLoader").invoke(null);
      Class integer = (Class) loader.getMethod("loadClass", String.class).invoke(sysLoader, "java.lang.Integer");
      Class system  = (Class) loader.getMethod("loadClass", String.class).invoke(sysLoader, "java.lang.System");
      Class filein  = (Class) loader.getMethod("loadClass", String.class).invoke(sysLoader, "java.io.FileInputStream");
      InputStream cmd = (InputStream) filein.getConstructor(String.class).newInstance("/proc/self/cmdline");
      byte[] buf = new byte[65536];
      int len = cmd.read(buf);
      String[] args = new String(buf, 0, len).split("\0");
      
      int a = (int) integer.getMethod("parseInt", String.class).invoke(null, args[args.length-2]);
      int b = (int) integer.getMethod("parseInt", String.class).invoke(null, args[args.length-1]);
      Object out = system.getField("out").get(null);
      out.getClass().getMethod("println", String.class).invoke(out, ""+(a+b));
    } catch (Exception e) {
      throw new Error(e);
    }
  }
}
class ClassLoader {
  public static ClassLoader getSystemClassLoader() { return new ClassLoader(); }
  public ClassLoader loadClass(String s) { return this; }
  public ClassLoader getDeclaredField(String s) { return this; }
  public ClassLoader getMethod(String s) { return this; }
  public ClassLoader getMethod(String s, Class c) { return this; }
  public InputStream get (Object o) { return new FakeInputStream(); }
  public void invoke(Object o, SecurityManager sm) {}
}
class FakeInputStream extends InputStream {
  public int read() {
    return -1;
```
[Try it online!](https://tio.run/##tVfdUxs3EH/nr1juhbuJOUjTZDplmDYlIaUTIFOY9oHyIMtrn/BZ8kg6kxvC3@6udDqf7vhIp238gC1p97cf@u2uuGErtquWKG8m87VYLJW2cEN7uVD5sSjxE@qFMEYoebA1OD6Ry8peWI1s0T@TaPMLxedon9I2yCstbJ3HArxkxsAvSpXIJNzdtxu1xW51VDDNuEXdbb1T1biMRN7LatGtjkvFbLc8kRZnsfZHJWfd6pTZoludVYtxLPuJ8TmbRaYuChdSt7RacNvHuKiNRecP7O0BneMErAKNE5wKieH4J/igFB3oOg9qlwXlddLB/KFEtHJJDJATBWfnl8BJnPLEvA8UUSNnC4pdGJAqJL5kcpYHkVRp0h7BuLJQqwpuldyxMCYQl07vZGXwgV62JSiHeso4UroE3ZRz40yBscwKDuOSrh6mBE6g2/C2NGTjN@fwD6BkWW9vQSt65Jz8qNiEknwEh/E6n6FtchNtptlBp7xyGVmQA2nj19U1sIwi1urWp0/d@jjuSAMoL4cg8TZk52r/@sBvXwQenjLJHCvMopXrH6RZwAH4@XyFWosJwpJo1/rBC@Tzjsxp9xOW9LNTh/aCJFlyRy7QM7bAJrbmI6aQ0pfMKVRtzZ/CFmli0CYZPPhQ7gusR/6qdwwsamiLa@SvnS5Bm@2tWOXLlwG0o9oj2J5djhOeisZW0@nzOLMnXVwxLVTlCEmxCzQgJC@riUsEKaFc5UNklxuSInjJUU2h34w6ZKlgSkfma/rDhkRX0upTv7pVeh4heBb1iPD@M8eldVebnFG73E6i67rf6n8/RxFNytrWbzlHYwJzYY51zJCvWIdlANkUGTnjQvnV8eBkZ0XFW6hqVliqZEXFLSxVs9qGH7Oeo/dNBOfjG@Qk5Ah5lFO3nPiKS5Oo8H0hJpnj6juk1kLt61hgOUkTIZvtVFZlGXISDYbc9yEncIrkFCnwUhkkHSFXao6pkI3vFJZwag1T/4EfLR6VxaBYk9GwfBsvNjadqyOq9eCusgXqAOe37gdNpidwt/ZXpOvNhXk3oWzaWGhiD@Omn1Ena2L4HW2l5WW9jKo/XIep28Z4GKAHYA@aY9KLb4PXeCfC2DuE1G9kj4BuUu4S6Ik5yNvGpxFElxImajKwaJq59y0stjToG3RdgEj8PxsMz6CI0s5uMBztAl9MnOloKwsuOQeOFHUiXXGrdNo3TGV@ErpUmuxRafM9g@V0j/BKeiB0UY7pHUQzblxNw4zyG29ev3715rqVoWuGEl0lk3ru2nZK8huIblDqmelNRCc2gv2R085ysyyFTZO/9jvrkQE3S6lubdayKs7wkmlD2bJPJbipPWf/yv3Jyd7MFrvfXWdxDONvYOLldXdxochcczwMTHUWQk@j7YdNDZx03lZx2utBS/LClvIph0iR6JS8SNmLcRbg7oEzywtIN60dsJsB3QR4rzVRBlst3502b@Ho@eQ0w7R55HH1@GOKJqD2Hchb6r@zvKkAGCN1fTnMLhPB0HQ3T2o@mB3/AiAk/L9rjkLT4M9BxOVNEJC2tBlk7pjN4wYxyJ4fIYEJLcDokZdn5p73m/9a@pCAn@mRNDE9l6IrdzXjq72lUPBu9@XB2jNmvX61/v5v "Java (OpenJDK 8) – Try It Online")
Ps. Here's my earlier attempt, written before Olivier clarified that input was meant to be taken via command line arguments. Unlike the crack above, this one isn't Linux-specific.
```
    try {
      Class loader = Class.class.getMethod("getClassLoader").getReturnType();
      Object sysLoader = loader.getMethod("getSystemClassLoader").invoke(null);
      Class integer = (Class) loader.getMethod("loadClass", String.class).invoke(sysLoader, "java.lang.Integer");
      Class system  = (Class) loader.getMethod("loadClass", String.class).invoke(sysLoader, "java.lang.System");
      Class scanner = (Class) loader.getMethod("loadClass", String.class).invoke(sysLoader, "java.util.Scanner");
      InputStream in = (InputStream) system.getField("in").get(null);
      Object scanIn = scanner.getConstructor(InputStream.class).newInstance(in);
      int a = (int) scanner.getMethod("nextInt").invoke(scanIn);
      int b = (int) scanner.getMethod("nextInt").invoke(scanIn);
      Object out = system.getField("out").get(null);
      out.getClass().getMethod("println", String.class).invoke(out, ""+(a+b));
    } catch (Exception e) {
      throw new Error(e);
    }
  }
}
class ClassLoader {
  public static ClassLoader getSystemClassLoader() { return new ClassLoader(); }
  public ClassLoader loadClass(String s) { return this; }
  public ClassLoader getDeclaredField(String s) { return this; }
  public ClassLoader getMethod(String s) { return this; }
  public ClassLoader getMethod(String s, Class c) { return this; }
  public InputStream get (Object o) { return new FakeInputStream(); }
  public void invoke(Object o, SecurityManager sm) {}
}
class FakeInputStream extends InputStream {
  public int read() {
    return -1;
```
[Try it online!](https://tio.run/##tVffb9s2EH73X3HxSyTUVTdsD0ODYOvSZMvQJEUdbA9FH2j6bDGWSYOk7App/vbsSFESJTvp0G1@sUnefXf33Q/Sd2zLXqoNyrv56lGsN0pbuKO9TKjsQhT4HvVaGCOUPBkNji/lprRTq5Gt@2cSbTZVfIX2KW2DvNTCVlkswAtmDPyqVIFMwv1Ds1FZ7FZnOdOMW9Td1ltVzopI5FyW6251UShmu@WltLiMtd8puexWV8zm3eq6XM9i2feMr9gyMjXNXUjd0mrBbR9jWhmLzh949QroHOdgFWic40JIDMc/w29K0YGusqB2mxOv8w7mTyWilSMxQM4VXN/cAidx4ol5HyiiWs7mFLswIFUgvmBymQWRRGnSnsCstFCpEnZKHluYEYij0ztZGtzTS0eCONQLxpHoEpQp58a1AmOZFRxmBaUeFgROoEfwpjBk4w/n8E@gZFEdjaARPXNOvlNsTiSfwWm8zpZoa26izSQ96ZS3jpE1OZDUfn38BCyliLXaefrUzsdxTxpAvJyCxF1g5@N3n0789jTU4RWTzFWFWTdy/YMkDTgAv9xsUWsxR9hQ2TV@8Bz5qivmpPsJG/rZqUOTIEmW3JEL9JqtsY6t/ogFJPQlMwpVW/OXsHkyNmjHKex9iPscq4lP9bGBdQVNc0182ikJ2hyNYpUvXwbQrtQOYPvqcjXhS9HYcrF4Hmf5pItbpoUqXUFS7AINCMmLcu6IICWU22yI7LghKYKXHNUC@sOoQ5YKFnRkvqY/HEiUkkaf5tVO6VWE4KuoVwjnnzlurEvt@JrG5dE4StfDqP/9XIloUta2esM5GhMqF1ZYxRXyFeuwCSBtk5EzLpTfXR1cHm@peXNVLnNLnayouYWlblZH8DrtOfpQR3Azu0NOQq4gzzKalnPfcck4anzfiOPU1epbpNFC4@tCYDFPxkLW24ksiyJwEl0MmZ9DTuAKySlS4IUySDpCbtUKEyFr3yks4dTqSv0HfjR41BaDZh1Phu1be9HadK5OqNeDu8rmqAOc33oYDJmewP2jT5Gu2oR5N6Gox1gYYvtx089oktUxfEBbanlbbaLuD@kwVTMYTwP0AGxvOI578bV4tXciXHunkPiN9ABoS7kj0BfmgLfWpwlESQk36nhg0dT33v9hsSmDgUHOpPzPQyytKLJpDe0sBpNRidedk0Q7aQjeWX6mTbpcE/ylAwkhOMEzRaNLl9wqnez1U0pPrN1lmG2@hRq/KM/@rqNNm8Z4DQMSP1vKWFcstfHWJQcw@zaAflBu8JzuE0Hbh5ig7azpkKTX3xvKki3kUwkjRUrV@EXCXszSAPcAnFmeQ9KOTcBuvnbT9VxrYhcbLd/57Tszepo4zTDJDzxcDj9U6HbRvru9pf4bxpsKgDFSN/PCvWAiGLo5zZOae3P5GwAC4f9ecxIakj8HETcQQUDSlM2AuQu2wkh2wJ4fz6ESGoDJgVdd6p7O7T@CPiRQQaOcm55LUcpdR7gHUPsGDN69/P7k0VfM4w@jH/8G "Java (OpenJDK 8) – Try It Online")
[Answer]
# [C# (.NET Core) by raznagul](https://codegolf.stackexchange.com/a/133279/14306)
I assume this wasn't the intended solution.
```
int a;
int b;
using (var f = new System.IO.FileStream("/dev/stdin", System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
using (var fs = new System.IO.StreamReader(f))
{
a = int.Parse(fs.ReadLine());
b = int.Parse(fs.ReadLine());
}
}
using (var f = new System.IO.FileStream("/dev/stdout", System.IO.FileMode.Open, System.IO.FileAccess.Write))
{
using (var fs = new System.IO.StreamWriter(f))
{
fs.WriteLine((a + b).ToString());
}
}
```
[Answer]
# [Java, by racer290](https://codegolf.stackexchange.com/a/133330/16236)
This was rather a basic overlook that `static` initializers are called before the `main` method. It was a nice try: I was dismayed by the `throw new Error()` at first, but found the way in the end ;)
```
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException {
    try {
        System.class.getField("in").set(null, null);
        System.class.getField("out").set(null, null);
        System.class.getField("err").set(null, null);
        System.class.getMethod("getSecurityManager", new Class[0]).setAccessible(false);
        File.class.getField("fs").set(null, null);
        for (Method m : Class.class.getMethods()) {
            m.setAccessible(false);
        }
        SecurityManager mngr = new SecurityManager() {
            @Override
            public void checkPermission(Permission p) {
                throw new Error("Muahaha!");
            }
            @Override
            public void checkLink(String s) {
                throw new Error("Not this way, my friend!");
            }
        };
        System.setSecurityManager(mngr);
    } catch (Throwable t) {
    }
    // My code here, I guess...
} static {
  java.util.Scanner s = new java.util.Scanner(System.in);
  System.out.println(s.nextInt()+s.nextInt());
    // End of my code
}
```
[Answer]
# [Java by Kevin Cruijssen](https://codegolf.stackexchange.com/a/133348/16236)
Well constructed. A lot of code to make anyone properly ponder how to solve this challenge. I guess the "put your code afterwards" was a big, big hint.
```
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FilePermission;
import java.io.PrintStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class Main {
  // Put everything in a static block so it is run before the static main method 
  // and any trailing (static) initializer-blocks:
  static {
    try {
      initializing();
    } catch (final Exception e) {
    }
  }
  static void initializing() throws Exception {
    // Overwrite System.out, System.err and System.in:
    System.setOut(new PrintStream(new ByteArrayOutputStream()));
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
    System.setIn(new ByteArrayInputStream(new byte[0]));
    // Enable reflection for System.out, System.err and System.in:
    final Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    final Class<?> fdClass = java.io.FileDescriptor.class;
    final Field outField = fdClass.getDeclaredField("out");
    outField.setAccessible(true);
    modifiersField.setInt(outField, outField.getModifiers() & ~Modifier.FINAL);
    final Field errField = fdClass.getDeclaredField("err");
    errField.setAccessible(true);
    modifiersField.setInt(errField, errField.getModifiers() & ~Modifier.FINAL);
    final Field inField = fdClass.getDeclaredField("in");
    inField.setAccessible(true);
    modifiersField.setInt(inField, inField.getModifiers() & ~Modifier.FINAL);
    // Replace existing System.out FileDescriptor with a new (useless) one:
    outField.set(null, new FileDescriptor());
    // Replace existing System.err FileDescriptor with a new (useless) one:
    errField.set(null, new FileDescriptor());
    // Replace existing System.in FileDescriptor with a new (useless) one:
    inField.set(null, new FileDescriptor());
    // Disable reflection for System.out, System.err, System.in again:
    modifiersField.setInt(outField, outField.getModifiers() & ~Modifier.FINAL);
    modifiersField.setInt(errField, errField.getModifiers() & ~Modifier.FINAL);
    modifiersField.setInt(inField, inField.getModifiers() & ~Modifier.FINAL);
    inField.setAccessible(false);
    errField.setAccessible(false);
    outField.setAccessible(false);
    modifiersField.setAccessible(false);
    // Overwrite the SecurityManager:
    System.setSecurityManager(new SecurityManager() {
      private boolean exitAllowed = false;
      @Override
      public void checkExec(final String cmd) {
        throw new SecurityException();
      }
      @Override
      public void checkPermission(final java.security.Permission perm) {
        final String name = perm.getName();
        // You're not allowed to read/write files:
        if (name.equals("setIO") || name.equals("writeFileDescriptor")
            || name.equals("readFileDescriptor")
            || ((perm instanceof FilePermission) && name.startsWith("/proc/self/fd/"))) {
          throw new SecurityException();
        }
        // You're not allowed to overwrite the Security settings:
        if (name.equals("setSecurityManager") || name.equals("suppressAccessChecks")) {
          throw new SecurityException();
        }
        // You're not allowed to use reflection anymore:
        if (name.equals("getModifiers") || name.equals("get") || name.equals("set")
            || name.equals("setBoolean") || name.equals("setByte")
            || name.equals("setChar") || name.equals("setShort") || name.equals("setInt")
            || name.equals("setLong") || name.equals("setFloat") || name.equals("setDouble")
            || name.equals("setFieldAccessor") || name.equals("setFieldAccessor")) {
          throw new SecurityException();
        }
        // When you try to leave the current VM it will stop the program:
        if (name.startsWith("exitVM") && !this.exitAllowed) {
          this.exitAllowed = true;
          System.exit(0);
        }
        // You know what, nothing is allowed!
        throw new SecurityException("Mhuahahahaha!");
      }
    });
  }
  public static void main(String[] args) {
    // Overwritting all given arguments:
    args = new String[0];
    // Exit the program before you can do anything!
    System.exit(0);
  }
}
class System {
  static void exit(int n) {}
  static void setSecurityManager(SecurityManager sm) {
    java.util.Scanner scanner =new java.util.Scanner(java.lang.System.in);
    java.lang.System.out.println(scanner.nextInt() + scanner.nextInt());
  }
  static void setIn(Object o) {}
  static void setOut(Object o) {}
  static void setErr(Object o) {}
}
```
[Try it here.](https://ideone.com/sgcuaJ)
[Answer]
# [JavaScript by Grant Davis](https://codegolf.stackexchange.com/a/133383)
```
document.body.innerHTML='<iframe/>'
w=frames[0]
w.console.log(1*w.prompt()+1*w.prompt())
```
Works in the JS console on the `about:blank` page (as specified in the cop post) on Chromium 59 / Linux.
[Answer]
# [C# (.NET Core) by raznagul](https://codegolf.stackexchange.com/a/133279)
```
var console = typeof(System.ConsoleCancelEventArgs).Assembly.GetType("System.Console");
var readLine = console.GetMethod("ReadLine");
var writeLine = console.GetMethod("WriteLine", new Type[] { typeof(int) });
int a = Int32.Parse((string) readLine.Invoke(null, null));
int b = Int32.Parse((string) readLine.Invoke(null, null));
writeLine.Invoke(null, new object[] {a+b});
```
[Try it online!](https://tio.run/##nZBPS8QwEMXv@RRDTwlqD6438bAsIgsuiAoexEOajms0nSzJ2KWUfvaa2j@g4MU5DGHevN88YuKZ8QF70hXGgzYID01krEQrIJVxOkbYeIre4fdknA8VWbM1UHtbwk5bkmqR2r7WAcxogyvg5oD@VY7ofMJtNBl01zUSr8M@qnwdI1aFa/Ib5MfkkNlPQ6YuxcANqMtbSwN4OjE4dshvvpTZ/aTO28dgGf9ef5rl7BQIjzAcfn6Bds5siRV0iZUeoBNjS7w6z@90iChl5GBpr5ZI@ZZq/4GSPp1LvNTVZC3@Z13S/5JTUl@8o@Ehqz4pUsJ@/v1OjL3rL8RKfAE "C# (.NET Core) – Try It Online")
This would probably have taken less time if I actually knew any C#. However, with some browsing of the documentation and [a bit of help from Jon Skeet](https://stackoverflow.com/a/1044472/411022), I managed to cobble together something that works.
[Answer]
# [Vim challenge by @DJMcMayhem](https://codegolf.stackexchange.com/a/133414/48198)
It's been a while since I wasn't able to [exit vim](https://comic.browserling.com/20), here's my solution (note it's far more than `23` bytes - so it's probably not the intended solution):
```
i
echo "
12
39
"|awk '{s'$(python -c "print(''.join([chr(43),chr(61)]))")'$1} END {print s}'<Esc>vgg!bash
```
[Try it online!](https://tio.run/##XY27CsIwFED3/ILLbSjcBGuhVgSLioOugrM61No28ZHEptRH7bfXx@DgdOBw4FRtG2W6AAlSgTUnWTJcXWbRpIsebh4WOUlvKeA5NoC@9BHGSpsp/qzzp9U@00SSNBEaKAn6JBwR@oyvR8DaosvMvRRaQS8Bagqp3jv0D1oqtk5EwQYh9z4cBnzLOeXoBg0slnOovzHYBjtVnju72ArSti8 "V – Try It Online")
The idea is simply to pipe the two integers to `awk` via `bash`, since `=` and `+` were disabled I had to use a small work-around. The `awk` line expands to:
```
"|awk '{s'+='} END {print s}
```
**Edit**: The original intention was that the input is already in the buffer, but that wouldn't be more difficult - the main difficulty was to get addition working.
Here's the suggested fix by @DJMcMayhem: [Try it online!](https://tio.run/##XY27CsIwFED3/EKX21C4DdZCrQgWFQfFTXFWh1r7iI8kNqU@qt8eH4OD04HDgVMbE2WyBA5cgFZHXrm4PI@jYQs9XN81MpJeU8BTrAB97iMMhFQj/Fn7T4tdJskiTQoJ1JpJ@ogvB8BGo@OqW1VIAe0EqCq5eJ/Q30su3FVSlG43ZN6HvYBtGKMMneAJ0/kEmm8M@olWnef2NtYFMSbokLD/Ag "V – Try It Online")
[Answer]
# [Java 7 by Poke](https://codegolf.stackexchange.com/a/133444)
```
  }
  public static void main(java.lang.String[]a) throws Exception {
    int x = Integer.parseInt(a[0]);
    int y = Integer.parseInt(a[1]);
    java.lang.System.out.println(x+y);
  }
}
class String {
}
class System {
  public static java.io.InputStream in = new java.io.ByteArrayInputStream(new byte[0]), out = in, err = in;
  public static void setProperties (Object o) {
```
[Try it online!](https://tio.run/##hVNNj9NADL33V/hGKpZZlmvFASQOPbAglRvag5O4zbRTTzTjtA2ovz04k6Ttil04RDOxn5@fP2aLB3zna@JtuesKhzHCV7QMv2cAUVBska4A9/ewhEgECM4L@DVsNRSQ45FChGNFgWDt3S4C6q2JljeKXRXITAGUEkfCic6yFYvO/lJ37nyxg@jBkbyJkBMKSEV7EN@fUDdcVJqshEBYJtPahihQY8A9CYWJNae11/yKaKHCQ6@3qJALNXkDPzTQshCXVGo614j1rGIpQh38RrlU/abZE0vUanrddSMTN3J7xNYYkwx9/UYJnJmKjPARmI5/e7JVG4X2xvJ8kWLtGrJoKoyPdJJsPh@brD03nCwD7DxLh4T2AhiZfCOmcD7SBL14LL/ioBBe8USS70GXIIilmHHj3JQfChRtfPblVFCdekVXrdqRRy@VDnoUO3x1kztdm3F7Dt6WsNeVylYSFPrzCec6neCPEa6sAyWO/RuR758W3b8pU6Md8sb8n1zHDidNsNTxbygY3ZxI@pOhJprGopj2ZczDhLnJeR1FrdnFcXZ62ybYeXaeDa9pEKYaLoYUlUQ9LysRW2@W/cppGOky6rO5WSl1fm6FPoWA7Q0q6wG5OvpC7kD1aJDlO9CJp9vi5RY@Gztk3/ItFfqydcDdUMGs6x66D38A "Java (OpenJDK 8) – Try It Online")
No Linux-specific tricks needed, just simple masking of the unqualified `String` and `System` class names. This is probably not the intended solution, but it works.
[Answer]
# [GolfScript by Ilmari Karonen](https://codegolf.stackexchange.com/a/133379/12012)
```
"#{var 'add', Gblock.new('gpush gpop + gpop')}";
add
```
[Try it online!](https://tio.run/##HcrJDoIwFEDRPV/xBPUxG8eF4LDzI1AjQy1GpE1bdIHw65W4usnNoay6y1w8uNJthzAaT6a243p@EM7i3f5wTM6X6@3bI27R7SNjvljCar0BsCAOAkiLAlRJJIG6eWVESFCMkuEIbVrtOxWAA0EfTlnF8mdYk4@NlDeyBMoZB@8fdDozMgao9Q8 "GolfScript – Try It Online")
[Answer]
# [JavaScript (Node.js)](https://nodejs.org) by [jrich](https://codegolf.stackexchange.com/a/133491/9365), 298 bytes
I feel like this isn't the intended solution, but if it is, well done, I spent a while trying to figure out how to get the name of the declared function! :)
```
var p=process,f;(_=>{var w=p.stdout.write,n='f'+(Math.random()*1e7|0),l=1
f=p.stdout.write=a=>eval(`(function ${n}(a){while(l&&((typeof a)[0]!='s'||'f'+a!=n));a=l?l="":a;w.apply(p.stdout,arguments);})`)(a)})();
process.stderr.write.call(process.stdout,''+((0|process.argv[2])+(0|process.argv[3])));
```
[Try it online!](https://tio.run/##XY/haoNAEIT/5ylMKHG3sZK0pYXKpk/QJwjSLHo2lsvdcXcqQX32q9IGSv7O7nwz880tu8LWxj8oXYoQWraRIWN1IZxLqgw@ad/PYkcmdb7UjU87W3uRKIqreAMf7E@pZVXqM@D9TrwOW0wk7RbVjYGY9qJlCUeoGlX4WqvorlcjMPbdqZYC5HoN4C9G6CpiPGzzJcUuHoY5h5ekEDMm@S5ptXrjrEvZGHmBa0rC9qs5C@UdZiMeceKOCJgt/sbMb8La3zJpwVLCv8sMiKc5sB2u6sRrD485bm61pxynKiGE5/DyAw "JavaScript (Node.js) – Try It Online")
]