// Path: uikit-library/src/main/java/android/utils/Preconditions.java
// public final class Preconditions {
//     private Preconditions() {
//     }
// 
//     public static <T> T checkNotNull(T reference) {
//         if (reference == null) {
//             throw new NullPointerException();
//         }
//         return reference;
//     }
// 
//     public static <T> T checkNotNull(T reference, @Nullable Object errorMessage) {
//         if (reference == null) {
//             throw new NullPointerException(String.valueOf(errorMessage));
//         }
//         return reference;
//     }
// 
//     public static boolean isNull(Object obj) {
//         return obj == null;
//     }
// 
//     public static boolean nonNull(Object obj) {
//         return obj != null;
//     }
// 
// }


import android.support.annotation.NonNull;
import android.util.SparseArray;
import android.utils.Preconditions;
import android.view.View;
import android.view.ViewGroup;
import java.util.Stack;
import static android.view.View.NO_ID;
    }

    @Override
    public ViewBlockManager detachView(@NonNull ViewBlock viewBlock) {
        if (contains(viewBlock) && viewBlock.getBlockingView() != null) {
            ViewBlockParent parent = viewBlock.getParent();
            if (parent != null) {
                ViewBlock block = parent.getViewBlock();
                View blockingView = block.getBlockingView();
                if (blockingView instanceof ViewGroup) {
                    ((ViewGroup) blockingView).removeView(viewBlock.getBlockingView());
                }
            }
        }
        return this;
    }

    @Override
    public ViewBlock findViewBlockByKey(int key) {
        return viewBlockSparseArray.get(key);
    }

    @Override
    public boolean contains(@NonNull ViewBlock viewBlock) {
        return (viewBlockSparseArray.indexOfKey(viewBlock.getId()) > 0
                || viewBlockSparseArray.indexOfValue(viewBlock) != -1);
    }

    @Override
    public ViewBlockManager add(@NonNull ViewBlock viewBlock) {
// Path: uikit-library/src/main/java/android/utils/Preconditions.java
// public final class Preconditions {
//     private Preconditions() {
//     }
// 
//     public static <T> T checkNotNull(T reference) {
//         if (reference == null) {
//             throw new NullPointerException();
//         }
//         return reference;
//     }
// 
//     public static <T> T checkNotNull(T reference, @Nullable Object errorMessage) {
//         if (reference == null) {
//             throw new NullPointerException(String.valueOf(errorMessage));
//         }
//         return reference;
//     }
// 
//     public static boolean isNull(Object obj) {
//         return obj == null;
//     }
// 
//     public static boolean nonNull(Object obj) {
//         return obj != null;
//     }
// 
// }


// Path: uikit-library/src/main/java/android/uikit/ViewBlockManagerImpl.java
import android.support.annotation.NonNull;
import android.util.SparseArray;
import android.utils.Preconditions;
import android.view.View;
import android.view.ViewGroup;
import java.util.Stack;
import static android.view.View.NO_ID;

    }

    @Override
    public ViewBlockManager detachView(@NonNull ViewBlock viewBlock) {
        if (contains(viewBlock) && viewBlock.getBlockingView() != null) {
            ViewBlockParent parent = viewBlock.getParent();
            if (parent != null) {
                ViewBlock block = parent.getViewBlock();
                View blockingView = block.getBlockingView();
                if (blockingView instanceof ViewGroup) {
                    ((ViewGroup) blockingView).removeView(viewBlock.getBlockingView());
                }
            }
        }
        return this;
    }

    @Override
    public ViewBlock findViewBlockByKey(int key) {
        return viewBlockSparseArray.get(key);
    }

    @Override
    public boolean contains(@NonNull ViewBlock viewBlock) {
        return (viewBlockSparseArray.indexOfKey(viewBlock.getId()) > 0
                || viewBlockSparseArray.indexOfValue(viewBlock) != -1);
    }

    @Override
    public ViewBlockManager add(@NonNull ViewBlock viewBlock) {
        Preconditions.checkNotNull(viewBlock);