//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//


public class Parameters {

    Parameters(@Deprecated int var1) {
    }

    void m1(@Deprecated int var1) {
    }

    static void m2(@Deprecated int var0) {
    }

    void local() {
        class Local {

            Local(@Deprecated int var2) {
            }

            void m(@Deprecated int var1) {
            }
        }

    }

    static class C2 {

        C2(@Deprecated int var1) {
        }

        void m1(@Deprecated int var1) {
        }

        static void m2(@Deprecated int var0) {
        }
    }

    class C1 {

        C1(@Deprecated int var2) {
        }

        void m(@Deprecated int var1) {
        }
    }
}
