anchor.diff:              'androidProject.init();',
             );
           }
  -        var last = 'static final String TEMPLATE_PROJECT_NAME = ';
  -        var end = source.indexOf(last);
  -        // Change the initializer to use null, equivalent to original code.
  -        source = '${source.substring(0, end + last.length)}null;\n}}';
  +        if (spec.version.startsWith('3.5')) {
  +          // This version does not define the init() method, so remove it.
  +          var last = 'static final String TEMPLATE_PROJECT_NAME = ';
  +          var end = source.indexOf(last);
  +          // Change the initializer to use null, equivalent to original code.
  +          source = '${source.substring(0, end + last.length)}null;\n}}';
  +        }
           source = source.replaceAll(
             'super(filePath',
             'super(filePath.toString()',
           );
  +        if (spec.version.startsWith('3.6')) {
  +          // Starting with 3.6 we need to call a simplified init().
  +          // This is where the $PROJECT_FILE$ macro is defined, #registerComponents.
  +          source = source.replaceAll(
  +            'getStateStore().setPath(path',
  +            'getStateStore().setPath(path.toString()',
  +          );
  +        }
           processedFile.writeAsStringSync(source);
         }
   
  
positive.code:   processResult =
        await gitDir.runCommand(['branch', '--list', '-a', '*release_*']);
    out = processResult.stdout;
    var remote = out.trim().split('\n').last.trim(); // "remotes/origin/release_43"
    release = remote.substring(remote.lastIndexOf('/') + 1);
    await gitDir.runCommand(['branch', '--track', release, remote]);
    return release;
  
negative.code:       var file = File(filePath);
        changeDirectory(file.parent);
        var pluginNumber = plugins[spec.pluginId];
        value = await upload(
            p.basename(file.path), pluginNumber, token, spec.channel);
        if (value != 0) {
          return value;
        }
  