diff --git a/.gitignore b/.gitignore index 7bcd74a..0a5a94b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,9 @@ /volumes /codex *nul -gittoken.txt \ No newline at end of file +gittoken.txt +/_bmad +/bmad_output +/.agents +/.claude +/uploads \ No newline at end of file diff --git a/App/Controllers/Jurisdiction/JurisdictionController.asp b/App/Controllers/Jurisdiction/JurisdictionController.asp index 9bdd895..a7a2dbf 100644 --- a/App/Controllers/Jurisdiction/JurisdictionController.asp +++ b/App/Controllers/Jurisdiction/JurisdictionController.asp @@ -151,7 +151,7 @@ Class JurisdictionController End sub - Public Sub Import + Public Sub Import dim page_size : page_size = 10 dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) @@ -163,168 +163,651 @@ Class JurisdictionController Model.PageSize = page_size Model.PageCount = page_count 'Model.RecordCount = record_count + HTMLSecurity.SetAntiCSRFToken "JurisdictionImportForm" %> <% End Sub - Public Sub ImportPost - - Dim Upload: Set Upload = New FreeASPUpload + Public Sub ImportPost + If UCase(Request.ServerVariables("REQUEST_METHOD") & "") <> "POST" Then + Err.Raise 1, "JurisdictionController:ImportPost", "Action only responds to POST requests." + End If + + Dim Upload : Set Upload = New FreeASPUpload Dim uploadPath, uploadedFile, fileName, fileExt, fileSize - Dim maxFileSize, dotPos, recordCount - + Dim maxFileSize, dotPos, nonce + Dim savedFileName, savedLocalFileName, savedPath + Dim workbookData, worksheetName, headerIndex, missingHeaders + Dim importToken, totalRows, duplicateCount + maxFileSize = 10485760 '10 MB in bytes uploadPath = Server.MapPath("/uploads") - - 'Parse upload data + Upload.Upload - - 'Validate file upload + nonce = Upload.Form("nonce") + + If Not HTMLSecurity.IsValidAntiCSRFToken("JurisdictionImportForm", nonce) Then + HTMLSecurity.ClearAntiCSRFToken "JurisdictionImportForm" + HTMLSecurity.SetAntiCSRFToken "JurisdictionImportForm" + SendImportJsonError "Invalid form state. Please refresh and try again." + Exit Sub + End If + HTMLSecurity.ClearAntiCSRFToken "JurisdictionImportForm" + HTMLSecurity.SetAntiCSRFToken "JurisdictionImportForm" + If Upload.FileExists("filename") = False Then - Flash.AddError "No file selected for upload." - MVC.RedirectToAction "Import" + SendImportJsonError "No file selected for upload." Exit Sub End If - + Set uploadedFile = Upload.UploadedFiles("filename") fileName = uploadedFile.FileName fileSize = uploadedFile.Length - - 'Extract file extension + dotPos = InStrRev(fileName, ".") If dotPos > 0 Then fileExt = LCase(Mid(fileName, dotPos)) Else fileExt = "" End If - - 'Validate file type - If fileExt <> ".csv" And fileExt <> ".txt" Then - Flash.AddError "Only .csv and .txt files are allowed." - MVC.RedirectToAction "Import" + + If fileExt <> ".xlsx" Then + SendImportJsonError "Only .xlsx files are allowed." Exit Sub End If - - 'Validate file size + If fileSize > maxFileSize Then - Flash.AddError "File size exceeds 10 MB limit." - MVC.RedirectToAction "Import" + SendImportJsonError "File size exceeds 10 MB limit." Exit Sub End If - - 'Save the file to configured folder - Upload.Save uploadPath - 'Remove the first line of the CSV (non-header info line) - StripFirstLine uploadedFile.Path + EnsureFolderExists uploadPath + Upload.SaveOne uploadPath, 0, savedFileName, savedLocalFileName + savedPath = uploadPath & "\" & savedLocalFileName - 'Open CSV with Jet driver and iterate records - Dim conn, rs, connString, folderPath, csvFileName, fso - Set fso = Server.CreateObject("Scripting.FileSystemObject") - folderPath = fso.GetParentFolderName(uploadedFile.Path) - csvFileName = fso.GetFileName(uploadedFile.Path) - Set fso = Nothing + On Error Resume Next + workbookData = ReadWorkbookData(savedPath, worksheetName) + If Err.Number <> 0 Then + Dim workbookErr : workbookErr = Err.Description + Err.Clear + On Error GoTo 0 + DeleteFileIfExists savedPath + SendImportJsonError "Unable to read the XLSX workbook. Verify Microsoft ACE OLEDB is installed and the workbook is valid. " & workbookErr + Exit Sub + End If + On Error GoTo 0 + + If Not WorkbookHasHeaderRows(workbookData) Then + DeleteFileIfExists savedPath + SendImportJsonError "The uploaded workbook must contain an information row and a header row." + Exit Sub + End If + + Set headerIndex = BuildHeaderIndex(workbookData, 1) + missingHeaders = MissingRequiredHeaders(headerIndex) + If Len(missingHeaders) > 0 Then + DeleteFileIfExists savedPath + SendImportJsonError "Missing required header(s): " & missingHeaders + Exit Sub + End If + + totalRows = CountImportRows(workbookData) + duplicateCount = CountDuplicateJCodes(workbookData, CLng(headerIndex.Item("JURISDICTION"))) + importToken = CreateImportToken() + + InitializeImportSession importToken, workbookData, worksheetName, fileName, savedPath, totalRows, duplicateCount, headerIndex + SendImportJsonSuccess importToken, fileName, totalRows, duplicateCount + End Sub + + Public Sub ImportProgress + Dim importToken : importToken = Trim(Request.QueryString("token") & "") + If Len(importToken) = 0 Then + SendImportJsonError "Missing import token." + Exit Sub + End If + + If Not ImportExists(importToken) Then + SendImportJsonError "The requested import session was not found. Please upload the workbook again." + Exit Sub + End If + + Dim phase : phase = GetImportValue(importToken, "Phase") + If phase <> "complete" And phase <> "error" Then + ProcessImportChunk importToken, 25 + End If + + SendImportProgressJson importToken + End Sub - Dim fmtType - If fileExt = ".txt" Then - fmtType = "TabDelimited" + Private Sub ProcessImportChunk(importToken, maxRowsPerRequest) + Dim sessionKey : sessionKey = ImportSessionKey(importToken) + Dim workbookData : workbookData = Session(sessionKey & "Data") + Dim currentRow, lastRow, rowsProcessed + + If Not IsArray(workbookData) Then + SetImportValue importToken, "Phase", "error" + SetImportValue importToken, "StatusMessage", "Workbook data is no longer available in session." + AppendImportError importToken, 0, "Workbook data is no longer available in session.", "" + Exit Sub + End If + + currentRow = CLng(GetImportValue(importToken, "CurrentRow")) + lastRow = UBound(workbookData, 2) + rowsProcessed = 0 + + If currentRow < 2 Then currentRow = 2 + SetImportValue importToken, "Phase", "processing" + + Do While currentRow <= lastRow And rowsProcessed < maxRowsPerRequest + ProcessImportRow importToken, workbookData, currentRow + currentRow = currentRow + 1 + rowsProcessed = rowsProcessed + 1 + SetImportValue importToken, "CurrentRow", currentRow + SetImportValue importToken, "ProcessedRows", CLng(GetImportValue(importToken, "ProcessedRows")) + 1 + Loop + + If currentRow > lastRow Then + SetImportValue importToken, "Phase", "complete" + SetImportValue importToken, "StatusMessage", "Import complete." + Session.Contents.Remove sessionKey & "Data" + DeleteFileIfExists GetImportValue(importToken, "FilePath") + Session.Contents.Remove sessionKey & "FilePath" Else - fmtType = "Delimited" + SetImportValue importToken, "StatusMessage", "Processed " & GetImportValue(importToken, "ProcessedRows") & " of " & GetImportValue(importToken, "TotalRows") & " row(s)." + End If + End Sub + + Private Sub ProcessImportRow(importToken, workbookData, rowIndex) + Dim county, jurisdictionText, jCode, jurisdictionName, mailingAddress, cityTownship, zipPlusFour, mailerId + Dim csz, imbDigits, imb, jurisdictionModel, recordSummary + + county = SafeWorkbookValue(workbookData(GetImportColumnIndex(importToken, "CountyIndex"), rowIndex)) + jurisdictionText = SafeWorkbookValue(workbookData(GetImportColumnIndex(importToken, "JurisdictionIndex"), rowIndex)) + mailingAddress = SafeWorkbookValue(workbookData(GetImportColumnIndex(importToken, "MailingAddressIndex"), rowIndex)) + cityTownship = SafeWorkbookValue(workbookData(GetImportColumnIndex(importToken, "CityTownshipIndex"), rowIndex)) + zipPlusFour = SafeWorkbookValue(workbookData(GetImportColumnIndex(importToken, "ZipPlusFourIndex"), rowIndex)) + mailerId = SafeWorkbookValue(workbookData(GetImportColumnIndex(importToken, "MailerIdIndex"), rowIndex)) + recordSummary = BuildImportRecordSummary(county, jurisdictionText, mailingAddress, cityTownship, zipPlusFour, mailerId) + + If Len(Trim(county & jurisdictionText & mailingAddress & cityTownship & zipPlusFour & mailerId)) = 0 Then + IncrementImportCounter importToken, "InvalidCount" + AppendImportError importToken, rowIndex + 1, "Row is empty.", recordSummary + Exit Sub + End If + + jCode = ExtractJurisdictionCode(jurisdictionText) + If Len(jCode) = 0 Then + IncrementImportCounter importToken, "InvalidCount" + AppendImportError importToken, rowIndex + 1, "Jurisdiction field is missing a code in parentheses.", recordSummary + Exit Sub + End If + + jurisdictionName = NormalizeJurisdictionName(ExtractJurisdictionName(jurisdictionText)) + If Len(jurisdictionName) = 0 Then + IncrementImportCounter importToken, "InvalidCount" + AppendImportError importToken, rowIndex + 1, "Jurisdiction name could not be parsed.", recordSummary + Exit Sub + End If + + csz = BuildCSZ(cityTownship, zipPlusFour) + imbDigits = BuildIMBDigits(mailerId, zipPlusFour) + If Len(imbDigits) = 0 Then + IncrementImportCounter importToken, "InvalidCount" + AppendImportError importToken, rowIndex + 1, "Unable to build IMB digits from Mailer ID Option 1 and ZIP + 4.", recordSummary + Exit Sub End If - connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & folderPath & ";Extended Properties=""text;HDR=YES;FMT=" & fmtType & """;" - Set conn = Server.CreateObject("ADODB.Connection") On Error Resume Next - conn.Open connString + imb = GetIMBCodec.EncodeDigits(imbDigits) If Err.Number <> 0 Then - Flash.AddError "Unable to read CSV file." - MVC.RedirectToAction "Import" + Dim imbErr : imbErr = Err.Description + Err.Clear + On Error GoTo 0 + IncrementImportCounter importToken, "FailedCount" + AppendImportError importToken, rowIndex + 1, "IMB generation failed for JCode " & jCode & ". " & imbErr, recordSummary Exit Sub End If - On Error Goto 0 - - Dim sql - sql = "SELECT q.[County], q.[Jurisdiction], q.JCODE, " & _ - "IIf(InStr(1, UCase(q.NameRaw), ' CITY') > 0, " & _ - "'CITY OF ' & Trim(Replace(UCase(q.NameRaw), ' CITY', '')), " & _ - "q.NameRaw) AS [Name], " & _ - "q.[Mailing Address] AS Mailing_Address, " & _ - "q.[City & Township] & ' ' & q.[ZIP + 4] AS CSZ, " & _ - "'' AS IMB, " & _ - "'007' & q.[Mailer ID Option 1] & '000000' & Replace(q.[ZIP + 4], '-', '') AS IMB_Digits " & _ - "FROM (" & _ - "SELECT [County], [Jurisdiction], [Mailing Address], [City & Township], [ZIP + 4], [Mailer ID Option 1], " & _ - "IIf(InStr(1,[Jurisdiction],'(') > 0 And InStr(1,[Jurisdiction],')') > InStr(1,[Jurisdiction],'('), " & _ - "Trim(Mid([Jurisdiction], InStr(1,[Jurisdiction],'(') + 1, InStr(1,[Jurisdiction],')') - InStr(1,[Jurisdiction],'(') - 1)), " & _ - "Null) AS JCODE, " & _ - "IIf(InStr(1,[Jurisdiction],'(') > 0, " & _ - "Trim(Left([Jurisdiction], InStr(1,[Jurisdiction],'(') - 1)), " & _ - "Trim([Jurisdiction])) AS NameRaw " & _ - "FROM [" & csvFileName & "]) AS q" - - Set rs = conn.Execute(sql) - - recordCount = 0 - Do While Not rs.EOF - Dim jurisdiction : Set jurisdiction = New JurisdictionModel_Class - jurisdiction.JCode = Trim(rs.Fields("JCODE").Value & "") - jurisdiction.Name = Trim(rs.Fields("Name").Value & "") - jurisdiction.Mailing_Address = Trim(rs.Fields("Mailing_Address").Value & "") - jurisdiction.CSZ = Trim(rs.Fields("CSZ").Value & "") - jurisdiction.IMB_Digits = Trim(rs.Fields("IMB_Digits").Value & "") - jurisdiction.IMB = GetIMBCodec.EncodeDigits(jurisdiction.IMB_Digits) - - 'JurisdictionRepository.AddNew jurisdiction - - recordCount = recordCount + 1 - rs.MoveNext - Loop + On Error GoTo 0 + + On Error Resume Next + Set jurisdictionModel = JurisdictionRepository.FindByJCode(jCode) + If Err.Number <> 0 Then + Err.Clear + On Error GoTo 0 + Set jurisdictionModel = New JurisdictionModel_Class + jurisdictionModel.JCode = jCode + jurisdictionModel.Name = jurisdictionName + jurisdictionModel.Mailing_Address = mailingAddress + jurisdictionModel.CSZ = csz + jurisdictionModel.IMB_Digits = imbDigits + jurisdictionModel.IMB = imb + + On Error Resume Next + JurisdictionRepository.AddNewWithJCode jurisdictionModel + If Err.Number <> 0 Then + Dim insertErr : insertErr = Err.Description + Err.Clear + On Error GoTo 0 + IncrementImportCounter importToken, "FailedCount" + AppendImportError importToken, rowIndex + 1, "Failed to insert new JCode " & jCode & ". " & insertErr, recordSummary + Exit Sub + End If + On Error GoTo 0 + + IncrementImportCounter importToken, "InsertedCount" + Exit Sub + End If + On Error GoTo 0 + + jurisdictionModel.Name = jurisdictionName + jurisdictionModel.Mailing_Address = mailingAddress + jurisdictionModel.CSZ = csz + jurisdictionModel.IMB_Digits = imbDigits + jurisdictionModel.IMB = imb + + On Error Resume Next + JurisdictionRepository.Update jurisdictionModel + If Err.Number <> 0 Then + Dim updateErr : updateErr = Err.Description + Err.Clear + On Error GoTo 0 + IncrementImportCounter importToken, "FailedCount" + AppendImportError importToken, rowIndex + 1, "Failed to update JCode " & jCode & ". " & updateErr, recordSummary + Exit Sub + End If + On Error GoTo 0 + + IncrementImportCounter importToken, "UpdatedCount" + End Sub + + Private Function ReadWorkbookData(filePath, ByRef worksheetName) + Dim conn, rs, connString, sql + + connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";" + Set conn = Server.CreateObject("ADODB.Connection") + conn.Open connString + + worksheetName = FirstWorksheetName(conn) + If Len(worksheetName) = 0 Then + conn.Close + Set conn = Nothing + Err.Raise vbObjectError + 2010, "JurisdictionController", "No worksheet was found in the uploaded workbook." + End If + + sql = "SELECT * FROM [" & worksheetName & "]" + Set rs = Server.CreateObject("ADODB.Recordset") + rs.Open sql, conn, 3, 1 + + If rs.EOF And rs.BOF Then + rs.Close + conn.Close + Set rs = Nothing + Set conn = Nothing + Err.Raise vbObjectError + 2011, "JurisdictionController", "The worksheet does not contain any rows." + End If + + ReadWorkbookData = rs.GetRows() rs.Close conn.Close Set rs = Nothing Set conn = Nothing + End Function + + Private Function FirstWorksheetName(conn) + Dim schema, tableName + + Set schema = conn.OpenSchema(20) + Do Until schema.EOF + tableName = Trim(schema("TABLE_NAME") & "") + If InStr(tableName, "$") > 0 And InStr(tableName, "_xlnm") = 0 Then + FirstWorksheetName = tableName + schema.Close + Set schema = Nothing + Exit Function + End If + schema.MoveNext + Loop - 'Set success message with record count - Flash.Success = "File '" & fileName & "' uploaded successfully. Records imported: " & recordCount - MVC.RedirectToAction "Import" + If Not schema Is Nothing Then + schema.Close + Set schema = Nothing + End If + FirstWorksheetName = "" + End Function + + Private Function BuildHeaderIndex(workbookData, headerRowIndex) + Dim headerMap, colIndex, headerName + + Set headerMap = Server.CreateObject("Scripting.Dictionary") + For colIndex = 0 To UBound(workbookData, 1) + headerName = UCase(Trim(SafeWorkbookValue(workbookData(colIndex, headerRowIndex)))) + If Len(headerName) > 0 Then + If Not headerMap.Exists(headerName) Then + headerMap.Add headerName, colIndex + End If + End If + Next + + Set BuildHeaderIndex = headerMap + End Function + + Private Function WorkbookHasHeaderRows(workbookData) + On Error Resume Next + WorkbookHasHeaderRows = (IsArray(workbookData) And UBound(workbookData, 2) >= 1) + If Err.Number <> 0 Then + Err.Clear + WorkbookHasHeaderRows = False + End If + On Error GoTo 0 + End Function + + Private Function MissingRequiredHeaders(headerIndex) + Dim requiredHeaders, missingHeaders, i + + requiredHeaders = Array("County", "Jurisdiction", "Mailing Address", "City & Township", "ZIP + 4", "Mailer ID Option 1") + missingHeaders = "" + + For i = 0 To UBound(requiredHeaders) + If Not headerIndex.Exists(UCase(requiredHeaders(i))) Then + If Len(missingHeaders) > 0 Then missingHeaders = missingHeaders & ", " + missingHeaders = missingHeaders & requiredHeaders(i) + End If + Next + + MissingRequiredHeaders = missingHeaders + End Function + + Private Function CountImportRows(workbookData) + If Not WorkbookHasHeaderRows(workbookData) Then + CountImportRows = 0 + ElseIf UBound(workbookData, 2) < 2 Then + CountImportRows = 0 + Else + CountImportRows = UBound(workbookData, 2) - 1 + End If + End Function + + Private Function CountDuplicateJCodes(workbookData, jurisdictionColumnIndex) + Dim seenCodes, rowIndex, jCode + + Set seenCodes = Server.CreateObject("Scripting.Dictionary") + CountDuplicateJCodes = 0 + + If Not WorkbookHasHeaderRows(workbookData) Then Exit Function + If UBound(workbookData, 2) < 2 Then Exit Function + + For rowIndex = 2 To UBound(workbookData, 2) + jCode = ExtractJurisdictionCode(SafeWorkbookValue(workbookData(jurisdictionColumnIndex, rowIndex))) + If Len(jCode) > 0 Then + If seenCodes.Exists(jCode) Then + CountDuplicateJCodes = CountDuplicateJCodes + 1 + Else + seenCodes.Add jCode, True + End If + End If + Next + End Function + + Private Sub InitializeImportSession(importToken, workbookData, worksheetName, fileName, filePath, totalRows, duplicateCount, headerIndex) + Dim sessionKey : sessionKey = ImportSessionKey(importToken) + + Session(sessionKey & "Data") = workbookData + Session(sessionKey & "WorksheetName") = worksheetName + Session(sessionKey & "FileName") = fileName + Session(sessionKey & "FilePath") = filePath + Session(sessionKey & "CurrentRow") = 2 + Session(sessionKey & "ProcessedRows") = 0 + Session(sessionKey & "TotalRows") = totalRows + Session(sessionKey & "UpdatedCount") = 0 + Session(sessionKey & "InsertedCount") = 0 + Session(sessionKey & "UnmatchedCount") = 0 + Session(sessionKey & "InvalidCount") = 0 + Session(sessionKey & "FailedCount") = 0 + Session(sessionKey & "DuplicateCount") = duplicateCount + Session(sessionKey & "Phase") = "staged" + Session(sessionKey & "StatusMessage") = "Workbook uploaded. Processing will begin shortly." + Session(sessionKey & "Errors") = "" + Session(sessionKey & "CountyIndex") = CLng(headerIndex.Item("COUNTY")) + Session(sessionKey & "JurisdictionIndex") = CLng(headerIndex.Item("JURISDICTION")) + Session(sessionKey & "MailingAddressIndex") = CLng(headerIndex.Item("MAILING ADDRESS")) + Session(sessionKey & "CityTownshipIndex") = CLng(headerIndex.Item("CITY & TOWNSHIP")) + Session(sessionKey & "ZipPlusFourIndex") = CLng(headerIndex.Item("ZIP + 4")) + Session(sessionKey & "MailerIdIndex") = CLng(headerIndex.Item("MAILER ID OPTION 1")) + End Sub + Private Function CreateImportToken() + Dim token : token = HTMLSecurity.Nonce() + token = Replace(token, "{", "") + token = Replace(token, "}", "") + CreateImportToken = token + End Function + + Private Function ImportSessionKey(importToken) + ImportSessionKey = "JurisdictionImport." & importToken & "." + End Function + + Private Function ImportExists(importToken) + ImportExists = (Len(GetImportValue(importToken, "Phase")) > 0) + End Function + + Private Function GetImportValue(importToken, name) + GetImportValue = Session(ImportSessionKey(importToken) & name) + End Function + + Private Sub SetImportValue(importToken, name, value) + Session(ImportSessionKey(importToken) & name) = value End Sub - - Private Sub StripFirstLine(filePath) - Dim fso, ts, remainingText - Set fso = Server.CreateObject("Scripting.FileSystemObject") - If Not fso.FileExists(filePath) Then - Set fso = Nothing - Exit Sub + Private Function GetImportColumnIndex(importToken, name) + GetImportColumnIndex = CLng(GetImportValue(importToken, name)) + End Function + + Private Sub IncrementImportCounter(importToken, counterName) + SetImportValue importToken, counterName, CLng(GetImportValue(importToken, counterName)) + 1 + End Sub + + Private Function ExtractJurisdictionCode(jurisdictionText) + Dim openPos, closePos + + openPos = InStrRev(jurisdictionText, "(") + closePos = InStrRev(jurisdictionText, ")") + + If openPos > 0 And closePos > openPos Then + ExtractJurisdictionCode = Trim(Mid(jurisdictionText, openPos + 1, closePos - openPos - 1)) + Else + ExtractJurisdictionCode = "" End If + End Function - Set ts = fso.OpenTextFile(filePath, 1) ' 1 = ForReading - If ts.AtEndOfStream Then - ts.Close - Set ts = Nothing - Set fso = Nothing - Exit Sub + Private Function ExtractJurisdictionName(jurisdictionText) + Dim openPos + + openPos = InStrRev(jurisdictionText, "(") + If openPos > 0 Then + ExtractJurisdictionName = Trim(Left(jurisdictionText, openPos - 1)) + Else + ExtractJurisdictionName = Trim(jurisdictionText) + End If + End Function + + Private Function NormalizeJurisdictionName(jurisdictionName) + Dim normalizedName + + normalizedName = Trim(jurisdictionName) + If Len(normalizedName) >= 5 Then + If UCase(Right(normalizedName, 5)) = " CITY" Then + normalizedName = "CITY OF " & Trim(Left(normalizedName, Len(normalizedName) - 5)) + End If End If - 'Skip the first line - ts.ReadLine + NormalizeJurisdictionName = normalizedName + End Function - 'Read the rest of the file - If Not ts.AtEndOfStream Then - remainingText = ts.ReadAll + Private Function BuildCSZ(cityTownship, zipPlusFour) + BuildCSZ = Trim(Trim(cityTownship) & " " & Trim(zipPlusFour)) + End Function + + Private Function BuildIMBDigits(mailerId, zipPlusFour) + Dim cleanMailerId, cleanZip + + cleanMailerId = DigitsOnly(mailerId) + cleanZip = DigitsOnly(zipPlusFour) + + If Len(cleanMailerId) = 0 Or Len(cleanZip) = 0 Then + BuildIMBDigits = "" + Else + BuildIMBDigits = "00778" & cleanMailerId & "000000" & cleanZip + End If + End Function + + Private Function DigitsOnly(inputValue) + Dim i, ch + + DigitsOnly = "" + For i = 1 To Len(inputValue) + ch = Mid(inputValue, i, 1) + If ch >= "0" And ch <= "9" Then + DigitsOnly = DigitsOnly & ch + End If + Next + End Function + + Private Function SafeWorkbookValue(value) + If IsNull(value) Or IsEmpty(value) Then + SafeWorkbookValue = "" + Else + SafeWorkbookValue = Trim(CStr(value)) + End If + End Function + + Private Function BuildImportRecordSummary(county, jurisdictionText, mailingAddress, cityTownship, zipPlusFour, mailerId) + BuildImportRecordSummary = "County=" & DisplayImportField(county) & _ + "; Jurisdiction=" & DisplayImportField(jurisdictionText) & _ + "; Mailing Address=" & DisplayImportField(mailingAddress) & _ + "; City & Township=" & DisplayImportField(cityTownship) & _ + "; ZIP + 4=" & DisplayImportField(zipPlusFour) & _ + "; Mailer ID Option 1=" & DisplayImportField(mailerId) + End Function + + Private Function DisplayImportField(value) + If Len(Trim(value & "")) = 0 Then + DisplayImportField = "" + Else + DisplayImportField = value & "" + End If + End Function + + Private Sub AppendImportError(importToken, rowNumber, errorMessage, recordSummary) + Dim sessionKey, currentErrors, fullMessage + + sessionKey = ImportSessionKey(importToken) + currentErrors = Session(sessionKey & "Errors") & "" + + If rowNumber > 0 Then + fullMessage = "Row " & rowNumber & ": " & errorMessage + Else + fullMessage = errorMessage + End If + + If Len(Trim(recordSummary & "")) > 0 Then + fullMessage = fullMessage & " Record: " & recordSummary + End If + + If Len(currentErrors) > 0 Then + currentErrors = currentErrors & Chr(30) + End If + currentErrors = currentErrors & fullMessage + + Session(sessionKey & "Errors") = currentErrors + End Sub + + Private Sub SendImportJsonSuccess(importToken, fileName, totalRows, duplicateCount) + Response.ContentType = "application/json" + Response.Write "{""ok"":true,""token"":""" & JsonEscape(importToken) & """,""fileName"":""" & JsonEscape(fileName) & """,""phase"":""staged"",""totalRows"":" & totalRows & ",""processedRows"":0,""updatedCount"":0,""insertedCount"":0,""invalidCount"":0,""failedCount"":0,""duplicateCount"":" & duplicateCount & ",""percentComplete"":0,""statusMessage"":""Workbook uploaded. Processing will begin shortly."",""nextNonce"":""" & JsonEscape(HTMLSecurity.GetAntiCSRFToken("JurisdictionImportForm")) & """,""errors"":[]}" + Response.End + End Sub + + Private Sub SendImportProgressJson(importToken) + Dim phase, totalRows, processedRows, updatedCount, insertedCount, invalidCount, failedCount, duplicateCount + Dim percentComplete, statusMessage, errorsJson + + phase = GetImportValue(importToken, "Phase") + totalRows = CLng(GetImportValue(importToken, "TotalRows")) + processedRows = CLng(GetImportValue(importToken, "ProcessedRows")) + updatedCount = CLng(GetImportValue(importToken, "UpdatedCount")) + insertedCount = CLng(GetImportValue(importToken, "InsertedCount")) + invalidCount = CLng(GetImportValue(importToken, "InvalidCount")) + failedCount = CLng(GetImportValue(importToken, "FailedCount")) + duplicateCount = CLng(GetImportValue(importToken, "DuplicateCount")) + statusMessage = GetImportValue(importToken, "StatusMessage") & "" + errorsJson = JsonArrayFromDelimitedString(GetImportValue(importToken, "Errors") & "") + + If totalRows > 0 Then + percentComplete = Int((processedRows / totalRows) * 100) Else - remainingText = "" + percentComplete = 100 + End If + If phase = "complete" Then percentComplete = 100 + + Response.ContentType = "application/json" + Response.Write "{""ok"":true,""token"":""" & JsonEscape(importToken) & """,""phase"":""" & JsonEscape(phase) & """,""totalRows"":" & totalRows & ",""processedRows"":" & processedRows & ",""updatedCount"":" & updatedCount & ",""insertedCount"":" & insertedCount & ",""invalidCount"":" & invalidCount & ",""failedCount"":" & failedCount & ",""duplicateCount"":" & duplicateCount & ",""percentComplete"":" & percentComplete & ",""statusMessage"":""" & JsonEscape(statusMessage) & """,""errors"":" & errorsJson & "}" + Response.End + End Sub + + Private Sub SendImportJsonError(errorMessage) + Response.ContentType = "application/json" + Response.Status = "400 Bad Request" + Response.Write "{""ok"":false,""message"":""" & JsonEscape(errorMessage) & """,""nextNonce"":""" & JsonEscape(HTMLSecurity.GetAntiCSRFToken("JurisdictionImportForm")) & """}" + Response.End + End Sub + + Private Function JsonArrayFromDelimitedString(delimitedValue) + Dim items, i, result + + If Len(delimitedValue) = 0 Then + JsonArrayFromDelimitedString = "[]" + Exit Function End If - ts.Close - 'Rewrite the file without the first line - Set ts = fso.OpenTextFile(filePath, 2) ' 2 = ForWriting - ts.Write remainingText - ts.Close + items = Split(delimitedValue, Chr(30)) + result = "[" + For i = 0 To UBound(items) + If i > 0 Then result = result & "," + result = result & """" & JsonEscape(items(i)) & """" + Next + result = result & "]" + + JsonArrayFromDelimitedString = result + End Function + + Private Function JsonEscape(value) + value = Replace(value & "", "\", "\\") + value = Replace(value, """", "\""") + value = Replace(value, vbCrLf, "\n") + value = Replace(value, vbCr, "\n") + value = Replace(value, vbLf, "\n") + JsonEscape = value + End Function + + Private Sub EnsureFolderExists(folderPath) + Dim fso : Set fso = Server.CreateObject("Scripting.FileSystemObject") + If Not fso.FolderExists(folderPath) Then + fso.CreateFolder folderPath + End If + Set fso = Nothing + End Sub + + Private Sub DeleteFileIfExists(filePath) + Dim fso + If Len(Trim(filePath & "")) = 0 Then Exit Sub - Set ts = Nothing + Set fso = Server.CreateObject("Scripting.FileSystemObject") + If fso.FileExists(filePath) Then + On Error Resume Next + fso.DeleteFile filePath, True + On Error GoTo 0 + End If Set fso = Nothing End Sub End Class diff --git a/App/DomainModels/JurisdictionRepository.asp b/App/DomainModels/JurisdictionRepository.asp index fe4e63e..b725bef 100644 --- a/App/DomainModels/JurisdictionRepository.asp +++ b/App/DomainModels/JurisdictionRepository.asp @@ -205,6 +205,23 @@ Class JurisdictionRepository_Class Destroy rs End Sub + Public Sub AddNewWithJCode(ByRef model) + dim sql : sql = "INSERT INTO [Jurisdiction] (" &_ + "[JCode]," &_ + "[Name]," &_ + "[Mailing_Address]," &_ + "[CSZ]," &_ + "[IMB]," &_ + "[IMB_Digits])" &_ + "VALUES (?,?,?,?,?,?)" + DAL.Execute sql, Array(model.JCode, _ + model.Name, _ + model.Mailing_Address, _ + model.CSZ, _ + model.IMB, _ + model.IMB_Digits) + End Sub + Public Sub Update(model) dim sql : sql = "UPDATE [Jurisdiction] SET [Name] = ?," &_ "[Mailing_Address] = ?," &_ diff --git a/App/Views/Jurisdiction/import.asp b/App/Views/Jurisdiction/import.asp index 393d181..329c4cc 100644 --- a/App/Views/Jurisdiction/import.asp +++ b/App/Views/Jurisdiction/import.asp @@ -3,23 +3,250 @@ <% Flash().ShowErrorsIfPresent %> <% Flash().ShowSuccessIfPresent %> -<%= HTML.FormTag("Jurisdiction", "ImportPost", empty, Array("enctype","multipart/form-data")) %> +<%= HTML.FormTag("Jurisdiction", "ImportPost", Array("_P","1"), Array("enctype","multipart/form-data","id","jurisdiction-import-form")) %> <%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("JurisdictionImportForm")) %>
-

Upload a CSV (.csv) or tab-delimited (.txt) file to import jurisdiction data

+
+

Upload the BRM permit workbook as an Excel file. Row 1 is ignored, row 2 must contain the expected headers, and jurisdictions are updated or inserted using the JCode inside the Jurisdiction column.

+
-
+
- - + +

- <%= HTML.Button("submit", " Upload", "btn-primary") %> - Accepted formats: .csv, .txt | Max size: 10 MB + + Accepted format: .xlsx | Max size: 10 MB
+ + + + + + diff --git a/Dockerfile b/Dockerfile index 3b7b5fb..c8c692c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,81 @@ -FROM node:20-bookworm +FROM node:lts -# Install GitHub Copilot CLI -RUN npm install -g @github/copilot +# Install PHP, Python, DB clients, and general utilities +RUN apt-get update && apt-get install -y --no-install-recommends \ + php php-cli php-common php-mbstring php-xml php-curl php-zip \ + php-pgsql php-mysql php-sqlite3 php-redis \ + python3 python3-pip python3-venv \ + wget apt-transport-https \ + git make jq unzip zip \ + openssh-client \ + default-mysql-client postgresql-client sqlite3 \ + && rm -rf /var/lib/apt/lists/* -# Install useful dev tools -RUN apt-get update && apt-get install -y \ - git \ - curl \ +# Install Docker CLI +RUN curl -fsSL https://download.docker.com/linux/debian/gpg \ + | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo $VERSION_CODENAME) stable" \ + | tee /etc/apt/sources.list.d/docker.list > /dev/null \ + && apt-get update && apt-get install -y --no-install-recommends docker-ce-cli docker-compose-plugin \ && rm -rf /var/lib/apt/lists/* -WORKDIR /workspace +# Install GitHub CLI +RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \ + | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \ + | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ + && apt-get update && apt-get install -y --no-install-recommends gh \ + && rm -rf /var/lib/apt/lists/* + +# Install Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer -CMD ["bash"] +# Install Python tools +RUN pip install --break-system-packages poetry uv + +# Install Spec Kit (specify CLI) +RUN uv tool install specify-cli --from git+https://github.com/github/spec-kit.git + +# Install .NET 10 +RUN wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \ + && dpkg -i packages-microsoft-prod.deb \ + && rm packages-microsoft-prod.deb \ + && apt-get update && apt-get install -y --no-install-recommends dotnet-sdk-10.0 \ + && rm -rf /var/lib/apt/lists/* + +# Install PowerShell +RUN apt-get update && apt-get install -y --no-install-recommends powershell \ + && rm -rf /var/lib/apt/lists/* + +# Install .NET global tools +RUN dotnet tool install --global dotnet-ef \ + && dotnet tool install --global dotnet-aspnet-codegenerator +ENV PATH="$PATH:/root/.dotnet/tools:/root/.local/bin" + +RUN git config --global user.name "Daniel Covington" +RUN git config --global user.email "danielcovington@comcast.net" + + +# Install Node.js global tools +RUN npm install -g @bonsai-ai/cli +RUN npm install -g @abacus-ai/cli +RUN npm install -g @openai/codex +RUN npm install -g @github/copilot + +# Install ttyd (web terminal) +RUN ARCH=$(dpkg --print-architecture) && \ + case "$ARCH" in \ + amd64) TTYD_ARCH="x86_64" ;; \ + arm64) TTYD_ARCH="aarch64" ;; \ + *) echo "Unsupported arch: $ARCH" && exit 1 ;; \ + esac && \ + wget -O /usr/local/bin/ttyd \ + "https://github.com/tsl0922/ttyd/releases/latest/download/ttyd.${TTYD_ARCH}" && \ + chmod +x /usr/local/bin/ttyd + +# Install BMAD-METHOD CLI +RUN npm install -g bmad-method + +WORKDIR /workspace +EXPOSE 7681 +CMD ["ttyd", "-W", "-p", "7681", "bash"] diff --git a/ImportService/TrackingDataImport.vbs b/ImportService/TrackingDataImport.vbs index 628498a..d16e8f7 100644 Binary files a/ImportService/TrackingDataImport.vbs and b/ImportService/TrackingDataImport.vbs differ diff --git a/MVC/lib.Upload.asp b/MVC/lib.Upload.asp index 7cf583c..a1342b5 100644 --- a/MVC/lib.Upload.asp +++ b/MVC/lib.Upload.asp @@ -120,7 +120,7 @@ set fs = Server.CreateObject("Scripting.FileSystemObject") streamFile.SaveToFile path & outLocalFileName, 2 streamFile.close Set streamFile = Nothing - fileItem.Path = path & filename + fileItem.Path = path & outLocalFileName end if end sub @@ -402,4 +402,4 @@ NewFullPath = strSaveToPath & "\" & strTempFileName & Counter & "." & FileExt End If Loop End Function -%> \ No newline at end of file +%> diff --git a/_bmad-output/implementation-artifacts/tech-spec-add-xlsx-jurisdiction-import.md b/_bmad-output/implementation-artifacts/tech-spec-add-xlsx-jurisdiction-import.md new file mode 100644 index 0000000..3f989d4 --- /dev/null +++ b/_bmad-output/implementation-artifacts/tech-spec-add-xlsx-jurisdiction-import.md @@ -0,0 +1,188 @@ +--- +title: 'Add XLSX Jurisdiction Import' +slug: 'add-xlsx-jurisdiction-import' +created: '2026-03-13' +status: 'implemented' +stepsCompleted: [1, 2, 3, 4] +tech_stack: ['Classic ASP', 'VBScript', 'IIS', 'ADO', 'Microsoft Jet/ACE OLEDB', 'FreeASPUpload', 'Session-backed MVC helpers'] +files_to_modify: ['/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp', '/workspace/App/Views/Jurisdiction/import.asp', '/workspace/App/DomainModels/JurisdictionRepository.asp'] +code_patterns: ['Controller action with inline file-processing logic', 'Repository-based persistence with raw SQL and Automapper models', 'Session-backed Flash/FormCache/CSRF helpers', 'Server-rendered forms with HTML helper methods'] +test_patterns: ['ASPUnit helper tests only', 'No existing controller/import coverage', 'Manual IIS verification required for upload/import flows'] +--- + +# Tech-Spec: Add XLSX Jurisdiction Import + +**Created:** 2026-03-13 + +## Overview + +### Problem Statement + +The current jurisdiction import only supports `.csv` and `.txt`, relies on the Jet text driver, and does not persist the imported jurisdiction updates. The business now needs an `.xlsx`-only import flow for a known spreadsheet format that updates the `Jurisdiction` table and gives the user progress feedback while the import runs. + +### Solution + +Replace the current jurisdiction import implementation with an XLSX-based import pipeline that reads a fixed workbook format, skips row 1, uses row 2 as headers, extracts `JCode` and normalized `Name` from the `Jurisdiction` column, joins `City & Township` and `ZIP + 4` into `CSZ`, regenerates `IMB_Digits` and `IMB` using existing logic, updates existing `Jurisdiction` rows by extracted `JCode`, inserts missing `JCode` rows, and exposes AJAX progress updates in the import UI. + +### Scope + +**In Scope:** +- Replace the current import UI and backend flow with `.xlsx`-only support +- Support the known workbook shape represented by `Data\BRM Permit Info February '26 updated.xlsx` +- Ignore row 1 and treat row 2 as the header row +- Extract `JCode` from text inside parentheses in the `Jurisdiction` column +- Normalize `Name` from the text before parentheses +- If the normalized name ends with `CITY`, transform it to `CITY OF ` +- Build `CSZ` from `City & Township` plus `ZIP + 4` +- Update `Mailing_Address`, `CSZ`, `IMB_Digits`, and `IMB` +- Regenerate `IMB` through the existing `GetIMBCodec.EncodeDigits(...)` path +- Add AJAX-driven progress feedback to the import screen + +**Out of Scope:** +- Supporting `.csv` or `.txt` imports on the jurisdiction screen +- Supporting arbitrary workbook layouts or multiple worksheet formats +- Broad refactors to unrelated jurisdiction CRUD features + +## Context for Development + +### Codebase Patterns + +- The current jurisdiction import lives in `JurisdictionController.ImportPost` and uses `FreeASPUpload` plus server-side file processing. +- The current CSV/TXT path already contains business logic for `JCode`, `Name`, `CSZ`, `IMB_Digits`, and `IMB` derivation. +- The repo is a Classic ASP / VBScript application running on IIS with existing shared helpers in `MVC/`. +- Environment-sensitive behavior should stay minimal and localized because this codebase is tightly coupled to Windows/IIS/runtime dependencies. +- Controller methods are allowed to contain substantial workflow logic in this codebase; there is no separate service layer pattern to follow. +- Persistence updates should still flow through `JurisdictionRepository` instead of ad hoc SQL inside views. +- Session-backed helpers already exist for flash state and CSRF tokens, which makes Session a viable anchor for import progress state if the implementation stays inside the web app. +- `MVC/lib.json.asp` exists, so lightweight JSON responses for AJAX polling fit the current stack without introducing a new dependency. + +### Files to Reference + +| File | Purpose | +| ---- | ------- | +| `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` | Current import entry point and existing CSV/TXT derivation logic | +| `/workspace/App/Views/Jurisdiction/import.asp` | Current upload UI to be changed for XLSX and progress feedback | +| `/workspace/App/DomainModels/JurisdictionRepository.asp` | Jurisdiction lookup and update persistence path | +| `/workspace/MVC/lib.Upload.asp` | Existing upload helper used by controller imports | +| `/workspace/MVC/lib.json.asp` | Existing JSON helper if the progress endpoint returns polling status | +| `/workspace/Data/BRM Permit Info February '26 updated.xlsx` | Sample workbook shape to anchor header and column mapping | +| `/workspace/_bmad-output/project-context.md` | Brownfield implementation rules and constraints | + +### Technical Decisions + +- The import screen will become XLSX-only. +- Matching is by extracted `JCode` from the `Jurisdiction` column. +- The implementation must preserve and reuse the existing IMB encoding path rather than inventing a new barcode algorithm. +- Progress feedback is required and should be exposed through AJAX rather than a synchronous full-page post only. +- The current Jet text-driver import path cannot read `.xlsx`; the implementation needs a Windows/IIS-compatible Excel-reading strategy. +- Primary workbook-read strategy should use `Microsoft.ACE.OLEDB.12.0` on Windows/IIS. If ACE is unavailable, the import should fail with a clear user-facing error. +- The controller will likely need to split import work into at least two responsibilities: kickoff/upload and progress/status reporting. +- The repository currently supports `FindByJCode` and `Update`, which is enough for update-by-`JCode` if the controller loads and mutates each row model before persisting. +- There is no existing automated controller/import test pattern, so verification will rely on manual IIS-based import testing plus any helper-level tests that can be isolated. +- The import page should use a kickoff action plus an AJAX polling endpoint. Progress state can be stored in `Session` under a generated import token. +- Because this runs under Classic ASP/IIS, true live per-row progress may be constrained by request/session locking behavior. The implementation should use a two-phase design if needed and may expose checkpoint-based progress if that is the most reliable bounded solution. +- Required workbook headers should be validated before processing begins: `County`, `Jurisdiction`, `Mailing Address`, `City & Township`, `ZIP + 4`, and `Mailer ID Option 1`. +- Rows with extracted `JCode` values not found in `Jurisdiction` should be inserted and counted separately in the final summary. +- If duplicate `JCode` rows appear in the workbook, process them in file order and let the last valid row win while counting duplicates in the final summary. +- Name normalization should trim whitespace and apply the `CITY` rewrite only when the extracted name ends with the standalone word `CITY`. +- Row-level failures should be isolated, counted, and reported in the completion summary rather than aborting the entire import after partial progress. +- Progress state should remain session-scoped rather than being persisted to the database or temp files. +- Persistence should prefer the existing `FindByJCode` + mutate + `JurisdictionRepository.Update` flow before introducing a new repository bulk-update abstraction. +- Header binding should validate the expected row-2 header names and then resolve columns by header names rather than raw column positions only. +- The final import summary should include at minimum: total rows seen, rows updated, rows inserted, duplicate rows encountered, invalid rows skipped, and row-level failures. +- The final result should also expose row-level operator feedback with row number, failure reason, and full imported record details for malformed `Jurisdiction` values, `IMB_Digits` build failures, ACE read failures, and other row-level processing errors. + +## Implementation Plan + +### Tasks + +- [x] Task 1: Replace the current jurisdiction import contract with XLSX-only validation + - File: `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` + - Action: Update `ImportPost` so it only accepts `.xlsx` uploads, removes the CSV/TXT-specific text-driver path, and returns a clear validation error for any non-XLSX file. + - Notes: Keep the existing `FreeASPUpload` flow for multipart upload handling unless the ACE-based workbook read requires a different saved-file path convention. + +- [x] Task 2: Add workbook-reading and header-validation logic for the known spreadsheet format + - File: `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` + - Action: Read the uploaded `.xlsx` workbook through `Microsoft.ACE.OLEDB.12.0`, target the first worksheet, ignore row 1, treat row 2 as headers, and validate the required headers before row processing begins. + - Notes: Fail fast with a user-facing error if ACE is unavailable, the workbook cannot be opened, or required headers are missing. + +- [x] Task 3: Implement row-mapping and normalization rules for jurisdiction updates + - File: `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` + - Action: For each workbook row, extract `JCode` from the `Jurisdiction` value inside parentheses, derive normalized `Name` from the text before parentheses, apply the `CITY` to `CITY OF ...` rewrite when appropriate, join `City & Township` and `ZIP + 4` into `CSZ`, compute `IMB_Digits`, and regenerate `IMB` via `GetIMBCodec.EncodeDigits(...)`. + - Notes: Trim whitespace on all derived values and treat malformed or unparseable rows as row-level failures instead of fatal process errors. + +- [x] Task 4: Persist updates by existing `JCode` and track import result counters + - File: `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` + - File: `/workspace/App/DomainModels/JurisdictionRepository.asp` + - Action: For each valid parsed row, load the existing jurisdiction by `JCode`, mutate the model fields, and call `JurisdictionRepository.Update`; insert missing `JCode` rows with the parsed values; detect duplicates in workbook order and allow the last valid row to win. + - Notes: Only add repository support if a small helper materially reduces controller duplication; otherwise stay with the existing `FindByJCode` + `Update` pattern. + +- [x] Task 5: Introduce bounded progress-state tracking and a polling endpoint + - File: `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` + - Action: Split the import flow into a kickoff path and a progress/status path, storing progress state in `Session` under an import token and returning JSON-compatible status for AJAX polling. + - Notes: If Classic ASP session locking prevents true live row-by-row progress, expose checkpoint-based phases such as `uploaded`, `opening workbook`, `validating headers`, `processing rows`, and `complete`. + +- [x] Task 6: Replace the import page UI with XLSX-only upload and progress display + - File: `/workspace/App/Views/Jurisdiction/import.asp` + - Action: Update the form copy and file input to XLSX-only, add client-side AJAX kickoff/polling behavior, render a progress bar/status area, and display final summary counts plus row-level error details. + - Notes: The UX should remain usable if progress is phase-based rather than exact per-row percentage. + +- [x] Task 7: Define the final operator summary and failure reporting + - File: `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` + - File: `/workspace/App/Views/Jurisdiction/import.asp` + - Action: Return or render a completion result that includes total rows seen, rows updated, rows inserted, duplicate rows encountered, invalid rows skipped, row-level failures, and row-specific error details. + - Notes: Include row number, failure reason, and full record details for malformed `Jurisdiction` values, IMB digit failures, insert/update failures, and workbook-read errors where applicable. + +- [x] Task 8: Update user-facing messaging and implementation notes for runtime dependency risk + - File: `/workspace/App/Views/Jurisdiction/import.asp` + - File: `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` + - Action: Make sure operator-facing errors clearly describe ACE dependency issues and workbook validation failures. + - Notes: This keeps deployment/runtime failures diagnosable without digging through server logs first. + +### Acceptance Criteria + +- [x] AC 1: Given the user opens the jurisdiction import page, when the screen renders, then it only advertises and accepts `.xlsx` uploads. +- [x] AC 2: Given a non-`.xlsx` file is submitted, when the import starts, then the user receives a validation error and no jurisdiction rows are changed. +- [x] AC 3: Given the uploaded workbook cannot be opened through ACE/OLEDB, when the import starts, then the user receives a clear workbook/ACE error and no jurisdiction rows are changed. +- [x] AC 4: Given the workbook is missing one of the required row-2 headers, when validation runs, then the import stops before row processing and reports the missing header(s). +- [x] AC 5: Given a row contains `Jurisdiction` text in the format `ALCONA TOWNSHIP (01040)`, when the row is processed, then `JCode` is parsed as `01040` and `Name` is parsed as `ALCONA TOWNSHIP`. +- [x] AC 6: Given a parsed jurisdiction name ends with the standalone word `CITY`, when normalization runs, then the stored `Name` becomes `CITY OF `. +- [x] AC 7: Given a workbook row has `City & Township` and `ZIP + 4` values, when the row is processed, then the database `CSZ` field is updated with those values joined in the same import flow. +- [x] AC 8: Given a valid workbook row matches an existing jurisdiction by extracted `JCode`, when the row is processed, then `Name`, `Mailing_Address`, `CSZ`, `IMB_Digits`, and `IMB` are updated in the `Jurisdiction` table. +- [x] AC 9: Given a valid workbook row is processed, when `IMB_Digits` is derived, then `IMB` is regenerated using the existing `GetIMBCodec.EncodeDigits(...)` functionality. +- [x] AC 10: Given a workbook row has an extracted `JCode` that does not exist in the database, when the row is processed, then a new `Jurisdiction` row is inserted with the parsed/imported values. +- [x] AC 11: Given the same `JCode` appears more than once in the workbook, when processing completes, then the last valid occurrence wins and duplicates are counted in the final summary. +- [x] AC 12: Given a row has malformed `Jurisdiction` text that cannot produce a valid `JCode`, when the row is processed, then that row is counted as failed or invalid, the import continues with subsequent rows, and the final output includes the full imported record details. +- [x] AC 13: Given the user starts an import, when the operation is in progress, then the page shows AJAX-driven progress feedback for the current import token. +- [x] AC 14: Given true live row-by-row progress is not technically reliable under Classic ASP/IIS, when the import runs, then the user still sees checkpoint-based progress states instead of a frozen screen. +- [x] AC 15: Given the import completes, when final results are shown, then the user sees total rows seen, rows updated, rows inserted, duplicates encountered, invalid rows skipped, and failures. +- [x] AC 16: Given any malformed `Jurisdiction` or `IMB_Digits` build failures occur, when results are shown, then the user can see row numbers, failure reasons, and the full source record for those rows. + +## Additional Context + +### Dependencies + +- Windows/IIS runtime with Classic ASP enabled +- `FreeASPUpload` remains the upload mechanism unless implementation constraints force a localized alternative +- `Microsoft.ACE.OLEDB.12.0` must be installed and available on the target server for workbook access +- Existing `GetIMBCodec.EncodeDigits(...)` functionality must remain available during import processing +- Existing MVC JSON helper in `/workspace/MVC/lib.json.asp` can support polling responses + +### Testing Strategy + +- Manual IIS test: upload a valid copy of [BRM Permit Info February '26 updated.xlsx](/workspace/Data/BRM Permit%20Info%20February%20'26%20updated.xlsx) and verify updated jurisdiction rows in the database +- Manual IIS test: upload a non-XLSX file and verify validation failure +- Manual IIS test: upload a workbook with one required header removed and verify fast-fail header validation +- Manual IIS test: upload a workbook containing malformed `Jurisdiction` values and verify row-level error reporting with continued processing and full source-record details +- Manual IIS test: upload a workbook containing missing `JCode` rows and verify the rows are inserted into `Jurisdiction` +- Manual IIS test: upload a workbook containing invalid `Mailer ID Option 1` or `ZIP + 4` values and verify the full source record is shown in the error output +- Manual IIS test: upload a workbook containing duplicate `JCode` rows and verify the last valid row wins +- Manual IIS test: verify progress bar/status polling updates during import and resolves to a final summary state +- Optional helper-level verification: isolate and test any extracted parsing/normalization helper routines if they are moved out of the controller into reusable VBScript functions + +### Notes + +- Highest implementation risk is the interaction between Classic ASP request lifecycle, Session locking, and AJAX polling; the implementation should prefer a reliable bounded progress model over an unreliable “live” illusion. +- ACE/OLEDB availability is a deployment/runtime dependency, not just a coding detail; missing-provider handling must be first-class. +- Keep the change bounded to the existing jurisdiction import workflow and avoid turning this into a generalized spreadsheet-import framework. +- If the controller becomes too large, extraction into small local helper functions is acceptable, but avoid broad architectural refactors. diff --git a/_bmad-output/planning-artifacts/sprint-change-proposal-2026-03-13.md b/_bmad-output/planning-artifacts/sprint-change-proposal-2026-03-13.md new file mode 100644 index 0000000..13319e5 --- /dev/null +++ b/_bmad-output/planning-artifacts/sprint-change-proposal-2026-03-13.md @@ -0,0 +1,207 @@ +# Sprint Change Proposal + +**Date:** 2026-03-13 +**Feature:** XLSX Jurisdiction Import +**Change Type:** Correct Course during implementation +**Scope Classification:** Minor + +## 1. Issue Summary + +The XLSX jurisdiction import feature was implemented from the original quick spec, but the business rules changed during implementation review. + +New required behavior: + +- malformed `Jurisdiction` rows must show the full imported record, not just row number and reason +- unmatched `JCode` rows must now be inserted into `Jurisdiction` instead of being skipped +- `IMB_Digits` build failures must also show the full imported record + +Context: + +- the current quick spec explicitly says unmatched `JCode` rows should be skipped +- the current implementation summary/error reporting is too terse for operators to identify the bad row without manually reopening the workbook + +Evidence: + +- current spec says unmatched `JCode` rows are skipped +- current implementation logs row-level errors as short messages only +- stakeholder clarified the corrected behavior after implementation had already started + +## 2. Impact Analysis + +### Epic Impact + +No epics or stories artifacts exist for this quick-flow change, so there is no epic backlog to rewrite. + +### Story Impact + +No formal story artifacts exist. The impact is limited to the current quick-spec-driven implementation. + +### Artifact Conflicts + +Affected artifacts: + +- `/workspace/_bmad-output/implementation-artifacts/tech-spec-add-xlsx-jurisdiction-import.md` +- `/workspace/App/Controllers/Jurisdiction/JurisdictionController.asp` +- `/workspace/App/Views/Jurisdiction/import.asp` +- `/workspace/App/DomainModels/JurisdictionRepository.asp` if insert support needs refinement + +Conflicts discovered: + +- current spec says unmatched `JCode` rows should be skipped, but new requirement says they must be inserted +- current spec requires row number and failure reason, but new requirement also needs full row content displayed for specific failures + +### Technical Impact + +- controller logic must change from update-or-skip to update-or-insert +- import summary counters must distinguish `updated` and `inserted` +- row error formatting must include the full workbook row payload for: + - malformed `Jurisdiction` + - IMB digit build failure +- UI summary labels must align with the new counters +- acceptance criteria and task tracking in the quick spec must be corrected + +## 3. Recommended Approach + +### Chosen Path + +**Direct Adjustment** + +### Rationale + +This is a bounded feature correction, not a broad replanning event. The existing implementation is already concentrated in one controller and one view, so the safest path is to update the quick spec and then amend the implementation directly. + +### Effort / Risk + +- **Effort:** Low to Medium +- **Risk:** Medium + +Primary risk areas: + +- insert path must not create malformed or partial `Jurisdiction` records +- operator-facing error rendering must remain readable when full row payloads are shown +- summary counters and wording must stay consistent with the new behavior + +### Timeline Impact + +Small extension to the current implementation pass. No broader program impact identified. + +## 4. Detailed Change Proposals + +### A. Quick Spec Updates + +#### A1. Unmatched `JCode` behavior + +**OLD** + +- Rows with extracted `JCode` values not found in `Jurisdiction` should be skipped and counted in the final summary instead of inserted. +- Acceptance criteria describe unmatched rows as skipped with no insert. + +**NEW** + +- Rows with extracted `JCode` values not found in `Jurisdiction` should be inserted into `Jurisdiction`. +- Final summary should track inserted rows separately from updated rows. + +**Rationale** + +This aligns the artifact with the corrected business rule. + +#### A2. Full-record row errors + +**OLD** + +- Final result exposes row number and failure reason. + +**NEW** + +- Final result exposes row number, failure reason, and the full imported record for failure cases where operator review is needed. + +**Rationale** + +Operators need enough detail to identify and repair bad workbook rows quickly. + +#### A3. IMB digit failure reporting + +**OLD** + +- `IMB_Digits` failures are treated as row-level failures with summary text. + +**NEW** + +- `IMB_Digits` failures must include the full row content in the error output. + +**Rationale** + +The source data causing the failure must be visible without cross-referencing the spreadsheet manually. + +### B. Implementation Updates + +#### B1. Insert-on-missing `JCode` + +**OLD** + +- `FindByJCode` failure increments unmatched count and records an error. + +**NEW** + +- `FindByJCode` failure creates a new jurisdiction model and inserts it using the imported values. +- Import summary tracks `insertedCount`. + +**Rationale** + +This is the main behavioral correction. + +#### B2. Full-row error formatting + +**OLD** + +- Example: `Row 14: Jurisdiction field is missing a code in parentheses.` + +**NEW** + +- Example: `Row 14: Jurisdiction field is missing a code in parentheses. Record: County=..., Jurisdiction=..., Mailing Address=..., City & Township=..., ZIP + 4=..., Mailer ID Option 1=...` + +**Rationale** + +This directly satisfies the new operational requirement. + +#### B3. UI counter updates + +**OLD** + +- `updated`, `unmatched`, `invalid`, `failed`, `duplicates` + +**NEW** + +- `updated`, `inserted`, `invalid`, `failed`, `duplicates` + +**Rationale** + +The UI should reflect what the import actually does. + +## 5. Implementation Handoff + +### Scope + +**Minor** + +### Handoff Recipients + +- Development implementation pass +- Optional technical writer/doc refresh after code is aligned + +### Responsibilities + +- Update quick spec to reflect corrected behavior +- Amend controller logic to insert on missing `JCode` +- Add full-record context to specified error cases +- Update import UI summary wording/counters +- Verify with manual IIS test using the sample workbook and crafted failure rows + +### Success Criteria + +- malformed `Jurisdiction` rows display full record details +- missing `JCode` rows insert new jurisdictions successfully +- IMB digit failures display full record details +- import summary distinguishes updated vs inserted +- quick spec reflects final corrected behavior and task state + diff --git a/_bmad-output/project-context.md b/_bmad-output/project-context.md new file mode 100644 index 0000000..a477143 --- /dev/null +++ b/_bmad-output/project-context.md @@ -0,0 +1,90 @@ +--- +project_name: 'workspace' +user_name: 'Daniel Covington' +date: '2026-03-13' +sections_completed: ['technology_stack', 'language_rules', 'framework_rules', 'testing_rules', 'quality_rules', 'workflow_rules', 'anti_patterns'] +status: 'complete' +rule_count: 23 +optimized_for_llm: true +--- + +# Project Context for AI Agents + +_This file contains critical rules and patterns that AI agents must follow when implementing code in this project. Focus on unobvious details that agents might otherwise miss._ + +--- + +## Technology Stack & Versions + +- Runtime: IIS + Classic ASP on Windows +- Language: VBScript / `.asp` +- Framework: custom MVC helpers under `MVC/` +- Data access: ADO via `App/DAL/lib.DAL.asp` +- Database: Access MDB via Jet/ACE providers +- Reporting/export: ReportMan, Debenu PDF Library, Chilkat COM components +- Testing: ASPUnit served through IIS +- Automation: VBScript and PowerShell scripts outside the web app + +## Critical Implementation Rules + +### Language-Specific Rules + +- Start application `.asp` and `.vbs` files with `Option Explicit`. +- Keep `` directives near the top; include order matters because the app relies on side-effect loading. +- Follow the existing singleton-style factory pattern for repositories instead of introducing new instantiation conventions mid-module. +- Match the nearby VBScript style exactly; there is no formatter protecting consistency. + +### Framework-Specific Rules + +- Web entry starts at `index.asp`, but the real bootstrap is `App/include_all.asp`; changes that depend on shared libraries should be wired there only if they are globally required. +- Routes are initialized by `Routes.Initialize "/App/"`; avoid changing route roots casually because controller links assume that base. +- Controllers typically orchestrate directly and include views inline; do not introduce partial modern abstractions unless they clearly reduce duplication. +- Use existing MVC helpers such as `Automapper`, `Flash`, `FormCache`, and `HTMLSecurity` before inventing parallel helpers. + +### Testing Rules + +- Existing automated coverage is strongest for helper libraries, not end-to-end operational workflows. +- Any change in controller export/proof logic requires manual verification on Windows/IIS even if tests pass. +- Run `Tests/Test_All.asp` through IIS for regression checks when changing shared MVC helpers or utility behavior. + +### Code Quality & Style Rules + +- Preserve PascalCase class and file naming used across controllers, repositories, and view models. +- Keep repository SQL in the repository layer; avoid scattering new raw SQL into views. +- When changing a screen, trace controller, repository, view model, and view together because behavior is distributed across those layers. +- Prefer minimal, local edits over broad refactors; this codebase is highly environment-coupled. + +### Development Workflow Rules + +- Check `App/app.config.asp` before assuming path behavior; `dev` mode changes export locations and runtime assumptions. +- Search both `App/` and `ImportService/` when changing statuses, file names, export behavior, or schema-related fields. +- For schema changes, add a numbered migration under `Data/Migrations/` and then update the affected repository/model code. +- Treat report templates in `Data/*.rep` as part of the runtime contract, not incidental assets. + +### Critical Don't-Miss Rules + +- Do not commit new secrets, unlock keys, credentials, or machine-specific paths. Existing hard-coded values are legacy constraints, not a pattern to extend. +- Do not assume Linux validation is enough. COM, IIS, Jet/ACE, report generation, and network shares are Windows-only concerns here. +- Do not rename or normalize status strings without global search; automation scripts appear to branch on exact textual statuses. +- Do not change export filenames or folder structures without auditing downstream consumers such as SnailWorks and import-service scripts. +- Do not move shared includes or bootstrap files casually; many files rely on implicit availability of globals and helpers. +- Be careful with view file names: there are similarly named templates such as `CreateKit.asp` and `CreateTrackingKit.asp`, and controllers include them directly. + +--- + +## Usage Guidelines + +**For AI Agents:** + +- Read this file before implementing any code. +- Prefer the existing Classic ASP patterns over introducing modern architecture unless explicitly requested. +- When unsure, choose the option that minimizes environment risk and preserves current operational behavior. +- Update this file if you discover a repeated brownfield rule that would prevent future mistakes. + +**For Humans:** + +- Keep this file lean and focused on non-obvious implementation constraints. +- Update it when environment behavior, schema patterns, or core workflow conventions change. +- Re-check it before delegating larger brownfield changes to an AI agent. + +Last Updated: 2026-03-13 diff --git a/codex.cmd b/codex.cmd deleted file mode 100644 index 0d28390..0000000 --- a/codex.cmd +++ /dev/null @@ -1,3 +0,0 @@ -mkdir .\volumes\codex_home -docker compose up -d --build -docker compose exec codex bash \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 792e334..9967b38 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,9 @@ services: - devcontainer: + bonsai: build: . - container_name: tracking-dev + container_name: ai-bmad-tracking-kits volumes: - .:/workspace - working_dir: /workspace - stdin_open: true - tty: true - + - /var/run/docker.sock:/var/run/docker.sock + ports: + - "7681:7681" \ No newline at end of file diff --git a/docs/api-contracts.md b/docs/api-contracts.md new file mode 100644 index 0000000..07d5edf --- /dev/null +++ b/docs/api-contracts.md @@ -0,0 +1,107 @@ +# tracking_kits - Route and Integration Contracts + +**Date:** 2026-03-13 + +## Important Note + +This project does not expose a conventional JSON REST API. Its primary contract surface is a set of Classic ASP controller routes that render HTML pages and process form submissions. In addition, it has file-based export/import interfaces used by batch automation. + +## Web Route Surface + +Routing is initialized by [../App/app.config.asp](../App/app.config.asp), and requests are dispatched from controller ASP files under `App/Controllers`. + +### HomeController + +- `Index` + - Purpose: render the switchboard/home screen +- `CreateKit` + - Purpose: list jurisdictions with pagination for kit creation +- `Search` + - Purpose: search jurisdictions by `JCode`, `Name`, address fields, and IMB values +- `Print` + - Purpose: render a sample/report PDF using `Label_Report.rep` + +### KitController + +- `Index` + - Purpose: paged list of kits +- `Search` + - Purpose: search kits by `ID`, `JobNumber`, and `JCode` +- `SwitchBoardIndex` + - Purpose: operational list for label-based kits +- `SwitchBoardEdit` + - Purpose: edit/view a single kit switchboard entry +- `SwitchBoardPurpleEnvelopsIndex` + - Purpose: list purple-envelope kits +- `SwitchBoardPurpleEnvelopeEdit` + - Purpose: edit purple-envelope kit details, color options, and precinct color data +- `SwitchBoardPurpleEnvelopeEditPost` + - Purpose: update purple-envelope form fields and status +- `AssignKitColorPost` + - Purpose: assign a color to all labels/records in a kit +- `AssignPrecinctColorsPost` + - Purpose: assign colors at the precinct level +- `ExportTrackingLabels(id)` + - Purpose: generate and move a kit label PDF +- `ExportSnailWorksTracking(id)` + - Purpose: generate SnailWorks CSV export data + +### Other Controllers + +The repository structure implies standard CRUD routes for: + +- `JurisdictionController` +- `ContactsController` +- `InkjetRecordsController` +- `SettingsController` +- `CustomOfficeCopyJobController` +- `KitLabelsController` + +These are primarily view-rendering and form-post endpoints. + +## Form / POST Contracts + +Observed POST patterns: + +- Classic HTML forms +- anti-CSRF tokens managed by `HTMLSecurity.SetAntiCSRFToken` +- redirect-on-success flow with flash messaging +- model hydration via `Automapper.AutoMap(Request.Form, model)` + +## File-Based Integration Contracts + +### Tracking Label PDF Export + +- Triggered from kit workflows +- Uses `Data/Label_Report.rep` +- Writes PDF output to app-local `Data/` temporarily +- Moves final artifact into `ExportDirectory\\...` + +### SnailWorks Export + +- Generates CSV files per kit +- Includes a header section plus detail records +- Output path depends on configured `ExportDirectory` + +### Inkjet Export / Proof / Import Processing + +- `ImportService/TrackingDataImport.vbs` performs status-driven processing +- Outputs CSV and PDF artifacts +- Reads and writes from configured directories and network shares +- Uses COM-based CSV/report/SFTP functionality + +## Security and Validation Notes + +- CSRF checks are present for important form posts. +- Input validation exists unevenly; some validation calls are commented out in controllers. +- There is no API schema enforcement layer; the contract is defined by forms, SQL expectations, and downstream file formats. + +## Change Guidance + +- Treat controller action names, form field names, status strings, and export file names as part of the operational contract. +- Before changing an export format, inspect both web controllers and import-service scripts. +- Before changing a status value, search for every status-dependent branch in both `App/` and `ImportService/`. + +--- + +_Generated for brownfield analysis._ diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..c40ccaa --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,131 @@ +# tracking_kits - Architecture + +**Date:** 2026-03-13 +**Application Type:** Single-part Classic ASP web application + +## Executive Summary + +`tracking_kits` is a server-rendered IIS application that manages operational workflows around election mail pieces. It combines browser-driven CRUD screens with file-system side effects and batch automation. The architecture is straightforward but environment-sensitive: controllers render views and call repositories, while proofs, inkjet exports, and tracking exports rely on COM libraries, report templates, and Windows file shares. + +## Runtime Flow + +1. IIS serves [../index.asp](../index.asp). +2. `index.asp` redirects to [../App/Controllers/Home/HomeController.asp](../App/Controllers/Home/HomeController.asp). +3. The controller includes [../App/include_all.asp](../App/include_all.asp), which loads the MVC framework, DAL, app config, and all repositories. +4. `Routes.Initialize "/App/"` from [../App/app.config.asp](../App/app.config.asp) establishes route resolution for controller files under `App/`. +5. Controller actions populate view-model objects and include `.asp` view templates. +6. Repositories issue SQL through `DAL.Query`, `DAL.Execute`, and `DAL.PagedQuery`. +7. Some controller actions and automation scripts create files, call report engines, and move outputs into export directories. + +## Major Architectural Pieces + +### Presentation Layer + +- Controller classes live under `App/Controllers/*`. +- Views live under `App/Views/*`. +- View-model types live under `App/ViewModels/*`. +- Shared layout fragments live in `App/Views/Shared/`. + +This layer is synchronous and page-oriented. There is no client-side SPA architecture in the codebase. + +### Application/Workflow Layer + +Controller actions contain most orchestration logic. Key examples: + +- `HomeController.CreateKit` and `HomeController.Search` drive jurisdiction lookup for kit creation. +- `KitController.SwitchBoardIndex` and `SwitchBoardPurpleEnvelopsIndex` drive operational dashboards. +- `KitController.ExportTrackingLabels` renders a report to PDF and moves it into an export folder. +- `KitController.ExportSnailWorksTracking` writes CSV exports from repository-provided data. +- Purple-envelope color assignment logic is handled directly in controller POST actions. + +### Persistence Layer + +- ADO access is centralized in `App/DAL/lib.DAL.asp`. +- Repositories under `App/DomainModels/` contain raw SQL and map records into model classes. +- Pagination and search are implemented inside repositories rather than a service layer. +- The database appears to be an Access MDB with migrations tracked in `Data/Migrations`. + +### Shared Framework Layer + +The `MVC/` directory provides reusable infrastructure: + +- `lib.MVC.asp` and `lib.Routes.asp` for dispatch/routing +- `lib.Automapper.asp` for record/form mapping +- `lib.HTMLSecurity.asp` for anti-CSRF helpers +- `lib.Flash.asp`, `lib.FormCache.asp`, `lib.Helpers.asp`, `lib.Collections.asp`, and related helpers + +This shared code is effectively the application's internal framework. + +### Batch / Integration Layer + +- `ImportService/TrackingDataImport.vbs` handles import/export/proof workflows outside HTTP requests. +- PowerShell and VBScript utilities exist for address updates, service installation, and batch processing. +- COM libraries provide CSV, SFTP, report, and PDF functionality. + +## Data Architecture + +The schema is migration-driven. Core tables inferred from migrations and repositories: + +- `Jurisdiction` +- `Contact` +- `Settings` +- `Kit` +- `Kit_Labels` / `KitLabels` +- `InkJetRecords` +- `CustomOfficeCopyJob` +- `Colors` + +Relationships are implied through foreign-key migrations and repository joins, especially around kits, labels, inkjet records, contacts, and jurisdictions. + +## Route / Action Design + +This app exposes controller-action routes rather than a versioned API. The practical contract surface is: + +- User-facing pages under `Home`, `Kit`, `Jurisdiction`, `Contacts`, `Settings`, `InkjetRecords`, and `CustomOfficeCopyJob` +- Form POST actions guarded by anti-CSRF tokens +- Operational actions that change status and produce files + +There is no evidence of JSON APIs being a primary integration mechanism. + +## External Dependencies and Constraints + +### Windows / IIS + +- Runtime assumes IIS + Classic ASP. +- Paths in config and scripts reference drive letters and UNC shares. +- End-to-end behavior depends on Windows COM registration. + +### COM / ActiveX + +- ReportMan for report rendering +- Debenu PDF Library for PDF operations +- Chilkat libraries for unlockable COM features and SFTP/CSV support + +### File-System Coupling + +- Export folders are created on demand. +- Existing files may be deleted and replaced. +- Generated artifacts move between local app paths and shared export directories. + +## Security and Operational Risks + +- Environment-specific values and secrets are embedded in code/config scripts today. +- File-system writes and network share access are central to the workflow and are hard to test in isolation. +- Business logic is distributed across controllers and external scripts, so changes often require cross-file tracing. + +## Testing Strategy + +- Helper/framework tests exist through ASPUnit. +- There is little evidence of automated coverage for end-to-end kit/proof/export workflows. +- High-confidence changes in controller/export logic will require manual IIS-based verification on Windows. + +## Change Guidance + +- For UI flow changes, inspect the controller, view model, view, and repository together. +- For export/proof changes, inspect both web controllers and `ImportService/TrackingDataImport.vbs`. +- For schema changes, add a migration under `Data/Migrations` and update the affected repository/model classes. +- For environment changes, audit `App/app.config.asp`, import scripts, and any hard-coded paths or COM usage. + +--- + +_Generated for brownfield analysis._ diff --git a/docs/component-inventory.md b/docs/component-inventory.md new file mode 100644 index 0000000..902f2d4 --- /dev/null +++ b/docs/component-inventory.md @@ -0,0 +1,138 @@ +# tracking_kits - Component Inventory + +**Date:** 2026-03-13 + +## Controllers + +### Home + +- [../App/Controllers/Home/HomeController.asp](../App/Controllers/Home/HomeController.asp) +- Responsibilities: + - Render the switchboard + - Search jurisdictions + - Start the create-kit flow + - Demo PDF/report generation + +### Kit + +- [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) +- Responsibilities: + - Kit switchboard pages + - Purple-envelope operational screens + - Kit edit/update flows + - Label PDF export + - SnailWorks export generation + - Color assignment and related POST actions + +### Other Domain Controllers + +- `JurisdictionController` +- `InkjetRecordsController` +- `ContactsController` +- `SettingsController` +- `CustomOfficeCopyJobController` +- `KitLabelsController` + +These appear to follow the same CRUD-oriented MVC pattern used elsewhere in the app. + +## Repository Components + +### Core Repositories + +- `JurisdictionRepository` +- `KitRepository` +- `KitLabelsRepository` +- `InkjetRecordsRepository` +- `SettingsRepository` +- `ContactsRepository` +- `SnailWorksRepository` +- `CustomOfficeCopyJobRepository` +- `ColorsRepository` + +### Shared Characteristics + +- Model classes and repository classes live in the same file. +- SQL is embedded directly in repository methods. +- Pagination, search, and mapping are implemented per repository. +- Repositories are exposed through singleton-style factory functions. + +## View Models + +View models under `App/ViewModels/` shape data for server-side rendering. Notable classes are used for: + +- paged index screens +- switchboard screens +- per-domain CRUD forms +- purple envelope and inkjet workflows + +## UI Surfaces + +### Shared Layout + +- [../App/Views/Shared/layout.header.asp](../App/Views/Shared/layout.header.asp) +- [../App/Views/Shared/layout.footer.asp](../App/Views/Shared/layout.footer.asp) + +### Home Screens + +- switchboard index +- create kit +- create tracking kit + +### Kit Screens + +- kit CRUD pages +- switchboard list/edit pages +- purple envelope switchboard list/edit pages + +### Other Screens + +- jurisdiction CRUD/import pages +- contacts CRUD pages +- inkjet record CRUD pages +- settings CRUD pages +- custom office copy job pages + +## Shared Framework Components + +The `MVC/` directory provides reusable infrastructure rather than business-domain components: + +- routing and dispatch +- automapper +- HTML helpers +- anti-CSRF/security helpers +- flash messages and form cache +- collections and enumerable helpers +- upload, strings, validations, JSON support + +## Automation / Batch Components + +### Import Service + +- [../ImportService/TrackingDataImport.vbs](../ImportService/TrackingDataImport.vbs) +- Handles polling/status-driven operations outside the web request lifecycle. + +### Supporting Scripts + +- `InstallService.vbs` +- `Data/Update_Addresses.ps1` +- `App/ScaffoldRepo.vbs` + +## Reporting Assets + +- `Data/Label_Report.rep` +- `Data/Proofs.rep` +- `Data/Office-Copy-Proof.rep` +- `Data/Custom Office Copies Proof.rep` + +These files are operational assets, not just documentation or samples. Controller and script behavior depends on them. + +## Reuse Guidance + +- New CRUD-style features should follow the existing controller/view/repository/view-model grouping pattern. +- Reuse shared layout includes and MVC helpers instead of inventing alternate rendering patterns. +- Reuse repository paging/search conventions if extending list screens. +- Reuse migration numbering conventions for schema changes. + +--- + +_Generated for brownfield analysis._ diff --git a/docs/data-models.md b/docs/data-models.md new file mode 100644 index 0000000..957dda6 --- /dev/null +++ b/docs/data-models.md @@ -0,0 +1,132 @@ +# tracking_kits - Data Models + +**Date:** 2026-03-13 + +## Database Overview + +The project uses an Access database accessed through ADO. The authoritative schema history lives in [../Data/Migrations](../Data/Migrations). Repository SQL and migration names indicate a relational model centered on jurisdictions, kits, labels, contacts, settings, inkjet records, and custom office copy jobs. + +## Core Tables + +### Jurisdiction + +Primary fields observed in `JurisdictionRepository`: + +- `JCode` +- `Name` +- `Mailing_Address` +- `CSZ` +- `IMB` +- `IMB_Digits` + +Later migrations indicate additional fields such as `Title`. + +**Role:** Master data for election jurisdictions and mailing identity information. + +### Contact + +Created in migration 02 and joined from import/export logic. + +**Role:** Contact and addressing data associated with a jurisdiction. + +### Settings + +Created in migration 03 and used by `SettingsRepository`. + +**Role:** Application configuration stored in the database, including STID-related values referenced by kit workflows. + +### Kit + +Observed fields in `KitRepository` and migrations: + +- `ID` +- `JobNumber` +- `JCode` +- `CreatedOn` +- `LabelsPrinted` +- `ExportedToSnailWorks` +- `InkJetJob` +- `JobType` +- `Filename` +- `Cass` +- `Status` +- `OutboundSTID` +- `InboundSTID` +- `OfficeCopiesAmount` + +**Role:** Central workflow entity representing a print/export job for a jurisdiction. + +### KitLabels + +Created in migration 05 and counted in kit switchboard queries. + +**Role:** Individual label records associated with a kit. + +### InkJetRecords + +Created in migration 09 and extended later with `KitLabelID` and `ColorId`. + +**Role:** Inkjet output records tied to kits and, later, colors and label relationships. + +### CustomOfficeCopyJob + +Created in migration 18. + +**Role:** Tracks custom office copy proof/export work outside the standard label path. + +### Colors + +Created in migration 19. + +**Role:** Lookup table used for purple-envelope color assignment and inkjet record coloring. + +## Relationship Summary + +- `Kit.JCode` links kits to a jurisdiction. +- `KitLabels.KitId` links labels to a kit. +- `InkJetRecords.KitId` links inkjet records to a kit. +- Later migrations add relationship and foreign-key support between key tables. +- Contacts appear tied to jurisdictions through a jurisdiction code field. +- Custom office copy jobs appear tied to jurisdiction and batch-processing state. + +## Migration History + +Notable schema evolution based on migration names: + +1. Create `Jurisdiction` +2. Create `Contact` +3. Create `Settings` +4. Create `Kit` +5. Create `Kit_Labels` +6. Alter `Kit` +7. Alter `Kit` labels/settings behavior +8. Add inkjet job to `Kit` +9. Create `InkJetRecords` +10. Add table relations +11. Add foreign keys +12. Add type to `Kit` +13. Add file/cass fields to `Kit` +14. Add STIDs to `Kit` +15. Add `KitLabelID` to `InkJetRecords` +16. Add title to `Jurisdiction` +17. Add office copies amount to `Kit` +18. Create `CustomOfficeCopyJob` +19. Create `Colors` +20. Add `ColorId` to `InkJetRecords` + +## Data Access Patterns + +- Repositories use direct SQL strings and `Automapper.AutoMap`. +- Search methods build `LIKE` queries from controller-provided values. +- Pagination relies on `DAL.PagedQuery`. +- Validation is light and often commented out in controller flows. + +## Change Guidance + +- Treat migrations as the source of truth for schema evolution. +- If a repository query changes shape, verify all views and export scripts using that entity. +- Search both `App/` and `ImportService/` before renaming fields or changing status semantics. + +--- + +_Generated for brownfield analysis._ diff --git a/docs/development-guide.md b/docs/development-guide.md new file mode 100644 index 0000000..65a7441 --- /dev/null +++ b/docs/development-guide.md @@ -0,0 +1,81 @@ +# tracking_kits - Development Guide + +**Date:** 2026-03-13 + +## Prerequisites + +- Windows host with IIS +- Classic ASP enabled in IIS +- Access/Jet or ACE provider available +- COM dependencies installed if you need to exercise print/proof/export features +- Access to required local drives or network shares for non-dev environments + +## Local Setup + +1. Configure an IIS site whose root points to the repository root. +2. Confirm `index.asp` is configured as the default document. The repo `web.config` already adds it. +3. Enable Classic ASP in IIS. +4. Review [../App/app.config.asp](../App/app.config.asp): + - `Routes.Initialize "/App/"` + - `dev` flag selection + - `ExportDirectory` mapping + - external CSS/JS URLs +5. If you need export/proof behavior, ensure the dependencies in [../Dependancies](../Dependancies) are present and registered appropriately on the machine. + +## Running the Application + +- Browse the IIS site root. +- The browser is redirected from `index.asp` into the Home controller. +- Use the switchboard UI to access kit creation, tracking kits, purple envelope jobs, and custom office copy jobs. + +## Running Tests + +- Open [../Tests/Test_All.asp](../Tests/Test_All.asp) through IIS. +- Expect coverage to focus on helper libraries and low-level utilities rather than full application workflows. + +## Working with the Database + +- The app uses repositories and ADO, not an ORM. +- Sample MDB files exist in `Data/`. +- Schema evolution is implemented in [../Data/Migrations](../Data/Migrations). +- Before changing a repository query, inspect the corresponding migration history and view usage. + +## Working with Reports and Exports + +- Report definitions live in `Data/*.rep`. +- PDF/export code appears in `KitController` and import-service scripts. +- Many of these flows depend on file-system writes and COM objects, so static edits should be followed by manual Windows verification. + +## Common Brownfield Change Workflow + +1. Identify the entry controller action and matching view. +2. Trace the repository calls and any related view-model class. +3. Check whether the same business rule also exists in `ImportService/`. +4. If persistence changes are needed, add a migration and update repository SQL. +5. Run helper tests if applicable. +6. Manually verify the affected page or export flow in IIS on Windows. + +## Code Conventions Observed + +- Use `Option Explicit` at the top of ASP/VBScript files. +- Keep `` directives near the top. +- Follow existing PascalCase naming for classes and descriptive file names. +- Match the surrounding indentation and spacing style. +- Avoid introducing new abstractions unless they reduce repeated controller/repository patterns. + +## Environment Caveats + +- `App/app.config.asp` embeds environment switching and COM unlock behavior. +- `ImportService/TrackingDataImport.vbs` contains separate path/config handling from the web app. +- This workspace cannot validate IIS, COM registration, Jet/ACE, or network-share access. + +## Recommended Validation by Change Type + +- **View-only changes:** Manual browser verification in IIS. +- **Controller/repository changes:** Browser verification plus targeted test runner pass if helper code changes. +- **Schema changes:** Migration review, repository validation, and manual smoke test. +- **Proof/export changes:** Windows-only manual verification of generated files and downstream handoff behavior. + +--- + +_Generated for brownfield analysis._ diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..47bba49 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,72 @@ +# tracking_kits Documentation Index + +**Type:** monolith +**Primary Language:** Classic ASP / VBScript +**Architecture:** MVC-style server-rendered web application with repository-backed data access +**Last Updated:** 2026-03-13 + +## Project Overview + +`tracking_kits` is a Windows-hosted Classic ASP application for election mail operations. It helps staff create mail tracking kits, generate proofs, prepare inkjet output files for printers, and export tracking data for downstream mail-tracking systems such as SnailWorks. + +The application is not a modern REST service. It is a server-rendered IIS site that routes requests into controller `.asp` files, renders views from `App/Views`, and accesses an Access/Jet database through repository classes under `App/DomainModels`. + +## Quick Reference + +- **Entry Point:** [../index.asp](../index.asp) +- **Primary Bootstrap:** [../App/include_all.asp](../App/include_all.asp) +- **Route Initialization:** [../App/app.config.asp](../App/app.config.asp) +- **MVC Framework:** [../MVC](../MVC) +- **Application Code:** [../App](../App) +- **Database Migrations:** [../Data/Migrations](../Data/Migrations) +- **Import/Automation:** [../ImportService](../ImportService) +- **Tests:** [../Tests](../Tests) + +## Generated Documentation + +- [Project Overview](./project-overview.md) - Purpose, classification, stack, and major capabilities. +- [Source Tree Analysis](./source-tree-analysis.md) - Annotated repo layout and critical folders. +- [Architecture](./architecture.md) - Runtime architecture, request flow, dependencies, and constraints. +- [Development Guide](./development-guide.md) - Local setup, IIS assumptions, test execution, and change workflow. +- [Component Inventory](./component-inventory.md) - Controllers, repositories, UI surfaces, shared libraries, and automation components. +- [Data Models](./data-models.md) - Core tables, relationships, and migration history. +- [API Contracts](./api-contracts.md) - Route/action surface and non-HTTP export interfaces. +- [Module Map](./module-map.md) - Feature-by-feature guide to the files you should open first when making changes. + +## Existing Documentation + +- [README.md](../README.md) - Short project summary and current running notes. +- [AGENTS.md](../AGENTS.md) - Repository conventions and BMAD skill instructions used in this workspace. + +## Getting Started + +### Runtime Prerequisites + +- Windows with IIS and Classic ASP enabled +- Access/Jet or ACE database provider +- COM components used by the app registered on the host if you need printing/export features +- Access to the configured export/import network shares in non-dev environments + +### Local Development + +1. Point an IIS site at the repository root. +2. Ensure `index.asp` is a default document and Classic ASP is enabled. +3. Review [../App/app.config.asp](../App/app.config.asp) for the active `dev` mode and export directory mapping. +4. If you need printer/proof/export behavior, verify the COM dependencies under [../Dependancies](../Dependancies) are installed and licensed. + +### Tests + +- Open [../Tests/Test_All.asp](../Tests/Test_All.asp) through IIS to run the ASPUnit suite. +- The automated tests primarily cover helper libraries, not the full application workflow. + +## For Brownfield Changes + +- Read [architecture.md](./architecture.md) first for the request/data flow. +- Read [module-map.md](./module-map.md) next if you already know which feature area you need to change. +- Read [data-models.md](./data-models.md) before touching repositories or migrations. +- Read [development-guide.md](./development-guide.md) before changing environment-sensitive code. +- Read [_bmad-output/project-context.md](../_bmad-output/project-context.md) before asking an AI agent to implement changes. + +--- + +_Documentation generated for brownfield analysis._ diff --git a/docs/module-map.md b/docs/module-map.md new file mode 100644 index 0000000..be78e68 --- /dev/null +++ b/docs/module-map.md @@ -0,0 +1,284 @@ +# tracking_kits - Module Map + +**Date:** 2026-03-13 + +This guide is the shortest path into the codebase when you need to change a specific feature area. It is organized by module and operational workflow rather than by folder alone. + +## Fastest Starting Points + +If you need to make a change, start here first: + +- **Kit creation / label workflows:** [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) +- **Jurisdiction search / import:** [../App/Controllers/Jurisdiction/JurisdictionController.asp](../App/Controllers/Jurisdiction/JurisdictionController.asp) +- **Proof/export behavior:** [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) and [../ImportService/TrackingDataImport.vbs](../ImportService/TrackingDataImport.vbs) +- **Inkjet / color assignment:** [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) and [../App/DomainModels/InkjetRecordsRepository.asp](../App/DomainModels/InkjetRecordsRepository.asp) +- **Database/schema behavior:** [../Data/Migrations](../Data/Migrations) and the matching repository under [../App/DomainModels](../App/DomainModels) + +## 1. Kit Module + +### What it owns + +- creating tracking kits +- creating label records for a kit +- operational switchboard screens +- purple-envelope workflows +- SnailWorks export +- label PDF export +- status transitions on kits + +### Main files + +- [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) +- [../App/DomainModels/KitRepository.asp](../App/DomainModels/KitRepository.asp) +- [../App/DomainModels/KitLabelsRepository.asp](../App/DomainModels/KitLabelsRepository.asp) +- [../App/DomainModels/SnailWorksRepository.asp](../App/DomainModels/SnailWorksRepository.asp) +- [../App/Views/Kit/CreateTrackingKit.asp](../App/Views/Kit/CreateTrackingKit.asp) +- [../App/Views/Kit/SwitchBoardIndex.asp](../App/Views/Kit/SwitchBoardIndex.asp) +- [../App/Views/Kit/SwitchBoardEdit.asp](../App/Views/Kit/SwitchBoardEdit.asp) +- [../App/Views/Kit/SwitchBoardPurpleEnvelopeEdit.asp](../App/Views/Kit/SwitchBoardPurpleEnvelopeEdit.asp) + +### Read order + +1. `KitController.CreateTrackingKit` / `CreatePost` / `CreateTrackingKitPost` +2. `KitRepository.AddNew` +3. `KitLabelsRepository.BulkAdd` +4. `ExportTrackingLabels` and `ExportSnailWorksTracking` +5. matching view template + +### Important coupling + +- `CreatePost` creates a kit, bulk-creates labels, then immediately generates export artifacts. +- `CreateTrackingKitPost` creates the kit and labels but does not call the export methods. +- `SwitchBoardEdit` is the main inspection screen for label-based kits. +- `SwitchBoardPurpleEnvelopeEdit` combines kit data, STID choices, color lists, and precinct-level color data in one page model. +- Purple-envelope color changes are persisted through `InkjetRecordsRepository`, not `KitRepository`. + +### Hotspots to treat carefully + +- status strings such as `Ready to Assign Labels` and `Ready To Assign STIDS` +- export filenames and folder structure +- any change to `JobType`, `OutboundSTID`, `InboundSTID`, or `OfficeCopiesAmount` +- label creation count and bulk-add behavior + +## 2. Jurisdiction Module + +### What it owns + +- jurisdiction CRUD +- jurisdiction search +- jurisdiction-linked contact display +- jurisdiction file import +- entry path into kit creation + +### Main files + +- [../App/Controllers/Jurisdiction/JurisdictionController.asp](../App/Controllers/Jurisdiction/JurisdictionController.asp) +- [../App/DomainModels/JurisdictionRepository.asp](../App/DomainModels/JurisdictionRepository.asp) +- [../App/DomainModels/ContactsRepository.asp](../App/DomainModels/ContactsRepository.asp) +- [../App/Views/Jurisdiction/index.asp](../App/Views/Jurisdiction/index.asp) +- [../App/Views/Jurisdiction/edit.asp](../App/Views/Jurisdiction/edit.asp) +- [../App/Views/Jurisdiction/import.asp](../App/Views/Jurisdiction/import.asp) +- [../App/Views/Home/CreateTrackingKit.asp](../App/Views/Home/CreateTrackingKit.asp) + +### Read order + +1. `JurisdictionController.Index` / `Search` +2. `JurisdictionRepository.FindPaged` / `SearchTablePaged` +3. `JurisdictionController.ImportPost` if the change involves file import +4. related edit/create views + +### Important coupling + +- Search fields are hard-coded in both `HomeController.Search` and `JurisdictionController.Search`. +- `JurisdictionController.Edit` also loads related contacts. +- `ImportPost` is one of the denser controller methods in the app: it handles file upload validation, file rewrite, Jet text-driver parsing, SQL projection, and then persistence/import behavior. +- The kit-creation chooser in the Home area links into `KitController.createTrackingKit` by `JCode`. + +### Hotspots to treat carefully + +- import file format assumptions: accepted extensions, header handling, tab-vs-delimited mode +- SQL expressions that derive `JCODE`, `Name`, `CSZ`, and `IMB_Digits` +- any field rename touching both repository SQL and import mapping + +## 3. Inkjet / Purple Envelope Module + +### What it owns + +- inkjet record CRUD +- precinct-level data for purple-envelope jobs +- color assignment per kit or precinct + +### Main files + +- [../App/Controllers/InkjetRecords/InkjetRecordsController.asp](../App/Controllers/InkjetRecords/InkjetRecordsController.asp) +- [../App/DomainModels/InkjetRecordsRepository.asp](../App/DomainModels/InkjetRecordsRepository.asp) +- [../App/Views/Kit/SwitchBoardPurpleEnvelopeEdit.asp](../App/Views/Kit/SwitchBoardPurpleEnvelopeEdit.asp) +- [../App/DomainModels/ColorsRepository.asp](../App/DomainModels/ColorsRepository.asp) + +### Read order + +1. `KitController.SwitchBoardPurpleEnvelopeEdit` +2. `InkjetRecordsRepository.GetDistinctPrecinctsByKitId` +3. `AssignKitColorPost` / `AssignPrecinctColorsPost` +4. `InkjetRecordsRepository.UpdateColorForKit` / `UpdateColorForPrecinct` + +### Important coupling + +- purple-envelope UI reads colors and precinct data live in the view +- current color names are resolved inside the template using `ColorsRepository.FindByID` +- the kit edit flow and the precinct color flow share the same screen but use separate forms and anti-CSRF tokens + +### Hotspots to treat carefully + +- precinct key naming convention: `PrecinctColor_` +- `ColorId` propagation rules +- query performance if precinct count grows, because the view performs color lookups during rendering + +## 4. Export / Proof Module + +### What it owns + +- label PDF generation +- SnailWorks CSV export +- report template usage +- file movement into export directories + +### Main files + +- [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) +- [../App/DomainModels/SnailWorksRepository.asp](../App/DomainModels/SnailWorksRepository.asp) +- [../Data/Label_Report.rep](../Data/Label_Report.rep) +- [../Data/Proofs.rep](../Data/Proofs.rep) +- [../Data/Office-Copy-Proof.rep](../Data/Office-Copy-Proof.rep) +- [../Data/Custom Office Copies Proof.rep](../Data/Custom%20Office%20Copies%20Proof.rep) + +### Read order + +1. `ExportTrackingLabels` +2. `ExportSnailWorksTracking` +3. `SnailWorksRepository.GetSnailWorksExportById` +4. report template file referenced by the action + +### Important coupling + +- export methods depend on `ExportDirectory` from [../App/app.config.asp](../App/app.config.asp) +- label PDF generation uses a temporary file in `Data\` before moving it to the final folder +- SnailWorks header values are partially hard-coded inside repository SQL +- SnailWorks detail records join `InkjetRecords`, `KitLabels`, and `Kit` + +### Hotspots to treat carefully + +- COM object availability and provider connection strings +- jurisdiction-based folder naming +- hard-coded user IDs, emails, and export metadata in `SnailWorksRepository` +- file overwrite/delete behavior before new export generation + +## 5. Import Service / Batch Automation Module + +### What it owns + +- status-driven processing outside the web app +- custom office copy proof generation +- export/import batch processing +- downstream handoff logic such as SFTP and file polling + +### Main files + +- [../ImportService/TrackingDataImport.vbs](../ImportService/TrackingDataImport.vbs) +- [../InstallService.vbs](../InstallService.vbs) +- [../CiCd](../CiCd) + +### What to know before editing + +- this script is effectively a second application with its own environment config +- it contains hard-coded path, provider, and external integration behavior separate from `App/app.config.asp` +- the file is encoded differently from most repo files and is harder to inspect casually +- status transitions used here overlap with values set in web controllers + +### Hotspots to treat carefully + +- any status name change +- any path or folder naming change +- proof/export file naming conventions +- any change to custom office copy jobs + +## 6. Shared Framework Module + +### What it owns + +- routing and dispatch +- HTML helpers and form generation +- anti-CSRF tokens +- automapping of forms and recordsets +- utility collections/helpers used across the app + +### Main files + +- [../MVC/lib.MVC.asp](../MVC/lib.MVC.asp) +- [../MVC/lib.Routes.asp](../MVC/lib.Routes.asp) +- [../MVC/lib.HTML.asp](../MVC/lib.HTML.asp) +- [../MVC/lib.HTMLSecurity.asp](../MVC/lib.HTMLSecurity.asp) +- [../MVC/lib.Automapper.asp](../MVC/lib.Automapper.asp) +- [../MVC/lib.all.asp](../MVC/lib.all.asp) + +### When to open this module + +- form helpers render incorrectly +- anti-CSRF handling breaks +- controller dispatch or route generation is wrong +- multiple features fail in the same infrastructural way + +## 7. Schema / Data Evolution Module + +### What it owns + +- database creation and schema changes +- historical meaning of fields added to kits, jurisdictions, and inkjet records + +### Main files + +- [../Data/Migrations/migrate.asp](../Data/Migrations/migrate.asp) +- [../Data/Migrations/lib.Migrations.asp](../Data/Migrations/lib.Migrations.asp) +- [../Data/Migrations](../Data/Migrations) + +### Practical rule + +If you add or reinterpret a field in a repository, search migrations first and then search controllers and import scripts for that field name. In this project, schema semantics leak into UI, export logic, and batch automation very quickly. + +## Recommended Read Paths By Change Type + +### “Add a new field to kit workflow” + +Open: +- [../Data/Migrations](../Data/Migrations) +- [../App/DomainModels/KitRepository.asp](../App/DomainModels/KitRepository.asp) +- [../App/ViewModels/KitViewModels.asp](../App/ViewModels/KitViewModels.asp) +- [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) +- [../App/Views/Kit](../App/Views/Kit) + +### “Change jurisdiction import behavior” + +Open: +- [../App/Controllers/Jurisdiction/JurisdictionController.asp](../App/Controllers/Jurisdiction/JurisdictionController.asp) +- [../App/Views/Jurisdiction/import.asp](../App/Views/Jurisdiction/import.asp) +- [../App/DomainModels/JurisdictionRepository.asp](../App/DomainModels/JurisdictionRepository.asp) + +### “Change export file format or proof output” + +Open: +- [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) +- [../App/DomainModels/SnailWorksRepository.asp](../App/DomainModels/SnailWorksRepository.asp) +- [../ImportService/TrackingDataImport.vbs](../ImportService/TrackingDataImport.vbs) +- [../Data](../Data) + +### “Change purple-envelope or inkjet assignment logic” + +Open: +- [../App/Controllers/Kit/KitController.asp](../App/Controllers/Kit/KitController.asp) +- [../App/DomainModels/InkjetRecordsRepository.asp](../App/DomainModels/InkjetRecordsRepository.asp) +- [../App/Views/Kit/SwitchBoardPurpleEnvelopeEdit.asp](../App/Views/Kit/SwitchBoardPurpleEnvelopeEdit.asp) +- [../App/DomainModels/ColorsRepository.asp](../App/DomainModels/ColorsRepository.asp) + +--- + +_Generated as a focused brownfield navigation guide._ diff --git a/docs/project-overview.md b/docs/project-overview.md new file mode 100644 index 0000000..0751747 --- /dev/null +++ b/docs/project-overview.md @@ -0,0 +1,88 @@ +# tracking_kits - Project Overview + +**Date:** 2026-03-13 +**Type:** Web application +**Architecture:** Classic ASP MVC-style monolith + +## Executive Summary + +This project manages operational workflows for election mail tracking kits. Users browse jurisdictions, create tracking kits, print or export proof artifacts, manage purple envelope and custom office copy jobs, generate inkjet-ready files, and produce export files for online mail tracking. The app is tightly coupled to Windows infrastructure, IIS, COM/ActiveX components, and an Access database. + +## Project Classification + +- **Repository Type:** Monolith +- **Project Type:** Classic ASP server-rendered web app +- **Primary Languages:** VBScript, ASP, SQL, VBScript automation +- **Architecture Pattern:** Controller + View + Repository over shared MVC helper libraries + +## Technology Stack Summary + +| Category | Technology | Notes | +| --- | --- | --- | +| Web runtime | IIS + Classic ASP | `index.asp` redirects into controller ASP files | +| Server language | VBScript | `Option Explicit` is used in application files | +| MVC framework | Custom `/MVC` helpers | Routing, form cache, HTML security, flash, automapper | +| Data access | ADO via `lib.DAL.asp` | Repository classes issue SQL directly | +| Database | Access MDB via Jet/ACE | Sample MDB files exist in `Data/`; migrations are ASP/SQL scripts | +| Reporting | ReportMan ActiveX | Used for proofs and label PDFs | +| PDF/export | Debenu PDF Library ActiveX | Used by import/export automation | +| External integration | Chilkat COM components | FTP/SFTP and CSV-related utilities appear in automation/config | +| Testing | ASPUnit | Test runner is served through IIS | +| Automation | VBScript and PowerShell | Import service and helper scripts live outside the web request path | + +## Key Features + +- Jurisdiction browsing and search by `JCode`, `Name`, address, and IMB-related fields +- Tracking kit creation and maintenance +- Switchboard views for tracking kits and purple envelope kits +- Label and proof generation through report templates in `Data/*.rep` +- Inkjet record management and color assignment +- SnailWorks export generation +- Import-service automation for processing tracking data outside the web app + +## Architecture Highlights + +- Requests enter through controller `.asp` files directly, not a centralized front controller. +- Shared includes in [../App/include_all.asp](../App/include_all.asp) act as the real application bootstrap. +- Repositories own SQL and data mapping responsibilities. +- Views are server-side `.asp` templates rendered from controller methods. +- The runtime assumes file-system side effects: creating folders, writing PDFs/CSVs, and moving export files. +- The app has environment-specific behavior embedded in code, especially in [../App/app.config.asp](../App/app.config.asp) and [../ImportService/TrackingDataImport.vbs](../ImportService/TrackingDataImport.vbs). + +## Development Overview + +### Prerequisites + +- Windows + IIS + Classic ASP +- Access/Jet or ACE provider +- Registered COM dependencies for reporting/export features + +### Getting Started + +The repo can be edited anywhere, but meaningful runtime verification requires IIS on Windows. The Linux workspace is sufficient for code review and documentation generation, not end-to-end proof/export execution. + +### Key Commands + +- **Run app:** Serve repo root from IIS +- **Run tests:** Open `Tests/Test_All.asp` +- **Run import service manually:** `cscript ImportService/TrackingDataImport.vbs` + +## Repository Structure + +- `App/` contains the application logic, views, and repositories. +- `MVC/` contains the shared Classic ASP framework code. +- `Data/` contains migrations, report templates, and sample assets. +- `ImportService/` contains out-of-band processing logic. +- `Tests/` contains helper-library tests via ASPUnit. +- `Dependancies/` holds external binaries and COM-related artifacts needed in production-like environments. + +## Documentation Map + +- [index.md](./index.md) - master documentation index +- [architecture.md](./architecture.md) - detailed technical architecture +- [source-tree-analysis.md](./source-tree-analysis.md) - directory structure and entry points +- [development-guide.md](./development-guide.md) - local development workflow + +--- + +_Generated for brownfield analysis._ diff --git a/docs/project-scan-report.json b/docs/project-scan-report.json new file mode 100644 index 0000000..af8270a --- /dev/null +++ b/docs/project-scan-report.json @@ -0,0 +1 @@ +{"workflow_version":"1.2.0","timestamps":{"started":"2026-03-13T00:00:00Z","last_updated":"2026-03-13T00:00:00Z"},"mode":"initial_scan","scan_level":"deep","project_root":"/workspace","project_knowledge":"/workspace/docs","completed_steps":[{"step":"step_1","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Classified as monolith with 1 part: Classic ASP web application"},{"step":"step_2","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Discovered existing repo README and AGENTS guidance"},{"step":"step_3","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Identified Classic ASP MVC, ADO/Access, IIS, ASPUnit, VBScript automation, and COM dependencies"},{"step":"step_4","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Documented controller routes, data model tables, UI surfaces, config patterns, import/export flows, and Windows-only integrations"},{"step":"step_5","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Generated annotated source tree analysis"},{"step":"step_6","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Generated development and deployment guidance"},{"step":"step_8","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Generated single-part architecture documentation"},{"step":"step_9","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Generated supporting documents for overview, components, APIs, and data models"},{"step":"step_10","status":"completed","timestamp":"2026-03-13T00:00:00Z","summary":"Generated master index for brownfield documentation"}],"current_step":"complete","findings":{"project_classification":"Monolithic Classic ASP web application with MVC-style folder layout and Windows-specific automation.","technology_stack":"VBScript/Classic ASP, IIS, ADO with Access/Jet or ACE, ReportMan, Chilkat, Debenu PDF Library, ASPUnit.","batches_completed":[{"path":"/workspace/App","files_scanned":61,"summary":"Core MVC application: controllers, views, repositories, DAL, and view models."},{"path":"/workspace/Data","files_scanned":33,"summary":"Report templates, sample assets, migrations, and sample MDB data."},{"path":"/workspace/ImportService","files_scanned":2,"summary":"VBScript automation for imports, proofs, and export processing."},{"path":"/workspace/MVC","files_scanned":19,"summary":"Shared Classic ASP MVC helper framework and utility libraries."},{"path":"/workspace/Tests","files_scanned":16,"summary":"ASPUnit runner plus helper/library tests and an import test harness."}],"project_types":[{"part_id":"app","project_type_id":"web","display_name":"Classic ASP web app"}]},"outputs_generated":["project-scan-report.json","index.md","project-overview.md","source-tree-analysis.md","architecture.md","development-guide.md","component-inventory.md","data-models.md","api-contracts.md"],"resume_instructions":"Documentation run completed. Re-run document-project to rescan or add deep-dive docs for a specific module."} diff --git a/docs/source-tree-analysis.md b/docs/source-tree-analysis.md new file mode 100644 index 0000000..33a138c --- /dev/null +++ b/docs/source-tree-analysis.md @@ -0,0 +1,148 @@ +# tracking_kits - Source Tree Analysis + +**Date:** 2026-03-13 + +## Overview + +This repository is organized as a single Classic ASP application plus supporting automation and documentation assets. The web app lives under `App/` and depends on shared infrastructure in `MVC/`, database/report assets in `Data/`, and Windows-specific automation under `ImportService/`. + +## Complete Directory Structure + +```text +/workspace +|-- index.asp +|-- web.config +|-- README.md +|-- App/ +| |-- app.config.asp +| |-- include_all.asp +| |-- Controllers/ +| |-- DAL/ +| |-- DomainModels/ +| |-- ViewModels/ +| `-- Views/ +|-- MVC/ +|-- Data/ +| |-- Migrations/ +| `-- *.rep / sample assets / sample MDB files +|-- ImportService/ +|-- Tests/ +| |-- ASPUnit/ +| `-- Test_*.asp / TestCase_*.asp +|-- Dependancies/ +|-- dist/ +|-- uploads/ +`-- _bmad-output/ +``` + +## Critical Directories + +### `App/Controllers` + +**Purpose:** HTTP request handling and orchestration. + +**Contains:** 8 controller files for `Home`, `Kit`, `Jurisdiction`, `InkjetRecords`, `Contacts`, `Settings`, `CustomOfficeCopyJob`, and `KitLabels`. + +**Entry Points:** `App/Controllers/Home/HomeController.asp`, `App/Controllers/Kit/KitController.asp` + +### `App/DomainModels` + +**Purpose:** Repository layer and model classes. + +**Contains:** SQL-backed repositories for jurisdictions, kits, labels, inkjet records, settings, contacts, SnailWorks exports, custom office copy jobs, and colors. + +### `App/Views` + +**Purpose:** Server-rendered UI templates. + +**Contains:** View folders that mirror controllers, plus shared header/footer layout includes. + +### `App/DAL` + +**Purpose:** Database connectivity and low-level query execution. + +**Contains:** `lib.DAL.asp`, the ADO abstraction used by repositories. + +### `MVC` + +**Purpose:** Shared framework and utility code. + +**Contains:** Routing, HTML helpers, CSRF handling, flash messages, automapper, collections, strings, validation, upload, and JSON support. + +### `Data/Migrations` + +**Purpose:** Database schema evolution. + +**Contains:** 20 numbered migration scripts, migration helpers, and bootstrap SQL/scripts. + +### `Data` + +**Purpose:** Reporting templates and sample data artifacts. + +**Contains:** `.rep` templates, images, PDFs, PowerShell utilities, and sample MDB files. + +### `ImportService` + +**Purpose:** Out-of-band workflow processing. + +**Contains:** `TrackingDataImport.vbs` and related service installers for importing, proving, and exporting jobs outside web requests. + +### `Tests` + +**Purpose:** ASPUnit-based verification. + +**Contains:** Test runner, helper tests, and a VBScript harness for import-related behavior. + +## Entry Points + +- **Main web entry:** [../index.asp](../index.asp) +- **Route bootstrap:** [../App/app.config.asp](../App/app.config.asp) +- **Shared include bootstrap:** [../App/include_all.asp](../App/include_all.asp) +- **Import automation entry:** [../ImportService/TrackingDataImport.vbs](../ImportService/TrackingDataImport.vbs) +- **Test runner entry:** [../Tests/Test_All.asp](../Tests/Test_All.asp) + +## File Organization Patterns + +- Controllers, view models, views, and repositories are grouped by domain area. +- Most business logic is controller-driven, with repositories focused on persistence and record mapping. +- Shared runtime behavior is hidden in framework includes rather than dependency injection or explicit composition. +- The app uses direct file includes extensively; load order matters. +- Environment configuration is code-based rather than environment-variable based. + +## Key File Types + +### `.asp` + +- **Pattern:** `App/**/*.asp`, `MVC/*.asp`, `Tests/*.asp` +- **Purpose:** Web controllers, views, repositories, framework helpers, and test pages. + +### `.vbs` + +- **Pattern:** `ImportService/*.vbs`, `App/ScaffoldRepo.vbs` +- **Purpose:** Batch automation and helper tooling. + +### `.rep` + +- **Pattern:** `Data/*.rep` +- **Purpose:** Report definitions used for proofs and PDF generation. + +### `Migration_*.asp` + +- **Pattern:** `Data/Migrations/Migration_*.asp` +- **Purpose:** Incremental schema changes implemented in Classic ASP/VBScript. + +## Configuration Files + +- [../web.config](../web.config) - IIS default document configuration. +- [../App/app.config.asp](../App/app.config.asp) - Route init, UI asset URLs, `dev` mode, export directory, and COM unlock setup. +- [../_bmad/bmm/config.yaml](../_bmad/bmm/config.yaml) - BMAD workflow configuration for documentation generation. + +## Notes for Development + +- `dist/` and `uploads/` are runtime-facing folders but not the core of the app logic. +- `Dependancies/` is critical for operational parity even though the application code can be read without it. +- Several workflows depend on network shares and Windows paths that are not testable in this workspace. + +--- + +_Generated for brownfield analysis._ diff --git a/uploads/BRM Permit Infor 1-30-26.txt b/uploads/BRM Permit Infor 1-30-26.txt deleted file mode 100644 index dc8d8e0..0000000 --- a/uploads/BRM Permit Infor 1-30-26.txt +++ /dev/null @@ -1,1524 +0,0 @@ -County Jurisdiction Mailing Address City & Township ZIP + 4 Master Permit Mailer ID Option 1 -ALCONA (01) ALCONA TOWNSHIP (01040) 4892 LAVERGNE RD BLACK RIVER MI 48721-9900 185 903419785 -ALCONA (01) CALEDONIA TOWNSHIP (12460) P.O. BOX 7 SPRUCE MI 48762-9907 185 903419785 -ALCONA (01) CURTIS TOWNSHIP (19320) PO BOX 90 GLENNIE MI 48737-9901 185 903419785 -ALCONA (01) GREENBUSH TOWNSHIP (34820) PO BOX 9 GREENBUSH MI 48738-9909 185 903419785 -ALCONA (01) GUSTIN TOWNSHIP (35740) PO BOX 25 LINCOLN MI 48742-9925 185 903419785 -ALCONA (01) HARRISVILLE CITY (36860) PO BOX 278 HARRISVILLE MI 48740-9978 185 903419785 -ALCONA (01) HARRISVILLE TOWNSHIP (36880) 4890 M-72 HARRISVILLE MI 48740-9901 185 903419785 -ALCONA (01) HAWES TOWNSHIP (37220) 1341 FAWN DRIVE LINCOLN MI 48742-9900 185 903419785 -ALCONA (01) HAYNES TOWNSHIP (37380) 4321 E. BEATON ROAD HARRISVILLE MI 48740-9902 185 903419785 -ALCONA (01) MIKADO TOWNSHIP (53880) PO BOX 60 MIKADO MI 48745-9902 185 903419785 -ALCONA (01) MILLEN TOWNSHIP (54060) PO BOX 292 BARTON CITY MI 48705-9901 185 903419785 -ALCONA (01) MITCHELL TOWNSHIP (54740) 2101 NORTH REEVES ROAD CURRAN MI 48728-9901 185 903419785 -ALGER (02) AU TRAIN TOWNSHIP (04460) PO BOX 33 AU TRAIN MI 49806-9900 185 903419785 -ALGER (02) BURT TOWNSHIP (11960) PO BOX 9 ALANSON MI 49706-9806 185 903419785 -ALGER (02) GRAND ISLAND TOWNSHIP (33380) PO BOX 215 MUNISING MI 49862-9901 185 903419785 -ALGER (02) LIMESTONE TOWNSHIP (47540) N2690 HWY M-67 CHATHAM MI 49816-9901 185 903419785 -ALGER (02) MATHIAS TOWNSHIP (52360) PO BOX 317 TRENARY MI 49891-9900 185 903419785 -ALGER (02) MUNISING CITY (56200) 301 E. SUPERIOR ST. MUNISING MI 49862-9900 185 903419785 -ALGER (02) MUNISING TOWNSHIP (56220) PO BOX 190 MUNISING MI 49895-9900 185 903419785 -ALGER (02) ONOTA TOWNSHIP (60820) PO BOX 100 DEERTON MI 49822-9900 185 903419785 -ALGER (02) ROCK RIVER TOWNSHIP (69160) PO BOX 195 CHATHAM MI 49816-9900 185 903419785 -ALLEGAN (03) ALLEGAN CITY (01260) 231 TROWBRIDGE STREET ALLEGAN MI 49010-9803 185 903419785 -ALLEGAN (03) ALLEGAN TOWNSHIP (01280) 3037 118TH AVENUE ALLEGAN MI 49010-9804 185 903419785 -ALLEGAN (03) CASCO TOWNSHIP (13700) 7104 107TH AVE SOUTH HAVEN MI 49090-9801 185 903419785 -ALLEGAN (03) CHESHIRE TOWNSHIP (15200) 630 38TH ST ALLEGAN MI 49010-9808 185 903419785 -ALLEGAN (03) CLYDE TOWNSHIP (16720) P.O. BOX 671 FENNVILLE MI 49408-9971 185 903419785 -ALLEGAN (03) DORR TOWNSHIP (22680) 4196 18TH ST DORR MI 49323-9905 185 903419785 -ALLEGAN (03) FENNVILLE CITY (27740) PO BOX 666 FENNVILLE MI 49408-9966 185 903419785 -ALLEGAN (03) FILLMORE TOWNSHIP (28120) 4219 52ND ST HOLLAND MI 49423-9913 185 903419785 -ALLEGAN (03) GANGES TOWNSHIP (31360) 1904 64TH ST FENNVILLE MI 49408-9926 185 903419785 -ALLEGAN (03) GUNPLAIN TOWNSHIP (35720) P.O. BOX 146 PLAINWELL MI 49080-9802 185 903419785 -ALLEGAN (03) HEATH TOWNSHIP (37460) PO BOX 241 "HAMILTON, MI" 49419-9900 185 903419785 -ALLEGAN (03) HOPKINS TOWNSHIP (39200) PO BOX 217 HOPKINS MI 49328-9901 185 903419785 -ALLEGAN (03) LAKETOWN TOWNSHIP (45180) 4338 BEELINE ROAD HOLLAND MI 49423-9923 185 903419785 -ALLEGAN (03) LEE TOWNSHIP (46600) PO BOX 427 PULLMAN MI 49450-9900 185 903419785 -ALLEGAN (03) LEIGHTON TOWNSHIP (46760) "4451 12TH ST., SUITE A" WAYLAND MI 49348-9905 185 903419785 -ALLEGAN (03) MANLIUS TOWNSHIP (50840) 3134 57TH STREET FENNVILLE MI 49408-9800 185 903419785 -ALLEGAN (03) MARTIN TOWNSHIP (52000) PO BOX 27 MARTIN MI 49070-9800 185 903419785 -ALLEGAN (03) MONTEREY TOWNSHIP (55200) 3126 28TH ST HOPKINS MI 49328-9904 185 903419785 -ALLEGAN (03) OTSEGO CITY (61620) 117 E ORLEANS STREET OTSEGO MI 49078-9800 185 903419785 -ALLEGAN (03) OTSEGO TOWNSHIP (61640) PO BOX 257 OTSEGO MI 49078-9801 185 903419785 -ALLEGAN (03) OVERISEL TOWNSHIP (61820) A-4307 144TH AVE HOLLAND MI 49423-9919 185 903419785 -ALLEGAN (03) PLAINWELL CITY (64740) 211 NORTH MAIN STREET PLAINWELL MI 49080-9801 185 903419785 -ALLEGAN (03) SALEM TOWNSHIP (71100) PO BOX 49 BURNIPS MI 49314-9901 185 903419785 -ALLEGAN (03) SAUGATUCK CITY (71700) PO BOX 86 SAUGATUCK MI 49453-9900 185 903419785 -ALLEGAN (03) SAUGATUCK TOWNSHIP (71720) PO BOX 100 SAUGATUCK MI 49453-9901 185 903419785 -ALLEGAN (03) TROWBRIDGE TOWNSHIP (80620) 913 M40 SOUTH ALLEGAN MI 49010-9810 185 903419785 -ALLEGAN (03) VALLEY TOWNSHIP (81580) 2054 NORTH M-40 ALLEGAN MI 49010-9811 185 903419785 -ALLEGAN (03) VILLAGE OF DOUGLAS CITY (22740) PO BOX 757 DOUGLAS MI 49406-9900 185 903419785 -ALLEGAN (03) WATSON TOWNSHIP (84580) 1895 118TH AVENUE ALLEGAN MI 49010-9809 185 903419785 -ALLEGAN (03) WAYLAND CITY (84880) 103 S. MAIN ST. WAYLAND MI 49348-9904 185 903419785 -ALLEGAN (03) WAYLAND TOWNSHIP (84900) PO BOX 1 "BRADLEY, MI" 49311-9900 185 903419785 -ALPENA (04) ALPENA CITY (01740) 208 N FIRST AVE ALPENA MI 49707-9806 185 903419785 -ALPENA (04) ALPENA TOWNSHIP (01760) 4385 US-23 NORTH ALPENA MI 49707-9803 185 903419785 -ALPENA (04) GREEN TOWNSHIP (34740) 2650 CALCUT RD. LACHINE MI 49753-9806 185 903419785 -ALPENA (04) LONG RAPIDS TOWNSHIP (49360) 5310 M-65 LACHINE MI 49753-9808 185 903419785 -ALPENA (04) MAPLE RIDGE TOWNSHIP (51220) 6000 W. LACOMB RD. ALPENA MI 49707-9804 185 903419785 -ALPENA (04) OSSINEKE TOWNSHIP (61520) 10777 KLEVE ROAD HUBBARD LAKE MI 49747-9800 185 903419785 -ALPENA (04) SANBORN TOWNSHIP (71240) PO BOX 428 OSSINEKE MI 49766-9800 185 903419785 -ALPENA (04) WELLINGTON TOWNSHIP (85180) 5848 COLLINS RD LACHINE MI 49753-9807 185 903419785 -ALPENA (04) WILSON TOWNSHIP (87680) 8821 THIEM RD HERRON MI 49744-9805 185 903419785 -ANTRIM (05) BANKS TOWNSHIP (05240) PO BOX 68 ELLSWORTH MI 49729-9805 185 903419785 -ANTRIM (05) CENTRAL LAKE TOWNSHIP (14420) P.O. BOX 155 CENTRAL LAKE MI 49622-9901 185 903419785 -ANTRIM (05) CHESTONIA TOWNSHIP (15380) PO BOX 295 ALBA MI 49611-9900 185 903419785 -ANTRIM (05) CUSTER TOWNSHIP (19400) PO BOX 814 MANCELONA MI 49659-9914 185 903419785 -ANTRIM (05) ECHO TOWNSHIP (24640) P.O. BOX 549 CENTRAL LAKE MI 49622-9949 185 903419785 -ANTRIM (05) ELK RAPIDS TOWNSHIP (25340) P O BOX 365 ELK RAPIDS MI 49629-9909 185 903419785 -ANTRIM (05) FOREST HOME TOWNSHIP (29600) P O BOX 317 BELLAIRE MI 49615-9917 185 903419785 -ANTRIM (05) HELENA TOWNSHIP (37500) P. O. BOX 177 ALDEN MI 49612-9977 185 903419785 -ANTRIM (05) JORDAN TOWNSHIP (41960) 2647 MT BLISS RD EAST JORDAN MI 49727-9805 185 903419785 -ANTRIM (05) KEARNEY TOWNSHIP (42400) PO BOX 51 BELLAIRE MI 49615-9951 185 903419785 -ANTRIM (05) MANCELONA TOWNSHIP (50640) PO BOX 332 MANCELONA MI 49659-9909 185 903419785 -ANTRIM (05) MILTON TOWNSHIP (54440) P O BOX 309 KEWADIN MI 49648-9901 185 903419785 -ANTRIM (05) STAR TOWNSHIP (76260) 4081 CINDER HILL RD ELMIRA MI 49730-9813 185 903419785 -ANTRIM (05) TORCH LAKE TOWNSHIP (80100) P O BOX 713 EASTPORT MI 49627-9986 185 903419785 -ANTRIM (05) WARNER TOWNSHIP (83300) PO BOX 176 ELMIRA MI 49730-9806 185 903419785 -ARENAC (06) ADAMS TOWNSHIP (00280) 6175 MOORES JUNCTION STERLING MI 48659-9900 185 903419785 -ARENAC (06) ARENAC TOWNSHIP (03360) 2596 ARENAC STATE RD STANDISH MI 48658-9908 185 903419785 -ARENAC (06) AU GRES CITY (04120) P.O. BOX 121 AU GRES MI 48703-9900 185 903419785 -ARENAC (06) AU GRES TOWNSHIP (04140) P.O. BOX 783 AU GRES MI 48703-9901 185 903419785 -ARENAC (06) CLAYTON TOWNSHIP (16240) 5483 KNIGHT RD. STERLING MI 48659-9901 185 903419785 -ARENAC (06) DEEP RIVER TOWNSHIP (21120) P.O. BOX 440 STERLING MI 48659-9940 185 903419785 -ARENAC (06) LINCOLN TOWNSHIP PO BOX 542 STANDISH MI 48658-9914 185 903419785 -ARENAC (06) MASON TOWNSHIP (52120) 90 W MAPLE RIDGE RD TWINING MI 48766-9904 185 903419785 -ARENAC (06) MOFFATT TOWNSHIP (54800) PO BOX 58 ALGER MI 48610-9905 185 903419785 -ARENAC (06) OMER CITY (60660) PO BOX 160 OMER MI 48749-9901 185 903419785 -ARENAC (06) SIMS TOWNSHIP (74020) 4489 E HURON RD. AU GRES MI 48703-9904 185 903419785 -ARENAC (06) STANDISH CITY (76120) PO BOX 726 STANDISH MI 48658-9913 185 903419785 -ARENAC (06) STANDISH TOWNSHIP (76140) P O BOX 472 STANDISH MI 48658-9910 185 903419785 -ARENAC (06) TURNER TOWNSHIP (80840) 110 PARK ST TWINING MI 48766-9900 185 903419785 -ARENAC (06) WHITNEY TOWNSHIP (87080) 1515 NORTH HURON TAWAS CITY MI 48763-9905 185 903419785 -BARAGA (07) ARVON TOWNSHIP (03660) 14470 MARINICH DRIVE LANSE MI 49946-9902 185 903419785 -BARAGA (07) BARAGA TOWNSHIP (05340) 16840 Baraga Plains RD BARAGA MI 49908-9901 185 903419785 -BARAGA (07) COVINGTON TOWNSHIP (18600) 25351 NORBACK RD WATTON MI 49970-9900 185 903419785 -BARAGA (07) LANSE TOWNSHIP (45560) PO BOX 82 L'ANSE MI 49946-9901 185 903419785 -BARAGA (07) SPURR TOWNSHIP (76000) 29257 US HIGHWAY 41 MICHIGAMME MI 49861-9900 185 903419785 -BARRY (08) ASSYRIA TOWNSHIP (03860) 8094 TASKER RD BELLEVUE MI 49021-9800 185 903419785 -BARRY (08) BALTIMORE TOWNSHIP (05020) PO BOX 5 DOWLING MI 49050-9800 185 903419785 -BARRY (08) BARRY TOWNSHIP (05560) P.O. BOX # 705 DELTON MI 49046-9818 185 903419785 -BARRY (08) CARLTON TOWNSHIP (13340) 85 WELCOME RD HASTINGS MI 49058-9817 185 903419785 -BARRY (08) CASTLETON TOWNSHIP (13960) PO BOX 679 NASHVILLE MI 49073-9801 185 903419785 -BARRY (08) HASTINGS CITY (37120) 201 E STATE ST HASTINGS MI 49058-9804 185 903419785 -BARRY (08) HASTINGS TOWNSHIP (37140) 885 RIVER RD HASTINGS MI 49058-9816 185 903419785 -BARRY (08) HOPE TOWNSHIP (39120) 5463 S M-43 HWY HASTINGS MI 49058-9805 185 903419785 -BARRY (08) IRVING TOWNSHIP (41120) 3425 WING RD HASTINGS MI 49058-9806 185 903419785 -BARRY (08) JOHNSTOWN TOWNSHIP (41860) PO BOX 157 BEDFORD MI 49020-9801 185 903419785 -BARRY (08) MAPLE GROVE TOWNSHIP (50960) PO BOX 240 NASHVILLE MI 49073-9802 185 903419785 -BARRY (08) ORANGEVILLE TOWNSHIP (60980) 7350 LINDSEY RD PLAINWELL MI 49080-9800 185 903419785 -BARRY (08) PRAIRIEVILLE TOWNSHIP (66260) 10115 S NORRIS RD DELTON MI 49046-9804 185 903419785 -BARRY (08) RUTLAND TOWNSHIP (70420) 2461 HEATH RD HASTINGS MI 49058-9802 185 903419785 -BARRY (08) THORNAPPLE TOWNSHIP (79620) PO BOX 459 MIDDLEVILLE MI 49333-9905 185 903419785 -BARRY (08) WOODLAND TOWNSHIP (88440) PO BOX 98 WOODLAND MI 48897-9900 185 903419785 -BARRY (08) YANKEE SPRINGS TOWNSHIP (89020) 284 N BRIGGS RD MIDDLEVILLE MI 49333-9900 185 903419785 -BAY (09) AUBURN CITY (04080) 113 E ELM AUBURN MI 48611-9911 185 903419785 -BAY (09) BANGOR TOWNSHIP (05120) 180 STATE PARK DRIVE BAY CITY MI 48706-9903 185 903419785 -BAY (09) BAY CITY CITY (06020) 301 WASHINGTON AVENUE BAY CITY MI 48708-9904 185 903419785 -BAY (09) BEAVER TOWNSHIP (06540) 1850 GARFIELD RD AUBURN MI 48611-9912 185 903419785 -BAY (09) ESSEXVILLE CITY (26420) 1107 WOODSIDE AVENUE ESSEXVILLE MI 48732-9901 185 903419785 -BAY (09) FRANKENLUST TOWNSHIP (30180) 2401 DELTA RD. BAY CITY MI 48706-9904 185 903419785 -BAY (09) FRASER TOWNSHIP (30400) 1474 N MACKINAW RD LINWOOD MI 48634-9902 185 903419785 -BAY (09) GARFIELD TOWNSHIP (31540) 1138 W. ERICKSON RD. LINWOOD MI 48634-9901 185 903419785 -BAY (09) GIBSON TOWNSHIP (32040) 7214 MAIN STREET BENTLEY MI 48613-9901 185 903419785 -BAY (09) HAMPTON TOWNSHIP (36260) 801 W CENTER RD ESSEXVILLE MI 48732-9900 185 903419785 -BAY (09) KAWKAWLIN TOWNSHIP (42360) 1836 E PARISH RD KAWKAWLIN MI 48631-9903 185 903419785 -BAY (09) MERRITT TOWNSHIP (53220) P.O. BOX 126 MUNGER MI 48747-9903 185 903419785 -BAY (09) MONITOR TOWNSHIP (54980) 2483 MIDLAND RD BAY CITY MI 48706-9905 185 903419785 -BAY (09) MOUNT FOREST TOWNSHIP (55920) 1705 W. CODY ESTEY RD PINCONNING MI 48650-9906 185 903419785 -BAY (09) PINCONNING CITY (64160) PO BOX 628 PINCONNING MI 48650-9902 185 903419785 -BAY (09) PINCONNING TOWNSHIP (64180) PO BOX 58 PINCONNING MI 48650-9904 185 903419785 -BAY (09) PORTSMOUTH TOWNSHIP (65980) 1711 W. CASS AVE. RD BAY CITY MI 48708-9906 185 903419785 -BAY (09) WILLIAMS TOWNSHIP (87380) 1080 W MIDLAND RD AUBURN MI 48611-9904 185 903419785 -BENZIE (10) ALMIRA TOWNSHIP (01640) 7276 OLE WHITE DR LAKE ANN MI 49650-9900 185 903419785 -BENZIE (10) BENZONIA TOWNSHIP (07600) PO BOX 224 BENZONIA MI 49616-9900 185 903419785 -BENZIE (10) BLAINE TOWNSHIP (08840) 4760 HERRING GROVE RD ARCADIA MI 49613-9901 185 903419785 -BENZIE (10) COLFAX TOWNSHIP (17120) PO BOX 68 THOMPSONVILLE MI 49683-9901 185 903419785 -BENZIE (10) CRYSTAL LAKE TOWNSHIP (19180) PO BOX 2129 FRANKFORT MI 49635-9903 185 903419785 -BENZIE (10) FRANKFORT CITY (30260) P O BOX 351 FRANKFORT MI 49635-9904 185 903419785 -BENZIE (10) GILMORE TOWNSHIP (32180) PO BOX 247 ELBERTA MI 49628-9947 185 903419785 -BENZIE (10) HOMESTEAD TOWNSHIP (39000) PO BOX 315 HONOR MI 49640-9903 185 903419785 -BENZIE (10) INLAND TOWNSHIP (40700) 19668 HONOR HIGHWAY INTERLOCHEN MI 49643-9904 185 903419785 -BENZIE (10) JOYFIELD TOWNSHIP (42000) PO BOX 256 BENZONIA MI 49616-9901 185 903419785 -BENZIE (10) LAKE TOWNSHIP (44240) 5153 SCENIC HWY HONOR MI 49640-9902 185 903419785 -BENZIE (10) PLATTE TOWNSHIP (64760) 6821 INDIAN HILL RD HONOR MI 49640-9900 185 903419785 -BENZIE (10) WELDON TOWNSHIP (85160) PO BOX 570 THOMPSONVILLE MI 49683-9991 185 903419785 -BERRIEN (11) BAINBRIDGE TOWNSHIP (04840) 7315 TERRITORIAL ROAD WATERVLIET MI 49098-9803 185 903419785 -BERRIEN (11) BARODA TOWNSHIP (05520) PO BOX 215 BARODA MI 49101-9802 185 903419785 -BERRIEN (11) BENTON CHARTER TOWNSHIP (07400) 1725 TERRITORIAL ROAD BLDG B BENTON HARBOR MI 49022-9801 185 903419785 -BERRIEN (11) BENTON HARBOR CITY (07520) 200 EAST WALL STREET BENTON HARBOR MI 49022-9802 185 903419785 -BERRIEN (11) BERRIEN TOWNSHIP (07820) 8916 M 140 BERRIEN CENTER MI 49102-9800 185 903419785 -BERRIEN (11) BERTRAND CHARTER TOWNSHIP (07920) 3835 BUFFALO RD BUCHANAN MI 49107-9801 185 903419785 -BERRIEN (11) BRIDGMAN CITY (10580) 9765 MAPLE STREET BRIDGMAN MI 49106-9800 185 903419785 -BERRIEN (11) BUCHANAN CHARTER TOWNSHIP (11420) 15235 N. MAIN STREET BUCHANAN MI 49107-9802 185 903419785 -BERRIEN (11) BUCHANAN CITY (11400) 302 N RED BUD TRAIL BUCHANAN MI 49107-9803 185 903419785 -BERRIEN (11) CHIKAMING TOWNSHIP (15480) PO BOX 40 HARBERT MI 49115-9801 185 903419785 -BERRIEN (11) COLOMA CHARTER TOWNSHIP (17340) 4919 PAW PAW LAKE RD COLOMA MI 49038-9802 185 903419785 -BERRIEN (11) COLOMA CITY (17320) PO BOX 329 COLOMA MI 49038-9801 185 903419785 -BERRIEN (11) GALIEN TOWNSHIP (31320) PO BOX 246 GALIEN MI 49113-9801 185 903419785 -BERRIEN (11) HAGAR TOWNSHIP (35860) PO BOX 87 RIVERSIDE MI 49084-9801 185 903419785 -BERRIEN (11) LAKE CHARTER TOWNSHIP (44260) P.O. BOX 818 BRIDGMAN MI 49106-9806 185 903419785 -BERRIEN (11) LINCOLN CHARTER TOWNSHIP (47600) PO BOX 279 STEVENSVILLE MI 49127-9800 185 903419785 -BERRIEN (11) NEW BUFFALO CITY (57220) 224 WEST BUFFALO STREET NEW BUFFALO MI 49117-9800 185 903419785 -BERRIEN (11) NEW BUFFALO TOWNSHIP (57230) 17425 RED ARROW HWY NEW BUFFALO MI 49117-9801 185 903419785 -BERRIEN (11) NILES CHARTER TOWNSHIP (57780) 320 BELL RD. NILES MI 49120-9804 185 903419785 -BERRIEN (11) NILES CITY (57760) "333 N SECOND ST., SUITE 301" NILES MI 49120-9805 185 903419785 -BERRIEN (11) ORONOKO CHARTER TOWNSHIP (61180) PO BOX 214 BERRIEN SPRINGS MI 49103-9802 185 903419785 -BERRIEN (11) PIPESTONE TOWNSHIP (64480) PO BOX 291 EAU CLAIRE MI 49111-9800 185 903419785 -BERRIEN (11) ROYALTON TOWNSHIP (70100) 980 MINERS RD ST JOSEPH MI 49085-9805 185 903419785 -BERRIEN (11) SODUS TOWNSHIP (74440) PO BOX 176 SODUS MI 49126-9802 185 903419785 -BERRIEN (11) ST JOSEPH CHARTER TOWNSHIP (70980) P.O. BOX 147 ST JOSEPH MI 49085-9804 185 903419785 -BERRIEN (11) ST JOSEPH CITY (70960) 700 BROAD ST ST. JOSEPH MI 49085-9803 185 903419785 -BERRIEN (11) THREE OAKS TOWNSHIP (79740) P O BOX 55 THREE OAKS MI 49128-9800 185 903419785 -BERRIEN (11) WATERVLIET CHARTER TOWNSHIP (84520) 4959 M-140 HWY. WATERVLIET MI 49098-9801 185 903419785 -BERRIEN (11) WATERVLIET CITY (84500) PO BOX 86 WATERVLIET MI 49098-9802 185 903419785 -BERRIEN (11) WEESAW TOWNSHIP (85120) PO BOX 38 NEW TROY MI 49119-9800 185 903419785 -BRANCH (12) ALGANSEE TOWNSHIP (01120) 378 S RAY QUINCY RD QUINCY MI 49082-9801 185 903419785 -BRANCH (12) BATAVIA TOWNSHIP (05800) 614 N. SNOW PRAIRIE ROAD COLDWATER MI 49036-9804 185 903419785 -BRANCH (12) BETHEL TOWNSHIP (08060) 453 W HATMAKER RD BRONSON MI 49028-9804 185 903419785 -BRANCH (12) BRONSON CITY (10860) 141 S MATTESON ST BRONSON MI 49028-9805 185 903419785 -BRANCH (12) BRONSON TOWNSHIP (10880) 973 WEAVER RD BRONSON MI 49028-9807 185 903419785 -BRANCH (12) BUTLER TOWNSHIP (12140) 887 HERRICKSVILLE RD TEKONSHA MI 49092-9802 185 903419785 -BRANCH (12) CALIFORNIA TOWNSHIP (12560) 898 KELLEY ROAD MONTGOMERY MI 49255-9900 185 903419785 -BRANCH (12) COLDWATER CITY (17020) ONE GRAND STREET COLDWATER MI 49036-9807 185 903419785 -BRANCH (12) COLDWATER TOWNSHIP (17040) 319 SPRAGUE ROAD COLDWATER MI 49036-9808 185 903419785 -BRANCH (12) GILEAD TOWNSHIP (32120) 822 S. SNOW PRAIRIE RD BRONSON MI 49028-9808 185 903419785 -BRANCH (12) GIRARD TOWNSHIP (32280) 1009 MARSHALL RD. COLDWATER MI 49036-9806 185 903419785 -BRANCH (12) KINDERHOOK TOWNSHIP (43260) 797 S ANGOLA RD COLDWATER MI 49036-9805 185 903419785 -BRANCH (12) MATTESON TOWNSHIP (52400) 850 S WERNERS LANDING BRONSON MI 49028-9801 185 903419785 -BRANCH (12) NOBLE TOWNSHIP (57860) 755 PLEASANT HILL RD BRONSON MI 49028-9803 185 903419785 -BRANCH (12) OVID TOWNSHIP (61840) 381 S ANGOLA RD COLDWATER MI 49036-9802 185 903419785 -BRANCH (12) QUINCY TOWNSHIP (66660) 39 BERRY ST QUINCY MI 49082-9800 185 903419785 -BRANCH (12) SHERWOOD TOWNSHIP (73440) PO BOX 8 SHERWOOD MI 49089-9801 185 903419785 -BRANCH (12) UNION TOWNSHIP (81280) 191 NORTH BROADWAY STREET UNION CITY MI 49094-9800 185 903419785 -CALHOUN (13) ALBION CITY (00980) 112 W CASS ST ALBION MI 49224-9901 185 903419785 -CALHOUN (13) ALBION TOWNSHIP 28051 F DRIVE SOUTH ALBION MI 49224-9916 185 903419785 -CALHOUN (13) ATHENS TOWNSHIP (03900) PO BOX 368 ATHENS MI 49011-9801 185 903419785 -CALHOUN (13) BATTLE CREEK CITY (05920) P.O. BOX 1717 BATTLE CREEK MI 49016-9800 185 903419785 -CALHOUN (13) BEDFORD TOWNSHIP (06720) 115 S ULDRIKS DRIVE BATTLE CREEK MI 49037-9801 185 903419785 -CALHOUN (13) BURLINGTON TOWNSHIP (11820) P.O. BOX 69 BURLINGTON MI 49026-9806 185 903419785 -CALHOUN (13) CLARENCE TOWNSHIP (15960) 27052 R DRIVE NORTH ALBION MI 49224-9915 185 903419785 -CALHOUN (13) CLARENDON TOWNSHIP (16020) PO BOX 274 TEKONSHA MI 49092-9803 185 903419785 -CALHOUN (13) CONVIS TOWNSHIP (17880) 19500 15 MILE RD MARSHALL MI 49068-9805 185 903419785 -CALHOUN (13) ECKFORD TOWNSHIP (24700) 21000 F DRIVE SOUTH MARSHALL MI 49068-9806 185 903419785 -CALHOUN (13) EMMETT TOWNSHIP (25935) 621 CLIFF ST. BATTLE CREEK MI 49014-9801 185 903419785 -CALHOUN (13) FREDONIA TOWNSHIP (30500) 8803 US HIGHWAY 27 S MARSHALL MI 49068-9804 185 903419785 -CALHOUN (13) HOMER TOWNSHIP (38940) PO BOX 205 HOMER MI 49245-9901 185 903419785 -CALHOUN (13) LEE TOWNSHIP (46620) 23045 21 MILE ROAD OLIVET MI 49076-9808 185 903419785 -CALHOUN (13) LEROY TOWNSHIP (47060) 8156 4 MILE ROAD EAST LEROY MI 49051-9800 185 903419785 -CALHOUN (13) MARENGO TOWNSHIP (51520) 14021 23 MILE RD ALBION MI 49224-9913 185 903419785 -CALHOUN (13) MARSHALL CITY (51940) 323 W MICHIGAN AVE MARSHALL MI 49068-9802 185 903419785 -CALHOUN (13) MARSHALL TOWNSHIP (51960) 13551 MYRON AVERY DR MARSHALL MI 49068-9803 185 903419785 -CALHOUN (13) NEWTON TOWNSHIP (57620) 11003 9 1/2 MI RD CERESCO MI 49033-9802 185 903419785 -CALHOUN (13) PENNFIELD TOWNSHIP (63440) 20260 CAPITAL AVE NE BATTLE CREEK MI 49017-9803 185 903419785 -CALHOUN (13) SHERIDAN TOWNSHIP (72980) 13355 29 MILE RD ALBION MI 49224-9801 185 903419785 -CALHOUN (13) SPRINGFIELD CITY (75700) 601 AVENUE A SPRINGFIELD MI 49037-9800 185 903419785 -CALHOUN (13) TEKONSHA TOWNSHIP (79180) 166 SPIRES PARKWAY TEKONSHA MI 49092-9801 185 903419785 -CASS (14) CALVIN TOWNSHIP (12620) 18693 MT ZION ST CASSOPOLIS MI 49031-9817 185 903419785 -CASS (14) DOWAGIAC CITY (22880) 241 SOUTH FRONT STREET DOWAGIAC MI 49047-9811 185 903419785 -CASS (14) HOWARD TOWNSHIP (39480) 1345 BARRON LAKE ROAD NILES MI 49120-9806 185 903419785 -CASS (14) JEFFERSON TOWNSHIP (41600) P.O. BOX 188 CASSOPOLIS MI 49031-9815 185 903419785 -CASS (14) LA GRANGE TOWNSHIP (44140) 24863 POKAGON HIGHWAY CASSOPOLIS MI 49031-9816 185 903419785 -CASS (14) MARCELLUS TOWNSHIP (51480) P.O. BOX 218 MARCELLUS MI 49067-9802 185 903419785 -CASS (14) MASON TOWNSHIP (52140) P O BOX 386 UNION MI 49130 49130-9806 185 903419785 -CASS (14) MILTON TOWNSHIP (54460) 32097 BERTRAND ST NILES MI 49120-9803 185 903419785 -CASS (14) NEWBERG TOWNSHIP (57120) P.O.BOX 37 JONES MI 49061-9810 185 903419785 -CASS (14) ONTWA TOWNSHIP (60900) PO BOX 209 EDWARDSBURG MI 49112-9806 185 903419785 -CASS (14) PENN TOWNSHIP (63380) 61273 ALEXANDER ST VANDALIA MI 49095-9800 185 903419785 -CASS (14) POKAGON TOWNSHIP (65300) 30683 PEAVINE STREET DOWAGIAC MI 49047-9809 185 903419785 -CASS (14) PORTER TOWNSHIP (65720) P.O. BOX 517 UNION MI 49130-9804 185 903419785 -CASS (14) SILVER CREEK TOWNSHIP (73940) POBOX 464 DOWAGIAC MI 49047-9810 185 903419785 -CASS (14) VOLINIA TOWNSHIP (82580) 55534 PENN ROAD CASSOPOLIS MI 49031-9814 185 903419785 -CASS (14) WAYNE TOWNSHIP (84920) 53950 GLENWOOD RD DOWAGIAC MI 49047-9807 185 903419785 -CHARLEVOIX (15) BAY TOWNSHIP (06000) 05045 BOYNE CITY RD BOYNE CITY MI 49712-9811 185 903419785 -CHARLEVOIX (15) BOYNE CITY CITY (09820) 319 N LAKE ST BOYNE CITY MI 49712-9813 185 903419785 -CHARLEVOIX (15) BOYNE VALLEY TOWNSHIP (09860) 2489 RAILROAD ST BOYNE FALLS MI 49713-9811 185 903419785 -CHARLEVOIX (15) CHANDLER TOWNSHIP (14560) 7620 CHANDLER HILL RD BOYNE FALLS MI 49713-9920 185 903419785 -CHARLEVOIX (15) CHARLEVOIX CITY (14780) 210 STATE STREET CHARLEVOIX MI 49720-9804 185 903419785 -CHARLEVOIX (15) CHARLEVOIX TOWNSHIP (14800) 12491 WALLER RD CHARLEVOIX MI 49720-9805 185 903419785 -CHARLEVOIX (15) EAST JORDAN CITY (24020) PO BOX 499 EAST JORDAN MI 49727-9814 185 903419785 -CHARLEVOIX (15) EVANGELINE TOWNSHIP (26580) 2746 WILDWOOD HARBOR RD BOYNE CITY MI 49712-9812 185 903419785 -CHARLEVOIX (15) EVELINE TOWNSHIP (26680) PO BOX 496 EAST JORDAN MI 49727-9815 185 903419785 -CHARLEVOIX (15) HAYES TOWNSHIP (37320) 9195 MAJOR DOUGLAS SLOAN ROAD CHARLEVOIX MI 49720-9801 185 903419785 -CHARLEVOIX (15) HUDSON TOWNSHIP (39700) 4621 WOODIN RD VANDERBILT MI 49795-9805 185 903419785 -CHARLEVOIX (15) MARION TOWNSHIP (51620) 01362 MATCHETT ROAD CHARLEVOIX MI 49720-9803 185 903419785 -CHARLEVOIX (15) MELROSE TOWNSHIP (52880) P.O. BOX 189 WALLOON LAKE MI 49796-9801 185 903419785 -CHARLEVOIX (15) NORWOOD TOWNSHIP (59340) 640 LAKESHORE DR. CHARLEVOIX MI 49720-9802 185 903419785 -CHARLEVOIX (15) PEAINE TOWNSHIP (63140) PO BOX 91 BEAVER ISLAND MI 49782-9806 185 903419785 -CHARLEVOIX (15) SOUTH ARM TOWNSHIP (74680) PO BOX 304 EAST JORDAN MI 49727-9813 185 903419785 -CHARLEVOIX (15) ST JAMES TOWNSHIP (70920) PO BOX 85 BEAVER ISLAND MI 49782-9807 185 903419785 -CHARLEVOIX (15) WILSON TOWNSHIP (87700) 1701 FALL PARK RD BOYNE CITY MI 49712-9805 185 903419785 -CHEBOYGAN (16) ALOHA TOWNSHIP (01720) 4098 MANN ROAD CHEBOYGAN MI 49721-9800 185 903419785 -CHEBOYGAN (16) BEAUGRAND TOWNSHIP (06500) 14633 INVERNESS TRAIL ROAD CHEBOYGAN MI 49721-9805 185 903419785 -CHEBOYGAN (16) BENTON TOWNSHIP (07420) 5012 ORCHARD BEACH RD CHEBOYGAN MI 49721-9806 185 903419785 -CHEBOYGAN (16) BURT TOWNSHIP (11980) PO BOX 9 ALANSON MI 49706-9806 185 903419785 -CHEBOYGAN (16) CHEBOYGAN CITY (15000) PO BOX 39 CHEBOYGAN MI 49721-9810 185 903419785 -CHEBOYGAN (16) ELLIS TOWNSHIP (25400) 6916 CUT OFF RD AFTON MI 49705-9811 185 903419785 -CHEBOYGAN (16) FOREST TOWNSHIP (29400) 9631 M 68/33 ONAWAY MI 49765-9808 185 903419785 -CHEBOYGAN (16) GRANT TOWNSHIP (34200) 5051 REYNOLDS RD CHEBOYGAN MI 49721-9813 185 903419785 -CHEBOYGAN (16) HEBRON TOWNSHIP (37480) 13279 DOUGLAS RD CHEBOYGAN MI 49721-9808 185 903419785 -CHEBOYGAN (16) INVERNESS TOWNSHIP (40820) PO BOX 6009 CHEBOYGAN MI 49721-9807 185 903419785 -CHEBOYGAN (16) KOEHLER TOWNSHIP (43820) PO BOX 11 AFTON MI 49705-9812 185 903419785 -CHEBOYGAN (16) MACKINAW TOWNSHIP (50300) P.O. BOX 95 MACKINAW CITY MI 49701-9811 185 903419785 -CHEBOYGAN (16) MENTOR TOWNSHIP (53100) 11521 WOLVERINE ROAD WOLVERINE MI 49799-9812 185 903419785 -CHEBOYGAN (16) MULLETT TOWNSHIP (56100) PO BOX 328 TOPINABEE MI 49791-9801 185 903419785 -CHEBOYGAN (16) MUNRO TOWNSHIP (56280) 11152 N EXTENSION RD LEVERING MI 49755-9806 185 903419785 -CHEBOYGAN (16) NUNDA TOWNSHIP (59500) P O BOX 535 WOLVERINE MI 49799-9813 185 903419785 -CHEBOYGAN (16) TUSCARORA TOWNSHIP (80880) P O BOX 220 INDIAN RIVER MI 49749-9802 185 903419785 -CHEBOYGAN (16) WALKER TOWNSHIP (82940) P.O Box 90 AFTON MI 49705-9810 185 903419785 -CHEBOYGAN (16) WAVERLY TOWNSHIP (84760) 11133 TWIN SCHOOL RAD ONAWAY MI 49765-9804 185 903419785 -CHEBOYGAN (16) WILMOT TOWNSHIP (87640) 7234 SILVER LAKE ROAD WOLVERINE MI 49799-9811 185 903419785 -CHIPPEWA (17) BAY MILLS TOWNSHIP (06070) 5030 S. RANGER RD BRIMLEY MI 49715-9801 185 903419785 -CHIPPEWA (17) BRUCE TOWNSHIP (11280) 3156 E 12 MILE RD DAFTER MI 49724-9800 185 903419785 -CHIPPEWA (17) CHIPPEWA TOWNSHIP (15560) 30014 W. M28 ECKERMAN MI 49728-9801 185 903419785 -CHIPPEWA (17) DAFTER TOWNSHIP (19540) PO BOX 129 DAFTER MI 49724-9801 185 903419785 -CHIPPEWA (17) DETOUR TOWNSHIP (21770) PO BOX 244 DETOUR VILLAGE MI 49725-9800 185 903419785 -CHIPPEWA (17) DRUMMOND TOWNSHIP (23080) PO BOX 225 DRUMMOND ISLAND MI 49726-9800 185 903419785 -CHIPPEWA (17) HULBERT TOWNSHIP (39860) PO BOX 128 HULBERT MI 49748-9801 185 903419785 -CHIPPEWA (17) KINROSS TOWNSHIP (43480) 4884 WEST CURTIS STREET KINCHELOE MI 49788-9800 185 903419785 -CHIPPEWA (17) PICKFORD TOWNSHIP (63980) PO BOX 456 PICKFORD MI 49774-9800 185 903419785 -CHIPPEWA (17) RABER TOWNSHIP (66760) PO BOX 480 GOETZVILLE MI 49736-9800 185 903419785 -CHIPPEWA (17) RUDYARD TOWNSHIP (70220) PO BOX 277 RUDYARD MI 49780-9800 185 903419785 -CHIPPEWA (17) SAULT STE MARIE CITY (71740) 225 E PORTAGE AVENUE SAULT STE. MARIE MI 49783-9802 185 903419785 -CHIPPEWA (17) SOO TOWNSHIP (74620) 639 3 1/2 MILE ROAD SAULT STE MARIE MI 49783-9803 185 903419785 -CHIPPEWA (17) SUGAR ISLAND TOWNSHIP (77020) 6401 E 1 1/2 MILE RD SAULT STE MARIE MI 49783-9804 185 903419785 -CHIPPEWA (17) SUPERIOR TOWNSHIP (77540) PO BOX 366 BRIMLEY MI 49715-9800 185 903419785 -CHIPPEWA (17) TROUT LAKE TOWNSHIP (80600) PO BOX 215 TROUT LAKE MI 49793-9801 185 903419785 -CHIPPEWA (17) WHITEFISH TOWNSHIP (86700) PO BOX 350 PARADISE MI 49768-9821 185 903419785 -CLARE (18) ARTHUR TOWNSHIP (03620) 3031 S. ATHEY AVENUE CLARE MI 48617-9919 185 903419785 -CLARE (18) CLARE CITY (15920) 202 W. FIFTH STREET CLARE MI 48617-9921 185 903419785 -CLARE (18) FRANKLIN TOWNSHIP (30280) 9809 N M18 GLADWIN MI 48624-9901 185 903419785 -CLARE (18) FREEMAN TOWNSHIP (30560) 7280 W MANNSIDING ROAD LAKE MI 48632-9901 185 903419785 -CLARE (18) FROST TOWNSHIP (30900) P O BOX 566 HARRISON MI 48625-9912 185 903419785 -CLARE (18) GARFIELD TOWNSHIP (31560) PO BOX 390 LAKE MI 48632-9902 185 903419785 -CLARE (18) GRANT TOWNSHIP (34220) PO BOX 208 CLARE MI 48617-9922 185 903419785 -CLARE (18) GREENWOOD TOWNSHIP (35120) 3447 W TEMPLE DR HARRISON MI 48625-9910 185 903419785 -CLARE (18) HAMILTON TOWNSHIP (36140) 3042 N. RODGERS AVENUE HARRISON MI 48625-9909 185 903419785 -CLARE (18) HARRISON CITY (36800) 2105 SULLIVAN DRIVE HARRISON MI 48625-9911 185 903419785 -CLARE (18) HATTON TOWNSHIP (37160) 2020 S CLARE AVENUE CLARE MI 48617-9920 185 903419785 -CLARE (18) HAYES TOWNSHIP (37340) PO BOX 310 HARRISON MI 48625-9913 185 903419785 -CLARE (18) LINCOLN TOWNSHIP (47620) PO BOX 239 LAKE GEORGE MI 48633-9901 185 903419785 -CLARE (18) REDDING TOWNSHIP (67600) 8391 W. TEMPLE DR. HARRISON MI 48625-9914 185 903419785 -CLARE (18) SHERIDAN TOWNSHIP (73000) 9663 EAST BEAVERTON RD CLARE MI 48617-9929 185 903419785 -CLARE (18) SUMMERFIELD TOWNSHIP (77120) 9971 N. FINLEY LAKE HARRISON MI 48625-9915 185 903419785 -CLARE (18) SURREY TOWNSHIP (77580) PO BOX 647 FARWELL MI 48622-9902 185 903419785 -CLARE (18) WINTERFIELD TOWNSHIP (87980) 9533 COOK AVE MARION MI 49665-9933 185 903419785 -CLINTON (19) BATH TOWNSHIP (05900) PO BOX 247 BATH MI 48808-9900 185 903419785 -CLINTON (19) BENGAL TOWNSHIP (07240) 2227 N AIRPORT ROAD ST JOHNS MI 48879-9905 185 903419785 -CLINTON (19) BINGHAM TOWNSHIP (08400) 2057 N LANSING ST ST JOHNS MI 48879-9906 185 903419785 -CLINTON (19) DALLAS TOWNSHIP (19620) PO BOX 297 FOWLER MI 48835-9900 185 903419785 -CLINTON (19) DEWITT CITY (22120) 414 E MAIN ST DEWITT MI 48820-9902 185 903419785 -CLINTON (19) DEWITT TOWNSHIP (22140) 1401 W. HERBISON RD DEWITT MI 48820-9900 185 903419785 -CLINTON (19) DUPLAIN TOWNSHIP (23460) PO BOX 75 ELSIE MI 48831-9902 185 903419785 -CLINTON (19) EAGLE TOWNSHIP (23580) PO BOX 193 EAGLE MI 48822-9901 185 903419785 -CLINTON (19) ESSEX TOWNSHIP (26400) 5111 FINDLAY ROAD ST. JOHNS MI 48879-9904 185 903419785 -CLINTON (19) GREENBUSH TOWNSHIP (34840) 1883 E FRENCH RD ST JOHNS MI 48879-9902 185 903419785 -CLINTON (19) LEBANON TOWNSHIP (46580) PO BOX 375 FOWLER MI 48835-9902 185 903419785 -CLINTON (19) OLIVE TOWNSHIP (60440) 1400 W PRATT RD DEWITT MI 48820-9904 185 903419785 -CLINTON (19) OVID CITY (61860) PO BOX 138 OVID MI 48866-9901 185 903419785 -CLINTON (19) OVID TOWNSHIP (61880) 381 S ANGOLA RD COLDWATER MI 49036-9802 185 903419785 -CLINTON (19) RILEY TOWNSHIP (68600) 7110 WEST PRATT ROAD DEWITT MI 48820-9901 185 903419785 -CLINTON (19) ST JOHNS CITY (70940) PO BOX 477 ST JOHNS MI 48879-9903 185 903419785 -CLINTON (19) VICTOR TOWNSHIP (82320) 6843 ALWARD ROAD LAINGSBURG MI 48848-9902 185 903419785 -CLINTON (19) WATERTOWN TOWNSHIP (84400) 12803 S. WACOUSTA ROAD GRAND LEDGE MI 48837-9900 185 903419785 -CLINTON (19) WESTPHALIA TOWNSHIP (86140) PO BOX 429 WESTPHALIA MI 48894-9902 185 903419785 -CRAWFORD (20) BEAVER CREEK TOWNSHIP (06600) 8888 S GRAYLING RD GRAYLING MI 49738-9805 185 903419785 -CRAWFORD (20) FREDERIC TOWNSHIP (30480) PO BOX 78 FREDERIC MI 49733-9801 185 903419785 -CRAWFORD (20) GRAYLING CHARTER TOWNSHIP (34660) PO BOX 521 GRAYLING MI 49738-9804 185 903419785 -CRAWFORD (20) GRAYLING CITY (34640) PO BOX 549 GRAYLING MI 49738-9800 185 903419785 -CRAWFORD (20) LOVELLS TOWNSHIP (49520) 8405 TWIN BRIDGE ROAD GRAYLING MI 49738-9806 185 903419785 -CRAWFORD (20) MAPLE FOREST TOWNSHIP (50940) 8996 SHERMAN ROAD GRAYLING MI 49738-9803 185 903419785 -CRAWFORD (20) SOUTH BRANCH TOWNSHIP (74760) PO BOX 606 ROSCOMMON MI 48653-9905 185 903419785 -DELTA (21) BALDWIN TOWNSHIP (04900) PO BOX 173 PERKINS MI 49872-9900 185 903419785 -DELTA (21) BARK RIVER TOWNSHIP (05420) 1110 OLD HWY 2 AND 41 BARK RIVER MI 49807-9900 185 903419785 -DELTA (21) BAY DE NOC TOWNSHIP (06040) 5870 COUNTY 513 T ROAD RAPID RIVER MI 49878-9902 185 903419785 -DELTA (21) BRAMPTON TOWNSHIP (09980) 9131 BAY SHORE DR GLADSTONE MI 49837-9903 185 903419785 -DELTA (21) CORNELL TOWNSHIP (18280) 3010 COUNTY 426 24TH RD CORNELL MI 49818-9900 185 903419785 -DELTA (21) ENSIGN TOWNSHIP (26140) 9543 COUNTY 511 22ND RD RAPID RIVER MI 49878-9903 185 903419785 -DELTA (21) ESCANABA CITY (26360) 410 LUDINGTON STREET ESCANABA MI 49829-9902 185 903419785 -DELTA (21) ESCANABA TOWNSHIP (26380) 4618 CO. 416 20TH RD GLADSTONE MI 49837-9902 185 903419785 -DELTA (21) FAIRBANKS TOWNSHIP (26960) PO BOX 142 GARDEN MI 49835-9902 185 903419785 -DELTA (21) FORD RIVER TOWNSHIP (29380) 3845 K ROAD BARK RIVER MI 49807-9902 185 903419785 -DELTA (21) GARDEN TOWNSHIP (31400) PO BOX 224 GARDEN MI 49835-9900 185 903419785 -DELTA (21) GLADSTONE CITY (32300) 1100 DELTA AVE GLADSTONE MI 49837-9900 185 903419785 -DELTA (21) MAPLE RIDGE TOWNSHIP (51260) PO BOX 135 ROCK MI 49880-9901 185 903419785 -DELTA (21) MASONVILLE TOWNSHIP (52220) 10584 NORTH MAIN ST RAPID RIVER MI 49878-9904 185 903419785 -DELTA (21) NAHMA TOWNSHIP (56500) 13751 WELLS 21.2 ST. NAHMA MI 49864-9901 185 903419785 -DELTA (21) WELLS TOWNSHIP (85240) P.O. BOX 188 WELLS MI 49894-9900 185 903419785 -DICKINSON (22) BREEN TOWNSHIP (10200) W2308 HWY M69 FOSTER CITY MI 49834-9900 185 903419785 -DICKINSON (22) BREITUNG TOWNSHIP (10220) PO BOX 160 QUINNESEC MI 49876-9900 185 903419785 -DICKINSON (22) FELCH TOWNSHIP (27660) P.O. BOX 187 FELCH MI 49831-9900 185 903419785 -DICKINSON (22) IRON MOUNTAIN CITY (40960) 501 S STEPHENSON AVE IRON MOUNTAIN MI 49801-9900 185 903419785 -DICKINSON (22) KINGSFORD CITY (43300) 305 S. CARPENTER AVE. KINGSFORD MI 49802-9900 185 903419785 -DICKINSON (22) NORWAY CITY (59220) PO BOX 99 NORWAY MI 49870-9901 185 903419785 -DICKINSON (22) NORWAY TOWNSHIP (59240) P. O. BOX 495 VULCAN MI 49892-9900 185 903419785 -DICKINSON (22) SAGOLA TOWNSHIP (70600) PO BOX 195 CHANNING MI 49815-9900 185 903419785 -DICKINSON (22) WAUCEDAH TOWNSHIP (84700) W3930 MORGAN STREET LORETTO MI 49852-9900 185 903419785 -DICKINSON (22) WEST BRANCH TOWNSHIP (85520) PO BOX 13 RALPH MI 49877-9900 185 903419785 -EATON (23) BELLEVUE TOWNSHIP (07080) PO BOX 6 BELLEVUE MI 49021-9801 185 903419785 -EATON (23) BENTON CHARTER TOWNSHIP (07440) 5136 WINDSOR HWY POTTERVILLE MI 48876-9901 185 903419785 -EATON (23) BROOKFIELD TOWNSHIP (10920) 2638 E BELLEVUE HWY CHARLOTTE MI 48813-9907 185 903419785 -EATON (23) CARMEL TOWNSHIP (13380) 661 BEECH HWY CHARLOTTE MI 48813-9903 185 903419785 -EATON (23) CHARLOTTE CITY (14820) 111 E. LAWRENCE AVE. CHARLOTTE MI 48813-9901 185 903419785 -EATON (23) CHESTER TOWNSHIP (15260) 2034 W VERMONTVILLE HWY CHARLOTTE MI 48813-9902 185 903419785 -EATON (23) DELTA TOWNSHIP (21520) 7710 W SAGINAW HWY LANSING MI 48917-9929 185 903419785 -EATON (23) EATON RAPIDS CITY (24540) 200 S MAIN ST EATON RAPIDS MI 48827-9909 185 903419785 -EATON (23) EATON RAPIDS TOWNSHIP (24560) 2512 S. CANAL RD. EATON RAPIDS MI 48827-9911 185 903419785 -EATON (23) EATON TOWNSHIP (24520) 3981 E CLINTON TRAIL CHARLOTTE MI 48813-9904 185 903419785 -EATON (23) GRAND LEDGE CITY (33420) 310 GREENWOOD ST GRAND LEDGE MI 48837-9906 185 903419785 -EATON (23) HAMLIN TOWNSHIP (36200) 6463 S CLINTON TRAIL EATON RAPIDS MI 48827-9902 185 903419785 -EATON (23) KALAMO TOWNSHIP (42220) 8960 SPORE ST VERMONTVILLE MI 49096-9800 185 903419785 -EATON (23) OLIVET CITY (60580) 117 S. MAIN ST. OLIVET MI 49076-9807 185 903419785 -EATON (23) ONEIDA CHARTER TOWNSHIP (60700) 11041 ONEIDA RD GRAND LEDGE MI 48837-9904 185 903419785 -EATON (23) POTTERVILLE CITY (66100) P O BOX 488 POTTERVILLE MI 48876-9900 185 903419785 -EATON (23) ROXAND TOWNSHIP (70020) P O BOX 127 MULLIKEN MI 48861-9900 185 903419785 -EATON (23) SUNFIELD TOWNSHIP (77440) PO BOX 68 SUNFIELD MI 48890-9900 185 903419785 -EATON (23) VERMONTVILLE TOWNSHIP (81980) PO BOX 215 VERMONTVILLE MI 49096-9801 185 903419785 -EATON (23) WALTON TOWNSHIP (83180) PO BOX 306 OLIVET MI 49076-9802 185 903419785 -EATON (23) WINDSOR CHARTER TOWNSHIP (87840) 405 WEST JEFFERSON DIMONDALE MI 48821-9900 185 903419785 -EMMET (24) BEAR CREEK TOWNSHIP (06380) 373 NORTH DIVISION ROAD PETOSKEY MI 49770-9827 185 903419785 -EMMET (24) BLISS TOWNSHIP (08980) 41 W LAKEVIEW LEVERING MI 49755-9811 185 903419785 -EMMET (24) CARP LAKE TOWNSHIP (13500) 6339 E GILL RD CARP LAKE MI 49718-9800 185 903419785 -EMMET (24) CENTER TOWNSHIP (14300) 981 W VAN RD PELLSTON MI 49769-9812 185 903419785 -EMMET (24) CROSS VILLAGE TOWNSHIP (18900) PO BOX 182 CROSS VILLAGE MI 49723-9801 185 903419785 -EMMET (24) FRIENDSHIP TOWNSHIP (30860) 8774 KAWEGOMA RD HARBOR SPRINGS MI 49740-9818 185 903419785 -EMMET (24) HARBOR SPRINGS TOWNSHIP (36560) PO BOX 678 HARBOR SPRINGS MI 49740-9817 185 903419785 -EMMET (24) LITTLE TRAVERSE TOWNSHIP (48080) 8288 S PLEASANTVIEW RD HARBOR SPRINGS MI 49740-9819 185 903419785 -EMMET (24) LITTLEFIELD TOWNSHIP (48020) PO BOX 295 CONWAY MI 49722-9802 185 903419785 -EMMET (24) MAPLE RIVER TOWNSHIP (51280) 3989 US HWY 31 BRUTUS MI 49716-9801 185 903419785 -EMMET (24) MCKINLEY TOWNSHIP (50340) PO BOX 262 PELLSTON MI 49769-9801 185 903419785 -EMMET (24) PETOSKEY CITY (63820) 101 EAST LAKE STREET PETOSKEY MI 49770-9826 185 903419785 -EMMET (24) PLEASANTVIEW TOWNSHIP (64960) 2982 S PLEASANTVIEW RD HARBOR SPRINGS MI 49740-9822 185 903419785 -EMMET (24) READMOND TOWNSHIP (67540) 6034 WORMWOOD LANE HARBOR SPRINGS MI 49740-9821 185 903419785 -EMMET (24) RESORT TOWNSHIP (68060) 2232 RESORT PIKE ROAD PETOSKEY MI 49770-9825 185 903419785 -EMMET (24) SPRINGVALE TOWNSHIP (75900) 8198 E MITCHELL RD PETOSKEY MI 49770-9823 185 903419785 -EMMET (24) WAWATAM TOWNSHIP (84840) PO BOX 481 MACKINAW CITY MI 49701-9810 185 903419785 -EMMET (24) WEST TRAVERSE TOWNSHIP (86300) P.O. BOX 528 HARBOR SPRINGS MI 49740-9820 185 903419785 -GENESEE (25) ARGENTINE TOWNSHIP (03420) 9048 SILVER LAKE RD LINDEN MI 48451-9802 185 903419785 -GENESEE (25) ATLAS TOWNSHIP (04000) PO BOX 277 GOODRICH MI 48438-9800 185 903419785 -GENESEE (25) BURTON CITY (12060) 4303 S CENTER RD BURTON MI 48519-9902 185 903419785 -GENESEE (25) CLAYTON TOWNSHIP (16260) 2011 S MORRISH RD SWARTZ CREEK MI 48473-9910 185 903419785 -GENESEE (25) CLIO CITY (16620) 505 W VIENNA ST CLIO MI 48420-9907 185 903419785 -GENESEE (25) DAVISON CITY (19880) 200 E FLINT ST STE 2 DAVISON MI 48423-9905 185 903419785 -GENESEE (25) DAVISON TOWNSHIP (19900) 1280 N IRISH RD DAVISON MI 48423-9906 185 903419785 -GENESEE (25) FENTON CITY (27760) 301 S LEROY ST FENTON MI 48430-9904 185 903419785 -GENESEE (25) FENTON TOWNSHIP (27780) 12060 MANTAWAUKA DRIVE FENTON MI 48430-9903 185 903419785 -GENESEE (25) FLINT CITY (29000) 1101 S. SAGINAW ST RM 201C FLINT MI 48502-9904 185 903419785 -GENESEE (25) FLINT TOWNSHIP (29020) 1490 S DYE ROAD FLINT MI 48532-9913 185 903419785 -GENESEE (25) FLUSHING CITY (29200) 725 E MAIN STREET FLUSHING MI 48433-9905 185 903419785 -GENESEE (25) FLUSHING TOWNSHIP (29220) 6524 N SEYMOUR RD FLUSHING MI 48433-9902 185 903419785 -GENESEE (25) FOREST TOWNSHIP (29420) 130 MAIN ST STE A OTISVILLE MI 48463-9901 185 903419785 -GENESEE (25) GAINES TOWNSHIP (31220) 9255 GRAND BLANC RD GAINES MI 48436-9900 185 903419785 -GENESEE (25) GENESEE TOWNSHIP (31800) PO BOX 215 GENESEE MI 48437-9901 185 903419785 -GENESEE (25) GRAND BLANC CITY (33280) 203 E GRAND BLANC RD GRAND BLANC MI 48439-9912 185 903419785 -GENESEE (25) GRAND BLANC TOWNSHIP (33300) 5371 S SAGINAW STREET GRAND BLANC MI 48507-9814 185 903419785 -GENESEE (25) LINDEN CITY (47820) P.O. BOX 507 LINDEN MI 48451-9903 185 903419785 -GENESEE (25) MONTROSE CITY (55280) 139 S SAGINAW ST MONTROSE MI 48457-9901 185 903419785 -GENESEE (25) MONTROSE TOWNSHIP (55300) 11444 N. SEYMOUR RD MONTROSE MI 48457-9902 185 903419785 -GENESEE (25) MOUNT MORRIS CITY (55960) 11649 N. SAGINAW STREET MT MORRIS MI 48458-9909 185 903419785 -GENESEE (25) MOUNT MORRIS TOWNSHIP (55980) 5447 BICENTENNIAL DR. STE 1 MT MORRIS MI 48458-9908 185 903419785 -GENESEE (25) MUNDY TOWNSHIP (56160) 3478 MUNDY AVE SWARTZ CREEK MI 48473--9906 185 903419785 -GENESEE (25) RICHFIELD TOWNSHIP (68180) 5381 N STATE RD. DAVISON MI 48423-9907 185 903419785 -GENESEE (25) SWARTZ CREEK CITY (77700) 8083 CIVIC DRIVE SWARTZ CREEK MI 48473-9905 185 903419785 -GENESEE (25) THETFORD TOWNSHIP (79460) 4014 E VIENNA RD CLIO MI 48420-9910 185 903419785 -GENESEE (25) VIENNA TOWNSHIP (82380) 3400 W VIENNA RD CLIO MI 48420-9911 185 903419785 -GLADWIN (26) BEAVERTON CITY (06660) PO BOX 477 BEAVERTON MI 48612-9904 185 903419785 -GLADWIN (26) BEAVERTON TOWNSHIP (06680) PO BOX 428 BEAVERTON MI 48612-9903 185 903419785 -GLADWIN (26) BENTLEY TOWNSHIP (07360) 4167 ESTEY RD RHODES MI 48652-9901 185 903419785 -GLADWIN (26) BILLINGS TOWNSHIP (08360) 1050 ESTEY RD BEAVERTON MI 48612-9902 185 903419785 -GLADWIN (26) BOURRET TOWNSHIP (09720) 2749 SCHOOL RD ALGER MI 48610-9906 185 903419785 -GLADWIN (26) BUCKEYE TOWNSHIP (11440) 2525 SHAFFER RD BEAVERTON MI 48612-9907 185 903419785 -GLADWIN (26) BUTMAN TOWNSHIP (12180) 5005 HOCKADAY RD GLADWIN MI 48624-9913 185 903419785 -GLADWIN (26) CLEMENT TOWNSHIP (16360) 1497 E M-30 ALGER MI 48610-9903 185 903419785 -GLADWIN (26) GLADWIN CITY (32320) 1000 W CEDAR AVE GLADWIN MI 48624-9917 185 903419785 -GLADWIN (26) GLADWIN TOWNSHIP (32340) 2016 NICKLESS ROAD GLADWIN MI 48624-9914 185 903419785 -GLADWIN (26) GRIM TOWNSHIP (35340) 4455 SCHAARD RD BENTLEY MI 48613-9902 185 903419785 -GLADWIN (26) GROUT TOWNSHIP (35620) 4681 NORTHLAND DR GLADWIN MI 48624-9981 185 903419785 -GLADWIN (26) HAY TOWNSHIP (37300) 1220 E. HIGHWOOD RD BEAVERTON MI 48612-9905 185 903419785 -GLADWIN (26) SAGE TOWNSHIP (70500) 1831 NORTH PRATT LAKE ROAD GLADWIN MI 48624-9912 185 903419785 -GLADWIN (26) SECORD TOWNSHIP (72240) 1507 SECORD DAM RD GLADWIN MI 48624-9915 185 903419785 -GLADWIN (26) SHERMAN TOWNSHIP (73140) 4013 OBERLIN RD. GLADWIN MI 48624-9916 185 903419785 -GLADWIN (26) TOBACCO TOWNSHIP (79860) PO BOX 380 BEAVERTON MI 48612-9900 185 903419785 -GOGEBIC (27) BESSEMER CITY (07960) 411 S SOPHIE ST BESSEMER MI 49911-9900 185 903419785 -GOGEBIC (27) BESSEMER TOWNSHIP (07980) P O BOX 304 RAMSAY MI 49959-9900 185 903419785 -GOGEBIC (27) ERWIN TOWNSHIP (26340) P. O. BOX 117 IRONWOOD MI 49938-9902 185 903419785 -GOGEBIC (27) IRONWOOD CITY (41060) 213 S. MARQUETTE ST. IRONWOOD MI 49938-9901 185 903419785 -GOGEBIC (27) IRONWOOD TOWNSHIP (41080) N10892 LAKE RD IRONWOOD MI 49938-9900 185 903419785 -GOGEBIC (27) MARENISCO TOWNSHIP (51560) PO BOX 198 MARENISCO MI 49947-9900 185 903419785 -GOGEBIC (27) WAKEFIELD CITY (82780) 509 SUNDAY LAKE ST WAKEFIELD MI 49968-9901 185 903419785 -GOGEBIC (27) WAKEFIELD TOWNSHIP (82800) PO BOX 164 WAKEFIELD MI 49968-9900 185 903419785 -GOGEBIC (27) WATERSMEET TOWNSHIP (84380) PO BOX 306 WATERSMEET MI 49969-9900 185 903419785 -GRAND TRAVERSE (28) ACME TOWNSHIP (00200) 6100 US HWY 31 STE A WILLIAMSBURG MI 49690-9902 185 903419785 -GRAND TRAVERSE (28) BLAIR TOWNSHIP (08880) 2121 COUNTY ROAD 633 GRAWN MI 49637-9902 185 903419785 -GRAND TRAVERSE (28) EAST BAY TOWNSHIP (23800) 1965 NORTH THREE MILE RD TRAVERSE CITY MI 49696-9900 185 903419785 -GRAND TRAVERSE (28) FIFE LAKE TOWNSHIP (28020) P.O. BOX 87 FIFE LAKE MI 49633-9900 185 903419785 -GRAND TRAVERSE (28) GARFIELD TOWNSHIP (31580) 3848 VETERANS DR TRAVERSE CITY MI 49684-9955 185 903419785 -GRAND TRAVERSE (28) GRANT TOWNSHIP (34240) PO BOX 340 BUCKLEY MI 49620-9901 185 903419785 -GRAND TRAVERSE (28) GREEN LAKE TOWNSHIP (34960) 9394 10TH STREET INTERLOCHEN MI 49643-9903 185 903419785 -GRAND TRAVERSE (28) LONG LAKE TOWNSHIP (49240) 8870 NORTH LONG LAKE RD TRAVERSE CITY MI 49685-9905 185 903419785 -GRAND TRAVERSE (28) MAYFIELD TOWNSHIP (52480) 2991 W. CENTER ROAD KINGSLEY MI 49649-9901 185 903419785 -GRAND TRAVERSE (28) PARADISE TOWNSHIP (62320) 2300 E M 113 KINGSLEY MI 49649-9902 185 903419785 -GRAND TRAVERSE (28) PENINSULA TOWNSHIP (63340) 13235 CENTER RD TRAVERSE CITY MI 49686-9902 185 903419785 -GRAND TRAVERSE (28) TRAVERSE CITY CITY (80340) 400 BOARDMAN AVE TRAVERSE CITY MI 49684-9963 185 903419785 -GRAND TRAVERSE (28) UNION TOWNSHIP (81320) PO BOX 30 FIFE LAKE MI 49633-9930 185 903419785 -GRAND TRAVERSE (28) WHITEWATER TOWNSHIP (87040) 5777 VINTON ROAD P.O. BOX 159 WILLIAMSBURG MI 49690-9901 185 903419785 -GRATIOT (29) ALMA CITY (01540) 525 E SUPERIOR ALMA MI 48801-9904 185 903419785 -GRATIOT (29) ARCADA TOWNSHIP (03260) 1798 N. ELY HWY ALMA MI 48801-9902 185 903419785 -GRATIOT (29) BETHANY TOWNSHIP (08020) 10239 DEAN RD ST LOUIS MI 48880-9905 185 903419785 -GRATIOT (29) ELBA TOWNSHIP (25120) PO BOX 209 ASHLEY MI 48806-9901 185 903419785 -GRATIOT (29) EMERSON TOWNSHIP (25880) 1103 N BALDWIN RD ITHACA MI 48847-9912 185 903419785 -GRATIOT (29) FULTON TOWNSHIP (31080) PO BOX 68 PERRINTON MI 48871-9801 185 903419785 -GRATIOT (29) HAMILTON TOWNSHIP (36160) 2417 SOUTH BARRY ROAD ITHACA MI 48847-9902 185 903419785 -GRATIOT (29) ITHACA CITY (41340) 129 W EMERSON STREET ITHACA MI 48847-9910 185 903419785 -GRATIOT (29) LAFAYETTE TOWNSHIP (44080) 4426 N. RANSOM RD. BRECKENRIDGE MI 48615-9901 185 903419785 -GRATIOT (29) NEW HAVEN TOWNSHIP (57360) 3080 S. FERRIS ROAD SUMNER MI 48889-9901 185 903419785 -GRATIOT (29) NEWARK TOWNSHIP (57040) 3239 S BEGOLE RD ITHACA MI 48847-9905 185 903419785 -GRATIOT (29) NORTH SHADE TOWNSHIP (58800) 11666 CLEVELAND RD CARSON CITY MI 48811-9906 185 903419785 -GRATIOT (29) NORTH STAR TOWNSHIP (58880) 3064 S CRAPO RD ITHACA MI 48847-9907 185 903419785 -GRATIOT (29) PINE RIVER TOWNSHIP (64360) 1495 W. MONROE RD. ST LOUIS MI 48880-9904 185 903419785 -GRATIOT (29) SEVILLE TOWNSHIP (72580) PO BOX 222 ELWELL MI 48832-9900 185 903419785 -GRATIOT (29) ST LOUIS CITY (71000) 300 N. MILL STREET ST LOUIS MI 48880-9903 185 903419785 -GRATIOT (29) SUMNER TOWNSHIP (77300) 8644 W. POLK RD. SUMNER MI 48889-9900 185 903419785 -GRATIOT (29) WASHINGTON TOWNSHIP (84080) 8989 S. BALDWIN RD. ASHLEY MI 48806-9900 185 903419785 -GRATIOT (29) WHEELER TOWNSHIP (86620) 8510 E MONROE RD WHEELER MI 48662-9901 185 903419785 -HILLSDALE (30) ADAMS TOWNSHIP (00300) PO BOX 336 NORTH ADAMS MI 49262-9900 185 903419785 -HILLSDALE (30) ALLEN TOWNSHIP (01320) PO BOX 6 ALLEN MI 49227-9900 185 903419785 -HILLSDALE (30) AMBOY TOWNSHIP (02020) 13391 FRONTIER ROAD CAMDEN MI 49232-9801 185 903419785 -HILLSDALE (30) CAMBRIA TOWNSHIP (12700) 7249 CAMBRIA ROAD HILLSDALE MI 49242-9905 185 903419785 -HILLSDALE (30) CAMDEN TOWNSHIP (12780) PO BOX 71 CAMDEN MI 49232-9802 185 903419785 -HILLSDALE (30) FAYETTE TOWNSHIP (27580) 211 NORTH STREET JONESVILLE MI 49250-9903 185 903419785 -HILLSDALE (30) HILLSDALE CITY (38460) 97 N BROAD ST HILLSDALE MI 49242-9916 185 903419785 -HILLSDALE (30) HILLSDALE TOWNSHIP (38480) PO BOX 181 HILLSDALE MI 49242-9923 185 903419785 -HILLSDALE (30) JEFFERSON TOWNSHIP (41620) P O BOX 31 OSSEO MI 49266-9902 185 903419785 -HILLSDALE (30) JONESVILLE CITY (41920) 265 E CHICAGO ST JONESVILLE MI 49250-9901 185 903419785 -HILLSDALE (30) LITCHFIELD CITY (47980) P.O. BOX 236 LITCHFIELD MI 49252-9900 185 903419785 -HILLSDALE (30) LITCHFIELD TOWNSHIP (48000) PO BOX 417 LITCHFIELD MI 49252-9901 185 903419785 -HILLSDALE (30) MOSCOW TOWNSHIP (55640) 7324 E CHICAGO RD JONESVILLE MI 49250-9904 185 903419785 -HILLSDALE (30) PITTSFORD TOWNSHIP (64620) P.O. BOX 211 PITTSFORD MI 49271-9900 185 903419785 -HILLSDALE (30) RANSOM TOWNSHIP (67120) PO BOX 52 OSSEO MI 69250-9906 185 903419785 -HILLSDALE (30) READING CITY (67500) PO BOX 240 READING MI 49274-9908 185 903419785 -HILLSDALE (30) READING TOWNSHIP (67520) PO BOX 298 READING MI 49274-9907 185 903419785 -HILLSDALE (30) SCIPIO TOWNSHIP (71980) PO BOX 36 JONESVILLE MI 49250-9905 185 903419785 -HILLSDALE (30) SOMERSET TOWNSHIP (74560) PO BOX 69 SOMERSET CENTER MI 49282-9900 185 903419785 -HILLSDALE (30) WHEATLAND TOWNSHIP (86540) 2359 WHEATLAND RD PITTSFORD MI 49271-9901 185 903419785 -HILLSDALE (30) WOODBRIDGE TOWNSHIP (88300) 12580 FRONTIER RD CAMDEN MI 49232-9900 185 903419785 -HILLSDALE (30) WRIGHT TOWNSHIP (88780) 117 LARRY DR WALDRON MI 49288-9901 185 903419785 -HOUGHTON (31) ADAMS TOWNSHIP (00320) PO BOX 520 SOUTH RANGE mi 49963-9900 185 903419785 -HOUGHTON (31) CALUMET TOWNSHIP (12600) 25880 RED JACKET RD CALUMET MI 49913-9901 185 903419785 -HOUGHTON (31) CHASSELL TOWNSHIP (14920) 41950 WILSON MEMORIAL DR PO BOX 438 CHASSELL MI 49916-9900 185 903419785 -HOUGHTON (31) DUNCAN TOWNSHIP (23340) P.O. BOX 119 SIDNAW MI 49961-9900 185 903419785 -HOUGHTON (31) ELM RIVER TOWNSHIP (25660) 32850 STATE HWY M26 TOIVOLA MI 49965-9901 185 903419785 -HOUGHTON (31) FRANKLIN TOWNSHIP (30300) 49850 US HWY 41 HANCOCK MI 49930-9906 185 903419785 -HOUGHTON (31) HANCOCK CITY (36300) 399 QUINCY STREET HANCOCK MI 49930-9904 185 903419785 -HOUGHTON (31) HANCOCK TOWNSHIP (36320) PO BOX 517 HANCOCK MI 49930-9902 185 903419785 -HOUGHTON (31) HOUGHTON CITY (39360) 616 SHELDEN AVENUE SUITE 102 HOUGHTON MI 49931-9901 185 903419785 -HOUGHTON (31) LAIRD TOWNSHIP (44220) PO BOX 9 NISULA MI 49952-9900 185 903419785 -HOUGHTON (31) OSCEOLA TOWNSHIP (61260) PO BOX 437 DOLLAR BAY MI 49922-9900 185 903419785 -HOUGHTON (31) PORTAGE TOWNSHIP (65540) 47240 GREEN ACRES RD HOUGHTON MI 49931-9902 185 903419785 -HOUGHTON (31) QUINCY TOWNSHIP (66680) PO BOX 277 HANCOCK MI 49930-9905 185 903419785 -HOUGHTON (31) SCHOOLCRAFT TOWNSHIP (71840) 226 FRONT ST LAKE LINDEN MI 49945-9901 185 903419785 -HOUGHTON (31) STANTON TOWNSHIP (76200) 50960 CANAL RD HOUGHTON MI 49931-9900 185 903419785 -HOUGHTON (31) TORCH LAKE TOWNSHIP (80120) PO BOX 429 HUBBELL MI 49934-9900 185 903419785 -HURON (32) BAD AXE CITY (04740) 300 E HURON BAD AXE MI 48413-9906 185 903419785 -HURON (32) BINGHAM TOWNSHIP (08420) PO BOX 371 UBLY MI 49475-9904 185 903419785 -HURON (32) BLOOMFIELD TOWNSHIP (09060) 2967 PARISVILLE ROAD PORT HOPE MI 48468-9900 185 903419785 -HURON (32) BROOKFIELD TOWNSHIP (10940) 6829 SEBEWAING RD. OWENDALE MI 48754-9901 185 903419785 -HURON (32) CASEVILLE CITY (13760) 6767 MAIN PO BOX 1049 CASEVILLE MI 48725-9903 185 903419785 -HURON (32) CASEVILLE TOWNSHIP (13780) 6767 MAIN ST PO BOX 519 CASEVILLE MI 48725-9901 185 903419785 -HURON (32) CHANDLER TOWNSHIP (14600) 3162 N MAXWELL RD PIGEON MI 48755-9904 185 903419785 -HURON (32) COLFAX TOWNSHIP (17140) 177 N. BARRIE ROAD BAD AXE MI 48413-9900 185 903419785 -HURON (32) DWIGHT TOWNSHIP (23540) 5082 CLINTON ST KINDE MI 48445-9900 185 903419785 -HURON (32) FAIRHAVEN TOWNSHIP 9811 MAIN STREET BAY PORT MI 48720-9901 185 903419785 -HURON (32) GORE TOWNSHIP (33080) 5139 N LAKESHORE RD PORT HOPE MI 48468-9903 185 903419785 -HURON (32) GRANT TOWNSHIP (34260) 4554 MAHARG RD CASS CITY MI 48726-9905 185 903419785 -HURON (32) HARBOR BEACH CITY (36460) 766 STATE STREET HARBOR BEACH MI 48441-9900 185 903419785 -HURON (32) HUME TOWNSHIP (39960) 115 PORT CRESCENT PORT AUSTIN MI 48467-9902 185 903419785 -HURON (32) HURON TOWNSHIP (40020) 7951 PIONEER DRIVE PORT HOPE MI 48468-9902 185 903419785 -HURON (32) LAKE TOWNSHIP (44300) P O BOX 429 CASEVILLE MI 48725-9904 185 903419785 -HURON (32) LINCOLN TOWNSHIP (47640) 4468 SULLIVAN RD KINDE MI 48445-9901 185 903419785 -HURON (32) MCKINLEY TOWNSHIP (50360) 2701 STURM RD PIGEON MI 48755-9915 185 903419785 -HURON (32) MEADE TOWNSHIP (52600) 2828 CROWN RD ELKTON MI 48731-9901 185 903419785 -HURON (32) OLIVER TOWNSHIP (60520) 5810 COOL RD SE KALKASKA MI 49646-9904 185 903419785 -HURON (32) PARIS TOWNSHIP (62360) 3901 VERONA ROAD UBLY MI 48475-9902 185 903419785 -HURON (32) POINTE AUX BARQUES TOWNSHIP (65180) PO BOX 639 PORT AUSTIN MI 48467-9904 185 903419785 -HURON (32) PORT AUSTIN TOWNSHIP (65700) PO BOX 747 PORT AUSTIN MI 48467-9903 185 903419785 -HURON (32) RUBICON TOWNSHIP (70140) P O BOX 201 PORT HOPE MI 48468-9901 185 903419785 -HURON (32) SAND BEACH TOWNSHIP (71260) 6750 LEARMAN RD HARBOR BEACH MI 48441-9902 185 903419785 -HURON (32) SEBEWAING TOWNSHIP (72200) 14 EAST SHARPSTEEN STREET SEBEWAING MI 48759-9901 185 903419785 -HURON (32) SHERIDAN TOWNSHIP (73040) 4686 S VAN DYKE ROAD UBLY MI 48475-9903 185 903419785 -HURON (32) SHERMAN TOWNSHIP (73160) PO BOX 68 RUTH MI 48470-9901 185 903419785 -HURON (32) SIGEL TOWNSHIP (73880) 482 S PARISVILLE RD HARBOR BEACH MI 48441-9903 185 903419785 -HURON (32) VERONA TOWNSHIP (82140) 1608 LEARMAN RD BAD AXE MI 48413-9905 185 903419785 -HURON (32) WINSOR TOWNSHIP (87960) 29 SOUTH MAIN ST PIGEON MI 48755-9917 185 903419785 -INGHAM (33) ALAIEDON TOWNSHIP (00800) 2021 W HOLT RD MASON MI 48854-9901 185 903419785 -INGHAM (33) AURELIUS TOWNSHIP (04240) 1939 S AURELIUS RD MASON MI 48854-9902 185 903419785 -INGHAM (33) BUNKER HILL TOWNSHIP (11640) 871 DECAMP RD STOCKBRIDGE MI 49285-9904 185 903419785 -INGHAM (33) DELHI CHARTER TOWNSHIP (21420) 2074 AURELIUS ROAD HOLT MI 48842-9900 185 903419785 -INGHAM (33) EAST LANSING CITY (24120) 410 ABBOT RD EAST LANSING MI 48823-9922 185 903419785 -INGHAM (33) INGHAM TOWNSHIP (40640) PO BOX 238 DANSVILLE MI 48819-9805 185 903419785 -INGHAM (33) CITY OF LANSING (46000) 1221 REO RD LANSING MI 48910-9915 185 903419785 -INGHAM (33) LANSING TOWNSHIP (46020) 3209 W. MICHIGAN AVENUE LANSING MI 48917-9923 185 903419785 -INGHAM (33) LEROY TOWNSHIP (47080) 1685 N. M-52 WEBBERVILLE MI 48892-9903 185 903419785 -INGHAM (33) LESLIE CITY (47180) P O BOX 496 LESLIE MI 49251-9901 185 903419785 -INGHAM (33) LESLIE TOWNSHIP (47200) P O BOX 577 LESLIE MI 49251-9903 185 903419785 -INGHAM (33) LOCKE TOWNSHIP (49040) 3805 BELL OAK RD WILLIAMSTON MI 48895-9901 185 903419785 -INGHAM (33) MASON CITY (52180) 201 W ASH ST PO BOX 370 MASON MI 48854-9903 185 903419785 -INGHAM (33) MERIDIAN TOWNSHIP (53140) 5151 MARSH ROAD OKEMOS MI 48864-9902 185 903419785 -INGHAM (33) ONONDAGA TOWNSHIP (60800) PO BOX 67 ONONDAGA MI 49264-9901 185 903419785 -INGHAM (33) STOCKBRIDGE TOWNSHIP (76580) PO BOX 565 STOCKBRIDGE MI 49285-9903 185 903419785 -INGHAM (33) VEVAY TOWNSHIP (82220) 780 EDEN RD MASON MI 48854-9904 185 903419785 -INGHAM (33) WHEATFIELD TOWNSHIP (86520) 985 EAST HOLT RD WILLIAMSTON MI 48895-9902 185 903419785 -INGHAM (33) WHITE OAK TOWNSHIP (86900) 1002 S M-52 WEBBERVILLE MI 48892-9905 185 903419785 -INGHAM (33) WILLIAMSTON CITY (87420) 161 E GRAND RIVER AVE WILLIAMSTON MI 48895-9909 185 903419785 -INGHAM (33) WILLIAMSTOWN TOWNSHIP (87440) 4990 ZIMMER RD WILLIAMSTON MI 48895-9906 185 903419785 -IONIA (34) BELDING CITY (06900) 120 S. PLEASANT ST. BELDING MI 48809-9905 185 903419785 -IONIA (34) BERLIN TOWNSHIP (07700) 4825 AINSWORTH RD IONIA MI 48846-9805 185 903419785 -IONIA (34) BOSTON TOWNSHIP (09680) PO BOX 2 SARANAC MI 48881-9803 185 903419785 -IONIA (34) CAMPBELL TOWNSHIP (12840) PO BOX 137 CLARKSVILLE MI 48815-9900 185 903419785 -IONIA (34) DANBY TOWNSHIP (19720) 10757 PEAKE ROAD PORTLAND MI 48875-9900 185 903419785 -IONIA (34) EASTON TOWNSHIP (24220) 3886 DILDINE RD IONIA MI 48846-9900 185 903419785 -IONIA (34) IONIA CITY (40860) P.O. BOX 496 IONIA MI 48846-9904 185 903419785 -IONIA (34) IONIA TOWNSHIP (40880) 1042 E WASHINGTON ST IONIA MI 48846-9906 185 903419785 -IONIA (34) KEENE TOWNSHIP (42520) PO BOX 24 SARANAC MI 48881-9900 185 903419785 -IONIA (34) LYONS TOWNSHIP (49920) 505 E BRIDGE PO BOX 187 LYONS MI 48851-9801 185 903419785 -IONIA (34) NORTH PLAINS TOWNSHIP (58720) 405 S WASHINGTON HUBBARDSTON MI 48845-9900 185 903419785 -IONIA (34) ODESSA TOWNSHIP (60200) PO BOX 575 LAKE ODESSA MI 48849-9900 185 903419785 -IONIA (34) ORANGE TOWNSHIP (60920) 3680 PORTLAND RD PORTLAND MI 48875-9907 185 903419785 -IONIA (34) ORLEANS TOWNSHIP (61160) PO BOX 49 ORLEANS MI 48865-9900 185 903419785 -IONIA (34) OTISCO TOWNSHIP (61580) 9663 BUTTON RD BELDING MI 48809-9904 185 903419785 -IONIA (34) PORTLAND CITY (65860) 259 KENT ST PORTLAND MI 48875-9901 185 903419785 -IONIA (34) PORTLAND TOWNSHIP (65880) PO BOX 314 PORTLAND MI 48875-9905 185 903419785 -IONIA (34) RONALD TOWNSHIP (69440) 4987 STAGE RD IONIA MI 48846-9907 185 903419785 -IONIA (34) SEBEWA TOWNSHIP (72120) 4276 TUPPER LAKE RD SUNFIELD MI 48890-9809 185 903419785 -IOSCO (35) ALABASTER TOWNSHIP (00760) 1716 S US-23 TAWAS CITY MI 48763-9902 185 903419785 -IOSCO (35) AU SABLE TOWNSHIP (04300) 4420 N US 23 OSCODA MI 48750-9907 185 903419785 -IOSCO (35) BALDWIN TOWNSHIP (04920) 1119 MONUMENT RD TAWAS CITY MI 48763-9906 185 903419785 -IOSCO (35) BURLEIGH TOWNSHIP (11740) 2492 S. TOWERLINE RD WHITTEMORE MI 48770-9902 185 903419785 -IOSCO (35) EAST TAWAS CITY (24420) 760 NEWMAN ST EAST TAWAS MI 48730-9902 185 903419785 -IOSCO (35) GRANT TOWNSHIP (34280) 4049 INDIAN LAKE ROAD NATIONAL CITY MI 48748-9901 185 903419785 -IOSCO (35) OSCODA TOWNSHIP (61340) 110 S. STATE ST. UNIT 1 OSCODA MI 48750-9906 185 903419785 -IOSCO (35) PLAINFIELD TOWNSHIP (64640) P.O. BOX 247 HALE MI 48739-9901 185 903419785 -IOSCO (35) RENO TOWNSHIP (67960) 6672 MILLER RD WHITTEMORE MI 48770-9903 185 903419785 -IOSCO (35) SHERMAN TOWNSHIP (73180) P.O. BOX 60 NATIONAL CITY MI 48748-9900 185 903419785 -IOSCO (35) TAWAS CITY CITY (78140) P.O. BOX 568 TAWAS CITY MI 48764-9905 185 903419785 -IOSCO (35) TAWAS TOWNSHIP (78100) PO BOX 147 TAWAS CITY MI 48764-9900 185 903419785 -IOSCO (35) WHITTEMORE CITY (87140) 503 S. BULLOCK STREEET WHITTEMORE MI 48770-9904 185 903419785 -IOSCO (35) WILBER TOWNSHIP (87180) 3120 N SHERMAN RD EAST TAWAS MI 48730-9900 185 903419785 -IRON (36) BATES TOWNSHIP (05860) 3070 E. US 2 IRON RIVER MI 49935-9904 185 903419785 -IRON (36) CASPIAN CITY (13860) PO BOX 273 CASPIAN MI 49915-9900 185 903419785 -IRON (36) CRYSTAL FALLS CITY (19140) 401 SUPERIOR AVE CRYSTAL FALLS MI 49920-9900 185 903419785 -IRON (36) CRYSTAL FALLS TOWNSHIP (19150) PO BOX 329 CRYSTAL FALLS MI 49920-9901 185 903419785 -IRON (36) GAASTRA CITY (31160) PO BOX 218 GAASTRA MI 49927-9900 185 903419785 -IRON (36) HEMATITE TOWNSHIP (37580) PO BOX 67 AMASA MI 49903-9900 185 903419785 -IRON (36) IRON RIVER CITY (40980) 106 W GENESEE STREET IRON RIVER MI 49935-9900 185 903419785 -IRON (36) IRON RIVER TOWNSHIP (41000) 102 MCNUTT ROAD IRON RIVER MI 49935-9902 185 903419785 -IRON (36) MANSFIELD TOWNSHIP (50860) 964 WAY DAM ROAD CRYSTAL FALLS MI 49920-9903 185 903419785 -IRON (36) MASTODON TOWNSHIP (52300) "1371 HWY US 2, SOUTH" CRYSTAL FALLS MI 49920-9904 185 903419785 -IRON (36) STAMBAUGH TOWNSHIP (76080) P.O. BOX 545 CASPIAN MI 49915-9901 185 903419785 -ISABELLA (37) BROOMFIELD TOWNSHIP (11140) 2889 S. ROLLAND RD REMUS MI 49340-9902 185 903419785 -ISABELLA (37) CHIPPEWA TOWNSHIP (15580) 18 SOUTH SHEPHERD RD MT PLEASANT MI 48858-9900 185 903419785 -ISABELLA (37) COE TOWNSHIP (16880) 309 W WRIGHT AVE PO BOX 477 SHEPHERD MI 48883-9903 185 903419785 -ISABELLA (37) COLDWATER TOWNSHIP (17060) 6625 DEERFIELD TRAIL LAKE MI 48632-9904 185 903419785 -ISABELLA (37) DEERFIELD TOWNSHIP (21140) 3032 S. WINN RD. MT PLEASANT MI 48858-9905 185 903419785 -ISABELLA (37) DENVER TOWNSHIP (21680) 8397 E. ROSEBUSH RD MT PLEASANT MI 48858-9903 185 903419785 -ISABELLA (37) FREMONT TOWNSHIP (30680) 2266 W BLANCHARD RD MT PLEASANT MI 48858-9902 185 903419785 -ISABELLA (37) GILMORE TOWNSHIP (32200) 1998 W STEVENSON LAKE RD FARWELL MI 48622-9901 185 903419785 -ISABELLA (37) ISABELLA TOWNSHIP (41160) 3929 E ROSEBUSH RD ROSEBUSH MI 48878-9900 185 903419785 -ISABELLA (37) LINCOLN TOWNSHIP (47660) 2149 E PLEASANT VALLEY RD SHEPHERD MI 48883-9902 185 903419785 -ISABELLA (37) MOUNT PLEASANT CITY (56020) 320 W BROADWAY ST MT PLEASANT MI 48858-9906 185 903419785 -ISABELLA (37) NOTTAWA TOWNSHIP (59360) PO BOX 189 WEIDMAN MI 48893-9901 185 903419785 -ISABELLA (37) ROLLAND TOWNSHIP (69300) P.O. BOX 65 BLANCHARD MI 49310-9901 185 903419785 -ISABELLA (37) SHERMAN TOWNSHIP (73200) 8060 W AIRLINE RD WEIDMAN MI 48893-9900 185 903419785 -ISABELLA (37) UNION TOWNSHIP (81340) 2010 SOUTH LINCOLN ROAD MT PLEASANT MI 48858-9807 185 903419785 -ISABELLA (37) VERNON TOWNSHIP (82000) 10877 N LINCOLN RD CLARE MI 48617-9918 185 903419785 -ISABELLA (37) WISE TOWNSHIP (88040) 7160 N WISE RD CLARE MI 48617-9927 185 903419785 -JACKSON (38) BLACKMAN TOWNSHIP (08760) 1990 W PARNALL RD JACKSON MI 49201-9951 185 903419785 -JACKSON (38) COLUMBIA TOWNSHIP (17400) 8500 JEFFERSON RD BROOKLYN MI 49230-9901 185 903419785 -JACKSON (38) CONCORD TOWNSHIP (17760) PO BOX 236 CONCORD MI 49237-9903 185 903419785 -JACKSON (38) GRASS LAKE CHARTER TOWNSHIP (34500) PO BOX 216 GRASS LAKE MI 49240-9828 185 903419785 -JACKSON (38) HANOVER TOWNSHIP (36400) PO BOX 40 HORTON MI 49246-9900 185 903419785 -JACKSON (38) HENRIETTA TOWNSHIP (37700) 11732 BUNKERHILL ROAD PLEASANT LAKE MI 49272-9901 185 903419785 -JACKSON (38) JACKSON CITY (41420) 161 W. MICHIGAN AVE. JACKSON MI 49201-9950 185 903419785 -JACKSON (38) LEONI TOWNSHIP (46980) 913 FIFTH ST MICHIGAN CENTER MI 49254-9902 185 903419785 -JACKSON (38) LIBERTY TOWNSHIP (47360) 101 W LIBERTY RD CLARKLAKE MI 49234-9900 185 903419785 -JACKSON (38) NAPOLEON TOWNSHIP (56640) 6755 BROOKLYN RD PO BOX 385 NAPOLEON MI 49261-9902 185 903419785 -JACKSON (38) NORVELL TOWNSHIP (59180) 300 MILL ROAD BROOKLYN MI 49230-9902 185 903419785 -JACKSON (38) PARMA TOWNSHIP (62760) 16407 COMDON RD ALBION MI 49224-9904 185 903419785 -JACKSON (38) PULASKI TOWNSHIP (66440) 12363 FOLKS ROAD HANOVER MI 49241-9900 185 903419785 -JACKSON (38) RIVES TOWNSHIP (68920) 348 E MAIN ST RIVES JUNCTION MI 49277-9902 185 903419785 -JACKSON (38) SANDSTONE TOWNSHIP (71500) 7940 COUNTY FARM RD PARMA MI 49269-9901 185 903419785 -JACKSON (38) SPRING HARBOR TOWNSHIP (75640) PO BOX 250 SPRING ARBOR MI 49283-9906 185 903419785 -JACKSON (38) SPRINGPORT TOWNSHIP (75880) PO BOX 174 SPRINGPORT MI 49284-9807 185 903419785 -JACKSON (38) SUMMIT TOWNSHIP (77200) 2121 FERGUSON RD JACKSON MI 49203-9907 185 903419785 -JACKSON (38) TOMPKINS TOWNSHIP (79980) 9999 TOMPKINS RD. RIVES JUNCTION MI 48277-9901 185 903419785 -JACKSON (38) WATERLOO TOWNSHIP (84300) 9773 MT HOPE RD MUNITH MI 49259-9901 185 903419785 -KALAMAZOO (39) ALAMO TOWNSHIP (00840) 7901 NORTH 6TH STREET KALAMAZOO MI 49009-9812 185 903419785 -KALAMAZOO (39) BRADY TOWNSHIP (09920) PO BOX 20 VICKSBURG MI 49097-9801 185 903419785 -KALAMAZOO (39) CHARLESTON TOWNSHIP (14720) PO BOX 336 GALESBURG MI 49053-9832 185 903419785 -KALAMAZOO (39) CLIMAX TOWNSHIP (16460) P. O. BOX 369 CLIMAX MI 49034-9800 185 903419785 -KALAMAZOO (39) COMSTOCK TOWNSHIP (17680) PO BOX 449 COMSTOCK MI 49041-9801 185 903419785 -KALAMAZOO (39) COOPER TOWNSHIP (17980) 1590 WEST D AVENUE KALAMAZOO MI 49009-9813 185 903419785 -KALAMAZOO (39) GALESBURG CITY (31260) 200 E MICHIGAN AVE GALESBURG MI 49053-9833 185 903419785 -KALAMAZOO (39) KALAMAZOO CITY (42160) 241 W SOUTH ST KALAMAZOO MI 49007-9803 185 903419785 -KALAMAZOO (39) KALAMAZOO TOWNSHIP (42180) 1720 RIVERVIEW DR KALAMAZOO MI 49004-9800 185 903419785 -KALAMAZOO (39) OSHTEMO TOWNSHIP (61400) 7275 W MAIN ST KALAMAZOO MI 49009-9816 185 903419785 -KALAMAZOO (39) PARCHMENT CITY (62340) 650 S RIVERVIEW DR PARCHMENT MI 49004-9801 185 903419785 -KALAMAZOO (39) PAVILION TOWNSHIP (62960) 7510 EAST Q AVE SCOTTS MI 49088-9800 185 903419785 -KALAMAZOO (39) PORTAGE CITY (65560) 7900 SOUTH WESTNEDGE AVENUE PORTAGE MI 49002-9800 185 903419785 -KALAMAZOO (39) PRAIRIE RONDE TOWNSHIP (66200) 14050 S 6TH STREET P. O. BOX 794 SCHOOLCRAFT MI 49087-9801 185 903419785 -KALAMAZOO (39) RICHLAND TOWNSHIP (68260) 7401 N 32ND STREET RICHLAND MI 49083-9853 185 903419785 -KALAMAZOO (39) ROSS TOWNSHIP (69820) 12086 M-89 RICHLAND MI 49083-9854 185 903419785 -KALAMAZOO (39) SCHOOLCRAFT TOWNSHIP (71880) 50 E VW AVE VICKSBURG MI 49097-9800 185 903419785 -KALAMAZOO (39) TEXAS TOWNSHIP (79300) 7227 W. Q AVE KALAMAZOO MI 49009-9814 185 903419785 -KALAMAZOO (39) WAKESHMA TOWNSHIP (82840) 13988 SOUTH 42ND ST PO BOX 136 FULTON MI 49052-9800 185 903419785 -KALKASKA (40) BEAR LAKE TOWNSHIP (06440) 198 E BEAR LAKE RD NE KALKASKA MI 49646-9908 185 903419785 -KALKASKA (40) BLUE LAKE TOWNSHIP (09320) 10599 TWIN LAKE RD NE MANCELONA MI 49659-9901 185 903419785 -KALKASKA (40) BOARDMAN TOWNSHIP (09440) P.O. BOX 88 SOUTH BOARDMAN MI 49680-9900 185 903419785 -KALKASKA (40) CLEARWATER TOWNSHIP (16340) PO BOX 1 RAPID CITY MI 49676-9900 185 903419785 -KALKASKA (40) COLDSPRINGS TOWNSHIP (17000) 6515 COUNTY RD 571 MANCELONA MI 49659-9900 185 903419785 -KALKASKA (40) EXCELSIOR TOWNSHIP (26860) 967 SIGMA RD SE KALKASKA MI 49646-9909 185 903419785 -KALKASKA (40) GARFIELD TOWNSHIP (31600) 466 W. SHARON RD S.E. FIFE LAKE MI 49633-9903 185 903419785 -KALKASKA (40) KALKASKA TOWNSHIP (42280) P.O. BOX 855 KALKASKA MI 49646-9955 185 903419785 -KALKASKA (40) OLIVER TOWNSHIP (60540) 5810 COOL ROAD KALKASKA MI 49646-9904 185 903419785 -KALKASKA (40) ORANGE TOWNSHIP (60940) 4096 SAUNDERS RD SE KALKASKA MI 49646-9900 185 903419785 -KALKASKA (40) RAPID RIVER TOWNSHIP (67180) 1010 PHELPS RD NE KALKASKA MI 49646-9905 185 903419785 -KALKASKA (40) SPRINGFIELD TOWNSHIP (75720) PO BOX 171 FIFE LAKE MI 49633-9901 185 903419785 -KENT (41) ADA TOWNSHIP (00240) PO BOX 370 ADA MI 49301-9915 185 903419785 -KENT (41) ALGOMA TOWNSHIP (01160) 10531 ALGOMA AVE NE ROCKFORD MI 49341-9903 185 903419785 -KENT (41) ALPINE TOWNSHIP (01840) 5255 ALPINE AVE NW COMSTOCK PARK MI 49321-9905 185 903419785 -KENT (41) BOWNE TOWNSHIP (09780) PO BOX 35 ALTO MI 49302-9901 185 903419785 -KENT (41) BYRON TOWNSHIP (12240) 8085 BYRON CENTER AVE SW BYRON CENTER MI 49315-9909 185 903419785 -KENT (41) CALEDONIA TOWNSHIP (12500) 8196 BROADMOOR AVE SE CALEDONIA MI 49316-9909 185 903419785 -KENT (41) CANNON TOWNSHIP (13080) 6878 BELDING RD NE ROCKFORD MI 49341-9904 185 903419785 -KENT (41) CASCADE TOWNSHIP (13660) 5920 TAHOE DR SE GRAND RAPIDS MI 49546-9966 185 903419785 -KENT (41) CEDAR SPRINGS CITY (14200) PO BOX 310 CEDAR SPRINGS MI 49319-9902 185 903419785 -KENT (41) COURTLAND TOWNSHIP (18500) 7450 14 MILE RD NE ROCKFORD MI 49341-9905 185 903419785 -KENT (41) EAST GRAND RAPIDS CITY (23980) 750 LAKESIDE DRIVE SE GRAND RAPIDS MI 49506-9913 185 903419785 -KENT (41) GAINES TOWNSHIP (31240) 8555 KALAMAZOO AVENUE SE CALEDONIA MI 49316-9910 185 903419785 -KENT (41) GRAND RAPIDS CHARTER TOWNSHIP (34020) 1836 E BELTLINE NE GRAND RAPIDS MI 49525-9939 185 903419785 -KENT (41) GRAND RAPIDS CITY (34000) "300 MONROE AVENUE, NW" GRAND RAPIDS MI 49503-9827 185 903419785 -KENT (41) GRANDVILLE CITY (34160) 3195 WILSON AVE GRANDVILLE MI 49418-9932 185 903419785 -KENT (41) GRATTAN TOWNSHIP (34560) 12050 OLD BELDING RD NE BELDING MI 48809-9903 185 903419785 -KENT (41) KENTWOOD CITY (42820) PO BOX 8848 KENTWOOD MI 49508-9913 185 903419785 -KENT (41) LOWELL CITY (49540) 301 E MAIN ST LOWELL MI 49331-9901 185 903419785 -KENT (41) LOWELL TOWNSHIP (49560) 2910 ALDEN NASH SE LOWELL MI 49331-9900 185 903419785 -KENT (41) NELSON TOWNSHIP (56920) PO BOX 109 SAND LAKE MI 49343-9900 185 903419785 -KENT (41) OAKFIELD TOWNSHIP (59580) 10300 14 MILE RD ROCKFORD MI 49341-9906 185 903419785 -KENT (41) PLAINFIELD TOWNSHIP (64660) 6161 BELMONT AVENUE NE BELMONT MI 49306-9901 185 903419785 -KENT (41) ROCKFORD CITY (69080) 7 S MONROE ST ROCKFORD MI 49341-9907 185 903419785 -KENT (41) SOLON TOWNSHIP (74460) 15185 ALGOMA AVENUE NE CEDAR SPRINGS MI 49319-9903 185 903419785 -KENT (41) SPARTA TOWNSHIP (75440) 160 E DIVISION ST SPARTA MI 49345-9900 185 903419785 -KENT (41) SPENCER TOWNSHIP (75560) 14960 MEDDLER AVE NE GOWEN MI 49326-9900 185 903419785 -KENT (41) TYRONE TOWNSHIP (81140) 28 E MUSKEGON ST PO BOX 275 KENT CITY MI 49330-9900 185 903419785 -KENT (41) VERGENNES TOWNSHIP (81920) 69 LINCOLN LAKE AVE NE PO BOX 208 LOWELL MI 49331-9902 185 903419785 -KENT (41) WALKER CITY (82960) 4243 REMEMBRANCE RD NW WALKER MI 49534-9911 185 903419785 -KENT (41) WYOMING CITY (88940) PO BOX 905 WYOMING MI 49509-9947 185 903419785 -KEWEENAW (42) ALLOUEZ TOWNSHIP (01520) P O BOX 64 MOHAWK MI 49950-9900 185 903419785 -KEWEENAW (42) EAGLE HARBOR TOWNSHIP (23620) 321 CENTER ST EAGLE HARBOR MI 49950-9901 185 903419785 -KEWEENAW (42) GRANT TOWNSHIP (34300) PO BOX 76 COPPER HARBOR MI 49918-9900 185 903419785 -KEWEENAW (42) HOUGHTON TOWNSHIP (39380) 5059 4TH ST EAGLE RIVER MI 49950-9902 185 903419785 -KEWEENAW (42) SHERMAN TOWNSHIP (73220) 8872 2ND ST. LAKE LINDEN MI 49945-9902 185 903419785 -LAKE (43) CHASE TOWNSHIP (14880) PO BOX 1 CHASE MI 49623-9900 185 903419785 -LAKE (43) CHERRY VALLEY TOWNSHIP (15100) 4933 E 40TH ST CHASE MI 49623-9901 185 903419785 -LAKE (43) DOVER TOWNSHIP (22800) 8092 N RAYMOND RD TUSTIN MI 49688-9901 185 903419785 -LAKE (43) EDEN TOWNSHIP (24800) PO BOX 82 IRONS MI 49644-9902 185 903419785 -LAKE (43) ELK TOWNSHIP (25260) PO BOX 298 IRONS MI 49644-9901 185 903419785 -LAKE (43) ELLSWORTH TOWNSHIP (25440) PO BOX 113 LUTHER MI 49656-9900 185 903419785 -LAKE (43) LAKE TOWNSHIP (44320) 15580 S STAR LAKE DR BALDWIN MI 49304-9991 185 903419785 -LAKE (43) NEWKIRK TOWNSHIP (57480) 301 STATE STREET LUTHER MI 49656-9901 185 903419785 -LAKE (43) PEACOCK TOWNSHIP (63120) 4480 W 4 MILE ROAD IRONS MI 49644-9904 185 903419785 -LAKE (43) PINORA TOWNSHIP (64440) PO BOX 34 CHASE MI 49623-9902 185 903419785 -LAKE (43) PLEASANT PLAINS TOWNSHIP (64880) PO BOX 239 BALDWIN MI 49304-9939 185 903419785 -LAKE (43) SAUBLE TOWNSHIP (71680) 8906 W. 6 MILE RD IRONS MI 49644-9903 185 903419785 -LAKE (43) SWEETWATER TOWNSHIP (77740) PO BOX 192 BRANCH MI 49402-9992 185 903419785 -LAKE (43) WEBBER TOWNSHIP (85060) 2286 W SPRINGTIME ST BALDWIN MI 49304-9900 185 903419785 -LAKE (43) YATES TOWNSHIP (89040) 6437 S. NELSON ROAD IDLEWILD MI 49642-9801 185 903419785 -LAPEER (44) ALMONT TOWNSHIP (01680) 819 N MAIN ALMONT MI 48003-9800 185 903419785 -LAPEER (44) ARCADIA TOWNSHIP (03280) 4900 SPENCER ST ATTICA MI 48412-9814 185 903419785 -LAPEER (44) ATTICA TOWNSHIP (04040) PO BOX 86 ATTICA MI 48412-9900 185 903419785 -LAPEER (44) BURLINGTON TOWNSHIP (11840) 8553 SLATTERY RD CLIFFORD MI 48727-9900 185 903419785 -LAPEER (44) BURNSIDE TOWNSHIP (11900) 7045 BURNSIDE BROWN CITY MI 48416-9900 185 903419785 -LAPEER (44) DEERFIELD TOWNSHIP (21160) 30 E BURNSIDE RD NORTH BRANCH MI 48461-9900 185 903419785 -LAPEER (44) DRYDEN TOWNSHIP (23160) 4849 DRYDEN RD DRYDEN MI 48428-9901 185 903419785 -LAPEER (44) ELBA TOWNSHIP (25160) 4717 LIPPINCOTT ROAD LAPEER MI 48446-9908 185 903419785 -LAPEER (44) GOODLAND TOWNSHIP (32960) 2374 N. VAN DYKE RD IMLAY CITY MI 48444-9900 185 903419785 -LAPEER (44) HADLEY TOWNSHIP (35840) PO BOX 227 HADLEY MI 48440-9901 185 903419785 -LAPEER (44) IMLAY CITY CITY (40320) 150 N MAIN ST IMLAY CITY MI 48444-9902 185 903419785 -LAPEER (44) IMLAY TOWNSHIP (40300) 682 N FAIRGROUNDS RD IMLAY CITY MI 48444-9901 185 903419785 -LAPEER (44) LAPEER CITY (46040) 576 LIBERTY PARK LAPEER MI 48446-9910 185 903419785 -LAPEER (44) LAPEER TOWNSHIP (46060) 1500 MORRIS RD LAPEER MI 48446-9915 185 903419785 -LAPEER (44) MARATHON TOWNSHIP (51420) PO BOX 457 COLUMBIAVILLE MI 48421-9901 185 903419785 -LAPEER (44) MAYFIELD TOWNSHIP (52500) 1900 N SAGINAW LAPEER MI 48446-9916 185 903419785 -LAPEER (44) METAMORA TOWNSHIP (53360) 730 W DRYDEN RD METAMORA MI 48455-9900 185 903419785 -LAPEER (44) NORTH BRANCH TOWNSHIP (58090) PO BOX 186 NORTH BRANCH MI 48461-9800 185 903419785 -LAPEER (44) OREGON TOWNSHIP (61060) 2525 MARATHON RD LAPEER MI 48446-9801 185 903419785 -LAPEER (44) RICH TOWNSHIP (68160) 8740 SQUAW LAKE RD SILVERWOOD MI 48760-9901 185 903419785 -LEELANAU (45) BINGHAM TOWNSHIP (08440) 7171 S CENTER HWY TRAVERSE CITY MI 49684-9936 185 903419785 -LEELANAU (45) CENTERVILLE TOWNSHIP (14340) 5001 S. FRENCH ROAD CEDAR MI 49621-9900 185 903419785 -LEELANAU (45) CLEVELAND TOWNSHIP (16400) PO BOX 64 MAPLE CITY MI 49664-9964 185 903419785 -LEELANAU (45) ELMWOOD TOWNSHIP (25700) 10090 E LINCOLN RD TRAVERSE CITY MI 49684-9921 185 903419785 -LEELANAU (45) EMPIRE TOWNSHIP (26000) PO BOX 234 EMPIRE MI 49630-9934 185 903419785 -LEELANAU (45) GLEN ARBOR TOWNSHIP (32380) P.O.BOX 276 GLEN ARBOR MI 49636-9904 185 903419785 -LEELANAU (45) KASSON TOWNSHIP (42320) PO BOX 62 MAPLE CITY MI 49664-9903 185 903419785 -LEELANAU (45) LEELANAU TOWNSHIP (46700) P.O. BOX 338 NORTHPORT MI 49670-9901 185 903419785 -LEELANAU (45) LELAND TOWNSHIP (46820) PO BOX 238 LAKE LEELANAU MI 49653-9900 185 903419785 -LEELANAU (45) SOLON TOWNSHIP (74500) P.O. BOX 253 CEDAR MI 49621-9904 185 903419785 -LEELANAU (45) SUTTONS BAY TOWNSHIP (77620) P. O. BOX 457 SUTTONS BAY MI 49682-9901 185 903419785 -LENAWEE (46) ADRIAN CITY (00440) 135 E MAUMEE ST "ADRIAN, MI" 49221-9928 185 903419785 -LENAWEE (46) ADRIAN TOWNSHIP (00460) 2907 TIPTON HWY "ADRIAN, MI" 49221-9926 185 903419785 -LENAWEE (46) BLISSFIELD TOWNSHIP (09020) P.O. BOX 58 BLISSFIELD MI 49228-9800 185 903419785 -LENAWEE (46) CAMBRIDGE TOWNSHIP (12720) PO BOX 417 ONSTED MI 49265-9801 185 903419785 -LENAWEE (46) CLINTON TOWNSHIP (16500) PO BOX G CLINTON MI 49236-9808 185 903419785 -LENAWEE (46) DEERFIELD TOWNSHIP (21200) 468 CAREY ST DEERFIELD MI 49238-9900 185 903419785 -LENAWEE (46) DOVER TOWNSHIP (22820) 4315 WHALEY HWY CLAYTON MI 49235-9800 185 903419785 -LENAWEE (46) FAIRFIELD TOWNSHIP (27020) PO BOX 286 JASPER MI 49248-9900 185 903419785 -LENAWEE (46) FRANKLIN TOWNSHIP (30320) PO BOX 101 TIPTON MI 49287-9802 185 903419785 -LENAWEE (46) HUDSON CITY (39720) 121 N. CHURCH ST. HUDSON MI 49247-9802 185 903419785 -LENAWEE (46) HUDSON TOWNSHIP (39740) 14900 CARLETON RD HUDSON MI 49247-9801 185 903419785 -LENAWEE (46) MACON TOWNSHIP (50520) 10711 CLINTON-MACON TECUMSEH MI 49286-9804 185 903419785 -LENAWEE (46) MADISON CHARTER TOWNSHIP (50540) 3804 S. ADRIAN HWY. "ADRIAN, MI" 49221-9853 185 903419785 -LENAWEE (46) MEDINA TOWNSHIP (52820) 13450 LIME CREEK RD MORENCI MI 49256-9901 185 903419785 -LENAWEE (46) MORENCI CITY (55500) 118 ORCHARD ST. MORENCI MI 49256-9800 185 903419785 -LENAWEE (46) OGDEN TOWNSHIP (60260) 10128 PENCE HWY BLISSFIELD MI 49228-9801 185 903419785 -LENAWEE (46) PALMYRA TOWNSHIP (62240) 6490 PALMYRA RD. PALMYRA MI 49268-9800 185 903419785 -LENAWEE (46) RAISIN TOWNSHIP (66840) 5525 OCCIDENTAL HWY TECUMSEH MI 49286-9904 185 903419785 -LENAWEE (46) RIDGEWAY TOWNSHIP (68540) PO BOX 456 BRITTON MI 49229-9900 185 903419785 -LENAWEE (46) RIGA TOWNSHIP (68580) PO BOX 25 RIGA MI 49276-9900 185 903419785 -LENAWEE (46) ROLLIN TOWNSHIP (69340) PO BOX 296 MANITOU BEACH MI 49253-9900 185 903419785 -LENAWEE (46) ROME TOWNSHIP (69360) 9212 WOERNER ROAD ONSTED MI 49265-9900 185 903419785 -LENAWEE (46) SENECA TOWNSHIP (72440) 5732 W. RIDGEVILLE ROAD SAND CREEK MI 49279-9900 185 903419785 -LENAWEE (46) TECUMSEH CITY (79120) PO BOX 396 TECUMSEH MI 49286-9911 185 903419785 -LENAWEE (46) TECUMSEH TOWNSHIP (79140) PO BOX 158 TECUMSEH MI 49286-9905 185 903419785 -LENAWEE (46) WOODSTOCK TOWNSHIP (88640) 6486 DEVILS LAKE HWY ADDISON MI 49220-9902 185 903419785 -LIVINGSTON (47) BRIGHTON CHARTER TOWNSHIP (10640) 4363 BUNO RD BRIGHTON MI 48114-9800 185 903419785 -LIVINGSTON (47) BRIGHTON CITY (10620) 200 N 1st ST BRIGHTON MI 48116-9912 185 903419785 -LIVINGSTON (47) COHOCTAH TOWNSHIP (16920) 10518 N ANTCLIFF RD FOWLERVILLE MI 48836-9903 185 903419785 -LIVINGSTON (47) CONWAY TOWNSHIP (17920) PO BOX 1157 FOWLERVILLE MI 48836-9901 185 903419785 -LIVINGSTON (47) DEERFIELD TOWNSHIP (21220) 4492 CENTER RD LINDEN MI 48451-9801 185 903419785 -LIVINGSTON (47) GENOA TOWNSHIP (31860) 2911 DORR ROAD BRIGHTON MI 48116-9913 185 903419785 -LIVINGSTON (47) GREEN OAK TOWNSHIP (35060) 10001 SILVER LAKE RD BRIGHTON MI 48116-9914 185 903419785 -LIVINGSTON (47) HAMBURG TOWNSHIP (36100) PO BOX 157 HAMBURG MI 48139-9802 185 903419785 -LIVINGSTON (47) HANDY TOWNSHIP (36340) PO BOX 189 FOWLERVILLE MI 48836-9905 185 903419785 -LIVINGSTON (47) HARTLAND TOWNSHIP (37040) 2655 CLARK ROAD HARTLAND MI 48353-9805 185 903419785 -LIVINGSTON (47) HOWELL CITY (39540) 611 E GRAND RIVER AVE HOWELL MI 48843-9919 185 903419785 -LIVINGSTON (47) HOWELL TOWNSHIP (39560) 3525 BYRON RD HOWELL MI 48855-9900 185 903419785 -LIVINGSTON (47) IOSCO TOWNSHIP (40900) 2050 BRADLEY WEBBERVILLE MI 48892-9902 185 903419785 -LIVINGSTON (47) MARION TOWNSHIP (51640) 2877 W COON LAKE RD HOWELL MI 48843-9918 185 903419785 -LIVINGSTON (47) OCEOLA TOWNSHIP (60120) 1577 N LATSON RD HOWELL MI 48843-9904 185 903419785 -LIVINGSTON (47) PUTNAM TOWNSHIP (66540) 3280 W M-36 PINCKNEY MI 48169-9900 185 903419785 -LIVINGSTON (47) TYRONE TOWNSHIP (81160) 8420 RUNYAN LAKE ROAD FENTON MI 48430-9905 185 903419785 -LIVINGSTON (47) UNADILLA TOWNSHIP (81240) P O BOX 120 GREGORY MI 48137-9900 185 903419785 -LUCE (48) COLUMBUS TOWNSHIP (17480) PO BOX 36 MCMILLAN MI 49853-9936 185 903419785 -LUCE (48) LAKEFIELD TOWNSHIP (44540) PO BOX 99 MC MILLAN MI 49853-9900 185 903419785 -LUCE (48) MCMILLAN TOWNSHIP (50440) PO BOX 442 NEWBERRY MI 49868-9904 185 903419785 -LUCE (48) PENTLAND TOWNSHIP (63500) PO BOX 412 NEWBERRY MI 49868-9903 185 903419785 -MACKINAC (49) BOIS BLANC TOWNSHIP (09500) PO BOX 898 POINTE AUX PINS MI 49775-9801 185 903419785 -MACKINAC (49) BREVORT TOWNSHIP (10360) W2051 DUKES ROAD MORAN MI 49760-9801 185 903419785 -MACKINAC (49) CLARK TOWNSHIP (16060) PO BOX 367 CEDARVILLE MI 49719-9801 185 903419785 -MACKINAC (49) GARFIELD TOWNSHIP (31620) P.O. BOX 148 ENGADINE MI 49827-9900 185 903419785 -MACKINAC (49) HENDRICKS TOWNSHIP (37660) N5115 HIAWATHA TRAIL NAUBINWAY MI 49762-9801 185 903419785 -MACKINAC (49) HUDSON TOWNSHIP (39760) W9235 HIAWATHA TRAIL NAUBINWAY MI 49762-9800 185 903419785 -MACKINAC (49) MACKINAC ISLAND CITY (50280) P.O. BOX 455 MACKINAC ISLAND MI 49757-9801 185 903419785 -MACKINAC (49) MARQUETTE TOWNSHIP (51880) 7338 N M-129 PICKFORD MI 49774-9801 185 903419785 -MACKINAC (49) MORAN TOWNSHIP (55480) PO BOX 364 ST IGNACE MI 49781-9802 185 903419785 -MACKINAC (49) NEWTON TOWNSHIP (57640) PO BOX 83 GOULD CITY MI 49838-9900 185 903419785 -MACKINAC (49) PORTAGE TOWNSHIP (65600) PO BOX 70 CURTIS MI 49820-9900 185 903419785 -MACKINAC (49) ST IGNACE CITY (70840) 396 NORTH STATE STREET ST IGNACE MI 49781-9805 185 903419785 -MACKINAC (49) ST IGNACE TOWNSHIP (70860) 2980 MACKINAC TRAIL ST. IGNACE MI 49781-9804 185 903419785 -MACOMB (50) ARMADA TOWNSHIP (03540) PO BOX 578 ARMADA MI 48005-9800 185 903419785 -MACOMB (50) BRUCE TOWNSHIP (11300) 223 E GATES ROMEO MI 48065-9800 185 903419785 -MACOMB (50) CENTER LINE CITY (14320) 7070 EAST TEN MILE CENTER LINE MI 48015-9902 185 903419785 -MACOMB (50) CHESTERFIELD TOWNSHIP (15340) 47275 SUGARBUSH RD. CHESTERFIELD MI 48047-9800 185 903419785 -MACOMB (50) CLINTON TOWNSHIP (16520) 40700 ROMEO PLANK ROAD CLINTON TOWNSHIP MI 48038-9915 185 903419785 -MACOMB (50) 23200 GRATIOT AVE EASTPOINTE MI 48021-9800 185 903419785 -MACOMB (50) FRASER CITY (30420) 33000 GARFIELD FRASER MI 48026-9800 185 903419785 -MACOMB (50) GROSSE POINTE SHORES CITY (82453) 795 LAKE SHORE RD GROSSE POINTE SHORES MI 48236-9917 185 903419785 -MACOMB (50) HARRISON TOWNSHIP (36820) 38151 LANSE CREUSE ROAD HARRISON TOWNSHIP MI 48045-9800 185 903419785 -MACOMB (50) LENOX TOWNSHIP (46900) 63775 GRATIOT AVE LENOX MI 48050-9800 185 903419785 -MACOMB (50) MACOMB TOWNSHIP (50480) 54111 BROUGHTON ROAD MACOMB MI 48042-9800 185 903419785 -MACOMB (50) MEMPHIS CITY (52960) 35095 POTTER ST MEMPHIS MI 48041-9800 185 903419785 -MACOMB (50) MOUNT CLEMENS CITY (55820) 1 CROCKER BOULEVARD MOUNT CLEMENS MI 48043-9801 185 903419785 -MACOMB (50) NEW BALTIMORE CITY (57100) 36535 GREEN STREET NEW BALTIMORE MI 48047-9806 185 903419785 -MACOMB (50) RAY TOWNSHIP (67420) 64255 WOLCOTT RD RAY MI 48096-9902 185 903419785 -MACOMB (50) RICHMOND CITY (68380) PO BOX 457 RICHMOND MI 48062-9900 185 903419785 -MACOMB (50) RICHMOND TOWNSHIP (68400) 34900 SCHOOL SECTION ROAD RICHMOND MI 48062-9901 185 903419785 -MACOMB (50) ROSEVILLE CITY (69800) 29777 GRATIOT AVE ROSEVILLE MI 48066-9914 185 903419785 -MACOMB (50) SHELBY CHARTER TOWNSHIP (72820) 52700 VAN DYKE STE 1 SHELBY TOWNSHIP MI 48316-9800 185 903419785 -MACOMB (50) ST CLAIR SHORES CITY (70760) 27600 JEFFERSON AVE ST. CLAIR SHORES MI 48081-9801 185 903419785 -MACOMB (50) STERLING HEIGHTS CITY (76460) PO BOX 8009 STERLING HEIGHTS MI 48311-9901 185 903419785 -MACOMB (50) UTICA CITY (81540) 7550 AUBURN RD STE 1 UTICA MI 48317-9801 185 903419785 -MACOMB (50) WARREN CITY (84000) 1 CITY SQUARE SUITE 205 WARREN MI 48093-9911 185 903419785 -MACOMB (50) WASHINGTON TOWNSHIP (84120) 57900 VAN DYKE WASHINGTON MI 48094-9901 185 903419785 -MANISTEE (51) ARCADIA TOWNSHIP (03320) PO BOX 318 ARCADIA MI 49613-9900 185 903419785 -MANISTEE (51) BEAR LAKE TOWNSHIP (06480) PO BOX 187 BEAR LAKE MI 49614-9902 185 903419785 -MANISTEE (51) BROWN TOWNSHIP (11160) 8233 COATES HWY MANISTEE MI 49660-9906 185 903419785 -MANISTEE (51) CLEON TOWNSHIP (16380) 16505 IMHOFF DRIVE COPEMISH MI 49625-9905 185 903419785 -MANISTEE (51) DICKSON TOWNSHIP (22320) PO BOX 39 BRETHREN MI 49619-9901 185 903419785 -MANISTEE (51) FILER CHARTER TOWNSHIP (28040) 2505 FILER CITY RD MANISTEE MI 49660-9902 185 903419785 -MANISTEE (51) MANISTEE CITY (50720) 70 MAPLE STREET MANISTEE MI 49660-9903 185 903419785 -MANISTEE (51) MANISTEE TOWNSHIP (50740) 410 HOLDEN STREET MANISTEE MI 49660-9904 185 903419785 -MANISTEE (51) MAPLE GROVE TOWNSHIP (51000) PO BOX 48 KALEVA MI 49645-9900 185 903419785 -MANISTEE (51) MARILLA TOWNSHIP (51580) 9991 MARILLA RD. COPEMISH MI 49625-9902 185 903419785 -MANISTEE (51) NORMAN TOWNSHIP (57900) PO BOX 143 WELLSTON MI 49689-9901 185 903419785 -MANISTEE (51) ONEKAMA TOWNSHIP (60760) PO BOX 458 ONEKAMA MI 49675-9804 185 903419785 -MANISTEE (51) PLEASANTON TOWNSHIP (64860) PO BOX 145 BEAR LAKE MI 49614-9804 185 903419785 -MANISTEE (51) SPRINGDALE TOWNSHIP (75680) PO BOX 177 COPEMISH MI 49625-9977 185 903419785 -MANISTEE (51) STRONACH TOWNSHIP (76840) 2471 MAIN ST #RR3 MANISTEE MI 49660-9907 185 903419785 -MARQUETTE (52) CHAMPION TOWNSHIP (14540) P.O. BOX 126 CHAMPION MI 49814-9901 185 903419785 -MARQUETTE (52) CHOCOLAY TOWNSHIP (15660) 5010 US 41 SOUTH MARQUETTE MI 49855-9901 185 903419785 -MARQUETTE (52) ELY TOWNSHIP (25820) 1555 COUNTY RD 496 ISHPEMING MI 49849-9900 185 903419785 -MARQUETTE (52) EWING TOWNSHIP (26840) 12986 CAMP NINE F.75 RD ROCK MI 49880-9902 185 903419785 -MARQUETTE (52) FORSYTH TOWNSHIP (29720) PO BOX 1360 GWINN MI 49841-9900 185 903419785 -MARQUETTE (52) HUMBOLDT TOWNSHIP (39940) 244 COUNTY RD FAF CHAMPION MI 49814-9901 185 903419785 -MARQUETTE (52) ISHPEMING CITY (41220) 100 E. DIVISION STREET ISHPEMING MI 49849-9901 185 903419785 -MARQUETTE (52) ISHPEMING TOWNSHIP (41240) 1575 US 41 WEST ISHPEMING MI 49849-9902 185 903419785 -MARQUETTE (52) MARQUETTE CITY (51900) 300 W BARAGA AVE MARQUETTE MI 49855-9904 185 903419785 -MARQUETTE (52) MARQUETTE TOWNSHIP (51920) 1000 COMMERCE DRIVE MARQUETTE MI 49855-9905 185 903419785 -MARQUETTE (52) MICHIGAMME TOWNSHIP (53540) PO BOX 220 MICHIGAMME MI 49861-9901 185 903419785 -MARQUETTE (52) NEGAUNEE CITY (56860) PO BOX 70 NEGAUNEE MI 49866-9900 185 903419785 -MARQUETTE (52) NEGAUNEE TOWNSHIP (56880) 42 M-35 NEGAUNEE MI 49866-9901 185 903419785 -MARQUETTE (52) POWELL TOWNSHIP (66120) PO BOX 319 BIG BAY MI 49808-9900 185 903419785 -MARQUETTE (52) REPUBLIC TOWNSHIP (68000) PO BOX 338 REPUBLIC MI 49879-9900 185 903419785 -MARQUETTE (52) RICHMOND TOWNSHIP (68420) PO BOX 35 PALMER MI 49871-9900 185 903419785 -MARQUETTE (52) SANDS TOWNSHIP (71460) 987 S M-553 GWINN MI 49841-9901 185 903419785 -MARQUETTE (52) SKANDIA TOWNSHIP (74110) PO BOX 48 SKANDIA MI 49885-9900 185 903419785 -MARQUETTE (52) TILDEN TOWNSHIP (79780) 3145 COUNTY ROAD PG ISHPEMING MI 49849-9903 185 903419785 -MARQUETTE (52) TURIN TOWNSHIP (80780) 3132 COUNTY ROAD 444 ROCK MI 49880-9903 185 903419785 -MARQUETTE (52) WELLS TOWNSHIP (85260) 2641 COUNTY ROAD SC CORNELL MI 49818-9901 185 903419785 -MARQUETTE (52) WEST BRANCH TOWNSHIP (85540) 1016 COUNTY RD 545N SKANDIA MI 49885-9903 185 903419785 -MASON (53) AMBER TOWNSHIP (01980) PO BOX 248 SCOTTVILLE MI 49454-9902 185 903419785 -MASON (53) BRANCH TOWNSHIP (10020) PO BOX 336 WALHALLA 49458-9904 185 903419785 -MASON (53) CUSTER TOWNSHIP (19440) PO BOX 111 CUSTER MI 49405-9903 185 903419785 -MASON (53) EDEN TOWNSHIP (24820) PO BOX 279 SCOTTVILLE MI 49454-9979 185 903419785 -MASON (53) FREE SOIL TOWNSHIP (30620) PO BOX 148 FREE SOIL MI 49411-9903 185 903419785 -MASON (53) GRANT TOWNSHIP (34320) 8969 N US 31 FREESOIL MI 49411-9969 185 903419785 -MASON (53) HAMLIN TOWNSHIP (36220) 3775 N JEBAVY LUDINGTON MI 49431-9909 185 903419785 -MASON (53) LOGAN TOWNSHIP (49140) 7698 WASHINGTON RD BRANCH MI 49402-9902 185 903419785 -MASON (53) LUDINGTON CITY (49640) 400 S HARRISON ST LUDINGTON MI 49431-9902 185 903419785 -MASON (53) MEADE TOWNSHIP (52640) PO BOX 89 FREE SOIL MI 49411-9902 185 903419785 -MASON (53) PERE MARQUETTE CHARTER TWP (63600) 1699 S PERE MARQUETTE HWY LUDINGTON MI 49431-9908 185 903419785 -MASON (53) RIVERTON TOWNSHIP (68860) 535 W. KISTLER ROAD SCOTTVILLE MI 49454-9903 185 903419785 -MASON (53) SCOTTVILLE CITY (72080) 105 N MAIN SCOTTVILLE MI 49454-9901 185 903419785 -MASON (53) SHERIDAN TOWNSHIP (73060) 3588 N. MORSE ROAD FOUNTAIN MI 49410-9900 185 903419785 -MASON (53) SHERMAN TOWNSHIP (73240) 3566 NORTH CUSTER ROAD SCOTTVILLE MI 49454-9900 185 903419785 -MASON (53) SUMMIT TOWNSHIP (77220) 4879 W. DEREN RD LUDINGTON MI 49431-9911 185 903419785 -MASON (53) VICTORY TOWNSHIP (82360) PO BOX 85 SCOTTVILLE MI 49454-9985 185 903419785 -MECOSTA (54) AETNA TOWNSHIP (00500) PO BOX 228 MORLEY MI 49336-9901 185 903419785 -MECOSTA (54) AUSTIN TOWNSHIP (04380) PO BOX 226 STANWOOD MI 49346-9901 185 903419785 -MECOSTA (54) BIG RAPIDS CITY (08300) 226 N. MICHIGAN BIG RAPIDS MI 49307-9926 185 903419785 -MECOSTA (54) BIG RAPIDS TOWNSHIP (08320) 14212 NORTHLAND DR BIG RAPIDS MI 49307-9925 185 903419785 -MECOSTA (54) CHIPPEWA TOWNSHIP (15600) P.O. BOX 26 CHIPPEWA LAKE MI 49320-9926 185 903419785 -MECOSTA (54) COLFAX TOWNSHIP (17160) 14428 157TH AVE BIG RAPIDS MI 49307-9918 185 903419785 -MECOSTA (54) DEERFIELD TOWNSHIP (21240) P.O. BOX 397 MORLEY MI 49336-9997 185 903419785 -MECOSTA (54) FORK TOWNSHIP (29680) PO BOX 203 BARRYTON MI 49305-9900 185 903419785 -MECOSTA (54) GRANT TOWNSHIP (34340) 15081 20 MILE RD BIG RAPIDS MI 49307-9916 185 903419785 -MECOSTA (54) GREEN TOWNSHIP (34760) PO BOX 233 PARIS MI 49338-9902 185 903419785 -MECOSTA (54) HINTON TOWNSHIP (38540) 9022 3 MILE RD LAKEVIEW MI 48850-9906 185 903419785 -MECOSTA (54) MARTINY TOWNSHIP (52060) 15051 110TH. AVE. RODNEY MI 49342-9901 185 903419785 -MECOSTA (54) MECOSTA TOWNSHIP (52780) 19729 11 MILE RD BIG RAPIDS MI 49307-9924 185 903419785 -MECOSTA (54) MILLBROOK TOWNSHIP (54020) 1042 MONROE RD BLANCHARD MI 49310-9900 185 903419785 -MECOSTA (54) MORTON TOWNSHIP (55600) P.O. BOX 2 MECOSTA MI 49332-9901 185 903419785 -MECOSTA (54) SHERIDAN TOWNSHIP (73080) 15020 30TH AVE REMUS MI 49340-9901 185 903419785 -MECOSTA (54) WHEATLAND TOWNSHIP (86560) P.O. BOX 229 REMUS MI 49340-9900 185 903419785 -MENOMINEE (55) CEDARVILLE TOWNSHIP (14240) W2244 NUMBER 29 RD DAGGETT MI 49821-9901 185 903419785 -MENOMINEE (55) DAGGETT TOWNSHIP (19580) W4028 COUNTY ROAD 358 STEPHENSON MI 49887-9902 185 903419785 -MENOMINEE (55) FAITHORN TOWNSHIP (27300) WEST 8283 BIRD ROAD VULCAN MI 49892-9901 185 903419785 -MENOMINEE (55) GOURLEY TOWNSHIP (33160) N13830 CO. RD. 551 WILSON MI 49896-9900 185 903419785 -MENOMINEE (55) HARRIS TOWNSHIP (36760) W1863 ORCHARD LN WILSON MI 49896-9802 185 903419785 -MENOMINEE (55) HOLMES TOWNSHIP (38760) W7258 CHEESE FACTORY RD. DAGGETT MI 49821-9900 185 903419785 -MENOMINEE (55) INGALLSTON TOWNSHIP (40600) W3701 COUNTY ROAD 338 WALLACE MI 49893-9902 185 903419785 -MENOMINEE (55) LAKE TOWNSHIP (44360) N8109 COUNTY RD 577 STEPHENSON MI 49887-9904 185 903419785 -MENOMINEE (55) MELLEN TOWNSHIP (52860) PO BOX 85 WALLACE MI 49893-9901 185 903419785 -MENOMINEE (55) MENOMINEE CITY (53020) 2511 TENTH ST MENOMINEE MI 49858-9902 185 903419785 -MENOMINEE (55) MENOMINEE TOWNSHIP (53040) N2283 O-1 DR MENOMINEE MI 49858-9903 185 903419785 -MENOMINEE (55) MEYER TOWNSHIP (53460) PO BOX 185 HERMANSVILLE MI 49847-9900 185 903419785 -MENOMINEE (55) NADEAU TOWNSHIP (56440) P.O. BOX 6 CARNEY MI 49812-9902 185 903419785 -MENOMINEE (55) SPALDING TOWNSHIP (75350) N15881 PINE STREET POWERS MI 49874-9900 185 903419785 -MENOMINEE (55) STEPHENSON CITY (76380) P.O. BOX 467 STEPHENSON MI 49887-9900 185 903419785 -MENOMINEE (55) STEPHENSON TOWNSHIP (76400) W4007 PALESTINE RD NO 19 STEPHENSON MI 49887-9905 185 903419785 -MIDLAND (56) COLEMAN CITY (17100) PO BOX 504 COLEMAN MI 48618-9904 185 903419785 -MIDLAND (56) EDENVILLE TOWNSHIP (24830) PO BOX 24 EDENVILLE MI 48620-9902 185 903419785 -MIDLAND (56) GENEVA TOWNSHIP (31820) PO BOX 308 COLEMAN MI 48618-9903 185 903419785 -MIDLAND (56) GREENDALE TOWNSHIP (34860) 480 SOUTH MAGRUDER ROAD SHEPHERD MI 48883-9904 185 903419785 -MIDLAND (56) HOMER TOWNSHIP (38980) 522 N HOMER RD MIDLAND MI 48640-9935 185 903419785 -MIDLAND (56) HOPE TOWNSHIP (39160) 5244 N. HOPE RD HOPE MI 48628-9901 185 903419785 -MIDLAND (56) INGERSOLL TOWNSHIP (40620) 4183 S. SMITH CROSSING RD. FREELAND MI 48623-9903 185 903419785 -MIDLAND (56) JASPER TOWNSHIP (41560) 5595 W KENT RD ST LOUIS MI 48880-9902 185 903419785 -MIDLAND (56) JEROME TOWNSHIP (41760) 737 W BEAMISH RD SANFORD MI 48657-9901 185 903419785 -MIDLAND (56) LARKIN TOWNSHIP (46160) 3027 N. JEFFERSON ROAD MIDLAND MI 48642-9917 185 903419785 -MIDLAND (56) LEE TOWNSHIP (46640) 1485 W OLSON RD MIDLAND MI 48640-9941 185 903419785 -MIDLAND (56) LINCOLN TOWNSHIP (47680) 1882 N HOPE RD MIDLAND MI 48642-9918 185 903419785 -MIDLAND (56) MIDLAND CITY (53780) 333 W ELLSWORTH MIDLAND MI 48640-9944 185 903419785 -MIDLAND (56) MIDLAND TOWNSHIP (53800) 1030 S POSEYVILLE RD MIDLAND MI 48640-9942 185 903419785 -MIDLAND (56) MILLS TOWNSHIP (54320) 3480 E. SHEARER ROAD MIDLAND MI 48642-9919 185 903419785 -MIDLAND (56) MOUNT HALEY TOWNSHIP (55940) 3110 KANE ROAD MERRILL MI 48637-9903 185 903419785 -MIDLAND (56) PORTER TOWNSHIP (65740) 2200 W. LAPORTE ROAD BRECKENRIDGE MI 48615-9902 185 903419785 -MIDLAND (56) WARREN TOWNSHIP (84020) P.O. BOX 397 COLEMAN MI 48618-9901 185 903419785 -MISSAUKEE (57) AETNA TOWNSHIP (00520) 651 S 8 MILE ROAD LAKE CITY MI 49651-9908 185 903419785 -MISSAUKEE (57) BLOOMFIELD TOWNSHIP (09080) 8259 W. ARNOLD RD. MANTON MI 49663-9903 185 903419785 -MISSAUKEE (57) BUTTERFIELD TOWNSHIP (12200) 3771 S 13 MILE RD MERRITT MI 49667-9900 185 903419785 -MISSAUKEE (57) CALDWELL TOWNSHIP (12440) 7313 W RHOBY RD LAKE CITY MI 49651-9900 185 903419785 -MISSAUKEE (57) CLAM UNION TOWNSHIP (15900) PO BOX 28 FALMOUTH MI 49632-9902 185 903419785 -MISSAUKEE (57) ENTERPRISE TOWNSHIP (26200) 11653 E BURNS ROAD MERRITT MI 49667-9901 185 903419785 -MISSAUKEE (57) FOREST TOWNSHIP (29440) 5521 N. EDWARDS RD. LAKE CITY MI 49651-9907 185 903419785 -MISSAUKEE (57) HOLLAND TOWNSHIP (38620) 8330 S MERRITT RD FALMOUTH MI 49632-9903 185 903419785 -MISSAUKEE (57) LAKE CITY CITY (44480) P.O. BOX I LAKE CITY MI 49651-9902 185 903419785 -MISSAUKEE (57) LAKE TOWNSHIP (44380) 8105 W. KELLY RD. LAKE CITY MI 49651-9903 185 903419785 -MISSAUKEE (57) MCBAIN CITY (49980) P.O. BOX 95 MCBAIN MI 49657-9901 185 903419785 -MISSAUKEE (57) NORWICH TOWNSHIP (59280) 4865 E. MOORESTOWN RD. LAKE CITY MI 49651-9904 185 903419785 -MISSAUKEE (57) PIONEER TOWNSHIP (64460) 4530 W PHELPS ROAD LAKE CITY MI 49651-9906 185 903419785 -MISSAUKEE (57) REEDER TOWNSHIP (67840) PO BOX 96 LAKE CITY MI 49651-9905 185 903419785 -MISSAUKEE (57) RICHLAND TOWNSHIP (68280) 9698 W CAVANAUGH RD MCBAIN MI 49657-9903 185 903419785 -MISSAUKEE (57) RIVERSIDE TOWNSHIP (68820) 10242 S CALL ROAD MCBAIN MI 49657-9902 185 903419785 -MISSAUKEE (57) WEST BRANCH TOWNSHIP (85560) 2960 N. 7 MILE RD. LAKE CITY MI 49651-9901 185 903419785 -MONROE (58) ASH TOWNSHIP (03680) PO BOX 387 CARLETON MI 48117-9900 185 903419785 -MONROE (58) BEDFORD TOWNSHIP (06740) 8100 JACKMAN RD TEMPERANCE MI 48182-9901 185 903419785 -MONROE (58) BERLIN TOWNSHIP (07720) 8000 SWAN VIEW RD NEWPORT MI 48166-9900 185 903419785 -MONROE (58) DUNDEE TOWNSHIP (23400) 179 MAIN ST DUNDEE 48131-9902 185 903419785 -MONROE (58) ERIE TOWNSHIP (26320) P.O. BOX 187 ERIE MI 48133-9900 185 903419785 -MONROE (58) EXETER TOWNSHIP (26880) 6158 SCOFIELD ROAD MAYBEE MI 48159-9901 185 903419785 -MONROE (58) FRENCHTOWN TOWNSHIP (30820) 2744 VIVIAN RD. MONROE MI 48162-9911 185 903419785 -MONROE (58) IDA TOWNSHIP (40260) PO BOX 239 IDA MI 48140-9901 185 903419785 -MONROE (58) LA SALLE TOWNSHIP (46260) PO BOX 46 LA SALLE MI 48145-9901 185 903419785 -MONROE (58) LONDON TOWNSHIP (49180) 13613 TUTTLEHILL RD MILAN MI 48160-9900 185 903419785 -MONROE (58) LUNA PIER CITY (49700) P.O. BOX 375 LUNA PIER MI 48157-9900 185 903419785 -MONROE (58) MILAN TOWNSHIP (53900) 16444 CONE ROAD MILAN MI 48160-9902 185 903419785 -MONROE (58) MONROE CITY (55020) 120 EAST FIRST ST MONROE MI 48161-9921 185 903419785 -MONROE (58) MONROE TOWNSHIP (55040) 4925 EAST DUNBAR ROAD MONROE MI 48161-9916 185 903419785 -MONROE (58) PETERSBURG CITY (63800) P.O. BOX 67 PETERSBURG MI 49720-9901 185 903419785 -MONROE (58) RAISINVILLE TOWNSHIP (66900) 96 IDA MAYBEE ROAD MONROE MI 48161-9917 185 903419785 -MONROE (58) SUMMERFIELD TOWNSHIP (77140) P.O. BOX 98 PETERSBURG MI 49270-9900 185 903419785 -MONROE (58) WHITEFORD TOWNSHIP (86740) "8000 YANKEE ROAD, SUITE 100" OTTAWA LAKE MI 49267-9902 185 903419785 -MONTCALM (59) BELVIDERE TOWNSHIP (07200) PO BOX 144 SIX LAKES MI 48886-9801 185 903419785 -MONTCALM (59) BLOOMER TOWNSHIP (09040) PO BOX 262 CARSON CITY MI 48811-9904 185 903419785 -MONTCALM (59) BUSHNELL TOWNSHIP (12120) 175 E FENWICK FENWICK MI 48834-9900 185 903419785 -MONTCALM (59) CARSON CITY CITY (13600) PO BOX 340 CARSON CITY MI 48811-9902 185 903419785 -MONTCALM (59) CATO TOWNSHIP (14000) P O BOX 59 LAKEVIEW MI 48850-9900 185 903419785 -MONTCALM (59) CRYSTAL TOWNSHIP (19080) PO BOX 358 CRYSTAL MI 48818-9910 185 903419785 -MONTCALM (59) DAY TOWNSHIP (19920) PO BOX 91 MCBRIDE MI 48852-9900 185 903419785 -MONTCALM (59) DOUGLASS TOWNSHIP (22760) 3521 W MCBRIDE RD STANTON MI 48888-9803 185 903419785 -MONTCALM (59) EUREKA TOWNSHIP (26520) 9322 SW GREENVILLE ROAD GREENVILLE MI 48838-9906 185 903419785 -MONTCALM (59) EVERGREEN TOWNSHIP (26720) PO BOX 147 SHERIDAN MI 48884-9900 185 903419785 -MONTCALM (59) FAIRPLAIN TOWNSHIP (27180) 8383 S. GROW ROAD GREENVILLE MI 48838-9903 185 903419785 -MONTCALM (59) FERRIS TOWNSHIP (27900) 3011 N CRYSTAL RD VESTABURG MI 48891-9901 185 903419785 -MONTCALM (59) GREENVILLE CITY (35100) 411 SOUTH LAFAYETTE ST GREENVILLE MI 48838-9900 185 903419785 -MONTCALM (59) HOME TOWNSHIP (38840) P O BOX 470 EDMORE MI 48829-9900 185 903419785 -MONTCALM (59) MAPLE VALLEY TOWNSHIP (51340) PO BOX 56 CORAL MI 49322-9901 185 903419785 -MONTCALM (59) MONTCALM TOWNSHIP (55140) 1880 S. GREENVILLE ROAD GREENVILLE MI 48838-9902 185 903419785 -MONTCALM (59) PIERSON TOWNSHIP (64040) 21156 W. CANNONSVILLE ROAD PIERSON MI 49339-9900 185 903419785 -MONTCALM (59) PINE TOWNSHIP (64200) 7900 W 2ND STREET STANTON MI 48888-9902 185 903419785 -MONTCALM (59) REYNOLDS TOWNSHIP (68120) P O BOX 69 HOWARD CITY MI 49329-9900 185 903419785 -MONTCALM (59) RICHLAND TOWNSHIP (68300) PO BOX 309 VESTABURG MI 48891-9900 185 903419785 -MONTCALM (59) SIDNEY TOWNSHIP (73840) P O BOX 141 SIDNEY MI 48885-9900 185 903419785 -MONTCALM (59) STANTON CITY (76220) P.O. BOX 449 STANTON MI 48888-9901 185 903419785 -MONTCALM (59) WINFIELD TOWNSHIP (87880) PO BOX 109 HOWARD CITY MI 49329-9901 185 903419785 -MONTMORENCY (60) ALBERT TOWNSHIP (00940) PO BOX 153 LEWISTON MI 49756-9806 185 903419785 -MONTMORENCY (60) AVERY TOWNSHIP (04580) P.O. BOX 665 ATLANTA MI 49709-9803 185 903419785 -MONTMORENCY (60) BRILEY TOWNSHIP (10660) P.O. BOX 207 ATLANTA MI 49709-9804 185 903419785 -MONTMORENCY (60) HILLMAN TOWNSHIP (38400) P.O. BOX 25 HILLMAN MI 49746-9803 185 903419785 -MONTMORENCY (60) LOUD TOWNSHIP (49480) 3882 M-33 SOUTH ATLANTA MI 49709-9801 185 903419785 -MONTMORENCY (60) MONTMORENCY TOWNSHIP (55240) 20841 COUNTY RD 459 HILLMAN MI 49746-9801 185 903419785 -MONTMORENCY (60) RUST TOWNSHIP (70380) PO BOX 456 HILLMAN MI 49746-9800 185 903419785 -MONTMORENCY (60) VIENNA TOWNSHIP (82420) 8381 CURRIE RD ATLANTA MI 49709-9802 185 903419785 -MUSKEGON (61) BLUE LAKE TOWNSHIP (09340) 1491 OWASIPPE RD TWIN LAKE MI 49457-9900 185 903419785 -MUSKEGON (61) CASNOVIA TOWNSHIP (13840) 245 S CANADA RD CASNOVIA MI 49318-9901 185 903419785 -MUSKEGON (61) CEDAR CREEK TOWNSHIP (14100) 6556 SWEETER RD TWIN LAKE MI 49457-9901 185 903419785 -MUSKEGON (61) DALTON TOWNSHIP (19660) 1616 E RILEY THOMPSON RD MUSKEGON MI 49445-9902 185 903419785 -MUSKEGON (61) EGELSTON TOWNSHIP (25080) 5428 E APPLE AVENUE MUSKEGON MI 49442-9910 185 903419785 -MUSKEGON (61) FRUITLAND TOWNSHIP (30980) 4545 NESTROM RD WHITEHALL MI 49461-9900 185 903419785 -MUSKEGON (61) FRUITPORT TOWNSHIP (31020) 5865 AIRLINE RD FRUITPORT MI 49415-9900 185 903419785 -MUSKEGON (61) HOLTON TOWNSHIP (38820) PO BOX 328 HOLTON MI 49425-9900 185 903419785 -MUSKEGON (61) LAKETON TOWNSHIP (45160) 2735 W GILES RD MUSKEGON MI 49445-9901 185 903419785 -MUSKEGON (61) MONTAGUE CITY (55100) 8778 FERRY STREET MONTAGUE MI 49437-9901 185 903419785 -MUSKEGON (61) MONTAGUE TOWNSHIP (55120) 8915 WHITBECK RD. MONTAGUE MI 49437-9900 185 903419785 -MUSKEGON (61) MOORLAND TOWNSHIP (55440) PO BOX 368 RAVENNA MI 49451-9902 185 903419785 -MUSKEGON (61) MUSKEGON CITY (56320) 933 TERRACE ST MUSKEGON MI 49440-9900 185 903419785 -MUSKEGON (61) MUSKEGON HEIGHTS CITY (56360) 2724 PECK STREET MUSKEGON MI 49444-9901 185 903419785 -MUSKEGON (61) MUSKEGON TOWNSHIP (56340) 1990 APPLE AVE MUSKEGON MI 49442-9902 185 903419785 -MUSKEGON (61) NORTH MUSKEGON CITY (58640) 1502 RUDDIMAN DR NORTH MUSKEGON MI 49445-9904 185 903419785 -MUSKEGON (61) NORTON SHORES CITY (59140) 4814 HENRY STREET NORTON SHORES MI 49441-9909 185 903419785 -MUSKEGON (61) RAVENNA TOWNSHIP (67300) 3770 BLACKMER RD RAVENNA MI 49451-9905 185 903419785 -MUSKEGON (61) ROOSEVELT PARK CITY (69520) 900 OAKRIDGE RD "MUSKEGON, MI" 49441-9910 185 903419785 -MUSKEGON (61) SULLIVAN TOWNSHIP (77100) 8138 HEIGHTS RAVENNA RD RAVENNA MI 49451-9901 185 903419785 -MUSKEGON (61) WHITE RIVER TOWNSHIP (86980) 7386 POST RD MONAGUE MI 49437-9903 185 903419785 -MUSKEGON (61) WHITEHALL CITY (86780) 405 E COLBY STREET WHITEHALL MI 49461-9902 185 903419785 -MUSKEGON (61) WHITEHALL TOWNSHIP (86800) 7644 DURHAM ROAD WHITEHALL MI 49461-9903 185 903419785 -NEWAYGO (62) ASHLAND TOWNSHIP (03700) PO BOX 457 GRANT MI 49327-9903 185 903419785 -NEWAYGO (62) BARTON TOWNSHIP (05620) PO BOX 43 REED CITY 49677-9943 185 903419785 -NEWAYGO (62) BEAVER TOWNSHIP (06580) 8628 10 MILE RD BITELY MI 49309-9900 185 903419785 -NEWAYGO (62) BIG PRAIRIE TOWNSHIP (08280) 2815 S ELM AVE WHITE CLOUD MI 49349-9911 185 903419785 -NEWAYGO (62) BRIDGETON TOWNSHIP (10500) 11830 WARNER AVE GRANT MI 49327-9901 185 903419785 -NEWAYGO (62) BROOKS TOWNSHIP (11060) PO BOX 625 NEWAYGO MI 49337-9900 185 903419785 -NEWAYGO (62) CROTON TOWNSHIP (18980) 5833 E. DIVISION ST. NEWAYGO MI 49337-9904 185 903419785 -NEWAYGO (62) DAYTON TOWNSHIP (19960) PO BOX 68 FREMONT MI 49412-9916 185 903419785 -NEWAYGO (62) DENVER TOWNSHIP (21700) PO BOX 408 HESPERIA MI 49421-9900 185 903419785 -NEWAYGO (62) ENSLEY TOWNSHIP (26160) 7163 E 120TH STREET SAND LAKE MI 49343-9901 185 903419785 -NEWAYGO (62) EVERETT TOWNSHIP (26700) 1516 E 8TH ST WHITE CLOUD MI 49349-9907 185 903419785 -NEWAYGO (62) FREMONT CITY (30700) 101 EAST MAIN FREMONT MI 49412-9908 185 903419785 -NEWAYGO (62) GARFIELD TOWNSHIP (31640) 7190 BINGHAM AVE NEWAYGO MI 49337-9902 185 903419785 -NEWAYGO (62) GOODWELL TOWNSHIP (33000) 4423 N LOCUST AVE WHITE CLOUD MI 49349-9913 185 903419785 -NEWAYGO (62) GRANT CITY (34360) PO BOX 435 GRANT MI 49327-9900 185 903419785 -NEWAYGO (62) GRANT TOWNSHIP (34380) 1617 E 120TH ST GRANT MI 49327-9902 185 903419785 -NEWAYGO (62) HOME TOWNSHIP (38860) 9819 NORTH OAK AVE. PARIS MI 49338-9903 185 903419785 -NEWAYGO (62) LILLEY TOWNSHIP (47440) 10767 N PROSPECT BITELY MI 49309-9903 185 903419785 -NEWAYGO (62) LINCOLN TOWNSHIP (47700) 1988 N WISNER AVE WHITE CLOUD MI 49349-9912 185 903419785 -NEWAYGO (62) MERRILL TOWNSHIP (53160) 1585 W 11 MILE RD BITELY MI 49309-9901 185 903419785 -NEWAYGO (62) MONROE TOWNSHIP (55060) 4141 E FILMORE RD WHITE CLOUD MI 49349-9906 185 903419785 -NEWAYGO (62) NEWAYGO CITY (57080) PO BOX 308 NEWAYGO MI 49337-9903 185 903419785 -NEWAYGO (62) NORWICH TOWNSHIP (59300) 7213 N CYPRESS AVE BIG RAPIDS MI 49307-9922 185 903419785 -NEWAYGO (62) SHERIDAN CHARTER TOWNSHIP (73120) PO BOX 53 FREMONT MI 49412-9953 185 903419785 -NEWAYGO (62) SHERMAN TOWNSHIP (73260) 2168 S WISNER AVE FREMONT MI 49412-9902 185 903419785 -NEWAYGO (62) TROY TOWNSHIP (80680) 10350 N DICKINSON AVE WALKERVILLE 49459-9950 185 903419785 -NEWAYGO (62) WHITE CLOUD CITY (86680) PO BOX 607 WHITE CLOUD MI 49349-9908 185 903419785 -NEWAYGO (62) WILCOX TOWNSHIP (87200) PO BOX 728 WHITE CLOUD MI 49349-9909 185 903419785 -OAKLAND (63) ADDISON TOWNSHIP (00400) 1440 ROCHESTER RD LEONARD MI 48367-9900 185 903419785 -OAKLAND (63) AUBURN HILLS CITY (04105) 1827 N SQUIRREL RD AUBURN HILLS MI 48326-9905 185 903419785 -OAKLAND (63) BERKLEY CITY (07660) 3338 COOLIDGE HWY BERKLEY MI 48072-9904 185 903419785 -OAKLAND (63) BIRMINGHAM CITY (08640) P O BOX 3001 BIRMINGHAM MI 48012-9902 185 903419785 -OAKLAND (63) BLOOMFIELD HILLS CITY (09180) 45 E. LONG LAKE ROAD BLOOMFIELD HILLS MI 48304-9913 185 903419785 -OAKLAND (63) BLOOMFIELD TOWNSHIP (09110) 4200 TELEGRAPH RD BLOOMFIELD HILLS MI 48302-9908 185 903419785 -OAKLAND (63) BRANDON TOWNSHIP (10040) PO BOX 929 ORTONVILLE MI 48462-9900 185 903419785 -OAKLAND (63) CLAWSON CITY (16160) 425 N. MAIN CLAWSON MI 48017-9905 185 903419785 -OAKLAND (63) COMMERCE TOWNSHIP (17640) 2009 TOWNSHIP DRIVE COMMERCE TWP MI 48390-9915 185 903419785 -OAKLAND (63) FARMINGTON CITY (27380) 23600 LIBERTY ST SUITE 2 FARMINGTON MI 48335-9904 185 903419785 -OAKLAND (63) FARMINGTON HILLS CITY (27440) 31555 ELEVEN MILE RD FARMINGTON HILLS MI 48336-9904 185 903419785 -OAKLAND (63) FERNDALE CITY (27880) 300 E. 9 MILE ROAD FERNDALE MI 48220-9923 185 903419785 -OAKLAND (63) GROVELAND TOWNSHIP (35640) 4695 GRANGE HALL RD HOLLY MI 48442-9902 185 903419785 -OAKLAND (63) HAZEL PARK CITY (37420) 111 E NINE MILE RD FL 2 HAZEL PARK MI 48030-9901 185 903419785 -OAKLAND (63) HIGHLAND TOWNSHIP (38080) 205 N. JOHN ST HIGHLAND MI 48357-9901 185 903419785 -OAKLAND (63) HOLLY TOWNSHIP (38720) 102 CIVIC DR HOLLY MI 48442-9904 185 903419785 -OAKLAND (63) HUNTINGTON WOODS CITY (40000) 26815 SCOTIA RD HUNTINGTON WOODS MI 48070-9900 185 903419785 -OAKLAND (63) INDEPENDENCE TOWNSHIP (40400) 6483 WALDON CENTER DR CLARKSTON MI 48346-9902 185 903419785 -OAKLAND (63) KEEGO HARBOR CITY (42460) 2025 BEECHMONT KEEGO HARBOR MI 48320-9802 185 903419785 -OAKLAND (63) LAKE ANGELUS CITY (44440) 45 GALLOGLY RD LAKE ANGELUS MI 48326-9810 185 903419785 -OAKLAND (63) LATHRUP VILLAGE CITY (46320) 27400 SOUTHFIELD RD. LATHRUP VILLAGE MI 48076-9901 185 903419785 -OAKLAND (63) LYON TOWNSHIP (49820) 58000 GRAND RIVER NEW HUDSON MI 48165-9905 185 903419785 -OAKLAND (63) MADISON HEIGHTS CITY (50560) 300 W. 13 MILE ROAD MADISON HEIGHTS MI 48071-9909 185 903419785 -OAKLAND (63) MILFORD TOWNSHIP (53980) 1100 ATLANTIC ST MILFORD MI 48381-9901 185 903419785 -OAKLAND (63) NORTHVILLE CITY (58980) 215 W. MAIN STREET NORTHVLLE MI 48167-9901 185 903419785 -OAKLAND (63) NOVI CITY (59440) 45175 TEN MILE ROAD NOVI MI 48375-9904 185 903419785 -OAKLAND (63) NOVI TOWNSHIP (59460) 44114 WYNGATE DR NORTHVILLE MI 48167-9903 185 903419785 -OAKLAND (63) OAK PARK CITY (59920) 14000 OAK PARK BLVD OAK PARK MI 48237-9909 185 903419785 -OAKLAND (63) OAKLAND CHARTER TOWNSHIP (59820) 4393 COLLINS RD ROCHESTER MI 48306-9903 185 903419785 -OAKLAND (63) ORCHARD LAKE VILLAGE CITY (61020) 3955 ORCHARD LAKE RD. ORCHARD LAKE MI 48323-9904 185 903419785 -OAKLAND (63) ORION TOWNSHIP (61100) 2323 JOSLYN ROAD LAKE ORION MI 48360-9905 185 903419785 -OAKLAND (63) OXFORD TOWNSHIP (62040) 300 DUNLAP ROAD OXFORD MI 48371-9902 185 903419785 -OAKLAND (63) PLEASANT RIDGE CITY (64900) 23925 WOODWARD AVENUE PLEASANT RIDGE MI 48069-9901 185 903419785 -OAKLAND (63) PONTIAC CITY (65440) 47450 WOODWARD AVENUE PONTIAC MI 48342-9900 185 903419785 -OAKLAND (63) ROCHESTER CITY (69020) 400 SIXTH STREET ROCHESTER MI 48307-9923 185 903419785 -OAKLAND (63) ROCHESTER HILLS CITY (69035) 1000 ROCHESTER HILLS DR ROCHESTER HILLS MI 48309-9915 185 903419785 -OAKLAND (63) ROSE TOWNSHIP (69580) 9080 MASON ST HOLLY MI 48442-9903 185 903419785 -OAKLAND (63) ROYAL OAK CITY (70040) 203 S TROY STREET ROYAL OAK MI 48067-9903 185 903419785 -OAKLAND (63) ROYAL OAK TOWNSHIP (70060) 21131 GARDENLANE - ROOM 202 FERNDALE MI 48220-9916 185 903419785 -OAKLAND (63) SOUTH LYON CITY (75100) 335 SOUTH WARREN ST SOUTH LYON MI 48178-9904 185 903419785 -OAKLAND (63) SOUTHFIELD CITY (74900) 26000 EVERGREEN SOUTHFIELD MI 48076-9902 185 903419785 -OAKLAND (63) SOUTHFIELD TOWNSHIP (74920) 18550 W 13 MILE RD BEVERLY HILLS MI 48025-9901 185 903419785 -OAKLAND (63) SPRINGFIELD TOWNSHIP (75760) 12000 DAVISBURG RD DAVISBURG MI 48350-9900 185 903419785 -OAKLAND (63) SYLVAN LAKE CITY (77860) 1820 INVERNESS SYLVAN LAKE MI 48320-9902 185 903419785 -OAKLAND (63) TROY CITY (80700) 500 W BIG BEAVER ROAD TROY MI 48084-9951 185 903419785 -OAKLAND (63) VILLAGE OF CLARKSTON CITY (82450) 375 DEPOT RD CLARKSTON MI 48346-9904 185 903419785 -OAKLAND (63) WALLED LAKE CITY (83060) 1499 E. WEST MAPLE WALLED LAKE MI 48390-9916 185 903419785 -OAKLAND (63) WATERFORD TOWNSHIP (84240) 5200 CIVIC CENTER DRIVE - 2ND FLOOR WATERFORD MI 48329-9902 185 903419785 -OAKLAND (63) WEST BLOOMFIELD TOWNSHIP (85480) 4550 WALNUT LAKE RD WEST BLOOMFIELD MI 48323-9902 185 903419785 -OAKLAND (63) WHITE LAKE TOWNSHIP (86860) 7525 HIGHLAND RD WHITE LAKE MI 48383-9900 185 903419785 -OAKLAND (63) WIXOM CITY (88140) 49045 PONTIAC TRAIL WIXOM MI 48393-9914 185 903419785 -OCEANA (64) BENONA TOWNSHIP (07300) 7169 W BAKER RD SHELBY MI 49455-9902 185 903419785 -OCEANA (64) CLAYBANKS TOWNSHIP (16200) 5987 W STONY LAKE RD NEW ERA MI 49446-9900 185 903419785 -OCEANA (64) COLFAX TOWNSHIP (17180) PO BOX 182 WALKERVILLE MI 49459-9900 185 903419785 -OCEANA (64) CRYSTAL TOWNSHIP (19100) 1499 E HAMMETT HART MI 49420-9906 185 903419785 -OCEANA (64) ELBRIDGE TOWNSHIP (25200) 2266 E. POLK ROAD HART MI 49420-9904 185 903419785 -OCEANA (64) FERRY TOWNSHIP (27940) 3222 GREEN SHELBY MI 49455-9903 185 903419785 -OCEANA (64) GOLDEN TOWNSHIP (32780) PO BOX 26 MEARS MI 49436-9900 185 903419785 -OCEANA (64) GRANT TOWNSHIP (34400) 7140 S OCEANA DRIVE ROTHBURY MI 49452-9900 185 903419785 -OCEANA (64) GREENWOOD TOWNSHIP (35160) PO BOX 358 HESPERIA MI 49421-9903 185 903419785 -OCEANA (64) HART CITY (36920) 407 STATE ST STE 1 HART MI 49420-9903 185 903419785 -OCEANA (64) HART TOWNSHIP (36940) PO BOX 740 HART MI 49420-9940 185 903419785 -OCEANA (64) LEAVITT TOWNSHIP (46560) PO BOX 67 WALKERVILLE MI 49459-9901 185 903419785 -OCEANA (64) NEWFIELD TOWNSHIP (57300) PO BOX 564 HESPERIA MI 49421-9902 185 903419785 -OCEANA (64) OTTO TOWNSHIP (61780) 4262 E. ARTHUR RD. HESPERIA MI 49421-9901 185 903419785 -OCEANA (64) PENTWATER TOWNSHIP (63560) PO BOX 512 PENTWATER MI 49449-9900 185 903419785 -OCEANA (64) SHELBY TOWNSHIP (72860) PO BOX 215 SHELBY MI 49455-9901 185 903419785 -OCEANA (64) WEARE TOWNSHIP (85040) PO BOX 620 PENTWATER MI 49449-9920 185 903419785 -OGEMAW (65) CHURCHILL TOWNSHIP (15740) 2211 RIFLE RIVER TRAIL WEST BRANCH MI 48661-9912 185 903419785 -OGEMAW (65) CUMMING TOWNSHIP (19260) PO BOX 498 ROSE CITY MI 48654-9903 185 903419785 -OGEMAW (65) EDWARDS TOWNSHIP (25020) PO BOX 563 WEST BRANCH MI 48661-9916 185 903419785 -OGEMAW (65) FOSTER TOWNSHIP (29860) 1968 N CLEAR LAKE RD WEST BRANCH MI 48661-9921 185 903419785 -OGEMAW (65) GOODAR TOWNSHIP (32860) PO BOX 100 SOUTH BRANCH MI 48761-9901 185 903419785 -OGEMAW (65) HILL TOWNSHIP (38300) 2985 SHADY SHORES RD LUPTON MI 48635-9903 185 903419785 -OGEMAW (65) HORTON TOWNSHIP (39320) PO BOX 68 WEST BRANCH MI 48661-9906 185 903419785 -OGEMAW (65) KLACKING TOWNSHIP (43640) 1345 W SAGE LAKE RD WEST BRANCH MI 48661-9918 185 903419785 -OGEMAW (65) LOGAN TOWNSHIP (49160) 2601 CLARK RD PRESCOTT MI 48756-9904 185 903419785 -OGEMAW (65) MILLS TOWNSHIP (54340) 2441 GREENWOOD ROAD PRESCOTT MI 48756-9902 185 903419785 -OGEMAW (65) OGEMAW TOWNSHIP (60300) 4372 W M76 WEST BRANCH MI 48661-9919 185 903419785 -OGEMAW (65) RICHLAND TOWNSHIP (68320) PO BOX 358 PRESCOTT MI 48756-9900 185 903419785 -OGEMAW (65) ROSE CITY CITY (69680) PO BOX 279 ROSE CITY MI 48654-9904 185 903419785 -OGEMAW (65) ROSE TOWNSHIP (69600) 3067 LUPTON RD LUPTON MI 48635-9900 185 903419785 -OGEMAW (65) WEST BRANCH CITY (85580) 121 N 4TH ST WEST BRANCH MI 48661-9917 185 903419785 -OGEMAW (65) WEST BRANCH TOWNSHIP (85600) 1705 SOUTH FAIRVIEW ROAD WEST BRANCH MI 48661-9915 185 903419785 -ONTONAGON (66) BERGLAND TOWNSHIP (07640) PO BOX 326 BERGLAND MI 49910-9900 185 903419785 -ONTONAGON (66) BOHEMIA TOWNSHIP (09460) 26137 DISHNEAU RD MASS CITY MI 49948-9900 185 903419785 -ONTONAGON (66) CARP LAKE TOWNSHIP (13520) PO BOX 397 WHITE PINE MI 49971-9900 185 903419785 -ONTONAGON (66) GREENLAND TOWNSHIP (35000) PO BOX 204 MASS CITY MI 49948-9901 185 903419785 -ONTONAGON (66) HAIGHT TOWNSHIP (35960) 12077 HAIGHT RD. TROUT CREEK MI 49967-9901 185 903419785 -ONTONAGON (66) INTERIOR TOWNSHIP (40760) PO BOX 8 TROUT CREEK MI 49967-9902 185 903419785 -ONTONAGON (66) MATCHWOOD TOWNSHIP (52320) 17616 APPLEKAMP ROAD EWEN MI 49925-9901 185 903419785 -ONTONAGON (66) MCMILLAN TOWNSHIP (50460) P.O. BOX 267 EWEN MI 49925-9900 185 903419785 -ONTONAGON (66) ONTONAGON TOWNSHIP (60880) 311 N STEEL ST ONTONAGON MI 49953-9901 185 903419785 -ONTONAGON (66) ROCKLAND TOWNSHIP (69140) PO BOX 247 ROCKLAND MI 49960-9900 185 903419785 -ONTONAGON (66) STANNARD TOWNSHIP (76180) PO BOX 216 BRUCE CROSSING MI 49912-9900 185 903419785 -OSCEOLA (67) BURDELL TOWNSHIP (11680) PO BOX 144 TUSTIN MI 49688-9944 185 903419785 -OSCEOLA (67) CEDAR TOWNSHIP (14040) 7516 170TH AVE REED CITY MI 49677-9970 185 903419785 -OSCEOLA (67) EVART CITY (26640) 200 S MAIN ST EVART MI 49631-9906 185 903419785 -OSCEOLA (67) EVART TOWNSHIP (26660) 8745 HERSEY ROAD EVART MI 49631-9902 185 903419785 -OSCEOLA (67) HARTWICK TOWNSHIP (37060) 9173 15 MILE ROAD EVART MI 49631-9900 185 903419785 -OSCEOLA (67) HERSEY TOWNSHIP (37840) PO BOX 290 HERSEY MI 49639-9900 185 903419785 -OSCEOLA (67) HIGHLAND TOWNSHIP (38100) 9471 23 MILE ROAD MARION MI 49665-9902 185 903419785 -OSCEOLA (67) LE ROY TOWNSHIP (47120) 4247 MACKINAW TRL LEROY MI 49655-9902 185 903419785 -OSCEOLA (67) LINCOLN TOWNSHIP (47720) 19700 11 MILE RD LEROY MI 49655-9904 185 903419785 -OSCEOLA (67) MARION TOWNSHIP (51680) PO BOX 573 MARION MI 49665-9900 185 903419785 -OSCEOLA (67) MIDDLE BRANCH TOWNSHIP (53660) 16329 10TH AVE MARION MI 49665-9900 185 903419785 -OSCEOLA (67) ORIENT TOWNSHIP (61080) 1908 50TH AVE SEARS MI 49679-9900 185 903419785 -OSCEOLA (67) OSCEOLA TOWNSHIP (61280) PO BOX 1239 EVART MI 49631-1200 185 903419785 -OSCEOLA (67) REED CITY CITY (67820) 227 E LINCOLN REED CITY MI 49677-9910 185 903419785 -OSCEOLA (67) RICHMOND TOWNSHIP (68440) 3371 220TH AVE REED CITY MI 49677-9906 185 903419785 -OSCEOLA (67) ROSE LAKE TOWNSHIP (69760) 16879 140TH AVE LEROY MI 49655-9900 185 903419785 -OSCEOLA (67) SHERMAN TOWNSHIP (73280) 14625 20 MILE RD TUSTIN MI 49688-9925 185 903419785 -OSCEOLA (67) SYLVAN TOWNSHIP (77760) 5595 SYLVAN ROAD EVART MI 49631-9901 185 903419785 -OSCODA (68) BIG CREEK TOWNSHIP (08220) 1175 RYNO ROAD LUZERNE MI 48636-9902 185 903419785 -OSCODA (68) CLINTON TOWNSHIP (16540) PO BOX 168 COMINS MI 48619-9901 185 903419785 -OSCODA (68) COMINS TOWNSHIP (17600) PO BOX 190 FAIRVIEW MI 48621-9901 185 903419785 -OSCODA (68) ELMER TOWNSHIP (25500) 1263 W KITTLE RD MIO MI 48647-9909 185 903419785 -OSCODA (68) GREENWOOD TOWNSHIP (35200) 4030 WILLIAMS ROAD LEWISTON MI 49756-9803 185 903419785 -OSCODA (68) MENTOR TOWNSHIP (53120) P.O. BOX 730 MIO MI 48647-9902 185 903419785 -OTSEGO (69) BAGLEY TOWNSHIP (04780) PO BOX 52 GAYLORD MI 49734-9850 185 903419785 -OTSEGO (69) CHARLTON TOWNSHIP (14840) PO BOX 367 JOHANNESBURG MI 49751-9805 185 903419785 -OTSEGO (69) CHESTER TOWNSHIP (15280) PO BOX 92 JOHANNESBURG MI 49751-9806 185 903419785 -OTSEGO (69) CORWITH TOWNSHIP (18320) PO BOX 100 VANDERBILT MI 49795-9806 185 903419785 -OTSEGO (69) DOVER TOWNSHIP (22840) 1189 WHITEHOUSE TRL GAYLORD MI 49735-9847 185 903419785 -OTSEGO (69) ELMIRA TOWNSHIP (25620) 7252 ALBA RD GAYLORD MI 49735-9848 185 903419785 -OTSEGO (69) GAYLORD CITY (31720) 305 E MAIN STREET GAYLORD MI 49735-9846 185 903419785 -OTSEGO (69) HAYES TOWNSHIP (37360) 6724 HAYES TOWER RD GAYLORD MI 49735-9845 185 903419785 -OTSEGO (69) LIVINGSTON TOWNSHIP (48140) PO BOX 1848 GAYLORD MI 49734-9800 185 903419785 -OTSEGO (69) OTSEGO LAKE TOWNSHIP (61680) PO BOX 99 WATERS MI 49797-9801 185 903419785 -OTTAWA (70) ALLENDALE TOWNSHIP (01360) PO BOX 539 ALLENDALE MI 49401-9900 185 903419785 -OTTAWA (70) BLENDON TOWNSHIP (08940) 7161 72ND AVE HUDSONVILLE MI 49426-9924 185 903419785 -OTTAWA (70) CHESTER TOWNSHIP (15300) P.O. BOX 115 CONKLIN MI 49403-9900 185 903419785 -OTTAWA (70) COOPERSVILLE CITY (18020) 289 DANFORTH ST COOPERSVILLE MI 49404-9900 185 903419785 -OTTAWA (70) CROCKERY TOWNSHIP (18800) PO BOX 186 NUNICA MI 49448-9900 185 903419785 -OTTAWA (70) FERRYSBURG CITY (27960) PO BOX 38 FERRYSBURG MI 49409-9901 185 903419785 -OTTAWA (70) GEORGETOWN TOWNSHIP (31880) P O BOX 769 JENISON MI 49429-9901 185 903419785 -OTTAWA (70) GRAND HAVEN CITY (33340) 519 WASHINGTON GRAND HAVEN MI 49417-9925 185 903419785 -OTTAWA (70) GRAND HAVEN TOWNSHIP (33360) 13300 168TH AVE GRAND HAVEN MI 49417-9929 185 903419785 -OTTAWA (70) HOLLAND CITY (38640) 270 S. RIVER AVE HOLLAND MI 49423-9914 185 903419785 -OTTAWA (70) HOLLAND TOWNSHIP (38660) 353 N 120TH AVENUE HOLLAND MI 49424-9900 185 903419785 -OTTAWA (70) HUDSONVILLE CITY (39800) 3275 CENTRAL BLVD HUDSONVILLE MI 49426-9923 185 903419785 -OTTAWA (70) JAMESTOWN TOWNSHIP (41520) 2380 RILEY ST HUDSONVILLE MI 49426-9908 185 903419785 -OTTAWA (70) OLIVE TOWNSHIP (60460) 6480 136TH AVE HOLLAND MI 49424-9909 185 903419785 -OTTAWA (70) PARK TOWNSHIP (62460) 52 S 152ND AVE. HOLLAND MI 49424-9911 185 903419785 -OTTAWA (70) POLKTON TOWNSHIP (65320) 6900 ARTHUR ST COOPERSVILLE MI 49404-9901 185 903419785 -OTTAWA (70) PORT SHELDON TOWNSHIP (65940) 16201 PORT SHELDON ST WEST OLIVE MI 49460-9901 185 903419785 -OTTAWA (70) ROBINSON TOWNSHIP (69000) 12010 120TH AVE GRAND HAVEN MI 49417-9930 185 903419785 -OTTAWA (70) SPRING LAKE TOWNSHIP (75840) 101 SOUTH BUCHANAN STREET SPRING LAKE MI 49456-9910 185 903419785 -OTTAWA (70) TALLMADGE TOWNSHIP (77980) O1451 LEONARD STREET NW GRAND RAPIDS MI 49534-9912 185 903419785 -OTTAWA (70) WRIGHT TOWNSHIP (88820) P.O. BOX 255 MARNE MI 49435-9901 185 903419785 -OTTAWA (70) ZEELAND CITY (89260) 21 S ELM ST ZEELAND MI 49464-9903 185 903419785 -OTTAWA (70) ZEELAND TOWNSHIP (89280) 6582 BYRON RD ZEELAND MI 49464-9904 185 903419785 -PRESQUE ISLE (71) ALLIS TOWNSHIP (01480) PO BOX 609 ONAWAY MI 49765-9805 185 903419785 -PRESQUE ISLE (71) BEARINGER TOWNSHIP (06400) 18456 KLAMATH LN OCQUEOC MI 49765-9809 185 903419785 -PRESQUE ISLE (71) BELKNAP TOWNSHIP (06920) 3503 PETERSVILLE ROAD ROGERS CITY MI 49779-9806 185 903419785 -PRESQUE ISLE (71) BISMARCK TOWNSHIP (08700) PO BOX 9 HAWKS MI 49743-9810 185 903419785 -PRESQUE ISLE (71) CASE TOWNSHIP (13740) PO BOX 260 MILLERSBURG MI 49759-9801 185 903419785 -PRESQUE ISLE (71) KRAKOW TOWNSHIP (43900) 12470 NORTH GRAND LAKE HWY POSEN MI 49776-9802 185 903419785 -PRESQUE ISLE (71) METZ TOWNSHIP (53440) 2345 E METZ HWY POSEN MI 49776-9801 185 903419785 -PRESQUE ISLE (71) MOLTKE TOWNSHIP (54860) 8010 M-68 HWY ROGERS CITY MI 49779-9801 185 903419785 -PRESQUE ISLE (71) NORTH ALLIS TOWNSHIP (57940) PO BOX 306 ONAWAY MI 49765-9807 185 903419785 -PRESQUE ISLE (71) OCQUEOC TOWNSHIP (60160) 1032 S. OCQUEOC ROAD MILLERSBURG MI 49759-9802 185 903419785 -PRESQUE ISLE (71) ONAWAY CITY (60680) PO BOX 761 ONAWAY MI 49765-9806 185 903419785 -PRESQUE ISLE (71) POSEN TOWNSHIP (66020) 11188 MICHIGAN AVE POSEN MI 49776-9804 185 903419785 -PRESQUE ISLE (71) PRESQUE ISLE TOWNSHIP (66340) 12653 E GRAND LAKE RD PRESQUE ISLE MI 49777-9800 185 903419785 -PRESQUE ISLE (71) PULAWSKI TOWNSHIP (66460) 6618 E. METZ HWY POSEN MI 49776-9805 185 903419785 -PRESQUE ISLE (71) ROGERS CITY CITY (69260) 193 E MICHIGAN AVE ROGERS CITY MI 49779-9802 185 903419785 -PRESQUE ISLE (71) ROGERS TOWNSHIP (69240) PO Box 226 ROGERS CITY MI 49779-9805 185 903419785 -ROSCOMMON (72) AU SABLE TOWNSHIP (04320) 9181 N KENO RD "ST HELEN, MI" 48656-9900 185 903419785 -ROSCOMMON (72) BACKUS TOWNSHIP (04720) 3888 S MAPLE VALLEY ROAD ST. HELEN MI 48656-9902 185 903419785 -ROSCOMMON (72) DENTON TOWNSHIP (21640) PO BOX 289 PRUDENVILLE MI 48651-9901 185 903419785 -ROSCOMMON (72) GERRISH TOWNSHIP (31960) 2997 E HIGGINS LAKE DR ROSCOMMON MI 48653-9902 185 903419785 -ROSCOMMON (72) HIGGINS TOWNSHIP (38020) P.O. BOX 576 ROSCOMMON MI 48653-9903 185 903419785 -ROSCOMMON (72) LAKE TOWNSHIP (44400) PO BOX 536 HOUGHTON LAKE MI 48629-9919 185 903419785 -ROSCOMMON (72) LYON TOWNSHIP (49840) PO BOX 48 HIGGINS LAKE MI 48627-9901 185 903419785 -ROSCOMMON (72) MARKEY TOWNSHIP (51780) 7400 E HOUGHTON LAKE DR HOUGHTON LAKE MI 48629-9916 185 903419785 -ROSCOMMON (72) NESTER TOWNSHIP (56980) 7855 S. MAPLE VALLEY ROAD ST. HELEN MI 48656-9903 185 903419785 -ROSCOMMON (72) RICHFIELD TOWNSHIP (68200) PO BOX 128 ST HELEN MI 48656-9901 185 903419785 -ROSCOMMON (72) ROSCOMMON TOWNSHIP (69560) P.O. BOX 610 HOUGHTON LAKE MI 48629-9917 185 903419785 -SAGINAW (73) ALBEE TOWNSHIP (00920) 10645 EAST ROAD BURT MI 48417-9900 185 903419785 -SAGINAW (73) BIRCH RUN TOWNSHIP (08560) PO BOX 152 BIRCH RUN MI 48415-9903 185 903419785 -SAGINAW (73) BLUMFIELD TOWNSHIP (09400) 1175 W VASSAR RD REESE MI 48757-9906 185 903419785 -SAGINAW (73) BRADY TOWNSHIP (09940) PO BOX 115 OAKLEY MI 48649-9900 185 903419785 -SAGINAW (73) BRANT TOWNSHIP (10100) PO BOX 155 ST CHARLES MI 48655-9907 185 903419785 -SAGINAW (73) BRIDGEPORT TOWNSHIP (10460) 6740 DIXIE HWY. BRIDGEPORT MI 48722-9902 185 903419785 -SAGINAW (73) BUENA VISTA CHARTER TOWNSHIP (11560) 3945 E HOLLAND RD SAGINAW MI 48601-9903 185 903419785 -SAGINAW (73) CARROLLTON TOWNSHIP (13540) 1645 MAPLERIDGE SAGINAW MI 48604-9902 185 903419785 -SAGINAW (73) CHAPIN TOWNSHIP (14660) 20400 W CUPP ROAD ELSIE MI 48831-9900 185 903419785 -SAGINAW (73) CHESANING TOWNSHIP (15160) 1025 BRADY STREET CHESANING MI 48616-9903 185 903419785 -SAGINAW (73) FRANKENMUTH CITY (30200) 240 W. GENESEE ST FRANKENMUTH MI 48734-9904 185 903419785 -SAGINAW (73) FRANKENMUTH TOWNSHIP (30220) P O BOX 245 FRANKENMUTH MI 48734-9909 185 903419785 -SAGINAW (73) FREMONT TOWNSHIP (30720) 6755 S. HEMLOCK RD. SAINT CHARLES MI 48655-9905 185 903419785 -SAGINAW (73) JAMES TOWNSHIP (41480) 6060 SWAN CREEK RD SAGINAW MI 48609-9902 185 903419785 -SAGINAW (73) JONESFIELD TOWNSHIP (41900) P.O. BOX 117 MERRILL MI 48637-9901 185 903419785 -SAGINAW (73) KOCHVILLE TOWNSHIP (43800) 5851 MACKINAW ROAD SAGINAW MI 48604-9904 185 903419785 -SAGINAW (73) LAKEFIELD TOWNSHIP (44560) PO BOX 397 MERRILL MI 48637-9900 185 903419785 -SAGINAW (73) MAPLE GROVE TOWNSHIP (51060) 17010 LINCOLN RD NEW LOTHROP MI 48460-9903 185 903419785 -SAGINAW (73) MARION TOWNSHIP (51700) 11895 S MERRILL RD BRANT MI 48614-9901 185 903419785 -SAGINAW (73) RICHLAND TOWNSHIP (68340) 1180 NORTH HEMLOCK ROAD HEMLOCK MI 48626-9904 185 903419785 -SAGINAW (73) SAGINAW CITY (70520) 1315 S WASHINGTON AVENUE Room 102 SAGINAW MI 48601-9902 185 903419785 -SAGINAW (73) SAGINAW TOWNSHIP (70540) PO BOX 6400 SAGINAW MI 48608-9901 185 903419785 -SAGINAW (73) SPAULDING TOWNSHIP (75480) 5025 EAST RD SAGINAW MI 48601-9905 185 903419785 -SAGINAW (73) ST CHARLES TOWNSHIP (70660) 1003 N SAGINAW ST ST CHARLES MI 48655-9904 185 903419785 -SAGINAW (73) SWAN CREEK TOWNSHIP (77660) 11415 LAKEFIELD RD ST CHARLES MI 48655-9906 185 903419785 -SAGINAW (73) TAYMOUTH TOWNSHIP (79100) 4343 E BIRCH RUN RD BIRCH RUN MI 48415-9901 185 903419785 -SAGINAW (73) THOMAS TOWNSHIP (79520) 249 N MILLER ROAD SAGINAW MI 48609-9904 185 903419785 -SAGINAW (73) TITTABAWASSEE TOWNSHIP (79840) PO BOX 158 FREELAND MI 48623-9902 185 903419785 -SAGINAW (73) ZILWAUKEE CITY (89320) 319 TITTABAWASSEE SAGINAW MI 48604-9908 185 903419785 -SAGINAW (73) ZILWAUKEE TOWNSHIP (89340) 6189 SHERMAN RD SAGINAW MI 48604-9901 185 903419785 -SANILAC (76) ARGYLE TOWNSHIP (03460) 4695 SHELDON RD SNOVER MI 48472-9900 185 903419785 -SANILAC (76) AUSTIN TOWNSHIP (04400) 1991 EAST CASS CITY ROAD UBLY MI 48475-9900 185 903419785 -SANILAC (76) BRIDGEHAMPTON TOWNSHIP (10420) PO BOX 83 CARSONVILLE MI 48419-9902 185 903419785 -SANILAC (76) BROWN CITY (11180) PO BOX 99 BROWN CITY MI 48416-9904 185 903419785 -SANILAC (76) BUEL TOWNSHIP (11540) P.O. BOX 313 CROSWELL MI 48422-9904 185 903419785 -SANILAC (76) CROSWELL CITY (18920) 100 N HOWARD AVE CROSWELL MI 48422-9903 185 903419785 -SANILAC (76) CUSTER TOWNSHIP (19460) 1520 FORESTER RD. DECKERVILLE MI 48427-9904 185 903419785 -SANILAC (76) DELAWARE TOWNSHIP (21380) 7979 MAPLE GROVE MINDEN CITY MI 48456-9901 185 903419785 -SANILAC (76) ELK TOWNSHIP (25280) 105 E GRIFFIN RD PECK MI 48466-9900 185 903419785 -SANILAC (76) ELMER TOWNSHIP (25540) 2299 W SANILAC SANDUSKY MI 48471-9906 185 903419785 -SANILAC (76) EVERGREEN TOWNSHIP (26740) 5673 SEVERANCE RD DECKER MI 48426-9900 185 903419785 -SANILAC (76) FLYNN TOWNSHIP (29240) 4934 BAILEY ROAD BROWN CITY MI 48416-9903 185 903419785 -SANILAC (76) FORESTER TOWNSHIP (29500) 5680 E DECKERVILLE ROAD DECKERVILLE MI 48427-9903 185 903419785 -SANILAC (76) FREMONT TOWNSHIP (30740) 2512 GALBRAITH LINE RD YALE MI 48097-9904 185 903419785 -SANILAC (76) GREENLEAF TOWNSHIP (35020) P O BOX 135 CASS CITY MI 48726-9908 185 903419785 -SANILAC (76) LAMOTTE TOWNSHIP (45460) 4824 MUSHROOM RD DECKER MI 48426-9901 185 903419785 -SANILAC (76) LEXINGTON TOWNSHIP (47300) 7227 HURON SUITE 200 LEXINGTON MI 48450-9900 185 903419785 -SANILAC (76) MAPLE VALLEY TOWNSHIP (51380) 6810 MOWERSON ROAD BROWN CITY MI 48416-9901 185 903419785 -SANILAC (76) MARION TOWNSHIP (51720) PO BOX 298 DECKERVILLE MI 48427-9905 185 903419785 -SANILAC (76) MARLETTE CITY (51820) 6436 MORRIS ST. MARLETTE MI 48453-9903 185 903419785 -SANILAC (76) MARLETTE TOWNSHIP (51840) 6725 AIRPORT RD MARLETTE MI 48453-9901 185 903419785 -SANILAC (76) MINDEN TOWNSHIP (54540) 1657 MAIN STREET MINDEN CITY MI 48456-9900 185 903419785 -SANILAC (76) MOORE TOWNSHIP (55320) PO BOX 123 SNOVER MI 48472-9902 185 903419785 -SANILAC (76) SANDUSKY CITY (71540) 26 W SPEAKER ST SANDUSKY MI 48471-9903 185 903419785 -SANILAC (76) SANILAC TOWNSHIP (71580) PO BOX 631 PORT SANILAC MI 48469-9902 185 903419785 -SANILAC (76) SPEAKER TOWNSHIP (75500) PO BOX 177 MELVIN MI 48454-9900 185 903419785 -SANILAC (76) WASHINGTON TOWNSHIP (84140) 1705 ROWE RD CARSONVILLE MI 48419-9904 185 903419785 -SANILAC (76) WATERTOWN TOWNSHIP (84440) PO BOX 47 SANDUSKY MI 48471-9904 185 903419785 -SANILAC (76) WHEATLAND TOWNSHIP (86580) 3860 STRINGER RD. DECKERVILLE MI 48427-9901 185 903419785 -SANILAC (76) WORTH TOWNSHIP (88760) 6903 S. LAKESHORE ROAD LEXINGTON MI 48450-9902 185 903419785 -SCHOOLCRAFT (77) DOYLE TOWNSHIP (22960) 654N W. GULLIVER LAKE RD GULLIVER MI 49840-9900 185 903419785 -SCHOOLCRAFT (77) GERMFASK TOWNSHIP (31940) P.O. B0X 87 GERMFASK MI 49836-9900 185 903419785 -SCHOOLCRAFT (77) HIAWATHA TOWNSHIP (37940) PO BOX 503 MANISTIQUE MI 49854-9902 185 903419785 -SCHOOLCRAFT (77) INWOOD TOWNSHIP (40840) 1191S COUNTY RD 442 COOKS MI 49817-9900 185 903419785 -SCHOOLCRAFT (77) MANISTIQUE CITY (50760) PO BOX 515 MANISTIQUE MI 49854-9900 185 903419785 -SCHOOLCRAFT (77) MANISTIQUE TOWNSHIP (50780) PO BOX 368 MANISTIQUE MI 49854-9901 185 903419785 -SCHOOLCRAFT (77) MUELLER TOWNSHIP (56060) 1502W QUARRY RD GULLIVER MI 49840-9902 185 903419785 -SCHOOLCRAFT (77) SENEY TOWNSHIP (72500) P.O. BOX 116 SENEY MI 49883-9900 185 903419785 -SCHOOLCRAFT (77) THOMPSON TOWNSHIP (79580) 1530S LITTLE HARBOR RD MANISTIQUE MI 49854-9903 185 903419785 -SHIAWASSEE (78) ANTRIM TOWNSHIP (03120) 12014 BANCROFT ROAD MORRICE MI MORRICE MI 185 903419785 -SHIAWASSEE (78) BENNINGTON TOWNSHIP (07280) 5849 S. M-52 OWOSSO MI 48867-9906 185 903419785 -SHIAWASSEE (78) BURNS TOWNSHIP (11880) PO BOX 397 BYRON MI 48418-9901 185 903419785 -SHIAWASSEE (78) CALEDONIA CHARTER TOWNSHIP (12520) 135 N. STATE ROAD OWOSSO MI 48867-9900 185 903419785 -SHIAWASSEE (78) CORUNNA CITY (18300) 402 N SHIAWASSEE ST CORUNNA MI 48817-9900 185 903419785 -SHIAWASSEE (78) DURAND CITY (23500) 215 W CLINTON ST DURAND MI 48429-9900 185 903419785 -SHIAWASSEE (78) FAIRFIELD TOWNSHIP (27040) 8944 W JUDDVILLE RD ELSIE MI 48831-9903 185 903419785 -SHIAWASSEE (78) HAZELTON TOWNSHIP (37440) P. O. BOX #188 NEW LOTHROP MI 48460-9902 185 903419785 -SHIAWASSEE (78) LAINGSBURG CITY (44200) PO BOX 178 LAINGSBURG MI 48848-9901 185 903419785 -SHIAWASSEE (78) MIDDLEBURY TOWNSHIP (53680) PO BOX 622 OVID MI 48866-9900 185 903419785 -SHIAWASSEE (78) NEW HAVEN TOWNSHIP (57400) 2705 EASTON RD OWOSSO MI 48867-9903 185 903419785 -SHIAWASSEE (78) OWOSSO CITY (61940) 301 WEST MAIN STREET OWOSSO MI 48867-9904 185 903419785 -SHIAWASSEE (78) OWOSSO TOWNSHIP (61960) 410 S. DELANEY RD OWOSSO MI 48867-9905 185 903419785 -SHIAWASSEE (78) PERRY CITY (63700) 203 W POLLY ST PERRY MI 48872-9900 185 903419785 -SHIAWASSEE (78) PERRY TOWNSHIP (63720) 2770 WEST ELLSWORTH ROAD PERRY MI 48872-9901 185 903419785 -SHIAWASSEE (78) RUSH TOWNSHIP (70260) PO BOX 6 HENDERSON MI 48841-9900 185 903419785 -SHIAWASSEE (78) SCIOTA TOWNSHIP (71960) 8430 W PARKER RD LAINGSBURG MI 48848-9900 185 903419785 -SHIAWASSEE (78) SHIAWASSEE TOWNSHIP (73520) PO BOX 86 BANCROFT MI 48414-9901 185 903419785 -SHIAWASSEE (78) VENICE TOWNSHIP (81880) PO BOX 222 LENNON MI 48449-9902 185 903419785 -SHIAWASSEE (78) VERNON TOWNSHIP (82040) PO BOX 354 DURAND MI 48429-9903 185 903419785 -SHIAWASSEE (78) WOODHULL TOWNSHIP (88400) PO BOX 166 SHAFTSBURG MI 48882-4900 185 903419785 -ST CLAIR (74) ALGONAC CITY (01180) 805 ST CLAIR RIVER DR ALGONAC MI 48001-9900 185 903419785 -ST CLAIR (74) BERLIN TOWNSHIP (07760) 740 CAPAC ROAD ALLENTON MI 48002-9900 185 903419785 -ST CLAIR (74) BROCKWAY TOWNSHIP (10820) 7645 SAYLES RD YALE MI 48097-9902 185 903419785 -ST CLAIR (74) BURTCHVILLE TOWNSHIP (12020) 4000 BURTCH ROAD LAKEPORT MI 48059-9906 185 903419785 -ST CLAIR (74) CASCO TOWNSHIP (13720) 4512 MELDRUM RD CASCO MI 48064-9800 185 903419785 -ST CLAIR (74) CHINA TOWNSHIP (15540) 4560 INDIAN TR CHINA MI 48054-9901 185 903419785 -ST CLAIR (74) CLAY TOWNSHIP (16180) PO BOX 429 ALGONAC MI 48001-9902 185 903419785 -ST CLAIR (74) CLYDE TOWNSHIP (16760) 3350 VINCENT RD NORTH STREET MI 48049-9800 185 903419785 -ST CLAIR (74) COLUMBUS TOWNSHIP (17520) 1732 BAUMAN ROAD COLUMBUS MI 48063-9900 185 903419785 -ST CLAIR (74) COTTRELLVILLE TOWNSHIP (18400) 7008 MARSH ROAD COTTRELLVILLE MI 48039-9902 185 903419785 -ST CLAIR (74) EAST CHINA TOWNSHIP (23820) 5111 RIVER RD EAST CHINA MI 48054-9904 185 903419785 -ST CLAIR (74) EMMETT TOWNSHIP (25960) 11100 DUNNIGAN ROAD EMMETT MI 48022-9900 185 903419785 -ST CLAIR (74) FORT GRATIOT TOWNSHIP (29760) 3720 KEEWAHDIN RD FORT GRATIOT 48059-9907 185 903419785 -ST CLAIR (74) GRANT TOWNSHIP (34420) 7942 WILDCAT RD JEDDO MI 48032-9900 185 903419785 -ST CLAIR (74) GREENWOOD TOWNSHIP (35220) 9025 YALE RD GREENWOOD MI 48006-9900 185 903419785 -ST CLAIR (74) IRA TOWNSHIP (40920) 7085 MELDRUM ROAD FAIR HAVEN MI 48023-9900 185 903419785 -ST CLAIR (74) KENOCKEE TOWNSHIP (42740) P O BOX 400 AVOCA MI 48006-9800 185 903419785 -ST CLAIR (74) KIMBALL TOWNSHIP (43160) 2160 WADHAMS RD KIMBALL MI 48074-9803 185 903419785 -ST CLAIR (74) LYNN TOWNSHIP (49800) 13995 YALE ROAD YALE MI 48097-9901 185 903419785 -ST CLAIR (74) MARINE CITY CITY (51600) 260 SOUTH PARKER STREET MARINE CITY MI 48039-9903 185 903419785 -ST CLAIR (74) MARYSVILLE CITY (52080) 1255 DELAWARE AVE MARYSVILLE MI 48040-9903 185 903419785 -ST CLAIR (74) MUSSEY TOWNSHIP (56380) PO BOX 118 CAPAC MI 48014-9901 185 903419785 -ST CLAIR (74) PORT HURON CITY (65820) 100 MCMORRAN BOULEVARD RM 115 PORT HURON MI 48060-9914 185 903419785 -ST CLAIR (74) PORT HURON TOWNSHIP (65840) 3800 LAPEER ROAD PORT HURON MI 48060-9915 185 903419785 -ST CLAIR (74) RILEY TOWNSHIP (68620) PO BOX 563 MEMPHIS MI 48041-9901 185 903419785 -ST CLAIR (74) ST CLAIR CITY (70680) 547 N CARNEY DR ST. CLAIR MI 48079-9901 185 903419785 -ST CLAIR (74) ST CLAIR TOWNSHIP (70700) 1539 S. BARTLETT RD SAINT CLAIR MI 48079-9900 185 903419785 -ST CLAIR (74) WALES TOWNSHIP (82900) 1372 WALES CENTER RD. WALES MI 48027-9900 185 903419785 -ST CLAIR (74) YALE CITY (89000) 111 WEST MECHANIC ST YALE MI 48097-9903 185 903419785 -ST JOSEPH (75) BURR OAK TOWNSHIP (11940) P.O. BOX 241 BURR OAK MI 49030-9800 185 903419785 -ST JOSEPH (75) COLON TOWNSHIP (17370) PO BOX 608 COLON MI 49040-9801 185 903419785 -ST JOSEPH (75) CONSTANTINE TOWNSHIP (17860) 165 CANARIS ST CONSTANTINE MI 49042-9803 185 903419785 -ST JOSEPH (75) FABIUS TOWNSHIP (26920) PO BOX 455 THREE RIVERS MI 49093-9801 185 903419785 -ST JOSEPH (75) FAWN RIVER TOWNSHIP (27540) 31194 FAWN RIVER RD STURGIS MI 49091-9802 185 903419785 -ST JOSEPH (75) FLORENCE TOWNSHIP (29060) PO BOX 144 CONSTANTINE MI 49042-9806 185 903419785 -ST JOSEPH (75) FLOWERFIELD TOWNSHIP (29140) 12020 M-216 MARCELLUS MI 49067-9801 185 903419785 -ST JOSEPH (75) LEONIDAS TOWNSHIP (47020) PO BOX 145 LEONIDAS MI 49066-9801 185 903419785 -ST JOSEPH (75) LOCKPORT TOWNSHIP (49060) 58982 HOLTOM RD. THREE RIVERS MI 49093-9800 185 903419785 -ST JOSEPH (75) MENDON TOWNSHIP (53000) PO BOX 806 MENDON MI 49072-9805 185 903419785 -ST JOSEPH (75) MOTTVILLE TOWNSHIP (55780) 68596 THOMAS RD MOTTVILLE MI 49099-9800 185 903419785 -ST JOSEPH (75) NOTTAWA TOWNSHIP (59400) 112 SOUTH CLARK STREEST PO BOX 68 CENTREVILLE MI 49032-9809 185 903419785 -ST JOSEPH (75) PARK TOWNSHIP (62480) 20006 M60 EAST THREE RIVERS MI 49093-9803 185 903419785 -ST JOSEPH (75) SHERMAN TOWNSHIP (73300) PO BOX 296 STURGIS MI 49091-9803 185 903419785 -ST JOSEPH (75) STURGIS CITY (76960) 130 N NOTTAWA STREET STURGIS MI 49091-9801 185 903419785 -ST JOSEPH (75) STURGIS TOWNSHIP (76980) P. O. BOX 6 STURGIS MI 49091-9800 185 903419785 -ST JOSEPH (75) THREE RIVERS CITY (79760) 333 WEST MICHIGAN AVENUE THREE RIVERS MI 49093-9802 185 903419785 -ST JOSEPH (75) WHITE PIGEON TOWNSHIP (86940) PO BOX 340 WHITE PIGEON MI 49099-9802 185 903419785 -TUSCOLA (79) AKRON TOWNSHIP (00720) 4280 W BAY CITY FORESTVILLE RD UNIONVILLE MI 48767-9901 185 903419785 -TUSCOLA (79) ALMER TOWNSHIP (01620) 1310 CAMERON RD CARO MI 48723-9913 185 903419785 -TUSCOLA (79) ARBELA TOWNSHIP (03220) 8935 BIRCH RUN RD MILLINGTON MI 48746-9901 185 903419785 -TUSCOLA (79) CARO CITY (13420) 317 S. STATE ST. CARO MI 48723-9905 185 903419785 -TUSCOLA (79) COLUMBIA TOWNSHIP (17420) PO BOX 136 UNIONVILLE MI 48767-9902 185 903419785 -TUSCOLA (79) DAYTON TOWNSHIP (19980) PO BOX 305 MAYVILLE MI 48744-9900 185 903419785 -TUSCOLA (79) DENMARK TOWNSHIP (21600) PO BOX 44 RICHVILLE MI 48758-9901 185 903419785 -TUSCOLA (79) ELKLAND TOWNSHIP (25300) 6691 CHURCH ST CASS CITY MI 48726-9910 185 903419785 -TUSCOLA (79) ELLINGTON TOWNSHIP (25380) 2753 E CARO ROAD CARO MI 48723-9910 185 903419785 -TUSCOLA (79) ELMWOOD TOWNSHIP (25720) 4796 CASS CITY RD CASS CITY MI 48726-9912 185 903419785 -TUSCOLA (79) FAIRGROVE TOWNSHIP (27100) 5758 VAN GEISEN ROAD FAIRGROVE MI 48733-9903 185 903419785 -TUSCOLA (79) FREMONT TOWNSHIP (30760) PO BOX 216 MAYVILLE MI 48744-9903 185 903419785 -TUSCOLA (79) GILFORD TOWNSHIP (32160) 6230 GILFORD RD. FAIRGROVE MI 48733-9901 185 903419785 -TUSCOLA (79) INDIANFIELDS TOWNSHIP (40440) 1633 MERTZ RD. CARO MI 48723-9908 185 903419785 -TUSCOLA (79) JUNIATA TOWNSHIP (42140) 4330 WILDER RD VASSAR MI 48768-9914 185 903419785 -TUSCOLA (79) KINGSTON TOWNSHIP (43400) P.O. BOX 276 KINGSTON MI 48741-9901 185 903419785 -TUSCOLA (79) KOYLTON TOWNSHIP (43880) PO BOX 225 KINGSTON MI 48741-9902 185 903419785 -TUSCOLA (79) MILLINGTON TOWNSHIP (54240) PO BOX 247 MILLINGTON MI 48746-9908 185 903419785 -TUSCOLA (79) NOVESTA TOWNSHIP (59420) 3016 N. CEMETERY RD. CASS CITY MI 48726-9909 185 903419785 -TUSCOLA (79) TUSCOLA TOWNSHIP (80940) PO BOX 1702 VASSAR MI 48768-9912 185 903419785 -TUSCOLA (79) VASSAR CITY (81840) 287 E HURON VASSAR MI 48768-9910 185 903419785 -TUSCOLA (79) VASSAR TOWNSHIP (81860) 4470 W. SAGINAW VASSAR MI 48768-9915 185 903419785 -TUSCOLA (79) WATERTOWN TOWNSHIP (84460) PO BOX 39 FOSTORIA MI 48435-9900 185 903419785 -TUSCOLA (79) WELLS TOWNSHIP (85280) 2190 FRANKFORD RD CARO MI 48723-9914 185 903419785 -TUSCOLA (79) WISNER TOWNSHIP (88080) 4441 BATH RD FAIRGROVE MI 48733-9902 185 903419785 -VAN BUREN (80) ALMENA TOWNSHIP (01600) 27625 COUNTY ROAD 375 PAW PAW MI 49079-9803 185 903419785 -VAN BUREN (80) ANTWERP TOWNSHIP (03140) 24821 FRONT AVE MATTAWAN MI 49071-9842 185 903419785 -VAN BUREN (80) ARLINGTON TOWNSHIP (03500) 52022 34TH AVE BANGOR MI 49013-9810 185 903419785 -VAN BUREN (80) BANGOR CITY (05140) 257 W MONROE ST BANGOR MI 49013-9811 185 903419785 -VAN BUREN (80) BANGOR TOWNSHIP (05160) 32550 C R 687 BANGOR MI 49013-9812 185 903419785 -VAN BUREN (80) BLOOMINGDALE TOWNSHIP (09240) PO BOX 11 BLOOMINGDALE MI 49026-9801 185 903419785 -VAN BUREN (80) COLUMBIA TOWNSHIP (17440) PO BOX 323 GRAND JUNCTION MI 49065-9801 185 903419785 -VAN BUREN (80) COVERT TOWNSHIP (18560) PO BOX 35 COVERT MI 49043-9802 185 903419785 -VAN BUREN (80) DECATUR TOWNSHIP (21060) PO BOX 33 DECATUR MI 49045-9800 185 903419785 -VAN BUREN (80) GENEVA TOWNSHIP (31840) 68044 RIVERVIEW DRIVE SOUTH HAVEN MI 49090-9806 185 903419785 -VAN BUREN (80) GOBLES CITY (32640) PO BOX 38 GOBLES MI 49055-9802 185 903419785 -VAN BUREN (80) HAMILTON TOWNSHIP (36180) P O BOX 35 DECATUR MI 49045-9801 185 903419785 -VAN BUREN (80) HARTFORD CITY (36960) 19 WEST MAIN STREET HARTFORD MI 49057-9809 185 903419785 -VAN BUREN (80) HARTFORD TOWNSHIP (36980) 61310 COUNTY RD 687 HARTFORD MI 49057-9808 185 903419785 -VAN BUREN (80) KEELER TOWNSHIP (42500) 64151 TERRITORIAL RD W HARTFORD MI 49057-9807 185 903419785 -VAN BUREN (80) LAWRENCE TOWNSHIP (46460) PO BOX 445 LAWRENCE MI 49064-9800 185 903419785 -VAN BUREN (80) PAW PAW TOWNSHIP (63000) 114 N. GREMPS ST PAW PAW MI 49079-9804 185 903419785 -VAN BUREN (80) PINE GROVE TOWNSHIP (64280) 26520 C R 388 GOBLES MI 49055-9803 185 903419785 -VAN BUREN (80) PORTER TOWNSHIP (65760) 88040 M 40 HWY LAWTON MI 49065-9806 185 903419785 -VAN BUREN (80) SOUTH HAVEN CITY (74980) 539 PHOENIX ST SOUTH HAVEN MI 49090-9807 185 903419785 -VAN BUREN (80) SOUTH HAVEN TOWNSHIP (75000) 09761 BLUE STAR MEMORIAL HIGHWAY SOUTH HAVEN MI 49090-9803 185 903419785 -VAN BUREN (80) WAVERLY TOWNSHIP (84820) 42114 M-43 HWY PAW PAW MI 49079-9805 185 903419785 -WASHTENAW (81) ANN ARBOR CITY (03000) PO BOX 8647 ANN ARBOR MI 48107-9900 185 903419785 -WASHTENAW (81) ANN ARBOR TOWNSHIP (03020) 3792 PONTIAC TRAIL ANN ARBOR MI 48105-9820 185 903419785 -WASHTENAW (81) AUGUSTA TOWNSHIP (04180) PO BOX 100 WHITTAKER MI 48190-9900 185 903419785 -WASHTENAW (81) BRIDGEWATER TOWNSHIP (10560) 10990 CLINTON RD MANCHESTER MI 48158-9900 185 903419785 -WASHTENAW (81) CHELSEA CITY (15020) 305 S. MAIN STREET CHELSEA MI 48118-9807 185 903419785 -WASHTENAW (81) DEXTER CITY (22160) 3515 BROAD ST DEXTER MI 48130-9904 185 903419785 -WASHTENAW (81) DEXTER TOWNSHIP (22180) 6880 DEXTER PINCKNEY ROAD DEXTER MI 48130-9906 185 903419785 -WASHTENAW (81) FREEDOM TOWNSHIP (30520) 11508 PLEASANT LAKE ROAD MANCHESTER MI 48158-9902 185 903419785 -WASHTENAW (81) LIMA TOWNSHIP (47460) 12172 JACKSON ROAD STE 200 "DEXTER, MI" 48130-9908 185 903419785 -WASHTENAW (81) LODI TOWNSHIP (49120) 3755 PLEASANT LAKE ROAD ANN ARBOR MI 48103-9906 185 903419785 -WASHTENAW (81) LYNDON TOWNSHIP (49780) 17751 N TERRITORIAL RD CHELSEA MI 48118-9904 185 903419785 -WASHTENAW (81) CITY OF MANCHESTER (50660) 912 CITY RD MANCHESTER MI 48158-9904 185 903419785 -WASHTENAW (81) MANCHESTER TOWNSHIP (50680) PO BOX 668 MANCHESTER MI 48158-9903 185 903419785 -WASHTENAW (81) MILAN CITY (53920) 147 WABASH STREET MILAN MI 48160-9901 185 903419785 -WASHTENAW (81) NORTHFIELD TOWNSHIP (58280) P.O. BOX 576 WHITMORE LAKE MI 48189-9900 185 903419785 -WASHTENAW (81) PITTSFIELD CHARTER TOWNSHIP (64560) 6201 W. MICHIGAN AVE ANN ARBOR MI 48108-9948 185 903419785 -WASHTENAW (81) SALEM TOWNSHIP (71130) PO BOX 819 SOUTH LYONS MI 48178-9905 185 903419785 -WASHTENAW (81) SALINE CITY (71140) 100 N. HARRIS STREET SALINE MI 48176-9905 185 903419785 -WASHTENAW (81) SALINE TOWNSHIP (71160) 4254 ARKONA SALINE MI 48176-9903 185 903419785 -WASHTENAW (81) SCIO TOWNSHIP (71940) 827 NORTH ZEEB ROAD ANN ARBOR MI 48103-9907 185 903419785 -WASHTENAW (81) SHARON TOWNSHIP (72760) 18010 W. PLEASANT LAKE RD. MANCHESTER MI 48158-9901 185 903419785 -WASHTENAW (81) SUPERIOR TOWNSHIP (77560) 3040 N. PROSPECT RD YPSILANTI MI 48198-9906 185 903419785 -WASHTENAW (81) SYLVAN TOWNSHIP (77800) 18027 OLD US HIGHWAY 12 CHELSEA MI 48118-9909 185 903419785 -WASHTENAW (81) WEBSTER TOWNSHIP (85100) 5665 WEBSTER CHURCH RD DEXTER MI 48130-9907 185 903419785 -WASHTENAW (81) YORK TOWNSHIP (89100) 11560 STONY CREEK RD. MILAN MI 41860-9903 185 903419785 -WASHTENAW (81) YPSILANTI CITY (89140) 1 SOUTH HURON ST YPSILANTI MI 48197-9910 185 903419785 -WASHTENAW (81) YPSILANTI TOWNSHIP (89160) 7200 S HURON RIVER DR YPSILANTI MI 48197-9920 185 903419785 -WAYNE (82) ALLEN PARK CITY (01380) 15915 SOUTHFIELD RD ALLEN PARK MI 48101-9800 185 903419785 -WAYNE (82) BELLEVILLE CITY (07020) 6 MAIN ST BELLEVILLE MI 48111-9904 185 903419785 -WAYNE (82) BROWNSTOWN TOWNSHIP (11220) 21313 TELEGRAPH RD BROWNSTOWN MI 48183-9910 185 903419785 -WAYNE (82) CANTON TOWNSHIP (13120) 1150 S CANTON CENTER RD CANTON MI 48188-9800 185 903419785 -WAYNE (82) DEARBORN CITY (21000) 16901 MICHIGAN AVE STE 11 DEARBORN MI 48126-9904 185 903419785 -WAYNE (82) DEARBORN HEIGHTS CITY (21020) 6045 FENTON ST DEARBORN HEIGHTS MI 48127-9900 185 903419785 -WAYNE (82) DETROIT CITY (22000) 2978 W. GRAND BLVD. DETROIT MI 48202-9897 185 903419785 -WAYNE (82) ECORSE CITY (24740) 3869 WEST JEFFERSON AVE. ECORSE MI 48229-9902 185 903419785 -WAYNE (82) FLAT ROCK CITY (28360) 25500 GIBRALTAR ROAD FLAT ROCK MI 48134-9905 185 903419785 -WAYNE (82) GARDEN CITY CITY (31420) 6000 MIDDLEBELT ROAD GARDEN CITY MI 48135-9905 185 903419785 -WAYNE (82) GIBRALTAR CITY (32020) 29450 MUNRO AVE GIBRALTAR MI 48173-9904 185 903419785 -WAYNE (82) GROSSE ILE TOWNSHIP (35420) PO BOX 300 GROSSE ILE MI 48138-9903 185 903419785 -WAYNE (82) GROSSE POINTE CITY (35480) 17147 MAUMEE AVENUE GROSSE POINTE MI 48230-9903 185 903419785 -WAYNE (82) GROSSE POINTE FARMS CITY (35520) 90 KERBY ROAD GROSSE POINTE FARMS MI 48236-9916 185 903419785 -WAYNE (82) GROSSE POINTE PARK CITY (35540) 15115 E JEFFERSON STE 2 GROSSE POINTE PARK MI 48230-9902 185 903419785 -WAYNE (82) GROSSE POINTE WOODS CITY (35580) 20025 MACK PLAZA DR. GROSSE POINTE WOODS MI 48236-9915 185 903419785 -WAYNE (82) HAMTRAMCK CITY (36280) 3401 EVALINE HAMTRAMCK MI 48212-9902 185 903419785 -WAYNE (82) HARPER WOODS CITY (36700) 19617 HARPER AVENUE HARPER WOODS MI 48225-9902 185 903419785 -WAYNE (82) HIGHLAND PARK CITY (38180) 12050 WOODWARD AVE HIGHLAND PARK MI 48203-9900 185 903419785 -WAYNE (82) HURON TOWNSHIP (40040) 22950 HURON RIVER DR NEW BOSTON MI 48164-9901 185 903419785 -WAYNE (82) INKSTER CITY (40680) 26215 TROWBRIDGE ST INKSTER MI 48141-9906 185 903419785 -WAYNE (82) LINCOLN PARK CITY (47800) 1355 SOUTHFIELD RD. LINCOLN PARK MI 48146-9906 185 903419785 -WAYNE (82) LIVONIA CITY (49000) 33000 CIVIC CENTER DRIVE LIVONIA MI 48154-9907 185 903419785 -WAYNE (82) MELVINDALE CITY (52940) 3100 OAKWOOD BLVD MELVINDALE MI 48122-9903 185 903419785 -WAYNE (82) NORTHVILLE TOWNSHIP (59000) 44405 SIX MILE ROAD NORTHVILLE MI 48168-9901 185 903419785 -WAYNE (82) PLYMOUTH CITY (65060) 201 S MAIN ST PLYMOUTH MI 48170-9907 185 903419785 -WAYNE (82) PLYMOUTH TOWNSHIP (65080) 9955 N HAGGERTY RD PLYMOUTH MI 48170-9908 185 903419785 -WAYNE (82) REDFORD TOWNSHIP (67625) 15145 BEECH DALY RD REDFORD MI 48239-9941 185 903419785 -WAYNE (82) RIVER ROUGE CITY (68760) 10600 W. JEFFERSON AVE. STE 1 RIVER ROUGE MI 48218-9902 185 903419785 -WAYNE (82) RIVERVIEW CITY (68880) 14100 CIVIC PARK DR. RIVERVIEW MI 48193-9901 185 903419785 -WAYNE (82) ROCKWOOD CITY (69180) 32409 FORT STREET ROCKWOOD MI 48173-9901 185 903419785 -WAYNE (82) ROMULUS CITY (69420) 11111 WAYNE RD. ROMULUS MI 48174-9900 185 903419785 -WAYNE (82) SOUTHGATE CITY (74960) 14400 DIX TOLEDO RD SOUTHGATE MI 48195-9909 185 903419785 -WAYNE (82) SUMPTER TOWNSHIP (77360) 23480 SUMPTER ROAD BELLEVILLE MI 48111-9900 185 903419785 -WAYNE (82) TAYLOR CITY (79000) 23555 GODDARD TAYLOR MI 48180-9902 185 903419785 -WAYNE (82) TRENTON CITY (80420) 2800 THIRD STREET TRENTON MI 48183-9909 185 903419785 -WAYNE (82) VAN BUREN TOWNSHIP (81660) 46425 TYLER RD VAN BUREN TOWNSHIP MI 48111-9903 185 903419785 -WAYNE (82) WAYNE CITY (84940) 3355 SOUTH WAYNE RD WAYNE MI 48184-9906 185 903419785 -WAYNE (82) WESTLAND CITY (86000) 36300 WARREN RD. WESTLAND MI 48185-9907 185 903419785 -WAYNE (82) WOODHAVEN CITY (88380) 21869 WEST ROAD WOODHAVEN MI 48183-9911 185 903419785 -WAYNE (82) WYANDOTTE CITY (88900) 3200 BIDDLE AVENUE 1ST FLOOR WYANDOTTE MI 48192-9903 185 903419785 -WEXFORD (83) ANTIOCH TOWNSHIP (03060) PO BOX 690 MESICK MI 49668-9990 185 903419785 -WEXFORD (83) BOON TOWNSHIP (09580) 204 MYRTLE ST BOON MI 49618-9900 185 903419785 -WEXFORD (83) CADILLAC CITY (12320) 200 N. LAKE ST. CADILLAC MI 49601-9900 185 903419785 -WEXFORD (83) CEDAR CREEK TOWNSHIP (14120) 10321 E M-42 MANTON MI 49663-9902 185 903419785 -WEXFORD (83) CHERRY GROVE TOWNSHIP (15060) 4830 E M-55 CADILLAC MI 49601-9910 185 903419785 -WEXFORD (83) CLAM LAKE TOWNSHIP (15860) 8809 E. M-115 CADILLAC MI 49601-9901 185 903419785 -WEXFORD (83) COLFAX TOWNSHIP (17200) 3283 E 24 MILE RD CADILLAC MI 49601-9904 185 903419785 -WEXFORD (83) GREENWOOD TOWNSHIP (35240) PO BOX 398 MANTON MI 49756-9803 185 903419785 -WEXFORD (83) HANOVER TOWNSHIP (36420) 4910 SQUAW TRAIL BUCKLEY MI 49620-9900 185 903419785 -WEXFORD (83) HARING TOWNSHIP (36600) 515 BELL AVENUE CADILLAC MI 49601-9906 185 903419785 -WEXFORD (83) HENDERSON TOWNSHIP (37640) 9522 S 21 RD CADILLAC MI 49601-9907 185 903419785 -WEXFORD (83) LIBERTY TOWNSHIP (47380) PO BOX 334 MANTON MI 49663-9901 185 903419785 -WEXFORD (83) MANTON CITY (50880) PO BOX 100 MANTON CITY MI 49663-9900 185 903419785 -WEXFORD (83) SELMA TOWNSHIP (72380) 3577 S 31 RD CADILLAC MI 49601-9909 185 903419785 -WEXFORD (83) SLAGLE TOWNSHIP (74220) 5797 S GRANDVIEW HWY HARRIETTA MI 49638-9971 185 903419785 -WEXFORD (83) SOUTH BRANCH TOWNSHIP (74820) 7257 W 48 RD CADILLAC MI 49601-9903 185 903419785 -WEXFORD (83) SPRINGVILLE TOWNSHIP (75940) PO BOX 323 MESICK MI 49668-9900 185 903419785 -WEXFORD (83) WEXFORD TOWNSHIP (86500) 7730 N 11 RD MESICK MI 49668-9902 185 903419785 -LAST UPDATED 1/30/25 -