#include <bits/stdc++.h>
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
#define ll long long
#define ull unsigned ll
#define MAX 100005
#define gc getchar_unlocked
using namespace std;
ll arr[MAX],tree[4*MAX];
inline void scanl(ll &x)
{
register int c = gc();
x = 0;
int neg = 0;
for(;((c<48 || c>57) && c != '-');c = gc());
if(c=='-') {neg=1;c=gc();}
for(;c>47 && c<58;c = gc()) {x = (x<<1) + (x<<3) + c - 48;}
if(neg) x=-x;
}
inline void scan(int &x)
{
register int c = gc();
x = 0;
int neg = 0;
for(;((c<48 || c>57) && c != '-');c = gc());
if(c=='-') {neg=1;c=gc();}
for(;c>47 && c<58;c = gc()) {x = (x<<1) + (x<<3) + c - 48;}
if(neg) x=-x;
}
inline void fastWrite(ll a)
{
char snum[20];
int i=0;
do
{
snum[i++]=a%10+48;
a=a/10;
}
while(a!=0);
i=i-1;
while(i>=0)
putchar_unlocked(snum[i--]);
putchar_unlocked('\n');
}
void update_tree(int node,int a,int b,int i,int j,ll val)
{
if(a>b || a>j || b<i)
return;
if(a==b)
{
tree[node]+=val;
return;
}
update_tree(node*2,a,(a+b)/2,i,j,val);
update_tree(node*2+1,(a+b)/2+1,b,i,j,val);
tree[node]=(tree[node*2]+tree[node*2+1]);
}
ll query_tree(int node,int a,int b,int i,int j)
{
if(a>b || a>j || b<i)
return 0;
if(a>=i && b<=j)
{
return tree[node];
}
return query_tree(node*2,a,(a+b)/2,i,j)+query_tree(node*2+1,(a+b)/2+1,b,i,j);
}
int main()
{
int t,i,n,c,ch,l,r;
ll val;
scan(t);
while(t--)
{
scan(n);
scan(c);
rep(i,n)
arr[i]=0;
while(c--)
{
scan(ch);
scan(l);
scan(r);
--l;--r;
if(ch==0)
{
scanl(val);
update_tree(1,0,n-1,l,r,val);
}
else
{
fastWrite(query_tree(1,0,n-1,l,r));
}
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgUkVQKGksYSxiKSBmb3IoaT1hO2k8YjtpKyspCiNkZWZpbmUgcmVwKGksbikgUkVQKGksMCxuKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHVsbCB1bnNpZ25lZCBsbAojZGVmaW5lIE1BWCAxMDAwMDUKI2RlZmluZSBnYyBnZXRjaGFyX3VubG9ja2VkCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmxsIGFycltNQVhdLHRyZWVbNCpNQVhdOwppbmxpbmUgdm9pZCBzY2FubChsbCAmeCkKewogICAgcmVnaXN0ZXIgaW50IGMgPSBnYygpOwogICAgeCA9IDA7CiAgICBpbnQgbmVnID0gMDsKICAgIGZvcig7KChjPDQ4IHx8IGM+NTcpICYmIGMgIT0gJy0nKTtjID0gZ2MoKSk7CiAgICBpZihjPT0nLScpIHtuZWc9MTtjPWdjKCk7fQogICAgZm9yKDtjPjQ3ICYmIGM8NTg7YyA9IGdjKCkpIHt4ID0gKHg8PDEpICsgKHg8PDMpICsgYyAtIDQ4O30KICAgIGlmKG5lZykgeD0teDsKfQppbmxpbmUgdm9pZCBzY2FuKGludCAmeCkKewogICAgcmVnaXN0ZXIgaW50IGMgPSBnYygpOwogICAgeCA9IDA7CiAgICBpbnQgbmVnID0gMDsKICAgIGZvcig7KChjPDQ4IHx8IGM+NTcpICYmIGMgIT0gJy0nKTtjID0gZ2MoKSk7CiAgICBpZihjPT0nLScpIHtuZWc9MTtjPWdjKCk7fQogICAgZm9yKDtjPjQ3ICYmIGM8NTg7YyA9IGdjKCkpIHt4ID0gKHg8PDEpICsgKHg8PDMpICsgYyAtIDQ4O30KICAgIGlmKG5lZykgeD0teDsKfQppbmxpbmUgdm9pZCBmYXN0V3JpdGUobGwgYSkKewogICAgY2hhciBzbnVtWzIwXTsKICAgIGludCBpPTA7CiAgICBkbwogICAgewogICAgICAgIHNudW1baSsrXT1hJTEwKzQ4OwogICAgICAgIGE9YS8xMDsKICAgIH0KICAgIHdoaWxlKGEhPTApOwogICAgaT1pLTE7CiAgICB3aGlsZShpPj0wKQogICAgICAgIHB1dGNoYXJfdW5sb2NrZWQoc251bVtpLS1dKTsKICAgIHB1dGNoYXJfdW5sb2NrZWQoJ1xuJyk7Cn0Kdm9pZCB1cGRhdGVfdHJlZShpbnQgbm9kZSxpbnQgYSxpbnQgYixpbnQgaSxpbnQgaixsbCB2YWwpCnsKICAgIAogICAgaWYoYT5iIHx8IGE+aiB8fCBiPGkpCiAgICAgICAgcmV0dXJuOwogICAgaWYoYT09YikKICAgIHsKICAgICAgICB0cmVlW25vZGVdKz12YWw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdXBkYXRlX3RyZWUobm9kZSoyLGEsKGErYikvMixpLGosdmFsKTsKICAgIHVwZGF0ZV90cmVlKG5vZGUqMisxLChhK2IpLzIrMSxiLGksaix2YWwpOwogICAgdHJlZVtub2RlXT0odHJlZVtub2RlKjJdK3RyZWVbbm9kZSoyKzFdKTsKfQpsbCBxdWVyeV90cmVlKGludCBub2RlLGludCBhLGludCBiLGludCBpLGludCBqKQp7CiAgICBpZihhPmIgfHwgYT5qIHx8IGI8aSkKICAgICAgICByZXR1cm4gMDsKICAgIGlmKGE+PWkgJiYgYjw9aikKICAgIHsKICAgICAgICByZXR1cm4gdHJlZVtub2RlXTsKICAgIH0KICAgIHJldHVybiBxdWVyeV90cmVlKG5vZGUqMixhLChhK2IpLzIsaSxqKStxdWVyeV90cmVlKG5vZGUqMisxLChhK2IpLzIrMSxiLGksaik7Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgdCxpLG4sYyxjaCxsLHI7CiAgICBsbCB2YWw7CiAgICBzY2FuKHQpOwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIHNjYW4obik7CiAgICAgICAgc2NhbihjKTsKICAgICAgICByZXAoaSxuKQogICAgICAgICAgICBhcnJbaV09MDsKICAgICAgICB3aGlsZShjLS0pCiAgICAgICAgeyAgIAogICAgICAgICAgICBzY2FuKGNoKTsKICAgICAgICAgICAgc2NhbihsKTsKICAgICAgICAgICAgc2NhbihyKTsKICAgICAgICAgICAgLS1sOy0tcjsKICAgICAgICAgICAgaWYoY2g9PTApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNjYW5sKHZhbCk7CiAgICAgICAgICAgICAgICB1cGRhdGVfdHJlZSgxLDAsbi0xLGwscix2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZmFzdFdyaXRlKHF1ZXJ5X3RyZWUoMSwwLG4tMSxsLHIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9