#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
const double PI = acos(-1.0);
int BUFF[500300];
int bpos = 0;
struct binIndTree {
  int *fen;
  int sz;
  void init(int sz0) {
    fen = BUFF + bpos;
    sz = sz0 + 3;
    bpos += sz;
  }
  void addOtr(int a, int b, int val) {
    if (a > b) return;
    add(a, val);
    add(b + 1, -val);
  }
  void add(int pos, int val) {
    pos++;
    if (pos >= sz) pos = sz - 1;
    for (int i = pos; i < sz; i += i & -i) fen[i] += val;
  }
  int get(int pos) {
    pos++;
    int res = 0;
    for (int i = pos; i > 0; i -= i & -i) res += fen[i];
    return res;
  }
};
binIndTree F[100100];
struct vert {
  vector<int> inc;
  int h;
  int id;
} g[100100];
int Cnt[100100] = {0};
void dfs(int k, int pr) {
  Cnt[g[k].id]++;
  for (int i = (0), ei = (g[k].inc.size()); i < ei; i++) {
    int to = g[k].inc[i];
    if (to != pr) {
      g[to].h = g[k].h + 1;
      g[to].id = g[k].id;
      dfs(to, k);
    }
  }
}
void run() {
  int n, q;
  cin >> n >> q;
  for (int i = (0), ei = (n - 1); i < ei; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    --a;
    --b;
    g[a].inc.push_back(b);
    g[b].inc.push_back(a);
  }
  g[0].h = 0;
  g[0].id = -1;
  for (int i = (0), ei = (g[0].inc.size()); i < ei; i++) {
    int to = g[0].inc[i];
    g[to].id = i;
    g[to].h = 1;
    dfs(to, 0);
    F[i].init(Cnt[i]);
  }
  binIndTree sun;
  sun.init(100100);
  for (int i = (0), ei = (q); i < ei; i++) {
    int t;
    scanf("%d", &t);
    if (t == 0) {
      int v, x, d;
      scanf("%d%d%d", &v, &x, &d);
      --v;
      if (v == 0)
        sun.addOtr(0, d, x);
      else {
        int id = g[v].id;
        int left = max(-1, d - g[v].h);
        int fr = max(1, g[v].h - d);
        int to = min(Cnt[id], g[v].h + d);
        if (left >= 0) {
          sun.addOtr(0, left, x);
          fr = left + 1;
        }
        F[id].addOtr(fr, to, x);
      }
    } else {
      int v;
      scanf("%d", &v);
      --v;
      int res = 0;
      if (v == 0)
        res += sun.get(0);
      else {
        res += F[g[v].id].get(g[v].h);
        res += sun.get(g[v].h);
      }
      printf("%d\n", res);
    }
  }
}
int main() {
  run();
  return 0;
}
