#include <bits/stdc++.h>
using namespace std;
const int NMAX = 200005;
int n, q, root;
int d[NMAX], seg_id[NMAX];
vector<int> adj[NMAX];
struct BIT {
  vector<int> adj;
  BIT(){};
  void update(int x, int val) {
    for (; x < adj.size(); x += (x & -x)) adj[x] += val;
  }
  int get(int x) {
    int k = 0;
    for (; x > 0; x -= (x & -x)) k += adj[x];
    return k;
  }
  void pb(int x) { adj.push_back(x); }
};
BIT common;
vector<BIT> all;
void dfs(int cur, int num, int depth, int pa) {
  seg_id[cur] = num;
  d[cur] = depth;
  all[num].pb(0);
  for (int v : adj[cur])
    if (v != pa) dfs(v, num, depth + 1, cur);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> q;
  int u, v;
  for (int i = 1; i < n; i++) {
    cin >> u >> v;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  root = 0;
  all.resize(adj[1].size());
  int k = 0;
  for (int v : adj[1]) {
    all[k].pb(0);
    dfs(v, k, 1, 1);
    ++k;
  }
  for (int i = 0; i <= n; i++) common.pb(0);
  int type, val, dis;
  while (q--) {
    cin >> type;
    if (!type) {
      cin >> u >> val >> dis;
      if (u == 0) {
        root += val;
        common.update(1, val);
        common.update(dis + 1, -val);
      } else {
        if (d[u] > dis) {
          all[seg_id[u]].update(d[u] - dis, val);
          all[seg_id[u]].update(d[u] + dis + 1, -val);
        } else {
          root += val;
          int l = dis - d[u];
          common.update(1, val);
          common.update(l + 1, -val);
          all[seg_id[u]].update(l + 1, val);
          all[seg_id[u]].update(d[u] + dis + 1, -val);
        }
      }
    } else {
      cin >> u;
      if (u == 1)
        cout << root << endl;
      else
        cout << common.get(d[u]) + all[seg_id[u]].get(d[u]) << endl;
    }
  }
  return 0;
}
