adapted from BSD(3C)4
**USE OF THIS CODE/MATERIAL OR ANY "INSPIRATION" DRAWN FROM THIS CODE/MATERIAL IN AN ACADEMIC CONTEXT (SPECIFICALLY AT UC BERKELEY) IS STRICTLY PROHIBITED SUCH BEHAVIOR VIOLATES FEDERAL COPYRIGHT LAW, UC BERKELEY ACADEMIC INTEGRITY, AND UC BERKELEY COURSE POLICIES