#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 tree[4*MAX],lazy[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(lazy[node]!=0)
{
tree[node]+=lazy[node];
if(a!=b)
{
lazy[node*2]+=lazy[node];
lazy[node*2+1]+=lazy[node];
}
lazy[node]=0;
}
if(a>b || a>j || b<i)
return;
if(a>=i && b<=j)
{
tree[node]+=val;
if(a!=b)
{
lazy[node*2]+=val;
lazy[node*2+1]+=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(lazy[node]!=0)
{
tree[node]+=lazy[node];
if(a!=b)
{
lazy[node*2]+=lazy[node];
lazy[node*2+1]+=lazy[node];
}
lazy[node]=0;
}
if(a==b)
{
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);
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
{
printf("%lld\n",query_tree(1,0,n-1,l,r));
}
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgUkVQKGksYSxiKSBmb3IoaT1hO2k8YjtpKyspCiNkZWZpbmUgcmVwKGksbikgUkVQKGksMCxuKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHVsbCB1bnNpZ25lZCBsbAojZGVmaW5lIE1BWCAxMDAwMDUKI2RlZmluZSBnYyBnZXRjaGFyX3VubG9ja2VkCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmxsIHRyZWVbNCpNQVhdLGxhenlbNCpNQVhdOwppbmxpbmUgdm9pZCBzY2FubChsbCAmeCkKewogICAgcmVnaXN0ZXIgaW50IGMgPSBnYygpOwogICAgeCA9IDA7CiAgICBpbnQgbmVnID0gMDsKICAgIGZvcig7KChjPDQ4IHx8IGM+NTcpICYmIGMgIT0gJy0nKTtjID0gZ2MoKSk7CiAgICBpZihjPT0nLScpIHtuZWc9MTtjPWdjKCk7fQogICAgZm9yKDtjPjQ3ICYmIGM8NTg7YyA9IGdjKCkpIHt4ID0gKHg8PDEpICsgKHg8PDMpICsgYyAtIDQ4O30KICAgIGlmKG5lZykgeD0teDsKfQppbmxpbmUgdm9pZCBzY2FuKGludCAmeCkKewogICAgcmVnaXN0ZXIgaW50IGMgPSBnYygpOwogICAgeCA9IDA7CiAgICBpbnQgbmVnID0gMDsKICAgIGZvcig7KChjPDQ4IHx8IGM+NTcpICYmIGMgIT0gJy0nKTtjID0gZ2MoKSk7CiAgICBpZihjPT0nLScpIHtuZWc9MTtjPWdjKCk7fQogICAgZm9yKDtjPjQ3ICYmIGM8NTg7YyA9IGdjKCkpIHt4ID0gKHg8PDEpICsgKHg8PDMpICsgYyAtIDQ4O30KICAgIGlmKG5lZykgeD0teDsKfQppbmxpbmUgdm9pZCBmYXN0V3JpdGUobGwgYSkKewogICAgY2hhciBzbnVtWzIwXTsKICAgIGludCBpPTA7CiAgICBkbwogICAgewogICAgICAgIHNudW1baSsrXT1hJTEwKzQ4OwogICAgICAgIGE9YS8xMDsKICAgIH0KICAgIHdoaWxlKGEhPTApOwogICAgaT1pLTE7CiAgICB3aGlsZShpPj0wKQogICAgICAgIHB1dGNoYXJfdW5sb2NrZWQoc251bVtpLS1dKTsKICAgIHB1dGNoYXJfdW5sb2NrZWQoJ1xuJyk7Cn0Kdm9pZCB1cGRhdGVfdHJlZShpbnQgbm9kZSxpbnQgYSxpbnQgYixpbnQgaSxpbnQgaixsbCB2YWwpCnsKICAgIGlmKGxhenlbbm9kZV0hPTApICAKICAgIHsKICAgICAgICB0cmVlW25vZGVdKz1sYXp5W25vZGVdOyAKICAgICAgICBpZihhIT1iKQogICAgICAgIHsKICAgICAgICAgICAgbGF6eVtub2RlKjJdKz1sYXp5W25vZGVdOyAgIAogICAgICAgICAgICBsYXp5W25vZGUqMisxXSs9bGF6eVtub2RlXTsKICAgICAgICB9CiAgICAgICAgbGF6eVtub2RlXT0wOwogICAgfQogICAgaWYoYT5iIHx8IGE+aiB8fCBiPGkpICAKICAgICAgICByZXR1cm47CiAgICBpZihhPj1pICYmIGI8PWopCiAgICB7CiAgICAgICAgdHJlZVtub2RlXSs9dmFsOwogICAgICAgIGlmKGEhPWIpCiAgICAgICAgewogICAgICAgICAgICBsYXp5W25vZGUqMl0rPXZhbDsKICAgICAgICAgICAgbGF6eVtub2RlKjIrMV0rPXZhbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdXBkYXRlX3RyZWUobm9kZSoyLGEsKGErYikvMixpLGosdmFsKTsKICAgIHVwZGF0ZV90cmVlKG5vZGUqMisxLChhK2IpLzIrMSxiLGksaix2YWwpOwogICAgdHJlZVtub2RlXT0odHJlZVtub2RlKjJdK3RyZWVbbm9kZSoyKzFdKTsKfQpsbCBxdWVyeV90cmVlKGludCBub2RlLGludCBhLGludCBiLGludCBpLGludCBqKQp7CiAgICBpZihhPmIgfHwgYT5qIHx8IGI8aSkKICAgICAgICByZXR1cm4gMDsKICAgIGlmKGxhenlbbm9kZV0hPTApCiAgICB7CiAgICAgICAgdHJlZVtub2RlXSs9bGF6eVtub2RlXTsKICAgICAgICBpZihhIT1iKQogICAgICAgIHsKICAgICAgICAgICAgbGF6eVtub2RlKjJdKz1sYXp5W25vZGVdOwogICAgICAgICAgICBsYXp5W25vZGUqMisxXSs9bGF6eVtub2RlXTsKICAgICAgICB9CiAgICAgICAgbGF6eVtub2RlXT0wOwogICAgfQogICAgaWYoYT09YikKICAgIHsKICAgICAgICByZXR1cm4gdHJlZVtub2RlXTsKICAgIH0KICAgIHJldHVybiBxdWVyeV90cmVlKG5vZGUqMixhLChhK2IpLzIsaSxqKStxdWVyeV90cmVlKG5vZGUqMisxLChhK2IpLzIrMSxiLGksaik7Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgdCxpLG4sYyxjaCxsLHI7CiAgICBsbCB2YWw7CiAgICBzY2FuKHQpOwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIHNjYW4obik7CiAgICAgICAgc2NhbihjKTsKICAgICAgICB3aGlsZShjLS0pCiAgICAgICAgeyAgIAogICAgICAgICAgICBzY2FuKGNoKTsKICAgICAgICAgICAgc2NhbihsKTsKICAgICAgICAgICAgc2NhbihyKTsKICAgICAgICAgICAgLS1sOy0tcjsKICAgICAgICAgICAgaWYoY2g9PTApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNjYW5sKHZhbCk7CiAgICAgICAgICAgICAgICB1cGRhdGVfdHJlZSgxLDAsbi0xLGwscix2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcHJpbnRmKCIlbGxkXG4iLHF1ZXJ5X3RyZWUoMSwwLG4tMSxsLHIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9