struct Inner {
  int x;
};

cbuffer cbuffer_s : register(b0, space0) {
  uint4 s[13];
};

float2x3 tint_symbol_7(uint4 buffer[13], uint offset) {
  const uint scalar_offset = ((offset + 0u)) / 4;
  const uint scalar_offset_1 = ((offset + 16u)) / 4;
  return float2x3(asfloat(buffer[scalar_offset / 4].xyz), asfloat(buffer[scalar_offset_1 / 4].xyz));
}

float3x2 tint_symbol_8(uint4 buffer[13], uint offset) {
  const uint scalar_offset_2 = ((offset + 0u)) / 4;
  uint4 ubo_load = buffer[scalar_offset_2 / 4];
  const uint scalar_offset_3 = ((offset + 8u)) / 4;
  uint4 ubo_load_1 = buffer[scalar_offset_3 / 4];
  const uint scalar_offset_4 = ((offset + 16u)) / 4;
  uint4 ubo_load_2 = buffer[scalar_offset_4 / 4];
  return float3x2(asfloat(((scalar_offset_2 & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_3 & 2) ? ubo_load_1.zw : ubo_load_1.xy)), asfloat(((scalar_offset_4 & 2) ? ubo_load_2.zw : ubo_load_2.xy)));
}

Inner tint_symbol_10(uint4 buffer[13], uint offset) {
  const uint scalar_offset_5 = ((offset + 0u)) / 4;
  const Inner tint_symbol_12 = {asint(buffer[scalar_offset_5 / 4][scalar_offset_5 % 4])};
  return tint_symbol_12;
}

typedef Inner tint_symbol_11_ret[4];
tint_symbol_11_ret tint_symbol_11(uint4 buffer[13], uint offset) {
  Inner arr[4] = (Inner[4])0;
  {
    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
      arr[i_1] = tint_symbol_10(buffer, (offset + (i_1 * 16u)));
    }
  }
  return arr;
}

[numthreads(1, 1, 1)]
void main() {
  const int3 a = asint(s[0].xyz);
  const int b = asint(s[0].w);
  const uint3 c = s[1].xyz;
  const uint d = s[1].w;
  const float3 e = asfloat(s[2].xyz);
  const float f = asfloat(s[2].w);
  const int2 g = asint(s[3].xy);
  const int2 h = asint(s[3].zw);
  const float2x3 i = tint_symbol_7(s, 64u);
  const float3x2 j = tint_symbol_8(s, 96u);
  const Inner k = tint_symbol_10(s, 128u);
  const Inner l[4] = tint_symbol_11(s, 144u);
  return;
}
